@smake/eigen 1.0.2 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/eigen/Eigen/AccelerateSupport +52 -0
- package/eigen/Eigen/Cholesky +18 -21
- package/eigen/Eigen/CholmodSupport +28 -28
- package/eigen/Eigen/Core +235 -326
- package/eigen/Eigen/Eigenvalues +16 -14
- package/eigen/Eigen/Geometry +21 -24
- package/eigen/Eigen/Householder +9 -8
- package/eigen/Eigen/IterativeLinearSolvers +8 -4
- package/eigen/Eigen/Jacobi +14 -14
- package/eigen/Eigen/KLUSupport +43 -0
- package/eigen/Eigen/LU +16 -20
- package/eigen/Eigen/MetisSupport +12 -12
- package/eigen/Eigen/OrderingMethods +54 -54
- package/eigen/Eigen/PaStiXSupport +23 -20
- package/eigen/Eigen/PardisoSupport +17 -14
- package/eigen/Eigen/QR +18 -21
- package/eigen/Eigen/QtAlignedMalloc +5 -13
- package/eigen/Eigen/SPQRSupport +21 -14
- package/eigen/Eigen/SVD +23 -18
- package/eigen/Eigen/Sparse +1 -4
- package/eigen/Eigen/SparseCholesky +18 -23
- package/eigen/Eigen/SparseCore +18 -17
- package/eigen/Eigen/SparseLU +12 -8
- package/eigen/Eigen/SparseQR +16 -14
- package/eigen/Eigen/StdDeque +5 -2
- package/eigen/Eigen/StdList +5 -2
- package/eigen/Eigen/StdVector +5 -2
- package/eigen/Eigen/SuperLUSupport +30 -24
- package/eigen/Eigen/ThreadPool +80 -0
- package/eigen/Eigen/UmfPackSupport +19 -17
- package/eigen/Eigen/Version +14 -0
- package/eigen/Eigen/src/AccelerateSupport/AccelerateSupport.h +423 -0
- package/eigen/Eigen/src/AccelerateSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Cholesky/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Cholesky/LDLT.h +377 -401
- package/eigen/Eigen/src/Cholesky/LLT.h +332 -360
- package/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +81 -56
- package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +620 -521
- package/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Core/ArithmeticSequence.h +239 -0
- package/eigen/Eigen/src/Core/Array.h +341 -294
- package/eigen/Eigen/src/Core/ArrayBase.h +190 -203
- package/eigen/Eigen/src/Core/ArrayWrapper.h +127 -171
- package/eigen/Eigen/src/Core/Assign.h +30 -40
- package/eigen/Eigen/src/Core/AssignEvaluator.h +711 -589
- package/eigen/Eigen/src/Core/Assign_MKL.h +130 -125
- package/eigen/Eigen/src/Core/BandMatrix.h +268 -283
- package/eigen/Eigen/src/Core/Block.h +375 -398
- package/eigen/Eigen/src/Core/CommaInitializer.h +86 -97
- package/eigen/Eigen/src/Core/ConditionEstimator.h +51 -53
- package/eigen/Eigen/src/Core/CoreEvaluators.h +1356 -1026
- package/eigen/Eigen/src/Core/CoreIterators.h +73 -59
- package/eigen/Eigen/src/Core/CwiseBinaryOp.h +114 -132
- package/eigen/Eigen/src/Core/CwiseNullaryOp.h +726 -617
- package/eigen/Eigen/src/Core/CwiseTernaryOp.h +77 -103
- package/eigen/Eigen/src/Core/CwiseUnaryOp.h +56 -68
- package/eigen/Eigen/src/Core/CwiseUnaryView.h +132 -95
- package/eigen/Eigen/src/Core/DenseBase.h +632 -571
- package/eigen/Eigen/src/Core/DenseCoeffsBase.h +511 -624
- package/eigen/Eigen/src/Core/DenseStorage.h +512 -509
- package/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
- package/eigen/Eigen/src/Core/Diagonal.h +169 -210
- package/eigen/Eigen/src/Core/DiagonalMatrix.h +351 -274
- package/eigen/Eigen/src/Core/DiagonalProduct.h +12 -10
- package/eigen/Eigen/src/Core/Dot.h +172 -222
- package/eigen/Eigen/src/Core/EigenBase.h +75 -85
- package/eigen/Eigen/src/Core/Fill.h +138 -0
- package/eigen/Eigen/src/Core/FindCoeff.h +464 -0
- package/eigen/Eigen/src/Core/ForceAlignedAccess.h +90 -109
- package/eigen/Eigen/src/Core/Fuzzy.h +82 -105
- package/eigen/Eigen/src/Core/GeneralProduct.h +327 -263
- package/eigen/Eigen/src/Core/GenericPacketMath.h +1472 -360
- package/eigen/Eigen/src/Core/GlobalFunctions.h +194 -151
- package/eigen/Eigen/src/Core/IO.h +147 -139
- package/eigen/Eigen/src/Core/IndexedView.h +321 -0
- package/eigen/Eigen/src/Core/InnerProduct.h +260 -0
- package/eigen/Eigen/src/Core/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Core/Inverse.h +56 -66
- package/eigen/Eigen/src/Core/Map.h +124 -142
- package/eigen/Eigen/src/Core/MapBase.h +256 -281
- package/eigen/Eigen/src/Core/MathFunctions.h +1620 -938
- package/eigen/Eigen/src/Core/MathFunctionsImpl.h +233 -71
- package/eigen/Eigen/src/Core/Matrix.h +491 -416
- package/eigen/Eigen/src/Core/MatrixBase.h +468 -453
- package/eigen/Eigen/src/Core/NestByValue.h +66 -85
- package/eigen/Eigen/src/Core/NoAlias.h +79 -85
- package/eigen/Eigen/src/Core/NumTraits.h +235 -148
- package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +253 -0
- package/eigen/Eigen/src/Core/PermutationMatrix.h +461 -511
- package/eigen/Eigen/src/Core/PlainObjectBase.h +871 -894
- package/eigen/Eigen/src/Core/Product.h +260 -139
- package/eigen/Eigen/src/Core/ProductEvaluators.h +863 -714
- package/eigen/Eigen/src/Core/Random.h +161 -136
- package/eigen/Eigen/src/Core/RandomImpl.h +262 -0
- package/eigen/Eigen/src/Core/RealView.h +250 -0
- package/eigen/Eigen/src/Core/Redux.h +366 -336
- package/eigen/Eigen/src/Core/Ref.h +308 -209
- package/eigen/Eigen/src/Core/Replicate.h +94 -106
- package/eigen/Eigen/src/Core/Reshaped.h +398 -0
- package/eigen/Eigen/src/Core/ReturnByValue.h +49 -55
- package/eigen/Eigen/src/Core/Reverse.h +136 -145
- package/eigen/Eigen/src/Core/Select.h +70 -140
- package/eigen/Eigen/src/Core/SelfAdjointView.h +262 -285
- package/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h +23 -20
- package/eigen/Eigen/src/Core/SkewSymmetricMatrix3.h +382 -0
- package/eigen/Eigen/src/Core/Solve.h +97 -111
- package/eigen/Eigen/src/Core/SolveTriangular.h +131 -129
- package/eigen/Eigen/src/Core/SolverBase.h +138 -101
- package/eigen/Eigen/src/Core/StableNorm.h +156 -160
- package/eigen/Eigen/src/Core/StlIterators.h +619 -0
- package/eigen/Eigen/src/Core/Stride.h +91 -88
- package/eigen/Eigen/src/Core/Swap.h +70 -38
- package/eigen/Eigen/src/Core/Transpose.h +295 -273
- package/eigen/Eigen/src/Core/Transpositions.h +272 -317
- package/eigen/Eigen/src/Core/TriangularMatrix.h +670 -755
- package/eigen/Eigen/src/Core/VectorBlock.h +59 -72
- package/eigen/Eigen/src/Core/VectorwiseOp.h +668 -630
- package/eigen/Eigen/src/Core/Visitor.h +480 -216
- package/eigen/Eigen/src/Core/arch/AVX/Complex.h +407 -293
- package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +79 -388
- package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +2935 -491
- package/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
- package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +279 -22
- package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +472 -0
- package/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +85 -333
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +2490 -649
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMathFP16.h +1413 -0
- package/eigen/Eigen/src/Core/arch/AVX512/Reductions.h +297 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TrsmKernel.h +1167 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TrsmUnrolls.inc +1219 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +277 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +521 -298
- package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +39 -280
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +3686 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +205 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +901 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMAbfloat16.h +742 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixVectorProduct.inc +2818 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +3391 -723
- package/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
- package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +866 -0
- package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +113 -14
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +2634 -0
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +227 -0
- package/eigen/Eigen/src/Core/arch/Default/Half.h +1091 -0
- package/eigen/Eigen/src/Core/arch/Default/Settings.h +11 -13
- package/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
- package/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +104 -0
- package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1712 -0
- package/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
- package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +77 -0
- package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
- package/eigen/Eigen/src/Core/arch/HVX/PacketMath.h +1088 -0
- package/eigen/Eigen/src/Core/arch/LSX/Complex.h +520 -0
- package/eigen/Eigen/src/Core/arch/LSX/GeneralBlockPanelKernel.h +23 -0
- package/eigen/Eigen/src/Core/arch/LSX/MathFunctions.h +43 -0
- package/eigen/Eigen/src/Core/arch/LSX/PacketMath.h +2866 -0
- package/eigen/Eigen/src/Core/arch/LSX/TypeCasting.h +526 -0
- package/eigen/Eigen/src/Core/arch/MSA/Complex.h +620 -0
- package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +379 -0
- package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1237 -0
- package/eigen/Eigen/src/Core/arch/NEON/Complex.h +531 -289
- package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +243 -0
- package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +50 -73
- package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +5915 -579
- package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1642 -0
- package/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
- package/eigen/Eigen/src/Core/arch/SSE/Complex.h +366 -334
- package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +40 -514
- package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +2164 -675
- package/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
- package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +188 -35
- package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +48 -0
- package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +674 -0
- package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +52 -0
- package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +227 -0
- package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +303 -0
- package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +576 -0
- package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +83 -0
- package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +434 -261
- package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +160 -53
- package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +1073 -605
- package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +123 -117
- package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +594 -322
- package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +204 -118
- package/eigen/Eigen/src/Core/functors/StlFunctors.h +110 -97
- package/eigen/Eigen/src/Core/functors/TernaryFunctors.h +34 -7
- package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1158 -530
- package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +2329 -1333
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +328 -364
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +191 -178
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +85 -82
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +154 -73
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +396 -542
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +80 -77
- package/eigen/Eigen/src/Core/products/Parallelizer.h +208 -92
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +331 -375
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +206 -224
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +139 -146
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +58 -61
- package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +71 -71
- package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +48 -46
- package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +294 -369
- package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +246 -238
- package/eigen/Eigen/src/Core/products/TriangularMatrixVector.h +244 -247
- package/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +212 -192
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +328 -275
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +108 -109
- package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +70 -93
- package/eigen/Eigen/src/Core/util/Assert.h +158 -0
- package/eigen/Eigen/src/Core/util/BlasUtil.h +413 -290
- package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +543 -0
- package/eigen/Eigen/src/Core/util/Constants.h +314 -263
- package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +130 -78
- package/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
- package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +450 -224
- package/eigen/Eigen/src/Core/util/GpuHipCudaDefines.inc +101 -0
- package/eigen/Eigen/src/Core/util/GpuHipCudaUndefines.inc +45 -0
- package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +487 -0
- package/eigen/Eigen/src/Core/util/IntegralConstant.h +279 -0
- package/eigen/Eigen/src/Core/util/MKL_support.h +39 -30
- package/eigen/Eigen/src/Core/util/Macros.h +939 -646
- package/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
- package/eigen/Eigen/src/Core/util/Memory.h +1042 -650
- package/eigen/Eigen/src/Core/util/Meta.h +618 -426
- package/eigen/Eigen/src/Core/util/MoreMeta.h +638 -0
- package/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +32 -19
- package/eigen/Eigen/src/Core/util/ReshapedHelper.h +51 -0
- package/eigen/Eigen/src/Core/util/Serializer.h +209 -0
- package/eigen/Eigen/src/Core/util/StaticAssert.h +51 -164
- package/eigen/Eigen/src/Core/util/SymbolicIndex.h +445 -0
- package/eigen/Eigen/src/Core/util/XprHelper.h +793 -538
- package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +246 -277
- package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +299 -319
- package/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +52 -48
- package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +413 -456
- package/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +309 -325
- package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +157 -171
- package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +292 -310
- package/eigen/Eigen/src/Eigenvalues/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +91 -107
- package/eigen/Eigen/src/Eigenvalues/RealQZ.h +539 -606
- package/eigen/Eigen/src/Eigenvalues/RealSchur.h +348 -382
- package/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +41 -35
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +579 -600
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +47 -44
- package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +434 -461
- package/eigen/Eigen/src/Geometry/AlignedBox.h +307 -214
- package/eigen/Eigen/src/Geometry/AngleAxis.h +135 -137
- package/eigen/Eigen/src/Geometry/EulerAngles.h +163 -74
- package/eigen/Eigen/src/Geometry/Homogeneous.h +289 -333
- package/eigen/Eigen/src/Geometry/Hyperplane.h +152 -161
- package/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Geometry/OrthoMethods.h +168 -145
- package/eigen/Eigen/src/Geometry/ParametrizedLine.h +141 -104
- package/eigen/Eigen/src/Geometry/Quaternion.h +595 -497
- package/eigen/Eigen/src/Geometry/Rotation2D.h +110 -108
- package/eigen/Eigen/src/Geometry/RotationBase.h +148 -145
- package/eigen/Eigen/src/Geometry/Scaling.h +115 -90
- package/eigen/Eigen/src/Geometry/Transform.h +896 -953
- package/eigen/Eigen/src/Geometry/Translation.h +100 -98
- package/eigen/Eigen/src/Geometry/Umeyama.h +79 -84
- package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +154 -0
- package/eigen/Eigen/src/Householder/BlockHouseholder.h +54 -42
- package/eigen/Eigen/src/Householder/Householder.h +104 -122
- package/eigen/Eigen/src/Householder/HouseholderSequence.h +416 -382
- package/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +153 -166
- package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +127 -138
- package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +95 -124
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +269 -267
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +246 -259
- package/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +218 -217
- package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +80 -103
- package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +59 -63
- package/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Jacobi/Jacobi.h +256 -291
- package/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/KLUSupport/KLUSupport.h +339 -0
- package/eigen/Eigen/src/LU/Determinant.h +60 -63
- package/eigen/Eigen/src/LU/FullPivLU.h +561 -626
- package/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/LU/InverseImpl.h +213 -275
- package/eigen/Eigen/src/LU/PartialPivLU.h +407 -435
- package/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +54 -40
- package/eigen/Eigen/src/LU/arch/InverseSize4.h +353 -0
- package/eigen/Eigen/src/MetisSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/MetisSupport/MetisSupport.h +81 -93
- package/eigen/Eigen/src/OrderingMethods/Amd.h +250 -282
- package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +950 -1103
- package/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/OrderingMethods/Ordering.h +111 -122
- package/eigen/Eigen/src/PaStiXSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +524 -570
- package/eigen/Eigen/src/PardisoSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +385 -429
- package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +494 -473
- package/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +120 -56
- package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +223 -137
- package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +517 -460
- package/eigen/Eigen/src/QR/HouseholderQR.h +412 -278
- package/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h +32 -23
- package/eigen/Eigen/src/QR/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SPQRSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +263 -261
- package/eigen/Eigen/src/SVD/BDCSVD.h +872 -679
- package/eigen/Eigen/src/SVD/BDCSVD_LAPACKE.h +174 -0
- package/eigen/Eigen/src/SVD/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SVD/JacobiSVD.h +585 -543
- package/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +85 -49
- package/eigen/Eigen/src/SVD/SVDBase.h +281 -160
- package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +202 -237
- package/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +769 -590
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +318 -129
- package/eigen/Eigen/src/SparseCore/AmbiVector.h +202 -251
- package/eigen/Eigen/src/SparseCore/CompressedStorage.h +184 -236
- package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +140 -184
- package/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCore/SparseAssign.h +174 -111
- package/eigen/Eigen/src/SparseCore/SparseBlock.h +408 -477
- package/eigen/Eigen/src/SparseCore/SparseColEtree.h +100 -112
- package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +531 -280
- package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +559 -347
- package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +100 -108
- package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +185 -191
- package/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h +71 -71
- package/eigen/Eigen/src/SparseCore/SparseDot.h +49 -47
- package/eigen/Eigen/src/SparseCore/SparseFuzzy.h +13 -11
- package/eigen/Eigen/src/SparseCore/SparseMap.h +243 -253
- package/eigen/Eigen/src/SparseCore/SparseMatrix.h +1614 -1142
- package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +403 -357
- package/eigen/Eigen/src/SparseCore/SparsePermutation.h +186 -115
- package/eigen/Eigen/src/SparseCore/SparseProduct.h +100 -91
- package/eigen/Eigen/src/SparseCore/SparseRedux.h +22 -24
- package/eigen/Eigen/src/SparseCore/SparseRef.h +268 -295
- package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +371 -414
- package/eigen/Eigen/src/SparseCore/SparseSolverBase.h +78 -87
- package/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +81 -95
- package/eigen/Eigen/src/SparseCore/SparseTranspose.h +62 -71
- package/eigen/Eigen/src/SparseCore/SparseTriangularView.h +132 -144
- package/eigen/Eigen/src/SparseCore/SparseUtil.h +146 -115
- package/eigen/Eigen/src/SparseCore/SparseVector.h +426 -372
- package/eigen/Eigen/src/SparseCore/SparseView.h +164 -193
- package/eigen/Eigen/src/SparseCore/TriangularSolver.h +129 -170
- package/eigen/Eigen/src/SparseLU/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseLU/SparseLU.h +814 -618
- package/eigen/Eigen/src/SparseLU/SparseLUImpl.h +61 -48
- package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +102 -118
- package/eigen/Eigen/src/SparseLU/SparseLU_Structs.h +38 -35
- package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +273 -255
- package/eigen/Eigen/src/SparseLU/SparseLU_Utils.h +44 -49
- package/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h +104 -108
- package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +90 -101
- package/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +57 -58
- package/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +43 -55
- package/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +74 -71
- package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +125 -133
- package/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h +136 -159
- package/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h +51 -52
- package/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h +67 -73
- package/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h +24 -26
- package/eigen/Eigen/src/SparseQR/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseQR/SparseQR.h +451 -490
- package/eigen/Eigen/src/StlSupport/StdDeque.h +28 -105
- package/eigen/Eigen/src/StlSupport/StdList.h +28 -84
- package/eigen/Eigen/src/StlSupport/StdVector.h +28 -108
- package/eigen/Eigen/src/StlSupport/details.h +48 -50
- package/eigen/Eigen/src/SuperLUSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +634 -732
- package/eigen/Eigen/src/ThreadPool/Barrier.h +70 -0
- package/eigen/Eigen/src/ThreadPool/CoreThreadPoolDevice.h +336 -0
- package/eigen/Eigen/src/ThreadPool/EventCount.h +241 -0
- package/eigen/Eigen/src/ThreadPool/ForkJoin.h +140 -0
- package/eigen/Eigen/src/ThreadPool/InternalHeaderCheck.h +4 -0
- package/eigen/Eigen/src/ThreadPool/NonBlockingThreadPool.h +587 -0
- package/eigen/Eigen/src/ThreadPool/RunQueue.h +230 -0
- package/eigen/Eigen/src/ThreadPool/ThreadCancel.h +21 -0
- package/eigen/Eigen/src/ThreadPool/ThreadEnvironment.h +43 -0
- package/eigen/Eigen/src/ThreadPool/ThreadLocal.h +289 -0
- package/eigen/Eigen/src/ThreadPool/ThreadPoolInterface.h +50 -0
- package/eigen/Eigen/src/ThreadPool/ThreadYield.h +16 -0
- package/eigen/Eigen/src/UmfPackSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +480 -380
- package/eigen/Eigen/src/misc/Image.h +41 -43
- package/eigen/Eigen/src/misc/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/misc/Kernel.h +39 -41
- package/eigen/Eigen/src/misc/RealSvd2x2.h +19 -21
- package/eigen/Eigen/src/misc/blas.h +83 -426
- package/eigen/Eigen/src/misc/lapacke.h +9976 -16182
- package/eigen/Eigen/src/misc/lapacke_helpers.h +163 -0
- package/eigen/Eigen/src/misc/lapacke_mangling.h +4 -5
- package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.inc +344 -0
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.inc +544 -0
- package/eigen/Eigen/src/plugins/BlockMethods.inc +1370 -0
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
- package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.inc +167 -0
- package/eigen/Eigen/src/plugins/IndexedViewMethods.inc +192 -0
- package/eigen/Eigen/src/plugins/InternalHeaderCheck.inc +3 -0
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.inc +331 -0
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.inc +118 -0
- package/eigen/Eigen/src/plugins/ReshapedMethods.inc +133 -0
- package/lib/LibEigen.d.ts +4 -0
- package/lib/LibEigen.js +14 -0
- package/lib/index.d.ts +1 -1
- package/lib/index.js +7 -3
- package/package.json +2 -10
- package/eigen/Eigen/CMakeLists.txt +0 -19
- package/eigen/Eigen/src/Core/BooleanRedux.h +0 -164
- package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +0 -103
- package/eigen/Eigen/src/Core/arch/CUDA/Half.h +0 -675
- package/eigen/Eigen/src/Core/arch/CUDA/MathFunctions.h +0 -91
- package/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +0 -333
- package/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +0 -1124
- package/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +0 -212
- package/eigen/Eigen/src/Core/util/NonMPL2.h +0 -3
- package/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +0 -161
- package/eigen/Eigen/src/LU/arch/Inverse_SSE.h +0 -338
- package/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h +0 -67
- package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +0 -280
- package/eigen/Eigen/src/misc/lapack.h +0 -152
- package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +0 -332
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +0 -552
- package/eigen/Eigen/src/plugins/BlockMethods.h +0 -1058
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +0 -115
- package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +0 -163
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +0 -152
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +0 -85
- package/lib/eigen.d.ts +0 -2
- package/lib/eigen.js +0 -15
|
@@ -10,191 +10,192 @@
|
|
|
10
10
|
#ifndef EIGEN_SPARSE_SELFADJOINTVIEW_H
|
|
11
11
|
#define EIGEN_SPARSE_SELFADJOINTVIEW_H
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
// IWYU pragma: private
|
|
14
|
+
#include "./InternalHeaderCheck.h"
|
|
15
|
+
|
|
16
|
+
namespace Eigen {
|
|
17
|
+
|
|
15
18
|
/** \ingroup SparseCore_Module
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
19
|
+
* \class SparseSelfAdjointView
|
|
20
|
+
*
|
|
21
|
+
* \brief Pseudo expression to manipulate a triangular sparse matrix as a selfadjoint matrix.
|
|
22
|
+
*
|
|
23
|
+
* \param MatrixType the type of the dense matrix storing the coefficients
|
|
24
|
+
* \param Mode can be either \c #Lower or \c #Upper
|
|
25
|
+
*
|
|
26
|
+
* This class is an expression of a sefladjoint matrix from a triangular part of a matrix
|
|
27
|
+
* with given dense storage of the coefficients. It is the return type of MatrixBase::selfadjointView()
|
|
28
|
+
* and most of the time this is the only way that it is used.
|
|
29
|
+
*
|
|
30
|
+
* \sa SparseMatrixBase::selfadjointView()
|
|
31
|
+
*/
|
|
29
32
|
namespace internal {
|
|
30
|
-
|
|
31
|
-
template<typename MatrixType, unsigned int Mode>
|
|
32
|
-
struct traits<SparseSelfAdjointView<MatrixType,Mode> > : traits<MatrixType> {
|
|
33
|
-
};
|
|
34
33
|
|
|
35
|
-
template<
|
|
36
|
-
|
|
34
|
+
template <typename MatrixType, unsigned int Mode>
|
|
35
|
+
struct traits<SparseSelfAdjointView<MatrixType, Mode> > : traits<MatrixType> {};
|
|
37
36
|
|
|
38
|
-
template<int
|
|
39
|
-
void
|
|
37
|
+
template <int SrcMode, int DstMode, bool NonHermitian, typename MatrixType, int DestOrder>
|
|
38
|
+
void permute_symm_to_symm(
|
|
39
|
+
const MatrixType& mat,
|
|
40
|
+
SparseMatrix<typename MatrixType::Scalar, DestOrder, typename MatrixType::StorageIndex>& _dest,
|
|
41
|
+
const typename MatrixType::StorageIndex* perm = 0);
|
|
40
42
|
|
|
41
|
-
|
|
43
|
+
template <int Mode, bool NonHermitian, typename MatrixType, int DestOrder>
|
|
44
|
+
void permute_symm_to_fullsymm(
|
|
45
|
+
const MatrixType& mat,
|
|
46
|
+
SparseMatrix<typename MatrixType::Scalar, DestOrder, typename MatrixType::StorageIndex>& _dest,
|
|
47
|
+
const typename MatrixType::StorageIndex* perm = 0);
|
|
42
48
|
|
|
43
|
-
|
|
44
|
-
: public EigenBase<SparseSelfAdjointView<MatrixType,_Mode> >
|
|
45
|
-
{
|
|
46
|
-
public:
|
|
47
|
-
|
|
48
|
-
enum {
|
|
49
|
-
Mode = _Mode,
|
|
50
|
-
TransposeMode = ((Mode & Upper) ? Lower : 0) | ((Mode & Lower) ? Upper : 0),
|
|
51
|
-
RowsAtCompileTime = internal::traits<SparseSelfAdjointView>::RowsAtCompileTime,
|
|
52
|
-
ColsAtCompileTime = internal::traits<SparseSelfAdjointView>::ColsAtCompileTime
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
typedef EigenBase<SparseSelfAdjointView> Base;
|
|
56
|
-
typedef typename MatrixType::Scalar Scalar;
|
|
57
|
-
typedef typename MatrixType::StorageIndex StorageIndex;
|
|
58
|
-
typedef Matrix<StorageIndex,Dynamic,1> VectorI;
|
|
59
|
-
typedef typename internal::ref_selector<MatrixType>::non_const_type MatrixTypeNested;
|
|
60
|
-
typedef typename internal::remove_all<MatrixTypeNested>::type _MatrixTypeNested;
|
|
61
|
-
|
|
62
|
-
explicit inline SparseSelfAdjointView(MatrixType& matrix) : m_matrix(matrix)
|
|
63
|
-
{
|
|
64
|
-
eigen_assert(rows()==cols() && "SelfAdjointView is only for squared matrices");
|
|
65
|
-
}
|
|
49
|
+
} // namespace internal
|
|
66
50
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
* Note that there is no algorithmic advantage of performing such a product compared to a general sparse-sparse matrix product.
|
|
77
|
-
* Indeed, the SparseSelfadjointView operand is first copied into a temporary SparseMatrix before computing the product.
|
|
78
|
-
*/
|
|
79
|
-
template<typename OtherDerived>
|
|
80
|
-
Product<SparseSelfAdjointView, OtherDerived>
|
|
81
|
-
operator*(const SparseMatrixBase<OtherDerived>& rhs) const
|
|
82
|
-
{
|
|
83
|
-
return Product<SparseSelfAdjointView, OtherDerived>(*this, rhs.derived());
|
|
84
|
-
}
|
|
51
|
+
template <typename MatrixType, unsigned int Mode_>
|
|
52
|
+
class SparseSelfAdjointView : public EigenBase<SparseSelfAdjointView<MatrixType, Mode_> > {
|
|
53
|
+
public:
|
|
54
|
+
enum {
|
|
55
|
+
Mode = Mode_,
|
|
56
|
+
TransposeMode = ((int(Mode) & int(Upper)) ? Lower : 0) | ((int(Mode) & int(Lower)) ? Upper : 0),
|
|
57
|
+
RowsAtCompileTime = internal::traits<SparseSelfAdjointView>::RowsAtCompileTime,
|
|
58
|
+
ColsAtCompileTime = internal::traits<SparseSelfAdjointView>::ColsAtCompileTime
|
|
59
|
+
};
|
|
85
60
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
Product<OtherDerived, SparseSelfAdjointView>
|
|
93
|
-
operator*(const SparseMatrixBase<OtherDerived>& lhs, const SparseSelfAdjointView& rhs)
|
|
94
|
-
{
|
|
95
|
-
return Product<OtherDerived, SparseSelfAdjointView>(lhs.derived(), rhs);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/** Efficient sparse self-adjoint matrix times dense vector/matrix product */
|
|
99
|
-
template<typename OtherDerived>
|
|
100
|
-
Product<SparseSelfAdjointView,OtherDerived>
|
|
101
|
-
operator*(const MatrixBase<OtherDerived>& rhs) const
|
|
102
|
-
{
|
|
103
|
-
return Product<SparseSelfAdjointView,OtherDerived>(*this, rhs.derived());
|
|
104
|
-
}
|
|
61
|
+
typedef EigenBase<SparseSelfAdjointView> Base;
|
|
62
|
+
typedef typename MatrixType::Scalar Scalar;
|
|
63
|
+
typedef typename MatrixType::StorageIndex StorageIndex;
|
|
64
|
+
typedef Matrix<StorageIndex, Dynamic, 1> VectorI;
|
|
65
|
+
typedef typename internal::ref_selector<MatrixType>::non_const_type MatrixTypeNested;
|
|
66
|
+
typedef internal::remove_all_t<MatrixTypeNested> MatrixTypeNested_;
|
|
105
67
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
operator*(const MatrixBase<OtherDerived>& lhs, const SparseSelfAdjointView& rhs)
|
|
110
|
-
{
|
|
111
|
-
return Product<OtherDerived,SparseSelfAdjointView>(lhs.derived(), rhs);
|
|
112
|
-
}
|
|
68
|
+
explicit inline SparseSelfAdjointView(MatrixType& matrix) : m_matrix(matrix) {
|
|
69
|
+
eigen_assert(rows() == cols() && "SelfAdjointView is only for squared matrices");
|
|
70
|
+
}
|
|
113
71
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
72
|
+
inline Index rows() const { return m_matrix.rows(); }
|
|
73
|
+
inline Index cols() const { return m_matrix.cols(); }
|
|
74
|
+
|
|
75
|
+
/** \internal \returns a reference to the nested matrix */
|
|
76
|
+
const MatrixTypeNested_& matrix() const { return m_matrix; }
|
|
77
|
+
std::remove_reference_t<MatrixTypeNested>& matrix() { return m_matrix; }
|
|
78
|
+
|
|
79
|
+
/** \returns an expression of the matrix product between a sparse self-adjoint matrix \c *this and a sparse matrix \a
|
|
80
|
+
* rhs.
|
|
81
|
+
*
|
|
82
|
+
* Note that there is no algorithmic advantage of performing such a product compared to a general sparse-sparse matrix
|
|
83
|
+
* product. Indeed, the SparseSelfadjointView operand is first copied into a temporary SparseMatrix before computing
|
|
84
|
+
* the product.
|
|
85
|
+
*/
|
|
86
|
+
template <typename OtherDerived>
|
|
87
|
+
Product<SparseSelfAdjointView, OtherDerived> operator*(const SparseMatrixBase<OtherDerived>& rhs) const {
|
|
88
|
+
return Product<SparseSelfAdjointView, OtherDerived>(*this, rhs.derived());
|
|
89
|
+
}
|
|
131
90
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
91
|
+
/** \returns an expression of the matrix product between a sparse matrix \a lhs and a sparse self-adjoint matrix \a
|
|
92
|
+
* rhs.
|
|
93
|
+
*
|
|
94
|
+
* Note that there is no algorithmic advantage of performing such a product compared to a general sparse-sparse matrix
|
|
95
|
+
* product. Indeed, the SparseSelfadjointView operand is first copied into a temporary SparseMatrix before computing
|
|
96
|
+
* the product.
|
|
97
|
+
*/
|
|
98
|
+
template <typename OtherDerived>
|
|
99
|
+
friend Product<OtherDerived, SparseSelfAdjointView> operator*(const SparseMatrixBase<OtherDerived>& lhs,
|
|
100
|
+
const SparseSelfAdjointView& rhs) {
|
|
101
|
+
return Product<OtherDerived, SparseSelfAdjointView>(lhs.derived(), rhs);
|
|
102
|
+
}
|
|
138
103
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
104
|
+
/** Efficient sparse self-adjoint matrix times dense vector/matrix product */
|
|
105
|
+
template <typename OtherDerived>
|
|
106
|
+
Product<SparseSelfAdjointView, OtherDerived> operator*(const MatrixBase<OtherDerived>& rhs) const {
|
|
107
|
+
return Product<SparseSelfAdjointView, OtherDerived>(*this, rhs.derived());
|
|
108
|
+
}
|
|
144
109
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
110
|
+
/** Efficient dense vector/matrix times sparse self-adjoint matrix product */
|
|
111
|
+
template <typename OtherDerived>
|
|
112
|
+
friend Product<OtherDerived, SparseSelfAdjointView> operator*(const MatrixBase<OtherDerived>& lhs,
|
|
113
|
+
const SparseSelfAdjointView& rhs) {
|
|
114
|
+
return Product<OtherDerived, SparseSelfAdjointView>(lhs.derived(), rhs);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/** Perform a symmetric rank K update of the selfadjoint matrix \c *this:
|
|
118
|
+
* \f$ this = this + \alpha ( u u^* ) \f$ where \a u is a vector or matrix.
|
|
119
|
+
*
|
|
120
|
+
* \returns a reference to \c *this
|
|
121
|
+
*
|
|
122
|
+
* To perform \f$ this = this + \alpha ( u^* u ) \f$ you can simply
|
|
123
|
+
* call this function with u.adjoint().
|
|
124
|
+
*/
|
|
125
|
+
template <typename DerivedU>
|
|
126
|
+
SparseSelfAdjointView& rankUpdate(const SparseMatrixBase<DerivedU>& u, const Scalar& alpha = Scalar(1));
|
|
127
|
+
|
|
128
|
+
/** \returns an expression of P H P^-1 */
|
|
129
|
+
// TODO implement twists in a more evaluator friendly fashion
|
|
130
|
+
SparseSymmetricPermutationProduct<MatrixTypeNested_, Mode> twistedBy(
|
|
131
|
+
const PermutationMatrix<Dynamic, Dynamic, StorageIndex>& perm) const {
|
|
132
|
+
return SparseSymmetricPermutationProduct<MatrixTypeNested_, Mode>(m_matrix, perm);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
template <typename SrcMatrixType, int SrcMode>
|
|
136
|
+
SparseSelfAdjointView& operator=(const SparseSymmetricPermutationProduct<SrcMatrixType, SrcMode>& permutedMatrix) {
|
|
137
|
+
internal::call_assignment_no_alias_no_transpose(*this, permutedMatrix);
|
|
138
|
+
return *this;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
SparseSelfAdjointView& operator=(const SparseSelfAdjointView& src) {
|
|
142
|
+
PermutationMatrix<Dynamic, Dynamic, StorageIndex> pnull;
|
|
143
|
+
return *this = src.twistedBy(pnull);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Since we override the copy-assignment operator, we need to explicitly redeclare the copy-constructor
|
|
147
|
+
EIGEN_DEFAULT_COPY_CONSTRUCTOR(SparseSelfAdjointView)
|
|
148
|
+
|
|
149
|
+
template <typename SrcMatrixType, unsigned int SrcMode>
|
|
150
|
+
SparseSelfAdjointView& operator=(const SparseSelfAdjointView<SrcMatrixType, SrcMode>& src) {
|
|
151
|
+
PermutationMatrix<Dynamic, Dynamic, StorageIndex> pnull;
|
|
152
|
+
return *this = src.twistedBy(pnull);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
void resize(Index rows, Index cols) {
|
|
156
|
+
EIGEN_ONLY_USED_FOR_DEBUG(rows);
|
|
157
|
+
EIGEN_ONLY_USED_FOR_DEBUG(cols);
|
|
158
|
+
eigen_assert(rows == this->rows() && cols == this->cols() &&
|
|
159
|
+
"SparseSelfadjointView::resize() does not actually allow to resize.");
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
protected:
|
|
163
|
+
MatrixTypeNested m_matrix;
|
|
164
|
+
// mutable VectorI m_countPerRow;
|
|
165
|
+
// mutable VectorI m_countPerCol;
|
|
166
|
+
private:
|
|
167
|
+
template <typename Dest>
|
|
168
|
+
void evalTo(Dest&) const;
|
|
167
169
|
};
|
|
168
170
|
|
|
169
171
|
/***************************************************************************
|
|
170
|
-
* Implementation of SparseMatrixBase methods
|
|
171
|
-
***************************************************************************/
|
|
172
|
+
* Implementation of SparseMatrixBase methods
|
|
173
|
+
***************************************************************************/
|
|
172
174
|
|
|
173
|
-
template<typename Derived>
|
|
174
|
-
template<unsigned int UpLo>
|
|
175
|
-
typename SparseMatrixBase<Derived>::template ConstSelfAdjointViewReturnType<UpLo>::Type
|
|
176
|
-
{
|
|
175
|
+
template <typename Derived>
|
|
176
|
+
template <unsigned int UpLo>
|
|
177
|
+
typename SparseMatrixBase<Derived>::template ConstSelfAdjointViewReturnType<UpLo>::Type
|
|
178
|
+
SparseMatrixBase<Derived>::selfadjointView() const {
|
|
177
179
|
return SparseSelfAdjointView<const Derived, UpLo>(derived());
|
|
178
180
|
}
|
|
179
181
|
|
|
180
|
-
template<typename Derived>
|
|
181
|
-
template<unsigned int UpLo>
|
|
182
|
-
typename SparseMatrixBase<Derived>::template SelfAdjointViewReturnType<UpLo>::Type
|
|
183
|
-
{
|
|
182
|
+
template <typename Derived>
|
|
183
|
+
template <unsigned int UpLo>
|
|
184
|
+
typename SparseMatrixBase<Derived>::template SelfAdjointViewReturnType<UpLo>::Type
|
|
185
|
+
SparseMatrixBase<Derived>::selfadjointView() {
|
|
184
186
|
return SparseSelfAdjointView<Derived, UpLo>(derived());
|
|
185
187
|
}
|
|
186
188
|
|
|
187
189
|
/***************************************************************************
|
|
188
|
-
* Implementation of SparseSelfAdjointView methods
|
|
189
|
-
***************************************************************************/
|
|
190
|
-
|
|
191
|
-
template<typename MatrixType, unsigned int Mode>
|
|
192
|
-
template<typename DerivedU>
|
|
193
|
-
SparseSelfAdjointView<MatrixType,Mode>&
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
if(alpha==Scalar(0))
|
|
190
|
+
* Implementation of SparseSelfAdjointView methods
|
|
191
|
+
***************************************************************************/
|
|
192
|
+
|
|
193
|
+
template <typename MatrixType, unsigned int Mode>
|
|
194
|
+
template <typename DerivedU>
|
|
195
|
+
SparseSelfAdjointView<MatrixType, Mode>& SparseSelfAdjointView<MatrixType, Mode>::rankUpdate(
|
|
196
|
+
const SparseMatrixBase<DerivedU>& u, const Scalar& alpha) {
|
|
197
|
+
SparseMatrix<Scalar, (MatrixType::Flags & RowMajorBit) ? RowMajor : ColMajor> tmp = u * u.adjoint();
|
|
198
|
+
if (alpha == Scalar(0))
|
|
198
199
|
m_matrix = tmp.template triangularView<Mode>();
|
|
199
200
|
else
|
|
200
201
|
m_matrix += alpha * tmp.template triangularView<Mode>();
|
|
@@ -203,454 +204,410 @@ SparseSelfAdjointView<MatrixType,Mode>::rankUpdate(const SparseMatrixBase<Derive
|
|
|
203
204
|
}
|
|
204
205
|
|
|
205
206
|
namespace internal {
|
|
206
|
-
|
|
207
|
+
|
|
207
208
|
// TODO currently a selfadjoint expression has the form SelfAdjointView<.,.>
|
|
208
209
|
// in the future selfadjoint-ness should be defined by the expression traits
|
|
209
|
-
// such that Transpose<SelfAdjointView<.,.> > is valid. (currently TriangularBase::transpose() is overloaded to
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
{
|
|
210
|
+
// such that Transpose<SelfAdjointView<.,.> > is valid. (currently TriangularBase::transpose() is overloaded to
|
|
211
|
+
// make it work)
|
|
212
|
+
template <typename MatrixType, unsigned int Mode>
|
|
213
|
+
struct evaluator_traits<SparseSelfAdjointView<MatrixType, Mode> > {
|
|
213
214
|
typedef typename storage_kind_to_evaluator_kind<typename MatrixType::StorageKind>::Kind Kind;
|
|
214
215
|
typedef SparseSelfAdjointShape Shape;
|
|
215
216
|
};
|
|
216
217
|
|
|
217
218
|
struct SparseSelfAdjoint2Sparse {};
|
|
218
219
|
|
|
219
|
-
template<>
|
|
220
|
-
|
|
220
|
+
template <>
|
|
221
|
+
struct AssignmentKind<SparseShape, SparseSelfAdjointShape> {
|
|
222
|
+
typedef SparseSelfAdjoint2Sparse Kind;
|
|
223
|
+
};
|
|
224
|
+
template <>
|
|
225
|
+
struct AssignmentKind<SparseSelfAdjointShape, SparseShape> {
|
|
226
|
+
typedef Sparse2Sparse Kind;
|
|
227
|
+
};
|
|
221
228
|
|
|
222
|
-
template<
|
|
223
|
-
struct Assignment<DstXprType, SrcXprType, Functor, SparseSelfAdjoint2Sparse>
|
|
224
|
-
{
|
|
229
|
+
template <typename DstXprType, typename SrcXprType, typename Functor>
|
|
230
|
+
struct Assignment<DstXprType, SrcXprType, Functor, SparseSelfAdjoint2Sparse> {
|
|
225
231
|
typedef typename DstXprType::StorageIndex StorageIndex;
|
|
226
|
-
typedef internal::assign_op<typename DstXprType::Scalar,typename SrcXprType::Scalar> AssignOpType;
|
|
232
|
+
typedef internal::assign_op<typename DstXprType::Scalar, typename SrcXprType::Scalar> AssignOpType;
|
|
227
233
|
|
|
228
|
-
template<typename DestScalar,int StorageOrder>
|
|
229
|
-
static void run(SparseMatrix<DestScalar,StorageOrder,StorageIndex
|
|
230
|
-
|
|
231
|
-
internal::permute_symm_to_fullsymm<SrcXprType::Mode>(src.matrix(), dst);
|
|
234
|
+
template <typename DestScalar, int StorageOrder>
|
|
235
|
+
static void run(SparseMatrix<DestScalar, StorageOrder, StorageIndex>& dst, const SrcXprType& src,
|
|
236
|
+
const AssignOpType& /*func*/) {
|
|
237
|
+
internal::permute_symm_to_fullsymm<SrcXprType::Mode, false>(src.matrix(), dst);
|
|
232
238
|
}
|
|
233
239
|
|
|
234
|
-
// FIXME: the handling of += and -= in sparse matrices should be cleanup so that next two overloads could be reduced
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
240
|
+
// FIXME: the handling of += and -= in sparse matrices should be cleanup so that next two overloads could be reduced
|
|
241
|
+
// to:
|
|
242
|
+
template <typename DestScalar, int StorageOrder, typename AssignFunc>
|
|
243
|
+
static void run(SparseMatrix<DestScalar, StorageOrder, StorageIndex>& dst, const SrcXprType& src,
|
|
244
|
+
const AssignFunc& func) {
|
|
245
|
+
SparseMatrix<DestScalar, StorageOrder, StorageIndex> tmp(src.rows(), src.cols());
|
|
239
246
|
run(tmp, src, AssignOpType());
|
|
240
247
|
call_assignment_no_alias_no_transpose(dst, tmp, func);
|
|
241
248
|
}
|
|
242
249
|
|
|
243
|
-
template<typename DestScalar,int StorageOrder>
|
|
244
|
-
static void run(SparseMatrix<DestScalar,StorageOrder,StorageIndex
|
|
245
|
-
const internal::add_assign_op<typename DstXprType::Scalar,typename SrcXprType::Scalar>& /* func */)
|
|
246
|
-
|
|
247
|
-
SparseMatrix<DestScalar,StorageOrder,StorageIndex> tmp(src.rows(),src.cols());
|
|
250
|
+
template <typename DestScalar, int StorageOrder>
|
|
251
|
+
static void run(SparseMatrix<DestScalar, StorageOrder, StorageIndex>& dst, const SrcXprType& src,
|
|
252
|
+
const internal::add_assign_op<typename DstXprType::Scalar, typename SrcXprType::Scalar>& /* func */) {
|
|
253
|
+
SparseMatrix<DestScalar, StorageOrder, StorageIndex> tmp(src.rows(), src.cols());
|
|
248
254
|
run(tmp, src, AssignOpType());
|
|
249
255
|
dst += tmp;
|
|
250
256
|
}
|
|
251
257
|
|
|
252
|
-
template<typename DestScalar,int StorageOrder>
|
|
253
|
-
static void run(SparseMatrix<DestScalar,StorageOrder,StorageIndex
|
|
254
|
-
const internal::sub_assign_op<typename DstXprType::Scalar,typename SrcXprType::Scalar>& /* func */)
|
|
255
|
-
|
|
256
|
-
SparseMatrix<DestScalar,StorageOrder,StorageIndex> tmp(src.rows(),src.cols());
|
|
258
|
+
template <typename DestScalar, int StorageOrder>
|
|
259
|
+
static void run(SparseMatrix<DestScalar, StorageOrder, StorageIndex>& dst, const SrcXprType& src,
|
|
260
|
+
const internal::sub_assign_op<typename DstXprType::Scalar, typename SrcXprType::Scalar>& /* func */) {
|
|
261
|
+
SparseMatrix<DestScalar, StorageOrder, StorageIndex> tmp(src.rows(), src.cols());
|
|
257
262
|
run(tmp, src, AssignOpType());
|
|
258
263
|
dst -= tmp;
|
|
259
264
|
}
|
|
260
|
-
|
|
261
|
-
template<typename DestScalar>
|
|
262
|
-
static void run(DynamicSparseMatrix<DestScalar,ColMajor,StorageIndex>& dst, const SrcXprType &src, const AssignOpType&/*func*/)
|
|
263
|
-
{
|
|
264
|
-
// TODO directly evaluate into dst;
|
|
265
|
-
SparseMatrix<DestScalar,ColMajor,StorageIndex> tmp(dst.rows(),dst.cols());
|
|
266
|
-
internal::permute_symm_to_fullsymm<SrcXprType::Mode>(src.matrix(), tmp);
|
|
267
|
-
dst = tmp;
|
|
268
|
-
}
|
|
269
265
|
};
|
|
270
266
|
|
|
271
|
-
}
|
|
267
|
+
} // end namespace internal
|
|
272
268
|
|
|
273
269
|
/***************************************************************************
|
|
274
|
-
* Implementation of sparse self-adjoint time dense matrix
|
|
275
|
-
***************************************************************************/
|
|
270
|
+
* Implementation of sparse self-adjoint time dense matrix
|
|
271
|
+
***************************************************************************/
|
|
276
272
|
|
|
277
273
|
namespace internal {
|
|
278
274
|
|
|
279
|
-
template<int Mode, typename SparseLhsType, typename DenseRhsType, typename DenseResType, typename AlphaType>
|
|
280
|
-
inline void sparse_selfadjoint_time_dense_product(const SparseLhsType& lhs, const DenseRhsType& rhs, DenseResType& res,
|
|
281
|
-
{
|
|
275
|
+
template <int Mode, typename SparseLhsType, typename DenseRhsType, typename DenseResType, typename AlphaType>
|
|
276
|
+
inline void sparse_selfadjoint_time_dense_product(const SparseLhsType& lhs, const DenseRhsType& rhs, DenseResType& res,
|
|
277
|
+
const AlphaType& alpha) {
|
|
282
278
|
EIGEN_ONLY_USED_FOR_DEBUG(alpha);
|
|
283
|
-
|
|
284
|
-
typedef typename internal::nested_eval<SparseLhsType,DenseRhsType::MaxColsAtCompileTime>::type SparseLhsTypeNested;
|
|
285
|
-
typedef
|
|
279
|
+
|
|
280
|
+
typedef typename internal::nested_eval<SparseLhsType, DenseRhsType::MaxColsAtCompileTime>::type SparseLhsTypeNested;
|
|
281
|
+
typedef internal::remove_all_t<SparseLhsTypeNested> SparseLhsTypeNestedCleaned;
|
|
286
282
|
typedef evaluator<SparseLhsTypeNestedCleaned> LhsEval;
|
|
287
283
|
typedef typename LhsEval::InnerIterator LhsIterator;
|
|
288
284
|
typedef typename SparseLhsType::Scalar LhsScalar;
|
|
289
|
-
|
|
285
|
+
|
|
290
286
|
enum {
|
|
291
|
-
LhsIsRowMajor = (LhsEval::Flags&RowMajorBit)==RowMajorBit,
|
|
292
|
-
ProcessFirstHalf =
|
|
293
|
-
|
|
294
|
-
|| ( (Mode&Upper) && !LhsIsRowMajor)
|
|
295
|
-
|| ( (Mode&Lower) && LhsIsRowMajor),
|
|
287
|
+
LhsIsRowMajor = (LhsEval::Flags & RowMajorBit) == RowMajorBit,
|
|
288
|
+
ProcessFirstHalf = ((Mode & (Upper | Lower)) == (Upper | Lower)) || ((Mode & Upper) && !LhsIsRowMajor) ||
|
|
289
|
+
((Mode & Lower) && LhsIsRowMajor),
|
|
296
290
|
ProcessSecondHalf = !ProcessFirstHalf
|
|
297
291
|
};
|
|
298
|
-
|
|
292
|
+
|
|
299
293
|
SparseLhsTypeNested lhs_nested(lhs);
|
|
300
294
|
LhsEval lhsEval(lhs_nested);
|
|
301
295
|
|
|
302
296
|
// work on one column at once
|
|
303
|
-
for (Index k=0; k<rhs.cols(); ++k)
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
{
|
|
307
|
-
LhsIterator i(lhsEval,j);
|
|
297
|
+
for (Index k = 0; k < rhs.cols(); ++k) {
|
|
298
|
+
for (Index j = 0; j < lhs.outerSize(); ++j) {
|
|
299
|
+
LhsIterator i(lhsEval, j);
|
|
308
300
|
// handle diagonal coeff
|
|
309
|
-
if (ProcessSecondHalf)
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
{
|
|
314
|
-
res.coeffRef(j,k) += alpha * i.value() * rhs.coeff(j,k);
|
|
301
|
+
if (ProcessSecondHalf) {
|
|
302
|
+
while (i && i.index() < j) ++i;
|
|
303
|
+
if (i && i.index() == j) {
|
|
304
|
+
res.coeffRef(j, k) += alpha * i.value() * rhs.coeff(j, k);
|
|
315
305
|
++i;
|
|
316
306
|
}
|
|
317
307
|
}
|
|
318
308
|
|
|
319
309
|
// premultiplied rhs for scatters
|
|
320
|
-
typename ScalarBinaryOpTraits<AlphaType, typename DenseRhsType::Scalar>::ReturnType rhs_j(alpha*rhs(j,k));
|
|
310
|
+
typename ScalarBinaryOpTraits<AlphaType, typename DenseRhsType::Scalar>::ReturnType rhs_j(alpha * rhs(j, k));
|
|
321
311
|
// accumulator for partial scalar product
|
|
322
312
|
typename DenseResType::Scalar res_j(0);
|
|
323
|
-
for(; (ProcessFirstHalf ? i && i.index() < j : i)
|
|
324
|
-
{
|
|
313
|
+
for (; (ProcessFirstHalf ? i && i.index() < j : i); ++i) {
|
|
325
314
|
LhsScalar lhs_ij = i.value();
|
|
326
|
-
if(!LhsIsRowMajor) lhs_ij = numext::conj(lhs_ij);
|
|
327
|
-
res_j += lhs_ij * rhs.coeff(i.index(),k);
|
|
328
|
-
res(i.index(),k) += numext::conj(lhs_ij) * rhs_j;
|
|
315
|
+
if (!LhsIsRowMajor) lhs_ij = numext::conj(lhs_ij);
|
|
316
|
+
res_j += lhs_ij * rhs.coeff(i.index(), k);
|
|
317
|
+
res(i.index(), k) += numext::conj(lhs_ij) * rhs_j;
|
|
329
318
|
}
|
|
330
|
-
res.coeffRef(j,k) += alpha * res_j;
|
|
319
|
+
res.coeffRef(j, k) += alpha * res_j;
|
|
331
320
|
|
|
332
321
|
// handle diagonal coeff
|
|
333
|
-
if (ProcessFirstHalf && i && (i.index()==j))
|
|
334
|
-
res.coeffRef(j,k) += alpha * i.value() * rhs.coeff(j,k);
|
|
322
|
+
if (ProcessFirstHalf && i && (i.index() == j)) res.coeffRef(j, k) += alpha * i.value() * rhs.coeff(j, k);
|
|
335
323
|
}
|
|
336
324
|
}
|
|
337
325
|
}
|
|
338
326
|
|
|
339
|
-
|
|
340
|
-
template<typename LhsView, typename Rhs, int ProductType>
|
|
327
|
+
template <typename LhsView, typename Rhs, int ProductType>
|
|
341
328
|
struct generic_product_impl<LhsView, Rhs, SparseSelfAdjointShape, DenseShape, ProductType>
|
|
342
|
-
: generic_product_impl_base<LhsView, Rhs,
|
|
343
|
-
{
|
|
344
|
-
template<typename Dest>
|
|
345
|
-
static void scaleAndAddTo(Dest& dst, const LhsView& lhsView, const Rhs& rhs, const typename Dest::Scalar& alpha)
|
|
346
|
-
|
|
347
|
-
typedef typename
|
|
348
|
-
typedef typename nested_eval<
|
|
349
|
-
typedef typename nested_eval<Rhs,Dynamic>::type RhsNested;
|
|
329
|
+
: generic_product_impl_base<LhsView, Rhs,
|
|
330
|
+
generic_product_impl<LhsView, Rhs, SparseSelfAdjointShape, DenseShape, ProductType> > {
|
|
331
|
+
template <typename Dest>
|
|
332
|
+
static void scaleAndAddTo(Dest& dst, const LhsView& lhsView, const Rhs& rhs, const typename Dest::Scalar& alpha) {
|
|
333
|
+
typedef typename LhsView::MatrixTypeNested_ Lhs;
|
|
334
|
+
typedef typename nested_eval<Lhs, Dynamic>::type LhsNested;
|
|
335
|
+
typedef typename nested_eval<Rhs, Dynamic>::type RhsNested;
|
|
350
336
|
LhsNested lhsNested(lhsView.matrix());
|
|
351
337
|
RhsNested rhsNested(rhs);
|
|
352
|
-
|
|
338
|
+
|
|
353
339
|
internal::sparse_selfadjoint_time_dense_product<LhsView::Mode>(lhsNested, rhsNested, dst, alpha);
|
|
354
340
|
}
|
|
355
341
|
};
|
|
356
342
|
|
|
357
|
-
template<typename Lhs, typename RhsView, int ProductType>
|
|
343
|
+
template <typename Lhs, typename RhsView, int ProductType>
|
|
358
344
|
struct generic_product_impl<Lhs, RhsView, DenseShape, SparseSelfAdjointShape, ProductType>
|
|
359
|
-
: generic_product_impl_base<Lhs, RhsView,
|
|
360
|
-
{
|
|
361
|
-
template<typename Dest>
|
|
362
|
-
static void scaleAndAddTo(Dest& dst, const Lhs& lhs, const RhsView& rhsView, const typename Dest::Scalar& alpha)
|
|
363
|
-
|
|
364
|
-
typedef typename
|
|
365
|
-
typedef typename nested_eval<
|
|
366
|
-
typedef typename nested_eval<Rhs,Dynamic>::type RhsNested;
|
|
345
|
+
: generic_product_impl_base<Lhs, RhsView,
|
|
346
|
+
generic_product_impl<Lhs, RhsView, DenseShape, SparseSelfAdjointShape, ProductType> > {
|
|
347
|
+
template <typename Dest>
|
|
348
|
+
static void scaleAndAddTo(Dest& dst, const Lhs& lhs, const RhsView& rhsView, const typename Dest::Scalar& alpha) {
|
|
349
|
+
typedef typename RhsView::MatrixTypeNested_ Rhs;
|
|
350
|
+
typedef typename nested_eval<Lhs, Dynamic>::type LhsNested;
|
|
351
|
+
typedef typename nested_eval<Rhs, Dynamic>::type RhsNested;
|
|
367
352
|
LhsNested lhsNested(lhs);
|
|
368
353
|
RhsNested rhsNested(rhsView.matrix());
|
|
369
|
-
|
|
354
|
+
|
|
370
355
|
// transpose everything
|
|
371
356
|
Transpose<Dest> dstT(dst);
|
|
372
|
-
internal::sparse_selfadjoint_time_dense_product<RhsView::TransposeMode>(rhsNested.transpose(),
|
|
357
|
+
internal::sparse_selfadjoint_time_dense_product<RhsView::TransposeMode>(rhsNested.transpose(),
|
|
358
|
+
lhsNested.transpose(), dstT, alpha);
|
|
373
359
|
}
|
|
374
360
|
};
|
|
375
361
|
|
|
376
362
|
// NOTE: these two overloads are needed to evaluate the sparse selfadjoint view into a full sparse matrix
|
|
377
363
|
// TODO: maybe the copy could be handled by generic_product_impl so that these overloads would not be needed anymore
|
|
378
364
|
|
|
379
|
-
template<typename LhsView, typename Rhs, int ProductTag>
|
|
365
|
+
template <typename LhsView, typename Rhs, int ProductTag>
|
|
380
366
|
struct product_evaluator<Product<LhsView, Rhs, DefaultProduct>, ProductTag, SparseSelfAdjointShape, SparseShape>
|
|
381
|
-
|
|
382
|
-
{
|
|
367
|
+
: public evaluator<typename Product<typename Rhs::PlainObject, Rhs, DefaultProduct>::PlainObject> {
|
|
383
368
|
typedef Product<LhsView, Rhs, DefaultProduct> XprType;
|
|
384
369
|
typedef typename XprType::PlainObject PlainObject;
|
|
385
370
|
typedef evaluator<PlainObject> Base;
|
|
386
371
|
|
|
387
|
-
product_evaluator(const XprType& xpr)
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
generic_product_impl<typename Rhs::PlainObject, Rhs, SparseShape, SparseShape, ProductTag>::evalTo(m_result, m_lhs, xpr.rhs());
|
|
372
|
+
product_evaluator(const XprType& xpr) : m_lhs(xpr.lhs()), m_result(xpr.rows(), xpr.cols()) {
|
|
373
|
+
internal::construct_at<Base>(this, m_result);
|
|
374
|
+
generic_product_impl<typename Rhs::PlainObject, Rhs, SparseShape, SparseShape, ProductTag>::evalTo(m_result, m_lhs,
|
|
375
|
+
xpr.rhs());
|
|
392
376
|
}
|
|
393
|
-
|
|
394
|
-
protected:
|
|
377
|
+
|
|
378
|
+
protected:
|
|
395
379
|
typename Rhs::PlainObject m_lhs;
|
|
396
380
|
PlainObject m_result;
|
|
397
381
|
};
|
|
398
382
|
|
|
399
|
-
template<typename Lhs, typename RhsView, int ProductTag>
|
|
383
|
+
template <typename Lhs, typename RhsView, int ProductTag>
|
|
400
384
|
struct product_evaluator<Product<Lhs, RhsView, DefaultProduct>, ProductTag, SparseShape, SparseSelfAdjointShape>
|
|
401
|
-
|
|
402
|
-
{
|
|
385
|
+
: public evaluator<typename Product<Lhs, typename Lhs::PlainObject, DefaultProduct>::PlainObject> {
|
|
403
386
|
typedef Product<Lhs, RhsView, DefaultProduct> XprType;
|
|
404
387
|
typedef typename XprType::PlainObject PlainObject;
|
|
405
388
|
typedef evaluator<PlainObject> Base;
|
|
406
389
|
|
|
407
|
-
product_evaluator(const XprType& xpr)
|
|
408
|
-
: m_rhs(xpr.rhs()), m_result(xpr.rows(), xpr.cols())
|
|
409
|
-
{
|
|
390
|
+
product_evaluator(const XprType& xpr) : m_rhs(xpr.rhs()), m_result(xpr.rows(), xpr.cols()) {
|
|
410
391
|
::new (static_cast<Base*>(this)) Base(m_result);
|
|
411
|
-
generic_product_impl<Lhs, typename Lhs::PlainObject, SparseShape, SparseShape, ProductTag>::evalTo(
|
|
392
|
+
generic_product_impl<Lhs, typename Lhs::PlainObject, SparseShape, SparseShape, ProductTag>::evalTo(
|
|
393
|
+
m_result, xpr.lhs(), m_rhs);
|
|
412
394
|
}
|
|
413
|
-
|
|
414
|
-
protected:
|
|
395
|
+
|
|
396
|
+
protected:
|
|
415
397
|
typename Lhs::PlainObject m_rhs;
|
|
416
398
|
PlainObject m_result;
|
|
417
399
|
};
|
|
418
400
|
|
|
419
|
-
}
|
|
401
|
+
} // namespace internal
|
|
420
402
|
|
|
421
403
|
/***************************************************************************
|
|
422
|
-
* Implementation of symmetric copies and permutations
|
|
423
|
-
***************************************************************************/
|
|
404
|
+
* Implementation of symmetric copies and permutations
|
|
405
|
+
***************************************************************************/
|
|
424
406
|
namespace internal {
|
|
425
407
|
|
|
426
|
-
template<int Mode,typename MatrixType,int DestOrder>
|
|
427
|
-
void permute_symm_to_fullsymm(
|
|
428
|
-
|
|
408
|
+
template <int Mode, bool NonHermitian, typename MatrixType, int DestOrder>
|
|
409
|
+
void permute_symm_to_fullsymm(
|
|
410
|
+
const MatrixType& mat,
|
|
411
|
+
SparseMatrix<typename MatrixType::Scalar, DestOrder, typename MatrixType::StorageIndex>& _dest,
|
|
412
|
+
const typename MatrixType::StorageIndex* perm) {
|
|
429
413
|
typedef typename MatrixType::StorageIndex StorageIndex;
|
|
430
414
|
typedef typename MatrixType::Scalar Scalar;
|
|
431
|
-
typedef SparseMatrix<Scalar,DestOrder,StorageIndex> Dest;
|
|
432
|
-
typedef Matrix<StorageIndex,Dynamic,1> VectorI;
|
|
415
|
+
typedef SparseMatrix<Scalar, DestOrder, StorageIndex> Dest;
|
|
416
|
+
typedef Matrix<StorageIndex, Dynamic, 1> VectorI;
|
|
433
417
|
typedef evaluator<MatrixType> MatEval;
|
|
434
418
|
typedef typename evaluator<MatrixType>::InnerIterator MatIterator;
|
|
435
|
-
|
|
419
|
+
|
|
436
420
|
MatEval matEval(mat);
|
|
437
421
|
Dest& dest(_dest.derived());
|
|
438
|
-
enum {
|
|
439
|
-
|
|
440
|
-
};
|
|
441
|
-
|
|
422
|
+
enum { StorageOrderMatch = int(Dest::IsRowMajor) == int(MatrixType::IsRowMajor) };
|
|
423
|
+
|
|
442
424
|
Index size = mat.rows();
|
|
443
425
|
VectorI count;
|
|
444
426
|
count.resize(size);
|
|
445
427
|
count.setZero();
|
|
446
|
-
dest.resize(size,size);
|
|
447
|
-
for(Index j = 0; j<size; ++j)
|
|
448
|
-
{
|
|
428
|
+
dest.resize(size, size);
|
|
429
|
+
for (Index j = 0; j < size; ++j) {
|
|
449
430
|
Index jp = perm ? perm[j] : j;
|
|
450
|
-
for(MatIterator it(matEval,j); it; ++it)
|
|
451
|
-
{
|
|
431
|
+
for (MatIterator it(matEval, j); it; ++it) {
|
|
452
432
|
Index i = it.index();
|
|
453
433
|
Index r = it.row();
|
|
454
434
|
Index c = it.col();
|
|
455
435
|
Index ip = perm ? perm[i] : i;
|
|
456
|
-
if(Mode==int(Upper|Lower))
|
|
436
|
+
if (Mode == int(Upper | Lower))
|
|
457
437
|
count[StorageOrderMatch ? jp : ip]++;
|
|
458
|
-
else if(r==c)
|
|
438
|
+
else if (r == c)
|
|
459
439
|
count[ip]++;
|
|
460
|
-
else if((
|
|
461
|
-
{
|
|
440
|
+
else if ((Mode == Lower && r > c) || (Mode == Upper && r < c)) {
|
|
462
441
|
count[ip]++;
|
|
463
442
|
count[jp]++;
|
|
464
443
|
}
|
|
465
444
|
}
|
|
466
445
|
}
|
|
467
446
|
Index nnz = count.sum();
|
|
468
|
-
|
|
447
|
+
|
|
469
448
|
// reserve space
|
|
470
449
|
dest.resizeNonZeros(nnz);
|
|
471
450
|
dest.outerIndexPtr()[0] = 0;
|
|
472
|
-
for(Index j=0; j<size; ++j)
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
count[j] = dest.outerIndexPtr()[j];
|
|
476
|
-
|
|
451
|
+
for (Index j = 0; j < size; ++j) dest.outerIndexPtr()[j + 1] = dest.outerIndexPtr()[j] + count[j];
|
|
452
|
+
for (Index j = 0; j < size; ++j) count[j] = dest.outerIndexPtr()[j];
|
|
453
|
+
|
|
477
454
|
// copy data
|
|
478
|
-
for(StorageIndex j = 0; j<size; ++j)
|
|
479
|
-
|
|
480
|
-
for(MatIterator it(matEval,j); it; ++it)
|
|
481
|
-
{
|
|
455
|
+
for (StorageIndex j = 0; j < size; ++j) {
|
|
456
|
+
for (MatIterator it(matEval, j); it; ++it) {
|
|
482
457
|
StorageIndex i = internal::convert_index<StorageIndex>(it.index());
|
|
483
458
|
Index r = it.row();
|
|
484
459
|
Index c = it.col();
|
|
485
|
-
|
|
460
|
+
|
|
486
461
|
StorageIndex jp = perm ? perm[j] : j;
|
|
487
462
|
StorageIndex ip = perm ? perm[i] : i;
|
|
488
|
-
|
|
489
|
-
if(Mode==int(Upper|Lower))
|
|
490
|
-
{
|
|
463
|
+
|
|
464
|
+
if (Mode == int(Upper | Lower)) {
|
|
491
465
|
Index k = count[StorageOrderMatch ? jp : ip]++;
|
|
492
466
|
dest.innerIndexPtr()[k] = StorageOrderMatch ? ip : jp;
|
|
493
467
|
dest.valuePtr()[k] = it.value();
|
|
494
|
-
}
|
|
495
|
-
else if(r==c)
|
|
496
|
-
{
|
|
468
|
+
} else if (r == c) {
|
|
497
469
|
Index k = count[ip]++;
|
|
498
470
|
dest.innerIndexPtr()[k] = ip;
|
|
499
471
|
dest.valuePtr()[k] = it.value();
|
|
500
|
-
}
|
|
501
|
-
|
|
502
|
-
{
|
|
503
|
-
if(!StorageOrderMatch)
|
|
504
|
-
std::swap(ip,jp);
|
|
472
|
+
} else if (((Mode & Lower) == Lower && r > c) || ((Mode & Upper) == Upper && r < c)) {
|
|
473
|
+
if (!StorageOrderMatch) std::swap(ip, jp);
|
|
505
474
|
Index k = count[jp]++;
|
|
506
475
|
dest.innerIndexPtr()[k] = ip;
|
|
507
476
|
dest.valuePtr()[k] = it.value();
|
|
508
477
|
k = count[ip]++;
|
|
509
478
|
dest.innerIndexPtr()[k] = jp;
|
|
510
|
-
dest.valuePtr()[k] = numext::conj(it.value());
|
|
479
|
+
dest.valuePtr()[k] = (NonHermitian ? it.value() : numext::conj(it.value()));
|
|
511
480
|
}
|
|
512
481
|
}
|
|
513
482
|
}
|
|
514
483
|
}
|
|
515
484
|
|
|
516
|
-
template<int
|
|
517
|
-
void permute_symm_to_symm(const MatrixType& mat,
|
|
518
|
-
|
|
485
|
+
template <int SrcMode_, int DstMode_, bool NonHermitian, typename MatrixType, int DstOrder>
|
|
486
|
+
void permute_symm_to_symm(const MatrixType& mat,
|
|
487
|
+
SparseMatrix<typename MatrixType::Scalar, DstOrder, typename MatrixType::StorageIndex>& _dest,
|
|
488
|
+
const typename MatrixType::StorageIndex* perm) {
|
|
519
489
|
typedef typename MatrixType::StorageIndex StorageIndex;
|
|
520
490
|
typedef typename MatrixType::Scalar Scalar;
|
|
521
|
-
SparseMatrix<Scalar,DstOrder,StorageIndex>& dest(_dest.derived());
|
|
522
|
-
typedef Matrix<StorageIndex,Dynamic,1> VectorI;
|
|
491
|
+
SparseMatrix<Scalar, DstOrder, StorageIndex>& dest(_dest.derived());
|
|
492
|
+
typedef Matrix<StorageIndex, Dynamic, 1> VectorI;
|
|
523
493
|
typedef evaluator<MatrixType> MatEval;
|
|
524
494
|
typedef typename evaluator<MatrixType>::InnerIterator MatIterator;
|
|
525
495
|
|
|
526
496
|
enum {
|
|
527
497
|
SrcOrder = MatrixType::IsRowMajor ? RowMajor : ColMajor,
|
|
528
498
|
StorageOrderMatch = int(SrcOrder) == int(DstOrder),
|
|
529
|
-
DstMode = DstOrder==RowMajor ? (
|
|
530
|
-
SrcMode = SrcOrder==RowMajor ? (
|
|
499
|
+
DstMode = DstOrder == RowMajor ? (DstMode_ == Upper ? Lower : Upper) : DstMode_,
|
|
500
|
+
SrcMode = SrcOrder == RowMajor ? (SrcMode_ == Upper ? Lower : Upper) : SrcMode_
|
|
531
501
|
};
|
|
532
502
|
|
|
533
503
|
MatEval matEval(mat);
|
|
534
|
-
|
|
504
|
+
|
|
535
505
|
Index size = mat.rows();
|
|
536
506
|
VectorI count(size);
|
|
537
507
|
count.setZero();
|
|
538
|
-
dest.resize(size,size);
|
|
539
|
-
for(StorageIndex j = 0; j<size; ++j)
|
|
540
|
-
{
|
|
508
|
+
dest.resize(size, size);
|
|
509
|
+
for (StorageIndex j = 0; j < size; ++j) {
|
|
541
510
|
StorageIndex jp = perm ? perm[j] : j;
|
|
542
|
-
for(MatIterator it(matEval,j); it; ++it)
|
|
543
|
-
{
|
|
511
|
+
for (MatIterator it(matEval, j); it; ++it) {
|
|
544
512
|
StorageIndex i = it.index();
|
|
545
|
-
if((int(SrcMode)==int(Lower) && i<j) || (int(SrcMode)==int(Upper) && i>j))
|
|
546
|
-
|
|
547
|
-
|
|
513
|
+
if ((int(SrcMode) == int(Lower) && i < j) || (int(SrcMode) == int(Upper) && i > j)) continue;
|
|
514
|
+
|
|
548
515
|
StorageIndex ip = perm ? perm[i] : i;
|
|
549
|
-
count[int(DstMode)==int(Lower) ? (std::min)(ip,jp) : (std::max)(ip,jp)]++;
|
|
516
|
+
count[int(DstMode) == int(Lower) ? (std::min)(ip, jp) : (std::max)(ip, jp)]++;
|
|
550
517
|
}
|
|
551
518
|
}
|
|
552
519
|
dest.outerIndexPtr()[0] = 0;
|
|
553
|
-
for(Index j=0; j<size; ++j)
|
|
554
|
-
dest.outerIndexPtr()[j+1] = dest.outerIndexPtr()[j] + count[j];
|
|
520
|
+
for (Index j = 0; j < size; ++j) dest.outerIndexPtr()[j + 1] = dest.outerIndexPtr()[j] + count[j];
|
|
555
521
|
dest.resizeNonZeros(dest.outerIndexPtr()[size]);
|
|
556
|
-
for(Index j=0; j<size; ++j)
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
{
|
|
561
|
-
|
|
562
|
-
for(MatIterator it(matEval,j); it; ++it)
|
|
563
|
-
{
|
|
522
|
+
for (Index j = 0; j < size; ++j) count[j] = dest.outerIndexPtr()[j];
|
|
523
|
+
|
|
524
|
+
for (StorageIndex j = 0; j < size; ++j) {
|
|
525
|
+
for (MatIterator it(matEval, j); it; ++it) {
|
|
564
526
|
StorageIndex i = it.index();
|
|
565
|
-
if((int(SrcMode)==int(Lower) && i<j) || (int(SrcMode)==int(Upper) && i>j))
|
|
566
|
-
|
|
567
|
-
|
|
527
|
+
if ((int(SrcMode) == int(Lower) && i < j) || (int(SrcMode) == int(Upper) && i > j)) continue;
|
|
528
|
+
|
|
568
529
|
StorageIndex jp = perm ? perm[j] : j;
|
|
569
|
-
StorageIndex ip = perm? perm[i] : i;
|
|
570
|
-
|
|
571
|
-
Index k = count[int(DstMode)==int(Lower) ? (std::min)(ip,jp) : (std::max)(ip,jp)]++;
|
|
572
|
-
dest.innerIndexPtr()[k] = int(DstMode)==int(Lower) ? (std::max)(ip,jp) : (std::min)(ip,jp);
|
|
573
|
-
|
|
574
|
-
if(!StorageOrderMatch) std::swap(ip,jp);
|
|
575
|
-
if
|
|
576
|
-
dest.valuePtr()[k] = numext::conj(it.value());
|
|
530
|
+
StorageIndex ip = perm ? perm[i] : i;
|
|
531
|
+
|
|
532
|
+
Index k = count[int(DstMode) == int(Lower) ? (std::min)(ip, jp) : (std::max)(ip, jp)]++;
|
|
533
|
+
dest.innerIndexPtr()[k] = int(DstMode) == int(Lower) ? (std::max)(ip, jp) : (std::min)(ip, jp);
|
|
534
|
+
|
|
535
|
+
if (!StorageOrderMatch) std::swap(ip, jp);
|
|
536
|
+
if (((int(DstMode) == int(Lower) && ip < jp) || (int(DstMode) == int(Upper) && ip > jp)))
|
|
537
|
+
dest.valuePtr()[k] = (NonHermitian ? it.value() : numext::conj(it.value()));
|
|
577
538
|
else
|
|
578
539
|
dest.valuePtr()[k] = it.value();
|
|
579
540
|
}
|
|
580
541
|
}
|
|
581
542
|
}
|
|
582
543
|
|
|
583
|
-
}
|
|
544
|
+
} // namespace internal
|
|
584
545
|
|
|
585
546
|
// TODO implement twists in a more evaluator friendly fashion
|
|
586
547
|
|
|
587
548
|
namespace internal {
|
|
588
549
|
|
|
589
|
-
template<typename MatrixType, int Mode>
|
|
590
|
-
struct traits<SparseSymmetricPermutationProduct<MatrixType,Mode> > : traits<MatrixType> {
|
|
591
|
-
};
|
|
550
|
+
template <typename MatrixType, int Mode>
|
|
551
|
+
struct traits<SparseSymmetricPermutationProduct<MatrixType, Mode> > : traits<MatrixType> {};
|
|
592
552
|
|
|
593
|
-
}
|
|
553
|
+
} // namespace internal
|
|
554
|
+
|
|
555
|
+
template <typename MatrixType, int Mode>
|
|
556
|
+
class SparseSymmetricPermutationProduct : public EigenBase<SparseSymmetricPermutationProduct<MatrixType, Mode> > {
|
|
557
|
+
public:
|
|
558
|
+
typedef typename MatrixType::Scalar Scalar;
|
|
559
|
+
typedef typename MatrixType::StorageIndex StorageIndex;
|
|
560
|
+
enum {
|
|
561
|
+
RowsAtCompileTime = internal::traits<SparseSymmetricPermutationProduct>::RowsAtCompileTime,
|
|
562
|
+
ColsAtCompileTime = internal::traits<SparseSymmetricPermutationProduct>::ColsAtCompileTime
|
|
563
|
+
};
|
|
564
|
+
|
|
565
|
+
protected:
|
|
566
|
+
typedef PermutationMatrix<Dynamic, Dynamic, StorageIndex> Perm;
|
|
594
567
|
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
public:
|
|
600
|
-
typedef typename MatrixType::Scalar Scalar;
|
|
601
|
-
typedef typename MatrixType::StorageIndex StorageIndex;
|
|
602
|
-
enum {
|
|
603
|
-
RowsAtCompileTime = internal::traits<SparseSymmetricPermutationProduct>::RowsAtCompileTime,
|
|
604
|
-
ColsAtCompileTime = internal::traits<SparseSymmetricPermutationProduct>::ColsAtCompileTime
|
|
605
|
-
};
|
|
606
|
-
protected:
|
|
607
|
-
typedef PermutationMatrix<Dynamic,Dynamic,StorageIndex> Perm;
|
|
608
|
-
public:
|
|
609
|
-
typedef Matrix<StorageIndex,Dynamic,1> VectorI;
|
|
610
|
-
typedef typename MatrixType::Nested MatrixTypeNested;
|
|
611
|
-
typedef typename internal::remove_all<MatrixTypeNested>::type NestedExpression;
|
|
612
|
-
|
|
613
|
-
SparseSymmetricPermutationProduct(const MatrixType& mat, const Perm& perm)
|
|
614
|
-
: m_matrix(mat), m_perm(perm)
|
|
615
|
-
{}
|
|
616
|
-
|
|
617
|
-
inline Index rows() const { return m_matrix.rows(); }
|
|
618
|
-
inline Index cols() const { return m_matrix.cols(); }
|
|
619
|
-
|
|
620
|
-
const NestedExpression& matrix() const { return m_matrix; }
|
|
621
|
-
const Perm& perm() const { return m_perm; }
|
|
622
|
-
|
|
623
|
-
protected:
|
|
624
|
-
MatrixTypeNested m_matrix;
|
|
625
|
-
const Perm& m_perm;
|
|
568
|
+
public:
|
|
569
|
+
typedef Matrix<StorageIndex, Dynamic, 1> VectorI;
|
|
570
|
+
typedef typename MatrixType::Nested MatrixTypeNested;
|
|
571
|
+
typedef internal::remove_all_t<MatrixTypeNested> NestedExpression;
|
|
626
572
|
|
|
573
|
+
SparseSymmetricPermutationProduct(const MatrixType& mat, const Perm& perm) : m_matrix(mat), m_perm(perm) {}
|
|
574
|
+
|
|
575
|
+
inline Index rows() const { return m_matrix.rows(); }
|
|
576
|
+
inline Index cols() const { return m_matrix.cols(); }
|
|
577
|
+
|
|
578
|
+
const NestedExpression& matrix() const { return m_matrix; }
|
|
579
|
+
const Perm& perm() const { return m_perm; }
|
|
580
|
+
|
|
581
|
+
protected:
|
|
582
|
+
MatrixTypeNested m_matrix;
|
|
583
|
+
const Perm& m_perm;
|
|
627
584
|
};
|
|
628
585
|
|
|
629
586
|
namespace internal {
|
|
630
|
-
|
|
631
|
-
template<typename DstXprType, typename MatrixType, int Mode, typename Scalar>
|
|
632
|
-
struct Assignment<DstXprType, SparseSymmetricPermutationProduct<MatrixType,Mode>,
|
|
633
|
-
{
|
|
634
|
-
typedef SparseSymmetricPermutationProduct<MatrixType,Mode> SrcXprType;
|
|
587
|
+
|
|
588
|
+
template <typename DstXprType, typename MatrixType, int Mode, typename Scalar>
|
|
589
|
+
struct Assignment<DstXprType, SparseSymmetricPermutationProduct<MatrixType, Mode>,
|
|
590
|
+
internal::assign_op<Scalar, typename MatrixType::Scalar>, Sparse2Sparse> {
|
|
591
|
+
typedef SparseSymmetricPermutationProduct<MatrixType, Mode> SrcXprType;
|
|
635
592
|
typedef typename DstXprType::StorageIndex DstIndex;
|
|
636
|
-
template<int Options>
|
|
637
|
-
static void run(SparseMatrix<Scalar,Options,DstIndex
|
|
638
|
-
|
|
593
|
+
template <int Options>
|
|
594
|
+
static void run(SparseMatrix<Scalar, Options, DstIndex>& dst, const SrcXprType& src,
|
|
595
|
+
const internal::assign_op<Scalar, typename MatrixType::Scalar>&) {
|
|
639
596
|
// internal::permute_symm_to_fullsymm<Mode>(m_matrix,_dest,m_perm.indices().data());
|
|
640
|
-
SparseMatrix<Scalar,(Options&RowMajor)==RowMajor ? ColMajor : RowMajor, DstIndex> tmp;
|
|
641
|
-
internal::permute_symm_to_fullsymm<Mode>(src.matrix(),tmp,src.perm().indices().data());
|
|
597
|
+
SparseMatrix<Scalar, (Options & RowMajor) == RowMajor ? ColMajor : RowMajor, DstIndex> tmp;
|
|
598
|
+
internal::permute_symm_to_fullsymm<Mode, false>(src.matrix(), tmp, src.perm().indices().data());
|
|
642
599
|
dst = tmp;
|
|
643
600
|
}
|
|
644
|
-
|
|
645
|
-
template<typename DestType,unsigned int DestMode>
|
|
646
|
-
static void run(SparseSelfAdjointView<DestType,DestMode>& dst, const SrcXprType
|
|
647
|
-
|
|
648
|
-
internal::permute_symm_to_symm<Mode,DestMode>(src.matrix(),dst.matrix(),src.perm().indices().data());
|
|
601
|
+
|
|
602
|
+
template <typename DestType, unsigned int DestMode>
|
|
603
|
+
static void run(SparseSelfAdjointView<DestType, DestMode>& dst, const SrcXprType& src,
|
|
604
|
+
const internal::assign_op<Scalar, typename MatrixType::Scalar>&) {
|
|
605
|
+
internal::permute_symm_to_symm<Mode, DestMode, false>(src.matrix(), dst.matrix(), src.perm().indices().data());
|
|
649
606
|
}
|
|
650
607
|
};
|
|
651
608
|
|
|
652
|
-
}
|
|
609
|
+
} // end namespace internal
|
|
653
610
|
|
|
654
|
-
}
|
|
611
|
+
} // end namespace Eigen
|
|
655
612
|
|
|
656
|
-
#endif
|
|
613
|
+
#endif // EIGEN_SPARSE_SELFADJOINTVIEW_H
|