@smake/eigen 1.1.0 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/eigen/Eigen/AccelerateSupport +52 -0
- package/eigen/Eigen/Cholesky +18 -20
- package/eigen/Eigen/CholmodSupport +28 -28
- package/eigen/Eigen/Core +187 -120
- package/eigen/Eigen/Eigenvalues +16 -13
- package/eigen/Eigen/Geometry +18 -18
- package/eigen/Eigen/Householder +9 -7
- package/eigen/Eigen/IterativeLinearSolvers +8 -4
- package/eigen/Eigen/Jacobi +14 -13
- package/eigen/Eigen/KLUSupport +23 -21
- package/eigen/Eigen/LU +15 -16
- package/eigen/Eigen/MetisSupport +12 -12
- package/eigen/Eigen/OrderingMethods +54 -51
- package/eigen/Eigen/PaStiXSupport +23 -21
- package/eigen/Eigen/PardisoSupport +17 -14
- package/eigen/Eigen/QR +18 -20
- package/eigen/Eigen/QtAlignedMalloc +5 -12
- package/eigen/Eigen/SPQRSupport +21 -14
- package/eigen/Eigen/SVD +23 -17
- package/eigen/Eigen/Sparse +1 -2
- package/eigen/Eigen/SparseCholesky +18 -15
- package/eigen/Eigen/SparseCore +18 -17
- package/eigen/Eigen/SparseLU +9 -9
- package/eigen/Eigen/SparseQR +16 -14
- package/eigen/Eigen/StdDeque +5 -2
- package/eigen/Eigen/StdList +5 -2
- package/eigen/Eigen/StdVector +5 -2
- package/eigen/Eigen/SuperLUSupport +30 -24
- package/eigen/Eigen/ThreadPool +80 -0
- package/eigen/Eigen/UmfPackSupport +19 -17
- package/eigen/Eigen/Version +14 -0
- package/eigen/Eigen/src/AccelerateSupport/AccelerateSupport.h +423 -0
- package/eigen/Eigen/src/AccelerateSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Cholesky/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Cholesky/LDLT.h +366 -405
- package/eigen/Eigen/src/Cholesky/LLT.h +323 -367
- package/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +81 -56
- package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +585 -529
- package/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Core/ArithmeticSequence.h +143 -317
- package/eigen/Eigen/src/Core/Array.h +329 -370
- package/eigen/Eigen/src/Core/ArrayBase.h +190 -203
- package/eigen/Eigen/src/Core/ArrayWrapper.h +126 -170
- package/eigen/Eigen/src/Core/Assign.h +30 -40
- package/eigen/Eigen/src/Core/AssignEvaluator.h +651 -604
- package/eigen/Eigen/src/Core/Assign_MKL.h +125 -120
- package/eigen/Eigen/src/Core/BandMatrix.h +267 -282
- package/eigen/Eigen/src/Core/Block.h +371 -390
- package/eigen/Eigen/src/Core/CommaInitializer.h +85 -100
- package/eigen/Eigen/src/Core/ConditionEstimator.h +51 -53
- package/eigen/Eigen/src/Core/CoreEvaluators.h +1214 -937
- package/eigen/Eigen/src/Core/CoreIterators.h +72 -63
- package/eigen/Eigen/src/Core/CwiseBinaryOp.h +112 -129
- package/eigen/Eigen/src/Core/CwiseNullaryOp.h +676 -702
- package/eigen/Eigen/src/Core/CwiseTernaryOp.h +77 -103
- package/eigen/Eigen/src/Core/CwiseUnaryOp.h +55 -67
- package/eigen/Eigen/src/Core/CwiseUnaryView.h +127 -92
- package/eigen/Eigen/src/Core/DenseBase.h +630 -658
- package/eigen/Eigen/src/Core/DenseCoeffsBase.h +511 -628
- package/eigen/Eigen/src/Core/DenseStorage.h +511 -590
- package/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
- package/eigen/Eigen/src/Core/Diagonal.h +168 -207
- package/eigen/Eigen/src/Core/DiagonalMatrix.h +346 -317
- package/eigen/Eigen/src/Core/DiagonalProduct.h +12 -10
- package/eigen/Eigen/src/Core/Dot.h +167 -217
- package/eigen/Eigen/src/Core/EigenBase.h +74 -85
- package/eigen/Eigen/src/Core/Fill.h +138 -0
- package/eigen/Eigen/src/Core/FindCoeff.h +464 -0
- package/eigen/Eigen/src/Core/ForceAlignedAccess.h +90 -113
- package/eigen/Eigen/src/Core/Fuzzy.h +82 -105
- package/eigen/Eigen/src/Core/GeneralProduct.h +315 -261
- package/eigen/Eigen/src/Core/GenericPacketMath.h +1182 -520
- package/eigen/Eigen/src/Core/GlobalFunctions.h +193 -157
- package/eigen/Eigen/src/Core/IO.h +131 -156
- package/eigen/Eigen/src/Core/IndexedView.h +209 -125
- package/eigen/Eigen/src/Core/InnerProduct.h +260 -0
- package/eigen/Eigen/src/Core/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Core/Inverse.h +50 -59
- package/eigen/Eigen/src/Core/Map.h +123 -141
- package/eigen/Eigen/src/Core/MapBase.h +255 -282
- package/eigen/Eigen/src/Core/MathFunctions.h +1247 -1201
- package/eigen/Eigen/src/Core/MathFunctionsImpl.h +162 -99
- package/eigen/Eigen/src/Core/Matrix.h +463 -494
- package/eigen/Eigen/src/Core/MatrixBase.h +468 -470
- package/eigen/Eigen/src/Core/NestByValue.h +58 -52
- package/eigen/Eigen/src/Core/NoAlias.h +79 -86
- package/eigen/Eigen/src/Core/NumTraits.h +206 -206
- package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +163 -142
- package/eigen/Eigen/src/Core/PermutationMatrix.h +461 -511
- package/eigen/Eigen/src/Core/PlainObjectBase.h +858 -972
- package/eigen/Eigen/src/Core/Product.h +246 -130
- package/eigen/Eigen/src/Core/ProductEvaluators.h +779 -671
- package/eigen/Eigen/src/Core/Random.h +153 -164
- package/eigen/Eigen/src/Core/RandomImpl.h +262 -0
- package/eigen/Eigen/src/Core/RealView.h +250 -0
- package/eigen/Eigen/src/Core/Redux.h +334 -314
- package/eigen/Eigen/src/Core/Ref.h +259 -257
- package/eigen/Eigen/src/Core/Replicate.h +92 -104
- package/eigen/Eigen/src/Core/Reshaped.h +215 -271
- package/eigen/Eigen/src/Core/ReturnByValue.h +47 -55
- package/eigen/Eigen/src/Core/Reverse.h +133 -148
- package/eigen/Eigen/src/Core/Select.h +68 -140
- package/eigen/Eigen/src/Core/SelfAdjointView.h +254 -290
- package/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h +23 -20
- package/eigen/Eigen/src/Core/SkewSymmetricMatrix3.h +382 -0
- package/eigen/Eigen/src/Core/Solve.h +88 -102
- package/eigen/Eigen/src/Core/SolveTriangular.h +126 -124
- package/eigen/Eigen/src/Core/SolverBase.h +132 -133
- package/eigen/Eigen/src/Core/StableNorm.h +113 -147
- package/eigen/Eigen/src/Core/StlIterators.h +404 -248
- package/eigen/Eigen/src/Core/Stride.h +90 -92
- package/eigen/Eigen/src/Core/Swap.h +70 -39
- package/eigen/Eigen/src/Core/Transpose.h +258 -295
- package/eigen/Eigen/src/Core/Transpositions.h +270 -333
- package/eigen/Eigen/src/Core/TriangularMatrix.h +642 -743
- package/eigen/Eigen/src/Core/VectorBlock.h +59 -72
- package/eigen/Eigen/src/Core/VectorwiseOp.h +653 -704
- package/eigen/Eigen/src/Core/Visitor.h +464 -308
- package/eigen/Eigen/src/Core/arch/AVX/Complex.h +380 -187
- package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +65 -163
- package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +2145 -638
- package/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
- package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +253 -60
- package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +278 -228
- package/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +48 -269
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1597 -754
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMathFP16.h +1413 -0
- package/eigen/Eigen/src/Core/arch/AVX512/Reductions.h +297 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TrsmKernel.h +1167 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TrsmUnrolls.inc +1219 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +229 -41
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +420 -184
- package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +40 -49
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2962 -2213
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +196 -212
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +713 -441
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMAbfloat16.h +742 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixVectorProduct.inc +2818 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +2380 -1362
- package/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
- package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +390 -224
- package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +78 -67
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1784 -799
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +167 -50
- package/eigen/Eigen/src/Core/arch/Default/Half.h +528 -379
- package/eigen/Eigen/src/Core/arch/Default/Settings.h +10 -12
- package/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
- package/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +41 -40
- package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +550 -523
- package/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
- package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +27 -30
- package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +8 -8
- package/eigen/Eigen/src/Core/arch/HVX/PacketMath.h +1088 -0
- package/eigen/Eigen/src/Core/arch/LSX/Complex.h +520 -0
- package/eigen/Eigen/src/Core/arch/LSX/GeneralBlockPanelKernel.h +23 -0
- package/eigen/Eigen/src/Core/arch/LSX/MathFunctions.h +43 -0
- package/eigen/Eigen/src/Core/arch/LSX/PacketMath.h +2866 -0
- package/eigen/Eigen/src/Core/arch/LSX/TypeCasting.h +526 -0
- package/eigen/Eigen/src/Core/arch/MSA/Complex.h +54 -82
- package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +84 -92
- package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +51 -47
- package/eigen/Eigen/src/Core/arch/NEON/Complex.h +454 -306
- package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +175 -115
- package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +23 -30
- package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +4366 -2857
- package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +616 -393
- package/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
- package/eigen/Eigen/src/Core/arch/SSE/Complex.h +350 -198
- package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +38 -149
- package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +1791 -912
- package/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
- package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +128 -40
- package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +10 -6
- package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +156 -234
- package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +6 -3
- package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +27 -32
- package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +119 -117
- package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +325 -419
- package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +15 -17
- package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +325 -181
- package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +94 -83
- package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +811 -458
- package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +121 -124
- package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +576 -370
- package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +194 -109
- package/eigen/Eigen/src/Core/functors/StlFunctors.h +95 -112
- package/eigen/Eigen/src/Core/functors/TernaryFunctors.h +34 -7
- package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1038 -749
- package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1883 -1375
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +312 -370
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +189 -176
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +84 -81
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +154 -73
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +292 -337
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +80 -77
- package/eigen/Eigen/src/Core/products/Parallelizer.h +207 -105
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +327 -388
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +206 -224
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +138 -147
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +58 -61
- package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +71 -71
- package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +48 -47
- package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +294 -369
- package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +246 -238
- package/eigen/Eigen/src/Core/products/TriangularMatrixVector.h +244 -247
- package/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +212 -192
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +328 -277
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +108 -109
- package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +68 -94
- package/eigen/Eigen/src/Core/util/Assert.h +158 -0
- package/eigen/Eigen/src/Core/util/BlasUtil.h +342 -303
- package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +348 -317
- package/eigen/Eigen/src/Core/util/Constants.h +297 -262
- package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +130 -90
- package/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
- package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +449 -247
- package/eigen/Eigen/src/Core/util/GpuHipCudaDefines.inc +101 -0
- package/eigen/Eigen/src/Core/util/GpuHipCudaUndefines.inc +45 -0
- package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +417 -116
- package/eigen/Eigen/src/Core/util/IntegralConstant.h +211 -204
- package/eigen/Eigen/src/Core/util/MKL_support.h +39 -37
- package/eigen/Eigen/src/Core/util/Macros.h +655 -773
- package/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
- package/eigen/Eigen/src/Core/util/Memory.h +970 -748
- package/eigen/Eigen/src/Core/util/Meta.h +581 -633
- package/eigen/Eigen/src/Core/util/MoreMeta.h +638 -0
- package/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +32 -19
- package/eigen/Eigen/src/Core/util/ReshapedHelper.h +17 -17
- package/eigen/Eigen/src/Core/util/Serializer.h +209 -0
- package/eigen/Eigen/src/Core/util/StaticAssert.h +50 -166
- package/eigen/Eigen/src/Core/util/SymbolicIndex.h +377 -225
- package/eigen/Eigen/src/Core/util/XprHelper.h +784 -547
- package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +246 -277
- package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +299 -319
- package/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +52 -48
- package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +413 -456
- package/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +309 -325
- package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +157 -171
- package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +292 -310
- package/eigen/Eigen/src/Eigenvalues/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +89 -105
- package/eigen/Eigen/src/Eigenvalues/RealQZ.h +537 -607
- package/eigen/Eigen/src/Eigenvalues/RealSchur.h +342 -381
- package/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +41 -35
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +541 -595
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +47 -44
- package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +430 -462
- package/eigen/Eigen/src/Geometry/AlignedBox.h +226 -227
- package/eigen/Eigen/src/Geometry/AngleAxis.h +131 -133
- package/eigen/Eigen/src/Geometry/EulerAngles.h +163 -74
- package/eigen/Eigen/src/Geometry/Homogeneous.h +285 -333
- package/eigen/Eigen/src/Geometry/Hyperplane.h +151 -160
- package/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Geometry/OrthoMethods.h +168 -146
- package/eigen/Eigen/src/Geometry/ParametrizedLine.h +127 -127
- package/eigen/Eigen/src/Geometry/Quaternion.h +566 -506
- package/eigen/Eigen/src/Geometry/Rotation2D.h +107 -105
- package/eigen/Eigen/src/Geometry/RotationBase.h +148 -145
- package/eigen/Eigen/src/Geometry/Scaling.h +113 -106
- package/eigen/Eigen/src/Geometry/Transform.h +858 -936
- package/eigen/Eigen/src/Geometry/Translation.h +94 -92
- package/eigen/Eigen/src/Geometry/Umeyama.h +79 -84
- package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +90 -104
- package/eigen/Eigen/src/Householder/BlockHouseholder.h +51 -46
- package/eigen/Eigen/src/Householder/Householder.h +102 -124
- package/eigen/Eigen/src/Householder/HouseholderSequence.h +412 -453
- package/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +149 -162
- package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +124 -119
- package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +92 -104
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +251 -243
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +224 -228
- package/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +178 -227
- package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +79 -84
- package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +54 -60
- package/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Jacobi/Jacobi.h +252 -308
- package/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/KLUSupport/KLUSupport.h +208 -227
- package/eigen/Eigen/src/LU/Determinant.h +50 -69
- package/eigen/Eigen/src/LU/FullPivLU.h +545 -596
- package/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/LU/InverseImpl.h +206 -285
- package/eigen/Eigen/src/LU/PartialPivLU.h +390 -428
- package/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +54 -40
- package/eigen/Eigen/src/LU/arch/InverseSize4.h +72 -70
- package/eigen/Eigen/src/MetisSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/MetisSupport/MetisSupport.h +81 -93
- package/eigen/Eigen/src/OrderingMethods/Amd.h +243 -265
- package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +831 -1004
- package/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/OrderingMethods/Ordering.h +112 -119
- package/eigen/Eigen/src/PaStiXSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +524 -570
- package/eigen/Eigen/src/PardisoSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +385 -430
- package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +479 -479
- package/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +120 -56
- package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +166 -153
- package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +495 -475
- package/eigen/Eigen/src/QR/HouseholderQR.h +394 -285
- package/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h +32 -23
- package/eigen/Eigen/src/QR/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SPQRSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +244 -264
- package/eigen/Eigen/src/SVD/BDCSVD.h +817 -713
- package/eigen/Eigen/src/SVD/BDCSVD_LAPACKE.h +174 -0
- package/eigen/Eigen/src/SVD/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SVD/JacobiSVD.h +577 -543
- package/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +85 -49
- package/eigen/Eigen/src/SVD/SVDBase.h +242 -182
- package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +200 -235
- package/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +765 -594
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +308 -94
- package/eigen/Eigen/src/SparseCore/AmbiVector.h +202 -251
- package/eigen/Eigen/src/SparseCore/CompressedStorage.h +184 -252
- package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +134 -178
- package/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCore/SparseAssign.h +149 -140
- package/eigen/Eigen/src/SparseCore/SparseBlock.h +403 -440
- package/eigen/Eigen/src/SparseCore/SparseColEtree.h +100 -112
- package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +525 -303
- package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +555 -339
- package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +100 -108
- package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +169 -197
- package/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h +71 -71
- package/eigen/Eigen/src/SparseCore/SparseDot.h +49 -47
- package/eigen/Eigen/src/SparseCore/SparseFuzzy.h +13 -11
- package/eigen/Eigen/src/SparseCore/SparseMap.h +243 -253
- package/eigen/Eigen/src/SparseCore/SparseMatrix.h +1603 -1245
- package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +403 -350
- package/eigen/Eigen/src/SparseCore/SparsePermutation.h +186 -115
- package/eigen/Eigen/src/SparseCore/SparseProduct.h +94 -97
- package/eigen/Eigen/src/SparseCore/SparseRedux.h +22 -24
- package/eigen/Eigen/src/SparseCore/SparseRef.h +268 -295
- package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +370 -416
- package/eigen/Eigen/src/SparseCore/SparseSolverBase.h +78 -87
- package/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +81 -95
- package/eigen/Eigen/src/SparseCore/SparseTranspose.h +62 -71
- package/eigen/Eigen/src/SparseCore/SparseTriangularView.h +132 -144
- package/eigen/Eigen/src/SparseCore/SparseUtil.h +138 -115
- package/eigen/Eigen/src/SparseCore/SparseVector.h +426 -372
- package/eigen/Eigen/src/SparseCore/SparseView.h +164 -193
- package/eigen/Eigen/src/SparseCore/TriangularSolver.h +129 -170
- package/eigen/Eigen/src/SparseLU/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseLU/SparseLU.h +756 -710
- package/eigen/Eigen/src/SparseLU/SparseLUImpl.h +61 -48
- package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +102 -118
- package/eigen/Eigen/src/SparseLU/SparseLU_Structs.h +38 -35
- package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +245 -301
- package/eigen/Eigen/src/SparseLU/SparseLU_Utils.h +44 -49
- package/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h +104 -108
- package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +89 -100
- package/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +57 -58
- package/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +43 -55
- package/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +74 -71
- package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +124 -132
- package/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h +136 -159
- package/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h +51 -52
- package/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h +67 -73
- package/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h +24 -26
- package/eigen/Eigen/src/SparseQR/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseQR/SparseQR.h +450 -502
- package/eigen/Eigen/src/StlSupport/StdDeque.h +28 -93
- package/eigen/Eigen/src/StlSupport/StdList.h +28 -84
- package/eigen/Eigen/src/StlSupport/StdVector.h +28 -108
- package/eigen/Eigen/src/StlSupport/details.h +48 -50
- package/eigen/Eigen/src/SuperLUSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +634 -730
- package/eigen/Eigen/src/ThreadPool/Barrier.h +70 -0
- package/eigen/Eigen/src/ThreadPool/CoreThreadPoolDevice.h +336 -0
- package/eigen/Eigen/src/ThreadPool/EventCount.h +241 -0
- package/eigen/Eigen/src/ThreadPool/ForkJoin.h +140 -0
- package/eigen/Eigen/src/ThreadPool/InternalHeaderCheck.h +4 -0
- package/eigen/Eigen/src/ThreadPool/NonBlockingThreadPool.h +587 -0
- package/eigen/Eigen/src/ThreadPool/RunQueue.h +230 -0
- package/eigen/Eigen/src/ThreadPool/ThreadCancel.h +21 -0
- package/eigen/Eigen/src/ThreadPool/ThreadEnvironment.h +43 -0
- package/eigen/Eigen/src/ThreadPool/ThreadLocal.h +289 -0
- package/eigen/Eigen/src/ThreadPool/ThreadPoolInterface.h +50 -0
- package/eigen/Eigen/src/ThreadPool/ThreadYield.h +16 -0
- package/eigen/Eigen/src/UmfPackSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +428 -464
- package/eigen/Eigen/src/misc/Image.h +41 -43
- package/eigen/Eigen/src/misc/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/misc/Kernel.h +39 -41
- package/eigen/Eigen/src/misc/RealSvd2x2.h +19 -21
- package/eigen/Eigen/src/misc/blas.h +83 -426
- package/eigen/Eigen/src/misc/lapacke.h +9972 -16179
- package/eigen/Eigen/src/misc/lapacke_helpers.h +163 -0
- package/eigen/Eigen/src/misc/lapacke_mangling.h +4 -5
- package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.inc +344 -0
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.inc +544 -0
- package/eigen/Eigen/src/plugins/{BlockMethods.h → BlockMethods.inc} +434 -506
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
- package/eigen/Eigen/src/plugins/{CommonCwiseUnaryOps.h → CommonCwiseUnaryOps.inc} +58 -68
- package/eigen/Eigen/src/plugins/IndexedViewMethods.inc +192 -0
- package/eigen/Eigen/src/plugins/InternalHeaderCheck.inc +3 -0
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.inc +331 -0
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.inc +118 -0
- package/eigen/Eigen/src/plugins/ReshapedMethods.inc +133 -0
- package/package.json +1 -1
- package/eigen/COPYING.APACHE +0 -203
- package/eigen/COPYING.BSD +0 -26
- package/eigen/COPYING.GPL +0 -674
- package/eigen/COPYING.LGPL +0 -502
- package/eigen/COPYING.MINPACK +0 -51
- package/eigen/COPYING.MPL2 +0 -373
- package/eigen/COPYING.README +0 -18
- package/eigen/Eigen/src/Core/BooleanRedux.h +0 -162
- package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +0 -258
- package/eigen/Eigen/src/Core/arch/Default/TypeCasting.h +0 -120
- package/eigen/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +0 -694
- package/eigen/Eigen/src/Core/util/NonMPL2.h +0 -3
- package/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h +0 -67
- package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +0 -280
- package/eigen/Eigen/src/misc/lapack.h +0 -152
- package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +0 -358
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +0 -696
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +0 -115
- package/eigen/Eigen/src/plugins/IndexedViewMethods.h +0 -262
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +0 -152
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +0 -95
- package/eigen/Eigen/src/plugins/ReshapedMethods.h +0 -149
- package/eigen/README.md +0 -5
|
@@ -10,71 +10,80 @@
|
|
|
10
10
|
#ifndef EIGEN_SPARSEDENSEPRODUCT_H
|
|
11
11
|
#define EIGEN_SPARSEDENSEPRODUCT_H
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
// IWYU pragma: private
|
|
14
|
+
#include "./InternalHeaderCheck.h"
|
|
15
|
+
|
|
16
|
+
namespace Eigen {
|
|
14
17
|
|
|
15
18
|
namespace internal {
|
|
16
19
|
|
|
17
|
-
template <>
|
|
18
|
-
|
|
20
|
+
template <>
|
|
21
|
+
struct product_promote_storage_type<Sparse, Dense, OuterProduct> {
|
|
22
|
+
typedef Sparse ret;
|
|
23
|
+
};
|
|
24
|
+
template <>
|
|
25
|
+
struct product_promote_storage_type<Dense, Sparse, OuterProduct> {
|
|
26
|
+
typedef Sparse ret;
|
|
27
|
+
};
|
|
19
28
|
|
|
20
|
-
template<typename SparseLhsType, typename DenseRhsType, typename DenseResType,
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
bool ColPerCol = ((DenseRhsType::Flags&RowMajorBit)==0) || DenseRhsType::ColsAtCompileTime==1>
|
|
29
|
+
template <typename SparseLhsType, typename DenseRhsType, typename DenseResType, typename AlphaType,
|
|
30
|
+
int LhsStorageOrder = ((SparseLhsType::Flags & RowMajorBit) == RowMajorBit) ? RowMajor : ColMajor,
|
|
31
|
+
bool ColPerCol = ((DenseRhsType::Flags & RowMajorBit) == 0) || DenseRhsType::ColsAtCompileTime == 1>
|
|
24
32
|
struct sparse_time_dense_product_impl;
|
|
25
33
|
|
|
26
|
-
template<typename SparseLhsType, typename DenseRhsType, typename DenseResType>
|
|
27
|
-
struct sparse_time_dense_product_impl<SparseLhsType,DenseRhsType,DenseResType, typename DenseResType::Scalar,
|
|
28
|
-
{
|
|
29
|
-
typedef
|
|
30
|
-
typedef
|
|
31
|
-
typedef
|
|
34
|
+
template <typename SparseLhsType, typename DenseRhsType, typename DenseResType>
|
|
35
|
+
struct sparse_time_dense_product_impl<SparseLhsType, DenseRhsType, DenseResType, typename DenseResType::Scalar,
|
|
36
|
+
RowMajor, true> {
|
|
37
|
+
typedef internal::remove_all_t<SparseLhsType> Lhs;
|
|
38
|
+
typedef internal::remove_all_t<DenseRhsType> Rhs;
|
|
39
|
+
typedef internal::remove_all_t<DenseResType> Res;
|
|
32
40
|
typedef typename evaluator<Lhs>::InnerIterator LhsInnerIterator;
|
|
33
41
|
typedef evaluator<Lhs> LhsEval;
|
|
34
|
-
static void run(const SparseLhsType& lhs, const DenseRhsType& rhs, DenseResType& res,
|
|
35
|
-
|
|
42
|
+
static void run(const SparseLhsType& lhs, const DenseRhsType& rhs, DenseResType& res,
|
|
43
|
+
const typename Res::Scalar& alpha) {
|
|
36
44
|
LhsEval lhsEval(lhs);
|
|
37
|
-
|
|
45
|
+
|
|
38
46
|
Index n = lhs.outerSize();
|
|
39
47
|
#ifdef EIGEN_HAS_OPENMP
|
|
40
|
-
Eigen::initParallel();
|
|
41
48
|
Index threads = Eigen::nbThreads();
|
|
42
49
|
#endif
|
|
43
|
-
|
|
44
|
-
for(Index c=0; c<rhs.cols(); ++c)
|
|
45
|
-
{
|
|
50
|
+
|
|
51
|
+
for (Index c = 0; c < rhs.cols(); ++c) {
|
|
46
52
|
#ifdef EIGEN_HAS_OPENMP
|
|
47
53
|
// This 20000 threshold has been found experimentally on 2D and 3D Poisson problems.
|
|
48
54
|
// It basically represents the minimal amount of work to be done to be worth it.
|
|
49
|
-
if(threads>1 && lhsEval.nonZerosEstimate() > 20000)
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
processRow(lhsEval,rhs,res,alpha,i,c);
|
|
54
|
-
}
|
|
55
|
-
else
|
|
55
|
+
if (threads > 1 && lhsEval.nonZerosEstimate() > 20000) {
|
|
56
|
+
#pragma omp parallel for schedule(dynamic, (n + threads * 4 - 1) / (threads * 4)) num_threads(threads)
|
|
57
|
+
for (Index i = 0; i < n; ++i) processRow(lhsEval, rhs, res, alpha, i, c);
|
|
58
|
+
} else
|
|
56
59
|
#endif
|
|
57
60
|
{
|
|
58
|
-
for(Index i=0; i<n; ++i)
|
|
59
|
-
processRow(lhsEval,rhs,res,alpha,i,c);
|
|
61
|
+
for (Index i = 0; i < n; ++i) processRow(lhsEval, rhs, res, alpha, i, c);
|
|
60
62
|
}
|
|
61
63
|
}
|
|
62
64
|
}
|
|
63
|
-
|
|
64
|
-
static void processRow(const LhsEval& lhsEval, const DenseRhsType& rhs, DenseResType& res,
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
65
|
+
|
|
66
|
+
static void processRow(const LhsEval& lhsEval, const DenseRhsType& rhs, DenseResType& res,
|
|
67
|
+
const typename Res::Scalar& alpha, Index i, Index col) {
|
|
68
|
+
// Two accumulators, which breaks the dependency chain on the accumulator
|
|
69
|
+
// and allows more instruction-level parallelism in the following loop
|
|
70
|
+
typename Res::Scalar tmp_a(0);
|
|
71
|
+
typename Res::Scalar tmp_b(0);
|
|
72
|
+
for (LhsInnerIterator it(lhsEval, i); it; ++it) {
|
|
73
|
+
tmp_a += it.value() * rhs.coeff(it.index(), col);
|
|
74
|
+
++it;
|
|
75
|
+
if (it) {
|
|
76
|
+
tmp_b += it.value() * rhs.coeff(it.index(), col);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
res.coeffRef(i, col) += alpha * (tmp_a + tmp_b);
|
|
70
80
|
}
|
|
71
|
-
|
|
72
81
|
};
|
|
73
82
|
|
|
74
83
|
// FIXME: what is the purpose of the following specialization? Is it for the BlockedSparse format?
|
|
75
84
|
// -> let's disable it for now as it is conflicting with generic scalar*matrix and matrix*scalar operators
|
|
76
|
-
// template<typename T1, typename T2/*, int
|
|
77
|
-
// struct ScalarBinaryOpTraits<T1, Ref<T2/*,
|
|
85
|
+
// template<typename T1, typename T2/*, int Options_, typename StrideType_*/>
|
|
86
|
+
// struct ScalarBinaryOpTraits<T1, Ref<T2/*, Options_, StrideType_*/> >
|
|
78
87
|
// {
|
|
79
88
|
// enum {
|
|
80
89
|
// Defined = 1
|
|
@@ -82,261 +91,224 @@ struct sparse_time_dense_product_impl<SparseLhsType,DenseRhsType,DenseResType, t
|
|
|
82
91
|
// typedef typename CwiseUnaryOp<scalar_multiple2_op<T1, typename T2::Scalar>, T2>::PlainObject ReturnType;
|
|
83
92
|
// };
|
|
84
93
|
|
|
85
|
-
template<typename SparseLhsType, typename DenseRhsType, typename DenseResType, typename AlphaType>
|
|
86
|
-
struct sparse_time_dense_product_impl<SparseLhsType,DenseRhsType,DenseResType, AlphaType, ColMajor, true>
|
|
87
|
-
|
|
88
|
-
typedef
|
|
89
|
-
typedef
|
|
90
|
-
typedef typename internal::remove_all<DenseResType>::type Res;
|
|
94
|
+
template <typename SparseLhsType, typename DenseRhsType, typename DenseResType, typename AlphaType>
|
|
95
|
+
struct sparse_time_dense_product_impl<SparseLhsType, DenseRhsType, DenseResType, AlphaType, ColMajor, true> {
|
|
96
|
+
typedef internal::remove_all_t<SparseLhsType> Lhs;
|
|
97
|
+
typedef internal::remove_all_t<DenseRhsType> Rhs;
|
|
98
|
+
typedef internal::remove_all_t<DenseResType> Res;
|
|
91
99
|
typedef evaluator<Lhs> LhsEval;
|
|
92
100
|
typedef typename LhsEval::InnerIterator LhsInnerIterator;
|
|
93
|
-
static void run(const SparseLhsType& lhs, const DenseRhsType& rhs, DenseResType& res, const AlphaType& alpha)
|
|
94
|
-
{
|
|
101
|
+
static void run(const SparseLhsType& lhs, const DenseRhsType& rhs, DenseResType& res, const AlphaType& alpha) {
|
|
95
102
|
LhsEval lhsEval(lhs);
|
|
96
|
-
for(Index c=0; c<rhs.cols(); ++c)
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
typename ScalarBinaryOpTraits<AlphaType, typename Rhs::Scalar>::ReturnType rhs_j(alpha * rhs.coeff(j,c));
|
|
102
|
-
for(LhsInnerIterator it(lhsEval,j); it ;++it)
|
|
103
|
-
res.coeffRef(it.index(),c) += it.value() * rhs_j;
|
|
103
|
+
for (Index c = 0; c < rhs.cols(); ++c) {
|
|
104
|
+
for (Index j = 0; j < lhs.outerSize(); ++j) {
|
|
105
|
+
// typename Res::Scalar rhs_j = alpha * rhs.coeff(j,c);
|
|
106
|
+
typename ScalarBinaryOpTraits<AlphaType, typename Rhs::Scalar>::ReturnType rhs_j(alpha * rhs.coeff(j, c));
|
|
107
|
+
for (LhsInnerIterator it(lhsEval, j); it; ++it) res.coeffRef(it.index(), c) += it.value() * rhs_j;
|
|
104
108
|
}
|
|
105
109
|
}
|
|
106
110
|
}
|
|
107
111
|
};
|
|
108
112
|
|
|
109
|
-
template<typename SparseLhsType, typename DenseRhsType, typename DenseResType>
|
|
110
|
-
struct sparse_time_dense_product_impl<SparseLhsType,DenseRhsType,DenseResType, typename DenseResType::Scalar,
|
|
111
|
-
{
|
|
112
|
-
typedef
|
|
113
|
-
typedef
|
|
114
|
-
typedef
|
|
113
|
+
template <typename SparseLhsType, typename DenseRhsType, typename DenseResType>
|
|
114
|
+
struct sparse_time_dense_product_impl<SparseLhsType, DenseRhsType, DenseResType, typename DenseResType::Scalar,
|
|
115
|
+
RowMajor, false> {
|
|
116
|
+
typedef internal::remove_all_t<SparseLhsType> Lhs;
|
|
117
|
+
typedef internal::remove_all_t<DenseRhsType> Rhs;
|
|
118
|
+
typedef internal::remove_all_t<DenseResType> Res;
|
|
115
119
|
typedef evaluator<Lhs> LhsEval;
|
|
116
120
|
typedef typename LhsEval::InnerIterator LhsInnerIterator;
|
|
117
|
-
static void run(const SparseLhsType& lhs, const DenseRhsType& rhs, DenseResType& res,
|
|
118
|
-
|
|
121
|
+
static void run(const SparseLhsType& lhs, const DenseRhsType& rhs, DenseResType& res,
|
|
122
|
+
const typename Res::Scalar& alpha) {
|
|
119
123
|
Index n = lhs.rows();
|
|
120
124
|
LhsEval lhsEval(lhs);
|
|
121
125
|
|
|
122
126
|
#ifdef EIGEN_HAS_OPENMP
|
|
123
|
-
Eigen::initParallel();
|
|
124
127
|
Index threads = Eigen::nbThreads();
|
|
125
128
|
// This 20000 threshold has been found experimentally on 2D and 3D Poisson problems.
|
|
126
129
|
// It basically represents the minimal amount of work to be done to be worth it.
|
|
127
|
-
if(threads>1 && lhsEval.nonZerosEstimate()*rhs.cols() > 20000)
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
processRow(lhsEval,rhs,res,alpha,i);
|
|
132
|
-
}
|
|
133
|
-
else
|
|
130
|
+
if (threads > 1 && lhsEval.nonZerosEstimate() * rhs.cols() > 20000) {
|
|
131
|
+
#pragma omp parallel for schedule(dynamic, (n + threads * 4 - 1) / (threads * 4)) num_threads(threads)
|
|
132
|
+
for (Index i = 0; i < n; ++i) processRow(lhsEval, rhs, res, alpha, i);
|
|
133
|
+
} else
|
|
134
134
|
#endif
|
|
135
135
|
{
|
|
136
|
-
for(Index i=0; i<n; ++i)
|
|
137
|
-
processRow(lhsEval, rhs, res, alpha, i);
|
|
136
|
+
for (Index i = 0; i < n; ++i) processRow(lhsEval, rhs, res, alpha, i);
|
|
138
137
|
}
|
|
139
138
|
}
|
|
140
139
|
|
|
141
|
-
static void processRow(const LhsEval& lhsEval, const DenseRhsType& rhs, Res& res, const typename Res::Scalar& alpha,
|
|
142
|
-
|
|
140
|
+
static void processRow(const LhsEval& lhsEval, const DenseRhsType& rhs, Res& res, const typename Res::Scalar& alpha,
|
|
141
|
+
Index i) {
|
|
143
142
|
typename Res::RowXpr res_i(res.row(i));
|
|
144
|
-
for(LhsInnerIterator it(lhsEval,i); it
|
|
145
|
-
res_i += (alpha*it.value()) * rhs.row(it.index());
|
|
143
|
+
for (LhsInnerIterator it(lhsEval, i); it; ++it) res_i += (alpha * it.value()) * rhs.row(it.index());
|
|
146
144
|
}
|
|
147
145
|
};
|
|
148
146
|
|
|
149
|
-
template<typename SparseLhsType, typename DenseRhsType, typename DenseResType>
|
|
150
|
-
struct sparse_time_dense_product_impl<SparseLhsType,DenseRhsType,DenseResType, typename DenseResType::Scalar,
|
|
151
|
-
{
|
|
152
|
-
typedef
|
|
153
|
-
typedef
|
|
154
|
-
typedef
|
|
147
|
+
template <typename SparseLhsType, typename DenseRhsType, typename DenseResType>
|
|
148
|
+
struct sparse_time_dense_product_impl<SparseLhsType, DenseRhsType, DenseResType, typename DenseResType::Scalar,
|
|
149
|
+
ColMajor, false> {
|
|
150
|
+
typedef internal::remove_all_t<SparseLhsType> Lhs;
|
|
151
|
+
typedef internal::remove_all_t<DenseRhsType> Rhs;
|
|
152
|
+
typedef internal::remove_all_t<DenseResType> Res;
|
|
155
153
|
typedef typename evaluator<Lhs>::InnerIterator LhsInnerIterator;
|
|
156
|
-
static void run(const SparseLhsType& lhs, const DenseRhsType& rhs, DenseResType& res,
|
|
157
|
-
|
|
154
|
+
static void run(const SparseLhsType& lhs, const DenseRhsType& rhs, DenseResType& res,
|
|
155
|
+
const typename Res::Scalar& alpha) {
|
|
158
156
|
evaluator<Lhs> lhsEval(lhs);
|
|
159
|
-
for(Index j=0; j<lhs.outerSize(); ++j)
|
|
160
|
-
{
|
|
157
|
+
for (Index j = 0; j < lhs.outerSize(); ++j) {
|
|
161
158
|
typename Rhs::ConstRowXpr rhs_j(rhs.row(j));
|
|
162
|
-
for(LhsInnerIterator it(lhsEval,j); it
|
|
163
|
-
res.row(it.index()) += (alpha*it.value()) * rhs_j;
|
|
159
|
+
for (LhsInnerIterator it(lhsEval, j); it; ++it) res.row(it.index()) += (alpha * it.value()) * rhs_j;
|
|
164
160
|
}
|
|
165
161
|
}
|
|
166
162
|
};
|
|
167
163
|
|
|
168
|
-
template<typename SparseLhsType, typename DenseRhsType, typename DenseResType,typename AlphaType>
|
|
169
|
-
inline void sparse_time_dense_product(const SparseLhsType& lhs, const DenseRhsType& rhs, DenseResType& res,
|
|
170
|
-
{
|
|
171
|
-
sparse_time_dense_product_impl<SparseLhsType,DenseRhsType,DenseResType, AlphaType>::run(lhs, rhs, res, alpha);
|
|
164
|
+
template <typename SparseLhsType, typename DenseRhsType, typename DenseResType, typename AlphaType>
|
|
165
|
+
inline void sparse_time_dense_product(const SparseLhsType& lhs, const DenseRhsType& rhs, DenseResType& res,
|
|
166
|
+
const AlphaType& alpha) {
|
|
167
|
+
sparse_time_dense_product_impl<SparseLhsType, DenseRhsType, DenseResType, AlphaType>::run(lhs, rhs, res, alpha);
|
|
172
168
|
}
|
|
173
169
|
|
|
174
|
-
}
|
|
170
|
+
} // end namespace internal
|
|
175
171
|
|
|
176
172
|
namespace internal {
|
|
177
173
|
|
|
178
|
-
template<typename Lhs, typename Rhs, int ProductType>
|
|
174
|
+
template <typename Lhs, typename Rhs, int ProductType>
|
|
179
175
|
struct generic_product_impl<Lhs, Rhs, SparseShape, DenseShape, ProductType>
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
typedef typename nested_eval<Lhs,((Rhs::Flags&RowMajorBit)==0) ? 1 : Rhs::ColsAtCompileTime>::type LhsNested;
|
|
188
|
-
typedef typename nested_eval<Rhs,((Lhs::Flags&RowMajorBit)==0) ? 1 : Dynamic>::type RhsNested;
|
|
176
|
+
: generic_product_impl_base<Lhs, Rhs, generic_product_impl<Lhs, Rhs, SparseShape, DenseShape, ProductType> > {
|
|
177
|
+
typedef typename Product<Lhs, Rhs>::Scalar Scalar;
|
|
178
|
+
|
|
179
|
+
template <typename Dest>
|
|
180
|
+
static void scaleAndAddTo(Dest& dst, const Lhs& lhs, const Rhs& rhs, const Scalar& alpha) {
|
|
181
|
+
typedef typename nested_eval<Lhs, ((Rhs::Flags & RowMajorBit) == 0) ? 1 : Rhs::ColsAtCompileTime>::type LhsNested;
|
|
182
|
+
typedef typename nested_eval<Rhs, ((Lhs::Flags & RowMajorBit) == 0) ? 1 : Dynamic>::type RhsNested;
|
|
189
183
|
LhsNested lhsNested(lhs);
|
|
190
184
|
RhsNested rhsNested(rhs);
|
|
191
185
|
internal::sparse_time_dense_product(lhsNested, rhsNested, dst, alpha);
|
|
192
186
|
}
|
|
193
187
|
};
|
|
194
188
|
|
|
195
|
-
template<typename Lhs, typename Rhs, int ProductType>
|
|
189
|
+
template <typename Lhs, typename Rhs, int ProductType>
|
|
196
190
|
struct generic_product_impl<Lhs, Rhs, SparseTriangularShape, DenseShape, ProductType>
|
|
197
|
-
|
|
198
|
-
{};
|
|
191
|
+
: generic_product_impl<Lhs, Rhs, SparseShape, DenseShape, ProductType> {};
|
|
199
192
|
|
|
200
|
-
template<typename Lhs, typename Rhs, int ProductType>
|
|
193
|
+
template <typename Lhs, typename Rhs, int ProductType>
|
|
201
194
|
struct generic_product_impl<Lhs, Rhs, DenseShape, SparseShape, ProductType>
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
typedef typename nested_eval<Rhs,((Lhs::Flags&RowMajorBit)==RowMajorBit) ? 1 : Lhs::RowsAtCompileTime>::type RhsNested;
|
|
195
|
+
: generic_product_impl_base<Lhs, Rhs, generic_product_impl<Lhs, Rhs, DenseShape, SparseShape, ProductType> > {
|
|
196
|
+
typedef typename Product<Lhs, Rhs>::Scalar Scalar;
|
|
197
|
+
|
|
198
|
+
template <typename Dst>
|
|
199
|
+
static void scaleAndAddTo(Dst& dst, const Lhs& lhs, const Rhs& rhs, const Scalar& alpha) {
|
|
200
|
+
typedef typename nested_eval<Lhs, ((Rhs::Flags & RowMajorBit) == 0) ? Dynamic : 1>::type LhsNested;
|
|
201
|
+
typedef typename nested_eval<Rhs, ((Lhs::Flags & RowMajorBit) == RowMajorBit) ? 1 : Lhs::RowsAtCompileTime>::type
|
|
202
|
+
RhsNested;
|
|
211
203
|
LhsNested lhsNested(lhs);
|
|
212
204
|
RhsNested rhsNested(rhs);
|
|
213
|
-
|
|
205
|
+
|
|
214
206
|
// transpose everything
|
|
215
207
|
Transpose<Dst> dstT(dst);
|
|
216
208
|
internal::sparse_time_dense_product(rhsNested.transpose(), lhsNested.transpose(), dstT, alpha);
|
|
217
209
|
}
|
|
218
210
|
};
|
|
219
211
|
|
|
220
|
-
template<typename Lhs, typename Rhs, int ProductType>
|
|
212
|
+
template <typename Lhs, typename Rhs, int ProductType>
|
|
221
213
|
struct generic_product_impl<Lhs, Rhs, DenseShape, SparseTriangularShape, ProductType>
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
typedef
|
|
230
|
-
|
|
231
|
-
typedef Product<LhsT,RhsT,DefaultProduct> ProdXprType;
|
|
232
|
-
|
|
214
|
+
: generic_product_impl<Lhs, Rhs, DenseShape, SparseShape, ProductType> {};
|
|
215
|
+
|
|
216
|
+
template <typename LhsT, typename RhsT, bool NeedToTranspose>
|
|
217
|
+
struct sparse_dense_outer_product_evaluator {
|
|
218
|
+
protected:
|
|
219
|
+
typedef std::conditional_t<NeedToTranspose, RhsT, LhsT> Lhs1;
|
|
220
|
+
typedef std::conditional_t<NeedToTranspose, LhsT, RhsT> ActualRhs;
|
|
221
|
+
typedef Product<LhsT, RhsT, DefaultProduct> ProdXprType;
|
|
222
|
+
|
|
233
223
|
// if the actual left-hand side is a dense vector,
|
|
234
224
|
// then build a sparse-view so that we can seamlessly iterate over it.
|
|
235
|
-
typedef
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
225
|
+
typedef std::conditional_t<is_same<typename internal::traits<Lhs1>::StorageKind, Sparse>::value, Lhs1,
|
|
226
|
+
SparseView<Lhs1> >
|
|
227
|
+
ActualLhs;
|
|
228
|
+
typedef std::conditional_t<is_same<typename internal::traits<Lhs1>::StorageKind, Sparse>::value, Lhs1 const&,
|
|
229
|
+
SparseView<Lhs1> >
|
|
230
|
+
LhsArg;
|
|
231
|
+
|
|
240
232
|
typedef evaluator<ActualLhs> LhsEval;
|
|
241
233
|
typedef evaluator<ActualRhs> RhsEval;
|
|
242
234
|
typedef typename evaluator<ActualLhs>::InnerIterator LhsIterator;
|
|
243
235
|
typedef typename ProdXprType::Scalar Scalar;
|
|
244
|
-
|
|
245
|
-
public:
|
|
246
|
-
enum {
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
m_outer(outer),
|
|
257
|
-
m_empty(false),
|
|
258
|
-
m_factor(get(xprEval.m_rhsXprImpl, outer, typename internal::traits<ActualRhs>::StorageKind() ))
|
|
259
|
-
{}
|
|
260
|
-
|
|
236
|
+
|
|
237
|
+
public:
|
|
238
|
+
enum { Flags = NeedToTranspose ? RowMajorBit : 0, CoeffReadCost = HugeCost };
|
|
239
|
+
|
|
240
|
+
class InnerIterator : public LhsIterator {
|
|
241
|
+
public:
|
|
242
|
+
InnerIterator(const sparse_dense_outer_product_evaluator& xprEval, Index outer)
|
|
243
|
+
: LhsIterator(xprEval.m_lhsXprImpl, 0),
|
|
244
|
+
m_outer(outer),
|
|
245
|
+
m_empty(false),
|
|
246
|
+
m_factor(get(xprEval.m_rhsXprImpl, outer, typename internal::traits<ActualRhs>::StorageKind())) {}
|
|
247
|
+
|
|
261
248
|
EIGEN_STRONG_INLINE Index outer() const { return m_outer; }
|
|
262
|
-
EIGEN_STRONG_INLINE Index row()
|
|
263
|
-
EIGEN_STRONG_INLINE Index col()
|
|
249
|
+
EIGEN_STRONG_INLINE Index row() const { return NeedToTranspose ? m_outer : LhsIterator::index(); }
|
|
250
|
+
EIGEN_STRONG_INLINE Index col() const { return NeedToTranspose ? LhsIterator::index() : m_outer; }
|
|
264
251
|
|
|
265
252
|
EIGEN_STRONG_INLINE Scalar value() const { return LhsIterator::value() * m_factor; }
|
|
266
253
|
EIGEN_STRONG_INLINE operator bool() const { return LhsIterator::operator bool() && (!m_empty); }
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
Scalar get(const RhsEval
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
Scalar get(const RhsEval &rhs, Index outer, Sparse = Sparse())
|
|
275
|
-
{
|
|
254
|
+
|
|
255
|
+
protected:
|
|
256
|
+
Scalar get(const RhsEval& rhs, Index outer, Dense = Dense()) const { return rhs.coeff(outer); }
|
|
257
|
+
|
|
258
|
+
Scalar get(const RhsEval& rhs, Index outer, Sparse = Sparse()) {
|
|
276
259
|
typename RhsEval::InnerIterator it(rhs, outer);
|
|
277
|
-
if (it && it.index()==0 && it.value()!=Scalar(0))
|
|
278
|
-
return it.value();
|
|
260
|
+
if (it && it.index() == 0 && it.value() != Scalar(0)) return it.value();
|
|
279
261
|
m_empty = true;
|
|
280
262
|
return Scalar(0);
|
|
281
263
|
}
|
|
282
|
-
|
|
264
|
+
|
|
283
265
|
Index m_outer;
|
|
284
266
|
bool m_empty;
|
|
285
267
|
Scalar m_factor;
|
|
286
268
|
};
|
|
287
|
-
|
|
288
|
-
sparse_dense_outer_product_evaluator(const Lhs1
|
|
289
|
-
|
|
290
|
-
{
|
|
269
|
+
|
|
270
|
+
sparse_dense_outer_product_evaluator(const Lhs1& lhs, const ActualRhs& rhs)
|
|
271
|
+
: m_lhs(lhs), m_lhsXprImpl(m_lhs), m_rhsXprImpl(rhs) {
|
|
291
272
|
EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost);
|
|
292
273
|
}
|
|
293
|
-
|
|
274
|
+
|
|
294
275
|
// transpose case
|
|
295
|
-
sparse_dense_outer_product_evaluator(const ActualRhs
|
|
296
|
-
|
|
297
|
-
{
|
|
276
|
+
sparse_dense_outer_product_evaluator(const ActualRhs& rhs, const Lhs1& lhs)
|
|
277
|
+
: m_lhs(lhs), m_lhsXprImpl(m_lhs), m_rhsXprImpl(rhs) {
|
|
298
278
|
EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost);
|
|
299
279
|
}
|
|
300
|
-
|
|
301
|
-
protected:
|
|
280
|
+
|
|
281
|
+
protected:
|
|
302
282
|
const LhsArg m_lhs;
|
|
303
283
|
evaluator<ActualLhs> m_lhsXprImpl;
|
|
304
284
|
evaluator<ActualRhs> m_rhsXprImpl;
|
|
305
285
|
};
|
|
306
286
|
|
|
307
287
|
// sparse * dense outer product
|
|
308
|
-
template<typename Lhs, typename Rhs>
|
|
288
|
+
template <typename Lhs, typename Rhs>
|
|
309
289
|
struct product_evaluator<Product<Lhs, Rhs, DefaultProduct>, OuterProduct, SparseShape, DenseShape>
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
290
|
+
: sparse_dense_outer_product_evaluator<Lhs, Rhs, Lhs::IsRowMajor> {
|
|
291
|
+
typedef sparse_dense_outer_product_evaluator<Lhs, Rhs, Lhs::IsRowMajor> Base;
|
|
292
|
+
|
|
314
293
|
typedef Product<Lhs, Rhs> XprType;
|
|
315
294
|
typedef typename XprType::PlainObject PlainObject;
|
|
316
295
|
|
|
317
|
-
explicit product_evaluator(const XprType& xpr)
|
|
318
|
-
: Base(xpr.lhs(), xpr.rhs())
|
|
319
|
-
{}
|
|
320
|
-
|
|
296
|
+
explicit product_evaluator(const XprType& xpr) : Base(xpr.lhs(), xpr.rhs()) {}
|
|
321
297
|
};
|
|
322
298
|
|
|
323
|
-
template<typename Lhs, typename Rhs>
|
|
299
|
+
template <typename Lhs, typename Rhs>
|
|
324
300
|
struct product_evaluator<Product<Lhs, Rhs, DefaultProduct>, OuterProduct, DenseShape, SparseShape>
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
301
|
+
: sparse_dense_outer_product_evaluator<Lhs, Rhs, Rhs::IsRowMajor> {
|
|
302
|
+
typedef sparse_dense_outer_product_evaluator<Lhs, Rhs, Rhs::IsRowMajor> Base;
|
|
303
|
+
|
|
329
304
|
typedef Product<Lhs, Rhs> XprType;
|
|
330
305
|
typedef typename XprType::PlainObject PlainObject;
|
|
331
306
|
|
|
332
|
-
explicit product_evaluator(const XprType& xpr)
|
|
333
|
-
: Base(xpr.lhs(), xpr.rhs())
|
|
334
|
-
{}
|
|
335
|
-
|
|
307
|
+
explicit product_evaluator(const XprType& xpr) : Base(xpr.lhs(), xpr.rhs()) {}
|
|
336
308
|
};
|
|
337
309
|
|
|
338
|
-
}
|
|
310
|
+
} // end namespace internal
|
|
339
311
|
|
|
340
|
-
}
|
|
312
|
+
} // end namespace Eigen
|
|
341
313
|
|
|
342
|
-
#endif
|
|
314
|
+
#endif // EIGEN_SPARSEDENSEPRODUCT_H
|