You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by ok...@apache.org on 2016/02/19 17:26:41 UTC
[10/27] incubator-tinkerpop git commit: little more work. saving what
I have for a big push next.
little more work. saving what I have for a big push next.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/010c9f34
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/010c9f34
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/010c9f34
Branch: refs/heads/master
Commit: 010c9f343df16d09266560631471147edb4f442f
Parents: d06329e
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Tue Feb 16 11:56:37 2016 -0700
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Tue Feb 16 11:56:37 2016 -0700
----------------------------------------------------------------------
.../ranking/pagerank/PageRankVertexProgram.java | 5 +-
.../decoration/VertexProgramStrategy.java | 64 ++++++++++----------
.../LambdaRestrictionStrategyTest.java | 1 +
3 files changed, 37 insertions(+), 33 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/010c9f34/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/ranking/pagerank/PageRankVertexProgram.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/ranking/pagerank/PageRankVertexProgram.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/ranking/pagerank/PageRankVertexProgram.java
index b627dd5..b0b4a93 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/ranking/pagerank/PageRankVertexProgram.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/ranking/pagerank/PageRankVertexProgram.java
@@ -31,6 +31,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
import org.apache.tinkerpop.gremlin.process.traversal.util.PureTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.util.ScriptTraversal;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
import org.apache.tinkerpop.gremlin.structure.Edge;
import org.apache.tinkerpop.gremlin.structure.Graph;
import org.apache.tinkerpop.gremlin.structure.Vertex;
@@ -59,8 +60,6 @@ public class PageRankVertexProgram extends StaticVertexProgram<Double> {
private static final String EDGE_TRAVERSAL = "gremlin.pageRankVertexProgram.edgeTraversal";
private static final String VERTEX_TRAVERSAL = "gremlin.pageRankVertexProgram.vertexTraversal";
-
- //private ConfigurationTraversal<Vertex, Edge> configurationTraversal;
private MessageScope.Local<Double> incidentMessageScope = MessageScope.Local.of(__::outE);
private MessageScope.Local<Double> countMessageScope = MessageScope.Local.of(new MessageScope.Local.ReverseTraversalSupplier(this.incidentMessageScope));
private PureTraversal<Vertex, Edge> edgeTraversal = null;
@@ -148,6 +147,8 @@ public class PageRankVertexProgram extends StaticVertexProgram<Double> {
vertex.property(VertexProperty.Cardinality.single, EDGE_COUNT, edgeCount);
messenger.sendMessage(this.incidentMessageScope, initialPageRank / edgeCount);
} else {
+ if (2 == memory.getIteration() && null != this.vertexTraversal && !TraversalUtil.test(vertex, this.vertexTraversal.getCompiled()))
+ return;
double newPageRank = IteratorUtils.reduce(messenger.receiveMessages(), 0.0d, (a, b) -> a + b);
newPageRank = (this.alpha * newPageRank) + ((1.0d - this.alpha) / this.vertexCountAsDouble);
vertex.property(VertexProperty.Cardinality.single, this.pageRankProperty, newPageRank);
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/010c9f34/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/VertexProgramStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/VertexProgramStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/VertexProgramStrategy.java
index 7d4d554..53ffcff 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/VertexProgramStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/VertexProgramStrategy.java
@@ -60,39 +60,41 @@ public final class VertexProgramStrategy extends AbstractTraversalStrategy<Trave
@Override
public void apply(final Traversal.Admin<?, ?> traversal) {
+ if (!(traversal.getParent() instanceof EmptyStep)) // VertexPrograms can only execute at the root level of a Traversal
+ return;
+
traversal.addTraverserRequirement(TraverserRequirement.BULK); // all graph computations require bulk
- if (traversal.getParent() instanceof EmptyStep) { // VertexPrograms can only execute at the root level of a Traversal
- if (traversal.getStartStep() instanceof GraphStep && (traversal.getStartStep().getNextStep() instanceof PageRankVertexProgramStep)) {
- final GraphStep<?, ?> graphStep = (GraphStep) traversal.getStartStep();
- final PageRankVertexProgramStep pageRankVertexProgramStep = (PageRankVertexProgramStep) traversal.getStartStep().getNextStep();
- if (!graphStep.returnsVertex())
- throw new VerificationException("The GraphStep previous to PageRankVertexStep must emit vertices: " + graphStep, traversal);
- pageRankVertexProgramStep.setGraphComputerFunction(this.graphComputerFunction);
- graphStep.getLabels().forEach(pageRankVertexProgramStep::addLabel);
- traversal.removeStep(0); // remove the graph step
- if (traversal.getSteps().size() == 1) // todo: in the future, this should just be a mapreduce job added to the PageRankVertexProgram step
- traversal.addStep(new IdentityStep<>(traversal));
- }
- if (null != this.graphComputerFunction) { // if the function is null, then its been serialized and thus, already in a graph computer
- Traversal.Admin<?, ?> computerTraversal = new DefaultTraversal<>();
- Step<?, ?> firstLegalOLAPStep = getFirstLegalOLAPStep(traversal.getStartStep());
- Step<?, ?> lastLegalOLAPStep = getLastLegalOLAPStep(traversal.getStartStep());
- if (!(firstLegalOLAPStep instanceof EmptyStep)) {
- int index = TraversalHelper.stepIndex(firstLegalOLAPStep, traversal);
- TraversalHelper.removeToTraversal(firstLegalOLAPStep, lastLegalOLAPStep.getNextStep(), (Traversal.Admin) computerTraversal);
- final TraversalVertexProgramStep traversalVertexProgramStep = new TraversalVertexProgramStep(traversal, computerTraversal);
- traversalVertexProgramStep.setGraphComputerFunction(this.graphComputerFunction);
- final ComputerResultStep computerResultStep = new ComputerResultStep(traversal, true);
- if (!lastLegalOLAPStep.getLabels().isEmpty())
- lastLegalOLAPStep.getLabels().forEach(computerResultStep::addLabel);
- traversal.addStep(index, traversalVertexProgramStep);
- traversal.addStep(index + 1, computerResultStep);
- }
- } else { // this is a total hack to trick the difference between TraversalVertexProgram via GraphComputer and via TraversalSource. :|
- traversal.setParent(new TraversalVertexProgramStep(EmptyTraversal.instance(), EmptyTraversal.instance()));
- ComputerVerificationStrategy.instance().apply(traversal);
- traversal.setParent(EmptyStep.instance());
+
+ if (traversal.getStartStep() instanceof GraphStep && (traversal.getStartStep().getNextStep() instanceof PageRankVertexProgramStep)) {
+ final GraphStep<?, ?> graphStep = (GraphStep) traversal.getStartStep();
+ final PageRankVertexProgramStep pageRankVertexProgramStep = (PageRankVertexProgramStep) traversal.getStartStep().getNextStep();
+ if (!graphStep.returnsVertex())
+ throw new VerificationException("The GraphStep previous to PageRankVertexStep must emit vertices: " + graphStep, traversal);
+ pageRankVertexProgramStep.setGraphComputerFunction(this.graphComputerFunction);
+ graphStep.getLabels().forEach(pageRankVertexProgramStep::addLabel);
+ traversal.removeStep(0); // remove the graph step
+ if (traversal.getSteps().size() == 1) // todo: in the future, this should just be a mapreduce job added to the PageRankVertexProgram step
+ traversal.addStep(new IdentityStep<>(traversal));
+ }
+ if (null != this.graphComputerFunction) { // if the function is null, then its been serialized and thus, already in a graph computer
+ Traversal.Admin<?, ?> computerTraversal = new DefaultTraversal<>();
+ Step<?, ?> firstLegalOLAPStep = getFirstLegalOLAPStep(traversal.getStartStep());
+ Step<?, ?> lastLegalOLAPStep = getLastLegalOLAPStep(traversal.getStartStep());
+ if (!(firstLegalOLAPStep instanceof EmptyStep)) {
+ int index = TraversalHelper.stepIndex(firstLegalOLAPStep, traversal);
+ TraversalHelper.removeToTraversal(firstLegalOLAPStep, lastLegalOLAPStep.getNextStep(), (Traversal.Admin) computerTraversal);
+ final TraversalVertexProgramStep traversalVertexProgramStep = new TraversalVertexProgramStep(traversal, computerTraversal);
+ traversalVertexProgramStep.setGraphComputerFunction(this.graphComputerFunction);
+ final ComputerResultStep computerResultStep = new ComputerResultStep(traversal, true);
+ if (!lastLegalOLAPStep.getLabels().isEmpty())
+ lastLegalOLAPStep.getLabels().forEach(computerResultStep::addLabel);
+ traversal.addStep(index, traversalVertexProgramStep);
+ traversal.addStep(index + 1, computerResultStep);
}
+ } else { // this is a total hack to trick the difference between TraversalVertexProgram via GraphComputer and via TraversalSource. :|
+ traversal.setParent(new TraversalVertexProgramStep(EmptyTraversal.instance(), EmptyTraversal.instance()));
+ ComputerVerificationStrategy.instance().apply(traversal);
+ traversal.setParent(EmptyStep.instance());
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/010c9f34/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategyTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategyTest.java
index 53693c2..4efca84 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategyTest.java
@@ -54,6 +54,7 @@ public class LambdaRestrictionStrategyTest {
{"order().by((a,b)->a.compareTo(b))", __.order().by((a, b) -> ((Integer) a).compareTo((Integer) b)), false},
{"order(local).by((a,b)->a.compareTo(b))", __.order(Scope.local).by((a, b) -> ((Integer) a).compareTo((Integer) b)), false},
{"__.choose(v->v.toString().equals(\"marko\"),__.out(),__.in())", __.choose(v -> v.toString().equals("marko"), __.out(), __.in()), false},
+ {"order(local).by(values,decr)", __.order(Scope.local).by(Column.values, (a, b) -> ((Double) a).compareTo((Double) b)), false},
//
{"order(local).by(values,decr)", __.order(Scope.local).by(Column.values, Order.decr), true},
{"order().by(label,decr)", __.order().by(T.label, Order.decr), true},