跳转到主要内容

一个极简的符号包。

项目描述

Package CodeStyle License PyVersion CI Lint

symbolite: 一个极简的符号Python包


Symbolite允许您创建符号数学表达式。只需创建一个符号(或多个)并像在Python中那样操作它们。

>>> from symbolite import Symbol
>>> x = Symbol("x")
>>> y = Symbol("y")
>>> expr1 = x + 3 * y
>>> print(expr1)
x + 3 * y

表达式只是一个未命名的Symbol。您可以用所需值轻松替换符号。

>>> expr2 = expr1.subs_by_name(x=5, y=2)
>>> print(expr2)
5 + 3 * 2

输出仍然是一个符号表达式,您可以对其进行评估

>>> expr2.eval()
11

请注意,我们还收到一条警告(No libsl provided, defaulting to Python standard library.)。这是因为评估表达式需要一个实际的库实现,通常命名为libsl。默认的一个只是使用Python的math模块。

您可以通过明确提供libsl实现来避免此警告。

>>> from symbolite.impl import libstd
>>> expr2.eval(libstd)
11

您也可以使用正确的名称导入它,它将被找到

>>> from symbolite.impl import libstd as libsl
>>> expr2.eval()
11

除了Symbol类之外,还有ScalarVector类来表示整数、浮点数或复数,以及它们的数组。

>>> from symbolite import Scalar, Vector
>>> x = Scalar("x")
>>> y = Scalar("y")
>>> v = Vector("v")
>>> expr1 = x + 3 * y
>>> print(expr1)
x + 3 * y
>>> print(2 * v)
2 * v

操作标量的数学函数在scalar模块中可用。

>>> from symbolite import scalar
>>> expr3 = 3. * scalar.cos(0.5)
>>> print(expr3)
3.0 * scalar.cos(0.5)

操作向量的数学函数在vector模块中可用。

>>> from symbolite import vector
>>> expr4 = 3. * vector.sum((1, 2, 3))
>>> print(expr4)
3.0 * vector.sum((1, 2, 3))

请注意,函数的命名与Python的math模块一致。再次强调,这是一个符号表达式,直到评估。

>>> expr3.eval()
2.6327476856711
>>> expr4.eval()
18.0

还提供了三种其他实现: NumPySymPyJAX

>>> from symbolite.impl import libnumpy
>>> expr3.eval(libsl=libnumpy)
2.6327476856711
>>> from symbolite.impl import libsympy
>>> expr3.eval(libsl=libsympy)
2.6327476856711

(注意不同库在舍入和显示的方式可能不同)

通常,为了评估一个表达式,所有符号都必须替换为值。然而,当使用包含标量对象的实现(如SymPy)时,你仍然可以评估。

>>> from symbolite.impl import libsympy as libsl
>>> (3. * scalar.cos(x).eval(libsl))
3.0*cos(x)

这实际上是一个带有SymPy符号(x)的SymPy表达式。

顺便提一下,请在向量模块中查看vectorizeauto_vectorize函数。

安装

pip install -U symbolite

常见问题解答

问:Symbolite是SymPy的替代品吗?

答:不是

问:它是否旨在将来取代SymPy?

答:不是

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面