Update Eigen to: https://gitlab.com/libeigen/eigen/-/commit/f0f1d7938b7083800ff75fe88e15092f08a4e67e
PiperOrigin-RevId: 405697181
Change-Id: I86729a434c0b848875459b1b6c28273aac26bf59
diff --git a/Eigen/Core b/Eigen/Core
index 3c03519..2643981 100644
--- a/Eigen/Core
+++ b/Eigen/Core
@@ -8,8 +8,8 @@
// 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_CORE_H
-#define EIGEN_CORE_H
+#ifndef EIGEN_CORE_MODULE_H
+#define EIGEN_CORE_MODULE_H
// first thing Eigen does: stop the compiler from reporting useless warnings.
#include "src/Core/util/DisableStupidWarnings.h"
@@ -166,6 +166,7 @@
#include "src/Core/util/XprHelper.h"
#include "src/Core/util/Memory.h"
#include "src/Core/util/IntegralConstant.h"
+#include "src/Core/util/Serializer.h"
#include "src/Core/util/SymbolicIndex.h"
#include "src/Core/NumTraits.h"
@@ -382,4 +383,4 @@
#include "src/Core/util/ReenableStupidWarnings.h"
-#endif // EIGEN_CORE_H
+#endif // EIGEN_CORE_MODULE_H
diff --git a/Eigen/src/Cholesky/InternalHeaderCheck.h b/Eigen/src/Cholesky/InternalHeaderCheck.h
new file mode 100644
index 0000000..5de2b21
--- /dev/null
+++ b/Eigen/src/Cholesky/InternalHeaderCheck.h
@@ -0,0 +1,3 @@
+#ifndef EIGEN_CHOLESKY_MODULE_H
+#error "Please include Eigen/Cholesky instead of including headers inside the src directory directly."
+#endif
diff --git a/Eigen/src/Cholesky/LDLT.h b/Eigen/src/Cholesky/LDLT.h
index 1dffbb6..2674405 100644
--- a/Eigen/src/Cholesky/LDLT.h
+++ b/Eigen/src/Cholesky/LDLT.h
@@ -13,6 +13,8 @@
#ifndef EIGEN_LDLT_H
#define EIGEN_LDLT_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
@@ -270,10 +272,7 @@
protected:
- static void check_template_parameters()
- {
- EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar);
- }
+ EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar)
/** \internal
* Used to compute and store the Cholesky decomposition A = L D L^* = U^* D U.
@@ -498,8 +497,6 @@
template<typename InputType>
LDLT<MatrixType,UpLo_>& LDLT<MatrixType,UpLo_>::compute(const EigenBase<InputType>& a)
{
- check_template_parameters();
-
eigen_assert(a.rows()==a.cols());
const Index size = a.rows();
diff --git a/Eigen/src/Cholesky/LLT.h b/Eigen/src/Cholesky/LLT.h
index 3b7aa4d..f22d2a7 100644
--- a/Eigen/src/Cholesky/LLT.h
+++ b/Eigen/src/Cholesky/LLT.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_LLT_H
#define EIGEN_LLT_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal{
@@ -217,10 +219,7 @@
protected:
- static void check_template_parameters()
- {
- EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar);
- }
+ EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar)
/** \internal
* Used to compute and store L
@@ -431,8 +430,6 @@
template<typename InputType>
LLT<MatrixType,UpLo_>& LLT<MatrixType,UpLo_>::compute(const EigenBase<InputType>& a)
{
- check_template_parameters();
-
eigen_assert(a.rows()==a.cols());
const Index size = a.rows();
m_matrix.resize(size, size);
diff --git a/Eigen/src/Cholesky/LLT_LAPACKE.h b/Eigen/src/Cholesky/LLT_LAPACKE.h
index bc6489e..6b2bf28 100644
--- a/Eigen/src/Cholesky/LLT_LAPACKE.h
+++ b/Eigen/src/Cholesky/LLT_LAPACKE.h
@@ -33,6 +33,8 @@
#ifndef EIGEN_LLT_LAPACKE_H
#define EIGEN_LLT_LAPACKE_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/CholmodSupport/CholmodSupport.h b/Eigen/src/CholmodSupport/CholmodSupport.h
index 817e769..a56ebfd 100644
--- a/Eigen/src/CholmodSupport/CholmodSupport.h
+++ b/Eigen/src/CholmodSupport/CholmodSupport.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_CHOLMODSUPPORT_H
#define EIGEN_CHOLMODSUPPORT_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/CholmodSupport/InternalHeaderCheck.h b/Eigen/src/CholmodSupport/InternalHeaderCheck.h
new file mode 100644
index 0000000..0fb3abc
--- /dev/null
+++ b/Eigen/src/CholmodSupport/InternalHeaderCheck.h
@@ -0,0 +1,3 @@
+#ifndef EIGEN_CHOLMODSUPPORT_MODULE_H
+#error "Please include Eigen/CholmodSupport instead of including headers inside the src directory directly."
+#endif
diff --git a/Eigen/src/Core/ArithmeticSequence.h b/Eigen/src/Core/ArithmeticSequence.h
index b6200fa..331ff49 100644
--- a/Eigen/src/Core/ArithmeticSequence.h
+++ b/Eigen/src/Core/ArithmeticSequence.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_ARITHMETIC_SEQUENCE_H
#define EIGEN_ARITHMETIC_SEQUENCE_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
@@ -72,7 +74,7 @@
typedef typename cleanup_index_type<T,DynamicIndex>::type type;
};
-}
+} // namespace internal
//--------------------------------------------------------------------------------
// seq(first,last,incr) and seqN(first,size,incr)
@@ -319,6 +321,7 @@
#endif // EIGEN_PARSED_BY_DOXYGEN
+namespace placeholders {
#if EIGEN_HAS_CXX11 || defined(EIGEN_PARSED_BY_DOXYGEN)
/** \cpp11
@@ -329,9 +332,9 @@
* \sa lastN(SizeType), seqN(FirstType,SizeType), seq(FirstType,LastType,IncrType) */
template<typename SizeType,typename IncrType>
auto lastN(SizeType size, IncrType incr)
--> decltype(seqN(Eigen::last-(size-fix<1>())*incr, size, incr))
+-> decltype(seqN(Eigen::placeholders::last-(size-fix<1>())*incr, size, incr))
{
- return seqN(Eigen::last-(size-fix<1>())*incr, size, incr);
+ return seqN(Eigen::placeholders::last-(size-fix<1>())*incr, size, incr);
}
/** \cpp11
@@ -342,12 +345,14 @@
* \sa lastN(SizeType,IncrType, seqN(FirstType,SizeType), seq(FirstType,LastType) */
template<typename SizeType>
auto lastN(SizeType size)
--> decltype(seqN(Eigen::last+fix<1>()-size, size))
+-> decltype(seqN(Eigen::placeholders::last+fix<1>()-size, size))
{
- return seqN(Eigen::last+fix<1>()-size, size);
+ return seqN(Eigen::placeholders::last+fix<1>()-size, size);
}
#endif
+} // namespace placeholders
+
namespace internal {
// Convert a symbolic span into a usable one (i.e., remove last/end "keywords")
@@ -387,25 +392,25 @@
* \code using namespace Eigen::indexing; \endcode
* is equivalent to:
* \code
- using Eigen::all;
+ using Eigen::fix;
using Eigen::seq;
using Eigen::seqN;
- using Eigen::lastN; // c++11 only
- using Eigen::last;
- using Eigen::lastp1;
- using Eigen::fix;
+ using Eigen::placeholders::all;
+ using Eigen::placeholders::last;
+ using Eigen::placeholders::lastN; // c++11 only
+ using Eigen::placeholders::lastp1;
\endcode
*/
namespace indexing {
- using Eigen::all;
+ using Eigen::fix;
using Eigen::seq;
using Eigen::seqN;
+ using Eigen::placeholders::all;
+ using Eigen::placeholders::last;
#if EIGEN_HAS_CXX11
- using Eigen::lastN;
+ using Eigen::placeholders::lastN;
#endif
- using Eigen::last;
- using Eigen::lastp1;
- using Eigen::fix;
+ using Eigen::placeholders::lastp1;
}
} // end namespace Eigen
diff --git a/Eigen/src/Core/Array.h b/Eigen/src/Core/Array.h
index 85676ae..c39aa15 100644
--- a/Eigen/src/Core/Array.h
+++ b/Eigen/src/Core/Array.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_ARRAY_H
#define EIGEN_ARRAY_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
@@ -131,7 +133,6 @@
EIGEN_DEVICE_FUNC
EIGEN_STRONG_INLINE Array() : Base()
{
- Base::_check_template_params();
EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED
}
@@ -142,7 +143,6 @@
Array(internal::constructor_without_unaligned_array_assert)
: Base(internal::constructor_without_unaligned_array_assert())
{
- Base::_check_template_params();
EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED
}
#endif
@@ -152,7 +152,6 @@
Array(Array&& other) EIGEN_NOEXCEPT_IF(std::is_nothrow_move_constructible<Scalar>::value)
: Base(std::move(other))
{
- Base::_check_template_params();
}
EIGEN_DEVICE_FUNC
Array& operator=(Array&& other) EIGEN_NOEXCEPT_IF(std::is_nothrow_move_assignable<Scalar>::value)
@@ -206,7 +205,6 @@
EIGEN_DEVICE_FUNC
EIGEN_STRONG_INLINE explicit Array(const T& x)
{
- Base::_check_template_params();
Base::template _init1<T>(x);
}
@@ -214,7 +212,6 @@
EIGEN_DEVICE_FUNC
EIGEN_STRONG_INLINE Array(const T0& val0, const T1& val1)
{
- Base::_check_template_params();
this->template _init2<T0,T1>(val0, val1);
}
@@ -249,7 +246,6 @@
EIGEN_DEVICE_FUNC
EIGEN_STRONG_INLINE Array(const Scalar& val0, const Scalar& val1, const Scalar& val2)
{
- Base::_check_template_params();
EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Array, 3)
m_storage.data()[0] = val0;
m_storage.data()[1] = val1;
@@ -261,7 +257,6 @@
EIGEN_DEVICE_FUNC
EIGEN_STRONG_INLINE Array(const Scalar& val0, const Scalar& val1, const Scalar& val2, const Scalar& val3)
{
- Base::_check_template_params();
EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Array, 4)
m_storage.data()[0] = val0;
m_storage.data()[1] = val1;
diff --git a/Eigen/src/Core/ArrayBase.h b/Eigen/src/Core/ArrayBase.h
index ea3dd1c..28397e5 100644
--- a/Eigen/src/Core/ArrayBase.h
+++ b/Eigen/src/Core/ArrayBase.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_ARRAYBASE_H
#define EIGEN_ARRAYBASE_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
template<typename ExpressionType> class MatrixWrapper;
@@ -21,7 +23,7 @@
*
* An array is similar to a dense vector or matrix. While matrices are mathematical
* objects with well defined linear algebra operators, an array is just a collection
- * of scalar values arranged in a one or two dimensionnal fashion. As the main consequence,
+ * of scalar values arranged in a one or two dimensional fashion. As the main consequence,
* all operations applied to an array are performed coefficient wise. Furthermore,
* arrays support scalar math functions of the c++ standard library (e.g., std::sin(x)), and convenient
* constructors allowing to easily write generic code working for both scalar values
diff --git a/Eigen/src/Core/ArrayWrapper.h b/Eigen/src/Core/ArrayWrapper.h
index 2e9555b..8a34ca5 100644
--- a/Eigen/src/Core/ArrayWrapper.h
+++ b/Eigen/src/Core/ArrayWrapper.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_ARRAYWRAPPER_H
#define EIGEN_ARRAYWRAPPER_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \class ArrayWrapper
diff --git a/Eigen/src/Core/Assign.h b/Eigen/src/Core/Assign.h
index 655412e..dc716d3 100644
--- a/Eigen/src/Core/Assign.h
+++ b/Eigen/src/Core/Assign.h
@@ -12,6 +12,8 @@
#ifndef EIGEN_ASSIGN_H
#define EIGEN_ASSIGN_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
template<typename Derived>
diff --git a/Eigen/src/Core/AssignEvaluator.h b/Eigen/src/Core/AssignEvaluator.h
index 7d76f0c..5056328 100644
--- a/Eigen/src/Core/AssignEvaluator.h
+++ b/Eigen/src/Core/AssignEvaluator.h
@@ -12,6 +12,8 @@
#ifndef EIGEN_ASSIGN_EVALUATOR_H
#define EIGEN_ASSIGN_EVALUATOR_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
// This implementation is based on Assign.h
@@ -327,8 +329,7 @@
{
EIGEN_DEVICE_FUNC static void EIGEN_STRONG_INLINE run(Kernel& /*kernel*/)
{
- typedef typename Kernel::DstEvaluatorType::XprType DstXprType;
- EIGEN_STATIC_ASSERT(int(DstXprType::SizeAtCompileTime) == 0,
+ EIGEN_STATIC_ASSERT(int(Kernel::DstEvaluatorType::XprType::SizeAtCompileTime) == 0,
EIGEN_INTERNAL_ERROR_PLEASE_FILE_A_BUG_REPORT)
}
};
diff --git a/Eigen/src/Core/Assign_MKL.h b/Eigen/src/Core/Assign_MKL.h
index c6140d1..c2afebd 100755
--- a/Eigen/src/Core/Assign_MKL.h
+++ b/Eigen/src/Core/Assign_MKL.h
@@ -34,6 +34,8 @@
#ifndef EIGEN_ASSIGN_VML_H
#define EIGEN_ASSIGN_VML_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/BandMatrix.h b/Eigen/src/Core/BandMatrix.h
index 590573b..69b7681 100644
--- a/Eigen/src/Core/BandMatrix.h
+++ b/Eigen/src/Core/BandMatrix.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_BANDMATRIX_H
#define EIGEN_BANDMATRIX_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/Block.h b/Eigen/src/Core/Block.h
index d0b95d5..585323c 100644
--- a/Eigen/src/Core/Block.h
+++ b/Eigen/src/Core/Block.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_BLOCK_H
#define EIGEN_BLOCK_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/BooleanRedux.h b/Eigen/src/Core/BooleanRedux.h
index 852de8b..9689ca3 100644
--- a/Eigen/src/Core/BooleanRedux.h
+++ b/Eigen/src/Core/BooleanRedux.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_ALLANDANY_H
#define EIGEN_ALLANDANY_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/CommaInitializer.h b/Eigen/src/Core/CommaInitializer.h
index c0e29c7..5c89d14 100644
--- a/Eigen/src/Core/CommaInitializer.h
+++ b/Eigen/src/Core/CommaInitializer.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_COMMAINITIALIZER_H
#define EIGEN_COMMAINITIALIZER_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \class CommaInitializer
diff --git a/Eigen/src/Core/ConditionEstimator.h b/Eigen/src/Core/ConditionEstimator.h
index 51a2e5f..bd4455f 100644
--- a/Eigen/src/Core/ConditionEstimator.h
+++ b/Eigen/src/Core/ConditionEstimator.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_CONDITIONESTIMATOR_H
#define EIGEN_CONDITIONESTIMATOR_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/CoreEvaluators.h b/Eigen/src/Core/CoreEvaluators.h
index 0ff8c8d..1dcd2f8 100644
--- a/Eigen/src/Core/CoreEvaluators.h
+++ b/Eigen/src/Core/CoreEvaluators.h
@@ -13,6 +13,8 @@
#ifndef EIGEN_COREEVALUATORS_H
#define EIGEN_COREEVALUATORS_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/CoreIterators.h b/Eigen/src/Core/CoreIterators.h
index b967196..f74568a 100644
--- a/Eigen/src/Core/CoreIterators.h
+++ b/Eigen/src/Core/CoreIterators.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_COREITERATORS_H
#define EIGEN_COREITERATORS_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/* This file contains the respective InnerIterator definition of the expressions defined in Eigen/Core
diff --git a/Eigen/src/Core/CwiseBinaryOp.h b/Eigen/src/Core/CwiseBinaryOp.h
index 2202b1c..98fdabb 100644
--- a/Eigen/src/Core/CwiseBinaryOp.h
+++ b/Eigen/src/Core/CwiseBinaryOp.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_CWISE_BINARY_OP_H
#define EIGEN_CWISE_BINARY_OP_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
@@ -95,6 +97,9 @@
BinaryOp>::ret>::Base Base;
EIGEN_GENERIC_PUBLIC_INTERFACE(CwiseBinaryOp)
+ EIGEN_CHECK_BINARY_COMPATIBILIY(BinaryOp,typename Lhs::Scalar,typename Rhs::Scalar)
+ EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE(Lhs, Rhs)
+
typedef typename internal::ref_selector<LhsType>::type LhsNested;
typedef typename internal::ref_selector<RhsType>::type RhsNested;
typedef typename internal::remove_reference<LhsNested>::type _LhsNested;
@@ -110,9 +115,6 @@
CwiseBinaryOp(const Lhs& aLhs, const Rhs& aRhs, const BinaryOp& func = BinaryOp())
: m_lhs(aLhs), m_rhs(aRhs), m_functor(func)
{
- EIGEN_CHECK_BINARY_COMPATIBILIY(BinaryOp,typename Lhs::Scalar,typename Rhs::Scalar);
- // require the sizes to match
- EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE(Lhs, Rhs)
eigen_assert(aLhs.rows() == aRhs.rows() && aLhs.cols() == aRhs.cols());
}
diff --git a/Eigen/src/Core/CwiseNullaryOp.h b/Eigen/src/Core/CwiseNullaryOp.h
index 289ec51..a62f54d 100644
--- a/Eigen/src/Core/CwiseNullaryOp.h
+++ b/Eigen/src/Core/CwiseNullaryOp.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_CWISE_NULLARY_OP_H
#define EIGEN_CWISE_NULLARY_OP_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/CwiseTernaryOp.h b/Eigen/src/Core/CwiseTernaryOp.h
index 9f3576f..52a0ae7 100644
--- a/Eigen/src/Core/CwiseTernaryOp.h
+++ b/Eigen/src/Core/CwiseTernaryOp.h
@@ -12,6 +12,8 @@
#ifndef EIGEN_CWISE_TERNARY_OP_H
#define EIGEN_CWISE_TERNARY_OP_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
@@ -91,6 +93,20 @@
typedef typename internal::remove_all<Arg2Type>::type Arg2;
typedef typename internal::remove_all<Arg3Type>::type Arg3;
+ // require the sizes to match
+ EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE(Arg1, Arg2)
+ EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE(Arg1, Arg3)
+
+ // The index types should match
+ EIGEN_STATIC_ASSERT((internal::is_same<
+ typename internal::traits<Arg1Type>::StorageKind,
+ typename internal::traits<Arg2Type>::StorageKind>::value),
+ STORAGE_KIND_MUST_MATCH)
+ EIGEN_STATIC_ASSERT((internal::is_same<
+ typename internal::traits<Arg1Type>::StorageKind,
+ typename internal::traits<Arg3Type>::StorageKind>::value),
+ STORAGE_KIND_MUST_MATCH)
+
typedef typename CwiseTernaryOpImpl<
TernaryOp, Arg1Type, Arg2Type, Arg3Type,
typename internal::traits<Arg1Type>::StorageKind>::Base Base;
@@ -108,20 +124,6 @@
const Arg3& a3,
const TernaryOp& func = TernaryOp())
: m_arg1(a1), m_arg2(a2), m_arg3(a3), m_functor(func) {
- // require the sizes to match
- EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE(Arg1, Arg2)
- EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE(Arg1, Arg3)
-
- // The index types should match
- EIGEN_STATIC_ASSERT((internal::is_same<
- typename internal::traits<Arg1Type>::StorageKind,
- typename internal::traits<Arg2Type>::StorageKind>::value),
- STORAGE_KIND_MUST_MATCH)
- EIGEN_STATIC_ASSERT((internal::is_same<
- typename internal::traits<Arg1Type>::StorageKind,
- typename internal::traits<Arg3Type>::StorageKind>::value),
- STORAGE_KIND_MUST_MATCH)
-
eigen_assert(a1.rows() == a2.rows() && a1.cols() == a2.cols() &&
a1.rows() == a3.rows() && a1.cols() == a3.cols());
}
diff --git a/Eigen/src/Core/CwiseUnaryOp.h b/Eigen/src/Core/CwiseUnaryOp.h
index e68c4f7..f2c6518 100644
--- a/Eigen/src/Core/CwiseUnaryOp.h
+++ b/Eigen/src/Core/CwiseUnaryOp.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_CWISE_UNARY_OP_H
#define EIGEN_CWISE_UNARY_OP_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/CwiseUnaryView.h b/Eigen/src/Core/CwiseUnaryView.h
index a06d762..9fc1dcd 100644
--- a/Eigen/src/Core/CwiseUnaryView.h
+++ b/Eigen/src/Core/CwiseUnaryView.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_CWISE_UNARY_VIEW_H
#define EIGEN_CWISE_UNARY_VIEW_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/DenseBase.h b/Eigen/src/Core/DenseBase.h
index 9b16db6..940eabd 100644
--- a/Eigen/src/Core/DenseBase.h
+++ b/Eigen/src/Core/DenseBase.h
@@ -11,17 +11,12 @@
#ifndef EIGEN_DENSEBASE_H
#define EIGEN_DENSEBASE_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
-namespace internal {
-
// The index type defined by EIGEN_DEFAULT_DENSE_INDEX_TYPE must be a signed type.
-// This dummy function simply aims at checking that at compile time.
-static inline void check_DenseIndex_is_signed() {
- EIGEN_STATIC_ASSERT(NumTraits<DenseIndex>::IsSigned,THE_INDEX_TYPE_MUST_BE_A_SIGNED_TYPE)
-}
-
-} // end namespace internal
+EIGEN_STATIC_ASSERT(NumTraits<DenseIndex>::IsSigned,THE_INDEX_TYPE_MUST_BE_A_SIGNED_TYPE)
/** \class DenseBase
* \ingroup Core_Module
diff --git a/Eigen/src/Core/DenseCoeffsBase.h b/Eigen/src/Core/DenseCoeffsBase.h
index 37fcdb5..46d8730 100644
--- a/Eigen/src/Core/DenseCoeffsBase.h
+++ b/Eigen/src/Core/DenseCoeffsBase.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_DENSECOEFFSBASE_H
#define EIGEN_DENSECOEFFSBASE_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
@@ -43,7 +45,7 @@
// - This is the return type of the coeff() method.
// - The LvalueBit means exactly that we can offer a coeffRef() method, which means exactly that we can get references
// to coeffs, which means exactly that we can have coeff() return a const reference (as opposed to returning a value).
- // - The is_artihmetic check is required since "const int", "const double", etc. will cause warnings on some systems
+ // - The is_arithmetic check is required since "const int", "const double", etc. will cause warnings on some systems
// while the declaration of "const T", where T is a non arithmetic type does not. Always returning "const Scalar&" is
// not possible, since the underlying expressions might not offer a valid address the reference could be referring to.
typedef typename internal::conditional<bool(internal::traits<Derived>::Flags&LvalueBit),
diff --git a/Eigen/src/Core/DenseStorage.h b/Eigen/src/Core/DenseStorage.h
index 3805084..19a6980 100644
--- a/Eigen/src/Core/DenseStorage.h
+++ b/Eigen/src/Core/DenseStorage.h
@@ -18,6 +18,8 @@
#define EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN(X)
#endif
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/Diagonal.h b/Eigen/src/Core/Diagonal.h
index d15f0af..7564c4c 100644
--- a/Eigen/src/Core/Diagonal.h
+++ b/Eigen/src/Core/Diagonal.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_DIAGONAL_H
#define EIGEN_DIAGONAL_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \class Diagonal
diff --git a/Eigen/src/Core/DiagonalMatrix.h b/Eigen/src/Core/DiagonalMatrix.h
index 474dcfa..cf5e906 100644
--- a/Eigen/src/Core/DiagonalMatrix.h
+++ b/Eigen/src/Core/DiagonalMatrix.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_DIAGONALMATRIX_H
#define EIGEN_DIAGONALMATRIX_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
#ifndef EIGEN_PARSED_BY_DOXYGEN
diff --git a/Eigen/src/Core/DiagonalProduct.h b/Eigen/src/Core/DiagonalProduct.h
index 7911d1c..3cd34ba 100644
--- a/Eigen/src/Core/DiagonalProduct.h
+++ b/Eigen/src/Core/DiagonalProduct.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_DIAGONALPRODUCT_H
#define EIGEN_DIAGONALPRODUCT_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \returns the diagonal matrix product of \c *this by the diagonal matrix \a diagonal.
diff --git a/Eigen/src/Core/Dot.h b/Eigen/src/Core/Dot.h
index 5c3441b..387b6ce 100644
--- a/Eigen/src/Core/Dot.h
+++ b/Eigen/src/Core/Dot.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_DOT_H
#define EIGEN_DOT_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/EigenBase.h b/Eigen/src/Core/EigenBase.h
index 6b3c7d3..105488d 100644
--- a/Eigen/src/Core/EigenBase.h
+++ b/Eigen/src/Core/EigenBase.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_EIGENBASE_H
#define EIGEN_EIGENBASE_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \class EigenBase
diff --git a/Eigen/src/Core/ForceAlignedAccess.h b/Eigen/src/Core/ForceAlignedAccess.h
index 817a43a..7c46573 100644
--- a/Eigen/src/Core/ForceAlignedAccess.h
+++ b/Eigen/src/Core/ForceAlignedAccess.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_FORCEALIGNEDACCESS_H
#define EIGEN_FORCEALIGNEDACCESS_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \class ForceAlignedAccess
diff --git a/Eigen/src/Core/Fuzzy.h b/Eigen/src/Core/Fuzzy.h
index 43aa49b..b16b2da 100644
--- a/Eigen/src/Core/Fuzzy.h
+++ b/Eigen/src/Core/Fuzzy.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_FUZZY_H
#define EIGEN_FUZZY_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal
diff --git a/Eigen/src/Core/GeneralProduct.h b/Eigen/src/Core/GeneralProduct.h
index 6906aa7..251b5d4 100644
--- a/Eigen/src/Core/GeneralProduct.h
+++ b/Eigen/src/Core/GeneralProduct.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_GENERAL_PRODUCT_H
#define EIGEN_GENERAL_PRODUCT_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
enum {
diff --git a/Eigen/src/Core/GenericPacketMath.h b/Eigen/src/Core/GenericPacketMath.h
index cf677a1..7223428 100644
--- a/Eigen/src/Core/GenericPacketMath.h
+++ b/Eigen/src/Core/GenericPacketMath.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_GENERIC_PACKET_MATH_H
#define EIGEN_GENERIC_PACKET_MATH_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
@@ -160,7 +162,7 @@
{
EIGEN_ALWAYS_INLINE operator T&() { return m_val; }
EIGEN_ALWAYS_INLINE operator const T&() const { return m_val; }
- EIGEN_ALWAYS_INLINE eigen_packet_wrapper() {}
+ EIGEN_ALWAYS_INLINE eigen_packet_wrapper() = default;
EIGEN_ALWAYS_INLINE eigen_packet_wrapper(const T &v) : m_val(v) {}
EIGEN_ALWAYS_INLINE eigen_packet_wrapper& operator=(const T &v) {
m_val = v;
diff --git a/Eigen/src/Core/GlobalFunctions.h b/Eigen/src/Core/GlobalFunctions.h
index 629af94..c6d36ea 100644
--- a/Eigen/src/Core/GlobalFunctions.h
+++ b/Eigen/src/Core/GlobalFunctions.h
@@ -51,6 +51,8 @@
} \
};
+#include "./InternalHeaderCheck.h"
+
namespace Eigen
{
EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(real,scalar_real_op,real part,\sa ArrayBase::real)
diff --git a/Eigen/src/Core/IO.h b/Eigen/src/Core/IO.h
index e81c315..efc2c43 100644
--- a/Eigen/src/Core/IO.h
+++ b/Eigen/src/Core/IO.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_IO_H
#define EIGEN_IO_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
enum { DontAlignCols = 1 };
diff --git a/Eigen/src/Core/IndexedView.h b/Eigen/src/Core/IndexedView.h
index 0847625..51e28b9 100644
--- a/Eigen/src/Core/IndexedView.h
+++ b/Eigen/src/Core/IndexedView.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_INDEXED_VIEW_H
#define EIGEN_INDEXED_VIEW_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
@@ -96,7 +98,7 @@
* - decltype(ArrayXi::LinSpaced(...))
* - Any view/expressions of the previous types
* - Eigen::ArithmeticSequence
- * - Eigen::internal::AllRange (helper for Eigen::all)
+ * - Eigen::internal::AllRange (helper for Eigen::placeholders::all)
* - Eigen::internal::SingleRange (helper for single index)
* - etc.
*
diff --git a/Eigen/src/Core/InternalHeaderCheck.h b/Eigen/src/Core/InternalHeaderCheck.h
new file mode 100644
index 0000000..1cea572
--- /dev/null
+++ b/Eigen/src/Core/InternalHeaderCheck.h
@@ -0,0 +1,3 @@
+#ifndef EIGEN_CORE_MODULE_H
+#error "Please include Eigen/Core instead of including headers inside the src directory directly."
+#endif
diff --git a/Eigen/src/Core/Inverse.h b/Eigen/src/Core/Inverse.h
index c514438..268f8d4 100644
--- a/Eigen/src/Core/Inverse.h
+++ b/Eigen/src/Core/Inverse.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_INVERSE_H
#define EIGEN_INVERSE_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
template<typename XprType,typename StorageKind> class InverseImpl;
diff --git a/Eigen/src/Core/Map.h b/Eigen/src/Core/Map.h
index 218cc15..56d1ff8 100644
--- a/Eigen/src/Core/Map.h
+++ b/Eigen/src/Core/Map.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_MAP_H
#define EIGEN_MAP_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
@@ -129,7 +131,6 @@
explicit inline Map(PointerArgType dataPtr, const StrideType& stride = StrideType())
: Base(cast_to_pointer_type(dataPtr)), m_stride(stride)
{
- PlainObjectType::Base::_check_template_params();
}
/** Constructor in the dynamic-size vector case.
@@ -142,7 +143,6 @@
inline Map(PointerArgType dataPtr, Index size, const StrideType& stride = StrideType())
: Base(cast_to_pointer_type(dataPtr), size), m_stride(stride)
{
- PlainObjectType::Base::_check_template_params();
}
/** Constructor in the dynamic-size matrix case.
@@ -156,7 +156,6 @@
inline Map(PointerArgType dataPtr, Index rows, Index cols, const StrideType& stride = StrideType())
: Base(cast_to_pointer_type(dataPtr), rows, cols), m_stride(stride)
{
- PlainObjectType::Base::_check_template_params();
}
EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Map)
diff --git a/Eigen/src/Core/MapBase.h b/Eigen/src/Core/MapBase.h
index d856447..89192c3 100644
--- a/Eigen/src/Core/MapBase.h
+++ b/Eigen/src/Core/MapBase.h
@@ -15,6 +15,8 @@
EIGEN_STATIC_ASSERT((int(internal::evaluator<Derived>::Flags) & LinearAccessBit) || Derived::IsVectorAtCompileTime, \
YOU_ARE_TRYING_TO_USE_AN_INDEX_BASED_ACCESSOR_ON_AN_EXPRESSION_THAT_DOES_NOT_SUPPORT_THAT)
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \ingroup Core_Module
diff --git a/Eigen/src/Core/MathFunctions.h b/Eigen/src/Core/MathFunctions.h
index 61b78f4..957cca7 100644
--- a/Eigen/src/Core/MathFunctions.h
+++ b/Eigen/src/Core/MathFunctions.h
@@ -17,6 +17,8 @@
#define EIGEN_LOG2E 1.442695040888963407359924681001892137426645954152985934135449406931109219L
#define EIGEN_LN2 0.693147180559945309417232121458176568075500134360255254120680009493393621L
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
// On WINCE, std::abs is defined for int only, so let's defined our own overloads:
@@ -469,10 +471,11 @@
template<typename Scalar>
struct round_impl
{
+ EIGEN_STATIC_ASSERT((!NumTraits<Scalar>::IsComplex), NUMERIC_TYPE_MUST_BE_REAL)
+
EIGEN_DEVICE_FUNC
static inline Scalar run(const Scalar& x)
{
- EIGEN_STATIC_ASSERT((!NumTraits<Scalar>::IsComplex), NUMERIC_TYPE_MUST_BE_REAL)
#if EIGEN_HAS_CXX11_MATH
EIGEN_USING_STD(round);
#endif
@@ -495,10 +498,11 @@
template<typename Scalar>
struct round_using_floor_ceil_impl
{
+ EIGEN_STATIC_ASSERT((!NumTraits<Scalar>::IsComplex), NUMERIC_TYPE_MUST_BE_REAL)
+
EIGEN_DEVICE_FUNC
static inline Scalar run(const Scalar& x)
{
- EIGEN_STATIC_ASSERT((!NumTraits<Scalar>::IsComplex), NUMERIC_TYPE_MUST_BE_REAL)
// Without C99 round/roundf, resort to floor/ceil.
EIGEN_USING_STD(floor);
EIGEN_USING_STD(ceil);
@@ -532,10 +536,11 @@
template<typename Scalar>
struct rint_impl {
+ EIGEN_STATIC_ASSERT((!NumTraits<Scalar>::IsComplex), NUMERIC_TYPE_MUST_BE_REAL)
+
EIGEN_DEVICE_FUNC
static inline Scalar run(const Scalar& x)
{
- EIGEN_STATIC_ASSERT((!NumTraits<Scalar>::IsComplex), NUMERIC_TYPE_MUST_BE_REAL)
#if EIGEN_HAS_CXX11_MATH
EIGEN_USING_STD(rint);
#endif
@@ -736,9 +741,10 @@
template<typename Scalar>
struct log1p_impl {
+ EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar)
+
EIGEN_DEVICE_FUNC static inline Scalar run(const Scalar& x)
{
- EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar)
#if EIGEN_HAS_CXX11_MATH
using std::log1p;
#else
@@ -751,9 +757,10 @@
// Specialization for complex types that are not supported by std::log1p.
template <typename RealScalar>
struct log1p_impl<std::complex<RealScalar> > {
+ EIGEN_STATIC_ASSERT_NON_INTEGER(RealScalar)
+
EIGEN_DEVICE_FUNC static inline std::complex<RealScalar> run(
const std::complex<RealScalar>& x) {
- EIGEN_STATIC_ASSERT_NON_INTEGER(RealScalar)
return std_fallback::log1p(x);
}
};
@@ -2006,9 +2013,10 @@
// Specialization for complex types that are not supported by std::expm1.
template <typename RealScalar>
struct expm1_impl<std::complex<RealScalar> > {
+ EIGEN_STATIC_ASSERT_NON_INTEGER(RealScalar)
+
EIGEN_DEVICE_FUNC static inline std::complex<RealScalar> run(
const std::complex<RealScalar>& x) {
- EIGEN_STATIC_ASSERT_NON_INTEGER(RealScalar)
RealScalar xr = x.real();
RealScalar xi = x.imag();
// expm1(z) = exp(z) - 1
diff --git a/Eigen/src/Core/MathFunctionsImpl.h b/Eigen/src/Core/MathFunctionsImpl.h
index 4eaaaa7..2c9bbb5 100644
--- a/Eigen/src/Core/MathFunctionsImpl.h
+++ b/Eigen/src/Core/MathFunctionsImpl.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_MATHFUNCTIONSIMPL_H
#define EIGEN_MATHFUNCTIONSIMPL_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
@@ -21,7 +23,7 @@
outside of which tanh(x) = +/-1 in single precision. The input is clamped
to the range [-c, c]. The value c is chosen as the smallest value where
the approximation evaluates to exactly 1. In the reange [-0.0004, 0.0004]
- the approxmation tanh(x) ~= x is used for better accuracy as x tends to zero.
+ the approximation tanh(x) ~= x is used for better accuracy as x tends to zero.
This implementation works on both scalars and packets.
*/
diff --git a/Eigen/src/Core/Matrix.h b/Eigen/src/Core/Matrix.h
index de54824..bc75a28 100644
--- a/Eigen/src/Core/Matrix.h
+++ b/Eigen/src/Core/Matrix.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_MATRIX_H
#define EIGEN_MATRIX_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
@@ -258,7 +260,6 @@
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
Matrix() : Base()
{
- Base::_check_template_params();
EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED
}
@@ -266,15 +267,12 @@
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
explicit Matrix(internal::constructor_without_unaligned_array_assert)
: Base(internal::constructor_without_unaligned_array_assert())
- { Base::_check_template_params(); EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED }
+ { EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED }
#if EIGEN_HAS_RVALUE_REFERENCES
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
Matrix(Matrix&& other) EIGEN_NOEXCEPT_IF(std::is_nothrow_move_constructible<Scalar>::value)
- : Base(std::move(other))
- {
- Base::_check_template_params();
- }
+ : Base(std::move(other)) {}
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
Matrix& operator=(Matrix&& other) EIGEN_NOEXCEPT_IF(std::is_nothrow_move_assignable<Scalar>::value)
{
@@ -328,7 +326,6 @@
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
explicit Matrix(const T& x)
{
- Base::_check_template_params();
Base::template _init1<T>(x);
}
@@ -336,7 +333,6 @@
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
Matrix(const T0& x, const T1& y)
{
- Base::_check_template_params();
Base::template _init2<T0,T1>(x, y);
}
@@ -388,7 +384,6 @@
EIGEN_DEVICE_FUNC
EIGEN_STRONG_INLINE Matrix(const Scalar& x, const Scalar& y, const Scalar& z)
{
- Base::_check_template_params();
EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Matrix, 3)
m_storage.data()[0] = x;
m_storage.data()[1] = y;
@@ -400,7 +395,6 @@
EIGEN_DEVICE_FUNC
EIGEN_STRONG_INLINE Matrix(const Scalar& x, const Scalar& y, const Scalar& z, const Scalar& w)
{
- Base::_check_template_params();
EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Matrix, 4)
m_storage.data()[0] = x;
m_storage.data()[1] = y;
diff --git a/Eigen/src/Core/MatrixBase.h b/Eigen/src/Core/MatrixBase.h
index 45c3a59..3552d5a 100644
--- a/Eigen/src/Core/MatrixBase.h
+++ b/Eigen/src/Core/MatrixBase.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_MATRIXBASE_H
#define EIGEN_MATRIXBASE_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \class MatrixBase
diff --git a/Eigen/src/Core/NestByValue.h b/Eigen/src/Core/NestByValue.h
index b427576..5f1dc84 100644
--- a/Eigen/src/Core/NestByValue.h
+++ b/Eigen/src/Core/NestByValue.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_NESTBYVALUE_H
#define EIGEN_NESTBYVALUE_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/NoAlias.h b/Eigen/src/Core/NoAlias.h
index 570283d..09c0aac 100644
--- a/Eigen/src/Core/NoAlias.h
+++ b/Eigen/src/Core/NoAlias.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_NOALIAS_H
#define EIGEN_NOALIAS_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \class NoAlias
diff --git a/Eigen/src/Core/NumTraits.h b/Eigen/src/Core/NumTraits.h
index 608a4e7..dfe6fe3 100644
--- a/Eigen/src/Core/NumTraits.h
+++ b/Eigen/src/Core/NumTraits.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_NUMTRAITS_H
#define EIGEN_NUMTRAITS_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/PartialReduxEvaluator.h b/Eigen/src/Core/PartialReduxEvaluator.h
index 29abf35..4040ae7 100644
--- a/Eigen/src/Core/PartialReduxEvaluator.h
+++ b/Eigen/src/Core/PartialReduxEvaluator.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_PARTIALREDUX_H
#define EIGEN_PARTIALREDUX_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
@@ -29,7 +31,7 @@
* some (optional) processing of the outcome, e.g., division by n for mean.
*
* For the vectorized path let's observe that the packet-size and outer-unrolling
-* are both decided by the assignement logic. So all we have to do is to decide
+* are both decided by the assignment logic. So all we have to do is to decide
* on the inner unrolling.
*
* For the unrolling, we can reuse "internal::redux_vec_unroller" from Redux.h,
diff --git a/Eigen/src/Core/PermutationMatrix.h b/Eigen/src/Core/PermutationMatrix.h
index 24fe660..a6910e2 100644
--- a/Eigen/src/Core/PermutationMatrix.h
+++ b/Eigen/src/Core/PermutationMatrix.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_PERMUTATIONMATRIX_H
#define EIGEN_PERMUTATIONMATRIX_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/PlainObjectBase.h b/Eigen/src/Core/PlainObjectBase.h
index 00cdc55..607e1c8 100644
--- a/Eigen/src/Core/PlainObjectBase.h
+++ b/Eigen/src/Core/PlainObjectBase.h
@@ -22,6 +22,8 @@
# define EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED
#endif
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
@@ -134,6 +136,16 @@
enum { NeedsToAlign = (SizeAtCompileTime != Dynamic) && (internal::traits<Derived>::Alignment>0) };
EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign)
+ EIGEN_STATIC_ASSERT(EIGEN_IMPLIES(MaxRowsAtCompileTime==1 && MaxColsAtCompileTime!=1, (int(Options)&RowMajor)==RowMajor), INVALID_MATRIX_TEMPLATE_PARAMETERS)
+ EIGEN_STATIC_ASSERT(EIGEN_IMPLIES(MaxColsAtCompileTime==1 && MaxRowsAtCompileTime!=1, (int(Options)&RowMajor)==0), INVALID_MATRIX_TEMPLATE_PARAMETERS)
+ EIGEN_STATIC_ASSERT((RowsAtCompileTime == Dynamic) || (RowsAtCompileTime >= 0), INVALID_MATRIX_TEMPLATE_PARAMETERS)
+ EIGEN_STATIC_ASSERT((ColsAtCompileTime == Dynamic) || (ColsAtCompileTime >= 0), INVALID_MATRIX_TEMPLATE_PARAMETERS)
+ EIGEN_STATIC_ASSERT((MaxRowsAtCompileTime == Dynamic) || (MaxRowsAtCompileTime >= 0), INVALID_MATRIX_TEMPLATE_PARAMETERS)
+ EIGEN_STATIC_ASSERT((MaxColsAtCompileTime == Dynamic) || (MaxColsAtCompileTime >= 0), INVALID_MATRIX_TEMPLATE_PARAMETERS)
+ EIGEN_STATIC_ASSERT((MaxRowsAtCompileTime == RowsAtCompileTime || RowsAtCompileTime==Dynamic), INVALID_MATRIX_TEMPLATE_PARAMETERS)
+ EIGEN_STATIC_ASSERT((MaxColsAtCompileTime == ColsAtCompileTime || ColsAtCompileTime==Dynamic), INVALID_MATRIX_TEMPLATE_PARAMETERS)
+ EIGEN_STATIC_ASSERT(((Options & (DontAlign|RowMajor)) == Options), INVALID_MATRIX_TEMPLATE_PARAMETERS)
+
EIGEN_DEVICE_FUNC
Base& base() { return *static_cast<Base*>(this); }
EIGEN_DEVICE_FUNC
@@ -270,7 +282,7 @@
EIGEN_DEVICE_FUNC
EIGEN_STRONG_INLINE void resize(Index rows, Index cols)
{
- eigen_assert( EIGEN_IMPLIES(RowsAtCompileTime!=Dynamic,rows==RowsAtCompileTime)
+ eigen_assert(EIGEN_IMPLIES(RowsAtCompileTime!=Dynamic,rows==RowsAtCompileTime)
&& EIGEN_IMPLIES(ColsAtCompileTime!=Dynamic,cols==ColsAtCompileTime)
&& EIGEN_IMPLIES(RowsAtCompileTime==Dynamic && MaxRowsAtCompileTime!=Dynamic,rows<=MaxRowsAtCompileTime)
&& EIGEN_IMPLIES(ColsAtCompileTime==Dynamic && MaxColsAtCompileTime!=Dynamic,cols<=MaxColsAtCompileTime)
@@ -475,7 +487,6 @@
EIGEN_DEVICE_FUNC
EIGEN_STRONG_INLINE PlainObjectBase() : m_storage()
{
-// _check_template_params();
// EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED
}
@@ -486,7 +497,7 @@
explicit PlainObjectBase(internal::constructor_without_unaligned_array_assert)
: m_storage(internal::constructor_without_unaligned_array_assert())
{
-// _check_template_params(); EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED
+ // EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED
}
#endif
@@ -500,7 +511,6 @@
EIGEN_DEVICE_FUNC
PlainObjectBase& operator=(PlainObjectBase&& other) EIGEN_NOEXCEPT
{
- _check_template_params();
m_storage = std::move(other.m_storage);
return *this;
}
@@ -514,7 +524,6 @@
EIGEN_STRONG_INLINE PlainObjectBase(Index size, Index rows, Index cols)
: m_storage(size, rows, cols)
{
-// _check_template_params();
// EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED
}
@@ -534,7 +543,6 @@
PlainObjectBase(const Scalar& a0, const Scalar& a1, const Scalar& a2, const Scalar& a3, const ArgTypes&... args)
: m_storage()
{
- _check_template_params();
EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(PlainObjectBase, sizeof...(args) + 4);
m_storage.data()[0] = a0;
m_storage.data()[1] = a1;
@@ -552,8 +560,6 @@
explicit EIGEN_STRONG_INLINE PlainObjectBase(const std::initializer_list<std::initializer_list<Scalar>>& list)
: m_storage()
{
- _check_template_params();
-
size_t list_size = 0;
if (list.begin() != list.end()) {
list_size = list.begin()->size();
@@ -589,7 +595,6 @@
EIGEN_STRONG_INLINE PlainObjectBase(const DenseBase<OtherDerived> &other)
: m_storage()
{
- _check_template_params();
resizeLike(other);
_set_noalias(other);
}
@@ -600,7 +605,6 @@
EIGEN_STRONG_INLINE PlainObjectBase(const EigenBase<OtherDerived> &other)
: m_storage()
{
- _check_template_params();
resizeLike(other);
*this = other.derived();
}
@@ -609,7 +613,6 @@
EIGEN_DEVICE_FUNC
EIGEN_STRONG_INLINE PlainObjectBase(const ReturnByValue<OtherDerived>& other)
{
- _check_template_params();
// FIXME this does not automatically transpose vectors if necessary
resize(other.rows(), other.cols());
other.evalTo(this->derived());
@@ -964,21 +967,6 @@
void swap(DenseBase<OtherDerived> const & other)
{ Base::swap(other.derived()); }
- EIGEN_DEVICE_FUNC
- static EIGEN_STRONG_INLINE void _check_template_params()
- {
- EIGEN_STATIC_ASSERT((EIGEN_IMPLIES(MaxRowsAtCompileTime==1 && MaxColsAtCompileTime!=1, (int(Options)&RowMajor)==RowMajor)
- && EIGEN_IMPLIES(MaxColsAtCompileTime==1 && MaxRowsAtCompileTime!=1, (int(Options)&RowMajor)==0)
- && ((RowsAtCompileTime == Dynamic) || (RowsAtCompileTime >= 0))
- && ((ColsAtCompileTime == Dynamic) || (ColsAtCompileTime >= 0))
- && ((MaxRowsAtCompileTime == Dynamic) || (MaxRowsAtCompileTime >= 0))
- && ((MaxColsAtCompileTime == Dynamic) || (MaxColsAtCompileTime >= 0))
- && (MaxRowsAtCompileTime == RowsAtCompileTime || RowsAtCompileTime==Dynamic)
- && (MaxColsAtCompileTime == ColsAtCompileTime || ColsAtCompileTime==Dynamic)
- && (Options & (DontAlign|RowMajor)) == Options),
- INVALID_MATRIX_TEMPLATE_PARAMETERS)
- }
-
enum { IsPlainObjectBase = 1 };
#endif
public:
diff --git a/Eigen/src/Core/Product.h b/Eigen/src/Core/Product.h
index 1941749..545fdb9 100644
--- a/Eigen/src/Core/Product.h
+++ b/Eigen/src/Core/Product.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_PRODUCT_H
#define EIGEN_PRODUCT_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
template<typename Lhs, typename Rhs, int Option, typename StorageKind> class ProductImpl;
diff --git a/Eigen/src/Core/ProductEvaluators.h b/Eigen/src/Core/ProductEvaluators.h
index b9eab97..42e92c2 100644
--- a/Eigen/src/Core/ProductEvaluators.h
+++ b/Eigen/src/Core/ProductEvaluators.h
@@ -13,6 +13,8 @@
#ifndef EIGEN_PRODUCTEVALUATORS_H
#define EIGEN_PRODUCTEVALUATORS_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
@@ -427,8 +429,8 @@
// 3 - it makes this fallback consistent with the heavy GEMM routine.
// 4 - it fully by-passes huge stack allocation attempts when multiplying huge fixed-size matrices.
// (see https://stackoverflow.com/questions/54738495)
- // For small fixed sizes matrices, howver, the gains are less obvious, it is sometimes x2 faster, but sometimes x3 slower,
- // and the behavior depends also a lot on the compiler... This is why this re-writting strategy is currently
+ // For small fixed sizes matrices, however, the gains are less obvious, it is sometimes x2 faster, but sometimes x3 slower,
+ // and the behavior depends also a lot on the compiler... This is why this re-writing strategy is currently
// enabled only when falling back from the main GEMM.
template<typename Dst, typename Func>
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
diff --git a/Eigen/src/Core/Random.h b/Eigen/src/Core/Random.h
index dab2ac8..0b304e7 100644
--- a/Eigen/src/Core/Random.h
+++ b/Eigen/src/Core/Random.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_RANDOM_H
#define EIGEN_RANDOM_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/Redux.h b/Eigen/src/Core/Redux.h
index 5732ba8..e05a0cc 100644
--- a/Eigen/src/Core/Redux.h
+++ b/Eigen/src/Core/Redux.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_REDUX_H
#define EIGEN_REDUX_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/Ref.h b/Eigen/src/Core/Ref.h
index 716552a..3e1d99c 100644
--- a/Eigen/src/Core/Ref.h
+++ b/Eigen/src/Core/Ref.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_REF_H
#define EIGEN_REF_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
@@ -298,7 +300,7 @@
typename internal::enable_if<bool(Traits::template match<Derived>::MatchAtCompileTime),Derived>::type* = 0)
{
EIGEN_STATIC_ASSERT(bool(Traits::template match<Derived>::MatchAtCompileTime), STORAGE_LAYOUT_DOES_NOT_MATCH);
- // Construction must pass since we will not create temprary storage in the non-const case.
+ // Construction must pass since we will not create temporary storage in the non-const case.
const bool success = Base::construct(expr.derived());
EIGEN_UNUSED_VARIABLE(success)
eigen_assert(success);
diff --git a/Eigen/src/Core/Replicate.h b/Eigen/src/Core/Replicate.h
index ab5be7e..0ee9a10 100644
--- a/Eigen/src/Core/Replicate.h
+++ b/Eigen/src/Core/Replicate.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_REPLICATE_H
#define EIGEN_REPLICATE_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/Reshaped.h b/Eigen/src/Core/Reshaped.h
index 52de73b..8a9cedb 100644
--- a/Eigen/src/Core/Reshaped.h
+++ b/Eigen/src/Core/Reshaped.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_RESHAPED_H
#define EIGEN_RESHAPED_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \class Reshaped
diff --git a/Eigen/src/Core/ReturnByValue.h b/Eigen/src/Core/ReturnByValue.h
index 4dad13e..d2dd349 100644
--- a/Eigen/src/Core/ReturnByValue.h
+++ b/Eigen/src/Core/ReturnByValue.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_RETURNBYVALUE_H
#define EIGEN_RETURNBYVALUE_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/Reverse.h b/Eigen/src/Core/Reverse.h
index 28cdd76..7ad5023 100644
--- a/Eigen/src/Core/Reverse.h
+++ b/Eigen/src/Core/Reverse.h
@@ -12,6 +12,8 @@
#ifndef EIGEN_REVERSE_H
#define EIGEN_REVERSE_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/Select.h b/Eigen/src/Core/Select.h
index 7c86bf8..f2a2a03 100644
--- a/Eigen/src/Core/Select.h
+++ b/Eigen/src/Core/Select.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_SELECT_H
#define EIGEN_SELECT_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \class Select
diff --git a/Eigen/src/Core/SelfAdjointView.h b/Eigen/src/Core/SelfAdjointView.h
index 28f3a70..97c2a19 100644
--- a/Eigen/src/Core/SelfAdjointView.h
+++ b/Eigen/src/Core/SelfAdjointView.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_SELFADJOINTMATRIX_H
#define EIGEN_SELFADJOINTMATRIX_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \class SelfAdjointView
@@ -50,6 +52,7 @@
: public TriangularBase<SelfAdjointView<MatrixType_, UpLo> >
{
public:
+ EIGEN_STATIC_ASSERT(UpLo==Lower || UpLo==Upper,SELFADJOINTVIEW_ACCEPTS_UPPER_AND_LOWER_MODE_ONLY)
typedef MatrixType_ MatrixType;
typedef TriangularBase<SelfAdjointView> Base;
@@ -71,10 +74,7 @@
typedef typename MatrixType::PlainObject PlainObject;
EIGEN_DEVICE_FUNC
- explicit inline SelfAdjointView(MatrixType& matrix) : m_matrix(matrix)
- {
- EIGEN_STATIC_ASSERT(UpLo==Lower || UpLo==Upper,SELFADJOINTVIEW_ACCEPTS_UPPER_AND_LOWER_MODE_ONLY);
- }
+ explicit inline SelfAdjointView(MatrixType& matrix) : m_matrix(matrix) { }
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
inline Index rows() const EIGEN_NOEXCEPT { return m_matrix.rows(); }
diff --git a/Eigen/src/Core/SelfCwiseBinaryOp.h b/Eigen/src/Core/SelfCwiseBinaryOp.h
index 7c89c2e..14dbec0 100644
--- a/Eigen/src/Core/SelfCwiseBinaryOp.h
+++ b/Eigen/src/Core/SelfCwiseBinaryOp.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_SELFCWISEBINARYOP_H
#define EIGEN_SELFCWISEBINARYOP_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
// TODO generalize the scalar type of 'other'
diff --git a/Eigen/src/Core/Solve.h b/Eigen/src/Core/Solve.h
index af30fce..3d3a3c9 100644
--- a/Eigen/src/Core/Solve.h
+++ b/Eigen/src/Core/Solve.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_SOLVE_H
#define EIGEN_SOLVE_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
template<typename Decomposition, typename RhsType, typename StorageKind> class SolveImpl;
diff --git a/Eigen/src/Core/SolveTriangular.h b/Eigen/src/Core/SolveTriangular.h
index dfbf995..518a6c6 100644
--- a/Eigen/src/Core/SolveTriangular.h
+++ b/Eigen/src/Core/SolveTriangular.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_SOLVETRIANGULAR_H
#define EIGEN_SOLVETRIANGULAR_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/SolverBase.h b/Eigen/src/Core/SolverBase.h
index 5014610..2f238ac 100644
--- a/Eigen/src/Core/SolverBase.h
+++ b/Eigen/src/Core/SolverBase.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_SOLVERBASE_H
#define EIGEN_SOLVERBASE_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/StableNorm.h b/Eigen/src/Core/StableNorm.h
index 4a3f0cc..c006c25 100644
--- a/Eigen/src/Core/StableNorm.h
+++ b/Eigen/src/Core/StableNorm.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_STABLENORM_H
#define EIGEN_STABLENORM_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/StlIterators.h b/Eigen/src/Core/StlIterators.h
index b412b39..d9529c0 100644
--- a/Eigen/src/Core/StlIterators.h
+++ b/Eigen/src/Core/StlIterators.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_STLITERATORS_H
#define EIGEN_STLITERATORS_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/Stride.h b/Eigen/src/Core/Stride.h
index 6ad48f8..8d7820d 100644
--- a/Eigen/src/Core/Stride.h
+++ b/Eigen/src/Core/Stride.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_STRIDE_H
#define EIGEN_STRIDE_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \class Stride
diff --git a/Eigen/src/Core/Swap.h b/Eigen/src/Core/Swap.h
index 180a4e5..b2e7511 100644
--- a/Eigen/src/Core/Swap.h
+++ b/Eigen/src/Core/Swap.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_SWAP_H
#define EIGEN_SWAP_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/Transpose.h b/Eigen/src/Core/Transpose.h
index 2bc658f..d302766 100644
--- a/Eigen/src/Core/Transpose.h
+++ b/Eigen/src/Core/Transpose.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_TRANSPOSE_H
#define EIGEN_TRANSPOSE_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/Transpositions.h b/Eigen/src/Core/Transpositions.h
index 4119621..6996ca2 100644
--- a/Eigen/src/Core/Transpositions.h
+++ b/Eigen/src/Core/Transpositions.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_TRANSPOSITIONS_H
#define EIGEN_TRANSPOSITIONS_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
template<typename Derived>
diff --git a/Eigen/src/Core/TriangularMatrix.h b/Eigen/src/Core/TriangularMatrix.h
index de95ff1..e9a4cae 100644
--- a/Eigen/src/Core/TriangularMatrix.h
+++ b/Eigen/src/Core/TriangularMatrix.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_TRIANGULARMATRIX_H
#define EIGEN_TRIANGULARMATRIX_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/VectorBlock.h b/Eigen/src/Core/VectorBlock.h
index 71c5b95..ee28da1 100644
--- a/Eigen/src/Core/VectorBlock.h
+++ b/Eigen/src/Core/VectorBlock.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_VECTORBLOCK_H
#define EIGEN_VECTORBLOCK_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
@@ -66,6 +68,7 @@
};
public:
EIGEN_DENSE_PUBLIC_INTERFACE(VectorBlock)
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(VectorBlock)
using Base::operator=;
@@ -76,18 +79,14 @@
: Base(vector,
IsColVector ? start : 0, IsColVector ? 0 : start,
IsColVector ? size : 1, IsColVector ? 1 : size)
- {
- EIGEN_STATIC_ASSERT_VECTOR_ONLY(VectorBlock);
- }
+ { }
/** Fixed-size constructor
*/
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
VectorBlock(VectorType& vector, Index start)
: Base(vector, IsColVector ? start : 0, IsColVector ? 0 : start)
- {
- EIGEN_STATIC_ASSERT_VECTOR_ONLY(VectorBlock);
- }
+ { }
};
diff --git a/Eigen/src/Core/VectorwiseOp.h b/Eigen/src/Core/VectorwiseOp.h
index 870f4f1..3c3cc45 100644
--- a/Eigen/src/Core/VectorwiseOp.h
+++ b/Eigen/src/Core/VectorwiseOp.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_PARTIAL_REDUX_H
#define EIGEN_PARTIAL_REDUX_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \class PartialReduxExpr
@@ -594,7 +596,7 @@
return m_matrix += extendedTo(other.derived());
}
- /** Substracts the vector \a other to each subvector of \c *this */
+ /** Subtracts the vector \a other to each subvector of \c *this */
template<typename OtherDerived>
EIGEN_DEVICE_FUNC
ExpressionType& operator-=(const DenseBase<OtherDerived>& other)
@@ -604,7 +606,7 @@
return m_matrix -= extendedTo(other.derived());
}
- /** Multiples each subvector of \c *this by the vector \a other */
+ /** Multiplies each subvector of \c *this by the vector \a other */
template<typename OtherDerived>
EIGEN_DEVICE_FUNC
ExpressionType& operator*=(const DenseBase<OtherDerived>& other)
diff --git a/Eigen/src/Core/Visitor.h b/Eigen/src/Core/Visitor.h
index 00bcca8..cf4e06a 100644
--- a/Eigen/src/Core/Visitor.h
+++ b/Eigen/src/Core/Visitor.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_VISITOR_H
#define EIGEN_VISITOR_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/arch/AVX/Complex.h b/Eigen/src/Core/arch/AVX/Complex.h
index 0491be9..3abb5bd 100644
--- a/Eigen/src/Core/arch/AVX/Complex.h
+++ b/Eigen/src/Core/arch/AVX/Complex.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_COMPLEX_AVX_H
#define EIGEN_COMPLEX_AVX_H
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
@@ -99,7 +101,9 @@
template<> EIGEN_STRONG_INLINE Packet4cf pset1<Packet4cf>(const std::complex<float>& from)
{
- return Packet4cf(_mm256_castpd_ps(_mm256_broadcast_sd((const double*)(const void*)&from)));
+ const float re = std::real(from);
+ const float im = std::imag(from);
+ return Packet4cf(_mm256_set_ps(im, re, im, re, im, re, im, re));
}
template<> EIGEN_STRONG_INLINE Packet4cf ploaddup<Packet4cf>(const std::complex<float>* from)
diff --git a/Eigen/src/Core/arch/AVX/MathFunctions.h b/Eigen/src/Core/arch/AVX/MathFunctions.h
index 67041c8..17b9d0b 100644
--- a/Eigen/src/Core/arch/AVX/MathFunctions.h
+++ b/Eigen/src/Core/arch/AVX/MathFunctions.h
@@ -14,6 +14,8 @@
* Julien Pommier's sse math library: http://gruntthepeon.free.fr/ssemath/
*/
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/arch/AVX/PacketMath.h b/Eigen/src/Core/arch/AVX/PacketMath.h
index 41cb7af..cdf0fdf 100644
--- a/Eigen/src/Core/arch/AVX/PacketMath.h
+++ b/Eigen/src/Core/arch/AVX/PacketMath.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_PACKET_MATH_AVX_H
#define EIGEN_PACKET_MATH_AVX_H
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
@@ -1439,7 +1441,6 @@
// Convert float to bfloat16 according to round-to-nearest-even/denormals algorithm.
EIGEN_STRONG_INLINE Packet8bf F32ToBf16(const Packet8f& a) {
- Packet8bf r;
__m256i input = _mm256_castps_si256(a);
diff --git a/Eigen/src/Core/arch/AVX/TypeCasting.h b/Eigen/src/Core/arch/AVX/TypeCasting.h
index d507fb6..320479b 100644
--- a/Eigen/src/Core/arch/AVX/TypeCasting.h
+++ b/Eigen/src/Core/arch/AVX/TypeCasting.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_TYPE_CASTING_AVX_H
#define EIGEN_TYPE_CASTING_AVX_H
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/arch/AVX512/Complex.h b/Eigen/src/Core/arch/AVX512/Complex.h
index c11b8d2..e1b6ff2 100644
--- a/Eigen/src/Core/arch/AVX512/Complex.h
+++ b/Eigen/src/Core/arch/AVX512/Complex.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_COMPLEX_AVX512_H
#define EIGEN_COMPLEX_AVX512_H
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
@@ -97,7 +99,9 @@
template<> EIGEN_STRONG_INLINE Packet8cf pset1<Packet8cf>(const std::complex<float>& from)
{
- return Packet8cf(_mm512_castpd_ps(pload1<Packet8d>((const double*)(const void*)&from)));
+ const float re = std::real(from);
+ const float im = std::imag(from);
+ return Packet8cf(_mm512_set_ps(im, re, im, re, im, re, im, re, im, re, im, re, im, re, im, re));
}
template<> EIGEN_STRONG_INLINE Packet8cf ploaddup<Packet8cf>(const std::complex<float>* from)
diff --git a/Eigen/src/Core/arch/AVX512/MathFunctions.h b/Eigen/src/Core/arch/AVX512/MathFunctions.h
index 6fd726d..26ab168 100644
--- a/Eigen/src/Core/arch/AVX512/MathFunctions.h
+++ b/Eigen/src/Core/arch/AVX512/MathFunctions.h
@@ -10,6 +10,8 @@
#ifndef THIRD_PARTY_EIGEN3_EIGEN_SRC_CORE_ARCH_AVX512_MATHFUNCTIONS_H_
#define THIRD_PARTY_EIGEN3_EIGEN_SRC_CORE_ARCH_AVX512_MATHFUNCTIONS_H_
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/arch/AVX512/PacketMath.h b/Eigen/src/Core/arch/AVX512/PacketMath.h
index 0810f66..4f85726 100644
--- a/Eigen/src/Core/arch/AVX512/PacketMath.h
+++ b/Eigen/src/Core/arch/AVX512/PacketMath.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_PACKET_MATH_AVX512_H
#define EIGEN_PACKET_MATH_AVX512_H
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
@@ -2202,7 +2204,6 @@
template<> EIGEN_STRONG_INLINE Packet16bf
ploaddup<Packet16bf>(const bfloat16* from) {
- Packet16bf r;
unsigned short a = from[0].value;
unsigned short b = from[1].value;
unsigned short c = from[2].value;
@@ -2216,7 +2217,6 @@
template<> EIGEN_STRONG_INLINE Packet16bf
ploadquad(const bfloat16* from) {
- Packet16bf r;
unsigned short a = from[0].value;
unsigned short b = from[1].value;
unsigned short c = from[2].value;
@@ -2234,7 +2234,7 @@
#if defined(EIGEN_VECTORIZE_AVX512BF16) && EIGEN_GNUC_AT_LEAST(10, 1)
// Since GCC 10.1 supports avx512bf16 and C style explicit cast
- // (C++ static_cast is not supported yet), do converion via intrinsic
+ // (C++ static_cast is not supported yet), do conversion via intrinsic
// and register path for performance.
r = (__m256i)(_mm512_cvtneps_pbh(a));
diff --git a/Eigen/src/Core/arch/AVX512/TypeCasting.h b/Eigen/src/Core/arch/AVX512/TypeCasting.h
index 3304127..2f299e2 100644
--- a/Eigen/src/Core/arch/AVX512/TypeCasting.h
+++ b/Eigen/src/Core/arch/AVX512/TypeCasting.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_TYPE_CASTING_AVX512_H
#define EIGEN_TYPE_CASTING_AVX512_H
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/arch/AltiVec/Complex.h b/Eigen/src/Core/arch/AltiVec/Complex.h
index b603dff..f730ce8 100644
--- a/Eigen/src/Core/arch/AltiVec/Complex.h
+++ b/Eigen/src/Core/arch/AltiVec/Complex.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_COMPLEX32_ALTIVEC_H
#define EIGEN_COMPLEX32_ALTIVEC_H
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/arch/AltiVec/MathFunctions.h b/Eigen/src/Core/arch/AltiVec/MathFunctions.h
index 3a7a329..d6e3a00 100644
--- a/Eigen/src/Core/arch/AltiVec/MathFunctions.h
+++ b/Eigen/src/Core/arch/AltiVec/MathFunctions.h
@@ -12,6 +12,8 @@
#ifndef EIGEN_MATH_FUNCTIONS_ALTIVEC_H
#define EIGEN_MATH_FUNCTIONS_ALTIVEC_H
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/arch/AltiVec/MatrixProduct.h b/Eigen/src/Core/arch/AltiVec/MatrixProduct.h
index 3f79b97..1d67d60 100644
--- a/Eigen/src/Core/arch/AltiVec/MatrixProduct.h
+++ b/Eigen/src/Core/arch/AltiVec/MatrixProduct.h
@@ -43,6 +43,8 @@
* - Check StorageOrder on dhs_pack (the innermost second loop seems unvectorized when it could). *
* - Check the possibility of transposing as GETREAL and GETIMAG when needed. *
**************************************************************************************************/
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h b/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h
index 33d5434..d4287cc 100644
--- a/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h
+++ b/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h
@@ -5,6 +5,8 @@
#define EIGEN_POWER_PREFETCH(p)
#endif
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h b/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h
index 6540c6f..f1f8352 100644
--- a/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h
+++ b/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h
@@ -19,6 +19,8 @@
#endif
#endif
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/arch/AltiVec/PacketMath.h b/Eigen/src/Core/arch/AltiVec/PacketMath.h
index 2a44054..c6b632f 100755
--- a/Eigen/src/Core/arch/AltiVec/PacketMath.h
+++ b/Eigen/src/Core/arch/AltiVec/PacketMath.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_PACKET_MATH_ALTIVEC_H
#define EIGEN_PACKET_MATH_ALTIVEC_H
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/arch/CUDA/Complex.h b/Eigen/src/Core/arch/CUDA/Complex.h
index deb4c86..425e6c2 100644
--- a/Eigen/src/Core/arch/CUDA/Complex.h
+++ b/Eigen/src/Core/arch/CUDA/Complex.h
@@ -11,13 +11,24 @@
#ifndef EIGEN_COMPLEX_CUDA_H
#define EIGEN_COMPLEX_CUDA_H
-// clang-format off
// Many std::complex methods such as operator+, operator-, operator* and
// operator/ are not constexpr. Due to this, GCC and older versions of clang do
// not treat them as device functions and thus Eigen functors making use of
// these operators fail to compile. Here, we manually specialize these
// operators and functors for complex types when building for CUDA to enable
// their use on-device.
+//
+// NOTES:
+// - Compound assignment operators +=,-=,*=,/=(Scalar) will not work on device,
+// since they are already specialized in the standard. Using them will result
+// in silent kernel failures.
+// - Compiling with MSVC and using +=,-=,*=,/=(std::complex<Scalar>) will lead
+// to duplicate definition errors, since these are already specialized in
+// Visual Studio's <complex> header (contrary to the standard). This is
+// preferable to removing such definitions, which will lead to silent kernel
+// failures.
+// - Compiling with ICC requires defining _USE_COMPLEX_SPECIALIZATION_ prior
+// to the first inclusion of <complex>.
#if defined(EIGEN_CUDACC) && defined(EIGEN_GPU_COMPILE_PHASE)
@@ -43,6 +54,8 @@
using Eigen::complex_operator_detail::operator==; \
using Eigen::complex_operator_detail::operator!=;
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
// Specialized std::complex overloads.
diff --git a/Eigen/src/Core/arch/Default/BFloat16.h b/Eigen/src/Core/arch/Default/BFloat16.h
index 1c28f4f..88f5c9b 100644
--- a/Eigen/src/Core/arch/Default/BFloat16.h
+++ b/Eigen/src/Core/arch/Default/BFloat16.h
@@ -16,6 +16,8 @@
#ifndef EIGEN_BFLOAT16_H
#define EIGEN_BFLOAT16_H
+#include "../../InternalHeaderCheck.h"
+
#define BF16_PACKET_FUNCTION(PACKET_F, PACKET_BF16, METHOD) \
template <> \
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS EIGEN_UNUSED \
@@ -251,12 +253,7 @@
output.value = std::signbit(v) ? 0xFFC0: 0x7FC0;
return output;
}
- const uint16_t* p = reinterpret_cast<const uint16_t*>(&v);
-#if defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
- output.value = p[0];
-#else
- output.value = p[1];
-#endif
+ output.value = static_cast<numext::uint16_t>(numext::bit_cast<numext::uint32_t>(v) >> 16);
return output;
}
@@ -462,14 +459,7 @@
}
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC float bfloat16_to_float(__bfloat16_raw h) {
- float result = 0;
- unsigned short* q = reinterpret_cast<unsigned short*>(&result);
-#if defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
- q[0] = h.value;
-#else
- q[1] = h.value;
-#endif
- return result;
+ return numext::bit_cast<float>(static_cast<numext::uint32_t>(h.value) << 16);
}
// --- standard functions ---
diff --git a/Eigen/src/Core/arch/Default/ConjHelper.h b/Eigen/src/Core/arch/Default/ConjHelper.h
index 53830b5..6b5afe3 100644
--- a/Eigen/src/Core/arch/Default/ConjHelper.h
+++ b/Eigen/src/Core/arch/Default/ConjHelper.h
@@ -38,6 +38,8 @@
} \
};
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h b/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h
index 596d8a5..071acf0 100644
--- a/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h
+++ b/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h
@@ -16,6 +16,8 @@
#ifndef EIGEN_ARCH_GENERIC_PACKET_MATH_FUNCTIONS_H
#define EIGEN_ARCH_GENERIC_PACKET_MATH_FUNCTIONS_H
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
@@ -570,7 +572,7 @@
using Eigen::numext::uint64_t;
const double pio2_62 = 3.4061215800865545e-19; // pi/2 * 2^-62
- const uint64_t zero_dot_five = uint64_t(1) << 61; // 0.5 in 2.62-bit fixed-point foramt
+ const uint64_t zero_dot_five = uint64_t(1) << 61; // 0.5 in 2.62-bit fixed-point format
// 192 bits of 2/pi for Payne-Hanek reduction
// Bits are introduced by packet of 8 to enable aligned reads.
diff --git a/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h b/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h
index 730cc73..03e3820 100644
--- a/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h
+++ b/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_ARCH_GENERIC_PACKET_MATH_FUNCTIONS_FWD_H
#define EIGEN_ARCH_GENERIC_PACKET_MATH_FUNCTIONS_FWD_H
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/arch/Default/Half.h b/Eigen/src/Core/arch/Default/Half.h
index 9f8e8cc..df82612 100644
--- a/Eigen/src/Core/arch/Default/Half.h
+++ b/Eigen/src/Core/arch/Default/Half.h
@@ -36,6 +36,7 @@
#ifndef EIGEN_HALF_H
#define EIGEN_HALF_H
+#include "../../InternalHeaderCheck.h"
#include <sstream>
#if defined(EIGEN_HAS_GPU_FP16) || defined(EIGEN_HAS_ARM64_FP16_SCALAR_ARITHMETIC)
@@ -261,7 +262,7 @@
#if (defined(EIGEN_HAS_CUDA_FP16) && defined(EIGEN_CUDA_ARCH) && \
EIGEN_CUDA_ARCH >= 530) || \
(defined(EIGEN_HAS_HIP_FP16) && defined(HIP_DEVICE_COMPILE))
-// Note: We deliberatly do *not* define this to 1 even if we have Arm's native
+// Note: We deliberately do *not* define this to 1 even if we have Arm's native
// fp16 type since GPU halfs are rather different from native CPU halfs.
// TODO: Rename to something like EIGEN_HAS_NATIVE_GPU_FP16
#define EIGEN_HAS_NATIVE_FP16
diff --git a/Eigen/src/Core/arch/Default/TypeCasting.h b/Eigen/src/Core/arch/Default/TypeCasting.h
index fb8183b7..b71cbdf 100644
--- a/Eigen/src/Core/arch/Default/TypeCasting.h
+++ b/Eigen/src/Core/arch/Default/TypeCasting.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_GENERIC_TYPE_CASTING_H
#define EIGEN_GENERIC_TYPE_CASTING_H
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/arch/GPU/MathFunctions.h b/Eigen/src/Core/arch/GPU/MathFunctions.h
index d2b3a25..ad61e95 100644
--- a/Eigen/src/Core/arch/GPU/MathFunctions.h
+++ b/Eigen/src/Core/arch/GPU/MathFunctions.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_MATH_FUNCTIONS_GPU_H
#define EIGEN_MATH_FUNCTIONS_GPU_H
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/arch/GPU/PacketMath.h b/Eigen/src/Core/arch/GPU/PacketMath.h
index 25c45fd..4c68536 100644
--- a/Eigen/src/Core/arch/GPU/PacketMath.h
+++ b/Eigen/src/Core/arch/GPU/PacketMath.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_PACKET_MATH_GPU_H
#define EIGEN_PACKET_MATH_GPU_H
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/arch/GPU/Tuple.h b/Eigen/src/Core/arch/GPU/Tuple.h
new file mode 100644
index 0000000..d381cd8
--- /dev/null
+++ b/Eigen/src/Core/arch/GPU/Tuple.h
@@ -0,0 +1,302 @@
+// This file is part of Eigen, a lightweight C++ template library
+// for linear algebra.
+//
+// Copyright (C) 2021 The Eigen Team
+//
+// 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_TUPLE_GPU
+#define EIGEN_TUPLE_GPU
+
+#include <type_traits>
+#include <utility>
+
+// This is a replacement of std::tuple that can be used in device code.
+
+namespace Eigen {
+namespace internal {
+namespace tuple_impl {
+
+// Internal tuple implementation.
+template<size_t N, typename... Types>
+class TupleImpl;
+
+// Generic recursive tuple.
+template<size_t N, typename T1, typename... Ts>
+class TupleImpl<N, T1, Ts...> {
+ public:
+ // Tuple may contain Eigen types.
+ EIGEN_MAKE_ALIGNED_OPERATOR_NEW
+
+ // Default constructor, enable if all types are default-constructible.
+ template<typename U1 = T1, typename EnableIf = typename std::enable_if<
+ std::is_default_constructible<U1>::value
+ && reduce_all<std::is_default_constructible<Ts>::value...>::value
+ >::type>
+ EIGEN_CONSTEXPR EIGEN_DEVICE_FUNC
+ TupleImpl() : head_{}, tail_{} {}
+
+ // Element constructor.
+ template<typename U1, typename... Us,
+ // Only enable if...
+ typename EnableIf = typename std::enable_if<
+ // the number of input arguments match, and ...
+ sizeof...(Us) == sizeof...(Ts) && (
+ // this does not look like a copy/move constructor.
+ N > 1 || std::is_convertible<U1, T1>::value)
+ >::type>
+ EIGEN_CONSTEXPR EIGEN_DEVICE_FUNC
+ TupleImpl(U1&& arg1, Us&&... args)
+ : head_(std::forward<U1>(arg1)), tail_(std::forward<Us>(args)...) {}
+
+ // The first stored value.
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
+ T1& head() {
+ return head_;
+ }
+
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
+ const T1& head() const {
+ return head_;
+ }
+
+ // The tail values.
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
+ TupleImpl<N-1, Ts...>& tail() {
+ return tail_;
+ }
+
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
+ const TupleImpl<N-1, Ts...>& tail() const {
+ return tail_;
+ }
+
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
+ void swap(TupleImpl& other) {
+ using numext::swap;
+ swap(head_, other.head_);
+ swap(tail_, other.tail_);
+ }
+
+ template<typename... UTypes>
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
+ TupleImpl& operator=(const TupleImpl<N, UTypes...>& other) {
+ head_ = other.head_;
+ tail_ = other.tail_;
+ return *this;
+ }
+
+ template<typename... UTypes>
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
+ TupleImpl& operator=(TupleImpl<N, UTypes...>&& other) {
+ head_ = std::move(other.head_);
+ tail_ = std::move(other.tail_);
+ return *this;
+ }
+
+ private:
+ // Allow related tuples to reference head_/tail_.
+ template<size_t M, typename... UTypes>
+ friend class TupleImpl;
+
+ T1 head_;
+ TupleImpl<N-1, Ts...> tail_;
+};
+
+// Empty tuple specialization.
+template<>
+class TupleImpl<size_t(0)> {};
+
+template<typename TupleType>
+struct is_tuple : std::false_type {};
+
+template<typename... Types>
+struct is_tuple< TupleImpl<sizeof...(Types), Types...> > : std::true_type {};
+
+// Gets an element from a tuple.
+template<size_t Idx, typename T1, typename... Ts>
+struct tuple_get_impl {
+ using TupleType = TupleImpl<sizeof...(Ts) + 1, T1, Ts...>;
+ using ReturnType = typename tuple_get_impl<Idx - 1, Ts...>::ReturnType;
+
+ static EIGEN_CONSTEXPR EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
+ ReturnType& run(TupleType& tuple) {
+ return tuple_get_impl<Idx-1, Ts...>::run(tuple.tail());
+ }
+
+ static EIGEN_CONSTEXPR EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
+ const ReturnType& run(const TupleType& tuple) {
+ return tuple_get_impl<Idx-1, Ts...>::run(tuple.tail());
+ }
+};
+
+// Base case, getting the head element.
+template<typename T1, typename... Ts>
+struct tuple_get_impl<0, T1, Ts...> {
+ using TupleType = TupleImpl<sizeof...(Ts) + 1, T1, Ts...>;
+ using ReturnType = T1;
+
+ static EIGEN_CONSTEXPR EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
+ T1& run(TupleType& tuple) {
+ return tuple.head();
+ }
+
+ static EIGEN_CONSTEXPR EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
+ const T1& run(const TupleType& tuple) {
+ return tuple.head();
+ }
+};
+
+// Concatenates N Tuples.
+template<size_t NTuples, typename... Tuples>
+struct tuple_cat_impl;
+
+template<size_t NTuples, size_t N1, typename... Args1, size_t N2, typename... Args2, typename... Tuples>
+struct tuple_cat_impl<NTuples, TupleImpl<N1, Args1...>, TupleImpl<N2, Args2...>, Tuples...> {
+ using TupleType1 = TupleImpl<N1, Args1...>;
+ using TupleType2 = TupleImpl<N2, Args2...>;
+ using MergedTupleType = TupleImpl<N1 + N2, Args1..., Args2...>;
+
+ using ReturnType = typename tuple_cat_impl<NTuples-1, MergedTupleType, Tuples...>::ReturnType;
+
+ // Uses the index sequences to extract and merge elements from tuple1 and tuple2,
+ // then recursively calls again.
+ template<typename Tuple1, size_t... I1s, typename Tuple2, size_t... I2s, typename... MoreTuples>
+ static EIGEN_CONSTEXPR EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
+ ReturnType run(Tuple1&& tuple1, index_sequence<I1s...>,
+ Tuple2&& tuple2, index_sequence<I2s...>,
+ MoreTuples&&... tuples) {
+ return tuple_cat_impl<NTuples-1, MergedTupleType, Tuples...>::run(
+ MergedTupleType(tuple_get_impl<I1s, Args1...>::run(std::forward<Tuple1>(tuple1))...,
+ tuple_get_impl<I2s, Args2...>::run(std::forward<Tuple2>(tuple2))...),
+ std::forward<MoreTuples>(tuples)...);
+ }
+
+ // Concatenates the first two tuples.
+ template<typename Tuple1, typename Tuple2, typename... MoreTuples>
+ static EIGEN_CONSTEXPR EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
+ ReturnType run(Tuple1&& tuple1, Tuple2&& tuple2, MoreTuples&&... tuples) {
+ return run(std::forward<Tuple1>(tuple1), make_index_sequence<N1>{},
+ std::forward<Tuple2>(tuple2), make_index_sequence<N2>{},
+ std::forward<MoreTuples>(tuples)...);
+ }
+};
+
+// Base case with a single tuple.
+template<size_t N, typename... Args>
+struct tuple_cat_impl<1, TupleImpl<N, Args...> > {
+ using ReturnType = TupleImpl<N, Args...>;
+
+ template<typename Tuple1>
+ static EIGEN_CONSTEXPR EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
+ ReturnType run(Tuple1&& tuple1) {
+ return tuple1;
+ }
+};
+
+// Special case of no tuples.
+template<>
+struct tuple_cat_impl<0> {
+ using ReturnType = TupleImpl<0>;
+ static EIGEN_CONSTEXPR EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
+ ReturnType run() {return ReturnType{}; }
+};
+
+// For use in make_tuple, unwraps a reference_wrapper.
+template <typename T>
+struct unwrap_reference_wrapper { using type = T; };
+
+template <typename T>
+struct unwrap_reference_wrapper<std::reference_wrapper<T> > { using type = T&; };
+
+// For use in make_tuple, decays a type and unwraps a reference_wrapper.
+template <typename T>
+struct unwrap_decay {
+ using type = typename unwrap_reference_wrapper<typename std::decay<T>::type>::type;
+};
+
+/**
+ * Alternative to std::tuple that can be used on device.
+ */
+template<typename... Types>
+using tuple = TupleImpl<sizeof...(Types), Types...>;
+
+/**
+ * Utility for determining a tuple's size.
+ */
+template<typename Tuple>
+struct tuple_size;
+
+template<typename... Types >
+struct tuple_size< tuple<Types...> > : std::integral_constant<size_t, sizeof...(Types)> {};
+
+/**
+ * Gets an element of a tuple.
+ * \tparam Idx index of the element.
+ * \tparam Types ... tuple element types.
+ * \param tuple the tuple.
+ * \return a reference to the desired element.
+ */
+template<size_t Idx, typename... Types>
+EIGEN_CONSTEXPR EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
+const typename tuple_get_impl<Idx, Types...>::ReturnType&
+get(const tuple<Types...>& tuple) {
+ return tuple_get_impl<Idx, Types...>::run(tuple);
+}
+
+template<size_t Idx, typename... Types>
+EIGEN_CONSTEXPR EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
+typename tuple_get_impl<Idx, Types...>::ReturnType&
+get(tuple<Types...>& tuple) {
+ return tuple_get_impl<Idx, Types...>::run(tuple);
+}
+
+/**
+ * Concatenate multiple tuples.
+ * \param tuples ... list of tuples.
+ * \return concatenated tuple.
+ */
+template<typename... Tuples,
+ typename EnableIf = typename std::enable_if<
+ internal::reduce_all<
+ is_tuple<typename std::decay<Tuples>::type>::value...>::value>::type>
+EIGEN_CONSTEXPR EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
+typename tuple_cat_impl<sizeof...(Tuples), typename std::decay<Tuples>::type...>::ReturnType
+tuple_cat(Tuples&&... tuples) {
+ return tuple_cat_impl<sizeof...(Tuples), typename std::decay<Tuples>::type...>::run(std::forward<Tuples>(tuples)...);
+}
+
+/**
+ * Tie arguments together into a tuple.
+ */
+template <typename... Args, typename ReturnType = tuple<Args&...> >
+EIGEN_CONSTEXPR EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
+ReturnType tie(Args&... args) EIGEN_NOEXCEPT {
+ return ReturnType{args...};
+}
+
+/**
+ * Create a tuple of l-values with the supplied arguments.
+ */
+template <typename... Args, typename ReturnType = tuple<typename unwrap_decay<Args>::type...> >
+EIGEN_CONSTEXPR EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
+ReturnType make_tuple(Args&&... args) {
+ return ReturnType{std::forward<Args>(args)...};
+}
+
+/**
+ * Forward a set of arguments as a tuple.
+ */
+template <typename... Args>
+EIGEN_CONSTEXPR EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
+tuple<Args...> forward_as_tuple(Args&&... args) {
+ return tuple<Args...>(std::forward<Args>(args)...);
+}
+
+} // namespace tuple_impl
+} // namespace internal
+} // namespace Eigen
+
+#endif // EIGEN_TUPLE_GPU
diff --git a/Eigen/src/Core/arch/GPU/TypeCasting.h b/Eigen/src/Core/arch/GPU/TypeCasting.h
index c8195bb..6e8ba27 100644
--- a/Eigen/src/Core/arch/GPU/TypeCasting.h
+++ b/Eigen/src/Core/arch/GPU/TypeCasting.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_TYPE_CASTING_GPU_H
#define EIGEN_TYPE_CASTING_GPU_H
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/arch/MSA/Complex.h b/Eigen/src/Core/arch/MSA/Complex.h
index 76e9f7c..b11a9b4 100644
--- a/Eigen/src/Core/arch/MSA/Complex.h
+++ b/Eigen/src/Core/arch/MSA/Complex.h
@@ -15,6 +15,8 @@
#include <iostream>
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/arch/MSA/MathFunctions.h b/Eigen/src/Core/arch/MSA/MathFunctions.h
index f5181b9..bbebde5 100644
--- a/Eigen/src/Core/arch/MSA/MathFunctions.h
+++ b/Eigen/src/Core/arch/MSA/MathFunctions.h
@@ -26,6 +26,8 @@
#ifndef EIGEN_MATH_FUNCTIONS_MSA_H
#define EIGEN_MATH_FUNCTIONS_MSA_H
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/arch/MSA/PacketMath.h b/Eigen/src/Core/arch/MSA/PacketMath.h
index afe8f33..3dc95a1 100644
--- a/Eigen/src/Core/arch/MSA/PacketMath.h
+++ b/Eigen/src/Core/arch/MSA/PacketMath.h
@@ -16,6 +16,8 @@
#include <iostream>
#include <string>
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/arch/NEON/Complex.h b/Eigen/src/Core/arch/NEON/Complex.h
index 0f74fe8..fd6b14b 100644
--- a/Eigen/src/Core/arch/NEON/Complex.h
+++ b/Eigen/src/Core/arch/NEON/Complex.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_COMPLEX_NEON_H
#define EIGEN_COMPLEX_NEON_H
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h b/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h
index 3481f33..6cd6edd 100644
--- a/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h
+++ b/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h
@@ -1,3 +1,5 @@
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/arch/NEON/MathFunctions.h b/Eigen/src/Core/arch/NEON/MathFunctions.h
index fa6615a..d34882a 100644
--- a/Eigen/src/Core/arch/NEON/MathFunctions.h
+++ b/Eigen/src/Core/arch/NEON/MathFunctions.h
@@ -8,6 +8,8 @@
#ifndef EIGEN_MATH_FUNCTIONS_NEON_H
#define EIGEN_MATH_FUNCTIONS_NEON_H
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/arch/NEON/PacketMath.h b/Eigen/src/Core/arch/NEON/PacketMath.h
index f5fa3fa..382a2c8 100644
--- a/Eigen/src/Core/arch/NEON/PacketMath.h
+++ b/Eigen/src/Core/arch/NEON/PacketMath.h
@@ -12,6 +12,8 @@
#ifndef EIGEN_PACKET_MATH_NEON_H
#define EIGEN_PACKET_MATH_NEON_H
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
@@ -3459,7 +3461,7 @@
EIGEN_STRONG_INLINE Packet4bf F32ToBf16(const Packet4f& p)
{
- // See the scalar implemention in BFloat16.h for a comprehensible explanation
+ // See the scalar implementation in BFloat16.h for a comprehensible explanation
// of this fast rounding algorithm
Packet4ui input = reinterpret_cast<Packet4ui>(p);
diff --git a/Eigen/src/Core/arch/NEON/TypeCasting.h b/Eigen/src/Core/arch/NEON/TypeCasting.h
index 54f9733..e5ddab6 100644
--- a/Eigen/src/Core/arch/NEON/TypeCasting.h
+++ b/Eigen/src/Core/arch/NEON/TypeCasting.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_TYPE_CASTING_NEON_H
#define EIGEN_TYPE_CASTING_NEON_H
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/arch/SSE/Complex.h b/Eigen/src/Core/arch/SSE/Complex.h
index 08abd84..ccee04b 100644
--- a/Eigen/src/Core/arch/SSE/Complex.h
+++ b/Eigen/src/Core/arch/SSE/Complex.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_COMPLEX_SSE_H
#define EIGEN_COMPLEX_SSE_H
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
@@ -106,14 +108,9 @@
template<> EIGEN_STRONG_INLINE Packet2cf pset1<Packet2cf>(const std::complex<float>& from)
{
- Packet2cf res;
-#ifdef EIGEN_VECTORIZE_SSE3
- res.v = _mm_castpd_ps(_mm_loaddup_pd(reinterpret_cast<double const*>(&from)));
-#else
- res.v = _mm_castpd_ps(_mm_load_sd(reinterpret_cast<double const*>(&from)));
- res.v = _mm_movelh_ps(res.v, res.v);
-#endif
- return res;
+ const float re = std::real(from);
+ const float im = std::imag(from);
+ return Packet2cf(_mm_set_ps(im, re, im, re));
}
template<> EIGEN_STRONG_INLINE Packet2cf ploaddup<Packet2cf>(const std::complex<float>* from) { return pset1<Packet2cf>(*from); }
diff --git a/Eigen/src/Core/arch/SSE/MathFunctions.h b/Eigen/src/Core/arch/SSE/MathFunctions.h
index 8736d0d..4bdb9af 100644
--- a/Eigen/src/Core/arch/SSE/MathFunctions.h
+++ b/Eigen/src/Core/arch/SSE/MathFunctions.h
@@ -15,6 +15,8 @@
#ifndef EIGEN_MATH_FUNCTIONS_SSE_H
#define EIGEN_MATH_FUNCTIONS_SSE_H
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/arch/SSE/PacketMath.h b/Eigen/src/Core/arch/SSE/PacketMath.h
index d658f65..3d91502 100755
--- a/Eigen/src/Core/arch/SSE/PacketMath.h
+++ b/Eigen/src/Core/arch/SSE/PacketMath.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_PACKET_MATH_SSE_H
#define EIGEN_PACKET_MATH_SSE_H
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
@@ -620,7 +622,7 @@
#ifdef EIGEN_VECTORIZE_SSE4_1
template<> EIGEN_STRONG_INLINE Packet4f pround<Packet4f>(const Packet4f& a)
{
- // Unfortunatly _mm_round_ps doesn't have a rounding mode to implement numext::round.
+ // Unfortunately _mm_round_ps doesn't have a rounding mode to implement numext::round.
const Packet4f mask = pset1frombits<Packet4f>(0x80000000u);
const Packet4f prev0dot5 = pset1frombits<Packet4f>(0x3EFFFFFFu);
return _mm_round_ps(padd(por(pand(a, mask), prev0dot5), a), _MM_FROUND_TO_ZERO);
diff --git a/Eigen/src/Core/arch/SSE/TypeCasting.h b/Eigen/src/Core/arch/SSE/TypeCasting.h
index d2a0037..c21d1ac 100644
--- a/Eigen/src/Core/arch/SSE/TypeCasting.h
+++ b/Eigen/src/Core/arch/SSE/TypeCasting.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_TYPE_CASTING_SSE_H
#define EIGEN_TYPE_CASTING_SSE_H
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/arch/SVE/MathFunctions.h b/Eigen/src/Core/arch/SVE/MathFunctions.h
index b139ea2..50b06bc 100644
--- a/Eigen/src/Core/arch/SVE/MathFunctions.h
+++ b/Eigen/src/Core/arch/SVE/MathFunctions.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_MATH_FUNCTIONS_SVE_H
#define EIGEN_MATH_FUNCTIONS_SVE_H
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/arch/SVE/PacketMath.h b/Eigen/src/Core/arch/SVE/PacketMath.h
index 9060b37..98c0b77 100644
--- a/Eigen/src/Core/arch/SVE/PacketMath.h
+++ b/Eigen/src/Core/arch/SVE/PacketMath.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_PACKET_MATH_SVE_H
#define EIGEN_PACKET_MATH_SVE_H
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen
{
namespace internal
diff --git a/Eigen/src/Core/arch/SVE/TypeCasting.h b/Eigen/src/Core/arch/SVE/TypeCasting.h
index 7ba5d9c..1067a41 100644
--- a/Eigen/src/Core/arch/SVE/TypeCasting.h
+++ b/Eigen/src/Core/arch/SVE/TypeCasting.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_TYPE_CASTING_SVE_H
#define EIGEN_TYPE_CASTING_SVE_H
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/arch/SYCL/InteropHeaders.h b/Eigen/src/Core/arch/SYCL/InteropHeaders.h
index 10856ff..57bfb69 100644
--- a/Eigen/src/Core/arch/SYCL/InteropHeaders.h
+++ b/Eigen/src/Core/arch/SYCL/InteropHeaders.h
@@ -21,6 +21,8 @@
#ifndef EIGEN_INTEROP_HEADERS_SYCL_H
#define EIGEN_INTEROP_HEADERS_SYCL_H
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
#if !defined(EIGEN_DONT_VECTORIZE_SYCL)
diff --git a/Eigen/src/Core/arch/SYCL/MathFunctions.h b/Eigen/src/Core/arch/SYCL/MathFunctions.h
index 2ab0f2a..9eb46bb 100644
--- a/Eigen/src/Core/arch/SYCL/MathFunctions.h
+++ b/Eigen/src/Core/arch/SYCL/MathFunctions.h
@@ -20,6 +20,8 @@
#ifndef EIGEN_MATH_FUNCTIONS_SYCL_H
#define EIGEN_MATH_FUNCTIONS_SYCL_H
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/arch/SYCL/PacketMath.h b/Eigen/src/Core/arch/SYCL/PacketMath.h
index 87badc0..92accc8 100644
--- a/Eigen/src/Core/arch/SYCL/PacketMath.h
+++ b/Eigen/src/Core/arch/SYCL/PacketMath.h
@@ -21,6 +21,8 @@
#ifndef EIGEN_PACKET_MATH_SYCL_H
#define EIGEN_PACKET_MATH_SYCL_H
#include <type_traits>
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h b/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h
index f81e59d..2b96587 100644
--- a/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h
+++ b/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h
@@ -33,6 +33,8 @@
#include <set>
#include <unordered_map>
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace TensorSycl {
namespace internal {
@@ -166,7 +168,7 @@
/**
* Obtain the insertion point in the pointer map for
* a pointer of the given size.
- * \param requiredSize Size attemted to reclaim
+ * \param requiredSize Size attempted to reclaim
*/
typename pointerMap_t::iterator get_insertion_point(size_t requiredSize) {
typename pointerMap_t::iterator retVal;
diff --git a/Eigen/src/Core/arch/SYCL/TypeCasting.h b/Eigen/src/Core/arch/SYCL/TypeCasting.h
index 9208ab2..613e823 100644
--- a/Eigen/src/Core/arch/SYCL/TypeCasting.h
+++ b/Eigen/src/Core/arch/SYCL/TypeCasting.h
@@ -21,6 +21,8 @@
#ifndef EIGEN_TYPE_CASTING_SYCL_H
#define EIGEN_TYPE_CASTING_SYCL_H
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/arch/ZVector/Complex.h b/Eigen/src/Core/arch/ZVector/Complex.h
index a81ec24..264c266 100644
--- a/Eigen/src/Core/arch/ZVector/Complex.h
+++ b/Eigen/src/Core/arch/ZVector/Complex.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_COMPLEX32_ALTIVEC_H
#define EIGEN_COMPLEX32_ALTIVEC_H
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/arch/ZVector/MathFunctions.h b/Eigen/src/Core/arch/ZVector/MathFunctions.h
index 1635e12..c86e185 100644
--- a/Eigen/src/Core/arch/ZVector/MathFunctions.h
+++ b/Eigen/src/Core/arch/ZVector/MathFunctions.h
@@ -16,6 +16,8 @@
#ifndef EIGEN_MATH_FUNCTIONS_ALTIVEC_H
#define EIGEN_MATH_FUNCTIONS_ALTIVEC_H
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/arch/ZVector/PacketMath.h b/Eigen/src/Core/arch/ZVector/PacketMath.h
index 1f55a90..890578f 100755
--- a/Eigen/src/Core/arch/ZVector/PacketMath.h
+++ b/Eigen/src/Core/arch/ZVector/PacketMath.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_PACKET_MATH_ZVECTOR_H
#define EIGEN_PACKET_MATH_ZVECTOR_H
+#include "../../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/functors/AssignmentFunctors.h b/Eigen/src/Core/functors/AssignmentFunctors.h
index bf64ef4..6bf755f 100644
--- a/Eigen/src/Core/functors/AssignmentFunctors.h
+++ b/Eigen/src/Core/functors/AssignmentFunctors.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_ASSIGNMENT_FUNCTORS_H
#define EIGEN_ASSIGNMENT_FUNCTORS_H
+#include "../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/functors/BinaryFunctors.h b/Eigen/src/Core/functors/BinaryFunctors.h
index fc87815..88e2e8a 100644
--- a/Eigen/src/Core/functors/BinaryFunctors.h
+++ b/Eigen/src/Core/functors/BinaryFunctors.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_BINARY_FUNCTORS_H
#define EIGEN_BINARY_FUNCTORS_H
+#include "../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
@@ -356,7 +358,7 @@
PacketAccess = (!NumTraits<Scalar>::IsComplex && !NumTraits<Scalar>::IsInteger &&
packet_traits<Scalar>::HasExp && packet_traits<Scalar>::HasLog &&
packet_traits<Scalar>::HasRound && packet_traits<Scalar>::HasCmp &&
- // Temporarly disable packet access for half/bfloat16 until
+ // Temporarily disable packet access for half/bfloat16 until
// accuracy is improved.
!is_same<Scalar, half>::value && !is_same<Scalar, bfloat16>::value
)
diff --git a/Eigen/src/Core/functors/NullaryFunctors.h b/Eigen/src/Core/functors/NullaryFunctors.h
index 192f225..8e43266 100644
--- a/Eigen/src/Core/functors/NullaryFunctors.h
+++ b/Eigen/src/Core/functors/NullaryFunctors.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_NULLARY_FUNCTORS_H
#define EIGEN_NULLARY_FUNCTORS_H
+#include "../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/functors/StlFunctors.h b/Eigen/src/Core/functors/StlFunctors.h
index 4570c9b..dbb3854 100644
--- a/Eigen/src/Core/functors/StlFunctors.h
+++ b/Eigen/src/Core/functors/StlFunctors.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_STL_FUNCTORS_H
#define EIGEN_STL_FUNCTORS_H
+#include "../InternalHeaderCheck.h"
+
namespace Eigen {
// Portable replacements for certain functors.
diff --git a/Eigen/src/Core/functors/TernaryFunctors.h b/Eigen/src/Core/functors/TernaryFunctors.h
index b254e96..41c0d5f 100644
--- a/Eigen/src/Core/functors/TernaryFunctors.h
+++ b/Eigen/src/Core/functors/TernaryFunctors.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_TERNARY_FUNCTORS_H
#define EIGEN_TERNARY_FUNCTORS_H
+#include "../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/functors/UnaryFunctors.h b/Eigen/src/Core/functors/UnaryFunctors.h
index 16136d1..044f7dd 100644
--- a/Eigen/src/Core/functors/UnaryFunctors.h
+++ b/Eigen/src/Core/functors/UnaryFunctors.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_UNARY_FUNCTORS_H
#define EIGEN_UNARY_FUNCTORS_H
+#include "../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
@@ -1035,7 +1037,7 @@
* Uses just a 9/10-degree rational interpolant which
* interpolates 1/(1+exp(-x)) - 0.5 up to a couple of ulps in the range
* [-9, 18]. Below -9 we use the more accurate approximation
- * 1/(1+exp(-x)) ~= exp(x), and above 18 the logistic function is 1 withing
+ * 1/(1+exp(-x)) ~= exp(x), and above 18 the logistic function is 1 within
* one ulp. The shifted logistic is interpolated because it was easier to
* make the fit converge.
*
diff --git a/Eigen/src/Core/products/GeneralBlockPanelKernel.h b/Eigen/src/Core/products/GeneralBlockPanelKernel.h
index ed26b9a..89e999b 100644
--- a/Eigen/src/Core/products/GeneralBlockPanelKernel.h
+++ b/Eigen/src/Core/products/GeneralBlockPanelKernel.h
@@ -11,6 +11,8 @@
#define EIGEN_GENERAL_BLOCK_PANEL_H
+#include "../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
@@ -795,7 +797,7 @@
typedef typename conditional<Vectorizable,ScalarPacket,Scalar>::type ResPacket;
typedef typename conditional<Vectorizable,DoublePacketType,Scalar>::type AccPacket;
- // this actualy holds 8 packets!
+ // this actually holds 8 packets!
typedef QuadPacket<RhsPacket> RhsPacketx4;
EIGEN_STRONG_INLINE void initAcc(Scalar& p) { p = Scalar(0); }
diff --git a/Eigen/src/Core/products/GeneralMatrixMatrix.h b/Eigen/src/Core/products/GeneralMatrixMatrix.h
index 62a6aaa..72e094e 100644
--- a/Eigen/src/Core/products/GeneralMatrixMatrix.h
+++ b/Eigen/src/Core/products/GeneralMatrixMatrix.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_GENERAL_MATRIX_MATRIX_H
#define EIGEN_GENERAL_MATRIX_MATRIX_H
+#include "../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h b/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h
index 6ba0d9b..fc6f838 100644
--- a/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h
+++ b/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_GENERAL_MATRIX_MATRIX_TRIANGULAR_H
#define EIGEN_GENERAL_MATRIX_MATRIX_TRIANGULAR_H
+#include "../InternalHeaderCheck.h"
+
namespace Eigen {
template<typename Scalar, typename Index, int StorageOrder, int UpLo, bool ConjLhs, bool ConjRhs>
diff --git a/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h b/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h
index 9a650ec..45ad5da 100644
--- a/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h
+++ b/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h
@@ -33,6 +33,8 @@
#ifndef EIGEN_GENERAL_MATRIX_MATRIX_TRIANGULAR_BLAS_H
#define EIGEN_GENERAL_MATRIX_MATRIX_TRIANGULAR_BLAS_H
+#include "../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h b/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h
index 71abf40..490fe67 100644
--- a/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h
+++ b/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h
@@ -33,6 +33,8 @@
#ifndef EIGEN_GENERAL_MATRIX_MATRIX_BLAS_H
#define EIGEN_GENERAL_MATRIX_MATRIX_BLAS_H
+#include "../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/products/GeneralMatrixVector.h b/Eigen/src/Core/products/GeneralMatrixVector.h
index 0fa5736..b775dbe 100644
--- a/Eigen/src/Core/products/GeneralMatrixVector.h
+++ b/Eigen/src/Core/products/GeneralMatrixVector.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_GENERAL_MATRIX_VECTOR_H
#define EIGEN_GENERAL_MATRIX_VECTOR_H
+#include "../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
@@ -64,7 +66,7 @@
/* Optimized col-major matrix * vector product:
* This algorithm processes the matrix per vertical panels,
- * which are then processed horizontaly per chunck of 8*PacketSize x 1 vertical segments.
+ * which are then processed horizontally per chunck of 8*PacketSize x 1 vertical segments.
*
* Mixing type logic: C += alpha * A * B
* | A | B |alpha| comments
diff --git a/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h b/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h
index 6e36c2b..f77e2e4 100644
--- a/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h
+++ b/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h
@@ -33,6 +33,8 @@
#ifndef EIGEN_GENERAL_MATRIX_VECTOR_BLAS_H
#define EIGEN_GENERAL_MATRIX_VECTOR_BLAS_H
+#include "../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/products/Parallelizer.h b/Eigen/src/Core/products/Parallelizer.h
index 8f91879..c046ba3 100644
--- a/Eigen/src/Core/products/Parallelizer.h
+++ b/Eigen/src/Core/products/Parallelizer.h
@@ -14,6 +14,8 @@
#include <atomic>
#endif
+#include "../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/products/SelfadjointMatrixMatrix.h b/Eigen/src/Core/products/SelfadjointMatrixMatrix.h
index 33ecf10..504fa0c 100644
--- a/Eigen/src/Core/products/SelfadjointMatrixMatrix.h
+++ b/Eigen/src/Core/products/SelfadjointMatrixMatrix.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_SELFADJOINT_MATRIX_MATRIX_H
#define EIGEN_SELFADJOINT_MATRIX_MATRIX_H
+#include "../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h b/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h
index 61396db..0e371da 100644
--- a/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h
+++ b/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h
@@ -33,6 +33,8 @@
#ifndef EIGEN_SELFADJOINT_MATRIX_MATRIX_BLAS_H
#define EIGEN_SELFADJOINT_MATRIX_MATRIX_BLAS_H
+#include "../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/products/SelfadjointMatrixVector.h b/Eigen/src/Core/products/SelfadjointMatrixVector.h
index d38fd72..3176398 100644
--- a/Eigen/src/Core/products/SelfadjointMatrixVector.h
+++ b/Eigen/src/Core/products/SelfadjointMatrixVector.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_SELFADJOINT_MATRIX_VECTOR_H
#define EIGEN_SELFADJOINT_MATRIX_VECTOR_H
+#include "../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h b/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h
index 1238345..99a8ccd 100644
--- a/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h
+++ b/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h
@@ -33,6 +33,8 @@
#ifndef EIGEN_SELFADJOINT_MATRIX_VECTOR_BLAS_H
#define EIGEN_SELFADJOINT_MATRIX_VECTOR_BLAS_H
+#include "../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/products/SelfadjointProduct.h b/Eigen/src/Core/products/SelfadjointProduct.h
index a21be80..629ce1d 100644
--- a/Eigen/src/Core/products/SelfadjointProduct.h
+++ b/Eigen/src/Core/products/SelfadjointProduct.h
@@ -16,6 +16,8 @@
* It corresponds to the level 3 SYRK and level 2 SYR Blas routines.
**********************************************************************/
+#include "../InternalHeaderCheck.h"
+
namespace Eigen {
diff --git a/Eigen/src/Core/products/SelfadjointRank2Update.h b/Eigen/src/Core/products/SelfadjointRank2Update.h
index f752a0b..3153009 100644
--- a/Eigen/src/Core/products/SelfadjointRank2Update.h
+++ b/Eigen/src/Core/products/SelfadjointRank2Update.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_SELFADJOINTRANK2UPTADE_H
#define EIGEN_SELFADJOINTRANK2UPTADE_H
+#include "../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/products/TriangularMatrixMatrix.h b/Eigen/src/Core/products/TriangularMatrixMatrix.h
index f0c6050..60d4b05 100644
--- a/Eigen/src/Core/products/TriangularMatrixMatrix.h
+++ b/Eigen/src/Core/products/TriangularMatrixMatrix.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_TRIANGULAR_MATRIX_MATRIX_H
#define EIGEN_TRIANGULAR_MATRIX_MATRIX_H
+#include "../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h b/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h
index a98d12e..1eb57d3 100644
--- a/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h
+++ b/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h
@@ -33,6 +33,8 @@
#ifndef EIGEN_TRIANGULAR_MATRIX_MATRIX_BLAS_H
#define EIGEN_TRIANGULAR_MATRIX_MATRIX_BLAS_H
+#include "../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/products/TriangularMatrixVector.h b/Eigen/src/Core/products/TriangularMatrixVector.h
index 76bfa15..754345f 100644
--- a/Eigen/src/Core/products/TriangularMatrixVector.h
+++ b/Eigen/src/Core/products/TriangularMatrixVector.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_TRIANGULARMATRIXVECTOR_H
#define EIGEN_TRIANGULARMATRIXVECTOR_H
+#include "../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h b/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h
index 3d47a2b..7a4d59e 100644
--- a/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h
+++ b/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h
@@ -33,6 +33,8 @@
#ifndef EIGEN_TRIANGULAR_MATRIX_VECTOR_BLAS_H
#define EIGEN_TRIANGULAR_MATRIX_VECTOR_BLAS_H
+#include "../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/products/TriangularSolverMatrix.h b/Eigen/src/Core/products/TriangularSolverMatrix.h
index 6d879ba..0abc468 100644
--- a/Eigen/src/Core/products/TriangularSolverMatrix.h
+++ b/Eigen/src/Core/products/TriangularSolverMatrix.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_TRIANGULAR_SOLVER_MATRIX_H
#define EIGEN_TRIANGULAR_SOLVER_MATRIX_H
+#include "../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h b/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h
index 621194c..2b63388 100644
--- a/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h
+++ b/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h
@@ -33,6 +33,8 @@
#ifndef EIGEN_TRIANGULAR_SOLVER_MATRIX_BLAS_H
#define EIGEN_TRIANGULAR_SOLVER_MATRIX_BLAS_H
+#include "../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/products/TriangularSolverVector.h b/Eigen/src/Core/products/TriangularSolverVector.h
index 6473170..c1c9e4c 100644
--- a/Eigen/src/Core/products/TriangularSolverVector.h
+++ b/Eigen/src/Core/products/TriangularSolverVector.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_TRIANGULAR_SOLVER_VECTOR_H
#define EIGEN_TRIANGULAR_SOLVER_VECTOR_H
+#include "../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/util/BlasUtil.h b/Eigen/src/Core/util/BlasUtil.h
index 5bb86e5..2268593 100755
--- a/Eigen/src/Core/util/BlasUtil.h
+++ b/Eigen/src/Core/util/BlasUtil.h
@@ -13,6 +13,8 @@
// This file contains many lightweight helper classes used to
// implement and control fast level 2 and level 3 BLAS-like routines.
+#include "../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/util/ConfigureVectorization.h b/Eigen/src/Core/util/ConfigureVectorization.h
index af4e696..3745e47 100644
--- a/Eigen/src/Core/util/ConfigureVectorization.h
+++ b/Eigen/src/Core/util/ConfigureVectorization.h
@@ -472,6 +472,8 @@
/** \brief Namespace containing all symbols from the %Eigen library. */
+#include "../InternalHeaderCheck.h"
+
namespace Eigen {
inline static const char *SimdInstructionSetsInUse(void) {
diff --git a/Eigen/src/Core/util/Constants.h b/Eigen/src/Core/util/Constants.h
index b93f689..72fe330 100644
--- a/Eigen/src/Core/util/Constants.h
+++ b/Eigen/src/Core/util/Constants.h
@@ -12,6 +12,8 @@
#ifndef EIGEN_CONSTANTS_H
#define EIGEN_CONSTANTS_H
+#include "../InternalHeaderCheck.h"
+
namespace Eigen {
/** This value means that a positive quantity (e.g., a size) is not known at compile-time, and that instead the value is
diff --git a/Eigen/src/Core/util/DisableStupidWarnings.h b/Eigen/src/Core/util/DisableStupidWarnings.h
index fa33689..848aa68 100755
--- a/Eigen/src/Core/util/DisableStupidWarnings.h
+++ b/Eigen/src/Core/util/DisableStupidWarnings.h
@@ -94,6 +94,19 @@
#pragma diag_suppress 2735
#pragma diag_suppress 2737
#pragma diag_suppress 2739
+ #pragma diag_suppress 2885
+ #pragma diag_suppress 2888
+ #pragma diag_suppress 2976
+ #pragma diag_suppress 2979
+ #pragma diag_suppress 20011
+ #pragma diag_suppress 20014
+ // Disable the "// __device__ annotation is ignored on a function(...) that is
+ // explicitly defaulted on its first declaration" message.
+ // The __device__ annotation seems to actually be needed in some cases,
+ // otherwise resulting in kernel runtime errors.
+ #pragma diag_suppress 2886
+ #pragma diag_suppress 2977
+ #pragma diag_suppress 20012
#endif
#else
diff --git a/Eigen/src/Core/util/ForwardDeclarations.h b/Eigen/src/Core/util/ForwardDeclarations.h
index 90db26c..6b0ac50 100644
--- a/Eigen/src/Core/util/ForwardDeclarations.h
+++ b/Eigen/src/Core/util/ForwardDeclarations.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_FORWARDDECLARATIONS_H
#define EIGEN_FORWARDDECLARATIONS_H
+#include "../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/util/IndexedViewHelper.h b/Eigen/src/Core/util/IndexedViewHelper.h
index f85de30..3e5fc09 100644
--- a/Eigen/src/Core/util/IndexedViewHelper.h
+++ b/Eigen/src/Core/util/IndexedViewHelper.h
@@ -11,11 +11,17 @@
#ifndef EIGEN_INDEXED_VIEW_HELPER_H
#define EIGEN_INDEXED_VIEW_HELPER_H
+#include "../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
struct symbolic_last_tag {};
-}
+} // namespace internal
+
+namespace placeholders {
+
+typedef symbolic::SymbolExpr<internal::symbolic_last_tag> last_t;
/** \var last
* \ingroup Core_Module
@@ -28,38 +34,20 @@
* A typical usage example would be:
* \code
* using namespace Eigen;
- * using Eigen::last;
+ * using Eigen::placeholders::last;
* VectorXd v(n);
* v(seq(2,last-2)).setOnes();
* \endcode
*
* \sa end
*/
-static const symbolic::SymbolExpr<internal::symbolic_last_tag> last; // PLEASE use Eigen::last instead of Eigen::placeholders::last
+static const last_t last;
-/** \var lastp1
- * \ingroup Core_Module
- *
- * Can be used as a parameter to Eigen::seq and Eigen::seqN functions to symbolically
- * reference the last+1 element/row/columns of the underlying vector or matrix once
- * passed to DenseBase::operator()(const RowIndices&, const ColIndices&).
- *
- * This symbolic placeholder supports standard arithmetic operations.
- * It is essentially an alias to last+fix<1>.
- *
- * \sa last
- */
-#ifdef EIGEN_PARSED_BY_DOXYGEN
-static const auto lastp1 = last+fix<1>;
-#else
-// Using a FixedExpr<1> expression is important here to make sure the compiler
-// can fully optimize the computation starting indices with zero overhead.
-static const symbolic::AddExpr<symbolic::SymbolExpr<internal::symbolic_last_tag>,symbolic::ValueExpr<Eigen::internal::FixedInt<1> > > lastp1(last+fix<1>());
-#endif
+} // namespace placeholders
namespace internal {
- // Replace symbolic last/end "keywords" by their true runtime value
+// Replace symbolic last/end "keywords" by their true runtime value
inline Index eval_expr_given_size(Index x, Index /* size */) { return x; }
template<int N>
@@ -68,7 +56,7 @@
template<typename Derived>
Index eval_expr_given_size(const symbolic::BaseExpr<Derived> &x, Index size)
{
- return x.derived().eval(last=size-1);
+ return x.derived().eval(Eigen::placeholders::last=size-1);
}
// Extract increment/step at compile time
@@ -163,23 +151,44 @@
} // end namespace internal
+namespace placeholders {
+
+typedef symbolic::AddExpr<symbolic::SymbolExpr<internal::symbolic_last_tag>,symbolic::ValueExpr<Eigen::internal::FixedInt<1> > > lastp1_t;
+typedef Eigen::internal::all_t all_t;
+
+/** \var lastp1
+ * \ingroup Core_Module
+ *
+ * Can be used as a parameter to Eigen::seq and Eigen::seqN functions to symbolically
+ * reference the last+1 element/row/columns of the underlying vector or matrix once
+ * passed to DenseBase::operator()(const RowIndices&, const ColIndices&).
+ *
+ * This symbolic placeholder supports standard arithmetic operations.
+ * It is essentially an alias to last+fix<1>.
+ *
+ * \sa last
+ */
+#ifdef EIGEN_PARSED_BY_DOXYGEN
+static const auto lastp1 = last+fix<1>;
+#else
+// Using a FixedExpr<1> expression is important here to make sure the compiler
+// can fully optimize the computation starting indices with zero overhead.
+static const lastp1_t lastp1(last+fix<1>());
+#endif
+
+/** \var end
+ * \ingroup Core_Module
+ * \sa lastp1
+ */
+static const lastp1_t end = lastp1;
/** \var all
* \ingroup Core_Module
* Can be used as a parameter to DenseBase::operator()(const RowIndices&, const ColIndices&) to index all rows or columns
*/
-static const Eigen::internal::all_t all; // PLEASE use Eigen::all instead of Eigen::placeholders::all
+static const Eigen::internal::all_t all;
-
-namespace placeholders {
- typedef symbolic::SymbolExpr<internal::symbolic_last_tag> last_t;
- typedef symbolic::AddExpr<symbolic::SymbolExpr<internal::symbolic_last_tag>,symbolic::ValueExpr<Eigen::internal::FixedInt<1> > > end_t;
- typedef Eigen::internal::all_t all_t;
-
- EIGEN_DEPRECATED static const all_t all = Eigen::all; // PLEASE use Eigen::all instead of Eigen::placeholders::all
- EIGEN_DEPRECATED static const last_t last = Eigen::last; // PLEASE use Eigen::last instead of Eigen::placeholders::last
- EIGEN_DEPRECATED static const end_t end = Eigen::lastp1; // PLEASE use Eigen::lastp1 instead of Eigen::placeholders::end
-}
+} // namespace placeholders
} // end namespace Eigen
diff --git a/Eigen/src/Core/util/IntegralConstant.h b/Eigen/src/Core/util/IntegralConstant.h
index e0092f6..ddcd370 100644
--- a/Eigen/src/Core/util/IntegralConstant.h
+++ b/Eigen/src/Core/util/IntegralConstant.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_INTEGRAL_CONSTANT_H
#define EIGEN_INTEGRAL_CONSTANT_H
+#include "../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/util/MKL_support.h b/Eigen/src/Core/util/MKL_support.h
index 17963fa..9cf5f6f 100755
--- a/Eigen/src/Core/util/MKL_support.h
+++ b/Eigen/src/Core/util/MKL_support.h
@@ -120,6 +120,8 @@
#include "../../misc/blas.h"
#endif
+#include "../InternalHeaderCheck.h"
+
namespace Eigen {
typedef std::complex<double> dcomplex;
diff --git a/Eigen/src/Core/util/Macros.h b/Eigen/src/Core/util/Macros.h
index ff3ed17..439c8be 100644
--- a/Eigen/src/Core/util/Macros.h
+++ b/Eigen/src/Core/util/Macros.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_MACROS_H
#define EIGEN_MACROS_H
+#include "../InternalHeaderCheck.h"
+
//------------------------------------------------------------------------------------------
// Eigen version and basic defaults
//------------------------------------------------------------------------------------------
@@ -626,7 +628,7 @@
#define EIGEN_CPLUSPLUS 0
#endif
-// The macro EIGEN_COMP_CXXVER defines the c++ verson expected by the compiler.
+// The macro EIGEN_COMP_CXXVER defines the c++ version expected by the compiler.
// For instance, if compiling with gcc and -std=c++17, then EIGEN_COMP_CXXVER
// is defined to 17.
#if EIGEN_CPLUSPLUS > 201703L
@@ -651,7 +653,7 @@
// The macros EIGEN_HAS_CXX?? defines a rough estimate of available c++ features
-// but in practice we should not rely on them but rather on the availabilty of
+// but in practice we should not rely on them but rather on the availability of
// individual features as defined later.
// This is why there is no EIGEN_HAS_CXX17.
// FIXME: get rid of EIGEN_HAS_CXX14 and maybe even EIGEN_HAS_CXX11.
diff --git a/Eigen/src/Core/util/Memory.h b/Eigen/src/Core/util/Memory.h
index 875318c..4ed98d5 100644
--- a/Eigen/src/Core/util/Memory.h
+++ b/Eigen/src/Core/util/Memory.h
@@ -59,6 +59,8 @@
#endif
+#include "../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Core/util/Meta.h b/Eigen/src/Core/util/Meta.h
index 81ae2a3..26a6ea4 100755
--- a/Eigen/src/Core/util/Meta.h
+++ b/Eigen/src/Core/util/Meta.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_META_H
#define EIGEN_META_H
+#include "../InternalHeaderCheck.h"
+
#if defined(EIGEN_GPU_COMPILE_PHASE)
#include <cfloat>
@@ -31,6 +33,7 @@
// Define portable (u)int{32,64} types
#if EIGEN_HAS_CXX11 || EIGEN_ICC_NEEDS_CSTDINT
#include <cstdint>
+
namespace Eigen {
namespace numext {
typedef std::uint8_t uint8_t;
@@ -47,6 +50,7 @@
// Without c++11, all compilers able to compile Eigen also
// provide the C99 stdint.h header file.
#include <stdint.h>
+
namespace Eigen {
namespace numext {
typedef ::uint8_t uint8_t;
@@ -648,6 +652,60 @@
};
#endif
+// C++14 integer/index_sequence.
+#if defined(__cpp_lib_integer_sequence) && __cpp_lib_integer_sequence >= 201304L && EIGEN_MAX_CPP_VER >= 14
+
+using std::integer_sequence;
+using std::make_integer_sequence;
+
+using std::index_sequence;
+using std::make_index_sequence;
+
+#else
+
+template <typename T, T... Ints>
+struct integer_sequence {
+ static EIGEN_CONSTEXPR size_t size() EIGEN_NOEXCEPT { return sizeof...(Ints); }
+};
+
+template <typename T, typename Sequence, T N>
+struct append_integer;
+
+template<typename T, T... Ints, T N>
+struct append_integer<T, integer_sequence<T, Ints...>, N> {
+ using type = integer_sequence<T, Ints..., N>;
+};
+
+template<typename T, size_t N>
+struct generate_integer_sequence {
+ using type = typename append_integer<T, typename generate_integer_sequence<T, N-1>::type, N-1>::type;
+};
+
+template<typename T>
+struct generate_integer_sequence<T, 0> {
+ using type = integer_sequence<T>;
+};
+
+template <typename T, size_t N>
+using make_integer_sequence = typename generate_integer_sequence<T, N>::type;
+
+template<size_t... Ints>
+using index_sequence = integer_sequence<size_t, Ints...>;
+
+template<size_t N>
+using make_index_sequence = make_integer_sequence<size_t, N>;
+
+#endif
+
+// Reduces a sequence of bools to true if all are true, false otherwise.
+template<bool... values>
+using reduce_all = std::is_same<integer_sequence<bool, values..., true>, integer_sequence<bool, true, values...> >;
+
+// Reduces a sequence of bools to true if any are true, false if all false.
+template<bool... values>
+using reduce_any = std::integral_constant<bool,
+ !std::is_same<integer_sequence<bool, values..., false>, integer_sequence<bool, false, values...> >::value>;
+
struct meta_yes { char a[1]; };
struct meta_no { char a[2]; };
diff --git a/Eigen/src/Core/util/ReenableStupidWarnings.h b/Eigen/src/Core/util/ReenableStupidWarnings.h
index 1ce6fd1..9dad396 100644
--- a/Eigen/src/Core/util/ReenableStupidWarnings.h
+++ b/Eigen/src/Core/util/ReenableStupidWarnings.h
@@ -1,5 +1,5 @@
#ifdef EIGEN_WARNINGS_DISABLED_2
-// "DisableStupidWarnings.h" was included twice recursively: Do not reenable warnings yet!
+// "DisableStupidWarnings.h" was included twice recursively: Do not re-enable warnings yet!
# undef EIGEN_WARNINGS_DISABLED_2
#elif defined(EIGEN_WARNINGS_DISABLED)
@@ -17,7 +17,7 @@
#endif
#if defined __NVCC__
-// Don't reenable the diagnostic messages, as it turns out these messages need
+// Don't re-enable the diagnostic messages, as it turns out these messages need
// to be disabled at the point of the template instantiation (i.e the user code)
// otherwise they'll be triggered by nvcc.
// #pragma diag_default code_is_unreachable
diff --git a/Eigen/src/Core/util/ReshapedHelper.h b/Eigen/src/Core/util/ReshapedHelper.h
index 4124321..6d949eb 100644
--- a/Eigen/src/Core/util/ReshapedHelper.h
+++ b/Eigen/src/Core/util/ReshapedHelper.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_RESHAPED_HELPER_H
#define EIGEN_RESHAPED_HELPER_H
+#include "../InternalHeaderCheck.h"
+
namespace Eigen {
enum AutoSize_t { AutoSize };
diff --git a/Eigen/src/Core/util/Serializer.h b/Eigen/src/Core/util/Serializer.h
new file mode 100644
index 0000000..7ec5eed
--- /dev/null
+++ b/Eigen/src/Core/util/Serializer.h
@@ -0,0 +1,207 @@
+// This file is part of Eigen, a lightweight C++ template library
+// for linear algebra.
+//
+// Copyright (C) 2021 The Eigen Team
+//
+// 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_SERIALIZER_H
+#define EIGEN_SERIALIZER_H
+
+#include <type_traits>
+
+// The Serializer class encodes data into a memory buffer so it can be later
+// reconstructed. This is mainly used to send objects back-and-forth between
+// the CPU and GPU.
+
+namespace Eigen {
+
+/**
+ * Serializes an object to a memory buffer.
+ *
+ * Useful for transferring data (e.g. back-and-forth to a device).
+ */
+template<typename T, typename EnableIf = void>
+class Serializer;
+
+// Specialization for POD types.
+template<typename T>
+class Serializer<T, typename std::enable_if<
+ std::is_trivial<T>::value
+ && std::is_standard_layout<T>::value>::type > {
+ public:
+
+ /**
+ * Determines the required size of the serialization buffer for a value.
+ *
+ * \param value the value to serialize.
+ * \return the required size.
+ */
+ EIGEN_DEVICE_FUNC size_t size(const T& value) const {
+ return sizeof(value);
+ }
+
+ /**
+ * Serializes a value to a byte buffer.
+ * \param dest the destination buffer.
+ * \param T the value to serialize.
+ * \return the next memory address past the end of the serialized data.
+ */
+ EIGEN_DEVICE_FUNC uint8_t* serialize(uint8_t* dest, const T& value) {
+ EIGEN_USING_STD(memcpy)
+ memcpy(dest, &value, sizeof(value));
+ return dest + sizeof(value);
+ }
+
+ /**
+ * Deserializes a value from a byte buffer.
+ * \param src the source buffer.
+ * \param value the value to populate.
+ * \return the next unprocessed memory address.
+ */
+ EIGEN_DEVICE_FUNC uint8_t* deserialize(uint8_t* src, T& value) const {
+ EIGEN_USING_STD(memcpy)
+ memcpy(&value, src, sizeof(value));
+ return src + sizeof(value);
+ }
+};
+
+// Specialization for DenseBase.
+// Serializes [rows, cols, data...].
+template<typename Derived>
+class Serializer<DenseBase<Derived>, void> {
+ public:
+ typedef typename Derived::Scalar Scalar;
+
+ struct Header {
+ typename Derived::Index rows;
+ typename Derived::Index cols;
+ };
+
+ EIGEN_DEVICE_FUNC size_t size(const Derived& value) const {
+ return sizeof(Header) + sizeof(Scalar) * value.size();
+ }
+
+ EIGEN_DEVICE_FUNC uint8_t* serialize(uint8_t* dest, const Derived& value) {
+ const size_t header_bytes = sizeof(Header);
+ const size_t data_bytes = sizeof(Scalar) * value.size();
+ Header header = {value.rows(), value.cols()};
+ EIGEN_USING_STD(memcpy)
+ memcpy(dest, &header, header_bytes);
+ dest += header_bytes;
+ memcpy(dest, value.data(), data_bytes);
+ return dest + data_bytes;
+ }
+
+ EIGEN_DEVICE_FUNC uint8_t* deserialize(uint8_t* src, Derived& value) const {
+ const size_t header_bytes = sizeof(Header);
+ Header header;
+ EIGEN_USING_STD(memcpy)
+ memcpy(&header, src, header_bytes);
+ src += header_bytes;
+ value.resize(header.rows, header.cols);
+ const size_t data_bytes = sizeof(Scalar) * header.rows * header.cols;
+ memcpy(value.data(), src, data_bytes);
+ return src + data_bytes;
+ }
+};
+
+template<typename Scalar, int Rows, int Cols, int Options, int MaxRows, int MaxCols>
+class Serializer<Matrix<Scalar, Rows, Cols, Options, MaxRows, MaxCols> > : public
+ Serializer<DenseBase<Matrix<Scalar, Rows, Cols, Options, MaxRows, MaxCols> > > {};
+
+template<typename Scalar, int Rows, int Cols, int Options, int MaxRows, int MaxCols>
+class Serializer<Array<Scalar, Rows, Cols, Options, MaxRows, MaxCols> > : public
+ Serializer<DenseBase<Array<Scalar, Rows, Cols, Options, MaxRows, MaxCols> > > {};
+
+namespace internal {
+
+// Recursive serialization implementation helper.
+template<size_t N, typename... Types>
+struct serialize_impl;
+
+template<size_t N, typename T1, typename... Ts>
+struct serialize_impl<N, T1, Ts...> {
+ using Serializer = Eigen::Serializer<typename std::decay<T1>::type>;
+
+ static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
+ size_t serialize_size(const T1& value, const Ts&... args) {
+ Serializer serializer;
+ size_t size = serializer.size(value);
+ return size + serialize_impl<N-1, Ts...>::serialize_size(args...);
+ }
+
+ static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
+ uint8_t* serialize(uint8_t* dest, const T1& value, const Ts&... args) {
+ Serializer serializer;
+ dest = serializer.serialize(dest, value);
+ return serialize_impl<N-1, Ts...>::serialize(dest, args...);
+ }
+
+ static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
+ uint8_t* deserialize(uint8_t* src, T1& value, Ts&... args) {
+ Serializer serializer;
+ src = serializer.deserialize(src, value);
+ return serialize_impl<N-1, Ts...>::deserialize(src, args...);
+ }
+};
+
+// Base case.
+template<>
+struct serialize_impl<0> {
+ static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
+ size_t serialize_size() { return 0; }
+
+ static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
+ uint8_t* serialize(uint8_t* dest) { return dest; }
+
+ static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
+ uint8_t* deserialize(uint8_t* src) { return src; }
+};
+
+} // namespace internal
+
+
+/**
+ * Determine the buffer size required to serialize a set of values.
+ *
+ * \param args ... arguments to serialize in sequence.
+ * \return the total size of the required buffer.
+ */
+template<typename... Args>
+EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
+size_t serialize_size(const Args&... args) {
+ return internal::serialize_impl<sizeof...(args), Args...>::serialize_size(args...);
+}
+
+/**
+ * Serialize a set of values to the byte buffer.
+ *
+ * \param dest output byte buffer.
+ * \param args ... arguments to serialize in sequence.
+ * \return the next address after all serialized values.
+ */
+template<typename... Args>
+EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
+uint8_t* serialize(uint8_t* dest, const Args&... args) {
+ return internal::serialize_impl<sizeof...(args), Args...>::serialize(dest, args...);
+}
+
+/**
+ * Deserialize a set of values from the byte buffer.
+ *
+ * \param src input byte buffer.
+ * \param args ... arguments to deserialize in sequence.
+ * \return the next address after all parsed values.
+ */
+template<typename... Args>
+EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
+uint8_t* deserialize(uint8_t* src, Args&... args) {
+ return internal::serialize_impl<sizeof...(args), Args...>::deserialize(src, args...);
+}
+
+} // namespace Eigen
+
+#endif // EIGEN_SERIALIZER_H
diff --git a/Eigen/src/Core/util/StaticAssert.h b/Eigen/src/Core/util/StaticAssert.h
index c45de59..c938eb8 100644
--- a/Eigen/src/Core/util/StaticAssert.h
+++ b/Eigen/src/Core/util/StaticAssert.h
@@ -16,10 +16,6 @@
* - in EIGEN_STATIC_ASSERT(CONDITION,MSG) the parameter CONDITION must be a compile time boolean
* expression, and MSG an enum listed in struct internal::static_assertion<true>
*
- * - define EIGEN_NO_STATIC_ASSERT to disable them (and save compilation time)
- * in that case, the static assertion is converted to the following runtime assert:
- * eigen_assert(CONDITION && "MSG")
- *
* - currently EIGEN_STATIC_ASSERT can only be used in function scope
*
*/
@@ -27,113 +23,11 @@
#ifndef EIGEN_STATIC_ASSERT
#ifndef EIGEN_NO_STATIC_ASSERT
- #if EIGEN_MAX_CPP_VER>=11 && (__has_feature(cxx_static_assert) || (EIGEN_COMP_CXXVER >= 11) || (EIGEN_COMP_MSVC >= 1600))
-
- // if native static_assert is enabled, let's use it
- #define EIGEN_STATIC_ASSERT(X,MSG) static_assert(X,#MSG);
-
- #else // not CXX0X
-
- namespace Eigen {
-
- namespace internal {
-
- template<bool condition>
- struct static_assertion {};
-
- template<>
- struct static_assertion<true>
- {
- enum {
- YOU_TRIED_CALLING_A_VECTOR_METHOD_ON_A_MATRIX=1,
- YOU_MIXED_VECTORS_OF_DIFFERENT_SIZES=1,
- YOU_MIXED_MATRICES_OF_DIFFERENT_SIZES=1,
- THIS_METHOD_IS_ONLY_FOR_VECTORS_OF_A_SPECIFIC_SIZE=1,
- THIS_METHOD_IS_ONLY_FOR_MATRICES_OF_A_SPECIFIC_SIZE=1,
- THIS_METHOD_IS_ONLY_FOR_OBJECTS_OF_A_SPECIFIC_SIZE=1,
- OUT_OF_RANGE_ACCESS=1,
- YOU_MADE_A_PROGRAMMING_MISTAKE=1,
- EIGEN_INTERNAL_ERROR_PLEASE_FILE_A_BUG_REPORT=1,
- EIGEN_INTERNAL_COMPILATION_ERROR_OR_YOU_MADE_A_PROGRAMMING_MISTAKE=1,
- YOU_CALLED_A_FIXED_SIZE_METHOD_ON_A_DYNAMIC_SIZE_MATRIX_OR_VECTOR=1,
- YOU_CALLED_A_DYNAMIC_SIZE_METHOD_ON_A_FIXED_SIZE_MATRIX_OR_VECTOR=1,
- UNALIGNED_LOAD_AND_STORE_OPERATIONS_UNIMPLEMENTED_ON_ALTIVEC=1,
- THIS_FUNCTION_IS_NOT_FOR_INTEGER_NUMERIC_TYPES=1,
- FLOATING_POINT_ARGUMENT_PASSED__INTEGER_WAS_EXPECTED=1,
- NUMERIC_TYPE_MUST_BE_REAL=1,
- COEFFICIENT_WRITE_ACCESS_TO_SELFADJOINT_NOT_SUPPORTED=1,
- WRITING_TO_TRIANGULAR_PART_WITH_UNIT_DIAGONAL_IS_NOT_SUPPORTED=1,
- THIS_METHOD_IS_ONLY_FOR_FIXED_SIZE=1,
- INVALID_MATRIX_PRODUCT=1,
- INVALID_VECTOR_VECTOR_PRODUCT__IF_YOU_WANTED_A_DOT_OR_COEFF_WISE_PRODUCT_YOU_MUST_USE_THE_EXPLICIT_FUNCTIONS=1,
- INVALID_MATRIX_PRODUCT__IF_YOU_WANTED_A_COEFF_WISE_PRODUCT_YOU_MUST_USE_THE_EXPLICIT_FUNCTION=1,
- YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY=1,
- THIS_METHOD_IS_ONLY_FOR_COLUMN_MAJOR_MATRICES=1,
- THIS_METHOD_IS_ONLY_FOR_ROW_MAJOR_MATRICES=1,
- INVALID_MATRIX_TEMPLATE_PARAMETERS=1,
- INVALID_MATRIXBASE_TEMPLATE_PARAMETERS=1,
- BOTH_MATRICES_MUST_HAVE_THE_SAME_STORAGE_ORDER=1,
- THIS_METHOD_IS_ONLY_FOR_DIAGONAL_MATRIX=1,
- THE_MATRIX_OR_EXPRESSION_THAT_YOU_PASSED_DOES_NOT_HAVE_THE_EXPECTED_TYPE=1,
- THIS_METHOD_IS_ONLY_FOR_EXPRESSIONS_WITH_DIRECT_MEMORY_ACCESS_SUCH_AS_MAP_OR_PLAIN_MATRICES=1,
- YOU_ALREADY_SPECIFIED_THIS_STRIDE=1,
- INVALID_STORAGE_ORDER_FOR_THIS_VECTOR_EXPRESSION=1,
- THE_BRACKET_OPERATOR_IS_ONLY_FOR_VECTORS__USE_THE_PARENTHESIS_OPERATOR_INSTEAD=1,
- PACKET_ACCESS_REQUIRES_TO_HAVE_INNER_STRIDE_FIXED_TO_1=1,
- THIS_METHOD_IS_ONLY_FOR_SPECIFIC_TRANSFORMATIONS=1,
- YOU_CANNOT_MIX_ARRAYS_AND_MATRICES=1,
- YOU_PERFORMED_AN_INVALID_TRANSFORMATION_CONVERSION=1,
- THIS_EXPRESSION_IS_NOT_A_LVALUE__IT_IS_READ_ONLY=1,
- YOU_ARE_TRYING_TO_USE_AN_INDEX_BASED_ACCESSOR_ON_AN_EXPRESSION_THAT_DOES_NOT_SUPPORT_THAT=1,
- THIS_METHOD_IS_ONLY_FOR_1x1_EXPRESSIONS=1,
- THIS_METHOD_IS_ONLY_FOR_INNER_OR_LAZY_PRODUCTS=1,
- THIS_METHOD_IS_ONLY_FOR_EXPRESSIONS_OF_BOOL=1,
- THIS_METHOD_IS_ONLY_FOR_ARRAYS_NOT_MATRICES=1,
- YOU_PASSED_A_ROW_VECTOR_BUT_A_COLUMN_VECTOR_WAS_EXPECTED=1,
- YOU_PASSED_A_COLUMN_VECTOR_BUT_A_ROW_VECTOR_WAS_EXPECTED=1,
- THE_INDEX_TYPE_MUST_BE_A_SIGNED_TYPE=1,
- THE_STORAGE_ORDER_OF_BOTH_SIDES_MUST_MATCH=1,
- OBJECT_ALLOCATED_ON_STACK_IS_TOO_BIG=1,
- IMPLICIT_CONVERSION_TO_SCALAR_IS_FOR_INNER_PRODUCT_ONLY=1,
- STORAGE_LAYOUT_DOES_NOT_MATCH=1,
- EIGEN_INTERNAL_ERROR_PLEASE_FILE_A_BUG_REPORT__INVALID_COST_VALUE=1,
- THIS_COEFFICIENT_ACCESSOR_TAKING_ONE_ACCESS_IS_ONLY_FOR_EXPRESSIONS_ALLOWING_LINEAR_ACCESS=1,
- MATRIX_FREE_CONJUGATE_GRADIENT_IS_COMPATIBLE_WITH_UPPER_UNION_LOWER_MODE_ONLY=1,
- THIS_TYPE_IS_NOT_SUPPORTED=1,
- STORAGE_KIND_MUST_MATCH=1,
- STORAGE_INDEX_MUST_MATCH=1,
- CHOLMOD_SUPPORTS_DOUBLE_PRECISION_ONLY=1,
- SELFADJOINTVIEW_ACCEPTS_UPPER_AND_LOWER_MODE_ONLY=1,
- INVALID_TEMPLATE_PARAMETER=1,
- GPU_TENSOR_CONTRACTION_DOES_NOT_SUPPORT_OUTPUT_KERNELS=1,
- THE_ARRAY_SIZE_SHOULD_EQUAL_WITH_PACKET_SIZE=1
- };
- };
-
- } // end namespace internal
-
- } // end namespace Eigen
-
- // Specialized implementation for MSVC to avoid "conditional
- // expression is constant" warnings. This implementation doesn't
- // appear to work under GCC, hence the multiple implementations.
- #if EIGEN_COMP_MSVC
-
- #define EIGEN_STATIC_ASSERT(CONDITION,MSG) \
- {Eigen::internal::static_assertion<bool(CONDITION)>::MSG;}
-
- #else
- // In some cases clang interprets bool(CONDITION) as function declaration
- #define EIGEN_STATIC_ASSERT(CONDITION,MSG) \
- if (Eigen::internal::static_assertion<static_cast<bool>(CONDITION)>::MSG) {}
-
- #endif
-
- #endif // not CXX0X
+#define EIGEN_STATIC_ASSERT(X,MSG) static_assert(X,#MSG);
#else // EIGEN_NO_STATIC_ASSERT
- #define EIGEN_STATIC_ASSERT(CONDITION,MSG) eigen_assert((CONDITION) && #MSG);
+#define EIGEN_STATIC_ASSERT(CONDITION,MSG)
#endif // EIGEN_NO_STATIC_ASSERT
#endif // EIGEN_STATIC_ASSERT
diff --git a/Eigen/src/Core/util/SymbolicIndex.h b/Eigen/src/Core/util/SymbolicIndex.h
index 354dd9a..9135a4a 100644
--- a/Eigen/src/Core/util/SymbolicIndex.h
+++ b/Eigen/src/Core/util/SymbolicIndex.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_SYMBOLIC_INDEX_H
#define EIGEN_SYMBOLIC_INDEX_H
+#include "../InternalHeaderCheck.h"
+
namespace Eigen {
/** \namespace Eigen::symbolic
@@ -35,7 +37,9 @@
* std::cout << expr98.eval(x=6) << "\n";
* \endcode
*
- * It is currently only used internally to define and manipulate the Eigen::last and Eigen::lastp1 symbols in Eigen::seq and Eigen::seqN.
+ * It is currently only used internally to define and manipulate the
+ * Eigen::placeholders::last and Eigen::placeholders::lastp1 symbols in
+ * Eigen::seq and Eigen::seqN.
*
*/
namespace symbolic {
diff --git a/Eigen/src/Core/util/XprHelper.h b/Eigen/src/Core/util/XprHelper.h
index 63885bc..918d488 100644
--- a/Eigen/src/Core/util/XprHelper.h
+++ b/Eigen/src/Core/util/XprHelper.h
@@ -22,6 +22,8 @@
#define EIGEN_EMPTY_STRUCT_CTOR(X)
#endif
+#include "../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Eigenvalues/ComplexEigenSolver.h b/Eigen/src/Eigenvalues/ComplexEigenSolver.h
index f658e4e..1cfc0ca 100644
--- a/Eigen/src/Eigenvalues/ComplexEigenSolver.h
+++ b/Eigen/src/Eigenvalues/ComplexEigenSolver.h
@@ -14,6 +14,8 @@
#include "./ComplexSchur.h"
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \eigenvalues_module \ingroup Eigenvalues_Module
@@ -236,12 +238,9 @@
}
protected:
-
- static void check_template_parameters()
- {
- EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar);
- }
-
+
+ EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar)
+
EigenvectorType m_eivec;
EigenvalueType m_eivalues;
ComplexSchur<MatrixType> m_schur;
@@ -260,8 +259,6 @@
ComplexEigenSolver<MatrixType>&
ComplexEigenSolver<MatrixType>::compute(const EigenBase<InputType>& matrix, bool computeEigenvectors)
{
- check_template_parameters();
-
// this code is inspired from Jampack
eigen_assert(matrix.cols() == matrix.rows());
diff --git a/Eigen/src/Eigenvalues/ComplexSchur.h b/Eigen/src/Eigenvalues/ComplexSchur.h
index 5beaa36..b4f8249 100644
--- a/Eigen/src/Eigenvalues/ComplexSchur.h
+++ b/Eigen/src/Eigenvalues/ComplexSchur.h
@@ -14,6 +14,8 @@
#include "./HessenbergDecomposition.h"
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
@@ -259,7 +261,7 @@
friend struct internal::complex_schur_reduce_to_hessenberg<MatrixType, NumTraits<Scalar>::IsComplex>;
};
-/** If m_matT(i+1,i) is neglegible in floating point arithmetic
+/** If m_matT(i+1,i) is negligible in floating point arithmetic
* compared to m_matT(i,i) and m_matT(j,j), then set it to zero and
* return true, else return false. */
template<typename MatrixType>
diff --git a/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h b/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h
index 4980a3e..144eb2a 100644
--- a/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h
+++ b/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h
@@ -33,6 +33,8 @@
#ifndef EIGEN_COMPLEX_SCHUR_LAPACKE_H
#define EIGEN_COMPLEX_SCHUR_LAPACKE_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \internal Specialization for the data types supported by LAPACKe */
diff --git a/Eigen/src/Eigenvalues/EigenSolver.h b/Eigen/src/Eigenvalues/EigenSolver.h
index d412601..f6ff140 100644
--- a/Eigen/src/Eigenvalues/EigenSolver.h
+++ b/Eigen/src/Eigenvalues/EigenSolver.h
@@ -13,6 +13,8 @@
#include "./RealSchur.h"
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \eigenvalues_module \ingroup Eigenvalues_Module
diff --git a/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h b/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h
index fbc7679..3df3092 100644
--- a/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h
+++ b/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h
@@ -14,6 +14,8 @@
#include "./RealQZ.h"
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \eigenvalues_module \ingroup Eigenvalues_Module
@@ -267,13 +269,10 @@
}
protected:
-
- static void check_template_parameters()
- {
- EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar);
- EIGEN_STATIC_ASSERT(!NumTraits<Scalar>::IsComplex, NUMERIC_TYPE_MUST_BE_REAL);
- }
-
+
+ EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar)
+ EIGEN_STATIC_ASSERT(!NumTraits<Scalar>::IsComplex, NUMERIC_TYPE_MUST_BE_REAL)
+
EigenvectorsType m_eivec;
ComplexVectorType m_alphas;
VectorType m_betas;
@@ -286,8 +285,6 @@
GeneralizedEigenSolver<MatrixType>&
GeneralizedEigenSolver<MatrixType>::compute(const MatrixType& A, const MatrixType& B, bool computeEigenvectors)
{
- check_template_parameters();
-
using std::sqrt;
using std::abs;
eigen_assert(A.cols() == A.rows() && B.cols() == A.rows() && B.cols() == B.rows());
diff --git a/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h b/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h
index fd1105b..dab66ca 100644
--- a/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h
+++ b/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h
@@ -13,6 +13,8 @@
#include "./Tridiagonalization.h"
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \eigenvalues_module \ingroup Eigenvalues_Module
diff --git a/Eigen/src/Eigenvalues/HessenbergDecomposition.h b/Eigen/src/Eigenvalues/HessenbergDecomposition.h
index ae855b9..387c13a 100644
--- a/Eigen/src/Eigenvalues/HessenbergDecomposition.h
+++ b/Eigen/src/Eigenvalues/HessenbergDecomposition.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_HESSENBERGDECOMPOSITION_H
#define EIGEN_HESSENBERGDECOMPOSITION_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Eigenvalues/InternalHeaderCheck.h b/Eigen/src/Eigenvalues/InternalHeaderCheck.h
new file mode 100644
index 0000000..374cbd4
--- /dev/null
+++ b/Eigen/src/Eigenvalues/InternalHeaderCheck.h
@@ -0,0 +1,3 @@
+#ifndef EIGEN_EIGENVALUES_MODULE_H
+#error "Please include Eigen/Eigenvalues instead of including headers inside the src directory directly."
+#endif
diff --git a/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h b/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h
index 66e5a3d..c8df260 100644
--- a/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h
+++ b/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_MATRIXBASEEIGENVALUES_H
#define EIGEN_MATRIXBASEEIGENVALUES_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Eigenvalues/RealQZ.h b/Eigen/src/Eigenvalues/RealQZ.h
index 0fe8543..5564f7f 100644
--- a/Eigen/src/Eigenvalues/RealQZ.h
+++ b/Eigen/src/Eigenvalues/RealQZ.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_REAL_QZ_H
#define EIGEN_REAL_QZ_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \eigenvalues_module \ingroup Eigenvalues_Module
diff --git a/Eigen/src/Eigenvalues/RealSchur.h b/Eigen/src/Eigenvalues/RealSchur.h
index 5b7d38c..96372dc 100644
--- a/Eigen/src/Eigenvalues/RealSchur.h
+++ b/Eigen/src/Eigenvalues/RealSchur.h
@@ -13,6 +13,8 @@
#include "./HessenbergDecomposition.h"
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \eigenvalues_module \ingroup Eigenvalues_Module
diff --git a/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h b/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h
index 2c22517..0a6ed21 100644
--- a/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h
+++ b/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h
@@ -33,6 +33,8 @@
#ifndef EIGEN_REAL_SCHUR_LAPACKE_H
#define EIGEN_REAL_SCHUR_LAPACKE_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \internal Specialization for the data types supported by LAPACKe */
diff --git a/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h b/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h
index e6073cd..70d370c 100644
--- a/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h
+++ b/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h
@@ -13,6 +13,8 @@
#include "./Tridiagonalization.h"
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
template<typename MatrixType_>
@@ -372,12 +374,8 @@
static const int m_maxIterations = 30;
protected:
- static EIGEN_DEVICE_FUNC
- void check_template_parameters()
- {
- EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar);
- }
-
+ EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar)
+
EigenvectorsType m_eivec;
RealVectorType m_eivalues;
typename TridiagonalizationType::SubDiagonalType m_subdiag;
@@ -419,10 +417,8 @@
SelfAdjointEigenSolver<MatrixType>& SelfAdjointEigenSolver<MatrixType>
::compute(const EigenBase<InputType>& a_matrix, int options)
{
- check_template_parameters();
-
const InputType &matrix(a_matrix.derived());
-
+
EIGEN_USING_STD(abs);
eigen_assert(matrix.cols() == matrix.rows());
eigen_assert((options&~(EigVecMask|GenEigMask))==0
diff --git a/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h b/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h
index b0c947d..b24de67 100644
--- a/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h
+++ b/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h
@@ -33,6 +33,8 @@
#ifndef EIGEN_SAEIGENSOLVER_LAPACKE_H
#define EIGEN_SAEIGENSOLVER_LAPACKE_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \internal Specialization for the data types supported by LAPACKe */
diff --git a/Eigen/src/Eigenvalues/Tridiagonalization.h b/Eigen/src/Eigenvalues/Tridiagonalization.h
index e82cbe3..be95093 100644
--- a/Eigen/src/Eigenvalues/Tridiagonalization.h
+++ b/Eigen/src/Eigenvalues/Tridiagonalization.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_TRIDIAGONALIZATION_H
#define EIGEN_TRIDIAGONALIZATION_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Geometry/AlignedBox.h b/Eigen/src/Geometry/AlignedBox.h
index 7481ea3..d9f6306 100644
--- a/Eigen/src/Geometry/AlignedBox.h
+++ b/Eigen/src/Geometry/AlignedBox.h
@@ -46,6 +46,8 @@
#ifndef EIGEN_ALIGNEDBOX_H
#define EIGEN_ALIGNEDBOX_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \geometry_module \ingroup Geometry_Module
diff --git a/Eigen/src/Geometry/AngleAxis.h b/Eigen/src/Geometry/AngleAxis.h
index d23fd59..c23a908 100644
--- a/Eigen/src/Geometry/AngleAxis.h
+++ b/Eigen/src/Geometry/AngleAxis.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_ANGLEAXIS_H
#define EIGEN_ANGLEAXIS_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \geometry_module \ingroup Geometry_Module
diff --git a/Eigen/src/Geometry/EulerAngles.h b/Eigen/src/Geometry/EulerAngles.h
index 19b734c..2b99960 100644
--- a/Eigen/src/Geometry/EulerAngles.h
+++ b/Eigen/src/Geometry/EulerAngles.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_EULERANGLES_H
#define EIGEN_EULERANGLES_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \geometry_module \ingroup Geometry_Module
diff --git a/Eigen/src/Geometry/Homogeneous.h b/Eigen/src/Geometry/Homogeneous.h
index e909984..e1ddb3e 100644
--- a/Eigen/src/Geometry/Homogeneous.h
+++ b/Eigen/src/Geometry/Homogeneous.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_HOMOGENEOUS_H
#define EIGEN_HOMOGENEOUS_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \geometry_module \ingroup Geometry_Module
diff --git a/Eigen/src/Geometry/Hyperplane.h b/Eigen/src/Geometry/Hyperplane.h
index 268c9dd..db0a485 100644
--- a/Eigen/src/Geometry/Hyperplane.h
+++ b/Eigen/src/Geometry/Hyperplane.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_HYPERPLANE_H
#define EIGEN_HYPERPLANE_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \geometry_module \ingroup Geometry_Module
diff --git a/Eigen/src/Geometry/InternalHeaderCheck.h b/Eigen/src/Geometry/InternalHeaderCheck.h
new file mode 100644
index 0000000..a1159a3
--- /dev/null
+++ b/Eigen/src/Geometry/InternalHeaderCheck.h
@@ -0,0 +1,3 @@
+#ifndef EIGEN_GEOMETRY_MODULE_H
+#error "Please include Eigen/Geometry instead of including headers inside the src directory directly."
+#endif
diff --git a/Eigen/src/Geometry/OrthoMethods.h b/Eigen/src/Geometry/OrthoMethods.h
index 524aebe..1b657b5 100644
--- a/Eigen/src/Geometry/OrthoMethods.h
+++ b/Eigen/src/Geometry/OrthoMethods.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_ORTHOMETHODS_H
#define EIGEN_ORTHOMETHODS_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \geometry_module \ingroup Geometry_Module
diff --git a/Eigen/src/Geometry/ParametrizedLine.h b/Eigen/src/Geometry/ParametrizedLine.h
index 9ade8dc..fa90a9e 100644
--- a/Eigen/src/Geometry/ParametrizedLine.h
+++ b/Eigen/src/Geometry/ParametrizedLine.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_PARAMETRIZEDLINE_H
#define EIGEN_PARAMETRIZEDLINE_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \geometry_module \ingroup Geometry_Module
diff --git a/Eigen/src/Geometry/Quaternion.h b/Eigen/src/Geometry/Quaternion.h
index 4c929c5..3a27505 100644
--- a/Eigen/src/Geometry/Quaternion.h
+++ b/Eigen/src/Geometry/Quaternion.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_QUATERNION_H
#define EIGEN_QUATERNION_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
@@ -341,20 +343,17 @@
EIGEN_DEVICE_FUNC inline const Coefficients& coeffs() const { return m_coeffs;}
EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF(bool(NeedsAlignment))
-
+
#ifdef EIGEN_QUATERNION_PLUGIN
# include EIGEN_QUATERNION_PLUGIN
#endif
protected:
Coefficients m_coeffs;
-
+
#ifndef EIGEN_PARSED_BY_DOXYGEN
- static EIGEN_STRONG_INLINE void _check_template_params()
- {
- EIGEN_STATIC_ASSERT( (Options_ & DontAlign) == Options_,
- INVALID_MATRIX_TEMPLATE_PARAMETERS)
- }
+ EIGEN_STATIC_ASSERT( (Options_ & DontAlign) == Options_,
+ INVALID_MATRIX_TEMPLATE_PARAMETERS)
#endif
};
diff --git a/Eigen/src/Geometry/Rotation2D.h b/Eigen/src/Geometry/Rotation2D.h
index 74d9f87..aa7f863 100644
--- a/Eigen/src/Geometry/Rotation2D.h
+++ b/Eigen/src/Geometry/Rotation2D.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_ROTATION2D_H
#define EIGEN_ROTATION2D_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \geometry_module \ingroup Geometry_Module
diff --git a/Eigen/src/Geometry/RotationBase.h b/Eigen/src/Geometry/RotationBase.h
index bdbec1e..b05e24b 100644
--- a/Eigen/src/Geometry/RotationBase.h
+++ b/Eigen/src/Geometry/RotationBase.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_ROTATIONBASE_H
#define EIGEN_ROTATIONBASE_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
// forward declaration
diff --git a/Eigen/src/Geometry/Scaling.h b/Eigen/src/Geometry/Scaling.h
index 4e75753..48a192e 100644
--- a/Eigen/src/Geometry/Scaling.h
+++ b/Eigen/src/Geometry/Scaling.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_SCALING_H
#define EIGEN_SCALING_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \geometry_module \ingroup Geometry_Module
diff --git a/Eigen/src/Geometry/Transform.h b/Eigen/src/Geometry/Transform.h
index 56b10e6..81c8efa 100644
--- a/Eigen/src/Geometry/Transform.h
+++ b/Eigen/src/Geometry/Transform.h
@@ -12,6 +12,8 @@
#ifndef EIGEN_TRANSFORM_H
#define EIGEN_TRANSFORM_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Geometry/Translation.h b/Eigen/src/Geometry/Translation.h
index cad623b..7ad5afa 100644
--- a/Eigen/src/Geometry/Translation.h
+++ b/Eigen/src/Geometry/Translation.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_TRANSLATION_H
#define EIGEN_TRANSLATION_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \geometry_module \ingroup Geometry_Module
diff --git a/Eigen/src/Geometry/Umeyama.h b/Eigen/src/Geometry/Umeyama.h
index c5e1edd..b402dfa 100644
--- a/Eigen/src/Geometry/Umeyama.h
+++ b/Eigen/src/Geometry/Umeyama.h
@@ -16,6 +16,8 @@
// * Eigen/SVD
// * Eigen/Array
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
#ifndef EIGEN_PARSED_BY_DOXYGEN
diff --git a/Eigen/src/Geometry/arch/Geometry_SIMD.h b/Eigen/src/Geometry/arch/Geometry_SIMD.h
index 9af6a9a..bd91949 100644
--- a/Eigen/src/Geometry/arch/Geometry_SIMD.h
+++ b/Eigen/src/Geometry/arch/Geometry_SIMD.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_GEOMETRY_SIMD_H
#define EIGEN_GEOMETRY_SIMD_H
+#include "../InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Householder/BlockHouseholder.h b/Eigen/src/Householder/BlockHouseholder.h
index 39ce1c2..9dec1aa 100644
--- a/Eigen/src/Householder/BlockHouseholder.h
+++ b/Eigen/src/Householder/BlockHouseholder.h
@@ -13,6 +13,8 @@
// This file contains some helper function to deal with block householder reflectors
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Householder/Householder.h b/Eigen/src/Householder/Householder.h
index 5bc037f..dc6bf3e 100644
--- a/Eigen/src/Householder/Householder.h
+++ b/Eigen/src/Householder/Householder.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_HOUSEHOLDER_H
#define EIGEN_HOUSEHOLDER_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/Householder/HouseholderSequence.h b/Eigen/src/Householder/HouseholderSequence.h
index 984b236..d35d319 100644
--- a/Eigen/src/Householder/HouseholderSequence.h
+++ b/Eigen/src/Householder/HouseholderSequence.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_HOUSEHOLDER_SEQUENCE_H
#define EIGEN_HOUSEHOLDER_SEQUENCE_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \ingroup Householder_Module
diff --git a/Eigen/src/Householder/InternalHeaderCheck.h b/Eigen/src/Householder/InternalHeaderCheck.h
new file mode 100644
index 0000000..70de89b
--- /dev/null
+++ b/Eigen/src/Householder/InternalHeaderCheck.h
@@ -0,0 +1,3 @@
+#ifndef EIGEN_HOUSEHOLDER_MODULE_H
+#error "Please include Eigen/Householder instead of including headers inside the src directory directly."
+#endif
diff --git a/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h b/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h
index 3adfe4f..d2d55b7 100644
--- a/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h
+++ b/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_BASIC_PRECONDITIONERS_H
#define EIGEN_BASIC_PRECONDITIONERS_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \ingroup IterativeLinearSolvers_Module
diff --git a/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h b/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h
index 22ad539..079b22d 100644
--- a/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h
+++ b/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_BICGSTAB_H
#define EIGEN_BICGSTAB_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h b/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h
index 6cc6532..a1408a6 100644
--- a/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h
+++ b/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_CONJUGATE_GRADIENT_H
#define EIGEN_CONJUGATE_GRADIENT_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h b/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h
index d4f7155..f57fc33 100644
--- a/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h
+++ b/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h
@@ -14,6 +14,8 @@
#include <vector>
#include <list>
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/**
* \brief Modified Incomplete Cholesky with dual threshold
diff --git a/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h b/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h
index 6637a8e..44f25fc 100644
--- a/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h
+++ b/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h
@@ -12,6 +12,8 @@
#define EIGEN_INCOMPLETE_LUT_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h b/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h
new file mode 100644
index 0000000..b657e84
--- /dev/null
+++ b/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h
@@ -0,0 +1,3 @@
+#ifndef EIGEN_ITERATIVELINEARSOLVERS_MODULE_H
+#error "Please include Eigen/IterativeLinearSolvers instead of including headers inside the src directory directly."
+#endif
diff --git a/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h b/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h
index 28a0c51..39a7afc 100644
--- a/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h
+++ b/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_ITERATIVE_SOLVER_BASE_H
#define EIGEN_ITERATIVE_SOLVER_BASE_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h b/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h
index be816e4..f59fa05 100644
--- a/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h
+++ b/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_LEAST_SQUARE_CONJUGATE_GRADIENT_H
#define EIGEN_LEAST_SQUARE_CONJUGATE_GRADIENT_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h b/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h
index 7b89657..121363b 100644
--- a/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h
+++ b/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_SOLVEWITHGUESS_H
#define EIGEN_SOLVEWITHGUESS_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
template<typename Decomposition, typename RhsType, typename GuessType> class SolveWithGuess;
diff --git a/Eigen/src/Jacobi/InternalHeaderCheck.h b/Eigen/src/Jacobi/InternalHeaderCheck.h
new file mode 100644
index 0000000..b17b1f2
--- /dev/null
+++ b/Eigen/src/Jacobi/InternalHeaderCheck.h
@@ -0,0 +1,3 @@
+#ifndef EIGEN_JACOBI_MODULE_H
+#error "Please include Eigen/Jacobi instead of including headers inside the src directory directly."
+#endif
diff --git a/Eigen/src/Jacobi/Jacobi.h b/Eigen/src/Jacobi/Jacobi.h
index 76668a5..55a94c2 100644
--- a/Eigen/src/Jacobi/Jacobi.h
+++ b/Eigen/src/Jacobi/Jacobi.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_JACOBI_H
#define EIGEN_JACOBI_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \ingroup Jacobi_Module
diff --git a/Eigen/src/KLUSupport/InternalHeaderCheck.h b/Eigen/src/KLUSupport/InternalHeaderCheck.h
new file mode 100644
index 0000000..eb1d671
--- /dev/null
+++ b/Eigen/src/KLUSupport/InternalHeaderCheck.h
@@ -0,0 +1,3 @@
+#ifndef EIGEN_KLUSUPPORT_MODULE_H
+#error "Please include Eigen/KLUSupport instead of including headers inside the src directory directly."
+#endif
diff --git a/Eigen/src/KLUSupport/KLUSupport.h b/Eigen/src/KLUSupport/KLUSupport.h
index c13a332..769c45d 100644
--- a/Eigen/src/KLUSupport/KLUSupport.h
+++ b/Eigen/src/KLUSupport/KLUSupport.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_KLUSUPPORT_H
#define EIGEN_KLUSUPPORT_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/* TODO extract L, extract U, compute det, etc... */
diff --git a/Eigen/src/LU/Determinant.h b/Eigen/src/LU/Determinant.h
index 3a41e6f..c94c394 100644
--- a/Eigen/src/LU/Determinant.h
+++ b/Eigen/src/LU/Determinant.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_DETERMINANT_H
#define EIGEN_DETERMINANT_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/LU/FullPivLU.h b/Eigen/src/LU/FullPivLU.h
index c45b258..1dd0a4e 100644
--- a/Eigen/src/LU/FullPivLU.h
+++ b/Eigen/src/LU/FullPivLU.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_LU_H
#define EIGEN_LU_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
@@ -419,10 +421,7 @@
protected:
- static void check_template_parameters()
- {
- EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar);
- }
+ EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar)
void computeInPlace();
@@ -487,8 +486,6 @@
template<typename MatrixType>
void FullPivLU<MatrixType>::computeInPlace()
{
- check_template_parameters();
-
// the permutations are stored as int indices, so just to be sure:
eigen_assert(m_lu.rows()<=NumTraits<int>::highest() && m_lu.cols()<=NumTraits<int>::highest());
diff --git a/Eigen/src/LU/InternalHeaderCheck.h b/Eigen/src/LU/InternalHeaderCheck.h
new file mode 100644
index 0000000..f346b17
--- /dev/null
+++ b/Eigen/src/LU/InternalHeaderCheck.h
@@ -0,0 +1,3 @@
+#ifndef EIGEN_LU_MODULE_H
+#error "Please include Eigen/LU instead of including headers inside the src directory directly."
+#endif
diff --git a/Eigen/src/LU/InverseImpl.h b/Eigen/src/LU/InverseImpl.h
index a40cefa..9c1a605 100644
--- a/Eigen/src/LU/InverseImpl.h
+++ b/Eigen/src/LU/InverseImpl.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_INVERSE_IMPL_H
#define EIGEN_INVERSE_IMPL_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/LU/PartialPivLU.h b/Eigen/src/LU/PartialPivLU.h
index 52e4bcc..4034745 100644
--- a/Eigen/src/LU/PartialPivLU.h
+++ b/Eigen/src/LU/PartialPivLU.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_PARTIALLU_H
#define EIGEN_PARTIALLU_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
@@ -265,10 +267,7 @@
protected:
- static void check_template_parameters()
- {
- EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar);
- }
+ EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar)
void compute();
@@ -524,8 +523,6 @@
template<typename MatrixType>
void PartialPivLU<MatrixType>::compute()
{
- check_template_parameters();
-
// the row permutation is stored as int indices, so just to be sure:
eigen_assert(m_lu.rows()<NumTraits<int>::highest());
diff --git a/Eigen/src/LU/PartialPivLU_LAPACKE.h b/Eigen/src/LU/PartialPivLU_LAPACKE.h
index 755168a..2f244f6 100644
--- a/Eigen/src/LU/PartialPivLU_LAPACKE.h
+++ b/Eigen/src/LU/PartialPivLU_LAPACKE.h
@@ -33,6 +33,8 @@
#ifndef EIGEN_PARTIALLU_LAPACK_H
#define EIGEN_PARTIALLU_LAPACK_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/LU/arch/InverseSize4.h b/Eigen/src/LU/arch/InverseSize4.h
index a232ffc..ecb3a6b 100644
--- a/Eigen/src/LU/arch/InverseSize4.h
+++ b/Eigen/src/LU/arch/InverseSize4.h
@@ -35,6 +35,8 @@
#ifndef EIGEN_INVERSE_SIZE_4_H
#define EIGEN_INVERSE_SIZE_4_H
+#include "../InternalHeaderCheck.h"
+
namespace Eigen
{
namespace internal
diff --git a/Eigen/src/MetisSupport/InternalHeaderCheck.h b/Eigen/src/MetisSupport/InternalHeaderCheck.h
new file mode 100644
index 0000000..9d34825
--- /dev/null
+++ b/Eigen/src/MetisSupport/InternalHeaderCheck.h
@@ -0,0 +1,3 @@
+#ifndef EIGEN_METISSUPPORT_MODULE_H
+#error "Please include Eigen/MetisSupport instead of including headers inside the src directory directly."
+#endif
diff --git a/Eigen/src/MetisSupport/MetisSupport.h b/Eigen/src/MetisSupport/MetisSupport.h
index 4c15304..c5e143b 100644
--- a/Eigen/src/MetisSupport/MetisSupport.h
+++ b/Eigen/src/MetisSupport/MetisSupport.h
@@ -9,6 +9,8 @@
#ifndef METIS_SUPPORT_H
#define METIS_SUPPORT_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/**
* Get the fill-reducing ordering from the METIS package
diff --git a/Eigen/src/OrderingMethods/Amd.h b/Eigen/src/OrderingMethods/Amd.h
index 7ca3f33..5bd531c 100644
--- a/Eigen/src/OrderingMethods/Amd.h
+++ b/Eigen/src/OrderingMethods/Amd.h
@@ -21,6 +21,8 @@
#ifndef EIGEN_SPARSE_AMD_H
#define EIGEN_SPARSE_AMD_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/OrderingMethods/InternalHeaderCheck.h b/Eigen/src/OrderingMethods/InternalHeaderCheck.h
new file mode 100644
index 0000000..713c447
--- /dev/null
+++ b/Eigen/src/OrderingMethods/InternalHeaderCheck.h
@@ -0,0 +1,3 @@
+#ifndef EIGEN_ORDERINGMETHODS_MODULE_H
+#error "Please include Eigen/OrderingMethods instead of including headers inside the src directory directly."
+#endif
diff --git a/Eigen/src/OrderingMethods/Ordering.h b/Eigen/src/OrderingMethods/Ordering.h
index c578970..5cc4a85 100644
--- a/Eigen/src/OrderingMethods/Ordering.h
+++ b/Eigen/src/OrderingMethods/Ordering.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_ORDERING_H
#define EIGEN_ORDERING_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
#include "Eigen_Colamd.h"
diff --git a/Eigen/src/PaStiXSupport/InternalHeaderCheck.h b/Eigen/src/PaStiXSupport/InternalHeaderCheck.h
new file mode 100644
index 0000000..f588e50
--- /dev/null
+++ b/Eigen/src/PaStiXSupport/InternalHeaderCheck.h
@@ -0,0 +1,3 @@
+#ifndef EIGEN_PASTIXSUPPORT_MODULE_H
+#error "Please include Eigen/PaStiXSupport instead of including headers inside the src directory directly."
+#endif
diff --git a/Eigen/src/PaStiXSupport/PaStiXSupport.h b/Eigen/src/PaStiXSupport/PaStiXSupport.h
index cb133c5..d3126b1 100644
--- a/Eigen/src/PaStiXSupport/PaStiXSupport.h
+++ b/Eigen/src/PaStiXSupport/PaStiXSupport.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_PASTIXSUPPORT_H
#define EIGEN_PASTIXSUPPORT_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
#if defined(DCOMPLEX)
diff --git a/Eigen/src/PardisoSupport/InternalHeaderCheck.h b/Eigen/src/PardisoSupport/InternalHeaderCheck.h
new file mode 100644
index 0000000..8ef33f0
--- /dev/null
+++ b/Eigen/src/PardisoSupport/InternalHeaderCheck.h
@@ -0,0 +1,3 @@
+#ifndef EIGEN_PARDISOSUPPORT_MODULE_H
+#error "Please include Eigen/PardisoSupport instead of including headers inside the src directory directly."
+#endif
diff --git a/Eigen/src/PardisoSupport/PardisoSupport.h b/Eigen/src/PardisoSupport/PardisoSupport.h
index f09856a..e9815e6 100644
--- a/Eigen/src/PardisoSupport/PardisoSupport.h
+++ b/Eigen/src/PardisoSupport/PardisoSupport.h
@@ -32,6 +32,8 @@
#ifndef EIGEN_PARDISOSUPPORT_H
#define EIGEN_PARDISOSUPPORT_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
template<typename MatrixType_> class PardisoLU;
diff --git a/Eigen/src/QR/ColPivHouseholderQR.h b/Eigen/src/QR/ColPivHouseholderQR.h
index 3c884e7..b9500c8 100644
--- a/Eigen/src/QR/ColPivHouseholderQR.h
+++ b/Eigen/src/QR/ColPivHouseholderQR.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_COLPIVOTINGHOUSEHOLDERQR_H
#define EIGEN_COLPIVOTINGHOUSEHOLDERQR_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
@@ -426,10 +428,7 @@
friend class CompleteOrthogonalDecomposition<MatrixType>;
- static void check_template_parameters()
- {
- EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar);
- }
+ EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar)
void computeInPlace();
@@ -481,8 +480,6 @@
template<typename MatrixType>
void ColPivHouseholderQR<MatrixType>::computeInPlace()
{
- check_template_parameters();
-
// the column permutation is stored as int indices, so just to be sure:
eigen_assert(m_qr.cols()<=NumTraits<int>::highest());
diff --git a/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h b/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h
index 4e9651f..7652d31 100644
--- a/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h
+++ b/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h
@@ -34,6 +34,8 @@
#ifndef EIGEN_COLPIVOTINGHOUSEHOLDERQR_LAPACKE_H
#define EIGEN_COLPIVOTINGHOUSEHOLDERQR_LAPACKE_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \internal Specialization for the data types supported by LAPACKe */
diff --git a/Eigen/src/QR/CompleteOrthogonalDecomposition.h b/Eigen/src/QR/CompleteOrthogonalDecomposition.h
index 0445edb..111d583 100644
--- a/Eigen/src/QR/CompleteOrthogonalDecomposition.h
+++ b/Eigen/src/QR/CompleteOrthogonalDecomposition.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_COMPLETEORTHOGONALDECOMPOSITION_H
#define EIGEN_COMPLETEORTHOGONALDECOMPOSITION_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
@@ -377,9 +379,7 @@
#endif
protected:
- static void check_template_parameters() {
- EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar);
- }
+ EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar)
template<bool Transpose_, typename Rhs>
void _check_solve_assertion(const Rhs& b) const {
@@ -429,8 +429,6 @@
template <typename MatrixType>
void CompleteOrthogonalDecomposition<MatrixType>::computeInPlace()
{
- check_template_parameters();
-
// the column permutation is stored as int indices, so just to be sure:
eigen_assert(m_cpqr.cols() <= NumTraits<int>::highest());
diff --git a/Eigen/src/QR/FullPivHouseholderQR.h b/Eigen/src/QR/FullPivHouseholderQR.h
index 68585df..0a61f22 100644
--- a/Eigen/src/QR/FullPivHouseholderQR.h
+++ b/Eigen/src/QR/FullPivHouseholderQR.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_FULLPIVOTINGHOUSEHOLDERQR_H
#define EIGEN_FULLPIVOTINGHOUSEHOLDERQR_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
@@ -403,10 +405,7 @@
protected:
- static void check_template_parameters()
- {
- EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar);
- }
+ EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar)
void computeInPlace();
@@ -458,8 +457,6 @@
template<typename MatrixType>
void FullPivHouseholderQR<MatrixType>::computeInPlace()
{
- check_template_parameters();
-
using std::abs;
Index rows = m_qr.rows();
Index cols = m_qr.cols();
diff --git a/Eigen/src/QR/HouseholderQR.h b/Eigen/src/QR/HouseholderQR.h
index d2216c5..c55cac3 100644
--- a/Eigen/src/QR/HouseholderQR.h
+++ b/Eigen/src/QR/HouseholderQR.h
@@ -12,6 +12,8 @@
#ifndef EIGEN_QR_H
#define EIGEN_QR_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
@@ -230,10 +232,7 @@
protected:
- static void check_template_parameters()
- {
- EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar);
- }
+ EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar)
void computeInPlace();
@@ -403,8 +402,6 @@
template<typename MatrixType>
void HouseholderQR<MatrixType>::computeInPlace()
{
- check_template_parameters();
-
Index rows = m_qr.rows();
Index cols = m_qr.cols();
Index size = (std::min)(rows,cols);
diff --git a/Eigen/src/QR/HouseholderQR_LAPACKE.h b/Eigen/src/QR/HouseholderQR_LAPACKE.h
index 1dc7d53..ef67760 100644
--- a/Eigen/src/QR/HouseholderQR_LAPACKE.h
+++ b/Eigen/src/QR/HouseholderQR_LAPACKE.h
@@ -34,6 +34,8 @@
#ifndef EIGEN_QR_LAPACKE_H
#define EIGEN_QR_LAPACKE_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/QR/InternalHeaderCheck.h b/Eigen/src/QR/InternalHeaderCheck.h
new file mode 100644
index 0000000..bf8df01
--- /dev/null
+++ b/Eigen/src/QR/InternalHeaderCheck.h
@@ -0,0 +1,3 @@
+#ifndef EIGEN_QR_MODULE_H
+#error "Please include Eigen/QR instead of including headers inside the src directory directly."
+#endif
diff --git a/Eigen/src/SPQRSupport/InternalHeaderCheck.h b/Eigen/src/SPQRSupport/InternalHeaderCheck.h
new file mode 100644
index 0000000..8d94ba4
--- /dev/null
+++ b/Eigen/src/SPQRSupport/InternalHeaderCheck.h
@@ -0,0 +1,3 @@
+#ifndef EIGEN_SPQRSUPPORT_MODULE_H
+#error "Please include Eigen/SPQRSupport instead of including headers inside the src directory directly."
+#endif
diff --git a/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h b/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h
index 0826c4d..f1c29dd 100644
--- a/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h
+++ b/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_SUITESPARSEQRSUPPORT_H
#define EIGEN_SUITESPARSEQRSUPPORT_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
template<typename MatrixType> class SPQR;
diff --git a/Eigen/src/SVD/BDCSVD.h b/Eigen/src/SVD/BDCSVD.h
index 31a766d..86f270d 100644
--- a/Eigen/src/SVD/BDCSVD.h
+++ b/Eigen/src/SVD/BDCSVD.h
@@ -27,6 +27,8 @@
#define eigen_internal_assert(X) assert(X);
#endif
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
#ifdef EIGEN_BDCSVD_DEBUG_VERBOSE
diff --git a/Eigen/src/SVD/InternalHeaderCheck.h b/Eigen/src/SVD/InternalHeaderCheck.h
new file mode 100644
index 0000000..fa67b96
--- /dev/null
+++ b/Eigen/src/SVD/InternalHeaderCheck.h
@@ -0,0 +1,3 @@
+#ifndef EIGEN_SVD_MODULE_H
+#error "Please include Eigen/SVD instead of including headers inside the src directory directly."
+#endif
diff --git a/Eigen/src/SVD/JacobiSVD.h b/Eigen/src/SVD/JacobiSVD.h
index b135fb0..91c95ec 100644
--- a/Eigen/src/SVD/JacobiSVD.h
+++ b/Eigen/src/SVD/JacobiSVD.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_JACOBISVD_H
#define EIGEN_JACOBISVD_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/SVD/JacobiSVD_LAPACKE.h b/Eigen/src/SVD/JacobiSVD_LAPACKE.h
index ff0516f..611ae8c 100644
--- a/Eigen/src/SVD/JacobiSVD_LAPACKE.h
+++ b/Eigen/src/SVD/JacobiSVD_LAPACKE.h
@@ -33,6 +33,8 @@
#ifndef EIGEN_JACOBISVD_LAPACKE_H
#define EIGEN_JACOBISVD_LAPACKE_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \internal Specialization for the data types supported by LAPACKe */
diff --git a/Eigen/src/SVD/SVDBase.h b/Eigen/src/SVD/SVDBase.h
index bc7ab88..7ecaf21 100644
--- a/Eigen/src/SVD/SVDBase.h
+++ b/Eigen/src/SVD/SVDBase.h
@@ -16,6 +16,8 @@
#ifndef EIGEN_SVDBASE_H
#define EIGEN_SVDBASE_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
@@ -52,7 +54,7 @@
* singular vectors. Asking for \em thin \a U or \a V means asking for only their \a m first columns to be formed. So \a U is then a n-by-m matrix,
* and \a V is then a p-by-m matrix. Notice that thin \a U and \a V are all you need for (least squares) solving.
*
- * The status of the computation can be retrived using the \a info() method. Unless \a info() returns \a Success, the results should be not
+ * The status of the computation can be retrieved using the \a info() method. Unless \a info() returns \a Success, the results should be not
* considered well defined.
*
* If the input matrix has inf or nan coefficients, the result of the computation is undefined, and \a info() will return \a InvalidInput, but the computation is guaranteed to
@@ -249,10 +251,7 @@
protected:
- static void check_template_parameters()
- {
- EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar);
- }
+ EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar)
void _check_compute_assertions() const {
eigen_assert(m_isInitialized && "SVD is not initialized.");
@@ -295,9 +294,7 @@
m_computeThinV(false),
m_computationOptions(0),
m_rows(-1), m_cols(-1), m_diagSize(0)
- {
- check_template_parameters();
- }
+ { }
};
diff --git a/Eigen/src/SVD/UpperBidiagonalization.h b/Eigen/src/SVD/UpperBidiagonalization.h
index 48d6385..d4e72e5 100644
--- a/Eigen/src/SVD/UpperBidiagonalization.h
+++ b/Eigen/src/SVD/UpperBidiagonalization.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_BIDIAGONALIZATION_H
#define EIGEN_BIDIAGONALIZATION_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/SparseCholesky/InternalHeaderCheck.h b/Eigen/src/SparseCholesky/InternalHeaderCheck.h
new file mode 100644
index 0000000..f8d8762
--- /dev/null
+++ b/Eigen/src/SparseCholesky/InternalHeaderCheck.h
@@ -0,0 +1,3 @@
+#ifndef EIGEN_SPARSECHOLESKY_MODULE_H
+#error "Please include Eigen/SparseCholesky instead of including headers inside the src directory directly."
+#endif
diff --git a/Eigen/src/SparseCholesky/SimplicialCholesky.h b/Eigen/src/SparseCholesky/SimplicialCholesky.h
index cbd3089..d90ca13 100644
--- a/Eigen/src/SparseCholesky/SimplicialCholesky.h
+++ b/Eigen/src/SparseCholesky/SimplicialCholesky.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_SIMPLICIAL_CHOLESKY_H
#define EIGEN_SIMPLICIAL_CHOLESKY_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
enum SimplicialCholeskyMode {
diff --git a/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h b/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h
index 72e1740..3106c9b 100644
--- a/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h
+++ b/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h
@@ -20,6 +20,8 @@
#ifndef EIGEN_SIMPLICIAL_CHOLESKY_IMPL_H
#define EIGEN_SIMPLICIAL_CHOLESKY_IMPL_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
template<typename Derived>
diff --git a/Eigen/src/SparseCore/AmbiVector.h b/Eigen/src/SparseCore/AmbiVector.h
index 212389b..594e91d 100644
--- a/Eigen/src/SparseCore/AmbiVector.h
+++ b/Eigen/src/SparseCore/AmbiVector.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_AMBIVECTOR_H
#define EIGEN_AMBIVECTOR_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/SparseCore/CompressedStorage.h b/Eigen/src/SparseCore/CompressedStorage.h
index a5202c1..696f29d 100644
--- a/Eigen/src/SparseCore/CompressedStorage.h
+++ b/Eigen/src/SparseCore/CompressedStorage.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_COMPRESSED_STORAGE_H
#define EIGEN_COMPRESSED_STORAGE_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h b/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h
index 9486502..d4aa473 100644
--- a/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h
+++ b/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_CONSERVATIVESPARSESPARSEPRODUCT_H
#define EIGEN_CONSERVATIVESPARSESPARSEPRODUCT_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/SparseCore/InternalHeaderCheck.h b/Eigen/src/SparseCore/InternalHeaderCheck.h
new file mode 100644
index 0000000..9de5936
--- /dev/null
+++ b/Eigen/src/SparseCore/InternalHeaderCheck.h
@@ -0,0 +1,3 @@
+#ifndef EIGEN_SPARSECORE_MODULE_H
+#error "Please include Eigen/SparseCore instead of including headers inside the src directory directly."
+#endif
diff --git a/Eigen/src/SparseCore/MappedSparseMatrix.h b/Eigen/src/SparseCore/MappedSparseMatrix.h
index e980277..efb7b49 100644
--- a/Eigen/src/SparseCore/MappedSparseMatrix.h
+++ b/Eigen/src/SparseCore/MappedSparseMatrix.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_MAPPED_SPARSEMATRIX_H
#define EIGEN_MAPPED_SPARSEMATRIX_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \deprecated Use Map<SparseMatrix<> >
diff --git a/Eigen/src/SparseCore/SparseAssign.h b/Eigen/src/SparseCore/SparseAssign.h
index 905485c..bcd783c 100644
--- a/Eigen/src/SparseCore/SparseAssign.h
+++ b/Eigen/src/SparseCore/SparseAssign.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_SPARSEASSIGN_H
#define EIGEN_SPARSEASSIGN_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
template<typename Derived>
diff --git a/Eigen/src/SparseCore/SparseBlock.h b/Eigen/src/SparseCore/SparseBlock.h
index c7bbb9e..521331c 100644
--- a/Eigen/src/SparseCore/SparseBlock.h
+++ b/Eigen/src/SparseCore/SparseBlock.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_SPARSE_BLOCK_H
#define EIGEN_SPARSE_BLOCK_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
// Subset of columns or rows
@@ -467,7 +469,7 @@
class unary_evaluator<Block<ArgType,BlockRows,BlockCols,InnerPanel>, IteratorBased>::InnerVectorInnerIterator
: public EvalIterator
{
- // NOTE MSVC fails to compile if we don't explicitely "import" IsRowMajor from unary_evaluator
+ // NOTE MSVC fails to compile if we don't explicitly "import" IsRowMajor from unary_evaluator
// because the base class EvalIterator has a private IsRowMajor enum too. (bug #1786)
// NOTE We cannot call it IsRowMajor because it would shadow unary_evaluator::IsRowMajor
enum { XprIsRowMajor = unary_evaluator::IsRowMajor };
diff --git a/Eigen/src/SparseCore/SparseColEtree.h b/Eigen/src/SparseCore/SparseColEtree.h
index ebe02d1..ff32458 100644
--- a/Eigen/src/SparseCore/SparseColEtree.h
+++ b/Eigen/src/SparseCore/SparseColEtree.h
@@ -31,6 +31,8 @@
#ifndef SPARSE_COLETREE_H
#define SPARSE_COLETREE_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/SparseCore/SparseCompressedBase.h b/Eigen/src/SparseCore/SparseCompressedBase.h
index 6a2c7a8c..b3c716d 100644
--- a/Eigen/src/SparseCore/SparseCompressedBase.h
+++ b/Eigen/src/SparseCore/SparseCompressedBase.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_SPARSE_COMPRESSED_BASE_H
#define EIGEN_SPARSE_COMPRESSED_BASE_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
template<typename Derived> class SparseCompressedBase;
diff --git a/Eigen/src/SparseCore/SparseCwiseBinaryOp.h b/Eigen/src/SparseCore/SparseCwiseBinaryOp.h
index 9b0d3f9..17cdb8e 100644
--- a/Eigen/src/SparseCore/SparseCwiseBinaryOp.h
+++ b/Eigen/src/SparseCore/SparseCwiseBinaryOp.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_SPARSE_CWISE_BINARY_OP_H
#define EIGEN_SPARSE_CWISE_BINARY_OP_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
// Here we have to handle 3 cases:
@@ -40,14 +42,11 @@
typedef CwiseBinaryOp<BinaryOp, Lhs, Rhs> Derived;
typedef SparseMatrixBase<Derived> Base;
EIGEN_SPARSE_PUBLIC_INTERFACE(Derived)
- CwiseBinaryOpImpl()
- {
- EIGEN_STATIC_ASSERT((
- (!internal::is_same<typename internal::traits<Lhs>::StorageKind,
- typename internal::traits<Rhs>::StorageKind>::value)
- || ((internal::evaluator<Lhs>::Flags&RowMajorBit) == (internal::evaluator<Rhs>::Flags&RowMajorBit))),
- THE_STORAGE_ORDER_OF_BOTH_SIDES_MUST_MATCH);
- }
+ EIGEN_STATIC_ASSERT((
+ (!internal::is_same<typename internal::traits<Lhs>::StorageKind,
+ typename internal::traits<Rhs>::StorageKind>::value)
+ || ((internal::evaluator<Lhs>::Flags&RowMajorBit) == (internal::evaluator<Rhs>::Flags&RowMajorBit))),
+ THE_STORAGE_ORDER_OF_BOTH_SIDES_MUST_MATCH)
};
namespace internal {
diff --git a/Eigen/src/SparseCore/SparseCwiseUnaryOp.h b/Eigen/src/SparseCore/SparseCwiseUnaryOp.h
index 32dac0f..6f48fa7 100644
--- a/Eigen/src/SparseCore/SparseCwiseUnaryOp.h
+++ b/Eigen/src/SparseCore/SparseCwiseUnaryOp.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_SPARSE_CWISE_UNARY_OP_H
#define EIGEN_SPARSE_CWISE_UNARY_OP_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/SparseCore/SparseDenseProduct.h b/Eigen/src/SparseCore/SparseDenseProduct.h
index 722e928..878a759 100644
--- a/Eigen/src/SparseCore/SparseDenseProduct.h
+++ b/Eigen/src/SparseCore/SparseDenseProduct.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_SPARSEDENSEPRODUCT_H
#define EIGEN_SPARSEDENSEPRODUCT_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/SparseCore/SparseDiagonalProduct.h b/Eigen/src/SparseCore/SparseDiagonalProduct.h
index 941c03b..4dc9502 100644
--- a/Eigen/src/SparseCore/SparseDiagonalProduct.h
+++ b/Eigen/src/SparseCore/SparseDiagonalProduct.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_SPARSE_DIAGONAL_PRODUCT_H
#define EIGEN_SPARSE_DIAGONAL_PRODUCT_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
// The product of a diagonal matrix with a sparse matrix can be easily
diff --git a/Eigen/src/SparseCore/SparseDot.h b/Eigen/src/SparseCore/SparseDot.h
index 38bc4aa..a45ecfa 100644
--- a/Eigen/src/SparseCore/SparseDot.h
+++ b/Eigen/src/SparseCore/SparseDot.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_SPARSE_DOT_H
#define EIGEN_SPARSE_DOT_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
template<typename Derived>
diff --git a/Eigen/src/SparseCore/SparseFuzzy.h b/Eigen/src/SparseCore/SparseFuzzy.h
index 7d47eb9..4b3911b 100644
--- a/Eigen/src/SparseCore/SparseFuzzy.h
+++ b/Eigen/src/SparseCore/SparseFuzzy.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_SPARSE_FUZZY_H
#define EIGEN_SPARSE_FUZZY_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
template<typename Derived>
diff --git a/Eigen/src/SparseCore/SparseMap.h b/Eigen/src/SparseCore/SparseMap.h
index f99be33..a73bd8d 100644
--- a/Eigen/src/SparseCore/SparseMap.h
+++ b/Eigen/src/SparseCore/SparseMap.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_SPARSE_MAP_H
#define EIGEN_SPARSE_MAP_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/SparseCore/SparseMatrix.h b/Eigen/src/SparseCore/SparseMatrix.h
index 75589e2..4bf47bb 100644
--- a/Eigen/src/SparseCore/SparseMatrix.h
+++ b/Eigen/src/SparseCore/SparseMatrix.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_SPARSEMATRIX_H
#define EIGEN_SPARSEMATRIX_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \ingroup SparseCore_Module
@@ -665,7 +667,6 @@
inline SparseMatrix()
: m_outerSize(-1), m_innerSize(0), m_outerIndex(0), m_innerNonZeros(0)
{
- check_template_parameters();
resize(0, 0);
}
@@ -673,7 +674,6 @@
inline SparseMatrix(Index rows, Index cols)
: m_outerSize(0), m_innerSize(0), m_outerIndex(0), m_innerNonZeros(0)
{
- check_template_parameters();
resize(rows, cols);
}
@@ -684,7 +684,6 @@
{
EIGEN_STATIC_ASSERT((internal::is_same<Scalar, typename OtherDerived::Scalar>::value),
YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY)
- check_template_parameters();
const bool needToTranspose = (Flags & RowMajorBit) != (internal::evaluator<OtherDerived>::Flags & RowMajorBit);
if (needToTranspose)
*this = other.derived();
@@ -696,13 +695,12 @@
internal::call_assignment_no_alias(*this, other.derived());
}
}
-
+
/** Constructs a sparse matrix from the sparse selfadjoint view \a other */
template<typename OtherDerived, unsigned int UpLo>
inline SparseMatrix(const SparseSelfAdjointView<OtherDerived, UpLo>& other)
: m_outerSize(0), m_innerSize(0), m_outerIndex(0), m_innerNonZeros(0)
{
- check_template_parameters();
Base::operator=(other);
}
@@ -710,7 +708,6 @@
inline SparseMatrix(const SparseMatrix& other)
: Base(), m_outerSize(0), m_innerSize(0), m_outerIndex(0), m_innerNonZeros(0)
{
- check_template_parameters();
*this = other.derived();
}
@@ -719,17 +716,15 @@
SparseMatrix(const ReturnByValue<OtherDerived>& other)
: Base(), m_outerSize(0), m_innerSize(0), m_outerIndex(0), m_innerNonZeros(0)
{
- check_template_parameters();
initAssignment(other);
other.evalTo(*this);
}
-
+
/** \brief Copy constructor with in-place evaluation */
template<typename OtherDerived>
explicit SparseMatrix(const DiagonalBase<OtherDerived>& other)
: Base(), m_outerSize(0), m_innerSize(0), m_outerIndex(0), m_innerNonZeros(0)
{
- check_template_parameters();
*this = other.derived();
}
@@ -1013,11 +1008,8 @@
}
private:
- static void check_template_parameters()
- {
- EIGEN_STATIC_ASSERT(NumTraits<StorageIndex>::IsSigned,THE_INDEX_TYPE_MUST_BE_A_SIGNED_TYPE);
- EIGEN_STATIC_ASSERT((Options&(ColMajor|RowMajor))==Options,INVALID_MATRIX_TEMPLATE_PARAMETERS);
- }
+ EIGEN_STATIC_ASSERT(NumTraits<StorageIndex>::IsSigned,THE_INDEX_TYPE_MUST_BE_A_SIGNED_TYPE)
+ EIGEN_STATIC_ASSERT((Options&(ColMajor|RowMajor))==Options,INVALID_MATRIX_TEMPLATE_PARAMETERS)
struct default_prunning_func {
default_prunning_func(const Scalar& ref, const RealScalar& eps) : reference(ref), epsilon(eps) {}
diff --git a/Eigen/src/SparseCore/SparseMatrixBase.h b/Eigen/src/SparseCore/SparseMatrixBase.h
index 229449f..ee5eafc 100644
--- a/Eigen/src/SparseCore/SparseMatrixBase.h
+++ b/Eigen/src/SparseCore/SparseMatrixBase.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_SPARSEMATRIXBASE_H
#define EIGEN_SPARSEMATRIXBASE_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \ingroup SparseCore_Module
diff --git a/Eigen/src/SparseCore/SparsePermutation.h b/Eigen/src/SparseCore/SparsePermutation.h
index ef38357..7549434 100644
--- a/Eigen/src/SparseCore/SparsePermutation.h
+++ b/Eigen/src/SparseCore/SparsePermutation.h
@@ -12,6 +12,8 @@
// This file implements sparse * permutation products
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/SparseCore/SparseProduct.h b/Eigen/src/SparseCore/SparseProduct.h
index 78654d1..de11529 100644
--- a/Eigen/src/SparseCore/SparseProduct.h
+++ b/Eigen/src/SparseCore/SparseProduct.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_SPARSEPRODUCT_H
#define EIGEN_SPARSEPRODUCT_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \returns an expression of the product of two sparse matrices.
diff --git a/Eigen/src/SparseCore/SparseRedux.h b/Eigen/src/SparseCore/SparseRedux.h
index 0748d3b..6b14c58 100644
--- a/Eigen/src/SparseCore/SparseRedux.h
+++ b/Eigen/src/SparseCore/SparseRedux.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_SPARSEREDUX_H
#define EIGEN_SPARSEREDUX_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
template<typename Derived>
diff --git a/Eigen/src/SparseCore/SparseRef.h b/Eigen/src/SparseCore/SparseRef.h
index f6e18aa..166b17e 100644
--- a/Eigen/src/SparseCore/SparseRef.h
+++ b/Eigen/src/SparseCore/SparseRef.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_SPARSE_REF_H
#define EIGEN_SPARSE_REF_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
enum {
diff --git a/Eigen/src/SparseCore/SparseSelfAdjointView.h b/Eigen/src/SparseCore/SparseSelfAdjointView.h
index efad570..0302ef3 100644
--- a/Eigen/src/SparseCore/SparseSelfAdjointView.h
+++ b/Eigen/src/SparseCore/SparseSelfAdjointView.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_SPARSE_SELFADJOINTVIEW_H
#define EIGEN_SPARSE_SELFADJOINTVIEW_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \ingroup SparseCore_Module
diff --git a/Eigen/src/SparseCore/SparseSolverBase.h b/Eigen/src/SparseCore/SparseSolverBase.h
index b4c9a42..ea98373 100644
--- a/Eigen/src/SparseCore/SparseSolverBase.h
+++ b/Eigen/src/SparseCore/SparseSolverBase.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_SPARSESOLVERBASE_H
#define EIGEN_SPARSESOLVERBASE_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/SparseCore/SparseSparseProductWithPruning.h b/Eigen/src/SparseCore/SparseSparseProductWithPruning.h
index 88820a4..efa0a9c 100644
--- a/Eigen/src/SparseCore/SparseSparseProductWithPruning.h
+++ b/Eigen/src/SparseCore/SparseSparseProductWithPruning.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_SPARSESPARSEPRODUCTWITHPRUNING_H
#define EIGEN_SPARSESPARSEPRODUCTWITHPRUNING_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/SparseCore/SparseTranspose.h b/Eigen/src/SparseCore/SparseTranspose.h
index 3757d4c..cce5903 100644
--- a/Eigen/src/SparseCore/SparseTranspose.h
+++ b/Eigen/src/SparseCore/SparseTranspose.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_SPARSETRANSPOSE_H
#define EIGEN_SPARSETRANSPOSE_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/SparseCore/SparseTriangularView.h b/Eigen/src/SparseCore/SparseTriangularView.h
index 9ac1202..76ff97a 100644
--- a/Eigen/src/SparseCore/SparseTriangularView.h
+++ b/Eigen/src/SparseCore/SparseTriangularView.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_SPARSE_TRIANGULARVIEW_H
#define EIGEN_SPARSE_TRIANGULARVIEW_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \ingroup SparseCore_Module
diff --git a/Eigen/src/SparseCore/SparseUtil.h b/Eigen/src/SparseCore/SparseUtil.h
index 9ead5ae..3127c7e 100644
--- a/Eigen/src/SparseCore/SparseUtil.h
+++ b/Eigen/src/SparseCore/SparseUtil.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_SPARSEUTIL_H
#define EIGEN_SPARSEUTIL_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
#ifdef NDEBUG
diff --git a/Eigen/src/SparseCore/SparseVector.h b/Eigen/src/SparseCore/SparseVector.h
index c9d0127..5706948 100644
--- a/Eigen/src/SparseCore/SparseVector.h
+++ b/Eigen/src/SparseCore/SparseVector.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_SPARSEVECTOR_H
#define EIGEN_SPARSEVECTOR_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/** \ingroup SparseCore_Module
@@ -256,11 +258,11 @@
void resizeNonZeros(Index size) { m_data.resize(size); }
- inline SparseVector() : m_size(0) { check_template_parameters(); resize(0); }
+ inline SparseVector() : m_size(0) { resize(0); }
- explicit inline SparseVector(Index size) : m_size(0) { check_template_parameters(); resize(size); }
+ explicit inline SparseVector(Index size) : m_size(0) { resize(size); }
- inline SparseVector(Index rows, Index cols) : m_size(0) { check_template_parameters(); resize(rows,cols); }
+ inline SparseVector(Index rows, Index cols) : m_size(0) { resize(rows,cols); }
template<typename OtherDerived>
inline SparseVector(const SparseMatrixBase<OtherDerived>& other)
@@ -269,14 +271,12 @@
#ifdef EIGEN_SPARSE_CREATE_TEMPORARY_PLUGIN
EIGEN_SPARSE_CREATE_TEMPORARY_PLUGIN
#endif
- check_template_parameters();
*this = other.derived();
}
inline SparseVector(const SparseVector& other)
: Base(other), m_size(0)
{
- check_template_parameters();
*this = other.derived();
}
@@ -393,13 +393,9 @@
# endif
protected:
-
- static void check_template_parameters()
- {
- EIGEN_STATIC_ASSERT(NumTraits<StorageIndex>::IsSigned,THE_INDEX_TYPE_MUST_BE_A_SIGNED_TYPE);
- EIGEN_STATIC_ASSERT((Options_&(ColMajor|RowMajor))==Options,INVALID_MATRIX_TEMPLATE_PARAMETERS);
- }
-
+ EIGEN_STATIC_ASSERT(NumTraits<StorageIndex>::IsSigned,THE_INDEX_TYPE_MUST_BE_A_SIGNED_TYPE)
+ EIGEN_STATIC_ASSERT((Options_&(ColMajor|RowMajor))==Options,INVALID_MATRIX_TEMPLATE_PARAMETERS)
+
Storage m_data;
Index m_size;
};
diff --git a/Eigen/src/SparseCore/SparseView.h b/Eigen/src/SparseCore/SparseView.h
index 92b3d1f..0b9d70a 100644
--- a/Eigen/src/SparseCore/SparseView.h
+++ b/Eigen/src/SparseCore/SparseView.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_SPARSEVIEW_H
#define EIGEN_SPARSEVIEW_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/SparseCore/TriangularSolver.h b/Eigen/src/SparseCore/TriangularSolver.h
index f9c56ba..76c32f2 100644
--- a/Eigen/src/SparseCore/TriangularSolver.h
+++ b/Eigen/src/SparseCore/TriangularSolver.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_SPARSETRIANGULARSOLVER_H
#define EIGEN_SPARSETRIANGULARSOLVER_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/SparseLU/InternalHeaderCheck.h b/Eigen/src/SparseLU/InternalHeaderCheck.h
new file mode 100644
index 0000000..78ebfcc
--- /dev/null
+++ b/Eigen/src/SparseLU/InternalHeaderCheck.h
@@ -0,0 +1,3 @@
+#ifndef EIGEN_SPARSELU_MODULE_H
+#error "Please include Eigen/SparseLU instead of including headers inside the src directory directly."
+#endif
diff --git a/Eigen/src/SparseLU/SparseLU.h b/Eigen/src/SparseLU/SparseLU.h
index 9814565..cdc2b73 100644
--- a/Eigen/src/SparseLU/SparseLU.h
+++ b/Eigen/src/SparseLU/SparseLU.h
@@ -12,6 +12,8 @@
#ifndef EIGEN_SPARSE_LU_H
#define EIGEN_SPARSE_LU_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
template <typename MatrixType_, typename OrderingType_ = COLAMDOrdering<typename MatrixType_::StorageIndex> > class SparseLU;
diff --git a/Eigen/src/SparseLU/SparseLUImpl.h b/Eigen/src/SparseLU/SparseLUImpl.h
index fc0cfc4..daec837 100644
--- a/Eigen/src/SparseLU/SparseLUImpl.h
+++ b/Eigen/src/SparseLU/SparseLUImpl.h
@@ -9,6 +9,8 @@
#ifndef SPARSELU_IMPL_H
#define SPARSELU_IMPL_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/SparseLU/SparseLU_Memory.h b/Eigen/src/SparseLU/SparseLU_Memory.h
index 349bfd5..798745f 100644
--- a/Eigen/src/SparseLU/SparseLU_Memory.h
+++ b/Eigen/src/SparseLU/SparseLU_Memory.h
@@ -31,6 +31,8 @@
#ifndef EIGEN_SPARSELU_MEMORY
#define EIGEN_SPARSELU_MEMORY
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/SparseLU/SparseLU_Structs.h b/Eigen/src/SparseLU/SparseLU_Structs.h
index cf5ec44..74c6561 100644
--- a/Eigen/src/SparseLU/SparseLU_Structs.h
+++ b/Eigen/src/SparseLU/SparseLU_Structs.h
@@ -68,6 +68,8 @@
#ifndef EIGEN_LU_STRUCTS
#define EIGEN_LU_STRUCTS
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h b/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h
index 7eda565..0d59a38 100644
--- a/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h
+++ b/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_SPARSELU_SUPERNODAL_MATRIX_H
#define EIGEN_SPARSELU_SUPERNODAL_MATRIX_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/SparseLU/SparseLU_Utils.h b/Eigen/src/SparseLU/SparseLU_Utils.h
index 9e3dab4..e399fed 100644
--- a/Eigen/src/SparseLU/SparseLU_Utils.h
+++ b/Eigen/src/SparseLU/SparseLU_Utils.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_SPARSELU_UTILS_H
#define EIGEN_SPARSELU_UTILS_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/SparseLU/SparseLU_column_bmod.h b/Eigen/src/SparseLU/SparseLU_column_bmod.h
index b57f068..d5c29b3 100644
--- a/Eigen/src/SparseLU/SparseLU_column_bmod.h
+++ b/Eigen/src/SparseLU/SparseLU_column_bmod.h
@@ -31,6 +31,8 @@
#ifndef SPARSELU_COLUMN_BMOD_H
#define SPARSELU_COLUMN_BMOD_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/SparseLU/SparseLU_column_dfs.h b/Eigen/src/SparseLU/SparseLU_column_dfs.h
index 5a2c941..be4cfd1 100644
--- a/Eigen/src/SparseLU/SparseLU_column_dfs.h
+++ b/Eigen/src/SparseLU/SparseLU_column_dfs.h
@@ -31,6 +31,8 @@
#define SPARSELU_COLUMN_DFS_H
template <typename Scalar, typename StorageIndex> class SparseLUImpl;
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h b/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h
index c32d8d8..e06b2a0 100644
--- a/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h
+++ b/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h
@@ -29,6 +29,8 @@
#ifndef SPARSELU_COPY_TO_UCOL_H
#define SPARSELU_COPY_TO_UCOL_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/SparseLU/SparseLU_gemm_kernel.h b/Eigen/src/SparseLU/SparseLU_gemm_kernel.h
index e37c2fe..034d379 100644
--- a/Eigen/src/SparseLU/SparseLU_gemm_kernel.h
+++ b/Eigen/src/SparseLU/SparseLU_gemm_kernel.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_SPARSELU_GEMM_KERNEL_H
#define EIGEN_SPARSELU_GEMM_KERNEL_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h b/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h
index 6f75d50..7bed85d 100644
--- a/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h
+++ b/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h
@@ -28,6 +28,8 @@
#ifndef SPARSELU_HEAP_RELAX_SNODE_H
#define SPARSELU_HEAP_RELAX_SNODE_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/SparseLU/SparseLU_kernel_bmod.h b/Eigen/src/SparseLU/SparseLU_kernel_bmod.h
index 8c1b3e8..424f93c 100644
--- a/Eigen/src/SparseLU/SparseLU_kernel_bmod.h
+++ b/Eigen/src/SparseLU/SparseLU_kernel_bmod.h
@@ -11,6 +11,8 @@
#ifndef SPARSELU_KERNEL_BMOD_H
#define SPARSELU_KERNEL_BMOD_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/SparseLU/SparseLU_panel_bmod.h b/Eigen/src/SparseLU/SparseLU_panel_bmod.h
index f052001..8cd331a 100644
--- a/Eigen/src/SparseLU/SparseLU_panel_bmod.h
+++ b/Eigen/src/SparseLU/SparseLU_panel_bmod.h
@@ -31,6 +31,8 @@
#ifndef SPARSELU_PANEL_BMOD_H
#define SPARSELU_PANEL_BMOD_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/SparseLU/SparseLU_panel_dfs.h b/Eigen/src/SparseLU/SparseLU_panel_dfs.h
index 155df73..c3ff013 100644
--- a/Eigen/src/SparseLU/SparseLU_panel_dfs.h
+++ b/Eigen/src/SparseLU/SparseLU_panel_dfs.h
@@ -30,6 +30,8 @@
#ifndef SPARSELU_PANEL_DFS_H
#define SPARSELU_PANEL_DFS_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/SparseLU/SparseLU_pivotL.h b/Eigen/src/SparseLU/SparseLU_pivotL.h
index a86dac9..6daed91 100644
--- a/Eigen/src/SparseLU/SparseLU_pivotL.h
+++ b/Eigen/src/SparseLU/SparseLU_pivotL.h
@@ -30,6 +30,8 @@
#ifndef SPARSELU_PIVOTL_H
#define SPARSELU_PIVOTL_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/SparseLU/SparseLU_pruneL.h b/Eigen/src/SparseLU/SparseLU_pruneL.h
index ad32fed..e5da73b 100644
--- a/Eigen/src/SparseLU/SparseLU_pruneL.h
+++ b/Eigen/src/SparseLU/SparseLU_pruneL.h
@@ -30,6 +30,8 @@
#ifndef SPARSELU_PRUNEL_H
#define SPARSELU_PRUNEL_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/SparseLU/SparseLU_relax_snode.h b/Eigen/src/SparseLU/SparseLU_relax_snode.h
index c408d01..ed79532 100644
--- a/Eigen/src/SparseLU/SparseLU_relax_snode.h
+++ b/Eigen/src/SparseLU/SparseLU_relax_snode.h
@@ -28,6 +28,8 @@
#ifndef SPARSELU_RELAX_SNODE_H
#define SPARSELU_RELAX_SNODE_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/SparseQR/InternalHeaderCheck.h b/Eigen/src/SparseQR/InternalHeaderCheck.h
new file mode 100644
index 0000000..0564e93
--- /dev/null
+++ b/Eigen/src/SparseQR/InternalHeaderCheck.h
@@ -0,0 +1,3 @@
+#ifndef EIGEN_SPARSEQR_MODULE_H
+#error "Please include Eigen/SparseQR instead of including headers inside the src directory directly."
+#endif
diff --git a/Eigen/src/SparseQR/SparseQR.h b/Eigen/src/SparseQR/SparseQR.h
index a19eacc..d3a904d 100644
--- a/Eigen/src/SparseQR/SparseQR.h
+++ b/Eigen/src/SparseQR/SparseQR.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_SPARSE_QR_H
#define EIGEN_SPARSE_QR_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
template<typename MatrixType, typename OrderingType> class SparseQR;
diff --git a/Eigen/src/StlSupport/StdDeque.h b/Eigen/src/StlSupport/StdDeque.h
index 6d47e75..cd79a15 100644
--- a/Eigen/src/StlSupport/StdDeque.h
+++ b/Eigen/src/StlSupport/StdDeque.h
@@ -11,6 +11,10 @@
#ifndef EIGEN_STDDEQUE_H
#define EIGEN_STDDEQUE_H
+#ifndef EIGEN_STDDEQUE_MODULE_H
+#error "Please include Eigen/StdDeque instead of including this file directly."
+#endif
+
#include "details.h"
/**
diff --git a/Eigen/src/StlSupport/StdList.h b/Eigen/src/StlSupport/StdList.h
index 8ba3fad..6070e95 100644
--- a/Eigen/src/StlSupport/StdList.h
+++ b/Eigen/src/StlSupport/StdList.h
@@ -10,6 +10,10 @@
#ifndef EIGEN_STDLIST_H
#define EIGEN_STDLIST_H
+#ifndef EIGEN_STDLIST_MODULE_H
+#error "Please include Eigen/StdList instead of including this file directly."
+#endif
+
#include "details.h"
/**
diff --git a/Eigen/src/StlSupport/StdVector.h b/Eigen/src/StlSupport/StdVector.h
index 9fcf19b..93cc4a0 100644
--- a/Eigen/src/StlSupport/StdVector.h
+++ b/Eigen/src/StlSupport/StdVector.h
@@ -11,6 +11,10 @@
#ifndef EIGEN_STDVECTOR_H
#define EIGEN_STDVECTOR_H
+#ifndef EIGEN_STDVECTOR_MODULE_H
+#error "Please include Eigen/StdVector instead of including this file directly."
+#endif
+
#include "details.h"
/**
diff --git a/Eigen/src/SuperLUSupport/InternalHeaderCheck.h b/Eigen/src/SuperLUSupport/InternalHeaderCheck.h
new file mode 100644
index 0000000..94a62b5
--- /dev/null
+++ b/Eigen/src/SuperLUSupport/InternalHeaderCheck.h
@@ -0,0 +1,3 @@
+#ifndef EIGEN_SUPERLUSUPPORT_MODULE_H
+#error "Please include Eigen/SuperLUSupport instead of including headers inside the src directory directly."
+#endif
diff --git a/Eigen/src/SuperLUSupport/SuperLUSupport.h b/Eigen/src/SuperLUSupport/SuperLUSupport.h
index 825988d..f9a9a43 100644
--- a/Eigen/src/SuperLUSupport/SuperLUSupport.h
+++ b/Eigen/src/SuperLUSupport/SuperLUSupport.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_SUPERLUSUPPORT_H
#define EIGEN_SUPERLUSUPPORT_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
#if defined(SUPERLU_MAJOR_VERSION) && (SUPERLU_MAJOR_VERSION >= 5)
diff --git a/Eigen/src/UmfPackSupport/InternalHeaderCheck.h b/Eigen/src/UmfPackSupport/InternalHeaderCheck.h
new file mode 100644
index 0000000..64112f1
--- /dev/null
+++ b/Eigen/src/UmfPackSupport/InternalHeaderCheck.h
@@ -0,0 +1,3 @@
+#ifndef EIGEN_UMFPACKSUPPORT_MODULE_H
+#error "Please include Eigen/UmfPackSupport instead of including headers inside the src directory directly."
+#endif
diff --git a/Eigen/src/UmfPackSupport/UmfPackSupport.h b/Eigen/src/UmfPackSupport/UmfPackSupport.h
index 07d1f8b..10a8ae2 100644
--- a/Eigen/src/UmfPackSupport/UmfPackSupport.h
+++ b/Eigen/src/UmfPackSupport/UmfPackSupport.h
@@ -20,6 +20,8 @@
#endif
#endif
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
/* TODO extract L, extract U, compute det, etc... */
diff --git a/Eigen/src/misc/Image.h b/Eigen/src/misc/Image.h
index e99f2d5..b500036 100644
--- a/Eigen/src/misc/Image.h
+++ b/Eigen/src/misc/Image.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_MISC_IMAGE_H
#define EIGEN_MISC_IMAGE_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/misc/InternalHeaderCheck.h b/Eigen/src/misc/InternalHeaderCheck.h
new file mode 100644
index 0000000..1cea572
--- /dev/null
+++ b/Eigen/src/misc/InternalHeaderCheck.h
@@ -0,0 +1,3 @@
+#ifndef EIGEN_CORE_MODULE_H
+#error "Please include Eigen/Core instead of including headers inside the src directory directly."
+#endif
diff --git a/Eigen/src/misc/Kernel.h b/Eigen/src/misc/Kernel.h
index 377a8ce..7abfbb7 100644
--- a/Eigen/src/misc/Kernel.h
+++ b/Eigen/src/misc/Kernel.h
@@ -10,6 +10,8 @@
#ifndef EIGEN_MISC_KERNEL_H
#define EIGEN_MISC_KERNEL_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/misc/RealSvd2x2.h b/Eigen/src/misc/RealSvd2x2.h
index abb4d3c..5dd75f3 100644
--- a/Eigen/src/misc/RealSvd2x2.h
+++ b/Eigen/src/misc/RealSvd2x2.h
@@ -11,6 +11,8 @@
#ifndef EIGEN_REALSVD2X2_H
#define EIGEN_REALSVD2X2_H
+#include "./InternalHeaderCheck.h"
+
namespace Eigen {
namespace internal {
diff --git a/Eigen/src/plugins/CommonCwiseBinaryOps.h b/Eigen/src/plugins/CommonCwiseBinaryOps.h
index 8b6730e..2f50329 100644
--- a/Eigen/src/plugins/CommonCwiseBinaryOps.h
+++ b/Eigen/src/plugins/CommonCwiseBinaryOps.h
@@ -12,7 +12,7 @@
/** \returns an expression of the difference of \c *this and \a other
*
- * \note If you want to substract a given scalar from all coefficients, see Cwise::operator-().
+ * \note If you want to subtract a given scalar from all coefficients, see Cwise::operator-().
*
* \sa class CwiseBinaryOp, operator-=()
*/
diff --git a/Eigen/src/plugins/IndexedViewMethods.h b/Eigen/src/plugins/IndexedViewMethods.h
index 5bfb19a..463602a 100644
--- a/Eigen/src/plugins/IndexedViewMethods.h
+++ b/Eigen/src/plugins/IndexedViewMethods.h
@@ -218,7 +218,7 @@
*
* Each parameter must either be:
* - An integer indexing a single row or column
- * - Eigen::all indexing the full set of respective rows or columns in increasing order
+ * - Eigen::placeholders::all indexing the full set of respective rows or columns in increasing order
* - An ArithmeticSequence as returned by the Eigen::seq and Eigen::seqN functions
* - Any %Eigen's vector/array of integers or expressions
* - Plain C arrays: \c int[N]
@@ -235,7 +235,7 @@
* method will returns a Block object after extraction of the relevant information from the passed arguments. This is the case
* when all arguments are either:
* - An integer
- * - Eigen::all
+ * - Eigen::placeholders::all
* - An ArithmeticSequence with compile-time increment strictly equal to 1, as returned by Eigen::seq(a,b), and Eigen::seqN(a,N).
*
* Otherwise a more general IndexedView<Derived,RowIndices',ColIndices'> object will be returned, after conversion of the inputs
diff --git a/Eigen/src/plugins/InternalHeaderCheck.h b/Eigen/src/plugins/InternalHeaderCheck.h
new file mode 100644
index 0000000..ac6821d
--- /dev/null
+++ b/Eigen/src/plugins/InternalHeaderCheck.h
@@ -0,0 +1,3 @@
+#ifndef EIGEN_CORE_MODULE_H
+#error "Please include Eigen/plugins instead of including headers inside the src directory directly."
+#endif