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++) {