@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,444 +2,412 @@
|
|
|
2
2
|
// for linear algebra.
|
|
3
3
|
//
|
|
4
4
|
// Copyright (C) 2010 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
11
|
NOTE: this routine has been adapted from the CSparse library:
|
|
9
12
|
|
|
10
13
|
Copyright (c) 2006, Timothy A. Davis.
|
|
11
14
|
http://www.suitesparse.com
|
|
12
15
|
|
|
13
|
-
CSparse
|
|
14
|
-
|
|
15
|
-
License as
|
|
16
|
-
version 2.1 of the License, or (at your option) any later version.
|
|
17
|
-
|
|
18
|
-
CSparse is distributed in the hope that it will be useful,
|
|
19
|
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
20
|
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
21
|
-
Lesser General Public License for more details.
|
|
22
|
-
|
|
23
|
-
You should have received a copy of the GNU Lesser General Public
|
|
24
|
-
License along with this Module; if not, write to the Free Software
|
|
25
|
-
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
26
|
-
|
|
16
|
+
The author of CSparse, Timothy A. Davis., has executed a license with Google LLC
|
|
17
|
+
to permit distribution of this code and derivative works as part of Eigen under
|
|
18
|
+
the Mozilla Public License v. 2.0, as stated at the top of this file.
|
|
27
19
|
*/
|
|
28
20
|
|
|
29
|
-
#include "../Core/util/NonMPL2.h"
|
|
30
|
-
|
|
31
21
|
#ifndef EIGEN_SPARSE_AMD_H
|
|
32
22
|
#define EIGEN_SPARSE_AMD_H
|
|
33
23
|
|
|
34
|
-
|
|
24
|
+
// IWYU pragma: private
|
|
25
|
+
#include "./InternalHeaderCheck.h"
|
|
26
|
+
|
|
27
|
+
namespace Eigen {
|
|
35
28
|
|
|
36
29
|
namespace internal {
|
|
37
|
-
|
|
38
|
-
template<typename T>
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
30
|
+
|
|
31
|
+
template <typename T>
|
|
32
|
+
inline T amd_flip(const T& i) {
|
|
33
|
+
return -i - 2;
|
|
34
|
+
}
|
|
35
|
+
template <typename T>
|
|
36
|
+
inline T amd_unflip(const T& i) {
|
|
37
|
+
return i < 0 ? amd_flip(i) : i;
|
|
38
|
+
}
|
|
39
|
+
template <typename T0, typename T1>
|
|
40
|
+
inline bool amd_marked(const T0* w, const T1& j) {
|
|
41
|
+
return w[j] < 0;
|
|
42
|
+
}
|
|
43
|
+
template <typename T0, typename T1>
|
|
44
|
+
inline void amd_mark(const T0* w, const T1& j) {
|
|
45
|
+
return w[j] = amd_flip(w[j]);
|
|
46
|
+
}
|
|
42
47
|
|
|
43
48
|
/* clear w */
|
|
44
|
-
template<typename StorageIndex>
|
|
45
|
-
static StorageIndex cs_wclear
|
|
46
|
-
{
|
|
49
|
+
template <typename StorageIndex>
|
|
50
|
+
static StorageIndex cs_wclear(StorageIndex mark, StorageIndex lemax, StorageIndex* w, StorageIndex n) {
|
|
47
51
|
StorageIndex k;
|
|
48
|
-
if(mark < 2 || (mark + lemax < 0))
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
if(w[k] != 0)
|
|
52
|
-
w[k] = 1;
|
|
52
|
+
if (mark < 2 || (mark + lemax < 0)) {
|
|
53
|
+
for (k = 0; k < n; k++)
|
|
54
|
+
if (w[k] != 0) w[k] = 1;
|
|
53
55
|
mark = 2;
|
|
54
56
|
}
|
|
55
|
-
return (mark);
|
|
57
|
+
return (mark); /* at this point, w[0..n-1] < mark holds */
|
|
56
58
|
}
|
|
57
59
|
|
|
58
60
|
/* depth-first search and postorder of a tree rooted at node j */
|
|
59
|
-
template<typename StorageIndex>
|
|
60
|
-
StorageIndex cs_tdfs(StorageIndex j, StorageIndex k, StorageIndex
|
|
61
|
-
{
|
|
61
|
+
template <typename StorageIndex>
|
|
62
|
+
StorageIndex cs_tdfs(StorageIndex j, StorageIndex k, StorageIndex* head, const StorageIndex* next, StorageIndex* post,
|
|
63
|
+
StorageIndex* stack) {
|
|
62
64
|
StorageIndex i, p, top = 0;
|
|
63
|
-
if(!head || !next || !post || !stack) return (-1);
|
|
64
|
-
stack[0] = j;
|
|
65
|
-
while (top >= 0)
|
|
65
|
+
if (!head || !next || !post || !stack) return (-1); /* check inputs */
|
|
66
|
+
stack[0] = j; /* place j on the stack */
|
|
67
|
+
while (top >= 0) /* while (stack is not empty) */
|
|
66
68
|
{
|
|
67
|
-
p = stack[top];
|
|
68
|
-
i = head[p];
|
|
69
|
-
if(i == -1)
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
{
|
|
76
|
-
head[p] = next[i]; /* remove i from children of p */
|
|
77
|
-
stack[++top] = i; /* start dfs on child node i */
|
|
69
|
+
p = stack[top]; /* p = top of stack */
|
|
70
|
+
i = head[p]; /* i = youngest child of p */
|
|
71
|
+
if (i == -1) {
|
|
72
|
+
top--; /* p has no unordered children left */
|
|
73
|
+
post[k++] = p; /* node p is the kth postordered node */
|
|
74
|
+
} else {
|
|
75
|
+
head[p] = next[i]; /* remove i from children of p */
|
|
76
|
+
stack[++top] = i; /* start dfs on child node i */
|
|
78
77
|
}
|
|
79
78
|
}
|
|
80
79
|
return k;
|
|
81
80
|
}
|
|
82
81
|
|
|
83
|
-
|
|
84
82
|
/** \internal
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
template<typename Scalar, typename StorageIndex>
|
|
94
|
-
void minimum_degree_ordering(SparseMatrix<Scalar,ColMajor,StorageIndex>& C,
|
|
95
|
-
{
|
|
83
|
+
* \ingroup OrderingMethods_Module
|
|
84
|
+
* Approximate minimum degree ordering algorithm.
|
|
85
|
+
*
|
|
86
|
+
* \param[in] C the input selfadjoint matrix stored in compressed column major format.
|
|
87
|
+
* \param[out] perm the permutation P reducing the fill-in of the input matrix \a C
|
|
88
|
+
*
|
|
89
|
+
* Note that the input matrix \a C must be complete, that is both the upper and lower parts have to be stored, as well
|
|
90
|
+
* as the diagonal entries. On exit the values of C are destroyed */
|
|
91
|
+
template <typename Scalar, typename StorageIndex>
|
|
92
|
+
void minimum_degree_ordering(SparseMatrix<Scalar, ColMajor, StorageIndex>& C,
|
|
93
|
+
PermutationMatrix<Dynamic, Dynamic, StorageIndex>& perm) {
|
|
96
94
|
using std::sqrt;
|
|
97
|
-
|
|
98
|
-
StorageIndex d, dk, dext, lemax = 0, e, elenk, eln, i, j, k, k1,
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
95
|
+
|
|
96
|
+
StorageIndex d, dk, dext, lemax = 0, e, elenk, eln, i, j, k, k1, k2, k3, jlast, ln, dense, nzmax, mindeg = 0, nvi,
|
|
97
|
+
nvj, nvk, mark, wnvi, ok, nel = 0, p, p1, p2, p3, p4, pj, pk, pk1, pk2, pn, q, t, h;
|
|
98
|
+
|
|
102
99
|
StorageIndex n = StorageIndex(C.cols());
|
|
103
|
-
dense = std::max<StorageIndex>
|
|
104
|
-
dense = (std::min)(n-2, dense);
|
|
105
|
-
|
|
100
|
+
dense = std::max<StorageIndex>(16, StorageIndex(10 * sqrt(double(n)))); /* find dense threshold */
|
|
101
|
+
dense = (std::min)(n - 2, dense);
|
|
102
|
+
|
|
106
103
|
StorageIndex cnz = StorageIndex(C.nonZeros());
|
|
107
|
-
perm.resize(n+1);
|
|
108
|
-
t = cnz + cnz/5 + 2*n;
|
|
104
|
+
perm.resize(n + 1);
|
|
105
|
+
t = cnz + cnz / 5 + 2 * n; /* add elbow room to C */
|
|
109
106
|
C.resizeNonZeros(t);
|
|
110
|
-
|
|
107
|
+
|
|
111
108
|
// get workspace
|
|
112
|
-
ei_declare_aligned_stack_constructed_variable(StorageIndex,W,8*(n+1),0);
|
|
113
|
-
StorageIndex* len
|
|
114
|
-
StorageIndex* nv
|
|
115
|
-
StorageIndex* next
|
|
116
|
-
StorageIndex* head
|
|
117
|
-
StorageIndex* elen
|
|
118
|
-
StorageIndex* degree
|
|
119
|
-
StorageIndex* w
|
|
120
|
-
StorageIndex* hhead
|
|
121
|
-
StorageIndex* last
|
|
122
|
-
|
|
109
|
+
ei_declare_aligned_stack_constructed_variable(StorageIndex, W, 8 * (n + 1), 0);
|
|
110
|
+
StorageIndex* len = W;
|
|
111
|
+
StorageIndex* nv = W + (n + 1);
|
|
112
|
+
StorageIndex* next = W + 2 * (n + 1);
|
|
113
|
+
StorageIndex* head = W + 3 * (n + 1);
|
|
114
|
+
StorageIndex* elen = W + 4 * (n + 1);
|
|
115
|
+
StorageIndex* degree = W + 5 * (n + 1);
|
|
116
|
+
StorageIndex* w = W + 6 * (n + 1);
|
|
117
|
+
StorageIndex* hhead = W + 7 * (n + 1);
|
|
118
|
+
StorageIndex* last = perm.indices().data(); /* use P as workspace for last */
|
|
119
|
+
|
|
123
120
|
/* --- Initialize quotient graph ---------------------------------------- */
|
|
124
121
|
StorageIndex* Cp = C.outerIndexPtr();
|
|
125
122
|
StorageIndex* Ci = C.innerIndexPtr();
|
|
126
|
-
for(k = 0; k < n; k++)
|
|
127
|
-
len[k] = Cp[k+1] - Cp[k];
|
|
123
|
+
for (k = 0; k < n; k++) len[k] = Cp[k + 1] - Cp[k];
|
|
128
124
|
len[n] = 0;
|
|
129
125
|
nzmax = t;
|
|
130
|
-
|
|
131
|
-
for(i = 0; i <= n; i++)
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
degree[i] = len[i]; // degree of node i
|
|
126
|
+
|
|
127
|
+
for (i = 0; i <= n; i++) {
|
|
128
|
+
head[i] = -1; // degree list i is empty
|
|
129
|
+
last[i] = -1;
|
|
130
|
+
next[i] = -1;
|
|
131
|
+
hhead[i] = -1; // hash list i is empty
|
|
132
|
+
nv[i] = 1; // node i is just one node
|
|
133
|
+
w[i] = 1; // node i is alive
|
|
134
|
+
elen[i] = 0; // Ek of node i is empty
|
|
135
|
+
degree[i] = len[i]; // degree of node i
|
|
141
136
|
}
|
|
142
|
-
mark = internal::cs_wclear<StorageIndex>(0, 0, w, n);
|
|
143
|
-
|
|
137
|
+
mark = internal::cs_wclear<StorageIndex>(0, 0, w, n); /* clear w */
|
|
138
|
+
|
|
144
139
|
/* --- Initialize degree lists ------------------------------------------ */
|
|
145
|
-
for(i = 0; i < n; i++)
|
|
146
|
-
{
|
|
140
|
+
for (i = 0; i < n; i++) {
|
|
147
141
|
bool has_diag = false;
|
|
148
|
-
for(p = Cp[i]; p<Cp[i+1]; ++p)
|
|
149
|
-
if(Ci[p]==i)
|
|
150
|
-
{
|
|
142
|
+
for (p = Cp[i]; p < Cp[i + 1]; ++p)
|
|
143
|
+
if (Ci[p] == i) {
|
|
151
144
|
has_diag = true;
|
|
152
145
|
break;
|
|
153
146
|
}
|
|
154
|
-
|
|
147
|
+
|
|
155
148
|
d = degree[i];
|
|
156
|
-
if(d == 1 && has_diag)
|
|
149
|
+
if (d == 1 && has_diag) /* node i is empty */
|
|
157
150
|
{
|
|
158
|
-
elen[i] = -2;
|
|
151
|
+
elen[i] = -2; /* element i is dead */
|
|
159
152
|
nel++;
|
|
160
|
-
Cp[i] = -1;
|
|
153
|
+
Cp[i] = -1; /* i is a root of assembly tree */
|
|
161
154
|
w[i] = 0;
|
|
162
|
-
}
|
|
163
|
-
else if(d > dense || !has_diag) /* node i is dense or has no structural diagonal element */
|
|
155
|
+
} else if (d > dense || !has_diag) /* node i is dense or has no structural diagonal element */
|
|
164
156
|
{
|
|
165
|
-
nv[i] = 0;
|
|
166
|
-
elen[i] = -1;
|
|
157
|
+
nv[i] = 0; /* absorb i into element n */
|
|
158
|
+
elen[i] = -1; /* node i is dead */
|
|
167
159
|
nel++;
|
|
168
|
-
Cp[i] = amd_flip
|
|
160
|
+
Cp[i] = amd_flip(n);
|
|
169
161
|
nv[n]++;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
if(head[d] != -1) last[head[d]] = i;
|
|
174
|
-
next[i] = head[d]; /* put node i in degree list d */
|
|
162
|
+
} else {
|
|
163
|
+
if (head[d] != -1) last[head[d]] = i;
|
|
164
|
+
next[i] = head[d]; /* put node i in degree list d */
|
|
175
165
|
head[d] = i;
|
|
176
166
|
}
|
|
177
167
|
}
|
|
178
|
-
|
|
179
|
-
elen[n] = -2;
|
|
180
|
-
Cp[n] = -1;
|
|
181
|
-
w[n] = 0;
|
|
182
|
-
|
|
183
|
-
while (nel < n)
|
|
168
|
+
|
|
169
|
+
elen[n] = -2; /* n is a dead element */
|
|
170
|
+
Cp[n] = -1; /* n is a root of assembly tree */
|
|
171
|
+
w[n] = 0; /* n is a dead element */
|
|
172
|
+
|
|
173
|
+
while (nel < n) /* while (selecting pivots) do */
|
|
184
174
|
{
|
|
185
175
|
/* --- Select node of minimum approximate degree -------------------- */
|
|
186
|
-
for(k = -1; mindeg < n && (k = head[mindeg]) == -1; mindeg++) {
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
176
|
+
for (k = -1; mindeg < n && (k = head[mindeg]) == -1; mindeg++) {
|
|
177
|
+
}
|
|
178
|
+
if (next[k] != -1) last[next[k]] = -1;
|
|
179
|
+
head[mindeg] = next[k]; /* remove k from degree list */
|
|
180
|
+
elenk = elen[k]; /* elenk = |Ek| */
|
|
181
|
+
nvk = nv[k]; /* # of nodes k represents */
|
|
182
|
+
nel += nvk; /* nv[k] nodes of A eliminated */
|
|
183
|
+
|
|
193
184
|
/* --- Garbage collection ------------------------------------------- */
|
|
194
|
-
if(elenk > 0 && cnz + mindeg >= nzmax)
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
{
|
|
198
|
-
if((p = Cp[j]) >= 0) /* j is a live node or element */
|
|
185
|
+
if (elenk > 0 && cnz + mindeg >= nzmax) {
|
|
186
|
+
for (j = 0; j < n; j++) {
|
|
187
|
+
if ((p = Cp[j]) >= 0) /* j is a live node or element */
|
|
199
188
|
{
|
|
200
|
-
Cp[j] = Ci[p];
|
|
201
|
-
Ci[p] = amd_flip
|
|
189
|
+
Cp[j] = Ci[p]; /* save first entry of object */
|
|
190
|
+
Ci[p] = amd_flip(j); /* first entry is now amd_flip(j) */
|
|
202
191
|
}
|
|
203
192
|
}
|
|
204
|
-
for(q = 0, p = 0; p < cnz;
|
|
193
|
+
for (q = 0, p = 0; p < cnz;) /* scan all of memory */
|
|
205
194
|
{
|
|
206
|
-
if((j = amd_flip
|
|
195
|
+
if ((j = amd_flip(Ci[p++])) >= 0) /* found object j */
|
|
207
196
|
{
|
|
208
|
-
Ci[q] = Cp[j];
|
|
209
|
-
Cp[j] = q++;
|
|
210
|
-
for(k3 = 0; k3 < len[j]-1; k3++) Ci[q++] = Ci[p++];
|
|
197
|
+
Ci[q] = Cp[j]; /* restore first entry of object */
|
|
198
|
+
Cp[j] = q++; /* new pointer to object j */
|
|
199
|
+
for (k3 = 0; k3 < len[j] - 1; k3++) Ci[q++] = Ci[p++];
|
|
211
200
|
}
|
|
212
201
|
}
|
|
213
|
-
cnz = q;
|
|
202
|
+
cnz = q; /* Ci[cnz...nzmax-1] now free */
|
|
214
203
|
}
|
|
215
|
-
|
|
204
|
+
|
|
216
205
|
/* --- Construct new element ---------------------------------------- */
|
|
217
206
|
dk = 0;
|
|
218
|
-
nv[k] = -nvk;
|
|
207
|
+
nv[k] = -nvk; /* flag k as in Lk */
|
|
219
208
|
p = Cp[k];
|
|
220
|
-
pk1 = (elenk == 0) ? p : cnz;
|
|
209
|
+
pk1 = (elenk == 0) ? p : cnz; /* do in place if elen[k] == 0 */
|
|
221
210
|
pk2 = pk1;
|
|
222
|
-
for(k1 = 1; k1 <= elenk + 1; k1++)
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
}
|
|
230
|
-
else
|
|
231
|
-
{
|
|
232
|
-
e = Ci[p++]; /* search the nodes in e */
|
|
211
|
+
for (k1 = 1; k1 <= elenk + 1; k1++) {
|
|
212
|
+
if (k1 > elenk) {
|
|
213
|
+
e = k; /* search the nodes in k */
|
|
214
|
+
pj = p; /* list of nodes starts at Ci[pj]*/
|
|
215
|
+
ln = len[k] - elenk; /* length of list of nodes in k */
|
|
216
|
+
} else {
|
|
217
|
+
e = Ci[p++]; /* search the nodes in e */
|
|
233
218
|
pj = Cp[e];
|
|
234
|
-
ln = len[e];
|
|
219
|
+
ln = len[e]; /* length of list of nodes in e */
|
|
235
220
|
}
|
|
236
|
-
for(k2 = 1; k2 <= ln; k2++)
|
|
237
|
-
{
|
|
221
|
+
for (k2 = 1; k2 <= ln; k2++) {
|
|
238
222
|
i = Ci[pj++];
|
|
239
|
-
if((nvi = nv[i]) <= 0) continue; /* node i dead, or seen */
|
|
240
|
-
dk += nvi;
|
|
241
|
-
nv[i] = -nvi;
|
|
242
|
-
Ci[pk2++] = i;
|
|
243
|
-
if(next[i] != -1) last[next[i]] = last[i];
|
|
244
|
-
if(last[i] != -1)
|
|
223
|
+
if ((nvi = nv[i]) <= 0) continue; /* node i dead, or seen */
|
|
224
|
+
dk += nvi; /* degree[Lk] += size of node i */
|
|
225
|
+
nv[i] = -nvi; /* negate nv[i] to denote i in Lk*/
|
|
226
|
+
Ci[pk2++] = i; /* place i in Lk */
|
|
227
|
+
if (next[i] != -1) last[next[i]] = last[i];
|
|
228
|
+
if (last[i] != -1) /* remove i from degree list */
|
|
245
229
|
{
|
|
246
230
|
next[last[i]] = next[i];
|
|
247
|
-
}
|
|
248
|
-
else
|
|
249
|
-
{
|
|
231
|
+
} else {
|
|
250
232
|
head[degree[i]] = next[i];
|
|
251
233
|
}
|
|
252
234
|
}
|
|
253
|
-
if(e != k)
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
w[e] = 0; /* e is now a dead element */
|
|
235
|
+
if (e != k) {
|
|
236
|
+
Cp[e] = amd_flip(k); /* absorb e into k */
|
|
237
|
+
w[e] = 0; /* e is now a dead element */
|
|
257
238
|
}
|
|
258
239
|
}
|
|
259
|
-
if(elenk != 0) cnz = pk2;
|
|
260
|
-
degree[k] = dk;
|
|
261
|
-
Cp[k] = pk1;
|
|
240
|
+
if (elenk != 0) cnz = pk2; /* Ci[cnz...nzmax] is free */
|
|
241
|
+
degree[k] = dk; /* external degree of k - |Lk\i| */
|
|
242
|
+
Cp[k] = pk1; /* element k is in Ci[pk1..pk2-1] */
|
|
262
243
|
len[k] = pk2 - pk1;
|
|
263
|
-
elen[k] = -2;
|
|
264
|
-
|
|
244
|
+
elen[k] = -2; /* k is now an element */
|
|
245
|
+
|
|
265
246
|
/* --- Find set differences ----------------------------------------- */
|
|
266
|
-
mark = internal::cs_wclear<StorageIndex>(mark, lemax, w, n);
|
|
267
|
-
for(pk = pk1; pk < pk2; pk++)
|
|
247
|
+
mark = internal::cs_wclear<StorageIndex>(mark, lemax, w, n); /* clear w if necessary */
|
|
248
|
+
for (pk = pk1; pk < pk2; pk++) /* scan 1: find |Le\Lk| */
|
|
268
249
|
{
|
|
269
250
|
i = Ci[pk];
|
|
270
|
-
if((eln = elen[i]) <= 0) continue
|
|
271
|
-
nvi = -nv[i];
|
|
251
|
+
if ((eln = elen[i]) <= 0) continue; /* skip if elen[i] empty */
|
|
252
|
+
nvi = -nv[i]; /* nv[i] was negated */
|
|
272
253
|
wnvi = mark - nvi;
|
|
273
|
-
for(p = Cp[i]; p <= Cp[i] + eln - 1; p++)
|
|
254
|
+
for (p = Cp[i]; p <= Cp[i] + eln - 1; p++) /* scan Ei */
|
|
274
255
|
{
|
|
275
256
|
e = Ci[p];
|
|
276
|
-
if(w[e] >= mark)
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
}
|
|
280
|
-
else if(w[e] != 0) /* ensure e is a live element */
|
|
257
|
+
if (w[e] >= mark) {
|
|
258
|
+
w[e] -= nvi; /* decrement |Le\Lk| */
|
|
259
|
+
} else if (w[e] != 0) /* ensure e is a live element */
|
|
281
260
|
{
|
|
282
261
|
w[e] = degree[e] + wnvi; /* 1st time e seen in scan 1 */
|
|
283
262
|
}
|
|
284
263
|
}
|
|
285
264
|
}
|
|
286
|
-
|
|
265
|
+
|
|
287
266
|
/* --- Degree update ------------------------------------------------ */
|
|
288
|
-
for(pk = pk1; pk < pk2; pk++)
|
|
267
|
+
for (pk = pk1; pk < pk2; pk++) /* scan2: degree update */
|
|
289
268
|
{
|
|
290
|
-
i = Ci[pk];
|
|
269
|
+
i = Ci[pk]; /* consider node i in Lk */
|
|
291
270
|
p1 = Cp[i];
|
|
292
271
|
p2 = p1 + elen[i] - 1;
|
|
293
272
|
pn = p1;
|
|
294
|
-
for(h = 0, d = 0, p = p1; p <= p2; p++)
|
|
273
|
+
for (h = 0, d = 0, p = p1; p <= p2; p++) /* scan Ei */
|
|
295
274
|
{
|
|
296
275
|
e = Ci[p];
|
|
297
|
-
if(w[e] != 0)
|
|
276
|
+
if (w[e] != 0) /* e is an unabsorbed element */
|
|
298
277
|
{
|
|
299
|
-
dext = w[e] - mark;
|
|
300
|
-
if(dext > 0)
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
{
|
|
308
|
-
Cp[e] = amd_flip (k); /* aggressive absorb. e->k */
|
|
309
|
-
w[e] = 0; /* e is a dead element */
|
|
278
|
+
dext = w[e] - mark; /* dext = |Le\Lk| */
|
|
279
|
+
if (dext > 0) {
|
|
280
|
+
d += dext; /* sum up the set differences */
|
|
281
|
+
Ci[pn++] = e; /* keep e in Ei */
|
|
282
|
+
h += e; /* compute the hash of node i */
|
|
283
|
+
} else {
|
|
284
|
+
Cp[e] = amd_flip(k); /* aggressive absorb. e->k */
|
|
285
|
+
w[e] = 0; /* e is a dead element */
|
|
310
286
|
}
|
|
311
287
|
}
|
|
312
288
|
}
|
|
313
|
-
elen[i] = pn - p1 + 1;
|
|
289
|
+
elen[i] = pn - p1 + 1; /* elen[i] = |Ei| */
|
|
314
290
|
p3 = pn;
|
|
315
291
|
p4 = p1 + len[i];
|
|
316
|
-
for(p = p2 + 1; p < p4; p++) /* prune edges in Ai */
|
|
292
|
+
for (p = p2 + 1; p < p4; p++) /* prune edges in Ai */
|
|
317
293
|
{
|
|
318
294
|
j = Ci[p];
|
|
319
|
-
if((nvj = nv[j]) <= 0) continue; /* node j dead or in Lk */
|
|
320
|
-
d += nvj;
|
|
321
|
-
Ci[pn++] = j;
|
|
322
|
-
h += j;
|
|
295
|
+
if ((nvj = nv[j]) <= 0) continue; /* node j dead or in Lk */
|
|
296
|
+
d += nvj; /* degree(i) += |j| */
|
|
297
|
+
Ci[pn++] = j; /* place j in node list of i */
|
|
298
|
+
h += j; /* compute hash for node i */
|
|
323
299
|
}
|
|
324
|
-
if(d == 0)
|
|
300
|
+
if (d == 0) /* check for mass elimination */
|
|
325
301
|
{
|
|
326
|
-
Cp[i] = amd_flip
|
|
302
|
+
Cp[i] = amd_flip(k); /* absorb i into k */
|
|
327
303
|
nvi = -nv[i];
|
|
328
|
-
dk -= nvi;
|
|
329
|
-
nvk += nvi;
|
|
304
|
+
dk -= nvi; /* |Lk| -= |i| */
|
|
305
|
+
nvk += nvi; /* |k| += nv[i] */
|
|
330
306
|
nel += nvi;
|
|
331
307
|
nv[i] = 0;
|
|
332
|
-
elen[i] = -1;
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
Ci[
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
h %= n; /* finalize hash of i */
|
|
342
|
-
next[i] = hhead[h]; /* place i in hash bucket */
|
|
308
|
+
elen[i] = -1; /* node i is dead */
|
|
309
|
+
} else {
|
|
310
|
+
degree[i] = std::min<StorageIndex>(degree[i], d); /* update degree(i) */
|
|
311
|
+
Ci[pn] = Ci[p3]; /* move first node to end */
|
|
312
|
+
Ci[p3] = Ci[p1]; /* move 1st el. to end of Ei */
|
|
313
|
+
Ci[p1] = k; /* add k as 1st element in of Ei */
|
|
314
|
+
len[i] = pn - p1 + 1; /* new len of adj. list of node i */
|
|
315
|
+
h %= n; /* finalize hash of i */
|
|
316
|
+
next[i] = hhead[h]; /* place i in hash bucket */
|
|
343
317
|
hhead[h] = i;
|
|
344
|
-
last[i] = h;
|
|
318
|
+
last[i] = h; /* save hash of i in last[i] */
|
|
345
319
|
}
|
|
346
|
-
}
|
|
347
|
-
degree[k] = dk;
|
|
320
|
+
} /* scan2 is done */
|
|
321
|
+
degree[k] = dk; /* finalize |Lk| */
|
|
348
322
|
lemax = std::max<StorageIndex>(lemax, dk);
|
|
349
|
-
mark = internal::cs_wclear<StorageIndex>(mark+lemax, lemax, w, n);
|
|
350
|
-
|
|
323
|
+
mark = internal::cs_wclear<StorageIndex>(mark + lemax, lemax, w, n); /* clear w */
|
|
324
|
+
|
|
351
325
|
/* --- Supernode detection ------------------------------------------ */
|
|
352
|
-
for(pk = pk1; pk < pk2; pk++)
|
|
353
|
-
{
|
|
326
|
+
for (pk = pk1; pk < pk2; pk++) {
|
|
354
327
|
i = Ci[pk];
|
|
355
|
-
if(nv[i] >= 0) continue;
|
|
356
|
-
h = last[i];
|
|
328
|
+
if (nv[i] >= 0) continue; /* skip if i is dead */
|
|
329
|
+
h = last[i]; /* scan hash bucket of node i */
|
|
357
330
|
i = hhead[h];
|
|
358
|
-
hhead[h] = -1;
|
|
359
|
-
for(; i != -1 && next[i] != -1; i = next[i], mark++)
|
|
360
|
-
{
|
|
331
|
+
hhead[h] = -1; /* hash bucket will be empty */
|
|
332
|
+
for (; i != -1 && next[i] != -1; i = next[i], mark++) {
|
|
361
333
|
ln = len[i];
|
|
362
334
|
eln = elen[i];
|
|
363
|
-
for(p = Cp[i]+1; p <= Cp[i] + ln-1; p++) w[Ci[p]] = mark;
|
|
335
|
+
for (p = Cp[i] + 1; p <= Cp[i] + ln - 1; p++) w[Ci[p]] = mark;
|
|
364
336
|
jlast = i;
|
|
365
|
-
for(j = next[i]; j != -1;
|
|
337
|
+
for (j = next[i]; j != -1;) /* compare i with all j */
|
|
366
338
|
{
|
|
367
339
|
ok = (len[j] == ln) && (elen[j] == eln);
|
|
368
|
-
for(p = Cp[j] + 1; ok && p <= Cp[j] + ln - 1; p++)
|
|
369
|
-
|
|
370
|
-
if(w[Ci[p]] != mark) ok = 0; /* compare i and j*/
|
|
340
|
+
for (p = Cp[j] + 1; ok && p <= Cp[j] + ln - 1; p++) {
|
|
341
|
+
if (w[Ci[p]] != mark) ok = 0; /* compare i and j*/
|
|
371
342
|
}
|
|
372
|
-
if(ok)
|
|
343
|
+
if (ok) /* i and j are identical */
|
|
373
344
|
{
|
|
374
|
-
Cp[j] = amd_flip
|
|
345
|
+
Cp[j] = amd_flip(i); /* absorb j into i */
|
|
375
346
|
nv[i] += nv[j];
|
|
376
347
|
nv[j] = 0;
|
|
377
|
-
elen[j] = -1;
|
|
378
|
-
j = next[j];
|
|
348
|
+
elen[j] = -1; /* node j is dead */
|
|
349
|
+
j = next[j]; /* delete j from hash bucket */
|
|
379
350
|
next[jlast] = j;
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
{
|
|
383
|
-
jlast = j; /* j and i are different */
|
|
351
|
+
} else {
|
|
352
|
+
jlast = j; /* j and i are different */
|
|
384
353
|
j = next[j];
|
|
385
354
|
}
|
|
386
355
|
}
|
|
387
356
|
}
|
|
388
357
|
}
|
|
389
|
-
|
|
358
|
+
|
|
390
359
|
/* --- Finalize new element------------------------------------------ */
|
|
391
|
-
for(p = pk1, pk = pk1; pk < pk2; pk++)
|
|
360
|
+
for (p = pk1, pk = pk1; pk < pk2; pk++) /* finalize Lk */
|
|
392
361
|
{
|
|
393
362
|
i = Ci[pk];
|
|
394
|
-
if((nvi = -nv[i]) <= 0) continue
|
|
395
|
-
nv[i] = nvi;
|
|
396
|
-
d = degree[i] + dk - nvi;
|
|
397
|
-
d = std::min<StorageIndex>
|
|
398
|
-
if(head[d] != -1) last[head[d]] = i;
|
|
399
|
-
next[i] = head[d];
|
|
363
|
+
if ((nvi = -nv[i]) <= 0) continue; /* skip if i is dead */
|
|
364
|
+
nv[i] = nvi; /* restore nv[i] */
|
|
365
|
+
d = degree[i] + dk - nvi; /* compute external degree(i) */
|
|
366
|
+
d = std::min<StorageIndex>(d, n - nel - nvi);
|
|
367
|
+
if (head[d] != -1) last[head[d]] = i;
|
|
368
|
+
next[i] = head[d]; /* put i back in degree list */
|
|
400
369
|
last[i] = -1;
|
|
401
370
|
head[d] = i;
|
|
402
|
-
mindeg = std::min<StorageIndex>
|
|
371
|
+
mindeg = std::min<StorageIndex>(mindeg, d); /* find new minimum degree */
|
|
403
372
|
degree[i] = d;
|
|
404
|
-
Ci[p++] = i;
|
|
373
|
+
Ci[p++] = i; /* place i in Lk */
|
|
405
374
|
}
|
|
406
|
-
nv[k] = nvk;
|
|
407
|
-
if((len[k] = p-pk1) == 0)
|
|
375
|
+
nv[k] = nvk; /* # nodes absorbed into k */
|
|
376
|
+
if ((len[k] = p - pk1) == 0) /* length of adj list of element k*/
|
|
408
377
|
{
|
|
409
|
-
Cp[k] = -1;
|
|
410
|
-
w[k] = 0;
|
|
378
|
+
Cp[k] = -1; /* k is a root of the tree */
|
|
379
|
+
w[k] = 0; /* k is now a dead element */
|
|
411
380
|
}
|
|
412
|
-
if(elenk != 0) cnz = p;
|
|
381
|
+
if (elenk != 0) cnz = p; /* free unused space in Lk */
|
|
413
382
|
}
|
|
414
|
-
|
|
383
|
+
|
|
415
384
|
/* --- Postordering ----------------------------------------------------- */
|
|
416
|
-
for(i = 0; i < n; i++) Cp[i] = amd_flip
|
|
417
|
-
for(j = 0; j <= n; j++) head[j] = -1;
|
|
418
|
-
for(j = n; j >= 0; j--)
|
|
385
|
+
for (i = 0; i < n; i++) Cp[i] = amd_flip(Cp[i]); /* fix assembly tree */
|
|
386
|
+
for (j = 0; j <= n; j++) head[j] = -1;
|
|
387
|
+
for (j = n; j >= 0; j--) /* place unordered nodes in lists */
|
|
419
388
|
{
|
|
420
|
-
if(nv[j] > 0) continue;
|
|
421
|
-
next[j] = head[Cp[j]];
|
|
389
|
+
if (nv[j] > 0) continue; /* skip if j is an element */
|
|
390
|
+
next[j] = head[Cp[j]]; /* place j in list of its parent */
|
|
422
391
|
head[Cp[j]] = j;
|
|
423
392
|
}
|
|
424
|
-
for(e = n; e >= 0; e--)
|
|
393
|
+
for (e = n; e >= 0; e--) /* place elements in lists */
|
|
425
394
|
{
|
|
426
|
-
if(nv[e] <= 0) continue;
|
|
427
|
-
if(Cp[e] != -1)
|
|
428
|
-
|
|
429
|
-
next[e] = head[Cp[e]]; /* place e in list of its parent */
|
|
395
|
+
if (nv[e] <= 0) continue; /* skip unless e is an element */
|
|
396
|
+
if (Cp[e] != -1) {
|
|
397
|
+
next[e] = head[Cp[e]]; /* place e in list of its parent */
|
|
430
398
|
head[Cp[e]] = e;
|
|
431
399
|
}
|
|
432
400
|
}
|
|
433
|
-
for(k = 0, i = 0; i <= n; i++)
|
|
401
|
+
for (k = 0, i = 0; i <= n; i++) /* postorder the assembly tree */
|
|
434
402
|
{
|
|
435
|
-
if(Cp[i] == -1) k = internal::cs_tdfs<StorageIndex>(i, k, head, next, perm.indices().data(), w);
|
|
403
|
+
if (Cp[i] == -1) k = internal::cs_tdfs<StorageIndex>(i, k, head, next, perm.indices().data(), w);
|
|
436
404
|
}
|
|
437
|
-
|
|
405
|
+
|
|
438
406
|
perm.indices().conservativeResize(n);
|
|
439
407
|
}
|
|
440
408
|
|
|
441
|
-
}
|
|
409
|
+
} // namespace internal
|
|
442
410
|
|
|
443
|
-
}
|
|
411
|
+
} // end namespace Eigen
|
|
444
412
|
|
|
445
|
-
#endif
|
|
413
|
+
#endif // EIGEN_SPARSE_AMD_H
|