@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
@@ -11,40 +11,41 @@
11
11
  #ifndef EIGEN_INCOMPLETE_LUT_H
12
12
  #define EIGEN_INCOMPLETE_LUT_H
13
13
 
14
+ // IWYU pragma: private
15
+ #include "./InternalHeaderCheck.h"
14
16
 
15
17
  namespace Eigen {
16
18
 
17
19
  namespace internal {
18
20
 
19
21
  /** \internal
20
- * Compute a quick-sort split of a vector
21
- * On output, the vector row is permuted such that its elements satisfy
22
- * abs(row(i)) >= abs(row(ncut)) if i<ncut
23
- * abs(row(i)) <= abs(row(ncut)) if i>ncut
24
- * \param row The vector of values
25
- * \param ind The array of index for the elements in @p row
26
- * \param ncut The number of largest elements to keep
27
- **/
22
+ * Compute a quick-sort split of a vector
23
+ * On output, the vector row is permuted such that its elements satisfy
24
+ * abs(row(i)) >= abs(row(ncut)) if i<ncut
25
+ * abs(row(i)) <= abs(row(ncut)) if i>ncut
26
+ * \param row The vector of values
27
+ * \param ind The array of index for the elements in @p row
28
+ * \param ncut The number of largest elements to keep
29
+ **/
28
30
  template <typename VectorV, typename VectorI>
29
- Index QuickSplit(VectorV &row, VectorI &ind, Index ncut)
30
- {
31
+ Index QuickSplit(VectorV& row, VectorI& ind, Index ncut) {
31
32
  typedef typename VectorV::RealScalar RealScalar;
32
- using std::swap;
33
33
  using std::abs;
34
+ using std::swap;
34
35
  Index mid;
35
36
  Index n = row.size(); /* length of the vector */
36
- Index first, last ;
37
+ Index first, last;
37
38
 
38
39
  ncut--; /* to fit the zero-based indices */
39
40
  first = 0;
40
- last = n-1;
41
- if (ncut < first || ncut > last ) return 0;
41
+ last = n - 1;
42
+ if (ncut < first || ncut > last) return 0;
42
43
 
43
44
  do {
44
45
  mid = first;
45
46
  RealScalar abskey = abs(row(mid));
46
47
  for (Index j = first + 1; j <= last; j++) {
47
- if ( abs(row(j)) > abskey) {
48
+ if (abs(row(j)) > abskey) {
48
49
  ++mid;
49
50
  swap(row(mid), row(j));
50
51
  swap(ind(mid), ind(j));
@@ -54,157 +55,152 @@ Index QuickSplit(VectorV &row, VectorI &ind, Index ncut)
54
55
  swap(row(mid), row(first));
55
56
  swap(ind(mid), ind(first));
56
57
 
57
- if (mid > ncut) last = mid - 1;
58
- else if (mid < ncut ) first = mid + 1;
59
- } while (mid != ncut );
58
+ if (mid > ncut)
59
+ last = mid - 1;
60
+ else if (mid < ncut)
61
+ first = mid + 1;
62
+ } while (mid != ncut);
60
63
 
61
64
  return 0; /* mid is equal to ncut */
62
65
  }
63
66
 
64
- }// end namespace internal
67
+ } // end namespace internal
65
68
 
66
69
  /** \ingroup IterativeLinearSolvers_Module
67
- * \class IncompleteLUT
68
- * \brief Incomplete LU factorization with dual-threshold strategy
69
- *
70
- * \implsparsesolverconcept
71
- *
72
- * During the numerical factorization, two dropping rules are used :
73
- * 1) any element whose magnitude is less than some tolerance is dropped.
74
- * This tolerance is obtained by multiplying the input tolerance @p droptol
75
- * by the average magnitude of all the original elements in the current row.
76
- * 2) After the elimination of the row, only the @p fill largest elements in
77
- * the L part and the @p fill largest elements in the U part are kept
78
- * (in addition to the diagonal element ). Note that @p fill is computed from
79
- * the input parameter @p fillfactor which is used the ratio to control the fill_in
80
- * relatively to the initial number of nonzero elements.
81
- *
82
- * The two extreme cases are when @p droptol=0 (to keep all the @p fill*2 largest elements)
83
- * and when @p fill=n/2 with @p droptol being different to zero.
84
- *
85
- * References : Yousef Saad, ILUT: A dual threshold incomplete LU factorization,
86
- * Numerical Linear Algebra with Applications, 1(4), pp 387-402, 1994.
87
- *
88
- * NOTE : The following implementation is derived from the ILUT implementation
89
- * in the SPARSKIT package, Copyright (C) 2005, the Regents of the University of Minnesota
90
- * released under the terms of the GNU LGPL:
91
- * http://www-users.cs.umn.edu/~saad/software/SPARSKIT/README
92
- * However, Yousef Saad gave us permission to relicense his ILUT code to MPL2.
93
- * See the Eigen mailing list archive, thread: ILUT, date: July 8, 2012:
94
- * http://listengine.tuxfamily.org/lists.tuxfamily.org/eigen/2012/07/msg00064.html
95
- * alternatively, on GMANE:
96
- * http://comments.gmane.org/gmane.comp.lib.eigen/3302
97
- */
98
- template <typename _Scalar, typename _StorageIndex = int>
99
- class IncompleteLUT : public SparseSolverBase<IncompleteLUT<_Scalar, _StorageIndex> >
100
- {
101
- protected:
102
- typedef SparseSolverBase<IncompleteLUT> Base;
103
- using Base::m_isInitialized;
104
- public:
105
- typedef _Scalar Scalar;
106
- typedef _StorageIndex StorageIndex;
107
- typedef typename NumTraits<Scalar>::Real RealScalar;
108
- typedef Matrix<Scalar,Dynamic,1> Vector;
109
- typedef Matrix<StorageIndex,Dynamic,1> VectorI;
110
- typedef SparseMatrix<Scalar,RowMajor,StorageIndex> FactorType;
111
-
112
- enum {
113
- ColsAtCompileTime = Dynamic,
114
- MaxColsAtCompileTime = Dynamic
115
- };
116
-
117
- public:
118
-
119
- IncompleteLUT()
120
- : m_droptol(NumTraits<Scalar>::dummy_precision()), m_fillfactor(10),
121
- m_analysisIsOk(false), m_factorizationIsOk(false)
122
- {}
123
-
124
- template<typename MatrixType>
125
- explicit IncompleteLUT(const MatrixType& mat, const RealScalar& droptol=NumTraits<Scalar>::dummy_precision(), int fillfactor = 10)
126
- : m_droptol(droptol),m_fillfactor(fillfactor),
127
- m_analysisIsOk(false),m_factorizationIsOk(false)
128
- {
129
- eigen_assert(fillfactor != 0);
130
- compute(mat);
131
- }
70
+ * \class IncompleteLUT
71
+ * \brief Incomplete LU factorization with dual-threshold strategy
72
+ *
73
+ * \implsparsesolverconcept
74
+ *
75
+ * During the numerical factorization, two dropping rules are used :
76
+ * 1) any element whose magnitude is less than some tolerance is dropped.
77
+ * This tolerance is obtained by multiplying the input tolerance @p droptol
78
+ * by the average magnitude of all the original elements in the current row.
79
+ * 2) After the elimination of the row, only the @p fill largest elements in
80
+ * the L part and the @p fill largest elements in the U part are kept
81
+ * (in addition to the diagonal element ). Note that @p fill is computed from
82
+ * the input parameter @p fillfactor which is used the ratio to control the fill_in
83
+ * relatively to the initial number of nonzero elements.
84
+ *
85
+ * The two extreme cases are when @p droptol=0 (to keep all the @p fill*2 largest elements)
86
+ * and when @p fill=n/2 with @p droptol being different to zero.
87
+ *
88
+ * References : Yousef Saad, ILUT: A dual threshold incomplete LU factorization,
89
+ * Numerical Linear Algebra with Applications, 1(4), pp 387-402, 1994.
90
+ *
91
+ * NOTE : The following implementation is derived from the ILUT implementation
92
+ * in the SPARSKIT package, Copyright (C) 2005, the Regents of the University of Minnesota
93
+ * released under the terms of the GNU LGPL:
94
+ * http://www-users.cs.umn.edu/~saad/software/SPARSKIT/README
95
+ * However, Yousef Saad gave us permission to relicense his ILUT code to MPL2.
96
+ * See the Eigen mailing list archive, thread: ILUT, date: July 8, 2012:
97
+ * http://listengine.tuxfamily.org/lists.tuxfamily.org/eigen/2012/07/msg00064.html
98
+ * alternatively, on GMANE:
99
+ * http://comments.gmane.org/gmane.comp.lib.eigen/3302
100
+ */
101
+ template <typename Scalar_, typename StorageIndex_ = int>
102
+ class IncompleteLUT : public SparseSolverBase<IncompleteLUT<Scalar_, StorageIndex_> > {
103
+ protected:
104
+ typedef SparseSolverBase<IncompleteLUT> Base;
105
+ using Base::m_isInitialized;
106
+
107
+ public:
108
+ typedef Scalar_ Scalar;
109
+ typedef StorageIndex_ StorageIndex;
110
+ typedef typename NumTraits<Scalar>::Real RealScalar;
111
+ typedef Matrix<Scalar, Dynamic, 1> Vector;
112
+ typedef Matrix<StorageIndex, Dynamic, 1> VectorI;
113
+ typedef SparseMatrix<Scalar, RowMajor, StorageIndex> FactorType;
114
+
115
+ enum { ColsAtCompileTime = Dynamic, MaxColsAtCompileTime = Dynamic };
116
+
117
+ public:
118
+ IncompleteLUT()
119
+ : m_droptol(NumTraits<Scalar>::dummy_precision()),
120
+ m_fillfactor(10),
121
+ m_analysisIsOk(false),
122
+ m_factorizationIsOk(false) {}
123
+
124
+ template <typename MatrixType>
125
+ explicit IncompleteLUT(const MatrixType& mat, const RealScalar& droptol = NumTraits<Scalar>::dummy_precision(),
126
+ int fillfactor = 10)
127
+ : m_droptol(droptol), m_fillfactor(fillfactor), m_analysisIsOk(false), m_factorizationIsOk(false) {
128
+ eigen_assert(fillfactor != 0);
129
+ compute(mat);
130
+ }
132
131
 
133
- EIGEN_CONSTEXPR Index rows() const EIGEN_NOEXCEPT { return m_lu.rows(); }
132
+ /** \brief Extraction Method for L-Factor */
133
+ const FactorType matrixL() const;
134
134
 
135
- EIGEN_CONSTEXPR Index cols() const EIGEN_NOEXCEPT { return m_lu.cols(); }
135
+ /** \brief Extraction Method for U-Factor */
136
+ const FactorType matrixU() const;
136
137
 
137
- /** \brief Reports whether previous computation was successful.
138
- *
139
- * \returns \c Success if computation was successful,
140
- * \c NumericalIssue if the matrix.appears to be negative.
141
- */
142
- ComputationInfo info() const
143
- {
144
- eigen_assert(m_isInitialized && "IncompleteLUT is not initialized.");
145
- return m_info;
146
- }
138
+ constexpr Index rows() const noexcept { return m_lu.rows(); }
147
139
 
148
- template<typename MatrixType>
149
- void analyzePattern(const MatrixType& amat);
150
-
151
- template<typename MatrixType>
152
- void factorize(const MatrixType& amat);
153
-
154
- /**
155
- * Compute an incomplete LU factorization with dual threshold on the matrix mat
156
- * No pivoting is done in this version
157
- *
158
- **/
159
- template<typename MatrixType>
160
- IncompleteLUT& compute(const MatrixType& amat)
161
- {
162
- analyzePattern(amat);
163
- factorize(amat);
164
- return *this;
165
- }
140
+ constexpr Index cols() const noexcept { return m_lu.cols(); }
141
+
142
+ /** \brief Reports whether previous computation was successful.
143
+ *
144
+ * \returns \c Success if computation was successful,
145
+ * \c NumericalIssue if the matrix.appears to be negative.
146
+ */
147
+ ComputationInfo info() const {
148
+ eigen_assert(m_isInitialized && "IncompleteLUT is not initialized.");
149
+ return m_info;
150
+ }
166
151
 
167
- void setDroptol(const RealScalar& droptol);
168
- void setFillfactor(int fillfactor);
152
+ template <typename MatrixType>
153
+ void analyzePattern(const MatrixType& amat);
154
+
155
+ template <typename MatrixType>
156
+ void factorize(const MatrixType& amat);
157
+
158
+ /**
159
+ * Compute an incomplete LU factorization with dual threshold on the matrix mat
160
+ * No pivoting is done in this version
161
+ *
162
+ **/
163
+ template <typename MatrixType>
164
+ IncompleteLUT& compute(const MatrixType& amat) {
165
+ analyzePattern(amat);
166
+ factorize(amat);
167
+ return *this;
168
+ }
169
169
 
170
- template<typename Rhs, typename Dest>
171
- void _solve_impl(const Rhs& b, Dest& x) const
172
- {
173
- x = m_Pinv * b;
174
- x = m_lu.template triangularView<UnitLower>().solve(x);
175
- x = m_lu.template triangularView<Upper>().solve(x);
176
- x = m_P * x;
177
- }
170
+ void setDroptol(const RealScalar& droptol);
171
+ void setFillfactor(int fillfactor);
178
172
 
179
- protected:
173
+ template <typename Rhs, typename Dest>
174
+ void _solve_impl(const Rhs& b, Dest& x) const {
175
+ x = m_Pinv * b;
176
+ x = m_lu.template triangularView<UnitLower>().solve(x);
177
+ x = m_lu.template triangularView<Upper>().solve(x);
178
+ x = m_P * x;
179
+ }
180
180
 
181
- /** keeps off-diagonal entries; drops diagonal entries */
182
- struct keep_diag {
183
- inline bool operator() (const Index& row, const Index& col, const Scalar&) const
184
- {
185
- return row!=col;
186
- }
187
- };
188
-
189
- protected:
190
-
191
- FactorType m_lu;
192
- RealScalar m_droptol;
193
- int m_fillfactor;
194
- bool m_analysisIsOk;
195
- bool m_factorizationIsOk;
196
- ComputationInfo m_info;
197
- PermutationMatrix<Dynamic,Dynamic,StorageIndex> m_P; // Fill-reducing permutation
198
- PermutationMatrix<Dynamic,Dynamic,StorageIndex> m_Pinv; // Inverse permutation
181
+ protected:
182
+ /** keeps off-diagonal entries; drops diagonal entries */
183
+ struct keep_diag {
184
+ inline bool operator()(const Index& row, const Index& col, const Scalar&) const { return row != col; }
185
+ };
186
+
187
+ protected:
188
+ FactorType m_lu;
189
+ RealScalar m_droptol;
190
+ int m_fillfactor;
191
+ bool m_analysisIsOk;
192
+ bool m_factorizationIsOk;
193
+ ComputationInfo m_info;
194
+ PermutationMatrix<Dynamic, Dynamic, StorageIndex> m_P; // Fill-reducing permutation
195
+ PermutationMatrix<Dynamic, Dynamic, StorageIndex> m_Pinv; // Inverse permutation
199
196
  };
200
197
 
201
198
  /**
202
199
  * Set control parameter droptol
203
200
  * \param droptol Drop any element whose magnitude is less than this tolerance
204
201
  **/
205
- template<typename Scalar, typename StorageIndex>
206
- void IncompleteLUT<Scalar,StorageIndex>::setDroptol(const RealScalar& droptol)
207
- {
202
+ template <typename Scalar, typename StorageIndex>
203
+ void IncompleteLUT<Scalar, StorageIndex>::setDroptol(const RealScalar& droptol) {
208
204
  this->m_droptol = droptol;
209
205
  }
210
206
 
@@ -212,53 +208,72 @@ void IncompleteLUT<Scalar,StorageIndex>::setDroptol(const RealScalar& droptol)
212
208
  * Set control parameter fillfactor
213
209
  * \param fillfactor This is used to compute the number @p fill_in of largest elements to keep on each row.
214
210
  **/
215
- template<typename Scalar, typename StorageIndex>
216
- void IncompleteLUT<Scalar,StorageIndex>::setFillfactor(int fillfactor)
217
- {
211
+ template <typename Scalar, typename StorageIndex>
212
+ void IncompleteLUT<Scalar, StorageIndex>::setFillfactor(int fillfactor) {
218
213
  this->m_fillfactor = fillfactor;
219
214
  }
220
215
 
216
+ /**
217
+ * get L-Factor
218
+ * \return L-Factor is a matrix containing the lower triangular part of the sparse matrix. All elements of the matrix
219
+ * above the main diagonal are zero.
220
+ **/
221
+ template <typename Scalar, typename StorageIndex>
222
+ const typename IncompleteLUT<Scalar, StorageIndex>::FactorType IncompleteLUT<Scalar, StorageIndex>::matrixL() const {
223
+ eigen_assert(m_factorizationIsOk && "factorize() should be called first");
224
+ return m_lu.template triangularView<UnitLower>();
225
+ }
226
+
227
+ /**
228
+ * get U-Factor
229
+ * \return L-Factor is a matrix containing the upper triangular part of the sparse matrix. All elements of the matrix
230
+ * below the main diagonal are zero.
231
+ **/
232
+ template <typename Scalar, typename StorageIndex>
233
+ const typename IncompleteLUT<Scalar, StorageIndex>::FactorType IncompleteLUT<Scalar, StorageIndex>::matrixU() const {
234
+ eigen_assert(m_factorizationIsOk && "Factorization must be computed first.");
235
+ return m_lu.template triangularView<Upper>();
236
+ }
237
+
221
238
  template <typename Scalar, typename StorageIndex>
222
- template<typename _MatrixType>
223
- void IncompleteLUT<Scalar,StorageIndex>::analyzePattern(const _MatrixType& amat)
224
- {
239
+ template <typename MatrixType_>
240
+ void IncompleteLUT<Scalar, StorageIndex>::analyzePattern(const MatrixType_& amat) {
225
241
  // Compute the Fill-reducing permutation
226
242
  // Since ILUT does not perform any numerical pivoting,
227
243
  // it is highly preferable to keep the diagonal through symmetric permutations.
228
244
  // To this end, let's symmetrize the pattern and perform AMD on it.
229
- SparseMatrix<Scalar,ColMajor, StorageIndex> mat1 = amat;
230
- SparseMatrix<Scalar,ColMajor, StorageIndex> mat2 = amat.transpose();
245
+ SparseMatrix<Scalar, ColMajor, StorageIndex> mat1 = amat;
246
+ SparseMatrix<Scalar, ColMajor, StorageIndex> mat2 = amat.transpose();
231
247
  // FIXME for a matrix with nearly symmetric pattern, mat2+mat1 is the appropriate choice.
232
248
  // on the other hand for a really non-symmetric pattern, mat2*mat1 should be preferred...
233
- SparseMatrix<Scalar,ColMajor, StorageIndex> AtA = mat2 + mat1;
249
+ SparseMatrix<Scalar, ColMajor, StorageIndex> AtA = mat2 + mat1;
234
250
  AMDOrdering<StorageIndex> ordering;
235
- ordering(AtA,m_P);
236
- m_Pinv = m_P.inverse(); // cache the inverse permutation
251
+ ordering(AtA, m_P);
252
+ m_Pinv = m_P.inverse(); // cache the inverse permutation
237
253
  m_analysisIsOk = true;
238
254
  m_factorizationIsOk = false;
239
255
  m_isInitialized = true;
240
256
  }
241
257
 
242
258
  template <typename Scalar, typename StorageIndex>
243
- template<typename _MatrixType>
244
- void IncompleteLUT<Scalar,StorageIndex>::factorize(const _MatrixType& amat)
245
- {
259
+ template <typename MatrixType_>
260
+ void IncompleteLUT<Scalar, StorageIndex>::factorize(const MatrixType_& amat) {
261
+ using internal::convert_index;
262
+ using std::abs;
246
263
  using std::sqrt;
247
264
  using std::swap;
248
- using std::abs;
249
- using internal::convert_index;
250
265
 
251
266
  eigen_assert((amat.rows() == amat.cols()) && "The factorization should be done on a square matrix");
252
267
  Index n = amat.cols(); // Size of the matrix
253
- m_lu.resize(n,n);
268
+ m_lu.resize(n, n);
254
269
  // Declare Working vectors and variables
255
- Vector u(n) ; // real values of the row -- maximum size is n --
256
- VectorI ju(n); // column position of the values in u -- maximum size is n
257
- VectorI jr(n); // Indicate the position of the nonzero elements in the vector u -- A zero location is indicated by -1
270
+ Vector u(n); // real values of the row -- maximum size is n --
271
+ VectorI ju(n); // column position of the values in u -- maximum size is n
272
+ VectorI jr(n); // Indicate the position of the nonzero elements in the vector u -- A zero location is indicated by -1
258
273
 
259
274
  // Apply the fill-reducing permutation
260
275
  eigen_assert(m_analysisIsOk && "You must first call analyzePattern()");
261
- SparseMatrix<Scalar,RowMajor, StorageIndex> mat;
276
+ SparseMatrix<Scalar, RowMajor, StorageIndex> mat;
262
277
  mat = amat.twistedBy(m_Pinv);
263
278
 
264
279
  // Initialization
@@ -267,44 +282,37 @@ void IncompleteLUT<Scalar,StorageIndex>::factorize(const _MatrixType& amat)
267
282
  u.fill(0);
268
283
 
269
284
  // number of largest elements to keep in each row:
270
- Index fill_in = (amat.nonZeros()*m_fillfactor)/n + 1;
285
+ Index fill_in = (amat.nonZeros() * m_fillfactor) / n + 1;
271
286
  if (fill_in > n) fill_in = n;
272
287
 
273
288
  // number of largest nonzero elements to keep in the L and the U part of the current row:
274
- Index nnzL = fill_in/2;
289
+ Index nnzL = fill_in / 2;
275
290
  Index nnzU = nnzL;
276
291
  m_lu.reserve(n * (nnzL + nnzU + 1));
277
292
 
278
293
  // global loop over the rows of the sparse matrix
279
- for (Index ii = 0; ii < n; ii++)
280
- {
294
+ for (Index ii = 0; ii < n; ii++) {
281
295
  // 1 - copy the lower and the upper part of the row i of mat in the working vector u
282
296
 
283
- Index sizeu = 1; // number of nonzero elements in the upper part of the current row
284
- Index sizel = 0; // number of nonzero elements in the lower part of the current row
285
- ju(ii) = convert_index<StorageIndex>(ii);
286
- u(ii) = 0;
287
- jr(ii) = convert_index<StorageIndex>(ii);
297
+ Index sizeu = 1; // number of nonzero elements in the upper part of the current row
298
+ Index sizel = 0; // number of nonzero elements in the lower part of the current row
299
+ ju(ii) = convert_index<StorageIndex>(ii);
300
+ u(ii) = 0;
301
+ jr(ii) = convert_index<StorageIndex>(ii);
288
302
  RealScalar rownorm = 0;
289
303
 
290
- typename FactorType::InnerIterator j_it(mat, ii); // Iterate through the current row ii
291
- for (; j_it; ++j_it)
292
- {
304
+ typename FactorType::InnerIterator j_it(mat, ii); // Iterate through the current row ii
305
+ for (; j_it; ++j_it) {
293
306
  Index k = j_it.index();
294
- if (k < ii)
295
- {
307
+ if (k < ii) {
296
308
  // copy the lower part
297
309
  ju(sizel) = convert_index<StorageIndex>(k);
298
310
  u(sizel) = j_it.value();
299
311
  jr(k) = convert_index<StorageIndex>(sizel);
300
312
  ++sizel;
301
- }
302
- else if (k == ii)
303
- {
313
+ } else if (k == ii) {
304
314
  u(ii) = j_it.value();
305
- }
306
- else
307
- {
315
+ } else {
308
316
  // copy the upper part
309
317
  Index jpos = ii + sizeu;
310
318
  ju(jpos) = convert_index<StorageIndex>(k);
@@ -316,8 +324,7 @@ void IncompleteLUT<Scalar,StorageIndex>::factorize(const _MatrixType& amat)
316
324
  }
317
325
 
318
326
  // 2 - detect possible zero row
319
- if(rownorm==0)
320
- {
327
+ if (rownorm == 0) {
321
328
  m_info = NumericalIssue;
322
329
  return;
323
330
  }
@@ -327,15 +334,13 @@ void IncompleteLUT<Scalar,StorageIndex>::factorize(const _MatrixType& amat)
327
334
  // 3 - eliminate the previous nonzero rows
328
335
  Index jj = 0;
329
336
  Index len = 0;
330
- while (jj < sizel)
331
- {
337
+ while (jj < sizel) {
332
338
  // In order to eliminate in the correct order,
333
339
  // we must select first the smallest column index among ju(jj:sizel)
334
340
  Index k;
335
- Index minrow = ju.segment(jj,sizel-jj).minCoeff(&k); // k is relative to the segment
341
+ Index minrow = ju.segment(jj, sizel - jj).minCoeff(&k); // k is relative to the segment
336
342
  k += jj;
337
- if (minrow != ju(jj))
338
- {
343
+ if (minrow != ju(jj)) {
339
344
  // swap the two locations
340
345
  Index j = ju(jj);
341
346
  swap(ju(jj), ju(k));
@@ -349,55 +354,51 @@ void IncompleteLUT<Scalar,StorageIndex>::factorize(const _MatrixType& amat)
349
354
  // Start elimination
350
355
  typename FactorType::InnerIterator ki_it(m_lu, minrow);
351
356
  while (ki_it && ki_it.index() < minrow) ++ki_it;
352
- eigen_internal_assert(ki_it && ki_it.col()==minrow);
357
+ eigen_internal_assert(ki_it && ki_it.col() == minrow);
353
358
  Scalar fact = u(jj) / ki_it.value();
354
359
 
355
360
  // drop too small elements
356
- if(abs(fact) <= m_droptol)
357
- {
361
+ if (abs(fact) <= m_droptol) {
358
362
  jj++;
359
363
  continue;
360
364
  }
361
365
 
362
366
  // linear combination of the current row ii and the row minrow
363
367
  ++ki_it;
364
- for (; ki_it; ++ki_it)
365
- {
368
+ for (; ki_it; ++ki_it) {
366
369
  Scalar prod = fact * ki_it.value();
367
- Index j = ki_it.index();
368
- Index jpos = jr(j);
369
- if (jpos == -1) // fill-in element
370
+ Index j = ki_it.index();
371
+ Index jpos = jr(j);
372
+ if (jpos == -1) // fill-in element
370
373
  {
371
374
  Index newpos;
372
- if (j >= ii) // dealing with the upper part
375
+ if (j >= ii) // dealing with the upper part
373
376
  {
374
377
  newpos = ii + sizeu;
375
378
  sizeu++;
376
- eigen_internal_assert(sizeu<=n);
377
- }
378
- else // dealing with the lower part
379
+ eigen_internal_assert(sizeu <= n);
380
+ } else // dealing with the lower part
379
381
  {
380
382
  newpos = sizel;
381
383
  sizel++;
382
- eigen_internal_assert(sizel<=ii);
384
+ eigen_internal_assert(sizel <= ii);
383
385
  }
384
386
  ju(newpos) = convert_index<StorageIndex>(j);
385
387
  u(newpos) = -prod;
386
388
  jr(j) = convert_index<StorageIndex>(newpos);
387
- }
388
- else
389
+ } else
389
390
  u(jpos) -= prod;
390
391
  }
391
392
  // store the pivot element
392
- u(len) = fact;
393
+ u(len) = fact;
393
394
  ju(len) = convert_index<StorageIndex>(minrow);
394
395
  ++len;
395
396
 
396
397
  jj++;
397
- } // end of the elimination on the row ii
398
+ } // end of the elimination on the row ii
398
399
 
399
400
  // reset the upper part of the pointer jr to zero
400
- for(Index k = 0; k <sizeu; k++) jr(ju(ii+k)) = -1;
401
+ for (Index k = 0; k < sizeu; k++) jr(ju(ii + k)) = -1;
401
402
 
402
403
  // 4 - partially sort and insert the elements in the m_lu matrix
403
404
 
@@ -410,36 +411,31 @@ void IncompleteLUT<Scalar,StorageIndex>::factorize(const _MatrixType& amat)
410
411
 
411
412
  // store the largest m_fill elements of the L part
412
413
  m_lu.startVec(ii);
413
- for(Index k = 0; k < len; k++)
414
- m_lu.insertBackByOuterInnerUnordered(ii,ju(k)) = u(k);
414
+ for (Index k = 0; k < len; k++) m_lu.insertBackByOuterInnerUnordered(ii, ju(k)) = u(k);
415
415
 
416
416
  // store the diagonal element
417
417
  // apply a shifting rule to avoid zero pivots (we are doing an incomplete factorization)
418
- if (u(ii) == Scalar(0))
419
- u(ii) = sqrt(m_droptol) * rownorm;
418
+ if (u(ii) == Scalar(0)) u(ii) = sqrt(m_droptol) * rownorm;
420
419
  m_lu.insertBackByOuterInnerUnordered(ii, ii) = u(ii);
421
420
 
422
421
  // sort the U-part of the row
423
422
  // apply the dropping rule first
424
423
  len = 0;
425
- for(Index k = 1; k < sizeu; k++)
426
- {
427
- if(abs(u(ii+k)) > m_droptol * rownorm )
428
- {
424
+ for (Index k = 1; k < sizeu; k++) {
425
+ if (abs(u(ii + k)) > m_droptol * rownorm) {
429
426
  ++len;
430
- u(ii + len) = u(ii + k);
427
+ u(ii + len) = u(ii + k);
431
428
  ju(ii + len) = ju(ii + k);
432
429
  }
433
430
  }
434
- sizeu = len + 1; // +1 to take into account the diagonal element
431
+ sizeu = len + 1; // +1 to take into account the diagonal element
435
432
  len = (std::min)(sizeu, nnzU);
436
- typename Vector::SegmentReturnType uu(u.segment(ii+1, sizeu-1));
437
- typename VectorI::SegmentReturnType juu(ju.segment(ii+1, sizeu-1));
433
+ typename Vector::SegmentReturnType uu(u.segment(ii + 1, sizeu - 1));
434
+ typename VectorI::SegmentReturnType juu(ju.segment(ii + 1, sizeu - 1));
438
435
  internal::QuickSplit(uu, juu, len);
439
436
 
440
437
  // store the largest elements of the U part
441
- for(Index k = ii + 1; k < ii + len; k++)
442
- m_lu.insertBackByOuterInnerUnordered(ii,ju(k)) = u(k);
438
+ for (Index k = ii + 1; k < ii + len; k++) m_lu.insertBackByOuterInnerUnordered(ii, ju(k)) = u(k);
443
439
  }
444
440
  m_lu.finalize();
445
441
  m_lu.makeCompressed();
@@ -448,6 +444,6 @@ void IncompleteLUT<Scalar,StorageIndex>::factorize(const _MatrixType& amat)
448
444
  m_info = Success;
449
445
  }
450
446
 
451
- } // end namespace Eigen
447
+ } // end namespace Eigen
452
448
 
453
- #endif // EIGEN_INCOMPLETE_LUT_H
449
+ #endif // EIGEN_INCOMPLETE_LUT_H
@@ -0,0 +1,3 @@
1
+ #ifndef EIGEN_ITERATIVELINEARSOLVERS_MODULE_H
2
+ #error "Please include Eigen/IterativeLinearSolvers instead of including headers inside the src directory directly."
3
+ #endif