|
from sympy.strategies.tools import subs, typed |
|
from sympy.strategies.rl import rm_id |
|
from sympy.core.basic import Basic |
|
from sympy.core.singleton import S |
|
|
|
|
|
def test_subs(): |
|
from sympy.core.symbol import symbols |
|
a, b, c, d, e, f = symbols('a,b,c,d,e,f') |
|
mapping = {a: d, d: a, Basic(e): Basic(f)} |
|
expr = Basic(a, Basic(b, c), Basic(d, Basic(e))) |
|
result = Basic(d, Basic(b, c), Basic(a, Basic(f))) |
|
assert subs(mapping)(expr) == result |
|
|
|
|
|
def test_subs_empty(): |
|
assert subs({})(Basic(S(1), S(2))) == Basic(S(1), S(2)) |
|
|
|
|
|
def test_typed(): |
|
class A(Basic): |
|
pass |
|
|
|
class B(Basic): |
|
pass |
|
|
|
rmzeros = rm_id(lambda x: x == S(0)) |
|
rmones = rm_id(lambda x: x == S(1)) |
|
remove_something = typed({A: rmzeros, B: rmones}) |
|
|
|
assert remove_something(A(S(0), S(1))) == A(S(1)) |
|
assert remove_something(B(S(0), S(1))) == B(S(0)) |
|
|