def test_function(): f = Function('f') x = Symbol('x') e = f(x) m = Match(e) assert m(f) == True assert m.type(FunctionClass) == True
def test_nested(): x = Symbol('x') y = Symbol('y') m = Match(x-y) v = AutoVar() assert m(Add, (Mul, S.NegativeOne, v.e1), v.e2) == True assert v.e1 == y assert v.e2 == x
def test_Add(): x = Symbol('x') y = Symbol('y') m = Match(x+y) assert m(Add) == True v = AutoVar() assert m(Add, v.e1, v.e2) == True assert v.e1 == x or v.e1 == y assert v.e2 == x or v.e2 == y
def __call__(self,e): v = AutoVar() m = Match(e) #if m(self.old): if m.type(FunctionClass): if type(e) == self.old: arg = self.new.lhs.args[0] return self.new.rhs.subs(arg, e.args[0]) if (len(e.args)) == 0: return e arg = e.args new_args = [] for a in arg: other = self(a) new_args.append(other) r = e.func(*new_args) return r
def test_empty(): m = Match(None) assert m(Add) == False
def test_values(): m = Match(Integer(1)) assert m(Integer) == True m2 = Match(Float(2.1)) assert m2(Float) == True
def test_singleton(): e = Integer(1)/2 m = Match(e) assert m.exact(S.Half) == True
def test_numbers(): e = numbers.pi m = Match(e) assert m(numbers.Pi) == True