// 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/.
// SPDX-License-Identifier: 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 <contrib/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 "../../Eigen/src/Core/util/DisableStupidWarnings.h"

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

#include "../../Eigen/src/Core/util/ReenableStupidWarnings.h"

//@}

#endif  // EIGEN_NUMERICALDIFF_MODULE_H
