ChangeLog

From Eigen
Jump to: navigation, search

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:
    • http://eigen.tuxfamily.org/bz/show_bug.cgi?id=838 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-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.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'.
  • 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:


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

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