diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 000000000..e9223ec4f --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,2019 @@ +# Changelog + +## [Unreleased] + +## [3.4.0] + +Released on August 18, 2021 + +**Notice:** 3.4.x will be the last major release series of Eigen that will support c++03. + +### Breaking changes + +* Using float or double for indexing matrices, vectors and arrays will now fail to compile +* **Behavioral change:** `Transform::computeRotationScaling()` and `Transform::computeScalingRotation()` are now more continuous across degeneracies (see !349). + +### New features + +* Add c++11 **`initializer_list` constructors** to Matrix and Array [\[doc\]](http://eigen.tuxfamily.org/dox-devel/group__TutorialMatrixClass.html#title3) +* Add STL-compatible **iterators** for dense expressions [\[doc\]](http://eigen.tuxfamily.org/dox-devel/group__TutorialSTL.html). +* New versatile API for sub-matrices, **slices**, and **indexed views** [\[doc\]](http://eigen.tuxfamily.org/dox-devel/group__TutorialSlicingIndexing.html). +* Add C++11 **template aliases** for Matrix, Vector, and Array of common sizes, including generic `Vector` and `RowVector` aliases [\[doc\]](http://eigen.tuxfamily.org/dox-devel/group__matrixtypedefs.html). +* New support for `bfloat16`. + +### New backends + +* **Arm SVE:** fixed-length [Scalable Vector Extensions](https://developer.arm.com/Architectures/Scalable%20Vector%20Extensions) vectors for `uint32_t` and `float` are available. +* **MIPS MSA:**: [MIPS SIMD Architecture (MSA)](https://www.mips.com/products/architectures/ase/simd/) +* **AMD ROCm/HIP:** generic GPU backend that unifies support for [NVIDIA/CUDA](https://developer.nvidia.com/cuda-toolkit) and [AMD/HIP](https://rocmdocs.amd.com/en/latest/). +* **Power 10 MMA:** initial support for [Power 10 matrix multiplication assist instructions](https://arxiv.org/pdf/2104.03142.pdf) for float32 and float64, real and complex. + +### Improvements + +* Eigen now uses the c++11 **alignas** keyword for static alignment. Users targeting C++17 only and recent compilers (e.g., GCC>=7, clang>=5, MSVC>=19.12) will thus be able to completely forget about all [issues](http://eigen.tuxfamily.org/dox-devel/group__TopicUnalignedArrayAssert.html) related to static alignment, including `EIGEN_MAKE_ALIGNED_OPERATOR_NEW`. +* Various performance improvements for products and Eigen's GEBP and GEMV kernels have been implemented: + * By using half and quater-packets the performance of matrix multiplications of small to medium sized matrices has been improved + * Eigen's GEMM now falls back to GEMV if it detects that a matrix is a run-time vector + * The performance of matrix products using Arm Neon has been drastically improved (up to 20%) + * Performance of many special cases of matrix products has been improved +* Large speed up from blocked algorithm for `transposeInPlace`. +* Speed up misc. operations by propagating compile-time sizes (col/row-wise reverse, PartialPivLU, and others) +* Faster specialized SIMD kernels for small fixed-size inverse, LU decomposition, and determinant. +* Improved or added vectorization of partial or slice reductions along the outer-dimension, for instance: `colmajor_mat.rowwise().mean()`. + +### Elementwise math functions + +* Many functions are now implemented and vectorized in generic (backend-agnostic) form. +* Many improvements to correctness, accuracy, and compatibility with c++ standard library. + * Much improved implementation of `ldexp`. + * Misc. fixes for corner cases, NaN/Inf inputs and singular points of many functions. + * New implementation of the Payne-Hanek for argument reduction algorithm for `sin` and `cos` with huge arguments. + * New faithfully rounded algorithm for `pow(x,y)`. +* Speedups from (new or improved) vectorized versions of `pow`, `log`, `sin`, `cos`, `arg`, `pow`, `log2`, complex `sqrt`, `erf`, `expm1`, `logp1`, `logistic`, `rint`, `gamma` and `bessel` functions, and more. +* Improved special function support (Bessel and gamma functions, `ndtri`, `erfc`, inverse hyperbolic functions and more) +* New elementwise functions for `absolute_difference`, `rint`. + +### Dense matrix decompositions and solvers + +* All dense linear solvers (i.e., Cholesky, *LU, *QR, CompleteOrthogonalDecomposition, *SVD) now inherit SolverBase and thus support `.transpose()`, `.adjoint()` and `.solve()` APIs. +* SVD implementations now have an `info()` method for checking convergence. +* Most decompositions now fail quickly when invalid inputs are detected. +* Optimized the product of a `HouseholderSequence` with the identity, as well as the evaluation of a `HouseholderSequence` to a dense matrix using faster blocked product. +* Fixed aliasing issues with in-place small matrix inversions. +* Fixed several edge-cases with empty or zero inputs. + +### Sparse matrix support, decompositions and solvers + +* Enabled assignment and addition with diagonal matrix expressions. +* Support added for SuiteSparse KLU routines via the `KLUSupport` module. SuiteSparse must be installed to use this module. +* `SparseCholesky` now works with row-major matrices. +* Various bug fixes and performance improvements. + +### Type support + +* Improved support for `half` + * Native support added for ARM `__fp16`, CUDA/HIP `__half`, and `F16C` conversion intrinsics. + * Better vectorization support added across all backends. +* Improved bool support + * Partial vectorization support added for boolean operations. + * Significantly improved performance (x25) for logical operations with `Matrix` or `Tensor` of `bool`. +* Improved support for custom types + * More custom types work out-of-the-box (see #2201). + +### Backend-specific improvements + +* **Arm NEON** + * Now provides vectorization for `uint64_t`, `int64_t`, `uint32_t`, `int16_t`, `uint16_t`, `int16_t`, `int8_t`, and `uint8_t` + * Emulates `bfloat16` support when using `Eigen::bfloat16` + * Supports emulated and native `float16` when using `Eigen::half` +* **SSE/AVX/AVX512** + * General performance improvements and bugfixes. + * Enabled AVX512 instructions by default if available. + * New `std::complex`, `half`, and `bfloat16` vectorization support added. + * Many missing packet functions added. +* **Altivec/Power** + * General performance improvement and bugfixes. + * Enhanced vectorization of real and complex scalars. + * Changes to the `gebp_kernel` specific to Altivec, using VSX implementation of the MMA instructions that gain speed improvements up to 4x for matrix-matrix products. + * Dynamic dispatch for GCC greater than 10 enabling selection of MMA or VSX instructions based on `__builtin_cpu_supports`. +* **GPU (CUDA and HIP)** + * Several optimized math functions added, better support for `std::complex`. + * Added option to disable CUDA entirely by defining `EIGEN_NO_CUDA`. + * Many more functions can now be used in device code (e.g. comparisons, small matrix inversion). +* **ZVector** + * Vectorized `float` and `std::complex` support added. + * Added z14 support. +* **SYCL** + * Redesigned SYCL implementation for use with the [https://eigen.tuxfamily.org/dox/unsupported/eigen_tensors.html Tensor] module, which can be enabled by defining `EIGEN_USE_SYCL`. + * New generic memory model introduced used by `TensorDeviceSycl`. + * Better integration with OpenCL devices. + * Added many math function specializations. + +### Miscellaneous API Changes + +* New `setConstant(...)` methods for preserving one dimension of a matrix by passing in `NoChange`. +* Added `setUnit(Index i)` for vectors that sets the ''i'' th coefficient to one and all others to zero. +* Added `transpose()`, `adjoint()`, `conjugate()` methods to `SelfAdjointView`. +* Added `shiftLeft()` and `shiftRight()` coefficient-wise arithmetic shift functions to Arrays. +* Enabled adding and subtracting of diagonal expressions. +* Allow user-defined default cache sizes via defining `EIGEN_DEFAULT_L1_CACHE_SIZE`, ..., `EIGEN_DEFAULT_L3_CACHE_SIZE`. +* Added `EIGEN_ALIGNOF(X)` macro for determining alignment of a provided variable. +* Allow plugins for `VectorwiseOp` by defining a file `EIGEN_VECTORWISEOP_PLUGIN` (e.g. `-DEIGEN_VECTORWISEOP_PLUGIN=my_vectorwise_op_plugins.h`). +* Allow disabling of IO operations by defining `EIGEN_NO_IO`. + +### Improvement to NaN propagation + +* Improvements to NaN correctness for elementwise functions. +* New `NaNPropagation` template argument to control whether NaNs are propagated or suppressed in elementwise `min/max` and corresponding reductions on `Array`, `Matrix`, and `Tensor`. + +### New low-latency non-blocking ThreadPool module +* Originally a part of the Tensor module, `Eigen::ThreadPool` is now separate and more portable, and forms the basis for multi-threading in TensorFlow, for example. + +### Changes to Tensor module + +* Support for c++03 was officially dropped in Tensor module, since most of the code was written in c++11 anyway. This will prevent building the code for CUDA with older version of `nvcc`. +* Performance optimizations of Tensor contraction + * Speed up "outer-product-like" operations by parallelizing over the contraction dimension, using thread_local buffers and recursive work splitting. + * Improved threading heuristics. + * Support for fusing element-wise operations into contraction during evaluation. +* Performance optimizations of other Tensor operator + * Speedups from improved vectorization, block evaluation, and multi-threading for most operators. + * Significant speedup to broadcasting. + * Reduction of index computation overhead, e.g. using fast divisors in TensorGenerator, squeezing dimensions in TensorPadding. +* Complete rewrite of the block (tiling) evaluation framework for tensor expressions lead to significant speedups and reduced number of memory allocations. +* Added new API for asynchronous evaluation of tensor expressions. +* Misc. minor behavior changes & fixes: + * Fix const correctness for TensorMap. + * Modify tensor argmin/argmax to always return first occurrence. + * More numerically stable tree reduction. + * Improve randomness of the tensor random generator. + * Update the padding computation for `PADDING_SAME` to be consistent with TensorFlow. + * Support static dimensions (aka IndexList) in resizing/reshape/broadcast. + * Improved accuracy of Tensor FFT. + +### Changes to sparse iterative solvers +* Added new IDRS iterative linear solver. + +### Other relevant changes + +* Eigen now provides an option to test with an external BLAS library + +See the [announcement](https://www.eigen.tuxfamily.org/index.php?title=3.4) for more details. + +## [3.3.9] + +Released on December 4, 2020. + +Changes since 3.3.8: + +* Commit 4e5385c90: Introduce rendering Doxygen math formulas with MathJax and the option `EIGEN_DOC_USE_MATHJAX` to control this. +* #1746: Removed implementation of standard copy-constructor and standard copy-assign-operator from PermutationMatrix and Transpositions to allow malloc-less `std::move`. +* #2036: Make sure the find_standard_math_library_test_program compiles and doesn't optimize away functions we try to test for. +* #2046: Rename test/array.cpp to test/array_cwise.cpp to fix an issue with the C++ standard library header "array" +* #2040: Fix an issue in test/ctorleak that occured when disabling exceptions. +* #2011: Remove error counting in OpenMP parallel section in Eigen's GEMM parallelizing logic. +* #2012: Define coeff-wise binary array operators for base class to fix an issue when using Eigen with C++20 +* Commit bfdd4a990: Fix an issue with IntelĀ® MKL PARDISO support. + +## [3.3.8] + +Released on October 5, 2020. + +Changes since 3.3.7: + +* General bug fixes + * #1995: Fix a failure in the GEBP kernel when using small L1 cache sizes, OpenMP and FMA. + * #1990: Make CMake accept installation paths relative to `CMAKE_INSTALL_PREFIX`. + * #1974: Fix issue when reserving an empty sparse matrix + * #1823: Fix incorrect use of `std::abs` + * #1788: Fix rule-of-three violations inside the stable modules. This fixes deprecated-copy warnings when compiling with GCC>=9 Also protect some additional Base-constructors from getting called by user code code (#1587) + * #1796: Make matrix squareroot usable for Map and Ref types + * #1281: Fix AutoDiffScalar's make_coherent for nested expression of constant ADs. + * #1761: Fall back `is_integral` to `std::is_integral` in c++11 and fix `internal::is_integral` with MSVC 2013 and older. + * #1741: Fix `self_adjoint*matrix`, `triangular*matrix`, and `triangular^1*matrix` with a destination having a non-trivial inner-stride + * #1741: Fix SelfAdjointView::rankUpdate and product to triangular part for destination with non-trivial inner stride + * #1741: Fix `C.noalias() = A*C;` with `C.innerStride()!=1` + * #1695: Fix a numerical robustness issue in BDCSVD + * #1692: Enable enum as sizes of Matrix and Array + * #1689: Fix used-but-marked-unused warning + * #1679: Avoid possible division by 0 in complex-schur + * #1676: Fix C++17 template deduction in DenseBase + * #1669: Fix PartialPivLU/inverse with zero-sized matrices. + * #1557: Fix RealSchur and EigenSolver for matrices with only zeros on the diagonal. +* Performance related fixes + * #1562: Optimize evaluation of small products of the form s*A*B by rewriting them as: s*(A.lazyProduct(B)) to save a costly temporary. Measured speedup from 2x to 5x... + * Commit 165db26dc and 8ee2e10af: Fix performance issue with SimplicialLDLT for complexes coefficients +* Misc commits + * Commit 5f1082d0b: Fix `QuaternionBase::cast` for quaternion map and wrapper. + * Commit a153dbae9: Fix case issue with Lapack unit tests. + * Commit 3d7e2a1f3: Fix possible conflict with an externally defined "real" type when using gcc-5. + * Commit 1760432f6: Provide `numext::[u]int{32,64}_t`. + * Commit 3d18879fc: Initialize isometric transforms like affine transforms. + * Commit 160c0a340: Change typedefs from private to protected to fix MSVC compilation. + * Commit 3cf273591: Fix compilation of FFTW unit test. + * Commit 6abc9e537: Fix compilation of BLAS backend and frontend. + * Commit 47e2f8a42: Fix real/imag namespace conflict. + * Commit 71d0402e3: Avoid throwing in destructors. + * Commit 0dd9643ad: Fix precision issue in `SelfAdjointEigenSolver.h` + * Commit 6ed74ac97: Make `digits10()` return an integer. + * Commit 841d844f9: Use pade for matrix exponential also for complex values. + * Commit 4387298e8: Cast Index to RealScalar in SVDBase to fix an issue when RealScalar is not implicitly convertible to Index. + * Commit fe8cd812b: Provide `EIGEN_HAS_C99_MATH` when using MSVC. + * Commit 7c4208450: Various fixes in polynomial solver and its unit tests. + * Commit e777674a8 and 4415d4e2d: Extend polynomial solver unit tests to complexes. + * Commit 222ce4b49: Automatically switch between EigenSolver and ComplexEigenSolver, and fix a few Real versus Scalar issues. + * Commit 7b93328ba: Enable construction of `Ref` from a runtime vector. + * Commit c28ba89fe: Fix a problem of old gcc versions having problems with recursive #pragma GCC diagnostic push/pop. + * Commit 210d510a9: Fix compilation with expression template scalar type. + * Commit efd72cddc: Backport AVX512 implementation to 3.3. + * Commit 5e484fa11: Fix StlDeque compilation issue with GCC 10. + * Commit a796be81a: Avoid false-positive test results in non-linear optimization tests + * Commit 9f202c6f1: Fix undefined behaviour caused by uncaught exceptions in OMP section of parallel GEBP kernel. + * Commit 4707c3aa8: Fix a bug with half-precision floats on GPUs. +* Fixed warnings + * Commit 14db78c53: Fix some maybe-uninitialized warnings in AmbiVector.h and test bdcsvd. + * Commit f1b1f13d3: silent cmake warnings in Lapack CMakeLists.txt + * Commit 8fb28db12: Rename variable which shadows class name in Polynomials module. + * Commit f1c12d8ff: Workaround gcc's `alloc-size-larger-than=` warning in DenseStorage.h + * Commit 6870a39fe: Hide some unused variable warnings in g++8.1 in Tensor contraction mapper. + * Commit bb9981e24: Fix gcc 8.1 warning: "maybe use uninitialized" in std tests + * Commit eea99eb4e: Fix always true warning with gcc 4.7in test numext. + * Commit 65a6d4151: Fix nonnull-compare warning in test geo_alignedbox. + * Commit 74a0c08d7: Disable ignoring attributes warning in vectorization logic test. + * Commit 6c4d57dc9: Fix a gcc7 warning about bool * bool in abs2 default implementation. + * Commit 89a86ed42: Fix a warning in SparseSelfAdjointView about a branch statement always evaluation to false. + +## [3.3.8-rc1] + +Released on September 14, 2020. + +Changes since 3.3.7: + +* General bug fixes + * #1974: Fix issue when reserving an empty sparse matrix + * #1823: Fix incorrect use of `std::abs` + * #1788: Fix rule-of-three violations inside the stable modules. This fixes deprecated-copy warnings when compiling with GCC>=9 Also protect some additional Base-constructors from getting called by user code code (#1587) + * #1796: Make matrix squareroot usable for Map and Ref types + * #1281: Fix AutoDiffScalar's `make_coherent` for nested expression of constant ADs. + * #1761: Fall back `is_integral` to `std::is_integral` in c++11 and fix `internal::is_integral` with MSVC 2013 and older. + * #1741: Fix `self_adjoint*matrix`, `triangular*matrix`, and `triangular^1*matrix` with a destination having a non-trivial inner-stride + * #1741: Fix SelfAdjointView::rankUpdate and product to triangular part for destination with non-trivial inner stride + * #1741: Fix `C.noalias() = A*C;` with `C.innerStride()!=1` + * #1695: Fix a numerical robustness issue in BDCSVD + * #1692: Enable enum as sizes of Matrix and Array + * #1689: Fix used-but-marked-unused warning + * #1679: Avoid possible division by 0 in complex-schur + * #1676: Fix C++17 template deduction in DenseBase + * #1669: Fix PartialPivLU/inverse with zero-sized matrices. + * #1557: Fix RealSchur and EigenSolver for matrices with only zeros on the diagonal. +* Performance related fixes + * #1562: Optimize evaluation of small products of the form s*A*B by rewriting them as: s*(A.lazyProduct(B)) to save a costly temporary. Measured speedup from 2x to 5x... + * Commit 165db26dc and 8ee2e10af: Fix performance issue with SimplicialLDLT for complexes coefficients +* Misc commits + * Commit 5f1082d0b: Fix `QuaternionBase::cast` for quaternion map and wrapper. + * Commit a153dbae9: Fix case issue with Lapack unit tests. + * Commit 3d7e2a1f3: Fix possible conflict with an externally defined "real" type when using gcc-5. + * Commit 1760432f6: Provide `numext::[u]int{32,64}_t`. + * Commit 3d18879fc: Initialize isometric transforms like affine transforms. + * Commit 160c0a340: Change typedefs from private to protected to fix MSVC compilation. + * Commit 3cf273591: Fix compilation of FFTW unit test. + * Commit 6abc9e537: Fix compilation of BLAS backend and frontend. + * Commit 47e2f8a42: Fix real/imag namespace conflict. + * Commit 71d0402e3: Avoid throwing in destructors. + * Commit 0dd9643ad: Fix precision issue in SelfAdjointEigenSolver.h + * Commit 6ed74ac97: Make digits10() return an integer. + * Commit 841d844f9: Use pade for matrix exponential also for complex values. + * Commit 4387298e8: Cast Index to RealScalar in SVDBase to fix an issue when RealScalar is not implicitly convertible to Index. + * Commit fe8cd812b: Provide `EIGEN_HAS_C99_MATH` when using MSVC. + * Commit 7c4208450: Various fixes in polynomial solver and its unit tests. + * Commit e777674a8 and 4415d4e2d: Extend polynomial solver unit tests to complexes. + * Commit 222ce4b49: Automatically switch between EigenSolver and ComplexEigenSolver, and fix a few Real versus Scalar issues. + * Commit 5110d803e: Change license from LGPL to MPL2 with agreement from David Harmon. (grafted from 2df4f0024666a9085fe47f14e2290bd61676dbbd ) + * Commit 7b93328ba: Enable construction of `Ref` from a runtime vector. + * Commit c28ba89fe: Fix a problem of old gcc versions having problems with recursive #pragma GCC diagnostic push/pop. + * Commit 210d510a9: Fix compilation with expression template scalar type. +* Fixed warnings + * Commit 14db78c53: Fix some maybe-uninitialized warnings in AmbiVector.h and test bdcsvd. + * Commit f1b1f13d3: silent cmake warnings in Lapack CMakeLists.txt + * Commit 8fb28db12: Rename variable which shadows class name in Polynomials module. + * Commit f1c12d8ff: Workaround gcc's `alloc-size-larger-than=` warning in DenseStorage.h + * Commit 6870a39fe: Hide some unused variable warnings in g++8.1 in Tensor contraction mapper. + * Commit bb9981e24: Fix gcc 8.1 warning: "maybe use uninitialized" in std tests + * Commit eea99eb4e: Fix always true warning with gcc 4.7in test `numext`. + * Commit 65a6d4151: Fix nonnull-compare warning in test `geo_alignedbox`. + * Commit 74a0c08d7: Disable ignoring attributes warning in vectorization logic test. + * Commit 6c4d57dc9: Fix a gcc7 warning about bool * bool in abs2 default implementation. + * Commit efd72cddc: Backport AVX512 implementation to 3.3. + * Commit 5e484fa11: Fix StlDeque compilation issue with GCC 10. + * Commit 89a86ed42: Fix a warning in SparseSelfAdjointView about a branch statement always evaluation to false. + * Commit dd6de618: Fix a bug with half-precision floats on GPUs. + +## [3.3.7] + +Released on December 11, 2018. + +Changes since 3.3.6: + +* #1643: Fix compilation with GCC>=6 and compiler optimization turned off. + +## [3.3.6] + +Released on December 10, 2018. + +Changes since 3.3.5: + +* #1617: Fix triangular solve crashing for empty matrix. +* #785: Make dense Cholesky decomposition work for empty matrices. +* #1634: Remove double copy in move-ctor of non movable Matrix/Array. +* Changeset 588e1eb34eff: Workaround weird MSVC bug. +* #1637 Workaround performance regression in matrix products with gcc>=6 and clang>=6.0. +* Changeset bf0f100339c1: Fix some implicit 0 to Scalar conversions. +* #1605: Workaround ABI issue with vector types (aka `__m128`) versus scalar types (aka float). +* Changeset d1421c479baa: Fix for gcc<4.6 regarding usage of #pragma GCC diagnostic push/pop. +* Changeset c20b83b9d736: Fix conjugate-gradient for right-hand-sides with a very small magnitude. +* Changeset 281a877a3bf7: Fix product of empty arrays (returned 0 instead of 1). +* #1590: Fix collision with some system headers defining the macro FP32. +* #1584: Fix possible undefined behavior in random generation. +* Changeset d632d18db8ca: Fix fallback to BLAS for rankUpdate. +* Fixes for NVCC 9. +* Fix matrix-market IO. +* Various fixes in the doc. +* Various minor warning fixes/workarounds. + +## [3.3.5] + +Released on July 23, 2018. + +Changes since 3.3.4: + +* General bug fixes: + * Fix GeneralizedEigenSolver when requesting for eigenvalues only (0d15855abb30) + * #1560 fix product with a 1x1 diagonal matrix (90d7654f4a59) + * #1543: fix linear indexing in generic block evaluation + * Fix compilation of product with inverse transpositions (e.g., `mat * Transpositions().inverse()`) (14a13748d761) + * #1509: fix `computeInverseWithCheck` for complexes (8be258ef0b6d) + * #1521: avoid signalling `NaN` in hypot and make it std::complex<> friendly (a9c06b854991). + * #1517: fix triangular product with unit diagonal and nested scaling factor: `(s*A).triangularView()*B` (a546d43bdd4f) + * Fix compilation of stableNorm for some odd expressions as input (499e982b9281) + * #1485: fix linking issue of non template functions (ae28c2aaeeda) + * Fix overflow issues in BDCSVD (92060f82e1de) + * #1468: add missing `std::` to `memcpy` (4565282592ae) + * #1453: fix Map with non-default inner-stride but no outer-stride (af00212cf3a4) + * Fix mixing types in sparse matrix products (7e5fcd0008bd) + * #1544: Generate correct Q matrix in complex case (c0c410b508a1) + * #1461: fix compilation of `Map::x()` (69652a06967d) + +* Backends: + * Fix MKL backend for symmetric eigenvalues on row-major matrices (4726d6a24f69) + * #1527: fix support for MKL's VML (972424860545) + * Fix incorrect ldvt in LAPACKE call from JacobiSVD (88c4604601b9) + * Fix support for MKL's BLAS when using `MKL_DIRECT_CALL` (205731b87e19, b88c70c6ced7, 46e2367262e1) + * Use MKL's lapacke.h header when using MKL (19bc9df6b726) + +* Diagnostics: + * #1516: add assertion for out-of-range diagonal index in `MatrixBase::diagonal(i)` (783d38b3c78c) + * Add static assertion for fixed sizes `Ref<>` (e1203d5ceb8e) + * Add static assertion on selfadjoint-view's UpLo parameter. (b84db94c677e, 0ffe8a819801) + * #1479: fix failure detection in LDLT (67719139abc3) + +* Compiler support: + * #1555: compilation fix with XLC + * Workaround MSVC 2013 ambiguous calls (1c7b59b0b5f4) + * Adds missing `EIGEN_STRONG_INLINE` to help MSVC properly inlining small vector calculations (1ba3f10b91f2) + * Several minor warning fixes: 3c87fc0f1042, ad6bcf0e8efc, "used uninitialized" (20efc44c5500), Wint-in-bool-context (131da2cbc695, b4f969795d1b) + * #1428: make NEON vectorization compilable by MSVC. (* 3d1b3dbe5927, 4e1b7350182a) + * Fix compilation and SSE support with PGI compiler (faabf000855d 90d33b09040f) + * #1555: compilation fix with XLC (23eb37691f14) + * #1520: workaround some `-Wfloat-equal` warnings by calling `std::equal_to` (7d9a9456ed7c) + * Make the TensorStorage class compile with clang 3.9 (eff7001e1f0a) + * Misc: some old compiler fixes (493691b29be1) + * Fix MSVC warning C4290: C++ exception specification ignored except to indicate a function is not `__declspec(nothrow)` (524918622506) + +* Architecture support: + * Several AVX512 fixes for `log`, `sqrt`, `rsqrt`, non `AVX512ER` CPUs, `apply_rotation_in_the_plane` b64275e912ba cab3d626a59e 7ce234652ab9, d89b9a754371. + * AltiVec fixes: 9450038e380d + * NEON fixes: const-cast (e8a69835ccda), compilation of Jacobi rotations (c06cfd545b15,#1436). + * Changeset d0658cc9d4a2: Define `pcast<>` for SSE types even when AVX is enabled. (otherwise float are silently reinterpreted as int instead of being converted) + * #1494: makes `pmin`/`pmax` behave on Altivec/VSX as on x86 regarding NaNs (d0af83f82b19) + +* Documentation: + * Update manual pages regarding BDCSVD (#1538) + * Add aliasing in common pitfaffs (2a5a8408fdc5) + * Update `aligned_allocator` (21e03aef9f2b) + * #1456: add perf recommendation for LLT and storage format (c8c154ebf130, 9aef1e23dbe0) + * #1455: Cholesky module depends on Jacobi for rank-updates (2e6e26b851a8) + * #1458: fix documentation of LLT and LDLT `info()` method (2a4cf4f473dd) + * Warn about constness in `LLT::solveInPlace` (518f97b69bdf) + * Fix lazyness of `operator*` with CUDA (c4dbb556bd36) + * #336: improve doc for `PlainObjectBase::Map` (13dc446545fe) + +* Other general improvements: + * Enable linear indexing in generic block evaluation (31537598bf83, 5967bc3c2cdb, #1543). + * Fix packet and alignment propagation logic of `Block` expressions. In particular, `(A+B).col(j)` now preserve vectorisation. (b323cc9c2c7f) + * Several fixes regarding custom scalar type support: hypot (f8d6c791791d), boost-multiprec (acb8ef9b2478), literal casts (6bbd97f17534, 39f65d65894f), + * LLT: avoid making a copy when decomposing in place (2f7e28920f4e), const the arg to `solveInPlace()` to allow passing `.transpose()`, `.block()`, etc. (c31c0090e998). + * Add possibility to overwrite `EIGEN_STRONG_INLINE` (7094bbdf3f4d) + * #1528: use `numeric_limits::min()` instead of `1/highest()` that might underflow (dd823c64ade7) + * #1532: disable `stl::*_negate` in C++17 (they are deprecated) (88e9452099d5) + * Add C++11 `max_digits10` for half (faf74dde8ed1) + * Make sparse QR result sizes consistent with dense QR (4638bc4d0f96) + +* Unsupported/unit-tests/cmake/unvisible internals/etc. + * #1484: restore deleted line for 128 bits long doubles, and improve dispatching logic. (dffc0f957f19) + * #1462: remove all occurences of the deprecated `__CUDACC_VER__` macro by introducing `EIGEN_CUDACC_VER` (a201b8438d36) + * Changeset 2722aa8eb93f: Fix oversharding bug in parallelFor. + * Changeset ea1db80eab46: commit 45e9c9996da790b55ed9c4b0dfeae49492ac5c46 (HEAD -> memory_fix) + * Changeset 350957be012c: Fix int versus Index + * Changeset 424038431015: fix linking issue + * Changeset 3f938790b7e0: Fix short vs long + * Changeset ba14974d054a: Fix cmake scripts with no fortran compiler + * Changeset 2ac088501976: add cmake-option to enable/disable creation of tests + * Changeset 56996c54158b: Use col method for column-major matrix + * Changeset 762373ca9793: #1449: fix `redux_3` unit test + * Changeset eda96fd2fa30: Fix uninitialized output argument. + * Changeset 75a12dff8ca4: Handle min/max/inf/etc issue in `cuda_fp16.h` directly in `test/main.h` + * Changeset 568614bf79b8: Add tests for sparseQR results (value and size) covering bugs 1522 and 1544 + * Changeset 12c9ece47d14: `SelfAdjointView<...,Mode>` causes a static assert since commit c73a77e47db8 + * Changeset 899fd2ef704f: weird compilation issue in `mapped_matrix.cpp` + +## [3.3.4] + +Released on June 15, 2017. + +Changes since 3.3.3: + +* General: + * Improve speed of Jacobi rotation when mixing complex and real types. + * #1405: enable StrictlyLower/StrictlyUpper triangularView as the destination of matrix*matrix products. + * UmfPack support: enable changes in the control settings and add report functions. + * #1423: fix LSCG's Jacobi preconditioner for row-major matrices. + * #1424: fix compilation issue with abs and unsigned integers as scalar type. + * #1410: fix lvalue propagation of Array/Matrix-Wrapper with a const nested expression. + * #1403: fix several implicit scalar type conversion making SVD decompositions compatible with ceres::Jet. + * Fix some real-to-scalar-to-real useless conversions in `ColPivHouseholderQR`. +* Regressions: + * Fix `dense * sparse_selfadjoint_view` product. + * #1417: make LinSpace compatible with std::complex. + * #1400: fix `stableNorm` alignment issue with `EIGEN_DONT_ALIGN_STATICALLY`. + * #1411: fix alignment issue in `Quaternion`. + * Fix compilation of operations between nested Arrays. + * #1435: fix aliasing issue in expressions like: `A = C - B*A`. +* Others: + * Fix compilation with gcc 4.3 and ARM NEON. + * Fix prefetches on ARM64 and ARM32. + * Fix out-of-bounds check in COLAMD. + * Few minor fixes regarding nvcc/CUDA support, including #1396. + * Improve cmake scripts for Pastix and BLAS detection. + * #1401: fix compilation of `cond ? x : -x` with `x` an `AutoDiffScalar` + * Fix compilation of matrix log with Map as input. + * Add specializations of `std::numeric_limits` for `Eigen::half` and and `AutoDiffScalar` + * Fix compilation of streaming nested Array, i.e., `std::cout << Array>` + +## [3.3.3] + +Released on February 21, 2017. + +Changes since 3.3.2: + +* General: + * Improve multi-threading heuristic for matrix products with a small number of columns. + * #1395: fix compilation of JacobiSVD for vectors type. + * Fix pruning in `(sparse*sparse).pruned()` when the result is nearly dense. + * #1382: move using `std::size_t`/`ptrdiff_t` to Eigen's namespace. + * Fix compilation and inlining when using clang-cl with visual studio. + * #1392: fix `#include ` with mpl2-only. +* Regressions: + * #1379: fix compilation in `sparse*diagonal*dense` with OpenMP. + * #1373: add missing assertion on size mismatch with compound assignment operators (e.g., mat += mat.col(j)) + * #1375: fix cmake installation with cmake 2.8. + * #1383: fix LinSpaced with integers for `LinPspaced(n,0,n-1)` with `n==0` or the `high(sparse*sparse)`. +* Others: + * Fix ARM NEON wrapper for 16 byte systems. + * #1391: include IO.h before DenseBase to enable its usage in DenseBase plugins. + * #1389: fix std containers support with MSVC and AVX. + * #1380: fix matrix exponential with `Map<>`. + * #1369: fix type mismatch warning with OpenMP. + * Fix usage of `size_t` instead of Index in sefl-adjoint `matrix * vector` + * #1378: fix doc (`DiagonalIndex` vs `Diagonal`). + +## [3.3.2] + +Released on January 18, 2017. + +Changes since 3.3.1: + +* General: + * Add `transpose`, `adjoint`, `conjugate` methods to `SelfAdjointView` (useful to write generic code) + * Make sure that `HyperPlane::transform` maintains a unit normal vector in the Affine case. + * Several documentation improvements, including: several doxygen workarounds, #1336, #1370, StorageIndex, selfadjointView, sparseView(), sparse triangular solve, AsciiQuickReference.txt, ... +* Regressions: + * #1358: fix compilation of `sparse += sparse.selfadjointView()`. + * #1359: fix compilation of `sparse /=scalar`, `sparse *=scalar`, and `col_major_sparse.row() *= scalar`. + * #1361: fix compilation of mat=perm.inverse() + * Some fixes in sparse coeff-wise binary operations: add missing `.outer()` member to iterators, and properly report storage order. + * Fix aliasing issue in code as `A.triangularView() = B*A.sefladjointView()*B.adjoint()` +* Performance: + * Improve code generation for `mat*vec` on some compilers. + * Optimize horizontal adds in SSE3 and AVX. + * Speed up row-major TRSM (triangular solve with a matrix as right-hand-side) by reverting `vec/y` to `vec*(1/y)`. The rationale is: + * div is extremely costly + * this is consistent with the column-major case + * this is consistent with all other BLAS implementations + * Remove one temporary in `SparseLU::solve()` +* Others: + * Fix BLAS backend for symmetric rank K updates. + * #1360: fix `-0` vs `+0` issue with Altivec + * #1363: fix mingw's ABI issue + * #1367: fix compilation with gcc 4.1. + * Fix ABI issue with AVX and old gcc versions. + * Fix some warnings with ICC, Power8, etc. + * Fix compilation with MSVC 2017 + +## [3.3.1] + +Released on December 06, 2016. + +Changes since 3.3.0: + +* #426: add operators `&&` and `||` to dense and sparse matrices (only dense arrays were supported) +* #1319: add support for CMake's imported targets. +* #1343: fix compilation regression in `array = matrix_product` and `mat+=selfadjoint_view` +* Fix regression in assignment of sparse block to sparse block. +* Fix a memory leak in `Ref` and `Ref`. +* #1351: fix compilation of random with old compilers. +* Fix a performance regression in (mat*mat)*vec for which mat*mat was evaluated multiple times. +* Fix a regression in `SparseMatrix::ReverseInnerIterator` +* Fix performance issue of products for dynamic size matrices with fixed max size. +* implement `float`/`std::complex` for ZVector +* Some fixes for expression-template scalar-types +* #1356: fix undefined behavior with nullptr. +* Workaround some compilation errors with MSVC and MSVC/clr +* #1348: document `EIGEN_MAX_ALIGN_BYTES` and `EIGEN_MAX_STATIC_ALIGN_BYTES`, and reflect in the doc that `EIGEN_DONT_ALIGN*` are deprecated. +* Bugs #1346,#1347: make Eigen's installation relocatable. +* Fix some harmless compilation warnings. + +## [3.3] + +Released on November 10, 2016 + +For a comprehensive list of change since the 3.2 series, see this [page](https://www.eigen.tuxfamily.org/index.php?title=3.3). + + +Main changes since 3.3-rc2: +* Fix regression in printing sparse expressions. +* Fix sparse solvers when using a SparseVector as the result and/or right-hand-side. + +## [3.3-rc2] + +Released on November 04, 2016 + +For a comprehensive list of change since the 3.2 series, see this [page](https://www.eigen.tuxfamily.org/index.php?title=3.3). + +Main changes since 3.3-rc1: +* Core module + * Add supports for AVX512 SIMD instruction set. + * Bugs #698 and #1004: Improve numerical robustness of LinSpaced methods for both real and integer scalar types ([details](http://eigen.tuxfamily.org/dox-devel/classEigen_1_1DenseBase.html#aaef589c1dbd7fad93f97bd3fa1b1e768)). + * Fix a regression in `X = (X*X.transpose())/scalar` with `X` rectangular (`X` was resized before the evaluation). + * #1311: Fix alignment logic in some cases of `(scalar*small).lazyProduct(small)` + * #1317: fix a performance regression from 3.2 with clang and some nested block expressions. + * #1308: fix compilation of some small products involving nullary-expressions. + * #1333: Fix a regression with `mat.array().sum()` + * #1328: Fix a compilation issue with old compilers introduced in 3.3-rc1. + * #1325: Fix compilation on NEON with clang + * Properly handle negative inputs in vectorized sqrt. + * Improve cost-model to determine the ideal number of threads in matrix-matrix products. +* Geometry module + * #1304: Fix `Projective * scaling` and `Projective *= scaling`. + * #1310: Workaround a compilation regression from 3.2 regarding triangular * homogeneous + * #1312: Quaternion to AxisAngle conversion now ensures the angle will be in the range `[0,pi]`. This also increases accuracy when `q_w` is negative. +* Tensor module + * Add support for OpenCL. + * Improved random number generation. +* Other + * #1330: SuiteSparse, explicitly handle the fact that Cholmod does not support single precision float numbers. + * SuiteSparse, fix SPQR for rectangular matrices + * Fix compilation of `qr.inverse()` for column and full pivoting variants + +## [3.2.10] + +Released on October 04, 2016 + +Changes since 3.2.9: + +Main fixes and improvements: +* #1272: Core module, improve comma-initializer in handling empty matrices. +* #1276: Core module, remove all references to `std::binder*` when C++11 is enabled (those are deprecated). +* #1304: Geometry module, fix `Projective * scaling` and `Projective *= scaling`. +* #1300: Sparse module, compilation fix for some block expression and SPQR support. +* Sparse module, fix support for row (resp. column) of a column-major (resp. row-major) sparse matrix. +* LU module, fix 4x4 matrix inversion for non-linear destinations. +* Core module, a few fixes regarding custom complex types. +* #1275: backported improved random generator from 3.3 +* Workaround MSVC 2013 compilation issue in Reverse +* Fix UmfPackLU constructor for expressions. +* #1273: fix shortcoming in eigen_assert macro +* #1249: disable the use of `__builtin_prefetch` for compilers other than GCC, clang, and ICC. +* #1265: fix doc of QR decompositions + +## [3.3-rc1] + +Released on September 22, 2016 + +For a comprehensive list of change since the 3.2 series, see this [page](https://www.eigen.tuxfamily.org/index.php?title=3.3). + +Main changes since 3.3-beta2: + +* New features and improvements: + * #645: implement eigenvector computation in GeneralizedEigenSolver + * #1271: add a `SparseMatrix::coeffs()` method returning a linear view of the non-zeros (for compressed mode only). + * #1286: Improve support for custom nullary functors: now the functor only has to expose one relevant operator among `f()`, `f(i)`, `f(i,j)`. + * #1272: improve comma-initializer in handling empty matrices. + * #1268: detect failure in LDLT and report them through info() + * Add support for scalar factor in sparse-selfadjoint `*` dense products, and enable `+=`/`-=` assignment for such products. + * Remove temporaries in product expressions matching `d?=a-b*c` by rewriting them as `d?=a; d?=b*c;` + * Vectorization improvements for some small product cases. + +* Doc: + * #1265: fix outdated doc in QR facto + * #828: improve documentation of sparse block methods, and sparse unary methods. + * Improve documentation regarding nullary functors, and add an example demonstrating the use of nullary expression to perform fancy matrix manipulations. + * Doc: explain how to use Accelerate as a LAPACK backend. + +* Bug fixes and internal changes: + * Numerous fixes regarding support for custom complex types. + * #1273: fix shortcoming in `eigen_assert` macro + * #1278: code formatting + * #1270: by-pass hand written `pmadd` with recent clang versions. + * #1282: fix implicit double to float conversion warning + * #1167: simplify installation of header files using cmake's `install(DIRECTORY ...)` command + * #1283: fix products involving an uncommon `vector.block(..)` expressions. + * #1285: fix a minor regression in LU factorization. + * JacobiSVD now consider any denormal number as zero. + * Numerous fixes regarding support for CUDA/NVCC (including bugs #1266) + * Fix an alignment issue in gemv, symv, and trmv for statically allocated temporaries. + * Fix 4x4 matrix inversion for non-linear destinations. + * Numerous improvements and fixes in half precision scalar type. + * Fix vectorization logic for coeff-based product for some corner cases + * Bugs #1260, #1261, #1264: several fixes in AutoDiffScalar. + +## [3.3-beta2] + +Released on July 26, 2016 + +For a comprehensive list of change since the 3.2 series, see this [page](https://www.eigen.tuxfamily.org/index.php?title=3.3). + +Main changes since 3.3-beta1: + +* Dense features: + * #707: Add support for [inplace](http://eigen.tuxfamily.org/dox-devel/group__InplaceDecomposition.html) dense decompositions. + * #977: normalize(d) left the input unchanged if its norm is 0 or too close to 0. + * #977: add stableNormalize[d] methods: they are analogues to normalize[d] but with carefull handling of under/over-flow. + * #279: Implement generic scalar*expr and expr*scalar operators. This is especially useful for custom scalar types, e.g., to enable `float*expr` without conversion. + * New unsupported/Eigen/SpecialFunctions module providing the following coefficient-wise math functions: erf, erfc, lgamma, digamma, polygamma, igamma, igammac, zeta, betainc. + * Add fast reciprocal condition estimators in dense LU and Cholesky factorizations. + * #1230: add support for `SelfadjointView::triangularView()` and `diagonal()` + * #823: add `Quaternion::UnitRandom()` method. + * Add exclusive or operator for bool arrays. + * Relax dependency on MKL for `EIGEN_USE_BLAS` and `EIGEN_USE_LAPACKE`: any BLAS and LAPACK libraries can now be used as backend (see [doc](http://eigen.tuxfamily.org/dox-devel/TopicUsingBlasLapack.html)). + * Add static assertion to `x()`, `y()`, `z()`, `w()` accessors + * #51: avoid dynamic memory allocation in fixed-size rank-updates, matrix products evaluated within a triangular part, and selfadjoint times matrix products. + * #696: enable zero-sized block at compile-time by relaxing the respective assertion + * #779: in `Map`, allows non aligned buffers for buffers smaller than the requested alignment. + * Add a complete orthogonal decomposition class: [CompleteOrthogonalDecomposition](http://eigen.tuxfamily.org/dox-devel/classEigen_1_1CompleteOrthogonalDecomposition.html) + * Improve robustness of JacoviSVD with complexes (underflow, noise amplification in complex to real conversion, compare off-diagonal entries to the current biggest diagonal entry instead of the global biggest, null inputs). + * Change Eigen's ColPivHouseholderQR to use a numerically stable norm downdate formula (changeset 9da6c621d055) + * #1214: consider denormals as zero in D&C SVD. This also workaround infinite binary search when compiling with ICC's unsafe optimizations. + * Add log1p for arrays. + * #1193: now `lpNorm` supports empty inputs. + * #1151: remove useless critical section in matrix product + * Add missing non-const reverse method in `VectorwiseOp` (e.g., this enables `A.rowwise().reverse() = ...`) + * Update RealQZ to reduce 2x2 diagonal block of T corresponding to non reduced diagonal block of S to positive diagonal form. + +* Sparse features: + * #632: add support for "dense +/- sparse" operations. The current implementation is based on SparseView to make the dense subexpression compatible with the sparse one. + * #1095: add Cholmod*::logDeterminant/determinant functions. + * Add `SparseVector::conservativeResize()` method + * #946: generalize `Cholmod::solve` to handle any rhs expressions. + * #1150: make IncompleteCholesky more robust by iteratively increase the shift until the factorization succeed (with at most 10 attempts) + * #557: make InnerIterator of sparse storage types more versatile by adding default-ctor, copy-ctor/assignment. + * #694: document that `SparseQR::matrixR` is not sorted. + * Block expressions now expose all the information defining the block. + * Fix GMRES returned error. + * #1119: add support for SuperLU 5 + +* Performance improvements: + * #256: enable vectorization with unaligned loads/stores. This concerns all architectures and all sizes. This new behavior can be disabled by defining `EIGEN_UNALIGNED_VECTORIZE=0` + * Add support for s390x(zEC13) ZVECTOR instruction set. + * Optimize mixing of real with complex matrices by avoiding a conversion from real to complex when the real types do not match exactly. (see bccae23d7018) + * Speedup square roots in performance critical methods such as norm, normalize(d). + * #1154: use dynamic scheduling for spmv products. + * #667, #1181: improve perf with MSVC and ICC through `FORCE_INLINE` + * Improve heuristics for switching between coeff-based and general matrix product implementation at compile-time. + * Add vectorization of tanh for float (SSE/AVX) + * Improve cost estimates of numerous functors. + * Numerous improvements regarding half-packet vectorization: coeff-based products (e.g., `Matrix4f*Vector4f` is now vectorized again when using AVX), reductions, linear vs inner traversals. + * Fix performance regression: with AVX, unaligned stores were emitted instead of aligned ones for fixed size assignment. + * #1201: optimize `affine*vector` products. + * #1191: prevent Clang/ARM from rewriting VMLA into VMUL+VADD. + * Small speed-up in `Quaternion::slerp`. + * #1201: improve code generation of affine*vec with MSVC + +* Doc: + * Add [documentation and exemple](http://eigen.tuxfamily.org/dox-devel/group__MatrixfreeSolverExample.html) for matrix-free solving. + * A new documentation [page](http://eigen.tuxfamily.org/dox-devel/group__CoeffwiseMathFunctions.html) summarizing coefficient-wise math functions. + * #1144: clarify the doc about aliasing in case of resizing and matrix product. + * A new documentation [page](http://eigen.tuxfamily.org/dox-devel/group__DenseDecompositionBenchmark.html) summarizing the true performance of Eigen's dense decomposition algorithms. + +* Misc improvements: + * Allow one generic scalar argument for all binary operators/functions. + * Add a `EIGEN_MAX_CPP_VER` option to limit the C++ version to be used, as well as [fine grained options](http://eigen.tuxfamily.org/dox-devel/TopicPreprocessorDirectives.html#title1) to control individual language features. + * A new [ScalarBinaryOpTraits](http://eigen.tuxfamily.org/dox-devel/structEigen_1_1ScalarBinaryOpTraits.html) class allowing to control how different scalar types are mixed. + * `NumTraits` now exposes a `digits10` function making `internal::significant_decimals_impl` deprecated. + * Countless improvements and fixes in Tensors module. + * #1156: fix several function declarations whose arguments were passed by value instead of being passed by reference + * #1164: fix `std::list` and `std::deque` specializations such that our aligned allocator is automatically activated only when the user did not specified an allocator (or specified the default std::allocator). + * #795: mention allocate_shared as a candidate for aligned_allocator. + * #1170: skip calls to memcpy/memmove for empty inputs. + * #1203: by-pass large stack-allocation in stableNorm if `EIGEN_STACK_ALLOCATION_LIMIT` is too small + * Improve constness of blas level-2/3 interface. + * Implement stricter argument checking for SYRK and SY2K + * Countless improvements in the documentations. + * Internal: Remove `posix_memalign`, `_mm_malloc`, and `_aligned_malloc` special paths. + * Internal: Remove custom unaligned loads for SSE + * Internal: introduce `[U]IntPtr` types to be used for casting pointers to integers. + * Internal: `NumTraits` now exposes `infinity()` + * Internal: `EvalBeforeNestingBit` is now deprecated. + * #1213: workaround gcc linking issue with anonymous enums. + * #1242: fix comma initializer with empty matrices. + * #725: make move ctor/assignment noexcept + * Add minimal support for `Array` + * Improve support for custom scalar types bases on expression template (e.g., `boost::multiprecision::number<>` type). All dense decompositions are successfully tested. + +* Most visible fixes: + * #1144: fix regression in `x=y+A*x` (aliasing issue) + * #1140: fix usage of `_mm256_set_m128` and `_mm256_setr_m128` in AVX support + * #1141: fix some missing initializations in CholmodSupport + * #1143: workaround gcc bug #10200 + * #1145, #1147, #1148, #1149: numerous fixes in PastixSupport + * #1153: don't rely on `__GXX_EXPERIMENTAL_CXX0X__` to detect C++11 support. + * #1152: fix data race in static initialization of blas routines. + * fix some buffer overflow in product block size computation. + * #96, #1006: fix by value argument in result_of + * #178: clean several `const_cast`. + * Fix compilation in `ceil()` function. + * #698: fix linspaced for integer types. + * #1161: fix division by zero for huge scalar types in cache block size computation. + * #774: fix a numerical issue in Umeyama algorithm that produced unwanted reflections. + * #901: fix triangular-view with unit diagonal of sparse rectangular matrices. + * #1166: fix shortcoming in gemv when the destination is not a vector at compile-time. + * #1172: make `SparseMatrix::valuePtr` and `innerIndexPtr` properly return null for empty matrices + * #537: fix a compilation issue in Quaternion with Apples's compiler + * #1186: fix usage of `vreinterpretq_u64_f64` (NEON) + * #1190: fix usage of `__ARM_FEATURE_FMA` on Clang/ARM + * #1189: fix pow/atan2 compilation for `AutoDiffScalar` + * Fix detection of same input-output when applied permutations, or on solve operations. + * Workaround a division by zero in triangular solve when outerstride==0 + * Fix compilation of s`parse.cast<>().transpose()`. + * Fix double-conversion warnings throughout the code. + * #1207: fix logical-op warnings + * #1222, #1223: fix compilation in `AutoDiffScalar`. + * #1229: fix usage of `Derived::Options` in MatrixFunctions. + * #1224: fix regression in `(dense*dense).sparseView()`. + * #1231: fix compilation regression regarding complex_array/=real_array. + * #1221: disable gcc 6 warning: ignoring attributes on template argument. + * Workaround clang/llvm bug 27908 + * #1236: fix possible integer overflow in sparse matrix product. + * #1238: fix `SparseMatrix::sum()` overload for un-compressed mode + * #1240: remove any assumption on NEON vector types + * Improves support for MKL's PARDISO solver. + * Fix support for Visual 2010. + * Fix support for gcc 4.1. + * Fix support for ICC 2016 + * Various Altivec/VSX fixes: exp, support for clang 3.9, + * #1258: fix compilation of `Map::coeffRef` + * #1249: fix compilation with compilers that do not support `__builtin_prefetch` . + * #1250: fix `pow()` for `AutoDiffScalar` with custom nested scalar type. + +## [3.2.9] + +Released on July 18, 2016 + +Changes since 3.2.8: + +* Main fixes and improvements: + * Improve numerical robustness of JacobiSVD (backported from 3.3) + * #1017: prevents underflows in `makeHouseholder` + * Fix numerical accuracy issue in the extraction of complex eigenvalue pairs in real generalized eigenvalue problems. + * Fix support for `vector.homogeneous().asDiagonal()` + * #1238: fix `SparseMatrix::sum()` overload for un-compressed mode + * #1213: workaround gcc linking issue with anonymous enums. + * #1236: fix possible integer overflow in sparse-sparse product + * Improve detection of identical matrices when applying a permutation (e.g., `mat = perm * mat`) + * Fix usage of nesting type in blas_traits. In practice, this fixes compilation of expressions such as `A*(A*A)^T` + * CMake: fixes support of Ninja generator + * Add a StorageIndex typedef to sparse matrices and expressions to ease porting code to 3.3 (see http://eigen.tuxfamily.org/index.php?title=3.3#Index_typedef) + * #1200: make `aligned_allocator` c++11 compatible (backported from 3.3) + * #1182: improve generality of `abs2` (backported from 3.3) + * #537: fix compilation of Quaternion with Apples's compiler + * #1176: allow products between compatible scalar types + * #1172: make `valuePtr` and `innerIndexPtr` properly return null for empty sparse matrices. + * #1170: skip calls to `memcpy`/`memmove` for empty inputs. + +* Others: + * #1242: fix comma initializer with empty matrices. + * Improves support for MKL's PARDISO solver. + * Fix a compilation issue with Pastix solver. + * Add some missing explicit scalar conversions + * Fix a compilation issue with matrix exponential (unsupported MatrixFunctions module). + * #734: fix a storage order issue in unsupported Spline module + * #1222: fix a compilation issue in AutoDiffScalar + * #1221: shutdown some GCC6's warnings. + * #1175: fix index type conversion warnings in sparse to dense conversion. + +## [3.2.8] + +Released on February 16, 2016 + +Changes since 3.2.7: + +* Main fixes and improvements: + * Make `FullPivLU::solve` use `rank()` instead of `nonzeroPivots()`. + * Add `EIGEN_MAPBASE_PLUGIN` + * #1166: fix issue in matrix-vector products when the destination is not a vector at compile-time. + * #1100: Improve cmake/pkg-config support. + * #1113: fix name conflict with C99's "I". + * Add missing delete operator overloads in `EIGEN_MAKE_ALIGNED_OPERATOR_NEW` + * Fix `(A*B).maxCoeff(i)` and similar. + * Workaround an ICE with VC2015 Update1 x64. + * #1156: fix several function declarations whose arguments were passed by value instead of being passed by reference + * #1164: fix `std::list` and `std::deque` specializations such that our aligned allocator is automatically activatived only when the user did not specified an allocator (or specified the default `std::allocator`). + +* Others: + * Fix BLAS backend (aka MKL) for empty matrix products. + * #1134: fix JacobiSVD pre-allocation. + * #1111: fix infinite recursion in `sparse_column_major.row(i).nonZeros()` (it now produces a compilation error) + * #1106: workaround a compilation issue in Sparse module for msvc-icc combo + * #1153: remove the usage of `__GXX_EXPERIMENTAL_CXX0X__` to detect C++11 support + * #1143: work-around gcc bug in COLAMD + * Improve support for matrix products with empty factors. + * Fix and clarify documentation of Transform wrt `operator*(MatrixBase)` + * Add a matrix-free conjugate gradient example. + * Fix cost computation in CwiseUnaryView (internal) + * Remove custom unaligned loads for SSE. + * Some warning fixes. + * Several other documentation clarifications. + +## [3.3-beta1] + +Released on December 16, 2015 + +For a comprehensive list of change since the 3.2 series, see this [page](https://www.eigen.tuxfamily.org/index.php?title=3.3). + +Main changes since 3.3-alpha1: + +* Dense features: + * Add `LU::transpose().solve()` and `LU::adjoint().solve()` API. + * Add `Array::rsqrt()` method as a more efficient shorcut for `sqrt().inverse()`. + * Add `Array::sign()` method for real and complexes. + * Add `lgamma`, `erf`, and `erfc` functions for arrays. + * Add support for row/col-wise `lpNorm()`. + * Add missing `Rotation2D::operator=(Matrix2x2)`. + * Add support for `permutation * homogenous`. + * Improve numerical accuracy in LLT and triangular solve by using true scalar divisions (instead of x * (1/y)). + * Add `EIGEN_MAPBASE_PLUGIN` and `EIGEN_QUATERNION_PLUGIN`. + * #1074: forbid the creation of PlainObjectBase objects. + +* Sparse features: + * Add IncompleteCholesky preconditioner. + * Improve support for [matrix-free iterative solvers](http://eigen.tuxfamily.org/dox/group__MatrixfreeSolverExample.html) + * Extend `setFromTriplets` API to allow passing a functor object controlling how to collapse duplicated entries. + * #918: add access to UmfPack return code and parameters. + * Add support for `dense.cwiseProduct(sparse)`, thus enabling `(dense*sparse).diagonal()` expressions. + * Add support to directly evaluate the product of two sparse matrices within a dense matrix. + * #1064: add support for `Ref`. + * Add supports for real mul/div `sparse` operations. + * #1086: replace deprecated `UF_long` by `SuiteSparse_long`. + * Make `Ref` more versatile. + +* Performance improvements: + * #1115: enable static alignment and thus small size vectorization on ARM. + * Add temporary-free evaluation of `D.nolias() *= C + A*B`. + * Add vectorization of round, ceil and floor for SSE4.1/AVX. + * Optimize assignment into a `Block` by using Ref and avoiding useless updates in non-compressed mode. This make row-by-row filling of a row-major sparse matrix very efficient. + * Improve internal cost model leading to faster code in some cases (see changeset 1bcb41187a45). + * #1090: improve redux evaluation logic. + * Enable unaligned vectorization of small fixed size matrix products. + +* Misc improvements: + * Improve support for `isfinite`/`isnan`/`isinf` in fast-math mode. + * Make the IterativeLinearSolvers module compatible with MPL2-only mode by defaulting to COLAMDOrdering and NaturalOrdering for ILUT and ILLT respectively. + * Avoid any OpenMP calls if multi-threading is explicitly disabled at runtime. + * Make abs2 compatible with custom complex types. + * #1109: use noexcept instead of throw for C++11 compilers. + * #1100: Improve cmake/pkg-config support. + * Countless improvements and fixes in Tensors module. + +* Most visible fixes: + * #1105: fix default preallocation when moving from compressed to uncompressed mode in SparseMatrix. + * Fix UmfPackLU constructor for expressions. + * Fix degenerate cases in syrk and trsm BLAS API. + * Fix matrix to quaternion (and angleaxis) conversion for matrix expression. + * Fix compilation of sparse-triangular to dense assignment. + * Fix several minor performance issues in the nesting of matrix products. + * #1092: fix iterative solver ctors for expressions as input. + * #1099: fix missing include for CUDA. + * #1102: fix multiple definition linking issue. + * #1088: fix setIdenity for non-compressed sparse-matrix. + * Fix `SparseMatrix::insert`/`coeffRef` for non-empty compressed matrix. + * #1113: fix name conflict with C99's "I". + * #1075: fix `AlignedBox::sample` for runtime dimension. + * #1103: fix NEON vectorization of `complex` multiplication. + * #1134: fix JacobiSVD pre-allocation. + * Fix ICE with VC2015 Update1. + * Improve cmake install scripts. + +## [3.2.7] + +Released on November 5, 2015 + +Changes since 3.2.6: + +* Main fixes and improvements: + * Add support for `dense.cwiseProduct(sparse)`. + * Fix a regression regarding `(dense*sparse).diagonal()`. + * Make the `IterativeLinearSolvers` module compatible with MPL2-only mode by defaulting to `COLAMDOrdering` and `NaturalOrdering` for ILUT and ILLT respectively. + * #266: backport support for c++11 move semantic + * `operator/=(Scalar)` now performs a true division (instead of `mat*(1/s)`) + * Improve numerical accuracy in LLT and triangular solve by using true scalar divisions (instead of `mat * (1/s)`) + * #1092: fix iterative solver constructors for expressions as input + * #1088: fix `setIdenity` for non-compressed sparse-matrix + * #1086: add support for recent SuiteSparse versions + +* Others: + * Add overloads for real-scalar times `SparseMatrix` operations. This avoids real to complex conversions, and also fixes a compilation issue with MSVC. + * Use explicit Scalar types for AngleAxis initialization + * Fix several shortcomings in cost computation (avoid multiple re-evaluation in some very rare cases). + * #1090: fix a shortcoming in redux logic for which slice-vectorization plus unrolling might happen. + * Fix compilation issue with MSVC by backporting `DenseStorage::operator=` from devel branch. + * #1063: fix nesting of unsupported/AutoDiffScalar to prevent dead references when computing second-order derivatives + * #1100: remove explicit `CMAKE_INSTALL_PREFIX` prefix to conform to cmake install's `DESTINATION` parameter. + * unsupported/ArpackSupport is now properly installed by make install. + * #1080: warning fixes + +## [3.2.6] + +Released on October 1, 2015 + +Changes since 3.2.5: + +* fix some compilation issues with MSVC 2013, including bugs #1000 and #1057 +* SparseLU: fixes to support `EIGEN_DEFAULT_TO_ROW_MAJOR` (#1053), and for empty (#1026) and some structurally rank deficient matrices (#792) +* #1075: fix `AlignedBox::sample()` for Dynamic dimension +* fix regression in AMD ordering when a column has only one off-diagonal non-zero (used in sparse Cholesky) +* fix Jacobi preconditioner with zero diagonal entries +* fix Quaternion identity initialization for non-implicitly convertible types +* #1059: fix `predux_max` for NEON +* #1039: fix some issues when redefining `EIGEN_DEFAULT_DENSE_INDEX_TYPE` +* #1062: fix SelfAdjointEigenSolver for RowMajor matrices +* MKL: fix support for the 11.2 version, and fix a naming conflict (#1067) + * #1033: explicit type conversion from 0 to RealScalar + +## [3.3-alpha1] + +Released on September 4, 2015 + +See the [announcement](https://www.eigen.tuxfamily.org/index.php?title=3.3). + +## [3.2.5] + +Released on June 16, 2015 + +Changes since 3.2.4: + +* Changes with main impact: + * Improve robustness of SimplicialLDLT to semidefinite problems by correctly handling structural zeros in AMD reordering + * Re-enable supernodes in SparseLU (fix a performance regression in SparseLU) + * Use zero guess in `ConjugateGradients::solve` + * Add `PermutationMatrix::determinant` method + * Fix `SparseLU::signDeterminant()` method, and add a SparseLU::determinant() method + * Allows Lower|Upper as a template argument of CG and MINRES: in this case the full matrix will be considered + * #872: remove usage of std::bind* functions (deprecated in c++11) + +* Numerical robustness improvements: + * #1014: improve numerical robustness of the 3x3 direct eigenvalue solver + * #1013: fix 2x2 direct eigenvalue solver for identical eigenvalues + * #824: improve accuracy of `Quaternion::angularDistance` + * #941: fix an accuracy issue in ColPivHouseholderQR by continuing the decomposition on a small pivot + * #933: improve numerical robustness in RealSchur + * Fix default threshold value in SPQR + +* Other changes: + * Fix usage of `EIGEN_NO_AUTOMATIC_RESIZING` + * Improved support for custom scalar types in SparseLU + * Improve cygwin compatibility + * #650: fix an issue with sparse-dense product and rowmajor matrices + * #704: fix MKL support (HouseholderQR) + * #705: fix handling of Lapack potrf return code (LLT) + * #714: fix matrix product with OpenMP support + * #949: add static assertions for incompatible scalar types in many of the dense decompositions + * #957, #1000: workaround MSVC/ICC compilation issues when using sparse blocks + * #969: fix ambiguous calls to Ref + * #972, #986: add support for coefficient-based product with 0 depth + * #980: fix taking a row (resp. column) of a column-major (resp. row-major) sparse matrix + * #983: fix an alignement issue in Quaternion + * #985: fix RealQZ when either matrix had zero rows or columns + * #987: fix alignement guess in diagonal product + * #993: fix a pitfall with matrix.inverse() + * #996, #1016: fix scalar conversions + * #1003: fix handling of pointers non aligned on scalar boundary in slice-vectorization + * #1010: fix member initialization in IncompleteLUT + * #1012: enable alloca on Mac OS or if alloca is defined as macro + * Doc and build system: #733, #914, #952, #961, #999 + +## [3.2.4] + +Released on January 21, 2015 + +Changes since 3.2.3: + +* Fix compilation regression in Rotation2D +* #920: fix compilation issue with MSVC 2015. +* #921: fix utilization of bitwise operation on enums in `first_aligned`. +* Fix compilation with NEON on some platforms. + +## [3.2.3] + +Released on December 16, 2014 + +Changes since 3.2.2: + +* Core: + * Enable `Mx0 * 0xN` matrix products. + * #859: fix returned values for vectorized versions of `exp(NaN)`, `log(NaN)`, `sqrt(NaN)` and `sqrt(-1)`. + * #879: tri1 = mat * tri2 was compiling and running incorrectly if tri2 was not numerically triangular. Workaround the issue by evaluating mat*tri2 into a temporary. + * #854: fix numerical issue in SelfAdjointEigenSolver::computeDirect for 3x3 matrices. + * #884: make sure there no call to malloc for zero-sized matrices or for a Ref<> without temporaries. + * #890: fix aliasing detection when applying a permutation. + * #898: MSVC optimization by adding inline hint to const_cast_ptr. + * #853: remove enable_if<> in Ref<> ctor. + +* Dense solvers: + * #894: fix the sign returned by LDLT for multiple calls to `compute()`. + * Fix JacobiSVD wrt underflow and overflow. + * #791: fix infinite loop in JacobiSVD in the presence of NaN. + +* Sparse: + * Fix out-of-bounds memory write when the product of two sparse matrices is completely dense and performed using pruning. + * UmfPack support: fix redundant evaluation/copies when calling `compute()`, add support for generic expressions as input, and fix extraction of the L and U factors (#911). + * Improve `SparseMatrix::block` for const matrices (the generic path was used). + * Fix memory pre-allocation when permuting inner vectors of a sparse matrix. + * Fix `SparseQR::rank` for a completely empty matrix. + * Fix `SparseQR` for row-major inputs. + * Fix `SparseLU::absDeterminant` and add respective unit test. + * BiCGSTAB: make sure that good initial guesses are not destroyed by a bad preconditioner. + +* Geometry: + * Fix `Hyperplane::Through(a,b,c)` when points are aligned or identical. + * Fix linking issues in OpenGLSupport. + +* OS, build system and doc: + * Various compilation fixes including: #821, #822, #857, #871, #873. + * Fix many compilation warnings produced by recent compilers including: #909. + * #861: enable posix_memalign with PGI. + * Fix BiCGSTAB doc example. + +## [3.2.2] + +Released on August 4, 2014 + +Changes since 3.2.1: + +* Core: + * Relax Ref such that `Ref` accepts a `RowVectorXf` which can be seen as a degenerate `MatrixXf(1,N)` + * Fix performance regression for the vectorization of sub columns/rows of matrices. + * `EIGEN_STACK_ALLOCATION_LIMIT`: Raise its default value to 128KB, make use of it to assert on maximal fixed size object, and allows it to be 0 to mean "no limit". + * #839: Fix 1x1 triangular matrix-vector product. + * #755: `CommaInitializer` produced wrong assertions in absence of Return-Value-Optimization. + +* Dense solvers: + * Add a `rank()` method with threshold control to JacobiSVD, and make solve uses it to return the minimal norm solution for rank-deficient problems. + * Various numerical fixes in JacobiSVD, including:#843, and the move from Lapack to Matlab strategy for the default threshold. + * Various numerical fixes in LDLT, including the case of semi-definite complex matrices. + * Fix `ColPivHouseholderQR::rank()`. + * #222: Make temporary matrix column-major independently of `EIGEN_DEFAULT_TO_ROW_MAJOR` in BlockHouseholder. + +* Sparse: + * #838: Fix `dense * sparse` and `sparse * dense` outer products and detect outer products from either the lhs or rhs. + * Make the ordering method of SimplicialL[D]LT configurable. + * Fix regression in the restart mechanism of BiCGSTAB. + * #836: extend SparseQR to support more columns than rows. + * #808: Use double instead of float for the increasing size ratio in `CompressedStorage::resize`, fix implicit conversions from int/longint to float/double, and fix `set_from_triplets` temporary matrix type. + * #647: Use `smart_copy` instead of bitwise memcpy in CompressedStorage. + * GMRES: Initialize essential Householder vector with correct dimension. + +* Geometry: + * #807: Missing scalar type cast in `umeyama()` + * #806: Missing scalar type cast in `Quaternion::setFromTwoVectors()` + * #759: Removed hard-coded double-math from `Quaternion::angularDistance`. + +* OS, build system and doc: + * Fix compilation with Windows CE. + * Fix some ICEs with VC11. + * Check IMKL version for compatibility with Eigen + * #754: Only inserted (`!defined(_WIN32_WCE)`) analog to alloc and free implementation. + * #803: Avoid `char*` to `int*` conversion. + * #819: Include path of details.h file. + * #738: Use the "current" version of cmake project directories to ease the inclusion of Eigen within other projects. + * #815: Fix doc of FullPivLU wrt permutation matrices. + * #632: doc: Note that `dm2 = sm1 + dm1` is not possible + * Extend AsciiQuickReference (real, imag, conjugate, rot90) + +## [3.2.1] + +Released on February 26, 2014 + +Changes since 3.2.0: + +* Eigen2 support is now deprecated and will be removed in version 3.3. +* Core: + * Bug fix for Ref object containing a temporary matrix. + * #654: Allow construction of row vector from 1D array. + * #679: Support `cwiseMin()` and `cwiseMax()` on maps. + * Support `conservativeResize()` on vectors. + * Improve performance of vectorwise and replicate expressions. + * #642: Add vectorization of sqrt for doubles, and make sqrt really safe if `EIGEN_FAST_MATH` is disabled. + * #616: Try harder to align columns when printing matrices and arrays. + * #579: Add optional run-time parameter to fixed-size block methods. + * Implement `.all()` and `.any()` for zero-sized objects + * #708: Add placement new and delete for arrays. + * #503: Better C++11 support. +* Dense linear algebra: + * #689: Speed up some matrix-vector products by using aligned loads if possible. + * Make solve in `FullPivHouseholderQR` return least-square solution if there is no exact solution. + * #678: Fix `fullPivHouseholderQR` for rectangular matrices. + * Fix a 0/0 issue in JacobiSVD. + * #736: Wrong result in `LDLT::isPositiveDefinite()` for semi-definite matrices. + * #740: Fix overflow issue in `stableNorm()`. + * Make pivoting HouseholderQR compatible with custom scalar types. +* Geometry: + * Fix compilation of Transform * UniformScaling +* Sparse matrices: + * Fix elimination tree and SparseQR for fat rectangular matrices. + * #635: add `isCompressed` to `MappedSparseMatrix` for compatibility. + * #664: Support iterators without `operator<` in `setFromTriplets()`. + * Fixes in SparseLU: infinite loop, aliasing issue when solving, overflow in memory allocation, use exceptions only if enabled (#672). + * Fixes in SparseQR: reduce explicit zero, assigning result to map, assert catching non-conforming sizes, memory leak. + * #681: Uninitialized value in CholmodSupport which may lead to incorrect results. + * Fix some issues when using a non-standard index type (#665 and more) + * Update constrained CG (unsupported module) to Eigen3. +* OS and build system: + * MacOS put OpenGL header files somewhere else from where we expected it. + * Do not assume that `alloca()` is 16-byte aligned on Windows. + * Compilation fixes when using ICC with Visual Studio. + * Fix Fortran compiler detection in CMake files. +* Fix some of our tests (bugs #744 and #748 and more). +* Fix a few compiler warnings (bug #317 and more). +* Documentation fixes (bugs #609, #638 and #739 and more). + +## [3.1.4] + +Released on August 02, 2013 + +Changes since 3.1.3: + +* #620: Fix robustness and performance issues in JacobiSVD::solve. +* #613: Fix accuracy of SSE sqrt for very small numbers. +* #608: Fix sign computation in LDLT. +* Fix write access to CwiseUnaryView expressions. +* Fix compilation of `transposeInPlace()` for Array expressions. +* Fix non const `data()` member in Array and Matrix wrappers. +* Fix a few warnings and compilation issues with recent compiler versions. +* Documentation fixes. + +## [3.0.7] + +Released on August 02, 2013 + +Changes since 3.0.6: + +* Fix traits of `Map`. +* Fix a few warnings (#507) and documentation (#531). + +## [3.2.0] + +Released on July 24, 2013. + +Major new features and optimizations since 3.1: + +* Dense world + * New [`Ref<>`](http://eigen.tuxfamily.org/dox-devel/classEigen_1_1Ref.html) class allowing to write non templated function taking various kind of Eigen dense objects without copies. + * New [RealQZ](http://eigen.tuxfamily.org/dox-devel/classEigen_1_1RealQZ.html) factorization and [GeneralizedEigenSolver](http://eigen.tuxfamily.org/dox-devel/classEigen_1_1GeneralizedEigenSolver.html). + * Add vector-wise normalized and normalize functions, and hasNaN/allFinite members. + * Add mixed static/dynamic-size `.block<.,.>()` functions. + * Optimize outer products for non rank-1 update operations. + * Optimize diagonal products (enable vectorization in more cases). + * Improve robustness and performance in `JacobiSVD::solve()`. +* Sparse world + * New [SparseLU](http://eigen.tuxfamily.org/dox-devel/group__SparseLU__Module.html) module: built-in sparse LU with supernodes and numerical row pivoting (port of SuperLU making the SuperLUSupport module obsolete). + * New [SparseQR](http://eigen.tuxfamily.org/dox-devel/group__SparseQR__Module.html) module: rank-revealing sparse QR factorization with numerical column pivoting. + * New [COLAMD](http://eigen.tuxfamily.org/dox-devel/classEigen_1_1COLAMDOrdering.html) ordering and unified [ordering API](http://eigen.tuxfamily.org/dox-devel/group__OrderingMethods__Module.html). + * Add support for generic blocks of sparse matrices (read-only). + * Add conservative resize feature on sparse matrices. + * Add uniform support for solving sparse systems with sparse right hand sides. + * Add support for sparse matrix time sparse self-adjoint view products. + * Improve BiCGSTAB robustness with restart. +* Support to external libraries + * New [MetisSupport](http://eigen.tuxfamily.org/dox-devel/group__MetisSupport__Module.html) module: wrapper to the famous graph partitioning library. + * New [SPQRSupport](http://eigen.tuxfamily.org/dox-devel/group__SPQRSupport__Module.html) module: wrapper to suitesparse's supernodal QR solver. + +Eigen 3.2 represents about 600 commits since Eigen 3.1. + +## [3.2-rc2] + +Released on July 19, 2013. + +Changes since 3.2-rc1: + +* Rename `DenseBase::isFinite()` to `allFinite()` to avoid a future naming collision. +* Fix an ICE with ICC 11.1. + +## [3.2-rc1] + +Released on July 17, 2013. + +Main changes since 3.2-beta1: +* New features: + * #562: Add vector-wise normalized and normalize functions. + * #564: Add `hasNaN` and `isFinite` members. + * #579: Add support for mixed static/dynamic-size `.block()`. + * #588: Add support for determinant in SparseLU. + * Add support in SparseLU to solve with L and U factors independently. + * Allow multiplication-like binary operators to be applied on type combinations supported by `scalar_product_traits`. + * #596: Add conversion from `SparseQR::matrixQ()` to a `SparseMatrix`. + * #553: Add support for sparse matrix time sparse self-adjoint view products. + +* Accuracy and performance: + * Improve BiCGSTAB robustness: fix a divide by zero and allow to restart with a new initial residual reference. + * #71: Enable vectorization of diagonal products in more cases. + * #620: Fix robustness and performance issues in JacobiSVD::solve. + * #609: Improve accuracy and consistency of the eulerAngles functions. + * #613: Fix accuracy of SSE sqrt for very small numbers. + * Enable SSE with ICC even when it mimics a gcc version lower than 4.2. + * Add SSE4 min/max for integers. + * #590 & #591: Minor improvements in NEON vectorization. + +* Bug fixes: + * Fix `HouseholderSequence::conjugate()` and `::adjoint()`. + * Fix SparseLU for dense matrices and matrices in non compressed mode. + * Fix `SparseMatrix::conservativeResize()` when one dimension is null. + * Fix `transposeInpPlace` for arrays. + * Fix `handmade_aligned_realloc`. + * #554: Fix detection of the presence of `posix_memalign` with mingw. + * #556: Workaround mingw bug with `-O3` or `-fipa-cp-clone` options. + * #608: Fix sign computation in LDLT. + * #567: Fix iterative solvers to immediately return when the initial guess is the true solution and for trivial solution. + * #607: Fix support for implicit transposition from dense to sparse vectors. + * #611: Fix support for products of the form `diagonal_matrix * sparse_matrix * diagonal_matrix`. + +* Others: + * #583: Add compile-time assertion to check DenseIndex is signed. + * #63: Add lapack unit tests. They are automatically downloaded and configured if `EIGEN_ENABLE_LAPACK_TESTS` is ON. + * #563: Assignment to `Block` is now allowed on non-compressed matrices. + * #626: Add assertion on input ranges for coeff* and insert members for sparse objects. + * #314: Move special math functions from internal to numext namespace. + * Fix many warnings and compilation issues with recent compiler versions. + * Many other fixes including #230, #482, #542, #561, #564, #565, #566, #578, #581, #595, #597, #598, #599, #605, #606, #615. + +## [3.1.3] + +Released on April 16, 2013 + +Changes since 3.1.2: + +* #526 - Fix linear vectorized transversal in linspace. +* #551 - Fix compilation issue when using `EIGEN_DEFAULT_DENSE_INDEX_TYPE`. +* #533 - Fix some missing const qualifiers in Transpose +* Fix a compilation with CGAL::Gmpq by adding explicit internal:: namespace when calling `abs()`. +* Fix computation of outer-stride when calling `.real()` or `.imag()`. +* Fix `handmade_aligned_realloc` (affected `conservativeResize()`). +* Fix sparse vector assignment from a sparse matrix. +* Fix `log(0)` with SSE. +* Fix bug in aligned_free with windows CE. +* Fix traits of `Map`. +* Fix a few warnings (#507, #535, #581). +* Enable SSE with ICC even when it mimics a gcc version lower than 4.2 +* Workaround [gcc-4.7 bug #53900](http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53900) (too aggressive optimization in our alignment check) + +## [3.2-beta1] + +Released on March 07, 2013 + +Main changes since 3.1: + +* Dense modules + * A new [`Ref<>`](http://eigen.tuxfamily.org/dox-devel/classEigen_1_1Ref.html) class allowing to write non templated function taking various kind of Eigen dense objects without copies. + * New [RealQZ](http://eigen.tuxfamily.org/dox-devel/classEigen_1_1RealQZ.html) factorization and [GeneralizedEigenSolver](http://eigen.tuxfamily.org/dox-devel/classEigen_1_1GeneralizedEigenSolver.html) + * Optimized outer products for non rank-1 update operations. + +* Sparse modules + * New [SparseLU](http://eigen.tuxfamily.org/dox-devel/group__SparseLU__Module.html) module: built-in sparse LU with supernodes and numerical row pivoting (port of SuperLU making the SuperLUSupport module obsolete). + * New [SparseQR](http://eigen.tuxfamily.org/dox-devel/group__SparseQR__Module.html) module: rank-revealing sparse QR factorization with numerical column pivoting. + * OrderingMethods: extended with [COLAMD](http://eigen.tuxfamily.org/dox-devel/classEigen_1_1COLAMDOrdering.html) ordering and a unified [ordering](http://eigen.tuxfamily.org/dox-devel/group__OrderingMethods__Module.html) API. + * Support for generic blocks of sparse matrices. + * Add conservative resize feature on sparse matrices. + * Add uniform support for solving sparse systems with sparse right hand sides. + +* Support to external libraries + * New [MetisSupport](http://eigen.tuxfamily.org/dox-devel/group__MetisSupport__Module.html) module: wrapper to the famous graph partitioning library. + * New [SPQRSupport](http://eigen.tuxfamily.org/dox-devel/group__SPQRSupport__Module.html) module: wrapper to suitesparse's supernodal QR solver. + +* Misc + * Improved presentation and clarity of Doxygen generated documentation (modules are now organized into chapters, treeview panel and search engine for quick navagitation). + * New compilation token `EIGEN_INITIALIZE_MATRICES_BY_NAN` to help debugging. + * All bug fixes of the 3.1 branch, plus a couple of other fixes (including 211, 479, 496, 508, 552) + +## [3.1.2] + +Released on Nov 05, 2012 + +Changes since 3.1.1: + +* #524 - Pardiso's parameter array does not have to be aligned! +* #521 - Disable `__cpuidex` on architectures different that x86 or x86-64 with MSVC. +* #519 - `AlignedBox::dim()` was wrong for dynamic dimensions. +* #515 - Fix missing explicit scalar conversion. +* #511 - Fix pretty printers on windows. +* #509 - Fix warnings with gcc 4.7 +* #501 - Remove aggressive mat/scalar optimization (was replaced by `mat*(1/scalar)` for non integer types). +* #479 - Use EISPACK's strategy re max number of iters in Schur decomposition. +* Add support for scalar multiple of diagonal matrices. +* Forward `resize()` function from Array/Matrix wrappers to the nested expression such that `mat.array().resize(a,b)` is now allowed. +* Windows CE: fix the lack of the `aligned_malloc` function on this platform. +* Fix comma initializer when inserting empty matrices. +* Fix `dense=sparse*diagonal` products. +* Fix compilation with `m.array().min(scalar)` and `m.array().max(scalar)`. +* Fix out-of-range memory access in GEMV (the memory was not used for the computation, only to assemble unaligned packets from aligned packet loads). +* Fix various regressions with MKL support. +* Fix aliasing issue in sparse matrix assignment. +* Remove stupid assert in blue norm. +* Workaround a weird compilation error with MSVC. + +## [3.1.1] + +Released on July 22, 2012 + +Changes since 3.1.0: +* [relicense to MPL2](https://www.eigen.tuxfamily.org/index.php?title=Main_Page#License) +* add a `EIGEN_MPL2_ONLY` build option to generate compiler errors when including non-MPL2 modules +* remove dynamic allocation for triangular matrix-matrix products of fixed size objects +* Fix possible underflow issues in SelfAdjointEigenSolver +* Fix issues with fixed-size Diagonal (sub/super diagonal size computation was wrong) +* #487 - Geometry module: `isometry * scaling` compilation error +* #486 - MKL support: fixed multiple-references linker errors with various decompositions +* #480 - work around compilation error on Android NDK due to isfinite being defined as a macro +* #485 - IterativeLinearSolvers: conflict between a typedef and template type parameter +* #479 - Eigenvalues/Schur: Adjust max iterations count to matrix size +* Fixed Geometry module compilation under MSVC +* Fixed Sparse module compilation under MSVC 2005 + +## [3.0.6] + +Released on July 9, 2012 + +Changes since 3.0.5: +* #447 - fix infinite recursion in `ProductBase::coeff()` +* #478 - fix RealSchur on a zero matrix +* #477 - fix warnings with gcc 4.7 +* #475 - `.exp()` now returns `+inf` when overflow occurs (SSE) +* #466 - fix a possible race condition in OpenMP environment (for non OpenMP thread model it is recommended to upgrade to 3.1) +* #362 - fix missing specialization for affine-compact `*` projective +* #451 - fix a clang warning +* Fix compilation of `somedensematrix.llt().matrixL().transpose()` +* Fix miss-use of the cost-model in Replicate +* Fix use of int versus Index types for `Block::m_outerStride` +* Fix ambiguous calls to some std functions +* Fix geometry tutorial on scalings +* Fix RVCT 3.1 compiler errors +* Fix implicit scalar conversion in Transform +* Fix typo in NumericalDiff (unsupported module) +* Fix LevenbergMarquart for non double scalar type (unsupported module) + +## [3.1.0] + +Released on June 24, 2012. + +Major changes between Eigen 3.0 and Eigen 3.1: +* New features + * **New set of officially supported Sparse Modules** + ** This includes sparse matrix storage, assembly, and many built-in (Cholesky, CG, BiCGSTAB, ILU), and third-party (PaStiX, Cholmod, UmfPack, SuperLU, Pardiso) solvers + ** See this [page](http://eigen.tuxfamily.org/dox-devel/TutorialSparse.html) for an overview of the features + * **Optional support for Intel MKL** + ** This includes the BLAS, LAPACK, VML, and Pardiso components + ** See this [page](http://eigen.tuxfamily.org/dox-devel/TopicUsingIntelMKL.html) for the details + * Core + ** New vector-wise operators: `*`, `/`, `*=`, `/=` + ** New coefficient-wise operators: `&&`, `||`, `min(Scalar)`, `max(Scalar)`, `pow`, `operator/(Scalar,ArrayBase)` + * Decompositions + ** Add incremental rank-updates in LLTand LDLT + ** New `SelfAdjointEigenSolver::computeDirect()` function for fast eigen-decomposition through closed-form formulas (only for 2x2 and 3x3 real matrices) +* Optimizations + * Memory optimizations in JacobiSVD and triangular solves. + * Optimization of reductions via partial unrolling (e.g., dot, sum, norm, etc.) + * Improved performance of small matrix-matrix products and some Transform<> operations + +Eigen 3.1 represents about 600 commits since Eigen 3.0. + +## [3.1.0-rc2] + +Released on June 21, 2012. + +Changes since 3.1.0-rc1: +* Fix a couple of compilation warnings +* Improved documentation, in particular regarding the Geometry and Sparse tutorials, and sparse solver modules +* Fix double preconditioner allocation in `JacobiSVD` +* #466: `RealSchur` failed on a zero matrix +* Update Adolc and MPReal support modules + +## [3.1.0-rc1] + +Released on June 14, 2012 + +Main changes since 3.1.0-beta1: +* #466: fix a possible race condition issue. from now, multithreaded applications that call Eigen from multiple thread must initialize Eigen by calling `initParallel()`. +* For consistency, `SimplicialLLT` and `SimplicialLDLT` now factorizes `P A P^-1` (instead of `P^-1 A P`). +* #475: now the vectorized `exp` operator returns +inf when overflow occurs +* Fix the use of MKL with MSVC by disabling MKL's pow functions. +* Avoid dynamic allocation for fixed size triangular solving +* Fix a compilation issue with ICC 11.1 +* Fix ambiguous calls in the math functors +* Fix BTL interface. + +## [3.1.0-beta1] + +Released on June 7, 2012 + +Main changes since 3.1.0-alpha2: +* **API changes** + * `SimplicialLLt` and `SimplicialLDLt` are now renamed `SimplicialLLT` and `SimplicialLDLT` for consistency with the other modules. + * The Pardiso support module is now spelled "PardisoSupport" +* Dense modules: + * Add `operator/(Scalar,ArrayBase)` and coefficient-wise pow operator. + * Fix automatic evaluation of expressions nested by Replicate (performance improvement) + * #447 - fix infinite recursion in `ProductBase::coeff()` + * #455 - add support for c++11 in `aligned_allocator` + * `LinSpace`: add a missing variant, and fix the size=1 case +* Sparse modules: + * Add an **IncompleteLU** preconditioner with dual thresholding. + * Add an interface to the parallel **Pastix** solver + * Improve applicability of permutations (add `SparseMatrixBase::twistedBy`, handle non symmetric permutations) + * `CholmodDecomposition` now has explicit variants: `CholmodSupernodalLLT`, `CholmodSimplicialLLT`, `CholmodSimplicialLDLT` + * Add analysePattern/factorize methods to iterative solvers + * Preserve explicit zero in a sparse assignment + * Speedup `sparse * dense` products + * Fix a couple of issues with Pardiso support +* Geometry module: + * Improve performance of some `Transform<>` operations by better preserving the alignment status. + * #415 - wrong return type in `Rotation2D::operator*=` + * #439 - add `Quaternion::FromTwoVectors()` static constructor + * #362 - missing specialization for affine-compact `*` projective +* Others: + * add support for RVCT 3.1 compiler + * New tutorial page on Map + * and many other bug fixes such as: #417, #419, #450 + +## [3.0.5] + +Released February 10, 2012 + +Changes since 3.0.4: +* #417 - fix nesting of `Map` expressions +* #415 - fix return value of `Rotation2D::operator*=` +* #410 - fix a possible out of range access in `EigenSolver` +* #406 - fix infinite loop/deadlock when using OpenMP and Eigen +* Changeset 4462 - fix broken asserts revealed by Clang +* Changeset 4457 - fix description of `rankUpdate()` in quick reference guide +* Changeset 4455 - fix out-of-range int constant in 4x4 inverse +* #398 - fix in slerp: the returned quaternion was not always normalized +* Changeset 4432 - fix asserts in eigenvalue decompositions +* Changeset 4416 - fix MSVC integer overflow warning + +## [3.1.0-alpha2] + +Released February 6, 2012 + +Main changes since 3.0.1-alpha1: +* New optional support for Intel MKL and other BLAS including: ([details](http://eigen.tuxfamily.org/dox-devel/TopicUsingIntelMKL.html)) + * BLAS (arbitrary BLAS) + * Intel LAPACKE + * Intel VML (coefficient-wise math operations) + * Intel PARDISO (sparse direct solver) +* Dense modules: + * improved performance of small matrix-matrix products + * Feature #319 - add a rankUpdate function to LDLt and LLT for updates/downdates + * Feature #400 - new coefficient wise min/max functions taking one scalar argument +* Sparse modules: + * new fast sparse matrix assembly interface from a random list of triplets (see `SparseMatrix::setFromTriplets()`) + * new shifting feature in SimplicialCholesky (see `SimplicialCholeskyBase::setShift()`) + * add checks for positive definiteness in SimplicialCholesky + * improved heuristic to predict the nnz of a `sparse*sparse` product + * add support for uncompressed SparseMatrix in CholmodSupport +* Geometry module: + * Feature #297 - add `ParametrizedLine::intersectionPoint()` and `intersectionParam()` functions +* Others: + * fix many warnings and compilation issues with ICC 12 and -strict-ansi + * fix some ICE with MSVC10 + * add the possibility to disable calls to cpuid (`-DEIGEN_NO_CPUID`) and other asm directives + * and many other bug fixes such as: #406, #410, #398, #396, #394, #354, #352, #301, + + +## [3.1.0-alpha1] + +Released December 6, 2011 + +Main changes since 3.0: +* Officially supported set of sparse modules. See this [page](http://eigen.tuxfamily.org/dox-devel/TutorialSparse.html) for an overview of the features. Main changes: + * new `SparseCore` module equivalent to the old `Sparse` module, the `Sparse` module is now a super module including all sparse-related modules + * the `SparseMatrix` class is now more versatile and supports an uncompressed mode for fast element insertion + * the `SparseMatrix` class now offer a unique and simplified API to insert elements + * `DynamicSparseMatrix` has been deprecated (moved into `unsupported/SparseExtra`) + * new conservative `sparse * sparse` matrix product which is also used by default + * new `SparseCholesky` module featuring the SimplicialLLT and SimplicialLDLT built-in solvers + * new `IterativeLinearSolvers` module featuring a conjugate gradient and stabilized bi-conjugate gradient iterative solvers with a basic Jacobi preconditioner +* New `SelfAdjointEigenSolver::computeDirect()` function for fast eigen-decomposition through closed-form formulas (only for 2x2 and 3x3 real matrices) +* New `LLT::rankUpdate()` function supporting both updates and down-dates +* Optimization of reduction via partial unrolling (e.g., dot, sum, norm, etc.) +* New coefficient-wise operators: `&&` and `||` +* Feature #157 - New vector-wise operations for arrays: `*`, `/`, `*=`, and `/=`. +* Feature #206 - Pre-allocation of intermediate buffers in JacobiSVD +* Feature #370 - New typedefs for AlignedBox +* All the fixes and improvements of the 3.0 branch up to the 3.0.4 release (see below) + + + +## [3.0.4] + +Released December 6, 2011 + +Changes since 3.0.3: + +* #363 - check for integer overflow in size computations +* #369 - Quaternion alignment is broken (and more alignment fixes) +* #354 - Converge better in SelfAdjointEigenSolver, and allow better handling of non-convergent cases +* #347 - Fix compilation on ARM NEON with LLVM 3.0 and iOS SDK 5.0 +* #372 - Put unsupported modules documentation at the right place +* #383 - Fix C++11 compilation problem due to some constructs mis-interpreted as c++11 user-defined literals +* #373 - Compilation error with clang 2.9 when exceptions are disabled +* Fix compilation issue with `QuaternionBase::cast` + + +## [2.0.17] + +Released December 6, 2011 + +Changes since 2.0.16: + +* Fix a compilation bug in `aligned_allocator`: the allocate method should take a void pointer +* Fix a typo in ParametrizedLine documentation + + +## [3.0.3] + +Released October 6, 2011 + +Changes since 3.0.2: + +* Fix compilation errors when Eigen2 support is enabled. +* Fix bug in evaluating expressions of the form `matrix1 * matrix2 * scalar1 * scalar2`. +* Fix solve using LDLT for singular matrices if solution exists. +* Fix infinite loop when computing SVD of some matrices with very small numbers. +* Allow user to specify pkgconfig destination. +* Several improvements to the documentation. + + +## [3.0.2] + +Released August 26, 2011 + +Changes since 3.0.1: + +* `Windows.h`: protect min/max calls from macros having the same name (no need to `#undef` min/max anymore). +* MinGW: fix compilation issues and pretty gdb printer. +* Standard compliance: fix aligned_allocator and remove uses of long long. +* MPReal: updates for the new version. +* Other fixes: + * fix aligned_stack_memory_handler for null pointers. + * fix std::vector support with gcc 4.6. + * fix linking issue with OpenGL support. + * fix SelfAdjointEigenSolver for 1x1 matrices. + * fix a couple of warnings with new compilers. + * fix a few documentation issues. + + +## [3.0.1] + +Released May 30, 2011 + +Changes since 3.0.0: + +* Fix many bugs regarding ARM and NEON (Now all tests succeed on ARM/NEON). +* Fix compilation on gcc 4.6 +* Improved support for custom scalar types: + * Fix memory leak issue for scalar types throwing exceptions. + * Fix implicit scalar type conversion. + * Math functions can be defined in the scalar type's namespace. +* Fix bug in trapezoidal matrix time matrix product. +* Fix asin. +* Fix compilation with MSVC 2005 (SSE was wrongly enabled). +* Fix bug in `EigenSolver`: normalize the eigen vectors. +* Fix Qt support in Transform. +* Improved documentation. + +## [2.0.16] + +Released May 28, 2011 + +Changes since 2.0.15: + +* Fix bug in 3x3 tridiagonlisation (and consequently in 3x3 selfadjoint eigen decomposition). +* Fix compilation for new gcc 4.6. +* Fix performance regression since 2.0.12: in some matrix-vector product, complex matrix expressions were not pre-evaluated. +* Fix documentation of Least-Square. +* New feature: support for `part`. +* Fix bug in SparseLU::setOrderingMethod. + +## [3.0.0] + +Released March 19, 2011, at the [meeting](https://www.eigen.tuxfamily.org/index.php?title=Paris_2011_Meeting). + +See the [Eigen 3.0 release notes](https://www.eigen.tuxfamily.org/index.php?title=3.0). + +Only change since 3.0-rc1: +* Fixed compilation of the unsupported 'openglsupport' test. + +## [3.0-rc1] + +Released March 14, 2011. + +Main changes since 3.0-beta4: + +* Core: added new `EIGEN_RUNTIME_NO_MALLOC` option and new `set_is_malloc_allowed()` option to finely control where dynamic memory allocation is allowed. Useful for unit-testing of functions that must not cause dynamic memory allocations. +* Core: SSE performance fixes (follow-up from #203). +* Core: Fixed crashes when using `EIGEN_DONT_ALIGN` or `EIGEN_DONT_ALIGN_STATICALLY` (#213 and friends). +* Core: `EIGEN_DONT_ALIGN` and `EIGEN_DONT_ALIGN_STATICALLY` are now covered by unit tests. +* Geometry: Fixed transform * matrix products (#207). +* Geometry: compilation fix for mixing CompactAffine with Homogeneous objects +* Geometry: compilation fix for 1D transform +* SVD: fix non-computing constructors (correctly forward `computationOptions`) (#206) +* Sparse: fix resizing when the destination sparse matrix is row major (#37) +* more Eigen2Support improvements +* more unit test fixes/improvements +* more documentation improvements +* more compiler warnings fixes +* fixed GDB pretty-printer for dynamic-size matrices (#210) + +## [3.0-beta4] + +Released February 28, 2011. + +Main changes since 3.0-beta3: + +* Non-vectorization bug fixes: + * fix #89: work around an extremely evil compiler bug on old GCC (<= 4.3) with the standard `assert()` macro + * fix Umfpack back-end in the complex case +* Vectorization bug fixes: + * fix a segfault in "slice vectorization" when the destination might not be aligned on a scalar (`complex`) + * fix #195: fast SSE unaligned loads fail on GCC/i386 and on Clang + * fix #186: worked around a GCC 4.3 i386 backend issue with SSE + * fix #203: SSE: a workaround used in pset1() resulted in poor assembly + * worked around a GCC 4.2.4 internal compiler error with vectorization of complex numbers + * lots of AltiVec compilation fixes + * NEON compilation fixes +* API additions and error messages improvements + * Transform: prevent bad user code from compiling + * fix #190: directly pass Transform Options to Matrix, allowing to use RowMajor. Fix issues in Transform with non-default Options. + * factorize implementation of standard real unary math functions, and add acos, asin +* Build/tests system + * Lots of unit test improvements + * fix installation of unsupported modules + * fixed many compiler warnings, especially on the Intel compiler and on LLVM/Clang + * CTest/CMake improvements + * added option to build in 32bit mode +* BLAS/LAPACK implementation improvements + * The Blas library and tests are now automatically built as part of the tests. + * expanded LAPACK interface (including syev) + * now Sparse solver backends use our own BLAS/LAPACK implementation + * fix #189 (cblat1 test failure) +* Documentation + * improved conservativeResize methods documentation + * documented sorting of eigenvalues + * misc documentation improvements + * improve documentation of plugins + +## [3.0-beta3] + +Released February 12, 2011. + +The biggest news is that the API is now **100% stable**. + +Main changes since 3.0-beta2: + +* The "too many to list them all" category: + * lots of bug fixes + * lots of performance fixes + * lots of compiler support fixes + * lots of warning fixes + * lots of unit tests improvements and fixes + * lots of documentation improvements + * lots of build system fixes +* API changes: + * replaced `ei_` prefix by `internal::` namespace. For example, `ei_cos(x)` becomes `internal::cos(x)`. + * renamed `PlanarRotation` -> `JacobiRotation` + * renamed `DenseStorageBase` -> `PlainObjectBase` + * HouseholderSequence API cleanup + * refactored internal metaprogramming helpers to follow closely the standard library + * made UpperBidiagonalization internal + * made BandMatrix/TridiagonalMatrix internal + * Core: also see below, "const correctness". + * Sparse: `EIGEN_YES_I_KNOW_SPARSE_MODULE_IS_NOT_STABLE_YET` must be defined to use Eigen/Sparse + * Core: `random()` now spans over range of width `RAND_MAX` +* New API: + * Core: added Map static methods taking strides + * SVD: added `jacobiSvd()` method + * Sparse: many misc improvements and new features. Improved support for Cholmod, Amd, SuperLU and other back-ends. + * Core: allow mixed real-complex dot products + * Geometry: allow mixed real-complex cross products + * Geometry: allow to pass Options parameters to Transform, Quaternion and other templates, to control memory alignment + * QR: add threshold API to FullPivHouseholderQR + * Core: added tan function +* Const correctness: + * Eigen now properly enforces const-correctness everywhere, for example with Map objects. This will break compilation of code that relied on former behavior. + * A new kind of test suite was added to check that, 'failtest'. +* BLAS/LAPACK: + * Complete BLAS library built on top of Eigen. Imported BLAS test suite, which allowed to fix many issues. + * Partial LAPACK implementation. Passing part of the LAPACK test suite, which also allowed to fix some issues. +* Eigen 2 Support: + * tons of improvements in `EIGEN2_SUPPORT` + * new incremental migration path: see http://eigen.tuxfamily.org/dox-devel/Eigen2SupportModes.html + * imported a copy of the Eigen 2 test suite, made sure that Eigen 3 passes it. That also allowed to fix several issues. + + +## [3.0-beta2] + +Released October 15, 2010. + +Main changes since 3.0-beta1: + +* Add support for the vectorization of `std::complex<>` with SSE, AltiVec and NEON. +* Add support for mixed `real * complex` matrix products with vectorization. +* Finalize the JacobiSVD class with: compile time options, thin/full decompositions, and least-square solving. +* Several improvement of the Transform class. In particular, there is no default mode anymore. +* New methods: `middleRows()`, `middleCols()`, `TriangularMatrix::conjugate()` +* New unsupported modules: OpenGL, MPFR C++ +* Many improvements in the support of empty objects. +* Many improvements of the vectorization logic. +* Add the possibility to extend QuaternionBase. +* Vectorize Quaternion multiplication with double. +* Significant improvements of the documentation. +* Improved compile time errors. +* Enforce static allocation of temporary buffers in gemm (when possible). +* Fix aligned_delete for null pointers and non trivial dtors. +* Fix eigen decomposition of 3x3 float matrices. +* Fix 4x4 matrix inversions (vectorization). +* Many fixes in QR: solving with `m>n`, use of rank, etc. +* Fixes for MSVC for windows mobile and CLang. +* Remove the Taucs backend (obsolete). +* Remove the old SVD class (was causing too much troubles, a new decompozition based on bidiagonalisation/householder should come back soon, `JacobiSVD` can be used meanwhile). + +## [2.0.15] + +Released July 16, 2010 + +Changes since 2.0.14: + +* Fix bug: certain cases of matrix-vector product (depending on storage order) were blocked by an assertion failure. +* Fix LU and QR solve when rank==0, fix LLT when the matrix is purely 0. +* Fix a couple of bugs with QR solving especially with rows>cols. +* Fix bug with custom scalar types that have non-trivial destructor. +* Fix for ICC in SSE code. +* Fix some C++ issues found by Clang (patch by Nick Lewycky). + +## [3.0-beta1] + +Released July 5, 2010 + +See the [announcement](https://www.eigen.tuxfamily.org/index.php?title=3.0). + +## [2.0.14] + +Released June 22, 2010 + +Changes since 2.0.13: + +* Fix #141: crash in SSE (alignment problem) when using dynamic-size matrices with a max-size fixed at compile time that is not a multiple of 16 bytes. For example, `Matrix`. +* Fix #142: LU of fixed-size matrices was causing dynamic memory allocation (patch by Stuart Glaser). +* Fix #127: remove useless static keywords (also fixes warnings with clang++). + +## [2.0.13] + +Released June 10, 2010 + +Changes since 2.0.12: + +* Fix #132: crash in certain matrix-vector products. Unit test added. +* Fix #125: colwise `norm()` and `squaredNorm()` on complex types do not return real types +* Fully support the QCC/QNX compiler (thanks to Piotr Trojanek). The support in 2.0.12 was incomplete. The whole test suite is now successful. +* As part of the QCC support work, a lot of standards compliance work: put `std::` in front of a lot of things such as `size_t`, check whether the math library needs to be linked to explicitly. +* Fix precision issues in LDLT. The `isPositiveDefinite()` method is now always returning true, but it was conceptually broken anyway, since a non-pivoting LDLT decomposition can't know that. +* Compilation fix in `ldlt()` on expressions. +* Actually install the Eigen/Eigen and Eigen/Dense public headers! +* Fix readcost for complex types. +* Fix compilation of the BTL benchmarks. +* Some dox updates. + +## [2.0.12] + +Released February 12, 2010 + +Changes since 2.0.11: + +* `EIGEN_DEFAULT_TO_ROW_MAJOR` is fully supported and tested. +* Several important fixes for row-major matrices. +* Fix support of several algorithms for mixed fixed-dynamic size matrices where the fixed dimension is greater than the dynamic dimension. For example: `Matrix(3,2)` +* fix `EIGEN_DONT_ALIGN`: now it _really_ disables vectorization (was giving a `#error` unless you also used `EIGEN_DONT_VECTORIZE`). +* Fix #92: Support QNX's QCC compiler (patch by Piotr Trojanek) +* Fix #90, missing type cast in LU, allow to use LU with MPFR (patch by 'Wolf'). +* Fix ICC compiler support: work around a bug present at least in ICC 11.1. +* Compilation fixes for `computeInverse()` on expressions. +* Fix a gap in a unit-test (thanks to Jitse Niesen) +* Backport improvements to benchmarking code. +* Documentation fixes + +## [2.0.11] + +Released January 10, 2010 + +Changes since 2.0.10: + +* Complete rewrite of the 4x4 matrix inversion: we now use the usual cofactors approach, so no numerical stability problems anymore (bug #70) +* Still 4x4 matrix inverse: SSE path for the float case, borrowing code by Intel, giving very high performance. +* Fix crash happening on 32-bit x86 Linux with SSE, when double's were created at non-8-byte-aligned locations (bug #79). +* Fix bug in Part making it crash in certain products (bug #80). +* Precision improvements in Quaternion SLERP (bug #71). +* Fix sparse triangular solver for lower/row-major matrices (bug #74). +* Fix MSVC 2010 compatibility. +* Some documentation improvements. + +## [2.0.10] + +Released November 25, 2009 + +Changes since 2.0.9: + +* Rewrite 4x4 matrix inverse to improve precision, and add a new unit test to guarantee that precision. It's less fast, but it's still faster than the cofactors method. +* Fix bug #62: crash in SSE code with MSVC 2008 (Thanks to Hauke Heibel). +* Fix bug #65: `MatrixBase::nonZeros()` was recursing infinitely +* Fix PowerPC platform detection on Mac OSX. +* Prevent the construction of bogus MatrixBase objects and generate good compilation errors for that. Done by making the default constructor protected, and adding some private constructors. +* Add option to initialize all matrices by zero: just #define `EIGEN_INITIALIZE_MATRICES_BY_ZERO` +* Improve Map documentation +* Install the pkg-config file to share/pkgconfig, instead of lib/pkgconfig (thanks to Thomas Capricelli) +* fix warnings +* fix compilation with MSVC 2010 +* adjust to repository name change + +## [2.0.9] + +Released October 24, 2009 + +Changes since 2.0.8: + +* Really fix installation and the pkg-config file. +* Install the `NewStdVector` header that was introduced in 2.0.6. + +## [2.0.8] + +Released October 23, 2009 + +Changes since 2.0.7: + +* fix installation error introduced in 2.0.7: it was choking on the pkg-config file eigen2.pc not being found. The fix had been proposed long ago by Ingmar Vanhassel for the development branch, and when recently the pkg-config support was back-ported to the 2.0 branch, nobody thought of backporting this fix too, and apparently nobody tested "make install" ! +* SVD: add default constructor. Users were relying on the compiler to generate one, and apparenty 2.0.7 triggered a little MSVC 2008 subtlety in this respect. Also added an assert. + +## [2.0.7] + +Released October 22, 2009 + +Changes since 2.0.6: + +* fix bug #61: crash when using Qt `QVector` on Windows 32-bit. By Hauke Heibel. +* fix bug #10: the `reallocateSparse` function was half coded +* fix bug in `SparseMatrix::resize()` not correctly initializing by zero +* fix another bug in `SparseMatrix::resize()` when `outerSize==0`. By Hauke Heibel. +* fully support GCC 3.3. It was working in 2.0.2, there was a compilation error in 2.0.6, now for the first time in 2.0.7 it's 100% tested (the test suite passes without any errors, warnings, or failed tests). +* SVD: add missing assert (help catch mistakes) +* fixed warnings in unit-tests (Hauke Heibel) +* finish syncing `Memory.h` with the devel branch. This is cleaner and fixes a warning. The choice of system aligned malloc function may be affected by this change. +* add pkg-config support by Rhys Ulerich. +* documentation fix and doc-generation-script updates by Thomas Capricelli + +## [2.0.6] + +Released September 23, 2009 + +Changes since 2.0.5: + +* fix bug: visitors didn't work on row-vectors. +* fix bug #50: compilation errors with `swap()`. +* fix bug #42: Add `Transform::Identity()` as mentioned in the tutorial. +* allow to disable all alignment code by defining `EIGEN_DONT_ALIGN` (backport from devel branch). +* backport the devel branch's `StdVector` header as `NewStdVector`. You may also #define `EIGEN_USE_NEW_STDVECTOR` to make `StdVector` use it automatically. However, by default it isn't used by `StdVector`, to preserve compatibility. +* Vectorized quaternion product (for float) by Rohit Garg (backport from devel branch). +* allow to override `EIGEN_RESTRICT` and add `EIGEN_DONT_USE_RESTRICT_KEYWORD` +* fix a warning in `ei_aligned_malloc`; fixed by backporting the body from the devel branch; may result in a different choice of system aligned malloc function. +* update the documentation. + +## [2.0.5] + +Released August 22, 2009 + +Changes since 2.0.4: + +* fix bug: in rare situations involving mixed storage orders, a matrix product could be evaluated as its own transpose +* fix bug: `LU::solve()` crashed when called on the LU decomposition of a zero matrix +* fix bug: `EIGEN_STACK_ALLOCATION_LIMIT` was too high, resulting in stack overflow for a user. Now it is set as in the devel branch. +* fix compilation bug: our `StdVector` header didn't work with GCC 4.1. (Bug #41) +* fix compilation bug: missing return statement in `Rotation2D::operator*=` (Bug #36) +* in StdVector, a more useful `#error` message about the #including order +* add `EIGEN_TRANSFORM_PLUGIN` allowing to customize the Transform class +* fix a warning with MSVC +* fix a bug in our cmake code when building unit-tests (thanks to Marcus Hanwell) +* work around a bug in cmake that made it fail to build unit-tests when fortran wasn't installed +* in our cmake code, remove the part about retrieving the mercurial info and appending it to the version number in the dox +* dox: remove the old example list +* fix the option to build a binary library, although it's not very useful and will be removed +* add basic .hgignore file and script to build the docs (thanks to Thomas Capricelli) + +## [2.0.4] + +Released August 1, 2009 + +Changes since 2.0.3: +* Several fixes in the overloaded new and delete operators. Thanks to Hauke Heibel. +* compilation fix: add the missing `ei_atan2` function. Thanks to Manuel Yguel. +* Use `ei_atan2` instead of using `std::atan2` directly. +* several compilation fixes in the Qt interoperability code: methods `toQTransform()` and `toQMatrix()`. Thanks to Anthony Truchet. +* compilation fix and simplification in Matrix assignment +* compilation fixes in `a *= b` and `a = a*b` when a has to be resized. +* remove a "stupid" version of `ei_pow`. for integers for gcc >= 4.3 +* bug fix in `Quaternion::setFromTwoVectors()` +* several ctest improvements: use our own dashboard, use a separate project for the 2.0 branch. +* documentation: improvement on the pages on unaligned arrays (the online copies have been updated immediately). + +## [2.0.3] + +Released June 21, 2009 + +Changes since 2.0.2: +* precision and reliability fixes in various algorithms, especially LLT, QR, Tridiagonalization, and also a precision improvement in LU. +* fix LLT and LDLT solve() on uninitialized result (was causing an assertion). +* add Eigen/Eigen and Eigen/Dense headers for convenience +* document a newly found cause for the "unaligned array" assertion +* backport documentation improvements on transpose() and adjoint() +* updates in the Sparse module (was needed to support KDE 4.3) + +## [2.0.2] + +Released May 22, 2009 + +Changes since 2.0.1: +* Fix `linearRegression()` compilation, actually it is reimplemented using the better fitHyperplane() which does total least-squares. +* Add missing `setZero()` etc... variants taking size parameters and resizing. These were mentioned in the tutorial but weren't implemented. +* Fix `posix_memalign` platform check. This fixes portability issues. Thanks to Ross Smith. +* Fix detection of SSE2 on the Windows 64-bit platform. +* Fix compatibility with the old GCC 3.3: it is now fully supported again. +* Fix warnings with recent GCC (4.4.0 and 4.3.3). + +## [2.0.1] + +Released April 14, 2009 + +Changes since 2.0.0: +* disable alignment altogether on exotic platforms on which we don't vectorize anyway. This allows e.g. to use Eigen on ARM platforms. +* new StdVector header with a new workaround for the problems with std::vector. +* workarounds for MSVC internal compiler errors +* MSVC 9 compilation fix (patch by Hauke Heibel) +* fixes for various bugs in Maps/Blocks that could give wrong results +* fix bug in 4x4 matrix inverse that could give wrong results +* compilation fix in SliceVectorization +* fix wrong static assertion (patch by Markus Moll) +* add missing operators in `aligned_allocator` (thanks to Hauke Heibel) + +## [2.0.0] + +Released February 2, 2009 \ No newline at end of file