Hello, I have two graphs with ~65k vertices and ~26 million edges. The first one is without weights, and the second is weighted (Vertices and edges are the same.) I have no problem generating the first one. It takes about 2-3 minutes (I also generate edges, that's why it takes 2 minutes, I guess the overall process of adding edges is merely a few seconds.) Anyway, since my weighted graph has the same edges and vertices, with only weights for each edge, I don't want to generate edges from scratch. Here's the snippet: n_vertices = len(foo) weighted_graph = Graph() weighted_graph.add_vertex(n_vertices) weights = weighted_graph.new_edge_properpty("int16_t") for e in graph.edges(): # graph is my "non-weighted" graph. weight = get_weight(int(e.source())) weighted_graph.add_edge(int(e.source()), int(e.target())) weights[e] = weight When I return the above function, it is reasonably fast, however the edge indices don't match with those of graph (no weights), hence the weights are wrong. For example, the first edge of my graph is different from weighted_graph, and the corresponding weighted_graph's weight actually belongs to graph. Here is an example, graph edge_1 = [1, 40] weighted graph edge_1 = [30, 54] However the weight for weighted graph_edge_1 is actually graph edge_1's weight (probably as expected?). Is there a way to fix this? Also, I need to generate weighted_graph for at least 5-10 times, each with different weights (however the edges and vertices are remain the same, only weights change.) Is there a faster/better way to do this? I later on use this weighted_graph in a shortest path problem with negative_weights=True. Any help is is appreciated. Thanks!