Esempio n. 1
0
 def test_inherit_node(self):
     self.g = Graph(ref="name", type=VECTOR)
     obj = []
     for pes in persons:
         obj.append(Person(**pes))
     self.g.add_nodes_from_iterable(obj)
     self.assertEqual(obj, self.g.get_nodes)
Esempio n. 2
0
 def setUp(self):
     self.n = [Node(1), Node(2), Node(3), Node(4)]
     self.g = Graph()
     for node in self.n :
         self.g.add_node(node)
     self.g.add_edge(1, 3)
     self.g.add_edge(2, 4)
Esempio n. 3
0
 def test_iscyclic(self):
     self.g = Graph(type=VECTOR)
     for i in range(5):
         self.g.add_node(Node(i))
     self.edge_list = [(0,1),(0,2),(1,4),(1,3),(2,1),(2,3),(3,0),(4,3)]
     for x, y in self.edge_list:
         self.g.add_edge(x, y)
     self.assertTrue(self.g.is_cyclic())
Esempio n. 4
0
 def test_topological_sort(self):
     self.g = Graph(type=VECTOR)
     for i in range(6):
         self.g.add_node(Node(i))
     self.edge_list = [(5,2),(5,0),(4,0),(4,1),(2,3),(3,1)]
     for x, y in self.edge_list:
         self.g.add_edge(x, y)
     sort = [node.value for node in self.g.topological_sort()]
     self.assertEqual(sort , [4,5,2,0,3,1])
Esempio n. 5
0
 def test_DFS(self):
     self.g = Graph()
     self.g.add_nodes_from_iterable(range(4))
     self.g.add_edge(0, 1) 
     self.g.add_edge(0, 2) 
     self.g.add_edge(1, 2) 
     self.g.add_edge(2, 0) 
     self.g.add_edge(2, 3) 
     self.g.add_edge(3, 3) 
     self.assertEqual(self.g.DFS(2), [self.g[2], self.g[0], self.g[1], self.g[3]])
Esempio n. 6
0
 def test_multiple_random_nodes(self, n, e):
     with Graph() as r:
         nodes = [random.randint(1, 50) for _ in range(n)]
         edges = [(random.choice(nodes), random.choice(nodes),
                   random.randint(0, 50)) for _ in range(e)]
         r.add_nodes_from_iterable(nodes)
         r.add_edges_from_iterable(edges)
         for e in edges:
             r.connections[e[0]][e[1]].color = "red"
         r.display(layout="random", weighted=True, ax=ax[1, 1])
Esempio n. 7
0
 def test_custom_object(self):
     with Graph(ref="name", type=VECTOR) as h:
         obj = []
         for pes in persons:
             obj.append(Person(**pes))
         h.add_nodes_from_iterable(obj)
         h.add_edge("sam", "sarah")
         h.add_edge("sam", "jane")
         h.add_edge("frank", "jane")
         print(h["jane"].adjacent_nodes)
         h["sam"].color = "#ee2341"
         h["frank"].color = "green"
         h.display(layout="polygon", attr="sex")
Esempio n. 8
0
 def test_mst_vis(self):
     with Graph() as mst:
         mst.add_nodes_from_iterable(range(1, 9))
         edge_list = [(1, 2, 4), (1, 5, 2), (1, 4, 10), (2, 4, 8), (2, 3, 18), (3, 4, 11), (
             3, 8, 19), (4, 5, 5), (4, 7, 11), (4, 8, 9), (5, 6, 51), (6, 7, 1), (6, 8, 2), (7, 8, 23)]
         mst.add_edges_from_iterable(edge_list)
         mst[1].color = 'green'
         mst[5].color = '#32a8a4'
         mst[2].color = "#e299ff"
         mst.display(weighted=True, layout="polygon", ax=ax[0, 1])
         print(mst.graph_matrix)
         sub = minimum_spanning_tree(mst)
         sub.display(weighted=True, layout="polygon", ax=ax[1, 0])
         # plt.show()
         print(sub.graph_matrix)
Esempio n. 9
0
 def test_dijkstra_vis(self):
     with Graph(type='vector') as g:
         for i in range(6):
             g.add_node(Node(i))
         edges = [(0, 1, 2), (0, 2, 10), (1, 3, 10),
                  (1, 4, 8), (2, 5, 2), (3, 2, 7), (4, 5, 5)]
         for e in edges:
             g.add_edge(*e)
         # print(g.graph_matrix)
         print(g.DFS(0))
         cost = dijkstra(g, 0, 5, path=True)
         # print(cost)
         for i, c in enumerate(cost):
             if i < len(cost)-1:
                 edge = g.connections[g.get_node_id(
                     cost[i])][g.get_node_id(cost[i+1])]
                 edge.color = "red"
                 edge.fontsize = 0.5
             c.color = "green"
             c.radius = -0.5
         g.display(weighted=True, polygon_radius=1, ax=ax[0, 0])
Esempio n. 10
0
class Test(unittest.TestCase):

    def setUp(self):
        self.n = [Node(1), Node(2), Node(3), Node(4)]
        self.g = Graph()
        for node in self.n :
            self.g.add_node(node)
        self.g.add_edge(1, 3)
        self.g.add_edge(2, 4)

    def test_adjecent_matrix(self):
        shape = len(self.n)
        test_res =  np.zeros((shape, shape))
        test_res[0, 2] = 1
        test_res[1, 3] = 1
        test_res[2, 0] = 1
        test_res[3, 1] = 1
        res = self.g.graph_matrix == test_res
        self.assertTrue(np.all(res))


    def test_BFS(self):
        self.assertEqual(self.g.BFS(1), [self.g[1], self.g[3]])


    def test_iscyclic(self):
        self.g = Graph(type=VECTOR)
        for i in range(5):
            self.g.add_node(Node(i))
        self.edge_list = [(0,1),(0,2),(1,4),(1,3),(2,1),(2,3),(3,0),(4,3)]
        for x, y in self.edge_list:
            self.g.add_edge(x, y)
        self.assertTrue(self.g.is_cyclic())
    

    def test_topological_sort(self):
        self.g = Graph(type=VECTOR)
        for i in range(6):
            self.g.add_node(Node(i))
        self.edge_list = [(5,2),(5,0),(4,0),(4,1),(2,3),(3,1)]
        for x, y in self.edge_list:
            self.g.add_edge(x, y)
        sort = [node.value for node in self.g.topological_sort()]
        self.assertEqual(sort , [4,5,2,0,3,1])
    
    def test_inherit_node(self):
        self.g = Graph(ref="name", type=VECTOR)
        obj = []
        for pes in persons:
            obj.append(Person(**pes))
        self.g.add_nodes_from_iterable(obj)
        self.assertEqual(obj, self.g.get_nodes)

    def test_DFS(self):
        self.g = Graph()
        self.g.add_nodes_from_iterable(range(4))
        self.g.add_edge(0, 1) 
        self.g.add_edge(0, 2) 
        self.g.add_edge(1, 2) 
        self.g.add_edge(2, 0) 
        self.g.add_edge(2, 3) 
        self.g.add_edge(3, 3) 
        self.assertEqual(self.g.DFS(2), [self.g[2], self.g[0], self.g[1], self.g[3]])