Fix up all doxygen warnings.

This commit is contained in:
Antonio Sanchez 2025-02-25 21:05:40 -08:00
parent 02f420012a
commit 339d7188ed
29 changed files with 628 additions and 2138 deletions

View File

@ -272,7 +272,7 @@ DenseBase<Derived>::LinSpaced(Index size, const Scalar& low, const Scalar& high)
} }
/** /**
* \copydoc DenseBase::LinSpaced(Index, const Scalar&, const Scalar&) * \copydoc DenseBase::LinSpaced(Index, const DenseBase::Scalar&, const DenseBase::Scalar&)
* Special version for fixed size types which does not require the size parameter. * Special version for fixed size types which does not require the size parameter.
*/ */
template<typename Derived> template<typename Derived>

View File

@ -54,34 +54,34 @@ struct default_digits10_impl<T,false,true> // Integer
* *
* The provided data consists of: * The provided data consists of:
* \li A typedef \c Real, giving the "real part" type of \a T. If \a T is already real, * \li A typedef \c Real, giving the "real part" type of \a T. If \a T is already real,
* then \c Real is just a typedef to \a T. If \a T is \c std::complex<U> then \c Real * then \c Real is just a typedef to \a T. If \a T is `std::complex<U>` then \c Real
* is a typedef to \a U. * is a typedef to \a U.
* \li A typedef \c NonInteger, giving the type that should be used for operations producing non-integral values, * \li A typedef \c NonInteger, giving the type that should be used for operations producing non-integral values,
* such as quotients, square roots, etc. If \a T is a floating-point type, then this typedef just gives * such as quotients, square roots, etc. If \a T is a floating-point type, then this typedef just gives
* \a T again. Note however that many Eigen functions such as internal::sqrt simply refuse to * \a T again. Note however that many Eigen functions such as internal::sqrt simply refuse to
* take integers. Outside of a few cases, Eigen doesn't do automatic type promotion. Thus, this typedef is * take integers. Outside of a few cases, Eigen doesn't do automatic type promotion. Thus, this typedef is
* only intended as a helper for code that needs to explicitly promote types. * only intended as a helper for code that needs to explicitly promote types.
* \li A typedef \c Literal giving the type to use for numeric literals such as "2" or "0.5". For instance, for \c std::complex<U>, Literal is defined as \c U. * \li A typedef \c Literal giving the type to use for numeric literals such as "2" or "0.5". For instance, for `std::complex<U>`, Literal is defined as \c U.
* Of course, this type must be fully compatible with \a T. In doubt, just use \a T here. * Of course, this type must be fully compatible with \a T. In doubt, just use \a T here.
* \li A typedef \a Nested giving the type to use to nest a value inside of the expression tree. If you don't know what * \li A typedef \c Nested giving the type to use to nest a value inside of the expression tree. If you don't know what
* this means, just use \a T here. * this means, just use \a T here.
* \li An enum value \a IsComplex. It is equal to 1 if \a T is a \c std::complex * \li An enum value \c IsComplex. It is equal to 1 if \a T is a `std::complex`
* type, and to 0 otherwise. * type, and to 0 otherwise.
* \li An enum value \a IsInteger. It is equal to \c 1 if \a T is an integer type such as \c int, * \li An enum value \c IsInteger. It is equal to \c 1 if \a T is an integer type such as \c int,
* and to \c 0 otherwise. * and to \c 0 otherwise.
* \li Enum values ReadCost, AddCost and MulCost representing a rough estimate of the number of CPU cycles needed * \li Enum values \c ReadCost, \c AddCost and \c MulCost representing a rough estimate of the number of CPU cycles needed
* to by move / add / mul instructions respectively, assuming the data is already stored in CPU registers. * to by move / add / mul instructions respectively, assuming the data is already stored in CPU registers.
* Stay vague here. No need to do architecture-specific stuff. * Stay vague here. No need to do architecture-specific stuff.
* \li An enum value \a IsSigned. It is equal to \c 1 if \a T is a signed type and to 0 if \a T is unsigned. * \li An enum value \c IsSigned. It is equal to \c 1 if \a T is a signed type and to 0 if \a T is unsigned.
* \li An enum value \a RequireInitialization. It is equal to \c 1 if the constructor of the numeric type \a T must * \li An enum value \c RequireInitialization. It is equal to \c 1 if the constructor of the numeric type \a T must
* be called, and to 0 if it is safe not to call it. Default is 0 if \a T is an arithmetic type, and 1 otherwise. * be called, and to 0 if it is safe not to call it. Default is 0 if \a T is an arithmetic type, and 1 otherwise.
* \li An epsilon() function which, unlike <a href="http://en.cppreference.com/w/cpp/types/numeric_limits/epsilon">std::numeric_limits::epsilon()</a>, * \li An `epsilon()` function which, unlike <a href="http://en.cppreference.com/w/cpp/types/numeric_limits/epsilon">`std::numeric_limits::epsilon()`</a>,
* it returns a \a Real instead of a \a T. * it returns a \a Real instead of a \a T.
* \li A dummy_precision() function returning a weak epsilon value. It is mainly used as a default * \li A `dummy_precision()` function returning a weak epsilon value. It is mainly used as a default
* value by the fuzzy comparison operators. * value by the fuzzy comparison operators.
* \li highest() and lowest() functions returning the highest and lowest possible values respectively. * \li `highest()` and `lowest()` functions returning the highest and lowest possible values respectively.
* \li digits10() function returning the number of decimal digits that can be represented without change. This is * \li `digits10()` function returning the number of decimal digits that can be represented without change. This is
* the analogue of <a href="http://en.cppreference.com/w/cpp/types/numeric_limits/digits10">std::numeric_limits<T>::digits10</a> * the analogue of <a href="http://en.cppreference.com/w/cpp/types/numeric_limits/digits10">`std::numeric_limits<T>::digits10`</a>
* which is used as the default implementation if specialized. * which is used as the default implementation if specialized.
*/ */

View File

@ -300,14 +300,14 @@ struct general_product_to_triangular_selector<MatrixType,ProductType,UpLo,false>
} }
}; };
template<typename MatrixType, unsigned int UpLo> template<typename _MatrixType, unsigned int _Mode>
template<typename ProductType> template<typename ProductType>
TriangularView<MatrixType,UpLo>& TriangularViewImpl<MatrixType,UpLo,Dense>::_assignProduct(const ProductType& prod, const Scalar& alpha, bool beta) TriangularView<_MatrixType,_Mode>& TriangularViewImpl<_MatrixType,_Mode,Dense>::_assignProduct(const ProductType& prod, const Scalar& alpha, bool beta)
{ {
EIGEN_STATIC_ASSERT((UpLo&UnitDiag)==0, WRITING_TO_TRIANGULAR_PART_WITH_UNIT_DIAGONAL_IS_NOT_SUPPORTED); EIGEN_STATIC_ASSERT((_Mode&UnitDiag)==0, WRITING_TO_TRIANGULAR_PART_WITH_UNIT_DIAGONAL_IS_NOT_SUPPORTED);
eigen_assert(derived().nestedExpression().rows() == prod.rows() && derived().cols() == prod.cols()); eigen_assert(derived().nestedExpression().rows() == prod.rows() && derived().cols() == prod.cols());
general_product_to_triangular_selector<MatrixType, ProductType, UpLo, internal::traits<ProductType>::InnerSize==1>::run(derived().nestedExpression().const_cast_derived(), prod, alpha, beta); general_product_to_triangular_selector<_MatrixType, ProductType, _Mode, internal::traits<ProductType>::InnerSize==1>::run(derived().nestedExpression().const_cast_derived(), prod, alpha, beta);
return derived(); return derived();
} }

View File

@ -443,7 +443,8 @@ typename internal::matrix_type_times_scalar_type<typename VectorsType::Scalar,Ot
return res; return res;
} }
/** \ingroup Householder_Module \householder_module /** \ingroup Householder_Module
* \householder_module
* \brief Convenience function for constructing a Householder sequence. * \brief Convenience function for constructing a Householder sequence.
* \returns A HouseholderSequence constructed from the specified arguments. * \returns A HouseholderSequence constructed from the specified arguments.
*/ */
@ -453,7 +454,8 @@ HouseholderSequence<VectorsType,CoeffsType> householderSequence(const VectorsTyp
return HouseholderSequence<VectorsType,CoeffsType,OnTheLeft>(v, h); return HouseholderSequence<VectorsType,CoeffsType,OnTheLeft>(v, h);
} }
/** \ingroup Householder_Module \householder_module /** \ingroup Householder_Module
* \householder_module
* \brief Convenience function for constructing a Householder sequence. * \brief Convenience function for constructing a Householder sequence.
* \returns A HouseholderSequence constructed from the specified arguments. * \returns A HouseholderSequence constructed from the specified arguments.
* \details This function differs from householderSequence() in that the template argument \p OnTheSide of * \details This function differs from householderSequence() in that the template argument \p OnTheSide of

View File

@ -314,7 +314,8 @@ polygamma(const EIGEN_CURRENT_STORAGE_BASE_CLASS<DerivedN> &n) const
* *
* It returns the Riemann zeta function of two arguments \c *this and \a q: * It returns the Riemann zeta function of two arguments \c *this and \a q:
* *
* \param *this is the exposent, it must be > 1 * `*this` is the exponent, it must be > 1
*
* \param q is the shift, it must be > 0 * \param q is the shift, it must be > 0
* *
* \note This function supports only float and double scalar types. To support other scalar types, the user has * \note This function supports only float and double scalar types. To support other scalar types, the user has

View File

@ -16,7 +16,7 @@ option(EIGEN_DOC_USE_MATHJAX "Use MathJax for rendering math in HTML docs" ON)
# Set some Doxygen flags # Set some Doxygen flags
set(EIGEN_DOXY_PROJECT_NAME "Eigen") set(EIGEN_DOXY_PROJECT_NAME "Eigen")
set(EIGEN_DOXY_OUTPUT_DIRECTORY_SUFFIX "") set(EIGEN_DOXY_OUTPUT_DIRECTORY_SUFFIX "")
set(EIGEN_DOXY_INPUT "\"${Eigen_SOURCE_DIR}/Eigen\" \"${Eigen_SOURCE_DIR}/doc\"") set(EIGEN_DOXY_INPUT "\"${Eigen_SOURCE_DIR}/doc\" \"${Eigen_SOURCE_DIR}/Eigen\"")
set(EIGEN_DOXY_HTML_COLORSTYLE_HUE "220") set(EIGEN_DOXY_HTML_COLORSTYLE_HUE "220")
set(EIGEN_DOXY_TAGFILES "") set(EIGEN_DOXY_TAGFILES "")
@ -39,7 +39,7 @@ configure_file(
set(EIGEN_DOXY_PROJECT_NAME "Eigen-unsupported") set(EIGEN_DOXY_PROJECT_NAME "Eigen-unsupported")
set(EIGEN_DOXY_OUTPUT_DIRECTORY_SUFFIX "/unsupported") set(EIGEN_DOXY_OUTPUT_DIRECTORY_SUFFIX "/unsupported")
set(EIGEN_DOXY_INPUT "\"${Eigen_SOURCE_DIR}/unsupported/Eigen\" \"${Eigen_SOURCE_DIR}/unsupported/doc\"") set(EIGEN_DOXY_INPUT "\"${Eigen_SOURCE_DIR}/unsupported/doc\" \"${Eigen_SOURCE_DIR}/unsupported/Eigen\"")
set(EIGEN_DOXY_HTML_COLORSTYLE_HUE "0") set(EIGEN_DOXY_HTML_COLORSTYLE_HUE "0")
set(EIGEN_DOXY_TAGFILES "\"${Eigen_BINARY_DIR}/doc/Eigen.doxytags=..\"") set(EIGEN_DOXY_TAGFILES "\"${Eigen_BINARY_DIR}/doc/Eigen.doxytags=..\"")
#set(EIGEN_DOXY_TAGFILES "") #set(EIGEN_DOXY_TAGFILES "")
@ -83,7 +83,6 @@ add_custom_target(
doc-eigen-prerequisites doc-eigen-prerequisites
ALL ALL
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/html/ COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/html/
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/eigen_navtree_hacks.js ${CMAKE_CURRENT_BINARY_DIR}/html/
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/Eigen_Silly_Professor_64x64.png ${CMAKE_CURRENT_BINARY_DIR}/html/ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/Eigen_Silly_Professor_64x64.png ${CMAKE_CURRENT_BINARY_DIR}/html/
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/ftv2pnode.png ${CMAKE_CURRENT_BINARY_DIR}/html/ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/ftv2pnode.png ${CMAKE_CURRENT_BINARY_DIR}/html/
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/ftv2node.png ${CMAKE_CURRENT_BINARY_DIR}/html/ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/ftv2node.png ${CMAKE_CURRENT_BINARY_DIR}/html/
@ -95,7 +94,6 @@ add_custom_target(
doc-unsupported-prerequisites doc-unsupported-prerequisites
ALL ALL
COMMAND ${CMAKE_COMMAND} -E make_directory ${Eigen_BINARY_DIR}/doc/html/unsupported COMMAND ${CMAKE_COMMAND} -E make_directory ${Eigen_BINARY_DIR}/doc/html/unsupported
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/eigen_navtree_hacks.js ${CMAKE_CURRENT_BINARY_DIR}/html/unsupported/
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/Eigen_Silly_Professor_64x64.png ${CMAKE_CURRENT_BINARY_DIR}/html/unsupported/ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/Eigen_Silly_Professor_64x64.png ${CMAKE_CURRENT_BINARY_DIR}/html/unsupported/
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/ftv2pnode.png ${CMAKE_CURRENT_BINARY_DIR}/html/unsupported/ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/ftv2pnode.png ${CMAKE_CURRENT_BINARY_DIR}/html/unsupported/
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/ftv2node.png ${CMAKE_CURRENT_BINARY_DIR}/html/unsupported/ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/ftv2node.png ${CMAKE_CURRENT_BINARY_DIR}/html/unsupported/

View File

@ -444,7 +444,7 @@ This also means that, unless specified, if the function \c std::foo is available
<td class="code"> <td class="code">
\anchor cwisetable_digamma \anchor cwisetable_digamma
a.\link ArrayBase::digamma digamma\endlink(); \n a.\link ArrayBase::digamma digamma\endlink(); \n
\link Eigen::digamma digamma\endlink(a); digamma(a);
</td> </td>
<td><a href="https://en.wikipedia.org/wiki/Digamma_function">logarithmic derivative of the gamma function</a></td> <td><a href="https://en.wikipedia.org/wiki/Digamma_function">logarithmic derivative of the gamma function</a></td>
<td> <td>
@ -455,7 +455,7 @@ This also means that, unless specified, if the function \c std::foo is available
<tr> <tr>
<td class="code"> <td class="code">
\anchor cwisetable_igamma \anchor cwisetable_igamma
\link Eigen::igamma igamma\endlink(a,x); igamma(a,x);
</td> </td>
<td><a href="https://en.wikipedia.org/wiki/Incomplete_gamma_function">lower incomplete gamma integral</a> <td><a href="https://en.wikipedia.org/wiki/Incomplete_gamma_function">lower incomplete gamma integral</a>
\n \f$ \gamma(a_i,x_i)= \frac{1}{|a_i|} \int_{0}^{x_i}e^{\text{-}t} t^{a_i-1} \mathrm{d} t \f$</td> \n \f$ \gamma(a_i,x_i)= \frac{1}{|a_i|} \int_{0}^{x_i}e^{\text{-}t} t^{a_i-1} \mathrm{d} t \f$</td>
@ -467,7 +467,7 @@ This also means that, unless specified, if the function \c std::foo is available
<tr> <tr>
<td class="code"> <td class="code">
\anchor cwisetable_igammac \anchor cwisetable_igammac
\link Eigen::igammac igammac\endlink(a,x); igammac(a,x);
</td> </td>
<td><a href="https://en.wikipedia.org/wiki/Incomplete_gamma_function">upper incomplete gamma integral</a> <td><a href="https://en.wikipedia.org/wiki/Incomplete_gamma_function">upper incomplete gamma integral</a>
\n \f$ \Gamma(a_i,x_i) = \frac{1}{|a_i|} \int_{x_i}^{\infty}e^{\text{-}t} t^{a_i-1} \mathrm{d} t \f$</td> \n \f$ \Gamma(a_i,x_i) = \frac{1}{|a_i|} \int_{x_i}^{\infty}e^{\text{-}t} t^{a_i-1} \mathrm{d} t \f$</td>
@ -483,7 +483,7 @@ This also means that, unless specified, if the function \c std::foo is available
<tr> <tr>
<td class="code"> <td class="code">
\anchor cwisetable_polygamma \anchor cwisetable_polygamma
\link Eigen::polygamma polygamma\endlink(n,x); polygamma(n,x);
</td> </td>
<td><a href="https://en.wikipedia.org/wiki/Polygamma_function">n-th derivative of digamma at x</a></td> <td><a href="https://en.wikipedia.org/wiki/Polygamma_function">n-th derivative of digamma at x</a></td>
<td> <td>
@ -496,7 +496,7 @@ This also means that, unless specified, if the function \c std::foo is available
<tr> <tr>
<td class="code"> <td class="code">
\anchor cwisetable_betainc \anchor cwisetable_betainc
\link Eigen::betainc betainc\endlink(a,b,x); betainc(a,b,x);
</td> </td>
<td><a href="https://en.wikipedia.org/wiki/Beta_function#Incomplete_beta_function">Incomplete beta function</a></td> <td><a href="https://en.wikipedia.org/wiki/Beta_function#Incomplete_beta_function">Incomplete beta function</a></td>
<td> <td>
@ -507,7 +507,8 @@ This also means that, unless specified, if the function \c std::foo is available
<tr> <tr>
<td class="code"> <td class="code">
\anchor cwisetable_zeta \anchor cwisetable_zeta
\link Eigen::zeta zeta\endlink(a,b); zeta(a,b); \n
a.\link ArrayBase::zeta zeta\endlink(b);
</td> </td>
<td><a href="https://en.wikipedia.org/wiki/Hurwitz_zeta_function">Hurwitz zeta function</a> <td><a href="https://en.wikipedia.org/wiki/Hurwitz_zeta_function">Hurwitz zeta function</a>
\n \f$ \zeta(a_i,b_i)=\sum_{k=0}^{\infty}(b_i+k)^{\text{-}a_i} \f$</td> \n \f$ \zeta(a_i,b_i)=\sum_{k=0}^{\infty}(b_i+k)^{\text{-}a_i} \f$</td>

View File

@ -35,7 +35,7 @@ Timings are in \b milliseconds, and factors are relative to the LLT decompositio
+ For large problem sizes, only the decomposition implementing a cache-friendly blocking strategy scale well. Those include LLT, PartialPivLU, HouseholderQR, and BDCSVD. This explain why for a 4k x 4k matrix, HouseholderQR is faster than LDLT. In the future, LDLT and ColPivHouseholderQR will also implement blocking strategies. + For large problem sizes, only the decomposition implementing a cache-friendly blocking strategy scale well. Those include LLT, PartialPivLU, HouseholderQR, and BDCSVD. This explain why for a 4k x 4k matrix, HouseholderQR is faster than LDLT. In the future, LDLT and ColPivHouseholderQR will also implement blocking strategies.
+ CompleteOrthogonalDecomposition is based on ColPivHouseholderQR and they thus achieve the same level of performance. + CompleteOrthogonalDecomposition is based on ColPivHouseholderQR and they thus achieve the same level of performance.
The above table has been generated by the <a href="https://bitbucket.org/eigen/eigen/raw/default/bench/dense_solvers.cpp">bench/dense_solvers.cpp</a> file, feel-free to hack it to generate a table matching your hardware, compiler, and favorite problem sizes. The above table has been generated by the <a href="https://gitlab.com/libeigen/eigen/raw/master/bench/dense_solvers.cpp">bench/dense_solvers.cpp</a> file, feel-free to hack it to generate a table matching your hardware, compiler, and favorite problem sizes.
*/ */

File diff suppressed because it is too large Load Diff

View File

@ -40,7 +40,6 @@ namespace Eigen {
- \subpage TopicVectorization - \subpage TopicVectorization
- \subpage TopicEigenExpressionTemplates - \subpage TopicEigenExpressionTemplates
- \subpage TopicScalarTypes - \subpage TopicScalarTypes
- \subpage GettingStarted
- \subpage TutorialSparse_example_details - \subpage TutorialSparse_example_details
- \subpage TopicWritingEfficientProductExpression - \subpage TopicWritingEfficientProductExpression
- \subpage Experimental - \subpage Experimental
@ -115,7 +114,7 @@ namespace Eigen {
\ingroup DenseLinearSolvers_chapter */ \ingroup DenseLinearSolvers_chapter */
/** \addtogroup TopicLinearAlgebraDecompositions /** \addtogroup TopicLinearAlgebraDecompositions
\ingroup DenseLinearSolvers_chapter */ \ingroup DenseLinearSolvers_chapter */
/** \addtogroup LeastSquares /** \addtogroup LeastSquares
\ingroup DenseLinearSolvers_chapter */ \ingroup DenseLinearSolvers_chapter */
/** \addtogroup InplaceDecomposition /** \addtogroup InplaceDecomposition
\ingroup DenseLinearSolvers_chapter */ \ingroup DenseLinearSolvers_chapter */
@ -165,7 +164,7 @@ namespace Eigen {
/** \addtogroup Sparse_Module /** \addtogroup Sparse_Module
\ingroup Sparse_Reference */ \ingroup Sparse_Reference */
/** \addtogroup Support_modules /** \addtogroup Support_modules
\ingroup Sparse_Reference */ \ingroup Sparse_Reference */
/** \addtogroup SparseQuickRefPage /** \addtogroup SparseQuickRefPage
\ingroup Sparse_chapter */ \ingroup Sparse_chapter */
@ -176,7 +175,7 @@ namespace Eigen {
/** \addtogroup TutorialGeometry /** \addtogroup TutorialGeometry
\ingroup Geometry_chapter */ \ingroup Geometry_chapter */
/** \addtogroup Geometry_Reference /** \addtogroup Geometry_Reference
\ingroup Geometry_chapter */ \ingroup Geometry_chapter */
/** \addtogroup Geometry_Module /** \addtogroup Geometry_Module

View File

@ -6,14 +6,14 @@ This is the API documentation for Eigen3. You can <a href="eigen-doc.tgz">downlo
You're already an Eigen2 user? Here is a \link Eigen2ToEigen3 Eigen2 to Eigen3 guide \endlink to help porting your application. You're already an Eigen2 user? Here is a \link Eigen2ToEigen3 Eigen2 to Eigen3 guide \endlink to help porting your application.
For a first contact with Eigen, the best place is to have a look at the \link GettingStarted getting started \endlink page that show you how to write and compile your first program with Eigen. For a first contact with Eigen, the best place is to have a look at the \subpage GettingStarted page that show you how to write and compile your first program with Eigen.
Then, the \b quick \b reference \b pages give you a quite complete description of the API in a very condensed format that is specially useful to recall the syntax of a particular feature, or to have a quick look at the API. They currently cover the two following feature sets, and more will come in the future: Then, the \b quick \b reference \b pages give you a quite complete description of the API in a very condensed format that is specially useful to recall the syntax of a particular feature, or to have a quick look at the API. They currently cover the two following feature sets, and more will come in the future:
- \link QuickRefPage [QuickRef] Dense matrix and array manipulations \endlink - \link QuickRefPage [QuickRef] Dense matrix and array manipulations \endlink
- \link SparseQuickRefPage [QuickRef] Sparse linear algebra \endlink - \link SparseQuickRefPage [QuickRef] Sparse linear algebra \endlink
You're a MatLab user? There is also a <a href="AsciiQuickReference.txt">short ASCII reference</a> with Matlab translations. You're a MatLab user? There is also a <a href="AsciiQuickReference.txt">short ASCII reference</a> with Matlab translations.
The \b main \b documentation is organized into \em chapters covering different domains of features. The \b main \b documentation is organized into \em chapters covering different domains of features.
They are themselves composed of \em user \em manual pages describing the different features in a comprehensive way, and \em reference pages that gives you access to the API documentation through the related Eigen's \em modules and \em classes. They are themselves composed of \em user \em manual pages describing the different features in a comprehensive way, and \em reference pages that gives you access to the API documentation through the related Eigen's \em modules and \em classes.
@ -21,6 +21,10 @@ Under the \subpage UserManual_CustomizingEigen section, you will find discussion
Under the \subpage UserManual_Generalities section, you will find documentation on more general topics such as preprocessor directives, controlling assertions, multi-threading, MKL support, some Eigen's internal insights, and much more... Under the \subpage UserManual_Generalities section, you will find documentation on more general topics such as preprocessor directives, controlling assertions, multi-threading, MKL support, some Eigen's internal insights, and much more...
For details regarding Eigen's inner-workings, see the \subpage UserManual_UnderstandingEigen section.
Some random topics can be found under the \subpage UnclassifiedPages section.
Finally, do not miss the search engine, useful to quickly get to the documentation of a given class or function. Finally, do not miss the search engine, useful to quickly get to the documentation of a given class or function.
Want more? Checkout the <a href="unsupported/index.html">\em unsupported \em modules </a> documentation. Want more? Checkout the <a href="unsupported/index.html">\em unsupported \em modules </a> documentation.

View File

@ -17,7 +17,7 @@ especially if you got wrong results in statements where the destination appears
\section TopicPitfalls_alignment_issue Alignment Issues (runtime assertion) \section TopicPitfalls_alignment_issue Alignment Issues (runtime assertion)
%Eigen does explicit vectorization, and while that is appreciated by many users, that also leads to some issues in special situations where data alignment is compromised. %Eigen does explicit vectorization, and while that is appreciated by many users, that also leads to some issues in special situations where data alignment is compromised.
Indeed, since C++17, C++ does not have quite good enough support for explicit data alignment. Indeed, prior to C++17, C++ does not have quite good enough support for explicit data alignment.
In that case your program hits an assertion failure (that is, a "controlled crash") with a message that tells you to consult this page: In that case your program hits an assertion failure (that is, a "controlled crash") with a message that tells you to consult this page:
\code \code
http://eigen.tuxfamily.org/dox/group__TopicUnalignedArrayAssert.html http://eigen.tuxfamily.org/dox/group__TopicUnalignedArrayAssert.html
@ -40,7 +40,7 @@ for(...) { ... w = C * v; ...}
In this example, the type of C is not a \c MatrixXd but an abstract expression representing a matrix product and storing references to \c A and \c B. In this example, the type of C is not a \c MatrixXd but an abstract expression representing a matrix product and storing references to \c A and \c B.
Therefore, the product of \c A*B will be carried out multiple times, once per iteration of the for loop. Therefore, the product of \c A*B will be carried out multiple times, once per iteration of the for loop.
Moreover, if the coefficients of A or B change during the iteration, then C will evaluate to different values. Moreover, if the coefficients of `A` or `B` change during the iteration, then `C` will evaluate to different values.
Here is another example leading to a segfault: Here is another example leading to a segfault:
\code \code
@ -72,7 +72,7 @@ Note that DenseBase::eval() is smart enough to avoid copies when the underlying
\section TopicPitfalls_header_issues Header Issues (failure to compile) \section TopicPitfalls_header_issues Header Issues (failure to compile)
With all libraries, one must check the documentation for which header to include. With all libraries, one must check the documentation for which header to include.
The same is true with %Eigen, but slightly worse: with %Eigen, a method in a class may require an additional <code>#include</code> over what the class itself requires! The same is true with %Eigen, but slightly worse: with %Eigen, a method in a class may require an additional \c \#include over what the class itself requires!
For example, if you want to use the \c cross() method on a vector (it computes a cross-product) then you need to: For example, if you want to use the \c cross() method on a vector (it computes a cross-product) then you need to:
\code \code
#include<Eigen/Geometry> #include<Eigen/Geometry>

View File

@ -66,7 +66,7 @@ The output is as follows:
\section GettingStartedExplanation2 Explanation of the second example \section GettingStartedExplanation2 Explanation of the second example
The second example starts by declaring a 3-by-3 matrix \c m which is initialized using the \link DenseBase::Random(Index,Index) Random() \endlink method with random values between -1 and 1. The next line applies a linear mapping such that the values are between 10 and 110. The function call \link DenseBase::Constant(Index,Index,const Scalar&) MatrixXd::Constant\endlink(3,3,1.2) returns a 3-by-3 matrix expression having all coefficients equal to 1.2. The rest is standard arithmetics. The second example starts by declaring a 3-by-3 matrix \c m which is initialized using the \link DenseBase::Random(Index,Index) Random() \endlink method with random values between -1 and 1. The next line applies a linear mapping such that the values are between 10 and 110. The function call \link DenseBase::Constant(Index,Index,const DenseBase::Scalar&) MatrixXd::Constant\endlink(3,3,1.2) returns a 3-by-3 matrix expression having all coefficients equal to 1.2. The rest is standard arithmetics.
The next line of the \c main function introduces a new type: \c VectorXd. This represents a (column) vector of arbitrary size. Here, the vector \c v is created to contain \c 3 coefficients which are left unitialized. The one but last line uses the so-called comma-initializer, explained in \ref TutorialAdvancedInitialization, to set all coefficients of the vector \c v to be as follows: The next line of the \c main function introduces a new type: \c VectorXd. This represents a (column) vector of arbitrary size. Here, the vector \c v is created to contain \c 3 coefficients which are left unitialized. The one but last line uses the so-called comma-initializer, explained in \ref TutorialAdvancedInitialization, to set all coefficients of the vector \c v to be as follows:

View File

@ -90,9 +90,7 @@ Such problem can be mathematically expressed as a linear problem of the form \f$
<tr><td> <tr><td>
\include Tutorial_sparse_example.cpp \include Tutorial_sparse_example.cpp
</td> </td>
<td> </tr></table>
\image html Tutorial_sparse_example.jpeg
</td></tr></table>
In this example, we start by defining a column-major sparse matrix type of double \c SparseMatrix<double>, and a triplet list of the same scalar type \c Triplet<double>. A triplet is a simple object representing a non-zero entry as the triplet: \c row index, \c column index, \c value. In this example, we start by defining a column-major sparse matrix type of double \c SparseMatrix<double>, and a triplet list of the same scalar type \c Triplet<double>. A triplet is a simple object representing a non-zero entry as the triplet: \c row index, \c column index, \c value.

View File

@ -102,15 +102,15 @@ However there are a few corner cases where these alignment settings get overridd
Three possibilities: Three possibilities:
<ul> <ul>
<li>Use the \c DontAlign option to Matrix, Array, Quaternion, etc. objects that gives you trouble. This way Eigen won't try to align them, and thus won"t assume any special alignment. On the down side, you will pay the cost of unaligned loads/stores for them, but on modern CPUs, the overhead is either null or marginal. See \link StructHavingEigenMembers_othersolutions here \endlink for an example.</li> <li>Use the \c DontAlign option to Matrix, Array, Quaternion, etc. objects that gives you trouble. This way Eigen won't try to align them, and thus won't assume any special alignment. On the down side, you will pay the cost of unaligned loads/stores for them, but on modern CPUs, the overhead is either null or marginal. See \link StructHavingEigenMembers_othersolutions here \endlink for an example.</li>
<li>Define \link TopicPreprocessorDirectivesPerformance EIGEN_DONT_ALIGN_STATICALLY \endlink. That disables all 16-byte (and above) static alignment code, while keeping 16-byte (or above) heap alignment. This has the effect of <li>Define \link TopicPreprocessorDirectivesPerformance `EIGEN_DONT_ALIGN_STATICALLY` \endlink. That disables all 16-byte (and above) static alignment code, while keeping 16-byte (or above) heap alignment. This has the effect of
vectorizing fixed-size objects (like Matrix4d) through unaligned stores (as controlled by \link TopicPreprocessorDirectivesPerformance EIGEN_UNALIGNED_VECTORIZE \endlink), while keeping unchanged the vectorization of dynamic-size objects vectorizing fixed-size objects (like Matrix4d) through unaligned stores (as controlled by \link TopicPreprocessorDirectivesPerformance `EIGEN_UNALIGNED_VECTORIZE` \endlink), while keeping unchanged the vectorization of dynamic-size objects
(like MatrixXd). But do note that this breaks ABI compatibility with the default behavior of static alignment.</li> (like MatrixXd). But do note that this breaks ABI compatibility with the default behavior of static alignment.</li>
<li>Or define both \link TopicPreprocessorDirectivesPerformance EIGEN_DONT_VECTORIZE \endlink and EIGEN_DISABLE_UNALIGNED_ARRAY_ASSERT. This keeps the <li>Or define both \link TopicPreprocessorDirectivesPerformance `EIGEN_DONT_VECTORIZE` \endlink and `EIGEN_DISABLE_UNALIGNED_ARRAY_ASSERT`. This keeps the
16-byte alignment code and thus preserves ABI compatibility, but completely disables vectorization.</li> 16-byte alignment code and thus preserves ABI compatibility, but completely disables vectorization.</li>
</ul> </ul>
If you want to know why defining EIGEN_DONT_VECTORIZE does not by itself disable 16-byte alignment and the assertion, here's the explanation: If you want to know why defining `EIGEN_DONT_VECTORIZE` does not by itself disable 16-byte alignment and the assertion, here's the explanation:
It doesn't disable the assertion, because otherwise code that runs fine without vectorization would suddenly crash when enabling vectorization. It doesn't disable the assertion, because otherwise code that runs fine without vectorization would suddenly crash when enabling vectorization.
It doesn't disable 16-byte alignment, because that would mean that vectorized and non-vectorized code are not mutually ABI-compatible. This ABI compatibility is very important, even for people who develop only an in-house application, as for instance one may want to have in the same application a vectorized path and a non-vectorized path. It doesn't disable 16-byte alignment, because that would mean that vectorized and non-vectorized code are not mutually ABI-compatible. This ABI compatibility is very important, even for people who develop only an in-house application, as for instance one may want to have in the same application a vectorized path and a non-vectorized path.

View File

@ -93,7 +93,7 @@ table th.inter {
border-color: #cccccc; border-color: #cccccc;
} }
/** class for exemple / output tables **/ /** class for example / output tables **/
table.example { table.example {
} }
@ -160,9 +160,7 @@ div.toc {
margin:0; margin:0;
padding: 0.3em 0 0 0; padding: 0.3em 0 0 0;
width:100%; width:100%;
float:none; float: none;
position:absolute;
bottom:0;
border-radius:0px; border-radius:0px;
border-style: solid none none none; border-style: solid none none none;
max-height:50%; max-height:50%;
@ -183,6 +181,18 @@ span.cpp11,span.cpp14,span.cpp17 {
font-weight: bold; font-weight: bold;
} }
.newin3x {
color: #a37c1a;
font-weight: bold;
}
div.warningbox {
max-width:60em;
border-style: solid solid solid solid;
border-color: red;
border-width: 3px;
}
/**** old Eigen's styles ****/ /**** old Eigen's styles ****/
@ -220,4 +230,4 @@ td.width20em p.endtd {
/* needed for huge screens */ /* needed for huge screens */
.ui-resizable-e { .ui-resizable-e {
background-repeat: repeat-y; background-repeat: repeat-y;
} }

View File

@ -1,23 +1,18 @@
<!-- HTML footer for doxygen 1.13.0-->
<!-- start footer part --> <!-- start footer part -->
<!--BEGIN GENERATE_TREEVIEW--> <!--BEGIN GENERATE_TREEVIEW-->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! --> <div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul> <ul>
$navpath $navpath
<li class="footer">$generatedby <li class="footer">$generatedby <a href="https://www.doxygen.org/index.html"><img class="footer" src="$relpath^doxygen.svg" width="104" height="31" alt="doxygen"/></a> $doxygenversion </li>
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="$relpath^doxygen.png" alt="doxygen"/></a> $doxygenversion </li>
</ul> </ul>
</div> </div>
<!--END GENERATE_TREEVIEW--> <!--END GENERATE_TREEVIEW-->
<!--BEGIN !GENERATE_TREEVIEW--> <!--BEGIN !GENERATE_TREEVIEW-->
<hr class="footer"/><address class="footer"><small> <hr class="footer"/><address class="footer"><small>
$generatedby &#160;<a href="http://www.doxygen.org/index.html"> $generatedby&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="$relpath^doxygen.svg" width="104" height="31" alt="doxygen"/></a> $doxygenversion
<img class="footer" src="$relpath^doxygen.png" alt="doxygen"/>
</a> $doxygenversion
</small></address> </small></address>
</div><!-- doc-content -->
<!--END !GENERATE_TREEVIEW--> <!--END !GENERATE_TREEVIEW-->
</body> </body>
</html> </html>

View File

@ -1,27 +1,41 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <!-- HTML header for doxygen 1.13.0-->
<html xmlns="http://www.w3.org/1999/xhtml"> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="$langISO">
<head> <head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/> <meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen $doxygenversion"/> <meta name="generator" content="Doxygen $doxygenversion"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME--> <!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME--> <!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
<!--BEGIN PROJECT_ICON-->
<link rel="icon" href="$relpath^$projecticon" type="image/x-icon" />
<!--END PROJECT_ICON-->
<link href="$relpath^tabs.css" rel="stylesheet" type="text/css"/> <link href="$relpath^tabs.css" rel="stylesheet" type="text/css"/>
<!--BEGIN DISABLE_INDEX-->
<!--BEGIN FULL_SIDEBAR-->
<script type="text/javascript">var page_layout=1;</script>
<!--END FULL_SIDEBAR-->
<!--END DISABLE_INDEX-->
<script type="text/javascript" src="$relpath^jquery.js"></script> <script type="text/javascript" src="$relpath^jquery.js"></script>
<script type="text/javascript" src="$relpath^dynsections.js"></script> <script type="text/javascript" src="$relpath^dynsections.js"></script>
<!--BEGIN COPY_CLIPBOARD-->
<script type="text/javascript" src="$relpath^clipboard.js"></script>
<!--END COPY_CLIPBOARD-->
$treeview $treeview
$search $search
$mathjax $mathjax
$darkmode
<link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" /> <link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" />
<link href="$relpath$eigendoxy.css" rel="stylesheet" type="text/css"> <link href="$relpath$eigendoxy.css" rel="stylesheet" type="text/css">
<!-- $extrastylesheet --> $extrastylesheet
<script type="text/javascript" src="$relpath$eigen_navtree_hacks.js"></script>
</head> </head>
<body> <body>
<!--BEGIN DISABLE_INDEX-->
<div style="background:#FFDDDD;font-size:120%;text-align:center;margin:0;padding:5px">Please, help us to better know about our user community by answering the following short survey: <a href="https://forms.gle/wpyrxWi18ox9Z5ae9">https://forms.gle/wpyrxWi18ox9Z5ae9</a></div> <!--BEGIN FULL_SIDEBAR-->
<div id="side-nav" class="ui-resizable side-nav-resizable"><!-- do not remove this div, it is closed by doxygen! -->
<!--END FULL_SIDEBAR-->
<!--END DISABLE_INDEX-->
<div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
@ -29,12 +43,12 @@ $mathjax
<div id="titlearea"> <div id="titlearea">
<table cellspacing="0" cellpadding="0"> <table cellspacing="0" cellpadding="0">
<tbody> <tbody>
<tr style="height: 56px;"> <tr id="projectrow">
<!--BEGIN PROJECT_LOGO--> <!--BEGIN PROJECT_LOGO-->
<td id="projectlogo"><img alt="Logo" src="$relpath^$projectlogo"/></td> <td id="projectlogo"><img alt="Logo" src="$relpath^$projectlogo"$logosize/></td>
<!--END PROJECT_LOGO--> <!--END PROJECT_LOGO-->
<!--BEGIN PROJECT_NAME--> <!--BEGIN PROJECT_NAME-->
<td id="projectalign" style="padding-left: 0.5em;"> <td id="projectalign">
<div id="projectname"><a href="http://eigen.tuxfamily.org">$projectname</a> <div id="projectname"><a href="http://eigen.tuxfamily.org">$projectname</a>
<!--BEGIN PROJECT_NUMBER-->&#160;<span id="projectnumber">$projectnumber</span><!--END PROJECT_NUMBER--> <!--BEGIN PROJECT_NUMBER-->&#160;<span id="projectnumber">$projectnumber</span><!--END PROJECT_NUMBER-->
</div> </div>
@ -43,20 +57,26 @@ $mathjax
<!--END PROJECT_NAME--> <!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME--> <!--BEGIN !PROJECT_NAME-->
<!--BEGIN PROJECT_BRIEF--> <!--BEGIN PROJECT_BRIEF-->
<td id="projectalign" style="padding-left: 0.5em;"> <td>
<div id="projectbrief">$projectbrief</div> <div id="projectbrief">$projectbrief</div>
</td> </td>
<!--END PROJECT_BRIEF--> <!--END PROJECT_BRIEF-->
<!--END !PROJECT_NAME--> <!--END !PROJECT_NAME-->
<!--BEGIN DISABLE_INDEX--> <!--BEGIN DISABLE_INDEX-->
<!--BEGIN SEARCHENGINE--> <!--BEGIN SEARCHENGINE-->
<td>$searchbox</td> <!--BEGIN !FULL_SIDEBAR-->
<td>$searchbox</td>
<!--END !FULL_SIDEBAR-->
<!--END SEARCHENGINE--> <!--END SEARCHENGINE-->
<!--END DISABLE_INDEX--> <!--END DISABLE_INDEX-->
</tr> </tr>
<!--BEGIN SEARCHENGINE-->
<!--BEGIN FULL_SIDEBAR-->
<tr><td colspan="2">$searchbox</td></tr>
<!--END FULL_SIDEBAR-->
<!--END SEARCHENGINE-->
</tbody> </tbody>
</table> </table>
</div> </div>
<!--END TITLEAREA--> <!--END TITLEAREA-->
<!-- end header part --> <!-- end header part -->

View File

@ -1,67 +1,103 @@
<?xml version="1.0"?> <?xml version="1.0" encoding="UTF-8"?>
<doxygenlayout version="1.0"> <doxygenlayout version="1.0">
<!-- Generated by doxygen 1.13.0 -->
<!-- Navigation index tabs for HTML output --> <!-- Navigation index tabs for HTML output -->
<navindex> <navindex>
<tab type="user" url="index.html" title="Overview" /> <tab type="mainpage" visible="no" title="main"/>
<tab type="user" url="@ref GettingStarted" title="Getting started" /> <tab type="pages" visible="yes" title="" intro=""/>
<tab type="modules" visible="yes" title="Chapters" intro=""/> <tab type="topics" visible="yes" title="Chapters" intro=""/>
<tab type="mainpage" visible="yes" title=""/> <tab type="modules" visible="yes" title="" intro="">
<tab type="classlist" visible="yes" title="" intro=""/> <tab type="modulelist" visible="yes" title="" intro=""/>
<!-- <tab type="classmembers" visible="yes" title="" intro=""/> --> <tab type="modulemembers" visible="yes" title="" intro=""/>
</tab>
<tab type="namespaces" visible="no" title="">
<tab type="namespacelist" visible="yes" title="" intro=""/>
<tab type="namespacemembers" visible="yes" title="" intro=""/>
</tab>
<tab type="concepts" visible="yes" title="">
</tab>
<tab type="interfaces" visible="yes" title="">
<tab type="interfacelist" visible="yes" title="" intro=""/>
<tab type="interfaceindex" visible="$ALPHABETICAL_INDEX" title=""/>
<tab type="interfacehierarchy" visible="yes" title="" intro=""/>
</tab>
<tab type="classes" visible="yes" title="">
<tab type="classlist" visible="yes" title="" intro=""/>
<tab type="classindex" visible="$ALPHABETICAL_INDEX" title=""/>
<tab type="hierarchy" visible="yes" title="" intro=""/>
<tab type="classmembers" visible="yes" title="" intro=""/>
</tab>
<tab type="structs" visible="yes" title="">
<tab type="structlist" visible="yes" title="" intro=""/>
<tab type="structindex" visible="$ALPHABETICAL_INDEX" title=""/>
</tab>
<tab type="exceptions" visible="yes" title="">
<tab type="exceptionlist" visible="yes" title="" intro=""/>
<tab type="exceptionindex" visible="$ALPHABETICAL_INDEX" title=""/>
<tab type="exceptionhierarchy" visible="yes" title="" intro=""/>
</tab>
<tab type="files" visible="yes" title="">
<tab type="filelist" visible="yes" title="" intro=""/>
<tab type="globals" visible="yes" title="" intro=""/>
</tab>
<tab type="examples" visible="yes" title="" intro=""/>
</navindex> </navindex>
<!-- Layout definition for a class page --> <!-- Layout definition for a class page -->
<class> <class>
<briefdescription visible="no"/> <briefdescription visible="no"/>
<includes visible="$SHOW_INCLUDE_FILES"/> <includes visible="$SHOW_HEADERFILE"/>
<detaileddescription title=""/> <detaileddescription visible="yes" title=""/>
<inheritancegraph visible="$CLASS_GRAPH"/> <inheritancegraph visible="$CLASS_GRAPH"/>
<collaborationgraph visible="$COLLABORATION_GRAPH"/> <collaborationgraph visible="$COLLABORATION_GRAPH"/>
<allmemberslink visible="yes"/>
<memberdecl> <memberdecl>
<nestedclasses visible="yes" title=""/> <nestedclasses visible="yes" title=""/>
<publictypes title=""/> <publictypes visible="yes" title=""/>
<publicslots title=""/> <services visible="yes" title=""/>
<signals title=""/> <interfaces visible="yes" title=""/>
<publicmethods title=""/> <publicslots visible="yes" title=""/>
<publicstaticmethods title=""/> <signals visible="yes" title=""/>
<publicattributes title=""/> <publicmethods visible="yes" title=""/>
<publicstaticattributes title=""/> <publicstaticmethods visible="yes" title=""/>
<protectedtypes title=""/> <publicattributes visible="yes" title=""/>
<protectedslots title=""/> <publicstaticattributes visible="yes" title=""/>
<protectedmethods title=""/> <protectedtypes visible="yes" title=""/>
<protectedstaticmethods title=""/> <protectedslots visible="yes" title=""/>
<protectedattributes title=""/> <protectedmethods visible="yes" title=""/>
<protectedstaticattributes title=""/> <protectedstaticmethods visible="yes" title=""/>
<packagetypes title=""/> <protectedattributes visible="yes" title=""/>
<packagemethods title=""/> <protectedstaticattributes visible="yes" title=""/>
<packagestaticmethods title=""/> <packagetypes visible="yes" title=""/>
<packageattributes title=""/> <packagemethods visible="yes" title=""/>
<packagestaticattributes title=""/> <packagestaticmethods visible="yes" title=""/>
<properties title=""/> <packageattributes visible="yes" title=""/>
<events title=""/> <packagestaticattributes visible="yes" title=""/>
<privatetypes title=""/> <properties visible="yes" title=""/>
<privateslots title=""/> <events visible="yes" title=""/>
<privatemethods title=""/> <privatetypes visible="yes" title=""/>
<privatestaticmethods title=""/> <privateslots visible="yes" title=""/>
<privateattributes title=""/> <privatemethods visible="yes" title=""/>
<privatestaticattributes title=""/> <privatestaticmethods visible="yes" title=""/>
<friends title=""/> <privateattributes visible="yes" title=""/>
<related title="" subtitle=""/> <privatestaticattributes visible="yes" title=""/>
<friends visible="yes" title=""/>
<related visible="yes" title="" subtitle=""/>
<membergroups visible="yes"/> <membergroups visible="yes"/>
</memberdecl> </memberdecl>
<memberdef> <memberdef>
<inlineclasses title=""/> <inlineclasses visible="yes" title=""/>
<typedefs title=""/> <typedefs visible="yes" title=""/>
<enums title=""/> <enums visible="yes" title=""/>
<constructors title=""/> <services visible="yes" title=""/>
<functions title=""/> <interfaces visible="yes" title=""/>
<related title=""/> <constructors visible="yes" title=""/>
<variables title=""/> <functions visible="yes" title=""/>
<properties title=""/> <related visible="yes" title=""/>
<events title=""/> <variables visible="yes" title=""/>
<properties visible="yes" title=""/>
<events visible="yes" title=""/>
</memberdef> </memberdef>
<allmemberslink visible="yes"/>
<usedfiles visible="$SHOW_USED_FILES"/> <usedfiles visible="$SHOW_USED_FILES"/>
<authorsection visible="yes"/> <authorsection visible="yes"/>
</class> </class>
@ -71,24 +107,44 @@
<briefdescription visible="yes"/> <briefdescription visible="yes"/>
<memberdecl> <memberdecl>
<nestednamespaces visible="yes" title=""/> <nestednamespaces visible="yes" title=""/>
<constantgroups visible="yes" title=""/>
<interfaces visible="yes" title=""/>
<classes visible="yes" title=""/> <classes visible="yes" title=""/>
<typedefs title=""/> <concepts visible="yes" title=""/>
<enums title=""/> <structs visible="yes" title=""/>
<functions title=""/> <exceptions visible="yes" title=""/>
<variables title=""/> <typedefs visible="yes" title=""/>
<membergroups visible="yes"/> <sequences visible="yes" title=""/>
<dictionaries visible="yes" title=""/>
<enums visible="yes" title=""/>
<functions visible="yes" title=""/>
<variables visible="yes" title=""/>
<properties visible="yes" title=""/>
<membergroups visible="yes" visible="yes"/>
</memberdecl> </memberdecl>
<detaileddescription title=""/> <detaileddescription visible="yes" title=""/>
<memberdef> <memberdef>
<inlineclasses title=""/> <inlineclasses visible="yes" title=""/>
<typedefs title=""/> <typedefs visible="yes" title=""/>
<enums title=""/> <sequences visible="yes" title=""/>
<functions title=""/> <dictionaries visible="yes" title=""/>
<variables title=""/> <enums visible="yes" title=""/>
<functions visible="yes" title=""/>
<variables visible="yes" title=""/>
<properties visible="yes" title=""/>
</memberdef> </memberdef>
<authorsection visible="yes"/> <authorsection visible="yes"/>
</namespace> </namespace>
<!-- Layout definition for a concept page -->
<concept>
<briefdescription visible="yes"/>
<includes visible="$SHOW_HEADERFILE"/>
<definition visible="yes" title=""/>
<detaileddescription visible="yes" title=""/>
<authorsection visible="yes"/>
</concept>
<!-- Layout definition for a file page --> <!-- Layout definition for a file page -->
<file> <file>
<briefdescription visible="yes"/> <briefdescription visible="yes"/>
@ -97,23 +153,34 @@
<includedbygraph visible="$INCLUDED_BY_GRAPH"/> <includedbygraph visible="$INCLUDED_BY_GRAPH"/>
<sourcelink visible="yes"/> <sourcelink visible="yes"/>
<memberdecl> <memberdecl>
<interfaces visible="yes" title=""/>
<classes visible="yes" title=""/> <classes visible="yes" title=""/>
<structs visible="yes" title=""/>
<exceptions visible="yes" title=""/>
<namespaces visible="yes" title=""/> <namespaces visible="yes" title=""/>
<defines title=""/> <concepts visible="yes" title=""/>
<typedefs title=""/> <constantgroups visible="yes" title=""/>
<enums title=""/> <defines visible="yes" title=""/>
<functions title=""/> <typedefs visible="yes" title=""/>
<variables title=""/> <sequences visible="yes" title=""/>
<membergroups visible="yes"/> <dictionaries visible="yes" title=""/>
<enums visible="yes" title=""/>
<functions visible="yes" title=""/>
<variables visible="yes" title=""/>
<properties visible="yes" title=""/>
<membergroups visible="yes" visible="yes"/>
</memberdecl> </memberdecl>
<detaileddescription title=""/> <detaileddescription visible="yes" title=""/>
<memberdef> <memberdef>
<inlineclasses title=""/> <inlineclasses visible="yes" title=""/>
<defines title=""/> <defines visible="yes" title=""/>
<typedefs title=""/> <typedefs visible="yes" title=""/>
<enums title=""/> <sequences visible="yes" title=""/>
<functions title=""/> <dictionaries visible="yes" title=""/>
<variables title=""/> <enums visible="yes" title=""/>
<functions visible="yes" title=""/>
<variables visible="yes" title=""/>
<properties visible="yes" title=""/>
</memberdef> </memberdef>
<authorsection/> <authorsection/>
</file> </file>
@ -121,50 +188,74 @@
<!-- Layout definition for a group page --> <!-- Layout definition for a group page -->
<group> <group>
<briefdescription visible="no"/> <briefdescription visible="no"/>
<detaileddescription title=""/> <detaileddescription visible="yes" title=""/>
<groupgraph visible="$GROUP_GRAPHS"/> <groupgraph visible="$GROUP_GRAPHS"/>
<memberdecl> <memberdecl>
<nestedgroups visible="yes" title=""/> <nestedgroups visible="yes" title=""/>
<modules visible="yes" title=""/>
<dirs visible="yes" title=""/> <dirs visible="yes" title=""/>
<files visible="yes" title=""/> <files visible="yes" title=""/>
<namespaces visible="yes" title=""/> <namespaces visible="yes" title=""/>
<concepts visible="yes" title=""/>
<classes visible="yes" title=""/> <classes visible="yes" title=""/>
<defines title=""/> <defines visible="yes" title=""/>
<typedefs title=""/> <typedefs visible="yes" title=""/>
<enums title=""/> <sequences visible="yes" title=""/>
<enumvalues title=""/> <dictionaries visible="yes" title=""/>
<functions title=""/> <enums visible="yes" title=""/>
<variables title=""/> <enumvalues visible="yes" title=""/>
<signals title=""/> <functions visible="yes" title=""/>
<publicslots title=""/> <variables visible="yes" title=""/>
<protectedslots title=""/> <signals visible="yes" title=""/>
<privateslots title=""/> <publicslots visible="yes" title=""/>
<events title=""/> <protectedslots visible="yes" title=""/>
<properties title=""/> <privateslots visible="yes" title=""/>
<friends title=""/> <events visible="yes" title=""/>
<properties visible="yes" title=""/>
<friends visible="yes" title=""/>
<membergroups visible="yes"/> <membergroups visible="yes"/>
</memberdecl> </memberdecl>
<memberdef> <memberdef>
<pagedocs/> <pagedocs/>
<inlineclasses title=""/> <inlineclasses visible="yes" title=""/>
<defines title=""/> <defines visible="yes" title=""/>
<typedefs title=""/> <typedefs visible="yes" title=""/>
<enums title=""/> <sequences visible="yes" title=""/>
<enumvalues title=""/> <dictionaries visible="yes" title=""/>
<functions title=""/> <enums visible="yes" title=""/>
<variables title=""/> <enumvalues visible="yes" title=""/>
<signals title=""/> <functions visible="yes" title=""/>
<publicslots title=""/> <variables visible="yes" title=""/>
<protectedslots title=""/> <signals visible="yes" title=""/>
<privateslots title=""/> <publicslots visible="yes" title=""/>
<events title=""/> <protectedslots visible="yes" title=""/>
<properties title=""/> <privateslots visible="yes" title=""/>
<friends title=""/> <events visible="yes" title=""/>
<properties visible="yes" title=""/>
<friends visible="yes" title=""/>
</memberdef> </memberdef>
<authorsection visible="yes"/> <authorsection visible="yes"/>
</group> </group>
<!-- Layout definition for a C++20 module page -->
<module>
<briefdescription visible="yes"/>
<exportedmodules visible="yes"/>
<memberdecl>
<concepts visible="yes" title=""/>
<classes visible="yes" title=""/>
<enums visible="yes" title=""/>
<typedefs visible="yes" title=""/>
<functions visible="yes" title=""/>
<variables visible="yes" title=""/>
<membergroups visible="yes" title=""/>
</memberdecl>
<detaileddescription visible="yes" title=""/>
<memberdecl>
<files visible="yes"/>
</memberdecl>
</module>
<!-- Layout definition for a directory page --> <!-- Layout definition for a directory page -->
<directory> <directory>
<briefdescription visible="yes"/> <briefdescription visible="yes"/>
@ -173,6 +264,6 @@
<dirs visible="yes"/> <dirs visible="yes"/>
<files visible="yes"/> <files visible="yes"/>
</memberdecl> </memberdecl>
<detaileddescription title=""/> <detaileddescription visible="yes" title=""/>
</directory> </directory>
</doxygenlayout> </doxygenlayout>

View File

@ -36,7 +36,7 @@ struct PlaceHolder {
typedef Scalar Type; typedef Scalar Type;
}; };
/// \sttruct PlaceHolderExpression /// \struct PlaceHolderExpression
/// \brief it is used to create the PlaceHolder expression. The PlaceHolder /// \brief it is used to create the PlaceHolder expression. The PlaceHolder
/// expression is a copy of expression type in which the TensorMap of the has /// expression is a copy of expression type in which the TensorMap of the has
/// been replaced with PlaceHolder. /// been replaced with PlaceHolder.

View File

@ -71,7 +71,7 @@ struct AntiHermiticity
}; };
/** \class DynamicSGroup /** \class DynamicSGroup
* \ingroup TensorSymmetry_Module * \ingroup CXX11_TensorSymmetry_Module
* *
* \brief Dynamic symmetry group * \brief Dynamic symmetry group
* *
@ -88,7 +88,7 @@ class DynamicSGroup;
/** \internal /** \internal
* *
* \class DynamicSGroupFromTemplateArgs * \class DynamicSGroupFromTemplateArgs
* \ingroup TensorSymmetry_Module * \ingroup CXX11_TensorSymmetry_Module
* *
* \brief Dynamic symmetry group, initialized from template arguments * \brief Dynamic symmetry group, initialized from template arguments
* *
@ -99,7 +99,7 @@ template<typename... Gen>
class DynamicSGroupFromTemplateArgs; class DynamicSGroupFromTemplateArgs;
/** \class StaticSGroup /** \class StaticSGroup
* \ingroup TensorSymmetry_Module * \ingroup CXX11_TensorSymmetry_Module
* *
* \brief Static symmetry group * \brief Static symmetry group
* *
@ -121,7 +121,7 @@ template<typename... Gen>
class StaticSGroup; class StaticSGroup;
/** \class SGroup /** \class SGroup
* \ingroup TensorSymmetry_Module * \ingroup CXX11_TensorSymmetry_Module
* *
* \brief Symmetry group, initialized from template arguments * \brief Symmetry group, initialized from template arguments
* *
@ -179,7 +179,7 @@ template<int One_, int Two_, typename... Sym> struct tensor_symmetry_num_indices
/** \internal /** \internal
* *
* \class tensor_symmetry_pre_analysis * \class tensor_symmetry_pre_analysis
* \ingroup TensorSymmetry_Module * \ingroup CXX11_TensorSymmetry_Module
* *
* \brief Pre-select whether to use a static or dynamic symmetry group * \brief Pre-select whether to use a static or dynamic symmetry group
* *

View File

@ -13,7 +13,7 @@
namespace Eigen { namespace Eigen {
/** \class MaxSizeVector /** \class MaxSizeVector
* \ingroup Core * \ingroup Core_Module
* *
* \brief The MaxSizeVector class. * \brief The MaxSizeVector class.
* *

View File

@ -26,11 +26,11 @@ void make_coherent(const A& a, const B&b)
make_coherent_impl<A,B>::run(a.const_cast_derived(), b.const_cast_derived()); make_coherent_impl<A,B>::run(a.const_cast_derived(), b.const_cast_derived());
} }
template<typename _DerType, bool Enable> struct auto_diff_special_op; template<typename DerivativeType, bool Enable> struct auto_diff_special_op;
} // end namespace internal } // end namespace internal
template<typename _DerType> class AutoDiffScalar; template<typename DerivativeType> class AutoDiffScalar;
template<typename NewDerType> template<typename NewDerType>
inline AutoDiffScalar<NewDerType> MakeAutoDiffScalar(const typename NewDerType::Scalar& value, const NewDerType &der) { inline AutoDiffScalar<NewDerType> MakeAutoDiffScalar(const typename NewDerType::Scalar& value, const NewDerType &der) {
@ -38,16 +38,16 @@ inline AutoDiffScalar<NewDerType> MakeAutoDiffScalar(const typename NewDerType::
} }
/** \class AutoDiffScalar /** \class AutoDiffScalar
* \brief A scalar type replacement with automatic differentation capability * \brief A scalar type replacement with automatic differentiation capability
* *
* \param _DerType the vector type used to store/represent the derivatives. The base scalar type * \param DerivativeType the vector type used to store/represent the derivatives. The base scalar type
* as well as the number of derivatives to compute are determined from this type. * as well as the number of derivatives to compute are determined from this type.
* Typical choices include, e.g., \c Vector4f for 4 derivatives, or \c VectorXf * Typical choices include, e.g., \c Vector4f for 4 derivatives, or \c VectorXf
* if the number of derivatives is not known at compile time, and/or, the number * if the number of derivatives is not known at compile time, and/or, the number
* of derivatives is large. * of derivatives is large.
* Note that _DerType can also be a reference (e.g., \c VectorXf&) to wrap a * Note that DerivativeType can also be a reference (e.g., \c VectorXf&) to wrap a
* existing vector into an AutoDiffScalar. * existing vector into an AutoDiffScalar.
* Finally, _DerType can also be any Eigen compatible expression. * Finally, DerivativeType can also be any Eigen compatible expression.
* *
* This class represents a scalar value while tracking its respective derivatives using Eigen's expression * This class represents a scalar value while tracking its respective derivatives using Eigen's expression
* template mechanism. * template mechanism.
@ -63,17 +63,17 @@ inline AutoDiffScalar<NewDerType> MakeAutoDiffScalar(const typename NewDerType::
* *
*/ */
template<typename _DerType> template<typename DerivativeType>
class AutoDiffScalar class AutoDiffScalar
: public internal::auto_diff_special_op : public internal::auto_diff_special_op
<_DerType, !internal::is_same<typename internal::traits<typename internal::remove_all<_DerType>::type>::Scalar, <DerivativeType, !internal::is_same<typename internal::traits<typename internal::remove_all<DerivativeType>::type>::Scalar,
typename NumTraits<typename internal::traits<typename internal::remove_all<_DerType>::type>::Scalar>::Real>::value> typename NumTraits<typename internal::traits<typename internal::remove_all<DerivativeType>::type>::Scalar>::Real>::value>
{ {
public: public:
typedef internal::auto_diff_special_op typedef internal::auto_diff_special_op
<_DerType, !internal::is_same<typename internal::traits<typename internal::remove_all<_DerType>::type>::Scalar, <DerivativeType, !internal::is_same<typename internal::traits<typename internal::remove_all<DerivativeType>::type>::Scalar,
typename NumTraits<typename internal::traits<typename internal::remove_all<_DerType>::type>::Scalar>::Real>::value> Base; typename NumTraits<typename internal::traits<typename internal::remove_all<DerivativeType>::type>::Scalar>::Real>::value> Base;
typedef typename internal::remove_all<_DerType>::type DerType; typedef typename internal::remove_all<DerivativeType>::type DerType;
typedef typename internal::traits<DerType>::Scalar Scalar; typedef typename internal::traits<DerType>::Scalar Scalar;
typedef typename NumTraits<Scalar>::Real Real; typedef typename NumTraits<Scalar>::Real Real;
@ -382,16 +382,16 @@ class AutoDiffScalar
namespace internal { namespace internal {
template<typename _DerType> template<typename DerivativeType>
struct auto_diff_special_op<_DerType, true> struct auto_diff_special_op<DerivativeType, true>
// : auto_diff_scalar_op<_DerType, typename NumTraits<Scalar>::Real, // : auto_diff_scalar_op<DerivativeType, typename NumTraits<Scalar>::Real,
// is_same<Scalar,typename NumTraits<Scalar>::Real>::value> // is_same<Scalar,typename NumTraits<Scalar>::Real>::value>
{ {
typedef typename remove_all<_DerType>::type DerType; typedef typename remove_all<DerivativeType>::type DerType;
typedef typename traits<DerType>::Scalar Scalar; typedef typename traits<DerType>::Scalar Scalar;
typedef typename NumTraits<Scalar>::Real Real; typedef typename NumTraits<Scalar>::Real Real;
// typedef auto_diff_scalar_op<_DerType, typename NumTraits<Scalar>::Real, // typedef auto_diff_scalar_op<DerivativeType, typename NumTraits<Scalar>::Real,
// is_same<Scalar,typename NumTraits<Scalar>::Real>::value> Base; // is_same<Scalar,typename NumTraits<Scalar>::Real>::value> Base;
// using Base::operator+; // using Base::operator+;
@ -401,8 +401,8 @@ struct auto_diff_special_op<_DerType, true>
// using Base::operator*; // using Base::operator*;
// using Base::operator*=; // using Base::operator*=;
const AutoDiffScalar<_DerType>& derived() const { return *static_cast<const AutoDiffScalar<_DerType>*>(this); } const AutoDiffScalar<DerivativeType>& derived() const { return *static_cast<const AutoDiffScalar<DerivativeType>*>(this); }
AutoDiffScalar<_DerType>& derived() { return *static_cast<AutoDiffScalar<_DerType>*>(this); } AutoDiffScalar<DerivativeType>& derived() { return *static_cast<AutoDiffScalar<DerivativeType>*>(this); }
inline const AutoDiffScalar<DerType&> operator+(const Real& other) const inline const AutoDiffScalar<DerType&> operator+(const Real& other) const
@ -410,12 +410,12 @@ struct auto_diff_special_op<_DerType, true>
return AutoDiffScalar<DerType&>(derived().value() + other, derived().derivatives()); return AutoDiffScalar<DerType&>(derived().value() + other, derived().derivatives());
} }
friend inline const AutoDiffScalar<DerType&> operator+(const Real& a, const AutoDiffScalar<_DerType>& b) friend inline const AutoDiffScalar<DerType&> operator+(const Real& a, const AutoDiffScalar<DerivativeType>& b)
{ {
return AutoDiffScalar<DerType&>(a + b.value(), b.derivatives()); return AutoDiffScalar<DerType&>(a + b.value(), b.derivatives());
} }
inline AutoDiffScalar<_DerType>& operator+=(const Real& other) inline AutoDiffScalar<DerivativeType>& operator+=(const Real& other)
{ {
derived().value() += other; derived().value() += other;
return derived(); return derived();
@ -431,22 +431,22 @@ struct auto_diff_special_op<_DerType, true>
} }
friend inline const AutoDiffScalar<typename CwiseUnaryOp<bind1st_op<scalar_product_op<Real,Scalar> >, DerType>::Type > friend inline const AutoDiffScalar<typename CwiseUnaryOp<bind1st_op<scalar_product_op<Real,Scalar> >, DerType>::Type >
operator*(const Real& other, const AutoDiffScalar<_DerType>& a) operator*(const Real& other, const AutoDiffScalar<DerivativeType>& a)
{ {
return AutoDiffScalar<typename CwiseUnaryOp<bind1st_op<scalar_product_op<Real,Scalar> >, DerType>::Type >( return AutoDiffScalar<typename CwiseUnaryOp<bind1st_op<scalar_product_op<Real,Scalar> >, DerType>::Type >(
a.value() * other, a.value() * other,
a.derivatives() * other); a.derivatives() * other);
} }
inline AutoDiffScalar<_DerType>& operator*=(const Scalar& other) inline AutoDiffScalar<DerivativeType>& operator*=(const Scalar& other)
{ {
*this = *this * other; *this = *this * other;
return derived(); return derived();
} }
}; };
template<typename _DerType> template<typename DerivativeType>
struct auto_diff_special_op<_DerType, false> struct auto_diff_special_op<DerivativeType, false>
{ {
void operator*() const; void operator*() const;
void operator-() const; void operator-() const;
@ -565,6 +565,11 @@ struct ScalarBinaryOpTraits<typename DerType::Scalar,AutoDiffScalar<DerType>, Bi
CODE; \ CODE; \
} }
template<typename DerType>
struct CleanedUpDerType {
typedef AutoDiffScalar<typename Eigen::internal::remove_all<DerType>::type::PlainObject> type;
};
template<typename DerType> template<typename DerType>
inline const AutoDiffScalar<DerType>& conj(const AutoDiffScalar<DerType>& x) { return x; } inline const AutoDiffScalar<DerType>& conj(const AutoDiffScalar<DerType>& x) { return x; }
template<typename DerType> template<typename DerType>
@ -572,31 +577,31 @@ inline const AutoDiffScalar<DerType>& real(const AutoDiffScalar<DerType>& x) {
template<typename DerType> template<typename DerType>
inline typename DerType::Scalar imag(const AutoDiffScalar<DerType>&) { return 0.; } inline typename DerType::Scalar imag(const AutoDiffScalar<DerType>&) { return 0.; }
template<typename DerType, typename T> template<typename DerType, typename T>
inline AutoDiffScalar<typename Eigen::internal::remove_all<DerType>::type::PlainObject> (min)(const AutoDiffScalar<DerType>& x, const T& y) { inline typename CleanedUpDerType<DerType>::type (min)(const AutoDiffScalar<DerType>& x, const T& y) {
typedef AutoDiffScalar<typename Eigen::internal::remove_all<DerType>::type::PlainObject> ADS; typedef typename CleanedUpDerType<DerType>::type ADS;
return (x <= y ? ADS(x) : ADS(y)); return (x <= y ? ADS(x) : ADS(y));
} }
template<typename DerType, typename T> template<typename DerType, typename T>
inline AutoDiffScalar<typename Eigen::internal::remove_all<DerType>::type::PlainObject> (max)(const AutoDiffScalar<DerType>& x, const T& y) { inline typename CleanedUpDerType<DerType>::type (max)(const AutoDiffScalar<DerType>& x, const T& y) {
typedef AutoDiffScalar<typename Eigen::internal::remove_all<DerType>::type::PlainObject> ADS; typedef typename CleanedUpDerType<DerType>::type ADS;
return (x >= y ? ADS(x) : ADS(y)); return (x >= y ? ADS(x) : ADS(y));
} }
template<typename DerType, typename T> template<typename DerType, typename T>
inline AutoDiffScalar<typename Eigen::internal::remove_all<DerType>::type::PlainObject> (min)(const T& x, const AutoDiffScalar<DerType>& y) { inline typename CleanedUpDerType<DerType>::type (min)(const T& x, const AutoDiffScalar<DerType>& y) {
typedef AutoDiffScalar<typename Eigen::internal::remove_all<DerType>::type::PlainObject> ADS; typedef typename CleanedUpDerType<DerType>::type ADS;
return (x < y ? ADS(x) : ADS(y)); return (x < y ? ADS(x) : ADS(y));
} }
template<typename DerType, typename T> template<typename DerType, typename T>
inline AutoDiffScalar<typename Eigen::internal::remove_all<DerType>::type::PlainObject> (max)(const T& x, const AutoDiffScalar<DerType>& y) { inline typename CleanedUpDerType<DerType>::type (max)(const T& x, const AutoDiffScalar<DerType>& y) {
typedef AutoDiffScalar<typename Eigen::internal::remove_all<DerType>::type::PlainObject> ADS; typedef typename CleanedUpDerType<DerType>::type ADS;
return (x > y ? ADS(x) : ADS(y)); return (x > y ? ADS(x) : ADS(y));
} }
template<typename DerType> template<typename DerType>
inline AutoDiffScalar<typename Eigen::internal::remove_all<DerType>::type::PlainObject> (min)(const AutoDiffScalar<DerType>& x, const AutoDiffScalar<DerType>& y) { inline typename CleanedUpDerType<DerType>::type (min)(const AutoDiffScalar<DerType>& x, const AutoDiffScalar<DerType>& y) {
return (x.value() < y.value() ? x : y); return (x.value() < y.value() ? x : y);
} }
template<typename DerType> template<typename DerType>
inline AutoDiffScalar<typename Eigen::internal::remove_all<DerType>::type::PlainObject> (max)(const AutoDiffScalar<DerType>& x, const AutoDiffScalar<DerType>& y) { inline typename CleanedUpDerType<DerType>::type (max)(const AutoDiffScalar<DerType>& x, const AutoDiffScalar<DerType>& y) {
return (x.value() >= y.value() ? x : y); return (x.value() >= y.value() ? x : y);
} }
@ -711,10 +716,15 @@ template<typename DerType> struct NumTraits<AutoDiffScalar<DerType> >
} }
namespace std { namespace std {
template <typename T> template <typename T>
class numeric_limits<Eigen::AutoDiffScalar<T> > class numeric_limits<Eigen::AutoDiffScalar<T> >
: public numeric_limits<typename T::Scalar> {}; : public numeric_limits<typename T::Scalar> {};
template <typename T>
class numeric_limits<Eigen::AutoDiffScalar<T&> >
: public numeric_limits<typename T::Scalar> {};
} // namespace std } // namespace std
#endif // EIGEN_AUTODIFF_SCALAR_H #endif // EIGEN_AUTODIFF_SCALAR_H

View File

@ -351,6 +351,7 @@ namespace Eigen
#define EIGEN_EULER_ANGLES_SINGLE_TYPEDEF(AXES, SCALAR_TYPE, SCALAR_POSTFIX) \ #define EIGEN_EULER_ANGLES_SINGLE_TYPEDEF(AXES, SCALAR_TYPE, SCALAR_POSTFIX) \
/** \ingroup EulerAngles_Module */ \ /** \ingroup EulerAngles_Module */ \
/** \brief \noop */ \
typedef EulerAngles<SCALAR_TYPE, EulerSystem##AXES> EulerAngles##AXES##SCALAR_POSTFIX; typedef EulerAngles<SCALAR_TYPE, EulerSystem##AXES> EulerAngles##AXES##SCALAR_POSTFIX;
#define EIGEN_EULER_ANGLES_TYPEDEFS(SCALAR_TYPE, SCALAR_POSTFIX) \ #define EIGEN_EULER_ANGLES_TYPEDEFS(SCALAR_TYPE, SCALAR_POSTFIX) \

View File

@ -305,6 +305,7 @@ namespace Eigen
#define EIGEN_EULER_SYSTEM_TYPEDEF(A, B, C) \ #define EIGEN_EULER_SYSTEM_TYPEDEF(A, B, C) \
/** \ingroup EulerAngles_Module */ \ /** \ingroup EulerAngles_Module */ \
/** \brief \noop */ \
typedef EulerSystem<EULER_##A, EULER_##B, EULER_##C> EulerSystem##A##B##C; typedef EulerSystem<EULER_##A, EULER_##B, EULER_##C> EulerSystem##A##B##C;
EIGEN_EULER_SYSTEM_TYPEDEF(X,Y,Z) EIGEN_EULER_SYSTEM_TYPEDEF(X,Y,Z)

View File

@ -57,7 +57,7 @@ void sortWithPermutation (VectorType& vec, IndexType& perm, typename IndexType::
} }
/** /**
* \ingroup IterativeLInearSolvers_Module * \ingroup IterativeLinearSolvers_Module
* \brief A Restarted GMRES with deflation. * \brief A Restarted GMRES with deflation.
* This class implements a modification of the GMRES solver for * This class implements a modification of the GMRES solver for
* sparse linear systems. The basis is built with modified * sparse linear systems. The basis is built with modified

View File

@ -1,7 +1,7 @@
/// \brief Namespace containing all symbols from the %Eigen library. /// \brief Namespace containing all symbols from the %Eigen library.
namespace Eigen { namespace Eigen {
/** \mainpage %Eigen's unsupported modules /** \mainpage notitle
This is the API documentation for %Eigen's unsupported modules. This is the API documentation for %Eigen's unsupported modules.
@ -26,3 +26,4 @@ subject to be included in %Eigen in the future.
/// \internal \brief Namespace containing low-level routines from the %Eigen library. /// \internal \brief Namespace containing low-level routines from the %Eigen library.
namespace internal {} namespace internal {}
} }

View File

@ -1,66 +1,103 @@
<?xml version="1.0"?> <?xml version="1.0" encoding="UTF-8"?>
<doxygenlayout version="1.0"> <doxygenlayout version="1.0">
<!-- Generated by doxygen 1.13.0 -->
<!-- Navigation index tabs for HTML output --> <!-- Navigation index tabs for HTML output -->
<navindex> <navindex>
<tab type="user" url="index.html" title="Overview" /> <tab type="mainpage" visible="no" title="main"/>
<tab type="modules" visible="yes" title="Unsupported Modules" intro=""/> <tab type="pages" visible="yes" title="" intro=""/>
<!-- <tab type="mainpage" visible="yes" title=""/> --> <tab type="topics" visible="yes" title="Chapters" intro=""/>
<tab type="classlist" visible="yes" title="" intro=""/> <tab type="modules" visible="yes" title="" intro="">
<!-- <tab type="classmembers" visible="yes" title="" intro=""/> --> <tab type="modulelist" visible="yes" title="" intro=""/>
<tab type="modulemembers" visible="yes" title="" intro=""/>
</tab>
<tab type="namespaces" visible="no" title="">
<tab type="namespacelist" visible="yes" title="" intro=""/>
<tab type="namespacemembers" visible="yes" title="" intro=""/>
</tab>
<tab type="concepts" visible="yes" title="">
</tab>
<tab type="interfaces" visible="yes" title="">
<tab type="interfacelist" visible="yes" title="" intro=""/>
<tab type="interfaceindex" visible="$ALPHABETICAL_INDEX" title=""/>
<tab type="interfacehierarchy" visible="yes" title="" intro=""/>
</tab>
<tab type="classes" visible="yes" title="">
<tab type="classlist" visible="yes" title="" intro=""/>
<tab type="classindex" visible="$ALPHABETICAL_INDEX" title=""/>
<tab type="hierarchy" visible="yes" title="" intro=""/>
<tab type="classmembers" visible="yes" title="" intro=""/>
</tab>
<tab type="structs" visible="yes" title="">
<tab type="structlist" visible="yes" title="" intro=""/>
<tab type="structindex" visible="$ALPHABETICAL_INDEX" title=""/>
</tab>
<tab type="exceptions" visible="yes" title="">
<tab type="exceptionlist" visible="yes" title="" intro=""/>
<tab type="exceptionindex" visible="$ALPHABETICAL_INDEX" title=""/>
<tab type="exceptionhierarchy" visible="yes" title="" intro=""/>
</tab>
<tab type="files" visible="yes" title="">
<tab type="filelist" visible="yes" title="" intro=""/>
<tab type="globals" visible="yes" title="" intro=""/>
</tab>
<tab type="examples" visible="yes" title="" intro=""/>
</navindex> </navindex>
<!-- Layout definition for a class page --> <!-- Layout definition for a class page -->
<class> <class>
<briefdescription visible="no"/> <briefdescription visible="no"/>
<includes visible="$SHOW_INCLUDE_FILES"/> <includes visible="$SHOW_HEADERFILE"/>
<detaileddescription title=""/> <detaileddescription visible="yes" title=""/>
<inheritancegraph visible="$CLASS_GRAPH"/> <inheritancegraph visible="$CLASS_GRAPH"/>
<collaborationgraph visible="$COLLABORATION_GRAPH"/> <collaborationgraph visible="$COLLABORATION_GRAPH"/>
<allmemberslink visible="yes"/>
<memberdecl> <memberdecl>
<nestedclasses visible="yes" title=""/> <nestedclasses visible="yes" title=""/>
<publictypes title=""/> <publictypes visible="yes" title=""/>
<publicslots title=""/> <services visible="yes" title=""/>
<signals title=""/> <interfaces visible="yes" title=""/>
<publicmethods title=""/> <publicslots visible="yes" title=""/>
<publicstaticmethods title=""/> <signals visible="yes" title=""/>
<publicattributes title=""/> <publicmethods visible="yes" title=""/>
<publicstaticattributes title=""/> <publicstaticmethods visible="yes" title=""/>
<protectedtypes title=""/> <publicattributes visible="yes" title=""/>
<protectedslots title=""/> <publicstaticattributes visible="yes" title=""/>
<protectedmethods title=""/> <protectedtypes visible="yes" title=""/>
<protectedstaticmethods title=""/> <protectedslots visible="yes" title=""/>
<protectedattributes title=""/> <protectedmethods visible="yes" title=""/>
<protectedstaticattributes title=""/> <protectedstaticmethods visible="yes" title=""/>
<packagetypes title=""/> <protectedattributes visible="yes" title=""/>
<packagemethods title=""/> <protectedstaticattributes visible="yes" title=""/>
<packagestaticmethods title=""/> <packagetypes visible="yes" title=""/>
<packageattributes title=""/> <packagemethods visible="yes" title=""/>
<packagestaticattributes title=""/> <packagestaticmethods visible="yes" title=""/>
<properties title=""/> <packageattributes visible="yes" title=""/>
<events title=""/> <packagestaticattributes visible="yes" title=""/>
<privatetypes title=""/> <properties visible="yes" title=""/>
<privateslots title=""/> <events visible="yes" title=""/>
<privatemethods title=""/> <privatetypes visible="yes" title=""/>
<privatestaticmethods title=""/> <privateslots visible="yes" title=""/>
<privateattributes title=""/> <privatemethods visible="yes" title=""/>
<privatestaticattributes title=""/> <privatestaticmethods visible="yes" title=""/>
<friends title=""/> <privateattributes visible="yes" title=""/>
<related title="" subtitle=""/> <privatestaticattributes visible="yes" title=""/>
<friends visible="yes" title=""/>
<related visible="yes" title="" subtitle=""/>
<membergroups visible="yes"/> <membergroups visible="yes"/>
</memberdecl> </memberdecl>
<memberdef> <memberdef>
<inlineclasses title=""/> <inlineclasses visible="yes" title=""/>
<typedefs title=""/> <typedefs visible="yes" title=""/>
<enums title=""/> <enums visible="yes" title=""/>
<constructors title=""/> <services visible="yes" title=""/>
<functions title=""/> <interfaces visible="yes" title=""/>
<related title=""/> <constructors visible="yes" title=""/>
<variables title=""/> <functions visible="yes" title=""/>
<properties title=""/> <related visible="yes" title=""/>
<events title=""/> <variables visible="yes" title=""/>
<properties visible="yes" title=""/>
<events visible="yes" title=""/>
</memberdef> </memberdef>
<allmemberslink visible="yes"/>
<usedfiles visible="$SHOW_USED_FILES"/> <usedfiles visible="$SHOW_USED_FILES"/>
<authorsection visible="yes"/> <authorsection visible="yes"/>
</class> </class>
@ -70,24 +107,44 @@
<briefdescription visible="yes"/> <briefdescription visible="yes"/>
<memberdecl> <memberdecl>
<nestednamespaces visible="yes" title=""/> <nestednamespaces visible="yes" title=""/>
<constantgroups visible="yes" title=""/>
<interfaces visible="yes" title=""/>
<classes visible="yes" title=""/> <classes visible="yes" title=""/>
<typedefs title=""/> <concepts visible="yes" title=""/>
<enums title=""/> <structs visible="yes" title=""/>
<functions title=""/> <exceptions visible="yes" title=""/>
<variables title=""/> <typedefs visible="yes" title=""/>
<membergroups visible="yes"/> <sequences visible="yes" title=""/>
<dictionaries visible="yes" title=""/>
<enums visible="yes" title=""/>
<functions visible="yes" title=""/>
<variables visible="yes" title=""/>
<properties visible="yes" title=""/>
<membergroups visible="yes" visible="yes"/>
</memberdecl> </memberdecl>
<detaileddescription title=""/> <detaileddescription visible="yes" title=""/>
<memberdef> <memberdef>
<inlineclasses title=""/> <inlineclasses visible="yes" title=""/>
<typedefs title=""/> <typedefs visible="yes" title=""/>
<enums title=""/> <sequences visible="yes" title=""/>
<functions title=""/> <dictionaries visible="yes" title=""/>
<variables title=""/> <enums visible="yes" title=""/>
<functions visible="yes" title=""/>
<variables visible="yes" title=""/>
<properties visible="yes" title=""/>
</memberdef> </memberdef>
<authorsection visible="yes"/> <authorsection visible="yes"/>
</namespace> </namespace>
<!-- Layout definition for a concept page -->
<concept>
<briefdescription visible="yes"/>
<includes visible="$SHOW_HEADERFILE"/>
<definition visible="yes" title=""/>
<detaileddescription visible="yes" title=""/>
<authorsection visible="yes"/>
</concept>
<!-- Layout definition for a file page --> <!-- Layout definition for a file page -->
<file> <file>
<briefdescription visible="yes"/> <briefdescription visible="yes"/>
@ -96,23 +153,34 @@
<includedbygraph visible="$INCLUDED_BY_GRAPH"/> <includedbygraph visible="$INCLUDED_BY_GRAPH"/>
<sourcelink visible="yes"/> <sourcelink visible="yes"/>
<memberdecl> <memberdecl>
<interfaces visible="yes" title=""/>
<classes visible="yes" title=""/> <classes visible="yes" title=""/>
<structs visible="yes" title=""/>
<exceptions visible="yes" title=""/>
<namespaces visible="yes" title=""/> <namespaces visible="yes" title=""/>
<defines title=""/> <concepts visible="yes" title=""/>
<typedefs title=""/> <constantgroups visible="yes" title=""/>
<enums title=""/> <defines visible="yes" title=""/>
<functions title=""/> <typedefs visible="yes" title=""/>
<variables title=""/> <sequences visible="yes" title=""/>
<membergroups visible="yes"/> <dictionaries visible="yes" title=""/>
<enums visible="yes" title=""/>
<functions visible="yes" title=""/>
<variables visible="yes" title=""/>
<properties visible="yes" title=""/>
<membergroups visible="yes" visible="yes"/>
</memberdecl> </memberdecl>
<detaileddescription title=""/> <detaileddescription visible="yes" title=""/>
<memberdef> <memberdef>
<inlineclasses title=""/> <inlineclasses visible="yes" title=""/>
<defines title=""/> <defines visible="yes" title=""/>
<typedefs title=""/> <typedefs visible="yes" title=""/>
<enums title=""/> <sequences visible="yes" title=""/>
<functions title=""/> <dictionaries visible="yes" title=""/>
<variables title=""/> <enums visible="yes" title=""/>
<functions visible="yes" title=""/>
<variables visible="yes" title=""/>
<properties visible="yes" title=""/>
</memberdef> </memberdef>
<authorsection/> <authorsection/>
</file> </file>
@ -120,50 +188,74 @@
<!-- Layout definition for a group page --> <!-- Layout definition for a group page -->
<group> <group>
<briefdescription visible="no"/> <briefdescription visible="no"/>
<detaileddescription title=""/> <detaileddescription visible="yes" title=""/>
<groupgraph visible="$GROUP_GRAPHS"/> <groupgraph visible="$GROUP_GRAPHS"/>
<memberdecl> <memberdecl>
<nestedgroups visible="yes" title=""/> <nestedgroups visible="yes" title=""/>
<modules visible="yes" title=""/>
<dirs visible="yes" title=""/> <dirs visible="yes" title=""/>
<files visible="yes" title=""/> <files visible="yes" title=""/>
<namespaces visible="yes" title=""/> <namespaces visible="yes" title=""/>
<concepts visible="yes" title=""/>
<classes visible="yes" title=""/> <classes visible="yes" title=""/>
<defines title=""/> <defines visible="yes" title=""/>
<typedefs title=""/> <typedefs visible="yes" title=""/>
<enums title=""/> <sequences visible="yes" title=""/>
<enumvalues title=""/> <dictionaries visible="yes" title=""/>
<functions title=""/> <enums visible="yes" title=""/>
<variables title=""/> <enumvalues visible="yes" title=""/>
<signals title=""/> <functions visible="yes" title=""/>
<publicslots title=""/> <variables visible="yes" title=""/>
<protectedslots title=""/> <signals visible="yes" title=""/>
<privateslots title=""/> <publicslots visible="yes" title=""/>
<events title=""/> <protectedslots visible="yes" title=""/>
<properties title=""/> <privateslots visible="yes" title=""/>
<friends title=""/> <events visible="yes" title=""/>
<properties visible="yes" title=""/>
<friends visible="yes" title=""/>
<membergroups visible="yes"/> <membergroups visible="yes"/>
</memberdecl> </memberdecl>
<memberdef> <memberdef>
<pagedocs/> <pagedocs/>
<inlineclasses title=""/> <inlineclasses visible="yes" title=""/>
<defines title=""/> <defines visible="yes" title=""/>
<typedefs title=""/> <typedefs visible="yes" title=""/>
<enums title=""/> <sequences visible="yes" title=""/>
<enumvalues title=""/> <dictionaries visible="yes" title=""/>
<functions title=""/> <enums visible="yes" title=""/>
<variables title=""/> <enumvalues visible="yes" title=""/>
<signals title=""/> <functions visible="yes" title=""/>
<publicslots title=""/> <variables visible="yes" title=""/>
<protectedslots title=""/> <signals visible="yes" title=""/>
<privateslots title=""/> <publicslots visible="yes" title=""/>
<events title=""/> <protectedslots visible="yes" title=""/>
<properties title=""/> <privateslots visible="yes" title=""/>
<friends title=""/> <events visible="yes" title=""/>
<properties visible="yes" title=""/>
<friends visible="yes" title=""/>
</memberdef> </memberdef>
<authorsection visible="yes"/> <authorsection visible="yes"/>
</group> </group>
<!-- Layout definition for a C++20 module page -->
<module>
<briefdescription visible="yes"/>
<exportedmodules visible="yes"/>
<memberdecl>
<concepts visible="yes" title=""/>
<classes visible="yes" title=""/>
<enums visible="yes" title=""/>
<typedefs visible="yes" title=""/>
<functions visible="yes" title=""/>
<variables visible="yes" title=""/>
<membergroups visible="yes" title=""/>
</memberdecl>
<detaileddescription visible="yes" title=""/>
<memberdecl>
<files visible="yes"/>
</memberdecl>
</module>
<!-- Layout definition for a directory page --> <!-- Layout definition for a directory page -->
<directory> <directory>
<briefdescription visible="yes"/> <briefdescription visible="yes"/>
@ -172,6 +264,6 @@
<dirs visible="yes"/> <dirs visible="yes"/>
<files visible="yes"/> <files visible="yes"/>
</memberdecl> </memberdecl>
<detaileddescription title=""/> <detaileddescription visible="yes" title=""/>
</directory> </directory>
</doxygenlayout> </doxygenlayout>

View File

@ -1,26 +1,26 @@
FILE(GLOB snippets_SRCS "*.cpp") file(GLOB snippets_SRCS "*.cpp")
ADD_CUSTOM_TARGET(unsupported_snippets) add_custom_target(unsupported_snippets)
FOREACH(snippet_src ${snippets_SRCS}) foreach(snippet_src ${snippets_SRCS})
GET_FILENAME_COMPONENT(snippet ${snippet_src} NAME_WE) get_filename_component(snippet ${snippet_src} NAME_WE)
SET(compile_snippet_target compile_${snippet}) set(compile_snippet_target compile_${snippet})
SET(compile_snippet_src ${compile_snippet_target}.cpp) set(compile_snippet_src ${compile_snippet_target}.cpp)
FILE(READ ${snippet_src} snippet_source_code) file(READ ${snippet_src} snippet_source_code)
CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/doc/snippets/compile_snippet.cpp.in configure_file(${PROJECT_SOURCE_DIR}/doc/snippets/compile_snippet.cpp.in
${CMAKE_CURRENT_BINARY_DIR}/${compile_snippet_src}) ${CMAKE_CURRENT_BINARY_DIR}/${compile_snippet_src})
ADD_EXECUTABLE(${compile_snippet_target} add_executable(${compile_snippet_target}
${CMAKE_CURRENT_BINARY_DIR}/${compile_snippet_src}) ${CMAKE_CURRENT_BINARY_DIR}/${compile_snippet_src})
if(EIGEN_STANDARD_LIBRARIES_TO_LINK_TO) if(EIGEN_STANDARD_LIBRARIES_TO_LINK_TO)
target_link_libraries(${compile_snippet_target} ${EIGEN_STANDARD_LIBRARIES_TO_LINK_TO}) target_link_libraries(${compile_snippet_target} ${EIGEN_STANDARD_LIBRARIES_TO_LINK_TO})
endif() endif()
ADD_CUSTOM_COMMAND( add_custom_command(
TARGET ${compile_snippet_target} TARGET ${compile_snippet_target}
POST_BUILD POST_BUILD
COMMAND ${compile_snippet_target} COMMAND ${compile_snippet_target}
ARGS >${CMAKE_CURRENT_BINARY_DIR}/${snippet}.out ARGS >${CMAKE_CURRENT_BINARY_DIR}/${snippet}.out
) )
ADD_DEPENDENCIES(unsupported_snippets ${compile_snippet_target}) add_dependencies(unsupported_snippets ${compile_snippet_target})
set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/${compile_snippet_src} set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/${compile_snippet_src}
PROPERTIES OBJECT_DEPENDS ${snippet_src}) PROPERTIES OBJECT_DEPENDS ${snippet_src})
ENDFOREACH(snippet_src) endforeach(snippet_src)