def test_subgraph_extraction_multi_column(graph_file): M = utils.read_csv_for_nx(graph_file) cu_M = cudf.DataFrame() cu_M["src_0"] = cudf.Series(M["0"]) cu_M["dst_0"] = cudf.Series(M["1"]) cu_M["src_1"] = cu_M["src_0"] + 1000 cu_M["dst_1"] = cu_M["dst_0"] + 1000 G1 = cugraph.Graph() G1.from_cudf_edgelist(cu_M, source=["src_0", "src_1"], destination=["dst_0", "dst_1"]) verts = cudf.Series([0, 1, 17]) verts_G1 = cudf.DataFrame() verts_G1['v_0'] = verts verts_G1['v_1'] = verts + 1000 sG1 = cugraph.subgraph(G1, verts_G1) G2 = cugraph.Graph() G2.from_cudf_edgelist(cu_M, source="src_0", destination="dst_0") sG2 = cugraph.subgraph(G2, verts) # FIXME: Replace with multi-column view_edge_list() edgelist_df = sG1.edgelist.edgelist_df edgelist_df_res = sG1.unrenumber(edgelist_df, "src") edgelist_df_res = sG1.unrenumber(edgelist_df_res, "dst") for i in range(len(edgelist_df_res)): assert sG2.has_edge(edgelist_df_res["0_src"].iloc[i], edgelist_df_res["0_dst"].iloc[i])
def test_subgraph_extraction_Graph_nx(graph_file): gc.collect() directed = False verts = np.zeros(3, dtype=np.int32) verts[0] = 0 verts[1] = 1 verts[2] = 17 M = utils.read_csv_for_nx(graph_file) if directed: G = nx.from_pandas_edgelist(M, source="0", target="1", create_using=nx.DiGraph()) else: G = nx.from_pandas_edgelist(M, source="0", target="1", create_using=nx.Graph()) nx_sub = nx.subgraph(G, verts) cu_verts = cudf.Series(verts) cu_sub = cugraph.subgraph(G, cu_verts) for (u, v) in cu_sub.edges(): assert nx_sub.has_edge(u, v)
def cugraph_call(M, verts): G = cugraph.Graph() rows = cudf.Series(M.row) cols = cudf.Series(M.col) G.add_edge_list(rows, cols, None) cu_verts = cudf.Series(verts) return cugraph.subgraph(G, cu_verts)
def cugraph_call(M, verts): G = cugraph.DiGraph() cu_M = cudf.DataFrame() cu_M['src'] = cudf.Series(M['0']) cu_M['dst'] = cudf.Series(M['1']) G.from_cudf_edgelist(cu_M, source='src', destination='dst') cu_verts = cudf.Series(verts) return cugraph.subgraph(G, cu_verts)
def cugraph_call(M, verts): G = cugraph.DiGraph() cu_M = cudf.DataFrame() cu_M['src'] = cudf.Series(M.row) cu_M['dst'] = cudf.Series(M.col) G.from_cudf_edgelist(cu_M, source='src', target='dst') cu_verts = cudf.Series(verts) return cugraph.subgraph(G, cu_verts)
def cugraph_call(M, verts, directed=True): # directed is used to create either a Graph or DiGraph so the returned # cugraph can be compared to nx graph of same type. if directed: G = cugraph.DiGraph() else: G = cugraph.Graph() cu_M = cudf.DataFrame() cu_M["src"] = cudf.Series(M["0"]) cu_M["dst"] = cudf.Series(M["1"]) G.from_cudf_edgelist(cu_M, source="src", destination="dst") cu_verts = cudf.Series(verts) return cugraph.subgraph(G, cu_verts)
def test_subgraph_extraction_graph_not_renumbered(): """ Ensure subgraph() works with a Graph that has not been renumbered """ graph_file = utils.RAPIDS_DATASET_ROOT_DIR_PATH / "karate.csv" gdf = cudf.read_csv(graph_file, delimiter=" ", dtype=["int32", "int32", "float32"], header=None) verts = np.array([0, 1, 2], dtype=np.int32) sverts = cudf.Series(verts) G = cugraph.Graph() G.from_cudf_edgelist(gdf, source="0", destination="1", renumber=False) Sg = cugraph.subgraph(G, sverts) assert Sg.number_of_vertices() == 3 assert Sg.number_of_edges() == 3