@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.
Files changed (435) hide show
  1. package/README.md +1 -1
  2. package/eigen/Eigen/AccelerateSupport +52 -0
  3. package/eigen/Eigen/Cholesky +18 -21
  4. package/eigen/Eigen/CholmodSupport +28 -28
  5. package/eigen/Eigen/Core +235 -326
  6. package/eigen/Eigen/Eigenvalues +16 -14
  7. package/eigen/Eigen/Geometry +21 -24
  8. package/eigen/Eigen/Householder +9 -8
  9. package/eigen/Eigen/IterativeLinearSolvers +8 -4
  10. package/eigen/Eigen/Jacobi +14 -14
  11. package/eigen/Eigen/KLUSupport +43 -0
  12. package/eigen/Eigen/LU +16 -20
  13. package/eigen/Eigen/MetisSupport +12 -12
  14. package/eigen/Eigen/OrderingMethods +54 -54
  15. package/eigen/Eigen/PaStiXSupport +23 -20
  16. package/eigen/Eigen/PardisoSupport +17 -14
  17. package/eigen/Eigen/QR +18 -21
  18. package/eigen/Eigen/QtAlignedMalloc +5 -13
  19. package/eigen/Eigen/SPQRSupport +21 -14
  20. package/eigen/Eigen/SVD +23 -18
  21. package/eigen/Eigen/Sparse +1 -4
  22. package/eigen/Eigen/SparseCholesky +18 -23
  23. package/eigen/Eigen/SparseCore +18 -17
  24. package/eigen/Eigen/SparseLU +12 -8
  25. package/eigen/Eigen/SparseQR +16 -14
  26. package/eigen/Eigen/StdDeque +5 -2
  27. package/eigen/Eigen/StdList +5 -2
  28. package/eigen/Eigen/StdVector +5 -2
  29. package/eigen/Eigen/SuperLUSupport +30 -24
  30. package/eigen/Eigen/ThreadPool +80 -0
  31. package/eigen/Eigen/UmfPackSupport +19 -17
  32. package/eigen/Eigen/Version +14 -0
  33. package/eigen/Eigen/src/AccelerateSupport/AccelerateSupport.h +423 -0
  34. package/eigen/Eigen/src/AccelerateSupport/InternalHeaderCheck.h +3 -0
  35. package/eigen/Eigen/src/Cholesky/InternalHeaderCheck.h +3 -0
  36. package/eigen/Eigen/src/Cholesky/LDLT.h +377 -401
  37. package/eigen/Eigen/src/Cholesky/LLT.h +332 -360
  38. package/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +81 -56
  39. package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +620 -521
  40. package/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
  41. package/eigen/Eigen/src/Core/ArithmeticSequence.h +239 -0
  42. package/eigen/Eigen/src/Core/Array.h +341 -294
  43. package/eigen/Eigen/src/Core/ArrayBase.h +190 -203
  44. package/eigen/Eigen/src/Core/ArrayWrapper.h +127 -171
  45. package/eigen/Eigen/src/Core/Assign.h +30 -40
  46. package/eigen/Eigen/src/Core/AssignEvaluator.h +711 -589
  47. package/eigen/Eigen/src/Core/Assign_MKL.h +130 -125
  48. package/eigen/Eigen/src/Core/BandMatrix.h +268 -283
  49. package/eigen/Eigen/src/Core/Block.h +375 -398
  50. package/eigen/Eigen/src/Core/CommaInitializer.h +86 -97
  51. package/eigen/Eigen/src/Core/ConditionEstimator.h +51 -53
  52. package/eigen/Eigen/src/Core/CoreEvaluators.h +1356 -1026
  53. package/eigen/Eigen/src/Core/CoreIterators.h +73 -59
  54. package/eigen/Eigen/src/Core/CwiseBinaryOp.h +114 -132
  55. package/eigen/Eigen/src/Core/CwiseNullaryOp.h +726 -617
  56. package/eigen/Eigen/src/Core/CwiseTernaryOp.h +77 -103
  57. package/eigen/Eigen/src/Core/CwiseUnaryOp.h +56 -68
  58. package/eigen/Eigen/src/Core/CwiseUnaryView.h +132 -95
  59. package/eigen/Eigen/src/Core/DenseBase.h +632 -571
  60. package/eigen/Eigen/src/Core/DenseCoeffsBase.h +511 -624
  61. package/eigen/Eigen/src/Core/DenseStorage.h +512 -509
  62. package/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
  63. package/eigen/Eigen/src/Core/Diagonal.h +169 -210
  64. package/eigen/Eigen/src/Core/DiagonalMatrix.h +351 -274
  65. package/eigen/Eigen/src/Core/DiagonalProduct.h +12 -10
  66. package/eigen/Eigen/src/Core/Dot.h +172 -222
  67. package/eigen/Eigen/src/Core/EigenBase.h +75 -85
  68. package/eigen/Eigen/src/Core/Fill.h +138 -0
  69. package/eigen/Eigen/src/Core/FindCoeff.h +464 -0
  70. package/eigen/Eigen/src/Core/ForceAlignedAccess.h +90 -109
  71. package/eigen/Eigen/src/Core/Fuzzy.h +82 -105
  72. package/eigen/Eigen/src/Core/GeneralProduct.h +327 -263
  73. package/eigen/Eigen/src/Core/GenericPacketMath.h +1472 -360
  74. package/eigen/Eigen/src/Core/GlobalFunctions.h +194 -151
  75. package/eigen/Eigen/src/Core/IO.h +147 -139
  76. package/eigen/Eigen/src/Core/IndexedView.h +321 -0
  77. package/eigen/Eigen/src/Core/InnerProduct.h +260 -0
  78. package/eigen/Eigen/src/Core/InternalHeaderCheck.h +3 -0
  79. package/eigen/Eigen/src/Core/Inverse.h +56 -66
  80. package/eigen/Eigen/src/Core/Map.h +124 -142
  81. package/eigen/Eigen/src/Core/MapBase.h +256 -281
  82. package/eigen/Eigen/src/Core/MathFunctions.h +1620 -938
  83. package/eigen/Eigen/src/Core/MathFunctionsImpl.h +233 -71
  84. package/eigen/Eigen/src/Core/Matrix.h +491 -416
  85. package/eigen/Eigen/src/Core/MatrixBase.h +468 -453
  86. package/eigen/Eigen/src/Core/NestByValue.h +66 -85
  87. package/eigen/Eigen/src/Core/NoAlias.h +79 -85
  88. package/eigen/Eigen/src/Core/NumTraits.h +235 -148
  89. package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +253 -0
  90. package/eigen/Eigen/src/Core/PermutationMatrix.h +461 -511
  91. package/eigen/Eigen/src/Core/PlainObjectBase.h +871 -894
  92. package/eigen/Eigen/src/Core/Product.h +260 -139
  93. package/eigen/Eigen/src/Core/ProductEvaluators.h +863 -714
  94. package/eigen/Eigen/src/Core/Random.h +161 -136
  95. package/eigen/Eigen/src/Core/RandomImpl.h +262 -0
  96. package/eigen/Eigen/src/Core/RealView.h +250 -0
  97. package/eigen/Eigen/src/Core/Redux.h +366 -336
  98. package/eigen/Eigen/src/Core/Ref.h +308 -209
  99. package/eigen/Eigen/src/Core/Replicate.h +94 -106
  100. package/eigen/Eigen/src/Core/Reshaped.h +398 -0
  101. package/eigen/Eigen/src/Core/ReturnByValue.h +49 -55
  102. package/eigen/Eigen/src/Core/Reverse.h +136 -145
  103. package/eigen/Eigen/src/Core/Select.h +70 -140
  104. package/eigen/Eigen/src/Core/SelfAdjointView.h +262 -285
  105. package/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h +23 -20
  106. package/eigen/Eigen/src/Core/SkewSymmetricMatrix3.h +382 -0
  107. package/eigen/Eigen/src/Core/Solve.h +97 -111
  108. package/eigen/Eigen/src/Core/SolveTriangular.h +131 -129
  109. package/eigen/Eigen/src/Core/SolverBase.h +138 -101
  110. package/eigen/Eigen/src/Core/StableNorm.h +156 -160
  111. package/eigen/Eigen/src/Core/StlIterators.h +619 -0
  112. package/eigen/Eigen/src/Core/Stride.h +91 -88
  113. package/eigen/Eigen/src/Core/Swap.h +70 -38
  114. package/eigen/Eigen/src/Core/Transpose.h +295 -273
  115. package/eigen/Eigen/src/Core/Transpositions.h +272 -317
  116. package/eigen/Eigen/src/Core/TriangularMatrix.h +670 -755
  117. package/eigen/Eigen/src/Core/VectorBlock.h +59 -72
  118. package/eigen/Eigen/src/Core/VectorwiseOp.h +668 -630
  119. package/eigen/Eigen/src/Core/Visitor.h +480 -216
  120. package/eigen/Eigen/src/Core/arch/AVX/Complex.h +407 -293
  121. package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +79 -388
  122. package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +2935 -491
  123. package/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
  124. package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +279 -22
  125. package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +472 -0
  126. package/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
  127. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +85 -333
  128. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
  129. package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +2490 -649
  130. package/eigen/Eigen/src/Core/arch/AVX512/PacketMathFP16.h +1413 -0
  131. package/eigen/Eigen/src/Core/arch/AVX512/Reductions.h +297 -0
  132. package/eigen/Eigen/src/Core/arch/AVX512/TrsmKernel.h +1167 -0
  133. package/eigen/Eigen/src/Core/arch/AVX512/TrsmUnrolls.inc +1219 -0
  134. package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +277 -0
  135. package/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
  136. package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +521 -298
  137. package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +39 -280
  138. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +3686 -0
  139. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +205 -0
  140. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +901 -0
  141. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMAbfloat16.h +742 -0
  142. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixVectorProduct.inc +2818 -0
  143. package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +3391 -723
  144. package/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
  145. package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +866 -0
  146. package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +113 -14
  147. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +2634 -0
  148. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +227 -0
  149. package/eigen/Eigen/src/Core/arch/Default/Half.h +1091 -0
  150. package/eigen/Eigen/src/Core/arch/Default/Settings.h +11 -13
  151. package/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
  152. package/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +104 -0
  153. package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1712 -0
  154. package/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
  155. package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +77 -0
  156. package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
  157. package/eigen/Eigen/src/Core/arch/HVX/PacketMath.h +1088 -0
  158. package/eigen/Eigen/src/Core/arch/LSX/Complex.h +520 -0
  159. package/eigen/Eigen/src/Core/arch/LSX/GeneralBlockPanelKernel.h +23 -0
  160. package/eigen/Eigen/src/Core/arch/LSX/MathFunctions.h +43 -0
  161. package/eigen/Eigen/src/Core/arch/LSX/PacketMath.h +2866 -0
  162. package/eigen/Eigen/src/Core/arch/LSX/TypeCasting.h +526 -0
  163. package/eigen/Eigen/src/Core/arch/MSA/Complex.h +620 -0
  164. package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +379 -0
  165. package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1237 -0
  166. package/eigen/Eigen/src/Core/arch/NEON/Complex.h +531 -289
  167. package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +243 -0
  168. package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +50 -73
  169. package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +5915 -579
  170. package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1642 -0
  171. package/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
  172. package/eigen/Eigen/src/Core/arch/SSE/Complex.h +366 -334
  173. package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +40 -514
  174. package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +2164 -675
  175. package/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
  176. package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +188 -35
  177. package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +48 -0
  178. package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +674 -0
  179. package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +52 -0
  180. package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +227 -0
  181. package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +303 -0
  182. package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +576 -0
  183. package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +83 -0
  184. package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +434 -261
  185. package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +160 -53
  186. package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +1073 -605
  187. package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +123 -117
  188. package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +594 -322
  189. package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +204 -118
  190. package/eigen/Eigen/src/Core/functors/StlFunctors.h +110 -97
  191. package/eigen/Eigen/src/Core/functors/TernaryFunctors.h +34 -7
  192. package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1158 -530
  193. package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +2329 -1333
  194. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +328 -364
  195. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +191 -178
  196. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +85 -82
  197. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +154 -73
  198. package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +396 -542
  199. package/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +80 -77
  200. package/eigen/Eigen/src/Core/products/Parallelizer.h +208 -92
  201. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +331 -375
  202. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +206 -224
  203. package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +139 -146
  204. package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +58 -61
  205. package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +71 -71
  206. package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +48 -46
  207. package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +294 -369
  208. package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +246 -238
  209. package/eigen/Eigen/src/Core/products/TriangularMatrixVector.h +244 -247
  210. package/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +212 -192
  211. package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +328 -275
  212. package/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +108 -109
  213. package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +70 -93
  214. package/eigen/Eigen/src/Core/util/Assert.h +158 -0
  215. package/eigen/Eigen/src/Core/util/BlasUtil.h +413 -290
  216. package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +543 -0
  217. package/eigen/Eigen/src/Core/util/Constants.h +314 -263
  218. package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +130 -78
  219. package/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
  220. package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +450 -224
  221. package/eigen/Eigen/src/Core/util/GpuHipCudaDefines.inc +101 -0
  222. package/eigen/Eigen/src/Core/util/GpuHipCudaUndefines.inc +45 -0
  223. package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +487 -0
  224. package/eigen/Eigen/src/Core/util/IntegralConstant.h +279 -0
  225. package/eigen/Eigen/src/Core/util/MKL_support.h +39 -30
  226. package/eigen/Eigen/src/Core/util/Macros.h +939 -646
  227. package/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
  228. package/eigen/Eigen/src/Core/util/Memory.h +1042 -650
  229. package/eigen/Eigen/src/Core/util/Meta.h +618 -426
  230. package/eigen/Eigen/src/Core/util/MoreMeta.h +638 -0
  231. package/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +32 -19
  232. package/eigen/Eigen/src/Core/util/ReshapedHelper.h +51 -0
  233. package/eigen/Eigen/src/Core/util/Serializer.h +209 -0
  234. package/eigen/Eigen/src/Core/util/StaticAssert.h +51 -164
  235. package/eigen/Eigen/src/Core/util/SymbolicIndex.h +445 -0
  236. package/eigen/Eigen/src/Core/util/XprHelper.h +793 -538
  237. package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +246 -277
  238. package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +299 -319
  239. package/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +52 -48
  240. package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +413 -456
  241. package/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +309 -325
  242. package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +157 -171
  243. package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +292 -310
  244. package/eigen/Eigen/src/Eigenvalues/InternalHeaderCheck.h +3 -0
  245. package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +91 -107
  246. package/eigen/Eigen/src/Eigenvalues/RealQZ.h +539 -606
  247. package/eigen/Eigen/src/Eigenvalues/RealSchur.h +348 -382
  248. package/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +41 -35
  249. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +579 -600
  250. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +47 -44
  251. package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +434 -461
  252. package/eigen/Eigen/src/Geometry/AlignedBox.h +307 -214
  253. package/eigen/Eigen/src/Geometry/AngleAxis.h +135 -137
  254. package/eigen/Eigen/src/Geometry/EulerAngles.h +163 -74
  255. package/eigen/Eigen/src/Geometry/Homogeneous.h +289 -333
  256. package/eigen/Eigen/src/Geometry/Hyperplane.h +152 -161
  257. package/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
  258. package/eigen/Eigen/src/Geometry/OrthoMethods.h +168 -145
  259. package/eigen/Eigen/src/Geometry/ParametrizedLine.h +141 -104
  260. package/eigen/Eigen/src/Geometry/Quaternion.h +595 -497
  261. package/eigen/Eigen/src/Geometry/Rotation2D.h +110 -108
  262. package/eigen/Eigen/src/Geometry/RotationBase.h +148 -145
  263. package/eigen/Eigen/src/Geometry/Scaling.h +115 -90
  264. package/eigen/Eigen/src/Geometry/Transform.h +896 -953
  265. package/eigen/Eigen/src/Geometry/Translation.h +100 -98
  266. package/eigen/Eigen/src/Geometry/Umeyama.h +79 -84
  267. package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +154 -0
  268. package/eigen/Eigen/src/Householder/BlockHouseholder.h +54 -42
  269. package/eigen/Eigen/src/Householder/Householder.h +104 -122
  270. package/eigen/Eigen/src/Householder/HouseholderSequence.h +416 -382
  271. package/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
  272. package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +153 -166
  273. package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +127 -138
  274. package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +95 -124
  275. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +269 -267
  276. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +246 -259
  277. package/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
  278. package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +218 -217
  279. package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +80 -103
  280. package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +59 -63
  281. package/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
  282. package/eigen/Eigen/src/Jacobi/Jacobi.h +256 -291
  283. package/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
  284. package/eigen/Eigen/src/KLUSupport/KLUSupport.h +339 -0
  285. package/eigen/Eigen/src/LU/Determinant.h +60 -63
  286. package/eigen/Eigen/src/LU/FullPivLU.h +561 -626
  287. package/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
  288. package/eigen/Eigen/src/LU/InverseImpl.h +213 -275
  289. package/eigen/Eigen/src/LU/PartialPivLU.h +407 -435
  290. package/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +54 -40
  291. package/eigen/Eigen/src/LU/arch/InverseSize4.h +353 -0
  292. package/eigen/Eigen/src/MetisSupport/InternalHeaderCheck.h +3 -0
  293. package/eigen/Eigen/src/MetisSupport/MetisSupport.h +81 -93
  294. package/eigen/Eigen/src/OrderingMethods/Amd.h +250 -282
  295. package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +950 -1103
  296. package/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
  297. package/eigen/Eigen/src/OrderingMethods/Ordering.h +111 -122
  298. package/eigen/Eigen/src/PaStiXSupport/InternalHeaderCheck.h +3 -0
  299. package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +524 -570
  300. package/eigen/Eigen/src/PardisoSupport/InternalHeaderCheck.h +3 -0
  301. package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +385 -429
  302. package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +494 -473
  303. package/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +120 -56
  304. package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +223 -137
  305. package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +517 -460
  306. package/eigen/Eigen/src/QR/HouseholderQR.h +412 -278
  307. package/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h +32 -23
  308. package/eigen/Eigen/src/QR/InternalHeaderCheck.h +3 -0
  309. package/eigen/Eigen/src/SPQRSupport/InternalHeaderCheck.h +3 -0
  310. package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +263 -261
  311. package/eigen/Eigen/src/SVD/BDCSVD.h +872 -679
  312. package/eigen/Eigen/src/SVD/BDCSVD_LAPACKE.h +174 -0
  313. package/eigen/Eigen/src/SVD/InternalHeaderCheck.h +3 -0
  314. package/eigen/Eigen/src/SVD/JacobiSVD.h +585 -543
  315. package/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +85 -49
  316. package/eigen/Eigen/src/SVD/SVDBase.h +281 -160
  317. package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +202 -237
  318. package/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
  319. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +769 -590
  320. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +318 -129
  321. package/eigen/Eigen/src/SparseCore/AmbiVector.h +202 -251
  322. package/eigen/Eigen/src/SparseCore/CompressedStorage.h +184 -236
  323. package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +140 -184
  324. package/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
  325. package/eigen/Eigen/src/SparseCore/SparseAssign.h +174 -111
  326. package/eigen/Eigen/src/SparseCore/SparseBlock.h +408 -477
  327. package/eigen/Eigen/src/SparseCore/SparseColEtree.h +100 -112
  328. package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +531 -280
  329. package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +559 -347
  330. package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +100 -108
  331. package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +185 -191
  332. package/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h +71 -71
  333. package/eigen/Eigen/src/SparseCore/SparseDot.h +49 -47
  334. package/eigen/Eigen/src/SparseCore/SparseFuzzy.h +13 -11
  335. package/eigen/Eigen/src/SparseCore/SparseMap.h +243 -253
  336. package/eigen/Eigen/src/SparseCore/SparseMatrix.h +1614 -1142
  337. package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +403 -357
  338. package/eigen/Eigen/src/SparseCore/SparsePermutation.h +186 -115
  339. package/eigen/Eigen/src/SparseCore/SparseProduct.h +100 -91
  340. package/eigen/Eigen/src/SparseCore/SparseRedux.h +22 -24
  341. package/eigen/Eigen/src/SparseCore/SparseRef.h +268 -295
  342. package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +371 -414
  343. package/eigen/Eigen/src/SparseCore/SparseSolverBase.h +78 -87
  344. package/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +81 -95
  345. package/eigen/Eigen/src/SparseCore/SparseTranspose.h +62 -71
  346. package/eigen/Eigen/src/SparseCore/SparseTriangularView.h +132 -144
  347. package/eigen/Eigen/src/SparseCore/SparseUtil.h +146 -115
  348. package/eigen/Eigen/src/SparseCore/SparseVector.h +426 -372
  349. package/eigen/Eigen/src/SparseCore/SparseView.h +164 -193
  350. package/eigen/Eigen/src/SparseCore/TriangularSolver.h +129 -170
  351. package/eigen/Eigen/src/SparseLU/InternalHeaderCheck.h +3 -0
  352. package/eigen/Eigen/src/SparseLU/SparseLU.h +814 -618
  353. package/eigen/Eigen/src/SparseLU/SparseLUImpl.h +61 -48
  354. package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +102 -118
  355. package/eigen/Eigen/src/SparseLU/SparseLU_Structs.h +38 -35
  356. package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +273 -255
  357. package/eigen/Eigen/src/SparseLU/SparseLU_Utils.h +44 -49
  358. package/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h +104 -108
  359. package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +90 -101
  360. package/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +57 -58
  361. package/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +43 -55
  362. package/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +74 -71
  363. package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +125 -133
  364. package/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h +136 -159
  365. package/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h +51 -52
  366. package/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h +67 -73
  367. package/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h +24 -26
  368. package/eigen/Eigen/src/SparseQR/InternalHeaderCheck.h +3 -0
  369. package/eigen/Eigen/src/SparseQR/SparseQR.h +451 -490
  370. package/eigen/Eigen/src/StlSupport/StdDeque.h +28 -105
  371. package/eigen/Eigen/src/StlSupport/StdList.h +28 -84
  372. package/eigen/Eigen/src/StlSupport/StdVector.h +28 -108
  373. package/eigen/Eigen/src/StlSupport/details.h +48 -50
  374. package/eigen/Eigen/src/SuperLUSupport/InternalHeaderCheck.h +3 -0
  375. package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +634 -732
  376. package/eigen/Eigen/src/ThreadPool/Barrier.h +70 -0
  377. package/eigen/Eigen/src/ThreadPool/CoreThreadPoolDevice.h +336 -0
  378. package/eigen/Eigen/src/ThreadPool/EventCount.h +241 -0
  379. package/eigen/Eigen/src/ThreadPool/ForkJoin.h +140 -0
  380. package/eigen/Eigen/src/ThreadPool/InternalHeaderCheck.h +4 -0
  381. package/eigen/Eigen/src/ThreadPool/NonBlockingThreadPool.h +587 -0
  382. package/eigen/Eigen/src/ThreadPool/RunQueue.h +230 -0
  383. package/eigen/Eigen/src/ThreadPool/ThreadCancel.h +21 -0
  384. package/eigen/Eigen/src/ThreadPool/ThreadEnvironment.h +43 -0
  385. package/eigen/Eigen/src/ThreadPool/ThreadLocal.h +289 -0
  386. package/eigen/Eigen/src/ThreadPool/ThreadPoolInterface.h +50 -0
  387. package/eigen/Eigen/src/ThreadPool/ThreadYield.h +16 -0
  388. package/eigen/Eigen/src/UmfPackSupport/InternalHeaderCheck.h +3 -0
  389. package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +480 -380
  390. package/eigen/Eigen/src/misc/Image.h +41 -43
  391. package/eigen/Eigen/src/misc/InternalHeaderCheck.h +3 -0
  392. package/eigen/Eigen/src/misc/Kernel.h +39 -41
  393. package/eigen/Eigen/src/misc/RealSvd2x2.h +19 -21
  394. package/eigen/Eigen/src/misc/blas.h +83 -426
  395. package/eigen/Eigen/src/misc/lapacke.h +9976 -16182
  396. package/eigen/Eigen/src/misc/lapacke_helpers.h +163 -0
  397. package/eigen/Eigen/src/misc/lapacke_mangling.h +4 -5
  398. package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.inc +344 -0
  399. package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.inc +544 -0
  400. package/eigen/Eigen/src/plugins/BlockMethods.inc +1370 -0
  401. package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
  402. package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.inc +167 -0
  403. package/eigen/Eigen/src/plugins/IndexedViewMethods.inc +192 -0
  404. package/eigen/Eigen/src/plugins/InternalHeaderCheck.inc +3 -0
  405. package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.inc +331 -0
  406. package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.inc +118 -0
  407. package/eigen/Eigen/src/plugins/ReshapedMethods.inc +133 -0
  408. package/lib/LibEigen.d.ts +4 -0
  409. package/lib/LibEigen.js +14 -0
  410. package/lib/index.d.ts +1 -1
  411. package/lib/index.js +7 -3
  412. package/package.json +2 -10
  413. package/eigen/Eigen/CMakeLists.txt +0 -19
  414. package/eigen/Eigen/src/Core/BooleanRedux.h +0 -164
  415. package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +0 -103
  416. package/eigen/Eigen/src/Core/arch/CUDA/Half.h +0 -675
  417. package/eigen/Eigen/src/Core/arch/CUDA/MathFunctions.h +0 -91
  418. package/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +0 -333
  419. package/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +0 -1124
  420. package/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +0 -212
  421. package/eigen/Eigen/src/Core/util/NonMPL2.h +0 -3
  422. package/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +0 -161
  423. package/eigen/Eigen/src/LU/arch/Inverse_SSE.h +0 -338
  424. package/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h +0 -67
  425. package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +0 -280
  426. package/eigen/Eigen/src/misc/lapack.h +0 -152
  427. package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +0 -332
  428. package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +0 -552
  429. package/eigen/Eigen/src/plugins/BlockMethods.h +0 -1058
  430. package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +0 -115
  431. package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +0 -163
  432. package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +0 -152
  433. package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +0 -85
  434. package/lib/eigen.d.ts +0 -2
  435. 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 is free software; you can redistribute it and/or
14
- modify it under the terms of the GNU Lesser General Public
15
- License as published by the Free Software Foundation; either
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
- namespace Eigen {
24
+ // IWYU pragma: private
25
+ #include "./InternalHeaderCheck.h"
26
+
27
+ namespace Eigen {
35
28
 
36
29
  namespace internal {
37
-
38
- template<typename T> inline T amd_flip(const T& i) { return -i-2; }
39
- template<typename T> inline T amd_unflip(const T& i) { return i<0 ? amd_flip(i) : i; }
40
- template<typename T0, typename T1> inline bool amd_marked(const T0* w, const T1& j) { return w[j]<0; }
41
- template<typename T0, typename T1> inline void amd_mark(const T0* w, const T1& j) { return w[j] = amd_flip(w[j]); }
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 (StorageIndex mark, StorageIndex lemax, StorageIndex *w, StorageIndex n)
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
- for(k = 0; k < n; k++)
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); /* at this point, w[0..n-1] < mark holds */
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 *head, const StorageIndex *next, StorageIndex *post, StorageIndex *stack)
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); /* check inputs */
64
- stack[0] = j; /* place j on the stack */
65
- while (top >= 0) /* while (stack is not empty) */
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]; /* p = top of stack */
68
- i = head[p]; /* i = youngest child of p */
69
- if(i == -1)
70
- {
71
- top--; /* p has no unordered children left */
72
- post[k++] = p; /* node p is the kth postordered node */
73
- }
74
- else
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
- * \ingroup OrderingMethods_Module
86
- * Approximate minimum degree ordering algorithm.
87
- *
88
- * \param[in] C the input selfadjoint matrix stored in compressed column major format.
89
- * \param[out] perm the permutation P reducing the fill-in of the input matrix \a C
90
- *
91
- * Note that the input matrix \a C must be complete, that is both the upper and lower parts have to be stored, as well as the diagonal entries.
92
- * On exit the values of C are destroyed */
93
- template<typename Scalar, typename StorageIndex>
94
- void minimum_degree_ordering(SparseMatrix<Scalar,ColMajor,StorageIndex>& C, PermutationMatrix<Dynamic,Dynamic,StorageIndex>& perm)
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
- k2, k3, jlast, ln, dense, nzmax, mindeg = 0, nvi, nvj, nvk, mark, wnvi,
100
- ok, nel = 0, p, p1, p2, p3, p4, pj, pk, pk1, pk2, pn, q, t, h;
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> (16, StorageIndex(10 * sqrt(double(n)))); /* find dense threshold */
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; /* add elbow room to C */
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 = W;
114
- StorageIndex* nv = W + (n+1);
115
- StorageIndex* next = W + 2*(n+1);
116
- StorageIndex* head = W + 3*(n+1);
117
- StorageIndex* elen = W + 4*(n+1);
118
- StorageIndex* degree = W + 5*(n+1);
119
- StorageIndex* w = W + 6*(n+1);
120
- StorageIndex* hhead = W + 7*(n+1);
121
- StorageIndex* last = perm.indices().data(); /* use P as workspace for 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
- head[i] = -1; // degree list i is empty
134
- last[i] = -1;
135
- next[i] = -1;
136
- hhead[i] = -1; // hash list i is empty
137
- nv[i] = 1; // node i is just one node
138
- w[i] = 1; // node i is alive
139
- elen[i] = 0; // Ek of node i is empty
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); /* clear w */
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) /* node i is empty */
149
+ if (d == 1 && has_diag) /* node i is empty */
157
150
  {
158
- elen[i] = -2; /* element i is dead */
151
+ elen[i] = -2; /* element i is dead */
159
152
  nel++;
160
- Cp[i] = -1; /* i is a root of assembly tree */
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; /* absorb i into element n */
166
- elen[i] = -1; /* node i is dead */
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 (n);
160
+ Cp[i] = amd_flip(n);
169
161
  nv[n]++;
170
- }
171
- else
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; /* n is a dead element */
180
- Cp[n] = -1; /* n is a root of assembly tree */
181
- w[n] = 0; /* n is a dead element */
182
-
183
- while (nel < n) /* while (selecting pivots) do */
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
- if(next[k] != -1) last[next[k]] = -1;
188
- head[mindeg] = next[k]; /* remove k from degree list */
189
- elenk = elen[k]; /* elenk = |Ek| */
190
- nvk = nv[k]; /* # of nodes k represents */
191
- nel += nvk; /* nv[k] nodes of A eliminated */
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
- for(j = 0; j < n; j++)
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]; /* save first entry of object */
201
- Ci[p] = amd_flip (j); /* first entry is now amd_flip(j) */
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; ) /* scan all of memory */
193
+ for (q = 0, p = 0; p < cnz;) /* scan all of memory */
205
194
  {
206
- if((j = amd_flip (Ci[p++])) >= 0) /* found object j */
195
+ if ((j = amd_flip(Ci[p++])) >= 0) /* found object j */
207
196
  {
208
- Ci[q] = Cp[j]; /* restore first entry of object */
209
- Cp[j] = q++; /* new pointer to object j */
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; /* Ci[cnz...nzmax-1] now free */
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; /* flag k as in Lk */
207
+ nv[k] = -nvk; /* flag k as in Lk */
219
208
  p = Cp[k];
220
- pk1 = (elenk == 0) ? p : cnz; /* do in place if elen[k] == 0 */
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
- if(k1 > elenk)
225
- {
226
- e = k; /* search the nodes in k */
227
- pj = p; /* list of nodes starts at Ci[pj]*/
228
- ln = len[k] - elenk; /* length of list of nodes in k */
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]; /* length of list of nodes in 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; /* degree[Lk] += size of node i */
241
- nv[i] = -nvi; /* negate nv[i] to denote i in Lk*/
242
- Ci[pk2++] = i; /* place i in Lk */
243
- if(next[i] != -1) last[next[i]] = last[i];
244
- if(last[i] != -1) /* remove i from degree list */
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
- Cp[e] = amd_flip (k); /* absorb e into k */
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; /* Ci[cnz...nzmax] is free */
260
- degree[k] = dk; /* external degree of k - |Lk\i| */
261
- Cp[k] = pk1; /* element k is in Ci[pk1..pk2-1] */
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; /* k is now an element */
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); /* clear w if necessary */
267
- for(pk = pk1; pk < pk2; pk++) /* scan 1: find |Le\Lk| */
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;/* skip if elen[i] empty */
271
- nvi = -nv[i]; /* nv[i] was negated */
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++) /* scan Ei */
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
- w[e] -= nvi; /* decrement |Le\Lk| */
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++) /* scan2: degree update */
267
+ for (pk = pk1; pk < pk2; pk++) /* scan2: degree update */
289
268
  {
290
- i = Ci[pk]; /* consider node i in Lk */
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++) /* scan Ei */
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) /* e is an unabsorbed element */
276
+ if (w[e] != 0) /* e is an unabsorbed element */
298
277
  {
299
- dext = w[e] - mark; /* dext = |Le\Lk| */
300
- if(dext > 0)
301
- {
302
- d += dext; /* sum up the set differences */
303
- Ci[pn++] = e; /* keep e in Ei */
304
- h += e; /* compute the hash of node i */
305
- }
306
- else
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; /* elen[i] = |Ei| */
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; /* degree(i) += |j| */
321
- Ci[pn++] = j; /* place j in node list of i */
322
- h += j; /* compute hash for node i */
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) /* check for mass elimination */
300
+ if (d == 0) /* check for mass elimination */
325
301
  {
326
- Cp[i] = amd_flip (k); /* absorb i into k */
302
+ Cp[i] = amd_flip(k); /* absorb i into k */
327
303
  nvi = -nv[i];
328
- dk -= nvi; /* |Lk| -= |i| */
329
- nvk += nvi; /* |k| += nv[i] */
304
+ dk -= nvi; /* |Lk| -= |i| */
305
+ nvk += nvi; /* |k| += nv[i] */
330
306
  nel += nvi;
331
307
  nv[i] = 0;
332
- elen[i] = -1; /* node i is dead */
333
- }
334
- else
335
- {
336
- degree[i] = std::min<StorageIndex> (degree[i], d); /* update degree(i) */
337
- Ci[pn] = Ci[p3]; /* move first node to end */
338
- Ci[p3] = Ci[p1]; /* move 1st el. to end of Ei */
339
- Ci[p1] = k; /* add k as 1st element in of Ei */
340
- len[i] = pn - p1 + 1; /* new len of adj. list of node i */
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; /* save hash of i in last[i] */
318
+ last[i] = h; /* save hash of i in last[i] */
345
319
  }
346
- } /* scan2 is done */
347
- degree[k] = dk; /* finalize |Lk| */
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); /* clear w */
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; /* skip if i is dead */
356
- h = last[i]; /* scan hash bucket of node 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; /* hash bucket will be empty */
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; ) /* compare i with all j */
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) /* i and j are identical */
343
+ if (ok) /* i and j are identical */
373
344
  {
374
- Cp[j] = amd_flip (i); /* absorb j into i */
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; /* node j is dead */
378
- j = next[j]; /* delete j from hash bucket */
348
+ elen[j] = -1; /* node j is dead */
349
+ j = next[j]; /* delete j from hash bucket */
379
350
  next[jlast] = j;
380
- }
381
- else
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++) /* finalize Lk */
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;/* skip if i is dead */
395
- nv[i] = nvi; /* restore nv[i] */
396
- d = degree[i] + dk - nvi; /* compute external degree(i) */
397
- d = std::min<StorageIndex> (d, n - nel - nvi);
398
- if(head[d] != -1) last[head[d]] = i;
399
- next[i] = head[d]; /* put i back in degree list */
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> (mindeg, d); /* find new minimum degree */
371
+ mindeg = std::min<StorageIndex>(mindeg, d); /* find new minimum degree */
403
372
  degree[i] = d;
404
- Ci[p++] = i; /* place i in Lk */
373
+ Ci[p++] = i; /* place i in Lk */
405
374
  }
406
- nv[k] = nvk; /* # nodes absorbed into k */
407
- if((len[k] = p-pk1) == 0) /* length of adj list of element k*/
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; /* k is a root of the tree */
410
- w[k] = 0; /* k is now a dead element */
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; /* free unused space in Lk */
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 (Cp[i]);/* fix assembly tree */
417
- for(j = 0; j <= n; j++) head[j] = -1;
418
- for(j = n; j >= 0; j--) /* place unordered nodes in lists */
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; /* skip if j is an element */
421
- next[j] = head[Cp[j]]; /* place j in list of its parent */
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--) /* place elements in lists */
393
+ for (e = n; e >= 0; e--) /* place elements in lists */
425
394
  {
426
- if(nv[e] <= 0) continue; /* skip unless e is an element */
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++) /* postorder the assembly tree */
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
- } // namespace internal
409
+ } // namespace internal
442
410
 
443
- } // end namespace Eigen
411
+ } // end namespace Eigen
444
412
 
445
- #endif // EIGEN_SPARSE_AMD_H
413
+ #endif // EIGEN_SPARSE_AMD_H