def test_incidence_matrix(self):
        g = DirectedGraph(8)
        g.add_random_edges(15)
        before = g.to_adjacency_list()
        g.from_incidence_matrix(g.to_incidence_matrix())
        after = g.to_adjacency_list()

        assert before == after
    def test_adjacency_list(self):
        g = DirectedGraph(8)
        g.add_random_edges(15)

        before = g.to_adjacency_list()
        g.from_adjacency_list(before)
        after = g.to_adjacency_list()

        assert before == after
def _page_rank_random_walk(g: DirectedGraph, d) -> Dict[int, float]:
    adj_l = g.to_adjacency_list()
    visited = {n: 0 for n in g.nodes}
    current_node = random.choice(list(g.nodes))
    N = 0
    while N < 100000:
        if random.random() > d and len(adj_l[current_node]) != 0:
            current_node = random.choice(list(adj_l[current_node]))
        else:
            current_node = random.choice(list(g.nodes))

        visited[current_node] += 1
        N += 1
    return {n: v / sum(visited.values()) for n, v in visited.items()}