def test_NetworkPlotting_DefRuleWithOrClause(self): self.network.addRule( types.DefRuleConstruct( "A", self.MM, lhs=[ types.OrPatternCE([ types.OrderedPatternCE([ types.Symbol("A"), types.SingleFieldVariable(types.Symbol("varA")), types.Symbol("C"), ], self.MM), types.OrderedPatternCE([ types.SingleFieldVariable(types.Symbol("varA")), types.Symbol("A"), types.Symbol("C"), ], self.MM) ]) ])) # manually fire the network ready event self.network.eventsManager.fire(EventsManager.E_NETWORK_READY, self.network) self.network.eventsManager.fire(EventsManager.E_NETWORK_SHUTDOWN, self.network)
def test_NegativeJoinBetaCircuitFalseCondition(self): self.network.addRule(types.DefRuleConstruct("A", self.MM, lhs=[ types.OrderedPatternCE([ types.Symbol("A"), types.Symbol("B"), types.Symbol("C"), ], self.MM), types.NotPatternCE( types.OrderedPatternCE([ types.Symbol("C"), types.Symbol("B"), types.Symbol("A"), ], self.MM)) ])) trap = activationCatcher() (self.network._root.children[0] #MAIN .children[0] #C .children[0] #B .children[0] #A .children[0] #LEN .memory #AM .children[0]).prependChild(trap) self.network.assertFact(fact([types.Symbol("C"), types.Symbol("B"), types.Symbol("A")])) self.assertFalse(trap.leftCatch) self.network.assertFact(fact([types.Symbol("A"), types.Symbol("B"), types.Symbol("C")])) self.assertFalse(trap.leftCatch)
def test_JoinNodeVarBindingOnOrderedPatternCEWithNegativeTermOverVariable(self): self.network.addRule(types.DefRuleConstruct("A", self.MM, lhs=[ types.OrderedPatternCE([ types.Symbol("A"), types.SingleFieldVariable(types.Symbol("varA")), types.Symbol("C"), ], self.MM), types.OrderedPatternCE([ types.NegativeTerm(types.SingleFieldVariable(types.Symbol("varA")), True), types.UnnamedSingleFieldVariable(), types.Symbol("C"), ], self.MM) ])) self.assertIsInstance(self.network._root.children[0].children[0].children[0].memory.children[0], JoinNode) self.assertFalse(self.network._root.children[0].children[0].children[0].memory.children[0].isLeftRoot()) trap = activationCatcher() self.network._root.children[0].children[0].children[0].memory.children[0].appendChild(trap) f = fact([types.Symbol("A"), types.Symbol("B"), types.Symbol("C")]) self.network.assertFact(f) self.assertTrue(trap.leftCatch)
def test_JoinNodeIntraElementVarBindingTestInBetaNetwork(self): self.network.addRule(types.DefRuleConstruct("A", self.MM, lhs=[ types.OrderedPatternCE([ types.SingleFieldVariable(types.Symbol("varA")), types.SingleFieldVariable(types.Symbol("varA")), types.Symbol("C"), ], self.MM) ])) self.assertIsInstance(self.network._root.children[0].children[0].children[0].memory.children[0], JoinNode) self.assertTrue(self.network._root.children[0].children[0].children[0].memory.children[0].isLeftRoot()) trap = activationCatcher() self.network._root.children[0].children[0].children[0].memory.children[0].appendChild(trap) f = fact([types.Symbol("A"), types.Symbol("B"), types.Symbol("C")]) self.network.assertFact(f) self.assertFalse(trap.leftCatch) f = fact([types.Symbol("A"), types.Symbol("A"), types.Symbol("C")]) self.network.assertFact(f) self.assertTrue(trap.leftCatch)
def test_NccBetaCircuitNotPropagation(self): self.network.addRule(types.DefRuleConstruct("A", self.MM, lhs=[ types.OrderedPatternCE([ types.Symbol("A"), types.Symbol("B"), types.Symbol("C"), ], self.MM), types.NotPatternCE( types.AndPatternCE([ types.OrderedPatternCE([ types.Symbol("Z"), types.Symbol("Z"), types.Symbol("Z"), ], self.MM), types.OrderedPatternCE([ types.Symbol("W"), types.Symbol("W"), types.Symbol("W"), ], self.MM) ])) ])) trap = activationCatcher() (self.network._root.children[0] #MAIN .children[-1] #A .children[-1] #B .children[-1] #C .children[-1] #LEN 3 .memory #AM .children[-1] #DUMMYJOIN .children[-1] #NCC ).prependChild(trap) self.network.assertFact(fact([types.Symbol("Z"), types.Symbol("Z"), types.Symbol("Z")])) self.network.assertFact(fact([types.Symbol("W"), types.Symbol("W"), types.Symbol("W")])) self.network.assertFact(fact([types.Symbol("A"), types.Symbol("B"), types.Symbol("C")])) self.assertFalse(trap.leftCatch)
def test_DummyJoinNodeCreationAfterFirstPatternCE(self): self.network.addRule(types.DefRuleConstruct("A", self.MM, lhs=[ types.OrderedPatternCE([ types.Symbol("A"), types.Symbol("B"), types.Symbol("C"), ], self.MM) ])) self.assertIsInstance(self.network._root.children[0].children[0].children[0].children[0].children[0].memory.children[0], JoinNode) self.assertTrue(self.network._root.children[0].children[0].children[0].children[0].children[0].memory.children[0].isLeftRoot())
def test_NegativeJoinBetaCircuitCompilation(self): self.network.addRule(types.DefRuleConstruct("A", self.MM, lhs=[ types.OrderedPatternCE([ types.Symbol("A"), types.Symbol("B"), types.Symbol("C"), ], self.MM), types.NotPatternCE( types.OrderedPatternCE([ types.Symbol("C"), types.Symbol("B"), types.Symbol("A"), ], self.MM)) ])) self.assertIsInstance(self.network._root .children[0] #MAIN .children[0] #C .children[0] #B .children[0] #A .children[0] #LEN .memory #AM .children[0], NegativeJoinNode)
def test_AssertFact(self): self.network.addRule(types.DefRuleConstruct("A", self.MM, lhs=[ types.OrderedPatternCE([ types.Symbol("A"), types.Symbol("B"), types.Symbol("C"), ], self.MM) ])) self.network.assertFact(fact([types.Symbol("A"), types.Symbol("B"), types.Symbol("C")])) self.assertEqual(len(self.network._root.children[0].children[0].children[0].children[0].children[0].memory.items), 1) self.assertIsInstance(self.network._root.children[0].children[0].children[0].children[0].children[0].memory.items[0], WME) self.assertIsInstance(self.network._root.children[0].children[0].children[0].children[0].children[0].memory.items[0].fact, theFactClasses) self.assertIsInstance(self.network._root.children[0].children[0].children[0].children[0].children[0].memory.items[0].fact[0], types.Symbol)
def test_RetractUsedFact(self): prevLen = len(self.network.facts) self.network.addRule(types.DefRuleConstruct("A", self.MM, lhs=[ types.OrderedPatternCE([ types.Symbol("A"), types.Symbol("B"), types.Symbol("C"), ], self.MM) ])) wme, _ = self.network.assertFact(fact([types.Symbol("A"), types.Symbol("B"), types.Symbol("C")])) self.network.retractFact(self.network.getWmeFromId(wme.factId)) self.assertEqual(len(self.network.facts), prevLen)
def test_AlphaCircuitCompilationOrdered(self): self.network.addRule(types.DefRuleConstruct("A", self.MM, lhs=[ types.OrderedPatternCE([ types.Symbol("A"), types.Symbol("B"), types.Symbol("C"), ], self.MM) ])) self.assertIsInstance(self.network._root, RootNode) self.assertIsInstance(self.network._root.children[0], PropertyTestNode) self.assertIsInstance(self.network._root.children[0].children[0], PropertyTestNode) self.assertIsInstance(self.network._root.children[0].children[0].children[0], PropertyTestNode) self.assertIsInstance(self.network._root.children[0].children[0].children[0].children[0], PropertyTestNode) self.assertIsInstance(self.network._root.children[0].children[0].children[0].children[0].children[0], PropertyTestNode) self.assertIsInstance(self.network._root.children[0].children[0].children[0].children[0].children[0].memory, AlphaMemory) self.assertIsInstance(self.network._root.children[0].children[0].children[0].children[0].children[0].memory.children[0], JoinNode)
def test_NetworkPlotting_AlphaAndDummyJoinOnly(self): self.network.addRule( types.DefRuleConstruct("A", self.MM, lhs=[ types.OrderedPatternCE([ types.Symbol("A"), types.Symbol("B"), types.Symbol("C"), ], self.MM) ])) # manually fire the network ready event self.network.eventsManager.fire(EventsManager.E_NETWORK_READY, self.network) self.network.eventsManager.fire(EventsManager.E_NETWORK_SHUTDOWN, self.network)
def test_DummyJoinNodePropagation(self): self.network.addRule(types.DefRuleConstruct("A", self.MM, lhs=[ types.OrderedPatternCE([ types.Symbol("A"), types.Symbol("B"), types.Symbol("C"), ], self.MM) ])) self.assertIsInstance(self.network._root.children[0].children[0].children[0].children[0].children[0].memory.children[0], JoinNode) trap = activationCatcher() self.network._root.children[0].children[0].children[0].children[0].children[0].memory.children[0].appendChild(trap) self.network.assertFact(fact([types.Symbol("A"), types.Symbol("B"), types.Symbol("C")])) self.assertTrue(trap.leftCatch)
def test_AlphaCircuitWithMultifield(self): self.network.addRule(types.DefRuleConstruct("A", self.MM, lhs=[ types.OrderedPatternCE([ types.Symbol("A"), types.MultiFieldVariable(types.Symbol("varB")), types.Symbol("C"), ], self.MM) ])) self.assertIsInstance(self.network._root.children[0].children[0].children[0].memory, AlphaMemory) #self.assertTrue(self.network._root.children[0].children[0].memory.children[0].isLeftRoot()) trap = activationCatcher() self.network._root.children[0].children[0].children[0].memory.prependChild(trap) f = fact([types.Symbol("A"), types.Symbol("B"), types.Symbol("B2"), types.Symbol("C")]) self.network.assertFact(f) self.assertNotEqual(len(self.network._root.children[0].children[0].children[0].memory.items), 0) self.assertTrue(trap.rightCatch)
def test_NccBetaCircuitCompilation(self): self.network.addRule(types.DefRuleConstruct("A", self.MM, lhs=[ types.OrderedPatternCE([ types.Symbol("A"), types.Symbol("B"), types.Symbol("C"), ], self.MM), types.NotPatternCE( types.AndPatternCE([ types.OrderedPatternCE([ types.Symbol("Z"), types.Symbol("Z"), types.Symbol("Z"), ], self.MM), types.OrderedPatternCE([ types.Symbol("W"), types.Symbol("W"), types.Symbol("W"), ], self.MM) ])) ])) # check main branch self.assertIsInstance(self.network._root .children[0] #MAIN .children[-1] #A .children[-1] #B .children[-1] #C .children[-1] #LEN 3 .memory #AM .children[-1] #DUMMYJOIN .children[-1] #NCC , NccNode) # check partner branch self.assertIsInstance(self.network._root .children[0] #MAIN .children[-2] #Z .children[-1] #Z .children[-1] #Z .children[-1] #LEN 3 .memory #AM .children[-1] #DUMMYJOIN .children[-1] #BETA .children[-1] #JOIN .children[-1] , NccPartnerNode) # check if nccPartner is linked to nccNode self.assertEqual(self.network._root .children[0] #MAIN .children[-2] #Z .children[-1] #Z .children[-1] #Z .children[-1] #LEN 3 .memory #AM .children[-1] #DUMMYJOIN .children[-1] #BETA .children[-1] #JOIN .children[-1].nccNode , self.network._root .children[0] #MAIN .children[-1] #A .children[-1] #B .children[-1] #C .children[-1] #LEN 3 .memory #AM .children[-1] #DUMMYJOIN .children[-1] #NCC ) # check if NccNode is linked to NccPartner self.assertEqual(self.network._root .children[0] #MAIN .children[-2] #Z .children[-1] #Z .children[-1] #Z .children[-1] #LEN 3 .memory #AM .children[-1] #DUMMYJOIN .children[-1] #BETA .children[-1] #JOIN .children[-1] , self.network._root .children[0] #MAIN .children[-1] #A .children[-1] #B .children[-1] #C .children[-1] #LEN 3 .memory #AM .children[-1] #DUMMYJOIN .children[-1].partner )