parse_expr терпит неудачу, когда дзета используется как имя переменной в большем выражении - PullRequest
0 голосов
/ 09 ноября 2018

Я использую sympy 1.3 с python 3.6.6 и пытаюсь использовать sympy_parser.parse_expr для создания выражения sympy из строки. Выполнение этого с 'zeta' работает нормально, но использование 'zeta + 1' дает ошибку типа:

  File "/home/user/.local/lib/python3.6/site-packages/sympy/core/expr.py", line 1023, in as_terms
    coeff, _term = term.as_coeff_Mul()
TypeError: as_coeff_Mul() missing 1 required positional argument: 'self'

Вот как создать это сообщение:

from sympy.parsing.sympy_parser import parse_expr
parse_expr('zeta+1')

Я думаю, что это интерпретирует zeta как функцию (сообщение об ошибке мне неясно). Я также попытался установить global_dict следующим образом: parse_expr('zeta+1', global_dict={}), но затем произойдет сбой, поскольку он говорит, что Symbol не определен. Я могу пройти и добавить SymbolInteger) к своему пользовательскому global_dict, а затем он анализируется правильно, но мне это кажется уродливым (мне также нужно было бы добавить другие для поддержки общих выражений, таких как Float).

Есть ли более чистый способ сделать это?

1 Ответ

0 голосов
/ 09 ноября 2018

В SymPy zeta означает дзета-функцию Римана, так что именно так интерпретируется ваша строка. Но тогда zeta + 1 не является допустимым выражением SymPy, поскольку нельзя добавить число к функции (zeta(x) + 1 было бы принято.)

Решение: используйте параметр local_dict, чтобы сообщить SymPy, что на самом деле здесь означает дзета. Не связывайтесь с global_dict; локальный в любом случае имеет приоритет над глобальным.

from sympy import symbols
zeta = symbols('zeta')
parse_expr('zeta + 1', local_dict={'zeta': zeta})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...