def test_Subs(): x = Symbol("x") y = Symbol("y") _x = Symbol("_x") f = function_symbol("f", 2*x) assert f.diff(x) == 2 * Subs(Derivative(function_symbol("f", _x), [_x]), [_x], [2 * x]) assert Subs(Derivative(function_symbol("f", x, y), [x]), [x, y], [_x, x]) \ == Subs(Derivative(function_symbol("f", x, y), [x]), [y, x], [x, _x])
def test_Subs(): x = Symbol("x") y = Symbol("y") _x = Symbol("_xi_1") f = function_symbol("f", 2*x) assert f.diff(x) == 2 * Subs(Derivative(function_symbol("f", _x), [_x]), [_x], [2 * x]) assert Subs(Derivative(function_symbol("f", x, y), [x]), [x, y], [_x, x]) \ == Subs(Derivative(function_symbol("f", x, y), [x]), [y, x], [x, _x])
def test_conv8(): e1 = function_symbol("f", Symbol("x")) e2 = function_symbol("g", Symbol("x"), Symbol("y")) assert e1._sympy_() == sympy.Function("f")(sympy.Symbol("x")) assert e2._sympy_() != sympy.Function("f")(sympy.Symbol("x")) assert e2._sympy_() == sympy.Function("g")(sympy.Symbol("x"), sympy.Symbol("y")) e3 = function_symbol("q", Symbol("t")) assert e3._sympy_() == sympy.Function("q")(sympy.Symbol("t")) assert e3._sympy_() != sympy.Function("f")(sympy.Symbol("t")) assert e3._sympy_() != sympy.Function("q")(sympy.Symbol("t"), sympy.Symbol("t"))
def test_conv8(): e1 = function_symbol("f", Symbol("x")) e2 = function_symbol("g", Symbol("x"), Symbol("y")) assert e1._sympy_() == sympy.Function("f")(sympy.Symbol("x")) assert e2._sympy_() != sympy.Function("f")(sympy.Symbol("x")) assert (e2._sympy_() == sympy.Function("g")(sympy.Symbol("x"), sympy.Symbol("y"))) e3 = function_symbol("q", Symbol("t")) assert e3._sympy_() == sympy.Function("q")(sympy.Symbol("t")) assert e3._sympy_() != sympy.Function("f")(sympy.Symbol("t")) assert (e3._sympy_() != sympy.Function("q")(sympy.Symbol("t"), sympy.Symbol("t")))
def test_conv11(): x = sympy.Symbol("x") y = sympy.Symbol("y") x1 = Symbol("x") y1 = Symbol("y") e1 = sympy.Subs(sympy.Derivative(sympy.Function("f")(x, y), x), [x, y], [y, y]) e2 = Subs(Derivative(function_symbol("f", x1, y1), [x1]), [x1, y1], [y1, y1]) e3 = Subs(Derivative(function_symbol("f", x1, y1), [x1]), [y1, x1], [x1, y1]) assert sympify(e1) == e2 assert sympify(e1) != e3 assert e2._sympy_() == e1 assert e3._sympy_() != e1
def test_conv10(): A = DenseMatrix(1, 4, [Integer(1), Integer(2), Integer(3), Integer(4)]) assert (A._sympy_() == sympy.Matrix(1, 4, [ sympy.Integer(1), sympy.Integer(2), sympy.Integer(3), sympy.Integer(4) ])) B = DenseMatrix(4, 1, [Symbol("x"), Symbol("y"), Symbol("z"), Symbol("t")]) assert (B._sympy_() == sympy.Matrix(4, 1, [ sympy.Symbol("x"), sympy.Symbol("y"), sympy.Symbol("z"), sympy.Symbol("t") ])) C = DenseMatrix( 2, 2, [Integer(5), Symbol("x"), function_symbol("f", Symbol("x")), 1 + I]) assert (C._sympy_() == sympy.Matrix( [[5, sympy.Symbol("x")], [sympy.Function("f")(sympy.Symbol("x")), 1 + sympy.I]]))
def test_Subs(): x = Symbol("x") y = Symbol("y") _x = Symbol("_xi_1") f = function_symbol("f", 2*x) assert str(f.diff(x)) == "2*Subs(Derivative(f(_xi_1), _xi_1), (_xi_1), (2*x))" # TODO: fix me # assert f.diff(x) == 2 * Subs(Derivative(function_symbol("f", _x), _x), [_x], [2 * x]) assert Subs(Derivative(function_symbol("f", x, y), x), [x, y], [_x, x]) \ == Subs(Derivative(function_symbol("f", x, y), x), [y, x], [x, _x]) s = f.diff(x)/2 _xi_1 = Symbol("_xi_1") assert s.expr == Derivative(function_symbol("f", _xi_1), _xi_1) assert s.variables == (_xi_1,) assert s.point == (2*x,)
def test_conv10b(): A = sympy.Matrix([[sympy.Symbol("x"), sympy.Symbol("y")], [sympy.Symbol("z"), sympy.Symbol("t")]]) assert sympify(A) == densematrix(2, 2, [Symbol("x"), Symbol("y"), Symbol("z"), Symbol("t")]) B = sympy.Matrix([[1, 2], [3, 4]]) assert sympify(B) == densematrix(2, 2, [Integer(1), Integer(2), Integer(3), Integer(4)]) C = sympy.Matrix([[7, sympy.Symbol("y")], [sympy.Function("g")(sympy.Symbol("z")), 3 + 2*sympy.I]]) assert sympify(C) == densematrix(2, 2, [Integer(7), Symbol("y"), function_symbol("g", Symbol("z")), 3 + 2*I])
def test_conv10(): A = densematrix(1, 4, [Integer(1), Integer(2), Integer(3), Integer(4)]) assert A._sympy_() == sympy.Matrix(1, 4, [sympy.Integer(1), sympy.Integer(2), sympy.Integer(3), sympy.Integer(4)]) B = densematrix(4, 1, [Symbol("x"), Symbol("y"), Symbol("z"), Symbol("t")]) assert B._sympy_() == sympy.Matrix(4, 1, [sympy.Symbol("x"), sympy.Symbol("y"), sympy.Symbol("z"), sympy.Symbol("t")]) C = densematrix(2, 2, [Integer(5), Symbol("x"), function_symbol("f", Symbol("x")), 1 + I]) assert C._sympy_() == sympy.Matrix([[5, sympy.Symbol("x")], [sympy.Function("f")(sympy.Symbol("x")), 1 + sympy.I]])
def test_derivative(): x = Symbol("x") y = Symbol("y") f = function_symbol("f", x) assert f.diff(x) == function_symbol("f", x).diff(x) assert f.diff(x).diff(x) == function_symbol("f", x).diff(x).diff(x) assert f.diff(y) == 0 assert f.diff(x).args == (f, x) assert f.diff(x).diff(x).args == (f, x, x) g = function_symbol("f", y) assert g.diff(x) == 0 assert g.diff(y) == function_symbol("f", y).diff(y) assert g.diff(y).diff(y) == function_symbol("f", y).diff(y).diff(y) assert f - function_symbol("f", x) == 0 f = function_symbol("f", x, y) assert f.diff(x).diff(y) == function_symbol("f", x, y).diff(x).diff(y) assert f.diff(Symbol("z")) == 0
def test_conv10b(): A = sympy.Matrix([[sympy.Symbol("x"), sympy.Symbol("y")], [sympy.Symbol("z"), sympy.Symbol("t")]]) assert sympify(A) == DenseMatrix(2, 2, [Symbol("x"), Symbol("y"), Symbol("z"), Symbol("t")]) B = sympy.Matrix([[1, 2], [3, 4]]) assert sympify(B) == DenseMatrix(2, 2, [Integer(1), Integer(2), Integer(3), Integer(4)]) C = sympy.Matrix([[7, sympy.Symbol("y")], [sympy.Function("g")(sympy.Symbol("z")), 3 + 2*sympy.I]]) assert sympify(C) == DenseMatrix(2, 2, [Integer(7), Symbol("y"), function_symbol("g", Symbol("z")), 3 + 2*I])
def test_conv8b(): e1 = sympy.Function("f")(sympy.Symbol("x")) e2 = sympy.Function("g")(sympy.Symbol("x"), sympy.Symbol("y")) assert sympify(e1) == function_symbol("f", Symbol("x")) assert sympify(e2) != function_symbol("f", Symbol("x")) assert sympify(e2) == function_symbol("g", Symbol("x"), Symbol("y")) e3 = sympy.Function("q")(sympy.Symbol("t")) assert sympify(e3) == function_symbol("q", Symbol("t")) assert sympify(e3) != function_symbol("f", Symbol("t")) assert sympify(e3) != function_symbol("q", Symbol("t"), Symbol("t"))
def test_f(): x = Symbol("x") y = Symbol("y") f = function_symbol("f", x) g = function_symbol("g", x) assert f.subs({function_symbol("f", x): function_symbol("g", x)}) == g assert (f+g).subs({function_symbol("f", x): function_symbol("g", x)}) == 2*g e = (f+x)**3 assert e.subs({f: y}) == (x+y)**3 e = e.expand() assert e.subs({f: y}) == ((x+y)**3).expand()
def test_f(): x = Symbol("x") y = Symbol("y") z = Symbol("z") f = function_symbol("f", x) g = function_symbol("g", x) assert f != g f = function_symbol("f", x) g = function_symbol("f", x) assert f == g f = function_symbol("f", x, y) g = function_symbol("f", y, x) assert f != g f = function_symbol("f", x, y) g = function_symbol("f", x, y) assert f == g
def test_f(): x = Symbol("x") y = Symbol("y") f = function_symbol("f", x) g = function_symbol("g", x) assert f.subs({function_symbol("f", x): function_symbol("g", x)}) == g assert ((f + g).subs({function_symbol("f", x): function_symbol("g", x)}) == 2 * g) e = (f + x)**3 assert e.subs({f: y}) == (x + y)**3 e = e.expand() assert e.subs({f: y}) == ((x + y)**3).expand()
def test_derivative(): x = Symbol("x") y = Symbol("y") f = function_symbol("f", x) assert f.diff(x) == function_symbol("f", x).diff(x) assert f.diff(x).diff(x) == function_symbol("f", x).diff(x).diff(x) assert f.diff(y) == 0 assert f.diff(x).args == (f, x) assert f.diff(x).diff(x).args == (f, x, x) assert f.diff(x, 0) == f assert f.diff(x, 0) == Derivative(function_symbol("f", x), x, 0) raises(ValueError, lambda: f.diff(0)) raises(ValueError, lambda: f.diff(x, 0, 0)) raises(ValueError, lambda: f.diff(x, y, 0, 0, x)) g = function_symbol("f", y) assert g.diff(x) == 0 assert g.diff(y) == function_symbol("f", y).diff(y) assert g.diff(y).diff(y) == function_symbol("f", y).diff(y).diff(y) assert f - function_symbol("f", x) == 0 f = function_symbol("f", x, y) assert f.diff(x).diff(y) == function_symbol("f", x, y).diff(x).diff(y) assert f.diff(Symbol("z")) == 0 s = Derivative(function_symbol("f", x), x) assert s.expr == function_symbol("f", x) assert s.variables == (x, ) fxy = Function("f")(x, y) g = Derivative(Function("f")(x, y), x, 2, y, 1) assert g == fxy.diff(x, x, y) assert g == fxy.diff(y, 1, x, 2) assert g == fxy.diff(y, x, 2) h = Derivative(Function("f")(x, y), x, 0, y, 1) assert h == fxy.diff(x, 0, y) assert h == fxy.diff(y, x, 0) i = Derivative(Function("f")(x, y), x, 0, y, 1, x, 1) assert i == fxy.diff(x, 0, y, x, 1) assert i == fxy.diff(x, 0, y, x) assert i == fxy.diff(y, x) assert i == fxy.diff(y, 1, x, 1) assert i == fxy.diff(y, 1, x)
def test_sage_conversions(): try: import sage.all as sage except ImportError: return x, y = sage.SR.var('x y') x1, y1 = symbols('x, y') # Symbol assert x1._sage_() == x assert x1 == sympify(x) # Integer assert Integer(12)._sage_() == sage.Integer(12) assert Integer(12) == sympify(sage.Integer(12)) # Rational assert (Integer(1) / 2)._sage_() == sage.Integer(1) / 2 assert Integer(1) / 2 == sympify(sage.Integer(1) / 2) # Operators assert x1 + y == x1 + y1 assert x1 * y == x1 * y1 assert x1**y == x1**y1 assert x1 - y == x1 - y1 assert x1 / y == x1 / y1 assert x + y1 == x + y assert x * y1 == x * y # Doesn't work in Sage 6.1.1ubuntu2 # assert x ** y1 == x ** y assert x - y1 == x - y assert x / y1 == x / y # Conversions assert (x1 + y1)._sage_() == x + y assert (x1 * y1)._sage_() == x * y assert (x1**y1)._sage_() == x**y assert (x1 - y1)._sage_() == x - y assert (x1 / y1)._sage_() == x / y assert x1 + y1 == sympify(x + y) assert x1 * y1 == sympify(x * y) assert x1**y1 == sympify(x**y) assert x1 - y1 == sympify(x - y) assert x1 / y1 == sympify(x / y) # Functions assert sin(x1) == sin(x) assert sin(x1)._sage_() == sage.sin(x) assert sin(x1) == sympify(sage.sin(x)) assert cos(x1) == cos(x) assert cos(x1)._sage_() == sage.cos(x) assert cos(x1) == sympify(sage.cos(x)) assert function_symbol('f', x1, y1)._sage_() == sage.function('f', x, y) assert function_symbol('f', 2 * x1, x1 + y1).diff(x1)._sage_() == sage.function( 'f', 2 * x, x + y).diff(x) # For the following test, sage needs to be modified # assert sage.sin(x) == sage.sin(x1) # Constants assert pi._sage_() == sage.pi assert E._sage_() == sage.e assert I._sage_() == sage.I assert pi == sympify(sage.pi) assert E == sympify(sage.e) # SympyConverter does not support converting the following # assert I == sympify(sage.I) # Matrix assert DenseMatrix(1, 2, [x1, y1])._sage_() == sage.matrix([[x, y]]) # SympyConverter does not support converting the following # assert DenseMatrix(1, 2, [x1, y1]) == sympify(sage.matrix([[x, y]])) # Sage Number a = sage.Mod(2, 7) b = PyNumber(a, sage_module) a = a + 8 b = b + 8 assert isinstance(b, PyNumber) assert b._sage_() == a a = a + x b = b + x assert isinstance(b, Add) assert b._sage_() == a # Sage Function e = x1 + wrap_sage_function(sage.log_gamma(x)) assert str(e) == "x + log_gamma(x)" assert isinstance(e, Add) assert e + wrap_sage_function( sage.log_gamma(x)) == x1 + 2 * wrap_sage_function(sage.log_gamma(x)) f = e.subs({x1: 10}) assert f == 10 + log(362880) f = e.subs({x1: 2}) assert f == 2 f = e.subs({x1: 100}) v = f.n(53, real=True) assert abs(float(v) - 459.13420537) < 1e-7 f = e.diff(x1)
from timeit import default_timer as clock from symengine import var, sympify, function_symbol, Symbol import sympy s = open("expr.txt").read() print "Converting to SymPy..." e = sympy.sympify(s) print "Converting to SymEngine..." ce = sympify(e) print " Done." print "SymPy subs:" t1 = clock() f = e.subs(sympy.Function("q5")(sympy.Symbol("t")), sympy.Symbol("sq5")) t2 = clock() print "Total time:", t2 - t1, "s" print "SymEngine subs:" t1 = clock() cf = ce.subs(function_symbol("q5", Symbol("t")), Symbol("sq5")) t2 = clock() print "Total time:", t2 - t1, "s" print "SymPy diff:" t1 = clock() g = f.diff(sympy.Symbol("sq5")) t2 = clock() print "Total time:", t2 - t1, "s" print "SymEngine diff:" t1 = clock() cg = cf.diff(Symbol("sq5")) t2 = clock() print "Total time:", t2 - t1, "s"
def test_derivative(): x = Symbol("x") y = Symbol("y") f = function_symbol("f", x) assert f.diff(x) == function_symbol("f", x).diff(x) assert f.diff(x).diff(x) == function_symbol("f", x).diff(x).diff(x) assert f.diff(y) == 0 assert f.diff(x).args == (f, x) assert f.diff(x).diff(x).args == (f, x, x) g = function_symbol("f", y) assert g.diff(x) == 0 assert g.diff(y) == function_symbol("f", y).diff(y) assert g.diff(y).diff(y) == function_symbol("f", y).diff(y).diff(y) assert f - function_symbol("f", x) == 0 f = function_symbol("f", x, y) assert f.diff(x).diff(y) == function_symbol("f", x, y).diff(x).diff(y) assert f.diff(Symbol("z")) == 0 s = Derivative(function_symbol("f", x), x) assert s.expr == function_symbol("f", x) assert s.variables == (x, )
def test_sage_conversions(): x, y = sage.SR.var('x y') x1, y1 = symbols('x, y') # Symbol assert x1._sage_() == x assert x1 == sympify(x) # Integer assert Integer(12)._sage_() == sage.Integer(12) assert Integer(12) == sympify(sage.Integer(12)) # Rational assert (Integer(1) / 2)._sage_() == sage.Integer(1) / 2 assert Integer(1) / 2 == sympify(sage.Integer(1) / 2) # Operators assert x1 + y == x1 + y1 assert x1 * y == x1 * y1 assert x1**y == x1**y1 assert x1 - y == x1 - y1 assert x1 / y == x1 / y1 assert x + y1 == x + y assert x * y1 == x * y # Doesn't work in Sage 6.1.1ubuntu2 # assert x ** y1 == x ** y assert x - y1 == x - y assert x / y1 == x / y # Conversions assert (x1 + y1)._sage_() == x + y assert (x1 * y1)._sage_() == x * y assert (x1**y1)._sage_() == x**y assert (x1 - y1)._sage_() == x - y assert (x1 / y1)._sage_() == x / y assert x1 + y1 == sympify(x + y) assert x1 * y1 == sympify(x * y) assert x1**y1 == sympify(x**y) assert x1 - y1 == sympify(x - y) assert x1 / y1 == sympify(x / y) # Functions assert sin(x1) == sin(x) assert sin(x1)._sage_() == sage.sin(x) assert sin(x1) == sympify(sage.sin(x)) assert cos(x1) == cos(x) assert cos(x1)._sage_() == sage.cos(x) assert cos(x1) == sympify(sage.cos(x)) assert function_symbol('f', x1, y1)._sage_() == sage.function('f')(x, y) assert (function_symbol('f', 2 * x1, x1 + y1).diff(x1)._sage_() == sage.function('f')( 2 * x, x + y).diff(x)) assert LambertW(x1) == LambertW(x) assert LambertW(x1)._sage_() == sage.lambert_w(x) assert KroneckerDelta(x1, y1) == KroneckerDelta(x, y) assert KroneckerDelta(x1, y1)._sage_() == sage.kronecker_delta(x, y) assert erf(x1) == erf(x) assert erf(x1)._sage_() == sage.erf(x) assert lowergamma(x1, y1) == lowergamma(x, y) assert lowergamma(x1, y1)._sage_() == sage.gamma_inc_lower(x, y) assert uppergamma(x1, y1) == uppergamma(x, y) assert uppergamma(x1, y1)._sage_() == sage.gamma_inc(x, y) assert loggamma(x1) == loggamma(x) assert loggamma(x1)._sage_() == sage.log_gamma(x) assert beta(x1, y1) == beta(x, y) assert beta(x1, y1)._sage_() == sage.beta(x, y) assert floor(x1) == floor(x) assert floor(x1)._sage_() == sage.floor(x) assert ceiling(x1) == ceiling(x) assert ceiling(x1)._sage_() == sage.ceil(x) assert conjugate(x1) == conjugate(x) assert conjugate(x1)._sage_() == sage.conjugate(x) # For the following test, sage needs to be modified # assert sage.sin(x) == sage.sin(x1) # Constants and Booleans assert pi._sage_() == sage.pi assert E._sage_() == sage.e assert I._sage_() == sage.I assert GoldenRatio._sage_() == sage.golden_ratio assert Catalan._sage_() == sage.catalan assert EulerGamma._sage_() == sage.euler_gamma assert oo._sage_() == sage.oo assert zoo._sage_() == sage.unsigned_infinity assert nan._sage_() == sage.NaN assert true._sage_() == True assert false._sage_() == False assert pi == sympify(sage.pi) assert E == sympify(sage.e) assert GoldenRatio == sympify(sage.golden_ratio) assert Catalan == sympify(sage.catalan) assert EulerGamma == sympify(sage.euler_gamma) assert oo == sympify(sage.oo) assert zoo == sympify(sage.unsigned_infinity) assert nan == sympify(sage.NaN) # SympyConverter does not support converting the following # assert I == sympify(sage.I) # Matrix assert DenseMatrix(1, 2, [x1, y1])._sage_() == sage.matrix([[x, y]]) # SympyConverter does not support converting the following # assert DenseMatrix(1, 2, [x1, y1]) == sympify(sage.matrix([[x, y]])) # Sage Number a = sage.Mod(2, 7) b = PyNumber(a, sage_module) a = a + 8 b = b + 8 assert isinstance(b, PyNumber) assert b._sage_() == a assert str(a) == str(b) # Sage Function e = x1 + wrap_sage_function(sage.log_gamma(x)) assert str(e) == "x + log_gamma(x)" assert isinstance(e, Add) assert (e + wrap_sage_function(sage.log_gamma(x)) == x1 + 2 * wrap_sage_function(sage.log_gamma(x))) f = e.subs({x1: 10}) assert f == 10 + log(362880) f = e.subs({x1: 2}) assert f == 2 f = e.subs({x1: 100}) v = f.n(53, real=True) assert abs(float(v) - 459.13420537) < 1e-7 f = e.diff(x1)
def test_sage_conversions(): try: import sage.all as sage except ImportError: return x, y = sage.SR.var('x y') x1, y1 = symbols('x, y') # Symbol assert x1._sage_() == x assert x1 == sympify(x) # Integer assert Integer(12)._sage_() == sage.Integer(12) assert Integer(12) == sympify(sage.Integer(12)) # Rational assert (Integer(1) / 2)._sage_() == sage.Integer(1) / 2 assert Integer(1) / 2 == sympify(sage.Integer(1) / 2) # Operators assert x1 + y == x1 + y1 assert x1 * y == x1 * y1 assert x1 ** y == x1 ** y1 assert x1 - y == x1 - y1 assert x1 / y == x1 / y1 assert x + y1 == x + y assert x * y1 == x * y # Doesn't work in Sage 6.1.1ubuntu2 # assert x ** y1 == x ** y assert x - y1 == x - y assert x / y1 == x / y # Conversions assert (x1 + y1)._sage_() == x + y assert (x1 * y1)._sage_() == x * y assert (x1 ** y1)._sage_() == x ** y assert (x1 - y1)._sage_() == x - y assert (x1 / y1)._sage_() == x / y assert x1 + y1 == sympify(x + y) assert x1 * y1 == sympify(x * y) assert x1 ** y1 == sympify(x ** y) assert x1 - y1 == sympify(x - y) assert x1 / y1 == sympify(x / y) # Functions assert sin(x1) == sin(x) assert sin(x1)._sage_() == sage.sin(x) assert sin(x1) == sympify(sage.sin(x)) assert cos(x1) == cos(x) assert cos(x1)._sage_() == sage.cos(x) assert cos(x1) == sympify(sage.cos(x)) assert function_symbol('f', x1, y1)._sage_() == sage.function('f', x, y) assert function_symbol('f', 2 * x1, x1 + y1).diff(x1)._sage_() == sage.function('f', 2 * x, x + y).diff(x) # For the following test, sage needs to be modified # assert sage.sin(x) == sage.sin(x1) # Constants assert pi._sage_() == sage.pi assert E._sage_() == sage.e assert I._sage_() == sage.I assert pi == sympify(sage.pi) assert E == sympify(sage.e) # SympyConverter does not support converting the following # assert I == sympify(sage.I) # Matrix assert DenseMatrix(1, 2, [x1, y1])._sage_() == sage.matrix([[x, y]])
def test_sage_conversions(): try: import sage.all as sage except ImportError: return x, y = sage.SR.var('x y') x1, y1 = symbols('x, y') # Symbol assert x1._sage_() == x assert x1 == sympify(x) # Integer assert Integer(12)._sage_() == sage.Integer(12) assert Integer(12) == sympify(sage.Integer(12)) # Rational assert (Integer(1) / 2)._sage_() == sage.Integer(1) / 2 assert Integer(1) / 2 == sympify(sage.Integer(1) / 2) # Operators assert x1 + y == x1 + y1 assert x1 * y == x1 * y1 assert x1 ** y == x1 ** y1 assert x1 - y == x1 - y1 assert x1 / y == x1 / y1 assert x + y1 == x + y assert x * y1 == x * y # Doesn't work in Sage 6.1.1ubuntu2 # assert x ** y1 == x ** y assert x - y1 == x - y assert x / y1 == x / y # Conversions assert (x1 + y1)._sage_() == x + y assert (x1 * y1)._sage_() == x * y assert (x1 ** y1)._sage_() == x ** y assert (x1 - y1)._sage_() == x - y assert (x1 / y1)._sage_() == x / y assert x1 + y1 == sympify(x + y) assert x1 * y1 == sympify(x * y) assert x1 ** y1 == sympify(x ** y) assert x1 - y1 == sympify(x - y) assert x1 / y1 == sympify(x / y) # Functions assert sin(x1) == sin(x) assert sin(x1)._sage_() == sage.sin(x) assert sin(x1) == sympify(sage.sin(x)) assert cos(x1) == cos(x) assert cos(x1)._sage_() == sage.cos(x) assert cos(x1) == sympify(sage.cos(x)) assert function_symbol('f', x1, y1)._sage_() == sage.function('f', x, y) assert function_symbol('f', 2 * x1, x1 + y1).diff(x1)._sage_() == sage.function('f', 2 * x, x + y).diff(x) # For the following test, sage needs to be modified # assert sage.sin(x) == sage.sin(x1) # Constants assert pi._sage_() == sage.pi assert E._sage_() == sage.e assert I._sage_() == sage.I assert pi == sympify(sage.pi) assert E == sympify(sage.e) # SympyConverter does not support converting the following # assert I == sympify(sage.I) # Matrix assert DenseMatrix(1, 2, [x1, y1])._sage_() == sage.matrix([[x, y]]) # SympyConverter does not support converting the following # assert DenseMatrix(1, 2, [x1, y1]) == sympify(sage.matrix([[x, y]])) # Sage Number a = sage.Mod(2, 7) b = PyNumber(a, sage_module) a = a + 8 b = b + 8 assert isinstance(b, PyNumber) assert b._sage_() == a a = a + x b = b + x assert isinstance(b, Add) assert b._sage_() == a # Sage Function e = x1 + wrap_sage_function(sage.log_gamma(x)) assert str(e) == "x + log_gamma(x)" assert isinstance(e, Add) assert e + wrap_sage_function(sage.log_gamma(x)) == x1 + 2*wrap_sage_function(sage.log_gamma(x)) f = e.subs({x1 : 10}) assert f == 10 + log(362880) f = e.subs({x1 : 2}) assert f == 2 f = e.subs({x1 : 100}); v = f.n(53, real=True); assert abs(float(v) - 459.13420537) < 1e-7 f = e.diff(x1)
def test_msubs(): x = Symbol("x") y = Symbol("y") f = function_symbol("f", x) assert f.msubs({f: y}) == y assert f.diff(x).msubs({f: y}) == f.diff(x)