Here is a patch reflecting the changes I have made for classes that need to sport serialversionUID's. It also contains a modification to one of the analysis Test classes (BisectionSolverTest and QuinticFunction) showing how a test for serialization is verified using some copy/paste from an existing test case.

-Mark

p.s. I removed Serialization of ValueServer for the time being.

Mark R. Diggory wrote:

I'd like to clarify my position in more detail because it is not 100% -1 on removing Serialization Interfaces. There are items on the list for which I agree serialization can/should be removed.

1.) Its ok to remove Serialization from Factories which are not instantiated.

2.) Its ok to remove Serialization from Abstract classes.

3.) StaticUtils don't benefit from serialization, I didn't see any with it present within them. If you see any, feel free to remove the Serialization Interface from them.




I would very much prefer to see Serialization interfaces maintained on all non-Abstract implementation classes so that the API can be used within applications which take advantage of Serialization.



a.) Abstract Classes in which Serialization interface can be removed without impact to overall serialization of API:


o.a.c.m.analysis.UnivariateRealSolverImpl
o.a.c.m.stat.univariate.SummaryStatistics
o.a.c.m.stat.univariate.DescriptiveStatistics


b.) Classes I would like to maintain Serialization on (and for which its pretty much zero effort).


o.a.c.m.analysis.
 BisectionSolver
 BrentSolver
 NewtonSolver
 PolynomialFunction
 PolynomialSplineFunction
 SecantSolver
 SplineInterpolator
 UnivariateRealSolverFactoryImpl --> Instantiable Factory

o.a.c.m.complex.
 Complex
 ComplexFormat

o.a.c.m.distribution.
 BinomialDistributionImpl
 ChiSquaredDistributionImpl
 DistributionFactoryImpl --> Instantiable Factory
 ExponentialDistributionImpl
 FDistributionImpl
 GammaDistributionImpl
 HypergeometricDistributionImpl
 NormalDistributionImpl
 TDistributionImpl

o.a.c.m.linear
 RealMatrixImpl

o.a.c.m.random
 EmpiricalDistributionImpl (Pluse inner classes)
 RandomDataImpl

o.a.c.m.stat
 Frequency

o.a.c.m.stat.inference
 ChiSquareTestImpl
 TTestImpl

o.a.c.m.stat.multivariate
 BivariateRegression

o.a.c.m.stat.univariate
 DescriptiveStatisticsImpl
 StatisticalSummaryValues
 SummaryStatisticsImpl

o.a.c.m.stat.univariate.xxx (All classes)

o.a.c.m.util
 ContinuedFraction
 ContractableDoubleArray
 DefaultTransformer
 ExpandableDoubleArray
 FixedDoubleArray
 TransformerMap


c.) With very little effort I can make the following Serializable such that the Replayable Data Streams can be recovered and continued on from given the presence of the Datasource is available.


o.a.c.m.random
 ValueServer


So, to review Phil's list:

AbstractDescriptiveStatistics


+1


BisectionSolver
BrentSolver
ChiSquareTestImpl
DefaultTransformer


-1


DescriptiveStatistics


+1


DescriptiveStatisticsImpl
DistributionFactoryImpl
Erf
Gamma
NewtonSolver
SecantSolver
SplineInterpolator
SummaryStatisticsImpl
TTestImpl
TransformerMap
UnivariateRealSolverFactoryImpl


-1


UnivariateRealSolverImpl


+1


ValueServer


-0 (I can make it Serializable if you like)


-Mark

p.s. As a reminder, I've serailversionUID's generated for all these files now.


Mark R. Diggory wrote:

Phil Steitz wrote:

Since implementing Serializable requires that all subclasses also implement serializable and that care be taken to ensure backward serialization compatability, my view is that we should implement Serializable iff there is a reason to do so, not by default for all classes.


This is not true, you only have to implement serializable in your subclass if you want to support serialization, there is no requirement that you are forced to do so because the parent class implements it. It is completely transparent to the user in this reguard.

I am interested in others' views on this. Maybe I am missing something, but I see no value in implementing Serializable for factories, abstract classes, utility classes and such.


Yes, I'll agree for abstracts, its not really neccessary, it was more a practice on my part to confirm that they were truly serializable. I also agree its probibly not very important for factories, but its a no-brainer, effects very little in terms of source code and performance and is a very simple thing toi maintain. Arguing that this creates all kinds of headaches is really a "Red Herring". I spent an hour on it this afternoon and can confidently state that our API can easily support it without headaches to anyone. Removing it only steps on peoples toes in the long run.

-1 on removing Serialization Interfaces.

Mark


Phil


Index: java/org/apache/commons/math/ConvergenceException.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/ConvergenceException.java,v
retrieving revision 1.12
diff -u -r1.12 ConvergenceException.java
--- java/org/apache/commons/math/ConvergenceException.java      27 Apr 2004 04:37:58 
-0000      1.12
+++ java/org/apache/commons/math/ConvergenceException.java      25 May 2004 21:22:01 
-0000
@@ -24,6 +24,10 @@
  * @version $Revision: 1.12 $ $Date: 2004/04/27 04:37:58 $
  */
 public class ConvergenceException extends MathException implements Serializable{
+    
+    /** Serializable version identifier */
+    static final long serialVersionUID = -3657394299929217890L;
+    
     /**
      * Default constructor.
      */
Index: java/org/apache/commons/math/MathConfigurationException.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/MathConfigurationException.java,v
retrieving revision 1.16
diff -u -r1.16 MathConfigurationException.java
--- java/org/apache/commons/math/MathConfigurationException.java        27 Apr 2004 
04:37:58 -0000      1.16
+++ java/org/apache/commons/math/MathConfigurationException.java        25 May 2004 
21:22:01 -0000
@@ -22,6 +22,9 @@
  * @version $Revision: 1.16 $ $Date: 2004/04/27 04:37:58 $
  */
 public class MathConfigurationException extends MathException implements Serializable 
{
+    
+    /** Serializable version identifier */
+    static final long serialVersionUID = -7958299004965931723L;
 
     /**
      * Default constructor.
Index: java/org/apache/commons/math/MathException.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/MathException.java,v
retrieving revision 1.15
diff -u -r1.15 MathException.java
--- java/org/apache/commons/math/MathException.java     27 Apr 2004 04:37:58 -0000     
 1.15
+++ java/org/apache/commons/math/MathException.java     25 May 2004 21:22:01 -0000
@@ -25,6 +25,9 @@
  */
 public class MathException extends NestableException implements Serializable {
 
+    /** Serializable version identifier */
+    static final long serialVersionUID = -8594613561393443827L;
+    
     /**
      * Constructs a MathException
      */
Index: java/org/apache/commons/math/analysis/BisectionSolver.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/analysis/BisectionSolver.java,v
retrieving revision 1.15
diff -u -r1.15 BisectionSolver.java
--- java/org/apache/commons/math/analysis/BisectionSolver.java  27 Apr 2004 16:42:33 
-0000      1.15
+++ java/org/apache/commons/math/analysis/BisectionSolver.java  25 May 2004 21:22:01 
-0000
@@ -27,6 +27,9 @@
  */
 public class BisectionSolver extends UnivariateRealSolverImpl implements Serializable 
{
     
+    /** Serializable version identifier */
+    static final long serialVersionUID = 7137520585963699578L;
+    
     /**
      * Construct a solver for the given function.
      * @param f function to solve.
Index: java/org/apache/commons/math/analysis/BrentSolver.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/analysis/BrentSolver.java,v
retrieving revision 1.14
diff -u -r1.14 BrentSolver.java
--- java/org/apache/commons/math/analysis/BrentSolver.java      27 Apr 2004 04:37:58 
-0000      1.14
+++ java/org/apache/commons/math/analysis/BrentSolver.java      25 May 2004 21:22:01 
-0000
@@ -28,6 +28,10 @@
  * @version $Revision: 1.14 $ $Date: 2004/04/27 04:37:58 $
  */
 public class BrentSolver extends UnivariateRealSolverImpl implements Serializable {
+    
+    /** Serializable version identifier */
+    static final long serialVersionUID = 3350616277306882875L;
+
     /**
      * Construct a solver for the given function.
      * @param f function to solve.
Index: java/org/apache/commons/math/analysis/NewtonSolver.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/analysis/NewtonSolver.java,v
retrieving revision 1.3
diff -u -r1.3 NewtonSolver.java
--- java/org/apache/commons/math/analysis/NewtonSolver.java     27 Apr 2004 04:37:58 
-0000      1.3
+++ java/org/apache/commons/math/analysis/NewtonSolver.java     25 May 2004 21:22:01 
-0000
@@ -30,6 +30,9 @@
  */
 public class NewtonSolver extends UnivariateRealSolverImpl implements Serializable {
     
+    /** Serializable version identifier */
+    static final long serialVersionUID = 2606474895443431607L;
+    
     /** The first derivative of the target function. */
     private UnivariateRealFunction derivative;
     
Index: java/org/apache/commons/math/analysis/PolynomialFunction.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/analysis/PolynomialFunction.java,v
retrieving revision 1.9
diff -u -r1.9 PolynomialFunction.java
--- java/org/apache/commons/math/analysis/PolynomialFunction.java       27 Apr 2004 
04:37:58 -0000      1.9
+++ java/org/apache/commons/math/analysis/PolynomialFunction.java       25 May 2004 
21:22:01 -0000
@@ -27,6 +27,9 @@
  */
 public class PolynomialFunction implements DifferentiableUnivariateRealFunction, 
Serializable {
 
+    /** Serializable version identifier */
+    static final long serialVersionUID = 3322454535052136809L;
+    
     /**
      * The coefficients of the polynomial, ordered by degree -- i.e.,  
coefficients[0] is the constant term
      * and coefficients[n] is the coefficient of x^n where n is the degree of the 
polynomial.
Index: java/org/apache/commons/math/analysis/PolynomialSplineFunction.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/analysis/PolynomialSplineFunction.java,v
retrieving revision 1.4
diff -u -r1.4 PolynomialSplineFunction.java
--- java/org/apache/commons/math/analysis/PolynomialSplineFunction.java 27 Apr 2004 
04:37:58 -0000      1.4
+++ java/org/apache/commons/math/analysis/PolynomialSplineFunction.java 25 May 2004 
21:22:01 -0000
@@ -45,6 +45,9 @@
  */
 public class PolynomialSplineFunction implements UnivariateRealFunction, Serializable 
{
    
+    /** Serializable version identifier */
+    static final long serialVersionUID = 7011031166416885789L;
+    
     /** Spline segment interval delimiters (knots).   Size is n+1 for n segments. */
     private double knots[];
 
Index: java/org/apache/commons/math/analysis/SecantSolver.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/analysis/SecantSolver.java,v
retrieving revision 1.14
diff -u -r1.14 SecantSolver.java
--- java/org/apache/commons/math/analysis/SecantSolver.java     27 Apr 2004 04:37:58 
-0000      1.14
+++ java/org/apache/commons/math/analysis/SecantSolver.java     25 May 2004 21:22:01 
-0000
@@ -34,6 +34,10 @@
  * @version $Revision: 1.14 $ $Date: 2004/04/27 04:37:58 $
  */
 public class SecantSolver extends UnivariateRealSolverImpl implements Serializable {
+    
+    /** Serializable version identifier */
+    static final long serialVersionUID = 1984971194738974867L;
+    
     /**
      * Construct a solver for the given function.
      * @param f function to solve.
Index: java/org/apache/commons/math/analysis/SplineInterpolator.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/analysis/SplineInterpolator.java,v
retrieving revision 1.17
diff -u -r1.17 SplineInterpolator.java
--- java/org/apache/commons/math/analysis/SplineInterpolator.java       22 May 2004 
19:59:22 -0000      1.17
+++ java/org/apache/commons/math/analysis/SplineInterpolator.java       25 May 2004 
21:22:01 -0000
@@ -44,6 +44,9 @@
  */
 public class SplineInterpolator implements UnivariateRealInterpolator, Serializable {
     
+    /** Serializable version identifier */
+    static final long serialVersionUID = 1451615602299855697L;
+    
     /**
      * Computes an interpolating function for the data set.
      * @param x the arguments for the interpolation points
Index: java/org/apache/commons/math/analysis/UnivariateRealSolverFactoryImpl.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/analysis/UnivariateRealSolverFactoryImpl.java,v
retrieving revision 1.11
diff -u -r1.11 UnivariateRealSolverFactoryImpl.java
--- java/org/apache/commons/math/analysis/UnivariateRealSolverFactoryImpl.java  8 Apr 
2004 21:19:17 -0000       1.11
+++ java/org/apache/commons/math/analysis/UnivariateRealSolverFactoryImpl.java  25 May 
2004 21:22:02 -0000
@@ -28,6 +28,9 @@
 public class UnivariateRealSolverFactoryImpl
     extends UnivariateRealSolverFactory implements Serializable {
         
+    /** Serializable version identifier */
+    static final long serialVersionUID = -6438970414252648435L;
+    
     /**
      * Default constructor.
      */
Index: java/org/apache/commons/math/analysis/UnivariateRealSolverImpl.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/analysis/UnivariateRealSolverImpl.java,v
retrieving revision 1.12
diff -u -r1.12 UnivariateRealSolverImpl.java
--- java/org/apache/commons/math/analysis/UnivariateRealSolverImpl.java 27 Apr 2004 
16:42:33 -0000      1.12
+++ java/org/apache/commons/math/analysis/UnivariateRealSolverImpl.java 25 May 2004 
21:22:02 -0000
@@ -16,8 +16,6 @@
 
 package org.apache.commons.math.analysis;
 
-import java.io.Serializable;
-
 import org.apache.commons.math.MathException;
 
 /**
@@ -27,7 +25,7 @@
  * @version $Revision: 1.12 $ $Date: 2004/04/27 16:42:33 $
  */
 public abstract class UnivariateRealSolverImpl
-    implements UnivariateRealSolver, Serializable {
+    implements UnivariateRealSolver{
 
     /** Maximum absolute error. */
     protected double absoluteAccuracy;
Index: java/org/apache/commons/math/complex/Complex.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/complex/Complex.java,v
retrieving revision 1.7
diff -u -r1.7 Complex.java
--- java/org/apache/commons/math/complex/Complex.java   29 Feb 2004 19:52:01 -0000     
 1.7
+++ java/org/apache/commons/math/complex/Complex.java   25 May 2004 21:22:02 -0000
@@ -27,6 +27,9 @@
  */
 public class Complex implements Serializable  {
 
+    /** Serializable version identifier */
+    static final long serialVersionUID = -6530173849413811929L;
+    
     /** The square root of -1. A number representing "0.0 + 1.0i".*/    
     public static final Complex I = new Complex(0.0, 1.0);
     
Index: java/org/apache/commons/math/complex/ComplexFormat.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/complex/ComplexFormat.java,v
retrieving revision 1.6
diff -u -r1.6 ComplexFormat.java
--- java/org/apache/commons/math/complex/ComplexFormat.java     23 May 2004 00:52:32 
-0000      1.6
+++ java/org/apache/commons/math/complex/ComplexFormat.java     25 May 2004 21:22:02 
-0000
@@ -16,6 +16,7 @@
 
 package org.apache.commons.math.complex;
 
+import java.io.Serializable;
 import java.text.NumberFormat;
 
 /**
@@ -26,8 +27,11 @@
  * @author Apache Software Foundation
  * @version $Revision: 1.6 $ $Date: 2004/05/23 00:52:32 $
  */
-public class ComplexFormat {
+public class ComplexFormat implements Serializable{
 
+    /** Serializable version identifier */
+    static final long serialVersionUID = -2572982098433784000L;
+    
     /** The default complex format. */ 
        private static final ComplexFormat DEFAULT = new ComplexFormat();
 
Index: java/org/apache/commons/math/distribution/BinomialDistributionImpl.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/distribution/BinomialDistributionImpl.java,v
retrieving revision 1.14
diff -u -r1.14 BinomialDistributionImpl.java
--- java/org/apache/commons/math/distribution/BinomialDistributionImpl.java     19 May 
2004 14:16:31 -0000      1.14
+++ java/org/apache/commons/math/distribution/BinomialDistributionImpl.java     25 May 
2004 21:22:02 -0000
@@ -30,6 +30,9 @@
     extends AbstractDiscreteDistribution
     implements BinomialDistribution, Serializable {
 
+    /** Serializable version identifier */
+    static final long serialVersionUID = 6751309484392813623L;
+
     /** The number of trials. */
     private int numberOfTrials;
 
Index: java/org/apache/commons/math/distribution/ChiSquaredDistributionImpl.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/distribution/ChiSquaredDistributionImpl.java,v
retrieving revision 1.16
diff -u -r1.16 ChiSquaredDistributionImpl.java
--- java/org/apache/commons/math/distribution/ChiSquaredDistributionImpl.java   19 May 
2004 14:16:31 -0000      1.16
+++ java/org/apache/commons/math/distribution/ChiSquaredDistributionImpl.java   25 May 
2004 21:22:02 -0000
@@ -28,6 +28,9 @@
     extends AbstractContinuousDistribution
     implements ChiSquaredDistribution, Serializable  {
     
+    /** Serializable version identifier */
+    static final long serialVersionUID = -8352658048349159782L;
+
     /** Internal Gamma distribution. */    
     private GammaDistribution gamma;
     
Index: java/org/apache/commons/math/distribution/DistributionFactoryImpl.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/distribution/DistributionFactoryImpl.java,v
retrieving revision 1.18
diff -u -r1.18 DistributionFactoryImpl.java
--- java/org/apache/commons/math/distribution/DistributionFactoryImpl.java      21 Feb 
2004 21:35:14 -0000      1.18
+++ java/org/apache/commons/math/distribution/DistributionFactoryImpl.java      25 May 
2004 21:22:02 -0000
@@ -25,6 +25,10 @@
  * @version $Revision: 1.18 $ $Date: 2004/02/21 21:35:14 $
  */
 public class DistributionFactoryImpl extends DistributionFactory implements 
Serializable  {
+    
+    /** Serializable version identifier */
+    static final long serialVersionUID = -5615665532127128678L;
+
     /**
      * Default constructor.  Package scope to prevent unwanted instantiation. 
      */
Index: java/org/apache/commons/math/distribution/ExponentialDistributionImpl.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/distribution/ExponentialDistributionImpl.java,v
retrieving revision 1.15
diff -u -r1.15 ExponentialDistributionImpl.java
--- java/org/apache/commons/math/distribution/ExponentialDistributionImpl.java  19 May 
2004 14:16:31 -0000      1.15
+++ java/org/apache/commons/math/distribution/ExponentialDistributionImpl.java  25 May 
2004 21:22:02 -0000
@@ -27,6 +27,9 @@
 public class ExponentialDistributionImpl
     implements ExponentialDistribution, Serializable  {
 
+    /** Serializable version identifier */
+    static final long serialVersionUID = 2401296428283614780L;
+    
     /** The mean of this distribution. */
     private double mean;
     
Index: java/org/apache/commons/math/distribution/FDistributionImpl.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/distribution/FDistributionImpl.java,v
retrieving revision 1.16
diff -u -r1.16 FDistributionImpl.java
--- java/org/apache/commons/math/distribution/FDistributionImpl.java    19 May 2004 
14:16:31 -0000      1.16
+++ java/org/apache/commons/math/distribution/FDistributionImpl.java    25 May 2004 
21:22:02 -0000
@@ -30,6 +30,9 @@
     extends AbstractContinuousDistribution
     implements FDistribution, Serializable  {
 
+    /** Serializable version identifier */
+    static final long serialVersionUID = -8516354193418641566L;
+
     /** The numerator degrees of freedom*/
     private double numeratorDegreesOfFreedom;
 
Index: java/org/apache/commons/math/distribution/GammaDistributionImpl.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/distribution/GammaDistributionImpl.java,v
retrieving revision 1.19
diff -u -r1.19 GammaDistributionImpl.java
--- java/org/apache/commons/math/distribution/GammaDistributionImpl.java        19 May 
2004 14:16:31 -0000      1.19
+++ java/org/apache/commons/math/distribution/GammaDistributionImpl.java        25 May 
2004 21:22:02 -0000
@@ -28,6 +28,9 @@
 public class GammaDistributionImpl extends AbstractContinuousDistribution
     implements GammaDistribution, Serializable  {
 
+    /** Serializable version identifier */
+    static final long serialVersionUID = -3239549463135430361L;
+
     /** The shape parameter. */
     private double alpha;
     
Index: java/org/apache/commons/math/distribution/HypergeometricDistributionImpl.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/distribution/HypergeometricDistributionImpl.java,v
retrieving revision 1.13
diff -u -r1.13 HypergeometricDistributionImpl.java
--- java/org/apache/commons/math/distribution/HypergeometricDistributionImpl.java      
 19 May 2004 14:16:31 -0000      1.13
+++ java/org/apache/commons/math/distribution/HypergeometricDistributionImpl.java      
 25 May 2004 21:22:02 -0000
@@ -30,6 +30,9 @@
     implements HypergeometricDistribution, Serializable 
 {
 
+    /** Serializable version identifier */
+    static final long serialVersionUID = -436928820673516179L;
+
     /** The number of successes in the population. */
     private int numberOfSuccesses;
     
Index: java/org/apache/commons/math/distribution/NormalDistributionImpl.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/distribution/NormalDistributionImpl.java,v
retrieving revision 1.10
diff -u -r1.10 NormalDistributionImpl.java
--- java/org/apache/commons/math/distribution/NormalDistributionImpl.java       19 May 
2004 15:06:44 -0000      1.10
+++ java/org/apache/commons/math/distribution/NormalDistributionImpl.java       25 May 
2004 21:22:02 -0000
@@ -30,6 +30,9 @@
 public class NormalDistributionImpl extends AbstractContinuousDistribution 
                implements NormalDistribution, Serializable {
     
+    /** Serializable version identifier */
+    static final long serialVersionUID = 8589540077390120676L;
+
     /** The mean of this distribution. */
        private double mean = 0;
     
Index: java/org/apache/commons/math/distribution/TDistributionImpl.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/distribution/TDistributionImpl.java,v
retrieving revision 1.16
diff -u -r1.16 TDistributionImpl.java
--- java/org/apache/commons/math/distribution/TDistributionImpl.java    19 May 2004 
14:16:31 -0000      1.16
+++ java/org/apache/commons/math/distribution/TDistributionImpl.java    25 May 2004 
21:22:02 -0000
@@ -30,6 +30,9 @@
     extends AbstractContinuousDistribution
     implements TDistribution, Serializable  {
 
+    /** Serializable version identifier */
+    static final long serialVersionUID = -5852615386664158222L;
+    
     /** The degrees of freedom*/
     private double degreesOfFreedom;
 
Index: java/org/apache/commons/math/linear/InvalidMatrixException.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/linear/InvalidMatrixException.java,v
retrieving revision 1.4
diff -u -r1.4 InvalidMatrixException.java
--- java/org/apache/commons/math/linear/InvalidMatrixException.java     27 Apr 2004 
04:37:58 -0000      1.4
+++ java/org/apache/commons/math/linear/InvalidMatrixException.java     25 May 2004 
21:22:02 -0000
@@ -25,6 +25,10 @@
  * @version $Revision: 1.4 $ $Date: 2004/04/27 04:37:58 $
  */
 public class InvalidMatrixException extends NestableRuntimeException {
+    
+    /** Serializable version identifier */
+    static final long serialVersionUID = 5318837237354354107L;
+    
     /**
      * Default constructor.
      */
Index: java/org/apache/commons/math/linear/MatrixIndexException.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/linear/MatrixIndexException.java,v
retrieving revision 1.4
diff -u -r1.4 MatrixIndexException.java
--- java/org/apache/commons/math/linear/MatrixIndexException.java       27 Apr 2004 
04:37:58 -0000      1.4
+++ java/org/apache/commons/math/linear/MatrixIndexException.java       25 May 2004 
21:22:02 -0000
@@ -24,6 +24,10 @@
  * @version $Revision: 1.4 $ $Date: 2004/04/27 04:37:58 $
  */
 public class MatrixIndexException extends NestableRuntimeException {
+    
+    /** Serializable version identifier */
+    static final long serialVersionUID = -1341109412864309526L;
+    
     /**
      * Default constructor.
      */
Index: java/org/apache/commons/math/linear/RealMatrixImpl.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/linear/RealMatrixImpl.java,v
retrieving revision 1.20
diff -u -r1.20 RealMatrixImpl.java
--- java/org/apache/commons/math/linear/RealMatrixImpl.java     19 May 2004 14:16:32 
-0000      1.20
+++ java/org/apache/commons/math/linear/RealMatrixImpl.java     25 May 2004 21:22:02 
-0000
@@ -42,6 +42,9 @@
  */
 public class RealMatrixImpl implements RealMatrix, Serializable {
 
+    /** Serializable version identifier */
+    static final long serialVersionUID = 4237564493130426188L;
+    
        /** Entries of the matrix */
        private double data[][] = null;
 
Index: java/org/apache/commons/math/random/EmpiricalDistributionImpl.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/random/EmpiricalDistributionImpl.java,v
retrieving revision 1.19
diff -u -r1.19 EmpiricalDistributionImpl.java
--- java/org/apache/commons/math/random/EmpiricalDistributionImpl.java  26 Apr 2004 
19:15:48 -0000      1.19
+++ java/org/apache/commons/math/random/EmpiricalDistributionImpl.java  25 May 2004 
21:22:02 -0000
@@ -57,6 +57,8 @@
  */
 public class EmpiricalDistributionImpl implements Serializable, EmpiricalDistribution 
{
 
+    /** Serializable version identifier */
+    static final long serialVersionUID = -6773236347582113490L;
     
     /** List of DescriptiveStatistics objects characterizing the bins */
     private ArrayList binStats = null;
@@ -386,4 +388,7 @@
     public boolean isLoaded() {
         return loaded;
     }
+    
+
+
 }
Index: java/org/apache/commons/math/random/RandomDataImpl.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/random/RandomDataImpl.java,v
retrieving revision 1.13
diff -u -r1.13 RandomDataImpl.java
--- java/org/apache/commons/math/random/RandomDataImpl.java     11 Apr 2004 19:00:45 
-0000      1.13
+++ java/org/apache/commons/math/random/RandomDataImpl.java     25 May 2004 21:22:02 
-0000
@@ -70,6 +70,9 @@
  */
 public class RandomDataImpl implements RandomData, Serializable {
     
+    /** Serializable version identifier */
+    static final long serialVersionUID = -626730818244969716L;
+
     /** underlying random number generator */
     private Random rand = null;
     
Index: java/org/apache/commons/math/special/Beta.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/special/Beta.java,v
retrieving revision 1.19
diff -u -r1.19 Beta.java
--- java/org/apache/commons/math/special/Beta.java      27 Apr 2004 04:37:59 -0000     
 1.19
+++ java/org/apache/commons/math/special/Beta.java      25 May 2004 21:22:02 -0000
@@ -27,6 +27,10 @@
  * @version $Revision: 1.19 $ $Date: 2004/04/27 04:37:59 $
  */
 public class Beta implements Serializable {
+    
+    /** Serializable version identifier */
+    static final long serialVersionUID = -3833485397404128220L;
+    
     /** Maximum allowed numerical error. */
     private static final double DEFAULT_EPSILON = 10e-9;
 
Index: java/org/apache/commons/math/special/Erf.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/special/Erf.java,v
retrieving revision 1.1
diff -u -r1.1 Erf.java
--- java/org/apache/commons/math/special/Erf.java       5 May 2004 19:54:58 -0000      
 1.1
+++ java/org/apache/commons/math/special/Erf.java       25 May 2004 21:22:02 -0000
@@ -27,6 +27,9 @@
  */
 public class Erf implements Serializable {
 
+    /** Serializable version identifier */
+    static final long serialVersionUID = 490960015010326571L;
+    
     /**
      * Default constructor.  Prohibit instantiation.
      */
Index: java/org/apache/commons/math/special/Gamma.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/special/Gamma.java,v
retrieving revision 1.18
diff -u -r1.18 Gamma.java
--- java/org/apache/commons/math/special/Gamma.java     23 Apr 2004 19:30:47 -0000     
 1.18
+++ java/org/apache/commons/math/special/Gamma.java     25 May 2004 21:22:02 -0000
@@ -27,6 +27,10 @@
  * @version $Revision: 1.18 $ $Date: 2004/04/23 19:30:47 $
  */
 public class Gamma implements Serializable{
+    
+    /** Serializable version identifier */
+    static final long serialVersionUID = -2864920316163123965L;
+
     /** Maximum allowed numerical error. */
     private static final double DEFAULT_EPSILON = 10e-9;
 
Index: java/org/apache/commons/math/stat/Frequency.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/stat/Frequency.java,v
retrieving revision 1.20
diff -u -r1.20 Frequency.java
--- java/org/apache/commons/math/stat/Frequency.java    19 May 2004 14:16:32 -0000     
 1.20
+++ java/org/apache/commons/math/stat/Frequency.java    25 May 2004 21:22:02 -0000
@@ -22,7 +22,7 @@
 
 import org.apache.commons.collections.ComparatorUtils;
 import org.apache.commons.collections.SortedBag;
-import org.apache.commons.collections.bag.TreeBag;
+import org.apache.commons.collections.TreeBag;
 
 /** 
  * Maintains a frequency distribution.
@@ -36,6 +36,9 @@
  */
 public class Frequency implements Serializable {
     
+    /** Serializable version identifier */
+    static final long serialVersionUID = -3845586908418844111L;
+
     /** underlying collection */
     private SortedBag freqTable = null;
 
Index: java/org/apache/commons/math/stat/univariate/DescriptiveStatistics.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/stat/univariate/DescriptiveStatistics.java,v
retrieving revision 1.5
diff -u -r1.5 DescriptiveStatistics.java
--- java/org/apache/commons/math/stat/univariate/DescriptiveStatistics.java     23 May 
2004 00:56:15 -0000      1.5
+++ java/org/apache/commons/math/stat/univariate/DescriptiveStatistics.java     25 May 
2004 21:22:02 -0000
@@ -15,8 +15,6 @@
  */
 package org.apache.commons.math.stat.univariate;
 
-import java.io.Serializable;
-
 import org.apache.commons.discovery.tools.DiscoverClass;
 
 
@@ -25,8 +23,8 @@
  * 
  * @version $Revision: 1.5 $ $Date: 2004/05/23 00:56:15 $
  */
-public abstract class DescriptiveStatistics implements Serializable, 
StatisticalSummary {
-
+public abstract class DescriptiveStatistics implements StatisticalSummary {
+    
        /**
         * Create an instance of a <code>DescriptiveStatistics</code>
      * @param cls the type of <code>DescriptiveStatistics</code> object to
Index: java/org/apache/commons/math/stat/univariate/DescriptiveStatisticsImpl.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/stat/univariate/DescriptiveStatisticsImpl.java,v
retrieving revision 1.5
diff -u -r1.5 DescriptiveStatisticsImpl.java
--- java/org/apache/commons/math/stat/univariate/DescriptiveStatisticsImpl.java 23 May 
2004 00:30:01 -0000      1.5
+++ java/org/apache/commons/math/stat/univariate/DescriptiveStatisticsImpl.java 25 May 
2004 21:22:02 -0000
@@ -27,6 +27,9 @@
  */
 public class DescriptiveStatisticsImpl extends AbstractDescriptiveStatistics 
implements Serializable {
 
+    /** Serializable version identifier */
+    static final long serialVersionUID = -1868088725461221010L;
+    
        /** hold the window size **/
        protected int windowSize;
     
Index: java/org/apache/commons/math/stat/univariate/SummaryStatistics.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/stat/univariate/SummaryStatistics.java,v
retrieving revision 1.5
diff -u -r1.5 SummaryStatistics.java
--- java/org/apache/commons/math/stat/univariate/SummaryStatistics.java 19 May 2004 
14:16:31 -0000      1.5
+++ java/org/apache/commons/math/stat/univariate/SummaryStatistics.java 25 May 2004 
21:22:02 -0000
@@ -15,8 +15,6 @@
  */
 package org.apache.commons.math.stat.univariate;
 
-import java.io.Serializable;
-
 import org.apache.commons.discovery.tools.DiscoverClass;
 
 /**
@@ -24,7 +22,7 @@
  * 
  * @version $Revision: 1.5 $ $Date: 2004/05/19 14:16:31 $
  */
-public abstract class SummaryStatistics implements Serializable, StatisticalSummary {
+public abstract class SummaryStatistics implements StatisticalSummary {
 
        /**
         * Create an instance of a <code>SummaryStatistics</code>
Index: java/org/apache/commons/math/stat/univariate/SummaryStatisticsImpl.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/stat/univariate/SummaryStatisticsImpl.java,v
retrieving revision 1.2
diff -u -r1.2 SummaryStatisticsImpl.java
--- java/org/apache/commons/math/stat/univariate/SummaryStatisticsImpl.java     27 Apr 
2004 04:37:59 -0000      1.2
+++ java/org/apache/commons/math/stat/univariate/SummaryStatisticsImpl.java     25 May 
2004 21:22:02 -0000
@@ -15,6 +15,7 @@
  */
 package org.apache.commons.math.stat.univariate;
 
+import java.io.Serializable;
 import org.apache.commons.math.stat.univariate.moment.SecondMoment;
 import org.apache.commons.math.stat.univariate.moment.GeometricMean;
 import org.apache.commons.math.stat.univariate.moment.Mean;
@@ -30,7 +31,10 @@
  * 
  * @version $Revision: 1.2 $ $Date: 2004/04/27 04:37:59 $  
  */
-public class SummaryStatisticsImpl extends SummaryStatistics {
+public class SummaryStatisticsImpl extends SummaryStatistics implements Serializable {
+
+    /** Serializable version identifier */
+    static final long serialVersionUID = 8787174276883311692L;
 
     /** count of values that have been added */
     protected long n = 0;
Index: java/org/apache/commons/math/util/ContinuedFraction.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/util/ContinuedFraction.java,v
retrieving revision 1.12
diff -u -r1.12 ContinuedFraction.java
--- java/org/apache/commons/math/util/ContinuedFraction.java    26 Apr 2004 20:47:07 
-0000      1.12
+++ java/org/apache/commons/math/util/ContinuedFraction.java    25 May 2004 21:22:02 
-0000
@@ -35,6 +35,10 @@
  * @version $Revision: 1.12 $ $Date: 2004/04/26 20:47:07 $
  */
 public abstract class ContinuedFraction implements Serializable {
+
+    /** Serializable version identifier */
+    static final long serialVersionUID = 1768555336266158242L;
+    
     /** Maximum allowed numerical error. */
     private static final double DEFAULT_EPSILON = 10e-9;
 
Index: java/org/apache/commons/math/util/DefaultTransformer.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/util/DefaultTransformer.java,v
retrieving revision 1.13
diff -u -r1.13 DefaultTransformer.java
--- java/org/apache/commons/math/util/DefaultTransformer.java   21 Mar 2004 21:57:19 
-0000      1.13
+++ java/org/apache/commons/math/util/DefaultTransformer.java   25 May 2004 21:22:02 
-0000
@@ -30,6 +30,9 @@
  */
 public class DefaultTransformer implements NumberTransformer, Serializable {
     
+    /** Serializable version identifier */
+    static final long serialVersionUID = 4019938025047800455L;
+    
     /**
      * @param o  the object that gets transformed.
      * @return a double primitive representation of the Object o.
Index: java/org/apache/commons/math/util/TransformerMap.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/util/TransformerMap.java,v
retrieving revision 1.12
diff -u -r1.12 TransformerMap.java
--- java/org/apache/commons/math/util/TransformerMap.java       23 Apr 2004 19:50:27 
-0000      1.12
+++ java/org/apache/commons/math/util/TransformerMap.java       25 May 2004 21:22:02 
-0000
@@ -32,6 +32,9 @@
  */
 public class TransformerMap implements NumberTransformer, Serializable {
 
+    /** Serializable version identifier */
+    static final long serialVersionUID = -942772950698439883L;
+    
        /**
         * A default Number Transformer for Numbers and numeric Strings.
         */
Index: test/org/apache/commons/math/analysis/BisectionSolverTest.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/test/org/apache/commons/math/analysis/BisectionSolverTest.java,v
retrieving revision 1.10
diff -u -r1.10 BisectionSolverTest.java
--- test/org/apache/commons/math/analysis/BisectionSolverTest.java      18 Feb 2004 
03:24:20 -0000      1.10
+++ test/org/apache/commons/math/analysis/BisectionSolverTest.java      25 May 2004 
21:22:02 -0000
@@ -18,6 +18,8 @@
 package org.apache.commons.math.analysis;
 
 import org.apache.commons.math.MathException;
+import org.apache.commons.math.TestUtils;
+import org.apache.commons.math.stat.univariate.DescriptiveStatistics;
 
 import junit.framework.TestCase;
 
@@ -209,4 +211,91 @@
             fail(ex.getMessage());
         }
     }        
+    
+    /**
+     * Test Serialization and Recovery
+     */
+   public void testSerialization() {
+
+       /* testQuinticZero */
+       try {
+           UnivariateRealFunction f = 
(UnivariateRealFunction)TestUtils.serializeAndRecover(new QuinticFunction());
+           double result;
+           
+           UnivariateRealSolver solver = 
(UnivariateRealSolver)TestUtils.serializeAndRecover(new BisectionSolver(f));
+           UnivariateRealSolver solver2 = 
(UnivariateRealSolver)TestUtils.serializeAndRecover(solver);
+           result = solver.solve(-0.2, 0.2);
+           assertEquals(result, 0, solver.getAbsoluteAccuracy());
+           assertEquals(solver2.solve(-0.2, 0.2), result, 
solver2.getAbsoluteAccuracy());
+           
+           result = solver.solve(-0.1, 0.3);
+           assertEquals(result, 0, solver.getAbsoluteAccuracy());
+           assertEquals(solver2.solve(-0.1, 0.3), result, 
solver2.getAbsoluteAccuracy());
+           
+           result = solver.solve(-0.3, 0.45);
+           assertEquals(result, 0, solver.getAbsoluteAccuracy());
+           assertEquals(solver2.solve(-0.3, 0.45), result, 
solver2.getAbsoluteAccuracy());
+           
+           result = solver.solve(0.3, 0.7);
+           assertEquals(result, 0.5, solver.getAbsoluteAccuracy());
+           assertEquals(solver2.solve(0.3, 0.7), result, 
solver2.getAbsoluteAccuracy());
+           
+           result = solver.solve(0.2, 0.6);
+           assertEquals(result, 0.5, solver.getAbsoluteAccuracy());
+           assertEquals(solver2.solve(0.2, 0.6), result, 
solver2.getAbsoluteAccuracy());
+           
+           result = solver.solve(0.05, 0.95);
+           assertEquals(result, 0.5, solver.getAbsoluteAccuracy());
+           assertEquals(solver2.solve(0.05, 0.95), result, 
solver2.getAbsoluteAccuracy());
+           
+           result = solver.solve(0.85, 1.25);
+           assertEquals(result, 1.0, solver.getAbsoluteAccuracy());
+           assertEquals(solver2.solve(0.85, 1.25), result, 
solver2.getAbsoluteAccuracy());
+           
+           result = solver.solve(0.8, 1.2);
+           assertEquals(result, 1.0, solver.getAbsoluteAccuracy());
+           assertEquals(solver2.solve(0.8, 1.2), result, 
solver2.getAbsoluteAccuracy());
+           
+           result = solver.solve(0.85, 1.75);
+           assertEquals(result, 1.0, solver.getAbsoluteAccuracy());
+           assertEquals(solver2.solve(0.85, 1.75), result, 
solver2.getAbsoluteAccuracy());
+           
+           result = solver.solve(0.55, 1.45);
+           assertEquals(result, 1.0, solver.getAbsoluteAccuracy());
+           assertEquals(solver2.solve(0.55, 1.45), result, 
solver2.getAbsoluteAccuracy());
+           
+           result = solver.solve(0.85, 5);
+           assertEquals(result, 1.0, solver.getAbsoluteAccuracy());
+           assertEquals(solver2.solve(0.85, 5), result, 
solver2.getAbsoluteAccuracy());
+           
+       } catch(MathException ex){
+           fail(ex.getMessage());
+       }
+       
+       /* Test Reset */
+       try{ 
+           double newValue = 1.0e-2;
+           UnivariateRealFunction f = 
(UnivariateRealFunction)TestUtils.serializeAndRecover(new QuinticFunction());
+           UnivariateRealSolver solver = new BisectionSolver(f);
+
+           double oldValue = solver.getRelativeAccuracy();
+           solver.setRelativeAccuracy(newValue);
+           solver.resetRelativeAccuracy();
+           assertEquals(oldValue, solver.getRelativeAccuracy(), 1.0e-2);
+       
+           UnivariateRealSolver  solver2 = 
(UnivariateRealSolver)TestUtils.serializeAndRecover(solver); 
+       
+           assertEquals(oldValue, solver2.getRelativeAccuracy(), 1.0e-2);
+       
+           solver2.setRelativeAccuracy(newValue);
+           solver2.resetRelativeAccuracy();
+       
+           assertEquals(oldValue, solver2.getRelativeAccuracy(), 1.0e-2);
+       
+       } catch(MathException ex){
+           fail(ex.getMessage());
+       }
+       
+   }
+    
 }
Index: test/org/apache/commons/math/analysis/QuinticFunction.java
===================================================================
RCS file: 
/home/cvs/jakarta-commons/math/src/test/org/apache/commons/math/analysis/QuinticFunction.java,v
retrieving revision 1.12
diff -u -r1.12 QuinticFunction.java
--- test/org/apache/commons/math/analysis/QuinticFunction.java  8 Apr 2004 21:19:17 
-0000       1.12
+++ test/org/apache/commons/math/analysis/QuinticFunction.java  25 May 2004 21:22:02 
-0000
@@ -15,6 +15,8 @@
  */
 package org.apache.commons.math.analysis;
 
+import java.io.Serializable;
+
 import org.apache.commons.math.MathException;
 
 /**
@@ -22,7 +24,9 @@
  *
  * @version $Revision: 1.12 $ $Date: 2004/04/08 21:19:17 $ 
  */
-public class QuinticFunction implements DifferentiableUnivariateRealFunction {
+public class QuinticFunction implements DifferentiableUnivariateRealFunction, 
Serializable {
+
+    static final long serialVersionUID = -8866263034920607152L;
 
     /* Evaluate quintic.
      * @see org.apache.commons.math.UnivariateRealFunction#value(double)

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to