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/