Merge with upstream eigen/default

This commit is contained in:
Eugene Zhulenev 2018-09-11 13:33:06 -07:00
commit 55bb7e7935
52 changed files with 317 additions and 217 deletions

View File

@ -538,6 +538,7 @@ if (NOT CMAKE_VERSION VERSION_LESS 3.0)
# Imported target support # Imported target support
add_library (eigen INTERFACE) add_library (eigen INTERFACE)
add_library (Eigen3::Eigen ALIAS eigen)
target_compile_definitions (eigen INTERFACE ${EIGEN_DEFINITIONS}) target_compile_definitions (eigen INTERFACE ${EIGEN_DEFINITIONS})
target_include_directories (eigen INTERFACE target_include_directories (eigen INTERFACE

View File

@ -10,14 +10,14 @@
#include "Core" #include "Core"
#include "src/Core/util/DisableStupidWarnings.h"
#include "Cholesky" #include "Cholesky"
#include "Jacobi" #include "Jacobi"
#include "Householder" #include "Householder"
#include "LU" #include "LU"
#include "Geometry" #include "Geometry"
#include "src/Core/util/DisableStupidWarnings.h"
/** \defgroup Eigenvalues_Module Eigenvalues module /** \defgroup Eigenvalues_Module Eigenvalues module
* *
* *

View File

@ -10,12 +10,12 @@
#include "Core" #include "Core"
#include "src/Core/util/DisableStupidWarnings.h"
#include "SVD" #include "SVD"
#include "LU" #include "LU"
#include <limits> #include <limits>
#include "src/Core/util/DisableStupidWarnings.h"
/** \defgroup Geometry_Module Geometry module /** \defgroup Geometry_Module Geometry module
* *
* This module provides support for: * This module provides support for:

View File

@ -10,12 +10,12 @@
#include "Core" #include "Core"
#include "src/Core/util/DisableStupidWarnings.h"
#include "Cholesky" #include "Cholesky"
#include "Jacobi" #include "Jacobi"
#include "Householder" #include "Householder"
#include "src/Core/util/DisableStupidWarnings.h"
/** \defgroup QR_Module QR module /** \defgroup QR_Module QR module
* *
* *

View File

@ -23,6 +23,8 @@
// Ordering interface // Ordering interface
#include "OrderingMethods" #include "OrderingMethods"
#include "src/Core/util/DisableStupidWarnings.h"
#include "src/SparseLU/SparseLU_gemm_kernel.h" #include "src/SparseLU/SparseLU_gemm_kernel.h"
#include "src/SparseLU/SparseLU_Structs.h" #include "src/SparseLU/SparseLU_Structs.h"
@ -43,4 +45,6 @@
#include "src/SparseLU/SparseLU_Utils.h" #include "src/SparseLU/SparseLU_Utils.h"
#include "src/SparseLU/SparseLU.h" #include "src/SparseLU/SparseLU.h"
#include "src/Core/util/ReenableStupidWarnings.h"
#endif // EIGEN_SPARSELU_MODULE_H #endif // EIGEN_SPARSELU_MODULE_H

View File

@ -28,7 +28,6 @@
* *
*/ */
#include "OrderingMethods"
#include "src/SparseCore/SparseColEtree.h" #include "src/SparseCore/SparseColEtree.h"
#include "src/SparseQR/SparseQR.h" #include "src/SparseQR/SparseQR.h"

View File

@ -100,7 +100,7 @@ template<typename _MatrixType, int _UpLo> class LLT
compute(matrix.derived()); compute(matrix.derived());
} }
/** \brief Constructs a LDLT factorization from a given matrix /** \brief Constructs a LLT factorization from a given matrix
* *
* This overloaded constructor is provided for \link InplaceDecomposition inplace decomposition \endlink when * This overloaded constructor is provided for \link InplaceDecomposition inplace decomposition \endlink when
* \c MatrixType is a Eigen::Ref. * \c MatrixType is a Eigen::Ref.
@ -200,7 +200,7 @@ template<typename _MatrixType, int _UpLo> class LLT
inline Index cols() const { return m_matrix.cols(); } inline Index cols() const { return m_matrix.cols(); }
template<typename VectorType> template<typename VectorType>
LLT rankUpdate(const VectorType& vec, const RealScalar& sigma = 1); LLT & rankUpdate(const VectorType& vec, const RealScalar& sigma = 1);
#ifndef EIGEN_PARSED_BY_DOXYGEN #ifndef EIGEN_PARSED_BY_DOXYGEN
template<typename RhsType, typename DstType> template<typename RhsType, typename DstType>
@ -458,7 +458,7 @@ LLT<MatrixType,_UpLo>& LLT<MatrixType,_UpLo>::compute(const EigenBase<InputType>
*/ */
template<typename _MatrixType, int _UpLo> template<typename _MatrixType, int _UpLo>
template<typename VectorType> template<typename VectorType>
LLT<_MatrixType,_UpLo> LLT<_MatrixType,_UpLo>::rankUpdate(const VectorType& v, const RealScalar& sigma) LLT<_MatrixType,_UpLo> & LLT<_MatrixType,_UpLo>::rankUpdate(const VectorType& v, const RealScalar& sigma)
{ {
EIGEN_STATIC_ASSERT_VECTOR_ONLY(VectorType); EIGEN_STATIC_ASSERT_VECTOR_ONLY(VectorType);
eigen_assert(v.size()==m_matrix.cols()); eigen_assert(v.size()==m_matrix.cols());

View File

@ -684,20 +684,27 @@ struct random_default_impl<Scalar, false, true>
{ {
static inline Scalar run(const Scalar& x, const Scalar& y) static inline Scalar run(const Scalar& x, const Scalar& y)
{ {
typedef typename conditional<NumTraits<Scalar>::IsSigned,std::ptrdiff_t,std::size_t>::type ScalarX; if (y <= x)
if(y<x)
return x; return x;
// the following difference might overflow on a 32 bits system, // ScalarU is the unsigned counterpart of Scalar, possibly Scalar itself.
// but since y>=x the result converted to an unsigned long is still correct. typedef typename make_unsigned<Scalar>::type ScalarU;
std::size_t range = ScalarX(y)-ScalarX(x); // ScalarX is the widest of ScalarU and unsigned int.
std::size_t offset = 0; // We'll deal only with ScalarX and unsigned int below thus avoiding signed
// rejection sampling // types and arithmetic and signed overflows (which are undefined behavior).
std::size_t divisor = 1; typedef typename conditional<(ScalarU(-1) > unsigned(-1)), ScalarU, unsigned>::type ScalarX;
std::size_t multiplier = 1; // The following difference doesn't overflow, provided our integer types are two's
if(range<RAND_MAX) divisor = (std::size_t(RAND_MAX)+1)/(range+1); // complement and have the same number of padding bits in signed and unsigned variants.
else multiplier = 1 + range/(std::size_t(RAND_MAX)+1); // This is the case in most modern implementations of C++.
ScalarX range = ScalarX(y) - ScalarX(x);
ScalarX offset = 0;
ScalarX divisor = 1;
ScalarX multiplier = 1;
const unsigned rand_max = RAND_MAX;
if (range <= rand_max) divisor = (rand_max + 1) / (range + 1);
else multiplier = 1 + range / (rand_max + 1);
// Rejection sampling.
do { do {
offset = (std::size_t(std::rand()) * multiplier) / divisor; offset = (unsigned(std::rand()) * multiplier) / divisor;
} while (offset > range); } while (offset > range);
return Scalar(ScalarX(x) + offset); return Scalar(ScalarX(x) + offset);
} }
@ -869,7 +876,7 @@ template<typename T> T generic_fast_tanh_float(const T& a_x);
namespace numext { namespace numext {
#if (!defined(EIGEN_GPUCC) || defined(EIGEN_CONSTEXPR_ARE_DEVICE_FUNC)) && !defined(__SYCL_DEVICE_ONLY__) #if (!defined(EIGEN_GPUCC) || defined(EIGEN_CONSTEXPR_ARE_DEVICE_FUNC))
template<typename T> template<typename T>
EIGEN_DEVICE_FUNC EIGEN_DEVICE_FUNC
EIGEN_ALWAYS_INLINE T mini(const T& x, const T& y) EIGEN_ALWAYS_INLINE T mini(const T& x, const T& y)
@ -885,80 +892,6 @@ EIGEN_ALWAYS_INLINE T maxi(const T& x, const T& y)
EIGEN_USING_STD_MATH(max); EIGEN_USING_STD_MATH(max);
return max EIGEN_NOT_A_MACRO (x,y); return max EIGEN_NOT_A_MACRO (x,y);
} }
#elif defined(__SYCL_DEVICE_ONLY__)
template<typename T>
EIGEN_ALWAYS_INLINE T mini(const T& x, const T& y)
{
return y < x ? y : x;
}
template<typename T>
EIGEN_ALWAYS_INLINE T maxi(const T& x, const T& y)
{
return x < y ? y : x;
}
EIGEN_ALWAYS_INLINE int mini(const int& x, const int& y)
{
return cl::sycl::min(x,y);
}
EIGEN_ALWAYS_INLINE int maxi(const int& x, const int& y)
{
return cl::sycl::max(x,y);
}
EIGEN_ALWAYS_INLINE unsigned int mini(const unsigned int& x, const unsigned int& y)
{
return cl::sycl::min(x,y);
}
EIGEN_ALWAYS_INLINE unsigned int maxi(const unsigned int& x, const unsigned int& y)
{
return cl::sycl::max(x,y);
}
EIGEN_ALWAYS_INLINE long mini(const long & x, const long & y)
{
return cl::sycl::min(x,y);
}
EIGEN_ALWAYS_INLINE long maxi(const long & x, const long & y)
{
return cl::sycl::max(x,y);
}
EIGEN_ALWAYS_INLINE unsigned long mini(const unsigned long& x, const unsigned long& y)
{
return cl::sycl::min(x,y);
}
EIGEN_ALWAYS_INLINE unsigned long maxi(const unsigned long& x, const unsigned long& y)
{
return cl::sycl::max(x,y);
}
EIGEN_ALWAYS_INLINE float mini(const float& x, const float& y)
{
return cl::sycl::fmin(x,y);
}
EIGEN_ALWAYS_INLINE float maxi(const float& x, const float& y)
{
return cl::sycl::fmax(x,y);
}
EIGEN_ALWAYS_INLINE double mini(const double& x, const double& y)
{
return cl::sycl::fmin(x,y);
}
EIGEN_ALWAYS_INLINE double maxi(const double& x, const double& y)
{
return cl::sycl::fmax(x,y);
}
#else #else
template<typename T> template<typename T>
EIGEN_DEVICE_FUNC EIGEN_DEVICE_FUNC
@ -1021,6 +954,75 @@ EIGEN_ALWAYS_INLINE long double maxi(const long double& x, const long double& y)
} }
#endif #endif
#if defined(__SYCL_DEVICE_ONLY__)
#define SYCL_SPECIALIZE_SIGNED_INTEGER_TYPES_BINARY(NAME, FUNC) \
SYCL_SPECIALIZE_BINARY_FUNC(NAME, FUNC, cl::sycl::cl_char) \
SYCL_SPECIALIZE_BINARY_FUNC(NAME, FUNC, cl::sycl::cl_short) \
SYCL_SPECIALIZE_BINARY_FUNC(NAME, FUNC, cl::sycl::cl_int) \
SYCL_SPECIALIZE_BINARY_FUNC(NAME, FUNC, cl::sycl::cl_long)
#define SYCL_SPECIALIZE_SIGNED_INTEGER_TYPES_UNARY(NAME, FUNC) \
SYCL_SPECIALIZE_UNARY_FUNC(NAME, FUNC, cl::sycl::cl_char) \
SYCL_SPECIALIZE_UNARY_FUNC(NAME, FUNC, cl::sycl::cl_short) \
SYCL_SPECIALIZE_UNARY_FUNC(NAME, FUNC, cl::sycl::cl_int) \
SYCL_SPECIALIZE_UNARY_FUNC(NAME, FUNC, cl::sycl::cl_long)
#define SYCL_SPECIALIZE_UNSIGNED_INTEGER_TYPES_BINARY(NAME, FUNC) \
SYCL_SPECIALIZE_BINARY_FUNC(NAME, FUNC, cl::sycl::cl_uchar) \
SYCL_SPECIALIZE_BINARY_FUNC(NAME, FUNC, cl::sycl::cl_ushort) \
SYCL_SPECIALIZE_BINARY_FUNC(NAME, FUNC, cl::sycl::cl_uint) \
SYCL_SPECIALIZE_BINARY_FUNC(NAME, FUNC, cl::sycl::cl_ulong)
#define SYCL_SPECIALIZE_UNSIGNED_INTEGER_TYPES_UNARY(NAME, FUNC) \
SYCL_SPECIALIZE_UNARY_FUNC(NAME, FUNC, cl::sycl::cl_uchar) \
SYCL_SPECIALIZE_UNARY_FUNC(NAME, FUNC, cl::sycl::cl_ushort) \
SYCL_SPECIALIZE_UNARY_FUNC(NAME, FUNC, cl::sycl::cl_uint) \
SYCL_SPECIALIZE_UNARY_FUNC(NAME, FUNC, cl::sycl::cl_ulong)
#define SYCL_SPECIALIZE_INTEGER_TYPES_BINARY(NAME, FUNC) \
SYCL_SPECIALIZE_SIGNED_INTEGER_TYPES_BINARY(NAME, FUNC) \
SYCL_SPECIALIZE_UNSIGNED_INTEGER_TYPES_BINARY(NAME, FUNC)
#define SYCL_SPECIALIZE_INTEGER_TYPES_UNARY(NAME, FUNC) \
SYCL_SPECIALIZE_SIGNED_INTEGER_TYPES_UNARY(NAME, FUNC) \
SYCL_SPECIALIZE_UNSIGNED_INTEGER_TYPES_UNARY(NAME, FUNC)
#define SYCL_SPECIALIZE_FLOATING_TYPES_BINARY(NAME, FUNC) \
SYCL_SPECIALIZE_BINARY_FUNC(NAME, FUNC, cl::sycl::cl_float) \
SYCL_SPECIALIZE_BINARY_FUNC(NAME, FUNC,cl::sycl::cl_double)
#define SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(NAME, FUNC) \
SYCL_SPECIALIZE_UNARY_FUNC(NAME, FUNC, cl::sycl::cl_float) \
SYCL_SPECIALIZE_UNARY_FUNC(NAME, FUNC,cl::sycl::cl_double)
#define SYCL_SPECIALIZE_FLOATING_TYPES_UNARY_FUNC_RET_TYPE(NAME, FUNC, RET_TYPE) \
SYCL_SPECIALIZE_GEN_UNARY_FUNC(NAME, FUNC, RET_TYPE, cl::sycl::cl_float) \
SYCL_SPECIALIZE_GEN_UNARY_FUNC(NAME, FUNC, RET_TYPE, cl::sycl::cl_double)
#define SYCL_SPECIALIZE_GEN_UNARY_FUNC(NAME, FUNC, RET_TYPE, ARG_TYPE) \
template<> \
EIGEN_DEVICE_FUNC \
EIGEN_ALWAYS_INLINE RET_TYPE NAME(const ARG_TYPE& x) { \
return cl::sycl::FUNC(x); \
}
#define SYCL_SPECIALIZE_UNARY_FUNC(NAME, FUNC, TYPE) \
SYCL_SPECIALIZE_GEN_UNARY_FUNC(NAME, FUNC, TYPE, TYPE)
#define SYCL_SPECIALIZE_GEN1_BINARY_FUNC(NAME, FUNC, RET_TYPE, ARG_TYPE1, ARG_TYPE2) \
template<> \
EIGEN_DEVICE_FUNC \
EIGEN_ALWAYS_INLINE RET_TYPE NAME(const ARG_TYPE1& x, const ARG_TYPE2& y) { \
return cl::sycl::FUNC(x, y); \
}
#define SYCL_SPECIALIZE_GEN2_BINARY_FUNC(NAME, FUNC, RET_TYPE, ARG_TYPE) \
SYCL_SPECIALIZE_GEN1_BINARY_FUNC(NAME, FUNC, RET_TYPE, ARG_TYPE, ARG_TYPE)
#define SYCL_SPECIALIZE_BINARY_FUNC(NAME, FUNC, TYPE) \
SYCL_SPECIALIZE_GEN2_BINARY_FUNC(NAME, FUNC, TYPE, TYPE)
SYCL_SPECIALIZE_INTEGER_TYPES_BINARY(mini, min)
SYCL_SPECIALIZE_FLOATING_TYPES_BINARY(mini, fmin)
SYCL_SPECIALIZE_INTEGER_TYPES_BINARY(maxi, max)
SYCL_SPECIALIZE_FLOATING_TYPES_BINARY(maxi, fmax)
#endif // defined(__SYCL_DEVICE_ONLY__)
template<typename Scalar> template<typename Scalar>
EIGEN_DEVICE_FUNC EIGEN_DEVICE_FUNC
@ -1102,6 +1104,10 @@ inline EIGEN_MATHFUNC_RETVAL(hypot, Scalar) hypot(const Scalar& x, const Scalar&
return EIGEN_MATHFUNC_IMPL(hypot, Scalar)::run(x, y); return EIGEN_MATHFUNC_IMPL(hypot, Scalar)::run(x, y);
} }
#if defined(__SYCL_DEVICE_ONLY__)
SYCL_SPECIALIZE_FLOATING_TYPES_BINARY(hypot, hypot)
#endif // defined(__SYCL_DEVICE_ONLY__)
template<typename Scalar> template<typename Scalar>
EIGEN_DEVICE_FUNC EIGEN_DEVICE_FUNC
inline EIGEN_MATHFUNC_RETVAL(log1p, Scalar) log1p(const Scalar& x) inline EIGEN_MATHFUNC_RETVAL(log1p, Scalar) log1p(const Scalar& x)
@ -1110,9 +1116,8 @@ inline EIGEN_MATHFUNC_RETVAL(log1p, Scalar) log1p(const Scalar& x)
} }
#if defined(__SYCL_DEVICE_ONLY__) #if defined(__SYCL_DEVICE_ONLY__)
EIGEN_ALWAYS_INLINE float log1p(float x) { return cl::sycl::log1p(x); } SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(log1p, log1p)
EIGEN_ALWAYS_INLINE double log1p(double x) { return cl::sycl::log1p(x); } #endif //defined(__SYCL_DEVICE_ONLY__)
#endif // defined(__SYCL_DEVICE_ONLY__)
#if defined(EIGEN_GPUCC) #if defined(EIGEN_GPUCC)
template<> EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE template<> EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
@ -1130,8 +1135,7 @@ inline typename internal::pow_impl<ScalarX,ScalarY>::result_type pow(const Scala
} }
#if defined(__SYCL_DEVICE_ONLY__) #if defined(__SYCL_DEVICE_ONLY__)
EIGEN_ALWAYS_INLINE float pow(float x, float y) { return cl::sycl::pow(x, y); } SYCL_SPECIALIZE_FLOATING_TYPES_BINARY(pow, pow)
EIGEN_ALWAYS_INLINE double pow(double x, double y) { return cl::sycl::pow(x, y); }
#endif // defined(__SYCL_DEVICE_ONLY__) #endif // defined(__SYCL_DEVICE_ONLY__)
template<typename T> EIGEN_DEVICE_FUNC bool (isnan) (const T &x) { return internal::isnan_impl(x); } template<typename T> EIGEN_DEVICE_FUNC bool (isnan) (const T &x) { return internal::isnan_impl(x); }
@ -1139,12 +1143,9 @@ template<typename T> EIGEN_DEVICE_FUNC bool (isinf) (const T &x) { return inte
template<typename T> EIGEN_DEVICE_FUNC bool (isfinite)(const T &x) { return internal::isfinite_impl(x); } template<typename T> EIGEN_DEVICE_FUNC bool (isfinite)(const T &x) { return internal::isfinite_impl(x); }
#if defined(__SYCL_DEVICE_ONLY__) #if defined(__SYCL_DEVICE_ONLY__)
EIGEN_ALWAYS_INLINE float isnan(float x) { return cl::sycl::isnan(x); } SYCL_SPECIALIZE_FLOATING_TYPES_UNARY_FUNC_RET_TYPE(isnan, isnan, bool)
EIGEN_ALWAYS_INLINE double isnan(double x) { return cl::sycl::isnan(x); } SYCL_SPECIALIZE_FLOATING_TYPES_UNARY_FUNC_RET_TYPE(isinf, isinf, bool)
EIGEN_ALWAYS_INLINE float isinf(float x) { return cl::sycl::isinf(x); } SYCL_SPECIALIZE_FLOATING_TYPES_UNARY_FUNC_RET_TYPE(isfinite, isfinite, bool)
EIGEN_ALWAYS_INLINE double isinf(double x) { return cl::sycl::isinf(x); }
EIGEN_ALWAYS_INLINE float isfinite(float x) { return cl::sycl::isfinite(x); }
EIGEN_ALWAYS_INLINE double isfinite(double x) { return cl::sycl::isfinite(x); }
#endif // defined(__SYCL_DEVICE_ONLY__) #endif // defined(__SYCL_DEVICE_ONLY__)
template<typename Scalar> template<typename Scalar>
@ -1155,8 +1156,7 @@ inline EIGEN_MATHFUNC_RETVAL(round, Scalar) round(const Scalar& x)
} }
#if defined(__SYCL_DEVICE_ONLY__) #if defined(__SYCL_DEVICE_ONLY__)
EIGEN_ALWAYS_INLINE float round(float x) { return cl::sycl::round(x); } SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(round, round)
EIGEN_ALWAYS_INLINE double round(double x) { return cl::sycl::round(x); }
#endif // defined(__SYCL_DEVICE_ONLY__) #endif // defined(__SYCL_DEVICE_ONLY__)
template<typename T> template<typename T>
@ -1168,8 +1168,7 @@ T (floor)(const T& x)
} }
#if defined(__SYCL_DEVICE_ONLY__) #if defined(__SYCL_DEVICE_ONLY__)
EIGEN_ALWAYS_INLINE float floor(float x) { return cl::sycl::floor(x); } SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(floor, floor)
EIGEN_ALWAYS_INLINE double floor(double x) { return cl::sycl::floor(x); }
#endif // defined(__SYCL_DEVICE_ONLY__) #endif // defined(__SYCL_DEVICE_ONLY__)
#if defined(EIGEN_GPUCC) #if defined(EIGEN_GPUCC)
@ -1189,8 +1188,7 @@ T (ceil)(const T& x)
} }
#if defined(__SYCL_DEVICE_ONLY__) #if defined(__SYCL_DEVICE_ONLY__)
EIGEN_ALWAYS_INLINE float ceil(float x) { return cl::sycl::ceil(x); } SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(ceil, ceil)
EIGEN_ALWAYS_INLINE double ceil(double x) { return cl::sycl::ceil(x); }
#endif // defined(__SYCL_DEVICE_ONLY__) #endif // defined(__SYCL_DEVICE_ONLY__)
#if defined(EIGEN_GPUCC) #if defined(EIGEN_GPUCC)
@ -1234,8 +1232,7 @@ T sqrt(const T &x)
} }
#if defined(__SYCL_DEVICE_ONLY__) #if defined(__SYCL_DEVICE_ONLY__)
EIGEN_ALWAYS_INLINE float sqrt(float x) { return cl::sycl::sqrt(x); } SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(sqrt, sqrt)
EIGEN_ALWAYS_INLINE double sqrt(double x) { return cl::sycl::sqrt(x); }
#endif // defined(__SYCL_DEVICE_ONLY__) #endif // defined(__SYCL_DEVICE_ONLY__)
template<typename T> template<typename T>
@ -1246,8 +1243,7 @@ T log(const T &x) {
} }
#if defined(__SYCL_DEVICE_ONLY__) #if defined(__SYCL_DEVICE_ONLY__)
EIGEN_ALWAYS_INLINE float log(float x) { return cl::sycl::log(x); } SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(log, log)
EIGEN_ALWAYS_INLINE double log(double x) { return cl::sycl::log(x); }
#endif // defined(__SYCL_DEVICE_ONLY__) #endif // defined(__SYCL_DEVICE_ONLY__)
@ -1275,8 +1271,8 @@ abs(const T &x) {
} }
#if defined(__SYCL_DEVICE_ONLY__) #if defined(__SYCL_DEVICE_ONLY__)
EIGEN_ALWAYS_INLINE float abs(float x) { return cl::sycl::fabs(x); } SYCL_SPECIALIZE_INTEGER_TYPES_UNARY(abs, abs)
EIGEN_ALWAYS_INLINE double abs(double x) { return cl::sycl::fabs(x); } SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(abs, fabs)
#endif // defined(__SYCL_DEVICE_ONLY__) #endif // defined(__SYCL_DEVICE_ONLY__)
#if defined(EIGEN_GPUCC) #if defined(EIGEN_GPUCC)
@ -1305,8 +1301,7 @@ T exp(const T &x) {
} }
#if defined(__SYCL_DEVICE_ONLY__) #if defined(__SYCL_DEVICE_ONLY__)
EIGEN_ALWAYS_INLINE float exp(float x) { return cl::sycl::exp(x); } SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(exp, exp)
EIGEN_ALWAYS_INLINE double exp(double x) { return cl::sycl::exp(x); }
#endif // defined(__SYCL_DEVICE_ONLY__) #endif // defined(__SYCL_DEVICE_ONLY__)
#if defined(EIGEN_GPUCC) #if defined(EIGEN_GPUCC)
@ -1341,8 +1336,7 @@ inline EIGEN_MATHFUNC_RETVAL(expm1, Scalar) expm1(const Scalar& x)
} }
#if defined(__SYCL_DEVICE_ONLY__) #if defined(__SYCL_DEVICE_ONLY__)
EIGEN_ALWAYS_INLINE float expm1(float x) { return cl::sycl::expm1(x); } SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(expm1, expm1)
EIGEN_ALWAYS_INLINE double expm1(double x) { return cl::sycl::expm1(x); }
#endif // defined(__SYCL_DEVICE_ONLY__) #endif // defined(__SYCL_DEVICE_ONLY__)
#if defined(EIGEN_GPUCC) #if defined(EIGEN_GPUCC)
@ -1361,8 +1355,7 @@ T cos(const T &x) {
} }
#if defined(__SYCL_DEVICE_ONLY__) #if defined(__SYCL_DEVICE_ONLY__)
EIGEN_ALWAYS_INLINE float cos(float x) { return cl::sycl::cos(x); } SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(cos,cos)
EIGEN_ALWAYS_INLINE double cos(double x) { return cl::sycl::cos(x); }
#endif // defined(__SYCL_DEVICE_ONLY__) #endif // defined(__SYCL_DEVICE_ONLY__)
#if defined(EIGEN_GPUCC) #if defined(EIGEN_GPUCC)
@ -1381,8 +1374,7 @@ T sin(const T &x) {
} }
#if defined(__SYCL_DEVICE_ONLY__) #if defined(__SYCL_DEVICE_ONLY__)
EIGEN_ALWAYS_INLINE float sin(float x) { return cl::sycl::sin(x); } SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(sin, sin)
EIGEN_ALWAYS_INLINE double sin(double x) { return cl::sycl::sin(x); }
#endif // defined(__SYCL_DEVICE_ONLY__) #endif // defined(__SYCL_DEVICE_ONLY__)
#if defined(EIGEN_GPUCC) #if defined(EIGEN_GPUCC)
@ -1401,8 +1393,7 @@ T tan(const T &x) {
} }
#if defined(__SYCL_DEVICE_ONLY__) #if defined(__SYCL_DEVICE_ONLY__)
EIGEN_ALWAYS_INLINE float tan(float x) { return cl::sycl::tan(x); } SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(tan, tan)
EIGEN_ALWAYS_INLINE double tan(double x) { return cl::sycl::tan(x); }
#endif // defined(__SYCL_DEVICE_ONLY__) #endif // defined(__SYCL_DEVICE_ONLY__)
#if defined(EIGEN_GPUCC) #if defined(EIGEN_GPUCC)
@ -1430,10 +1421,8 @@ T acosh(const T &x) {
#endif #endif
#if defined(__SYCL_DEVICE_ONLY__) #if defined(__SYCL_DEVICE_ONLY__)
EIGEN_ALWAYS_INLINE float acos(float x) { return cl::sycl::acos(x); } SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(acos, acos)
EIGEN_ALWAYS_INLINE double acos(double x) { return cl::sycl::acos(x); } SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(acosh, acosh)
EIGEN_ALWAYS_INLINE float acosh(float x) { return cl::sycl::acosh(x); }
EIGEN_ALWAYS_INLINE double acosh(double x) { return cl::sycl::acosh(x); }
#endif // defined(__SYCL_DEVICE_ONLY__) #endif // defined(__SYCL_DEVICE_ONLY__)
#if defined(EIGEN_GPUCC) #if defined(EIGEN_GPUCC)
@ -1461,10 +1450,8 @@ T asinh(const T &x) {
#endif #endif
#if defined(__SYCL_DEVICE_ONLY__) #if defined(__SYCL_DEVICE_ONLY__)
EIGEN_ALWAYS_INLINE float asin(float x) { return cl::sycl::asin(x); } SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(asin, asin)
EIGEN_ALWAYS_INLINE double asin(double x) { return cl::sycl::asin(x); } SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(asinh, asinh)
EIGEN_ALWAYS_INLINE float asinh(float x) { return cl::sycl::asinh(x); }
EIGEN_ALWAYS_INLINE double asinh(double x) { return cl::sycl::asinh(x); }
#endif // defined(__SYCL_DEVICE_ONLY__) #endif // defined(__SYCL_DEVICE_ONLY__)
#if defined(EIGEN_GPUCC) #if defined(EIGEN_GPUCC)
@ -1492,10 +1479,8 @@ T atanh(const T &x) {
#endif #endif
#if defined(__SYCL_DEVICE_ONLY__) #if defined(__SYCL_DEVICE_ONLY__)
EIGEN_ALWAYS_INLINE float atan(float x) { return cl::sycl::atan(x); } SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(atan, atan)
EIGEN_ALWAYS_INLINE double atan(double x) { return cl::sycl::atan(x); } SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(atanh, atanh)
EIGEN_ALWAYS_INLINE float atanh(float x) { return cl::sycl::atanh(x); }
EIGEN_ALWAYS_INLINE double atanh(double x) { return cl::sycl::atanh(x); }
#endif // defined(__SYCL_DEVICE_ONLY__) #endif // defined(__SYCL_DEVICE_ONLY__)
#if defined(EIGEN_GPUCC) #if defined(EIGEN_GPUCC)
@ -1515,8 +1500,7 @@ T cosh(const T &x) {
} }
#if defined(__SYCL_DEVICE_ONLY__) #if defined(__SYCL_DEVICE_ONLY__)
EIGEN_ALWAYS_INLINE float cosh(float x) { return cl::sycl::cosh(x); } SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(cosh, cosh)
EIGEN_ALWAYS_INLINE double cosh(double x) { return cl::sycl::cosh(x); }
#endif // defined(__SYCL_DEVICE_ONLY__) #endif // defined(__SYCL_DEVICE_ONLY__)
#if defined(EIGEN_GPUCC) #if defined(EIGEN_GPUCC)
@ -1535,8 +1519,7 @@ T sinh(const T &x) {
} }
#if defined(__SYCL_DEVICE_ONLY__) #if defined(__SYCL_DEVICE_ONLY__)
EIGEN_ALWAYS_INLINE float sinh(float x) { return cl::sycl::sinh(x); } SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(sinh, sinh)
EIGEN_ALWAYS_INLINE double sinh(double x) { return cl::sycl::sinh(x); }
#endif // defined(__SYCL_DEVICE_ONLY__) #endif // defined(__SYCL_DEVICE_ONLY__)
#if defined(EIGEN_GPUCC) #if defined(EIGEN_GPUCC)
@ -1554,14 +1537,15 @@ T tanh(const T &x) {
return tanh(x); return tanh(x);
} }
#if defined(__SYCL_DEVICE_ONLY__) #if (!defined(EIGEN_GPUCC)) && EIGEN_FAST_MATH && (!defined(__SYCL_DEVICE_ONLY__))
EIGEN_ALWAYS_INLINE float tanh(float x) { return cl::sycl::tanh(x); }
EIGEN_ALWAYS_INLINE double tanh(double x) { return cl::sycl::tanh(x); }
#elif (!defined(EIGEN_GPUCC)) && EIGEN_FAST_MATH
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
float tanh(float x) { return internal::generic_fast_tanh_float(x); } float tanh(float x) { return internal::generic_fast_tanh_float(x); }
#endif #endif
#if defined(__SYCL_DEVICE_ONLY__)
SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(tanh, tanh)
#endif // defined(__SYCL_DEVICE_ONLY__)
#if defined(EIGEN_GPUCC) #if defined(EIGEN_GPUCC)
template<> EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE template<> EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
float tanh(const float &x) { return ::tanhf(x); } float tanh(const float &x) { return ::tanhf(x); }
@ -1578,8 +1562,7 @@ T fmod(const T& a, const T& b) {
} }
#if defined(__SYCL_DEVICE_ONLY__) #if defined(__SYCL_DEVICE_ONLY__)
EIGEN_ALWAYS_INLINE float fmod(float x, float y) { return cl::sycl::fmod(x, y); } SYCL_SPECIALIZE_FLOATING_TYPES_BINARY(fmod, fmod)
EIGEN_ALWAYS_INLINE double fmod(double x, double y) { return cl::sycl::fmod(x, y); }
#endif // defined(__SYCL_DEVICE_ONLY__) #endif // defined(__SYCL_DEVICE_ONLY__)
#if defined(EIGEN_GPUCC) #if defined(EIGEN_GPUCC)
@ -1596,6 +1579,23 @@ double fmod(const double& a, const double& b) {
} }
#endif #endif
#if defined(__SYCL_DEVICE_ONLY__)
#undef SYCL_SPECIALIZE_SIGNED_INTEGER_TYPES_BINARY
#undef SYCL_SPECIALIZE_SIGNED_INTEGER_TYPES_UNARY
#undef SYCL_SPECIALIZE_UNSIGNED_INTEGER_TYPES_BINARY
#undef SYCL_SPECIALIZE_UNSIGNED_INTEGER_TYPES_UNARY
#undef SYCL_SPECIALIZE_INTEGER_TYPES_BINARY
#undef SYCL_SPECIALIZE_UNSIGNED_INTEGER_TYPES_UNARY
#undef SYCL_SPECIALIZE_FLOATING_TYPES_BINARY
#undef SYCL_SPECIALIZE_FLOATING_TYPES_UNARY
#undef SYCL_SPECIALIZE_FLOATING_TYPES_UNARY_FUNC_RET_TYPE
#undef SYCL_SPECIALIZE_GEN_UNARY_FUNC
#undef SYCL_SPECIALIZE_UNARY_FUNC
#undef SYCL_SPECIALIZE_GEN1_BINARY_FUNC
#undef SYCL_SPECIALIZE_GEN2_BINARY_FUNC
#undef SYCL_SPECIALIZE_BINARY_FUNC
#endif // defined(__SYCL_DEVICE_ONLY__)
} // end namespace numext } // end namespace numext
namespace internal { namespace internal {

View File

@ -20,7 +20,7 @@ namespace internal {
/** \internal /** \internal
* Evaluator of a product expression. * Evaluator of a product expression.
* Since products require special treatments to handle all possible cases, * Since products require special treatments to handle all possible cases,
* we simply deffer the evaluation logic to a product_evaluator class * we simply defer the evaluation logic to a product_evaluator class
* which offers more partial specialization possibilities. * which offers more partial specialization possibilities.
* *
* \sa class product_evaluator * \sa class product_evaluator
@ -128,7 +128,7 @@ protected:
PlainObject m_result; PlainObject m_result;
}; };
// The following three shortcuts are enabled only if the scalar types match excatly. // The following three shortcuts are enabled only if the scalar types match exactly.
// TODO: we could enable them for different scalar types when the product is not vectorized. // TODO: we could enable them for different scalar types when the product is not vectorized.
// Dense = Product // Dense = Product

View File

@ -60,7 +60,7 @@ struct __half_raw {
#if defined(EIGEN_HAS_OLD_HIP_FP16) #if defined(EIGEN_HAS_OLD_HIP_FP16)
// Make a __half_raw definition that is // Make a __half_raw definition that is
// ++ compatible with that of Eigen and // ++ compatible with that of Eigen and
// ++ add a implcit conversion to the native __half of the old HIP implementation. // ++ add an implicit conversion to the native __half of the old HIP implementation.
// //
// Keeping ".x" as "unsigned short" keeps the interface the same between the Eigen and HIP implementation. // Keeping ".x" as "unsigned short" keeps the interface the same between the Eigen and HIP implementation.
// //
@ -272,7 +272,11 @@ namespace half_impl {
// conversion steps back and forth. // conversion steps back and forth.
EIGEN_STRONG_INLINE __device__ half operator + (const half& a, const half& b) { EIGEN_STRONG_INLINE __device__ half operator + (const half& a, const half& b) {
#if defined(EIGEN_CUDACC_VER) && EIGEN_CUDACC_VER >= 90000
return __hadd(::__half(a), ::__half(b));
#else
return __hadd(a, b); return __hadd(a, b);
#endif
} }
EIGEN_STRONG_INLINE __device__ half operator * (const half& a, const half& b) { EIGEN_STRONG_INLINE __device__ half operator * (const half& a, const half& b) {
return __hmul(a, b); return __hmul(a, b);
@ -281,9 +285,13 @@ EIGEN_STRONG_INLINE __device__ half operator - (const half& a, const half& b) {
return __hsub(a, b); return __hsub(a, b);
} }
EIGEN_STRONG_INLINE __device__ half operator / (const half& a, const half& b) { EIGEN_STRONG_INLINE __device__ half operator / (const half& a, const half& b) {
#if defined(EIGEN_CUDACC_VER) && EIGEN_CUDACC_VER >= 90000
return __hdiv(a, b);
#else
float num = __half2float(a); float num = __half2float(a);
float denom = __half2float(b); float denom = __half2float(b);
return __float2half(num / denom); return __float2half(num / denom);
#endif
} }
EIGEN_STRONG_INLINE __device__ half operator - (const half& a) { EIGEN_STRONG_INLINE __device__ half operator - (const half& a) {
return __hneg(a); return __hneg(a);
@ -399,7 +407,7 @@ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC __half_raw raw_uint16_to_half(unsigned sho
return h; return h;
} }
union FP32 { union float32_bits {
unsigned int u; unsigned int u;
float f; float f;
}; };
@ -416,11 +424,11 @@ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC __half_raw float_to_half_rtne(float ff) {
return h; return h;
#else #else
FP32 f; f.f = ff; float32_bits f; f.f = ff;
const FP32 f32infty = { 255 << 23 }; const float32_bits f32infty = { 255 << 23 };
const FP32 f16max = { (127 + 16) << 23 }; const float32_bits f16max = { (127 + 16) << 23 };
const FP32 denorm_magic = { ((127 - 15) + (23 - 10) + 1) << 23 }; const float32_bits denorm_magic = { ((127 - 15) + (23 - 10) + 1) << 23 };
unsigned int sign_mask = 0x80000000u; unsigned int sign_mask = 0x80000000u;
__half_raw o; __half_raw o;
o.x = static_cast<unsigned short>(0x0u); o.x = static_cast<unsigned short>(0x0u);
@ -470,9 +478,9 @@ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC float half_to_float(__half_raw h) {
return _cvtsh_ss(h.x); return _cvtsh_ss(h.x);
#else #else
const FP32 magic = { 113 << 23 }; const float32_bits magic = { 113 << 23 };
const unsigned int shifted_exp = 0x7c00 << 13; // exponent mask after shift const unsigned int shifted_exp = 0x7c00 << 13; // exponent mask after shift
FP32 o; float32_bits o;
o.u = (h.x & 0x7fff) << 13; // exponent/mantissa bits o.u = (h.x & 0x7fff) << 13; // exponent/mantissa bits
unsigned int exp = shifted_exp & o.u; // just the exponent unsigned int exp = shifted_exp & o.u; // just the exponent

View File

@ -1178,7 +1178,7 @@ EIGEN_STRONG_INLINE double predux_min<Packet2d>(const Packet2d& a) {
return v[0]; return v[0];
#else #else
double a0 = a[0], a1 = a[1]; double a0 = a[0], a1 = a[1];
return ((std::isnan)(a0) || a0 < a1) ? a0 : a1; return ((numext::isnan)(a0) || a0 < a1) ? a0 : a1;
#endif #endif
} }
@ -1193,7 +1193,7 @@ EIGEN_STRONG_INLINE double predux_max<Packet2d>(const Packet2d& a) {
return v[0]; return v[0];
#else #else
double a0 = a[0], a1 = a[1]; double a0 = a[0], a1 = a[1];
return ((std::isnan)(a0) || a0 > a1) ? a0 : a1; return ((numext::isnan)(a0) || a0 > a1) ? a0 : a1;
#endif #endif
} }

View File

@ -80,4 +80,12 @@
#pragma diag_suppress 2739 #pragma diag_suppress 2739
#endif #endif
#else
// warnings already disabled:
# ifndef EIGEN_WARNINGS_DISABLED_2
# define EIGEN_WARNINGS_DISABLED_2
# elif defined(EIGEN_INTERNAL_DEBUGGING)
# error "Do not include \"DisableStupidWarnings.h\" recursively more than twice!"
# endif
#endif // not EIGEN_WARNINGS_DISABLED #endif // not EIGEN_WARNINGS_DISABLED

View File

@ -177,7 +177,7 @@ EIGEN_DEVICE_FUNC inline void* aligned_malloc(std::size_t size)
#endif #endif
#if EIGEN_DEFAULT_ALIGN_BYTES==16 #if EIGEN_DEFAULT_ALIGN_BYTES==16
eigen_assert((size<16 || (std::size_t(result)%16)==0) && "System's malloc returned an unaligned pointer. Compile with EIGEN_MALLOC_ALREADY_ALIGNED=0 to fallback to handmade alignd memory allocator."); eigen_assert((size<16 || (std::size_t(result)%16)==0) && "System's malloc returned an unaligned pointer. Compile with EIGEN_MALLOC_ALREADY_ALIGNED=0 to fallback to handmade aligned memory allocator.");
#endif #endif
#else #else
result = handmade_aligned_malloc(size); result = handmade_aligned_malloc(size);

View File

@ -128,6 +128,27 @@ template<> struct is_integral<unsigned __int64> { enum { value = true }; }
#endif #endif
#endif #endif
#if EIGEN_HAS_CXX11
using std::make_unsigned;
#else
// TODO: Possibly improve this implementation of make_unsigned.
// It is currently used only by
// template<typename Scalar> struct random_default_impl<Scalar, false, true>.
template<typename> struct make_unsigned;
template<> struct make_unsigned<char> { typedef unsigned char type; };
template<> struct make_unsigned<signed char> { typedef unsigned char type; };
template<> struct make_unsigned<unsigned char> { typedef unsigned char type; };
template<> struct make_unsigned<signed short> { typedef unsigned short type; };
template<> struct make_unsigned<unsigned short> { typedef unsigned short type; };
template<> struct make_unsigned<signed int> { typedef unsigned int type; };
template<> struct make_unsigned<unsigned int> { typedef unsigned int type; };
template<> struct make_unsigned<signed long> { typedef unsigned long type; };
template<> struct make_unsigned<unsigned long> { typedef unsigned long type; };
#if EIGEN_COMP_MSVC
template<> struct make_unsigned<signed __int64> { typedef unsigned __int64 type; };
template<> struct make_unsigned<unsigned __int64> { typedef unsigned __int64 type; };
#endif
#endif
template <typename T> struct add_const { typedef const T type; }; template <typename T> struct add_const { typedef const T type; };
template <typename T> struct add_const<T&> { typedef T& type; }; template <typename T> struct add_const<T&> { typedef T& type; };

View File

@ -1,4 +1,8 @@
#ifdef EIGEN_WARNINGS_DISABLED #ifdef EIGEN_WARNINGS_DISABLED_2
// "DisableStupidWarnings.h" was included twice recursively: Do not reenable warnings yet!
# undef EIGEN_WARNINGS_DISABLED_2
#elif defined(EIGEN_WARNINGS_DISABLED)
#undef EIGEN_WARNINGS_DISABLED #undef EIGEN_WARNINGS_DISABLED
#ifndef EIGEN_PERMANENTLY_DISABLE_STUPID_WARNINGS #ifndef EIGEN_PERMANENTLY_DISABLE_STUPID_WARNINGS

View File

@ -119,7 +119,7 @@ public:
* If the dimension of the ambient space is greater than 2, then there isn't uniqueness, * If the dimension of the ambient space is greater than 2, then there isn't uniqueness,
* so an arbitrary choice is made. * so an arbitrary choice is made.
*/ */
// FIXME to be consitent with the rest this could be implemented as a static Through function ?? // FIXME to be consistent with the rest this could be implemented as a static Through function ??
EIGEN_DEVICE_FUNC explicit Hyperplane(const ParametrizedLine<Scalar, AmbientDimAtCompileTime>& parametrized) EIGEN_DEVICE_FUNC explicit Hyperplane(const ParametrizedLine<Scalar, AmbientDimAtCompileTime>& parametrized)
{ {
normal() = parametrized.direction().unitOrthogonal(); normal() = parametrized.direction().unitOrthogonal();

View File

@ -115,7 +115,7 @@ template<int Mode> struct transform_make_affine;
* \end{array} \right) \f$ * \end{array} \right) \f$
* *
* Note that for a projective transformation the last row can be anything, * Note that for a projective transformation the last row can be anything,
* and then the interpretation of different parts might be sightly different. * and then the interpretation of different parts might be slightly different.
* *
* However, unlike a plain matrix, the Transform class provides many features * However, unlike a plain matrix, the Transform class provides many features
* simplifying both its assembly and usage. In particular, it can be composed * simplifying both its assembly and usage. In particular, it can be composed

View File

@ -70,18 +70,18 @@ public:
/** Constructs and initialize the translation transformation from a vector of translation coefficients */ /** Constructs and initialize the translation transformation from a vector of translation coefficients */
EIGEN_DEVICE_FUNC explicit inline Translation(const VectorType& vector) : m_coeffs(vector) {} EIGEN_DEVICE_FUNC explicit inline Translation(const VectorType& vector) : m_coeffs(vector) {}
/** \brief Retruns the x-translation by value. **/ /** \brief Returns the x-translation by value. **/
EIGEN_DEVICE_FUNC inline Scalar x() const { return m_coeffs.x(); } EIGEN_DEVICE_FUNC inline Scalar x() const { return m_coeffs.x(); }
/** \brief Retruns the y-translation by value. **/ /** \brief Returns the y-translation by value. **/
EIGEN_DEVICE_FUNC inline Scalar y() const { return m_coeffs.y(); } EIGEN_DEVICE_FUNC inline Scalar y() const { return m_coeffs.y(); }
/** \brief Retruns the z-translation by value. **/ /** \brief Returns the z-translation by value. **/
EIGEN_DEVICE_FUNC inline Scalar z() const { return m_coeffs.z(); } EIGEN_DEVICE_FUNC inline Scalar z() const { return m_coeffs.z(); }
/** \brief Retruns the x-translation as a reference. **/ /** \brief Returns the x-translation as a reference. **/
EIGEN_DEVICE_FUNC inline Scalar& x() { return m_coeffs.x(); } EIGEN_DEVICE_FUNC inline Scalar& x() { return m_coeffs.x(); }
/** \brief Retruns the y-translation as a reference. **/ /** \brief Returns the y-translation as a reference. **/
EIGEN_DEVICE_FUNC inline Scalar& y() { return m_coeffs.y(); } EIGEN_DEVICE_FUNC inline Scalar& y() { return m_coeffs.y(); }
/** \brief Retruns the z-translation as a reference. **/ /** \brief Returns the z-translation as a reference. **/
EIGEN_DEVICE_FUNC inline Scalar& z() { return m_coeffs.z(); } EIGEN_DEVICE_FUNC inline Scalar& z() { return m_coeffs.z(); }
EIGEN_DEVICE_FUNC const VectorType& vector() const { return m_coeffs; } EIGEN_DEVICE_FUNC const VectorType& vector() const { return m_coeffs; }

View File

@ -73,13 +73,13 @@ template<typename Scalar> class JacobiRotation
bool makeJacobi(const RealScalar& x, const Scalar& y, const RealScalar& z); bool makeJacobi(const RealScalar& x, const Scalar& y, const RealScalar& z);
EIGEN_DEVICE_FUNC EIGEN_DEVICE_FUNC
void makeGivens(const Scalar& p, const Scalar& q, Scalar* z=0); void makeGivens(const Scalar& p, const Scalar& q, Scalar* r=0);
protected: protected:
EIGEN_DEVICE_FUNC EIGEN_DEVICE_FUNC
void makeGivens(const Scalar& p, const Scalar& q, Scalar* z, internal::true_type); void makeGivens(const Scalar& p, const Scalar& q, Scalar* r, internal::true_type);
EIGEN_DEVICE_FUNC EIGEN_DEVICE_FUNC
void makeGivens(const Scalar& p, const Scalar& q, Scalar* z, internal::false_type); void makeGivens(const Scalar& p, const Scalar& q, Scalar* r, internal::false_type);
Scalar m_c, m_s; Scalar m_c, m_s;
}; };
@ -145,7 +145,7 @@ inline bool JacobiRotation<Scalar>::makeJacobi(const MatrixBase<Derived>& m, Ind
* \f$ V = \left ( \begin{array}{c} p \\ q \end{array} \right )\f$ yields: * \f$ V = \left ( \begin{array}{c} p \\ q \end{array} \right )\f$ yields:
* \f$ G^* V = \left ( \begin{array}{c} r \\ 0 \end{array} \right )\f$. * \f$ G^* V = \left ( \begin{array}{c} r \\ 0 \end{array} \right )\f$.
* *
* The value of \a z is returned if \a z is not null (the default is null). * The value of \a r is returned if \a r is not null (the default is null).
* Also note that G is built such that the cosine is always real. * Also note that G is built such that the cosine is always real.
* *
* Example: \include Jacobi_makeGivens.cpp * Example: \include Jacobi_makeGivens.cpp
@ -159,9 +159,9 @@ inline bool JacobiRotation<Scalar>::makeJacobi(const MatrixBase<Derived>& m, Ind
*/ */
template<typename Scalar> template<typename Scalar>
EIGEN_DEVICE_FUNC EIGEN_DEVICE_FUNC
void JacobiRotation<Scalar>::makeGivens(const Scalar& p, const Scalar& q, Scalar* z) void JacobiRotation<Scalar>::makeGivens(const Scalar& p, const Scalar& q, Scalar* r)
{ {
makeGivens(p, q, z, typename internal::conditional<NumTraits<Scalar>::IsComplex, internal::true_type, internal::false_type>::type()); makeGivens(p, q, r, typename internal::conditional<NumTraits<Scalar>::IsComplex, internal::true_type, internal::false_type>::type());
} }

View File

@ -36,7 +36,7 @@ namespace std \
deque(InputIterator first, InputIterator last, const allocator_type& a = allocator_type()) : deque_base(first, last, a) {} \ deque(InputIterator first, InputIterator last, const allocator_type& a = allocator_type()) : deque_base(first, last, a) {} \
deque(const deque& c) : deque_base(c) {} \ deque(const deque& c) : deque_base(c) {} \
explicit deque(size_type num, const value_type& val = value_type()) : deque_base(num, val) {} \ explicit deque(size_type num, const value_type& val = value_type()) : deque_base(num, val) {} \
deque(iterator start, iterator end) : deque_base(start, end) {} \ deque(iterator start_, iterator end_) : deque_base(start_, end_) {} \
deque& operator=(const deque& x) { \ deque& operator=(const deque& x) { \
deque_base::operator=(x); \ deque_base::operator=(x); \
return *this; \ return *this; \
@ -62,7 +62,7 @@ namespace std {
: deque_base(first, last, a) {} \ : deque_base(first, last, a) {} \
deque(const deque& c) : deque_base(c) {} \ deque(const deque& c) : deque_base(c) {} \
explicit deque(size_type num, const value_type& val = value_type()) : deque_base(num, val) {} \ explicit deque(size_type num, const value_type& val = value_type()) : deque_base(num, val) {} \
deque(iterator start, iterator end) : deque_base(start, end) {} \ deque(iterator start_, iterator end_) : deque_base(start_, end_) {} \
deque& operator=(const deque& x) { \ deque& operator=(const deque& x) { \
deque_base::operator=(x); \ deque_base::operator=(x); \
return *this; \ return *this; \

View File

@ -35,7 +35,7 @@ namespace std \
list(InputIterator first, InputIterator last, const allocator_type& a = allocator_type()) : list_base(first, last, a) {} \ list(InputIterator first, InputIterator last, const allocator_type& a = allocator_type()) : list_base(first, last, a) {} \
list(const list& c) : list_base(c) {} \ list(const list& c) : list_base(c) {} \
explicit list(size_type num, const value_type& val = value_type()) : list_base(num, val) {} \ explicit list(size_type num, const value_type& val = value_type()) : list_base(num, val) {} \
list(iterator start, iterator end) : list_base(start, end) {} \ list(iterator start_, iterator end_) : list_base(start_, end_) {} \
list& operator=(const list& x) { \ list& operator=(const list& x) { \
list_base::operator=(x); \ list_base::operator=(x); \
return *this; \ return *this; \
@ -62,7 +62,7 @@ namespace std
: list_base(first, last, a) {} \ : list_base(first, last, a) {} \
list(const list& c) : list_base(c) {} \ list(const list& c) : list_base(c) {} \
explicit list(size_type num, const value_type& val = value_type()) : list_base(num, val) {} \ explicit list(size_type num, const value_type& val = value_type()) : list_base(num, val) {} \
list(iterator start, iterator end) : list_base(start, end) {} \ list(iterator start_, iterator end_) : list_base(start_, end_) {} \
list& operator=(const list& x) { \ list& operator=(const list& x) { \
list_base::operator=(x); \ list_base::operator=(x); \
return *this; \ return *this; \

View File

@ -36,7 +36,7 @@ namespace std \
vector(InputIterator first, InputIterator last, const allocator_type& a = allocator_type()) : vector_base(first, last, a) {} \ vector(InputIterator first, InputIterator last, const allocator_type& a = allocator_type()) : vector_base(first, last, a) {} \
vector(const vector& c) : vector_base(c) {} \ vector(const vector& c) : vector_base(c) {} \
explicit vector(size_type num, const value_type& val = value_type()) : vector_base(num, val) {} \ explicit vector(size_type num, const value_type& val = value_type()) : vector_base(num, val) {} \
vector(iterator start, iterator end) : vector_base(start, end) {} \ vector(iterator start_, iterator end_) : vector_base(start_, end_) {} \
vector& operator=(const vector& x) { \ vector& operator=(const vector& x) { \
vector_base::operator=(x); \ vector_base::operator=(x); \
return *this; \ return *this; \
@ -62,7 +62,7 @@ namespace std {
: vector_base(first, last, a) {} \ : vector_base(first, last, a) {} \
vector(const vector& c) : vector_base(c) {} \ vector(const vector& c) : vector_base(c) {} \
explicit vector(size_type num, const value_type& val = value_type()) : vector_base(num, val) {} \ explicit vector(size_type num, const value_type& val = value_type()) : vector_base(num, val) {} \
vector(iterator start, iterator end) : vector_base(start, end) {} \ vector(iterator start_, iterator end_) : vector_base(start_, end_) {} \
vector& operator=(const vector& x) { \ vector& operator=(const vector& x) { \
vector_base::operator=(x); \ vector_base::operator=(x); \
return *this; \ return *this; \

View File

@ -10,6 +10,14 @@
#ifndef EIGEN_BLAS_COMMON_H #ifndef EIGEN_BLAS_COMMON_H
#define EIGEN_BLAS_COMMON_H #define EIGEN_BLAS_COMMON_H
#ifdef __GNUC__
# if __GNUC__<5
// GCC < 5.0 does not like the global Scalar typedef
// we just keep shadow-warnings disabled permanently
# define EIGEN_PERMANENTLY_DISABLE_STUPID_WARNINGS
# endif
#endif
#include "../Eigen/Core" #include "../Eigen/Core"
#include "../Eigen/Jacobi" #include "../Eigen/Jacobi"

View File

@ -3,7 +3,9 @@
@PACKAGE_INIT@ @PACKAGE_INIT@
include ("${CMAKE_CURRENT_LIST_DIR}/Eigen3Targets.cmake") if (NOT TARGET eigen)
include ("${CMAKE_CURRENT_LIST_DIR}/Eigen3Targets.cmake")
endif ()
# Legacy variables, do *not* use. May be removed in the future. # Legacy variables, do *not* use. May be removed in the future.

View File

@ -66,7 +66,7 @@ functions by defining EIGEN_HAS_C99_MATH=1.
Automatic detection disabled if EIGEN_MAX_CPP_VER<11. Automatic detection disabled if EIGEN_MAX_CPP_VER<11.
- \b EIGEN_HAS_CXX11_MATH - controls the implementation of some functions such as round, logp1, isinf, isnan, etc. - \b EIGEN_HAS_CXX11_MATH - controls the implementation of some functions such as round, logp1, isinf, isnan, etc.
Automatic detection disabled if EIGEN_MAX_CPP_VER<11. Automatic detection disabled if EIGEN_MAX_CPP_VER<11.
- \b EIGEN_HAS_RVALUE_REFERENCES - defines whetehr rvalue references are supported - \b EIGEN_HAS_RVALUE_REFERENCES - defines whether rvalue references are supported
Automatic detection disabled if EIGEN_MAX_CPP_VER<11. Automatic detection disabled if EIGEN_MAX_CPP_VER<11.
- \b EIGEN_HAS_STD_RESULT_OF - defines whether std::result_of is supported - \b EIGEN_HAS_STD_RESULT_OF - defines whether std::result_of is supported
Automatic detection disabled if EIGEN_MAX_CPP_VER<11. Automatic detection disabled if EIGEN_MAX_CPP_VER<11.

View File

@ -111,7 +111,7 @@ rot3 = rot1.slerp(alpha,rot2);\endcode</td></tr>
<a href="#" class="top">top</a>\section TutorialGeoTransform Affine transformations <a href="#" class="top">top</a>\section TutorialGeoTransform Affine transformations
Generic affine transformations are represented by the Transform class which internaly Generic affine transformations are represented by the Transform class which internally
is a (Dim+1)^2 matrix. In Eigen we have chosen to not distinghish between points and is a (Dim+1)^2 matrix. In Eigen we have chosen to not distinghish between points and
vectors such that all points are actually represented by displacement vectors from the vectors such that all points are actually represented by displacement vectors from the
origin ( \f$ \mathbf{p} \equiv \mathbf{p}-0 \f$ ). With that in mind, real points and origin ( \f$ \mathbf{p} \equiv \mathbf{p}-0 \f$ ). With that in mind, real points and

View File

@ -156,7 +156,7 @@ EIGEN_DECLARE_TEST(boostmultiprec)
std::cout << "NumTraits<Real>::highest() = " << NumTraits<Real>::highest() << std::endl; std::cout << "NumTraits<Real>::highest() = " << NumTraits<Real>::highest() << std::endl;
std::cout << "NumTraits<Real>::digits10() = " << NumTraits<Real>::digits10() << std::endl; std::cout << "NumTraits<Real>::digits10() = " << NumTraits<Real>::digits10() << std::endl;
// chekc stream output // check stream output
{ {
Mat A(10,10); Mat A(10,10);
A.setRandom(); A.setRandom();

View File

@ -77,6 +77,9 @@ is_same_seq_type(const T1& a, const T2& b)
#define VERIFY_EQ_INT(A,B) VERIFY_IS_APPROX(int(A),int(B)) #define VERIFY_EQ_INT(A,B) VERIFY_IS_APPROX(int(A),int(B))
// C++03 does not allow local or unnamed enums as index
enum DummyEnum { XX=0, YY=1 };
void check_indexed_view() void check_indexed_view()
{ {
using Eigen::placeholders::all; using Eigen::placeholders::all;
@ -375,9 +378,16 @@ void check_indexed_view()
} }
// Check compilation of enums as index type: // Check compilation of enums as index type:
a(XX) = 1;
A(XX,YY) = 1;
// Anonymous enums only work with C++11
#if EIGEN_HAS_CXX11
enum { X=0, Y=1 }; enum { X=0, Y=1 };
a(X) = 1; a(X) = 1;
A(X,Y) = 1; A(X,Y) = 1;
A(XX,Y) = 1;
A(X,YY) = 1;
#endif
// Check compilation of varying integer types as index types: // Check compilation of varying integer types as index types:
Index i = n/2; Index i = n/2;

View File

@ -134,8 +134,8 @@ template<typename MatrixType> void integer_type_tests(const MatrixType& m)
template<int> template<int>
void integer_types_extra() void integer_types_extra()
{ {
VERIFY_IS_EQUAL(internal::scalar_div_cost<int>::value, 8); VERIFY_IS_EQUAL(int(internal::scalar_div_cost<int>::value), 8);
VERIFY_IS_EQUAL(internal::scalar_div_cost<unsigned int>::value, 8); VERIFY_IS_EQUAL(int(internal::scalar_div_cost<unsigned int>::value), 8);
if(sizeof(long)>sizeof(int)) { if(sizeof(long)>sizeof(int)) {
VERIFY(int(internal::scalar_div_cost<long>::value) > int(internal::scalar_div_cost<int>::value)); VERIFY(int(internal::scalar_div_cost<long>::value) > int(internal::scalar_div_cost<int>::value));
VERIFY(int(internal::scalar_div_cost<unsigned long>::value) > int(internal::scalar_div_cost<int>::value)); VERIFY(int(internal::scalar_div_cost<unsigned long>::value) > int(internal::scalar_div_cost<int>::value));

View File

@ -9,8 +9,12 @@
#include "main.h" #include "main.h"
// GCC<=4.8 has spurious shadow warnings, because `ptr` re-appears inside template instantiations
// workaround: put these in an anonymous namespace
namespace {
float *ptr; float *ptr;
const float *const_ptr; const float *const_ptr;
}
template<typename PlainObjectType, template<typename PlainObjectType,
bool IsDynamicSize = PlainObjectType::SizeAtCompileTime == Dynamic, bool IsDynamicSize = PlainObjectType::SizeAtCompileTime == Dynamic,

View File

@ -68,7 +68,7 @@ template<typename MatrixType> void triangular_square(const MatrixType& m)
while (numext::abs2(m1(i,i))<RealScalar(1e-1)) m1(i,i) = internal::random<Scalar>(); while (numext::abs2(m1(i,i))<RealScalar(1e-1)) m1(i,i) = internal::random<Scalar>();
Transpose<MatrixType> trm4(m4); Transpose<MatrixType> trm4(m4);
// test back and forward subsitution with a vector as the rhs // test back and forward substitution with a vector as the rhs
m3 = m1.template triangularView<Upper>(); m3 = m1.template triangularView<Upper>();
VERIFY(v2.isApprox(m3.adjoint() * (m1.adjoint().template triangularView<Lower>().solve(v2)), largerEps)); VERIFY(v2.isApprox(m3.adjoint() * (m1.adjoint().template triangularView<Lower>().solve(v2)), largerEps));
m3 = m1.template triangularView<Lower>(); m3 = m1.template triangularView<Lower>();

View File

@ -12,6 +12,8 @@
#include <Eigen/Geometry> #include <Eigen/Geometry>
#include "../../Eigen/src/Core/util/DisableStupidWarnings.h"
namespace Eigen { namespace Eigen {
/** /**
@ -221,4 +223,6 @@ struct evaluator<AlignedVector3<Scalar> >
} }
#include "../../Eigen/src/Core/util/ReenableStupidWarnings.h"
#endif // EIGEN_ALIGNED_VECTOR3 #endif // EIGEN_ALIGNED_VECTOR3

View File

@ -11,8 +11,6 @@
#include <Eigen/Core> #include <Eigen/Core>
#include <Eigen/src/Core/util/DisableStupidWarnings.h>
/** \defgroup ArpackSupport_Module Arpack support module /** \defgroup ArpackSupport_Module Arpack support module
* *
* This module provides a wrapper to Arpack, a library for sparse eigenvalue decomposition. * This module provides a wrapper to Arpack, a library for sparse eigenvalue decomposition.
@ -23,6 +21,8 @@
*/ */
#include <Eigen/SparseCholesky> #include <Eigen/SparseCholesky>
#include <Eigen/src/Core/util/DisableStupidWarnings.h>
#include "src/Eigenvalues/ArpackSelfAdjointEigenSolver.h" #include "src/Eigenvalues/ArpackSelfAdjointEigenSolver.h"
#include <Eigen/src/Core/util/ReenableStupidWarnings.h> #include <Eigen/src/Core/util/ReenableStupidWarnings.h>

View File

@ -28,11 +28,17 @@ namespace Eigen {
//@{ //@{
} }
#include "../../Eigen/src/Core/util/DisableStupidWarnings.h"
#include "src/AutoDiff/AutoDiffScalar.h" #include "src/AutoDiff/AutoDiffScalar.h"
// #include "src/AutoDiff/AutoDiffVector.h" // #include "src/AutoDiff/AutoDiffVector.h"
#include "src/AutoDiff/AutoDiffJacobian.h" #include "src/AutoDiff/AutoDiffJacobian.h"
#include "../../Eigen/src/Core/util/ReenableStupidWarnings.h"
namespace Eigen { namespace Eigen {
//@} //@}
} }

View File

@ -26,9 +26,9 @@
#include <utility> #include <utility>
#endif #endif
#include <Eigen/src/Core/util/DisableStupidWarnings.h>
#include "../SpecialFunctions" #include "../SpecialFunctions"
#include <Eigen/src/Core/util/DisableStupidWarnings.h>
#include "src/util/CXX11Meta.h" #include "src/util/CXX11Meta.h"
#include "src/util/MaxSizeVector.h" #include "src/util/MaxSizeVector.h"

View File

@ -79,7 +79,7 @@ struct TensorOpResourceRequirements {
}; };
// Tries to merge multiple resource requirements. // Tries to merge multiple resource requirements.
EIGEN_STRONG_INLINE void MergeResourceRequirements( EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void MergeResourceRequirements(
const std::vector<TensorOpResourceRequirements>& resources, const std::vector<TensorOpResourceRequirements>& resources,
TensorBlockShapeType* block_shape, Index* block_total_size) { TensorBlockShapeType* block_shape, Index* block_total_size) {
if (resources.empty()) { if (resources.empty()) {

View File

@ -194,7 +194,7 @@ template <std::ptrdiff_t V1=0, std::ptrdiff_t V2=0, std::ptrdiff_t V3=0, std::pt
} }
#endif #endif
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE DenseIndex operator[] (const int index) const { EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index operator[] (const Index index) const {
switch (index) { switch (index) {
case 0: case 0:
return internal::get<0, Base>::value; return internal::get<0, Base>::value;
@ -208,7 +208,7 @@ template <std::ptrdiff_t V1=0, std::ptrdiff_t V2=0, std::ptrdiff_t V3=0, std::pt
return internal::get<4, Base>::value; return internal::get<4, Base>::value;
default: default:
eigen_assert(false && "index overflow"); eigen_assert(false && "index overflow");
return static_cast<DenseIndex>(-1); return static_cast<Index>(-1);
} }
} }

View File

@ -188,7 +188,7 @@ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE t array_prod(const array<t, n>& a) {
} }
template<typename t> template<typename t>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE t array_prod(const array<t, 0>& /*a*/) { EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE t array_prod(const array<t, 0>& /*a*/) {
return 0; return 1;
} }
template<typename t> template<typename t>

View File

@ -68,6 +68,8 @@
*/ */
#include "../../Eigen/src/Core/util/DisableStupidWarnings.h"
#ifdef EIGEN_FFTW_DEFAULT #ifdef EIGEN_FFTW_DEFAULT
// FFTW: faster, GPL -- incompatible with Eigen in LGPL form, bigger code size // FFTW: faster, GPL -- incompatible with Eigen in LGPL form, bigger code size
# include <fftw3.h> # include <fftw3.h>
@ -415,5 +417,8 @@ void fft_inv_proxy<T_SrcMat,T_FftIfc>::evalTo(T_DestMat& dst) const
} }
} }
#include "../../Eigen/src/Core/util/ReenableStupidWarnings.h"
#endif #endif
/* vim: set filetype=cpp et sw=2 ts=2 ai: */ /* vim: set filetype=cpp et sw=2 ts=2 ai: */

View File

@ -11,6 +11,8 @@
#define EIGEN_ITERATIVE_SOLVERS_MODULE_H #define EIGEN_ITERATIVE_SOLVERS_MODULE_H
#include <Eigen/Sparse> #include <Eigen/Sparse>
#include "../../Eigen/Jacobi"
#include "../../Eigen/Householder"
/** /**
* \defgroup IterativeSolvers_Module Iterative solvers module * \defgroup IterativeSolvers_Module Iterative solvers module
@ -24,19 +26,21 @@
*/ */
//@{ //@{
#include "../../Eigen/src/Core/util/DisableStupidWarnings.h"
#ifndef EIGEN_MPL2_ONLY #ifndef EIGEN_MPL2_ONLY
#include "src/IterativeSolvers/IterationController.h" #include "src/IterativeSolvers/IterationController.h"
#include "src/IterativeSolvers/ConstrainedConjGrad.h" #include "src/IterativeSolvers/ConstrainedConjGrad.h"
#endif #endif
#include "src/IterativeSolvers/IncompleteLU.h" #include "src/IterativeSolvers/IncompleteLU.h"
#include "../../Eigen/Jacobi"
#include "../../Eigen/Householder"
#include "src/IterativeSolvers/GMRES.h" #include "src/IterativeSolvers/GMRES.h"
#include "src/IterativeSolvers/DGMRES.h" #include "src/IterativeSolvers/DGMRES.h"
//#include "src/IterativeSolvers/SSORPreconditioner.h" //#include "src/IterativeSolvers/SSORPreconditioner.h"
#include "src/IterativeSolvers/MINRES.h" #include "src/IterativeSolvers/MINRES.h"
#include "../../Eigen/src/Core/util/ReenableStupidWarnings.h"
//@} //@}
#endif // EIGEN_ITERATIVE_SOLVERS_MODULE_H #endif // EIGEN_ITERATIVE_SOLVERS_MODULE_H

View File

@ -30,6 +30,9 @@
*/ */
#include "Eigen/SparseCore" #include "Eigen/SparseCore"
#include "../../Eigen/src/Core/util/DisableStupidWarnings.h"
#ifndef EIGEN_PARSED_BY_DOXYGEN #ifndef EIGEN_PARSED_BY_DOXYGEN
#include "src/LevenbergMarquardt/LMqrsolv.h" #include "src/LevenbergMarquardt/LMqrsolv.h"
@ -41,5 +44,6 @@
#include "src/LevenbergMarquardt/LevenbergMarquardt.h" #include "src/LevenbergMarquardt/LevenbergMarquardt.h"
#include "src/LevenbergMarquardt/LMonestep.h" #include "src/LevenbergMarquardt/LMonestep.h"
#include "../../Eigen/src/Core/util/ReenableStupidWarnings.h"
#endif // EIGEN_LEVENBERGMARQUARDT_MODULE #endif // EIGEN_LEVENBERGMARQUARDT_MODULE

View File

@ -53,12 +53,16 @@
* *
*/ */
#include "../../Eigen/src/Core/util/DisableStupidWarnings.h"
#include "src/MatrixFunctions/MatrixExponential.h" #include "src/MatrixFunctions/MatrixExponential.h"
#include "src/MatrixFunctions/MatrixFunction.h" #include "src/MatrixFunctions/MatrixFunction.h"
#include "src/MatrixFunctions/MatrixSquareRoot.h" #include "src/MatrixFunctions/MatrixSquareRoot.h"
#include "src/MatrixFunctions/MatrixLogarithm.h" #include "src/MatrixFunctions/MatrixLogarithm.h"
#include "src/MatrixFunctions/MatrixPower.h" #include "src/MatrixFunctions/MatrixPower.h"
#include "../../Eigen/src/Core/util/ReenableStupidWarnings.h"
/** /**
\page matrixbaseextra_page \page matrixbaseextra_page

View File

@ -11,10 +11,10 @@
#include <Eigen/Core> #include <Eigen/Core>
#include <Eigen/src/Core/util/DisableStupidWarnings.h>
#include <Eigen/Eigenvalues> #include <Eigen/Eigenvalues>
#include <Eigen/src/Core/util/DisableStupidWarnings.h>
// Note that EIGEN_HIDE_HEAVY_CODE has to be defined per module // Note that EIGEN_HIDE_HEAVY_CODE has to be defined per module
#if (defined EIGEN_EXTERN_INSTANTIATIONS) && (EIGEN_EXTERN_INSTANTIATIONS>=2) #if (defined EIGEN_EXTERN_INSTANTIATIONS) && (EIGEN_EXTERN_INSTANTIATIONS>=2)
#ifndef EIGEN_HIDE_HEAVY_CODE #ifndef EIGEN_HIDE_HEAVY_CODE

View File

@ -24,8 +24,12 @@ namespace Eigen
*/ */
} }
#include "../../Eigen/src/Core/util/DisableStupidWarnings.h"
#include "src/Splines/SplineFwd.h" #include "src/Splines/SplineFwd.h"
#include "src/Splines/Spline.h" #include "src/Splines/Spline.h"
#include "src/Splines/SplineFitting.h" #include "src/Splines/SplineFitting.h"
#include "../../Eigen/src/Core/util/ReenableStupidWarnings.h"
#endif // EIGEN_SPLINES_MODULE_H #endif // EIGEN_SPLINES_MODULE_H

View File

@ -173,15 +173,14 @@ namespace Eigen
EIGEN_EULER_ANGLES_CLASS_STATIC_ASSERT((unsigned)BetaAxisAbs != (unsigned)GammaAxisAbs, EIGEN_EULER_ANGLES_CLASS_STATIC_ASSERT((unsigned)BetaAxisAbs != (unsigned)GammaAxisAbs,
BETA_AXIS_CANT_BE_EQUAL_TO_GAMMA_AXIS); BETA_AXIS_CANT_BE_EQUAL_TO_GAMMA_AXIS);
enum static const int
{
// I, J, K are the pivot indexes permutation for the rotation matrix, that match this Euler system. // I, J, K are the pivot indexes permutation for the rotation matrix, that match this Euler system.
// They are used in this class converters. // They are used in this class converters.
// They are always different from each other, and their possible values are: 0, 1, or 2. // They are always different from each other, and their possible values are: 0, 1, or 2.
I = AlphaAxisAbs - 1, I = AlphaAxisAbs - 1,
J = (AlphaAxisAbs - 1 + 1 + IsOdd)%3, J = (AlphaAxisAbs - 1 + 1 + IsOdd)%3,
K = (AlphaAxisAbs - 1 + 2 - IsOdd)%3 K = (AlphaAxisAbs - 1 + 2 - IsOdd)%3
}; ;
// TODO: Get @mat parameter in form that avoids double evaluation. // TODO: Get @mat parameter in form that avoids double evaluation.
template <typename Derived> template <typename Derived>

View File

@ -234,12 +234,13 @@ struct matrix_exp_computeUV<MatrixType, float>
template <typename MatrixType> template <typename MatrixType>
struct matrix_exp_computeUV<MatrixType, double> struct matrix_exp_computeUV<MatrixType, double>
{ {
typedef typename NumTraits<typename traits<MatrixType>::Scalar>::Real RealScalar;
template <typename ArgType> template <typename ArgType>
static void run(const ArgType& arg, MatrixType& U, MatrixType& V, int& squarings) static void run(const ArgType& arg, MatrixType& U, MatrixType& V, int& squarings)
{ {
using std::frexp; using std::frexp;
using std::pow; using std::pow;
const double l1norm = arg.cwiseAbs().colwise().sum().maxCoeff(); const RealScalar l1norm = arg.cwiseAbs().colwise().sum().maxCoeff();
squarings = 0; squarings = 0;
if (l1norm < 1.495585217958292e-002) { if (l1norm < 1.495585217958292e-002) {
matrix_exp_pade3(arg, U, V); matrix_exp_pade3(arg, U, V);
@ -250,10 +251,10 @@ struct matrix_exp_computeUV<MatrixType, double>
} else if (l1norm < 2.097847961257068e+000) { } else if (l1norm < 2.097847961257068e+000) {
matrix_exp_pade9(arg, U, V); matrix_exp_pade9(arg, U, V);
} else { } else {
const double maxnorm = 5.371920351148152; const RealScalar maxnorm = 5.371920351148152;
frexp(l1norm / maxnorm, &squarings); frexp(l1norm / maxnorm, &squarings);
if (squarings < 0) squarings = 0; if (squarings < 0) squarings = 0;
MatrixType A = arg.unaryExpr(MatrixExponentialScalingOp<double>(squarings)); MatrixType A = arg.unaryExpr(MatrixExponentialScalingOp<RealScalar>(squarings));
matrix_exp_pade13(A, U, V); matrix_exp_pade13(A, U, V);
} }
} }

View File

@ -565,7 +565,7 @@ void testLmdif1()
// do the computation // do the computation
lmdif_functor functor; lmdif_functor functor;
DenseIndex nfev; DenseIndex nfev = -1; // initialize to avoid maybe-uninitialized warning
info = LevenbergMarquardt<lmdif_functor>::lmdif1(functor, x, &nfev); info = LevenbergMarquardt<lmdif_functor>::lmdif1(functor, x, &nfev);
// check return value // check return value

View File

@ -24,7 +24,7 @@ struct Functor
int m_inputs, m_values; int m_inputs, m_values;
Functor() : m_inputs(InputsAtCompileTime), m_values(ValuesAtCompileTime) {} Functor() : m_inputs(InputsAtCompileTime), m_values(ValuesAtCompileTime) {}
Functor(int inputs, int values) : m_inputs(inputs), m_values(values) {} Functor(int inputs_, int values_) : m_inputs(inputs_), m_values(values_) {}
int inputs() const { return m_inputs; } int inputs() const { return m_inputs; }
int values() const { return m_values; } int values() const { return m_values; }

View File

@ -44,7 +44,7 @@ struct TestFunc1
int m_inputs, m_values; int m_inputs, m_values;
TestFunc1() : m_inputs(InputsAtCompileTime), m_values(ValuesAtCompileTime) {} TestFunc1() : m_inputs(InputsAtCompileTime), m_values(ValuesAtCompileTime) {}
TestFunc1(int inputs, int values) : m_inputs(inputs), m_values(values) {} TestFunc1(int inputs_, int values_) : m_inputs(inputs_), m_values(values_) {}
int inputs() const { return m_inputs; } int inputs() const { return m_inputs; }
int values() const { return m_values; } int values() const { return m_values; }

View File

@ -9,7 +9,7 @@
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
#include "../../test/sparse_solver.h" #include "../../test/sparse_solver.h"
#include <Eigen/src/IterativeSolvers/DGMRES.h> #include <unsupported/Eigen/IterativeSolvers>
template<typename T> void test_dgmres_T() template<typename T> void test_dgmres_T()
{ {

View File

@ -35,7 +35,7 @@ struct TestFunc1
int m_inputs, m_values; int m_inputs, m_values;
TestFunc1() : m_inputs(InputsAtCompileTime), m_values(ValuesAtCompileTime) {} TestFunc1() : m_inputs(InputsAtCompileTime), m_values(ValuesAtCompileTime) {}
TestFunc1(int inputs, int values) : m_inputs(inputs), m_values(values) {} TestFunc1(int inputs_, int values_) : m_inputs(inputs_), m_values(values_) {}
int inputs() const { return m_inputs; } int inputs() const { return m_inputs; }
int values() const { return m_values; } int values() const { return m_values; }

View File

@ -10,8 +10,8 @@
// import basic and product tests for deprecated DynamicSparseMatrix // import basic and product tests for deprecated DynamicSparseMatrix
#define EIGEN_NO_DEPRECATED_WARNING #define EIGEN_NO_DEPRECATED_WARNING
#include "sparse_basic.cpp"
#include "sparse_product.cpp" #include "sparse_product.cpp"
#include "sparse_basic.cpp"
#include <Eigen/SparseExtra> #include <Eigen/SparseExtra>
template<typename SetterType,typename DenseType, typename Scalar, int Options> template<typename SetterType,typename DenseType, typename Scalar, int Options>