// This file is part of Eigen, a lightweight C++ template library
// for linear algebra.
//
// Copyright (C) 2008-2009 Gael Guennebaud <g.gael@free.fr>
//
// 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_AUTODIFF_MODULE_H
#define EIGEN_AUTODIFF_MODULE_H

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

namespace Eigen {

/**
 * \defgroup AutoDiff_Module Auto Diff module
 *
 * This module features forward automatic differentiation via a simple
 * templated scalar type wrapper AutoDiffScalar.
 *
 * Warning : this should NOT be confused with numerical differentiation, which
 * is a different method and has its own module in Eigen : \ref NumericalDiff_Module.
 *
 * \code
 * #include <contrib/Eigen/AutoDiff>
 * \endcode
 *
 * See \ref AutoDiffExamples for introductory examples.
 */
//@{

}  // namespace Eigen
#include "../../Eigen/src/Core/util/DisableStupidWarnings.h"

// IWYU pragma: begin_exports
#include "src/AutoDiff/CoherentPadOp.h"
#include "src/AutoDiff/AutoDiffScalar.h"
#include "src/AutoDiff/AutoDiffJacobian.h"
// IWYU pragma: end_exports

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

namespace Eigen {
//@}
}

#endif  // EIGEN_AUTODIFF_MODULE_H
