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/09/22 17:50:37 UTC

[5/8] commons-rng git commit: Merge branch 'master' of git://github.com/apache/commons-rng into improvement-RNG-51

Merge branch 'master' of git://github.com/apache/commons-rng into improvement-RNG-51


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

Branch: refs/heads/master
Commit: 21927cbc3005e5a7f3a45c527597a5733d735b4d
Parents: 120d275 f559915
Author: aherbert <a....@sussex.ac.uk>
Authored: Fri Sep 21 14:55:37 2018 +0100
Committer: aherbert <a....@sussex.ac.uk>
Committed: Fri Sep 21 14:55:37 2018 +0100

----------------------------------------------------------------------
 README.md                                       |   2 +-
 RELEASE-NOTES.txt                               |  99 ++++++
 commons-rng-client-api/pom.xml                  |   5 +-
 commons-rng-client-api/src/site/site.xml        |   2 +
 commons-rng-core/pom.xml                        |   6 +-
 commons-rng-core/src/site/site.xml              |   2 +
 commons-rng-examples/examples-jmh/pom.xml       |   4 +-
 .../examples-jpms/jpms-app/pom.xml              |   6 +-
 .../examples-jpms/jpms-lib/pom.xml              |   4 +-
 commons-rng-examples/examples-jpms/pom.xml      |   4 +-
 commons-rng-examples/examples-jpms/runApp.sh    |   2 +-
 .../examples-quadrature/pom.xml                 |   4 +-
 commons-rng-examples/examples-sampling/pom.xml  |   4 +-
 commons-rng-examples/examples-stress/pom.xml    |   4 +-
 commons-rng-examples/pom.xml                    |  10 +-
 commons-rng-sampling/pom.xml                    |   8 +-
 .../commons/rng/sampling/UnitSphereSampler.java |  13 +
 .../AhrensDieterExponentialSampler.java         |  15 +-
 .../AhrensDieterMarsagliaTsangGammaSampler.java |  17 +-
 .../distribution/BoxMullerGaussianSampler.java  |  15 +-
 .../distribution/BoxMullerLogNormalSampler.java |  27 +-
 .../BoxMullerNormalizedGaussianSampler.java     |  11 +-
 .../sampling/distribution/ChengBetaSampler.java |  15 +-
 ...ousInverseCumulativeProbabilityFunction.java |   2 +
 .../distribution/ContinuousSampler.java         |   2 +
 .../distribution/ContinuousUniformSampler.java  |  11 +-
 ...eteInverseCumulativeProbabilityFunction.java |   2 +
 .../sampling/distribution/DiscreteSampler.java  |   2 +
 .../distribution/DiscreteUniformSampler.java    |  13 +-
 .../InverseTransformContinuousSampler.java      |  11 +-
 .../InverseTransformDiscreteSampler.java        |  11 +-
 .../InverseTransformParetoSampler.java          |  11 +-
 .../distribution/LargeMeanPoissonSampler.java   |  11 +-
 .../MarsagliaNormalizedGaussianSampler.java     |  11 +-
 .../distribution/NormalizedGaussianSampler.java |   2 +
 .../sampling/distribution/PoissonSampler.java   |   7 +-
 .../RejectionInversionZipfSampler.java          |   9 +-
 .../rng/sampling/distribution/SamplerBase.java  |   5 +
 .../distribution/SmallMeanPoissonSampler.java   |  11 +-
 .../ZigguratNormalizedGaussianSampler.java      |  49 ++-
 commons-rng-sampling/src/site/site.xml          |   2 +
 .../rng/sampling/UnitSphereSamplerTest.java     |  23 ++
 .../ZigguratNormalizedGaussianSamplerTest.java  |  48 +++
 commons-rng-simple/pom.xml                      |   6 +-
 commons-rng-simple/src/site/site.xml            |   2 +
 dist-archive/pom.xml                            | 342 ++++++++++++-------
 dist-archive/src/assembly/bin.xml               |  13 +
 dist-archive/src/assembly/src.xml               |   9 +-
 pom.xml                                         |  51 ++-
 src/assembly/bin.xml                            |  45 +--
 src/assembly/src.xml                            |  42 +--
 src/changes/changes.xml                         |  30 +-
 .../release-notes/RELEASE-NOTES-1.0.txt         |  22 ++
 .../release-notes/RELEASE-NOTES-1.1.txt         |  99 ++++++
 src/site/site.xml                               |   1 +
 src/site/xdoc/download_rng.xml                  |  28 +-
 src/site/xdoc/release-history.xml               |  38 +++
 57 files changed, 918 insertions(+), 332 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rng/blob/21927cbc/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/LargeMeanPoissonSampler.java
----------------------------------------------------------------------
diff --cc commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/LargeMeanPoissonSampler.java
index f07eb94,6a70113..6604015
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/LargeMeanPoissonSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/LargeMeanPoissonSampler.java
@@@ -100,13 -101,9 +103,13 @@@ public class LargeMeanPoissonSample
       */
      public LargeMeanPoissonSampler(UniformRandomProvider rng,
                                     double mean) {
-         super(rng);
+         this.rng = rng;
          if (mean <= 0) {
 -            throw new IllegalArgumentException(mean + " <= " + 0);
 +          throw new IllegalArgumentException(mean + " <= " + 0);
 +        }
 +        // The algorithm is not valid if Math.floor(mean) is not an integer.
 +        if (mean > Integer.MAX_VALUE) {
 +            throw new IllegalArgumentException(mean + " > " + Integer.MAX_VALUE);
          }
  
          gaussian = new ZigguratNormalizedGaussianSampler(rng);
@@@ -249,155 -205,6 +252,155 @@@
      /** {@inheritDoc} */
      @Override
      public String toString() {
-         return "Large Mean Poisson deviate [" + super.toString() + "]";
+         return "Large Mean Poisson deviate [" + rng.toString() + "]";
      }
 +
 +    /**
 +     * Gets the initialisation state of the sampler.
 +     *
 +     * <p>The state is computed using an integer {@code lambda} value of
 +     * {@code lambda = (int)Math.floor(mean)}.
 +     *
 +     * <p>The state will be suitable for reconstructing a new sampler with a mean
 +     * in the range {@code lambda <= mean < lambda+1} using
 +     * {@link #LargeMeanPoissonSampler(UniformRandomProvider, LargeMeanPoissonSamplerState, double)}.
 +     *
 +     * @return the state
 +     */
 +    LargeMeanPoissonSamplerState getState() {
 +        return new LargeMeanPoissonSamplerState(lambda, logLambda, logLambdaFactorial,
 +                delta, halfDelta, twolpd, p1, p2, c1);
 +    }
 +
 +    /**
 +     * Encapsulate the state of the sampler. The state is valid for construction of
 +     * a sampler in the range {@code lambda <= mean < lambda+1}.
 +     *
 +     * <p>This class is immutable.
 +     *
 +     * @see #getLambda()
 +     */
 +    static final class LargeMeanPoissonSamplerState {
 +        /** Algorithm constant {@code lambda}. */
 +        private final double lambda;
 +        /** Algorithm constant {@code logLambda}. */
 +        private final double logLambda;
 +        /** Algorithm constant {@code logLambdaFactorial}. */
 +        private final double logLambdaFactorial;
 +        /** Algorithm constant {@code delta}. */
 +        private final double delta;
 +        /** Algorithm constant {@code halfDelta}. */
 +        private final double halfDelta;
 +        /** Algorithm constant {@code twolpd}. */
 +        private final double twolpd;
 +        /** Algorithm constant {@code p1}. */
 +        private final double p1;
 +        /** Algorithm constant {@code p2}. */
 +        private final double p2;
 +        /** Algorithm constant {@code c1}. */
 +        private final double c1;
 +
 +        /**
 +         * Creates the state.
 +         *
 +         * <p>The state is valid for construction of a sampler in the range
 +         * {@code lambda <= mean < lambda+1} where {@code lambda} is an integer.
 +         *
 +         * @param lambda the lambda
 +         * @param logLambda the log lambda
 +         * @param logLambdaFactorial the log lambda factorial
 +         * @param delta the delta
 +         * @param halfDelta the half delta
 +         * @param twolpd the two lambda plus delta
 +         * @param p1 the p1 constant
 +         * @param p2 the p2 constant
 +         * @param c1 the c1 constant
 +         */
 +        private LargeMeanPoissonSamplerState(double lambda, double logLambda,
 +                double logLambdaFactorial, double delta, double halfDelta, double twolpd,
 +                double p1, double p2, double c1) {
 +          this.lambda = lambda;
 +          this.logLambda = logLambda;
 +          this.logLambdaFactorial = logLambdaFactorial;
 +          this.delta = delta;
 +          this.halfDelta = halfDelta;
 +          this.twolpd = twolpd;
 +          this.p1 = p1;
 +          this.p2 = p2;
 +          this.c1 = c1;
 +        }
 +
 +        /**
 +         * Get the lambda value for the state.
 +         *
 +         * <p>Equal to {@code floor(mean)} for a Poisson sampler.
 +         * @return the lambda value
 +         */
 +        int getLambda() {
 +            return (int) getLambdaRaw();
 +        }
 +
 +        /**
 +         * @return algorithm constant {@code lambda}
 +         */
 +        double getLambdaRaw() {
 +          return lambda;
 +        }
 +
 +        /**
 +         * @return algorithm constant {@code logLambda}
 +         */
 +        double getLogLambda() {
 +          return logLambda;
 +        }
 +
 +        /**
 +         * @return algorithm constant {@code logLambdaFactorial}
 +         */
 +        double getLogLambdaFactorial() {
 +          return logLambdaFactorial;
 +        }
 +
 +        /**
 +         * @return algorithm constant {@code delta}
 +         */
 +        double getDelta() {
 +          return delta;
 +        }
 +
 +        /**
 +         * @return algorithm constant {@code halfDelta}
 +         */
 +        double getHalfDelta() {
 +          return halfDelta;
 +        }
 +
 +        /**
 +         * @return algorithm constant {@code twolpd}
 +         */
 +        double getTwolpd() {
 +          return twolpd;
 +        }
 +
 +        /**
 +         * @return algorithm constant {@code p1}
 +         */
 +        double getP1() {
 +          return p1;
 +        }
 +
 +        /**
 +         * @return algorithm constant {@code p2}
 +         */
 +        double getP2() {
 +          return p2;
 +        }
 +
 +        /**
 +         * @return algorithm constant {@code c1}
 +         */
 +        double getC1() {
 +          return c1;
 +        }
 +    }
  }

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/21927cbc/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/PoissonSampler.java
----------------------------------------------------------------------
diff --cc commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/PoissonSampler.java
index 8bab0f0,246d2cf..2889108
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/PoissonSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/PoissonSampler.java
@@@ -35,16 -35,15 +35,19 @@@ import org.apache.commons.rng.UniformRa
   *   </blockquote>
   *  </li>
   * </ul>
+  *
+  * @since 1.0
   */
  public class PoissonSampler
+     extends SamplerBase
      implements DiscreteSampler {
  
 -    /** Value for switching sampling algorithm. */
 -    private static final double PIVOT = 40;
 +    /**
 +     * Value for switching sampling algorithm.
 +     *
 +     * <p>Package scope for the {@link PoissonSamplerCache}.
 +     */
 +    static final double PIVOT = 40;
      /** The internal Poisson sampler. */
      private final DiscreteSampler poissonSampler;