예제 #1
0
 def test_search_vertex_array_not_directed(self):
     """Test search vertex array not directed."""
     graph = Graph(True, False)
     a = Vertex(0)
     b = Vertex(1)
     graph.add_vertex(a)
     graph.add_vertex(b)
     graph.create_array()
     graph.add_edge(a, a)
     graph.add_edge(a, b)
     self.assertEqual(graph.search_vertex(a), [0, 1], msg='Teste 1')
예제 #2
0
 def test_add_vertex_array_directed(self):
     """Test add vertex array directed."""
     graph = Graph(True, True)
     a = Vertex(0)
     b = Vertex(1)
     graph.add_vertex(a)
     graph.add_vertex(b)
     graph.create_array()
     graph.add_edge(a, a)
     graph.add_edge(b, b)
     self.assertEqual(graph.add_edge(a, b), True, msg='Teste 2')
예제 #3
0
    def test_not_eulerian_array(self):
        """Test not eulerian array."""
        graph = Graph(True, False)
        a = Vertex(0)
        b = Vertex(1)
        graph.add_vertex(a)
        graph.add_vertex(b)

        graph.create_array()

        graph.add_edge(a, a)
        graph.add_edge(a, b)

        self.assertEqual(graph.eulerian(), "Not is eulerian", msg='Teste 3')
예제 #4
0
 def test_search_vertex_list_not_directed(self):
     """Test search vertex list not directed."""
     graph = Graph(False, False)
     a = Vertex(0)
     b = Vertex(1)
     graph.add_vertex(a)
     graph.add_vertex(b)
     graph.add_edge(a, a)
     graph.add_edge(a, b)
     self.assertEqual(graph.search_vertex(a), [0, 1], msg='Teste 2')
예제 #5
0
 def test_add_vertex_list_directed(self):
     """Test add vertex list directed."""
     graph = Graph(False, True)
     a = Vertex(0)
     b = Vertex(1)
     graph.add_vertex(a)
     graph.add_vertex(b)
     graph.add_edge(a, a)
     graph.add_edge(b, b)
     self.assertEqual(graph.add_edge(a, b), True, msg='Teste 1')
예제 #6
0
def graph_from_user_ids(db, user_ids):
    # Create a graph of musical artists
    g = Graph()
    users = db.get_users(user_ids)
    for user in [u for u in users if u is not None]:
        # Get the data for all artists each user likes
        artists = []
        for favorite in user.favorites:
            track = db.get_track(favorite.track_id)
            genre = _genre_lumper(track.genre)
            if genre is not None:
                artist = db.get_user(track.artist_id)
                artists.append(artist)

                # Add the artist to the graph
                if not g.has_node(artist.user_id):
                    node_data = _create_node_data(artist, genre)
                    g.add_node(artist.user_id, node_data)
        
        # Add links between all artists
        artist_ids = list(set(artist.user_id for artist in artists))
        g.add_complete_links(artist_ids)
    return g
예제 #7
0
    def test_transitive_closing_array_directed(self):
        """Test."""
        graph = Graph(True, True)  # matriz direcionada
        a = Vertex(0)
        b = Vertex(1)
        c = Vertex(2)
        d = Vertex(3)

        graph.add_vertex(a)
        graph.add_vertex(b)
        graph.add_vertex(c)
        graph.add_vertex(d)

        graph.create_array()

        graph.add_edge(a, b)
        graph.add_edge(b, c)
        graph.add_edge(c, d)

        self.assertEqual(graph.transitive_closing(), True, msg='Teste 1')
예제 #8
0
    def test_strongly_connected_component_arry_directed(self):
        graph = Graph(True, True)  # matriz direcionada

        a = Vertex(0)
        b = Vertex(1)
        c = Vertex(2)
        d = Vertex(3)

        graph.add_vertex(a)
        graph.add_vertex(b)
        graph.add_vertex(c)
        graph.add_vertex(d)

        graph.create_array()

        graph.add_edge(a, b)
        graph.add_edge(b, a)
        graph.add_edge(b, c)
        graph.add_edge(c, d)
        graph.add_edge(d, c)

        self.assertEqual(graph.SCC(), True, msg='Teste 1')
예제 #9
0
    def test_algorithm_warshall_array_directed(self):
        """Test."""
        graph = Graph(True, True)  # matriz direcionada

        a = Vertex(0)
        b = Vertex(1)
        c = Vertex(2)
        d = Vertex(3)
        graph.add_vertex(a)
        graph.add_vertex(b)
        graph.add_vertex(c)
        graph.add_vertex(d)

        graph.create_array()

        graph.add_edge(a, d)
        graph.add_edge(b, a)
        graph.add_edge(b, c)
        graph.add_edge(c, a)
        graph.add_edge(c, d)
        graph.add_edge(d, c)

        self.assertEqual(graph.algorithm_warshall(), True, msg='Test 1')
예제 #10
0
    def test_connected_components_list_adjacency_not_directed(self):
        """Test connected components list adjacency not directed."""
        graph = Graph(False, False)  # list adjacency not directed
        # Create a graph given in the above diagram
        # 5 vertices numbered from 0 to 4

        a = Vertex(0)
        b = Vertex(1)
        c = Vertex(2)
        d = Vertex(3)
        e = Vertex(4)

        graph.add_vertex(a)
        graph.add_vertex(b)
        graph.add_vertex(c)
        graph.add_vertex(d)
        graph.add_vertex(e)

        graph.add_edge(a, b)
        graph.add_edge(c, d)
        graph.add_edge(d, e)

        self.assertEqual(graph.connected_components(), True, msg='Teste 1')
예제 #11
0
    def test_bfs_list_not_directed(self):
        """Test bfs list not directed."""
        graph = Graph(False, False)  # list adjacency not directed

        a = Vertex(1)
        b = Vertex(2)
        c = Vertex(3)
        d = Vertex(4)
        e = Vertex(5)
        f = Vertex(6)

        graph.add_vertex(a)
        graph.add_vertex(b)
        graph.add_vertex(c)
        graph.add_vertex(d)
        graph.add_vertex(e)
        graph.add_vertex(f)

        graph.add_edge(a, b)
        graph.add_edge(a, c)
        graph.add_edge(b, d)
        graph.add_edge(c, d)
        graph.add_edge(c, e)
        graph.add_edge(d, c)
        graph.add_edge(d, e)
        graph.add_edge(d, f)
        graph.add_edge(e, c)
        graph.add_edge(e, d)
        graph.add_edge(e, f)
        graph.add_edge(f, e)
        graph.add_edge(f, d)

        self.assertEqual(graph.bfs(a), True, msg='Teste 1')
예제 #12
0
 def test_eulerian_array_open(self):
     """Test eulerian array open."""
     graph = Graph(True, False)
     a = Vertex(0)
     b = Vertex(1)
     c = Vertex(2)
     d = Vertex(3)
     e = Vertex(4)
     f = Vertex(5)
     graph.add_vertex(a)
     graph.add_vertex(b)
     graph.add_vertex(c)
     graph.add_vertex(d)
     graph.add_vertex(e)
     graph.add_vertex(f)
     graph.create_array()
     graph.add_edge(a, a)
     graph.add_edge(b, b)
     graph.add_edge(c, c)
     graph.add_edge(d, d)
     graph.add_edge(a, b)
     graph.add_edge(a, c)
     graph.add_edge(d, e)
     graph.add_edge(d, f)
     graph.add_edge(e, f)
     self.assertEqual(graph.eulerian(), "Eulerian open", msg='Teste 2')