You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2022/02/19 02:18:16 UTC

[tinkerpop] 01/01: TINKERPOP-2467 Follow python naming conventions for Gremlin syntax

This is an automated email from the ASF dual-hosted git repository.

spmallette pushed a commit to branch TINKERPOP-2467
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit 688cd8b222f885c874994ca9ecd67d9b5770e751
Author: Stephen Mallette <st...@amazon.com>
AuthorDate: Fri Feb 18 21:14:14 2022 -0500

    TINKERPOP-2467 Follow python naming conventions for Gremlin syntax
    
    Retained the old camel case and just deprecated it. Added snake case along side it. PythonTranslator still generates the old style for now which is helpful because it continues to test the deprecation working all the way through to the new functions.
---
 CHANGELOG.asciidoc                                 |   1 +
 docs/src/reference/gremlin-variants.asciidoc       |  87 +--
 docs/src/upgrade/release-3.6.x.asciidoc            |   6 +-
 .../traversal/translator/PythonTranslator.java     |   8 +-
 gremlin-python/src/main/python/example.py          |  10 +-
 .../gremlin_python/driver/aiohttp/transport.py     |   9 +-
 .../gremlin_python/process/anonymous_traversal.py  |  18 +-
 .../gremlin_python/process/graph_traversal.py      | 712 +++++++++++++++++++--
 .../python/gremlin_python/process/translator.py    |   6 +-
 .../python/gremlin_python/process/traversal.py     | 129 +++-
 gremlin-python/src/main/python/radish/gremlin.py   | 128 ++--
 .../tests/driver/test_driver_remote_connection.py  |   2 -
 .../main/python/tests/process/test_translator.py   |  21 +-
 13 files changed, 944 insertions(+), 193 deletions(-)

diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index d95a3b1..c3aba51 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -31,6 +31,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 * Added `mergeV()` and `mergeE()` steps.
 * Added `Direction` aliases of `from` and `to`.
 * Moved `TraversalOptionParent.Pick` to its own class as `Pick`.
+* Introduced Pythonic Gremlin step names using snake case and deprecated camel case naming.
 * Improved Gherkin test framework to allow for asserting traversal exceptions as a behavior.
 * Fixed query indentation for profile metrics where indent levels were not being respected.
 * `TraversalOpProcessor` no longer accepts a `String` representation of `Bytecode` for the "gremlin" argument which was left to support older versions of the drivers.
diff --git a/docs/src/reference/gremlin-variants.asciidoc b/docs/src/reference/gremlin-variants.asciidoc
index 3b0490b..9a9df15 100644
--- a/docs/src/reference/gremlin-variants.asciidoc
+++ b/docs/src/reference/gremlin-variants.asciidoc
@@ -718,7 +718,7 @@ the "g" provided to the `DriverRemoteConnection` corresponds to the name of a `G
 
 [source,python]
 ----
-g = traversal().withRemote(DriverRemoteConnection('ws://localhost:8182/gremlin','g'))
+g = traversal().with_remote(DriverRemoteConnection('ws://localhost:8182/gremlin','g'))
 ----
 
 If you need to send additional headers in the websockets connection, you can pass an optional `headers` parameter
@@ -726,7 +726,7 @@ to the `DriverRemoteConnection` constructor.
 
 [source,python]
 ----
-g = traversal().withRemote(DriverRemoteConnection(
+g = traversal().with_remote(DriverRemoteConnection(
     'ws://localhost:8182/gremlin', 'g', headers={'Header':'Value'}))
 ----
 
@@ -735,11 +735,11 @@ Gremlin-Python supports plain text and Kerberos SASL authentication, you can set
 [source,python]
 ----
 # Plain text authentication
-g = traversal().withRemote(DriverRemoteConnection(
+g = traversal().with_remote(DriverRemoteConnection(
     'ws://localhost:8182/gremlin', 'g', username='stephen', password='password'))
 
 # Kerberos authentication
-g = traversal().withRemote(DriverRemoteConnection(
+g = traversal().with_remote(DriverRemoteConnection(
     'ws://localhost:8182/gremlin', 'g', kerberized_service='gremlin@hostname.your.org'))
 ----
 
@@ -766,7 +766,7 @@ Some connection options can also be set on individual requests made through the
 
 [source,python]
 ----
-vertices = g.with_('evaluationTimeout', 500).V().out('knows').toList()
+vertices = g.with_('evaluationTimeout', 500).V().out('knows').to_list()
 ----
 
 The following options are allowed on a per-request basis in this fashion: `batchSize`, `requestId`, `userAgent` and
@@ -807,7 +807,7 @@ These can be used analogously to how they are used in Gremlin-Java.
 
 [source,python]
 ----
->>> g.V().hasLabel('person').has('age',P.gt(30)).order().by('age',Order.desc).toList()
+>>> g.V().has_label('person').has('age',P.gt(30)).order().by('age',Order.desc).to_list()
 [v[6], v[4]]
 ----
 
@@ -822,7 +822,7 @@ With statics loaded its possible to represent the above traversal as below.
 
 [source,python]
 ----
->>> g.V().hasLabel('person').has('age',gt(30)).order().by('age',desc).toList()
+>>> g.V().has_label('person').has('age',gt(30)).order().by('age',desc).to_list()
 [v[6], v[4]]
 ----
 
@@ -831,7 +831,7 @@ That is, without the `+__+`-prefix.
 
 [source,python]
 ----
->>> g.V().repeat(out()).times(2).name.fold().toList()
+>>> g.V().repeat(out()).times(2).name.fold().to_list()
 [['ripple', 'lop']]
 ----
 
@@ -879,7 +879,7 @@ and the ability to call the api from an event loop:
 ----
 import ssl
 ...
-g = traversal().withRemote(
+g = traversal().with_remote(
   DriverRemoteConnection('ws://localhost:8182/gremlin','g',
                          transport_factory=lambda: AiohttpTransport(read_timeout=10,
                                                                     write_timeout=10,
@@ -901,20 +901,20 @@ In order to add and remove <<traversalstrategy,traversal strategies>> from a tra
 
 [source,python]
 ----
->>> g = g.withStrategies(SubgraphStrategy(vertices=hasLabel('person'),edges=has('weight',gt(0.5))))
->>> g.V().name.toList()
+>>> g = g.with_strategies(SubgraphStrategy(vertices=has_label('person'),edges=has('weight',gt(0.5))))
+>>> g.V().name.to_list()
 ['marko', 'vadas', 'josh', 'peter']
->>> g.V().outE().elementMap().toList()
+>>> g.V().out_e().element_map().to_list()
 [{<T.id: 1>: 8, <T.label: 4>: 'knows', <Direction.IN: 2>: {<T.id: 1>: 4, <T.label: 4>: 'person'}, <Direction.OUT: 3>: {<T.id: 1>: 1, <T.label: 4>: 'person'}, 'weight': 1.0}]
->>> g = g.withoutStrategies(SubgraphStrategy)
->>> g.V().name.toList()
+>>> g = g.without_strategies(SubgraphStrategy)
+>>> g.V().name.to_list()
 ['marko', 'vadas', 'lop', 'josh', 'ripple', 'peter']
->>> g.V().outE().elementMap().toList()
+>>> g.V().out_e().element_map().to_list()
 [{<T.id: 1>: 9, <T.label: 4>: 'created', <Direction.IN: 2>: {<T.id: 1>: 3, <T.label: 4>: 'software'}, <Direction.OUT: 3>: {<T.id: 1>: 1, <T.label: 4>: 'person'}, 'weight': 0.4}, {<T.id: 1>: 7, <T.label: 4>: 'knows', <Direction.IN: 2>: {<T.id: 1>: 2, <T.label: 4>: 'person'}, <Direction.OUT: 3>: {<T.id: 1>: 1, <T.label: 4>: 'person'}, 'weight': 0.5}, {<T.id: 1>: 8, <T.label: 4>: 'knows', <Direction.IN: 2>: {<T.id: 1>: 4, <T.label: 4>: 'person'}, <Direction.OUT: 3>: {<T.id: 1>: 1, <T.label: [...]
->>> g = g.withComputer(workers=2,vertices=has('name','marko'))
->>> g.V().name.toList()
+>>> g = g.with_computer(workers=2,vertices=has('name','marko'))
+>>> g.V().name.to_list()
 ['marko']
->>> g.V().outE().valueMap().with_(WithOptions.tokens).toList()
+>>> g.V().out_e().value_map().with_(WithOptions.tokens).to_list()
 [{<T.id: 1>: 9, <T.label: 4>: 'created', 'weight': 0.4}, {<T.id: 1>: 7, <T.label: 4>: 'knows', 'weight': 0.5}, {<T.id: 1>: 8, <T.label: 4>: 'knows', 'weight': 1.0}]
 ----
 
@@ -932,7 +932,7 @@ builds on that content by demonstrating the transactional syntax for Python.
 
 [source,python]
 ----
-g = traversal().withRemote(DriverRemoteConnection('ws://localhost:8182/gremlin'))
+g = traversal().with_remote(DriverRemoteConnection('ws://localhost:8182/gremlin'))
 
 # Create a Transaction.
 tx = g.tx()
@@ -942,7 +942,7 @@ gtx = tx.begin()
 
 try:
     # Execute a traversal within the transaction.
-    gtx.addV("person").property("name", "Lyndon").iterate(),
+    gtx.add_v("person").property("name", "Lyndon").iterate(),
 
     # Commit the transaction. The transaction can no longer be used and cannot be re-used.
     # A new transaction can be spawned through g.tx().
@@ -966,7 +966,7 @@ use.
 
 [source,python]
 ----
->>> g.V().out().map(lambda: "it.get().value('name').length()").sum().toList()
+>>> g.V().out().map(lambda: "it.get().value('name').length()").sum().to_list()
 [24]
 ----
 
@@ -981,9 +981,9 @@ instead of translating, compiling, and then executing each submitted bytecode, i
 
 [source,python]
 ----
->>> g.V(Bindings.of('x',1)).out('created').map(lambda: "it.get().value('name').length()").sum().toList()
+>>> g.V(Bindings.of('x',1)).out('created').map(lambda: "it.get().value('name').length()").sum_().to_list()
 [3]
->>> g.V(Bindings.of('x',4)).out('created').map(lambda: "it.get().value('name').length()").sum().toList()
+>>> g.V(Bindings.of('x',4)).out('created').map(lambda: "it.get().value('name').length()").sum_().to_list()
 [9]
 ----
 
@@ -1015,7 +1015,7 @@ future_results = result_set.all()  <2>
 results = future_results.result() <3>
 assert results == [1, 2, 3, 4] <4>
 
-future_result_set = client.submitAsync('[1,2,3,4]') <5>
+future_result_set = client.submit_async('[1,2,3,4]') <5>
 result_set = future_result_set.result() <6>
 result = result_set.one() <7>
 assert results == [1, 2, 3, 4] <8>
@@ -1086,13 +1086,13 @@ might look like this:
 class SocialTraversal(GraphTraversal):
 
     def knows(self, person_name):
-        return self.out('knows').hasLabel('person').has('name', person_name)
+        return self.out('knows').has_label('person').has('name', person_name)
 
-    def youngestFriendsAge(self):
-        return self.out('knows').hasLabel('person').values('age').min()
+    def youngest_friends_age(self):
+        return self.out('knows').has_label('person').values('age').min()
 
-    def createdAtLeast(self, number):
-        return self.outE('created').count().is_(P.gte(number))
+    def created_at_least(self, number):
+        return self.out_e('created').count().is_(P.gte(number))
 
 class __(AnonymousTraversal):
 
@@ -1103,12 +1103,12 @@ class __(AnonymousTraversal):
         return cls.graph_traversal(None, None, Bytecode()).knows(*args)
 
     @classmethod
-    def youngestFriendsAge(cls, *args):
-        return cls.graph_traversal(None, None, Bytecode()).youngestFriendsAge(*args)
+    def youngest_friends_age(cls, *args):
+        return cls.graph_traversal(None, None, Bytecode()).youngest_friends_age(*args)
 
     @classmethod
-    def createdAtLeast(cls, *args):
-        return cls.graph_traversal(None, None, Bytecode()).createdAtLeast(*args)
+    def created_at_least(cls, *args):
+        return cls.graph_traversal(None, None, Bytecode()).created_at_least(*args)
 
 
 class SocialTraversalSource(GraphTraversalSource):
@@ -1136,10 +1136,10 @@ be used:
 
 [source,python]
 ----
-social = traversal(SocialTraversalSource).withRemote(DriverRemoteConnection('ws://localhost:8182/gremlin','g'))
+social = traversal(SocialTraversalSource).with_remote(DriverRemoteConnection('ws://localhost:8182/gremlin','g'))
 social.persons('marko').knows('josh')
-social.persons('marko').youngestFriendsAge()
-social.persons().filter(__.createdAtLeast(2)).count()
+social.persons('marko').youngest_friends_age()
+social.persons().filter(__.created_at_least(2)).count()
 ----
 
 [[gremlin-python-sugar]]
@@ -1150,11 +1150,11 @@ that makes traversals a bit more concise.
 
 [source,python]
 ----
->>> g.V().both()[1:3].toList()
+>>> g.V().both()[1:3].to_list()
 [v[2], v[4]]
->>> g.V().both()[1].toList()
+>>> g.V().both()[1].to_list()
 [v[2]]
->>> g.V().both().name.toList()
+>>> g.V().both().name.to_list()
 ['lop', 'lop', 'lop', 'vadas', 'josh', 'josh', 'josh', 'marko', 'marko', 'marko', 'peter', 'ripple']
 ----
 
@@ -1164,11 +1164,12 @@ that makes traversals a bit more concise.
 In situations where Python reserved words and global functions overlap with standard Gremlin steps and tokens, those
 bits of conflicting Gremlin get an underscore appended as a suffix:
 
-*Steps* - <<and-step,and_()>>, <<as-step,as_()>>, <<filter-step,filter_()>>, <<from-step,from_()>>, <<id-step,id_()>>,
-<<is-step,is_()>>, <<in-step,in_()>>, <<max-step,max_()>>, <<min-step,min_()>>, <<not-step,not_()>>, <<or-step,or_()>>,
-<<range-step,range_()>>, <<sum-step,sum_()>>, <<with-step,with_()>>
+*Steps* - <<and-step,and_()>>, <<as-step,as_()>>, <<filter-step,filter_()>>, <<from-step,from_()>>,
+<<has-step,has_key_>>, <<id-step,id_()>>, <<is-step,is_()>>, <<in-step,in_()>>, <<max-step,max_()>>,
+<<min-step,min_()>>, <<not-step,not_()>>, <<or-step,or_()>>, <<range-step,range_()>>, <<sum-step,sum_()>>,
+<<with-step,with_()>>
 
-*Tokens* - <<a-note-on-scopes,Scope.global_>>, `Direction.from_`
+*Tokens* - <<a-note-on-scopes,Scope.global_>>, `Direction.from_`, `Operator.sum_`
 
 [[gremlin-python-limitations]]
 === Limitations
diff --git a/docs/src/upgrade/release-3.6.x.asciidoc b/docs/src/upgrade/release-3.6.x.asciidoc
index 75fe892..13ee404 100644
--- a/docs/src/upgrade/release-3.6.x.asciidoc
+++ b/docs/src/upgrade/release-3.6.x.asciidoc
@@ -618,7 +618,7 @@ instead use `org.apache.tinkerpop.gremlin.process.traversal.translator.GroovyTra
 
 See: link:https://issues.apache.org/jira/browse/TINKERPOP-2657[TINKERPOP-2657]
 
-==== gremlin-python Deprecation Removal
+==== gremlin-python Step Naming
 
 When gremlin-python was first built, it followed the Gremlin step names perfectly and didn't account well for Python
 keywords that those steps conflicted with. As this conflict led to problems in usage, steps that matched keywords were
@@ -637,6 +637,10 @@ that may still be in use to instead prefer the underscore suffixed versions:
 The full list of steps with the suffix naming can be found in the
 link:https://tinkerpop.apache.org/docs/3.6.0/reference/#gremlin-python-differences[Reference Documentation].
 
+In addition to removing the conflicting names, camel cased naming has been deprecated for all Gremlin steps and
+replaced with more Pythonic snake cased names. As this change was merely deprecation, this change is non-breaking at
+this time, but the camel cased steps will be removed in some future major version.
+
 See: link:https://issues.apache.org/jira/browse/TINKERPOP-2650[TINKERPOP-2650]
 
 ==== `property()` with Map
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/translator/PythonTranslator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/translator/PythonTranslator.java
index 21d2de6..7d37e99 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/translator/PythonTranslator.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/translator/PythonTranslator.java
@@ -419,6 +419,8 @@ public final class PythonTranslator implements Translator.ScriptTranslator {
             TO_PYTHON_MAP.put("is", "is_");
             TO_PYTHON_MAP.put("list", "list_");
             TO_PYTHON_MAP.put("max", "max_");
+            TO_PYTHON_MAP.put("mergeE", "merge_e");
+            TO_PYTHON_MAP.put("mergeV", "merge_v");
             TO_PYTHON_MAP.put("min", "min_");
             TO_PYTHON_MAP.put("or", "or_");
             TO_PYTHON_MAP.put("not", "not_");
@@ -426,12 +428,6 @@ public final class PythonTranslator implements Translator.ScriptTranslator {
             TO_PYTHON_MAP.put("set", "set_");
             TO_PYTHON_MAP.put("sum", "sum_");
             TO_PYTHON_MAP.put("with", "with_");
-            TO_PYTHON_MAP.put("range", "range_");
-            TO_PYTHON_MAP.put("filter", "filter_");
-            TO_PYTHON_MAP.put("id", "id_");
-            TO_PYTHON_MAP.put("max", "max_");
-            TO_PYTHON_MAP.put("min", "min_");
-            TO_PYTHON_MAP.put("sum", "sum_");
             //
             TO_PYTHON_MAP.forEach((k, v) -> FROM_PYTHON_MAP.put(v, k));
         }
diff --git a/gremlin-python/src/main/python/example.py b/gremlin-python/src/main/python/example.py
index 10f0d4b..b3a3340 100644
--- a/gremlin-python/src/main/python/example.py
+++ b/gremlin-python/src/main/python/example.py
@@ -37,15 +37,15 @@ def main():
     # add some data - be sure to use a terminating step like iterate() so that the traversal
     # "executes". iterate() does not return any data and is used to just generate side-effects
     # (i.e. write data to the database)
-    g.addV('person').property('name', 'marko').as_('m'). \
-        addV('person').property('name', 'vadas').as_('v'). \
-        addE('knows').from_('m').to('v').iterate()
+    g.add_v('person').property('name', 'marko').as_('m'). \
+        add_v('person').property('name', 'vadas').as_('v'). \
+        add_e('knows').from_('m').to('v').iterate()
 
     # retrieve the data from the "marko" vertex
-    print("marko: " + to_string(g.V().has('person', 'name', 'marko').valueMap().next()))
+    print("marko: " + to_string(g.V().has('person', 'name', 'marko').value_map().next()))
 
     # find the "marko" vertex and then traverse to the people he "knows" and return their data
-    print("who marko knows: " + to_string(g.V().has('person', 'name', 'marko').out('knows').valueMap().next()))
+    print("who marko knows: " + to_string(g.V().has('person', 'name', 'marko').out('knows').value_map().next()))
 
 
 if __name__ == "__main__":
diff --git a/gremlin-python/src/main/python/gremlin_python/driver/aiohttp/transport.py b/gremlin-python/src/main/python/gremlin_python/driver/aiohttp/transport.py
index 2effcf1..a797df7 100644
--- a/gremlin-python/src/main/python/gremlin_python/driver/aiohttp/transport.py
+++ b/gremlin-python/src/main/python/gremlin_python/driver/aiohttp/transport.py
@@ -20,7 +20,6 @@ import aiohttp
 import asyncio
 import async_timeout
 from aiohttp import ClientResponseError
-import logging
 
 from gremlin_python.driver.transport import AbstractBaseTransport
 
@@ -34,10 +33,10 @@ class AiohttpTransport(AbstractBaseTransport):
     def __init__(self, call_from_event_loop=None, read_timeout=None, write_timeout=None, **kwargs):
         if call_from_event_loop is not None and call_from_event_loop and not AiohttpTransport.nest_asyncio_applied:
             """ 
-                The AiohttpTransport implementation uses the asyncio event loop. Because of this, it cannot be called within an
-                event loop without nest_asyncio. If the code is ever refactored so that it can be called within an event loop
-                this import and call can be removed. Without this, applications which use the event loop to call gremlin-python
-                (such as Jupyter) will not work.
+                The AiohttpTransport implementation uses the asyncio event loop. Because of this, it cannot be called 
+                within an event loop without nest_asyncio. If the code is ever refactored so that it can be called 
+                within an event loop this import and call can be removed. Without this, applications which use the 
+                event loop to call gremlin-python (such as Jupyter) will not work.
             """
             import nest_asyncio
             nest_asyncio.apply()
diff --git a/gremlin-python/src/main/python/gremlin_python/process/anonymous_traversal.py b/gremlin-python/src/main/python/gremlin_python/process/anonymous_traversal.py
index 5cde5ff..76c2054 100644
--- a/gremlin-python/src/main/python/gremlin_python/process/anonymous_traversal.py
+++ b/gremlin-python/src/main/python/gremlin_python/process/anonymous_traversal.py
@@ -24,6 +24,8 @@ from gremlin_python.process.graph_traversal import GraphTraversalSource
 from gremlin_python.process.traversal import TraversalStrategies
 from .. import statics
 
+import warnings
+
 
 class AnonymousTraversalSource(object):
 
@@ -35,10 +37,24 @@ class AnonymousTraversalSource(object):
         return AnonymousTraversalSource(traversal_source_class)
 
     def withGraph(self, graph):
+        warnings.warn(
+            "gremlin_python.process.AnonymousTraversalSource.withGraph will be replaced by "
+            "gremlin_python.process.AnonymousTraversalSource.with_graph.",
+            DeprecationWarning)
+        return self.with_graph(graph)
+
+    def with_graph(self, graph):
         return self.traversal_source_class(graph, TraversalStrategies.global_cache[graph.__class__])
 
     def withRemote(self, remote_connection):
-        return self.withGraph(Graph()).withRemote(remote_connection)
+        warnings.warn(
+            "gremlin_python.process.AnonymousTraversalSource.withRemote will be replaced by "
+            "gremlin_python.process.AnonymousTraversalSource.with_remote.",
+            DeprecationWarning)
+        return self.with_remote(remote_connection)
+
+    def with_remote(self, remote_connection):
+        return self.with_graph(Graph()).withRemote(remote_connection)
 
 
 def traversal(traversal_source_class=GraphTraversalSource):
diff --git a/gremlin-python/src/main/python/gremlin_python/process/graph_traversal.py b/gremlin-python/src/main/python/gremlin_python/process/graph_traversal.py
index 3cf25a5..520e872 100644
--- a/gremlin-python/src/main/python/gremlin_python/process/graph_traversal.py
+++ b/gremlin-python/src/main/python/gremlin_python/process/graph_traversal.py
@@ -19,6 +19,7 @@
 import logging
 import sys
 import copy
+import warnings
 from threading import Lock
 from .traversal import Traversal
 from .traversal import TraversalStrategies
@@ -54,31 +55,73 @@ class GraphTraversalSource(object):
         return self.graph_traversal(self.graph, self.traversal_strategies, Bytecode(self.bytecode))
 
     def withBulk(self, *args):
+        warnings.warn(
+            "gremlin_python.process.GraphTraversalSource.withBulk will be replaced by "
+            "gremlin_python.process.GraphTraversalSource.with_bulk.",
+            DeprecationWarning)
+        return self.with_bulk(*args)
+
+    def with_bulk(self, *args):
         source = self.get_graph_traversal_source()
         source.bytecode.add_source("withBulk", *args)
         return source
 
     def withPath(self, *args):
+        warnings.warn(
+            "gremlin_python.process.GraphTraversalSource.withPath will be replaced by "
+            "gremlin_python.process.Traversal.with_path.",
+            DeprecationWarning)
+        return self.with_path(*args)
+
+    def with_path(self, *args):
         source = self.get_graph_traversal_source()
         source.bytecode.add_source("withPath", *args)
         return source
 
     def withSack(self, *args):
+        warnings.warn(
+            "gremlin_python.process.GraphTraversalSource.withSack will be replaced by "
+            "gremlin_python.process.GraphTraversalSource.with_sack.",
+            DeprecationWarning)
+        return self.with_sack(*args)
+
+    def with_sack(self, *args):
         source = self.get_graph_traversal_source()
         source.bytecode.add_source("withSack", *args)
         return source
 
     def withSideEffect(self, *args):
+        warnings.warn(
+            "gremlin_python.process.GraphTraversalSource.with_side_effect will be replaced by "
+            "gremlin_python.process.GraphTraversalSource.with_sack.",
+            DeprecationWarning)
+        return self.with_side_effect(*args)
+
+    def with_side_effect(self, *args):
         source = self.get_graph_traversal_source()
         source.bytecode.add_source("withSideEffect", *args)
         return source
 
     def withStrategies(self, *args):
+        warnings.warn(
+            "gremlin_python.process.GraphTraversalSource.withStrategies will be replaced by "
+            "gremlin_python.process.GraphTraversalSource.with_strategies.",
+            DeprecationWarning)
+        return self.with_strategies(*args)
+
+    def with_strategies(self, *args):
         source = self.get_graph_traversal_source()
         source.bytecode.add_source("withStrategies", *args)
         return source
 
     def withoutStrategies(self, *args):
+        warnings.warn(
+            "gremlin_python.process.GraphTraversalSource.withoutStrategies will be replaced by "
+            "gremlin_python.process.GraphTraversalSource.without_strategies.",
+            DeprecationWarning)
+        return self.without_strategies(*args)
+
+    def without_strategies(self, *args):
         source = self.get_graph_traversal_source()
         source.bytecode.add_source("withoutStrategies", *args)
         return source
@@ -98,6 +141,13 @@ class GraphTraversalSource(object):
         return source
 
     def withRemote(self, remote_connection):
+        warnings.warn(
+            "gremlin_python.process.GraphTraversalSource.withRemote will be replaced by "
+            "gremlin_python.process.GraphTraversalSource.with_remote.",
+            DeprecationWarning)
+        return self.with_remote(remote_connection)
+
+    def with_remote(self, remote_connection):
         source = self.get_graph_traversal_source()
         source.traversal_strategies.add_strategies([RemoteStrategy(remote_connection)])
         self.remote_connection = remote_connection
@@ -123,7 +173,15 @@ class GraphTraversalSource(object):
 
     def withComputer(self, graph_computer=None, workers=None, result=None, persist=None, vertices=None,
                      edges=None, configuration=None):
-        return self.withStrategies(
+        warnings.warn(
+            "gremlin_python.process.GraphTraversalSource.withComputer will be replaced by "
+            "gremlin_python.process.GraphTraversalSource.with_computer.",
+            DeprecationWarning)
+        return self.with_computer(graph_computer, workers, result, persist, vertices, edges, configuration)
+
+    def with_computer(self, graph_computer=None, workers=None, result=None, persist=None, vertices=None,
+                  edges=None, configuration=None):
+        return self.with_strategies(
             VertexProgramStrategy(graph_computer, workers, result, persist, vertices, edges, configuration))
 
     def E(self, *args):
@@ -137,21 +195,35 @@ class GraphTraversalSource(object):
         return traversal
 
     def addE(self, *args):
+        warnings.warn(
+            "gremlin_python.process.GraphTraversalSource.addE will be replaced by "
+            "gremlin_python.process.GraphTraversalSource.add_e.",
+            DeprecationWarning)
+        return self.add_e(*args)
+
+    def add_e(self, *args):
         traversal = self.get_graph_traversal()
         traversal.bytecode.add_step("addE", *args)
         return traversal
 
     def addV(self, *args):
+        warnings.warn(
+            "gremlin_python.process.GraphTraversalSource.addV will be replaced by "
+            "gremlin_python.process.GraphTraversalSource.add_v.",
+            DeprecationWarning)
+        return self.add_v(*args)
+
+    def add_v(self, *args):
         traversal = self.get_graph_traversal()
         traversal.bytecode.add_step("addV", *args)
         return traversal
 
-    def mergeV(self, *args):
+    def merge_v(self, *args):
         traversal = self.get_graph_traversal()
         traversal.bytecode.add_step("mergeV", *args)
         return traversal
 
-    def mergeE(self, *args):
+    def merge_e(self, *args):
         traversal = self.get_graph_traversal()
         traversal.bytecode.add_step("mergeE", *args)
         return traversal
@@ -198,10 +270,24 @@ class GraphTraversal(Traversal):
         return self
 
     def addE(self, *args):
+        warnings.warn(
+            "gremlin_python.process.GraphTraversal.addE will be replaced by "
+            "gremlin_python.process.GraphTraversal.add_e.",
+            DeprecationWarning)
+        return self.add_e(*args)
+
+    def add_e(self, *args):
         self.bytecode.add_step("addE", *args)
         return self
 
     def addV(self, *args):
+        warnings.warn(
+            "gremlin_python.process.GraphTraversalSource.addV will be replaced by "
+            "gremlin_python.process.GraphTraversalSource.add_v.",
+            DeprecationWarning)
+        return self.add_v(*args)
+
+    def add_v(self, *args):
         self.bytecode.add_step("addV", *args)
         return self
 
@@ -226,10 +312,24 @@ class GraphTraversal(Traversal):
         return self
 
     def bothE(self, *args):
+        warnings.warn(
+            "gremlin_python.process.GraphTraversalSource.bothE will be replaced by "
+            "gremlin_python.process.GraphTraversalSource.both_e.",
+            DeprecationWarning)
+        return self.both_e(*args)
+
+    def both_e(self, *args):
         self.bytecode.add_step("bothE", *args)
         return self
 
     def bothV(self, *args):
+        warnings.warn(
+            "gremlin_python.process.GraphTraversalSource.bothV will be replaced by "
+            "gremlin_python.process.GraphTraversalSource.both_v.",
+            DeprecationWarning)
+        return self.both_v(*args)
+
+    def both_v(self, *args):
         self.bytecode.add_step("bothV", *args)
         return self
 
@@ -258,6 +358,13 @@ class GraphTraversal(Traversal):
         return self
 
     def connectedComponent(self, *args):
+        warnings.warn(
+            "gremlin_python.process.GraphTraversalSource.connectedComponent will be replaced by "
+            "gremlin_python.process.GraphTraversalSource.connected_component.",
+            DeprecationWarning)
+        return self.connected_component(*args)
+
+    def connected_component(self, *args):
         self.bytecode.add_step("connectedComponent", *args)
         return self
 
@@ -270,6 +377,13 @@ class GraphTraversal(Traversal):
         return self
 
     def cyclicPath(self, *args):
+        warnings.warn(
+            "gremlin_python.process.GraphTraversalSource.cyclicPath will be replaced by "
+            "gremlin_python.process.GraphTraversalSource.cyclic_path.",
+            DeprecationWarning)
+        return self.cyclic_path(*args)
+
+    def cyclic_path(self, *args):
         self.bytecode.add_step("cyclicPath", *args)
         return self
 
@@ -282,6 +396,13 @@ class GraphTraversal(Traversal):
         return self
 
     def elementMap(self, *args):
+        warnings.warn(
+            "gremlin_python.process.GraphTraversalSource.elementMap will be replaced by "
+            "gremlin_python.process.GraphTraversalSource.element_map.",
+            DeprecationWarning)
+        return self.element_map(*args)
+
+    def element_map(self, *args):
         self.bytecode.add_step("elementMap", *args)
         return self
 
@@ -298,6 +419,13 @@ class GraphTraversal(Traversal):
         return self
 
     def flatMap(self, *args):
+        warnings.warn(
+            "gremlin_python.process.GraphTraversalSource.flatMap will be replaced by "
+            "gremlin_python.process.GraphTraversalSource.flat_map.",
+            DeprecationWarning)
+        return self.flat_map(*args)
+
+    def flat_map(self, *args):
         self.bytecode.add_step("flatMap", *args)
         return self
 
@@ -314,6 +442,13 @@ class GraphTraversal(Traversal):
         return self
 
     def groupCount(self, *args):
+        warnings.warn(
+            "gremlin_python.process.GraphTraversalSource.groupCount will be replaced by "
+            "gremlin_python.process.GraphTraversalSource.group_count.",
+            DeprecationWarning)
+        return self.group_count(*args)
+
+    def group_count(self, *args):
         self.bytecode.add_step("groupCount", *args)
         return self
 
@@ -322,22 +457,57 @@ class GraphTraversal(Traversal):
         return self
 
     def hasId(self, *args):
+        warnings.warn(
+            "gremlin_python.process.GraphTraversalSource.hasId will be replaced by "
+            "gremlin_python.process.GraphTraversalSource.has_id.",
+            DeprecationWarning)
+        return self.has_id(*args)
+
+    def has_id(self, *args):
         self.bytecode.add_step("hasId", *args)
         return self
 
     def hasKey(self, *args):
+        warnings.warn(
+            "gremlin_python.process.GraphTraversalSource.hasKey will be replaced by "
+            "gremlin_python.process.GraphTraversalSource.has_key.",
+            DeprecationWarning)
+        return self.has_key_(*args)
+
+    def has_key_(self, *args):
         self.bytecode.add_step("hasKey", *args)
         return self
 
     def hasLabel(self, *args):
+        warnings.warn(
+            "gremlin_python.process.GraphTraversalSource.hasLabel will be replaced by "
+            "gremlin_python.process.GraphTraversalSource.has_label.",
+            DeprecationWarning)
+        return self.has_label(*args)
+
+    def has_label(self, *args):
         self.bytecode.add_step("hasLabel", *args)
         return self
 
     def hasNot(self, *args):
+        warnings.warn(
+            "gremlin_python.process.GraphTraversalSource.hasNot will be replaced by "
+            "gremlin_python.process.GraphTraversalSource.has_not.",
+            DeprecationWarning)
+        return self.has_not(*args)
+
+    def has_not(self, *args):
         self.bytecode.add_step("hasNot", *args)
         return self
 
     def hasValue(self, *args):
+        warnings.warn(
+            "gremlin_python.process.GraphTraversalSource.hasValue will be replaced by "
+            "gremlin_python.process.GraphTraversalSource.has_value.",
+            DeprecationWarning)
+        return self.has_value(*args)
+
+    def has_value(self, *args):
         self.bytecode.add_step("hasValue", *args)
         return self
 
@@ -350,10 +520,24 @@ class GraphTraversal(Traversal):
         return self
 
     def inE(self, *args):
+        warnings.warn(
+            "gremlin_python.process.GraphTraversalSource.inE will be replaced by "
+            "gremlin_python.process.GraphTraversalSource.in_e.",
+            DeprecationWarning)
+        return self.in_e(*args)
+
+    def in_e(self, *args):
         self.bytecode.add_step("inE", *args)
         return self
 
     def inV(self, *args):
+        warnings.warn(
+            "gremlin_python.process.GraphTraversalSource.inV will be replaced by "
+            "gremlin_python.process.GraphTraversalSource.in_v.",
+            DeprecationWarning)
+        return self.in_v(*args)
+
+    def in_v(self, *args):
         self.bytecode.add_step("inV", *args)
         return self
 
@@ -413,11 +597,11 @@ class GraphTraversal(Traversal):
         self.bytecode.add_step("mean", *args)
         return self
 
-    def mergeE(self, *args):
+    def merge_e(self, *args):
         self.bytecode.add_step("mergeE", *args)
         return self
 
-    def mergeV(self, *args):
+    def merge_v(self, *args):
         self.bytecode.add_step("mergeV", *args)
         return self
 
@@ -450,6 +634,13 @@ class GraphTraversal(Traversal):
         return self
 
     def otherV(self, *args):
+        warnings.warn(
+            "gremlin_python.process.GraphTraversalSource.otherV will be replaced by "
+            "gremlin_python.process.GraphTraversalSource.other_v.",
+            DeprecationWarning)
+        return self.other_v(*args)
+
+    def other_v(self, *args):
         self.bytecode.add_step("otherV", *args)
         return self
 
@@ -458,14 +649,35 @@ class GraphTraversal(Traversal):
         return self
 
     def outE(self, *args):
+        warnings.warn(
+            "gremlin_python.process.GraphTraversalSource.outE will be replaced by "
+            "gremlin_python.process.GraphTraversalSource.out_e.",
+            DeprecationWarning)
+        return self.out_e(*args)
+
+    def out_e(self, *args):
         self.bytecode.add_step("outE", *args)
         return self
 
     def outV(self, *args):
+        warnings.warn(
+            "gremlin_python.process.GraphTraversalSource.outV will be replaced by "
+            "gremlin_python.process.GraphTraversalSource.out_v.",
+            DeprecationWarning)
+        return self.out_v(*args)
+
+    def out_v(self, *args):
         self.bytecode.add_step("outV", *args)
         return self
 
     def pageRank(self, *args):
+        warnings.warn(
+            "gremlin_python.process.GraphTraversalSource.pageRank will be replaced by "
+            "gremlin_python.process.GraphTraversalSource.page_rank.",
+            DeprecationWarning)
+        return self.page_rank(*args)
+
+    def page_rank(self, *args):
         self.bytecode.add_step("pageRank", *args)
         return self
 
@@ -474,6 +686,13 @@ class GraphTraversal(Traversal):
         return self
 
     def peerPressure(self, *args):
+        warnings.warn(
+            "gremlin_python.process.GraphTraversalSource.peerPressure will be replaced by "
+            "gremlin_python.process.GraphTraversalSource.peer_pressure.",
+            DeprecationWarning)
+        return self.peer_pressure(*args)
+
+    def peer_pressure(self, *args):
         self.bytecode.add_step("peerPressure", *args)
         return self
 
@@ -498,6 +717,13 @@ class GraphTraversal(Traversal):
         return self
 
     def propertyMap(self, *args):
+        warnings.warn(
+            "gremlin_python.process.GraphTraversalSource.propertyMap will be replaced by "
+            "gremlin_python.process.GraphTraversalSource.property_map.",
+            DeprecationWarning)
+        return self.property_map(*args)
+
+    def property_map(self, *args):
         self.bytecode.add_step("propertyMap", *args)
         return self
 
@@ -526,14 +752,35 @@ class GraphTraversal(Traversal):
         return self
 
     def shortestPath(self, *args):
+        warnings.warn(
+            "gremlin_python.process.GraphTraversalSource.shortestPath will be replaced by "
+            "gremlin_python.process.GraphTraversalSource.shortest_path.",
+            DeprecationWarning)
+        return self.shortest_path(*args)
+
+    def shortest_path(self, *args):
         self.bytecode.add_step("shortestPath", *args)
         return self
 
     def sideEffect(self, *args):
+        warnings.warn(
+            "gremlin_python.process.GraphTraversalSource.sideEffect will be replaced by "
+            "gremlin_python.process.GraphTraversalSource.side_effect.",
+            DeprecationWarning)
+        return self.side_effect(*args)
+
+    def side_effect(self, *args):
         self.bytecode.add_step("sideEffect", *args)
         return self
 
     def simplePath(self, *args):
+        warnings.warn(
+            "gremlin_python.process.GraphTraversalSource.simplePath will be replaced by "
+            "gremlin_python.process.GraphTraversalSource.simple_path.",
+            DeprecationWarning)
+        return self.simple_path(*args)
+
+    def simple_path(self, *args):
         self.bytecode.add_step("simplePath", *args)
         return self
 
@@ -558,6 +805,13 @@ class GraphTraversal(Traversal):
         return self
 
     def timeLimit(self, *args):
+        warnings.warn(
+            "gremlin_python.process.GraphTraversalSource.timeLimit will be replaced by "
+            "gremlin_python.process.GraphTraversalSource.time_limit.",
+            DeprecationWarning)
+        return self.time_limit(*args)
+
+    def time_limit(self, *args):
         self.bytecode.add_step("timeLimit", *args)
         return self
 
@@ -570,10 +824,24 @@ class GraphTraversal(Traversal):
         return self
 
     def toE(self, *args):
+        warnings.warn(
+            "gremlin_python.process.GraphTraversalSource.toE will be replaced by "
+            "gremlin_python.process.GraphTraversalSource.to_e.",
+            DeprecationWarning)
+        return self.to_e(*args)
+
+    def to_e(self, *args):
         self.bytecode.add_step("toE", *args)
         return self
 
     def toV(self, *args):
+        warnings.warn(
+            "gremlin_python.process.GraphTraversalSource.toV will be replaced by "
+            "gremlin_python.process.GraphTraversalSource.to_v.",
+            DeprecationWarning)
+        return self.to_v(*args)
+
+    def to_v(self, *args):
         self.bytecode.add_step("toV", *args)
         return self
 
@@ -598,6 +866,13 @@ class GraphTraversal(Traversal):
         return self
 
     def valueMap(self, *args):
+        warnings.warn(
+            "gremlin_python.process.GraphTraversalSource.valueMap will be replaced by "
+            "gremlin_python.process.GraphTraversalSource.value_map.",
+            DeprecationWarning)
+        return self.value_map(*args)
+
+    def value_map(self, *args):
         self.bytecode.add_step("valueMap", *args)
         return self
 
@@ -644,11 +919,27 @@ class __(object, metaclass=MagicType):
 
     @classmethod
     def addE(cls, *args):
-        return cls.graph_traversal(None, None, Bytecode()).addE(*args)
+        warnings.warn(
+            "gremlin_python.process.__.addE will be replaced by "
+            "gremlin_python.process.__.add_e.",
+            DeprecationWarning)
+        return cls.add_e(*args)
+
+    @classmethod
+    def add_e(cls, *args):
+        return cls.graph_traversal(None, None, Bytecode()).add_e(*args)
 
     @classmethod
     def addV(cls, *args):
-        return cls.graph_traversal(None, None, Bytecode()).addV(*args)
+        warnings.warn(
+            "gremlin_python.process.__.addV will be replaced by "
+            "gremlin_python.process.__.add_v.",
+            DeprecationWarning)
+        return cls.add_v(*args)
+
+    @classmethod
+    def add_v(cls, *args):
+        return cls.graph_traversal(None, None, Bytecode()).add_v(*args)
 
     @classmethod
     def aggregate(cls, *args):
@@ -672,11 +963,27 @@ class __(object, metaclass=MagicType):
 
     @classmethod
     def bothE(cls, *args):
-        return cls.graph_traversal(None, None, Bytecode()).bothE(*args)
+        warnings.warn(
+            "gremlin_python.process.__.bothE will be replaced by "
+            "gremlin_python.process.__.both_e.",
+            DeprecationWarning)
+        return cls.both_e(*args)
+
+    @classmethod
+    def both_e(cls, *args):
+        return cls.graph_traversal(None, None, Bytecode()).both_e(*args)
 
     @classmethod
     def bothV(cls, *args):
-        return cls.graph_traversal(None, None, Bytecode()).bothV(*args)
+        warnings.warn(
+            "gremlin_python.process.__.bothV will be replaced by "
+            "gremlin_python.process.__.both_v.",
+            DeprecationWarning)
+        return cls.both_v(*args)
+
+    @classmethod
+    def both_v(cls, *args):
+        return cls.graph_traversal(None, None, Bytecode()).both_v(*args)
 
     @classmethod
     def branch(cls, *args):
@@ -708,7 +1015,15 @@ class __(object, metaclass=MagicType):
 
     @classmethod
     def cyclicPath(cls, *args):
-        return cls.graph_traversal(None, None, Bytecode()).cyclicPath(*args)
+        warnings.warn(
+            "gremlin_python.process.__.cyclicPath will be replaced by "
+            "gremlin_python.process.__.cyclic_path.",
+            DeprecationWarning)
+        return cls.cyclic_path(*args)
+
+    @classmethod
+    def cyclic_path(cls, *args):
+        return cls.graph_traversal(None, None, Bytecode()).cyclic_path(*args)
 
     @classmethod
     def dedup(cls, *args):
@@ -720,7 +1035,15 @@ class __(object, metaclass=MagicType):
 
     @classmethod
     def elementMap(cls, *args):
-        return cls.graph_traversal(None, None, Bytecode()).elementMap(*args)
+        warnings.warn(
+            "gremlin_python.process.__.elementMap will be replaced by "
+            "gremlin_python.process.__.element_map.",
+            DeprecationWarning)
+        return cls.element_map(*args)
+
+    @classmethod
+    def element_map(cls, *args):
+        return cls.graph_traversal(None, None, Bytecode()).element_map(*args)
 
     @classmethod
     def emit(cls, *args):
@@ -736,7 +1059,15 @@ class __(object, metaclass=MagicType):
 
     @classmethod
     def flatMap(cls, *args):
-        return cls.graph_traversal(None, None, Bytecode()).flatMap(*args)
+        warnings.warn(
+            "gremlin_python.process.__.flatMap will be replaced by "
+            "gremlin_python.process.__.flat_map.",
+            DeprecationWarning)
+        return cls.flat_map(*args)
+
+    @classmethod
+    def flat_map(cls, *args):
+        return cls.graph_traversal(None, None, Bytecode()).flat_map(*args)
 
     @classmethod
     def fold(cls, *args):
@@ -748,7 +1079,15 @@ class __(object, metaclass=MagicType):
 
     @classmethod
     def groupCount(cls, *args):
-        return cls.graph_traversal(None, None, Bytecode()).groupCount(*args)
+        warnings.warn(
+            "gremlin_python.process.__.groupCount will be replaced by "
+            "gremlin_python.process.__.group_count.",
+            DeprecationWarning)
+        return cls.group_count(*args)
+
+    @classmethod
+    def group_count(cls, *args):
+        return cls.graph_traversal(None, None, Bytecode()).group_count(*args)
 
     @classmethod
     def has(cls, *args):
@@ -756,23 +1095,63 @@ class __(object, metaclass=MagicType):
 
     @classmethod
     def hasId(cls, *args):
-        return cls.graph_traversal(None, None, Bytecode()).hasId(*args)
+        warnings.warn(
+            "gremlin_python.process.__.hasId will be replaced by "
+            "gremlin_python.process.__.has_id.",
+            DeprecationWarning)
+        return cls.has_id(*args)
+
+    @classmethod
+    def has_id(cls, *args):
+        return cls.graph_traversal(None, None, Bytecode()).has_id(*args)
 
     @classmethod
     def hasKey(cls, *args):
-        return cls.graph_traversal(None, None, Bytecode()).hasKey(*args)
+        warnings.warn(
+            "gremlin_python.process.__.hasKey will be replaced by "
+            "gremlin_python.process.__.has_key.",
+            DeprecationWarning)
+        return cls.has_key_(*args)
+
+    @classmethod
+    def has_key_(cls, *args):
+        return cls.graph_traversal(None, None, Bytecode()).has_key_(*args)
 
     @classmethod
     def hasLabel(cls, *args):
-        return cls.graph_traversal(None, None, Bytecode()).hasLabel(*args)
+        warnings.warn(
+            "gremlin_python.process.__.hasLabel will be replaced by "
+            "gremlin_python.process.__.has_label.",
+            DeprecationWarning)
+        return cls.has_label(*args)
+
+    @classmethod
+    def has_label(cls, *args):
+        return cls.graph_traversal(None, None, Bytecode()).has_label(*args)
 
     @classmethod
     def hasNot(cls, *args):
-        return cls.graph_traversal(None, None, Bytecode()).hasNot(*args)
+        warnings.warn(
+            "gremlin_python.process.__.hasNot will be replaced by "
+            "gremlin_python.process.__.has_not.",
+            DeprecationWarning)
+        return cls.has_not(*args)
+
+    @classmethod
+    def has_not(cls, *args):
+        return cls.graph_traversal(None, None, Bytecode()).has_not(*args)
 
     @classmethod
     def hasValue(cls, *args):
-        return cls.graph_traversal(None, None, Bytecode()).hasValue(*args)
+        warnings.warn(
+            "gremlin_python.process.__.hasValue will be replaced by "
+            "gremlin_python.process.__.has_value.",
+            DeprecationWarning)
+        return cls.has_value(*args)
+
+    @classmethod
+    def has_value(cls, *args):
+        return cls.graph_traversal(None, None, Bytecode()).has_value(*args)
 
     @classmethod
     def id_(cls, *args):
@@ -784,11 +1163,27 @@ class __(object, metaclass=MagicType):
 
     @classmethod
     def inE(cls, *args):
-        return cls.graph_traversal(None, None, Bytecode()).inE(*args)
+        warnings.warn(
+            "gremlin_python.process.__.inE will be replaced by "
+            "gremlin_python.process.__.in_e.",
+            DeprecationWarning)
+        return cls.in_e(*args)
+
+    @classmethod
+    def in_e(cls, *args):
+        return cls.graph_traversal(None, None, Bytecode()).in_e(*args)
 
     @classmethod
     def inV(cls, *args):
-        return cls.graph_traversal(None, None, Bytecode()).inV(*args)
+        warnings.warn(
+            "gremlin_python.process.__.inV will be replaced by "
+            "gremlin_python.process.__.in_v.",
+            DeprecationWarning)
+        return cls.in_v(*args)
+
+    @classmethod
+    def in_v(cls, *args):
+        return cls.graph_traversal(None, None, Bytecode()).in_v(*args)
 
     @classmethod
     def in_(cls, *args):
@@ -847,12 +1242,12 @@ class __(object, metaclass=MagicType):
         return cls.graph_traversal(None, None, Bytecode()).mean(*args)
 
     @classmethod
-    def mergeE(cls, *args):
-        return cls.graph_traversal(None, None, Bytecode()).mergeE(*args)
+    def merge_e(cls, *args):
+        return cls.graph_traversal(None, None, Bytecode()).merge_e(*args)
 
     @classmethod
-    def mergeV(cls, *args):
-        return cls.graph_traversal(None, None, Bytecode()).mergeV(*args)
+    def merge_v(cls, *args):
+        return cls.graph_traversal(None, None, Bytecode()).merge_v(*args)
 
     @classmethod
     def min_(cls, *args):
@@ -876,7 +1271,15 @@ class __(object, metaclass=MagicType):
 
     @classmethod
     def otherV(cls, *args):
-        return cls.graph_traversal(None, None, Bytecode()).otherV(*args)
+        warnings.warn(
+            "gremlin_python.process.__.otherV will be replaced by "
+            "gremlin_python.process.__.other_v.",
+            DeprecationWarning)
+        return cls.other_v(*args)
+
+    @classmethod
+    def other_v(cls, *args):
+        return cls.graph_traversal(None, None, Bytecode()).other_v(*args)
 
     @classmethod
     def out(cls, *args):
@@ -884,11 +1287,27 @@ class __(object, metaclass=MagicType):
 
     @classmethod
     def outE(cls, *args):
-        return cls.graph_traversal(None, None, Bytecode()).outE(*args)
+        warnings.warn(
+            "gremlin_python.process.__.outE will be replaced by "
+            "gremlin_python.process.__.out_e.",
+            DeprecationWarning)
+        return cls.out_e(*args)
+
+    @classmethod
+    def out_e(cls, *args):
+        return cls.graph_traversal(None, None, Bytecode()).out_e(*args)
 
     @classmethod
     def outV(cls, *args):
-        return cls.graph_traversal(None, None, Bytecode()).outV(*args)
+        warnings.warn(
+            "gremlin_python.process.__.outV will be replaced by "
+            "gremlin_python.process.__.out_v.",
+            DeprecationWarning)
+        return cls.out_v(*args)
+
+    @classmethod
+    def out_v(cls, *args):
+        return cls.graph_traversal(None, None, Bytecode()).out_v(*args)
 
     @classmethod
     def path(cls, *args):
@@ -908,7 +1327,15 @@ class __(object, metaclass=MagicType):
 
     @classmethod
     def propertyMap(cls, *args):
-        return cls.graph_traversal(None, None, Bytecode()).propertyMap(*args)
+        warnings.warn(
+            "gremlin_python.process.__.propertyMap will be replaced by "
+            "gremlin_python.process.__.property_map.",
+            DeprecationWarning)
+        return cls.property_map(*args)
+
+    @classmethod
+    def property_map(cls, *args):
+        return cls.graph_traversal(None, None, Bytecode()).property_map(*args)
 
     @classmethod
     def range_(cls, *args):
@@ -932,11 +1359,27 @@ class __(object, metaclass=MagicType):
 
     @classmethod
     def sideEffect(cls, *args):
-        return cls.graph_traversal(None, None, Bytecode()).sideEffect(*args)
+        warnings.warn(
+            "gremlin_python.process.__.sideEffect will be replaced by "
+            "gremlin_python.process.__.side_effect.",
+            DeprecationWarning)
+        return cls.side_effect(*args)
+
+    @classmethod
+    def side_effect(cls, *args):
+        return cls.graph_traversal(None, None, Bytecode()).side_effect(*args)
 
     @classmethod
     def simplePath(cls, *args):
-        return cls.graph_traversal(None, None, Bytecode()).simplePath(*args)
+        warnings.warn(
+            "gremlin_python.process.__.simplePath will be replaced by "
+            "gremlin_python.process.__.simple_path.",
+            DeprecationWarning)
+        return cls.simple_path(*args)
+
+    @classmethod
+    def simple_path(cls, *args):
+        return cls.graph_traversal(None, None, Bytecode()).simple_path(*args)
 
     @classmethod
     def skip(cls, *args):
@@ -960,7 +1403,15 @@ class __(object, metaclass=MagicType):
 
     @classmethod
     def timeLimit(cls, *args):
-        return cls.graph_traversal(None, None, Bytecode()).timeLimit(*args)
+        warnings.warn(
+            "gremlin_python.process.__.timeLimit will be replaced by "
+            "gremlin_python.process.__.time_limit.",
+            DeprecationWarning)
+        return cls.time_limit(*args)
+
+    @classmethod
+    def time_limit(cls, *args):
+        return cls.graph_traversal(None, None, Bytecode()).time_limit(*args)
 
     @classmethod
     def times(cls, *args):
@@ -972,11 +1423,27 @@ class __(object, metaclass=MagicType):
 
     @classmethod
     def toE(cls, *args):
-        return cls.graph_traversal(None, None, Bytecode()).toE(*args)
+        warnings.warn(
+            "gremlin_python.process.__.toE will be replaced by "
+            "gremlin_python.process.__.to_e.",
+            DeprecationWarning)
+        return cls.to_e(*args)
+
+    @classmethod
+    def to_e(cls, *args):
+        return cls.graph_traversal(None, None, Bytecode()).to_e(*args)
 
     @classmethod
     def toV(cls, *args):
-        return cls.graph_traversal(None, None, Bytecode()).toV(*args)
+        warnings.warn(
+            "gremlin_python.process.__.toV will be replaced by "
+            "gremlin_python.process.__.to_v.",
+            DeprecationWarning)
+        return cls.to_v(*args)
+
+    @classmethod
+    def to_v(cls, *args):
+        return cls.graph_traversal(None, None, Bytecode()).to_v(*args)
 
     @classmethod
     def tree(cls, *args):
@@ -1000,7 +1467,15 @@ class __(object, metaclass=MagicType):
 
     @classmethod
     def valueMap(cls, *args):
-        return cls.graph_traversal(None, None, Bytecode()).valueMap(*args)
+        warnings.warn(
+            "gremlin_python.process.__.valueMap will be replaced by "
+            "gremlin_python.process.__.value_map.",
+            DeprecationWarning)
+        return cls.value_map(*args)
+
+    @classmethod
+    def value_map(cls, *args):
+        return cls.graph_traversal(None, None, Bytecode()).value_map(*args)
 
     @classmethod
     def values(cls, *args):
@@ -1062,6 +1537,13 @@ class Transaction:
     # Return whether or not transaction is open.
     # Allow camelcase function here to keep api consistent with other languages.
     def isOpen(self):
+        warnings.warn(
+            "gremlin_python.process.Transaction.isOpen will be replaced by "
+            "gremlin_python.process.Transaction.is_open.",
+            DeprecationWarning)
+        return self.is_open()
+
+    def is_open(self):
         return self.__is_open
 
     def __verify_transaction_state(self, state, error_message):
@@ -1082,10 +1564,18 @@ def addE(*args):
     return __.addE(*args)
 
 
+def add_e(*args):
+    return __.add_e(*args)
+
+
 def addV(*args):
     return __.addV(*args)
 
 
+def add_v(*args):
+    return __.add_v(*args)
+
+
 def aggregate(*args):
     return __.aggregate(*args)
 
@@ -1110,10 +1600,18 @@ def bothE(*args):
     return __.bothE(*args)
 
 
+def both_e(*args):
+    return __.both_e(*args)
+
+
 def bothV(*args):
     return __.bothV(*args)
 
 
+def both_v(*args):
+    return __.both_v(*args)
+
+
 def branch(*args):
     return __.branch(*args)
 
@@ -1146,6 +1644,10 @@ def cyclicPath(*args):
     return __.cyclicPath(*args)
 
 
+def cyclic_path(*args):
+    return __.cyclic_path(*args)
+
+
 def dedup(*args):
     return __.dedup(*args)
 
@@ -1158,6 +1660,10 @@ def elementMap(*args):
     return __.elementMap(*args)
 
 
+def element_map(*args):
+    return __.element_map(*args)
+
+
 def emit(*args):
     return __.emit(*args)
 
@@ -1174,6 +1680,10 @@ def flatMap(*args):
     return __.flatMap(*args)
 
 
+def flat_map(*args):
+    return __.flat_map(*args)
+
+
 def fold(*args):
     return __.fold(*args)
 
@@ -1186,6 +1696,10 @@ def groupCount(*args):
     return __.groupCount(*args)
 
 
+def group_count(*args):
+    return __.group_count(*args)
+
+
 def has(*args):
     return __.has(*args)
 
@@ -1194,22 +1708,42 @@ def hasId(*args):
     return __.hasId(*args)
 
 
+def has_id(*args):
+    return __.has_id(*args)
+
+
 def hasKey(*args):
     return __.hasKey(*args)
 
 
+def has_key_(*args):
+    return __.has_key_(*args)
+
+
 def hasLabel(*args):
     return __.hasLabel(*args)
 
 
+def has_label(*args):
+    return __.has_label(*args)
+
+
 def hasNot(*args):
     return __.hasNot(*args)
 
 
+def has_not(*args):
+    return __.has_not(*args)
+
+
 def hasValue(*args):
     return __.hasValue(*args)
 
 
+def has_value(*args):
+    return __.has_value(*args)
+
+
 def id_(*args):
     return __.id_(*args)
 
@@ -1222,10 +1756,18 @@ def inE(*args):
     return __.inE(*args)
 
 
+def in_e(*args):
+    return __.in_e(*args)
+
+
 def inV(*args):
     return __.inV(*args)
 
 
+def in_v(*args):
+    return __.in_v(*args)
+
+
 def in_(*args):
     return __.in_(*args)
 
@@ -1282,12 +1824,12 @@ def mean(*args):
     return __.mean(*args)
 
 
-def mergeE(*args):
-    return __.mergeE(*args)
+def merge_e(*args):
+    return __.merge_e(*args)
 
 
-def mergeV(*args):
-    return __.mergeV(*args)
+def merge_v(*args):
+    return __.merge_v(*args)
 
 
 def min_(*args):
@@ -1314,6 +1856,10 @@ def otherV(*args):
     return __.otherV(*args)
 
 
+def other_v(*args):
+    return __.other_v(*args)
+
+
 def out(*args):
     return __.out(*args)
 
@@ -1322,10 +1868,18 @@ def outE(*args):
     return __.outE(*args)
 
 
+def out_e(*args):
+    return __.out_e(*args)
+
+
 def outV(*args):
     return __.outV(*args)
 
 
+def out_v(*args):
+    return __.out_v(*args)
+
+
 def path(*args):
     return __.path(*args)
 
@@ -1346,6 +1900,10 @@ def propertyMap(*args):
     return __.propertyMap(*args)
 
 
+def property_map(*args):
+    return __.property_map(*args)
+
+
 def range_(*args):
     return __.range_(*args)
 
@@ -1370,10 +1928,18 @@ def sideEffect(*args):
     return __.sideEffect(*args)
 
 
+def side_effect(*args):
+    return __.side_effect(*args)
+
+
 def simplePath(*args):
     return __.simplePath(*args)
 
 
+def simple_path(*args):
+    return __.simple_path(*args)
+
+
 def skip(*args):
     return __.skip(*args)
 
@@ -1398,6 +1964,10 @@ def timeLimit(*args):
     return __.timeLimit(*args)
 
 
+def time_limit(*args):
+    return __.time_limit(*args)
+
+
 def times(*args):
     return __.times(*args)
 
@@ -1410,10 +1980,18 @@ def toE(*args):
     return __.toE(*args)
 
 
+def to_e(*args):
+    return __.to_e(*args)
+
+
 def toV(*args):
     return __.toV(*args)
 
 
+def to_v(*args):
+    return __.to_v(*args)
+
+
 def tree(*args):
     return __.tree(*args)
 
@@ -1438,6 +2016,10 @@ def valueMap(*args):
     return __.valueMap(*args)
 
 
+def value_map(*args):
+    return __.value_map(*args)
+
+
 def values(*args):
     return __.values(*args)
 
@@ -1450,8 +2032,12 @@ statics.add_static('V', V)
 
 statics.add_static('addE', addE)
 
+statics.add_static('add_E', add_e)
+
 statics.add_static('addV', addV)
 
+statics.add_static('add_v', add_v)
+
 statics.add_static('aggregate', aggregate)
 
 statics.add_static('and_', and_)
@@ -1464,8 +2050,12 @@ statics.add_static('both', both)
 
 statics.add_static('bothE', bothE)
 
+statics.add_static('both_e', both_e)
+
 statics.add_static('bothV', bothV)
 
+statics.add_static('both_v', both_v)
+
 statics.add_static('branch', branch)
 
 statics.add_static('cap', cap)
@@ -1482,12 +2072,16 @@ statics.add_static('count', count)
 
 statics.add_static('cyclicPath', cyclicPath)
 
+statics.add_static('cyclicpath', cyclic_path)
+
 statics.add_static('dedup', dedup)
 
 statics.add_static('drop', drop)
 
 statics.add_static('elementMap', elementMap)
 
+statics.add_static('element_map', element_map)
+
 statics.add_static('emit', emit)
 
 statics.add_static('fail', fail)
@@ -1496,31 +2090,47 @@ statics.add_static('filter_', filter_)
 
 statics.add_static('flatMap', flatMap)
 
+statics.add_static('flat_map', flat_map)
+
 statics.add_static('fold', fold)
 
 statics.add_static('group', group)
 
 statics.add_static('groupCount', groupCount)
 
+statics.add_static('group_count', group_count)
+
 statics.add_static('has', has)
 
 statics.add_static('hasId', hasId)
 
+statics.add_static('has_id', has_id)
+
 statics.add_static('hasKey', hasKey)
 
+statics.add_static('has_key', has_key_)
+
 statics.add_static('hasLabel', hasLabel)
 
+statics.add_static('has_label', has_label)
+
 statics.add_static('hasNot', hasNot)
 
+statics.add_static('has_not', has_not)
+
 statics.add_static('hasValue', hasValue)
 
+statics.add_static('has_value', has_value)
+
 statics.add_static('id_', id_)
 
 statics.add_static('identity', identity)
 
 statics.add_static('inE', inE)
 
-statics.add_static('inV', inV)
+statics.add_static('in_e', in_e)
+
+statics.add_static('in_v', in_v)
 
 statics.add_static('in_', in_)
 
@@ -1550,9 +2160,9 @@ statics.add_static('max_', max_)
 
 statics.add_static('mean', mean)
 
-statics.add_static('mergeE', mergeE)
+statics.add_static('merge_e', merge_e)
 
-statics.add_static('mergeV', mergeV)
+statics.add_static('merge_v', merge_v)
 
 statics.add_static('min_', min_)
 
@@ -1566,12 +2176,18 @@ statics.add_static('order', order)
 
 statics.add_static('otherV', otherV)
 
+statics.add_static('other_v', other_v)
+
 statics.add_static('out', out)
 
 statics.add_static('outE', outE)
 
+statics.add_static('out_e', out_e)
+
 statics.add_static('outV', outV)
 
+statics.add_static('out_v', out_v)
+
 statics.add_static('path', path)
 
 statics.add_static('project', project)
@@ -1582,6 +2198,8 @@ statics.add_static('property', property)
 
 statics.add_static('propertyMap', propertyMap)
 
+statics.add_static('property_map', property_map)
+
 statics.add_static('range_', range_)
 
 statics.add_static('repeat', repeat)
@@ -1594,8 +2212,12 @@ statics.add_static('select', select)
 
 statics.add_static('sideEffect', sideEffect)
 
+statics.add_static('side_effect', side_effect)
+
 statics.add_static('simplePath', simplePath)
 
+statics.add_static('simple_path', simple_path)
+
 statics.add_static('skip', skip)
 
 statics.add_static('store', store)
@@ -1608,14 +2230,20 @@ statics.add_static('tail', tail)
 
 statics.add_static('timeLimit', timeLimit)
 
+statics.add_static('time_limit', time_limit)
+
 statics.add_static('times', times)
 
 statics.add_static('to', to)
 
 statics.add_static('toE', toE)
 
+statics.add_static('to_e', to_e)
+
 statics.add_static('toV', toV)
 
+statics.add_static('to_v', to_v)
+
 statics.add_static('tree', tree)
 
 statics.add_static('unfold', unfold)
@@ -1628,6 +2256,8 @@ statics.add_static('value', value)
 
 statics.add_static('valueMap', valueMap)
 
+statics.add_static('value_map', value_map)
+
 statics.add_static('values', values)
 
 statics.add_static('where', where)
diff --git a/gremlin-python/src/main/python/gremlin_python/process/translator.py b/gremlin-python/src/main/python/gremlin_python/process/translator.py
index 7421e86..8c58760 100755
--- a/gremlin-python/src/main/python/gremlin_python/process/translator.py
+++ b/gremlin-python/src/main/python/gremlin_python/process/translator.py
@@ -41,7 +41,7 @@ class Translator:
     options = {
       WithOptions.tokens: 'tokens',
       WithOptions.none: 'none',
-      WithOptions.ids:'ids',
+      WithOptions.ids: 'ids',
       WithOptions.labels: 'labels',
       WithOptions.keys: 'keys',
       WithOptions.values: 'values',
@@ -110,7 +110,7 @@ class Translator:
             res += key + ':'
             val = s.configuration[key]
             if isinstance(val, Traversal):
-                res += self.translate(val.bytecode,child=True)
+                res += self.translate(val.bytecode, child=True)
             else:
                 res += self.fixup(val)
             c += 1
@@ -135,7 +135,7 @@ class Translator:
                     script += self.translate(p, True)
                 elif type(p) == P:
                     script += self.process_predicate(p)
-                elif type(p) in [Cardinality, Pop]:
+                elif type(p) in [Cardinality, Pop, Operator]:
                     tmp = str(p)
                     script += tmp[0:-1] if tmp.endswith('_') else tmp 
                 elif type(p) in [ReadOnlyStrategy, SubgraphStrategy, VertexProgramStrategy,
diff --git a/gremlin-python/src/main/python/gremlin_python/process/traversal.py b/gremlin-python/src/main/python/gremlin_python/process/traversal.py
index 4291510..09cf473 100644
--- a/gremlin-python/src/main/python/gremlin_python/process/traversal.py
+++ b/gremlin-python/src/main/python/gremlin_python/process/traversal.py
@@ -18,6 +18,7 @@
 #
 
 import copy
+import warnings
 from aenum import Enum
 from .. import statics
 from ..statics import long
@@ -54,9 +55,23 @@ class Traversal(object):
         return object
 
     def toList(self):
+        warnings.warn(
+            "gremlin_python.process.Traversal.toList will be replaced by "
+            "gremlin_python.process.Traversal.to_list.",
+            DeprecationWarning)
+        return self.to_list()
+
+    def to_list(self):
         return list(iter(self))
 
     def toSet(self):
+        warnings.warn(
+            "gremlin_python.process.Traversal.toSet will be replaced by "
+            "gremlin_python.process.Traversal.to_set.",
+            DeprecationWarning)
+        return self.to_set()
+
+    def to_set(self):
         return set(iter(self))
 
     def iterate(self):
@@ -66,6 +81,13 @@ class Traversal(object):
             except StopIteration: return self
 
     def nextTraverser(self):
+        warnings.warn(
+            "gremlin_python.process.Traversal.nextTraverser will be replaced by "
+            "gremlin_python.process.Traversal.next_traverser.",
+            DeprecationWarning)
+        return self.next_traverser()
+
+    def next_traverser(self):
         if self.traversers is None:
             self.traversal_strategies.apply_strategies(self)
         if self.last_traverser is None:
@@ -76,6 +98,13 @@ class Traversal(object):
             return temp
 
     def hasNext(self):
+        warnings.warn(
+            "gremlin_python.process.Traversal.hasNext will be replaced by "
+            "gremlin_python.process.Traversal.has_next.",
+            DeprecationWarning)
+        return self.has_next()
+
+    def has_next(self):
         if self.traversers is None:
             self.traversal_strategies.apply_strategies(self)
         if self.last_traverser is None:
@@ -154,10 +183,12 @@ GryoVersion = Enum('GryoVersion', ' V1_0 V3_0')
 statics.add_static('V1_0', GryoVersion.V1_0)
 statics.add_static('V3_0', GryoVersion.V3_0)
 
-Merge = Enum('Merge', ' onCreate onMatch')
+Merge = Enum('Merge', ' onCreate onMatch on_create on_match')
 
 statics.add_static('onCreate', Merge.onCreate)
 statics.add_static('onMatch', Merge.onMatch)
+statics.add_static('on_create', Merge.on_create)
+statics.add_static('on_match', Merge.on_match)
 
 Order = Enum('Order', ' asc desc shuffle')
 
@@ -192,10 +223,9 @@ statics.add_static('key', T.key)
 statics.add_static('value', T.value)
 
 
-Operator = Enum('Operator', ' addAll and_ assign div max max_ min min_ minus mult or_ sum sum_ sumLong')
+Operator = Enum('Operator', ' addAll add_all and_ assign div max max_ min min_ minus mult or_ sum_ sumLong sum_long')
 
 statics.add_static('sum_', Operator.sum_)
-statics.add_static('sum', Operator.sum_)
 statics.add_static('minus', Operator.minus)
 statics.add_static('mult', Operator.mult)
 statics.add_static('div', Operator.div)
@@ -206,7 +236,8 @@ statics.add_static('assign', Operator.assign)
 statics.add_static('and_', Operator.and_)
 statics.add_static('or_', Operator.or_)
 statics.add_static('addAll', Operator.addAll)
-statics.add_static('sumLong', Operator.sumLong)
+statics.add_static('add_all', Operator.add_all)
+statics.add_static('sum_long', Operator.sum_long)
 
 
 class P(object):
@@ -373,22 +404,62 @@ class TextP(P):
 
     @staticmethod
     def endingWith(*args):
+        warnings.warn(
+            "gremlin_python.process.TextP.endingWith will be replaced by "
+            "gremlin_python.process.TextP.ending_with.",
+            DeprecationWarning)
+        return TextP("endingWith", *args)
+
+    @staticmethod
+    def ending_with(*args):
         return TextP("endingWith", *args)
 
     @staticmethod
     def notContaining(*args):
+        warnings.warn(
+            "gremlin_python.process.TextP.notContaining will be replaced by "
+            "gremlin_python.process.TextP.not_containing.",
+            DeprecationWarning)
+        return TextP("notContaining", *args)
+
+    @staticmethod
+    def not_containing(*args):
         return TextP("notContaining", *args)
 
     @staticmethod
     def notEndingWith(*args):
+        warnings.warn(
+            "gremlin_python.process.TextP.notEndingWith will be replaced by "
+            "gremlin_python.process.TextP.not_ending_with.",
+            DeprecationWarning)
+        return TextP("notEndingWith", *args)
+
+    @staticmethod
+    def not_ending_with(*args):
         return TextP("notEndingWith", *args)
 
     @staticmethod
     def notStartingWith(*args):
+        warnings.warn(
+            "gremlin_python.process.TextP.notStartingWith will be replaced by "
+            "gremlin_python.process.TextP.not_starting_With.",
+            DeprecationWarning)
+        return TextP("notStartingWith", *args)
+
+    @staticmethod
+    def not_starting_with(*args):
         return TextP("notStartingWith", *args)
 
     @staticmethod
     def startingWith(*args):
+        warnings.warn(
+            "gremlin_python.process.TextP.startingWith will be replaced by "
+            "gremlin_python.process.TextP.startingWith.",
+            DeprecationWarning)
+        return TextP("startingWith", *args)
+
+    @staticmethod
+    def starting_with(*args):
         return TextP("startingWith", *args)
 
     def __eq__(self, other):
@@ -403,38 +474,66 @@ def containing(*args):
 
 
 def endingWith(*args):
-    return TextP.endingWith(*args)
+    return TextP.ending_with(*args)
+
+
+def ending_with(*args):
+    return TextP.ending_with(*args)
 
 
 def notContaining(*args):
-    return TextP.notContaining(*args)
+    return TextP.not_containing(*args)
+
+
+def not_containing(*args):
+    return TextP.not_containing(*args)
 
 
 def notEndingWith(*args):
-    return TextP.notEndingWith(*args)
+    return TextP.not_ending_with(*args)
+
+
+def not_ending_with(*args):
+    return TextP.not_ending_with(*args)
 
 
 def notStartingWith(*args):
-    return TextP.notStartingWith(*args)
+    return TextP.not_starting_with(*args)
+
+
+def not_starting_with(*args):
+    return TextP.not_starting_with(*args)
 
 
 def startingWith(*args):
-    return TextP.startingWith(*args)
+    return TextP.starting_with(*args)
+
+
+def starting_with(*args):
+    return TextP.starting_with(*args)
 
 
 statics.add_static('containing', containing)
 
 statics.add_static('endingWith', endingWith)
 
+statics.add_static('ending_with', ending_with)
+
 statics.add_static('notContaining', notContaining)
 
+statics.add_static('not_containing', not_containing)
+
 statics.add_static('notEndingWith', notEndingWith)
 
+statics.add_static('not_ending_with', not_ending_with)
+
 statics.add_static('notStartingWith', notStartingWith)
 
-statics.add_static('startingWith', startingWith)
+statics.add_static('not_starting_with', not_starting_with)
 
+statics.add_static('startingWith', startingWith)
 
+statics.add_static('starting_with', starting_with)
 
 
 '''
@@ -470,6 +569,8 @@ class ConnectedComponent(object):
 
     propertyName = "~tinkerpop.connectedComponent.propertyName"
 
+    property_name = "~tinkerpop.connectedComponent.propertyName"
+
 
 '''
 ShortestPath
@@ -484,8 +585,12 @@ class ShortestPath(object):
 
     includeEdges = "~tinkerpop.shortestPath.includeEdges"
 
+    include_edges = "~tinkerpop.shortestPath.includeEdges"
+
     maxDistance = "~tinkerpop.shortestPath.maxDistance"
 
+    max_distance = "~tinkerpop.shortestPath.maxDistance"
+
     target = "~tinkerpop.shortestPath.target"
 
 
@@ -500,6 +605,8 @@ class PageRank(object):
 
     propertyName = "~tinkerpop.pageRank.propertyName"
 
+    property_name = "~tinkerpop.pageRank.propertyName"
+
     times = "~tinkerpop.pageRank.times"
 
 
@@ -514,6 +621,8 @@ class PeerPressure(object):
 
     propertyName = "~tinkerpop.peerPressure.propertyName"
 
+    property_name = "~tinkerpop.pageRank.propertyName"
+
     times = "~tinkerpop.peerPressure.times"
 
 
diff --git a/gremlin-python/src/main/python/radish/gremlin.py b/gremlin-python/src/main/python/radish/gremlin.py
index 32b9a08..a0e6dcc 100644
--- a/gremlin-python/src/main/python/radish/gremlin.py
+++ b/gremlin-python/src/main/python/radish/gremlin.py
@@ -473,70 +473,70 @@ world.gremlins = {
     'g_withStrategiesXProductiveByStrategyX_V_aggregateXaX_byXfooX_capXaX_unfold_mean': [(lambda g:g.withStrategies(*[TraversalStrategy('ProductiveByStrategy',{'productiveKeys':[],'strategy':'org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.ProductiveByStrategy'}, 'org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.ProductiveByStrategy')]).V().aggregate('a').by('foo').cap('a').unfold().mean())], 
     'g_injectXnull_10_20_nullX_mean': [(lambda g, xx1=None,xx2=None:g.inject(None,xx1,xx2,None).mean())], 
     'g_injectXlistXnull_10_20_nullXX_meanXlocalX': [(lambda g, xx1=None:g.inject(xx1).mean(Scope.local))], 
-    'g_V_mergeEXlabel_selfX_optionXonMatch_emptyX': [(lambda g, xx1=None:g.addV('person').property('name','marko').property('age',29).addE('self')), (lambda g, xx1=None:g.V().mergeE(xx1).option(Merge.onMatch,{})), (lambda g, xx1=None:g.E()), (lambda g, xx1=None:g.E().properties()), (lambda g, xx1=None:g.V())], 
-    'g_V_mergeEXlabel_selfX_optionXonMatch_nullX': [(lambda g, xx1=None:g.addV('person').property('name','marko').property('age',29).addE('self')), (lambda g, xx1=None:g.V().mergeE(xx1).option(Merge.onMatch,None)), (lambda g, xx1=None:g.E()), (lambda g, xx1=None:g.E().properties()), (lambda g, xx1=None:g.V())], 
-    'g_V_mergeEXlabel_selfX_optionXonCreate_emptyX': [(lambda g, xx1=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None:g.V().mergeE(xx1).option(Merge.onCreate,{})), (lambda g, xx1=None:g.E()), (lambda g, xx1=None:g.V()), (lambda g, xx1=None:g.E().hasLabel('self'))], 
-    'g_V_mergeEXemptyX_optionXonCreate_nullX': [(lambda g:g.addV('person').property('name','marko').property('age',29)), (lambda g:g.V().mergeE({}).option(Merge.onCreate,None)), (lambda g:g.E()), (lambda g:g.V())], 
-    'g_V_mergeEXlabel_knowsX_optionXonCreate_created_YX_optionXonMatch_created_NX_exists_updated': [(lambda g, xx1=None,xx3=None,xx2=None:g.addV('person').property(T.id_,100).property('name','marko').as_('a').addV('person').property(T.id_,101).property('name','vadas').as_('b').addE('knows').from_('a').to('b').property('created','Y').addE('knows').from_('b').to('a').addE('friends').from_('b').to('a')), (lambda g, xx1=None,xx3=None,xx2=None:g.V().mergeE(xx1).option(Merge.onCreate,xx2).opti [...]
-    'g_mergeEXemptyX_exists': [(lambda g:g.addV('person').property('name','marko').property('age',29).addE('self')), (lambda g:g.mergeE({})), (lambda g:g.E()), (lambda g:g.V())], 
-    'g_mergeEXemptyX': [(lambda g:g.addV('person').property('name','marko').property('age',29)), (lambda g:g.mergeE({}))], 
-    'g_V_mergeEXemptyX_two_exist': [(lambda g:g.addV('person').property('name','marko').property('age',29).addV('person').property('name','vadas').property('age',27)), (lambda g:g.V().mergeE({})), (lambda g:g.E()), (lambda g:g.V())], 
-    'g_mergeEXnullX': [(lambda g:g.addV('person').property('name','marko').property('age',29)), (lambda g:g.mergeE(None)), (lambda g:g.E()), (lambda g:g.V())], 
-    'g_V_mergeEXnullX': [(lambda g:g.addV('person').property('name','marko').property('age',29)), (lambda g:g.V().mergeE(None)), (lambda g:g.E()), (lambda g:g.V())], 
-    'g_V_mergeEXlabel_self_weight_05X': [(lambda g, xx1=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None:g.V().mergeE(xx1)), (lambda g, xx1=None:g.E()), (lambda g, xx1=None:g.V()), (lambda g, xx1=None:g.V().has('person','name','marko').as_('a').outE('self').has('weight',float(0.5)).inV().where(P.eq('a')))], 
-    'g_mergeEXlabel_knows_out_marko_in_vadasX': [(lambda g, xx1=None:g.addV('person').property(T.id_,100).property('name','marko').addV('person').property(T.id_,101).property('name','vadas')), (lambda g, xx1=None:g.mergeE(xx1)), (lambda g, xx1=None:g.V().has('person','name','marko').out('knows').has('person','name','vadas'))], 
-    'g_withSideEffectXa_label_knows_out_marko_in_vadasX_mergeEXselectXaXX': [(lambda g, xx1=None:g.addV('person').property(T.id_,100).property('name','marko').addV('person').property(T.id_,101).property('name','vadas')), (lambda g, xx1=None:g.withSideEffect('a',xx1).mergeE(__.select('a'))), (lambda g, xx1=None:g.V().has('person','name','marko').out('knows').has('person','name','vadas'))], 
-    'g_mergeEXlabel_knows_out_marko1_in_vadas1X': [(lambda g, xx1=None:g.addV('person').property(T.id_,100).property('name','marko').addV('person').property(T.id_,101).property('name','vadas')), (lambda g, xx1=None:g.mergeE(xx1)), (lambda g, xx1=None:g.V().has('person','name','marko').out('knows').has('person','name','vadas'))], 
-    'g_mergeEXlabel_knows_out_marko_in_vadas_weight_05X_exists': [(lambda g, xx1=None:g.addV('person').property(T.id_,100).property('name','marko').as_('a').addV('person').property(T.id_,101).property('name','vadas').as_('b').addE('knows').from_('a').to('b')), (lambda g, xx1=None:g.mergeE(xx1)), (lambda g, xx1=None:g.V().has('person','name','marko').outE('knows').has('weight',float(0.5)).inV().has('person','name','vadas')), (lambda g, xx1=None:g.V().has('person','name','marko').out('know [...]
-    'g_mergeEXlabel_knows_out_marko_in_vadas_weight_05X': [(lambda g, xx1=None:g.mergeE(xx1))], 
-    'g_mergeEXlabel_knows_out_marko_in_vadasX_optionXonCreate_created_YX_optionXonMatch_created_NX': [(lambda g, xx1=None,xx3=None,xx2=None:g.mergeE(xx1).option(Merge.onCreate,xx2).option(Merge.onMatch,xx3))], 
-    'g_mergeEXlabel_knows_out_marko_in_vadasX_optionXonCreate_created_YX_optionXonMatch_created_NX_exists': [(lambda g, xx1=None,xx3=None,xx2=None:g.addV('person').property(T.id_,100).property('name','marko').as_('a').addV('person').property(T.id_,101).property('name','vadas').as_('b').addE('knows').from_('a').to('b')), (lambda g, xx1=None,xx3=None,xx2=None:g.mergeE(xx1).option(Merge.onCreate,xx2).option(Merge.onMatch,xx3)), (lambda g, xx1=None,xx3=None,xx2=None:g.V()), (lambda g, xx1=No [...]
-    'g_mergeEXlabel_knows_out_marko_in_vadasX_optionXonCreate_created_YX_optionXonMatch_created_NX_exists_updated': [(lambda g, xx1=None,xx3=None,xx2=None:g.addV('person').property(T.id_,100).property('name','marko').as_('a').addV('person').property(T.id_,101).property('name','vadas').as_('b').addE('knows').from_('a').to('b').property('created','Y')), (lambda g, xx1=None,xx3=None,xx2=None:g.mergeE(xx1).option(Merge.onCreate,xx2).option(Merge.onMatch,xx3)), (lambda g, xx1=None,xx3=None,xx [...]
-    'g_V_hasXperson_name_marko_X_mergeEXlabel_knowsX_optionXonCreate_created_YX_optionXonMatch_created_NX_exists_updated': [(lambda g, xx1=None,xx3=None,xx2=None:g.addV('person').property(T.id_,100).property('name','marko').as_('a').addV('person').property(T.id_,101).property('name','vadas').as_('b').addE('knows').from_('a').to('b').property('created','Y').addE('knows').from_('a').to('b')), (lambda g, xx1=None,xx3=None,xx2=None:g.V().has('person','name','marko').mergeE(xx1).option(Merge. [...]
-    'g_injectXlabel_knows_out_marko_in_vadasX_mergeE': [(lambda g, xx1=None:g.addV('person').property(T.id_,100).property('name','marko').addV('person').property(T.id_,101).property('name','vadas')), (lambda g, xx1=None:g.inject(xx1).mergeE()), (lambda g, xx1=None:g.V().has('person','name','marko').out('knows').has('person','name','vadas'))], 
-    'g_mergeEXlabel_knows_in_vadasX_optionXonCreate_created_YX_optionXonMatch_created_NX_exists_updated': [(lambda g, xx1=None,xx3=None,xx2=None:g.addV('person').property(T.id_,100).property('name','marko').as_('a').addV('person').property(T.id_,101).property('name','vadas').as_('b').addE('knows').from_('a').to('b').property('created','Y').addE('knows').from_('b').to('a').property('created','Y')), (lambda g, xx1=None,xx3=None,xx2=None:g.mergeE(xx1).option(Merge.onCreate,xx2).option(Merge [...]
-    'g_mergeEXlabel_knows_out_vadasX_optionXonCreate_created_YX_optionXonMatch_created_NX_exists_updated': [(lambda g, xx1=None,xx3=None,xx2=None:g.addV('person').property(T.id_,100).property('name','marko').as_('a').addV('person').property(T.id_,101).property('name','vadas').as_('b').addE('knows').from_('a').to('b').property('created','Y').addE('knows').from_('b').to('a').property('created','Y')), (lambda g, xx1=None,xx3=None,xx2=None:g.mergeE(xx1).option(Merge.onCreate,xx2).option(Merg [...]
-    'g_mergeEXout_vadasX_optionXonCreate_created_YX_optionXonMatch_created_NX_exists_updated': [(lambda g, xx1=None,xx3=None,xx2=None:g.addV('person').property(T.id_,100).property('name','marko').as_('a').addV('person').property(T.id_,101).property('name','vadas').as_('b').addE('knows').from_('a').to('b').property('created','Y').addE('knows').from_('b').to('a').property('created','Y')), (lambda g, xx1=None,xx3=None,xx2=None:g.mergeE(xx1).option(Merge.onCreate,xx2).option(Merge.onMatch,xx [...]
-    'g_V_hasXperson_name_marko_X_mergeEXlabel_self_out_vadas1_in_vadas1X': [(lambda g, xx1=None:g.addV('person').property(T.id_,100).property('name','marko').addV('person').property(T.id_,101).property('name','vadas')), (lambda g, xx1=None:g.V().has('person','name','marko').mergeE(xx1)), (lambda g, xx1=None:g.V()), (lambda g, xx1=None:g.E()), (lambda g, xx1=None:g.E().hasLabel('self').bothV().has('name','vadas'))], 
-    'g_withSideEffectXc_created_YX_withSideEffectXm_matchedX_mergeEXlabel_knows_out_marko_in_vadasX_optionXonCreate_selectXcXX_optionXonMatch_selectXmXX_exists': [(lambda g, xx1=None,xx3=None,xx2=None:g.addV('person').property(T.id_,100).property('name','marko').as_('a').addV('person').property(T.id_,101).property('name','vadas').as_('b').addE('knows').from_('a').to('b')), (lambda g, xx1=None,xx3=None,xx2=None:g.withSideEffect('c',xx2).withSideEffect('m',xx3).mergeE(xx1).option(Merge.onC [...]
-    'g_withSideEffectXc_created_YX_withSideEffectXm_matchedX_mergeEXlabel_knows_out_marko_in_vadasX_optionXonCreate_selectXcXX_optionXonMatch_selectXmXX': [(lambda g, xx1=None,xx3=None,xx2=None:g.addV('person').property(T.id_,100).property('name','marko').as_('a').addV('person').property(T.id_,101).property('name','vadas').as_('b')), (lambda g, xx1=None,xx3=None,xx2=None:g.withSideEffect('c',xx2).withSideEffect('m',xx3).mergeE(xx1).option(Merge.onCreate,__.select('c')).option(Merge.onMat [...]
-    'g_withSideEffectXc_created_YX_withSideEffectXm_matchedX_mergeEXlabel_knows_out_marko1_in_vadas1X_optionXonCreate_selectXcXX_optionXonMatch_selectXmXX': [(lambda g, xx1=None,xx3=None,xx2=None:g.addV('person').property(T.id_,100).property('name','marko').as_('a').addV('person').property(T.id_,101).property('name','vadas').as_('b')), (lambda g, xx1=None,xx3=None,xx2=None:g.withSideEffect('c',xx2).withSideEffect('m',xx3).mergeE(xx1).option(Merge.onCreate,__.select('c')).option(Merge.onM [...]
-    'g_V_mapXmergeEXlabel_self_weight_05XX': [(lambda g, xx1=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None:g.V().map(__.mergeE(xx1))), (lambda g, xx1=None:g.E()), (lambda g, xx1=None:g.V()), (lambda g, xx1=None:g.V().has('person','name','marko').as_('a').outE('self').has('weight',float(0.5)).inV().where(P.eq('a')))], 
-    'g_mergeEXlabel_knows_out_marko_in_vadasX_aliased_direction': [(lambda g, xx1=None:g.addV('person').property(T.id_,100).property('name','marko').addV('person').property(T.id_,101).property('name','vadas')), (lambda g, xx1=None:g.mergeE(xx1)), (lambda g, xx1=None:g.V().has('person','name','marko').out('knows').has('person','name','vadas'))], 
-    'g_injectXlabel_knows_out_marko_in_vadas_label_self_out_vadas_in_vadasX': [(lambda g, xx1=None,xx2=None:g.addV('person').property(T.id_,100).property('name','marko').addV('person').property(T.id_,101).property('name','vadas')), (lambda g, xx1=None,xx2=None:g.inject(xx1,xx2).mergeE()), (lambda g, xx1=None,xx2=None:g.V()), (lambda g, xx1=None,xx2=None:g.E()), (lambda g, xx1=None,xx2=None:g.V().has('person','name','marko').out('knows').has('person','name','vadas')), (lambda g, xx1=None, [...]
-    'g_mergeVXemptyX_optionXonMatch_nullX': [(lambda g:g.addV('person').property('name','marko').property('age',29)), (lambda g:g.mergeV({}).option(Merge.onMatch,None)), (lambda g:g.V().has('person','name','marko').has('age',29))], 
-    'g_V_mergeVXemptyX_optionXonMatch_nullX': [(lambda g:g.addV('person').property('name','marko').property('age',29)), (lambda g:g.V().mergeV({}).option(Merge.onMatch,None)), (lambda g:g.V().has('person','name','marko').has('age',29))], 
-    'g_mergeVXnullX_optionXonCreate_label_null_name_markoX': [(lambda g, xx1=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None:g.mergeV(None).option(Merge.onCreate,xx1))], 
-    'g_V_mergeVXnullX_optionXonCreate_label_null_name_markoX': [(lambda g, xx1=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None:g.V().mergeV(None).option(Merge.onCreate,xx1))], 
-    'g_mergeVXlabel_person_name_stephenX_optionXonCreate_nullX': [(lambda g, xx1=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None:g.mergeV(xx1).option(Merge.onCreate,None)), (lambda g, xx1=None:g.V()), (lambda g, xx1=None:g.V().has('person','name','marko'))], 
-    'g_V_mergeVXlabel_person_name_stephenX_optionXonCreate_nullX': [(lambda g, xx1=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None:g.V().mergeV(xx1).option(Merge.onCreate,None)), (lambda g, xx1=None:g.V()), (lambda g, xx1=None:g.V().has('person','name','marko'))], 
-    'g_mergeVXnullX_optionXonCreate_emptyX': [(lambda g:g.addV('person').property('name','marko').property('age',29)), (lambda g:g.mergeV(None).option(Merge.onCreate,{})), (lambda g:g.V())], 
-    'g_V_mergeVXnullX_optionXonCreate_emptyX': [(lambda g:g.addV('person').property('name','marko').property('age',29)), (lambda g:g.V().mergeV(None).option(Merge.onCreate,{})), (lambda g:g.V())], 
-    'g_mergeVXemptyX_no_existing': [(lambda g:g.mergeV({})), (lambda g:g.V())], 
-    'g_injectX0X_mergeVXemptyX_no_existing': [(lambda g:g.inject(0).mergeV({})), (lambda g:g.V())], 
-    'g_mergeVXemptyX': [(lambda g:g.addV('person').property('name','marko').property('age',29)), (lambda g:g.mergeV({})), (lambda g:g.V().has('person','name','marko').has('age',29))], 
-    'g_V_mergeVXemptyX_two_exist': [(lambda g:g.addV('person').property('name','marko').property('age',29).addV('person').property('name','vadas').property('age',27)), (lambda g:g.V().mergeV({})), (lambda g:g.V()), (lambda g:g.V().has('person','name','marko').has('age',29)), (lambda g:g.V().has('person','name','vadas').has('age',27))], 
-    'g_mergeVXnullX': [(lambda g:g.addV('person').property('name','marko').property('age',29)), (lambda g:g.mergeV(None)), (lambda g:g.V())], 
-    'g_V_mergeVXnullX': [(lambda g:g.addV('person').property('name','marko').property('age',29)), (lambda g:g.V().mergeV(None)), (lambda g:g.V())], 
-    'g_mergeVXlabel_person_name_stephenX': [(lambda g, xx1=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None:g.mergeV(xx1)), (lambda g, xx1=None:g.V().has('person','name','stephen'))], 
-    'g_mergeVXlabel_person_name_markoX': [(lambda g, xx1=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None:g.mergeV(xx1)), (lambda g, xx1=None:g.V().has('person','name','marko'))], 
-    'g_mergeVXlabel_person_name_stephenX_optionXonCreate_label_person_name_stephen_age_19X_option': [(lambda g, xx1=None,xx2=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None,xx2=None:g.mergeV(xx1).option(Merge.onCreate,xx2)), (lambda g, xx1=None,xx2=None:g.V().has('person','name','stephen').has('age',19))], 
-    'g_mergeVXlabel_person_name_markoX_optionXonMatch_age_19X_option': [(lambda g, xx1=None,xx2=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None,xx2=None:g.mergeV(xx1).option(Merge.onMatch,xx2)), (lambda g, xx1=None,xx2=None:g.V().has('person','name','marko').has('age',19))], 
-    'g_withSideEffectXc_label_person_name_stephenX_withSideEffectXm_label_person_name_stephen_age_19X_mergeVXselectXcXX_optionXonCreate_selectXmXX_option': [(lambda g, xx1=None,xx2=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None,xx2=None:g.withSideEffect('c',xx1).withSideEffect('m',xx2).mergeV(__.select('c')).option(Merge.onCreate,__.select('m'))), (lambda g, xx1=None,xx2=None:g.V().has('person','name','stephen').has('age',19))], 
-    'g_withSideEffectXc_label_person_name_markoX_withSideEffectXm_age_19X_mergeVXselectXcXX_optionXonMatch_selectXmXX_option': [(lambda g, xx1=None,xx2=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None,xx2=None:g.withSideEffect('c',xx1).withSideEffect('m',xx2).mergeV(__.select('c')).option(Merge.onMatch,__.select('m'))), (lambda g, xx1=None,xx2=None:g.V().has('person','name','marko').has('age',19))], 
-    'g_mergeVXlabel_person_name_markoX_propertyXname_vadas_acl_publicX': [(lambda g, xx1=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None:g.mergeV(xx1).property('name','vadas','acl','public')), (lambda g, xx1=None:g.V().properties('name').hasValue('vadas').has('acl','public'))], 
-    'g_injectX0X_mergeVXlabel_person_name_stephenX': [(lambda g, xx1=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None:g.inject(0).mergeV(xx1)), (lambda g, xx1=None:g.V().has('person','name','stephen'))], 
-    'g_injectX0X_mergeVXlabel_person_name_markoX': [(lambda g, xx1=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None:g.inject(0).mergeV(xx1)), (lambda g, xx1=None:g.V().has('person','name','marko'))], 
-    'g_injectX0X_mergeVXlabel_person_name_stephenX_optionXonCreate_label_person_name_stephen_age_19X_option': [(lambda g, xx1=None,xx2=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None,xx2=None:g.inject(0).mergeV(xx1).option(Merge.onCreate,xx2)), (lambda g, xx1=None,xx2=None:g.V().has('person','name','stephen').has('age',19))], 
-    'g_injectX0X_mergeVXlabel_person_name_markoX_optionXonMatch_age_19X_option': [(lambda g, xx1=None,xx2=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None,xx2=None:g.inject(0).mergeV(xx1).option(Merge.onMatch,xx2)), (lambda g, xx1=None,xx2=None:g.V().has('person','name','marko').has('age',19))], 
-    'g_withSideEffectXc_label_person_name_stephenX_withSideEffectXm_label_person_name_stephen_age_19X_injectX0X_mergeVXselectXcXX_optionXonCreate_selectXmXX_option': [(lambda g, xx1=None,xx2=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None,xx2=None:g.withSideEffect('c',xx1).withSideEffect('m',xx2).inject(0).mergeV(__.select('c')).option(Merge.onCreate,__.select('m'))), (lambda g, xx1=None,xx2=None:g.V().has('person','name','stephen').has('age',19))], 
-    'g_withSideEffectXc_label_person_name_markoX_withSideEffectXm_age_19X_injectX0X_mergeVXselectXcXX_optionXonMatch_selectXmXX_option': [(lambda g, xx1=None,xx2=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None,xx2=None:g.withSideEffect('c',xx1).withSideEffect('m',xx2).inject(0).mergeV(__.select('c')).option(Merge.onMatch,__.select('m'))), (lambda g, xx1=None,xx2=None:g.V().has('person','name','marko').has('age',19))], 
-    'g_injectX0X_mergeVXlabel_person_name_markoX_propertyXname_vadas_acl_publicX': [(lambda g, xx1=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None:g.inject(0).mergeV(xx1).property('name','vadas','acl','public')), (lambda g, xx1=None:g.V().properties('name').hasValue('vadas').has('acl','public'))], 
-    'g_injectXlabel_person_name_marko_label_person_name_stephenX_mergeVXidentityX': [(lambda g, xx1=None,xx2=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None,xx2=None:g.inject(xx1,xx2).mergeV(__.identity())), (lambda g, xx1=None,xx2=None:g.V().has('person','name','stephen')), (lambda g, xx1=None,xx2=None:g.V().has('person','name','marko')), (lambda g, xx1=None,xx2=None:g.V())], 
-    'g_injectXlabel_person_name_marko_label_person_name_stephenX_mergeV': [(lambda g, xx1=None,xx2=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None,xx2=None:g.inject(xx1,xx2).mergeV()), (lambda g, xx1=None,xx2=None:g.V().has('person','name','stephen')), (lambda g, xx1=None,xx2=None:g.V().has('person','name','marko')), (lambda g, xx1=None,xx2=None:g.V())], 
-    'g_mergeVXlabel_person_name_stephenX_propertyXlist_name_steveX': [(lambda g, xx1=None:g.addV('person').property(Cardinality.list_,'name','stephen')), (lambda g, xx1=None:g.mergeV(xx1).property(Cardinality.list_,'name','steve')), (lambda g, xx1=None:g.V()), (lambda g, xx1=None:g.V().properties('name').hasValue('steve')), (lambda g, xx1=None:g.V().properties('name').hasValue('stephen')), (lambda g, xx1=None:g.V().properties('name'))], 
-    'g_mergeXlabel_person_name_vadasX_optionXonMatch_age_35X': [(lambda g, xx1=None,xx2=None:g.addV('person').property('name','vadas').property('age',29).addV('person').property('name','vadas').property('age',27)), (lambda g, xx1=None,xx2=None:g.mergeV(xx1).option(Merge.onMatch,xx2)), (lambda g, xx1=None,xx2=None:g.V().has('age',35)), (lambda g, xx1=None,xx2=None:g.V())], 
-    'g_V_mapXmergeXlabel_person_name_joshXX': [(lambda g, xx1=None:g.addV('person').property('name','vadas').property('age',29).addV('person').property('name','stephen').property('age',27)), (lambda g, xx1=None:g.V().map(__.mergeV(xx1))), (lambda g, xx1=None:g.V().has('person','name','josh')), (lambda g, xx1=None:g.V())], 
+    'g_V_mergeEXlabel_selfX_optionXonMatch_emptyX': [(lambda g, xx1=None:g.addV('person').property('name','marko').property('age',29).addE('self')), (lambda g, xx1=None:g.V().merge_e(xx1).option(Merge.onMatch,{})), (lambda g, xx1=None:g.E()), (lambda g, xx1=None:g.E().properties()), (lambda g, xx1=None:g.V())], 
+    'g_V_mergeEXlabel_selfX_optionXonMatch_nullX': [(lambda g, xx1=None:g.addV('person').property('name','marko').property('age',29).addE('self')), (lambda g, xx1=None:g.V().merge_e(xx1).option(Merge.onMatch,None)), (lambda g, xx1=None:g.E()), (lambda g, xx1=None:g.E().properties()), (lambda g, xx1=None:g.V())], 
+    'g_V_mergeEXlabel_selfX_optionXonCreate_emptyX': [(lambda g, xx1=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None:g.V().merge_e(xx1).option(Merge.onCreate,{})), (lambda g, xx1=None:g.E()), (lambda g, xx1=None:g.V()), (lambda g, xx1=None:g.E().hasLabel('self'))], 
+    'g_V_mergeEXemptyX_optionXonCreate_nullX': [(lambda g:g.addV('person').property('name','marko').property('age',29)), (lambda g:g.V().merge_e({}).option(Merge.onCreate,None)), (lambda g:g.E()), (lambda g:g.V())], 
+    'g_V_mergeEXlabel_knowsX_optionXonCreate_created_YX_optionXonMatch_created_NX_exists_updated': [(lambda g, xx1=None,xx3=None,xx2=None:g.addV('person').property(T.id_,100).property('name','marko').as_('a').addV('person').property(T.id_,101).property('name','vadas').as_('b').addE('knows').from_('a').to('b').property('created','Y').addE('knows').from_('b').to('a').addE('friends').from_('b').to('a')), (lambda g, xx1=None,xx3=None,xx2=None:g.V().merge_e(xx1).option(Merge.onCreate,xx2).opt [...]
+    'g_mergeEXemptyX_exists': [(lambda g:g.addV('person').property('name','marko').property('age',29).addE('self')), (lambda g:g.merge_e({})), (lambda g:g.E()), (lambda g:g.V())], 
+    'g_mergeEXemptyX': [(lambda g:g.addV('person').property('name','marko').property('age',29)), (lambda g:g.merge_e({}))], 
+    'g_V_mergeEXemptyX_two_exist': [(lambda g:g.addV('person').property('name','marko').property('age',29).addV('person').property('name','vadas').property('age',27)), (lambda g:g.V().merge_e({})), (lambda g:g.E()), (lambda g:g.V())], 
+    'g_mergeEXnullX': [(lambda g:g.addV('person').property('name','marko').property('age',29)), (lambda g:g.merge_e(None)), (lambda g:g.E()), (lambda g:g.V())], 
+    'g_V_mergeEXnullX': [(lambda g:g.addV('person').property('name','marko').property('age',29)), (lambda g:g.V().merge_e(None)), (lambda g:g.E()), (lambda g:g.V())], 
+    'g_V_mergeEXlabel_self_weight_05X': [(lambda g, xx1=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None:g.V().merge_e(xx1)), (lambda g, xx1=None:g.E()), (lambda g, xx1=None:g.V()), (lambda g, xx1=None:g.V().has('person','name','marko').as_('a').outE('self').has('weight',float(0.5)).inV().where(P.eq('a')))], 
+    'g_mergeEXlabel_knows_out_marko_in_vadasX': [(lambda g, xx1=None:g.addV('person').property(T.id_,100).property('name','marko').addV('person').property(T.id_,101).property('name','vadas')), (lambda g, xx1=None:g.merge_e(xx1)), (lambda g, xx1=None:g.V().has('person','name','marko').out('knows').has('person','name','vadas'))], 
+    'g_withSideEffectXa_label_knows_out_marko_in_vadasX_mergeEXselectXaXX': [(lambda g, xx1=None:g.addV('person').property(T.id_,100).property('name','marko').addV('person').property(T.id_,101).property('name','vadas')), (lambda g, xx1=None:g.withSideEffect('a',xx1).merge_e(__.select('a'))), (lambda g, xx1=None:g.V().has('person','name','marko').out('knows').has('person','name','vadas'))], 
+    'g_mergeEXlabel_knows_out_marko1_in_vadas1X': [(lambda g, xx1=None:g.addV('person').property(T.id_,100).property('name','marko').addV('person').property(T.id_,101).property('name','vadas')), (lambda g, xx1=None:g.merge_e(xx1)), (lambda g, xx1=None:g.V().has('person','name','marko').out('knows').has('person','name','vadas'))], 
+    'g_mergeEXlabel_knows_out_marko_in_vadas_weight_05X_exists': [(lambda g, xx1=None:g.addV('person').property(T.id_,100).property('name','marko').as_('a').addV('person').property(T.id_,101).property('name','vadas').as_('b').addE('knows').from_('a').to('b')), (lambda g, xx1=None:g.merge_e(xx1)), (lambda g, xx1=None:g.V().has('person','name','marko').outE('knows').has('weight',float(0.5)).inV().has('person','name','vadas')), (lambda g, xx1=None:g.V().has('person','name','marko').out('kno [...]
+    'g_mergeEXlabel_knows_out_marko_in_vadas_weight_05X': [(lambda g, xx1=None:g.merge_e(xx1))], 
+    'g_mergeEXlabel_knows_out_marko_in_vadasX_optionXonCreate_created_YX_optionXonMatch_created_NX': [(lambda g, xx1=None,xx3=None,xx2=None:g.merge_e(xx1).option(Merge.onCreate,xx2).option(Merge.onMatch,xx3))], 
+    'g_mergeEXlabel_knows_out_marko_in_vadasX_optionXonCreate_created_YX_optionXonMatch_created_NX_exists': [(lambda g, xx1=None,xx3=None,xx2=None:g.addV('person').property(T.id_,100).property('name','marko').as_('a').addV('person').property(T.id_,101).property('name','vadas').as_('b').addE('knows').from_('a').to('b')), (lambda g, xx1=None,xx3=None,xx2=None:g.merge_e(xx1).option(Merge.onCreate,xx2).option(Merge.onMatch,xx3)), (lambda g, xx1=None,xx3=None,xx2=None:g.V()), (lambda g, xx1=N [...]
+    'g_mergeEXlabel_knows_out_marko_in_vadasX_optionXonCreate_created_YX_optionXonMatch_created_NX_exists_updated': [(lambda g, xx1=None,xx3=None,xx2=None:g.addV('person').property(T.id_,100).property('name','marko').as_('a').addV('person').property(T.id_,101).property('name','vadas').as_('b').addE('knows').from_('a').to('b').property('created','Y')), (lambda g, xx1=None,xx3=None,xx2=None:g.merge_e(xx1).option(Merge.onCreate,xx2).option(Merge.onMatch,xx3)), (lambda g, xx1=None,xx3=None,x [...]
+    'g_V_hasXperson_name_marko_X_mergeEXlabel_knowsX_optionXonCreate_created_YX_optionXonMatch_created_NX_exists_updated': [(lambda g, xx1=None,xx3=None,xx2=None:g.addV('person').property(T.id_,100).property('name','marko').as_('a').addV('person').property(T.id_,101).property('name','vadas').as_('b').addE('knows').from_('a').to('b').property('created','Y').addE('knows').from_('a').to('b')), (lambda g, xx1=None,xx3=None,xx2=None:g.V().has('person','name','marko').merge_e(xx1).option(Merge [...]
+    'g_injectXlabel_knows_out_marko_in_vadasX_mergeE': [(lambda g, xx1=None:g.addV('person').property(T.id_,100).property('name','marko').addV('person').property(T.id_,101).property('name','vadas')), (lambda g, xx1=None:g.inject(xx1).merge_e()), (lambda g, xx1=None:g.V().has('person','name','marko').out('knows').has('person','name','vadas'))], 
+    'g_mergeEXlabel_knows_in_vadasX_optionXonCreate_created_YX_optionXonMatch_created_NX_exists_updated': [(lambda g, xx1=None,xx3=None,xx2=None:g.addV('person').property(T.id_,100).property('name','marko').as_('a').addV('person').property(T.id_,101).property('name','vadas').as_('b').addE('knows').from_('a').to('b').property('created','Y').addE('knows').from_('b').to('a').property('created','Y')), (lambda g, xx1=None,xx3=None,xx2=None:g.merge_e(xx1).option(Merge.onCreate,xx2).option(Merg [...]
+    'g_mergeEXlabel_knows_out_vadasX_optionXonCreate_created_YX_optionXonMatch_created_NX_exists_updated': [(lambda g, xx1=None,xx3=None,xx2=None:g.addV('person').property(T.id_,100).property('name','marko').as_('a').addV('person').property(T.id_,101).property('name','vadas').as_('b').addE('knows').from_('a').to('b').property('created','Y').addE('knows').from_('b').to('a').property('created','Y')), (lambda g, xx1=None,xx3=None,xx2=None:g.merge_e(xx1).option(Merge.onCreate,xx2).option(Mer [...]
+    'g_mergeEXout_vadasX_optionXonCreate_created_YX_optionXonMatch_created_NX_exists_updated': [(lambda g, xx1=None,xx3=None,xx2=None:g.addV('person').property(T.id_,100).property('name','marko').as_('a').addV('person').property(T.id_,101).property('name','vadas').as_('b').addE('knows').from_('a').to('b').property('created','Y').addE('knows').from_('b').to('a').property('created','Y')), (lambda g, xx1=None,xx3=None,xx2=None:g.merge_e(xx1).option(Merge.onCreate,xx2).option(Merge.onMatch,x [...]
+    'g_V_hasXperson_name_marko_X_mergeEXlabel_self_out_vadas1_in_vadas1X': [(lambda g, xx1=None:g.addV('person').property(T.id_,100).property('name','marko').addV('person').property(T.id_,101).property('name','vadas')), (lambda g, xx1=None:g.V().has('person','name','marko').merge_e(xx1)), (lambda g, xx1=None:g.V()), (lambda g, xx1=None:g.E()), (lambda g, xx1=None:g.E().hasLabel('self').bothV().has('name','vadas'))], 
+    'g_withSideEffectXc_created_YX_withSideEffectXm_matchedX_mergeEXlabel_knows_out_marko_in_vadasX_optionXonCreate_selectXcXX_optionXonMatch_selectXmXX_exists': [(lambda g, xx1=None,xx3=None,xx2=None:g.addV('person').property(T.id_,100).property('name','marko').as_('a').addV('person').property(T.id_,101).property('name','vadas').as_('b').addE('knows').from_('a').to('b')), (lambda g, xx1=None,xx3=None,xx2=None:g.withSideEffect('c',xx2).withSideEffect('m',xx3).merge_e(xx1).option(Merge.on [...]
+    'g_withSideEffectXc_created_YX_withSideEffectXm_matchedX_mergeEXlabel_knows_out_marko_in_vadasX_optionXonCreate_selectXcXX_optionXonMatch_selectXmXX': [(lambda g, xx1=None,xx3=None,xx2=None:g.addV('person').property(T.id_,100).property('name','marko').as_('a').addV('person').property(T.id_,101).property('name','vadas').as_('b')), (lambda g, xx1=None,xx3=None,xx2=None:g.withSideEffect('c',xx2).withSideEffect('m',xx3).merge_e(xx1).option(Merge.onCreate,__.select('c')).option(Merge.onMa [...]
+    'g_withSideEffectXc_created_YX_withSideEffectXm_matchedX_mergeEXlabel_knows_out_marko1_in_vadas1X_optionXonCreate_selectXcXX_optionXonMatch_selectXmXX': [(lambda g, xx1=None,xx3=None,xx2=None:g.addV('person').property(T.id_,100).property('name','marko').as_('a').addV('person').property(T.id_,101).property('name','vadas').as_('b')), (lambda g, xx1=None,xx3=None,xx2=None:g.withSideEffect('c',xx2).withSideEffect('m',xx3).merge_e(xx1).option(Merge.onCreate,__.select('c')).option(Merge.on [...]
+    'g_V_mapXmergeEXlabel_self_weight_05XX': [(lambda g, xx1=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None:g.V().map(__.merge_e(xx1))), (lambda g, xx1=None:g.E()), (lambda g, xx1=None:g.V()), (lambda g, xx1=None:g.V().has('person','name','marko').as_('a').outE('self').has('weight',float(0.5)).inV().where(P.eq('a')))], 
+    'g_mergeEXlabel_knows_out_marko_in_vadasX_aliased_direction': [(lambda g, xx1=None:g.addV('person').property(T.id_,100).property('name','marko').addV('person').property(T.id_,101).property('name','vadas')), (lambda g, xx1=None:g.merge_e(xx1)), (lambda g, xx1=None:g.V().has('person','name','marko').out('knows').has('person','name','vadas'))], 
+    'g_injectXlabel_knows_out_marko_in_vadas_label_self_out_vadas_in_vadasX': [(lambda g, xx1=None,xx2=None:g.addV('person').property(T.id_,100).property('name','marko').addV('person').property(T.id_,101).property('name','vadas')), (lambda g, xx1=None,xx2=None:g.inject(xx1,xx2).merge_e()), (lambda g, xx1=None,xx2=None:g.V()), (lambda g, xx1=None,xx2=None:g.E()), (lambda g, xx1=None,xx2=None:g.V().has('person','name','marko').out('knows').has('person','name','vadas')), (lambda g, xx1=None [...]
+    'g_mergeVXemptyX_optionXonMatch_nullX': [(lambda g:g.addV('person').property('name','marko').property('age',29)), (lambda g:g.merge_v({}).option(Merge.onMatch,None)), (lambda g:g.V().has('person','name','marko').has('age',29))], 
+    'g_V_mergeVXemptyX_optionXonMatch_nullX': [(lambda g:g.addV('person').property('name','marko').property('age',29)), (lambda g:g.V().merge_v({}).option(Merge.onMatch,None)), (lambda g:g.V().has('person','name','marko').has('age',29))], 
+    'g_mergeVXnullX_optionXonCreate_label_null_name_markoX': [(lambda g, xx1=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None:g.merge_v(None).option(Merge.onCreate,xx1))], 
+    'g_V_mergeVXnullX_optionXonCreate_label_null_name_markoX': [(lambda g, xx1=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None:g.V().merge_v(None).option(Merge.onCreate,xx1))], 
+    'g_mergeVXlabel_person_name_stephenX_optionXonCreate_nullX': [(lambda g, xx1=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None:g.merge_v(xx1).option(Merge.onCreate,None)), (lambda g, xx1=None:g.V()), (lambda g, xx1=None:g.V().has('person','name','marko'))], 
+    'g_V_mergeVXlabel_person_name_stephenX_optionXonCreate_nullX': [(lambda g, xx1=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None:g.V().merge_v(xx1).option(Merge.onCreate,None)), (lambda g, xx1=None:g.V()), (lambda g, xx1=None:g.V().has('person','name','marko'))], 
+    'g_mergeVXnullX_optionXonCreate_emptyX': [(lambda g:g.addV('person').property('name','marko').property('age',29)), (lambda g:g.merge_v(None).option(Merge.onCreate,{})), (lambda g:g.V())], 
+    'g_V_mergeVXnullX_optionXonCreate_emptyX': [(lambda g:g.addV('person').property('name','marko').property('age',29)), (lambda g:g.V().merge_v(None).option(Merge.onCreate,{})), (lambda g:g.V())], 
+    'g_mergeVXemptyX_no_existing': [(lambda g:g.merge_v({})), (lambda g:g.V())], 
+    'g_injectX0X_mergeVXemptyX_no_existing': [(lambda g:g.inject(0).merge_v({})), (lambda g:g.V())], 
+    'g_mergeVXemptyX': [(lambda g:g.addV('person').property('name','marko').property('age',29)), (lambda g:g.merge_v({})), (lambda g:g.V().has('person','name','marko').has('age',29))], 
+    'g_V_mergeVXemptyX_two_exist': [(lambda g:g.addV('person').property('name','marko').property('age',29).addV('person').property('name','vadas').property('age',27)), (lambda g:g.V().merge_v({})), (lambda g:g.V()), (lambda g:g.V().has('person','name','marko').has('age',29)), (lambda g:g.V().has('person','name','vadas').has('age',27))], 
+    'g_mergeVXnullX': [(lambda g:g.addV('person').property('name','marko').property('age',29)), (lambda g:g.merge_v(None)), (lambda g:g.V())], 
+    'g_V_mergeVXnullX': [(lambda g:g.addV('person').property('name','marko').property('age',29)), (lambda g:g.V().merge_v(None)), (lambda g:g.V())], 
+    'g_mergeVXlabel_person_name_stephenX': [(lambda g, xx1=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None:g.merge_v(xx1)), (lambda g, xx1=None:g.V().has('person','name','stephen'))], 
+    'g_mergeVXlabel_person_name_markoX': [(lambda g, xx1=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None:g.merge_v(xx1)), (lambda g, xx1=None:g.V().has('person','name','marko'))], 
+    'g_mergeVXlabel_person_name_stephenX_optionXonCreate_label_person_name_stephen_age_19X_option': [(lambda g, xx1=None,xx2=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None,xx2=None:g.merge_v(xx1).option(Merge.onCreate,xx2)), (lambda g, xx1=None,xx2=None:g.V().has('person','name','stephen').has('age',19))], 
+    'g_mergeVXlabel_person_name_markoX_optionXonMatch_age_19X_option': [(lambda g, xx1=None,xx2=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None,xx2=None:g.merge_v(xx1).option(Merge.onMatch,xx2)), (lambda g, xx1=None,xx2=None:g.V().has('person','name','marko').has('age',19))], 
+    'g_withSideEffectXc_label_person_name_stephenX_withSideEffectXm_label_person_name_stephen_age_19X_mergeVXselectXcXX_optionXonCreate_selectXmXX_option': [(lambda g, xx1=None,xx2=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None,xx2=None:g.withSideEffect('c',xx1).withSideEffect('m',xx2).merge_v(__.select('c')).option(Merge.onCreate,__.select('m'))), (lambda g, xx1=None,xx2=None:g.V().has('person','name','stephen').has('age',19))], 
+    'g_withSideEffectXc_label_person_name_markoX_withSideEffectXm_age_19X_mergeVXselectXcXX_optionXonMatch_selectXmXX_option': [(lambda g, xx1=None,xx2=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None,xx2=None:g.withSideEffect('c',xx1).withSideEffect('m',xx2).merge_v(__.select('c')).option(Merge.onMatch,__.select('m'))), (lambda g, xx1=None,xx2=None:g.V().has('person','name','marko').has('age',19))], 
+    'g_mergeVXlabel_person_name_markoX_propertyXname_vadas_acl_publicX': [(lambda g, xx1=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None:g.merge_v(xx1).property('name','vadas','acl','public')), (lambda g, xx1=None:g.V().properties('name').hasValue('vadas').has('acl','public'))], 
+    'g_injectX0X_mergeVXlabel_person_name_stephenX': [(lambda g, xx1=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None:g.inject(0).merge_v(xx1)), (lambda g, xx1=None:g.V().has('person','name','stephen'))], 
+    'g_injectX0X_mergeVXlabel_person_name_markoX': [(lambda g, xx1=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None:g.inject(0).merge_v(xx1)), (lambda g, xx1=None:g.V().has('person','name','marko'))], 
+    'g_injectX0X_mergeVXlabel_person_name_stephenX_optionXonCreate_label_person_name_stephen_age_19X_option': [(lambda g, xx1=None,xx2=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None,xx2=None:g.inject(0).merge_v(xx1).option(Merge.onCreate,xx2)), (lambda g, xx1=None,xx2=None:g.V().has('person','name','stephen').has('age',19))], 
+    'g_injectX0X_mergeVXlabel_person_name_markoX_optionXonMatch_age_19X_option': [(lambda g, xx1=None,xx2=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None,xx2=None:g.inject(0).merge_v(xx1).option(Merge.onMatch,xx2)), (lambda g, xx1=None,xx2=None:g.V().has('person','name','marko').has('age',19))], 
+    'g_withSideEffectXc_label_person_name_stephenX_withSideEffectXm_label_person_name_stephen_age_19X_injectX0X_mergeVXselectXcXX_optionXonCreate_selectXmXX_option': [(lambda g, xx1=None,xx2=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None,xx2=None:g.withSideEffect('c',xx1).withSideEffect('m',xx2).inject(0).merge_v(__.select('c')).option(Merge.onCreate,__.select('m'))), (lambda g, xx1=None,xx2=None:g.V().has('person','name','stephen').has('age',19))], 
+    'g_withSideEffectXc_label_person_name_markoX_withSideEffectXm_age_19X_injectX0X_mergeVXselectXcXX_optionXonMatch_selectXmXX_option': [(lambda g, xx1=None,xx2=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None,xx2=None:g.withSideEffect('c',xx1).withSideEffect('m',xx2).inject(0).merge_v(__.select('c')).option(Merge.onMatch,__.select('m'))), (lambda g, xx1=None,xx2=None:g.V().has('person','name','marko').has('age',19))], 
+    'g_injectX0X_mergeVXlabel_person_name_markoX_propertyXname_vadas_acl_publicX': [(lambda g, xx1=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None:g.inject(0).merge_v(xx1).property('name','vadas','acl','public')), (lambda g, xx1=None:g.V().properties('name').hasValue('vadas').has('acl','public'))], 
+    'g_injectXlabel_person_name_marko_label_person_name_stephenX_mergeVXidentityX': [(lambda g, xx1=None,xx2=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None,xx2=None:g.inject(xx1,xx2).merge_v(__.identity())), (lambda g, xx1=None,xx2=None:g.V().has('person','name','stephen')), (lambda g, xx1=None,xx2=None:g.V().has('person','name','marko')), (lambda g, xx1=None,xx2=None:g.V())], 
+    'g_injectXlabel_person_name_marko_label_person_name_stephenX_mergeV': [(lambda g, xx1=None,xx2=None:g.addV('person').property('name','marko').property('age',29)), (lambda g, xx1=None,xx2=None:g.inject(xx1,xx2).merge_v()), (lambda g, xx1=None,xx2=None:g.V().has('person','name','stephen')), (lambda g, xx1=None,xx2=None:g.V().has('person','name','marko')), (lambda g, xx1=None,xx2=None:g.V())], 
+    'g_mergeVXlabel_person_name_stephenX_propertyXlist_name_steveX': [(lambda g, xx1=None:g.addV('person').property(Cardinality.list_,'name','stephen')), (lambda g, xx1=None:g.merge_v(xx1).property(Cardinality.list_,'name','steve')), (lambda g, xx1=None:g.V()), (lambda g, xx1=None:g.V().properties('name').hasValue('steve')), (lambda g, xx1=None:g.V().properties('name').hasValue('stephen')), (lambda g, xx1=None:g.V().properties('name'))], 
+    'g_mergeXlabel_person_name_vadasX_optionXonMatch_age_35X': [(lambda g, xx1=None,xx2=None:g.addV('person').property('name','vadas').property('age',29).addV('person').property('name','vadas').property('age',27)), (lambda g, xx1=None,xx2=None:g.merge_v(xx1).option(Merge.onMatch,xx2)), (lambda g, xx1=None,xx2=None:g.V().has('age',35)), (lambda g, xx1=None,xx2=None:g.V())], 
+    'g_V_mapXmergeXlabel_person_name_joshXX': [(lambda g, xx1=None:g.addV('person').property('name','vadas').property('age',29).addV('person').property('name','stephen').property('age',27)), (lambda g, xx1=None:g.V().map(__.merge_v(xx1))), (lambda g, xx1=None:g.V().has('person','name','josh')), (lambda g, xx1=None:g.V())], 
     'g_V_age_min': [(lambda g:g.V().age.min_())], 
     'g_V_foo_min': [(lambda g:g.V().foo.min_())], 
     'g_V_name_min': [(lambda g:g.V().name.min_())], 
diff --git a/gremlin-python/src/main/python/tests/driver/test_driver_remote_connection.py b/gremlin-python/src/main/python/tests/driver/test_driver_remote_connection.py
index 14b9577..102f64d 100644
--- a/gremlin-python/src/main/python/tests/driver/test_driver_remote_connection.py
+++ b/gremlin-python/src/main/python/tests/driver/test_driver_remote_connection.py
@@ -17,8 +17,6 @@
 # under the License.
 #
 
-import pytest
-
 from gremlin_python import statics
 from gremlin_python.driver.protocol import GremlinServerError
 from gremlin_python.statics import long
diff --git a/gremlin-python/src/main/python/tests/process/test_translator.py b/gremlin-python/src/main/python/tests/process/test_translator.py
index e7b865d..dabc717 100644
--- a/gremlin-python/src/main/python/tests/process/test_translator.py
+++ b/gremlin-python/src/main/python/tests/process/test_translator.py
@@ -23,9 +23,6 @@ __author__ = 'Kelvin R. Lawrence (gfxman)'
 
 from gremlin_python.structure.graph import Graph
 from gremlin_python.process.graph_traversal import __
-from gremlin_python.process.anonymous_traversal import traversal
-from gremlin_python.process.traversal import *
-from gremlin_python.process.strategies import *
 from gremlin_python.process.translator import *
 from datetime import datetime
 
@@ -127,7 +124,7 @@ class TestTraversalStrategies(object):
         tests.append([g.V().match(__.as_('a').has('code', 'LHR').as_('b')).select('b').by('code'),
                      "g.V().match(__.as('a').has('code','LHR').as('b')).select('b').by('code')"])
         # 30
-        tests.append([g.V().has('test-using-keyword-as-property','repeat'),
+        tests.append([g.V().has('test-using-keyword-as-property', 'repeat'),
                      "g.V().has('test-using-keyword-as-property','repeat')"])
         # 31
         tests.append([g.V('1').addE('test').to(__.V('4')),
@@ -145,7 +142,7 @@ class TestTraversalStrategies(object):
         tests.append([g.V().values('runways').mean(),
                      "g.V().values('runways').mean()"])
         # 36
-        tests.append([g.withSack(0).V('3', '5').sack(Operator.sum).by('runways').sack(),
+        tests.append([g.withSack(0).V('3', '5').sack(Operator.sum_).by('runways').sack(),
                      "g.withSack(0).V('3','5').sack(Operator.sum).by('runways').sack()"])
         # 37
         tests.append([g.V('3').values('runways').store('x').V('4').values('runways').store('x').by(__.constant(1)).V('6').store('x').by(__.constant(1)).select('x').unfold().sum_(),
@@ -181,19 +178,19 @@ class TestTraversalStrategies(object):
         tests.append([g.V('1', '2').has('region', P.within('US-TX','US-GA')),
                      "g.V('1','2').has('region',within(['US-TX','US-GA']))"])
         # 48
-        tests.append([g.V().and_(__.has('runways', P.gt(5)), __.has('region','US-TX')),
+        tests.append([g.V().and_(__.has('runways', P.gt(5)), __.has('region', 'US-TX')),
                      "g.V().and(__.has('runways',gt(5)),__.has('region','US-TX'))"])
         # 49
-        tests.append([g.V().union(__.has('runways', gt(5)), __.has('region','US-TX')),
+        tests.append([g.V().union(__.has('runways', gt(5)), __.has('region', 'US-TX')),
                      "g.V().union(__.has('runways',gt(5)),__.has('region','US-TX'))"])
         # 50
-        tests.append([g.V('3').choose(__.values('runways').is_(3),__.constant('three'),__.constant('not three')),
+        tests.append([g.V('3').choose(__.values('runways').is_(3), __.constant('three'),__.constant('not three')),
                      "g.V('3').choose(__.values('runways').is(3),__.constant('three'),__.constant('not three'))"])
         # 51
-        tests.append([g.V('3').choose(__.values('runways')).option(1,__.constant('three')).option(2,__.constant('not three')),
+        tests.append([g.V('3').choose(__.values('runways')).option(1, __.constant('three')).option(2,__.constant('not three')),
                      "g.V('3').choose(__.values('runways')).option(1,__.constant('three')).option(2,__.constant('not three'))"])
         # 52
-        tests.append([g.V('3').choose(__.values('runways')).option(1.5,__.constant('one and a half')).option(2,__.constant('not three')),
+        tests.append([g.V('3').choose(__.values('runways')).option(1.5, __.constant('one and a half')).option(2,__.constant('not three')),
                      "g.V('3').choose(__.values('runways')).option(1.5,__.constant('one and a half')).option(2,__.constant('not three'))"])
         # 53
         tests.append([g.V('3').repeat(__.out().simplePath()).until(__.loops().is_(1)).count(),
@@ -265,7 +262,7 @@ class TestTraversalStrategies(object):
         # 73
         tests.append([g.withSack(0).
                         V('3').
-                        repeat(__.outE('route').sack(Operator.sum).by('dist').inV()).
+                        repeat(__.outE('route').sack(Operator.sum_).by('dist').inV()).
                         until(__.has('code', 'AGR').or_().loops().is_(4)).
                         has('code', 'AGR').
                         local(__.union(__.path().by('code').by('dist'),__.sack()).fold()).
@@ -330,7 +327,7 @@ class TestTraversalStrategies(object):
         tests.append([g.withStrategies(strategy).V().count(),
                       "g.withStrategies(new SubgraphStrategy(vertexProperties:__.hasNot('runways'))).V().count()"])
         # 92
-        strategy = SubgraphStrategy(vertices=__.has('region', 'US-TX'),vertex_properties=__.hasNot('runways'))
+        strategy = SubgraphStrategy(vertices=__.has('region', 'US-TX'), vertex_properties=__.hasNot('runways'))
         tests.append([g.withStrategies(strategy).V().count(),
                       "g.withStrategies(new SubgraphStrategy(vertices:__.has('region','US-TX'),vertexProperties:__.hasNot('runways'))).V().count()"])
         # 93