-
-
Notifications
You must be signed in to change notification settings - Fork 5k
Release Notes for 1.14
These are the release notes for SymPy 1.14. You can also find release notes for previous versions.
SymPy 1.14 was release on 27th April 2025.
This version of SymPy has been tested on Python 3.9, 3.10, 3.11, 3.12, 3.13 and PyPy. See our Python version support policy for more information on when we plan to drop support for older Python versions.
Install SymPy with
pip install -U sympy
or if you use Anaconda
conda install sympy
There are many changes in 1.14 (see below).
-
assumptions
-
Now
ask(Q.integer(x/y), Q.integer(x) & Q.integer(y))givesNoneinstead of wrongly givingTrue. (#27741 by @krishnavbajoria02 and @TiloRC) -
Now
ask(Q.integer(1/x), Q.integer(x))givesNoneinstead of wrongly givingTrue. (#27741 by @krishnavbajoria02 and @TiloRC) -
Bug Fix: Now
ask(Q.real(1/Abs(x)))correctly returnsNoneinstead of incorrectly returningTrue. (#27693 by @krishnavbajoria02 and @TiloRC) -
Bug fix:
ask(Q.integer(Abs(x)), ~Q.integer(x))now correctly returnsNoneinstead ofFalse. (#27685 by @krishnavbajoria02) -
Bug fix: Now
ask(Q.finite(x**-1), Q.real(x))correctly returnsNoneinstead ofTrue. (#27708 by @krishnavbajoria02 and @TiloRC) -
Make
ask(Q.integer(x**y), Q.integer(x) & Q.integer(y))giveNoneinstead of wrongly givingTrue. (#27555 by @krishnavbajoria02) -
ask(Q.infinite(I*oo))now returnsTrueinstead ofNone. (#27666 by @krishnavbajoria02 and @TiloRC) -
Make Q.finite(Mul(...)) return
Nonewhen a finite argument’s nonzero status is indeterminate instead ofFalse. (#27524 by @Jatinbhardwaj-093 and @TiloRC) -
Make
ask(Q.prime(x**y),Q.integer(x) & Q.integer(y))giveNoneinstead of incorrectly givingFalse. (#27512 by @krishnavbajoria02) -
Fixed a bug in the
askfunction whereQ.algebraicqueries did not handle three-valued logic correctly. This ensures the behavior is consistent when handling cases with undefined truth values. (#27511 by @krishnavbajoria02) -
Make
ask(Q.real(n**p), Q.positive(p) & Q.negative(n))giveNoneinstead of incorrectly givingFalse(#27489 by @GaganMishra305) -
Fixed incorrect output for
ask(Q.composite(x), Q.integer(y) & Q.positive(y) & ~Q.prime(y)), making sure that a non-prime positive integer is not necessarily composite. (#27463 by @anandkaranubc) -
Make
ask(Q.negative(S.NaN))giveNoneinstead of wrongly givingFalse. (#27520 by @guptapratykshh)
-
-
codegen
-
combinatorics
- Add pickle support to FreeGroup. (#27044 by @amirebrahimi)
-
concrete
-
Gives evaluated result when lower limit > upper limit in summation, especially in case if either of them is
infinite(following Karr convention) (#27894 by @Harikrishna-Srinivasan) -
Fix Ratio test to check if limit ratio is NaN. (#26980 by @anutosh491)
-
-
core
-
DEPRECATION: The gcd parameter for Rational is now deprecated. This parameter is used to create "unevaluated rationals" but those are impossible to represent if SymPy uses any more efficient implementation of rational numbers (e.g. from gmpy2 or python-flint). This parameter is deprecated and using it will likely become a hard error much quicker than usual deprecation timelines because keeping this behaviour even with a deprecation warning prevents making Rational much faster. (#27949 by @oscarbenjamin)
-
The output of
igcdex(0, 0)has been changed from(0, 1, 0)to(0, 0, 0). (#27884 by @haru-44) -
Fixed a bug where
Mod(1, n)evaluates to1 - nwhen n is a positive integer. (#27803 by @haru-44) -
Added handling for tan functions of complex numbers in evalf (#27732 by @AlexGarciaPrada)
-
A bug in Relational was fixed. Previously operations involving an expression like
Eq(y < 1, True)might raise an exception. (#27541 by @bjodah) -
Changed adjoint of a commutative expression to be the same as conjugate (and transpose is the same as the original) (#27422 by @akhmerov)
-
Fixed rewrite(abs) to call rewrite(Abs), ensuring consistent behavior. (#27325 by @Ytemiloluwa)
-
Fixed a bug with
sympifywhen infinite floats are passed. For example:sympify(np.float32('inf')). (#27287 by @solvedbiscuit71) -
Type hints have been added to improve type inference for code that uses sympy expressions. This should improve code completion and help tips for end users using an editor such as vscode that typically uses the pyright language server. (#25103 by @oscarbenjamin)
-
Floats are no longer extracted from a power of an Add e.g. an expression like
(x**2 + 10.0)**2will be kept as is. Previously a float was extracted to100.0*(0.1*x**2 + 1)**2. This reverts gh-16762 that introduced this change in SymPy 1.5. (#27196 by @oscarbenjamin) -
BREAKING CHANGE: In SymPy 1.7 Basic.match and Basic.replace were changed to treat bound symbols in a pattern as wild cards. This change is now reverted so that patterns are matched structurally without distinguishing between free and bound symbols. This means that e.g.
Integral(x, (x, 0, 1)).match(Integral(y, (y, 0, 1)))no longer matches ifyis an ordinary symbol. Matching bound symbols was redundant since a Wild symbol can be used in place of any bound symbol in the pattern e.g.Integral(x, (x, 0, 1)).match(Integral(w, (w, 0, 1)))wherew = Wild('w'). This change to match fixes a bug in replace where matches involving expressions with bound symbols would give incorrect expressions involving Dummy symbols. (#27175 by @oscarbenjamin) -
Fixed a bug with Float. Formerly,
ZeroDivisionErroras using python built-in types caused result to be zero in the denominator (#27173 by @MostafaGalal1) -
Fixed type-checking issue in
decompose_power_ratby ensuring non-rational exponents are handled properly. (#27162 by @BorekSaheli) -
Cache assumption canonicalization in SymPy. (#27136 by @isuruf)
-
Mul.as_base_expno longer allows(x**z*y**z) -> (x*y)**zunlesszis an integer. Previously this could lead to incorrect results if the bases are not positive and the exponent is not an integer. (#26965 by @hanspi42, @oscarbenjamin, and @sympy) -
Comparisons like
Integer(0) == Float(0)now always return False. Previously this behaviour was inconsistent depending on the order of the operands e.g.Float(0)==Integer(0)gave False butInteger(0)==Float(0)gave True. (#26910 by @oscarbenjamin) -
Pow.as_base_exp for positive Rationals: (2/3)**x->(3/2,-x) is not done ant more. This reverts a change in SymPy 1.12 to restore SymPy 1.11 behaviour. (#26884 by @oscarbenjamin)
-
Print the expression when you cannot determine truth value of relational (#26679 by @ezyang)
-
-
functions
-
Added caching to speed up harmonic number computation. (#27838 by @vprayag2005)
-
Fixed inconsistent behavior of the
primitivemethod for the zero polynomial. (#27593 by @guptapratykshh) -
Removed
Poly.unitwhich has same functionality asPoly.one. (#27611 by @guptapratykshh) -
Fixed a bug in
dmp_shiftto handle zero elements correctly. (#27506 by @leomanga) -
Fixed and improved some inequality simplifications for floor and ceiling (#27388 by @kjakatter)
-
The issue where
partition(n)would fail for large values of n in situations where bothpython-flintandgmpy2are available has been resolved. (#27212 by @haru-44) -
Ramanujan's congruences have been implemented. The expression
partition(5*n+4) % 5evaluates to zero. (#27208 by @haru-44) -
Implemented besselk series expansion for non-integer order (#25664 by @Kishore96in)
-
besselk: fixed calculation of leading term for non-integer negative orders (#25664 by @Kishore96in)
-
create a function in test_integral file for handling issue (#27025 by @bharatAmeria and @smichr)
-
Fixed a bug in _eval_nseries method of Pow class to better handle the operation of negating the constant term from the expression. (#26036 by @arnabnandikgp and @smichr)
-
_eval_aseriesmethod was added for modified bessel functions. (#26298 by @arnabnandikgp) -
Fixed a bug that caused
LambertWto hang on specific inputs. (#26840 by @haru-44) -
removed instance of nsimplify from log _eval_nseries (#26693 by @arnabnandikgp)
-
-
integrals
-
Added a regression test for a specific floating-point Definite integral variant #27231 to prevent future discrepancies in evaluation. (#27258 by @Ytemiloluwa)
-
rules containing
sqrt(a*t)andsqrt(a/t)and their test cases have been removed from the rule-basedlaplace_transformmethod, they will be re-instated after a mathematical investigation into the validity of the respective table entries in Bateman54 (#26965 by @hanspi42, @oscarbenjamin, and @sympy) -
Fixed incorrect inverse laplace transforms of polynomials in s. (#26779 by @hanspi42)
-
-
interactive
- Fixed an issue where
init_printingdid not pass settings specific to the user-provided pretty printer. For example, when usinginit_printing(use_latex=False, pretty_printer=my_pretty_printer, applied_func_with_no_args=False), the custom optionapplied_func_with_no_argsis now correctly propagated to the custom pretty printer. (#26997 by @sylee957)
- Fixed an issue where
-
logic
-
matrices
-
Fixed Matrix.is_hermitian for matrices of quantum operators. (#27904 by @mathiscr)
-
Added fraction-free LU Decomposition method for DomainMatrix. (#27423 by @Ytemiloluwa)
-
A regression in Matrix.inv_mod was fixed. In versions before 1.12 inv_mod could compute the inverse of a matrix modulo a composite number if it exists. This would potentially fail in 1.12 and 1.13 due to the inverse algorithm encountering zero divisors even if the inverse matrix does exist. Now if the determinant is invertible mod m then the inverse of the matrix mod m is always computed. (#27664 by @oscarbenjamin)
-
Fixed adjoint of a matrix containing operators to apply adjoint to the operators instead of conjugate. (#27422 by @akhmerov)
-
Fixed the LU solver to correctly handle noncommutative matrix entries (#27437 by @akhmerov)
-
Added qr method for DomainMatrix to compute the QR decomposition. (#27352 by @Ytemiloluwa)
-
Added a Division-based qr method for DDM to handle domain-aware QR decomposition. (#27352 by @Ytemiloluwa)
-
SparseMatrix reshaping is now more efficient (#27100 by @smichr)
-
domain matrix no longer modifies instantiating list of lists (#27085 by @smichr)
-
Handle matrices of zero columns correctly in the
Matrixconstructor. In SymPy 1.12 these produced empty matrices of the wrong shape and in 1.13 they resulted in an error. NowMatrix([[], []]).shape == (2,0). (#27065 by @oscarbenjamin) -
Add
smith_normal_decompthat returns the smith normal form and the matrices that decomposes the matrix into the smith normal form. (#17451 by @isuruf and @oscarbenjamin) -
Matrix.inv() now uses exact rational coefficients internally for matrices of polynomials or rational functions if the matrix has symbolic expressions with float coefficients. This fixes an issue first seen in SymPy 1.13.0 where unnecessarily large floats were present in the expressions for the matrix inverse (gh-26821) and likely also prevents Matrix.inv from returning some inaccurate results for some matrices containing floats. (#26822 by @oscarbenjamin)
-
Flint's matrix types nmod_mat or fmpz_mod_mat are used by DomainMatrix for dense matrices over GF(p) when the ground types are set to
"flint". This makes many operations with matrices over GF(p) much faster. (#25940 by @oscarbenjamin) -
A bug (gh-24947) in matrix multiplcation with Order expressions was fixed. Previously
RuntimeErrorwas raised when multiplying matrices with certain expressions that do not behave as expected under multiplication by zero. (#26746 by @oscarbenjamin) -
Two new Matrix methods
iter_valuesanditer_itemsare added for lazy iteration over the nonzero elements of aMatrix. A Matrix methodfrom_dokis added for efficient direct construction of sparse matrices. Some basic matrix operations are made faster by using these methods. (#26058 by @oscarbenjamin)
-
-
ntheory
-
The output of
qsis a set of factors ofN, but until now, their product could exceedN. We have fixed it to ensure that it does not exceedN. (#27644 by @haru-44) -
We have implemented a new function,
qs_factor. Like the existingqs, it performs prime factorization using the quadratic sieve. However, the difference is thatqs_factorreturns the results as a dictionary. (#27644 by @haru-44) -
Resolved an issue in the Quadratic Sieve (QS) where factor 2 was not fully removed from N, causing a NoneType error in factor base generation. (#27635 by @vprayag2005)
-
The
factor_cachehas been added to store the results of prime factorization. Results fromfactorintare automatically cached, and users can also add their own entries to the cache. (#27193 by @haru-44) -
perfect_powerreturns an odd exponent, if possible, for negative n and respects key words when dealing with non-Integers (#27239 by @aasim-maverick and @smichr) -
New Mersenne prime added to
MERSENNE_PRIME_EXPONENTS. (#27184 by @haru-44) -
Improved the performance of the
prime(n)function. (#27051 by @aasim-maverick)
-
-
parsing
-
Fixed an issue for lark parser that factorials with multiplication is parsed with ambiguity. For example,
$12! \times 12!$ . (#27540 by @sylee957) -
Fixed an issue that
parse_exprwithevaluate=Falsedid not handle chained equation or inequality comparisons. For example,parse_expr("0 < x < 100", evaluate=False)should now work. (#27102 by @sylee957)
-
-
physics.biomechanics
-
physics.continuum_mechanics
- Added examples 12 and 13 to the documentation, demonstrating the use of
apply_support(),apply_rotation_hinge(), andapply_sliding_hinge(loc). (#27099 by @BorekSaheli)
-
add a draw method for the Arch class (#26981 by @shishir-11)
-
adds solver for arch class in continuum_mechanics module (#26811 by @shishir-11)
-
a parabolic arches structure is added (#26735 by @shishir-11)
-
A draw method to plot the Cable diagram as specified by the user (#26640 by @shishir-11)
-
Changes to solver for consistency with lowest point (#26640 by @shishir-11)
-
Plot for tension added (#26640 by @shishir-11)
-
Implemented ILD calculations for beams with hinges. (#26683 by @moorepants and @mvg2002)
-
Implemented hinges in a new way which makes it possible to calculate beams with multiple hinges. (#26594 by @mvg2002)
- Added examples 12 and 13 to the documentation, demonstrating the use of
-
physics.control
-
Added Nichols plot to control. (#27067 by @abhiphile)
-
Added Nyquist plot to control. (#27052 by @abhiphile)
-
Added support of Feedback to work with StateSpace. (#26863 by @abhiphile)
-
Introduced a
PIDControllerclass in the control module. (#26781 by @abhiphile) -
Added support to use
StateSpacewithParallelandMIMOParallel. (#26718 by @abhiphile and @faze-geek) -
Added method to solve
StateSpaceequations usingdsolve(). (#26736 by @abhiphile) -
pole_zero_numerical_data()function no longer depends on numpy or any other external dependency for polynomial root calculations. (#26738 by @akshanshbhatt) -
Added methods to find state and output vectors for StateSpace. (#26685 by @abhiphile)
-
Added support to use
StateSpacewithSeriesandMIMOSeries. (#26647 by @abhiphile)
-
-
physics.mechanics
-
Add a redirect to the top level explanation page from the old url in the reference section. (#27500 by @moorepants)
-
KanesMethod requires linear speed constraints, but it does not check whether they indeed are linear. Using linear_eq_to_matrix instead of the Jacobian serves two purposes: 1) it makes solving the constraints faster and 2) it will raise an error in the speed constraints are not linear. (#26900 by @Peter230655)
-
Updated the bicycle model example in the documentation to produce correct results and improve the explanation and formatting. (#26921 by @moorepants)
-
Introduced
CoulombKineticFrictionto include Coulomb kinetic friction with Stribeck and viscous effect. (#26412 by @eh111eh) -
Moved files in the API Reference to Explanation and Tutorials (#26727 by @eh111eh)
-
-
physics.quantum
-
Removed custom
__mul__and__pow__methods from quantum classes. This logic has been replaced by_constructor_postprocessor_mappingbased transforms that are more complete and consistent. (#27407 by @ellisonbg) -
Created kinds for bras, kets and operators, with kind dispatch resolution. (#27407 by @ellisonbg)
-
All combinations of bras and kets are now consistently identified as inner/outer products, with inner products taking taking the highest priority when there is ambiguity. (#27407 by @ellisonbg)
-
TypeError is raised when trying to build tensor products using
*, such asKet()*Ket()orBra()*Bra(). (#27407 by @ellisonbg) -
Breaking change:
tensor_product_simpand its helper functions have been deprecated as the transformations they apply are now handled automatically using_constructor_postprocessor_mapping. (#27407 by @ellisonbg) -
Breaking change: The
IdentityOperatorclass insympy.physics.quantumhas been deprecated. Please useS.Onein the future as the multiplicative identity for quantum operators and states. (#27397 by @ellisonbg) -
All quantum expressions (operators and states) now have a proper free_symbols property, which is needed for them to work with Sum. (#27395 by @ellisonbg)
-
qapply now handles Sum instances in quantum expressions. (#27395 by @ellisonbg)
-
A bug in Qubit.measure_all_oneshot was fixed. Previously measuring
measure_all_oneshot(Qubit(0))would return incorrectly|01>. NowQubit.measure_all_oneshot(Qubit(0))returns correct results|0>(#27105 by @groncarolo)
-
-
physics.secondquant
-
physics.vector
-
Add a redirect to the top level explanation page from the old url in the reference section. (#27500 by @moorepants)
-
A bug in pretty printing of vectors was fixed. Previously an exception would be raised when printing the zero vector. (#26801 by @oscarbenjamin)
-
Moved files in the API Reference to Explanation (#26727 by @eh111eh)
-
-
physics.wigner
-
Explained how to index the matrices output by
wigner_dandwigner_d_small. (#27583 by @moble and @oscarbenjamin) -
Noted discrepancy in angles compared to cited reference. (#27583 by @moble and @oscarbenjamin)
-
Numpy floats can be used with wigner_6j and wigner_9j functions (#27288 by @RushabhMehta2005)
-
Numpy floats can be used with wigner_3j (#27228 by @RushabhMehta2005)
-
Fixed a bug with inconsistent signs of real Gaunt coefficients, occurring for certain combination of orders (#27167 by @strawpants)
-
NumPy numbers can be used with
clebsch_gordan. Fixes a regression introduced in SymPy 1.13.0. (#27066 by @oscarbenjamin)
-
-
polys
- Added
rs_cosh_sinhto calculate fastercosh,sinhseries together. (#27900 by @Jatinbhardwaj-093)
-
Fixed a bug where
primitive_elementreturned non-canonical minimal polynomials. (#27809 by @ForeverHaibara) -
New
rs_asinhfunction inring_seriesmodule to computearcsinhTaylor series at x=0. (#27764 by @Jatinbhardwaj-093) -
Fix
TypeErrorinrs_seriesby ensuring prec is always an integer when handling rational exponents. (#27702 by @Jatinbhardwaj-093) -
A memory leak caused by using many polynomial rings is fixed by not "caching" all rings permanently in memory. Elements of polynomial rings no longer use dynamically created classes. (#27577 by @oscarbenjamin)
-
A new PuiseuxRing type is added that can represent "polynomials" with negative or fractional exponents. These are used in the ring_series module to represent truncated Puiseux series. (#27577 by @oscarbenjamin)
-
BREAKING CHANGE: Using polynomial rings with the ring_series module now only works for series that have nonnegative integer exponents. For series with negative or fractional exponents the PuiseuxRing type must be used instead. (#27577 by @oscarbenjamin)
-
BREAKING CHANGE: True division like
a / bwith elements of polynomial rings now computes an exact division (exquo) rather than floor division. For floor division usea // b. (#27577 by @oscarbenjamin)
- Added a unit check for the constant term in
_series_inversion1function ofring_seriesto ensure valid series inversion. (#27637 by @Jatinbhardwaj-093)
-
Enhanced
GroebnerBasis.reducemethod to acceptPolyobjects instead of justExprobjects. (#27598 by @aasim-maverick) -
Added new factor_system function to find all possible factor combinations that satisfy a system of equations. (#27169 by @aasim-maverick)
-
minpoly no longer errors on unevaluate
expnumbers (via import_is_surd_sum) (#27075 by @smichr) -
cancelcan accept a tuple or Tuple but it must now be of length 2; any other length will raise an error (#27098 by @smichr) -
Implement gcdex for Field and GaussianIntegerRing (#26983 by @isuruf)
-
duplicate factors are now collected by factor_list (#24665 by @Ishanned and @smichr)
-
It is now possible to compute the roots of polynomials with algebraic coefficients as RootOf using
real_roots(p, extension=True)orall_roots(p, extension=True). (#26945 by @mmaaz-git) -
fixed minpoly to not return
-x**2instead ofxfor an unsimplified value of 0 comprised of a difference of square roots (#26919 by @oscarbenjamin and @smichr) -
The RR and CC domains now use mpmath's mpf and mpc types directly rather than making custom subclasses of mpf, mpc and PythonMPContext. This ensures that only mpmath's public interface is used. This also means that elements of RR and CC no longer have a
.parentattribute (as is also the case for ZZ , QQ and GF(p)). A bug causing all RealField domains to share a global precision setting was also fixed. The tolerance parameter of RealField and ComplexField is also removed. (#26861 by @oscarbenjamin) -
BREAKING CHANGE: The elements of RR and CC no longer have a
.parent()method. This is because they are no plain mpmathmpfandmpcinstances rather than subclasses. (#26861 by @oscarbenjamin) -
A bug in
count_rootsfor polynomials over real algebraic extension fields was fixed. Previously incorrect results were returned when counting roots over a domain likeQQ.algebraic_field(sqrt(2)). (#26813 by @oscarbenjamin) -
Elements of algebraic numberfields are converted to simpler expressions in many cases when converted back to ordinary expressions. This can lead to big simplifications of expressions generated when using algebraic fields with multiple generators of types like RootOf that do not simplify automatically in the Expr representation. (#26816 by @oscarbenjamin)
-
The
Poly.lift()method has been improved to use resultants. Previously it would fail with an exception in some cases. It now can return lower degree polynomials in many cases as well. (#26812 by @oscarbenjamin) -
RootOf.is_algebraicnow returns True. This means thatPoly(..., extension=True)can correctly construct extension fields whenRootOfare in the coefficients. (#26806 by @oscarbenjamin and @smichr) -
Flint's univariate nmod_poly or fmpz_mod_poly types are used by Poly/DMP for polynomials over GF(p) when the ground types are set to
"flint". This makes many operations with univariate polynomials over GF(p) much faster. (#25940 by @oscarbenjamin) -
A bug in
poly(expr)involving mixed integer and rational coefficients was fixed. This indirectly fixes some other things likesolvefor some inputs where previously an exception was raised. (#26666 by @oscarbenjamin)
- Added
-
printing
-
Breaking change: The aesaracode in sympy.printing has been deprecated. (#27935 by @vprayag2005)
-
Updates the rust printer to reflect the reserved words in the 2024 edition. (#27919 by @RCoder01)
-
Add
disable_split_super_suboption toprint_mathmlto stop symbol names being split into name, superscript, and subscript parts. (#27849 by @dbrnz) -
Added new PyTorch printer module for lambdify (#27760 by @clayton-r and @synthetic-tensors)
-
Fixed a bug with printing of
sympy.signin Rust. Formerly, the printed expression returned +-1 for arguments of 0, which does not match the definition ofsympy.sign. (#27736 by @aaron-skydio) -
CmathPrinter was implemented to print cmath functions correctly in lambdified code. (#27552 by @krishnavbajoria02)
-
Fixed missing space in translation of 'Not' in pycode printer. (#27462 by @kletzi)
-
Fixed the printing of Julia sinc expressions (#27308 by @kjakatter)
-
Fixed the argument order when printing a two-argument ArcTan Mathematica expression (#27307 by @kjakatter)
-
Fixed handling of LaTeX-style symbols in test_lambdify_LaTeX_symbols_issue_23374 by accounting for possible substitution with Dummy symbols during lambdify. (#27269 by @Ytemiloluwa)
-
Added log10 to the list of C89 functions (#27243 by @kjakatter)
-
Fixed errors of
NumPyPrinterfrom printingArraywith more than 2 dimensions. For example,NumPyPrinter().doprint(Array([[[1, 2, 3]]])). (#27153 by @sylee957) -
Fixed issues that
NumPyPrinterprints arrays with wrong shape forArraywith some0in the shape. For example,NumPyPrinter().doprint(Array([], (0, 1)))(#27153 by @sylee957) -
Fixed issues that
sstrgives errors forArraywith some0in the shape. For example,sstr(Array([], (0, 1))). (#27153 by @sylee957) -
Replaced deprecated
mfencedfor MathML printer. (#27137 by @sylee957) -
Replaced deprecated
frakturattribute for MathML printer. (#27137 by @sylee957) -
Implemented LaTeX printing of
DotProductfor matrix expressions. (#27135 by @sylee957)
-
dpscan now be passed as a keyword for StrPrinter to control the number of digits shown (#27043 by @VectorNd) -
Subclasses of CodePrinter can now customize printing of
Derivativeinstances by implementing e.g._print_Derivative_zeta(args, deriv_orders). This allows lambdify to work with expressions involving unexpandedDerivativeinstances. (#26678 by @bjodah) -
Rust codegen now automatically casts integers to floats in mixed expressions to prevent compilation errors (#26882 by @gfrlv)
- Add
_print_isnanand_print_isinfin TensorflowPrinter. (#26876 by @zexuan-zhou)
- A bug in the LaTeX printer causing an infinite recursion for some inputs was fixed. (#26884 by @oscarbenjamin)
-
-
series
-
Fixed
signin gruntz for better handling of terms having negative bases in power expressions with symbolic exponents. (#27013 by @arnabnandikgp) -
Fixing cdir for limit & leadterm calculation. (#26992 by @anutosh491)
-
Better Order computations to handle simplification of complex expressions containing factorials. (#27014 by @arnabnandikgp)
-
Limits of
UndefinedFuntionwill remain unevaluated. (#26989 by @arnabnandikgp) -
mrvraises ValueError forUndefinedFuntion. (#26989 by @arnabnandikgp) -
Better handling of Substitution of expression containing order terms in order terms. (#26941 by @arnabnandikgp)
-
Fixed issues regarding auto-simplification of expressions of the form
exp(log(...))in gruntz. (#26848 by @arnabnandikgp) -
Added leading term and nseries Methods for Arg Function. (#23595 by @anutosh491)
-
Support Ei(z) expansion at -oo (#26954 by @anutosh491)
-
Validate number of terms for the series function (#26955 by @anutosh491)
-
removal of unnecesary conditional in mrv term calculation in gruntz. (#26694 by @arnabnandikgp)
-
-
simplify
-
Refactored
forward_jacobianfunction to be private and handledynamicsymbols. (#26773 by @brocksam and @ricdigi) -
Optimized DAG to canonical expression tree transformations. (#26773 by @brocksam and @ricdigi)
-
Added a new class,
CseExprfor expressions that have undergone common subexpression elimination. (#24649 by @brocksam) -
Updated the
csefunction to return a (backwards compatible) instance ofCseExpr. (#24649 by @brocksam) -
Made
radsimphandle non-Expr arguments. (#26720 by @ForeverHaibara)
-
-
solvers
-
solvewill now reject matrices with symbolic shape. Previously it would go into an infinite loop. (#27928 by @vprayag2005) -
Added
extension=Trueoption tosolve_triangulatedfor computing solutions in algebraic fields usingCRootOf. (#27688 by @ForeverHaibara)
- A new function
factor_system()is added to factorize a system of equations into subsystems consisting of only irreducible factors. Functionsfactor_system_bool(),factor_system_condandfactor_system_polyare also added to express a factorized system of equations in disjunctive normal form while preserving all information about degenerate cases of any symbolic parameters. (#27303 by @aasim-maverick)
-
clarify wording in the docs that there are no current plans to remove
solve(#27343 by @klmcwhirter) -
better removal of redundant solutions from systems of equations (#27020 by @smichr)
-
positive-dimensional systems of polynomials which raised an error may now report a solution (#27020 by @smichr)
-
Added a new test for wrong result integral. (#27025 by @bharatAmeria and @smichr)
-
Now
diophantine()only returns a trivial solution under assumptions. (#26796 by @zylipku) -
Fix a bug with cornacchia(). Formerly diophantine() and diop_quadratic() may miss some solutions for quadratic equations. (#26780 by @zylipku)
-
-
stats
- Fixed expectation calculation for Poisson Distribution (#27347 by @RushabhMehta2005)
-
tensor
-
doitis no longer automatically called on the result ofTensExpr.expand(#27103 by @Kishore96in) -
Calling
expandonTensMulwhose coeff is anAddnow results in aTensAdd(earlier, no expansion would be performed) (#27103 by @Kishore96in) -
TensAdd.contract_deltano longer raises an error for non-TensExpr arguments (#27056 by @Kishore96in and @smichr) -
Fix a bug where
TensAdd( K(p) , - 2*K(p) ).canon_bp()would raise an error. (#27030 by @Kishore96in) -
Internal calls to
doit()are now always shallow. (#27015 by @Kishore96in) -
For any TensMul instance
A, ensure thatA.coeff*A.nocoeff == Ais always true. (#26476 by @Kishore96in) -
Calling
subsonTensMulno longer leads to index conflicts in some cases (#26878 by @Kishore96in) -
Marks ArraySymbol as not iterable to allow lambdify to work with ArraySymbols (#26809 by @amosson)
-
Matching now works for TensAdd (#26721 by @Kishore96in)
-
Matching now works for TensMul whose arguments all commute. (#26615 by @Kishore96in)
-
-
utilities
-
Added PyTorch backend support to lambdify (#27760 by @clayton-r and @synthetic-tensors)
-
Enhanced lambdify to support Python's built-in cmath module. (#27552 by @krishnavbajoria02)
-
Improved documentation for the helpers parameter in autowrap() and ufuncify() functions to clarify parameter format, types, and provide more comprehensive examples, including use of helper functions with multiple arguments. (#27496) (#27496 by @pratykshg9999)
-
lambdify now maps Min and Max to the numpy functions minimum and maximum. (#27483 by @bjodah)
-
It is now possible to pickle expressions containing undefined functions (like
Function('f')). Previously trying to pickle such expressions would fail with an exception. (#26881 by @oscarbenjamin)
-
-
vector
-
A bug in VectorAdd causing terms to be dropped was fixed. Previously incorrect results were returned. (#27104 by @oscarbenjamin)
-
Vector.equals has been fixed so that vectors can be compared with
v1.equals(v2). Previously incorrect results were returned. (#27104 by @oscarbenjamin) -
Complex conjugates of vectors can be comuted with e.g.
v1.conjugate(). Previously incorrect results were returned. (#27104 by @oscarbenjamin) -
Added VectorKind (#26623 by @Henrique-S123 and @JotacBravo)
-
Add with vectors now calls VectorAdd (#26623 by @Henrique-S123 and @JotacBravo)
-
-
other
- Python 3.8 is no longer supported. (#27882 by @oscarbenjamin)
The following people contributed at least one patch to this release (names are given in alphabetical order by last name). A total of 98 people contributed to this release. People with a * by their names contributed a patch for the first time for this release; 61 people contributed for the first time for this release.
Thanks to everyone who contributed to this release!
- Zexuan Zhou (Bruce)*
- Anton Akhmerov
- Aasim Ali*
- Karan Anand*
- Jean-François B*
- Krishnav Bajoria*
- Oscar Benjamin
- bharatAmeria*
- Jatin Bhardwaj*
- Anutosh Bhat
- Anurag Bhat
- Akshansh Bhatt
- Francesco Bonazzi
- Michael Boyle
- João Bravo
- Sam Brockie
- David Brooks*
- Mathis Cros*
- Björn Dahlgren
- dependabot[bot]*
- Amir Ebrahimi*
- Corbet Elkins*
- Steven Esquea*
- Isuru Fernando
- ForeverHaibara
- George Frolov*
- Soumendra Ganguly*
- Matthias Geier
- Mark van Gelder
- Riccardo Di Girolamo
- Aaron Gokaslan
- Kishore Gopalakrishnan
- Brian E. Granger
- Shiyao Guo*
- Pratyksh Gupta*
- Harshit Gupta*
- Oscar Gustafsson
- Au Huishan*
- Jan Jancar
- Rishabh Kamboj*
- Hwayeon Kang
- Kris Katterjohn*
- Agriya Khetarpal*
- KJaybhaye*
- Lucas Kletzander*
- Victoria Koval*
- Abhishek Kumar
- Shishir Kushwaha
- Håkon Kvernmoen*
- Davi Laerte*
- Nicholas Laustrup*
- S.Y. Lee
- Zhuoyuan Li*
- Nikhil Maan
- Muhammad Maaz*
- Marek Madejski*
- Leonardo Mangani*
- Kevin McWhirter*
- Rushabh Mehta*
- Ivan A. Melnikov*
- Ovsk Mendov*
- Aaron Meurer
- Aaron Miller
- Gagan Mishra*
- Jason Moore
- Andrew Mosson*
- MostafaGalal1*
- Arnav Mummineni*
- Arnab Nandi
- Matt Ord*
- Ishan Pandhare
- Praveen Perumal*
- Alejandro García Prada*
- Clayton Rabideau*
- Tilo Reneau-Cardoso
- Roelof Rietbroek*
- Voaides Negustor Robert*
- João Rodrigues*
- Guido Roncarolo*
- Borek Saheli*
- Hanspeter Schmid
- Thangaraju Sibiraj*
- Paramjit Singh*
- Chris Smith
- Henrique Soares
- Harikrishna Srinivasan*
- Peter Stahlecker*
- Timo Stienstra
- Daiki Takahashi
- Prashant Tandon*
- James Titus*
- Gonzalo Tornaría*
- Matthew Treinish*
- Prayag V*
- Matt Wang
- Edward Z. Yang*
- Quek Zi Yao*
- Temiloluwa Yusuf [email protected] ytemiloluwa*
d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517 sympy-1.14.0.tar.gz e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5 sympy-1.14.0-py3-none-any.whl 4ac70c68d2b644c0c02b388da9206fe6620451a8874c9d4b0b44676a4a1af0cc sympy-docs-html-1.14.0.zip 48351ac0b1349c040ccaf34d08177b477c3747a0e0e5ce7175a4551587273859 sympy-docs-pdf-1.14.0.pdf