in src/latex2sympy2_extended/latex2sympy2.py [0:0]
def convert_relation(self, rel):
if rel.expr():
return self.convert_expr(rel.expr())
lh = self.convert_relation(rel.relation(0))
rh = self.convert_relation(rel.relation(1))
if rel.LT():
if isinstance(lh, And):
return And(*lh._unsorted_args, sympy.StrictLessThan(lh._unsorted_args[-1].rhs, rh, evaluate=False))
elif isinstance(lh, Relational):
return And(lh, sympy.StrictLessThan(lh.rhs, rh, evaluate=False))
return sympy.StrictLessThan(lh, rh, evaluate=False)
elif rel.LTE():
if isinstance(lh, And):
return And(*lh._unsorted_args, sympy.LessThan(lh._unsorted_args[-1].rhs, rh, evaluate=False))
elif isinstance(lh, Relational):
return And(lh, sympy.LessThan(lh.rhs, rh, evaluate=False))
return sympy.LessThan(lh, rh, evaluate=False)
elif rel.GT():
if isinstance(lh, And):
return And(*lh._unsorted_args, sympy.StrictGreaterThan(lh._unsorted_args[-1].rhs, rh, evaluate=False))
elif isinstance(lh, Relational):
return And(lh, sympy.StrictGreaterThan(lh.rhs, rh, evaluate=False))
return sympy.StrictGreaterThan(lh, rh, evaluate=False)
elif rel.GTE():
if isinstance(lh, And):
return And(*lh._unsorted_args, sympy.GreaterThan(lh._unsorted_args[-1].rhs, rh, evaluate=False))
elif isinstance(lh, Relational):
return And(lh, sympy.GreaterThan(lh.rhs, rh, evaluate=False))
return sympy.GreaterThan(lh, rh, evaluate=False)
elif rel.EQUAL():
if isinstance(lh, And):
return And(*lh._unsorted_args, sympy.Eq(lh._unsorted_args[-1].rhs, rh, evaluate=False))
elif isinstance(lh, Relational):
return And(lh, sympy.Eq(lh.rhs, rh, evaluate=False))
return sympy.Eq(lh, rh, evaluate=False)
elif rel.ASSIGNMENT():
# !Use Global variances
if self.config.interpret_simple_eq_as_assignment and is_expr_of_only_symbols(lh):
# set value
self.variances[lh] = rh
self.var[str(lh)] = rh
return rh
else:
if isinstance(lh, And):
return And(*lh._unsorted_args, sympy.Eq(lh._unsorted_args[-1].rhs, rh, evaluate=False))
elif isinstance(lh, Relational):
return And(lh, sympy.Eq(lh.rhs, rh, evaluate=False))
return sympy.Eq(lh, rh, evaluate=False)
elif rel.APPROX():
if is_expr_of_only_symbols(lh):
self.variances[lh] = rh
self.var[str(lh)] = rh
return rh
else:
# We don't want approximation, so we jsut take the non-approximated value
return lh
elif rel.IN():
# !Use Global variances
if hasattr(rh, 'is_Pow') and rh.is_Pow and hasattr(rh.exp, 'is_Mul'):
n = rh.exp.args[0]
m = rh.exp.args[1]
if n in self.variances:
n = self.variances[n]
if m in self.variances:
m = self.variances[m]
rh = sympy.MatrixSymbol(lh, n, m)
self.variances[lh] = rh
self.var[str(lh)] = rh
elif self.config.interpret_simple_eq_as_assignment and is_expr_of_only_symbols(lh):
self.variances[lh] = rh
self.var[str(lh)] = rh
return rh
else:
raise Exception('Unrecognized relation')
return lh
elif rel.UNEQUAL():
if isinstance(lh, And):
return And(*lh._unsorted_args, sympy.Ne(lh._unsorted_args[-1].rhs, rh, evaluate=False))
elif isinstance(lh, Relational):
return And(lh, sympy.Ne(lh.rhs, rh, evaluate=False))
return sympy.Ne(lh, rh, evaluate=False)