def test_load_modern_graph(modern_graph_data_dir): image, ci = get_gs_image_on_ci_env() if ci: sess = graphscope.session( show_log=True, num_workers=1, k8s_gs_image=image, ) else: sess = graphscope.session( show_log=True, num_workers=1, ) graph = load_modern_graph(sess, modern_graph_data_dir) interactive = sess.gremlin(graph) queries = [ "g.V().has('name','marko').count()", "g.V().has('person','name','marko').count()", "g.V().has('person','name','marko').outE('created').count()", "g.V().has('person','name','marko').outE('created').inV().count()", "g.V().has('person','name','marko').out('created').count()", "g.V().has('person','name','marko').out('created').values('name').count()", ] for q in queries: result = interactive.execute(q).all().result()[0] assert result == 1
def test_demo_distribute(data_dir, modern_graph_data_dir): image, ci = get_gs_image_on_ci_env() if ci: sess = graphscope.session( show_log=True, num_workers=2, k8s_gs_image=image, ) else: sess = graphscope.session( show_log=True, num_workers=2, ) graph = load_ldbc(sess, data_dir) # Interactive engine interactive = sess.gremlin(graph) sub_graph = interactive.subgraph( # noqa: F841 'g.V().hasLabel("person").outE("knows")') person_count = (interactive.execute( 'g.V().hasLabel("person").outE("knows").bothV().dedup().count()').all( ).result()[0]) knows_count = (interactive.execute( 'g.V().hasLabel("person").outE("knows").count()').all().result()[0]) interactive2 = sess.gremlin(sub_graph) sub_person_count = interactive2.execute("g.V().count()").all().result()[0] sub_knows_count = interactive2.execute("g.E().count()").all().result()[0] assert person_count == sub_person_count assert knows_count == sub_knows_count # Analytical engine # project the projected graph to simple graph. simple_g = sub_graph.project_to_simple(v_label="person", e_label="knows") pr_result = graphscope.pagerank(simple_g, delta=0.8) tc_result = graphscope.triangles(simple_g) # add the PageRank and triangle-counting results as new columns to the property graph # FIXME: Add column to sub_graph sub_graph.add_column(pr_result, {"Ranking": "r"}) sub_graph.add_column(tc_result, {"TC": "r"}) # test subgraph on modern graph mgraph = load_modern_graph(sess, modern_graph_data_dir) # Interactive engine minteractive = sess.gremlin(mgraph) msub_graph = minteractive.subgraph( # noqa: F841 'g.V().hasLabel("person").outE("knows")') person_count = (minteractive.execute( 'g.V().hasLabel("person").outE("knows").bothV().dedup().count()').all( ).result()[0]) msub_interactive = sess.gremlin(msub_graph) sub_person_count = msub_interactive.execute( "g.V().count()").all().result()[0] assert person_count == sub_person_count # GNN engine sess.close()
def test_query_modern_graph(modern_graph_data_dir): gs_image, gie_manager_image = get_gs_image_on_ci_env() sess = graphscope.session( num_workers=1, k8s_gs_image=gs_image, k8s_gie_graph_manager_image=gie_manager_image, k8s_coordinator_cpu=0.5, k8s_coordinator_mem="2500Mi", k8s_vineyard_cpu=0.1, k8s_vineyard_mem="512Mi", k8s_engine_cpu=0.1, k8s_engine_mem="1500Mi", k8s_vineyard_shared_mem="2Gi", k8s_volumes=get_k8s_volumes(), ) graph = load_modern_graph(sess, modern_graph_data_dir) interactive = sess.gremlin(graph) queries = [ "g.V().has('name','marko').count()", "g.V().has('person','name','marko').count()", "g.V().has('person','name','marko').outE('created').count()", "g.V().has('person','name','marko').outE('created').inV().count()", "g.V().has('person','name','marko').out('created').count()", "g.V().has('person','name','marko').out('created').values('name').count()", ] for q in queries: result = interactive.execute(q).all().result()[0] assert result == 1
def test_traversal_modern_graph(modern_graph_data_dir): from gremlin_python.process.traversal import Order from gremlin_python.process.traversal import P gs_image, gie_manager_image = get_gs_image_on_ci_env() sess = graphscope.session( show_log=True, num_workers=1, k8s_gs_image=gs_image, k8s_gie_graph_manager_image=gie_manager_image, k8s_coordinator_cpu=0.5, k8s_coordinator_mem="2500Mi", k8s_vineyard_cpu=0.1, k8s_vineyard_mem="512Mi", k8s_engine_cpu=0.1, k8s_engine_mem="1500Mi", k8s_vineyard_shared_mem="2Gi", k8s_volumes=get_k8s_volumes(), ) graph = load_modern_graph(sess, modern_graph_data_dir) interactive = sess.gremlin(graph) g = interactive.traversal_source() assert g.V().has("name", "marko").count().toList()[0] == 1 assert g.V().has("person", "name", "marko").count().toList()[0] == 1 assert g.V().has("person", "name", "marko").outE("created").count().toList()[0] == 1 assert (g.V().has("person", "name", "marko").outE("created").inV().count().toList()[0] == 1) assert g.V().has("person", "name", "marko").out("created").count().toList()[0] == 1 assert (g.V().has( "person", "name", "marko").out("created").values("name").count().toList()[0] == 1) assert (g.V().hasLabel("person").has("age", P.gt(30)).order().by( "age", Order.desc).count().toList()[0] == 2)
def test_add_vertices_edges(gs_session_distributed, modern_graph_data_dir): graph = load_modern_graph(gs_session_distributed, modern_graph_data_dir) graph = graph.add_vertices( Loader(os.path.join(modern_graph_data_dir, "person.csv"), delimiter="|"), "person2", ["name", ("age", "int")], "id", ) assert "person2" in graph.schema.vertex_labels graph = graph.add_edges( Loader( os.path.join(modern_graph_data_dir, "knows.csv"), delimiter="|", ), "knows2", ["weight"], src_label="person2", dst_label="person2", ) assert "knows2" in graph.schema.edge_labels interactive = gs_session_distributed.gremlin(graph) g = interactive.traversal_source() assert g.V().count().toList()[0] == 10 assert g.E().count().toList()[0] == 8
def test_query_modern_graph(gs_session, modern_graph_data_dir): graph = load_modern_graph(gs_session, modern_graph_data_dir) interactive = gs_session.gremlin(graph) queries = [ "g.V().has('name','marko').count()", "g.V().has('person','name','marko').count()", "g.V().has('person','name','marko').outE('created').count()", "g.V().has('person','name','marko').outE('created').inV().count()", "g.V().has('person','name','marko').out('created').count()", "g.V().has('person','name','marko').out('created').values('name').count()", ] for q in queries: result = interactive.execute(q).all().result()[0] assert result == 1
def test_demo_distribute(gs_session_distributed, data_dir, modern_graph_data_dir): graph = load_ldbc(gs_session_distributed, data_dir) # Interactive engine interactive = gs_session_distributed.gremlin(graph) sub_graph = interactive.subgraph( # noqa: F841 'g.V().hasLabel("person").outE("knows")') person_count = (interactive.execute( 'g.V().hasLabel("person").outE("knows").bothV().dedup().count()').all( ).result()[0]) knows_count = (interactive.execute( 'g.V().hasLabel("person").outE("knows").count()').all().result()[0]) interactive2 = gs_session_distributed.gremlin(sub_graph) sub_person_count = interactive2.execute("g.V().count()").all().result()[0] sub_knows_count = interactive2.execute("g.E().count()").all().result()[0] assert person_count == sub_person_count assert knows_count == sub_knows_count # Analytical engine # project the projected graph to simple graph. simple_g = sub_graph.project_to_simple(v_label="person", e_label="knows") pr_result = graphscope.pagerank(simple_g, delta=0.8) tc_result = graphscope.triangles(simple_g) # add the PageRank and triangle-counting results as new columns to the property graph # FIXME: Add column to sub_graph sub_graph.add_column(pr_result, {"Ranking": "r"}) sub_graph.add_column(tc_result, {"TC": "r"}) # test subgraph on modern graph mgraph = load_modern_graph(gs_session_distributed, modern_graph_data_dir) # Interactive engine minteractive = gs_session_distributed.gremlin(mgraph) msub_graph = minteractive.subgraph( # noqa: F841 'g.V().hasLabel("person").outE("knows")') person_count = (minteractive.execute( 'g.V().hasLabel("person").outE("knows").bothV().dedup().count()').all( ).result()[0]) msub_interactive = gs_session_distributed.gremlin(msub_graph) sub_person_count = msub_interactive.execute( "g.V().count()").all().result()[0] assert person_count == sub_person_count
def test_traversal_modern_graph(gs_session, modern_graph_data_dir): from gremlin_python.process.traversal import Order from gremlin_python.process.traversal import P gs_image, gie_manager_image = get_gs_image_on_ci_env() graph = load_modern_graph(gs_session, modern_graph_data_dir) interactive = gs_session.gremlin(graph) g = interactive.traversal_source() assert g.V().has("name", "marko").count().toList()[0] == 1 assert g.V().has("person", "name", "marko").count().toList()[0] == 1 assert g.V().has("person", "name", "marko").outE("created").count().toList()[0] == 1 assert (g.V().has("person", "name", "marko").outE("created").inV().count().toList()[0] == 1) assert g.V().has("person", "name", "marko").out("created").count().toList()[0] == 1 assert (g.V().has( "person", "name", "marko").out("created").values("name").count().toList()[0] == 1) assert (g.V().hasLabel("person").has("age", P.gt(30)).order().by( "age", Order.desc).count().toList()[0] == 2)
def arrow_modern_graph(graphscope_session): graph = load_modern_graph(graphscope_session, prefix="{}/modern_graph".format(test_repo_dir)) yield graph graph.unload()
def test_demo_distribute(data_dir, modern_graph_data_dir): gs_image, gie_manager_image = get_gs_image_on_ci_env() sess = graphscope.session( num_workers=1, k8s_gs_image=gs_image, k8s_gie_graph_manager_image=gie_manager_image, k8s_coordinator_cpu=0.5, k8s_coordinator_mem="2500Mi", k8s_vineyard_cpu=0.1, k8s_vineyard_mem="512Mi", k8s_engine_cpu=0.1, k8s_engine_mem="1500Mi", k8s_etcd_cpu=2, k8s_vineyard_shared_mem="2Gi", k8s_volumes=get_k8s_volumes(), ) graph = load_ldbc(sess, data_dir) # Interactive engine interactive = sess.gremlin(graph) sub_graph = interactive.subgraph( # noqa: F841 'g.V().hasLabel("person").outE("knows")' ) person_count = ( interactive.execute( 'g.V().hasLabel("person").outE("knows").bothV().dedup().count()' ) .all() .result()[0] ) knows_count = ( interactive.execute('g.V().hasLabel("person").outE("knows").count()') .all() .result()[0] ) interactive2 = sess.gremlin(sub_graph) sub_person_count = interactive2.execute("g.V().count()").all().result()[0] sub_knows_count = interactive2.execute("g.E().count()").all().result()[0] assert person_count == sub_person_count assert knows_count == sub_knows_count # Analytical engine # project the projected graph to simple graph. simple_g = sub_graph.project_to_simple(v_label="person", e_label="knows") pr_result = graphscope.pagerank(simple_g, delta=0.8) tc_result = graphscope.triangles(simple_g) # add the PageRank and triangle-counting results as new columns to the property graph # FIXME: Add column to sub_graph sub_graph.add_column(pr_result, {"Ranking": "r"}) sub_graph.add_column(tc_result, {"TC": "r"}) # test subgraph on modern graph mgraph = load_modern_graph(sess, modern_graph_data_dir) # Interactive engine minteractive = sess.gremlin(mgraph) msub_graph = minteractive.subgraph( # noqa: F841 'g.V().hasLabel("person").outE("knows")' ) person_count = ( minteractive.execute( 'g.V().hasLabel("person").outE("knows").bothV().dedup().count()' ) .all() .result()[0] ) msub_interactive = sess.gremlin(msub_graph) sub_person_count = msub_interactive.execute("g.V().count()").all().result()[0] assert person_count == sub_person_count # GNN engine sess.close()