def setUp(self): self.v, self.a = VariableFactory(), FamilyMemberFactory() self.kb = KnowledgeBase() v, a = self.v, self.a self.father = RuleBasedPredicate('father', (FamilyMember, FamilyMember)) self.mother = RuleBasedPredicate('mother', (FamilyMember, FamilyMember)) self.kb.add_all([self.mother, self.father])
def testMemberPredicate(self): print "" v, a = VariableFactory(), AtomFactory() kb = KnowledgeBase() kb.add(components) member = RuleBasedPredicate("member", (Term, dot)) kb.add(member) positive_tuples = ((1, plist([1, 2, 3, 4])), (4, plist([1, 2, 3, 4])), (5, plist([5, 4, 3, 2])), (2, plist([1, 2, 3, 4])), (3, plist([1, 2, 3, 4]))) negative_tuples = ((1, plist([2, 3, 4, 5])), (2, plist([1, 3, 4, 5])), (3, plist([1, 2, 4, 5])), (4, plist([1, 2, 3, 5])), (5, plist([1, 2, 3, 4])), (plist([1, 2]), plist([1, 2, 3, 4]))) foil(member, positive_tuples, negative_tuples, kb, ordering=None) self.assertFollows(member(11, plist([2, 3, 5, 7, 11, 13]))) self.assertNotFollows(member(12, plist([2, 3, 5, 7, 11, 13]))) self.print_rules(member)
class FamilyTreeTestCase(FoilTestCase): def setUp(self): pass def loadFamilyTree1(self): """ Frank -------- Rebecca George -------- Jannet | | | | Abe Alan ------ Joan Jill ------ Bob Tim ---- Tammy | | | Sean -------- Jan Tipsy --- Tom | | Jane ---- Ian Thomas --- Debrah | | Ann Billy """ v, a = self.v, self.a ordering = [a.frank, a.rebecca, a.george, a.jannet, a.abe, a.alan, a.joan, a.jill, a.bob, a.tim, a.tammy, a.sean, a.jan, a.tipsy, a.tom, a.jane, a.ian, a.thomas, a.debrah, a.ann, a.billy] FamilyMember.set_ordering(ordering) self.father.rules = [] self.father.param_orderings = None map(self.father.add_rule, [(a.frank, a.abe), (a.frank, a.alan), (a.alan, a.sean), (a.sean, a.jane), (a.george, a.bob), (a.george, a.tim), (a.bob, a.jan), (a.tim, a.tom), (a.tom, a.thomas), (a.ian, a.ann), (a.thomas, a.billy)]) self.mother.rules = [] self.mother.param_orderings = None map(self.mother.add_rule, [(a.rebecca, a.alan), (a.rebecca, a.abe), (a.joan, a.sean), (a.jane, a.ann), (a.jannet, a.tim), (a.jannet, a.bob), (a.tammy, a.tom), (a.tipsy, a.thomas), (a.debrah, a.billy), (a.jill, a.jan), (a.jan, a.jane)]) for predicate in [self.mother, self.father]: try: predicate.param_orderings = determine_param_orderings(predicate) except: pass def setUp(self): self.v, self.a = VariableFactory(), FamilyMemberFactory() self.kb = KnowledgeBase() v, a = self.v, self.a self.father = RuleBasedPredicate('father', (FamilyMember, FamilyMember)) self.mother = RuleBasedPredicate('mother', (FamilyMember, FamilyMember)) self.kb.add_all([self.mother, self.father]) def testFindRecursiveRules(self): from trimlogic.predicate import Rule, MutableRule from trimlogic.foil import will_halt v, a = self.v, self.a self.loadFamilyTree1() mother = self.mother predicate = RuleBasedPredicate('ancestor', (FamilyMember, FamilyMember)) predicate.rules.append( Rule( predicate, (v.X, v.Y), (mother(v.X, v.Y),) ) ) current_rule = MutableRule( predicate, (v.X, v.Y), (mother(v.Z, v.Y),) ) predicate.rules.append(current_rule) recursive_literal = predicate(v.X, v.Z) ordering = find_partial_ordering_of_terms(current_rule) self.assertTrue(will_halt(predicate, recursive_literal, [v.X, v.Y], ordering)) def testAncestor(self): v, a = self.v, self.a self.loadFamilyTree1() ancestor = RuleBasedPredicate('ancestor', (FamilyMember, FamilyMember)) self.kb.add(ancestor) positive_tuples = [[a.jane, a.ann], [a.tim, a.tom], [a.tipsy, a.billy], [a.jannet, a.billy], [a.joan, a.jane], [a.rebecca, a.ann], [a.frank, a.jane], [a.jan, a.ann], [a.jill, a.ann]] negative_tuples = [[a.tim, a.ann], [a.ann, a.billy], [a.jane, a.frank], [a.tom, a.debrah], [a.tim, a.tammy], [a.tom, a.george], [a.jane, a.joan]] foil(ancestor, positive_tuples, negative_tuples, self.kb, ordering=None) self.assertFollows(ancestor(a.bob, a.jane)) self.assertNotFollows(ancestor(a.bob, a.ian)) self.kb.remove(ancestor) self.print_rules(ancestor) def testGrandparent(self): import sys v, a = self.v, self.a self.loadFamilyTree1() grandfather = RuleBasedPredicate('grandfather', (FamilyMember, FamilyMember)) grandfather.arity = 2 self.kb.add(grandfather) positive_tuples = [[a.frank, a.sean], [a.tom, a.billy], [a.george, a.jan], [a.bob, a.jane], [a.sean, a.ann], [a.frank, a.sean]] negative_tuples = [[a.jannet, a.tim], [a.jane, a.alan], [a.rebecca, a.sean], [a.jan, a.ann]] foil(grandfather, positive_tuples, negative_tuples, self.kb, ordering=None) self.assertFollows(grandfather(a.george, a.tom)) self.assertFollows(grandfather(a.alan, a.jane)) self.assertNotFollows(grandfather(a.tipsy, a.billy)) self.assertNotFollows(grandfather(a.bob, a.ian)) self.kb.remove(grandfather) self.print_rules(grandfather)
class FamilyTreeTestCase(FoilTestCase): def setUp(self): pass def loadFamilyTree1(self): """ Frank -------- Rebecca George -------- Jannet | | | | Abe Alan ------ Joan Jill ------ Bob Tim ---- Tammy | | | Sean -------- Jan Tipsy --- Tom | | Jane ---- Ian Thomas --- Debrah | | Ann Billy """ v, a = self.v, self.a ordering = [ a.frank, a.rebecca, a.george, a.jannet, a.abe, a.alan, a.joan, a.jill, a.bob, a.tim, a.tammy, a.sean, a.jan, a.tipsy, a.tom, a.jane, a.ian, a.thomas, a.debrah, a.ann, a.billy ] FamilyMember.set_ordering(ordering) self.father.rules = [] self.father.param_orderings = None map(self.father.add_rule, [(a.frank, a.abe), (a.frank, a.alan), (a.alan, a.sean), (a.sean, a.jane), (a.george, a.bob), (a.george, a.tim), (a.bob, a.jan), (a.tim, a.tom), (a.tom, a.thomas), (a.ian, a.ann), (a.thomas, a.billy)]) self.mother.rules = [] self.mother.param_orderings = None map(self.mother.add_rule, [(a.rebecca, a.alan), (a.rebecca, a.abe), (a.joan, a.sean), (a.jane, a.ann), (a.jannet, a.tim), (a.jannet, a.bob), (a.tammy, a.tom), (a.tipsy, a.thomas), (a.debrah, a.billy), (a.jill, a.jan), (a.jan, a.jane)]) for predicate in [self.mother, self.father]: try: predicate.param_orderings = determine_param_orderings( predicate) except: pass def setUp(self): self.v, self.a = VariableFactory(), FamilyMemberFactory() self.kb = KnowledgeBase() v, a = self.v, self.a self.father = RuleBasedPredicate('father', (FamilyMember, FamilyMember)) self.mother = RuleBasedPredicate('mother', (FamilyMember, FamilyMember)) self.kb.add_all([self.mother, self.father]) def testFindRecursiveRules(self): from trimlogic.predicate import Rule, MutableRule from trimlogic.foil import will_halt v, a = self.v, self.a self.loadFamilyTree1() mother = self.mother predicate = RuleBasedPredicate('ancestor', (FamilyMember, FamilyMember)) predicate.rules.append( Rule(predicate, (v.X, v.Y), (mother(v.X, v.Y), ))) current_rule = MutableRule(predicate, (v.X, v.Y), (mother(v.Z, v.Y), )) predicate.rules.append(current_rule) recursive_literal = predicate(v.X, v.Z) ordering = find_partial_ordering_of_terms(current_rule) self.assertTrue( will_halt(predicate, recursive_literal, [v.X, v.Y], ordering)) def testAncestor(self): v, a = self.v, self.a self.loadFamilyTree1() ancestor = RuleBasedPredicate('ancestor', (FamilyMember, FamilyMember)) self.kb.add(ancestor) positive_tuples = [[a.jane, a.ann], [a.tim, a.tom], [a.tipsy, a.billy], [a.jannet, a.billy], [a.joan, a.jane], [a.rebecca, a.ann], [a.frank, a.jane], [a.jan, a.ann], [a.jill, a.ann]] negative_tuples = [[a.tim, a.ann], [a.ann, a.billy], [a.jane, a.frank], [a.tom, a.debrah], [a.tim, a.tammy], [a.tom, a.george], [a.jane, a.joan]] foil(ancestor, positive_tuples, negative_tuples, self.kb, ordering=None) self.assertFollows(ancestor(a.bob, a.jane)) self.assertNotFollows(ancestor(a.bob, a.ian)) self.kb.remove(ancestor) self.print_rules(ancestor) def testGrandparent(self): import sys v, a = self.v, self.a self.loadFamilyTree1() grandfather = RuleBasedPredicate('grandfather', (FamilyMember, FamilyMember)) grandfather.arity = 2 self.kb.add(grandfather) positive_tuples = [[a.frank, a.sean], [a.tom, a.billy], [a.george, a.jan], [a.bob, a.jane], [a.sean, a.ann], [a.frank, a.sean]] negative_tuples = [[a.jannet, a.tim], [a.jane, a.alan], [a.rebecca, a.sean], [a.jan, a.ann]] foil(grandfather, positive_tuples, negative_tuples, self.kb, ordering=None) self.assertFollows(grandfather(a.george, a.tom)) self.assertFollows(grandfather(a.alan, a.jane)) self.assertNotFollows(grandfather(a.tipsy, a.billy)) self.assertNotFollows(grandfather(a.bob, a.ian)) self.kb.remove(grandfather) self.print_rules(grandfather)