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