杂项

杂项内容,这些内容实际上并不适合放在其他任何地方。

sympy.utilities.misc.as_int(n, strict=True)[源代码][源代码]

将参数转换为内置整数。

返回值保证与输入值相等。如果输入值为非整数值,则引发 ValueError。当 strict 为 True 时,使用 __index__,而当其为 False 时,使用 int

示例

>>> from sympy.utilities.misc import as_int
>>> from sympy import sqrt, S

该函数主要关注于清理需要处理内置整数的函数的输入,因此任何明确是整数的内容都应作为 int 返回:

>>> as_int(S(3))
3

浮点数由于精度有限,不被认为是精确的,除非 strict 标志为 False,否则会引发错误。这种精度问题在大浮点数中变得明显:

>>> big = 1e23
>>> type(big) is float
True
>>> big == int(big)
True
>>> as_int(big)
Traceback (most recent call last):
...
ValueError: ... is not an integer
>>> as_int(big, strict=False)
99999999999999991611392

输入可能是一个复杂整数值的表示时,默认情况下也会被拒绝:

>>> one = sqrt(3 + 2*sqrt(2)) - sqrt(2)
>>> int(one) == 1
True
>>> as_int(one)
Traceback (most recent call last):
...
ValueError: ... is not an integer
sympy.utilities.misc.debug(*args)[源代码][源代码]

如果 SYMPY_DEBUG 为 True,则打印 *args,否则不执行任何操作。

sympy.utilities.misc.debug_decorator(func)[源代码][源代码]

如果 SYMPY_DEBUG 为 True,它将打印一个带有参数和所有装饰函数结果的漂亮的执行树,否则什么都不做。

sympy.utilities.misc.debugf(string, args)[源代码][源代码]

如果 SYMPY_DEBUG 为 True,则打印 string%args,否则不执行任何操作。这用于使用格式化字符串的调试消息。

sympy.utilities.misc.filldedent(s, w=70, **kwargs)[源代码][源代码]

s 的副本中去除前导和尾随的空行,然后进行缩进、填充并返回。

空行剥离用于处理像这样的文档字符串,它们在初始三重引号后以换行符开始,在字符串开头插入一个空行。

额外的关键字参数将被传递给 textwrap.fill()

参见

strlines, rawlines
sympy.utilities.misc.find_executable(executable, path=None)[源代码][源代码]

尝试在 ‘path’ 中列出的目录中查找 ‘executable’(’path’ 是一个字符串,列出了由 ‘os.pathsep’ 分隔的目录;默认为 os.environ[‘PATH’])。返回完整的文件名,如果未找到则返回 None。

sympy.utilities.misc.func_name(x, short=False)[源代码][源代码]

返回 \(x\) 的函数名(如果已定义),否则返回 \(type(x)\)。如果 short 为 True 且结果有更短的别名,则返回该别名。

示例

>>> from sympy.utilities.misc import func_name
>>> from sympy import Matrix
>>> from sympy.abc import x
>>> func_name(Matrix.eye(3))
'MutableDenseMatrix'
>>> func_name(x < 1)
'StrictLessThan'
>>> func_name(x < 1, short=True)
'Lt'
sympy.utilities.misc.ordinal(num)[源代码][源代码]

返回 num 的序数形式字符串,例如 1 变为 1st。

sympy.utilities.misc.rawlines(s)[源代码][源代码]

返回一个可复制粘贴的字符串,当打印时,与输入等效。当字符串中有多行时使用此方法。返回的字符串格式化后可以在测试中很好地缩进;在某些情况下,它被包装在dedent函数中,该函数必须从textwrap导入。

示例

注意:因为下面的示例中有需要转义的字符,因为它们本身位于三重引号的文档字符串中,所以下面的表达式看起来比在解释器窗口中打印时更复杂。

>>> from sympy.utilities.misc import rawlines
>>> from sympy import TableForm
>>> s = str(TableForm([[1, 10]], headings=(None, ['a', 'bee'])))
>>> print(rawlines(s))
(
    'a bee\n'
    '-----\n'
    '1 10 '
)
>>> print(rawlines('''this
... that'''))
dedent('''\
    this
    that''')
>>> print(rawlines('''this
... that
... '''))
dedent('''\
    this
    that
    ''')
>>> s = """this
... is a triple '''
... """
>>> print(rawlines(s))
dedent("""\
    this
    is a triple '''
    """)
>>> print(rawlines('''this
... that
...     '''))
(
    'this\n'
    'that\n'
    '    '
)
sympy.utilities.misc.replace(string, *reps)[源代码][源代码]

返回 string ,其中 reps 中的所有键都被其对应的值替换,优先替换较长的字符串,无论它们给出的顺序如何。 reps 可以作为元组或单个映射传递。

参考文献

[1]

https://stackoverflow.com/questions/6116978/如何替换字符串中的多个子字符串

示例

>>> from sympy.utilities.misc import replace
>>> replace('foo', {'oo': 'ar', 'f': 'b'})
'bar'
>>> replace("spamham sha", ("spam", "eggs"), ("sha","md5"))
'eggsham md5'

如果映射中的键重叠(即长度相同且在开头/结尾有相同的序列),则无法保证会得到唯一的答案:

>>> reps = [
...     ('ab', 'x'),
...     ('bc', 'y')]
>>> replace('abc', *reps) in ('xc', 'ay')
True
sympy.utilities.misc.strlines(s, c=64, short=False)[源代码][源代码]

返回一个可复制粘贴的字符串,当打印时,与输入等效。行将被括号包围,且每行长度不超过 c(默认 64)个字符。如果行包含换行符,将返回 \(rawlines\) 结果。如果 short 为 True(默认是 False),那么如果只有一行,将返回不带边界括号的字符串。

示例

>>> from sympy.utilities.misc import strlines
>>> q = 'this is a long string that should be broken into shorter lines'
>>> print(strlines(q, 40))
(
'this is a long string that should be b'
'roken into shorter lines'
)
>>> q == (
... 'this is a long string that should be b'
... 'roken into shorter lines'
... )
True
sympy.utilities.misc.translate(s, a, b=None, c=None)[源代码][源代码]

返回 s ,其中字符已被替换或删除。

示例

>>> from sympy.utilities.misc import translate
>>> abc = 'abc'
>>> translate(abc, None, 'a')
'bc'
>>> translate(abc, {'a': 'x'}, 'c')
'xb'
>>> translate(abc, {'abc': 'x', 'a': 'y'})
'x'
>>> translate('abcd', 'ac', 'AC', 'd')
'AbC'

如果在映射中键重叠的长度相同并且在开头/结尾有一些相同的序列,则无法保证会得到唯一的答案:

>>> translate(abc, {'ab': 'x', 'bc': 'y'}) in ('xc', 'ay')
True