Example #1
0
 def test_connected_components_and_component(self):
     graph = Graph()
     for number in range(10):
         graph.add_node(number)
     for number in range(5):
         if number != 0:
             graph.add_edge(0, number, number)
             graph.add_edge(number, 0, number)
     for number in range(6, 10):
         if number != 6:
             graph.add_edge(6, number, number)
             graph.add_edge(number, 6, number)
     algo = Algo(graph)
     components = algo.connected_components()
     self.assertTrue(components.__contains__([0, 1, 2, 3, 4]))
     self.assertTrue(components.__contains__([6, 7, 8, 9]))
     self.assertTrue(components.__contains__([5]))
     component1 = algo.connected_component(0)
     component2 = algo.connected_component(6)
     component3 = algo.connected_component(5)
     self.assertEqual(component1, [0, 1, 2, 3, 4])
     self.assertEqual(component2, [6, 7, 8, 9])
     self.assertEqual(component3, [5])
     graph2 = Graph()
     algo.graph = graph2
     self.assertEqual([], algo.connected_components())
Example #2
0
    def load_from_json(self, file_name: str) -> bool:
        """
        loads the graph in JSON format to a file
        @param file_name: The path to the load file
        @return: True if the load was successful, False o.w.
        """
        try:
            with open(file_name, "r") as file:
                graph_dict = json.load(file)
                nodes = graph_dict.get("Nodes")
                edges = graph_dict.get("Edges")
                graph = Graph()
                tup = None
                for node_dict in nodes:
                    pos_string = node_dict.get("pos")
                    if pos_string is not None:
                        x = float(pos_string.split(",")[0])
                        y = float(pos_string.split(",")[1])
                        z = float(pos_string.split(",")[2])
                        tup = (x, y, z)

                    graph.add_node(node_dict.get("id"), tup)
                for edge_dict in edges:
                    src = edge_dict.get('src')
                    weight = edge_dict.get('w')
                    dest = edge_dict.get('dest')
                    graph.add_edge(src, dest, weight)
                self.graph = graph
                return True

        except IOError as e:
            return False
Example #3
0
 def test_plot(self):
     graph = Graph()
     graph2 = Graph()
     for number in range(3):
         graph.add_node(number, (number, number, number))
         graph2.add_node(number, (number, number, number))
     graph.add_edge(0, 1, 1)
     graph2.add_edge(0, 1, 1)
     graph.add_edge(1, 2, 1)
     graph2.add_edge(1, 2, 1)
     graph.add_edge(2, 0, 1)
     graph2.add_edge(2, 0, 1)
     self.assertEqual(graph, graph2)
     algo = Algo(graph)
     algo.plot_graph()
     x = 5
     self.assertEqual(graph, graph2)
Example #4
0
 def test_get_graph(self):
     graph = Graph()
     for number in range(10):
         graph.add_node(number)
     for number in range(10):
         graph.add_edge(0, number, 1)
     algo = Algo(graph)
     self.assertTrue(id(graph), id(algo.get_graph()))
Example #5
0
 def test_save_load(self):
     graph = Graph()
     for number in range(4):
         graph.add_node(number)
     for number in range(4):
         graph.add_edge(0, number, 1)
     algo = Algo(graph)
     self.assertTrue(algo.save_to_json("saved_graph"))
     self.assertFalse(algo.save_to_json(""))
     self.assertFalse(algo.load_from_json("python"))
     self.assertTrue(algo.load_from_json("saved_graph"))
     self.assertEqual(graph, algo.get_graph())
 def test_shortes_path(self):
     graph = Graph()
     for number in range(10):
         graph.add_node(number)
     for number in range(10):
         graph.add_edge(0, number, 5)
     for number in range(10):
         graph.add_edge(number, 0, 5)
     algo = Algo(graph)
     for number in range(9):
         self.assertNotEqual(float('inf'), algo.shortest_path(number, number + 1)[0])
     self.assertEqual(10, algo.shortest_path(1, 3)[0])
     graph.remove_edge(0, 3)
     self.assertEqual(float('inf'), algo.shortest_path(1, 3)[0])
     path = [4, 0, 2]
     path2 = algo.shortest_path(4, 2)[1]
     self.assertTrue(path.__eq__(algo.shortest_path(4, 2)[1]))
Example #7
0
    def reversed_graph(self):
        """

        :return: transposed version of the graph
        """
        graph = self.get_graph()
        reveresed = Graph()
        for node_id in graph.get_all_v():
            node = self.get_graph().get_all_v().get(node_id)
            if node.pos is not None:
                reveresed.add_node(node.get_key(), node.pos)
            else:
                reveresed.add_node(node.get_key())
        for node_id in graph.get_all_v():
            node = self.get_graph().get_all_v().get(node_id)
            for key in node.out_edges.keys():
                reveresed.add_edge(key, node.get_key(), 0)
        return reveresed