def test_Subs_subs(): assert Subs(x * y, x, x).subs(x, y) == Subs(x * y, x, y) assert Subs(x * y, x, x + 1).subs(x, y) == Subs(x * y, x, y + 1) assert Subs(x * y, y, x + 1).subs(x, y) == Subs(y**2, y, y + 1) a = Subs(x * y * z, (y, x, z), (x + 1, x + z, x)) b = Subs(x * y * z, (y, x, z), (x + 1, y + z, y)) assert a.subs(x, y) == b and a.doit().subs(x, y) == a.subs(x, y).doit() f = Function("f") g = Function("g") assert Subs(2 * f(x, y) + g(x), f(x, y), 1).subs(y, 2) == Subs(2 * f(x, y) + g(x), (f(x, y), y), (1, 2))
def s_check(rv, ans): # get the dummy rv = list(rv) d = rv[0].atoms(Dummy) reps = zip(d, [s]*len(d)) # replace s with this dummy rv = (rv[0].subs(reps).expand(), [(p[0].subs(reps), p[1].subs(reps)) for p in rv[1]], [a.subs(reps) for a in rv[2]]) ans = (ans[0].subs(reps).expand(), [(p[0].subs(reps), p[1].subs(reps)) for p in ans[1]], [a.subs(reps) for a in ans[2]]) return str(rv[0]) in [str(ans[0]), str(-ans[0])] and \ str(rv[1:]) == str(ans[1:])
def s_check(rv, ans): # get the dummy rv = list(rv) d = rv[0].atoms(Dummy) reps = zip(d, [s] * len(d)) # replace s with this dummy rv = (rv[0].subs(reps).expand(), [ (p[0].subs(reps), p[1].subs(reps)) for p in rv[1] ], [a.subs(reps) for a in rv[2]]) ans = (ans[0].subs(reps).expand(), [ (p[0].subs(reps), p[1].subs(reps)) for p in ans[1] ], [a.subs(reps) for a in ans[2]]) return str(rv[0]) in [str(ans[0]), str(-ans[0])] and \ str(rv[1:]) == str(ans[1:])
def test_Subs_subs(): assert Subs(x*y, x, x).subs(x, y) == Subs(x*y, x, y) assert Subs(x*y, x, x + 1).subs(x, y) == \ Subs(x*y, x, y + 1) assert Subs(x*y, y, x + 1).subs(x, y) == \ Subs(y**2, y, y + 1) a = Subs(x*y*z, (y, x, z), (x + 1, x + z, x)) b = Subs(x*y*z, (y, x, z), (x + 1, y + z, y)) assert a.subs(x, y) == b and \ a.doit().subs(x, y) == a.subs(x, y).doit() f = Function('f') g = Function('g') assert Subs(2*f(x, y) + g(x), f(x, y), 1).subs(y, 2) == Subs( 2*f(x, y) + g(x), (f(x, y), y), (1, 2))
def t(m, a, b): from sympy import sympify, Piecewise a, b = sympify([a, b]) m_ = m m = hyperexpand(m) if not m == Piecewise((a, abs(z) < 1), (b, abs(1/z) < 1), (m_, True)): return False if not (m.args[0].args[0] == a and m.args[1].args[0] == b): return False z0 = randcplx()/10 if abs(m.subs(z, z0).n() - a.subs(z, z0).n()).n() > 1e-10: return False if abs(m.subs(z, 1/z0).n() - b.subs(z, 1/z0).n()).n() > 1e-10: return False return True