Beispiel #1
0
def test_find_best_match():
    ab_pos = BloodType(BloodTypeLetter.AB, BloodTypePolarity.POS)
    o_neg = BloodType(BloodTypeLetter.O, BloodTypePolarity.NEG)
    wait_list = WaitList()

    patient1 = Patient('name', 'illness 1', OrganType.Pancreas,
                       ab_pos, 100, 1, wait_list)
    patient2 = Patient('name', 'illness 2', OrganType.Pancreas,
                       ab_pos, 250, 3, wait_list)
    patient3 = Patient('name', 'illness 3', OrganType.Pancreas,
                       o_neg, 400, 2, wait_list)
    patient4 = Patient('name', 'illness 4', OrganType.Heart,
                       ab_pos, 500, 2, wait_list)
    organ = Organ(OrganType.Pancreas, o_neg, 1)

    node1 = Node(1, adjacency_dict={2: {'weight': 10, 'status': True},
                                    3: {'weight': 25, 'status': True}})
    node2 = Node(2, adjacency_dict={3: {'weight': 35, 'status': True}})
    node3 = Node(3)
    test_net = Network({1: node1, 2: node2, 3: node3})
    weights, paths = Dijkstra.dijkstra(test_net, 1)

    patient = OrganAllocator.find_best_match(organ, wait_list, weights)
    assert patient is patient3
    assert len(wait_list.wait_list) is 4

    node1.adjacency_dict[3]['weight'] = 300
    node3.adjacency_dict[1]['weight'] = 300
    test_net.mark_node_inactive(2)
    wait_list.remove_patient(patient3)
    weights, paths = Dijkstra.dijkstra(test_net, 1)
    assert len(weights) is 2

    patient = OrganAllocator.find_best_match(organ, wait_list, weights)
    assert patient is patient1
Beispiel #2
0
def test_nodes():
    node1 = Node(1, adjacency_dict={2: {'weight': 3, 'status': True}})
    node2 = Node(2, adjacency_dict={1: {'weight': 3, 'status': True}})
    test_net = Network({1: node1, 2: node2})

    # test graph with 2 active nodes
    assert len(test_net.nodes()) is 2
    assert len(test_net.nodes()) is len(test_net.network_dict)
    assert node1.node_id in test_net.nodes()
    assert node2.node_id in test_net.nodes()

    # test edge deactivation
    test_net.mark_edge_inactive(node1.node_id, node2.node_id)
    assert len(test_net.nodes()) is 2
    assert len(test_net.nodes()) is len(test_net.network_dict)
    assert node1.node_id in test_net.nodes()
    assert node2.node_id in test_net.nodes()

    # deactivate 1 node and test
    test_net.mark_node_inactive(node1.node_id)
    assert len(test_net.nodes()) is 1
    assert len(test_net.nodes()) is not len(test_net.network_dict)
    assert len(test_net.network_dict) is 2
    assert node1.node_id not in test_net.nodes()
    assert node2.node_id in test_net.nodes()

    # deactivate last node
    test_net.mark_node_inactive(node2.node_id)
    assert not test_net.nodes()
    assert len(test_net.nodes()) is not len(test_net.network_dict)
    assert len(test_net.network_dict) is 2
    assert node1.node_id not in test_net.nodes()
    assert node2.node_id not in test_net.nodes()
    def mark_network_inactive(network: Network) -> None:
        """
        Marks all nodes in a given network inactive
        (this is the starting point for the subnetwork)

        :param Network network: graph that is the foundation for subnetworks
        """
        for node in network.nodes():
            network.mark_node_inactive(node, feedback=False)
Beispiel #4
0
def test_mark_node_inactive():
    node1 = Node(1, adjacency_dict={2: {'weight': 3, 'status': True}})
    node2 = Node(2, adjacency_dict={1: {'weight': 3, 'status': True}})
    test_net = Network({1: node1, 2: node2})

    assert len(test_net.network_dict) is len(test_net.nodes())
    assert node2.node_id in test_net.network_dict[node1.node_id].adjacency_dict
    assert node1.node_id in test_net.network_dict[node2.node_id].adjacency_dict

    # test marking existing active node as inactive
    test_net.mark_node_inactive(1)
    assert len(test_net.network_dict) is 2
    assert len(test_net.network_dict) is not len(test_net.nodes())
    assert not node1.status
    assert node2.status
    assert not node1.adjacency_dict[node2.node_id]['status']
    assert not node2.adjacency_dict[node1.node_id]['status']
    assert node2.node_id in test_net.network_dict[node1.node_id].adjacency_dict
    assert node1.node_id in test_net.network_dict[node2.node_id].adjacency_dict

    # test already inactive node
    test_net.mark_node_inactive(1)
    assert len(test_net.network_dict) is 2
    assert len(test_net.network_dict) is not len(test_net.nodes())
    assert not node1.status
    assert node2.status
    assert not node1.adjacency_dict[node2.node_id]['status']
    assert not node2.adjacency_dict[node1.node_id]['status']
    assert node2.node_id in test_net.network_dict[node1.node_id].adjacency_dict
    assert node1.node_id in test_net.network_dict[node2.node_id].adjacency_dict

    # test node that doesn't exist
    test_net.mark_node_inactive(3)
    assert len(test_net.network_dict) is 2
    assert len(test_net.network_dict) is not len(test_net.nodes())
    }
})

init_tester = Network({
    init_tester_node1.node_id: init_tester_node1,
    init_tester_node2.node_id: init_tester_node2,
    init_tester_node3.node_id: init_tester_node3,
    init_tester_node4.node_id: init_tester_node4,
    init_tester_node5.node_id: init_tester_node5
})

print('\t---ADJACENCY LISTS MIRROR TEST---')
print(init_tester)

print('\t---MARK NODE INACTIVE TESTS---')
init_tester.mark_node_inactive(1)
init_tester.mark_node_inactive(1)
init_tester.mark_node_inactive(6)

init_tester.mark_node_inactive(6)

print(init_tester)

print('\t---MARK NODE ACTIVE TESTS---')
init_tester.mark_node_active(1)
init_tester.mark_node_active(1)
init_tester.mark_node_active(6)
print(init_tester)

print('\t---MARK EDGE INACTIVE TESTS---')
init_tester.mark_edge_inactive(1, 5)
Beispiel #6
0
def test_mark_edge_active():
    node1 = Node(1, adjacency_dict={2: {'weight': 3, 'status': False}})
    node2 = Node(2, adjacency_dict={1: {'weight': 3, 'status': False}})
    test_net = Network({1: node1, 2: node2})

    # test existing, active nodes with shared, inactive edge
    test_net.mark_edge_active(node1.node_id, node2.node_id)
    assert node1.adjacency_dict[node2.node_id]['status']
    assert node2.adjacency_dict[node1.node_id]['status']
    assert len(node1.adjacency_dict) is 1
    assert len(node2.adjacency_dict) is 1
    assert len(test_net.network_dict) is 2
    assert len(test_net.network_dict) is len(test_net.nodes())

    # test existing, active nodes with shared, active edge
    test_net.mark_edge_active(node1.node_id, node2.node_id)
    assert node1.adjacency_dict[node2.node_id]['status']
    assert node2.adjacency_dict[node1.node_id]['status']
    assert len(node1.adjacency_dict) is 1
    assert len(node2.adjacency_dict) is 1
    assert len(test_net.network_dict) is 2
    assert len(test_net.network_dict) is len(test_net.nodes())

    # test existing, inactive node with shared, inactive edge
    test_net.mark_node_inactive(node1.node_id)
    test_net.mark_edge_active(node1.node_id, node2.node_id)
    assert not node1.adjacency_dict[node2.node_id]['status']
    assert not node2.adjacency_dict[node1.node_id]['status']
    assert len(node1.adjacency_dict) is 1
    assert len(node2.adjacency_dict) is 1
    assert len(test_net.network_dict) is 2
    assert len(test_net.network_dict) is not len(test_net.nodes())
    assert not node1.status
    assert node2.status

    # test existing nodes without shared edge
    test_net.add_node(Node(3))
    test_net.mark_edge_active(node2.node_id, 3)
    test_net.mark_node_inactive(node1.node_id)
    test_net.mark_edge_active(node1.node_id, node2.node_id)
    assert not node1.adjacency_dict[node2.node_id]['status']
    assert not node2.adjacency_dict[node1.node_id]['status']
    assert len(node1.adjacency_dict) is 1
    assert len(node2.adjacency_dict) is 1
    assert len(test_net.network_dict) is 3
    assert len(test_net.network_dict) is not len(test_net.nodes())
    assert not node1.status
    assert node2.status

    # test node that doesn't exist
    test_net.mark_edge_active(node2.node_id, 4)
    test_net.add_node(Node(3))
    test_net.mark_edge_active(node2.node_id, 3)
    test_net.mark_node_inactive(node1.node_id)
    test_net.mark_edge_active(node1.node_id, node2.node_id)
    assert not node1.adjacency_dict[node2.node_id]['status']
    assert not node2.adjacency_dict[node1.node_id]['status']
    assert len(node1.adjacency_dict) is 1
    assert len(node2.adjacency_dict) is 1
    assert len(test_net.network_dict) is 3
    assert len(test_net.network_dict) is not len(test_net.nodes())
    assert not node1.status
    assert node2.status