def test_clone_nodes_internal_links(fixed_nodenet): nodenet = micropsi.get_nodenet(fixed_nodenet) success, result = micropsi.clone_nodes(fixed_nodenet, ['n0001', 'n0002'], 'internal') assert success assert len(result['nodes']) == 2 assert len(result['links']) == 1 if result['nodes'][0]['name'] == 'A1_copy': a1_copy = result['nodes'][0] a2_copy = result['nodes'][1] else: a1_copy = result['nodes'][1] a2_copy = result['nodes'][0] a1_copy = nodenet.get_node(a1_copy['uid']) a2_copy = nodenet.get_node(a2_copy['uid']) l1_uid = result['links'][0]['uid'] links = a1_copy.get_associated_links() link = None for candidate in links: if candidate.source_node.uid == a1_copy.uid and \ candidate.target_node.uid == a2_copy.uid and \ candidate.source_gate.type == 'por' and \ candidate.target_slot.type == 'gen': link = candidate assert link is not None
def test_clone_nodes_nolinks(fixed_nodenet): nodenet = micropsi.get_nodenet(fixed_nodenet) success, result = micropsi.clone_nodes(fixed_nodenet, ['n0001', 'n0002'], 'none', offset=[10, 20, 2]) assert success for n in result.values(): if n['name'] == 'A1_copy': a1_copy = n elif n['name'] == 'A2_copy': a2_copy = n assert nodenet.is_node(a1_copy['uid']) assert a1_copy['uid'] != 'n0001' assert a1_copy['type'] == nodenet.get_node('n0001').type assert a1_copy['parameters'] == nodenet.get_node( 'n0001').clone_parameters() assert a1_copy['position'][0] == nodenet.get_node('n0001').position[0] + 10 assert a1_copy['position'][1] == nodenet.get_node('n0001').position[1] + 20 assert a1_copy['position'][2] == nodenet.get_node('n0001').position[2] + 2 assert nodenet.is_node(a2_copy['uid']) assert a2_copy['name'] == nodenet.get_node('n0002').name + '_copy' assert a2_copy['uid'] != 'n0002' assert len(result.keys()) == 2 assert a1_copy['links'] == {} assert a2_copy['links'] == {}
def test_clone_nodes_copies_gate_params(fixed_nodenet): nodenet = micropsi.get_nodenet(fixed_nodenet) micropsi.set_gate_parameters(fixed_nodenet, 'n0001', 'gen', {'maximum': 0.1}) success, result = micropsi.clone_nodes(fixed_nodenet, ['n0001'], 'internal') assert success copy = nodenet.get_node(result['nodes'][0]['uid']) assert round(copy.get_gate_parameters()['gen']['maximum'], 2) == 0.1
def test_clone_nodes_to_new_nodespace(fixed_nodenet): nodenet = micropsi.get_nodenet(fixed_nodenet) res, testspace_uid = micropsi.add_nodespace(fixed_nodenet, [100, 100], nodespace=None, name="testspace") success, result = micropsi.clone_nodes(fixed_nodenet, ['n0001', 'n0002'], 'internal', nodespace=testspace_uid) assert success assert len(result['nodes']) == 2 assert len(result['links']) == 1 if result['nodes'][0]['name'] == 'A1_copy': a1_copy = result['nodes'][0] a2_copy = result['nodes'][1] else: a1_copy = result['nodes'][1] a2_copy = result['nodes'][0] a1_copy = nodenet.get_node(a1_copy['uid']) a2_copy = nodenet.get_node(a2_copy['uid']) assert a1_copy.parent_nodespace == testspace_uid assert a2_copy.parent_nodespace == testspace_uid
def test_clone_nodes_nolinks(fixed_nodenet): nodenet = micropsi.get_nodenet(fixed_nodenet) success, result = micropsi.clone_nodes(fixed_nodenet, ['n0001', 'n0002'], 'none', offset=[10, 20]) assert success if result['nodes'][0]['name'] == 'A1_copy': a1_copy = result['nodes'][0] a2_copy = result['nodes'][1] else: a1_copy = result['nodes'][1] a2_copy = result['nodes'][0] assert nodenet.is_node(a1_copy['uid']) assert a1_copy['uid'] != 'n0001' assert a1_copy['type'] == nodenet.get_node('n0001').type assert a1_copy['parameters'] == nodenet.get_node( 'n0001').clone_parameters() assert a1_copy['position'][0] == nodenet.get_node('n0001').position[0] + 10 assert a1_copy['position'][1] == nodenet.get_node('n0001').position[1] + 20 assert nodenet.is_node(a2_copy['uid']) assert a2_copy['name'] == nodenet.get_node('n0002').name + '_copy' assert a2_copy['uid'] != 'n0002' assert len(result['nodes']) == 2 assert len(result['links']) == 0
def test_clone_nodes_all_links(fixed_nodenet): nodenet = micropsi.get_nodenet(fixed_nodenet) success, result = micropsi.clone_nodes(fixed_nodenet, ['A1', 'A2'], 'all') assert success assert len(result['nodes']) == 2 assert len(result['links']) == 2 if result['nodes'][0]['name'] == 'A1_copy': a1_copy = result['nodes'][0] a2_copy = result['nodes'][1] else: a1_copy = result['nodes'][1] a2_copy = result['nodes'][0] a1_copy = nodenet.nodes[a1_copy['uid']] a2_copy = nodenet.nodes[a2_copy['uid']] l1_uid = list(a1_copy.gates['por'].outgoing.keys())[0] l2_uid = list(a1_copy.slots['gen'].incoming.keys())[0] assert nodenet.links[l1_uid].source_node.uid == a1_copy.uid assert nodenet.links[l1_uid].target_node.uid == a2_copy.uid assert nodenet.links[l1_uid].source_gate.type == 'por' assert nodenet.links[l1_uid].target_slot.type == 'gen' assert l1_uid in [l['uid'] for l in result['links']] assert nodenet.links[l2_uid].source_node.uid == 'S' assert nodenet.links[l2_uid].target_node.uid == a1_copy.uid assert nodenet.links[l2_uid].source_gate.type == 'gen' assert nodenet.links[l2_uid].target_slot.type == 'gen' assert l2_uid in [l['uid'] for l in result['links']]
def test_clone_nodes_copies_gate_params(fixed_nodenet): nodenet = micropsi.get_nodenet(fixed_nodenet) micropsi.set_gate_parameters(fixed_nodenet, 'A1', 'gen', {'decay': 0.1}) success, result = micropsi.clone_nodes(fixed_nodenet, ['A1'], 'internal') assert success copy = nodenet.get_node(result['nodes'][0]['uid']) assert copy.get_gate_parameters()['gen']['decay'] == 0.1
def test_clone_nodes_all_links(fixed_nodenet): nodenet = micropsi.get_nodenet(fixed_nodenet) success, result = micropsi.clone_nodes(fixed_nodenet, ['n0001', 'n0002'], 'all') assert success # expect 3 instead of two results, because the sensor that links to A1 should be delivered # as a followupdnode to A1_copy to render incoming links assert len(result.keys()) == 3 for n in result.values(): if n['name'] == 'A1_copy': a1_copy = n elif n['name'] == 'A2_copy': a2_copy = n # assert the link between a1-copy and a2-copy exists a1link = a1_copy['links']['por'][0] assert a1link['target_node_uid'] == a2_copy['uid'] # assert the link between sensor and the a1-copy exists sensor = nodenet.get_node('n0005').get_data() candidate = None for link in sensor['links']['gen']: if link['target_node_uid'] == a1_copy['uid']: candidate = link assert candidate['target_slot_name'] == 'gen'
def test_clone_nodes_copies_gate_params(fixed_nodenet): nodenet = micropsi.get_nodenet(fixed_nodenet) micropsi.set_gate_parameters(fixed_nodenet, 'n0001', 'gen', {'maximum': 0.1}) success, result = micropsi.clone_nodes(fixed_nodenet, ['n0001'], 'internal') assert success copy = nodenet.get_node(list(result.keys())[0]) assert round(copy.get_gate_parameters()['gen']['maximum'], 2) == 0.1
def clone_nodes(nodenet_uid, node_uids, clone_mode="all", nodespace=None, offset=[50, 50]): """ Clone a bunch of nodes. The nodes will get new unique node ids, a "copy" suffix to their name, and a slight positional offset. To specify whether the links should be copied too, you can give the following clone-modes: * "all" to clone all links * "internal" to only clone links within the clone set of nodes * "none" to not clone links at all. Per default, a clone of a node will appear in the same nodespace, slightly below the original node. If you however specify a nodespace, all clones will be copied to the given nodespace.""" return runtime.clone_nodes(nodenet_uid, node_uids, clone_mode, nodespace=nodespace, offset=offset)
def test_clone_nodes_all_links(fixed_nodenet): nodenet = micropsi.get_nodenet(fixed_nodenet) success, result = micropsi.clone_nodes(fixed_nodenet, ['n0001', 'n0002'], 'all') assert success assert len(result['nodes']) == 2 assert len(result['links']) == 2 if result['nodes'][0]['name'] == 'A1_copy': a1_copy = result['nodes'][0] a2_copy = result['nodes'][1] else: a1_copy = result['nodes'][1] a2_copy = result['nodes'][0] sensor = nodenet.get_node('n0005') a1_copy = nodenet.get_node(a1_copy['uid']) a2_copy = nodenet.get_node(a2_copy['uid']) l1_uid = list(a1_copy.get_gate('por').get_links())[0].uid l2_uid = list(a1_copy.get_slot('gen').get_links())[0].uid links = a1_copy.get_associated_links() link = None for candidate in links: if candidate.source_node.uid == a1_copy.uid and \ candidate.target_node.uid == a2_copy.uid and \ candidate.source_gate.type == 'por' and \ candidate.target_slot.type == 'gen': link = candidate assert link is not None assert l1_uid in [l['uid'] for l in result['links']] links = sensor.get_associated_links() link = None for candidate in links: if candidate.source_node.uid == sensor.uid and \ candidate.target_node.uid == a1_copy.uid and \ candidate.source_gate.type == 'gen' and \ candidate.target_slot.type == 'gen': link = candidate assert link is not None assert l2_uid in [l['uid'] for l in result['links']]
def test_clone_nodes_to_new_nodespace(fixed_nodenet): nodenet = micropsi.get_nodenet(fixed_nodenet) res, testspace_uid = micropsi.add_nodespace(fixed_nodenet, [100, 100], nodespace=None, name="testspace") success, result = micropsi.clone_nodes(fixed_nodenet, ['n0001', 'n0002'], 'internal', nodespace=testspace_uid) assert success assert len(result.keys()) == 2 for n in result.values(): if n['name'] == 'A1_copy': a1_copy = n elif n['name'] == 'A2_copy': a2_copy = n a1_copy = nodenet.get_node(a1_copy['uid']) a2_copy = nodenet.get_node(a2_copy['uid']) assert a1_copy.parent_nodespace == testspace_uid assert a2_copy.parent_nodespace == testspace_uid
def test_clone_nodes_internal_links(fixed_nodenet): nodenet = micropsi.get_nodenet(fixed_nodenet) success, result = micropsi.clone_nodes(fixed_nodenet, ['A1', 'A2'], 'internal') assert success assert len(result['nodes']) == 2 assert len(result['links']) == 1 if result['nodes'][0]['name'] == 'A1_copy': a1_copy = result['nodes'][0] a2_copy = result['nodes'][1] else: a1_copy = result['nodes'][1] a2_copy = result['nodes'][0] a1_copy = nodenet.nodes[a1_copy['uid']] a2_copy = nodenet.nodes[a2_copy['uid']] l1_uid = result['links'][0]['uid'] assert nodenet.links[l1_uid].source_node.uid == a1_copy.uid assert nodenet.links[l1_uid].target_node.uid == a2_copy.uid assert nodenet.links[l1_uid].source_gate.type == 'por' assert nodenet.links[l1_uid].target_slot.type == 'gen'
def test_clone_nodes_internal_links(fixed_nodenet): nodenet = micropsi.get_nodenet(fixed_nodenet) success, result = micropsi.clone_nodes(fixed_nodenet, ['n0001', 'n0002'], 'internal') assert success assert len(result.keys()) == 2 for n in result.values(): if n['name'] == 'A1_copy': a1_copy = n elif n['name'] == 'A2_copy': a2_copy = n # assert the link between a1-copy and a2-copy exists a1link = a1_copy['links']['por'][0] assert a1link['target_node_uid'] == a2_copy['uid'] # assert the link between sensor and the a1-copy does not exist sensor = nodenet.get_node('n0005').get_data() candidate = None for link in sensor['links']['gen']: if link['target_node_uid'] == a1_copy['uid']: candidate = link assert candidate is None
def test_clone_nodes_nolinks(fixed_nodenet): nodenet = micropsi.get_nodenet(fixed_nodenet) success, result = micropsi.clone_nodes(fixed_nodenet, ['n0001', 'n0002'], 'none', offset=[10, 20, 2]) assert success for n in result.values(): if n['name'] == 'A1_copy': a1_copy = n elif n['name'] == 'A2_copy': a2_copy = n assert nodenet.is_node(a1_copy['uid']) assert a1_copy['uid'] != 'n0001' assert a1_copy['type'] == nodenet.get_node('n0001').type assert a1_copy['parameters'] == nodenet.get_node('n0001').clone_parameters() assert a1_copy['position'][0] == nodenet.get_node('n0001').position[0] + 10 assert a1_copy['position'][1] == nodenet.get_node('n0001').position[1] + 20 assert a1_copy['position'][2] == nodenet.get_node('n0001').position[2] + 2 assert nodenet.is_node(a2_copy['uid']) assert a2_copy['name'] == nodenet.get_node('n0002').name + '_copy' assert a2_copy['uid'] != 'n0002' assert len(result.keys()) == 2 assert a1_copy['links'] == {} assert a2_copy['links'] == {}
def test_clone_nodes_nolinks(fixed_nodenet): nodenet = micropsi.get_nodenet(fixed_nodenet) success, result = micropsi.clone_nodes(fixed_nodenet, ['n0001', 'n0002'], 'none', offset=[10, 20]) assert success if result['nodes'][0]['name'] == 'A1_copy': a1_copy = result['nodes'][0] a2_copy = result['nodes'][1] else: a1_copy = result['nodes'][1] a2_copy = result['nodes'][0] assert nodenet.is_node(a1_copy['uid']) assert a1_copy['uid'] != 'n0001' assert a1_copy['type'] == nodenet.get_node('n0001').type assert a1_copy['parameters'] == nodenet.get_node('n0001').clone_parameters() assert a1_copy['position'][0] == nodenet.get_node('n0001').position[0] + 10 assert a1_copy['position'][1] == nodenet.get_node('n0001').position[1] + 20 assert nodenet.is_node(a2_copy['uid']) assert a2_copy['name'] == nodenet.get_node('n0002').name + '_copy' assert a2_copy['uid'] != 'n0002' assert len(result['nodes']) == 2 assert len(result['links']) == 0
def test_clone_nodes_to_new_nodespace(fixed_nodenet): nodenet = micropsi.get_nodenet(fixed_nodenet) micropsi.add_node(fixed_nodenet, 'Nodespace', [100, 100], nodespace="Root", name="testspace", uid='ns1') success, result = micropsi.clone_nodes(fixed_nodenet, ['A1', 'A2'], 'internal', nodespace='ns1') assert success assert len(result['nodes']) == 2 assert len(result['links']) == 1 if result['nodes'][0]['name'] == 'A1_copy': a1_copy = result['nodes'][0] a2_copy = result['nodes'][1] else: a1_copy = result['nodes'][1] a2_copy = result['nodes'][0] a1_copy = nodenet.get_node(a1_copy['uid']) a2_copy = nodenet.get_node(a2_copy['uid']) assert a1_copy.parent_nodespace == 'ns1' assert a2_copy.parent_nodespace == 'ns1'
def clone_nodes(nodenet_uid, node_uids, clone_mode="all", nodespace=None, offset=[50, 50]): return runtime.clone_nodes(nodenet_uid, node_uids, clone_mode, nodespace=nodespace, offset=offset)
def clone_nodes(nodenet_uid, node_uids, clone_mode="all", nodespace=None, offset=[50, 50]): added, result = runtime.clone_nodes(nodenet_uid, node_uids, clone_mode, nodespace=nodespace, offset=offset) if added: return dict(status="success", result=result) else: return dict(status="error", msg=result)