def test_visit(): U = Unification() def f(x): return f with pytest.raises(VisitError): U.visit(f, None)
def test_custom_eq(): def eq(x, y): if isinstance(x, float) and isinstance(y, float): return abs(x - y) < 1e-2 else: return x == y v = var() a = (1.000, v) b = (v, 1.001) u = TU.unify(a, b) assert u is None U2 = Unification(eq=eq) u = U2.unify(a, b) assert u == {v: 1.000} or u == {v: 1.001}
import pytest from myia.utils.unify import FilterVar, RestrictedVar, Seq, SVar, \ Unification, UnificationError, UnionVar, Var, VisitError, \ expandlist, noseq, svar, uvar, var, PredicateSet class L(list): def __hash__(self): return hash(tuple(self)) def __visit__(self, fn): return L(noseq(fn, e) for e in self) TU = Unification() def test_Var(): v1 = var() assert isinstance(v1, Var) v2 = var() assert v1 is not v2 assert v1 != v2 assert v1.matches(v2) assert v1.matches(object()) assert str(v1) == v1.tag v3 = Var('name') assert repr(v3) == 'Var(name)' repr(v2) assert v1.tag != v2.tag