
// This file strutures pages and modules into a convenient hierarchical structure.

namespace Eigen {

/** \page UserManual_CustomizingEigen Extending/Customizing Eigen
  %Eigen can be extended in several ways, for instance, by defining global methods, by inserting custom methods within main %Eigen's classes through the \ref TopicCustomizing_Plugins "plugin" mechanism, by adding support to \ref TopicCustomizing_CustomScalar "custom scalar types" etc. See below for the respective sub-topics.
  - \subpage TopicCustomizing_Plugins
  - \subpage TopicCustomizing_InheritingMatrix
  - \subpage TopicCustomizing_CustomScalar
  - \subpage TopicCustomizing_NullaryExpr
  - \subpage TopicNewExpressionType
  \sa \ref TopicPreprocessorDirectives
*/


/** \page UserManual_Generalities General topics
  - \subpage TopicFunctionTakingEigenTypes
  - \subpage TopicPreprocessorDirectives
  - \subpage TopicAssertions
  - \subpage TopicMultiThreading
  - \subpage TopicUsingBlasLapack
  - \subpage TopicUsingIntelMKL
  - \subpage TopicCUDA
  - \subpage TopicPitfalls
  - \subpage TopicTemplateKeyword
  - \subpage UserManual_UnderstandingEigen
  - \subpage TopicCMakeGuide
*/

/** \page UserManual_UnderstandingEigen Understanding Eigen
  - \subpage TopicInsideEigenExample
  - \subpage TopicClassHierarchy
  - \subpage TopicLazyEvaluation
*/

/** \page UnclassifiedPages Unclassified pages
  - \subpage TopicResizing
  - \subpage TopicVectorization
  - \subpage TopicEigenExpressionTemplates
  - \subpage TopicScalarTypes
  - \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 TutorialSlicingIndexing
    \ingroup DenseMatrixManipulation_chapter */
/** \addtogroup TutorialAdvancedInitialization
    \ingroup DenseMatrixManipulation_chapter */
/** \addtogroup TutorialReductionsVisitorsBroadcasting
    \ingroup DenseMatrixManipulation_chapter */
/** \addtogroup TutorialReshape
    \ingroup DenseMatrixManipulation_chapter */
/** \addtogroup TutorialSTL
    \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 CoeffwiseMathFunctions
    \ingroup DenseMatrixManipulation_chapter */

/** \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 LeastSquares
    \ingroup DenseLinearSolvers_chapter */
/** \addtogroup InplaceDecomposition
    \ingroup DenseLinearSolvers_chapter */
/** \addtogroup DenseDecompositionBenchmark
    \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 MatrixfreeSolverExample
    \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 SparseQR_Module
    \ingroup Sparse_Reference */
/** \addtogroup IterativeLinearSolvers_Module
    \ingroup Sparse_Reference */
/** \addtogroup Sparse_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 */

/** \internal \brief Namespace containing low-level routines from the %Eigen library. */
namespace internal {}
}
