@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,115 +10,106 @@
|
|
|
10
10
|
#ifndef EIGEN_SPARSESOLVERBASE_H
|
|
11
11
|
#define EIGEN_SPARSESOLVERBASE_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
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
template<typename Decomposition, typename Rhs, typename Dest>
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
EIGEN_STATIC_ASSERT((Dest::Flags&RowMajorBit)==0,THIS_METHOD_IS_ONLY_FOR_COLUMN_MAJOR_MATRICES);
|
|
20
|
+
/** \internal
|
|
21
|
+
* Helper functions to solve with a sparse right-hand-side and result.
|
|
22
|
+
* The rhs is decomposed into small vertical panels which are solved through dense temporaries.
|
|
23
|
+
*/
|
|
24
|
+
template <typename Decomposition, typename Rhs, typename Dest>
|
|
25
|
+
std::enable_if_t<Rhs::ColsAtCompileTime != 1 && Dest::ColsAtCompileTime != 1> solve_sparse_through_dense_panels(
|
|
26
|
+
const Decomposition& dec, const Rhs& rhs, Dest& dest) {
|
|
27
|
+
EIGEN_STATIC_ASSERT((Dest::Flags & RowMajorBit) == 0, THIS_METHOD_IS_ONLY_FOR_COLUMN_MAJOR_MATRICES);
|
|
26
28
|
typedef typename Dest::Scalar DestScalar;
|
|
27
29
|
// we process the sparse rhs per block of NbColsAtOnce columns temporarily stored into a dense matrix.
|
|
28
30
|
static const Index NbColsAtOnce = 4;
|
|
29
31
|
Index rhsCols = rhs.cols();
|
|
30
32
|
Index size = rhs.rows();
|
|
31
33
|
// the temporary matrices do not need more columns than NbColsAtOnce:
|
|
32
|
-
Index tmpCols = (std::min)(rhsCols, NbColsAtOnce);
|
|
33
|
-
Eigen::Matrix<DestScalar,Dynamic,Dynamic> tmp(size,tmpCols);
|
|
34
|
-
Eigen::Matrix<DestScalar,Dynamic,Dynamic> tmpX(size,tmpCols);
|
|
35
|
-
for(Index k=0; k<rhsCols; k+=NbColsAtOnce)
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
tmp.leftCols(actualCols) = rhs.middleCols(k,actualCols);
|
|
34
|
+
Index tmpCols = (std::min)(rhsCols, NbColsAtOnce);
|
|
35
|
+
Eigen::Matrix<DestScalar, Dynamic, Dynamic> tmp(size, tmpCols);
|
|
36
|
+
Eigen::Matrix<DestScalar, Dynamic, Dynamic> tmpX(size, tmpCols);
|
|
37
|
+
for (Index k = 0; k < rhsCols; k += NbColsAtOnce) {
|
|
38
|
+
Index actualCols = std::min<Index>(rhsCols - k, NbColsAtOnce);
|
|
39
|
+
tmp.leftCols(actualCols) = rhs.middleCols(k, actualCols);
|
|
39
40
|
tmpX.leftCols(actualCols) = dec.solve(tmp.leftCols(actualCols));
|
|
40
|
-
dest.middleCols(k,actualCols) = tmpX.leftCols(actualCols).sparseView();
|
|
41
|
+
dest.middleCols(k, actualCols) = tmpX.leftCols(actualCols).sparseView();
|
|
41
42
|
}
|
|
42
43
|
}
|
|
43
44
|
|
|
44
45
|
// Overload for vector as rhs
|
|
45
|
-
template<typename Decomposition, typename Rhs, typename Dest>
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
{
|
|
46
|
+
template <typename Decomposition, typename Rhs, typename Dest>
|
|
47
|
+
std::enable_if_t<Rhs::ColsAtCompileTime == 1 || Dest::ColsAtCompileTime == 1> solve_sparse_through_dense_panels(
|
|
48
|
+
const Decomposition& dec, const Rhs& rhs, Dest& dest) {
|
|
49
49
|
typedef typename Dest::Scalar DestScalar;
|
|
50
50
|
Index size = rhs.rows();
|
|
51
|
-
Eigen::Matrix<DestScalar,Dynamic,1> rhs_dense(rhs);
|
|
52
|
-
Eigen::Matrix<DestScalar,Dynamic,1> dest_dense(size);
|
|
51
|
+
Eigen::Matrix<DestScalar, Dynamic, 1> rhs_dense(rhs);
|
|
52
|
+
Eigen::Matrix<DestScalar, Dynamic, 1> dest_dense(size);
|
|
53
53
|
dest_dense = dec.solve(rhs_dense);
|
|
54
54
|
dest = dest_dense.sparseView();
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
}
|
|
57
|
+
} // end namespace internal
|
|
58
58
|
|
|
59
59
|
/** \class SparseSolverBase
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
template<typename Derived>
|
|
67
|
-
class SparseSolverBase : internal::noncopyable
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
void _solve_impl(const SparseMatrixBase<Rhs> &b, SparseMatrixBase<Dest> &dest) const
|
|
112
|
-
{
|
|
113
|
-
internal::solve_sparse_through_dense_panels(derived(), b.derived(), dest.derived());
|
|
114
|
-
}
|
|
115
|
-
#endif // EIGEN_PARSED_BY_DOXYGEN
|
|
116
|
-
|
|
117
|
-
protected:
|
|
118
|
-
|
|
119
|
-
mutable bool m_isInitialized;
|
|
60
|
+
* \ingroup SparseCore_Module
|
|
61
|
+
* \brief A base class for sparse solvers
|
|
62
|
+
*
|
|
63
|
+
* \tparam Derived the actual type of the solver.
|
|
64
|
+
*
|
|
65
|
+
*/
|
|
66
|
+
template <typename Derived>
|
|
67
|
+
class SparseSolverBase : internal::noncopyable {
|
|
68
|
+
public:
|
|
69
|
+
/** Default constructor */
|
|
70
|
+
SparseSolverBase() : m_isInitialized(false) {}
|
|
71
|
+
|
|
72
|
+
SparseSolverBase(SparseSolverBase&& other) : internal::noncopyable{}, m_isInitialized{other.m_isInitialized} {}
|
|
73
|
+
|
|
74
|
+
~SparseSolverBase() {}
|
|
75
|
+
|
|
76
|
+
Derived& derived() { return *static_cast<Derived*>(this); }
|
|
77
|
+
const Derived& derived() const { return *static_cast<const Derived*>(this); }
|
|
78
|
+
|
|
79
|
+
/** \returns an expression of the solution x of \f$ A x = b \f$ using the current decomposition of A.
|
|
80
|
+
*
|
|
81
|
+
* \sa compute()
|
|
82
|
+
*/
|
|
83
|
+
template <typename Rhs>
|
|
84
|
+
inline const Solve<Derived, Rhs> solve(const MatrixBase<Rhs>& b) const {
|
|
85
|
+
eigen_assert(m_isInitialized && "Solver is not initialized.");
|
|
86
|
+
eigen_assert(derived().rows() == b.rows() && "solve(): invalid number of rows of the right hand side matrix b");
|
|
87
|
+
return Solve<Derived, Rhs>(derived(), b.derived());
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/** \returns an expression of the solution x of \f$ A x = b \f$ using the current decomposition of A.
|
|
91
|
+
*
|
|
92
|
+
* \sa compute()
|
|
93
|
+
*/
|
|
94
|
+
template <typename Rhs>
|
|
95
|
+
inline const Solve<Derived, Rhs> solve(const SparseMatrixBase<Rhs>& b) const {
|
|
96
|
+
eigen_assert(m_isInitialized && "Solver is not initialized.");
|
|
97
|
+
eigen_assert(derived().rows() == b.rows() && "solve(): invalid number of rows of the right hand side matrix b");
|
|
98
|
+
return Solve<Derived, Rhs>(derived(), b.derived());
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
102
|
+
/** \internal default implementation of solving with a sparse rhs */
|
|
103
|
+
template <typename Rhs, typename Dest>
|
|
104
|
+
void _solve_impl(const SparseMatrixBase<Rhs>& b, SparseMatrixBase<Dest>& dest) const {
|
|
105
|
+
internal::solve_sparse_through_dense_panels(derived(), b.derived(), dest.derived());
|
|
106
|
+
}
|
|
107
|
+
#endif // EIGEN_PARSED_BY_DOXYGEN
|
|
108
|
+
|
|
109
|
+
protected:
|
|
110
|
+
mutable bool m_isInitialized;
|
|
120
111
|
};
|
|
121
112
|
|
|
122
|
-
}
|
|
113
|
+
} // end namespace Eigen
|
|
123
114
|
|
|
124
|
-
#endif
|
|
115
|
+
#endif // EIGEN_SPARSESOLVERBASE_H
|
|
@@ -10,39 +10,41 @@
|
|
|
10
10
|
#ifndef EIGEN_SPARSESPARSEPRODUCTWITHPRUNING_H
|
|
11
11
|
#define EIGEN_SPARSESPARSEPRODUCTWITHPRUNING_H
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
// IWYU pragma: private
|
|
14
|
+
#include "./InternalHeaderCheck.h"
|
|
14
15
|
|
|
15
|
-
namespace
|
|
16
|
+
namespace Eigen {
|
|
16
17
|
|
|
18
|
+
namespace internal {
|
|
17
19
|
|
|
18
20
|
// perform a pseudo in-place sparse * sparse product assuming all matrices are col major
|
|
19
|
-
template<typename Lhs, typename Rhs, typename ResultType>
|
|
20
|
-
static void sparse_sparse_product_with_pruning_impl(const Lhs& lhs, const Rhs& rhs, ResultType& res,
|
|
21
|
-
{
|
|
21
|
+
template <typename Lhs, typename Rhs, typename ResultType>
|
|
22
|
+
static void sparse_sparse_product_with_pruning_impl(const Lhs& lhs, const Rhs& rhs, ResultType& res,
|
|
23
|
+
const typename ResultType::RealScalar& tolerance) {
|
|
22
24
|
// return sparse_sparse_product_with_pruning_impl2(lhs,rhs,res);
|
|
23
25
|
|
|
24
|
-
typedef typename
|
|
25
|
-
typedef typename
|
|
26
|
-
typedef typename
|
|
26
|
+
typedef typename remove_all_t<Rhs>::Scalar RhsScalar;
|
|
27
|
+
typedef typename remove_all_t<ResultType>::Scalar ResScalar;
|
|
28
|
+
typedef typename remove_all_t<Lhs>::StorageIndex StorageIndex;
|
|
27
29
|
|
|
28
30
|
// make sure to call innerSize/outerSize since we fake the storage order.
|
|
29
31
|
Index rows = lhs.innerSize();
|
|
30
32
|
Index cols = rhs.outerSize();
|
|
31
|
-
//Index size = lhs.outerSize();
|
|
33
|
+
// Index size = lhs.outerSize();
|
|
32
34
|
eigen_assert(lhs.outerSize() == rhs.innerSize());
|
|
33
35
|
|
|
34
36
|
// allocate a temporary buffer
|
|
35
|
-
AmbiVector<ResScalar,StorageIndex> tempVector(rows);
|
|
37
|
+
AmbiVector<ResScalar, StorageIndex> tempVector(rows);
|
|
36
38
|
|
|
37
39
|
// mimics a resizeByInnerOuter:
|
|
38
|
-
if(ResultType::IsRowMajor)
|
|
40
|
+
if (ResultType::IsRowMajor)
|
|
39
41
|
res.resize(cols, rows);
|
|
40
42
|
else
|
|
41
43
|
res.resize(rows, cols);
|
|
42
|
-
|
|
44
|
+
|
|
43
45
|
evaluator<Lhs> lhsEval(lhs);
|
|
44
46
|
evaluator<Rhs> rhsEval(rhs);
|
|
45
|
-
|
|
47
|
+
|
|
46
48
|
// estimate the number of non zero entries
|
|
47
49
|
// given a rhs column containing Y non zeros, we assume that the respective Y columns
|
|
48
50
|
// of the lhs differs in average of one non zeros, thus the number of non zeros for
|
|
@@ -52,147 +54,131 @@ static void sparse_sparse_product_with_pruning_impl(const Lhs& lhs, const Rhs& r
|
|
|
52
54
|
Index estimated_nnz_prod = lhsEval.nonZerosEstimate() + rhsEval.nonZerosEstimate();
|
|
53
55
|
|
|
54
56
|
res.reserve(estimated_nnz_prod);
|
|
55
|
-
double ratioColRes = double(estimated_nnz_prod)/(double(lhs.rows())*double(rhs.cols()));
|
|
56
|
-
for (Index j=0; j<cols; ++j)
|
|
57
|
-
{
|
|
57
|
+
double ratioColRes = double(estimated_nnz_prod) / (double(lhs.rows()) * double(rhs.cols()));
|
|
58
|
+
for (Index j = 0; j < cols; ++j) {
|
|
58
59
|
// FIXME:
|
|
59
|
-
//double ratioColRes = (double(rhs.innerVector(j).nonZeros()) +
|
|
60
|
+
// double ratioColRes = (double(rhs.innerVector(j).nonZeros()) +
|
|
61
|
+
// double(lhs.nonZeros())/double(lhs.cols()))/double(lhs.rows());
|
|
60
62
|
// let's do a more accurate determination of the nnz ratio for the current column j of res
|
|
61
63
|
tempVector.init(ratioColRes);
|
|
62
64
|
tempVector.setZero();
|
|
63
|
-
for (typename evaluator<Rhs>::InnerIterator rhsIt(rhsEval, j); rhsIt; ++rhsIt)
|
|
64
|
-
{
|
|
65
|
+
for (typename evaluator<Rhs>::InnerIterator rhsIt(rhsEval, j); rhsIt; ++rhsIt) {
|
|
65
66
|
// FIXME should be written like this: tmp += rhsIt.value() * lhs.col(rhsIt.index())
|
|
66
67
|
tempVector.restart();
|
|
67
68
|
RhsScalar x = rhsIt.value();
|
|
68
|
-
for (typename evaluator<Lhs>::InnerIterator lhsIt(lhsEval, rhsIt.index()); lhsIt; ++lhsIt)
|
|
69
|
-
{
|
|
69
|
+
for (typename evaluator<Lhs>::InnerIterator lhsIt(lhsEval, rhsIt.index()); lhsIt; ++lhsIt) {
|
|
70
70
|
tempVector.coeffRef(lhsIt.index()) += lhsIt.value() * x;
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
73
|
res.startVec(j);
|
|
74
|
-
for (typename AmbiVector<ResScalar,StorageIndex>::Iterator it(tempVector,tolerance); it; ++it)
|
|
75
|
-
res.insertBackByOuterInner(j,it.index()) = it.value();
|
|
74
|
+
for (typename AmbiVector<ResScalar, StorageIndex>::Iterator it(tempVector, tolerance); it; ++it)
|
|
75
|
+
res.insertBackByOuterInner(j, it.index()) = it.value();
|
|
76
76
|
}
|
|
77
77
|
res.finalize();
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
-
template<typename Lhs, typename Rhs, typename ResultType,
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
int ResStorageOrder = traits<ResultType>::Flags&RowMajorBit>
|
|
80
|
+
template <typename Lhs, typename Rhs, typename ResultType, int LhsStorageOrder = traits<Lhs>::Flags & RowMajorBit,
|
|
81
|
+
int RhsStorageOrder = traits<Rhs>::Flags & RowMajorBit,
|
|
82
|
+
int ResStorageOrder = traits<ResultType>::Flags & RowMajorBit>
|
|
84
83
|
struct sparse_sparse_product_with_pruning_selector;
|
|
85
84
|
|
|
86
|
-
template<typename Lhs, typename Rhs, typename ResultType>
|
|
87
|
-
struct sparse_sparse_product_with_pruning_selector<Lhs,Rhs,ResultType,ColMajor,ColMajor,ColMajor>
|
|
88
|
-
{
|
|
85
|
+
template <typename Lhs, typename Rhs, typename ResultType>
|
|
86
|
+
struct sparse_sparse_product_with_pruning_selector<Lhs, Rhs, ResultType, ColMajor, ColMajor, ColMajor> {
|
|
89
87
|
typedef typename ResultType::RealScalar RealScalar;
|
|
90
88
|
|
|
91
|
-
static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res, const RealScalar& tolerance)
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
res.swap(_res);
|
|
89
|
+
static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res, const RealScalar& tolerance) {
|
|
90
|
+
remove_all_t<ResultType> res_(res.rows(), res.cols());
|
|
91
|
+
internal::sparse_sparse_product_with_pruning_impl<Lhs, Rhs, ResultType>(lhs, rhs, res_, tolerance);
|
|
92
|
+
res.swap(res_);
|
|
96
93
|
}
|
|
97
94
|
};
|
|
98
95
|
|
|
99
|
-
template<typename Lhs, typename Rhs, typename ResultType>
|
|
100
|
-
struct sparse_sparse_product_with_pruning_selector<Lhs,Rhs,ResultType,ColMajor,ColMajor,RowMajor>
|
|
101
|
-
{
|
|
96
|
+
template <typename Lhs, typename Rhs, typename ResultType>
|
|
97
|
+
struct sparse_sparse_product_with_pruning_selector<Lhs, Rhs, ResultType, ColMajor, ColMajor, RowMajor> {
|
|
102
98
|
typedef typename ResultType::RealScalar RealScalar;
|
|
103
|
-
static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res, const RealScalar& tolerance)
|
|
104
|
-
{
|
|
99
|
+
static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res, const RealScalar& tolerance) {
|
|
105
100
|
// we need a col-major matrix to hold the result
|
|
106
|
-
typedef SparseMatrix<typename ResultType::Scalar,ColMajor,typename ResultType::StorageIndex> SparseTemporaryType;
|
|
107
|
-
SparseTemporaryType
|
|
108
|
-
internal::sparse_sparse_product_with_pruning_impl<Lhs,Rhs,SparseTemporaryType>(lhs, rhs,
|
|
109
|
-
res =
|
|
101
|
+
typedef SparseMatrix<typename ResultType::Scalar, ColMajor, typename ResultType::StorageIndex> SparseTemporaryType;
|
|
102
|
+
SparseTemporaryType res_(res.rows(), res.cols());
|
|
103
|
+
internal::sparse_sparse_product_with_pruning_impl<Lhs, Rhs, SparseTemporaryType>(lhs, rhs, res_, tolerance);
|
|
104
|
+
res = res_;
|
|
110
105
|
}
|
|
111
106
|
};
|
|
112
107
|
|
|
113
|
-
template<typename Lhs, typename Rhs, typename ResultType>
|
|
114
|
-
struct sparse_sparse_product_with_pruning_selector<Lhs,Rhs,ResultType,RowMajor,RowMajor,RowMajor>
|
|
115
|
-
{
|
|
108
|
+
template <typename Lhs, typename Rhs, typename ResultType>
|
|
109
|
+
struct sparse_sparse_product_with_pruning_selector<Lhs, Rhs, ResultType, RowMajor, RowMajor, RowMajor> {
|
|
116
110
|
typedef typename ResultType::RealScalar RealScalar;
|
|
117
|
-
static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res, const RealScalar& tolerance)
|
|
118
|
-
{
|
|
111
|
+
static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res, const RealScalar& tolerance) {
|
|
119
112
|
// let's transpose the product to get a column x column product
|
|
120
|
-
|
|
121
|
-
internal::sparse_sparse_product_with_pruning_impl<Rhs,Lhs,ResultType>(rhs, lhs,
|
|
122
|
-
res.swap(
|
|
113
|
+
remove_all_t<ResultType> res_(res.rows(), res.cols());
|
|
114
|
+
internal::sparse_sparse_product_with_pruning_impl<Rhs, Lhs, ResultType>(rhs, lhs, res_, tolerance);
|
|
115
|
+
res.swap(res_);
|
|
123
116
|
}
|
|
124
117
|
};
|
|
125
118
|
|
|
126
|
-
template<typename Lhs, typename Rhs, typename ResultType>
|
|
127
|
-
struct sparse_sparse_product_with_pruning_selector<Lhs,Rhs,ResultType,RowMajor,RowMajor,ColMajor>
|
|
128
|
-
{
|
|
119
|
+
template <typename Lhs, typename Rhs, typename ResultType>
|
|
120
|
+
struct sparse_sparse_product_with_pruning_selector<Lhs, Rhs, ResultType, RowMajor, RowMajor, ColMajor> {
|
|
129
121
|
typedef typename ResultType::RealScalar RealScalar;
|
|
130
|
-
static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res, const RealScalar& tolerance)
|
|
131
|
-
|
|
132
|
-
typedef SparseMatrix<typename
|
|
133
|
-
typedef SparseMatrix<typename Rhs::Scalar,ColMajor,typename Lhs::StorageIndex> ColMajorMatrixRhs;
|
|
122
|
+
static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res, const RealScalar& tolerance) {
|
|
123
|
+
typedef SparseMatrix<typename Lhs::Scalar, ColMajor, typename Lhs::StorageIndex> ColMajorMatrixLhs;
|
|
124
|
+
typedef SparseMatrix<typename Rhs::Scalar, ColMajor, typename Lhs::StorageIndex> ColMajorMatrixRhs;
|
|
134
125
|
ColMajorMatrixLhs colLhs(lhs);
|
|
135
126
|
ColMajorMatrixRhs colRhs(rhs);
|
|
136
|
-
internal::sparse_sparse_product_with_pruning_impl<ColMajorMatrixLhs,ColMajorMatrixRhs,ResultType>(colLhs, colRhs,
|
|
127
|
+
internal::sparse_sparse_product_with_pruning_impl<ColMajorMatrixLhs, ColMajorMatrixRhs, ResultType>(colLhs, colRhs,
|
|
128
|
+
res, tolerance);
|
|
137
129
|
|
|
138
130
|
// let's transpose the product to get a column x column product
|
|
139
|
-
// typedef SparseMatrix<typename ResultType::Scalar> SparseTemporaryType;
|
|
140
|
-
// SparseTemporaryType
|
|
141
|
-
// sparse_sparse_product_with_pruning_impl<Rhs,Lhs,SparseTemporaryType>(rhs, lhs,
|
|
142
|
-
// res =
|
|
131
|
+
// typedef SparseMatrix<typename ResultType::Scalar> SparseTemporaryType;
|
|
132
|
+
// SparseTemporaryType res_(res.cols(), res.rows());
|
|
133
|
+
// sparse_sparse_product_with_pruning_impl<Rhs,Lhs,SparseTemporaryType>(rhs, lhs, res_);
|
|
134
|
+
// res = res_.transpose();
|
|
143
135
|
}
|
|
144
136
|
};
|
|
145
137
|
|
|
146
|
-
template<typename Lhs, typename Rhs, typename ResultType>
|
|
147
|
-
struct sparse_sparse_product_with_pruning_selector<Lhs,Rhs,ResultType,ColMajor,RowMajor,RowMajor>
|
|
148
|
-
{
|
|
138
|
+
template <typename Lhs, typename Rhs, typename ResultType>
|
|
139
|
+
struct sparse_sparse_product_with_pruning_selector<Lhs, Rhs, ResultType, ColMajor, RowMajor, RowMajor> {
|
|
149
140
|
typedef typename ResultType::RealScalar RealScalar;
|
|
150
|
-
static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res, const RealScalar& tolerance)
|
|
151
|
-
|
|
152
|
-
typedef SparseMatrix<typename Lhs::Scalar,RowMajor,typename Lhs::StorageIndex> RowMajorMatrixLhs;
|
|
141
|
+
static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res, const RealScalar& tolerance) {
|
|
142
|
+
typedef SparseMatrix<typename Lhs::Scalar, RowMajor, typename Lhs::StorageIndex> RowMajorMatrixLhs;
|
|
153
143
|
RowMajorMatrixLhs rowLhs(lhs);
|
|
154
|
-
sparse_sparse_product_with_pruning_selector<RowMajorMatrixLhs,Rhs,ResultType,RowMajor,RowMajor>(rowLhs,rhs,
|
|
144
|
+
sparse_sparse_product_with_pruning_selector<RowMajorMatrixLhs, Rhs, ResultType, RowMajor, RowMajor>(rowLhs, rhs,
|
|
145
|
+
res, tolerance);
|
|
155
146
|
}
|
|
156
147
|
};
|
|
157
148
|
|
|
158
|
-
template<typename Lhs, typename Rhs, typename ResultType>
|
|
159
|
-
struct sparse_sparse_product_with_pruning_selector<Lhs,Rhs,ResultType,RowMajor,ColMajor,RowMajor>
|
|
160
|
-
{
|
|
149
|
+
template <typename Lhs, typename Rhs, typename ResultType>
|
|
150
|
+
struct sparse_sparse_product_with_pruning_selector<Lhs, Rhs, ResultType, RowMajor, ColMajor, RowMajor> {
|
|
161
151
|
typedef typename ResultType::RealScalar RealScalar;
|
|
162
|
-
static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res, const RealScalar& tolerance)
|
|
163
|
-
|
|
164
|
-
typedef SparseMatrix<typename Rhs::Scalar,RowMajor,typename Lhs::StorageIndex> RowMajorMatrixRhs;
|
|
152
|
+
static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res, const RealScalar& tolerance) {
|
|
153
|
+
typedef SparseMatrix<typename Rhs::Scalar, RowMajor, typename Lhs::StorageIndex> RowMajorMatrixRhs;
|
|
165
154
|
RowMajorMatrixRhs rowRhs(rhs);
|
|
166
|
-
sparse_sparse_product_with_pruning_selector<Lhs,RowMajorMatrixRhs,ResultType,RowMajor,RowMajor,RowMajor>(
|
|
155
|
+
sparse_sparse_product_with_pruning_selector<Lhs, RowMajorMatrixRhs, ResultType, RowMajor, RowMajor, RowMajor>(
|
|
156
|
+
lhs, rowRhs, res, tolerance);
|
|
167
157
|
}
|
|
168
158
|
};
|
|
169
159
|
|
|
170
|
-
template<typename Lhs, typename Rhs, typename ResultType>
|
|
171
|
-
struct sparse_sparse_product_with_pruning_selector<Lhs,Rhs,ResultType,ColMajor,RowMajor,ColMajor>
|
|
172
|
-
{
|
|
160
|
+
template <typename Lhs, typename Rhs, typename ResultType>
|
|
161
|
+
struct sparse_sparse_product_with_pruning_selector<Lhs, Rhs, ResultType, ColMajor, RowMajor, ColMajor> {
|
|
173
162
|
typedef typename ResultType::RealScalar RealScalar;
|
|
174
|
-
static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res, const RealScalar& tolerance)
|
|
175
|
-
|
|
176
|
-
typedef SparseMatrix<typename Rhs::Scalar,ColMajor,typename Lhs::StorageIndex> ColMajorMatrixRhs;
|
|
163
|
+
static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res, const RealScalar& tolerance) {
|
|
164
|
+
typedef SparseMatrix<typename Rhs::Scalar, ColMajor, typename Lhs::StorageIndex> ColMajorMatrixRhs;
|
|
177
165
|
ColMajorMatrixRhs colRhs(rhs);
|
|
178
|
-
internal::sparse_sparse_product_with_pruning_impl<Lhs,ColMajorMatrixRhs,ResultType>(lhs, colRhs, res, tolerance);
|
|
166
|
+
internal::sparse_sparse_product_with_pruning_impl<Lhs, ColMajorMatrixRhs, ResultType>(lhs, colRhs, res, tolerance);
|
|
179
167
|
}
|
|
180
168
|
};
|
|
181
169
|
|
|
182
|
-
template<typename Lhs, typename Rhs, typename ResultType>
|
|
183
|
-
struct sparse_sparse_product_with_pruning_selector<Lhs,Rhs,ResultType,RowMajor,ColMajor,ColMajor>
|
|
184
|
-
{
|
|
170
|
+
template <typename Lhs, typename Rhs, typename ResultType>
|
|
171
|
+
struct sparse_sparse_product_with_pruning_selector<Lhs, Rhs, ResultType, RowMajor, ColMajor, ColMajor> {
|
|
185
172
|
typedef typename ResultType::RealScalar RealScalar;
|
|
186
|
-
static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res, const RealScalar& tolerance)
|
|
187
|
-
|
|
188
|
-
typedef SparseMatrix<typename Lhs::Scalar,ColMajor,typename Lhs::StorageIndex> ColMajorMatrixLhs;
|
|
173
|
+
static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res, const RealScalar& tolerance) {
|
|
174
|
+
typedef SparseMatrix<typename Lhs::Scalar, ColMajor, typename Lhs::StorageIndex> ColMajorMatrixLhs;
|
|
189
175
|
ColMajorMatrixLhs colLhs(lhs);
|
|
190
|
-
internal::sparse_sparse_product_with_pruning_impl<ColMajorMatrixLhs,Rhs,ResultType>(colLhs, rhs, res, tolerance);
|
|
176
|
+
internal::sparse_sparse_product_with_pruning_impl<ColMajorMatrixLhs, Rhs, ResultType>(colLhs, rhs, res, tolerance);
|
|
191
177
|
}
|
|
192
178
|
};
|
|
193
179
|
|
|
194
|
-
}
|
|
180
|
+
} // end namespace internal
|
|
195
181
|
|
|
196
|
-
}
|
|
182
|
+
} // end namespace Eigen
|
|
197
183
|
|
|
198
|
-
#endif
|
|
184
|
+
#endif // EIGEN_SPARSESPARSEPRODUCTWITHPRUNING_H
|
|
@@ -10,83 +10,74 @@
|
|
|
10
10
|
#ifndef EIGEN_SPARSETRANSPOSE_H
|
|
11
11
|
#define EIGEN_SPARSETRANSPOSE_H
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
// IWYU pragma: private
|
|
14
|
+
#include "./InternalHeaderCheck.h"
|
|
15
|
+
|
|
16
|
+
namespace Eigen {
|
|
14
17
|
|
|
15
18
|
namespace internal {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
: public internal::SparseTransposeImpl<MatrixType>
|
|
47
|
-
{
|
|
48
|
-
protected:
|
|
49
|
-
typedef internal::SparseTransposeImpl<MatrixType> Base;
|
|
19
|
+
template <typename MatrixType, int CompressedAccess = int(MatrixType::Flags & CompressedAccessBit)>
|
|
20
|
+
class SparseTransposeImpl : public SparseMatrixBase<Transpose<MatrixType> > {};
|
|
21
|
+
|
|
22
|
+
template <typename MatrixType>
|
|
23
|
+
class SparseTransposeImpl<MatrixType, CompressedAccessBit> : public SparseCompressedBase<Transpose<MatrixType> > {
|
|
24
|
+
typedef SparseCompressedBase<Transpose<MatrixType> > Base;
|
|
25
|
+
|
|
26
|
+
public:
|
|
27
|
+
using Base::derived;
|
|
28
|
+
typedef typename Base::Scalar Scalar;
|
|
29
|
+
typedef typename Base::StorageIndex StorageIndex;
|
|
30
|
+
|
|
31
|
+
inline Index nonZeros() const { return derived().nestedExpression().nonZeros(); }
|
|
32
|
+
|
|
33
|
+
inline const Scalar* valuePtr() const { return derived().nestedExpression().valuePtr(); }
|
|
34
|
+
inline const StorageIndex* innerIndexPtr() const { return derived().nestedExpression().innerIndexPtr(); }
|
|
35
|
+
inline const StorageIndex* outerIndexPtr() const { return derived().nestedExpression().outerIndexPtr(); }
|
|
36
|
+
inline const StorageIndex* innerNonZeroPtr() const { return derived().nestedExpression().innerNonZeroPtr(); }
|
|
37
|
+
|
|
38
|
+
inline Scalar* valuePtr() { return derived().nestedExpression().valuePtr(); }
|
|
39
|
+
inline StorageIndex* innerIndexPtr() { return derived().nestedExpression().innerIndexPtr(); }
|
|
40
|
+
inline StorageIndex* outerIndexPtr() { return derived().nestedExpression().outerIndexPtr(); }
|
|
41
|
+
inline StorageIndex* innerNonZeroPtr() { return derived().nestedExpression().innerNonZeroPtr(); }
|
|
42
|
+
};
|
|
43
|
+
} // namespace internal
|
|
44
|
+
|
|
45
|
+
template <typename MatrixType>
|
|
46
|
+
class TransposeImpl<MatrixType, Sparse> : public internal::SparseTransposeImpl<MatrixType> {
|
|
47
|
+
protected:
|
|
48
|
+
typedef internal::SparseTransposeImpl<MatrixType> Base;
|
|
50
49
|
};
|
|
51
50
|
|
|
52
51
|
namespace internal {
|
|
53
|
-
|
|
54
|
-
template<typename ArgType>
|
|
55
|
-
struct unary_evaluator<Transpose<ArgType>, IteratorBased>
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
CoeffReadCost = evaluator<ArgType>::CoeffReadCost,
|
|
79
|
-
Flags = XprType::Flags
|
|
80
|
-
};
|
|
81
|
-
|
|
82
|
-
explicit unary_evaluator(const XprType& op) :m_argImpl(op.nestedExpression()) {}
|
|
83
|
-
|
|
84
|
-
protected:
|
|
85
|
-
evaluator<ArgType> m_argImpl;
|
|
52
|
+
|
|
53
|
+
template <typename ArgType>
|
|
54
|
+
struct unary_evaluator<Transpose<ArgType>, IteratorBased> : public evaluator_base<Transpose<ArgType> > {
|
|
55
|
+
typedef typename evaluator<ArgType>::InnerIterator EvalIterator;
|
|
56
|
+
|
|
57
|
+
public:
|
|
58
|
+
typedef Transpose<ArgType> XprType;
|
|
59
|
+
|
|
60
|
+
inline Index nonZerosEstimate() const { return m_argImpl.nonZerosEstimate(); }
|
|
61
|
+
|
|
62
|
+
class InnerIterator : public EvalIterator {
|
|
63
|
+
public:
|
|
64
|
+
EIGEN_STRONG_INLINE InnerIterator(const unary_evaluator& unaryOp, Index outer)
|
|
65
|
+
: EvalIterator(unaryOp.m_argImpl, outer) {}
|
|
66
|
+
|
|
67
|
+
Index row() const { return EvalIterator::col(); }
|
|
68
|
+
Index col() const { return EvalIterator::row(); }
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
enum { CoeffReadCost = evaluator<ArgType>::CoeffReadCost, Flags = XprType::Flags };
|
|
72
|
+
|
|
73
|
+
explicit unary_evaluator(const XprType& op) : m_argImpl(op.nestedExpression()) {}
|
|
74
|
+
|
|
75
|
+
protected:
|
|
76
|
+
evaluator<ArgType> m_argImpl;
|
|
86
77
|
};
|
|
87
78
|
|
|
88
|
-
}
|
|
79
|
+
} // end namespace internal
|
|
89
80
|
|
|
90
|
-
}
|
|
81
|
+
} // end namespace Eigen
|
|
91
82
|
|
|
92
|
-
#endif
|
|
83
|
+
#endif // EIGEN_SPARSETRANSPOSE_H
|