
              Apache Commons Math 4.0-beta1 RELEASE NOTES

The Apache Commons Math team is pleased to announce the release of commons-math4-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/


