You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by er...@apache.org on 2018/01/25 19:07:07 UTC

[19/21] [math] MATH-1443: Depend on "Commons Statistics".

MATH-1443: Depend on "Commons Statistics".

Simplify classes that remain in "Commons Math".


Project: http://git-wip-us.apache.org/repos/asf/commons-math/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-math/commit/b1a8299a
Tree: http://git-wip-us.apache.org/repos/asf/commons-math/tree/b1a8299a
Diff: http://git-wip-us.apache.org/repos/asf/commons-math/diff/b1a8299a

Branch: refs/heads/master
Commit: b1a8299ad223c3b2552f6d03e51c2ecba5df46ed
Parents: d2359ce
Author: Gilles <er...@apache.org>
Authored: Thu Jan 25 19:20:03 2018 +0100
Committer: Gilles <er...@apache.org>
Committed: Thu Jan 25 19:20:03 2018 +0100

----------------------------------------------------------------------
 .../distribution/AbstractRealDistribution.java  |  11 +-
 .../distribution/EmpiricalDistribution.java     |   9 +-
 .../math4/distribution/RealDistribution.java    | 157 +------------------
 .../AbstractRealDistributionTest.java           |  12 +-
 .../distribution/EmpiricalDistributionTest.java |  12 +-
 .../RealDistributionAbstractTest.java           |   4 +-
 6 files changed, 26 insertions(+), 179 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-math/blob/b1a8299a/src/main/java/org/apache/commons/math4/distribution/AbstractRealDistribution.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/math4/distribution/AbstractRealDistribution.java b/src/main/java/org/apache/commons/math4/distribution/AbstractRealDistribution.java
index c00039a..f4b0eac 100644
--- a/src/main/java/org/apache/commons/math4/distribution/AbstractRealDistribution.java
+++ b/src/main/java/org/apache/commons/math4/distribution/AbstractRealDistribution.java
@@ -46,7 +46,8 @@ import org.apache.commons.math4.util.FastMath;
  * @since 3.0
  */
 public abstract class AbstractRealDistribution
-    implements RealDistribution, Serializable {
+    implements RealDistribution,
+               Serializable {
     /** Default absolute accuracy for inverse cumulative computation. */
     public static final double SOLVER_DEFAULT_ABSOLUTE_ACCURACY = 1e-6;
     /** Serializable version identifier */
@@ -131,8 +132,8 @@ public abstract class AbstractRealDistribution
             return upperBound;
         }
 
-        final double mu = getNumericalMean();
-        final double sig = FastMath.sqrt(getNumericalVariance());
+        final double mu = getMean();
+        final double sig = FastMath.sqrt(getVariance());
         final boolean chebyshevApplies;
         chebyshevApplies = !(Double.isInfinite(mu) || Double.isNaN(mu) ||
                              Double.isInfinite(sig) || Double.isNaN(sig));
@@ -245,8 +246,8 @@ public abstract class AbstractRealDistribution
 
     /**{@inheritDoc} */
     @Override
-    public Sampler createSampler(final UniformRandomProvider rng) {
-        return new RealDistribution.Sampler() {
+    public ContinuousDistribution.Sampler createSampler(final UniformRandomProvider rng) {
+        return new ContinuousDistribution.Sampler() {
             /**
              * Inversion method distribution sampler.
              */

http://git-wip-us.apache.org/repos/asf/commons-math/blob/b1a8299a/src/main/java/org/apache/commons/math4/distribution/EmpiricalDistribution.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/math4/distribution/EmpiricalDistribution.java b/src/main/java/org/apache/commons/math4/distribution/EmpiricalDistribution.java
index 97f6561..82357e9 100644
--- a/src/main/java/org/apache/commons/math4/distribution/EmpiricalDistribution.java
+++ b/src/main/java/org/apache/commons/math4/distribution/EmpiricalDistribution.java
@@ -100,7 +100,8 @@ import org.apache.commons.math4.util.MathUtils;
  * </ul>
  *
  */
-public class EmpiricalDistribution extends AbstractRealDistribution {
+public class EmpiricalDistribution extends AbstractRealDistribution
+    implements ContinuousDistribution {
 
     /** Default bin count */
     public static final int DEFAULT_BIN_COUNT = 1000;
@@ -623,7 +624,7 @@ public class EmpiricalDistribution extends AbstractRealDistribution {
      * @since 3.1
      */
     @Override
-    public double getNumericalMean() {
+    public double getMean() {
        return sampleStats.getMean();
     }
 
@@ -632,7 +633,7 @@ public class EmpiricalDistribution extends AbstractRealDistribution {
      * @since 3.1
      */
     @Override
-    public double getNumericalVariance() {
+    public double getVariance() {
         return sampleStats.getVariance();
     }
 
@@ -665,7 +666,7 @@ public class EmpiricalDistribution extends AbstractRealDistribution {
 
     /**{@inheritDoc} */
     @Override
-    public RealDistribution.Sampler createSampler(final UniformRandomProvider rng) {
+    public ContinuousDistribution.Sampler createSampler(final UniformRandomProvider rng) {
         if (!loaded) {
             throw new MathIllegalStateException(LocalizedFormats.DISTRIBUTION_NOT_LOADED);
         }

http://git-wip-us.apache.org/repos/asf/commons-math/blob/b1a8299a/src/main/java/org/apache/commons/math4/distribution/RealDistribution.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/math4/distribution/RealDistribution.java b/src/main/java/org/apache/commons/math4/distribution/RealDistribution.java
index 45511e1..225f817 100644
--- a/src/main/java/org/apache/commons/math4/distribution/RealDistribution.java
+++ b/src/main/java/org/apache/commons/math4/distribution/RealDistribution.java
@@ -26,159 +26,4 @@ import org.apache.commons.rng.UniformRandomProvider;
  *
  * @since 3.0
  */
-public interface RealDistribution {
-    /**
-     * For a random variable {@code X} whose values are distributed according
-     * to this distribution, this method returns {@code P(X = x)}. In other
-     * words, this method represents the probability mass function (PMF)
-     * for the distribution.
-     *
-     * @param x the point at which the PMF is evaluated
-     * @return the value of the probability mass function at point {@code x}
-     */
-    double probability(double x);
-
-    /**
-     * For a random variable {@code X} whose values are distributed according
-     * to this distribution, this method returns {@code P(x0 < X <= x1)}.
-     *
-     * @param x0 the exclusive lower bound
-     * @param x1 the inclusive upper bound
-     * @return the probability that a random variable with this distribution
-     * takes a value between {@code x0} and {@code x1},
-     * excluding the lower and including the upper endpoint
-     * @throws NumberIsTooLargeException if {@code x0 > x1}
-     *
-     * @since 4.0, was previously named cumulativeProbability
-     */
-    double probability(double x0, double x1) throws NumberIsTooLargeException;
-
-    /**
-     * Returns the probability density function (PDF) of this distribution
-     * evaluated at the specified point {@code x}. In general, the PDF is
-     * the derivative of the {@link #cumulativeProbability(double) CDF}.
-     * If the derivative does not exist at {@code x}, then an appropriate
-     * replacement should be returned, e.g. {@code Double.POSITIVE_INFINITY},
-     * {@code Double.NaN}, or  the limit inferior or limit superior of the
-     * difference quotient.
-     *
-     * @param x the point at which the PDF is evaluated
-     * @return the value of the probability density function at point {@code x}
-     */
-    double density(double x);
-
-    /**
-     * Returns the natural logarithm of the probability density function
-     * (PDF) of this distribution evaluated at the specified point {@code x}.
-     * In general, the PDF is the derivative of the {@link #cumulativeProbability(double) CDF}.
-     * If the derivative does not exist at {@code x}, then an appropriate replacement
-     * should be returned, e.g. {@code Double.POSITIVE_INFINITY}, {@code Double.NaN},
-     * or the limit inferior or limit superior of the difference quotient. Note that
-     * due to the floating point precision and under/overflow issues, this method will
-     * for some distributions be more precise and faster than computing the logarithm of
-     * {@link #density(double)}.
-     *
-     * @param x the point at which the PDF is evaluated
-     * @return the logarithm of the value of the probability density function at point {@code x}
-     * @since 4.0
-     */
-    double logDensity(double x);
-
-    /**
-     * For a random variable {@code X} whose values are distributed according
-     * to this distribution, this method returns {@code P(X <= x)}. In other
-     * words, this method represents the (cumulative) distribution function
-     * (CDF) for this distribution.
-     *
-     * @param x the point at which the CDF is evaluated
-     * @return the probability that a random variable with this
-     * distribution takes a value less than or equal to {@code x}
-     */
-    double cumulativeProbability(double x);
-
-    /**
-     * Computes the quantile function of this distribution. For a random
-     * variable {@code X} distributed according to this distribution, the
-     * returned value is
-     * <ul>
-     * <li>{@code inf{x in R | P(X<=x) >= p}} for {@code 0 < p <= 1},</li>
-     * <li>{@code inf{x in R | P(X<=x) > 0}} for {@code p = 0}.</li>
-     * </ul>
-     *
-     * @param p the cumulative probability
-     * @return the smallest {@code p}-quantile of this distribution
-     * (largest 0-quantile for {@code p = 0})
-     * @throws OutOfRangeException if {@code p < 0} or {@code p > 1}
-     */
-    double inverseCumulativeProbability(double p) throws OutOfRangeException;
-
-    /**
-     * Use this method to get the numerical value of the mean of this
-     * distribution.
-     *
-     * @return the mean or {@code Double.NaN} if it is not defined
-     */
-    double getNumericalMean();
-
-    /**
-     * Use this method to get the numerical value of the variance of this
-     * distribution.
-     *
-     * @return the variance (possibly {@code Double.POSITIVE_INFINITY} as
-     * for certain cases in {@link TDistribution}) or {@code Double.NaN} if it
-     * is not defined
-     */
-    double getNumericalVariance();
-
-    /**
-     * Access the lower bound of the support. This method must return the same
-     * value as {@code inverseCumulativeProbability(0)}. In other words, this
-     * method must return
-     * <p>{@code inf {x in R | P(X <= x) > 0}}.</p>
-     *
-     * @return lower bound of the support (might be
-     * {@code Double.NEGATIVE_INFINITY})
-     */
-    double getSupportLowerBound();
-
-    /**
-     * Access the upper bound of the support. This method must return the same
-     * value as {@code inverseCumulativeProbability(1)}. In other words, this
-     * method must return
-     * <p>{@code inf {x in R | P(X <= x) = 1}}.</p>
-     *
-     * @return upper bound of the support (might be
-     * {@code Double.POSITIVE_INFINITY})
-     */
-    double getSupportUpperBound();
-
-    /**
-     * Use this method to get information about whether the support is connected,
-     * i.e. whether all values between the lower and upper bound of the support
-     * are included in the support.
-     *
-     * @return whether the support is connected or not
-     */
-    boolean isSupportConnected();
-
-    /**
-     * Creates a sampler.
-     *
-     * @param rng Generator of uniformly distributed numbers.
-     * @return a sampler that produces random numbers according this
-     * distribution.
-     */
-    Sampler createSampler(UniformRandomProvider rng);
-
-    /**
-     * Sampling functionality.
-     */
-    interface Sampler extends ContinuousDistribution.Sampler {
-        /**
-         * Generates a random value sampled from this distribution.
-         *
-         * @return a random value.
-         */
-        double sample();
-    }
-}
+public interface RealDistribution extends ContinuousDistribution {}

http://git-wip-us.apache.org/repos/asf/commons-math/blob/b1a8299a/src/test/java/org/apache/commons/math4/distribution/AbstractRealDistributionTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/commons/math4/distribution/AbstractRealDistributionTest.java b/src/test/java/org/apache/commons/math4/distribution/AbstractRealDistributionTest.java
index 60645c2..396dc4a 100644
--- a/src/test/java/org/apache/commons/math4/distribution/AbstractRealDistributionTest.java
+++ b/src/test/java/org/apache/commons/math4/distribution/AbstractRealDistributionTest.java
@@ -69,13 +69,13 @@ public class AbstractRealDistributionTest {
             }
 
             @Override
-            public double getNumericalMean() {
+            public double getMean() {
                 return ((x0 + x1) * p12 + (x2 + x3) * (1.0 - p12)) / 2.0;
             }
 
             @Override
-            public double getNumericalVariance() {
-                final double meanX = getNumericalMean();
+            public double getVariance() {
+                final double meanX = getMean();
                 final double meanX2;
                 meanX2 = ((x0 * x0 + x0 * x1 + x1 * x1) * p12 + (x2 * x2 + x2
                         * x3 + x3 * x3)
@@ -155,7 +155,7 @@ public class AbstractRealDistributionTest {
             }
 
             @Override
-            public double getNumericalMean() {
+            public double getMean() {
                 final UnivariateFunction f = new UnivariateFunction() {
 
                     @Override
@@ -168,8 +168,8 @@ public class AbstractRealDistributionTest {
             }
 
             @Override
-            public double getNumericalVariance() {
-                final double meanX = getNumericalMean();
+            public double getVariance() {
+                final double meanX = getMean();
                 final UnivariateFunction f = new UnivariateFunction() {
 
                     @Override

http://git-wip-us.apache.org/repos/asf/commons-math/blob/b1a8299a/src/test/java/org/apache/commons/math4/distribution/EmpiricalDistributionTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/commons/math4/distribution/EmpiricalDistributionTest.java b/src/test/java/org/apache/commons/math4/distribution/EmpiricalDistributionTest.java
index c3c0071..299af66 100644
--- a/src/test/java/org/apache/commons/math4/distribution/EmpiricalDistributionTest.java
+++ b/src/test/java/org/apache/commons/math4/distribution/EmpiricalDistributionTest.java
@@ -270,7 +270,7 @@ public final class EmpiricalDistributionTest extends RealDistributionAbstractTes
 
     private void tstGen(double tolerance)throws Exception {
         empiricalDistribution.load(url);
-        RealDistribution.Sampler sampler
+        ContinuousDistribution.Sampler sampler
             = empiricalDistribution.createSampler(RandomSource.create(RandomSource.WELL_19937_C, 1000));
         SummaryStatistics stats = new SummaryStatistics();
         for (int i = 1; i < 1000; i++) {
@@ -282,7 +282,7 @@ public final class EmpiricalDistributionTest extends RealDistributionAbstractTes
 
     private void tstDoubleGen(double tolerance)throws Exception {
         empiricalDistribution2.load(dataArray);
-        RealDistribution.Sampler sampler
+        ContinuousDistribution.Sampler sampler
             = empiricalDistribution2.createSampler(RandomSource.create(RandomSource.WELL_19937_C, 1000));
         SummaryStatistics stats = new SummaryStatistics();
         for (int i = 1; i < 1000; i++) {
@@ -413,7 +413,7 @@ public final class EmpiricalDistributionTest extends RealDistributionAbstractTes
         }
         EmpiricalDistribution dist = new EmpiricalDistribution(10);
         dist.load(data);
-        RealDistribution.Sampler sampler
+        ContinuousDistribution.Sampler sampler
             = dist.createSampler(RandomSource.create(RandomSource.WELL_19937_C, 1000));
         for (int i = 0; i < 1000; i++) {
             final double dev = sampler.sample();
@@ -430,7 +430,7 @@ public final class EmpiricalDistributionTest extends RealDistributionAbstractTes
         final double[] data = {0, 0, 1, 1};
         EmpiricalDistribution dist = new EmpiricalDistribution(2);
         dist.load(data);
-        RealDistribution.Sampler sampler
+        ContinuousDistribution.Sampler sampler
             = dist.createSampler(RandomSource.create(RandomSource.WELL_19937_C, 1000));
         for (int i = 0; i < 1000; i++) {
             final double dev = sampler.sample();
@@ -473,7 +473,7 @@ public final class EmpiricalDistributionTest extends RealDistributionAbstractTes
         final EmpiricalDistribution dist = new ConstantKernelEmpiricalDistribution(5);
         final double[] data = {1d,2d,3d, 4d,5d,6d, 7d,8d,9d, 10d,11d,12d, 13d,14d,15d};
         dist.load(data);
-        RealDistribution.Sampler sampler
+        ContinuousDistribution.Sampler sampler
             = dist.createSampler(RandomSource.create(RandomSource.WELL_19937_C, 1000));
         // Bin masses concentrated on 2, 5, 8, 11, 14 <- effectively discrete uniform distribution over these
         double[] values = {2d, 5d, 8d, 11d, 14d};
@@ -501,7 +501,7 @@ public final class EmpiricalDistributionTest extends RealDistributionAbstractTes
         final EmpiricalDistribution dist = new UniformKernelEmpiricalDistribution(5);
         final double[] data = {1d,2d,3d, 4d,5d,6d, 7d,8d,9d, 10d,11d,12d, 13d,14d,15d};
         dist.load(data);
-        RealDistribution.Sampler sampler
+        ContinuousDistribution.Sampler sampler
             = dist.createSampler(RandomSource.create(RandomSource.WELL_19937_C, 1000));
         // Kernels are uniform distributions on [1,3], [4,6], [7,9], [10,12], [13,15]
         final double bounds[] = {3d, 6d, 9d, 12d};

http://git-wip-us.apache.org/repos/asf/commons-math/blob/b1a8299a/src/test/java/org/apache/commons/math4/distribution/RealDistributionAbstractTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/commons/math4/distribution/RealDistributionAbstractTest.java b/src/test/java/org/apache/commons/math4/distribution/RealDistributionAbstractTest.java
index 8d7ac9f..ea6d392 100644
--- a/src/test/java/org/apache/commons/math4/distribution/RealDistributionAbstractTest.java
+++ b/src/test/java/org/apache/commons/math4/distribution/RealDistributionAbstractTest.java
@@ -391,11 +391,11 @@ public abstract class RealDistributionAbstractTest {
         // generator, using a fixed seed for deterministic results.
         final long seed = 123;
         RandomSource source = RandomSource.WELL_512_A;
-        RealDistribution.Sampler origSampler = distribution.createSampler(RandomSource.create(source, seed));
+        ContinuousDistribution.Sampler origSampler = distribution.createSampler(RandomSource.create(source, seed));
 
         // Clone the distribution.
         final RealDistribution cloned = deepClone();
-        RealDistribution.Sampler clonedSampler = cloned.createSampler(RandomSource.create(source, seed));
+        ContinuousDistribution.Sampler clonedSampler = cloned.createSampler(RandomSource.create(source, seed));
 
         // Make sure they still produce the same samples.
         Assert.assertEquals(origSampler.sample(),