Saturday, April 26, 2008

SymPy 0.5.14 released

SymPy 0.5.14 has been released on April 26, 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 25% faster on average compared to the previous release (see below)
  • Documentation was improved a lot (commit 1, 2, 3). See http://docs.sympy.org/
  • rsolve_poly & rsolve_hyper fixed (commit 1, 2)
  • subs and subs_dict unified to .subs() (commit 1, 2)
  • faster and more robust polynomials module (commit 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ..., look into the hg history)
  • improved Matrix.det(), implemented Berkowitz algorithm (commit 1, 2)
  • improved isympy (interactive shell for SymPy) (commit 1, 2, 3, 4, 5, 6)
  • pretty-printing improved (commit 1, 2, 3)
  • Rel, Eq, Ne, Lt, Le, Gt, Ge implemented (commit 1)
  • Limit class represents unevaluated limits now (commit 1)
  • Bailey-Borwein-Plouffe algorithm (finds the nth hexidecimal digit of pi without calculating the previous digits) implemented (commit 1)
  • solver for transcendental equations added (commit 1)
  • .nseries() methods implemented (more robust/faster than .oseries) (commit 1, 2)
  • multivariate Lambdas implemented (commit 1)


changes that affected speed:
  • __eq__/__ne__/__nonzero__ returns True/False directly so dict lookups are not expensive anymore (commit 1, 2, 3, 4, 5, 6)
  • sum(x**i/i,i=1..400) is now 4.8x faster (commit 1, 2, 3, 4, 5)
  • isinstance(term, C.Mul) was replaced by term.is_Mul and similarly for other basic classes (commit 1, 2)



Plus a lot of smaller bugfixes, you can browse our Mercurial history for details.


This release contains patches from 15 developers, which is so far the highest number of people/release (33 people have sent patches to SymPy so far, see the list of contributors):

  • Mateusz Paprocki
  • Fredrik Johansson
  • James Aspnes
  • Friedrich Hagedorn
  • Pan Peng
  • Abderrahim Kitouni
  • Nimish Telang
  • Jurjen N.E. Bos
  • Elrond der Elbenfuerst
  • Rizgar Mella
  • Felix Kaiser
  • Roberto Nobrega
  • David Roberts
  • Ondřej Čertík
  • Kirill Smelkov



If you'd like to contribute too, you can browse our open issues here:

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

and then we suggest you to read the SymPy Patches Tutorial, that explains how to work with Mercurial effectively and how to create and send patches easily (not only) to SymPy. Any contribution is welcome, be it documentation, code, or just hanging out on our mailinglist or IRC (#sympy at freenode).

Thursday, March 6, 2008

SymPy 0.5.13 released

It took us a little longer to release, so we have a longer changelog this time:

user-visible changes:
  • SymPy is now 2x faster in average compared to the previous release (see below)
  • integrate() can handle most of the basic integrals now (commit)
  • interactive experience with isympy was improved through adding support for [], () and {} to pretty-printer, and switching to it as the default ipython printer (commit 1, 2, 3)
  • new trim() function to map all non-atomic expressions, ie. functions, derivatives and more complex objects, to symbols and remove common factors from numerator and denominator. also cancel() was improved (commit 1, 2)
  • .expand() for noncommutative symbols fixed (commit)
  • bug in (x+y+sin(x)).as_independent() fixed (commit)
  • .subs_dict() improved (commit)
  • support for plotting geometry objects added (commit)
  • bug in .tangent_line() of ellipse fixed (commit 1, 2)
  • new atan2 function and assotiated fixes for .arg() and expanding rational powers (commit 1, 2, 3)
  • new .coeff() method for returning coefficient of a poly (commit 1, 2, 3)
  • pretty-printer now uses unicode by default (commit)
  • recognition of geometric sums were generalized (commit)
  • .is_positive and .is_negative now fallback to evalf() when appropriate (commit)
  • as the result oo*(pi-1) now correctly simplifies to oo (commit)
  • support for objects which provide __int__ method was added (commit)
  • we finally started SymPy User's Guide (commit 1, 2)
changes that affected speed:
  • first patches with 25% speedup (commit 1, 2, 3, 4)
  • Basic.cos et. al. removed, use C.cos instead (commit 1, 2, 3, 4)
  • sympy.core now uses direct imports (commit 1, 2)
  • sympifyit decorator (commit 1, 2, 3, 4, 5, 6, 7)
  • speedup Integers creation and arithmetic (commit 1, 2)
  • speedup unary operations for singleton numbers (commit)
  • remove silly slowdowns from fast-path of mul and div (commit 1, 2)
  • significant speedup was achieved by reusing dummy variables (commit 1, 2, 3, 4)
  • is_dummy is not an assumption anymore (commit 1, 2)
  • Symbols & Wilds are cached (commit 1, 2, 3)
  • ((2+3*I)**1000).expand() is now at least 100x faster (commit)
  • .expand() was made faster for cases where an expression is already expanded (commit)
  • rational powers of integers are now computed more efficiently (commit)
  • unknown assumptions are now cached as well as known assumptions (commit)
general cleanup:
  • BasicMeths merged into Basic (commit 1, 2, 3, 4, 5, 6, 7, 8)
  • cache subsystem was cleaned up -- now it supports only immutable objects (commit 1, 2, 3, 4, 5)


The following people have contributed to this release:
  • Kirill Smelkov
  • Mateusz Paprocki
  • Saroj Adhikari
  • Fredrik Johansson
  • Jaroslaw Tworek
  • Robert Kern
  • Pauli Virtanen
  • Ondřej Čertík

Sunday, January 27, 2008

SymPy 0.5.12 released

Quite a lot has changed, SymPy now works with NumPy arrays, you can convert back and forth using numpy.array() and sympy.Matrix(). The integration algorithm has been improved significantly, it can handle a lot of common integrals already (some examples).

More detailed changelog:
  • SymPy works with NumPy out of the box (commit 1, 2)
  • RootOf implemented (commit)
  • Lambda support works now (commit)
  • heuristic Risch method improved (commit 1, 2, 3, 4, 5)
  • cancel function implemented (commit)
  • sqrt(x) is now equivalent to x**(1/2) (commit 1, 2)
  • Derivative is now unevaluated (commit)
  • list2numpy() implemented (commit)
  • series expansion of hyperbolic functions fixed (commit)
  • sympify('lambda x: 2*x') works, plus other fixes (commit 1, 2, 3)
  • simple maxima parser implemented (commit)
  • sin(x)[0] idiom changed to sin(x).args[0] (commit)
  • sin(x).series(x, 5) idiom changed to sin(x).series(x, 0, 5) (commit)
  • caching refactored (commit 1, 2, 3, 4, 5, 6, 7, 8, 9)
  • 2D plots now don't rotate in 3D, but translate instead (commit)
  • many bug fixes, see the Mercurial history for details


The following people have contributed to this release:

  • Kirill Smelkov
  • Mateusz Paprocki
  • Fredrik Johansson
  • Jaroslaw Tworek
  • Saroj Adhikari
  • Andrej Tokarčík
  • David Marek
  • Or Dvory
  • Bernhard R. Link
  • Ondřej Čertík

Thursday, January 10, 2008

public wiki

We created a public wiki:

http://wiki.sympy.org/

That everyone is encouraged to participate in. The google code wiki has a huge disadvantage, that only the members of the google code sympy project are allowed to edit it. wiki.sympy.org can be edited by anyone and we hope that it will encourage SymPy users to help improve SymPy documentation and take part in the project.

We plan to move all tutorials and docs in there. Only things, that are relevant to developers, like how to do a release, etc., will stay in the google wiki.

Monday, January 7, 2008

SymPy 0.5.11 released

This is just a bugfix release, that fixed a problem with pyglet in the 0.5.10.

Changes:

  • ./setup.py install installs pyglet correctly now (commit)
  • var("k") fixed (commit)
  • script for automatic testing of plotting in pure environment added (commit 1, 2)

Friday, January 4, 2008

SymPy 0.5.10 released

Changes:

  • view renamed to preview, pngview, pdfview, dviview added (commit)
  • latex printer was rewritten, preview uses builtin pyglet instead of pygame (commit 1, 2)
  • square root denesting implemented (commit)
  • parser of simple Mathematica expressions added (commit)
  • TeXmacs interface written (commit)
  • some integration fixes (commit 1, 2, 3)
  • line width in 2D plotting can be specified (commit)
  • README was updated (commit 1, 2)
  • pyglet and mpmath were updated and moved to sympy/thirdparty (commit 1, 2, 3, 4, 5)
  • all sys.path hacks were moved to just 2 places - pyglet and examples (commit 1, 2, 3)
  • SymPy objects should work in numpy arrays now (commit 1, 2)
  • hand written sympify() parser was rewritten and simplified using Python AST (commit)
See also Changes.

Saturday, December 22, 2007

Google Highly Open Participation Contest 2007-8

SymPy participates in the Google Highly Open Participation Contest 2007-8, if you are a high school student, go for it. Last chance to claim a task is January 22!