2015-06-01 2 views
1

Когда я разбираю выражение с большим, чем оператор, используя sympify, я получаю выражение с StrictGreaterThan в качестве корня. Однако, заменяя оператор ==, sympify оценивает выражение в логическом False. Как сохранить sympy от оценки выражения с помощью ==, чтобы получить общее выражение, как и с оператором >?Несогласованное поведение с sympify при оценке выражений с реляционными операторами

from sympy import * 

In [2]: s1 = 'a - 4 > b + 5' 

In [3]: expr1 = sympify(s1) 

In [4]: type(expr1) 

Out[4]: sympy.core.relational.StrictGreaterThan 

In [5]: s2 = 'a - 4 == b + 5' 

In [6]: expr2 = sympify(s2) 

In [7]: type(expr2) 

Out[7]: bool 

ответ

0

Один из способов я решил эту проблему, используя SymPy, чтобы довести до RHS LHS, а затем sympify() строка.
т.е. изменение LHS == RHS к LHS - RHS

exprStr = 'a - 4 == b + 5' 
indOfEq = exprStr.find('==') 
if indOfEq != -1: 
    splitExpr = exprStr.split('=') 
    if len(splitExpr)==2: 
     exprStr = splitExpr[0]+'-('+splitExpr[1]+')' 
expr2 = sympify(exprStr) 
0

Как объяснено в http://docs.sympy.org/dev/gotchas.html,

двойной знак равенства (==) используются для проверки равенства. Однако этот проверяет выражения точно, а не символически.

Вы можете использовать sympy.Eq, как в

In [54]: sympy.Eq(sympy.abc.a - 3, sympy.abc.b + 5) 
Out[54]: a - 3 == b + 5 

In [55]: sympy.GreaterThan(sympy.abc.a - 3, sympy.abc.b + 5) 
Out[55]: a - 3 >= b + 5 

Во всяком случае, это действительно кажется непоследовательным.

Смежные вопросы