def _beta_setup():
    with kb_context("test_predicate_node"):
        kb = KnowledgeBase()
        pn = get_beta_predicate_node(BOOPType,"B", "<", BOOPType,"B")
        # kb.add_subscriber(pn)
        ld = generate_link_data(pn, kb)
        idrecs = np.empty((100,),dtype=np.int64)
        for i in range(100):
            idrecs[i] = kb.declare(BOOP("?",i))
        return (kb, pn, ld, np.arange(100), idrecs), {}
Example #2
0
def test_retract_keyerror():
    with kb_context("test_retract_keyerror"):
        #NRT version
        kb = KnowledgeBase()
        with pytest.raises(KeyError):
            retract_keyerror(kb)

        #Python version
        kb = KnowledgeBase()
        with pytest.raises(KeyError):
            retract_keyerror.py_func(kb)
Example #3
0
def test_matching():
    with kb_context("test_link"):
        BOOP, BOOPType = define_fact("BOOP", {"A": "string", "B": "number"})
        l1, l2 = Var(BOOPType, "l1"), Var(BOOPType, "l2")
        r1, r2 = Var(BOOPType, "r1"), Var(BOOPType, "r2")

        c = (l1.B > 0) & (l1.B != 3) & (l1.B < 4) & (l2.B != 3) | \
            (l1.B == 3)

        kb = KnowledgeBase()
        kb.declare(BOOP("0", 0))
        kb.declare(BOOP("1", 1))
        kb.declare(BOOP("2", 2))
        kb.declare(BOOP("3", 3))
        kb.declare(BOOP("4", 4))

        cl = get_linked_conditions_instance(c, kb)

        conditions_get_matches(cl)

        print("----------")

        c = (l1.B <= 1) & (l1.B < l2.B) & (l2.B <= r1.B)

        cl = get_linked_conditions_instance(c, kb)

        conditions_get_matches(cl)
def test_predicate_node_sanity():
    with kb_context("test_predicate_node_sanity"):
        BOOP, BOOPType = define_fact("BOOP",{"A": "string", "B" : "number"})
        kb = KnowledgeBase()

        pn = get_alpha_predicate_node(BOOPType,"B", "<",9)
        pnc = cast(pn, BasePredicateNodeType)
        png = cast(pn, GenericAlphaPredicateNodeType)
        attrs_pn  = np.array([struct_get_attr_offset(pnc,x[0]) for x in base_subscriber_fields+basepredicate_node_fields])
        attrs_pnc = np.array([struct_get_attr_offset(pn, x[0]) for x in base_subscriber_fields+alpha_predicate_node_fields])
        attrs_png = np.array([struct_get_attr_offset(png,x[0]) for x in base_subscriber_fields+alpha_predicate_node_fields])
        assert np.array_equal(attrs_pn,attrs_pnc[:len(attrs_pn)])
        assert np.array_equal(attrs_pn,attrs_png[:len(attrs_pn)])
        assert np.array_equal(attrs_pnc,attrs_png)
        
        ld = generate_link_data(pnc, kb)

        assert len(filter_alpha(png, ld, np.arange(5)))==0

        pn = get_beta_predicate_node(BOOPType,"B", "<", BOOPType,"B")
        pnc = cast(pn, BasePredicateNodeType)
        png = cast(pn, GenericBetaPredicateNodeType)

        ld = generate_link_data(pnc, kb)

        attrs_pn  = np.array([struct_get_attr_offset(pnc,x[0]) for x in base_subscriber_fields+basepredicate_node_fields])
        attrs_pnc = np.array([struct_get_attr_offset(pn, x[0]) for x in base_subscriber_fields+beta_predicate_node_fields])
        attrs_png = np.array([struct_get_attr_offset(png,x[0]) for x in base_subscriber_fields+beta_predicate_node_fields])

        assert np.array_equal(attrs_pn,attrs_pnc[:len(attrs_pn)])
        assert np.array_equal(attrs_pn,attrs_png[:len(attrs_pn)])
        assert np.array_equal(attrs_pnc,attrs_png)
        assert len(filter_beta(png, ld, np.arange(5), np.arange(5))) == 0
def _benchmark_setup():
    with kb_context("test_predicate_node"):
        kb = KnowledgeBase()
        pn = get_alpha_predicate_node(BOOPType,"B", "<",50)
        ld = generate_link_data(pn,kb)
        # kb.add_subscriber(pn)
        return (kb, pn, ld), {}
Example #6
0
def test_all_facts_of_type():
    with kb_context("test_all_facts_of_type"):
        #NRT version
        kb = KnowledgeBase()
        declare_retract(kb)
        all_tf = all_of_type(kb)
        assert isinstance(all_tf[0], TextField)
        assert len(all_tf) == 90

        all_tf = all_of_type.py_func(kb)
        assert isinstance(all_tf[0], TextField)
        assert len(all_tf) == 90
def test_protected_mutability():
    print("RUNTIME1.")
    with kb_context("test_protected_mutability") as context:
        print("RUNTIME1.2")
        spec = {"A": "string", "B": "number"}
        BOOP, BOOPType = define_fact("BOOP",
                                     spec,
                                     context="test_protected_mutability")
        print("RUNTIME1.3")
        kb = KnowledgeBase(context="test_protected_mutability")
        print("RUNTIME1")
        b1 = BOOP("A", 0)
        b2 = BOOP("B", 0)
        print("RUNTIME1")

        @njit
        def edit_it(b):
            b.B += 1

        print("RUNTIME2")

        edit_it(b1)
        edit_it(b2)
        # edit_it.py_func(b2)
        print("RUNTIME3")

        @njit
        def declare_it(kb, b, name):
            kb.declare(b, name)

        print("RUNTIME3.1", b1.fact_num)
        declare_it(kb, b1, "b1")
        print("RUNTIME3.2")
        declare_it.py_func(kb, b2, "b2")

        print("RUNTIMEz")

        with pytest.raises(AttributeError):
            print("RUNTIME_PY")
            edit_it.py_func(b1)

        with pytest.raises(AttributeError):
            print("RUNTIME_PY")
            edit_it.py_func(b2)

        with pytest.raises(AttributeError):
            print("RUNTIME_NB", b1.B)
            edit_it(b1)

        with pytest.raises(AttributeError):
            print("RUNTIME_NB", b1.B)
            edit_it(b1)
Example #8
0
def test_declare_retract():
    with kb_context("test_declare_retract"):
        #NRT version
        kb = KnowledgeBase()
        assert declare_retract(kb) == 10
        assert declare_again(kb) == 0

        #Python version
        kb = KnowledgeBase()
        assert declare_retract.py_func(kb) == 10
        assert declare_again.py_func(kb) == 0

        with pytest.raises(TypingError):
            bad_declare_type(kb)

        with pytest.raises(TypingError):
            bad_declare_type.py_func(kb)

        with pytest.raises(TypingError):
            bad_retract_type(kb)

        with pytest.raises(TypingError):
            bad_retract_type.py_func(kb)
Example #9
0
def test_modify():
    with kb_context("test_modify"):
        TextField, TextFieldType = define_fact("TextField", tf_spec)
        kb = KnowledgeBase()
        fact = TextField("A", "B", "C", "D", "E")

        modify_right(kb, fact, "nb")
        assert fact.to_right == "nb"

        modify_right.py_func(kb, fact, "py")
        assert fact.to_right == "py"

        with pytest.raises(TypingError):
            bad_modify_type(kb)

        with pytest.raises(TypingError):
            bad_modify_type.py_func(kb)
Example #10
0
def test_link():
    with kb_context() as context:
        print(context.fact_types)
        # BOOP, BOOPType = define_fact("BOOP",{"A": "string", "B" : "number"})

        l1, l2 = Var(BOOPType, "l1"), Var(BOOPType, "l2")
        r1, r2 = Var(BOOPType, "r1"), Var(BOOPType, "r2")

        c = (l1.B < 1) & (l1.B > 7) & (l2.B < r1.B) & (r2.B < l1.B) |\
             (l2.B < 1) & (l2.B > 7) & (l2.B < r1.B) & (r1.B < r2.B) |\
             (l2.B < 1) & (l2.B > 7) & (l2.B < r1.B) & (l1.B < l2.B)

        kb = KnowledgeBase()
        cl = get_linked_conditions_instance(c, kb)

        assert get_pointer(cl) == get_pointer(c)

        cl = get_linked_conditions_instance(c, kb, copy=True)

        assert get_pointer(cl) != get_pointer(c)
Example #11
0
def test_grow_change_queues():
    with kb_context("test_grow_change_queues"):
        TextField, TextFieldType = define_fact("TextField", tf_spec)
        #NRT version
        kb = KnowledgeBase()
        dummy_subscriber = dummy_subscriber_ctor()
        kb.add_subscriber(dummy_subscriber)

        idrec = kb.declare(TextField("A", "B", "C", "D", "E"))

        # assert kb.kb_data.subscribers[0].grow_queue.data[0] == idrec
        gr_q = kb.kb_data.grow_queue
        assert gr_q.data[gr_q.head - 1] == idrec

        kb.retract(idrec)

        # assert kb.kb_data.subscribers[0].change_queue.data[0] == idrec
        ch_q = kb.kb_data.change_queue
        assert ch_q.data[ch_q.head - 1] == idrec
def test_alpha_predicate_node():
    with kb_context("test_alpha_predicate_node"):
        BOOP, BOOPType = define_fact("BOOP",{"A": "string", "B" : "number"})

        kb = KnowledgeBase()
        pn = get_alpha_predicate_node(BOOPType,"B", "<",9)
        ld = generate_link_data(pn, kb)

        # kb.add_subscriber(pn)

        x = BOOP("x",7)
        y = BOOP("y",11)
        z = BOOP("z",8)

        assert len(ld.truth_values) == 0        

        kb.declare(x)
        kb.declare(y)
        kb.declare(z)

        # njit_update(pn)
        inds = filter_alpha(pn, ld, np.arange(3))
        assert np.array_equal(inds, [0,2]) 
        assert all(ld.truth_values[:3,0] == [1,0,1])

        kb.modify(x,"B", 100)
        kb.modify(y,"B", 3)
        kb.modify(z,"B", 88)

        #Checks doesn't change before update
        assert all(ld.truth_values[:3,0] == [1,0,1])
        inds = filter_alpha(pn, ld, np.arange(3))
        assert np.array_equal(inds, [1]) 
        assert all(ld.truth_values[:3,0] == [0,1,0])

        kb.retract(x)
        kb.retract(y)
        kb.retract(z)

        #Checks doesn't change before update
        assert all(ld.truth_values[:3,0] == [0,1,0])

        inds = filter_alpha(pn, ld, np.arange(3))
        print(inds)
        assert np.array_equal(inds, []) 

        # print(ld.truth_values)
        #Checks that retracted facts show up as u1.nan = 0XFF
        assert all(ld.truth_values[:3,0] == [0xFF,0xFF,0xFF])

        kb.declare(x)
        kb.declare(y)
        kb.declare(z)
        kb.modify(z,"A","Z")
        kb.modify(x,"B",0)
        kb.modify(y,"B",0)
        kb.modify(z,"B",0)

        inds = filter_alpha(pn, ld, np.arange(3))
        assert np.array_equal(inds, [0,1,2]) 

        assert all(ld.truth_values[:3,0] == [1,1,1])
def test_beta_predicate_node_2_typed():
    with kb_context("test_beta_predicate_node_2_typed"):
        BOOP1, BOOP1Type = define_fact("BOOP1",{"A": "number", "B" : "string"})
        BOOP2, BOOP2Type = define_fact("BOOP2",{"A": "string", "B" : "number"})

        kb = KnowledgeBase()

        pn = get_beta_predicate_node(BOOP1Type,"A", "<", BOOP2Type,"B")
        ld = generate_link_data(pn, kb)
        # kb.add_subscriber(pn)

        x1,x2 = BOOP1(7,"x"),  BOOP2("x",7.5) #<- slightly different
        y1,y2 = BOOP1(11,"y"), BOOP2("y",11)
        z1,z2 = BOOP1(8,"z"),  BOOP2("z",8)

        assert len(ld.truth_values) == 0        

        kb.declare(x1); kb.declare(x2)
        kb.declare(y1); kb.declare(y2)
        kb.declare(z1); kb.declare(z2)
        
        inds = filter_beta(pn, ld, np.arange(3), np.arange(3))
        # print(inds)

        # print(ld.truth_values)
        assert np.array_equal(inds, [[0,0],[0, 1], [0, 2], [2, 1]])
        assert all(ld.truth_values[0,:3] == [1,1,1])
        assert all(ld.truth_values[1,:3] == [0,0,0])
        assert all(ld.truth_values[2,:3] == [0,1,0])

        q1, q2 = BOOP1(-7,"q"),  BOOP2("q",-7)
        r1, r2 = BOOP1(-11,"r"), BOOP2("r",-11)
        t1, t2 = BOOP1(-8,"t"),  BOOP2("t",-8)
        kb.declare(q1); kb.declare(q2)
        kb.declare(r1); kb.declare(r2)
        kb.declare(t1); kb.declare(t2)

        inds = filter_beta(pn, ld, np.arange(6), np.arange(6))
        # print(inds)
        # print(ld.truth_values[:6,:6])
        assert np.array_equal(inds,[[0,0],[0,1],[0,2],[2,1],[3,0],[3,1],
                [3,2],[4,0],[4,1],[4,2],[4,3],[4,5],[5,0],[5,1],[5,2],[5,3]])
        assert all(ld.truth_values[0,:6] == [1,1,1,0,0,0])
        assert all(ld.truth_values[1,:6] == [0,0,0,0,0,0])
        assert all(ld.truth_values[2,:6] == [0,1,0,0,0,0])
        assert all(ld.truth_values[3,:6] == [1,1,1,0,0,0])
        assert all(ld.truth_values[4,:6] == [1,1,1,1,0,1])
        assert all(ld.truth_values[5,:6] == [1,1,1,1,0,0])

        kb.modify(r1,"A", 0); kb.modify(r2,"B", 0)
        kb.modify(y1,"A", 0); kb.modify(y2,"B", 0)

        inds = filter_beta(pn, ld, np.arange(6), np.arange(6))
        # print(ld.truth_values[:6,:6])
        assert all(ld.truth_values[0,:6] == [1,0,1,0,0,0])
        assert all(ld.truth_values[1,:6] == [1,0,1,0,0,0])
        assert all(ld.truth_values[2,:6] == [0,0,0,0,0,0])
        assert all(ld.truth_values[3,:6] == [1,1,1,0,1,0])
        assert all(ld.truth_values[4,:6] == [1,0,1,0,0,0])
        assert all(ld.truth_values[5,:6] == [1,1,1,1,1,0])

        kb.retract(r1); kb.retract(r2)
        kb.retract(y1); kb.retract(y2)
        
        inds = filter_beta(pn, ld, np.arange(6), np.arange(6))
        # print(ld.truth_values[:6,:6])
        assert all(ld.truth_values[0,:6] == [1,0,1,0,0,0])
        assert all(ld.truth_values[1,:6] == [0,0,0,0,0,0])
        assert all(ld.truth_values[2,:6] == [0,0,0,0,0,0])
        assert all(ld.truth_values[3,:6] == [1,0,1,0,0,0])
        assert all(ld.truth_values[4,:6] == [0,0,0,0,0,0])
        assert all(ld.truth_values[5,:6] == [1,0,1,1,0,0])
def test_beta_predicate_node_1_typed():
    with kb_context("test_beta_predicate_node_1_typed"):
        BOOP, BOOPType = define_fact("BOOP",{"A": "string", "B" : "number"})

        kb = KnowledgeBase()
        pn = get_beta_predicate_node(BOOPType,"B", "<", BOOPType,"B")
        # png = cast(pn, GenericBetaPredicateNodeType)
        ld = generate_link_data(pn, kb)
        # kb.add_subscriber(pn)

        x = BOOP("x",7)
        y = BOOP("y",11)
        z = BOOP("z",8)

        assert len(ld.truth_values) == 0        

        kb.declare(x)
        kb.declare(y)
        kb.declare(z)

        # njit_update(pn)
        inds = filter_beta(pn, ld, np.arange(3), np.arange(3))
        # print("B")
        # print(inds)

        assert np.array_equal(inds, [[0, 1], [0, 2], [2, 1]])
        # print(ld.truth_values)
        assert all(ld.truth_values[0,:3] == [0,1,1])
        assert all(ld.truth_values[1,:3] == [0,0,0])
        assert all(ld.truth_values[2,:3] == [0,1,0])

        q = BOOP("q",-7)
        r = BOOP("r",-11)
        t = BOOP("t",-8)
        kb.declare(q)
        kb.declare(r)
        kb.declare(t)

        inds = filter_beta(pn, ld, np.arange(6), np.arange(6))
        # print(inds)
        assert np.array_equal(inds,[[0,1],[0,2],[2,1],[3,0],[3,1],
                [3,2],[4,0],[4,1],[4,2],[4,3],[4,5],[5,0],[5,1],[5,2],[5,3]])
        # njit_update(pn)
        # print(ld.truth_values[:6,:6])
        assert all(ld.truth_values[0,:6] == [0,1,1,0,0,0])
        assert all(ld.truth_values[1,:6] == [0,0,0,0,0,0])
        assert all(ld.truth_values[2,:6] == [0,1,0,0,0,0])
        assert all(ld.truth_values[3,:6] == [1,1,1,0,0,0])
        assert all(ld.truth_values[4,:6] == [1,1,1,1,0,1])
        assert all(ld.truth_values[5,:6] == [1,1,1,1,0,0])

        kb.modify(r,"B", 0)
        kb.modify(y,"B", 0)

        inds = filter_beta(pn, ld, np.arange(6), np.arange(6))

        # njit_update(pn)
        # print(ld.truth_values[:6,:6])
        assert all(ld.truth_values[0,:6] == [0,0,1,0,0,0])
        assert all(ld.truth_values[1,:6] == [1,0,1,0,0,0])
        assert all(ld.truth_values[2,:6] == [0,0,0,0,0,0])
        assert all(ld.truth_values[3,:6] == [1,1,1,0,1,0])
        assert all(ld.truth_values[4,:6] == [1,0,1,0,0,0])
        assert all(ld.truth_values[5,:6] == [1,1,1,1,1,0])

        kb.retract(r)
        kb.retract(y)

        inds = filter_beta(pn, ld, np.arange(6), np.arange(6))

        # njit_update(pn)
        # print(ld.truth_values[:6,:6])
        assert all(ld.truth_values[0,:6] == [0,0,1,0,0,0])
        assert all(ld.truth_values[1,:6] == [0,0,0,0,0,0])
        assert all(ld.truth_values[2,:6] == [0,0,0,0,0,0])
        assert all(ld.truth_values[3,:6] == [1,0,1,0,0,0])
        assert all(ld.truth_values[4,:6] == [0,0,0,0,0,0])
        assert all(ld.truth_values[5,:6] == [1,0,1,1,0,0])
Example #15
0
def _benchmark_setup():
    with kb_context("test_kb"):
        kb = KnowledgeBase()
    return (kb, ), {}
Example #16
0
def test_declare_overloading():
    with kb_context("test_declare_overloading"):
        kb = KnowledgeBase()
        idrec1 = declare_unnamed(kb)
        idrec2 = declare_unnamed.py_func(kb)
        assert idrec1 != idrec2