@smake/eigen 1.0.1 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/eigen/COPYING.APACHE +203 -0
- package/eigen/COPYING.BSD +1 -1
- package/eigen/COPYING.MINPACK +51 -52
- package/eigen/Eigen/Cholesky +0 -1
- package/eigen/Eigen/Core +108 -266
- package/eigen/Eigen/Eigenvalues +0 -1
- package/eigen/Eigen/Geometry +3 -6
- package/eigen/Eigen/Householder +0 -1
- package/eigen/Eigen/Jacobi +0 -1
- package/eigen/Eigen/KLUSupport +41 -0
- package/eigen/Eigen/LU +2 -5
- package/eigen/Eigen/OrderingMethods +0 -3
- package/eigen/Eigen/PaStiXSupport +1 -0
- package/eigen/Eigen/PardisoSupport +0 -0
- package/eigen/Eigen/QR +0 -1
- package/eigen/Eigen/QtAlignedMalloc +0 -1
- package/eigen/Eigen/SVD +0 -1
- package/eigen/Eigen/Sparse +0 -2
- package/eigen/Eigen/SparseCholesky +0 -8
- package/eigen/Eigen/SparseLU +4 -0
- package/eigen/Eigen/src/Cholesky/LDLT.h +42 -27
- package/eigen/Eigen/src/Cholesky/LLT.h +39 -23
- package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +90 -47
- package/eigen/Eigen/src/Core/ArithmeticSequence.h +413 -0
- package/eigen/Eigen/src/Core/Array.h +99 -11
- package/eigen/Eigen/src/Core/ArrayBase.h +1 -1
- package/eigen/Eigen/src/Core/ArrayWrapper.h +21 -21
- package/eigen/Eigen/src/Core/Assign.h +1 -1
- package/eigen/Eigen/src/Core/AssignEvaluator.h +125 -50
- package/eigen/Eigen/src/Core/Assign_MKL.h +10 -10
- package/eigen/Eigen/src/Core/BandMatrix.h +16 -16
- package/eigen/Eigen/src/Core/Block.h +56 -60
- package/eigen/Eigen/src/Core/BooleanRedux.h +29 -31
- package/eigen/Eigen/src/Core/CommaInitializer.h +7 -3
- package/eigen/Eigen/src/Core/CoreEvaluators.h +325 -272
- package/eigen/Eigen/src/Core/CoreIterators.h +5 -0
- package/eigen/Eigen/src/Core/CwiseBinaryOp.h +21 -22
- package/eigen/Eigen/src/Core/CwiseNullaryOp.h +153 -18
- package/eigen/Eigen/src/Core/CwiseUnaryOp.h +6 -6
- package/eigen/Eigen/src/Core/CwiseUnaryView.h +12 -10
- package/eigen/Eigen/src/Core/DenseBase.h +128 -39
- package/eigen/Eigen/src/Core/DenseCoeffsBase.h +25 -21
- package/eigen/Eigen/src/Core/DenseStorage.h +150 -68
- package/eigen/Eigen/src/Core/Diagonal.h +21 -23
- package/eigen/Eigen/src/Core/DiagonalMatrix.h +50 -2
- package/eigen/Eigen/src/Core/DiagonalProduct.h +1 -1
- package/eigen/Eigen/src/Core/Dot.h +10 -10
- package/eigen/Eigen/src/Core/EigenBase.h +10 -9
- package/eigen/Eigen/src/Core/ForceAlignedAccess.h +8 -4
- package/eigen/Eigen/src/Core/Fuzzy.h +3 -3
- package/eigen/Eigen/src/Core/GeneralProduct.h +20 -10
- package/eigen/Eigen/src/Core/GenericPacketMath.h +597 -147
- package/eigen/Eigen/src/Core/GlobalFunctions.h +40 -33
- package/eigen/Eigen/src/Core/IO.h +40 -7
- package/eigen/Eigen/src/Core/IndexedView.h +237 -0
- package/eigen/Eigen/src/Core/Inverse.h +9 -10
- package/eigen/Eigen/src/Core/Map.h +7 -7
- package/eigen/Eigen/src/Core/MapBase.h +5 -3
- package/eigen/Eigen/src/Core/MathFunctions.h +756 -120
- package/eigen/Eigen/src/Core/MathFunctionsImpl.h +118 -19
- package/eigen/Eigen/src/Core/Matrix.h +131 -25
- package/eigen/Eigen/src/Core/MatrixBase.h +19 -2
- package/eigen/Eigen/src/Core/NestByValue.h +25 -50
- package/eigen/Eigen/src/Core/NoAlias.h +4 -3
- package/eigen/Eigen/src/Core/NumTraits.h +107 -20
- package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +232 -0
- package/eigen/Eigen/src/Core/PermutationMatrix.h +3 -3
- package/eigen/Eigen/src/Core/PlainObjectBase.h +145 -54
- package/eigen/Eigen/src/Core/Product.h +30 -25
- package/eigen/Eigen/src/Core/ProductEvaluators.h +183 -142
- package/eigen/Eigen/src/Core/Random.h +37 -1
- package/eigen/Eigen/src/Core/Redux.h +180 -170
- package/eigen/Eigen/src/Core/Ref.h +118 -21
- package/eigen/Eigen/src/Core/Replicate.h +8 -8
- package/eigen/Eigen/src/Core/Reshaped.h +454 -0
- package/eigen/Eigen/src/Core/ReturnByValue.h +7 -5
- package/eigen/Eigen/src/Core/Reverse.h +18 -12
- package/eigen/Eigen/src/Core/Select.h +8 -6
- package/eigen/Eigen/src/Core/SelfAdjointView.h +33 -20
- package/eigen/Eigen/src/Core/Solve.h +14 -14
- package/eigen/Eigen/src/Core/SolveTriangular.h +13 -13
- package/eigen/Eigen/src/Core/SolverBase.h +41 -3
- package/eigen/Eigen/src/Core/StableNorm.h +100 -70
- package/eigen/Eigen/src/Core/StlIterators.h +463 -0
- package/eigen/Eigen/src/Core/Stride.h +9 -4
- package/eigen/Eigen/src/Core/Swap.h +5 -4
- package/eigen/Eigen/src/Core/Transpose.h +86 -27
- package/eigen/Eigen/src/Core/Transpositions.h +26 -8
- package/eigen/Eigen/src/Core/TriangularMatrix.h +88 -72
- package/eigen/Eigen/src/Core/VectorBlock.h +5 -5
- package/eigen/Eigen/src/Core/VectorwiseOp.h +159 -70
- package/eigen/Eigen/src/Core/Visitor.h +137 -29
- package/eigen/Eigen/src/Core/arch/AVX/Complex.h +50 -129
- package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +126 -337
- package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +1092 -155
- package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +65 -1
- package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +422 -0
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +186 -213
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1250 -252
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +89 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +152 -165
- package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +19 -251
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2937 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +221 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +629 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +2042 -392
- package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +235 -80
- package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +700 -0
- package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +102 -14
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1649 -0
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +110 -0
- package/eigen/Eigen/src/Core/arch/Default/Half.h +942 -0
- package/eigen/Eigen/src/Core/arch/Default/Settings.h +1 -1
- package/eigen/Eigen/src/Core/arch/Default/TypeCasting.h +120 -0
- package/eigen/Eigen/src/Core/arch/{CUDA → GPU}/MathFunctions.h +16 -4
- package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1685 -0
- package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +80 -0
- package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
- package/eigen/Eigen/src/Core/arch/MSA/Complex.h +648 -0
- package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +387 -0
- package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1233 -0
- package/eigen/Eigen/src/Core/arch/NEON/Complex.h +313 -219
- package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +183 -0
- package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +54 -70
- package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +4376 -549
- package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1419 -0
- package/eigen/Eigen/src/Core/arch/SSE/Complex.h +59 -179
- package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +65 -428
- package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +893 -283
- package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +65 -0
- package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +44 -0
- package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +752 -0
- package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +49 -0
- package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +232 -0
- package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +301 -0
- package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +670 -0
- package/eigen/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +694 -0
- package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +85 -0
- package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +212 -183
- package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +101 -5
- package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +510 -395
- package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +11 -2
- package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +112 -46
- package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +31 -30
- package/eigen/Eigen/src/Core/functors/StlFunctors.h +32 -2
- package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +354 -15
- package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1073 -585
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +29 -7
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +4 -4
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +1 -1
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +382 -483
- package/eigen/Eigen/src/Core/products/Parallelizer.h +23 -9
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +23 -6
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +8 -6
- package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +2 -2
- package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +5 -4
- package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +3 -3
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +5 -3
- package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +13 -10
- package/eigen/Eigen/src/Core/util/BlasUtil.h +208 -124
- package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +512 -0
- package/eigen/Eigen/src/Core/util/Constants.h +25 -9
- package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +14 -2
- package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +28 -4
- package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +186 -0
- package/eigen/Eigen/src/Core/util/IntegralConstant.h +272 -0
- package/eigen/Eigen/src/Core/util/MKL_support.h +8 -1
- package/eigen/Eigen/src/Core/util/Macros.h +661 -250
- package/eigen/Eigen/src/Core/util/Memory.h +222 -52
- package/eigen/Eigen/src/Core/util/Meta.h +349 -105
- package/eigen/Eigen/src/Core/util/ReshapedHelper.h +51 -0
- package/eigen/Eigen/src/Core/util/StaticAssert.h +8 -5
- package/eigen/Eigen/src/Core/util/SymbolicIndex.h +293 -0
- package/eigen/Eigen/src/Core/util/XprHelper.h +48 -30
- package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +1 -1
- package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +1 -1
- package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +2 -2
- package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +1 -1
- package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +2 -2
- package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +2 -2
- package/eigen/Eigen/src/Eigenvalues/RealQZ.h +9 -6
- package/eigen/Eigen/src/Eigenvalues/RealSchur.h +10 -5
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +75 -42
- package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +20 -15
- package/eigen/Eigen/src/Geometry/AlignedBox.h +99 -5
- package/eigen/Eigen/src/Geometry/AngleAxis.h +4 -4
- package/eigen/Eigen/src/Geometry/EulerAngles.h +3 -3
- package/eigen/Eigen/src/Geometry/Homogeneous.h +15 -11
- package/eigen/Eigen/src/Geometry/Hyperplane.h +1 -1
- package/eigen/Eigen/src/Geometry/OrthoMethods.h +3 -2
- package/eigen/Eigen/src/Geometry/ParametrizedLine.h +39 -2
- package/eigen/Eigen/src/Geometry/Quaternion.h +52 -14
- package/eigen/Eigen/src/Geometry/Rotation2D.h +3 -3
- package/eigen/Eigen/src/Geometry/Scaling.h +22 -4
- package/eigen/Eigen/src/Geometry/Transform.h +86 -65
- package/eigen/Eigen/src/Geometry/Translation.h +6 -6
- package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +168 -0
- package/eigen/Eigen/src/Householder/BlockHouseholder.h +9 -2
- package/eigen/Eigen/src/Householder/Householder.h +8 -4
- package/eigen/Eigen/src/Householder/HouseholderSequence.h +123 -48
- package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +15 -15
- package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +7 -23
- package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +5 -22
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +41 -47
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +51 -60
- package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +70 -20
- package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +2 -20
- package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +11 -9
- package/eigen/Eigen/src/Jacobi/Jacobi.h +31 -10
- package/eigen/Eigen/src/KLUSupport/KLUSupport.h +358 -0
- package/eigen/Eigen/src/LU/Determinant.h +35 -19
- package/eigen/Eigen/src/LU/FullPivLU.h +29 -43
- package/eigen/Eigen/src/LU/InverseImpl.h +25 -8
- package/eigen/Eigen/src/LU/PartialPivLU.h +67 -57
- package/eigen/Eigen/src/LU/arch/InverseSize4.h +351 -0
- package/eigen/Eigen/src/OrderingMethods/Amd.h +7 -17
- package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +297 -277
- package/eigen/Eigen/src/OrderingMethods/Ordering.h +6 -10
- package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +1 -1
- package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +10 -9
- package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +41 -20
- package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +100 -27
- package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +59 -22
- package/eigen/Eigen/src/QR/HouseholderQR.h +48 -23
- package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +25 -3
- package/eigen/Eigen/src/SVD/BDCSVD.h +137 -48
- package/eigen/Eigen/src/SVD/JacobiSVD.h +22 -14
- package/eigen/Eigen/src/SVD/SVDBase.h +82 -21
- package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +3 -3
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +16 -8
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +11 -36
- package/eigen/Eigen/src/SparseCore/CompressedStorage.h +16 -0
- package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +6 -6
- package/eigen/Eigen/src/SparseCore/SparseAssign.h +81 -27
- package/eigen/Eigen/src/SparseCore/SparseBlock.h +25 -57
- package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +40 -11
- package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +11 -15
- package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +2 -2
- package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +30 -8
- package/eigen/Eigen/src/SparseCore/SparseMatrix.h +124 -10
- package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +5 -12
- package/eigen/Eigen/src/SparseCore/SparseProduct.h +13 -1
- package/eigen/Eigen/src/SparseCore/SparseRef.h +7 -7
- package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +3 -0
- package/eigen/Eigen/src/SparseCore/SparseUtil.h +8 -0
- package/eigen/Eigen/src/SparseCore/SparseVector.h +1 -1
- package/eigen/Eigen/src/SparseLU/SparseLU.h +160 -10
- package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +1 -1
- package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +76 -2
- package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +2 -2
- package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +1 -1
- package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +1 -1
- package/eigen/Eigen/src/SparseQR/SparseQR.h +19 -6
- package/eigen/Eigen/src/StlSupport/StdDeque.h +2 -14
- package/eigen/Eigen/src/StlSupport/StdList.h +2 -2
- package/eigen/Eigen/src/StlSupport/StdVector.h +2 -2
- package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +6 -8
- package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +175 -39
- package/eigen/Eigen/src/misc/lapacke.h +5 -4
- package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +27 -1
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +155 -11
- package/eigen/Eigen/src/plugins/BlockMethods.h +626 -242
- package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +14 -0
- package/eigen/Eigen/src/plugins/IndexedViewMethods.h +262 -0
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +4 -4
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +10 -0
- package/eigen/Eigen/src/plugins/ReshapedMethods.h +149 -0
- package/eigen/README.md +2 -0
- package/lib/LibEigen.d.ts +4 -0
- package/lib/LibEigen.js +14 -0
- package/lib/index.d.ts +1 -1
- package/lib/index.js +7 -3
- package/package.json +2 -10
- package/eigen/Eigen/CMakeLists.txt +0 -19
- package/eigen/Eigen/src/Core/arch/CUDA/Half.h +0 -675
- package/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +0 -333
- package/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +0 -1124
- package/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +0 -212
- package/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +0 -161
- package/eigen/Eigen/src/LU/arch/Inverse_SSE.h +0 -338
- package/lib/eigen.d.ts +0 -2
- package/lib/eigen.js +0 -15
|
@@ -79,6 +79,8 @@ template<typename ExpressionType> class ForceAlignedAccess;
|
|
|
79
79
|
template<typename ExpressionType> class SwapWrapper;
|
|
80
80
|
|
|
81
81
|
template<typename XprType, int BlockRows=Dynamic, int BlockCols=Dynamic, bool InnerPanel = false> class Block;
|
|
82
|
+
template<typename XprType, typename RowIndices, typename ColIndices> class IndexedView;
|
|
83
|
+
template<typename XprType, int Rows=Dynamic, int Cols=Dynamic, int Order=0> class Reshaped;
|
|
82
84
|
|
|
83
85
|
template<typename MatrixType, int Size=Dynamic> class VectorBlock;
|
|
84
86
|
template<typename MatrixType> class Transpose;
|
|
@@ -108,7 +110,7 @@ template<typename _IndicesType> class TranspositionsWrapper;
|
|
|
108
110
|
template<typename Derived,
|
|
109
111
|
int Level = internal::accessors_level<Derived>::has_write_access ? WriteAccessors : ReadOnlyAccessors
|
|
110
112
|
> class MapBase;
|
|
111
|
-
template<int
|
|
113
|
+
template<int OuterStrideAtCompileTime, int InnerStrideAtCompileTime> class Stride;
|
|
112
114
|
template<int Value = Dynamic> class InnerStride;
|
|
113
115
|
template<int Value = Dynamic> class OuterStride;
|
|
114
116
|
template<typename MatrixType, int MapOptions=Unaligned, typename StrideType = Stride<0,0> > class Map;
|
|
@@ -129,6 +131,10 @@ template<typename Derived> class SolverBase;
|
|
|
129
131
|
template<typename XprType> class InnerIterator;
|
|
130
132
|
|
|
131
133
|
namespace internal {
|
|
134
|
+
template<typename XprType> class generic_randaccess_stl_iterator;
|
|
135
|
+
template<typename XprType> class pointer_based_stl_iterator;
|
|
136
|
+
template<typename XprType, DirectionType Direction> class subvector_stl_iterator;
|
|
137
|
+
template<typename XprType, DirectionType Direction> class subvector_stl_reverse_iterator;
|
|
132
138
|
template<typename DecompositionType> struct kernel_retval_base;
|
|
133
139
|
template<typename DecompositionType> struct kernel_retval;
|
|
134
140
|
template<typename DecompositionType> struct image_retval_base;
|
|
@@ -174,14 +180,15 @@ template<typename LhsScalar, typename RhsScalar, bool ConjLhs=false, bool ConjRh
|
|
|
174
180
|
template<typename LhsScalar,typename RhsScalar=LhsScalar> struct scalar_sum_op;
|
|
175
181
|
template<typename LhsScalar,typename RhsScalar=LhsScalar> struct scalar_difference_op;
|
|
176
182
|
template<typename LhsScalar,typename RhsScalar=LhsScalar> struct scalar_conj_product_op;
|
|
177
|
-
template<typename LhsScalar,typename RhsScalar=LhsScalar> struct scalar_min_op;
|
|
178
|
-
template<typename LhsScalar,typename RhsScalar=LhsScalar> struct scalar_max_op;
|
|
183
|
+
template<typename LhsScalar,typename RhsScalar=LhsScalar, int NaNPropagation=PropagateFast> struct scalar_min_op;
|
|
184
|
+
template<typename LhsScalar,typename RhsScalar=LhsScalar, int NaNPropagation=PropagateFast> struct scalar_max_op;
|
|
179
185
|
template<typename Scalar> struct scalar_opposite_op;
|
|
180
186
|
template<typename Scalar> struct scalar_conjugate_op;
|
|
181
187
|
template<typename Scalar> struct scalar_real_op;
|
|
182
188
|
template<typename Scalar> struct scalar_imag_op;
|
|
183
189
|
template<typename Scalar> struct scalar_abs_op;
|
|
184
190
|
template<typename Scalar> struct scalar_abs2_op;
|
|
191
|
+
template<typename LhsScalar,typename RhsScalar=LhsScalar> struct scalar_absolute_difference_op;
|
|
185
192
|
template<typename Scalar> struct scalar_sqrt_op;
|
|
186
193
|
template<typename Scalar> struct scalar_rsqrt_op;
|
|
187
194
|
template<typename Scalar> struct scalar_exp_op;
|
|
@@ -198,7 +205,7 @@ template<typename Scalar, typename NewType> struct scalar_cast_op;
|
|
|
198
205
|
template<typename Scalar> struct scalar_random_op;
|
|
199
206
|
template<typename Scalar> struct scalar_constant_op;
|
|
200
207
|
template<typename Scalar> struct scalar_identity_op;
|
|
201
|
-
template<typename Scalar,bool
|
|
208
|
+
template<typename Scalar,bool is_complex, bool is_integer> struct scalar_sign_op;
|
|
202
209
|
template<typename Scalar,typename ScalarExponent> struct scalar_pow_op;
|
|
203
210
|
template<typename LhsScalar,typename RhsScalar=LhsScalar> struct scalar_hypot_op;
|
|
204
211
|
template<typename LhsScalar,typename RhsScalar=LhsScalar> struct scalar_product_op;
|
|
@@ -209,11 +216,27 @@ template<typename Scalar> struct scalar_lgamma_op;
|
|
|
209
216
|
template<typename Scalar> struct scalar_digamma_op;
|
|
210
217
|
template<typename Scalar> struct scalar_erf_op;
|
|
211
218
|
template<typename Scalar> struct scalar_erfc_op;
|
|
219
|
+
template<typename Scalar> struct scalar_ndtri_op;
|
|
212
220
|
template<typename Scalar> struct scalar_igamma_op;
|
|
213
221
|
template<typename Scalar> struct scalar_igammac_op;
|
|
214
222
|
template<typename Scalar> struct scalar_zeta_op;
|
|
215
223
|
template<typename Scalar> struct scalar_betainc_op;
|
|
216
224
|
|
|
225
|
+
// Bessel functions in SpecialFunctions module
|
|
226
|
+
template<typename Scalar> struct scalar_bessel_i0_op;
|
|
227
|
+
template<typename Scalar> struct scalar_bessel_i0e_op;
|
|
228
|
+
template<typename Scalar> struct scalar_bessel_i1_op;
|
|
229
|
+
template<typename Scalar> struct scalar_bessel_i1e_op;
|
|
230
|
+
template<typename Scalar> struct scalar_bessel_j0_op;
|
|
231
|
+
template<typename Scalar> struct scalar_bessel_y0_op;
|
|
232
|
+
template<typename Scalar> struct scalar_bessel_j1_op;
|
|
233
|
+
template<typename Scalar> struct scalar_bessel_y1_op;
|
|
234
|
+
template<typename Scalar> struct scalar_bessel_k0_op;
|
|
235
|
+
template<typename Scalar> struct scalar_bessel_k0e_op;
|
|
236
|
+
template<typename Scalar> struct scalar_bessel_k1_op;
|
|
237
|
+
template<typename Scalar> struct scalar_bessel_k1e_op;
|
|
238
|
+
|
|
239
|
+
|
|
217
240
|
} // end namespace internal
|
|
218
241
|
|
|
219
242
|
struct IOFormat;
|
|
@@ -251,6 +274,7 @@ template<typename MatrixType> class HouseholderQR;
|
|
|
251
274
|
template<typename MatrixType> class ColPivHouseholderQR;
|
|
252
275
|
template<typename MatrixType> class FullPivHouseholderQR;
|
|
253
276
|
template<typename MatrixType> class CompleteOrthogonalDecomposition;
|
|
277
|
+
template<typename MatrixType> class SVDBase;
|
|
254
278
|
template<typename MatrixType, int QRPreconditioner = ColPivHouseholderQRPreconditioner> class JacobiSVD;
|
|
255
279
|
template<typename MatrixType> class BDCSVD;
|
|
256
280
|
template<typename MatrixType, int UpLo = Lower> class LLT;
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
// This file is part of Eigen, a lightweight C++ template library
|
|
2
|
+
// for linear algebra.
|
|
3
|
+
//
|
|
4
|
+
// Copyright (C) 2017 Gael Guennebaud <gael.guennebaud@inria.fr>
|
|
5
|
+
//
|
|
6
|
+
// This Source Code Form is subject to the terms of the Mozilla
|
|
7
|
+
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
8
|
+
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
#ifndef EIGEN_INDEXED_VIEW_HELPER_H
|
|
12
|
+
#define EIGEN_INDEXED_VIEW_HELPER_H
|
|
13
|
+
|
|
14
|
+
namespace Eigen {
|
|
15
|
+
|
|
16
|
+
namespace internal {
|
|
17
|
+
struct symbolic_last_tag {};
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/** \var last
|
|
21
|
+
* \ingroup Core_Module
|
|
22
|
+
*
|
|
23
|
+
* Can be used as a parameter to Eigen::seq and Eigen::seqN functions to symbolically reference the last element/row/columns
|
|
24
|
+
* of the underlying vector or matrix once passed to DenseBase::operator()(const RowIndices&, const ColIndices&).
|
|
25
|
+
*
|
|
26
|
+
* This symbolic placeholder supports standard arithmetic operations.
|
|
27
|
+
*
|
|
28
|
+
* A typical usage example would be:
|
|
29
|
+
* \code
|
|
30
|
+
* using namespace Eigen;
|
|
31
|
+
* using Eigen::last;
|
|
32
|
+
* VectorXd v(n);
|
|
33
|
+
* v(seq(2,last-2)).setOnes();
|
|
34
|
+
* \endcode
|
|
35
|
+
*
|
|
36
|
+
* \sa end
|
|
37
|
+
*/
|
|
38
|
+
static const symbolic::SymbolExpr<internal::symbolic_last_tag> last; // PLEASE use Eigen::last instead of Eigen::placeholders::last
|
|
39
|
+
|
|
40
|
+
/** \var lastp1
|
|
41
|
+
* \ingroup Core_Module
|
|
42
|
+
*
|
|
43
|
+
* Can be used as a parameter to Eigen::seq and Eigen::seqN functions to symbolically
|
|
44
|
+
* reference the last+1 element/row/columns of the underlying vector or matrix once
|
|
45
|
+
* passed to DenseBase::operator()(const RowIndices&, const ColIndices&).
|
|
46
|
+
*
|
|
47
|
+
* This symbolic placeholder supports standard arithmetic operations.
|
|
48
|
+
* It is essentially an alias to last+fix<1>.
|
|
49
|
+
*
|
|
50
|
+
* \sa last
|
|
51
|
+
*/
|
|
52
|
+
#ifdef EIGEN_PARSED_BY_DOXYGEN
|
|
53
|
+
static const auto lastp1 = last+fix<1>;
|
|
54
|
+
#else
|
|
55
|
+
// Using a FixedExpr<1> expression is important here to make sure the compiler
|
|
56
|
+
// can fully optimize the computation starting indices with zero overhead.
|
|
57
|
+
static const symbolic::AddExpr<symbolic::SymbolExpr<internal::symbolic_last_tag>,symbolic::ValueExpr<Eigen::internal::FixedInt<1> > > lastp1(last+fix<1>());
|
|
58
|
+
#endif
|
|
59
|
+
|
|
60
|
+
namespace internal {
|
|
61
|
+
|
|
62
|
+
// Replace symbolic last/end "keywords" by their true runtime value
|
|
63
|
+
inline Index eval_expr_given_size(Index x, Index /* size */) { return x; }
|
|
64
|
+
|
|
65
|
+
template<int N>
|
|
66
|
+
FixedInt<N> eval_expr_given_size(FixedInt<N> x, Index /*size*/) { return x; }
|
|
67
|
+
|
|
68
|
+
template<typename Derived>
|
|
69
|
+
Index eval_expr_given_size(const symbolic::BaseExpr<Derived> &x, Index size)
|
|
70
|
+
{
|
|
71
|
+
return x.derived().eval(last=size-1);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Extract increment/step at compile time
|
|
75
|
+
template<typename T, typename EnableIf = void> struct get_compile_time_incr {
|
|
76
|
+
enum { value = UndefinedIncr };
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
// Analogue of std::get<0>(x), but tailored for our needs.
|
|
80
|
+
template<typename T>
|
|
81
|
+
EIGEN_CONSTEXPR Index first(const T& x) EIGEN_NOEXCEPT { return x.first(); }
|
|
82
|
+
|
|
83
|
+
// IndexedViewCompatibleType/makeIndexedViewCompatible turn an arbitrary object of type T into something usable by MatrixSlice
|
|
84
|
+
// The generic implementation is a no-op
|
|
85
|
+
template<typename T,int XprSize,typename EnableIf=void>
|
|
86
|
+
struct IndexedViewCompatibleType {
|
|
87
|
+
typedef T type;
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
template<typename T,typename Q>
|
|
91
|
+
const T& makeIndexedViewCompatible(const T& x, Index /*size*/, Q) { return x; }
|
|
92
|
+
|
|
93
|
+
//--------------------------------------------------------------------------------
|
|
94
|
+
// Handling of a single Index
|
|
95
|
+
//--------------------------------------------------------------------------------
|
|
96
|
+
|
|
97
|
+
struct SingleRange {
|
|
98
|
+
enum {
|
|
99
|
+
SizeAtCompileTime = 1
|
|
100
|
+
};
|
|
101
|
+
SingleRange(Index val) : m_value(val) {}
|
|
102
|
+
Index operator[](Index) const { return m_value; }
|
|
103
|
+
static EIGEN_CONSTEXPR Index size() EIGEN_NOEXCEPT { return 1; }
|
|
104
|
+
Index first() const EIGEN_NOEXCEPT { return m_value; }
|
|
105
|
+
Index m_value;
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
template<> struct get_compile_time_incr<SingleRange> {
|
|
109
|
+
enum { value = 1 }; // 1 or 0 ??
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
// Turn a single index into something that looks like an array (i.e., that exposes a .size(), and operator[](int) methods)
|
|
113
|
+
template<typename T, int XprSize>
|
|
114
|
+
struct IndexedViewCompatibleType<T,XprSize,typename internal::enable_if<internal::is_integral<T>::value>::type> {
|
|
115
|
+
// Here we could simply use Array, but maybe it's less work for the compiler to use
|
|
116
|
+
// a simpler wrapper as SingleRange
|
|
117
|
+
//typedef Eigen::Array<Index,1,1> type;
|
|
118
|
+
typedef SingleRange type;
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
template<typename T, int XprSize>
|
|
122
|
+
struct IndexedViewCompatibleType<T, XprSize, typename enable_if<symbolic::is_symbolic<T>::value>::type> {
|
|
123
|
+
typedef SingleRange type;
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
template<typename T>
|
|
128
|
+
typename enable_if<symbolic::is_symbolic<T>::value,SingleRange>::type
|
|
129
|
+
makeIndexedViewCompatible(const T& id, Index size, SpecializedType) {
|
|
130
|
+
return eval_expr_given_size(id,size);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
//--------------------------------------------------------------------------------
|
|
134
|
+
// Handling of all
|
|
135
|
+
//--------------------------------------------------------------------------------
|
|
136
|
+
|
|
137
|
+
struct all_t { all_t() {} };
|
|
138
|
+
|
|
139
|
+
// Convert a symbolic 'all' into a usable range type
|
|
140
|
+
template<int XprSize>
|
|
141
|
+
struct AllRange {
|
|
142
|
+
enum { SizeAtCompileTime = XprSize };
|
|
143
|
+
AllRange(Index size = XprSize) : m_size(size) {}
|
|
144
|
+
EIGEN_CONSTEXPR Index operator[](Index i) const EIGEN_NOEXCEPT { return i; }
|
|
145
|
+
EIGEN_CONSTEXPR Index size() const EIGEN_NOEXCEPT { return m_size.value(); }
|
|
146
|
+
EIGEN_CONSTEXPR Index first() const EIGEN_NOEXCEPT { return 0; }
|
|
147
|
+
variable_if_dynamic<Index,XprSize> m_size;
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
template<int XprSize>
|
|
151
|
+
struct IndexedViewCompatibleType<all_t,XprSize> {
|
|
152
|
+
typedef AllRange<XprSize> type;
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
template<typename XprSizeType>
|
|
156
|
+
inline AllRange<get_fixed_value<XprSizeType>::value> makeIndexedViewCompatible(all_t , XprSizeType size, SpecializedType) {
|
|
157
|
+
return AllRange<get_fixed_value<XprSizeType>::value>(size);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
template<int Size> struct get_compile_time_incr<AllRange<Size> > {
|
|
161
|
+
enum { value = 1 };
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
} // end namespace internal
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
/** \var all
|
|
168
|
+
* \ingroup Core_Module
|
|
169
|
+
* Can be used as a parameter to DenseBase::operator()(const RowIndices&, const ColIndices&) to index all rows or columns
|
|
170
|
+
*/
|
|
171
|
+
static const Eigen::internal::all_t all; // PLEASE use Eigen::all instead of Eigen::placeholders::all
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
namespace placeholders {
|
|
175
|
+
typedef symbolic::SymbolExpr<internal::symbolic_last_tag> last_t;
|
|
176
|
+
typedef symbolic::AddExpr<symbolic::SymbolExpr<internal::symbolic_last_tag>,symbolic::ValueExpr<Eigen::internal::FixedInt<1> > > end_t;
|
|
177
|
+
typedef Eigen::internal::all_t all_t;
|
|
178
|
+
|
|
179
|
+
EIGEN_DEPRECATED static const all_t all = Eigen::all; // PLEASE use Eigen::all instead of Eigen::placeholders::all
|
|
180
|
+
EIGEN_DEPRECATED static const last_t last = Eigen::last; // PLEASE use Eigen::last instead of Eigen::placeholders::last
|
|
181
|
+
EIGEN_DEPRECATED static const end_t end = Eigen::lastp1; // PLEASE use Eigen::lastp1 instead of Eigen::placeholders::end
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
} // end namespace Eigen
|
|
185
|
+
|
|
186
|
+
#endif // EIGEN_INDEXED_VIEW_HELPER_H
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
// This file is part of Eigen, a lightweight C++ template library
|
|
2
|
+
// for linear algebra.
|
|
3
|
+
//
|
|
4
|
+
// Copyright (C) 2017 Gael Guennebaud <gael.guennebaud@inria.fr>
|
|
5
|
+
//
|
|
6
|
+
// This Source Code Form is subject to the terms of the Mozilla
|
|
7
|
+
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
8
|
+
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
#ifndef EIGEN_INTEGRAL_CONSTANT_H
|
|
12
|
+
#define EIGEN_INTEGRAL_CONSTANT_H
|
|
13
|
+
|
|
14
|
+
namespace Eigen {
|
|
15
|
+
|
|
16
|
+
namespace internal {
|
|
17
|
+
|
|
18
|
+
template<int N> class FixedInt;
|
|
19
|
+
template<int N> class VariableAndFixedInt;
|
|
20
|
+
|
|
21
|
+
/** \internal
|
|
22
|
+
* \class FixedInt
|
|
23
|
+
*
|
|
24
|
+
* This class embeds a compile-time integer \c N.
|
|
25
|
+
*
|
|
26
|
+
* It is similar to c++11 std::integral_constant<int,N> but with some additional features
|
|
27
|
+
* such as:
|
|
28
|
+
* - implicit conversion to int
|
|
29
|
+
* - arithmetic and some bitwise operators: -, +, *, /, %, &, |
|
|
30
|
+
* - c++98/14 compatibility with fix<N> and fix<N>() syntax to define integral constants.
|
|
31
|
+
*
|
|
32
|
+
* It is strongly discouraged to directly deal with this class FixedInt. Instances are expcected to
|
|
33
|
+
* be created by the user using Eigen::fix<N> or Eigen::fix<N>(). In C++98-11, the former syntax does
|
|
34
|
+
* not create a FixedInt<N> instance but rather a point to function that needs to be \em cleaned-up
|
|
35
|
+
* using the generic helper:
|
|
36
|
+
* \code
|
|
37
|
+
* internal::cleanup_index_type<T>::type
|
|
38
|
+
* internal::cleanup_index_type<T,DynamicKey>::type
|
|
39
|
+
* \endcode
|
|
40
|
+
* where T can a FixedInt<N>, a pointer to function FixedInt<N> (*)(), or numerous other integer-like representations.
|
|
41
|
+
* \c DynamicKey is either Dynamic (default) or DynamicIndex and used to identify true compile-time values.
|
|
42
|
+
*
|
|
43
|
+
* For convenience, you can extract the compile-time value \c N in a generic way using the following helper:
|
|
44
|
+
* \code
|
|
45
|
+
* internal::get_fixed_value<T,DefaultVal>::value
|
|
46
|
+
* \endcode
|
|
47
|
+
* that will give you \c N if T equals FixedInt<N> or FixedInt<N> (*)(), and \c DefaultVal if T does not embed any compile-time value (e.g., T==int).
|
|
48
|
+
*
|
|
49
|
+
* \sa fix<N>, class VariableAndFixedInt
|
|
50
|
+
*/
|
|
51
|
+
template<int N> class FixedInt
|
|
52
|
+
{
|
|
53
|
+
public:
|
|
54
|
+
static const int value = N;
|
|
55
|
+
EIGEN_CONSTEXPR operator int() const { return value; }
|
|
56
|
+
FixedInt() {}
|
|
57
|
+
FixedInt( VariableAndFixedInt<N> other) {
|
|
58
|
+
#ifndef EIGEN_INTERNAL_DEBUGGING
|
|
59
|
+
EIGEN_UNUSED_VARIABLE(other);
|
|
60
|
+
#endif
|
|
61
|
+
eigen_internal_assert(int(other)==N);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
FixedInt<-N> operator-() const { return FixedInt<-N>(); }
|
|
65
|
+
template<int M>
|
|
66
|
+
FixedInt<N+M> operator+( FixedInt<M>) const { return FixedInt<N+M>(); }
|
|
67
|
+
template<int M>
|
|
68
|
+
FixedInt<N-M> operator-( FixedInt<M>) const { return FixedInt<N-M>(); }
|
|
69
|
+
template<int M>
|
|
70
|
+
FixedInt<N*M> operator*( FixedInt<M>) const { return FixedInt<N*M>(); }
|
|
71
|
+
template<int M>
|
|
72
|
+
FixedInt<N/M> operator/( FixedInt<M>) const { return FixedInt<N/M>(); }
|
|
73
|
+
template<int M>
|
|
74
|
+
FixedInt<N%M> operator%( FixedInt<M>) const { return FixedInt<N%M>(); }
|
|
75
|
+
template<int M>
|
|
76
|
+
FixedInt<N|M> operator|( FixedInt<M>) const { return FixedInt<N|M>(); }
|
|
77
|
+
template<int M>
|
|
78
|
+
FixedInt<N&M> operator&( FixedInt<M>) const { return FixedInt<N&M>(); }
|
|
79
|
+
|
|
80
|
+
#if EIGEN_HAS_CXX14_VARIABLE_TEMPLATES
|
|
81
|
+
// Needed in C++14 to allow fix<N>():
|
|
82
|
+
FixedInt operator() () const { return *this; }
|
|
83
|
+
|
|
84
|
+
VariableAndFixedInt<N> operator() (int val) const { return VariableAndFixedInt<N>(val); }
|
|
85
|
+
#else
|
|
86
|
+
FixedInt ( FixedInt<N> (*)() ) {}
|
|
87
|
+
#endif
|
|
88
|
+
|
|
89
|
+
#if EIGEN_HAS_CXX11
|
|
90
|
+
FixedInt(std::integral_constant<int,N>) {}
|
|
91
|
+
#endif
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
/** \internal
|
|
95
|
+
* \class VariableAndFixedInt
|
|
96
|
+
*
|
|
97
|
+
* This class embeds both a compile-time integer \c N and a runtime integer.
|
|
98
|
+
* Both values are supposed to be equal unless the compile-time value \c N has a special
|
|
99
|
+
* value meaning that the runtime-value should be used. Depending on the context, this special
|
|
100
|
+
* value can be either Eigen::Dynamic (for positive quantities) or Eigen::DynamicIndex (for
|
|
101
|
+
* quantities that can be negative).
|
|
102
|
+
*
|
|
103
|
+
* It is the return-type of the function Eigen::fix<N>(int), and most of the time this is the only
|
|
104
|
+
* way it is used. It is strongly discouraged to directly deal with instances of VariableAndFixedInt.
|
|
105
|
+
* Indeed, in order to write generic code, it is the responsibility of the callee to properly convert
|
|
106
|
+
* it to either a true compile-time quantity (i.e. a FixedInt<N>), or to a runtime quantity (e.g., an Index)
|
|
107
|
+
* using the following generic helper:
|
|
108
|
+
* \code
|
|
109
|
+
* internal::cleanup_index_type<T>::type
|
|
110
|
+
* internal::cleanup_index_type<T,DynamicKey>::type
|
|
111
|
+
* \endcode
|
|
112
|
+
* where T can be a template instantiation of VariableAndFixedInt or numerous other integer-like representations.
|
|
113
|
+
* \c DynamicKey is either Dynamic (default) or DynamicIndex and used to identify true compile-time values.
|
|
114
|
+
*
|
|
115
|
+
* For convenience, you can also extract the compile-time value \c N using the following helper:
|
|
116
|
+
* \code
|
|
117
|
+
* internal::get_fixed_value<T,DefaultVal>::value
|
|
118
|
+
* \endcode
|
|
119
|
+
* that will give you \c N if T equals VariableAndFixedInt<N>, and \c DefaultVal if T does not embed any compile-time value (e.g., T==int).
|
|
120
|
+
*
|
|
121
|
+
* \sa fix<N>(int), class FixedInt
|
|
122
|
+
*/
|
|
123
|
+
template<int N> class VariableAndFixedInt
|
|
124
|
+
{
|
|
125
|
+
public:
|
|
126
|
+
static const int value = N;
|
|
127
|
+
operator int() const { return m_value; }
|
|
128
|
+
VariableAndFixedInt(int val) { m_value = val; }
|
|
129
|
+
protected:
|
|
130
|
+
int m_value;
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
template<typename T, int Default=Dynamic> struct get_fixed_value {
|
|
134
|
+
static const int value = Default;
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
template<int N,int Default> struct get_fixed_value<FixedInt<N>,Default> {
|
|
138
|
+
static const int value = N;
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
#if !EIGEN_HAS_CXX14
|
|
142
|
+
template<int N,int Default> struct get_fixed_value<FixedInt<N> (*)(),Default> {
|
|
143
|
+
static const int value = N;
|
|
144
|
+
};
|
|
145
|
+
#endif
|
|
146
|
+
|
|
147
|
+
template<int N,int Default> struct get_fixed_value<VariableAndFixedInt<N>,Default> {
|
|
148
|
+
static const int value = N ;
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
template<typename T, int N, int Default>
|
|
152
|
+
struct get_fixed_value<variable_if_dynamic<T,N>,Default> {
|
|
153
|
+
static const int value = N;
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
template<typename T> EIGEN_DEVICE_FUNC Index get_runtime_value(const T &x) { return x; }
|
|
157
|
+
#if !EIGEN_HAS_CXX14
|
|
158
|
+
template<int N> EIGEN_DEVICE_FUNC Index get_runtime_value(FixedInt<N> (*)()) { return N; }
|
|
159
|
+
#endif
|
|
160
|
+
|
|
161
|
+
// Cleanup integer/FixedInt/VariableAndFixedInt/etc types:
|
|
162
|
+
|
|
163
|
+
// By default, no cleanup:
|
|
164
|
+
template<typename T, int DynamicKey=Dynamic, typename EnableIf=void> struct cleanup_index_type { typedef T type; };
|
|
165
|
+
|
|
166
|
+
// Convert any integral type (e.g., short, int, unsigned int, etc.) to Eigen::Index
|
|
167
|
+
template<typename T, int DynamicKey> struct cleanup_index_type<T,DynamicKey,typename internal::enable_if<internal::is_integral<T>::value>::type> { typedef Index type; };
|
|
168
|
+
|
|
169
|
+
#if !EIGEN_HAS_CXX14
|
|
170
|
+
// In c++98/c++11, fix<N> is a pointer to function that we better cleanup to a true FixedInt<N>:
|
|
171
|
+
template<int N, int DynamicKey> struct cleanup_index_type<FixedInt<N> (*)(), DynamicKey> { typedef FixedInt<N> type; };
|
|
172
|
+
#endif
|
|
173
|
+
|
|
174
|
+
// If VariableAndFixedInt does not match DynamicKey, then we turn it to a pure compile-time value:
|
|
175
|
+
template<int N, int DynamicKey> struct cleanup_index_type<VariableAndFixedInt<N>, DynamicKey> { typedef FixedInt<N> type; };
|
|
176
|
+
// If VariableAndFixedInt matches DynamicKey, then we turn it to a pure runtime-value (aka Index):
|
|
177
|
+
template<int DynamicKey> struct cleanup_index_type<VariableAndFixedInt<DynamicKey>, DynamicKey> { typedef Index type; };
|
|
178
|
+
|
|
179
|
+
#if EIGEN_HAS_CXX11
|
|
180
|
+
template<int N, int DynamicKey> struct cleanup_index_type<std::integral_constant<int,N>, DynamicKey> { typedef FixedInt<N> type; };
|
|
181
|
+
#endif
|
|
182
|
+
|
|
183
|
+
} // end namespace internal
|
|
184
|
+
|
|
185
|
+
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
186
|
+
|
|
187
|
+
#if EIGEN_HAS_CXX14_VARIABLE_TEMPLATES
|
|
188
|
+
template<int N>
|
|
189
|
+
static const internal::FixedInt<N> fix{};
|
|
190
|
+
#else
|
|
191
|
+
template<int N>
|
|
192
|
+
inline internal::FixedInt<N> fix() { return internal::FixedInt<N>(); }
|
|
193
|
+
|
|
194
|
+
// The generic typename T is mandatory. Otherwise, a code like fix<N> could refer to either the function above or this next overload.
|
|
195
|
+
// This way a code like fix<N> can only refer to the previous function.
|
|
196
|
+
template<int N,typename T>
|
|
197
|
+
inline internal::VariableAndFixedInt<N> fix(T val) { return internal::VariableAndFixedInt<N>(internal::convert_index<int>(val)); }
|
|
198
|
+
#endif
|
|
199
|
+
|
|
200
|
+
#else // EIGEN_PARSED_BY_DOXYGEN
|
|
201
|
+
|
|
202
|
+
/** \var fix<N>()
|
|
203
|
+
* \ingroup Core_Module
|
|
204
|
+
*
|
|
205
|
+
* This \em identifier permits to construct an object embedding a compile-time integer \c N.
|
|
206
|
+
*
|
|
207
|
+
* \tparam N the compile-time integer value
|
|
208
|
+
*
|
|
209
|
+
* It is typically used in conjunction with the Eigen::seq and Eigen::seqN functions to pass compile-time values to them:
|
|
210
|
+
* \code
|
|
211
|
+
* seqN(10,fix<4>,fix<-3>) // <=> [10 7 4 1]
|
|
212
|
+
* \endcode
|
|
213
|
+
*
|
|
214
|
+
* See also the function fix(int) to pass both a compile-time and runtime value.
|
|
215
|
+
*
|
|
216
|
+
* In c++14, it is implemented as:
|
|
217
|
+
* \code
|
|
218
|
+
* template<int N> static const internal::FixedInt<N> fix{};
|
|
219
|
+
* \endcode
|
|
220
|
+
* where internal::FixedInt<N> is an internal template class similar to
|
|
221
|
+
* <a href="http://en.cppreference.com/w/cpp/types/integral_constant">\c std::integral_constant </a><tt> <int,N> </tt>
|
|
222
|
+
* Here, \c fix<N> is thus an object of type \c internal::FixedInt<N>.
|
|
223
|
+
*
|
|
224
|
+
* In c++98/11, it is implemented as a function:
|
|
225
|
+
* \code
|
|
226
|
+
* template<int N> inline internal::FixedInt<N> fix();
|
|
227
|
+
* \endcode
|
|
228
|
+
* Here internal::FixedInt<N> is thus a pointer to function.
|
|
229
|
+
*
|
|
230
|
+
* If for some reason you want a true object in c++98 then you can write: \code fix<N>() \endcode which is also valid in c++14.
|
|
231
|
+
*
|
|
232
|
+
* \sa fix<N>(int), seq, seqN
|
|
233
|
+
*/
|
|
234
|
+
template<int N>
|
|
235
|
+
static const auto fix();
|
|
236
|
+
|
|
237
|
+
/** \fn fix<N>(int)
|
|
238
|
+
* \ingroup Core_Module
|
|
239
|
+
*
|
|
240
|
+
* This function returns an object embedding both a compile-time integer \c N, and a fallback runtime value \a val.
|
|
241
|
+
*
|
|
242
|
+
* \tparam N the compile-time integer value
|
|
243
|
+
* \param val the fallback runtime integer value
|
|
244
|
+
*
|
|
245
|
+
* This function is a more general version of the \ref fix identifier/function that can be used in template code
|
|
246
|
+
* where the compile-time value could turn out to actually mean "undefined at compile-time". For positive integers
|
|
247
|
+
* such as a size or a dimension, this case is identified by Eigen::Dynamic, whereas runtime signed integers
|
|
248
|
+
* (e.g., an increment/stride) are identified as Eigen::DynamicIndex. In such a case, the runtime value \a val
|
|
249
|
+
* will be used as a fallback.
|
|
250
|
+
*
|
|
251
|
+
* A typical use case would be:
|
|
252
|
+
* \code
|
|
253
|
+
* template<typename Derived> void foo(const MatrixBase<Derived> &mat) {
|
|
254
|
+
* const int N = Derived::RowsAtCompileTime==Dynamic ? Dynamic : Derived::RowsAtCompileTime/2;
|
|
255
|
+
* const int n = mat.rows()/2;
|
|
256
|
+
* ... mat( seqN(0,fix<N>(n) ) ...;
|
|
257
|
+
* }
|
|
258
|
+
* \endcode
|
|
259
|
+
* In this example, the function Eigen::seqN knows that the second argument is expected to be a size.
|
|
260
|
+
* If the passed compile-time value N equals Eigen::Dynamic, then the proxy object returned by fix will be dissmissed, and converted to an Eigen::Index of value \c n.
|
|
261
|
+
* Otherwise, the runtime-value \c n will be dissmissed, and the returned ArithmeticSequence will be of the exact same type as <tt> seqN(0,fix<N>) </tt>.
|
|
262
|
+
*
|
|
263
|
+
* \sa fix, seqN, class ArithmeticSequence
|
|
264
|
+
*/
|
|
265
|
+
template<int N>
|
|
266
|
+
static const auto fix(int val);
|
|
267
|
+
|
|
268
|
+
#endif // EIGEN_PARSED_BY_DOXYGEN
|
|
269
|
+
|
|
270
|
+
} // end namespace Eigen
|
|
271
|
+
|
|
272
|
+
#endif // EIGEN_INTEGRAL_CONSTANT_H
|
|
@@ -55,7 +55,11 @@
|
|
|
55
55
|
|
|
56
56
|
|
|
57
57
|
#if defined EIGEN_USE_MKL
|
|
58
|
-
#
|
|
58
|
+
# if (!defined MKL_DIRECT_CALL) && (!defined EIGEN_MKL_NO_DIRECT_CALL)
|
|
59
|
+
# define MKL_DIRECT_CALL
|
|
60
|
+
# define MKL_DIRECT_CALL_JUST_SET
|
|
61
|
+
# endif
|
|
62
|
+
# include <mkl.h>
|
|
59
63
|
/*Check IMKL version for compatibility: < 10.3 is not usable with Eigen*/
|
|
60
64
|
# ifndef INTEL_MKL_VERSION
|
|
61
65
|
# undef EIGEN_USE_MKL /* INTEL_MKL_VERSION is not even defined on older versions */
|
|
@@ -69,6 +73,9 @@
|
|
|
69
73
|
# undef EIGEN_USE_MKL_VML
|
|
70
74
|
# undef EIGEN_USE_LAPACKE_STRICT
|
|
71
75
|
# undef EIGEN_USE_LAPACKE
|
|
76
|
+
# ifdef MKL_DIRECT_CALL_JUST_SET
|
|
77
|
+
# undef MKL_DIRECT_CALL
|
|
78
|
+
# endif
|
|
72
79
|
# endif
|
|
73
80
|
#endif
|
|
74
81
|
|