Changelog
[Unreleased]
[3.4.0]
Released on August 18, 2021
Notice: 3.4.x will be the last major release series of Eigen that will support c++03.
Breaking changes
- Using float or double for indexing matrices, vectors and arrays will now fail to compile
- Behavioral change:
Transform::computeRotationScaling()
and Transform::computeScalingRotation()
are now more continuous across degeneracies (see !349).
New features
- Add c++11
initializer_list
constructors to Matrix and Array [doc] - 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>
and RowVector<Type,Size>
aliases [doc]. - New support for
bfloat16
.
New backends
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
sin
and cos
with huge arguments. - New faithfully rounded algorithm for
pow(x,y)
.
- Speedups from (new or improved) vectorized versions of
pow
, log
, sin
, cos
, arg
, pow
, log2
, complex sqrt
, erf
, expm1
, logp1
, logistic
, rint
, gamma
and bessel
functions, and more. - Improved special function support (Bessel and gamma functions,
ndtri
, erfc
, inverse hyperbolic functions and more) - New elementwise functions for
absolute_difference
, rint
.
Dense matrix decompositions and solvers
- All dense linear solvers (i.e., Cholesky, *LU, *QR, CompleteOrthogonalDecomposition, *SVD) now inherit SolverBase and thus support
.transpose()
, .adjoint()
and .solve()
APIs. - SVD implementations now have an
info()
method for checking convergence. - Most decompositions now fail quickly when invalid inputs are detected.
- Optimized the product of a
HouseholderSequence
with the identity, as well as the evaluation of a HouseholderSequence
to a dense matrix using faster blocked product. - Fixed aliasing issues with in-place small matrix inversions.
- Fixed several edge-cases with empty or zero inputs.
Sparse matrix support, decompositions and solvers
- Enabled assignment and addition with diagonal matrix expressions.
- Support added for SuiteSparse KLU routines via the
KLUSupport
module. SuiteSparse must be installed to use this module. SparseCholesky
now works with row-major matrices.- Various bug fixes and performance improvements.
Type support
- Improved support for
half
- Native support added for ARM
__fp16
, CUDA/HIP __half
, and F16C
conversion intrinsics. - Better vectorization support added across all backends.
- Improved bool support
- Partial vectorization support added for boolean operations.
- Significantly improved performance (x25) for logical operations with
Matrix
or Tensor
of bool
.
- Improved support for custom types
- More custom types work out-of-the-box (see #2201).
Backend-specific improvements
- Arm NEON
- Now provides vectorization for
uint64_t
, int64_t
, uint32_t
, int16_t
, uint16_t
, int16_t
, int8_t
, and uint8_t
- Emulates
bfloat16
support when using Eigen::bfloat16
- Supports emulated and native
float16
when using Eigen::half
- SSE/AVX/AVX512
- General performance improvements and bugfixes.
- Enabled AVX512 instructions by default if available.
- New
std::complex
, half
, and bfloat16
vectorization support added. - Many missing packet functions added.
- Altivec/Power
- General performance improvement and bugfixes.
- Enhanced vectorization of real and complex scalars.
- Changes to the
gebp_kernel
specific to Altivec, using VSX implementation of the MMA instructions that gain speed improvements up to 4x for matrix-matrix products. - Dynamic dispatch for GCC greater than 10 enabling selection of MMA or VSX instructions based on
__builtin_cpu_supports
.
- GPU (CUDA and HIP)
- Several optimized math functions added, better support for
std::complex
. - Added option to disable CUDA entirely by defining
EIGEN_NO_CUDA
. - Many more functions can now be used in device code (e.g. comparisons, small matrix inversion).
- ZVector
- Vectorized
float
and std::complex<float>
support added. - Added z14 support.
- SYCL
- Redesigned SYCL implementation for use with the [https://eigen.tuxfamily.org/dox/unsupported/eigen_tensors.html Tensor] module, which can be enabled by defining
EIGEN_USE_SYCL
. - New generic memory model introduced used by
TensorDeviceSycl
. - Better integration with OpenCL devices.
- Added many math function specializations.
Miscellaneous API Changes
- New
setConstant(...)
methods for preserving one dimension of a matrix by passing in NoChange
. - Added
setUnit(Index i)
for vectors that sets the ‘‘i’’ th coefficient to one and all others to zero. - Added
transpose()
, adjoint()
, conjugate()
methods to SelfAdjointView
. - Added
shiftLeft<N>()
and shiftRight<N>()
coefficient-wise arithmetic shift functions to Arrays. - Enabled adding and subtracting of diagonal expressions.
- Allow user-defined default cache sizes via defining
EIGEN_DEFAULT_L1_CACHE_SIZE
, ..., EIGEN_DEFAULT_L3_CACHE_SIZE
. - Added
EIGEN_ALIGNOF(X)
macro for determining alignment of a provided variable. - Allow plugins for
VectorwiseOp
by defining a file EIGEN_VECTORWISEOP_PLUGIN
(e.g. -DEIGEN_VECTORWISEOP_PLUGIN=my_vectorwise_op_plugins.h
). - Allow disabling of IO operations by defining
EIGEN_NO_IO
.
Improvement to NaN propagation
- Improvements to NaN correctness for elementwise functions.
- New
NaNPropagation
template argument to control whether NaNs are propagated or suppressed in elementwise min/max
and corresponding reductions on Array
, Matrix
, and Tensor
.
New low-latency non-blocking ThreadPool module
- Originally a part of the Tensor module,
Eigen::ThreadPool
is now separate and more portable, and forms the basis for multi-threading in TensorFlow, for example.
Changes to Tensor module
- Support for c++03 was officially dropped in Tensor module, since most of the code was written in c++11 anyway. This will prevent building the code for CUDA with older version of
nvcc
. - Performance optimizations of Tensor contraction
- Speed up “outer-product-like” operations by parallelizing over the contraction dimension, using thread_local buffers and recursive work splitting.
- Improved threading heuristics.
- Support for fusing element-wise operations into contraction during evaluation.
- Performance optimizations of other Tensor operator
- Speedups from improved vectorization, block evaluation, and multi-threading for most operators.
- Significant speedup to broadcasting.
- Reduction of index computation overhead, e.g. using fast divisors in TensorGenerator, squeezing dimensions in TensorPadding.
- Complete rewrite of the block (tiling) evaluation framework for tensor expressions lead to significant speedups and reduced number of memory allocations.
- Added new API for asynchronous evaluation of tensor expressions.
- Misc. minor behavior changes & fixes:
- Fix const correctness for TensorMap.
- Modify tensor argmin/argmax to always return first occurrence.
- More numerically stable tree reduction.
- Improve randomness of the tensor random generator.
- Update the padding computation for
PADDING_SAME
to be consistent with TensorFlow. - Support static dimensions (aka IndexList) in resizing/reshape/broadcast.
- Improved accuracy of Tensor FFT.
Changes to sparse iterative solvers
- Added new IDRS iterative linear solver.
Other relevant changes
- Eigen now provides an option to test with an external BLAS library
See the announcement for more details.
[3.3.9]
Released on December 4, 2020.
Changes since 3.3.8:
- Commit 4e5385c90: Introduce rendering Doxygen math formulas with MathJax and the option
EIGEN_DOC_USE_MATHJAX
to control this. - #1746: Removed implementation of standard copy-constructor and standard copy-assign-operator from PermutationMatrix and Transpositions to allow malloc-less
std::move
. - #2036: Make sure the find_standard_math_library_test_program compiles and doesn't optimize away functions we try to test for.
- #2046: Rename test/array.cpp to test/array_cwise.cpp to fix an issue with the C++ standard library header “array”
- #2040: Fix an issue in test/ctorleak that occured when disabling exceptions.
- #2011: Remove error counting in OpenMP parallel section in Eigen's GEMM parallelizing logic.
- #2012: Define coeff-wise binary array operators for base class to fix an issue when using Eigen with C++20
- Commit bfdd4a990: Fix an issue with IntelĀ® MKL PARDISO support.
[3.3.8]
Released on October 5, 2020.
Changes since 3.3.7:
- General bug fixes
- #1995: Fix a failure in the GEBP kernel when using small L1 cache sizes, OpenMP and FMA.
- #1990: Make CMake accept installation paths relative to
CMAKE_INSTALL_PREFIX
. - #1974: Fix issue when reserving an empty sparse matrix
- #1823: Fix incorrect use of
std::abs
- #1788: Fix rule-of-three violations inside the stable modules. This fixes deprecated-copy warnings when compiling with GCC>=9 Also protect some additional Base-constructors from getting called by user code code (#1587)
- #1796: Make matrix squareroot usable for Map and Ref types
- #1281: Fix AutoDiffScalar's make_coherent for nested expression of constant ADs.
- #1761: Fall back
is_integral
to std::is_integral
in c++11 and fix internal::is_integral<size_t/ptrdiff_t>
with MSVC 2013 and older. - #1741: Fix
self_adjoint*matrix
, triangular*matrix
, and triangular^1*matrix
with a destination having a non-trivial inner-stride - #1741: Fix SelfAdjointView::rankUpdate and product to triangular part for destination with non-trivial inner stride
- #1741: Fix
C.noalias() = A*C;
with C.innerStride()!=1
- #1695: Fix a numerical robustness issue in BDCSVD
- #1692: Enable enum as sizes of Matrix and Array
- #1689: Fix used-but-marked-unused warning
- #1679: Avoid possible division by 0 in complex-schur
- #1676: Fix C++17 template deduction in DenseBase
- #1669: Fix PartialPivLU/inverse with zero-sized matrices.
- #1557: Fix RealSchur and EigenSolver for matrices with only zeros on the diagonal.
- Performance related fixes
- #1562: Optimize evaluation of small products of the form sAB by rewriting them as: s*(A.lazyProduct(B)) to save a costly temporary. Measured speedup from 2x to 5x...
- Commit 165db26dc and 8ee2e10af: Fix performance issue with SimplicialLDLT for complexes coefficients
- Misc commits
- Commit 5f1082d0b: Fix
QuaternionBase::cast
for quaternion map and wrapper. - Commit a153dbae9: Fix case issue with Lapack unit tests.
- Commit 3d7e2a1f3: Fix possible conflict with an externally defined “real” type when using gcc-5.
- Commit 1760432f6: Provide
numext::[u]int{32,64}_t
. - Commit 3d18879fc: Initialize isometric transforms like affine transforms.
- Commit 160c0a340: Change typedefs from private to protected to fix MSVC compilation.
- Commit 3cf273591: Fix compilation of FFTW unit test.
- Commit 6abc9e537: Fix compilation of BLAS backend and frontend.
- Commit 47e2f8a42: Fix real/imag namespace conflict.
- Commit 71d0402e3: Avoid throwing in destructors.
- Commit 0dd9643ad: Fix precision issue in
SelfAdjointEigenSolver.h
- Commit 6ed74ac97: Make
digits10()
return an integer. - Commit 841d844f9: Use pade for matrix exponential also for complex values.
- Commit 4387298e8: Cast Index to RealScalar in SVDBase to fix an issue when RealScalar is not implicitly convertible to Index.
- Commit fe8cd812b: Provide
EIGEN_HAS_C99_MATH
when using MSVC. - Commit 7c4208450: Various fixes in polynomial solver and its unit tests.
- Commit e777674a8 and 4415d4e2d: Extend polynomial solver unit tests to complexes.
- Commit 222ce4b49: Automatically switch between EigenSolver and ComplexEigenSolver, and fix a few Real versus Scalar issues.
- Commit 7b93328ba: Enable construction of
Ref<VectorType>
from a runtime vector. - Commit c28ba89fe: Fix a problem of old gcc versions having problems with recursive #pragma GCC diagnostic push/pop.
- Commit 210d510a9: Fix compilation with expression template scalar type.
- Commit efd72cddc: Backport AVX512 implementation to 3.3.
- Commit 5e484fa11: Fix StlDeque compilation issue with GCC 10.
- Commit a796be81a: Avoid false-positive test results in non-linear optimization tests
- Commit 9f202c6f1: Fix undefined behaviour caused by uncaught exceptions in OMP section of parallel GEBP kernel.
- Commit 4707c3aa8: Fix a bug with half-precision floats on GPUs.
- Fixed warnings
- Commit 14db78c53: Fix some maybe-uninitialized warnings in AmbiVector.h and test bdcsvd.
- Commit f1b1f13d3: silent cmake warnings in Lapack CMakeLists.txt
- Commit 8fb28db12: Rename variable which shadows class name in Polynomials module.
- Commit f1c12d8ff: Workaround gcc's
alloc-size-larger-than=
warning in DenseStorage.h - Commit 6870a39fe: Hide some unused variable warnings in g++8.1 in Tensor contraction mapper.
- Commit bb9981e24: Fix gcc 8.1 warning: “maybe use uninitialized” in std tests
- Commit eea99eb4e: Fix always true warning with gcc 4.7in test numext.
- Commit 65a6d4151: Fix nonnull-compare warning in test geo_alignedbox.
- Commit 74a0c08d7: Disable ignoring attributes warning in vectorization logic test.
- Commit 6c4d57dc9: Fix a gcc7 warning about bool * bool in abs2 default implementation.
- Commit 89a86ed42: Fix a warning in SparseSelfAdjointView about a branch statement always evaluation to false.
[3.3.8-rc1]
Released on September 14, 2020.
Changes since 3.3.7:
- General bug fixes
- #1974: Fix issue when reserving an empty sparse matrix
- #1823: Fix incorrect use of
std::abs
- #1788: Fix rule-of-three violations inside the stable modules. This fixes deprecated-copy warnings when compiling with GCC>=9 Also protect some additional Base-constructors from getting called by user code code (#1587)
- #1796: Make matrix squareroot usable for Map and Ref types
- #1281: Fix AutoDiffScalar's
make_coherent
for nested expression of constant ADs. - #1761: Fall back
is_integral
to std::is_integral
in c++11 and fix internal::is_integral<size_t/ptrdiff_t>
with MSVC 2013 and older. - #1741: Fix
self_adjoint*matrix
, triangular*matrix
, and triangular^1*matrix
with a destination having a non-trivial inner-stride - #1741: Fix SelfAdjointView::rankUpdate and product to triangular part for destination with non-trivial inner stride
- #1741: Fix
C.noalias() = A*C;
with C.innerStride()!=1
- #1695: Fix a numerical robustness issue in BDCSVD
- #1692: Enable enum as sizes of Matrix and Array
- #1689: Fix used-but-marked-unused warning
- #1679: Avoid possible division by 0 in complex-schur
- #1676: Fix C++17 template deduction in DenseBase
- #1669: Fix PartialPivLU/inverse with zero-sized matrices.
- #1557: Fix RealSchur and EigenSolver for matrices with only zeros on the diagonal.
- Performance related fixes
- #1562: Optimize evaluation of small products of the form sAB by rewriting them as: s*(A.lazyProduct(B)) to save a costly temporary. Measured speedup from 2x to 5x...
- Commit 165db26dc and 8ee2e10af: Fix performance issue with SimplicialLDLT for complexes coefficients
- Misc commits
- Commit 5f1082d0b: Fix
QuaternionBase::cast
for quaternion map and wrapper. - Commit a153dbae9: Fix case issue with Lapack unit tests.
- Commit 3d7e2a1f3: Fix possible conflict with an externally defined “real” type when using gcc-5.
- Commit 1760432f6: Provide
numext::[u]int{32,64}_t
. - Commit 3d18879fc: Initialize isometric transforms like affine transforms.
- Commit 160c0a340: Change typedefs from private to protected to fix MSVC compilation.
- Commit 3cf273591: Fix compilation of FFTW unit test.
- Commit 6abc9e537: Fix compilation of BLAS backend and frontend.
- Commit 47e2f8a42: Fix real/imag namespace conflict.
- Commit 71d0402e3: Avoid throwing in destructors.
- Commit 0dd9643ad: Fix precision issue in SelfAdjointEigenSolver.h
- Commit 6ed74ac97: Make digits10() return an integer.
- Commit 841d844f9: Use pade for matrix exponential also for complex values.
- Commit 4387298e8: Cast Index to RealScalar in SVDBase to fix an issue when RealScalar is not implicitly convertible to Index.
- Commit fe8cd812b: Provide
EIGEN_HAS_C99_MATH
when using MSVC. - Commit 7c4208450: Various fixes in polynomial solver and its unit tests.
- Commit e777674a8 and 4415d4e2d: Extend polynomial solver unit tests to complexes.
- Commit 222ce4b49: Automatically switch between EigenSolver and ComplexEigenSolver, and fix a few Real versus Scalar issues.
- Commit 5110d803e: Change license from LGPL to MPL2 with agreement from David Harmon. (grafted from 2df4f0024666a9085fe47f14e2290bd61676dbbd )
- Commit 7b93328ba: Enable construction of
Ref<VectorType>
from a runtime vector. - Commit c28ba89fe: Fix a problem of old gcc versions having problems with recursive #pragma GCC diagnostic push/pop.
- Commit 210d510a9: Fix compilation with expression template scalar type.
- Fixed warnings
- Commit 14db78c53: Fix some maybe-uninitialized warnings in AmbiVector.h and test bdcsvd.
- Commit f1b1f13d3: silent cmake warnings in Lapack CMakeLists.txt
- Commit 8fb28db12: Rename variable which shadows class name in Polynomials module.
- Commit f1c12d8ff: Workaround gcc's
alloc-size-larger-than=
warning in DenseStorage.h - Commit 6870a39fe: Hide some unused variable warnings in g++8.1 in Tensor contraction mapper.
- Commit bb9981e24: Fix gcc 8.1 warning: “maybe use uninitialized” in std tests
- Commit eea99eb4e: Fix always true warning with gcc 4.7in test
numext
. - Commit 65a6d4151: Fix nonnull-compare warning in test
geo_alignedbox
. - Commit 74a0c08d7: Disable ignoring attributes warning in vectorization logic test.
- Commit 6c4d57dc9: Fix a gcc7 warning about bool * bool in abs2 default implementation.
- Commit efd72cddc: Backport AVX512 implementation to 3.3.
- Commit 5e484fa11: Fix StlDeque compilation issue with GCC 10.
- Commit 89a86ed42: Fix a warning in SparseSelfAdjointView about a branch statement always evaluation to false.
- Commit dd6de618: Fix a bug with half-precision floats on GPUs.
[3.3.7]
Released on December 11, 2018.
Changes since 3.3.6:
- #1643: Fix compilation with GCC>=6 and compiler optimization turned off.
[3.3.6]
Released on December 10, 2018.
Changes since 3.3.5:
- #1617: Fix triangular solve crashing for empty matrix.
- #785: Make dense Cholesky decomposition work for empty matrices.
- #1634: Remove double copy in move-ctor of non movable Matrix/Array.
- Changeset 588e1eb34eff: Workaround weird MSVC bug.
- #1637 Workaround performance regression in matrix products with gcc>=6 and clang>=6.0.
- Changeset bf0f100339c1: Fix some implicit 0 to Scalar conversions.
- #1605: Workaround ABI issue with vector types (aka
__m128
) versus scalar types (aka float). - Changeset d1421c479baa: Fix for gcc<4.6 regarding usage of #pragma GCC diagnostic push/pop.
- Changeset c20b83b9d736: Fix conjugate-gradient for right-hand-sides with a very small magnitude.
- Changeset 281a877a3bf7: Fix product of empty arrays (returned 0 instead of 1).
- #1590: Fix collision with some system headers defining the macro FP32.
- #1584: Fix possible undefined behavior in random generation.
- Changeset d632d18db8ca: Fix fallback to BLAS for rankUpdate.
- Fixes for NVCC 9.
- Fix matrix-market IO.
- Various fixes in the doc.
- Various minor warning fixes/workarounds.
[3.3.5]
Released on July 23, 2018.
Changes since 3.3.4:
[3.3.4]
Released on June 15, 2017.
Changes since 3.3.3:
- General:
- Improve speed of Jacobi rotation when mixing complex and real types.
- #1405: enable StrictlyLower/StrictlyUpper triangularView as the destination of matrix*matrix products.
- UmfPack support: enable changes in the control settings and add report functions.
- #1423: fix LSCG's Jacobi preconditioner for row-major matrices.
- #1424: fix compilation issue with abs and unsigned integers as scalar type.
- #1410: fix lvalue propagation of Array/Matrix-Wrapper with a const nested expression.
- #1403: fix several implicit scalar type conversion making SVD decompositions compatible with ceres::Jet.
- Fix some real-to-scalar-to-real useless conversions in
ColPivHouseholderQR
.
- Regressions:
- Fix
dense * sparse_selfadjoint_view
product. - #1417: make LinSpace compatible with std::complex.
- #1400: fix
stableNorm
alignment issue with EIGEN_DONT_ALIGN_STATICALLY
. - #1411: fix alignment issue in
Quaternion
. - Fix compilation of operations between nested Arrays.
- #1435: fix aliasing issue in expressions like:
A = C - B*A
.
- Others:
- Fix compilation with gcc 4.3 and ARM NEON.
- Fix prefetches on ARM64 and ARM32.
- Fix out-of-bounds check in COLAMD.
- Few minor fixes regarding nvcc/CUDA support, including #1396.
- Improve cmake scripts for Pastix and BLAS detection.
- #1401: fix compilation of
cond ? x : -x
with x
an AutoDiffScalar
- Fix compilation of matrix log with Map as input.
- Add specializations of
std::numeric_limits
for Eigen::half
and and AutoDiffScalar
- Fix compilation of streaming nested Array, i.e.,
std::cout << Array<Array<...>>
[3.3.3]
Released on February 21, 2017.
Changes since 3.3.2:
- General:
- Improve multi-threading heuristic for matrix products with a small number of columns.
- #1395: fix compilation of JacobiSVD for vectors type.
- Fix pruning in
(sparse*sparse).pruned()
when the result is nearly dense. - #1382: move using
std::size_t
/ptrdiff_t
to Eigen's namespace. - Fix compilation and inlining when using clang-cl with visual studio.
- #1392: fix
#include <Eigen/Sparse>
with mpl2-only.
- Regressions:
- #1379: fix compilation in
sparse*diagonal*dense
with OpenMP. - #1373: add missing assertion on size mismatch with compound assignment operators (e.g., mat += mat.col(j))
- #1375: fix cmake installation with cmake 2.8.
- #1383: fix LinSpaced with integers for
LinPspaced(n,0,n-1)
with n==0
or the high<low
case. - #1381: fix
sparse.diagonal()
used as a rvalue. - #1384: fix evaluation of “sparse/scalar” that used the wrong evaluation path.
- #478: fix regression in the eigen decomposition of zero matrices.
- Fix a compilation issue with MSVC regarding the usage of
CUDACC_VER
- #1393: enable Matrix/Array explicit constructor from types with conversion operators.
- #1394: fix compilation of
SelfAdjointEigenSolver<Matrix>(sparse*sparse)
.
- Others:
- Fix ARM NEON wrapper for 16 byte systems.
- #1391: include IO.h before DenseBase to enable its usage in DenseBase plugins.
- #1389: fix std containers support with MSVC and AVX.
- #1380: fix matrix exponential with
Map<>
. - #1369: fix type mismatch warning with OpenMP.
- Fix usage of
size_t
instead of Index in sefl-adjoint matrix * vector
- #1378: fix doc (
DiagonalIndex
vs Diagonal
).
[3.3.2]
Released on January 18, 2017.
Changes since 3.3.1:
- General:
- Add
transpose
, adjoint
, conjugate
methods to SelfAdjointView
(useful to write generic code) - Make sure that
HyperPlane::transform
maintains a unit normal vector in the Affine case. - Several documentation improvements, including: several doxygen workarounds, #1336, #1370, StorageIndex, selfadjointView, sparseView(), sparse triangular solve, AsciiQuickReference.txt, ...
- Regressions:
- #1358: fix compilation of
sparse += sparse.selfadjointView()
. - #1359: fix compilation of
sparse /=scalar
, sparse *=scalar
, and col_major_sparse.row() *= scalar
. - #1361: fix compilation of mat=perm.inverse()
- Some fixes in sparse coeff-wise binary operations: add missing
.outer()
member to iterators, and properly report storage order. - Fix aliasing issue in code as
A.triangularView() = B*A.sefladjointView()*B.adjoint()
- Performance:
- Improve code generation for
mat*vec
on some compilers. - Optimize horizontal adds in SSE3 and AVX.
- Speed up row-major TRSM (triangular solve with a matrix as right-hand-side) by reverting
vec/y
to vec*(1/y)
. The rationale is:- div is extremely costly
- this is consistent with the column-major case
- this is consistent with all other BLAS implementations
- Remove one temporary in
SparseLU::solve()
- Others:
- Fix BLAS backend for symmetric rank K updates.
- #1360: fix
-0
vs +0
issue with Altivec - #1363: fix mingw's ABI issue
- #1367: fix compilation with gcc 4.1.
- Fix ABI issue with AVX and old gcc versions.
- Fix some warnings with ICC, Power8, etc.
- Fix compilation with MSVC 2017
[3.3.1]
Released on December 06, 2016.
Changes since 3.3.0:
- #426: add operators
&&
and ||
to dense and sparse matrices (only dense arrays were supported) - #1319: add support for CMake's imported targets.
- #1343: fix compilation regression in
array = matrix_product
and mat+=selfadjoint_view
- Fix regression in assignment of sparse block to sparse block.
- Fix a memory leak in
Ref<SparseMatrix>
and Ref<SparseVector>
. - #1351: fix compilation of random with old compilers.
- Fix a performance regression in (mat*mat)vec for which 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_BYTES
and EIGEN_MAX_STATIC_ALIGN_BYTES
, and reflect in the doc that EIGEN_DONT_ALIGN*
are deprecated. - Bugs #1346,#1347: make Eigen's installation relocatable.
- Fix some harmless compilation warnings.
[3.3]
Released on November 10, 2016
For a comprehensive list of change since the 3.2 series, see this page.
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())/scalar
with X
rectangular (X
was resized before the evaluation). - #1311: Fix alignment logic in some cases of
(scalar*small).lazyProduct(small)
- #1317: fix a performance regression from 3.2 with clang and some nested block expressions.
- #1308: fix compilation of some small products involving nullary-expressions.
- #1333: Fix a regression with
mat.array().sum()
- #1328: Fix a compilation issue with old compilers introduced in 3.3-rc1.
- #1325: Fix compilation on NEON with clang
- Properly handle negative inputs in vectorized sqrt.
- Improve cost-model to determine the ideal number of threads in matrix-matrix products.
- Geometry module
- #1304: Fix
Projective * scaling
and Projective *= scaling
. - #1310: Workaround a compilation regression from 3.2 regarding triangular * homogeneous
- #1312: Quaternion to AxisAngle conversion now ensures the angle will be in the range
[0,pi]
. This also increases accuracy when q_w
is negative.
- Tensor module
- Add support for OpenCL.
- Improved random number generation.
- Other
- #1330: SuiteSparse, explicitly handle the fact that Cholmod does not support single precision float numbers.
- SuiteSparse, fix SPQR for rectangular matrices
- Fix compilation of
qr.inverse()
for column and full pivoting variants
[3.2.10]
Released on October 04, 2016
Changes since 3.2.9:
Main fixes and improvements:
- #1272: Core module, improve comma-initializer in handling empty matrices.
- #1276: Core module, remove all references to
std::binder*
when C++11 is enabled (those are deprecated). - #1304: Geometry module, fix
Projective * scaling
and Projective *= scaling
. - #1300: Sparse module, compilation fix for some block expression and SPQR support.
- Sparse module, fix support for row (resp. column) of a column-major (resp. row-major) sparse matrix.
- LU module, fix 4x4 matrix inversion for non-linear destinations.
- Core module, a few fixes regarding custom complex types.
- #1275: backported improved random generator from 3.3
- Workaround MSVC 2013 compilation issue in Reverse
- Fix UmfPackLU constructor for expressions.
- #1273: fix shortcoming in eigen_assert macro
- #1249: disable the use of
__builtin_prefetch
for compilers other than GCC, clang, and ICC. - #1265: fix doc of QR decompositions
[3.3-rc1]
Released on September 22, 2016
For a comprehensive list of change since the 3.2 series, see this page.
Main changes since 3.3-beta2:
[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:
[3.2.9]
Released on July 18, 2016
Changes since 3.2.8:
[3.2.8]
Released on February 16, 2016
Changes since 3.2.7:
[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:
[3.2.7]
Released on November 5, 2015
Changes since 3.2.6:
[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:
[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:
[3.2.2]
Released on August 4, 2014
Changes since 3.2.1:
[3.2.1]
Released on February 26, 2014
Changes since 3.2.0:
- Eigen2 support is now deprecated and will be removed in version 3.3.
- Core:
- Bug fix for Ref object containing a temporary matrix.
- #654: Allow construction of row vector from 1D array.
- #679: Support
cwiseMin()
and cwiseMax()
on maps. - Support
conservativeResize()
on vectors. - Improve performance of vectorwise and replicate expressions.
- #642: Add vectorization of sqrt for doubles, and make sqrt really safe if
EIGEN_FAST_MATH
is disabled. - #616: Try harder to align columns when printing matrices and arrays.
- #579: Add optional run-time parameter to fixed-size block methods.
- Implement
.all()
and .any()
for zero-sized objects - #708: Add placement new and delete for arrays.
- #503: Better C++11 support.
- Dense linear algebra:
- #689: Speed up some matrix-vector products by using aligned loads if possible.
- Make solve in
FullPivHouseholderQR
return least-square solution if there is no exact solution. - #678: Fix
fullPivHouseholderQR
for rectangular matrices. - Fix a 0/0 issue in JacobiSVD.
- #736: Wrong result in
LDLT::isPositiveDefinite()
for semi-definite matrices. - #740: Fix overflow issue in
stableNorm()
. - Make pivoting HouseholderQR compatible with custom scalar types.
- Geometry:
- Fix compilation of Transform * UniformScaling
- Sparse matrices:
- Fix elimination tree and SparseQR for fat rectangular matrices.
- #635: add
isCompressed
to MappedSparseMatrix
for compatibility. - #664: Support iterators without
operator<
in setFromTriplets()
. - Fixes in SparseLU: infinite loop, aliasing issue when solving, overflow in memory allocation, use exceptions only if enabled (#672).
- Fixes in SparseQR: reduce explicit zero, assigning result to map, assert catching non-conforming sizes, memory leak.
- #681: Uninitialized value in CholmodSupport which may lead to incorrect results.
- Fix some issues when using a non-standard index type (#665 and more)
- Update constrained CG (unsupported module) to Eigen3.
- OS and build system:
- MacOS put OpenGL header files somewhere else from where we expected it.
- Do not assume that
alloca()
is 16-byte aligned on Windows. - Compilation fixes when using ICC with Visual Studio.
- Fix Fortran compiler detection in CMake files.
- Fix some of our tests (bugs #744 and #748 and more).
- Fix a few compiler warnings (bug #317 and more).
- Documentation fixes (bugs #609, #638 and #739 and more).
[3.1.4]
Released on August 02, 2013
Changes since 3.1.3:
- #620: Fix robustness and performance issues in JacobiSVD::solve.
- #613: Fix accuracy of SSE sqrt for very small numbers.
- #608: Fix sign computation in LDLT.
- Fix write access to CwiseUnaryView expressions.
- Fix compilation of
transposeInPlace()
for Array expressions. - Fix non const
data()
member in Array and Matrix wrappers. - Fix a few warnings and compilation issues with recent compiler versions.
- Documentation fixes.
[3.0.7]
Released on August 02, 2013
Changes since 3.0.6:
- Fix traits of
Map<Quaternion>
. - Fix a few warnings (#507) and documentation (#531).
[3.2.0]
Released on July 24, 2013.
Major new features and optimizations since 3.1:
- Dense world
- New
Ref<>
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()
.
- 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()
to allFinite()
to avoid a future naming collision. - Fix an ICE with ICC 11.1.
[3.2-rc1]
Released on July 17, 2013.
Main changes since 3.2-beta1:
[3.1.3]
Released on April 16, 2013
Changes since 3.1.2:
- #526 - Fix linear vectorized transversal in linspace.
- #551 - Fix compilation issue when using
EIGEN_DEFAULT_DENSE_INDEX_TYPE
. - #533 - Fix some missing const qualifiers in Transpose
- Fix a compilation with CGAL::Gmpq by adding explicit internal:: namespace when calling
abs()
. - Fix computation of outer-stride when calling
.real()
or .imag()
. - Fix
handmade_aligned_realloc
(affected conservativeResize()
). - Fix sparse vector assignment from a sparse matrix.
- Fix
log(0)
with SSE. - Fix bug in aligned_free with windows CE.
- Fix traits of
Map<Quaternion>
. - Fix a few warnings (#507, #535, #581).
- Enable SSE with ICC even when it mimics a gcc version lower than 4.2
- Workaround gcc-4.7 bug #53900 (too aggressive optimization in our alignment check)
[3.2-beta1]
Released on March 07, 2013
Main changes since 3.1:
[3.1.2]
Released on Nov 05, 2012
Changes since 3.1.1:
- #524 - Pardiso's parameter array does not have to be aligned!
- #521 - Disable
__cpuidex
on architectures different that x86 or x86-64 with MSVC. - #519 -
AlignedBox::dim()
was wrong for dynamic dimensions. - #515 - Fix missing explicit scalar conversion.
- #511 - Fix pretty printers on windows.
- #509 - Fix warnings with gcc 4.7
- #501 - Remove aggressive mat/scalar optimization (was replaced by
mat*(1/scalar)
for non integer types). - #479 - Use EISPACK's strategy re max number of iters in Schur decomposition.
- Add support for scalar multiple of diagonal matrices.
- Forward
resize()
function from Array/Matrix wrappers to the nested expression such that mat.array().resize(a,b)
is now allowed. - Windows CE: fix the lack of the
aligned_malloc
function on this platform. - Fix comma initializer when inserting empty matrices.
- Fix
dense=sparse*diagonal
products. - Fix compilation with
m.array().min(scalar)
and m.array().max(scalar)
. - Fix out-of-range memory access in GEMV (the memory was not used for the computation, only to assemble unaligned packets from aligned packet loads).
- Fix various regressions with MKL support.
- Fix aliasing issue in sparse matrix assignment.
- Remove stupid assert in blue norm.
- Workaround a weird compilation error with MSVC.
[3.1.1]
Released on July 22, 2012
Changes since 3.1.0:
- relicense to MPL2
- add a
EIGEN_MPL2_ONLY
build option to generate compiler errors when including non-MPL2 modules - remove dynamic allocation for triangular matrix-matrix products of fixed size objects
- Fix possible underflow issues in SelfAdjointEigenSolver
- Fix issues with fixed-size Diagonal (sub/super diagonal size computation was wrong)
- #487 - Geometry module:
isometry * scaling
compilation error - #486 - MKL support: fixed multiple-references linker errors with various decompositions
- #480 - work around compilation error on Android NDK due to isfinite being defined as a macro
- #485 - IterativeLinearSolvers: conflict between a typedef and template type parameter
- #479 - Eigenvalues/Schur: Adjust max iterations count to matrix size
- Fixed Geometry module compilation under MSVC
- Fixed Sparse module compilation under MSVC 2005
[3.0.6]
Released on July 9, 2012
Changes since 3.0.5:
- #447 - fix infinite recursion in
ProductBase::coeff()
- #478 - fix RealSchur on a zero matrix
- #477 - fix warnings with gcc 4.7
- #475 -
.exp()
now returns +inf
when overflow occurs (SSE) - #466 - fix a possible race condition in OpenMP environment (for non OpenMP thread model it is recommended to upgrade to 3.1)
- #362 - fix missing specialization for affine-compact
*
projective - #451 - fix a clang warning
- Fix compilation of
somedensematrix.llt().matrixL().transpose()
- Fix miss-use of the cost-model in Replicate
- Fix use of int versus Index types for
Block::m_outerStride
- Fix ambiguous calls to some std functions
- Fix geometry tutorial on scalings
- Fix RVCT 3.1 compiler errors
- Fix implicit scalar conversion in Transform
- Fix typo in NumericalDiff (unsupported module)
- Fix LevenbergMarquart for non double scalar type (unsupported module)
[3.1.0]
Released on June 24, 2012.
Major changes between Eigen 3.0 and Eigen 3.1:
- New features
- New set of officially supported Sparse Modules ** This includes sparse matrix storage, assembly, and many built-in (Cholesky, CG, BiCGSTAB, ILU), and third-party (PaStiX, Cholmod, UmfPack, SuperLU, Pardiso) solvers ** See this page 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:
RealSchur
failed on a zero matrix - Update Adolc and MPReal support modules
[3.1.0-rc1]
Released on June 14, 2012
Main changes since 3.1.0-beta1:
- #466: fix a possible race condition issue. from now, multithreaded applications that call Eigen from multiple thread must initialize Eigen by calling
initParallel()
. - For consistency,
SimplicialLLT
and SimplicialLDLT
now factorizes P A P^-1
(instead of P^-1 A P
). - #475: now the vectorized
exp
operator returns +inf when overflow occurs - Fix the use of MKL with MSVC by disabling MKL's pow functions.
- Avoid dynamic allocation for fixed size triangular solving
- Fix a compilation issue with ICC 11.1
- Fix ambiguous calls in the math functors
- Fix BTL interface.
[3.1.0-beta1]
Released on June 7, 2012
Main changes since 3.1.0-alpha2:
- API changes
SimplicialLLt
and SimplicialLDLt
are now renamed SimplicialLLT
and SimplicialLDLT
for consistency with the other modules.- The Pardiso support module is now spelled “PardisoSupport”
- Dense modules:
- Add
operator/(Scalar,ArrayBase)
and coefficient-wise pow operator. - Fix automatic evaluation of expressions nested by Replicate (performance improvement)
- #447 - fix infinite recursion in
ProductBase::coeff()
- #455 - add support for c++11 in
aligned_allocator
LinSpace
: add a missing variant, and fix the size=1 case
- Sparse modules:
- Add an IncompleteLU preconditioner with dual thresholding.
- Add an interface to the parallel Pastix solver
- Improve applicability of permutations (add
SparseMatrixBase::twistedBy
, handle non symmetric permutations) CholmodDecomposition
now has explicit variants: CholmodSupernodalLLT
, CholmodSimplicialLLT
, CholmodSimplicialLDLT
- Add analysePattern/factorize methods to iterative solvers
- Preserve explicit zero in a sparse assignment
- Speedup
sparse * dense
products - Fix a couple of issues with Pardiso support
- Geometry module:
- Improve performance of some
Transform<>
operations by better preserving the alignment status. - #415 - wrong return type in
Rotation2D::operator*=
- #439 - add
Quaternion::FromTwoVectors()
static constructor - #362 - missing specialization for affine-compact
*
projective
- Others:
- add support for RVCT 3.1 compiler
- New tutorial page on Map
- and many other bug fixes such as: #417, #419, #450
[3.0.5]
Released February 10, 2012
Changes since 3.0.4:
- #417 - fix nesting of
Map
expressions - #415 - fix return value of
Rotation2D::operator*=
- #410 - fix a possible out of range access in
EigenSolver
- #406 - fix infinite loop/deadlock when using OpenMP and Eigen
- Changeset 4462 - fix broken asserts revealed by Clang
- Changeset 4457 - fix description of
rankUpdate()
in quick reference guide - Changeset 4455 - fix out-of-range int constant in 4x4 inverse
- #398 - fix in slerp: the returned quaternion was not always normalized
- Changeset 4432 - fix asserts in eigenvalue decompositions
- Changeset 4416 - fix MSVC integer overflow warning
[3.1.0-alpha2]
Released February 6, 2012
Main changes since 3.0.1-alpha1:
- New optional support for Intel MKL and other BLAS including: (details)
- BLAS (arbitrary BLAS)
- Intel LAPACKE
- Intel VML (coefficient-wise math operations)
- Intel PARDISO (sparse direct solver)
- Dense modules:
- improved performance of small matrix-matrix products
- Feature #319 - add a rankUpdate function to LDLt and LLT for updates/downdates
- Feature #400 - new coefficient wise min/max functions taking one scalar argument
- Sparse modules:
- new fast sparse matrix assembly interface from a random list of triplets (see
SparseMatrix::setFromTriplets()
) - new shifting feature in SimplicialCholesky (see
SimplicialCholeskyBase::setShift()
) - add checks for positive definiteness in SimplicialCholesky
- improved heuristic to predict the nnz of a
sparse*sparse
product - add support for uncompressed SparseMatrix in CholmodSupport
- Geometry module:
- Feature #297 - add
ParametrizedLine::intersectionPoint()
and intersectionParam()
functions
- Others:
- fix many warnings and compilation issues with ICC 12 and -strict-ansi
- fix some ICE with MSVC10
- add the possibility to disable calls to cpuid (
-DEIGEN_NO_CPUID
) and other asm directives - and many other bug fixes such as: #406, #410, #398, #396, #394, #354, #352, #301,
[3.1.0-alpha1]
Released December 6, 2011
Main changes since 3.0:
- Officially supported set of sparse modules. See this page for an overview of the features. Main changes:
- new
SparseCore
module equivalent to the old Sparse
module, the Sparse
module is now a super module including all sparse-related modules- the
SparseMatrix
class is now more versatile and supports an uncompressed mode for fast element insertion - the
SparseMatrix
class now offer a unique and simplified API to insert elements DynamicSparseMatrix
has been deprecated (moved into unsupported/SparseExtra
)- new conservative
sparse * sparse
matrix product which is also used by default
- new
SparseCholesky
module featuring the SimplicialLLT and SimplicialLDLT built-in solvers - new
IterativeLinearSolvers
module featuring a conjugate gradient and stabilized bi-conjugate gradient iterative solvers with a basic Jacobi preconditioner
- New
SelfAdjointEigenSolver::computeDirect()
function for fast eigen-decomposition through closed-form formulas (only for 2x2 and 3x3 real matrices) - New
LLT::rankUpdate()
function supporting both updates and down-dates - Optimization of reduction via partial unrolling (e.g., dot, sum, norm, etc.)
- New coefficient-wise operators:
&&
and ||
- Feature #157 - New vector-wise operations for arrays:
*
, /
, *=
, and /=
. - Feature #206 - Pre-allocation of intermediate buffers in JacobiSVD
- Feature #370 - New typedefs for AlignedBox
- All the fixes and improvements of the 3.0 branch up to the 3.0.4 release (see below)
[3.0.4]
Released December 6, 2011
Changes since 3.0.3:
- #363 - check for integer overflow in size computations
- #369 - Quaternion alignment is broken (and more alignment fixes)
- #354 - Converge better in SelfAdjointEigenSolver, and allow better handling of non-convergent cases
- #347 - Fix compilation on ARM NEON with LLVM 3.0 and iOS SDK 5.0
- #372 - Put unsupported modules documentation at the right place
- #383 - Fix C++11 compilation problem due to some constructs mis-interpreted as c++11 user-defined literals
- #373 - Compilation error with clang 2.9 when exceptions are disabled
- Fix compilation issue with
QuaternionBase::cast
[2.0.17]
Released December 6, 2011
Changes since 2.0.16:
- Fix a compilation bug in
aligned_allocator
: the allocate method should take a void pointer - Fix a typo in ParametrizedLine documentation
[3.0.3]
Released October 6, 2011
Changes since 3.0.2:
- Fix compilation errors when Eigen2 support is enabled.
- Fix bug in evaluating expressions of the form
matrix1 * matrix2 * scalar1 * scalar2
. - Fix solve using LDLT for singular matrices if solution exists.
- Fix infinite loop when computing SVD of some matrices with very small numbers.
- Allow user to specify pkgconfig destination.
- Several improvements to the documentation.
[3.0.2]
Released August 26, 2011
Changes since 3.0.1:
Windows.h
: protect min/max calls from macros having the same name (no need to #undef
min/max anymore).- MinGW: fix compilation issues and pretty gdb printer.
- Standard compliance: fix aligned_allocator and remove uses of long long.
- MPReal: updates for the new version.
- Other fixes:
- fix aligned_stack_memory_handler for null pointers.
- fix std::vector support with gcc 4.6.
- fix linking issue with OpenGL support.
- fix SelfAdjointEigenSolver for 1x1 matrices.
- fix a couple of warnings with new compilers.
- fix a few documentation issues.
[3.0.1]
Released May 30, 2011
Changes since 3.0.0:
- Fix many bugs regarding ARM and NEON (Now all tests succeed on ARM/NEON).
- Fix compilation on gcc 4.6
- Improved support for custom scalar types:
- Fix memory leak issue for scalar types throwing exceptions.
- Fix implicit scalar type conversion.
- Math functions can be defined in the scalar type's namespace.
- Fix bug in trapezoidal matrix time matrix product.
- Fix asin.
- Fix compilation with MSVC 2005 (SSE was wrongly enabled).
- Fix bug in
EigenSolver
: normalize the eigen vectors. - Fix Qt support in Transform.
- Improved documentation.
[2.0.16]
Released May 28, 2011
Changes since 2.0.15:
- Fix bug in 3x3 tridiagonlisation (and consequently in 3x3 selfadjoint eigen decomposition).
- Fix compilation for new gcc 4.6.
- Fix performance regression since 2.0.12: in some matrix-vector product, complex matrix expressions were not pre-evaluated.
- Fix documentation of Least-Square.
- New feature: support for
part<SelfAdjoint>
. - Fix bug in SparseLU::setOrderingMethod.
[3.0.0]
Released March 19, 2011, at the meeting.
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_MALLOC
option and new set_is_malloc_allowed()
option to finely control where dynamic memory allocation is allowed. Useful for unit-testing of functions that must not cause dynamic memory allocations. - Core: SSE performance fixes (follow-up from #203).
- Core: Fixed crashes when using
EIGEN_DONT_ALIGN
or EIGEN_DONT_ALIGN_STATICALLY
(#213 and friends). - Core:
EIGEN_DONT_ALIGN
and EIGEN_DONT_ALIGN_STATICALLY
are now covered by unit tests. - Geometry: Fixed transform * matrix products (#207).
- Geometry: compilation fix for mixing CompactAffine with Homogeneous objects
- Geometry: compilation fix for 1D transform
- SVD: fix non-computing constructors (correctly forward
computationOptions
) (#206) - Sparse: fix resizing when the destination sparse matrix is row major (#37)
- more Eigen2Support improvements
- more unit test fixes/improvements
- more documentation improvements
- more compiler warnings fixes
- fixed GDB pretty-printer for dynamic-size matrices (#210)
[3.0-beta4]
Released February 28, 2011.
Main changes since 3.0-beta3:
- Non-vectorization bug fixes:
- fix #89: work around an extremely evil compiler bug on old GCC (<= 4.3) with the standard
assert()
macro - fix Umfpack back-end in the complex case
- Vectorization bug fixes:
- fix a segfault in “slice vectorization” when the destination might not be aligned on a scalar (
complex<double>
) - fix #195: fast SSE unaligned loads fail on GCC/i386 and on Clang
- fix #186: worked around a GCC 4.3 i386 backend issue with SSE
- fix #203: SSE: a workaround used in pset1() resulted in poor assembly
- worked around a GCC 4.2.4 internal compiler error with vectorization of complex numbers
- lots of AltiVec compilation fixes
- NEON compilation fixes
- API additions and error messages improvements
- Transform: prevent bad user code from compiling
- fix #190: directly pass Transform Options to Matrix, allowing to use RowMajor. Fix issues in Transform with non-default Options.
- factorize implementation of standard real unary math functions, and add acos, asin
- Build/tests system
- Lots of unit test improvements
- fix installation of unsupported modules
- fixed many compiler warnings, especially on the Intel compiler and on LLVM/Clang
- CTest/CMake improvements
- added option to build in 32bit mode
- BLAS/LAPACK implementation improvements
- The Blas library and tests are now automatically built as part of the tests.
- expanded LAPACK interface (including syev)
- now Sparse solver backends use our own BLAS/LAPACK implementation
- fix #189 (cblat1 test failure)
- Documentation
- improved conservativeResize methods documentation
- documented sorting of eigenvalues
- misc documentation improvements
- improve documentation of plugins
[3.0-beta3]
Released February 12, 2011.
The biggest news is that the API is now 100% stable.
Main changes since 3.0-beta2:
- The “too many to list them all” category:
- lots of bug fixes
- lots of performance fixes
- lots of compiler support fixes
- lots of warning fixes
- lots of unit tests improvements and fixes
- lots of documentation improvements
- lots of build system fixes
- API changes:
- replaced
ei_
prefix by internal::
namespace. For example, ei_cos(x)
becomes internal::cos(x)
. - renamed
PlanarRotation
-> JacobiRotation
- renamed
DenseStorageBase
-> PlainObjectBase
- HouseholderSequence API cleanup
- refactored internal metaprogramming helpers to follow closely the standard library
- made UpperBidiagonalization internal
- made BandMatrix/TridiagonalMatrix internal
- Core: also see below, “const correctness”.
- Sparse:
EIGEN_YES_I_KNOW_SPARSE_MODULE_IS_NOT_STABLE_YET
must be defined to use Eigen/Sparse - Core:
random<interger type>()
now spans over range of width RAND_MAX
- New API:
- Core: added Map static methods taking strides
- SVD: added
jacobiSvd()
method - Sparse: many misc improvements and new features. Improved support for Cholmod, Amd, SuperLU and other back-ends.
- Core: allow mixed real-complex dot products
- Geometry: allow mixed real-complex cross products
- Geometry: allow to pass Options parameters to Transform, Quaternion and other templates, to control memory alignment
- QR: add threshold API to FullPivHouseholderQR
- Core: added tan function
- Const correctness:
- Eigen now properly enforces const-correctness everywhere, for example with Map objects. This will break compilation of code that relied on former behavior.
- A new kind of test suite was added to check that, ‘failtest’.
- BLAS/LAPACK:
- Complete BLAS library built on top of Eigen. Imported BLAS test suite, which allowed to fix many issues.
- Partial LAPACK implementation. Passing part of the LAPACK test suite, which also allowed to fix some issues.
- Eigen 2 Support:
[3.0-beta2]
Released October 15, 2010.
Main changes since 3.0-beta1:
- Add support for the vectorization of
std::complex<>
with SSE, AltiVec and NEON. - Add support for mixed
real * complex
matrix products with vectorization. - Finalize the JacobiSVD class with: compile time options, thin/full decompositions, and least-square solving.
- Several improvement of the Transform class. In particular, there is no default mode anymore.
- New methods:
middleRows()
, middleCols()
, TriangularMatrix::conjugate()
- New unsupported modules: OpenGL, MPFR C++
- Many improvements in the support of empty objects.
- Many improvements of the vectorization logic.
- Add the possibility to extend QuaternionBase.
- Vectorize Quaternion multiplication with double.
- Significant improvements of the documentation.
- Improved compile time errors.
- Enforce static allocation of temporary buffers in gemm (when possible).
- Fix aligned_delete for null pointers and non trivial dtors.
- Fix eigen decomposition of 3x3 float matrices.
- Fix 4x4 matrix inversions (vectorization).
- Many fixes in QR: solving with
m>n
, use of rank, etc. - Fixes for MSVC for windows mobile and CLang.
- Remove the Taucs backend (obsolete).
- Remove the old SVD class (was causing too much troubles, a new decompozition based on bidiagonalisation/householder should come back soon,
JacobiSVD
can be used meanwhile).
[2.0.15]
Released July 16, 2010
Changes since 2.0.14:
- Fix bug: certain cases of matrix-vector product (depending on storage order) were blocked by an assertion failure.
- Fix LU and QR solve when rank==0, fix LLT when the matrix is purely 0.
- Fix a couple of bugs with QR solving especially with rows>cols.
- Fix bug with custom scalar types that have non-trivial destructor.
- Fix for ICC in SSE code.
- Fix some C++ issues found by Clang (patch by Nick Lewycky).
[3.0-beta1]
Released July 5, 2010
See the announcement.
[2.0.14]
Released June 22, 2010
Changes since 2.0.13:
- Fix #141: crash in SSE (alignment problem) when using dynamic-size matrices with a max-size fixed at compile time that is not a multiple of 16 bytes. For example,
Matrix<double,Dynamic,Dynamic,AutoAlign,5,5>
. - Fix #142: LU of fixed-size matrices was causing dynamic memory allocation (patch by Stuart Glaser).
- Fix #127: remove useless static keywords (also fixes warnings with clang++).
[2.0.13]
Released June 10, 2010
Changes since 2.0.12:
- Fix #132: crash in certain matrix-vector products. Unit test added.
- Fix #125: colwise
norm()
and squaredNorm()
on complex types do not return real types - Fully support the QCC/QNX compiler (thanks to Piotr Trojanek). The support in 2.0.12 was incomplete. The whole test suite is now successful.
- As part of the QCC support work, a lot of standards compliance work: put
std::
in front of a lot of things such as size_t
, check whether the math library needs to be linked to explicitly. - Fix precision issues in LDLT. The
isPositiveDefinite()
method is now always returning true, but it was conceptually broken anyway, since a non-pivoting LDLT decomposition can't know that. - Compilation fix in
ldlt()
on expressions. - Actually install the Eigen/Eigen and Eigen/Dense public headers!
- Fix readcost for complex types.
- Fix compilation of the BTL benchmarks.
- Some dox updates.
[2.0.12]
Released February 12, 2010
Changes since 2.0.11:
EIGEN_DEFAULT_TO_ROW_MAJOR
is fully supported and tested.- Several important fixes for row-major matrices.
- Fix support of several algorithms for mixed fixed-dynamic size matrices where the fixed dimension is greater than the dynamic dimension. For example:
Matrix<float,3,Dynamic>(3,2)
- fix
EIGEN_DONT_ALIGN
: now it really disables vectorization (was giving a #error
unless you also used EIGEN_DONT_VECTORIZE
). - Fix #92: Support QNX's QCC compiler (patch by Piotr Trojanek)
- Fix #90, missing type cast in LU, allow to use LU with MPFR (patch by ‘Wolf’).
- Fix ICC compiler support: work around a bug present at least in ICC 11.1.
- Compilation fixes for
computeInverse()
on expressions. - Fix a gap in a unit-test (thanks to Jitse Niesen)
- Backport improvements to benchmarking code.
- Documentation fixes
[2.0.11]
Released January 10, 2010
Changes since 2.0.10:
- Complete rewrite of the 4x4 matrix inversion: we now use the usual cofactors approach, so no numerical stability problems anymore (bug #70)
- Still 4x4 matrix inverse: SSE path for the float case, borrowing code by Intel, giving very high performance.
- Fix crash happening on 32-bit x86 Linux with SSE, when double's were created at non-8-byte-aligned locations (bug #79).
- Fix bug in Part making it crash in certain products (bug #80).
- Precision improvements in Quaternion SLERP (bug #71).
- Fix sparse triangular solver for lower/row-major matrices (bug #74).
- Fix MSVC 2010 compatibility.
- Some documentation improvements.
[2.0.10]
Released November 25, 2009
Changes since 2.0.9:
- Rewrite 4x4 matrix inverse to improve precision, and add a new unit test to guarantee that precision. It‘s less fast, but it’s still faster than the cofactors method.
- Fix bug #62: crash in SSE code with MSVC 2008 (Thanks to Hauke Heibel).
- Fix bug #65:
MatrixBase::nonZeros()
was recursing infinitely - Fix PowerPC platform detection on Mac OSX.
- Prevent the construction of bogus MatrixBase objects and generate good compilation errors for that. Done by making the default constructor protected, and adding some private constructors.
- Add option to initialize all matrices by zero: just #define
EIGEN_INITIALIZE_MATRICES_BY_ZERO
- Improve Map documentation
- Install the pkg-config file to share/pkgconfig, instead of lib/pkgconfig (thanks to Thomas Capricelli)
- fix warnings
- fix compilation with MSVC 2010
- adjust to repository name change
[2.0.9]
Released October 24, 2009
Changes since 2.0.8:
- Really fix installation and the pkg-config file.
- Install the
NewStdVector
header that was introduced in 2.0.6.
[2.0.8]
Released October 23, 2009
Changes since 2.0.7:
- fix installation error introduced in 2.0.7: it was choking on the pkg-config file eigen2.pc not being found. The fix had been proposed long ago by Ingmar Vanhassel for the development branch, and when recently the pkg-config support was back-ported to the 2.0 branch, nobody thought of backporting this fix too, and apparently nobody tested “make install” !
- SVD: add default constructor. Users were relying on the compiler to generate one, and apparenty 2.0.7 triggered a little MSVC 2008 subtlety in this respect. Also added an assert.
[2.0.7]
Released October 22, 2009
Changes since 2.0.6:
- fix bug #61: crash when using Qt
QVector
on Windows 32-bit. By Hauke Heibel. - fix bug #10: the
reallocateSparse
function was half coded - fix bug in
SparseMatrix::resize()
not correctly initializing by zero - fix another bug in
SparseMatrix::resize()
when outerSize==0
. By Hauke Heibel. - fully support GCC 3.3. It was working in 2.0.2, there was a compilation error in 2.0.6, now for the first time in 2.0.7 it's 100% tested (the test suite passes without any errors, warnings, or failed tests).
- SVD: add missing assert (help catch mistakes)
- fixed warnings in unit-tests (Hauke Heibel)
- finish syncing
Memory.h
with the devel branch. This is cleaner and fixes a warning. The choice of system aligned malloc function may be affected by this change. - add pkg-config support by Rhys Ulerich.
- documentation fix and doc-generation-script updates by Thomas Capricelli
[2.0.6]
Released September 23, 2009
Changes since 2.0.5:
- fix bug: visitors didn't work on row-vectors.
- fix bug #50: compilation errors with
swap()
. - fix bug #42: Add
Transform::Identity()
as mentioned in the tutorial. - allow to disable all alignment code by defining
EIGEN_DONT_ALIGN
(backport from devel branch). - backport the devel branch‘s
StdVector
header as NewStdVector
. You may also #define EIGEN_USE_NEW_STDVECTOR
to make StdVector
use it automatically. However, by default it isn’t used by StdVector
, to preserve compatibility. - Vectorized quaternion product (for float) by Rohit Garg (backport from devel branch).
- allow to override
EIGEN_RESTRICT
and add EIGEN_DONT_USE_RESTRICT_KEYWORD
- fix a warning in
ei_aligned_malloc
; fixed by backporting the body from the devel branch; may result in a different choice of system aligned malloc function. - update the documentation.
[2.0.5]
Released August 22, 2009
Changes since 2.0.4:
- fix bug: in rare situations involving mixed storage orders, a matrix product could be evaluated as its own transpose
- fix bug:
LU::solve()
crashed when called on the LU decomposition of a zero matrix - fix bug:
EIGEN_STACK_ALLOCATION_LIMIT
was too high, resulting in stack overflow for a user. Now it is set as in the devel branch. - fix compilation bug: our
StdVector
header didn't work with GCC 4.1. (Bug #41) - fix compilation bug: missing return statement in
Rotation2D::operator*=
(Bug #36) - in StdVector, a more useful
#error
message about the #including order - add
EIGEN_TRANSFORM_PLUGIN
allowing to customize the Transform class - fix a warning with MSVC
- fix a bug in our cmake code when building unit-tests (thanks to Marcus Hanwell)
- work around a bug in cmake that made it fail to build unit-tests when fortran wasn't installed
- in our cmake code, remove the part about retrieving the mercurial info and appending it to the version number in the dox
- dox: remove the old example list
- fix the option to build a binary library, although it's not very useful and will be removed
- add basic .hgignore file and script to build the docs (thanks to Thomas Capricelli)
[2.0.4]
Released August 1, 2009
Changes since 2.0.3:
- Several fixes in the overloaded new and delete operators. Thanks to Hauke Heibel.
- compilation fix: add the missing
ei_atan2
function. Thanks to Manuel Yguel. - Use
ei_atan2
instead of using std::atan2
directly. - several compilation fixes in the Qt interoperability code: methods
toQTransform()
and toQMatrix()
. Thanks to Anthony Truchet. - compilation fix and simplification in Matrix assignment
- compilation fixes in
a *= b
and a = a*b
when a has to be resized. - remove a “stupid” version of
ei_pow
. for integers for gcc >= 4.3 - bug fix in
Quaternion::setFromTwoVectors()
- several ctest improvements: use our own dashboard, use a separate project for the 2.0 branch.
- documentation: improvement on the pages on unaligned arrays (the online copies have been updated immediately).
[2.0.3]
Released June 21, 2009
Changes since 2.0.2:
- precision and reliability fixes in various algorithms, especially LLT, QR, Tridiagonalization, and also a precision improvement in LU.
- fix LLT and LDLT solve() on uninitialized result (was causing an assertion).
- add Eigen/Eigen and Eigen/Dense headers for convenience
- document a newly found cause for the “unaligned array” assertion
- backport documentation improvements on transpose() and adjoint()
- updates in the Sparse module (was needed to support KDE 4.3)
[2.0.2]
Released May 22, 2009
Changes since 2.0.1:
- Fix
linearRegression()
compilation, actually it is reimplemented using the better fitHyperplane() which does total least-squares. - Add missing
setZero()
etc... variants taking size parameters and resizing. These were mentioned in the tutorial but weren't implemented. - Fix
posix_memalign
platform check. This fixes portability issues. Thanks to Ross Smith. - Fix detection of SSE2 on the Windows 64-bit platform.
- Fix compatibility with the old GCC 3.3: it is now fully supported again.
- Fix warnings with recent GCC (4.4.0 and 4.3.3).
[2.0.1]
Released April 14, 2009
Changes since 2.0.0:
- disable alignment altogether on exotic platforms on which we don't vectorize anyway. This allows e.g. to use Eigen on ARM platforms.
- new StdVector header with a new workaround for the problems with std::vector.
- workarounds for MSVC internal compiler errors
- MSVC 9 compilation fix (patch by Hauke Heibel)
- fixes for various bugs in Maps/Blocks that could give wrong results
- fix bug in 4x4 matrix inverse that could give wrong results
- compilation fix in SliceVectorization
- fix wrong static assertion (patch by Markus Moll)
- add missing operators in
aligned_allocator
(thanks to Hauke Heibel)
[2.0.0]
Released February 2, 2009