Big changes in Eigen documentation:

- Organize the documentation into "chapters".
  - Each chapter include many documentation pages, reference pages organized as modules, and a quick reference page.
  - The "Chapters" tree is created using the defgroup/ingroup mechanism, even for the documentation pages (i.e., .dox files for which I added an \eigenManualPage macro that we can switch between \page or \defgroup ).
  - Add a "General topics" entry for all pages that do not fit well in the previous "chapters".
  - The highlevel struture is managed by a new eigendoxy_layout.xml file.
- remove the "index" and quite useless pages (namespace list, class hierarchy, member list, file list, etc.)
- add the javascript search-engine.
- add the "treeview" panel.
- remove \tableofcontents (replace them by a custom \eigenAutoToc macro to be able to easily re-enable if needed).
- add javascript to automatically generate a TOC from the h1/h2 tags of the current page, and put the TOC in the left side panel.
- overload various javascript function generated by doxygen to:
  - remove the root of the treeview
  - remove links to section/subsection from the treeview
  - automatically expand the "Chapters" section
  - automatically expand the current section
  - adjust the height of the treeview to take into account the TOC
- always use the default .css file, eigendoxy.css now only includes our modifications
- use Doxyfile to specify our logo
- remove cross references to unsupported modules (temporarily)
This commit is contained in:
Gael Guennebaud 2013-01-05 16:37:11 +01:00
parent eac676ff6c
commit 93ee82b1fd
49 changed files with 689 additions and 1391 deletions

View File

@ -242,10 +242,6 @@ using std::ptrdiff_t;
* \endcode
*/
/** \defgroup Support_modules Support modules [category]
* Category of modules which add support for external libraries.
*/
#include "src/Core/util/Constants.h"
#include "src/Core/util/ForwardDeclarations.h"
#include "src/Core/util/Meta.h"

View File

@ -6,7 +6,7 @@
#include "src/Core/util/DisableStupidWarnings.h"
/** \ingroup Sparse_modules
/**
* \defgroup IterativeLinearSolvers_Module IterativeLinearSolvers module
*
* This module currently provides iterative methods to solve problems of the form \c A \c x = \c b, where \c A is a squared matrix, usually very large and sparse.

View File

@ -5,7 +5,7 @@
#include "src/Core/util/DisableStupidWarnings.h"
/** \ingroup Sparse_modules
/**
* \defgroup OrderingMethods_Module OrderingMethods module
*
* This module is currently for internal use only.

View File

@ -1,7 +1,7 @@
#ifndef EIGEN_SPARSE_MODULE_H
#define EIGEN_SPARSE_MODULE_H
/** \defgroup Sparse_modules Sparse modules
/** defgroup Sparse_modules Sparse modules
*
* Meta-module including all related modules:
* - SparseCore

View File

@ -5,7 +5,7 @@
#include "src/Core/util/DisableStupidWarnings.h"
/** \ingroup Sparse_modules
/**
* \defgroup SparseCholesky_Module SparseCholesky module
*
* This module currently provides two variants of the direct sparse Cholesky decomposition for selfadjoint (hermitian) matrices.

View File

@ -11,7 +11,7 @@
#include <cstring>
#include <algorithm>
/** \ingroup Sparse_modules
/**
* \defgroup SparseCore_Module SparseCore module
*
* This module provides a sparse matrix representation, and basic associatd matrix manipulations

View File

@ -4,7 +4,7 @@
#include "SparseCore"
/** \ingroup Sparse_modules
/**
* \defgroup SparseLU_Module SparseLU module
*
*/

View File

@ -5,11 +5,11 @@ namespace Eigen {
This page lists the most important API changes between Eigen2 and Eigen3,
and gives tips to help porting your application from Eigen2 to Eigen3.
\tableofcontents
\eigenAutoToc
\section CompatibilitySupport Eigen2 compatibility support
In order to ease the switch from Eigen2 to Eigen3, Eigen3 features \ref Eigen2SupportModes "Eigen2 support modes".
In order to ease the switch from Eigen2 to Eigen3, Eigen3 features \subpage Eigen2SupportModes "Eigen2 support modes".
The quick way to enable this is to define the \c EIGEN2_SUPPORT preprocessor token \b before including any Eigen header (typically it should be set in your project options).

View File

@ -5,7 +5,7 @@ namespace Eigen {
This page documents the Eigen2 support modes, a powerful tool to help migrating your project from Eigen 2 to Eigen 3.
Don't miss our page on \ref Eigen2ToEigen3 "API changes" between Eigen 2 and Eigen 3.
\tableofcontents
\eigenAutoToc
\section EIGEN2_SUPPORT_Macro The quick way: define EIGEN2_SUPPORT

View File

@ -2,7 +2,7 @@ namespace Eigen {
/** \page Experimental Experimental parts of Eigen
\tableofcontents
\eigenAutoToc
\section summary Summary

View File

@ -1,9 +1,8 @@
namespace Eigen {
/** \page GettingStarted Getting started
\ingroup Tutorial
\tableofcontents
\eigenAutoToc
This is a very short guide on how to get started with Eigen. It has a dual purpose. It serves as a minimal introduction to the Eigen library for people who want to start coding as soon as possible. You can also read this page as the first part of the Tutorial, which explains the library in more detail; in this case you will continue with \ref TutorialMatrixClass.

View File

@ -1,8 +1,6 @@
namespace Eigen {
/** \page TutorialMatrixClass Tutorial page 1 - The %Matrix class
\ingroup Tutorial
/** \eigenManualPage TutorialMatrixClass The Matrix class
\li \b Previous: \ref GettingStarted
\li \b Next: \ref TutorialMatrixArithmetic
@ -10,7 +8,7 @@ namespace Eigen {
We assume that you have already read the quick \link GettingStarted "getting started" \endlink tutorial.
This page is the first one in a much longer multi-page tutorial.
\tableofcontents
\eigenAutoToc
In Eigen, all matrices and vectors are objects of the Matrix template class.
Vectors are just a special case of matrices, with either 1 row or 1 column.

View File

@ -1,7 +1,6 @@
namespace Eigen {
/** \page TutorialMatrixArithmetic Tutorial page 2 - %Matrix and vector arithmetic
\ingroup Tutorial
/** \eigenManualPage TutorialMatrixArithmetic Matrix and vector arithmetic
\li \b Previous: \ref TutorialMatrixClass
\li \b Next: \ref TutorialArrayClass
@ -9,7 +8,7 @@ namespace Eigen {
This tutorial aims to provide an overview and some details on how to perform arithmetic
between matrices, vectors and scalars with Eigen.
\tableofcontents
\eigenAutoToc
\section TutorialArithmeticIntroduction Introduction

View File

@ -1,7 +1,6 @@
namespace Eigen {
/** \page TutorialArrayClass Tutorial page 3 - The %Array class and coefficient-wise operations
\ingroup Tutorial
/** \eigenManualPage TutorialArrayClass The Array class and coefficient-wise operations
\li \b Previous: \ref TutorialMatrixArithmetic
\li \b Next: \ref TutorialBlockOperations
@ -9,7 +8,7 @@ namespace Eigen {
This tutorial aims to provide an overview and explanations on how to use
Eigen's Array class.
\tableofcontents
\eigenAutoToc
\section TutorialArrayClassIntro What is the Array class?

View File

@ -1,7 +1,6 @@
namespace Eigen {
/** \page TutorialBlockOperations Tutorial page 4 - %Block operations
\ingroup Tutorial
/** \eigenManualPage TutorialBlockOperations Block operations
\li \b Previous: \ref TutorialArrayClass
\li \b Next: \ref TutorialAdvancedInitialization
@ -11,7 +10,7 @@ A block is a rectangular part of a matrix or array. Blocks expressions can be us
as rvalues and as lvalues. As usual with Eigen expressions, this abstraction has zero runtime cost
provided that you let your compiler optimize.
\tableofcontents
\eigenAutoToc
\section TutorialBlockOperationsUsing Using block operations

View File

@ -1,7 +1,6 @@
namespace Eigen {
/** \page TutorialAdvancedInitialization Tutorial page 5 - Advanced initialization
\ingroup Tutorial
/** \eigenManualPage TutorialAdvancedInitialization Advanced initialization
\li \b Previous: \ref TutorialBlockOperations
\li \b Next: \ref TutorialLinearAlgebra
@ -10,7 +9,7 @@ This page discusses several advanced methods for initializing matrices. It gives
comma-initializer, which was introduced before. It also explains how to get special matrices such as the
identity matrix and the zero matrix.
\tableofcontents
\eigenAutoToc
\section TutorialAdvancedInitializationCommaInitializer The comma initializer

View File

@ -1,7 +1,6 @@
namespace Eigen {
/** \page TutorialLinearAlgebra Tutorial page 6 - Linear algebra and decompositions
\ingroup Tutorial
/** \eigenManualPage TutorialLinearAlgebra Linear algebra and decompositions
\li \b Previous: \ref TutorialAdvancedInitialization
\li \b Next: \ref TutorialReductionsVisitorsBroadcasting
@ -10,7 +9,7 @@ This tutorial explains how to solve linear systems, compute various decompositio
QR, %SVD, eigendecompositions... for more advanced topics, don't miss our special page on
\ref TopicLinearAlgebraDecompositions "this topic".
\tableofcontents
\eigenAutoToc
\section TutorialLinAlgBasicSolve Basic linear solving

View File

@ -1,7 +1,6 @@
namespace Eigen {
/** \page TutorialReductionsVisitorsBroadcasting Tutorial page 7 - Reductions, visitors and broadcasting
\ingroup Tutorial
/** \eigenManualPage TutorialReductionsVisitorsBroadcasting Reductions, visitors and broadcasting
\li \b Previous: \ref TutorialLinearAlgebra
\li \b Next: \ref TutorialGeometry
@ -9,7 +8,7 @@ namespace Eigen {
This tutorial explains Eigen's reductions, visitors and broadcasting and how they are used with
\link MatrixBase matrices \endlink and \link ArrayBase arrays \endlink.
\tableofcontents
\eigenAutoToc
\section TutorialReductionsVisitorsBroadcastingReductions Reductions
In Eigen, a reduction is a function taking a matrix or array, and returning a single

View File

@ -1,14 +1,13 @@
namespace Eigen {
/** \page TutorialGeometry Tutorial page 8 - Geometry
\ingroup Tutorial
/** \eigenManualPage TutorialGeometry Geometry
\li \b Previous: \ref TutorialReductionsVisitorsBroadcasting
\li \b Next: \ref TutorialSparse
In this tutorial, we will briefly introduce the many possibilities offered by the \ref Geometry_Module "geometry module", namely 2D and 3D rotations and projective or affine transformations.
\tableofcontents
\eigenAutoToc
Eigen's Geometry module provides two different kinds of geometric transformations:
- Abstract transformations, such as rotations (represented by \ref AngleAxis "angle and axis" or by a \ref Quaternion "quaternion"), \ref Translation "translations", \ref Scaling "scalings". These transformations are NOT represented as matrices, but you can nevertheless mix them with matrices and vectors in expressions, and convert them to matrices if you wish.

View File

@ -1,12 +1,11 @@
namespace Eigen {
/** \page TutorialSparse Tutorial page 9 - Sparse Matrix
\ingroup Tutorial
/** \eigenManualPage TutorialSparse Sparse matrix manipulations
\li \b Previous: \ref TutorialGeometry
\li \b Next: \ref TutorialMapClass
\tableofcontents
\eigeneigenAutoToc
<hr>

View File

@ -1,6 +1,6 @@
namespace Eigen {
/** \page TutorialMapClass Tutorial page 10 - Interfacing with C/C++ arrays and external libraries: the %Map class
/** \eigenManualPage TutorialMapClass Interfacing with C/C++ arrays and external libraries: the %Map class
\ingroup Tutorial
@ -9,7 +9,7 @@ namespace Eigen {
This tutorial page explains how to work with "raw" C++ arrays. This can be useful in a variety of contexts, particularly when "importing" vectors and matrices from other libraries into Eigen.
\tableofcontents
\eigenAutoToc
\section TutorialMapIntroduction Introduction

View File

@ -30,6 +30,11 @@ configure_file(
${CMAKE_CURRENT_BINARY_DIR}/eigendoxy_footer.html
)
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/eigendoxy_layout.xml.in
${CMAKE_CURRENT_BINARY_DIR}/eigendoxy_layout.xml
)
set(examples_targets "")
set(snippets_targets "")
@ -44,7 +49,7 @@ add_custom_target(
doc-eigen-prerequisites
ALL
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/html/
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/eigendoxy_tabs.css
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/

View File

@ -1,8 +1,8 @@
namespace Eigen {
/** \page TopicStlContainers Using STL Containers with Eigen
/** \eigenManualPage TopicStlContainers Using STL Containers with Eigen
\tableofcontents
\eigenAutoToc
\section summary Executive summary

View File

@ -1,6 +1,6 @@
namespace Eigen {
/** \page TopicWrongStackAlignment Compiler making a wrong assumption on stack alignment
/** \eigenManualPage TopicWrongStackAlignment Compiler making a wrong assumption on stack alignment
<h4>It appears that this was a GCC bug that has been fixed in GCC 4.5.
If you hit this issue, please upgrade to GCC 4.5 and report to us, so we can update this page.</h4>

View File

@ -1,6 +1,6 @@
namespace Eigen {
/** \page TopicPassingByValue Passing Eigen objects by value to functions
/** \eigenManualPage TopicPassingByValue Passing Eigen objects by value to functions
Passing objects by value is almost always a very bad idea in C++, as this means useless copies, and one should pass them by reference instead.

View File

@ -1,8 +1,8 @@
namespace Eigen {
/** \page TopicStructHavingEigenMembers Structures Having Eigen Members
/** \eigenManualPage TopicStructHavingEigenMembers Structures Having Eigen Members
\tableofcontents
\eigenAutoToc
\section summary Executive Summary

View File

@ -1,6 +1,6 @@
namespace Eigen {
/** \page TopicUnalignedArrayAssert Explanation of the assertion on unaligned arrays
/** \eigenManualPage TopicUnalignedArrayAssert Explanation of the assertion on unaligned arrays
Hello! You are seeing this webpage because your program terminated on an assertion failure like this one:
<pre>
@ -14,7 +14,7 @@ is explained here: http://eigen.tuxfamily.org/dox/UnalignedArrayAssert.html
There are 4 known causes for this issue. Please read on to understand them and learn how to fix them.
\tableofcontents
\eigenAutoToc
\section where Where in my own code is the cause of the problem?

View File

@ -47,7 +47,7 @@ PROJECT_BRIEF =
# exceed 55 pixels and the maximum width should not exceed 200 pixels.
# Doxygen will copy the logo to the output directory.
PROJECT_LOGO =
PROJECT_LOGO = "${Eigen_SOURCE_DIR}/doc/Eigen_Silly_Professor_64x64.png"
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
# base path where the generated documentation will be put.
@ -223,6 +223,9 @@ ALIASES = "only_for_vectors=This is only for vectors (either row-
"note_about_checking_solutions=This method just tries to find as good a solution as possible. If you want to check whether a solution exists or if it is accurate, just call this function to get a result and then compute the error of this result, or use MatrixBase::isApprox() directly, for instance like this: \code bool a_solution_exists = (A*result).isApprox(b, precision); \endcode This method avoids dividing by zero, so that the non-existence of a solution doesn't by itself mean that you'll get \c inf or \c nan values." \
"note_try_to_help_rvo=This function returns the result by value. In order to make that efficient, it is implemented as just a return statement using a special constructor, hopefully allowing the compiler to perform a RVO (return value optimization)."
ALIASES += "eigenAutoToc= "
ALIASES += "eigenManualPage=\defgroup"
# This tag can be used to specify a number of word-keyword mappings (TCL only).
# A mapping has the form "name=value". For example adding
# "class=itcl::class" will allow you to use the command class in the
@ -474,7 +477,7 @@ HIDE_SCOPE_NAMES = YES
# will put a list of the files that are included by a file in the documentation
# of that file.
SHOW_INCLUDE_FILES = YES
SHOW_INCLUDE_FILES = NO
# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen
# will list include files with double quotes in the documentation
@ -592,7 +595,7 @@ SHOW_FILES = YES
# This will remove the Namespaces entry from the Quick Index
# and from the Folder Tree View (if specified). The default is YES.
SHOW_NAMESPACES = YES
SHOW_NAMESPACES = NO
# The FILE_VERSION_FILTER tag can be used to specify a program or script that
# doxygen should invoke to get the current version for each file (typically from
@ -611,7 +614,7 @@ FILE_VERSION_FILTER =
# You can optionally specify a file name after the option, if omitted
# DoxygenLayout.xml will be used as the name of the layout file.
LAYOUT_FILE =
LAYOUT_FILE = "${Eigen_BINARY_DIR}/doc/eigendoxy_layout.xml"
# The CITE_BIB_FILES tag can be used to specify one or more bib files
# containing the references data. This must be a list of .bib files. The
@ -954,7 +957,7 @@ HTML_FOOTER = "${Eigen_BINARY_DIR}/doc/eigendoxy_footer.html"
# the style sheet file to the HTML output directory, so don't put your own
# style sheet in the HTML output directory as well, or it will be erased!
HTML_STYLESHEET = "${Eigen_SOURCE_DIR}/doc/eigendoxy.css"
HTML_STYLESHEET =
# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
# other source files which should be copied to the HTML output directory. Note
@ -963,7 +966,7 @@ HTML_STYLESHEET = "${Eigen_SOURCE_DIR}/doc/eigendoxy.css"
# files. In the HTML_STYLESHEET file, use the file name only. Also note that
# the files will be copied as-is; there are no commands or markers available.
HTML_EXTRA_FILES =
HTML_EXTRA_FILES = "${Eigen_SOURCE_DIR}/doc/eigendoxy.css"
# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
# Doxygen will adjust the colors in the style sheet and background images
@ -972,6 +975,7 @@ HTML_EXTRA_FILES =
# For instance the value 0 represents red, 60 is yellow, 120 is green,
# 180 is cyan, 240 is blue, 300 purple, and 360 is red again.
# The allowed range is 0 to 359.
# The default is 220.
HTML_COLORSTYLE_HUE = 220
@ -1170,7 +1174,7 @@ ECLIPSE_DOC_ID = org.doxygen.Project
# navigation tree you can set this option to NO if you already set
# GENERATE_TREEVIEW to YES.
DISABLE_INDEX = NO
DISABLE_INDEX = YES
# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
# structure should be generated to display hierarchical information.
@ -1182,7 +1186,7 @@ DISABLE_INDEX = NO
# Since the tree basically has the same information as the tab index you
# could consider to set DISABLE_INDEX to NO when enabling this option.
GENERATE_TREEVIEW = NO
GENERATE_TREEVIEW = YES
# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values
# (range [0,1..20]) that doxygen will group on one line in the generated HTML
@ -1252,7 +1256,7 @@ MATHJAX_EXTENSIONS =
# typically be disabled. For large projects the javascript based search engine
# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
SEARCHENGINE = NO
SEARCHENGINE = YES
# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
# implemented using a PHP enabled web server instead of at the web client
@ -1614,7 +1618,8 @@ SKIP_FUNCTION_MACROS = YES
# NOT include the path). If a tag file is not located in the directory in which
# doxygen is run, you must also specify the path to the tagfile here.
TAGFILES = "${Eigen_BINARY_DIR}/doc/eigen-unsupported.doxytags =unsupported"
TAGFILES =
# "${Eigen_BINARY_DIR}/doc/eigen-unsupported.doxytags =unsupported"
# When a file name is specified after GENERATE_TAGFILE, doxygen will create
# a tag file that is based on the input files it reads.

View File

@ -4,7 +4,7 @@ namespace Eigen {
Eigen can be extended in several ways, for instance, by defining global methods, \ref ExtendingMatrixBase "by adding custom methods to MatrixBase", adding support to \ref CustomScalarType "custom types" etc.
\tableofcontents
\eigenAutoToc
\section ExtendingMatrixBase Extending MatrixBase (and other classes)

View File

@ -2,7 +2,7 @@ namespace Eigen {
/** \page TopicInsideEigenExample What happens inside Eigen, on a simple example
\tableofcontents
\eigenAutoToc
<hr>

View File

@ -1,6 +1,6 @@
namespace Eigen {
/** \page TopicFixedSizeVectorizable Fixed-size vectorizable Eigen objects
/** \eigenManualPage TopicFixedSizeVectorizable Fixed-size vectorizable Eigen objects
The goal of this page is to explain what we mean by "fixed-size vectorizable".

View File

@ -2,7 +2,7 @@ namespace Eigen {
/** \page TopicAssertions Assertions
\tableofcontents
\eigenAutoToc
\section PlainAssert Assertions

View File

@ -1,6 +1,6 @@
namespace Eigen {
/** \page TopicAliasing Aliasing
/** \eigenManualPage TopicAliasing Aliasing
In Eigen, aliasing refers to assignment statement in which the same matrix (or array or vector) appears on the
left and on the right of the assignment operators. Statements like <tt>mat = 2 * mat;</tt> or <tt>mat =
@ -8,7 +8,7 @@ mat.transpose();</tt> exhibit aliasing. The aliasing in the first example is har
second example leads to unexpected results. This page explains what aliasing is, when it is harmful, and what
to do about it.
\tableofcontents
\eigenAutoToc
\section TopicAliasingExamples Examples

View File

@ -6,7 +6,7 @@ This page explains the design of the core classes in Eigen's class hierarchy and
users probably need not concern themselves with these details, but it may be useful for both advanced users
and Eigen developers.
\tableofcontents
\eigenAutoToc
\section TopicClassHierarchyPrinciples Principles

View File

@ -8,7 +8,7 @@ Eigen's use of expression templates results in potentially every expression bein
Fortunately, all this myriad of expression types have in common that they all inherit a few common, templated base classes. By letting your function take templated parameters of these base types, you can let them play nicely with Eigen's expression templates.
\tableofcontents
\eigenAutoToc
\section TopicFirstExamples Some First Examples

View File

@ -7,7 +7,7 @@ should be defined before any %Eigen headers are included. Often they are best se
This page lists the preprocesor tokens recognised by %Eigen.
\tableofcontents
\eigenAutoToc
\section TopicPreprocessorDirectivesMajor Macros with major effects

View File

@ -1,11 +1,11 @@
namespace Eigen {
/** \page TopicStorageOrders Storage orders
/** \eigenManualPage TopicStorageOrders Storage orders
There are two different storage orders for matrices and two-dimensional arrays: column-major and row-major.
This page explains these storage orders and how to specify which one should be used.
\tableofcontents
\eigenAutoToc
\section TopicStorageOrdersIntro Column-major and row-major storage

View File

@ -7,7 +7,7 @@ amongst programmers: to define templates. The other use is more obscure: to spec
to a template function or a type. This regularly trips up programmers that use the %Eigen library, often
leading to error messages from the compiler that are difficult to understand.
\tableofcontents
\eigenAutoToc
\section TopicTemplateKeywordToDefineTemplates Using the template and typename keywords to define templates

View File

@ -1,8 +1,8 @@
namespace Eigen {
/** \page TopicSparseSystems Solving Sparse Linear Systems
/** \eigenManualPage TopicSparseSystems Solving Sparse Linear Systems
In Eigen, there are several methods available to solve linear systems when the coefficient matrix is sparse. Because of the special representation of this class of matrices, special care should be taken in order to get a good performance. See \ref TutorialSparse for a detailed introduction about sparse matrices in Eigen. In this page, we briefly present the main steps that are common to all the linear solvers in Eigen together with the main concepts behind them. Depending on the properties of the matrix, the desired accuracy, the end-user is able to tune these steps in order to improve the performance of its code. However, an impatient user does not need to know deeply what's hiding behind these steps: the last section presents a benchmark routine that can be easily used to get an insight on the performance of all the available solvers.
\tableofcontents
\eigenAutoToc
As summarized in \ref TutorialSparseDirectSolvers, there are many built-in solvers in Eigen as well as interface to external solvers libraries. All these solvers follow the same calling sequence. The basic steps are as follows :
\code
@ -104,4 +104,4 @@ The following table gives an example of XHTML statistics from several Eigen buil
</TABLE>
*/
}
}

155
doc/Manual.dox Normal file
View File

@ -0,0 +1,155 @@
// This file strutures pages and modules into a convenient hierarchical structure.
namespace Eigen {
/** \page UserManual_Generalities General topics
- \subpage Eigen2ToEigen3
- \subpage TopicFunctionTakingEigenTypes
- \subpage TopicPreprocessorDirectives
- \subpage TopicAssertions
- \subpage TopicCustomizingEigen
- \subpage TopicMultiThreading
- \subpage TopicUsingIntelMKL
- \subpage TopicTemplateKeyword
- \subpage UserManual_UnderstandingEigen
*/
/** \page UserManual_UnderstandingEigen Understanding Eigen
- \subpage TopicInsideEigenExample
- \subpage TopicClassHierarchy
- \subpage TopicLazyEvaluation
*/
/** \page UnclassifiedPages Unclassified pages
- \subpage TopicResizing
- \subpage TopicVectorization
- \subpage TopicEigenExpressionTemplates
- \subpage TopicScalarTypes
- \subpage GettingStarted
- \subpage TutorialSparse_example_details
- \subpage TopicWritingEfficientProductExpression
- \subpage Experimental
*/
/** \defgroup Support_modules Support modules
* Category of modules which add support for external libraries.
*/
/** \defgroup DenseMatrixManipulation_chapter Dense matrix and array manipulation */
/** \defgroup DenseMatrixManipulation_Alignement Alignment issues */
/** \defgroup DenseMatrixManipulation_Reference Reference */
/** \addtogroup TutorialMatrixClass
\ingroup DenseMatrixManipulation_chapter */
/** \addtogroup TutorialMatrixArithmetic
\ingroup DenseMatrixManipulation_chapter */
/** \addtogroup TutorialArrayClass
\ingroup DenseMatrixManipulation_chapter */
/** \addtogroup TutorialBlockOperations
\ingroup DenseMatrixManipulation_chapter */
/** \addtogroup TutorialAdvancedInitialization
\ingroup DenseMatrixManipulation_chapter */
/** \addtogroup TutorialReductionsVisitorsBroadcasting
\ingroup DenseMatrixManipulation_chapter */
/** \addtogroup TutorialMapClass
\ingroup DenseMatrixManipulation_chapter */
/** \addtogroup TopicAliasing
\ingroup DenseMatrixManipulation_chapter */
/** \addtogroup TopicStorageOrders
\ingroup DenseMatrixManipulation_chapter */
/** \addtogroup DenseMatrixManipulation_Alignement
\ingroup DenseMatrixManipulation_chapter */
/** \addtogroup TopicUnalignedArrayAssert
\ingroup DenseMatrixManipulation_Alignement */
/** \addtogroup TopicFixedSizeVectorizable
\ingroup DenseMatrixManipulation_Alignement */
/** \addtogroup TopicStructHavingEigenMembers
\ingroup DenseMatrixManipulation_Alignement */
/** \addtogroup TopicStlContainers
\ingroup DenseMatrixManipulation_Alignement */
/** \addtogroup TopicPassingByValue
\ingroup DenseMatrixManipulation_Alignement */
/** \addtogroup TopicWrongStackAlignment
\ingroup DenseMatrixManipulation_Alignement */
/** \addtogroup DenseMatrixManipulation_Reference
\ingroup DenseMatrixManipulation_chapter */
/** \addtogroup Core_Module
\ingroup DenseMatrixManipulation_Reference */
/** \addtogroup Jacobi_Module
\ingroup DenseMatrixManipulation_Reference */
/** \addtogroup Householder_Module
\ingroup DenseMatrixManipulation_Reference */
/** \addtogroup QuickRefPage
\ingroup DenseMatrixManipulation_chapter */
/** \defgroup DenseLinearSolvers_chapter Dense linear problems and decompositions */
/** \defgroup DenseLinearSolvers_Reference Reference */
/** \addtogroup TutorialLinearAlgebra
\ingroup DenseLinearSolvers_chapter */
/** \addtogroup TopicLinearAlgebraDecompositions
\ingroup DenseLinearSolvers_chapter */
/** \addtogroup DenseLinearSolvers_Reference
\ingroup DenseLinearSolvers_chapter */
/** \addtogroup Cholesky_Module
\ingroup DenseLinearSolvers_Reference */
/** \addtogroup LU_Module
\ingroup DenseLinearSolvers_Reference */
/** \addtogroup QR_Module
\ingroup DenseLinearSolvers_Reference */
/** \addtogroup SVD_Module
\ingroup DenseLinearSolvers_Reference*/
/** \addtogroup Eigenvalues_Module
\ingroup DenseLinearSolvers_Reference */
/** \defgroup Sparse_chapter Sparse linear algebra */
/** \defgroup Sparse_Reference Reference */
/** \addtogroup TutorialSparse
\ingroup Sparse_chapter */
/** \addtogroup TopicSparseSystems
\ingroup Sparse_chapter */
/** \addtogroup Sparse_Reference
\ingroup Sparse_chapter */
/** \addtogroup SparseCore_Module
\ingroup Sparse_Reference */
/** \addtogroup OrderingMethods_Module
\ingroup Sparse_Reference */
/** \addtogroup SparseCholesky_Module
\ingroup Sparse_Reference */
/** \addtogroup SparseLU_Module
\ingroup Sparse_Reference */
/** \addtogroup IterativeLinearSolvers_Module
\ingroup Sparse_Reference */
/** \addtogroup Support_modules
\ingroup Sparse_Reference */
/** \addtogroup SparseQuickRefPage
\ingroup Sparse_chapter */
/** \defgroup Geometry_chapter Geometry */
/** \defgroup Geometry_Reference Reference */
/** \addtogroup TutorialGeometry
\ingroup Geometry_chapter */
/** \addtogroup Geometry_Reference
\ingroup Geometry_chapter */
/** \addtogroup Geometry_Module
\ingroup Geometry_Reference */
/** \addtogroup Splines_Module
\ingroup Geometry_Reference */
}

View File

@ -1,6 +1,6 @@
namespace Eigen {
o /** \mainpage Eigen
/** \mainpage notitle
<div class="eimainmenu">
\ref GettingStarted "Getting started"
@ -29,7 +29,7 @@ For a first contact with Eigen, the best place is to have a look at the \ref Get
- \ref TutorialSparse
- \ref TutorialMapClass
- \ref QuickRefPage
- <b>Advanced topics</b>
- \subpage UserManual_Generalities
- \ref TopicAliasing
- \ref TopicLazyEvaluation
- \ref TopicLinearAlgebraDecompositions
@ -50,8 +50,6 @@ For a first contact with Eigen, the best place is to have a look at the \ref Get
- \ref TopicStructHavingEigenMembers
- \ref TopicPassingByValue
- \ref TopicWrongStackAlignment
Want more? Checkout the \ref Unsupported_modules "unsupported modules" <a href="unsupported/index.html">documentation</a>.

View File

@ -1,8 +1,8 @@
namespace Eigen {
/** \page QuickRefPage Quick reference guide
/** \eigenManualPage QuickRefPage Quick reference guide
\tableofcontents
\eigenAutoToc
<hr>

View File

@ -1,7 +1,6 @@
namespace Eigen {
/** \page SparseQuickRefPage Quick reference guide for sparse matrices
\tableofcontents
/** \eigenManualPage SparseQuickRefPage Quick reference guide for sparse matrices
\eigenAutoToc
<hr>

View File

@ -1,6 +1,6 @@
namespace Eigen {
/** \page TopicLinearAlgebraDecompositions Linear algebra and decompositions
/** \eigenManualPage TopicLinearAlgebraDecompositions Linear algebra and decompositions (catalogue)
\section TopicLinAlgBigTable Catalogue of decompositions offered by Eigen

View File

@ -165,4 +165,4 @@ In the examples, m1 and m2 are dense matrices and v1 and v2 are dense vectors.
*/
}
}

239
doc/eigen_navtree_hacks.js Normal file
View File

@ -0,0 +1,239 @@
// generate a table of contents in the side-nav based on the h1/h2 tags of the current page.
function generate_autotoc() {
var headers = $("h1, h2");
if(headers.length > 1) {
var toc = $("#side-nav").append('<div id="nav-toc" class="toc"><h3>Table of contents</h3></div>');
toc = $("#nav-toc");
var footerHeight = footer.height();
toc = toc.append('<ul></ul>');
toc = toc.find('ul');
var indices = new Array();
indices[0] = 0;
indices[1] = 0;
var h1counts = $("h1").length;
headers.each(function(i) {
var current = $(this);
var levelTag = current[0].tagName.charAt(1);
if(h1counts==0)
levelTag--;
var cur_id = current.attr("id");
indices[levelTag-1]+=1;
var prefix = indices[0];
if (levelTag >1) {
prefix+="."+indices[1];
}
current.html(prefix + " " + current.html());
for(var l = levelTag; l < 2; ++l){
indices[l] = 0;
}
if(cur_id == undefined) {
current.attr('id', 'title' + i);
current.addClass('anchor');
toc.append("<li class='level" + levelTag + "'><a id='link" + i + "' href='#title" +
i + "' title='" + current.prop("tagName") + "'>" + current.text() + "</a></li>");
} else {
toc.append("<li class='level" + levelTag + "'><a id='" + cur_id + "' href='#title" +
i + "' title='" + current.prop("tagName") + "'>" + current.text() + "</a></li>");
}
});
resizeHeight();
}
}
var global_navtree_object;
// Overloaded to remove links to sections/subsections
function getNode(o, po)
{
po.childrenVisited = true;
var l = po.childrenData.length-1;
for (var i in po.childrenData) {
var nodeData = po.childrenData[i];
if((!nodeData[1]) || (nodeData[1].indexOf('#')==-1)) // <- we added this line
po.children[i] = newNode(o, po, nodeData[0], nodeData[1], nodeData[2], i==l);
}
}
// Overloaded to adjust the size of the navtree wrt the toc
function resizeHeight()
{
var toc = $("#nav-toc");
var tocHeight = toc.height(); // <- we added this line
var headerHeight = header.height();
var footerHeight = footer.height();
var windowHeight = $(window).height() - headerHeight - footerHeight;
content.css({height:windowHeight + "px"});
navtree.css({height:(windowHeight-tocHeight) + "px"}); // <- we modified this line
sidenav.css({height:(windowHeight) + "px",top: headerHeight+"px"});
}
// Overloaded to save the root node into global_navtree_object
function initNavTree(toroot,relpath)
{
var o = new Object();
global_navtree_object = o; // <- we added this line
o.toroot = toroot;
o.node = new Object();
o.node.li = document.getElementById("nav-tree-contents");
o.node.childrenData = NAVTREE;
o.node.children = new Array();
o.node.childrenUL = document.createElement("ul");
o.node.getChildrenUL = function() { return o.node.childrenUL; };
o.node.li.appendChild(o.node.childrenUL);
o.node.depth = 0;
o.node.relpath = relpath;
o.node.expanded = false;
o.node.isLast = true;
o.node.plus_img = document.createElement("img");
o.node.plus_img.src = relpath+"ftv2pnode.png";
o.node.plus_img.width = 16;
o.node.plus_img.height = 22;
navTo(o,toroot,window.location.hash,relpath);
$(window).bind('hashchange', function(){
if (window.location.hash && window.location.hash.length>1){
var a;
if ($(location).attr('hash')){
var clslink=stripPath($(location).attr('pathname'))+':'+
$(location).attr('hash').substring(1);
a=$('.item a[class$="'+clslink+'"]');
}
if (a==null || !$(a).parent().parent().hasClass('selected')){
$('.item').removeClass('selected');
$('.item').removeAttr('id');
}
var link=stripPath2($(location).attr('pathname'));
navTo(o,link,$(location).attr('hash'),relpath);
}
})
$(window).load(showRoot);
}
// return false if the the node has no children at all, or has only section/subsection children
function checkChildrenData(node) {
if (!(typeof(node.childrenData)==='string')) {
for (var i in node.childrenData) {
var url = node.childrenData[i][1];
if(url.indexOf("#")==-1)
return true;
}
return false;
}
return (node.childrenData);
}
// Modified to:
// 1 - remove the root node (added && node.parentNode.parentNode.parentNode)
// 2 - remove the section/subsection children
function createIndent(o,domNode,node,level)
{
if (node.parentNode && node.parentNode.parentNode
&& node.parentNode.parentNode.parentNode // <- we added this line
) {
createIndent(o,domNode,node.parentNode,level+1);
}
var imgNode = document.createElement("img");
imgNode.width = 16;
imgNode.height = 22;
if (level==0 && checkChildrenData(node)) { // <- we modified this line to use checkChildrenData(node) instead of node.childrenData
node.plus_img = imgNode;
node.expandToggle = document.createElement("a");
node.expandToggle.href = "javascript:void(0)";
node.expandToggle.onclick = function() {
if (node.expanded) {
$(node.getChildrenUL()).slideUp("fast");
if (node.isLast) {
node.plus_img.src = node.relpath+"ftv2plastnode.png";
} else {
node.plus_img.src = node.relpath+"ftv2pnode.png";
}
node.expanded = false;
} else {
expandNode(o, node, false, false);
}
}
node.expandToggle.appendChild(imgNode);
domNode.appendChild(node.expandToggle);
} else {
domNode.appendChild(imgNode);
}
if (level==0) {
if (node.isLast) {
if (checkChildrenData(node)) { // <- we modified this line to use checkChildrenData(node) instead of node.childrenData
imgNode.src = node.relpath+"ftv2plastnode.png";
} else {
imgNode.src = node.relpath+"ftv2lastnode.png";
domNode.appendChild(imgNode);
}
} else {
if (checkChildrenData(node)) { // <- we modified this line to use checkChildrenData(node) instead of node.childrenData
imgNode.src = node.relpath+"ftv2pnode.png";
} else {
imgNode.src = node.relpath+"ftv2node.png";
domNode.appendChild(imgNode);
}
}
} else {
if (node.isLast) {
imgNode.src = node.relpath+"ftv2blank.png";
} else {
imgNode.src = node.relpath+"ftv2vertline.png";
}
}
imgNode.border = "0";
}
// Overloaded to automatically expand the selected node
function selectAndHighlight(n)
{
var a;
if ($(location).attr('hash')) {
var link=stripPath($(location).attr('pathname'))+':'+
$(location).attr('hash').substring(1);
a=$('.item a[class$="'+link+'"]');
}
if (a && a.length) {
a.parent().parent().addClass('selected');
a.parent().parent().attr('id','selected');
highlightAnchor();
} else if (n) {
$(n.itemDiv).addClass('selected');
$(n.itemDiv).attr('id','selected');
}
expandNode(global_navtree_object, n, true, true); // <- we added this line
showRoot();
}
$(document).ready(function() {
generate_autotoc();
(function (){ // wait until the first "selected" element has been created
try {
// this line will triger an exception if there is no #selected element, i.e., before the tree structure is complete.
document.getElementById("selected").className = "item selected";
// ok, the default tree has been created, we can keep going...
// expand the "Chapters" node
expandNode(global_navtree_object, global_navtree_object.node.children[0].children[2], true, true);
// Hide the root node "Eigen"
$(document.getElementsByClassName('index.html')[0]).parent().parent().css({display:"none"});
} catch (err) {
setTimeout(arguments.callee, 10);
}
})();
});

File diff suppressed because it is too large Load Diff

View File

@ -3,27 +3,27 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen $doxygenversion"/>
<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
<link href="$relpath$eigendoxy_tabs.css" rel="stylesheet" type="text/css">
<!--<link href="$relpath$search/search.css" rel="stylesheet" type="text/css"/>-->
<!--<script type="text/javaScript" src="$relpath$search/search.js"></script>-->
<link href="$relpath$tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="$relpath$jquery.js"></script>
<script type="text/javascript" src="$relpath$dynsections.js"></script>
$treeview
$search
$mathjax
<link href="$relpath$$stylesheet" rel="stylesheet" type="text/css" />
<link href="$relpath$eigendoxy.css" rel="stylesheet" type="text/css">
<!--<link href="$relpath$defCss" rel="stylesheet" type="text/css" />-->
<!-- $extrastylesheet -->
<script type="text/javascript" src="$relpath$eigen_navtree_hacks.js"></script>
<!-- <script type="text/javascript"> -->
<!-- </script> -->
</head>
<body>
<!--<body onload='searchBox.OnSelectItem(0);'>-->
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<!-- <a name="top"></a> -->
<a class="logo" href="http://eigen.tuxfamily.org/">
<img class="logo" src="Eigen_Silly_Professor_64x64.png" width=64 height=64 alt="Eigen's silly professor"/></a>
<!--BEGIN TITLEAREA-->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
@ -34,7 +34,7 @@ $mathjax
<!--END PROJECT_LOGO-->
<!--BEGIN PROJECT_NAME-->
<td style="padding-left: 0.5em;">
<div id="projectname">$projectname
<div id="projectname"><a href="http://eigen.tuxfamily.org">$projectname</a>
<!--BEGIN PROJECT_NUMBER-->&#160;<span id="projectnumber">$projectnumber</span><!--END PROJECT_NUMBER-->
</div>
<!--BEGIN PROJECT_BRIEF--><div id="projectbrief">$projectbrief</div><!--END PROJECT_BRIEF-->
@ -57,4 +57,5 @@ $mathjax
</table>
</div>
<!--END TITLEAREA-->
<!-- end header part -->
<!-- end header part -->

177
doc/eigendoxy_layout.xml.in Normal file
View File

@ -0,0 +1,177 @@
<?xml version="1.0"?>
<doxygenlayout version="1.0">
<!-- Navigation index tabs for HTML output -->
<navindex>
<tab type="user" url="index.html" title="Overview" />
<tab type="user" url="@ref GettingStarted" title="Getting started" />
<tab type="modules" visible="yes" title="Chapters" intro=""/>
<tab type="mainpage" visible="yes" title=""/>
<tab type="classlist" visible="yes" title="" intro=""/>
</navindex>
<!-- Layout definition for a class page -->
<class>
<briefdescription visible="no"/>
<includes visible="$SHOW_INCLUDE_FILES"/>
<detaileddescription title=""/>
<inheritancegraph visible="$CLASS_GRAPH"/>
<collaborationgraph visible="$COLLABORATION_GRAPH"/>
<allmemberslink visible="yes"/>
<memberdecl>
<nestedclasses visible="yes" title=""/>
<publictypes title=""/>
<publicslots title=""/>
<signals title=""/>
<publicmethods title=""/>
<publicstaticmethods title=""/>
<publicattributes title=""/>
<publicstaticattributes title=""/>
<protectedtypes title=""/>
<protectedslots title=""/>
<protectedmethods title=""/>
<protectedstaticmethods title=""/>
<protectedattributes title=""/>
<protectedstaticattributes title=""/>
<packagetypes title=""/>
<packagemethods title=""/>
<packagestaticmethods title=""/>
<packageattributes title=""/>
<packagestaticattributes title=""/>
<properties title=""/>
<events title=""/>
<privatetypes title=""/>
<privateslots title=""/>
<privatemethods title=""/>
<privatestaticmethods title=""/>
<privateattributes title=""/>
<privatestaticattributes title=""/>
<friends title=""/>
<related title="" subtitle=""/>
<membergroups visible="yes"/>
</memberdecl>
<memberdef>
<inlineclasses title=""/>
<typedefs title=""/>
<enums title=""/>
<constructors title=""/>
<functions title=""/>
<related title=""/>
<variables title=""/>
<properties title=""/>
<events title=""/>
</memberdef>
<usedfiles visible="$SHOW_USED_FILES"/>
<authorsection visible="yes"/>
</class>
<!-- Layout definition for a namespace page -->
<namespace>
<briefdescription visible="yes"/>
<memberdecl>
<nestednamespaces visible="yes" title=""/>
<classes visible="yes" title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
<membergroups visible="yes"/>
</memberdecl>
<detaileddescription title=""/>
<memberdef>
<inlineclasses title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
</memberdef>
<authorsection visible="yes"/>
</namespace>
<!-- Layout definition for a file page -->
<file>
<briefdescription visible="yes"/>
<includes visible="$SHOW_INCLUDE_FILES"/>
<includegraph visible="$INCLUDE_GRAPH"/>
<includedbygraph visible="$INCLUDED_BY_GRAPH"/>
<sourcelink visible="yes"/>
<memberdecl>
<classes visible="yes" title=""/>
<namespaces visible="yes" title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
<membergroups visible="yes"/>
</memberdecl>
<detaileddescription title=""/>
<memberdef>
<inlineclasses title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
</memberdef>
<authorsection/>
</file>
<!-- Layout definition for a group page -->
<group>
<briefdescription visible="no"/>
<detaileddescription title=""/>
<groupgraph visible="$GROUP_GRAPHS"/>
<memberdecl>
<nestedgroups visible="yes" title=""/>
<dirs visible="yes" title=""/>
<files visible="yes" title=""/>
<namespaces visible="yes" title=""/>
<classes visible="yes" title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<enumvalues title=""/>
<functions title=""/>
<variables title=""/>
<signals title=""/>
<publicslots title=""/>
<protectedslots title=""/>
<privateslots title=""/>
<events title=""/>
<properties title=""/>
<friends title=""/>
<membergroups visible="yes"/>
</memberdecl>
<memberdef>
<pagedocs/>
<inlineclasses title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<enumvalues title=""/>
<functions title=""/>
<variables title=""/>
<signals title=""/>
<publicslots title=""/>
<protectedslots title=""/>
<privateslots title=""/>
<events title=""/>
<properties title=""/>
<friends title=""/>
</memberdef>
<authorsection visible="yes"/>
</group>
<!-- Layout definition for a directory page -->
<directory>
<briefdescription visible="yes"/>
<directorygraph visible="yes"/>
<memberdecl>
<dirs visible="yes"/>
<files visible="yes"/>
</memberdecl>
<detaileddescription title=""/>
</directory>
</doxygenlayout>