You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by ok...@apache.org on 2015/02/14 01:57:46 UTC
[2/3] incubator-tinkerpop git commit: renamed DedupStep ->
DedupGlobalStep and SampleStep -> SampleGlobalStep
renamed DedupStep -> DedupGlobalStep and SampleStep -> SampleGlobalStep
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/874f474c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/874f474c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/874f474c
Branch: refs/heads/master
Commit: 874f474cd1d0ff16810565e2b869258c992c346b
Parents: c93e1e2
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Sat Feb 14 01:19:27 2015 +0100
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Sat Feb 14 01:19:27 2015 +0100
----------------------------------------------------------------------
.../process/graph/traversal/GraphTraversal.java | 12 +-
.../traversal/step/filter/DedupGlobalStep.java | 96 +++++++++++++++
.../graph/traversal/step/filter/DedupStep.java | 96 ---------------
.../traversal/step/filter/SampleGlobalStep.java | 118 +++++++++++++++++++
.../graph/traversal/step/filter/SampleStep.java | 118 -------------------
.../strategy/DedupOptimizerStrategy.java | 7 +-
6 files changed, 223 insertions(+), 224 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/874f474c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversal.java
index 07aa1e2..189e300 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversal.java
@@ -35,7 +35,7 @@ import org.apache.tinkerpop.gremlin.process.graph.traversal.step.branch.UnionSte
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.AndStep;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.CoinStep;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.CyclicPathStep;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.DedupStep;
+import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.DedupGlobalStep;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.ExceptStep;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.HasStep;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.HasTraversalStep;
@@ -44,7 +44,7 @@ import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.LambdaFi
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.OrStep;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.RangeStep;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.RetainStep;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.SampleStep;
+import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.SampleGlobalStep;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.SimplePathStep;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.TimeLimitStep;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.WhereStep;
@@ -344,11 +344,11 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
}
public default GraphTraversal<S, E> dedup() {
- return this.asAdmin().addStep(new DedupStep<>(this.asAdmin()));
+ return this.asAdmin().addStep(new DedupGlobalStep<>(this.asAdmin()));
}
public default GraphTraversal<S, E> dedup(final Scope scope) {
- return this.asAdmin().addStep(scope.equals(Scope.global) ? new DedupStep<>(this.asAdmin()) : new DedupLocalStep<>(this.asAdmin()));
+ return this.asAdmin().addStep(scope.equals(Scope.global) ? new DedupGlobalStep<>(this.asAdmin()) : new DedupLocalStep<>(this.asAdmin()));
}
public default GraphTraversal<S, E> except(final String sideEffectKeyOrPathLabel) {
@@ -468,12 +468,12 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
}
public default GraphTraversal<S, E> sample(final int amountToSample) {
- return this.asAdmin().addStep(new SampleStep<>(this.asAdmin(), amountToSample));
+ return this.asAdmin().addStep(new SampleGlobalStep<>(this.asAdmin(), amountToSample));
}
public default GraphTraversal<S, E> sample(final Scope scope, final int amountToSample) {
return this.asAdmin().addStep(scope.equals(Scope.global)
- ? new SampleStep<>(this.asAdmin(), amountToSample)
+ ? new SampleGlobalStep<>(this.asAdmin(), amountToSample)
: new SampleLocalStep<>(this.asAdmin(), amountToSample));
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/874f474c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupGlobalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupGlobalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupGlobalStep.java
new file mode 100644
index 0000000..ee148b3
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupGlobalStep.java
@@ -0,0 +1,96 @@
+/*
+ * 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.
+ */
+package org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter;
+
+import org.apache.tinkerpop.gremlin.process.Traversal;
+import org.apache.tinkerpop.gremlin.process.Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.lambda.IdentityTraversal;
+import org.apache.tinkerpop.gremlin.process.traversal.step.Reducing;
+import org.apache.tinkerpop.gremlin.process.traversal.step.Reversible;
+import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
+import org.apache.tinkerpop.gremlin.process.traverser.TraverserRequirement;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public final class DedupGlobalStep<S> extends FilterStep<S> implements Reversible, Reducing<Set<Object>, S>, TraversalParent {
+
+ private Traversal.Admin<S, Object> dedupTraversal = new IdentityTraversal<>();
+ private Set<Object> duplicateSet = new HashSet<>();
+
+ public DedupGlobalStep(final Traversal.Admin traversal) {
+ super(traversal);
+ }
+
+ @Override
+ protected boolean filter(final Traverser.Admin<S> traverser) {
+ traverser.setBulk(1);
+ return this.duplicateSet.add(TraversalUtil.apply(traverser, this.dedupTraversal));
+ }
+
+
+ @Override
+ public List<Traversal<S, Object>> getLocalChildren() {
+ return Collections.singletonList(this.dedupTraversal);
+ }
+
+ @Override
+ public void addLocalChild(final Traversal.Admin dedupTraversal) {
+ this.dedupTraversal = this.integrateChild(dedupTraversal, TYPICAL_LOCAL_OPERATIONS);
+ }
+
+ @Override
+ public Reducer<Set<Object>, S> getReducer() {
+ return new Reducer<>(HashSet::new, (set, start) -> {
+ set.add(TraversalUtil.apply(start, this.dedupTraversal));
+ return set;
+ }, true);
+ }
+
+ @Override
+ public DedupGlobalStep<S> clone() throws CloneNotSupportedException {
+ final DedupGlobalStep<S> clone = (DedupGlobalStep<S>) super.clone();
+ clone.duplicateSet = new HashSet<>();
+ clone.dedupTraversal = clone.integrateChild(this.dedupTraversal.clone(), TYPICAL_LOCAL_OPERATIONS);
+ return clone;
+ }
+
+ @Override
+ public void reset() {
+ super.reset();
+ this.duplicateSet.clear();
+ }
+
+ @Override
+ public String toString() {
+ return TraversalHelper.makeStepString(this, this.dedupTraversal);
+ }
+
+ @Override
+ public Set<TraverserRequirement> getRequirements() {
+ return this.getSelfAndChildRequirements(TraverserRequirement.SIDE_EFFECTS);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/874f474c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupStep.java
deleted file mode 100644
index 1b56b9a..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupStep.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * 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.
- */
-package org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter;
-
-import org.apache.tinkerpop.gremlin.process.Traversal;
-import org.apache.tinkerpop.gremlin.process.Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.lambda.IdentityTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.step.Reducing;
-import org.apache.tinkerpop.gremlin.process.traversal.step.Reversible;
-import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
-import org.apache.tinkerpop.gremlin.process.traverser.TraverserRequirement;
-
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public final class DedupStep<S> extends FilterStep<S> implements Reversible, Reducing<Set<Object>, S>, TraversalParent {
-
- private Traversal.Admin<S, Object> dedupTraversal = new IdentityTraversal<>();
- private Set<Object> duplicateSet = new HashSet<>();
-
- public DedupStep(final Traversal.Admin traversal) {
- super(traversal);
- }
-
- @Override
- protected boolean filter(final Traverser.Admin<S> traverser) {
- traverser.setBulk(1);
- return this.duplicateSet.add(TraversalUtil.apply(traverser, this.dedupTraversal));
- }
-
-
- @Override
- public List<Traversal<S, Object>> getLocalChildren() {
- return Collections.singletonList(this.dedupTraversal);
- }
-
- @Override
- public void addLocalChild(final Traversal.Admin dedupTraversal) {
- this.dedupTraversal = this.integrateChild(dedupTraversal, TYPICAL_LOCAL_OPERATIONS);
- }
-
- @Override
- public Reducer<Set<Object>, S> getReducer() {
- return new Reducer<>(HashSet::new, (set, start) -> {
- set.add(TraversalUtil.apply(start, this.dedupTraversal));
- return set;
- }, true);
- }
-
- @Override
- public DedupStep<S> clone() throws CloneNotSupportedException {
- final DedupStep<S> clone = (DedupStep<S>) super.clone();
- clone.duplicateSet = new HashSet<>();
- clone.dedupTraversal = clone.integrateChild(this.dedupTraversal.clone(), TYPICAL_LOCAL_OPERATIONS);
- return clone;
- }
-
- @Override
- public void reset() {
- super.reset();
- this.duplicateSet.clear();
- }
-
- @Override
- public String toString() {
- return TraversalHelper.makeStepString(this, this.dedupTraversal);
- }
-
- @Override
- public Set<TraverserRequirement> getRequirements() {
- return this.getSelfAndChildRequirements(TraverserRequirement.SIDE_EFFECTS);
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/874f474c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/SampleGlobalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/SampleGlobalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/SampleGlobalStep.java
new file mode 100644
index 0000000..a56a457
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/SampleGlobalStep.java
@@ -0,0 +1,118 @@
+/*
+ * 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.
+ */
+package org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter;
+
+import org.apache.tinkerpop.gremlin.process.Traversal;
+import org.apache.tinkerpop.gremlin.process.Traverser;
+import org.apache.tinkerpop.gremlin.process.graph.traversal.step.util.CollectingBarrierStep;
+import org.apache.tinkerpop.gremlin.process.traversal.lambda.ConstantTraversal;
+import org.apache.tinkerpop.gremlin.process.traversal.step.Reversible;
+import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
+import org.apache.tinkerpop.gremlin.process.traverser.TraverserRequirement;
+import org.apache.tinkerpop.gremlin.process.util.TraverserSet;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Random;
+import java.util.Set;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public final class SampleGlobalStep<S> extends CollectingBarrierStep<S> implements Reversible, TraversalParent {
+
+ private Traversal.Admin<S, Number> probabilityTraversal = new ConstantTraversal<>(1.0d);
+ private final int amountToSample;
+ private static final Random RANDOM = new Random();
+
+ public SampleGlobalStep(final Traversal.Admin traversal, final int amountToSample) {
+ super(traversal);
+ this.amountToSample = amountToSample;
+ }
+
+ @Override
+ public List<Traversal.Admin<S, Number>> getLocalChildren() {
+ return Collections.singletonList(this.probabilityTraversal);
+ }
+
+ @Override
+ public void addLocalChild(final Traversal.Admin<?, ?> probabilityTraversal) {
+ this.probabilityTraversal = this.integrateChild(probabilityTraversal, TYPICAL_LOCAL_OPERATIONS);
+ }
+
+ @Override
+ public String toString() {
+ return TraversalHelper.makeStepString(this, this.amountToSample, this.probabilityTraversal);
+ }
+
+ @Override
+ public void barrierConsumer(final TraverserSet<S> traverserSet) {
+ // return the entire traverser set if the set is smaller than the amount to sample
+ if (traverserSet.bulkSize() <= this.amountToSample)
+ return;
+ //////////////// else sample the set
+ double totalWeight = 0.0d;
+ for (final Traverser<S> s : traverserSet) {
+ totalWeight = totalWeight + TraversalUtil.apply(s.asAdmin(), this.probabilityTraversal).doubleValue() * s.bulk();
+ }
+ ///////
+ final TraverserSet<S> sampledSet = new TraverserSet<>();
+ int runningAmountToSample = 0;
+ while (runningAmountToSample < this.amountToSample) {
+ boolean reSample = false;
+ double runningWeight = 0.0d;
+ for (final Traverser.Admin<S> s : traverserSet) {
+ long sampleBulk = sampledSet.contains(s) ? sampledSet.get(s).bulk() : 0;
+ if (sampleBulk < s.bulk()) {
+ final double currentWeight = TraversalUtil.apply(s, this.probabilityTraversal).doubleValue();
+ for (int i = 0; i < (s.bulk() - sampleBulk); i++) {
+ runningWeight = runningWeight + currentWeight;
+ if (RANDOM.nextDouble() <= (runningWeight / totalWeight)) {
+ final Traverser.Admin<S> split = s.asAdmin().split();
+ split.asAdmin().setBulk(1l);
+ sampledSet.add(split);
+ runningAmountToSample++;
+ totalWeight = totalWeight - currentWeight;
+ reSample = true;
+ break;
+ }
+ }
+ if (reSample || (runningAmountToSample >= this.amountToSample))
+ break;
+ }
+ }
+ }
+ traverserSet.clear();
+ traverserSet.addAll(sampledSet);
+ }
+
+ @Override
+ public Set<TraverserRequirement> getRequirements() {
+ return this.getSelfAndChildRequirements(TraverserRequirement.BULK);
+ }
+
+ @Override
+ public SampleGlobalStep<S> clone() throws CloneNotSupportedException {
+ final SampleGlobalStep<S> clone = (SampleGlobalStep<S>) super.clone();
+ clone.probabilityTraversal = clone.integrateChild(this.probabilityTraversal.clone(), TYPICAL_LOCAL_OPERATIONS);
+ return clone;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/874f474c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/SampleStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/SampleStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/SampleStep.java
deleted file mode 100644
index 97d1d22..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/SampleStep.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * 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.
- */
-package org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter;
-
-import org.apache.tinkerpop.gremlin.process.Traversal;
-import org.apache.tinkerpop.gremlin.process.Traverser;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.util.CollectingBarrierStep;
-import org.apache.tinkerpop.gremlin.process.traversal.lambda.ConstantTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.step.Reversible;
-import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
-import org.apache.tinkerpop.gremlin.process.traverser.TraverserRequirement;
-import org.apache.tinkerpop.gremlin.process.util.TraverserSet;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.Random;
-import java.util.Set;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public final class SampleStep<S> extends CollectingBarrierStep<S> implements Reversible, TraversalParent {
-
- private Traversal.Admin<S, Number> probabilityTraversal = new ConstantTraversal<>(1.0d);
- private final int amountToSample;
- private static final Random RANDOM = new Random();
-
- public SampleStep(final Traversal.Admin traversal, final int amountToSample) {
- super(traversal);
- this.amountToSample = amountToSample;
- }
-
- @Override
- public List<Traversal.Admin<S, Number>> getLocalChildren() {
- return Collections.singletonList(this.probabilityTraversal);
- }
-
- @Override
- public void addLocalChild(final Traversal.Admin<?, ?> probabilityTraversal) {
- this.probabilityTraversal = this.integrateChild(probabilityTraversal, TYPICAL_LOCAL_OPERATIONS);
- }
-
- @Override
- public String toString() {
- return TraversalHelper.makeStepString(this, this.amountToSample, this.probabilityTraversal);
- }
-
- @Override
- public void barrierConsumer(final TraverserSet<S> traverserSet) {
- // return the entire traverser set if the set is smaller than the amount to sample
- if (traverserSet.bulkSize() <= this.amountToSample)
- return;
- //////////////// else sample the set
- double totalWeight = 0.0d;
- for (final Traverser<S> s : traverserSet) {
- totalWeight = totalWeight + TraversalUtil.apply(s.asAdmin(), this.probabilityTraversal).doubleValue() * s.bulk();
- }
- ///////
- final TraverserSet<S> sampledSet = new TraverserSet<>();
- int runningAmountToSample = 0;
- while (runningAmountToSample < this.amountToSample) {
- boolean reSample = false;
- double runningWeight = 0.0d;
- for (final Traverser.Admin<S> s : traverserSet) {
- long sampleBulk = sampledSet.contains(s) ? sampledSet.get(s).bulk() : 0;
- if (sampleBulk < s.bulk()) {
- final double currentWeight = TraversalUtil.apply(s, this.probabilityTraversal).doubleValue();
- for (int i = 0; i < (s.bulk() - sampleBulk); i++) {
- runningWeight = runningWeight + currentWeight;
- if (RANDOM.nextDouble() <= (runningWeight / totalWeight)) {
- final Traverser.Admin<S> split = s.asAdmin().split();
- split.asAdmin().setBulk(1l);
- sampledSet.add(split);
- runningAmountToSample++;
- totalWeight = totalWeight - currentWeight;
- reSample = true;
- break;
- }
- }
- if (reSample || (runningAmountToSample >= this.amountToSample))
- break;
- }
- }
- }
- traverserSet.clear();
- traverserSet.addAll(sampledSet);
- }
-
- @Override
- public Set<TraverserRequirement> getRequirements() {
- return this.getSelfAndChildRequirements(TraverserRequirement.BULK);
- }
-
- @Override
- public SampleStep<S> clone() throws CloneNotSupportedException {
- final SampleStep<S> clone = (SampleStep<S>) super.clone();
- clone.probabilityTraversal = clone.integrateChild(this.probabilityTraversal.clone(), TYPICAL_LOCAL_OPERATIONS);
- return clone;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/874f474c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/strategy/DedupOptimizerStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/strategy/DedupOptimizerStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/strategy/DedupOptimizerStrategy.java
index 903f4cd..22935da 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/strategy/DedupOptimizerStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/strategy/DedupOptimizerStrategy.java
@@ -20,8 +20,7 @@ package org.apache.tinkerpop.gremlin.process.graph.traversal.strategy;
import org.apache.tinkerpop.gremlin.process.Step;
import org.apache.tinkerpop.gremlin.process.Traversal;
-import org.apache.tinkerpop.gremlin.process.TraversalEngine;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.DedupStep;
+import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.DedupGlobalStep;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.OrderGlobalStep;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.sideEffect.IdentityStep;
import org.apache.tinkerpop.gremlin.process.traversal.lambda.IdentityTraversal;
@@ -44,7 +43,7 @@ public final class DedupOptimizerStrategy extends AbstractTraversalStrategy {
@Override
public void apply(final Traversal.Admin<?, ?> traversal) {
- if (!TraversalHelper.hasStepOfClass(DedupStep.class, traversal))
+ if (!TraversalHelper.hasStepOfClass(DedupGlobalStep.class, traversal))
return;
boolean done = false;
@@ -52,7 +51,7 @@ public final class DedupOptimizerStrategy extends AbstractTraversalStrategy {
done = true;
for (int i = 0; i < traversal.getSteps().size(); i++) {
final Step step1 = traversal.getSteps().get(i);
- if (step1 instanceof DedupStep && !(((DedupStep) step1).getLocalChildren().get(0) instanceof IdentityTraversal)) {
+ if (step1 instanceof DedupGlobalStep && !(((DedupGlobalStep) step1).getLocalChildren().get(0) instanceof IdentityTraversal)) {
for (int j = i; j >= 0; j--) {
final Step step2 = traversal.getSteps().get(j);
if (BIJECTIVE_PIPES.stream().filter(c -> c.isAssignableFrom(step2.getClass())).findAny().isPresent()) {