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 2017/10/13 14:48:50 UTC
[02/12] tinkerpop git commit: I wrote a small parser that is able to
extract variables from an exp4j equation. So far,
it is pretty durable. This is a much cleaner way of determining variables than
via label, side-effect, and map analysis. However, this
I wrote a small parser that is able to extract variables from an exp4j equation. So far, it is pretty durable. This is a much cleaner way of determining variables than via label, side-effect, and map analysis. However, this means that the by()-modulations are with respects to the order in which the variables are contained in the equation.
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/624a8d70
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/624a8d70
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/624a8d70
Branch: refs/heads/master
Commit: 624a8d706e150cc15dc2412d66d3ac9a61b90682
Parents: 6f1a1f7
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Oct 4 10:27:48 2017 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed Oct 4 10:27:48 2017 -0600
----------------------------------------------------------------------
.../process/traversal/step/map/MathStep.java | 35 +++++++++++++++-----
.../structure/TinkerGraphPlayTest.java | 2 +-
2 files changed, 27 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/624a8d70/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MathStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MathStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MathStep.java
index 645ea06..aec395c 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MathStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MathStep.java
@@ -28,7 +28,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.ByModulating;
import org.apache.tinkerpop.gremlin.process.traversal.step.Scoping;
import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalRing;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
@@ -51,14 +50,7 @@ public final class MathStep<S> extends MapStep<S, Double> implements ByModulatin
public MathStep(final Traversal.Admin traversal, final String equation) {
super(traversal);
this.equation = equation;
- final Set<String> labels = TraversalHelper.getLabels(TraversalHelper.getRootTraversal(this.getTraversal()));
- this.variables = new LinkedHashSet<>();
- for (final String label : labels) {
- if (this.equation.contains(label))
- this.variables.add(label);
- }
- if (this.equation.contains(CURRENT))
- this.variables.add(CURRENT);
+ this.variables = MathStep.getVariables(this.equation);
this.expression = new ExpressionBuilder(this.equation)
.variables(this.variables)
.build();
@@ -125,4 +117,29 @@ public final class MathStep<S> extends MapStep<S, Double> implements ByModulatin
public Set<String> getScopeKeys() {
return this.variables;
}
+
+ private static final Set<String> getVariables(final String equation) {
+ final StringBuilder builder = new StringBuilder();
+ final char[] chars = equation.toCharArray();
+ for (int i = 0; i < chars.length; i++) {
+ if ('+' == chars[i] || '-' == chars[i] || '*' == chars[i] ||
+ '/' == chars[i] || '^' == chars[i] || '%' == chars[i] ||
+ '(' == chars[i] || ')' == chars[i])
+ builder.append(" ");
+ else
+ builder.append(chars[i]);
+ }
+ final Set<String> variables = new LinkedHashSet<>();
+ for (final String slot : builder.toString().split(" ")) {
+ if (!slot.trim().isEmpty() && !slot.equals("abs") && !slot.equals("acos") &&
+ !slot.equals("asin") && !slot.equals("atan") && !slot.equals("cbrt") &&
+ !slot.equals("ceil") && !slot.equals("cos") && !slot.equals("cosh") &&
+ !slot.equals("exp") && !slot.equals("floor") && !slot.equals("log") &&
+ !slot.equals("log10") && !slot.equals("log2") && !slot.equals("sin") &&
+ !slot.equals("sinh") && !slot.equals("sqrt") && !slot.equals("tan") &&
+ !slot.equals("tanh") && !slot.equals("signum"))
+ variables.add(slot);
+ }
+ return variables;
+ }
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/624a8d70/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 0af81bd..b93f7ab 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
@@ -71,7 +71,7 @@ public class TinkerGraphPlayTest {
public void testPlay8() throws Exception {
Graph graph = TinkerFactory.createModern();
GraphTraversalSource g = graph.traversal();
- System.out.println(g.V().as("a").out("knows").math("((a ^ _) / a)").by("age").by(bothE().count()).toList());
+ System.out.println(g.withSideEffect("x",10.1d).V().as("a").out("knows").math("((a ^ _) / a) + x").by("age").by(bothE().count()).by().toList());
}
@Test