Sunday, August 17, 2008

SymPy 0.6.2 released

SymPy 0.6.2 has been released on August 17, 2008. It is available at

http://code.google.com/p/sympy/

About SymPy

SymPy is a Python library for symbolic mathematics. It aims to become a full-featured computer algebra system (CAS) while keeping the code as simple as possible in order to be comprehensible and easily extensible. SymPy is written entirely in Python and does not require any external libraries.

user-visible changes:
  • SymPy is now 50% faster on average (cache:on) and 130% (cache:off) compared to previous release.
  • adaptive and faster evalf() (commit 1, 2, 3, 4, 5)
  • evalf: numerical summation of hypergeometric series (commit)
  • evalf: fast and accurate numerical summation (commit 1, 2, 3)
  • evalf: oscillatory quadrature (commit)
  • integrals now support variable transformation (commit)
  • we can now integrate(f(x)⋅diff(f(x),x), x) (commit 1, 2, 3)
  • we can now solve a⋅cos(x)=y (comit) and exp(x)+exp(-x)=y (commit 1, 2)
  • printing system refactored (commit 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21)
  • pprint: new symbol for multiply in unicode mode(x*y -> x⋅y) (commit)
  • pprint: matrices now look much better (commit) + example (commit 1, 2)
  • printing of dicts and sets are now more human-friendly (commit 1, 2, 3, 5)
  • latex: now supports sub- and superscripts in symbol names (commit)
  • RootSum.doit, now works on all roots (commit)
  • Wild can now have additional predicates (commit)
  • numpy-like zeros and ones functions (commit 1, 2, 3, 4)
  • var('x,y,z') now works (commit)
  • many bug fixes
changes that affected speed:
  • ((x+y+z)**50).expand() is now 4.8x faster (commit 1, 2 + other commits which all summed up)
  • big assumptions cleanup and rewrite (commit1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25)
  • access to all object attributes is now ~2.5 times faster (commit)
  • we try not to let 'is_commutative' to go through (slow) assumptions path (commit 1, 2)
  • Add/Mul were optimized (for some cases significantly) (commit 1, 2, 3, 4, 5, 6)
general cleanup:
  • isympy and sympy.interactive code were merged (commit)
  • multiple inheritance removed (NoArithMeths, NoRelMeths, RelMeths, ArithMeths are gone) (commit 1, 2, 3, 4, 5, 6)
  • .nseries() is now used as default in .series()
  • doctesting was made more robust (commit 1, 2, 3, 4, 5)

The following 11 people have contributed patches to this release:

  • Sebastian Krämer
  • Fredrik Johansson
  • Ondřej Čertík
  • Mateusz Paprocki
  • Stefano Maggiolo
  • Robert Cimrman
  • Sebastian Krause
  • Bastian Weber
  • Sebastian Kreft
  • Štěpán Roučka
  • Kirill Smelkov

The following people helped review patches:

  • Riccardo Gori
  • Fredrik Johansson
  • Kirill Smelkov
  • Ondřej Čertík
  • Mateusz Paprocki

Other news: we wrote a new core sympyx in Cython that is an order of magnitude faster than the current SymPy, yet it uses the same architecture, so it's our priority now to merge it back and then gradualy speedup things, so that SymPy is as fast as any other symbolic package.

SymPy will remain pure Python by default, but it will be possible to use Cythonized core optionally to gain speed.