Вам не нужно использовать parse_expr
здесь (или математику).
>>> from sympy import pi, solveset, sin, Eq
>>> from sympy.abc import a
>>> solveset(Eq(sin(pi/6)+sin(a), 1), a, domain=S.Reals)
Union(ImageSet(Lambda(_n, 2*_n*pi + 5*pi/6), Integers), ImageSet(Lambda(_n, 2*_n*pi + pi/6), Integers))
В противном случае, если вы это сделаете, вам нужно указать parse_expr
, что использовать для «математики» (в противном случае создается символ с именем «математика», а символы не имеют атрибута pi
... таким образом, ошибка):
>>> import math
>>> parse_expr('math.pi', {'math': math}) # local dict: "for "math" use math
3.14159265359
Вы, вероятно, можете восстановить свой пример, но вы должны знать, что (в настоящее время) solveset не нравится работать с числами с плавающей запятой в этом случае:
>>> solveset(sin(x) - .5, domain=S.Reals)
EmptySet()
Но это работает, если вы замените 0.5
на S(1)/2
(что создает SymPy Rational, 1/2).