Release Notes for 0.7.3

david joyner edited this page Aug 28, 2013 · 34 revisions

Release notes for SymPy 0.7.3

These are the release notes for SymPy 0.7.3, which was released on July 13, 2013. It can be downloaded from

This version of SymPy has been tested on Python 2.5, 2.6, 2.7, 3.2, 3.3, and PyPy.

Major changes


This release includes Risch integration algorithm from Aaron Meurer's 2010 Google Summer of Code project. This makes integrate much more powerful and much faster for the supported functions. The algorithm is called automatically from integrate(). For now, only transcendental elementary functions containing exp or log are supported. To access the algorithm directly, use integrate(expr, x, risch=True). The algorithm has the ability to prove that integrals are nonelementary. To determine if a function is nonelementary, integrate using risch=True. If the resulting Integral class is an instance of NonElementaryIntegral, then it is not elementary (otherwise, that part of the algorithm has just not been implemented yet).

Here is an example integral that could not be computed before:

>>> f = x*(x + 1)*(2*x*(x - (2*x**3 + 2*x**2 + x + 1)*log(x + 1))*exp(3*x**2) + (x**2*exp(2*x**2) - log(x + 1)**2)**2)/((x + 1)*log(x + 1)**2 - (x**3 + x**2)*exp(2*x**2))**2
>>> integrate(f, x)
x + x*exp(x**2)*log(x + 1)/(x**2*exp(2*x**2) - log(x + 1)**2) - log(x + 1) - log(exp(x**2) - log(x + 1)/x)/2 + log(exp(x**2) + log(x + 1)/x)/2


  • Built basic infrastructure of the PDE module (PR #1970)

Theano Interaction

SymPy expressions can now be translated into Theano expressions for numeric evaluation. This includes most standard scalar operations (e.g. sin, exp, gamma, but not beta or MeijerG) and matrices. This system generally outperforms lambdify and autowrap but does require Theano to be installed.

Matrix Expressions


Matrix expressions now support inference using the new assumptions system. New predicates include invertible, symmetric, positive_definite, orthogonal, ....

New Operators

New operators include Adjoint, HadamardProduct, Determinant, MatrixSlice, DFT. Also, preliminary support exists for factorizations like SVD and LU.

Context manager for New Assumptions

Added the with assuming(*facts) context manager for new assumptions. See blogpost

Backwards compatibility breaks and deprecations

  • This is the last version of SymPy to support Python 2.5.

  • The IPython extension, i.e., %load_ext sympy.interactive.ipythonprinting is deprecated. Use from sympy import init_printing; init_printing() instead. See issue 3914.

  • The viewer='file' option to preview without a file name is deprecated. Use filename='name' in addition to viewer='file'. See issue 3919.

  • The deprecated syntax Symbol('x', dummy=True), which had been deprecated since 0.7.0, has been removed. Use Dummy('x') or symbols('x', cls=Dummy) instead. See issue 3378.

  • The deprecated Expr methods as_coeff_terms and as_coeff_factors, which have been deprecated in favor of as_coeff_mul and as_coeff_add, respectively (see also as_coeff_Mul and as_coeff_Add), were removed. The methods had been deprecated since SymPy 0.7.0. See issue 3377.

  • The spherical harmonics have been completely rewritten. See PR #1510.

Minor changes


  • Added enhancements and improved the methods of solving exact differential equation ((PR #1955)) and ((PR #1823))
  • Support for differential equations with linear coefficients and those that can be reduced to separable and linear form ((PR #1940), (PR #1864), (PR #1883))
  • Support for first order linear general PDE's with constant coefficients ((PR #2109))
  • Return all found independent solutions for underdetermined systems.
  • Handle recursive problems for which y(0) = 0.
  • Handle matrix equations.


  • integrate will split out integrals into Piecewise expressions when conditions must hold for the answer to be true. For example, integrate(x**n, x) now gives Piecewise((log(x), Eq(n, -1), (x**(n + 1)/(n + 1), True)) (previously it just gave x**(n + 1)/(n + 1))
  • Calculate Gauss-Legendre and Gauss-Laguerre points and weights (PR #1497)
  • Various new error and inverse error functions (PR #1703)
  • Use in heurisch for more symmetric and nicer results
  • Gruntz for expintegrals and all new erf*
  • Li, li logarithmic integrals (PR #1708)
  • Integration of li/Li by heurisch (PR #1712)
  • elliptic integrals, complete and incomplete
  • Integration of complete elliptic integrals by meijerg
  • Integration of Piecewise with symbolic conditions.
  • Fixed many wrong results of DiracDelta integrals.


  • Addition of SOPform and POSform functions to sympy.logic to generate boolean expressions from truth tables.
  • Addition of simplify_logic function and enabling simplify() to reduce logic expressions to their simplest forms.
  • Addition of bool_equals function to check equality of boolean expressions and return a mapping of variables from one expr to other that leads to the equality.
  • Addition of disjunctive normal form methods - to_dnf, is_dnf


  • gmpy version 2 is now supported
  • Added is_algebraic_expr() method (PR #2176)
  • Many improvements to the handling of noncommutative symbols:
    • Better support in simplification functions, e.g. factor, trigsimp
    • Better integration with Order()
    • Better pattern matching
  • Improved pattern matching including matching the identity.
  • normalizes Jacobi polynomials
  • Quadrature rules for orthogonal polynomials in arbitrary precision (hermite, laguerre, legendre, gen_legendre, jacobi)
  • summation of harmonic numbers
  • Many improvements of the polygamma functions
  • evaluation at special arguments
  • Connections to harmonic numbers
  • structured full partial fraction decomposition (mainly interesting for developers)
  • besselsimp improvements
  • Karr summation convention
  • New spherical harmonics
  • improved minimal_polynomial using composition of algebraic numbers (PR #2038)
  • faster integer polynomial factorization (PR #2148)
  • Euler-Descartes method for quartic equations (PR #1947)
  • algebraic operations on tensors (PR #1700)
  • tensor canonicalization (PR #1644)
  • Handle the simplification of summations and products over a KroneckerDelta.
  • Implemented LaTeX printing of DiracDelta, Heaviside, KroneckerDelta and LeviCivita, also many Matrix expressions.
  • Improved LaTeX printing of fractions, Mul in general.
  • IPython integration and printing issues have been ironed out.
  • Stats now supports discrete distributions (e.g. Poisson) by relying on Summation objects
  • Added DOT printing for visualization of expression trees
  • Added information about solvability and nilpotency of named groups.


The following people contributed at least one patch to this release (names are given in alphabetical order by last name). A total of 85 people contributed to this release. People with a * by their names contributed a patch for the first time for this release; 56 people contributed for the first time for this release.

Thanks to everyone who contributed to this release!

  • Acebulf*
  • Akshit Agarwal*
  • Ankit Agrawal*
  • Tom Bachmann
  • Madeleine Ball*
  • Raoul Bourquin
  • Christian Bühler
  • CJ Carey*
  • Ondřej Čertík
  • Mary Clark*
  • Chris Conley*
  • Renato Coutinho
  • Björn Dahlgren*
  • Christopher Dembia*
  • Guru Devanla
  • Rishabh Dixit*
  • Alexander Eberspächer*
  • Pavel Fedotov
  • Benjamin Fishbein*
  • Sean Ge*
  • Gilbert Gede
  • Brian E. Granger
  • Angus Griffith*
  • Chetna Gupta*
  • Ananya H*
  • Randy Heydon*
  • Alexander Hirzel*
  • Thomas Hisch*
  • hm*
  • Matthew Hoff*
  • Case Van Horsen*
  • Katja Sophie Hotz*
  • Max Hutchinson*
  • Sachin Irukula
  • Sergiu Ivanov
  • Amit Jamadagni*
  • Saurabh Jha
  • Sachin Joglekar*
  • Varun Joshi*
  • Robert Kern
  • Sergey B Kirpichev*
  • Stefan Krastanov
  • Manoj Kumar*
  • Patrick Lacasse*
  • Ronan Lamy
  • Colleen Lee*
  • Oliver Lee*
  • David Li
  • Stephen Loo*
  • Huijun Mai*
  • Aaron Meurer
  • Angadh Nanjangud
  • Eric Nelson*
  • Sherjil Ozair
  • Mateusz Paprocki
  • Tarang Patel*
  • Khagesh Patel*
  • Mario Pernici
  • Luke Peterson
  • Tyler Pirtle*
  • Vasily Povalyaev*
  • Seshagiri Prabhu*
  • Pradyumna*
  • Roland Puntaier*
  • Bharath M R
  • Shravas K Rao*
  • Thilina Rathnayake*
  • Timothy Reluga*
  • Julien Rioux
  • Matthew Rocklin
  • Christophe Saint-Jean*
  • Prasoon Shukla*
  • Chris Smith
  • Cristóvão Sousa
  • Brian Stephanik*
  • Marek Šuppa*
  • Tim Swast*
  • Grzegorz Świrski
  • Matthew Tadd*
  • Niklas Thörne*
  • Ramana Venkata*
  • Sean Vig
  • Demian Wassermann*
  • Erik Welch*
  • Stefen Yin*
Clone this wiki locally
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.