This is an automated email from the ASF dual-hosted git repository. erans pushed a commit to branch modularized_master in repository https://gitbox.apache.org/repos/asf/commons-math.git
commit 7f383414c2fff5caba046f4a4c5d9ff7e674b22f Author: Gilles Sadowski <gillese...@gmail.com> AuthorDate: Mon May 24 02:31:12 2021 +0200 MATH-1533: Javadoc explaining that the issue is actually not a problem. Corresponding unit test has been removed. --- .../legacy/distribution/EnumeratedDistribution.java | 14 ++++++++++++++ .../distribution/EnumeratedIntegerDistribution.java | 6 +++++- .../EnumeratedIntegerDistributionTest.java | 21 +++------------------ 3 files changed, 22 insertions(+), 19 deletions(-) diff --git a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/distribution/EnumeratedDistribution.java b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/distribution/EnumeratedDistribution.java index ffbccc9..8c032a0 100644 --- a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/distribution/EnumeratedDistribution.java +++ b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/distribution/EnumeratedDistribution.java @@ -169,6 +169,20 @@ public class EnumeratedDistribution<T> implements Serializable { /** * Sampler functionality. + * + * <ul> + * <li> + * The cumulative probability distribution is created (and sampled from) + * using the input order of the {@link EnumeratedDistribution#EnumeratedDistribution(List) + * constructor arguments}: A different input order will create a different + * sequence of samples. + * The samples will only be reproducible with the same RNG starting from + * the same RNG state and the same input order to constructor. + * </li> + * <li> + * The minimum supported probability is 2<sup>-53</sup>. + * </li> + * </ul> */ public class Sampler { /** Underlying sampler. */ diff --git a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/distribution/EnumeratedIntegerDistribution.java b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/distribution/EnumeratedIntegerDistribution.java index 75ad2c9..c6447d8 100644 --- a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/distribution/EnumeratedIntegerDistribution.java +++ b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/distribution/EnumeratedIntegerDistribution.java @@ -229,7 +229,11 @@ public class EnumeratedIntegerDistribution extends AbstractIntegerDistribution { return true; } - /** {@inheritDoc} */ + /** + * {@inheritDoc} + * + * Refer to {@link EnumeratedDistribution.Sampler} for implementation details. + */ @Override public DiscreteDistribution.Sampler createSampler(final UniformRandomProvider rng) { return new DiscreteDistribution.Sampler() { diff --git a/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/distribution/EnumeratedIntegerDistributionTest.java b/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/distribution/EnumeratedIntegerDistributionTest.java index fba5a30..1c11ec9 100644 --- a/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/distribution/EnumeratedIntegerDistributionTest.java +++ b/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/distribution/EnumeratedIntegerDistributionTest.java @@ -158,8 +158,7 @@ public class EnumeratedIntegerDistributionTest { public void testSample() { final int n = 1000000; final DiscreteDistribution.Sampler sampler - = testDistribution.createSampler(RandomSource.create(RandomSource.WELL_19937_C, - -334759360)); // fixed seed + = testDistribution.createSampler(RandomSource.create(RandomSource.WELL_19937_C)); final int[] samples = AbstractIntegerDistribution.sample(n, sampler); Assert.assertEquals(n, samples.length); double sum = 0; @@ -169,9 +168,9 @@ public class EnumeratedIntegerDistributionTest { sumOfSquares += samples[i] * samples[i]; } Assert.assertEquals(testDistribution.getMean(), - sum / n, 1e-2); + sum / n, 1e-2); Assert.assertEquals(testDistribution.getVariance(), - sumOfSquares / n - FastMath.pow(sum / n, 2), 1e-2); + sumOfSquares / n - FastMath.pow(sum / n, 2), 1e-2); } @Test @@ -181,18 +180,4 @@ public class EnumeratedIntegerDistributionTest { Assert.assertEquals(0.5, distribution.probability(2), 0); Assert.assertEquals(0.5, distribution.cumulativeProbability(1), 0); } - - @Test - public void testMath1533() { - final EnumeratedIntegerDistribution d1 = new EnumeratedIntegerDistribution(new int[] {1, 2}, - new double[] {0.3, 0.7}); - final EnumeratedIntegerDistribution d2 = new EnumeratedIntegerDistribution(new int[] {2, 1}, - new double[] {0.7, 0.3}); - - final int len = 24; - final RandomSource r = RandomSource.WELL_19937_C; - final int s = 42; - Assert.assertTrue(Arrays.equals(AbstractIntegerDistribution.sample(len, d1.createSampler(RandomSource.create(r, s))), - AbstractIntegerDistribution.sample(len, d2.createSampler(RandomSource.create(r, s))))); - } }