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 2022/12/02 15:10:15 UTC

[commons-math] branch master updated (f7ef9b625 -> ab9b0b0c2)

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


    from f7ef9b625 Fix git build number in manifest
     new 6d767220e Use method reference to create a sampler
     new 7ed772e47 Use survival probability
     new 9fcd3885d Use Map.merge
     new abb32b5a6 Use method reference for the sampler
     new ab9b0b0c2 Use a LinkedHashMap to respect the order of the input data

The 5 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/AbstractIntegerDistribution.java  | 30 ++--------------------
 .../distribution/AbstractRealDistribution.java     | 30 ++--------------------
 .../EnumeratedIntegerDistribution.java             | 24 ++++-------------
 .../distribution/EnumeratedRealDistribution.java   | 22 +++-------------
 .../math4/legacy/stat/inference/BinomialTest.java  |  2 +-
 .../math4/legacy/stat/inference/ChiSquareTest.java |  6 ++---
 .../commons/math4/legacy/stat/inference/GTest.java |  6 ++---
 .../math4/legacy/stat/inference/OneWayAnova.java   | 22 ++++++++--------
 .../legacy/stat/interval/AgrestiCoullInterval.java |  2 +-
 .../stat/interval/ClopperPearsonInterval.java      |  4 +--
 .../stat/interval/NormalApproximationInterval.java |  2 +-
 .../legacy/stat/interval/WilsonScoreInterval.java  |  2 +-
 .../legacy/stat/regression/SimpleRegression.java   |  4 +--
 .../stat/correlation/PearsonsCorrelationTest.java  |  2 +-
 14 files changed, 39 insertions(+), 119 deletions(-)


[commons-math] 02/05: Use survival probability

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

commit 7ed772e474316be2c4028775a37b8da991b97902
Author: aherbert <ah...@apache.org>
AuthorDate: Fri Dec 2 13:30:10 2022 +0000

    Use survival probability
---
 .../math4/legacy/stat/inference/BinomialTest.java  |  2 +-
 .../math4/legacy/stat/inference/ChiSquareTest.java |  6 +++---
 .../commons/math4/legacy/stat/inference/GTest.java |  6 +++---
 .../math4/legacy/stat/inference/OneWayAnova.java   | 22 +++++++++++-----------
 .../legacy/stat/interval/AgrestiCoullInterval.java |  2 +-
 .../stat/interval/ClopperPearsonInterval.java      |  4 ++--
 .../stat/interval/NormalApproximationInterval.java |  2 +-
 .../legacy/stat/interval/WilsonScoreInterval.java  |  2 +-
 .../legacy/stat/regression/SimpleRegression.java   |  4 ++--
 .../stat/correlation/PearsonsCorrelationTest.java  |  2 +-
 10 files changed, 26 insertions(+), 26 deletions(-)

diff --git a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/stat/inference/BinomialTest.java b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/stat/inference/BinomialTest.java
index a7deb3187..9a601bb38 100644
--- a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/stat/inference/BinomialTest.java
+++ b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/stat/inference/BinomialTest.java
@@ -122,7 +122,7 @@ public class BinomialTest {
         final BinomialDistribution distribution = BinomialDistribution.of(numberOfTrials, probability);
         switch (alternativeHypothesis) {
         case GREATER_THAN:
-            return 1 - distribution.cumulativeProbability(numberOfSuccesses - 1);
+            return distribution.survivalProbability(numberOfSuccesses - 1);
         case LESS_THAN:
             return distribution.cumulativeProbability(numberOfSuccesses);
         case TWO_SIDED:
diff --git a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/stat/inference/ChiSquareTest.java b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/stat/inference/ChiSquareTest.java
index eef09933f..3cf36875d 100644
--- a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/stat/inference/ChiSquareTest.java
+++ b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/stat/inference/ChiSquareTest.java
@@ -157,7 +157,7 @@ public class ChiSquareTest {
         // pass a null rng to avoid unneeded overhead as we will not sample from this distribution
         final ChiSquaredDistribution distribution =
             ChiSquaredDistribution.of(expected.length - 1.0);
-        return 1.0 - distribution.cumulativeProbability(chiSquare(expected, observed));
+        return distribution.survivalProbability(chiSquare(expected, observed));
     }
 
     /**
@@ -330,7 +330,7 @@ public class ChiSquareTest {
         double df = ((double) counts.length -1) * ((double) counts[0].length - 1);
         // pass a null rng to avoid unneeded overhead as we will not sample from this distribution
         final ChiSquaredDistribution distribution = ChiSquaredDistribution.of(df);
-        return 1 - distribution.cumulativeProbability(chiSquare(counts));
+        return distribution.survivalProbability(chiSquare(counts));
     }
 
     /**
@@ -532,7 +532,7 @@ public class ChiSquareTest {
         // pass a null rng to avoid unneeded overhead as we will not sample from this distribution
         final ChiSquaredDistribution distribution =
                 ChiSquaredDistribution.of((double) observed1.length - 1);
-        return 1 - distribution.cumulativeProbability(
+        return distribution.survivalProbability(
                 chiSquareDataSetsComparison(observed1, observed2));
     }
 
diff --git a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/stat/inference/GTest.java b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/stat/inference/GTest.java
index 42273e625..3b82b74a7 100644
--- a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/stat/inference/GTest.java
+++ b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/stat/inference/GTest.java
@@ -155,7 +155,7 @@ public class GTest {
         // pass a null rng to avoid unneeded overhead as we will not sample from this distribution
         final ChiSquaredDistribution distribution =
                 ChiSquaredDistribution.of(expected.length - 1.0);
-        return 1.0 - distribution.cumulativeProbability(g(expected, observed));
+        return distribution.survivalProbability(g(expected, observed));
     }
 
     /**
@@ -186,7 +186,7 @@ public class GTest {
         // pass a null rng to avoid unneeded overhead as we will not sample from this distribution
         final ChiSquaredDistribution distribution =
                 ChiSquaredDistribution.of(expected.length - 2.0);
-        return 1.0 - distribution.cumulativeProbability(g(expected, observed));
+        return distribution.survivalProbability(g(expected, observed));
     }
 
     /**
@@ -476,7 +476,7 @@ public class GTest {
         // pass a null rng to avoid unneeded overhead as we will not sample from this distribution
         final ChiSquaredDistribution distribution =
                 ChiSquaredDistribution.of((double) observed1.length - 1);
-        return 1 - distribution.cumulativeProbability(
+        return distribution.survivalProbability(
                 gDataSetsComparison(observed1, observed2));
     }
 
diff --git a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/stat/inference/OneWayAnova.java b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/stat/inference/OneWayAnova.java
index 2643270e0..8b93f1775 100644
--- a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/stat/inference/OneWayAnova.java
+++ b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/stat/inference/OneWayAnova.java
@@ -104,9 +104,9 @@ public class OneWayAnova {
      * {@link org.apache.commons.statistics.distribution.FDistribution
      * commons-math F Distribution implementation} to estimate the exact
      * p-value, using the formula<pre>
-     *   p = 1 - cumulativeProbability(F)</pre>
-     * where <code>F</code> is the F value and <code>cumulativeProbability</code>
-     * is the commons-math implementation of the F distribution.
+     *   p = survivalProbability(F)</pre>
+     * where <code>F</code> is the F value and <code>survivalProbability = 1 - cumulativeProbability</code>
+     * is the commons-statistics implementation of the F distribution.
      *
      * @param categoryData <code>Collection</code> of <code>double[]</code>
      * arrays each containing data for one category
@@ -126,7 +126,7 @@ public class OneWayAnova {
         // No try-catch or advertised exception because args are valid
         // pass a null rng to avoid unneeded overhead as we will not sample from this distribution
         final FDistribution fdist = FDistribution.of(a.dfbg, a.dfwg);
-        return 1.0 - fdist.cumulativeProbability(a.f);
+        return fdist.survivalProbability(a.f);
     }
 
     /**
@@ -142,9 +142,9 @@ public class OneWayAnova {
      * {@link org.apache.commons.statistics.distribution.FDistribution
      * commons-math F Distribution implementation} to estimate the exact
      * p-value, using the formula<pre>
-     *   p = 1 - cumulativeProbability(F)</pre>
-     * where <code>F</code> is the F value and <code>cumulativeProbability</code>
-     * is the commons-math implementation of the F distribution.
+     *   p = survivalProbability(F)</pre>
+     * where <code>F</code> is the F value and <code>survivalProbability = 1 - cumulativeProbability</code>
+     * is the commons-statistics implementation of the F distribution.
      *
      * @param categoryData <code>Collection</code> of {@link SummaryStatistics}
      * each containing data for one category
@@ -167,7 +167,7 @@ public class OneWayAnova {
         final AnovaStats a = anovaStats(categoryData, allowOneElementData);
         // pass a null rng to avoid unneeded overhead as we will not sample from this distribution
         final FDistribution fdist = FDistribution.of(a.dfbg, a.dfwg);
-        return 1.0 - fdist.cumulativeProbability(a.f);
+        return fdist.survivalProbability(a.f);
     }
 
     /**
@@ -221,9 +221,9 @@ public class OneWayAnova {
      * {@link org.apache.commons.statistics.distribution.FDistribution
      * commons-math F Distribution implementation} to estimate the exact
      * p-value, using the formula<pre>
-     *   p = 1 - cumulativeProbability(F)</pre>
-     * where <code>F</code> is the F value and <code>cumulativeProbability</code>
-     * is the commons-math implementation of the F distribution.
+     *   p = survivalProbability(F)</pre>
+     * where <code>F</code> is the F value and <code>survivalProbability = 1 - cumulativeProbability</code>
+     * is the commons-statistics implementation of the F distribution.
      * <p>True is returned iff the estimated p-value is less than alpha.</p>
      *
      * @param categoryData <code>Collection</code> of <code>double[]</code>
diff --git a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/stat/interval/AgrestiCoullInterval.java b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/stat/interval/AgrestiCoullInterval.java
index 1002abb7e..95d4caea6 100644
--- a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/stat/interval/AgrestiCoullInterval.java
+++ b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/stat/interval/AgrestiCoullInterval.java
@@ -35,7 +35,7 @@ public class AgrestiCoullInterval implements BinomialConfidenceInterval {
         IntervalUtils.checkParameters(numberOfTrials, numberOfSuccesses, confidenceLevel);
         final double alpha = (1.0 - confidenceLevel) / 2;
         final NormalDistribution normalDistribution = NormalDistribution.of(0, 1);
-        final double z = normalDistribution.inverseCumulativeProbability(1 - alpha);
+        final double z = normalDistribution.inverseSurvivalProbability(alpha);
         final double zSquared = JdkMath.pow(z, 2);
         final double modifiedNumberOfTrials = numberOfTrials + zSquared;
         final double modifiedSuccessesRatio = (1.0 / modifiedNumberOfTrials) * (numberOfSuccesses + 0.5 * zSquared);
diff --git a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/stat/interval/ClopperPearsonInterval.java b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/stat/interval/ClopperPearsonInterval.java
index a28522cdc..b8b23034e 100644
--- a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/stat/interval/ClopperPearsonInterval.java
+++ b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/stat/interval/ClopperPearsonInterval.java
@@ -42,7 +42,7 @@ public class ClopperPearsonInterval implements BinomialConfidenceInterval {
         if (numberOfSuccesses > 0) {
             final FDistribution distributionLowerBound = FDistribution.of(2.0 * (numberOfTrials - numberOfSuccesses + 1),
                                                                           2.0 * numberOfSuccesses);
-            final double fValueLowerBound = distributionLowerBound.inverseCumulativeProbability(1 - alpha);
+            final double fValueLowerBound = distributionLowerBound.inverseSurvivalProbability(alpha);
             lowerBound = numberOfSuccesses /
                 (numberOfSuccesses + (numberOfTrials - numberOfSuccesses + 1) * fValueLowerBound);
         }
@@ -50,7 +50,7 @@ public class ClopperPearsonInterval implements BinomialConfidenceInterval {
         if (numberOfSuccesses < numberOfTrials) {
             final FDistribution distributionUpperBound = FDistribution.of(2.0 * (numberOfSuccesses + 1),
                                                                           2.0 * (numberOfTrials - numberOfSuccesses));
-            final double fValueUpperBound = distributionUpperBound.inverseCumulativeProbability(1 - alpha);
+            final double fValueUpperBound = distributionUpperBound.inverseSurvivalProbability(alpha);
             upperBound = (numberOfSuccesses + 1) * fValueUpperBound /
                 (numberOfTrials - numberOfSuccesses + (numberOfSuccesses + 1) * fValueUpperBound);
         }
diff --git a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/stat/interval/NormalApproximationInterval.java b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/stat/interval/NormalApproximationInterval.java
index fb085432d..8871fcaa3 100644
--- a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/stat/interval/NormalApproximationInterval.java
+++ b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/stat/interval/NormalApproximationInterval.java
@@ -37,7 +37,7 @@ public class NormalApproximationInterval implements BinomialConfidenceInterval {
         final double mean = (double) numberOfSuccesses / (double) numberOfTrials;
         final double alpha = (1.0 - confidenceLevel) / 2;
         final NormalDistribution normalDistribution = NormalDistribution.of(0, 1);
-        final double difference = normalDistribution.inverseCumulativeProbability(1 - alpha) *
+        final double difference = normalDistribution.inverseSurvivalProbability(alpha) *
                                   JdkMath.sqrt(1.0 / numberOfTrials * mean * (1 - mean));
         return new ConfidenceInterval(mean - difference, mean + difference, confidenceLevel);
     }
diff --git a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/stat/interval/WilsonScoreInterval.java b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/stat/interval/WilsonScoreInterval.java
index e08d58714..c57c122df 100644
--- a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/stat/interval/WilsonScoreInterval.java
+++ b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/stat/interval/WilsonScoreInterval.java
@@ -33,7 +33,7 @@ public class WilsonScoreInterval implements BinomialConfidenceInterval {
         IntervalUtils.checkParameters(numberOfTrials, numberOfSuccesses, confidenceLevel);
         final double alpha = (1 - confidenceLevel) / 2;
         final NormalDistribution normalDistribution = NormalDistribution.of(0, 1);
-        final double z = normalDistribution.inverseCumulativeProbability(1 - alpha);
+        final double z = normalDistribution.inverseSurvivalProbability(alpha);
         final double zSquared = z * z;
         final double oneOverNumTrials = 1d / numberOfTrials;
         final double zSquaredOverNumTrials = zSquared * oneOverNumTrials;
diff --git a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/stat/regression/SimpleRegression.java b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/stat/regression/SimpleRegression.java
index ada0c3b2a..44d73219c 100644
--- a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/stat/regression/SimpleRegression.java
+++ b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/stat/regression/SimpleRegression.java
@@ -695,7 +695,7 @@ public class SimpleRegression implements UpdatingMultipleLinearRegression {
         // No advertised NotStrictlyPositiveException here - will return NaN above
         TDistribution distribution = TDistribution.of(n - 2d);
         return getSlopeStdErr() *
-            distribution.inverseCumulativeProbability(1d - alpha / 2d);
+            distribution.inverseSurvivalProbability(alpha / 2d);
     }
 
     /**
@@ -726,7 +726,7 @@ public class SimpleRegression implements UpdatingMultipleLinearRegression {
         }
         // No advertised NotStrictlyPositiveException here - will return NaN above
         TDistribution distribution = TDistribution.of(n - 2d);
-        return 2d * (1.0 - distribution.cumulativeProbability(
+        return 2d * (distribution.survivalProbability(
                     JdkMath.abs(getSlope()) / getSlopeStdErr()));
     }
 
diff --git a/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/stat/correlation/PearsonsCorrelationTest.java b/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/stat/correlation/PearsonsCorrelationTest.java
index 87f5631f9..cb1d36a6b 100644
--- a/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/stat/correlation/PearsonsCorrelationTest.java
+++ b/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/stat/correlation/PearsonsCorrelationTest.java
@@ -237,7 +237,7 @@ public class PearsonsCorrelationTest {
         for (int i = 0; i < 5; i++) {
             for (int j = 0; j < i; j++) {
                 double t = JdkMath.abs(rValues.getEntry(i, j)) / stdErrors.getEntry(i, j);
-                double p = 2 * (1 - tDistribution.cumulativeProbability(t));
+                double p = 2 * tDistribution.survivalProbability(t);
                 Assert.assertEquals(p, pValues.getEntry(i, j), 10E-15);
             }
         }


[commons-math] 04/05: Use method reference for the sampler

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

commit abb32b5a6234dc1aff70e27d83ef80870bbcc450
Author: aherbert <ah...@apache.org>
AuthorDate: Fri Dec 2 13:56:34 2022 +0000

    Use method reference for the sampler
---
 .../legacy/distribution/EnumeratedIntegerDistribution.java   | 12 +-----------
 .../legacy/distribution/EnumeratedRealDistribution.java      | 12 +-----------
 2 files changed, 2 insertions(+), 22 deletions(-)

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 8d40da2e4..010e82e86 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
@@ -218,16 +218,6 @@ public class EnumeratedIntegerDistribution extends AbstractIntegerDistribution {
      */
     @Override
     public DiscreteDistribution.Sampler createSampler(final UniformRandomProvider rng) {
-        return new DiscreteDistribution.Sampler() {
-            /** Delegate. */
-            private final EnumeratedDistribution<Integer>.Sampler inner =
-                innerDistribution.createSampler(rng);
-
-            /** {@inheritDoc} */
-            @Override
-            public int sample() {
-                return inner.sample();
-            }
-        };
+        return innerDistribution.createSampler(rng)::sample;
     }
 }
diff --git a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/distribution/EnumeratedRealDistribution.java b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/distribution/EnumeratedRealDistribution.java
index 36f70183b..2d33dca8b 100644
--- a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/distribution/EnumeratedRealDistribution.java
+++ b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/distribution/EnumeratedRealDistribution.java
@@ -249,16 +249,6 @@ public class EnumeratedRealDistribution
     /** {@inheritDoc} */
     @Override
     public ContinuousDistribution.Sampler createSampler(final UniformRandomProvider rng) {
-        return new ContinuousDistribution.Sampler() {
-            /** Delegate. */
-            private final EnumeratedDistribution<Double>.Sampler inner =
-                innerDistribution.createSampler(rng);
-
-            /** {@inheritDoc} */
-            @Override
-            public double sample() {
-                return inner.sample();
-            }
-        };
+        return innerDistribution.createSampler(rng)::sample;
     }
 }


[commons-math] 03/05: Use Map.merge

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

commit 9fcd3885dc3ea5dbe18d572d2c49e55c30857d63
Author: aherbert <ah...@apache.org>
AuthorDate: Fri Dec 2 13:54:50 2022 +0000

    Use Map.merge
---
 .../math4/legacy/distribution/EnumeratedIntegerDistribution.java    | 6 +-----
 .../math4/legacy/distribution/EnumeratedRealDistribution.java       | 6 +-----
 2 files changed, 2 insertions(+), 10 deletions(-)

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 dce14aad6..8d40da2e4 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
@@ -80,11 +80,7 @@ public class EnumeratedIntegerDistribution extends AbstractIntegerDistribution {
     public EnumeratedIntegerDistribution(final int[] data) {
         final Map<Integer, Integer> dataMap = new HashMap<>();
         for (int value : data) {
-            Integer count = dataMap.get(value);
-            if (count == null) {
-                count = 0;
-            }
-            dataMap.put(value, ++count);
+            dataMap.merge(value, 1, Integer::sum);
         }
         final int massPoints = dataMap.size();
         final double denom = data.length;
diff --git a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/distribution/EnumeratedRealDistribution.java b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/distribution/EnumeratedRealDistribution.java
index 4dad1247c..36f70183b 100644
--- a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/distribution/EnumeratedRealDistribution.java
+++ b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/distribution/EnumeratedRealDistribution.java
@@ -82,11 +82,7 @@ public class EnumeratedRealDistribution
     public EnumeratedRealDistribution(final double[] data) {
         final Map<Double, Integer> dataMap = new HashMap<>();
         for (double value : data) {
-            Integer count = dataMap.get(value);
-            if (count == null) {
-                count = 0;
-            }
-            dataMap.put(value, ++count);
+            dataMap.merge(value, 1, Integer::sum);
         }
         final int massPoints = dataMap.size();
         final double denom = data.length;


[commons-math] 01/05: Use method reference to create a sampler

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

commit 6d767220edb7a5c821b37834250bfd4d9ce562b7
Author: aherbert <ah...@apache.org>
AuthorDate: Fri Dec 2 13:33:39 2022 +0000

    Use method reference to create a sampler
---
 .../distribution/AbstractIntegerDistribution.java  | 30 ++--------------------
 .../distribution/AbstractRealDistribution.java     | 30 ++--------------------
 2 files changed, 4 insertions(+), 56 deletions(-)

diff --git a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/distribution/AbstractIntegerDistribution.java b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/distribution/AbstractIntegerDistribution.java
index 15a7c5340..b18246022 100644
--- a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/distribution/AbstractIntegerDistribution.java
+++ b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/distribution/AbstractIntegerDistribution.java
@@ -23,8 +23,6 @@ import org.apache.commons.math4.legacy.exception.OutOfRangeException;
 import org.apache.commons.math4.legacy.exception.util.LocalizedFormats;
 import org.apache.commons.rng.UniformRandomProvider;
 import org.apache.commons.rng.sampling.distribution.InverseTransformDiscreteSampler;
-import org.apache.commons.rng.sampling.distribution.DiscreteInverseCumulativeProbabilityFunction;
-import org.apache.commons.rng.sampling.distribution.DiscreteSampler;
 import org.apache.commons.math4.core.jdkmath.JdkMath;
 
 /**
@@ -194,31 +192,7 @@ public abstract class AbstractIntegerDistribution
     /**{@inheritDoc} */
     @Override
     public DiscreteDistribution.Sampler createSampler(final UniformRandomProvider rng) {
-        return new DiscreteDistribution.Sampler() {
-            /**
-             * Inversion method distribution sampler.
-             */
-            private final DiscreteSampler sampler =
-                new InverseTransformDiscreteSampler(rng, createICPF());
-
-            /** {@inheritDoc} */
-            @Override
-            public int sample() {
-                return sampler.sample();
-            }
-        };
-    }
-
-    /**
-     * @return an instance for use by {@link #createSampler(UniformRandomProvider)}
-     */
-    private DiscreteInverseCumulativeProbabilityFunction createICPF() {
-        return new DiscreteInverseCumulativeProbabilityFunction() {
-            /** {@inheritDoc} */
-            @Override
-            public int inverseCumulativeProbability(double p) {
-                return AbstractIntegerDistribution.this.inverseCumulativeProbability(p);
-            }
-        };
+        // Inversion method distribution sampler.
+        return InverseTransformDiscreteSampler.of(rng, this::inverseCumulativeProbability)::sample;
     }
 }
diff --git a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/distribution/AbstractRealDistribution.java b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/distribution/AbstractRealDistribution.java
index 632d65461..30bfafb39 100644
--- a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/distribution/AbstractRealDistribution.java
+++ b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/distribution/AbstractRealDistribution.java
@@ -24,8 +24,6 @@ import org.apache.commons.math4.legacy.exception.OutOfRangeException;
 import org.apache.commons.math4.legacy.exception.util.LocalizedFormats;
 import org.apache.commons.rng.UniformRandomProvider;
 import org.apache.commons.rng.sampling.distribution.InverseTransformContinuousSampler;
-import org.apache.commons.rng.sampling.distribution.ContinuousInverseCumulativeProbabilityFunction;
-import org.apache.commons.rng.sampling.distribution.ContinuousSampler;
 import org.apache.commons.math4.core.jdkmath.JdkMath;
 
 /**
@@ -211,31 +209,7 @@ public abstract class AbstractRealDistribution
     /**{@inheritDoc} */
     @Override
     public ContinuousDistribution.Sampler createSampler(final UniformRandomProvider rng) {
-        return new ContinuousDistribution.Sampler() {
-            /**
-             * Inversion method distribution sampler.
-             */
-            private final ContinuousSampler sampler =
-                new InverseTransformContinuousSampler(rng, createICPF());
-
-            /** {@inheritDoc} */
-            @Override
-            public double sample() {
-                return sampler.sample();
-            }
-        };
-    }
-
-    /**
-     * @return an instance for use by {@link #createSampler(UniformRandomProvider)}
-     */
-    private ContinuousInverseCumulativeProbabilityFunction createICPF() {
-        return new ContinuousInverseCumulativeProbabilityFunction() {
-            /** {@inheritDoc} */
-            @Override
-            public double inverseCumulativeProbability(double p) {
-                return AbstractRealDistribution.this.inverseCumulativeProbability(p);
-            }
-        };
+        // Inversion method distribution sampler.
+        return InverseTransformContinuousSampler.of(rng, this::inverseCumulativeProbability)::sample;
     }
 }


[commons-math] 05/05: Use a LinkedHashMap to respect the order of the input data

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

commit ab9b0b0c2d0913e7f2a894650255564a40b05277
Author: aherbert <ah...@apache.org>
AuthorDate: Fri Dec 2 15:08:03 2022 +0000

    Use a LinkedHashMap to respect the order of the input data
    
    Note: The int/real enumerated distributions do not specify that the
    input must be sorted. This change supports the legacy behaviour enforced
    by the unit test which is assuming input values are processed in
    encounter order (which happens to be sorted).
    
    Given int and double have a natural ordering it may be better to update
    the distribution to sort input values. However this would contradict the
    enumerated distribution which respects the input order of the list used
    in the constructor.
---
 .../math4/legacy/distribution/EnumeratedIntegerDistribution.java    | 6 +++---
 .../math4/legacy/distribution/EnumeratedRealDistribution.java       | 4 ++--
 2 files changed, 5 insertions(+), 5 deletions(-)

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 010e82e86..0e0cf1b83 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
@@ -17,7 +17,7 @@
 package org.apache.commons.math4.legacy.distribution;
 
 import java.util.ArrayList;
-import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -68,7 +68,7 @@ public class EnumeratedIntegerDistribution extends AbstractIntegerDistribution {
                NotFiniteNumberException,
                NotANumberException {
         innerDistribution = new EnumeratedDistribution<>(createDistribution(singletons,
-                                                                                   probabilities));
+                                                                            probabilities));
     }
 
     /**
@@ -78,7 +78,7 @@ public class EnumeratedIntegerDistribution extends AbstractIntegerDistribution {
      * @param data input dataset
      */
     public EnumeratedIntegerDistribution(final int[] data) {
-        final Map<Integer, Integer> dataMap = new HashMap<>();
+        final Map<Integer, Integer> dataMap = new LinkedHashMap<>();
         for (int value : data) {
             dataMap.merge(value, 1, Integer::sum);
         }
diff --git a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/distribution/EnumeratedRealDistribution.java b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/distribution/EnumeratedRealDistribution.java
index 2d33dca8b..77385c8d4 100644
--- a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/distribution/EnumeratedRealDistribution.java
+++ b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/distribution/EnumeratedRealDistribution.java
@@ -17,7 +17,7 @@
 package org.apache.commons.math4.legacy.distribution;
 
 import java.util.ArrayList;
-import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -80,7 +80,7 @@ public class EnumeratedRealDistribution
      * @param data input dataset
      */
     public EnumeratedRealDistribution(final double[] data) {
-        final Map<Double, Integer> dataMap = new HashMap<>();
+        final Map<Double, Integer> dataMap = new LinkedHashMap<>();
         for (double value : data) {
             dataMap.merge(value, 1, Integer::sum);
         }