@smake/eigen 1.1.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (431) hide show
  1. package/README.md +1 -1
  2. package/eigen/Eigen/AccelerateSupport +52 -0
  3. package/eigen/Eigen/Cholesky +18 -20
  4. package/eigen/Eigen/CholmodSupport +28 -28
  5. package/eigen/Eigen/Core +187 -120
  6. package/eigen/Eigen/Eigenvalues +16 -13
  7. package/eigen/Eigen/Geometry +18 -18
  8. package/eigen/Eigen/Householder +9 -7
  9. package/eigen/Eigen/IterativeLinearSolvers +8 -4
  10. package/eigen/Eigen/Jacobi +14 -13
  11. package/eigen/Eigen/KLUSupport +23 -21
  12. package/eigen/Eigen/LU +15 -16
  13. package/eigen/Eigen/MetisSupport +12 -12
  14. package/eigen/Eigen/OrderingMethods +54 -51
  15. package/eigen/Eigen/PaStiXSupport +23 -21
  16. package/eigen/Eigen/PardisoSupport +17 -14
  17. package/eigen/Eigen/QR +18 -20
  18. package/eigen/Eigen/QtAlignedMalloc +5 -12
  19. package/eigen/Eigen/SPQRSupport +21 -14
  20. package/eigen/Eigen/SVD +23 -17
  21. package/eigen/Eigen/Sparse +1 -2
  22. package/eigen/Eigen/SparseCholesky +18 -15
  23. package/eigen/Eigen/SparseCore +18 -17
  24. package/eigen/Eigen/SparseLU +9 -9
  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 +366 -405
  37. package/eigen/Eigen/src/Cholesky/LLT.h +323 -367
  38. package/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +81 -56
  39. package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +585 -529
  40. package/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
  41. package/eigen/Eigen/src/Core/ArithmeticSequence.h +143 -317
  42. package/eigen/Eigen/src/Core/Array.h +329 -370
  43. package/eigen/Eigen/src/Core/ArrayBase.h +190 -203
  44. package/eigen/Eigen/src/Core/ArrayWrapper.h +126 -170
  45. package/eigen/Eigen/src/Core/Assign.h +30 -40
  46. package/eigen/Eigen/src/Core/AssignEvaluator.h +651 -604
  47. package/eigen/Eigen/src/Core/Assign_MKL.h +125 -120
  48. package/eigen/Eigen/src/Core/BandMatrix.h +267 -282
  49. package/eigen/Eigen/src/Core/Block.h +371 -390
  50. package/eigen/Eigen/src/Core/CommaInitializer.h +85 -100
  51. package/eigen/Eigen/src/Core/ConditionEstimator.h +51 -53
  52. package/eigen/Eigen/src/Core/CoreEvaluators.h +1214 -937
  53. package/eigen/Eigen/src/Core/CoreIterators.h +72 -63
  54. package/eigen/Eigen/src/Core/CwiseBinaryOp.h +112 -129
  55. package/eigen/Eigen/src/Core/CwiseNullaryOp.h +676 -702
  56. package/eigen/Eigen/src/Core/CwiseTernaryOp.h +77 -103
  57. package/eigen/Eigen/src/Core/CwiseUnaryOp.h +55 -67
  58. package/eigen/Eigen/src/Core/CwiseUnaryView.h +127 -92
  59. package/eigen/Eigen/src/Core/DenseBase.h +630 -658
  60. package/eigen/Eigen/src/Core/DenseCoeffsBase.h +511 -628
  61. package/eigen/Eigen/src/Core/DenseStorage.h +511 -590
  62. package/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
  63. package/eigen/Eigen/src/Core/Diagonal.h +168 -207
  64. package/eigen/Eigen/src/Core/DiagonalMatrix.h +346 -317
  65. package/eigen/Eigen/src/Core/DiagonalProduct.h +12 -10
  66. package/eigen/Eigen/src/Core/Dot.h +167 -217
  67. package/eigen/Eigen/src/Core/EigenBase.h +74 -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 -113
  71. package/eigen/Eigen/src/Core/Fuzzy.h +82 -105
  72. package/eigen/Eigen/src/Core/GeneralProduct.h +315 -261
  73. package/eigen/Eigen/src/Core/GenericPacketMath.h +1182 -520
  74. package/eigen/Eigen/src/Core/GlobalFunctions.h +193 -157
  75. package/eigen/Eigen/src/Core/IO.h +131 -156
  76. package/eigen/Eigen/src/Core/IndexedView.h +209 -125
  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 +50 -59
  80. package/eigen/Eigen/src/Core/Map.h +123 -141
  81. package/eigen/Eigen/src/Core/MapBase.h +255 -282
  82. package/eigen/Eigen/src/Core/MathFunctions.h +1247 -1201
  83. package/eigen/Eigen/src/Core/MathFunctionsImpl.h +162 -99
  84. package/eigen/Eigen/src/Core/Matrix.h +463 -494
  85. package/eigen/Eigen/src/Core/MatrixBase.h +468 -470
  86. package/eigen/Eigen/src/Core/NestByValue.h +58 -52
  87. package/eigen/Eigen/src/Core/NoAlias.h +79 -86
  88. package/eigen/Eigen/src/Core/NumTraits.h +206 -206
  89. package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +163 -142
  90. package/eigen/Eigen/src/Core/PermutationMatrix.h +461 -511
  91. package/eigen/Eigen/src/Core/PlainObjectBase.h +858 -972
  92. package/eigen/Eigen/src/Core/Product.h +246 -130
  93. package/eigen/Eigen/src/Core/ProductEvaluators.h +779 -671
  94. package/eigen/Eigen/src/Core/Random.h +153 -164
  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 +334 -314
  98. package/eigen/Eigen/src/Core/Ref.h +259 -257
  99. package/eigen/Eigen/src/Core/Replicate.h +92 -104
  100. package/eigen/Eigen/src/Core/Reshaped.h +215 -271
  101. package/eigen/Eigen/src/Core/ReturnByValue.h +47 -55
  102. package/eigen/Eigen/src/Core/Reverse.h +133 -148
  103. package/eigen/Eigen/src/Core/Select.h +68 -140
  104. package/eigen/Eigen/src/Core/SelfAdjointView.h +254 -290
  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 +88 -102
  108. package/eigen/Eigen/src/Core/SolveTriangular.h +126 -124
  109. package/eigen/Eigen/src/Core/SolverBase.h +132 -133
  110. package/eigen/Eigen/src/Core/StableNorm.h +113 -147
  111. package/eigen/Eigen/src/Core/StlIterators.h +404 -248
  112. package/eigen/Eigen/src/Core/Stride.h +90 -92
  113. package/eigen/Eigen/src/Core/Swap.h +70 -39
  114. package/eigen/Eigen/src/Core/Transpose.h +258 -295
  115. package/eigen/Eigen/src/Core/Transpositions.h +270 -333
  116. package/eigen/Eigen/src/Core/TriangularMatrix.h +642 -743
  117. package/eigen/Eigen/src/Core/VectorBlock.h +59 -72
  118. package/eigen/Eigen/src/Core/VectorwiseOp.h +653 -704
  119. package/eigen/Eigen/src/Core/Visitor.h +464 -308
  120. package/eigen/Eigen/src/Core/arch/AVX/Complex.h +380 -187
  121. package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +65 -163
  122. package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +2145 -638
  123. package/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
  124. package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +253 -60
  125. package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +278 -228
  126. package/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
  127. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +48 -269
  128. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
  129. package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1597 -754
  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 +229 -41
  135. package/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
  136. package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +420 -184
  137. package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +40 -49
  138. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2962 -2213
  139. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +196 -212
  140. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +713 -441
  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 +2380 -1362
  144. package/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
  145. package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +390 -224
  146. package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +78 -67
  147. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1784 -799
  148. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +167 -50
  149. package/eigen/Eigen/src/Core/arch/Default/Half.h +528 -379
  150. package/eigen/Eigen/src/Core/arch/Default/Settings.h +10 -12
  151. package/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
  152. package/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +41 -40
  153. package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +550 -523
  154. package/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
  155. package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +27 -30
  156. package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +8 -8
  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 +54 -82
  164. package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +84 -92
  165. package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +51 -47
  166. package/eigen/Eigen/src/Core/arch/NEON/Complex.h +454 -306
  167. package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +175 -115
  168. package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +23 -30
  169. package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +4366 -2857
  170. package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +616 -393
  171. package/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
  172. package/eigen/Eigen/src/Core/arch/SSE/Complex.h +350 -198
  173. package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +38 -149
  174. package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +1791 -912
  175. package/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
  176. package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +128 -40
  177. package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +10 -6
  178. package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +156 -234
  179. package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +6 -3
  180. package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +27 -32
  181. package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +119 -117
  182. package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +325 -419
  183. package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +15 -17
  184. package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +325 -181
  185. package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +94 -83
  186. package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +811 -458
  187. package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +121 -124
  188. package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +576 -370
  189. package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +194 -109
  190. package/eigen/Eigen/src/Core/functors/StlFunctors.h +95 -112
  191. package/eigen/Eigen/src/Core/functors/TernaryFunctors.h +34 -7
  192. package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1038 -749
  193. package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1883 -1375
  194. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +312 -370
  195. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +189 -176
  196. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +84 -81
  197. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +154 -73
  198. package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +292 -337
  199. package/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +80 -77
  200. package/eigen/Eigen/src/Core/products/Parallelizer.h +207 -105
  201. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +327 -388
  202. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +206 -224
  203. package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +138 -147
  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 -47
  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 -277
  212. package/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +108 -109
  213. package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +68 -94
  214. package/eigen/Eigen/src/Core/util/Assert.h +158 -0
  215. package/eigen/Eigen/src/Core/util/BlasUtil.h +342 -303
  216. package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +348 -317
  217. package/eigen/Eigen/src/Core/util/Constants.h +297 -262
  218. package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +130 -90
  219. package/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
  220. package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +449 -247
  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 +417 -116
  224. package/eigen/Eigen/src/Core/util/IntegralConstant.h +211 -204
  225. package/eigen/Eigen/src/Core/util/MKL_support.h +39 -37
  226. package/eigen/Eigen/src/Core/util/Macros.h +655 -773
  227. package/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
  228. package/eigen/Eigen/src/Core/util/Memory.h +970 -748
  229. package/eigen/Eigen/src/Core/util/Meta.h +581 -633
  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 +17 -17
  233. package/eigen/Eigen/src/Core/util/Serializer.h +209 -0
  234. package/eigen/Eigen/src/Core/util/StaticAssert.h +50 -166
  235. package/eigen/Eigen/src/Core/util/SymbolicIndex.h +377 -225
  236. package/eigen/Eigen/src/Core/util/XprHelper.h +784 -547
  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 +89 -105
  246. package/eigen/Eigen/src/Eigenvalues/RealQZ.h +537 -607
  247. package/eigen/Eigen/src/Eigenvalues/RealSchur.h +342 -381
  248. package/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +41 -35
  249. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +541 -595
  250. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +47 -44
  251. package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +430 -462
  252. package/eigen/Eigen/src/Geometry/AlignedBox.h +226 -227
  253. package/eigen/Eigen/src/Geometry/AngleAxis.h +131 -133
  254. package/eigen/Eigen/src/Geometry/EulerAngles.h +163 -74
  255. package/eigen/Eigen/src/Geometry/Homogeneous.h +285 -333
  256. package/eigen/Eigen/src/Geometry/Hyperplane.h +151 -160
  257. package/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
  258. package/eigen/Eigen/src/Geometry/OrthoMethods.h +168 -146
  259. package/eigen/Eigen/src/Geometry/ParametrizedLine.h +127 -127
  260. package/eigen/Eigen/src/Geometry/Quaternion.h +566 -506
  261. package/eigen/Eigen/src/Geometry/Rotation2D.h +107 -105
  262. package/eigen/Eigen/src/Geometry/RotationBase.h +148 -145
  263. package/eigen/Eigen/src/Geometry/Scaling.h +113 -106
  264. package/eigen/Eigen/src/Geometry/Transform.h +858 -936
  265. package/eigen/Eigen/src/Geometry/Translation.h +94 -92
  266. package/eigen/Eigen/src/Geometry/Umeyama.h +79 -84
  267. package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +90 -104
  268. package/eigen/Eigen/src/Householder/BlockHouseholder.h +51 -46
  269. package/eigen/Eigen/src/Householder/Householder.h +102 -124
  270. package/eigen/Eigen/src/Householder/HouseholderSequence.h +412 -453
  271. package/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
  272. package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +149 -162
  273. package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +124 -119
  274. package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +92 -104
  275. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +251 -243
  276. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +224 -228
  277. package/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
  278. package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +178 -227
  279. package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +79 -84
  280. package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +54 -60
  281. package/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
  282. package/eigen/Eigen/src/Jacobi/Jacobi.h +252 -308
  283. package/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
  284. package/eigen/Eigen/src/KLUSupport/KLUSupport.h +208 -227
  285. package/eigen/Eigen/src/LU/Determinant.h +50 -69
  286. package/eigen/Eigen/src/LU/FullPivLU.h +545 -596
  287. package/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
  288. package/eigen/Eigen/src/LU/InverseImpl.h +206 -285
  289. package/eigen/Eigen/src/LU/PartialPivLU.h +390 -428
  290. package/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +54 -40
  291. package/eigen/Eigen/src/LU/arch/InverseSize4.h +72 -70
  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 +243 -265
  295. package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +831 -1004
  296. package/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
  297. package/eigen/Eigen/src/OrderingMethods/Ordering.h +112 -119
  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 -430
  302. package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +479 -479
  303. package/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +120 -56
  304. package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +166 -153
  305. package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +495 -475
  306. package/eigen/Eigen/src/QR/HouseholderQR.h +394 -285
  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 +244 -264
  311. package/eigen/Eigen/src/SVD/BDCSVD.h +817 -713
  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 +577 -543
  315. package/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +85 -49
  316. package/eigen/Eigen/src/SVD/SVDBase.h +242 -182
  317. package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +200 -235
  318. package/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
  319. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +765 -594
  320. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +308 -94
  321. package/eigen/Eigen/src/SparseCore/AmbiVector.h +202 -251
  322. package/eigen/Eigen/src/SparseCore/CompressedStorage.h +184 -252
  323. package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +134 -178
  324. package/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
  325. package/eigen/Eigen/src/SparseCore/SparseAssign.h +149 -140
  326. package/eigen/Eigen/src/SparseCore/SparseBlock.h +403 -440
  327. package/eigen/Eigen/src/SparseCore/SparseColEtree.h +100 -112
  328. package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +525 -303
  329. package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +555 -339
  330. package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +100 -108
  331. package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +169 -197
  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 +1603 -1245
  337. package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +403 -350
  338. package/eigen/Eigen/src/SparseCore/SparsePermutation.h +186 -115
  339. package/eigen/Eigen/src/SparseCore/SparseProduct.h +94 -97
  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 +370 -416
  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 +138 -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 +756 -710
  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 +245 -301
  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 +89 -100
  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 +124 -132
  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 +450 -502
  370. package/eigen/Eigen/src/StlSupport/StdDeque.h +28 -93
  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 -730
  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 +428 -464
  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 +9972 -16179
  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.h → BlockMethods.inc} +434 -506
  401. package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
  402. package/eigen/Eigen/src/plugins/{CommonCwiseUnaryOps.h → CommonCwiseUnaryOps.inc} +58 -68
  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/package.json +1 -1
  409. package/eigen/COPYING.APACHE +0 -203
  410. package/eigen/COPYING.BSD +0 -26
  411. package/eigen/COPYING.GPL +0 -674
  412. package/eigen/COPYING.LGPL +0 -502
  413. package/eigen/COPYING.MINPACK +0 -51
  414. package/eigen/COPYING.MPL2 +0 -373
  415. package/eigen/COPYING.README +0 -18
  416. package/eigen/Eigen/src/Core/BooleanRedux.h +0 -162
  417. package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +0 -258
  418. package/eigen/Eigen/src/Core/arch/Default/TypeCasting.h +0 -120
  419. package/eigen/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +0 -694
  420. package/eigen/Eigen/src/Core/util/NonMPL2.h +0 -3
  421. package/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h +0 -67
  422. package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +0 -280
  423. package/eigen/Eigen/src/misc/lapack.h +0 -152
  424. package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +0 -358
  425. package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +0 -696
  426. package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +0 -115
  427. package/eigen/Eigen/src/plugins/IndexedViewMethods.h +0 -262
  428. package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +0 -152
  429. package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +0 -95
  430. package/eigen/Eigen/src/plugins/ReshapedMethods.h +0 -149
  431. package/eigen/README.md +0 -5
@@ -14,229 +14,253 @@
14
14
  #include <vector>
15
15
  #include <list>
16
16
 
17
+ // IWYU pragma: private
18
+ #include "./InternalHeaderCheck.h"
19
+
17
20
  namespace Eigen {
18
21
  /**
19
- * \brief Modified Incomplete Cholesky with dual threshold
20
- *
21
- * References : C-J. Lin and J. J. Moré, Incomplete Cholesky Factorizations with
22
- * Limited memory, SIAM J. Sci. Comput. 21(1), pp. 24-45, 1999
23
- *
24
- * \tparam Scalar the scalar type of the input matrices
25
- * \tparam _UpLo The triangular part that will be used for the computations. It can be Lower
26
- * or Upper. Default is Lower.
27
- * \tparam _OrderingType The ordering method to use, either AMDOrdering<> or NaturalOrdering<>. Default is AMDOrdering<int>,
28
- * unless EIGEN_MPL2_ONLY is defined, in which case the default is NaturalOrdering<int>.
29
- *
30
- * \implsparsesolverconcept
31
- *
32
- * It performs the following incomplete factorization: \f$ S P A P' S \approx L L' \f$
33
- * where L is a lower triangular factor, S is a diagonal scaling matrix, and P is a
34
- * fill-in reducing permutation as computed by the ordering method.
35
- *
36
- * \b Shifting \b strategy: Let \f$ B = S P A P' S \f$ be the scaled matrix on which the factorization is carried out,
37
- * and \f$ \beta \f$ be the minimum value of the diagonal. If \f$ \beta > 0 \f$ then, the factorization is directly performed
38
- * on the matrix B. Otherwise, the factorization is performed on the shifted matrix \f$ B + (\sigma+|\beta| I \f$ where
39
- * \f$ \sigma \f$ is the initial shift value as returned and set by setInitialShift() method. The default value is \f$ \sigma = 10^{-3} \f$.
40
- * If the factorization fails, then the shift in doubled until it succeed or a maximum of ten attempts. If it still fails, as returned by
41
- * the info() method, then you can either increase the initial shift, or better use another preconditioning technique.
42
- *
43
- */
44
- template <typename Scalar, int _UpLo = Lower, typename _OrderingType = AMDOrdering<int> >
45
- class IncompleteCholesky : public SparseSolverBase<IncompleteCholesky<Scalar,_UpLo,_OrderingType> >
46
- {
47
- protected:
48
- typedef SparseSolverBase<IncompleteCholesky<Scalar,_UpLo,_OrderingType> > Base;
49
- using Base::m_isInitialized;
50
- public:
51
- typedef typename NumTraits<Scalar>::Real RealScalar;
52
- typedef _OrderingType OrderingType;
53
- typedef typename OrderingType::PermutationType PermutationType;
54
- typedef typename PermutationType::StorageIndex StorageIndex;
55
- typedef SparseMatrix<Scalar,ColMajor,StorageIndex> FactorType;
56
- typedef Matrix<Scalar,Dynamic,1> VectorSx;
57
- typedef Matrix<RealScalar,Dynamic,1> VectorRx;
58
- typedef Matrix<StorageIndex,Dynamic, 1> VectorIx;
59
- typedef std::vector<std::list<StorageIndex> > VectorList;
60
- enum { UpLo = _UpLo };
61
- enum {
62
- ColsAtCompileTime = Dynamic,
63
- MaxColsAtCompileTime = Dynamic
64
- };
65
- public:
66
-
67
- /** Default constructor leaving the object in a partly non-initialized stage.
68
- *
69
- * You must call compute() or the pair analyzePattern()/factorize() to make it valid.
70
- *
71
- * \sa IncompleteCholesky(const MatrixType&)
72
- */
73
- IncompleteCholesky() : m_initialShift(1e-3),m_analysisIsOk(false),m_factorizationIsOk(false) {}
74
-
75
- /** Constructor computing the incomplete factorization for the given matrix \a matrix.
76
- */
77
- template<typename MatrixType>
78
- IncompleteCholesky(const MatrixType& matrix) : m_initialShift(1e-3),m_analysisIsOk(false),m_factorizationIsOk(false)
79
- {
80
- compute(matrix);
81
- }
82
-
83
- /** \returns number of rows of the factored matrix */
84
- EIGEN_CONSTEXPR Index rows() const EIGEN_NOEXCEPT { return m_L.rows(); }
85
-
86
- /** \returns number of columns of the factored matrix */
87
- EIGEN_CONSTEXPR Index cols() const EIGEN_NOEXCEPT { return m_L.cols(); }
88
-
89
-
90
- /** \brief Reports whether previous computation was successful.
91
- *
92
- * It triggers an assertion if \c *this has not been initialized through the respective constructor,
93
- * or a call to compute() or analyzePattern().
94
- *
95
- * \returns \c Success if computation was successful,
96
- * \c NumericalIssue if the matrix appears to be negative.
97
- */
98
- ComputationInfo info() const
99
- {
100
- eigen_assert(m_isInitialized && "IncompleteCholesky is not initialized.");
101
- return m_info;
102
- }
22
+ * \brief Modified Incomplete Cholesky with dual threshold
23
+ *
24
+ * References : C-J. Lin and J. J. Moré, Incomplete Cholesky Factorizations with
25
+ * Limited memory, SIAM J. Sci. Comput. 21(1), pp. 24-45, 1999
26
+ *
27
+ * \tparam Scalar the scalar type of the input matrices
28
+ * \tparam UpLo_ The triangular part that will be used for the computations. It can be Lower
29
+ * or Upper. Default is Lower.
30
+ * \tparam OrderingType_ The ordering method to use, either AMDOrdering<> or NaturalOrdering<>. Default is
31
+ * AMDOrdering<int>.
32
+ *
33
+ * \implsparsesolverconcept
34
+ *
35
+ * It performs the following incomplete factorization: \f$ S P A P' S + \sigma I \approx L L' \f$
36
+ * where L is a lower triangular factor, S is a diagonal scaling matrix, P is a
37
+ * fill-in reducing permutation as computed by the ordering method, and \f$ \sigma \f$ is a shift
38
+ * for ensuring the decomposed matrix is positive definite.
39
+ *
40
+ * \b Shifting \b strategy: Let \f$ B = S P A P' S \f$ be the scaled matrix on which the factorization is carried out,
41
+ * and \f$ \beta \f$ be the minimum value of the diagonal. If \f$ \beta > 0 \f$ then, the factorization is directly
42
+ * performed on the matrix B, and \f$ \sigma = 0 \f$. Otherwise, the factorization is performed on the shifted matrix
43
+ * \f$ B + \sigma I \f$ for a shifting factor \f$ \sigma \f$. We start with \f$ \sigma = \sigma_0 - \beta \f$, where
44
+ * \f$ \sigma_0 \f$ is the initial shift value as returned and set by setInitialShift() method. The default value is \f$
45
+ * \sigma_0 = 10^{-3} \f$. If the factorization fails, then the shift in doubled until it succeed or a maximum of ten
46
+ * attempts. If it still fails, as returned by the info() method, then you can either increase the initial shift, or
47
+ * better use another preconditioning technique.
48
+ *
49
+ */
50
+ template <typename Scalar, int UpLo_ = Lower, typename OrderingType_ = AMDOrdering<int> >
51
+ class IncompleteCholesky : public SparseSolverBase<IncompleteCholesky<Scalar, UpLo_, OrderingType_> > {
52
+ protected:
53
+ typedef SparseSolverBase<IncompleteCholesky<Scalar, UpLo_, OrderingType_> > Base;
54
+ using Base::m_isInitialized;
55
+
56
+ public:
57
+ typedef typename NumTraits<Scalar>::Real RealScalar;
58
+ typedef OrderingType_ OrderingType;
59
+ typedef typename OrderingType::PermutationType PermutationType;
60
+ typedef typename PermutationType::StorageIndex StorageIndex;
61
+ typedef SparseMatrix<Scalar, ColMajor, StorageIndex> FactorType;
62
+ typedef Matrix<Scalar, Dynamic, 1> VectorSx;
63
+ typedef Matrix<RealScalar, Dynamic, 1> VectorRx;
64
+ typedef Matrix<StorageIndex, Dynamic, 1> VectorIx;
65
+ typedef std::vector<std::list<StorageIndex> > VectorList;
66
+ enum { UpLo = UpLo_ };
67
+ enum { ColsAtCompileTime = Dynamic, MaxColsAtCompileTime = Dynamic };
68
+
69
+ public:
70
+ /** Default constructor leaving the object in a partly non-initialized stage.
71
+ *
72
+ * You must call compute() or the pair analyzePattern()/factorize() to make it valid.
73
+ *
74
+ * \sa IncompleteCholesky(const MatrixType&)
75
+ */
76
+ IncompleteCholesky() : m_initialShift(1e-3), m_analysisIsOk(false), m_factorizationIsOk(false) {}
77
+
78
+ /** Constructor computing the incomplete factorization for the given matrix \a matrix.
79
+ */
80
+ template <typename MatrixType>
81
+ IncompleteCholesky(const MatrixType& matrix)
82
+ : m_initialShift(1e-3), m_analysisIsOk(false), m_factorizationIsOk(false) {
83
+ compute(matrix);
84
+ }
103
85
 
104
- /** \brief Set the initial shift parameter \f$ \sigma \f$.
105
- */
106
- void setInitialShift(RealScalar shift) { m_initialShift = shift; }
107
-
108
- /** \brief Computes the fill reducing permutation vector using the sparsity pattern of \a mat
109
- */
110
- template<typename MatrixType>
111
- void analyzePattern(const MatrixType& mat)
112
- {
113
- OrderingType ord;
114
- PermutationType pinv;
115
- ord(mat.template selfadjointView<UpLo>(), pinv);
116
- if(pinv.size()>0) m_perm = pinv.inverse();
117
- else m_perm.resize(0);
118
- m_L.resize(mat.rows(), mat.cols());
119
- m_analysisIsOk = true;
120
- m_isInitialized = true;
121
- m_info = Success;
122
- }
86
+ /** \returns number of rows of the factored matrix */
87
+ constexpr Index rows() const noexcept { return m_L.rows(); }
88
+
89
+ /** \returns number of columns of the factored matrix */
90
+ constexpr Index cols() const noexcept { return m_L.cols(); }
91
+
92
+ /** \brief Reports whether previous computation was successful.
93
+ *
94
+ * It triggers an assertion if \c *this has not been initialized through the respective constructor,
95
+ * or a call to compute() or analyzePattern().
96
+ *
97
+ * \returns \c Success if computation was successful,
98
+ * \c NumericalIssue if the matrix appears to be negative.
99
+ */
100
+ ComputationInfo info() const {
101
+ eigen_assert(m_isInitialized && "IncompleteCholesky is not initialized.");
102
+ return m_info;
103
+ }
123
104
 
124
- /** \brief Performs the numerical factorization of the input matrix \a mat
125
- *
126
- * The method analyzePattern() or compute() must have been called beforehand
127
- * with a matrix having the same pattern.
128
- *
129
- * \sa compute(), analyzePattern()
130
- */
131
- template<typename MatrixType>
132
- void factorize(const MatrixType& mat);
133
-
134
- /** Computes or re-computes the incomplete Cholesky factorization of the input matrix \a mat
135
- *
136
- * It is a shortcut for a sequential call to the analyzePattern() and factorize() methods.
137
- *
138
- * \sa analyzePattern(), factorize()
139
- */
140
- template<typename MatrixType>
141
- void compute(const MatrixType& mat)
142
- {
143
- analyzePattern(mat);
144
- factorize(mat);
145
- }
105
+ /** \brief Set the initial shift parameter \f$ \sigma \f$.
106
+ */
107
+ void setInitialShift(RealScalar shift) { m_initialShift = shift; }
108
+
109
+ /** \brief Computes the fill reducing permutation vector using the sparsity pattern of \a mat
110
+ */
111
+ template <typename MatrixType>
112
+ void analyzePattern(const MatrixType& mat) {
113
+ OrderingType ord;
114
+ PermutationType pinv;
115
+ ord(mat.template selfadjointView<UpLo>(), pinv);
116
+ if (pinv.size() > 0)
117
+ m_perm = pinv.inverse();
118
+ else
119
+ m_perm.resize(0);
120
+ m_L.resize(mat.rows(), mat.cols());
121
+ m_analysisIsOk = true;
122
+ m_isInitialized = true;
123
+ m_info = Success;
124
+ }
146
125
 
147
- // internal
148
- template<typename Rhs, typename Dest>
149
- void _solve_impl(const Rhs& b, Dest& x) const
150
- {
151
- eigen_assert(m_factorizationIsOk && "factorize() should be called first");
152
- if (m_perm.rows() == b.rows()) x = m_perm * b;
153
- else x = b;
154
- x = m_scale.asDiagonal() * x;
155
- x = m_L.template triangularView<Lower>().solve(x);
156
- x = m_L.adjoint().template triangularView<Upper>().solve(x);
157
- x = m_scale.asDiagonal() * x;
158
- if (m_perm.rows() == b.rows())
159
- x = m_perm.inverse() * x;
160
- }
126
+ /** \brief Performs the numerical factorization of the input matrix \a mat
127
+ *
128
+ * The method analyzePattern() or compute() must have been called beforehand
129
+ * with a matrix having the same pattern.
130
+ *
131
+ * \sa compute(), analyzePattern()
132
+ */
133
+ template <typename MatrixType>
134
+ void factorize(const MatrixType& mat);
135
+
136
+ /** Computes or re-computes the incomplete Cholesky factorization of the input matrix \a mat
137
+ *
138
+ * It is a shortcut for a sequential call to the analyzePattern() and factorize() methods.
139
+ *
140
+ * \sa analyzePattern(), factorize()
141
+ */
142
+ template <typename MatrixType>
143
+ void compute(const MatrixType& mat) {
144
+ analyzePattern(mat);
145
+ factorize(mat);
146
+ }
161
147
 
162
- /** \returns the sparse lower triangular factor L */
163
- const FactorType& matrixL() const { eigen_assert("m_factorizationIsOk"); return m_L; }
148
+ // internal
149
+ template <typename Rhs, typename Dest>
150
+ void _solve_impl(const Rhs& b, Dest& x) const {
151
+ eigen_assert(m_factorizationIsOk && "factorize() should be called first");
152
+ if (m_perm.rows() == b.rows())
153
+ x = m_perm * b;
154
+ else
155
+ x = b;
156
+ x = m_scale.asDiagonal() * x;
157
+ x = m_L.template triangularView<Lower>().solve(x);
158
+ x = m_L.adjoint().template triangularView<Upper>().solve(x);
159
+ x = m_scale.asDiagonal() * x;
160
+ if (m_perm.rows() == b.rows()) x = m_perm.inverse() * x;
161
+ }
164
162
 
165
- /** \returns a vector representing the scaling factor S */
166
- const VectorRx& scalingS() const { eigen_assert("m_factorizationIsOk"); return m_scale; }
163
+ /** \returns the sparse lower triangular factor L */
164
+ const FactorType& matrixL() const {
165
+ eigen_assert(m_factorizationIsOk && "factorize() should be called first");
166
+ return m_L;
167
+ }
167
168
 
168
- /** \returns the fill-in reducing permutation P (can be empty for a natural ordering) */
169
- const PermutationType& permutationP() const { eigen_assert("m_analysisIsOk"); return m_perm; }
169
+ /** \returns a vector representing the scaling factor S */
170
+ const VectorRx& scalingS() const {
171
+ eigen_assert(m_factorizationIsOk && "factorize() should be called first");
172
+ return m_scale;
173
+ }
170
174
 
171
- protected:
172
- FactorType m_L; // The lower part stored in CSC
173
- VectorRx m_scale; // The vector for scaling the matrix
174
- RealScalar m_initialShift; // The initial shift parameter
175
- bool m_analysisIsOk;
176
- bool m_factorizationIsOk;
177
- ComputationInfo m_info;
178
- PermutationType m_perm;
175
+ /** \returns the fill-in reducing permutation P (can be empty for a natural ordering) */
176
+ const PermutationType& permutationP() const {
177
+ eigen_assert(m_analysisIsOk && "analyzePattern() should be called first");
178
+ return m_perm;
179
+ }
179
180
 
180
- private:
181
- inline void updateList(Ref<const VectorIx> colPtr, Ref<VectorIx> rowIdx, Ref<VectorSx> vals, const Index& col, const Index& jk, VectorIx& firstElt, VectorList& listCol);
181
+ /** \returns the final shift parameter from the computation */
182
+ RealScalar shift() const { return m_shift; }
183
+
184
+ protected:
185
+ FactorType m_L; // The lower part stored in CSC
186
+ VectorRx m_scale; // The vector for scaling the matrix
187
+ RealScalar m_initialShift; // The initial shift parameter
188
+ bool m_analysisIsOk;
189
+ bool m_factorizationIsOk;
190
+ ComputationInfo m_info;
191
+ PermutationType m_perm;
192
+ RealScalar m_shift; // The final shift parameter.
193
+
194
+ private:
195
+ inline void updateList(Ref<const VectorIx> colPtr, Ref<VectorIx> rowIdx, Ref<VectorSx> vals, const Index& col,
196
+ const Index& jk, VectorIx& firstElt, VectorList& listCol);
182
197
  };
183
198
 
184
199
  // Based on the following paper:
185
200
  // C-J. Lin and J. J. Moré, Incomplete Cholesky Factorizations with
186
201
  // Limited memory, SIAM J. Sci. Comput. 21(1), pp. 24-45, 1999
187
202
  // http://ftp.mcs.anl.gov/pub/tech_reports/reports/P682.pdf
188
- template<typename Scalar, int _UpLo, typename OrderingType>
189
- template<typename _MatrixType>
190
- void IncompleteCholesky<Scalar,_UpLo, OrderingType>::factorize(const _MatrixType& mat)
191
- {
203
+ template <typename Scalar, int UpLo_, typename OrderingType>
204
+ template <typename MatrixType_>
205
+ void IncompleteCholesky<Scalar, UpLo_, OrderingType>::factorize(const MatrixType_& mat) {
192
206
  using std::sqrt;
193
207
  eigen_assert(m_analysisIsOk && "analyzePattern() should be called first");
194
208
 
195
- // Dropping strategy : Keep only the p largest elements per column, where p is the number of elements in the column of the original matrix. Other strategies will be added
209
+ // Dropping strategy : Keep only the p largest elements per column, where p is the number of elements in the column of
210
+ // the original matrix. Other strategies will be added
196
211
 
197
212
  // Apply the fill-reducing permutation computed in analyzePattern()
198
- if (m_perm.rows() == mat.rows() ) // To detect the null permutation
213
+ if (m_perm.rows() == mat.rows()) // To detect the null permutation
199
214
  {
200
215
  // The temporary is needed to make sure that the diagonal entry is properly sorted
201
216
  FactorType tmp(mat.rows(), mat.cols());
202
- tmp = mat.template selfadjointView<_UpLo>().twistedBy(m_perm);
217
+ tmp = mat.template selfadjointView<UpLo_>().twistedBy(m_perm);
203
218
  m_L.template selfadjointView<Lower>() = tmp.template selfadjointView<Lower>();
219
+ } else {
220
+ m_L.template selfadjointView<Lower>() = mat.template selfadjointView<UpLo_>();
204
221
  }
205
- else
206
- {
207
- m_L.template selfadjointView<Lower>() = mat.template selfadjointView<_UpLo>();
222
+
223
+ // The algorithm will insert increasingly large shifts on the diagonal until
224
+ // factorization succeeds. Therefore we have to make sure that there is a
225
+ // space in the datastructure to store such values, even if the original
226
+ // matrix has a zero on the diagonal.
227
+ bool modified = false;
228
+ for (Index i = 0; i < mat.cols(); ++i) {
229
+ bool inserted = false;
230
+ m_L.findOrInsertCoeff(i, i, &inserted);
231
+ if (inserted) {
232
+ modified = true;
233
+ }
208
234
  }
235
+ if (modified) m_L.makeCompressed();
209
236
 
210
237
  Index n = m_L.cols();
211
238
  Index nnz = m_L.nonZeros();
212
- Map<VectorSx> vals(m_L.valuePtr(), nnz); //values
213
- Map<VectorIx> rowIdx(m_L.innerIndexPtr(), nnz); //Row indices
214
- Map<VectorIx> colPtr( m_L.outerIndexPtr(), n+1); // Pointer to the beginning of each row
215
- VectorIx firstElt(n-1); // for each j, points to the next entry in vals that will be used in the factorization
216
- VectorList listCol(n); // listCol(j) is a linked list of columns to update column j
217
- VectorSx col_vals(n); // Store a nonzero values in each column
218
- VectorIx col_irow(n); // Row indices of nonzero elements in each column
239
+ Map<VectorSx> vals(m_L.valuePtr(), nnz); // values
240
+ Map<VectorIx> rowIdx(m_L.innerIndexPtr(), nnz); // Row indices
241
+ Map<VectorIx> colPtr(m_L.outerIndexPtr(), n + 1); // Pointer to the beginning of each row
242
+ VectorIx firstElt(n - 1); // for each j, points to the next entry in vals that will be used in the factorization
243
+ VectorList listCol(n); // listCol(j) is a linked list of columns to update column j
244
+ VectorSx col_vals(n); // Store a nonzero values in each column
245
+ VectorIx col_irow(n); // Row indices of nonzero elements in each column
219
246
  VectorIx col_pattern(n);
220
247
  col_pattern.fill(-1);
221
248
  StorageIndex col_nnz;
222
249
 
223
-
224
250
  // Computes the scaling factors
225
251
  m_scale.resize(n);
226
252
  m_scale.setZero();
227
253
  for (Index j = 0; j < n; j++)
228
- for (Index k = colPtr[j]; k < colPtr[j+1]; k++)
229
- {
254
+ for (Index k = colPtr[j]; k < colPtr[j + 1]; k++) {
230
255
  m_scale(j) += numext::abs2(vals(k));
231
- if(rowIdx[k]!=j)
232
- m_scale(rowIdx[k]) += numext::abs2(vals(k));
256
+ if (rowIdx[k] != j) m_scale(rowIdx[k]) += numext::abs2(vals(k));
233
257
  }
234
258
 
235
259
  m_scale = m_scale.cwiseSqrt().cwiseSqrt();
236
260
 
237
261
  for (Index j = 0; j < n; ++j)
238
- if(m_scale(j)>(std::numeric_limits<RealScalar>::min)())
239
- m_scale(j) = RealScalar(1)/m_scale(j);
262
+ if (m_scale(j) > (std::numeric_limits<RealScalar>::min)())
263
+ m_scale(j) = RealScalar(1) / m_scale(j);
240
264
  else
241
265
  m_scale(j) = 1;
242
266
 
@@ -244,40 +268,34 @@ void IncompleteCholesky<Scalar,_UpLo, OrderingType>::factorize(const _MatrixType
244
268
 
245
269
  // Scale and compute the shift for the matrix
246
270
  RealScalar mindiag = NumTraits<RealScalar>::highest();
247
- for (Index j = 0; j < n; j++)
248
- {
249
- for (Index k = colPtr[j]; k < colPtr[j+1]; k++)
250
- vals[k] *= (m_scale(j)*m_scale(rowIdx[k]));
251
- eigen_internal_assert(rowIdx[colPtr[j]]==j && "IncompleteCholesky: only the lower triangular part must be stored");
271
+ for (Index j = 0; j < n; j++) {
272
+ for (Index k = colPtr[j]; k < colPtr[j + 1]; k++) vals[k] *= (m_scale(j) * m_scale(rowIdx[k]));
273
+ eigen_internal_assert(rowIdx[colPtr[j]] == j &&
274
+ "IncompleteCholesky: only the lower triangular part must be stored");
252
275
  mindiag = numext::mini(numext::real(vals[colPtr[j]]), mindiag);
253
276
  }
254
277
 
255
278
  FactorType L_save = m_L;
256
279
 
257
- RealScalar shift = 0;
258
- if(mindiag <= RealScalar(0.))
259
- shift = m_initialShift - mindiag;
280
+ m_shift = RealScalar(0);
281
+ if (mindiag <= RealScalar(0.)) m_shift = m_initialShift - mindiag;
260
282
 
261
283
  m_info = NumericalIssue;
262
284
 
263
285
  // Try to perform the incomplete factorization using the current shift
264
286
  int iter = 0;
265
- do
266
- {
287
+ do {
267
288
  // Apply the shift to the diagonal elements of the matrix
268
- for (Index j = 0; j < n; j++)
269
- vals[colPtr[j]] += shift;
289
+ for (Index j = 0; j < n; j++) vals[colPtr[j]] += m_shift;
270
290
 
271
291
  // jki version of the Cholesky factorization
272
- Index j=0;
273
- for (; j < n; ++j)
274
- {
292
+ Index j = 0;
293
+ for (; j < n; ++j) {
275
294
  // Left-looking factorization of the j-th column
276
295
  // First, load the j-th column into col_vals
277
296
  Scalar diag = vals[colPtr[j]]; // It is assumed that only the lower part is stored
278
297
  col_nnz = 0;
279
- for (Index i = colPtr[j] + 1; i < colPtr[j+1]; i++)
280
- {
298
+ for (Index i = colPtr[j] + 1; i < colPtr[j + 1]; i++) {
281
299
  StorageIndex l = rowIdx[i];
282
300
  col_vals(col_nnz) = vals[i];
283
301
  col_irow(col_nnz) = l;
@@ -287,69 +305,60 @@ void IncompleteCholesky<Scalar,_UpLo, OrderingType>::factorize(const _MatrixType
287
305
  {
288
306
  typename std::list<StorageIndex>::iterator k;
289
307
  // Browse all previous columns that will update column j
290
- for(k = listCol[j].begin(); k != listCol[j].end(); k++)
291
- {
292
- Index jk = firstElt(*k); // First element to use in the column
293
- eigen_internal_assert(rowIdx[jk]==j);
308
+ for (k = listCol[j].begin(); k != listCol[j].end(); k++) {
309
+ Index jk = firstElt(*k); // First element to use in the column
310
+ eigen_internal_assert(rowIdx[jk] == j);
294
311
  Scalar v_j_jk = numext::conj(vals[jk]);
295
312
 
296
313
  jk += 1;
297
- for (Index i = jk; i < colPtr[*k+1]; i++)
298
- {
314
+ for (Index i = jk; i < colPtr[*k + 1]; i++) {
299
315
  StorageIndex l = rowIdx[i];
300
- if(col_pattern[l]<0)
301
- {
316
+ if (col_pattern[l] < 0) {
302
317
  col_vals(col_nnz) = vals[i] * v_j_jk;
303
318
  col_irow[col_nnz] = l;
304
319
  col_pattern(l) = col_nnz;
305
320
  col_nnz++;
306
- }
307
- else
321
+ } else
308
322
  col_vals(col_pattern[l]) -= vals[i] * v_j_jk;
309
323
  }
310
- updateList(colPtr,rowIdx,vals, *k, jk, firstElt, listCol);
324
+ updateList(colPtr, rowIdx, vals, *k, jk, firstElt, listCol);
311
325
  }
312
326
  }
313
327
 
314
328
  // Scale the current column
315
- if(numext::real(diag) <= 0)
316
- {
317
- if(++iter>=10)
318
- return;
329
+ if (numext::real(diag) <= 0) {
330
+ if (++iter >= 10) return;
319
331
 
320
332
  // increase shift
321
- shift = numext::maxi(m_initialShift,RealScalar(2)*shift);
333
+ m_shift = numext::maxi(m_initialShift, RealScalar(2) * m_shift);
322
334
  // restore m_L, col_pattern, and listCol
323
335
  vals = Map<const VectorSx>(L_save.valuePtr(), nnz);
324
336
  rowIdx = Map<const VectorIx>(L_save.innerIndexPtr(), nnz);
325
- colPtr = Map<const VectorIx>(L_save.outerIndexPtr(), n+1);
337
+ colPtr = Map<const VectorIx>(L_save.outerIndexPtr(), n + 1);
326
338
  col_pattern.fill(-1);
327
- for(Index i=0; i<n; ++i)
328
- listCol[i].clear();
339
+ for (Index i = 0; i < n; ++i) listCol[i].clear();
329
340
 
330
341
  break;
331
342
  }
332
343
 
333
344
  RealScalar rdiag = sqrt(numext::real(diag));
334
345
  vals[colPtr[j]] = rdiag;
335
- for (Index k = 0; k<col_nnz; ++k)
336
- {
346
+ for (Index k = 0; k < col_nnz; ++k) {
337
347
  Index i = col_irow[k];
338
- //Scale
348
+ // Scale
339
349
  col_vals(k) /= rdiag;
340
- //Update the remaining diagonals with col_vals
350
+ // Update the remaining diagonals with col_vals
341
351
  vals[colPtr[i]] -= numext::abs2(col_vals(k));
342
352
  }
343
353
  // Select the largest p elements
344
354
  // p is the original number of elements in the column (without the diagonal)
345
- Index p = colPtr[j+1] - colPtr[j] - 1 ;
355
+ Index p = colPtr[j + 1] - colPtr[j] - 1;
346
356
  Ref<VectorSx> cvals = col_vals.head(col_nnz);
347
357
  Ref<VectorIx> cirow = col_irow.head(col_nnz);
348
- internal::QuickSplit(cvals,cirow, p);
358
+ internal::QuickSplit(cvals, cirow, p);
349
359
  // Insert the largest p elements in the matrix
350
360
  Index cpt = 0;
351
- for (Index i = colPtr[j]+1; i < colPtr[j+1]; i++)
352
- {
361
+ for (Index i = colPtr[j] + 1; i < colPtr[j + 1]; i++) {
353
362
  vals[i] = col_vals(cpt);
354
363
  rowIdx[i] = col_irow(cpt);
355
364
  // restore col_pattern:
@@ -357,38 +366,37 @@ void IncompleteCholesky<Scalar,_UpLo, OrderingType>::factorize(const _MatrixType
357
366
  cpt++;
358
367
  }
359
368
  // Get the first smallest row index and put it after the diagonal element
360
- Index jk = colPtr(j)+1;
361
- updateList(colPtr,rowIdx,vals,j,jk,firstElt,listCol);
369
+ Index jk = colPtr(j) + 1;
370
+ updateList(colPtr, rowIdx, vals, j, jk, firstElt, listCol);
362
371
  }
363
372
 
364
- if(j==n)
365
- {
373
+ if (j == n) {
366
374
  m_factorizationIsOk = true;
367
375
  m_info = Success;
368
376
  }
369
- } while(m_info!=Success);
377
+ } while (m_info != Success);
370
378
  }
371
379
 
372
- template<typename Scalar, int _UpLo, typename OrderingType>
373
- inline void IncompleteCholesky<Scalar,_UpLo, OrderingType>::updateList(Ref<const VectorIx> colPtr, Ref<VectorIx> rowIdx, Ref<VectorSx> vals, const Index& col, const Index& jk, VectorIx& firstElt, VectorList& listCol)
374
- {
375
- if (jk < colPtr(col+1) )
376
- {
377
- Index p = colPtr(col+1) - jk;
380
+ template <typename Scalar, int UpLo_, typename OrderingType>
381
+ inline void IncompleteCholesky<Scalar, UpLo_, OrderingType>::updateList(Ref<const VectorIx> colPtr,
382
+ Ref<VectorIx> rowIdx, Ref<VectorSx> vals,
383
+ const Index& col, const Index& jk,
384
+ VectorIx& firstElt, VectorList& listCol) {
385
+ if (jk < colPtr(col + 1)) {
386
+ Index p = colPtr(col + 1) - jk;
378
387
  Index minpos;
379
- rowIdx.segment(jk,p).minCoeff(&minpos);
388
+ rowIdx.segment(jk, p).minCoeff(&minpos);
380
389
  minpos += jk;
381
- if (rowIdx(minpos) != rowIdx(jk))
382
- {
383
- //Swap
384
- std::swap(rowIdx(jk),rowIdx(minpos));
385
- std::swap(vals(jk),vals(minpos));
390
+ if (rowIdx(minpos) != rowIdx(jk)) {
391
+ // Swap
392
+ std::swap(rowIdx(jk), rowIdx(minpos));
393
+ std::swap(vals(jk), vals(minpos));
386
394
  }
387
- firstElt(col) = internal::convert_index<StorageIndex,Index>(jk);
388
- listCol[rowIdx(jk)].push_back(internal::convert_index<StorageIndex,Index>(col));
395
+ firstElt(col) = internal::convert_index<StorageIndex, Index>(jk);
396
+ listCol[rowIdx(jk)].push_back(internal::convert_index<StorageIndex, Index>(col));
389
397
  }
390
398
  }
391
399
 
392
- } // end namespace Eigen
400
+ } // end namespace Eigen
393
401
 
394
402
  #endif