Repository: tinkerpop
Updated Branches:
  refs/heads/TINKERPOP-1278 2d1b087a1 -> fde51ac58


Lots of good stuff here. Anonymous traversals are defined dynamically by the 
XXXTraversalSource so that translators can be generically written without being 
concious of the __ class type. Added Translator.addSpawnStep() which is for 
g.V(), g.addV(), etc. and has different behaviors than addSouce() and 
addStep(). DefaultTraversalStrategies.getStrategies(class) is now efficient and 
not a linear scan on each call. Lists are cached now (transient though). This 
model is really clean and solid -- that is, the CreationStrategy model.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/fde51ac5
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/fde51ac5
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/fde51ac5

Branch: refs/heads/TINKERPOP-1278
Commit: fde51ac58edf1f138fc4f57d25404bdb9ed58948
Parents: 2d1b087
Author: Marko A. Rodriguez <[email protected]>
Authored: Tue Jun 14 09:24:37 2016 -0600
Committer: Marko A. Rodriguez <[email protected]>
Committed: Tue Jun 14 09:24:37 2016 -0600

----------------------------------------------------------------------
 .../process/traversal/TraversalSource.java      | 62 +++++++++++---------
 .../process/traversal/TraversalStrategy.java    |  4 +-
 .../dsl/graph/GraphTraversalSource.java         | 41 +++++--------
 .../gremlin/process/traversal/dsl/graph/__.java | 23 ++++----
 .../dsl/graph/script/ScriptGraphTraversal.java  |  2 +-
 .../script/ScriptGraphTraversalSource.java      |  8 +--
 .../strategy/creation/TranslationStrategy.java  | 50 ++++++++++++++--
 .../util/DefaultTraversalStrategies.java        | 26 +++++++-
 .../process/traversal/util/Translator.java      | 20 ++++---
 .../process/traversal/util/TraversalHelper.java | 10 ++++
 .../gremlin/groovy/GroovyTranslator.java        | 29 +++------
 .../gremlin/python/PythonTranslator.java        | 13 ++--
 .../jython/gremlin_python/gremlin_python.py     |  2 +
 .../tinkerpop/gremlin/VariantGraphProvider.java | 23 +++-----
 .../gremlin/python/PythonProvider.java          |  3 +-
 15 files changed, 184 insertions(+), 132 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fde51ac5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalSource.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalSource.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalSource.java
index e29f20a..972dcbe 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalSource.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalSource.java
@@ -52,6 +52,8 @@ import java.util.function.UnaryOperator;
  */
 public interface TraversalSource extends Cloneable {
 
+    public static final String SET_ANONYMOUS_TRAVERSAL_FUNCTION = 
"setAnonymousTraversalFunction";
+
     /**
      * Get the {@link TraversalStrategies} associated with this traversal 
source.
      *
@@ -101,7 +103,6 @@ public interface TraversalSource extends Cloneable {
      * @return a new traversal source with updated strategies
      */
     public default TraversalSource withComputer(final Computer computer) {
-        TraversalHelper.addSourceToCreationStrategies(this, computer);
         Class<? extends GraphComputer> graphComputerClass;
         try {
             graphComputerClass = computer.apply(this.getGraph()).getClass();
@@ -114,12 +115,13 @@ public interface TraversalSource extends Cloneable {
         for (int i = 0; i < graphComputerStrategies.size(); i++) {
             traversalStrategies[i + 1] = graphComputerStrategies.get(i);
         }
-        return this.withStrategies(traversalStrategies);
+        final TraversalSource clone = this.withStrategies(traversalStrategies);
+        TraversalHelper.addSourceToCreationStrategies(clone, computer);
+        return clone;
     }
 
-    public default TraversalSource withTranslator(final Translator<?> 
translator) {
-        TraversalHelper.addSourceToCreationStrategies(this, translator);
-        return this.withStrategies(new TranslationStrategy(translator));
+    public default TraversalSource withTranslator(final Translator translator) 
{
+        return this.withStrategies(new TranslationStrategy(translator, null));
     }
 
     /**
@@ -130,7 +132,6 @@ public interface TraversalSource extends Cloneable {
      * @return a new traversal source with updated strategies
      */
     public default TraversalSource withComputer(final Class<? extends 
GraphComputer> graphComputerClass) {
-        TraversalHelper.addSourceToCreationStrategies(this, 
graphComputerClass);
         return this.withComputer(Computer.compute(graphComputerClass));
     }
 
@@ -141,7 +142,6 @@ public interface TraversalSource extends Cloneable {
      * @return a new traversal source with updated strategies
      */
     public default TraversalSource withComputer() {
-        TraversalHelper.addSourceToCreationStrategies(this);
         return this.withComputer(Computer.compute());
     }
 
@@ -155,8 +155,8 @@ public interface TraversalSource extends Cloneable {
      * @return a new traversal source with updated strategies
      */
     public default <A> TraversalSource withSideEffect(final String key, final 
Supplier<A> initialValue, final BinaryOperator<A> reducer) {
-        TraversalHelper.addSourceToCreationStrategies(this, key, initialValue, 
reducer);
         final TraversalSource clone = this.clone();
+        TraversalHelper.addSourceToCreationStrategies(clone, key, 
initialValue, reducer);
         SideEffectStrategy.addSideEffect(clone.getStrategies(), key, (A) 
initialValue, reducer);
         return clone;
     }
@@ -171,8 +171,8 @@ public interface TraversalSource extends Cloneable {
      * @return a new traversal source with updated strategies
      */
     public default <A> TraversalSource withSideEffect(final String key, final 
A initialValue, final BinaryOperator<A> reducer) {
-        TraversalHelper.addSourceToCreationStrategies(this, key, initialValue, 
reducer);
         final TraversalSource clone = this.clone();
+        TraversalHelper.addSourceToCreationStrategies(clone, key, 
initialValue, reducer);
         SideEffectStrategy.addSideEffect(clone.getStrategies(), key, 
initialValue, reducer);
         return clone;
     }
@@ -186,8 +186,8 @@ public interface TraversalSource extends Cloneable {
      * @return a new traversal source with updated strategies
      */
     public default <A> TraversalSource withSideEffect(final String key, final 
Supplier<A> initialValue) {
-        TraversalHelper.addSourceToCreationStrategies(this, key, initialValue);
         final TraversalSource clone = this.clone();
+        TraversalHelper.addSourceToCreationStrategies(clone, key, 
initialValue);
         SideEffectStrategy.addSideEffect(clone.getStrategies(), key, 
initialValue, null);
         return clone;
     }
@@ -201,8 +201,8 @@ public interface TraversalSource extends Cloneable {
      * @return a new traversal source with updated strategies
      */
     public default <A> TraversalSource withSideEffect(final String key, final 
A initialValue) {
-        TraversalHelper.addSourceToCreationStrategies(this, key, initialValue);
         final TraversalSource clone = this.clone();
+        TraversalHelper.addSourceToCreationStrategies(clone, key, 
initialValue);
         SideEffectStrategy.addSideEffect(clone.getStrategies(), key, 
initialValue, null);
         return clone;
     }
@@ -217,8 +217,9 @@ public interface TraversalSource extends Cloneable {
      * @return a new traversal source with updated strategies
      */
     public default <A> TraversalSource withSack(final Supplier<A> 
initialValue, final UnaryOperator<A> splitOperator, final BinaryOperator<A> 
mergeOperator) {
-        TraversalHelper.addSourceToCreationStrategies(this, initialValue, 
splitOperator, mergeOperator);
-        return 
this.withStrategies(SackStrategy.<A>build().initialValue(initialValue).splitOperator(splitOperator).mergeOperator(mergeOperator).create());
+        final TraversalSource clone = 
this.withStrategies(SackStrategy.<A>build().initialValue(initialValue).splitOperator(splitOperator).mergeOperator(mergeOperator).create());
+        TraversalHelper.addSourceToCreationStrategies(clone, initialValue, 
splitOperator, mergeOperator);
+        return clone;
     }
 
     /**
@@ -231,8 +232,9 @@ public interface TraversalSource extends Cloneable {
      * @return a new traversal source with updated strategies
      */
     public default <A> TraversalSource withSack(final A initialValue, final 
UnaryOperator<A> splitOperator, final BinaryOperator<A> mergeOperator) {
-        TraversalHelper.addSourceToCreationStrategies(this, initialValue, 
splitOperator, mergeOperator);
-        return this.withStrategies(SackStrategy.<A>build().initialValue(new 
ConstantSupplier<>(initialValue)).splitOperator(splitOperator).mergeOperator(mergeOperator).create());
+        final TraversalSource clone = 
this.withStrategies(SackStrategy.<A>build().initialValue(new 
ConstantSupplier<>(initialValue)).splitOperator(splitOperator).mergeOperator(mergeOperator).create());
+        TraversalHelper.addSourceToCreationStrategies(clone, initialValue, 
splitOperator, mergeOperator);
+        return clone;
     }
 
     /**
@@ -243,8 +245,9 @@ public interface TraversalSource extends Cloneable {
      * @return a new traversal source with updated strategies
      */
     public default <A> TraversalSource withSack(final A initialValue) {
-        TraversalHelper.addSourceToCreationStrategies(this, initialValue);
-        return this.withStrategies(SackStrategy.<A>build().initialValue(new 
ConstantSupplier<>(initialValue)).create());
+        final TraversalSource clone = 
this.withStrategies(SackStrategy.<A>build().initialValue(new 
ConstantSupplier<>(initialValue)).create());
+        TraversalHelper.addSourceToCreationStrategies(clone, initialValue);
+        return clone;
     }
 
     /**
@@ -255,8 +258,9 @@ public interface TraversalSource extends Cloneable {
      * @return a new traversal source with updated strategies
      */
     public default <A> TraversalSource withSack(final Supplier<A> 
initialValue) {
-        TraversalHelper.addSourceToCreationStrategies(this, initialValue);
-        return 
this.withStrategies(SackStrategy.<A>build().initialValue(initialValue).create());
+        final TraversalSource clone = 
this.withStrategies(SackStrategy.<A>build().initialValue(initialValue).create());
+        TraversalHelper.addSourceToCreationStrategies(clone, initialValue);
+        return clone;
     }
 
     /**
@@ -268,8 +272,9 @@ public interface TraversalSource extends Cloneable {
      * @return a new traversal source with updated strategies
      */
     public default <A> TraversalSource withSack(final Supplier<A> 
initialValue, final UnaryOperator<A> splitOperator) {
-        TraversalHelper.addSourceToCreationStrategies(this, initialValue, 
splitOperator);
-        return 
this.withStrategies(SackStrategy.<A>build().initialValue(initialValue).splitOperator(splitOperator).create());
+        final TraversalSource clone = 
this.withStrategies(SackStrategy.<A>build().initialValue(initialValue).splitOperator(splitOperator).create());
+        TraversalHelper.addSourceToCreationStrategies(clone, initialValue, 
splitOperator);
+        return clone;
     }
 
     /**
@@ -281,8 +286,9 @@ public interface TraversalSource extends Cloneable {
      * @return a new traversal source with updated strategies
      */
     public default <A> TraversalSource withSack(final A initialValue, final 
UnaryOperator<A> splitOperator) {
-        TraversalHelper.addSourceToCreationStrategies(this, initialValue, 
splitOperator);
-        return this.withStrategies(SackStrategy.<A>build().initialValue(new 
ConstantSupplier<>(initialValue)).splitOperator(splitOperator).create());
+        final TraversalSource clone = 
this.withStrategies(SackStrategy.<A>build().initialValue(new 
ConstantSupplier<>(initialValue)).splitOperator(splitOperator).create());
+        TraversalHelper.addSourceToCreationStrategies(clone, initialValue, 
splitOperator);
+        return clone;
     }
 
     /**
@@ -294,8 +300,9 @@ public interface TraversalSource extends Cloneable {
      * @return a new traversal source with updated strategies
      */
     public default <A> TraversalSource withSack(final Supplier<A> 
initialValue, final BinaryOperator<A> mergeOperator) {
-        TraversalHelper.addSourceToCreationStrategies(this, initialValue, 
mergeOperator);
-        return 
this.withStrategies(SackStrategy.<A>build().initialValue(initialValue).mergeOperator(mergeOperator).create());
+        final TraversalSource clone = 
this.withStrategies(SackStrategy.<A>build().initialValue(initialValue).mergeOperator(mergeOperator).create());
+        TraversalHelper.addSourceToCreationStrategies(clone, initialValue, 
mergeOperator);
+        return clone;
     }
 
     /**
@@ -307,8 +314,9 @@ public interface TraversalSource extends Cloneable {
      * @return a new traversal source with updated strategies
      */
     public default <A> TraversalSource withSack(final A initialValue, final 
BinaryOperator<A> mergeOperator) {
-        TraversalHelper.addSourceToCreationStrategies(this, initialValue, 
mergeOperator);
-        return this.withStrategies(SackStrategy.<A>build().initialValue(new 
ConstantSupplier<>(initialValue)).mergeOperator(mergeOperator).create());
+        final TraversalSource clone = 
this.withStrategies(SackStrategy.<A>build().initialValue(new 
ConstantSupplier<>(initialValue)).mergeOperator(mergeOperator).create());
+        TraversalHelper.addSourceToCreationStrategies(clone, initialValue, 
mergeOperator);
+        return clone;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fde51ac5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategy.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategy.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategy.java
index 1241ef6..f7f460f 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategy.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategy.java
@@ -108,7 +108,9 @@ public interface TraversalStrategy<S extends 
TraversalStrategy> extends Serializ
                 return 0;
         }
 
-        public void addStep(final Traversal.Admin<?,?> traversal, final String 
stepName, final Object... arguments);
+        public void addStep(final Traversal.Admin<?, ?> traversal, final 
String stepName, final Object... arguments);
+
+        public void addSpawnStep(final Traversal.Admin<?, ?> traversal, final 
String stepName, final Object... arguments);
 
         public void addSource(final TraversalSource traversalSource, final 
String withName, final Object... arguments);
     }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fde51ac5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
index 0628aa9..3a36610 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
@@ -28,6 +28,8 @@ import 
org.apache.tinkerpop.gremlin.process.traversal.engine.ComputerTraversalEn
 import 
org.apache.tinkerpop.gremlin.process.traversal.engine.StandardTraversalEngine;
 import 
org.apache.tinkerpop.gremlin.process.traversal.step.map.AddVertexStartStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.GraphStep;
+import 
org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.InjectStep;
+import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.creation.TranslationStrategy;
 import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.RequirementsStrategy;
 import 
org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
 import org.apache.tinkerpop.gremlin.process.traversal.util.Translator;
@@ -57,9 +59,9 @@ public class GraphTraversalSource implements TraversalSource {
     protected TraversalStrategies strategies;
 
     public GraphTraversalSource(final Graph graph, final TraversalStrategies 
traversalStrategies) {
-        __.setAnonymousTraversalSupplier(null);
         this.graph = graph;
         this.strategies = traversalStrategies;
+        __.setAnonymousTraversalFunction(null); // TODO: work to remove
     }
 
     public GraphTraversalSource(final Graph graph) {
@@ -96,8 +98,8 @@ public class GraphTraversalSource implements TraversalSource {
     //// CONFIGURATIONS
 
     @Override
-    public GraphTraversalSource withTranslator(final Translator<?> translator) 
{
-        return (GraphTraversalSource) 
TraversalSource.super.withTranslator(translator);
+    public GraphTraversalSource withTranslator(final Translator translator) {
+        return this.withStrategies(new TranslationStrategy(translator, 
__.class));
     }
 
     @Override
@@ -187,10 +189,10 @@ public class GraphTraversalSource implements 
TraversalSource {
     }
 
     public GraphTraversalSource withBulk(final boolean useBulk) {
-        TraversalHelper.addSourceToCreationStrategies(this, useBulk);
         if (!useBulk) {
             final GraphTraversalSource clone = this.clone();
             RequirementsStrategy.addRequirements(clone.strategies, 
TraverserRequirement.ONE_BULK);
+            TraversalHelper.addSourceToCreationStrategies(clone, useBulk);
             return clone;
         } else {
             return this;
@@ -198,9 +200,9 @@ public class GraphTraversalSource implements 
TraversalSource {
     }
 
     public GraphTraversalSource withPath() {
-        TraversalHelper.addSourceToCreationStrategies(this);
         final GraphTraversalSource clone = this.clone();
         RequirementsStrategy.addRequirements(clone.strategies, 
TraverserRequirement.PATH);
+        TraversalHelper.addSourceToCreationStrategies(clone);
         return clone;
     }
 
@@ -211,53 +213,40 @@ public class GraphTraversalSource implements 
TraversalSource {
      */
     @Deprecated
     public GraphTraversal<Vertex, Vertex> addV(final Object... keyValues) {
-        TraversalStrategies temp = this.strategies;
-        this.strategies = this.strategies.clone();
-        TraversalHelper.addSourceToCreationStrategies(this, keyValues);
         final GraphTraversal.Admin<Vertex, Vertex> traversal = 
this.generateTraversal();
-        this.strategies = temp;
+        TraversalHelper.addSpawnStepToCreationStrategies(traversal, keyValues);
         traversal.addStep(new AddVertexStartStep(traversal, null));
         ((AddVertexStartStep) 
traversal.getEndStep()).addPropertyMutations(keyValues);
         return traversal;
     }
 
     public GraphTraversal<Vertex, Vertex> addV(final String label) {
-        TraversalStrategies temp = this.strategies;
-        this.strategies = this.strategies.clone();
-        TraversalHelper.addSourceToCreationStrategies(this, label);
         final GraphTraversal.Admin<Vertex, Vertex> traversal = 
this.generateTraversal();
-        this.strategies = temp;
+        TraversalHelper.addSpawnStepToCreationStrategies(traversal, label);
         return traversal.addStep(new AddVertexStartStep(traversal, label));
     }
 
     public GraphTraversal<Vertex, Vertex> addV() {
-        TraversalStrategies temp = this.strategies;
-        this.strategies = this.strategies.clone();
-        TraversalHelper.addSourceToCreationStrategies(this);
         final GraphTraversal.Admin<Vertex, Vertex> traversal = 
this.generateTraversal();
-        this.strategies = temp;
+        TraversalHelper.addSpawnStepToCreationStrategies(traversal);
         return traversal.addStep(new AddVertexStartStep(traversal, null));
     }
 
     public <S> GraphTraversal<S, S> inject(S... starts) {
-        return (GraphTraversal<S, S>) this.generateTraversal().inject(starts);
+        final GraphTraversal.Admin<S, S> traversal = this.generateTraversal();
+        TraversalHelper.addSpawnStepToCreationStrategies(traversal, starts);
+        return traversal.addStep(new InjectStep<>(traversal, starts));
     }
 
     public GraphTraversal<Vertex, Vertex> V(final Object... vertexIds) {
-        TraversalStrategies temp = this.strategies;
-        this.strategies = this.strategies.clone();
-        TraversalHelper.addSourceToCreationStrategies(this, vertexIds);
         final GraphTraversal.Admin<Vertex, Vertex> traversal = 
this.generateTraversal();
-        this.strategies = temp;
+        TraversalHelper.addSpawnStepToCreationStrategies(traversal, vertexIds);
         return traversal.addStep(new GraphStep<>(traversal, Vertex.class, 
true, vertexIds));
     }
 
     public GraphTraversal<Edge, Edge> E(final Object... edgesIds) {
-        TraversalStrategies temp = this.strategies;
-        this.strategies = this.strategies.clone();
-        TraversalHelper.addSourceToCreationStrategies(this, edgesIds);
         final GraphTraversal.Admin<Edge, Edge> traversal = 
this.generateTraversal();
-        this.strategies = temp;
+        TraversalHelper.addSpawnStepToCreationStrategies(traversal, edgesIds);
         return traversal.addStep(new GraphStep<>(traversal, Edge.class, true, 
edgesIds));
     }
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fde51ac5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
index abc3ecb..ef46bf2 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
@@ -42,7 +42,6 @@ import java.util.function.BiFunction;
 import java.util.function.Consumer;
 import java.util.function.Function;
 import java.util.function.Predicate;
-import java.util.function.Supplier;
 
 /**
  * An anonymous {@link GraphTraversal}.
@@ -51,28 +50,26 @@ import java.util.function.Supplier;
  */
 public class __ {
 
-    private static ThreadLocal<Supplier<GraphTraversal>> 
ANONYMOUS_GRAPH_TRAVERSAL = null;
+    private static ThreadLocal<Function<GraphTraversal.Admin, 
GraphTraversal.Admin>> ANONYMOUS_TRAVERSAL_FUNCTION = null;
 
     protected __() {
     }
 
     //////////////////////////////////////////////////////////////////////
 
-    public static void setAnonymousTraversalSupplier(final 
Supplier<GraphTraversal> anonymousGraphTraversalSupplier) {
-        if (null == ANONYMOUS_GRAPH_TRAVERSAL) {
-            if (null == anonymousGraphTraversalSupplier)
-                return;
-            else
-                ANONYMOUS_GRAPH_TRAVERSAL = ThreadLocal.withInitial(() -> 
DefaultGraphTraversal::new);
+    public static void setAnonymousTraversalFunction(final 
Function<GraphTraversal.Admin, GraphTraversal.Admin> 
anonymousTraversalFunction) {
+        if (null == anonymousTraversalFunction) {
+            if (null != ANONYMOUS_TRAVERSAL_FUNCTION)
+                ANONYMOUS_TRAVERSAL_FUNCTION.remove();
+        } else {
+            if (null == ANONYMOUS_TRAVERSAL_FUNCTION)
+                ANONYMOUS_TRAVERSAL_FUNCTION = 
ThreadLocal.withInitial(Function::identity);
+            ANONYMOUS_TRAVERSAL_FUNCTION.set(anonymousTraversalFunction);
         }
-        if (null == anonymousGraphTraversalSupplier)
-            ANONYMOUS_GRAPH_TRAVERSAL.remove();
-        else
-            ANONYMOUS_GRAPH_TRAVERSAL.set(anonymousGraphTraversalSupplier);
     }
 
     public static <A> GraphTraversal<A, A> start() {
-        return null == ANONYMOUS_GRAPH_TRAVERSAL ? new 
DefaultGraphTraversal<>() : ANONYMOUS_GRAPH_TRAVERSAL.get().get();
+        return null == ANONYMOUS_TRAVERSAL_FUNCTION ? new 
DefaultGraphTraversal<>() : ANONYMOUS_TRAVERSAL_FUNCTION.get().apply(new 
DefaultGraphTraversal<>());
     }
 
     public static <A> GraphTraversal<A, A> __(final A... starts) {

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fde51ac5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/script/ScriptGraphTraversal.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/script/ScriptGraphTraversal.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/script/ScriptGraphTraversal.java
index 645bf98..16bac30 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/script/ScriptGraphTraversal.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/script/ScriptGraphTraversal.java
@@ -81,7 +81,7 @@ public class ScriptGraphTraversal<S, E> extends 
DefaultGraphTraversal<S, E> {
         }
         try {
             final String traversalScriptString = this.getTraversalScript();
-            __.setAnonymousTraversalSupplier(null);
+            __.setAnonymousTraversalFunction(null);
             ScriptEngine engine = 
ScriptEngineCache.get(this.translator.getScriptEngine());
             final Bindings bindings = new SimpleBindings();
             bindings.put(this.translator.getAlias(), new 
GraphTraversalSource(this.getGraph().get(), this.getStrategies()));

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fde51ac5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/script/ScriptGraphTraversalSource.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/script/ScriptGraphTraversalSource.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/script/ScriptGraphTraversalSource.java
index 5abe3cb..edb1afe 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/script/ScriptGraphTraversalSource.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/script/ScriptGraphTraversalSource.java
@@ -42,14 +42,14 @@ import java.util.function.UnaryOperator;
  */
 public class ScriptGraphTraversalSource extends GraphTraversalSource {
 
-    private final Translator<GraphTraversal> translator;
+    private final Translator translator;
 
-    public ScriptGraphTraversalSource(final Graph graph, final 
TraversalStrategies traversalStrategies, final Translator<GraphTraversal> 
translator) {
+    public ScriptGraphTraversalSource(final Graph graph, final 
TraversalStrategies traversalStrategies, final Translator translator) {
         super(graph, traversalStrategies);
         this.translator = translator;
     }
 
-    public ScriptGraphTraversalSource(final Graph graph, final 
Translator<GraphTraversal> translator) {
+    public ScriptGraphTraversalSource(final Graph graph, final Translator 
translator) {
         super(graph);
         this.translator = translator;
     }
@@ -218,7 +218,7 @@ public class ScriptGraphTraversalSource extends 
GraphTraversalSource {
     }
 
     private GraphTraversal generateTraversal(final String stepName, final 
Object... arguments) {
-        __.setAnonymousTraversalSupplier(this.translator::__);
+        //this.translator.createAnonymousTraversalSupplier();
         final Translator clone = this.translator.clone();
         clone.addStep(stepName, arguments);
         final GraphTraversal traversal = new ScriptGraphTraversal(this.graph, 
clone);

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fde51ac5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/creation/TranslationStrategy.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/creation/TranslationStrategy.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/creation/TranslationStrategy.java
index 9b1811a..573e5aa 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/creation/TranslationStrategy.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/creation/TranslationStrategy.java
@@ -37,18 +37,22 @@ import org.apache.tinkerpop.gremlin.util.ScriptEngineCache;
 import javax.script.Bindings;
 import javax.script.ScriptEngine;
 import javax.script.SimpleBindings;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.function.Function;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
 public class TranslationStrategy extends 
AbstractTraversalStrategy<TraversalStrategy.CreationStrategy> implements 
TraversalStrategy.CreationStrategy {
 
-    private Translator<?> translator;
+    private final Translator translator;
+    private final Class anonymousTraversalClass;
 
-    public TranslationStrategy(final Translator<?> translator) {
+    public TranslationStrategy(final Translator translator, final Class 
anonymousTraversalClass) {
         this.translator = translator;
-        if (!this.translator.getAlias().equals("__"))
-            __.setAnonymousTraversalSupplier(() -> (GraphTraversal) 
translator.__());
+        this.anonymousTraversalClass = anonymousTraversalClass;
+        this.createAnonymousTraversalFunction();
     }
 
     @Override
@@ -59,6 +63,7 @@ public class TranslationStrategy extends 
AbstractTraversalStrategy<TraversalStra
             final String traversalScriptString = 
this.translator.getTraversalScript();
             ScriptEngine engine = 
ScriptEngineCache.get(this.translator.getScriptEngine());
             TraversalStrategies strategies = 
traversal.getStrategies().clone().removeStrategies(TranslationStrategy.class);
+            this.destroyAnonymousTraversalFunction();
             final Bindings bindings = new SimpleBindings();
             bindings.put(this.translator.getAlias(), new 
GraphTraversalSource(traversal.getGraph().orElse(EmptyGraph.instance()), 
strategies));
             Traversal.Admin<?, ?> translatedTraversal = (Traversal.Admin<?, 
?>) engine.eval(traversalScriptString, bindings);
@@ -74,18 +79,53 @@ public class TranslationStrategy extends 
AbstractTraversalStrategy<TraversalStra
     }
 
     @Override
+    public void addSpawnStep(final Traversal.Admin<?, ?> traversal, final 
String stepName, final Object... arguments) {
+        final TranslationStrategy clone = new 
TranslationStrategy(this.translator.clone(), this.anonymousTraversalClass);
+        
traversal.setStrategies(traversal.getStrategies().clone().addStrategies(clone));
+        clone.createAnonymousTraversalFunction();
+        clone.translator.addSpawnStep(traversal, stepName, arguments);
+    }
+
+    @Override
     public void addStep(final Traversal.Admin<?, ?> traversal, final String 
stepName, final Object... arguments) {
         this.translator.addStep(traversal, stepName, arguments);
     }
 
     @Override
     public void addSource(final TraversalSource traversalSource, final String 
sourceName, final Object... arguments) {
-        final TranslationStrategy clone = new 
TranslationStrategy(this.translator.clone());
+        final TranslationStrategy clone = new 
TranslationStrategy(this.translator.clone(), this.anonymousTraversalClass);
         traversalSource.getStrategies().addStrategies(clone);
+        clone.createAnonymousTraversalFunction();
         clone.translator.addSource(traversalSource, sourceName, arguments);
     }
 
     public Translator getTranslator() {
         return this.translator;
     }
+
+    private void createAnonymousTraversalFunction() {
+        final Function<? extends Traversal.Admin, ? extends Traversal.Admin> 
function = traversal -> {
+            try {
+                
traversal.setStrategies(traversal.getStrategies().clone().addStrategies(
+                        new 
TranslationStrategy(this.translator.getAnonymousTraversalTranslator(),
+                                this.anonymousTraversalClass)));
+                return traversal;
+            } catch (final Exception e) {
+                throw new IllegalStateException(e.getMessage(), e);
+            }
+        };
+        try {
+            
this.anonymousTraversalClass.getMethod(TraversalSource.SET_ANONYMOUS_TRAVERSAL_FUNCTION,
 Function.class).invoke(null, function);
+        } catch (NoSuchMethodException | IllegalAccessException | 
InvocationTargetException e) {
+            throw new IllegalStateException(e.getMessage(), e);
+        }
+    }
+
+    private void destroyAnonymousTraversalFunction() {
+        try {
+            
this.anonymousTraversalClass.getMethod(TraversalSource.SET_ANONYMOUS_TRAVERSAL_FUNCTION,
 Function.class).invoke(null, (Function) null);
+        } catch (NoSuchMethodException | IllegalAccessException | 
InvocationTargetException e) {
+            throw new IllegalStateException(e.getMessage(), e);
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fde51ac5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalStrategies.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalStrategies.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalStrategies.java
index f12ef74..1c1c35a 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalStrategies.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalStrategies.java
@@ -25,8 +25,11 @@ import 
org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.Optional;
+import java.util.stream.Collectors;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -34,6 +37,7 @@ import java.util.Optional;
 public class DefaultTraversalStrategies implements TraversalStrategies {
 
     protected List<TraversalStrategy<?>> traversalStrategies = new 
ArrayList<>();
+    protected transient Map<Class<? extends TraversalStrategy>, 
List<TraversalStrategy<?>>> strategyMap = null;
 
     @Override
     @SuppressWarnings({"unchecked", "varargs"})
@@ -49,6 +53,7 @@ public class DefaultTraversalStrategies implements 
TraversalStrategies {
         }
         this.traversalStrategies.removeAll(toRemove);
         Collections.addAll(this.traversalStrategies, strategies);
+        this.strategyMap = null;
         this.traversalStrategies = 
TraversalStrategies.sortStrategies(this.traversalStrategies);
         return this;
     }
@@ -64,7 +69,10 @@ public class DefaultTraversalStrategies implements 
TraversalStrategies {
                 removed = true;
             }
         }
-        if (removed) this.traversalStrategies = 
TraversalStrategies.sortStrategies(this.traversalStrategies);
+        if (removed) {
+            this.strategyMap = null;
+            this.traversalStrategies = 
TraversalStrategies.sortStrategies(this.traversalStrategies);
+        }
         return this;
     }
 
@@ -73,6 +81,21 @@ public class DefaultTraversalStrategies implements 
TraversalStrategies {
         return Collections.unmodifiableList(this.traversalStrategies);
     }
 
+    public <T extends TraversalStrategy> List<T> getStrategies(final Class<T> 
traversalStrategyClass) {
+        if (null == this.strategyMap) {
+            this.strategyMap = new HashMap<>();
+            for (final TraversalStrategy strategy : this.traversalStrategies) {
+                this.strategyMap.compute((Class) 
strategy.getClass().getInterfaces()[0], (key, value) -> {
+                    assert TraversalStrategy.class.isAssignableFrom(key);
+                    if (null == value) value = new ArrayList<>();
+                    value.add(strategy);
+                    return value;
+                });
+            }
+        }
+        return (List<T>) this.strategyMap.getOrDefault(traversalStrategyClass, 
Collections.emptyList());
+    }
+
     @Override
     public void applyStrategies(final Traversal.Admin<?, ?> traversal) {
         for (final TraversalStrategy<?> traversalStrategy : 
this.traversalStrategies) {
@@ -86,6 +109,7 @@ public class DefaultTraversalStrategies implements 
TraversalStrategies {
             final DefaultTraversalStrategies clone = 
(DefaultTraversalStrategies) super.clone();
             clone.traversalStrategies = new 
ArrayList<>(this.traversalStrategies.size());
             clone.traversalStrategies.addAll(this.traversalStrategies);
+            clone.strategyMap = null;
             return clone;
         } catch (final CloneNotSupportedException e) {
             throw new IllegalStateException(e.getMessage(), e);

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fde51ac5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/Translator.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/Translator.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/Translator.java
index cc9edb9..033b44b 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/Translator.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/Translator.java
@@ -25,7 +25,7 @@ import 
org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public interface Translator<V extends Traversal> extends Cloneable {
+public interface Translator extends Cloneable {
 
     public String getScriptEngine();
 
@@ -33,10 +33,22 @@ public interface Translator<V extends Traversal> extends 
Cloneable {
 
     public void addStep(final Traversal.Admin<?, ?> traversal, final String 
stepName, final Object... arguments);
 
+    public default void addSpawnStep(final Traversal.Admin<?, ?> traversal, 
final String stepName, final Object... arguments) {
+        addStep(traversal, stepName, arguments);
+    }
+
     public default void addSource(final TraversalSource traversalSource, final 
String sourceName, final Object... arguments) {
         addStep(EmptyTraversal.instance(), sourceName, arguments);
     }
 
+    public Translator getAnonymousTraversalTranslator();
+
+    public String getTraversalScript();
+
+    public Translator clone();
+
+    /// TODO: Below should be removed when ScriptXXXTraversal model is removed
+
     public default void addSource(final String sourceName, final Object... 
arguments) {
 
     }
@@ -44,10 +56,4 @@ public interface Translator<V extends Traversal> extends 
Cloneable {
     public default void addStep(final String sourceName, final Object... 
arguments) {
 
     }
-
-    public V __();
-
-    public String getTraversalScript();
-
-    public Translator<V> clone();
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fde51ac5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java
index cd7576d..2b03497 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java
@@ -576,6 +576,16 @@ public final class TraversalHelper {
         }
     }
 
+    public static void addSpawnStepToCreationStrategies(final 
Traversal.Admin<?, ?> traversal, final Object... arguments) {
+        final List<TraversalStrategy.CreationStrategy> strategies = 
traversal.getStrategies().getStrategies(TraversalStrategy.CreationStrategy.class);
+        if (!strategies.isEmpty()) {
+            final String stepName = 
Thread.currentThread().getStackTrace()[2].getMethodName();
+            for (final TraversalStrategy.CreationStrategy creationStrategy : 
strategies) {
+                creationStrategy.addSpawnStep(traversal, stepName, arguments);
+            }
+        }
+    }
+
     public static void addSourceToCreationStrategies(final TraversalSource 
traversalSource, final Object... arguments) {
         final List<TraversalStrategy.CreationStrategy> strategies = 
traversalSource.getStrategies().getStrategies(TraversalStrategy.CreationStrategy.class);
         if (!strategies.isEmpty()) {

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fde51ac5/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyTranslator.java
----------------------------------------------------------------------
diff --git 
a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyTranslator.java
 
b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyTranslator.java
index 526e85d..75d22a3 100644
--- 
a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyTranslator.java
+++ 
b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyTranslator.java
@@ -23,10 +23,6 @@ import 
org.apache.tinkerpop.gremlin.process.computer.Computer;
 import org.apache.tinkerpop.gremlin.process.traversal.P;
 import org.apache.tinkerpop.gremlin.process.traversal.SackFunctions;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
-import 
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
-import 
org.apache.tinkerpop.gremlin.process.traversal.lambda.AbstractLambdaTraversal;
 import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.creation.TranslationStrategy;
 import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.VerificationException;
 import org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP;
@@ -43,16 +39,20 @@ import java.util.List;
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public class GroovyTranslator implements Translator<GraphTraversal> {
+public final class GroovyTranslator implements Translator {
 
     private StringBuilder traversalScript;
-    private String alias;
+    private final String alias;
 
-    public GroovyTranslator(final String alias) {
+    private GroovyTranslator(final String alias) {
         this.alias = alias;
         this.traversalScript = new StringBuilder(this.alias);
     }
 
+    public static final GroovyTranslator of(final String alias) {
+        return new GroovyTranslator(alias);
+    }
+
     @Override
     public String getScriptEngine() {
         return "gremlin-groovy";
@@ -78,16 +78,9 @@ public class GroovyTranslator implements 
Translator<GraphTraversal> {
         }
     }
 
-    /*Override
-    public void addSource(final TraversalSource source, final String 
sourceName, final Object... arguments) {
-        source.getStrategies().toList().
-    }*/
-
     @Override
-    public GraphTraversal __() {
-        final GraphTraversal traversal = new DefaultGraphTraversal();
-        
traversal.asAdmin().setStrategies(traversal.asAdmin().getStrategies().clone().addStrategies(new
 TranslationStrategy(new GroovyTranslator("__"))));
-        return traversal;
+    public Translator getAnonymousTraversalTranslator() {
+        return new GroovyTranslator("__");
     }
 
     @Override
@@ -109,10 +102,6 @@ public class GroovyTranslator implements 
Translator<GraphTraversal> {
         }
     }
 
-    public static final GroovyTranslator of(final String alias) {
-        return new GroovyTranslator(alias);
-    }
-
     ///////
 
     private static String convertToString(final Object object) {

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fde51ac5/gremlin-variant/src/main/java/org/apache/tinkerpop/gremlin/python/PythonTranslator.java
----------------------------------------------------------------------
diff --git 
a/gremlin-variant/src/main/java/org/apache/tinkerpop/gremlin/python/PythonTranslator.java
 
b/gremlin-variant/src/main/java/org/apache/tinkerpop/gremlin/python/PythonTranslator.java
index 0ca4095..e7abdea 100644
--- 
a/gremlin-variant/src/main/java/org/apache/tinkerpop/gremlin/python/PythonTranslator.java
+++ 
b/gremlin-variant/src/main/java/org/apache/tinkerpop/gremlin/python/PythonTranslator.java
@@ -23,9 +23,7 @@ import org.apache.tinkerpop.gremlin.process.computer.Computer;
 import org.apache.tinkerpop.gremlin.process.traversal.Operator;
 import org.apache.tinkerpop.gremlin.process.traversal.P;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import 
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
-import 
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.script.ScriptGraphTraversal;
 import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.creation.TranslationStrategy;
 import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.VerificationException;
 import org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP;
@@ -36,7 +34,6 @@ import 
org.apache.tinkerpop.gremlin.process.traversal.util.TranslatorHelper;
 import org.apache.tinkerpop.gremlin.structure.Element;
 import org.apache.tinkerpop.gremlin.structure.T;
 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
-import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;
 import org.apache.tinkerpop.gremlin.util.ScriptEngineCache;
 import org.apache.tinkerpop.gremlin.util.iterator.ArrayIterator;
 import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
@@ -58,7 +55,7 @@ import java.util.stream.Stream;
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public class PythonTranslator implements Translator<GraphTraversal> {
+public final class PythonTranslator implements Translator {
 
     private static boolean isTesting = 
Boolean.valueOf(System.getProperty("is.testing", "false"));
     ////
@@ -74,7 +71,7 @@ public class PythonTranslator implements 
Translator<GraphTraversal> {
     private final String scriptEngine;
     private final boolean importStatics;
 
-    public PythonTranslator(final String scriptEngine, final String alias, 
final boolean importStatics) {
+    private PythonTranslator(final String scriptEngine, final String alias, 
final boolean importStatics) {
         this.scriptEngine = scriptEngine;
         this.alias = alias;
         this.traversalScript = new StringBuilder(this.alias);
@@ -100,10 +97,8 @@ public class PythonTranslator implements 
Translator<GraphTraversal> {
     }
 
     @Override
-    public GraphTraversal __() {
-        final GraphTraversal traversal = new DefaultGraphTraversal();
-        
traversal.asAdmin().setStrategies(traversal.asAdmin().getStrategies().clone().addStrategies(new
 TranslationStrategy(new PythonTranslator(this.scriptEngine, "__", 
this.importStatics))));
-        return traversal;
+    public Translator getAnonymousTraversalTranslator() {
+        return new PythonTranslator(this.scriptEngine, "__", 
this.importStatics);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fde51ac5/gremlin-variant/src/main/jython/gremlin_python/gremlin_python.py
----------------------------------------------------------------------
diff --git a/gremlin-variant/src/main/jython/gremlin_python/gremlin_python.py 
b/gremlin-variant/src/main/jython/gremlin_python/gremlin_python.py
index bd993c6..a122a70 100644
--- a/gremlin-variant/src/main/jython/gremlin_python/gremlin_python.py
+++ b/gremlin-variant/src/main/jython/gremlin_python/gremlin_python.py
@@ -83,6 +83,8 @@ class PythonGraphTraversalSource(object):
     return PythonGraphTraversal(self.traversal_source_string + ".V(" + 
Helper.stringify(*args) + ")", self.remote_connection)
   def addV(self, *args):
     return PythonGraphTraversal(self.traversal_source_string + ".addV(" + 
Helper.stringify(*args) + ")", self.remote_connection)
+  def clone(self, *args):
+    return PythonGraphTraversalSource(self.traversal_source_string + ".clone(" 
+ Helper.stringify(*args) + ")", self.remote_connection)
   def inject(self, *args):
     return PythonGraphTraversal(self.traversal_source_string + ".inject(" + 
Helper.stringify(*args) + ")", self.remote_connection)
   def withBulk(self, *args):

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fde51ac5/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/VariantGraphProvider.java
----------------------------------------------------------------------
diff --git 
a/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/VariantGraphProvider.java
 
b/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/VariantGraphProvider.java
index 7f05aea..8545dff 100644
--- 
a/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/VariantGraphProvider.java
+++ 
b/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/VariantGraphProvider.java
@@ -60,17 +60,16 @@ public abstract class VariantGraphProvider extends 
AbstractGraphProvider {
             "testProfileStrategyCallbackSideEffect",
             "g_withSideEffectXa_setX_V_both_name_storeXaX_capXaX",
             "g_V_both_hasLabelXpersonX_order_byXage_decrX_name",
+            "g_VX1X_out_injectXv2X_name",
             "shouldSupportGraphFilter",
-            InjectTest.Traversals.class.getCanonicalName(),
+            "shouldNeverPropagateANoBulkTraverser",
+            "shouldNeverPropagateANullValuedTraverser",
+            "shouldTraversalResetProperly",
+            "shouldHidePartitionKeyForValues",
             ProgramTest.Traversals.class.getCanonicalName(),
-            CoreTraversalTest.class.getCanonicalName(),
             TraversalInterruptionTest.class.getCanonicalName(),
             TraversalInterruptionComputerTest.class.getCanonicalName(),
-            ElementIdStrategyProcessTest.class.getCanonicalName(),
-            EventStrategyProcessTest.class.getCanonicalName(),
-            ReadOnlyStrategyProcessTest.class.getCanonicalName(),
-            PartitionStrategyProcessTest.class.getCanonicalName(),
-            SubgraphStrategyProcessTest.class.getCanonicalName()));
+            ElementIdStrategyProcessTest.class.getCanonicalName()));
 
     private static final Set<Class> IMPLEMENTATION = new HashSet<Class>() {{
         add(TinkerEdge.class);
@@ -101,15 +100,7 @@ public abstract class VariantGraphProvider extends 
AbstractGraphProvider {
 
     @Override
     public void clear(final Graph graph, final Configuration configuration) 
throws Exception {
-        if (graph != null)
-            graph.close();
-
-        // in the even the graph is persisted we need to clean up
-        final String graphLocation = 
configuration.getString(TinkerGraph.GREMLIN_TINKERGRAPH_GRAPH_LOCATION, null);
-        if (graphLocation != null) {
-            final File f = new File(graphLocation);
-            f.delete();
-        }
+        if (graph != null) graph.close();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fde51ac5/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/python/PythonProvider.java
----------------------------------------------------------------------
diff --git 
a/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/python/PythonProvider.java
 
b/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/python/PythonProvider.java
index 605862f..8c29a32 100644
--- 
a/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/python/PythonProvider.java
+++ 
b/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/python/PythonProvider.java
@@ -19,9 +19,8 @@
 
 package org.apache.tinkerpop.gremlin.python;
 
-import 
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
 import org.apache.tinkerpop.gremlin.VariantGraphProvider;
-import org.apache.tinkerpop.gremlin.python.GremlinPythonGenerator;
+import 
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.util.ScriptEngineCache;
 

Reply via email to