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 2021/09/14 12:10:05 UTC

[commons-statistics] branch master updated (1e7f91c -> 81cbacd)

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-statistics.git.


    from 1e7f91c  Upgrade dependency.
     new 50c6b2a  Use a ZigguratSampler.NormalizedGaussian
     new d046cc8  Use a ZigguratSampler.Exponential
     new b1bffa0  Use a LevySampler
     new 23ace29  Use a StableSampler for the Cauchy distribution
     new 1469869  Scale the expected for the Chi-square test
     new a1d766f  Update RandomSource.create to new 1.4 API
     new da71b36  Use faster and more robust RNG for tests.
     new 81cbacd  Use a single instance of the standard normal distribution

The 8 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:
 .../distribution/CauchyDistribution.java           | 11 +++++++++++
 .../distribution/ExponentialDistribution.java      | 14 +++----------
 .../statistics/distribution/LevyDistribution.java  |  9 +++++++++
 .../distribution/NormalDistribution.java           |  4 ++--
 .../distribution/TruncatedNormalDistribution.java  | 23 +++++++++++-----------
 .../distribution/BetaDistributionTest.java         |  6 ++----
 .../ContinuousDistributionAbstractTest.java        |  7 +++++--
 .../DiscreteDistributionAbstractTest.java          |  7 +++++--
 .../HypergeometricDistributionTest.java            |  2 +-
 .../distribution/ZipfDistributionTest.java         |  2 +-
 10 files changed, 51 insertions(+), 34 deletions(-)

[commons-statistics] 07/08: Use faster and more robust RNG for tests.

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-statistics.git

commit da71b36ad13f1a658dbaa07dc38328a76e31d731
Author: aherbert <ah...@apache.org>
AuthorDate: Tue Sep 14 12:44:02 2021 +0100

    Use faster and more robust RNG for tests.
    
    Avoids the use of the WELL family of generators as they use a large
    seed, are relatively slow and have less statistically robust output.
    
    The RandomSource was selected using a generator with a period of
    approximately 2^256 that passes PractRand for 4TiB of output. Fixed
    seeds have been updated where appropriate.
---
 .../apache/commons/statistics/distribution/BetaDistributionTest.java  | 4 ++--
 .../statistics/distribution/ContinuousDistributionAbstractTest.java   | 2 +-
 .../statistics/distribution/DiscreteDistributionAbstractTest.java     | 2 +-
 .../statistics/distribution/HypergeometricDistributionTest.java       | 2 +-
 .../apache/commons/statistics/distribution/ZipfDistributionTest.java  | 2 +-
 5 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/BetaDistributionTest.java b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/BetaDistributionTest.java
index a662538..c3bf745 100644
--- a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/BetaDistributionTest.java
+++ b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/BetaDistributionTest.java
@@ -444,7 +444,7 @@ class BetaDistributionTest {
 
     @Test
     void testMomentsSampling() {
-        final UniformRandomProvider rng = RandomSource.WELL_1024_A.create(123456789L);
+        final UniformRandomProvider rng = RandomSource.XO_SHI_RO_256_PP.create(123456789L);
         final int numSamples = 1000;
         for (final double alpha : ALPHA_BETAS) {
             for (final double beta : ALPHA_BETAS) {
@@ -463,7 +463,7 @@ class BetaDistributionTest {
 
     @Test
     void testGoodnessOfFit() {
-        final UniformRandomProvider rng = RandomSource.WELL_19937_A.create(123456789L);
+        final UniformRandomProvider rng = RandomSource.XO_SHI_RO_256_PP.create(123456789L);
 
         final int numSamples = 1000;
         final double level = 0.01;
diff --git a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ContinuousDistributionAbstractTest.java b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ContinuousDistributionAbstractTest.java
index 0844da5..120de7c 100644
--- a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ContinuousDistributionAbstractTest.java
+++ b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ContinuousDistributionAbstractTest.java
@@ -473,7 +473,7 @@ abstract class ContinuousDistributionAbstractTest {
 
         // Use fixed seed.
         final ContinuousDistribution.Sampler sampler =
-            getDistribution().createSampler(RandomSource.WELL_19937_C.create(123456789L));
+            getDistribution().createSampler(RandomSource.XO_SHI_RO_256_PP.create(123456789L));
         final double[] sample = TestUtils.sample(sampleSize, sampler);
 
         final long[] counts = new long[4];
diff --git a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/DiscreteDistributionAbstractTest.java b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/DiscreteDistributionAbstractTest.java
index 35ff33f..4ee99ad 100644
--- a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/DiscreteDistributionAbstractTest.java
+++ b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/DiscreteDistributionAbstractTest.java
@@ -490,7 +490,7 @@ abstract class DiscreteDistributionAbstractTest {
 
         // Use fixed seed.
         final DiscreteDistribution.Sampler sampler =
-            getDistribution().createSampler(RandomSource.WELL_512_A.create(1000));
+            getDistribution().createSampler(RandomSource.XO_SHI_RO_256_PP.create(1234567890L));
         final int[] sample = TestUtils.sample(sampleSize, sampler);
 
         final long[] counts = new long[length];
diff --git a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/HypergeometricDistributionTest.java b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/HypergeometricDistributionTest.java
index 7956f57..21ce1f0 100644
--- a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/HypergeometricDistributionTest.java
+++ b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/HypergeometricDistributionTest.java
@@ -331,7 +331,7 @@ class HypergeometricDistributionTest extends DiscreteDistributionAbstractTest {
         final int m = 42976365;
         final int n = 50;
         final DiscreteDistribution.Sampler dist =
-            new HypergeometricDistribution(N, m, n).createSampler(RandomSource.WELL_512_A.create());
+            new HypergeometricDistribution(N, m, n).createSampler(RandomSource.XO_SHI_RO_256_PP.create());
 
         for (int i = 0; i < 100; i++) {
             final int sample = dist.sample();
diff --git a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ZipfDistributionTest.java b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ZipfDistributionTest.java
index c8c4c3a..5325803 100644
--- a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ZipfDistributionTest.java
+++ b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ZipfDistributionTest.java
@@ -145,7 +145,7 @@ class ZipfDistributionTest extends DiscreteDistributionAbstractTest {
                 // that all test cases do not fail is 0.999^(32*22) = 0.49442874426
                 final DiscreteDistribution.Sampler distribution =
                     new ZipfDistribution(numPoints, exponent).createSampler(
-                        RandomSource.WELL_19937_C.create(6));
+                        RandomSource.XO_SHI_RO_256_PP.create(6));
 
                 final double[] expectedCounts = new double[numPoints];
                 final long[] observedCounts = new long[numPoints];

[commons-statistics] 05/08: Scale the expected for the Chi-square test

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-statistics.git

commit 1469869803ce388c76aa1b341a56eff8f261d8c1
Author: aherbert <ah...@apache.org>
AuthorDate: Tue Sep 14 12:09:45 2021 +0100

    Scale the expected for the Chi-square test
---
 .../statistics/distribution/ContinuousDistributionAbstractTest.java  | 5 ++++-
 .../statistics/distribution/DiscreteDistributionAbstractTest.java    | 5 ++++-
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ContinuousDistributionAbstractTest.java b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ContinuousDistributionAbstractTest.java
index 2ccd017..5412fea 100644
--- a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ContinuousDistributionAbstractTest.java
+++ b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ContinuousDistributionAbstractTest.java
@@ -23,6 +23,7 @@ import java.util.Collections;
 import org.apache.commons.math3.analysis.UnivariateFunction;
 import org.apache.commons.math3.analysis.integration.BaseAbstractUnivariateIntegrator;
 import org.apache.commons.math3.analysis.integration.IterativeLegendreGaussIntegrator;
+import org.apache.commons.math3.util.MathArrays;
 import org.apache.commons.rng.simple.RandomSource;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.AfterEach;
@@ -467,8 +468,10 @@ abstract class ContinuousDistributionAbstractTest {
         final double[] quartiles = TestUtils.getDistributionQuartiles(getDistribution());
         final double[] expected = {0.25, 0.25, 0.25, 0.25};
 
-        // Use fixed seed.
         final int sampleSize = 1000;
+        MathArrays.scaleInPlace(sampleSize, expected);
+
+        // Use fixed seed.
         final ContinuousDistribution.Sampler sampler =
             getDistribution().createSampler(RandomSource.create(RandomSource.WELL_19937_C, 123456789L));
         final double[] sample = TestUtils.sample(sampleSize, sampler);
diff --git a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/DiscreteDistributionAbstractTest.java b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/DiscreteDistributionAbstractTest.java
index 763c67f..ebafcbb 100644
--- a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/DiscreteDistributionAbstractTest.java
+++ b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/DiscreteDistributionAbstractTest.java
@@ -17,6 +17,7 @@
 package org.apache.commons.statistics.distribution;
 
 import java.util.Arrays;
+import org.apache.commons.math3.util.MathArrays;
 import org.apache.commons.rng.simple.RandomSource;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
@@ -484,8 +485,10 @@ abstract class DiscreteDistributionAbstractTest {
             Assertions.fail("Not enough of the PMF is tested during sampling: " + sum);
         }
 
-        // Use fixed seed.
         final int sampleSize = 1000;
+        MathArrays.scaleInPlace(sampleSize, expected);
+
+        // Use fixed seed.
         final DiscreteDistribution.Sampler sampler =
             getDistribution().createSampler(RandomSource.create(RandomSource.WELL_512_A, 1000));
         final int[] sample = TestUtils.sample(sampleSize, sampler);

[commons-statistics] 02/08: Use a ZigguratSampler.Exponential

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-statistics.git

commit d046cc897ec1862c91c8ecf084e3f31a8e6c211b
Author: aherbert <ah...@apache.org>
AuthorDate: Tue Sep 14 11:43:58 2021 +0100

    Use a ZigguratSampler.Exponential
---
 .../statistics/distribution/ExponentialDistribution.java   | 14 +++-----------
 1 file changed, 3 insertions(+), 11 deletions(-)

diff --git a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ExponentialDistribution.java b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ExponentialDistribution.java
index c37238d..295a03d 100644
--- a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ExponentialDistribution.java
+++ b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ExponentialDistribution.java
@@ -17,7 +17,7 @@
 package org.apache.commons.statistics.distribution;
 
 import org.apache.commons.rng.UniformRandomProvider;
-import org.apache.commons.rng.sampling.distribution.AhrensDieterExponentialSampler;
+import org.apache.commons.rng.sampling.distribution.ZigguratSampler;
 
 /**
  * Implementation of the <a href="http://en.wikipedia.org/wiki/Exponential_distribution">exponential distribution</a>.
@@ -162,18 +162,10 @@ public class ExponentialDistribution extends AbstractContinuousDistribution {
         return true;
     }
 
-    /**
-     * {@inheritDoc}
-     *
-     * <p>Sampling algorithm uses the
-     *  <a href="http://www.jesus.ox.ac.uk/~clifford/a5/chap1/node5.html">
-     *   inversion method</a> to generate exponentially distributed
-     *  random values from uniform deviates.
-     * </p>
-     */
+    /** {@inheritDoc} */
     @Override
     public ContinuousDistribution.Sampler createSampler(final UniformRandomProvider rng) {
         // Exponential distribution sampler.
-        return AhrensDieterExponentialSampler.of(rng, mean)::sample;
+        return ZigguratSampler.Exponential.of(rng, mean)::sample;
     }
 }

[commons-statistics] 04/08: Use a StableSampler for the Cauchy distribution

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-statistics.git

commit 23ace290a7ff6abf265e660b5f17ddf25b1f55c3
Author: aherbert <ah...@apache.org>
AuthorDate: Tue Sep 14 11:58:25 2021 +0100

    Use a StableSampler for the Cauchy distribution
---
 .../commons/statistics/distribution/CauchyDistribution.java   | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/CauchyDistribution.java b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/CauchyDistribution.java
index 9dd0d27..d189025 100644
--- a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/CauchyDistribution.java
+++ b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/CauchyDistribution.java
@@ -16,6 +16,9 @@
  */
 package org.apache.commons.statistics.distribution;
 
+import org.apache.commons.rng.UniformRandomProvider;
+import org.apache.commons.rng.sampling.distribution.StableSampler;
+
 /**
  * Implementation of the <a href="http://en.wikipedia.org/wiki/Cauchy_distribution">Cauchy distribution</a>.
  */
@@ -173,4 +176,12 @@ public class CauchyDistribution extends AbstractContinuousDistribution {
     public boolean isSupportConnected() {
         return true;
     }
+
+    /** {@inheritDoc} */
+    @Override
+    public ContinuousDistribution.Sampler createSampler(final UniformRandomProvider rng) {
+        // Cauchy distribution =
+        // Stable distribution with alpha=1, beta=0, gamma=scale, delta=location (median)
+        return StableSampler.of(rng, 1, 0, getScale(), getMedian())::sample;
+    }
 }

[commons-statistics] 01/08: Use a ZigguratSampler.NormalizedGaussian

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-statistics.git

commit 50c6b2a3387c4e74891f856a1b668a64dd868ed9
Author: aherbert <ah...@apache.org>
AuthorDate: Tue Sep 14 11:43:04 2021 +0100

    Use a ZigguratSampler.NormalizedGaussian
---
 .../apache/commons/statistics/distribution/NormalDistribution.java    | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/NormalDistribution.java b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/NormalDistribution.java
index 76303ba..ab1f918 100644
--- a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/NormalDistribution.java
+++ b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/NormalDistribution.java
@@ -22,7 +22,7 @@ import org.apache.commons.numbers.gamma.InverseErf;
 import org.apache.commons.numbers.gamma.ErfDifference;
 import org.apache.commons.rng.UniformRandomProvider;
 import org.apache.commons.rng.sampling.distribution.GaussianSampler;
-import org.apache.commons.rng.sampling.distribution.ZigguratNormalizedGaussianSampler;
+import org.apache.commons.rng.sampling.distribution.ZigguratSampler;
 
 /**
  * Implementation of the <a href="http://en.wikipedia.org/wiki/Normal_distribution">normal (Gaussian) distribution</a>.
@@ -191,7 +191,7 @@ public class NormalDistribution extends AbstractContinuousDistribution {
     @Override
     public ContinuousDistribution.Sampler createSampler(final UniformRandomProvider rng) {
         // Gaussian distribution sampler.
-        return GaussianSampler.of(ZigguratNormalizedGaussianSampler.of(rng),
+        return GaussianSampler.of(ZigguratSampler.NormalizedGaussian.of(rng),
                                   mean, standardDeviation)::sample;
     }
 }

[commons-statistics] 08/08: Use a single instance of the standard normal distribution

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-statistics.git

commit 81cbacd3f43fb3ec2c188143fb641c36e22a3853
Author: aherbert <ah...@apache.org>
AuthorDate: Tue Sep 14 13:07:36 2021 +0100

    Use a single instance of the standard normal distribution
    
    The distribution is immutable. The underlying computations use static
    methods and can be used across threads.
    
    Note: A micro-optimisation to eliminate the mean=0 and SD=1 from the
    computations used from NormalDistribution(0, 1) has not been performed
    to aid maintenance. It is presumed that multiplication by 1 or addition
    of 0 is insignificant compared to the calls to:
    
    - Math.exp (density)
    - Erf.value (cumulativeProbability)
    - InverseErf.value (inverseCumulativeProbability)
    
    Only the logDensity function would be expected to improve performance as
    it would eliminate 1 subtraction and 1 devision to leave the computation
    as 2 multiplications and a subtraction:
    
    return -0.5 * x * x - halfLog2Pi
---
 .../distribution/TruncatedNormalDistribution.java  | 23 +++++++++++-----------
 1 file changed, 12 insertions(+), 11 deletions(-)

diff --git a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TruncatedNormalDistribution.java b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TruncatedNormalDistribution.java
index 4f17d8b..08751ea 100644
--- a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TruncatedNormalDistribution.java
+++ b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TruncatedNormalDistribution.java
@@ -24,6 +24,10 @@ package org.apache.commons.statistics.distribution;
  * Truncated normal distribution (Wikipedia)</a>
  */
 public class TruncatedNormalDistribution extends AbstractContinuousDistribution {
+    /** A standard normal distribution used for calculations.
+     * This is immutable and thread-safe and can be used across instances. */
+    private static final NormalDistribution STANDARD_NORMAL = new NormalDistribution(0, 1);
+
     /** Mean of parent normal distribution. */
     private final double parentMean;
     /** Standard deviation of parent normal distribution. */
@@ -37,8 +41,6 @@ public class TruncatedNormalDistribution extends AbstractContinuousDistribution
     /** Upper bound of this distribution. */
     private final double upper;
 
-    /** A standard normal distribution used for calculations. */
-    private final NormalDistribution standardNormal;
     /** Stored value of @{code standardNormal.cumulativeProbability((lower - mean) / sd)} for faster computations. */
     private final double cdfAlpha;
     /**
@@ -75,21 +77,20 @@ public class TruncatedNormalDistribution extends AbstractContinuousDistribution
 
         parentMean = mean;
         parentSd = sd;
-        standardNormal = new NormalDistribution(0, 1);
 
         final double alpha = (lower - mean) / sd;
         final double beta = (upper - mean) / sd;
 
-        final double cdfBeta = standardNormal.cumulativeProbability(beta);
-        cdfAlpha = standardNormal.cumulativeProbability(alpha);
+        final double cdfBeta = STANDARD_NORMAL.cumulativeProbability(beta);
+        cdfAlpha = STANDARD_NORMAL.cumulativeProbability(alpha);
         cdfDelta = cdfBeta - cdfAlpha;
 
         parentSdByCdfDelta = parentSd * cdfDelta;
         logParentSdByCdfDelta = Math.log(parentSdByCdfDelta);
 
         // Calculation of variance and mean.
-        final double pdfAlpha = standardNormal.density(alpha);
-        final double pdfBeta = standardNormal.density(beta);
+        final double pdfAlpha = STANDARD_NORMAL.density(alpha);
+        final double pdfBeta = STANDARD_NORMAL.density(beta);
         final double pdfCdfDelta = (pdfAlpha - pdfBeta) / cdfDelta;
         final double alphaBetaDelta = (alpha * pdfAlpha - beta * pdfBeta) / cdfDelta;
 
@@ -124,7 +125,7 @@ public class TruncatedNormalDistribution extends AbstractContinuousDistribution
         if (x < lower || x > upper) {
             return 0;
         }
-        return standardNormal.density((x - parentMean) / parentSd) / parentSdByCdfDelta;
+        return STANDARD_NORMAL.density((x - parentMean) / parentSd) / parentSdByCdfDelta;
     }
 
     /** {@inheritDoc} */
@@ -133,7 +134,7 @@ public class TruncatedNormalDistribution extends AbstractContinuousDistribution
         if (x < lower || x > upper) {
             return Double.NEGATIVE_INFINITY;
         }
-        return standardNormal.logDensity((x - parentMean) / parentSd) - logParentSdByCdfDelta;
+        return STANDARD_NORMAL.logDensity((x - parentMean) / parentSd) - logParentSdByCdfDelta;
     }
 
     /** {@inheritDoc} */
@@ -144,7 +145,7 @@ public class TruncatedNormalDistribution extends AbstractContinuousDistribution
         } else if (x >= upper) {
             return 1;
         }
-        return (standardNormal.cumulativeProbability((x - parentMean) / parentSd) - cdfAlpha) / cdfDelta;
+        return (STANDARD_NORMAL.cumulativeProbability((x - parentMean) / parentSd) - cdfAlpha) / cdfDelta;
     }
 
     /** {@inheritDoc} */
@@ -159,7 +160,7 @@ public class TruncatedNormalDistribution extends AbstractContinuousDistribution
         } else if (p == 1) {
             return upper;
         }
-        final double x = standardNormal.inverseCumulativeProbability(cdfAlpha + p * cdfDelta) * parentSd + parentMean;
+        final double x = STANDARD_NORMAL.inverseCumulativeProbability(cdfAlpha + p * cdfDelta) * parentSd + parentMean;
         // Clip to support to handle floating-point error at the support bound
         if (x <= lower) {
             return lower;

[commons-statistics] 06/08: Update RandomSource.create to new 1.4 API

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-statistics.git

commit a1d766f173fe45523e552bcef296645564ebc7a2
Author: aherbert <ah...@apache.org>
AuthorDate: Tue Sep 14 12:14:24 2021 +0100

    Update RandomSource.create to new 1.4 API
---
 .../commons/statistics/distribution/BetaDistributionTest.java       | 6 ++----
 .../statistics/distribution/ContinuousDistributionAbstractTest.java | 2 +-
 .../statistics/distribution/DiscreteDistributionAbstractTest.java   | 2 +-
 .../statistics/distribution/HypergeometricDistributionTest.java     | 2 +-
 .../commons/statistics/distribution/ZipfDistributionTest.java       | 2 +-
 5 files changed, 6 insertions(+), 8 deletions(-)

diff --git a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/BetaDistributionTest.java b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/BetaDistributionTest.java
index dbbf4e6..a662538 100644
--- a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/BetaDistributionTest.java
+++ b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/BetaDistributionTest.java
@@ -444,8 +444,7 @@ class BetaDistributionTest {
 
     @Test
     void testMomentsSampling() {
-        final UniformRandomProvider rng = RandomSource.create(RandomSource.WELL_1024_A,
-                                                              123456789L);
+        final UniformRandomProvider rng = RandomSource.WELL_1024_A.create(123456789L);
         final int numSamples = 1000;
         for (final double alpha : ALPHA_BETAS) {
             for (final double beta : ALPHA_BETAS) {
@@ -464,8 +463,7 @@ class BetaDistributionTest {
 
     @Test
     void testGoodnessOfFit() {
-        final UniformRandomProvider rng = RandomSource.create(RandomSource.WELL_19937_A,
-                                                              123456789L);
+        final UniformRandomProvider rng = RandomSource.WELL_19937_A.create(123456789L);
 
         final int numSamples = 1000;
         final double level = 0.01;
diff --git a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ContinuousDistributionAbstractTest.java b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ContinuousDistributionAbstractTest.java
index 5412fea..0844da5 100644
--- a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ContinuousDistributionAbstractTest.java
+++ b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ContinuousDistributionAbstractTest.java
@@ -473,7 +473,7 @@ abstract class ContinuousDistributionAbstractTest {
 
         // Use fixed seed.
         final ContinuousDistribution.Sampler sampler =
-            getDistribution().createSampler(RandomSource.create(RandomSource.WELL_19937_C, 123456789L));
+            getDistribution().createSampler(RandomSource.WELL_19937_C.create(123456789L));
         final double[] sample = TestUtils.sample(sampleSize, sampler);
 
         final long[] counts = new long[4];
diff --git a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/DiscreteDistributionAbstractTest.java b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/DiscreteDistributionAbstractTest.java
index ebafcbb..35ff33f 100644
--- a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/DiscreteDistributionAbstractTest.java
+++ b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/DiscreteDistributionAbstractTest.java
@@ -490,7 +490,7 @@ abstract class DiscreteDistributionAbstractTest {
 
         // Use fixed seed.
         final DiscreteDistribution.Sampler sampler =
-            getDistribution().createSampler(RandomSource.create(RandomSource.WELL_512_A, 1000));
+            getDistribution().createSampler(RandomSource.WELL_512_A.create(1000));
         final int[] sample = TestUtils.sample(sampleSize, sampler);
 
         final long[] counts = new long[length];
diff --git a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/HypergeometricDistributionTest.java b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/HypergeometricDistributionTest.java
index 14f3410..7956f57 100644
--- a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/HypergeometricDistributionTest.java
+++ b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/HypergeometricDistributionTest.java
@@ -331,7 +331,7 @@ class HypergeometricDistributionTest extends DiscreteDistributionAbstractTest {
         final int m = 42976365;
         final int n = 50;
         final DiscreteDistribution.Sampler dist =
-            new HypergeometricDistribution(N, m, n).createSampler(RandomSource.create(RandomSource.WELL_512_A));
+            new HypergeometricDistribution(N, m, n).createSampler(RandomSource.WELL_512_A.create());
 
         for (int i = 0; i < 100; i++) {
             final int sample = dist.sample();
diff --git a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ZipfDistributionTest.java b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ZipfDistributionTest.java
index 916ee5c..c8c4c3a 100644
--- a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ZipfDistributionTest.java
+++ b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ZipfDistributionTest.java
@@ -145,7 +145,7 @@ class ZipfDistributionTest extends DiscreteDistributionAbstractTest {
                 // that all test cases do not fail is 0.999^(32*22) = 0.49442874426
                 final DiscreteDistribution.Sampler distribution =
                     new ZipfDistribution(numPoints, exponent).createSampler(
-                        RandomSource.create(RandomSource.WELL_19937_C, 6));
+                        RandomSource.WELL_19937_C.create(6));
 
                 final double[] expectedCounts = new double[numPoints];
                 final long[] observedCounts = new long[numPoints];

[commons-statistics] 03/08: Use a LevySampler

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-statistics.git

commit b1bffa0dd0b0b783464ebed5ea47f29458804eac
Author: aherbert <ah...@apache.org>
AuthorDate: Tue Sep 14 11:46:33 2021 +0100

    Use a LevySampler
---
 .../apache/commons/statistics/distribution/LevyDistribution.java | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LevyDistribution.java b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LevyDistribution.java
index 286d6eb..477594f 100644
--- a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LevyDistribution.java
+++ b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LevyDistribution.java
@@ -19,6 +19,8 @@ package org.apache.commons.statistics.distribution;
 import org.apache.commons.numbers.gamma.Erf;
 import org.apache.commons.numbers.gamma.Erfc;
 import org.apache.commons.numbers.gamma.InverseErfc;
+import org.apache.commons.rng.UniformRandomProvider;
+import org.apache.commons.rng.sampling.distribution.LevySampler;
 
 /**
  * This class implements the <a href="http://en.wikipedia.org/wiki/L%C3%A9vy_distribution">
@@ -196,4 +198,11 @@ public class LevyDistribution extends AbstractContinuousDistribution {
     public boolean isSupportConnected() {
         return true;
     }
+
+    /** {@inheritDoc} */
+    @Override
+    public ContinuousDistribution.Sampler createSampler(final UniformRandomProvider rng) {
+        // Levy distribution sampler.
+        return LevySampler.of(rng, getLocation(), getScale())::sample;
+    }
 }