| # 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<Type,Size>` and `RowVector<Type,Size>` 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<float>` 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<N>()` and `shiftRight<N>()` 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<size_t/ptrdiff_t>` 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<VectorType>` 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<size_t/ptrdiff_t>` 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<VectorType>` 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<UpperUnit>()*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<const Quaternion>::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<Xpr>` 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<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 <Eigen/Sparse>` 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<low` case. |
| * #1381: fix `sparse.diagonal()` used as a rvalue. |
| * #1384: fix evaluation of "sparse/scalar" that used the wrong evaluation path. |
| * #478: fix regression in the eigen decomposition of zero matrices. |
| * Fix a compilation issue with MSVC regarding the usage of `CUDACC_VER` |
| * #1393: enable Matrix/Array explicit constructor from types with conversion operators. |
| * #1394: fix compilation of `SelfAdjointEigenSolver<Matrix>(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<SparseMatrix>` and `Ref<SparseVector>`. |
| * #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<float>` 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<multi_prec>` 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<Infinity>` 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<string>` |
| * 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<SparseMatrix>::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<SparseVector>`. |
| * Add supports for real mul/div `sparse<complex>` operations. |
| * #1086: replace deprecated `UF_long` by `SuiteSparse_long`. |
| * Make `Ref<SparseMatrix>` 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<SparseMatrix>` 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<double>` 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<complex>` 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<Packet4i>` 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<MatrixXf>` 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<Quaternion>`. |
| * 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<SparseMatrix>` 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<Quaternion>`. |
| * 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<SelfAdjoint>`. |
| * 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<double>`) |
| * 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<interger type>()` 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<double,Dynamic,Dynamic,AutoAlign,5,5>`. |
| * 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<float,3,Dynamic>(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 |