=========== SymPy 0.7.6 =========== 21 Nov 2014 New features ============ * New module ``calculus.finite_diff`` for generating finite difference formulae approximating derivatives of arbitrary order on arbitrarily spaced grids. * New module ``physics.optics`` for symbolic computations related to optics. * ``geometry`` module now supports 3D geometry. * Support for series expansions at a point other then ``0`` or ``oo``. See :sympypull:`2427`. * Rules for the intersection of integer ImageSets were added. See :sympypull:`7587`. We can now do things like ``{2⋅m | m ∊ ℤ} ∩ {3⋅n | n ∊ ℤ} = {6⋅t | t ∊ ℤ}`` and ``{2⋅m | m ∊ ℤ} ∩ {2⋅n + 1 | n ∊ ℤ} = ∅``. * ``dsolve`` module 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 of ``n`` equations. * 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 :sympypull:`7464`. Control cache size by the environment variable ``SYMPY_CACHE_SIZE`` (default is 500). ``SYMPY_CACHE_SIZE=None`` restores the unbounded cache. * Added ``fastcache`` as an optional dependency. Requires v0.4 or newer. Control via ``SYMPY_CACHE_SIZE``. May result in significant speedup. See :sympypull:`7737`. * New experimental module ``physics.unitsystems`` for computation with dimensions, units and quantities gathered into systems. This opens the way to dimensional analysis and better quantity calculus. The old module ``physics.units`` will stay available until the new one reaches a mature state. See :sympypull:`2628`. * New ``Complement`` class to represent relative complements of two sets. See :sympypull:`7462`. * New trigonometric functions (asec, acsc), many enhancements for other trigonometric functions (see :sympypull:`7500`). * New ``Contains`` class to represent the relation "is an element of" (see :sympypull:`7989`). * The code generation tools (code printers, ``codegen``, ``autowrap``, and ``ufuncify``) 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. * ``ufuncify`` now uses a backend that generates actual ``numpy.ufuncs`` by default through the use of the ``numpy`` C api. This allows broadcasting on *all* arguments. The previous ``cython`` and ``f2py`` backends are still accessible through the use of the ``backend`` kwarg. * ``CodeGen`` now generates code for Octave and Matlab from SymPy expressions. This is supported by a new CodePrinter with interface ``octave_code``. For example ``octave_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's ``S.true`` or ``S.false`` singletons instead of Python's ``True`` or ``False`` singletons. Code that checks for, e.g., ``(a < b) is True`` should be changed to ``(a < b) == True`` or ``(a < b) == S.true``. Use of ``is`` is not recommended here. * The ``subset()`` method in ``sympy.core.sets`` is marked as being deprecated and will be removed in a future release (:sympyissue:`7460`). Instead, the ``is_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 :sympypull:`2427`. * In ``physics.mechanics``, ``KanesMethod.linearize`` has a new interface. Old code should be changed to use this instead. See docstring for information. * ``physics.gaussopt`` has been moved to ``physics.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 ``lambdify`` would convert ``Matrix`` to ``numpy.matrix`` by 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 a ``partial`` as so: ``lambdify = functools.partial(lambdify, modules=[{'ImmutableMatrix': numpy.array}, 'numpy'])``. For more information see :sympyissue:`7853` and the ``lambdify`` docstring. * ``Set.complement`` doesn't exists as an attribute anymore. Now we have a method ``Set.complement()`` which complements the given universal set. * Removed is_finite assumption (see :sympypull:`7891`). Use instead a combination of ``is_bounded and is_nonzero`` assumptions. * is_bounded and is_unbounded assumptions were renamed to is_finite and is_infinite (see :sympypull:`7947`). * Removed is_infinitesimal assumption (see :sympypull:`7995`). * Removed is_real property for Sets, use ``Set.is_subset(Reals)`` instead (see :sympypull:`7996`). * For generic symbol ``x`` (SymPy's symbols are not bounded by default), inequalities with ``oo`` are no longer evaluated as they were before, e.g. ``x < oo`` no longer evaluates to True). See :sympypull:`7861`. * ``CodeGen`` has been refactored to make it easier to add other languages. The main high-level tool is still ``utilities.codegen.codegen``. But if you previously used the ``Routine`` class directly, note its ``__init__`` behaviour has changed; the new ``utilities.codegen.make_routine`` is recommended instead and by default retains the previous C/Fortran behaviour. If needed, you can still instantiate ``Routine`` directly; it only does minimal sanity checking on its inputs. See :sympypull:`8082`. * ``FiniteSet([1, 2, 3, 4])`` syntax not supported anymore, use ``FiniteSet(1, 2, 3, 4)`` instead. See :sympypull:`7622`. Minor changes ============= * Updated the parsing module to allow sympification of lambda statements to their SymPy equivalent. * Lambdify can now use ``numexpr`` by specifying ``modules='numexpr'``. * Use ``with evaluate(False)`` context manager to control automatic evaluation. E.g. ``with evaluate(False): x + x`` is actually ``x + x``, not ``2*x``. * IndexedBase and Indexed are changed to be commutative by default. * ``sympy.core.sets`` moved to ``sympy.sets``. * Changes in ``sympy.sets``: - Infinite ``Range`` is now allowed. See :sympypull:`7741`. - ``is_subset()``: The ``is_subset()`` method deprecates the ``subset()`` method. ``self.is_subset(other)`` checks if ``self`` is a subset of ``other``. This is different from ``self.subset(other)``, which checked if ``other`` is a subset of ``self``. - ``is_superset()``: A new method ``is_superset()`` method is now available. ``self.is_superset(other)`` checks if ``self`` is a superset of ``other``. - ``is_proper_subset`` and ``is_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)`` and ``self.is_proper_superset(other)`` checks if ``self`` is the proper subset of ``other`` and if ``self`` is the proper superset of ``other`` respectively. - ``is_disjoint()``: A new method for checking if two sets are disjoint. - ``powerset()``: A new method ``powerset()`` has been added to find the power set of a set. - The cardinality of a ``ProductSet`` can be found using the ``len()`` function. * Changes in ``sympy.plot.plot_implicit``: - The ``plot_implicit`` function 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_implicit`` function also allows axes labels for the plot to be specified. * rules for simplification of ImageSet were added :sympypull:`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 :sympypull:`7634`. * dioptre is added to ``physics.units``. See :sympypull:`7782`. * ``replace`` now respects commutativity, see :sympypull:`7752`. * The CCodePrinter gracefully handles Symbols which have string representations that match C reserved words, see :sympypull:`8199`. * ``limit`` function now returns an unevaluated ``Limit`` instance if it can't compute given limit, see :sympypull:`8213`.