예제 #1
0
    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")
예제 #2
0
    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"
        )
예제 #3
0
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)
예제 #5
0
    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")
        ])
예제 #6
0
    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
예제 #8
0
- 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)
예제 #9
0
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"))