prepared release notes for 2.2

git-svn-id: https://svn.apache.org/repos/asf/commons/proper/math/branches/MATH_2_X@1072559 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Luc Maisonobe 2011-02-20 11:21:26 +00:00
parent d4827f16b9
commit 386c6734d8
3 changed files with 172 additions and 145 deletions

View File

@ -1,137 +1,146 @@
Apache Commons Math 2.1 RELEASE NOTES
Apache Commons Math 2.2 RELEASE NOTES
This is primarily a maintenance release, but it also includes new features and enhancements.
Users of version 2.0 are encouraged to upgrade to 2.1, as this release includes some important
bug fixes. See the detailed list of changes below for full description of all bug fixes and
enhancements.
This release contains some minor API compatibility breaks with version 2.0:
--------------------------------------------------------------------------
- the return type of RealVector.copy() has been changed to AbstractRealVector
- the no-argument constructor of MatrixUtils() has been made private
- the mapXxxToSelf methods of OpenMapRealVector have been removed and some method return types
have been changed in this class
- new methods have been added to the RealVector interface
- several fields in AdaptiveStepSizeIntegrator have been made final
- DummyStepInterpolator requires an additional argument for one of its constructors
- some protected fields have been removed from AbstractLeastSquaresOptimizer,
AbstractScalarDifferentiableOptimizer and AbstractLinearOptimizer
- the isOptimal(SimplexTableau) method has been removed from SimplexSolver
Users of version 2.1 are encouraged to upgrade to 2.2, as this release includes some important bug fixes.
See the detailed list of changes below for full description of all bug fixes and enhancements.
This release contains some minor compatibility breaks with version 2.1 in some internal classes but none
of them are in the public API:
the MessagesResources_fr class has been removed (replaced by a properties file);
the arguments of the EventState.reinitializeBegin method have changed;
some private fields in AbstractStepInterpolator have been replaced.
The major new features are:
a new FastMath class, both faster, more accurate and with a few additional functions than StrictMath and Math;
a new package for floating point arbitrary precision computing, including high level functions like exponential, sine, square root ...;
new linear and tricubic interpolators;
a new Gaussian curve fitter;
a new erfc function;
characteristic support for distributions;
a set of new Well Equidistributed Long-period Linear (WELL) random generators.
Changes in this version include:
New features:
o MATH-357: Implementation of bicubic interpolation.
o Added a way to compute both the final state in an Initial Value Problem (IVP)
for Ordinary Differential Equations (ODE) and its derivatives with respect to
initial state and with respect to some problem parameters. This allows wrapping
ODE solvers into optimization or root finding algorithms, which in turn can be
used to solve Boundary Value Problems (BVP). There are no implementations (yet)
of BVP solvers in the library.
o MATH-323: Added SemiVariance statistic. Thanks to Larry Diamond.
o MATH-341: Added a warning in the getCoefficients method documentation for
PolynomialFunctionLagrangeForm. Computation may be ill-conditioned
so this method should be used with care.
o MATH-340: Fixed an error in BigFraction multiplication for large numerators that don't
fit in a primitive int.
o MATH-334: Added min/max getters for real vectors (not yet in the RealVector interface for
compatibility purposes, but in the AbstractRealVector abstract class).
o MATH-321: Singular Value Decomposition now computes either the compact SVD (using only
positive singular values) or truncated SVD (using a user-specified maximal
number of singular values).
o MATH-300: Added support for multidimensional interpolation using the robust microsphere algorithm. Thanks to Gilles Sadowski.
o MATH-287: Added support for weighted descriptive statistics. Thanks to Matthew Rowles.
o Added normalizeArray method to MathUtils.
o MATH-364: Added complementary error function, erfc. Thanks to Christian Winter.
o MATH-385: Added characteristic support to distributions, including methods to return numerical
estimates of the mean and variance and upper and lower bounds of support. In version 2.2,
methods returning distribution characteristics have been added only to the implementation
classes. In version 3, supporting methods have been added to the abstract base classes
and distribution interfaces.
o MATH-440: Created "MathUserException" class to convey cause of failure between
layers of user code separated by a layer of Commons-Math code.
o MATH-419: Added new random number generators from the Well Equidistributed Long-period Linear (WELL).
o MATH-412: Added the dfp library providing arbitrary precision floating point computation in the spirit of
IEEE 854-1987 (not exactly as it uses base 1000 instead of base 10). In addition to finite numbers,
infinities and NaNs are available (but there are no subnormals). All IEEE 854-1987 rounding modes and
signaling flags are supported. The available operations are +, -, *, / and the available functions
are sqrt, sin, cos, tan, asin, acos, atan, exp, log. Thanks to Bill Rossi.
o MATH-375: Added faster and more accurate version of traditional mathematical functions in a FastMath
class intended to be a drop-in replacement for java.util.Math at source-level. Some functions
still directly delegates to Math but this will improve with time. Some functions like exp
may be twice as fast (even 3 times faster on some processors). Sine, cosine or power functions
show typical speedups of 1.5 times faster or more. Thanks to Bill Rossi.
o MATH-400: Added support for Gaussian curve fitting. Thanks to J. Lewis Muir.
o MATH-388: Added a feature allowing error estimation to be computed only on a subset of
Ordinary Differential Equations, considered as the main set, the remaining equations
being considered only as an extension set that should not influence the ODE integration
algorithm
o MATH-379: Created "MultidimensionalCounter" class.
o MATH-378: Implementation of linear interpolation. Thanks to Matthew Rowles.
o MATH-370: Added new "equalsIncludingNaN" methods that have the same semantics as the old "equals" methods.
The semantics of the old methods will be modified (in the next major release) such that
NaNs are not considered equal (to be more compliant with IEEE754).
o MATH-366: Implementation of tricubic interpolation.
Fixed Bugs:
o MATH-360: Fix use of wrong variable in SmoothingBicubicSplineInterpolatorTest.testPreconditions()
o MATH-335: Fraction.hashCode() implementation was not fully consistent with Fraction.equals().
Changed hashCode() to use fields directly to agree with equals().
o MATH-282: Resolved multiple problems leading to inaccuracy and/or failure to compute Normal,
ChiSquare and Poisson probabilities, Erf and Gamma functions. Made Brent solver
absolute accuracy configurable for all continuous distributions.
o MATH-347: Fixed too stringent interval check in Brent solver: initial guess is now
allowed to be at either interval end
o MATH-358: Fixed an error in events handling in ODE solvers. In some rare cases, events
occurring close to a step start were handled without truncating the step, making
them appear as is they occurred close to the step end
o Fixed a problem with getInterpolatedDerivatives returning zero derivatives when
an ODE step handler is configured to not use interpolation. It now returns a
constant but non-zero value consistent with at least one point inside the step
o MATH-344: Fixed wrong return values when enpoints are roots in Brent solver with
a user provided initial guess
o MATH-343: Fixed a missing bracketing check of initial interval in Brent solver.
o MATH-342: In SVD, the matrices passed to EigenDecomposition are now symmetric
by construction (rather than simply by definition). In EigenDecomposition,
once the tridiagonal form is obtained, the non-significant elements are
set to 0.
o MATH-333: A EigenDecompositionImpl simplified makes it possible to compute
the SVD of a singular matrix (with the right number of elements in
the diagonal matrix) or a matrix with singular value(s) of multiplicity
greater than 1.
o Fixed a spurious exception in EigenDecompositionImpl when a 3x3 block
had two identical eigenvalues.
o MATH-338: Fixed automatic step initialization in embedded Runge-Kutta integrators.
The relative tolerance setting was never used, only the absolute tolerance
was used. Thanks to Vincent Morand.
o MATH-329: Fixed regression in Frequency.getPct(Object) introduced in 2.0. Cumulative
percent was being returned for Object arguments in place of percent.
o MATH-320: Fixed Singular Value Decomposition solving of singular systems.
o MATH-326: Fixed a wrong implementation of the Linf norm in vectors. Thanks to Jake Mannix.
o MATH-324: Fixed a convergence discrepancy with respect to theory in Gragg-Bulirsch-Stoer
integrator. Thanks to Vincent Morand.
o Fixed a wrong dimension check in SVD solver. Thanks to Dimitri Pourbaix.
o MATH-313: Added composition features for real functions. Thanks to Jake Mannix.
o MATH-312: Added mapping and iteration methods to vectors. Provided a default implementation
for the numerous simple methods in the RealVectorInterface. Thanks to Jake Mannix.
o MATH-322: Fixed an error in handling very close events in ODE integration.
o MATH-305: Fixed an overflow error in MathUtils.distance that was causing KMeansPlusPlusClusterer
to fail with a NullPointerException when component distances between points
exceeded Integer.MAXVALUE. Thanks to Erik van Ingen.
o MATH-318: Fixed an index computation error in eigen decomposition. Once again, kudos to Dimitri
for debugging this. Thanks to Dimitri Pourbaix.
o MATH-308: Fixed an ArrayIndexOutOfBoundsException in eigen decomposition. Kudos to Dimitri
for debugging this, it was really difficult. Thanks to Dimitri Pourbaix.
o MATH-309: Fixed parameter test in RandomDataImpl#nextExponential. The method now throws
IllegalArgumentException for mean = 0. Thanks to Mikkel Meyer Andersen.
o MATH-306: Removed dead code from Complex#divide. Thanks to Joerg Huber.
o MATH-294: Fixed implementation of RandomDataImpl#nextPoisson by implementing an alternative
algorithm for large means.
o MATH-298: Fixed implementation of EmpiricalDistributionImpl#getUpperBounds to match
interface contract. Added getGeneratorUpperBounds method to
EmpiricalDistributionImpl providing previous behavior.
o MATH-296: Fixed wrong results on Loess interpolation, also added a way to set weights
for smoothing and to ignore zero weights for coefficients computation Thanks to Eugene Kirpichov.
o MATH-293: Fixed a OutOfBoundException in simplex solver when some constraints are tight. Thanks to Benjamin McCann.
o MATH-291: Fixed misleading number formats in error messages for adaptive
stepsize integrators. Thanks to Sebb.
o MATH-290: Fixed a NullPointerException in simplex solver when no solution is possible
and some constraints are negative. Thanks to Benjamin McCann.
o MATH-289: Removed an unused argument in a private method in simplex solver.
o MATH-288: Fixed an error induced by entries set to 0 in simplex solver. Thanks to Benjamin McCann.
o MATH-286: Fixed an error leading the simplex solver to compute the right solution
but return another one. Thanks to Benjamin McCann.
o MATH-283: Prevent infinite loops in multi-directional direct optimization method when
the start point is exactly at the optimal point. Thanks to Michael Nischt.
o MATH-297: Prevent possible zero divides on eigenvectors of indefinite matrices Thanks to Axel Kramer.
o MATH-505: TestUtils is thread-hostile. Deprecate the getters and setters.
o MATH-471: MathUtils.equals(double, double) does not work properly for floats
- add equivalent (float, float) methods and basic tests
o MATH-467: Fixed an awkward statement that triggered a false positive warning.
o MATH-456: Modified erf (and erfc) to return extreme values for x with abs(x) > 40.
For these arguments, the true value is indistinguishable from an extrema as a double.
o MATH-414: Modified NormalDistributionImpl.cumulativeProbability to return 0 or 1,
respectively for values more than 40 standard deviations from the mean.
For these values, the actual probability is indistinguishable from 0 or 1
as a double. Top coding improves performance for extreme values and prevents
convergence exceptions.
o MATH-380: Deprecated the whole ode.jacobians package. It is clumsy and difficult to use. It will
be replaced by a completely rewritten implementation in 3.0, which will be more tightly
bound to the top level ode package
o MATH-426: Added a normalization feature to transform samples so they have zero mean and unit standard deviation Thanks to Erik van Ingen.
o MATH-429: Fixed k-means++ to add several strategies to deal with empty clusters that may appear
during iterations
o MATH-391: Fixed an error preventing zero length vectors to be built by some constructors
o MATH-421: Fixed an error preventing ODE solvers to be restarted after they have been stopped by a discrete event
o MATH-415: Fixed lost cause in MathRuntimeException.createInternalError. Note that the message is still the default
message for internal errors asking to report a bug to commons-math JIRA tracker. In order to retrieve
the message from the root cause, one has to get the cause itself by getCause().
o MATH-411: Modified multiple regression newSample methods to ensure that by default in all cases,
regression models are estimated with intercept terms. Prior to the fix for this issue,
newXSampleData(double[][]), newSampleData(double[], double[][]) and
newSampleData(double[], double[][], double[][]) all required columns of "1's" to be inserted
into the x[][] arrays to create a model with an intercept term; while newSampleData(double[], int, int)
created a model including an intercept term without requiring the unitary column. All methods have
been changed to eliminate the need for users to add unitary columns to specify regression models.
Users of OLSMultipleLinearRegression or GLSMultipleLinearRegression versions 2.0 or 2.1 should either
verify that their code either does not use the first set of data loading methods above or set the noIntercept
property to true on estimated models to get the previous behavior.
o MATH-386: Added R-squared and adjusted R-squared statistics to OLSMultipleLinearRegression.
o MATH-392: Corrected the formula used for Y variance returned by calculateYVariance and associated
methods in multiple regression classes (AbstractMultipleLinearRegression,
OLSMultipleLinearRegression, GLSMultipleLinearRegression). These methods previously returned
estimates of the variance in the model error term. New "calulateErrorVariance" methods have
been added to compute what was previously returned by calculateYVariance. Thanks to Mark Devaney.
o MATH-406: Bug fixed in Levenberg-Marquardt (handling of weights).
o MATH-405: Bug fixed in Levenberg-Marquardt (consistency of current).
o MATH-377: Bug fixed in chi-square computation in AbstractLeastSquaresOptimizer.
o MATH-395: Fixed several bugs in "BrentOptimizer".
o MATH-393: Fixed inconsistency in return values in "MultiStartUnivariateRealOptimizer".
o MATH-382: Fixed bug in precondition check (method "setMicrosphereElements").
o MATH-361: Improved localization of error messages.
o MATH-376: Allow multiple optimizations with a default simplex.
o MATH-352: Added a setQRRankingThreshold method to Levenberg-Marquardt optimizer to improve robustness
of rank determination.
o MATH-362: Fixed Levenberg-Marquardt optimizer that did not use the vectorial convergence checker.
Now this optimizer can use either the general vectorial convergence checker or its own
specialized convergence settings.
o MATH-371: Fixed loss of significance error in PersonsCorrelation p-value computation causing p-values
smaller than the machine epsilon (~1E-16) to be reported as 0. Thanks to Kevin Childs.
o MATH-369: Fix NullPointerException in BisectionSolver.solve(f, min, max, initial) Thanks to Sasun Pundev.
o MATH-368: Fix spelling of getSparcity [sic] method of OpenMapRealVector
o MATH-367: Fix problem with the default sparseIterator when a RealVector has exactly one non-zero entry Thanks to Albert Huang.
Changes:
o MATH-356: Added method to clear the list of observations in CurveFitter.
o MATH-332: Added density functions to remaining continuous distributions (F, T, Weibull, Cauchy).
As of Math 2.1, all continuous distributions implement density functions. The HasDensity
interface has been deprecated and in version 3.0, density(double) will be added to the
ContinuousDistribution interface. Thanks to Mikkel Meyer Andersen.
o MATH-337: Changed equals() methods to use instanceof check rather than catching ClassCastException;
this also allows some null checks to be omitted.
o MATH-336: Removed unnecessary null checks in equals methods.
o MATH-239: Added MathUtils methods to compute gcd and lcm for long arguments. Thanks to Christian Semrau.
o MATH-287: Added support for weighted univariate statistics. Thanks to Matthew Rowles.
o MATH-315: Added generationsEvolved property to GeneticAlgorithm to track the number of generations
evolved by the evolve() method before reaching the StoppingCondition. Thanks to Mikkel Meyer Andersen.
o MATH-311: Changed probability calculations for Binomial, Poisson, and Hypergeometric
distributions to use Catherine Loader's saddle point approximations. Thanks to Nipun Jawalkar.
o MATH-384: Added a constructor and addValues(double[]) methods allowing DescriptiveStatistics to
be initialized with values from a double[] array. Similarly enhanced
ResizeableDoubleArray.
o MATH-448: Added a getUniqueCount() method to Frequency to return the number of unique
values included in the frequency table. Thanks to Patrick Meyer.
o MATH-420: Added toString() override to StatisticalSummaryValues.
o MATH-417: Improved Percentile performance by using a selection algorithm instead of a
complete sort, and by allowing caching data array and pivots when several
different percentiles are desired
o MATH-409: Made intercept / no intercept configurable in multiple regression classes. By default, regression
models are estimated with an intercept term. When the "noIntercept" property is set to
true, regression models are estimated without intercepts.
o MATH-361: Created package "exception" to contain the new exceptions hierarchy.
Created package "exception.util": utilities for the exception classes
(e.g. managing the localization of error messages).
Default policy for dealing with invalid null references: raise a
"NullArgumentException" (subclass of "IllegalArgumentException").
o MATH-310: Added random data generation methods to RandomDataImpl for the remaining distributions in the
distributions package. Added a generic nextInversionDeviate method that takes a discrete
or continuous distribution as argument and generates a random deviate from the distribution.
Also added sampling methods based on the implementations in RandomDataImpl to distributions.
o MATH-365: Deprecated SmoothingBicubicSplineInterpolator and SmoothingBicubicSplineInterpolatorTest.
Added BicubicSplineInterpolator and BicubicSplineInterpolatorTest.
Added SmoothingPolynomialBicubicSplineInterpolator and SmoothingPolynomialBicubicSplineInterpolatorTest.
Added method to clear the list of observations in PolynomialFitter.
For complete information on Commons Math, including instructions on how to submit bug reports,

View File

@ -51,7 +51,27 @@ The <action> type attribute can be add,update,fix,remove.
with a new-line in the release notes. (These spaces are ignored when displaying HTML).
If the output is not quite correct, check for invisible trailing spaces!
-->
<release version="2.2" date="TBD" description="TBD">
<release version="2.2" date="2011-02-24" description="
This is primarily a maintenance release, but it also includes new features and enhancements.
Users of version 2.1 are encouraged to upgrade to 2.2, as this release includes some important bug fixes.
See the detailed list of changes below for full description of all bug fixes and enhancements.
This release contains some minor compatibility breaks with version 2.1 in some internal classes but none
of them are in the public API:
the MessagesResources_fr class has been removed (replaced by a properties file);
the arguments of the EventState.reinitializeBegin method have changed;
some private fields in AbstractStepInterpolator have been replaced.
The major new features are:
a new FastMath class, both faster, more accurate and with a few additional functions than StrictMath and Math;
a new package for floating point arbitrary precision computing, including high level functions like exponential, sine, square root ...;
new linear and tricubic interpolators;
a new Gaussian curve fitter;
a new erfc function;
characteristic support for distributions;
a set of new Well Equidistributed Long-period Linear (WELL) random generators.">
<action dev="sebb" type="fix" issue="MATH-505">
TestUtils is thread-hostile. Deprecate the getters and setters.
</action>
@ -110,14 +130,14 @@ The <action> type attribute can be add,update,fix,remove.
<action dev="luc" type="fix" issue="MATH-467">
Fixed an awkward statement that triggered a false positive warning.
</action>
<action dev="psteitz" type="update" issue="MATH-364" due-to="Christian Winter">
<action dev="psteitz" type="add" issue="MATH-364" due-to="Christian Winter">
Added complementary error function, erfc.
</action>
<action dev="psteitz" type="fix" issue="MATH-456">
Modified erf (and erfc) to return extreme values for x with abs(x) > 40.
For these arguments, the true value is indistinguishable from an extrema as a double.
</action>
<action dev="mikl" type="update" issue="MATH-385">
<action dev="mikl" type="add" issue="MATH-385">
Added characteristic support to distributions, including methods to return numerical
estimates of the mean and variance and upper and lower bounds of support. In version 2.2,
methods returning distribution characteristics have been added only to the implementation
@ -153,9 +173,7 @@ The <action> type attribute can be add,update,fix,remove.
</action>
<action dev="erans" type="add" issue="MATH-440">
Created "MathUserException" class to convey cause of failure between
layers of user code separated by a layer of Commons-Math code. Deprecated
classes "FunctionEvaluationException", "MatrixVisitorException" and
"DerivativeException".
layers of user code separated by a layer of Commons-Math code.
</action>
<action dev="luc" type="fix" issue="MATH-429">
Fixed k-means++ to add several strategies to deal with empty clusters that may appear
@ -197,14 +215,14 @@ The <action> type attribute can be add,update,fix,remove.
verify that their code either does not use the first set of data loading methods above or set the noIntercept
property to true on estimated models to get the previous behavior.
</action>
<action dev="luc" type="fix" issue="MATH-412" due-to="Bill Rossi">
<action dev="luc" type="add" issue="MATH-412" due-to="Bill Rossi">
Added the dfp library providing arbitrary precision floating point computation in the spirit of
IEEE 854-1987 (not exactly as it uses base 1000 instead of base 10). In addition to finite numbers,
infinities and NaNs are available (but there are no subnormals). All IEEE 854-1987 rounding modes and
signaling flags are supported. The available operations are +, -, *, / and the available functions
are sqrt, sin, cos, tan, asin, acos, atan, exp, log.
</action>
<action dev="luc" type="fix" issue="MATH-375" due-to="Bill Rossi">
<action dev="luc" type="add" issue="MATH-375" due-to="Bill Rossi">
Added faster and more accurate version of traditional mathematical functions in a FastMath
class intended to be a drop-in replacement for java.util.Math at source-level. Some functions
still directly delegates to Math but this will improve with time. Some functions like exp
@ -251,7 +269,7 @@ The <action> type attribute can be add,update,fix,remove.
<action dev="erans" type="add" issue="MATH-379">
Created "MultidimensionalCounter" class.
</action>
<action dev="erans" type="add" issue="MATH-361">
<action dev="erans" type="update" issue="MATH-361">
Created package "exception" to contain the new exceptions hierarchy.
Created package "exception.util": utilities for the exception classes
(e.g. managing the localization of error messages).
@ -267,9 +285,9 @@ The <action> type attribute can be add,update,fix,remove.
<action dev="erans" type="fix" issue="MATH-376">
Allow multiple optimizations with a default simplex.
</action>
<action dev="erans" type="update" issue="MATH-370">
<action dev="erans" type="add" issue="MATH-370">
Added new "equalsIncludingNaN" methods that have the same semantics as the old "equals" methods.
These are deprecated, and their semantics will be modified (in the next major release) such that
The semantics of the old methods will be modified (in the next major release) such that
NaNs are not considered equal (to be more compliant with IEEE754).
</action>
<action dev="luc" type="fix" issue="MATH-352" >

View File

@ -95,32 +95,32 @@ limitations under the License.
</p>
</subsection>
</section>
<section name="Commons Math 2.1 ">
<section name="Commons Math 2.2 ">
<subsection name="Binaries">
<table>
<tr>
<td><a href="[preferred]/commons/math/binaries/commons-math-2.1.tar.gz">commons-math-2.1.tar.gz</a></td>
<td><a href="http://www.apache.org/dist/commons/math/binaries/commons-math-2.1.tar.gz.md5">md5</a></td>
<td><a href="http://www.apache.org/dist/commons/math/binaries/commons-math-2.1.tar.gz.asc">pgp</a></td>
<td><a href="[preferred]/commons/math/binaries/commons-math-2.2.tar.gz">commons-math-2.2.tar.gz</a></td>
<td><a href="http://www.apache.org/dist/commons/math/binaries/commons-math-2.2.tar.gz.md5">md5</a></td>
<td><a href="http://www.apache.org/dist/commons/math/binaries/commons-math-2.2.tar.gz.asc">pgp</a></td>
</tr>
<tr>
<td><a href="[preferred]/commons/math/binaries/commons-math-2.1.zip">commons-math-2.1.zip</a></td>
<td><a href="http://www.apache.org/dist/commons/math/binaries/commons-math-2.1.zip.md5">md5</a></td>
<td><a href="http://www.apache.org/dist/commons/math/binaries/commons-math-2.1.zip.asc">pgp</a></td>
<td><a href="[preferred]/commons/math/binaries/commons-math-2.2.zip">commons-math-2.2.zip</a></td>
<td><a href="http://www.apache.org/dist/commons/math/binaries/commons-math-2.2.zip.md5">md5</a></td>
<td><a href="http://www.apache.org/dist/commons/math/binaries/commons-math-2.2.zip.asc">pgp</a></td>
</tr>
</table>
</subsection>
<subsection name="Source">
<table>
<tr>
<td><a href="[preferred]/commons/math/source/commons-math-2.1-src.tar.gz">commons-math-2.1-src.tar.gz</a></td>
<td><a href="http://www.apache.org/dist/commons/math/source/commons-math-2.1-src.tar.gz.md5">md5</a></td>
<td><a href="http://www.apache.org/dist/commons/math/source/commons-math-2.1-src.tar.gz.asc">pgp</a></td>
<td><a href="[preferred]/commons/math/source/commons-math-2.2-src.tar.gz">commons-math-2.2-src.tar.gz</a></td>
<td><a href="http://www.apache.org/dist/commons/math/source/commons-math-2.2-src.tar.gz.md5">md5</a></td>
<td><a href="http://www.apache.org/dist/commons/math/source/commons-math-2.2-src.tar.gz.asc">pgp</a></td>
</tr>
<tr>
<td><a href="[preferred]/commons/math/source/commons-math-2.1-src.zip">commons-math-2.1-src.zip</a></td>
<td><a href="http://www.apache.org/dist/commons/math/source/commons-math-2.1-src.zip.md5">md5</a></td>
<td><a href="http://www.apache.org/dist/commons/math/source/commons-math-2.1-src.zip.asc">pgp</a></td>
<td><a href="[preferred]/commons/math/source/commons-math-2.2-src.zip">commons-math-2.2-src.zip</a></td>
<td><a href="http://www.apache.org/dist/commons/math/source/commons-math-2.2-src.zip.md5">md5</a></td>
<td><a href="http://www.apache.org/dist/commons/math/source/commons-math-2.2-src.zip.asc">pgp</a></td>
</tr>
</table>
</subsection>