Closed
Conversation
Collaborator
Author
|
Continuing in #69 |
phcerdan
pushed a commit
to phcerdan/ITK
that referenced
this pull request
Feb 6, 2020
Run the UpdateFromUpstream.sh script to extract upstream Eigen3
using the following shell commands.
$ git archive --prefix=upstream-eigen3/ 0a5604a9 --
Eigen/Cholesky
Eigen/CholmodSupport
Eigen/CMakeLists.txt
Eigen/Core
Eigen/Dense
Eigen/Eigen
Eigen/Eigenvalues
Eigen/Geometry
Eigen/Householder
Eigen/IterativeLinearSolvers
Eigen/Jacobi
Eigen/LU
Eigen/MetisSupport
Eigen/OrderingMethods
Eigen/PardisoSupport
Eigen/PaStiXSupport
Eigen/QR
Eigen/QtAlignedMalloc
Eigen/Sparse
Eigen/SparseCholesky
Eigen/SparseCore
Eigen/SparseLU
Eigen/SparseQR
Eigen/SPQRSupport
Eigen/StdDeque
Eigen/StdList
Eigen/StdVector
Eigen/SuperLUSupport
Eigen/SVD
Eigen/UmfPackSupport
Eigen/src
COPYING.BSD
COPYING.MINPACK
COPYING.MPL2
COPYING.README
README.md
README.kitware.md
CMakeLists.txt
cmake/FindStandardMathLibrary.cmake
cmake/Eigen3Config.cmake.in
.gitattributes
| tar x
$ git shortlog --perl-regexp --author='^((?!Kitware Robot).*)$' --no-merges --abbrev=8 --format='%h %s' c5d991ff..0a5604a9
Abhijit Kundu (9):
ba3457ca Fixed compilation error due to obsolete internal::abs and internal::sqrt function calls
48db34a7 Adding missing OPENGL_LIBRARIES for openglsupport test. Also adding OpenGL include directories as a better pratice even though these are system include directories in most systems.
eb3695d2 Added cmake uninstall target. This adds a cmake command make uninstall Running make uninstall removes the files installed by running make install
4084dce0 Added CMake support for Tensor module. CMake now installs CXX11 Tensor module like the rest of the unsupported modules
ef09ce45 Fix for TensorIO for Fixed sized Tensors.
1127ca85 Added ArpackSupport to cmake install target
0ed41bde ArpackSupport was missing here also.
3fde2022 Making ceil() functor generic w.r.t packet type
0beabb47 Fixed type conversion from int
Abraham Bachrach (2):
039408cd added functions to allow for cwise min/max operations with scalar argument (bug #400). added function for array.min(), array.max(), matrix.cwiseMin(), matrix.cwiseMax().
804ef235 Move the Base typedef's from private to public scope
Adam Szalkowski (1):
969e9226 fix bug #239: the essential part was left uninitialized in some cases
Adolfo Rodriguez Tsouroukdissian (2):
5a36f4a8 Propagate all five matrix template parameters to members and temporaries of decomposition classes. One particular advantage of this is that decomposing matrices with max sizes known at compile time will not allocate. NOTE: The ComplexEigenSolver class currently _does_ allocate (line 135 of Eigenvalues/ComplexEigenSolver.h), but the reason appears to be in the implementation of matrix-matrix products, and not in the decomposition itself. The nomalloc unit test has been extended to verify that decompositions do not allocate when max sizes are specified. There are currently two workarounds to prevent the test from failing (see comments in test/nomalloc.cpp), both of which are related to matrix products that allocate on the stack.
28dde19e - Added problem size constructor to decompositions that did not have one. It preallocates member data structures. - Updated unit tests to check above constructor. - In the compute() method of decompositions: Made temporary matrices/vectors class members to avoid heap allocations during compute() (when dynamic matrices are used, of course).
Adolfo Rodriguez Tsourouksdissian (3):
7bf0e8cd bug #206 - part 2: For HouseholderSequence objects, added non-allocating versions of evalTo() and applyThisOnTheRight/Left that take additional working vector parameters.
5e431779 bug #206 - part 3: Reimplement FullPivHouseholderQR<T>::matrixQ() using ReturnByValue
4477843b bug #206 - part 4: Removes heap allocations from JacobiSVD and its preconditioners
Alexander Neumann (2):
9c97b053 fixed compiling issue using clang-cl with visual studio
7962ac1a fixed inlining issue with clang-cl on visual studio
Alexander Neundorf (2):
6b3d0e68 -use the cmake-provided Eigen_(SOURCE|BINARY)_DIR variables instead of setting own versions (EIGEN_(SOURCE|BINARY)_DIR
84cc69f0 -add quotes around the configured directories so build dirs with spaces produce some errors less
Alexandre Avenel (1):
d46e2c10 Add round, ceil and floor for SSE4.1/AVX (Bug #70)
Alexey Frunze (2):
e6c8d0b7 bug #1584: Improve random (avoid undefined behavior).
af3656d4 Fix build failures in matrix_power and matrix_exponential tests.
Alexey Korepanov (4):
65db91ac Add a RealQZ class: a generalized Schur decomposition for real matrices
a3a9773a RealQZ: bug in splitOffTwoRows fixed
ea310249 RealQZ: bug in pushDownZero fixed too
d937e67b RealQZ: added example and some code comments
Andrew Coles (2):
093e3cd5 Commented out duplicate definition of TransformTraits - was causing compile-time errors.
64fbd93c As values may be used uninitialised, they have now been given sensible defaults; or, in other words, if worse comes to worst, we'll get a guaranteed segfault rather than a heisenburg.
Andy Somerville (2):
842881cf bug #298 - let normalize() return a reference to *this
c06ae325 feature 297: add ParametrizedLine::intersectionPoint() and intersectionParam() -> intersection() is deprecated
Angelos Mantzaflaris (5):
a9aa3bcf fix two warnings(unused typedef, unused variable) and a typo
b6f04a2d typo UIntPtr
4086187e 1. Add explicit template to abs2 (resolves deduction for some arithmetic types) 2. Avoid signed-unsigned conversion in comparison (warning in case Scalar is unsigned)
0a08d4c6 use numext::abs
e236d344 Remove superfluous const's (can cause warnings on some Intel compilers)
Anton Gladky (2):
09a1b7f7 Fixes the problem, described here: http://listengine.tuxfamily.org/lists.tuxfamily.org/eigen/2010/05/msg00154.html
4cd4be97 Port unsupported constrained CG to Eigen3
Armin Berres (4):
ab660a4d inherit from ei_with_aligned_operator_new even with disabled vectorization
dae7f065 didn't meant to commit the fortran check. but anyway, unfortunately it doesn't work the way iot should. the test fails and cmake will terminate if it doesn't find a fortran compiler
8e888a45 call methods from the eigen namespace with prepended Eigen:: in define
6c84b03d add missing newline at EOF
Avi Ginsburg (1):
ac63d689 Patch to allow VS2015 & CUDA 8.0 to compile with Eigen included. I'm not sure whether to limit the check to this compiler combination (` || (EIGEN_COMP_MSVC == 1900 && __CUDACC_VER__) `) or to leave it as it is. I also don't know if this will have any affect on including Eigen in device code (I'm not in my current project).
Basil Fierz (1):
01fb6217 Adds missing EIGEN_STRONG_INLINE to support MSVC properly inlining small vector calculations
Ben Boeckel (1):
efc1e4d5 git: remove executable permissions from header files
Benjamin Chretien (2):
e5d0cb54 Fix typo in Reductions tutorial.
0b7f95a0 Fix typo in SparseMatrix assert.
Benjamin Chrétien (9):
edebb152 PolynomialSolver: add a test to reveal a bug.
0f946079 PolynomialSolver: test template constructor in test suite.
df926493 PolynomialSolver: add missing constructors.
eda79321 PolynomialSolver: fix bugs related to linear polynomials.
c55c5763 PolynomialSolver: fix typo.
db76193b Fix typo in PermutationMatrix (doc).
6f58a410 Fix typos in Ref.h (doc).
c53f8829 Fix more typos in Ref.h (doc).
c4260547 BDCSVD: fix CMake install (missing separator).
Benjamin Piwowarski (1):
6bf49cea bug #449: add SparseMatrix::conservativeResize feature
Benjamin Schindler (5):
097cab26 Added a pretty printer python script for Eigen::Matrix (gdb-7.0 and later).
f2304f3b Adding __init__.py so the printers can be used directly from the checkout
a4c162db Correct license header of the gdb pretty printer
4da991ea Display the data ptr as part of the header
f0315295 Handle row and col major matrices in the gdb pretty printer
Benoit Jacob (1205):
3036eeca Starting Eigen 2 development. The current plan is to use the last release of tvmet (inactive for 2 years and developer unreachable) as the basis for eigen2, because it provides seemingly good expression template mechanisms, we want that, and it would take years to reinvent that wheel. We'll see. So this commit imports the last tvmet release.
47b935fc add initial CMakeLists
8eb898ce begin porting the configure checks to cmake
7947ae0e A TODO to motivate hundreds of hackers to help with Eigen 2 development. Cheesy slashdot joke included.
658eccd4 Convert 5 m4 checks to cmake modules
8f202dc6 Complete the cmake platform checks and remove unnecessary defines.
eab54b49 More cleanup, add CMakeLists for the testsuite. Now need to port it to QTestLib :/
5205e881 adding more CMakeLists, now tvmet is fully installed.
8c001c13 remove TVMET_DYNAMIC_MEMORY define and corresponding checks.
887ff843 remove custom assert system and use plain standard asserts instead. we don't need no complication.
6d749c17 replace size_t with int everywhere. The size_t type means a number of _bytes_, and it was misused as counting e.g. the number of rows/columns in a matrix. Moreover, it is unsigned, which can give strange bugs if a signed/unsigned mismatch occurs.
f8787110 Add cmake module finding the appropriate variant of the "restrict" keyword. Could that be useful to have in kdelibs/cmake/modules ?
e198eb43 add platform check for __attribute__((always_inline))
e3a45173 argh, forgot to svn add...
6fe6a818 Fix enough stuff, and remove enough dead stuff, to make a simple test program compile
e30e7d7b move cmake modules to a modules/ subdir
9939776c more cmake improvements; start removing the autotools stuff.
9dd7a0b6 add eigen-style typedefs
681eb1ed add TVMET_UNUSED macro, as a Q_UNUSED replacement. Use it to shut down warnings in NumericTraits.h.
b155789a begin porting the unittests to QTestLib. The first test, "selfTest" already runs and succeeds. Also expand this test by testing more types and sizes.
152e09a1 remove long long, long double, unsigned, short, char, bool types. Keep only int, float, double, complex<T>.
37bd64b4 Remove remaining per-element math functions. Remove defines for IEEE, SYSV and complex math. Now the user has to define himself EIGEN_USE_COMPLEX if he wants complex support. Remove TVMET_OPTIMIZE. More cleanup.
b6dedaf7 remove two unused files
d62af65d port TestNumericTraits to QTestLib. This revealed some shortcomings in tvmet's infrastructure, in particular it lacks adequate fuzzy compares. will port that from eigen1.
f1bd0902 Big overhaul and simplification of the NumericTraits system. Add a utility header for random numbers (might be merged into NumericTraits)
ca438b2c Unit-tests updated for the stuff in the previous commit.
71268227 Big rework of the Traits system, unittests updated.
c9a2c373 lots of fixes for complex numbers. unittests now test complex numbers.
9a519c30 forgot to "svn add" a very important file!!
011c7e9e forgot to add another file...
07f96b60 remove 4 files from tvmet that are now replaced by testtraits.cpp
ad89fc82 -- switch Matrix class to column-major order like in Eigen -- many more Eigenification changes, in preparation of the big merge -- big changes in the Comma Initializer to allow for column-major order, leading to a simpler and cleaner solution. "commaWrite" hook added to the classes using the Comma Initializer. -- lots of API improvements, cleanup, removal of dead/useless stuff -- testsuite updated
dfd4d2c4 of course, i had forgotten to svn add one file
c14ba38d some more cleanup in comma-initializer stuff
c141f18b some cleanup
bb114eb6 remove more stuff that I don't need
7eeb6208 restart Eigen2 development from scratch.
1dabb45d Hello, World! This is the initial commit for Eigen2, since I restarted it from scratch on Sunday.
13a82795 forgot to svn add some CMakeLists
9477e62b add a missing operator= for copying a matrix into an expression.
e7ef6dba - Introduce aliasing system - Remove operator<<, use .alias() instead - Introduce operator/ (scalar) - Cleanup, unit-tests update.
c3731b36 Add operator += and operator -= between matrices/vectors/expressions
c030e570 extend operators += and -= to aliases
61158b19 add operator *= between matrices, with automatic aliasing. add tutorial in doc/ subdirectory.
506cc5db remove operator *= between matrices: too much hassle.
fe9b6b8f remove the MatrixConstXpr and MatrixConstRef classes. Now the user doesn't need anymore to call .xpr() and can simply do: matrix.row(i) += matrix.row(j)
1dab53d3 update tutorial
3b727ef9 some cleanup
1af61c6f reorganize header files, split MatrixBase into smaller files. expose only a few meta-headers to the user, the rest moves to a internal/ subdirectory
55227b1f Deep refactoring. 1) Kill MatrixXpr class, instead let all class inherit a common EigenBase class 2) Kill MatrixBase/Matrix/Vector classes, instead introduce a single Matrix class, a MatrixStorage class, and typedefs to emulate vectors 3) Huge code cleanup, remove large preprocessor macros, sloccount drop to ~750 down from 1100. 4) Introduce compile-time-known sizes
a2dd9dd6 Give the axe to the aliasing system. Improve the evaluation system instead.
8a024825 fix bugs caused by default copy constructors being called. valgrind, you saved my life.
628b1a8f implement scalar operators separately for each type using a macro. This is required e.g. to allow "2 * m" with m a matrix of doubles.
d99d9407 add operators *= and /=
4e299afb don't enclose eigen in a namespace. prefixing is the way to go. For example Qt uses a prefix and no namespace (except for a few things)
5160e9d0 Half-way commit prefixing object names. I am forced to commit now because I renamed a file once with a wrong filename and svn refuses to let me rename it again, tells me i should propagate first.
28c44a95 Finish prefixing everything with "Ei"
835e0c9f Found a way to have eval() be a member function of class EiObject, instead of a global function.
aa3294f1 add example to the documentation
51e29ae4 some reorganization leading to simpler expression trees
ee63e15e make matrix multiplication do immediate evaluation; add lazyMul() for the old behaviour some reorganization, especially in MatrixStorage start playing with loop unrolling, always_inline, and __restrict__
7d41ad9d Get rid of a nasty const_cast by introducing a MatrixConstRef class. Remove the __restrict__'s for now.
023773be Fix super-nasty bug in the declaration of the storage array of fixed-size matrices. Also some simplifications.
4241ddde temporarily remove division unit-tests. they caused div-by-zero's , reported by Michael Olbrich. The solution will consist in adding a real Traits system.
e116aba4 adapt to coding style used elsewhere in eigen2
65691961 - add copyright line for Michael Olbrich - some meta unrolling improvements
60156980 Michael was right, it's best to base the unrolling limit on the product Rows*Cols.
3cf6caba remove useless typedefs
96524fc5 Split Row and Column into separate files. Introduce a notion of RowVector (typedef for Matriw with 1 row) Make row() return a row vector instead of a "column vector" Introduce operator[] to access elements of row/column vectors uniformly Remove default arguments in operator(), these were for vectors, now use operator[] instead
f5f45d75 Move the meta loop unrolling to a separate file, Loop.h
c768a449 Add matrix transposition
ae207240 Introduce Numeric Traits, with fuzzy compares, random numbers, etc.
9eff6854 add matrix conjugation and adjunction. compilation fixes in the numeric traits.
f939abd5 aargh, had forgotten to 'svn add' a file. Yeah, 'svn st' is my friend, i know...
be429ebf reorganisation of headers, commit47b935fc42cbf2ca992d8a270bc1b0fc97d1f6bc /2....
4fe78b8e reorganization of headers, part 2/2...
95b33167 reorganize meta loop unrolling, add Trace (meta-unrolled), fix compilation issues in the conjugation/adjunction stuff
f0be175b add dot product, extend meta unrolling everywhere
ac6ff5ef reverse certain inner loops. Now the benchmark runs in 3.5s instead of 5.5s before!
7f0a546a add norm() and norm2(); some polishing
06e1e0d8 fix dot product, add norm/norm2/normalized add fuzzy compares for matrices/vectors add random matrix/vector generation
3c986773 fix big bug in loop unrolling
61de15f3 Democracy 1 - 0 Dictatorship
0d44c090 simplify the new USING_EIGEN_DATA_TYPES macro
3654ee8b SVN_SILENT:
a4626cc8 rework the numeric traits now that we're using a namespace and no prefix
12bcafdc some renaming in the fuzzy compares, and in the multiplications
55e80e15 split MatrixOps.h into 3 files; rename ScalarOps.h; remove useless #includes.
31061557 add unary operator-(), computing the opposite.
e445f508 implement the first _real_ unit-tests, testing the results for correctness instead of just checking compilation.
5f0af72a mark more methods as const. also rename, Numeric.h->NumTraits.h
0f2df4b2 remove support for type std::complex<int>. Simplify NumTraits accordingly.
6c8f1596 add zero() and identity() static methods, update unit-tests
3f979187 restrict identity() to square matrices; small change helping g++ optimize.
a94a8c68 add fromArray() and wrapArray().
f355ef2d Merge WrapArray into FromArray. Less code. The downside is that we're using one more const_cast. But I think that anyway trying to maintain const strictness in Eigen2 is not worth the hassle.
884a718b make shameless use of const_cast to reduce code redundancy. This means Eigen2 gives up enforcing constness. I really tried to enforce it, but it really was much hassle because our expression templates can be lvalues (not only rvalues) and so much code had to be written twice.
d6f26dc8 clarify the situation with EI_INHERIT_ASSIGNMENT_OPERATORS
49c78643 add cast<newtype>() function to casts the scalars to another type.
f14712a1 Fix damage done by automatic search-and-replace
5309ef5b - improve and comment the "BasicStuff" test. - adjust behavior of Matrix(int,int) constructor - s/EI_/EIGEN_/
a587346b Matrix(int,int) constructor no longer takes default arguments. Instead, introduce Matrix() and Matrix(int); however, dynamic dimensions are required to be specified in the constructor (we no longer default to 1)
344623e8 Matrix(int) constructor is only for vectors.
39f1776b rename Object -> MatrixBase
2fdd067d add more unit-tests (covering transpose, conjugate, adjoint, dot product...)
e05f2919 Much more convenient, less over-engineered NumTraits. Done during this KDE-Edu weekend.
5abaaf96 Test application now takes 'seed' and 'repeat' command-line args
346c00f4 Rework the unit-tests to use lower precision, so as to eliminate false positives. Also some cleanup in the fuzzy compares.
04502ccc rename Block to DynBlock and rework API to make place for upcoming fixed-size Block matrix. Also some cleanup.
1a94c28b and here is the fixed-size Block class
b569216d remove useless default argument values
68eba600 big reorganisation of asserts, so that: 0) asserts are only done in the public API, except for a few ones explicitly named eigen_internal_assert. 1) internal asserts are disabled unless EIGEN_INTERNAL_DEBUGGING is defined. This limits the impact of debugging on performance. 2) no 'unused argument' warnings anymore when compiling with -DNDEBUG
c58c892e had forgotten to 'svn add' that file...
9d51572c rework the random numbers API
fc924bc7 specialize for Size==0 in order to catch user bugs and not clutter the compiler output with an infinite recursion. Also add a #define switch for loop unrolling.
effaee9b fix bugs in Block/DynBlock
d50ce24d rework asserts system so as to minimize the impact of debugging code on performance
2b20814c Expand and improve unit-tests
0a7086f1 rename CopyHelper into OperatorEquals, get rid of the auxiliary _copy_helper() method, and make sure copies are always done in column-dominant order
8117c9aa oops, forgot to commit that change
936b0de9 play with inlining to get better performance when the compiler is not asked to optimize
0cbdaf6b revert most of my previous commit. forcing the compiler to inline only increased its memory usage.
fa8009c6 1) remove EIGEN_UNUSED, instead use non-named arguments. 2) use T instead of const T& when that makes more sense Thanks to Christian Mayer a.k.a Mekhzolan for the tips.
7ddc13b9 use a more c++-ish way of preventing the compiler from generating default operator= when it's not wanted. Thanks to Christian Mayer for the tip.
e9a458a7 Split the global math functions out of NumTraits.h
fc7b2b5c expand unit-tests and fix const-qualifaction bugs thus discovered
7c384752 -add Ones, DiagonalMatrix, DiagonalCoeffs -expand and improve unit-tests -various renaming and improvements
9314b8e0 Some cleanup and renaming.
f75a0c51 some more cleanup and reorganisation
53040f53 add constructors and accessors/mutators specific to small vectors. Add corresponding unit-test.
2c656c51 add matrix constructor taking an array. update unit-tests.
a32690a2 Eval is read-only, don't generate any assignment operator
3380429e Improve the "map" API and corresponding Matrix constructors
8bb98a80 split the coeffs accessors/mutators into a separate Coeffs.h file
59be5c31 enforce constness in map(), do only one const_cast, and improve API
cddeeee1 - make RowsAtCompileTime and ColsAtCompileTime public in MatrixBase and private in derived types - initial documentation in MatrixBase
647a817b more documentation and examples, add Doxyfile and Mainpage.dox and also the benchmark program
a52c7409 rename src/ to Eigen/ so that we're able to #include<Eigen/Core.h> in the examples instead of ugly things like #include"../../src/Core.h"
64f5d5d3 move the documentation to doc/, add dummy documentation to srcdir/ compiling to an explanation of how to generate the docs
04e3512e first version of CMakeLists auto-generating examples outputs
ee3410f7 renaming (commit in order to avoid svn breakage)
a316cd8a now cmake takes snippets of code, completes them into compilable sources, builds them, executes them and stores their output in files.
eb6ee51f will svn finally let me remove this dir?
c38156a2 now we also have a examples/ directory for self-contained examples, and this is already used to document DynBlock
e9375836 everything works, make now runs doxygen once and only once, after all the required files have been generated.
3cd2a125 - rework the coefficients API - make vectors use a separate loop unroller, so that copying a row-vector into a col-vector is now possible - add much more documentation - misc improvements
dad245af - eigen2 now fully enforces constness! found a way to achieve that with minimal code duplication. There now are only two (2) const_cast remaining in the whole source code. - eigen2 now fully allows copying a row-vector into a column-vector. added a unit-test for that. - split unit tests, improve docs, various improvements.
05a49547 in ScalarMultiple, make the factor type independent from the matrix scalar type. This is an optimization for complex matrices, allowing to do only a real multiplication when a complex multiplication is not needed, e.g. in normalized().
6b9370e0 more changes in ScalarMultiple, reintroduce FloatingPoint in NumTraits, improve examples
e7bdbe2e matrix storage order can now also be row-dominant (choosable for each matrix separately) map() moves from MatrixBase to Matrix much more documentation/examples/snippets
dfdad129 move Core/ to a src/ subdir, in preparation for following changes
86220784 part 2 of the reorganization. Benefits/changes: 1) Eigen2 co-installable with Eigen1 without conflict, without affecting programs including either. 2) #include<Eigen/Core> without the .h without conflict with the Core/ directory 3) Uniformize coding style of the CMakeLists.
42f6590b cleanup: remove copy contructors when the compiler is able to generate a satisfactory default copy constructor; remove useless static_cast's; some misc cleanup.
23ffede3 more documentation, 12 more code snippets
d1d55e67 - make MatrixBase and all expressions aware of their preferred traversal order. Honor this preference in operator=. - add several methods to the API - rework API for diagonal matrices - add benchmarking code
495eb705 Patch by Gael Guennebaud, making Eigen compatible with the Intel compiler (icc).
aaf889e7 remove all the _Order mechanics, now we are always traversing matrices in column-major order, even if storage is row-major. Benchmark showed that adapting the traversal order to the storage order brought no benefit.
84934ea2 - move: DerivedTraits becomes MatrixBase::Traits - the static constants are private again in the Derived classes - more documentation and code snippets - new isDiagonal() method
5111ace0 move default parameter values from function definition to function declaration. doxygen likes it and this fixes compilation on ICC.
8ba30554 Ready for alpha2 release. - complete documentation - add TODO - update copyright years
b036eca9 Revert to allowing default Matrix constructor even for dynamic size (which is then set to 1). Discussion with jonasp made me remember why we did so in Eigen1. Also add default constructor to Eval
47d35492 revert most of previous commit. It really is better to forbid default constructor for dynamic-size matrices. Now why do I feel like a beheaded chicken running around?
209cf7c9 TODO is now on techbase
45a4b61b switch to enums everywhere
aae0667e reorganization/cleanup
e092cbc7 -add set...() methods and their documentation; remove Generic -use row-major traversal when the number of columns is fixed and the number of rows is dynamic -other minor changes
bcf7b291 rework Identity API: no longer restricted to square matrices
e05a1aba one bugfix and one optimization
89a134ba big architecture change dissociating "actual" dimensions from "maximum possible" dimension. The advantage is that evaluating a dynamic-sized block in a fixed-size matrix no longer causes a dynamic memory allocation. Other new thing: IntAtRunTimeIfDynamic allows storing an integer at zero cost if it is known at compile time.
95dc68dc renaming: Block -> FixedBlock DynBlock -> Block indeed, previous commit solves the main issue with DynBlock so is should now be the more commonly used one.
6ce996f2 big improvement of the block-manipulation API - reduction of sizeof(Block) for vector types - variants of block() and fixedBlock() for vector blocks - convenience methods start() and end() for vectors - convenience method corner() for matrices
57d7b7d9 documentation update for alpha 3
183bf54d final fixes and updates for alpha3
e20aceb6 cleanup in Eval; instead introduce convenient typedefs in Matrix for naming special related matrix types: RowType, ColumnType, BlockType
2ee7969f re-optimize Matrix::resize(), add some comments
9c9a42cc Eval is now implemented like the other expression types, it no longer inherits Matrix. Remove the typedefs I added in Matrix.
c67e7174 alpha 3.1. in this commit: - finally get the Eval stuff right. get back to having Eval as a subclass of Matrix with limited functionality, and then, add a typedef MatrixType to get the actual matrix type. - add swap(), findBiggestCoeff() - bugfix by Ramon in Transpose - new demo: doc/echelon.cpp
6907886a prefix global functions with ei_ as previous solution was rather fragile. also fix compilation with g++ 4.3.
3698d8cf Relicense --> dual-license LGPL3+/GPL2+
aa8e2bcb Patch by Gael Guennebaud: Rework the matrix storage to ensure optimal sizeof in all cases, while keeping the decoupling of matrix sizes versus storage sizes. Also fixing (recently introduced) bugs caused by unwanted reallocations of the buffers.
b3268a6e -merge patch from Gael Guennebaud adding NumTraits for long long and long double. -define scalar-multiple operators only for the current Scalar type; thanks to Gael for expaining how to make the compiler understand when automatic casting is needed. -take ScalarMultiple take only 1 template param, again. We lose some flexibility especially when dealing with complex numbers, but we gain a lot of extensibility to new scalar types.
f12e9c53 Patch by Gael Guennebaud: unify fixed-size and dynamic-size Block expressions, update documentation.
a2f8d4be Patch by Gael Guennebaud: coeff-wise binary operators. This unifies + and - and moreover this patch introduces coeff-wise * and / based on this. Also, corresponding test.
ed20f64d release alpha4, Gael edition
861c6f4c renaming: ref() --> asArg()
01572b9f big change: MatrixBase only takes one template parameter "Derived", the template parameter "Scalar" is removed. This is achieved by introducting a template <typename Derived> struct Scalar to achieve a forward-declaration of the Scalar typedefs.
2ee68a07 generalized ei_traits<>. Finally the importing macro is named EIGEN_BASIC_PUBLIC_INTERFACE because it does not only import the ei_traits, it also makes the base class a friend, etc.
6da4d9d2 fix compilation (forgot to update that file after last big change)
afc64f33 a lot of renaming internal classes: AaBb -> ei_aa_bb IntAtRunTimeIfDynamic -> ei_int_if_dynamic unify UNROLLING_LIMIT (there was no reason to have operator= use a higher limit) etc...
fe569b06 get rid of MatrixRef, simplifications.
fb3438e6 - expand MathFunctions.h to provide more functions, like exp, log... - add cwiseExp(), cwiseLog()... --> for example, doing a gamma-correction on a bitmap image stored as an array of floats is a simple matter of: Eigen::Map<VectorXf> m = VectorXf::map(bitmap,size); m = m.cwisePow(gamma); - apidoc improvements, reorganization of the \name's - remove obsolete examples - remove EIGEN_ALWAYS_INLINE on lazyProduct(), it seems useless.
29184ad2 - introduce sum() returning the sum of the coeffs of a vector - reimplement trace() as just diagonal().sum() - apidoc fixes
af131fe7 update to fix compilation
0ef1efdb * cleanup: in public api docs, don't put \sa links to \internal things. (the global funcs in MathFunctions.h and Fuzzy.h don't count as internal). * Mainpage.dox. Add a few prospective Eigen users; change the recommended -finline-limit from 10000 to 1000. The reason is: it could be harmful to have a too big value here, couldn't it? (e.g. exceedingly large executables, cache misses). Looking at gcc, a value of 900 would exactly mean "determine the inlining of all functions as if they were marked with 'inline' keyword". So a value of 1000 seems a reasonable round number. In the benchmark that motivated this (TestEigenSolvers) a value of 400 is enough on my system.
729618c9 * #define EIGEN_NDEBUG now also disables asserts. Useful to disable eigen's asserts without disabling one's own program's asserts. Notice that Eigen code should now use ei_assert() instead of assert(). * Remove findBiggestCoeff() as it's now almost redundant. * Improve echelon.cpp: inner for loop replaced by xprs. * remove useless "(*this)." here and there. I think they were first introduced by automatic search&replace. * fix compilation in Visitor.h (issue triggered by echelon.cpp) * improve comment on swap().
a994e51c * add Gael copyright lines on 2 more files * macro renaming: EIGEN_NDEBUG becomes EIGEN_NO_DEBUG as this is much better (and similar to Qt) and EIGEN_CUSTOM_ASSERT becomes EIGEN_USE_CUSTOM_ASSERT * protect Core header by a EIGEN_CORE_H
c9b0dcd7 look at that subtle difference in Product.h... the cacheOptimal is only good for large enough matrices. When taking a block in a fixed-size (hence small) matrix, the SizeAtCompileTime is Dynamic hence that's not a good indicator. This example shows that the good indicator is MaxSizeAtCompileTime. Result: +10% speed in echelon.cpp
758b2655 * fix compilation with gcc-4.0 which doesn't like "using" too much * add Eigen:: in some macros to allow using them from outside of namespace Eigen Problems and solutions communicated by Gael.
f279162e * introducte recursive Flags system for the expressions -- currently 3 flags: RowMajor, Lazy and Large -- only RowMajor actually used for now * many minor improvements
cff5e3ce Make use of the LazyBit, introduce .lazy(), remove lazyProduct.
e74fbfb2 - remove Eval/EvalOMP (moving them to a disabled/ subdir in order to preserve SVN history). They are made useless by the new ei_eval_unless_lazy. - introduce a generic Eval member typedef so one can do e.g. T t; U u; Product<T, U>::Eval m; m = t*u;
d1a29d63 -new: recursive costs system, useful to determine automatically when to evaluate arguments and when to meta-unroll. -use it in Product to determine when to eval args. not yet used to determine when to unroll. for now, not used anywhere else but that'll follow. -fix badness of my last commit
b8900d0b More clever evaluation of arguments: now it occurs in earlier, in operator*, before the Product<> type is constructed. This resets template depth on each intermediate evaluation, and gives simpler code. Introducing ei_eval_if_expensive<Derived, n> which evaluates Derived if it's worth it given that each of its coeffs will be accessed n times. Operator* uses this with adequate values of n to evaluate args exactly when needed.
249dc4f4 current state of the mess. One line fails in the tests, and useless copies are made when evaluating nested expressions. Changes: - kill LazyBit, introduce EvalBeforeNestingBit and EvalBeforeAssigningBit - product and random don't evaluate immediately anymore - eval() always evaluates - change the value of Dynamic to some large positive value, in preparation of future simplifications
61e58cf6 fixes as discussed with Gael on IRC. Mainly, in Fuzzy.h, and Dot.h, use ei_xpr_copy to evaluate args when needed. Had to introduce an ugly trick with ei_unref as when the XprCopy type is a reference one can't directly access member typedefs such as Scalar.
30ec34de fix compilation (finish removal of EIGEN_UNROLLED_LOOPS)
371d302e - merge ei_xpr_copy and ei_eval_if_needed_before_nesting - make use of CoeffReadCost to determine when to unroll the loops, for now only in Product.h and in OperatorEquals.h performance remains the same: generally still not as good as before the big changes.
4920f201 finish making use of CoeffReadCost and the new XprCopy everywhere seems appropriate to me.
9d8876ce * rename XprCopy -> Nested * rename OperatorEquals -> Assign * move Util.h and FwDecl.h to a util/ subdir
ca448d25 split those files in util/ some more renaming
613c49b4 * add typedefs for matrices/vectors with LargeBit * add -pedantic to CXXFLAGS * cleanup intricated expressions with && and || which gave warnings because of "missing" parentheses * fix compile error in NumTraits, apparently discovered by -pedantic
7bee90a6 Merge Gael's experimental OpenMP parallelization support into Assign.h.
dcebc46c - cleaner use of OpenMP (no code duplication anymore) using a macro and _Pragma. - use OpenMP also in cacheOptimalProduct and in the vectorized paths as well - kill the vector assignment unroller. implement in operator= the logic for assigning a row-vector in a col-vector. - CMakeLists support for building tests/examples with -fopenmp and/or -msse2 - updates in bench/, especially replace identity() by ones() which prevents underflows from perturbing bench results.
ab404697 * Add fixed-size template versions of corner(), start(), end(). * Use them to write an unrolled path in echelon.cpp, as an experiment before I do this LU module. * For floating-point types, make ei_random() use an amplitude of 1.
ea3ccb1e * Start of the LU module, with matrix inversion already there and fully optimized. * Even if LargeBit is set, only parallelize for large enough objects (controlled by EIGEN_PARALLELIZATION_TRESHOLD).
9789c044 when evaluating an xpr, the result can now be vectorizable even if the xpr itself wasn't vectorizable.
2a86f052 - optimized determinant calculations for small matrices (size <= 4) (only 30 muls for size 4) - rework the matrix inversion: now using cofactor technique for size<=3, so the ugly unrolling is only used for size 4 anymore, and even there I'm looking to get rid of it.
6747b45a for 4x4 matrices implement the special algorithm that Markos proposed, falling back to the general algorithm in the bad case.
43e2bc14 +5% optimization in 4x4 inverse: -only evaluate block expressions for which that is beneficial -don't check for invertibility unless requested
acfd6f3b - add _packetCoeff() to Inverse, allowing vectorization. - let Inverse take template parameter MatrixType instead of ExpressionType, in order to reduce executable code size when taking inverses of xpr's. - introduce ei_corrected_matrix_flags : the flags template parameter to the Matrix class is only a suggestion. This is also useful in ei_eval.
6ae037df give up on OpenMP... for now
890a8de9 Make products always eval into expressions. Improves performance in benchmark. Still not as fasts as explicit eval(), strangely.
8c6007f8 * Patch by Konstantinos Margaritis: AltiVec vectorization. * Fix several warnings, temporarily disable determinant test.
4f6d7abc only include SSE3 headers if compiling with SSE3 support
3562b011 * Give Konstantinos a copyright line * Fix compilation of Inverse.h with vectorisation * Introduce EIGEN_GNUC_AT_LEAST(x,y) macro doing future-proof (e.g. gcc v5.0) check * Only use ProductWIP if vectorisation is enabled * rename EIGEN_ALWAYS_INLINE -> EIGEN_INLINE with fall-back to inline keyword * some cleanup/indentation
dca416ca move arch-specific code to arch/SSE and arch/AltiVec subdirs. rename the noarch PacketMath.h to DummyPacketMath.h
678f18fc put inline keywords everywhere appropriate. So we don't need anymore to pass -finline-limit=1000 to gcc to get good performance. By the way some cleanup.
3eccfd1a -fix certain #includes -fix CMakeLists, public headers weren't getting installed
5da60897 Introduce generic Flagged xpr, remove already Lazy.h and Temporary.h Rename DefaultLostFlagMask --> HerediraryBits
953efdbf - introduce Part and Extract classes, splitting and extending the former Triangular class - full meta-unrolling in Part - move inverseProduct() to MatrixBase - compilation fix in ProductWIP: introduce a meta-selector to only do direct access on types that support it. - phase out the old Product, remove the WIP_DIRTY stuff. - misc renaming and fixes
5aa00f68 part 2 of big change: rename Triangular.h -> Extract.h (svn required to commit that separately)
aebecae5 * find the proper way of nesting the expression in Flagged: finally that's more subtle than just using ei_nested, because when flagging with NestByValueBit we want to store the expression by value already, regardless of whether it already had the NestByValueBit set. * rename temporary() ----> nestByValue() * move the old Product.h to disabled/, replace by what was ProductWIP.h * tweak -O and -g flags for tests and examples * reorder the tests -- basic things go first * simplifications, e.g. in many methoeds return derived() and count on implicit casting to the actual return type. * strip some not-really-useful stuff from the heaviest tests
f54760c8 hehe, the complicated nesting scheme in Flagged in the previous commit was a sign that we were doing something wrong. In fact, having NestByValue as a special case of Flagged was wrong, and the previous commit, while not buggy, was inefficient because then when the resulting NestByValue xpr was nested -- hence copied -- the original xpr which was already nested by value was copied again; hence instead of 1 copy we got 3 copies. The solution was to ressuscitate the old Temporary.h (renamed NestByValue.h) as it was the right approach.
486fdb26 many small fixes and documentation improvements, this should be alpha5.
b501e08d now the unit-tests (hence all of Eigen) don't depend on Qt at all anymore.
dc5fd8df meagre outcome for so much time spent! * fix inverse() bug discovered by Gael's test * fix warnings introduced by the new Diagonal stuff * update Doxyfile to v1.5.6
92b7e2d6 fix a couple of issues making the eigensolver test compile and run without aborting on an assert. Had to fix a stupid bug in Block -- very strange we hadn't hit it before.
0444e360 - add MatrixBase::eigenvalues() convenience method - add MatrixBase::matrixNorm(); in the non-selfadjoint case, we reduce to the selfadjoint case by using the "C*-identity" a.k.a. norm of x = sqrt(norm of x * x.adjoint())
3b052304 since m*m.adjoint() is positive, so are its eigenvalues, so no need for cwiseAbs()
6209bbe2 doc improvements: fix linking in Mainpage.dox, improved Doxyfile.in
ac88feeb work around Doxygen bug triggered by r814874, which caused many classes to disappear from the docs.
75de41a0 big changes in Doxygen configuration; work around bug with doxygen parsing of initialized enum values showing the last word the initializer instead of the actual enum value's name; add some more docs.
8de4d92b - get the doc of the enums in MatrixBase right - get the doc of the flags in Constants right - finally give up with SEPARATE_MEMBER_PAGES: it triggers too big Doxygen bugs, and produces too many small pages. So we have one huge page for MatrixBase at currently 300kb and going up, so the solution especially for users with low bandwidth will be to provide an archive of the html documentation.
869394ee fix some compile errors with gcc 4.3, some warnings, some documentation
c90c7705 * make the _Flags template parameter of Matrix default to the corrected flags. This ensures that unless explicitly messed up otherwise, a Matrix type is equal to its own Eval type. This seriously reduces the number of types instantiated. Measured +13% compile speed, -7% binary size.
53289a8b * even though the _Flags default to the corrected value, still correct them in the ei_traits, so that they're guaranteed even if the user specified his own non-default flags (like before).
c905b31b * Big rework of Assign.h: ** Much better organization ** Fix a few bugs ** Add the ability to unroll only the inner loop ** Add an unrolled path to the Like1D vectorization. Not well tested. ** Add placeholder for sliced vectorization. Unimplemented.
478bfaf2 fix bug in computation of unrolling limit: div instead of mul
9857764a aaargh.
bb1f4e44 * Block: row and column expressions in the inner direction now have the Like1D flag.
574416b8 Override MatrixBase::eval() since matrices don't need to be evaluated, it is enough to just read them.
8a967fb1 * implement slice vectorization. Because it uses unaligned packet access, it is not certain that it will bring a performance improvement: benchmarking needed. * improve logic choosing slice vectorization. * fix typo in SSE packet math, causing crash in unaligned case. * fix bug in Product, causing crash in unaligned case. * add TEST_SSE3 CMake option.
dc9206ce split sum away from redux and vectorize it. (could come back to redux after it has been vectorized, and could serve as a starting point for that) also make the abs2 functor vectorizable (for real types).
32596c5e add benchmark for sum
03d19f3b quick temporary fix for a perf issue we just identified with vectorization.... now the sum benchmark runs 3x faster with vectorization than without.
c9560df4 * add ei_pdiv intrinsic, make quotient functor vectorizable * add vdw benchmark from Tim's real-world use case
3b94436d * vectorize dot product, copying code from sum. * make the conj functor vectorizable: it is just identity in real case, and complex doesn't use the vectorized path anyway. * fix bug in Block: a 3x1 block in a 4x4 matrix (all fixed-size) should not be vectorizable, since in fixed-size we are assuming the size to be a multiple of packet size. (Or would you prefer Vector3d to be flagged "packetaccess" even though no packet access is possible on vectors of that type?) * rename: isOrtho for vectors ---> isOrthogonal isOrtho for matrices ---> isUnitary * add normalize() * reimplement normalized with quotient1 functor
5b0da4b7 make use of ei_pmadd in dot-product: will further improve performance on architectures having a packed-mul-add assembly instruction.
25ba9f37 * add bench/benchVecAdd.cpp by Gael, fix crash (ei_pload on non-aligned) * introduce packet(int), make use of it in linear vectorized paths --> completely fixes the slowdown noticed in benchVecAdd. * generalize coeff(int) to linear-access xprs * clarify the access flag bits * rework api dox in Coeffs.h and util/Constants.h * improve certain expressions's flags, allowing more vectorization * fix bug in Block: start(int) and end(int) returned dyn*dyn size * fix bug in Block: just because the Eval type has packet access doesn't imply the block xpr should have it too.
c5bd1703 change derived classes methods from "private:_method()" to "public:method()" i.e. reimplementing the generic method() from MatrixBase. improves compilation speed by 7%, reduces almost by half the call depth of trivial functions, making gcc errors and application backtraces nicer...
e27b2b95 * rework Map, allow vectorization * rework PacketMath and DummyPacketMath, make these actual template specializations instead of just overriding by non-template inline functions * introduce ei_ploadt and ei_pstoret, make use of them in Map and Matrix * remove Matrix::map() methods, use Map constructors instead.
6de4871c fix a couple of issues in the new Map.h
844f69e4 * update CMakeLists, only build instantiations if TEST_LIB is defined * allow default Matrix constructor in dynamic size, defaulting to (1, 1), this is convenient in mandelbrot example.
55e08f71 fix breakage from my last commit
6917be91 add mandelbrot demo
97a10386 improve greatly mandelbrot demo: - much better coloring - determine max number of iterations and choice between float and double at runtime based on zoom level - do draft renderings with increasing resolution before final rendering
fbdecf09 fix little bug in computation of max_iter
cacf986a - use double precision to store the position / zoom / other stuff - some temporary fix to get a +50% improvement from vectorization until we have vectorisation for comparisons and redux
56d03f18 * multi-threaded rendering * increased number of iterations, with more iterations done before testing divergence. results in x2 speedup from vectorization.
a356ebd4 interleaved rendering balances the load better
95549007 * fix error in divergence test, now it is even faster * add comments in render() in case anyone ever reads that :P
a9d319d4 * do the ActualPacketAccesBit change as discussed on list * add comment in Product.h about CanVectorizeInner * fix typo in test/product.cpp
f5791eeb the big Array/Cwise rework as discussed on the mailing list. The new API can be seen in Eigen/src/Core/Cwise.h.
6f09d3a6 - many updates after Cwise change - fix compilation in product.cpp with std::complex - fix bug in MatrixBase::operator!=
8f21a5e8 add benchmark for slice vectorization... expected it to be little or zero benefit... turns out to be 20x speedup. Something is wrong.
25904802 raah, results were corrupted by overflow. Now slice vectorization is about a +25% speedup which is still nice as i expected zero or even negative benefit.
2b53fd4d some performance fixes in Assign.h reported by Gael. Some doc update in Cwise.
1bbaea98 little cmake fix
e979e648 another occurence of that little cmake fix
51e6ee39 SVN_SILENT trivial fix
62ec1dd6 * big rework of Inverse.h: - remove all invertibility checking, will be redundant with LU - general case: adapt to matrix storage order for better perf - size 4 case: handle corner cases without falling back to gen case. - rationalize with selectors instead of compile time if - add C-style computeInverse() * update inverse test. * in snippets, default cout precision to 3 decimal places * add some cmake module from kdelibs to support btl with cmake 2.4
8b4945a5 add some static asserts, use them, fix gcc 4.3 warning in Product.h.
f997a3e9 update the inverse test a little make use of static asserts in Map fix 2 warnings in CacheFriendlyProduct: unused var 'Vectorized'
49ae3fca fix compile errors with gcc 4.3: unresolved func call to ei_cache_friendly_product, and undeclared memcpy
c2f8ecf4 * LU decomposition, supporting all rectangular matrices, with full pivoting for better numerical stability. For now the only application is determinant. * New determinant unit-test. * Disable most of Swap.h for now as it makes LU fail (mysterious). Anyway Swap needs a big overhaul as proposed on IRC. * Remnants of old class Inverse removed. * Some warnings fixed.
79a0feee big performance improvement in inverse and LU
e741b7be further big perf improvement in Inverse
09ef7db9 Add partial pivoting runtime option to LU.
c94be35b introduce copyCoeff and copyPacket methods in MatrixBase, used by Assign, in preparation for new Swap impl reusing Assign code. remove last remnant of old Inverse class in Transform.
88bb2087 New implementation of Swap as discussed, reusing Assign. Makes LU run 10% faster overall.
58ba9ca7 LU: remove partial-pivoting path (moderately useful since it's does not allow to easily get the rank), fix a bug (which could have been triggered by matrices having coefficients of very different magnitudes). Part: add an assert to prevent hard to find bugs Swap: update comments
5f350448 - add kernel computation using the triangular solver - take advantage of the fact that our LU dec sorts the eigenvalues of U in decreasing order - add meta selector in determinant
9bbe3969 forgot to remove that old code
a41f2b42 * fix bug in SwapWrapper : store the wrapped expression by reference * optimize setIdentity: when the matrix is large enough it is better to setZero() and overwrite the diagonal * start of LU solver, disabled for now
681e9446 *implement LU solver (solves any rectangular system) *in test/CMakeLists : modify EI_ADD_TEST so that 2nd argument is additional compiler flags. used to add -O2 to test_product_large so it doesn't take forever.
becbeda5 * reimplement the general case of inverse() on top of LU. Advantages: - removes much code - 2.5x faster (even though LU uses complete pivoting contrary to what inverse used to do!) - there _were_ numeric stability problems with the partial pivoting approach of inverse(), with 200x200 matrices inversion failed almost half of the times (overflow). Now these problems are solved thanks to complete pivoting.
d6e88f81 * add LU unit-test. Seems like we have very good numerical stability! * some cleanup, and grant me a copyright line on the determinant test.
17ec407c * add Regression module, from eigen1, improved, with doc and unit-test. * fix .normalized() so that Random().normalized() works; since the return type became complicated to write down i just let it return an actual vector, perhaps not optimal. * add Sparse/CMakeLists.txt. I suppose that it was intentional that it didn't have CMakeLists, but in <=2.0 releases I'll just manually remove Sparse.
f04c1cb7 Complete LU documentation
13ad8873 last small fixes, this is alpha6, eigen2 is now ready for eigen1 apps to port to.
3bc27469 Copy eigen2 into kdesupport, alongside eigen1 for now, co-installable, will remove eigen1 once no code uses it anymore (soon).
d9d69de3 updated tutorial
239b47e0 *make Eigen2 install to prefix/include/eigen2/Eigen *Add FindEigen2.cmake module in kdelibs
95a1283b fix compilation of unit-tests when cmake is run on kdesupport/ parent directory
baf0cffe *add operator()(int) for vectors, synonymous to operator[](int). I don't see any reason not to allow it, it doesn't add much code, and it makes porting from eigen1 easier. *expand tests/basicstuff to first test coefficient access methods
e778ae25 only use alloca on linux. Use malloc on other platforms. Needed for mingw compatibility.
9466e5f9 * doc improvements in Cwise and PartialRedux: - 33 new snippets - unfuck doxygen output in Cwise (issues with function macros) - more see-also links from outside, making Cwise more discoverable * rename matrixNorm() to operatorNorm(). There are many matrix norms (the L2 is another one) but only one is called the operator norm. Risk of confusion with keyword operator is not too scary after all.
54137f1c * fix bug found by Boudewijn Rempt: no CMakeLists in arch/ subdir * fix warning in SolveTriangular
c705c38a * it's \returns not \Returns * add some explanations in the typedefs page * expand a bit the new QuickStartGuide. Some placeholders (not a pb since it's not even yet linked to from other pages). The point I want to make is that it's super important to have fully compilable short programs (even with compile instructions for the first one) not just small snippets, at least at the beginning. Let's start with examples of compilable programs.
ff8e98c9 Fix bugs in Sum.h, add unit-test
591d497b add resize() methods to Map, doing nothing but assertions. This is useful in Krita where I call lu().solve() with a Map object as result. As solve() resizes the result, this was needed.
082e309d patch by Patrick Spendrin: fix MSVC compatibility
0998c51d - remove the ASM macro as in fact Gael had been removing all the remaining asm("...") from the code while fixing MSVC compat (so your changes crossed one another). - move the pragma warning to CoreDeclarations, it's the right place to do early platform checks.
a814ebe1 fix a number of compiler errors and warnings with gcc 4.3. There was a missing #include<algorithm> so I'm not sure how it compiled at all for you :)
312013a0 compile fix for code like Vector3d::Random().x()
251ecc0a Rename someOrthogonal to unitOrthogonal. Fix a bug in it, with dyn-size vectors of size <=3. Update doc and test to reflect that it always returns a unit vector.
b815b23e forgot to install Regression public header
6b591d06 add data() methods to Transform
6a36b5a6 add AngleAxis::operator*(const Vector3&)
d3529e9c optimization: spare the 3x3 matrix product in fromPositionOrientationScale
bf31d81a argh, gael you're more clever than i remembered. diagonal product is optimized. so, i almost revert, just reordering to reduce # of load/store.
124ec71c allow constructing Transform from small-matrix (like fromPosOrientScale but with trivial Pos and Scale)
aa54d6be arf, of course a meta-selector was required here
5ac883b1 Fix a bug discovered in Avogadro: the AngleAxis*Matrix and the newer AngleAxis*Vector products were wrong because they returned the product _expression_ toRotationMatrix()*other; and toRotationMatrix() died before that expression would be later evaluated. Here it would not have been practical to NestByValue as this is a whole matrix. So, let them simply evaluate and return the result by value.
da674fa0 Shut up two bogus gcc 4.3 warnings
12c6b45a replace vector by __vector to prevent conflict with std::vector
a0cfe6eb remove double ;
252e0c45 * missing cmake make_directory command * show svn revision number if available * fix warnings about unused argc/argv
f7de12de Missing inline keywords in AltiVec/PacketMath were making Avogadro fail to compile (duplicate symbols).
5c34d8e2 The discussed changes to Hyperplane, the ParametrizedLine class, and the API update in Regression...
ff60c9cc fix cmakelists: wrong assumption on CMAKE_SOURCE_DIR. One can now use EIGEN_SOURCE_DIR for that use, guaranteed to point to eigen2/ directory.
c9318679 also use EIGEN_SOURCE_DIR here. according to grep this was the last place to change.
d74916e4 same thing with EIGEN_BINARY_DIR. Now the doc generation works from kdesupport.
46fe7a3d if EIGEN_NICE_RANDOM is defined, the random functions will return numbers with few bits left of the comma and for floating-point types will never return zero. This replaces the custom functions in test/main.h, so one does not anymore need to think about that when writing tests.
6add33e2 fix warning
247f2b0f * block() for vectors ---> segment() * documentation improvements, especially in quickstart guide
af991a6b small dox fixes
618de17b block(int,int)->segment
4e502dd6 very little fixes: cast literals to Scalar, rephrase some doc, add some const (maybe completely useless but at least doesn't hurt)
3d90c139 norm2() renamed to squaredNorm(), kept as deprecated for now.
a0ec0fca Add Matrix::Map() and Matrix::AlignedMap() static methods
e8009993 add lpNorm<p>() method to MatrixBase, implemented in Array module, with specializations for cases p=1,2,Eigen::Infinity.
12f84acd Matrix documentation rework
033ac82c refinements in Matrix doc
36143214 * add Gael a (c) line in IO.h * let user change default format by defining EIGEN_DEFAULT_IO_FORMAT * improve docs a little
00f89a8f Update e-mail address
aba378eb add internal documentation
c1e2156d * Much better, consistent error msgs when mixing different scalar types: - in matrix-matrix product, static assert on the two scalar types to be the same. - Similarly in CwiseBinaryOp. POTENTIALLY CONTROVERSIAL: we don't allow anymore binary ops to take two different scalar types. The functors that we defined take two args of the same type anyway; also we still allow the return type to be different. Again the reason is that different scalar types are incompatible with vectorization. Better have the user realize explicitly what mixing different numeric types costs him in terms of performance. See comment in CwiseBinaryOp constructor. - This allowed to fix a little mistake in test/regression.cpp, mixing float and double - Remove redundant semicolon (;) after static asserts
2ff7961c split off the lazy evaluation part from the quickstartguide; actually by mistake i had already committed part of that change so i commit the rest even if it's not much, so building docs from trunk works again.
6d1439a5 add big "what happens inside eigen" tutorial for people interested in Eigen internals
bb33ec4e * fix compile error when C++0x is enabled: static_assert() needs ; thanks to devurandom for reporting * remove redundant ; in ei_internal_assert * minor fixes in InsideEigenExample.dox
2b20da62 * improvements in the tutorial: triangular matrices, linear algebra * minor fixes in Part and StaticAssert * EulerAngles: remove the FIXME as I think the current version is fine
93c1f629 Use an aligned IOFormat in the docs
7e8ee5b5 hide internal stuff from doxygen by using #ifndef EIGEN_PARSED_BY_DOXYGEN.
08e6b7ad Make deluxe assertion with deluxe error message with link to deluxe web page for this very nasty bug (unaligned member in dynamically allocated struct) that our friends at Krita just encountered:
6700f07f actually this message is probably more effective at making people read the web page...
09fd69d7 * add Transform explicit constructors taking translation/scaling/rotation * add Transform::operator= taking rotation. An old remnant was left commented out. Why was it disabled? * slight optimization in operator= taking translation * slight optimization (perhaps) in the new memory assertion
069ecbb4 * complete the change norm2->squaredNorm in PartialRedux * somehow the NICE_RANDOM stuff wasn't being used anymore and tests were sometimes failing again. Fixed by #including Eigen/Array instead of cherry-picking just Random.h. * little fixes in the unaligned assert page
cb409914 * call it beta2 * improvements in Matrix documentation * document copyCoeff and copyPacket even if it's hidden from doxygen
936eaf60 compilation fix thanks to Dennis Schridde
703951d5 Fix memory alignment (hence vectorization) on MSVC thanks to help from Armin Berres.
11c8a6bf Fix detection of SSE2 with MSVC.
dd139b92 work around the braindead msvc preprocessor
9b1a3d6e small optimization (for MSVC) and simplification of ei_alligned_malloc
763f0a24 use ei_aligned_malloc and ei_aligned_free also in WithAlignedOperatorNew, so this too should now work with MSVC.
55b603e4 * fix a bug I introduced in WithAlignedOperatorNew * add an important comment
1ad751b9 only enable the "unaligned array" assert if vectorization is enabled. if vectorization is disabled, WithAlignedOperatorNew is empty!
0a220721 Finally work around enough of MSVC preprocessor dumbness so that it actually detects SSE2
50105c3e Hopefully fix compilation of SSE Packetmath with MSVC.
38b83b41 * throw bad_alloc if exceptions are enabled, after patch by Kenneth Riddile * disable vectorization on MSVC 2005, as it doesn't have all the required intrinsics. require 2008.
2110cca4 actually honor EIGEN_STACK_ALLOCATION. Can set it to 0 to disable stack alloc which guarantees that bad alloc throws exceptions if they are enabled.
89f46867 * replace postfix ++ by prefix ++ wherever that makes sense in Eigen/ * fix some "unused variable" warnings in the tests; there remains a libstdc++ "deprecated" warning which I haven't looked much into
c22d10f9 LU class: * add image() and computeImage() methods, with unit test * fix a mistake in the definition of KernelResultType * fix and improve comments
5f582aa4 fix bad typos, thanks to Kenneth Riddile
15d72d3f somehow we had forgotten this very important static assertion...
b27a3644 Macros: add MSVC paths, add an important comment on EIGEN_ALIGN_128
fabaa691 * fix in IO.h, a useless copy was made because of assignment from Derived to MatrixBase. * the optimization of eval() for Matrix now consists in a partial specialization of ei_eval, which returns a reference type for Matrix. No overriding of eval() in Matrix anymore. Consequence: careful, ei_eval is no longer guaranteed to give a plain matrix type! For that, use ei_plain_matrix_type, or the PlainMatrixType typedef. * so lots of changes to adapt to that everywhere. Hope this doesn't break (too much) MSVC compilation. * add code examples for the new image() stuff. * lower a bit the precision for floats in the unit tests as we were already doing some workarounds in inverse.cpp and we got some failed tests.
8106d354 Patch by Kenneth Riddile: disable MSVC warnings, reenable them outside of Eigen, and add a MSVC-friendly path in StaticAssert.
f34a4fa3 * forgot to svn add 2 files * idea of Keir Mierle: make the static assert error msgs UPPERCASE
84bb868f * more MSVC warning fixes from Kenneth Riddile * actually GCC 4.3.0 has a bug, "deprecated" placed at the end of a function prototype doesn't have any effect, moving them to the start of the function prototype makes it actually work! * finish porting the cholesky unit-test to the new LLT/LDLT, after the above fix revealed a deprecated warning
e4980616 SelfAdjointEigenSolver: add operatorSqrt() and operatorInverseSqrt()
22875683 * extractRotation ---> rotation * expand the geometry/Transform tests, after Mek's reports * fix my own stupidity in eigensolver test
a3fad2e3 Transform*Transform should return Transform unit test compiles again
df4bd5e4 * fix a test giving some false positives * add coverage for various operator*=
21ab65e4 fix nasty little bug in ei_add_test
9e00d945 * the Upper->UpperTriangular change * finally get ei_add_test right
f5a05e7e unfuck v.cwise()*w where v is real and w is complex
4336cf38 * add unit-tests to check allowed and forbiddent mixing of different scalar types * fix issues in Product revealed by this test *…
phcerdan
pushed a commit
to phcerdan/ITK
that referenced
this pull request
Feb 6, 2020
Run the UpdateFromUpstream.sh script to extract upstream Eigen3
using the following shell commands.
$ git archive --prefix=upstream-eigen3/ 0a5604a9 --
Eigen/Cholesky
Eigen/CholmodSupport
Eigen/CMakeLists.txt
Eigen/Core
Eigen/Dense
Eigen/Eigen
Eigen/Eigenvalues
Eigen/Geometry
Eigen/Householder
Eigen/IterativeLinearSolvers
Eigen/Jacobi
Eigen/LU
Eigen/MetisSupport
Eigen/OrderingMethods
Eigen/PardisoSupport
Eigen/PaStiXSupport
Eigen/QR
Eigen/QtAlignedMalloc
Eigen/Sparse
Eigen/SparseCholesky
Eigen/SparseCore
Eigen/SparseLU
Eigen/SparseQR
Eigen/SPQRSupport
Eigen/StdDeque
Eigen/StdList
Eigen/StdVector
Eigen/SuperLUSupport
Eigen/SVD
Eigen/UmfPackSupport
Eigen/src
COPYING.BSD
COPYING.MINPACK
COPYING.MPL2
COPYING.README
README.md
README.kitware.md
CMakeLists.txt
cmake/FindStandardMathLibrary.cmake
cmake/Eigen3Config.cmake.in
.gitattributes
| tar x
$ git shortlog --perl-regexp --author='^((?!Kitware Robot).*)$' --no-merges --abbrev=8 --format='%h %s' c5d991ff..0a5604a9
Abhijit Kundu (9):
ba3457ca Fixed compilation error due to obsolete internal::abs and internal::sqrt function calls
48db34a7 Adding missing OPENGL_LIBRARIES for openglsupport test. Also adding OpenGL include directories as a better pratice even though these are system include directories in most systems.
eb3695d2 Added cmake uninstall target. This adds a cmake command make uninstall Running make uninstall removes the files installed by running make install
4084dce0 Added CMake support for Tensor module. CMake now installs CXX11 Tensor module like the rest of the unsupported modules
ef09ce45 Fix for TensorIO for Fixed sized Tensors.
1127ca85 Added ArpackSupport to cmake install target
0ed41bde ArpackSupport was missing here also.
3fde2022 Making ceil() functor generic w.r.t packet type
0beabb47 Fixed type conversion from int
Abraham Bachrach (2):
039408cd added functions to allow for cwise min/max operations with scalar argument (bug #400). added function for array.min(), array.max(), matrix.cwiseMin(), matrix.cwiseMax().
804ef235 Move the Base typedef's from private to public scope
Adam Szalkowski (1):
969e9226 fix bug #239: the essential part was left uninitialized in some cases
Adolfo Rodriguez Tsouroukdissian (2):
5a36f4a8 Propagate all five matrix template parameters to members and temporaries of decomposition classes. One particular advantage of this is that decomposing matrices with max sizes known at compile time will not allocate. NOTE: The ComplexEigenSolver class currently _does_ allocate (line 135 of Eigenvalues/ComplexEigenSolver.h), but the reason appears to be in the implementation of matrix-matrix products, and not in the decomposition itself. The nomalloc unit test has been extended to verify that decompositions do not allocate when max sizes are specified. There are currently two workarounds to prevent the test from failing (see comments in test/nomalloc.cpp), both of which are related to matrix products that allocate on the stack.
28dde19e - Added problem size constructor to decompositions that did not have one. It preallocates member data structures. - Updated unit tests to check above constructor. - In the compute() method of decompositions: Made temporary matrices/vectors class members to avoid heap allocations during compute() (when dynamic matrices are used, of course).
Adolfo Rodriguez Tsourouksdissian (3):
7bf0e8cd bug #206 - part 2: For HouseholderSequence objects, added non-allocating versions of evalTo() and applyThisOnTheRight/Left that take additional working vector parameters.
5e431779 bug #206 - part 3: Reimplement FullPivHouseholderQR<T>::matrixQ() using ReturnByValue
4477843b bug #206 - part 4: Removes heap allocations from JacobiSVD and its preconditioners
Alexander Neumann (2):
9c97b053 fixed compiling issue using clang-cl with visual studio
7962ac1a fixed inlining issue with clang-cl on visual studio
Alexander Neundorf (2):
6b3d0e68 -use the cmake-provided Eigen_(SOURCE|BINARY)_DIR variables instead of setting own versions (EIGEN_(SOURCE|BINARY)_DIR
84cc69f0 -add quotes around the configured directories so build dirs with spaces produce some errors less
Alexandre Avenel (1):
d46e2c10 Add round, ceil and floor for SSE4.1/AVX (Bug #70)
Alexey Frunze (2):
e6c8d0b7 bug #1584: Improve random (avoid undefined behavior).
af3656d4 Fix build failures in matrix_power and matrix_exponential tests.
Alexey Korepanov (4):
65db91ac Add a RealQZ class: a generalized Schur decomposition for real matrices
a3a9773a RealQZ: bug in splitOffTwoRows fixed
ea310249 RealQZ: bug in pushDownZero fixed too
d937e67b RealQZ: added example and some code comments
Andrew Coles (2):
093e3cd5 Commented out duplicate definition of TransformTraits - was causing compile-time errors.
64fbd93c As values may be used uninitialised, they have now been given sensible defaults; or, in other words, if worse comes to worst, we'll get a guaranteed segfault rather than a heisenburg.
Andy Somerville (2):
842881cf bug #298 - let normalize() return a reference to *this
c06ae325 feature 297: add ParametrizedLine::intersectionPoint() and intersectionParam() -> intersection() is deprecated
Angelos Mantzaflaris (5):
a9aa3bcf fix two warnings(unused typedef, unused variable) and a typo
b6f04a2d typo UIntPtr
4086187e 1. Add explicit template to abs2 (resolves deduction for some arithmetic types) 2. Avoid signed-unsigned conversion in comparison (warning in case Scalar is unsigned)
0a08d4c6 use numext::abs
e236d344 Remove superfluous const's (can cause warnings on some Intel compilers)
Anton Gladky (2):
09a1b7f7 Fixes the problem, described here: http://listengine.tuxfamily.org/lists.tuxfamily.org/eigen/2010/05/msg00154.html
4cd4be97 Port unsupported constrained CG to Eigen3
Armin Berres (4):
ab660a4d inherit from ei_with_aligned_operator_new even with disabled vectorization
dae7f065 didn't meant to commit the fortran check. but anyway, unfortunately it doesn't work the way iot should. the test fails and cmake will terminate if it doesn't find a fortran compiler
8e888a45 call methods from the eigen namespace with prepended Eigen:: in define
6c84b03d add missing newline at EOF
Avi Ginsburg (1):
ac63d689 Patch to allow VS2015 & CUDA 8.0 to compile with Eigen included. I'm not sure whether to limit the check to this compiler combination (` || (EIGEN_COMP_MSVC == 1900 && __CUDACC_VER__) `) or to leave it as it is. I also don't know if this will have any affect on including Eigen in device code (I'm not in my current project).
Basil Fierz (1):
01fb6217 Adds missing EIGEN_STRONG_INLINE to support MSVC properly inlining small vector calculations
Ben Boeckel (1):
efc1e4d5 git: remove executable permissions from header files
Benjamin Chretien (2):
e5d0cb54 Fix typo in Reductions tutorial.
0b7f95a0 Fix typo in SparseMatrix assert.
Benjamin Chrétien (9):
edebb152 PolynomialSolver: add a test to reveal a bug.
0f946079 PolynomialSolver: test template constructor in test suite.
df926493 PolynomialSolver: add missing constructors.
eda79321 PolynomialSolver: fix bugs related to linear polynomials.
c55c5763 PolynomialSolver: fix typo.
db76193b Fix typo in PermutationMatrix (doc).
6f58a410 Fix typos in Ref.h (doc).
c53f8829 Fix more typos in Ref.h (doc).
c4260547 BDCSVD: fix CMake install (missing separator).
Benjamin Piwowarski (1):
6bf49cea bug #449: add SparseMatrix::conservativeResize feature
Benjamin Schindler (5):
097cab26 Added a pretty printer python script for Eigen::Matrix (gdb-7.0 and later).
f2304f3b Adding __init__.py so the printers can be used directly from the checkout
a4c162db Correct license header of the gdb pretty printer
4da991ea Display the data ptr as part of the header
f0315295 Handle row and col major matrices in the gdb pretty printer
Benoit Jacob (1205):
3036eeca Starting Eigen 2 development. The current plan is to use the last release of tvmet (inactive for 2 years and developer unreachable) as the basis for eigen2, because it provides seemingly good expression template mechanisms, we want that, and it would take years to reinvent that wheel. We'll see. So this commit imports the last tvmet release.
47b935fc add initial CMakeLists
8eb898ce begin porting the configure checks to cmake
7947ae0e A TODO to motivate hundreds of hackers to help with Eigen 2 development. Cheesy slashdot joke included.
658eccd4 Convert 5 m4 checks to cmake modules
8f202dc6 Complete the cmake platform checks and remove unnecessary defines.
eab54b49 More cleanup, add CMakeLists for the testsuite. Now need to port it to QTestLib :/
5205e881 adding more CMakeLists, now tvmet is fully installed.
8c001c13 remove TVMET_DYNAMIC_MEMORY define and corresponding checks.
887ff843 remove custom assert system and use plain standard asserts instead. we don't need no complication.
6d749c17 replace size_t with int everywhere. The size_t type means a number of _bytes_, and it was misused as counting e.g. the number of rows/columns in a matrix. Moreover, it is unsigned, which can give strange bugs if a signed/unsigned mismatch occurs.
f8787110 Add cmake module finding the appropriate variant of the "restrict" keyword. Could that be useful to have in kdelibs/cmake/modules ?
e198eb43 add platform check for __attribute__((always_inline))
e3a45173 argh, forgot to svn add...
6fe6a818 Fix enough stuff, and remove enough dead stuff, to make a simple test program compile
e30e7d7b move cmake modules to a modules/ subdir
9939776c more cmake improvements; start removing the autotools stuff.
9dd7a0b6 add eigen-style typedefs
681eb1ed add TVMET_UNUSED macro, as a Q_UNUSED replacement. Use it to shut down warnings in NumericTraits.h.
b155789a begin porting the unittests to QTestLib. The first test, "selfTest" already runs and succeeds. Also expand this test by testing more types and sizes.
152e09a1 remove long long, long double, unsigned, short, char, bool types. Keep only int, float, double, complex<T>.
37bd64b4 Remove remaining per-element math functions. Remove defines for IEEE, SYSV and complex math. Now the user has to define himself EIGEN_USE_COMPLEX if he wants complex support. Remove TVMET_OPTIMIZE. More cleanup.
b6dedaf7 remove two unused files
d62af65d port TestNumericTraits to QTestLib. This revealed some shortcomings in tvmet's infrastructure, in particular it lacks adequate fuzzy compares. will port that from eigen1.
f1bd0902 Big overhaul and simplification of the NumericTraits system. Add a utility header for random numbers (might be merged into NumericTraits)
ca438b2c Unit-tests updated for the stuff in the previous commit.
71268227 Big rework of the Traits system, unittests updated.
c9a2c373 lots of fixes for complex numbers. unittests now test complex numbers.
9a519c30 forgot to "svn add" a very important file!!
011c7e9e forgot to add another file...
07f96b60 remove 4 files from tvmet that are now replaced by testtraits.cpp
ad89fc82 -- switch Matrix class to column-major order like in Eigen -- many more Eigenification changes, in preparation of the big merge -- big changes in the Comma Initializer to allow for column-major order, leading to a simpler and cleaner solution. "commaWrite" hook added to the classes using the Comma Initializer. -- lots of API improvements, cleanup, removal of dead/useless stuff -- testsuite updated
dfd4d2c4 of course, i had forgotten to svn add one file
c14ba38d some more cleanup in comma-initializer stuff
c141f18b some cleanup
bb114eb6 remove more stuff that I don't need
7eeb6208 restart Eigen2 development from scratch.
1dabb45d Hello, World! This is the initial commit for Eigen2, since I restarted it from scratch on Sunday.
13a82795 forgot to svn add some CMakeLists
9477e62b add a missing operator= for copying a matrix into an expression.
e7ef6dba - Introduce aliasing system - Remove operator<<, use .alias() instead - Introduce operator/ (scalar) - Cleanup, unit-tests update.
c3731b36 Add operator += and operator -= between matrices/vectors/expressions
c030e570 extend operators += and -= to aliases
61158b19 add operator *= between matrices, with automatic aliasing. add tutorial in doc/ subdirectory.
506cc5db remove operator *= between matrices: too much hassle.
fe9b6b8f remove the MatrixConstXpr and MatrixConstRef classes. Now the user doesn't need anymore to call .xpr() and can simply do: matrix.row(i) += matrix.row(j)
1dab53d3 update tutorial
3b727ef9 some cleanup
1af61c6f reorganize header files, split MatrixBase into smaller files. expose only a few meta-headers to the user, the rest moves to a internal/ subdirectory
55227b1f Deep refactoring. 1) Kill MatrixXpr class, instead let all class inherit a common EigenBase class 2) Kill MatrixBase/Matrix/Vector classes, instead introduce a single Matrix class, a MatrixStorage class, and typedefs to emulate vectors 3) Huge code cleanup, remove large preprocessor macros, sloccount drop to ~750 down from 1100. 4) Introduce compile-time-known sizes
a2dd9dd6 Give the axe to the aliasing system. Improve the evaluation system instead.
8a024825 fix bugs caused by default copy constructors being called. valgrind, you saved my life.
628b1a8f implement scalar operators separately for each type using a macro. This is required e.g. to allow "2 * m" with m a matrix of doubles.
d99d9407 add operators *= and /=
4e299afb don't enclose eigen in a namespace. prefixing is the way to go. For example Qt uses a prefix and no namespace (except for a few things)
5160e9d0 Half-way commit prefixing object names. I am forced to commit now because I renamed a file once with a wrong filename and svn refuses to let me rename it again, tells me i should propagate first.
28c44a95 Finish prefixing everything with "Ei"
835e0c9f Found a way to have eval() be a member function of class EiObject, instead of a global function.
aa3294f1 add example to the documentation
51e29ae4 some reorganization leading to simpler expression trees
ee63e15e make matrix multiplication do immediate evaluation; add lazyMul() for the old behaviour some reorganization, especially in MatrixStorage start playing with loop unrolling, always_inline, and __restrict__
7d41ad9d Get rid of a nasty const_cast by introducing a MatrixConstRef class. Remove the __restrict__'s for now.
023773be Fix super-nasty bug in the declaration of the storage array of fixed-size matrices. Also some simplifications.
4241ddde temporarily remove division unit-tests. they caused div-by-zero's , reported by Michael Olbrich. The solution will consist in adding a real Traits system.
e116aba4 adapt to coding style used elsewhere in eigen2
65691961 - add copyright line for Michael Olbrich - some meta unrolling improvements
60156980 Michael was right, it's best to base the unrolling limit on the product Rows*Cols.
3cf6caba remove useless typedefs
96524fc5 Split Row and Column into separate files. Introduce a notion of RowVector (typedef for Matriw with 1 row) Make row() return a row vector instead of a "column vector" Introduce operator[] to access elements of row/column vectors uniformly Remove default arguments in operator(), these were for vectors, now use operator[] instead
f5f45d75 Move the meta loop unrolling to a separate file, Loop.h
c768a449 Add matrix transposition
ae207240 Introduce Numeric Traits, with fuzzy compares, random numbers, etc.
9eff6854 add matrix conjugation and adjunction. compilation fixes in the numeric traits.
f939abd5 aargh, had forgotten to 'svn add' a file. Yeah, 'svn st' is my friend, i know...
be429ebf reorganisation of headers, commit47b935fc42cbf2ca992d8a270bc1b0fc97d1f6bc /2....
4fe78b8e reorganization of headers, part 2/2...
95b33167 reorganize meta loop unrolling, add Trace (meta-unrolled), fix compilation issues in the conjugation/adjunction stuff
f0be175b add dot product, extend meta unrolling everywhere
ac6ff5ef reverse certain inner loops. Now the benchmark runs in 3.5s instead of 5.5s before!
7f0a546a add norm() and norm2(); some polishing
06e1e0d8 fix dot product, add norm/norm2/normalized add fuzzy compares for matrices/vectors add random matrix/vector generation
3c986773 fix big bug in loop unrolling
61de15f3 Democracy 1 - 0 Dictatorship
0d44c090 simplify the new USING_EIGEN_DATA_TYPES macro
3654ee8b SVN_SILENT:
a4626cc8 rework the numeric traits now that we're using a namespace and no prefix
12bcafdc some renaming in the fuzzy compares, and in the multiplications
55e80e15 split MatrixOps.h into 3 files; rename ScalarOps.h; remove useless #includes.
31061557 add unary operator-(), computing the opposite.
e445f508 implement the first _real_ unit-tests, testing the results for correctness instead of just checking compilation.
5f0af72a mark more methods as const. also rename, Numeric.h->NumTraits.h
0f2df4b2 remove support for type std::complex<int>. Simplify NumTraits accordingly.
6c8f1596 add zero() and identity() static methods, update unit-tests
3f979187 restrict identity() to square matrices; small change helping g++ optimize.
a94a8c68 add fromArray() and wrapArray().
f355ef2d Merge WrapArray into FromArray. Less code. The downside is that we're using one more const_cast. But I think that anyway trying to maintain const strictness in Eigen2 is not worth the hassle.
884a718b make shameless use of const_cast to reduce code redundancy. This means Eigen2 gives up enforcing constness. I really tried to enforce it, but it really was much hassle because our expression templates can be lvalues (not only rvalues) and so much code had to be written twice.
d6f26dc8 clarify the situation with EI_INHERIT_ASSIGNMENT_OPERATORS
49c78643 add cast<newtype>() function to casts the scalars to another type.
f14712a1 Fix damage done by automatic search-and-replace
5309ef5b - improve and comment the "BasicStuff" test. - adjust behavior of Matrix(int,int) constructor - s/EI_/EIGEN_/
a587346b Matrix(int,int) constructor no longer takes default arguments. Instead, introduce Matrix() and Matrix(int); however, dynamic dimensions are required to be specified in the constructor (we no longer default to 1)
344623e8 Matrix(int) constructor is only for vectors.
39f1776b rename Object -> MatrixBase
2fdd067d add more unit-tests (covering transpose, conjugate, adjoint, dot product...)
e05f2919 Much more convenient, less over-engineered NumTraits. Done during this KDE-Edu weekend.
5abaaf96 Test application now takes 'seed' and 'repeat' command-line args
346c00f4 Rework the unit-tests to use lower precision, so as to eliminate false positives. Also some cleanup in the fuzzy compares.
04502ccc rename Block to DynBlock and rework API to make place for upcoming fixed-size Block matrix. Also some cleanup.
1a94c28b and here is the fixed-size Block class
b569216d remove useless default argument values
68eba600 big reorganisation of asserts, so that: 0) asserts are only done in the public API, except for a few ones explicitly named eigen_internal_assert. 1) internal asserts are disabled unless EIGEN_INTERNAL_DEBUGGING is defined. This limits the impact of debugging on performance. 2) no 'unused argument' warnings anymore when compiling with -DNDEBUG
c58c892e had forgotten to 'svn add' that file...
9d51572c rework the random numbers API
fc924bc7 specialize for Size==0 in order to catch user bugs and not clutter the compiler output with an infinite recursion. Also add a #define switch for loop unrolling.
effaee9b fix bugs in Block/DynBlock
d50ce24d rework asserts system so as to minimize the impact of debugging code on performance
2b20814c Expand and improve unit-tests
0a7086f1 rename CopyHelper into OperatorEquals, get rid of the auxiliary _copy_helper() method, and make sure copies are always done in column-dominant order
8117c9aa oops, forgot to commit that change
936b0de9 play with inlining to get better performance when the compiler is not asked to optimize
0cbdaf6b revert most of my previous commit. forcing the compiler to inline only increased its memory usage.
fa8009c6 1) remove EIGEN_UNUSED, instead use non-named arguments. 2) use T instead of const T& when that makes more sense Thanks to Christian Mayer a.k.a Mekhzolan for the tips.
7ddc13b9 use a more c++-ish way of preventing the compiler from generating default operator= when it's not wanted. Thanks to Christian Mayer for the tip.
e9a458a7 Split the global math functions out of NumTraits.h
fc7b2b5c expand unit-tests and fix const-qualifaction bugs thus discovered
7c384752 -add Ones, DiagonalMatrix, DiagonalCoeffs -expand and improve unit-tests -various renaming and improvements
9314b8e0 Some cleanup and renaming.
f75a0c51 some more cleanup and reorganisation
53040f53 add constructors and accessors/mutators specific to small vectors. Add corresponding unit-test.
2c656c51 add matrix constructor taking an array. update unit-tests.
a32690a2 Eval is read-only, don't generate any assignment operator
3380429e Improve the "map" API and corresponding Matrix constructors
8bb98a80 split the coeffs accessors/mutators into a separate Coeffs.h file
59be5c31 enforce constness in map(), do only one const_cast, and improve API
cddeeee1 - make RowsAtCompileTime and ColsAtCompileTime public in MatrixBase and private in derived types - initial documentation in MatrixBase
647a817b more documentation and examples, add Doxyfile and Mainpage.dox and also the benchmark program
a52c7409 rename src/ to Eigen/ so that we're able to #include<Eigen/Core.h> in the examples instead of ugly things like #include"../../src/Core.h"
64f5d5d3 move the documentation to doc/, add dummy documentation to srcdir/ compiling to an explanation of how to generate the docs
04e3512e first version of CMakeLists auto-generating examples outputs
ee3410f7 renaming (commit in order to avoid svn breakage)
a316cd8a now cmake takes snippets of code, completes them into compilable sources, builds them, executes them and stores their output in files.
eb6ee51f will svn finally let me remove this dir?
c38156a2 now we also have a examples/ directory for self-contained examples, and this is already used to document DynBlock
e9375836 everything works, make now runs doxygen once and only once, after all the required files have been generated.
3cd2a125 - rework the coefficients API - make vectors use a separate loop unroller, so that copying a row-vector into a col-vector is now possible - add much more documentation - misc improvements
dad245af - eigen2 now fully enforces constness! found a way to achieve that with minimal code duplication. There now are only two (2) const_cast remaining in the whole source code. - eigen2 now fully allows copying a row-vector into a column-vector. added a unit-test for that. - split unit tests, improve docs, various improvements.
05a49547 in ScalarMultiple, make the factor type independent from the matrix scalar type. This is an optimization for complex matrices, allowing to do only a real multiplication when a complex multiplication is not needed, e.g. in normalized().
6b9370e0 more changes in ScalarMultiple, reintroduce FloatingPoint in NumTraits, improve examples
e7bdbe2e matrix storage order can now also be row-dominant (choosable for each matrix separately) map() moves from MatrixBase to Matrix much more documentation/examples/snippets
dfdad129 move Core/ to a src/ subdir, in preparation for following changes
86220784 part 2 of the reorganization. Benefits/changes: 1) Eigen2 co-installable with Eigen1 without conflict, without affecting programs including either. 2) #include<Eigen/Core> without the .h without conflict with the Core/ directory 3) Uniformize coding style of the CMakeLists.
42f6590b cleanup: remove copy contructors when the compiler is able to generate a satisfactory default copy constructor; remove useless static_cast's; some misc cleanup.
23ffede3 more documentation, 12 more code snippets
d1d55e67 - make MatrixBase and all expressions aware of their preferred traversal order. Honor this preference in operator=. - add several methods to the API - rework API for diagonal matrices - add benchmarking code
495eb705 Patch by Gael Guennebaud, making Eigen compatible with the Intel compiler (icc).
aaf889e7 remove all the _Order mechanics, now we are always traversing matrices in column-major order, even if storage is row-major. Benchmark showed that adapting the traversal order to the storage order brought no benefit.
84934ea2 - move: DerivedTraits becomes MatrixBase::Traits - the static constants are private again in the Derived classes - more documentation and code snippets - new isDiagonal() method
5111ace0 move default parameter values from function definition to function declaration. doxygen likes it and this fixes compilation on ICC.
8ba30554 Ready for alpha2 release. - complete documentation - add TODO - update copyright years
b036eca9 Revert to allowing default Matrix constructor even for dynamic size (which is then set to 1). Discussion with jonasp made me remember why we did so in Eigen1. Also add default constructor to Eval
47d35492 revert most of previous commit. It really is better to forbid default constructor for dynamic-size matrices. Now why do I feel like a beheaded chicken running around?
209cf7c9 TODO is now on techbase
45a4b61b switch to enums everywhere
aae0667e reorganization/cleanup
e092cbc7 -add set...() methods and their documentation; remove Generic -use row-major traversal when the number of columns is fixed and the number of rows is dynamic -other minor changes
bcf7b291 rework Identity API: no longer restricted to square matrices
e05a1aba one bugfix and one optimization
89a134ba big architecture change dissociating "actual" dimensions from "maximum possible" dimension. The advantage is that evaluating a dynamic-sized block in a fixed-size matrix no longer causes a dynamic memory allocation. Other new thing: IntAtRunTimeIfDynamic allows storing an integer at zero cost if it is known at compile time.
95dc68dc renaming: Block -> FixedBlock DynBlock -> Block indeed, previous commit solves the main issue with DynBlock so is should now be the more commonly used one.
6ce996f2 big improvement of the block-manipulation API - reduction of sizeof(Block) for vector types - variants of block() and fixedBlock() for vector blocks - convenience methods start() and end() for vectors - convenience method corner() for matrices
57d7b7d9 documentation update for alpha 3
183bf54d final fixes and updates for alpha3
e20aceb6 cleanup in Eval; instead introduce convenient typedefs in Matrix for naming special related matrix types: RowType, ColumnType, BlockType
2ee7969f re-optimize Matrix::resize(), add some comments
9c9a42cc Eval is now implemented like the other expression types, it no longer inherits Matrix. Remove the typedefs I added in Matrix.
c67e7174 alpha 3.1. in this commit: - finally get the Eval stuff right. get back to having Eval as a subclass of Matrix with limited functionality, and then, add a typedef MatrixType to get the actual matrix type. - add swap(), findBiggestCoeff() - bugfix by Ramon in Transpose - new demo: doc/echelon.cpp
6907886a prefix global functions with ei_ as previous solution was rather fragile. also fix compilation with g++ 4.3.
3698d8cf Relicense --> dual-license LGPL3+/GPL2+
aa8e2bcb Patch by Gael Guennebaud: Rework the matrix storage to ensure optimal sizeof in all cases, while keeping the decoupling of matrix sizes versus storage sizes. Also fixing (recently introduced) bugs caused by unwanted reallocations of the buffers.
b3268a6e -merge patch from Gael Guennebaud adding NumTraits for long long and long double. -define scalar-multiple operators only for the current Scalar type; thanks to Gael for expaining how to make the compiler understand when automatic casting is needed. -take ScalarMultiple take only 1 template param, again. We lose some flexibility especially when dealing with complex numbers, but we gain a lot of extensibility to new scalar types.
f12e9c53 Patch by Gael Guennebaud: unify fixed-size and dynamic-size Block expressions, update documentation.
a2f8d4be Patch by Gael Guennebaud: coeff-wise binary operators. This unifies + and - and moreover this patch introduces coeff-wise * and / based on this. Also, corresponding test.
ed20f64d release alpha4, Gael edition
861c6f4c renaming: ref() --> asArg()
01572b9f big change: MatrixBase only takes one template parameter "Derived", the template parameter "Scalar" is removed. This is achieved by introducting a template <typename Derived> struct Scalar to achieve a forward-declaration of the Scalar typedefs.
2ee68a07 generalized ei_traits<>. Finally the importing macro is named EIGEN_BASIC_PUBLIC_INTERFACE because it does not only import the ei_traits, it also makes the base class a friend, etc.
6da4d9d2 fix compilation (forgot to update that file after last big change)
afc64f33 a lot of renaming internal classes: AaBb -> ei_aa_bb IntAtRunTimeIfDynamic -> ei_int_if_dynamic unify UNROLLING_LIMIT (there was no reason to have operator= use a higher limit) etc...
fe569b06 get rid of MatrixRef, simplifications.
fb3438e6 - expand MathFunctions.h to provide more functions, like exp, log... - add cwiseExp(), cwiseLog()... --> for example, doing a gamma-correction on a bitmap image stored as an array of floats is a simple matter of: Eigen::Map<VectorXf> m = VectorXf::map(bitmap,size); m = m.cwisePow(gamma); - apidoc improvements, reorganization of the \name's - remove obsolete examples - remove EIGEN_ALWAYS_INLINE on lazyProduct(), it seems useless.
29184ad2 - introduce sum() returning the sum of the coeffs of a vector - reimplement trace() as just diagonal().sum() - apidoc fixes
af131fe7 update to fix compilation
0ef1efdb * cleanup: in public api docs, don't put \sa links to \internal things. (the global funcs in MathFunctions.h and Fuzzy.h don't count as internal). * Mainpage.dox. Add a few prospective Eigen users; change the recommended -finline-limit from 10000 to 1000. The reason is: it could be harmful to have a too big value here, couldn't it? (e.g. exceedingly large executables, cache misses). Looking at gcc, a value of 900 would exactly mean "determine the inlining of all functions as if they were marked with 'inline' keyword". So a value of 1000 seems a reasonable round number. In the benchmark that motivated this (TestEigenSolvers) a value of 400 is enough on my system.
729618c9 * #define EIGEN_NDEBUG now also disables asserts. Useful to disable eigen's asserts without disabling one's own program's asserts. Notice that Eigen code should now use ei_assert() instead of assert(). * Remove findBiggestCoeff() as it's now almost redundant. * Improve echelon.cpp: inner for loop replaced by xprs. * remove useless "(*this)." here and there. I think they were first introduced by automatic search&replace. * fix compilation in Visitor.h (issue triggered by echelon.cpp) * improve comment on swap().
a994e51c * add Gael copyright lines on 2 more files * macro renaming: EIGEN_NDEBUG becomes EIGEN_NO_DEBUG as this is much better (and similar to Qt) and EIGEN_CUSTOM_ASSERT becomes EIGEN_USE_CUSTOM_ASSERT * protect Core header by a EIGEN_CORE_H
c9b0dcd7 look at that subtle difference in Product.h... the cacheOptimal is only good for large enough matrices. When taking a block in a fixed-size (hence small) matrix, the SizeAtCompileTime is Dynamic hence that's not a good indicator. This example shows that the good indicator is MaxSizeAtCompileTime. Result: +10% speed in echelon.cpp
758b2655 * fix compilation with gcc-4.0 which doesn't like "using" too much * add Eigen:: in some macros to allow using them from outside of namespace Eigen Problems and solutions communicated by Gael.
f279162e * introducte recursive Flags system for the expressions -- currently 3 flags: RowMajor, Lazy and Large -- only RowMajor actually used for now * many minor improvements
cff5e3ce Make use of the LazyBit, introduce .lazy(), remove lazyProduct.
e74fbfb2 - remove Eval/EvalOMP (moving them to a disabled/ subdir in order to preserve SVN history). They are made useless by the new ei_eval_unless_lazy. - introduce a generic Eval member typedef so one can do e.g. T t; U u; Product<T, U>::Eval m; m = t*u;
d1a29d63 -new: recursive costs system, useful to determine automatically when to evaluate arguments and when to meta-unroll. -use it in Product to determine when to eval args. not yet used to determine when to unroll. for now, not used anywhere else but that'll follow. -fix badness of my last commit
b8900d0b More clever evaluation of arguments: now it occurs in earlier, in operator*, before the Product<> type is constructed. This resets template depth on each intermediate evaluation, and gives simpler code. Introducing ei_eval_if_expensive<Derived, n> which evaluates Derived if it's worth it given that each of its coeffs will be accessed n times. Operator* uses this with adequate values of n to evaluate args exactly when needed.
249dc4f4 current state of the mess. One line fails in the tests, and useless copies are made when evaluating nested expressions. Changes: - kill LazyBit, introduce EvalBeforeNestingBit and EvalBeforeAssigningBit - product and random don't evaluate immediately anymore - eval() always evaluates - change the value of Dynamic to some large positive value, in preparation of future simplifications
61e58cf6 fixes as discussed with Gael on IRC. Mainly, in Fuzzy.h, and Dot.h, use ei_xpr_copy to evaluate args when needed. Had to introduce an ugly trick with ei_unref as when the XprCopy type is a reference one can't directly access member typedefs such as Scalar.
30ec34de fix compilation (finish removal of EIGEN_UNROLLED_LOOPS)
371d302e - merge ei_xpr_copy and ei_eval_if_needed_before_nesting - make use of CoeffReadCost to determine when to unroll the loops, for now only in Product.h and in OperatorEquals.h performance remains the same: generally still not as good as before the big changes.
4920f201 finish making use of CoeffReadCost and the new XprCopy everywhere seems appropriate to me.
9d8876ce * rename XprCopy -> Nested * rename OperatorEquals -> Assign * move Util.h and FwDecl.h to a util/ subdir
ca448d25 split those files in util/ some more renaming
613c49b4 * add typedefs for matrices/vectors with LargeBit * add -pedantic to CXXFLAGS * cleanup intricated expressions with && and || which gave warnings because of "missing" parentheses * fix compile error in NumTraits, apparently discovered by -pedantic
7bee90a6 Merge Gael's experimental OpenMP parallelization support into Assign.h.
dcebc46c - cleaner use of OpenMP (no code duplication anymore) using a macro and _Pragma. - use OpenMP also in cacheOptimalProduct and in the vectorized paths as well - kill the vector assignment unroller. implement in operator= the logic for assigning a row-vector in a col-vector. - CMakeLists support for building tests/examples with -fopenmp and/or -msse2 - updates in bench/, especially replace identity() by ones() which prevents underflows from perturbing bench results.
ab404697 * Add fixed-size template versions of corner(), start(), end(). * Use them to write an unrolled path in echelon.cpp, as an experiment before I do this LU module. * For floating-point types, make ei_random() use an amplitude of 1.
ea3ccb1e * Start of the LU module, with matrix inversion already there and fully optimized. * Even if LargeBit is set, only parallelize for large enough objects (controlled by EIGEN_PARALLELIZATION_TRESHOLD).
9789c044 when evaluating an xpr, the result can now be vectorizable even if the xpr itself wasn't vectorizable.
2a86f052 - optimized determinant calculations for small matrices (size <= 4) (only 30 muls for size 4) - rework the matrix inversion: now using cofactor technique for size<=3, so the ugly unrolling is only used for size 4 anymore, and even there I'm looking to get rid of it.
6747b45a for 4x4 matrices implement the special algorithm that Markos proposed, falling back to the general algorithm in the bad case.
43e2bc14 +5% optimization in 4x4 inverse: -only evaluate block expressions for which that is beneficial -don't check for invertibility unless requested
acfd6f3b - add _packetCoeff() to Inverse, allowing vectorization. - let Inverse take template parameter MatrixType instead of ExpressionType, in order to reduce executable code size when taking inverses of xpr's. - introduce ei_corrected_matrix_flags : the flags template parameter to the Matrix class is only a suggestion. This is also useful in ei_eval.
6ae037df give up on OpenMP... for now
890a8de9 Make products always eval into expressions. Improves performance in benchmark. Still not as fasts as explicit eval(), strangely.
8c6007f8 * Patch by Konstantinos Margaritis: AltiVec vectorization. * Fix several warnings, temporarily disable determinant test.
4f6d7abc only include SSE3 headers if compiling with SSE3 support
3562b011 * Give Konstantinos a copyright line * Fix compilation of Inverse.h with vectorisation * Introduce EIGEN_GNUC_AT_LEAST(x,y) macro doing future-proof (e.g. gcc v5.0) check * Only use ProductWIP if vectorisation is enabled * rename EIGEN_ALWAYS_INLINE -> EIGEN_INLINE with fall-back to inline keyword * some cleanup/indentation
dca416ca move arch-specific code to arch/SSE and arch/AltiVec subdirs. rename the noarch PacketMath.h to DummyPacketMath.h
678f18fc put inline keywords everywhere appropriate. So we don't need anymore to pass -finline-limit=1000 to gcc to get good performance. By the way some cleanup.
3eccfd1a -fix certain #includes -fix CMakeLists, public headers weren't getting installed
5da60897 Introduce generic Flagged xpr, remove already Lazy.h and Temporary.h Rename DefaultLostFlagMask --> HerediraryBits
953efdbf - introduce Part and Extract classes, splitting and extending the former Triangular class - full meta-unrolling in Part - move inverseProduct() to MatrixBase - compilation fix in ProductWIP: introduce a meta-selector to only do direct access on types that support it. - phase out the old Product, remove the WIP_DIRTY stuff. - misc renaming and fixes
5aa00f68 part 2 of big change: rename Triangular.h -> Extract.h (svn required to commit that separately)
aebecae5 * find the proper way of nesting the expression in Flagged: finally that's more subtle than just using ei_nested, because when flagging with NestByValueBit we want to store the expression by value already, regardless of whether it already had the NestByValueBit set. * rename temporary() ----> nestByValue() * move the old Product.h to disabled/, replace by what was ProductWIP.h * tweak -O and -g flags for tests and examples * reorder the tests -- basic things go first * simplifications, e.g. in many methoeds return derived() and count on implicit casting to the actual return type. * strip some not-really-useful stuff from the heaviest tests
f54760c8 hehe, the complicated nesting scheme in Flagged in the previous commit was a sign that we were doing something wrong. In fact, having NestByValue as a special case of Flagged was wrong, and the previous commit, while not buggy, was inefficient because then when the resulting NestByValue xpr was nested -- hence copied -- the original xpr which was already nested by value was copied again; hence instead of 1 copy we got 3 copies. The solution was to ressuscitate the old Temporary.h (renamed NestByValue.h) as it was the right approach.
486fdb26 many small fixes and documentation improvements, this should be alpha5.
b501e08d now the unit-tests (hence all of Eigen) don't depend on Qt at all anymore.
dc5fd8df meagre outcome for so much time spent! * fix inverse() bug discovered by Gael's test * fix warnings introduced by the new Diagonal stuff * update Doxyfile to v1.5.6
92b7e2d6 fix a couple of issues making the eigensolver test compile and run without aborting on an assert. Had to fix a stupid bug in Block -- very strange we hadn't hit it before.
0444e360 - add MatrixBase::eigenvalues() convenience method - add MatrixBase::matrixNorm(); in the non-selfadjoint case, we reduce to the selfadjoint case by using the "C*-identity" a.k.a. norm of x = sqrt(norm of x * x.adjoint())
3b052304 since m*m.adjoint() is positive, so are its eigenvalues, so no need for cwiseAbs()
6209bbe2 doc improvements: fix linking in Mainpage.dox, improved Doxyfile.in
ac88feeb work around Doxygen bug triggered by r814874, which caused many classes to disappear from the docs.
75de41a0 big changes in Doxygen configuration; work around bug with doxygen parsing of initialized enum values showing the last word the initializer instead of the actual enum value's name; add some more docs.
8de4d92b - get the doc of the enums in MatrixBase right - get the doc of the flags in Constants right - finally give up with SEPARATE_MEMBER_PAGES: it triggers too big Doxygen bugs, and produces too many small pages. So we have one huge page for MatrixBase at currently 300kb and going up, so the solution especially for users with low bandwidth will be to provide an archive of the html documentation.
869394ee fix some compile errors with gcc 4.3, some warnings, some documentation
c90c7705 * make the _Flags template parameter of Matrix default to the corrected flags. This ensures that unless explicitly messed up otherwise, a Matrix type is equal to its own Eval type. This seriously reduces the number of types instantiated. Measured +13% compile speed, -7% binary size.
53289a8b * even though the _Flags default to the corrected value, still correct them in the ei_traits, so that they're guaranteed even if the user specified his own non-default flags (like before).
c905b31b * Big rework of Assign.h: ** Much better organization ** Fix a few bugs ** Add the ability to unroll only the inner loop ** Add an unrolled path to the Like1D vectorization. Not well tested. ** Add placeholder for sliced vectorization. Unimplemented.
478bfaf2 fix bug in computation of unrolling limit: div instead of mul
9857764a aaargh.
bb1f4e44 * Block: row and column expressions in the inner direction now have the Like1D flag.
574416b8 Override MatrixBase::eval() since matrices don't need to be evaluated, it is enough to just read them.
8a967fb1 * implement slice vectorization. Because it uses unaligned packet access, it is not certain that it will bring a performance improvement: benchmarking needed. * improve logic choosing slice vectorization. * fix typo in SSE packet math, causing crash in unaligned case. * fix bug in Product, causing crash in unaligned case. * add TEST_SSE3 CMake option.
dc9206ce split sum away from redux and vectorize it. (could come back to redux after it has been vectorized, and could serve as a starting point for that) also make the abs2 functor vectorizable (for real types).
32596c5e add benchmark for sum
03d19f3b quick temporary fix for a perf issue we just identified with vectorization.... now the sum benchmark runs 3x faster with vectorization than without.
c9560df4 * add ei_pdiv intrinsic, make quotient functor vectorizable * add vdw benchmark from Tim's real-world use case
3b94436d * vectorize dot product, copying code from sum. * make the conj functor vectorizable: it is just identity in real case, and complex doesn't use the vectorized path anyway. * fix bug in Block: a 3x1 block in a 4x4 matrix (all fixed-size) should not be vectorizable, since in fixed-size we are assuming the size to be a multiple of packet size. (Or would you prefer Vector3d to be flagged "packetaccess" even though no packet access is possible on vectors of that type?) * rename: isOrtho for vectors ---> isOrthogonal isOrtho for matrices ---> isUnitary * add normalize() * reimplement normalized with quotient1 functor
5b0da4b7 make use of ei_pmadd in dot-product: will further improve performance on architectures having a packed-mul-add assembly instruction.
25ba9f37 * add bench/benchVecAdd.cpp by Gael, fix crash (ei_pload on non-aligned) * introduce packet(int), make use of it in linear vectorized paths --> completely fixes the slowdown noticed in benchVecAdd. * generalize coeff(int) to linear-access xprs * clarify the access flag bits * rework api dox in Coeffs.h and util/Constants.h * improve certain expressions's flags, allowing more vectorization * fix bug in Block: start(int) and end(int) returned dyn*dyn size * fix bug in Block: just because the Eval type has packet access doesn't imply the block xpr should have it too.
c5bd1703 change derived classes methods from "private:_method()" to "public:method()" i.e. reimplementing the generic method() from MatrixBase. improves compilation speed by 7%, reduces almost by half the call depth of trivial functions, making gcc errors and application backtraces nicer...
e27b2b95 * rework Map, allow vectorization * rework PacketMath and DummyPacketMath, make these actual template specializations instead of just overriding by non-template inline functions * introduce ei_ploadt and ei_pstoret, make use of them in Map and Matrix * remove Matrix::map() methods, use Map constructors instead.
6de4871c fix a couple of issues in the new Map.h
844f69e4 * update CMakeLists, only build instantiations if TEST_LIB is defined * allow default Matrix constructor in dynamic size, defaulting to (1, 1), this is convenient in mandelbrot example.
55e08f71 fix breakage from my last commit
6917be91 add mandelbrot demo
97a10386 improve greatly mandelbrot demo: - much better coloring - determine max number of iterations and choice between float and double at runtime based on zoom level - do draft renderings with increasing resolution before final rendering
fbdecf09 fix little bug in computation of max_iter
cacf986a - use double precision to store the position / zoom / other stuff - some temporary fix to get a +50% improvement from vectorization until we have vectorisation for comparisons and redux
56d03f18 * multi-threaded rendering * increased number of iterations, with more iterations done before testing divergence. results in x2 speedup from vectorization.
a356ebd4 interleaved rendering balances the load better
95549007 * fix error in divergence test, now it is even faster * add comments in render() in case anyone ever reads that :P
a9d319d4 * do the ActualPacketAccesBit change as discussed on list * add comment in Product.h about CanVectorizeInner * fix typo in test/product.cpp
f5791eeb the big Array/Cwise rework as discussed on the mailing list. The new API can be seen in Eigen/src/Core/Cwise.h.
6f09d3a6 - many updates after Cwise change - fix compilation in product.cpp with std::complex - fix bug in MatrixBase::operator!=
8f21a5e8 add benchmark for slice vectorization... expected it to be little or zero benefit... turns out to be 20x speedup. Something is wrong.
25904802 raah, results were corrupted by overflow. Now slice vectorization is about a +25% speedup which is still nice as i expected zero or even negative benefit.
2b53fd4d some performance fixes in Assign.h reported by Gael. Some doc update in Cwise.
1bbaea98 little cmake fix
e979e648 another occurence of that little cmake fix
51e6ee39 SVN_SILENT trivial fix
62ec1dd6 * big rework of Inverse.h: - remove all invertibility checking, will be redundant with LU - general case: adapt to matrix storage order for better perf - size 4 case: handle corner cases without falling back to gen case. - rationalize with selectors instead of compile time if - add C-style computeInverse() * update inverse test. * in snippets, default cout precision to 3 decimal places * add some cmake module from kdelibs to support btl with cmake 2.4
8b4945a5 add some static asserts, use them, fix gcc 4.3 warning in Product.h.
f997a3e9 update the inverse test a little make use of static asserts in Map fix 2 warnings in CacheFriendlyProduct: unused var 'Vectorized'
49ae3fca fix compile errors with gcc 4.3: unresolved func call to ei_cache_friendly_product, and undeclared memcpy
c2f8ecf4 * LU decomposition, supporting all rectangular matrices, with full pivoting for better numerical stability. For now the only application is determinant. * New determinant unit-test. * Disable most of Swap.h for now as it makes LU fail (mysterious). Anyway Swap needs a big overhaul as proposed on IRC. * Remnants of old class Inverse removed. * Some warnings fixed.
79a0feee big performance improvement in inverse and LU
e741b7be further big perf improvement in Inverse
09ef7db9 Add partial pivoting runtime option to LU.
c94be35b introduce copyCoeff and copyPacket methods in MatrixBase, used by Assign, in preparation for new Swap impl reusing Assign code. remove last remnant of old Inverse class in Transform.
88bb2087 New implementation of Swap as discussed, reusing Assign. Makes LU run 10% faster overall.
58ba9ca7 LU: remove partial-pivoting path (moderately useful since it's does not allow to easily get the rank), fix a bug (which could have been triggered by matrices having coefficients of very different magnitudes). Part: add an assert to prevent hard to find bugs Swap: update comments
5f350448 - add kernel computation using the triangular solver - take advantage of the fact that our LU dec sorts the eigenvalues of U in decreasing order - add meta selector in determinant
9bbe3969 forgot to remove that old code
a41f2b42 * fix bug in SwapWrapper : store the wrapped expression by reference * optimize setIdentity: when the matrix is large enough it is better to setZero() and overwrite the diagonal * start of LU solver, disabled for now
681e9446 *implement LU solver (solves any rectangular system) *in test/CMakeLists : modify EI_ADD_TEST so that 2nd argument is additional compiler flags. used to add -O2 to test_product_large so it doesn't take forever.
becbeda5 * reimplement the general case of inverse() on top of LU. Advantages: - removes much code - 2.5x faster (even though LU uses complete pivoting contrary to what inverse used to do!) - there _were_ numeric stability problems with the partial pivoting approach of inverse(), with 200x200 matrices inversion failed almost half of the times (overflow). Now these problems are solved thanks to complete pivoting.
d6e88f81 * add LU unit-test. Seems like we have very good numerical stability! * some cleanup, and grant me a copyright line on the determinant test.
17ec407c * add Regression module, from eigen1, improved, with doc and unit-test. * fix .normalized() so that Random().normalized() works; since the return type became complicated to write down i just let it return an actual vector, perhaps not optimal. * add Sparse/CMakeLists.txt. I suppose that it was intentional that it didn't have CMakeLists, but in <=2.0 releases I'll just manually remove Sparse.
f04c1cb7 Complete LU documentation
13ad8873 last small fixes, this is alpha6, eigen2 is now ready for eigen1 apps to port to.
3bc27469 Copy eigen2 into kdesupport, alongside eigen1 for now, co-installable, will remove eigen1 once no code uses it anymore (soon).
d9d69de3 updated tutorial
239b47e0 *make Eigen2 install to prefix/include/eigen2/Eigen *Add FindEigen2.cmake module in kdelibs
95a1283b fix compilation of unit-tests when cmake is run on kdesupport/ parent directory
baf0cffe *add operator()(int) for vectors, synonymous to operator[](int). I don't see any reason not to allow it, it doesn't add much code, and it makes porting from eigen1 easier. *expand tests/basicstuff to first test coefficient access methods
e778ae25 only use alloca on linux. Use malloc on other platforms. Needed for mingw compatibility.
9466e5f9 * doc improvements in Cwise and PartialRedux: - 33 new snippets - unfuck doxygen output in Cwise (issues with function macros) - more see-also links from outside, making Cwise more discoverable * rename matrixNorm() to operatorNorm(). There are many matrix norms (the L2 is another one) but only one is called the operator norm. Risk of confusion with keyword operator is not too scary after all.
54137f1c * fix bug found by Boudewijn Rempt: no CMakeLists in arch/ subdir * fix warning in SolveTriangular
c705c38a * it's \returns not \Returns * add some explanations in the typedefs page * expand a bit the new QuickStartGuide. Some placeholders (not a pb since it's not even yet linked to from other pages). The point I want to make is that it's super important to have fully compilable short programs (even with compile instructions for the first one) not just small snippets, at least at the beginning. Let's start with examples of compilable programs.
ff8e98c9 Fix bugs in Sum.h, add unit-test
591d497b add resize() methods to Map, doing nothing but assertions. This is useful in Krita where I call lu().solve() with a Map object as result. As solve() resizes the result, this was needed.
082e309d patch by Patrick Spendrin: fix MSVC compatibility
0998c51d - remove the ASM macro as in fact Gael had been removing all the remaining asm("...") from the code while fixing MSVC compat (so your changes crossed one another). - move the pragma warning to CoreDeclarations, it's the right place to do early platform checks.
a814ebe1 fix a number of compiler errors and warnings with gcc 4.3. There was a missing #include<algorithm> so I'm not sure how it compiled at all for you :)
312013a0 compile fix for code like Vector3d::Random().x()
251ecc0a Rename someOrthogonal to unitOrthogonal. Fix a bug in it, with dyn-size vectors of size <=3. Update doc and test to reflect that it always returns a unit vector.
b815b23e forgot to install Regression public header
6b591d06 add data() methods to Transform
6a36b5a6 add AngleAxis::operator*(const Vector3&)
d3529e9c optimization: spare the 3x3 matrix product in fromPositionOrientationScale
bf31d81a argh, gael you're more clever than i remembered. diagonal product is optimized. so, i almost revert, just reordering to reduce # of load/store.
124ec71c allow constructing Transform from small-matrix (like fromPosOrientScale but with trivial Pos and Scale)
aa54d6be arf, of course a meta-selector was required here
5ac883b1 Fix a bug discovered in Avogadro: the AngleAxis*Matrix and the newer AngleAxis*Vector products were wrong because they returned the product _expression_ toRotationMatrix()*other; and toRotationMatrix() died before that expression would be later evaluated. Here it would not have been practical to NestByValue as this is a whole matrix. So, let them simply evaluate and return the result by value.
da674fa0 Shut up two bogus gcc 4.3 warnings
12c6b45a replace vector by __vector to prevent conflict with std::vector
a0cfe6eb remove double ;
252e0c45 * missing cmake make_directory command * show svn revision number if available * fix warnings about unused argc/argv
f7de12de Missing inline keywords in AltiVec/PacketMath were making Avogadro fail to compile (duplicate symbols).
5c34d8e2 The discussed changes to Hyperplane, the ParametrizedLine class, and the API update in Regression...
ff60c9cc fix cmakelists: wrong assumption on CMAKE_SOURCE_DIR. One can now use EIGEN_SOURCE_DIR for that use, guaranteed to point to eigen2/ directory.
c9318679 also use EIGEN_SOURCE_DIR here. according to grep this was the last place to change.
d74916e4 same thing with EIGEN_BINARY_DIR. Now the doc generation works from kdesupport.
46fe7a3d if EIGEN_NICE_RANDOM is defined, the random functions will return numbers with few bits left of the comma and for floating-point types will never return zero. This replaces the custom functions in test/main.h, so one does not anymore need to think about that when writing tests.
6add33e2 fix warning
247f2b0f * block() for vectors ---> segment() * documentation improvements, especially in quickstart guide
af991a6b small dox fixes
618de17b block(int,int)->segment
4e502dd6 very little fixes: cast literals to Scalar, rephrase some doc, add some const (maybe completely useless but at least doesn't hurt)
3d90c139 norm2() renamed to squaredNorm(), kept as deprecated for now.
a0ec0fca Add Matrix::Map() and Matrix::AlignedMap() static methods
e8009993 add lpNorm<p>() method to MatrixBase, implemented in Array module, with specializations for cases p=1,2,Eigen::Infinity.
12f84acd Matrix documentation rework
033ac82c refinements in Matrix doc
36143214 * add Gael a (c) line in IO.h * let user change default format by defining EIGEN_DEFAULT_IO_FORMAT * improve docs a little
00f89a8f Update e-mail address
aba378eb add internal documentation
c1e2156d * Much better, consistent error msgs when mixing different scalar types: - in matrix-matrix product, static assert on the two scalar types to be the same. - Similarly in CwiseBinaryOp. POTENTIALLY CONTROVERSIAL: we don't allow anymore binary ops to take two different scalar types. The functors that we defined take two args of the same type anyway; also we still allow the return type to be different. Again the reason is that different scalar types are incompatible with vectorization. Better have the user realize explicitly what mixing different numeric types costs him in terms of performance. See comment in CwiseBinaryOp constructor. - This allowed to fix a little mistake in test/regression.cpp, mixing float and double - Remove redundant semicolon (;) after static asserts
2ff7961c split off the lazy evaluation part from the quickstartguide; actually by mistake i had already committed part of that change so i commit the rest even if it's not much, so building docs from trunk works again.
6d1439a5 add big "what happens inside eigen" tutorial for people interested in Eigen internals
bb33ec4e * fix compile error when C++0x is enabled: static_assert() needs ; thanks to devurandom for reporting * remove redundant ; in ei_internal_assert * minor fixes in InsideEigenExample.dox
2b20da62 * improvements in the tutorial: triangular matrices, linear algebra * minor fixes in Part and StaticAssert * EulerAngles: remove the FIXME as I think the current version is fine
93c1f629 Use an aligned IOFormat in the docs
7e8ee5b5 hide internal stuff from doxygen by using #ifndef EIGEN_PARSED_BY_DOXYGEN.
08e6b7ad Make deluxe assertion with deluxe error message with link to deluxe web page for this very nasty bug (unaligned member in dynamically allocated struct) that our friends at Krita just encountered:
6700f07f actually this message is probably more effective at making people read the web page...
09fd69d7 * add Transform explicit constructors taking translation/scaling/rotation * add Transform::operator= taking rotation. An old remnant was left commented out. Why was it disabled? * slight optimization in operator= taking translation * slight optimization (perhaps) in the new memory assertion
069ecbb4 * complete the change norm2->squaredNorm in PartialRedux * somehow the NICE_RANDOM stuff wasn't being used anymore and tests were sometimes failing again. Fixed by #including Eigen/Array instead of cherry-picking just Random.h. * little fixes in the unaligned assert page
cb409914 * call it beta2 * improvements in Matrix documentation * document copyCoeff and copyPacket even if it's hidden from doxygen
936eaf60 compilation fix thanks to Dennis Schridde
703951d5 Fix memory alignment (hence vectorization) on MSVC thanks to help from Armin Berres.
11c8a6bf Fix detection of SSE2 with MSVC.
dd139b92 work around the braindead msvc preprocessor
9b1a3d6e small optimization (for MSVC) and simplification of ei_alligned_malloc
763f0a24 use ei_aligned_malloc and ei_aligned_free also in WithAlignedOperatorNew, so this too should now work with MSVC.
55b603e4 * fix a bug I introduced in WithAlignedOperatorNew * add an important comment
1ad751b9 only enable the "unaligned array" assert if vectorization is enabled. if vectorization is disabled, WithAlignedOperatorNew is empty!
0a220721 Finally work around enough of MSVC preprocessor dumbness so that it actually detects SSE2
50105c3e Hopefully fix compilation of SSE Packetmath with MSVC.
38b83b41 * throw bad_alloc if exceptions are enabled, after patch by Kenneth Riddile * disable vectorization on MSVC 2005, as it doesn't have all the required intrinsics. require 2008.
2110cca4 actually honor EIGEN_STACK_ALLOCATION. Can set it to 0 to disable stack alloc which guarantees that bad alloc throws exceptions if they are enabled.
89f46867 * replace postfix ++ by prefix ++ wherever that makes sense in Eigen/ * fix some "unused variable" warnings in the tests; there remains a libstdc++ "deprecated" warning which I haven't looked much into
c22d10f9 LU class: * add image() and computeImage() methods, with unit test * fix a mistake in the definition of KernelResultType * fix and improve comments
5f582aa4 fix bad typos, thanks to Kenneth Riddile
15d72d3f somehow we had forgotten this very important static assertion...
b27a3644 Macros: add MSVC paths, add an important comment on EIGEN_ALIGN_128
fabaa691 * fix in IO.h, a useless copy was made because of assignment from Derived to MatrixBase. * the optimization of eval() for Matrix now consists in a partial specialization of ei_eval, which returns a reference type for Matrix. No overriding of eval() in Matrix anymore. Consequence: careful, ei_eval is no longer guaranteed to give a plain matrix type! For that, use ei_plain_matrix_type, or the PlainMatrixType typedef. * so lots of changes to adapt to that everywhere. Hope this doesn't break (too much) MSVC compilation. * add code examples for the new image() stuff. * lower a bit the precision for floats in the unit tests as we were already doing some workarounds in inverse.cpp and we got some failed tests.
8106d354 Patch by Kenneth Riddile: disable MSVC warnings, reenable them outside of Eigen, and add a MSVC-friendly path in StaticAssert.
f34a4fa3 * forgot to svn add 2 files * idea of Keir Mierle: make the static assert error msgs UPPERCASE
84bb868f * more MSVC warning fixes from Kenneth Riddile * actually GCC 4.3.0 has a bug, "deprecated" placed at the end of a function prototype doesn't have any effect, moving them to the start of the function prototype makes it actually work! * finish porting the cholesky unit-test to the new LLT/LDLT, after the above fix revealed a deprecated warning
e4980616 SelfAdjointEigenSolver: add operatorSqrt() and operatorInverseSqrt()
22875683 * extractRotation ---> rotation * expand the geometry/Transform tests, after Mek's reports * fix my own stupidity in eigensolver test
a3fad2e3 Transform*Transform should return Transform unit test compiles again
df4bd5e4 * fix a test giving some false positives * add coverage for various operator*=
21ab65e4 fix nasty little bug in ei_add_test
9e00d945 * the Upper->UpperTriangular change * finally get ei_add_test right
f5a05e7e unfuck v.cwise()*w where v is real and w is complex
4336cf38 * add unit-tests to check allowed and forbiddent mixing of different scalar types * fix issues in Product revealed by this test *…
phcerdan
pushed a commit
to phcerdan/ITK
that referenced
this pull request
Feb 7, 2020
Run the UpdateFromUpstream.sh script to extract upstream Eigen3
using the following shell commands.
$ git archive --prefix=upstream-eigen3/ 0a5604a9 --
Eigen/Cholesky
Eigen/CholmodSupport
Eigen/CMakeLists.txt
Eigen/Core
Eigen/Dense
Eigen/Eigen
Eigen/Eigenvalues
Eigen/Geometry
Eigen/Householder
Eigen/IterativeLinearSolvers
Eigen/Jacobi
Eigen/LU
Eigen/MetisSupport
Eigen/OrderingMethods
Eigen/PardisoSupport
Eigen/PaStiXSupport
Eigen/QR
Eigen/QtAlignedMalloc
Eigen/Sparse
Eigen/SparseCholesky
Eigen/SparseCore
Eigen/SparseLU
Eigen/SparseQR
Eigen/SPQRSupport
Eigen/StdDeque
Eigen/StdList
Eigen/StdVector
Eigen/SuperLUSupport
Eigen/SVD
Eigen/UmfPackSupport
Eigen/src
COPYING.BSD
COPYING.MINPACK
COPYING.MPL2
COPYING.README
README.md
README.kitware.md
CMakeLists.txt
cmake/FindStandardMathLibrary.cmake
cmake/Eigen3Config.cmake.in
.gitattributes
| tar x
$ git shortlog --perl-regexp --author='^((?!Kitware Robot).*)$' --no-merges --abbrev=8 --format='%h %s' c5d991ff..0a5604a9
Abhijit Kundu (9):
ba3457ca Fixed compilation error due to obsolete internal::abs and internal::sqrt function calls
48db34a7 Adding missing OPENGL_LIBRARIES for openglsupport test. Also adding OpenGL include directories as a better pratice even though these are system include directories in most systems.
eb3695d2 Added cmake uninstall target. This adds a cmake command make uninstall Running make uninstall removes the files installed by running make install
4084dce0 Added CMake support for Tensor module. CMake now installs CXX11 Tensor module like the rest of the unsupported modules
ef09ce45 Fix for TensorIO for Fixed sized Tensors.
1127ca85 Added ArpackSupport to cmake install target
0ed41bde ArpackSupport was missing here also.
3fde2022 Making ceil() functor generic w.r.t packet type
0beabb47 Fixed type conversion from int
Abraham Bachrach (2):
039408cd added functions to allow for cwise min/max operations with scalar argument (bug #400). added function for array.min(), array.max(), matrix.cwiseMin(), matrix.cwiseMax().
804ef235 Move the Base typedef's from private to public scope
Adam Szalkowski (1):
969e9226 fix bug #239: the essential part was left uninitialized in some cases
Adolfo Rodriguez Tsouroukdissian (2):
5a36f4a8 Propagate all five matrix template parameters to members and temporaries of decomposition classes. One particular advantage of this is that decomposing matrices with max sizes known at compile time will not allocate. NOTE: The ComplexEigenSolver class currently _does_ allocate (line 135 of Eigenvalues/ComplexEigenSolver.h), but the reason appears to be in the implementation of matrix-matrix products, and not in the decomposition itself. The nomalloc unit test has been extended to verify that decompositions do not allocate when max sizes are specified. There are currently two workarounds to prevent the test from failing (see comments in test/nomalloc.cpp), both of which are related to matrix products that allocate on the stack.
28dde19e - Added problem size constructor to decompositions that did not have one. It preallocates member data structures. - Updated unit tests to check above constructor. - In the compute() method of decompositions: Made temporary matrices/vectors class members to avoid heap allocations during compute() (when dynamic matrices are used, of course).
Adolfo Rodriguez Tsourouksdissian (3):
7bf0e8cd bug #206 - part 2: For HouseholderSequence objects, added non-allocating versions of evalTo() and applyThisOnTheRight/Left that take additional working vector parameters.
5e431779 bug #206 - part 3: Reimplement FullPivHouseholderQR<T>::matrixQ() using ReturnByValue
4477843b bug #206 - part 4: Removes heap allocations from JacobiSVD and its preconditioners
Alexander Neumann (2):
9c97b053 fixed compiling issue using clang-cl with visual studio
7962ac1a fixed inlining issue with clang-cl on visual studio
Alexander Neundorf (2):
6b3d0e68 -use the cmake-provided Eigen_(SOURCE|BINARY)_DIR variables instead of setting own versions (EIGEN_(SOURCE|BINARY)_DIR
84cc69f0 -add quotes around the configured directories so build dirs with spaces produce some errors less
Alexandre Avenel (1):
d46e2c10 Add round, ceil and floor for SSE4.1/AVX (Bug #70)
Alexey Frunze (2):
e6c8d0b7 bug #1584: Improve random (avoid undefined behavior).
af3656d4 Fix build failures in matrix_power and matrix_exponential tests.
Alexey Korepanov (4):
65db91ac Add a RealQZ class: a generalized Schur decomposition for real matrices
a3a9773a RealQZ: bug in splitOffTwoRows fixed
ea310249 RealQZ: bug in pushDownZero fixed too
d937e67b RealQZ: added example and some code comments
Andrew Coles (2):
093e3cd5 Commented out duplicate definition of TransformTraits - was causing compile-time errors.
64fbd93c As values may be used uninitialised, they have now been given sensible defaults; or, in other words, if worse comes to worst, we'll get a guaranteed segfault rather than a heisenburg.
Andy Somerville (2):
842881cf bug #298 - let normalize() return a reference to *this
c06ae325 feature 297: add ParametrizedLine::intersectionPoint() and intersectionParam() -> intersection() is deprecated
Angelos Mantzaflaris (5):
a9aa3bcf fix two warnings(unused typedef, unused variable) and a typo
b6f04a2d typo UIntPtr
4086187e 1. Add explicit template to abs2 (resolves deduction for some arithmetic types) 2. Avoid signed-unsigned conversion in comparison (warning in case Scalar is unsigned)
0a08d4c6 use numext::abs
e236d344 Remove superfluous const's (can cause warnings on some Intel compilers)
Anton Gladky (2):
09a1b7f7 Fixes the problem, described here: http://listengine.tuxfamily.org/lists.tuxfamily.org/eigen/2010/05/msg00154.html
4cd4be97 Port unsupported constrained CG to Eigen3
Armin Berres (4):
ab660a4d inherit from ei_with_aligned_operator_new even with disabled vectorization
dae7f065 didn't meant to commit the fortran check. but anyway, unfortunately it doesn't work the way iot should. the test fails and cmake will terminate if it doesn't find a fortran compiler
8e888a45 call methods from the eigen namespace with prepended Eigen:: in define
6c84b03d add missing newline at EOF
Avi Ginsburg (1):
ac63d689 Patch to allow VS2015 & CUDA 8.0 to compile with Eigen included. I'm not sure whether to limit the check to this compiler combination (` || (EIGEN_COMP_MSVC == 1900 && __CUDACC_VER__) `) or to leave it as it is. I also don't know if this will have any affect on including Eigen in device code (I'm not in my current project).
Basil Fierz (1):
01fb6217 Adds missing EIGEN_STRONG_INLINE to support MSVC properly inlining small vector calculations
Ben Boeckel (1):
efc1e4d5 git: remove executable permissions from header files
Benjamin Chretien (2):
e5d0cb54 Fix typo in Reductions tutorial.
0b7f95a0 Fix typo in SparseMatrix assert.
Benjamin Chrétien (9):
edebb152 PolynomialSolver: add a test to reveal a bug.
0f946079 PolynomialSolver: test template constructor in test suite.
df926493 PolynomialSolver: add missing constructors.
eda79321 PolynomialSolver: fix bugs related to linear polynomials.
c55c5763 PolynomialSolver: fix typo.
db76193b Fix typo in PermutationMatrix (doc).
6f58a410 Fix typos in Ref.h (doc).
c53f8829 Fix more typos in Ref.h (doc).
c4260547 BDCSVD: fix CMake install (missing separator).
Benjamin Piwowarski (1):
6bf49cea bug #449: add SparseMatrix::conservativeResize feature
Benjamin Schindler (5):
097cab26 Added a pretty printer python script for Eigen::Matrix (gdb-7.0 and later).
f2304f3b Adding __init__.py so the printers can be used directly from the checkout
a4c162db Correct license header of the gdb pretty printer
4da991ea Display the data ptr as part of the header
f0315295 Handle row and col major matrices in the gdb pretty printer
Benoit Jacob (1205):
3036eeca Starting Eigen 2 development. The current plan is to use the last release of tvmet (inactive for 2 years and developer unreachable) as the basis for eigen2, because it provides seemingly good expression template mechanisms, we want that, and it would take years to reinvent that wheel. We'll see. So this commit imports the last tvmet release.
47b935fc add initial CMakeLists
8eb898ce begin porting the configure checks to cmake
7947ae0e A TODO to motivate hundreds of hackers to help with Eigen 2 development. Cheesy slashdot joke included.
658eccd4 Convert 5 m4 checks to cmake modules
8f202dc6 Complete the cmake platform checks and remove unnecessary defines.
eab54b49 More cleanup, add CMakeLists for the testsuite. Now need to port it to QTestLib :/
5205e881 adding more CMakeLists, now tvmet is fully installed.
8c001c13 remove TVMET_DYNAMIC_MEMORY define and corresponding checks.
887ff843 remove custom assert system and use plain standard asserts instead. we don't need no complication.
6d749c17 replace size_t with int everywhere. The size_t type means a number of _bytes_, and it was misused as counting e.g. the number of rows/columns in a matrix. Moreover, it is unsigned, which can give strange bugs if a signed/unsigned mismatch occurs.
f8787110 Add cmake module finding the appropriate variant of the "restrict" keyword. Could that be useful to have in kdelibs/cmake/modules ?
e198eb43 add platform check for __attribute__((always_inline))
e3a45173 argh, forgot to svn add...
6fe6a818 Fix enough stuff, and remove enough dead stuff, to make a simple test program compile
e30e7d7b move cmake modules to a modules/ subdir
9939776c more cmake improvements; start removing the autotools stuff.
9dd7a0b6 add eigen-style typedefs
681eb1ed add TVMET_UNUSED macro, as a Q_UNUSED replacement. Use it to shut down warnings in NumericTraits.h.
b155789a begin porting the unittests to QTestLib. The first test, "selfTest" already runs and succeeds. Also expand this test by testing more types and sizes.
152e09a1 remove long long, long double, unsigned, short, char, bool types. Keep only int, float, double, complex<T>.
37bd64b4 Remove remaining per-element math functions. Remove defines for IEEE, SYSV and complex math. Now the user has to define himself EIGEN_USE_COMPLEX if he wants complex support. Remove TVMET_OPTIMIZE. More cleanup.
b6dedaf7 remove two unused files
d62af65d port TestNumericTraits to QTestLib. This revealed some shortcomings in tvmet's infrastructure, in particular it lacks adequate fuzzy compares. will port that from eigen1.
f1bd0902 Big overhaul and simplification of the NumericTraits system. Add a utility header for random numbers (might be merged into NumericTraits)
ca438b2c Unit-tests updated for the stuff in the previous commit.
71268227 Big rework of the Traits system, unittests updated.
c9a2c373 lots of fixes for complex numbers. unittests now test complex numbers.
9a519c30 forgot to "svn add" a very important file!!
011c7e9e forgot to add another file...
07f96b60 remove 4 files from tvmet that are now replaced by testtraits.cpp
ad89fc82 -- switch Matrix class to column-major order like in Eigen -- many more Eigenification changes, in preparation of the big merge -- big changes in the Comma Initializer to allow for column-major order, leading to a simpler and cleaner solution. "commaWrite" hook added to the classes using the Comma Initializer. -- lots of API improvements, cleanup, removal of dead/useless stuff -- testsuite updated
dfd4d2c4 of course, i had forgotten to svn add one file
c14ba38d some more cleanup in comma-initializer stuff
c141f18b some cleanup
bb114eb6 remove more stuff that I don't need
7eeb6208 restart Eigen2 development from scratch.
1dabb45d Hello, World! This is the initial commit for Eigen2, since I restarted it from scratch on Sunday.
13a82795 forgot to svn add some CMakeLists
9477e62b add a missing operator= for copying a matrix into an expression.
e7ef6dba - Introduce aliasing system - Remove operator<<, use .alias() instead - Introduce operator/ (scalar) - Cleanup, unit-tests update.
c3731b36 Add operator += and operator -= between matrices/vectors/expressions
c030e570 extend operators += and -= to aliases
61158b19 add operator *= between matrices, with automatic aliasing. add tutorial in doc/ subdirectory.
506cc5db remove operator *= between matrices: too much hassle.
fe9b6b8f remove the MatrixConstXpr and MatrixConstRef classes. Now the user doesn't need anymore to call .xpr() and can simply do: matrix.row(i) += matrix.row(j)
1dab53d3 update tutorial
3b727ef9 some cleanup
1af61c6f reorganize header files, split MatrixBase into smaller files. expose only a few meta-headers to the user, the rest moves to a internal/ subdirectory
55227b1f Deep refactoring. 1) Kill MatrixXpr class, instead let all class inherit a common EigenBase class 2) Kill MatrixBase/Matrix/Vector classes, instead introduce a single Matrix class, a MatrixStorage class, and typedefs to emulate vectors 3) Huge code cleanup, remove large preprocessor macros, sloccount drop to ~750 down from 1100. 4) Introduce compile-time-known sizes
a2dd9dd6 Give the axe to the aliasing system. Improve the evaluation system instead.
8a024825 fix bugs caused by default copy constructors being called. valgrind, you saved my life.
628b1a8f implement scalar operators separately for each type using a macro. This is required e.g. to allow "2 * m" with m a matrix of doubles.
d99d9407 add operators *= and /=
4e299afb don't enclose eigen in a namespace. prefixing is the way to go. For example Qt uses a prefix and no namespace (except for a few things)
5160e9d0 Half-way commit prefixing object names. I am forced to commit now because I renamed a file once with a wrong filename and svn refuses to let me rename it again, tells me i should propagate first.
28c44a95 Finish prefixing everything with "Ei"
835e0c9f Found a way to have eval() be a member function of class EiObject, instead of a global function.
aa3294f1 add example to the documentation
51e29ae4 some reorganization leading to simpler expression trees
ee63e15e make matrix multiplication do immediate evaluation; add lazyMul() for the old behaviour some reorganization, especially in MatrixStorage start playing with loop unrolling, always_inline, and __restrict__
7d41ad9d Get rid of a nasty const_cast by introducing a MatrixConstRef class. Remove the __restrict__'s for now.
023773be Fix super-nasty bug in the declaration of the storage array of fixed-size matrices. Also some simplifications.
4241ddde temporarily remove division unit-tests. they caused div-by-zero's , reported by Michael Olbrich. The solution will consist in adding a real Traits system.
e116aba4 adapt to coding style used elsewhere in eigen2
65691961 - add copyright line for Michael Olbrich - some meta unrolling improvements
60156980 Michael was right, it's best to base the unrolling limit on the product Rows*Cols.
3cf6caba remove useless typedefs
96524fc5 Split Row and Column into separate files. Introduce a notion of RowVector (typedef for Matriw with 1 row) Make row() return a row vector instead of a "column vector" Introduce operator[] to access elements of row/column vectors uniformly Remove default arguments in operator(), these were for vectors, now use operator[] instead
f5f45d75 Move the meta loop unrolling to a separate file, Loop.h
c768a449 Add matrix transposition
ae207240 Introduce Numeric Traits, with fuzzy compares, random numbers, etc.
9eff6854 add matrix conjugation and adjunction. compilation fixes in the numeric traits.
f939abd5 aargh, had forgotten to 'svn add' a file. Yeah, 'svn st' is my friend, i know...
be429ebf reorganisation of headers, commit47b935fc42cbf2ca992d8a270bc1b0fc97d1f6bc /2....
4fe78b8e reorganization of headers, part 2/2...
95b33167 reorganize meta loop unrolling, add Trace (meta-unrolled), fix compilation issues in the conjugation/adjunction stuff
f0be175b add dot product, extend meta unrolling everywhere
ac6ff5ef reverse certain inner loops. Now the benchmark runs in 3.5s instead of 5.5s before!
7f0a546a add norm() and norm2(); some polishing
06e1e0d8 fix dot product, add norm/norm2/normalized add fuzzy compares for matrices/vectors add random matrix/vector generation
3c986773 fix big bug in loop unrolling
61de15f3 Democracy 1 - 0 Dictatorship
0d44c090 simplify the new USING_EIGEN_DATA_TYPES macro
3654ee8b SVN_SILENT:
a4626cc8 rework the numeric traits now that we're using a namespace and no prefix
12bcafdc some renaming in the fuzzy compares, and in the multiplications
55e80e15 split MatrixOps.h into 3 files; rename ScalarOps.h; remove useless #includes.
31061557 add unary operator-(), computing the opposite.
e445f508 implement the first _real_ unit-tests, testing the results for correctness instead of just checking compilation.
5f0af72a mark more methods as const. also rename, Numeric.h->NumTraits.h
0f2df4b2 remove support for type std::complex<int>. Simplify NumTraits accordingly.
6c8f1596 add zero() and identity() static methods, update unit-tests
3f979187 restrict identity() to square matrices; small change helping g++ optimize.
a94a8c68 add fromArray() and wrapArray().
f355ef2d Merge WrapArray into FromArray. Less code. The downside is that we're using one more const_cast. But I think that anyway trying to maintain const strictness in Eigen2 is not worth the hassle.
884a718b make shameless use of const_cast to reduce code redundancy. This means Eigen2 gives up enforcing constness. I really tried to enforce it, but it really was much hassle because our expression templates can be lvalues (not only rvalues) and so much code had to be written twice.
d6f26dc8 clarify the situation with EI_INHERIT_ASSIGNMENT_OPERATORS
49c78643 add cast<newtype>() function to casts the scalars to another type.
f14712a1 Fix damage done by automatic search-and-replace
5309ef5b - improve and comment the "BasicStuff" test. - adjust behavior of Matrix(int,int) constructor - s/EI_/EIGEN_/
a587346b Matrix(int,int) constructor no longer takes default arguments. Instead, introduce Matrix() and Matrix(int); however, dynamic dimensions are required to be specified in the constructor (we no longer default to 1)
344623e8 Matrix(int) constructor is only for vectors.
39f1776b rename Object -> MatrixBase
2fdd067d add more unit-tests (covering transpose, conjugate, adjoint, dot product...)
e05f2919 Much more convenient, less over-engineered NumTraits. Done during this KDE-Edu weekend.
5abaaf96 Test application now takes 'seed' and 'repeat' command-line args
346c00f4 Rework the unit-tests to use lower precision, so as to eliminate false positives. Also some cleanup in the fuzzy compares.
04502ccc rename Block to DynBlock and rework API to make place for upcoming fixed-size Block matrix. Also some cleanup.
1a94c28b and here is the fixed-size Block class
b569216d remove useless default argument values
68eba600 big reorganisation of asserts, so that: 0) asserts are only done in the public API, except for a few ones explicitly named eigen_internal_assert. 1) internal asserts are disabled unless EIGEN_INTERNAL_DEBUGGING is defined. This limits the impact of debugging on performance. 2) no 'unused argument' warnings anymore when compiling with -DNDEBUG
c58c892e had forgotten to 'svn add' that file...
9d51572c rework the random numbers API
fc924bc7 specialize for Size==0 in order to catch user bugs and not clutter the compiler output with an infinite recursion. Also add a #define switch for loop unrolling.
effaee9b fix bugs in Block/DynBlock
d50ce24d rework asserts system so as to minimize the impact of debugging code on performance
2b20814c Expand and improve unit-tests
0a7086f1 rename CopyHelper into OperatorEquals, get rid of the auxiliary _copy_helper() method, and make sure copies are always done in column-dominant order
8117c9aa oops, forgot to commit that change
936b0de9 play with inlining to get better performance when the compiler is not asked to optimize
0cbdaf6b revert most of my previous commit. forcing the compiler to inline only increased its memory usage.
fa8009c6 1) remove EIGEN_UNUSED, instead use non-named arguments. 2) use T instead of const T& when that makes more sense Thanks to Christian Mayer a.k.a Mekhzolan for the tips.
7ddc13b9 use a more c++-ish way of preventing the compiler from generating default operator= when it's not wanted. Thanks to Christian Mayer for the tip.
e9a458a7 Split the global math functions out of NumTraits.h
fc7b2b5c expand unit-tests and fix const-qualifaction bugs thus discovered
7c384752 -add Ones, DiagonalMatrix, DiagonalCoeffs -expand and improve unit-tests -various renaming and improvements
9314b8e0 Some cleanup and renaming.
f75a0c51 some more cleanup and reorganisation
53040f53 add constructors and accessors/mutators specific to small vectors. Add corresponding unit-test.
2c656c51 add matrix constructor taking an array. update unit-tests.
a32690a2 Eval is read-only, don't generate any assignment operator
3380429e Improve the "map" API and corresponding Matrix constructors
8bb98a80 split the coeffs accessors/mutators into a separate Coeffs.h file
59be5c31 enforce constness in map(), do only one const_cast, and improve API
cddeeee1 - make RowsAtCompileTime and ColsAtCompileTime public in MatrixBase and private in derived types - initial documentation in MatrixBase
647a817b more documentation and examples, add Doxyfile and Mainpage.dox and also the benchmark program
a52c7409 rename src/ to Eigen/ so that we're able to #include<Eigen/Core.h> in the examples instead of ugly things like #include"../../src/Core.h"
64f5d5d3 move the documentation to doc/, add dummy documentation to srcdir/ compiling to an explanation of how to generate the docs
04e3512e first version of CMakeLists auto-generating examples outputs
ee3410f7 renaming (commit in order to avoid svn breakage)
a316cd8a now cmake takes snippets of code, completes them into compilable sources, builds them, executes them and stores their output in files.
eb6ee51f will svn finally let me remove this dir?
c38156a2 now we also have a examples/ directory for self-contained examples, and this is already used to document DynBlock
e9375836 everything works, make now runs doxygen once and only once, after all the required files have been generated.
3cd2a125 - rework the coefficients API - make vectors use a separate loop unroller, so that copying a row-vector into a col-vector is now possible - add much more documentation - misc improvements
dad245af - eigen2 now fully enforces constness! found a way to achieve that with minimal code duplication. There now are only two (2) const_cast remaining in the whole source code. - eigen2 now fully allows copying a row-vector into a column-vector. added a unit-test for that. - split unit tests, improve docs, various improvements.
05a49547 in ScalarMultiple, make the factor type independent from the matrix scalar type. This is an optimization for complex matrices, allowing to do only a real multiplication when a complex multiplication is not needed, e.g. in normalized().
6b9370e0 more changes in ScalarMultiple, reintroduce FloatingPoint in NumTraits, improve examples
e7bdbe2e matrix storage order can now also be row-dominant (choosable for each matrix separately) map() moves from MatrixBase to Matrix much more documentation/examples/snippets
dfdad129 move Core/ to a src/ subdir, in preparation for following changes
86220784 part 2 of the reorganization. Benefits/changes: 1) Eigen2 co-installable with Eigen1 without conflict, without affecting programs including either. 2) #include<Eigen/Core> without the .h without conflict with the Core/ directory 3) Uniformize coding style of the CMakeLists.
42f6590b cleanup: remove copy contructors when the compiler is able to generate a satisfactory default copy constructor; remove useless static_cast's; some misc cleanup.
23ffede3 more documentation, 12 more code snippets
d1d55e67 - make MatrixBase and all expressions aware of their preferred traversal order. Honor this preference in operator=. - add several methods to the API - rework API for diagonal matrices - add benchmarking code
495eb705 Patch by Gael Guennebaud, making Eigen compatible with the Intel compiler (icc).
aaf889e7 remove all the _Order mechanics, now we are always traversing matrices in column-major order, even if storage is row-major. Benchmark showed that adapting the traversal order to the storage order brought no benefit.
84934ea2 - move: DerivedTraits becomes MatrixBase::Traits - the static constants are private again in the Derived classes - more documentation and code snippets - new isDiagonal() method
5111ace0 move default parameter values from function definition to function declaration. doxygen likes it and this fixes compilation on ICC.
8ba30554 Ready for alpha2 release. - complete documentation - add TODO - update copyright years
b036eca9 Revert to allowing default Matrix constructor even for dynamic size (which is then set to 1). Discussion with jonasp made me remember why we did so in Eigen1. Also add default constructor to Eval
47d35492 revert most of previous commit. It really is better to forbid default constructor for dynamic-size matrices. Now why do I feel like a beheaded chicken running around?
209cf7c9 TODO is now on techbase
45a4b61b switch to enums everywhere
aae0667e reorganization/cleanup
e092cbc7 -add set...() methods and their documentation; remove Generic -use row-major traversal when the number of columns is fixed and the number of rows is dynamic -other minor changes
bcf7b291 rework Identity API: no longer restricted to square matrices
e05a1aba one bugfix and one optimization
89a134ba big architecture change dissociating "actual" dimensions from "maximum possible" dimension. The advantage is that evaluating a dynamic-sized block in a fixed-size matrix no longer causes a dynamic memory allocation. Other new thing: IntAtRunTimeIfDynamic allows storing an integer at zero cost if it is known at compile time.
95dc68dc renaming: Block -> FixedBlock DynBlock -> Block indeed, previous commit solves the main issue with DynBlock so is should now be the more commonly used one.
6ce996f2 big improvement of the block-manipulation API - reduction of sizeof(Block) for vector types - variants of block() and fixedBlock() for vector blocks - convenience methods start() and end() for vectors - convenience method corner() for matrices
57d7b7d9 documentation update for alpha 3
183bf54d final fixes and updates for alpha3
e20aceb6 cleanup in Eval; instead introduce convenient typedefs in Matrix for naming special related matrix types: RowType, ColumnType, BlockType
2ee7969f re-optimize Matrix::resize(), add some comments
9c9a42cc Eval is now implemented like the other expression types, it no longer inherits Matrix. Remove the typedefs I added in Matrix.
c67e7174 alpha 3.1. in this commit: - finally get the Eval stuff right. get back to having Eval as a subclass of Matrix with limited functionality, and then, add a typedef MatrixType to get the actual matrix type. - add swap(), findBiggestCoeff() - bugfix by Ramon in Transpose - new demo: doc/echelon.cpp
6907886a prefix global functions with ei_ as previous solution was rather fragile. also fix compilation with g++ 4.3.
3698d8cf Relicense --> dual-license LGPL3+/GPL2+
aa8e2bcb Patch by Gael Guennebaud: Rework the matrix storage to ensure optimal sizeof in all cases, while keeping the decoupling of matrix sizes versus storage sizes. Also fixing (recently introduced) bugs caused by unwanted reallocations of the buffers.
b3268a6e -merge patch from Gael Guennebaud adding NumTraits for long long and long double. -define scalar-multiple operators only for the current Scalar type; thanks to Gael for expaining how to make the compiler understand when automatic casting is needed. -take ScalarMultiple take only 1 template param, again. We lose some flexibility especially when dealing with complex numbers, but we gain a lot of extensibility to new scalar types.
f12e9c53 Patch by Gael Guennebaud: unify fixed-size and dynamic-size Block expressions, update documentation.
a2f8d4be Patch by Gael Guennebaud: coeff-wise binary operators. This unifies + and - and moreover this patch introduces coeff-wise * and / based on this. Also, corresponding test.
ed20f64d release alpha4, Gael edition
861c6f4c renaming: ref() --> asArg()
01572b9f big change: MatrixBase only takes one template parameter "Derived", the template parameter "Scalar" is removed. This is achieved by introducting a template <typename Derived> struct Scalar to achieve a forward-declaration of the Scalar typedefs.
2ee68a07 generalized ei_traits<>. Finally the importing macro is named EIGEN_BASIC_PUBLIC_INTERFACE because it does not only import the ei_traits, it also makes the base class a friend, etc.
6da4d9d2 fix compilation (forgot to update that file after last big change)
afc64f33 a lot of renaming internal classes: AaBb -> ei_aa_bb IntAtRunTimeIfDynamic -> ei_int_if_dynamic unify UNROLLING_LIMIT (there was no reason to have operator= use a higher limit) etc...
fe569b06 get rid of MatrixRef, simplifications.
fb3438e6 - expand MathFunctions.h to provide more functions, like exp, log... - add cwiseExp(), cwiseLog()... --> for example, doing a gamma-correction on a bitmap image stored as an array of floats is a simple matter of: Eigen::Map<VectorXf> m = VectorXf::map(bitmap,size); m = m.cwisePow(gamma); - apidoc improvements, reorganization of the \name's - remove obsolete examples - remove EIGEN_ALWAYS_INLINE on lazyProduct(), it seems useless.
29184ad2 - introduce sum() returning the sum of the coeffs of a vector - reimplement trace() as just diagonal().sum() - apidoc fixes
af131fe7 update to fix compilation
0ef1efdb * cleanup: in public api docs, don't put \sa links to \internal things. (the global funcs in MathFunctions.h and Fuzzy.h don't count as internal). * Mainpage.dox. Add a few prospective Eigen users; change the recommended -finline-limit from 10000 to 1000. The reason is: it could be harmful to have a too big value here, couldn't it? (e.g. exceedingly large executables, cache misses). Looking at gcc, a value of 900 would exactly mean "determine the inlining of all functions as if they were marked with 'inline' keyword". So a value of 1000 seems a reasonable round number. In the benchmark that motivated this (TestEigenSolvers) a value of 400 is enough on my system.
729618c9 * #define EIGEN_NDEBUG now also disables asserts. Useful to disable eigen's asserts without disabling one's own program's asserts. Notice that Eigen code should now use ei_assert() instead of assert(). * Remove findBiggestCoeff() as it's now almost redundant. * Improve echelon.cpp: inner for loop replaced by xprs. * remove useless "(*this)." here and there. I think they were first introduced by automatic search&replace. * fix compilation in Visitor.h (issue triggered by echelon.cpp) * improve comment on swap().
a994e51c * add Gael copyright lines on 2 more files * macro renaming: EIGEN_NDEBUG becomes EIGEN_NO_DEBUG as this is much better (and similar to Qt) and EIGEN_CUSTOM_ASSERT becomes EIGEN_USE_CUSTOM_ASSERT * protect Core header by a EIGEN_CORE_H
c9b0dcd7 look at that subtle difference in Product.h... the cacheOptimal is only good for large enough matrices. When taking a block in a fixed-size (hence small) matrix, the SizeAtCompileTime is Dynamic hence that's not a good indicator. This example shows that the good indicator is MaxSizeAtCompileTime. Result: +10% speed in echelon.cpp
758b2655 * fix compilation with gcc-4.0 which doesn't like "using" too much * add Eigen:: in some macros to allow using them from outside of namespace Eigen Problems and solutions communicated by Gael.
f279162e * introducte recursive Flags system for the expressions -- currently 3 flags: RowMajor, Lazy and Large -- only RowMajor actually used for now * many minor improvements
cff5e3ce Make use of the LazyBit, introduce .lazy(), remove lazyProduct.
e74fbfb2 - remove Eval/EvalOMP (moving them to a disabled/ subdir in order to preserve SVN history). They are made useless by the new ei_eval_unless_lazy. - introduce a generic Eval member typedef so one can do e.g. T t; U u; Product<T, U>::Eval m; m = t*u;
d1a29d63 -new: recursive costs system, useful to determine automatically when to evaluate arguments and when to meta-unroll. -use it in Product to determine when to eval args. not yet used to determine when to unroll. for now, not used anywhere else but that'll follow. -fix badness of my last commit
b8900d0b More clever evaluation of arguments: now it occurs in earlier, in operator*, before the Product<> type is constructed. This resets template depth on each intermediate evaluation, and gives simpler code. Introducing ei_eval_if_expensive<Derived, n> which evaluates Derived if it's worth it given that each of its coeffs will be accessed n times. Operator* uses this with adequate values of n to evaluate args exactly when needed.
249dc4f4 current state of the mess. One line fails in the tests, and useless copies are made when evaluating nested expressions. Changes: - kill LazyBit, introduce EvalBeforeNestingBit and EvalBeforeAssigningBit - product and random don't evaluate immediately anymore - eval() always evaluates - change the value of Dynamic to some large positive value, in preparation of future simplifications
61e58cf6 fixes as discussed with Gael on IRC. Mainly, in Fuzzy.h, and Dot.h, use ei_xpr_copy to evaluate args when needed. Had to introduce an ugly trick with ei_unref as when the XprCopy type is a reference one can't directly access member typedefs such as Scalar.
30ec34de fix compilation (finish removal of EIGEN_UNROLLED_LOOPS)
371d302e - merge ei_xpr_copy and ei_eval_if_needed_before_nesting - make use of CoeffReadCost to determine when to unroll the loops, for now only in Product.h and in OperatorEquals.h performance remains the same: generally still not as good as before the big changes.
4920f201 finish making use of CoeffReadCost and the new XprCopy everywhere seems appropriate to me.
9d8876ce * rename XprCopy -> Nested * rename OperatorEquals -> Assign * move Util.h and FwDecl.h to a util/ subdir
ca448d25 split those files in util/ some more renaming
613c49b4 * add typedefs for matrices/vectors with LargeBit * add -pedantic to CXXFLAGS * cleanup intricated expressions with && and || which gave warnings because of "missing" parentheses * fix compile error in NumTraits, apparently discovered by -pedantic
7bee90a6 Merge Gael's experimental OpenMP parallelization support into Assign.h.
dcebc46c - cleaner use of OpenMP (no code duplication anymore) using a macro and _Pragma. - use OpenMP also in cacheOptimalProduct and in the vectorized paths as well - kill the vector assignment unroller. implement in operator= the logic for assigning a row-vector in a col-vector. - CMakeLists support for building tests/examples with -fopenmp and/or -msse2 - updates in bench/, especially replace identity() by ones() which prevents underflows from perturbing bench results.
ab404697 * Add fixed-size template versions of corner(), start(), end(). * Use them to write an unrolled path in echelon.cpp, as an experiment before I do this LU module. * For floating-point types, make ei_random() use an amplitude of 1.
ea3ccb1e * Start of the LU module, with matrix inversion already there and fully optimized. * Even if LargeBit is set, only parallelize for large enough objects (controlled by EIGEN_PARALLELIZATION_TRESHOLD).
9789c044 when evaluating an xpr, the result can now be vectorizable even if the xpr itself wasn't vectorizable.
2a86f052 - optimized determinant calculations for small matrices (size <= 4) (only 30 muls for size 4) - rework the matrix inversion: now using cofactor technique for size<=3, so the ugly unrolling is only used for size 4 anymore, and even there I'm looking to get rid of it.
6747b45a for 4x4 matrices implement the special algorithm that Markos proposed, falling back to the general algorithm in the bad case.
43e2bc14 +5% optimization in 4x4 inverse: -only evaluate block expressions for which that is beneficial -don't check for invertibility unless requested
acfd6f3b - add _packetCoeff() to Inverse, allowing vectorization. - let Inverse take template parameter MatrixType instead of ExpressionType, in order to reduce executable code size when taking inverses of xpr's. - introduce ei_corrected_matrix_flags : the flags template parameter to the Matrix class is only a suggestion. This is also useful in ei_eval.
6ae037df give up on OpenMP... for now
890a8de9 Make products always eval into expressions. Improves performance in benchmark. Still not as fasts as explicit eval(), strangely.
8c6007f8 * Patch by Konstantinos Margaritis: AltiVec vectorization. * Fix several warnings, temporarily disable determinant test.
4f6d7abc only include SSE3 headers if compiling with SSE3 support
3562b011 * Give Konstantinos a copyright line * Fix compilation of Inverse.h with vectorisation * Introduce EIGEN_GNUC_AT_LEAST(x,y) macro doing future-proof (e.g. gcc v5.0) check * Only use ProductWIP if vectorisation is enabled * rename EIGEN_ALWAYS_INLINE -> EIGEN_INLINE with fall-back to inline keyword * some cleanup/indentation
dca416ca move arch-specific code to arch/SSE and arch/AltiVec subdirs. rename the noarch PacketMath.h to DummyPacketMath.h
678f18fc put inline keywords everywhere appropriate. So we don't need anymore to pass -finline-limit=1000 to gcc to get good performance. By the way some cleanup.
3eccfd1a -fix certain #includes -fix CMakeLists, public headers weren't getting installed
5da60897 Introduce generic Flagged xpr, remove already Lazy.h and Temporary.h Rename DefaultLostFlagMask --> HerediraryBits
953efdbf - introduce Part and Extract classes, splitting and extending the former Triangular class - full meta-unrolling in Part - move inverseProduct() to MatrixBase - compilation fix in ProductWIP: introduce a meta-selector to only do direct access on types that support it. - phase out the old Product, remove the WIP_DIRTY stuff. - misc renaming and fixes
5aa00f68 part 2 of big change: rename Triangular.h -> Extract.h (svn required to commit that separately)
aebecae5 * find the proper way of nesting the expression in Flagged: finally that's more subtle than just using ei_nested, because when flagging with NestByValueBit we want to store the expression by value already, regardless of whether it already had the NestByValueBit set. * rename temporary() ----> nestByValue() * move the old Product.h to disabled/, replace by what was ProductWIP.h * tweak -O and -g flags for tests and examples * reorder the tests -- basic things go first * simplifications, e.g. in many methoeds return derived() and count on implicit casting to the actual return type. * strip some not-really-useful stuff from the heaviest tests
f54760c8 hehe, the complicated nesting scheme in Flagged in the previous commit was a sign that we were doing something wrong. In fact, having NestByValue as a special case of Flagged was wrong, and the previous commit, while not buggy, was inefficient because then when the resulting NestByValue xpr was nested -- hence copied -- the original xpr which was already nested by value was copied again; hence instead of 1 copy we got 3 copies. The solution was to ressuscitate the old Temporary.h (renamed NestByValue.h) as it was the right approach.
486fdb26 many small fixes and documentation improvements, this should be alpha5.
b501e08d now the unit-tests (hence all of Eigen) don't depend on Qt at all anymore.
dc5fd8df meagre outcome for so much time spent! * fix inverse() bug discovered by Gael's test * fix warnings introduced by the new Diagonal stuff * update Doxyfile to v1.5.6
92b7e2d6 fix a couple of issues making the eigensolver test compile and run without aborting on an assert. Had to fix a stupid bug in Block -- very strange we hadn't hit it before.
0444e360 - add MatrixBase::eigenvalues() convenience method - add MatrixBase::matrixNorm(); in the non-selfadjoint case, we reduce to the selfadjoint case by using the "C*-identity" a.k.a. norm of x = sqrt(norm of x * x.adjoint())
3b052304 since m*m.adjoint() is positive, so are its eigenvalues, so no need for cwiseAbs()
6209bbe2 doc improvements: fix linking in Mainpage.dox, improved Doxyfile.in
ac88feeb work around Doxygen bug triggered by r814874, which caused many classes to disappear from the docs.
75de41a0 big changes in Doxygen configuration; work around bug with doxygen parsing of initialized enum values showing the last word the initializer instead of the actual enum value's name; add some more docs.
8de4d92b - get the doc of the enums in MatrixBase right - get the doc of the flags in Constants right - finally give up with SEPARATE_MEMBER_PAGES: it triggers too big Doxygen bugs, and produces too many small pages. So we have one huge page for MatrixBase at currently 300kb and going up, so the solution especially for users with low bandwidth will be to provide an archive of the html documentation.
869394ee fix some compile errors with gcc 4.3, some warnings, some documentation
c90c7705 * make the _Flags template parameter of Matrix default to the corrected flags. This ensures that unless explicitly messed up otherwise, a Matrix type is equal to its own Eval type. This seriously reduces the number of types instantiated. Measured +13% compile speed, -7% binary size.
53289a8b * even though the _Flags default to the corrected value, still correct them in the ei_traits, so that they're guaranteed even if the user specified his own non-default flags (like before).
c905b31b * Big rework of Assign.h: ** Much better organization ** Fix a few bugs ** Add the ability to unroll only the inner loop ** Add an unrolled path to the Like1D vectorization. Not well tested. ** Add placeholder for sliced vectorization. Unimplemented.
478bfaf2 fix bug in computation of unrolling limit: div instead of mul
9857764a aaargh.
bb1f4e44 * Block: row and column expressions in the inner direction now have the Like1D flag.
574416b8 Override MatrixBase::eval() since matrices don't need to be evaluated, it is enough to just read them.
8a967fb1 * implement slice vectorization. Because it uses unaligned packet access, it is not certain that it will bring a performance improvement: benchmarking needed. * improve logic choosing slice vectorization. * fix typo in SSE packet math, causing crash in unaligned case. * fix bug in Product, causing crash in unaligned case. * add TEST_SSE3 CMake option.
dc9206ce split sum away from redux and vectorize it. (could come back to redux after it has been vectorized, and could serve as a starting point for that) also make the abs2 functor vectorizable (for real types).
32596c5e add benchmark for sum
03d19f3b quick temporary fix for a perf issue we just identified with vectorization.... now the sum benchmark runs 3x faster with vectorization than without.
c9560df4 * add ei_pdiv intrinsic, make quotient functor vectorizable * add vdw benchmark from Tim's real-world use case
3b94436d * vectorize dot product, copying code from sum. * make the conj functor vectorizable: it is just identity in real case, and complex doesn't use the vectorized path anyway. * fix bug in Block: a 3x1 block in a 4x4 matrix (all fixed-size) should not be vectorizable, since in fixed-size we are assuming the size to be a multiple of packet size. (Or would you prefer Vector3d to be flagged "packetaccess" even though no packet access is possible on vectors of that type?) * rename: isOrtho for vectors ---> isOrthogonal isOrtho for matrices ---> isUnitary * add normalize() * reimplement normalized with quotient1 functor
5b0da4b7 make use of ei_pmadd in dot-product: will further improve performance on architectures having a packed-mul-add assembly instruction.
25ba9f37 * add bench/benchVecAdd.cpp by Gael, fix crash (ei_pload on non-aligned) * introduce packet(int), make use of it in linear vectorized paths --> completely fixes the slowdown noticed in benchVecAdd. * generalize coeff(int) to linear-access xprs * clarify the access flag bits * rework api dox in Coeffs.h and util/Constants.h * improve certain expressions's flags, allowing more vectorization * fix bug in Block: start(int) and end(int) returned dyn*dyn size * fix bug in Block: just because the Eval type has packet access doesn't imply the block xpr should have it too.
c5bd1703 change derived classes methods from "private:_method()" to "public:method()" i.e. reimplementing the generic method() from MatrixBase. improves compilation speed by 7%, reduces almost by half the call depth of trivial functions, making gcc errors and application backtraces nicer...
e27b2b95 * rework Map, allow vectorization * rework PacketMath and DummyPacketMath, make these actual template specializations instead of just overriding by non-template inline functions * introduce ei_ploadt and ei_pstoret, make use of them in Map and Matrix * remove Matrix::map() methods, use Map constructors instead.
6de4871c fix a couple of issues in the new Map.h
844f69e4 * update CMakeLists, only build instantiations if TEST_LIB is defined * allow default Matrix constructor in dynamic size, defaulting to (1, 1), this is convenient in mandelbrot example.
55e08f71 fix breakage from my last commit
6917be91 add mandelbrot demo
97a10386 improve greatly mandelbrot demo: - much better coloring - determine max number of iterations and choice between float and double at runtime based on zoom level - do draft renderings with increasing resolution before final rendering
fbdecf09 fix little bug in computation of max_iter
cacf986a - use double precision to store the position / zoom / other stuff - some temporary fix to get a +50% improvement from vectorization until we have vectorisation for comparisons and redux
56d03f18 * multi-threaded rendering * increased number of iterations, with more iterations done before testing divergence. results in x2 speedup from vectorization.
a356ebd4 interleaved rendering balances the load better
95549007 * fix error in divergence test, now it is even faster * add comments in render() in case anyone ever reads that :P
a9d319d4 * do the ActualPacketAccesBit change as discussed on list * add comment in Product.h about CanVectorizeInner * fix typo in test/product.cpp
f5791eeb the big Array/Cwise rework as discussed on the mailing list. The new API can be seen in Eigen/src/Core/Cwise.h.
6f09d3a6 - many updates after Cwise change - fix compilation in product.cpp with std::complex - fix bug in MatrixBase::operator!=
8f21a5e8 add benchmark for slice vectorization... expected it to be little or zero benefit... turns out to be 20x speedup. Something is wrong.
25904802 raah, results were corrupted by overflow. Now slice vectorization is about a +25% speedup which is still nice as i expected zero or even negative benefit.
2b53fd4d some performance fixes in Assign.h reported by Gael. Some doc update in Cwise.
1bbaea98 little cmake fix
e979e648 another occurence of that little cmake fix
51e6ee39 SVN_SILENT trivial fix
62ec1dd6 * big rework of Inverse.h: - remove all invertibility checking, will be redundant with LU - general case: adapt to matrix storage order for better perf - size 4 case: handle corner cases without falling back to gen case. - rationalize with selectors instead of compile time if - add C-style computeInverse() * update inverse test. * in snippets, default cout precision to 3 decimal places * add some cmake module from kdelibs to support btl with cmake 2.4
8b4945a5 add some static asserts, use them, fix gcc 4.3 warning in Product.h.
f997a3e9 update the inverse test a little make use of static asserts in Map fix 2 warnings in CacheFriendlyProduct: unused var 'Vectorized'
49ae3fca fix compile errors with gcc 4.3: unresolved func call to ei_cache_friendly_product, and undeclared memcpy
c2f8ecf4 * LU decomposition, supporting all rectangular matrices, with full pivoting for better numerical stability. For now the only application is determinant. * New determinant unit-test. * Disable most of Swap.h for now as it makes LU fail (mysterious). Anyway Swap needs a big overhaul as proposed on IRC. * Remnants of old class Inverse removed. * Some warnings fixed.
79a0feee big performance improvement in inverse and LU
e741b7be further big perf improvement in Inverse
09ef7db9 Add partial pivoting runtime option to LU.
c94be35b introduce copyCoeff and copyPacket methods in MatrixBase, used by Assign, in preparation for new Swap impl reusing Assign code. remove last remnant of old Inverse class in Transform.
88bb2087 New implementation of Swap as discussed, reusing Assign. Makes LU run 10% faster overall.
58ba9ca7 LU: remove partial-pivoting path (moderately useful since it's does not allow to easily get the rank), fix a bug (which could have been triggered by matrices having coefficients of very different magnitudes). Part: add an assert to prevent hard to find bugs Swap: update comments
5f350448 - add kernel computation using the triangular solver - take advantage of the fact that our LU dec sorts the eigenvalues of U in decreasing order - add meta selector in determinant
9bbe3969 forgot to remove that old code
a41f2b42 * fix bug in SwapWrapper : store the wrapped expression by reference * optimize setIdentity: when the matrix is large enough it is better to setZero() and overwrite the diagonal * start of LU solver, disabled for now
681e9446 *implement LU solver (solves any rectangular system) *in test/CMakeLists : modify EI_ADD_TEST so that 2nd argument is additional compiler flags. used to add -O2 to test_product_large so it doesn't take forever.
becbeda5 * reimplement the general case of inverse() on top of LU. Advantages: - removes much code - 2.5x faster (even though LU uses complete pivoting contrary to what inverse used to do!) - there _were_ numeric stability problems with the partial pivoting approach of inverse(), with 200x200 matrices inversion failed almost half of the times (overflow). Now these problems are solved thanks to complete pivoting.
d6e88f81 * add LU unit-test. Seems like we have very good numerical stability! * some cleanup, and grant me a copyright line on the determinant test.
17ec407c * add Regression module, from eigen1, improved, with doc and unit-test. * fix .normalized() so that Random().normalized() works; since the return type became complicated to write down i just let it return an actual vector, perhaps not optimal. * add Sparse/CMakeLists.txt. I suppose that it was intentional that it didn't have CMakeLists, but in <=2.0 releases I'll just manually remove Sparse.
f04c1cb7 Complete LU documentation
13ad8873 last small fixes, this is alpha6, eigen2 is now ready for eigen1 apps to port to.
3bc27469 Copy eigen2 into kdesupport, alongside eigen1 for now, co-installable, will remove eigen1 once no code uses it anymore (soon).
d9d69de3 updated tutorial
239b47e0 *make Eigen2 install to prefix/include/eigen2/Eigen *Add FindEigen2.cmake module in kdelibs
95a1283b fix compilation of unit-tests when cmake is run on kdesupport/ parent directory
baf0cffe *add operator()(int) for vectors, synonymous to operator[](int). I don't see any reason not to allow it, it doesn't add much code, and it makes porting from eigen1 easier. *expand tests/basicstuff to first test coefficient access methods
e778ae25 only use alloca on linux. Use malloc on other platforms. Needed for mingw compatibility.
9466e5f9 * doc improvements in Cwise and PartialRedux: - 33 new snippets - unfuck doxygen output in Cwise (issues with function macros) - more see-also links from outside, making Cwise more discoverable * rename matrixNorm() to operatorNorm(). There are many matrix norms (the L2 is another one) but only one is called the operator norm. Risk of confusion with keyword operator is not too scary after all.
54137f1c * fix bug found by Boudewijn Rempt: no CMakeLists in arch/ subdir * fix warning in SolveTriangular
c705c38a * it's \returns not \Returns * add some explanations in the typedefs page * expand a bit the new QuickStartGuide. Some placeholders (not a pb since it's not even yet linked to from other pages). The point I want to make is that it's super important to have fully compilable short programs (even with compile instructions for the first one) not just small snippets, at least at the beginning. Let's start with examples of compilable programs.
ff8e98c9 Fix bugs in Sum.h, add unit-test
591d497b add resize() methods to Map, doing nothing but assertions. This is useful in Krita where I call lu().solve() with a Map object as result. As solve() resizes the result, this was needed.
082e309d patch by Patrick Spendrin: fix MSVC compatibility
0998c51d - remove the ASM macro as in fact Gael had been removing all the remaining asm("...") from the code while fixing MSVC compat (so your changes crossed one another). - move the pragma warning to CoreDeclarations, it's the right place to do early platform checks.
a814ebe1 fix a number of compiler errors and warnings with gcc 4.3. There was a missing #include<algorithm> so I'm not sure how it compiled at all for you :)
312013a0 compile fix for code like Vector3d::Random().x()
251ecc0a Rename someOrthogonal to unitOrthogonal. Fix a bug in it, with dyn-size vectors of size <=3. Update doc and test to reflect that it always returns a unit vector.
b815b23e forgot to install Regression public header
6b591d06 add data() methods to Transform
6a36b5a6 add AngleAxis::operator*(const Vector3&)
d3529e9c optimization: spare the 3x3 matrix product in fromPositionOrientationScale
bf31d81a argh, gael you're more clever than i remembered. diagonal product is optimized. so, i almost revert, just reordering to reduce # of load/store.
124ec71c allow constructing Transform from small-matrix (like fromPosOrientScale but with trivial Pos and Scale)
aa54d6be arf, of course a meta-selector was required here
5ac883b1 Fix a bug discovered in Avogadro: the AngleAxis*Matrix and the newer AngleAxis*Vector products were wrong because they returned the product _expression_ toRotationMatrix()*other; and toRotationMatrix() died before that expression would be later evaluated. Here it would not have been practical to NestByValue as this is a whole matrix. So, let them simply evaluate and return the result by value.
da674fa0 Shut up two bogus gcc 4.3 warnings
12c6b45a replace vector by __vector to prevent conflict with std::vector
a0cfe6eb remove double ;
252e0c45 * missing cmake make_directory command * show svn revision number if available * fix warnings about unused argc/argv
f7de12de Missing inline keywords in AltiVec/PacketMath were making Avogadro fail to compile (duplicate symbols).
5c34d8e2 The discussed changes to Hyperplane, the ParametrizedLine class, and the API update in Regression...
ff60c9cc fix cmakelists: wrong assumption on CMAKE_SOURCE_DIR. One can now use EIGEN_SOURCE_DIR for that use, guaranteed to point to eigen2/ directory.
c9318679 also use EIGEN_SOURCE_DIR here. according to grep this was the last place to change.
d74916e4 same thing with EIGEN_BINARY_DIR. Now the doc generation works from kdesupport.
46fe7a3d if EIGEN_NICE_RANDOM is defined, the random functions will return numbers with few bits left of the comma and for floating-point types will never return zero. This replaces the custom functions in test/main.h, so one does not anymore need to think about that when writing tests.
6add33e2 fix warning
247f2b0f * block() for vectors ---> segment() * documentation improvements, especially in quickstart guide
af991a6b small dox fixes
618de17b block(int,int)->segment
4e502dd6 very little fixes: cast literals to Scalar, rephrase some doc, add some const (maybe completely useless but at least doesn't hurt)
3d90c139 norm2() renamed to squaredNorm(), kept as deprecated for now.
a0ec0fca Add Matrix::Map() and Matrix::AlignedMap() static methods
e8009993 add lpNorm<p>() method to MatrixBase, implemented in Array module, with specializations for cases p=1,2,Eigen::Infinity.
12f84acd Matrix documentation rework
033ac82c refinements in Matrix doc
36143214 * add Gael a (c) line in IO.h * let user change default format by defining EIGEN_DEFAULT_IO_FORMAT * improve docs a little
00f89a8f Update e-mail address
aba378eb add internal documentation
c1e2156d * Much better, consistent error msgs when mixing different scalar types: - in matrix-matrix product, static assert on the two scalar types to be the same. - Similarly in CwiseBinaryOp. POTENTIALLY CONTROVERSIAL: we don't allow anymore binary ops to take two different scalar types. The functors that we defined take two args of the same type anyway; also we still allow the return type to be different. Again the reason is that different scalar types are incompatible with vectorization. Better have the user realize explicitly what mixing different numeric types costs him in terms of performance. See comment in CwiseBinaryOp constructor. - This allowed to fix a little mistake in test/regression.cpp, mixing float and double - Remove redundant semicolon (;) after static asserts
2ff7961c split off the lazy evaluation part from the quickstartguide; actually by mistake i had already committed part of that change so i commit the rest even if it's not much, so building docs from trunk works again.
6d1439a5 add big "what happens inside eigen" tutorial for people interested in Eigen internals
bb33ec4e * fix compile error when C++0x is enabled: static_assert() needs ; thanks to devurandom for reporting * remove redundant ; in ei_internal_assert * minor fixes in InsideEigenExample.dox
2b20da62 * improvements in the tutorial: triangular matrices, linear algebra * minor fixes in Part and StaticAssert * EulerAngles: remove the FIXME as I think the current version is fine
93c1f629 Use an aligned IOFormat in the docs
7e8ee5b5 hide internal stuff from doxygen by using #ifndef EIGEN_PARSED_BY_DOXYGEN.
08e6b7ad Make deluxe assertion with deluxe error message with link to deluxe web page for this very nasty bug (unaligned member in dynamically allocated struct) that our friends at Krita just encountered:
6700f07f actually this message is probably more effective at making people read the web page...
09fd69d7 * add Transform explicit constructors taking translation/scaling/rotation * add Transform::operator= taking rotation. An old remnant was left commented out. Why was it disabled? * slight optimization in operator= taking translation * slight optimization (perhaps) in the new memory assertion
069ecbb4 * complete the change norm2->squaredNorm in PartialRedux * somehow the NICE_RANDOM stuff wasn't being used anymore and tests were sometimes failing again. Fixed by #including Eigen/Array instead of cherry-picking just Random.h. * little fixes in the unaligned assert page
cb409914 * call it beta2 * improvements in Matrix documentation * document copyCoeff and copyPacket even if it's hidden from doxygen
936eaf60 compilation fix thanks to Dennis Schridde
703951d5 Fix memory alignment (hence vectorization) on MSVC thanks to help from Armin Berres.
11c8a6bf Fix detection of SSE2 with MSVC.
dd139b92 work around the braindead msvc preprocessor
9b1a3d6e small optimization (for MSVC) and simplification of ei_alligned_malloc
763f0a24 use ei_aligned_malloc and ei_aligned_free also in WithAlignedOperatorNew, so this too should now work with MSVC.
55b603e4 * fix a bug I introduced in WithAlignedOperatorNew * add an important comment
1ad751b9 only enable the "unaligned array" assert if vectorization is enabled. if vectorization is disabled, WithAlignedOperatorNew is empty!
0a220721 Finally work around enough of MSVC preprocessor dumbness so that it actually detects SSE2
50105c3e Hopefully fix compilation of SSE Packetmath with MSVC.
38b83b41 * throw bad_alloc if exceptions are enabled, after patch by Kenneth Riddile * disable vectorization on MSVC 2005, as it doesn't have all the required intrinsics. require 2008.
2110cca4 actually honor EIGEN_STACK_ALLOCATION. Can set it to 0 to disable stack alloc which guarantees that bad alloc throws exceptions if they are enabled.
89f46867 * replace postfix ++ by prefix ++ wherever that makes sense in Eigen/ * fix some "unused variable" warnings in the tests; there remains a libstdc++ "deprecated" warning which I haven't looked much into
c22d10f9 LU class: * add image() and computeImage() methods, with unit test * fix a mistake in the definition of KernelResultType * fix and improve comments
5f582aa4 fix bad typos, thanks to Kenneth Riddile
15d72d3f somehow we had forgotten this very important static assertion...
b27a3644 Macros: add MSVC paths, add an important comment on EIGEN_ALIGN_128
fabaa691 * fix in IO.h, a useless copy was made because of assignment from Derived to MatrixBase. * the optimization of eval() for Matrix now consists in a partial specialization of ei_eval, which returns a reference type for Matrix. No overriding of eval() in Matrix anymore. Consequence: careful, ei_eval is no longer guaranteed to give a plain matrix type! For that, use ei_plain_matrix_type, or the PlainMatrixType typedef. * so lots of changes to adapt to that everywhere. Hope this doesn't break (too much) MSVC compilation. * add code examples for the new image() stuff. * lower a bit the precision for floats in the unit tests as we were already doing some workarounds in inverse.cpp and we got some failed tests.
8106d354 Patch by Kenneth Riddile: disable MSVC warnings, reenable them outside of Eigen, and add a MSVC-friendly path in StaticAssert.
f34a4fa3 * forgot to svn add 2 files * idea of Keir Mierle: make the static assert error msgs UPPERCASE
84bb868f * more MSVC warning fixes from Kenneth Riddile * actually GCC 4.3.0 has a bug, "deprecated" placed at the end of a function prototype doesn't have any effect, moving them to the start of the function prototype makes it actually work! * finish porting the cholesky unit-test to the new LLT/LDLT, after the above fix revealed a deprecated warning
e4980616 SelfAdjointEigenSolver: add operatorSqrt() and operatorInverseSqrt()
22875683 * extractRotation ---> rotation * expand the geometry/Transform tests, after Mek's reports * fix my own stupidity in eigensolver test
a3fad2e3 Transform*Transform should return Transform unit test compiles again
df4bd5e4 * fix a test giving some false positives * add coverage for various operator*=
21ab65e4 fix nasty little bug in ei_add_test
9e00d945 * the Upper->UpperTriangular change * finally get ei_add_test right
f5a05e7e unfuck v.cwise()*w where v is real and w is complex
4336cf38 * add unit-tests to check allowed and forbiddent mixing of different scalar types * fix issues in Product revealed by this test *…
2 tasks
hjmjohnson
pushed a commit
to hjmjohnson/ITK
that referenced
this pull request
Apr 19, 2026
ENH: Update CI for ITK v5.2.0
hjmjohnson
pushed a commit
to hjmjohnson/ITK
that referenced
this pull request
Apr 19, 2026
Also enable pair-wise test for all ground truth tests. Summary results (below) suggest presence of bias in sub-pixel peak estimation: PeakInterpolation 0 has average translation bias: -0.040 -0.028 PeakInterpolation 1 has average translation bias: -0.035 -0.025 PeakInterpolation 2 has average translation bias: -0.038 -0.027 Average translation error for padding method 2: 0.194 Test InsightSoftwareConsortium#52: itkMontageGroundTruthRun10-129 ..............***Failed 2.33 sec PeakInterpolation 0 has average translation bias: -0.011 -0.017 PeakInterpolation 1 has average translation bias: -0.009 -0.014 PeakInterpolation 2 has average translation bias: -0.010 -0.016 Average translation error for padding method 2: 0.162 Test InsightSoftwareConsortium#54: itkMontageGroundTruthRunrun2 ................ Passed 1.58 sec PeakInterpolation 0 has average translation bias: 0.021 -0.010 PeakInterpolation 1 has average translation bias: 0.019 -0.009 PeakInterpolation 2 has average translation bias: 0.020 -0.010 Average translation error for padding method 2: 0.172 Test InsightSoftwareConsortium#56: itkMontageGroundTruthRunMediumCarbonSteel ...***Failed 3.49 sec PeakInterpolation 0 has average translation bias: 0.104 0.303 -0.040 PeakInterpolation 1 has average translation bias: 0.104 0.302 -0.041 PeakInterpolation 2 has average translation bias: 0.104 0.303 -0.041 Average translation error for padding method 2: 0.306 Test InsightSoftwareConsortium#70: itkMontageGroundTruthRunDzZ_T1 ..............***Failed 19.56 sec PeakInterpolation 0 has average translation bias: 1.065 1.733 PeakInterpolation 1 has average translation bias: 1.066 1.734 PeakInterpolation 2 has average translation bias: 1.065 1.733 Average translation error for padding method 2: 1.811 Test InsightSoftwareConsortium#79: itkMontageGroundTruthRunTiles ...............***Failed 10.31 sec
hjmjohnson
pushed a commit
to hjmjohnson/ITK
that referenced
this pull request
Apr 19, 2026
…onsortium/copyMoveDisable COMP: ITK_DISALLOW_COPY_AND_ASSIGN -> ITK_DISALLOW_COPY_AND_MOVE
hjmjohnson
pushed a commit
that referenced
this pull request
Apr 25, 2026
Also enable pair-wise test for all ground truth tests. Summary results (below) suggest presence of bias in sub-pixel peak estimation: PeakInterpolation 0 has average translation bias: -0.040 -0.028 PeakInterpolation 1 has average translation bias: -0.035 -0.025 PeakInterpolation 2 has average translation bias: -0.038 -0.027 Average translation error for padding method 2: 0.194 Test #52: itkMontageGroundTruthRun10-129 ..............***Failed 2.33 sec PeakInterpolation 0 has average translation bias: -0.011 -0.017 PeakInterpolation 1 has average translation bias: -0.009 -0.014 PeakInterpolation 2 has average translation bias: -0.010 -0.016 Average translation error for padding method 2: 0.162 Test #54: itkMontageGroundTruthRunrun2 ................ Passed 1.58 sec PeakInterpolation 0 has average translation bias: 0.021 -0.010 PeakInterpolation 1 has average translation bias: 0.019 -0.009 PeakInterpolation 2 has average translation bias: 0.020 -0.010 Average translation error for padding method 2: 0.172 Test #56: itkMontageGroundTruthRunMediumCarbonSteel ...***Failed 3.49 sec PeakInterpolation 0 has average translation bias: 0.104 0.303 -0.040 PeakInterpolation 1 has average translation bias: 0.104 0.302 -0.041 PeakInterpolation 2 has average translation bias: 0.104 0.303 -0.041 Average translation error for padding method 2: 0.306 Test #70: itkMontageGroundTruthRunDzZ_T1 ..............***Failed 19.56 sec PeakInterpolation 0 has average translation bias: 1.065 1.733 PeakInterpolation 1 has average translation bias: 1.066 1.734 PeakInterpolation 2 has average translation bias: 1.065 1.733 Average translation error for padding method 2: 1.811 Test #79: itkMontageGroundTruthRunTiles ...............***Failed 10.31 sec
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.