@smake/eigen 1.0.2 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/eigen/Eigen/AccelerateSupport +52 -0
- package/eigen/Eigen/Cholesky +18 -21
- package/eigen/Eigen/CholmodSupport +28 -28
- package/eigen/Eigen/Core +235 -326
- package/eigen/Eigen/Eigenvalues +16 -14
- package/eigen/Eigen/Geometry +21 -24
- package/eigen/Eigen/Householder +9 -8
- package/eigen/Eigen/IterativeLinearSolvers +8 -4
- package/eigen/Eigen/Jacobi +14 -14
- package/eigen/Eigen/KLUSupport +43 -0
- package/eigen/Eigen/LU +16 -20
- package/eigen/Eigen/MetisSupport +12 -12
- package/eigen/Eigen/OrderingMethods +54 -54
- package/eigen/Eigen/PaStiXSupport +23 -20
- package/eigen/Eigen/PardisoSupport +17 -14
- package/eigen/Eigen/QR +18 -21
- package/eigen/Eigen/QtAlignedMalloc +5 -13
- package/eigen/Eigen/SPQRSupport +21 -14
- package/eigen/Eigen/SVD +23 -18
- package/eigen/Eigen/Sparse +1 -4
- package/eigen/Eigen/SparseCholesky +18 -23
- package/eigen/Eigen/SparseCore +18 -17
- package/eigen/Eigen/SparseLU +12 -8
- package/eigen/Eigen/SparseQR +16 -14
- package/eigen/Eigen/StdDeque +5 -2
- package/eigen/Eigen/StdList +5 -2
- package/eigen/Eigen/StdVector +5 -2
- package/eigen/Eigen/SuperLUSupport +30 -24
- package/eigen/Eigen/ThreadPool +80 -0
- package/eigen/Eigen/UmfPackSupport +19 -17
- package/eigen/Eigen/Version +14 -0
- package/eigen/Eigen/src/AccelerateSupport/AccelerateSupport.h +423 -0
- package/eigen/Eigen/src/AccelerateSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Cholesky/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Cholesky/LDLT.h +377 -401
- package/eigen/Eigen/src/Cholesky/LLT.h +332 -360
- package/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +81 -56
- package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +620 -521
- package/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Core/ArithmeticSequence.h +239 -0
- package/eigen/Eigen/src/Core/Array.h +341 -294
- package/eigen/Eigen/src/Core/ArrayBase.h +190 -203
- package/eigen/Eigen/src/Core/ArrayWrapper.h +127 -171
- package/eigen/Eigen/src/Core/Assign.h +30 -40
- package/eigen/Eigen/src/Core/AssignEvaluator.h +711 -589
- package/eigen/Eigen/src/Core/Assign_MKL.h +130 -125
- package/eigen/Eigen/src/Core/BandMatrix.h +268 -283
- package/eigen/Eigen/src/Core/Block.h +375 -398
- package/eigen/Eigen/src/Core/CommaInitializer.h +86 -97
- package/eigen/Eigen/src/Core/ConditionEstimator.h +51 -53
- package/eigen/Eigen/src/Core/CoreEvaluators.h +1356 -1026
- package/eigen/Eigen/src/Core/CoreIterators.h +73 -59
- package/eigen/Eigen/src/Core/CwiseBinaryOp.h +114 -132
- package/eigen/Eigen/src/Core/CwiseNullaryOp.h +726 -617
- package/eigen/Eigen/src/Core/CwiseTernaryOp.h +77 -103
- package/eigen/Eigen/src/Core/CwiseUnaryOp.h +56 -68
- package/eigen/Eigen/src/Core/CwiseUnaryView.h +132 -95
- package/eigen/Eigen/src/Core/DenseBase.h +632 -571
- package/eigen/Eigen/src/Core/DenseCoeffsBase.h +511 -624
- package/eigen/Eigen/src/Core/DenseStorage.h +512 -509
- package/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
- package/eigen/Eigen/src/Core/Diagonal.h +169 -210
- package/eigen/Eigen/src/Core/DiagonalMatrix.h +351 -274
- package/eigen/Eigen/src/Core/DiagonalProduct.h +12 -10
- package/eigen/Eigen/src/Core/Dot.h +172 -222
- package/eigen/Eigen/src/Core/EigenBase.h +75 -85
- package/eigen/Eigen/src/Core/Fill.h +138 -0
- package/eigen/Eigen/src/Core/FindCoeff.h +464 -0
- package/eigen/Eigen/src/Core/ForceAlignedAccess.h +90 -109
- package/eigen/Eigen/src/Core/Fuzzy.h +82 -105
- package/eigen/Eigen/src/Core/GeneralProduct.h +327 -263
- package/eigen/Eigen/src/Core/GenericPacketMath.h +1472 -360
- package/eigen/Eigen/src/Core/GlobalFunctions.h +194 -151
- package/eigen/Eigen/src/Core/IO.h +147 -139
- package/eigen/Eigen/src/Core/IndexedView.h +321 -0
- package/eigen/Eigen/src/Core/InnerProduct.h +260 -0
- package/eigen/Eigen/src/Core/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Core/Inverse.h +56 -66
- package/eigen/Eigen/src/Core/Map.h +124 -142
- package/eigen/Eigen/src/Core/MapBase.h +256 -281
- package/eigen/Eigen/src/Core/MathFunctions.h +1620 -938
- package/eigen/Eigen/src/Core/MathFunctionsImpl.h +233 -71
- package/eigen/Eigen/src/Core/Matrix.h +491 -416
- package/eigen/Eigen/src/Core/MatrixBase.h +468 -453
- package/eigen/Eigen/src/Core/NestByValue.h +66 -85
- package/eigen/Eigen/src/Core/NoAlias.h +79 -85
- package/eigen/Eigen/src/Core/NumTraits.h +235 -148
- package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +253 -0
- package/eigen/Eigen/src/Core/PermutationMatrix.h +461 -511
- package/eigen/Eigen/src/Core/PlainObjectBase.h +871 -894
- package/eigen/Eigen/src/Core/Product.h +260 -139
- package/eigen/Eigen/src/Core/ProductEvaluators.h +863 -714
- package/eigen/Eigen/src/Core/Random.h +161 -136
- package/eigen/Eigen/src/Core/RandomImpl.h +262 -0
- package/eigen/Eigen/src/Core/RealView.h +250 -0
- package/eigen/Eigen/src/Core/Redux.h +366 -336
- package/eigen/Eigen/src/Core/Ref.h +308 -209
- package/eigen/Eigen/src/Core/Replicate.h +94 -106
- package/eigen/Eigen/src/Core/Reshaped.h +398 -0
- package/eigen/Eigen/src/Core/ReturnByValue.h +49 -55
- package/eigen/Eigen/src/Core/Reverse.h +136 -145
- package/eigen/Eigen/src/Core/Select.h +70 -140
- package/eigen/Eigen/src/Core/SelfAdjointView.h +262 -285
- package/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h +23 -20
- package/eigen/Eigen/src/Core/SkewSymmetricMatrix3.h +382 -0
- package/eigen/Eigen/src/Core/Solve.h +97 -111
- package/eigen/Eigen/src/Core/SolveTriangular.h +131 -129
- package/eigen/Eigen/src/Core/SolverBase.h +138 -101
- package/eigen/Eigen/src/Core/StableNorm.h +156 -160
- package/eigen/Eigen/src/Core/StlIterators.h +619 -0
- package/eigen/Eigen/src/Core/Stride.h +91 -88
- package/eigen/Eigen/src/Core/Swap.h +70 -38
- package/eigen/Eigen/src/Core/Transpose.h +295 -273
- package/eigen/Eigen/src/Core/Transpositions.h +272 -317
- package/eigen/Eigen/src/Core/TriangularMatrix.h +670 -755
- package/eigen/Eigen/src/Core/VectorBlock.h +59 -72
- package/eigen/Eigen/src/Core/VectorwiseOp.h +668 -630
- package/eigen/Eigen/src/Core/Visitor.h +480 -216
- package/eigen/Eigen/src/Core/arch/AVX/Complex.h +407 -293
- package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +79 -388
- package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +2935 -491
- package/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
- package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +279 -22
- package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +472 -0
- package/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +85 -333
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +2490 -649
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMathFP16.h +1413 -0
- package/eigen/Eigen/src/Core/arch/AVX512/Reductions.h +297 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TrsmKernel.h +1167 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TrsmUnrolls.inc +1219 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +277 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +521 -298
- package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +39 -280
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +3686 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +205 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +901 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMAbfloat16.h +742 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixVectorProduct.inc +2818 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +3391 -723
- package/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
- package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +866 -0
- package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +113 -14
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +2634 -0
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +227 -0
- package/eigen/Eigen/src/Core/arch/Default/Half.h +1091 -0
- package/eigen/Eigen/src/Core/arch/Default/Settings.h +11 -13
- package/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
- package/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +104 -0
- package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1712 -0
- package/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
- package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +77 -0
- package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
- package/eigen/Eigen/src/Core/arch/HVX/PacketMath.h +1088 -0
- package/eigen/Eigen/src/Core/arch/LSX/Complex.h +520 -0
- package/eigen/Eigen/src/Core/arch/LSX/GeneralBlockPanelKernel.h +23 -0
- package/eigen/Eigen/src/Core/arch/LSX/MathFunctions.h +43 -0
- package/eigen/Eigen/src/Core/arch/LSX/PacketMath.h +2866 -0
- package/eigen/Eigen/src/Core/arch/LSX/TypeCasting.h +526 -0
- package/eigen/Eigen/src/Core/arch/MSA/Complex.h +620 -0
- package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +379 -0
- package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1237 -0
- package/eigen/Eigen/src/Core/arch/NEON/Complex.h +531 -289
- package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +243 -0
- package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +50 -73
- package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +5915 -579
- package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1642 -0
- package/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
- package/eigen/Eigen/src/Core/arch/SSE/Complex.h +366 -334
- package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +40 -514
- package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +2164 -675
- package/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
- package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +188 -35
- package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +48 -0
- package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +674 -0
- package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +52 -0
- package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +227 -0
- package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +303 -0
- package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +576 -0
- package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +83 -0
- package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +434 -261
- package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +160 -53
- package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +1073 -605
- package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +123 -117
- package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +594 -322
- package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +204 -118
- package/eigen/Eigen/src/Core/functors/StlFunctors.h +110 -97
- package/eigen/Eigen/src/Core/functors/TernaryFunctors.h +34 -7
- package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1158 -530
- package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +2329 -1333
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +328 -364
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +191 -178
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +85 -82
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +154 -73
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +396 -542
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +80 -77
- package/eigen/Eigen/src/Core/products/Parallelizer.h +208 -92
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +331 -375
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +206 -224
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +139 -146
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +58 -61
- package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +71 -71
- package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +48 -46
- package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +294 -369
- package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +246 -238
- package/eigen/Eigen/src/Core/products/TriangularMatrixVector.h +244 -247
- package/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +212 -192
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +328 -275
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +108 -109
- package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +70 -93
- package/eigen/Eigen/src/Core/util/Assert.h +158 -0
- package/eigen/Eigen/src/Core/util/BlasUtil.h +413 -290
- package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +543 -0
- package/eigen/Eigen/src/Core/util/Constants.h +314 -263
- package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +130 -78
- package/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
- package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +450 -224
- package/eigen/Eigen/src/Core/util/GpuHipCudaDefines.inc +101 -0
- package/eigen/Eigen/src/Core/util/GpuHipCudaUndefines.inc +45 -0
- package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +487 -0
- package/eigen/Eigen/src/Core/util/IntegralConstant.h +279 -0
- package/eigen/Eigen/src/Core/util/MKL_support.h +39 -30
- package/eigen/Eigen/src/Core/util/Macros.h +939 -646
- package/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
- package/eigen/Eigen/src/Core/util/Memory.h +1042 -650
- package/eigen/Eigen/src/Core/util/Meta.h +618 -426
- package/eigen/Eigen/src/Core/util/MoreMeta.h +638 -0
- package/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +32 -19
- package/eigen/Eigen/src/Core/util/ReshapedHelper.h +51 -0
- package/eigen/Eigen/src/Core/util/Serializer.h +209 -0
- package/eigen/Eigen/src/Core/util/StaticAssert.h +51 -164
- package/eigen/Eigen/src/Core/util/SymbolicIndex.h +445 -0
- package/eigen/Eigen/src/Core/util/XprHelper.h +793 -538
- package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +246 -277
- package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +299 -319
- package/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +52 -48
- package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +413 -456
- package/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +309 -325
- package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +157 -171
- package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +292 -310
- package/eigen/Eigen/src/Eigenvalues/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +91 -107
- package/eigen/Eigen/src/Eigenvalues/RealQZ.h +539 -606
- package/eigen/Eigen/src/Eigenvalues/RealSchur.h +348 -382
- package/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +41 -35
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +579 -600
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +47 -44
- package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +434 -461
- package/eigen/Eigen/src/Geometry/AlignedBox.h +307 -214
- package/eigen/Eigen/src/Geometry/AngleAxis.h +135 -137
- package/eigen/Eigen/src/Geometry/EulerAngles.h +163 -74
- package/eigen/Eigen/src/Geometry/Homogeneous.h +289 -333
- package/eigen/Eigen/src/Geometry/Hyperplane.h +152 -161
- package/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Geometry/OrthoMethods.h +168 -145
- package/eigen/Eigen/src/Geometry/ParametrizedLine.h +141 -104
- package/eigen/Eigen/src/Geometry/Quaternion.h +595 -497
- package/eigen/Eigen/src/Geometry/Rotation2D.h +110 -108
- package/eigen/Eigen/src/Geometry/RotationBase.h +148 -145
- package/eigen/Eigen/src/Geometry/Scaling.h +115 -90
- package/eigen/Eigen/src/Geometry/Transform.h +896 -953
- package/eigen/Eigen/src/Geometry/Translation.h +100 -98
- package/eigen/Eigen/src/Geometry/Umeyama.h +79 -84
- package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +154 -0
- package/eigen/Eigen/src/Householder/BlockHouseholder.h +54 -42
- package/eigen/Eigen/src/Householder/Householder.h +104 -122
- package/eigen/Eigen/src/Householder/HouseholderSequence.h +416 -382
- package/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +153 -166
- package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +127 -138
- package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +95 -124
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +269 -267
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +246 -259
- package/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +218 -217
- package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +80 -103
- package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +59 -63
- package/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Jacobi/Jacobi.h +256 -291
- package/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/KLUSupport/KLUSupport.h +339 -0
- package/eigen/Eigen/src/LU/Determinant.h +60 -63
- package/eigen/Eigen/src/LU/FullPivLU.h +561 -626
- package/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/LU/InverseImpl.h +213 -275
- package/eigen/Eigen/src/LU/PartialPivLU.h +407 -435
- package/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +54 -40
- package/eigen/Eigen/src/LU/arch/InverseSize4.h +353 -0
- package/eigen/Eigen/src/MetisSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/MetisSupport/MetisSupport.h +81 -93
- package/eigen/Eigen/src/OrderingMethods/Amd.h +250 -282
- package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +950 -1103
- package/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/OrderingMethods/Ordering.h +111 -122
- package/eigen/Eigen/src/PaStiXSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +524 -570
- package/eigen/Eigen/src/PardisoSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +385 -429
- package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +494 -473
- package/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +120 -56
- package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +223 -137
- package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +517 -460
- package/eigen/Eigen/src/QR/HouseholderQR.h +412 -278
- package/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h +32 -23
- package/eigen/Eigen/src/QR/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SPQRSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +263 -261
- package/eigen/Eigen/src/SVD/BDCSVD.h +872 -679
- package/eigen/Eigen/src/SVD/BDCSVD_LAPACKE.h +174 -0
- package/eigen/Eigen/src/SVD/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SVD/JacobiSVD.h +585 -543
- package/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +85 -49
- package/eigen/Eigen/src/SVD/SVDBase.h +281 -160
- package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +202 -237
- package/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +769 -590
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +318 -129
- package/eigen/Eigen/src/SparseCore/AmbiVector.h +202 -251
- package/eigen/Eigen/src/SparseCore/CompressedStorage.h +184 -236
- package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +140 -184
- package/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCore/SparseAssign.h +174 -111
- package/eigen/Eigen/src/SparseCore/SparseBlock.h +408 -477
- package/eigen/Eigen/src/SparseCore/SparseColEtree.h +100 -112
- package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +531 -280
- package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +559 -347
- package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +100 -108
- package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +185 -191
- package/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h +71 -71
- package/eigen/Eigen/src/SparseCore/SparseDot.h +49 -47
- package/eigen/Eigen/src/SparseCore/SparseFuzzy.h +13 -11
- package/eigen/Eigen/src/SparseCore/SparseMap.h +243 -253
- package/eigen/Eigen/src/SparseCore/SparseMatrix.h +1614 -1142
- package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +403 -357
- package/eigen/Eigen/src/SparseCore/SparsePermutation.h +186 -115
- package/eigen/Eigen/src/SparseCore/SparseProduct.h +100 -91
- package/eigen/Eigen/src/SparseCore/SparseRedux.h +22 -24
- package/eigen/Eigen/src/SparseCore/SparseRef.h +268 -295
- package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +371 -414
- package/eigen/Eigen/src/SparseCore/SparseSolverBase.h +78 -87
- package/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +81 -95
- package/eigen/Eigen/src/SparseCore/SparseTranspose.h +62 -71
- package/eigen/Eigen/src/SparseCore/SparseTriangularView.h +132 -144
- package/eigen/Eigen/src/SparseCore/SparseUtil.h +146 -115
- package/eigen/Eigen/src/SparseCore/SparseVector.h +426 -372
- package/eigen/Eigen/src/SparseCore/SparseView.h +164 -193
- package/eigen/Eigen/src/SparseCore/TriangularSolver.h +129 -170
- package/eigen/Eigen/src/SparseLU/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseLU/SparseLU.h +814 -618
- package/eigen/Eigen/src/SparseLU/SparseLUImpl.h +61 -48
- package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +102 -118
- package/eigen/Eigen/src/SparseLU/SparseLU_Structs.h +38 -35
- package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +273 -255
- package/eigen/Eigen/src/SparseLU/SparseLU_Utils.h +44 -49
- package/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h +104 -108
- package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +90 -101
- package/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +57 -58
- package/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +43 -55
- package/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +74 -71
- package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +125 -133
- package/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h +136 -159
- package/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h +51 -52
- package/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h +67 -73
- package/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h +24 -26
- package/eigen/Eigen/src/SparseQR/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseQR/SparseQR.h +451 -490
- package/eigen/Eigen/src/StlSupport/StdDeque.h +28 -105
- package/eigen/Eigen/src/StlSupport/StdList.h +28 -84
- package/eigen/Eigen/src/StlSupport/StdVector.h +28 -108
- package/eigen/Eigen/src/StlSupport/details.h +48 -50
- package/eigen/Eigen/src/SuperLUSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +634 -732
- package/eigen/Eigen/src/ThreadPool/Barrier.h +70 -0
- package/eigen/Eigen/src/ThreadPool/CoreThreadPoolDevice.h +336 -0
- package/eigen/Eigen/src/ThreadPool/EventCount.h +241 -0
- package/eigen/Eigen/src/ThreadPool/ForkJoin.h +140 -0
- package/eigen/Eigen/src/ThreadPool/InternalHeaderCheck.h +4 -0
- package/eigen/Eigen/src/ThreadPool/NonBlockingThreadPool.h +587 -0
- package/eigen/Eigen/src/ThreadPool/RunQueue.h +230 -0
- package/eigen/Eigen/src/ThreadPool/ThreadCancel.h +21 -0
- package/eigen/Eigen/src/ThreadPool/ThreadEnvironment.h +43 -0
- package/eigen/Eigen/src/ThreadPool/ThreadLocal.h +289 -0
- package/eigen/Eigen/src/ThreadPool/ThreadPoolInterface.h +50 -0
- package/eigen/Eigen/src/ThreadPool/ThreadYield.h +16 -0
- package/eigen/Eigen/src/UmfPackSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +480 -380
- package/eigen/Eigen/src/misc/Image.h +41 -43
- package/eigen/Eigen/src/misc/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/misc/Kernel.h +39 -41
- package/eigen/Eigen/src/misc/RealSvd2x2.h +19 -21
- package/eigen/Eigen/src/misc/blas.h +83 -426
- package/eigen/Eigen/src/misc/lapacke.h +9976 -16182
- package/eigen/Eigen/src/misc/lapacke_helpers.h +163 -0
- package/eigen/Eigen/src/misc/lapacke_mangling.h +4 -5
- package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.inc +344 -0
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.inc +544 -0
- package/eigen/Eigen/src/plugins/BlockMethods.inc +1370 -0
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
- package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.inc +167 -0
- package/eigen/Eigen/src/plugins/IndexedViewMethods.inc +192 -0
- package/eigen/Eigen/src/plugins/InternalHeaderCheck.inc +3 -0
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.inc +331 -0
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.inc +118 -0
- package/eigen/Eigen/src/plugins/ReshapedMethods.inc +133 -0
- package/lib/LibEigen.d.ts +4 -0
- package/lib/LibEigen.js +14 -0
- package/lib/index.d.ts +1 -1
- package/lib/index.js +7 -3
- package/package.json +2 -10
- package/eigen/Eigen/CMakeLists.txt +0 -19
- package/eigen/Eigen/src/Core/BooleanRedux.h +0 -164
- package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +0 -103
- package/eigen/Eigen/src/Core/arch/CUDA/Half.h +0 -675
- package/eigen/Eigen/src/Core/arch/CUDA/MathFunctions.h +0 -91
- package/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +0 -333
- package/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +0 -1124
- package/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +0 -212
- package/eigen/Eigen/src/Core/util/NonMPL2.h +0 -3
- package/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +0 -161
- package/eigen/Eigen/src/LU/arch/Inverse_SSE.h +0 -338
- package/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h +0 -67
- package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +0 -280
- package/eigen/Eigen/src/misc/lapack.h +0 -152
- package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +0 -332
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +0 -552
- package/eigen/Eigen/src/plugins/BlockMethods.h +0 -1058
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +0 -115
- package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +0 -163
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +0 -152
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +0 -85
- package/lib/eigen.d.ts +0 -2
- package/lib/eigen.js +0 -15
|
@@ -12,167 +12,238 @@
|
|
|
12
12
|
|
|
13
13
|
// This file implements sparse * permutation products
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
// IWYU pragma: private
|
|
16
|
+
#include "./InternalHeaderCheck.h"
|
|
17
|
+
|
|
18
|
+
namespace Eigen {
|
|
16
19
|
|
|
17
20
|
namespace internal {
|
|
18
21
|
|
|
19
|
-
template<typename ExpressionType,
|
|
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
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
22
|
+
template <typename ExpressionType, typename PlainObjectType,
|
|
23
|
+
bool NeedEval = !is_same<ExpressionType, PlainObjectType>::value>
|
|
24
|
+
struct XprHelper {
|
|
25
|
+
XprHelper(const ExpressionType& xpr) : m_xpr(xpr) {}
|
|
26
|
+
inline const PlainObjectType& xpr() const { return m_xpr; }
|
|
27
|
+
// this is a new PlainObjectType initialized by xpr
|
|
28
|
+
const PlainObjectType m_xpr;
|
|
29
|
+
};
|
|
30
|
+
template <typename ExpressionType, typename PlainObjectType>
|
|
31
|
+
struct XprHelper<ExpressionType, PlainObjectType, false> {
|
|
32
|
+
XprHelper(const ExpressionType& xpr) : m_xpr(xpr) {}
|
|
33
|
+
inline const PlainObjectType& xpr() const { return m_xpr; }
|
|
34
|
+
// this is a reference to xpr
|
|
35
|
+
const PlainObjectType& m_xpr;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
template <typename PermDerived, bool NeedInverseEval>
|
|
39
|
+
struct PermHelper {
|
|
40
|
+
using IndicesType = typename PermDerived::IndicesType;
|
|
41
|
+
using PermutationIndex = typename IndicesType::Scalar;
|
|
42
|
+
using type = PermutationMatrix<IndicesType::SizeAtCompileTime, IndicesType::MaxSizeAtCompileTime, PermutationIndex>;
|
|
43
|
+
PermHelper(const PermDerived& perm) : m_perm(perm.inverse()) {}
|
|
44
|
+
inline const type& perm() const { return m_perm; }
|
|
45
|
+
// this is a new PermutationMatrix initialized by perm.inverse()
|
|
46
|
+
const type m_perm;
|
|
47
|
+
};
|
|
48
|
+
template <typename PermDerived>
|
|
49
|
+
struct PermHelper<PermDerived, false> {
|
|
50
|
+
using type = PermDerived;
|
|
51
|
+
PermHelper(const PermDerived& perm) : m_perm(perm) {}
|
|
52
|
+
inline const type& perm() const { return m_perm; }
|
|
53
|
+
// this is a reference to perm
|
|
54
|
+
const type& m_perm;
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
template <typename ExpressionType, int Side, bool Transposed>
|
|
58
|
+
struct permutation_matrix_product<ExpressionType, Side, Transposed, SparseShape> {
|
|
59
|
+
using MatrixType = typename nested_eval<ExpressionType, 1>::type;
|
|
60
|
+
using MatrixTypeCleaned = remove_all_t<MatrixType>;
|
|
61
|
+
|
|
62
|
+
using Scalar = typename MatrixTypeCleaned::Scalar;
|
|
63
|
+
using StorageIndex = typename MatrixTypeCleaned::StorageIndex;
|
|
64
|
+
|
|
65
|
+
// the actual "return type" is `Dest`. this is a temporary type
|
|
66
|
+
using ReturnType = SparseMatrix<Scalar, MatrixTypeCleaned::IsRowMajor ? RowMajor : ColMajor, StorageIndex>;
|
|
67
|
+
using TmpHelper = XprHelper<ExpressionType, ReturnType>;
|
|
68
|
+
|
|
69
|
+
static constexpr bool NeedOuterPermutation = ExpressionType::IsRowMajor ? Side == OnTheLeft : Side == OnTheRight;
|
|
70
|
+
static constexpr bool NeedInversePermutation = Transposed ? Side == OnTheLeft : Side == OnTheRight;
|
|
71
|
+
|
|
72
|
+
template <typename Dest, typename PermutationType>
|
|
73
|
+
static inline void permute_outer(Dest& dst, const PermutationType& perm, const ExpressionType& xpr) {
|
|
74
|
+
// if ExpressionType is not ReturnType, evaluate `xpr` (allocation)
|
|
75
|
+
// otherwise, just reference `xpr`
|
|
76
|
+
// TODO: handle trivial expressions such as CwiseBinaryOp without temporary
|
|
77
|
+
const TmpHelper tmpHelper(xpr);
|
|
78
|
+
const ReturnType& tmp = tmpHelper.xpr();
|
|
79
|
+
|
|
80
|
+
ReturnType result(tmp.rows(), tmp.cols());
|
|
81
|
+
|
|
82
|
+
for (Index j = 0; j < tmp.outerSize(); j++) {
|
|
83
|
+
Index jp = perm.indices().coeff(j);
|
|
84
|
+
Index jsrc = NeedInversePermutation ? jp : j;
|
|
85
|
+
Index jdst = NeedInversePermutation ? j : jp;
|
|
86
|
+
Index begin = tmp.outerIndexPtr()[jsrc];
|
|
87
|
+
Index end = tmp.isCompressed() ? tmp.outerIndexPtr()[jsrc + 1] : begin + tmp.innerNonZeroPtr()[jsrc];
|
|
88
|
+
result.outerIndexPtr()[jdst + 1] += end - begin;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
std::partial_sum(result.outerIndexPtr(), result.outerIndexPtr() + result.outerSize() + 1, result.outerIndexPtr());
|
|
92
|
+
result.resizeNonZeros(result.nonZeros());
|
|
93
|
+
|
|
94
|
+
for (Index j = 0; j < tmp.outerSize(); j++) {
|
|
95
|
+
Index jp = perm.indices().coeff(j);
|
|
96
|
+
Index jsrc = NeedInversePermutation ? jp : j;
|
|
97
|
+
Index jdst = NeedInversePermutation ? j : jp;
|
|
98
|
+
Index begin = tmp.outerIndexPtr()[jsrc];
|
|
99
|
+
Index end = tmp.isCompressed() ? tmp.outerIndexPtr()[jsrc + 1] : begin + tmp.innerNonZeroPtr()[jsrc];
|
|
100
|
+
Index target = result.outerIndexPtr()[jdst];
|
|
101
|
+
smart_copy(tmp.innerIndexPtr() + begin, tmp.innerIndexPtr() + end, result.innerIndexPtr() + target);
|
|
102
|
+
smart_copy(tmp.valuePtr() + begin, tmp.valuePtr() + end, result.valuePtr() + target);
|
|
103
|
+
}
|
|
104
|
+
dst = std::move(result);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
template <typename Dest, typename PermutationType>
|
|
108
|
+
static inline void permute_inner(Dest& dst, const PermutationType& perm, const ExpressionType& xpr) {
|
|
109
|
+
using InnerPermHelper = PermHelper<PermutationType, NeedInversePermutation>;
|
|
110
|
+
using InnerPermType = typename InnerPermHelper::type;
|
|
111
|
+
|
|
112
|
+
// if ExpressionType is not ReturnType, evaluate `xpr` (allocation)
|
|
113
|
+
// otherwise, just reference `xpr`
|
|
114
|
+
// TODO: handle trivial expressions such as CwiseBinaryOp without temporary
|
|
115
|
+
const TmpHelper tmpHelper(xpr);
|
|
116
|
+
const ReturnType& tmp = tmpHelper.xpr();
|
|
117
|
+
|
|
118
|
+
// if inverse permutation of inner indices is requested, calculate perm.inverse() (allocation)
|
|
119
|
+
// otherwise, just reference `perm`
|
|
120
|
+
const InnerPermHelper permHelper(perm);
|
|
121
|
+
const InnerPermType& innerPerm = permHelper.perm();
|
|
122
|
+
|
|
123
|
+
ReturnType result(tmp.rows(), tmp.cols());
|
|
124
|
+
|
|
125
|
+
for (Index j = 0; j < tmp.outerSize(); j++) {
|
|
126
|
+
Index begin = tmp.outerIndexPtr()[j];
|
|
127
|
+
Index end = tmp.isCompressed() ? tmp.outerIndexPtr()[j + 1] : begin + tmp.innerNonZeroPtr()[j];
|
|
128
|
+
result.outerIndexPtr()[j + 1] += end - begin;
|
|
81
129
|
}
|
|
130
|
+
|
|
131
|
+
std::partial_sum(result.outerIndexPtr(), result.outerIndexPtr() + result.outerSize() + 1, result.outerIndexPtr());
|
|
132
|
+
result.resizeNonZeros(result.nonZeros());
|
|
133
|
+
|
|
134
|
+
for (Index j = 0; j < tmp.outerSize(); j++) {
|
|
135
|
+
Index begin = tmp.outerIndexPtr()[j];
|
|
136
|
+
Index end = tmp.isCompressed() ? tmp.outerIndexPtr()[j + 1] : begin + tmp.innerNonZeroPtr()[j];
|
|
137
|
+
Index target = result.outerIndexPtr()[j];
|
|
138
|
+
std::transform(tmp.innerIndexPtr() + begin, tmp.innerIndexPtr() + end, result.innerIndexPtr() + target,
|
|
139
|
+
[&innerPerm](StorageIndex i) { return innerPerm.indices().coeff(i); });
|
|
140
|
+
smart_copy(tmp.valuePtr() + begin, tmp.valuePtr() + end, result.valuePtr() + target);
|
|
141
|
+
}
|
|
142
|
+
// the inner indices were permuted, and must be sorted
|
|
143
|
+
result.sortInnerIndices();
|
|
144
|
+
dst = std::move(result);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
template <typename Dest, typename PermutationType, bool DoOuter = NeedOuterPermutation,
|
|
148
|
+
std::enable_if_t<DoOuter, int> = 0>
|
|
149
|
+
static inline void run(Dest& dst, const PermutationType& perm, const ExpressionType& xpr) {
|
|
150
|
+
permute_outer(dst, perm, xpr);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
template <typename Dest, typename PermutationType, bool DoOuter = NeedOuterPermutation,
|
|
154
|
+
std::enable_if_t<!DoOuter, int> = 0>
|
|
155
|
+
static inline void run(Dest& dst, const PermutationType& perm, const ExpressionType& xpr) {
|
|
156
|
+
permute_inner(dst, perm, xpr);
|
|
157
|
+
}
|
|
82
158
|
};
|
|
83
159
|
|
|
84
|
-
}
|
|
160
|
+
} // namespace internal
|
|
85
161
|
|
|
86
162
|
namespace internal {
|
|
87
163
|
|
|
88
|
-
template <int ProductTag>
|
|
89
|
-
|
|
164
|
+
template <int ProductTag>
|
|
165
|
+
struct product_promote_storage_type<Sparse, PermutationStorage, ProductTag> {
|
|
166
|
+
typedef Sparse ret;
|
|
167
|
+
};
|
|
168
|
+
template <int ProductTag>
|
|
169
|
+
struct product_promote_storage_type<PermutationStorage, Sparse, ProductTag> {
|
|
170
|
+
typedef Sparse ret;
|
|
171
|
+
};
|
|
90
172
|
|
|
91
|
-
// TODO, the following two overloads are only needed to define the right temporary type through
|
|
173
|
+
// TODO, the following two overloads are only needed to define the right temporary type through
|
|
92
174
|
// typename traits<permutation_sparse_matrix_product<Rhs,Lhs,OnTheRight,false> >::ReturnType
|
|
93
175
|
// whereas it should be correctly handled by traits<Product<> >::PlainObject
|
|
94
176
|
|
|
95
|
-
template<typename Lhs, typename Rhs, int ProductTag>
|
|
177
|
+
template <typename Lhs, typename Rhs, int ProductTag>
|
|
96
178
|
struct product_evaluator<Product<Lhs, Rhs, AliasFreeProduct>, ProductTag, PermutationShape, SparseShape>
|
|
97
|
-
|
|
98
|
-
{
|
|
179
|
+
: public evaluator<typename permutation_matrix_product<Rhs, OnTheLeft, false, SparseShape>::ReturnType> {
|
|
99
180
|
typedef Product<Lhs, Rhs, AliasFreeProduct> XprType;
|
|
100
|
-
typedef typename permutation_matrix_product<Rhs,OnTheLeft,false,SparseShape>::ReturnType PlainObject;
|
|
181
|
+
typedef typename permutation_matrix_product<Rhs, OnTheLeft, false, SparseShape>::ReturnType PlainObject;
|
|
101
182
|
typedef evaluator<PlainObject> Base;
|
|
102
183
|
|
|
103
|
-
enum {
|
|
104
|
-
Flags = Base::Flags | EvalBeforeNestingBit
|
|
105
|
-
};
|
|
184
|
+
enum { Flags = Base::Flags | EvalBeforeNestingBit };
|
|
106
185
|
|
|
107
|
-
explicit product_evaluator(const XprType& xpr)
|
|
108
|
-
|
|
109
|
-
{
|
|
110
|
-
::new (static_cast<Base*>(this)) Base(m_result);
|
|
186
|
+
explicit product_evaluator(const XprType& xpr) : m_result(xpr.rows(), xpr.cols()) {
|
|
187
|
+
internal::construct_at<Base>(this, m_result);
|
|
111
188
|
generic_product_impl<Lhs, Rhs, PermutationShape, SparseShape, ProductTag>::evalTo(m_result, xpr.lhs(), xpr.rhs());
|
|
112
189
|
}
|
|
113
190
|
|
|
114
|
-
protected:
|
|
191
|
+
protected:
|
|
115
192
|
PlainObject m_result;
|
|
116
193
|
};
|
|
117
194
|
|
|
118
|
-
template<typename Lhs, typename Rhs, int ProductTag>
|
|
119
|
-
struct product_evaluator<Product<Lhs, Rhs, AliasFreeProduct>, ProductTag, SparseShape, PermutationShape
|
|
120
|
-
|
|
121
|
-
{
|
|
195
|
+
template <typename Lhs, typename Rhs, int ProductTag>
|
|
196
|
+
struct product_evaluator<Product<Lhs, Rhs, AliasFreeProduct>, ProductTag, SparseShape, PermutationShape>
|
|
197
|
+
: public evaluator<typename permutation_matrix_product<Lhs, OnTheRight, false, SparseShape>::ReturnType> {
|
|
122
198
|
typedef Product<Lhs, Rhs, AliasFreeProduct> XprType;
|
|
123
|
-
typedef typename permutation_matrix_product<Lhs,OnTheRight,false,SparseShape>::ReturnType PlainObject;
|
|
199
|
+
typedef typename permutation_matrix_product<Lhs, OnTheRight, false, SparseShape>::ReturnType PlainObject;
|
|
124
200
|
typedef evaluator<PlainObject> Base;
|
|
125
201
|
|
|
126
|
-
enum {
|
|
127
|
-
Flags = Base::Flags | EvalBeforeNestingBit
|
|
128
|
-
};
|
|
202
|
+
enum { Flags = Base::Flags | EvalBeforeNestingBit };
|
|
129
203
|
|
|
130
|
-
explicit product_evaluator(const XprType& xpr)
|
|
131
|
-
: m_result(xpr.rows(), xpr.cols())
|
|
132
|
-
{
|
|
204
|
+
explicit product_evaluator(const XprType& xpr) : m_result(xpr.rows(), xpr.cols()) {
|
|
133
205
|
::new (static_cast<Base*>(this)) Base(m_result);
|
|
134
206
|
generic_product_impl<Lhs, Rhs, SparseShape, PermutationShape, ProductTag>::evalTo(m_result, xpr.lhs(), xpr.rhs());
|
|
135
207
|
}
|
|
136
208
|
|
|
137
|
-
protected:
|
|
209
|
+
protected:
|
|
138
210
|
PlainObject m_result;
|
|
139
211
|
};
|
|
140
212
|
|
|
141
|
-
}
|
|
213
|
+
} // end namespace internal
|
|
142
214
|
|
|
143
215
|
/** \returns the matrix with the permutation applied to the columns
|
|
144
|
-
|
|
145
|
-
template<typename SparseDerived, typename PermDerived>
|
|
146
|
-
inline const Product<SparseDerived, PermDerived, AliasFreeProduct>
|
|
147
|
-
|
|
148
|
-
|
|
216
|
+
*/
|
|
217
|
+
template <typename SparseDerived, typename PermDerived>
|
|
218
|
+
inline const Product<SparseDerived, PermDerived, AliasFreeProduct> operator*(
|
|
219
|
+
const SparseMatrixBase<SparseDerived>& matrix, const PermutationBase<PermDerived>& perm) {
|
|
220
|
+
return Product<SparseDerived, PermDerived, AliasFreeProduct>(matrix.derived(), perm.derived());
|
|
221
|
+
}
|
|
149
222
|
|
|
150
223
|
/** \returns the matrix with the permutation applied to the rows
|
|
151
|
-
|
|
152
|
-
template<typename SparseDerived, typename PermDerived>
|
|
153
|
-
inline const Product<PermDerived, SparseDerived, AliasFreeProduct>
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
224
|
+
*/
|
|
225
|
+
template <typename SparseDerived, typename PermDerived>
|
|
226
|
+
inline const Product<PermDerived, SparseDerived, AliasFreeProduct> operator*(
|
|
227
|
+
const PermutationBase<PermDerived>& perm, const SparseMatrixBase<SparseDerived>& matrix) {
|
|
228
|
+
return Product<PermDerived, SparseDerived, AliasFreeProduct>(perm.derived(), matrix.derived());
|
|
229
|
+
}
|
|
157
230
|
|
|
158
231
|
/** \returns the matrix with the inverse permutation applied to the columns.
|
|
159
|
-
|
|
160
|
-
template<typename SparseDerived, typename PermutationType>
|
|
161
|
-
inline const Product<SparseDerived, Inverse<PermutationType>, AliasFreeProduct>
|
|
162
|
-
|
|
163
|
-
{
|
|
232
|
+
*/
|
|
233
|
+
template <typename SparseDerived, typename PermutationType>
|
|
234
|
+
inline const Product<SparseDerived, Inverse<PermutationType>, AliasFreeProduct> operator*(
|
|
235
|
+
const SparseMatrixBase<SparseDerived>& matrix, const InverseImpl<PermutationType, PermutationStorage>& tperm) {
|
|
164
236
|
return Product<SparseDerived, Inverse<PermutationType>, AliasFreeProduct>(matrix.derived(), tperm.derived());
|
|
165
237
|
}
|
|
166
238
|
|
|
167
239
|
/** \returns the matrix with the inverse permutation applied to the rows.
|
|
168
|
-
|
|
169
|
-
template<typename SparseDerived, typename PermutationType>
|
|
170
|
-
inline const Product<Inverse<PermutationType>, SparseDerived, AliasFreeProduct>
|
|
171
|
-
|
|
172
|
-
{
|
|
240
|
+
*/
|
|
241
|
+
template <typename SparseDerived, typename PermutationType>
|
|
242
|
+
inline const Product<Inverse<PermutationType>, SparseDerived, AliasFreeProduct> operator*(
|
|
243
|
+
const InverseImpl<PermutationType, PermutationStorage>& tperm, const SparseMatrixBase<SparseDerived>& matrix) {
|
|
173
244
|
return Product<Inverse<PermutationType>, SparseDerived, AliasFreeProduct>(tperm.derived(), matrix.derived());
|
|
174
245
|
}
|
|
175
246
|
|
|
176
|
-
}
|
|
247
|
+
} // end namespace Eigen
|
|
177
248
|
|
|
178
|
-
#endif
|
|
249
|
+
#endif // EIGEN_SPARSE_SELFADJOINTVIEW_H
|
|
@@ -10,160 +10,169 @@
|
|
|
10
10
|
#ifndef EIGEN_SPARSEPRODUCT_H
|
|
11
11
|
#define EIGEN_SPARSEPRODUCT_H
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
// IWYU pragma: private
|
|
14
|
+
#include "./InternalHeaderCheck.h"
|
|
15
|
+
|
|
16
|
+
namespace Eigen {
|
|
14
17
|
|
|
15
18
|
/** \returns an expression of the product of two sparse matrices.
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
template<typename Derived>
|
|
27
|
-
template<typename OtherDerived>
|
|
28
|
-
inline const Product<Derived,OtherDerived,AliasFreeProduct>
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
return Product<Derived,OtherDerived,AliasFreeProduct>(derived(), other.derived());
|
|
19
|
+
* By default a conservative product preserving the symbolic non zeros is performed.
|
|
20
|
+
* The automatic pruning of the small values can be achieved by calling the pruned() function
|
|
21
|
+
* in which case a totally different product algorithm is employed:
|
|
22
|
+
* \code
|
|
23
|
+
* C = (A*B).pruned(); // suppress numerical zeros (exact)
|
|
24
|
+
* C = (A*B).pruned(ref);
|
|
25
|
+
* C = (A*B).pruned(ref,epsilon);
|
|
26
|
+
* \endcode
|
|
27
|
+
* where \c ref is a meaningful non zero reference value.
|
|
28
|
+
* */
|
|
29
|
+
template <typename Derived>
|
|
30
|
+
template <typename OtherDerived>
|
|
31
|
+
inline const Product<Derived, OtherDerived, AliasFreeProduct> SparseMatrixBase<Derived>::operator*(
|
|
32
|
+
const SparseMatrixBase<OtherDerived>& other) const {
|
|
33
|
+
return Product<Derived, OtherDerived, AliasFreeProduct>(derived(), other.derived());
|
|
32
34
|
}
|
|
33
35
|
|
|
34
36
|
namespace internal {
|
|
35
37
|
|
|
36
38
|
// sparse * sparse
|
|
37
|
-
template<typename Lhs, typename Rhs, int ProductType>
|
|
38
|
-
struct generic_product_impl<Lhs, Rhs, SparseShape, SparseShape, ProductType>
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
static void evalTo(Dest& dst, const Lhs& lhs, const Rhs& rhs)
|
|
42
|
-
{
|
|
39
|
+
template <typename Lhs, typename Rhs, int ProductType>
|
|
40
|
+
struct generic_product_impl<Lhs, Rhs, SparseShape, SparseShape, ProductType> {
|
|
41
|
+
template <typename Dest>
|
|
42
|
+
static void evalTo(Dest& dst, const Lhs& lhs, const Rhs& rhs) {
|
|
43
43
|
evalTo(dst, lhs, rhs, typename evaluator_traits<Dest>::Shape());
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
// dense += sparse * sparse
|
|
47
|
-
template<typename Dest,typename ActualLhs>
|
|
48
|
-
static void addTo(Dest& dst, const ActualLhs& lhs, const Rhs& rhs,
|
|
49
|
-
|
|
50
|
-
typedef typename nested_eval<ActualLhs,Dynamic>::type LhsNested;
|
|
51
|
-
typedef typename nested_eval<Rhs,Dynamic>::type RhsNested;
|
|
47
|
+
template <typename Dest, typename ActualLhs>
|
|
48
|
+
static void addTo(Dest& dst, const ActualLhs& lhs, const Rhs& rhs,
|
|
49
|
+
std::enable_if_t<is_same<typename evaluator_traits<Dest>::Shape, DenseShape>::value, int*>* = 0) {
|
|
50
|
+
typedef typename nested_eval<ActualLhs, Dynamic>::type LhsNested;
|
|
51
|
+
typedef typename nested_eval<Rhs, Dynamic>::type RhsNested;
|
|
52
52
|
LhsNested lhsNested(lhs);
|
|
53
53
|
RhsNested rhsNested(rhs);
|
|
54
|
-
internal::sparse_sparse_to_dense_product_selector<
|
|
55
|
-
|
|
54
|
+
internal::sparse_sparse_to_dense_product_selector<remove_all_t<LhsNested>, remove_all_t<RhsNested>, Dest>::run(
|
|
55
|
+
lhsNested, rhsNested, dst);
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
// dense -= sparse * sparse
|
|
59
|
-
template<typename Dest>
|
|
60
|
-
static void subTo(Dest& dst, const Lhs& lhs, const Rhs& rhs,
|
|
61
|
-
|
|
59
|
+
template <typename Dest>
|
|
60
|
+
static void subTo(Dest& dst, const Lhs& lhs, const Rhs& rhs,
|
|
61
|
+
std::enable_if_t<is_same<typename evaluator_traits<Dest>::Shape, DenseShape>::value, int*>* = 0) {
|
|
62
62
|
addTo(dst, -lhs, rhs);
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
-
protected:
|
|
66
|
-
|
|
65
|
+
protected:
|
|
67
66
|
// sparse = sparse * sparse
|
|
68
|
-
template<typename Dest>
|
|
69
|
-
static void evalTo(Dest& dst, const Lhs& lhs, const Rhs& rhs, SparseShape)
|
|
70
|
-
|
|
71
|
-
typedef typename nested_eval<
|
|
72
|
-
typedef typename nested_eval<Rhs,Dynamic>::type RhsNested;
|
|
67
|
+
template <typename Dest>
|
|
68
|
+
static void evalTo(Dest& dst, const Lhs& lhs, const Rhs& rhs, SparseShape) {
|
|
69
|
+
typedef typename nested_eval<Lhs, Dynamic>::type LhsNested;
|
|
70
|
+
typedef typename nested_eval<Rhs, Dynamic>::type RhsNested;
|
|
73
71
|
LhsNested lhsNested(lhs);
|
|
74
72
|
RhsNested rhsNested(rhs);
|
|
75
|
-
internal::conservative_sparse_sparse_product_selector<
|
|
76
|
-
|
|
73
|
+
internal::conservative_sparse_sparse_product_selector<remove_all_t<LhsNested>, remove_all_t<RhsNested>, Dest>::run(
|
|
74
|
+
lhsNested, rhsNested, dst);
|
|
77
75
|
}
|
|
78
76
|
|
|
79
77
|
// dense = sparse * sparse
|
|
80
|
-
template<typename Dest>
|
|
81
|
-
static void evalTo(Dest& dst, const Lhs& lhs, const Rhs& rhs, DenseShape)
|
|
82
|
-
{
|
|
78
|
+
template <typename Dest>
|
|
79
|
+
static void evalTo(Dest& dst, const Lhs& lhs, const Rhs& rhs, DenseShape) {
|
|
83
80
|
dst.setZero();
|
|
84
81
|
addTo(dst, lhs, rhs);
|
|
85
82
|
}
|
|
86
83
|
};
|
|
87
84
|
|
|
88
85
|
// sparse * sparse-triangular
|
|
89
|
-
template<typename Lhs, typename Rhs, int ProductType>
|
|
86
|
+
template <typename Lhs, typename Rhs, int ProductType>
|
|
90
87
|
struct generic_product_impl<Lhs, Rhs, SparseShape, SparseTriangularShape, ProductType>
|
|
91
|
-
|
|
92
|
-
{};
|
|
88
|
+
: public generic_product_impl<Lhs, Rhs, SparseShape, SparseShape, ProductType> {};
|
|
93
89
|
|
|
94
90
|
// sparse-triangular * sparse
|
|
95
|
-
template<typename Lhs, typename Rhs, int ProductType>
|
|
91
|
+
template <typename Lhs, typename Rhs, int ProductType>
|
|
96
92
|
struct generic_product_impl<Lhs, Rhs, SparseTriangularShape, SparseShape, ProductType>
|
|
97
|
-
|
|
98
|
-
{};
|
|
93
|
+
: public generic_product_impl<Lhs, Rhs, SparseShape, SparseShape, ProductType> {};
|
|
99
94
|
|
|
100
95
|
// dense = sparse-product (can be sparse*sparse, sparse*perm, etc.)
|
|
101
|
-
template<
|
|
102
|
-
struct Assignment<
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
96
|
+
template <typename DstXprType, typename Lhs, typename Rhs>
|
|
97
|
+
struct Assignment<
|
|
98
|
+
DstXprType, Product<Lhs, Rhs, AliasFreeProduct>,
|
|
99
|
+
internal::assign_op<typename DstXprType::Scalar, typename Product<Lhs, Rhs, AliasFreeProduct>::Scalar>,
|
|
100
|
+
Sparse2Dense> {
|
|
101
|
+
typedef Product<Lhs, Rhs, AliasFreeProduct> SrcXprType;
|
|
102
|
+
static void run(DstXprType& dst, const SrcXprType& src,
|
|
103
|
+
const internal::assign_op<typename DstXprType::Scalar, typename SrcXprType::Scalar>&) {
|
|
107
104
|
Index dstRows = src.rows();
|
|
108
105
|
Index dstCols = src.cols();
|
|
109
|
-
if((dst.rows()!=dstRows) || (dst.cols()!=dstCols))
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
generic_product_impl<Lhs, Rhs>::evalTo(dst,src.lhs(),src.rhs());
|
|
106
|
+
if ((dst.rows() != dstRows) || (dst.cols() != dstCols)) dst.resize(dstRows, dstCols);
|
|
107
|
+
|
|
108
|
+
generic_product_impl<Lhs, Rhs>::evalTo(dst, src.lhs(), src.rhs());
|
|
113
109
|
}
|
|
114
110
|
};
|
|
115
111
|
|
|
116
112
|
// dense += sparse-product (can be sparse*sparse, sparse*perm, etc.)
|
|
117
|
-
template<
|
|
118
|
-
struct Assignment<
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
113
|
+
template <typename DstXprType, typename Lhs, typename Rhs>
|
|
114
|
+
struct Assignment<
|
|
115
|
+
DstXprType, Product<Lhs, Rhs, AliasFreeProduct>,
|
|
116
|
+
internal::add_assign_op<typename DstXprType::Scalar, typename Product<Lhs, Rhs, AliasFreeProduct>::Scalar>,
|
|
117
|
+
Sparse2Dense> {
|
|
118
|
+
typedef Product<Lhs, Rhs, AliasFreeProduct> SrcXprType;
|
|
119
|
+
static void run(DstXprType& dst, const SrcXprType& src,
|
|
120
|
+
const internal::add_assign_op<typename DstXprType::Scalar, typename SrcXprType::Scalar>&) {
|
|
121
|
+
generic_product_impl<Lhs, Rhs>::addTo(dst, src.lhs(), src.rhs());
|
|
124
122
|
}
|
|
125
123
|
};
|
|
126
124
|
|
|
127
125
|
// dense -= sparse-product (can be sparse*sparse, sparse*perm, etc.)
|
|
128
|
-
template<
|
|
129
|
-
struct Assignment<
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
126
|
+
template <typename DstXprType, typename Lhs, typename Rhs>
|
|
127
|
+
struct Assignment<
|
|
128
|
+
DstXprType, Product<Lhs, Rhs, AliasFreeProduct>,
|
|
129
|
+
internal::sub_assign_op<typename DstXprType::Scalar, typename Product<Lhs, Rhs, AliasFreeProduct>::Scalar>,
|
|
130
|
+
Sparse2Dense> {
|
|
131
|
+
typedef Product<Lhs, Rhs, AliasFreeProduct> SrcXprType;
|
|
132
|
+
static void run(DstXprType& dst, const SrcXprType& src,
|
|
133
|
+
const internal::sub_assign_op<typename DstXprType::Scalar, typename SrcXprType::Scalar>&) {
|
|
134
|
+
generic_product_impl<Lhs, Rhs>::subTo(dst, src.lhs(), src.rhs());
|
|
135
135
|
}
|
|
136
136
|
};
|
|
137
137
|
|
|
138
|
-
template<typename Lhs, typename Rhs, int Options>
|
|
138
|
+
template <typename Lhs, typename Rhs, int Options>
|
|
139
139
|
struct unary_evaluator<SparseView<Product<Lhs, Rhs, Options> >, IteratorBased>
|
|
140
|
-
|
|
141
|
-
{
|
|
140
|
+
: public evaluator<typename Product<Lhs, Rhs, DefaultProduct>::PlainObject> {
|
|
142
141
|
typedef SparseView<Product<Lhs, Rhs, Options> > XprType;
|
|
143
142
|
typedef typename XprType::PlainObject PlainObject;
|
|
144
143
|
typedef evaluator<PlainObject> Base;
|
|
145
144
|
|
|
146
|
-
explicit unary_evaluator(const XprType& xpr)
|
|
147
|
-
: m_result(xpr.rows(), xpr.cols())
|
|
148
|
-
{
|
|
145
|
+
explicit unary_evaluator(const XprType& xpr) : m_result(xpr.rows(), xpr.cols()) {
|
|
149
146
|
using std::abs;
|
|
150
|
-
::
|
|
151
|
-
typedef typename nested_eval<Lhs,Dynamic>::type LhsNested;
|
|
152
|
-
typedef typename nested_eval<Rhs,Dynamic>::type RhsNested;
|
|
147
|
+
internal::construct_at<Base>(this, m_result);
|
|
148
|
+
typedef typename nested_eval<Lhs, Dynamic>::type LhsNested;
|
|
149
|
+
typedef typename nested_eval<Rhs, Dynamic>::type RhsNested;
|
|
153
150
|
LhsNested lhsNested(xpr.nestedExpression().lhs());
|
|
154
151
|
RhsNested rhsNested(xpr.nestedExpression().rhs());
|
|
155
152
|
|
|
156
|
-
internal::sparse_sparse_product_with_pruning_selector<
|
|
157
|
-
|
|
158
|
-
|
|
153
|
+
internal::sparse_sparse_product_with_pruning_selector<remove_all_t<LhsNested>, remove_all_t<RhsNested>,
|
|
154
|
+
PlainObject>::run(lhsNested, rhsNested, m_result,
|
|
155
|
+
abs(xpr.reference()) * xpr.epsilon());
|
|
159
156
|
}
|
|
160
157
|
|
|
161
|
-
protected:
|
|
158
|
+
protected:
|
|
162
159
|
PlainObject m_result;
|
|
163
160
|
};
|
|
164
161
|
|
|
165
|
-
}
|
|
162
|
+
} // end namespace internal
|
|
163
|
+
|
|
164
|
+
// sparse matrix = sparse-product (can be sparse*sparse, sparse*perm, etc.)
|
|
165
|
+
template <typename Scalar, int Options_, typename StorageIndex_>
|
|
166
|
+
template <typename Lhs, typename Rhs>
|
|
167
|
+
SparseMatrix<Scalar, Options_, StorageIndex_>& SparseMatrix<Scalar, Options_, StorageIndex_>::operator=(
|
|
168
|
+
const Product<Lhs, Rhs, AliasFreeProduct>& src) {
|
|
169
|
+
// std::cout << "in Assignment : " << DstOptions << "\n";
|
|
170
|
+
SparseMatrix dst(src.rows(), src.cols());
|
|
171
|
+
internal::generic_product_impl<Lhs, Rhs>::evalTo(dst, src.lhs(), src.rhs());
|
|
172
|
+
this->swap(dst);
|
|
173
|
+
return *this;
|
|
174
|
+
}
|
|
166
175
|
|
|
167
|
-
}
|
|
176
|
+
} // end namespace Eigen
|
|
168
177
|
|
|
169
|
-
#endif
|
|
178
|
+
#endif // EIGEN_SPARSEPRODUCT_H
|