@smake/eigen 1.0.2 → 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 -21
- package/eigen/Eigen/CholmodSupport +28 -28
- package/eigen/Eigen/Core +235 -326
- package/eigen/Eigen/Eigenvalues +16 -14
- package/eigen/Eigen/Geometry +21 -24
- package/eigen/Eigen/Householder +9 -8
- package/eigen/Eigen/IterativeLinearSolvers +8 -4
- package/eigen/Eigen/Jacobi +14 -14
- package/eigen/Eigen/KLUSupport +43 -0
- package/eigen/Eigen/LU +16 -20
- package/eigen/Eigen/MetisSupport +12 -12
- package/eigen/Eigen/OrderingMethods +54 -54
- package/eigen/Eigen/PaStiXSupport +23 -20
- package/eigen/Eigen/PardisoSupport +17 -14
- package/eigen/Eigen/QR +18 -21
- package/eigen/Eigen/QtAlignedMalloc +5 -13
- package/eigen/Eigen/SPQRSupport +21 -14
- package/eigen/Eigen/SVD +23 -18
- package/eigen/Eigen/Sparse +1 -4
- package/eigen/Eigen/SparseCholesky +18 -23
- package/eigen/Eigen/SparseCore +18 -17
- package/eigen/Eigen/SparseLU +12 -8
- 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 +377 -401
- package/eigen/Eigen/src/Cholesky/LLT.h +332 -360
- package/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +81 -56
- package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +620 -521
- package/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Core/ArithmeticSequence.h +239 -0
- package/eigen/Eigen/src/Core/Array.h +341 -294
- package/eigen/Eigen/src/Core/ArrayBase.h +190 -203
- package/eigen/Eigen/src/Core/ArrayWrapper.h +127 -171
- package/eigen/Eigen/src/Core/Assign.h +30 -40
- package/eigen/Eigen/src/Core/AssignEvaluator.h +711 -589
- package/eigen/Eigen/src/Core/Assign_MKL.h +130 -125
- package/eigen/Eigen/src/Core/BandMatrix.h +268 -283
- package/eigen/Eigen/src/Core/Block.h +375 -398
- package/eigen/Eigen/src/Core/CommaInitializer.h +86 -97
- package/eigen/Eigen/src/Core/ConditionEstimator.h +51 -53
- package/eigen/Eigen/src/Core/CoreEvaluators.h +1356 -1026
- package/eigen/Eigen/src/Core/CoreIterators.h +73 -59
- package/eigen/Eigen/src/Core/CwiseBinaryOp.h +114 -132
- package/eigen/Eigen/src/Core/CwiseNullaryOp.h +726 -617
- package/eigen/Eigen/src/Core/CwiseTernaryOp.h +77 -103
- package/eigen/Eigen/src/Core/CwiseUnaryOp.h +56 -68
- package/eigen/Eigen/src/Core/CwiseUnaryView.h +132 -95
- package/eigen/Eigen/src/Core/DenseBase.h +632 -571
- package/eigen/Eigen/src/Core/DenseCoeffsBase.h +511 -624
- package/eigen/Eigen/src/Core/DenseStorage.h +512 -509
- package/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
- package/eigen/Eigen/src/Core/Diagonal.h +169 -210
- package/eigen/Eigen/src/Core/DiagonalMatrix.h +351 -274
- package/eigen/Eigen/src/Core/DiagonalProduct.h +12 -10
- package/eigen/Eigen/src/Core/Dot.h +172 -222
- package/eigen/Eigen/src/Core/EigenBase.h +75 -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 -109
- package/eigen/Eigen/src/Core/Fuzzy.h +82 -105
- package/eigen/Eigen/src/Core/GeneralProduct.h +327 -263
- package/eigen/Eigen/src/Core/GenericPacketMath.h +1472 -360
- package/eigen/Eigen/src/Core/GlobalFunctions.h +194 -151
- package/eigen/Eigen/src/Core/IO.h +147 -139
- package/eigen/Eigen/src/Core/IndexedView.h +321 -0
- 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 +56 -66
- package/eigen/Eigen/src/Core/Map.h +124 -142
- package/eigen/Eigen/src/Core/MapBase.h +256 -281
- package/eigen/Eigen/src/Core/MathFunctions.h +1620 -938
- package/eigen/Eigen/src/Core/MathFunctionsImpl.h +233 -71
- package/eigen/Eigen/src/Core/Matrix.h +491 -416
- package/eigen/Eigen/src/Core/MatrixBase.h +468 -453
- package/eigen/Eigen/src/Core/NestByValue.h +66 -85
- package/eigen/Eigen/src/Core/NoAlias.h +79 -85
- package/eigen/Eigen/src/Core/NumTraits.h +235 -148
- package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +253 -0
- package/eigen/Eigen/src/Core/PermutationMatrix.h +461 -511
- package/eigen/Eigen/src/Core/PlainObjectBase.h +871 -894
- package/eigen/Eigen/src/Core/Product.h +260 -139
- package/eigen/Eigen/src/Core/ProductEvaluators.h +863 -714
- package/eigen/Eigen/src/Core/Random.h +161 -136
- 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 +366 -336
- package/eigen/Eigen/src/Core/Ref.h +308 -209
- package/eigen/Eigen/src/Core/Replicate.h +94 -106
- package/eigen/Eigen/src/Core/Reshaped.h +398 -0
- package/eigen/Eigen/src/Core/ReturnByValue.h +49 -55
- package/eigen/Eigen/src/Core/Reverse.h +136 -145
- package/eigen/Eigen/src/Core/Select.h +70 -140
- package/eigen/Eigen/src/Core/SelfAdjointView.h +262 -285
- 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 +97 -111
- package/eigen/Eigen/src/Core/SolveTriangular.h +131 -129
- package/eigen/Eigen/src/Core/SolverBase.h +138 -101
- package/eigen/Eigen/src/Core/StableNorm.h +156 -160
- package/eigen/Eigen/src/Core/StlIterators.h +619 -0
- package/eigen/Eigen/src/Core/Stride.h +91 -88
- package/eigen/Eigen/src/Core/Swap.h +70 -38
- package/eigen/Eigen/src/Core/Transpose.h +295 -273
- package/eigen/Eigen/src/Core/Transpositions.h +272 -317
- package/eigen/Eigen/src/Core/TriangularMatrix.h +670 -755
- package/eigen/Eigen/src/Core/VectorBlock.h +59 -72
- package/eigen/Eigen/src/Core/VectorwiseOp.h +668 -630
- package/eigen/Eigen/src/Core/Visitor.h +480 -216
- package/eigen/Eigen/src/Core/arch/AVX/Complex.h +407 -293
- package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +79 -388
- package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +2935 -491
- package/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
- package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +279 -22
- package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +472 -0
- package/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +85 -333
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +2490 -649
- 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 +277 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +521 -298
- package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +39 -280
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +3686 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +205 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +901 -0
- 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 +3391 -723
- package/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
- package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +866 -0
- package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +113 -14
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +2634 -0
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +227 -0
- package/eigen/Eigen/src/Core/arch/Default/Half.h +1091 -0
- package/eigen/Eigen/src/Core/arch/Default/Settings.h +11 -13
- package/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
- package/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +104 -0
- package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1712 -0
- package/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
- package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +77 -0
- package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
- 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 +620 -0
- package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +379 -0
- package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1237 -0
- package/eigen/Eigen/src/Core/arch/NEON/Complex.h +531 -289
- package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +243 -0
- package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +50 -73
- package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +5915 -579
- package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1642 -0
- package/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
- package/eigen/Eigen/src/Core/arch/SSE/Complex.h +366 -334
- package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +40 -514
- package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +2164 -675
- package/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
- package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +188 -35
- package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +48 -0
- package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +674 -0
- package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +52 -0
- package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +227 -0
- package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +303 -0
- package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +576 -0
- package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +83 -0
- package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +434 -261
- package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +160 -53
- package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +1073 -605
- package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +123 -117
- package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +594 -322
- package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +204 -118
- package/eigen/Eigen/src/Core/functors/StlFunctors.h +110 -97
- package/eigen/Eigen/src/Core/functors/TernaryFunctors.h +34 -7
- package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1158 -530
- package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +2329 -1333
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +328 -364
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +191 -178
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +85 -82
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +154 -73
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +396 -542
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +80 -77
- package/eigen/Eigen/src/Core/products/Parallelizer.h +208 -92
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +331 -375
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +206 -224
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +139 -146
- 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 -46
- 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 -275
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +108 -109
- package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +70 -93
- package/eigen/Eigen/src/Core/util/Assert.h +158 -0
- package/eigen/Eigen/src/Core/util/BlasUtil.h +413 -290
- package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +543 -0
- package/eigen/Eigen/src/Core/util/Constants.h +314 -263
- package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +130 -78
- package/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
- package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +450 -224
- 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 +487 -0
- package/eigen/Eigen/src/Core/util/IntegralConstant.h +279 -0
- package/eigen/Eigen/src/Core/util/MKL_support.h +39 -30
- package/eigen/Eigen/src/Core/util/Macros.h +939 -646
- package/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
- package/eigen/Eigen/src/Core/util/Memory.h +1042 -650
- package/eigen/Eigen/src/Core/util/Meta.h +618 -426
- 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 +51 -0
- package/eigen/Eigen/src/Core/util/Serializer.h +209 -0
- package/eigen/Eigen/src/Core/util/StaticAssert.h +51 -164
- package/eigen/Eigen/src/Core/util/SymbolicIndex.h +445 -0
- package/eigen/Eigen/src/Core/util/XprHelper.h +793 -538
- 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 +91 -107
- package/eigen/Eigen/src/Eigenvalues/RealQZ.h +539 -606
- package/eigen/Eigen/src/Eigenvalues/RealSchur.h +348 -382
- package/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +41 -35
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +579 -600
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +47 -44
- package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +434 -461
- package/eigen/Eigen/src/Geometry/AlignedBox.h +307 -214
- package/eigen/Eigen/src/Geometry/AngleAxis.h +135 -137
- package/eigen/Eigen/src/Geometry/EulerAngles.h +163 -74
- package/eigen/Eigen/src/Geometry/Homogeneous.h +289 -333
- package/eigen/Eigen/src/Geometry/Hyperplane.h +152 -161
- package/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Geometry/OrthoMethods.h +168 -145
- package/eigen/Eigen/src/Geometry/ParametrizedLine.h +141 -104
- package/eigen/Eigen/src/Geometry/Quaternion.h +595 -497
- package/eigen/Eigen/src/Geometry/Rotation2D.h +110 -108
- package/eigen/Eigen/src/Geometry/RotationBase.h +148 -145
- package/eigen/Eigen/src/Geometry/Scaling.h +115 -90
- package/eigen/Eigen/src/Geometry/Transform.h +896 -953
- package/eigen/Eigen/src/Geometry/Translation.h +100 -98
- package/eigen/Eigen/src/Geometry/Umeyama.h +79 -84
- package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +154 -0
- package/eigen/Eigen/src/Householder/BlockHouseholder.h +54 -42
- package/eigen/Eigen/src/Householder/Householder.h +104 -122
- package/eigen/Eigen/src/Householder/HouseholderSequence.h +416 -382
- package/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +153 -166
- package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +127 -138
- package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +95 -124
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +269 -267
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +246 -259
- package/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +218 -217
- package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +80 -103
- package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +59 -63
- package/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Jacobi/Jacobi.h +256 -291
- package/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/KLUSupport/KLUSupport.h +339 -0
- package/eigen/Eigen/src/LU/Determinant.h +60 -63
- package/eigen/Eigen/src/LU/FullPivLU.h +561 -626
- package/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/LU/InverseImpl.h +213 -275
- package/eigen/Eigen/src/LU/PartialPivLU.h +407 -435
- package/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +54 -40
- package/eigen/Eigen/src/LU/arch/InverseSize4.h +353 -0
- 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 +250 -282
- package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +950 -1103
- package/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/OrderingMethods/Ordering.h +111 -122
- 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 -429
- package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +494 -473
- package/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +120 -56
- package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +223 -137
- package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +517 -460
- package/eigen/Eigen/src/QR/HouseholderQR.h +412 -278
- 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 +263 -261
- package/eigen/Eigen/src/SVD/BDCSVD.h +872 -679
- 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 +585 -543
- package/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +85 -49
- package/eigen/Eigen/src/SVD/SVDBase.h +281 -160
- package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +202 -237
- package/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +769 -590
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +318 -129
- package/eigen/Eigen/src/SparseCore/AmbiVector.h +202 -251
- package/eigen/Eigen/src/SparseCore/CompressedStorage.h +184 -236
- package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +140 -184
- package/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCore/SparseAssign.h +174 -111
- package/eigen/Eigen/src/SparseCore/SparseBlock.h +408 -477
- package/eigen/Eigen/src/SparseCore/SparseColEtree.h +100 -112
- package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +531 -280
- package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +559 -347
- package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +100 -108
- package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +185 -191
- 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 +1614 -1142
- package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +403 -357
- package/eigen/Eigen/src/SparseCore/SparsePermutation.h +186 -115
- package/eigen/Eigen/src/SparseCore/SparseProduct.h +100 -91
- 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 +371 -414
- 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 +146 -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 +814 -618
- 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 +273 -255
- 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 +90 -101
- 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 +125 -133
- 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 +451 -490
- package/eigen/Eigen/src/StlSupport/StdDeque.h +28 -105
- 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 -732
- 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 +480 -380
- 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 +9976 -16182
- 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.inc +1370 -0
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
- package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.inc +167 -0
- 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/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/BooleanRedux.h +0 -164
- package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +0 -103
- package/eigen/Eigen/src/Core/arch/CUDA/Half.h +0 -675
- package/eigen/Eigen/src/Core/arch/CUDA/MathFunctions.h +0 -91
- 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/Core/util/NonMPL2.h +0 -3
- package/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +0 -161
- package/eigen/Eigen/src/LU/arch/Inverse_SSE.h +0 -338
- 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 -332
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +0 -552
- package/eigen/Eigen/src/plugins/BlockMethods.h +0 -1058
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +0 -115
- package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +0 -163
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +0 -152
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +0 -85
- package/lib/eigen.d.ts +0 -2
- package/lib/eigen.js +0 -15
|
@@ -0,0 +1,464 @@
|
|
|
1
|
+
// This file is part of Eigen, a lightweight C++ template library
|
|
2
|
+
// for linear algebra.
|
|
3
|
+
//
|
|
4
|
+
// Copyright (C) 2025 Charlie Schlosser <cs.schlosser@gmail.com>
|
|
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
|
+
#ifndef EIGEN_FIND_COEFF_H
|
|
11
|
+
#define EIGEN_FIND_COEFF_H
|
|
12
|
+
|
|
13
|
+
// IWYU pragma: private
|
|
14
|
+
#include "./InternalHeaderCheck.h"
|
|
15
|
+
|
|
16
|
+
namespace Eigen {
|
|
17
|
+
|
|
18
|
+
namespace internal {
|
|
19
|
+
|
|
20
|
+
template <typename Scalar, int NaNPropagation, bool IsInteger = NumTraits<Scalar>::IsInteger>
|
|
21
|
+
struct max_coeff_functor {
|
|
22
|
+
EIGEN_DEVICE_FUNC inline bool compareCoeff(const Scalar& incumbent, const Scalar& candidate) const {
|
|
23
|
+
return candidate > incumbent;
|
|
24
|
+
}
|
|
25
|
+
template <typename Packet>
|
|
26
|
+
EIGEN_DEVICE_FUNC inline Packet comparePacket(const Packet& incumbent, const Packet& candidate) const {
|
|
27
|
+
return pcmp_lt(incumbent, candidate);
|
|
28
|
+
}
|
|
29
|
+
template <typename Packet>
|
|
30
|
+
EIGEN_DEVICE_FUNC inline Scalar predux(const Packet& a) const {
|
|
31
|
+
return predux_max(a);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
template <typename Scalar>
|
|
36
|
+
struct max_coeff_functor<Scalar, PropagateNaN, false> {
|
|
37
|
+
EIGEN_DEVICE_FUNC inline Scalar compareCoeff(const Scalar& incumbent, const Scalar& candidate) {
|
|
38
|
+
return (candidate > incumbent) || ((candidate != candidate) && (incumbent == incumbent));
|
|
39
|
+
}
|
|
40
|
+
template <typename Packet>
|
|
41
|
+
EIGEN_DEVICE_FUNC inline Packet comparePacket(const Packet& incumbent, const Packet& candidate) {
|
|
42
|
+
return pandnot(pcmp_lt_or_nan(incumbent, candidate), pisnan(incumbent));
|
|
43
|
+
}
|
|
44
|
+
template <typename Packet>
|
|
45
|
+
EIGEN_DEVICE_FUNC inline Scalar predux(const Packet& a) const {
|
|
46
|
+
return predux_max<PropagateNaN>(a);
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
template <typename Scalar>
|
|
51
|
+
struct max_coeff_functor<Scalar, PropagateNumbers, false> {
|
|
52
|
+
EIGEN_DEVICE_FUNC inline bool compareCoeff(const Scalar& incumbent, const Scalar& candidate) const {
|
|
53
|
+
return (candidate > incumbent) || ((candidate == candidate) && (incumbent != incumbent));
|
|
54
|
+
}
|
|
55
|
+
template <typename Packet>
|
|
56
|
+
EIGEN_DEVICE_FUNC inline Packet comparePacket(const Packet& incumbent, const Packet& candidate) const {
|
|
57
|
+
return pandnot(pcmp_lt_or_nan(incumbent, candidate), pisnan(candidate));
|
|
58
|
+
}
|
|
59
|
+
template <typename Packet>
|
|
60
|
+
EIGEN_DEVICE_FUNC inline Scalar predux(const Packet& a) const {
|
|
61
|
+
return predux_max<PropagateNumbers>(a);
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
template <typename Scalar, int NaNPropagation, bool IsInteger = NumTraits<Scalar>::IsInteger>
|
|
66
|
+
struct min_coeff_functor {
|
|
67
|
+
EIGEN_DEVICE_FUNC inline bool compareCoeff(const Scalar& incumbent, const Scalar& candidate) const {
|
|
68
|
+
return candidate < incumbent;
|
|
69
|
+
}
|
|
70
|
+
template <typename Packet>
|
|
71
|
+
EIGEN_DEVICE_FUNC inline Packet comparePacket(const Packet& incumbent, const Packet& candidate) const {
|
|
72
|
+
return pcmp_lt(candidate, incumbent);
|
|
73
|
+
}
|
|
74
|
+
template <typename Packet>
|
|
75
|
+
EIGEN_DEVICE_FUNC inline Scalar predux(const Packet& a) const {
|
|
76
|
+
return predux_min(a);
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
template <typename Scalar>
|
|
81
|
+
struct min_coeff_functor<Scalar, PropagateNaN, false> {
|
|
82
|
+
EIGEN_DEVICE_FUNC inline Scalar compareCoeff(const Scalar& incumbent, const Scalar& candidate) {
|
|
83
|
+
return (candidate < incumbent) || ((candidate != candidate) && (incumbent == incumbent));
|
|
84
|
+
}
|
|
85
|
+
template <typename Packet>
|
|
86
|
+
EIGEN_DEVICE_FUNC inline Packet comparePacket(const Packet& incumbent, const Packet& candidate) {
|
|
87
|
+
return pandnot(pcmp_lt_or_nan(candidate, incumbent), pisnan(incumbent));
|
|
88
|
+
}
|
|
89
|
+
template <typename Packet>
|
|
90
|
+
EIGEN_DEVICE_FUNC inline Scalar predux(const Packet& a) const {
|
|
91
|
+
return predux_min<PropagateNaN>(a);
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
template <typename Scalar>
|
|
96
|
+
struct min_coeff_functor<Scalar, PropagateNumbers, false> {
|
|
97
|
+
EIGEN_DEVICE_FUNC inline bool compareCoeff(const Scalar& incumbent, const Scalar& candidate) const {
|
|
98
|
+
return (candidate < incumbent) || ((candidate == candidate) && (incumbent != incumbent));
|
|
99
|
+
}
|
|
100
|
+
template <typename Packet>
|
|
101
|
+
EIGEN_DEVICE_FUNC inline Packet comparePacket(const Packet& incumbent, const Packet& candidate) const {
|
|
102
|
+
return pandnot(pcmp_lt_or_nan(candidate, incumbent), pisnan(candidate));
|
|
103
|
+
}
|
|
104
|
+
template <typename Packet>
|
|
105
|
+
EIGEN_DEVICE_FUNC inline Scalar predux(const Packet& a) const {
|
|
106
|
+
return predux_min<PropagateNumbers>(a);
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
template <typename Scalar>
|
|
111
|
+
struct min_max_traits {
|
|
112
|
+
static constexpr bool PacketAccess = packet_traits<Scalar>::Vectorizable;
|
|
113
|
+
};
|
|
114
|
+
template <typename Scalar, int NaNPropagation>
|
|
115
|
+
struct functor_traits<max_coeff_functor<Scalar, NaNPropagation>> : min_max_traits<Scalar> {};
|
|
116
|
+
template <typename Scalar, int NaNPropagation>
|
|
117
|
+
struct functor_traits<min_coeff_functor<Scalar, NaNPropagation>> : min_max_traits<Scalar> {};
|
|
118
|
+
|
|
119
|
+
template <typename Evaluator, typename Func, bool Linear, bool Vectorize>
|
|
120
|
+
struct find_coeff_loop;
|
|
121
|
+
template <typename Evaluator, typename Func>
|
|
122
|
+
struct find_coeff_loop<Evaluator, Func, /*Linear*/ false, /*Vectorize*/ false> {
|
|
123
|
+
using Scalar = typename Evaluator::Scalar;
|
|
124
|
+
static EIGEN_DEVICE_FUNC inline void run(const Evaluator& eval, Func& func, Scalar& res, Index& outer, Index& inner) {
|
|
125
|
+
Index outerSize = eval.outerSize();
|
|
126
|
+
Index innerSize = eval.innerSize();
|
|
127
|
+
|
|
128
|
+
/* initialization performed in calling function */
|
|
129
|
+
/* result = eval.coeff(0, 0); */
|
|
130
|
+
/* outer = 0; */
|
|
131
|
+
/* inner = 0; */
|
|
132
|
+
|
|
133
|
+
for (Index j = 0; j < outerSize; j++) {
|
|
134
|
+
for (Index i = 0; i < innerSize; i++) {
|
|
135
|
+
Scalar xprCoeff = eval.coeffByOuterInner(j, i);
|
|
136
|
+
bool newRes = func.compareCoeff(res, xprCoeff);
|
|
137
|
+
if (newRes) {
|
|
138
|
+
outer = j;
|
|
139
|
+
inner = i;
|
|
140
|
+
res = xprCoeff;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
template <typename Evaluator, typename Func>
|
|
147
|
+
struct find_coeff_loop<Evaluator, Func, /*Linear*/ true, /*Vectorize*/ false> {
|
|
148
|
+
using Scalar = typename Evaluator::Scalar;
|
|
149
|
+
static EIGEN_DEVICE_FUNC inline void run(const Evaluator& eval, Func& func, Scalar& res, Index& index) {
|
|
150
|
+
Index size = eval.size();
|
|
151
|
+
|
|
152
|
+
/* initialization performed in calling function */
|
|
153
|
+
/* result = eval.coeff(0); */
|
|
154
|
+
/* index = 0; */
|
|
155
|
+
|
|
156
|
+
for (Index k = 0; k < size; k++) {
|
|
157
|
+
Scalar xprCoeff = eval.coeff(k);
|
|
158
|
+
bool newRes = func.compareCoeff(res, xprCoeff);
|
|
159
|
+
if (newRes) {
|
|
160
|
+
index = k;
|
|
161
|
+
res = xprCoeff;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
template <typename Evaluator, typename Func>
|
|
167
|
+
struct find_coeff_loop<Evaluator, Func, /*Linear*/ false, /*Vectorize*/ true> {
|
|
168
|
+
using ScalarImpl = find_coeff_loop<Evaluator, Func, false, false>;
|
|
169
|
+
using Scalar = typename Evaluator::Scalar;
|
|
170
|
+
using Packet = typename Evaluator::Packet;
|
|
171
|
+
static constexpr int PacketSize = unpacket_traits<Packet>::size;
|
|
172
|
+
static EIGEN_DEVICE_FUNC inline void run(const Evaluator& eval, Func& func, Scalar& result, Index& outer,
|
|
173
|
+
Index& inner) {
|
|
174
|
+
Index outerSize = eval.outerSize();
|
|
175
|
+
Index innerSize = eval.innerSize();
|
|
176
|
+
Index packetEnd = numext::round_down(innerSize, PacketSize);
|
|
177
|
+
|
|
178
|
+
/* initialization performed in calling function */
|
|
179
|
+
/* result = eval.coeff(0, 0); */
|
|
180
|
+
/* outer = 0; */
|
|
181
|
+
/* inner = 0; */
|
|
182
|
+
|
|
183
|
+
bool checkPacket = false;
|
|
184
|
+
|
|
185
|
+
for (Index j = 0; j < outerSize; j++) {
|
|
186
|
+
Packet resultPacket = pset1<Packet>(result);
|
|
187
|
+
for (Index i = 0; i < packetEnd; i += PacketSize) {
|
|
188
|
+
Packet xprPacket = eval.template packetByOuterInner<Unaligned, Packet>(j, i);
|
|
189
|
+
if (predux_any(func.comparePacket(resultPacket, xprPacket))) {
|
|
190
|
+
outer = j;
|
|
191
|
+
inner = i;
|
|
192
|
+
result = func.predux(xprPacket);
|
|
193
|
+
resultPacket = pset1<Packet>(result);
|
|
194
|
+
checkPacket = true;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
for (Index i = packetEnd; i < innerSize; i++) {
|
|
199
|
+
Scalar xprCoeff = eval.coeffByOuterInner(j, i);
|
|
200
|
+
if (func.compareCoeff(result, xprCoeff)) {
|
|
201
|
+
outer = j;
|
|
202
|
+
inner = i;
|
|
203
|
+
result = xprCoeff;
|
|
204
|
+
checkPacket = false;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
if (checkPacket) {
|
|
210
|
+
result = eval.coeffByOuterInner(outer, inner);
|
|
211
|
+
Index i_end = inner + PacketSize;
|
|
212
|
+
for (Index i = inner; i < i_end; i++) {
|
|
213
|
+
Scalar xprCoeff = eval.coeffByOuterInner(outer, i);
|
|
214
|
+
if (func.compareCoeff(result, xprCoeff)) {
|
|
215
|
+
inner = i;
|
|
216
|
+
result = xprCoeff;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
};
|
|
222
|
+
template <typename Evaluator, typename Func>
|
|
223
|
+
struct find_coeff_loop<Evaluator, Func, /*Linear*/ true, /*Vectorize*/ true> {
|
|
224
|
+
using ScalarImpl = find_coeff_loop<Evaluator, Func, true, false>;
|
|
225
|
+
using Scalar = typename Evaluator::Scalar;
|
|
226
|
+
using Packet = typename Evaluator::Packet;
|
|
227
|
+
static constexpr int PacketSize = unpacket_traits<Packet>::size;
|
|
228
|
+
static constexpr int Alignment = Evaluator::Alignment;
|
|
229
|
+
|
|
230
|
+
static EIGEN_DEVICE_FUNC inline void run(const Evaluator& eval, Func& func, Scalar& result, Index& index) {
|
|
231
|
+
Index size = eval.size();
|
|
232
|
+
Index packetEnd = numext::round_down(size, PacketSize);
|
|
233
|
+
|
|
234
|
+
/* initialization performed in calling function */
|
|
235
|
+
/* result = eval.coeff(0); */
|
|
236
|
+
/* index = 0; */
|
|
237
|
+
|
|
238
|
+
Packet resultPacket = pset1<Packet>(result);
|
|
239
|
+
bool checkPacket = false;
|
|
240
|
+
|
|
241
|
+
for (Index k = 0; k < packetEnd; k += PacketSize) {
|
|
242
|
+
Packet xprPacket = eval.template packet<Alignment, Packet>(k);
|
|
243
|
+
if (predux_any(func.comparePacket(resultPacket, xprPacket))) {
|
|
244
|
+
index = k;
|
|
245
|
+
result = func.predux(xprPacket);
|
|
246
|
+
resultPacket = pset1<Packet>(result);
|
|
247
|
+
checkPacket = true;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
for (Index k = packetEnd; k < size; k++) {
|
|
252
|
+
Scalar xprCoeff = eval.coeff(k);
|
|
253
|
+
if (func.compareCoeff(result, xprCoeff)) {
|
|
254
|
+
index = k;
|
|
255
|
+
result = xprCoeff;
|
|
256
|
+
checkPacket = false;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
if (checkPacket) {
|
|
261
|
+
result = eval.coeff(index);
|
|
262
|
+
Index k_end = index + PacketSize;
|
|
263
|
+
for (Index k = index; k < k_end; k++) {
|
|
264
|
+
Scalar xprCoeff = eval.coeff(k);
|
|
265
|
+
if (func.compareCoeff(result, xprCoeff)) {
|
|
266
|
+
index = k;
|
|
267
|
+
result = xprCoeff;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
};
|
|
273
|
+
|
|
274
|
+
template <typename Derived>
|
|
275
|
+
struct find_coeff_evaluator : public evaluator<Derived> {
|
|
276
|
+
using Base = evaluator<Derived>;
|
|
277
|
+
using Scalar = typename Derived::Scalar;
|
|
278
|
+
using Packet = typename packet_traits<Scalar>::type;
|
|
279
|
+
static constexpr int Flags = Base::Flags;
|
|
280
|
+
static constexpr bool IsRowMajor = bool(Flags & RowMajorBit);
|
|
281
|
+
EIGEN_DEVICE_FUNC inline find_coeff_evaluator(const Derived& xpr) : Base(xpr), m_xpr(xpr) {}
|
|
282
|
+
|
|
283
|
+
EIGEN_DEVICE_FUNC inline Scalar coeffByOuterInner(Index outer, Index inner) const {
|
|
284
|
+
Index row = IsRowMajor ? outer : inner;
|
|
285
|
+
Index col = IsRowMajor ? inner : outer;
|
|
286
|
+
return Base::coeff(row, col);
|
|
287
|
+
}
|
|
288
|
+
template <int LoadMode, typename PacketType>
|
|
289
|
+
EIGEN_DEVICE_FUNC inline PacketType packetByOuterInner(Index outer, Index inner) const {
|
|
290
|
+
Index row = IsRowMajor ? outer : inner;
|
|
291
|
+
Index col = IsRowMajor ? inner : outer;
|
|
292
|
+
return Base::template packet<LoadMode, PacketType>(row, col);
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
EIGEN_DEVICE_FUNC inline Index innerSize() const { return m_xpr.innerSize(); }
|
|
296
|
+
EIGEN_DEVICE_FUNC inline Index outerSize() const { return m_xpr.outerSize(); }
|
|
297
|
+
EIGEN_DEVICE_FUNC inline Index size() const { return m_xpr.size(); }
|
|
298
|
+
|
|
299
|
+
const Derived& m_xpr;
|
|
300
|
+
};
|
|
301
|
+
|
|
302
|
+
template <typename Derived, typename Func>
|
|
303
|
+
struct find_coeff_impl {
|
|
304
|
+
using Evaluator = find_coeff_evaluator<Derived>;
|
|
305
|
+
static constexpr int Flags = Evaluator::Flags;
|
|
306
|
+
static constexpr int Alignment = Evaluator::Alignment;
|
|
307
|
+
static constexpr bool IsRowMajor = Derived::IsRowMajor;
|
|
308
|
+
static constexpr int MaxInnerSizeAtCompileTime =
|
|
309
|
+
IsRowMajor ? Derived::MaxColsAtCompileTime : Derived::MaxRowsAtCompileTime;
|
|
310
|
+
static constexpr int MaxSizeAtCompileTime = Derived::MaxSizeAtCompileTime;
|
|
311
|
+
|
|
312
|
+
using Scalar = typename Derived::Scalar;
|
|
313
|
+
using Packet = typename Evaluator::Packet;
|
|
314
|
+
|
|
315
|
+
static constexpr int PacketSize = unpacket_traits<Packet>::size;
|
|
316
|
+
static constexpr bool Linearize = bool(Flags & LinearAccessBit);
|
|
317
|
+
static constexpr bool DontVectorize =
|
|
318
|
+
enum_lt_not_dynamic(Linearize ? MaxSizeAtCompileTime : MaxInnerSizeAtCompileTime, PacketSize);
|
|
319
|
+
static constexpr bool Vectorize =
|
|
320
|
+
!DontVectorize && bool(Flags & PacketAccessBit) && functor_traits<Func>::PacketAccess;
|
|
321
|
+
|
|
322
|
+
using Loop = find_coeff_loop<Evaluator, Func, Linearize, Vectorize>;
|
|
323
|
+
|
|
324
|
+
template <bool ForwardLinearAccess = Linearize, std::enable_if_t<!ForwardLinearAccess, bool> = true>
|
|
325
|
+
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run(const Derived& xpr, Func& func, Scalar& res, Index& outer,
|
|
326
|
+
Index& inner) {
|
|
327
|
+
Evaluator eval(xpr);
|
|
328
|
+
Loop::run(eval, func, res, outer, inner);
|
|
329
|
+
}
|
|
330
|
+
template <bool ForwardLinearAccess = Linearize, std::enable_if_t<ForwardLinearAccess, bool> = true>
|
|
331
|
+
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run(const Derived& xpr, Func& func, Scalar& res, Index& outer,
|
|
332
|
+
Index& inner) {
|
|
333
|
+
// where possible, use the linear loop and back-calculate the outer and inner indices
|
|
334
|
+
Index index = 0;
|
|
335
|
+
run(xpr, func, res, index);
|
|
336
|
+
outer = index / xpr.innerSize();
|
|
337
|
+
inner = index % xpr.innerSize();
|
|
338
|
+
}
|
|
339
|
+
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run(const Derived& xpr, Func& func, Scalar& res, Index& index) {
|
|
340
|
+
Evaluator eval(xpr);
|
|
341
|
+
Loop::run(eval, func, res, index);
|
|
342
|
+
}
|
|
343
|
+
};
|
|
344
|
+
|
|
345
|
+
template <typename Derived, typename IndexType, typename Func>
|
|
346
|
+
EIGEN_DEVICE_FUNC typename internal::traits<Derived>::Scalar findCoeff(const DenseBase<Derived>& mat, Func& func,
|
|
347
|
+
IndexType* rowPtr, IndexType* colPtr) {
|
|
348
|
+
eigen_assert(mat.rows() > 0 && mat.cols() > 0 && "you are using an empty matrix");
|
|
349
|
+
using Scalar = typename DenseBase<Derived>::Scalar;
|
|
350
|
+
using FindCoeffImpl = internal::find_coeff_impl<Derived, Func>;
|
|
351
|
+
Index outer = 0;
|
|
352
|
+
Index inner = 0;
|
|
353
|
+
Scalar res = mat.coeff(0, 0);
|
|
354
|
+
FindCoeffImpl::run(mat.derived(), func, res, outer, inner);
|
|
355
|
+
*rowPtr = internal::convert_index<IndexType>(Derived::IsRowMajor ? outer : inner);
|
|
356
|
+
if (colPtr) *colPtr = internal::convert_index<IndexType>(Derived::IsRowMajor ? inner : outer);
|
|
357
|
+
return res;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
template <typename Derived, typename IndexType, typename Func>
|
|
361
|
+
EIGEN_DEVICE_FUNC typename internal::traits<Derived>::Scalar findCoeff(const DenseBase<Derived>& mat, Func& func,
|
|
362
|
+
IndexType* indexPtr) {
|
|
363
|
+
eigen_assert(mat.size() > 0 && "you are using an empty matrix");
|
|
364
|
+
EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
|
|
365
|
+
using Scalar = typename DenseBase<Derived>::Scalar;
|
|
366
|
+
using FindCoeffImpl = internal::find_coeff_impl<Derived, Func>;
|
|
367
|
+
Index index = 0;
|
|
368
|
+
Scalar res = mat.coeff(0);
|
|
369
|
+
FindCoeffImpl::run(mat.derived(), func, res, index);
|
|
370
|
+
*indexPtr = internal::convert_index<IndexType>(index);
|
|
371
|
+
return res;
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
} // namespace internal
|
|
375
|
+
|
|
376
|
+
/** \fn DenseBase<Derived>::minCoeff(IndexType* rowId, IndexType* colId) const
|
|
377
|
+
* \returns the minimum of all coefficients of *this and puts in *row and *col its location.
|
|
378
|
+
*
|
|
379
|
+
* If there are multiple coefficients with the same extreme value, the location of the first instance is returned.
|
|
380
|
+
*
|
|
381
|
+
* In case \c *this contains NaN, NaNPropagation determines the behavior:
|
|
382
|
+
* NaNPropagation == PropagateFast : undefined
|
|
383
|
+
* NaNPropagation == PropagateNaN : result is NaN
|
|
384
|
+
* NaNPropagation == PropagateNumbers : result is maximum of elements that are not NaN
|
|
385
|
+
* \warning the matrix must be not empty, otherwise an assertion is triggered.
|
|
386
|
+
*
|
|
387
|
+
* \sa DenseBase::minCoeff(Index*), DenseBase::maxCoeff(Index*,Index*), DenseBase::visit(), DenseBase::minCoeff()
|
|
388
|
+
*/
|
|
389
|
+
template <typename Derived>
|
|
390
|
+
template <int NaNPropagation, typename IndexType>
|
|
391
|
+
EIGEN_DEVICE_FUNC typename internal::traits<Derived>::Scalar DenseBase<Derived>::minCoeff(IndexType* rowPtr,
|
|
392
|
+
IndexType* colPtr) const {
|
|
393
|
+
using Func = internal::min_coeff_functor<Scalar, NaNPropagation>;
|
|
394
|
+
Func func;
|
|
395
|
+
return internal::findCoeff(derived(), func, rowPtr, colPtr);
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
/** \returns the minimum of all coefficients of *this and puts in *index its location.
|
|
399
|
+
*
|
|
400
|
+
* If there are multiple coefficients with the same extreme value, the location of the first instance is returned.
|
|
401
|
+
*
|
|
402
|
+
* In case \c *this contains NaN, NaNPropagation determines the behavior:
|
|
403
|
+
* NaNPropagation == PropagateFast : undefined
|
|
404
|
+
* NaNPropagation == PropagateNaN : result is NaN
|
|
405
|
+
* NaNPropagation == PropagateNumbers : result is maximum of elements that are not NaN
|
|
406
|
+
* \warning the matrix must be not empty, otherwise an assertion is triggered.
|
|
407
|
+
*
|
|
408
|
+
* \sa DenseBase::minCoeff(IndexType*,IndexType*), DenseBase::maxCoeff(IndexType*,IndexType*), DenseBase::visit(),
|
|
409
|
+
* DenseBase::minCoeff()
|
|
410
|
+
*/
|
|
411
|
+
template <typename Derived>
|
|
412
|
+
template <int NaNPropagation, typename IndexType>
|
|
413
|
+
EIGEN_DEVICE_FUNC typename internal::traits<Derived>::Scalar DenseBase<Derived>::minCoeff(IndexType* indexPtr) const {
|
|
414
|
+
using Func = internal::min_coeff_functor<Scalar, NaNPropagation>;
|
|
415
|
+
Func func;
|
|
416
|
+
return internal::findCoeff(derived(), func, indexPtr);
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
/** \fn DenseBase<Derived>::maxCoeff(IndexType* rowId, IndexType* colId) const
|
|
420
|
+
* \returns the maximum of all coefficients of *this and puts in *row and *col its location.
|
|
421
|
+
*
|
|
422
|
+
* If there are multiple coefficients with the same extreme value, the location of the first instance is returned.
|
|
423
|
+
*
|
|
424
|
+
* In case \c *this contains NaN, NaNPropagation determines the behavior:
|
|
425
|
+
* NaNPropagation == PropagateFast : undefined
|
|
426
|
+
* NaNPropagation == PropagateNaN : result is NaN
|
|
427
|
+
* NaNPropagation == PropagateNumbers : result is maximum of elements that are not NaN
|
|
428
|
+
* \warning the matrix must be not empty, otherwise an assertion is triggered.
|
|
429
|
+
*
|
|
430
|
+
* \sa DenseBase::minCoeff(IndexType*,IndexType*), DenseBase::visit(), DenseBase::maxCoeff()
|
|
431
|
+
*/
|
|
432
|
+
template <typename Derived>
|
|
433
|
+
template <int NaNPropagation, typename IndexType>
|
|
434
|
+
EIGEN_DEVICE_FUNC typename internal::traits<Derived>::Scalar DenseBase<Derived>::maxCoeff(IndexType* rowPtr,
|
|
435
|
+
IndexType* colPtr) const {
|
|
436
|
+
using Func = internal::max_coeff_functor<Scalar, NaNPropagation>;
|
|
437
|
+
Func func;
|
|
438
|
+
return internal::findCoeff(derived(), func, rowPtr, colPtr);
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
/** \returns the maximum of all coefficients of *this and puts in *index its location.
|
|
442
|
+
*
|
|
443
|
+
* If there are multiple coefficients with the same extreme value, the location of the first instance is returned.
|
|
444
|
+
*
|
|
445
|
+
* In case \c *this contains NaN, NaNPropagation determines the behavior:
|
|
446
|
+
* NaNPropagation == PropagateFast : undefined
|
|
447
|
+
* NaNPropagation == PropagateNaN : result is NaN
|
|
448
|
+
* NaNPropagation == PropagateNumbers : result is maximum of elements that are not NaN
|
|
449
|
+
* \warning the matrix must be not empty, otherwise an assertion is triggered.
|
|
450
|
+
*
|
|
451
|
+
* \sa DenseBase::maxCoeff(IndexType*,IndexType*), DenseBase::minCoeff(IndexType*,IndexType*), DenseBase::visitor(),
|
|
452
|
+
* DenseBase::maxCoeff()
|
|
453
|
+
*/
|
|
454
|
+
template <typename Derived>
|
|
455
|
+
template <int NaNPropagation, typename IndexType>
|
|
456
|
+
EIGEN_DEVICE_FUNC typename internal::traits<Derived>::Scalar DenseBase<Derived>::maxCoeff(IndexType* indexPtr) const {
|
|
457
|
+
using Func = internal::max_coeff_functor<Scalar, NaNPropagation>;
|
|
458
|
+
Func func;
|
|
459
|
+
return internal::findCoeff(derived(), func, indexPtr);
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
} // namespace Eigen
|
|
463
|
+
|
|
464
|
+
#endif // EIGEN_FIND_COEFF_H
|
|
@@ -10,137 +10,118 @@
|
|
|
10
10
|
#ifndef EIGEN_FORCEALIGNEDACCESS_H
|
|
11
11
|
#define EIGEN_FORCEALIGNEDACCESS_H
|
|
12
12
|
|
|
13
|
+
// IWYU pragma: private
|
|
14
|
+
#include "./InternalHeaderCheck.h"
|
|
15
|
+
|
|
13
16
|
namespace Eigen {
|
|
14
17
|
|
|
15
18
|
/** \class ForceAlignedAccess
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
19
|
+
* \ingroup Core_Module
|
|
20
|
+
*
|
|
21
|
+
* \brief Enforce aligned packet loads and stores regardless of what is requested
|
|
22
|
+
*
|
|
23
|
+
* \param ExpressionType the type of the object of which we are forcing aligned packet access
|
|
24
|
+
*
|
|
25
|
+
* This class is the return type of MatrixBase::forceAlignedAccess()
|
|
26
|
+
* and most of the time this is the only way it is used.
|
|
27
|
+
*
|
|
28
|
+
* \sa MatrixBase::forceAlignedAccess()
|
|
29
|
+
*/
|
|
27
30
|
|
|
28
31
|
namespace internal {
|
|
29
|
-
template<typename ExpressionType>
|
|
30
|
-
struct traits<ForceAlignedAccess<ExpressionType
|
|
31
|
-
|
|
32
|
-
|
|
32
|
+
template <typename ExpressionType>
|
|
33
|
+
struct traits<ForceAlignedAccess<ExpressionType>> : public traits<ExpressionType> {};
|
|
34
|
+
} // namespace internal
|
|
35
|
+
|
|
36
|
+
template <typename ExpressionType>
|
|
37
|
+
class ForceAlignedAccess : public internal::dense_xpr_base<ForceAlignedAccess<ExpressionType>>::type {
|
|
38
|
+
public:
|
|
39
|
+
typedef typename internal::dense_xpr_base<ForceAlignedAccess>::type Base;
|
|
40
|
+
EIGEN_DENSE_PUBLIC_INTERFACE(ForceAlignedAccess)
|
|
41
|
+
|
|
42
|
+
EIGEN_DEVICE_FUNC explicit inline ForceAlignedAccess(const ExpressionType& matrix) : m_expression(matrix) {}
|
|
43
|
+
|
|
44
|
+
EIGEN_DEVICE_FUNC constexpr Index rows() const noexcept { return m_expression.rows(); }
|
|
45
|
+
EIGEN_DEVICE_FUNC constexpr Index cols() const noexcept { return m_expression.cols(); }
|
|
46
|
+
EIGEN_DEVICE_FUNC constexpr Index outerStride() const noexcept { return m_expression.outerStride(); }
|
|
47
|
+
EIGEN_DEVICE_FUNC constexpr Index innerStride() const noexcept { return m_expression.innerStride(); }
|
|
48
|
+
|
|
49
|
+
EIGEN_DEVICE_FUNC inline const CoeffReturnType coeff(Index row, Index col) const {
|
|
50
|
+
return m_expression.coeff(row, col);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
EIGEN_DEVICE_FUNC inline Scalar& coeffRef(Index row, Index col) {
|
|
54
|
+
return m_expression.const_cast_derived().coeffRef(row, col);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
EIGEN_DEVICE_FUNC inline const CoeffReturnType coeff(Index index) const { return m_expression.coeff(index); }
|
|
58
|
+
|
|
59
|
+
EIGEN_DEVICE_FUNC inline Scalar& coeffRef(Index index) { return m_expression.const_cast_derived().coeffRef(index); }
|
|
60
|
+
|
|
61
|
+
template <int LoadMode>
|
|
62
|
+
inline const PacketScalar packet(Index row, Index col) const {
|
|
63
|
+
return m_expression.template packet<Aligned>(row, col);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
template <int LoadMode>
|
|
67
|
+
inline void writePacket(Index row, Index col, const PacketScalar& x) {
|
|
68
|
+
m_expression.const_cast_derived().template writePacket<Aligned>(row, col, x);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
template <int LoadMode>
|
|
72
|
+
inline const PacketScalar packet(Index index) const {
|
|
73
|
+
return m_expression.template packet<Aligned>(index);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
template <int LoadMode>
|
|
77
|
+
inline void writePacket(Index index, const PacketScalar& x) {
|
|
78
|
+
m_expression.const_cast_derived().template writePacket<Aligned>(index, x);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
EIGEN_DEVICE_FUNC operator const ExpressionType&() const { return m_expression; }
|
|
82
|
+
|
|
83
|
+
protected:
|
|
84
|
+
const ExpressionType& m_expression;
|
|
33
85
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
{
|
|
37
|
-
public:
|
|
38
|
-
|
|
39
|
-
typedef typename internal::dense_xpr_base<ForceAlignedAccess>::type Base;
|
|
40
|
-
EIGEN_DENSE_PUBLIC_INTERFACE(ForceAlignedAccess)
|
|
41
|
-
|
|
42
|
-
EIGEN_DEVICE_FUNC explicit inline ForceAlignedAccess(const ExpressionType& matrix) : m_expression(matrix) {}
|
|
43
|
-
|
|
44
|
-
EIGEN_DEVICE_FUNC inline Index rows() const { return m_expression.rows(); }
|
|
45
|
-
EIGEN_DEVICE_FUNC inline Index cols() const { return m_expression.cols(); }
|
|
46
|
-
EIGEN_DEVICE_FUNC inline Index outerStride() const { return m_expression.outerStride(); }
|
|
47
|
-
EIGEN_DEVICE_FUNC inline Index innerStride() const { return m_expression.innerStride(); }
|
|
48
|
-
|
|
49
|
-
EIGEN_DEVICE_FUNC inline const CoeffReturnType coeff(Index row, Index col) const
|
|
50
|
-
{
|
|
51
|
-
return m_expression.coeff(row, col);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
EIGEN_DEVICE_FUNC inline Scalar& coeffRef(Index row, Index col)
|
|
55
|
-
{
|
|
56
|
-
return m_expression.const_cast_derived().coeffRef(row, col);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
EIGEN_DEVICE_FUNC inline const CoeffReturnType coeff(Index index) const
|
|
60
|
-
{
|
|
61
|
-
return m_expression.coeff(index);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
EIGEN_DEVICE_FUNC inline Scalar& coeffRef(Index index)
|
|
65
|
-
{
|
|
66
|
-
return m_expression.const_cast_derived().coeffRef(index);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
template<int LoadMode>
|
|
70
|
-
inline const PacketScalar packet(Index row, Index col) const
|
|
71
|
-
{
|
|
72
|
-
return m_expression.template packet<Aligned>(row, col);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
template<int LoadMode>
|
|
76
|
-
inline void writePacket(Index row, Index col, const PacketScalar& x)
|
|
77
|
-
{
|
|
78
|
-
m_expression.const_cast_derived().template writePacket<Aligned>(row, col, x);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
template<int LoadMode>
|
|
82
|
-
inline const PacketScalar packet(Index index) const
|
|
83
|
-
{
|
|
84
|
-
return m_expression.template packet<Aligned>(index);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
template<int LoadMode>
|
|
88
|
-
inline void writePacket(Index index, const PacketScalar& x)
|
|
89
|
-
{
|
|
90
|
-
m_expression.const_cast_derived().template writePacket<Aligned>(index, x);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
EIGEN_DEVICE_FUNC operator const ExpressionType&() const { return m_expression; }
|
|
94
|
-
|
|
95
|
-
protected:
|
|
96
|
-
const ExpressionType& m_expression;
|
|
97
|
-
|
|
98
|
-
private:
|
|
99
|
-
ForceAlignedAccess& operator=(const ForceAlignedAccess&);
|
|
86
|
+
private:
|
|
87
|
+
ForceAlignedAccess& operator=(const ForceAlignedAccess&);
|
|
100
88
|
};
|
|
101
89
|
|
|
102
90
|
/** \returns an expression of *this with forced aligned access
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
template<typename Derived>
|
|
106
|
-
inline const ForceAlignedAccess<Derived>
|
|
107
|
-
MatrixBase<Derived>::forceAlignedAccess() const
|
|
108
|
-
{
|
|
91
|
+
* \sa forceAlignedAccessIf(),class ForceAlignedAccess
|
|
92
|
+
*/
|
|
93
|
+
template <typename Derived>
|
|
94
|
+
inline const ForceAlignedAccess<Derived> MatrixBase<Derived>::forceAlignedAccess() const {
|
|
109
95
|
return ForceAlignedAccess<Derived>(derived());
|
|
110
96
|
}
|
|
111
97
|
|
|
112
98
|
/** \returns an expression of *this with forced aligned access
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
template<typename Derived>
|
|
116
|
-
inline ForceAlignedAccess<Derived>
|
|
117
|
-
MatrixBase<Derived>::forceAlignedAccess()
|
|
118
|
-
{
|
|
99
|
+
* \sa forceAlignedAccessIf(), class ForceAlignedAccess
|
|
100
|
+
*/
|
|
101
|
+
template <typename Derived>
|
|
102
|
+
inline ForceAlignedAccess<Derived> MatrixBase<Derived>::forceAlignedAccess() {
|
|
119
103
|
return ForceAlignedAccess<Derived>(derived());
|
|
120
104
|
}
|
|
121
105
|
|
|
122
106
|
/** \returns an expression of *this with forced aligned access if \a Enable is true.
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
template<typename Derived>
|
|
126
|
-
template<bool Enable>
|
|
127
|
-
inline
|
|
128
|
-
MatrixBase<Derived>::forceAlignedAccessIf() const
|
|
129
|
-
{
|
|
107
|
+
* \sa forceAlignedAccess(), class ForceAlignedAccess
|
|
108
|
+
*/
|
|
109
|
+
template <typename Derived>
|
|
110
|
+
template <bool Enable>
|
|
111
|
+
inline add_const_on_value_type_t<std::conditional_t<Enable, ForceAlignedAccess<Derived>, Derived&>>
|
|
112
|
+
MatrixBase<Derived>::forceAlignedAccessIf() const {
|
|
130
113
|
return derived(); // FIXME This should not work but apparently is never used
|
|
131
114
|
}
|
|
132
115
|
|
|
133
116
|
/** \returns an expression of *this with forced aligned access if \a Enable is true.
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
template<typename Derived>
|
|
137
|
-
template<bool Enable>
|
|
138
|
-
inline
|
|
139
|
-
MatrixBase<Derived>::forceAlignedAccessIf()
|
|
140
|
-
{
|
|
117
|
+
* \sa forceAlignedAccess(), class ForceAlignedAccess
|
|
118
|
+
*/
|
|
119
|
+
template <typename Derived>
|
|
120
|
+
template <bool Enable>
|
|
121
|
+
inline std::conditional_t<Enable, ForceAlignedAccess<Derived>, Derived&> MatrixBase<Derived>::forceAlignedAccessIf() {
|
|
141
122
|
return derived(); // FIXME This should not work but apparently is never used
|
|
142
123
|
}
|
|
143
124
|
|
|
144
|
-
}
|
|
125
|
+
} // end namespace Eigen
|
|
145
126
|
|
|
146
|
-
#endif
|
|
127
|
+
#endif // EIGEN_FORCEALIGNEDACCESS_H
|