@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,27 +10,30 @@
|
|
|
10
10
|
#ifndef EIGEN_CONSERVATIVESPARSESPARSEPRODUCT_H
|
|
11
11
|
#define EIGEN_CONSERVATIVESPARSESPARSEPRODUCT_H
|
|
12
12
|
|
|
13
|
+
// IWYU pragma: private
|
|
14
|
+
#include "./InternalHeaderCheck.h"
|
|
15
|
+
|
|
13
16
|
namespace Eigen {
|
|
14
17
|
|
|
15
18
|
namespace internal {
|
|
16
19
|
|
|
17
|
-
template<typename Lhs, typename Rhs, typename ResultType>
|
|
18
|
-
static void conservative_sparse_sparse_product_impl(const Lhs& lhs, const Rhs& rhs, ResultType& res,
|
|
19
|
-
{
|
|
20
|
-
typedef typename
|
|
21
|
-
typedef typename
|
|
22
|
-
typedef typename
|
|
20
|
+
template <typename Lhs, typename Rhs, typename ResultType>
|
|
21
|
+
static void conservative_sparse_sparse_product_impl(const Lhs& lhs, const Rhs& rhs, ResultType& res,
|
|
22
|
+
bool sortedInsertion = false) {
|
|
23
|
+
typedef typename remove_all_t<Lhs>::Scalar LhsScalar;
|
|
24
|
+
typedef typename remove_all_t<Rhs>::Scalar RhsScalar;
|
|
25
|
+
typedef typename remove_all_t<ResultType>::Scalar ResScalar;
|
|
23
26
|
|
|
24
27
|
// make sure to call innerSize/outerSize since we fake the storage order.
|
|
25
28
|
Index rows = lhs.innerSize();
|
|
26
29
|
Index cols = rhs.outerSize();
|
|
27
30
|
eigen_assert(lhs.outerSize() == rhs.innerSize());
|
|
28
31
|
|
|
29
|
-
ei_declare_aligned_stack_constructed_variable(bool,
|
|
30
|
-
ei_declare_aligned_stack_constructed_variable(ResScalar, values,
|
|
31
|
-
ei_declare_aligned_stack_constructed_variable(Index,
|
|
32
|
+
ei_declare_aligned_stack_constructed_variable(bool, mask, rows, 0);
|
|
33
|
+
ei_declare_aligned_stack_constructed_variable(ResScalar, values, rows, 0);
|
|
34
|
+
ei_declare_aligned_stack_constructed_variable(Index, indices, rows, 0);
|
|
32
35
|
|
|
33
|
-
std::memset(mask,0,sizeof(bool)*rows);
|
|
36
|
+
std::memset(mask, 0, sizeof(bool) * rows);
|
|
34
37
|
|
|
35
38
|
evaluator<Lhs> lhsEval(lhs);
|
|
36
39
|
evaluator<Rhs> rhsEval(rhs);
|
|
@@ -46,45 +49,35 @@ static void conservative_sparse_sparse_product_impl(const Lhs& lhs, const Rhs& r
|
|
|
46
49
|
res.setZero();
|
|
47
50
|
res.reserve(Index(estimated_nnz_prod));
|
|
48
51
|
// we compute each column of the result, one after the other
|
|
49
|
-
for (Index j=0; j<cols; ++j)
|
|
50
|
-
{
|
|
51
|
-
|
|
52
|
+
for (Index j = 0; j < cols; ++j) {
|
|
52
53
|
res.startVec(j);
|
|
53
54
|
Index nnz = 0;
|
|
54
|
-
for (typename evaluator<Rhs>::InnerIterator rhsIt(rhsEval, j); rhsIt; ++rhsIt)
|
|
55
|
-
{
|
|
55
|
+
for (typename evaluator<Rhs>::InnerIterator rhsIt(rhsEval, j); rhsIt; ++rhsIt) {
|
|
56
56
|
RhsScalar y = rhsIt.value();
|
|
57
57
|
Index k = rhsIt.index();
|
|
58
|
-
for (typename evaluator<Lhs>::InnerIterator lhsIt(lhsEval, k); lhsIt; ++lhsIt)
|
|
59
|
-
{
|
|
58
|
+
for (typename evaluator<Lhs>::InnerIterator lhsIt(lhsEval, k); lhsIt; ++lhsIt) {
|
|
60
59
|
Index i = lhsIt.index();
|
|
61
60
|
LhsScalar x = lhsIt.value();
|
|
62
|
-
if(!mask[i])
|
|
63
|
-
{
|
|
61
|
+
if (!mask[i]) {
|
|
64
62
|
mask[i] = true;
|
|
65
63
|
values[i] = x * y;
|
|
66
64
|
indices[nnz] = i;
|
|
67
65
|
++nnz;
|
|
68
|
-
}
|
|
69
|
-
else
|
|
66
|
+
} else
|
|
70
67
|
values[i] += x * y;
|
|
71
68
|
}
|
|
72
69
|
}
|
|
73
|
-
if(!sortedInsertion)
|
|
74
|
-
{
|
|
70
|
+
if (!sortedInsertion) {
|
|
75
71
|
// unordered insertion
|
|
76
|
-
for(Index k=0; k<nnz; ++k)
|
|
77
|
-
{
|
|
72
|
+
for (Index k = 0; k < nnz; ++k) {
|
|
78
73
|
Index i = indices[k];
|
|
79
|
-
res.insertBackByOuterInnerUnordered(j,i) = values[i];
|
|
74
|
+
res.insertBackByOuterInnerUnordered(j, i) = values[i];
|
|
80
75
|
mask[i] = false;
|
|
81
76
|
}
|
|
82
|
-
}
|
|
83
|
-
else
|
|
84
|
-
{
|
|
77
|
+
} else {
|
|
85
78
|
// alternative ordered insertion code:
|
|
86
|
-
const Index t200 = rows/11;
|
|
87
|
-
const Index t = (rows*100)/139;
|
|
79
|
+
const Index t200 = rows / 11; // 11 == (log2(200)*1.39)
|
|
80
|
+
const Index t = (rows * 100) / 139;
|
|
88
81
|
|
|
89
82
|
// FIXME reserve nnz non zeros
|
|
90
83
|
// FIXME implement faster sorting algorithms for very small nnz
|
|
@@ -92,25 +85,19 @@ static void conservative_sparse_sparse_product_impl(const Lhs& lhs, const Rhs& r
|
|
|
92
85
|
// otherwise => loop through the entire vector
|
|
93
86
|
// In order to avoid to perform an expensive log2 when the
|
|
94
87
|
// result is clearly very sparse we use a linear bound up to 200.
|
|
95
|
-
if((nnz<200 && nnz<t200) || nnz * numext::log2(int(nnz)) < t)
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
for(Index k=0; k<nnz; ++k)
|
|
99
|
-
{
|
|
88
|
+
if ((nnz < 200 && nnz < t200) || nnz * numext::log2(int(nnz)) < t) {
|
|
89
|
+
if (nnz > 1) std::sort(indices, indices + nnz);
|
|
90
|
+
for (Index k = 0; k < nnz; ++k) {
|
|
100
91
|
Index i = indices[k];
|
|
101
|
-
res.insertBackByOuterInner(j,i) = values[i];
|
|
92
|
+
res.insertBackByOuterInner(j, i) = values[i];
|
|
102
93
|
mask[i] = false;
|
|
103
94
|
}
|
|
104
|
-
}
|
|
105
|
-
else
|
|
106
|
-
{
|
|
95
|
+
} else {
|
|
107
96
|
// dense path
|
|
108
|
-
for(Index i=0; i<rows; ++i)
|
|
109
|
-
|
|
110
|
-
if(mask[i])
|
|
111
|
-
{
|
|
97
|
+
for (Index i = 0; i < rows; ++i) {
|
|
98
|
+
if (mask[i]) {
|
|
112
99
|
mask[i] = false;
|
|
113
|
-
res.insertBackByOuterInner(j,i) = values[i];
|
|
100
|
+
res.insertBackByOuterInner(j, i) = values[i];
|
|
114
101
|
}
|
|
115
102
|
}
|
|
116
103
|
}
|
|
@@ -119,234 +106,203 @@ static void conservative_sparse_sparse_product_impl(const Lhs& lhs, const Rhs& r
|
|
|
119
106
|
res.finalize();
|
|
120
107
|
}
|
|
121
108
|
|
|
122
|
-
|
|
123
|
-
} // end namespace internal
|
|
109
|
+
} // end namespace internal
|
|
124
110
|
|
|
125
111
|
namespace internal {
|
|
126
112
|
|
|
127
|
-
template
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
113
|
+
// Helper template to generate new sparse matrix types
|
|
114
|
+
template <class Source, int Order>
|
|
115
|
+
using WithStorageOrder = SparseMatrix<typename Source::Scalar, Order, typename Source::StorageIndex>;
|
|
116
|
+
|
|
117
|
+
template <typename Lhs, typename Rhs, typename ResultType,
|
|
118
|
+
int LhsStorageOrder = (traits<Lhs>::Flags & RowMajorBit) ? RowMajor : ColMajor,
|
|
119
|
+
int RhsStorageOrder = (traits<Rhs>::Flags & RowMajorBit) ? RowMajor : ColMajor,
|
|
120
|
+
int ResStorageOrder = (traits<ResultType>::Flags & RowMajorBit) ? RowMajor : ColMajor>
|
|
131
121
|
struct conservative_sparse_sparse_product_selector;
|
|
132
122
|
|
|
133
|
-
template<typename Lhs, typename Rhs, typename ResultType>
|
|
134
|
-
struct conservative_sparse_sparse_product_selector<Lhs,Rhs,ResultType,ColMajor,ColMajor,ColMajor>
|
|
135
|
-
|
|
136
|
-
typedef typename remove_all<Lhs>::type LhsCleaned;
|
|
123
|
+
template <typename Lhs, typename Rhs, typename ResultType>
|
|
124
|
+
struct conservative_sparse_sparse_product_selector<Lhs, Rhs, ResultType, ColMajor, ColMajor, ColMajor> {
|
|
125
|
+
typedef remove_all_t<Lhs> LhsCleaned;
|
|
137
126
|
typedef typename LhsCleaned::Scalar Scalar;
|
|
138
127
|
|
|
139
|
-
static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res)
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
typedef SparseMatrix<typename ResultType::Scalar,ColMajor,typename ResultType::StorageIndex> ColMajorMatrixAux;
|
|
143
|
-
typedef typename sparse_eval<ColMajorMatrixAux,ResultType::RowsAtCompileTime,ResultType::ColsAtCompileTime,ColMajorMatrixAux::Flags>::type ColMajorMatrix;
|
|
128
|
+
static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res) {
|
|
129
|
+
using RowMajorMatrix = WithStorageOrder<ResultType, RowMajor>;
|
|
130
|
+
using ColMajorMatrixAux = WithStorageOrder<ResultType, ColMajor>;
|
|
144
131
|
|
|
145
132
|
// If the result is tall and thin (in the extreme case a column vector)
|
|
146
133
|
// then it is faster to sort the coefficients inplace instead of transposing twice.
|
|
147
134
|
// FIXME, the following heuristic is probably not very good.
|
|
148
|
-
if(lhs.rows()>rhs.cols())
|
|
149
|
-
|
|
150
|
-
|
|
135
|
+
if (lhs.rows() > rhs.cols()) {
|
|
136
|
+
using ColMajorMatrix = typename sparse_eval<ColMajorMatrixAux, ResultType::RowsAtCompileTime,
|
|
137
|
+
ResultType::ColsAtCompileTime, ColMajorMatrixAux::Flags>::type;
|
|
138
|
+
ColMajorMatrix resCol(lhs.rows(), rhs.cols());
|
|
151
139
|
// perform sorted insertion
|
|
152
|
-
internal::conservative_sparse_sparse_product_impl<Lhs,Rhs,ColMajorMatrix>(lhs, rhs, resCol, true);
|
|
140
|
+
internal::conservative_sparse_sparse_product_impl<Lhs, Rhs, ColMajorMatrix>(lhs, rhs, resCol, true);
|
|
153
141
|
res = resCol.markAsRValue();
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
{
|
|
157
|
-
ColMajorMatrixAux resCol(lhs.rows(),rhs.cols());
|
|
142
|
+
} else {
|
|
143
|
+
ColMajorMatrixAux resCol(lhs.rows(), rhs.cols());
|
|
158
144
|
// resort to transpose to sort the entries
|
|
159
|
-
internal::conservative_sparse_sparse_product_impl<Lhs,Rhs,ColMajorMatrixAux>(lhs, rhs, resCol, false);
|
|
145
|
+
internal::conservative_sparse_sparse_product_impl<Lhs, Rhs, ColMajorMatrixAux>(lhs, rhs, resCol, false);
|
|
160
146
|
RowMajorMatrix resRow(resCol);
|
|
161
147
|
res = resRow.markAsRValue();
|
|
162
148
|
}
|
|
163
149
|
}
|
|
164
150
|
};
|
|
165
151
|
|
|
166
|
-
template<typename Lhs, typename Rhs, typename ResultType>
|
|
167
|
-
struct conservative_sparse_sparse_product_selector<Lhs,Rhs,ResultType,RowMajor,ColMajor,ColMajor>
|
|
168
|
-
{
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
typedef SparseMatrix<typename Rhs::Scalar,RowMajor,typename ResultType::StorageIndex> RowMajorRhs;
|
|
172
|
-
typedef SparseMatrix<typename ResultType::Scalar,RowMajor,typename ResultType::StorageIndex> RowMajorRes;
|
|
152
|
+
template <typename Lhs, typename Rhs, typename ResultType>
|
|
153
|
+
struct conservative_sparse_sparse_product_selector<Lhs, Rhs, ResultType, RowMajor, ColMajor, ColMajor> {
|
|
154
|
+
static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res) {
|
|
155
|
+
using RowMajorRhs = WithStorageOrder<Rhs, RowMajor>;
|
|
156
|
+
using RowMajorRes = WithStorageOrder<ResultType, RowMajor>;
|
|
173
157
|
RowMajorRhs rhsRow = rhs;
|
|
174
158
|
RowMajorRes resRow(lhs.rows(), rhs.cols());
|
|
175
|
-
internal::conservative_sparse_sparse_product_impl<RowMajorRhs,Lhs,RowMajorRes>(rhsRow, lhs, resRow);
|
|
159
|
+
internal::conservative_sparse_sparse_product_impl<RowMajorRhs, Lhs, RowMajorRes>(rhsRow, lhs, resRow);
|
|
176
160
|
res = resRow;
|
|
177
161
|
}
|
|
178
162
|
};
|
|
179
163
|
|
|
180
|
-
template<typename Lhs, typename Rhs, typename ResultType>
|
|
181
|
-
struct conservative_sparse_sparse_product_selector<Lhs,Rhs,ResultType,ColMajor,RowMajor,ColMajor>
|
|
182
|
-
{
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
typedef SparseMatrix<typename Lhs::Scalar,RowMajor,typename ResultType::StorageIndex> RowMajorLhs;
|
|
186
|
-
typedef SparseMatrix<typename ResultType::Scalar,RowMajor,typename ResultType::StorageIndex> RowMajorRes;
|
|
164
|
+
template <typename Lhs, typename Rhs, typename ResultType>
|
|
165
|
+
struct conservative_sparse_sparse_product_selector<Lhs, Rhs, ResultType, ColMajor, RowMajor, ColMajor> {
|
|
166
|
+
static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res) {
|
|
167
|
+
using RowMajorLhs = WithStorageOrder<Lhs, RowMajor>;
|
|
168
|
+
using RowMajorRes = WithStorageOrder<ResultType, RowMajor>;
|
|
187
169
|
RowMajorLhs lhsRow = lhs;
|
|
188
170
|
RowMajorRes resRow(lhs.rows(), rhs.cols());
|
|
189
|
-
internal::conservative_sparse_sparse_product_impl<Rhs,RowMajorLhs,RowMajorRes>(rhs, lhsRow, resRow);
|
|
171
|
+
internal::conservative_sparse_sparse_product_impl<Rhs, RowMajorLhs, RowMajorRes>(rhs, lhsRow, resRow);
|
|
190
172
|
res = resRow;
|
|
191
173
|
}
|
|
192
174
|
};
|
|
193
175
|
|
|
194
|
-
template<typename Lhs, typename Rhs, typename ResultType>
|
|
195
|
-
struct conservative_sparse_sparse_product_selector<Lhs,Rhs,ResultType,RowMajor,RowMajor,ColMajor>
|
|
196
|
-
{
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
RowMajorMatrix resRow(lhs.rows(), rhs.cols());
|
|
201
|
-
internal::conservative_sparse_sparse_product_impl<Rhs,Lhs,RowMajorMatrix>(rhs, lhs, resRow);
|
|
176
|
+
template <typename Lhs, typename Rhs, typename ResultType>
|
|
177
|
+
struct conservative_sparse_sparse_product_selector<Lhs, Rhs, ResultType, RowMajor, RowMajor, ColMajor> {
|
|
178
|
+
static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res) {
|
|
179
|
+
using RowMajorRes = WithStorageOrder<ResultType, RowMajor>;
|
|
180
|
+
RowMajorRes resRow(lhs.rows(), rhs.cols());
|
|
181
|
+
internal::conservative_sparse_sparse_product_impl<Rhs, Lhs, RowMajorRes>(rhs, lhs, resRow);
|
|
202
182
|
res = resRow;
|
|
203
183
|
}
|
|
204
184
|
};
|
|
205
185
|
|
|
186
|
+
template <typename Lhs, typename Rhs, typename ResultType>
|
|
187
|
+
struct conservative_sparse_sparse_product_selector<Lhs, Rhs, ResultType, ColMajor, ColMajor, RowMajor> {
|
|
188
|
+
typedef typename traits<remove_all_t<Lhs>>::Scalar Scalar;
|
|
206
189
|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res)
|
|
213
|
-
{
|
|
214
|
-
typedef SparseMatrix<typename ResultType::Scalar,ColMajor,typename ResultType::StorageIndex> ColMajorMatrix;
|
|
215
|
-
ColMajorMatrix resCol(lhs.rows(), rhs.cols());
|
|
216
|
-
internal::conservative_sparse_sparse_product_impl<Lhs,Rhs,ColMajorMatrix>(lhs, rhs, resCol);
|
|
190
|
+
static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res) {
|
|
191
|
+
using ColMajorRes = WithStorageOrder<ResultType, ColMajor>;
|
|
192
|
+
ColMajorRes resCol(lhs.rows(), rhs.cols());
|
|
193
|
+
internal::conservative_sparse_sparse_product_impl<Lhs, Rhs, ColMajorRes>(lhs, rhs, resCol);
|
|
217
194
|
res = resCol;
|
|
218
195
|
}
|
|
219
196
|
};
|
|
220
197
|
|
|
221
|
-
template<typename Lhs, typename Rhs, typename ResultType>
|
|
222
|
-
struct conservative_sparse_sparse_product_selector<Lhs,Rhs,ResultType,RowMajor,ColMajor,RowMajor>
|
|
223
|
-
{
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
typedef SparseMatrix<typename Lhs::Scalar,ColMajor,typename ResultType::StorageIndex> ColMajorLhs;
|
|
227
|
-
typedef SparseMatrix<typename ResultType::Scalar,ColMajor,typename ResultType::StorageIndex> ColMajorRes;
|
|
198
|
+
template <typename Lhs, typename Rhs, typename ResultType>
|
|
199
|
+
struct conservative_sparse_sparse_product_selector<Lhs, Rhs, ResultType, RowMajor, ColMajor, RowMajor> {
|
|
200
|
+
static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res) {
|
|
201
|
+
using ColMajorLhs = WithStorageOrder<Lhs, ColMajor>;
|
|
202
|
+
using ColMajorRes = WithStorageOrder<ResultType, ColMajor>;
|
|
228
203
|
ColMajorLhs lhsCol = lhs;
|
|
229
204
|
ColMajorRes resCol(lhs.rows(), rhs.cols());
|
|
230
|
-
internal::conservative_sparse_sparse_product_impl<ColMajorLhs,Rhs,ColMajorRes>(lhsCol, rhs, resCol);
|
|
205
|
+
internal::conservative_sparse_sparse_product_impl<ColMajorLhs, Rhs, ColMajorRes>(lhsCol, rhs, resCol);
|
|
231
206
|
res = resCol;
|
|
232
207
|
}
|
|
233
208
|
};
|
|
234
209
|
|
|
235
|
-
template<typename Lhs, typename Rhs, typename ResultType>
|
|
236
|
-
struct conservative_sparse_sparse_product_selector<Lhs,Rhs,ResultType,ColMajor,RowMajor,RowMajor>
|
|
237
|
-
{
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
typedef SparseMatrix<typename Rhs::Scalar,ColMajor,typename ResultType::StorageIndex> ColMajorRhs;
|
|
241
|
-
typedef SparseMatrix<typename ResultType::Scalar,ColMajor,typename ResultType::StorageIndex> ColMajorRes;
|
|
210
|
+
template <typename Lhs, typename Rhs, typename ResultType>
|
|
211
|
+
struct conservative_sparse_sparse_product_selector<Lhs, Rhs, ResultType, ColMajor, RowMajor, RowMajor> {
|
|
212
|
+
static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res) {
|
|
213
|
+
using ColMajorRhs = WithStorageOrder<Rhs, ColMajor>;
|
|
214
|
+
using ColMajorRes = WithStorageOrder<ResultType, ColMajor>;
|
|
242
215
|
ColMajorRhs rhsCol = rhs;
|
|
243
216
|
ColMajorRes resCol(lhs.rows(), rhs.cols());
|
|
244
|
-
internal::conservative_sparse_sparse_product_impl<Lhs,ColMajorRhs,ColMajorRes>(lhs, rhsCol, resCol);
|
|
217
|
+
internal::conservative_sparse_sparse_product_impl<Lhs, ColMajorRhs, ColMajorRes>(lhs, rhsCol, resCol);
|
|
245
218
|
res = resCol;
|
|
246
219
|
}
|
|
247
220
|
};
|
|
248
221
|
|
|
249
|
-
template<typename Lhs, typename Rhs, typename ResultType>
|
|
250
|
-
struct conservative_sparse_sparse_product_selector<Lhs,Rhs,ResultType,RowMajor,RowMajor,RowMajor>
|
|
251
|
-
{
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
RowMajorMatrix resRow(lhs.rows(),rhs.cols());
|
|
257
|
-
internal::conservative_sparse_sparse_product_impl<Rhs,Lhs,RowMajorMatrix>(rhs, lhs, resRow);
|
|
222
|
+
template <typename Lhs, typename Rhs, typename ResultType>
|
|
223
|
+
struct conservative_sparse_sparse_product_selector<Lhs, Rhs, ResultType, RowMajor, RowMajor, RowMajor> {
|
|
224
|
+
static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res) {
|
|
225
|
+
using ColMajorRes = WithStorageOrder<ResultType, ColMajor>;
|
|
226
|
+
using RowMajorRes = WithStorageOrder<ResultType, RowMajor>;
|
|
227
|
+
RowMajorRes resRow(lhs.rows(), rhs.cols());
|
|
228
|
+
internal::conservative_sparse_sparse_product_impl<Rhs, Lhs, RowMajorRes>(rhs, lhs, resRow);
|
|
258
229
|
// sort the non zeros:
|
|
259
|
-
|
|
230
|
+
ColMajorRes resCol(resRow);
|
|
260
231
|
res = resCol;
|
|
261
232
|
}
|
|
262
233
|
};
|
|
263
234
|
|
|
264
|
-
}
|
|
265
|
-
|
|
235
|
+
} // end namespace internal
|
|
266
236
|
|
|
267
237
|
namespace internal {
|
|
268
238
|
|
|
269
|
-
template<typename Lhs, typename Rhs, typename ResultType>
|
|
270
|
-
static void sparse_sparse_to_dense_product_impl(const Lhs& lhs, const Rhs& rhs, ResultType& res)
|
|
271
|
-
|
|
272
|
-
typedef typename
|
|
273
|
-
typedef typename remove_all<Rhs>::type::Scalar RhsScalar;
|
|
239
|
+
template <typename Lhs, typename Rhs, typename ResultType>
|
|
240
|
+
static void sparse_sparse_to_dense_product_impl(const Lhs& lhs, const Rhs& rhs, ResultType& res) {
|
|
241
|
+
typedef typename remove_all_t<Lhs>::Scalar LhsScalar;
|
|
242
|
+
typedef typename remove_all_t<Rhs>::Scalar RhsScalar;
|
|
274
243
|
Index cols = rhs.outerSize();
|
|
275
244
|
eigen_assert(lhs.outerSize() == rhs.innerSize());
|
|
276
245
|
|
|
277
246
|
evaluator<Lhs> lhsEval(lhs);
|
|
278
247
|
evaluator<Rhs> rhsEval(rhs);
|
|
279
248
|
|
|
280
|
-
for (Index j=0; j<cols; ++j)
|
|
281
|
-
|
|
282
|
-
for (typename evaluator<Rhs>::InnerIterator rhsIt(rhsEval, j); rhsIt; ++rhsIt)
|
|
283
|
-
{
|
|
249
|
+
for (Index j = 0; j < cols; ++j) {
|
|
250
|
+
for (typename evaluator<Rhs>::InnerIterator rhsIt(rhsEval, j); rhsIt; ++rhsIt) {
|
|
284
251
|
RhsScalar y = rhsIt.value();
|
|
285
252
|
Index k = rhsIt.index();
|
|
286
|
-
for (typename evaluator<Lhs>::InnerIterator lhsIt(lhsEval, k); lhsIt; ++lhsIt)
|
|
287
|
-
{
|
|
253
|
+
for (typename evaluator<Lhs>::InnerIterator lhsIt(lhsEval, k); lhsIt; ++lhsIt) {
|
|
288
254
|
Index i = lhsIt.index();
|
|
289
255
|
LhsScalar x = lhsIt.value();
|
|
290
|
-
res.coeffRef(i,j) += x * y;
|
|
256
|
+
res.coeffRef(i, j) += x * y;
|
|
291
257
|
}
|
|
292
258
|
}
|
|
293
259
|
}
|
|
294
260
|
}
|
|
295
261
|
|
|
296
|
-
|
|
297
|
-
} // end namespace internal
|
|
262
|
+
} // end namespace internal
|
|
298
263
|
|
|
299
264
|
namespace internal {
|
|
300
265
|
|
|
301
|
-
template<typename Lhs, typename Rhs, typename ResultType,
|
|
302
|
-
|
|
303
|
-
|
|
266
|
+
template <typename Lhs, typename Rhs, typename ResultType,
|
|
267
|
+
int LhsStorageOrder = (traits<Lhs>::Flags & RowMajorBit) ? RowMajor : ColMajor,
|
|
268
|
+
int RhsStorageOrder = (traits<Rhs>::Flags & RowMajorBit) ? RowMajor : ColMajor>
|
|
304
269
|
struct sparse_sparse_to_dense_product_selector;
|
|
305
270
|
|
|
306
|
-
template<typename Lhs, typename Rhs, typename ResultType>
|
|
307
|
-
struct sparse_sparse_to_dense_product_selector<Lhs,Rhs,ResultType,ColMajor,ColMajor>
|
|
308
|
-
{
|
|
309
|
-
|
|
310
|
-
{
|
|
311
|
-
internal::sparse_sparse_to_dense_product_impl<Lhs,Rhs,ResultType>(lhs, rhs, res);
|
|
271
|
+
template <typename Lhs, typename Rhs, typename ResultType>
|
|
272
|
+
struct sparse_sparse_to_dense_product_selector<Lhs, Rhs, ResultType, ColMajor, ColMajor> {
|
|
273
|
+
static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res) {
|
|
274
|
+
internal::sparse_sparse_to_dense_product_impl<Lhs, Rhs, ResultType>(lhs, rhs, res);
|
|
312
275
|
}
|
|
313
276
|
};
|
|
314
277
|
|
|
315
|
-
template<typename Lhs, typename Rhs, typename ResultType>
|
|
316
|
-
struct sparse_sparse_to_dense_product_selector<Lhs,Rhs,ResultType,RowMajor,ColMajor>
|
|
317
|
-
{
|
|
318
|
-
|
|
319
|
-
{
|
|
320
|
-
typedef SparseMatrix<typename Lhs::Scalar,ColMajor,typename ResultType::StorageIndex> ColMajorLhs;
|
|
278
|
+
template <typename Lhs, typename Rhs, typename ResultType>
|
|
279
|
+
struct sparse_sparse_to_dense_product_selector<Lhs, Rhs, ResultType, RowMajor, ColMajor> {
|
|
280
|
+
static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res) {
|
|
281
|
+
using ColMajorLhs = WithStorageOrder<Lhs, ColMajor>;
|
|
321
282
|
ColMajorLhs lhsCol(lhs);
|
|
322
|
-
internal::sparse_sparse_to_dense_product_impl<ColMajorLhs,Rhs,ResultType>(lhsCol, rhs, res);
|
|
283
|
+
internal::sparse_sparse_to_dense_product_impl<ColMajorLhs, Rhs, ResultType>(lhsCol, rhs, res);
|
|
323
284
|
}
|
|
324
285
|
};
|
|
325
286
|
|
|
326
|
-
template<typename Lhs, typename Rhs, typename ResultType>
|
|
327
|
-
struct sparse_sparse_to_dense_product_selector<Lhs,Rhs,ResultType,ColMajor,RowMajor>
|
|
328
|
-
{
|
|
329
|
-
|
|
330
|
-
{
|
|
331
|
-
typedef SparseMatrix<typename Rhs::Scalar,ColMajor,typename ResultType::StorageIndex> ColMajorRhs;
|
|
287
|
+
template <typename Lhs, typename Rhs, typename ResultType>
|
|
288
|
+
struct sparse_sparse_to_dense_product_selector<Lhs, Rhs, ResultType, ColMajor, RowMajor> {
|
|
289
|
+
static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res) {
|
|
290
|
+
using ColMajorRhs = WithStorageOrder<Rhs, ColMajor>;
|
|
332
291
|
ColMajorRhs rhsCol(rhs);
|
|
333
|
-
internal::sparse_sparse_to_dense_product_impl<Lhs,ColMajorRhs,ResultType>(lhs, rhsCol, res);
|
|
292
|
+
internal::sparse_sparse_to_dense_product_impl<Lhs, ColMajorRhs, ResultType>(lhs, rhsCol, res);
|
|
334
293
|
}
|
|
335
294
|
};
|
|
336
295
|
|
|
337
|
-
template<typename Lhs, typename Rhs, typename ResultType>
|
|
338
|
-
struct sparse_sparse_to_dense_product_selector<Lhs,Rhs,ResultType,RowMajor,RowMajor>
|
|
339
|
-
{
|
|
340
|
-
static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res)
|
|
341
|
-
{
|
|
296
|
+
template <typename Lhs, typename Rhs, typename ResultType>
|
|
297
|
+
struct sparse_sparse_to_dense_product_selector<Lhs, Rhs, ResultType, RowMajor, RowMajor> {
|
|
298
|
+
static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res) {
|
|
342
299
|
Transpose<ResultType> trRes(res);
|
|
343
|
-
internal::sparse_sparse_to_dense_product_impl<Rhs,Lhs,Transpose<ResultType
|
|
300
|
+
internal::sparse_sparse_to_dense_product_impl<Rhs, Lhs, Transpose<ResultType>>(rhs, lhs, trRes);
|
|
344
301
|
}
|
|
345
302
|
};
|
|
346
303
|
|
|
304
|
+
} // end namespace internal
|
|
347
305
|
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
} // end namespace Eigen
|
|
306
|
+
} // end namespace Eigen
|
|
351
307
|
|
|
352
|
-
#endif
|
|
308
|
+
#endif // EIGEN_CONSERVATIVESPARSESPARSEPRODUCT_H
|