From Eigen
Revision as of 15:32, 14 October 2021 by Cantonios (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Eigen 3.4.0

Released on August 18, 2021

See the announcement.

Eigen 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.
  • Issue 1746: Removed implementation of standard copy-constructor and standard copy-assign-operator from PermutationMatrix and Transpositions to allow malloc-less std::move.
  • Issue 2036: Make sure the find_standard_math_library_test_program compiles and doesn't optimize away functions we try to test for.
  • Issue 2046: Rename test/array.cpp to test/array_cwise.cpp to fix an issue with the C++ standard library header "array"
  • Issue 2040: Fix an issue in test/ctorleak that occured when disabling exceptions.
  • Issue 2011: Remove error counting in OpenMP parallel section in Eigen's GEMM parallelizing logic.
  • Issue 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.

Eigen 3.3.8

Released on October 5, 2020.

Changes since 3.3.7:

  • General bug fixes
    • Issue #1995: Fix a failure in the GEBP kernel when using small L1 cache sizes, OpenMP and FMA.
    • Issue #1990: Make CMake accept installation paths relative to CMAKE_INSTALL_PREFIX.
    • Issue #1974: Fix issue when reserving an empty sparse matrix
    • Issue #1823: Fix incorrect use of std::abs
    • Issue #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 (Issue #1587)
    • Issue #1796: Make matrix squareroot usable for Map and Ref types
    • Issue #1281: Fix AutoDiffScalar's make_coherent for nested expression of constant ADs.
    • Issue #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.
    • Issue #1741: Fix self-adjoint*matrix, triangular*matrix, and triangular^1*matrix with a destination having a non-trivial inner-stride
    • Issue #1741: Fix SelfAdjointView::rankUpdate and product to triangular part for destination with non-trivial inner stride
    • Issue #1741: Fix C.noalias() = A*C; with C.innerStride()!=1
    • Issue #1695: Fix a numerical robustness issue in BDCSVD
    • Issue #1692: Enable enum as sizes of Matrix and Array
    • Issue #1689: Fix used-but-marked-unused warning
    • Issue #1679: Avoid possible division by 0 in complex-schur
    • Issue #1676: Fix C++17 template deduction in DenseBase
    • Issue #1669: Fix PartialPivLU/inverse with zero-sized matrices.
    • Issue #1557: Fix RealSchur and EigenSolver for matrices with only zeros on the diagonal.
  • Performance related fixes
    • Issue #1562: Optimize evaluation of small products of the form s*A*B by rewriting them as: s*(A.lazyProduct(B)) to save a costly temporary. Measured speedup from 2x to 5x...
    • Commit 165db26dc and 8ee2e10af: Fix performance issue with SimplicialLDLT for complexes coefficients
  • Misc commits
  • 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.

Eigen 3.3.8-rc1

Released on September 14, 2020.

Changes since 3.3.7:

  • General bug fixes
    • Issue #1974: Fix issue when reserving an empty sparse matrix
    • Issue #1823: Fix incorrect use of std::abs
    • Issue #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 (Issue #1587 #1587)
    • Issue #1796: Make matrix squareroot usable for Map and Ref types
    • Issue #1281: Fix AutoDiffScalar's make_coherent for nested expression of constant ADs.
    • Issue #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.
    • Issue #1741: Fix self-adjoint*matrix, triangular*matrix, and triangular^1*matrix with a destination having a non-trivial inner-stride
    • Issue #1741: Fix SelfAdjointView::rankUpdate and product to triangular part for destination with non-trivial inner stride
    • Issue #1741: Fix C.noalias() = A*C; with C.innerStride()!=1
    • Issue #1695: Fix a numerical robustness issue in BDCSVD
    • Issue #1692: Enable enum as sizes of Matrix and Array
    • Issue #1689: Fix used-but-marked-unused warning
    • Issue #1679: Avoid possible division by 0 in complex-schur
    • Issue #1676: Fix C++17 template deduction in DenseBase
    • Issue #1669: Fix PartialPivLU/inverse with zero-sized matrices.
    • Issue #1557: Fix RealSchur and EigenSolver for matrices with only zeros on the diagonal.
  • Performance related fixes
    • Issue #1562: Optimize evaluation of small products of the form s*A*B by rewriting them as: s*(A.lazyProduct(B)) to save a costly temporary. Measured speedup from 2x to 5x...
    • Commit 165db26dc and 8ee2e10af: Fix performance issue with SimplicialLDLT for complexes coefficients
  • Misc commits
  • Fixed warnings

Eigen 3.3.7

Released on December 11, 2018.

Changes since 3.3.6:

  • Bug 1643: Fix compilation with GCC>=6 and compiler optimization turned off.

Eigen 3.3.6

Released on December 10, 2018.

Changes since 3.3.5:

  • Bug 1617: Fix triangular solve crashing for empty matrix.
  • Bug 785: Make dense Cholesky decomposition work for empty matrices.
  • Bug 1634: Remove double copy in move-ctor of non movable Matrix/Array.
  • Changeset 588e1eb34eff: Workaround weird MSVC bug.
  • Bug 1637 Workaround performance regression in matrix products with gcc>=6 and clang>=6.0.
  • Changeset bf0f100339c1: Fix some implicit 0 to Scalar conversions.
  • Bug 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).
  • Bug 1590: Fix collision with some system headers defining the macro FP32.
  • Bug 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.

Eigen 3.3.5

Released on July 23, 2018.

Changes since 3.3.4:

Eigen 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.
    • Bug 1405: enable StrictlyLower/StrictlyUpper triangularView as the destination of matrix*matrix products.
    • UmfPack support: enable changes in the control settings and add report functions.
    • Bug 1423: fix LSCG's Jacobi preconditioner for row-major matrices.
    • Bug 1424: fix compilation issue with abs and unsigned integers as scalar type.
    • Bug 1410: fix lvalue propagation of Array/Matrix-Wrapper with a const nested expression.
    • Bug 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.
    • Bug 1417: make LinSpace compatible with std::complex.
    • Bug 1400: fix stableNorm alignment issue with EIGEN_DONT_ALIGN_STATICALLY.
    • Bug 1411: fix alignment issue in Quaternion.
    • Fix compilation of operations between nested Arrays.
    • Bug 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 bug 1396.
    • Improve cmake scripts for Pastix and BLAS detection.
    • Bug 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., cout << Array<Array<>>

Eigen 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.
    • Bug 1395: fix compilation of JacobiSVD for vectors type.
    • Fix pruning in (sparse*sparse).pruned() when the result is nearly dense.
    • Bug 1382: move using std::size_t/ptrdiff_t to Eigen's namespace.
    • Fix compilation and inlining when using clang-cl with visual studio.
    • Bug 1392: fix #include <Eigen/Sparse> with mpl2-only.
  • Regressions:
    • Bug 1379: fix compilation in sparse*diagonal*dense with OpenMP.
    • Bug 1373: add missing assertion on size mismatch with compound assignment operators (e.g., mat += mat.col(j))
    • Bug 1375: fix cmake installation with cmake 2.8.
    • Bug 1383: fix LinSpaced with integers for LinPspaced(n,0,n-1) with n==0 or the high<low case.
    • Bug 1381: fix sparse.diagonal() used as a rvalue.
    • Bug 1384: fix evaluation of "sparse/scalar" that used the wrong evaluation path.
    • Bug 478: fix regression in the eigen decomposition of zero matrices.
    • Fix a compilation issue with MSVC regarding the usage of CUDACC_VER
    • Bug 1393: enable Matrix/Array explicit constructor from types with conversion operators.
    • Bug 1394: fix compilation of SelfAdjointEigenSolver<Matrix>(sparse*sparse).
  • Others:
    • Fix ARM NEON wrapper for 16 byte systems.
    • Bug 1391: include IO.h before DenseBase to enable its usage in DenseBase plugins.
    • Bug 1389: fix std containers support with MSVC and AVX.
    • Bug 1380: fix matrix exponential with Map<>.
    • Bug 1369: fix type mismatch warning with OpenMP.
    • Fix usage of size_t instead of Index in sefl-adjoint matrix * vector
    • Bug 1378: fix doc (DiagonalIndex vs Diagonal).

Eigen 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, bug 1336, Bug 1370, StorageIndex, selfadjointView, sparseView(), sparse triangular solve, AsciiQuickReference.txt, ...)
  • Regressions:
    • Bug 1358: fix compilation of sparse += sparse.selfadjointView();
    • Bug 1359: fix compilation of sparse /=scalar, sparse *=scalar, and col_major_sparse.row() *= scalar.
    • Bug 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.
    • Bug 1360: fix -0 vs +0 issue with Altivec
    • Bug 1363: fix mingw's ABI issue
    • Bug 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

Eigen 3.3.1

Released on December 06, 2016.

Changes since 3.3.0:

  • Bug 426: add operators && and || to dense and sparse matrices (only dense arrays were supported)
  • Bug 1319: add support for CMake's imported targets.
  • Bug 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>.
  • Bug 1351: fix compilation of random with old compilers.
  • Fix a performance regression in (mat*mat)*vec for which mat*mat was evaluated multiple times.
  • Fix a regression in SparseMatrix::ReverseInnerIterator
  • Fix performance issue of products for dynamic size matrices with fixed max size.
  • implement float/std::complex<float> for ZVector
  • Some fixes for expression-template scalar-types
  • Bug 1356: fix undefined behavior with nullptr.
  • Workaround some compilation errors with MSVC and MSVC/clr
  • Bug 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.

Eigen 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.

Eigen 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).
    • Bug 1311: Fix alignment logic in some cases of (scalar*small).lazyProduct(small)
    • Bug 1317: fix a performance regression from 3.2 with clang and some nested block expressions.
    • Bug 1308: fix compilation of some small products involving nullary-expressions.
    • Bug 1333: Fix a regression with mat.array().sum()
    • Bug 1328: Fix a compilation issue with old compilers introduced in 3.3-rc1.
    • Bug 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
    • Bug 1304: Fix Projective * scaling and Projective *= scaling.
    • Bug 1310: Workaround a compilation regression from 3.2 regarding triangular * homogeneous
    • Bug 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
    • Bug 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

Eigen 3.2.10

Released on October 04, 2016

Changes since 3.2.9:

Main fixes and improvements:

  • Bug 1272: Core module, improve comma-initializer in handling empty matrices.
  • Bug 1276: Core module, remove all references to std::binder* when C++11 is enabled (those are deprecated).
  • Bug 1304: Geometry module, fix Projective * scaling and Projective *= scaling.
  • Bug 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.
  • Bug 1275: backported improved random generator from 3.3
  • Workaround MSVC 2013 compilation issue in Reverse
  • Fix UmfPackLU constructor for expressions.
  • Bug 1273: fix shortcoming in eigen_assert macro
  • Bug 1249: disable the use of __builtin_prefetch for compilers other than GCC, clang, and ICC.
  • Bug 1265: fix doc of QR decompositions

Eigen 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:
    • Bug 645: implement eigenvector computation in GeneralizedEigenSolver
    • Bug 1271: add a SparseMatrix::coeffs() method returning a linear view of the non-zeros (for compressed mode only).
    • Bug 1286: Improve support for custom nullary functors: now the functor only has to expose one relevant operator among f(), f(i), f(i,j).
    • Bug 1272: improve comma-initializer in handling empty matrices.
    • Bug 1268: detect failure in LDLT and report them through info()
    • Add support for scalar factor in sparse-selfadjoint * dense products, and enable +=/-= assignment for such products.
    • Remove temporaries in product expressions matching "d?=a-b*c" by rewriting them as "d?=a; d?=b*c;"
    • Vectorization improvements for some small product cases.
  • Doc:
    • Bug 1265: fix outdated doc in QR facto
    • Bug 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.
    • Bug 1273: fix shortcoming in eigen_assert macro
    • Bug 1278: code formatting
    • Bug 1270: by-pass hand written pmadd with recent clang versions.
    • Bug 1282: fix implicit double to float conversion warning
    • Bug 1167: simplify installation of header files using cmake's install(DIRECTORY ...) command
    • Bug 1283: fix products involving an uncommon vector.block(..) expressions.
    • Bug 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.

Eigen 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:
    • Bug 707: Add support for inplace dense decompositions.
    • Bug 977: normalize(d) left the input unchanged if its norm is 0 or too close to 0.
    • Bug 977: add stableNormalize[d] methods: they are analogues to normalize[d] but with carefull handling of under/over-flow.
    • Bug 279: Implement generic scalar*expr and expr*scalar operators. This is especially useful for custom scalar types, e.g., to enable float*expr<multi_prec> without conversion.
    • New unsupported/Eigen/SpecialFunctions module providing the following coefficient-wise math functions: erf, erfc, lgamma, digamma, polygamma, igamma, igammac, zeta, betainc.
    • Add fast reciprocal condition estimators in dense LU and Cholesky factorizations.
    • Bug 1230: add support for SelfadjointView::triangularView() and diagonal()
    • Bug 823: add Quaternion::UnitRandom() method.
    • Add exclusive or operator for bool arrays.
    • Relax dependency on MKL for EIGEN_USE_BLAS and EIGEN_USE_LAPACKE: any BLAS and LAPACK libraries can now be used as backend (see doc).
    • Add static assertion to x(), y(), z(), w() accessors
    • Bug 51: avoid dynamic memory allocation in fixed-size rank-updates, matrix products evaluated within a triangular part, and selfadjoint times matrix products.
    • Bug 696: enable zero-sized block at compile-time by relaxing the respective assertion
    • Bug 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)
    • Bug 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.
    • Bug 1193: now lpNorm<Infinity> supports empty inputs.
    • Bug 1151: remove useless critical section in matrix product
    • Add missing non-const reverse method in VectorwiseOp (e.g., this enables A.rowwise().reverse() = ...)
    • Update RealQZ to reduce 2x2 diagonal block of T corresponding to non reduced diagonal block of S to positive diagonal form.
  • Sparse features:
    • Bug 632: add support for "dense +/- sparse" operations. The current implementation is based on SparseView to make the dense subexpression compatible with the sparse one.
    • Bug 1095: add Cholmod*::logDeterminant/determinant functions.
    • Add SparseVector::conservativeResize() method
    • Bug 946: generalize Cholmod::solve to handle any rhs expressions.
    • Bug 1150: make IncompleteCholesky more robust by iteratively increase the shift until the factorization succeed (with at most 10 attempts)
    • Bug 557: make InnerIterator of sparse storage types more versatile by adding default-ctor, copy-ctor/assignment.
    • Bug 694: document that SparseQR::matrixR is not sorted.
    • Block expressions now expose all the information defining the block.
    • Fix GMRES returned error.
    • Bug 1119: add support for SuperLU 5
  • Performance improvements:
    • Bug 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).
    • Bug 1154: use dynamic scheduling for spmv products.
    • Bug 667, 1181: improve perf with MSVC and ICC through FORCE_INLINE
    • Improve heuristics for switching between coeff-based and general matrix product implementation at compile-time.
    • Add vectorization of tanh for float (SSE/AVX)
    • Improve cost estimates of numerous functors.
    • Numerous improvements regarding half-packet vectorization: coeff-based products (e.g., Matrix4f*Vector4f is now vectorized again when using AVX), reductions, linear vs inner traversals.
    • Fix performance regression: with AVX, unaligned stores were emitted instead of aligned ones for fixed size assignment.
    • Bug 1201: optimize affine*vector products.
    • Bug 1191: prevent Clang/ARM from rewriting VMLA into VMUL+VADD.
    • Small speed-up in Quaternion::slerp.
    • Bug 1201: improve code generation of affine*vec with MSVC
  • Doc:
    • Add documentation and exemple for matrix-free solving.
    • A new documentation page summarizing coefficient-wise math functions.
    • Bug 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_VER option 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.
    • NumTraits now exposes a digits10 function making internal::significant_decimals_impl deprecated.
    • Countless improvements and fixes in Tensors module.
    • Bug 1156: fix several function declarations whose arguments were passed by value instead of being passed by reference
    • Bug 1164: fix std::list and std::deque specializations such that our aligned allocator is automatically activated only when the user did not specified an allocator (or specified the default std::allocator).
    • Bug 795: mention allocate_shared as a candidate for aligned_allocator.
    • Bug 1170: skip calls to memcpy/memmove for empty inputs.
    • Bug 1203: by-pass large stack-allocation in stableNorm if EIGEN_STACK_ALLOCATION_LIMIT is too small
    • Improve constness of blas level-2/3 interface.
    • Implement stricter argument checking for SYRK and SY2K
    • Countless improvements in the documentations.
    • Internal: Remove posix_memalign, _mm_malloc, and _aligned_malloc special paths.
    • Internal: Remove custom unaligned loads for SSE
    • Internal: introduce [U]IntPtr types to be used for casting pointers to integers.
    • Internal: NumTraits now exposes infinity()
    • Internal: EvalBeforeNestingBit is now deprecated.
    • Bug 1213: workaround gcc linking issue with anonymous enums.
    • Bug 1242: fix comma initializer with empty matrices.
    • Bug 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:
    • Bug 1144: fix regression in x=y+A*x (aliasing issue)
    • Bug 1140: fix usage of _mm256_set_m128 and _mm256_setr_m128 in AVX support
    • Bug 1141: fix some missing initializations in CholmodSupport
    • Bug 1143: workaround gcc bug #10200
    • Bug 1145, 1147, 1148, 1149: numerous fixes in PastixSupport
    • Bug 1153: don't rely on __GXX_EXPERIMENTAL_CXX0X__ to detect C++11 support.
    • Bug 1152: fix data race in static initialization of blas routines.
    • fix some buffer overflow in product block size computation.
    • Bug 96, 1006: fix by value argument in result_of
    • Bug 178: clean several const_cast.
    • Fix compilation in ceil() function.
    • Bug 698: fix linspaced for integer types.
    • Bug 1161: fix division by zero for huge scalar types in cache block size computation.
    • Bug 774: fix a numerical issue in Umeyama algorithm that produced unwanted reflections.
    • Bug 901: fix triangular-view with unit diagonal of sparse rectangular matrices.
    • Bug 1166: fix shortcoming in gemv when the destination is not a vector at compile-time.
    • Bug 1172: make SparseMatrix::valuePtr and innderIndexPtr properly return null for empty matrices
    • Bug 537: fix a compilation issue in Quaternion with Apples's compiler
    • Bug 1186: fix usage of vreinterpretq_u64_f64 (NEON)
    • Bug 1190: fix usage of __ARM_FEATURE_FMA on Clang/ARM
    • Bug 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 sparse.cast<>().transpose().
    • Fix double-conversion warnings throughout the code.
    • Bug 1207: fix logical-op warnings
    • Bug 1222, 1223: fix compilation in AutoDiffScalar.
    • Bug 1229: fix usage of Derived::Options in MatrixFunctions.
    • Bug 1224: fix regression in (dense*dense).sparseView().
    • Bug 1231: fix compilation regression regarding complex_array/=real_array.
    • Bug 1221: disable gcc 6 warning: ignoring attributes on template argument.
    • Workaround clang/llvm bug 27908
    • Bug 1236: fix possible integer overflow in sparse matrix product.
    • Bug 1238: fix SparseMatrix::sum() overload for un-compressed mode
    • Bug 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,
    • Bug 1258: fix compilation of Map<SparseMatrix>::coeffRef
    • Bug 1249: fix compilation with compilers that do not support__builtin_prefetch .
    • Bug 1250: fix pow() for AutoDiffScalar with custom nested scalar type.

Eigen 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)
    • Bug 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()
    • Bug 1238: fix SparseMatrix::sum() overload for un-compressed mode
    • Bug 1213: workaround gcc linking issue with anonymous enums.
    • Bug 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
    • Bug 1200: make aligned_allocator c++11 compatible (backported from 3.3)
    • Bug 1182: improve generality of abs2 (backported from 3.3)
    • Bug 537: fix compilation of Quaternion with Apples's compiler
    • Bug 1176: allow products between compatible scalar types
    • Bug 1172: make valuePtr and innerIndexPtr properly return null for empty sparse matrices.
    • Bug 1170: skip calls to memcpy/memmove for empty inputs.
  • Others:
    • Bug 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).
    • Bug 734: fix a storage order issue in unsupported Spline module
    • Bug 1222: fix a compilation issue in AutoDiffScalar
    • Bug 1221: shutdown some GCC6's warnings.
    • Bug 1175: fix index type conversion warnings in sparse to dense conversion.

Eigen 3.2.8

Released on February 16, 2016

Changes since 3.2.7:

  • Main fixes and improvements:
    • Make FullPivLU::solve use rank() instead of nonzeroPivots().
    • Bug 1166: fix issue in matrix-vector products when the destination is not a vector at compile-time.
    • Bug 1100: Improve cmake/pkg-config support.
    • Bug 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.
    • Bug 1156: fix several function declarations whose arguments were passed by value instead of being passed by reference
    • Bug 1164: fix std::list and std::deque specializations such that our aligned allocator is automatically activatived only when the user did not specified an allocator (or specified the default std::allocator).
  • Others:
    • Fix BLAS backend (aka MKL) for empty matrix products.
    • Bug 1134: fix JacobiSVD pre-allocation.
    • Bug 1111: fix infinite recursion in sparse-column-major.row(i).nonZeros() (it now produces a compilation error)
    • Bug 1106: workaround a compilation issue in Sparse module for msvc-icc combo
    • Bug 1153: remove the usage of __GXX_EXPERIMENTAL_CXX0X__ to detect C++11 support
    • Bug 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.

Eigen 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() and LU::adjoint().solve() API.
    • Add Array::rsqrt() method as a more efficient shorcut for sqrt().inverse().
    • Add Array::sign() method for real and complexes.
    • Add lgamma, erf, and erfc functions for arrays.
    • Add support for row/col-wise lpNorm().
    • Add missing Rotation2D::operator=(Matrix2x2).
    • Add support for permutation * homogenous.
    • Improve numerical accuracy in LLT and triangular solve by using true scalar divisions (instead of x * (1/y)).
    • Bug 1074: forbid the creation of PlainObjectBase objects.
  • Sparse features:
    • Add IncompleteCholesky preconditioner.
    • Improve support for matrix-free iterative solvers
    • Extend setFromTripplets API to allow passing a functor object controlling how to collapse duplicated entries.
    • Bug 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.
    • Bug 1064: add support for Ref<SparseVector>.
    • Add supports for real mul/div sparse<complex> operations.
    • Bug 1086: replace deprecated UF_long by SuiteSparse_long.
    • Make Ref<SparseMatrix> more versatile.
  • Performance improvements:
    • Bug 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).
    • Bug 1090: improve redux evaluation logic.
    • Enable unaligned vectorization of small fixed size matrix products.
  • Misc improvements:
    • Improve support for isfinite/isnan/isinf in fast-math mode.
    • Make the IterativeLinearSolvers module compatible with MPL2-only mode by defaulting to COLAMDOrdering and NaturalOrdering for ILUT and ILLT respectively.
    • Avoid any OpenMP calls if multi-threading is explicitly disabled at runtime.
    • Make abs2 compatible with custom complex types.
    • Bug 1109: use noexcept instead of throw for C++11 compilers.
    • Bug 1100: Improve cmake/pkg-config support.
    • Countless improvements and fixes in Tensors module.
  • Most visible fixes:
    • Bug 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.
    • Bug 1092: fix iterative solver ctors for expressions as input.
    • Bug 1099: fix missing include for CUDA.
    • Bug 1102: fix multiple definition linking issue.
    • Bug 1088: fix setIdenity for non-compressed sparse-matrix.
    • Fix SparseMatrix::insert/coeffRef for non-empty compressed matrix.
    • Bug 1113: fix name conflict with C99's "I".
    • Bug 1075: fix AlignedBox::sample for runtime dimension.
    • Bug 1103: fix NEON vectorization of complex<double> multiplication.
    • Bug 1134: fix JacobiSVD pre-allocation.
    • Fix ICE with VC2015 Update1.
    • Improve cmake install scripts.

Eigen 3.2.7

Released on November 5, 2015

Changes since 3.2.6:

  • Main fixes and improvements:
    • Add support for dense.cwiseProduct(sparse).
    • Fix a regression regarding (dense*sparse).diagonal().
    • Make the IterativeLinearSolvers module compatible with MPL2-only mode by defaulting to COLAMDOrdering and NaturalOrdering for ILUT and ILLT respectively.
    • Bug 266: backport support for c++11 move semantic
    • operator/=(Scalar) now performs a true division (instead of mat*(1/s))
    • Improve numerical accuracy in LLT and triangular solve by using true scalar divisions (instead of mat * (1/s))
    • Bug 1092: fix iterative solver constructors for expressions as input
    • Bug 1088: fix setIdenity for non-compressed sparse-matrix
    • Bug 1086: add support for recent SuiteSparse versions
  • Others:
    • Add overloads for real-scalar times SparseMatrix<complex> operations. This avoids real to complex conversions, and also fixes a compilation issue with MSVC.
    • Use explicit Scalar types for AngleAxis initialization
    • Fix several shortcomings in cost computation (avoid multiple re-evaluation in some very rare cases).
    • Bug 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.
    • Bug 1063: fix nesting of unsupported/AutoDiffScalar to prevent dead references when computing second-order derivatives
    • Bug 1100: remove explicit CMAKE_INSTALL_PREFIX prefix to conform to cmake install's DESTINATION parameter.
    • unsupported/ArpackSupport is now properly installed by make install.
    • Bug 1080: warning fixes

Eigen 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 (bug 1053), and for empty (bug 1026) and some structurally rank deficient matrices (bug 792)
  • Bug 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
  • Bug 1059: fix predux_max<Packet4i> for NEON
  • Bug 1039: fix some issues when redefining EIGEN_DEFAULT_DENSE_INDEX_TYPE
  • Bug 1062: fix SelfAdjointEigenSolver for RowMajor matrices
  • MKL: fix support for the 11.2 version, and fix a naming conflict (bug 1067)
    • Bug 1033: explicit type conversion from 0 to RealScalar

Eigen 3.3-alpha1

Released on September 4, 2015

See the announcement.

Eigen 3.2.5

Released on June 16, 2015

Changes since 3.2.4:

  • Changes with main impact:
    • Improve robustness of SimplicialLDLT to semidefinite problems by correctly handling structural zeros in AMD reordering
    • Re-enable supernodes in SparseLU (fix a performance regression in SparseLU)
    • Use zero guess in ConjugateGradients::solve
    • Add PermutationMatrix::determinant method
    • Fix SparseLU::signDeterminant() method, and add a SparseLU::determinant() method
    • Allows Lower|Upper as a template argument of CG and MINRES: in this case the full matrix will be considered
    • Bug 872: remove usage of std::bind* functions (deprecated in c++11)
  • Numerical robustness improvements:
    • Bug 1014: improve numerical robustness of the 3x3 direct eigenvalue solver
    • Bug 1013: fix 2x2 direct eigenvalue solver for identical eigenvalues
    • Bug 824: improve accuracy of Quaternion::angularDistance
    • Bug 941: fix an accuracy issue in ColPivHouseholderQR by continuing the decomposition on a small pivot
    • Bug 933: improve numerical robustness in RealSchur
    • Fix default threshold value in SPQR
  • Other changes:
    • Improved support for custom scalar types in SparseLU
    • Improve cygwin compatibility
    • Bug 650: fix an issue with sparse-dense product and rowmajor matrices
    • Bug 704: fix MKL support (HouseholderQR)
    • Bug 705: fix handling of Lapack potrf return code (LLT)
    • Bug 714: fix matrix product with OpenMP support
    • Bug 949: add static assertions for incompatible scalar types in many of the dense decompositions
    • Bugs 957, 1000: workaround MSVC/ICC compilation issues when using sparse blocks
    • Bug 969: fix ambiguous calls to Ref
    • Bugs 972, 986: add support for coefficient-based product with 0 depth
    • Bug 980: fix taking a row (resp. column) of a column-major (resp. row-major) sparse matrix
    • Bug 983: fix an alignement issue in Quaternion
    • Bug 985: fix RealQZ when either matrix had zero rows or columns
    • Bug 987: fix alignement guess in diagonal product
    • Bug 993: fix a pitfall with matrix.inverse()
    • Bugs 996, 1016: fix scalar conversions
    • Bug 1003: fix handling of pointers non aligned on scalar boundary in slice-vectorization
    • Bug 1010: fix member initialization in IncompleteLUT
    • Bug 1012: enable alloca on Mac OS or if alloca is defined as macro
    • Doc and build system: 733, 914, 952, 961, 999

Eigen 3.2.4

Released on January 21, 2015

Changes since 3.2.3:

  • Fix compilation regression in Rotation2D
  • Bug 920: fix compilation issue with MSVC 2015.
  • Bug 921: fix utilization of bitwise operation on enums in first_aligned.
  • Fix compilation with NEON on some platforms.

Eigen 3.2.3

Released on December 16, 2014

Changes since 3.2.2:

  • Core:
    • Enable Mx0 * 0xN matrix products.
    • Bug 859: fix returned values for vectorized versions of exp(NaN), log(NaN), sqrt(NaN) and sqrt(-1).
    • Bug 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.
    • Bug 854: fix numerical issue in SelfAdjointEigenSolver::computeDirect for 3x3 matrices.
    • Bug 884: make sure there no call to malloc for zero-sized matrices or for a Ref<> without temporaries.
    • Bug 890: fix aliasing detection when applying a permutation.
    • Bug 898: MSVC optimization by adding inline hint to const_cast_ptr.
    • Bug 853: remove enable_if<> in Ref<> ctor.
  • Dense solvers:
    • Bug 894: fix the sign returned by LDLT for multiple calls to compute().
    • Fix JacobiSVD wrt underflow and overflow.
    • Bug 791: fix infinite loop in JacobiSVD in the presence of NaN.
  • Sparse:
    • Fix out-of-bounds memory write when the product of two sparse matrices is completely dense and performed using pruning.
    • UmfPack support: fix redundant evaluation/copies when calling compute(), add support for generic expressions as input, and fix extraction of the L and U factors (Bug 911).
    • Improve SparseMatrix::block for const matrices (the generic path was used).
    • Fix memory pre-allocation when permuting inner vectors of a sparse matrix.
    • Fix SparseQR::rank for a completely empty matrix.
    • Fix SparseQR for row-major inputs.
    • Fix SparseLU::absDeterminant and add respective unit test.
    • BiCGSTAB: make sure that good initial guesses are not destroyed by a bad preconditioner.
  • Geometry:
    • Fix Hyperplane::Through(a,b,c) when points are aligned or identical.
    • Fix linking issues in OpenGLSupport.
  • OS, build system and doc:

Eigen 3.2.2

Released on August 4, 2014

Changes since 3.2.1:

  • Core:
    • Relax Ref such that Ref<MatrixXf> accepts a RowVectorXf which can be seen as a degenerate MatrixXf(1,N)
    • Fix performance regression for the vectorization of sub columns/rows of matrices.
    • EIGEN_STACK_ALLOCATION_LIMIT: Raise its default value to 128KB, make use of it to assert on maximal fixed size object, and allows it to be 0 to mean "no limit".
    • Bug 839: Fix 1x1 triangular matrix-vector product.
    • Bug 755: CommaInitializer produced wrong assertions in absence of Return-Value-Optimization.
  • Dense solvers:
    • Add a rank() method with threshold control to JacobiSVD, and make solve uses it to return the minimal norm solution for rank-deficient problems.
    • Various numerical fixes in JacobiSVD, including:bug 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().
    • Bug 222: Make temporary matrix column-major independently of EIGEN_DEFAULT_TO_ROW_MAJOR in BlockHouseholder.
  • Sparse:
    • Bug 838]: Fix dense * sparse and sparse * dense outer products and detect outer products from either the lhs or rhs.
    • Make the ordering method of SimplicialL[D]LT configurable.
    • Fix regression in the restart mechanism of BiCGSTAB.
    • Bug 836: extend SparseQR to support more columns than rows.
    • Bug 808: Use double instead of float for the increasing size ratio in CompressedStorage::resize, fix implicit conversions from int/longint to float/double, and fix set_from_triplets temporary matrix type.
    • Bug 647: Use smart_copy instead of bitwise memcpy in CompressedStorage.
    • GMRES: Initialize essential Householder vector with correct dimension.
  • Geometry:
    • Bug 807: Missing scalar type cast in umeyama()
    • Bug 806: Missing scalar type cast in Quaternion::setFromTwoVectors()
    • Bug 759: Removed hard-coded double-math from Quaternion::angularDistance.
  • OS, build system and doc:
    • Fix compilation with Windows CE.
    • Fix some ICEs with VC11.
    • Check IMKL version for compatibility with Eigen
    • Bug 754: Only inserted (!defined(_WIN32_WCE)) analog to alloc and free implementation.
    • Bug 803: Avoid char* to int* conversion.
    • Bug 819: Include path of details.h file.
    • Bug 738: Use the "current" version of cmake project directories to ease the inclusion of Eigen within other projects.
    • Bug 815: Fix doc of FullPivLU wrt permutation matrices.
    • Bug 632: doc: Note that dm2 = sm1 + dm1 is not possible
    • Extend AsciiQuickReference (real, imag, conjugate, rot90)

Eigen 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.
    • Bug 654: Allow construction of row vector from 1D array.
    • Bug 679: Support cwiseMin() and cwiseMax() on maps.
    • Support conservativeResize() on vectors.
    • Improve performance of vectorwise and replicate expressions.
    • Bug 642: Add vectorization of sqrt for doubles, and make sqrt really safe if EIGEN_FAST_MATH is disabled.
    • Bug 616: Try harder to align columns when printing matrices and arrays.
    • Bug 579: Add optional run-time parameter to fixed-size block methods.
    • Implement .all() and .any() for zero-sized objects
    • Bug 708: Add placement new and delete for arrays.
    • Bug 503: Better C++11 support.
  • Dense linear algebra:
    • Bug 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.
    • Bug 678: Fix fullPivHouseholderQR for rectangular matrices.
    • Fix a 0/0 issue in JacobiSVD.
    • Bug 736: Wrong result in LDLT::isPositiveDefinite() for semi-definite matrices.
    • Bug 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.
    • Bug 635: add isCompressed to MappedSparseMatrix for compatibility.
    • Bug 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 (bug 672).
    • Fixes in SparseQR: reduce explicit zero, assigning result to map, assert catching non-conforming sizes, memory leak.
    • Bug 681: Uninitialized value in CholmodSupport which may lead to incorrect results.
    • Fix some issues when using a non-standard index type (bug 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).

Eigen 3.1.4

Released on August 02, 2013

Changes since 3.1.3:

  • Bug 620: Fix robustness and performance issues in JacobiSVD::solve.
  • Bug 613: Fix accuracy of SSE sqrt for very small numbers.
  • Bug 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.

Eigen 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).

Eigen 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.

Eigen 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.

Eigen 3.2-rc1

Released on July 17, 2013.

Main changes since 3.2-beta1:

  • New features:
    • Bug 562: Add vector-wise normalized and normalize functions.
    • Bug 564: Add hasNaN and isFinite members.
    • Bug 579: Add support for mixed static/dynamic-size .block().
    • Bug 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.
    • Bug 596: Add conversion from SparseQR::matrixQ() to a SparseMatrix.
    • Bug 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.
    • Bug 71: Enable vectorization of diagonal products in more cases.
    • Bug 620: Fix robustness and performance issues in JacobiSVD::solve.
    • Bug 609: Improve accuracy and consistency of the eulerAngles functions.
    • Bug 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.
    • Bug 590 & 591: Minor improvements in NEON vectorization.
  • Bug fixes:
    • Fix HouseholderSequence::conjugate() and ::adjoint().
    • Fix SparseLU for dense matrices and matrices in non compressed mode.
    • Fix SparseMatrix::conservativeResize() when one dimension is null.
    • Fix transposeInpPlace for arrays.
    • Fix handmade_aligned_realloc.
    • Bug 554: Fix detection of the presence of posix_memalign with mingw.
    • Bug 556: Workaround mingw bug with -O3 or -fipa-cp-clone options.
    • Bug 608: Fix sign computation in LDLT.
    • Bug 567: Fix iterative solvers to immediately return when the initial guess is the true solution and for trivial solution.
    • Bug 607: Fix support for implicit transposition from dense to sparse vectors.
    • Bug 611: Fix support for products of the form diagonal_matrix * sparse_matrix * diagonal_matrix.

Eigen 3.1.3

Released on April 16, 2013

Changes since 3.1.2:

  • Bug 526 - Fix linear vectorized transversal in linspace.
  • Bug 551 - Fix compilation issue when using EIGEN_DEFAULT_DENSE_INDEX_TYPE.
  • Bug 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)

Eigen 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.
  • 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_NAN to help debugging.
    • All bug fixes of the 3.1 branch, plus a couple of other fixes (including 211, 479, 496, 508, 552)

Eigen 3.1.2

Released on Nov 05, 2012

Changes since 3.1.1:

  • Bug 524 - Pardiso's parameter array does not have to be aligned!
  • Bug 521 - Disable __cpuidex on architectures different that x86 or x86-64 with MSVC.
  • Bug 519 - AlignedBox::dim() was wrong for dynamic dimensions.
  • Bug 515 - Fix missing explicit scalar conversion.
  • Bug 511 - Fix pretty printers on windows.
  • Bug 509 - Fix warnings with gcc 4.7
  • Bug 501 - Remove aggressive mat/scalar optimization (was replaced by mat*(1/scalar) for non integer types).
  • Bug 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.

Eigen 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)
  • Bug 487 - Geometry module: isometry * scaling compilation error
  • Bug 486 - MKL support: fixed multiple-references linker errors with various decompositions
  • Bug 480 - work around compilation error on Android NDK due to isfinite being defined as a macro
  • Bug 485 - IterativeLinearSolvers: conflict between a typedef and template type parameter
  • Bug 479 - Eigenvalues/Schur: Adjust max iterations count to matrix size
  • Fixed Geometry module compilation under MSVC
  • Fixed Sparse module compilation under MSVC 2005

Eigen 3.0.6

Released on July 9, 2012

Changes since 3.0.5:

  • Bug 447 - fix infinite recursion in ProductBase::coeff()
  • Bug 478 - fix RealSchur on a zero matrix
  • Bug 477 - fix warnings with gcc 4.7
  • Bug 475 - .exp() now returns +inf when overflow occurs (SSE)
  • Bug 466 - fix a possible race condition in OpenMP environment (for non OpenMP thread model it is recommended to upgrade to 3.1)
  • Bug 362 - fix missing specialization for affine-compact * projective
  • Bug 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)

Eigen 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.

Eigen 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
  • Bug 466:RealSchur failed on a zero matrix
  • Update Adolc and MPReal support modules

Eigen 3.1.0-rc1

Released on June 14, 2012

Main changes since 3.1.0-beta1:

  • Bug 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).
  • Bug 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.

Eigen 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)
    • Bug 447 - fix infinite recursion in ProductBase::coeff()
    • Bug 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.
    • Bug 415 - wrong return type in Rotation2D::operator*=
    • Bug 439 - add Quaternion::FromTwoVectors() static constructor
    • Bug 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: Bug 417, Bug 419, Bug 450

Eigen 3.0.5

Released February 10, 2012

Changes since 3.0.4:

  • Bug 417 - fix nesting of Map expressions
  • Bug 415 - fix return value of Rotation2D::operator*=
  • Bug 410 - fix a possible out of range access in EigenSolver
  • Bug 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
  • Bug 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

Eigen 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 saprse*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,

Eigen 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)

Eigen 3.0.4

Released December 6, 2011

Changes since 3.0.3:

  • Bug 363 - check for integer overflow in size computations
  • Bug 369 - Quaternion alignment is broken (and more alignment fixes)
  • Bug 354 - Converge better in SelfAdjointEigenSolver, and allow better handling of non-convergent cases
  • Bug 347 - Fix compilation on ARM NEON with LLVM 3.0 and iOS SDK 5.0
  • Bug 372 - Put unsupported modules documentation at the right place
  • Bug 383 - Fix C++11 compilation problem due to some constructs mis-interpreted as c++11 user-defined literals
  • Bug 373 - Compilation error with clang 2.9 when exceptions are disabled
  • Fix compilation issue with QuaternionBase::cast

Eigen 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

Eigen 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.

Eigen 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.

Eigen 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.

Eigen 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.

Eigen 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.

Eigen 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 Bug 203).
  • Core: Fixed crashes when using EIGEN_DONT_ALIGN or EIGEN_DONT_ALIGN_STATICALLY (Bug 213 and friends).
  • Core: EIGEN_DONT_ALIGN and EIGEN_DONT_ALIGN_STATICALLY are now covered by unit tests.
  • Geometry: Fixed transform * matrix products (Bug 207).
  • Geometry: compilation fix for mixing CompactAffine with Homogeneous objects
  • Geometry: compilation fix for 1D transform
  • SVD: fix non-computing constructors (correctly forward computationOptions) (Bug 206)
  • Sparse: fix resizing when the destination sparse matrix is row major (Bug 37)
  • more Eigen2Support improvements
  • more unit test fixes/improvements
  • more documentation improvements
  • more compiler warnings fixes
  • fixed GDB pretty-printer for dynamic-size matrices (Bug 210)

Eigen 3.0-beta4

Released February 28, 2011.

Main changes since 3.0-beta3:

  • Non-vectorization bug fixes:
    • fix Bug 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 Bug 195: fast SSE unaligned loads fail on GCC/i386 and on Clang
    • fix Bug 186: worked around a GCC 4.3 i386 backend issue with SSE
    • fix Bug 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 Bug 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 Bug 189 (cblat1 test failure)
  • Documentation
    • improved conservativeResize methods documentation
    • documented sorting of eigenvalues
    • misc documentation improvements
    • improve documentation of plugins

Eigen 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'.
    • 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:

Eigen 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).

Eigen 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).

Eigen 3.0-beta1

Released July 5, 2010

See the announcement.

Eigen 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++).

Eigen 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.

Eigen 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

Eigen 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.

Eigen 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

Eigen 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.

Eigen 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.

Eigen 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

Eigen 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).
  • 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.

Eigen 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)

Eigen 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).

Eigen 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)

Eigen 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).

Eigen 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)

Eigen 2.0.0

Released February 2, 2009