def convert_relation()

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)