You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ah...@apache.org on 2019/07/31 23:40:18 UTC

[commons-rng] branch master updated (63420f6 -> 22add40)

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

aherbert pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/commons-rng.git.


    from 63420f6  RNG-110: Track changes.
     new 03c2e99  Remove unused imports.
     new cd01dae  Remove trailing whitespace.
     new 4214719  Checkstyle check to fail on violation.
     new c57635d  Add code coverage test for large FactorialLog cache size.
     new 6ba157e  Test the LargeMeanPoissonSampler at small mean.
     new 3189b3b  Use constructor for NormalisedGaussianSamplers.
     new 22add40  Add edge case for sampler pair rejection.

The 7 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../commons/rng/sampling/UnitSphereSampler.java    |  4 +-
 .../AhrensDieterMarsagliaTsangGammaSampler.java    |  4 +-
 .../distribution/BoxMullerLogNormalSampler.java    |  2 +-
 .../rng/sampling/distribution/GaussianSampler.java |  1 -
 .../distribution/LargeMeanPoissonSampler.java      |  4 +-
 .../sampling/distribution/LogNormalSampler.java    |  1 -
 .../BoxMullerNormalisedGaussianSamplerTest.java    |  2 +-
 .../distribution/ContinuousSamplersList.java       | 12 +++---
 .../distribution/DiscreteSamplersList.java         | 11 ++++--
 .../sampling/distribution/GaussianSamplerTest.java |  4 +-
 .../sampling/distribution/InternalUtilsTest.java   | 11 ++++++
 .../distribution/LogNormalSamplerTest.java         |  6 +--
 .../MarsagliaNormalisedGaussianSamplerTest.java    | 46 +++++++++++++++++++++-
 .../ZigguratNormalizedGaussianSamplerTest.java     |  4 +-
 .../rng/simple/internal/SeedFactoryTest.java       |  2 +-
 pom.xml                                            |  2 +-
 16 files changed, 87 insertions(+), 29 deletions(-)


[commons-rng] 06/07: Use constructor for NormalisedGaussianSamplers.

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

aherbert pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-rng.git

commit 3189b3b5a6a6b577e076756910e22169f8a25d51
Author: Alex Herbert <ah...@apache.org>
AuthorDate: Thu Aug 1 00:39:55 2019 +0100

    Use constructor for NormalisedGaussianSamplers.
    
    This is a workaround for a JDK 1.6 bug where generic type inference
    fails for type variable return constraint.
    
    See: https://bugs.java.com/bugdatabase/view_bug.do?bug_id=6302954
---
 .../org/apache/commons/rng/sampling/UnitSphereSampler.java   |  4 ++--
 .../distribution/AhrensDieterMarsagliaTsangGammaSampler.java |  4 ++--
 .../rng/sampling/distribution/BoxMullerLogNormalSampler.java |  2 +-
 .../rng/sampling/distribution/LargeMeanPoissonSampler.java   |  4 ++--
 .../distribution/BoxMullerNormalisedGaussianSamplerTest.java |  2 +-
 .../rng/sampling/distribution/ContinuousSamplersList.java    | 12 ++++++------
 .../rng/sampling/distribution/GaussianSamplerTest.java       |  4 ++--
 .../rng/sampling/distribution/LogNormalSamplerTest.java      |  6 +++---
 .../distribution/MarsagliaNormalisedGaussianSamplerTest.java |  2 +-
 .../distribution/ZigguratNormalizedGaussianSamplerTest.java  |  4 ++--
 10 files changed, 22 insertions(+), 22 deletions(-)

diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/UnitSphereSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/UnitSphereSampler.java
index 10c1702..67cecd1 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/UnitSphereSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/UnitSphereSampler.java
@@ -53,7 +53,7 @@ public class UnitSphereSampler implements SharedStateSampler<UnitSphereSampler>
         }
 
         this.dimension = dimension;
-        sampler = ZigguratNormalizedGaussianSampler.of(rng);
+        sampler = new ZigguratNormalizedGaussianSampler(rng);
     }
 
     /**
@@ -63,7 +63,7 @@ public class UnitSphereSampler implements SharedStateSampler<UnitSphereSampler>
     private UnitSphereSampler(UniformRandomProvider rng,
                               UnitSphereSampler source) {
         // The Gaussian sampler has no shared state so create a new instance
-        sampler = ZigguratNormalizedGaussianSampler.of(rng);
+        sampler = new ZigguratNormalizedGaussianSampler(rng);
         dimension = source.dimension;
     }
 
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 dc565f0..b5f55d1 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
@@ -219,7 +219,7 @@ public class AhrensDieterMarsagliaTsangGammaSampler
                                    double alpha,
                                    double theta) {
             super(rng, alpha, theta);
-            gaussian = ZigguratNormalizedGaussianSampler.of(rng);
+            gaussian = new ZigguratNormalizedGaussianSampler(rng);
             dOptim = alpha - ONE_THIRD;
             cOptim = ONE_THIRD / Math.sqrt(dOptim);
         }
@@ -231,7 +231,7 @@ public class AhrensDieterMarsagliaTsangGammaSampler
         MarsagliaTsangGammaSampler(UniformRandomProvider rng,
                                    MarsagliaTsangGammaSampler source) {
             super(rng, source);
-            gaussian = ZigguratNormalizedGaussianSampler.of(rng);
+            gaussian = new ZigguratNormalizedGaussianSampler(rng);
             dOptim = source.dOptim;
             cOptim = source.cOptim;
         }
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 dae2155..eadf5f3 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
@@ -46,7 +46,7 @@ public class BoxMullerLogNormalSampler
                                      double scale,
                                      double shape) {
         super(null);
-        sampler = LogNormalSampler.of(BoxMullerNormalizedGaussianSampler.of(rng),
+        sampler = LogNormalSampler.of(new BoxMullerNormalizedGaussianSampler(rng),
                                       scale, shape);
     }
 
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/LargeMeanPoissonSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/LargeMeanPoissonSampler.java
index 72b3da5..a8e4e54 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/LargeMeanPoissonSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/LargeMeanPoissonSampler.java
@@ -132,7 +132,7 @@ public class LargeMeanPoissonSampler
         }
         this.rng = rng;
 
-        gaussian = ZigguratNormalizedGaussianSampler.of(rng);
+        gaussian = new ZigguratNormalizedGaussianSampler(rng);
         exponential = AhrensDieterExponentialSampler.of(rng, 1);
         // Plain constructor uses the uncached function.
         factorialLog = NO_CACHE_FACTORIAL_LOG;
@@ -177,7 +177,7 @@ public class LargeMeanPoissonSampler
         }
         this.rng = rng;
 
-        gaussian = ZigguratNormalizedGaussianSampler.of(rng);
+        gaussian = new ZigguratNormalizedGaussianSampler(rng);
         exponential = AhrensDieterExponentialSampler.of(rng, 1);
         // Plain constructor uses the uncached function.
         factorialLog = NO_CACHE_FACTORIAL_LOG;
diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/BoxMullerNormalisedGaussianSamplerTest.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/BoxMullerNormalisedGaussianSamplerTest.java
index e928bec..5cce442 100644
--- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/BoxMullerNormalisedGaussianSamplerTest.java
+++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/BoxMullerNormalisedGaussianSamplerTest.java
@@ -33,7 +33,7 @@ public class BoxMullerNormalisedGaussianSamplerTest {
         final UniformRandomProvider rng1 = RandomSource.create(RandomSource.SPLIT_MIX_64, 0L);
         final UniformRandomProvider rng2 = RandomSource.create(RandomSource.SPLIT_MIX_64, 0L);
         final SharedStateContinuousSampler sampler1 =
-            BoxMullerNormalizedGaussianSampler.of(rng1);
+            BoxMullerNormalizedGaussianSampler.<BoxMullerNormalizedGaussianSampler>of(rng1);
         final SharedStateContinuousSampler sampler2 = sampler1.withUniformRandomProvider(rng2);
         RandomAssert.assertProduceSameSequence(sampler1, sampler2);
     }
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 f4ff9ae..36d57ad 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
@@ -52,15 +52,15 @@ public final class ContinuousSamplersList {
                 new BoxMullerGaussianSampler(RandomSource.create(RandomSource.MT), meanNormal, sigmaNormal));
             // Gaussian ("Box-Muller").
             add(LIST, new org.apache.commons.math3.distribution.NormalDistribution(unusedRng, meanNormal, sigmaNormal),
-                GaussianSampler.of(BoxMullerNormalizedGaussianSampler.of(RandomSource.create(RandomSource.MT)),
+                GaussianSampler.of(new BoxMullerNormalizedGaussianSampler(RandomSource.create(RandomSource.MT)),
                                    meanNormal, sigmaNormal));
             // Gaussian ("Marsaglia").
             add(LIST, new org.apache.commons.math3.distribution.NormalDistribution(unusedRng, meanNormal, sigmaNormal),
-                GaussianSampler.of(MarsagliaNormalizedGaussianSampler.of(RandomSource.create(RandomSource.MT)),
+                GaussianSampler.of(new MarsagliaNormalizedGaussianSampler(RandomSource.create(RandomSource.MT)),
                                    meanNormal, sigmaNormal));
             // Gaussian ("Ziggurat").
             add(LIST, new org.apache.commons.math3.distribution.NormalDistribution(unusedRng, meanNormal, sigmaNormal),
-                GaussianSampler.of(ZigguratNormalizedGaussianSampler.of(RandomSource.create(RandomSource.MT)),
+                GaussianSampler.of(new ZigguratNormalizedGaussianSampler(RandomSource.create(RandomSource.MT)),
                                    meanNormal, sigmaNormal));
 
             // Beta ("inverse method").
@@ -149,15 +149,15 @@ public final class ContinuousSamplersList {
                 new BoxMullerLogNormalSampler(RandomSource.create(RandomSource.XOR_SHIFT_1024_S), scaleLogNormal, shapeLogNormal));
             // Log-normal ("Box-Muller").
             add(LIST, new org.apache.commons.math3.distribution.LogNormalDistribution(unusedRng, scaleLogNormal, shapeLogNormal),
-                LogNormalSampler.of(BoxMullerNormalizedGaussianSampler.of(RandomSource.create(RandomSource.XOR_SHIFT_1024_S)),
+                LogNormalSampler.of(new BoxMullerNormalizedGaussianSampler(RandomSource.create(RandomSource.XOR_SHIFT_1024_S)),
                                     scaleLogNormal, shapeLogNormal));
             // Log-normal ("Marsaglia").
             add(LIST, new org.apache.commons.math3.distribution.LogNormalDistribution(unusedRng, scaleLogNormal, shapeLogNormal),
-                LogNormalSampler.of(MarsagliaNormalizedGaussianSampler.of(RandomSource.create(RandomSource.MT_64)),
+                LogNormalSampler.of(new MarsagliaNormalizedGaussianSampler(RandomSource.create(RandomSource.MT_64)),
                                     scaleLogNormal, shapeLogNormal));
             // Log-normal ("Ziggurat").
             add(LIST, new org.apache.commons.math3.distribution.LogNormalDistribution(unusedRng, scaleLogNormal, shapeLogNormal),
-                LogNormalSampler.of(ZigguratNormalizedGaussianSampler.of(RandomSource.create(RandomSource.MWC_256)),
+                LogNormalSampler.of(new ZigguratNormalizedGaussianSampler(RandomSource.create(RandomSource.MWC_256)),
                                     scaleLogNormal, shapeLogNormal));
 
             // Logistic ("inverse method").
diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/GaussianSamplerTest.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/GaussianSamplerTest.java
index cbf1606..1f5ba4a 100644
--- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/GaussianSamplerTest.java
+++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/GaussianSamplerTest.java
@@ -34,7 +34,7 @@ public class GaussianSamplerTest {
     public void testConstructorThrowsWithZeroStandardDeviation() {
         final RestorableUniformRandomProvider rng =
             RandomSource.create(RandomSource.SPLIT_MIX_64);
-        final NormalizedGaussianSampler gauss = ZigguratNormalizedGaussianSampler.of(rng);
+        final NormalizedGaussianSampler gauss = new ZigguratNormalizedGaussianSampler(rng);
         final double mean = 1;
         final double standardDeviation = 0;
         GaussianSampler.of(gauss, mean, standardDeviation);
@@ -47,7 +47,7 @@ public class GaussianSamplerTest {
     public void testSharedStateSampler() {
         final UniformRandomProvider rng1 = RandomSource.create(RandomSource.SPLIT_MIX_64, 0L);
         final UniformRandomProvider rng2 = RandomSource.create(RandomSource.SPLIT_MIX_64, 0L);
-        final NormalizedGaussianSampler gauss = ZigguratNormalizedGaussianSampler.of(rng1);
+        final NormalizedGaussianSampler gauss = new ZigguratNormalizedGaussianSampler(rng1);
         final double mean = 1.23;
         final double standardDeviation = 4.56;
         final SharedStateContinuousSampler sampler1 =
diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/LogNormalSamplerTest.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/LogNormalSamplerTest.java
index 4bc093d..271125d 100644
--- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/LogNormalSamplerTest.java
+++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/LogNormalSamplerTest.java
@@ -34,7 +34,7 @@ public class LogNormalSamplerTest {
     public void testConstructorThrowsWithNegativeScale() {
         final RestorableUniformRandomProvider rng =
             RandomSource.create(RandomSource.SPLIT_MIX_64);
-        final NormalizedGaussianSampler gauss = ZigguratNormalizedGaussianSampler.of(rng);
+        final NormalizedGaussianSampler gauss = new ZigguratNormalizedGaussianSampler(rng);
         final double scale = -1e-6;
         final double shape = 1;
         LogNormalSampler.of(gauss, scale, shape);
@@ -47,7 +47,7 @@ public class LogNormalSamplerTest {
     public void testConstructorThrowsWithZeroShape() {
         final RestorableUniformRandomProvider rng =
             RandomSource.create(RandomSource.SPLIT_MIX_64);
-        final NormalizedGaussianSampler gauss = ZigguratNormalizedGaussianSampler.of(rng);
+        final NormalizedGaussianSampler gauss = new ZigguratNormalizedGaussianSampler(rng);
         final double scale = 1;
         final double shape = 0;
         LogNormalSampler.of(gauss, scale, shape);
@@ -60,7 +60,7 @@ public class LogNormalSamplerTest {
     public void testSharedStateSampler() {
         final UniformRandomProvider rng1 = RandomSource.create(RandomSource.SPLIT_MIX_64, 0L);
         final UniformRandomProvider rng2 = RandomSource.create(RandomSource.SPLIT_MIX_64, 0L);
-        final NormalizedGaussianSampler gauss = ZigguratNormalizedGaussianSampler.of(rng1);
+        final NormalizedGaussianSampler gauss = new ZigguratNormalizedGaussianSampler(rng1);
         final double scale = 1.23;
         final double shape = 4.56;
         final SharedStateContinuousSampler sampler1 =
diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/MarsagliaNormalisedGaussianSamplerTest.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/MarsagliaNormalisedGaussianSamplerTest.java
index ae58bd0..0d1ab3f 100644
--- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/MarsagliaNormalisedGaussianSamplerTest.java
+++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/MarsagliaNormalisedGaussianSamplerTest.java
@@ -33,7 +33,7 @@ public class MarsagliaNormalisedGaussianSamplerTest {
         final UniformRandomProvider rng1 = RandomSource.create(RandomSource.SPLIT_MIX_64, 0L);
         final UniformRandomProvider rng2 = RandomSource.create(RandomSource.SPLIT_MIX_64, 0L);
         final SharedStateContinuousSampler sampler1 =
-            MarsagliaNormalizedGaussianSampler.of(rng1);
+            MarsagliaNormalizedGaussianSampler.<MarsagliaNormalizedGaussianSampler>of(rng1);
         final SharedStateContinuousSampler sampler2 = sampler1.withUniformRandomProvider(rng2);
         RandomAssert.assertProduceSameSequence(sampler1, sampler2);
     }
diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ZigguratNormalizedGaussianSamplerTest.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ZigguratNormalizedGaussianSamplerTest.java
index a223ebe..81a822d 100644
--- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ZigguratNormalizedGaussianSamplerTest.java
+++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ZigguratNormalizedGaussianSamplerTest.java
@@ -45,7 +45,7 @@ public class ZigguratNormalizedGaussianSamplerTest {
             };
 
         // Infinite loop (in v1.1).
-        ZigguratNormalizedGaussianSampler.of(bad).sample();
+        new ZigguratNormalizedGaussianSampler(bad).sample();
     }
 
     /**
@@ -56,7 +56,7 @@ public class ZigguratNormalizedGaussianSamplerTest {
         final UniformRandomProvider rng1 = RandomSource.create(RandomSource.SPLIT_MIX_64, 0L);
         final UniformRandomProvider rng2 = RandomSource.create(RandomSource.SPLIT_MIX_64, 0L);
         final SharedStateContinuousSampler sampler1 =
-            ZigguratNormalizedGaussianSampler.of(rng1);
+            ZigguratNormalizedGaussianSampler.<ZigguratNormalizedGaussianSampler>of(rng1);
         final SharedStateContinuousSampler sampler2 = sampler1.withUniformRandomProvider(rng2);
         RandomAssert.assertProduceSameSequence(sampler1, sampler2);
     }


[commons-rng] 07/07: Add edge case for sampler pair rejection.

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

aherbert pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-rng.git

commit 22add40d908f3ae8f71d96e472b726c2e4e6ccf9
Author: Alex Herbert <ah...@apache.org>
AuthorDate: Thu Aug 1 00:40:12 2019 +0100

    Add edge case for sampler pair rejection.
---
 .../MarsagliaNormalisedGaussianSamplerTest.java    | 44 ++++++++++++++++++++++
 1 file changed, 44 insertions(+)

diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/MarsagliaNormalisedGaussianSamplerTest.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/MarsagliaNormalisedGaussianSamplerTest.java
index 0d1ab3f..287cf41 100644
--- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/MarsagliaNormalisedGaussianSamplerTest.java
+++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/MarsagliaNormalisedGaussianSamplerTest.java
@@ -17,8 +17,10 @@
 package org.apache.commons.rng.sampling.distribution;
 
 import org.apache.commons.rng.UniformRandomProvider;
+import org.apache.commons.rng.core.source32.IntProvider;
 import org.apache.commons.rng.sampling.RandomAssert;
 import org.apache.commons.rng.simple.RandomSource;
+import org.junit.Assert;
 import org.junit.Test;
 
 /**
@@ -37,4 +39,46 @@ public class MarsagliaNormalisedGaussianSamplerTest {
         final SharedStateContinuousSampler sampler2 = sampler1.withUniformRandomProvider(rng2);
         RandomAssert.assertProduceSameSequence(sampler1, sampler2);
     }
+
+    /**
+     * Test the edge case where the pair of samples are rejected. This occurs when the distance
+     * of the pair is outside the unit circle or lies on the origin.
+     */
+    @Test
+    public void testSamplePairIsRejected() {
+        final double value = 0.25;
+        final UniformRandomProvider rng = new IntProvider() {
+            private int i;
+
+            @Override
+            public int next() {
+                // Not used
+                return 0;
+            }
+
+            @Override
+            public double nextDouble() {
+                i++;
+                if (i <= 2) {
+                    // First two samples are one.
+                    // This is outside the unit circle.
+                    return 1.0;
+                }
+                if (i <= 4) {
+                    // Next two samples are 0.5.
+                    // The pair lies at the origin.
+                    return 0.5;
+                }
+                return value;
+            }
+        };
+
+        final MarsagliaNormalizedGaussianSampler sampler = new MarsagliaNormalizedGaussianSampler(rng);
+
+        // Compute as per the algorithm
+        final double x = 2 * value - 1;
+        final double r2 = x * x + x * x;
+        final double expected = x * Math.sqrt(-2 * Math.log(r2) / r2);
+        Assert.assertEquals(expected, sampler.sample(), 0);
+    }
 }


[commons-rng] 05/07: Test the LargeMeanPoissonSampler at small mean.

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

aherbert pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-rng.git

commit 6ba157e75e5be90fd98f72535b36f9f6a25a5d85
Author: Alex Herbert <ah...@apache.org>
AuthorDate: Wed Jul 31 23:35:38 2019 +0100

    Test the LargeMeanPoissonSampler at small mean.
    
    A small mean is required to hit the case where the sample from the
    normal distribution is rejected.
---
 .../rng/sampling/distribution/DiscreteSamplersList.java       | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

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 b2be61e..dd57177 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
@@ -130,7 +130,7 @@ public final class DiscreteSamplersList {
             add(LIST, new org.apache.commons.math3.distribution.PoissonDistribution(unusedRng, meanPoisson, epsilonPoisson, maxIterationsPoisson),
                 MathArrays.sequence(10, 0, 1),
                 PoissonSampler.of(RandomSource.create(RandomSource.KISS), meanPoisson));
-            // Dedicated small mean poisson sampler
+            // Dedicated small mean poisson samplers
             add(LIST, new org.apache.commons.math3.distribution.PoissonDistribution(unusedRng, meanPoisson, epsilonPoisson, maxIterationsPoisson),
                 MathArrays.sequence(10, 0, 1),
                 SmallMeanPoissonSampler.of(RandomSource.create(RandomSource.XO_SHI_RO_256_PLUS), meanPoisson));
@@ -138,8 +138,13 @@ public final class DiscreteSamplersList {
                 MathArrays.sequence(10, 0, 1),
                 KempSmallMeanPoissonSampler.of(RandomSource.create(RandomSource.XO_SHI_RO_128_PLUS), meanPoisson));
             add(LIST, new org.apache.commons.math3.distribution.PoissonDistribution(unusedRng, meanPoisson, epsilonPoisson, maxIterationsPoisson),
-                    MathArrays.sequence(10, 0, 1),
-                    MarsagliaTsangWangDiscreteSampler.Poisson.of(RandomSource.create(RandomSource.XO_SHI_RO_128_PLUS), meanPoisson));
+                MathArrays.sequence(10, 0, 1),
+                MarsagliaTsangWangDiscreteSampler.Poisson.of(RandomSource.create(RandomSource.XO_SHI_RO_128_PLUS), meanPoisson));
+            // LargeMeanPoissonSampler should work at small mean.
+            // Note: This hits a code path where the sample from the normal distribution is rejected.
+            add(LIST, new org.apache.commons.math3.distribution.PoissonDistribution(unusedRng, meanPoisson, epsilonPoisson, maxIterationsPoisson),
+                MathArrays.sequence(10, 0, 1),
+                LargeMeanPoissonSampler.of(RandomSource.create(RandomSource.PCG_MCG_XSH_RR_32), meanPoisson));
             // Poisson (40 < mean < 80).
             final double largeMeanPoisson = 67.89;
             add(LIST, new org.apache.commons.math3.distribution.PoissonDistribution(unusedRng, largeMeanPoisson, epsilonPoisson, maxIterationsPoisson),


[commons-rng] 03/07: Checkstyle check to fail on violation.

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

aherbert pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-rng.git

commit 4214719b81381e0a7760ba3f7814bf019dcf7806
Author: Alex Herbert <ah...@apache.org>
AuthorDate: Wed Jul 31 23:13:29 2019 +0100

    Checkstyle check to fail on violation.
---
 pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pom.xml b/pom.xml
index f72d0b3..5e10382 100644
--- a/pom.xml
+++ b/pom.xml
@@ -559,7 +559,7 @@
               <suppressionsLocation>${rng.parent.dir}/src/main/resources/checkstyle/checkstyle-suppressions.xml</suppressionsLocation>
               <enableRulesSummary>false</enableRulesSummary>
               <logViolationsToConsole>false</logViolationsToConsole>
-              <failOnViolation>false</failOnViolation>
+              <failOnViolation>true</failOnViolation>
               <resourceExcludes>NOTICE.txt,LICENSE.txt,**/maven-archiver/pom.properties</resourceExcludes>
               <excludes>**/generated/**.java</excludes>
             </configuration>


[commons-rng] 04/07: Add code coverage test for large FactorialLog cache size.

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

aherbert pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-rng.git

commit c57635db14a2cd1931124c2de975486637e9d61c
Author: Alex Herbert <ah...@apache.org>
AuthorDate: Wed Jul 31 23:22:15 2019 +0100

    Add code coverage test for large FactorialLog cache size.
---
 .../commons/rng/sampling/distribution/InternalUtilsTest.java  | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/InternalUtilsTest.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/InternalUtilsTest.java
index 86f41de..f91a7c4 100644
--- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/InternalUtilsTest.java
+++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/InternalUtilsTest.java
@@ -62,6 +62,17 @@ public class InternalUtilsTest {
     }
 
     @Test
+    public void testFactorialLogCacheSizeAboveRepresentableFactorials() {
+        final int limit = MAX_REPRESENTABLE + 5;
+        FactorialLog factorialLog = FactorialLog.create().withCache(limit);
+        for (int n = MAX_REPRESENTABLE; n <= limit; n++) {
+            // Use Commons math to compute logGamma(1 + n);
+            double expected = Gamma.logGamma(1 + n);
+            Assert.assertEquals(expected, factorialLog.value(n), 1e-10);
+        }
+    }
+
+    @Test
     public void testFactorialLogCacheExpansion() {
         // There is no way to determine if the cache values were reused but this test
         // exercises the method to ensure it does not error.


[commons-rng] 01/07: Remove unused imports.

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

aherbert pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-rng.git

commit 03c2e99f6f45bd24246fede99f25117d90d8c7d9
Author: Alex Herbert <ah...@apache.org>
AuthorDate: Wed Jul 31 23:00:52 2019 +0100

    Remove unused imports.
---
 .../org/apache/commons/rng/sampling/distribution/GaussianSampler.java    | 1 -
 .../org/apache/commons/rng/sampling/distribution/LogNormalSampler.java   | 1 -
 2 files changed, 2 deletions(-)

diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/GaussianSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/GaussianSampler.java
index 6b70b7c..580f772 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/GaussianSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/GaussianSampler.java
@@ -17,7 +17,6 @@
 package org.apache.commons.rng.sampling.distribution;
 
 import org.apache.commons.rng.UniformRandomProvider;
-import org.apache.commons.rng.sampling.SharedStateSampler;
 
 /**
  * Sampling from a Gaussian distribution with given mean and
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/LogNormalSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/LogNormalSampler.java
index 9fbfd90..b0ccf12 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/LogNormalSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/LogNormalSampler.java
@@ -17,7 +17,6 @@
 package org.apache.commons.rng.sampling.distribution;
 
 import org.apache.commons.rng.UniformRandomProvider;
-import org.apache.commons.rng.sampling.SharedStateSampler;
 
 /**
  * Sampling from a log-normal distribution.


[commons-rng] 02/07: Remove trailing whitespace.

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

aherbert pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-rng.git

commit cd01dae6cac87d506055f31e7b6b7eeb3ae985ff
Author: Alex Herbert <ah...@apache.org>
AuthorDate: Wed Jul 31 23:13:42 2019 +0100

    Remove trailing whitespace.
---
 .../java/org/apache/commons/rng/simple/internal/SeedFactoryTest.java    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/commons-rng-simple/src/test/java/org/apache/commons/rng/simple/internal/SeedFactoryTest.java b/commons-rng-simple/src/test/java/org/apache/commons/rng/simple/internal/SeedFactoryTest.java
index 8894b6a..cd0d1f0 100644
--- a/commons-rng-simple/src/test/java/org/apache/commons/rng/simple/internal/SeedFactoryTest.java
+++ b/commons-rng-simple/src/test/java/org/apache/commons/rng/simple/internal/SeedFactoryTest.java
@@ -196,7 +196,7 @@ public class SeedFactoryTest {
         // p-value of 0.0001 taken from a 2-tailed Normal distribution. Computation of
         // the p-value requires the complimentary error function.
         // The p-value is set to be equal to a 0.01 with 1 allowed re-run.
-        // (Re-runs are not configured for this test.) 
+        // (Re-runs are not configured for this test.)
         final double absSum = Math.abs(sum);
         final double max = Math.sqrt(numberOfBits) * 3.891;
         Assert.assertTrue("Walked too far astray: " + absSum +