def node(request, test_nodenet): """ Fixture: A Pipe node with a genloop """ res, uid = micropsi.add_node(test_nodenet, 'Pipe', [10, 10, 10], name='N1') micropsi.add_link(test_nodenet, uid, 'gen', uid, 'gen') return uid
def test_nodespace_removal(fixed_nodenet): res, uid = micropsi.add_nodespace(fixed_nodenet, [100, 100], nodespace=None, name="testspace") res, n1_uid = micropsi.add_node(fixed_nodenet, 'Register', [100, 100], nodespace=uid, name="sub1") res, n2_uid = micropsi.add_node(fixed_nodenet, 'Register', [100, 200], nodespace=uid, name="sub2") micropsi.add_link(fixed_nodenet, n1_uid, 'gen', n2_uid, 'gen', weight=1, certainty=1) res, sub_uid = micropsi.add_nodespace(fixed_nodenet, [100, 100], nodespace=uid, name="subsubspace") micropsi.delete_nodespace(fixed_nodenet, uid) # assert that the nodespace is gone assert not micropsi.nodenets[fixed_nodenet].is_nodespace(uid) assert uid not in micropsi.nodenets[fixed_nodenet].data['nodespaces'] # assert that the nodes it contained are gone assert not micropsi.nodenets[fixed_nodenet].is_node(n1_uid) assert n1_uid not in micropsi.nodenets[fixed_nodenet].data['nodes'] assert not micropsi.nodenets[fixed_nodenet].is_node(n2_uid) assert n2_uid not in micropsi.nodenets[fixed_nodenet].data['nodes'] # assert that the links between the deleted nodes are gone linked_node_uids = [] for uid, link in micropsi.nodenets[fixed_nodenet].data['links'].items(): linked_node_uids.append(link['source_node_uid']) linked_node_uids.append(link['target_node_uid']) assert n1_uid not in linked_node_uids assert n2_uid not in linked_node_uids # assert that sub-nodespaces are gone as well assert not micropsi.nodenets[fixed_nodenet].is_nodespace(sub_uid) assert sub_uid not in micropsi.nodenets[fixed_nodenet].data['nodespaces']
def test_nodespace_removal(fixed_nodenet): res, uid = micropsi.add_nodespace(fixed_nodenet, [100, 100], nodespace=None, name="testspace") res, n1_uid = micropsi.add_node(fixed_nodenet, 'Register', [100, 100], nodespace=uid, name="sub1") res, n2_uid = micropsi.add_node(fixed_nodenet, 'Register', [100, 200], nodespace=uid, name="sub2") micropsi.add_link(fixed_nodenet, n1_uid, 'gen', n2_uid, 'gen', weight=1, certainty=1) res, sub_uid = micropsi.add_nodespace(fixed_nodenet, [100, 100], nodespace=uid, name="subsubspace") micropsi.delete_nodespace(fixed_nodenet, uid) # assert that the nodespace is gone assert not micropsi.nodenets[fixed_nodenet].is_nodespace(uid) assert uid not in micropsi.nodenets[fixed_nodenet].get_data()['nodespaces'] # assert that the nodes it contained are gone assert not micropsi.nodenets[fixed_nodenet].is_node(n1_uid) assert n1_uid not in micropsi.nodenets[fixed_nodenet].get_data()['nodes'] assert not micropsi.nodenets[fixed_nodenet].is_node(n2_uid) assert n2_uid not in micropsi.nodenets[fixed_nodenet].get_data()['nodes'] # assert that sub-nodespaces are gone as well assert not micropsi.nodenets[fixed_nodenet].is_nodespace(sub_uid) assert sub_uid not in micropsi.nodenets[fixed_nodenet].get_data( )['nodespaces']
def test_modulators_sensor_actor_connection(test_nodenet, test_world): nodenet = micropsi.get_nodenet(test_nodenet) micropsi.set_nodenet_properties(test_nodenet, worldadapter="Braitenberg", world_uid=test_world) res, s1_id = micropsi.add_node(test_nodenet, "Sensor", [10, 10], None, name="brightness_l", parameters={'datasource': 'brightness_l'}) res, s2_id = micropsi.add_node(test_nodenet, "Sensor", [20, 20], None, name="emo_activation", parameters={'datasource': 'emo_activation'}) res, a1_id = micropsi.add_node(test_nodenet, "Actor", [30, 30], None, name="engine_l", parameters={'datatarget': 'engine_l'}) res, a2_id = micropsi.add_node(test_nodenet, "Actor", [40, 40], None, name="base_importance_of_intention", parameters={'datatarget': 'base_importance_of_intention'}) res, r1_id = micropsi.add_node(test_nodenet, "Register", [10, 30], None, name="r1") res, r2_id = micropsi.add_node(test_nodenet, "Register", [10, 30], None, name="r2") s1 = nodenet.get_node(s1_id) s2 = nodenet.get_node(s2_id) r1 = nodenet.get_node(r1_id) r2 = nodenet.get_node(r2_id) s2.set_gate_parameter('gen', 'maximum', 999) micropsi.add_link(test_nodenet, r1_id, 'gen', a1_id, 'gen') micropsi.add_link(test_nodenet, r2_id, 'gen', a2_id, 'gen') r1.activation = 0.3 r2.activation = 0.7 emo_val = nodenet.get_modulator("emo_activation") # patch reset method, to check if datatarget was written def nothing(): pass nodenet.worldadapter_instance.reset_datatargets = nothing nodenet.step() assert round(nodenet.worldadapter_instance.datatargets['engine_l'], 3) == 0.3 assert round(s1.activation, 3) == round(nodenet.worldadapter_instance.get_datasource_value('brightness_l'), 3) assert round(s2.activation, 3) == round(emo_val, 3) assert round(nodenet.get_modulator('base_importance_of_intention'), 3) == 0.7 assert round(nodenet.worldadapter_instance.datatargets['engine_l'], 3) == 0.3 emo_val = nodenet.get_modulator("emo_activation") nodenet.step() assert round(s2.activation, 3) == round(emo_val, 3)
def test_ignore_links(test_nodenet): nodes = prepare_nodenet(test_nodenet) micropsi.add_link(test_nodenet, nodes['a'], "por", nodes['b'], "gen", 0.5, 1) nodespace = micropsi.get_nodes(test_nodenet, []) assert len(nodespace["nodes"]) == 4 assert 'links' not in nodespace assert len(nodespace["nodes"][nodes['a']]['links']['por']) == 1 nodespace = micropsi.get_nodes(test_nodenet, [], include_links=False) assert 'links' not in nodespace["nodes"][nodes['a']]
def test_nodenet(request): global nn_uid nodenets = micropsi.get_available_nodenets("Pytest User") or {} if nn_uid not in nodenets: success, nn_uid = micropsi.new_nodenet("Testnet", worldadapter="Default", owner="Pytest User", world_uid=world_uid, uid='Testnet') micropsi.add_node(nn_uid, 'Concept', [10, 10], uid='N1', name='N1') micropsi.add_link(nn_uid, 'N1', 'gen', 'N1', 'gen') micropsi.save_nodenet(nn_uid) def fin(): micropsi.revert_nodenet(nn_uid) request.addfinalizer(fin) return nn_uid
def test_delete_link(test_nodenet): nodes = prepare_nodenet(test_nodenet) success, link = micropsi.add_link(test_nodenet, nodes['a'], "por", nodes['b'], "gen", 0.5, 1) assert success micropsi.delete_link(test_nodenet, nodes['a'], "por", nodes['b'], "gen") nodespace = micropsi.get_nodenet_data(test_nodenet, None) assert len(nodespace["links"]) == 0
def test_nodespace_removal(fixed_nodenet): res, uid = micropsi.add_node(fixed_nodenet, 'Nodespace', [100,100], nodespace="Root", name="testspace", uid='ns1') res, n1_uid = micropsi.add_node(fixed_nodenet, 'Register', [100,100], nodespace=uid, name="sub1", uid='sub1') res, n2_uid = micropsi.add_node(fixed_nodenet, 'Register', [100,200], nodespace=uid, name="sub2", uid='sub2') micropsi.add_link(fixed_nodenet, n1_uid, 'gen', n2_uid, 'gen', weight=1, certainty=1) res, sub_uid = micropsi.add_node(fixed_nodenet, 'Nodespace', [100,100], nodespace=uid, name="subsubspace", uid='ns2') micropsi.delete_node(fixed_nodenet, uid) assert not micropsi.nodenets[fixed_nodenet].is_nodespace(uid) assert uid not in micropsi.nodenets[fixed_nodenet].data['nodespaces'] assert not micropsi.nodenets[fixed_nodenet].is_node(n1_uid) assert n1_uid not in micropsi.nodenets[fixed_nodenet].data['nodes'] assert not micropsi.nodenets[fixed_nodenet].is_node(n2_uid) assert n2_uid not in micropsi.nodenets[fixed_nodenet].data['nodes'] assert 'sub1-sub2' not in micropsi.nodenets[fixed_nodenet].data['links'] assert not micropsi.nodenets[fixed_nodenet].is_nodespace(sub_uid) assert sub_uid not in micropsi.nodenets[fixed_nodenet].data['nodespaces']
def test_delete_link(test_nodenet): nodes = prepare_nodenet(test_nodenet) success, link = micropsi.add_link(test_nodenet, nodes['a'], "por", nodes['b'], "gen", 0.5, 1) assert success micropsi.delete_link(test_nodenet, nodes['a'], "por", nodes['b'], "gen") nodespace = micropsi.get_nodes(test_nodenet) assert nodespace['nodes'][nodes['a']]['links'] == {}
def test_nodespace_removal(fixed_nodenet): res, uid = micropsi.add_nodespace(fixed_nodenet, [100, 100], nodespace=None, name="testspace") res, n1_uid = micropsi.add_node(fixed_nodenet, 'Register', [100, 100], nodespace=uid, name="sub1") res, n2_uid = micropsi.add_node(fixed_nodenet, 'Register', [100, 200], nodespace=uid, name="sub2") micropsi.add_link(fixed_nodenet, n1_uid, 'gen', n2_uid, 'gen', weight=1, certainty=1) res, sub_uid = micropsi.add_nodespace(fixed_nodenet, [100, 100], nodespace=uid, name="subsubspace") micropsi.delete_nodespace(fixed_nodenet, uid) # assert that the nodespace is gone assert not micropsi.nodenets[fixed_nodenet].is_nodespace(uid) assert uid not in micropsi.nodenets[fixed_nodenet].get_data()['nodespaces'] # assert that the nodes it contained are gone assert not micropsi.nodenets[fixed_nodenet].is_node(n1_uid) assert n1_uid not in micropsi.nodenets[fixed_nodenet].get_data()['nodes'] assert not micropsi.nodenets[fixed_nodenet].is_node(n2_uid) assert n2_uid not in micropsi.nodenets[fixed_nodenet].get_data()['nodes'] # assert that sub-nodespaces are gone as well assert not micropsi.nodenets[fixed_nodenet].is_nodespace(sub_uid) assert sub_uid not in micropsi.nodenets[fixed_nodenet].get_data()['nodespaces']
def test_add_link(test_nodenet): nodes = prepare_nodenet(test_nodenet) micropsi.add_link(test_nodenet, nodes['a'], "por", nodes['b'], "gen", 0.5, 1) micropsi.add_link(test_nodenet, nodes['a'], "por", nodes['b'], "gen", 1, 0.1) micropsi.add_link(test_nodenet, nodes['c'], "ret", nodes['b'], "gen", 1, 1) nodespace = micropsi.get_nodenet_data(test_nodenet, None) assert len(nodespace["nodes"]) == 4 assert len(nodespace["links"]) == 2 link1 = None link2 = None for uid, data in nodespace["links"].items(): if data['source_node_uid'] == nodes['a']: link1 = data else: link2 = data assert link1["weight"] == 1 # assert link1["certainty"] == 0.1 assert link1["source_node_uid"] == nodes['a'] assert link1["target_node_uid"] == nodes['b'] assert link1["source_gate_name"] == "por" assert link1["target_slot_name"] == "gen" assert link2["source_node_uid"] == nodes['c'] assert link2["target_node_uid"] == nodes['b'] assert link2["source_gate_name"] == "ret" assert link2["target_slot_name"] == "gen"
def test_add_link(test_nodenet): nodes = prepare_nodenet(test_nodenet) micropsi.add_link(test_nodenet, nodes['a'], "por", nodes['b'], "gen", 0.5, 1) micropsi.add_link(test_nodenet, nodes['a'], "por", nodes['b'], "gen", 1, 0.1) micropsi.add_link(test_nodenet, nodes['c'], "ret", nodes['b'], "gen", 1, 1) nodespace = micropsi.get_nodes(test_nodenet) assert len(nodespace["nodes"]) == 4 link_a_b = nodespace["nodes"][nodes['a']]['links']['por'][0] assert link_a_b['target_node_uid'] == nodes['b'] assert link_a_b['target_slot_name'] == 'gen' assert link_a_b['weight'] == 1 link_c_b = nodespace['nodes'][nodes['c']]['links']['ret'][0] assert link_c_b["target_node_uid"] == nodes['b'] assert link_c_b["target_slot_name"] == "gen" assert nodespace['nodes'][nodes['b']]['links'] == {} assert nodespace['nodes'][nodes['s']]['links'] == {}
def test_add_link(test_nodenet): micropsi.add_link(test_nodenet, "node_a", "por", "node_b", "gen", 0.5, 1, "por_ab") micropsi.add_link(test_nodenet, "node_a", "por", "node_b", "gen", 1, 0.1, "por_ab2") micropsi.add_link(test_nodenet, "node_c", "ret", "node_b", "gen", 1, 1, "ret_cb") nodespace = micropsi.get_nodespace(test_nodenet, "Root", -1) assert len(nodespace["nodes"]) == 4 assert len(nodespace["links"]) == 2 link1 = nodespace["links"]["por_ab"] assert link1["weight"] == 1 assert link1["certainty"] == 0.1 assert link1["source_node_uid"] == "node_a" assert link1["target_node_uid"] == "node_b" assert link1["source_gate_name"] == "por" assert link1["target_slot_name"] == "gen" link2 = nodespace["links"]["ret_cb"] assert link2["source_node_uid"] == "node_c" assert link2["target_node_uid"] == "node_b" assert link2["source_gate_name"] == "ret" assert link2["target_slot_name"] == "gen"
def test_delete_link(test_nodenet): success, link = micropsi.add_link(test_nodenet, "node_a", "por", "node_b", "gen", 0.5, 1) micropsi.delete_link(test_nodenet, "node_a", "por", "node_b", "gen") nodespace = micropsi.get_nodespace(test_nodenet, "Root", -1) assert len(nodespace["links"]) == 1
def node(request, test_nodenet): res, uid = micropsi.add_node(test_nodenet, 'Pipe', [10, 10], name='N1') micropsi.add_link(test_nodenet, uid, 'gen', uid, 'gen') return uid
def test_remove_nodes_linking_to_themselves(fixed_nodenet): micropsi.add_link(fixed_nodenet, 'A1', 'gen', 'A1', 'gen') assert micropsi.delete_node(fixed_nodenet, 'A1')
def add_link(nodenet_uid, source_node_uid, gate_type, target_node_uid, slot_type, weight=1): """ Create a link between the given nodes """ return runtime.add_link(nodenet_uid, source_node_uid, gate_type, target_node_uid, slot_type, weight=float(weight))
def test_modulators_sensor_actor_connection(test_nodenet, test_world): nodenet = micropsi.get_nodenet(test_nodenet) micropsi.set_nodenet_properties(test_nodenet, worldadapter="Braitenberg", world_uid=test_world) res, s1_id = micropsi.add_node(test_nodenet, "Sensor", [10, 10], None, name="brightness_l", parameters={'datasource': 'brightness_l'}) res, s2_id = micropsi.add_node(test_nodenet, "Sensor", [20, 20], None, name="emo_activation", parameters={'datasource': 'emo_activation'}) res, a1_id = micropsi.add_node(test_nodenet, "Actor", [30, 30], None, name="engine_l", parameters={'datatarget': 'engine_l'}) res, a2_id = micropsi.add_node( test_nodenet, "Actor", [40, 40], None, name="base_importance_of_intention", parameters={'datatarget': 'base_importance_of_intention'}) res, r1_id = micropsi.add_node(test_nodenet, "Register", [10, 30], None, name="r1") res, r2_id = micropsi.add_node(test_nodenet, "Register", [10, 30], None, name="r2") s1 = nodenet.get_node(s1_id) s2 = nodenet.get_node(s2_id) r1 = nodenet.get_node(r1_id) r2 = nodenet.get_node(r2_id) s2.set_gate_parameter('gen', 'maximum', 999) micropsi.add_link(test_nodenet, r1_id, 'gen', a1_id, 'gen') micropsi.add_link(test_nodenet, r2_id, 'gen', a2_id, 'gen') r1.activation = 0.3 r2.activation = 0.7 emo_val = nodenet.get_modulator("emo_activation") # patch reset method, to check if datatarget was written def nothing(): pass nodenet.worldadapter_instance.reset_datatargets = nothing nodenet.step() assert round(nodenet.worldadapter_instance.datatargets['engine_l'], 3) == 0.3 assert round(s1.activation, 3) == round( nodenet.worldadapter_instance.get_datasource_value('brightness_l'), 3) assert round(s2.activation, 3) == round(emo_val, 3) assert round(nodenet.get_modulator('base_importance_of_intention'), 3) == 0.7 assert round(nodenet.worldadapter_instance.datatargets['engine_l'], 3) == 0.3 emo_val = nodenet.get_modulator("emo_activation") nodenet.step() assert round(s2.activation, 3) == round(emo_val, 3)
def test_copy_nodes(): success, nodenet_uid1 = micropsi.new_nodenet("Origin_Nodenet", "Default", owner="tester") success, nodenet_uid2 = micropsi.new_nodenet("Target_Nodenet", "Default", owner="tester") # create a few nodes assert nodenet_uid1 not in micropsi.nodenets micropsi.load_nodenet(nodenet_uid1) assert nodenet_uid1 in micropsi.nodenets micropsi.load_nodenet(nodenet_uid2) assert nodenet_uid1 in micropsi.nodenets assert nodenet_uid2 in micropsi.nodenets micropsi.add_node(nodenet_uid1, "Nodespace", (100, 150), "Root", uid="ns1") micropsi.add_node(nodenet_uid1, "Nodespace", (200, 150), "Root", uid="confl") micropsi.add_node(nodenet_uid1, "Nodespace", (400, 150), "Root", uid="ns2") micropsi.add_node(nodenet_uid2, "Nodespace", (200, 150), "Root", uid="confl") micropsi.add_node(nodenet_uid1, "Register", (300, 140), "Root", uid="n1") micropsi.add_node(nodenet_uid1, "Register", (300, 240), "Root", uid="n2") micropsi.add_node(nodenet_uid1, "Register", (300, 340), "Root", uid="associated_node") micropsi.add_node(nodenet_uid1, "Register", (400, 240), "ns1", uid="n3") micropsi.add_node(nodenet_uid1, "Register", (400, 240), "ns2", uid="n4") micropsi.add_node(nodenet_uid1, "Register", (100, 240), "confl", uid="n5") micropsi.add_node(nodenet_uid2, "Register", (100, 140), "Root", uid="n1") micropsi.add_node(nodenet_uid2, "Register", (150, 240), "Root", uid="nt2") micropsi.add_link(nodenet_uid1, "n1", "gen", "n2", "gen", uid="l1") micropsi.add_link(nodenet_uid1, "n2", "gen", "n3", "gen", uid="l2") micropsi.add_link(nodenet_uid1, "n1", "gen", "associated_node", "gen", uid="la") micropsi.add_link(nodenet_uid1, "n3", "gen", "n1", "gen", uid="l3") micropsi.add_link(nodenet_uid1, "n4", "gen", "n1", "gen", uid="l4") micropsi.add_link(nodenet_uid2, "n1", "gen", "nt2", "gen", uid="l1") # now copy stuff between nodespaces micropsi.copy_nodes( ["n1", "n2", "n3", "n5", "ns1", "confl"], nodenet_uid1, nodenet_uid2) micropsi.save_nodenet(nodenet_uid1) micropsi.save_nodenet(nodenet_uid2) target = micropsi.get_nodespace(nodenet_uid2, "Root", -1) assert len(target["nodes"]) == 4 + 2 assert len(target["nodespaces"]) == 2 + 2 assert "n1" in target["nodes"] assert "n2" in target["nodes"] assert "n3" in target["nodes"] assert "associated_node" not in target["nodes"] assert "n4" not in target["nodes"] assert "n5" in target["nodes"] assert "nt2" in target["nodes"] assert "ns1" in target["nodespaces"] assert "ns2" not in target["nodespaces"] assert "confl" in target["nodespaces"] assert len(target["links"]) == 3 + 1 assert "l1" in target["links"] assert "l2" in target["links"] assert "l3" in target["links"] assert "l4" not in target["links"] # we should also test for parentage and link connectivity # TODO now test copying within the same nodenet micropsi.copy_nodes( ["n1", "n2", "n3", "n5", "ns1", "confl"], nodenet_uid1, nodenet_uid1, target_nodespace_uid="ns2" ) micropsi.save_nodenet(nodenet_uid1) # delete_nodenets micropsi.delete_nodenet(nodenet_uid1) micropsi.delete_nodenet(nodenet_uid2)
def add_link(nodenet_uid, source_node_uid, gate_type, target_node_uid, slot_type, weight, uid): res, uid = runtime.add_link(nodenet_uid, source_node_uid, gate_type, target_node_uid, slot_type, weight=weight, uid=uid) if res: return {'status': 'success', 'uid': uid} else: return {'status': 'error', 'msg': uid}
def add_link(nodenet_uid, source_node_uid, gate_type, target_node_uid, slot_type, weight=1): return runtime.add_link(nodenet_uid, source_node_uid, gate_type, target_node_uid, slot_type, weight=weight)