SymPy 1.7发布

2020-11-30 23:56:06

这些是SymPy 1.7的发行说明。您还可以找到早期版本的发行说明。

此版本的SymPy已在Python 3.6、3.7、3.8、3.9和PyPy上进行了测试。有关何时计划放弃对旧版本Python的支持的更多信息,请参见我们的Python版本支持政策。

特别要注意的是,SymPy 1.5.1是支持Python 2.7的最新版本。 SymPy 1.7在Python 2.7上不起作用。 Python 2.7用户应该安装SymPy 1.5.1,并且如果不更新到Python 3,将无法安装任何进一步的SymPy更新。

从sympy意外导入的模块和名称不再可导入。在sympy 1.6中,导入和使用这些名称将给出弃用警告。在sympy 1.7中,这些名称已删除。例如,来自sympy import的添加将需要来自sympy.core import add或将sympy.core.add作为add导入。 (@oscarbenjamin#19554)

弃用:现在不建议在Add,Mul或Pow中使用non-expr args(@oscarbenjamin#19445)

不推荐使用CoordSystem的类签名名称。而是引入了CoordinateSymbol类和CoordSystem.symbols属性。 (#19368 by @ JSS95和@ mcpl-sympy)

不推荐使用CoordSystem.transforms,CoordSystem.connect_to和CoordSystem.coord_tuple_transform_to。相反,引入了类签名关系CoordSystem.transformation和CoordSystem.transform。 (#19368 by @ JSS95和@ mcpl-sympy)

现在,使用viewer =“ StringIO”的调用预览的弃用已过期,而不是被忘记(在1.6.0中为回归)(@ eric-wieser#19905)

模块sympy.printing.ccode,sympy.printing.fcode和sympy.printing.cxxcode已分别重命名为sympy.printing.c,sympy.printing.fortran和sympy.printing.cxx。这样做是为了避免在模块名称与函数名称相同时发生冲突。这些模块仍可以使用其旧名称导入,但是不建议这样做,并且会给出警告(@asmeurer#19908)

从sympy.printing.codeprinter导入分配不再起作用。您应该从sympy.codegen导入import Assignment,这是自SymPy 1.1以来Assignment所在的位置。 (#19908 by @asmeurer)

用viewer =“ file”调用preview不再寻找文件可执行文件(1.6.0中的回归)(@ eric-wieser#19905)

现在,solve_linear_system是linsolve的瘦包装。建议在新代码中使用linsolve。 resolve_linear_system将来可能会被弃用或删除。 (#18814 by @oscarbenjamin)

sympy.codegen和sympy.combinatorics不再从sympy import *中导入。 codegen和combinatorics模块没有顶级名称空间中包含的任何名称,因此将它们与顶级SymPy一起导入是一个错误。这缩短了从sympy import *的导入时间。 (#19908 by @asmeurer)

将错误修复到矩阵表达式的解析器中,以正确构建CodegenArray对象。 (@Upabjojr#19197)

修复了PermutationGroup.minimal_blocks中的一个错误,该错误是由于迭代列表时修改列表导致的。 (@ ilya-pchelintsev#19954)

从sympy意外导入的模块和名称不再可导入。在sympy 1.6中,导入和使用这些名称将给出弃用警告。在sympy 1.7中,这些名称已删除。例如,来自sympy import的添加将需要来自sympy.core import add或将sympy.core.add作为add导入。 (@oscarbenjamin#19554)

引入了可扩展的add,mul和power函数,以允许sympy对象定义应使用哪些类来代替Add,Mul和Pow(例如,矩阵使用MatAdd)。这是一种实验性方法,旨在通过用户定义的类型(例如MatAdd而不是Add)自定义核心例程的行为(扩展,收集等)。该机制仍处于试验阶段,尚未在整个内核中完全实现,并且可能会在以后的sympy版本中更改或删除。 (@ JSS95和@ mcpl-sympy#19463)

弃用:现在不建议在Add,Mul或Pow中使用non-expr args(@oscarbenjamin#19445)

在创建带有valuate = False的Add或Mul时,不再删除标识(0或1)。 #19450 by @oscarbenjamin)

用不同符号表示的Lambda将不再相等。这是对Python ==运算符的滥用(@smichr#19261)

不推荐使用CoordSystem的类签名名称。而是引入了CoordinateSymbol类和CoordSystem.symbols属性。 (#19368 by @ JSS95和@ mcpl-sympy)

不推荐使用CoordSystem.transforms,CoordSystem.connect_to和CoordSystem.coord_tuple_transform_to。相反,引入了类签名关系CoordSystem.transformation和CoordSystem.transform。 (#19368 by @ JSS95和@ mcpl-sympy)

当args为set时,lambdify添加了警告。 (@ foice,@ RobertoFranceschini和@ sylee957#19792)

修复了将RisingFactorial / FallingFactorial重写为gamma或阶乘时的假设错误(@ sachin-4099#18696)

偏心率> = 1且偏心率。 (#15396 by @oscarbenjamin)

现在,乳胶再次要求将设置作为关键字而不是位置参数进行传递,并尊重使用set_global_settings更改的打印机设置;从sympy 1.2及更早版本恢复行为。 (@ eric-wieser#20067)

当指数为-1(@bjodah和@mmohrhard#19956)时,在C89CodePrinter的pow打印中使用1.0的字面后缀

模块sympy.printing.ccode,sympy.printing.fcode和sympy.printing.cxxcode已分别重命名为sympy.printing.c,sympy.printing.fortran和sympy.printing.cxx。这样做是为了避免在模块名称与函数名称相同时发生冲突。这些模块仍可以使用其旧名称导入,但是不建议这样做,并且会给出警告(@asmeurer#19908)

从sympy.printing.codeprinter导入分配不再起作用。您应该从sympy.codegen导入import Assignment,这是自SymPy 1.1以来Assignment所在的位置。 (#19908 by @asmeurer)

用viewer =“ file”调用preview不再寻找文件可执行文件(1.6.0中的回归)(@ eric-wieser#19905)

现在,使用viewer =“ StringIO”的调用预览的弃用已过期,而不是被忘记(在1.6.0中为回归)(@ eric-wieser#19905)

如果前导包含%字符,则预览不再会因ValueError而失败。 (@ eric-wieser#19858)

LaTeX打印机无法识别的类型不再将其__str__解释为LaTeX,并将其str(...)打印为预格式化的文本,就像正常打印一样。这包括内置的str类型:latex(“ hello”)现在生成\ mathtt {\ text {hello}}。

如果要将自定义类型解释为乳胶,则应按照文档中的说明定义_latex挂钩:

现在,乳胶打印机使用... x10 ^ ...表示法而不是... e ...表示法显示内置浮点。 (@ eric-wieser#19611)

现在,如果找不到查看器,则预览将引发OSError而不是SystemError。 (@ eric-wieser#19818)

Preview(...,output ='pdf')现在使用dvipdfmx代替dvipdf(如果可用)。结果,它现在可以与Windows上的MiKTeX安装一起使用。 (@ eric-wieser#19635)

在已转换为Latex的字符串上不再调用LatexPrinter._print。 (@ eric-wieser#19614)

添加了新的sympy.printing.defaults.Printable基类,该基类是根据LatexPrinter()。doprint()提供_repr_latex_的混合。子类化的任何用户类型都将选择init_printing。 (@ eric-wieser#19425)

打印具有多个Number因子的未评估Muls将严格按顺序显示所有因子。身份也将明确显示。 #19450 by @oscarbenjamin)

现在,将实现_latex的用户类型嵌入到列表或dict之类的内置集合中时,会打印为LaTeX。 (@ eric-wieser#19389)

修复了srepr函数无法打印字典并正确设置的错误(@ rational-kunal#19346)

将e.is_Pow启发式方法添加到limits.py中,以改进Pow对象的极限评估(@ sachin-4099,#19680)

gruntz.py的mrv()函数和polytools.py的cancel()函数中的更改可解决限制评估中的RecursionError和Timeout(@ sachin-4099,#19646)

向limit.py的doit()方法添加功能,该功能使用is_meromorphic()进行极限评估(@ sachin-4099,#19432)

修复了具有指定为非中心限制的偶数或奇数函数的Fourier_series错误计算。 (@ sylee957#19382)

在gruntz.py的rewrite()函数中用subs()替换xreplace(),以解决错误的极限值评估(@ sachin-4099,#19297)

向gruntz.py的limitinf()函数添加一个条件,以解决错误的极限值评估(@ sachin-4099,#19292)

较早的expr和set被视为相等,这为某些set函数(主要是--in,is_subset)提供了错误的输出,使得set和expr不相等(@ sidhu1012#20208)

对sym和基集不匹配签名的错误检查已得到改进(@smichr#19512)

ConditionSet仍尝试统一符号并拒绝作为ConditionSet给出的基本集,但在无法完成时将不再引入新符号(并将基本集保留为ConditionSet)(@ smichr#19512)

修复了替换目标为自由符号的情况下的ConditionSet.subs()的问题。 (@ gschintgen#19495)

具有不同符号的Lambda的ImageSet将不再比较相等,应该像a.dummy_eq(b)(@smichr#19261)进行比较

修复了sqrtdenest对于某些形式的sqrt(a + b * sqrt(r))给出错误结果的问题(#19932 by @ sylee957)

修复了当收集的符号出现在对应的表达式中时在收集中的错误。 (@mloubout#19431)

添加了简化策略以简化ODE系统的解决方案(@ mijo2和@oscarbenjamin#19998)

通过多种方法将ODE的高阶系统还原/转化为ODE的一阶系统,从而解决该问题。 (#19838 by @ mijo2)

添加了组件划分技术,以将ODE的系统划分为多个逻辑子系统,并分别解决每个子系统。 (@ mijo2#19762)

_linear_neq_order1_type1-4的API进行了更改,使任何人都可以更轻松地访问求解器(@ mijo2#19653)

增加了新的n个方程线性一阶非常数系数非齐次求解器,其中ODEs系统的系数矩阵与其反导数可交换。 (#19594 by @ mijo2)

Solveset将始终使用仅具有实数或复数属性而没有其他属性的符号;当返回ConditionSet时,如果不引起结果评估,将使用要为其寻求解决方案的原始符号。 (@smichr#19512)

在dsolve中,没有一种通用的求解器可以求解积分形式的任何大小的常数系数非均一阶ODE系统。 (#19341 by @ mijo2)

现在支持改进的求解三角函数的求解集功能,尤其是有理和符号系数。 (@ gschintgen#19507)

现在,solve_linear_system是linsolve的瘦包装。建议在新代码中使用linsolve。 resolve_linear_system将来可能会被弃用或删除。 (#18814 by @oscarbenjamin)

增加了一个求解器,该求解器可处理带有任意数量方程的线性一阶非常系数ODE齐次系统的子类。 (#19185 by @ mijo2)

默认情况下,ContinuousMarkovChain的状态空间现在默认为Range对象,而不是S.Reals。 (@ czgdp1807和@naveensaigit#20150)

默认情况下,ContinuousMarkovChain的生成器矩阵现在默认为MatrixSymbol对象,而不是None。 (@ czgdp1807和@naveensaigit#20150)

默认情况下,DiscreteMarkovChain的状态空间现在默认为Range对象,而不是S.Reals。 (@ Maelstrom6#20042)

默认情况下,DiscreteMarkovChain的过渡概率矩阵现在默认为MatrixSymbol对象,而不是None。 (@ Maelstrom6#20042)

现在所有的集成类(RandomMatrixEnsemble,GaussianEnsemble,GaussianOrthogonalEnsemble,...)都将成为桩函数构造函数。如果要将它们用作类,则应将其导入为RandomMatrixEnsembleModel,GaussianEnsembleModel,...(#20018 by @ sylee957)

P和E的返回类型的更改,其中validate = False。在valuate = False的情况下,使P和E分别返回概率和期望对象。 (@ Smit-create#19819)

从外部库中为sympy的所有随机变量添加了采样(@ Smit-create#19342)

将ArrayDerivative类添加为Derivative的子类。此新函数可处理涉及非标量表达式的导数。 (@Upabjojr#20072)

参数区域的积分取决于初始化时极限的顺序。 (@friyaz#20044)

添加了在圆锥上找到有理点的函数(@friyaz和@Upabjojr#19807)

添加类以表示参数曲面上的标量/矢量场的积分。 (@friyaz#19539)

LaTeX文档现在需要使用xelatex而非pdflatex构建。 (@oscarbenjamin#20309)

对Python 3.5的支持已被删除。 SymPy现在需要Python 3.6或更高版本。 (#20145 by @oscarbenjamin)

传递无效的关键字参数时,更多函数引发TypeError,而不是无声地忽略它们(#eric-wieser#20086)

断言sympy.testing.pytest.raises(Exception,func)在不存在pytest时不再总是断言(@ eric-wieser#20012)

使SymPy在导入时做得更少,以便导入sympy更快。 (@asmeurer#19910)

指向:mod:`sympy`的intersphinx链接不再指向不可变矩阵的文档(@ eric-wieser#19430)

以下人员为此发行版贡献了至少一个补丁(名称按姓氏字母顺序排列)。共有94位用户对此版本进行了贡献。名称带有*的人首次为此版本贡献了补丁;共有56人为该版本首次贡献。