@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
|
@@ -20,623 +20,587 @@
|
|
|
20
20
|
#endif
|
|
21
21
|
#endif
|
|
22
22
|
|
|
23
|
+
// IWYU pragma: private
|
|
24
|
+
#include "./InternalHeaderCheck.h"
|
|
25
|
+
|
|
23
26
|
namespace Eigen {
|
|
24
27
|
|
|
25
28
|
/* TODO extract L, extract U, compute det, etc... */
|
|
26
29
|
|
|
27
30
|
// generic double/complex<double> wrapper functions:
|
|
28
31
|
|
|
32
|
+
// Defaults
|
|
33
|
+
inline void umfpack_defaults(double control[UMFPACK_CONTROL], double, int) { umfpack_di_defaults(control); }
|
|
29
34
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
inline void umfpack_defaults(double control[UMFPACK_CONTROL], std::complex<double>, int)
|
|
35
|
-
{ umfpack_zi_defaults(control); }
|
|
35
|
+
inline void umfpack_defaults(double control[UMFPACK_CONTROL], std::complex<double>, int) {
|
|
36
|
+
umfpack_zi_defaults(control);
|
|
37
|
+
}
|
|
36
38
|
|
|
37
|
-
inline void umfpack_defaults(double control[UMFPACK_CONTROL], double, SuiteSparse_long)
|
|
38
|
-
|
|
39
|
+
inline void umfpack_defaults(double control[UMFPACK_CONTROL], double, SuiteSparse_long) {
|
|
40
|
+
umfpack_dl_defaults(control);
|
|
41
|
+
}
|
|
39
42
|
|
|
40
|
-
inline void umfpack_defaults(double control[UMFPACK_CONTROL], std::complex<double>, SuiteSparse_long)
|
|
41
|
-
|
|
43
|
+
inline void umfpack_defaults(double control[UMFPACK_CONTROL], std::complex<double>, SuiteSparse_long) {
|
|
44
|
+
umfpack_zl_defaults(control);
|
|
45
|
+
}
|
|
42
46
|
|
|
43
47
|
// Report info
|
|
44
|
-
inline void umfpack_report_info(double control[UMFPACK_CONTROL], double info[UMFPACK_INFO], double, int)
|
|
45
|
-
|
|
48
|
+
inline void umfpack_report_info(double control[UMFPACK_CONTROL], double info[UMFPACK_INFO], double, int) {
|
|
49
|
+
umfpack_di_report_info(control, info);
|
|
50
|
+
}
|
|
46
51
|
|
|
47
|
-
inline void umfpack_report_info(double control[UMFPACK_CONTROL], double info[UMFPACK_INFO], std::complex<double>, int)
|
|
48
|
-
|
|
52
|
+
inline void umfpack_report_info(double control[UMFPACK_CONTROL], double info[UMFPACK_INFO], std::complex<double>, int) {
|
|
53
|
+
umfpack_zi_report_info(control, info);
|
|
54
|
+
}
|
|
49
55
|
|
|
50
|
-
inline void umfpack_report_info(double control[UMFPACK_CONTROL], double info[UMFPACK_INFO], double, SuiteSparse_long)
|
|
51
|
-
|
|
56
|
+
inline void umfpack_report_info(double control[UMFPACK_CONTROL], double info[UMFPACK_INFO], double, SuiteSparse_long) {
|
|
57
|
+
umfpack_dl_report_info(control, info);
|
|
58
|
+
}
|
|
52
59
|
|
|
53
|
-
inline void umfpack_report_info(double control[UMFPACK_CONTROL], double info[UMFPACK_INFO], std::complex<double>,
|
|
54
|
-
{
|
|
60
|
+
inline void umfpack_report_info(double control[UMFPACK_CONTROL], double info[UMFPACK_INFO], std::complex<double>,
|
|
61
|
+
SuiteSparse_long) {
|
|
62
|
+
umfpack_zl_report_info(control, info);
|
|
63
|
+
}
|
|
55
64
|
|
|
56
65
|
// Report status
|
|
57
|
-
inline void umfpack_report_status(double control[UMFPACK_CONTROL], int status, double, int)
|
|
58
|
-
|
|
66
|
+
inline void umfpack_report_status(double control[UMFPACK_CONTROL], int status, double, int) {
|
|
67
|
+
umfpack_di_report_status(control, status);
|
|
68
|
+
}
|
|
59
69
|
|
|
60
|
-
inline void umfpack_report_status(double control[UMFPACK_CONTROL], int status, std::complex<double>, int)
|
|
61
|
-
|
|
70
|
+
inline void umfpack_report_status(double control[UMFPACK_CONTROL], int status, std::complex<double>, int) {
|
|
71
|
+
umfpack_zi_report_status(control, status);
|
|
72
|
+
}
|
|
62
73
|
|
|
63
|
-
inline void umfpack_report_status(double control[UMFPACK_CONTROL], int status, double, SuiteSparse_long)
|
|
64
|
-
|
|
74
|
+
inline void umfpack_report_status(double control[UMFPACK_CONTROL], int status, double, SuiteSparse_long) {
|
|
75
|
+
umfpack_dl_report_status(control, status);
|
|
76
|
+
}
|
|
65
77
|
|
|
66
|
-
inline void umfpack_report_status(double control[UMFPACK_CONTROL], int status, std::complex<double>, SuiteSparse_long)
|
|
67
|
-
|
|
78
|
+
inline void umfpack_report_status(double control[UMFPACK_CONTROL], int status, std::complex<double>, SuiteSparse_long) {
|
|
79
|
+
umfpack_zl_report_status(control, status);
|
|
80
|
+
}
|
|
68
81
|
|
|
69
82
|
// report control
|
|
70
|
-
inline void umfpack_report_control(double control[UMFPACK_CONTROL], double, int)
|
|
71
|
-
{ umfpack_di_report_control(control);}
|
|
83
|
+
inline void umfpack_report_control(double control[UMFPACK_CONTROL], double, int) { umfpack_di_report_control(control); }
|
|
72
84
|
|
|
73
|
-
inline void umfpack_report_control(double control[UMFPACK_CONTROL], std::complex<double>, int)
|
|
74
|
-
|
|
85
|
+
inline void umfpack_report_control(double control[UMFPACK_CONTROL], std::complex<double>, int) {
|
|
86
|
+
umfpack_zi_report_control(control);
|
|
87
|
+
}
|
|
75
88
|
|
|
76
|
-
inline void umfpack_report_control(double control[UMFPACK_CONTROL], double, SuiteSparse_long)
|
|
77
|
-
|
|
89
|
+
inline void umfpack_report_control(double control[UMFPACK_CONTROL], double, SuiteSparse_long) {
|
|
90
|
+
umfpack_dl_report_control(control);
|
|
91
|
+
}
|
|
78
92
|
|
|
79
|
-
inline void umfpack_report_control(double control[UMFPACK_CONTROL], std::complex<double>, SuiteSparse_long)
|
|
80
|
-
|
|
93
|
+
inline void umfpack_report_control(double control[UMFPACK_CONTROL], std::complex<double>, SuiteSparse_long) {
|
|
94
|
+
umfpack_zl_report_control(control);
|
|
95
|
+
}
|
|
81
96
|
|
|
82
97
|
// Free numeric
|
|
83
|
-
inline void umfpack_free_numeric(void **Numeric, double, int)
|
|
84
|
-
|
|
98
|
+
inline void umfpack_free_numeric(void **Numeric, double, int) {
|
|
99
|
+
umfpack_di_free_numeric(Numeric);
|
|
100
|
+
*Numeric = 0;
|
|
101
|
+
}
|
|
85
102
|
|
|
86
|
-
inline void umfpack_free_numeric(void **Numeric, std::complex<double>, int)
|
|
87
|
-
|
|
103
|
+
inline void umfpack_free_numeric(void **Numeric, std::complex<double>, int) {
|
|
104
|
+
umfpack_zi_free_numeric(Numeric);
|
|
105
|
+
*Numeric = 0;
|
|
106
|
+
}
|
|
88
107
|
|
|
89
|
-
inline void umfpack_free_numeric(void **Numeric, double, SuiteSparse_long)
|
|
90
|
-
|
|
108
|
+
inline void umfpack_free_numeric(void **Numeric, double, SuiteSparse_long) {
|
|
109
|
+
umfpack_dl_free_numeric(Numeric);
|
|
110
|
+
*Numeric = 0;
|
|
111
|
+
}
|
|
91
112
|
|
|
92
|
-
inline void umfpack_free_numeric(void **Numeric, std::complex<double>, SuiteSparse_long)
|
|
93
|
-
|
|
113
|
+
inline void umfpack_free_numeric(void **Numeric, std::complex<double>, SuiteSparse_long) {
|
|
114
|
+
umfpack_zl_free_numeric(Numeric);
|
|
115
|
+
*Numeric = 0;
|
|
116
|
+
}
|
|
94
117
|
|
|
95
118
|
// Free symbolic
|
|
96
|
-
inline void umfpack_free_symbolic(void **Symbolic, double, int)
|
|
97
|
-
|
|
119
|
+
inline void umfpack_free_symbolic(void **Symbolic, double, int) {
|
|
120
|
+
umfpack_di_free_symbolic(Symbolic);
|
|
121
|
+
*Symbolic = 0;
|
|
122
|
+
}
|
|
98
123
|
|
|
99
|
-
inline void umfpack_free_symbolic(void **Symbolic, std::complex<double>, int)
|
|
100
|
-
|
|
124
|
+
inline void umfpack_free_symbolic(void **Symbolic, std::complex<double>, int) {
|
|
125
|
+
umfpack_zi_free_symbolic(Symbolic);
|
|
126
|
+
*Symbolic = 0;
|
|
127
|
+
}
|
|
101
128
|
|
|
102
|
-
inline void umfpack_free_symbolic(void **Symbolic, double, SuiteSparse_long)
|
|
103
|
-
|
|
129
|
+
inline void umfpack_free_symbolic(void **Symbolic, double, SuiteSparse_long) {
|
|
130
|
+
umfpack_dl_free_symbolic(Symbolic);
|
|
131
|
+
*Symbolic = 0;
|
|
132
|
+
}
|
|
104
133
|
|
|
105
|
-
inline void umfpack_free_symbolic(void **Symbolic, std::complex<double>, SuiteSparse_long)
|
|
106
|
-
|
|
134
|
+
inline void umfpack_free_symbolic(void **Symbolic, std::complex<double>, SuiteSparse_long) {
|
|
135
|
+
umfpack_zl_free_symbolic(Symbolic);
|
|
136
|
+
*Symbolic = 0;
|
|
137
|
+
}
|
|
107
138
|
|
|
108
139
|
// Symbolic
|
|
109
|
-
inline int umfpack_symbolic(int n_row,int n_col,
|
|
110
|
-
const
|
|
111
|
-
|
|
112
|
-
{
|
|
113
|
-
return umfpack_di_symbolic(n_row,n_col,Ap,Ai,Ax,Symbolic,Control,Info);
|
|
140
|
+
inline int umfpack_symbolic(int n_row, int n_col, const int Ap[], const int Ai[], const double Ax[], void **Symbolic,
|
|
141
|
+
const double Control[UMFPACK_CONTROL], double Info[UMFPACK_INFO]) {
|
|
142
|
+
return umfpack_di_symbolic(n_row, n_col, Ap, Ai, Ax, Symbolic, Control, Info);
|
|
114
143
|
}
|
|
115
144
|
|
|
116
|
-
inline int umfpack_symbolic(int n_row,int n_col,
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
{
|
|
120
|
-
return umfpack_zi_symbolic(n_row,n_col,Ap,Ai,&numext::real_ref(Ax[0]),0,Symbolic,Control,Info);
|
|
145
|
+
inline int umfpack_symbolic(int n_row, int n_col, const int Ap[], const int Ai[], const std::complex<double> Ax[],
|
|
146
|
+
void **Symbolic, const double Control[UMFPACK_CONTROL], double Info[UMFPACK_INFO]) {
|
|
147
|
+
return umfpack_zi_symbolic(n_row, n_col, Ap, Ai, &numext::real_ref(Ax[0]), 0, Symbolic, Control, Info);
|
|
121
148
|
}
|
|
122
|
-
inline SuiteSparse_long umfpack_symbolic(
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
return umfpack_dl_symbolic(n_row,n_col,Ap,Ai,Ax,Symbolic,Control,Info);
|
|
149
|
+
inline SuiteSparse_long umfpack_symbolic(SuiteSparse_long n_row, SuiteSparse_long n_col, const SuiteSparse_long Ap[],
|
|
150
|
+
const SuiteSparse_long Ai[], const double Ax[], void **Symbolic,
|
|
151
|
+
const double Control[UMFPACK_CONTROL], double Info[UMFPACK_INFO]) {
|
|
152
|
+
return umfpack_dl_symbolic(n_row, n_col, Ap, Ai, Ax, Symbolic, Control, Info);
|
|
127
153
|
}
|
|
128
154
|
|
|
129
|
-
inline SuiteSparse_long umfpack_symbolic(
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
return umfpack_zl_symbolic(n_row,n_col,Ap,Ai,&numext::real_ref(Ax[0]),0,Symbolic,Control,Info);
|
|
155
|
+
inline SuiteSparse_long umfpack_symbolic(SuiteSparse_long n_row, SuiteSparse_long n_col, const SuiteSparse_long Ap[],
|
|
156
|
+
const SuiteSparse_long Ai[], const std::complex<double> Ax[], void **Symbolic,
|
|
157
|
+
const double Control[UMFPACK_CONTROL], double Info[UMFPACK_INFO]) {
|
|
158
|
+
return umfpack_zl_symbolic(n_row, n_col, Ap, Ai, &numext::real_ref(Ax[0]), 0, Symbolic, Control, Info);
|
|
134
159
|
}
|
|
135
160
|
|
|
136
161
|
// Numeric
|
|
137
|
-
inline int umfpack_numeric(
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
{
|
|
141
|
-
return umfpack_di_numeric(Ap,Ai,Ax,Symbolic,Numeric,Control,Info);
|
|
162
|
+
inline int umfpack_numeric(const int Ap[], const int Ai[], const double Ax[], void *Symbolic, void **Numeric,
|
|
163
|
+
const double Control[UMFPACK_CONTROL], double Info[UMFPACK_INFO]) {
|
|
164
|
+
return umfpack_di_numeric(Ap, Ai, Ax, Symbolic, Numeric, Control, Info);
|
|
142
165
|
}
|
|
143
166
|
|
|
144
|
-
inline int umfpack_numeric(
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
{
|
|
148
|
-
return umfpack_zi_numeric(Ap,Ai,&numext::real_ref(Ax[0]),0,Symbolic,Numeric,Control,Info);
|
|
167
|
+
inline int umfpack_numeric(const int Ap[], const int Ai[], const std::complex<double> Ax[], void *Symbolic,
|
|
168
|
+
void **Numeric, const double Control[UMFPACK_CONTROL], double Info[UMFPACK_INFO]) {
|
|
169
|
+
return umfpack_zi_numeric(Ap, Ai, &numext::real_ref(Ax[0]), 0, Symbolic, Numeric, Control, Info);
|
|
149
170
|
}
|
|
150
171
|
inline SuiteSparse_long umfpack_numeric(const SuiteSparse_long Ap[], const SuiteSparse_long Ai[], const double Ax[],
|
|
151
|
-
void *Symbolic, void **Numeric,
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
return umfpack_dl_numeric(Ap,Ai,Ax,Symbolic,Numeric,Control,Info);
|
|
172
|
+
void *Symbolic, void **Numeric, const double Control[UMFPACK_CONTROL],
|
|
173
|
+
double Info[UMFPACK_INFO]) {
|
|
174
|
+
return umfpack_dl_numeric(Ap, Ai, Ax, Symbolic, Numeric, Control, Info);
|
|
155
175
|
}
|
|
156
176
|
|
|
157
|
-
inline SuiteSparse_long umfpack_numeric(const SuiteSparse_long Ap[], const SuiteSparse_long Ai[],
|
|
158
|
-
void *Symbolic, void **Numeric,
|
|
159
|
-
const double Control[UMFPACK_CONTROL],double Info
|
|
160
|
-
|
|
161
|
-
return umfpack_zl_numeric(Ap,Ai,&numext::real_ref(Ax[0]),0,Symbolic,Numeric,Control,Info);
|
|
177
|
+
inline SuiteSparse_long umfpack_numeric(const SuiteSparse_long Ap[], const SuiteSparse_long Ai[],
|
|
178
|
+
const std::complex<double> Ax[], void *Symbolic, void **Numeric,
|
|
179
|
+
const double Control[UMFPACK_CONTROL], double Info[UMFPACK_INFO]) {
|
|
180
|
+
return umfpack_zl_numeric(Ap, Ai, &numext::real_ref(Ax[0]), 0, Symbolic, Numeric, Control, Info);
|
|
162
181
|
}
|
|
163
182
|
|
|
164
183
|
// solve
|
|
165
|
-
inline int umfpack_solve(
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
{
|
|
169
|
-
return umfpack_di_solve(sys,Ap,Ai,Ax,X,B,Numeric,Control,Info);
|
|
184
|
+
inline int umfpack_solve(int sys, const int Ap[], const int Ai[], const double Ax[], double X[], const double B[],
|
|
185
|
+
void *Numeric, const double Control[UMFPACK_CONTROL], double Info[UMFPACK_INFO]) {
|
|
186
|
+
return umfpack_di_solve(sys, Ap, Ai, Ax, X, B, Numeric, Control, Info);
|
|
170
187
|
}
|
|
171
188
|
|
|
172
|
-
inline int umfpack_solve(
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
189
|
+
inline int umfpack_solve(int sys, const int Ap[], const int Ai[], const std::complex<double> Ax[],
|
|
190
|
+
std::complex<double> X[], const std::complex<double> B[], void *Numeric,
|
|
191
|
+
const double Control[UMFPACK_CONTROL], double Info[UMFPACK_INFO]) {
|
|
192
|
+
return umfpack_zi_solve(sys, Ap, Ai, &numext::real_ref(Ax[0]), 0, &numext::real_ref(X[0]), 0, &numext::real_ref(B[0]),
|
|
193
|
+
0, Numeric, Control, Info);
|
|
177
194
|
}
|
|
178
195
|
|
|
179
|
-
inline SuiteSparse_long umfpack_solve(int sys, const SuiteSparse_long Ap[], const SuiteSparse_long Ai[],
|
|
180
|
-
double X[], const double B[], void *Numeric,
|
|
181
|
-
const double Control[UMFPACK_CONTROL], double Info[UMFPACK_INFO])
|
|
182
|
-
|
|
183
|
-
return umfpack_dl_solve(sys,Ap,Ai,Ax,X,B,Numeric,Control,Info);
|
|
196
|
+
inline SuiteSparse_long umfpack_solve(int sys, const SuiteSparse_long Ap[], const SuiteSparse_long Ai[],
|
|
197
|
+
const double Ax[], double X[], const double B[], void *Numeric,
|
|
198
|
+
const double Control[UMFPACK_CONTROL], double Info[UMFPACK_INFO]) {
|
|
199
|
+
return umfpack_dl_solve(sys, Ap, Ai, Ax, X, B, Numeric, Control, Info);
|
|
184
200
|
}
|
|
185
201
|
|
|
186
|
-
inline SuiteSparse_long umfpack_solve(int sys, const SuiteSparse_long Ap[], const SuiteSparse_long Ai[],
|
|
187
|
-
std::complex<double>
|
|
188
|
-
const double
|
|
189
|
-
{
|
|
190
|
-
return umfpack_zl_solve(sys,Ap,Ai
|
|
202
|
+
inline SuiteSparse_long umfpack_solve(int sys, const SuiteSparse_long Ap[], const SuiteSparse_long Ai[],
|
|
203
|
+
const std::complex<double> Ax[], std::complex<double> X[],
|
|
204
|
+
const std::complex<double> B[], void *Numeric,
|
|
205
|
+
const double Control[UMFPACK_CONTROL], double Info[UMFPACK_INFO]) {
|
|
206
|
+
return umfpack_zl_solve(sys, Ap, Ai, &numext::real_ref(Ax[0]), 0, &numext::real_ref(X[0]), 0, &numext::real_ref(B[0]),
|
|
207
|
+
0, Numeric, Control, Info);
|
|
191
208
|
}
|
|
192
209
|
|
|
193
210
|
// Get Lunz
|
|
194
|
-
inline int umfpack_get_lunz(int *lnz, int *unz, int *n_row, int *n_col, int *nz_udiag, void *Numeric, double)
|
|
195
|
-
|
|
196
|
-
return umfpack_di_get_lunz(lnz,unz,n_row,n_col,nz_udiag,Numeric);
|
|
211
|
+
inline int umfpack_get_lunz(int *lnz, int *unz, int *n_row, int *n_col, int *nz_udiag, void *Numeric, double) {
|
|
212
|
+
return umfpack_di_get_lunz(lnz, unz, n_row, n_col, nz_udiag, Numeric);
|
|
197
213
|
}
|
|
198
214
|
|
|
199
|
-
inline int umfpack_get_lunz(int *lnz, int *unz, int *n_row, int *n_col, int *nz_udiag, void *Numeric,
|
|
200
|
-
{
|
|
201
|
-
return umfpack_zi_get_lunz(lnz,unz,n_row,n_col,nz_udiag,Numeric);
|
|
215
|
+
inline int umfpack_get_lunz(int *lnz, int *unz, int *n_row, int *n_col, int *nz_udiag, void *Numeric,
|
|
216
|
+
std::complex<double>) {
|
|
217
|
+
return umfpack_zi_get_lunz(lnz, unz, n_row, n_col, nz_udiag, Numeric);
|
|
202
218
|
}
|
|
203
219
|
|
|
204
|
-
inline SuiteSparse_long umfpack_get_lunz(
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
return umfpack_dl_get_lunz(lnz,unz,n_row,n_col,nz_udiag,Numeric);
|
|
220
|
+
inline SuiteSparse_long umfpack_get_lunz(SuiteSparse_long *lnz, SuiteSparse_long *unz, SuiteSparse_long *n_row,
|
|
221
|
+
SuiteSparse_long *n_col, SuiteSparse_long *nz_udiag, void *Numeric, double) {
|
|
222
|
+
return umfpack_dl_get_lunz(lnz, unz, n_row, n_col, nz_udiag, Numeric);
|
|
208
223
|
}
|
|
209
224
|
|
|
210
|
-
inline SuiteSparse_long umfpack_get_lunz(
|
|
211
|
-
|
|
212
|
-
{
|
|
213
|
-
return umfpack_zl_get_lunz(lnz,unz,n_row,n_col,nz_udiag,Numeric);
|
|
225
|
+
inline SuiteSparse_long umfpack_get_lunz(SuiteSparse_long *lnz, SuiteSparse_long *unz, SuiteSparse_long *n_row,
|
|
226
|
+
SuiteSparse_long *n_col, SuiteSparse_long *nz_udiag, void *Numeric,
|
|
227
|
+
std::complex<double>) {
|
|
228
|
+
return umfpack_zl_get_lunz(lnz, unz, n_row, n_col, nz_udiag, Numeric);
|
|
214
229
|
}
|
|
215
230
|
|
|
216
231
|
// Get Numeric
|
|
217
|
-
inline int umfpack_get_numeric(int Lp[], int Lj[], double Lx[], int Up[], int Ui[], double Ux[],
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
return umfpack_di_get_numeric(Lp,Lj,Lx,Up,Ui,Ux,P,Q,Dx,do_recip,Rs,Numeric);
|
|
232
|
+
inline int umfpack_get_numeric(int Lp[], int Lj[], double Lx[], int Up[], int Ui[], double Ux[], int P[], int Q[],
|
|
233
|
+
double Dx[], int *do_recip, double Rs[], void *Numeric) {
|
|
234
|
+
return umfpack_di_get_numeric(Lp, Lj, Lx, Up, Ui, Ux, P, Q, Dx, do_recip, Rs, Numeric);
|
|
221
235
|
}
|
|
222
236
|
|
|
223
|
-
inline int umfpack_get_numeric(int Lp[], int Lj[], std::complex<double> Lx[], int Up[], int Ui[],
|
|
224
|
-
int P[], int Q[], std::complex<double> Dx[], int *do_recip,
|
|
225
|
-
{
|
|
226
|
-
double&
|
|
227
|
-
double&
|
|
228
|
-
double&
|
|
229
|
-
return umfpack_zi_get_numeric(Lp,Lj,Lx
|
|
230
|
-
|
|
237
|
+
inline int umfpack_get_numeric(int Lp[], int Lj[], std::complex<double> Lx[], int Up[], int Ui[],
|
|
238
|
+
std::complex<double> Ux[], int P[], int Q[], std::complex<double> Dx[], int *do_recip,
|
|
239
|
+
double Rs[], void *Numeric) {
|
|
240
|
+
double &lx0_real = numext::real_ref(Lx[0]);
|
|
241
|
+
double &ux0_real = numext::real_ref(Ux[0]);
|
|
242
|
+
double &dx0_real = numext::real_ref(Dx[0]);
|
|
243
|
+
return umfpack_zi_get_numeric(Lp, Lj, Lx ? &lx0_real : 0, 0, Up, Ui, Ux ? &ux0_real : 0, 0, P, Q, Dx ? &dx0_real : 0,
|
|
244
|
+
0, do_recip, Rs, Numeric);
|
|
231
245
|
}
|
|
232
|
-
inline SuiteSparse_long umfpack_get_numeric(SuiteSparse_long Lp[], SuiteSparse_long Lj[], double Lx[],
|
|
233
|
-
SuiteSparse_long
|
|
234
|
-
|
|
235
|
-
|
|
246
|
+
inline SuiteSparse_long umfpack_get_numeric(SuiteSparse_long Lp[], SuiteSparse_long Lj[], double Lx[],
|
|
247
|
+
SuiteSparse_long Up[], SuiteSparse_long Ui[], double Ux[],
|
|
248
|
+
SuiteSparse_long P[], SuiteSparse_long Q[], double Dx[],
|
|
249
|
+
SuiteSparse_long *do_recip, double Rs[], void *Numeric) {
|
|
250
|
+
return umfpack_dl_get_numeric(Lp, Lj, Lx, Up, Ui, Ux, P, Q, Dx, do_recip, Rs, Numeric);
|
|
236
251
|
}
|
|
237
252
|
|
|
238
|
-
inline SuiteSparse_long umfpack_get_numeric(SuiteSparse_long Lp[], SuiteSparse_long Lj[], std::complex<double> Lx[],
|
|
239
|
-
SuiteSparse_long
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
double&
|
|
243
|
-
double&
|
|
244
|
-
|
|
245
|
-
|
|
253
|
+
inline SuiteSparse_long umfpack_get_numeric(SuiteSparse_long Lp[], SuiteSparse_long Lj[], std::complex<double> Lx[],
|
|
254
|
+
SuiteSparse_long Up[], SuiteSparse_long Ui[], std::complex<double> Ux[],
|
|
255
|
+
SuiteSparse_long P[], SuiteSparse_long Q[], std::complex<double> Dx[],
|
|
256
|
+
SuiteSparse_long *do_recip, double Rs[], void *Numeric) {
|
|
257
|
+
double &lx0_real = numext::real_ref(Lx[0]);
|
|
258
|
+
double &ux0_real = numext::real_ref(Ux[0]);
|
|
259
|
+
double &dx0_real = numext::real_ref(Dx[0]);
|
|
260
|
+
return umfpack_zl_get_numeric(Lp, Lj, Lx ? &lx0_real : 0, 0, Up, Ui, Ux ? &ux0_real : 0, 0, P, Q, Dx ? &dx0_real : 0,
|
|
261
|
+
0, do_recip, Rs, Numeric);
|
|
246
262
|
}
|
|
247
263
|
|
|
248
264
|
// Get Determinant
|
|
249
|
-
inline int umfpack_get_determinant(double *Mx, double *Ex, void *NumericHandle, double User_Info
|
|
250
|
-
|
|
251
|
-
return umfpack_di_get_determinant(Mx,Ex,NumericHandle,User_Info);
|
|
265
|
+
inline int umfpack_get_determinant(double *Mx, double *Ex, void *NumericHandle, double User_Info[UMFPACK_INFO], int) {
|
|
266
|
+
return umfpack_di_get_determinant(Mx, Ex, NumericHandle, User_Info);
|
|
252
267
|
}
|
|
253
268
|
|
|
254
|
-
inline int umfpack_get_determinant(std::complex<double> *Mx, double *Ex, void *NumericHandle,
|
|
255
|
-
{
|
|
256
|
-
double&
|
|
257
|
-
return umfpack_zi_get_determinant(&mx_real,0,Ex,NumericHandle,User_Info);
|
|
269
|
+
inline int umfpack_get_determinant(std::complex<double> *Mx, double *Ex, void *NumericHandle,
|
|
270
|
+
double User_Info[UMFPACK_INFO], int) {
|
|
271
|
+
double &mx_real = numext::real_ref(*Mx);
|
|
272
|
+
return umfpack_zi_get_determinant(&mx_real, 0, Ex, NumericHandle, User_Info);
|
|
258
273
|
}
|
|
259
274
|
|
|
260
|
-
inline SuiteSparse_long umfpack_get_determinant(double *Mx, double *Ex, void *NumericHandle,
|
|
261
|
-
{
|
|
262
|
-
return umfpack_dl_get_determinant(Mx,Ex,NumericHandle,User_Info);
|
|
275
|
+
inline SuiteSparse_long umfpack_get_determinant(double *Mx, double *Ex, void *NumericHandle,
|
|
276
|
+
double User_Info[UMFPACK_INFO], SuiteSparse_long) {
|
|
277
|
+
return umfpack_dl_get_determinant(Mx, Ex, NumericHandle, User_Info);
|
|
263
278
|
}
|
|
264
279
|
|
|
265
|
-
inline SuiteSparse_long umfpack_get_determinant(std::complex<double> *Mx, double *Ex, void *NumericHandle,
|
|
266
|
-
{
|
|
267
|
-
double&
|
|
268
|
-
return umfpack_zl_get_determinant(&mx_real,0,Ex,NumericHandle,User_Info);
|
|
280
|
+
inline SuiteSparse_long umfpack_get_determinant(std::complex<double> *Mx, double *Ex, void *NumericHandle,
|
|
281
|
+
double User_Info[UMFPACK_INFO], SuiteSparse_long) {
|
|
282
|
+
double &mx_real = numext::real_ref(*Mx);
|
|
283
|
+
return umfpack_zl_get_determinant(&mx_real, 0, Ex, NumericHandle, User_Info);
|
|
269
284
|
}
|
|
270
285
|
|
|
271
|
-
|
|
272
286
|
/** \ingroup UmfPackSupport_Module
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
template<typename
|
|
288
|
-
class UmfPackLU : public SparseSolverBase<UmfPackLU<
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
init();
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
template<typename InputMatrixType>
|
|
322
|
-
explicit UmfPackLU(const InputMatrixType& matrix)
|
|
323
|
-
: mp_matrix(matrix)
|
|
324
|
-
{
|
|
325
|
-
init();
|
|
326
|
-
compute(matrix);
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
~UmfPackLU()
|
|
330
|
-
{
|
|
331
|
-
if(m_symbolic) umfpack_free_symbolic(&m_symbolic,Scalar(), StorageIndex());
|
|
332
|
-
if(m_numeric) umfpack_free_numeric(&m_numeric,Scalar(), StorageIndex());
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
inline Index rows() const { return mp_matrix.rows(); }
|
|
336
|
-
inline Index cols() const { return mp_matrix.cols(); }
|
|
337
|
-
|
|
338
|
-
/** \brief Reports whether previous computation was successful.
|
|
339
|
-
*
|
|
340
|
-
* \returns \c Success if computation was successful,
|
|
341
|
-
* \c NumericalIssue if the matrix.appears to be negative.
|
|
342
|
-
*/
|
|
343
|
-
ComputationInfo info() const
|
|
344
|
-
{
|
|
345
|
-
eigen_assert(m_isInitialized && "Decomposition is not initialized.");
|
|
346
|
-
return m_info;
|
|
347
|
-
}
|
|
348
|
-
|
|
349
|
-
inline const LUMatrixType& matrixL() const
|
|
350
|
-
{
|
|
351
|
-
if (m_extractedDataAreDirty) extractData();
|
|
352
|
-
return m_l;
|
|
353
|
-
}
|
|
287
|
+
* \brief A sparse LU factorization and solver based on UmfPack
|
|
288
|
+
*
|
|
289
|
+
* This class allows to solve for A.X = B sparse linear problems via a LU factorization
|
|
290
|
+
* using the UmfPack library. The sparse matrix A must be squared and full rank.
|
|
291
|
+
* The vectors or matrices X and B can be either dense or sparse.
|
|
292
|
+
*
|
|
293
|
+
* \warning The input matrix A should be in a \b compressed and \b column-major form.
|
|
294
|
+
* Otherwise an expensive copy will be made. You can call the inexpensive makeCompressed() to get a compressed matrix.
|
|
295
|
+
* \tparam MatrixType_ the type of the sparse matrix A, it must be a SparseMatrix<>
|
|
296
|
+
*
|
|
297
|
+
* \implsparsesolverconcept
|
|
298
|
+
*
|
|
299
|
+
* \sa \ref TutorialSparseSolverConcept, class SparseLU
|
|
300
|
+
*/
|
|
301
|
+
template <typename MatrixType_>
|
|
302
|
+
class UmfPackLU : public SparseSolverBase<UmfPackLU<MatrixType_> > {
|
|
303
|
+
protected:
|
|
304
|
+
typedef SparseSolverBase<UmfPackLU<MatrixType_> > Base;
|
|
305
|
+
using Base::m_isInitialized;
|
|
306
|
+
|
|
307
|
+
public:
|
|
308
|
+
using Base::_solve_impl;
|
|
309
|
+
typedef MatrixType_ MatrixType;
|
|
310
|
+
typedef typename MatrixType::Scalar Scalar;
|
|
311
|
+
typedef typename MatrixType::RealScalar RealScalar;
|
|
312
|
+
typedef typename MatrixType::StorageIndex StorageIndex;
|
|
313
|
+
typedef Matrix<Scalar, Dynamic, 1> Vector;
|
|
314
|
+
typedef Matrix<int, 1, MatrixType::ColsAtCompileTime> IntRowVectorType;
|
|
315
|
+
typedef Matrix<int, MatrixType::RowsAtCompileTime, 1> IntColVectorType;
|
|
316
|
+
typedef SparseMatrix<Scalar> LUMatrixType;
|
|
317
|
+
typedef SparseMatrix<Scalar, ColMajor, StorageIndex> UmfpackMatrixType;
|
|
318
|
+
typedef Ref<const UmfpackMatrixType, StandardCompressedFormat> UmfpackMatrixRef;
|
|
319
|
+
enum { ColsAtCompileTime = MatrixType::ColsAtCompileTime, MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime };
|
|
320
|
+
|
|
321
|
+
public:
|
|
322
|
+
typedef Array<double, UMFPACK_CONTROL, 1> UmfpackControl;
|
|
323
|
+
typedef Array<double, UMFPACK_INFO, 1> UmfpackInfo;
|
|
324
|
+
|
|
325
|
+
UmfPackLU() : m_dummy(0, 0), mp_matrix(m_dummy) { init(); }
|
|
326
|
+
|
|
327
|
+
template <typename InputMatrixType>
|
|
328
|
+
explicit UmfPackLU(const InputMatrixType &matrix) : mp_matrix(matrix) {
|
|
329
|
+
init();
|
|
330
|
+
compute(matrix);
|
|
331
|
+
}
|
|
354
332
|
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
}
|
|
333
|
+
~UmfPackLU() {
|
|
334
|
+
if (m_symbolic) umfpack_free_symbolic(&m_symbolic, Scalar(), StorageIndex());
|
|
335
|
+
if (m_numeric) umfpack_free_numeric(&m_numeric, Scalar(), StorageIndex());
|
|
336
|
+
}
|
|
360
337
|
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
338
|
+
inline Index rows() const { return mp_matrix.rows(); }
|
|
339
|
+
inline Index cols() const { return mp_matrix.cols(); }
|
|
340
|
+
|
|
341
|
+
/** \brief Reports whether previous computation was successful.
|
|
342
|
+
*
|
|
343
|
+
* \returns \c Success if computation was successful,
|
|
344
|
+
* \c NumericalIssue if the matrix.appears to be negative.
|
|
345
|
+
*/
|
|
346
|
+
ComputationInfo info() const {
|
|
347
|
+
eigen_assert(m_isInitialized && "Decomposition is not initialized.");
|
|
348
|
+
return m_info;
|
|
349
|
+
}
|
|
366
350
|
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
}
|
|
351
|
+
inline const LUMatrixType &matrixL() const {
|
|
352
|
+
if (m_extractedDataAreDirty) extractData();
|
|
353
|
+
return m_l;
|
|
354
|
+
}
|
|
372
355
|
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
template<typename InputMatrixType>
|
|
378
|
-
void compute(const InputMatrixType& matrix)
|
|
379
|
-
{
|
|
380
|
-
if(m_symbolic) umfpack_free_symbolic(&m_symbolic,Scalar(),StorageIndex());
|
|
381
|
-
if(m_numeric) umfpack_free_numeric(&m_numeric,Scalar(),StorageIndex());
|
|
382
|
-
grab(matrix.derived());
|
|
383
|
-
analyzePattern_impl();
|
|
384
|
-
factorize_impl();
|
|
385
|
-
}
|
|
356
|
+
inline const LUMatrixType &matrixU() const {
|
|
357
|
+
if (m_extractedDataAreDirty) extractData();
|
|
358
|
+
return m_u;
|
|
359
|
+
}
|
|
386
360
|
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
* \sa factorize(), compute()
|
|
392
|
-
*/
|
|
393
|
-
template<typename InputMatrixType>
|
|
394
|
-
void analyzePattern(const InputMatrixType& matrix)
|
|
395
|
-
{
|
|
396
|
-
if(m_symbolic) umfpack_free_symbolic(&m_symbolic,Scalar(),StorageIndex());
|
|
397
|
-
if(m_numeric) umfpack_free_numeric(&m_numeric,Scalar(),StorageIndex());
|
|
398
|
-
|
|
399
|
-
grab(matrix.derived());
|
|
400
|
-
|
|
401
|
-
analyzePattern_impl();
|
|
402
|
-
}
|
|
361
|
+
inline const IntColVectorType &permutationP() const {
|
|
362
|
+
if (m_extractedDataAreDirty) extractData();
|
|
363
|
+
return m_p;
|
|
364
|
+
}
|
|
403
365
|
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
*/
|
|
409
|
-
inline int umfpackFactorizeReturncode() const
|
|
410
|
-
{
|
|
411
|
-
eigen_assert(m_numeric && "UmfPackLU: you must first call factorize()");
|
|
412
|
-
return m_fact_errorCode;
|
|
413
|
-
}
|
|
366
|
+
inline const IntRowVectorType &permutationQ() const {
|
|
367
|
+
if (m_extractedDataAreDirty) extractData();
|
|
368
|
+
return m_q;
|
|
369
|
+
}
|
|
414
370
|
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
371
|
+
/** Computes the sparse Cholesky decomposition of \a matrix
|
|
372
|
+
* Note that the matrix should be column-major, and in compressed format for best performance.
|
|
373
|
+
* \sa SparseMatrix::makeCompressed().
|
|
374
|
+
*/
|
|
375
|
+
template <typename InputMatrixType>
|
|
376
|
+
void compute(const InputMatrixType &matrix) {
|
|
377
|
+
if (m_symbolic) umfpack_free_symbolic(&m_symbolic, Scalar(), StorageIndex());
|
|
378
|
+
if (m_numeric) umfpack_free_numeric(&m_numeric, Scalar(), StorageIndex());
|
|
379
|
+
grab(matrix.derived());
|
|
380
|
+
analyzePattern_impl();
|
|
381
|
+
factorize_impl();
|
|
382
|
+
}
|
|
425
383
|
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
384
|
+
/** Performs a symbolic decomposition on the sparsity of \a matrix.
|
|
385
|
+
*
|
|
386
|
+
* This function is particularly useful when solving for several problems having the same structure.
|
|
387
|
+
*
|
|
388
|
+
* \sa factorize(), compute()
|
|
389
|
+
*/
|
|
390
|
+
template <typename InputMatrixType>
|
|
391
|
+
void analyzePattern(const InputMatrixType &matrix) {
|
|
392
|
+
if (m_symbolic) umfpack_free_symbolic(&m_symbolic, Scalar(), StorageIndex());
|
|
393
|
+
if (m_numeric) umfpack_free_numeric(&m_numeric, Scalar(), StorageIndex());
|
|
436
394
|
|
|
437
|
-
|
|
438
|
-
*
|
|
439
|
-
* The given matrix must has the same sparcity than the matrix on which the pattern anylysis has been performed.
|
|
440
|
-
*
|
|
441
|
-
* \sa analyzePattern(), compute()
|
|
442
|
-
*/
|
|
443
|
-
template<typename InputMatrixType>
|
|
444
|
-
void factorize(const InputMatrixType& matrix)
|
|
445
|
-
{
|
|
446
|
-
eigen_assert(m_analysisIsOk && "UmfPackLU: you must first call analyzePattern()");
|
|
447
|
-
if(m_numeric)
|
|
448
|
-
umfpack_free_numeric(&m_numeric,Scalar(),StorageIndex());
|
|
449
|
-
|
|
450
|
-
grab(matrix.derived());
|
|
451
|
-
|
|
452
|
-
factorize_impl();
|
|
453
|
-
}
|
|
395
|
+
grab(matrix.derived());
|
|
454
396
|
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
* \sa umfpackControl()
|
|
458
|
-
*/
|
|
459
|
-
void printUmfpackControl()
|
|
460
|
-
{
|
|
461
|
-
umfpack_report_control(m_control.data(), Scalar(),StorageIndex());
|
|
462
|
-
}
|
|
397
|
+
analyzePattern_impl();
|
|
398
|
+
}
|
|
463
399
|
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
400
|
+
/** Provides the return status code returned by UmfPack during the numeric
|
|
401
|
+
* factorization.
|
|
402
|
+
*
|
|
403
|
+
* \sa factorize(), compute()
|
|
404
|
+
*/
|
|
405
|
+
inline int umfpackFactorizeReturncode() const {
|
|
406
|
+
eigen_assert(m_numeric && "UmfPackLU: you must first call factorize()");
|
|
407
|
+
return m_fact_errorCode;
|
|
408
|
+
}
|
|
473
409
|
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
410
|
+
/** Provides access to the control settings array used by UmfPack.
|
|
411
|
+
*
|
|
412
|
+
* If this array contains NaN's, the default values are used.
|
|
413
|
+
*
|
|
414
|
+
* See UMFPACK documentation for details.
|
|
415
|
+
*/
|
|
416
|
+
inline const UmfpackControl &umfpackControl() const { return m_control; }
|
|
417
|
+
|
|
418
|
+
/** Provides access to the control settings array used by UmfPack.
|
|
419
|
+
*
|
|
420
|
+
* If this array contains NaN's, the default values are used.
|
|
421
|
+
*
|
|
422
|
+
* See UMFPACK documentation for details.
|
|
423
|
+
*/
|
|
424
|
+
inline UmfpackControl &umfpackControl() { return m_control; }
|
|
425
|
+
|
|
426
|
+
/** Performs a numeric decomposition of \a matrix
|
|
427
|
+
*
|
|
428
|
+
* The given matrix must have the same sparsity than the matrix on which the pattern anylysis has been performed.
|
|
429
|
+
*
|
|
430
|
+
* \sa analyzePattern(), compute()
|
|
431
|
+
*/
|
|
432
|
+
template <typename InputMatrixType>
|
|
433
|
+
void factorize(const InputMatrixType &matrix) {
|
|
434
|
+
eigen_assert(m_analysisIsOk && "UmfPackLU: you must first call analyzePattern()");
|
|
435
|
+
if (m_numeric) umfpack_free_numeric(&m_numeric, Scalar(), StorageIndex());
|
|
436
|
+
|
|
437
|
+
grab(matrix.derived());
|
|
438
|
+
|
|
439
|
+
factorize_impl();
|
|
440
|
+
}
|
|
482
441
|
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
442
|
+
/** Prints the current UmfPack control settings.
|
|
443
|
+
*
|
|
444
|
+
* \sa umfpackControl()
|
|
445
|
+
*/
|
|
446
|
+
void printUmfpackControl() { umfpack_report_control(m_control.data(), Scalar(), StorageIndex()); }
|
|
447
|
+
|
|
448
|
+
/** Prints statistics collected by UmfPack.
|
|
449
|
+
*
|
|
450
|
+
* \sa analyzePattern(), compute()
|
|
451
|
+
*/
|
|
452
|
+
void printUmfpackInfo() {
|
|
453
|
+
eigen_assert(m_analysisIsOk && "UmfPackLU: you must first call analyzePattern()");
|
|
454
|
+
umfpack_report_info(m_control.data(), m_umfpackInfo.data(), Scalar(), StorageIndex());
|
|
455
|
+
}
|
|
486
456
|
|
|
487
|
-
|
|
457
|
+
/** Prints the status of the previous factorization operation performed by UmfPack (symbolic or numerical
|
|
458
|
+
* factorization).
|
|
459
|
+
*
|
|
460
|
+
* \sa analyzePattern(), compute()
|
|
461
|
+
*/
|
|
462
|
+
void printUmfpackStatus() {
|
|
463
|
+
eigen_assert(m_analysisIsOk && "UmfPackLU: you must first call analyzePattern()");
|
|
464
|
+
umfpack_report_status(m_control.data(), m_fact_errorCode, Scalar(), StorageIndex());
|
|
465
|
+
}
|
|
488
466
|
|
|
489
|
-
|
|
467
|
+
/** \internal */
|
|
468
|
+
template <typename BDerived, typename XDerived>
|
|
469
|
+
bool _solve_impl(const MatrixBase<BDerived> &b, MatrixBase<XDerived> &x) const;
|
|
490
470
|
|
|
491
|
-
|
|
471
|
+
Scalar determinant() const;
|
|
492
472
|
|
|
493
|
-
|
|
494
|
-
{
|
|
495
|
-
m_info = InvalidInput;
|
|
496
|
-
m_isInitialized = false;
|
|
497
|
-
m_numeric = 0;
|
|
498
|
-
m_symbolic = 0;
|
|
499
|
-
m_extractedDataAreDirty = true;
|
|
473
|
+
void extractData() const;
|
|
500
474
|
|
|
501
|
-
|
|
502
|
-
|
|
475
|
+
protected:
|
|
476
|
+
void init() {
|
|
477
|
+
m_info = InvalidInput;
|
|
478
|
+
m_isInitialized = false;
|
|
479
|
+
m_numeric = 0;
|
|
480
|
+
m_symbolic = 0;
|
|
481
|
+
m_extractedDataAreDirty = true;
|
|
503
482
|
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
m_fact_errorCode = umfpack_symbolic(internal::convert_index<StorageIndex>(mp_matrix.rows()),
|
|
507
|
-
internal::convert_index<StorageIndex>(mp_matrix.cols()),
|
|
508
|
-
mp_matrix.outerIndexPtr(), mp_matrix.innerIndexPtr(), mp_matrix.valuePtr(),
|
|
509
|
-
&m_symbolic, m_control.data(), m_umfpackInfo.data());
|
|
510
|
-
|
|
511
|
-
m_isInitialized = true;
|
|
512
|
-
m_info = m_fact_errorCode ? InvalidInput : Success;
|
|
513
|
-
m_analysisIsOk = true;
|
|
514
|
-
m_factorizationIsOk = false;
|
|
515
|
-
m_extractedDataAreDirty = true;
|
|
516
|
-
}
|
|
483
|
+
umfpack_defaults(m_control.data(), Scalar(), StorageIndex());
|
|
484
|
+
}
|
|
517
485
|
|
|
518
|
-
|
|
519
|
-
|
|
486
|
+
void analyzePattern_impl() {
|
|
487
|
+
m_fact_errorCode = umfpack_symbolic(internal::convert_index<StorageIndex>(mp_matrix.rows()),
|
|
488
|
+
internal::convert_index<StorageIndex>(mp_matrix.cols()),
|
|
489
|
+
mp_matrix.outerIndexPtr(), mp_matrix.innerIndexPtr(), mp_matrix.valuePtr(),
|
|
490
|
+
&m_symbolic, m_control.data(), m_umfpackInfo.data());
|
|
491
|
+
|
|
492
|
+
m_isInitialized = true;
|
|
493
|
+
m_info = m_fact_errorCode ? InvalidInput : Success;
|
|
494
|
+
m_analysisIsOk = true;
|
|
495
|
+
m_factorizationIsOk = false;
|
|
496
|
+
m_extractedDataAreDirty = true;
|
|
497
|
+
}
|
|
520
498
|
|
|
521
|
-
|
|
522
|
-
|
|
499
|
+
void factorize_impl() {
|
|
500
|
+
m_fact_errorCode = umfpack_numeric(mp_matrix.outerIndexPtr(), mp_matrix.innerIndexPtr(), mp_matrix.valuePtr(),
|
|
501
|
+
m_symbolic, &m_numeric, m_control.data(), m_umfpackInfo.data());
|
|
523
502
|
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
503
|
+
m_info = m_fact_errorCode == UMFPACK_OK ? Success : NumericalIssue;
|
|
504
|
+
m_factorizationIsOk = true;
|
|
505
|
+
m_extractedDataAreDirty = true;
|
|
506
|
+
}
|
|
528
507
|
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
}
|
|
508
|
+
template <typename MatrixDerived>
|
|
509
|
+
void grab(const EigenBase<MatrixDerived> &A) {
|
|
510
|
+
internal::destroy_at(&mp_matrix);
|
|
511
|
+
internal::construct_at(&mp_matrix, A.derived());
|
|
512
|
+
}
|
|
535
513
|
|
|
536
|
-
|
|
537
|
-
{
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
mp_matrix.~UmfpackMatrixRef();
|
|
541
|
-
::new (&mp_matrix) UmfpackMatrixRef(A);
|
|
542
|
-
}
|
|
514
|
+
void grab(const UmfpackMatrixRef &A) {
|
|
515
|
+
if (&(A.derived()) != &mp_matrix) {
|
|
516
|
+
internal::destroy_at(&mp_matrix);
|
|
517
|
+
internal::construct_at(&mp_matrix, A);
|
|
543
518
|
}
|
|
519
|
+
}
|
|
544
520
|
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
521
|
+
// cached data to reduce reallocation, etc.
|
|
522
|
+
mutable LUMatrixType m_l;
|
|
523
|
+
StorageIndex m_fact_errorCode;
|
|
524
|
+
UmfpackControl m_control;
|
|
525
|
+
mutable UmfpackInfo m_umfpackInfo;
|
|
550
526
|
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
527
|
+
mutable LUMatrixType m_u;
|
|
528
|
+
mutable IntColVectorType m_p;
|
|
529
|
+
mutable IntRowVectorType m_q;
|
|
554
530
|
|
|
555
|
-
|
|
556
|
-
|
|
531
|
+
UmfpackMatrixType m_dummy;
|
|
532
|
+
UmfpackMatrixRef mp_matrix;
|
|
557
533
|
|
|
558
|
-
|
|
559
|
-
|
|
534
|
+
void *m_numeric;
|
|
535
|
+
void *m_symbolic;
|
|
560
536
|
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
537
|
+
mutable ComputationInfo m_info;
|
|
538
|
+
int m_factorizationIsOk;
|
|
539
|
+
int m_analysisIsOk;
|
|
540
|
+
mutable bool m_extractedDataAreDirty;
|
|
565
541
|
|
|
566
|
-
|
|
567
|
-
|
|
542
|
+
private:
|
|
543
|
+
UmfPackLU(const UmfPackLU &) {}
|
|
568
544
|
};
|
|
569
545
|
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
{
|
|
574
|
-
if (m_extractedDataAreDirty)
|
|
575
|
-
{
|
|
546
|
+
template <typename MatrixType>
|
|
547
|
+
void UmfPackLU<MatrixType>::extractData() const {
|
|
548
|
+
if (m_extractedDataAreDirty) {
|
|
576
549
|
// get size of the data
|
|
577
550
|
StorageIndex lnz, unz, rows, cols, nz_udiag;
|
|
578
551
|
umfpack_get_lunz(&lnz, &unz, &rows, &cols, &nz_udiag, m_numeric, Scalar());
|
|
579
552
|
|
|
580
553
|
// allocate data
|
|
581
|
-
m_l.resize(rows,(std::min)(rows,cols));
|
|
554
|
+
m_l.resize(rows, (std::min)(rows, cols));
|
|
582
555
|
m_l.resizeNonZeros(lnz);
|
|
583
556
|
|
|
584
|
-
m_u.resize((std::min)(rows,cols),cols);
|
|
557
|
+
m_u.resize((std::min)(rows, cols), cols);
|
|
585
558
|
m_u.resizeNonZeros(unz);
|
|
586
559
|
|
|
587
560
|
m_p.resize(rows);
|
|
588
561
|
m_q.resize(cols);
|
|
589
562
|
|
|
590
563
|
// extract
|
|
591
|
-
umfpack_get_numeric(m_l.outerIndexPtr(), m_l.innerIndexPtr(), m_l.valuePtr(),
|
|
592
|
-
m_u.
|
|
593
|
-
m_p.data(), m_q.data(), 0, 0, 0, m_numeric);
|
|
564
|
+
umfpack_get_numeric(m_l.outerIndexPtr(), m_l.innerIndexPtr(), m_l.valuePtr(), m_u.outerIndexPtr(),
|
|
565
|
+
m_u.innerIndexPtr(), m_u.valuePtr(), m_p.data(), m_q.data(), 0, 0, 0, m_numeric);
|
|
594
566
|
|
|
595
567
|
m_extractedDataAreDirty = false;
|
|
596
568
|
}
|
|
597
569
|
}
|
|
598
570
|
|
|
599
|
-
template<typename MatrixType>
|
|
600
|
-
typename UmfPackLU<MatrixType>::Scalar UmfPackLU<MatrixType>::determinant() const
|
|
601
|
-
{
|
|
571
|
+
template <typename MatrixType>
|
|
572
|
+
typename UmfPackLU<MatrixType>::Scalar UmfPackLU<MatrixType>::determinant() const {
|
|
602
573
|
Scalar det;
|
|
603
574
|
umfpack_get_determinant(&det, 0, m_numeric, 0, StorageIndex());
|
|
604
575
|
return det;
|
|
605
576
|
}
|
|
606
577
|
|
|
607
|
-
template<typename MatrixType>
|
|
608
|
-
template<typename BDerived,typename XDerived>
|
|
609
|
-
bool UmfPackLU<MatrixType>::_solve_impl(const MatrixBase<BDerived> &b, MatrixBase<XDerived> &x) const
|
|
610
|
-
{
|
|
578
|
+
template <typename MatrixType>
|
|
579
|
+
template <typename BDerived, typename XDerived>
|
|
580
|
+
bool UmfPackLU<MatrixType>::_solve_impl(const MatrixBase<BDerived> &b, MatrixBase<XDerived> &x) const {
|
|
611
581
|
Index rhsCols = b.cols();
|
|
612
|
-
eigen_assert((BDerived::Flags&RowMajorBit)==0 && "UmfPackLU backend does not support non col-major rhs yet");
|
|
613
|
-
eigen_assert((XDerived::Flags&RowMajorBit)==0 && "UmfPackLU backend does not support non col-major result yet");
|
|
582
|
+
eigen_assert((BDerived::Flags & RowMajorBit) == 0 && "UmfPackLU backend does not support non col-major rhs yet");
|
|
583
|
+
eigen_assert((XDerived::Flags & RowMajorBit) == 0 && "UmfPackLU backend does not support non col-major result yet");
|
|
614
584
|
eigen_assert(b.derived().data() != x.derived().data() && " Umfpack does not support inplace solve");
|
|
615
585
|
|
|
616
|
-
Scalar*
|
|
617
|
-
Matrix<Scalar,Dynamic,1> x_tmp;
|
|
618
|
-
if(x.innerStride()!=1)
|
|
619
|
-
{
|
|
586
|
+
Scalar *x_ptr = 0;
|
|
587
|
+
Matrix<Scalar, Dynamic, 1> x_tmp;
|
|
588
|
+
if (x.innerStride() != 1) {
|
|
620
589
|
x_tmp.resize(x.rows());
|
|
621
590
|
x_ptr = x_tmp.data();
|
|
622
591
|
}
|
|
623
|
-
for (int j=0; j<rhsCols; ++j)
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
m_numeric, m_control.data(), m_umfpackInfo.data());
|
|
631
|
-
if(x.innerStride()!=1)
|
|
632
|
-
x.col(j) = x_tmp;
|
|
633
|
-
if (errorCode!=0)
|
|
634
|
-
return false;
|
|
592
|
+
for (int j = 0; j < rhsCols; ++j) {
|
|
593
|
+
if (x.innerStride() == 1) x_ptr = &x.col(j).coeffRef(0);
|
|
594
|
+
StorageIndex errorCode =
|
|
595
|
+
umfpack_solve(UMFPACK_A, mp_matrix.outerIndexPtr(), mp_matrix.innerIndexPtr(), mp_matrix.valuePtr(), x_ptr,
|
|
596
|
+
&b.const_cast_derived().col(j).coeffRef(0), m_numeric, m_control.data(), m_umfpackInfo.data());
|
|
597
|
+
if (x.innerStride() != 1) x.col(j) = x_tmp;
|
|
598
|
+
if (errorCode != 0) return false;
|
|
635
599
|
}
|
|
636
600
|
|
|
637
601
|
return true;
|
|
638
602
|
}
|
|
639
603
|
|
|
640
|
-
}
|
|
604
|
+
} // end namespace Eigen
|
|
641
605
|
|
|
642
|
-
#endif
|
|
606
|
+
#endif // EIGEN_UMFPACKSUPPORT_H
|