249dc4f482current 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
Benoit Jacob
2008-04-03 16:54:19 +0000
b8900d0b80More 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.
Benoit Jacob
2008-04-03 14:17:56 +0000
4448f2620dfix a compilation issue with gcc-3.3 and ei_result_of
Gael Guennebaud
2008-04-03 12:39:39 +0000
d1a29d6319-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
Benoit Jacob
2008-04-03 11:10:17 +0000
e74fbfb2bc- 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;
Benoit Jacob
2008-03-31 17:24:09 +0000
cff5e3ce9cMake use of the LazyBit, introduce .lazy(), remove lazyProduct.
Benoit Jacob
2008-03-31 16:20:06 +0000
f279162ec4* introducte recursive Flags system for the expressions -- currently 3 flags: RowMajor, Lazy and Large -- only RowMajor actually used for now * many minor improvements
Benoit Jacob
2008-03-30 18:43:22 +0000
758b26551a* 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.
Benoit Jacob
2008-03-29 16:48:04 +0000
c9b0dcd733look 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
Benoit Jacob
2008-03-26 09:29:29 +0000
a994e51c96* 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
Benoit Jacob
2008-03-26 09:13:11 +0000
729618c945* #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().
Benoit Jacob
2008-03-26 08:48:04 +0000
4342f024d9* support for matrix-scalar quotient with integer scalar types. * added cache efficient matrix-matrix product. - provides a huge speed-up for large matrices. - currently it is enabled when an explicit unrolling is not possible.
Gael Guennebaud
2008-03-21 20:26:14 +0000
0ef1efdbdb* 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.
Benoit Jacob
2008-03-17 07:35:22 +0000
af131fe770update to fix compilation
Benoit Jacob
2008-03-16 21:04:33 +0000
612350e3f8* Added a generic *redux* mini framework allowing custom redux operations as well as partial redux (vertical or horizontal redux). Includes shortcuts for: sum, minCoeff and maxCoeff. There is no shortcut for the partial redux.
Gael Guennebaud
2008-03-16 14:36:25 +0000
29184ad27d- introduce sum() returning the sum of the coeffs of a vector - reimplement trace() as just diagonal().sum() - apidoc fixes
Benoit Jacob
2008-03-15 11:05:38 +0000
fb3438e609- 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.
Benoit Jacob
2008-03-14 10:38:37 +0000
fe569b060cget rid of MatrixRef, simplifications.
Benoit Jacob
2008-03-13 20:36:01 +0000
908a0fbab5small fix of VERIFY_ASSERT in debug mode
Gael Guennebaud
2008-03-13 09:51:18 +0000
afc64f3332a 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...
Benoit Jacob
2008-03-13 09:33:26 +0000
16257d44ddfixed an issue with VERIFY_ASSERT
Gael Guennebaud
2008-03-12 18:44:42 +0000
35bce20954Removed Column and Row in favor of Block
Gael Guennebaud
2008-03-12 18:10:52 +0000
6da4d9d256fix compilation (forgot to update that file after last big change)
Benoit Jacob
2008-03-12 17:25:14 +0000
2ee68a074egeneralized 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.
Benoit Jacob
2008-03-12 17:17:36 +0000
01572b9f54big 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.
Benoit Jacob
2008-03-10 17:23:11 +0000
9d9d81ad71* basic support for multicore CPU via a .evalOMP() which internaly uses OpenMP if enabled at compile time. * added a bench/ folder with a couple benchmarks and benchmark tools.
Gael Guennebaud
2008-03-09 16:13:47 +0000
f64311e07dExtended the comma initializer to support xpr on the right side: Matrix3i mat; Vector2i vec(33,66); mat << vec.transpose(), 99, vec, Matrix2i::random();
Gael Guennebaud
2008-03-08 19:46:06 +0000
721626dfc5* Added support for a comma initializer: mat.block(i,j,2,2) << 1, 2, 3, 4; If the number of coefficients does not match the matrix size, then an assertion is raised. No support for xpr on the right side for the moment.
Gael Guennebaud
2008-03-08 19:02:24 +0000
138aad0ed0* coefficient wise operators are more generic, with controllable result type. - compatible with current STL's functors as well as with the extention proposal (TR1) * thanks to the above, Cast and ScalarMultiple have been removed * benchmark_suite is more flexible (compiler and matrix size)
Gael Guennebaud
2008-03-06 11:36:27 +0000
8e0d548039* Fix a compilation issue with large fixed-size matrices: the unrollers were always instanciated. * the unrolling limits are configurable at compile time.
Gael Guennebaud
2008-03-05 13:18:19 +0000
861c6f4c9brenaming: ref() --> asArg()
Benoit Jacob
2008-03-04 17:08:23 +0000
f65cca5d1d* Eigen compiles with any GCC versions from, at least, 3.3 without the previous ugly hack :) * Renamed the scalar functors with the "Scalar" prefix (instead of "Cwise")
Gael Guennebaud
2008-03-04 12:34:58 +0000
46885d33bfRemoved trailling spaces.
Gael Guennebaud
2008-03-03 11:02:52 +0000
255689231d* Added generic unary operators (replace Opposite and Conjugate) * functor templates are not template template parameter anymore (this allows to make templated functors !) * Main page: extented compiler discussion * A small hack to support gcc 3.4 and 4.0 (see the main page) * Fix a cast type issue in Cast * Various doxygen updates (mainly Cwise stuff and added doxygen groups in MatrixBase to split the huge memeber list, still not perfect though) * Updated Gael's email address
Gael Guennebaud
2008-03-03 10:52:44 +0000
ed20f64d68release alpha4, Gael edition
Benoit Jacob
2008-02-29 14:50:11 +0000
a2f8d4be6aPatch by Gael Guennebaud: coeff-wise binary operators. This unifies + and - and moreover this patch introduces coeff-wise * and / based on this. Also, corresponding test.
Benoit Jacob
2008-02-29 14:35:14 +0000
f12e9c53acPatch by Gael Guennebaud: unify fixed-size and dynamic-size Block expressions, update documentation.
Benoit Jacob
2008-02-29 13:56:40 +0000
b3268a6e2f-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.
Benoit Jacob
2008-02-29 13:20:44 +0000
aa8e2bcbdePatch 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.
Benoit Jacob
2008-02-29 10:55:53 +0000
3698d8cf33Relicense --> dual-license LGPL3+/GPL2+
Benoit Jacob
2008-02-28 15:44:45 +0000
6907886a15prefix global functions with ei_ as previous solution was rather fragile. also fix compilation with g++ 4.3.
Benoit Jacob
2008-02-28 12:38:12 +0000
c67e717404alpha 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
Benoit Jacob
2008-01-15 13:55:47 +0000
9c9a42cc49Eval is now implemented like the other expression types, it no longer inherits Matrix. Remove the typedefs I added in Matrix.
Benoit Jacob
2008-01-14 22:36:37 +0000
2ee7969f0are-optimize Matrix::resize(), add some comments
Benoit Jacob
2008-01-14 13:14:49 +0000
e20aceb6ebcleanup in Eval; instead introduce convenient typedefs in Matrix for naming special related matrix types: RowType, ColumnType, BlockType
Benoit Jacob
2008-01-14 11:25:09 +0000
183bf54d27final fixes and updates for alpha3
Benoit Jacob
2008-01-13 23:38:48 +0000
57d7b7d97bdocumentation update for alpha 3
Benoit Jacob
2008-01-13 23:17:51 +0000
6ce996f219big 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
Benoit Jacob
2008-01-13 22:48:57 +0000
95dc68dc86renaming: Block -> FixedBlock DynBlock -> Block indeed, previous commit solves the main issue with DynBlock so is should now be the more commonly used one.
Benoit Jacob
2008-01-13 20:19:14 +0000
89a134ba0bbig 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.
Benoit Jacob
2008-01-13 19:55:23 +0000
e05a1aba1done bugfix and one optimization
Benoit Jacob
2008-01-11 16:06:31 +0000
bcf7b29185rework Identity API: no longer restricted to square matrices
Benoit Jacob
2008-01-11 15:56:21 +0000
e092cbc75c-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
Benoit Jacob
2008-01-11 15:08:04 +0000
aae0667e1ereorganization/cleanup
Benoit Jacob
2008-01-11 07:16:18 +0000
45a4b61b5fswitch to enums everywhere
Benoit Jacob
2008-01-10 20:45:35 +0000
209cf7c91fTODO is now on techbase
Benoit Jacob
2008-01-09 13:04:04 +0000
47d354924brevert 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?
Benoit Jacob
2008-01-08 10:39:36 +0000
b036eca902Revert 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
Benoit Jacob
2008-01-07 21:19:36 +0000
8ba3055447Ready for alpha2 release. - complete documentation - add TODO - update copyright years
Benoit Jacob
2008-01-07 09:34:21 +0000
5111ace0d6move default parameter values from function definition to function declaration. doxygen likes it and this fixes compilation on ICC.
Benoit Jacob
2008-01-06 19:34:28 +0000
84934ea217- move: DerivedTraits becomes MatrixBase::Traits - the static constants are private again in the Derived classes - more documentation and code snippets - new isDiagonal() method
Benoit Jacob
2008-01-06 16:35:21 +0000
aaf889e72bremove 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.
Benoit Jacob
2008-01-06 13:57:29 +0000
495eb7053aPatch by Gael Guennebaud, making Eigen compatible with the Intel compiler (icc).
Benoit Jacob
2008-01-06 13:17:07 +0000
d1d55e67e9- 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
Benoit Jacob
2008-01-05 10:57:14 +0000
23ffede3d0more documentation, 12 more code snippets
Benoit Jacob
2008-01-03 19:36:32 +0000
42f6590bb2cleanup: remove copy contructors when the compiler is able to generate a satisfactory default copy constructor; remove useless static_cast's; some misc cleanup.
Benoit Jacob
2007-12-31 13:29:51 +0000
86220784b6part 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.
Benoit Jacob
2007-12-28 16:20:00 +0000
dfdad129a3move Core/ to a src/ subdir, in preparation for following changes
Benoit Jacob
2007-12-28 16:00:55 +0000
e7bdbe2e6amatrix storage order can now also be row-dominant (choosable for each matrix separately) map() moves from MatrixBase to Matrix much more documentation/examples/snippets
Benoit Jacob
2007-12-27 21:43:10 +0000
6b9370e0f0more changes in ScalarMultiple, reintroduce FloatingPoint in NumTraits, improve examples
Benoit Jacob
2007-12-26 09:25:00 +0000
05a49547e1in 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().
Benoit Jacob
2007-12-26 08:30:21 +0000
dad245af56- 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.
Benoit Jacob
2007-12-25 17:20:58 +0000
3cd2a125b2- 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
Benoit Jacob
2007-12-24 11:14:25 +0000
e937583655everything works, make now runs doxygen once and only once, after all the required files have been generated.
Benoit Jacob
2007-12-21 11:29:04 +0000
c38156a217now we also have a examples/ directory for self-contained examples, and this is already used to document DynBlock
Benoit Jacob
2007-12-21 10:35:00 +0000
eb6ee51fdfwill svn finally let me remove this dir?
Benoit Jacob
2007-12-21 09:31:17 +0000
a316cd8a76now cmake takes snippets of code, completes them into compilable sources, builds them, executes them and stores their output in files.
Benoit Jacob
2007-12-21 09:30:32 +0000
ee3410f79arenaming (commit in order to avoid svn breakage)
Benoit Jacob
2007-12-21 09:05:41 +0000
04e3512eb6first version of CMakeLists auto-generating examples outputs
Benoit Jacob
2007-12-21 09:02:24 +0000
64f5d5d318move the documentation to doc/, add dummy documentation to srcdir/ compiling to an explanation of how to generate the docs
Benoit Jacob
2007-12-21 07:30:15 +0000
a52c74095frename 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"
Benoit Jacob
2007-12-20 21:25:13 +0000
647a817b2emore documentation and examples, add Doxyfile and Mainpage.dox and also the benchmark program
Benoit Jacob
2007-12-20 21:11:05 +0000
cddeeee17d- make RowsAtCompileTime and ColsAtCompileTime public in MatrixBase and private in derived types - initial documentation in MatrixBase
Benoit Jacob
2007-12-19 09:30:53 +0000
59be5c3124enforce constness in map(), do only one const_cast, and improve API
Benoit Jacob
2007-12-19 08:14:00 +0000
8bb98a80b4split the coeffs accessors/mutators into a separate Coeffs.h file
Benoit Jacob
2007-12-18 16:02:14 +0000
3380429e3aImprove the "map" API and corresponding Matrix constructors
Benoit Jacob
2007-12-18 15:29:28 +0000
a32690a222Eval is read-only, don't generate any assignment operator
Benoit Jacob
2007-12-18 12:12:37 +0000
2c656c51e6add matrix constructor taking an array. update unit-tests.
Benoit Jacob
2007-12-18 08:56:18 +0000
53040f53d9add constructors and accessors/mutators specific to small vectors. Add corresponding unit-test.
Benoit Jacob
2007-12-17 20:51:40 +0000
f75a0c5179some more cleanup and reorganisation
Benoit Jacob
2007-12-17 07:25:11 +0000
9314b8e024Some cleanup and renaming.
Benoit Jacob
2007-12-16 12:41:37 +0000
7c38475291-add Ones, DiagonalMatrix, DiagonalCoeffs -expand and improve unit-tests -various renaming and improvements
Benoit Jacob
2007-12-15 18:16:30 +0000
fc7b2b5c20expand unit-tests and fix const-qualifaction bugs thus discovered
Benoit Jacob
2007-12-12 17:48:20 +0000
e9a458a7a5Split the global math functions out of NumTraits.h
Benoit Jacob
2007-12-12 16:57:12 +0000
7ddc13b9fause 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.
Benoit Jacob
2007-12-12 16:52:17 +0000
fa8009c6b71) 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.
Benoit Jacob
2007-12-11 15:25:43 +0000
0cbdaf6bb8revert most of my previous commit. forcing the compiler to inline only increased its memory usage.
Benoit Jacob
2007-12-11 14:57:42 +0000
936b0de9ccplay with inlining to get better performance when the compiler is not asked to optimize
Benoit Jacob
2007-12-11 13:14:14 +0000
8117c9aa83oops, forgot to commit that change
Benoit Jacob
2007-12-11 10:48:35 +0000
0a7086f1ecrename CopyHelper into OperatorEquals, get rid of the auxiliary _copy_helper() method, and make sure copies are always done in column-dominant order
Benoit Jacob
2007-12-11 10:19:49 +0000