@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
|
@@ -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,239 +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
|
|
91
|
-
typedef typename
|
|
92
|
-
static void run(const SparseLhsType& lhs, const DenseRhsType& rhs, DenseResType& res, const AlphaType& alpha)
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
// typename Res::Scalar rhs_j = alpha * rhs.coeff(j,c);
|
|
100
|
-
typename ScalarBinaryOpTraits<AlphaType, typename Rhs::Scalar>::ReturnType rhs_j(alpha * rhs.coeff(j,c));
|
|
101
|
-
for(LhsInnerIterator it(lhsEval,j); it ;++it)
|
|
102
|
-
res.coeffRef(it.index(),c) += it.value() * rhs_j;
|
|
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;
|
|
99
|
+
typedef evaluator<Lhs> LhsEval;
|
|
100
|
+
typedef typename LhsEval::InnerIterator LhsInnerIterator;
|
|
101
|
+
static void run(const SparseLhsType& lhs, const DenseRhsType& rhs, DenseResType& res, const AlphaType& alpha) {
|
|
102
|
+
LhsEval lhsEval(lhs);
|
|
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;
|
|
103
108
|
}
|
|
104
109
|
}
|
|
105
110
|
}
|
|
106
111
|
};
|
|
107
112
|
|
|
108
|
-
template<typename SparseLhsType, typename DenseRhsType, typename DenseResType>
|
|
109
|
-
struct sparse_time_dense_product_impl<SparseLhsType,DenseRhsType,DenseResType, typename DenseResType::Scalar,
|
|
110
|
-
{
|
|
111
|
-
typedef
|
|
112
|
-
typedef
|
|
113
|
-
typedef
|
|
114
|
-
typedef
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
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;
|
|
119
|
+
typedef evaluator<Lhs> LhsEval;
|
|
120
|
+
typedef typename LhsEval::InnerIterator LhsInnerIterator;
|
|
121
|
+
static void run(const SparseLhsType& lhs, const DenseRhsType& rhs, DenseResType& res,
|
|
122
|
+
const typename Res::Scalar& alpha) {
|
|
123
|
+
Index n = lhs.rows();
|
|
124
|
+
LhsEval lhsEval(lhs);
|
|
125
|
+
|
|
126
|
+
#ifdef EIGEN_HAS_OPENMP
|
|
127
|
+
Index threads = Eigen::nbThreads();
|
|
128
|
+
// This 20000 threshold has been found experimentally on 2D and 3D Poisson problems.
|
|
129
|
+
// It basically represents the minimal amount of work to be done to be worth it.
|
|
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
|
+
#endif
|
|
119
135
|
{
|
|
120
|
-
|
|
121
|
-
for(LhsInnerIterator it(lhsEval,j); it ;++it)
|
|
122
|
-
res_j += (alpha*it.value()) * rhs.row(it.index());
|
|
136
|
+
for (Index i = 0; i < n; ++i) processRow(lhsEval, rhs, res, alpha, i);
|
|
123
137
|
}
|
|
124
138
|
}
|
|
139
|
+
|
|
140
|
+
static void processRow(const LhsEval& lhsEval, const DenseRhsType& rhs, Res& res, const typename Res::Scalar& alpha,
|
|
141
|
+
Index i) {
|
|
142
|
+
typename Res::RowXpr res_i(res.row(i));
|
|
143
|
+
for (LhsInnerIterator it(lhsEval, i); it; ++it) res_i += (alpha * it.value()) * rhs.row(it.index());
|
|
144
|
+
}
|
|
125
145
|
};
|
|
126
146
|
|
|
127
|
-
template<typename SparseLhsType, typename DenseRhsType, typename DenseResType>
|
|
128
|
-
struct sparse_time_dense_product_impl<SparseLhsType,DenseRhsType,DenseResType, typename DenseResType::Scalar,
|
|
129
|
-
{
|
|
130
|
-
typedef
|
|
131
|
-
typedef
|
|
132
|
-
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;
|
|
133
153
|
typedef typename evaluator<Lhs>::InnerIterator LhsInnerIterator;
|
|
134
|
-
static void run(const SparseLhsType& lhs, const DenseRhsType& rhs, DenseResType& res,
|
|
135
|
-
|
|
154
|
+
static void run(const SparseLhsType& lhs, const DenseRhsType& rhs, DenseResType& res,
|
|
155
|
+
const typename Res::Scalar& alpha) {
|
|
136
156
|
evaluator<Lhs> lhsEval(lhs);
|
|
137
|
-
for(Index j=0; j<lhs.outerSize(); ++j)
|
|
138
|
-
{
|
|
157
|
+
for (Index j = 0; j < lhs.outerSize(); ++j) {
|
|
139
158
|
typename Rhs::ConstRowXpr rhs_j(rhs.row(j));
|
|
140
|
-
for(LhsInnerIterator it(lhsEval,j); it
|
|
141
|
-
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;
|
|
142
160
|
}
|
|
143
161
|
}
|
|
144
162
|
};
|
|
145
163
|
|
|
146
|
-
template<typename SparseLhsType, typename DenseRhsType, typename DenseResType,typename AlphaType>
|
|
147
|
-
inline void sparse_time_dense_product(const SparseLhsType& lhs, const DenseRhsType& rhs, DenseResType& res,
|
|
148
|
-
{
|
|
149
|
-
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);
|
|
150
168
|
}
|
|
151
169
|
|
|
152
|
-
}
|
|
170
|
+
} // end namespace internal
|
|
153
171
|
|
|
154
172
|
namespace internal {
|
|
155
173
|
|
|
156
|
-
template<typename Lhs, typename Rhs, int ProductType>
|
|
174
|
+
template <typename Lhs, typename Rhs, int ProductType>
|
|
157
175
|
struct generic_product_impl<Lhs, Rhs, SparseShape, DenseShape, ProductType>
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
typedef typename nested_eval<Lhs,((Rhs::Flags&RowMajorBit)==0) ? 1 : Rhs::ColsAtCompileTime>::type LhsNested;
|
|
166
|
-
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;
|
|
167
183
|
LhsNested lhsNested(lhs);
|
|
168
184
|
RhsNested rhsNested(rhs);
|
|
169
185
|
internal::sparse_time_dense_product(lhsNested, rhsNested, dst, alpha);
|
|
170
186
|
}
|
|
171
187
|
};
|
|
172
188
|
|
|
173
|
-
template<typename Lhs, typename Rhs, int ProductType>
|
|
189
|
+
template <typename Lhs, typename Rhs, int ProductType>
|
|
174
190
|
struct generic_product_impl<Lhs, Rhs, SparseTriangularShape, DenseShape, ProductType>
|
|
175
|
-
|
|
176
|
-
{};
|
|
191
|
+
: generic_product_impl<Lhs, Rhs, SparseShape, DenseShape, ProductType> {};
|
|
177
192
|
|
|
178
|
-
template<typename Lhs, typename Rhs, int ProductType>
|
|
193
|
+
template <typename Lhs, typename Rhs, int ProductType>
|
|
179
194
|
struct generic_product_impl<Lhs, Rhs, DenseShape, SparseShape, ProductType>
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
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;
|
|
189
203
|
LhsNested lhsNested(lhs);
|
|
190
204
|
RhsNested rhsNested(rhs);
|
|
191
|
-
|
|
205
|
+
|
|
192
206
|
// transpose everything
|
|
193
207
|
Transpose<Dst> dstT(dst);
|
|
194
208
|
internal::sparse_time_dense_product(rhsNested.transpose(), lhsNested.transpose(), dstT, alpha);
|
|
195
209
|
}
|
|
196
210
|
};
|
|
197
211
|
|
|
198
|
-
template<typename Lhs, typename Rhs, int ProductType>
|
|
212
|
+
template <typename Lhs, typename Rhs, int ProductType>
|
|
199
213
|
struct generic_product_impl<Lhs, Rhs, DenseShape, SparseTriangularShape, ProductType>
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
typedef
|
|
208
|
-
|
|
209
|
-
typedef Product<LhsT,RhsT,DefaultProduct> ProdXprType;
|
|
210
|
-
|
|
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
|
+
|
|
211
223
|
// if the actual left-hand side is a dense vector,
|
|
212
224
|
// then build a sparse-view so that we can seamlessly iterate over it.
|
|
213
|
-
typedef
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
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
|
+
|
|
218
232
|
typedef evaluator<ActualLhs> LhsEval;
|
|
219
233
|
typedef evaluator<ActualRhs> RhsEval;
|
|
220
234
|
typedef typename evaluator<ActualLhs>::InnerIterator LhsIterator;
|
|
221
235
|
typedef typename ProdXprType::Scalar Scalar;
|
|
222
|
-
|
|
223
|
-
public:
|
|
224
|
-
enum {
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
m_outer(outer),
|
|
235
|
-
m_empty(false),
|
|
236
|
-
m_factor(get(xprEval.m_rhsXprImpl, outer, typename internal::traits<ActualRhs>::StorageKind() ))
|
|
237
|
-
{}
|
|
238
|
-
|
|
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
|
+
|
|
239
248
|
EIGEN_STRONG_INLINE Index outer() const { return m_outer; }
|
|
240
|
-
EIGEN_STRONG_INLINE Index row()
|
|
241
|
-
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; }
|
|
242
251
|
|
|
243
252
|
EIGEN_STRONG_INLINE Scalar value() const { return LhsIterator::value() * m_factor; }
|
|
244
253
|
EIGEN_STRONG_INLINE operator bool() const { return LhsIterator::operator bool() && (!m_empty); }
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
Scalar get(const RhsEval
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
Scalar get(const RhsEval &rhs, Index outer, Sparse = Sparse())
|
|
253
|
-
{
|
|
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()) {
|
|
254
259
|
typename RhsEval::InnerIterator it(rhs, outer);
|
|
255
|
-
if (it && it.index()==0 && it.value()!=Scalar(0))
|
|
256
|
-
return it.value();
|
|
260
|
+
if (it && it.index() == 0 && it.value() != Scalar(0)) return it.value();
|
|
257
261
|
m_empty = true;
|
|
258
262
|
return Scalar(0);
|
|
259
263
|
}
|
|
260
|
-
|
|
264
|
+
|
|
261
265
|
Index m_outer;
|
|
262
266
|
bool m_empty;
|
|
263
267
|
Scalar m_factor;
|
|
264
268
|
};
|
|
265
|
-
|
|
266
|
-
sparse_dense_outer_product_evaluator(const Lhs1
|
|
267
|
-
|
|
268
|
-
{
|
|
269
|
+
|
|
270
|
+
sparse_dense_outer_product_evaluator(const Lhs1& lhs, const ActualRhs& rhs)
|
|
271
|
+
: m_lhs(lhs), m_lhsXprImpl(m_lhs), m_rhsXprImpl(rhs) {
|
|
269
272
|
EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost);
|
|
270
273
|
}
|
|
271
|
-
|
|
274
|
+
|
|
272
275
|
// transpose case
|
|
273
|
-
sparse_dense_outer_product_evaluator(const ActualRhs
|
|
274
|
-
|
|
275
|
-
{
|
|
276
|
+
sparse_dense_outer_product_evaluator(const ActualRhs& rhs, const Lhs1& lhs)
|
|
277
|
+
: m_lhs(lhs), m_lhsXprImpl(m_lhs), m_rhsXprImpl(rhs) {
|
|
276
278
|
EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost);
|
|
277
279
|
}
|
|
278
|
-
|
|
279
|
-
protected:
|
|
280
|
+
|
|
281
|
+
protected:
|
|
280
282
|
const LhsArg m_lhs;
|
|
281
283
|
evaluator<ActualLhs> m_lhsXprImpl;
|
|
282
284
|
evaluator<ActualRhs> m_rhsXprImpl;
|
|
283
285
|
};
|
|
284
286
|
|
|
285
287
|
// sparse * dense outer product
|
|
286
|
-
template<typename Lhs, typename Rhs>
|
|
288
|
+
template <typename Lhs, typename Rhs>
|
|
287
289
|
struct product_evaluator<Product<Lhs, Rhs, DefaultProduct>, OuterProduct, SparseShape, DenseShape>
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
290
|
+
: sparse_dense_outer_product_evaluator<Lhs, Rhs, Lhs::IsRowMajor> {
|
|
291
|
+
typedef sparse_dense_outer_product_evaluator<Lhs, Rhs, Lhs::IsRowMajor> Base;
|
|
292
|
+
|
|
292
293
|
typedef Product<Lhs, Rhs> XprType;
|
|
293
294
|
typedef typename XprType::PlainObject PlainObject;
|
|
294
295
|
|
|
295
|
-
explicit product_evaluator(const XprType& xpr)
|
|
296
|
-
: Base(xpr.lhs(), xpr.rhs())
|
|
297
|
-
{}
|
|
298
|
-
|
|
296
|
+
explicit product_evaluator(const XprType& xpr) : Base(xpr.lhs(), xpr.rhs()) {}
|
|
299
297
|
};
|
|
300
298
|
|
|
301
|
-
template<typename Lhs, typename Rhs>
|
|
299
|
+
template <typename Lhs, typename Rhs>
|
|
302
300
|
struct product_evaluator<Product<Lhs, Rhs, DefaultProduct>, OuterProduct, DenseShape, SparseShape>
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
301
|
+
: sparse_dense_outer_product_evaluator<Lhs, Rhs, Rhs::IsRowMajor> {
|
|
302
|
+
typedef sparse_dense_outer_product_evaluator<Lhs, Rhs, Rhs::IsRowMajor> Base;
|
|
303
|
+
|
|
307
304
|
typedef Product<Lhs, Rhs> XprType;
|
|
308
305
|
typedef typename XprType::PlainObject PlainObject;
|
|
309
306
|
|
|
310
|
-
explicit product_evaluator(const XprType& xpr)
|
|
311
|
-
: Base(xpr.lhs(), xpr.rhs())
|
|
312
|
-
{}
|
|
313
|
-
|
|
307
|
+
explicit product_evaluator(const XprType& xpr) : Base(xpr.lhs(), xpr.rhs()) {}
|
|
314
308
|
};
|
|
315
309
|
|
|
316
|
-
}
|
|
310
|
+
} // end namespace internal
|
|
317
311
|
|
|
318
|
-
}
|
|
312
|
+
} // end namespace Eigen
|
|
319
313
|
|
|
320
|
-
#endif
|
|
314
|
+
#endif // EIGEN_SPARSEDENSEPRODUCT_H
|