SymPy 0.7.6
21 Nov 2014
New features
New module
calculus.finite_difffor generating finite difference formulae approximating derivatives of arbitrary order on arbitrarily spaced grids.New module
physics.opticsfor symbolic computations related to optics.geometrymodule now supports 3D geometry.Support for series expansions at a point other then
0oroo. See sympy/sympy#2427.Rules for the intersection of integer ImageSets were added. See sympy/sympy#7587. We can now do things like
{2⋅m | m ∊ ℤ} ∩ {3⋅n | n ∊ ℤ} = {6⋅t | t ∊ ℤ}and{2⋅m | m ∊ ℤ} ∩ {2⋅n + 1 | n ∊ ℤ} = ∅.dsolvemodule now supports system of ODEs including linear system of ODEs of 1st order for 2 and 3 equations and of 2nd order for 2 equations. It also supports homogeneous linear system ofnequations.New support for continued fractions, including iterators for partial quotients and convergents, and reducing a continued fraction to a Rational or a quadratic irrational.
Support for Egyptian fraction expansions, using several different algorithms.
Addition of generalized linearization methods to
physics.mechanics.Use an LRU cache by default instead of an unbounded one. See sympy/sympy#7464. Control cache size by the environment variable
SYMPY_CACHE_SIZE(default is 500).SYMPY_CACHE_SIZE=Nonerestores the unbounded cache.Added
fastcacheas an optional dependency. Requires v0.4 or newer. Control viaSYMPY_CACHE_SIZE. May result in significant speedup. See sympy/sympy#7737.New experimental module
physics.unitsystemsfor computation with dimensions, units and quantities gathered into systems. This opens the way to dimensional analysis and better quantity calculus. The old modulephysics.unitswill stay available until the new one reaches a mature state. See sympy/sympy#2628.New
Complementclass to represent relative complements of two sets. See sympy/sympy#7462.New trigonometric functions (asec, acsc), many enhancements for other trigonometric functions (see sympy/sympy#7500).
New
Containsclass to represent the relation “is an element of” (see sympy/sympy#7989).The code generation tools (code printers,
codegen,autowrap, andufuncify) have been updated to support a wider variety of constructs, and do so in a more robust way. Major changes include added support for matrices as inputs/outputs, and more robust handling of conditional (Piecewise) statements.ufuncifynow uses a backend that generates actualnumpy.ufuncsby default through the use of thenumpyC api. This allows broadcasting on all arguments. The previouscythonandf2pybackends are still accessible through the use of thebackendkwarg.CodeGennow generates code for Octave and Matlab from SymPy expressions. This is supported by a new CodePrinter with interfaceoctave_code. For exampleoctave_code(Matrix([[x**2, sin(pi*x*y), ceiling(x)]]))gives the string[x.^2 sin(pi*x.*y) ceil(x)].New general 3D vector package at
sympy.vector. This package provides a 3D vector object with the Del, gradient, divergence, curl, and operators. It supports arbitrary rotations of Cartesian coordinate systems and arbitrary locations of points.
Compatibility breaks
All usage of inequalities (
>,>=,<,<=) on SymPy objects will now return SymPy’sS.trueorS.falsesingletons instead of Python’sTrueorFalsesingletons. Code that checks for, e.g.,(a < b) is Trueshould be changed to(a < b) == Trueor(a < b) == S.true. Use ofisis not recommended here.The
subset()method insympy.core.setsis marked as being deprecated and will be removed in a future release (sympy/sympy#7460). Instead, theis_subset()method should be used.Previously, if you compute the series expansion at a point other than 0, the result was shifted to 0. Now SymPy returns the usual series expansion, see sympy/sympy#2427.
In
physics.mechanics,KanesMethod.linearizehas a new interface. Old code should be changed to use this instead. See docstring for information.physics.gaussopthas been moved tophysics.optics.gaussopt. You can still import it from the previous location but it may result in a deprecation warning.This is the last release with the bundled mpmath library. In the next release you will have to install this library from the official site.
Previously
lambdifywould convertMatrixtonumpy.matrixby default. This behavior is being deprecated, and will be completely phased out with the release of 0.7.7. To use the new behavior now set the modules kwarg to[{'ImmutableMatrix': numpy.array}, 'numpy']. If lambdify will be used frequently it is recommended to wrap it with apartialas so:lambdify = functools.partial(lambdify, modules=[{'ImmutableMatrix': numpy.array}, 'numpy']). For more information see sympy/sympy#7853 and thelambdifydocstring.Set.complementdoesn’t exists as an attribute anymore. Now we have a methodSet.complement(<universal_set>)which complements the given universal set.Removed is_finite assumption (see sympy/sympy#7891). Use instead a combination of
is_bounded and is_nonzeroassumptions.is_bounded and is_unbounded assumptions were renamed to is_finite and is_infinite (see sympy/sympy#7947).
Removed is_infinitesimal assumption (see sympy/sympy#7995).
Removed is_real property for Sets, use
Set.is_subset(Reals)instead (see sympy/sympy#7996).For generic symbol
x(SymPy’s symbols are not bounded by default), inequalities withooare no longer evaluated as they were before, e.g.x < oono longer evaluates to True). See sympy/sympy#7861.CodeGenhas been refactored to make it easier to add other languages. The main high-level tool is stillutilities.codegen.codegen. But if you previously used theRoutineclass directly, note its__init__behaviour has changed; the newutilities.codegen.make_routineis recommended instead and by default retains the previous C/Fortran behaviour. If needed, you can still instantiateRoutinedirectly; it only does minimal sanity checking on its inputs. See sympy/sympy#8082.FiniteSet([1, 2, 3, 4])syntax not supported anymore, useFiniteSet(1, 2, 3, 4)instead. See sympy/sympy#7622.
Minor changes
Updated the parsing module to allow sympification of lambda statements to their SymPy equivalent.
Lambdify can now use
numexprby specifyingmodules='numexpr'.Use
with evaluate(False)context manager to control automatic evaluation. E.g.with evaluate(False): x + xis actuallyx + x, not2*x.IndexedBase and Indexed are changed to be commutative by default.
sympy.core.setsmoved tosympy.sets.Changes in
sympy.sets:Infinite
Rangeis now allowed. See sympy/sympy#7741.is_subset(): Theis_subset()method deprecates thesubset()method.self.is_subset(other)checks ifselfis a subset ofother. This is different fromself.subset(other), which checked ifotheris a subset ofself.is_superset(): A new methodis_superset()method is now available.self.is_superset(other)checks ifselfis a superset ofother.is_proper_subsetandis_proper_superset: Two new methods allow checking if one set is the proper subset and proper superset of another respectively. For e.g.self.is_proper_subset(other)andself.is_proper_superset(other)checks ifselfis the proper subset ofotherand ifselfis the proper superset ofotherrespectively.is_disjoint(): A new method for checking if two sets are disjoint.powerset(): A new methodpowerset()has been added to find the power set of a set.The cardinality of a
ProductSetcan be found using thelen()function.
Changes in
sympy.plot.plot_implicit:The
plot_implicitfunction now also allows explicitly specifying the symbols to plot on the X and Y axes. If not specified, the symbols will be assigned in the order they are sorted.The
plot_implicitfunction also allows axes labels for the plot to be specified.
rules for simplification of ImageSet were added sympy/sympy#7625. As a result
{x | x ∊ ℤ}now simplifies toℤand{sin(n) | n ∊ {tan(m) | m ∊ ℤ}}automatically simplifies to{sin(tan(m)) | m ∊ ℤ}.coth(0) now returns Complex Infinity. See sympy/sympy#7634.
dioptre is added to
physics.units. See sympy/sympy#7782.replacenow respects commutativity, see sympy/sympy#7752.The CCodePrinter gracefully handles Symbols which have string representations that match C reserved words, see sympy/sympy#8199.
limitfunction now returns an unevaluatedLimitinstance if it can’t compute given limit, see sympy/sympy#8213.