// 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
#define EIGEN_NUMERICALDIFF_MODULE

#include <Eigen/Core>

namespace Eigen {

/** \ingroup Unsupported_modules
  * \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.
  *
  */
}

//@{

#include "src/NumericalDiff/NumericalDiff.h"

//@}


#endif // EIGEN_NUMERICALDIFF_MODULE
