@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,191 +2,380 @@
2
2
  // for linear algebra.
3
3
  //
4
4
  // Copyright (C) 2008-2012 Gael Guennebaud <gael.guennebaud@inria.fr>
5
+ //
6
+ // This Source Code Form is subject to the terms of the Mozilla
7
+ // Public License v. 2.0. If a copy of the MPL was not distributed
8
+ // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
5
9
 
6
10
  /*
7
-
8
- NOTE: thes functions vave been adapted from the LDL library:
11
+ NOTE: these functions have been adapted from the LDL library:
9
12
 
10
13
  LDL Copyright (c) 2005 by Timothy A. Davis. All Rights Reserved.
11
14
 
12
- LDL License:
13
-
14
- Your use or distribution of LDL or any modified version of
15
- LDL implies that you agree to this License.
16
-
17
- This library is free software; you can redistribute it and/or
18
- modify it under the terms of the GNU Lesser General Public
19
- License as published by the Free Software Foundation; either
20
- version 2.1 of the License, or (at your option) any later version.
21
-
22
- This library is distributed in the hope that it will be useful,
23
- but WITHOUT ANY WARRANTY; without even the implied warranty of
24
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
25
- Lesser General Public License for more details.
26
-
27
- You should have received a copy of the GNU Lesser General Public
28
- License along with this library; if not, write to the Free Software
29
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
30
- USA
31
-
32
- Permission is hereby granted to use or copy this program under the
33
- terms of the GNU LGPL, provided that the Copyright, this License,
34
- and the Availability of the original version is retained on all copies.
35
- User documentation of any code that uses this code or any modified
36
- version of this code must cite the Copyright, this License, the
37
- Availability note, and "Used by permission." Permission to modify
38
- the code and to distribute modified code is granted, provided the
39
- Copyright, this License, and the Availability note are retained,
40
- and a notice that the code was modified is included.
15
+ The author of LDL, Timothy A. Davis., has executed a license with Google LLC
16
+ to permit distribution of this code and derivative works as part of Eigen under
17
+ the Mozilla Public License v. 2.0, as stated at the top of this file.
41
18
  */
42
19
 
43
- #include "../Core/util/NonMPL2.h"
44
-
45
20
  #ifndef EIGEN_SIMPLICIAL_CHOLESKY_IMPL_H
46
21
  #define EIGEN_SIMPLICIAL_CHOLESKY_IMPL_H
47
22
 
23
+ // IWYU pragma: private
24
+ #include "./InternalHeaderCheck.h"
25
+
48
26
  namespace Eigen {
49
27
 
50
- template<typename Derived>
51
- void SimplicialCholeskyBase<Derived>::analyzePattern_preordered(const CholMatrixType& ap, bool doLDLT)
52
- {
53
- const StorageIndex size = StorageIndex(ap.rows());
54
- m_matrix.resize(size, size);
55
- m_parent.resize(size);
56
- m_nonZerosPerCol.resize(size);
57
-
58
- ei_declare_aligned_stack_constructed_variable(StorageIndex, tags, size, 0);
59
-
60
- for(StorageIndex k = 0; k < size; ++k)
61
- {
62
- /* L(k,:) pattern: all nodes reachable in etree from nz in A(0:k-1,k) */
63
- m_parent[k] = -1; /* parent of k is not yet known */
64
- tags[k] = k; /* mark node k as visited */
65
- m_nonZerosPerCol[k] = 0; /* count of nonzeros in column k of L */
66
- for(typename CholMatrixType::InnerIterator it(ap,k); it; ++it)
67
- {
68
- StorageIndex i = it.index();
69
- if(i < k)
70
- {
71
- /* follow path from i to root of etree, stop at flagged node */
72
- for(; tags[i] != k; i = m_parent[i])
73
- {
74
- /* find parent of i if not yet determined */
75
- if (m_parent[i] == -1)
76
- m_parent[i] = k;
77
- m_nonZerosPerCol[i]++; /* L (k,i) is nonzero */
78
- tags[i] = k; /* mark i as visited */
28
+ namespace internal {
29
+
30
+ template <typename Scalar, typename StorageIndex>
31
+ struct simpl_chol_helper {
32
+ using CholMatrixType = SparseMatrix<Scalar, ColMajor, StorageIndex>;
33
+ using InnerIterator = typename CholMatrixType::InnerIterator;
34
+ using VectorI = Matrix<StorageIndex, Dynamic, 1>;
35
+ static constexpr StorageIndex kEmpty = -1;
36
+
37
+ // Implementation of a stack or last-in first-out structure with some debugging machinery.
38
+ struct Stack {
39
+ StorageIndex* m_data;
40
+ Index m_size;
41
+ #ifndef EIGEN_NO_DEBUG
42
+ const Index m_maxSize;
43
+ Stack(StorageIndex* data, StorageIndex size, StorageIndex maxSize)
44
+ : m_data(data), m_size(size), m_maxSize(maxSize) {
45
+ eigen_assert(size >= 0);
46
+ eigen_assert(maxSize >= size);
47
+ }
48
+ #else
49
+ Stack(StorageIndex* data, StorageIndex size, StorageIndex /*maxSize*/) : m_data(data), m_size(size) {}
50
+ #endif
51
+ bool empty() const { return m_size == 0; }
52
+ Index size() const { return m_size; }
53
+ StorageIndex back() const {
54
+ eigen_assert(m_size > 0);
55
+ return m_data[m_size - 1];
56
+ }
57
+ void push(const StorageIndex& value) {
58
+ #ifndef EIGEN_NO_DEBUG
59
+ eigen_assert(m_size < m_maxSize);
60
+ #endif
61
+ m_data[m_size] = value;
62
+ m_size++;
63
+ }
64
+ void pop() {
65
+ eigen_assert(m_size > 0);
66
+ m_size--;
67
+ }
68
+ };
69
+
70
+ // Implementation of a disjoint-set or union-find structure with path compression.
71
+ struct DisjointSet {
72
+ StorageIndex* m_set;
73
+ DisjointSet(StorageIndex* set, StorageIndex size) : m_set(set) { std::iota(set, set + size, 0); }
74
+ // Find the set representative or root of `u`.
75
+ StorageIndex find(StorageIndex u) const {
76
+ eigen_assert(u != kEmpty);
77
+ while (m_set[u] != u) {
78
+ // manually unroll the loop by a factor of 2 to improve performance
79
+ u = m_set[m_set[u]];
80
+ }
81
+ return u;
82
+ }
83
+ // Perform full path compression such that each node from `u` to `v` points to `v`.
84
+ void compress(StorageIndex u, StorageIndex v) {
85
+ eigen_assert(u != kEmpty);
86
+ eigen_assert(v != kEmpty);
87
+ while (m_set[u] != v) {
88
+ StorageIndex next = m_set[u];
89
+ m_set[u] = v;
90
+ u = next;
91
+ }
92
+ };
93
+ };
94
+
95
+ // Computes the higher adjacency pattern by transposing the input lower adjacency matrix.
96
+ // Only the index arrays are calculated, as the values are not needed for the symbolic factorization.
97
+ // The outer index array provides the size requirements of the inner index array.
98
+
99
+ // Computes the outer index array of the higher adjacency matrix.
100
+ static void calc_hadj_outer(const StorageIndex size, const CholMatrixType& ap, StorageIndex* outerIndex) {
101
+ for (StorageIndex j = 1; j < size; j++) {
102
+ for (InnerIterator it(ap, j); it; ++it) {
103
+ StorageIndex i = it.index();
104
+ if (i < j) outerIndex[i + 1]++;
105
+ }
106
+ }
107
+ std::partial_sum(outerIndex, outerIndex + size + 1, outerIndex);
108
+ }
109
+
110
+ // inner index array
111
+ static void calc_hadj_inner(const StorageIndex size, const CholMatrixType& ap, const StorageIndex* outerIndex,
112
+ StorageIndex* innerIndex, StorageIndex* tmp) {
113
+ std::fill_n(tmp, size, 0);
114
+
115
+ for (StorageIndex j = 1; j < size; j++) {
116
+ for (InnerIterator it(ap, j); it; ++it) {
117
+ StorageIndex i = it.index();
118
+ if (i < j) {
119
+ StorageIndex b = outerIndex[i] + tmp[i];
120
+ innerIndex[b] = j;
121
+ tmp[i]++;
79
122
  }
80
123
  }
81
124
  }
82
125
  }
83
126
 
84
- /* construct Lp index array from m_nonZerosPerCol column counts */
85
- StorageIndex* Lp = m_matrix.outerIndexPtr();
86
- Lp[0] = 0;
87
- for(StorageIndex k = 0; k < size; ++k)
88
- Lp[k+1] = Lp[k] + m_nonZerosPerCol[k] + (doLDLT ? 0 : 1);
127
+ // Adapted from:
128
+ // Joseph W. Liu. (1986).
129
+ // A compact row storage scheme for Cholesky factors using elimination trees.
130
+ // ACM Trans. Math. Softw. 12, 2 (June 1986), 127-148. https://doi.org/10.1145/6497.6499
131
+
132
+ // Computes the elimination forest of the lower adjacency matrix, a compact representation of the sparse L factor.
133
+ // The L factor may contain multiple elimination trees if a column contains only its diagonal element.
134
+ // Each elimination tree is an n-ary tree in which each node points to its parent.
135
+ static void calc_etree(const StorageIndex size, const CholMatrixType& ap, StorageIndex* parent, StorageIndex* tmp) {
136
+ std::fill_n(parent, size, kEmpty);
137
+
138
+ DisjointSet ancestor(tmp, size);
139
+
140
+ for (StorageIndex j = 1; j < size; j++) {
141
+ for (InnerIterator it(ap, j); it; ++it) {
142
+ StorageIndex i = it.index();
143
+ if (i < j) {
144
+ StorageIndex r = ancestor.find(i);
145
+ if (r != j) parent[r] = j;
146
+ ancestor.compress(i, j);
147
+ }
148
+ }
149
+ }
150
+ }
89
151
 
90
- m_matrix.resizeNonZeros(Lp[size]);
152
+ // Computes the child pointers of the parent tree to facilitate a depth-first search traversal.
153
+ static void calc_lineage(const StorageIndex size, const StorageIndex* parent, StorageIndex* firstChild,
154
+ StorageIndex* firstSibling) {
155
+ std::fill_n(firstChild, size, kEmpty);
156
+ std::fill_n(firstSibling, size, kEmpty);
157
+
158
+ for (StorageIndex j = 0; j < size; j++) {
159
+ StorageIndex p = parent[j];
160
+ if (p == kEmpty) continue;
161
+ StorageIndex c = firstChild[p];
162
+ if (c == kEmpty)
163
+ firstChild[p] = j;
164
+ else {
165
+ while (firstSibling[c] != kEmpty) c = firstSibling[c];
166
+ firstSibling[c] = j;
167
+ }
168
+ }
169
+ }
91
170
 
92
- m_isInitialized = true;
93
- m_info = Success;
94
- m_analysisIsOk = true;
171
+ // Computes a post-ordered traversal of the elimination tree.
172
+ static void calc_post(const StorageIndex size, const StorageIndex* parent, StorageIndex* firstChild,
173
+ const StorageIndex* firstSibling, StorageIndex* post, StorageIndex* dfs) {
174
+ Stack post_stack(post, 0, size);
175
+ for (StorageIndex j = 0; j < size; j++) {
176
+ if (parent[j] != kEmpty) continue;
177
+ // Begin at a root
178
+ Stack dfs_stack(dfs, 0, size);
179
+ dfs_stack.push(j);
180
+ while (!dfs_stack.empty()) {
181
+ StorageIndex i = dfs_stack.back();
182
+ StorageIndex c = firstChild[i];
183
+ if (c == kEmpty) {
184
+ post_stack.push(i);
185
+ dfs_stack.pop();
186
+ } else {
187
+ dfs_stack.push(c);
188
+ // Remove the path from `i` to `c` for future traversals.
189
+ firstChild[i] = firstSibling[c];
190
+ }
191
+ }
192
+ }
193
+ eigen_assert(post_stack.size() == size);
194
+ eigen_assert(std::all_of(firstChild, firstChild + size, [](StorageIndex a) { return a == kEmpty; }));
195
+ }
196
+
197
+ // Adapted from:
198
+ // Gilbert, J. R., Ng, E., & Peyton, B. W. (1994).
199
+ // An efficient algorithm to compute row and column counts for sparse Cholesky factorization.
200
+ // SIAM Journal on Matrix Analysis and Applications, 15(4), 1075-1091.
201
+
202
+ // Computes the non-zero pattern of the L factor.
203
+ static void calc_colcount(const StorageIndex size, const StorageIndex* hadjOuter, const StorageIndex* hadjInner,
204
+ const StorageIndex* parent, StorageIndex* prevLeaf, StorageIndex* tmp,
205
+ const StorageIndex* post, StorageIndex* nonZerosPerCol, bool doLDLT) {
206
+ // initialize nonZerosPerCol with 1 for leaves, 0 for non-leaves
207
+ std::fill_n(nonZerosPerCol, size, 1);
208
+ for (StorageIndex j = 0; j < size; j++) {
209
+ StorageIndex p = parent[j];
210
+ // p is not a leaf
211
+ if (p != kEmpty) nonZerosPerCol[p] = 0;
212
+ }
213
+
214
+ DisjointSet parentSet(tmp, size);
215
+ // prevLeaf is already initialized
216
+ eigen_assert(std::all_of(prevLeaf, prevLeaf + size, [](StorageIndex a) { return a == kEmpty; }));
217
+
218
+ for (StorageIndex j_ = 0; j_ < size; j_++) {
219
+ StorageIndex j = post[j_];
220
+ nonZerosPerCol[j] += hadjOuter[j + 1] - hadjOuter[j];
221
+ for (StorageIndex k = hadjOuter[j]; k < hadjOuter[j + 1]; k++) {
222
+ StorageIndex i = hadjInner[k];
223
+ eigen_assert(i > j);
224
+ StorageIndex prev = prevLeaf[i];
225
+ if (prev != kEmpty) {
226
+ StorageIndex q = parentSet.find(prev);
227
+ parentSet.compress(prev, q);
228
+ nonZerosPerCol[q]--;
229
+ }
230
+ prevLeaf[i] = j;
231
+ }
232
+ StorageIndex p = parent[j];
233
+ if (p != kEmpty) parentSet.compress(j, p);
234
+ }
235
+
236
+ for (StorageIndex j = 0; j < size; j++) {
237
+ StorageIndex p = parent[j];
238
+ if (p != kEmpty) nonZerosPerCol[p] += nonZerosPerCol[j] - 1;
239
+ if (doLDLT) nonZerosPerCol[j]--;
240
+ }
241
+ }
242
+
243
+ // Finalizes the non zero pattern of the L factor and allocates the memory for the factorization.
244
+ static void init_matrix(const StorageIndex size, const StorageIndex* nonZerosPerCol, CholMatrixType& L) {
245
+ eigen_assert(L.outerIndexPtr()[0] == 0);
246
+ std::partial_sum(nonZerosPerCol, nonZerosPerCol + size, L.outerIndexPtr() + 1);
247
+ L.resizeNonZeros(L.outerIndexPtr()[size]);
248
+ }
249
+
250
+ // Driver routine for the symbolic sparse Cholesky factorization.
251
+ static void run(const StorageIndex size, const CholMatrixType& ap, CholMatrixType& L, VectorI& parent,
252
+ VectorI& workSpace, bool doLDLT) {
253
+ parent.resize(size);
254
+ workSpace.resize(4 * size);
255
+ L.resize(size, size);
256
+
257
+ StorageIndex* tmp1 = workSpace.data();
258
+ StorageIndex* tmp2 = workSpace.data() + size;
259
+ StorageIndex* tmp3 = workSpace.data() + 2 * size;
260
+ StorageIndex* tmp4 = workSpace.data() + 3 * size;
261
+
262
+ // Borrow L's outer index array for the higher adjacency pattern.
263
+ StorageIndex* hadj_outer = L.outerIndexPtr();
264
+ calc_hadj_outer(size, ap, hadj_outer);
265
+ // Request additional temporary storage for the inner indices of the higher adjacency pattern.
266
+ ei_declare_aligned_stack_constructed_variable(StorageIndex, hadj_inner, hadj_outer[size], nullptr);
267
+ calc_hadj_inner(size, ap, hadj_outer, hadj_inner, tmp1);
268
+
269
+ calc_etree(size, ap, parent.data(), tmp1);
270
+ calc_lineage(size, parent.data(), tmp1, tmp2);
271
+ calc_post(size, parent.data(), tmp1, tmp2, tmp3, tmp4);
272
+ calc_colcount(size, hadj_outer, hadj_inner, parent.data(), tmp1, tmp2, tmp3, tmp4, doLDLT);
273
+ init_matrix(size, tmp4, L);
274
+ }
275
+ };
276
+
277
+ // Symbol is ODR-used, so we need a definition.
278
+ template <typename Scalar, typename StorageIndex>
279
+ constexpr StorageIndex simpl_chol_helper<Scalar, StorageIndex>::kEmpty;
280
+
281
+ } // namespace internal
282
+
283
+ template <typename Derived>
284
+ void SimplicialCholeskyBase<Derived>::analyzePattern_preordered(const CholMatrixType& ap, bool doLDLT) {
285
+ using Helper = internal::simpl_chol_helper<Scalar, StorageIndex>;
286
+
287
+ eigen_assert(ap.innerSize() == ap.outerSize());
288
+ const StorageIndex size = internal::convert_index<StorageIndex>(ap.outerSize());
289
+
290
+ Helper::run(size, ap, m_matrix, m_parent, m_workSpace, doLDLT);
291
+
292
+ m_isInitialized = true;
293
+ m_info = Success;
294
+ m_analysisIsOk = true;
95
295
  m_factorizationIsOk = false;
96
296
  }
97
297
 
98
-
99
- template<typename Derived>
100
- template<bool DoLDLT>
101
- void SimplicialCholeskyBase<Derived>::factorize_preordered(const CholMatrixType& ap)
102
- {
298
+ template <typename Derived>
299
+ template <bool DoLDLT, bool NonHermitian>
300
+ void SimplicialCholeskyBase<Derived>::factorize_preordered(const CholMatrixType& ap) {
103
301
  using std::sqrt;
302
+ const StorageIndex size = StorageIndex(ap.rows());
104
303
 
105
304
  eigen_assert(m_analysisIsOk && "You must first call analyzePattern()");
106
- eigen_assert(ap.rows()==ap.cols());
107
- eigen_assert(m_parent.size()==ap.rows());
108
- eigen_assert(m_nonZerosPerCol.size()==ap.rows());
305
+ eigen_assert(ap.rows() == ap.cols());
306
+ eigen_assert(m_parent.size() == size);
307
+ eigen_assert(m_workSpace.size() >= 3 * size);
109
308
 
110
- const StorageIndex size = StorageIndex(ap.rows());
111
309
  const StorageIndex* Lp = m_matrix.outerIndexPtr();
112
310
  StorageIndex* Li = m_matrix.innerIndexPtr();
113
311
  Scalar* Lx = m_matrix.valuePtr();
114
312
 
115
313
  ei_declare_aligned_stack_constructed_variable(Scalar, y, size, 0);
116
- ei_declare_aligned_stack_constructed_variable(StorageIndex, pattern, size, 0);
117
- ei_declare_aligned_stack_constructed_variable(StorageIndex, tags, size, 0);
314
+ StorageIndex* nonZerosPerCol = m_workSpace.data();
315
+ StorageIndex* pattern = m_workSpace.data() + size;
316
+ StorageIndex* tags = m_workSpace.data() + 2 * size;
118
317
 
119
318
  bool ok = true;
120
319
  m_diag.resize(DoLDLT ? size : 0);
121
320
 
122
- for(StorageIndex k = 0; k < size; ++k)
123
- {
321
+ for (StorageIndex k = 0; k < size; ++k) {
124
322
  // compute nonzero pattern of kth row of L, in topological order
125
- y[k] = 0.0; // Y(0:k) is now all zero
126
- StorageIndex top = size; // stack for pattern is empty
127
- tags[k] = k; // mark node k as visited
128
- m_nonZerosPerCol[k] = 0; // count of nonzeros in column k of L
129
- for(typename CholMatrixType::InnerIterator it(ap,k); it; ++it)
130
- {
323
+ y[k] = Scalar(0); // Y(0:k) is now all zero
324
+ StorageIndex top = size; // stack for pattern is empty
325
+ tags[k] = k; // mark node k as visited
326
+ nonZerosPerCol[k] = 0; // count of nonzeros in column k of L
327
+ for (typename CholMatrixType::InnerIterator it(ap, k); it; ++it) {
131
328
  StorageIndex i = it.index();
132
- if(i <= k)
133
- {
134
- y[i] += numext::conj(it.value()); /* scatter A(i,k) into Y (sum duplicates) */
329
+ if (i <= k) {
330
+ y[i] += getSymm(it.value()); /* scatter A(i,k) into Y (sum duplicates) */
135
331
  Index len;
136
- for(len = 0; tags[i] != k; i = m_parent[i])
137
- {
138
- pattern[len++] = i; /* L(k,i) is nonzero */
139
- tags[i] = k; /* mark i as visited */
332
+ for (len = 0; tags[i] != k; i = m_parent[i]) {
333
+ pattern[len++] = i; /* L(k,i) is nonzero */
334
+ tags[i] = k; /* mark i as visited */
140
335
  }
141
- while(len > 0)
142
- pattern[--top] = pattern[--len];
336
+ while (len > 0) pattern[--top] = pattern[--len];
143
337
  }
144
338
  }
145
339
 
146
340
  /* compute numerical values kth row of L (a sparse triangular solve) */
147
341
 
148
- RealScalar d = numext::real(y[k]) * m_shiftScale + m_shiftOffset; // get D(k,k), apply the shift function, and clear Y(k)
149
- y[k] = 0.0;
150
- for(; top < size; ++top)
151
- {
152
- Index i = pattern[top]; /* pattern[top:n-1] is pattern of L(:,k) */
153
- Scalar yi = y[i]; /* get and clear Y(i) */
154
- y[i] = 0.0;
342
+ DiagonalScalar d =
343
+ getDiag(y[k]) * m_shiftScale + m_shiftOffset; // get D(k,k), apply the shift function, and clear Y(k)
344
+ y[k] = Scalar(0);
345
+ for (; top < size; ++top) {
346
+ Index i = pattern[top]; /* pattern[top:n-1] is pattern of L(:,k) */
347
+ Scalar yi = y[i]; /* get and clear Y(i) */
348
+ y[i] = Scalar(0);
155
349
 
156
350
  /* the nonzero entry L(k,i) */
157
351
  Scalar l_ki;
158
- if(DoLDLT)
159
- l_ki = yi / numext::real(m_diag[i]);
352
+ if (DoLDLT)
353
+ l_ki = yi / getDiag(m_diag[i]);
160
354
  else
161
355
  yi = l_ki = yi / Lx[Lp[i]];
162
356
 
163
- Index p2 = Lp[i] + m_nonZerosPerCol[i];
357
+ Index p2 = Lp[i] + nonZerosPerCol[i];
164
358
  Index p;
165
- for(p = Lp[i] + (DoLDLT ? 0 : 1); p < p2; ++p)
166
- y[Li[p]] -= numext::conj(Lx[p]) * yi;
167
- d -= numext::real(l_ki * numext::conj(yi));
168
- Li[p] = k; /* store L(k,i) in column form of L */
359
+ for (p = Lp[i] + (DoLDLT ? 0 : 1); p < p2; ++p) y[Li[p]] -= getSymm(Lx[p]) * yi;
360
+ d -= getDiag(l_ki * getSymm(yi));
361
+ Li[p] = k; /* store L(k,i) in column form of L */
169
362
  Lx[p] = l_ki;
170
- ++m_nonZerosPerCol[i]; /* increment count of nonzeros in col i */
363
+ ++nonZerosPerCol[i]; /* increment count of nonzeros in col i */
171
364
  }
172
- if(DoLDLT)
173
- {
365
+ if (DoLDLT) {
174
366
  m_diag[k] = d;
175
- if(d == RealScalar(0))
176
- {
177
- ok = false; /* failure, D(k,k) is zero */
367
+ if (d == RealScalar(0)) {
368
+ ok = false; /* failure, D(k,k) is zero */
178
369
  break;
179
370
  }
180
- }
181
- else
182
- {
183
- Index p = Lp[k] + m_nonZerosPerCol[k]++;
184
- Li[p] = k ; /* store L(k,k) = sqrt (d) in column k */
185
- if(d <= RealScalar(0)) {
186
- ok = false; /* failure, matrix is not positive definite */
371
+ } else {
372
+ Index p = Lp[k] + nonZerosPerCol[k]++;
373
+ Li[p] = k; /* store L(k,k) = sqrt (d) in column k */
374
+ if (NonHermitian ? d == RealScalar(0) : numext::real(d) <= RealScalar(0)) {
375
+ ok = false; /* failure, matrix is not positive definite */
187
376
  break;
188
377
  }
189
- Lx[p] = sqrt(d) ;
378
+ Lx[p] = sqrt(d);
190
379
  }
191
380
  }
192
381
 
@@ -194,6 +383,6 @@ void SimplicialCholeskyBase<Derived>::factorize_preordered(const CholMatrixType&
194
383
  m_factorizationIsOk = true;
195
384
  }
196
385
 
197
- } // end namespace Eigen
386
+ } // end namespace Eigen
198
387
 
199
- #endif // EIGEN_SIMPLICIAL_CHOLESKY_IMPL_H
388
+ #endif // EIGEN_SIMPLICIAL_CHOLESKY_IMPL_H