You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by dk...@apache.org on 2018/05/30 14:37:35 UTC
[2/4] tinkerpop git commit: Implemented `ShortestPathVertexProgram`
and `ShortestPathVertexProgramStep`.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0ccedb67/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 199a4ba..e5efd7f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1222,6 +1222,9 @@ limitations under the License.
org/apache/tinkerpop/gremlin/process/computer/ranking/pagerank/PageRankVertexProgram.java
</include>
<include>
+ org/apache/tinkerpop/gremlin/process/computer/search/path/ShortestPathVertexProgram.java
+ </include>
+ <include>
org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java
</include>
<!-- traversal -->
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0ccedb67/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphPlayTest.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphPlayTest.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphPlayTest.java
index e0018fc..4828fef 100644
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphPlayTest.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphPlayTest.java
@@ -19,10 +19,10 @@
package org.apache.tinkerpop.gremlin.tinkergraph.structure;
import org.apache.tinkerpop.gremlin.process.computer.Computer;
-import org.apache.tinkerpop.gremlin.process.traversal.P;
-import org.apache.tinkerpop.gremlin.process.traversal.Pop;
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
+import org.apache.tinkerpop.gremlin.process.computer.ComputerResult;
+import org.apache.tinkerpop.gremlin.process.computer.Memory;
+import org.apache.tinkerpop.gremlin.process.computer.search.path.ShortestPathVertexProgram;
+import org.apache.tinkerpop.gremlin.process.traversal.*;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
@@ -212,23 +212,99 @@ public class TinkerGraphPlayTest {
@Test
@Ignore
public void testPlay7() throws Exception {
- /*TinkerGraph graph = TinkerGraph.open();
- graph.createIndex("name",Vertex.class);
- graph.io(GraphMLIo.build()).readGraph("/Users/marko/software/tinkerpop/tinkerpop3/data/grateful-dead.xml");*/
- //System.out.println(g.V().properties().key().groupCount().next());
- TinkerGraph graph = TinkerFactory.createModern();
- GraphTraversalSource g = graph.traversal();
- final List<Supplier<GraphTraversal<?, ?>>> traversals = Arrays.asList(
- () -> g.V().out().as("v").match(
- __.as("v").outE().count().as("outDegree"),
- __.as("v").inE().count().as("inDegree")).select("v", "outDegree", "inDegree").by(valueMap()).by().by().local(union(select("v"), select("inDegree", "outDegree")).unfold().fold())
- );
-
- traversals.forEach(traversal -> {
- logger.info("pre-strategy: {}", traversal.get());
- logger.info("post-strategy: {}", traversal.get().iterate());
- logger.info(TimeUtil.clockWithResult(50, () -> traversal.get().toList()).toString());
- });
+ final TinkerGraph graph = TinkerFactory.createModern();
+ final GraphTraversalSource g = graph.traversal();
+ final ShortestPathVertexProgram shortestPathByHops = ShortestPathVertexProgram.build()
+ .source(__.has("name", P.within("marko")))
+ .target(__.has("name","josh"))
+ .includeEdges(true)
+ .create(null);
+ final ShortestPathVertexProgram shortestPathByWeight = ShortestPathVertexProgram.build()
+ .source(__.has("name", P.within("marko")))
+ .target(__.has("name","josh"))
+ .distanceProperty("weight")
+ .includeEdges(true)
+ .create(null);
+/**/
+ System.out.println("Shortest path from marko to josh (by number of hops)\n--");
+ graph.compute().program(shortestPathByHops).submit().get().memory()
+ .<List<Path>>get(ShortestPathVertexProgram.SHORTEST_PATHS)
+ .forEach(System.out::println);
+ g.inject(graph.compute().program(shortestPathByHops).submit().get().memory()
+ .<List<Path>>get(ShortestPathVertexProgram.SHORTEST_PATHS))
+ .unfold().map(unfold().values("name","weight").fold())
+ .forEachRemaining(System.out::println);
+
+ System.out.println("\n\nShortest path from marko to josh (by weighted distance)\n--");
+ graph.compute().program(shortestPathByWeight).submit().get().memory()
+ .<List<Path>>get(ShortestPathVertexProgram.SHORTEST_PATHS)
+ .forEach(System.out::println);
+
+ g.inject(graph.compute().program(shortestPathByWeight).submit().get().memory()
+ .<List<Path>>get(ShortestPathVertexProgram.SHORTEST_PATHS))
+ .unfold().map(unfold().values("name","weight").fold())
+ .forEachRemaining(System.out::println);
+
+ System.out.println("----");
+
+ g.withComputer().V().hasLabel("person").both()//.dedup()
+ .shortestPath().to(has("name","peter"))
+ .path().forEachRemaining(System.out::println);
+
+ System.out.println("----");
+
+ g.withComputer().V().hasLabel("person")
+ .union(identity(), identity())
+ .shortestPath().to(has("name","peter"))
+ .forEachRemaining(System.out::println);
+
+ System.out.println("----");
+
+ g.withComputer().V().hasLabel("person")
+ .shortestPath().to(has("name","peter"))
+ .map(union(identity(), tail(Scope.local, 1)).fold()).forEachRemaining(System.out::println);
+
+ System.out.println("----");
+
+ g.withComputer()
+ .V().hasLabel("person")
+ .shortestPath().to(has("name","peter")).identity()
+ .forEachRemaining(System.out::println);
+
+ System.out.println("----");
+
+ g.withComputer()
+ .V().hasLabel("person").as("p")
+ .shortestPath().to(__.<Vertex>has("name","peter").where(neq("p")))
+ .forEachRemaining(System.out::println);
+
+ System.out.println("----");
+
+ g.withComputer()
+ .V()//.hasLabel("person")
+ .shortestPath().to(__.has("name","marko")).by(__.inE())
+ .forEachRemaining(System.out::println);
+
+ System.out.println("----");
+
+ g.withComputer()
+ .V()//.hasLabel("person")
+ .shortestPath().to(__.not(identity())).by(__.inE())
+ .forEachRemaining(System.out::println);
+
+ System.out.println("----");
+
+ g.withComputer()
+ .V().not(identity())
+ .shortestPath().by(__.inE())
+ .forEachRemaining(System.out::println);
+
+ System.out.println("----");
+
+ g.withComputer()
+ .V().not(identity())
+ .shortestPath().to(__.not(identity())).by(__.inE())
+ .forEachRemaining(System.out::println);
}
@Test