def test_graph_vf2_mapping_identical_removals(self): graph = retworkx.generators.path_graph(2) second_graph = retworkx.generators.path_graph(4) second_graph.remove_nodes_from([1, 2]) second_graph.add_edge(0, 3, None) mapping = retworkx.graph_vf2_mapping(graph, second_graph) self.assertEqual({0: 0, 1: 3}, next(mapping))
def test_graph_vf2_number_of_valid_mappings(self): graph = retworkx.generators.mesh_graph(3) mapping = retworkx.graph_vf2_mapping(graph, graph, id_order=True) total = 0 for _ in mapping: total += 1 self.assertEqual(total, 6)
def test_graph_vf2_mapping_identical_vf2pp(self): graph = retworkx.generators.grid_graph(2, 2) second_graph = retworkx.generators.grid_graph(2, 2) mapping = retworkx.graph_vf2_mapping(graph, second_graph, id_order=False) self.assertEqual(next(mapping), {0: 0, 1: 1, 2: 2, 3: 3})
def test_subgraph_vf2_mapping(self): graph = retworkx.generators.grid_graph(10, 10) second_graph = retworkx.generators.grid_graph(2, 2) mapping = retworkx.graph_vf2_mapping(graph, second_graph, subgraph=True) self.assertEqual(next(mapping), {0: 0, 1: 1, 10: 2, 11: 3})
def test_subgraph_vf2_mapping_vf2pp(self): graph = retworkx.generators.grid_graph(3, 3) second_graph = retworkx.generators.grid_graph(2, 2) mapping = retworkx.graph_vf2_mapping(graph, second_graph, subgraph=True, id_order=False) self.assertEqual(next(mapping), {4: 0, 3: 2, 0: 3, 1: 1})
def test_graph_vf2_mapping_identical_removals_first_vf2pp(self): second_graph = retworkx.generators.path_graph(2) graph = retworkx.generators.path_graph(4) graph.remove_nodes_from([1, 2]) graph.add_edge(0, 3, None) mapping = retworkx.graph_vf2_mapping(graph, second_graph, id_order=False) self.assertEqual({0: 0, 3: 1}, next(mapping))
def test_empty_graph_vf2_mapping(self): g_a = retworkx.PyGraph() g_b = retworkx.PyGraph() for id_order in [False, True]: with self.subTest(id_order=id_order): mapping = retworkx.graph_vf2_mapping(g_a, g_b, id_order=id_order, subgraph=False) self.assertEqual({}, next(mapping))
def test_subgraph_vf2_all_mappings(self): graph = retworkx.generators.path_graph(3) second_graph = retworkx.generators.path_graph(2) mapping = retworkx.graph_vf2_mapping(graph, second_graph, subgraph=True, id_order=True) self.assertEqual(next(mapping), {0: 0, 1: 1}) self.assertEqual(next(mapping), {0: 1, 1: 0}) self.assertEqual(next(mapping), {2: 1, 1: 0}) self.assertEqual(next(mapping), {1: 1, 2: 0})
def test_subgraph_vf2_mapping_out_size(self): first = retworkx.PyGraph() first.add_nodes_from([0, 1, 2, 3]) first.add_edges_from_no_data([(0, 1), (0, 2), (1, 2), (2, 3)]) second = retworkx.PyGraph() second.add_nodes_from([0, 1, 2, 3]) second.add_edges_from_no_data([(0, 1), (0, 2), (1, 3)]) mapping = retworkx.graph_vf2_mapping(first, second, subgraph=True, id_order=True, induced=False) self.assertEqual(next(mapping), {0: 0, 1: 2, 2: 1, 3: 3})
def test_vf2pp_remapping(self): temp = retworkx.generators.grid_graph(3, 3) graph = retworkx.PyGraph() dummy = graph.add_node(0) graph.compose(temp, dict()) graph.remove_node(dummy) second_graph = retworkx.generators.grid_graph(2, 2) mapping = retworkx.graph_vf2_mapping(graph, second_graph, subgraph=True, id_order=False) self.assertEqual(next(mapping), {5: 0, 4: 2, 1: 3, 2: 1})