装饰器

有用的工具装饰器。

@sympy.utilities.decorator.deprecated(
message,
*,
deprecated_since_version,
active_deprecations_target,
stacklevel=3,
)[源代码][源代码]

将一个函数标记为已弃用。

如果整个函数或类已被弃用,应使用此装饰器。如果仅某些功能被弃用,则应直接使用 warns_deprecated_sympy()。此装饰器仅是为了方便。使用此装饰器与在函数顶部调用 warns_deprecated_sympy() 在功能上没有区别。

装饰器接受与 warns_deprecated_sympy() 相同的参数。有关此装饰器的关键字作用的详细信息,请参阅其文档。

有关在 SymPy 中何时以及如何弃用功能的详细信息,请参阅 弃用策略 文档。

示例

>>> from sympy.utilities.decorator import deprecated
>>> from sympy import simplify
>>> @deprecated("""    ... The simplify_this(expr) function is deprecated. Use simplify(expr)
... instead.""", deprecated_since_version="1.1",
... active_deprecations_target='simplify-this-deprecation')
... def simplify_this(expr):
...     """
...     Simplify ``expr``.
...
...     .. deprecated:: 1.1
...
...        The ``simplify_this`` function is deprecated. Use :func:`simplify`
...        instead. See its documentation for more information. See
...        :ref:`simplify-this-deprecation` for details.
...
...     """
...     return simplify(expr)
>>> from sympy.abc import x
>>> simplify_this(x*(x + 1) - x**2) 
<stdin>:1: SymPyDeprecationWarning:

The simplify_this(expr) function is deprecated. Use simplify(expr)
instead.

See https://docs.sympy.org/latest/explanation/active-deprecations.html#simplify-this-deprecation
for details.

This has been deprecated since SymPy version 1.1. It
will be removed in a future version of SymPy.

  simplify_this(x)
x
sympy.utilities.decorator.conserve_mpmath_dps(func)[源代码][源代码]

函数执行完毕后,将 mpmath.mp.dps 的值重置为函数运行前的值。

sympy.utilities.decorator.doctest_depends_on(
exe=None,
modules=None,
disable_viewers=None,
python_version=None,
ground_types=None,
)[源代码][源代码]

添加关于装饰对象的文档字符串进行文档测试时需要满足的依赖项的元数据。

exe 应该是一个可执行文件的列表

modules 应该是一个模块列表

disable_viewers 应该是 preview() 要禁用的查看器列表

python_version 应为所需的最小 Python 版本,以元组形式表示(如 (3, 0)

sympy.utilities.decorator.memoize_property(propfunc)[源代码][源代码]

属性装饰器,首次评估后缓存可能昂贵的 propfunc 的值。缓存的值存储在附加下划线的相应属性名称中。

class sympy.utilities.decorator.no_attrs_in_subclass(cls, f)[源代码][源代码]

不要从基类’继承’某些属性

>>> from sympy.utilities.decorator import no_attrs_in_subclass
>>> class A(object):
...     x = 'test'
>>> A.x = no_attrs_in_subclass(A, A.x)
>>> class B(A):
...     pass
>>> hasattr(A, 'x')
True
>>> hasattr(B, 'x')
False
sympy.utilities.decorator.public(obj)[源代码][源代码]

obj 的名称追加到全局 __all__ 变量中(调用点)。

通过在函数或类上使用此装饰器,你可以达到与手动填充 __all__ 变量相同的目标,你只需避免重复(对象的名称)。你还可以在定义对象时知道它是否是公开的,而不是在某个随机位置(设置 __all__ 的地方)。

请注意,在多个装饰器设置中(几乎在所有情况下),@public 装饰器必须在其他任何装饰器之前应用,因为它依赖于对象的全局命名空间指针。如果你先应用其他装饰器,@public 可能会修改错误的命名空间。

示例

>>> from sympy.utilities.decorator import public
>>> __all__ # noqa: F821
Traceback (most recent call last):
...
NameError: name '__all__' is not defined
>>> @public
... def some_function():
...     pass
>>> __all__ # noqa: F821
['some_function']
sympy.utilities.decorator.threaded(func)[源代码][源代码]

对对象的子元素应用 func ,包括 Add

这个装饰器旨在统一地使将一个函数应用于复合对象的所有元素成为可能,例如矩阵、列表、元组和其他可迭代容器,或仅仅是表达式。

这个版本的 threaded() 装饰器允许在线程中处理 Add 类的元素。如果这种行为不可取,请使用 xthreaded() 装饰器。

使用此装饰器的函数必须具有以下签名:

@threaded
def function(expr, *args, **kwargs):
sympy.utilities.decorator.threaded_factory(func, use_add)[源代码][源代码]

用于 threaded 装饰器的工厂。

sympy.utilities.decorator.xthreaded(func)[源代码][源代码]

对对象的子元素应用 func,排除 Add

这个装饰器旨在统一地使将一个函数应用于复合对象的所有元素成为可能,例如矩阵、列表、元组和其他可迭代容器,或仅仅是表达式。

这个版本的 threaded() 装饰器禁止对 Add 类的元素进行线程化。如果这种行为不可取,请使用 threaded() 装饰器。

使用此装饰器的函数必须具有以下签名:

@xthreaded
def function(expr, *args, **kwargs):