@smake/eigen 1.1.0 → 1.1.1
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/Eigen/AccelerateSupport +52 -0
- package/eigen/Eigen/Cholesky +18 -20
- package/eigen/Eigen/CholmodSupport +28 -28
- package/eigen/Eigen/Core +187 -120
- package/eigen/Eigen/Eigenvalues +16 -13
- package/eigen/Eigen/Geometry +18 -18
- package/eigen/Eigen/Householder +9 -7
- package/eigen/Eigen/IterativeLinearSolvers +8 -4
- package/eigen/Eigen/Jacobi +14 -13
- package/eigen/Eigen/KLUSupport +23 -21
- package/eigen/Eigen/LU +15 -16
- package/eigen/Eigen/MetisSupport +12 -12
- package/eigen/Eigen/OrderingMethods +54 -51
- package/eigen/Eigen/PaStiXSupport +23 -21
- package/eigen/Eigen/PardisoSupport +17 -14
- package/eigen/Eigen/QR +18 -20
- package/eigen/Eigen/QtAlignedMalloc +5 -12
- package/eigen/Eigen/SPQRSupport +21 -14
- package/eigen/Eigen/SVD +23 -17
- package/eigen/Eigen/Sparse +1 -2
- package/eigen/Eigen/SparseCholesky +18 -15
- package/eigen/Eigen/SparseCore +18 -17
- package/eigen/Eigen/SparseLU +9 -9
- package/eigen/Eigen/SparseQR +16 -14
- package/eigen/Eigen/StdDeque +5 -2
- package/eigen/Eigen/StdList +5 -2
- package/eigen/Eigen/StdVector +5 -2
- package/eigen/Eigen/SuperLUSupport +30 -24
- package/eigen/Eigen/ThreadPool +80 -0
- package/eigen/Eigen/UmfPackSupport +19 -17
- package/eigen/Eigen/Version +14 -0
- package/eigen/Eigen/src/AccelerateSupport/AccelerateSupport.h +423 -0
- package/eigen/Eigen/src/AccelerateSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Cholesky/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Cholesky/LDLT.h +366 -405
- package/eigen/Eigen/src/Cholesky/LLT.h +323 -367
- package/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +81 -56
- package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +585 -529
- package/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Core/ArithmeticSequence.h +143 -317
- package/eigen/Eigen/src/Core/Array.h +329 -370
- package/eigen/Eigen/src/Core/ArrayBase.h +190 -203
- package/eigen/Eigen/src/Core/ArrayWrapper.h +126 -170
- package/eigen/Eigen/src/Core/Assign.h +30 -40
- package/eigen/Eigen/src/Core/AssignEvaluator.h +651 -604
- package/eigen/Eigen/src/Core/Assign_MKL.h +125 -120
- package/eigen/Eigen/src/Core/BandMatrix.h +267 -282
- package/eigen/Eigen/src/Core/Block.h +371 -390
- package/eigen/Eigen/src/Core/CommaInitializer.h +85 -100
- package/eigen/Eigen/src/Core/ConditionEstimator.h +51 -53
- package/eigen/Eigen/src/Core/CoreEvaluators.h +1214 -937
- package/eigen/Eigen/src/Core/CoreIterators.h +72 -63
- package/eigen/Eigen/src/Core/CwiseBinaryOp.h +112 -129
- package/eigen/Eigen/src/Core/CwiseNullaryOp.h +676 -702
- package/eigen/Eigen/src/Core/CwiseTernaryOp.h +77 -103
- package/eigen/Eigen/src/Core/CwiseUnaryOp.h +55 -67
- package/eigen/Eigen/src/Core/CwiseUnaryView.h +127 -92
- package/eigen/Eigen/src/Core/DenseBase.h +630 -658
- package/eigen/Eigen/src/Core/DenseCoeffsBase.h +511 -628
- package/eigen/Eigen/src/Core/DenseStorage.h +511 -590
- package/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
- package/eigen/Eigen/src/Core/Diagonal.h +168 -207
- package/eigen/Eigen/src/Core/DiagonalMatrix.h +346 -317
- package/eigen/Eigen/src/Core/DiagonalProduct.h +12 -10
- package/eigen/Eigen/src/Core/Dot.h +167 -217
- package/eigen/Eigen/src/Core/EigenBase.h +74 -85
- package/eigen/Eigen/src/Core/Fill.h +138 -0
- package/eigen/Eigen/src/Core/FindCoeff.h +464 -0
- package/eigen/Eigen/src/Core/ForceAlignedAccess.h +90 -113
- package/eigen/Eigen/src/Core/Fuzzy.h +82 -105
- package/eigen/Eigen/src/Core/GeneralProduct.h +315 -261
- package/eigen/Eigen/src/Core/GenericPacketMath.h +1182 -520
- package/eigen/Eigen/src/Core/GlobalFunctions.h +193 -157
- package/eigen/Eigen/src/Core/IO.h +131 -156
- package/eigen/Eigen/src/Core/IndexedView.h +209 -125
- package/eigen/Eigen/src/Core/InnerProduct.h +260 -0
- package/eigen/Eigen/src/Core/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Core/Inverse.h +50 -59
- package/eigen/Eigen/src/Core/Map.h +123 -141
- package/eigen/Eigen/src/Core/MapBase.h +255 -282
- package/eigen/Eigen/src/Core/MathFunctions.h +1247 -1201
- package/eigen/Eigen/src/Core/MathFunctionsImpl.h +162 -99
- package/eigen/Eigen/src/Core/Matrix.h +463 -494
- package/eigen/Eigen/src/Core/MatrixBase.h +468 -470
- package/eigen/Eigen/src/Core/NestByValue.h +58 -52
- package/eigen/Eigen/src/Core/NoAlias.h +79 -86
- package/eigen/Eigen/src/Core/NumTraits.h +206 -206
- package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +163 -142
- package/eigen/Eigen/src/Core/PermutationMatrix.h +461 -511
- package/eigen/Eigen/src/Core/PlainObjectBase.h +858 -972
- package/eigen/Eigen/src/Core/Product.h +246 -130
- package/eigen/Eigen/src/Core/ProductEvaluators.h +779 -671
- package/eigen/Eigen/src/Core/Random.h +153 -164
- package/eigen/Eigen/src/Core/RandomImpl.h +262 -0
- package/eigen/Eigen/src/Core/RealView.h +250 -0
- package/eigen/Eigen/src/Core/Redux.h +334 -314
- package/eigen/Eigen/src/Core/Ref.h +259 -257
- package/eigen/Eigen/src/Core/Replicate.h +92 -104
- package/eigen/Eigen/src/Core/Reshaped.h +215 -271
- package/eigen/Eigen/src/Core/ReturnByValue.h +47 -55
- package/eigen/Eigen/src/Core/Reverse.h +133 -148
- package/eigen/Eigen/src/Core/Select.h +68 -140
- package/eigen/Eigen/src/Core/SelfAdjointView.h +254 -290
- package/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h +23 -20
- package/eigen/Eigen/src/Core/SkewSymmetricMatrix3.h +382 -0
- package/eigen/Eigen/src/Core/Solve.h +88 -102
- package/eigen/Eigen/src/Core/SolveTriangular.h +126 -124
- package/eigen/Eigen/src/Core/SolverBase.h +132 -133
- package/eigen/Eigen/src/Core/StableNorm.h +113 -147
- package/eigen/Eigen/src/Core/StlIterators.h +404 -248
- package/eigen/Eigen/src/Core/Stride.h +90 -92
- package/eigen/Eigen/src/Core/Swap.h +70 -39
- package/eigen/Eigen/src/Core/Transpose.h +258 -295
- package/eigen/Eigen/src/Core/Transpositions.h +270 -333
- package/eigen/Eigen/src/Core/TriangularMatrix.h +642 -743
- package/eigen/Eigen/src/Core/VectorBlock.h +59 -72
- package/eigen/Eigen/src/Core/VectorwiseOp.h +653 -704
- package/eigen/Eigen/src/Core/Visitor.h +464 -308
- package/eigen/Eigen/src/Core/arch/AVX/Complex.h +380 -187
- package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +65 -163
- package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +2145 -638
- package/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
- package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +253 -60
- package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +278 -228
- package/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +48 -269
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1597 -754
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMathFP16.h +1413 -0
- package/eigen/Eigen/src/Core/arch/AVX512/Reductions.h +297 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TrsmKernel.h +1167 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TrsmUnrolls.inc +1219 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +229 -41
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +420 -184
- package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +40 -49
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2962 -2213
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +196 -212
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +713 -441
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMAbfloat16.h +742 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixVectorProduct.inc +2818 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +2380 -1362
- package/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
- package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +390 -224
- package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +78 -67
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1784 -799
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +167 -50
- package/eigen/Eigen/src/Core/arch/Default/Half.h +528 -379
- package/eigen/Eigen/src/Core/arch/Default/Settings.h +10 -12
- package/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
- package/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +41 -40
- package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +550 -523
- package/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
- package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +27 -30
- package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +8 -8
- package/eigen/Eigen/src/Core/arch/HVX/PacketMath.h +1088 -0
- package/eigen/Eigen/src/Core/arch/LSX/Complex.h +520 -0
- package/eigen/Eigen/src/Core/arch/LSX/GeneralBlockPanelKernel.h +23 -0
- package/eigen/Eigen/src/Core/arch/LSX/MathFunctions.h +43 -0
- package/eigen/Eigen/src/Core/arch/LSX/PacketMath.h +2866 -0
- package/eigen/Eigen/src/Core/arch/LSX/TypeCasting.h +526 -0
- package/eigen/Eigen/src/Core/arch/MSA/Complex.h +54 -82
- package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +84 -92
- package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +51 -47
- package/eigen/Eigen/src/Core/arch/NEON/Complex.h +454 -306
- package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +175 -115
- package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +23 -30
- package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +4366 -2857
- package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +616 -393
- package/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
- package/eigen/Eigen/src/Core/arch/SSE/Complex.h +350 -198
- package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +38 -149
- package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +1791 -912
- package/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
- package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +128 -40
- package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +10 -6
- package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +156 -234
- package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +6 -3
- package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +27 -32
- package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +119 -117
- package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +325 -419
- package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +15 -17
- package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +325 -181
- package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +94 -83
- package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +811 -458
- package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +121 -124
- package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +576 -370
- package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +194 -109
- package/eigen/Eigen/src/Core/functors/StlFunctors.h +95 -112
- package/eigen/Eigen/src/Core/functors/TernaryFunctors.h +34 -7
- package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1038 -749
- package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1883 -1375
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +312 -370
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +189 -176
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +84 -81
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +154 -73
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +292 -337
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +80 -77
- package/eigen/Eigen/src/Core/products/Parallelizer.h +207 -105
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +327 -388
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +206 -224
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +138 -147
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +58 -61
- package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +71 -71
- package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +48 -47
- package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +294 -369
- package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +246 -238
- package/eigen/Eigen/src/Core/products/TriangularMatrixVector.h +244 -247
- package/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +212 -192
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +328 -277
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +108 -109
- package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +68 -94
- package/eigen/Eigen/src/Core/util/Assert.h +158 -0
- package/eigen/Eigen/src/Core/util/BlasUtil.h +342 -303
- package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +348 -317
- package/eigen/Eigen/src/Core/util/Constants.h +297 -262
- package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +130 -90
- package/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
- package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +449 -247
- package/eigen/Eigen/src/Core/util/GpuHipCudaDefines.inc +101 -0
- package/eigen/Eigen/src/Core/util/GpuHipCudaUndefines.inc +45 -0
- package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +417 -116
- package/eigen/Eigen/src/Core/util/IntegralConstant.h +211 -204
- package/eigen/Eigen/src/Core/util/MKL_support.h +39 -37
- package/eigen/Eigen/src/Core/util/Macros.h +655 -773
- package/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
- package/eigen/Eigen/src/Core/util/Memory.h +970 -748
- package/eigen/Eigen/src/Core/util/Meta.h +581 -633
- package/eigen/Eigen/src/Core/util/MoreMeta.h +638 -0
- package/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +32 -19
- package/eigen/Eigen/src/Core/util/ReshapedHelper.h +17 -17
- package/eigen/Eigen/src/Core/util/Serializer.h +209 -0
- package/eigen/Eigen/src/Core/util/StaticAssert.h +50 -166
- package/eigen/Eigen/src/Core/util/SymbolicIndex.h +377 -225
- package/eigen/Eigen/src/Core/util/XprHelper.h +784 -547
- package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +246 -277
- package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +299 -319
- package/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +52 -48
- package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +413 -456
- package/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +309 -325
- package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +157 -171
- package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +292 -310
- package/eigen/Eigen/src/Eigenvalues/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +89 -105
- package/eigen/Eigen/src/Eigenvalues/RealQZ.h +537 -607
- package/eigen/Eigen/src/Eigenvalues/RealSchur.h +342 -381
- package/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +41 -35
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +541 -595
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +47 -44
- package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +430 -462
- package/eigen/Eigen/src/Geometry/AlignedBox.h +226 -227
- package/eigen/Eigen/src/Geometry/AngleAxis.h +131 -133
- package/eigen/Eigen/src/Geometry/EulerAngles.h +163 -74
- package/eigen/Eigen/src/Geometry/Homogeneous.h +285 -333
- package/eigen/Eigen/src/Geometry/Hyperplane.h +151 -160
- package/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Geometry/OrthoMethods.h +168 -146
- package/eigen/Eigen/src/Geometry/ParametrizedLine.h +127 -127
- package/eigen/Eigen/src/Geometry/Quaternion.h +566 -506
- package/eigen/Eigen/src/Geometry/Rotation2D.h +107 -105
- package/eigen/Eigen/src/Geometry/RotationBase.h +148 -145
- package/eigen/Eigen/src/Geometry/Scaling.h +113 -106
- package/eigen/Eigen/src/Geometry/Transform.h +858 -936
- package/eigen/Eigen/src/Geometry/Translation.h +94 -92
- package/eigen/Eigen/src/Geometry/Umeyama.h +79 -84
- package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +90 -104
- package/eigen/Eigen/src/Householder/BlockHouseholder.h +51 -46
- package/eigen/Eigen/src/Householder/Householder.h +102 -124
- package/eigen/Eigen/src/Householder/HouseholderSequence.h +412 -453
- package/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +149 -162
- package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +124 -119
- package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +92 -104
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +251 -243
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +224 -228
- package/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +178 -227
- package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +79 -84
- package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +54 -60
- package/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Jacobi/Jacobi.h +252 -308
- package/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/KLUSupport/KLUSupport.h +208 -227
- package/eigen/Eigen/src/LU/Determinant.h +50 -69
- package/eigen/Eigen/src/LU/FullPivLU.h +545 -596
- package/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/LU/InverseImpl.h +206 -285
- package/eigen/Eigen/src/LU/PartialPivLU.h +390 -428
- package/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +54 -40
- package/eigen/Eigen/src/LU/arch/InverseSize4.h +72 -70
- package/eigen/Eigen/src/MetisSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/MetisSupport/MetisSupport.h +81 -93
- package/eigen/Eigen/src/OrderingMethods/Amd.h +243 -265
- package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +831 -1004
- package/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/OrderingMethods/Ordering.h +112 -119
- package/eigen/Eigen/src/PaStiXSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +524 -570
- package/eigen/Eigen/src/PardisoSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +385 -430
- package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +479 -479
- package/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +120 -56
- package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +166 -153
- package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +495 -475
- package/eigen/Eigen/src/QR/HouseholderQR.h +394 -285
- package/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h +32 -23
- package/eigen/Eigen/src/QR/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SPQRSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +244 -264
- package/eigen/Eigen/src/SVD/BDCSVD.h +817 -713
- package/eigen/Eigen/src/SVD/BDCSVD_LAPACKE.h +174 -0
- package/eigen/Eigen/src/SVD/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SVD/JacobiSVD.h +577 -543
- package/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +85 -49
- package/eigen/Eigen/src/SVD/SVDBase.h +242 -182
- package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +200 -235
- package/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +765 -594
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +308 -94
- package/eigen/Eigen/src/SparseCore/AmbiVector.h +202 -251
- package/eigen/Eigen/src/SparseCore/CompressedStorage.h +184 -252
- package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +134 -178
- package/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCore/SparseAssign.h +149 -140
- package/eigen/Eigen/src/SparseCore/SparseBlock.h +403 -440
- package/eigen/Eigen/src/SparseCore/SparseColEtree.h +100 -112
- package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +525 -303
- package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +555 -339
- package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +100 -108
- package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +169 -197
- package/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h +71 -71
- package/eigen/Eigen/src/SparseCore/SparseDot.h +49 -47
- package/eigen/Eigen/src/SparseCore/SparseFuzzy.h +13 -11
- package/eigen/Eigen/src/SparseCore/SparseMap.h +243 -253
- package/eigen/Eigen/src/SparseCore/SparseMatrix.h +1603 -1245
- package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +403 -350
- package/eigen/Eigen/src/SparseCore/SparsePermutation.h +186 -115
- package/eigen/Eigen/src/SparseCore/SparseProduct.h +94 -97
- package/eigen/Eigen/src/SparseCore/SparseRedux.h +22 -24
- package/eigen/Eigen/src/SparseCore/SparseRef.h +268 -295
- package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +370 -416
- package/eigen/Eigen/src/SparseCore/SparseSolverBase.h +78 -87
- package/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +81 -95
- package/eigen/Eigen/src/SparseCore/SparseTranspose.h +62 -71
- package/eigen/Eigen/src/SparseCore/SparseTriangularView.h +132 -144
- package/eigen/Eigen/src/SparseCore/SparseUtil.h +138 -115
- package/eigen/Eigen/src/SparseCore/SparseVector.h +426 -372
- package/eigen/Eigen/src/SparseCore/SparseView.h +164 -193
- package/eigen/Eigen/src/SparseCore/TriangularSolver.h +129 -170
- package/eigen/Eigen/src/SparseLU/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseLU/SparseLU.h +756 -710
- package/eigen/Eigen/src/SparseLU/SparseLUImpl.h +61 -48
- package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +102 -118
- package/eigen/Eigen/src/SparseLU/SparseLU_Structs.h +38 -35
- package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +245 -301
- package/eigen/Eigen/src/SparseLU/SparseLU_Utils.h +44 -49
- package/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h +104 -108
- package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +89 -100
- package/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +57 -58
- package/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +43 -55
- package/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +74 -71
- package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +124 -132
- package/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h +136 -159
- package/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h +51 -52
- package/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h +67 -73
- package/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h +24 -26
- package/eigen/Eigen/src/SparseQR/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseQR/SparseQR.h +450 -502
- package/eigen/Eigen/src/StlSupport/StdDeque.h +28 -93
- package/eigen/Eigen/src/StlSupport/StdList.h +28 -84
- package/eigen/Eigen/src/StlSupport/StdVector.h +28 -108
- package/eigen/Eigen/src/StlSupport/details.h +48 -50
- package/eigen/Eigen/src/SuperLUSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +634 -730
- package/eigen/Eigen/src/ThreadPool/Barrier.h +70 -0
- package/eigen/Eigen/src/ThreadPool/CoreThreadPoolDevice.h +336 -0
- package/eigen/Eigen/src/ThreadPool/EventCount.h +241 -0
- package/eigen/Eigen/src/ThreadPool/ForkJoin.h +140 -0
- package/eigen/Eigen/src/ThreadPool/InternalHeaderCheck.h +4 -0
- package/eigen/Eigen/src/ThreadPool/NonBlockingThreadPool.h +587 -0
- package/eigen/Eigen/src/ThreadPool/RunQueue.h +230 -0
- package/eigen/Eigen/src/ThreadPool/ThreadCancel.h +21 -0
- package/eigen/Eigen/src/ThreadPool/ThreadEnvironment.h +43 -0
- package/eigen/Eigen/src/ThreadPool/ThreadLocal.h +289 -0
- package/eigen/Eigen/src/ThreadPool/ThreadPoolInterface.h +50 -0
- package/eigen/Eigen/src/ThreadPool/ThreadYield.h +16 -0
- package/eigen/Eigen/src/UmfPackSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +428 -464
- package/eigen/Eigen/src/misc/Image.h +41 -43
- package/eigen/Eigen/src/misc/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/misc/Kernel.h +39 -41
- package/eigen/Eigen/src/misc/RealSvd2x2.h +19 -21
- package/eigen/Eigen/src/misc/blas.h +83 -426
- package/eigen/Eigen/src/misc/lapacke.h +9972 -16179
- package/eigen/Eigen/src/misc/lapacke_helpers.h +163 -0
- package/eigen/Eigen/src/misc/lapacke_mangling.h +4 -5
- package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.inc +344 -0
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.inc +544 -0
- package/eigen/Eigen/src/plugins/{BlockMethods.h → BlockMethods.inc} +434 -506
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
- package/eigen/Eigen/src/plugins/{CommonCwiseUnaryOps.h → CommonCwiseUnaryOps.inc} +58 -68
- package/eigen/Eigen/src/plugins/IndexedViewMethods.inc +192 -0
- package/eigen/Eigen/src/plugins/InternalHeaderCheck.inc +3 -0
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.inc +331 -0
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.inc +118 -0
- package/eigen/Eigen/src/plugins/ReshapedMethods.inc +133 -0
- package/package.json +1 -1
- package/eigen/COPYING.APACHE +0 -203
- package/eigen/COPYING.BSD +0 -26
- package/eigen/COPYING.GPL +0 -674
- package/eigen/COPYING.LGPL +0 -502
- package/eigen/COPYING.MINPACK +0 -51
- package/eigen/COPYING.MPL2 +0 -373
- package/eigen/COPYING.README +0 -18
- package/eigen/Eigen/src/Core/BooleanRedux.h +0 -162
- package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +0 -258
- package/eigen/Eigen/src/Core/arch/Default/TypeCasting.h +0 -120
- package/eigen/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +0 -694
- package/eigen/Eigen/src/Core/util/NonMPL2.h +0 -3
- package/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h +0 -67
- package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +0 -280
- package/eigen/Eigen/src/misc/lapack.h +0 -152
- package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +0 -358
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +0 -696
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +0 -115
- package/eigen/Eigen/src/plugins/IndexedViewMethods.h +0 -262
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +0 -152
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +0 -95
- package/eigen/Eigen/src/plugins/ReshapedMethods.h +0 -149
- package/eigen/README.md +0 -5
|
@@ -10,676 +10,559 @@
|
|
|
10
10
|
#ifndef EIGEN_DENSECOEFFSBASE_H
|
|
11
11
|
#define EIGEN_DENSECOEFFSBASE_H
|
|
12
12
|
|
|
13
|
+
// IWYU pragma: private
|
|
14
|
+
#include "./InternalHeaderCheck.h"
|
|
15
|
+
|
|
13
16
|
namespace Eigen {
|
|
14
17
|
|
|
15
18
|
namespace internal {
|
|
16
|
-
template<typename T>
|
|
17
|
-
{
|
|
18
|
-
typedef
|
|
19
|
+
template <typename T>
|
|
20
|
+
struct add_const_on_value_type_if_arithmetic {
|
|
21
|
+
typedef std::conditional_t<is_arithmetic<T>::value, T, add_const_on_value_type_t<T>> type;
|
|
19
22
|
};
|
|
20
|
-
}
|
|
23
|
+
} // namespace internal
|
|
21
24
|
|
|
22
25
|
/** \brief Base class providing read-only coefficient access to matrices and arrays.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
template<typename Derived>
|
|
35
|
-
class DenseCoeffsBase<Derived,ReadOnlyAccessors> : public EigenBase<Derived>
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
* PacketAccessBit and the LinearAccessBit.
|
|
252
|
-
*
|
|
253
|
-
* The \a LoadMode parameter may have the value \a #Aligned or \a #Unaligned. Its effect is to select
|
|
254
|
-
* the appropriate vectorization instruction. Aligned access is faster, but is only possible for packets
|
|
255
|
-
* starting at an address which is a multiple of the packet size.
|
|
256
|
-
*/
|
|
257
|
-
|
|
258
|
-
template<int LoadMode>
|
|
259
|
-
EIGEN_STRONG_INLINE PacketReturnType packet(Index index) const
|
|
260
|
-
{
|
|
261
|
-
EIGEN_STATIC_ASSERT(internal::evaluator<Derived>::Flags & LinearAccessBit,
|
|
262
|
-
THIS_COEFFICIENT_ACCESSOR_TAKING_ONE_ACCESS_IS_ONLY_FOR_EXPRESSIONS_ALLOWING_LINEAR_ACCESS)
|
|
263
|
-
typedef typename internal::packet_traits<Scalar>::type DefaultPacketType;
|
|
264
|
-
eigen_internal_assert(index >= 0 && index < size());
|
|
265
|
-
return internal::evaluator<Derived>(derived()).template packet<LoadMode,DefaultPacketType>(index);
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
protected:
|
|
269
|
-
// explanation: DenseBase is doing "using ..." on the methods from DenseCoeffsBase.
|
|
270
|
-
// But some methods are only available in the DirectAccess case.
|
|
271
|
-
// So we add dummy methods here with these names, so that "using... " doesn't fail.
|
|
272
|
-
// It's not private so that the child class DenseBase can access them, and it's not public
|
|
273
|
-
// either since it's an implementation detail, so has to be protected.
|
|
274
|
-
void coeffRef();
|
|
275
|
-
void coeffRefByOuterInner();
|
|
276
|
-
void writePacket();
|
|
277
|
-
void writePacketByOuterInner();
|
|
278
|
-
void copyCoeff();
|
|
279
|
-
void copyCoeffByOuterInner();
|
|
280
|
-
void copyPacket();
|
|
281
|
-
void copyPacketByOuterInner();
|
|
282
|
-
void stride();
|
|
283
|
-
void innerStride();
|
|
284
|
-
void outerStride();
|
|
285
|
-
void rowStride();
|
|
286
|
-
void colStride();
|
|
26
|
+
* \ingroup Core_Module
|
|
27
|
+
* \tparam Derived Type of the derived class
|
|
28
|
+
*
|
|
29
|
+
* \note #ReadOnlyAccessors Constant indicating read-only access
|
|
30
|
+
*
|
|
31
|
+
* This class defines the \c operator() \c const function and friends, which can be used to read specific
|
|
32
|
+
* entries of a matrix or array.
|
|
33
|
+
*
|
|
34
|
+
* \sa DenseCoeffsBase<Derived, WriteAccessors>, DenseCoeffsBase<Derived, DirectAccessors>,
|
|
35
|
+
* \ref TopicClassHierarchy
|
|
36
|
+
*/
|
|
37
|
+
template <typename Derived>
|
|
38
|
+
class DenseCoeffsBase<Derived, ReadOnlyAccessors> : public EigenBase<Derived> {
|
|
39
|
+
public:
|
|
40
|
+
typedef typename internal::traits<Derived>::StorageKind StorageKind;
|
|
41
|
+
typedef typename internal::traits<Derived>::Scalar Scalar;
|
|
42
|
+
typedef typename internal::packet_traits<Scalar>::type PacketScalar;
|
|
43
|
+
|
|
44
|
+
// Explanation for this CoeffReturnType typedef.
|
|
45
|
+
// - This is the return type of the coeff() method.
|
|
46
|
+
// - The LvalueBit means exactly that we can offer a coeffRef() method, which means exactly that we can get references
|
|
47
|
+
// to coeffs, which means exactly that we can have coeff() return a const reference (as opposed to returning a value).
|
|
48
|
+
// - The DirectAccessBit means exactly that the underlying data of coefficients can be directly accessed as a plain
|
|
49
|
+
// strided array, which means exactly that the underlying data of coefficients does exist in memory, which means
|
|
50
|
+
// exactly that the coefficients is const-referencable, which means exactly that we can have coeff() return a const
|
|
51
|
+
// reference. For example, Map<const Matrix> have DirectAccessBit but not LvalueBit, so that Map<const Matrix>.coeff()
|
|
52
|
+
// does points to a const Scalar& which exists in memory, while does not allow coeffRef() as it would not provide a
|
|
53
|
+
// lvalue. Notice that DirectAccessBit and LvalueBit are mutually orthogonal.
|
|
54
|
+
// - The is_arithmetic check is required since "const int", "const double", etc. will cause warnings on some systems
|
|
55
|
+
// while the declaration of "const T", where T is a non arithmetic type does not. Always returning "const Scalar&" is
|
|
56
|
+
// not possible, since the underlying expressions might not offer a valid address the reference could be referring to.
|
|
57
|
+
typedef std::conditional_t<bool(internal::traits<Derived>::Flags&(LvalueBit | DirectAccessBit)), const Scalar&,
|
|
58
|
+
std::conditional_t<internal::is_arithmetic<Scalar>::value, Scalar, const Scalar>>
|
|
59
|
+
CoeffReturnType;
|
|
60
|
+
|
|
61
|
+
typedef typename internal::add_const_on_value_type_if_arithmetic<typename internal::packet_traits<Scalar>::type>::type
|
|
62
|
+
PacketReturnType;
|
|
63
|
+
|
|
64
|
+
typedef EigenBase<Derived> Base;
|
|
65
|
+
using Base::cols;
|
|
66
|
+
using Base::derived;
|
|
67
|
+
using Base::rows;
|
|
68
|
+
using Base::size;
|
|
69
|
+
|
|
70
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index rowIndexByOuterInner(Index outer, Index inner) const {
|
|
71
|
+
return int(Derived::RowsAtCompileTime) == 1 ? 0
|
|
72
|
+
: int(Derived::ColsAtCompileTime) == 1 ? inner
|
|
73
|
+
: int(Derived::Flags) & RowMajorBit ? outer
|
|
74
|
+
: inner;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index colIndexByOuterInner(Index outer, Index inner) const {
|
|
78
|
+
return int(Derived::ColsAtCompileTime) == 1 ? 0
|
|
79
|
+
: int(Derived::RowsAtCompileTime) == 1 ? inner
|
|
80
|
+
: int(Derived::Flags) & RowMajorBit ? inner
|
|
81
|
+
: outer;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/** Short version: don't use this function, use
|
|
85
|
+
* \link operator()(Index,Index) const \endlink instead.
|
|
86
|
+
*
|
|
87
|
+
* Long version: this function is similar to
|
|
88
|
+
* \link operator()(Index,Index) const \endlink, but without the assertion.
|
|
89
|
+
* Use this for limiting the performance cost of debugging code when doing
|
|
90
|
+
* repeated coefficient access. Only use this when it is guaranteed that the
|
|
91
|
+
* parameters \a row and \a col are in range.
|
|
92
|
+
*
|
|
93
|
+
* If EIGEN_INTERNAL_DEBUGGING is defined, an assertion will be made, making this
|
|
94
|
+
* function equivalent to \link operator()(Index,Index) const \endlink.
|
|
95
|
+
*
|
|
96
|
+
* \sa operator()(Index,Index) const, coeffRef(Index,Index), coeff(Index) const
|
|
97
|
+
*/
|
|
98
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr CoeffReturnType coeff(Index row, Index col) const {
|
|
99
|
+
eigen_internal_assert(row >= 0 && row < rows() && col >= 0 && col < cols());
|
|
100
|
+
return internal::evaluator<Derived>(derived()).coeff(row, col);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr CoeffReturnType coeffByOuterInner(Index outer, Index inner) const {
|
|
104
|
+
return coeff(rowIndexByOuterInner(outer, inner), colIndexByOuterInner(outer, inner));
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/** \returns the coefficient at given the given row and column.
|
|
108
|
+
*
|
|
109
|
+
* \sa operator()(Index,Index), operator[](Index)
|
|
110
|
+
*/
|
|
111
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr CoeffReturnType operator()(Index row, Index col) const {
|
|
112
|
+
eigen_assert(row >= 0 && row < rows() && col >= 0 && col < cols());
|
|
113
|
+
return coeff(row, col);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/** Short version: don't use this function, use
|
|
117
|
+
* \link operator[](Index) const \endlink instead.
|
|
118
|
+
*
|
|
119
|
+
* Long version: this function is similar to
|
|
120
|
+
* \link operator[](Index) const \endlink, but without the assertion.
|
|
121
|
+
* Use this for limiting the performance cost of debugging code when doing
|
|
122
|
+
* repeated coefficient access. Only use this when it is guaranteed that the
|
|
123
|
+
* parameter \a index is in range.
|
|
124
|
+
*
|
|
125
|
+
* If EIGEN_INTERNAL_DEBUGGING is defined, an assertion will be made, making this
|
|
126
|
+
* function equivalent to \link operator[](Index) const \endlink.
|
|
127
|
+
*
|
|
128
|
+
* \sa operator[](Index) const, coeffRef(Index), coeff(Index,Index) const
|
|
129
|
+
*/
|
|
130
|
+
|
|
131
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr CoeffReturnType coeff(Index index) const {
|
|
132
|
+
EIGEN_STATIC_ASSERT(internal::evaluator<Derived>::Flags & LinearAccessBit,
|
|
133
|
+
THIS_COEFFICIENT_ACCESSOR_TAKING_ONE_ACCESS_IS_ONLY_FOR_EXPRESSIONS_ALLOWING_LINEAR_ACCESS)
|
|
134
|
+
eigen_internal_assert(index >= 0 && index < size());
|
|
135
|
+
return internal::evaluator<Derived>(derived()).coeff(index);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/** \returns the coefficient at given index.
|
|
139
|
+
*
|
|
140
|
+
* This method is allowed only for vector expressions, and for matrix expressions having the LinearAccessBit.
|
|
141
|
+
*
|
|
142
|
+
* \sa operator[](Index), operator()(Index,Index) const, x() const, y() const,
|
|
143
|
+
* z() const, w() const
|
|
144
|
+
*/
|
|
145
|
+
|
|
146
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr CoeffReturnType operator[](Index index) const {
|
|
147
|
+
EIGEN_STATIC_ASSERT(Derived::IsVectorAtCompileTime,
|
|
148
|
+
THE_BRACKET_OPERATOR_IS_ONLY_FOR_VECTORS__USE_THE_PARENTHESIS_OPERATOR_INSTEAD)
|
|
149
|
+
eigen_assert(index >= 0 && index < size());
|
|
150
|
+
return coeff(index);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/** \returns the coefficient at given index.
|
|
154
|
+
*
|
|
155
|
+
* This is synonymous to operator[](Index) const.
|
|
156
|
+
*
|
|
157
|
+
* This method is allowed only for vector expressions, and for matrix expressions having the LinearAccessBit.
|
|
158
|
+
*
|
|
159
|
+
* \sa operator[](Index), operator()(Index,Index) const, x() const, y() const,
|
|
160
|
+
* z() const, w() const
|
|
161
|
+
*/
|
|
162
|
+
|
|
163
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr CoeffReturnType operator()(Index index) const {
|
|
164
|
+
eigen_assert(index >= 0 && index < size());
|
|
165
|
+
return coeff(index);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/** equivalent to operator[](0). */
|
|
169
|
+
|
|
170
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr CoeffReturnType x() const { return (*this)[0]; }
|
|
171
|
+
|
|
172
|
+
/** equivalent to operator[](1). */
|
|
173
|
+
|
|
174
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr CoeffReturnType y() const {
|
|
175
|
+
EIGEN_STATIC_ASSERT(Derived::SizeAtCompileTime == -1 || Derived::SizeAtCompileTime >= 2, OUT_OF_RANGE_ACCESS);
|
|
176
|
+
return (*this)[1];
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/** equivalent to operator[](2). */
|
|
180
|
+
|
|
181
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr CoeffReturnType z() const {
|
|
182
|
+
EIGEN_STATIC_ASSERT(Derived::SizeAtCompileTime == -1 || Derived::SizeAtCompileTime >= 3, OUT_OF_RANGE_ACCESS);
|
|
183
|
+
return (*this)[2];
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/** equivalent to operator[](3). */
|
|
187
|
+
|
|
188
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr CoeffReturnType w() const {
|
|
189
|
+
EIGEN_STATIC_ASSERT(Derived::SizeAtCompileTime == -1 || Derived::SizeAtCompileTime >= 4, OUT_OF_RANGE_ACCESS);
|
|
190
|
+
return (*this)[3];
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/** \internal
|
|
194
|
+
* \returns the packet of coefficients starting at the given row and column. It is your responsibility
|
|
195
|
+
* to ensure that a packet really starts there. This method is only available on expressions having the
|
|
196
|
+
* PacketAccessBit.
|
|
197
|
+
*
|
|
198
|
+
* The \a LoadMode parameter may have the value \a #Aligned or \a #Unaligned. Its effect is to select
|
|
199
|
+
* the appropriate vectorization instruction. Aligned access is faster, but is only possible for packets
|
|
200
|
+
* starting at an address which is a multiple of the packet size.
|
|
201
|
+
*/
|
|
202
|
+
|
|
203
|
+
template <int LoadMode>
|
|
204
|
+
EIGEN_STRONG_INLINE PacketReturnType packet(Index row, Index col) const {
|
|
205
|
+
typedef typename internal::packet_traits<Scalar>::type DefaultPacketType;
|
|
206
|
+
eigen_internal_assert(row >= 0 && row < rows() && col >= 0 && col < cols());
|
|
207
|
+
return internal::evaluator<Derived>(derived()).template packet<LoadMode, DefaultPacketType>(row, col);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/** \internal */
|
|
211
|
+
template <int LoadMode>
|
|
212
|
+
EIGEN_STRONG_INLINE PacketReturnType packetByOuterInner(Index outer, Index inner) const {
|
|
213
|
+
return packet<LoadMode>(rowIndexByOuterInner(outer, inner), colIndexByOuterInner(outer, inner));
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/** \internal
|
|
217
|
+
* \returns the packet of coefficients starting at the given index. It is your responsibility
|
|
218
|
+
* to ensure that a packet really starts there. This method is only available on expressions having the
|
|
219
|
+
* PacketAccessBit and the LinearAccessBit.
|
|
220
|
+
*
|
|
221
|
+
* The \a LoadMode parameter may have the value \a #Aligned or \a #Unaligned. Its effect is to select
|
|
222
|
+
* the appropriate vectorization instruction. Aligned access is faster, but is only possible for packets
|
|
223
|
+
* starting at an address which is a multiple of the packet size.
|
|
224
|
+
*/
|
|
225
|
+
|
|
226
|
+
template <int LoadMode>
|
|
227
|
+
EIGEN_STRONG_INLINE PacketReturnType packet(Index index) const {
|
|
228
|
+
EIGEN_STATIC_ASSERT(internal::evaluator<Derived>::Flags & LinearAccessBit,
|
|
229
|
+
THIS_COEFFICIENT_ACCESSOR_TAKING_ONE_ACCESS_IS_ONLY_FOR_EXPRESSIONS_ALLOWING_LINEAR_ACCESS)
|
|
230
|
+
typedef typename internal::packet_traits<Scalar>::type DefaultPacketType;
|
|
231
|
+
eigen_internal_assert(index >= 0 && index < size());
|
|
232
|
+
return internal::evaluator<Derived>(derived()).template packet<LoadMode, DefaultPacketType>(index);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
protected:
|
|
236
|
+
// explanation: DenseBase is doing "using ..." on the methods from DenseCoeffsBase.
|
|
237
|
+
// But some methods are only available in the DirectAccess case.
|
|
238
|
+
// So we add dummy methods here with these names, so that "using... " doesn't fail.
|
|
239
|
+
// It's not private so that the child class DenseBase can access them, and it's not public
|
|
240
|
+
// either since it's an implementation detail, so has to be protected.
|
|
241
|
+
void coeffRef();
|
|
242
|
+
void coeffRefByOuterInner();
|
|
243
|
+
void writePacket();
|
|
244
|
+
void writePacketByOuterInner();
|
|
245
|
+
void copyCoeff();
|
|
246
|
+
void copyCoeffByOuterInner();
|
|
247
|
+
void copyPacket();
|
|
248
|
+
void copyPacketByOuterInner();
|
|
249
|
+
void stride();
|
|
250
|
+
void innerStride();
|
|
251
|
+
void outerStride();
|
|
252
|
+
void rowStride();
|
|
253
|
+
void colStride();
|
|
287
254
|
};
|
|
288
255
|
|
|
289
256
|
/** \brief Base class providing read/write coefficient access to matrices and arrays.
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
template<typename Derived>
|
|
302
|
-
class DenseCoeffsBase<Derived, WriteAccessors> : public DenseCoeffsBase<Derived, ReadOnlyAccessors>
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
EIGEN_DEVICE_FUNC
|
|
434
|
-
EIGEN_STRONG_INLINE Scalar&
|
|
435
|
-
x() { return (*this)[0]; }
|
|
436
|
-
|
|
437
|
-
/** equivalent to operator[](1). */
|
|
438
|
-
|
|
439
|
-
EIGEN_DEVICE_FUNC
|
|
440
|
-
EIGEN_STRONG_INLINE Scalar&
|
|
441
|
-
y()
|
|
442
|
-
{
|
|
443
|
-
EIGEN_STATIC_ASSERT(Derived::SizeAtCompileTime==-1 || Derived::SizeAtCompileTime>=2, OUT_OF_RANGE_ACCESS);
|
|
444
|
-
return (*this)[1];
|
|
445
|
-
}
|
|
446
|
-
|
|
447
|
-
/** equivalent to operator[](2). */
|
|
448
|
-
|
|
449
|
-
EIGEN_DEVICE_FUNC
|
|
450
|
-
EIGEN_STRONG_INLINE Scalar&
|
|
451
|
-
z()
|
|
452
|
-
{
|
|
453
|
-
EIGEN_STATIC_ASSERT(Derived::SizeAtCompileTime==-1 || Derived::SizeAtCompileTime>=3, OUT_OF_RANGE_ACCESS);
|
|
454
|
-
return (*this)[2];
|
|
455
|
-
}
|
|
456
|
-
|
|
457
|
-
/** equivalent to operator[](3). */
|
|
458
|
-
|
|
459
|
-
EIGEN_DEVICE_FUNC
|
|
460
|
-
EIGEN_STRONG_INLINE Scalar&
|
|
461
|
-
w()
|
|
462
|
-
{
|
|
463
|
-
EIGEN_STATIC_ASSERT(Derived::SizeAtCompileTime==-1 || Derived::SizeAtCompileTime>=4, OUT_OF_RANGE_ACCESS);
|
|
464
|
-
return (*this)[3];
|
|
465
|
-
}
|
|
257
|
+
* \ingroup Core_Module
|
|
258
|
+
* \tparam Derived Type of the derived class
|
|
259
|
+
*
|
|
260
|
+
* \note #WriteAccessors Constant indicating read/write access
|
|
261
|
+
*
|
|
262
|
+
* This class defines the non-const \c operator() function and friends, which can be used to write specific
|
|
263
|
+
* entries of a matrix or array. This class inherits DenseCoeffsBase<Derived, ReadOnlyAccessors> which
|
|
264
|
+
* defines the const variant for reading specific entries.
|
|
265
|
+
*
|
|
266
|
+
* \sa DenseCoeffsBase<Derived, DirectAccessors>, \ref TopicClassHierarchy
|
|
267
|
+
*/
|
|
268
|
+
template <typename Derived>
|
|
269
|
+
class DenseCoeffsBase<Derived, WriteAccessors> : public DenseCoeffsBase<Derived, ReadOnlyAccessors> {
|
|
270
|
+
public:
|
|
271
|
+
typedef DenseCoeffsBase<Derived, ReadOnlyAccessors> Base;
|
|
272
|
+
|
|
273
|
+
typedef typename internal::traits<Derived>::StorageKind StorageKind;
|
|
274
|
+
typedef typename internal::traits<Derived>::Scalar Scalar;
|
|
275
|
+
typedef typename internal::packet_traits<Scalar>::type PacketScalar;
|
|
276
|
+
typedef typename NumTraits<Scalar>::Real RealScalar;
|
|
277
|
+
|
|
278
|
+
using Base::coeff;
|
|
279
|
+
using Base::colIndexByOuterInner;
|
|
280
|
+
using Base::cols;
|
|
281
|
+
using Base::derived;
|
|
282
|
+
using Base::rowIndexByOuterInner;
|
|
283
|
+
using Base::rows;
|
|
284
|
+
using Base::size;
|
|
285
|
+
using Base::operator[];
|
|
286
|
+
using Base::operator();
|
|
287
|
+
using Base::w;
|
|
288
|
+
using Base::x;
|
|
289
|
+
using Base::y;
|
|
290
|
+
using Base::z;
|
|
291
|
+
|
|
292
|
+
/** Short version: don't use this function, use
|
|
293
|
+
* \link operator()(Index,Index) \endlink instead.
|
|
294
|
+
*
|
|
295
|
+
* Long version: this function is similar to
|
|
296
|
+
* \link operator()(Index,Index) \endlink, but without the assertion.
|
|
297
|
+
* Use this for limiting the performance cost of debugging code when doing
|
|
298
|
+
* repeated coefficient access. Only use this when it is guaranteed that the
|
|
299
|
+
* parameters \a row and \a col are in range.
|
|
300
|
+
*
|
|
301
|
+
* If EIGEN_INTERNAL_DEBUGGING is defined, an assertion will be made, making this
|
|
302
|
+
* function equivalent to \link operator()(Index,Index) \endlink.
|
|
303
|
+
*
|
|
304
|
+
* \sa operator()(Index,Index), coeff(Index, Index) const, coeffRef(Index)
|
|
305
|
+
*/
|
|
306
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Scalar& coeffRef(Index row, Index col) {
|
|
307
|
+
eigen_internal_assert(row >= 0 && row < rows() && col >= 0 && col < cols());
|
|
308
|
+
return internal::evaluator<Derived>(derived()).coeffRef(row, col);
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar& coeffRefByOuterInner(Index outer, Index inner) {
|
|
312
|
+
return coeffRef(rowIndexByOuterInner(outer, inner), colIndexByOuterInner(outer, inner));
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
/** \returns a reference to the coefficient at given the given row and column.
|
|
316
|
+
*
|
|
317
|
+
* \sa operator[](Index)
|
|
318
|
+
*/
|
|
319
|
+
|
|
320
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Scalar& operator()(Index row, Index col) {
|
|
321
|
+
eigen_assert(row >= 0 && row < rows() && col >= 0 && col < cols());
|
|
322
|
+
return coeffRef(row, col);
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
/** Short version: don't use this function, use
|
|
326
|
+
* \link operator[](Index) \endlink instead.
|
|
327
|
+
*
|
|
328
|
+
* Long version: this function is similar to
|
|
329
|
+
* \link operator[](Index) \endlink, but without the assertion.
|
|
330
|
+
* Use this for limiting the performance cost of debugging code when doing
|
|
331
|
+
* repeated coefficient access. Only use this when it is guaranteed that the
|
|
332
|
+
* parameters \a row and \a col are in range.
|
|
333
|
+
*
|
|
334
|
+
* If EIGEN_INTERNAL_DEBUGGING is defined, an assertion will be made, making this
|
|
335
|
+
* function equivalent to \link operator[](Index) \endlink.
|
|
336
|
+
*
|
|
337
|
+
* \sa operator[](Index), coeff(Index) const, coeffRef(Index,Index)
|
|
338
|
+
*/
|
|
339
|
+
|
|
340
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Scalar& coeffRef(Index index) {
|
|
341
|
+
EIGEN_STATIC_ASSERT(internal::evaluator<Derived>::Flags & LinearAccessBit,
|
|
342
|
+
THIS_COEFFICIENT_ACCESSOR_TAKING_ONE_ACCESS_IS_ONLY_FOR_EXPRESSIONS_ALLOWING_LINEAR_ACCESS)
|
|
343
|
+
eigen_internal_assert(index >= 0 && index < size());
|
|
344
|
+
return internal::evaluator<Derived>(derived()).coeffRef(index);
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
/** \returns a reference to the coefficient at given index.
|
|
348
|
+
*
|
|
349
|
+
* This method is allowed only for vector expressions, and for matrix expressions having the LinearAccessBit.
|
|
350
|
+
*
|
|
351
|
+
* \sa operator[](Index) const, operator()(Index,Index), x(), y(), z(), w()
|
|
352
|
+
*/
|
|
353
|
+
|
|
354
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Scalar& operator[](Index index) {
|
|
355
|
+
EIGEN_STATIC_ASSERT(Derived::IsVectorAtCompileTime,
|
|
356
|
+
THE_BRACKET_OPERATOR_IS_ONLY_FOR_VECTORS__USE_THE_PARENTHESIS_OPERATOR_INSTEAD)
|
|
357
|
+
eigen_assert(index >= 0 && index < size());
|
|
358
|
+
return coeffRef(index);
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
/** \returns a reference to the coefficient at given index.
|
|
362
|
+
*
|
|
363
|
+
* This is synonymous to operator[](Index).
|
|
364
|
+
*
|
|
365
|
+
* This method is allowed only for vector expressions, and for matrix expressions having the LinearAccessBit.
|
|
366
|
+
*
|
|
367
|
+
* \sa operator[](Index) const, operator()(Index,Index), x(), y(), z(), w()
|
|
368
|
+
*/
|
|
369
|
+
|
|
370
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Scalar& operator()(Index index) {
|
|
371
|
+
eigen_assert(index >= 0 && index < size());
|
|
372
|
+
return coeffRef(index);
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
/** equivalent to operator[](0). */
|
|
376
|
+
|
|
377
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Scalar& x() { return (*this)[0]; }
|
|
378
|
+
|
|
379
|
+
/** equivalent to operator[](1). */
|
|
380
|
+
|
|
381
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Scalar& y() {
|
|
382
|
+
EIGEN_STATIC_ASSERT(Derived::SizeAtCompileTime == -1 || Derived::SizeAtCompileTime >= 2, OUT_OF_RANGE_ACCESS);
|
|
383
|
+
return (*this)[1];
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
/** equivalent to operator[](2). */
|
|
387
|
+
|
|
388
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Scalar& z() {
|
|
389
|
+
EIGEN_STATIC_ASSERT(Derived::SizeAtCompileTime == -1 || Derived::SizeAtCompileTime >= 3, OUT_OF_RANGE_ACCESS);
|
|
390
|
+
return (*this)[2];
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
/** equivalent to operator[](3). */
|
|
394
|
+
|
|
395
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Scalar& w() {
|
|
396
|
+
EIGEN_STATIC_ASSERT(Derived::SizeAtCompileTime == -1 || Derived::SizeAtCompileTime >= 4, OUT_OF_RANGE_ACCESS);
|
|
397
|
+
return (*this)[3];
|
|
398
|
+
}
|
|
466
399
|
};
|
|
467
400
|
|
|
468
401
|
/** \brief Base class providing direct read-only coefficient access to matrices and arrays.
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
template<typename Derived>
|
|
481
|
-
class DenseCoeffsBase<Derived, DirectAccessors> : public DenseCoeffsBase<Derived, ReadOnlyAccessors>
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
}
|
|
520
|
-
|
|
521
|
-
/** \returns the pointer increment between two consecutive rows.
|
|
522
|
-
*
|
|
523
|
-
* \sa innerStride(), outerStride(), colStride()
|
|
524
|
-
*/
|
|
525
|
-
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
|
|
526
|
-
inline Index rowStride() const
|
|
527
|
-
{
|
|
528
|
-
return Derived::IsRowMajor ? outerStride() : innerStride();
|
|
529
|
-
}
|
|
530
|
-
|
|
531
|
-
/** \returns the pointer increment between two consecutive columns.
|
|
532
|
-
*
|
|
533
|
-
* \sa innerStride(), outerStride(), rowStride()
|
|
534
|
-
*/
|
|
535
|
-
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
|
|
536
|
-
inline Index colStride() const
|
|
537
|
-
{
|
|
538
|
-
return Derived::IsRowMajor ? innerStride() : outerStride();
|
|
539
|
-
}
|
|
402
|
+
* \ingroup Core_Module
|
|
403
|
+
* \tparam Derived Type of the derived class
|
|
404
|
+
*
|
|
405
|
+
* \note #DirectAccessors Constant indicating direct access
|
|
406
|
+
*
|
|
407
|
+
* This class defines functions to work with strides which can be used to access entries directly. This class
|
|
408
|
+
* inherits DenseCoeffsBase<Derived, ReadOnlyAccessors> which defines functions to access entries read-only using
|
|
409
|
+
* \c operator() .
|
|
410
|
+
*
|
|
411
|
+
* \sa \blank \ref TopicClassHierarchy
|
|
412
|
+
*/
|
|
413
|
+
template <typename Derived>
|
|
414
|
+
class DenseCoeffsBase<Derived, DirectAccessors> : public DenseCoeffsBase<Derived, ReadOnlyAccessors> {
|
|
415
|
+
public:
|
|
416
|
+
typedef DenseCoeffsBase<Derived, ReadOnlyAccessors> Base;
|
|
417
|
+
typedef typename internal::traits<Derived>::Scalar Scalar;
|
|
418
|
+
typedef typename NumTraits<Scalar>::Real RealScalar;
|
|
419
|
+
|
|
420
|
+
using Base::cols;
|
|
421
|
+
using Base::derived;
|
|
422
|
+
using Base::rows;
|
|
423
|
+
using Base::size;
|
|
424
|
+
|
|
425
|
+
/** \returns the pointer increment between two consecutive elements within a slice in the inner direction.
|
|
426
|
+
*
|
|
427
|
+
* \sa outerStride(), rowStride(), colStride()
|
|
428
|
+
*/
|
|
429
|
+
EIGEN_DEVICE_FUNC constexpr Index innerStride() const { return derived().innerStride(); }
|
|
430
|
+
|
|
431
|
+
/** \returns the pointer increment between two consecutive inner slices (for example, between two consecutive columns
|
|
432
|
+
* in a column-major matrix).
|
|
433
|
+
*
|
|
434
|
+
* \sa innerStride(), rowStride(), colStride()
|
|
435
|
+
*/
|
|
436
|
+
EIGEN_DEVICE_FUNC constexpr Index outerStride() const { return derived().outerStride(); }
|
|
437
|
+
|
|
438
|
+
// FIXME shall we remove it ?
|
|
439
|
+
constexpr Index stride() const { return Derived::IsVectorAtCompileTime ? innerStride() : outerStride(); }
|
|
440
|
+
|
|
441
|
+
/** \returns the pointer increment between two consecutive rows.
|
|
442
|
+
*
|
|
443
|
+
* \sa innerStride(), outerStride(), colStride()
|
|
444
|
+
*/
|
|
445
|
+
EIGEN_DEVICE_FUNC constexpr Index rowStride() const { return Derived::IsRowMajor ? outerStride() : innerStride(); }
|
|
446
|
+
|
|
447
|
+
/** \returns the pointer increment between two consecutive columns.
|
|
448
|
+
*
|
|
449
|
+
* \sa innerStride(), outerStride(), rowStride()
|
|
450
|
+
*/
|
|
451
|
+
EIGEN_DEVICE_FUNC constexpr Index colStride() const { return Derived::IsRowMajor ? innerStride() : outerStride(); }
|
|
540
452
|
};
|
|
541
453
|
|
|
542
454
|
/** \brief Base class providing direct read/write coefficient access to matrices and arrays.
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
template<typename Derived>
|
|
555
|
-
class DenseCoeffsBase<Derived, DirectWriteAccessors>
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
*
|
|
598
|
-
* \sa innerStride(), outerStride(), colStride()
|
|
599
|
-
*/
|
|
600
|
-
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
|
|
601
|
-
inline Index rowStride() const EIGEN_NOEXCEPT
|
|
602
|
-
{
|
|
603
|
-
return Derived::IsRowMajor ? outerStride() : innerStride();
|
|
604
|
-
}
|
|
605
|
-
|
|
606
|
-
/** \returns the pointer increment between two consecutive columns.
|
|
607
|
-
*
|
|
608
|
-
* \sa innerStride(), outerStride(), rowStride()
|
|
609
|
-
*/
|
|
610
|
-
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
|
|
611
|
-
inline Index colStride() const EIGEN_NOEXCEPT
|
|
612
|
-
{
|
|
613
|
-
return Derived::IsRowMajor ? innerStride() : outerStride();
|
|
614
|
-
}
|
|
455
|
+
* \ingroup Core_Module
|
|
456
|
+
* \tparam Derived Type of the derived class
|
|
457
|
+
*
|
|
458
|
+
* \note #DirectWriteAccessors Constant indicating direct access
|
|
459
|
+
*
|
|
460
|
+
* This class defines functions to work with strides which can be used to access entries directly. This class
|
|
461
|
+
* inherits DenseCoeffsBase<Derived, WriteAccessors> which defines functions to access entries read/write using
|
|
462
|
+
* \c operator().
|
|
463
|
+
*
|
|
464
|
+
* \sa \blank \ref TopicClassHierarchy
|
|
465
|
+
*/
|
|
466
|
+
template <typename Derived>
|
|
467
|
+
class DenseCoeffsBase<Derived, DirectWriteAccessors> : public DenseCoeffsBase<Derived, WriteAccessors> {
|
|
468
|
+
public:
|
|
469
|
+
typedef DenseCoeffsBase<Derived, WriteAccessors> Base;
|
|
470
|
+
typedef typename internal::traits<Derived>::Scalar Scalar;
|
|
471
|
+
typedef typename NumTraits<Scalar>::Real RealScalar;
|
|
472
|
+
|
|
473
|
+
using Base::cols;
|
|
474
|
+
using Base::derived;
|
|
475
|
+
using Base::rows;
|
|
476
|
+
using Base::size;
|
|
477
|
+
|
|
478
|
+
/** \returns the pointer increment between two consecutive elements within a slice in the inner direction.
|
|
479
|
+
*
|
|
480
|
+
* \sa outerStride(), rowStride(), colStride()
|
|
481
|
+
*/
|
|
482
|
+
EIGEN_DEVICE_FUNC constexpr Index innerStride() const noexcept { return derived().innerStride(); }
|
|
483
|
+
|
|
484
|
+
/** \returns the pointer increment between two consecutive inner slices (for example, between two consecutive columns
|
|
485
|
+
* in a column-major matrix).
|
|
486
|
+
*
|
|
487
|
+
* \sa innerStride(), rowStride(), colStride()
|
|
488
|
+
*/
|
|
489
|
+
EIGEN_DEVICE_FUNC constexpr Index outerStride() const noexcept { return derived().outerStride(); }
|
|
490
|
+
|
|
491
|
+
// FIXME shall we remove it ?
|
|
492
|
+
constexpr Index stride() const noexcept { return Derived::IsVectorAtCompileTime ? innerStride() : outerStride(); }
|
|
493
|
+
|
|
494
|
+
/** \returns the pointer increment between two consecutive rows.
|
|
495
|
+
*
|
|
496
|
+
* \sa innerStride(), outerStride(), colStride()
|
|
497
|
+
*/
|
|
498
|
+
EIGEN_DEVICE_FUNC constexpr Index rowStride() const noexcept {
|
|
499
|
+
return Derived::IsRowMajor ? outerStride() : innerStride();
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
/** \returns the pointer increment between two consecutive columns.
|
|
503
|
+
*
|
|
504
|
+
* \sa innerStride(), outerStride(), rowStride()
|
|
505
|
+
*/
|
|
506
|
+
EIGEN_DEVICE_FUNC constexpr Index colStride() const noexcept {
|
|
507
|
+
return Derived::IsRowMajor ? innerStride() : outerStride();
|
|
508
|
+
}
|
|
615
509
|
};
|
|
616
510
|
|
|
617
511
|
namespace internal {
|
|
618
512
|
|
|
619
|
-
template<int Alignment, typename Derived, bool JustReturnZero>
|
|
620
|
-
struct first_aligned_impl
|
|
621
|
-
{
|
|
622
|
-
static EIGEN_CONSTEXPR inline Index run(const Derived&) EIGEN_NOEXCEPT
|
|
623
|
-
{ return 0; }
|
|
513
|
+
template <int Alignment, typename Derived, bool JustReturnZero>
|
|
514
|
+
struct first_aligned_impl {
|
|
515
|
+
static constexpr Index run(const Derived&) noexcept { return 0; }
|
|
624
516
|
};
|
|
625
517
|
|
|
626
|
-
template<int Alignment, typename Derived>
|
|
627
|
-
struct first_aligned_impl<Alignment, Derived, false>
|
|
628
|
-
{
|
|
629
|
-
static inline Index run(const Derived& m)
|
|
630
|
-
{
|
|
631
|
-
return internal::first_aligned<Alignment>(m.data(), m.size());
|
|
632
|
-
}
|
|
518
|
+
template <int Alignment, typename Derived>
|
|
519
|
+
struct first_aligned_impl<Alignment, Derived, false> {
|
|
520
|
+
static inline Index run(const Derived& m) { return internal::first_aligned<Alignment>(m.data(), m.size()); }
|
|
633
521
|
};
|
|
634
522
|
|
|
635
|
-
/** \internal \returns the index of the first element of the array stored by \a m that is properly aligned with respect
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
{
|
|
523
|
+
/** \internal \returns the index of the first element of the array stored by \a m that is properly aligned with respect
|
|
524
|
+
* to \a Alignment for vectorization.
|
|
525
|
+
*
|
|
526
|
+
* \tparam Alignment requested alignment in Bytes.
|
|
527
|
+
*
|
|
528
|
+
* There is also the variant first_aligned(const Scalar*, Integer) defined in Memory.h. See it for more
|
|
529
|
+
* documentation.
|
|
530
|
+
*/
|
|
531
|
+
template <int Alignment, typename Derived>
|
|
532
|
+
static inline Index first_aligned(const DenseBase<Derived>& m) {
|
|
645
533
|
enum { ReturnZero = (int(evaluator<Derived>::Alignment) >= Alignment) || !(Derived::Flags & DirectAccessBit) };
|
|
646
534
|
return first_aligned_impl<Alignment, Derived, ReturnZero>::run(m.derived());
|
|
647
535
|
}
|
|
648
536
|
|
|
649
|
-
template<typename Derived>
|
|
650
|
-
static inline Index first_default_aligned(const DenseBase<Derived>& m)
|
|
651
|
-
{
|
|
537
|
+
template <typename Derived>
|
|
538
|
+
static inline Index first_default_aligned(const DenseBase<Derived>& m) {
|
|
652
539
|
typedef typename Derived::Scalar Scalar;
|
|
653
540
|
typedef typename packet_traits<Scalar>::type DefaultPacketType;
|
|
654
|
-
return internal::first_aligned<int(unpacket_traits<DefaultPacketType>::alignment),Derived>(m);
|
|
541
|
+
return internal::first_aligned<int(unpacket_traits<DefaultPacketType>::alignment), Derived>(m);
|
|
655
542
|
}
|
|
656
543
|
|
|
657
|
-
template<typename Derived, bool HasDirectAccess = has_direct_access<Derived>::ret>
|
|
658
|
-
struct inner_stride_at_compile_time
|
|
659
|
-
{
|
|
544
|
+
template <typename Derived, bool HasDirectAccess = has_direct_access<Derived>::ret>
|
|
545
|
+
struct inner_stride_at_compile_time {
|
|
660
546
|
enum { ret = traits<Derived>::InnerStrideAtCompileTime };
|
|
661
547
|
};
|
|
662
548
|
|
|
663
|
-
template<typename Derived>
|
|
664
|
-
struct inner_stride_at_compile_time<Derived, false>
|
|
665
|
-
{
|
|
549
|
+
template <typename Derived>
|
|
550
|
+
struct inner_stride_at_compile_time<Derived, false> {
|
|
666
551
|
enum { ret = 0 };
|
|
667
552
|
};
|
|
668
553
|
|
|
669
|
-
template<typename Derived, bool HasDirectAccess = has_direct_access<Derived>::ret>
|
|
670
|
-
struct outer_stride_at_compile_time
|
|
671
|
-
{
|
|
554
|
+
template <typename Derived, bool HasDirectAccess = has_direct_access<Derived>::ret>
|
|
555
|
+
struct outer_stride_at_compile_time {
|
|
672
556
|
enum { ret = traits<Derived>::OuterStrideAtCompileTime };
|
|
673
557
|
};
|
|
674
558
|
|
|
675
|
-
template<typename Derived>
|
|
676
|
-
struct outer_stride_at_compile_time<Derived, false>
|
|
677
|
-
{
|
|
559
|
+
template <typename Derived>
|
|
560
|
+
struct outer_stride_at_compile_time<Derived, false> {
|
|
678
561
|
enum { ret = 0 };
|
|
679
562
|
};
|
|
680
563
|
|
|
681
|
-
}
|
|
564
|
+
} // end namespace internal
|
|
682
565
|
|
|
683
|
-
}
|
|
566
|
+
} // end namespace Eigen
|
|
684
567
|
|
|
685
|
-
#endif
|
|
568
|
+
#endif // EIGEN_DENSECOEFFSBASE_H
|