You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mahout.apache.org by td...@apache.org on 2010/09/02 06:33:50 UTC

svn commit: r991807 - in /mahout/trunk/math/src: main/java/org/apache/mahout/math/jet/random/ test/java/org/apache/mahout/math/jet/random/

Author: tdunning
Date: Thu Sep  2 04:33:50 2010
New Revision: 991807

URL: http://svn.apache.org/viewvc?rev=991807&view=rev
Log:
MAHOUT-495 - Rearranged default implementation of nextInt and nextDouble
to avoid a default infinite loop.  Also changed name of DistributionTests
to avoid mvn thinking it has tests in it.

Added:
    mahout/trunk/math/src/test/java/org/apache/mahout/math/jet/random/DistributionChecks.java
      - copied, changed from r991806, mahout/trunk/math/src/test/java/org/apache/mahout/math/jet/random/DistributionTest.java
Removed:
    mahout/trunk/math/src/test/java/org/apache/mahout/math/jet/random/DistributionTest.java
Modified:
    mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/AbstractContinousDistribution.java
    mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/AbstractDiscreteDistribution.java
    mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/AbstractDistribution.java
    mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/Binomial.java
    mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/NegativeBinomial.java
    mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/Poisson.java
    mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/PoissonSlow.java
    mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/Zeta.java

Modified: mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/AbstractContinousDistribution.java
URL: http://svn.apache.org/viewvc/mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/AbstractContinousDistribution.java?rev=991807&r1=991806&r2=991807&view=diff
==============================================================================
--- mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/AbstractContinousDistribution.java (original)
+++ mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/AbstractContinousDistribution.java Thu Sep  2 04:33:50 2010
@@ -39,4 +39,13 @@ public abstract class AbstractContinousD
   public double pdf(double x) {
     throw new UnsupportedOperationException("Can't compute pdf for " + this.getClass().getName());
   }
+
+  /**
+   * @return A random number from the distribution; returns <tt>(int) Math.round(nextDouble())</tt>.
+   *         Override this method if necessary.
+   */
+  @Override
+  public int nextInt() {
+    return (int) Math.round(nextDouble());
+  }
 }

Modified: mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/AbstractDiscreteDistribution.java
URL: http://svn.apache.org/viewvc/mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/AbstractDiscreteDistribution.java?rev=991807&r1=991806&r2=991807&view=diff
==============================================================================
--- mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/AbstractDiscreteDistribution.java (original)
+++ mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/AbstractDiscreteDistribution.java Thu Sep  2 04:33:50 2010
@@ -24,4 +24,5 @@ public abstract class AbstractDiscreteDi
     return (double) nextInt();
   }
 
+  public abstract int nextInt();
 }

Modified: mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/AbstractDistribution.java
URL: http://svn.apache.org/viewvc/mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/AbstractDistribution.java?rev=991807&r1=991806&r2=991807&view=diff
==============================================================================
--- mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/AbstractDistribution.java (original)
+++ mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/AbstractDistribution.java Thu Sep  2 04:33:50 2010
@@ -65,9 +65,7 @@ public abstract class AbstractDistributi
    * A random number from the distribution; returns <tt>(int) Math.round(nextDouble())</tt>. Override this
    * method if necessary.
    */
-  public int nextInt() {
-    return (int) Math.round(nextDouble());
-  }
+  public abstract int nextInt();
 
   /**
    * Returns the used uniform random number generator;

Modified: mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/Binomial.java
URL: http://svn.apache.org/viewvc/mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/Binomial.java?rev=991807&r1=991806&r2=991807&view=diff
==============================================================================
--- mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/Binomial.java (original)
+++ mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/Binomial.java Thu Sep  2 04:33:50 2010
@@ -89,6 +89,11 @@ public class Binomial extends AbstractDi
     return sum;
   }
 
+  @Override
+  public int nextInt() {
+    return generateBinomial(n, p);
+  }
+
   /**
    * *************************************************************** * Binomial-Distribution - Acceptance
    * Rejection/Inversion     * * ***************************************************************** * Acceptance

Modified: mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/NegativeBinomial.java
URL: http://svn.apache.org/viewvc/mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/NegativeBinomial.java?rev=991807&r1=991806&r2=991807&view=diff
==============================================================================
--- mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/NegativeBinomial.java (original)
+++ mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/NegativeBinomial.java Thu Sep  2 04:33:50 2010
@@ -92,6 +92,11 @@ public class NegativeBinomial extends Ab
     return copy;
   }
 
+  @Override
+  public int nextInt() {
+    return nextInt(r, p);
+  }
+
   /**
    * Returns a sample from this distribution.  The value returned will
    * be the number of negative samples required before achieving r

Modified: mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/Poisson.java
URL: http://svn.apache.org/viewvc/mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/Poisson.java?rev=991807&r1=991806&r2=991807&view=diff
==============================================================================
--- mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/Poisson.java (original)
+++ mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/Poisson.java Thu Sep  2 04:33:50 2010
@@ -9,7 +9,6 @@ It is provided "as is" without expressed
 package org.apache.mahout.math.jet.random;
 
 import org.apache.mahout.math.jet.math.Arithmetic;
-import org.apache.mahout.math.jet.random.engine.RandomEngine;
 import org.apache.mahout.math.jet.stat.Probability;
 
 import java.util.Random;
@@ -95,12 +94,18 @@ public class Poisson extends AbstractDis
     return Math.exp(k * l_nu - Arithmetic.logFactorial(k) - c_pm);
   }
 
+  @Override
+  public int nextInt() {
+    return nextInt(mean);
+  }
+
   /** Returns a random number from the distribution.
   @Override
   public int nextInt() {
     return nextInt(this.mean);
   }
 
+
   /** Returns a random number from the distribution; bypasses the internal state. */
   public int nextInt(double theMean) {
 /******************************************************************

Modified: mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/PoissonSlow.java
URL: http://svn.apache.org/viewvc/mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/PoissonSlow.java?rev=991807&r1=991806&r2=991807&view=diff
==============================================================================
--- mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/PoissonSlow.java (original)
+++ mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/PoissonSlow.java Thu Sep  2 04:33:50 2010
@@ -59,17 +59,17 @@ public class PoissonSlow extends Abstrac
     return -tmp + Math.log(2.5066282746310005 * ser);
   }
 
-  /** Returns a random number from the distribution; bypasses the internal state. */
-  private int nextInt(double xm) {
+  @Override
+  public int nextInt() {
     /*
     * Adapted from "Numerical Recipes in C".
     */
     double g = this.cached_g;
 
-    if (xm == -1.0) {
+    if (mean == -1.0) {
       return 0;
     } // not defined
-    if (xm < SWITCH_MEAN) {
+    if (mean < SWITCH_MEAN) {
       int poisson = -1;
       double product = 1;
       do {
@@ -78,7 +78,7 @@ public class PoissonSlow extends Abstrac
       } while (product >= g);
       // bug in CLHEP 1.4.0: was "} while ( product > g );"
       return poisson;
-    } else if (xm < MEAN_MAX) {
+    } else if (mean < MEAN_MAX) {
       double t;
       double em;
       double sq = this.cached_sq;
@@ -89,14 +89,14 @@ public class PoissonSlow extends Abstrac
         double y;
         do {
           y = Math.tan(Math.PI * rand.nextDouble());
-          em = sq * y + xm;
+          em = sq * y + mean;
         } while (em < 0.0);
         em = (double) (int) (em); // faster than em = Math.floor(em); (em>=0.0)
         t = 0.9 * (1.0 + y * y) * Math.exp(em * alxm - logGamma(em + 1.0) - g);
       } while (rand.nextDouble() > t);
       return (int) em;
     } else { // mean is too large
-      return (int) xm;
+      return (int) mean;
     }
   }
 

Modified: mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/Zeta.java
URL: http://svn.apache.org/viewvc/mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/Zeta.java?rev=991807&r1=991806&r2=991807&view=diff
==============================================================================
--- mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/Zeta.java (original)
+++ mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/Zeta.java Thu Sep  2 04:33:50 2010
@@ -36,6 +36,11 @@ public class Zeta extends AbstractDiscre
     setState(ro, pk);
   }
 
+  @Override
+  public int nextInt() {
+    return (int) generateZeta(ro, pk, randomGenerator);
+  }
+
   /** Returns a zeta distributed random number. */
   protected long generateZeta(double ro, double pk, Random randomGenerator) {
 /******************************************************************

Copied: mahout/trunk/math/src/test/java/org/apache/mahout/math/jet/random/DistributionChecks.java (from r991806, mahout/trunk/math/src/test/java/org/apache/mahout/math/jet/random/DistributionTest.java)
URL: http://svn.apache.org/viewvc/mahout/trunk/math/src/test/java/org/apache/mahout/math/jet/random/DistributionChecks.java?p2=mahout/trunk/math/src/test/java/org/apache/mahout/math/jet/random/DistributionChecks.java&p1=mahout/trunk/math/src/test/java/org/apache/mahout/math/jet/random/DistributionTest.java&r1=991806&r2=991807&rev=991807&view=diff
==============================================================================
--- mahout/trunk/math/src/test/java/org/apache/mahout/math/jet/random/DistributionTest.java (original)
+++ mahout/trunk/math/src/test/java/org/apache/mahout/math/jet/random/DistributionChecks.java Thu Sep  2 04:33:50 2010
@@ -33,7 +33,7 @@ import static org.junit.Assert.assertEqu
  * samples.  The pdf is checked against the cdf by quadrature.  The sampling is checked
  * against the cdf using a G^2 (similar to chi^2) test.
  */
-public class DistributionTest {
+public class DistributionChecks {
   public void checkDistribution(final AbstractContinousDistribution dist, double[] x, double offset, double scale, int n) throws ConvergenceException, FunctionEvaluationException {
     double[] xs = Arrays.copyOf(x, x.length);
     for (int i = 0; i < xs.length; i++) {