You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by Gilles Sadowski <gi...@harfang.homelinux.org> on 2012/12/14 17:52:50 UTC

Re: svn commit: r1421968 - in /commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random: EmpiricalDistribution.java ValueServer.java

On Fri, Dec 14, 2012 at 04:28:25PM -0000, psteitz@apache.org wrote:
> Author: psteitz
> Date: Fri Dec 14 16:28:23 2012
> New Revision: 1421968
> 
> URL: http://svn.apache.org/viewvc?rev=1421968&view=rev
> Log:
> Reverted incompatible changes made in r1420006.

I don't understand why you did that.
You nullified my changes that fixed (IIUC) the problem while still
providing users a smooth upgrade path to using RandomDataGenerator
(which it seems was your goal).


Gilles

> Fixed javadoc error in EmpiricalDistribution class javadoc.
> Deprecated constructors taking RandomDataImpl instances in EmpiricalDistribution, ValueServer.  These constructors predate RandomGenerator, which should be used directly as the source of random data for these classes.
> 
> Modified:
>     commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/EmpiricalDistribution.java
>     commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/ValueServer.java
> 
> Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/EmpiricalDistribution.java
> URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/EmpiricalDistribution.java?rev=1421968&r1=1421967&r2=1421968&view=diff
> ==============================================================================
> --- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/EmpiricalDistribution.java (original)
> +++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/EmpiricalDistribution.java Fri Dec 14 16:28:23 2012
> @@ -29,8 +29,8 @@ import java.util.ArrayList;
>  import java.util.List;
>  
>  import org.apache.commons.math3.distribution.AbstractRealDistribution;
> -import org.apache.commons.math3.distribution.RealDistribution;
>  import org.apache.commons.math3.distribution.NormalDistribution;
> +import org.apache.commons.math3.distribution.RealDistribution;
>  import org.apache.commons.math3.exception.MathIllegalStateException;
>  import org.apache.commons.math3.exception.MathInternalError;
>  import org.apache.commons.math3.exception.NullArgumentException;
> @@ -134,18 +134,14 @@ public class EmpiricalDistribution exten
>      /** upper bounds of subintervals in (0,1) "belonging" to the bins */
>      private double[] upperBounds = null;
>  
> -    /** Data generator. */
> -    private final RandomDataGenerator randomDataGen;
> -    /**
> -     * XXX Enable backward-compatibility (to be removed in 4.0).
> -     */
> -    private final boolean useRandomDataImpl;
> +    /** RandomDataImpl instance to use in repeated calls to getNext() */
> +    private final RandomDataImpl randomData;
>  
>      /**
>       * Creates a new EmpiricalDistribution with the default bin count.
>       */
>      public EmpiricalDistribution() {
> -        this(DEFAULT_BIN_COUNT);
> +        this(DEFAULT_BIN_COUNT, new RandomDataImpl());
>      }
>  
>      /**
> @@ -154,7 +150,7 @@ public class EmpiricalDistribution exten
>       * @param binCount number of bins
>       */
>      public EmpiricalDistribution(int binCount) {
> -        this(binCount, (RandomGenerator) null);
> +        this(binCount, new RandomDataImpl());
>      }
>  
>      /**
> @@ -162,82 +158,52 @@ public class EmpiricalDistribution exten
>       * provided {@link RandomGenerator} as the source of random data.
>       *
>       * @param binCount number of bins
> -     * @param randomData random data generator (may be null, resulting in a default generator)
> -     * @deprecated As of 3.1. To be removed in 4.0. Please use
> -     * {@link #EmpiricalDistribution(int,RandomDataGenerator)} instead.
> +     * @param generator random data generator (may be null, resulting in default JDK generator)
> +     * @since 3.0
>       */
> -    @Deprecated
> -    public EmpiricalDistribution(int binCount, RandomDataImpl randomData) {
> +    public EmpiricalDistribution(int binCount, RandomGenerator generator) {
>          this.binCount = binCount;
> -        this.randomData = randomData == null ?
> -            new RandomDataImpl() :
> -            randomData;
> +        randomData = new RandomDataImpl(generator);
>          binStats = new ArrayList<SummaryStatistics>();
> -        useRandomDataImpl = true;
> -        randomDataGen = null;
> -    }
> -    /**
> -     * Creates a new EmpiricalDistribution with the specified bin count using the
> -     * provided {@link RandomGenerator} as the source of random data.
> -     *
> -     * @param randomData random data generator (may be null, resulting in a default generator)
> -     * @deprecated As of 3.1. To be removed in 4.0. Please use
> -     * {@link #EmpiricalDistribution(RandomDataGenerator)} instead.
> -     */
> -    @Deprecated
> -    public EmpiricalDistribution(RandomDataImpl randomData) {
> -        this(DEFAULT_BIN_COUNT, randomData);
>      }
>  
>      /**
> -     * Creates a new EmpiricalDistribution with the specified bin count using the
> -     * provided {@link RandomGenerator} as the source of random data.
> -     *
> -     * @param binCount number of bins
> -     * @param randomData random data generator (may be null, resulting in a default generator)
> -     */
> -    public EmpiricalDistribution(int binCount, RandomDataGenerator randomData) {
> -        this.binCount = binCount;
> -        this.randomDataGen = randomData == null ?
> -            new RandomDataGenerator() :
> -            randomData;
> -        binStats = new ArrayList<SummaryStatistics>();
> -        useRandomDataImpl = false; // XXX Remove in 4.0
> -    }
> -    /**
> -     * Creates a new EmpiricalDistribution with the specified bin count using the
> +     * Creates a new EmpiricalDistribution with default bin count using the
>       * provided {@link RandomGenerator} as the source of random data.
>       *
> -     * @param randomData random data generator (may be null, resulting in a default generator)
> +     * @param generator random data generator (may be null, resulting in default JDK generator)
> +     * @since 3.0
>       */
> -    public EmpiricalDistribution(RandomDataGenerator randomData) {
> -        this(DEFAULT_BIN_COUNT, randomData);
> +    public EmpiricalDistribution(RandomGenerator generator) {
> +        this(DEFAULT_BIN_COUNT, generator);
>      }
>  
>      /**
>       * Creates a new EmpiricalDistribution with the specified bin count using the
> -     * provided {@link RandomGenerator} as the source of random data.
> +     * provided {@link RandomDataImpl} instance as the source of random data.
>       *
>       * @param binCount number of bins
> -     * @param generator random data generator (may be null, resulting in a default generator)
> +     * @param randomData random data generator (may be null, resulting in default JDK generator)
>       * @since 3.0
>       */
> -    public EmpiricalDistribution(int binCount, RandomGenerator generator) {
> -        this(binCount, new RandomDataGenerator(generator));
> +    public EmpiricalDistribution(int binCount, RandomDataImpl randomData) {
> +        this.binCount = binCount;
> +        this.randomData = randomData;
> +        binStats = new ArrayList<SummaryStatistics>();
>      }
>  
>      /**
>       * Creates a new EmpiricalDistribution with default bin count using the
> -     * provided {@link RandomGenerator} as the source of random data.
> +     * provided {@link RandomDataImpl} as the source of random data.
>       *
> -     * @param generator random data generator (may be null, resulting in default generator)
> +     * @param randomData random data generator (may be null, resulting in default JDK generator)
>       * @since 3.0
>       */
> -    public EmpiricalDistribution(RandomGenerator generator) {
> -        this(DEFAULT_BIN_COUNT, generator);
> +    public EmpiricalDistribution(RandomDataImpl randomData) {
> +        this(DEFAULT_BIN_COUNT, randomData);
>      }
>  
> -    /**
> +     /**
>       * Computes the empirical distribution from the provided
>       * array of numbers.
>       *
> @@ -288,7 +254,7 @@ public class EmpiricalDistribution exten
>          } finally {
>             try {
>                 in.close();
> -           } catch (IOException ex) { // NOPMD
> +           } catch (IOException ex) {
>                 // ignore
>             }
>          }
> @@ -320,7 +286,7 @@ public class EmpiricalDistribution exten
>          } finally {
>              try {
>                  in.close();
> -            } catch (IOException ex) { // NOPMD
> +            } catch (IOException ex) {
>                  // ignore
>              }
>          }
> @@ -497,41 +463,22 @@ public class EmpiricalDistribution exten
>              throw new MathIllegalStateException(LocalizedFormats.DISTRIBUTION_NOT_LOADED);
>          }
>  
> -        if (useRandomDataImpl) {
> -            // XXX backward compatibility.
> -            // Start with a uniformly distributed random number in (0, 1)
> -            final double x = randomData.nextUniform(0,1);
> -            // Use this to select the bin and generate a Gaussian within the bin
> -            for (int i = 0; i < binCount; i++) {
> -                if (x <= upperBounds[i]) {
> -                    SummaryStatistics stats = binStats.get(i);
> -                    if (stats.getN() > 0) {
> -                        if (stats.getStandardDeviation() > 0) {  // more than one obs
> -                            return randomData.nextGaussian(stats.getMean(),
> -                                                           stats.getStandardDeviation());
> -                        } else {
> -                            return stats.getMean(); // only one obs in bin
> -                        }
> -                    }
> -                }
> -            }
> -        } else {
> -            // Start with a uniformly distributed random number in (0, 1)
> -            final double x = randomDataGen.nextUniform(0, 1);
> -            // Use this to select the bin and generate a Gaussian within the bin
> -            for (int i = 0; i < binCount; i++) {
> -                if (x <= upperBounds[i]) {
> -                    SummaryStatistics stats = binStats.get(i);
> -                    if (stats.getN() > 0) {
> -                        if (stats.getStandardDeviation() > 0) {  // more than one obs
> -                            return randomDataGen.nextGaussian(stats.getMean(),
> -                                                              stats.getStandardDeviation());
> -                        } else {
> -                            return stats.getMean(); // only one obs in bin
> -                        }
> -                    }
> -                }
> -            }
> +        // Start with a uniformly distributed random number in (0,1)
> +        final double x = randomData.nextUniform(0,1);
> +
> +        // Use this to select the bin and generate a Gaussian within the bin
> +        for (int i = 0; i < binCount; i++) {
> +           if (x <= upperBounds[i]) {
> +               SummaryStatistics stats = binStats.get(i);
> +               if (stats.getN() > 0) {
> +                   if (stats.getStandardDeviation() > 0) {  // more than one obs
> +                       return randomData.nextGaussian(stats.getMean(),
> +                                                      stats.getStandardDeviation());
> +                   } else {
> +                       return stats.getMean(); // only one obs in bin
> +                   }
> +               }
> +           }
>          }
>          throw new MathIllegalStateException(LocalizedFormats.NO_BIN_SELECTED);
>      }
> @@ -624,12 +571,7 @@ public class EmpiricalDistribution exten
>       * @since 3.0
>       */
>      public void reSeed(long seed) {
> -        if (useRandomDataImpl) {
> -            // XXX backward compatibility.
> -            randomData.reSeed(seed);
> -        } else {
> -            randomDataGen.reSeed(seed);
> -        }
> +        randomData.reSeed(seed);
>      }
>  
>      // Distribution methods ---------------------------
> @@ -819,7 +761,7 @@ public class EmpiricalDistribution exten
>       */
>      @Override
>      public void reseedRandomGenerator(long seed) {
> -        reSeed(seed);
> +        randomData.reSeed(seed);
>      }
>  
>      /**
> 
> Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/ValueServer.java
> URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/ValueServer.java?rev=1421968&r1=1421967&r2=1421968&view=diff
> ==============================================================================
> --- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/ValueServer.java (original)
> +++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/ValueServer.java Fri Dec 14 16:28:23 2012
> @@ -88,35 +88,36 @@ public class ValueServer {
>      private BufferedReader filePointer = null;
>  
>      /** RandomDataImpl to use for random data generation. */
> -    private final RandomDataGenerator randomData;
> +    private final RandomDataImpl randomData;
>  
>      // Data generation modes ======================================
>  
>      /** Creates new ValueServer */
>      public ValueServer() {
> -        randomData = new RandomDataGenerator();
> +        randomData = new RandomDataImpl();
>      }
>  
>      /**
> -     * Construct a ValueServer instance using a RandomDataGenerator as its source
> +     * Construct a ValueServer instance using a RandomDataImpl as its source
>       * of random data.
>       *
> -     * @param randomData random data source
> +     * @param randomData the RandomDataImpl instance used to source random data
>       * @since 3.0
> +     * @deprecated use {@link #ValueServer(RandomGenerator)}
>       */
> -    public ValueServer(RandomDataGenerator randomData) {
> +    public ValueServer(RandomDataImpl randomData) {
>          this.randomData = randomData;
>      }
> +
>      /**
> -     * Construct a ValueServer instance using a RandomDataImpl as its source
> +     * Construct a ValueServer instance using a RandomGenerator as its source
>       * of random data.
>       *
> -     * @param randomData random data source
> -     * @deprecated As of 3.1. Use {@link #ValueServer(RandomDataGenerator)} instead.
> +     * @since 3.1
> +     * @param generator source of random data
>       */
> -    @Deprecated
> -    public ValueServer(RandomDataImpl randomData) {
> -        this(randomData.getDelegate());
> +    public ValueServer(RandomGenerator generator) {
> +        this.randomData = new RandomDataImpl(generator);
>      }
>  
>      /**
> @@ -288,7 +289,7 @@ public class ValueServer {
>              try {
>                  filePointer.close();
>                  filePointer = null;
> -            } catch (IOException ex) { // NOPMD
> +            } catch (IOException ex) {
>                  // ignore
>              }
>          }
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Re: svn commit: r1421968 - in /commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random: EmpiricalDistribution.java ValueServer.java

Posted by Gilles Sadowski <gi...@harfang.homelinux.org>.
On Fri, Dec 14, 2012 at 01:29:44PM -0800, Phil Steitz wrote:
> On 12/14/12 12:58 PM, Gilles Sadowski wrote:
> > On Fri, Dec 14, 2012 at 12:14:45PM -0800, Phil Steitz wrote:
> >> On 12/14/12 11:59 AM, Gilles Sadowski wrote:
> >>> On Fri, Dec 14, 2012 at 10:03:14AM -0800, Phil Steitz wrote:
> >>>> On 12/14/12 9:43 AM, Phil Steitz wrote:
> >>>>> On 12/14/12 8:52 AM, Gilles Sadowski wrote:
> >>>>>> On Fri, Dec 14, 2012 at 04:28:25PM -0000, psteitz@apache.org wrote:
> >>>>>>> Author: psteitz
> >>>>>>> Date: Fri Dec 14 16:28:23 2012
> >>>>>>> New Revision: 1421968
> >>>>>>>
> >>>>>>> URL: http://svn.apache.org/viewvc?rev=1421968&view=rev
> >>>>>>> Log:
> >>>>>>> Reverted incompatible changes made in r1420006.
> >>>>>> I don't understand why you did that.
> >>>>>> You nullified my changes that fixed (IIUC) the problem while still
> >>>>>> providing users a smooth upgrade path to using RandomDataGenerator
> >>>>>> (which it seems was your goal).
> >>>>> I was basically reverting my original commit, which caused the
> >>>>> problem.  I started with a revert back to before  r1420006.  Then I
> >>>>> just added some deprecations.  I should not have introduced new
> >>>>> constructors or RandomDataGenerator at all at this point. 
> >>>> Sorry.  Misspoke there.  What I meant was I should not have
> >>>> introduced a constructor using RandomDataGenerator.  I *did*
> >>>> introduce one using RandomGenerator, which is what should be used. 
> >>>> Sorry for the bad communication and somewhat convoluted naming on
> >>>> this.  Hopefully this makes sense.
> >>> Si, ultimately, there will be neither a "RandomDataImpl" nor a
> >>> "RandomDataGenerator" (as I suggested in the comments to MATH-915)?
> >> Right, there will be no *constructor* taking one of those.  There
> >> will be a member variable, constructed from a RandomGenerator, which
> >> will change from being a RandomDataImpl to a RandomDataGenerator. 
> > I don't understand why "EmpiricalDistribution" would need a
> > "RandomDataGenerator" at all. That duplicates the "random source" readily
> > available from the parent class. 
> 
> RandomDataGenerator extends the capabilities of RandomGenerator and
> EmpiricalDistribution uses the extended capabilities.
> 
> > [That was part of my comment to MATH-915.]
> > The "randomData" field is only actually used in "getNextValue" where the
> > code could directly use "UniformRealDistribution" and "NormalDistribution"
> > variables instead (as my overwritten fix was doing).
> 
> Your version was using RandomDataGenerator / RandomDataImpl
> instances to do the work.  In theory, you could use distribution
> instances to do this; but this is precisely the kind of use case
> that RandomDataImpl was created to address - direct access to data
> generation methods following common parametric distributions.
> 
> 
> >
> >> We could make that change now if RandomDataImpl exposed a
> >> getDelegate method to deliver the wrapped RandomDataGenerator.  
> > It does. That was one of my changes to fix MATH-916.
> 
> Great.  We think alike (sometimes :)
> 
> Given that, we could s/RandomDataImpl/RandomDataGenerator in the
> private field.

I'll commit that in a few minutes...

Gilles

> 
> Phil
> >
> > Gilles
> >
> >> Then the current member variable could be changed to a
> >> RandomDataGenerator and the (now deprecated) constructor taking a
> >> RandomDataImpl could convert it.  That is a little more work to
> >> implement and probably not worth the hassle for 3.1 as the member
> >> field is private.
> >>
> >> Phil
> >>> Gilles
> >>>
> >>>> Phil
> >>>>>  I am
> >>>>> sorry I did a bad job explaining what was going on there. 
> >>>>> Basically, EmpiricalDistibution needs a RandomDataGenerator /
> >>>>> RandomDataImpl to generate data following certain distributions. 
> >>>>> What should be provided as a constructor argument for this class
> >>>>> (and ValueServer) is a RandomGenerator, which is the underlying
> >>>>> source of random data.  The RandomDataImpl constructors are really
> >>>>> legacy, going back to the days before RandomGenerator existed.  Does
> >>>>> this make sense?
> >>>>>
> >>>>> Phil
> >>>>>> Gilles
> >>>>>>
> >>>>>>> Fixed javadoc error in EmpiricalDistribution class javadoc.
> >>>>>>> Deprecated constructors taking RandomDataImpl instances in EmpiricalDistribution, ValueServer.  These constructors predate RandomGenerator, which should be used directly as the source of random data for these classes.
> >>>>>>>
> >>>>>>> Modified:
> >>>>>>>     commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/EmpiricalDistribution.java
> >>>>>>>     commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/ValueServer.java
> >>>>>>>
> >>>>>>> Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/EmpiricalDistribution.java
> >>>>>>> URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/EmpiricalDistribution.java?rev=1421968&r1=1421967&r2=1421968&view=diff
> >>>>>>> ==============================================================================
> >>>>>>> --- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/EmpiricalDistribution.java (original)
> >>>>>>> +++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/EmpiricalDistribution.java Fri Dec 14 16:28:23 2012
> >>>>>>> @@ -29,8 +29,8 @@ import java.util.ArrayList;
> >>>>>>>  import java.util.List;
> >>>>>>>  
> >>>>>>>  import org.apache.commons.math3.distribution.AbstractRealDistribution;
> >>>>>>> -import org.apache.commons.math3.distribution.RealDistribution;
> >>>>>>>  import org.apache.commons.math3.distribution.NormalDistribution;
> >>>>>>> +import org.apache.commons.math3.distribution.RealDistribution;
> >>>>>>>  import org.apache.commons.math3.exception.MathIllegalStateException;
> >>>>>>>  import org.apache.commons.math3.exception.MathInternalError;
> >>>>>>>  import org.apache.commons.math3.exception.NullArgumentException;
> >>>>>>> @@ -134,18 +134,14 @@ public class EmpiricalDistribution exten
> >>>>>>>      /** upper bounds of subintervals in (0,1) "belonging" to the bins */
> >>>>>>>      private double[] upperBounds = null;
> >>>>>>>  
> >>>>>>> -    /** Data generator. */
> >>>>>>> -    private final RandomDataGenerator randomDataGen;
> >>>>>>> -    /**
> >>>>>>> -     * XXX Enable backward-compatibility (to be removed in 4.0).
> >>>>>>> -     */
> >>>>>>> -    private final boolean useRandomDataImpl;
> >>>>>>> +    /** RandomDataImpl instance to use in repeated calls to getNext() */
> >>>>>>> +    private final RandomDataImpl randomData;
> >>>>>>>  
> >>>>>>>      /**
> >>>>>>>       * Creates a new EmpiricalDistribution with the default bin count.
> >>>>>>>       */
> >>>>>>>      public EmpiricalDistribution() {
> >>>>>>> -        this(DEFAULT_BIN_COUNT);
> >>>>>>> +        this(DEFAULT_BIN_COUNT, new RandomDataImpl());
> >>>>>>>      }
> >>>>>>>  
> >>>>>>>      /**
> >>>>>>> @@ -154,7 +150,7 @@ public class EmpiricalDistribution exten
> >>>>>>>       * @param binCount number of bins
> >>>>>>>       */
> >>>>>>>      public EmpiricalDistribution(int binCount) {
> >>>>>>> -        this(binCount, (RandomGenerator) null);
> >>>>>>> +        this(binCount, new RandomDataImpl());
> >>>>>>>      }
> >>>>>>>  
> >>>>>>>      /**
> >>>>>>> @@ -162,82 +158,52 @@ public class EmpiricalDistribution exten
> >>>>>>>       * provided {@link RandomGenerator} as the source of random data.
> >>>>>>>       *
> >>>>>>>       * @param binCount number of bins
> >>>>>>> -     * @param randomData random data generator (may be null, resulting in a default generator)
> >>>>>>> -     * @deprecated As of 3.1. To be removed in 4.0. Please use
> >>>>>>> -     * {@link #EmpiricalDistribution(int,RandomDataGenerator)} instead.
> >>>>>>> +     * @param generator random data generator (may be null, resulting in default JDK generator)
> >>>>>>> +     * @since 3.0
> >>>>>>>       */
> >>>>>>> -    @Deprecated
> >>>>>>> -    public EmpiricalDistribution(int binCount, RandomDataImpl randomData) {
> >>>>>>> +    public EmpiricalDistribution(int binCount, RandomGenerator generator) {
> >>>>>>>          this.binCount = binCount;
> >>>>>>> -        this.randomData = randomData == null ?
> >>>>>>> -            new RandomDataImpl() :
> >>>>>>> -            randomData;
> >>>>>>> +        randomData = new RandomDataImpl(generator);
> >>>>>>>          binStats = new ArrayList<SummaryStatistics>();
> >>>>>>> -        useRandomDataImpl = true;
> >>>>>>> -        randomDataGen = null;
> >>>>>>> -    }
> >>>>>>> -    /**
> >>>>>>> -     * Creates a new EmpiricalDistribution with the specified bin count using the
> >>>>>>> -     * provided {@link RandomGenerator} as the source of random data.
> >>>>>>> -     *
> >>>>>>> -     * @param randomData random data generator (may be null, resulting in a default generator)
> >>>>>>> -     * @deprecated As of 3.1. To be removed in 4.0. Please use
> >>>>>>> -     * {@link #EmpiricalDistribution(RandomDataGenerator)} instead.
> >>>>>>> -     */
> >>>>>>> -    @Deprecated
> >>>>>>> -    public EmpiricalDistribution(RandomDataImpl randomData) {
> >>>>>>> -        this(DEFAULT_BIN_COUNT, randomData);
> >>>>>>>      }
> >>>>>>>  
> >>>>>>>      /**
> >>>>>>> -     * Creates a new EmpiricalDistribution with the specified bin count using the
> >>>>>>> -     * provided {@link RandomGenerator} as the source of random data.
> >>>>>>> -     *
> >>>>>>> -     * @param binCount number of bins
> >>>>>>> -     * @param randomData random data generator (may be null, resulting in a default generator)
> >>>>>>> -     */
> >>>>>>> -    public EmpiricalDistribution(int binCount, RandomDataGenerator randomData) {
> >>>>>>> -        this.binCount = binCount;
> >>>>>>> -        this.randomDataGen = randomData == null ?
> >>>>>>> -            new RandomDataGenerator() :
> >>>>>>> -            randomData;
> >>>>>>> -        binStats = new ArrayList<SummaryStatistics>();
> >>>>>>> -        useRandomDataImpl = false; // XXX Remove in 4.0
> >>>>>>> -    }
> >>>>>>> -    /**
> >>>>>>> -     * Creates a new EmpiricalDistribution with the specified bin count using the
> >>>>>>> +     * Creates a new EmpiricalDistribution with default bin count using the
> >>>>>>>       * provided {@link RandomGenerator} as the source of random data.
> >>>>>>>       *
> >>>>>>> -     * @param randomData random data generator (may be null, resulting in a default generator)
> >>>>>>> +     * @param generator random data generator (may be null, resulting in default JDK generator)
> >>>>>>> +     * @since 3.0
> >>>>>>>       */
> >>>>>>> -    public EmpiricalDistribution(RandomDataGenerator randomData) {
> >>>>>>> -        this(DEFAULT_BIN_COUNT, randomData);
> >>>>>>> +    public EmpiricalDistribution(RandomGenerator generator) {
> >>>>>>> +        this(DEFAULT_BIN_COUNT, generator);
> >>>>>>>      }
> >>>>>>>  
> >>>>>>>      /**
> >>>>>>>       * Creates a new EmpiricalDistribution with the specified bin count using the
> >>>>>>> -     * provided {@link RandomGenerator} as the source of random data.
> >>>>>>> +     * provided {@link RandomDataImpl} instance as the source of random data.
> >>>>>>>       *
> >>>>>>>       * @param binCount number of bins
> >>>>>>> -     * @param generator random data generator (may be null, resulting in a default generator)
> >>>>>>> +     * @param randomData random data generator (may be null, resulting in default JDK generator)
> >>>>>>>       * @since 3.0
> >>>>>>>       */
> >>>>>>> -    public EmpiricalDistribution(int binCount, RandomGenerator generator) {
> >>>>>>> -        this(binCount, new RandomDataGenerator(generator));
> >>>>>>> +    public EmpiricalDistribution(int binCount, RandomDataImpl randomData) {
> >>>>>>> +        this.binCount = binCount;
> >>>>>>> +        this.randomData = randomData;
> >>>>>>> +        binStats = new ArrayList<SummaryStatistics>();
> >>>>>>>      }
> >>>>>>>  
> >>>>>>>      /**
> >>>>>>>       * Creates a new EmpiricalDistribution with default bin count using the
> >>>>>>> -     * provided {@link RandomGenerator} as the source of random data.
> >>>>>>> +     * provided {@link RandomDataImpl} as the source of random data.
> >>>>>>>       *
> >>>>>>> -     * @param generator random data generator (may be null, resulting in default generator)
> >>>>>>> +     * @param randomData random data generator (may be null, resulting in default JDK generator)
> >>>>>>>       * @since 3.0
> >>>>>>>       */
> >>>>>>> -    public EmpiricalDistribution(RandomGenerator generator) {
> >>>>>>> -        this(DEFAULT_BIN_COUNT, generator);
> >>>>>>> +    public EmpiricalDistribution(RandomDataImpl randomData) {
> >>>>>>> +        this(DEFAULT_BIN_COUNT, randomData);
> >>>>>>>      }
> >>>>>>>  
> >>>>>>> -    /**
> >>>>>>> +     /**
> >>>>>>>       * Computes the empirical distribution from the provided
> >>>>>>>       * array of numbers.
> >>>>>>>       *
> >>>>>>> @@ -288,7 +254,7 @@ public class EmpiricalDistribution exten
> >>>>>>>          } finally {
> >>>>>>>             try {
> >>>>>>>                 in.close();
> >>>>>>> -           } catch (IOException ex) { // NOPMD
> >>>>>>> +           } catch (IOException ex) {
> >>>>>>>                 // ignore
> >>>>>>>             }
> >>>>>>>          }
> >>>>>>> @@ -320,7 +286,7 @@ public class EmpiricalDistribution exten
> >>>>>>>          } finally {
> >>>>>>>              try {
> >>>>>>>                  in.close();
> >>>>>>> -            } catch (IOException ex) { // NOPMD
> >>>>>>> +            } catch (IOException ex) {
> >>>>>>>                  // ignore
> >>>>>>>              }
> >>>>>>>          }
> >>>>>>> @@ -497,41 +463,22 @@ public class EmpiricalDistribution exten
> >>>>>>>              throw new MathIllegalStateException(LocalizedFormats.DISTRIBUTION_NOT_LOADED);
> >>>>>>>          }
> >>>>>>>  
> >>>>>>> -        if (useRandomDataImpl) {
> >>>>>>> -            // XXX backward compatibility.
> >>>>>>> -            // Start with a uniformly distributed random number in (0, 1)
> >>>>>>> -            final double x = randomData.nextUniform(0,1);
> >>>>>>> -            // Use this to select the bin and generate a Gaussian within the bin
> >>>>>>> -            for (int i = 0; i < binCount; i++) {
> >>>>>>> -                if (x <= upperBounds[i]) {
> >>>>>>> -                    SummaryStatistics stats = binStats.get(i);
> >>>>>>> -                    if (stats.getN() > 0) {
> >>>>>>> -                        if (stats.getStandardDeviation() > 0) {  // more than one obs
> >>>>>>> -                            return randomData.nextGaussian(stats.getMean(),
> >>>>>>> -                                                           stats.getStandardDeviation());
> >>>>>>> -                        } else {
> >>>>>>> -                            return stats.getMean(); // only one obs in bin
> >>>>>>> -                        }
> >>>>>>> -                    }
> >>>>>>> -                }
> >>>>>>> -            }
> >>>>>>> -        } else {
> >>>>>>> -            // Start with a uniformly distributed random number in (0, 1)
> >>>>>>> -            final double x = randomDataGen.nextUniform(0, 1);
> >>>>>>> -            // Use this to select the bin and generate a Gaussian within the bin
> >>>>>>> -            for (int i = 0; i < binCount; i++) {
> >>>>>>> -                if (x <= upperBounds[i]) {
> >>>>>>> -                    SummaryStatistics stats = binStats.get(i);
> >>>>>>> -                    if (stats.getN() > 0) {
> >>>>>>> -                        if (stats.getStandardDeviation() > 0) {  // more than one obs
> >>>>>>> -                            return randomDataGen.nextGaussian(stats.getMean(),
> >>>>>>> -                                                              stats.getStandardDeviation());
> >>>>>>> -                        } else {
> >>>>>>> -                            return stats.getMean(); // only one obs in bin
> >>>>>>> -                        }
> >>>>>>> -                    }
> >>>>>>> -                }
> >>>>>>> -            }
> >>>>>>> +        // Start with a uniformly distributed random number in (0,1)
> >>>>>>> +        final double x = randomData.nextUniform(0,1);
> >>>>>>> +
> >>>>>>> +        // Use this to select the bin and generate a Gaussian within the bin
> >>>>>>> +        for (int i = 0; i < binCount; i++) {
> >>>>>>> +           if (x <= upperBounds[i]) {
> >>>>>>> +               SummaryStatistics stats = binStats.get(i);
> >>>>>>> +               if (stats.getN() > 0) {
> >>>>>>> +                   if (stats.getStandardDeviation() > 0) {  // more than one obs
> >>>>>>> +                       return randomData.nextGaussian(stats.getMean(),
> >>>>>>> +                                                      stats.getStandardDeviation());
> >>>>>>> +                   } else {
> >>>>>>> +                       return stats.getMean(); // only one obs in bin
> >>>>>>> +                   }
> >>>>>>> +               }
> >>>>>>> +           }
> >>>>>>>          }
> >>>>>>>          throw new MathIllegalStateException(LocalizedFormats.NO_BIN_SELECTED);
> >>>>>>>      }
> >>>>>>> @@ -624,12 +571,7 @@ public class EmpiricalDistribution exten
> >>>>>>>       * @since 3.0
> >>>>>>>       */
> >>>>>>>      public void reSeed(long seed) {
> >>>>>>> -        if (useRandomDataImpl) {
> >>>>>>> -            // XXX backward compatibility.
> >>>>>>> -            randomData.reSeed(seed);
> >>>>>>> -        } else {
> >>>>>>> -            randomDataGen.reSeed(seed);
> >>>>>>> -        }
> >>>>>>> +        randomData.reSeed(seed);
> >>>>>>>      }
> >>>>>>>  
> >>>>>>>      // Distribution methods ---------------------------
> >>>>>>> @@ -819,7 +761,7 @@ public class EmpiricalDistribution exten
> >>>>>>>       */
> >>>>>>>      @Override
> >>>>>>>      public void reseedRandomGenerator(long seed) {
> >>>>>>> -        reSeed(seed);
> >>>>>>> +        randomData.reSeed(seed);
> >>>>>>>      }
> >>>>>>>  
> >>>>>>>      /**
> >>>>>>>
> >>>>>>> Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/ValueServer.java
> >>>>>>> URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/ValueServer.java?rev=1421968&r1=1421967&r2=1421968&view=diff
> >>>>>>> ==============================================================================
> >>>>>>> --- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/ValueServer.java (original)
> >>>>>>> +++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/ValueServer.java Fri Dec 14 16:28:23 2012
> >>>>>>> @@ -88,35 +88,36 @@ public class ValueServer {
> >>>>>>>      private BufferedReader filePointer = null;
> >>>>>>>  
> >>>>>>>      /** RandomDataImpl to use for random data generation. */
> >>>>>>> -    private final RandomDataGenerator randomData;
> >>>>>>> +    private final RandomDataImpl randomData;
> >>>>>>>  
> >>>>>>>      // Data generation modes ======================================
> >>>>>>>  
> >>>>>>>      /** Creates new ValueServer */
> >>>>>>>      public ValueServer() {
> >>>>>>> -        randomData = new RandomDataGenerator();
> >>>>>>> +        randomData = new RandomDataImpl();
> >>>>>>>      }
> >>>>>>>  
> >>>>>>>      /**
> >>>>>>> -     * Construct a ValueServer instance using a RandomDataGenerator as its source
> >>>>>>> +     * Construct a ValueServer instance using a RandomDataImpl as its source
> >>>>>>>       * of random data.
> >>>>>>>       *
> >>>>>>> -     * @param randomData random data source
> >>>>>>> +     * @param randomData the RandomDataImpl instance used to source random data
> >>>>>>>       * @since 3.0
> >>>>>>> +     * @deprecated use {@link #ValueServer(RandomGenerator)}
> >>>>>>>       */
> >>>>>>> -    public ValueServer(RandomDataGenerator randomData) {
> >>>>>>> +    public ValueServer(RandomDataImpl randomData) {
> >>>>>>>          this.randomData = randomData;
> >>>>>>>      }
> >>>>>>> +
> >>>>>>>      /**
> >>>>>>> -     * Construct a ValueServer instance using a RandomDataImpl as its source
> >>>>>>> +     * Construct a ValueServer instance using a RandomGenerator as its source
> >>>>>>>       * of random data.
> >>>>>>>       *
> >>>>>>> -     * @param randomData random data source
> >>>>>>> -     * @deprecated As of 3.1. Use {@link #ValueServer(RandomDataGenerator)} instead.
> >>>>>>> +     * @since 3.1
> >>>>>>> +     * @param generator source of random data
> >>>>>>>       */
> >>>>>>> -    @Deprecated
> >>>>>>> -    public ValueServer(RandomDataImpl randomData) {
> >>>>>>> -        this(randomData.getDelegate());
> >>>>>>> +    public ValueServer(RandomGenerator generator) {
> >>>>>>> +        this.randomData = new RandomDataImpl(generator);
> >>>>>>>      }
> >>>>>>>  
> >>>>>>>      /**
> >>>>>>> @@ -288,7 +289,7 @@ public class ValueServer {
> >>>>>>>              try {
> >>>>>>>                  filePointer.close();
> >>>>>>>                  filePointer = null;
> >>>>>>> -            } catch (IOException ex) { // NOPMD
> >>>>>>> +            } catch (IOException ex) {
> >>>>>>>                  // ignore
> >>>>>>>              }
> >>>>>>>          }
> >>>>>>>
> >>>>>>>
> >>>>>> ---------------------------------------------------------------------
> >>>>>> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> >>>>>> For additional commands, e-mail: dev-help@commons.apache.org
> >>>>>>
> >>>>>>
> >>>> ---------------------------------------------------------------------
> >>>> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> >>>> For additional commands, e-mail: dev-help@commons.apache.org
> >>>>
> >>> ---------------------------------------------------------------------
> >>> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> >>> For additional commands, e-mail: dev-help@commons.apache.org
> >>>
> >>>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> >> For additional commands, e-mail: dev-help@commons.apache.org
> >>
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> > For additional commands, e-mail: dev-help@commons.apache.org
> >
> >
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> For additional commands, e-mail: dev-help@commons.apache.org
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Re: svn commit: r1421968 - in /commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random: EmpiricalDistribution.java ValueServer.java

Posted by Phil Steitz <ph...@gmail.com>.
On 12/14/12 12:58 PM, Gilles Sadowski wrote:
> On Fri, Dec 14, 2012 at 12:14:45PM -0800, Phil Steitz wrote:
>> On 12/14/12 11:59 AM, Gilles Sadowski wrote:
>>> On Fri, Dec 14, 2012 at 10:03:14AM -0800, Phil Steitz wrote:
>>>> On 12/14/12 9:43 AM, Phil Steitz wrote:
>>>>> On 12/14/12 8:52 AM, Gilles Sadowski wrote:
>>>>>> On Fri, Dec 14, 2012 at 04:28:25PM -0000, psteitz@apache.org wrote:
>>>>>>> Author: psteitz
>>>>>>> Date: Fri Dec 14 16:28:23 2012
>>>>>>> New Revision: 1421968
>>>>>>>
>>>>>>> URL: http://svn.apache.org/viewvc?rev=1421968&view=rev
>>>>>>> Log:
>>>>>>> Reverted incompatible changes made in r1420006.
>>>>>> I don't understand why you did that.
>>>>>> You nullified my changes that fixed (IIUC) the problem while still
>>>>>> providing users a smooth upgrade path to using RandomDataGenerator
>>>>>> (which it seems was your goal).
>>>>> I was basically reverting my original commit, which caused the
>>>>> problem.  I started with a revert back to before  r1420006.  Then I
>>>>> just added some deprecations.  I should not have introduced new
>>>>> constructors or RandomDataGenerator at all at this point. 
>>>> Sorry.  Misspoke there.  What I meant was I should not have
>>>> introduced a constructor using RandomDataGenerator.  I *did*
>>>> introduce one using RandomGenerator, which is what should be used. 
>>>> Sorry for the bad communication and somewhat convoluted naming on
>>>> this.  Hopefully this makes sense.
>>> Si, ultimately, there will be neither a "RandomDataImpl" nor a
>>> "RandomDataGenerator" (as I suggested in the comments to MATH-915)?
>> Right, there will be no *constructor* taking one of those.  There
>> will be a member variable, constructed from a RandomGenerator, which
>> will change from being a RandomDataImpl to a RandomDataGenerator. 
> I don't understand why "EmpiricalDistribution" would need a
> "RandomDataGenerator" at all. That duplicates the "random source" readily
> available from the parent class. 

RandomDataGenerator extends the capabilities of RandomGenerator and
EmpiricalDistribution uses the extended capabilities.

> [That was part of my comment to MATH-915.]
> The "randomData" field is only actually used in "getNextValue" where the
> code could directly use "UniformRealDistribution" and "NormalDistribution"
> variables instead (as my overwritten fix was doing).

Your version was using RandomDataGenerator / RandomDataImpl
instances to do the work.  In theory, you could use distribution
instances to do this; but this is precisely the kind of use case
that RandomDataImpl was created to address - direct access to data
generation methods following common parametric distributions.


>
>> We could make that change now if RandomDataImpl exposed a
>> getDelegate method to deliver the wrapped RandomDataGenerator.  
> It does. That was one of my changes to fix MATH-916.

Great.  We think alike (sometimes :)

Given that, we could s/RandomDataImpl/RandomDataGenerator in the
private field.

Phil
>
> Gilles
>
>> Then the current member variable could be changed to a
>> RandomDataGenerator and the (now deprecated) constructor taking a
>> RandomDataImpl could convert it.  That is a little more work to
>> implement and probably not worth the hassle for 3.1 as the member
>> field is private.
>>
>> Phil
>>> Gilles
>>>
>>>> Phil
>>>>>  I am
>>>>> sorry I did a bad job explaining what was going on there. 
>>>>> Basically, EmpiricalDistibution needs a RandomDataGenerator /
>>>>> RandomDataImpl to generate data following certain distributions. 
>>>>> What should be provided as a constructor argument for this class
>>>>> (and ValueServer) is a RandomGenerator, which is the underlying
>>>>> source of random data.  The RandomDataImpl constructors are really
>>>>> legacy, going back to the days before RandomGenerator existed.  Does
>>>>> this make sense?
>>>>>
>>>>> Phil
>>>>>> Gilles
>>>>>>
>>>>>>> Fixed javadoc error in EmpiricalDistribution class javadoc.
>>>>>>> Deprecated constructors taking RandomDataImpl instances in EmpiricalDistribution, ValueServer.  These constructors predate RandomGenerator, which should be used directly as the source of random data for these classes.
>>>>>>>
>>>>>>> Modified:
>>>>>>>     commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/EmpiricalDistribution.java
>>>>>>>     commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/ValueServer.java
>>>>>>>
>>>>>>> Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/EmpiricalDistribution.java
>>>>>>> URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/EmpiricalDistribution.java?rev=1421968&r1=1421967&r2=1421968&view=diff
>>>>>>> ==============================================================================
>>>>>>> --- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/EmpiricalDistribution.java (original)
>>>>>>> +++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/EmpiricalDistribution.java Fri Dec 14 16:28:23 2012
>>>>>>> @@ -29,8 +29,8 @@ import java.util.ArrayList;
>>>>>>>  import java.util.List;
>>>>>>>  
>>>>>>>  import org.apache.commons.math3.distribution.AbstractRealDistribution;
>>>>>>> -import org.apache.commons.math3.distribution.RealDistribution;
>>>>>>>  import org.apache.commons.math3.distribution.NormalDistribution;
>>>>>>> +import org.apache.commons.math3.distribution.RealDistribution;
>>>>>>>  import org.apache.commons.math3.exception.MathIllegalStateException;
>>>>>>>  import org.apache.commons.math3.exception.MathInternalError;
>>>>>>>  import org.apache.commons.math3.exception.NullArgumentException;
>>>>>>> @@ -134,18 +134,14 @@ public class EmpiricalDistribution exten
>>>>>>>      /** upper bounds of subintervals in (0,1) "belonging" to the bins */
>>>>>>>      private double[] upperBounds = null;
>>>>>>>  
>>>>>>> -    /** Data generator. */
>>>>>>> -    private final RandomDataGenerator randomDataGen;
>>>>>>> -    /**
>>>>>>> -     * XXX Enable backward-compatibility (to be removed in 4.0).
>>>>>>> -     */
>>>>>>> -    private final boolean useRandomDataImpl;
>>>>>>> +    /** RandomDataImpl instance to use in repeated calls to getNext() */
>>>>>>> +    private final RandomDataImpl randomData;
>>>>>>>  
>>>>>>>      /**
>>>>>>>       * Creates a new EmpiricalDistribution with the default bin count.
>>>>>>>       */
>>>>>>>      public EmpiricalDistribution() {
>>>>>>> -        this(DEFAULT_BIN_COUNT);
>>>>>>> +        this(DEFAULT_BIN_COUNT, new RandomDataImpl());
>>>>>>>      }
>>>>>>>  
>>>>>>>      /**
>>>>>>> @@ -154,7 +150,7 @@ public class EmpiricalDistribution exten
>>>>>>>       * @param binCount number of bins
>>>>>>>       */
>>>>>>>      public EmpiricalDistribution(int binCount) {
>>>>>>> -        this(binCount, (RandomGenerator) null);
>>>>>>> +        this(binCount, new RandomDataImpl());
>>>>>>>      }
>>>>>>>  
>>>>>>>      /**
>>>>>>> @@ -162,82 +158,52 @@ public class EmpiricalDistribution exten
>>>>>>>       * provided {@link RandomGenerator} as the source of random data.
>>>>>>>       *
>>>>>>>       * @param binCount number of bins
>>>>>>> -     * @param randomData random data generator (may be null, resulting in a default generator)
>>>>>>> -     * @deprecated As of 3.1. To be removed in 4.0. Please use
>>>>>>> -     * {@link #EmpiricalDistribution(int,RandomDataGenerator)} instead.
>>>>>>> +     * @param generator random data generator (may be null, resulting in default JDK generator)
>>>>>>> +     * @since 3.0
>>>>>>>       */
>>>>>>> -    @Deprecated
>>>>>>> -    public EmpiricalDistribution(int binCount, RandomDataImpl randomData) {
>>>>>>> +    public EmpiricalDistribution(int binCount, RandomGenerator generator) {
>>>>>>>          this.binCount = binCount;
>>>>>>> -        this.randomData = randomData == null ?
>>>>>>> -            new RandomDataImpl() :
>>>>>>> -            randomData;
>>>>>>> +        randomData = new RandomDataImpl(generator);
>>>>>>>          binStats = new ArrayList<SummaryStatistics>();
>>>>>>> -        useRandomDataImpl = true;
>>>>>>> -        randomDataGen = null;
>>>>>>> -    }
>>>>>>> -    /**
>>>>>>> -     * Creates a new EmpiricalDistribution with the specified bin count using the
>>>>>>> -     * provided {@link RandomGenerator} as the source of random data.
>>>>>>> -     *
>>>>>>> -     * @param randomData random data generator (may be null, resulting in a default generator)
>>>>>>> -     * @deprecated As of 3.1. To be removed in 4.0. Please use
>>>>>>> -     * {@link #EmpiricalDistribution(RandomDataGenerator)} instead.
>>>>>>> -     */
>>>>>>> -    @Deprecated
>>>>>>> -    public EmpiricalDistribution(RandomDataImpl randomData) {
>>>>>>> -        this(DEFAULT_BIN_COUNT, randomData);
>>>>>>>      }
>>>>>>>  
>>>>>>>      /**
>>>>>>> -     * Creates a new EmpiricalDistribution with the specified bin count using the
>>>>>>> -     * provided {@link RandomGenerator} as the source of random data.
>>>>>>> -     *
>>>>>>> -     * @param binCount number of bins
>>>>>>> -     * @param randomData random data generator (may be null, resulting in a default generator)
>>>>>>> -     */
>>>>>>> -    public EmpiricalDistribution(int binCount, RandomDataGenerator randomData) {
>>>>>>> -        this.binCount = binCount;
>>>>>>> -        this.randomDataGen = randomData == null ?
>>>>>>> -            new RandomDataGenerator() :
>>>>>>> -            randomData;
>>>>>>> -        binStats = new ArrayList<SummaryStatistics>();
>>>>>>> -        useRandomDataImpl = false; // XXX Remove in 4.0
>>>>>>> -    }
>>>>>>> -    /**
>>>>>>> -     * Creates a new EmpiricalDistribution with the specified bin count using the
>>>>>>> +     * Creates a new EmpiricalDistribution with default bin count using the
>>>>>>>       * provided {@link RandomGenerator} as the source of random data.
>>>>>>>       *
>>>>>>> -     * @param randomData random data generator (may be null, resulting in a default generator)
>>>>>>> +     * @param generator random data generator (may be null, resulting in default JDK generator)
>>>>>>> +     * @since 3.0
>>>>>>>       */
>>>>>>> -    public EmpiricalDistribution(RandomDataGenerator randomData) {
>>>>>>> -        this(DEFAULT_BIN_COUNT, randomData);
>>>>>>> +    public EmpiricalDistribution(RandomGenerator generator) {
>>>>>>> +        this(DEFAULT_BIN_COUNT, generator);
>>>>>>>      }
>>>>>>>  
>>>>>>>      /**
>>>>>>>       * Creates a new EmpiricalDistribution with the specified bin count using the
>>>>>>> -     * provided {@link RandomGenerator} as the source of random data.
>>>>>>> +     * provided {@link RandomDataImpl} instance as the source of random data.
>>>>>>>       *
>>>>>>>       * @param binCount number of bins
>>>>>>> -     * @param generator random data generator (may be null, resulting in a default generator)
>>>>>>> +     * @param randomData random data generator (may be null, resulting in default JDK generator)
>>>>>>>       * @since 3.0
>>>>>>>       */
>>>>>>> -    public EmpiricalDistribution(int binCount, RandomGenerator generator) {
>>>>>>> -        this(binCount, new RandomDataGenerator(generator));
>>>>>>> +    public EmpiricalDistribution(int binCount, RandomDataImpl randomData) {
>>>>>>> +        this.binCount = binCount;
>>>>>>> +        this.randomData = randomData;
>>>>>>> +        binStats = new ArrayList<SummaryStatistics>();
>>>>>>>      }
>>>>>>>  
>>>>>>>      /**
>>>>>>>       * Creates a new EmpiricalDistribution with default bin count using the
>>>>>>> -     * provided {@link RandomGenerator} as the source of random data.
>>>>>>> +     * provided {@link RandomDataImpl} as the source of random data.
>>>>>>>       *
>>>>>>> -     * @param generator random data generator (may be null, resulting in default generator)
>>>>>>> +     * @param randomData random data generator (may be null, resulting in default JDK generator)
>>>>>>>       * @since 3.0
>>>>>>>       */
>>>>>>> -    public EmpiricalDistribution(RandomGenerator generator) {
>>>>>>> -        this(DEFAULT_BIN_COUNT, generator);
>>>>>>> +    public EmpiricalDistribution(RandomDataImpl randomData) {
>>>>>>> +        this(DEFAULT_BIN_COUNT, randomData);
>>>>>>>      }
>>>>>>>  
>>>>>>> -    /**
>>>>>>> +     /**
>>>>>>>       * Computes the empirical distribution from the provided
>>>>>>>       * array of numbers.
>>>>>>>       *
>>>>>>> @@ -288,7 +254,7 @@ public class EmpiricalDistribution exten
>>>>>>>          } finally {
>>>>>>>             try {
>>>>>>>                 in.close();
>>>>>>> -           } catch (IOException ex) { // NOPMD
>>>>>>> +           } catch (IOException ex) {
>>>>>>>                 // ignore
>>>>>>>             }
>>>>>>>          }
>>>>>>> @@ -320,7 +286,7 @@ public class EmpiricalDistribution exten
>>>>>>>          } finally {
>>>>>>>              try {
>>>>>>>                  in.close();
>>>>>>> -            } catch (IOException ex) { // NOPMD
>>>>>>> +            } catch (IOException ex) {
>>>>>>>                  // ignore
>>>>>>>              }
>>>>>>>          }
>>>>>>> @@ -497,41 +463,22 @@ public class EmpiricalDistribution exten
>>>>>>>              throw new MathIllegalStateException(LocalizedFormats.DISTRIBUTION_NOT_LOADED);
>>>>>>>          }
>>>>>>>  
>>>>>>> -        if (useRandomDataImpl) {
>>>>>>> -            // XXX backward compatibility.
>>>>>>> -            // Start with a uniformly distributed random number in (0, 1)
>>>>>>> -            final double x = randomData.nextUniform(0,1);
>>>>>>> -            // Use this to select the bin and generate a Gaussian within the bin
>>>>>>> -            for (int i = 0; i < binCount; i++) {
>>>>>>> -                if (x <= upperBounds[i]) {
>>>>>>> -                    SummaryStatistics stats = binStats.get(i);
>>>>>>> -                    if (stats.getN() > 0) {
>>>>>>> -                        if (stats.getStandardDeviation() > 0) {  // more than one obs
>>>>>>> -                            return randomData.nextGaussian(stats.getMean(),
>>>>>>> -                                                           stats.getStandardDeviation());
>>>>>>> -                        } else {
>>>>>>> -                            return stats.getMean(); // only one obs in bin
>>>>>>> -                        }
>>>>>>> -                    }
>>>>>>> -                }
>>>>>>> -            }
>>>>>>> -        } else {
>>>>>>> -            // Start with a uniformly distributed random number in (0, 1)
>>>>>>> -            final double x = randomDataGen.nextUniform(0, 1);
>>>>>>> -            // Use this to select the bin and generate a Gaussian within the bin
>>>>>>> -            for (int i = 0; i < binCount; i++) {
>>>>>>> -                if (x <= upperBounds[i]) {
>>>>>>> -                    SummaryStatistics stats = binStats.get(i);
>>>>>>> -                    if (stats.getN() > 0) {
>>>>>>> -                        if (stats.getStandardDeviation() > 0) {  // more than one obs
>>>>>>> -                            return randomDataGen.nextGaussian(stats.getMean(),
>>>>>>> -                                                              stats.getStandardDeviation());
>>>>>>> -                        } else {
>>>>>>> -                            return stats.getMean(); // only one obs in bin
>>>>>>> -                        }
>>>>>>> -                    }
>>>>>>> -                }
>>>>>>> -            }
>>>>>>> +        // Start with a uniformly distributed random number in (0,1)
>>>>>>> +        final double x = randomData.nextUniform(0,1);
>>>>>>> +
>>>>>>> +        // Use this to select the bin and generate a Gaussian within the bin
>>>>>>> +        for (int i = 0; i < binCount; i++) {
>>>>>>> +           if (x <= upperBounds[i]) {
>>>>>>> +               SummaryStatistics stats = binStats.get(i);
>>>>>>> +               if (stats.getN() > 0) {
>>>>>>> +                   if (stats.getStandardDeviation() > 0) {  // more than one obs
>>>>>>> +                       return randomData.nextGaussian(stats.getMean(),
>>>>>>> +                                                      stats.getStandardDeviation());
>>>>>>> +                   } else {
>>>>>>> +                       return stats.getMean(); // only one obs in bin
>>>>>>> +                   }
>>>>>>> +               }
>>>>>>> +           }
>>>>>>>          }
>>>>>>>          throw new MathIllegalStateException(LocalizedFormats.NO_BIN_SELECTED);
>>>>>>>      }
>>>>>>> @@ -624,12 +571,7 @@ public class EmpiricalDistribution exten
>>>>>>>       * @since 3.0
>>>>>>>       */
>>>>>>>      public void reSeed(long seed) {
>>>>>>> -        if (useRandomDataImpl) {
>>>>>>> -            // XXX backward compatibility.
>>>>>>> -            randomData.reSeed(seed);
>>>>>>> -        } else {
>>>>>>> -            randomDataGen.reSeed(seed);
>>>>>>> -        }
>>>>>>> +        randomData.reSeed(seed);
>>>>>>>      }
>>>>>>>  
>>>>>>>      // Distribution methods ---------------------------
>>>>>>> @@ -819,7 +761,7 @@ public class EmpiricalDistribution exten
>>>>>>>       */
>>>>>>>      @Override
>>>>>>>      public void reseedRandomGenerator(long seed) {
>>>>>>> -        reSeed(seed);
>>>>>>> +        randomData.reSeed(seed);
>>>>>>>      }
>>>>>>>  
>>>>>>>      /**
>>>>>>>
>>>>>>> Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/ValueServer.java
>>>>>>> URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/ValueServer.java?rev=1421968&r1=1421967&r2=1421968&view=diff
>>>>>>> ==============================================================================
>>>>>>> --- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/ValueServer.java (original)
>>>>>>> +++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/ValueServer.java Fri Dec 14 16:28:23 2012
>>>>>>> @@ -88,35 +88,36 @@ public class ValueServer {
>>>>>>>      private BufferedReader filePointer = null;
>>>>>>>  
>>>>>>>      /** RandomDataImpl to use for random data generation. */
>>>>>>> -    private final RandomDataGenerator randomData;
>>>>>>> +    private final RandomDataImpl randomData;
>>>>>>>  
>>>>>>>      // Data generation modes ======================================
>>>>>>>  
>>>>>>>      /** Creates new ValueServer */
>>>>>>>      public ValueServer() {
>>>>>>> -        randomData = new RandomDataGenerator();
>>>>>>> +        randomData = new RandomDataImpl();
>>>>>>>      }
>>>>>>>  
>>>>>>>      /**
>>>>>>> -     * Construct a ValueServer instance using a RandomDataGenerator as its source
>>>>>>> +     * Construct a ValueServer instance using a RandomDataImpl as its source
>>>>>>>       * of random data.
>>>>>>>       *
>>>>>>> -     * @param randomData random data source
>>>>>>> +     * @param randomData the RandomDataImpl instance used to source random data
>>>>>>>       * @since 3.0
>>>>>>> +     * @deprecated use {@link #ValueServer(RandomGenerator)}
>>>>>>>       */
>>>>>>> -    public ValueServer(RandomDataGenerator randomData) {
>>>>>>> +    public ValueServer(RandomDataImpl randomData) {
>>>>>>>          this.randomData = randomData;
>>>>>>>      }
>>>>>>> +
>>>>>>>      /**
>>>>>>> -     * Construct a ValueServer instance using a RandomDataImpl as its source
>>>>>>> +     * Construct a ValueServer instance using a RandomGenerator as its source
>>>>>>>       * of random data.
>>>>>>>       *
>>>>>>> -     * @param randomData random data source
>>>>>>> -     * @deprecated As of 3.1. Use {@link #ValueServer(RandomDataGenerator)} instead.
>>>>>>> +     * @since 3.1
>>>>>>> +     * @param generator source of random data
>>>>>>>       */
>>>>>>> -    @Deprecated
>>>>>>> -    public ValueServer(RandomDataImpl randomData) {
>>>>>>> -        this(randomData.getDelegate());
>>>>>>> +    public ValueServer(RandomGenerator generator) {
>>>>>>> +        this.randomData = new RandomDataImpl(generator);
>>>>>>>      }
>>>>>>>  
>>>>>>>      /**
>>>>>>> @@ -288,7 +289,7 @@ public class ValueServer {
>>>>>>>              try {
>>>>>>>                  filePointer.close();
>>>>>>>                  filePointer = null;
>>>>>>> -            } catch (IOException ex) { // NOPMD
>>>>>>> +            } catch (IOException ex) {
>>>>>>>                  // ignore
>>>>>>>              }
>>>>>>>          }
>>>>>>>
>>>>>>>
>>>>>> ---------------------------------------------------------------------
>>>>>> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
>>>>>> For additional commands, e-mail: dev-help@commons.apache.org
>>>>>>
>>>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
>>>> For additional commands, e-mail: dev-help@commons.apache.org
>>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
>>> For additional commands, e-mail: dev-help@commons.apache.org
>>>
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
>> For additional commands, e-mail: dev-help@commons.apache.org
>>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> For additional commands, e-mail: dev-help@commons.apache.org
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Re: svn commit: r1421968 - in /commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random: EmpiricalDistribution.java ValueServer.java

Posted by Gilles Sadowski <gi...@harfang.homelinux.org>.
On Fri, Dec 14, 2012 at 12:14:45PM -0800, Phil Steitz wrote:
> On 12/14/12 11:59 AM, Gilles Sadowski wrote:
> > On Fri, Dec 14, 2012 at 10:03:14AM -0800, Phil Steitz wrote:
> >> On 12/14/12 9:43 AM, Phil Steitz wrote:
> >>> On 12/14/12 8:52 AM, Gilles Sadowski wrote:
> >>>> On Fri, Dec 14, 2012 at 04:28:25PM -0000, psteitz@apache.org wrote:
> >>>>> Author: psteitz
> >>>>> Date: Fri Dec 14 16:28:23 2012
> >>>>> New Revision: 1421968
> >>>>>
> >>>>> URL: http://svn.apache.org/viewvc?rev=1421968&view=rev
> >>>>> Log:
> >>>>> Reverted incompatible changes made in r1420006.
> >>>> I don't understand why you did that.
> >>>> You nullified my changes that fixed (IIUC) the problem while still
> >>>> providing users a smooth upgrade path to using RandomDataGenerator
> >>>> (which it seems was your goal).
> >>> I was basically reverting my original commit, which caused the
> >>> problem.  I started with a revert back to before  r1420006.  Then I
> >>> just added some deprecations.  I should not have introduced new
> >>> constructors or RandomDataGenerator at all at this point. 
> >> Sorry.  Misspoke there.  What I meant was I should not have
> >> introduced a constructor using RandomDataGenerator.  I *did*
> >> introduce one using RandomGenerator, which is what should be used. 
> >> Sorry for the bad communication and somewhat convoluted naming on
> >> this.  Hopefully this makes sense.
> > Si, ultimately, there will be neither a "RandomDataImpl" nor a
> > "RandomDataGenerator" (as I suggested in the comments to MATH-915)?
> 
> Right, there will be no *constructor* taking one of those.  There
> will be a member variable, constructed from a RandomGenerator, which
> will change from being a RandomDataImpl to a RandomDataGenerator. 

I don't understand why "EmpiricalDistribution" would need a
"RandomDataGenerator" at all. That duplicates the "random source" readily
available from the parent class. [That was part of my comment to MATH-915.]
The "randomData" field is only actually used in "getNextValue" where the
code could directly use "UniformRealDistribution" and "NormalDistribution"
variables instead (as my overwritten fix was doing).

> We could make that change now if RandomDataImpl exposed a
> getDelegate method to deliver the wrapped RandomDataGenerator.  

It does. That was one of my changes to fix MATH-916.

Gilles

> Then the current member variable could be changed to a
> RandomDataGenerator and the (now deprecated) constructor taking a
> RandomDataImpl could convert it.  That is a little more work to
> implement and probably not worth the hassle for 3.1 as the member
> field is private.
> 
> Phil
> >
> > Gilles
> >
> >> Phil
> >>>  I am
> >>> sorry I did a bad job explaining what was going on there. 
> >>> Basically, EmpiricalDistibution needs a RandomDataGenerator /
> >>> RandomDataImpl to generate data following certain distributions. 
> >>> What should be provided as a constructor argument for this class
> >>> (and ValueServer) is a RandomGenerator, which is the underlying
> >>> source of random data.  The RandomDataImpl constructors are really
> >>> legacy, going back to the days before RandomGenerator existed.  Does
> >>> this make sense?
> >>>
> >>> Phil
> >>>> Gilles
> >>>>
> >>>>> Fixed javadoc error in EmpiricalDistribution class javadoc.
> >>>>> Deprecated constructors taking RandomDataImpl instances in EmpiricalDistribution, ValueServer.  These constructors predate RandomGenerator, which should be used directly as the source of random data for these classes.
> >>>>>
> >>>>> Modified:
> >>>>>     commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/EmpiricalDistribution.java
> >>>>>     commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/ValueServer.java
> >>>>>
> >>>>> Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/EmpiricalDistribution.java
> >>>>> URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/EmpiricalDistribution.java?rev=1421968&r1=1421967&r2=1421968&view=diff
> >>>>> ==============================================================================
> >>>>> --- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/EmpiricalDistribution.java (original)
> >>>>> +++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/EmpiricalDistribution.java Fri Dec 14 16:28:23 2012
> >>>>> @@ -29,8 +29,8 @@ import java.util.ArrayList;
> >>>>>  import java.util.List;
> >>>>>  
> >>>>>  import org.apache.commons.math3.distribution.AbstractRealDistribution;
> >>>>> -import org.apache.commons.math3.distribution.RealDistribution;
> >>>>>  import org.apache.commons.math3.distribution.NormalDistribution;
> >>>>> +import org.apache.commons.math3.distribution.RealDistribution;
> >>>>>  import org.apache.commons.math3.exception.MathIllegalStateException;
> >>>>>  import org.apache.commons.math3.exception.MathInternalError;
> >>>>>  import org.apache.commons.math3.exception.NullArgumentException;
> >>>>> @@ -134,18 +134,14 @@ public class EmpiricalDistribution exten
> >>>>>      /** upper bounds of subintervals in (0,1) "belonging" to the bins */
> >>>>>      private double[] upperBounds = null;
> >>>>>  
> >>>>> -    /** Data generator. */
> >>>>> -    private final RandomDataGenerator randomDataGen;
> >>>>> -    /**
> >>>>> -     * XXX Enable backward-compatibility (to be removed in 4.0).
> >>>>> -     */
> >>>>> -    private final boolean useRandomDataImpl;
> >>>>> +    /** RandomDataImpl instance to use in repeated calls to getNext() */
> >>>>> +    private final RandomDataImpl randomData;
> >>>>>  
> >>>>>      /**
> >>>>>       * Creates a new EmpiricalDistribution with the default bin count.
> >>>>>       */
> >>>>>      public EmpiricalDistribution() {
> >>>>> -        this(DEFAULT_BIN_COUNT);
> >>>>> +        this(DEFAULT_BIN_COUNT, new RandomDataImpl());
> >>>>>      }
> >>>>>  
> >>>>>      /**
> >>>>> @@ -154,7 +150,7 @@ public class EmpiricalDistribution exten
> >>>>>       * @param binCount number of bins
> >>>>>       */
> >>>>>      public EmpiricalDistribution(int binCount) {
> >>>>> -        this(binCount, (RandomGenerator) null);
> >>>>> +        this(binCount, new RandomDataImpl());
> >>>>>      }
> >>>>>  
> >>>>>      /**
> >>>>> @@ -162,82 +158,52 @@ public class EmpiricalDistribution exten
> >>>>>       * provided {@link RandomGenerator} as the source of random data.
> >>>>>       *
> >>>>>       * @param binCount number of bins
> >>>>> -     * @param randomData random data generator (may be null, resulting in a default generator)
> >>>>> -     * @deprecated As of 3.1. To be removed in 4.0. Please use
> >>>>> -     * {@link #EmpiricalDistribution(int,RandomDataGenerator)} instead.
> >>>>> +     * @param generator random data generator (may be null, resulting in default JDK generator)
> >>>>> +     * @since 3.0
> >>>>>       */
> >>>>> -    @Deprecated
> >>>>> -    public EmpiricalDistribution(int binCount, RandomDataImpl randomData) {
> >>>>> +    public EmpiricalDistribution(int binCount, RandomGenerator generator) {
> >>>>>          this.binCount = binCount;
> >>>>> -        this.randomData = randomData == null ?
> >>>>> -            new RandomDataImpl() :
> >>>>> -            randomData;
> >>>>> +        randomData = new RandomDataImpl(generator);
> >>>>>          binStats = new ArrayList<SummaryStatistics>();
> >>>>> -        useRandomDataImpl = true;
> >>>>> -        randomDataGen = null;
> >>>>> -    }
> >>>>> -    /**
> >>>>> -     * Creates a new EmpiricalDistribution with the specified bin count using the
> >>>>> -     * provided {@link RandomGenerator} as the source of random data.
> >>>>> -     *
> >>>>> -     * @param randomData random data generator (may be null, resulting in a default generator)
> >>>>> -     * @deprecated As of 3.1. To be removed in 4.0. Please use
> >>>>> -     * {@link #EmpiricalDistribution(RandomDataGenerator)} instead.
> >>>>> -     */
> >>>>> -    @Deprecated
> >>>>> -    public EmpiricalDistribution(RandomDataImpl randomData) {
> >>>>> -        this(DEFAULT_BIN_COUNT, randomData);
> >>>>>      }
> >>>>>  
> >>>>>      /**
> >>>>> -     * Creates a new EmpiricalDistribution with the specified bin count using the
> >>>>> -     * provided {@link RandomGenerator} as the source of random data.
> >>>>> -     *
> >>>>> -     * @param binCount number of bins
> >>>>> -     * @param randomData random data generator (may be null, resulting in a default generator)
> >>>>> -     */
> >>>>> -    public EmpiricalDistribution(int binCount, RandomDataGenerator randomData) {
> >>>>> -        this.binCount = binCount;
> >>>>> -        this.randomDataGen = randomData == null ?
> >>>>> -            new RandomDataGenerator() :
> >>>>> -            randomData;
> >>>>> -        binStats = new ArrayList<SummaryStatistics>();
> >>>>> -        useRandomDataImpl = false; // XXX Remove in 4.0
> >>>>> -    }
> >>>>> -    /**
> >>>>> -     * Creates a new EmpiricalDistribution with the specified bin count using the
> >>>>> +     * Creates a new EmpiricalDistribution with default bin count using the
> >>>>>       * provided {@link RandomGenerator} as the source of random data.
> >>>>>       *
> >>>>> -     * @param randomData random data generator (may be null, resulting in a default generator)
> >>>>> +     * @param generator random data generator (may be null, resulting in default JDK generator)
> >>>>> +     * @since 3.0
> >>>>>       */
> >>>>> -    public EmpiricalDistribution(RandomDataGenerator randomData) {
> >>>>> -        this(DEFAULT_BIN_COUNT, randomData);
> >>>>> +    public EmpiricalDistribution(RandomGenerator generator) {
> >>>>> +        this(DEFAULT_BIN_COUNT, generator);
> >>>>>      }
> >>>>>  
> >>>>>      /**
> >>>>>       * Creates a new EmpiricalDistribution with the specified bin count using the
> >>>>> -     * provided {@link RandomGenerator} as the source of random data.
> >>>>> +     * provided {@link RandomDataImpl} instance as the source of random data.
> >>>>>       *
> >>>>>       * @param binCount number of bins
> >>>>> -     * @param generator random data generator (may be null, resulting in a default generator)
> >>>>> +     * @param randomData random data generator (may be null, resulting in default JDK generator)
> >>>>>       * @since 3.0
> >>>>>       */
> >>>>> -    public EmpiricalDistribution(int binCount, RandomGenerator generator) {
> >>>>> -        this(binCount, new RandomDataGenerator(generator));
> >>>>> +    public EmpiricalDistribution(int binCount, RandomDataImpl randomData) {
> >>>>> +        this.binCount = binCount;
> >>>>> +        this.randomData = randomData;
> >>>>> +        binStats = new ArrayList<SummaryStatistics>();
> >>>>>      }
> >>>>>  
> >>>>>      /**
> >>>>>       * Creates a new EmpiricalDistribution with default bin count using the
> >>>>> -     * provided {@link RandomGenerator} as the source of random data.
> >>>>> +     * provided {@link RandomDataImpl} as the source of random data.
> >>>>>       *
> >>>>> -     * @param generator random data generator (may be null, resulting in default generator)
> >>>>> +     * @param randomData random data generator (may be null, resulting in default JDK generator)
> >>>>>       * @since 3.0
> >>>>>       */
> >>>>> -    public EmpiricalDistribution(RandomGenerator generator) {
> >>>>> -        this(DEFAULT_BIN_COUNT, generator);
> >>>>> +    public EmpiricalDistribution(RandomDataImpl randomData) {
> >>>>> +        this(DEFAULT_BIN_COUNT, randomData);
> >>>>>      }
> >>>>>  
> >>>>> -    /**
> >>>>> +     /**
> >>>>>       * Computes the empirical distribution from the provided
> >>>>>       * array of numbers.
> >>>>>       *
> >>>>> @@ -288,7 +254,7 @@ public class EmpiricalDistribution exten
> >>>>>          } finally {
> >>>>>             try {
> >>>>>                 in.close();
> >>>>> -           } catch (IOException ex) { // NOPMD
> >>>>> +           } catch (IOException ex) {
> >>>>>                 // ignore
> >>>>>             }
> >>>>>          }
> >>>>> @@ -320,7 +286,7 @@ public class EmpiricalDistribution exten
> >>>>>          } finally {
> >>>>>              try {
> >>>>>                  in.close();
> >>>>> -            } catch (IOException ex) { // NOPMD
> >>>>> +            } catch (IOException ex) {
> >>>>>                  // ignore
> >>>>>              }
> >>>>>          }
> >>>>> @@ -497,41 +463,22 @@ public class EmpiricalDistribution exten
> >>>>>              throw new MathIllegalStateException(LocalizedFormats.DISTRIBUTION_NOT_LOADED);
> >>>>>          }
> >>>>>  
> >>>>> -        if (useRandomDataImpl) {
> >>>>> -            // XXX backward compatibility.
> >>>>> -            // Start with a uniformly distributed random number in (0, 1)
> >>>>> -            final double x = randomData.nextUniform(0,1);
> >>>>> -            // Use this to select the bin and generate a Gaussian within the bin
> >>>>> -            for (int i = 0; i < binCount; i++) {
> >>>>> -                if (x <= upperBounds[i]) {
> >>>>> -                    SummaryStatistics stats = binStats.get(i);
> >>>>> -                    if (stats.getN() > 0) {
> >>>>> -                        if (stats.getStandardDeviation() > 0) {  // more than one obs
> >>>>> -                            return randomData.nextGaussian(stats.getMean(),
> >>>>> -                                                           stats.getStandardDeviation());
> >>>>> -                        } else {
> >>>>> -                            return stats.getMean(); // only one obs in bin
> >>>>> -                        }
> >>>>> -                    }
> >>>>> -                }
> >>>>> -            }
> >>>>> -        } else {
> >>>>> -            // Start with a uniformly distributed random number in (0, 1)
> >>>>> -            final double x = randomDataGen.nextUniform(0, 1);
> >>>>> -            // Use this to select the bin and generate a Gaussian within the bin
> >>>>> -            for (int i = 0; i < binCount; i++) {
> >>>>> -                if (x <= upperBounds[i]) {
> >>>>> -                    SummaryStatistics stats = binStats.get(i);
> >>>>> -                    if (stats.getN() > 0) {
> >>>>> -                        if (stats.getStandardDeviation() > 0) {  // more than one obs
> >>>>> -                            return randomDataGen.nextGaussian(stats.getMean(),
> >>>>> -                                                              stats.getStandardDeviation());
> >>>>> -                        } else {
> >>>>> -                            return stats.getMean(); // only one obs in bin
> >>>>> -                        }
> >>>>> -                    }
> >>>>> -                }
> >>>>> -            }
> >>>>> +        // Start with a uniformly distributed random number in (0,1)
> >>>>> +        final double x = randomData.nextUniform(0,1);
> >>>>> +
> >>>>> +        // Use this to select the bin and generate a Gaussian within the bin
> >>>>> +        for (int i = 0; i < binCount; i++) {
> >>>>> +           if (x <= upperBounds[i]) {
> >>>>> +               SummaryStatistics stats = binStats.get(i);
> >>>>> +               if (stats.getN() > 0) {
> >>>>> +                   if (stats.getStandardDeviation() > 0) {  // more than one obs
> >>>>> +                       return randomData.nextGaussian(stats.getMean(),
> >>>>> +                                                      stats.getStandardDeviation());
> >>>>> +                   } else {
> >>>>> +                       return stats.getMean(); // only one obs in bin
> >>>>> +                   }
> >>>>> +               }
> >>>>> +           }
> >>>>>          }
> >>>>>          throw new MathIllegalStateException(LocalizedFormats.NO_BIN_SELECTED);
> >>>>>      }
> >>>>> @@ -624,12 +571,7 @@ public class EmpiricalDistribution exten
> >>>>>       * @since 3.0
> >>>>>       */
> >>>>>      public void reSeed(long seed) {
> >>>>> -        if (useRandomDataImpl) {
> >>>>> -            // XXX backward compatibility.
> >>>>> -            randomData.reSeed(seed);
> >>>>> -        } else {
> >>>>> -            randomDataGen.reSeed(seed);
> >>>>> -        }
> >>>>> +        randomData.reSeed(seed);
> >>>>>      }
> >>>>>  
> >>>>>      // Distribution methods ---------------------------
> >>>>> @@ -819,7 +761,7 @@ public class EmpiricalDistribution exten
> >>>>>       */
> >>>>>      @Override
> >>>>>      public void reseedRandomGenerator(long seed) {
> >>>>> -        reSeed(seed);
> >>>>> +        randomData.reSeed(seed);
> >>>>>      }
> >>>>>  
> >>>>>      /**
> >>>>>
> >>>>> Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/ValueServer.java
> >>>>> URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/ValueServer.java?rev=1421968&r1=1421967&r2=1421968&view=diff
> >>>>> ==============================================================================
> >>>>> --- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/ValueServer.java (original)
> >>>>> +++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/ValueServer.java Fri Dec 14 16:28:23 2012
> >>>>> @@ -88,35 +88,36 @@ public class ValueServer {
> >>>>>      private BufferedReader filePointer = null;
> >>>>>  
> >>>>>      /** RandomDataImpl to use for random data generation. */
> >>>>> -    private final RandomDataGenerator randomData;
> >>>>> +    private final RandomDataImpl randomData;
> >>>>>  
> >>>>>      // Data generation modes ======================================
> >>>>>  
> >>>>>      /** Creates new ValueServer */
> >>>>>      public ValueServer() {
> >>>>> -        randomData = new RandomDataGenerator();
> >>>>> +        randomData = new RandomDataImpl();
> >>>>>      }
> >>>>>  
> >>>>>      /**
> >>>>> -     * Construct a ValueServer instance using a RandomDataGenerator as its source
> >>>>> +     * Construct a ValueServer instance using a RandomDataImpl as its source
> >>>>>       * of random data.
> >>>>>       *
> >>>>> -     * @param randomData random data source
> >>>>> +     * @param randomData the RandomDataImpl instance used to source random data
> >>>>>       * @since 3.0
> >>>>> +     * @deprecated use {@link #ValueServer(RandomGenerator)}
> >>>>>       */
> >>>>> -    public ValueServer(RandomDataGenerator randomData) {
> >>>>> +    public ValueServer(RandomDataImpl randomData) {
> >>>>>          this.randomData = randomData;
> >>>>>      }
> >>>>> +
> >>>>>      /**
> >>>>> -     * Construct a ValueServer instance using a RandomDataImpl as its source
> >>>>> +     * Construct a ValueServer instance using a RandomGenerator as its source
> >>>>>       * of random data.
> >>>>>       *
> >>>>> -     * @param randomData random data source
> >>>>> -     * @deprecated As of 3.1. Use {@link #ValueServer(RandomDataGenerator)} instead.
> >>>>> +     * @since 3.1
> >>>>> +     * @param generator source of random data
> >>>>>       */
> >>>>> -    @Deprecated
> >>>>> -    public ValueServer(RandomDataImpl randomData) {
> >>>>> -        this(randomData.getDelegate());
> >>>>> +    public ValueServer(RandomGenerator generator) {
> >>>>> +        this.randomData = new RandomDataImpl(generator);
> >>>>>      }
> >>>>>  
> >>>>>      /**
> >>>>> @@ -288,7 +289,7 @@ public class ValueServer {
> >>>>>              try {
> >>>>>                  filePointer.close();
> >>>>>                  filePointer = null;
> >>>>> -            } catch (IOException ex) { // NOPMD
> >>>>> +            } catch (IOException ex) {
> >>>>>                  // ignore
> >>>>>              }
> >>>>>          }
> >>>>>
> >>>>>
> >>>> ---------------------------------------------------------------------
> >>>> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> >>>> For additional commands, e-mail: dev-help@commons.apache.org
> >>>>
> >>>>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> >> For additional commands, e-mail: dev-help@commons.apache.org
> >>
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> > For additional commands, e-mail: dev-help@commons.apache.org
> >
> >
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> For additional commands, e-mail: dev-help@commons.apache.org
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Re: svn commit: r1421968 - in /commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random: EmpiricalDistribution.java ValueServer.java

Posted by Phil Steitz <ph...@gmail.com>.
On 12/14/12 11:59 AM, Gilles Sadowski wrote:
> On Fri, Dec 14, 2012 at 10:03:14AM -0800, Phil Steitz wrote:
>> On 12/14/12 9:43 AM, Phil Steitz wrote:
>>> On 12/14/12 8:52 AM, Gilles Sadowski wrote:
>>>> On Fri, Dec 14, 2012 at 04:28:25PM -0000, psteitz@apache.org wrote:
>>>>> Author: psteitz
>>>>> Date: Fri Dec 14 16:28:23 2012
>>>>> New Revision: 1421968
>>>>>
>>>>> URL: http://svn.apache.org/viewvc?rev=1421968&view=rev
>>>>> Log:
>>>>> Reverted incompatible changes made in r1420006.
>>>> I don't understand why you did that.
>>>> You nullified my changes that fixed (IIUC) the problem while still
>>>> providing users a smooth upgrade path to using RandomDataGenerator
>>>> (which it seems was your goal).
>>> I was basically reverting my original commit, which caused the
>>> problem.  I started with a revert back to before  r1420006.  Then I
>>> just added some deprecations.  I should not have introduced new
>>> constructors or RandomDataGenerator at all at this point. 
>> Sorry.  Misspoke there.  What I meant was I should not have
>> introduced a constructor using RandomDataGenerator.  I *did*
>> introduce one using RandomGenerator, which is what should be used. 
>> Sorry for the bad communication and somewhat convoluted naming on
>> this.  Hopefully this makes sense.
> Si, ultimately, there will be neither a "RandomDataImpl" nor a
> "RandomDataGenerator" (as I suggested in the comments to MATH-915)?

Right, there will be no *constructor* taking one of those.  There
will be a member variable, constructed from a RandomGenerator, which
will change from being a RandomDataImpl to a RandomDataGenerator. 
We could make that change now if RandomDataImpl exposed a
getDelegate method to deliver the wrapped RandomDataGenerator.  
Then the current member variable could be changed to a
RandomDataGenerator and the (now deprecated) constructor taking a
RandomDataImpl could convert it.  That is a little more work to
implement and probably not worth the hassle for 3.1 as the member
field is private.

Phil
>
> Gilles
>
>> Phil
>>>  I am
>>> sorry I did a bad job explaining what was going on there. 
>>> Basically, EmpiricalDistibution needs a RandomDataGenerator /
>>> RandomDataImpl to generate data following certain distributions. 
>>> What should be provided as a constructor argument for this class
>>> (and ValueServer) is a RandomGenerator, which is the underlying
>>> source of random data.  The RandomDataImpl constructors are really
>>> legacy, going back to the days before RandomGenerator existed.  Does
>>> this make sense?
>>>
>>> Phil
>>>> Gilles
>>>>
>>>>> Fixed javadoc error in EmpiricalDistribution class javadoc.
>>>>> Deprecated constructors taking RandomDataImpl instances in EmpiricalDistribution, ValueServer.  These constructors predate RandomGenerator, which should be used directly as the source of random data for these classes.
>>>>>
>>>>> Modified:
>>>>>     commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/EmpiricalDistribution.java
>>>>>     commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/ValueServer.java
>>>>>
>>>>> Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/EmpiricalDistribution.java
>>>>> URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/EmpiricalDistribution.java?rev=1421968&r1=1421967&r2=1421968&view=diff
>>>>> ==============================================================================
>>>>> --- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/EmpiricalDistribution.java (original)
>>>>> +++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/EmpiricalDistribution.java Fri Dec 14 16:28:23 2012
>>>>> @@ -29,8 +29,8 @@ import java.util.ArrayList;
>>>>>  import java.util.List;
>>>>>  
>>>>>  import org.apache.commons.math3.distribution.AbstractRealDistribution;
>>>>> -import org.apache.commons.math3.distribution.RealDistribution;
>>>>>  import org.apache.commons.math3.distribution.NormalDistribution;
>>>>> +import org.apache.commons.math3.distribution.RealDistribution;
>>>>>  import org.apache.commons.math3.exception.MathIllegalStateException;
>>>>>  import org.apache.commons.math3.exception.MathInternalError;
>>>>>  import org.apache.commons.math3.exception.NullArgumentException;
>>>>> @@ -134,18 +134,14 @@ public class EmpiricalDistribution exten
>>>>>      /** upper bounds of subintervals in (0,1) "belonging" to the bins */
>>>>>      private double[] upperBounds = null;
>>>>>  
>>>>> -    /** Data generator. */
>>>>> -    private final RandomDataGenerator randomDataGen;
>>>>> -    /**
>>>>> -     * XXX Enable backward-compatibility (to be removed in 4.0).
>>>>> -     */
>>>>> -    private final boolean useRandomDataImpl;
>>>>> +    /** RandomDataImpl instance to use in repeated calls to getNext() */
>>>>> +    private final RandomDataImpl randomData;
>>>>>  
>>>>>      /**
>>>>>       * Creates a new EmpiricalDistribution with the default bin count.
>>>>>       */
>>>>>      public EmpiricalDistribution() {
>>>>> -        this(DEFAULT_BIN_COUNT);
>>>>> +        this(DEFAULT_BIN_COUNT, new RandomDataImpl());
>>>>>      }
>>>>>  
>>>>>      /**
>>>>> @@ -154,7 +150,7 @@ public class EmpiricalDistribution exten
>>>>>       * @param binCount number of bins
>>>>>       */
>>>>>      public EmpiricalDistribution(int binCount) {
>>>>> -        this(binCount, (RandomGenerator) null);
>>>>> +        this(binCount, new RandomDataImpl());
>>>>>      }
>>>>>  
>>>>>      /**
>>>>> @@ -162,82 +158,52 @@ public class EmpiricalDistribution exten
>>>>>       * provided {@link RandomGenerator} as the source of random data.
>>>>>       *
>>>>>       * @param binCount number of bins
>>>>> -     * @param randomData random data generator (may be null, resulting in a default generator)
>>>>> -     * @deprecated As of 3.1. To be removed in 4.0. Please use
>>>>> -     * {@link #EmpiricalDistribution(int,RandomDataGenerator)} instead.
>>>>> +     * @param generator random data generator (may be null, resulting in default JDK generator)
>>>>> +     * @since 3.0
>>>>>       */
>>>>> -    @Deprecated
>>>>> -    public EmpiricalDistribution(int binCount, RandomDataImpl randomData) {
>>>>> +    public EmpiricalDistribution(int binCount, RandomGenerator generator) {
>>>>>          this.binCount = binCount;
>>>>> -        this.randomData = randomData == null ?
>>>>> -            new RandomDataImpl() :
>>>>> -            randomData;
>>>>> +        randomData = new RandomDataImpl(generator);
>>>>>          binStats = new ArrayList<SummaryStatistics>();
>>>>> -        useRandomDataImpl = true;
>>>>> -        randomDataGen = null;
>>>>> -    }
>>>>> -    /**
>>>>> -     * Creates a new EmpiricalDistribution with the specified bin count using the
>>>>> -     * provided {@link RandomGenerator} as the source of random data.
>>>>> -     *
>>>>> -     * @param randomData random data generator (may be null, resulting in a default generator)
>>>>> -     * @deprecated As of 3.1. To be removed in 4.0. Please use
>>>>> -     * {@link #EmpiricalDistribution(RandomDataGenerator)} instead.
>>>>> -     */
>>>>> -    @Deprecated
>>>>> -    public EmpiricalDistribution(RandomDataImpl randomData) {
>>>>> -        this(DEFAULT_BIN_COUNT, randomData);
>>>>>      }
>>>>>  
>>>>>      /**
>>>>> -     * Creates a new EmpiricalDistribution with the specified bin count using the
>>>>> -     * provided {@link RandomGenerator} as the source of random data.
>>>>> -     *
>>>>> -     * @param binCount number of bins
>>>>> -     * @param randomData random data generator (may be null, resulting in a default generator)
>>>>> -     */
>>>>> -    public EmpiricalDistribution(int binCount, RandomDataGenerator randomData) {
>>>>> -        this.binCount = binCount;
>>>>> -        this.randomDataGen = randomData == null ?
>>>>> -            new RandomDataGenerator() :
>>>>> -            randomData;
>>>>> -        binStats = new ArrayList<SummaryStatistics>();
>>>>> -        useRandomDataImpl = false; // XXX Remove in 4.0
>>>>> -    }
>>>>> -    /**
>>>>> -     * Creates a new EmpiricalDistribution with the specified bin count using the
>>>>> +     * Creates a new EmpiricalDistribution with default bin count using the
>>>>>       * provided {@link RandomGenerator} as the source of random data.
>>>>>       *
>>>>> -     * @param randomData random data generator (may be null, resulting in a default generator)
>>>>> +     * @param generator random data generator (may be null, resulting in default JDK generator)
>>>>> +     * @since 3.0
>>>>>       */
>>>>> -    public EmpiricalDistribution(RandomDataGenerator randomData) {
>>>>> -        this(DEFAULT_BIN_COUNT, randomData);
>>>>> +    public EmpiricalDistribution(RandomGenerator generator) {
>>>>> +        this(DEFAULT_BIN_COUNT, generator);
>>>>>      }
>>>>>  
>>>>>      /**
>>>>>       * Creates a new EmpiricalDistribution with the specified bin count using the
>>>>> -     * provided {@link RandomGenerator} as the source of random data.
>>>>> +     * provided {@link RandomDataImpl} instance as the source of random data.
>>>>>       *
>>>>>       * @param binCount number of bins
>>>>> -     * @param generator random data generator (may be null, resulting in a default generator)
>>>>> +     * @param randomData random data generator (may be null, resulting in default JDK generator)
>>>>>       * @since 3.0
>>>>>       */
>>>>> -    public EmpiricalDistribution(int binCount, RandomGenerator generator) {
>>>>> -        this(binCount, new RandomDataGenerator(generator));
>>>>> +    public EmpiricalDistribution(int binCount, RandomDataImpl randomData) {
>>>>> +        this.binCount = binCount;
>>>>> +        this.randomData = randomData;
>>>>> +        binStats = new ArrayList<SummaryStatistics>();
>>>>>      }
>>>>>  
>>>>>      /**
>>>>>       * Creates a new EmpiricalDistribution with default bin count using the
>>>>> -     * provided {@link RandomGenerator} as the source of random data.
>>>>> +     * provided {@link RandomDataImpl} as the source of random data.
>>>>>       *
>>>>> -     * @param generator random data generator (may be null, resulting in default generator)
>>>>> +     * @param randomData random data generator (may be null, resulting in default JDK generator)
>>>>>       * @since 3.0
>>>>>       */
>>>>> -    public EmpiricalDistribution(RandomGenerator generator) {
>>>>> -        this(DEFAULT_BIN_COUNT, generator);
>>>>> +    public EmpiricalDistribution(RandomDataImpl randomData) {
>>>>> +        this(DEFAULT_BIN_COUNT, randomData);
>>>>>      }
>>>>>  
>>>>> -    /**
>>>>> +     /**
>>>>>       * Computes the empirical distribution from the provided
>>>>>       * array of numbers.
>>>>>       *
>>>>> @@ -288,7 +254,7 @@ public class EmpiricalDistribution exten
>>>>>          } finally {
>>>>>             try {
>>>>>                 in.close();
>>>>> -           } catch (IOException ex) { // NOPMD
>>>>> +           } catch (IOException ex) {
>>>>>                 // ignore
>>>>>             }
>>>>>          }
>>>>> @@ -320,7 +286,7 @@ public class EmpiricalDistribution exten
>>>>>          } finally {
>>>>>              try {
>>>>>                  in.close();
>>>>> -            } catch (IOException ex) { // NOPMD
>>>>> +            } catch (IOException ex) {
>>>>>                  // ignore
>>>>>              }
>>>>>          }
>>>>> @@ -497,41 +463,22 @@ public class EmpiricalDistribution exten
>>>>>              throw new MathIllegalStateException(LocalizedFormats.DISTRIBUTION_NOT_LOADED);
>>>>>          }
>>>>>  
>>>>> -        if (useRandomDataImpl) {
>>>>> -            // XXX backward compatibility.
>>>>> -            // Start with a uniformly distributed random number in (0, 1)
>>>>> -            final double x = randomData.nextUniform(0,1);
>>>>> -            // Use this to select the bin and generate a Gaussian within the bin
>>>>> -            for (int i = 0; i < binCount; i++) {
>>>>> -                if (x <= upperBounds[i]) {
>>>>> -                    SummaryStatistics stats = binStats.get(i);
>>>>> -                    if (stats.getN() > 0) {
>>>>> -                        if (stats.getStandardDeviation() > 0) {  // more than one obs
>>>>> -                            return randomData.nextGaussian(stats.getMean(),
>>>>> -                                                           stats.getStandardDeviation());
>>>>> -                        } else {
>>>>> -                            return stats.getMean(); // only one obs in bin
>>>>> -                        }
>>>>> -                    }
>>>>> -                }
>>>>> -            }
>>>>> -        } else {
>>>>> -            // Start with a uniformly distributed random number in (0, 1)
>>>>> -            final double x = randomDataGen.nextUniform(0, 1);
>>>>> -            // Use this to select the bin and generate a Gaussian within the bin
>>>>> -            for (int i = 0; i < binCount; i++) {
>>>>> -                if (x <= upperBounds[i]) {
>>>>> -                    SummaryStatistics stats = binStats.get(i);
>>>>> -                    if (stats.getN() > 0) {
>>>>> -                        if (stats.getStandardDeviation() > 0) {  // more than one obs
>>>>> -                            return randomDataGen.nextGaussian(stats.getMean(),
>>>>> -                                                              stats.getStandardDeviation());
>>>>> -                        } else {
>>>>> -                            return stats.getMean(); // only one obs in bin
>>>>> -                        }
>>>>> -                    }
>>>>> -                }
>>>>> -            }
>>>>> +        // Start with a uniformly distributed random number in (0,1)
>>>>> +        final double x = randomData.nextUniform(0,1);
>>>>> +
>>>>> +        // Use this to select the bin and generate a Gaussian within the bin
>>>>> +        for (int i = 0; i < binCount; i++) {
>>>>> +           if (x <= upperBounds[i]) {
>>>>> +               SummaryStatistics stats = binStats.get(i);
>>>>> +               if (stats.getN() > 0) {
>>>>> +                   if (stats.getStandardDeviation() > 0) {  // more than one obs
>>>>> +                       return randomData.nextGaussian(stats.getMean(),
>>>>> +                                                      stats.getStandardDeviation());
>>>>> +                   } else {
>>>>> +                       return stats.getMean(); // only one obs in bin
>>>>> +                   }
>>>>> +               }
>>>>> +           }
>>>>>          }
>>>>>          throw new MathIllegalStateException(LocalizedFormats.NO_BIN_SELECTED);
>>>>>      }
>>>>> @@ -624,12 +571,7 @@ public class EmpiricalDistribution exten
>>>>>       * @since 3.0
>>>>>       */
>>>>>      public void reSeed(long seed) {
>>>>> -        if (useRandomDataImpl) {
>>>>> -            // XXX backward compatibility.
>>>>> -            randomData.reSeed(seed);
>>>>> -        } else {
>>>>> -            randomDataGen.reSeed(seed);
>>>>> -        }
>>>>> +        randomData.reSeed(seed);
>>>>>      }
>>>>>  
>>>>>      // Distribution methods ---------------------------
>>>>> @@ -819,7 +761,7 @@ public class EmpiricalDistribution exten
>>>>>       */
>>>>>      @Override
>>>>>      public void reseedRandomGenerator(long seed) {
>>>>> -        reSeed(seed);
>>>>> +        randomData.reSeed(seed);
>>>>>      }
>>>>>  
>>>>>      /**
>>>>>
>>>>> Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/ValueServer.java
>>>>> URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/ValueServer.java?rev=1421968&r1=1421967&r2=1421968&view=diff
>>>>> ==============================================================================
>>>>> --- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/ValueServer.java (original)
>>>>> +++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/ValueServer.java Fri Dec 14 16:28:23 2012
>>>>> @@ -88,35 +88,36 @@ public class ValueServer {
>>>>>      private BufferedReader filePointer = null;
>>>>>  
>>>>>      /** RandomDataImpl to use for random data generation. */
>>>>> -    private final RandomDataGenerator randomData;
>>>>> +    private final RandomDataImpl randomData;
>>>>>  
>>>>>      // Data generation modes ======================================
>>>>>  
>>>>>      /** Creates new ValueServer */
>>>>>      public ValueServer() {
>>>>> -        randomData = new RandomDataGenerator();
>>>>> +        randomData = new RandomDataImpl();
>>>>>      }
>>>>>  
>>>>>      /**
>>>>> -     * Construct a ValueServer instance using a RandomDataGenerator as its source
>>>>> +     * Construct a ValueServer instance using a RandomDataImpl as its source
>>>>>       * of random data.
>>>>>       *
>>>>> -     * @param randomData random data source
>>>>> +     * @param randomData the RandomDataImpl instance used to source random data
>>>>>       * @since 3.0
>>>>> +     * @deprecated use {@link #ValueServer(RandomGenerator)}
>>>>>       */
>>>>> -    public ValueServer(RandomDataGenerator randomData) {
>>>>> +    public ValueServer(RandomDataImpl randomData) {
>>>>>          this.randomData = randomData;
>>>>>      }
>>>>> +
>>>>>      /**
>>>>> -     * Construct a ValueServer instance using a RandomDataImpl as its source
>>>>> +     * Construct a ValueServer instance using a RandomGenerator as its source
>>>>>       * of random data.
>>>>>       *
>>>>> -     * @param randomData random data source
>>>>> -     * @deprecated As of 3.1. Use {@link #ValueServer(RandomDataGenerator)} instead.
>>>>> +     * @since 3.1
>>>>> +     * @param generator source of random data
>>>>>       */
>>>>> -    @Deprecated
>>>>> -    public ValueServer(RandomDataImpl randomData) {
>>>>> -        this(randomData.getDelegate());
>>>>> +    public ValueServer(RandomGenerator generator) {
>>>>> +        this.randomData = new RandomDataImpl(generator);
>>>>>      }
>>>>>  
>>>>>      /**
>>>>> @@ -288,7 +289,7 @@ public class ValueServer {
>>>>>              try {
>>>>>                  filePointer.close();
>>>>>                  filePointer = null;
>>>>> -            } catch (IOException ex) { // NOPMD
>>>>> +            } catch (IOException ex) {
>>>>>                  // ignore
>>>>>              }
>>>>>          }
>>>>>
>>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
>>>> For additional commands, e-mail: dev-help@commons.apache.org
>>>>
>>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
>> For additional commands, e-mail: dev-help@commons.apache.org
>>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> For additional commands, e-mail: dev-help@commons.apache.org
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Re: svn commit: r1421968 - in /commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random: EmpiricalDistribution.java ValueServer.java

Posted by Gilles Sadowski <gi...@harfang.homelinux.org>.
On Fri, Dec 14, 2012 at 10:03:14AM -0800, Phil Steitz wrote:
> On 12/14/12 9:43 AM, Phil Steitz wrote:
> > On 12/14/12 8:52 AM, Gilles Sadowski wrote:
> >> On Fri, Dec 14, 2012 at 04:28:25PM -0000, psteitz@apache.org wrote:
> >>> Author: psteitz
> >>> Date: Fri Dec 14 16:28:23 2012
> >>> New Revision: 1421968
> >>>
> >>> URL: http://svn.apache.org/viewvc?rev=1421968&view=rev
> >>> Log:
> >>> Reverted incompatible changes made in r1420006.
> >> I don't understand why you did that.
> >> You nullified my changes that fixed (IIUC) the problem while still
> >> providing users a smooth upgrade path to using RandomDataGenerator
> >> (which it seems was your goal).
> > I was basically reverting my original commit, which caused the
> > problem.  I started with a revert back to before  r1420006.  Then I
> > just added some deprecations.  I should not have introduced new
> > constructors or RandomDataGenerator at all at this point. 
> 
> Sorry.  Misspoke there.  What I meant was I should not have
> introduced a constructor using RandomDataGenerator.  I *did*
> introduce one using RandomGenerator, which is what should be used. 
> Sorry for the bad communication and somewhat convoluted naming on
> this.  Hopefully this makes sense.

Si, ultimately, there will be neither a "RandomDataImpl" nor a
"RandomDataGenerator" (as I suggested in the comments to MATH-915)?

Gilles

> 
> Phil
> >  I am
> > sorry I did a bad job explaining what was going on there. 
> > Basically, EmpiricalDistibution needs a RandomDataGenerator /
> > RandomDataImpl to generate data following certain distributions. 
> > What should be provided as a constructor argument for this class
> > (and ValueServer) is a RandomGenerator, which is the underlying
> > source of random data.  The RandomDataImpl constructors are really
> > legacy, going back to the days before RandomGenerator existed.  Does
> > this make sense?
> >
> > Phil
> >>
> >> Gilles
> >>
> >>> Fixed javadoc error in EmpiricalDistribution class javadoc.
> >>> Deprecated constructors taking RandomDataImpl instances in EmpiricalDistribution, ValueServer.  These constructors predate RandomGenerator, which should be used directly as the source of random data for these classes.
> >>>
> >>> Modified:
> >>>     commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/EmpiricalDistribution.java
> >>>     commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/ValueServer.java
> >>>
> >>> Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/EmpiricalDistribution.java
> >>> URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/EmpiricalDistribution.java?rev=1421968&r1=1421967&r2=1421968&view=diff
> >>> ==============================================================================
> >>> --- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/EmpiricalDistribution.java (original)
> >>> +++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/EmpiricalDistribution.java Fri Dec 14 16:28:23 2012
> >>> @@ -29,8 +29,8 @@ import java.util.ArrayList;
> >>>  import java.util.List;
> >>>  
> >>>  import org.apache.commons.math3.distribution.AbstractRealDistribution;
> >>> -import org.apache.commons.math3.distribution.RealDistribution;
> >>>  import org.apache.commons.math3.distribution.NormalDistribution;
> >>> +import org.apache.commons.math3.distribution.RealDistribution;
> >>>  import org.apache.commons.math3.exception.MathIllegalStateException;
> >>>  import org.apache.commons.math3.exception.MathInternalError;
> >>>  import org.apache.commons.math3.exception.NullArgumentException;
> >>> @@ -134,18 +134,14 @@ public class EmpiricalDistribution exten
> >>>      /** upper bounds of subintervals in (0,1) "belonging" to the bins */
> >>>      private double[] upperBounds = null;
> >>>  
> >>> -    /** Data generator. */
> >>> -    private final RandomDataGenerator randomDataGen;
> >>> -    /**
> >>> -     * XXX Enable backward-compatibility (to be removed in 4.0).
> >>> -     */
> >>> -    private final boolean useRandomDataImpl;
> >>> +    /** RandomDataImpl instance to use in repeated calls to getNext() */
> >>> +    private final RandomDataImpl randomData;
> >>>  
> >>>      /**
> >>>       * Creates a new EmpiricalDistribution with the default bin count.
> >>>       */
> >>>      public EmpiricalDistribution() {
> >>> -        this(DEFAULT_BIN_COUNT);
> >>> +        this(DEFAULT_BIN_COUNT, new RandomDataImpl());
> >>>      }
> >>>  
> >>>      /**
> >>> @@ -154,7 +150,7 @@ public class EmpiricalDistribution exten
> >>>       * @param binCount number of bins
> >>>       */
> >>>      public EmpiricalDistribution(int binCount) {
> >>> -        this(binCount, (RandomGenerator) null);
> >>> +        this(binCount, new RandomDataImpl());
> >>>      }
> >>>  
> >>>      /**
> >>> @@ -162,82 +158,52 @@ public class EmpiricalDistribution exten
> >>>       * provided {@link RandomGenerator} as the source of random data.
> >>>       *
> >>>       * @param binCount number of bins
> >>> -     * @param randomData random data generator (may be null, resulting in a default generator)
> >>> -     * @deprecated As of 3.1. To be removed in 4.0. Please use
> >>> -     * {@link #EmpiricalDistribution(int,RandomDataGenerator)} instead.
> >>> +     * @param generator random data generator (may be null, resulting in default JDK generator)
> >>> +     * @since 3.0
> >>>       */
> >>> -    @Deprecated
> >>> -    public EmpiricalDistribution(int binCount, RandomDataImpl randomData) {
> >>> +    public EmpiricalDistribution(int binCount, RandomGenerator generator) {
> >>>          this.binCount = binCount;
> >>> -        this.randomData = randomData == null ?
> >>> -            new RandomDataImpl() :
> >>> -            randomData;
> >>> +        randomData = new RandomDataImpl(generator);
> >>>          binStats = new ArrayList<SummaryStatistics>();
> >>> -        useRandomDataImpl = true;
> >>> -        randomDataGen = null;
> >>> -    }
> >>> -    /**
> >>> -     * Creates a new EmpiricalDistribution with the specified bin count using the
> >>> -     * provided {@link RandomGenerator} as the source of random data.
> >>> -     *
> >>> -     * @param randomData random data generator (may be null, resulting in a default generator)
> >>> -     * @deprecated As of 3.1. To be removed in 4.0. Please use
> >>> -     * {@link #EmpiricalDistribution(RandomDataGenerator)} instead.
> >>> -     */
> >>> -    @Deprecated
> >>> -    public EmpiricalDistribution(RandomDataImpl randomData) {
> >>> -        this(DEFAULT_BIN_COUNT, randomData);
> >>>      }
> >>>  
> >>>      /**
> >>> -     * Creates a new EmpiricalDistribution with the specified bin count using the
> >>> -     * provided {@link RandomGenerator} as the source of random data.
> >>> -     *
> >>> -     * @param binCount number of bins
> >>> -     * @param randomData random data generator (may be null, resulting in a default generator)
> >>> -     */
> >>> -    public EmpiricalDistribution(int binCount, RandomDataGenerator randomData) {
> >>> -        this.binCount = binCount;
> >>> -        this.randomDataGen = randomData == null ?
> >>> -            new RandomDataGenerator() :
> >>> -            randomData;
> >>> -        binStats = new ArrayList<SummaryStatistics>();
> >>> -        useRandomDataImpl = false; // XXX Remove in 4.0
> >>> -    }
> >>> -    /**
> >>> -     * Creates a new EmpiricalDistribution with the specified bin count using the
> >>> +     * Creates a new EmpiricalDistribution with default bin count using the
> >>>       * provided {@link RandomGenerator} as the source of random data.
> >>>       *
> >>> -     * @param randomData random data generator (may be null, resulting in a default generator)
> >>> +     * @param generator random data generator (may be null, resulting in default JDK generator)
> >>> +     * @since 3.0
> >>>       */
> >>> -    public EmpiricalDistribution(RandomDataGenerator randomData) {
> >>> -        this(DEFAULT_BIN_COUNT, randomData);
> >>> +    public EmpiricalDistribution(RandomGenerator generator) {
> >>> +        this(DEFAULT_BIN_COUNT, generator);
> >>>      }
> >>>  
> >>>      /**
> >>>       * Creates a new EmpiricalDistribution with the specified bin count using the
> >>> -     * provided {@link RandomGenerator} as the source of random data.
> >>> +     * provided {@link RandomDataImpl} instance as the source of random data.
> >>>       *
> >>>       * @param binCount number of bins
> >>> -     * @param generator random data generator (may be null, resulting in a default generator)
> >>> +     * @param randomData random data generator (may be null, resulting in default JDK generator)
> >>>       * @since 3.0
> >>>       */
> >>> -    public EmpiricalDistribution(int binCount, RandomGenerator generator) {
> >>> -        this(binCount, new RandomDataGenerator(generator));
> >>> +    public EmpiricalDistribution(int binCount, RandomDataImpl randomData) {
> >>> +        this.binCount = binCount;
> >>> +        this.randomData = randomData;
> >>> +        binStats = new ArrayList<SummaryStatistics>();
> >>>      }
> >>>  
> >>>      /**
> >>>       * Creates a new EmpiricalDistribution with default bin count using the
> >>> -     * provided {@link RandomGenerator} as the source of random data.
> >>> +     * provided {@link RandomDataImpl} as the source of random data.
> >>>       *
> >>> -     * @param generator random data generator (may be null, resulting in default generator)
> >>> +     * @param randomData random data generator (may be null, resulting in default JDK generator)
> >>>       * @since 3.0
> >>>       */
> >>> -    public EmpiricalDistribution(RandomGenerator generator) {
> >>> -        this(DEFAULT_BIN_COUNT, generator);
> >>> +    public EmpiricalDistribution(RandomDataImpl randomData) {
> >>> +        this(DEFAULT_BIN_COUNT, randomData);
> >>>      }
> >>>  
> >>> -    /**
> >>> +     /**
> >>>       * Computes the empirical distribution from the provided
> >>>       * array of numbers.
> >>>       *
> >>> @@ -288,7 +254,7 @@ public class EmpiricalDistribution exten
> >>>          } finally {
> >>>             try {
> >>>                 in.close();
> >>> -           } catch (IOException ex) { // NOPMD
> >>> +           } catch (IOException ex) {
> >>>                 // ignore
> >>>             }
> >>>          }
> >>> @@ -320,7 +286,7 @@ public class EmpiricalDistribution exten
> >>>          } finally {
> >>>              try {
> >>>                  in.close();
> >>> -            } catch (IOException ex) { // NOPMD
> >>> +            } catch (IOException ex) {
> >>>                  // ignore
> >>>              }
> >>>          }
> >>> @@ -497,41 +463,22 @@ public class EmpiricalDistribution exten
> >>>              throw new MathIllegalStateException(LocalizedFormats.DISTRIBUTION_NOT_LOADED);
> >>>          }
> >>>  
> >>> -        if (useRandomDataImpl) {
> >>> -            // XXX backward compatibility.
> >>> -            // Start with a uniformly distributed random number in (0, 1)
> >>> -            final double x = randomData.nextUniform(0,1);
> >>> -            // Use this to select the bin and generate a Gaussian within the bin
> >>> -            for (int i = 0; i < binCount; i++) {
> >>> -                if (x <= upperBounds[i]) {
> >>> -                    SummaryStatistics stats = binStats.get(i);
> >>> -                    if (stats.getN() > 0) {
> >>> -                        if (stats.getStandardDeviation() > 0) {  // more than one obs
> >>> -                            return randomData.nextGaussian(stats.getMean(),
> >>> -                                                           stats.getStandardDeviation());
> >>> -                        } else {
> >>> -                            return stats.getMean(); // only one obs in bin
> >>> -                        }
> >>> -                    }
> >>> -                }
> >>> -            }
> >>> -        } else {
> >>> -            // Start with a uniformly distributed random number in (0, 1)
> >>> -            final double x = randomDataGen.nextUniform(0, 1);
> >>> -            // Use this to select the bin and generate a Gaussian within the bin
> >>> -            for (int i = 0; i < binCount; i++) {
> >>> -                if (x <= upperBounds[i]) {
> >>> -                    SummaryStatistics stats = binStats.get(i);
> >>> -                    if (stats.getN() > 0) {
> >>> -                        if (stats.getStandardDeviation() > 0) {  // more than one obs
> >>> -                            return randomDataGen.nextGaussian(stats.getMean(),
> >>> -                                                              stats.getStandardDeviation());
> >>> -                        } else {
> >>> -                            return stats.getMean(); // only one obs in bin
> >>> -                        }
> >>> -                    }
> >>> -                }
> >>> -            }
> >>> +        // Start with a uniformly distributed random number in (0,1)
> >>> +        final double x = randomData.nextUniform(0,1);
> >>> +
> >>> +        // Use this to select the bin and generate a Gaussian within the bin
> >>> +        for (int i = 0; i < binCount; i++) {
> >>> +           if (x <= upperBounds[i]) {
> >>> +               SummaryStatistics stats = binStats.get(i);
> >>> +               if (stats.getN() > 0) {
> >>> +                   if (stats.getStandardDeviation() > 0) {  // more than one obs
> >>> +                       return randomData.nextGaussian(stats.getMean(),
> >>> +                                                      stats.getStandardDeviation());
> >>> +                   } else {
> >>> +                       return stats.getMean(); // only one obs in bin
> >>> +                   }
> >>> +               }
> >>> +           }
> >>>          }
> >>>          throw new MathIllegalStateException(LocalizedFormats.NO_BIN_SELECTED);
> >>>      }
> >>> @@ -624,12 +571,7 @@ public class EmpiricalDistribution exten
> >>>       * @since 3.0
> >>>       */
> >>>      public void reSeed(long seed) {
> >>> -        if (useRandomDataImpl) {
> >>> -            // XXX backward compatibility.
> >>> -            randomData.reSeed(seed);
> >>> -        } else {
> >>> -            randomDataGen.reSeed(seed);
> >>> -        }
> >>> +        randomData.reSeed(seed);
> >>>      }
> >>>  
> >>>      // Distribution methods ---------------------------
> >>> @@ -819,7 +761,7 @@ public class EmpiricalDistribution exten
> >>>       */
> >>>      @Override
> >>>      public void reseedRandomGenerator(long seed) {
> >>> -        reSeed(seed);
> >>> +        randomData.reSeed(seed);
> >>>      }
> >>>  
> >>>      /**
> >>>
> >>> Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/ValueServer.java
> >>> URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/ValueServer.java?rev=1421968&r1=1421967&r2=1421968&view=diff
> >>> ==============================================================================
> >>> --- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/ValueServer.java (original)
> >>> +++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/ValueServer.java Fri Dec 14 16:28:23 2012
> >>> @@ -88,35 +88,36 @@ public class ValueServer {
> >>>      private BufferedReader filePointer = null;
> >>>  
> >>>      /** RandomDataImpl to use for random data generation. */
> >>> -    private final RandomDataGenerator randomData;
> >>> +    private final RandomDataImpl randomData;
> >>>  
> >>>      // Data generation modes ======================================
> >>>  
> >>>      /** Creates new ValueServer */
> >>>      public ValueServer() {
> >>> -        randomData = new RandomDataGenerator();
> >>> +        randomData = new RandomDataImpl();
> >>>      }
> >>>  
> >>>      /**
> >>> -     * Construct a ValueServer instance using a RandomDataGenerator as its source
> >>> +     * Construct a ValueServer instance using a RandomDataImpl as its source
> >>>       * of random data.
> >>>       *
> >>> -     * @param randomData random data source
> >>> +     * @param randomData the RandomDataImpl instance used to source random data
> >>>       * @since 3.0
> >>> +     * @deprecated use {@link #ValueServer(RandomGenerator)}
> >>>       */
> >>> -    public ValueServer(RandomDataGenerator randomData) {
> >>> +    public ValueServer(RandomDataImpl randomData) {
> >>>          this.randomData = randomData;
> >>>      }
> >>> +
> >>>      /**
> >>> -     * Construct a ValueServer instance using a RandomDataImpl as its source
> >>> +     * Construct a ValueServer instance using a RandomGenerator as its source
> >>>       * of random data.
> >>>       *
> >>> -     * @param randomData random data source
> >>> -     * @deprecated As of 3.1. Use {@link #ValueServer(RandomDataGenerator)} instead.
> >>> +     * @since 3.1
> >>> +     * @param generator source of random data
> >>>       */
> >>> -    @Deprecated
> >>> -    public ValueServer(RandomDataImpl randomData) {
> >>> -        this(randomData.getDelegate());
> >>> +    public ValueServer(RandomGenerator generator) {
> >>> +        this.randomData = new RandomDataImpl(generator);
> >>>      }
> >>>  
> >>>      /**
> >>> @@ -288,7 +289,7 @@ public class ValueServer {
> >>>              try {
> >>>                  filePointer.close();
> >>>                  filePointer = null;
> >>> -            } catch (IOException ex) { // NOPMD
> >>> +            } catch (IOException ex) {
> >>>                  // ignore
> >>>              }
> >>>          }
> >>>
> >>>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> >> For additional commands, e-mail: dev-help@commons.apache.org
> >>
> >>
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> For additional commands, e-mail: dev-help@commons.apache.org
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Re: svn commit: r1421968 - in /commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random: EmpiricalDistribution.java ValueServer.java

Posted by Phil Steitz <ph...@gmail.com>.
On 12/14/12 9:43 AM, Phil Steitz wrote:
> On 12/14/12 8:52 AM, Gilles Sadowski wrote:
>> On Fri, Dec 14, 2012 at 04:28:25PM -0000, psteitz@apache.org wrote:
>>> Author: psteitz
>>> Date: Fri Dec 14 16:28:23 2012
>>> New Revision: 1421968
>>>
>>> URL: http://svn.apache.org/viewvc?rev=1421968&view=rev
>>> Log:
>>> Reverted incompatible changes made in r1420006.
>> I don't understand why you did that.
>> You nullified my changes that fixed (IIUC) the problem while still
>> providing users a smooth upgrade path to using RandomDataGenerator
>> (which it seems was your goal).
> I was basically reverting my original commit, which caused the
> problem.  I started with a revert back to before  r1420006.  Then I
> just added some deprecations.  I should not have introduced new
> constructors or RandomDataGenerator at all at this point. 

Sorry.  Misspoke there.  What I meant was I should not have
introduced a constructor using RandomDataGenerator.  I *did*
introduce one using RandomGenerator, which is what should be used. 
Sorry for the bad communication and somewhat convoluted naming on
this.  Hopefully this makes sense.

Phil
>  I am
> sorry I did a bad job explaining what was going on there. 
> Basically, EmpiricalDistibution needs a RandomDataGenerator /
> RandomDataImpl to generate data following certain distributions. 
> What should be provided as a constructor argument for this class
> (and ValueServer) is a RandomGenerator, which is the underlying
> source of random data.  The RandomDataImpl constructors are really
> legacy, going back to the days before RandomGenerator existed.  Does
> this make sense?
>
> Phil
>>
>> Gilles
>>
>>> Fixed javadoc error in EmpiricalDistribution class javadoc.
>>> Deprecated constructors taking RandomDataImpl instances in EmpiricalDistribution, ValueServer.  These constructors predate RandomGenerator, which should be used directly as the source of random data for these classes.
>>>
>>> Modified:
>>>     commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/EmpiricalDistribution.java
>>>     commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/ValueServer.java
>>>
>>> Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/EmpiricalDistribution.java
>>> URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/EmpiricalDistribution.java?rev=1421968&r1=1421967&r2=1421968&view=diff
>>> ==============================================================================
>>> --- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/EmpiricalDistribution.java (original)
>>> +++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/EmpiricalDistribution.java Fri Dec 14 16:28:23 2012
>>> @@ -29,8 +29,8 @@ import java.util.ArrayList;
>>>  import java.util.List;
>>>  
>>>  import org.apache.commons.math3.distribution.AbstractRealDistribution;
>>> -import org.apache.commons.math3.distribution.RealDistribution;
>>>  import org.apache.commons.math3.distribution.NormalDistribution;
>>> +import org.apache.commons.math3.distribution.RealDistribution;
>>>  import org.apache.commons.math3.exception.MathIllegalStateException;
>>>  import org.apache.commons.math3.exception.MathInternalError;
>>>  import org.apache.commons.math3.exception.NullArgumentException;
>>> @@ -134,18 +134,14 @@ public class EmpiricalDistribution exten
>>>      /** upper bounds of subintervals in (0,1) "belonging" to the bins */
>>>      private double[] upperBounds = null;
>>>  
>>> -    /** Data generator. */
>>> -    private final RandomDataGenerator randomDataGen;
>>> -    /**
>>> -     * XXX Enable backward-compatibility (to be removed in 4.0).
>>> -     */
>>> -    private final boolean useRandomDataImpl;
>>> +    /** RandomDataImpl instance to use in repeated calls to getNext() */
>>> +    private final RandomDataImpl randomData;
>>>  
>>>      /**
>>>       * Creates a new EmpiricalDistribution with the default bin count.
>>>       */
>>>      public EmpiricalDistribution() {
>>> -        this(DEFAULT_BIN_COUNT);
>>> +        this(DEFAULT_BIN_COUNT, new RandomDataImpl());
>>>      }
>>>  
>>>      /**
>>> @@ -154,7 +150,7 @@ public class EmpiricalDistribution exten
>>>       * @param binCount number of bins
>>>       */
>>>      public EmpiricalDistribution(int binCount) {
>>> -        this(binCount, (RandomGenerator) null);
>>> +        this(binCount, new RandomDataImpl());
>>>      }
>>>  
>>>      /**
>>> @@ -162,82 +158,52 @@ public class EmpiricalDistribution exten
>>>       * provided {@link RandomGenerator} as the source of random data.
>>>       *
>>>       * @param binCount number of bins
>>> -     * @param randomData random data generator (may be null, resulting in a default generator)
>>> -     * @deprecated As of 3.1. To be removed in 4.0. Please use
>>> -     * {@link #EmpiricalDistribution(int,RandomDataGenerator)} instead.
>>> +     * @param generator random data generator (may be null, resulting in default JDK generator)
>>> +     * @since 3.0
>>>       */
>>> -    @Deprecated
>>> -    public EmpiricalDistribution(int binCount, RandomDataImpl randomData) {
>>> +    public EmpiricalDistribution(int binCount, RandomGenerator generator) {
>>>          this.binCount = binCount;
>>> -        this.randomData = randomData == null ?
>>> -            new RandomDataImpl() :
>>> -            randomData;
>>> +        randomData = new RandomDataImpl(generator);
>>>          binStats = new ArrayList<SummaryStatistics>();
>>> -        useRandomDataImpl = true;
>>> -        randomDataGen = null;
>>> -    }
>>> -    /**
>>> -     * Creates a new EmpiricalDistribution with the specified bin count using the
>>> -     * provided {@link RandomGenerator} as the source of random data.
>>> -     *
>>> -     * @param randomData random data generator (may be null, resulting in a default generator)
>>> -     * @deprecated As of 3.1. To be removed in 4.0. Please use
>>> -     * {@link #EmpiricalDistribution(RandomDataGenerator)} instead.
>>> -     */
>>> -    @Deprecated
>>> -    public EmpiricalDistribution(RandomDataImpl randomData) {
>>> -        this(DEFAULT_BIN_COUNT, randomData);
>>>      }
>>>  
>>>      /**
>>> -     * Creates a new EmpiricalDistribution with the specified bin count using the
>>> -     * provided {@link RandomGenerator} as the source of random data.
>>> -     *
>>> -     * @param binCount number of bins
>>> -     * @param randomData random data generator (may be null, resulting in a default generator)
>>> -     */
>>> -    public EmpiricalDistribution(int binCount, RandomDataGenerator randomData) {
>>> -        this.binCount = binCount;
>>> -        this.randomDataGen = randomData == null ?
>>> -            new RandomDataGenerator() :
>>> -            randomData;
>>> -        binStats = new ArrayList<SummaryStatistics>();
>>> -        useRandomDataImpl = false; // XXX Remove in 4.0
>>> -    }
>>> -    /**
>>> -     * Creates a new EmpiricalDistribution with the specified bin count using the
>>> +     * Creates a new EmpiricalDistribution with default bin count using the
>>>       * provided {@link RandomGenerator} as the source of random data.
>>>       *
>>> -     * @param randomData random data generator (may be null, resulting in a default generator)
>>> +     * @param generator random data generator (may be null, resulting in default JDK generator)
>>> +     * @since 3.0
>>>       */
>>> -    public EmpiricalDistribution(RandomDataGenerator randomData) {
>>> -        this(DEFAULT_BIN_COUNT, randomData);
>>> +    public EmpiricalDistribution(RandomGenerator generator) {
>>> +        this(DEFAULT_BIN_COUNT, generator);
>>>      }
>>>  
>>>      /**
>>>       * Creates a new EmpiricalDistribution with the specified bin count using the
>>> -     * provided {@link RandomGenerator} as the source of random data.
>>> +     * provided {@link RandomDataImpl} instance as the source of random data.
>>>       *
>>>       * @param binCount number of bins
>>> -     * @param generator random data generator (may be null, resulting in a default generator)
>>> +     * @param randomData random data generator (may be null, resulting in default JDK generator)
>>>       * @since 3.0
>>>       */
>>> -    public EmpiricalDistribution(int binCount, RandomGenerator generator) {
>>> -        this(binCount, new RandomDataGenerator(generator));
>>> +    public EmpiricalDistribution(int binCount, RandomDataImpl randomData) {
>>> +        this.binCount = binCount;
>>> +        this.randomData = randomData;
>>> +        binStats = new ArrayList<SummaryStatistics>();
>>>      }
>>>  
>>>      /**
>>>       * Creates a new EmpiricalDistribution with default bin count using the
>>> -     * provided {@link RandomGenerator} as the source of random data.
>>> +     * provided {@link RandomDataImpl} as the source of random data.
>>>       *
>>> -     * @param generator random data generator (may be null, resulting in default generator)
>>> +     * @param randomData random data generator (may be null, resulting in default JDK generator)
>>>       * @since 3.0
>>>       */
>>> -    public EmpiricalDistribution(RandomGenerator generator) {
>>> -        this(DEFAULT_BIN_COUNT, generator);
>>> +    public EmpiricalDistribution(RandomDataImpl randomData) {
>>> +        this(DEFAULT_BIN_COUNT, randomData);
>>>      }
>>>  
>>> -    /**
>>> +     /**
>>>       * Computes the empirical distribution from the provided
>>>       * array of numbers.
>>>       *
>>> @@ -288,7 +254,7 @@ public class EmpiricalDistribution exten
>>>          } finally {
>>>             try {
>>>                 in.close();
>>> -           } catch (IOException ex) { // NOPMD
>>> +           } catch (IOException ex) {
>>>                 // ignore
>>>             }
>>>          }
>>> @@ -320,7 +286,7 @@ public class EmpiricalDistribution exten
>>>          } finally {
>>>              try {
>>>                  in.close();
>>> -            } catch (IOException ex) { // NOPMD
>>> +            } catch (IOException ex) {
>>>                  // ignore
>>>              }
>>>          }
>>> @@ -497,41 +463,22 @@ public class EmpiricalDistribution exten
>>>              throw new MathIllegalStateException(LocalizedFormats.DISTRIBUTION_NOT_LOADED);
>>>          }
>>>  
>>> -        if (useRandomDataImpl) {
>>> -            // XXX backward compatibility.
>>> -            // Start with a uniformly distributed random number in (0, 1)
>>> -            final double x = randomData.nextUniform(0,1);
>>> -            // Use this to select the bin and generate a Gaussian within the bin
>>> -            for (int i = 0; i < binCount; i++) {
>>> -                if (x <= upperBounds[i]) {
>>> -                    SummaryStatistics stats = binStats.get(i);
>>> -                    if (stats.getN() > 0) {
>>> -                        if (stats.getStandardDeviation() > 0) {  // more than one obs
>>> -                            return randomData.nextGaussian(stats.getMean(),
>>> -                                                           stats.getStandardDeviation());
>>> -                        } else {
>>> -                            return stats.getMean(); // only one obs in bin
>>> -                        }
>>> -                    }
>>> -                }
>>> -            }
>>> -        } else {
>>> -            // Start with a uniformly distributed random number in (0, 1)
>>> -            final double x = randomDataGen.nextUniform(0, 1);
>>> -            // Use this to select the bin and generate a Gaussian within the bin
>>> -            for (int i = 0; i < binCount; i++) {
>>> -                if (x <= upperBounds[i]) {
>>> -                    SummaryStatistics stats = binStats.get(i);
>>> -                    if (stats.getN() > 0) {
>>> -                        if (stats.getStandardDeviation() > 0) {  // more than one obs
>>> -                            return randomDataGen.nextGaussian(stats.getMean(),
>>> -                                                              stats.getStandardDeviation());
>>> -                        } else {
>>> -                            return stats.getMean(); // only one obs in bin
>>> -                        }
>>> -                    }
>>> -                }
>>> -            }
>>> +        // Start with a uniformly distributed random number in (0,1)
>>> +        final double x = randomData.nextUniform(0,1);
>>> +
>>> +        // Use this to select the bin and generate a Gaussian within the bin
>>> +        for (int i = 0; i < binCount; i++) {
>>> +           if (x <= upperBounds[i]) {
>>> +               SummaryStatistics stats = binStats.get(i);
>>> +               if (stats.getN() > 0) {
>>> +                   if (stats.getStandardDeviation() > 0) {  // more than one obs
>>> +                       return randomData.nextGaussian(stats.getMean(),
>>> +                                                      stats.getStandardDeviation());
>>> +                   } else {
>>> +                       return stats.getMean(); // only one obs in bin
>>> +                   }
>>> +               }
>>> +           }
>>>          }
>>>          throw new MathIllegalStateException(LocalizedFormats.NO_BIN_SELECTED);
>>>      }
>>> @@ -624,12 +571,7 @@ public class EmpiricalDistribution exten
>>>       * @since 3.0
>>>       */
>>>      public void reSeed(long seed) {
>>> -        if (useRandomDataImpl) {
>>> -            // XXX backward compatibility.
>>> -            randomData.reSeed(seed);
>>> -        } else {
>>> -            randomDataGen.reSeed(seed);
>>> -        }
>>> +        randomData.reSeed(seed);
>>>      }
>>>  
>>>      // Distribution methods ---------------------------
>>> @@ -819,7 +761,7 @@ public class EmpiricalDistribution exten
>>>       */
>>>      @Override
>>>      public void reseedRandomGenerator(long seed) {
>>> -        reSeed(seed);
>>> +        randomData.reSeed(seed);
>>>      }
>>>  
>>>      /**
>>>
>>> Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/ValueServer.java
>>> URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/ValueServer.java?rev=1421968&r1=1421967&r2=1421968&view=diff
>>> ==============================================================================
>>> --- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/ValueServer.java (original)
>>> +++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/ValueServer.java Fri Dec 14 16:28:23 2012
>>> @@ -88,35 +88,36 @@ public class ValueServer {
>>>      private BufferedReader filePointer = null;
>>>  
>>>      /** RandomDataImpl to use for random data generation. */
>>> -    private final RandomDataGenerator randomData;
>>> +    private final RandomDataImpl randomData;
>>>  
>>>      // Data generation modes ======================================
>>>  
>>>      /** Creates new ValueServer */
>>>      public ValueServer() {
>>> -        randomData = new RandomDataGenerator();
>>> +        randomData = new RandomDataImpl();
>>>      }
>>>  
>>>      /**
>>> -     * Construct a ValueServer instance using a RandomDataGenerator as its source
>>> +     * Construct a ValueServer instance using a RandomDataImpl as its source
>>>       * of random data.
>>>       *
>>> -     * @param randomData random data source
>>> +     * @param randomData the RandomDataImpl instance used to source random data
>>>       * @since 3.0
>>> +     * @deprecated use {@link #ValueServer(RandomGenerator)}
>>>       */
>>> -    public ValueServer(RandomDataGenerator randomData) {
>>> +    public ValueServer(RandomDataImpl randomData) {
>>>          this.randomData = randomData;
>>>      }
>>> +
>>>      /**
>>> -     * Construct a ValueServer instance using a RandomDataImpl as its source
>>> +     * Construct a ValueServer instance using a RandomGenerator as its source
>>>       * of random data.
>>>       *
>>> -     * @param randomData random data source
>>> -     * @deprecated As of 3.1. Use {@link #ValueServer(RandomDataGenerator)} instead.
>>> +     * @since 3.1
>>> +     * @param generator source of random data
>>>       */
>>> -    @Deprecated
>>> -    public ValueServer(RandomDataImpl randomData) {
>>> -        this(randomData.getDelegate());
>>> +    public ValueServer(RandomGenerator generator) {
>>> +        this.randomData = new RandomDataImpl(generator);
>>>      }
>>>  
>>>      /**
>>> @@ -288,7 +289,7 @@ public class ValueServer {
>>>              try {
>>>                  filePointer.close();
>>>                  filePointer = null;
>>> -            } catch (IOException ex) { // NOPMD
>>> +            } catch (IOException ex) {
>>>                  // ignore
>>>              }
>>>          }
>>>
>>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
>> For additional commands, e-mail: dev-help@commons.apache.org
>>
>>


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Re: svn commit: r1421968 - in /commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random: EmpiricalDistribution.java ValueServer.java

Posted by Phil Steitz <ph...@gmail.com>.
On 12/14/12 8:52 AM, Gilles Sadowski wrote:
> On Fri, Dec 14, 2012 at 04:28:25PM -0000, psteitz@apache.org wrote:
>> Author: psteitz
>> Date: Fri Dec 14 16:28:23 2012
>> New Revision: 1421968
>>
>> URL: http://svn.apache.org/viewvc?rev=1421968&view=rev
>> Log:
>> Reverted incompatible changes made in r1420006.
> I don't understand why you did that.
> You nullified my changes that fixed (IIUC) the problem while still
> providing users a smooth upgrade path to using RandomDataGenerator
> (which it seems was your goal).

I was basically reverting my original commit, which caused the
problem.  I started with a revert back to before  r1420006.  Then I
just added some deprecations.  I should not have introduced new
constructors or RandomDataGenerator at all at this point.  I am
sorry I did a bad job explaining what was going on there. 
Basically, EmpiricalDistibution needs a RandomDataGenerator /
RandomDataImpl to generate data following certain distributions. 
What should be provided as a constructor argument for this class
(and ValueServer) is a RandomGenerator, which is the underlying
source of random data.  The RandomDataImpl constructors are really
legacy, going back to the days before RandomGenerator existed.  Does
this make sense?

Phil
>
>
> Gilles
>
>> Fixed javadoc error in EmpiricalDistribution class javadoc.
>> Deprecated constructors taking RandomDataImpl instances in EmpiricalDistribution, ValueServer.  These constructors predate RandomGenerator, which should be used directly as the source of random data for these classes.
>>
>> Modified:
>>     commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/EmpiricalDistribution.java
>>     commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/ValueServer.java
>>
>> Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/EmpiricalDistribution.java
>> URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/EmpiricalDistribution.java?rev=1421968&r1=1421967&r2=1421968&view=diff
>> ==============================================================================
>> --- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/EmpiricalDistribution.java (original)
>> +++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/EmpiricalDistribution.java Fri Dec 14 16:28:23 2012
>> @@ -29,8 +29,8 @@ import java.util.ArrayList;
>>  import java.util.List;
>>  
>>  import org.apache.commons.math3.distribution.AbstractRealDistribution;
>> -import org.apache.commons.math3.distribution.RealDistribution;
>>  import org.apache.commons.math3.distribution.NormalDistribution;
>> +import org.apache.commons.math3.distribution.RealDistribution;
>>  import org.apache.commons.math3.exception.MathIllegalStateException;
>>  import org.apache.commons.math3.exception.MathInternalError;
>>  import org.apache.commons.math3.exception.NullArgumentException;
>> @@ -134,18 +134,14 @@ public class EmpiricalDistribution exten
>>      /** upper bounds of subintervals in (0,1) "belonging" to the bins */
>>      private double[] upperBounds = null;
>>  
>> -    /** Data generator. */
>> -    private final RandomDataGenerator randomDataGen;
>> -    /**
>> -     * XXX Enable backward-compatibility (to be removed in 4.0).
>> -     */
>> -    private final boolean useRandomDataImpl;
>> +    /** RandomDataImpl instance to use in repeated calls to getNext() */
>> +    private final RandomDataImpl randomData;
>>  
>>      /**
>>       * Creates a new EmpiricalDistribution with the default bin count.
>>       */
>>      public EmpiricalDistribution() {
>> -        this(DEFAULT_BIN_COUNT);
>> +        this(DEFAULT_BIN_COUNT, new RandomDataImpl());
>>      }
>>  
>>      /**
>> @@ -154,7 +150,7 @@ public class EmpiricalDistribution exten
>>       * @param binCount number of bins
>>       */
>>      public EmpiricalDistribution(int binCount) {
>> -        this(binCount, (RandomGenerator) null);
>> +        this(binCount, new RandomDataImpl());
>>      }
>>  
>>      /**
>> @@ -162,82 +158,52 @@ public class EmpiricalDistribution exten
>>       * provided {@link RandomGenerator} as the source of random data.
>>       *
>>       * @param binCount number of bins
>> -     * @param randomData random data generator (may be null, resulting in a default generator)
>> -     * @deprecated As of 3.1. To be removed in 4.0. Please use
>> -     * {@link #EmpiricalDistribution(int,RandomDataGenerator)} instead.
>> +     * @param generator random data generator (may be null, resulting in default JDK generator)
>> +     * @since 3.0
>>       */
>> -    @Deprecated
>> -    public EmpiricalDistribution(int binCount, RandomDataImpl randomData) {
>> +    public EmpiricalDistribution(int binCount, RandomGenerator generator) {
>>          this.binCount = binCount;
>> -        this.randomData = randomData == null ?
>> -            new RandomDataImpl() :
>> -            randomData;
>> +        randomData = new RandomDataImpl(generator);
>>          binStats = new ArrayList<SummaryStatistics>();
>> -        useRandomDataImpl = true;
>> -        randomDataGen = null;
>> -    }
>> -    /**
>> -     * Creates a new EmpiricalDistribution with the specified bin count using the
>> -     * provided {@link RandomGenerator} as the source of random data.
>> -     *
>> -     * @param randomData random data generator (may be null, resulting in a default generator)
>> -     * @deprecated As of 3.1. To be removed in 4.0. Please use
>> -     * {@link #EmpiricalDistribution(RandomDataGenerator)} instead.
>> -     */
>> -    @Deprecated
>> -    public EmpiricalDistribution(RandomDataImpl randomData) {
>> -        this(DEFAULT_BIN_COUNT, randomData);
>>      }
>>  
>>      /**
>> -     * Creates a new EmpiricalDistribution with the specified bin count using the
>> -     * provided {@link RandomGenerator} as the source of random data.
>> -     *
>> -     * @param binCount number of bins
>> -     * @param randomData random data generator (may be null, resulting in a default generator)
>> -     */
>> -    public EmpiricalDistribution(int binCount, RandomDataGenerator randomData) {
>> -        this.binCount = binCount;
>> -        this.randomDataGen = randomData == null ?
>> -            new RandomDataGenerator() :
>> -            randomData;
>> -        binStats = new ArrayList<SummaryStatistics>();
>> -        useRandomDataImpl = false; // XXX Remove in 4.0
>> -    }
>> -    /**
>> -     * Creates a new EmpiricalDistribution with the specified bin count using the
>> +     * Creates a new EmpiricalDistribution with default bin count using the
>>       * provided {@link RandomGenerator} as the source of random data.
>>       *
>> -     * @param randomData random data generator (may be null, resulting in a default generator)
>> +     * @param generator random data generator (may be null, resulting in default JDK generator)
>> +     * @since 3.0
>>       */
>> -    public EmpiricalDistribution(RandomDataGenerator randomData) {
>> -        this(DEFAULT_BIN_COUNT, randomData);
>> +    public EmpiricalDistribution(RandomGenerator generator) {
>> +        this(DEFAULT_BIN_COUNT, generator);
>>      }
>>  
>>      /**
>>       * Creates a new EmpiricalDistribution with the specified bin count using the
>> -     * provided {@link RandomGenerator} as the source of random data.
>> +     * provided {@link RandomDataImpl} instance as the source of random data.
>>       *
>>       * @param binCount number of bins
>> -     * @param generator random data generator (may be null, resulting in a default generator)
>> +     * @param randomData random data generator (may be null, resulting in default JDK generator)
>>       * @since 3.0
>>       */
>> -    public EmpiricalDistribution(int binCount, RandomGenerator generator) {
>> -        this(binCount, new RandomDataGenerator(generator));
>> +    public EmpiricalDistribution(int binCount, RandomDataImpl randomData) {
>> +        this.binCount = binCount;
>> +        this.randomData = randomData;
>> +        binStats = new ArrayList<SummaryStatistics>();
>>      }
>>  
>>      /**
>>       * Creates a new EmpiricalDistribution with default bin count using the
>> -     * provided {@link RandomGenerator} as the source of random data.
>> +     * provided {@link RandomDataImpl} as the source of random data.
>>       *
>> -     * @param generator random data generator (may be null, resulting in default generator)
>> +     * @param randomData random data generator (may be null, resulting in default JDK generator)
>>       * @since 3.0
>>       */
>> -    public EmpiricalDistribution(RandomGenerator generator) {
>> -        this(DEFAULT_BIN_COUNT, generator);
>> +    public EmpiricalDistribution(RandomDataImpl randomData) {
>> +        this(DEFAULT_BIN_COUNT, randomData);
>>      }
>>  
>> -    /**
>> +     /**
>>       * Computes the empirical distribution from the provided
>>       * array of numbers.
>>       *
>> @@ -288,7 +254,7 @@ public class EmpiricalDistribution exten
>>          } finally {
>>             try {
>>                 in.close();
>> -           } catch (IOException ex) { // NOPMD
>> +           } catch (IOException ex) {
>>                 // ignore
>>             }
>>          }
>> @@ -320,7 +286,7 @@ public class EmpiricalDistribution exten
>>          } finally {
>>              try {
>>                  in.close();
>> -            } catch (IOException ex) { // NOPMD
>> +            } catch (IOException ex) {
>>                  // ignore
>>              }
>>          }
>> @@ -497,41 +463,22 @@ public class EmpiricalDistribution exten
>>              throw new MathIllegalStateException(LocalizedFormats.DISTRIBUTION_NOT_LOADED);
>>          }
>>  
>> -        if (useRandomDataImpl) {
>> -            // XXX backward compatibility.
>> -            // Start with a uniformly distributed random number in (0, 1)
>> -            final double x = randomData.nextUniform(0,1);
>> -            // Use this to select the bin and generate a Gaussian within the bin
>> -            for (int i = 0; i < binCount; i++) {
>> -                if (x <= upperBounds[i]) {
>> -                    SummaryStatistics stats = binStats.get(i);
>> -                    if (stats.getN() > 0) {
>> -                        if (stats.getStandardDeviation() > 0) {  // more than one obs
>> -                            return randomData.nextGaussian(stats.getMean(),
>> -                                                           stats.getStandardDeviation());
>> -                        } else {
>> -                            return stats.getMean(); // only one obs in bin
>> -                        }
>> -                    }
>> -                }
>> -            }
>> -        } else {
>> -            // Start with a uniformly distributed random number in (0, 1)
>> -            final double x = randomDataGen.nextUniform(0, 1);
>> -            // Use this to select the bin and generate a Gaussian within the bin
>> -            for (int i = 0; i < binCount; i++) {
>> -                if (x <= upperBounds[i]) {
>> -                    SummaryStatistics stats = binStats.get(i);
>> -                    if (stats.getN() > 0) {
>> -                        if (stats.getStandardDeviation() > 0) {  // more than one obs
>> -                            return randomDataGen.nextGaussian(stats.getMean(),
>> -                                                              stats.getStandardDeviation());
>> -                        } else {
>> -                            return stats.getMean(); // only one obs in bin
>> -                        }
>> -                    }
>> -                }
>> -            }
>> +        // Start with a uniformly distributed random number in (0,1)
>> +        final double x = randomData.nextUniform(0,1);
>> +
>> +        // Use this to select the bin and generate a Gaussian within the bin
>> +        for (int i = 0; i < binCount; i++) {
>> +           if (x <= upperBounds[i]) {
>> +               SummaryStatistics stats = binStats.get(i);
>> +               if (stats.getN() > 0) {
>> +                   if (stats.getStandardDeviation() > 0) {  // more than one obs
>> +                       return randomData.nextGaussian(stats.getMean(),
>> +                                                      stats.getStandardDeviation());
>> +                   } else {
>> +                       return stats.getMean(); // only one obs in bin
>> +                   }
>> +               }
>> +           }
>>          }
>>          throw new MathIllegalStateException(LocalizedFormats.NO_BIN_SELECTED);
>>      }
>> @@ -624,12 +571,7 @@ public class EmpiricalDistribution exten
>>       * @since 3.0
>>       */
>>      public void reSeed(long seed) {
>> -        if (useRandomDataImpl) {
>> -            // XXX backward compatibility.
>> -            randomData.reSeed(seed);
>> -        } else {
>> -            randomDataGen.reSeed(seed);
>> -        }
>> +        randomData.reSeed(seed);
>>      }
>>  
>>      // Distribution methods ---------------------------
>> @@ -819,7 +761,7 @@ public class EmpiricalDistribution exten
>>       */
>>      @Override
>>      public void reseedRandomGenerator(long seed) {
>> -        reSeed(seed);
>> +        randomData.reSeed(seed);
>>      }
>>  
>>      /**
>>
>> Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/ValueServer.java
>> URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/ValueServer.java?rev=1421968&r1=1421967&r2=1421968&view=diff
>> ==============================================================================
>> --- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/ValueServer.java (original)
>> +++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/ValueServer.java Fri Dec 14 16:28:23 2012
>> @@ -88,35 +88,36 @@ public class ValueServer {
>>      private BufferedReader filePointer = null;
>>  
>>      /** RandomDataImpl to use for random data generation. */
>> -    private final RandomDataGenerator randomData;
>> +    private final RandomDataImpl randomData;
>>  
>>      // Data generation modes ======================================
>>  
>>      /** Creates new ValueServer */
>>      public ValueServer() {
>> -        randomData = new RandomDataGenerator();
>> +        randomData = new RandomDataImpl();
>>      }
>>  
>>      /**
>> -     * Construct a ValueServer instance using a RandomDataGenerator as its source
>> +     * Construct a ValueServer instance using a RandomDataImpl as its source
>>       * of random data.
>>       *
>> -     * @param randomData random data source
>> +     * @param randomData the RandomDataImpl instance used to source random data
>>       * @since 3.0
>> +     * @deprecated use {@link #ValueServer(RandomGenerator)}
>>       */
>> -    public ValueServer(RandomDataGenerator randomData) {
>> +    public ValueServer(RandomDataImpl randomData) {
>>          this.randomData = randomData;
>>      }
>> +
>>      /**
>> -     * Construct a ValueServer instance using a RandomDataImpl as its source
>> +     * Construct a ValueServer instance using a RandomGenerator as its source
>>       * of random data.
>>       *
>> -     * @param randomData random data source
>> -     * @deprecated As of 3.1. Use {@link #ValueServer(RandomDataGenerator)} instead.
>> +     * @since 3.1
>> +     * @param generator source of random data
>>       */
>> -    @Deprecated
>> -    public ValueServer(RandomDataImpl randomData) {
>> -        this(randomData.getDelegate());
>> +    public ValueServer(RandomGenerator generator) {
>> +        this.randomData = new RandomDataImpl(generator);
>>      }
>>  
>>      /**
>> @@ -288,7 +289,7 @@ public class ValueServer {
>>              try {
>>                  filePointer.close();
>>                  filePointer = null;
>> -            } catch (IOException ex) { // NOPMD
>> +            } catch (IOException ex) {
>>                  // ignore
>>              }
>>          }
>>
>>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> For additional commands, e-mail: dev-help@commons.apache.org
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org