
              Apache Commons Math 4.0-beta1 RELEASE NOTES

The Apache Commons Math team is pleased to announce the release of commons-math-parent-4.0-beta1

The Apache Commons Math project is a library of lightweight mathematics
    and statistics components addressing common practical problems.

This is a major release that requires source changes in applications.
Lower-level functionality has been split off to new components, often
with bug-fixes, performance enhancements and improved API:
 Commons RNG,
 Commons Numbers,
 Commons Geometry,
 Commons Statistics.
Functionality still within Commons Math has been modularized and
partly refactored.
This is a work-in-progress (help welcome).
Codes for which the refactoring has not been undertaken (or was
deemed incomplete) have been moved to 'legacy' modules.
The minimum version of the Java platform required to compile and use
Commons Math is Java 8.
Users are encouraged to upgrade to this version, and to the new
components listed above (they are now Commons Math's dependencies).
For code now located in the 'commons-math-legacy' module, upgrading
will be a matter of changing the top-level package name:
From 'org.apache.commons.math3' to 'org.apache.commons.math4.legacy'.
Code in the 'commons-math-legacy-core' module comprise classes that
moved from package 'org.apache.commons.math3' and package
'org.apache.commons.math3.util' (e.g. 'MathArrays') to package
'org.apache.commons.math4.legacy.core'.
Notes:
Class 'FastMath' was renamed 'AccurateMath' (now located in package
'org.apache.commons.math4.legacy.core.jdkmath').
Caveat:
Although hundreds of issues have been fixed (see 'git log' and the
reports in the bug-tracking system of all the listed components),
many remain due to the lack of human resources necessary in order
to support the whole codebase (it was one of the main reasons for
creating more focused components).

Changes in this version include:

New features:
o MATH-1648:  "BicubicInterpolator": Provide partial derivatives of interpolating functions. Thanks to Alessandro Moscatelli. 
o MATH-1371:  Add "ElkanKMeansPlusPlusClusterer" clustering algorithm. Thanks to Artem Barger. 
o MATH-1622:  Update class "SimplexOptimizer" (in package "o.a.c.m.legacy.optim.nonlinear.scalar.noderiv")
        to support simulated annealing. 
o MATH-1551:  "Percentile": Partial support for weighted data. Thanks to Allen Yu. 
o MATH-1529:  "AkimaSplineInterpolator": Option to use alternative weights. 
o MATH-1509:  Add "MiniBatchKMeansClusterer" clustering algorithm. Thanks to Chen Tao. 
o MATH-1519:  Add "Calinski-Harabsz" clustering evaluator. Thanks to Chen Tao. 
o MATH-1516:  Interface for ranking a list of clusters. 
o MATH-1477:  "MillerUpdatingRegression": Fixed "ArrayIndexOutOfBounds" exception. Thanks to Chee Sing Lee. 
o MATH-1459:  Create a way to automatically calculate a Jacobian matrix using a differentiator. Thanks to Adrian Porter. 
o MATH-1426:  "DescriptiveStatistics": allow "Double[]" as initializer. Thanks to Karl Richter. 
o MATH-1383:  Dependency toward the "Commons Rng" component. 
o MATH-1015:  Gauss-Laguerre quadrature. Thanks to Thomas Neidhart. 
o MATH-1350:  Improved code coverage (unit tests). Thanks to Rob Tompkins. 
o MATH-1336:  New 64-bits RNG implementations. On 64-bits systems, they are ~35% faster than
        "java.util.Random" for generating "long" or "double" values. They also guarantee
        much better randomness than "Random" (cf. MATH-1327). 
o MATH-1335:  Refactoring of uniform random number generator functionality: new API
        implemented in package "o.a.c.m.rng". 
o MATH-1337:  Adaptor class from new API ("o.a.c.m.rng.RandomSource") to old API
        ("o.a.c.m.random.RandomGenerator"). 
o MATH-1327:  Report on performance and correctness of the new RNG implementations. 
o MATH-1314:  Javadoc of the new RNG API ("o.a.c.m.rng") mentions the "seed problem". 
o MATH-1158:  New interface for sampling from distribution (package "o.a.c.m.distribution"). 
o MATH-1351:  New sampler API for "MultivariateRealDistribution". 
o MATH-1348:  Adaptor for using one of the new RNG implementations where an instance of
        "java.util.Random" is required. 
o MATH-1295:  "FactorialLog": Cache-based computation of the "log factorial" function (implemented
        as an inner class of "CombinatoricsUtils" in package "o.a.c.m.util"). Thanks to Aleksei Dievskii. 
o MATH-1271:  Added divideUnsigned and remainderUnsigned to ArithmeticUtils. Thanks to Qualtagh. 
o           Added a fast implementation of IEEEremainder in FastMath. 
o MATH-945:  Added method "T log10()" to interface "RealFieldElement". 
o MATH-1039:  Added logDensity(double) to RealDistribution and logProbability(int)
        to IntegerDistribution interface. The implementations have already been
        updated in release 3.3. Thanks to Aleksei Dievskii. 

Fixed Bugs:
o MATH-1647:  "HaltonSequenceGenerator": Raise exception when precondition is not met. Thanks to Maksym Bohachov. 
o MATH-1462:  "EmpiricalDistribution": Use constant kernel for bins that contain up to 3 values. 
o MATH-1379:  Fix "LoessInterpolator" (in package "o.a.c.m.legacy.analysis.interpolation"). Thanks to Richard Wilkinson. 
o MATH-1617:  Class "BigReal": Fix equality check. Thanks to Ng Tsz Sum. 
o MATH-1613:  Decrease maximum number of iterations in "SimpsonIntegrator" and
        "TrapezoidIntegrator" (due to the available range of the internal
        counter of function evaluations). 
o MATH-1431:  "EmpiricalDistribution" handles empty bin. Thanks to Artem Onuchin. 
o MATH-1565:  Add context to "OutOfRangeException". Thanks to Randy Strauss. 
o MATH-1558:  "MidPointIntegrator": Fix iterative procedure in order to actually benefit
        from evaluations performed at earlier stages. Thanks to Sam Ritchie. 
o MATH-1555:  "Atan2": Documentation issue. Thanks to Laurent Galluccio. 
o MATH-1549:  "SimplexTableau": Internally "scale down" the problem definition when the
        constraints are defined with large numbers, in order to avoid spurious
        exceptions caused by floating-point accuracy errors. Thanks to Mohammad Rezaei. 
o MATH-1548:  Avoid inefficiencies in computing the standard quality measures of a SOFM. 
o MATH-1537:  Clean-up (typos and unused "import" statements). Thanks to Jin Xu. 
o MATH-1531:  "EmpiricalDistribution": Workaround to avoid spurious exception. 
o MATH-1511:  Issue in site generation and developers documentation. 
o MATH-1518:  Remove code duplication by moving method to class "Cluster". 
o MATH-1388:  Avoid overflow. 
o MATH-1401:  "ClopperPearsonInterval": Missing cases. Thanks to Michele De Stefano. 
o MATH-1463:  "IntegerSequence.incrementor": Throw "NoSuchElementException" from "next" method. 
o MATH-1458:  "SimpsonIntegrator": Fixed iteration. Thanks to Alex Herbert. 
o MATH-1419:  "PolynomialSplineFunction": incorrect usage of exception. Thanks to Hang Park. 
o MATH-1413:  add generics to the Frequency class 
o MATH-1417:  "RRQRDecomposition": bug in method "performHouseholderReflection". Thanks to Jean-Francois Lecomte. 
o MATH-1381:  Fix "BinomialTest": P-value larger than 1. Thanks to Kexin Xie. 
o MATH-1382:  "MultivariateNormalDistribution": performance improvement (by
        removing unnecessary copying). Thanks to Stefan Bunk. 
o MATH-1405:  "KolmogorovSmirnovTest": bug in "fixTies". Thanks to Daniil Finkel. 
o MATH-1376:  "SimplexOptimizer": Wrong value of iteration number was passed to the convergence checker. Thanks to Thomas Weise. 
o MATH-1319:  Major refactoring of package "o.a.c.m.random". 
o MATH-1366:  Removed obsolete RNG API (replaced by classes under "o.a.c.m.rng"). 
o MATH-1340:  Avoid exception swallowing (in class "TestUtils"). 
o MATH-1339:  Avoid redundant object creation. 
o MATH-1356:  "HypergeometricDistribution": Handle special cases that produced NaN. 
o MATH-1343:  "BetaDistribution": Removed unnecessary recomputation. 
o MATH-1124:  "JDKRandomGenerator": Method "nextInt(int)" now throws a "NotStrictlyPositiveException".
        The class now delegates to (rather inherits from) "java.util.Random". 
o MATH-1300:  "AbstractRandomGenerator" and "BitsStreamGenerator": Remove a redundant call
        to the random data provider. Thanks to Rostislav Krasny. 
o MATH-1231:  Lifted unnecessary restriction on constructor's argument of
        "MicrosphereInterpolator" (package "o.a.c.m.analysis.interpolation"). 
o MATH-1230:  The "SimplexSolver" will now throw a "DimensionMismatchException"
        when calling "optimize(...)" with linear constraints whose dimension
        does not match the dimension of the objective function. 
o MATH-1222:  Use Double.isNaN rather than x != x in FastMath. Thanks to Benedikt Ritter. 
o MATH-1143:  Added helper methods to FunctionUtils for univariate and multivariate differentiable functions conversion. 
o MATH-964:  Removed unused package private class PollardRho in package primes. 
o MATH-1221:  Improve performance of "ZipfDistribution" by caching the nth generalized harmonic. 
o MATH-1205:  Methods "evaluate(...)" of class "Variance" changed the internal state
        although it was stated differently in the javadoc. 
o MATH-1191:  Fixed ignored method parameters in QRDecomposition protected methods. 
o MATH-1212:  Changed javadoc as the RandomDataGenerator class does not implement
        an interface anymore (the previous interface has been deprecated in
        3.X and removed in 4.0). 

Changes:
o MATH-1653:  Remove class "CombinatoricsUtils" (in package "o.a.c.m.util").
        Functionality is in "Commons Numbers" combinatorics package. 
o MATH-1640:  Do not change caller's arguments in "KMeansPlusPlusClusterer":
        A negative value for "maxIterations" will raise an exception. 
o MATH-1629:  Throw "ArithmeticException" instead of "MathArithmeticException". 
o MATH-1630:  Introduce "JdkMath" class for redirecting calls to either JDK or CM
        implementations of the functions defined in "java.lang.Math". 
o           Simplify assertions with simpler equivalent. Thanks to Arturo Bernal. 
o MATH-1573:  Remove redundant local variables. Thanks to Arturo Bernal. 
o MATH-1572:  Simplify conditional expressions. Thanks to Arturo Bernal. 
o MATH-1616:  Refactor "EmpiricalDistribution" class (in package "o.a.c.m.legacy.distribution"). 
o MATH-1595:  Clean up "o.a.c.math4.legacy.random" package. 
o MATH-1615:  Remove class "StableRandomGenerator" (in package "o.a.c.m.legacy.random"). 
o MATH-1614:  Refactor "SimplexOptimizer" (in package "o.a.c.m.legacy.optim.nonlinear.scalar.noderiv"). 
o MATH-1582:  Transforms codes moved into a dedicated maven module. 
o MATH-1578:  ANN codes moved into a dedicated maven module. 
o MATH-1575:  Modularization set-up: All codes were moved into a "legacy" maven module.
        WIP: Functionalities should gradually be moved into dedicated modules. 
o MATH-1562:  Add "Automatic-Module-Name" entry to JAR manifest file. Thanks to Frank Ulbricht. 
o MATH-1554:  Remove package "o.a.c.math4.geometry". 
o MATH-1547:  More flexible ranking of SOFM. 
o MATH-1530:  "SplineInterpolator": Improved performance. Thanks to Yassine Damerdji. 
o MATH-1524:  Code reuse. Thanks to Chen Tao. 
o MATH-1522:  Remove generic parameter in clustering evaluator interfaces. Thanks to Chen Tao. 
o MATH-1523:  Abstract class "ClusterEvaluator" replaced by an interface. 
o MATH-1408:  Do not use exceptions for control flow 
o MATH-1362:  Removed deprecated class "Incrementor" (replaced by "IntegerSequence.Incrementor"). 
o MATH-1506:  Removed class "MultidimensionalCounter" (ported to "Commons Numbers"). 
o MATH-1504:  Removed class "BigFraction" (ported to "Commons Numbers"). 
o MATH-1446:  Removed class "Fraction" (ported to "Commons Numbers"). 
o MATH-1469:  Removed most codes in package "o.a.c.m.geometry".
        "Commons Math" now depends on "Commons Geometry". 
o MATH-1481:  "SobolSequenceGenerator": Update data file. Thanks to Théophile Charmont. 
o MATH-1389:  Performance improvement for Array2DRowRealMatrix.getSubMatrix() Thanks to Christoph Dibak. 
o MATH-1377:  "SimplexOptimizer": Slight performance improvement. 
o MATH-1318:  "o.a.c.m.special.Gamma.digamma": Improved performance (through the use of
        the reflection formula for negative arguments). Thanks to Eric Prescott-Gagnon. 
o MATH-1305:  "AbstractRandomGenerator" and "BitsStreamGenerator": Slight performance
        improvement of the "nextBytes" method (particularly when the number of
        requested bytes is a multiple of 4). Thanks to Rostislav Krasny. 
o MATH-853:  "MathRuntimeException" is now the base class for all commons-math
        exceptions (except for "NullArgumentException" which extends
        "NullPointerException"). 
o MATH-1205:  The abstract class "AbstractStorelessUnivariateStatistic" does not
        extend anymore from "AbstractUnivariateStatistic". 
o MATH-1205:  Default implementation of
        "AbstractStorelessUnivariateStatistic#equals(Object)"
        will only return true if both instances have the same type. Previously
        different statistics were considered to be equal if their current state
        happened to be equal. 
o MATH-1205:  Default implementations of "AbstractStorelessUnivariateStatistic#evaluate(...)"
        do not alter the internal state anymore. Instead a temporary copy of
        the statistic is created for evaluation purposes. 
o MATH-1206:  Added new API methods in "LeastSquaresProblem.Evaluation" (package
        "o.a.c.m.fitting.leastsquares"). 
o MATH-1210:  "QRDecomposition": include information about the condition that
        triggers a "SingularMatrixException". 
o MATH-757:  Removed broken synchronization support in "ResizableDoubleArray". 
o MATH-869:  "SpearmansCorrelation" will now throw an "MathIllegalArgumentException"
        if provided with a "NaturalRanking" instance that uses "REMOVED" as "NaNStrategy". 
o MATH-869:  "NullArgumentException" extends now "java.lang.NullPointerException"
        instead of "MathIllegalArgumentException". 
o MATH-839:  Renamed "cumulativeProbability(double, double)" to "probability(double, double)"
        in "IntegerDistribution" and "RealDistribution". Thanks to Gilles Sadowski. 
o MATH-1155:  WELL type pseudo-random number generators have been refactored:
        the cached indirection index tables per instance are now stored
        in a static instance. This reduces the initialization cost when
        creating a new instance. 
o MATH-825:  Method "LaguerreSolver#laguerre(...)" has been made private. Thanks to Gilles Sadowski. 
o MATH-760:  Field "windowSize" in "DescriptiveStatistics" has been made private. Thanks to sebb. 

Removed:
o MATH-1205:  Removed methods "test(...)" from "AbstractUnivariateStatistic".
        The already existing methods "MathArrays#verifyValues(...)" shall
        be used instead. 
o MATH-1050:  Removed "ArithmeticUtils#pow(int, long)" and "ArithmeticUtils#pow(long, long)". 

For complete information on Apache Commons Math, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Commons Math website:

http://commons.apache.org/proper/commons-math/


