Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Thomas White
pinkindexer
Commits
a6547fce
Commit
a6547fce
authored
Feb 03, 2019
by
Yaroslav Gevorkov
Browse files
eigen update
parent
6caeec18
Changes
93
Show whitespace changes
Inline
Side-by-side
CMakeLists.txt
View file @
a6547fce
...
...
@@ -12,7 +12,7 @@ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
"MinSizeRel"
"RelWithDebInfo"
)
endif
()
find_package
(
Eigen3 3.3.
4
NO_MODULE
)
find_package
(
Eigen3 3.3.
7
NO_MODULE
)
find_package
(
OpenMP
)
include_directories
(
include
)
...
...
include/Eigen/Eigen/CMakeLists.txt
deleted
100644 → 0
View file @
6caeec18
include
(
RegexUtils
)
test_escape_string_as_regex
()
file
(
GLOB Eigen_directory_files
"*"
)
escape_string_as_regex
(
ESCAPED_CMAKE_CURRENT_SOURCE_DIR
"
${
CMAKE_CURRENT_SOURCE_DIR
}
"
)
foreach
(
f
${
Eigen_directory_files
}
)
if
(
NOT f MATCHES
"
\\
.txt"
AND NOT f MATCHES
"
${
ESCAPED_CMAKE_CURRENT_SOURCE_DIR
}
/[.].+"
AND NOT f MATCHES
"
${
ESCAPED_CMAKE_CURRENT_SOURCE_DIR
}
/src"
)
list
(
APPEND Eigen_directory_files_to_install
${
f
}
)
endif
()
endforeach
(
f
${
Eigen_directory_files
}
)
install
(
FILES
${
Eigen_directory_files_to_install
}
DESTINATION
${
INCLUDE_INSTALL_DIR
}
/Eigen COMPONENT Devel
)
install
(
DIRECTORY src DESTINATION
${
INCLUDE_INSTALL_DIR
}
/Eigen COMPONENT Devel FILES_MATCHING PATTERN
"*.h"
)
include/Eigen/Eigen/Cholesky
View file @
a6547fce
...
...
@@ -9,6 +9,7 @@
#define EIGEN_CHOLESKY_MODULE_H
#include "Core"
#include "Jacobi"
#include "src/Core/util/DisableStupidWarnings.h"
...
...
@@ -31,7 +32,11 @@
#include "src/Cholesky/LLT.h"
#include "src/Cholesky/LDLT.h"
#ifdef EIGEN_USE_LAPACKE
#ifdef EIGEN_USE_MKL
#include "mkl_lapacke.h"
#else
#include "src/misc/lapacke.h"
#endif
#include "src/Cholesky/LLT_LAPACKE.h"
#endif
...
...
include/Eigen/Eigen/Core
View file @
a6547fce
...
...
@@ -14,6 +14,22 @@
// first thing Eigen does: stop the compiler from committing suicide
#include "src/Core/util/DisableStupidWarnings.h"
#if defined(__CUDACC__) && !defined(EIGEN_NO_CUDA)
#define EIGEN_CUDACC __CUDACC__
#endif
#if defined(__CUDA_ARCH__) && !defined(EIGEN_NO_CUDA)
#define EIGEN_CUDA_ARCH __CUDA_ARCH__
#endif
#if defined(__CUDACC_VER_MAJOR__) && (__CUDACC_VER_MAJOR__ >= 9)
#define EIGEN_CUDACC_VER ((__CUDACC_VER_MAJOR__ * 10000) + (__CUDACC_VER_MINOR__ * 100))
#elif defined(__CUDACC_VER__)
#define EIGEN_CUDACC_VER __CUDACC_VER__
#else
#define EIGEN_CUDACC_VER 0
#endif
// Handle NVCC/CUDA/SYCL
#if defined(__CUDACC__) || defined(__SYCL_DEVICE_ONLY__)
// Do not try asserts on CUDA and SYCL!
...
...
@@ -37,9 +53,9 @@
#endif
#define EIGEN_DEVICE_FUNC __host__ __device__
// We need
math_f
un
c
ti
ons.hpp
to ensure that that EIGEN_USING_STD_MATH macro
// We need
cuda_r
unti
me.h
to ensure that that EIGEN_USING_STD_MATH macro
// works properly on the device side
#include <
math_f
un
c
ti
ons.hpp
>
#include <
cuda_r
unti
me.h
>
#else
#define EIGEN_DEVICE_FUNC
#endif
...
...
@@ -155,6 +171,9 @@
#ifdef __AVX512DQ__
#define EIGEN_VECTORIZE_AVX512DQ
#endif
#ifdef __AVX512ER__
#define EIGEN_VECTORIZE_AVX512ER
#endif
#endif
// include files
...
...
@@ -229,7 +248,7 @@
#if defined __CUDACC__
#define EIGEN_VECTORIZE_CUDA
#include <vector_types.h>
#if
defined __CUDACC_VER__ && _
_CUDACC_VER
__
>= 70500
#if
EIGEN
_CUDACC_VER >= 70500
#define EIGEN_HAS_CUDA_FP16
#endif
#endif
...
...
@@ -352,6 +371,7 @@ using std::ptrdiff_t;
#include "src/Core/MathFunctions.h"
#include "src/Core/GenericPacketMath.h"
#include "src/Core/MathFunctionsImpl.h"
#include "src/Core/arch/Default/ConjHelper.h"
#if defined EIGEN_VECTORIZE_AVX512
#include "src/Core/arch/SSE/PacketMath.h"
...
...
@@ -367,6 +387,7 @@ using std::ptrdiff_t;
#include "src/Core/arch/AVX/MathFunctions.h"
#include "src/Core/arch/AVX/Complex.h"
#include "src/Core/arch/AVX/TypeCasting.h"
#include "src/Core/arch/SSE/TypeCasting.h"
#elif defined EIGEN_VECTORIZE_SSE
#include "src/Core/arch/SSE/PacketMath.h"
#include "src/Core/arch/SSE/MathFunctions.h"
...
...
include/Eigen/Eigen/Eigenvalues
View file @
a6547fce
...
...
@@ -45,7 +45,11 @@
#include "src/Eigenvalues/GeneralizedEigenSolver.h"
#include "src/Eigenvalues/MatrixBaseEigenvalues.h"
#ifdef EIGEN_USE_LAPACKE
#ifdef EIGEN_USE_MKL
#include "mkl_lapacke.h"
#else
#include "src/misc/lapacke.h"
#endif
#include "src/Eigenvalues/RealSchur_LAPACKE.h"
#include "src/Eigenvalues/ComplexSchur_LAPACKE.h"
#include "src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h"
...
...
include/Eigen/Eigen/LU
View file @
a6547fce
...
...
@@ -28,7 +28,11 @@
#include "src/LU/FullPivLU.h"
#include "src/LU/PartialPivLU.h"
#ifdef EIGEN_USE_LAPACKE
#ifdef EIGEN_USE_MKL
#include "mkl_lapacke.h"
#else
#include "src/misc/lapacke.h"
#endif
#include "src/LU/PartialPivLU_LAPACKE.h"
#endif
#include "src/LU/Determinant.h"
...
...
include/Eigen/Eigen/QR
View file @
a6547fce
...
...
@@ -36,7 +36,11 @@
#include "src/QR/ColPivHouseholderQR.h"
#include "src/QR/CompleteOrthogonalDecomposition.h"
#ifdef EIGEN_USE_LAPACKE
#ifdef EIGEN_USE_MKL
#include "mkl_lapacke.h"
#else
#include "src/misc/lapacke.h"
#endif
#include "src/QR/HouseholderQR_LAPACKE.h"
#include "src/QR/ColPivHouseholderQR_LAPACKE.h"
#endif
...
...
include/Eigen/Eigen/QtAlignedMalloc
View file @
a6547fce
...
...
@@ -27,7 +27,7 @@ void qFree(void *ptr)
void
*
qRealloc
(
void
*
ptr
,
std
::
size_t
size
)
{
void
*
newPtr
=
Eigen
::
internal
::
aligned_malloc
(
size
);
memcpy
(
newPtr
,
ptr
,
size
);
std
::
memcpy
(
newPtr
,
ptr
,
size
);
Eigen
::
internal
::
aligned_free
(
ptr
);
return
newPtr
;
}
...
...
include/Eigen/Eigen/SVD
View file @
a6547fce
...
...
@@ -37,7 +37,11 @@
#include "src/SVD/JacobiSVD.h"
#include "src/SVD/BDCSVD.h"
#if defined(EIGEN_USE_LAPACKE) && !defined(EIGEN_USE_LAPACKE_STRICT)
#ifdef EIGEN_USE_MKL
#include "mkl_lapacke.h"
#else
#include "src/misc/lapacke.h"
#endif
#include "src/SVD/JacobiSVD_LAPACKE.h"
#endif
...
...
include/Eigen/Eigen/src/Cholesky/LDLT.h
View file @
a6547fce
...
...
@@ -248,7 +248,7 @@ template<typename _MatrixType, int _UpLo> class LDLT
/** \brief Reports whether previous computation was successful.
*
* \returns \c Success if computation was succesful,
* \c NumericalIssue if the
matrix.appears to be negative
.
* \c NumericalIssue if the
factorization failed because of a zero pivot
.
*/
ComputationInfo
info
()
const
{
...
...
@@ -305,7 +305,8 @@ template<> struct ldlt_inplace<Lower>
if
(
size
<=
1
)
{
transpositions
.
setIdentity
();
if
(
numext
::
real
(
mat
.
coeff
(
0
,
0
))
>
static_cast
<
RealScalar
>
(
0
)
)
sign
=
PositiveSemiDef
;
if
(
size
==
0
)
sign
=
ZeroSign
;
else
if
(
numext
::
real
(
mat
.
coeff
(
0
,
0
))
>
static_cast
<
RealScalar
>
(
0
)
)
sign
=
PositiveSemiDef
;
else
if
(
numext
::
real
(
mat
.
coeff
(
0
,
0
))
<
static_cast
<
RealScalar
>
(
0
))
sign
=
NegativeSemiDef
;
else
sign
=
ZeroSign
;
return
true
;
...
...
@@ -376,6 +377,8 @@ template<> struct ldlt_inplace<Lower>
if
((
rs
>
0
)
&&
pivot_is_valid
)
A21
/=
realAkk
;
else
if
(
rs
>
0
)
ret
=
ret
&&
(
A21
.
array
()
==
Scalar
(
0
)).
all
();
if
(
found_zero_pivot
&&
pivot_is_valid
)
ret
=
false
;
// factorization failed
else
if
(
!
pivot_is_valid
)
found_zero_pivot
=
true
;
...
...
@@ -568,13 +571,14 @@ void LDLT<_MatrixType,_UpLo>::_solve_impl(const RhsType &rhs, DstType &dst) cons
// more precisely, use pseudo-inverse of D (see bug 241)
using
std
::
abs
;
const
typename
Diagonal
<
const
MatrixType
>::
RealReturnType
vecD
(
vectorD
());
// In some previous versions, tolerance was set to the max of 1/highest
and the maximal diagonal entry * epsilon
// as motivated by LAPACK's xGELSS:
// In some previous versions, tolerance was set to the max of 1/highest
(or rather numeric_limits::min())
//
and the maximal diagonal entry * epsilon
as motivated by LAPACK's xGELSS:
// RealScalar tolerance = numext::maxi(vecD.array().abs().maxCoeff() * NumTraits<RealScalar>::epsilon(),RealScalar(1) / NumTraits<RealScalar>::highest());
// However, LDLT is not rank revealing, and so adjusting the tolerance wrt to the highest
// diagonal element is not well justified and leads to numerical issues in some cases.
// Moreover, Lapack's xSYTRS routines use 0 for the tolerance.
RealScalar
tolerance
=
RealScalar
(
1
)
/
NumTraits
<
RealScalar
>::
highest
();
// Using numeric_limits::min() gives us more robustness to denormals.
RealScalar
tolerance
=
(
std
::
numeric_limits
<
RealScalar
>::
min
)();
for
(
Index
i
=
0
;
i
<
vecD
.
size
();
++
i
)
{
...
...
include/Eigen/Eigen/src/Cholesky/LLT.h
View file @
a6547fce
...
...
@@ -41,14 +41,18 @@ template<typename MatrixType, int UpLo> struct LLT_Traits;
* Example: \include LLT_example.cpp
* Output: \verbinclude LLT_example.out
*
* \b Performance: for best performance, it is recommended to use a column-major storage format
* with the Lower triangular part (the default), or, equivalently, a row-major storage format
* with the Upper triangular part. Otherwise, you might get a 20% slowdown for the full factorization
* step, and rank-updates can be up to 3 times slower.
*
* This class supports the \link InplaceDecomposition inplace decomposition \endlink mechanism.
*
* Note that during the decomposition, only the lower (or upper, as defined by _UpLo) triangular part of A is considered.
* Therefore, the strict lower part does not have to store correct values.
*
* \sa MatrixBase::llt(), SelfAdjointView::llt(), class LDLT
*/
/* HEY THIS DOX IS DISABLED BECAUSE THERE's A BUG EITHER HERE OR IN LDLT ABOUT THAT (OR BOTH)
* Note that during the decomposition, only the upper triangular part of A is considered. Therefore,
* the strict lower part does not have to store correct values.
*/
template
<
typename
_MatrixType
,
int
_UpLo
>
class
LLT
{
public:
...
...
@@ -146,7 +150,7 @@ template<typename _MatrixType, int _UpLo> class LLT
}
template
<
typename
Derived
>
void
solveInPlace
(
MatrixBase
<
Derived
>
&
bAndX
)
const
;
void
solveInPlace
(
const
MatrixBase
<
Derived
>
&
bAndX
)
const
;
template
<
typename
InputType
>
LLT
&
compute
(
const
EigenBase
<
InputType
>&
matrix
);
...
...
@@ -177,7 +181,7 @@ template<typename _MatrixType, int _UpLo> class LLT
/** \brief Reports whether previous computation was successful.
*
* \returns \c Success if computation was succesful,
* \c NumericalIssue if the matrix.appears to be
negativ
e.
* \c NumericalIssue if the matrix.appears
not
to be
positive definit
e.
*/
ComputationInfo
info
()
const
{
...
...
@@ -425,6 +429,7 @@ LLT<MatrixType,_UpLo>& LLT<MatrixType,_UpLo>::compute(const EigenBase<InputType>
eigen_assert
(
a
.
rows
()
==
a
.
cols
());
const
Index
size
=
a
.
rows
();
m_matrix
.
resize
(
size
,
size
);
if
(
!
internal
::
is_same_dense
(
m_matrix
,
a
.
derived
()))
m_matrix
=
a
.
derived
();
// Compute matrix L1 norm = max abs column sum.
...
...
@@ -485,11 +490,14 @@ void LLT<_MatrixType,_UpLo>::_solve_impl(const RhsType &rhs, DstType &dst) const
*
* This version avoids a copy when the right hand side matrix b is not needed anymore.
*
* \warning The parameter is only marked 'const' to make the C++ compiler accept a temporary expression here.
* This function will const_cast it, so constness isn't honored here.
*
* \sa LLT::solve(), MatrixBase::llt()
*/
template
<
typename
MatrixType
,
int
_UpLo
>
template
<
typename
Derived
>
void
LLT
<
MatrixType
,
_UpLo
>::
solveInPlace
(
MatrixBase
<
Derived
>
&
bAndX
)
const
void
LLT
<
MatrixType
,
_UpLo
>::
solveInPlace
(
const
MatrixBase
<
Derived
>
&
bAndX
)
const
{
eigen_assert
(
m_isInitialized
&&
"LLT is not initialized."
);
eigen_assert
(
m_matrix
.
rows
()
==
bAndX
.
rows
());
...
...
include/Eigen/Eigen/src/Core/Array.h
View file @
a6547fce
...
...
@@ -153,8 +153,6 @@ class Array
:
Base
(
std
::
move
(
other
))
{
Base
::
_check_template_params
();
if
(
RowsAtCompileTime
!=
Dynamic
&&
ColsAtCompileTime
!=
Dynamic
)
Base
::
_set_noalias
(
other
);
}
EIGEN_DEVICE_FUNC
Array
&
operator
=
(
Array
&&
other
)
EIGEN_NOEXCEPT_IF
(
std
::
is_nothrow_move_assignable
<
Scalar
>::
value
)
...
...
include/Eigen/Eigen/src/Core/AssignEvaluator.h
View file @
a6547fce
...
...
@@ -39,7 +39,7 @@ public:
enum
{
DstAlignment
=
DstEvaluator
::
Alignment
,
SrcAlignment
=
SrcEvaluator
::
Alignment
,
DstHasDirectAccess
=
DstFlags
&
DirectAccessBit
,
DstHasDirectAccess
=
(
DstFlags
&
DirectAccessBit
)
==
DirectAccessBit
,
JointAlignment
=
EIGEN_PLAIN_ENUM_MIN
(
DstAlignment
,
SrcAlignment
)
};
...
...
@@ -83,7 +83,7 @@ private:
&&
int
(
OuterStride
)
!=
Dynamic
&&
int
(
OuterStride
)
%
int
(
InnerPacketSize
)
==
0
&&
(
EIGEN_UNALIGNED_VECTORIZE
||
int
(
JointAlignment
)
>=
int
(
InnerRequiredAlignment
)),
MayLinearize
=
bool
(
StorageOrdersAgree
)
&&
(
int
(
DstFlags
)
&
int
(
SrcFlags
)
&
LinearAccessBit
),
MayLinearVectorize
=
bool
(
MightVectorize
)
&&
MayLinearize
&&
DstHasDirectAccess
MayLinearVectorize
=
bool
(
MightVectorize
)
&&
bool
(
MayLinearize
)
&&
bool
(
DstHasDirectAccess
)
&&
(
EIGEN_UNALIGNED_VECTORIZE
||
(
int
(
DstAlignment
)
>=
int
(
LinearRequiredAlignment
))
||
MaxSizeAtCompileTime
==
Dynamic
),
/* If the destination isn't aligned, we have to do runtime checks and we don't unroll,
so it's only good for large enough sizes. */
...
...
include/Eigen/Eigen/src/Core/Assign_MKL.h
View file @
a6547fce
...
...
@@ -84,7 +84,8 @@ class vml_assign_traits
struct Assignment<DstXprType, CwiseUnaryOp<scalar_##EIGENOP##_op<EIGENTYPE>, SrcXprNested>, assign_op<EIGENTYPE,EIGENTYPE>, \
Dense2Dense, typename enable_if<vml_assign_traits<DstXprType,SrcXprNested>::EnableVml>::type> { \
typedef CwiseUnaryOp<scalar_##EIGENOP##_op<EIGENTYPE>, SrcXprNested> SrcXprType; \
static void run(DstXprType &dst, const SrcXprType &src, const assign_op<EIGENTYPE,EIGENTYPE> &
/*func*/
) { \
static void run(DstXprType &dst, const SrcXprType &src, const assign_op<EIGENTYPE,EIGENTYPE> &func) { \
resize_if_allowed(dst, src, func); \
eigen_assert(dst.rows() == src.rows() && dst.cols() == src.cols()); \
if(vml_assign_traits<DstXprType,SrcXprNested>::Traversal==LinearTraversal) { \
VMLOP(dst.size(), (const VMLTYPE*)src.nestedExpression().data(), \
...
...
@@ -144,7 +145,8 @@ EIGEN_MKL_VML_DECLARE_UNARY_CALLS_REAL(ceil, Ceil, _)
Dense2Dense, typename enable_if<vml_assign_traits<DstXprType,SrcXprNested>::EnableVml>::type> { \
typedef CwiseBinaryOp<scalar_##EIGENOP##_op<EIGENTYPE,EIGENTYPE>, SrcXprNested, \
const CwiseNullaryOp<internal::scalar_constant_op<EIGENTYPE>,Plain> > SrcXprType; \
static void run(DstXprType &dst, const SrcXprType &src, const assign_op<EIGENTYPE,EIGENTYPE> &
/*func*/
) { \
static void run(DstXprType &dst, const SrcXprType &src, const assign_op<EIGENTYPE,EIGENTYPE> &func) { \
resize_if_allowed(dst, src, func); \
eigen_assert(dst.rows() == src.rows() && dst.cols() == src.cols()); \
VMLTYPE exponent = reinterpret_cast<const VMLTYPE&>(src.rhs().functor().m_other); \
if(vml_assign_traits<DstXprType,SrcXprNested>::Traversal==LinearTraversal) \
...
...
include/Eigen/Eigen/src/Core/ConditionEstimator.h
View file @
a6547fce
...
...
@@ -160,7 +160,7 @@ rcond_estimate_helper(typename Decomposition::RealScalar matrix_norm, const Deco
{
typedef
typename
Decomposition
::
RealScalar
RealScalar
;
eigen_assert
(
dec
.
rows
()
==
dec
.
cols
());
if
(
dec
.
rows
()
==
0
)
return
RealScalar
(
1
);
if
(
dec
.
rows
()
==
0
)
return
NumTraits
<
RealScalar
>::
infinity
(
);
if
(
matrix_norm
==
RealScalar
(
0
))
return
RealScalar
(
0
);
if
(
dec
.
rows
()
==
1
)
return
RealScalar
(
1
);
const
RealScalar
inverse_matrix_norm
=
rcond_invmatrix_L1_norm_estimate
(
dec
);
...
...
include/Eigen/Eigen/src/Core/CoreEvaluators.h
View file @
a6547fce
...
...
@@ -977,7 +977,7 @@ struct evaluator<Block<ArgType, BlockRows, BlockCols, InnerPanel> >
OuterStrideAtCompileTime
=
HasSameStorageOrderAsArgType
?
int
(
outer_stride_at_compile_time
<
ArgType
>::
ret
)
:
int
(
inner_stride_at_compile_time
<
ArgType
>::
ret
),
MaskPacketAccessBit
=
(
InnerStrideAtCompileTime
==
1
)
?
PacketAccessBit
:
0
,
MaskPacketAccessBit
=
(
InnerStrideAtCompileTime
==
1
||
HasSameStorageOrderAsArgType
)
?
PacketAccessBit
:
0
,
FlagsLinearAccessBit
=
(
RowsAtCompileTime
==
1
||
ColsAtCompileTime
==
1
||
(
InnerPanel
&&
(
evaluator
<
ArgType
>::
Flags
&
LinearAccessBit
)))
?
LinearAccessBit
:
0
,
FlagsRowMajorBit
=
XprType
::
Flags
&
RowMajorBit
,
...
...
@@ -987,7 +987,9 @@ struct evaluator<Block<ArgType, BlockRows, BlockCols, InnerPanel> >
Flags
=
Flags0
|
FlagsLinearAccessBit
|
FlagsRowMajorBit
,
PacketAlignment
=
unpacket_traits
<
PacketScalar
>::
alignment
,
Alignment0
=
(
InnerPanel
&&
(
OuterStrideAtCompileTime
!=
Dynamic
)
&&
(((
OuterStrideAtCompileTime
*
int
(
sizeof
(
Scalar
)))
%
int
(
PacketAlignment
))
==
0
))
?
int
(
PacketAlignment
)
:
0
,
Alignment0
=
(
InnerPanel
&&
(
OuterStrideAtCompileTime
!=
Dynamic
)
&&
(
OuterStrideAtCompileTime
!=
0
)
&&
(((
OuterStrideAtCompileTime
*
int
(
sizeof
(
Scalar
)))
%
int
(
PacketAlignment
))
==
0
))
?
int
(
PacketAlignment
)
:
0
,
Alignment
=
EIGEN_PLAIN_ENUM_MIN
(
evaluator
<
ArgType
>::
Alignment
,
Alignment0
)
};
typedef
block_evaluator
<
ArgType
,
BlockRows
,
BlockCols
,
InnerPanel
>
block_evaluator_type
;
...
...
@@ -1018,14 +1020,16 @@ struct unary_evaluator<Block<ArgType, BlockRows, BlockCols, InnerPanel>, IndexBa
EIGEN_DEVICE_FUNC
explicit
unary_evaluator
(
const
XprType
&
block
)
:
m_argImpl
(
block
.
nestedExpression
()),
m_startRow
(
block
.
startRow
()),
m_startCol
(
block
.
startCol
())
m_startCol
(
block
.
startCol
()),
m_linear_offset
(
InnerPanel
?
(
XprType
::
IsRowMajor
?
block
.
startRow
()
*
block
.
cols
()
:
block
.
startCol
()
*
block
.
rows
())
:
0
)
{
}
typedef
typename
XprType
::
Scalar
Scalar
;
typedef
typename
XprType
::
CoeffReturnType
CoeffReturnType
;
enum
{
RowsAtCompileTime
=
XprType
::
RowsAtCompileTime
RowsAtCompileTime
=
XprType
::
RowsAtCompileTime
,
ForwardLinearAccess
=
InnerPanel
&&
bool
(
evaluator
<
ArgType
>::
Flags
&
LinearAccessBit
)
};
EIGEN_DEVICE_FUNC
EIGEN_STRONG_INLINE
...
...
@@ -1037,6 +1041,9 @@ struct unary_evaluator<Block<ArgType, BlockRows, BlockCols, InnerPanel>, IndexBa
EIGEN_DEVICE_FUNC
EIGEN_STRONG_INLINE
CoeffReturnType
coeff
(
Index
index
)
const
{
if
(
ForwardLinearAccess
)
return
m_argImpl
.
coeff
(
m_linear_offset
.
value
()
+
index
);
else
return
coeff
(
RowsAtCompileTime
==
1
?
0
:
index
,
RowsAtCompileTime
==
1
?
index
:
0
);
}
...
...
@@ -1049,6 +1056,9 @@ struct unary_evaluator<Block<ArgType, BlockRows, BlockCols, InnerPanel>, IndexBa
EIGEN_DEVICE_FUNC
EIGEN_STRONG_INLINE
Scalar
&
coeffRef
(
Index
index
)
{
if
(
ForwardLinearAccess
)
return
m_argImpl
.
coeffRef
(
m_linear_offset
.
value
()
+
index
);
else
return
coeffRef
(
RowsAtCompileTime
==
1
?
0
:
index
,
RowsAtCompileTime
==
1
?
index
:
0
);
}
...
...
@@ -1063,6 +1073,9 @@ struct unary_evaluator<Block<ArgType, BlockRows, BlockCols, InnerPanel>, IndexBa
EIGEN_STRONG_INLINE
PacketType
packet
(
Index
index
)
const
{
if
(
ForwardLinearAccess
)
return
m_argImpl
.
template
packet
<
LoadMode
,
PacketType
>(
m_linear_offset
.
value
()
+
index
);
else
return
packet
<
LoadMode
,
PacketType
>
(
RowsAtCompileTime
==
1
?
0
:
index
,
RowsAtCompileTime
==
1
?
index
:
0
);
}
...
...
@@ -1078,6 +1091,9 @@ struct unary_evaluator<Block<ArgType, BlockRows, BlockCols, InnerPanel>, IndexBa
EIGEN_STRONG_INLINE
void
writePacket
(
Index
index
,
const
PacketType
&
x
)
{
if
(
ForwardLinearAccess
)
return
m_argImpl
.
template
writePacket
<
StoreMode
,
PacketType
>(
m_linear_offset
.
value
()
+
index
,
x
);
else
return
writePacket
<
StoreMode
,
PacketType
>
(
RowsAtCompileTime
==
1
?
0
:
index
,
RowsAtCompileTime
==
1
?
index
:
0
,
x
);
...
...
@@ -1087,6 +1103,7 @@ protected:
evaluator
<
ArgType
>
m_argImpl
;
const
variable_if_dynamic
<
Index
,
(
ArgType
::
RowsAtCompileTime
==
1
&&
BlockRows
==
1
)
?
0
:
Dynamic
>
m_startRow
;
const
variable_if_dynamic
<
Index
,
(
ArgType
::
ColsAtCompileTime
==
1
&&
BlockCols
==
1
)
?
0
:
Dynamic
>
m_startCol
;
const
variable_if_dynamic
<
Index
,
InnerPanel
?
Dynamic
:
0
>
m_linear_offset
;
};
// TODO: This evaluator does not actually use the child evaluator;
...
...
include/Eigen/Eigen/src/Core/Diagonal.h
View file @
a6547fce
...
...
@@ -70,7 +70,10 @@ template<typename MatrixType, int _DiagIndex> class Diagonal
EIGEN_DENSE_PUBLIC_INTERFACE
(
Diagonal
)
EIGEN_DEVICE_FUNC
explicit
inline
Diagonal
(
MatrixType
&
matrix
,
Index
a_index
=
DiagIndex
)
:
m_matrix
(
matrix
),
m_index
(
a_index
)
{}
explicit
inline
Diagonal
(
MatrixType
&
matrix
,
Index
a_index
=
DiagIndex
)
:
m_matrix
(
matrix
),
m_index
(
a_index
)
{
eigen_assert
(
a_index
<=
m_matrix
.
cols
()
&&
-
a_index
<=
m_matrix
.
rows
()
);
}
EIGEN_INHERIT_ASSIGNMENT_OPERATORS
(
Diagonal
)
...
...
include/Eigen/Eigen/src/Core/Dot.h
View file @
a6547fce
...
...
@@ -31,7 +31,8 @@ struct dot_nocheck
typedef
scalar_conj_product_op
<
typename
traits
<
T
>::
Scalar
,
typename
traits
<
U
>::
Scalar
>
conj_prod
;
typedef
typename
conj_prod
::
result_type
ResScalar
;
EIGEN_DEVICE_FUNC
static
inline
ResScalar
run
(
const
MatrixBase
<
T
>&
a
,
const
MatrixBase
<
U
>&
b
)
EIGEN_STRONG_INLINE
static
ResScalar
run
(
const
MatrixBase
<
T
>&
a
,
const
MatrixBase
<
U
>&
b
)
{
return
a
.
template
binaryExpr
<
conj_prod
>(
b
).
sum
();
}
...
...
@@ -43,7 +44,8 @@ struct dot_nocheck<T, U, true>
typedef
scalar_conj_product_op
<
typename
traits
<
T
>::
Scalar
,
typename
traits
<
U
>::
Scalar
>
conj_prod
;
typedef
typename
conj_prod
::
result_type
ResScalar
;
EIGEN_DEVICE_FUNC
static
inline
ResScalar
run
(
const
MatrixBase
<
T
>&
a
,
const
MatrixBase
<
U
>&
b
)
EIGEN_STRONG_INLINE
static
ResScalar
run
(
const
MatrixBase
<
T
>&
a
,
const
MatrixBase
<
U
>&
b
)
{
return
a
.
transpose
().
template
binaryExpr
<
conj_prod
>(
b
).
sum
();
}
...
...
@@ -65,6 +67,7 @@ struct dot_nocheck<T, U, true>
template
<
typename
Derived
>
template
<
typename
OtherDerived
>
EIGEN_DEVICE_FUNC
EIGEN_STRONG_INLINE
typename
ScalarBinaryOpTraits
<
typename
internal
::
traits
<
Derived
>::
Scalar
,
typename
internal
::
traits
<
OtherDerived
>::
Scalar
>::
ReturnType
MatrixBase
<
Derived
>::
dot
(
const
MatrixBase
<
OtherDerived
>&
other
)
const
{
...
...
@@ -102,7 +105,7 @@ EIGEN_STRONG_INLINE typename NumTraits<typename internal::traits<Derived>::Scala
* \sa lpNorm(), dot(), squaredNorm()
*/
template
<
typename
Derived
>
inline
typename
NumTraits
<
typename
internal
::
traits
<
Derived
>::
Scalar
>::
Real
MatrixBase
<
Derived
>::
norm
()
const
EIGEN_STRONG_INLINE
typename
NumTraits
<
typename
internal
::
traits
<
Derived
>::
Scalar
>::
Real
MatrixBase
<
Derived
>::
norm
()
const
{
return
numext
::
sqrt
(
squaredNorm
());
}
...
...
@@ -117,7 +120,7 @@ inline typename NumTraits<typename internal::traits<Derived>::Scalar>::Real Matr
* \sa norm(), normalize()
*/
template
<
typename
Derived
>
inline
const
typename
MatrixBase
<
Derived
>::
PlainObject
EIGEN_STRONG_INLINE
const
typename
MatrixBase
<
Derived
>::
PlainObject
MatrixBase
<
Derived
>::
normalized
()
const
{
typedef
typename
internal
::
nested_eval
<
Derived
,
2
>::
type
_Nested
;
...
...
@@ -139,7 +142,7 @@ MatrixBase<Derived>::normalized() const
* \sa norm(), normalized()
*/
template
<
typename
Derived
>
inline
void
MatrixBase
<
Derived
>::
normalize
()
EIGEN_STRONG_INLINE
void
MatrixBase
<
Derived
>::
normalize
()
{
RealScalar
z
=
squaredNorm
();
// NOTE: after extensive benchmarking, this conditional does not impact performance, at least on recent x86 CPU
...
...
@@ -160,7 +163,7 @@ inline void MatrixBase<Derived>::normalize()
* \sa stableNorm(), stableNormalize(), normalized()
*/
template
<
typename
Derived
>
inline
const
typename
MatrixBase
<
Derived
>::
PlainObject
EIGEN_STRONG_INLINE
const
typename
MatrixBase
<
Derived
>::
PlainObject
MatrixBase
<
Derived
>::
stableNormalized
()
const
{
typedef
typename
internal
::
nested_eval
<
Derived
,
3
>::
type
_Nested
;
...
...
@@ -185,7 +188,7 @@ MatrixBase<Derived>::stableNormalized() const
* \sa stableNorm(), stableNormalized(), normalize()
*/
template
<
typename
Derived
>
inline
void
MatrixBase
<
Derived
>::
stableNormalize
()
EIGEN_STRONG_INLINE
void
MatrixBase
<
Derived
>::
stableNormalize
()
{
RealScalar
w
=
cwiseAbs
().
maxCoeff
();
RealScalar
z
=
(
derived
()
/
w
).
squaredNorm
();
...
...
include/Eigen/Eigen/src/Core/GeneralProduct.h
View file @
a6547fce
...
...
@@ -24,9 +24,14 @@ template<int Rows, int Cols, int Depth> struct product_type_selector;
template
<
int
Size
,
int
MaxSize
>
struct
product_size_category
{
enum
{
is_large
=
MaxSize
==
Dynamic
||
enum
{
#ifndef EIGEN_CUDA_ARCH
is_large
=
MaxSize
==
Dynamic
||
Size
>=
EIGEN_CACHEFRIENDLY_PRODUCT_THRESHOLD
||
(
Size
==
Dynamic
&&
MaxSize
>=
EIGEN_CACHEFRIENDLY_PRODUCT_THRESHOLD
),
#else
is_large
=
0
,
#endif
value
=
is_large
?
Large
:
Size
==
1
?
1
:
Small
...
...
@@ -379,8 +384,6 @@ template<> struct gemv_dense_selector<OnTheRight,RowMajor,false>
*
* \sa lazyProduct(), operator*=(const MatrixBase&), Cwise::operator*()
*/
#ifndef __CUDACC__
template
<
typename
Derived
>
template
<
typename
OtherDerived
>
inline
const
Product
<
Derived
,
OtherDerived
>
...
...
@@ -412,8 +415,6 @@ MatrixBase<Derived>::operator*(const MatrixBase<OtherDerived> &other) const
return
Product
<
Derived
,
OtherDerived
>
(
derived
(),
other
.
derived
());
}
#endif // __CUDACC__
/** \returns an expression of the matrix product of \c *this and \a other without implicit evaluation.
*
* The returned product will behave like any other expressions: the coefficients of the product will be
...
...
include/Eigen/Eigen/src/Core/Map.h
View file @
a6547fce
...
...
@@ -20,11 +20,17 @@ struct traits<Map<PlainObjectType, MapOptions, StrideType> >
{
typedef
traits
<
PlainObjectType
>
TraitsBase
;
enum
{
PlainObjectTypeInnerSize
=
((
traits
<
PlainObjectType
>::
Flags
&
RowMajorBit
)
==
RowMajorBit
)
?
PlainObjectType
::
ColsAtCompileTime
:
PlainObjectType
::
RowsAtCompileTime
,
InnerStrideAtCompileTime
=
StrideType
::
InnerStrideAtCompileTime
==
0
?
int
(
PlainObjectType
::
InnerStrideAtCompileTime
)
:
int
(
StrideType
::
InnerStrideAtCompileTime
),
OuterStrideAtCompileTime
=
StrideType
::
OuterStrideAtCompileTime
==
0
?
int
(
PlainObjectType
::
OuterStrideAtCompileTime
)
?
(
InnerStrideAtCompileTime
==
Dynamic
||
PlainObjectTypeInnerSize
==
Dynamic
?
Dynamic
:
int
(
InnerStrideAtCompileTime
)
*
int
(
PlainObjectTypeInnerSize
))
:
int
(
StrideType
::
OuterStrideAtCompileTime
),
Alignment
=
int
(
MapOptions
)
&
int
(
AlignedMask
),
Flags0
=
TraitsBase
::
Flags
&
(
~
NestByRefBit
),
...
...
@@ -107,10 +113,11 @@ template<typename PlainObjectType, int MapOptions, typename StrideType> class Ma
EIGEN_DEVICE_FUNC
inline
Index
outerStride
()
const
{
return
StrideType
::
OuterStrideAtCompileTime
!=
0
?
m_stride
.
outer
()
:
IsVectorAtCompileTime
?
this
->
size
()
:
int
(
Flags
)
&
RowMajorBit
?
this
->
cols
()
:
this
->
rows
();
return
int
(
StrideType
::
OuterStrideAtCompileTime
)
!=
0
?
m_stride
.
outer
()
:
int
(
internal
::
traits
<
Map
>::
OuterStrideAtCompileTime
)
!=
Dynamic
?
Index
(
internal
::
traits
<
Map
>::
OuterStrideAtCompileTime
)
:
IsVectorAtCompileTime
?
(
this
->
size
()
*
innerStride
())
:
(
int
(
Flags
)
&
RowMajorBit
)
?
(
this
->
cols
()
*
innerStride
())
:
(
this
->
rows
()
*
innerStride
());
}
/** Constructor in the fixed-size case.
...
...
Prev
1
2
3
4
5
Next
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment