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), {}
Exemplo n.º 2
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)
Exemplo n.º 3
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])