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

colegreer pushed a commit to branch 3.8-dev
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git


The following commit(s) were added to refs/heads/3.8-dev by this push:
     new c41cd330a8 CTR Fix OLAP-Spark-Yarn docs example
c41cd330a8 is described below

commit c41cd330a805f7c8dcb9e6b2c356eea6368ffdcb
Author: Cole-Greer <[email protected]>
AuthorDate: Wed Oct 29 18:23:43 2025 -0700

    CTR Fix OLAP-Spark-Yarn docs example
---
 .../gremlin/process/traversal/util/PureTraversal.java         |  4 +++-
 .../test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs       |  5 +++--
 gremlin-go/driver/cucumber/gremlin.go                         |  5 +++--
 .../javascript/gremlin-javascript/test/cucumber/gremlin.js    |  5 +++--
 gremlin-python/src/main/python/radish/gremlin.py              |  5 +++--
 .../tinkerpop/gremlin/test/features/sideEffect/Group.feature  | 11 +++++++++++
 6 files changed, 26 insertions(+), 9 deletions(-)

diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/PureTraversal.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/PureTraversal.java
index e67f1e971a..e3a7c881f6 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/PureTraversal.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/PureTraversal.java
@@ -37,7 +37,9 @@ public final class PureTraversal<S, E> implements 
Serializable, Cloneable {
 
     public PureTraversal(final Traversal.Admin<S, E> pureTraversal) {
         if (!pureTraversal.isLocked()) {
-            GValueReductionStrategy.instance().apply(pureTraversal);
+            TraversalHelper.applyTraversalRecursively(t -> {
+                GValueReductionStrategy.instance().apply(t);
+            }, pureTraversal);
         }
         this.pureTraversal = pureTraversal;
     }
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs 
b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
index abb46e1776..41ee732b1b 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
@@ -879,8 +879,8 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
                
{"g_addV_asXfirstX_repeatXaddEXnextX_toXaddVX_inVX_timesX5X_addEXnextX_toXselectXfirstXX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.AddV().As("first").Repeat(__.AddE("next").To(__.AddV()).InV()).Times(5).AddE("next").To(__.Select<object>("first")),
 (g,p) =>g.V(), (g,p) =>g.E(), (g,p) =>g.E().HasLabel("next"), (g,p) 
=>g.V().Limit<object>(1).BothE(), (g,p) =>g.V().Limit<object>(1).InE(), (g,p) 
=>g.V().Limit<object>(1).OutE()}}, 
                
{"g_V_hasXname_markoX_asXaX_outEXcreatedX_asXbX_inV_addEXselectXbX_labelX_toXaX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV("person").Property("name", "marko").Property("age", 
29).As("marko").AddV("person").Property("name", "vadas").Property("age", 
27).As("vadas").AddV("software").Property("name", "lop").Property("lang", 
"java").As("lop").AddV("person").Property("name", "josh").Property("age", 
32).As("josh").AddV("softwar [...]
                
{"g_addEXV_outE_label_groupCount_orderXlocalX_byXvalues_descX_selectXkeysX_unfold_limitX1XX_fromXV_hasXname_vadasXX_toXV_hasXname_lopXX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV("person").Property("name", "marko").Property("age", 
29).As("marko").AddV("person").Property("name", "vadas").Property("age", 
27).As("vadas").AddV("software").Property("name", "lop").Property("lang", 
"java").As("lop").AddV("person").Property("nam [...]
-               {"g_addEXknowsX_fromXaX_toXbX_propertyXweight_0_1X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV("person").Property("name", "marko").Property("age", 
29).As("marko").AddV("person").Property("name", "vadas").Property("age", 
27).As("vadas").AddV("software").Property("name", "lop").Property("lang", 
"java").As("lop").AddV("person").Property("name", "josh").Property("age", 
32).As("josh").AddV("software").Property("name", "ripple" [...]
-               {"g_addEXknowsvarX_fromXaX_toXbX_propertyXweight_0_1X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV("person").Property("name", "marko").Property("age", 
29).As("marko").AddV("person").Property("name", "vadas").Property("age", 
27).As("vadas").AddV("software").Property("name", "lop").Property("lang", 
"java").As("lop").AddV("person").Property("name", "josh").Property("age", 
32).As("josh").AddV("software").Property("name", "ripp [...]
+               
{"g_addEXknowsX_fromXVXvid1XX_toXVXvid6XX_propertyXweight_0_1X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV("person").Property("name", "marko").Property("age", 
29).As("marko").AddV("person").Property("name", "vadas").Property("age", 
27).As("vadas").AddV("software").Property("name", "lop").Property("lang", 
"java").As("lop").AddV("person").Property("name", "josh").Property("age", 
32).As("josh").AddV("software").Property("nam [...]
+               
{"g_addEXknowsvarX_fromXVXvid1XX_toXVXvid6XX_propertyXweight_0_1X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV("person").Property("name", "marko").Property("age", 
29).As("marko").AddV("person").Property("name", "vadas").Property("age", 
27).As("vadas").AddV("software").Property("name", "lop").Property("lang", 
"java").As("lop").AddV("person").Property("name", "josh").Property("age", 
32).As("josh").AddV("software").Property(" [...]
                {"g_VXaX_addEXknowsX_toXbX_propertyXweight_0_1X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV("person").Property("name", "marko").Property("age", 
29).As("marko").AddV("person").Property("name", "vadas").Property("age", 
27).As("vadas").AddV("software").Property("name", "lop").Property("lang", 
"java").As("lop").AddV("person").Property("name", "josh").Property("age", 
32).As("josh").AddV("software").Property("name", "ripple").P [...]
                
{"g_addEXknowsXpropertyXweight_nullXfromXV_hasXname_markoXX_toXV_hasXname_vadasXX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV("person").Property("name", "marko").Property("age", 
29).AddV("person").Property("name", "vadas").Property("age", 27), (g,p) 
=>g.AddE("knows").Property("weight", null).From(__.V().Has("name", 
"marko")).To(__.V().Has("name", "vadas")), (g,p) =>g.E().Has("knows", "weight", 
(object) null)}}, 
                
{"g_addEXknowsvarXpropertyXweight_nullXfromXV_hasXname_markoXX_toXV_hasXname_vadasXX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV("person").Property("name", "marko").Property("age", 
29).AddV("person").Property("name", "vadas").Property("age", 27), (g,p) 
=>g.AddE((string) p["xx1"]).Property("weight", null).From(__.V().Has("name", 
"marko")).To(__.V().Has("name", "vadas")), (g,p) =>g.E().Has("knows", "weight", 
(object) null)}}, 
@@ -1965,6 +1965,7 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
                
{"g_V_group_by_byXout_label_tailX10X_foldX_selectXvaluesX_unfold_orderXlocalX", 
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Group<object, 
object>().By().By(__.Out().Label().Tail<object>(10).Fold()).Select<object>(Column.Values).Unfold<object>().Order(Scope.Local)}},
 
                {"g_V_groupXaX_byXnameX_by_selectXaX_countXlocalX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V().Group("a").By("name").By().Select<object>("a").Count(Scope.Local)}}, 
                {"g_V_localXgroupXaX_byXnameX_by_selectXaX_countXlocalXX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V().Local<object>(__.Group("a").By("name").By().Select<object>("a").Count(Scope.Local))}},
 
+               {"g_V_group_byXvaluesXnameXX_byXboth_countX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Group<object, 
object>().By(__.Values<object>("name")).By(__.Both().Count())}}, 
                {"g_V_outXcreatedX_groupCount_byXnameX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Out("created").GroupCount<object>().By("name")}}, 
                {"g_V_groupCount_byXageX", new List<Func<GraphTraversalSource, 
IDictionary<string, object>, ITraversal>> {(g,p) 
=>g.V().GroupCount<object>().By("age")}}, 
                {"g_withStrategiesXProductiveByStrategyX_V_groupCount_byXageX", 
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.WithStrategies(new 
ProductiveByStrategy()).V().GroupCount<object>().By("age")}}, 
diff --git a/gremlin-go/driver/cucumber/gremlin.go 
b/gremlin-go/driver/cucumber/gremlin.go
index 5f80cdf7bc..f0efda114e 100644
--- a/gremlin-go/driver/cucumber/gremlin.go
+++ b/gremlin-go/driver/cucumber/gremlin.go
@@ -849,8 +849,8 @@ var translationMap = map[string][]func(g 
*gremlingo.GraphTraversalSource, p map[
     
"g_addV_asXfirstX_repeatXaddEXnextX_toXaddVX_inVX_timesX5X_addEXnextX_toXselectXfirstXX":
 {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.AddV().As("first").Repeat(gremlingo.T__.AddE("next").To(gremlingo.T__.AddV()).InV()).Times(5).AddE("next").To(gremlingo.T__.Select("first"))},
 func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.V()}, func(g 
*gremlingo.GraphTraversalSource, p ma [...]
     
"g_V_hasXname_markoX_asXaX_outEXcreatedX_asXbX_inV_addEXselectXbX_labelX_toXaX":
 {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.AddV("person").Property("name", 
"marko").Property("age", 29).As("marko").AddV("person").Property("name", 
"vadas").Property("age", 27).As("vadas").AddV("software").Property("name", 
"lop").Property("lang", "java").As("lop").AddV("person").Property("name", 
"josh").Property("age", 32).As("josh").AddV("softw [...]
     
"g_addEXV_outE_label_groupCount_orderXlocalX_byXvalues_descX_selectXkeysX_unfold_limitX1XX_fromXV_hasXname_vadasXX_toXV_hasXname_lopXX":
 {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.AddV("person").Property("name", 
"marko").Property("age", 29).As("marko").AddV("person").Property("name", 
"vadas").Property("age", 27).As("vadas").AddV("software").Property("name", 
"lop").Property("lang", "java").As("lop").AddV("person").Property("n [...]
-    "g_addEXknowsX_fromXaX_toXbX_propertyXweight_0_1X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.AddV("person").Property("name", 
"marko").Property("age", 29).As("marko").AddV("person").Property("name", 
"vadas").Property("age", 27).As("vadas").AddV("software").Property("name", 
"lop").Property("lang", "java").As("lop").AddV("person").Property("name", 
"josh").Property("age", 32).As("josh").AddV("software").Property("name", "rippl 
[...]
-    "g_addEXknowsvarX_fromXaX_toXbX_propertyXweight_0_1X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.AddV("person").Property("name", 
"marko").Property("age", 29).As("marko").AddV("person").Property("name", 
"vadas").Property("age", 27).As("vadas").AddV("software").Property("name", 
"lop").Property("lang", "java").As("lop").AddV("person").Property("name", 
"josh").Property("age", 32).As("josh").AddV("software").Property("name", "ri 
[...]
+    "g_addEXknowsX_fromXVXvid1XX_toXVXvid6XX_propertyXweight_0_1X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.AddV("person").Property("name", 
"marko").Property("age", 29).As("marko").AddV("person").Property("name", 
"vadas").Property("age", 27).As("vadas").AddV("software").Property("name", 
"lop").Property("lang", "java").As("lop").AddV("person").Property("name", 
"josh").Property("age", 32).As("josh").AddV("software").Property("n [...]
+    "g_addEXknowsvarX_fromXVXvid1XX_toXVXvid6XX_propertyXweight_0_1X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.AddV("person").Property("name", 
"marko").Property("age", 29).As("marko").AddV("person").Property("name", 
"vadas").Property("age", 27).As("vadas").AddV("software").Property("name", 
"lop").Property("lang", "java").As("lop").AddV("person").Property("name", 
"josh").Property("age", 32).As("josh").AddV("software").Property [...]
     "g_VXaX_addEXknowsX_toXbX_propertyXweight_0_1X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.AddV("person").Property("name", 
"marko").Property("age", 29).As("marko").AddV("person").Property("name", 
"vadas").Property("age", 27).As("vadas").AddV("software").Property("name", 
"lop").Property("lang", "java").As("lop").AddV("person").Property("name", 
"josh").Property("age", 32).As("josh").AddV("software").Property("name", 
"ripple") [...]
     
"g_addEXknowsXpropertyXweight_nullXfromXV_hasXname_markoXX_toXV_hasXname_vadasXX":
 {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.AddV("person").Property("name", 
"marko").Property("age", 29).AddV("person").Property("name", 
"vadas").Property("age", 27)}, func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.AddE("knows").Property("weight", nil).From(gremlingo.T__.V().Has("name", "ma 
[...]
     
"g_addEXknowsvarXpropertyXweight_nullXfromXV_hasXname_markoXX_toXV_hasXname_vadasXX":
 {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.AddV("person").Property("name", 
"marko").Property("age", 29).AddV("person").Property("name", 
"vadas").Property("age", 27)}, func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.AddE(p["xx1"]).Property("weight", nil).From(gremlingo.T__.V().Has("name", 
[...]
@@ -1935,6 +1935,7 @@ var translationMap = map[string][]func(g 
*gremlingo.GraphTraversalSource, p map[
     
"g_V_group_by_byXout_label_tailX10X_foldX_selectXvaluesX_unfold_orderXlocalX": 
{func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().Group().By().By(gremlingo.T__.Out().Label().Tail(10).Fold()).Select(gremlingo.Column.Values).Unfold().Order(gremlingo.Scope.Local)}},
 
     "g_V_groupXaX_byXnameX_by_selectXaX_countXlocalX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().Group("a").By("name").By().Select("a").Count(gremlingo.Scope.Local)}}, 
     "g_V_localXgroupXaX_byXnameX_by_selectXaX_countXlocalXX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().Local(gremlingo.T__.Group("a").By("name").By().Select("a").Count(gremlingo.Scope.Local))}},
 
+    "g_V_group_byXvaluesXnameXX_byXboth_countX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().Group().By(gremlingo.T__.Values("name")).By(gremlingo.T__.Both().Count())}},
 
     "g_V_outXcreatedX_groupCount_byXnameX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().Out("created").GroupCount().By("name")}}, 
     "g_V_groupCount_byXageX": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.V().GroupCount().By("age")}}, 
     "g_withStrategiesXProductiveByStrategyX_V_groupCount_byXageX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithStrategies(gremlingo.ProductiveByStrategy()).V().GroupCount().By("age")}},
 
diff --git 
a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
 
b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
index 72140c39ef..7beb8c03c1 100644
--- 
a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
+++ 
b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
@@ -880,8 +880,8 @@ const gremlins = {
     
g_addV_asXfirstX_repeatXaddEXnextX_toXaddVX_inVX_timesX5X_addEXnextX_toXselectXfirstXX:
 [function({g}) { return 
g.addV().as("first").repeat(__.addE("next").to(__.addV()).inV()).times(5).addE("next").to(__.select("first"))
 }, function({g}) { return g.V() }, function({g}) { return g.E() }, 
function({g}) { return g.E().hasLabel("next") }, function({g}) { return 
g.V().limit(1).bothE() }, function({g}) { return g.V().limit(1).inE() }, 
function({g}) { return g.V().limit(1).outE() }], 
     
g_V_hasXname_markoX_asXaX_outEXcreatedX_asXbX_inV_addEXselectXbX_labelX_toXaX: 
[function({g, vid1}) { return g.addV("person").property("name", 
"marko").property("age", 29).as("marko").addV("person").property("name", 
"vadas").property("age", 27).as("vadas").addV("software").property("name", 
"lop").property("lang", "java").as("lop").addV("person").property("name", 
"josh").property("age", 32).as("josh").addV("software").property("name", 
"ripple").property("lang", "java").as("ripple").ad [...]
     
g_addEXV_outE_label_groupCount_orderXlocalX_byXvalues_descX_selectXkeysX_unfold_limitX1XX_fromXV_hasXname_vadasXX_toXV_hasXname_lopXX:
 [function({g, vid2}) { return g.addV("person").property("name", 
"marko").property("age", 29).as("marko").addV("person").property("name", 
"vadas").property("age", 27).as("vadas").addV("software").property("name", 
"lop").property("lang", "java").as("lop").addV("person").property("name", 
"josh").property("age", 32).as("josh").addV("software").property("n [...]
-    g_addEXknowsX_fromXaX_toXbX_propertyXweight_0_1X: [function({g, xx1, vid6, 
vid1}) { return g.addV("person").property("name", "marko").property("age", 
29).as("marko").addV("person").property("name", "vadas").property("age", 
27).as("vadas").addV("software").property("name", "lop").property("lang", 
"java").as("lop").addV("person").property("name", "josh").property("age", 
32).as("josh").addV("software").property("name", "ripple").property("lang", 
"java").as("ripple").addV("person").prope [...]
-    g_addEXknowsvarX_fromXaX_toXbX_propertyXweight_0_1X: [function({g, xx1, 
vid6, xx2, vid1}) { return g.addV("person").property("name", 
"marko").property("age", 29).as("marko").addV("person").property("name", 
"vadas").property("age", 27).as("vadas").addV("software").property("name", 
"lop").property("lang", "java").as("lop").addV("person").property("name", 
"josh").property("age", 32).as("josh").addV("software").property("name", 
"ripple").property("lang", "java").as("ripple").addV("person [...]
+    g_addEXknowsX_fromXVXvid1XX_toXVXvid6XX_propertyXweight_0_1X: 
[function({g, xx1, vid6, vid1}) { return g.addV("person").property("name", 
"marko").property("age", 29).as("marko").addV("person").property("name", 
"vadas").property("age", 27).as("vadas").addV("software").property("name", 
"lop").property("lang", "java").as("lop").addV("person").property("name", 
"josh").property("age", 32).as("josh").addV("software").property("name", 
"ripple").property("lang", "java").as("ripple").addV("pe [...]
+    g_addEXknowsvarX_fromXVXvid1XX_toXVXvid6XX_propertyXweight_0_1X: 
[function({g, xx1, vid6, xx2, vid1}) { return g.addV("person").property("name", 
"marko").property("age", 29).as("marko").addV("person").property("name", 
"vadas").property("age", 27).as("vadas").addV("software").property("name", 
"lop").property("lang", "java").as("lop").addV("person").property("name", 
"josh").property("age", 32).as("josh").addV("software").property("name", 
"ripple").property("lang", "java").as("ripple"). [...]
     g_VXaX_addEXknowsX_toXbX_propertyXweight_0_1X: [function({g, xx1, vid6, 
vid1}) { return g.addV("person").property("name", "marko").property("age", 
29).as("marko").addV("person").property("name", "vadas").property("age", 
27).as("vadas").addV("software").property("name", "lop").property("lang", 
"java").as("lop").addV("person").property("name", "josh").property("age", 
32).as("josh").addV("software").property("name", "ripple").property("lang", 
"java").as("ripple").addV("person").property [...]
     
g_addEXknowsXpropertyXweight_nullXfromXV_hasXname_markoXX_toXV_hasXname_vadasXX:
 [function({g}) { return g.addV("person").property("name", 
"marko").property("age", 29).addV("person").property("name", 
"vadas").property("age", 27) }, function({g}) { return 
g.addE("knows").property("weight", null).from_(__.V().has("name", 
"marko")).to(__.V().has("name", "vadas")) }, function({g}) { return 
g.E().has("knows", "weight", null) }], 
     
g_addEXknowsvarXpropertyXweight_nullXfromXV_hasXname_markoXX_toXV_hasXname_vadasXX:
 [function({g, xx1}) { return g.addV("person").property("name", 
"marko").property("age", 29).addV("person").property("name", 
"vadas").property("age", 27) }, function({g, xx1}) { return 
g.addE(xx1).property("weight", null).from_(__.V().has("name", 
"marko")).to(__.V().has("name", "vadas")) }, function({g, xx1}) { return 
g.E().has("knows", "weight", null) }], 
@@ -1966,6 +1966,7 @@ const gremlins = {
     
g_V_group_by_byXout_label_tailX10X_foldX_selectXvaluesX_unfold_orderXlocalX: 
[function({g}) { return 
g.V().group().by().by(__.out().label().tail(10).fold()).select(Column.values).unfold().order(Scope.local)
 }], 
     g_V_groupXaX_byXnameX_by_selectXaX_countXlocalX: [function({g}) { return 
g.V().group("a").by("name").by().select("a").count(Scope.local) }], 
     g_V_localXgroupXaX_byXnameX_by_selectXaX_countXlocalXX: [function({g}) { 
return 
g.V().local(__.group("a").by("name").by().select("a").count(Scope.local)) }], 
+    g_V_group_byXvaluesXnameXX_byXboth_countX: [function({g}) { return 
g.V().group().by(__.values("name")).by(__.both().count()) }], 
     g_V_outXcreatedX_groupCount_byXnameX: [function({g}) { return 
g.V().out("created").groupCount().by("name") }], 
     g_V_groupCount_byXageX: [function({g}) { return 
g.V().groupCount().by("age") }], 
     g_withStrategiesXProductiveByStrategyX_V_groupCount_byXageX: 
[function({g}) { return g.withStrategies(new 
ProductiveByStrategy()).V().groupCount().by("age") }], 
diff --git a/gremlin-python/src/main/python/radish/gremlin.py 
b/gremlin-python/src/main/python/radish/gremlin.py
index 1d4dad5b72..9bbbdbcd54 100644
--- a/gremlin-python/src/main/python/radish/gremlin.py
+++ b/gremlin-python/src/main/python/radish/gremlin.py
@@ -852,8 +852,8 @@ world.gremlins = {
     
'g_addV_asXfirstX_repeatXaddEXnextX_toXaddVX_inVX_timesX5X_addEXnextX_toXselectXfirstXX':
 [(lambda 
g:g.add_v().as_('first').repeat(__.add_e('next').to(__.add_v()).in_v()).times(5).add_e('next').to(__.select('first'))),
 (lambda g:g.V()), (lambda g:g.E()), (lambda g:g.E().has_label('next')), 
(lambda g:g.V().limit(1).both_e()), (lambda g:g.V().limit(1).in_e()), (lambda 
g:g.V().limit(1).out_e())], 
     
'g_V_hasXname_markoX_asXaX_outEXcreatedX_asXbX_inV_addEXselectXbX_labelX_toXaX':
 [(lambda g, vid1=None:g.add_v('person').property('name', 
'marko').property('age', 29).as_('marko').add_v('person').property('name', 
'vadas').property('age', 27).as_('vadas').add_v('software').property('name', 
'lop').property('lang', 'java').as_('lop').add_v('person').property('name', 
'josh').property('age', 32).as_('josh').add_v('software').property('name', 
'ripple').property('lang', 'java').as_('ripple' [...]
     
'g_addEXV_outE_label_groupCount_orderXlocalX_byXvalues_descX_selectXkeysX_unfold_limitX1XX_fromXV_hasXname_vadasXX_toXV_hasXname_lopXX':
 [(lambda g, vid2=None:g.add_v('person').property('name', 
'marko').property('age', 29).as_('marko').add_v('person').property('name', 
'vadas').property('age', 27).as_('vadas').add_v('software').property('name', 
'lop').property('lang', 'java').as_('lop').add_v('person').property('name', 
'josh').property('age', 32).as_('josh').add_v('software').property [...]
-    'g_addEXknowsX_fromXaX_toXbX_propertyXweight_0_1X': [(lambda g, 
xx1=None,vid6=None,vid1=None:g.add_v('person').property('name', 
'marko').property('age', 29).as_('marko').add_v('person').property('name', 
'vadas').property('age', 27).as_('vadas').add_v('software').property('name', 
'lop').property('lang', 'java').as_('lop').add_v('person').property('name', 
'josh').property('age', 32).as_('josh').add_v('software').property('name', 
'ripple').property('lang', 'java').as_('ripple').add_v('p [...]
-    'g_addEXknowsvarX_fromXaX_toXbX_propertyXweight_0_1X': [(lambda g, 
xx1=None,vid6=None,xx2=None,vid1=None:g.add_v('person').property('name', 
'marko').property('age', 29).as_('marko').add_v('person').property('name', 
'vadas').property('age', 27).as_('vadas').add_v('software').property('name', 
'lop').property('lang', 'java').as_('lop').add_v('person').property('name', 
'josh').property('age', 32).as_('josh').add_v('software').property('name', 
'ripple').property('lang', 'java').as_('rippl [...]
+    'g_addEXknowsX_fromXVXvid1XX_toXVXvid6XX_propertyXweight_0_1X': [(lambda 
g, xx1=None,vid6=None,vid1=None:g.add_v('person').property('name', 
'marko').property('age', 29).as_('marko').add_v('person').property('name', 
'vadas').property('age', 27).as_('vadas').add_v('software').property('name', 
'lop').property('lang', 'java').as_('lop').add_v('person').property('name', 
'josh').property('age', 32).as_('josh').add_v('software').property('name', 
'ripple').property('lang', 'java').as_('rippl [...]
+    'g_addEXknowsvarX_fromXVXvid1XX_toXVXvid6XX_propertyXweight_0_1X': 
[(lambda g, 
xx1=None,vid6=None,xx2=None,vid1=None:g.add_v('person').property('name', 
'marko').property('age', 29).as_('marko').add_v('person').property('name', 
'vadas').property('age', 27).as_('vadas').add_v('software').property('name', 
'lop').property('lang', 'java').as_('lop').add_v('person').property('name', 
'josh').property('age', 32).as_('josh').add_v('software').property('name', 
'ripple').property('lang', 'java' [...]
     'g_VXaX_addEXknowsX_toXbX_propertyXweight_0_1X': [(lambda g, 
xx1=None,vid6=None,vid1=None:g.add_v('person').property('name', 
'marko').property('age', 29).as_('marko').add_v('person').property('name', 
'vadas').property('age', 27).as_('vadas').add_v('software').property('name', 
'lop').property('lang', 'java').as_('lop').add_v('person').property('name', 
'josh').property('age', 32).as_('josh').add_v('software').property('name', 
'ripple').property('lang', 'java').as_('ripple').add_v('pers [...]
     
'g_addEXknowsXpropertyXweight_nullXfromXV_hasXname_markoXX_toXV_hasXname_vadasXX':
 [(lambda g:g.add_v('person').property('name', 'marko').property('age', 
29).add_v('person').property('name', 'vadas').property('age', 27)), (lambda 
g:g.add_e('knows').property('weight', None).from_(__.V().has('name', 
'marko')).to(__.V().has('name', 'vadas'))), (lambda g:g.E().has('knows', 
'weight', None))], 
     
'g_addEXknowsvarXpropertyXweight_nullXfromXV_hasXname_markoXX_toXV_hasXname_vadasXX':
 [(lambda g, xx1=None:g.add_v('person').property('name', 
'marko').property('age', 29).add_v('person').property('name', 
'vadas').property('age', 27)), (lambda g, 
xx1=None:g.add_e(xx1).property('weight', None).from_(__.V().has('name', 
'marko')).to(__.V().has('name', 'vadas'))), (lambda g, 
xx1=None:g.E().has('knows', 'weight', None))], 
@@ -1938,6 +1938,7 @@ world.gremlins = {
     
'g_V_group_by_byXout_label_tailX10X_foldX_selectXvaluesX_unfold_orderXlocalX': 
[(lambda 
g:g.V().group().by().by(__.out().label().tail(10).fold()).select(Column.values).unfold().order(Scope.local))],
 
     'g_V_groupXaX_byXnameX_by_selectXaX_countXlocalX': [(lambda 
g:g.V().group('a').by('name').by().select('a').count(Scope.local))], 
     'g_V_localXgroupXaX_byXnameX_by_selectXaX_countXlocalXX': [(lambda 
g:g.V().local(__.group('a').by('name').by().select('a').count(Scope.local)))], 
+    'g_V_group_byXvaluesXnameXX_byXboth_countX': [(lambda 
g:g.V().group().by(__.values('name')).by(__.both().count()))], 
     'g_V_outXcreatedX_groupCount_byXnameX': [(lambda 
g:g.V().out('created').group_count().by('name'))], 
     'g_V_groupCount_byXageX': [(lambda g:g.V().group_count().by('age'))], 
     'g_withStrategiesXProductiveByStrategyX_V_groupCount_byXageX': [(lambda 
g:g.with_strategies(ProductiveByStrategy()).V().group_count().by('age'))], 
diff --git 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/sideEffect/Group.feature
 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/sideEffect/Group.feature
index 2140d41717..1afa38e3d4 100644
--- 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/sideEffect/Group.feature
+++ 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/sideEffect/Group.feature
@@ -397,3 +397,14 @@ Feature: Step - group()
       | d[4].l |
       | d[5].l |
       | d[6].l |
+
+  Scenario: g_V_group_byXvaluesXnameXX_byXboth_countX
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().group().by(values('name')).by(both().count())
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | m[{"marko":"d[3].l", "vadas":"d[1].l", "lop":"d[3].l", 
"josh":"d[3].l", "ripple":"d[1].l", "peter":"d[1].l"}] |

Reply via email to