109 KiB
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()andTransform::computeScalingRotation()are now more continuous across degeneracies (see !349).
New features
- Add c++11
initializer_listconstructors to Matrix and Array [doc] - Add STL-compatible iterators for dense expressions [doc].
- New versatile API for sub-matrices, slices, and indexed views [doc].
- Add C++11 template aliases for Matrix, Vector, and Array of common sizes, including generic
Vector<Type,Size>andRowVector<Type,Size>aliases [doc]. - New support for
bfloat16.
New backends
- Arm SVE: fixed-length Scalable Vector Extensions vectors for
uint32_tandfloatare available. - MIPS MSA:: MIPS SIMD Architecture (MSA)
- AMD ROCm/HIP: generic GPU backend that unifies support for NVIDIA/CUDA and AMD/HIP.
- Power 10 MMA: initial support for Power 10 matrix multiplication assist instructions 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 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
sinandcoswith huge arguments. - New faithfully rounded algorithm for
pow(x,y).
- Much improved implementation of
- Speedups from (new or improved) vectorized versions of
pow,log,sin,cos,arg,pow,log2, complexsqrt,erf,expm1,logp1,logistic,rint,gammaandbesselfunctions, 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
HouseholderSequencewith the identity, as well as the evaluation of aHouseholderSequenceto 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
KLUSupportmodule. SuiteSparse must be installed to use this module. SparseCholeskynow 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, andF16Cconversion intrinsics. - Better vectorization support added across all backends.
- Native support added for ARM
- Improved bool support
- Partial vectorization support added for boolean operations.
- Significantly improved performance (x25) for logical operations with
MatrixorTensorofbool.
- 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, anduint8_t - Emulates
bfloat16support when usingEigen::bfloat16 - Supports emulated and native
float16when usingEigen::half
- Now provides vectorization for
- SSE/AVX/AVX512
- General performance improvements and bugfixes.
- Enabled AVX512 instructions by default if available.
- New
std::complex,half, andbfloat16vectorization 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_kernelspecific 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).
- Several optimized math functions added, better support for
- ZVector
- Vectorized
floatandstd::complex<float>support added. - Added z14 support.
- Vectorized
- 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.
- Redesigned SYCL implementation for use with the [https://eigen.tuxfamily.org/dox/unsupported/eigen_tensors.html Tensor] module, which can be enabled by defining
Miscellaneous API Changes
- New
setConstant(...)methods for preserving one dimension of a matrix by passing inNoChange. - Added
setUnit(Index i)for vectors that sets the ''i'' th coefficient to one and all others to zero. - Added
transpose(),adjoint(),conjugate()methods toSelfAdjointView. - Added
shiftLeft<N>()andshiftRight<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
VectorwiseOpby defining a fileEIGEN_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
NaNPropagationtemplate argument to control whether NaNs are propagated or suppressed in elementwisemin/maxand corresponding reductions onArray,Matrix, andTensor.
New low-latency non-blocking ThreadPool module
- Originally a part of the Tensor module,
Eigen::ThreadPoolis 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_SAMEto 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 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 optionEIGEN_DOC_USE_MATHJAXto 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_integraltostd::is_integralin c++11 and fixinternal::is_integral<size_t/ptrdiff_t>with MSVC 2013 and older. - #1741: Fix
self_adjoint*matrix,triangular*matrix, andtriangular^1*matrixwith 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;withC.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
- Misc commits
- Commit
5f1082d0b: FixQuaternionBase::castfor 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: Providenumext::[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 inSelfAdjointEigenSolver.h - Commit
6ed74ac97: Makedigits10()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: ProvideEIGEN_HAS_C99_MATHwhen using MSVC. - Commit
7c4208450: Various fixes in polynomial solver and its unit tests. - Commit
e777674a8and4415d4e2d: 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 ofRef<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.
- Commit
- 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'salloc-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.
- Commit
[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_coherentfor nested expression of constant ADs. - #1761: Fall back
is_integraltostd::is_integralin c++11 and fixinternal::is_integral<size_t/ptrdiff_t>with MSVC 2013 and older. - #1741: Fix
self_adjoint*matrix,triangular*matrix, andtriangular^1*matrixwith 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;withC.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
- Misc commits
- Commit
5f1082d0b: FixQuaternionBase::castfor 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: Providenumext::[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: ProvideEIGEN_HAS_C99_MATHwhen using MSVC. - Commit
7c4208450: Various fixes in polynomial solver and its unit tests. - Commit
e777674a8and4415d4e2d: 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 from2df4f00246) - Commit
7b93328ba: Enable construction ofRef<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
- 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'salloc-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 testnumext. - Commit
65a6d4151: Fix nonnull-compare warning in testgeo_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.
- Commit
[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
computeInverseWithCheckfor complexes (8be258ef0b6d) - #1521: avoid signalling
NaNin 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::tomemcpy(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)
- #1516: add assertion for out-of-range diagonal index in
-
Compiler support:
- #1555: compilation fix with XLC
- Workaround MSVC 2013 ambiguous calls (1c7b59b0b5f4)
- Adds missing
EIGEN_STRONG_INLINEto 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-equalwarnings by callingstd::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, nonAVX512ERCPUs,apply_rotation_in_the_planeb64275e912ba 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/pmaxbehave on Altivec/VSX as on x86 regarding NaNs (d0af83f82b19)
- Several AVX512 fixes for
-
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 of1/highest()that might underflow (dd823c64ade7) - #1532: disable
stl::*_negatein C++17 (they are deprecated) (88e9452099d5) - Add C++11
max_digits10for 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 introducingEIGEN_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_3unit test - Changeset eda96fd2fa30: Fix uninitialized output argument.
- Changeset 75a12dff8ca4: Handle min/max/inf/etc issue in
cuda_fp16.hdirectly intest/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_viewproduct. - #1417: make LinSpace compatible with std::complex.
- #1400: fix
stableNormalignment issue withEIGEN_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.
- Fix
- 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 : -xwithxanAutoDiffScalar - Fix compilation of matrix log with Map as input.
- Add specializations of
std::numeric_limitsforEigen::halfand andAutoDiffScalar - 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_tto 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*densewith 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)withn==0or thehigh<lowcase. - #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).
- #1379: fix compilation in
- 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_tinstead of Index in sefl-adjointmatrix * vector - #1378: fix doc (
DiagonalIndexvsDiagonal).
[3.3.2]
Released on January 18, 2017.
Changes since 3.3.1:
- General:
- Add
transpose,adjoint,conjugatemethods toSelfAdjointView(useful to write generic code) - Make sure that
HyperPlane::transformmaintains 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, ...
- Add
- Regressions:
- #1358: fix compilation of
sparse += sparse.selfadjointView(). - #1359: fix compilation of
sparse /=scalar,sparse *=scalar, andcol_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()
- #1358: fix compilation of
- Performance:
- Improve code generation for
mat*vecon 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/ytovec*(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()
- Improve code generation for
- Others:
- Fix BLAS backend for symmetric rank K updates.
- #1360: fix
-0vs+0issue 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_productandmat+=selfadjoint_view - Fix regression in assignment of sparse block to sparse block.
- Fix a memory leak in
Ref<SparseMatrix>andRef<SparseVector>. - #1351: fix compilation of random with old compilers.
- Fix a performance regression in (mat*mat)vec for which matmat 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_BYTESandEIGEN_MAX_STATIC_ALIGN_BYTES, and reflect in the doc thatEIGEN_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.
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.
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).
- Fix a regression in
X = (X*X.transpose())/scalarwithXrectangular (Xwas 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 * scalingandProjective *= 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 whenq_wis negative.
- #1304: Fix
- 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 * scalingandProjective *= 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_prefetchfor 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.
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*cby rewriting them asd?=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_assertmacro - #1278: code formatting
- #1270: by-pass hand written
pmaddwith 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.
Main changes since 3.3-beta1:
-
Dense features:
- #707: Add support for inplace 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 scalarexpr and exprscalar 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()anddiagonal() - #823: add
Quaternion::UnitRandom()method. - Add exclusive or operator for bool arrays.
- Relax dependency on MKL for
EIGEN_USE_BLASandEIGEN_USE_LAPACKE: any BLAS and LAPACK libraries can now be used as backend (see doc). - 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
- 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 enablesA.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::solveto 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::matrixRis 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*Vector4fis 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*vectorproducts. - #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
- #256: enable vectorization with unaligned loads/stores. This concerns all architectures and all sizes. This new behavior can be disabled by defining
-
Doc:
- Add documentation and exemple for matrix-free solving.
- A new documentation page summarizing coefficient-wise math functions.
- #1144: clarify the doc about aliasing in case of resizing and matrix product.
- A new documentation page 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_VERoption to limit the C++ version to be used, as well as fine grained options to control individual language features. - A new ScalarBinaryOpTraits class allowing to control how different scalar types are mixed.
NumTraitsnow exposes adigits10function makinginternal::significant_decimals_impldeprecated.- 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::listandstd::dequespecializations 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_LIMITis 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_mallocspecial paths. - Internal: Remove custom unaligned loads for SSE
- Internal: introduce
[U]IntPtrtypes to be used for casting pointers to integers. - Internal:
NumTraitsnow exposesinfinity() - Internal:
EvalBeforeNestingBitis 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_m128and_mm256_setr_m128in 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::valuePtrandinnerIndexPtrproperly 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_FMAon 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::Optionsin 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()forAutoDiffScalarwith custom nested scalar type.
- #1144: fix regression in
[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_allocatorc++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
valuePtrandinnerIndexPtrproperly return null for empty sparse matrices. - #1170: skip calls to
memcpy/memmovefor 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::solveuserank()instead ofnonzeroPivots(). - 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::listandstd::dequespecializations such that our aligned allocator is automatically activatived only when the user did not specified an allocator (or specified the defaultstd::allocator).
- Make
-
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.
Main changes since 3.3-alpha1:
-
Dense features:
- Add
LU::transpose().solve()andLU::adjoint().solve()API. - Add
Array::rsqrt()method as a more efficient shorcut forsqrt().inverse(). - Add
Array::sign()method for real and complexes. - Add
lgamma,erf, anderfcfunctions 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_PLUGINandEIGEN_QUATERNION_PLUGIN. - #1074: forbid the creation of PlainObjectBase objects.
- Add
-
Sparse features:
- Add IncompleteCholesky preconditioner.
- Improve support for matrix-free iterative solvers
- Extend
setFromTripletsAPI 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_longbySuiteSparse_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/isinfin 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.
- Improve support for
-
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/coeffReffor non-empty compressed matrix. - #1113: fix name conflict with C99's "I".
- #1075: fix
AlignedBox::samplefor 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
IterativeLinearSolversmodule compatible with MPL2-only mode by defaulting toCOLAMDOrderingandNaturalOrderingfor ILUT and ILLT respectively. - #266: backport support for c++11 move semantic
operator/=(Scalar)now performs a true division (instead ofmat*(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
setIdenityfor non-compressed sparse-matrix - #1086: add support for recent SuiteSparse versions
- Add support for
-
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_PREFIXprefix to conform to cmake install'sDESTINATIONparameter. - unsupported/ArpackSupport is now properly installed by make install.
- #1080: warning fixes
- Add overloads for real-scalar times
[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.
[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::determinantmethod - 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
- Fix usage of
[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 * 0xNmatrix products. - #859: fix returned values for vectorized versions of
exp(NaN),log(NaN),sqrt(NaN)andsqrt(-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.
- Enable
-
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.
- #894: fix the sign returned by LDLT for multiple calls to
-
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::blockfor const matrices (the generic path was used). - Fix memory pre-allocation when permuting inner vectors of a sparse matrix.
- Fix
SparseQR::rankfor a completely empty matrix. - Fix
SparseQRfor row-major inputs. - Fix
SparseLU::absDeterminantand 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.
- Fix
-
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 aRowVectorXfwhich can be seen as a degenerateMatrixXf(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:
CommaInitializerproduced wrong assertions in absence of Return-Value-Optimization.
- Relax Ref such that
-
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_MAJORin BlockHouseholder.
- Add a
-
Sparse:
- #838: Fix
dense * sparseandsparse * denseouter 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 fixset_from_tripletstemporary matrix type. - #647: Use
smart_copyinstead of bitwise memcpy in CompressedStorage. - GMRES: Initialize essential Householder vector with correct dimension.
- #838: Fix
-
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.
- #807: Missing scalar type cast in
-
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*toint*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 + dm1is 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()andcwiseMax()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_MATHis 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
FullPivHouseholderQRreturn least-square solution if there is no exact solution. - #678: Fix
fullPivHouseholderQRfor 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
isCompressedtoMappedSparseMatrixfor compatibility. - #664: Support iterators without
operator<insetFromTriplets(). - 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<>class allowing to write non templated function taking various kind of Eigen dense objects without copies. - New RealQZ factorization and GeneralizedEigenSolver.
- 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().
- New
- Sparse world
- New SparseLU module: built-in sparse LU with supernodes and numerical row pivoting (port of SuperLU making the SuperLUSupport module obsolete).
- New SparseQR module: rank-revealing sparse QR factorization with numerical column pivoting.
- New COLAMD ordering and unified ordering API.
- 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 module: wrapper to the famous graph partitioning library.
- New SPQRSupport 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()toallFinite()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
hasNaNandisFinitemembers. - #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 aSparseMatrix. - #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
transposeInpPlacefor arrays. - Fix
handmade_aligned_realloc. - #554: Fix detection of the presence of
posix_memalignwith mingw. - #556: Workaround mingw bug with
-O3or-fipa-cp-cloneoptions. - #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.
- Fix
-
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_TESTSis 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(affectedconservativeResize()). - 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 (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<>class allowing to write non templated function taking various kind of Eigen dense objects without copies. - New RealQZ factorization and GeneralizedEigenSolver
- Optimized outer products for non rank-1 update operations.
- A new
-
Sparse modules
- New SparseLU module: built-in sparse LU with supernodes and numerical row pivoting (port of SuperLU making the SuperLUSupport module obsolete).
- New SparseQR module: rank-revealing sparse QR factorization with numerical column pivoting.
- OrderingMethods: extended with COLAMD ordering and a unified ordering 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 module: wrapper to the famous graph partitioning library.
- New SPQRSupport 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_NANto 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
__cpuidexon 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 thatmat.array().resize(a,b)is now allowed. - Windows CE: fix the lack of the
aligned_mallocfunction on this platform. - Fix comma initializer when inserting empty matrices.
- Fix
dense=sparse*diagonalproducts. - Fix compilation with
m.array().min(scalar)andm.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
- add a
EIGEN_MPL2_ONLYbuild 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 * scalingcompilation 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+infwhen 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 for an overview of the features
- Optional support for Intel MKL ** This includes the BLAS, LAPACK, VML, and Pardiso components ** See this page 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:
RealSchurfailed 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,
SimplicialLLTandSimplicialLDLTnow factorizesP A P^-1(instead ofP^-1 A P). - #475: now the vectorized
expoperator 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
SimplicialLLtandSimplicialLDLtare now renamedSimplicialLLTandSimplicialLDLTfor 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
- Add
- 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) CholmodDecompositionnow has explicit variants:CholmodSupernodalLLT,CholmodSimplicialLLT,CholmodSimplicialLDLT- Add analysePattern/factorize methods to iterative solvers
- Preserve explicit zero in a sparse assignment
- Speedup
sparse * denseproducts - 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
- Improve performance of some
- 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
Mapexpressions - #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)
- 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*sparseproduct - add support for uncompressed SparseMatrix in CholmodSupport
- new fast sparse matrix assembly interface from a random list of triplets (see
- Geometry module:
- Feature #297 - add
ParametrizedLine::intersectionPoint()andintersectionParam()functions
- Feature #297 - add
- 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 for an overview of the features. Main changes:
- new
SparseCoremodule equivalent to the oldSparsemodule, theSparsemodule is now a super module including all sparse-related modules- the
SparseMatrixclass is now more versatile and supports an uncompressed mode for fast element insertion - the
SparseMatrixclass now offer a unique and simplified API to insert elements DynamicSparseMatrixhas been deprecated (moved intounsupported/SparseExtra)- new conservative
sparse * sparsematrix product which is also used by default
- the
- new
SparseCholeskymodule featuring the SimplicialLLT and SimplicialLDLT built-in solvers - new
IterativeLinearSolversmodule featuring a conjugate gradient and stabilized bi-conjugate gradient iterative solvers with a basic Jacobi preconditioner
- new
- 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#undefmin/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.
See the Eigen 3.0 release notes.
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_MALLOCoption and newset_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_ALIGNorEIGEN_DONT_ALIGN_STATICALLY(#213 and friends). - Core:
EIGEN_DONT_ALIGNandEIGEN_DONT_ALIGN_STATICALLYare 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
- fix #89: work around an extremely evil compiler bug on old GCC (<= 4.3) with the standard
- 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
- fix a segfault in "slice vectorization" when the destination might not be aligned on a scalar (
- 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 byinternal::namespace. For example,ei_cos(x)becomesinternal::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_YETmust be defined to use Eigen/Sparse - Core:
random<interger type>()now spans over range of widthRAND_MAX
- replaced
- 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.
- tons of improvements in
[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 * complexmatrix 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,
JacobiSVDcan 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.
[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()andsquaredNorm()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 assize_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_MAJORis 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#errorunless you also usedEIGEN_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
NewStdVectorheader 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
QVectoron Windows 32-bit. By Hauke Heibel. - fix bug #10: the
reallocateSparsefunction was half coded - fix bug in
SparseMatrix::resize()not correctly initializing by zero - fix another bug in
SparseMatrix::resize()whenouterSize==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.hwith 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
StdVectorheader asNewStdVector. You may also #defineEIGEN_USE_NEW_STDVECTORto makeStdVectoruse it automatically. However, by default it isn't used byStdVector, to preserve compatibility. - Vectorized quaternion product (for float) by Rohit Garg (backport from devel branch).
- allow to override
EIGEN_RESTRICTand addEIGEN_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_LIMITwas too high, resulting in stack overflow for a user. Now it is set as in the devel branch. - fix compilation bug: our
StdVectorheader 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
#errormessage about the #including order - add
EIGEN_TRANSFORM_PLUGINallowing 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_atan2function. Thanks to Manuel Yguel. - Use
ei_atan2instead of usingstd::atan2directly. - several compilation fixes in the Qt interoperability code: methods
toQTransform()andtoQMatrix(). Thanks to Anthony Truchet. - compilation fix and simplification in Matrix assignment
- compilation fixes in
a *= banda = a*bwhen 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_memalignplatform 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