This is an automated email from the ASF dual-hosted git repository. spmallette pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit 4d6d974a3960be1d080bc889ed50f929e381a4b9 Merge: d029172 931a75d Author: Stephen Mallette <stepm...@amazon.com> AuthorDate: Fri Jan 8 08:26:37 2021 -0500 Merge branch '3.4-dev' .../tinkerpop/gremlin/process/traversal/Traversal.java | 4 +++- .../gremlin/process/traversal/dsl/graph/GraphTraversal.java | 13 +++++++++++++ .../src/Gremlin.Net/Process/Traversal/GraphTraversal.cs | 9 +++++++++ .../gremlin-javascript/lib/process/graph-traversal.js | 10 ++++++++++ .../main/python/gremlin_python/process/graph_traversal.py | 4 ++++ 5 files changed, 39 insertions(+), 1 deletion(-) diff --cc gremlin-python/src/main/python/gremlin_python/process/graph_traversal.py index 65f3b03,0000000..698056f mode 100644,000000..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 @@@ -1,1576 -1,0 +1,1580 @@@ +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +import sys +import copy +from .traversal import Traversal +from .traversal import TraversalStrategies +from .strategies import VertexProgramStrategy, OptionsStrategy +from .traversal import Bytecode +from ..driver.remote_connection import RemoteStrategy +from .. import statics +from ..statics import long + + +class GraphTraversalSource(object): + def __init__(self, graph, traversal_strategies, bytecode=None): + self.graph = graph + self.traversal_strategies = traversal_strategies + if bytecode is None: + bytecode = Bytecode() + self.bytecode = bytecode + self.graph_traversal = GraphTraversal + + def __repr__(self): + return "graphtraversalsource[" + str(self.graph) + "]" + + def get_graph_traversal_source(self): + return self.__class__(self.graph, TraversalStrategies(self.traversal_strategies), Bytecode(self.bytecode)) + + def get_graph_traversal(self): + return self.graph_traversal(self.graph, self.traversal_strategies, Bytecode(self.bytecode)) + + def withBulk(self, *args): + source = self.get_graph_traversal_source() + source.bytecode.add_source("withBulk", *args) + return source + + def withPath(self, *args): + source = self.get_graph_traversal_source() + source.bytecode.add_source("withPath", *args) + return source + + def withSack(self, *args): + source = self.get_graph_traversal_source() + source.bytecode.add_source("withSack", *args) + return source + + def withSideEffect(self, *args): + source = self.get_graph_traversal_source() + source.bytecode.add_source("withSideEffect", *args) + return source + + def withStrategies(self, *args): + source = self.get_graph_traversal_source() + source.bytecode.add_source("withStrategies", *args) + return source + + def withoutStrategies(self, *args): + source = self.get_graph_traversal_source() + source.bytecode.add_source("withoutStrategies", *args) + return source + + def with_(self, k, v=None): + source = self.get_graph_traversal_source() + options_strategy = next((x for x in source.bytecode.source_instructions + if x[0] == "withStrategies" and type(x[1]) is OptionsStrategy), None) + + val = True if v is None else v + if options_strategy is None: + options_strategy = OptionsStrategy({k: val}) + source = self.withStrategies(options_strategy) + else: + options_strategy[1].configuration[k] = val + + return source + + def withRemote(self, remote_connection): + source = self.get_graph_traversal_source() + source.traversal_strategies.add_strategies([RemoteStrategy(remote_connection)]) + return source + + def withComputer(self, graph_computer=None, workers=None, result=None, persist=None, vertices=None, + edges=None, configuration=None): + return self.withStrategies(VertexProgramStrategy(graph_computer, workers, result, persist, vertices, + edges, configuration)) + + def E(self, *args): + traversal = self.get_graph_traversal() + traversal.bytecode.add_step("E", *args) + return traversal + + def V(self, *args): + traversal = self.get_graph_traversal() + traversal.bytecode.add_step("V", *args) + return traversal + + def addE(self, *args): + traversal = self.get_graph_traversal() + traversal.bytecode.add_step("addE", *args) + return traversal + + def addV(self, *args): + traversal = self.get_graph_traversal() + traversal.bytecode.add_step("addV", *args) + return traversal + + def inject(self, *args): + traversal = self.get_graph_traversal() + traversal.bytecode.add_step("inject", *args) + return traversal + + def io(self, *args): + traversal = self.get_graph_traversal() + traversal.bytecode.add_step("io", *args) + return traversal + + +class GraphTraversal(Traversal): + def __init__(self, graph, traversal_strategies, bytecode): + super(GraphTraversal, self).__init__(graph, traversal_strategies, bytecode) + + def __getitem__(self, index): + if isinstance(index, int): + return self.range(long(index), long(index + 1)) + elif isinstance(index, slice): + low = long(0) if index.start is None else long(index.start) + high = long(sys.maxsize) if index.stop is None else long(index.stop) + if low == long(0): + return self.limit(high) + else: + return self.range(low,high) + else: + raise TypeError("Index must be int or slice") + + def __getattr__(self, key): + if key.startswith('__'): + raise AttributeError( + 'Python magic methods or keys starting with double underscore cannot be used for Gremlin sugar - prefer values(' + key + ')') + return self.values(key) + + def clone(self): + return GraphTraversal(self.graph, self.traversal_strategies, copy.deepcopy(self.bytecode)) + + def V(self, *args): + self.bytecode.add_step("V", *args) + return self + + def addE(self, *args): + self.bytecode.add_step("addE", *args) + return self + + def addV(self, *args): + self.bytecode.add_step("addV", *args) + return self + + def aggregate(self, *args): + self.bytecode.add_step("aggregate", *args) + return self + + def and_(self, *args): + self.bytecode.add_step("and", *args) + return self + + def as_(self, *args): + self.bytecode.add_step("as", *args) + return self + + def barrier(self, *args): + self.bytecode.add_step("barrier", *args) + return self + + def both(self, *args): + self.bytecode.add_step("both", *args) + return self + + def bothE(self, *args): + self.bytecode.add_step("bothE", *args) + return self + + def bothV(self, *args): + self.bytecode.add_step("bothV", *args) + return self + + def branch(self, *args): + self.bytecode.add_step("branch", *args) + return self + + def by(self, *args): + self.bytecode.add_step("by", *args) + return self + + def cap(self, *args): + self.bytecode.add_step("cap", *args) + return self + + def choose(self, *args): + self.bytecode.add_step("choose", *args) + return self + + def coalesce(self, *args): + self.bytecode.add_step("coalesce", *args) + return self + + def coin(self, *args): + self.bytecode.add_step("coin", *args) + return self + + def connectedComponent(self, *args): + self.bytecode.add_step("connectedComponent", *args) + return self + + def constant(self, *args): + self.bytecode.add_step("constant", *args) + return self + + def count(self, *args): + self.bytecode.add_step("count", *args) + return self + + def cyclicPath(self, *args): + self.bytecode.add_step("cyclicPath", *args) + return self + + def dedup(self, *args): + self.bytecode.add_step("dedup", *args) + return self + + def drop(self, *args): + self.bytecode.add_step("drop", *args) + return self + + def elementMap(self, *args): + self.bytecode.add_step("elementMap", *args) + return self + + def emit(self, *args): + self.bytecode.add_step("emit", *args) + return self + + def filter_(self, *args): + self.bytecode.add_step("filter", *args) + return self + + def flatMap(self, *args): + self.bytecode.add_step("flatMap", *args) + return self + + def fold(self, *args): + self.bytecode.add_step("fold", *args) + return self + + def from_(self, *args): + self.bytecode.add_step("from", *args) + return self + + def group(self, *args): + self.bytecode.add_step("group", *args) + return self + + def groupCount(self, *args): + self.bytecode.add_step("groupCount", *args) + return self + + def has(self, *args): + self.bytecode.add_step("has", *args) + return self + + def hasId(self, *args): + self.bytecode.add_step("hasId", *args) + return self + + def hasKey(self, *args): + self.bytecode.add_step("hasKey", *args) + return self + + def hasLabel(self, *args): + self.bytecode.add_step("hasLabel", *args) + return self + + def hasNot(self, *args): + self.bytecode.add_step("hasNot", *args) + return self + + def hasValue(self, *args): + self.bytecode.add_step("hasValue", *args) + return self + + def id_(self, *args): + self.bytecode.add_step("id", *args) + return self + + def identity(self, *args): + self.bytecode.add_step("identity", *args) + return self + + def inE(self, *args): + self.bytecode.add_step("inE", *args) + return self + + def inV(self, *args): + self.bytecode.add_step("inV", *args) + return self + + def in_(self, *args): + self.bytecode.add_step("in", *args) + return self + + def index(self, *args): + self.bytecode.add_step("index", *args) + return self + + def inject(self, *args): + self.bytecode.add_step("inject", *args) + return self + + def is_(self, *args): + self.bytecode.add_step("is", *args) + return self + + def key(self, *args): + self.bytecode.add_step("key", *args) + return self + + def label(self, *args): + self.bytecode.add_step("label", *args) + return self + + def limit(self, *args): + self.bytecode.add_step("limit", *args) + return self + + def local(self, *args): + self.bytecode.add_step("local", *args) + return self + + def loops(self, *args): + self.bytecode.add_step("loops", *args) + return self + + def map(self, *args): + self.bytecode.add_step("map", *args) + return self + + def match(self, *args): + self.bytecode.add_step("match", *args) + return self + + def math(self, *args): + self.bytecode.add_step("math", *args) + return self + + def max_(self, *args): + self.bytecode.add_step("max", *args) + return self + + def mean(self, *args): + self.bytecode.add_step("mean", *args) + return self + + def min_(self, *args): + self.bytecode.add_step("min", *args) + return self + ++ def none(self, *args): ++ self.bytecode.add_step("none", *args) ++ return self ++ + def not_(self, *args): + self.bytecode.add_step("not", *args) + return self + + def option(self, *args): + self.bytecode.add_step("option", *args) + return self + + def optional(self, *args): + self.bytecode.add_step("optional", *args) + return self + + def or_(self, *args): + self.bytecode.add_step("or", *args) + return self + + def order(self, *args): + self.bytecode.add_step("order", *args) + return self + + def otherV(self, *args): + self.bytecode.add_step("otherV", *args) + return self + + def out(self, *args): + self.bytecode.add_step("out", *args) + return self + + def outE(self, *args): + self.bytecode.add_step("outE", *args) + return self + + def outV(self, *args): + self.bytecode.add_step("outV", *args) + return self + + def pageRank(self, *args): + self.bytecode.add_step("pageRank", *args) + return self + + def path(self, *args): + self.bytecode.add_step("path", *args) + return self + + def peerPressure(self, *args): + self.bytecode.add_step("peerPressure", *args) + return self + + def profile(self, *args): + self.bytecode.add_step("profile", *args) + return self + + def program(self, *args): + self.bytecode.add_step("program", *args) + return self + + def project(self, *args): + self.bytecode.add_step("project", *args) + return self + + def properties(self, *args): + self.bytecode.add_step("properties", *args) + return self + + def property(self, *args): + self.bytecode.add_step("property", *args) + return self + + def propertyMap(self, *args): + self.bytecode.add_step("propertyMap", *args) + return self + + def range_(self, *args): + self.bytecode.add_step("range", *args) + return self + + def read(self, *args): + self.bytecode.add_step("read", *args) + return self + + def repeat(self, *args): + self.bytecode.add_step("repeat", *args) + return self + + def sack(self, *args): + self.bytecode.add_step("sack", *args) + return self + + def sample(self, *args): + self.bytecode.add_step("sample", *args) + return self + + def select(self, *args): + self.bytecode.add_step("select", *args) + return self + + def shortestPath(self, *args): + self.bytecode.add_step("shortestPath", *args) + return self + + def sideEffect(self, *args): + self.bytecode.add_step("sideEffect", *args) + return self + + def simplePath(self, *args): + self.bytecode.add_step("simplePath", *args) + return self + + def skip(self, *args): + self.bytecode.add_step("skip", *args) + return self + + def store(self, *args): + self.bytecode.add_step("store", *args) + return self + + def subgraph(self, *args): + self.bytecode.add_step("subgraph", *args) + return self + + def sum_(self, *args): + self.bytecode.add_step("sum", *args) + return self + + def tail(self, *args): + self.bytecode.add_step("tail", *args) + return self + + def timeLimit(self, *args): + self.bytecode.add_step("timeLimit", *args) + return self + + def times(self, *args): + self.bytecode.add_step("times", *args) + return self + + def to(self, *args): + self.bytecode.add_step("to", *args) + return self + + def toE(self, *args): + self.bytecode.add_step("toE", *args) + return self + + def toV(self, *args): + self.bytecode.add_step("toV", *args) + return self + + def tree(self, *args): + self.bytecode.add_step("tree", *args) + return self + + def unfold(self, *args): + self.bytecode.add_step("unfold", *args) + return self + + def union(self, *args): + self.bytecode.add_step("union", *args) + return self + + def until(self, *args): + self.bytecode.add_step("until", *args) + return self + + def value(self, *args): + self.bytecode.add_step("value", *args) + return self + + def valueMap(self, *args): + self.bytecode.add_step("valueMap", *args) + return self + + def values(self, *args): + self.bytecode.add_step("values", *args) + return self + + def where(self, *args): + self.bytecode.add_step("where", *args) + return self + + def with_(self, *args): + self.bytecode.add_step("with", *args) + return self + + def write(self, *args): + self.bytecode.add_step("write", *args) + return self + + # Deprecated - prefer the underscore suffixed versions e.g filter_() + + def filter(self, *args): + self.bytecode.add_step("filter", *args) + return self + + def id(self, *args): + self.bytecode.add_step("id", *args) + return self + + def max(self, *args): + self.bytecode.add_step("max", *args) + return self + + def min(self, *args): + self.bytecode.add_step("min", *args) + return self + + def range(self, *args): + self.bytecode.add_step("range", *args) + return self + + def sum(self, *args): + self.bytecode.add_step("sum", *args) + return self + + +class MagicType(type): + + def __getattr__(cls, k): + if k.startswith('__'): + raise AttributeError( + 'Python magic methods or keys starting with double underscore cannot be used for Gremlin sugar - prefer values(' + k + ')') + return __.values(k) + + +class __(object, metaclass=MagicType): + graph_traversal = GraphTraversal + + @classmethod + def start(cls): + return GraphTraversal(None, None, Bytecode()) + + @classmethod + def __(cls, *args): + return __.inject(*args) + + @classmethod + def V(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).V(*args) + + @classmethod + def addE(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).addE(*args) + + @classmethod + def addV(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).addV(*args) + + @classmethod + def aggregate(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).aggregate(*args) + + @classmethod + def and_(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).and_(*args) + + @classmethod + def as_(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).as_(*args) + + @classmethod + def barrier(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).barrier(*args) + + @classmethod + def both(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).both(*args) + + @classmethod + def bothE(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).bothE(*args) + + @classmethod + def bothV(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).bothV(*args) + + @classmethod + def branch(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).branch(*args) + + @classmethod + def cap(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).cap(*args) + + @classmethod + def choose(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).choose(*args) + + @classmethod + def coalesce(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).coalesce(*args) + + @classmethod + def coin(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).coin(*args) + + @classmethod + def constant(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).constant(*args) + + @classmethod + def count(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).count(*args) + + @classmethod + def cyclicPath(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).cyclicPath(*args) + + @classmethod + def dedup(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).dedup(*args) + + @classmethod + def drop(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).drop(*args) + + @classmethod + def elementMap(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).elementMap(*args) + + @classmethod + def emit(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).emit(*args) + + @classmethod + def filter_(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).filter_(*args) + + @classmethod + def flatMap(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).flatMap(*args) + + @classmethod + def fold(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).fold(*args) + + @classmethod + def group(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).group(*args) + + @classmethod + def groupCount(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).groupCount(*args) + + @classmethod + def has(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).has(*args) + + @classmethod + def hasId(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).hasId(*args) + + @classmethod + def hasKey(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).hasKey(*args) + + @classmethod + def hasLabel(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).hasLabel(*args) + + @classmethod + def hasNot(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).hasNot(*args) + + @classmethod + def hasValue(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).hasValue(*args) + + @classmethod + def id_(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).id_(*args) + + @classmethod + def identity(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).identity(*args) + + @classmethod + def inE(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).inE(*args) + + @classmethod + def inV(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).inV(*args) + + @classmethod + def in_(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).in_(*args) + + @classmethod + def index(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).index(*args) + + @classmethod + def inject(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).inject(*args) + + @classmethod + def is_(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).is_(*args) + + @classmethod + def key(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).key(*args) + + @classmethod + def label(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).label(*args) + + @classmethod + def limit(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).limit(*args) + + @classmethod + def local(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).local(*args) + + @classmethod + def loops(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).loops(*args) + + @classmethod + def map(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).map(*args) + + @classmethod + def match(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).match(*args) + + @classmethod + def math(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).math(*args) + + @classmethod + def max_(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).max_(*args) + + @classmethod + def mean(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).mean(*args) + + @classmethod + def min_(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).min_(*args) + + @classmethod + def not_(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).not_(*args) + + @classmethod + def optional(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).optional(*args) + + @classmethod + def or_(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).or_(*args) + + @classmethod + def order(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).order(*args) + + @classmethod + def otherV(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).otherV(*args) + + @classmethod + def out(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).out(*args) + + @classmethod + def outE(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).outE(*args) + + @classmethod + def outV(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).outV(*args) + + @classmethod + def path(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).path(*args) + + @classmethod + def project(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).project(*args) + + @classmethod + def properties(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).properties(*args) + + @classmethod + def property(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).property(*args) + + @classmethod + def propertyMap(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).propertyMap(*args) + + @classmethod + def range_(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).range_(*args) + + @classmethod + def repeat(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).repeat(*args) + + @classmethod + def sack(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).sack(*args) + + @classmethod + def sample(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).sample(*args) + + @classmethod + def select(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).select(*args) + + @classmethod + def sideEffect(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).sideEffect(*args) + + @classmethod + def simplePath(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).simplePath(*args) + + @classmethod + def skip(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).skip(*args) + + @classmethod + def store(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).store(*args) + + @classmethod + def subgraph(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).subgraph(*args) + + @classmethod + def sum_(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).sum_(*args) + + @classmethod + def tail(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).tail(*args) + + @classmethod + def timeLimit(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).timeLimit(*args) + + @classmethod + def times(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).times(*args) + + @classmethod + def to(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).to(*args) + + @classmethod + def toE(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).toE(*args) + + @classmethod + def toV(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).toV(*args) + + @classmethod + def tree(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).tree(*args) + + @classmethod + def unfold(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).unfold(*args) + + @classmethod + def union(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).union(*args) + + @classmethod + def until(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).until(*args) + + @classmethod + def value(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).value(*args) + + @classmethod + def valueMap(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).valueMap(*args) + + @classmethod + def values(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).values(*args) + + @classmethod + def where(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).where(*args) + + # Deprecated - prefer the underscore suffixed versions e.g filter_() + + @classmethod + def filter(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).filter_(*args) + + @classmethod + def id(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).id_(*args) + + @classmethod + def max(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).max_(*args) + + @classmethod + def min(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).min_(*args) + + @classmethod + def range(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).range_(*args) + + @classmethod + def sum(cls, *args): + return cls.graph_traversal(None, None, Bytecode()).sum_(*args) + + +def V(*args): + return __.V(*args) + + +def addE(*args): + return __.addE(*args) + + +def addV(*args): + return __.addV(*args) + + +def aggregate(*args): + return __.aggregate(*args) + + +def and_(*args): + return __.and_(*args) + + +def as_(*args): + return __.as_(*args) + + +def barrier(*args): + return __.barrier(*args) + + +def both(*args): + return __.both(*args) + + +def bothE(*args): + return __.bothE(*args) + + +def bothV(*args): + return __.bothV(*args) + + +def branch(*args): + return __.branch(*args) + + +def cap(*args): + return __.cap(*args) + + +def choose(*args): + return __.choose(*args) + + +def coalesce(*args): + return __.coalesce(*args) + + +def coin(*args): + return __.coin(*args) + + +def constant(*args): + return __.constant(*args) + + +def count(*args): + return __.count(*args) + + +def cyclicPath(*args): + return __.cyclicPath(*args) + + +def dedup(*args): + return __.dedup(*args) + + +def drop(*args): + return __.drop(*args) + + +def elementMap(*args): + return __.elementMap(*args) + + +def emit(*args): + return __.emit(*args) + + +def filter_(*args): + return __.filter_(*args) + + +def flatMap(*args): + return __.flatMap(*args) + + +def fold(*args): + return __.fold(*args) + + +def group(*args): + return __.group(*args) + + +def groupCount(*args): + return __.groupCount(*args) + + +def has(*args): + return __.has(*args) + + +def hasId(*args): + return __.hasId(*args) + + +def hasKey(*args): + return __.hasKey(*args) + + +def hasLabel(*args): + return __.hasLabel(*args) + + +def hasNot(*args): + return __.hasNot(*args) + + +def hasValue(*args): + return __.hasValue(*args) + + +def id_(*args): + return __.id_(*args) + + +def identity(*args): + return __.identity(*args) + + +def inE(*args): + return __.inE(*args) + + +def inV(*args): + return __.inV(*args) + + +def in_(*args): + return __.in_(*args) + + +def index(*args): + return __.index(*args) + + +def inject(*args): + return __.inject(*args) + + +def is_(*args): + return __.is_(*args) + + +def key(*args): + return __.key(*args) + + +def label(*args): + return __.label(*args) + + +def limit(*args): + return __.limit(*args) + + +def local(*args): + return __.local(*args) + + +def loops(*args): + return __.loops(*args) + + +def map(*args): + return __.map(*args) + + +def match(*args): + return __.match(*args) + + +def math(*args): + return __.math(*args) + + +def max_(*args): + return __.max_(*args) + + +def mean(*args): + return __.mean(*args) + + +def min_(*args): + return __.min_(*args) + + +def not_(*args): + return __.not_(*args) + + +def optional(*args): + return __.optional(*args) + + +def or_(*args): + return __.or_(*args) + + +def order(*args): + return __.order(*args) + + +def otherV(*args): + return __.otherV(*args) + + +def out(*args): + return __.out(*args) + + +def outE(*args): + return __.outE(*args) + + +def outV(*args): + return __.outV(*args) + + +def path(*args): + return __.path(*args) + + +def project(*args): + return __.project(*args) + + +def properties(*args): + return __.properties(*args) + + +def property(*args): + return __.property(*args) + + +def propertyMap(*args): + return __.propertyMap(*args) + + +def range_(*args): + return __.range_(*args) + + +def repeat(*args): + return __.repeat(*args) + + +def sack(*args): + return __.sack(*args) + + +def sample(*args): + return __.sample(*args) + + +def select(*args): + return __.select(*args) + + +def sideEffect(*args): + return __.sideEffect(*args) + + +def simplePath(*args): + return __.simplePath(*args) + + +def skip(*args): + return __.skip(*args) + + +def store(*args): + return __.store(*args) + + +def subgraph(*args): + return __.subgraph(*args) + + +def sum_(*args): + return __.sum_(*args) + + +def tail(*args): + return __.tail(*args) + + +def timeLimit(*args): + return __.timeLimit(*args) + + +def times(*args): + return __.times(*args) + + +def to(*args): + return __.to(*args) + + +def toE(*args): + return __.toE(*args) + + +def toV(*args): + return __.toV(*args) + + +def tree(*args): + return __.tree(*args) + + +def unfold(*args): + return __.unfold(*args) + + +def union(*args): + return __.union(*args) + + +def until(*args): + return __.until(*args) + + +def value(*args): + return __.value(*args) + + +def valueMap(*args): + return __.valueMap(*args) + + +def values(*args): + return __.values(*args) + + +def where(*args): + return __.where(*args) + + +# Deprecated - prefer the underscore suffixed versions e.g filter_() + +def filter(*args): + return __.filter_(*args) + + +def id(*args): + return __.id_(*args) + + +def max(*args): + return __.max_(*args) + + +def min(*args): + return __.min_(*args) + + +def range(*args): + return __.range_(*args) + + +def sum(*args): + return __.sum_(*args) + + +statics.add_static('V', V) + +statics.add_static('addE', addE) + +statics.add_static('addV', addV) + +statics.add_static('aggregate', aggregate) + +statics.add_static('and_', and_) + +statics.add_static('as_', as_) + +statics.add_static('barrier', barrier) + +statics.add_static('both', both) + +statics.add_static('bothE', bothE) + +statics.add_static('bothV', bothV) + +statics.add_static('branch', branch) + +statics.add_static('cap', cap) + +statics.add_static('choose', choose) + +statics.add_static('coalesce', coalesce) + +statics.add_static('coin', coin) + +statics.add_static('constant', constant) + +statics.add_static('count', count) + +statics.add_static('cyclicPath', cyclicPath) + +statics.add_static('dedup', dedup) + +statics.add_static('drop', drop) + +statics.add_static('elementMap', elementMap) + +statics.add_static('emit', emit) + +statics.add_static('filter_', filter_) + +statics.add_static('flatMap', flatMap) + +statics.add_static('fold', fold) + +statics.add_static('group', group) + +statics.add_static('groupCount', groupCount) + +statics.add_static('has', has) + +statics.add_static('hasId', hasId) + +statics.add_static('hasKey', hasKey) + +statics.add_static('hasLabel', hasLabel) + +statics.add_static('hasNot', hasNot) + +statics.add_static('hasValue', hasValue) + +statics.add_static('id_', id_) + +statics.add_static('identity', identity) + +statics.add_static('inE', inE) + +statics.add_static('inV', inV) + +statics.add_static('in_', in_) + +statics.add_static('index', index) + +statics.add_static('inject', inject) + +statics.add_static('is_', is_) + +statics.add_static('key', key) + +statics.add_static('label', label) + +statics.add_static('limit', limit) + +statics.add_static('local', local) + +statics.add_static('loops', loops) + +statics.add_static('map', map) + +statics.add_static('match', match) + +statics.add_static('math', math) + +statics.add_static('max_', max_) + +statics.add_static('mean', mean) + +statics.add_static('min_', min_) + +statics.add_static('not_', not_) + +statics.add_static('optional', optional) + +statics.add_static('or_', or_) + +statics.add_static('order', order) + +statics.add_static('otherV', otherV) + +statics.add_static('out', out) + +statics.add_static('outE', outE) + +statics.add_static('outV', outV) + +statics.add_static('path', path) + +statics.add_static('project', project) + +statics.add_static('properties', properties) + +statics.add_static('property', property) + +statics.add_static('propertyMap', propertyMap) + +statics.add_static('range_', range_) + +statics.add_static('repeat', repeat) + +statics.add_static('sack', sack) + +statics.add_static('sample', sample) + +statics.add_static('select', select) + +statics.add_static('sideEffect', sideEffect) + +statics.add_static('simplePath', simplePath) + +statics.add_static('skip', skip) + +statics.add_static('store', store) + +statics.add_static('subgraph', subgraph) + +statics.add_static('sum_', sum_) + +statics.add_static('tail', tail) + +statics.add_static('timeLimit', timeLimit) + +statics.add_static('times', times) + +statics.add_static('to', to) + +statics.add_static('toE', toE) + +statics.add_static('toV', toV) + +statics.add_static('tree', tree) + +statics.add_static('unfold', unfold) + +statics.add_static('union', union) + +statics.add_static('until', until) + +statics.add_static('value', value) + +statics.add_static('valueMap', valueMap) + +statics.add_static('values', values) + +statics.add_static('where', where) + + +# Deprecated - prefer the underscore suffixed versions e.g filter_() + +statics.add_static('filter', filter) +statics.add_static('id', id) +statics.add_static('max', max) +statics.add_static('min', min) +statics.add_static('range', range) +statics.add_static('sum', sum)