Ejemplo n.º 1
0
def test_visit():
    U = Unification()

    def f(x):
        return f

    with pytest.raises(VisitError):
        U.visit(f, None)
Ejemplo n.º 2
0
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}
Ejemplo n.º 3
0
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