@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,321 @@
|
|
|
1
|
+
// This file is part of Eigen, a lightweight C++ template library
|
|
2
|
+
// for linear algebra.
|
|
3
|
+
//
|
|
4
|
+
// Copyright (C) 2017 Gael Guennebaud <gael.guennebaud@inria.fr>
|
|
5
|
+
//
|
|
6
|
+
// This Source Code Form is subject to the terms of the Mozilla
|
|
7
|
+
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
8
|
+
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
9
|
+
|
|
10
|
+
#ifndef EIGEN_INDEXED_VIEW_H
|
|
11
|
+
#define EIGEN_INDEXED_VIEW_H
|
|
12
|
+
|
|
13
|
+
// IWYU pragma: private
|
|
14
|
+
#include "./InternalHeaderCheck.h"
|
|
15
|
+
|
|
16
|
+
namespace Eigen {
|
|
17
|
+
|
|
18
|
+
namespace internal {
|
|
19
|
+
|
|
20
|
+
template <typename XprType, typename RowIndices, typename ColIndices>
|
|
21
|
+
struct traits<IndexedView<XprType, RowIndices, ColIndices>> : traits<XprType> {
|
|
22
|
+
enum {
|
|
23
|
+
RowsAtCompileTime = int(IndexedViewHelper<RowIndices>::SizeAtCompileTime),
|
|
24
|
+
ColsAtCompileTime = int(IndexedViewHelper<ColIndices>::SizeAtCompileTime),
|
|
25
|
+
MaxRowsAtCompileTime = RowsAtCompileTime,
|
|
26
|
+
MaxColsAtCompileTime = ColsAtCompileTime,
|
|
27
|
+
|
|
28
|
+
XprTypeIsRowMajor = (int(traits<XprType>::Flags) & RowMajorBit) != 0,
|
|
29
|
+
IsRowMajor = (MaxRowsAtCompileTime == 1 && MaxColsAtCompileTime != 1) ? 1
|
|
30
|
+
: (MaxColsAtCompileTime == 1 && MaxRowsAtCompileTime != 1) ? 0
|
|
31
|
+
: XprTypeIsRowMajor,
|
|
32
|
+
|
|
33
|
+
RowIncr = int(IndexedViewHelper<RowIndices>::IncrAtCompileTime),
|
|
34
|
+
ColIncr = int(IndexedViewHelper<ColIndices>::IncrAtCompileTime),
|
|
35
|
+
InnerIncr = IsRowMajor ? ColIncr : RowIncr,
|
|
36
|
+
OuterIncr = IsRowMajor ? RowIncr : ColIncr,
|
|
37
|
+
|
|
38
|
+
HasSameStorageOrderAsXprType = (IsRowMajor == XprTypeIsRowMajor),
|
|
39
|
+
XprInnerStride = HasSameStorageOrderAsXprType ? int(inner_stride_at_compile_time<XprType>::ret)
|
|
40
|
+
: int(outer_stride_at_compile_time<XprType>::ret),
|
|
41
|
+
XprOuterstride = HasSameStorageOrderAsXprType ? int(outer_stride_at_compile_time<XprType>::ret)
|
|
42
|
+
: int(inner_stride_at_compile_time<XprType>::ret),
|
|
43
|
+
|
|
44
|
+
InnerSize = XprTypeIsRowMajor ? ColsAtCompileTime : RowsAtCompileTime,
|
|
45
|
+
IsBlockAlike = InnerIncr == 1 && OuterIncr == 1,
|
|
46
|
+
IsInnerPannel = HasSameStorageOrderAsXprType &&
|
|
47
|
+
is_same<AllRange<InnerSize>, std::conditional_t<XprTypeIsRowMajor, ColIndices, RowIndices>>::value,
|
|
48
|
+
|
|
49
|
+
InnerStrideAtCompileTime =
|
|
50
|
+
InnerIncr < 0 || InnerIncr == DynamicIndex || XprInnerStride == Dynamic || InnerIncr == Undefined
|
|
51
|
+
? Dynamic
|
|
52
|
+
: XprInnerStride * InnerIncr,
|
|
53
|
+
OuterStrideAtCompileTime =
|
|
54
|
+
OuterIncr < 0 || OuterIncr == DynamicIndex || XprOuterstride == Dynamic || OuterIncr == Undefined
|
|
55
|
+
? Dynamic
|
|
56
|
+
: XprOuterstride * OuterIncr,
|
|
57
|
+
|
|
58
|
+
ReturnAsScalar = is_single_range<RowIndices>::value && is_single_range<ColIndices>::value,
|
|
59
|
+
ReturnAsBlock = (!ReturnAsScalar) && IsBlockAlike,
|
|
60
|
+
ReturnAsIndexedView = (!ReturnAsScalar) && (!ReturnAsBlock),
|
|
61
|
+
|
|
62
|
+
// FIXME we deal with compile-time strides if and only if we have DirectAccessBit flag,
|
|
63
|
+
// but this is too strict regarding negative strides...
|
|
64
|
+
DirectAccessMask = (int(InnerIncr) != Undefined && int(OuterIncr) != Undefined && InnerIncr >= 0 && OuterIncr >= 0)
|
|
65
|
+
? DirectAccessBit
|
|
66
|
+
: 0,
|
|
67
|
+
FlagsRowMajorBit = IsRowMajor ? RowMajorBit : 0,
|
|
68
|
+
FlagsLvalueBit = is_lvalue<XprType>::value ? LvalueBit : 0,
|
|
69
|
+
FlagsLinearAccessBit = (RowsAtCompileTime == 1 || ColsAtCompileTime == 1) ? LinearAccessBit : 0,
|
|
70
|
+
Flags = (traits<XprType>::Flags & (HereditaryBits | DirectAccessMask)) | FlagsLvalueBit | FlagsRowMajorBit |
|
|
71
|
+
FlagsLinearAccessBit
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
typedef Block<XprType, RowsAtCompileTime, ColsAtCompileTime, IsInnerPannel> BlockType;
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
template <typename XprType, typename RowIndices, typename ColIndices, typename StorageKind, bool DirectAccess>
|
|
78
|
+
class IndexedViewImpl;
|
|
79
|
+
|
|
80
|
+
} // namespace internal
|
|
81
|
+
|
|
82
|
+
/** \class IndexedView
|
|
83
|
+
* \ingroup Core_Module
|
|
84
|
+
*
|
|
85
|
+
* \brief Expression of a non-sequential sub-matrix defined by arbitrary sequences of row and column indices
|
|
86
|
+
*
|
|
87
|
+
* \tparam XprType the type of the expression in which we are taking the intersections of sub-rows and sub-columns
|
|
88
|
+
* \tparam RowIndices the type of the object defining the sequence of row indices
|
|
89
|
+
* \tparam ColIndices the type of the object defining the sequence of column indices
|
|
90
|
+
*
|
|
91
|
+
* This class represents an expression of a sub-matrix (or sub-vector) defined as the intersection
|
|
92
|
+
* of sub-sets of rows and columns, that are themself defined by generic sequences of row indices \f$
|
|
93
|
+
* \{r_0,r_1,..r_{m-1}\} \f$ and column indices \f$ \{c_0,c_1,..c_{n-1} \}\f$. Let \f$ A \f$ be the nested matrix, then
|
|
94
|
+
* the resulting matrix \f$ B \f$ has \c m rows and \c n columns, and its entries are given by: \f$ B(i,j) = A(r_i,c_j)
|
|
95
|
+
* \f$.
|
|
96
|
+
*
|
|
97
|
+
* The \c RowIndices and \c ColIndices types must be compatible with the following API:
|
|
98
|
+
* \code
|
|
99
|
+
* <integral type> operator[](Index) const;
|
|
100
|
+
* Index size() const;
|
|
101
|
+
* \endcode
|
|
102
|
+
*
|
|
103
|
+
* Typical supported types thus include:
|
|
104
|
+
* - std::vector<int>
|
|
105
|
+
* - std::valarray<int>
|
|
106
|
+
* - std::array<int>
|
|
107
|
+
* - Eigen::ArrayXi
|
|
108
|
+
* - decltype(ArrayXi::LinSpaced(...))
|
|
109
|
+
* - Any view/expressions of the previous types
|
|
110
|
+
* - Eigen::ArithmeticSequence
|
|
111
|
+
* - Eigen::internal::AllRange (helper for Eigen::placeholders::all)
|
|
112
|
+
* - Eigen::internal::SingleRange (helper for single index)
|
|
113
|
+
* - etc.
|
|
114
|
+
*
|
|
115
|
+
* In typical usages of %Eigen, this class should never be used directly. It is the return type of
|
|
116
|
+
* DenseBase::operator()(const RowIndices&, const ColIndices&).
|
|
117
|
+
*
|
|
118
|
+
* \sa class Block
|
|
119
|
+
*/
|
|
120
|
+
template <typename XprType, typename RowIndices, typename ColIndices>
|
|
121
|
+
class IndexedView
|
|
122
|
+
: public internal::IndexedViewImpl<XprType, RowIndices, ColIndices, typename internal::traits<XprType>::StorageKind,
|
|
123
|
+
(internal::traits<IndexedView<XprType, RowIndices, ColIndices>>::Flags &
|
|
124
|
+
DirectAccessBit) != 0> {
|
|
125
|
+
public:
|
|
126
|
+
typedef typename internal::IndexedViewImpl<
|
|
127
|
+
XprType, RowIndices, ColIndices, typename internal::traits<XprType>::StorageKind,
|
|
128
|
+
(internal::traits<IndexedView<XprType, RowIndices, ColIndices>>::Flags & DirectAccessBit) != 0>
|
|
129
|
+
Base;
|
|
130
|
+
EIGEN_GENERIC_PUBLIC_INTERFACE(IndexedView)
|
|
131
|
+
EIGEN_INHERIT_ASSIGNMENT_OPERATORS(IndexedView)
|
|
132
|
+
|
|
133
|
+
template <typename T0, typename T1>
|
|
134
|
+
IndexedView(XprType& xpr, const T0& rowIndices, const T1& colIndices) : Base(xpr, rowIndices, colIndices) {}
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
namespace internal {
|
|
138
|
+
|
|
139
|
+
// Generic API dispatcher
|
|
140
|
+
template <typename XprType, typename RowIndices, typename ColIndices, typename StorageKind, bool DirectAccess>
|
|
141
|
+
class IndexedViewImpl : public internal::generic_xpr_base<IndexedView<XprType, RowIndices, ColIndices>>::type {
|
|
142
|
+
public:
|
|
143
|
+
typedef typename internal::generic_xpr_base<IndexedView<XprType, RowIndices, ColIndices>>::type Base;
|
|
144
|
+
typedef typename internal::ref_selector<XprType>::non_const_type MatrixTypeNested;
|
|
145
|
+
typedef internal::remove_all_t<XprType> NestedExpression;
|
|
146
|
+
typedef typename XprType::Scalar Scalar;
|
|
147
|
+
|
|
148
|
+
EIGEN_INHERIT_ASSIGNMENT_OPERATORS(IndexedViewImpl)
|
|
149
|
+
|
|
150
|
+
template <typename T0, typename T1>
|
|
151
|
+
IndexedViewImpl(XprType& xpr, const T0& rowIndices, const T1& colIndices)
|
|
152
|
+
: m_xpr(xpr), m_rowIndices(rowIndices), m_colIndices(colIndices) {}
|
|
153
|
+
|
|
154
|
+
/** \returns number of rows */
|
|
155
|
+
Index rows() const { return IndexedViewHelper<RowIndices>::size(m_rowIndices); }
|
|
156
|
+
|
|
157
|
+
/** \returns number of columns */
|
|
158
|
+
Index cols() const { return IndexedViewHelper<ColIndices>::size(m_colIndices); }
|
|
159
|
+
|
|
160
|
+
/** \returns the nested expression */
|
|
161
|
+
const internal::remove_all_t<XprType>& nestedExpression() const { return m_xpr; }
|
|
162
|
+
|
|
163
|
+
/** \returns the nested expression */
|
|
164
|
+
std::remove_reference_t<XprType>& nestedExpression() { return m_xpr; }
|
|
165
|
+
|
|
166
|
+
/** \returns a const reference to the object storing/generating the row indices */
|
|
167
|
+
const RowIndices& rowIndices() const { return m_rowIndices; }
|
|
168
|
+
|
|
169
|
+
/** \returns a const reference to the object storing/generating the column indices */
|
|
170
|
+
const ColIndices& colIndices() const { return m_colIndices; }
|
|
171
|
+
|
|
172
|
+
constexpr Scalar& coeffRef(Index rowId, Index colId) {
|
|
173
|
+
return nestedExpression().coeffRef(m_rowIndices[rowId], m_colIndices[colId]);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
constexpr const Scalar& coeffRef(Index rowId, Index colId) const {
|
|
177
|
+
return nestedExpression().coeffRef(m_rowIndices[rowId], m_colIndices[colId]);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
protected:
|
|
181
|
+
MatrixTypeNested m_xpr;
|
|
182
|
+
RowIndices m_rowIndices;
|
|
183
|
+
ColIndices m_colIndices;
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
template <typename XprType, typename RowIndices, typename ColIndices, typename StorageKind>
|
|
187
|
+
class IndexedViewImpl<XprType, RowIndices, ColIndices, StorageKind, true>
|
|
188
|
+
: public IndexedViewImpl<XprType, RowIndices, ColIndices, StorageKind, false> {
|
|
189
|
+
public:
|
|
190
|
+
using Base = internal::IndexedViewImpl<XprType, RowIndices, ColIndices,
|
|
191
|
+
typename internal::traits<XprType>::StorageKind, false>;
|
|
192
|
+
using Derived = IndexedView<XprType, RowIndices, ColIndices>;
|
|
193
|
+
|
|
194
|
+
EIGEN_INHERIT_ASSIGNMENT_OPERATORS(IndexedViewImpl)
|
|
195
|
+
|
|
196
|
+
template <typename T0, typename T1>
|
|
197
|
+
IndexedViewImpl(XprType& xpr, const T0& rowIndices, const T1& colIndices) : Base(xpr, rowIndices, colIndices) {}
|
|
198
|
+
|
|
199
|
+
Index rowIncrement() const {
|
|
200
|
+
if (traits<Derived>::RowIncr != DynamicIndex && traits<Derived>::RowIncr != Undefined) {
|
|
201
|
+
return traits<Derived>::RowIncr;
|
|
202
|
+
}
|
|
203
|
+
return IndexedViewHelper<RowIndices>::incr(this->rowIndices());
|
|
204
|
+
}
|
|
205
|
+
Index colIncrement() const {
|
|
206
|
+
if (traits<Derived>::ColIncr != DynamicIndex && traits<Derived>::ColIncr != Undefined) {
|
|
207
|
+
return traits<Derived>::ColIncr;
|
|
208
|
+
}
|
|
209
|
+
return IndexedViewHelper<ColIndices>::incr(this->colIndices());
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
Index innerIncrement() const { return traits<Derived>::IsRowMajor ? colIncrement() : rowIncrement(); }
|
|
213
|
+
|
|
214
|
+
Index outerIncrement() const { return traits<Derived>::IsRowMajor ? rowIncrement() : colIncrement(); }
|
|
215
|
+
|
|
216
|
+
std::decay_t<typename XprType::Scalar>* data() {
|
|
217
|
+
Index row_offset = this->rowIndices()[0] * this->nestedExpression().rowStride();
|
|
218
|
+
Index col_offset = this->colIndices()[0] * this->nestedExpression().colStride();
|
|
219
|
+
return this->nestedExpression().data() + row_offset + col_offset;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
const std::decay_t<typename XprType::Scalar>* data() const {
|
|
223
|
+
Index row_offset = this->rowIndices()[0] * this->nestedExpression().rowStride();
|
|
224
|
+
Index col_offset = this->colIndices()[0] * this->nestedExpression().colStride();
|
|
225
|
+
return this->nestedExpression().data() + row_offset + col_offset;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
EIGEN_DEVICE_FUNC constexpr Index innerStride() const noexcept {
|
|
229
|
+
if (traits<Derived>::InnerStrideAtCompileTime != Dynamic) {
|
|
230
|
+
return traits<Derived>::InnerStrideAtCompileTime;
|
|
231
|
+
}
|
|
232
|
+
return innerIncrement() * this->nestedExpression().innerStride();
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
EIGEN_DEVICE_FUNC constexpr Index outerStride() const noexcept {
|
|
236
|
+
if (traits<Derived>::OuterStrideAtCompileTime != Dynamic) {
|
|
237
|
+
return traits<Derived>::OuterStrideAtCompileTime;
|
|
238
|
+
}
|
|
239
|
+
return outerIncrement() * this->nestedExpression().outerStride();
|
|
240
|
+
}
|
|
241
|
+
};
|
|
242
|
+
|
|
243
|
+
template <typename ArgType, typename RowIndices, typename ColIndices>
|
|
244
|
+
struct unary_evaluator<IndexedView<ArgType, RowIndices, ColIndices>, IndexBased>
|
|
245
|
+
: evaluator_base<IndexedView<ArgType, RowIndices, ColIndices>> {
|
|
246
|
+
typedef IndexedView<ArgType, RowIndices, ColIndices> XprType;
|
|
247
|
+
|
|
248
|
+
enum {
|
|
249
|
+
CoeffReadCost = evaluator<ArgType>::CoeffReadCost /* TODO + cost of row/col index */,
|
|
250
|
+
|
|
251
|
+
FlagsLinearAccessBit =
|
|
252
|
+
(traits<XprType>::RowsAtCompileTime == 1 || traits<XprType>::ColsAtCompileTime == 1) ? LinearAccessBit : 0,
|
|
253
|
+
|
|
254
|
+
FlagsRowMajorBit = traits<XprType>::FlagsRowMajorBit,
|
|
255
|
+
|
|
256
|
+
Flags = (evaluator<ArgType>::Flags & (HereditaryBits & ~RowMajorBit /*| LinearAccessBit | DirectAccessBit*/)) |
|
|
257
|
+
FlagsLinearAccessBit | FlagsRowMajorBit,
|
|
258
|
+
|
|
259
|
+
Alignment = 0
|
|
260
|
+
};
|
|
261
|
+
|
|
262
|
+
EIGEN_DEVICE_FUNC explicit unary_evaluator(const XprType& xpr) : m_argImpl(xpr.nestedExpression()), m_xpr(xpr) {
|
|
263
|
+
EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
typedef typename XprType::Scalar Scalar;
|
|
267
|
+
typedef typename XprType::CoeffReturnType CoeffReturnType;
|
|
268
|
+
|
|
269
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE CoeffReturnType coeff(Index row, Index col) const {
|
|
270
|
+
eigen_assert(m_xpr.rowIndices()[row] >= 0 && m_xpr.rowIndices()[row] < m_xpr.nestedExpression().rows() &&
|
|
271
|
+
m_xpr.colIndices()[col] >= 0 && m_xpr.colIndices()[col] < m_xpr.nestedExpression().cols());
|
|
272
|
+
return m_argImpl.coeff(m_xpr.rowIndices()[row], m_xpr.colIndices()[col]);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar& coeffRef(Index row, Index col) {
|
|
276
|
+
eigen_assert(m_xpr.rowIndices()[row] >= 0 && m_xpr.rowIndices()[row] < m_xpr.nestedExpression().rows() &&
|
|
277
|
+
m_xpr.colIndices()[col] >= 0 && m_xpr.colIndices()[col] < m_xpr.nestedExpression().cols());
|
|
278
|
+
return m_argImpl.coeffRef(m_xpr.rowIndices()[row], m_xpr.colIndices()[col]);
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar& coeffRef(Index index) {
|
|
282
|
+
EIGEN_STATIC_ASSERT_LVALUE(XprType)
|
|
283
|
+
Index row = XprType::RowsAtCompileTime == 1 ? 0 : index;
|
|
284
|
+
Index col = XprType::RowsAtCompileTime == 1 ? index : 0;
|
|
285
|
+
eigen_assert(m_xpr.rowIndices()[row] >= 0 && m_xpr.rowIndices()[row] < m_xpr.nestedExpression().rows() &&
|
|
286
|
+
m_xpr.colIndices()[col] >= 0 && m_xpr.colIndices()[col] < m_xpr.nestedExpression().cols());
|
|
287
|
+
return m_argImpl.coeffRef(m_xpr.rowIndices()[row], m_xpr.colIndices()[col]);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar& coeffRef(Index index) const {
|
|
291
|
+
Index row = XprType::RowsAtCompileTime == 1 ? 0 : index;
|
|
292
|
+
Index col = XprType::RowsAtCompileTime == 1 ? index : 0;
|
|
293
|
+
eigen_assert(m_xpr.rowIndices()[row] >= 0 && m_xpr.rowIndices()[row] < m_xpr.nestedExpression().rows() &&
|
|
294
|
+
m_xpr.colIndices()[col] >= 0 && m_xpr.colIndices()[col] < m_xpr.nestedExpression().cols());
|
|
295
|
+
return m_argImpl.coeffRef(m_xpr.rowIndices()[row], m_xpr.colIndices()[col]);
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const CoeffReturnType coeff(Index index) const {
|
|
299
|
+
Index row = XprType::RowsAtCompileTime == 1 ? 0 : index;
|
|
300
|
+
Index col = XprType::RowsAtCompileTime == 1 ? index : 0;
|
|
301
|
+
eigen_assert(m_xpr.rowIndices()[row] >= 0 && m_xpr.rowIndices()[row] < m_xpr.nestedExpression().rows() &&
|
|
302
|
+
m_xpr.colIndices()[col] >= 0 && m_xpr.colIndices()[col] < m_xpr.nestedExpression().cols());
|
|
303
|
+
return m_argImpl.coeff(m_xpr.rowIndices()[row], m_xpr.colIndices()[col]);
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
protected:
|
|
307
|
+
evaluator<ArgType> m_argImpl;
|
|
308
|
+
const XprType& m_xpr;
|
|
309
|
+
};
|
|
310
|
+
|
|
311
|
+
// Catch assignments to an IndexedView.
|
|
312
|
+
template <typename ArgType, typename RowIndices, typename ColIndices>
|
|
313
|
+
struct evaluator_assume_aliasing<IndexedView<ArgType, RowIndices, ColIndices>> {
|
|
314
|
+
static const bool value = true;
|
|
315
|
+
};
|
|
316
|
+
|
|
317
|
+
} // end namespace internal
|
|
318
|
+
|
|
319
|
+
} // end namespace Eigen
|
|
320
|
+
|
|
321
|
+
#endif // EIGEN_INDEXED_VIEW_H
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
// This file is part of Eigen, a lightweight C++ template library
|
|
2
|
+
// for linear algebra.
|
|
3
|
+
//
|
|
4
|
+
// Copyright (C) 2024 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_INNER_PRODUCT_EVAL_H
|
|
11
|
+
#define EIGEN_INNER_PRODUCT_EVAL_H
|
|
12
|
+
|
|
13
|
+
// IWYU pragma: private
|
|
14
|
+
#include "./InternalHeaderCheck.h"
|
|
15
|
+
|
|
16
|
+
namespace Eigen {
|
|
17
|
+
|
|
18
|
+
namespace internal {
|
|
19
|
+
|
|
20
|
+
// recursively searches for the largest simd type that does not exceed Size, or the smallest if no such type exists
|
|
21
|
+
template <typename Scalar, int Size, typename Packet = typename packet_traits<Scalar>::type,
|
|
22
|
+
bool Stop =
|
|
23
|
+
(unpacket_traits<Packet>::size <= Size) || is_same<Packet, typename unpacket_traits<Packet>::half>::value>
|
|
24
|
+
struct find_inner_product_packet_helper;
|
|
25
|
+
|
|
26
|
+
template <typename Scalar, int Size, typename Packet>
|
|
27
|
+
struct find_inner_product_packet_helper<Scalar, Size, Packet, false> {
|
|
28
|
+
using type = typename find_inner_product_packet_helper<Scalar, Size, typename unpacket_traits<Packet>::half>::type;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
template <typename Scalar, int Size, typename Packet>
|
|
32
|
+
struct find_inner_product_packet_helper<Scalar, Size, Packet, true> {
|
|
33
|
+
using type = Packet;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
template <typename Scalar, int Size>
|
|
37
|
+
struct find_inner_product_packet : find_inner_product_packet_helper<Scalar, Size> {};
|
|
38
|
+
|
|
39
|
+
template <typename Scalar>
|
|
40
|
+
struct find_inner_product_packet<Scalar, Dynamic> {
|
|
41
|
+
using type = typename packet_traits<Scalar>::type;
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
template <typename Lhs, typename Rhs>
|
|
45
|
+
struct inner_product_assert {
|
|
46
|
+
EIGEN_STATIC_ASSERT_VECTOR_ONLY(Lhs)
|
|
47
|
+
EIGEN_STATIC_ASSERT_VECTOR_ONLY(Rhs)
|
|
48
|
+
EIGEN_STATIC_ASSERT_SAME_VECTOR_SIZE(Lhs, Rhs)
|
|
49
|
+
#ifndef EIGEN_NO_DEBUG
|
|
50
|
+
static EIGEN_DEVICE_FUNC void run(const Lhs& lhs, const Rhs& rhs) {
|
|
51
|
+
eigen_assert((lhs.size() == rhs.size()) && "Inner product: lhs and rhs vectors must have same size");
|
|
52
|
+
}
|
|
53
|
+
#else
|
|
54
|
+
static EIGEN_DEVICE_FUNC void run(const Lhs&, const Rhs&) {}
|
|
55
|
+
#endif
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
template <typename Func, typename Lhs, typename Rhs>
|
|
59
|
+
struct inner_product_evaluator {
|
|
60
|
+
static constexpr int LhsFlags = evaluator<Lhs>::Flags;
|
|
61
|
+
static constexpr int RhsFlags = evaluator<Rhs>::Flags;
|
|
62
|
+
static constexpr int SizeAtCompileTime = size_prefer_fixed(Lhs::SizeAtCompileTime, Rhs::SizeAtCompileTime);
|
|
63
|
+
static constexpr int MaxSizeAtCompileTime =
|
|
64
|
+
min_size_prefer_fixed(Lhs::MaxSizeAtCompileTime, Rhs::MaxSizeAtCompileTime);
|
|
65
|
+
static constexpr int LhsAlignment = evaluator<Lhs>::Alignment;
|
|
66
|
+
static constexpr int RhsAlignment = evaluator<Rhs>::Alignment;
|
|
67
|
+
|
|
68
|
+
using Scalar = typename Func::result_type;
|
|
69
|
+
using Packet = typename find_inner_product_packet<Scalar, SizeAtCompileTime>::type;
|
|
70
|
+
|
|
71
|
+
static constexpr bool Vectorize =
|
|
72
|
+
bool(LhsFlags & RhsFlags & PacketAccessBit) && Func::PacketAccess &&
|
|
73
|
+
((MaxSizeAtCompileTime == Dynamic) || (unpacket_traits<Packet>::size <= MaxSizeAtCompileTime));
|
|
74
|
+
|
|
75
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE explicit inner_product_evaluator(const Lhs& lhs, const Rhs& rhs,
|
|
76
|
+
Func func = Func())
|
|
77
|
+
: m_func(func), m_lhs(lhs), m_rhs(rhs), m_size(lhs.size()) {
|
|
78
|
+
inner_product_assert<Lhs, Rhs>::run(lhs, rhs);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index size() const { return m_size.value(); }
|
|
82
|
+
|
|
83
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar coeff(Index index) const {
|
|
84
|
+
return m_func.coeff(m_lhs.coeff(index), m_rhs.coeff(index));
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar coeff(const Scalar& value, Index index) const {
|
|
88
|
+
return m_func.coeff(value, m_lhs.coeff(index), m_rhs.coeff(index));
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
template <typename PacketType, int LhsMode = LhsAlignment, int RhsMode = RhsAlignment>
|
|
92
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE PacketType packet(Index index) const {
|
|
93
|
+
return m_func.packet(m_lhs.template packet<LhsMode, PacketType>(index),
|
|
94
|
+
m_rhs.template packet<RhsMode, PacketType>(index));
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
template <typename PacketType, int LhsMode = LhsAlignment, int RhsMode = RhsAlignment>
|
|
98
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE PacketType packet(const PacketType& value, Index index) const {
|
|
99
|
+
return m_func.packet(value, m_lhs.template packet<LhsMode, PacketType>(index),
|
|
100
|
+
m_rhs.template packet<RhsMode, PacketType>(index));
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const Func m_func;
|
|
104
|
+
const evaluator<Lhs> m_lhs;
|
|
105
|
+
const evaluator<Rhs> m_rhs;
|
|
106
|
+
const variable_if_dynamic<Index, SizeAtCompileTime> m_size;
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
template <typename Evaluator, bool Vectorize = Evaluator::Vectorize>
|
|
110
|
+
struct inner_product_impl;
|
|
111
|
+
|
|
112
|
+
// scalar loop
|
|
113
|
+
template <typename Evaluator>
|
|
114
|
+
struct inner_product_impl<Evaluator, false> {
|
|
115
|
+
using Scalar = typename Evaluator::Scalar;
|
|
116
|
+
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar run(const Evaluator& eval) {
|
|
117
|
+
const Index size = eval.size();
|
|
118
|
+
if (size == 0) return Scalar(0);
|
|
119
|
+
|
|
120
|
+
Scalar result = eval.coeff(0);
|
|
121
|
+
for (Index k = 1; k < size; k++) {
|
|
122
|
+
result = eval.coeff(result, k);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return result;
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
// vector loop
|
|
130
|
+
template <typename Evaluator>
|
|
131
|
+
struct inner_product_impl<Evaluator, true> {
|
|
132
|
+
using UnsignedIndex = std::make_unsigned_t<Index>;
|
|
133
|
+
using Scalar = typename Evaluator::Scalar;
|
|
134
|
+
using Packet = typename Evaluator::Packet;
|
|
135
|
+
static constexpr int PacketSize = unpacket_traits<Packet>::size;
|
|
136
|
+
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar run(const Evaluator& eval) {
|
|
137
|
+
const UnsignedIndex size = static_cast<UnsignedIndex>(eval.size());
|
|
138
|
+
if (size < PacketSize) return inner_product_impl<Evaluator, false>::run(eval);
|
|
139
|
+
|
|
140
|
+
const UnsignedIndex packetEnd = numext::round_down(size, PacketSize);
|
|
141
|
+
const UnsignedIndex quadEnd = numext::round_down(size, 4 * PacketSize);
|
|
142
|
+
const UnsignedIndex numPackets = size / PacketSize;
|
|
143
|
+
const UnsignedIndex numRemPackets = (packetEnd - quadEnd) / PacketSize;
|
|
144
|
+
|
|
145
|
+
Packet presult0, presult1, presult2, presult3;
|
|
146
|
+
|
|
147
|
+
presult0 = eval.template packet<Packet>(0 * PacketSize);
|
|
148
|
+
if (numPackets >= 2) presult1 = eval.template packet<Packet>(1 * PacketSize);
|
|
149
|
+
if (numPackets >= 3) presult2 = eval.template packet<Packet>(2 * PacketSize);
|
|
150
|
+
if (numPackets >= 4) {
|
|
151
|
+
presult3 = eval.template packet<Packet>(3 * PacketSize);
|
|
152
|
+
|
|
153
|
+
for (UnsignedIndex k = 4 * PacketSize; k < quadEnd; k += 4 * PacketSize) {
|
|
154
|
+
presult0 = eval.packet(presult0, k + 0 * PacketSize);
|
|
155
|
+
presult1 = eval.packet(presult1, k + 1 * PacketSize);
|
|
156
|
+
presult2 = eval.packet(presult2, k + 2 * PacketSize);
|
|
157
|
+
presult3 = eval.packet(presult3, k + 3 * PacketSize);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
if (numRemPackets >= 1) presult0 = eval.packet(presult0, quadEnd + 0 * PacketSize);
|
|
161
|
+
if (numRemPackets >= 2) presult1 = eval.packet(presult1, quadEnd + 1 * PacketSize);
|
|
162
|
+
if (numRemPackets == 3) presult2 = eval.packet(presult2, quadEnd + 2 * PacketSize);
|
|
163
|
+
|
|
164
|
+
presult2 = padd(presult2, presult3);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
if (numPackets >= 3) presult1 = padd(presult1, presult2);
|
|
168
|
+
if (numPackets >= 2) presult0 = padd(presult0, presult1);
|
|
169
|
+
|
|
170
|
+
Scalar result = predux(presult0);
|
|
171
|
+
for (UnsignedIndex k = packetEnd; k < size; k++) {
|
|
172
|
+
result = eval.coeff(result, k);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
return result;
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
template <typename Scalar, bool Conj>
|
|
180
|
+
struct conditional_conj;
|
|
181
|
+
|
|
182
|
+
template <typename Scalar>
|
|
183
|
+
struct conditional_conj<Scalar, true> {
|
|
184
|
+
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar coeff(const Scalar& a) { return numext::conj(a); }
|
|
185
|
+
template <typename Packet>
|
|
186
|
+
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packet(const Packet& a) {
|
|
187
|
+
return pconj(a);
|
|
188
|
+
}
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
template <typename Scalar>
|
|
192
|
+
struct conditional_conj<Scalar, false> {
|
|
193
|
+
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar coeff(const Scalar& a) { return a; }
|
|
194
|
+
template <typename Packet>
|
|
195
|
+
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packet(const Packet& a) {
|
|
196
|
+
return a;
|
|
197
|
+
}
|
|
198
|
+
};
|
|
199
|
+
|
|
200
|
+
template <typename LhsScalar, typename RhsScalar, bool Conj>
|
|
201
|
+
struct scalar_inner_product_op {
|
|
202
|
+
using result_type = typename ScalarBinaryOpTraits<LhsScalar, RhsScalar>::ReturnType;
|
|
203
|
+
using conj_helper = conditional_conj<LhsScalar, Conj>;
|
|
204
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type coeff(const LhsScalar& a, const RhsScalar& b) const {
|
|
205
|
+
return (conj_helper::coeff(a) * b);
|
|
206
|
+
}
|
|
207
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type coeff(const result_type& accum, const LhsScalar& a,
|
|
208
|
+
const RhsScalar& b) const {
|
|
209
|
+
return (conj_helper::coeff(a) * b) + accum;
|
|
210
|
+
}
|
|
211
|
+
static constexpr bool PacketAccess = false;
|
|
212
|
+
};
|
|
213
|
+
|
|
214
|
+
// Partial specialization for packet access if and only if
|
|
215
|
+
// LhsScalar == RhsScalar == ScalarBinaryOpTraits<LhsScalar, RhsScalar>::ReturnType.
|
|
216
|
+
template <typename Scalar, bool Conj>
|
|
217
|
+
struct scalar_inner_product_op<
|
|
218
|
+
Scalar,
|
|
219
|
+
typename std::enable_if<internal::is_same<typename ScalarBinaryOpTraits<Scalar, Scalar>::ReturnType, Scalar>::value,
|
|
220
|
+
Scalar>::type,
|
|
221
|
+
Conj> {
|
|
222
|
+
using result_type = Scalar;
|
|
223
|
+
using conj_helper = conditional_conj<Scalar, Conj>;
|
|
224
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar coeff(const Scalar& a, const Scalar& b) const {
|
|
225
|
+
return pmul(conj_helper::coeff(a), b);
|
|
226
|
+
}
|
|
227
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar coeff(const Scalar& accum, const Scalar& a, const Scalar& b) const {
|
|
228
|
+
return pmadd(conj_helper::coeff(a), b, accum);
|
|
229
|
+
}
|
|
230
|
+
template <typename Packet>
|
|
231
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packet(const Packet& a, const Packet& b) const {
|
|
232
|
+
return pmul(conj_helper::packet(a), b);
|
|
233
|
+
}
|
|
234
|
+
template <typename Packet>
|
|
235
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packet(const Packet& accum, const Packet& a, const Packet& b) const {
|
|
236
|
+
return pmadd(conj_helper::packet(a), b, accum);
|
|
237
|
+
}
|
|
238
|
+
static constexpr bool PacketAccess = packet_traits<Scalar>::HasMul && packet_traits<Scalar>::HasAdd;
|
|
239
|
+
};
|
|
240
|
+
|
|
241
|
+
template <typename Lhs, typename Rhs, bool Conj>
|
|
242
|
+
struct default_inner_product_impl {
|
|
243
|
+
using LhsScalar = typename traits<Lhs>::Scalar;
|
|
244
|
+
using RhsScalar = typename traits<Rhs>::Scalar;
|
|
245
|
+
using Op = scalar_inner_product_op<LhsScalar, RhsScalar, Conj>;
|
|
246
|
+
using Evaluator = inner_product_evaluator<Op, Lhs, Rhs>;
|
|
247
|
+
using result_type = typename Evaluator::Scalar;
|
|
248
|
+
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type run(const MatrixBase<Lhs>& a, const MatrixBase<Rhs>& b) {
|
|
249
|
+
Evaluator eval(a.derived(), b.derived(), Op());
|
|
250
|
+
return inner_product_impl<Evaluator>::run(eval);
|
|
251
|
+
}
|
|
252
|
+
};
|
|
253
|
+
|
|
254
|
+
template <typename Lhs, typename Rhs>
|
|
255
|
+
struct dot_impl : default_inner_product_impl<Lhs, Rhs, true> {};
|
|
256
|
+
|
|
257
|
+
} // namespace internal
|
|
258
|
+
} // namespace Eigen
|
|
259
|
+
|
|
260
|
+
#endif // EIGEN_INNER_PRODUCT_EVAL_H
|