def create_graph(self): g = DiGraph() g.add_node(0) g.add_node(1) g.add_node(2) g.add_node(3) g.add_node(4) g.add_node(5) g.add_node(6) g.add_node(7) g.add_node(8) g.add_node(9) g.add_edge(0, 1, 1) g.add_edge(1, 2, 2.1) g.add_edge(2, 0, 3) g.add_edge(2, 3, 5.5) g.add_edge(3, 2, 5.5) g.add_edge(3, 4, 4) g.add_edge(4, 5, 2) g.add_edge(5, 3, 3.4) g.add_edge(5, 6, 1) g.add_edge(6, 7, 5) g.add_edge(7, 8, 4.8) # 4.8 fails exp 37.4 g.add_edge(8, 6, 1.9) g.add_edge(8, 9, 12) return g
def load_from_json(self, file_name: str) -> bool: """ Loads a graph from a json file. @param file_name: The path to the json file @returns True if the loading was successful, False o.w. """ graph = DiGraph() dict_graph = list() try: with open(file_name, "r") as file: dict_graph = json.load(file) for i in dict_graph['Nodes']: if i.__contains__("pos"): s = i["pos"].split(",") x = float(s[0]) y = float(s[1]) graph.add_node(i["id"], (x, y)) else: graph.add_node(i["id"]) for i in dict_graph["Edges"]: graph.add_edge(i["src"], i["dest"], i["w"]) except IOError as e: print(e) return False self.__grp = graph return True
def test_graphMillion(self): """ Build a graph with a million vertices each vertex has 3 edges """ st = time.time() g = DiGraph() for i in range(1000): g.add_node(i) for i in range(1000): for j in range(3): g.add_edge(i, i + j, 1) print("Graph construction 10,000 nodes run time: ", round(time.time() - st, 3), " sec") for i in range(10000, 100000): g.add_node(i) for i in range(10000, 100000): for j in range(3): g.add_edge(i, i + j, 1) print("Graph construction 100,000 nodes run time: ", round(time.time() - st, 3), " sec") for i in range(100000, 1000000): g.add_node(i) for i in range(100000, 1000000): for j in range(3): g.add_edge(i, i + j, 1) print("Graph construction 1,000,000 nodes run time: ", round(time.time() - st, 3), " sec")
def test_add_node(self): graph = DiGraph() for i in range(10): graph.add_node(i) self.assertEqual(graph.v_size(), 10) graph.add_node(21) self.assertEqual(graph.v_size(), 11) graph.add_node(-10) self.assertEqual(graph.v_size(), 12) graph.add_node(7) self.assertEqual(graph.v_size(), 12)
def test_all_out_edges_of_node(self): graph = DiGraph() for i in range(10): graph.add_node(i) for i in range(9): graph.add_edge(i, i + 1, i * 2 + 1) self.assertTrue(graph.all_out_edges_of_node(0).__contains__(1)) graph.remove_edge(0, 1) self.assertFalse(graph.all_in_edges_of_node(0).__contains__(1)) graph.add_node(12) graph.add_edge(12, 4, 19) self.assertIn(4, graph.all_out_edges_of_node(12))
def test_get_all_v(self): graph = DiGraph() for i in range(10): graph.add_node(i) for i in range(9): graph.add_edge(i, i + 1, i * 2 + 1) l = [] for vertex in graph.Nodes.values(): l.append(vertex) for vertex in l: self.assertIn(vertex, graph.get_all_v()) graph.remove_node(3) self.assertNotIn(3, graph.get_all_v())
def test_remove_edge(self): graph = DiGraph() for i in range(10): graph.add_node(i) for i in range(9): graph.add_edge(i, i + 1, i * 2 + 1) graph.remove_edge(2, 3) self.assertEqual(graph.v_size(), 10) self.assertEqual(graph.e_size(), 8) self.assertFalse(graph.all_out_edges_of_node(2).__contains__(3)) self.assertFalse(graph.all_in_edges_of_node(3).__contains__(2)) self.assertFalse(graph.remove_edge(6, 0)) self.assertFalse(graph.remove_edge(5, 100))
def create_graph(): grp = DiGraph() grp.add_node(0) grp.add_node(1) grp.add_node(2) grp.add_node(3) grp.add_node(4) grp.add_node(5) grp.add_node(6) grp.add_node(7) grp.add_node(8) grp.add_node(9) return grp
def test_remove_node(self): graph = DiGraph() for i in range(10): graph.add_node(i) for i in range(9): graph.add_edge(i, i + 1, i * 2 + 1) self.assertTrue(graph.remove_node(0)) self.assertEqual(graph.e_size(), 8) self.assertEqual(graph.v_size(), 9) self.assertFalse(0 in graph.Nodes.keys()) self.assertTrue(8 in graph.Nodes.keys()) self.assertFalse(graph.remove_node(0)) self.assertFalse(graph.remove_node(20)) self.assertEqual(graph.v_size(), 9)
def test_get_mc(self): graph = DiGraph() for i in range(10): graph.add_node(i) for i in range(9): graph.add_edge(i, i + 1, i * 2 + 1) self.assertEqual(graph.get_mc(), 19) graph.remove_edge(0, 1) self.assertEqual(graph.get_mc(), 20) graph.add_edge(0, 1, 1) self.assertEqual(graph.get_mc(), 21) graph.add_edge(0, 1, 1) self.assertEqual(graph.get_mc(), 21) graph.remove_node(0) self.assertEqual(graph.get_mc(), 22) graph.remove_node(0) self.assertEqual(graph.get_mc(), 22) graph.add_node(0) self.assertEqual(graph.get_mc(), 23) graph.add_node(0) self.assertEqual(graph.get_mc(), 23)
def test_add_edge(self): graph = DiGraph() for i in range(10): graph.add_node(i) for i in range(9): graph.add_edge(i, i + 1, i * 2 + 1) self.assertEqual(graph.e_size(), 9) graph.add_edge(9, 0, 5.5) self.assertEqual(graph.e_size(), 10) graph.add_edge(1, 3, 2.7) graph.add_edge(9, 4, 3) self.assertEqual(graph.e_size(), 12) graph.add_edge(9, 4, 3) self.assertEqual(graph.e_size(), 12) graph.add_edge(2, 2, 100) self.assertEqual(graph.e_size(), 12) graph.add_edge(6, 7, -3) self.assertEqual(graph.e_size(), 12) graph.add_edge(15, 8, 100) self.assertEqual(graph.e_size(), 12) graph.add_edge(0, 1, 10) self.assertEqual(graph.e_size(), 12)
def check0(): """ This function tests the naming (main methods of the DiGraph class, as defined in GraphInterface. :return: """ g = DiGraph() # creates an empty directed graph for n in range(4): g.add_node(n) g.add_edge(0, 1, 1) g.add_edge(1, 0, 1.1) g.add_edge(1, 2, 1.3) g.add_edge(2, 3, 1.1) g.add_edge(1, 3, 1.9) g.remove_edge(1, 3) g.add_edge(1, 3, 10) print(g.v_size()) # prints the __repr__ (func output) print(g.e_size()) # prints the __repr__ (func output) print(g.get_all_v()) # prints a dict with all the graph's vertices. print(g.all_in_edges_of_node(1)) print(g.all_out_edges_of_node(1)) g_algo = GraphAlgo(g) print(g_algo.shortest_path(0, 3)) g_algo.plot_graph()
def load_from_json(self, file_name: str) -> bool: self.string = file_name vertex = {} edges = {} try: with open(file_name, "r") as file: new_graph_dict = json.load(file) vertex = new_graph_dict["Nodes"] edges = new_graph_dict["Edges"] self.graph = DiGraph() for i in vertex: if "pos" not in i: i["pos"] = None self.graph.add_node(i["id"], i["pos"]) for e in edges: self.graph.add_edge(e["src"], e["dest"], e["w"]) except IOError as e: print(e) return False return True
def __init__(self, graph: DiGraph = DiGraph()): self.graph = graph self.string = "Graph"