// This file is part of Eigen, a lightweight C++ template library
// for linear algebra.
//
// Copyright (C) 2009 Thomas Capricelli <orzel@freehackers.org>
//
// This Source Code Form is subject to the terms of the Mozilla
// Public License v. 2.0. If a copy of the MPL was not distributed
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.

#ifndef EIGEN_NUMERICALDIFF_MODULE_H
#define EIGEN_NUMERICALDIFF_MODULE_H

#include "../../Eigen/Core"

namespace Eigen {

/**
 * \defgroup NumericalDiff_Module Numerical differentiation module
 *
 * \code
 * #include <unsupported/Eigen/NumericalDiff>
 * \endcode
 *
 * See http://en.wikipedia.org/wiki/Numerical_differentiation
 *
 * Warning : this should NOT be confused with automatic differentiation, which
 * is a different method and has its own module in Eigen : \ref
 * AutoDiff_Module.
 *
 * Currently only "Forward" and "Central" schemes are implemented. Those
 * are basic methods, and there exist some more elaborated way of
 * computing such approximates. They are implemented using both
 * proprietary and free software, and usually requires linking to an
 * external library. It is very easy for you to write a functor
 * using such software, and the purpose is quite orthogonal to what we
 * want to achieve with Eigen.
 *
 * This is why we will not provide wrappers for every great numerical
 * differentiation software that exist, but should rather stick with those
 * basic ones, that still are useful for testing.
 *
 * Also, the \ref NonLinearOptimization_Module needs this in order to
 * provide full features compatibility with the original (c)minpack
 * package.
 *
 */
}

//@{

// IWYU pragma: begin_exports
#include "src/NumericalDiff/NumericalDiff.h"
// IWYU pragma: end_exports

//@}

#endif  // EIGEN_NUMERICALDIFF_MODULE_H
