Ejemplo n.º 1
0
def test_unify_complex():
    assert unify((1, {2: 3}), (1, {2: 3}), {}) == {}
    assert unify((1, {2: 3}), (1, {2: 4}), {}) == False
    assert unify((1, {2: var(5)}), (1, {2: 4}), {}) == {var(5): 4}

    assert unify({1: (2, 3)}, {1: (2, var(5))}, {}) == {var(5): 3}
    assert unify({1: [2, 3]}, {1: [2, var(5)]}, {}) == {var(5): 3}
Ejemplo n.º 2
0
def test_unify_slice():
    x = var('x')
    y = var('y')

    assert unify(slice(1), slice(1), {}) == {}
    assert unify(slice(1, 2, 3), x, {}) == {x: slice(1, 2, 3)}
    assert unify(slice(1, 2, None), slice(x, y), {}) == {x: 1, y: 2}
Ejemplo n.º 3
0
def test_unify_slice():
    x = var('x')
    y = var('y')

    assert unify(slice(1), slice(1), {}) == {}
    assert unify(slice(1, 2, 3), x, {}) == {x: slice(1, 2, 3)}
    assert unify(slice(1, 2, None), slice(x, y), {}) == {x: 1, y: 2}
Ejemplo n.º 4
0
def test_unify_complex():
    assert unify((1, {2: 3}), (1, {2: 3}), {}) == {}
    assert unify((1, {2: 3}), (1, {2: 4}), {}) == False
    assert unify((1, {2: var(5)}), (1, {2: 4}), {}) == {var(5): 4}

    assert unify({1: (2, 3)}, {1: (2, var(5))}, {}) == {var(5): 3}
    assert unify({1: [2, 3]}, {1: [2, var(5)]}, {}) == {var(5): 3}
Ejemplo n.º 5
0
Archivo: cons.py Proyecto: logpy/logpy
def _cons_unify(lcons, rcons, s):

    if not is_cons(lcons) or not is_cons(rcons):
        # One of the arguments is necessarily a `ConsPair` object,
        # but the other could be an empty iterable, which isn't a
        # `cons`-derivable object.
        return False

    s = unify(car(lcons), car(rcons), s)
    if s is not False:
        return unify(cdr(lcons), cdr(rcons), s)
    return False
Ejemplo n.º 6
0
def _cons_unify(lcons, rcons, s):

    if not is_cons(lcons) or not is_cons(rcons):
        # One of the arguments is necessarily a `ConsPair` object,
        # but the other could be an empty iterable, which isn't a
        # `cons`-derivable object.
        return False

    s = unify(car(lcons), car(rcons), s)
    if s is not False:
        return unify(cdr(lcons), cdr(rcons), s)
    return False
Ejemplo n.º 7
0
def test_unify_slice():
    x, y = var(), var()
    assert unify(slice(1), slice(1), {}) == {}
    assert unify(slice(1, 2, 1), slice(2, 2, 1), {}) is False
    assert unify(slice(1, 2, 1), slice(x, 2, 1), {x: 2}) is False
    assert unify(slice(1, 2, 1), slice(1, 3, 1), {}) is False
    assert unify(slice(1, 4, 2), slice(1, 4, 1), {}) is False
    assert unify(slice(x), slice(x), {}) == {}
    assert unify(slice(1, 2, 3), x, {}) == {x: slice(1, 2, 3)}
    assert unify(slice(1, 2, None), slice(x, y), {}) == {x: 1, y: 2}
Ejemplo n.º 8
0
def test_unify_recursion_limit():
    a_lv = var()

    b, _ = gen_long_chain("a")
    b_var, _ = gen_long_chain(a_lv)

    s = unify(b, b_var, {})

    assert s[a_lv] == "a"
Ejemplo n.º 9
0
def test_objects_full():
    _unify.add((Foo, Foo, Mapping), _unify_object)
    _unify.add((Bar, Bar, Mapping), _unify_object)
    _reify.add((Foo, Mapping), _reify_object)
    _reify.add((Bar, Mapping), _reify_object)

    x, y = var(), var()
    assert unify(Foo(1, 2), Bar(1), {}) is False
    assert unify(Foo(1, Bar(2)), Foo(1, Bar(x)), {}) == {x: 2}
    assert reify(Foo(x, Bar(Foo(y, 3))), {
        x: 1,
        y: 2
    }) == Foo(1, Bar(Foo(2, 3)))

    class SubFoo(Foo):
        pass

    assert unify(Foo(1, 2), SubFoo(1, 2), {}) is False
Ejemplo n.º 10
0
def test_unify_seq():
    x = var()
    assert unify([], [], {}) == {}
    assert unify([x], [x], {}) == {}
    assert unify((1, 2), (1, 2), {}) == {}
    assert unify([1, 2], [1, 2], {}) == {}
    assert unify((1, 2), (1, 2, 3), {}) is False
    assert unify((1, x), (1, 2), {}) == {x: 2}
    assert unify((1, x), (1, 2), {x: 3}) is False

    a, b, z = var(), var(), var()
    assert unify([a, b], x, {x: [z, 1]}) == {x: [z, 1], a: z, b: 1}
Ejemplo n.º 11
0
def test_unify_isinstance_list():
    class Foo2(Foo): pass
    x = var('x')
    y = var('y')
    f, g = Foo2(1, 2), Foo2(x, y)

    _unify.add((Foo, Foo, dict), unify_object)
    _reify.add((Foo, dict), reify_object)

    assert unify(f, g, {})
    assert reify(g, {x: 1, y: 2}) == f
Ejemplo n.º 12
0
def test_unify_freeze():

    # These will sometimes be in different orders after conversion to
    # `iter`/`list`/`tuple`!
    # u = frozenset({("name", a), ("debit", b)})
    # v = frozenset({("name", "Bob"), ("debit", 100)})

    a, b = var("name"), var("amount")
    u = freeze({"name": a, "debit": b})
    v = freeze({"name": "Bob", "debit": 100})

    assert unify(u, v, {}) == {a: "Bob", b: 100}
Ejemplo n.º 13
0
def test_unify_dict():
    x = var()
    assert unify({1: 2}, {1: 2}, {}) == {}
    assert unify({1: x}, {1: x}, {}) == {}
    assert unify({1: 2}, {1: 3}, {}) is False
    assert unify({2: 2}, {1: 2}, {}) is False
    assert unify({2: 2, 3: 3}, {1: 2}, {}) is False
    assert unify({1: x}, {1: 2}, {}) == {x: 2}
Ejemplo n.º 14
0
def test_unify_set():
    x, y = var(), var()
    assert unify(set(), set(), {}) == {}
    assert unify({x}, {x}, {}) == {}
    assert unify({1, 2}, {1, 2}, {}) == {}
    assert unify({1, x}, {1, 2}, {}) == {x: 2}
    assert unify({x, 2}, {1, 2}, {}) == {x: 1}
    assert unify({1, y, x}, {2, 1}, {x: 2}) is False
Ejemplo n.º 15
0
def test_unify_complex():
    x, y = var(), var()
    assert unify((1, {2: 3}), (1, {2: 3}), {}) == {}
    assert unify((1, {2: 3}), (1, {2: 4}), {}) is False
    assert unify((1, {2: x}), (1, {2: 4}), {}) == {x: 4}
    assert unify((1, {
        2: x
    }), (1, {
        2: slice(1, y)
    }), {y: 2}) == {
        x: slice(1, y),
        y: 2
    }
    assert unify({1: (2, 3)}, {1: (2, x)}, {}) == {x: 3}
    assert unify({1: [2, 3]}, {1: [2, x]}, {}) == {x: 3}
Ejemplo n.º 16
0
def unify_MetaSymbol(u, v, s):
    if type(u) != type(v):
        return False
    if getattr(u, "__all_props__", False):
        s = unify(
            [getattr(u, slot) for slot in u.__all_props__],
            [getattr(v, slot) for slot in v.__all_props__],
            s,
        )
    elif u != v:
        return False
    if s:
        # If these two meta objects unified, and one has a logic
        # variable as its base object, consider the unknown base
        # object unified by the other's base object (if any).
        # This way, the original base objects can be recovered during
        # reification (preserving base object equality and such).
        if isinstance(u.obj, Var) and v.obj:
            s[u.obj] = v.obj
        elif isinstance(v.obj, Var) and u.obj:
            s[v.obj] = u.obj
    return s
Ejemplo n.º 17
0
def test_unify_dict():
    assert unify({1: 2}, {1: 2}, {}) == {}
    assert unify({1: 2}, {1: 3}, {}) == False
    assert unify({2: 2}, {1: 2}, {}) == False
    assert unify({2: 2, 3: 3}, {1: 2}, {}) == False
    assert unify({1: var(5)}, {1: 2}, {}) == {var(5): 2}
Ejemplo n.º 18
0
def test_unify_iter():
    x = var()
    assert unify([1], (1, )) is False
    assert unify((i for i in [1, 2]), [1, 2]) is False
    assert unify(iter([1, x]), iter([1, 2])) == {x: 2}
Ejemplo n.º 19
0
from unification.ranged_variable import RangedVar
from unification.value_space import RealRange
from unification.core import reify, unify

x = RangedVar()
y = RangedVar(range=RealRange([(0,1)]))

print(unify(x, y, {}))
s = {y:2}
y = reify(y, s)
print(y)
print(unify(x, y, s))
print(x, y)
Ejemplo n.º 20
0
def test_unify_seq():
    assert unify((1, 2), (1, 2), {}) == {}
    assert unify([1, 2], [1, 2], {}) == {}
    assert unify((1, 2), (1, 2, 3), {}) == False
    assert unify((1, var(1)), (1, 2), {}) == {var(1): 2}
    assert unify((1, var(1)), (1, 2), {var(1): 3}) == False
Ejemplo n.º 21
0
def test_unify_seq():
    assert unify((1, 2), (1, 2), {}) == {}
    assert unify([1, 2], [1, 2], {}) == {}
    assert unify((1, 2), (1, 2, 3), {}) == False
    assert unify((1, var(1)), (1, 2), {}) == {var(1): 2}
    assert unify((1, var(1)), (1, 2), {var(1): 3}) == False
Ejemplo n.º 22
0
def test_unify():
    x, y, z = var(), var(), var()
    assert unify(x, x, {}) == {}
    assert unify(1, 1, {}) == {}
    assert unify(1, 2, {}) is False
    assert unify(x, 2, {}) == {x: 2}
    assert unify(2, x, {}) == {x: 2}
    assert unify(2, x, MappingProxyType({})) == {x: 2}
    assert unify(x, y, {}) == {x: y}
    assert unify(y, x, {}) == {y: x}
    assert unify(y, x, {y: x}) == {y: x}
    assert unify(x, y, {y: x}) == {y: x}
    assert unify(y, x, {x: y}) == {x: y}
    assert unify(x, y, {x: y}) == {x: y}
    assert unify(y, x, {y: z}) == {y: z, z: x}
    assert unify(x, y, {y: z}) == {y: z, x: z}
Ejemplo n.º 23
0
def test_unifiable():
    x = var('x')
    f = A(1, 2)
    g = A(1, x)
    assert unify(f, g, {}) == {x: 2}
    assert reify(g, {x: 2}) == f
Ejemplo n.º 24
0
def test_unifiable_slots():
    x = var()
    f = Aslot(1, 2)
    g = Aslot(1, x)
    assert unify(f, g, {}) == {x: 2}
    assert reify(g, {x: 2}) == f
Ejemplo n.º 25
0
def test_unify_set():
    x = var('x')
    assert unify(set((1, 2)), set((1, 2)), {}) == {}
    assert unify(set((1, x)), set((1, 2)), {}) == {x: 2}
    assert unify(set((x, 2)), set((1, 2)), {}) == {x: 1}
Ejemplo n.º 26
0
def test_unify_set():
    x = var('x')
    assert unify(set((1, 2)), set((1, 2)), {}) == {}
    assert unify(set((1, x)), set((1, 2)), {}) == {x: 2}
    assert unify(set((x, 2)), set((1, 2)), {}) == {x: 1}
Ejemplo n.º 27
0
def test_unifiable():
    x = var('x')
    f = Aslot(1, 2)
    g = Aslot(1, x)
    assert unify(f, g, {}) == {x: 2}
    assert reify(g, {x: 2}) == f
Ejemplo n.º 28
0
def test_unify_nonstandard_object():
    _unify.add((ast.AST, ast.AST, Mapping), _unify_object)
    x = var()
    assert unify(ast.Num(n=1), ast.Num(n=1), {}) == {}
    assert unify(ast.Num(n=1), ast.Num(n=2), {}) is False
    assert unify(ast.Num(n=1), ast.Num(n=x), {}) == {x: 1}
Ejemplo n.º 29
0
def test_unify():
    assert unify(1, 1, {}) == {}
    assert unify(1, 2, {}) == False
    assert unify(var(1), 2, {}) == {var(1): 2}
    assert unify(2, var(1), {}) == {var(1): 2}
Ejemplo n.º 30
0
def test_unify_dict():
    assert unify({1: 2}, {1: 2}, {}) == {}
    assert unify({1: 2}, {1: 3}, {}) == False
    assert unify({2: 2}, {1: 2}, {}) == False
    assert unify({1: var(5)}, {1: 2}, {}) == {var(5): 2}
Ejemplo n.º 31
0
def test_unify():
    assert unify(1, 1, {}) == {}
    assert unify(1, 2, {}) == False
    assert unify(var(1), 2, {}) == {var(1): 2}
    assert unify(2, var(1), {}) == {var(1): 2}