def test_simple(self): # Basic test uses very simple AtomSpace. del self.blender del self.a self.a = AtomSpace() self.blender = ConceptualBlending(self.a) car = self.a.add_node(types.ConceptNode, "car") man = self.a.add_node(types.ConceptNode, "man") self.a.set_av(car.h, 1) self.a.set_av(man.h, 1) # Test blender makes only one new blend node. result = self.blender.run() assert_equal(len(result), 1) # Test blender makes new blend node correctly. blended_node = result[0] assert_true( str(blended_node.name) == "car-man" or str(blended_node.name) == "man-car")
def test_simple(self): # Basic test uses very simple AtomSpace. del self.blender del self.a self.a = AtomSpace() self.blender = ConceptualBlending(self.a) car = self.a.add_node(types.ConceptNode, "car") man = self.a.add_node(types.ConceptNode, "man") self.a.set_av(car.h, 1) self.a.set_av(man.h, 1) # Test blender makes only one new blend node. result = self.blender.run() assert_equal(len(result), 1) # Test blender makes new blend node correctly. blended_node = result[0] assert_true( str(blended_node.name) == "car-man" or str(blended_node.name) == "man-car" )
class TestBasicFunctions(TestConceptualBlendingBase): __test__ = True def test_simple(self): # Basic test uses very simple AtomSpace. del self.blender del self.a self.a = AtomSpace() self.blender = ConceptualBlending(self.a) car = self.a.add_node(types.ConceptNode, "car") man = self.a.add_node(types.ConceptNode, "man") self.a.set_av(car.h, 1) self.a.set_av(man.h, 1) # Test blender makes only one new blend node. result = self.blender.run() assert_equal(len(result), 1) # Test blender makes new blend node correctly. blended_node = result[0] assert_true( str(blended_node.name) == "car-man" or str(blended_node.name) == "man-car" ) def test_config_inheritance(self): try: __import__("blending.util.blending_config") except ImportError: import unittest raise unittest.SkipTest( "ImportError exception: " + "Can't load Blend Config. " + "make sure the required dependencies are installed." ) else: from blending.util.blending_config import BlendConfig self.a.add_link( types.InheritanceLink, [ self.a.add_node(types.ConceptNode, "my-config"), self.a.add_node(types.ConceptNode, "default-config") ] ) self.a.add_link( types.ExecutionLink, [ self.a.add_node(types.SchemaNode, "BLEND:atoms-chooser"), self.a.add_node(types.ConceptNode, "my-config"), self.a.add_node(types.ConceptNode, "ChooseAll") ] ) # Test config loads correctly. assert_equal( "ChooseNull", BlendConfig().get_str( self.a, "atoms-chooser", "default-config" ) ) # Test override config loads correctly. assert_equal( "ChooseAll", BlendConfig().get_str( self.a, "atoms-chooser", "my-config" ) ) # Test config loads parent's config correctly # if there not exists config. assert_equal( "DecideNull", BlendConfig().get_str( self.a, "blending-decider", "my-config" ) ) def test_config_update(self): try: __import__("blending.util.blending_config") except ImportError: import unittest raise unittest.SkipTest( "ImportError exception: " + "Can't load Blend Config. " + "make sure the required dependencies are installed." ) else: from blending.util.blending_config import BlendConfig # Test config loads correctly. assert_equal( "ChooseNull", BlendConfig().get_str( self.a, "atoms-chooser", "default-config" ) ) BlendConfig().update( self.a, "atoms-chooser", "ChooseAll", "default-config" ) # Test config updates correctly. assert_equal( "ChooseAll", BlendConfig().get_str( self.a, "atoms-chooser", "default-config" ) )
str(focus_atoms) + "\n" # Make custom config. InheritanceLink(ConceptNode("my-config"), ConceptNode("BLEND")) ExecutionLink(SchemaNode("BLEND:blending-decider"), ConceptNode("my-config"), ConceptNode("DecideBestSTI")) ExecutionLink(SchemaNode("BLEND:link-connector"), ConceptNode("my-config"), ConceptNode("ConnectConflictAllViable")) ExecutionLink(SchemaNode("BLEND:connect-check-type"), ConceptNode("my-config"), ConceptNode("SimilarityLink")) ExecutionLink(SchemaNode("BLEND:connect-strength-diff-limit"), ConceptNode("my-config"), ConceptNode("0.3")) ExecutionLink(SchemaNode("BLEND:connect-confidence-above-limit"), ConceptNode("my-config"), ConceptNode("0.7")) # Start Conceptual Blending. result = ConceptualBlending(a).run(focus_atoms, ConceptNode("my-config")) print "Newly blended nodes:" print str(result) + "\n" print "Detail information of selected conflict links:" for node in result: print "-----" print node for sim_link in node.xincoming_by_type(types.SimilarityLink): for out_node in sim_link.out: if out_node.name == "vehicle" or out_node.name == 'person': print str(out_node.name) + "=> " + \ str(sim_link.type_name) + " " + \ str(sim_link.tv)
def setUp(self): """This method is run once before _each_ test method is executed""" self.blender = ConceptualBlending(self.a) """ Make test nodes. """ # Nodes will be blended: self.sample_nodes["car"] = self.a.add_node(types.ConceptNode, "car") self.sample_nodes["man"] = self.a.add_node(types.ConceptNode, "man") # A. Car is metal. (Not duplicated) self.sample_nodes["metal"] = self.a.add_node(types.ConceptNode, "metal") # B. Car moves, man moves. (Duplicated, not conflicted) self.sample_nodes["move"] = self.a.add_node(types.ConceptNode, "move") # C.1. Car is vehicle, man is not vehicle. (Duplicated and conflicted) # C.2. Car is not person, man is person. (Duplicated and conflicted) self.sample_nodes["vehicle"] = self.a.add_node(types.ConceptNode, "vehicle") self.sample_nodes["person"] = self.a.add_node(types.ConceptNode, "person") """ Give some stimulates. """ self.a.set_av(self.sample_nodes["car"].h, 19) self.a.set_av(self.sample_nodes["man"].h, 18) self.a.set_av(self.sample_nodes["metal"].h, 2) self.a.set_av(self.sample_nodes["move"].h, 1) self.a.set_av(self.sample_nodes["vehicle"].h, 13) self.a.set_av(self.sample_nodes["person"].h, 12) """ Make test links. """ # A. Not duplicated link. l1 = self.a.add_link( types.MemberLink, [self.sample_nodes["car"], self.sample_nodes["metal"]]) self.a.set_tv(l1.h, TruthValue(0.6, 0.8)) # B. Duplicated, not conflicted link. l2 = self.a.add_link( types.SimilarityLink, [self.sample_nodes["car"], self.sample_nodes["move"]]) l3 = self.a.add_link( types.SimilarityLink, [self.sample_nodes["man"], self.sample_nodes["move"]]) self.a.set_tv(l2.h, TruthValue(0.9, 0.8)) self.a.set_tv(l3.h, TruthValue(0.7, 0.9)) # C.1 Duplicated, conflicted link. l4 = self.a.add_link( types.SimilarityLink, [self.sample_nodes["car"], self.sample_nodes["vehicle"]]) l5 = self.a.add_link( types.SimilarityLink, [self.sample_nodes["man"], self.sample_nodes["vehicle"]]) self.a.set_tv(l4.h, TruthValue(0.9, 0.8)) self.a.set_tv(l5.h, TruthValue(0.1, 0.9)) # C.2 Duplicated, conflicted link. l6 = self.a.add_link( types.SimilarityLink, [self.sample_nodes["car"], self.sample_nodes["person"]]) l7 = self.a.add_link( types.SimilarityLink, [self.sample_nodes["man"], self.sample_nodes["person"]]) self.a.set_tv(l6.h, TruthValue(0.1, 0.8)) self.a.set_tv(l7.h, TruthValue(0.8, 0.9)) """ Make default configs. """ self.a.add_link(types.InheritanceLink, [ self.a.add_node(types.ConceptNode, "default-config"), self.a.add_node(types.ConceptNode, "BLEND") ]) self.a.add_link(types.ExecutionLink, [ self.a.add_node(types.SchemaNode, "BLEND:atoms-chooser"), self.a.add_node(types.ConceptNode, "default-config"), self.a.add_node(types.ConceptNode, "ChooseNull") ]) self.a.add_link(types.ExecutionLink, [ self.a.add_node(types.SchemaNode, "BLEND:blending-decider"), self.a.add_node(types.ConceptNode, "default-config"), self.a.add_node(types.ConceptNode, "DecideNull") ]) self.a.add_link(types.ExecutionLink, [ self.a.add_node(types.SchemaNode, "BLEND:new-blend-atom-maker"), self.a.add_node(types.ConceptNode, "default-config"), self.a.add_node(types.ConceptNode, "MakeSimple") ]) self.a.add_link(types.ExecutionLink, [ self.a.add_node(types.SchemaNode, "BLEND:link-connector"), self.a.add_node(types.ConceptNode, "default-config"), self.a.add_node(types.ConceptNode, "ConnectSimple") ])
def setUp(self): """This method is run once before _each_ test method is executed""" self.blender = ConceptualBlending(self.a) """ Make test nodes. """ # Nodes will be blended: self.sample_nodes["car"] = self.a.add_node(types.ConceptNode, "car") self.sample_nodes["man"] = self.a.add_node(types.ConceptNode, "man") # A. Car is metal. (Not duplicated) self.sample_nodes["metal"] = self.a.add_node(types.ConceptNode, "metal") # B. Car moves, man moves. (Duplicated, not conflicted) self.sample_nodes["move"] = self.a.add_node(types.ConceptNode, "move") # C.1. Car is vehicle, man is not vehicle. (Duplicated and conflicted) # C.2. Car is not person, man is person. (Duplicated and conflicted) self.sample_nodes["vehicle"] = self.a.add_node(types.ConceptNode, "vehicle") self.sample_nodes["person"] = self.a.add_node(types.ConceptNode, "person") # D. Make inherit relation to test interaction information algorithm. self.sample_nodes["bumblebee"] = self.a.add_node( types.ConceptNode, "bumblebee") self.sample_nodes["suv"] = self.a.add_node(types.ConceptNode, "suv") self.sample_nodes["rickshaw"] = self.a.add_node( types.ConceptNode, "rickshaw") self.sample_nodes["programmer"] = self.a.add_node( types.ConceptNode, "programmer") """ Give some stimulates. """ self.a.set_av(self.sample_nodes["car"].h, 19) self.a.set_av(self.sample_nodes["man"].h, 18) self.a.set_av(self.sample_nodes["metal"].h, 2) self.a.set_av(self.sample_nodes["move"].h, 1) self.a.set_av(self.sample_nodes["vehicle"].h, 13) self.a.set_av(self.sample_nodes["person"].h, 12) """ Make test links. """ # A. Not duplicated link. l1 = self.a.add_link( types.MemberLink, [self.sample_nodes["car"], self.sample_nodes["metal"]]) self.a.set_tv(l1.h, TruthValue(0.6, 0.8)) # B. Duplicated, not conflicted link. l2 = self.a.add_link( types.SimilarityLink, [self.sample_nodes["car"], self.sample_nodes["move"]]) l3 = self.a.add_link( types.SimilarityLink, [self.sample_nodes["man"], self.sample_nodes["move"]]) self.a.set_tv(l2.h, TruthValue(0.9, 0.8)) self.a.set_tv(l3.h, TruthValue(0.7, 0.9)) # C.1 Duplicated, conflicted link. l4 = self.a.add_link( types.SimilarityLink, [self.sample_nodes["car"], self.sample_nodes["vehicle"]]) l5 = self.a.add_link( types.SimilarityLink, [self.sample_nodes["man"], self.sample_nodes["vehicle"]]) self.a.set_tv(l4.h, TruthValue(0.9, 0.8)) self.a.set_tv(l5.h, TruthValue(0.1, 0.9)) # C.2 Duplicated, conflicted link. l6 = self.a.add_link( types.SimilarityLink, [self.sample_nodes["car"], self.sample_nodes["person"]]) l7 = self.a.add_link( types.SimilarityLink, [self.sample_nodes["man"], self.sample_nodes["person"]]) self.a.set_tv(l6.h, TruthValue(0.1, 0.8)) self.a.set_tv(l7.h, TruthValue(0.8, 0.9)) # D. Make inherit relation to test interaction information algorithm. l8 = self.a.add_link( types.InheritanceLink, [self.sample_nodes["bumblebee"], self.sample_nodes["car"]]) l9 = self.a.add_link( types.InheritanceLink, [self.sample_nodes["suv"], self.sample_nodes["car"]]) l10 = self.a.add_link( types.InheritanceLink, [self.sample_nodes["rickshaw"], self.sample_nodes["man"]]) l11 = self.a.add_link( types.InheritanceLink, [self.sample_nodes["programmer"], self.sample_nodes["man"]]) # E Give properties to specific entity. l12 = self.a.add_link( types.SimilarityLink, [self.sample_nodes["bumblebee"], self.sample_nodes["vehicle"]]) l13 = self.a.add_link( types.SimilarityLink, [self.sample_nodes["bumblebee"], self.sample_nodes["person"]]) self.a.set_tv(l12.h, TruthValue(0.8, 0.9)) self.a.set_tv(l13.h, TruthValue(0.6, 0.9)) l14 = self.a.add_link( types.SimilarityLink, [self.sample_nodes["suv"], self.sample_nodes["vehicle"]]) l15 = self.a.add_link( types.SimilarityLink, [self.sample_nodes["suv"], self.sample_nodes["person"]]) self.a.set_tv(l14.h, TruthValue(0.9, 0.9)) self.a.set_tv(l15.h, TruthValue(0.2, 0.9)) l16 = self.a.add_link( types.SimilarityLink, [self.sample_nodes["rickshaw"], self.sample_nodes["vehicle"]]) l17 = self.a.add_link( types.SimilarityLink, [self.sample_nodes["rickshaw"], self.sample_nodes["person"]]) self.a.set_tv(l16.h, TruthValue(0.4, 0.9)) self.a.set_tv(l17.h, TruthValue(0.9, 0.9)) l18 = self.a.add_link( types.SimilarityLink, [self.sample_nodes["programmer"], self.sample_nodes["vehicle"]]) l19 = self.a.add_link( types.SimilarityLink, [self.sample_nodes["programmer"], self.sample_nodes["person"]]) self.a.set_tv(l18.h, TruthValue(0.1, 0.9)) self.a.set_tv(l19.h, TruthValue(0.8, 0.9)) """ Make default configs. """ self.a.add_link(types.InheritanceLink, [ self.a.add_node(types.ConceptNode, "default-config"), self.a.add_node(types.ConceptNode, "BLEND") ]) self.a.add_link(types.ExecutionLink, [ self.a.add_node(types.SchemaNode, "BLEND:atoms-chooser"), self.a.add_node(types.ConceptNode, "default-config"), self.a.add_node(types.ConceptNode, "ChooseNull") ]) self.a.add_link(types.ExecutionLink, [ self.a.add_node(types.SchemaNode, "BLEND:blending-decider"), self.a.add_node(types.ConceptNode, "default-config"), self.a.add_node(types.ConceptNode, "DecideNull") ]) self.a.add_link(types.ExecutionLink, [ self.a.add_node(types.SchemaNode, "BLEND:new-blend-atom-maker"), self.a.add_node(types.ConceptNode, "default-config"), self.a.add_node(types.ConceptNode, "MakeSimple") ]) self.a.add_link(types.ExecutionLink, [ self.a.add_node(types.SchemaNode, "BLEND:link-connector"), self.a.add_node(types.ConceptNode, "default-config"), self.a.add_node(types.ConceptNode, "ConnectSimple") ])
InheritanceLink(programmer, fingered, high_tv) InheritanceLink(programmer, nocturnal, high_tv) EvaluationLink(live_in, ancients, cave, high_tv) InheritanceLink(ancients, two_legged, high_tv) InheritanceLink(ancients, fingered, high_tv) InheritanceLink(vegetarian, two_legged, high_tv) InheritanceLink(vegetarian, fingered, high_tv) # 5. Make custom config. InheritanceLink(ConceptNode("my-config"), ConceptNode("BLEND")) ExecutionLink(SchemaNode("BLEND:blending-decider"), ConceptNode("my-config"), ConceptNode("DecideNull")) ExecutionLink(SchemaNode("BLEND:link-connector"), ConceptNode("my-config"), ConceptNode("ConnectConflictInteractionInformation")) ExecutionLink(SchemaNode("BLEND:connect-check-type"), ConceptNode("my-config"), ConceptNode("Link")) # Start Conceptual Blending. result = ConceptualBlending(a).run([ a.add_node(types.ConceptNode, "bat"), a.add_node(types.ConceptNode, "man") ], ConceptNode("my-config")) print "Newly blended node:" print str(result[0]) + "\n" print "Links in new blended node:" print result[0].incoming
- Blend with default config. Output dump: --------Start first example-------- Source data: (ConceptNode "car") ; [2] (ConceptNode "man") ; [3] Newly blended node: [(ConceptNode "car-man" (av 0 0 0) (stv 1.000000 0.000000)) ; [307] ] """ print "--------Start first example--------" a = AtomSpace() initialize_opencog(a) # Make example concept network. car = ConceptNode("car") man = ConceptNode("man") a.set_av(car.h, 17) a.set_av(man.h, 13) print "Source data:\n" + \ str(car) + \ str(man) # Start Conceptual Blending. result = ConceptualBlending(a).run() print "Newly blended node: \n" + \ str(result)
class TestBasicFunctions(TestConceptualBlendingBase): __test__ = True def test_simple(self): # Basic test uses very simple AtomSpace. del self.blender del self.a self.a = AtomSpace() self.blender = ConceptualBlending(self.a) car = self.a.add_node(types.ConceptNode, "car") man = self.a.add_node(types.ConceptNode, "man") self.a.set_av(car.h, 1) self.a.set_av(man.h, 1) # Test blender makes only one new blend node. result = self.blender.run() assert_equal(len(result), 1) # Test blender makes new blend node correctly. blended_node = result[0] assert_true( str(blended_node.name) == "car-man" or str(blended_node.name) == "man-car") def test_config_inheritance(self): try: __import__("blending.util.blend_config") except ImportError: import unittest raise unittest.SkipTest( "ImportError exception: " + "Can't load Blend Config. " + "make sure the required dependencies are installed.") else: from blending.util.blend_config import BlendConfig self.a.add_link(types.InheritanceLink, [ self.a.add_node(types.ConceptNode, "my-config"), self.a.add_node(types.ConceptNode, "default-config") ]) self.a.add_link(types.ListLink, [ self.a.add_node(types.SchemaNode, "BLEND:atoms-chooser"), self.a.add_node(types.ConceptNode, "my-config"), self.a.add_node(types.ConceptNode, "ChooseAll") ]) # Test config loads correctly. assert_equal( "ChooseNull", BlendConfig().get_str(self.a, "atoms-chooser", "default-config")) # Test override config loads correctly. assert_equal( "ChooseAll", BlendConfig().get_str(self.a, "atoms-chooser", "my-config")) # Test config loads parent's config correctly # if there not exists config. assert_equal( "DecideNull", BlendConfig().get_str(self.a, "blending-decider", "my-config")) def test_config_update(self): try: __import__("blending.util.blend_config") except ImportError: import unittest raise unittest.SkipTest( "ImportError exception: " + "Can't load Blend Config. " + "make sure the required dependencies are installed.") else: from blending.util.blend_config import BlendConfig # Test config loads correctly. assert_equal( "ChooseNull", BlendConfig().get_str(self.a, "atoms-chooser", "default-config")) BlendConfig().update(self.a, "atoms-chooser", "ChooseAll", "default-config") # Test config updates correctly. assert_equal( "ChooseAll", BlendConfig().get_str(self.a, "atoms-chooser", "default-config"))