def test_create_child_atomspace(self): test = ConceptNode("test") b = create_child_atomspace(self.space) test2 = b.add_node(types.ConceptNode, 'test2') self.assertTrue(test in b.get_atoms_by_type(types.ConceptNode)) self.assertTrue(test2 in b.get_atoms_by_type(types.ConceptNode)) self.assertTrue(test2 not in self.space.get_atoms_by_type(types.ConceptNode))
def intersect(self, query): """ Extracts relevant patterns to the query and intersects their indices returns set of atoms ids """ # put query in tmp atomspace, check if there are relevant patterns tmp = create_child_atomspace(self.pattern_space) q = tmp.add_atom(rename(tmp, self.pattern_space, query)) # check query for exact match: exact_match = execute_atom(tmp, tmp.add_link(types.BindLink, [q, q])) for m in exact_match.out: return self._index[self.pattern_space.add_link( types.BindLink, [m, m])] # no exact match: search among all patterns # todo: search subgraphs res_set = None for pat, idx in self._index.items(): # pattern is relevant if it matches query match = execute_atom(tmp, pat) for m in match.out: if hash(m) == hash(q): if res_set is None: res_set = idx else: res_set = res_set.intersection(idx) return res_set
def execute_atom(self, atom, atomspace=None): if atomspace is None: atomspace = create_child_atomspace(self.atomspace) result = execute_atom(atomspace, atom) value = get_value(result) atomspace.clear() # todo: use ValueOfLink to get tensor value return value
def test_create_child_atomspace(self): test = ConceptNode("test") b = create_child_atomspace(self.space) test2 = b.add_node(types.ConceptNode, 'test2') self.assertTrue(test in b.get_atoms_by_type(types.ConceptNode)) self.assertTrue(test2 in b.get_atoms_by_type(types.ConceptNode)) self.assertTrue( test2 not in self.space.get_atoms_by_type(types.ConceptNode))
def execute_atom(self, atom, atomspace=None): if atomspace is None: atomspace = create_child_atomspace(self.atomspace) result = execute_atom(atomspace, atom) value = get_cached_value(result) self.clear_cache() atomspace.clear() return value
def tmp_atomspace(atomspace): parent_atomspace = atomspace atomspace = create_child_atomspace(parent_atomspace) initialize_opencog(atomspace) try: yield atomspace finally: atomspace.clear() finalize_opencog() initialize_opencog(parent_atomspace)
def test_add_atom_from_grounded_schema_node(self): test_as = create_child_atomspace(self.atomspace) execute_atom( test_as, ExecutionOutputLink(GroundedSchemaNode("py:add_new_link"), ListLink())) self.assertTrue( test_as.is_link_in_atomspace(types.InheritanceLink, [ test_as.add_node(types.ConceptNode, "cat"), test_as.add_node(types.ConceptNode, "animal") ]))
def add_data(self, data): idx, new = self._storage.add_atom(data) if not new: return assert data.is_link() # self.add_toplevel_pattern(data) self.add_semantic_pattern(data) tmp = create_child_atomspace(self.pattern_space) content = tmp.add_atom(data) self.update_index(tmp, content, idx)
def evaluate_atom(self, atom, atomspace=None): if atomspace is None: atomspace = create_child_atomspace(self.atomspace) result = evaluate_atom(atomspace, atom) # todo: use ValueOfLink to get tensor value return result
from opencog.type_constructors import * from opencog.utilities import initialize_opencog from opencog.atomspace import create_child_atomspace from opencog.bindlink import execute_atom # Initialize AtomSpace atomspace = AtomSpace() initialize_opencog(atomspace) ConceptNode("cat") ConceptNode("dog") for atom in atomspace: print('parent atom:', atom) child_atomspace = create_child_atomspace(atomspace) for atom in child_atomspace: print('child atom:', atom)
def create_child_atomspace(self): self.child_atomspace = create_child_atomspace(self.atomspace) initialize_opencog(self.child_atomspace) return self.child_atomspace