Example #1
0
class SimpleAgent():

    def __init__(self):
        self.a = AtomSpace()
        self.nodes = {}
        
        # Initialize Scheme
        scheme_preload = [  
                    "opencog/atomspace/core_types.scm",
                    "opencog/scm/utilities.scm"          ]
        scheme.__init__(self.a)
        for scheme_file in scheme_preload:
            load_scm(self.a, scheme_file)
        initialize_opencog(self.a)
        
        #add 3 nodes with integer values
        self.nodes[0] = self.a.add(types.ConceptNode, "0")
        self.nodes[1] = self.a.add(types.ConceptNode, "1")
        self.nodes[2] = self.a.add(types.ConceptNode, "2")

    def performAction(self):
        #randomly select a link from those available and add the nodes
        fnode = self.a.add_node(types.GroundedSchemaNode, "py: sendValue")
        current_link = self.a.add_link(types.ExecutionOutputLink, [
            fnode,
            self.a.add_link(types.ListLink, [self.nodes[randint(0,2)]])])
        
        scheme_eval(self.a, '(cog-execute! (cog-atom %d))'%(current_link.handle_uuid()))
    
    def remove(self):
        # make sure this is called by the time script exits
        finalize_opencog()
        del self.a
Example #2
0
class TreeTest(TestCase):
    def setUp(self):
        self.a = AtomSpace()
        self.x1 = self.a.add(t.ConceptNode, "test1")
        self.x2 = self.a.add(t.ConceptNode, "test2")
        self.l1 = self.a.add(t.Link, out=[self.x1, self.x2])
        self.l2 = self.a.add(t.Link, out=[self.l1, self.x2])
        print 'l1', self.l1

    def tearDown(self):
        del self.a

    def test_atom_tree(self):
        node_tree = tree.tree_from_atom(self.x1)
        self.assertEquals(node_tree.is_leaf(), True)

    def test_link_tree(self):
        l_tree = tree.tree_from_atom(self.l1)

        self.assertEquals(l_tree.is_leaf(), False)

        # should be something like ('Link', 17, 18)
        x = l_tree.to_tuple()
        self.assertEquals(len(x), 3)

    def test_link_to_link_tree(self):
        l_tree = tree.tree_from_atom(self.l2)

        self.assertEquals(l_tree.is_leaf(), False)

        # should be something like ('Link', ('Link', 13, 14), 14)
        x = l_tree.to_tuple()
        self.assertEquals(len(x), 3)
        self.assertEquals(len(x[1]), 3)
        self.assertEquals(x[1][2], x[2])

    def test_compare(self):
        l_tree1 = tree.tree_from_atom(self.l1)
        l_tree = tree.tree_from_atom(self.l2)

        self.assertEquals(l_tree1 > l_tree, False)
        self.assertEquals(l_tree1 < l_tree, True)

    def test_coerce_tree(self):
        node_tree = tree.tree_from_atom(self.x1)
        print str(node_tree)
        self.assertEquals(tree.coerce_tree(node_tree), node_tree)
        self.assertEquals(tree.coerce_tree(self.x1), node_tree)
        self.assertEquals(tree.coerce_tree("tree").op, "tree")

    def test_is_variable(self):
        var_tree = tree.Var(1)
        self.assertEquals(var_tree.is_variable(), True)
        node_tree = tree.T(self.x1)
        self.assertEquals(node_tree.is_variable(), False)

    def test_unify(self):
        T = tree.T
        V = tree.Var
        x1_template = T(self.x1)
        x1_tree = tree.tree_from_atom(self.x1)
        s = tree.unify(x1_template, x1_tree, {})
        self.assertEquals(s, {})

        x2_template = T(self.x2)
        s = tree.unify(x2_template, x1_tree, {})
        self.assertEquals(s, None)

        all_template = V(1)
        l2_tree = tree.tree_from_atom(self.l2)
        s = tree.unify(all_template, l2_tree, {})
        s_correct = {all_template: l2_tree}
        self.assertEquals(s, s_correct)

        t1 = V(1)
        t2 = V(2)
        s = tree.unify(t1, t2, {})
        self.assertEquals(s, {V(1): V(2)})

        t1 = V(1)
        t2 = V(2)
        s_correct = {V(1): V(2)}
        s = tree.unify(t1, t2, s_correct)
        self.assertEquals(s, s_correct)

        t1 = T('blah', V(1))
        t2 = T('blah', V(2))
        s = tree.unify(t1, t2, {})
        self.assertEquals(s, {V(1): V(2)})

        t1 = T('blah', V(1), V(2))
        t2 = T('blah', V(3), V(4))
        s = tree.unify(t1, t2, {})
        self.assertEquals(s, {V(1): V(3), V(2): V(4)})

        t1 = T('blah', V(1), V(1))
        t2 = T('blah', V(2), V(2))
        s = tree.unify(t1, t2, {})
        self.assertEquals(s, {V(1): V(2)})

    def test_find_conj(self):
        conj = (tree.tree_from_atom(self.l1), tree.tree_from_atom(self.l2))

        matches = tree.find_conj(conj, self.a.get_atoms_by_type(t.Atom))

        self.assertEquals(len(matches), 1)

        if len(matches) == 1:
            first = matches[0]

            self.assertEquals(first.subst, {})
            self.assertEquals(first.atoms, [self.l1, self.l2])

    # Test whether find_conj can be used to find atoms for Psi Rules. That is not actually done in the code, but could be useful as an alternative approach.
    # (This may be obsolete; an even better approach would be to use find_matching_conjunctions)
    def test_find_conj2(self):
        a = self.a

        conj = (a.add(
            t.AtTimeLink,
            out=[
                a.add(t.TimeNode, '11210347010'),
                a.add(t.EvaluationLink,
                      out=[
                          a.add(t.PredicateNode, 'increased'),
                          a.add(t.ListLink,
                                out=[
                                    a.add(t.EvaluationLink,
                                          out=[
                                              a.add(t.PredicateNode,
                                                    'EnergyDemandGoal'),
                                              a.add(t.ListLink, out=[])
                                          ])
                                ])
                      ])
            ]),
                a.add(
                    t.AtTimeLink,
                    out=[
                        a.add(t.TimeNode, '11210347000'),
                        a.add(
                            t.EvaluationLink,
                            out=[
                                a.add(t.PredicateNode, 'actionDone'),
                                a.add(
                                    t.ListLink,
                                    out=[
                                        a.add(
                                            t.ExecutionLink,
                                            out=[
                                                a.add(t.GroundedSchemaNode,
                                                      'eat'),
                                                a.add(t.ListLink,
                                                      out=[
                                                          a.add(
                                                              t.AccessoryNode,
                                                              'id_-54646')
                                                      ])
                                            ])
                                    ])
                            ])
                    ]),
                a.add(t.SequentialAndLink,
                      out=[
                          a.add(t.TimeNode, '11210347000'),
                          a.add(t.TimeNode, '11210347010')
                      ]))
        conj = tuple(map(tree.tree_from_atom, conj))

        res = tree.find_conj(conj, a.get_atoms_by_type(t.Atom))

    def test_find_conj3(self):
        a = self.a

        t1 = tree.atom_from_tree(tree.new_var(), a)
        t2 = tree.atom_from_tree(tree.new_var(), a)
        action = tree.atom_from_tree(tree.new_var(), a)
        goal = tree.atom_from_tree(tree.new_var(), a)

        conj = (a.add(
            t.AtTimeLink,
            out=[
                t1,
                a.add(t.EvaluationLink,
                      out=[a.add(t.PredicateNode, 'actionDone'), action])
            ]),
                a.add(t.AtTimeLink,
                      out=[
                          t2,
                          a.add(t.EvaluationLink,
                                out=[
                                    a.add(t.PredicateNode, 'increased'),
                                    a.add(t.ListLink,
                                          out=[
                                              a.add(t.EvaluationLink,
                                                    out=[
                                                        goal,
                                                        a.add(t.ListLink,
                                                              out=[])
                                                    ])
                                          ])
                                ])
                      ]),
                a.add(t.SequentialAndLink,
                      out=[
                          a.add(t.TimeNode, '11210347000'),
                          a.add(t.TimeNode, '11210347010')
                      ]))
        conj = tuple(map(tree.tree_from_atom, conj))

        res = tree.find_conj(conj, a.get_atoms_by_type(t.Atom))

    def test_apply_rule(self):
        atoms = [self.l1, self.l2]

        # This is supposed to look up all Atoms of (exactly) type 'Link', and return their first outgoing atom
        link_template = tree.T('Link', 1, 2)
        first = tree.Var(1)
        result_trees = tree.apply_rule(link_template, first, atoms)
        result_correct = map(tree.tree_from_atom, [self.x1, self.l1])
        self.assertEquals(result_trees, result_correct)

    def test_standardize_apart(self):
        var1, var2 = tree.Var(1), tree.Var(2)
        tr1 = tree.T('ListLink', var1, var2)

        tr2 = tree.standardize_apart(tr1)

        print tr1
        print tr2

        self.assertNotEquals(tree.unify(tr1, tr2, {}), None)

        var1_new, var2_new = tr2.args

        self.assertNotEquals(var1_new, var2_new)
        assert var1_new not in [var1, var2]
        assert var2_new not in [var1, var2]

    def test_canonical_trees(self):
        conj = (tree.T('ListLink', 1, 2), tree.T('ListLink', 2, 3))

        canon = tree.canonical_trees(conj)
        print canon
Example #3
0
class TreeTest(TestCase):

    def setUp(self):
        self.a = AtomSpace()
        self.x1 = self.a.add(t.ConceptNode,"test1")
        self.x2 = self.a.add(t.ConceptNode,"test2")
        self.l1 = self.a.add(t.Link, out=[self.x1,self.x2])
        self.l2 = self.a.add(t.Link, out=[self.l1,self.x2])
        print 'l1', self.l1

    def tearDown(self):
        del self.a

    def test_atom_tree(self):
        node_tree = tree.tree_from_atom(self.x1)
        self.assertEquals(node_tree.is_leaf(), True)

    def test_link_tree(self):
        l_tree = tree.tree_from_atom(self.l1)

        self.assertEquals(l_tree.is_leaf(), False)

        # should be something like ('Link', 17, 18)
        x = l_tree.to_tuple()
        self.assertEquals(len(x), 3 )

    def test_link_to_link_tree(self):
        l_tree = tree.tree_from_atom(self.l2)
        
        self.assertEquals(l_tree.is_leaf(), False)

        # should be something like ('Link', ('Link', 13, 14), 14)
        x = l_tree.to_tuple()
        self.assertEquals(len(x), 3)
        self.assertEquals(len(x[1]), 3)
        self.assertEquals(x[1][2], x[2])

    def test_compare(self):
        l_tree1 = tree.tree_from_atom(self.l1)
        l_tree = tree.tree_from_atom(self.l2)

        self.assertEquals(l_tree1 > l_tree, False)
        self.assertEquals(l_tree1 < l_tree, True)

    def test_coerce_tree(self):
        node_tree = tree.tree_from_atom(self.x1)
        print str(node_tree)
        self.assertEquals(tree.coerce_tree(node_tree),node_tree)
        self.assertEquals(tree.coerce_tree(self.x1),node_tree)
        self.assertEquals(tree.coerce_tree("tree").op,"tree")

    def test_is_variable(self):
        var_tree = tree.Var(1)
        self.assertEquals(var_tree.is_variable(),True)
        node_tree = tree.T(self.x1)
        self.assertEquals(node_tree.is_variable(),False)

    def test_unify(self):
        T = tree.T
        V = tree.Var
        x1_template = T(self.x1)
        x1_tree = tree.tree_from_atom(self.x1)
        s = tree.unify(x1_template, x1_tree, {})
        self.assertEquals(s, {})

        x2_template = T(self.x2)
        s = tree.unify(x2_template, x1_tree, {})
        self.assertEquals(s, None)
        
        all_template = V(1)
        l2_tree = tree.tree_from_atom(self.l2)
        s = tree.unify(all_template, l2_tree, {})
        s_correct = {all_template : l2_tree}
        self.assertEquals(s, s_correct)

        t1 = V(1)
        t2 = V(2)
        s = tree.unify(t1, t2, {})
        self.assertEquals(s, {V(1):V(2)})
        
        t1 = V(1)
        t2 = V(2)
        s_correct = {V(1):V(2)}
        s = tree.unify(t1, t2, s_correct)
        self.assertEquals(s, s_correct)
        
        t1 = T('blah',V(1))
        t2 = T('blah',V(2))
        s = tree.unify(t1, t2, {})
        self.assertEquals(s, {V(1):V(2)})
        
        t1 = T('blah',V(1), V(2))
        t2 = T('blah',V(3), V(4))
        s = tree.unify(t1, t2, {})
        self.assertEquals(s, {V(1):V(3), V(2):V(4)})
        
        t1 = T('blah',V(1), V(1))
        t2 = T('blah',V(2), V(2))
        s = tree.unify(t1, t2, {})
        self.assertEquals(s, {V(1):V(2)})

    def  test_find_conj(self):
        conj = (tree.tree_from_atom(self.l1), tree.tree_from_atom(self.l2))
        
        matches = tree.find_conj(conj, self.a.get_atoms_by_type(t.Atom))
        
        self.assertEquals(len(matches), 1)
        
        if len(matches) == 1:
            first = matches[0]
            
            self.assertEquals(first.subst, {})
            self.assertEquals(first.atoms, [self.l1, self.l2])
    
    # Test whether find_conj can be used to find atoms for Psi Rules. That is not actually done in the code, but could be useful as an alternative approach.
    # (This may be obsolete; an even better approach would be to use find_matching_conjunctions)
    def  test_find_conj2(self):
        a = self.a
        
        conj = (
            a.add(t.AtTimeLink, out=[a.add(t.TimeNode, '11210347010'), a.add(t.EvaluationLink, out=[a.add(t.PredicateNode, 'increased'), a.add(t.ListLink, out=[a.add(t.EvaluationLink, out=[a.add(t.PredicateNode, 'EnergyDemandGoal'), a.add(t.ListLink, out=[])])])])]),
            a.add(t.AtTimeLink, out=[a.add(t.TimeNode, '11210347000'), a.add(t.EvaluationLink, out=[a.add(t.PredicateNode, 'actionDone'), a.add(t.ListLink, out=[a.add(t.ExecutionLink, out=[a.add(t.GroundedSchemaNode, 'eat'), a.add(t.ListLink, out=[a.add(t.AccessoryNode, 'id_-54646')])])])])]),
            a.add(t.SequentialAndLink, out=[a.add(t.TimeNode, '11210347000'), a.add(t.TimeNode, '11210347010')])
        )
        conj = tuple(map(tree.tree_from_atom, conj))

        res = tree.find_conj(conj,a.get_atoms_by_type(t.Atom))

    def  test_find_conj3(self):
        a = self.a
        
        t1 = tree.atom_from_tree(tree.new_var(), a)
        t2 = tree.atom_from_tree(tree.new_var(), a)
        action = tree.atom_from_tree(tree.new_var(), a)
        goal = tree.atom_from_tree(tree.new_var(), a)
        
        conj = (
            a.add(t.AtTimeLink, out=[t1, a.add(t.EvaluationLink, out=[a.add(t.PredicateNode, 'actionDone'), action])]),
            a.add(t.AtTimeLink, out=[t2, a.add(t.EvaluationLink, out=[a.add(t.PredicateNode, 'increased'), a.add(t.ListLink, out=[a.add(t.EvaluationLink, out=[goal, a.add(t.ListLink, out=[])])])])]),
            a.add(t.SequentialAndLink, out=[a.add(t.TimeNode, '11210347000'), a.add(t.TimeNode, '11210347010')])
        )
        conj = tuple(map(tree.tree_from_atom, conj))

        res = tree.find_conj(conj,a.get_atoms_by_type(t.Atom))

    def test_apply_rule(self):
        atoms = [self.l1, self.l2]
        
        # This is supposed to look up all Atoms of (exactly) type 'Link', and return their first outgoing atom
        link_template = tree.T('Link', 1, 2)
        first = tree.Var(1)
        result_trees = tree.apply_rule(link_template, first, atoms)
        result_correct = map(tree.tree_from_atom, [self.x1, self.l1])
        self.assertEquals(result_trees, result_correct)

    def test_standardize_apart(self):
        var1, var2 = tree.Var(1), tree.Var(2)
        tr1 = tree.T('ListLink', var1, var2)
        
        tr2 = tree.standardize_apart(tr1)
        
        print tr1
        print tr2
        
        self.assertNotEquals(tree.unify(tr1, tr2, {}),  None)
        
        var1_new, var2_new = tr2.args
        
        self.assertNotEquals(var1_new, var2_new)        
        assert var1_new not in [var1, var2]
        assert var2_new not in [var1, var2]

    def test_canonical_trees(self):
        conj = (
            tree.T('ListLink', 1, 2), 
            tree.T('ListLink', 2, 3)
        )
        
        canon = tree.canonical_trees(conj)
        print canon
Example #4
0
#
"""
Example of how to obtain atom type names and atom type IDs in Python
"""

__author__ = 'Cosmo Harrigan'

from opencog.atomspace import AtomSpace, TruthValue, types, get_type_name
from opencog.scheme_wrapper import load_scm, scheme_eval, scheme_eval_h, __init__

atomspace = AtomSpace()
__init__(atomspace)

data = ["opencog/atomspace/core_types.scm", "opencog/scm/utilities.scm"]

for item in data:
    load_scm(atomspace, item)

atom = atomspace.add(types.ConceptNode, "Frog #1")

# To get one type name
print get_type_name(3) + '\n'

# To get one atom's type name
print get_type_name(atom.type) + '\n'

# Get a list of all possible type names and numbers
for key, value in sorted(types.__dict__.iteritems()):
    if '__' not in key:
        print key, value
Example #5
0
#! /usr/bin/env python
#
# atom_type_names.py
#
"""
Example of how to obtain atom type names and atom type IDs in Python
"""

__author__ = 'Cosmo Harrigan'

from opencog.atomspace import AtomSpace, types, get_type_name

atomspace = AtomSpace()

atom = atomspace.add(types.ConceptNode, "Frog #1")

# To get one type name
print get_type_name(3) + '\n'

# To get one atom's type name
print get_type_name(atom.type) + '\n'

# Get a list of all possible type names and numbers
for key, value in sorted(types.__dict__.iteritems()):
    if '__' not in key:
        print key, value