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
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)
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)
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