You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by er...@apache.org on 2016/11/15 16:29:14 UTC

[1/7] commons-rng git commit: Unused import statements.

Repository: commons-rng
Updated Branches:
  refs/heads/RNG-30__sampling 74be2678f -> b6cce0d92


Unused import statements.


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

Branch: refs/heads/RNG-30__sampling
Commit: ff7ee3d02f45cc600fe2b480213d8be026381926
Parents: 74be267
Author: Gilles <er...@apache.org>
Authored: Mon Nov 14 00:50:48 2016 +0100
Committer: Gilles <er...@apache.org>
Committed: Mon Nov 14 00:50:48 2016 +0100

----------------------------------------------------------------------
 .../distribution/ContinuousSamplerParametricTest.java | 14 +-------------
 .../sampling/distribution/ContinuousSamplersList.java |  2 +-
 .../distribution/DiscreteSamplerParametricTest.java   | 14 +-------------
 3 files changed, 3 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rng/blob/ff7ee3d0/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousSamplerParametricTest.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousSamplerParametricTest.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousSamplerParametricTest.java
index e964769..b371cdf 100644
--- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousSamplerParametricTest.java
+++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousSamplerParametricTest.java
@@ -19,29 +19,17 @@ package org.apache.commons.rng.sampling.distribution;
 import java.util.Arrays;
 import java.util.List;
 import java.util.ArrayList;
-import java.util.concurrent.Callable;
-import java.io.IOException;
-import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.ByteArrayInputStream;
 
 import org.junit.Assert;
 import org.junit.Test;
-import org.junit.Assume;
-import org.junit.Ignore;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameters;
 
-import org.apache.commons.rng.UniformRandomProvider;
-import org.apache.commons.rng.RandomProviderState;
-import org.apache.commons.rng.RestorableUniformRandomProvider;
-import org.apache.commons.rng.core.RandomProviderDefaultState;
 import org.apache.commons.rng.sampling.ContinuousSampler;
 
 /**
- * Tests for random deviates generators using the "inverse method".
+ * Tests for random deviates generators.
  */
 @RunWith(value=Parameterized.class)
 public class ContinuousSamplerParametricTest {

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/ff7ee3d0/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousSamplersList.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousSamplersList.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousSamplersList.java
index 7cfe38a..5cb322c 100644
--- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousSamplersList.java
+++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousSamplersList.java
@@ -164,7 +164,7 @@ public class ContinuousSamplersList {
             add(LIST, new org.apache.commons.math3.distribution.UniformRealDistribution(loUniform, hiUniform),
                 new ContinuousUniformSampler(RandomSource.create(RandomSource.MT_64), loUniform, hiUniform));
 
-            // Weibull
+            // Weibull.
             final double alphaWeibull = 678.9;
             final double betaWeibull = 98.76;
             add(LIST, new org.apache.commons.math3.distribution.WeibullDistribution(alphaWeibull, betaWeibull),

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/ff7ee3d0/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplerParametricTest.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplerParametricTest.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplerParametricTest.java
index 21f35ba..93dd71b 100644
--- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplerParametricTest.java
+++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplerParametricTest.java
@@ -19,31 +19,19 @@ package org.apache.commons.rng.sampling.distribution;
 import java.util.Arrays;
 import java.util.List;
 import java.util.ArrayList;
-import java.util.concurrent.Callable;
-import java.io.IOException;
-import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.ByteArrayInputStream;
 
 import org.junit.Assert;
 import org.junit.Test;
-import org.junit.Assume;
-import org.junit.Ignore;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameters;
 
 import org.apache.commons.math3.distribution.ChiSquaredDistribution;
 
-import org.apache.commons.rng.UniformRandomProvider;
-import org.apache.commons.rng.RandomProviderState;
-import org.apache.commons.rng.RestorableUniformRandomProvider;
-import org.apache.commons.rng.core.RandomProviderDefaultState;
 import org.apache.commons.rng.sampling.DiscreteSampler;
 
 /**
- * Tests for samplers.
+ * Tests for random deviates generators.
  */
 @RunWith(value=Parameterized.class)
 public class DiscreteSamplerParametricTest {


[4/7] commons-rng git commit: Javadoc.

Posted by er...@apache.org.
Javadoc.


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

Branch: refs/heads/RNG-30__sampling
Commit: d2e6b6ec5c928d02f5cbdbd9972097f56195559c
Parents: ecb2729
Author: Gilles <er...@apache.org>
Authored: Tue Nov 15 16:53:20 2016 +0100
Committer: Gilles <er...@apache.org>
Committed: Tue Nov 15 16:53:20 2016 +0100

----------------------------------------------------------------------
 .../rng/sampling/distribution/PoissonSampler.java    | 15 +++++++++++++++
 .../rng/sampling/distribution/SamplerBase.java       |  1 +
 2 files changed, 16 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rng/blob/d2e6b6ec/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/PoissonSampler.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/PoissonSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/PoissonSampler.java
index bd2161b..bf998a0 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/PoissonSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/PoissonSampler.java
@@ -20,6 +20,21 @@ import org.apache.commons.rng.UniformRandomProvider;
 
 /**
  * Sampler for the <a href="http://mathworld.wolfram.com/PoissonDistribution.html">Poisson distribution</a>.
+ *
+ * <ul>
+ *  <li>
+ *   For small means, a Poisson process is simulated using uniform deviates, as
+ *   described <a href="http://mathaa.epfl.ch/cours/PMMI2001/interactive/rng7.htm">here</a>.
+ *   The Poisson process (and hence, the returned value) is bounded by 1000 * mean.
+ *  </li>
+ *  <li>
+ *   For large means, we use the rejection algorithm described in
+ *   <blockquote>
+ *    Devroye, Luc. (1981).<i>The Computer Generation of Poisson Random Variables</i><br>
+ *    <strong>Computing</strong> vol. 26 pp. 197-207.
+ *   </blockquote>
+ *  </li>
+ * </ul>
  */
 public class PoissonSampler
     extends SamplerBase

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/d2e6b6ec/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/SamplerBase.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/SamplerBase.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/SamplerBase.java
index 6ff9a67..3737a48 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/SamplerBase.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/SamplerBase.java
@@ -48,6 +48,7 @@ public class SamplerBase {
     }
 
     /**
+     * @param max Upper bound (excluded).
      * @return a random {@code int} value in the interval {@code [0, max)}.
      */
     protected int nextInt(int max) {


[5/7] commons-rng git commit: Method renamed.

Posted by er...@apache.org.
Method renamed.


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

Branch: refs/heads/RNG-30__sampling
Commit: d3a7be3ae38235afd34fcc9cdb5e06fb933be82a
Parents: d2e6b6e
Author: Gilles <er...@apache.org>
Authored: Tue Nov 15 17:00:07 2016 +0100
Committer: Gilles <er...@apache.org>
Committed: Tue Nov 15 17:00:07 2016 +0100

----------------------------------------------------------------------
 .../distribution/AhrensDieterExponentialSampler.java         | 6 +++---
 .../distribution/AhrensDieterMarsagliaTsangGammaSampler.java | 8 ++++----
 .../rng/sampling/distribution/BoxMullerGaussianSampler.java  | 4 ++--
 .../commons/rng/sampling/distribution/ChengBetaSampler.java  | 8 ++++----
 .../rng/sampling/distribution/ContinuousUniformSampler.java  | 2 +-
 .../distribution/InverseTransformContinuousSampler.java      | 2 +-
 .../distribution/InverseTransformDiscreteSampler.java        | 2 +-
 .../sampling/distribution/InverseTransformParetoSampler.java | 2 +-
 .../commons/rng/sampling/distribution/PoissonSampler.java    | 4 ++--
 .../sampling/distribution/RejectionInversionZipfSampler.java | 2 +-
 .../commons/rng/sampling/distribution/SamplerBase.java       | 2 +-
 11 files changed, 21 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rng/blob/d3a7be3a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/AhrensDieterExponentialSampler.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/AhrensDieterExponentialSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/AhrensDieterExponentialSampler.java
index e43dee2..41682ea 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/AhrensDieterExponentialSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/AhrensDieterExponentialSampler.java
@@ -74,7 +74,7 @@ public class AhrensDieterExponentialSampler
     public double sample() {
         // Step 1:
         double a = 0;
-        double u = nextUniform();
+        double u = nextDouble();
 
         // Step 2 and 3:
         while (u < 0.5) {
@@ -92,13 +92,13 @@ public class AhrensDieterExponentialSampler
 
         // Step 6:
         int i = 0; // Should be 1, be we iterate before it in while using 0.
-        double u2 = nextUniform();
+        double u2 = nextDouble();
         double umin = u2;
 
         // Step 7 and 8:
         do {
             ++i;
-            u2 = nextUniform();
+            u2 = nextDouble();
 
             if (u2 < umin) {
                 umin = u2;

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/d3a7be3a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/AhrensDieterMarsagliaTsangGammaSampler.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/AhrensDieterMarsagliaTsangGammaSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/AhrensDieterMarsagliaTsangGammaSampler.java
index 526b94a..90fefc7 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/AhrensDieterMarsagliaTsangGammaSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/AhrensDieterMarsagliaTsangGammaSampler.java
@@ -73,7 +73,7 @@ public class AhrensDieterMarsagliaTsangGammaSampler
 
             while (true) {
                 // Step 1:
-                final double u = nextUniform();
+                final double u = nextDouble();
                 final double bGS = 1 + theta / Math.E;
                 final double p = bGS * u;
 
@@ -81,7 +81,7 @@ public class AhrensDieterMarsagliaTsangGammaSampler
                     // Step 2:
 
                     final double x = Math.pow(p, 1 / theta);
-                    final double u2 = nextUniform();
+                    final double u2 = nextDouble();
 
                     if (u2 > Math.exp(-x)) {
                         // Reject.
@@ -93,7 +93,7 @@ public class AhrensDieterMarsagliaTsangGammaSampler
                     // Step 3:
 
                     final double x = -1 * Math.log((bGS - p) / theta);
-                    final double u2 = nextUniform();
+                    final double u2 = nextDouble();
 
                     if (u2 > Math.pow(x, theta - 1)) {
                         // Reject.
@@ -119,7 +119,7 @@ public class AhrensDieterMarsagliaTsangGammaSampler
             }
 
             final double x2 = x * x;
-            final double u = nextUniform();
+            final double u = nextDouble();
 
             // Squeeze.
             if (u < 1 - 0.0331 * x2 * x2) {

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/d3a7be3a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/BoxMullerGaussianSampler.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/BoxMullerGaussianSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/BoxMullerGaussianSampler.java
index 65cbd5a..527db1e 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/BoxMullerGaussianSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/BoxMullerGaussianSampler.java
@@ -52,8 +52,8 @@ public class BoxMullerGaussianSampler
         if (Double.isNaN(nextGaussian)) {
             // Generate a pair of Gaussian numbers.
 
-            final double x = nextUniform();
-            final double y = nextUniform();
+            final double x = nextDouble();
+            final double y = nextDouble();
             final double alpha = 2 * Math.PI * x;
             final double r = Math.sqrt(-2 * Math.log(y));
 

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/d3a7be3a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/ChengBetaSampler.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/ChengBetaSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/ChengBetaSampler.java
index 827752c..5335947 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/ChengBetaSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/ChengBetaSampler.java
@@ -91,8 +91,8 @@ public class ChengBetaSampler
         double w;
         double t;
         do {
-            final double u1 = nextUniform();
-            final double u2 = nextUniform();
+            final double u1 = nextDouble();
+            final double u2 = nextDouble();
             final double v = beta * (Math.log(u1) - Math.log1p(-u1));
             w = a * Math.exp(v);
             final double z = u1 * u1 * u2;
@@ -131,8 +131,8 @@ public class ChengBetaSampler
 
         double w;
         while (true) {
-            final double u1 = nextUniform();
-            final double u2 = nextUniform();
+            final double u1 = nextDouble();
+            final double u2 = nextDouble();
             final double y = u1 * u2;
             final double z = u1 * y;
             if (u1 < 0.5) {

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/d3a7be3a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/ContinuousUniformSampler.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/ContinuousUniformSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/ContinuousUniformSampler.java
index a2287f7..86d0ea4 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/ContinuousUniformSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/ContinuousUniformSampler.java
@@ -45,7 +45,7 @@ public class ContinuousUniformSampler
     /** {@inheritDoc} */
     @Override
     public double sample() {
-        final double u = nextUniform();
+        final double u = nextDouble();
         return u * hi + (1 - u) * lo;
     }
 

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/d3a7be3a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformContinuousSampler.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformContinuousSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformContinuousSampler.java
index 1d057bb..d79665b 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformContinuousSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformContinuousSampler.java
@@ -73,7 +73,7 @@ public class InverseTransformContinuousSampler
     /** {@inheritDoc} */
     @Override
     public double sample() {
-        return function.inverseCumulativeProbability(nextUniform());
+        return function.inverseCumulativeProbability(nextDouble());
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/d3a7be3a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformDiscreteSampler.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformDiscreteSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformDiscreteSampler.java
index 2dc0a20..ed0cfd9 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformDiscreteSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformDiscreteSampler.java
@@ -73,7 +73,7 @@ public class InverseTransformDiscreteSampler
     /** {@inheritDoc} */
     @Override
     public int sample() {
-        return function.inverseCumulativeProbability(nextUniform());
+        return function.inverseCumulativeProbability(nextDouble());
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/d3a7be3a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformParetoSampler.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformParetoSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformParetoSampler.java
index 4c4ae39..27c543f 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformParetoSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformParetoSampler.java
@@ -45,7 +45,7 @@ public class InverseTransformParetoSampler
     /** {@inheritDoc} */
     @Override
     public double sample() {
-        return scale / Math.pow(nextUniform(), 1 / shape);
+        return scale / Math.pow(nextDouble(), 1 / shape);
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/d3a7be3a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/PoissonSampler.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/PoissonSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/PoissonSampler.java
index bf998a0..605678e 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/PoissonSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/PoissonSampler.java
@@ -86,7 +86,7 @@ public class PoissonSampler
             double rnd = 1;
 
             while (n < 1000 * meanPoisson) {
-                rnd = nextUniform();
+                rnd = nextDouble();
                 r *= rnd;
                 if (r >= p) {
                     n++;
@@ -119,7 +119,7 @@ public class PoissonSampler
             double qr = 0;
             double qa = 0;
             while (true) {
-                final double u = nextUniform();
+                final double u = nextDouble();
                 if (u <= p1) {
                     final double n = gaussian.sample();
                     x = n * Math.sqrt(lambda + halfDelta) - 0.5d;

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/d3a7be3a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/RejectionInversionZipfSampler.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/RejectionInversionZipfSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/RejectionInversionZipfSampler.java
index c939028..02b1ca4 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/RejectionInversionZipfSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/RejectionInversionZipfSampler.java
@@ -97,7 +97,7 @@ public class RejectionInversionZipfSampler
     @Override
     public int sample() {
         while(true) {
-            final double u = hIntegralNumberOfElements + nextUniform() * (hIntegralX1 - hIntegralNumberOfElements);
+            final double u = hIntegralNumberOfElements + nextDouble() * (hIntegralX1 - hIntegralNumberOfElements);
             // u is uniformly distributed in (hIntegralX1, hIntegralNumberOfElements]
 
             double x = hIntegralInverse(u);

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/d3a7be3a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/SamplerBase.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/SamplerBase.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/SamplerBase.java
index 3737a48..d345146 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/SamplerBase.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/SamplerBase.java
@@ -36,7 +36,7 @@ public class SamplerBase {
      * @return a random value from a uniform distribution in the
      * interval {@code [0, 1)}.
      */
-    protected double nextUniform() {
+    protected double nextDouble() {
         return rng.nextDouble();
     }
 


[6/7] commons-rng git commit: RNG-30: Generate random permutations.

Posted by er...@apache.org.
RNG-30: Generate random permutations.

Code copied and adapted from the development version of "Commons Math"
(classes "o.a.c.m.util.MathArrays" and "o.a.c.m.random.RandomUtils").


Project: http://git-wip-us.apache.org/repos/asf/commons-rng/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rng/commit/0fce78bc
Tree: http://git-wip-us.apache.org/repos/asf/commons-rng/tree/0fce78bc
Diff: http://git-wip-us.apache.org/repos/asf/commons-rng/diff/0fce78bc

Branch: refs/heads/RNG-30__sampling
Commit: 0fce78bc73fe626ccb3ed2e74fac0c57026181e4
Parents: d3a7be3
Author: Gilles <er...@apache.org>
Authored: Tue Nov 15 17:22:40 2016 +0100
Committer: Gilles <er...@apache.org>
Committed: Tue Nov 15 17:22:40 2016 +0100

----------------------------------------------------------------------
 .../rng/sampling/PermutationSampler.java        | 152 +++++++++++++++
 .../rng/sampling/PermutationSamplerTest.java    | 194 +++++++++++++++++++
 2 files changed, 346 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rng/blob/0fce78bc/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/PermutationSampler.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/PermutationSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/PermutationSampler.java
new file mode 100644
index 0000000..d53cfca
--- /dev/null
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/PermutationSampler.java
@@ -0,0 +1,152 @@
+/*
+ * 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.commons.rng.sampling;
+
+import java.util.Arrays;
+
+import org.apache.commons.rng.UniformRandomProvider;
+
+/**
+ * Class for representing permutations of a sequence of integers.
+ *
+ * This class also contains utilities for shuffling an {@code int[]} array.
+ */
+public class PermutationSampler {
+    /** Domain of the permutation. */
+    private final int[] domain;
+    /** Size of the permutation. */
+    private final int size;
+    /** RNG. */
+    private final UniformRandomProvider rng;
+
+    /**
+     * Creates a generator of permutations.
+     *
+     * The {@link #sample()} method will generate an integer array of
+     * length {@code k} whose entries are selected randomly, without
+     * repetition, from the integers 0, 1, ..., {@code n}-1 (inclusive).
+     * The returned array represents a permutation of {@code n} taken
+     * {@code k}.
+     *
+     * @param rng Generator of uniformly distributed random numbers.
+     * @param n Domain of the permutation.
+     * @param k Size of the permutation.
+     * @throws IllegalArgumentException if {@code n < 0} or {@code k <= 0}
+     * or {@code k > n}.
+     */
+    public PermutationSampler(UniformRandomProvider rng,
+                              int n,
+                              int k) {
+        if (n < 0) {
+            throw new IllegalArgumentException(n + " < " + 0);
+        }
+        if (k <= 0) {
+            throw new IllegalArgumentException(k + " <= " + 0);
+        }
+        if (k > n) {
+            throw new IllegalArgumentException(k + " > " + n);
+        }
+
+        domain = natural(n);
+        size = k;
+        this.rng = rng;
+    }
+
+    /**
+     * @return a random permutation.
+     *
+     * @see #Permutation(UniformRandomProvider,int,int)
+     */
+    public int[] sample() {
+        shuffle(domain, rng);
+        return Arrays.copyOf(domain, size);
+    }
+
+    /**
+     * Shuffles the entries of the given array.
+     *
+     * @see #shuffle(int[],int,boolean,UniformRandomProvider)
+     *
+     * @param list Array whose entries will be shuffled (in-place).
+     * @param rng Random number generator.
+     */
+    public static void shuffle(int[] list,
+                               UniformRandomProvider rng) {
+        shuffle(list, 0, false, rng);
+    }
+
+    /**
+     * Shuffles the entries of the given array, using the
+     * <a href="http://en.wikipedia.org/wiki/Fisher\u2013Yates_shuffle#The_modern_algorithm">
+     * Fisher-Yates</a> algorithm.
+     * The {@code start} and {@code pos} parameters select which part
+     * of the array is randomized and which is left untouched.
+     *
+     * @param list Array whose entries will be shuffled (in-place).
+     * @param start Index at which shuffling begins.
+     * @param towardHead Shuffling is performed for index positions between
+     * {@code start} and either the end (if {@code false}) or the beginning
+     * (if {@code true}) of the array.
+     * @param rng Random number generator.
+     */
+    public static void shuffle(int[] list,
+                               int start,
+                               boolean towardHead,
+                               UniformRandomProvider rng) {
+        if (towardHead) {
+            for (int i = 0; i <= start; i++) {
+                final int target;
+                if (i == start) {
+                    target = start;
+                } else {
+                    target = rng.nextInt(start - i + 1) + i;
+                }
+                final int temp = list[target];
+                list[target] = list[i];
+                list[i] = temp;
+            }
+        } else {
+            for (int i = list.length - 1; i >= start; i--) {
+                final int target;
+                if (i == start) {
+                    target = start;
+                } else {
+                    target = rng.nextInt(i - start + 1) + start;
+                }
+                final int temp = list[target];
+                list[target] = list[i];
+                list[i] = temp;
+            }
+        }
+    }
+
+    /**
+     * Creates an array representing the natural number {@code n}.
+     *
+     * @param n Natural number.
+     * @return an array whose entries are the numbers 0, 1, ..., {@code n}-1.
+     * If {@code n == 0}, the returned array is empty.
+     */
+    public static int[] natural(int n) {
+        final int[] a = new int[n];
+        for (int i = 0; i < n; i++) {
+            a[i] = i;
+        }
+        return a;
+    }
+}

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/0fce78bc/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/PermutationSamplerTest.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/PermutationSamplerTest.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/PermutationSamplerTest.java
new file mode 100644
index 0000000..bd32c05
--- /dev/null
+++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/PermutationSamplerTest.java
@@ -0,0 +1,194 @@
+/*
+ * 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.commons.rng.sampling;
+
+import java.util.Set;
+import java.util.HashSet;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import org.apache.commons.math3.stat.inference.ChiSquareTest;
+import org.apache.commons.math3.util.MathArrays;
+
+import org.apache.commons.rng.UniformRandomProvider;
+import org.apache.commons.rng.simple.RandomSource;
+
+/**
+ * Tests for {@link PermutationSampler}.
+ */
+public class PermutationSamplerTest {
+    private final UniformRandomProvider rng = RandomSource.create(RandomSource.ISAAC, 1232343456L);
+    private final ChiSquareTest chiSquareTest = new ChiSquareTest();
+
+    @Test
+    public void testSample() {
+        final int[][] p = { { 0, 1, 2 }, { 0, 2, 1 },
+                            { 1, 0, 2 }, { 1, 2, 0 },
+                            { 2, 0, 1 }, { 2, 1, 0 } };
+        final int len = p.length; 
+        final long[] observed = new long[len];
+        final int numSamples = 6000;
+        final double numExpected = numSamples / (double) len;
+        final double[] expected = new double[len];
+        Arrays.fill(expected, numExpected);
+
+        final PermutationSampler sampler = new PermutationSampler(rng, 3, 3);
+        for (int i = 0; i < numSamples; i++) {
+            observed[findPerm(p, sampler.sample())]++;
+        }
+
+        // Pass if we cannot reject null hypothesis that distributions are the same
+        Assert.assertFalse(chiSquareTest.chiSquareTest(expected, observed, 0.001));
+    }
+    
+    @Test
+    public void testSampleBoundaryCase() {
+        // Check size = 1 boundary case.
+        final PermutationSampler sampler = new PermutationSampler(rng, 1, 1);
+        final int[] perm = sampler.sample();
+        Assert.assertEquals(1, perm.length);
+        Assert.assertEquals(0, perm[0]);
+    }
+
+    @Test(expected=IllegalArgumentException.class)
+    public void testSamplePrecondition1() {
+        // Must fail for k > n.
+        new PermutationSampler(rng, 2, 3);
+    }
+
+    @Test(expected=IllegalArgumentException.class)
+    public void testSamplePrecondition2() {
+        // Must fail for n = 0.
+        new PermutationSampler(rng, 0, 0);
+    }
+
+    @Test(expected=IllegalArgumentException.class)
+    public void testSamplePrecondition3() {
+        // Must fail for k < n < 0.
+        new PermutationSampler(rng, -1, 0);
+    }
+
+    @Test(expected=IllegalArgumentException.class)
+    public void testSamplePrecondition4() {
+        // Must fail for k < n < 0.
+        new PermutationSampler(rng, 1, -1);
+    }
+
+    @Test
+    public void testNatural() {
+        final int n = 4;
+        final int[] expected = {0, 1, 2, 3};
+
+        final int[] natural = PermutationSampler.natural(n);
+        for (int i = 0; i < n; i++) {
+            Assert.assertEquals(expected[i], natural[i]);
+        }
+    }
+
+    @Test
+    public void testNaturalZero() {
+        final int[] natural = PermutationSampler.natural(0);
+        Assert.assertEquals(0, natural.length);
+    }
+
+    @Test
+    public void testShuffleNoDuplicates() {
+        final int n = 100;
+        final int[] orig = PermutationSampler.natural(n);
+        PermutationSampler.shuffle(orig, rng);
+
+        // Test that all (unique) entries exist in the shuffled array.
+        final int[] count = new int[n];
+        for (int i = 0; i < n; i++) {
+            count[orig[i]] += 1;
+        }
+
+        for (int i = 0; i < n; i++) {
+            Assert.assertEquals(1, count[i]);
+        }
+    }
+
+    @Test
+    public void testShuffleTail() {
+        final int[] orig = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
+        final int[] list = orig.clone();
+        final int start = 4;
+        PermutationSampler.shuffle(list, start, false, rng);
+
+        // Ensure that all entries below index "start" did not move.
+        for (int i = 0; i < start; i++) {
+            Assert.assertEquals(orig[i], list[i]);
+        }
+
+        // Ensure that at least one entry has moved.
+        boolean ok = false;
+        for (int i = start; i < orig.length - 1; i++) {
+            if (orig[i] != list[i]) {
+                ok = true;
+                break;
+            }
+        }
+        Assert.assertTrue(ok);
+    }
+
+    @Test
+    public void testShuffleHead() {
+        final int[] orig = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
+        final int[] list = orig.clone();
+        final int start = 4;
+        PermutationSampler.shuffle(list, start, true, rng);
+
+        // Ensure that all entries above index "start" did not move.
+        for (int i = start + 1; i < orig.length; i++) {
+            Assert.assertEquals(orig[i], list[i]);
+        }
+
+        // Ensure that at least one entry has moved.
+        boolean ok = false;
+        for (int i = 0; i <= start; i++) {
+            if (orig[i] != list[i]) {
+                ok = true;
+                break;
+            }
+        }
+        Assert.assertTrue(ok);
+    }
+
+    //// Support methods.
+
+    private int findPerm(int[][] p,
+                         int[] samp) {
+        for (int i = 0; i < p.length; i++) {
+            boolean good = true;
+            for (int j = 0; j < samp.length; j++) {
+                if (samp[j] != p[i][j]) {
+                    good = false;
+                }
+            }
+            if (good) {
+                return i;
+            }
+        }
+
+        Assert.fail("Permutation not found");
+        return -1;
+    }
+}


[7/7] commons-rng git commit: RNG-30: Sampling from generic collection.

Posted by er...@apache.org.
RNG-30: Sampling from generic collection.

Some of this code was copied and adapted from the development version
of "Commons Math" (class "o.a.c.m.random.RandomUtils").


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

Branch: refs/heads/RNG-30__sampling
Commit: b6cce0d92fd4dee4c17e62a390d48173015b9872
Parents: 0fce78b
Author: Gilles <er...@apache.org>
Authored: Tue Nov 15 17:25:00 2016 +0100
Committer: Gilles <er...@apache.org>
Committed: Tue Nov 15 17:25:00 2016 +0100

----------------------------------------------------------------------
 .../commons/rng/sampling/CollectionSampler.java | 134 ++++++++++++++
 .../rng/sampling/CollectionSamplerTest.java     | 173 +++++++++++++++++++
 2 files changed, 307 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rng/blob/b6cce0d9/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/CollectionSampler.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/CollectionSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/CollectionSampler.java
new file mode 100644
index 0000000..222c8a5
--- /dev/null
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/CollectionSampler.java
@@ -0,0 +1,134 @@
+/*
+ * 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.commons.rng.sampling;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.ArrayList;
+
+import org.apache.commons.rng.UniformRandomProvider;
+
+/**
+ * Sampling from a {@link Collection}.
+ *
+ * @param <T> Type of items in the collection.
+ *
+ * This class also contains utilities for shuffling a generic {@link List}.
+ *
+ * @since 1.0
+ */
+public class CollectionSampler<T> {
+    /** Collection to be sampled from. */
+    private final ArrayList<T> items;
+    /** Permutation. */
+    private final PermutationSampler permutation;
+    /** Size of returned list. */
+    private final int size;
+
+    /**
+     * Creates a sampler.
+     *
+     * The {@link #sample()} method will generate a collection of
+     * size {@code k} whose entries are selected randomly, without
+     * repetition, from the items in the given {@code collection}.
+     *
+     * @param rng Generator of uniformly distributed random numbers.
+     * @param collection Collection to be sampled.
+     * A (shallow) copy will be stored in the created instance.
+     * @param k Size of the permutation.
+     * @throws IllegalArgumentException if {@code k <= 0} or
+     * {@code k > collection.size()}.
+     */
+    public CollectionSampler(UniformRandomProvider rng,
+                             Collection<T> collection,
+                             int k) {
+        permutation = new PermutationSampler(rng, collection.size(), k);
+        items = new ArrayList<T>(collection);
+        size = k;
+    }
+
+    /**
+     * Creates a list of objects selected randomly, without repetition,
+     * from the collection provided at
+     * {@link #CollectionSampler(UniformRandomProvider,Collection,int)
+     * construction}.
+     *
+     * <p>
+     * Sampling is without replacement; but if the source collection
+     * contains identical objects, the sample may include repeats.
+     * </p>
+     * <p>
+     * There is no guarantee that the concrete type of the returned
+     * collection is the same as the source collection.
+     * </p>
+     *
+     * @return a random sample.
+     */
+    public Collection<T> sample() {
+        final ArrayList<T> result = new ArrayList<T>(size);
+        final int[] index = permutation.sample();
+
+        for (int i = 0; i < size; i++) {
+            result.add(items.get(index[i]));
+        }
+
+        return result;
+    }
+    /**
+     * Shuffles the entries of the given array.
+     *
+     * @see #shuffle(List,int,boolean,UniformRandomProvider)
+     *
+     * @param <S> Type of the list items.
+     * @param list List whose entries will be shuffled (in-place).
+     * @param rng Random number generator.
+     */
+    public static <S> void shuffle(List<S> list,
+                                   UniformRandomProvider rng) {
+        shuffle(list, 0, false, rng);
+    }
+
+    /**
+     * Shuffles the entries of the given array, using the
+     * <a href="http://en.wikipedia.org/wiki/Fisher\u2013Yates_shuffle#The_modern_algorithm">
+     * Fisher-Yates</a> algorithm.
+     * The {@code start} and {@code pos} parameters select which part
+     * of the array is randomized and which is left untouched.
+     *
+     * @param <S> Type of the list items.
+     * @param list List whose entries will be shuffled (in-place).
+     * @param start Index at which shuffling begins.
+     * @param towardHead Shuffling is performed for index positions between
+     * {@code start} and either the end (if {@code false}) or the beginning
+     * (if {@code true}) of the array.
+     * @param rng Random number generator.
+     */
+    public static <S> void shuffle(List<S> list,
+                                   int start,
+                                   boolean towardHead,
+                                   UniformRandomProvider rng) {
+        final int len = list.size();
+        final int[] indices = PermutationSampler.natural(len);
+        PermutationSampler.shuffle(indices, start, towardHead, rng);
+
+        final ArrayList<S> items = new ArrayList<S>(list);
+        for (int i = 0; i < len; i++) {
+            list.set(i, items.get(indices[i]));
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/b6cce0d9/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/CollectionSamplerTest.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/CollectionSamplerTest.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/CollectionSamplerTest.java
new file mode 100644
index 0000000..3bd897c
--- /dev/null
+++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/CollectionSamplerTest.java
@@ -0,0 +1,173 @@
+/*
+ * 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.commons.rng.sampling;
+
+import java.util.Set;
+import java.util.HashSet;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Arrays;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import org.apache.commons.math3.stat.inference.ChiSquareTest;
+
+import org.apache.commons.rng.UniformRandomProvider;
+import org.apache.commons.rng.simple.RandomSource;
+
+/**
+ * Tests for {@link CollectionSampler}.
+ */
+public class CollectionSamplerTest {
+    private final UniformRandomProvider rng = RandomSource.create(RandomSource.ISAAC, 6543432321L);
+    private final ChiSquareTest chiSquareTest = new ChiSquareTest();
+
+    @Test
+    public void testSample() {
+        final String[][] c = { { "0", "1" }, { "0", "2" }, { "0", "3" }, { "0", "4" },
+                               { "1", "2" }, { "1", "3" }, { "1", "4" },
+                               { "2", "3" }, { "2", "4" },
+                               { "3", "4" } };
+        final long[] observed = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+        final double[] expected = { 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 };
+
+        final HashSet<String> cPop = new HashSet<String>(); // {0, 1, 2, 3, 4}.
+        for (int i = 0; i < 5; i++) {
+            cPop.add(Integer.toString(i));
+        }
+
+        final List<Set<String>> sets = new ArrayList<Set<String>>(); // 2-sets from 5.
+        for (int i = 0; i < 10; i++) {
+            final HashSet<String> hs = new HashSet<String>();
+            hs.add(c[i][0]);
+            hs.add(c[i][1]);
+            sets.add(hs);
+        }
+
+        final CollectionSampler<String> sampler = new CollectionSampler<String>(rng, cPop, 2);
+        for (int i = 0; i < 1000; i++) {
+            observed[findSample(sets, sampler.sample())]++;
+        }
+
+        // Pass if we cannot reject null hypothesis that distributions are the same
+        Assert.assertFalse(chiSquareTest.chiSquareTest(expected, observed, 0.001));
+    }
+
+    @Test
+    public void testSampleWhole() {
+        // Sample of size = size of collection must return the same collection.
+        final HashSet<String> hs = new HashSet<String>();
+        hs.add("one");
+
+        final CollectionSampler<String> sampler = new CollectionSampler<String>(rng, hs, 1);
+        final Collection<String> one = sampler.sample();
+        Assert.assertEquals(1, one.size());
+        Assert.assertTrue(one.contains("one"));
+    }
+
+    @Test(expected=IllegalArgumentException.class)
+    public void testSamplePrecondition1() {
+        // Must fail for sample size > collection size.
+        final HashSet<String> hs = new HashSet<String>();
+        hs.add("one");
+        new CollectionSampler<String>(rng, hs, 2).sample();
+    }
+
+    @Test(expected=IllegalArgumentException.class)
+    public void testSamplePrecondition2() {
+        // Must fail for empty collection.
+        final HashSet<String> hs = new HashSet<String>();
+        new CollectionSampler<String>(rng, hs, 0).sample();
+    }
+
+    @Test
+    public void testShuffleTail() {
+        final List<Integer> orig = new ArrayList<Integer>();
+        for (int i = 0; i < 10; i++) {
+            orig.add((i + 1) * rng.nextInt());
+        }
+        final List<Integer> list = new ArrayList<Integer>(orig);
+
+        final int start = 4;
+        CollectionSampler.shuffle(list, start, false, rng);
+
+        // Ensure that all entries below index "start" did not move.
+        for (int i = 0; i < start; i++) {
+            Assert.assertEquals(orig.get(i), list.get(i));
+        }
+
+        // Ensure that at least one entry has moved.
+        boolean ok = false;
+        for (int i = start; i < orig.size() - 1; i++) {
+            if (!orig.get(i).equals(list.get(i))) {
+                ok = true;
+                break;
+            }
+        }
+        Assert.assertTrue(ok);
+    }
+
+    @Test
+    public void testShuffleHead() {
+        final List<Integer> orig = new ArrayList<Integer>();
+        for (int i = 0; i < 10; i++) {
+            orig.add((i + 1) * rng.nextInt());
+        }
+        final List<Integer> list = new ArrayList<Integer>(orig);
+
+        final int start = 4;
+        CollectionSampler.shuffle(list, start, true, rng);
+
+        // Ensure that all entries above index "start" did not move.
+        for (int i = start + 1; i < orig.size(); i++) {
+            Assert.assertEquals(orig.get(i), list.get(i));
+        }
+
+        // Ensure that at least one entry has moved.
+        boolean ok = false;
+        for (int i = 0; i <= start; i++) {
+            if (!orig.get(i).equals(list.get(i))) {
+                ok = true;
+                break;
+            }
+        }
+        Assert.assertTrue(ok);
+    }
+
+    //// Support methods.
+
+    private <T extends Set<String>> int findSample(List<T> u,
+                                                   Collection<String> sampList) {
+        final String[] samp = sampList.toArray(new String[sampList.size()]);
+        for (int i = 0; i < u.size(); i++) {
+            final T set = u.get(i);
+            final HashSet<String> sampSet = new HashSet<String>();
+            for (int j = 0; j < samp.length; j++) {
+                sampSet.add(samp[j]);
+            }
+            if (set.equals(sampSet)) {
+                return i;
+            }
+        }
+
+        Assert.fail("Sample not found: { " +
+                    samp[0] + ", " + samp[1] + " }");
+        return -1;
+    }
+}


[2/7] commons-rng git commit: Moved classes/interfaces from "o.a.c.rng.sampling" to "o.a.c.rng.sampling.distribution".

Posted by er...@apache.org.
Moved classes/interfaces from "o.a.c.rng.sampling" to "o.a.c.rng.sampling.distribution".


Project: http://git-wip-us.apache.org/repos/asf/commons-rng/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rng/commit/85b94d9f
Tree: http://git-wip-us.apache.org/repos/asf/commons-rng/tree/85b94d9f
Diff: http://git-wip-us.apache.org/repos/asf/commons-rng/diff/85b94d9f

Branch: refs/heads/RNG-30__sampling
Commit: 85b94d9f37e9ffaaa22599dae72bbf64e0c309f3
Parents: ff7ee3d
Author: Gilles <er...@apache.org>
Authored: Mon Nov 14 01:20:24 2016 +0100
Committer: Gilles <er...@apache.org>
Committed: Mon Nov 14 01:20:24 2016 +0100

----------------------------------------------------------------------
 .../commons/rng/sampling/ContinuousSampler.java | 29 ---------
 .../commons/rng/sampling/DiscreteSampler.java   | 29 ---------
 .../commons/rng/sampling/SamplerBase.java       | 62 --------------------
 .../AhrensDieterExponentialSampler.java         |  2 -
 .../AhrensDieterMarsagliaTsangGammaSampler.java |  2 -
 .../distribution/BoxMullerGaussianSampler.java  |  2 -
 .../distribution/BoxMullerLogNormalSampler.java |  2 -
 .../sampling/distribution/ChengBetaSampler.java |  2 -
 .../distribution/ContinuousSampler.java         | 29 +++++++++
 .../distribution/ContinuousUniformSampler.java  |  2 -
 .../sampling/distribution/DiscreteSampler.java  | 29 +++++++++
 .../distribution/DiscreteUniformSampler.java    |  2 -
 .../InverseTransformContinuousSampler.java      |  2 -
 .../InverseTransformDiscreteSampler.java        |  2 -
 .../InverseTransformParetoSampler.java          |  2 -
 .../sampling/distribution/PoissonSampler.java   |  3 -
 .../RejectionInversionZipfSampler.java          |  2 -
 .../rng/sampling/distribution/SamplerBase.java  | 62 ++++++++++++++++++++
 .../ContinuousSamplerParametricTest.java        |  2 -
 .../distribution/ContinuousSamplerTestData.java |  2 -
 .../distribution/ContinuousSamplersList.java    |  1 -
 .../DiscreteSamplerParametricTest.java          |  2 -
 .../distribution/DiscreteSamplerTestData.java   |  2 -
 .../distribution/DiscreteSamplersList.java      |  1 -
 24 files changed, 120 insertions(+), 155 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rng/blob/85b94d9f/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/ContinuousSampler.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/ContinuousSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/ContinuousSampler.java
deleted file mode 100644
index 502c168..0000000
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/ContinuousSampler.java
+++ /dev/null
@@ -1,29 +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.commons.rng.sampling;
-
-/**
- * Sampler that generates values of type {@code double}.
- */
-public interface ContinuousSampler {
-    /**
-     * Creates a sample.
-     *
-     * @return a sample.
-     */
-    double sample();
-}

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/85b94d9f/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/DiscreteSampler.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/DiscreteSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/DiscreteSampler.java
deleted file mode 100644
index b79b2fb..0000000
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/DiscreteSampler.java
+++ /dev/null
@@ -1,29 +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.commons.rng.sampling;
-
-/**
- * Sampler that generates values of type {@code int}.
- */
-public interface DiscreteSampler {
-    /**
-     * Creates a sample.
-     *
-     * @return a sample.
-     */
-    int sample();
-}

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/85b94d9f/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/SamplerBase.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/SamplerBase.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/SamplerBase.java
deleted file mode 100644
index 06cd396..0000000
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/SamplerBase.java
+++ /dev/null
@@ -1,62 +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.commons.rng.sampling;
-
-import org.apache.commons.rng.UniformRandomProvider;
-
-/**
- * Base class for a sampler.
- */
-public class SamplerBase {
-    /** RNG. */
-    private final UniformRandomProvider rng;
-
-    /**
-     * @param rng Generator of uniformly distributed random numbers.
-     */
-    protected SamplerBase(UniformRandomProvider rng) {
-        this.rng = rng;
-    }
-
-    /**
-     * @return a random value from a uniform distribution in the
-     * interval {@code [0, 1)}.
-     */
-    protected double nextUniform() {
-        return rng.nextDouble();
-    }
-
-    /**
-     * @return a random {@code int} value.
-     */
-    protected int nextInt() {
-        return rng.nextInt();
-    }
-
-    /**
-     * @return a random {@code int} value in the interval {@code [0, max)}.
-     */
-    protected int nextInt(int max) {
-        return rng.nextInt(max);
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public String toString() {
-        return "[" + rng.toString() + "]";
-    }
-}

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/85b94d9f/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/AhrensDieterExponentialSampler.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/AhrensDieterExponentialSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/AhrensDieterExponentialSampler.java
index e517397..e43dee2 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/AhrensDieterExponentialSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/AhrensDieterExponentialSampler.java
@@ -17,8 +17,6 @@
 package org.apache.commons.rng.sampling.distribution;
 
 import org.apache.commons.rng.UniformRandomProvider;
-import org.apache.commons.rng.sampling.ContinuousSampler;
-import org.apache.commons.rng.sampling.SamplerBase;
 
 /**
  * Sampling from an exponential distribution.

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/85b94d9f/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/AhrensDieterMarsagliaTsangGammaSampler.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/AhrensDieterMarsagliaTsangGammaSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/AhrensDieterMarsagliaTsangGammaSampler.java
index 156e60d..526b94a 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/AhrensDieterMarsagliaTsangGammaSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/AhrensDieterMarsagliaTsangGammaSampler.java
@@ -17,8 +17,6 @@
 package org.apache.commons.rng.sampling.distribution;
 
 import org.apache.commons.rng.UniformRandomProvider;
-import org.apache.commons.rng.sampling.ContinuousSampler;
-import org.apache.commons.rng.sampling.SamplerBase;
 
 /**
  * <p>

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/85b94d9f/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/BoxMullerGaussianSampler.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/BoxMullerGaussianSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/BoxMullerGaussianSampler.java
index 5b69701..65cbd5a 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/BoxMullerGaussianSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/BoxMullerGaussianSampler.java
@@ -17,8 +17,6 @@
 package org.apache.commons.rng.sampling.distribution;
 
 import org.apache.commons.rng.UniformRandomProvider;
-import org.apache.commons.rng.sampling.ContinuousSampler;
-import org.apache.commons.rng.sampling.SamplerBase;
 
 /**
  * <a href="https://en.wikipedia.org/wiki/Box%E2%80%93Muller_transform">

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/85b94d9f/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/BoxMullerLogNormalSampler.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/BoxMullerLogNormalSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/BoxMullerLogNormalSampler.java
index 5cb869f..63e9280 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/BoxMullerLogNormalSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/BoxMullerLogNormalSampler.java
@@ -17,8 +17,6 @@
 package org.apache.commons.rng.sampling.distribution;
 
 import org.apache.commons.rng.UniformRandomProvider;
-import org.apache.commons.rng.sampling.ContinuousSampler;
-import org.apache.commons.rng.sampling.SamplerBase;
 
 /**
  * <a href="https://en.wikipedia.org/wiki/Box%E2%80%93Muller_transform">

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/85b94d9f/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/ChengBetaSampler.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/ChengBetaSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/ChengBetaSampler.java
index 1252a0c..827752c 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/ChengBetaSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/ChengBetaSampler.java
@@ -17,8 +17,6 @@
 package org.apache.commons.rng.sampling.distribution;
 
 import org.apache.commons.rng.UniformRandomProvider;
-import org.apache.commons.rng.sampling.ContinuousSampler;
-import org.apache.commons.rng.sampling.SamplerBase;
 
 /**
  * Utility class implementing Cheng's algorithms for beta distribution sampling.

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/85b94d9f/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/ContinuousSampler.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/ContinuousSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/ContinuousSampler.java
new file mode 100644
index 0000000..5664013
--- /dev/null
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/ContinuousSampler.java
@@ -0,0 +1,29 @@
+/*
+ * 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.commons.rng.sampling.distribution;
+
+/**
+ * Sampler that generates values of type {@code double}.
+ */
+public interface ContinuousSampler {
+    /**
+     * Creates a sample.
+     *
+     * @return a sample.
+     */
+    double sample();
+}

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/85b94d9f/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/ContinuousUniformSampler.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/ContinuousUniformSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/ContinuousUniformSampler.java
index 8441f81..a2287f7 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/ContinuousUniformSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/ContinuousUniformSampler.java
@@ -17,8 +17,6 @@
 package org.apache.commons.rng.sampling.distribution;
 
 import org.apache.commons.rng.UniformRandomProvider;
-import org.apache.commons.rng.sampling.ContinuousSampler;
-import org.apache.commons.rng.sampling.SamplerBase;
 
 /**
  * Sampling from a uniform distribution.

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/85b94d9f/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/DiscreteSampler.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/DiscreteSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/DiscreteSampler.java
new file mode 100644
index 0000000..0314066
--- /dev/null
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/DiscreteSampler.java
@@ -0,0 +1,29 @@
+/*
+ * 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.commons.rng.sampling.distribution;
+
+/**
+ * Sampler that generates values of type {@code int}.
+ */
+public interface DiscreteSampler {
+    /**
+     * Creates a sample.
+     *
+     * @return a sample.
+     */
+    int sample();
+}

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/85b94d9f/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/DiscreteUniformSampler.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/DiscreteUniformSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/DiscreteUniformSampler.java
index 10a421a..c620eea 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/DiscreteUniformSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/DiscreteUniformSampler.java
@@ -18,8 +18,6 @@
 package org.apache.commons.rng.sampling.distribution;
 
 import org.apache.commons.rng.UniformRandomProvider;
-import org.apache.commons.rng.sampling.SamplerBase;
-import org.apache.commons.rng.sampling.DiscreteSampler;
 
 /**
  * Discrete uniform distribution sampler.

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/85b94d9f/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformContinuousSampler.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformContinuousSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformContinuousSampler.java
index 8bea875..1d057bb 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformContinuousSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformContinuousSampler.java
@@ -17,8 +17,6 @@
 package org.apache.commons.rng.sampling.distribution;
 
 import org.apache.commons.rng.UniformRandomProvider;
-import org.apache.commons.rng.sampling.ContinuousSampler;
-import org.apache.commons.rng.sampling.SamplerBase;
 
 /**
  * Distribution sampler that uses the

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/85b94d9f/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformDiscreteSampler.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformDiscreteSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformDiscreteSampler.java
index 82a819d..2dc0a20 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformDiscreteSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformDiscreteSampler.java
@@ -17,8 +17,6 @@
 package org.apache.commons.rng.sampling.distribution;
 
 import org.apache.commons.rng.UniformRandomProvider;
-import org.apache.commons.rng.sampling.SamplerBase;
-import org.apache.commons.rng.sampling.DiscreteSampler;
 
 /**
  * Distribution sampler that uses the

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/85b94d9f/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformParetoSampler.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformParetoSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformParetoSampler.java
index 82c68f1..4c4ae39 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformParetoSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformParetoSampler.java
@@ -17,8 +17,6 @@
 package org.apache.commons.rng.sampling.distribution;
 
 import org.apache.commons.rng.UniformRandomProvider;
-import org.apache.commons.rng.sampling.SamplerBase;
-import org.apache.commons.rng.sampling.ContinuousSampler;
 
 /**
  * Sampling from a <a href="https://en.wikipedia.org/wiki/Pareto_distribution">Pareto distribution</a>.

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/85b94d9f/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/PoissonSampler.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/PoissonSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/PoissonSampler.java
index 2576640..bd2161b 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/PoissonSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/PoissonSampler.java
@@ -17,9 +17,6 @@
 package org.apache.commons.rng.sampling.distribution;
 
 import org.apache.commons.rng.UniformRandomProvider;
-import org.apache.commons.rng.sampling.SamplerBase;
-import org.apache.commons.rng.sampling.DiscreteSampler;
-import org.apache.commons.rng.sampling.ContinuousSampler;
 
 /**
  * Sampler for the <a href="http://mathworld.wolfram.com/PoissonDistribution.html">Poisson distribution</a>.

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/85b94d9f/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/RejectionInversionZipfSampler.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/RejectionInversionZipfSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/RejectionInversionZipfSampler.java
index 292c11d..c939028 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/RejectionInversionZipfSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/RejectionInversionZipfSampler.java
@@ -18,8 +18,6 @@
 package org.apache.commons.rng.sampling.distribution;
 
 import org.apache.commons.rng.UniformRandomProvider;
-import org.apache.commons.rng.sampling.SamplerBase;
-import org.apache.commons.rng.sampling.DiscreteSampler;
 
 /**
  * Implementation of the <a href="https://en.wikipedia.org/wiki/Zipf's_law">Zipf distribution</a>.

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/85b94d9f/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/SamplerBase.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/SamplerBase.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/SamplerBase.java
new file mode 100644
index 0000000..6ff9a67
--- /dev/null
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/SamplerBase.java
@@ -0,0 +1,62 @@
+/*
+ * 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.commons.rng.sampling.distribution;
+
+import org.apache.commons.rng.UniformRandomProvider;
+
+/**
+ * Base class for a sampler.
+ */
+public class SamplerBase {
+    /** RNG. */
+    private final UniformRandomProvider rng;
+
+    /**
+     * @param rng Generator of uniformly distributed random numbers.
+     */
+    protected SamplerBase(UniformRandomProvider rng) {
+        this.rng = rng;
+    }
+
+    /**
+     * @return a random value from a uniform distribution in the
+     * interval {@code [0, 1)}.
+     */
+    protected double nextUniform() {
+        return rng.nextDouble();
+    }
+
+    /**
+     * @return a random {@code int} value.
+     */
+    protected int nextInt() {
+        return rng.nextInt();
+    }
+
+    /**
+     * @return a random {@code int} value in the interval {@code [0, max)}.
+     */
+    protected int nextInt(int max) {
+        return rng.nextInt(max);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return "[" + rng.toString() + "]";
+    }
+}

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/85b94d9f/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousSamplerParametricTest.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousSamplerParametricTest.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousSamplerParametricTest.java
index b371cdf..2cc18ce 100644
--- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousSamplerParametricTest.java
+++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousSamplerParametricTest.java
@@ -26,8 +26,6 @@ import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameters;
 
-import org.apache.commons.rng.sampling.ContinuousSampler;
-
 /**
  * Tests for random deviates generators.
  */

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/85b94d9f/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousSamplerTestData.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousSamplerTestData.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousSamplerTestData.java
index a3dd651..d4d15d9 100644
--- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousSamplerTestData.java
+++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousSamplerTestData.java
@@ -18,8 +18,6 @@ package org.apache.commons.rng.sampling.distribution;
 
 import java.util.Arrays;
 
-import org.apache.commons.rng.sampling.ContinuousSampler;
-
 /**
  * Data store for {@link ContinuousSamplerParametricTest}.
  */

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/85b94d9f/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousSamplersList.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousSamplersList.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousSamplersList.java
index 5cb322c..306ef0c 100644
--- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousSamplersList.java
+++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousSamplersList.java
@@ -22,7 +22,6 @@ import java.util.ArrayList;
 import java.util.Collections;
 
 import org.apache.commons.rng.UniformRandomProvider;
-import org.apache.commons.rng.sampling.ContinuousSampler;
 import org.apache.commons.rng.simple.RandomSource;
 
 /**

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/85b94d9f/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplerParametricTest.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplerParametricTest.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplerParametricTest.java
index 93dd71b..6f39d06 100644
--- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplerParametricTest.java
+++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplerParametricTest.java
@@ -28,8 +28,6 @@ import org.junit.runners.Parameterized.Parameters;
 
 import org.apache.commons.math3.distribution.ChiSquaredDistribution;
 
-import org.apache.commons.rng.sampling.DiscreteSampler;
-
 /**
  * Tests for random deviates generators.
  */

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/85b94d9f/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplerTestData.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplerTestData.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplerTestData.java
index 1857afc..a34104c 100644
--- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplerTestData.java
+++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplerTestData.java
@@ -18,8 +18,6 @@ package org.apache.commons.rng.sampling.distribution;
 
 import java.util.Arrays;
 
-import org.apache.commons.rng.sampling.DiscreteSampler;
-
 /**
  * Data store for {@link DiscreteSamplerParametricTest}.
  */

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/85b94d9f/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplersList.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplersList.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplersList.java
index 10e4588..e1fa88f 100644
--- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplersList.java
+++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplersList.java
@@ -24,7 +24,6 @@ import java.util.Collections;
 import org.apache.commons.math3.util.MathArrays;
 
 import org.apache.commons.rng.UniformRandomProvider;
-import org.apache.commons.rng.sampling.DiscreteSampler;
 import org.apache.commons.rng.simple.RandomSource;
 
 /**


[3/7] commons-rng git commit: Use "ChiSquareTest" from "Commons Math" (unit tests).

Posted by er...@apache.org.
Use "ChiSquareTest" from "Commons Math" (unit tests).


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

Branch: refs/heads/RNG-30__sampling
Commit: ecb27296c13dcdc5d0b624e1be3020e8e2f93e11
Parents: 85b94d9
Author: Gilles <er...@apache.org>
Authored: Mon Nov 14 15:21:36 2016 +0100
Committer: Gilles <er...@apache.org>
Committed: Mon Nov 14 15:21:36 2016 +0100

----------------------------------------------------------------------
 .../DiscreteSamplerParametricTest.java          | 37 ++++----------------
 .../distribution/DiscreteSamplersList.java      |  8 ++---
 2 files changed, 11 insertions(+), 34 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rng/blob/ecb27296/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplerParametricTest.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplerParametricTest.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplerParametricTest.java
index 6f39d06..3cf6455 100644
--- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplerParametricTest.java
+++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplerParametricTest.java
@@ -27,6 +27,7 @@ import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameters;
 
 import org.apache.commons.math3.distribution.ChiSquaredDistribution;
+import org.apache.commons.math3.stat.inference.ChiSquareTest;
 
 /**
  * Tests for random deviates generators.
@@ -56,9 +57,9 @@ public class DiscreteSamplerParametricTest {
 
         final double[] prob = sampler.getProbabilities();
         final int len = prob.length; 
-        final long[] expected = new long[len];
+        final double[] expected = new double[len];
         for (int i = 0; i < len; i++) {
-            expected[i] = (long) (prob[i] * sampleSize);
+            expected[i] = prob[i] * sampleSize;
         }
         check(sampleSize,
               sampler.getSampler(),
@@ -80,7 +81,8 @@ public class DiscreteSamplerParametricTest {
     private void check(long sampleSize,
                        DiscreteSampler sampler,
                        int[] points,
-                       long[] expected) {
+                       double[] expected) {
+        final ChiSquareTest chiSquareTest = new ChiSquareTest();
         final int numTests = 50;
 
         // Run the tests.
@@ -105,10 +107,8 @@ public class DiscreteSamplerParametricTest {
                     }
                 }
 
-                // Statistics check. XXX
-                final double chi2stat = chiSquareStat(expected, observed);
-                if (chi2stat < 0.001) {
-                    failedStat.add(chi2stat);
+                if (chiSquareTest.chiSquareTest(expected, observed, 0.001)) {
+                    failedStat.add(chiSquareTest.chiSquareTest(expected, observed));
                     ++numFailures;
                 }
             }
@@ -123,27 +123,4 @@ public class DiscreteSamplerParametricTest {
                         "chi2=" + Arrays.toString(failedStat.toArray(new Double[0])));
         }
     }
-
-    /**
-     * @param expected Counts.
-     * @param observed Counts.
-     * @return the chi-square statistics.
-     */
-    private static double chiSquareStat(long[] expected,
-                                        long[] observed) {
-        final int numBins = expected.length;
-        double chi2 = 0;
-        for (int i = 0; i < numBins; i++) {
-            final long diff = observed[i] - expected[i];
-            chi2 += (diff / (double) expected[i]) * diff;
-            // System.out.println("bin[" + i + "]" +
-            //                    " obs=" + observed[i] +
-            //                    " exp=" + expected[i]);
-        }
-
-        final int dof = numBins - 1;
-        final ChiSquaredDistribution dist = new ChiSquaredDistribution(null, dof, 1e-8);
-
-        return 1 - dist.cumulativeProbability(chi2);
-    }
 }

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/ecb27296/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplersList.java
----------------------------------------------------------------------
diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplersList.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplersList.java
index e1fa88f..cf3ae99 100644
--- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplersList.java
+++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplersList.java
@@ -70,22 +70,22 @@ public class DiscreteSamplersList {
             final int loUniform = -3;
             final int hiUniform = 4;
             add(LIST, new org.apache.commons.math3.distribution.UniformIntegerDistribution(loUniform, hiUniform),
-                MathArrays.sequence(10, -4, 1),
+                MathArrays.sequence(8, -3, 1),
                 RandomSource.create(RandomSource.SPLIT_MIX_64));
             // Uniform.
             add(LIST, new org.apache.commons.math3.distribution.UniformIntegerDistribution(loUniform, hiUniform),
-                MathArrays.sequence(10, -4, 1),
+                MathArrays.sequence(8, -3, 1),
                 new DiscreteUniformSampler(RandomSource.create(RandomSource.MT_64), loUniform, hiUniform));
 
             // Zipf ("inverse method").
             final int numElementsZipf = 5;
             final double exponentZipf = 2.345;
             add(LIST, new org.apache.commons.math3.distribution.ZipfDistribution(numElementsZipf, exponentZipf),
-                MathArrays.sequence(5, 0, 1),
+                MathArrays.sequence(5, 1, 1),
                 RandomSource.create(RandomSource.XOR_SHIFT_1024_S));
             // Zipf.
             add(LIST, new org.apache.commons.math3.distribution.ZipfDistribution(numElementsZipf, exponentZipf),
-                MathArrays.sequence(7, 0, 1),
+                MathArrays.sequence(5, 1, 1),
                 new RejectionInversionZipfSampler(RandomSource.create(RandomSource.WELL_19937_C), numElementsZipf, exponentZipf));
 
             // Poisson ("inverse method").