@smake/eigen 1.0.2 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/eigen/Eigen/AccelerateSupport +52 -0
- package/eigen/Eigen/Cholesky +18 -21
- package/eigen/Eigen/CholmodSupport +28 -28
- package/eigen/Eigen/Core +235 -326
- package/eigen/Eigen/Eigenvalues +16 -14
- package/eigen/Eigen/Geometry +21 -24
- package/eigen/Eigen/Householder +9 -8
- package/eigen/Eigen/IterativeLinearSolvers +8 -4
- package/eigen/Eigen/Jacobi +14 -14
- package/eigen/Eigen/KLUSupport +43 -0
- package/eigen/Eigen/LU +16 -20
- package/eigen/Eigen/MetisSupport +12 -12
- package/eigen/Eigen/OrderingMethods +54 -54
- package/eigen/Eigen/PaStiXSupport +23 -20
- package/eigen/Eigen/PardisoSupport +17 -14
- package/eigen/Eigen/QR +18 -21
- package/eigen/Eigen/QtAlignedMalloc +5 -13
- package/eigen/Eigen/SPQRSupport +21 -14
- package/eigen/Eigen/SVD +23 -18
- package/eigen/Eigen/Sparse +1 -4
- package/eigen/Eigen/SparseCholesky +18 -23
- package/eigen/Eigen/SparseCore +18 -17
- package/eigen/Eigen/SparseLU +12 -8
- package/eigen/Eigen/SparseQR +16 -14
- package/eigen/Eigen/StdDeque +5 -2
- package/eigen/Eigen/StdList +5 -2
- package/eigen/Eigen/StdVector +5 -2
- package/eigen/Eigen/SuperLUSupport +30 -24
- package/eigen/Eigen/ThreadPool +80 -0
- package/eigen/Eigen/UmfPackSupport +19 -17
- package/eigen/Eigen/Version +14 -0
- package/eigen/Eigen/src/AccelerateSupport/AccelerateSupport.h +423 -0
- package/eigen/Eigen/src/AccelerateSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Cholesky/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Cholesky/LDLT.h +377 -401
- package/eigen/Eigen/src/Cholesky/LLT.h +332 -360
- package/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +81 -56
- package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +620 -521
- package/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Core/ArithmeticSequence.h +239 -0
- package/eigen/Eigen/src/Core/Array.h +341 -294
- package/eigen/Eigen/src/Core/ArrayBase.h +190 -203
- package/eigen/Eigen/src/Core/ArrayWrapper.h +127 -171
- package/eigen/Eigen/src/Core/Assign.h +30 -40
- package/eigen/Eigen/src/Core/AssignEvaluator.h +711 -589
- package/eigen/Eigen/src/Core/Assign_MKL.h +130 -125
- package/eigen/Eigen/src/Core/BandMatrix.h +268 -283
- package/eigen/Eigen/src/Core/Block.h +375 -398
- package/eigen/Eigen/src/Core/CommaInitializer.h +86 -97
- package/eigen/Eigen/src/Core/ConditionEstimator.h +51 -53
- package/eigen/Eigen/src/Core/CoreEvaluators.h +1356 -1026
- package/eigen/Eigen/src/Core/CoreIterators.h +73 -59
- package/eigen/Eigen/src/Core/CwiseBinaryOp.h +114 -132
- package/eigen/Eigen/src/Core/CwiseNullaryOp.h +726 -617
- package/eigen/Eigen/src/Core/CwiseTernaryOp.h +77 -103
- package/eigen/Eigen/src/Core/CwiseUnaryOp.h +56 -68
- package/eigen/Eigen/src/Core/CwiseUnaryView.h +132 -95
- package/eigen/Eigen/src/Core/DenseBase.h +632 -571
- package/eigen/Eigen/src/Core/DenseCoeffsBase.h +511 -624
- package/eigen/Eigen/src/Core/DenseStorage.h +512 -509
- package/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
- package/eigen/Eigen/src/Core/Diagonal.h +169 -210
- package/eigen/Eigen/src/Core/DiagonalMatrix.h +351 -274
- package/eigen/Eigen/src/Core/DiagonalProduct.h +12 -10
- package/eigen/Eigen/src/Core/Dot.h +172 -222
- package/eigen/Eigen/src/Core/EigenBase.h +75 -85
- package/eigen/Eigen/src/Core/Fill.h +138 -0
- package/eigen/Eigen/src/Core/FindCoeff.h +464 -0
- package/eigen/Eigen/src/Core/ForceAlignedAccess.h +90 -109
- package/eigen/Eigen/src/Core/Fuzzy.h +82 -105
- package/eigen/Eigen/src/Core/GeneralProduct.h +327 -263
- package/eigen/Eigen/src/Core/GenericPacketMath.h +1472 -360
- package/eigen/Eigen/src/Core/GlobalFunctions.h +194 -151
- package/eigen/Eigen/src/Core/IO.h +147 -139
- package/eigen/Eigen/src/Core/IndexedView.h +321 -0
- package/eigen/Eigen/src/Core/InnerProduct.h +260 -0
- package/eigen/Eigen/src/Core/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Core/Inverse.h +56 -66
- package/eigen/Eigen/src/Core/Map.h +124 -142
- package/eigen/Eigen/src/Core/MapBase.h +256 -281
- package/eigen/Eigen/src/Core/MathFunctions.h +1620 -938
- package/eigen/Eigen/src/Core/MathFunctionsImpl.h +233 -71
- package/eigen/Eigen/src/Core/Matrix.h +491 -416
- package/eigen/Eigen/src/Core/MatrixBase.h +468 -453
- package/eigen/Eigen/src/Core/NestByValue.h +66 -85
- package/eigen/Eigen/src/Core/NoAlias.h +79 -85
- package/eigen/Eigen/src/Core/NumTraits.h +235 -148
- package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +253 -0
- package/eigen/Eigen/src/Core/PermutationMatrix.h +461 -511
- package/eigen/Eigen/src/Core/PlainObjectBase.h +871 -894
- package/eigen/Eigen/src/Core/Product.h +260 -139
- package/eigen/Eigen/src/Core/ProductEvaluators.h +863 -714
- package/eigen/Eigen/src/Core/Random.h +161 -136
- package/eigen/Eigen/src/Core/RandomImpl.h +262 -0
- package/eigen/Eigen/src/Core/RealView.h +250 -0
- package/eigen/Eigen/src/Core/Redux.h +366 -336
- package/eigen/Eigen/src/Core/Ref.h +308 -209
- package/eigen/Eigen/src/Core/Replicate.h +94 -106
- package/eigen/Eigen/src/Core/Reshaped.h +398 -0
- package/eigen/Eigen/src/Core/ReturnByValue.h +49 -55
- package/eigen/Eigen/src/Core/Reverse.h +136 -145
- package/eigen/Eigen/src/Core/Select.h +70 -140
- package/eigen/Eigen/src/Core/SelfAdjointView.h +262 -285
- package/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h +23 -20
- package/eigen/Eigen/src/Core/SkewSymmetricMatrix3.h +382 -0
- package/eigen/Eigen/src/Core/Solve.h +97 -111
- package/eigen/Eigen/src/Core/SolveTriangular.h +131 -129
- package/eigen/Eigen/src/Core/SolverBase.h +138 -101
- package/eigen/Eigen/src/Core/StableNorm.h +156 -160
- package/eigen/Eigen/src/Core/StlIterators.h +619 -0
- package/eigen/Eigen/src/Core/Stride.h +91 -88
- package/eigen/Eigen/src/Core/Swap.h +70 -38
- package/eigen/Eigen/src/Core/Transpose.h +295 -273
- package/eigen/Eigen/src/Core/Transpositions.h +272 -317
- package/eigen/Eigen/src/Core/TriangularMatrix.h +670 -755
- package/eigen/Eigen/src/Core/VectorBlock.h +59 -72
- package/eigen/Eigen/src/Core/VectorwiseOp.h +668 -630
- package/eigen/Eigen/src/Core/Visitor.h +480 -216
- package/eigen/Eigen/src/Core/arch/AVX/Complex.h +407 -293
- package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +79 -388
- package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +2935 -491
- package/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
- package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +279 -22
- package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +472 -0
- package/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +85 -333
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +2490 -649
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMathFP16.h +1413 -0
- package/eigen/Eigen/src/Core/arch/AVX512/Reductions.h +297 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TrsmKernel.h +1167 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TrsmUnrolls.inc +1219 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +277 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +521 -298
- package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +39 -280
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +3686 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +205 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +901 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMAbfloat16.h +742 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixVectorProduct.inc +2818 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +3391 -723
- package/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
- package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +866 -0
- package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +113 -14
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +2634 -0
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +227 -0
- package/eigen/Eigen/src/Core/arch/Default/Half.h +1091 -0
- package/eigen/Eigen/src/Core/arch/Default/Settings.h +11 -13
- package/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
- package/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +104 -0
- package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1712 -0
- package/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
- package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +77 -0
- package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
- package/eigen/Eigen/src/Core/arch/HVX/PacketMath.h +1088 -0
- package/eigen/Eigen/src/Core/arch/LSX/Complex.h +520 -0
- package/eigen/Eigen/src/Core/arch/LSX/GeneralBlockPanelKernel.h +23 -0
- package/eigen/Eigen/src/Core/arch/LSX/MathFunctions.h +43 -0
- package/eigen/Eigen/src/Core/arch/LSX/PacketMath.h +2866 -0
- package/eigen/Eigen/src/Core/arch/LSX/TypeCasting.h +526 -0
- package/eigen/Eigen/src/Core/arch/MSA/Complex.h +620 -0
- package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +379 -0
- package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1237 -0
- package/eigen/Eigen/src/Core/arch/NEON/Complex.h +531 -289
- package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +243 -0
- package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +50 -73
- package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +5915 -579
- package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1642 -0
- package/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
- package/eigen/Eigen/src/Core/arch/SSE/Complex.h +366 -334
- package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +40 -514
- package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +2164 -675
- package/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
- package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +188 -35
- package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +48 -0
- package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +674 -0
- package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +52 -0
- package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +227 -0
- package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +303 -0
- package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +576 -0
- package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +83 -0
- package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +434 -261
- package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +160 -53
- package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +1073 -605
- package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +123 -117
- package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +594 -322
- package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +204 -118
- package/eigen/Eigen/src/Core/functors/StlFunctors.h +110 -97
- package/eigen/Eigen/src/Core/functors/TernaryFunctors.h +34 -7
- package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1158 -530
- package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +2329 -1333
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +328 -364
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +191 -178
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +85 -82
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +154 -73
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +396 -542
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +80 -77
- package/eigen/Eigen/src/Core/products/Parallelizer.h +208 -92
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +331 -375
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +206 -224
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +139 -146
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +58 -61
- package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +71 -71
- package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +48 -46
- package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +294 -369
- package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +246 -238
- package/eigen/Eigen/src/Core/products/TriangularMatrixVector.h +244 -247
- package/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +212 -192
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +328 -275
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +108 -109
- package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +70 -93
- package/eigen/Eigen/src/Core/util/Assert.h +158 -0
- package/eigen/Eigen/src/Core/util/BlasUtil.h +413 -290
- package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +543 -0
- package/eigen/Eigen/src/Core/util/Constants.h +314 -263
- package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +130 -78
- package/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
- package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +450 -224
- package/eigen/Eigen/src/Core/util/GpuHipCudaDefines.inc +101 -0
- package/eigen/Eigen/src/Core/util/GpuHipCudaUndefines.inc +45 -0
- package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +487 -0
- package/eigen/Eigen/src/Core/util/IntegralConstant.h +279 -0
- package/eigen/Eigen/src/Core/util/MKL_support.h +39 -30
- package/eigen/Eigen/src/Core/util/Macros.h +939 -646
- package/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
- package/eigen/Eigen/src/Core/util/Memory.h +1042 -650
- package/eigen/Eigen/src/Core/util/Meta.h +618 -426
- package/eigen/Eigen/src/Core/util/MoreMeta.h +638 -0
- package/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +32 -19
- package/eigen/Eigen/src/Core/util/ReshapedHelper.h +51 -0
- package/eigen/Eigen/src/Core/util/Serializer.h +209 -0
- package/eigen/Eigen/src/Core/util/StaticAssert.h +51 -164
- package/eigen/Eigen/src/Core/util/SymbolicIndex.h +445 -0
- package/eigen/Eigen/src/Core/util/XprHelper.h +793 -538
- package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +246 -277
- package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +299 -319
- package/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +52 -48
- package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +413 -456
- package/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +309 -325
- package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +157 -171
- package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +292 -310
- package/eigen/Eigen/src/Eigenvalues/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +91 -107
- package/eigen/Eigen/src/Eigenvalues/RealQZ.h +539 -606
- package/eigen/Eigen/src/Eigenvalues/RealSchur.h +348 -382
- package/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +41 -35
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +579 -600
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +47 -44
- package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +434 -461
- package/eigen/Eigen/src/Geometry/AlignedBox.h +307 -214
- package/eigen/Eigen/src/Geometry/AngleAxis.h +135 -137
- package/eigen/Eigen/src/Geometry/EulerAngles.h +163 -74
- package/eigen/Eigen/src/Geometry/Homogeneous.h +289 -333
- package/eigen/Eigen/src/Geometry/Hyperplane.h +152 -161
- package/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Geometry/OrthoMethods.h +168 -145
- package/eigen/Eigen/src/Geometry/ParametrizedLine.h +141 -104
- package/eigen/Eigen/src/Geometry/Quaternion.h +595 -497
- package/eigen/Eigen/src/Geometry/Rotation2D.h +110 -108
- package/eigen/Eigen/src/Geometry/RotationBase.h +148 -145
- package/eigen/Eigen/src/Geometry/Scaling.h +115 -90
- package/eigen/Eigen/src/Geometry/Transform.h +896 -953
- package/eigen/Eigen/src/Geometry/Translation.h +100 -98
- package/eigen/Eigen/src/Geometry/Umeyama.h +79 -84
- package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +154 -0
- package/eigen/Eigen/src/Householder/BlockHouseholder.h +54 -42
- package/eigen/Eigen/src/Householder/Householder.h +104 -122
- package/eigen/Eigen/src/Householder/HouseholderSequence.h +416 -382
- package/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +153 -166
- package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +127 -138
- package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +95 -124
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +269 -267
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +246 -259
- package/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +218 -217
- package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +80 -103
- package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +59 -63
- package/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Jacobi/Jacobi.h +256 -291
- package/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/KLUSupport/KLUSupport.h +339 -0
- package/eigen/Eigen/src/LU/Determinant.h +60 -63
- package/eigen/Eigen/src/LU/FullPivLU.h +561 -626
- package/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/LU/InverseImpl.h +213 -275
- package/eigen/Eigen/src/LU/PartialPivLU.h +407 -435
- package/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +54 -40
- package/eigen/Eigen/src/LU/arch/InverseSize4.h +353 -0
- package/eigen/Eigen/src/MetisSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/MetisSupport/MetisSupport.h +81 -93
- package/eigen/Eigen/src/OrderingMethods/Amd.h +250 -282
- package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +950 -1103
- package/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/OrderingMethods/Ordering.h +111 -122
- package/eigen/Eigen/src/PaStiXSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +524 -570
- package/eigen/Eigen/src/PardisoSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +385 -429
- package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +494 -473
- package/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +120 -56
- package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +223 -137
- package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +517 -460
- package/eigen/Eigen/src/QR/HouseholderQR.h +412 -278
- package/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h +32 -23
- package/eigen/Eigen/src/QR/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SPQRSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +263 -261
- package/eigen/Eigen/src/SVD/BDCSVD.h +872 -679
- package/eigen/Eigen/src/SVD/BDCSVD_LAPACKE.h +174 -0
- package/eigen/Eigen/src/SVD/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SVD/JacobiSVD.h +585 -543
- package/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +85 -49
- package/eigen/Eigen/src/SVD/SVDBase.h +281 -160
- package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +202 -237
- package/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +769 -590
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +318 -129
- package/eigen/Eigen/src/SparseCore/AmbiVector.h +202 -251
- package/eigen/Eigen/src/SparseCore/CompressedStorage.h +184 -236
- package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +140 -184
- package/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCore/SparseAssign.h +174 -111
- package/eigen/Eigen/src/SparseCore/SparseBlock.h +408 -477
- package/eigen/Eigen/src/SparseCore/SparseColEtree.h +100 -112
- package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +531 -280
- package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +559 -347
- package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +100 -108
- package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +185 -191
- package/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h +71 -71
- package/eigen/Eigen/src/SparseCore/SparseDot.h +49 -47
- package/eigen/Eigen/src/SparseCore/SparseFuzzy.h +13 -11
- package/eigen/Eigen/src/SparseCore/SparseMap.h +243 -253
- package/eigen/Eigen/src/SparseCore/SparseMatrix.h +1614 -1142
- package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +403 -357
- package/eigen/Eigen/src/SparseCore/SparsePermutation.h +186 -115
- package/eigen/Eigen/src/SparseCore/SparseProduct.h +100 -91
- package/eigen/Eigen/src/SparseCore/SparseRedux.h +22 -24
- package/eigen/Eigen/src/SparseCore/SparseRef.h +268 -295
- package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +371 -414
- package/eigen/Eigen/src/SparseCore/SparseSolverBase.h +78 -87
- package/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +81 -95
- package/eigen/Eigen/src/SparseCore/SparseTranspose.h +62 -71
- package/eigen/Eigen/src/SparseCore/SparseTriangularView.h +132 -144
- package/eigen/Eigen/src/SparseCore/SparseUtil.h +146 -115
- package/eigen/Eigen/src/SparseCore/SparseVector.h +426 -372
- package/eigen/Eigen/src/SparseCore/SparseView.h +164 -193
- package/eigen/Eigen/src/SparseCore/TriangularSolver.h +129 -170
- package/eigen/Eigen/src/SparseLU/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseLU/SparseLU.h +814 -618
- package/eigen/Eigen/src/SparseLU/SparseLUImpl.h +61 -48
- package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +102 -118
- package/eigen/Eigen/src/SparseLU/SparseLU_Structs.h +38 -35
- package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +273 -255
- package/eigen/Eigen/src/SparseLU/SparseLU_Utils.h +44 -49
- package/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h +104 -108
- package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +90 -101
- package/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +57 -58
- package/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +43 -55
- package/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +74 -71
- package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +125 -133
- package/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h +136 -159
- package/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h +51 -52
- package/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h +67 -73
- package/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h +24 -26
- package/eigen/Eigen/src/SparseQR/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseQR/SparseQR.h +451 -490
- package/eigen/Eigen/src/StlSupport/StdDeque.h +28 -105
- package/eigen/Eigen/src/StlSupport/StdList.h +28 -84
- package/eigen/Eigen/src/StlSupport/StdVector.h +28 -108
- package/eigen/Eigen/src/StlSupport/details.h +48 -50
- package/eigen/Eigen/src/SuperLUSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +634 -732
- package/eigen/Eigen/src/ThreadPool/Barrier.h +70 -0
- package/eigen/Eigen/src/ThreadPool/CoreThreadPoolDevice.h +336 -0
- package/eigen/Eigen/src/ThreadPool/EventCount.h +241 -0
- package/eigen/Eigen/src/ThreadPool/ForkJoin.h +140 -0
- package/eigen/Eigen/src/ThreadPool/InternalHeaderCheck.h +4 -0
- package/eigen/Eigen/src/ThreadPool/NonBlockingThreadPool.h +587 -0
- package/eigen/Eigen/src/ThreadPool/RunQueue.h +230 -0
- package/eigen/Eigen/src/ThreadPool/ThreadCancel.h +21 -0
- package/eigen/Eigen/src/ThreadPool/ThreadEnvironment.h +43 -0
- package/eigen/Eigen/src/ThreadPool/ThreadLocal.h +289 -0
- package/eigen/Eigen/src/ThreadPool/ThreadPoolInterface.h +50 -0
- package/eigen/Eigen/src/ThreadPool/ThreadYield.h +16 -0
- package/eigen/Eigen/src/UmfPackSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +480 -380
- package/eigen/Eigen/src/misc/Image.h +41 -43
- package/eigen/Eigen/src/misc/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/misc/Kernel.h +39 -41
- package/eigen/Eigen/src/misc/RealSvd2x2.h +19 -21
- package/eigen/Eigen/src/misc/blas.h +83 -426
- package/eigen/Eigen/src/misc/lapacke.h +9976 -16182
- package/eigen/Eigen/src/misc/lapacke_helpers.h +163 -0
- package/eigen/Eigen/src/misc/lapacke_mangling.h +4 -5
- package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.inc +344 -0
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.inc +544 -0
- package/eigen/Eigen/src/plugins/BlockMethods.inc +1370 -0
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
- package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.inc +167 -0
- package/eigen/Eigen/src/plugins/IndexedViewMethods.inc +192 -0
- package/eigen/Eigen/src/plugins/InternalHeaderCheck.inc +3 -0
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.inc +331 -0
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.inc +118 -0
- package/eigen/Eigen/src/plugins/ReshapedMethods.inc +133 -0
- package/lib/LibEigen.d.ts +4 -0
- package/lib/LibEigen.js +14 -0
- package/lib/index.d.ts +1 -1
- package/lib/index.js +7 -3
- package/package.json +2 -10
- package/eigen/Eigen/CMakeLists.txt +0 -19
- package/eigen/Eigen/src/Core/BooleanRedux.h +0 -164
- package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +0 -103
- package/eigen/Eigen/src/Core/arch/CUDA/Half.h +0 -675
- package/eigen/Eigen/src/Core/arch/CUDA/MathFunctions.h +0 -91
- package/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +0 -333
- package/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +0 -1124
- package/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +0 -212
- package/eigen/Eigen/src/Core/util/NonMPL2.h +0 -3
- package/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +0 -161
- package/eigen/Eigen/src/LU/arch/Inverse_SSE.h +0 -338
- package/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h +0 -67
- package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +0 -280
- package/eigen/Eigen/src/misc/lapack.h +0 -152
- package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +0 -332
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +0 -552
- package/eigen/Eigen/src/plugins/BlockMethods.h +0 -1058
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +0 -115
- package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +0 -163
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +0 -152
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +0 -85
- package/lib/eigen.d.ts +0 -2
- package/lib/eigen.js +0 -15
|
@@ -2,191 +2,380 @@
|
|
|
2
2
|
// for linear algebra.
|
|
3
3
|
//
|
|
4
4
|
// Copyright (C) 2008-2012 Gael Guennebaud <gael.guennebaud@inria.fr>
|
|
5
|
+
//
|
|
6
|
+
// This Source Code Form is subject to the terms of the Mozilla
|
|
7
|
+
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
8
|
+
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
5
9
|
|
|
6
10
|
/*
|
|
7
|
-
|
|
8
|
-
NOTE: thes functions vave been adapted from the LDL library:
|
|
11
|
+
NOTE: these functions have been adapted from the LDL library:
|
|
9
12
|
|
|
10
13
|
LDL Copyright (c) 2005 by Timothy A. Davis. All Rights Reserved.
|
|
11
14
|
|
|
12
|
-
LDL
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
LDL implies that you agree to this License.
|
|
16
|
-
|
|
17
|
-
This library is free software; you can redistribute it and/or
|
|
18
|
-
modify it under the terms of the GNU Lesser General Public
|
|
19
|
-
License as published by the Free Software Foundation; either
|
|
20
|
-
version 2.1 of the License, or (at your option) any later version.
|
|
21
|
-
|
|
22
|
-
This library is distributed in the hope that it will be useful,
|
|
23
|
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
24
|
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
25
|
-
Lesser General Public License for more details.
|
|
26
|
-
|
|
27
|
-
You should have received a copy of the GNU Lesser General Public
|
|
28
|
-
License along with this library; if not, write to the Free Software
|
|
29
|
-
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
|
|
30
|
-
USA
|
|
31
|
-
|
|
32
|
-
Permission is hereby granted to use or copy this program under the
|
|
33
|
-
terms of the GNU LGPL, provided that the Copyright, this License,
|
|
34
|
-
and the Availability of the original version is retained on all copies.
|
|
35
|
-
User documentation of any code that uses this code or any modified
|
|
36
|
-
version of this code must cite the Copyright, this License, the
|
|
37
|
-
Availability note, and "Used by permission." Permission to modify
|
|
38
|
-
the code and to distribute modified code is granted, provided the
|
|
39
|
-
Copyright, this License, and the Availability note are retained,
|
|
40
|
-
and a notice that the code was modified is included.
|
|
15
|
+
The author of LDL, Timothy A. Davis., has executed a license with Google LLC
|
|
16
|
+
to permit distribution of this code and derivative works as part of Eigen under
|
|
17
|
+
the Mozilla Public License v. 2.0, as stated at the top of this file.
|
|
41
18
|
*/
|
|
42
19
|
|
|
43
|
-
#include "../Core/util/NonMPL2.h"
|
|
44
|
-
|
|
45
20
|
#ifndef EIGEN_SIMPLICIAL_CHOLESKY_IMPL_H
|
|
46
21
|
#define EIGEN_SIMPLICIAL_CHOLESKY_IMPL_H
|
|
47
22
|
|
|
23
|
+
// IWYU pragma: private
|
|
24
|
+
#include "./InternalHeaderCheck.h"
|
|
25
|
+
|
|
48
26
|
namespace Eigen {
|
|
49
27
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
28
|
+
namespace internal {
|
|
29
|
+
|
|
30
|
+
template <typename Scalar, typename StorageIndex>
|
|
31
|
+
struct simpl_chol_helper {
|
|
32
|
+
using CholMatrixType = SparseMatrix<Scalar, ColMajor, StorageIndex>;
|
|
33
|
+
using InnerIterator = typename CholMatrixType::InnerIterator;
|
|
34
|
+
using VectorI = Matrix<StorageIndex, Dynamic, 1>;
|
|
35
|
+
static constexpr StorageIndex kEmpty = -1;
|
|
36
|
+
|
|
37
|
+
// Implementation of a stack or last-in first-out structure with some debugging machinery.
|
|
38
|
+
struct Stack {
|
|
39
|
+
StorageIndex* m_data;
|
|
40
|
+
Index m_size;
|
|
41
|
+
#ifndef EIGEN_NO_DEBUG
|
|
42
|
+
const Index m_maxSize;
|
|
43
|
+
Stack(StorageIndex* data, StorageIndex size, StorageIndex maxSize)
|
|
44
|
+
: m_data(data), m_size(size), m_maxSize(maxSize) {
|
|
45
|
+
eigen_assert(size >= 0);
|
|
46
|
+
eigen_assert(maxSize >= size);
|
|
47
|
+
}
|
|
48
|
+
#else
|
|
49
|
+
Stack(StorageIndex* data, StorageIndex size, StorageIndex /*maxSize*/) : m_data(data), m_size(size) {}
|
|
50
|
+
#endif
|
|
51
|
+
bool empty() const { return m_size == 0; }
|
|
52
|
+
Index size() const { return m_size; }
|
|
53
|
+
StorageIndex back() const {
|
|
54
|
+
eigen_assert(m_size > 0);
|
|
55
|
+
return m_data[m_size - 1];
|
|
56
|
+
}
|
|
57
|
+
void push(const StorageIndex& value) {
|
|
58
|
+
#ifndef EIGEN_NO_DEBUG
|
|
59
|
+
eigen_assert(m_size < m_maxSize);
|
|
60
|
+
#endif
|
|
61
|
+
m_data[m_size] = value;
|
|
62
|
+
m_size++;
|
|
63
|
+
}
|
|
64
|
+
void pop() {
|
|
65
|
+
eigen_assert(m_size > 0);
|
|
66
|
+
m_size--;
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
// Implementation of a disjoint-set or union-find structure with path compression.
|
|
71
|
+
struct DisjointSet {
|
|
72
|
+
StorageIndex* m_set;
|
|
73
|
+
DisjointSet(StorageIndex* set, StorageIndex size) : m_set(set) { std::iota(set, set + size, 0); }
|
|
74
|
+
// Find the set representative or root of `u`.
|
|
75
|
+
StorageIndex find(StorageIndex u) const {
|
|
76
|
+
eigen_assert(u != kEmpty);
|
|
77
|
+
while (m_set[u] != u) {
|
|
78
|
+
// manually unroll the loop by a factor of 2 to improve performance
|
|
79
|
+
u = m_set[m_set[u]];
|
|
80
|
+
}
|
|
81
|
+
return u;
|
|
82
|
+
}
|
|
83
|
+
// Perform full path compression such that each node from `u` to `v` points to `v`.
|
|
84
|
+
void compress(StorageIndex u, StorageIndex v) {
|
|
85
|
+
eigen_assert(u != kEmpty);
|
|
86
|
+
eigen_assert(v != kEmpty);
|
|
87
|
+
while (m_set[u] != v) {
|
|
88
|
+
StorageIndex next = m_set[u];
|
|
89
|
+
m_set[u] = v;
|
|
90
|
+
u = next;
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
// Computes the higher adjacency pattern by transposing the input lower adjacency matrix.
|
|
96
|
+
// Only the index arrays are calculated, as the values are not needed for the symbolic factorization.
|
|
97
|
+
// The outer index array provides the size requirements of the inner index array.
|
|
98
|
+
|
|
99
|
+
// Computes the outer index array of the higher adjacency matrix.
|
|
100
|
+
static void calc_hadj_outer(const StorageIndex size, const CholMatrixType& ap, StorageIndex* outerIndex) {
|
|
101
|
+
for (StorageIndex j = 1; j < size; j++) {
|
|
102
|
+
for (InnerIterator it(ap, j); it; ++it) {
|
|
103
|
+
StorageIndex i = it.index();
|
|
104
|
+
if (i < j) outerIndex[i + 1]++;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
std::partial_sum(outerIndex, outerIndex + size + 1, outerIndex);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// inner index array
|
|
111
|
+
static void calc_hadj_inner(const StorageIndex size, const CholMatrixType& ap, const StorageIndex* outerIndex,
|
|
112
|
+
StorageIndex* innerIndex, StorageIndex* tmp) {
|
|
113
|
+
std::fill_n(tmp, size, 0);
|
|
114
|
+
|
|
115
|
+
for (StorageIndex j = 1; j < size; j++) {
|
|
116
|
+
for (InnerIterator it(ap, j); it; ++it) {
|
|
117
|
+
StorageIndex i = it.index();
|
|
118
|
+
if (i < j) {
|
|
119
|
+
StorageIndex b = outerIndex[i] + tmp[i];
|
|
120
|
+
innerIndex[b] = j;
|
|
121
|
+
tmp[i]++;
|
|
79
122
|
}
|
|
80
123
|
}
|
|
81
124
|
}
|
|
82
125
|
}
|
|
83
126
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
127
|
+
// Adapted from:
|
|
128
|
+
// Joseph W. Liu. (1986).
|
|
129
|
+
// A compact row storage scheme for Cholesky factors using elimination trees.
|
|
130
|
+
// ACM Trans. Math. Softw. 12, 2 (June 1986), 127-148. https://doi.org/10.1145/6497.6499
|
|
131
|
+
|
|
132
|
+
// Computes the elimination forest of the lower adjacency matrix, a compact representation of the sparse L factor.
|
|
133
|
+
// The L factor may contain multiple elimination trees if a column contains only its diagonal element.
|
|
134
|
+
// Each elimination tree is an n-ary tree in which each node points to its parent.
|
|
135
|
+
static void calc_etree(const StorageIndex size, const CholMatrixType& ap, StorageIndex* parent, StorageIndex* tmp) {
|
|
136
|
+
std::fill_n(parent, size, kEmpty);
|
|
137
|
+
|
|
138
|
+
DisjointSet ancestor(tmp, size);
|
|
139
|
+
|
|
140
|
+
for (StorageIndex j = 1; j < size; j++) {
|
|
141
|
+
for (InnerIterator it(ap, j); it; ++it) {
|
|
142
|
+
StorageIndex i = it.index();
|
|
143
|
+
if (i < j) {
|
|
144
|
+
StorageIndex r = ancestor.find(i);
|
|
145
|
+
if (r != j) parent[r] = j;
|
|
146
|
+
ancestor.compress(i, j);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
89
151
|
|
|
90
|
-
|
|
152
|
+
// Computes the child pointers of the parent tree to facilitate a depth-first search traversal.
|
|
153
|
+
static void calc_lineage(const StorageIndex size, const StorageIndex* parent, StorageIndex* firstChild,
|
|
154
|
+
StorageIndex* firstSibling) {
|
|
155
|
+
std::fill_n(firstChild, size, kEmpty);
|
|
156
|
+
std::fill_n(firstSibling, size, kEmpty);
|
|
157
|
+
|
|
158
|
+
for (StorageIndex j = 0; j < size; j++) {
|
|
159
|
+
StorageIndex p = parent[j];
|
|
160
|
+
if (p == kEmpty) continue;
|
|
161
|
+
StorageIndex c = firstChild[p];
|
|
162
|
+
if (c == kEmpty)
|
|
163
|
+
firstChild[p] = j;
|
|
164
|
+
else {
|
|
165
|
+
while (firstSibling[c] != kEmpty) c = firstSibling[c];
|
|
166
|
+
firstSibling[c] = j;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
91
170
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
171
|
+
// Computes a post-ordered traversal of the elimination tree.
|
|
172
|
+
static void calc_post(const StorageIndex size, const StorageIndex* parent, StorageIndex* firstChild,
|
|
173
|
+
const StorageIndex* firstSibling, StorageIndex* post, StorageIndex* dfs) {
|
|
174
|
+
Stack post_stack(post, 0, size);
|
|
175
|
+
for (StorageIndex j = 0; j < size; j++) {
|
|
176
|
+
if (parent[j] != kEmpty) continue;
|
|
177
|
+
// Begin at a root
|
|
178
|
+
Stack dfs_stack(dfs, 0, size);
|
|
179
|
+
dfs_stack.push(j);
|
|
180
|
+
while (!dfs_stack.empty()) {
|
|
181
|
+
StorageIndex i = dfs_stack.back();
|
|
182
|
+
StorageIndex c = firstChild[i];
|
|
183
|
+
if (c == kEmpty) {
|
|
184
|
+
post_stack.push(i);
|
|
185
|
+
dfs_stack.pop();
|
|
186
|
+
} else {
|
|
187
|
+
dfs_stack.push(c);
|
|
188
|
+
// Remove the path from `i` to `c` for future traversals.
|
|
189
|
+
firstChild[i] = firstSibling[c];
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
eigen_assert(post_stack.size() == size);
|
|
194
|
+
eigen_assert(std::all_of(firstChild, firstChild + size, [](StorageIndex a) { return a == kEmpty; }));
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// Adapted from:
|
|
198
|
+
// Gilbert, J. R., Ng, E., & Peyton, B. W. (1994).
|
|
199
|
+
// An efficient algorithm to compute row and column counts for sparse Cholesky factorization.
|
|
200
|
+
// SIAM Journal on Matrix Analysis and Applications, 15(4), 1075-1091.
|
|
201
|
+
|
|
202
|
+
// Computes the non-zero pattern of the L factor.
|
|
203
|
+
static void calc_colcount(const StorageIndex size, const StorageIndex* hadjOuter, const StorageIndex* hadjInner,
|
|
204
|
+
const StorageIndex* parent, StorageIndex* prevLeaf, StorageIndex* tmp,
|
|
205
|
+
const StorageIndex* post, StorageIndex* nonZerosPerCol, bool doLDLT) {
|
|
206
|
+
// initialize nonZerosPerCol with 1 for leaves, 0 for non-leaves
|
|
207
|
+
std::fill_n(nonZerosPerCol, size, 1);
|
|
208
|
+
for (StorageIndex j = 0; j < size; j++) {
|
|
209
|
+
StorageIndex p = parent[j];
|
|
210
|
+
// p is not a leaf
|
|
211
|
+
if (p != kEmpty) nonZerosPerCol[p] = 0;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
DisjointSet parentSet(tmp, size);
|
|
215
|
+
// prevLeaf is already initialized
|
|
216
|
+
eigen_assert(std::all_of(prevLeaf, prevLeaf + size, [](StorageIndex a) { return a == kEmpty; }));
|
|
217
|
+
|
|
218
|
+
for (StorageIndex j_ = 0; j_ < size; j_++) {
|
|
219
|
+
StorageIndex j = post[j_];
|
|
220
|
+
nonZerosPerCol[j] += hadjOuter[j + 1] - hadjOuter[j];
|
|
221
|
+
for (StorageIndex k = hadjOuter[j]; k < hadjOuter[j + 1]; k++) {
|
|
222
|
+
StorageIndex i = hadjInner[k];
|
|
223
|
+
eigen_assert(i > j);
|
|
224
|
+
StorageIndex prev = prevLeaf[i];
|
|
225
|
+
if (prev != kEmpty) {
|
|
226
|
+
StorageIndex q = parentSet.find(prev);
|
|
227
|
+
parentSet.compress(prev, q);
|
|
228
|
+
nonZerosPerCol[q]--;
|
|
229
|
+
}
|
|
230
|
+
prevLeaf[i] = j;
|
|
231
|
+
}
|
|
232
|
+
StorageIndex p = parent[j];
|
|
233
|
+
if (p != kEmpty) parentSet.compress(j, p);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
for (StorageIndex j = 0; j < size; j++) {
|
|
237
|
+
StorageIndex p = parent[j];
|
|
238
|
+
if (p != kEmpty) nonZerosPerCol[p] += nonZerosPerCol[j] - 1;
|
|
239
|
+
if (doLDLT) nonZerosPerCol[j]--;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// Finalizes the non zero pattern of the L factor and allocates the memory for the factorization.
|
|
244
|
+
static void init_matrix(const StorageIndex size, const StorageIndex* nonZerosPerCol, CholMatrixType& L) {
|
|
245
|
+
eigen_assert(L.outerIndexPtr()[0] == 0);
|
|
246
|
+
std::partial_sum(nonZerosPerCol, nonZerosPerCol + size, L.outerIndexPtr() + 1);
|
|
247
|
+
L.resizeNonZeros(L.outerIndexPtr()[size]);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
// Driver routine for the symbolic sparse Cholesky factorization.
|
|
251
|
+
static void run(const StorageIndex size, const CholMatrixType& ap, CholMatrixType& L, VectorI& parent,
|
|
252
|
+
VectorI& workSpace, bool doLDLT) {
|
|
253
|
+
parent.resize(size);
|
|
254
|
+
workSpace.resize(4 * size);
|
|
255
|
+
L.resize(size, size);
|
|
256
|
+
|
|
257
|
+
StorageIndex* tmp1 = workSpace.data();
|
|
258
|
+
StorageIndex* tmp2 = workSpace.data() + size;
|
|
259
|
+
StorageIndex* tmp3 = workSpace.data() + 2 * size;
|
|
260
|
+
StorageIndex* tmp4 = workSpace.data() + 3 * size;
|
|
261
|
+
|
|
262
|
+
// Borrow L's outer index array for the higher adjacency pattern.
|
|
263
|
+
StorageIndex* hadj_outer = L.outerIndexPtr();
|
|
264
|
+
calc_hadj_outer(size, ap, hadj_outer);
|
|
265
|
+
// Request additional temporary storage for the inner indices of the higher adjacency pattern.
|
|
266
|
+
ei_declare_aligned_stack_constructed_variable(StorageIndex, hadj_inner, hadj_outer[size], nullptr);
|
|
267
|
+
calc_hadj_inner(size, ap, hadj_outer, hadj_inner, tmp1);
|
|
268
|
+
|
|
269
|
+
calc_etree(size, ap, parent.data(), tmp1);
|
|
270
|
+
calc_lineage(size, parent.data(), tmp1, tmp2);
|
|
271
|
+
calc_post(size, parent.data(), tmp1, tmp2, tmp3, tmp4);
|
|
272
|
+
calc_colcount(size, hadj_outer, hadj_inner, parent.data(), tmp1, tmp2, tmp3, tmp4, doLDLT);
|
|
273
|
+
init_matrix(size, tmp4, L);
|
|
274
|
+
}
|
|
275
|
+
};
|
|
276
|
+
|
|
277
|
+
// Symbol is ODR-used, so we need a definition.
|
|
278
|
+
template <typename Scalar, typename StorageIndex>
|
|
279
|
+
constexpr StorageIndex simpl_chol_helper<Scalar, StorageIndex>::kEmpty;
|
|
280
|
+
|
|
281
|
+
} // namespace internal
|
|
282
|
+
|
|
283
|
+
template <typename Derived>
|
|
284
|
+
void SimplicialCholeskyBase<Derived>::analyzePattern_preordered(const CholMatrixType& ap, bool doLDLT) {
|
|
285
|
+
using Helper = internal::simpl_chol_helper<Scalar, StorageIndex>;
|
|
286
|
+
|
|
287
|
+
eigen_assert(ap.innerSize() == ap.outerSize());
|
|
288
|
+
const StorageIndex size = internal::convert_index<StorageIndex>(ap.outerSize());
|
|
289
|
+
|
|
290
|
+
Helper::run(size, ap, m_matrix, m_parent, m_workSpace, doLDLT);
|
|
291
|
+
|
|
292
|
+
m_isInitialized = true;
|
|
293
|
+
m_info = Success;
|
|
294
|
+
m_analysisIsOk = true;
|
|
95
295
|
m_factorizationIsOk = false;
|
|
96
296
|
}
|
|
97
297
|
|
|
98
|
-
|
|
99
|
-
template<
|
|
100
|
-
|
|
101
|
-
void SimplicialCholeskyBase<Derived>::factorize_preordered(const CholMatrixType& ap)
|
|
102
|
-
{
|
|
298
|
+
template <typename Derived>
|
|
299
|
+
template <bool DoLDLT, bool NonHermitian>
|
|
300
|
+
void SimplicialCholeskyBase<Derived>::factorize_preordered(const CholMatrixType& ap) {
|
|
103
301
|
using std::sqrt;
|
|
302
|
+
const StorageIndex size = StorageIndex(ap.rows());
|
|
104
303
|
|
|
105
304
|
eigen_assert(m_analysisIsOk && "You must first call analyzePattern()");
|
|
106
|
-
eigen_assert(ap.rows()==ap.cols());
|
|
107
|
-
eigen_assert(m_parent.size()==
|
|
108
|
-
eigen_assert(
|
|
305
|
+
eigen_assert(ap.rows() == ap.cols());
|
|
306
|
+
eigen_assert(m_parent.size() == size);
|
|
307
|
+
eigen_assert(m_workSpace.size() >= 3 * size);
|
|
109
308
|
|
|
110
|
-
const StorageIndex size = StorageIndex(ap.rows());
|
|
111
309
|
const StorageIndex* Lp = m_matrix.outerIndexPtr();
|
|
112
310
|
StorageIndex* Li = m_matrix.innerIndexPtr();
|
|
113
311
|
Scalar* Lx = m_matrix.valuePtr();
|
|
114
312
|
|
|
115
313
|
ei_declare_aligned_stack_constructed_variable(Scalar, y, size, 0);
|
|
116
|
-
|
|
117
|
-
|
|
314
|
+
StorageIndex* nonZerosPerCol = m_workSpace.data();
|
|
315
|
+
StorageIndex* pattern = m_workSpace.data() + size;
|
|
316
|
+
StorageIndex* tags = m_workSpace.data() + 2 * size;
|
|
118
317
|
|
|
119
318
|
bool ok = true;
|
|
120
319
|
m_diag.resize(DoLDLT ? size : 0);
|
|
121
320
|
|
|
122
|
-
for(StorageIndex k = 0; k < size; ++k)
|
|
123
|
-
{
|
|
321
|
+
for (StorageIndex k = 0; k < size; ++k) {
|
|
124
322
|
// compute nonzero pattern of kth row of L, in topological order
|
|
125
|
-
y[k] = 0
|
|
126
|
-
StorageIndex top = size;
|
|
127
|
-
tags[k] = k;
|
|
128
|
-
|
|
129
|
-
for(typename CholMatrixType::InnerIterator it(ap,k); it; ++it)
|
|
130
|
-
{
|
|
323
|
+
y[k] = Scalar(0); // Y(0:k) is now all zero
|
|
324
|
+
StorageIndex top = size; // stack for pattern is empty
|
|
325
|
+
tags[k] = k; // mark node k as visited
|
|
326
|
+
nonZerosPerCol[k] = 0; // count of nonzeros in column k of L
|
|
327
|
+
for (typename CholMatrixType::InnerIterator it(ap, k); it; ++it) {
|
|
131
328
|
StorageIndex i = it.index();
|
|
132
|
-
if(i <= k)
|
|
133
|
-
|
|
134
|
-
y[i] += numext::conj(it.value()); /* scatter A(i,k) into Y (sum duplicates) */
|
|
329
|
+
if (i <= k) {
|
|
330
|
+
y[i] += getSymm(it.value()); /* scatter A(i,k) into Y (sum duplicates) */
|
|
135
331
|
Index len;
|
|
136
|
-
for(len = 0; tags[i] != k; i = m_parent[i])
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
tags[i] = k; /* mark i as visited */
|
|
332
|
+
for (len = 0; tags[i] != k; i = m_parent[i]) {
|
|
333
|
+
pattern[len++] = i; /* L(k,i) is nonzero */
|
|
334
|
+
tags[i] = k; /* mark i as visited */
|
|
140
335
|
}
|
|
141
|
-
while(len > 0)
|
|
142
|
-
pattern[--top] = pattern[--len];
|
|
336
|
+
while (len > 0) pattern[--top] = pattern[--len];
|
|
143
337
|
}
|
|
144
338
|
}
|
|
145
339
|
|
|
146
340
|
/* compute numerical values kth row of L (a sparse triangular solve) */
|
|
147
341
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
{
|
|
152
|
-
Index i = pattern[top];
|
|
153
|
-
Scalar yi = y[i];
|
|
154
|
-
y[i] = 0
|
|
342
|
+
DiagonalScalar d =
|
|
343
|
+
getDiag(y[k]) * m_shiftScale + m_shiftOffset; // get D(k,k), apply the shift function, and clear Y(k)
|
|
344
|
+
y[k] = Scalar(0);
|
|
345
|
+
for (; top < size; ++top) {
|
|
346
|
+
Index i = pattern[top]; /* pattern[top:n-1] is pattern of L(:,k) */
|
|
347
|
+
Scalar yi = y[i]; /* get and clear Y(i) */
|
|
348
|
+
y[i] = Scalar(0);
|
|
155
349
|
|
|
156
350
|
/* the nonzero entry L(k,i) */
|
|
157
351
|
Scalar l_ki;
|
|
158
|
-
if(DoLDLT)
|
|
159
|
-
l_ki = yi /
|
|
352
|
+
if (DoLDLT)
|
|
353
|
+
l_ki = yi / getDiag(m_diag[i]);
|
|
160
354
|
else
|
|
161
355
|
yi = l_ki = yi / Lx[Lp[i]];
|
|
162
356
|
|
|
163
|
-
Index p2 = Lp[i] +
|
|
357
|
+
Index p2 = Lp[i] + nonZerosPerCol[i];
|
|
164
358
|
Index p;
|
|
165
|
-
for(p = Lp[i] + (DoLDLT ? 0 : 1); p < p2; ++p)
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
Li[p] = k; /* store L(k,i) in column form of L */
|
|
359
|
+
for (p = Lp[i] + (DoLDLT ? 0 : 1); p < p2; ++p) y[Li[p]] -= getSymm(Lx[p]) * yi;
|
|
360
|
+
d -= getDiag(l_ki * getSymm(yi));
|
|
361
|
+
Li[p] = k; /* store L(k,i) in column form of L */
|
|
169
362
|
Lx[p] = l_ki;
|
|
170
|
-
++
|
|
363
|
+
++nonZerosPerCol[i]; /* increment count of nonzeros in col i */
|
|
171
364
|
}
|
|
172
|
-
if(DoLDLT)
|
|
173
|
-
{
|
|
365
|
+
if (DoLDLT) {
|
|
174
366
|
m_diag[k] = d;
|
|
175
|
-
if(d == RealScalar(0))
|
|
176
|
-
|
|
177
|
-
ok = false; /* failure, D(k,k) is zero */
|
|
367
|
+
if (d == RealScalar(0)) {
|
|
368
|
+
ok = false; /* failure, D(k,k) is zero */
|
|
178
369
|
break;
|
|
179
370
|
}
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
if(d <= RealScalar(0)) {
|
|
186
|
-
ok = false; /* failure, matrix is not positive definite */
|
|
371
|
+
} else {
|
|
372
|
+
Index p = Lp[k] + nonZerosPerCol[k]++;
|
|
373
|
+
Li[p] = k; /* store L(k,k) = sqrt (d) in column k */
|
|
374
|
+
if (NonHermitian ? d == RealScalar(0) : numext::real(d) <= RealScalar(0)) {
|
|
375
|
+
ok = false; /* failure, matrix is not positive definite */
|
|
187
376
|
break;
|
|
188
377
|
}
|
|
189
|
-
Lx[p] = sqrt(d)
|
|
378
|
+
Lx[p] = sqrt(d);
|
|
190
379
|
}
|
|
191
380
|
}
|
|
192
381
|
|
|
@@ -194,6 +383,6 @@ void SimplicialCholeskyBase<Derived>::factorize_preordered(const CholMatrixType&
|
|
|
194
383
|
m_factorizationIsOk = true;
|
|
195
384
|
}
|
|
196
385
|
|
|
197
|
-
}
|
|
386
|
+
} // end namespace Eigen
|
|
198
387
|
|
|
199
|
-
#endif
|
|
388
|
+
#endif // EIGEN_SIMPLICIAL_CHOLESKY_IMPL_H
|