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;
+ }
}