commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Phil Steitz (JIRA)" <>
Subject [jira] Resolved: (MATH-212) Provide a way to copy all instances of StorelessUnivariateStatistic (e.g. Mean, Variance, Max, Kurtoise, etc), perhaps via a copy-constructor
Date Sun, 23 Nov 2008 19:09:44 GMT


Phil Steitz resolved MATH-212.

    Resolution: Fixed

Fixed in r720030 in MATH_2_0 branch.  Added copy() to UnivariateStatistics and StorelessUnivariateStatistics
interfaces to ensure implementations support copying.

> Provide a way to copy all instances of StorelessUnivariateStatistic (e.g. Mean, Variance,
Max, Kurtoise, etc), perhaps via a copy-constructor
> ---------------------------------------------------------------------------------------------------------------------------------------------
>                 Key: MATH-212
>                 URL:
>             Project: Commons Math
>          Issue Type: Improvement
>         Environment: N/A
>            Reporter: jason
>            Assignee: Phil Steitz
>            Priority: Minor
>             Fix For: 2.0
>         Attachments: copy_constructor.patch
> Below is the conversation related to this topic that was posted to the Commons Users
group. As soon as I figure out how, I'll attach my patch that adds copy constructors to all
intended classes exception GeometricMean and SummaryStatistic, which both allow the user to
specify arbitrary implementations and thus cannot be copied. See below for details.
> Phil,
> Well, that was easy in some cases and I'm not sure how it went in others and could use
help. I had issue with creating a copy constructor for GeometricMean and SummaryStatistic.
Both of these classes allow the user to, via the API, set a StorelessUnivariateStatistic as
the implementation. For instance take the following method in Geometric mean:
>    public void setSumLogImpl(
>            StorelessUnivariateStatistic sumLogImpl) {
>        checkEmpty();
>        this.sumOfLogs = sumLogImpl;
>    }
> There is no way to create a true deep copy of sumLogImpl, as we only know it to be an
instance of StorelessUnivariateStatistic. I think the solution is to allow the copy constructors
for the below classes into the baseline, but not provide a copy constructor for GeometricMean
or SummaryStatistic unless you want to (1) deprecate the implementation business or (2) create
a abstract copy method in StorelessUnivariateStatistic forcing all implementations to be 'copyable'.
> The following classes were able to be given copy constructors without issue:
> Max
> SumOfSquares
> Sum
> Product
> FirstMoment
> SecondMoment
> ThirdMoment
> FourthMoment
> Median
> Min
> SumOfLogs
> Percentile
> Skewness
> Variance
> Mean
> Kurtois
> StandardDeviation
> Phil Steitz wrote:
> > Jason C. HandUber wrote:
> >> Hello,
> >>
> >> I'm writing an evolutionary algorithm in which each individual contains StandardDeviations
and Means. From time to time I need a deep copy / clone of an individual. Thus far I've actually
had to keep a list of all data and, when cloning, generate a new statistic and increment it
with all that data. Now that I'm moving to production level, turns out I'm running out of
memory (no huge surprise). I'm going to extend Mean, Variance, StandardDeviation, FirstMoment,
and SecondMoment for my application to provide a copy constructor (which, according to Item
10, page 51 of Bloch's effective java, beats out clone, and I buy that) for each. Anyway,
I think that addition would be easy and general enough to introduce into the trunk. Any thoughts?
> > +1 on this enhancement, also for SummaryStatistics, implemented as you describe.
> >
> > Please follow instructions here <>
to create a patch against either trunk or the 2.0 development branch (/branches/MATH_2_0)
and attach it to a JIRA ticket.
> >
> > Thanks!
> >
> > Phil 

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message