def check_expression(expr, var_symbols, only_from_sympy=False): """ Does ``eval(expr)`` both in Sage and SymPy and does other checks. EXAMPLES:: sage: from sage.interfaces.sympy import check_expression sage: check_expression("1.123*x", "x") """ from sage.symbolic.ring import SR from sympy import (__dict__ as sympydict, Basic, S, var as svar) # evaluate the expression in the context of Sage: if var_symbols: SR.var(var_symbols) is_different = False try: e_sage = SR(expr) assert not isinstance(e_sage, Basic) except (NameError, TypeError): is_different = True # evaluate the expression in the context of SymPy: if var_symbols: svar(var_symbols) b = globals().copy() b.update(sympydict) assert "sin" in b b.update(sympydict) e_sympy = eval(expr, b) assert isinstance(e_sympy, Basic) # Sympy func may have specific _sage_ method if is_different: _sage_method = getattr(e_sympy.func, "_sage_") e_sage = _sage_method(S(e_sympy)) # Do the actual checks: if not only_from_sympy: assert S(e_sage) == e_sympy assert e_sage == SR(e_sympy)
def check_expression(expr, var_symbols, only_from_sympy=False): """ Does ``eval(expr)`` both in Sage and SymPy and does other checks. EXAMPLES:: sage: from sage.interfaces.sympy import check_expression sage: check_expression("1.123*x", "x") """ from sage import __dict__ as sagedict from sage.symbolic.ring import SR from sympy import (__dict__ as sympydict, Basic, S, var as svar) # evaluate the expression in the context of Sage: if var_symbols: SR.var(var_symbols) is_different = False try: e_sage = SR(expr) assert not isinstance(e_sage, Basic) except (NameError, TypeError): is_different = True pass # evaluate the expression in the context of SymPy: if var_symbols: sympy_vars = svar(var_symbols) b = globals().copy() b.update(sympydict) assert "sin" in b b.update(sympydict) e_sympy = eval(expr, b) assert isinstance(e_sympy, Basic) # Sympy func may have specific _sage_ method if is_different: _sage_method = getattr(e_sympy.func, "_sage_") e_sage = _sage_method(S(e_sympy)) # Do the actual checks: if not only_from_sympy: assert S(e_sage) == e_sympy assert e_sage == SR(e_sympy)