|
|
Introduction
This page documents the major changes made to SymPy in each release and hg (small bugfixes are not included here). We try to mimic http://kernelnewbies.org/LinuxChanges
hg
You can see all changes in the Mercurial repository here:
Find the latest release tag and see what is new since then.
0.6.1
date: 22 July 2008
user-visible changes:
- almost all functions and constants can be converted to Sage (commit 1, 2)
- univariate factorization algorithm was fixed (commit)
- .evalf() method fixed, pi.evalf(106) calculates 1 000 000 digits of pi (commit 1)
- @threaded decorator (commit 1, 2, 3)
- more robust solvers, polynomials and simplification (about 60 patches from Mateusz, see the hg history)
- better simplify, that makes a solver more robust (commit)
- optional compiling of functions to machine code (commit)
- msolve: solving of nonlinear equation systems using Newton's method (commit)
changes that affected speed:
- ((x+y+z)**50).expand() is now 3 times faster (commit)
- caching was removed from the Order class: 1.5x speedups in series tests (commit 1, 2, 3, 4, 5)
The following 8 people have contributed patches to this release:
- Mateusz Paprocki
- Vinzent Steinberg
- Fredrik Johansson
- Riccardo Gori
- Kirill Smelkov
- Štěpán Roučka
- Ali Raza Syed
- Ondřej Čertík
The following people helped review patches:
- Riccardo Gori
- Fredrik Johansson
- Kirill Smelkov
- Ondřej Čertík
- Mateusz Paprocki
0.6.0
date: 7 July 2008
user-visible changes:
- all documentation wiki pages moved to docs.sympy.org
- mpmath was integrated in SymPy, numerics module removed
- mpmath can use gmpy optionally, thus calculating 1000000 digits of pi in 7.5s
- Common subexpression elimination implemented (commit 1, 2, 3, 4), see docs
- roots, RootsOf, RootSum implemented (commit)
- lambdify() now accepts Matrices (commit)
- Matrices polished and spedup (commit 1, 2, 3, 4, 5, 6, 7, 8, 9)
- source command implemented (commit 1, 2)
- Polys were made the default polynomials in SymPy (commit 1, + many following commits)
- Add, Mul, Pow now accept evaluate=False argument (commit)
The following 12 people have contributed patches to this release:
- Mateusz Paprocki
- Fredrik Johansson
- Robert Kern
- Riccardo Gori
- Sebastian Krämer
- Case Van Horsen
- Vinzent Steinberg
- Roberto Nobrega
- Friedrich Hagedorn
- David Roberts
- Kirill Smelkov
- Ondřej Čertík
The following people helped review patches:
- Kirill Smelkov
- Mateusz Paprocki
- Robert Kern
- Vinzent Steinberg
- Fredrik Johansson
- Sebastian Krämer
- Ondřej Čertík
0.5.15
date: 24 May 2008
user-visible changes:
- all SymPy functions support vector arguments, e.g. sin([1, 2, 3]) (commit 1, 2)
- lambdify can now use numpy/math/mpmath (1, 2, 3)
- the order of lambdify arguments has changed (commit)
- all SymPy objects are pickable (commit 1, 2, 3)
- simplify improved and made more robust (commit)
- broken limit_series was removed, we now have just one limit implementation (commit 1, 2, 3)
- limits now use .nseries (commit)
- .nseries() improved a lot (commit 1, 2, 3)
- Polys improved (commit)
- Basic kronecker delta and Levi-Civita implementation (commit)
The following 8 people have contributed patches to this release:
- Sebastian Krämer
- Friedrich Hagedorn
- Mateusz Paprocki
- Saroj Adhikari
- Vinzent Steinberg
- David Roberts
- Nimish Telang
- Ondřej Čertík
0.5.14
date: 26 Apr 2008
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)
The following 15 people have contributed patches to this release:
- 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
0.5.13
date: 6 Mar 2008
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 8 people have contributed patches to this release:
- Mateusz Paprocki
- Saroj Adhikari
- Fredrik Johansson
- Jaroslaw Tworek
- Robert Kern
- Pauli Virtanen
- Ondřej Čertík
- Kirill Smelkov
0.5.12
date: 27 Jan 2008
- 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)
- integration of trigonometry expressions improved (commit)
- pretty-print for list and tuples implemented (commit)
- Python printing implemented (commit)
- 2D plots now don't rotate in 3D, but translate instead (commit)
- many bug fixes, see the Mercurial history for details
The following 10 people have contributed patches to this release:
- Mateusz Paprocki
- Fredrik Johansson
- Jaroslaw Tworek
- Saroj Adhikari
- Andrej Tokarčík
- David Marek
- Or Dvory
- Bernhard R. Link
- Ondřej Čertík
- Kirill Smelkov
0.5.11
date: 07 Jan 2008
- ./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)
0.5.10
date: 04 Jan 2008
- 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)
- known issues
- 3D plotting doesn't work in this release if you install it using ./setup.py install. It only works if you use it directly without installing. Fixed in 0.5.11.
0.5.9
date: 22 Dec 2007
- Differential solvers were polished (commit 1, 2, 3)
- isympy now predefines f as a function (commit)
- Matrix printing improved (commit 1, 2, 3, 4)
- Printing internals were documented (commit)
0.5.8
- _eval_apply() was renamed to canonize()
- Added var from SAGE
- Added more number theory functions
- Spherical harmonics (Ylm) implemented
- Functions interface simplified (SingleValuedFunction removed, nofargs -> nargs)
- Draw negative powers in denominator nicely
- Integration of polynomials is 10x faster
- pyglet updated to 1.0beta2
People who contributed to this release:
- Goutham Lakshminarayan
- Ondřej Čertík
- Kirill Smelkov
0.5.7
- isympy now uses 2D unicode PrettyPrinting by default
- Convergence acceleration / extrapolation methods for series and sequences
- SymPy was made ready to work nicely with SAGE
- known issues:
- the series expansion fails for some more complex expressions (the same problem since SymPy 0.5.0), see the relevant issues.
People who contributed to this release:
- Fredrik Johansson
- Ondřej Čertík
- Kirill Smelkov
0.5.6
- _sage_() methods implemented to convert any SymPy expression to a SAGE expression.
- isympy fixed so that it always tries the local unpacked sympy first (the one in the directory where isympy sits) and only then the system wide installation of sympy (Debian package for example)
- issues fixed: 439, 436
- known issues:
- the series expansion fails for some more complex expressions (the same problem since SymPy 0.5.0), see the relevant issues.
0.5.5
- sympy.abc module for quickly importing predefined symbols
- nice pretty printing when a unicode terminal is available
- isympy -c python now also supports true division
- documentation improved (sympy module, bin/isympy and isympy's man page)
- a lot of problems with series expansion fixed
- patched pyglet to conform to Debian policy
- known issues:
- the series expansion fails for some more complex expressions (the same problem since SymPy 0.5.0), see the relevant issues.
0.5.4
- Log and ApplyLog classes were simplified to log, as was in the 0.4.3 version (the same for all other classes, like sin, cos, etc.), for the current uptodate documentation see SymPySvn.
- limits algorithm was fixed and it works very reliably (there are some bugs in the series facility though that make some limits fail), see this post for more details
- all functions arguments are now accessed using the sin(x)[:] idiom again, as in the 0.4.3 version (instead of the old sin(x)._args or sin(x).args which was briefly introduced in the 0.5.x series), see SymPySvn, section accessing parameters
- known issues:
- the series expansion fails for some more complex expressions (the same problem since SymPy 0.5.0), see this post for more details
0.5.3
- faster import sympy statement
- using the integrate(3*t**2, (t,0,x)) syntax again (as was in the 0.4.3 version)
- using true division in isympy (1/2 returns 0.5 instead of 0, example)
- plotting module can saveimage()
- implemented extended Risch-Norman heuristic
- full partial fraction decomposition via apart()
- added a complete set of rewrite rules for trigonometric and hyperbolic functions
- ComplexInfinity renamed to zoo
- known issues:
- there are many problems in the limits module that needs to be refactored (see the issue 298), but all tests pass correctly (fixed in 0.5.4)
- the series expansion fails for some more complex expressions
0.5.2
- concrete mathematics module written
- geometry module
- make the tarball conform to Debian policy
- many small bugs fixed, see Issues for details
- known issues:
- there are many problems in the limits module (needs to be refactored), but all tests pass correctly (fixed in 0.5.4)
- import sympy is slow again (fixed in 0.5.3)
- the series expansion fails for some more complex expressions
0.5.1
- importing sympy (import sympy) was made a lot faster (2.4s against 0.1s)
- known issues:
- there are many problems in the limits module (needs to be refactored), but all tests pass correctly (fixed in 0.5.4)
- the series expansion fails for some more complex expressions
0.5.0
- new core (from 10x to 100x speedup compared to 0.4.3)
- multivariate functions
- pattern matching uses the Wild and WildFunction classes (see the Tutorial for usage)
- numerics module for fast arbitrary-precision numerical computations (much faster than the Python int and Decimal)
- plotting module improved (colormaps, middle mouse button for zooming and more)
- sympy/modules/* was moved to sympy/* and the sympy/modules directory was deleted
- known issues:
- there are many problems in the limits module (needs to be refactored), but all tests pass correctly (fixed in 0.5.4)
- the series expansion fails for some more complex expressions
0.4.3
- assumptions improved
- plotting module uses pyglet (no more hangups) and more improvements
- caching Rationals -1, 0, 1, resulting in 35% speedup of tests
- closed and pretty forms for simple summations and products
- new term rewriting functions: collect() and together()
- enhanced solver of polynomial equations
- preliminary support for binary arithmetics
- more special functions (zeta, incomplete gamma etc.)
0.4.2
- augmented matrix manipulation including 2d slicing
- general matrix inversion
- LU decomposition (& associated linear solver)
- sparse matrix implementation via python dictionaries
- hessian, jacobian of matrices, cross/dot products
- QR decomposition & the Gram-Schmidt procedure
- geometry module enhanced
- factorization ( factor(x**6-1) )
0.4.1
- added sympy.modules.plotting.renderables and sympy.modules.plotting.scene modules
0.4.0
- determinants
- groebner bases (initial implementation). multivariate division, gcd
- Fraction free Gaussian elimination
- resultant of polynomials
- graphing support
- geometry module
- prime numbers
- special functions (factorials)
- renamed arguments is_commutative to commutative, is_dummy to dummy
- MathML refactoring, renamed to mathml and now uses xml.dom.minidom
- ratsimp() for simplifying fractions added to sympy.modules.simplify
- exp(x+y).expand() and (exp(x)*exp(y)).combine(), the same for log.
- pretty printing
- infty renamed to oo
- Experimental plotting support via matplotlib
- Removed class NCSymbol, use Symbol(name, is_commutative=False) instead
- Matrix now (optionally) accepts a generating function: Matrix(2, 2, lambda i,j: i*j )
- The class Order added
- Pattern matching implemented (see the match() method)
- A table of integrals implemented
- Basic equations solving, algebraic (solve) and differential (dsolve)
0.3
- symbolic matrices (normal operations like +, *, dirac and pauli matrices)
- Pauli algebra implemented using the NCSymbol class
- polynomials (division, gcd, square free decomposition)
- moved printing advanced stuff out of the core (see http://code.google.com/p/sympy/wiki/PrintingMathML)
- implemented slices on sympy's objects. Slices are now the recomended way to access all of sympy's nested objects. Examples:
- know the arguments of a function: sin(x*y)[:] -- > (x*y,)
- arguments of Mul, Add, Pow, etc. : (1+x)[:] --> (1,x)
- see also the new Basic.atoms function
- Derivative and Limit class
- easy usage (differentiation and other stuff) of unknown functions, see examples/relativity.py
- complex numbers work for exp(I*x) and stuff. evalc() method
- Initial support for assumptions (for example: x = Symbol('x', is_real=True) )
- a lot of refactorings and small fixes (the c() was renamed to Basic.sympify())
- debian package
0.2
This is the first release.
Sign in to add a comment
