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
Пример #2
0
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
Пример #4
0
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
Пример #5
0
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
Пример #6
0
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
Пример #9
0
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'
Пример #10
0
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
Пример #11
0
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)
Пример #12
0
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_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)

    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
Пример #20
0
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_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 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'
Пример #23
0
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
Пример #24
0
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)
Пример #25
0
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)