@smake/eigen 1.0.2 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (435) hide show
  1. package/README.md +1 -1
  2. package/eigen/Eigen/AccelerateSupport +52 -0
  3. package/eigen/Eigen/Cholesky +18 -21
  4. package/eigen/Eigen/CholmodSupport +28 -28
  5. package/eigen/Eigen/Core +235 -326
  6. package/eigen/Eigen/Eigenvalues +16 -14
  7. package/eigen/Eigen/Geometry +21 -24
  8. package/eigen/Eigen/Householder +9 -8
  9. package/eigen/Eigen/IterativeLinearSolvers +8 -4
  10. package/eigen/Eigen/Jacobi +14 -14
  11. package/eigen/Eigen/KLUSupport +43 -0
  12. package/eigen/Eigen/LU +16 -20
  13. package/eigen/Eigen/MetisSupport +12 -12
  14. package/eigen/Eigen/OrderingMethods +54 -54
  15. package/eigen/Eigen/PaStiXSupport +23 -20
  16. package/eigen/Eigen/PardisoSupport +17 -14
  17. package/eigen/Eigen/QR +18 -21
  18. package/eigen/Eigen/QtAlignedMalloc +5 -13
  19. package/eigen/Eigen/SPQRSupport +21 -14
  20. package/eigen/Eigen/SVD +23 -18
  21. package/eigen/Eigen/Sparse +1 -4
  22. package/eigen/Eigen/SparseCholesky +18 -23
  23. package/eigen/Eigen/SparseCore +18 -17
  24. package/eigen/Eigen/SparseLU +12 -8
  25. package/eigen/Eigen/SparseQR +16 -14
  26. package/eigen/Eigen/StdDeque +5 -2
  27. package/eigen/Eigen/StdList +5 -2
  28. package/eigen/Eigen/StdVector +5 -2
  29. package/eigen/Eigen/SuperLUSupport +30 -24
  30. package/eigen/Eigen/ThreadPool +80 -0
  31. package/eigen/Eigen/UmfPackSupport +19 -17
  32. package/eigen/Eigen/Version +14 -0
  33. package/eigen/Eigen/src/AccelerateSupport/AccelerateSupport.h +423 -0
  34. package/eigen/Eigen/src/AccelerateSupport/InternalHeaderCheck.h +3 -0
  35. package/eigen/Eigen/src/Cholesky/InternalHeaderCheck.h +3 -0
  36. package/eigen/Eigen/src/Cholesky/LDLT.h +377 -401
  37. package/eigen/Eigen/src/Cholesky/LLT.h +332 -360
  38. package/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +81 -56
  39. package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +620 -521
  40. package/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
  41. package/eigen/Eigen/src/Core/ArithmeticSequence.h +239 -0
  42. package/eigen/Eigen/src/Core/Array.h +341 -294
  43. package/eigen/Eigen/src/Core/ArrayBase.h +190 -203
  44. package/eigen/Eigen/src/Core/ArrayWrapper.h +127 -171
  45. package/eigen/Eigen/src/Core/Assign.h +30 -40
  46. package/eigen/Eigen/src/Core/AssignEvaluator.h +711 -589
  47. package/eigen/Eigen/src/Core/Assign_MKL.h +130 -125
  48. package/eigen/Eigen/src/Core/BandMatrix.h +268 -283
  49. package/eigen/Eigen/src/Core/Block.h +375 -398
  50. package/eigen/Eigen/src/Core/CommaInitializer.h +86 -97
  51. package/eigen/Eigen/src/Core/ConditionEstimator.h +51 -53
  52. package/eigen/Eigen/src/Core/CoreEvaluators.h +1356 -1026
  53. package/eigen/Eigen/src/Core/CoreIterators.h +73 -59
  54. package/eigen/Eigen/src/Core/CwiseBinaryOp.h +114 -132
  55. package/eigen/Eigen/src/Core/CwiseNullaryOp.h +726 -617
  56. package/eigen/Eigen/src/Core/CwiseTernaryOp.h +77 -103
  57. package/eigen/Eigen/src/Core/CwiseUnaryOp.h +56 -68
  58. package/eigen/Eigen/src/Core/CwiseUnaryView.h +132 -95
  59. package/eigen/Eigen/src/Core/DenseBase.h +632 -571
  60. package/eigen/Eigen/src/Core/DenseCoeffsBase.h +511 -624
  61. package/eigen/Eigen/src/Core/DenseStorage.h +512 -509
  62. package/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
  63. package/eigen/Eigen/src/Core/Diagonal.h +169 -210
  64. package/eigen/Eigen/src/Core/DiagonalMatrix.h +351 -274
  65. package/eigen/Eigen/src/Core/DiagonalProduct.h +12 -10
  66. package/eigen/Eigen/src/Core/Dot.h +172 -222
  67. package/eigen/Eigen/src/Core/EigenBase.h +75 -85
  68. package/eigen/Eigen/src/Core/Fill.h +138 -0
  69. package/eigen/Eigen/src/Core/FindCoeff.h +464 -0
  70. package/eigen/Eigen/src/Core/ForceAlignedAccess.h +90 -109
  71. package/eigen/Eigen/src/Core/Fuzzy.h +82 -105
  72. package/eigen/Eigen/src/Core/GeneralProduct.h +327 -263
  73. package/eigen/Eigen/src/Core/GenericPacketMath.h +1472 -360
  74. package/eigen/Eigen/src/Core/GlobalFunctions.h +194 -151
  75. package/eigen/Eigen/src/Core/IO.h +147 -139
  76. package/eigen/Eigen/src/Core/IndexedView.h +321 -0
  77. package/eigen/Eigen/src/Core/InnerProduct.h +260 -0
  78. package/eigen/Eigen/src/Core/InternalHeaderCheck.h +3 -0
  79. package/eigen/Eigen/src/Core/Inverse.h +56 -66
  80. package/eigen/Eigen/src/Core/Map.h +124 -142
  81. package/eigen/Eigen/src/Core/MapBase.h +256 -281
  82. package/eigen/Eigen/src/Core/MathFunctions.h +1620 -938
  83. package/eigen/Eigen/src/Core/MathFunctionsImpl.h +233 -71
  84. package/eigen/Eigen/src/Core/Matrix.h +491 -416
  85. package/eigen/Eigen/src/Core/MatrixBase.h +468 -453
  86. package/eigen/Eigen/src/Core/NestByValue.h +66 -85
  87. package/eigen/Eigen/src/Core/NoAlias.h +79 -85
  88. package/eigen/Eigen/src/Core/NumTraits.h +235 -148
  89. package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +253 -0
  90. package/eigen/Eigen/src/Core/PermutationMatrix.h +461 -511
  91. package/eigen/Eigen/src/Core/PlainObjectBase.h +871 -894
  92. package/eigen/Eigen/src/Core/Product.h +260 -139
  93. package/eigen/Eigen/src/Core/ProductEvaluators.h +863 -714
  94. package/eigen/Eigen/src/Core/Random.h +161 -136
  95. package/eigen/Eigen/src/Core/RandomImpl.h +262 -0
  96. package/eigen/Eigen/src/Core/RealView.h +250 -0
  97. package/eigen/Eigen/src/Core/Redux.h +366 -336
  98. package/eigen/Eigen/src/Core/Ref.h +308 -209
  99. package/eigen/Eigen/src/Core/Replicate.h +94 -106
  100. package/eigen/Eigen/src/Core/Reshaped.h +398 -0
  101. package/eigen/Eigen/src/Core/ReturnByValue.h +49 -55
  102. package/eigen/Eigen/src/Core/Reverse.h +136 -145
  103. package/eigen/Eigen/src/Core/Select.h +70 -140
  104. package/eigen/Eigen/src/Core/SelfAdjointView.h +262 -285
  105. package/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h +23 -20
  106. package/eigen/Eigen/src/Core/SkewSymmetricMatrix3.h +382 -0
  107. package/eigen/Eigen/src/Core/Solve.h +97 -111
  108. package/eigen/Eigen/src/Core/SolveTriangular.h +131 -129
  109. package/eigen/Eigen/src/Core/SolverBase.h +138 -101
  110. package/eigen/Eigen/src/Core/StableNorm.h +156 -160
  111. package/eigen/Eigen/src/Core/StlIterators.h +619 -0
  112. package/eigen/Eigen/src/Core/Stride.h +91 -88
  113. package/eigen/Eigen/src/Core/Swap.h +70 -38
  114. package/eigen/Eigen/src/Core/Transpose.h +295 -273
  115. package/eigen/Eigen/src/Core/Transpositions.h +272 -317
  116. package/eigen/Eigen/src/Core/TriangularMatrix.h +670 -755
  117. package/eigen/Eigen/src/Core/VectorBlock.h +59 -72
  118. package/eigen/Eigen/src/Core/VectorwiseOp.h +668 -630
  119. package/eigen/Eigen/src/Core/Visitor.h +480 -216
  120. package/eigen/Eigen/src/Core/arch/AVX/Complex.h +407 -293
  121. package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +79 -388
  122. package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +2935 -491
  123. package/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
  124. package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +279 -22
  125. package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +472 -0
  126. package/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
  127. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +85 -333
  128. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
  129. package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +2490 -649
  130. package/eigen/Eigen/src/Core/arch/AVX512/PacketMathFP16.h +1413 -0
  131. package/eigen/Eigen/src/Core/arch/AVX512/Reductions.h +297 -0
  132. package/eigen/Eigen/src/Core/arch/AVX512/TrsmKernel.h +1167 -0
  133. package/eigen/Eigen/src/Core/arch/AVX512/TrsmUnrolls.inc +1219 -0
  134. package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +277 -0
  135. package/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
  136. package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +521 -298
  137. package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +39 -280
  138. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +3686 -0
  139. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +205 -0
  140. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +901 -0
  141. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMAbfloat16.h +742 -0
  142. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixVectorProduct.inc +2818 -0
  143. package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +3391 -723
  144. package/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
  145. package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +866 -0
  146. package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +113 -14
  147. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +2634 -0
  148. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +227 -0
  149. package/eigen/Eigen/src/Core/arch/Default/Half.h +1091 -0
  150. package/eigen/Eigen/src/Core/arch/Default/Settings.h +11 -13
  151. package/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
  152. package/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +104 -0
  153. package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1712 -0
  154. package/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
  155. package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +77 -0
  156. package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
  157. package/eigen/Eigen/src/Core/arch/HVX/PacketMath.h +1088 -0
  158. package/eigen/Eigen/src/Core/arch/LSX/Complex.h +520 -0
  159. package/eigen/Eigen/src/Core/arch/LSX/GeneralBlockPanelKernel.h +23 -0
  160. package/eigen/Eigen/src/Core/arch/LSX/MathFunctions.h +43 -0
  161. package/eigen/Eigen/src/Core/arch/LSX/PacketMath.h +2866 -0
  162. package/eigen/Eigen/src/Core/arch/LSX/TypeCasting.h +526 -0
  163. package/eigen/Eigen/src/Core/arch/MSA/Complex.h +620 -0
  164. package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +379 -0
  165. package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1237 -0
  166. package/eigen/Eigen/src/Core/arch/NEON/Complex.h +531 -289
  167. package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +243 -0
  168. package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +50 -73
  169. package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +5915 -579
  170. package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1642 -0
  171. package/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
  172. package/eigen/Eigen/src/Core/arch/SSE/Complex.h +366 -334
  173. package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +40 -514
  174. package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +2164 -675
  175. package/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
  176. package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +188 -35
  177. package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +48 -0
  178. package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +674 -0
  179. package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +52 -0
  180. package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +227 -0
  181. package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +303 -0
  182. package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +576 -0
  183. package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +83 -0
  184. package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +434 -261
  185. package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +160 -53
  186. package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +1073 -605
  187. package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +123 -117
  188. package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +594 -322
  189. package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +204 -118
  190. package/eigen/Eigen/src/Core/functors/StlFunctors.h +110 -97
  191. package/eigen/Eigen/src/Core/functors/TernaryFunctors.h +34 -7
  192. package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1158 -530
  193. package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +2329 -1333
  194. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +328 -364
  195. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +191 -178
  196. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +85 -82
  197. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +154 -73
  198. package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +396 -542
  199. package/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +80 -77
  200. package/eigen/Eigen/src/Core/products/Parallelizer.h +208 -92
  201. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +331 -375
  202. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +206 -224
  203. package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +139 -146
  204. package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +58 -61
  205. package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +71 -71
  206. package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +48 -46
  207. package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +294 -369
  208. package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +246 -238
  209. package/eigen/Eigen/src/Core/products/TriangularMatrixVector.h +244 -247
  210. package/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +212 -192
  211. package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +328 -275
  212. package/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +108 -109
  213. package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +70 -93
  214. package/eigen/Eigen/src/Core/util/Assert.h +158 -0
  215. package/eigen/Eigen/src/Core/util/BlasUtil.h +413 -290
  216. package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +543 -0
  217. package/eigen/Eigen/src/Core/util/Constants.h +314 -263
  218. package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +130 -78
  219. package/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
  220. package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +450 -224
  221. package/eigen/Eigen/src/Core/util/GpuHipCudaDefines.inc +101 -0
  222. package/eigen/Eigen/src/Core/util/GpuHipCudaUndefines.inc +45 -0
  223. package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +487 -0
  224. package/eigen/Eigen/src/Core/util/IntegralConstant.h +279 -0
  225. package/eigen/Eigen/src/Core/util/MKL_support.h +39 -30
  226. package/eigen/Eigen/src/Core/util/Macros.h +939 -646
  227. package/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
  228. package/eigen/Eigen/src/Core/util/Memory.h +1042 -650
  229. package/eigen/Eigen/src/Core/util/Meta.h +618 -426
  230. package/eigen/Eigen/src/Core/util/MoreMeta.h +638 -0
  231. package/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +32 -19
  232. package/eigen/Eigen/src/Core/util/ReshapedHelper.h +51 -0
  233. package/eigen/Eigen/src/Core/util/Serializer.h +209 -0
  234. package/eigen/Eigen/src/Core/util/StaticAssert.h +51 -164
  235. package/eigen/Eigen/src/Core/util/SymbolicIndex.h +445 -0
  236. package/eigen/Eigen/src/Core/util/XprHelper.h +793 -538
  237. package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +246 -277
  238. package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +299 -319
  239. package/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +52 -48
  240. package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +413 -456
  241. package/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +309 -325
  242. package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +157 -171
  243. package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +292 -310
  244. package/eigen/Eigen/src/Eigenvalues/InternalHeaderCheck.h +3 -0
  245. package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +91 -107
  246. package/eigen/Eigen/src/Eigenvalues/RealQZ.h +539 -606
  247. package/eigen/Eigen/src/Eigenvalues/RealSchur.h +348 -382
  248. package/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +41 -35
  249. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +579 -600
  250. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +47 -44
  251. package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +434 -461
  252. package/eigen/Eigen/src/Geometry/AlignedBox.h +307 -214
  253. package/eigen/Eigen/src/Geometry/AngleAxis.h +135 -137
  254. package/eigen/Eigen/src/Geometry/EulerAngles.h +163 -74
  255. package/eigen/Eigen/src/Geometry/Homogeneous.h +289 -333
  256. package/eigen/Eigen/src/Geometry/Hyperplane.h +152 -161
  257. package/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
  258. package/eigen/Eigen/src/Geometry/OrthoMethods.h +168 -145
  259. package/eigen/Eigen/src/Geometry/ParametrizedLine.h +141 -104
  260. package/eigen/Eigen/src/Geometry/Quaternion.h +595 -497
  261. package/eigen/Eigen/src/Geometry/Rotation2D.h +110 -108
  262. package/eigen/Eigen/src/Geometry/RotationBase.h +148 -145
  263. package/eigen/Eigen/src/Geometry/Scaling.h +115 -90
  264. package/eigen/Eigen/src/Geometry/Transform.h +896 -953
  265. package/eigen/Eigen/src/Geometry/Translation.h +100 -98
  266. package/eigen/Eigen/src/Geometry/Umeyama.h +79 -84
  267. package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +154 -0
  268. package/eigen/Eigen/src/Householder/BlockHouseholder.h +54 -42
  269. package/eigen/Eigen/src/Householder/Householder.h +104 -122
  270. package/eigen/Eigen/src/Householder/HouseholderSequence.h +416 -382
  271. package/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
  272. package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +153 -166
  273. package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +127 -138
  274. package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +95 -124
  275. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +269 -267
  276. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +246 -259
  277. package/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
  278. package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +218 -217
  279. package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +80 -103
  280. package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +59 -63
  281. package/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
  282. package/eigen/Eigen/src/Jacobi/Jacobi.h +256 -291
  283. package/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
  284. package/eigen/Eigen/src/KLUSupport/KLUSupport.h +339 -0
  285. package/eigen/Eigen/src/LU/Determinant.h +60 -63
  286. package/eigen/Eigen/src/LU/FullPivLU.h +561 -626
  287. package/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
  288. package/eigen/Eigen/src/LU/InverseImpl.h +213 -275
  289. package/eigen/Eigen/src/LU/PartialPivLU.h +407 -435
  290. package/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +54 -40
  291. package/eigen/Eigen/src/LU/arch/InverseSize4.h +353 -0
  292. package/eigen/Eigen/src/MetisSupport/InternalHeaderCheck.h +3 -0
  293. package/eigen/Eigen/src/MetisSupport/MetisSupport.h +81 -93
  294. package/eigen/Eigen/src/OrderingMethods/Amd.h +250 -282
  295. package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +950 -1103
  296. package/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
  297. package/eigen/Eigen/src/OrderingMethods/Ordering.h +111 -122
  298. package/eigen/Eigen/src/PaStiXSupport/InternalHeaderCheck.h +3 -0
  299. package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +524 -570
  300. package/eigen/Eigen/src/PardisoSupport/InternalHeaderCheck.h +3 -0
  301. package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +385 -429
  302. package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +494 -473
  303. package/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +120 -56
  304. package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +223 -137
  305. package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +517 -460
  306. package/eigen/Eigen/src/QR/HouseholderQR.h +412 -278
  307. package/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h +32 -23
  308. package/eigen/Eigen/src/QR/InternalHeaderCheck.h +3 -0
  309. package/eigen/Eigen/src/SPQRSupport/InternalHeaderCheck.h +3 -0
  310. package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +263 -261
  311. package/eigen/Eigen/src/SVD/BDCSVD.h +872 -679
  312. package/eigen/Eigen/src/SVD/BDCSVD_LAPACKE.h +174 -0
  313. package/eigen/Eigen/src/SVD/InternalHeaderCheck.h +3 -0
  314. package/eigen/Eigen/src/SVD/JacobiSVD.h +585 -543
  315. package/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +85 -49
  316. package/eigen/Eigen/src/SVD/SVDBase.h +281 -160
  317. package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +202 -237
  318. package/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
  319. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +769 -590
  320. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +318 -129
  321. package/eigen/Eigen/src/SparseCore/AmbiVector.h +202 -251
  322. package/eigen/Eigen/src/SparseCore/CompressedStorage.h +184 -236
  323. package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +140 -184
  324. package/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
  325. package/eigen/Eigen/src/SparseCore/SparseAssign.h +174 -111
  326. package/eigen/Eigen/src/SparseCore/SparseBlock.h +408 -477
  327. package/eigen/Eigen/src/SparseCore/SparseColEtree.h +100 -112
  328. package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +531 -280
  329. package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +559 -347
  330. package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +100 -108
  331. package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +185 -191
  332. package/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h +71 -71
  333. package/eigen/Eigen/src/SparseCore/SparseDot.h +49 -47
  334. package/eigen/Eigen/src/SparseCore/SparseFuzzy.h +13 -11
  335. package/eigen/Eigen/src/SparseCore/SparseMap.h +243 -253
  336. package/eigen/Eigen/src/SparseCore/SparseMatrix.h +1614 -1142
  337. package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +403 -357
  338. package/eigen/Eigen/src/SparseCore/SparsePermutation.h +186 -115
  339. package/eigen/Eigen/src/SparseCore/SparseProduct.h +100 -91
  340. package/eigen/Eigen/src/SparseCore/SparseRedux.h +22 -24
  341. package/eigen/Eigen/src/SparseCore/SparseRef.h +268 -295
  342. package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +371 -414
  343. package/eigen/Eigen/src/SparseCore/SparseSolverBase.h +78 -87
  344. package/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +81 -95
  345. package/eigen/Eigen/src/SparseCore/SparseTranspose.h +62 -71
  346. package/eigen/Eigen/src/SparseCore/SparseTriangularView.h +132 -144
  347. package/eigen/Eigen/src/SparseCore/SparseUtil.h +146 -115
  348. package/eigen/Eigen/src/SparseCore/SparseVector.h +426 -372
  349. package/eigen/Eigen/src/SparseCore/SparseView.h +164 -193
  350. package/eigen/Eigen/src/SparseCore/TriangularSolver.h +129 -170
  351. package/eigen/Eigen/src/SparseLU/InternalHeaderCheck.h +3 -0
  352. package/eigen/Eigen/src/SparseLU/SparseLU.h +814 -618
  353. package/eigen/Eigen/src/SparseLU/SparseLUImpl.h +61 -48
  354. package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +102 -118
  355. package/eigen/Eigen/src/SparseLU/SparseLU_Structs.h +38 -35
  356. package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +273 -255
  357. package/eigen/Eigen/src/SparseLU/SparseLU_Utils.h +44 -49
  358. package/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h +104 -108
  359. package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +90 -101
  360. package/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +57 -58
  361. package/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +43 -55
  362. package/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +74 -71
  363. package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +125 -133
  364. package/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h +136 -159
  365. package/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h +51 -52
  366. package/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h +67 -73
  367. package/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h +24 -26
  368. package/eigen/Eigen/src/SparseQR/InternalHeaderCheck.h +3 -0
  369. package/eigen/Eigen/src/SparseQR/SparseQR.h +451 -490
  370. package/eigen/Eigen/src/StlSupport/StdDeque.h +28 -105
  371. package/eigen/Eigen/src/StlSupport/StdList.h +28 -84
  372. package/eigen/Eigen/src/StlSupport/StdVector.h +28 -108
  373. package/eigen/Eigen/src/StlSupport/details.h +48 -50
  374. package/eigen/Eigen/src/SuperLUSupport/InternalHeaderCheck.h +3 -0
  375. package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +634 -732
  376. package/eigen/Eigen/src/ThreadPool/Barrier.h +70 -0
  377. package/eigen/Eigen/src/ThreadPool/CoreThreadPoolDevice.h +336 -0
  378. package/eigen/Eigen/src/ThreadPool/EventCount.h +241 -0
  379. package/eigen/Eigen/src/ThreadPool/ForkJoin.h +140 -0
  380. package/eigen/Eigen/src/ThreadPool/InternalHeaderCheck.h +4 -0
  381. package/eigen/Eigen/src/ThreadPool/NonBlockingThreadPool.h +587 -0
  382. package/eigen/Eigen/src/ThreadPool/RunQueue.h +230 -0
  383. package/eigen/Eigen/src/ThreadPool/ThreadCancel.h +21 -0
  384. package/eigen/Eigen/src/ThreadPool/ThreadEnvironment.h +43 -0
  385. package/eigen/Eigen/src/ThreadPool/ThreadLocal.h +289 -0
  386. package/eigen/Eigen/src/ThreadPool/ThreadPoolInterface.h +50 -0
  387. package/eigen/Eigen/src/ThreadPool/ThreadYield.h +16 -0
  388. package/eigen/Eigen/src/UmfPackSupport/InternalHeaderCheck.h +3 -0
  389. package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +480 -380
  390. package/eigen/Eigen/src/misc/Image.h +41 -43
  391. package/eigen/Eigen/src/misc/InternalHeaderCheck.h +3 -0
  392. package/eigen/Eigen/src/misc/Kernel.h +39 -41
  393. package/eigen/Eigen/src/misc/RealSvd2x2.h +19 -21
  394. package/eigen/Eigen/src/misc/blas.h +83 -426
  395. package/eigen/Eigen/src/misc/lapacke.h +9976 -16182
  396. package/eigen/Eigen/src/misc/lapacke_helpers.h +163 -0
  397. package/eigen/Eigen/src/misc/lapacke_mangling.h +4 -5
  398. package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.inc +344 -0
  399. package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.inc +544 -0
  400. package/eigen/Eigen/src/plugins/BlockMethods.inc +1370 -0
  401. package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
  402. package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.inc +167 -0
  403. package/eigen/Eigen/src/plugins/IndexedViewMethods.inc +192 -0
  404. package/eigen/Eigen/src/plugins/InternalHeaderCheck.inc +3 -0
  405. package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.inc +331 -0
  406. package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.inc +118 -0
  407. package/eigen/Eigen/src/plugins/ReshapedMethods.inc +133 -0
  408. package/lib/LibEigen.d.ts +4 -0
  409. package/lib/LibEigen.js +14 -0
  410. package/lib/index.d.ts +1 -1
  411. package/lib/index.js +7 -3
  412. package/package.json +2 -10
  413. package/eigen/Eigen/CMakeLists.txt +0 -19
  414. package/eigen/Eigen/src/Core/BooleanRedux.h +0 -164
  415. package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +0 -103
  416. package/eigen/Eigen/src/Core/arch/CUDA/Half.h +0 -675
  417. package/eigen/Eigen/src/Core/arch/CUDA/MathFunctions.h +0 -91
  418. package/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +0 -333
  419. package/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +0 -1124
  420. package/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +0 -212
  421. package/eigen/Eigen/src/Core/util/NonMPL2.h +0 -3
  422. package/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +0 -161
  423. package/eigen/Eigen/src/LU/arch/Inverse_SSE.h +0 -338
  424. package/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h +0 -67
  425. package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +0 -280
  426. package/eigen/Eigen/src/misc/lapack.h +0 -152
  427. package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +0 -332
  428. package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +0 -552
  429. package/eigen/Eigen/src/plugins/BlockMethods.h +0 -1058
  430. package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +0 -115
  431. package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +0 -163
  432. package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +0 -152
  433. package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +0 -85
  434. package/lib/eigen.d.ts +0 -2
  435. package/lib/eigen.js +0 -15
@@ -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
- namespace Eigen {
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
-
37
+ Index first, last;
38
+
38
39
  ncut--; /* to fit the zero-based indices */
39
- first = 0;
40
- last = n-1;
41
- if (ncut < first || ncut > last ) return 0;
42
-
40
+ first = 0;
41
+ last = n - 1;
42
+ if (ncut < first || ncut > last) return 0;
43
+
43
44
  do {
44
- mid = first;
45
- RealScalar abskey = abs(row(mid));
45
+ mid = first;
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));
@@ -53,221 +54,226 @@ Index QuickSplit(VectorV &row, VectorI &ind, Index ncut)
53
54
  /* Interchange for the pivot element */
54
55
  swap(row(mid), row(first));
55
56
  swap(ind(mid), ind(first));
56
-
57
- if (mid > ncut) last = mid - 1;
58
- else if (mid < ncut ) first = mid + 1;
59
- } while (mid != ncut );
60
-
61
- return 0; /* mid is equal to ncut */
57
+
58
+ if (mid > ncut)
59
+ last = mid - 1;
60
+ else if (mid < ncut)
61
+ first = mid + 1;
62
+ } while (mid != ncut);
63
+
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
- }
132
-
133
- Index rows() const { return m_lu.rows(); }
134
-
135
- Index cols() const { return m_lu.cols(); }
136
-
137
- /** \brief Reports whether previous computation was successful.
138
- *
139
- * \returns \c Success if computation was succesful,
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
- }
147
-
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
- }
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
+ }
166
131
 
167
- void setDroptol(const RealScalar& droptol);
168
- void setFillfactor(int fillfactor);
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
- }
132
+ /** \brief Extraction Method for L-Factor */
133
+ const FactorType matrixL() const;
178
134
 
179
- protected:
135
+ /** \brief Extraction Method for U-Factor */
136
+ const FactorType matrixU() const;
180
137
 
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
138
+ constexpr Index rows() const noexcept { return m_lu.rows(); }
139
+
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
+ }
151
+
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
+
170
+ void setDroptol(const RealScalar& droptol);
171
+ void setFillfactor(int fillfactor);
172
+
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
+
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
- * \param droptol Drop any element whose magnitude is less than this tolerance
204
- **/
205
- template<typename Scalar, typename StorageIndex>
206
- void IncompleteLUT<Scalar,StorageIndex>::setDroptol(const RealScalar& droptol)
207
- {
208
- this->m_droptol = droptol;
200
+ * \param droptol Drop any element whose magnitude is less than this tolerance
201
+ **/
202
+ template <typename Scalar, typename StorageIndex>
203
+ void IncompleteLUT<Scalar, StorageIndex>::setDroptol(const RealScalar& droptol) {
204
+ this->m_droptol = droptol;
209
205
  }
210
206
 
211
207
  /**
212
208
  * Set control parameter fillfactor
213
- * \param fillfactor This is used to compute the number @p fill_in of largest elements to keep on each row.
214
- **/
215
- template<typename Scalar, typename StorageIndex>
216
- void IncompleteLUT<Scalar,StorageIndex>::setFillfactor(int fillfactor)
217
- {
218
- this->m_fillfactor = fillfactor;
209
+ * \param fillfactor This is used to compute the number @p fill_in of largest elements to keep on each row.
210
+ **/
211
+ template <typename Scalar, typename StorageIndex>
212
+ void IncompleteLUT<Scalar, StorageIndex>::setFillfactor(int fillfactor) {
213
+ this->m_fillfactor = fillfactor;
214
+ }
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>();
219
236
  }
220
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
- #ifndef EIGEN_MPL2_ONLY
229
244
  // To this end, let's symmetrize the pattern and perform AMD on it.
230
- SparseMatrix<Scalar,ColMajor, StorageIndex> mat1 = amat;
231
- SparseMatrix<Scalar,ColMajor, StorageIndex> mat2 = amat.transpose();
245
+ SparseMatrix<Scalar, ColMajor, StorageIndex> mat1 = amat;
246
+ SparseMatrix<Scalar, ColMajor, StorageIndex> mat2 = amat.transpose();
232
247
  // FIXME for a matrix with nearly symmetric pattern, mat2+mat1 is the appropriate choice.
233
- // on the other hand for a really non-symmetric pattern, mat2*mat1 should be prefered...
234
- SparseMatrix<Scalar,ColMajor, StorageIndex> AtA = mat2 + mat1;
248
+ // on the other hand for a really non-symmetric pattern, mat2*mat1 should be preferred...
249
+ SparseMatrix<Scalar, ColMajor, StorageIndex> AtA = mat2 + mat1;
235
250
  AMDOrdering<StorageIndex> ordering;
236
- ordering(AtA,m_P);
237
- m_Pinv = m_P.inverse(); // cache the inverse permutation
238
- #else
239
- // If AMD is not available, (MPL2-only), then let's use the slower COLAMD routine.
240
- SparseMatrix<Scalar,ColMajor, StorageIndex> mat1 = amat;
241
- COLAMDOrdering<StorageIndex> ordering;
242
- ordering(mat1,m_Pinv);
243
- m_P = m_Pinv.inverse();
244
- #endif
245
-
251
+ ordering(AtA, m_P);
252
+ m_Pinv = m_P.inverse(); // cache the inverse permutation
246
253
  m_analysisIsOk = true;
247
254
  m_factorizationIsOk = false;
248
255
  m_isInitialized = true;
249
256
  }
250
257
 
251
258
  template <typename Scalar, typename StorageIndex>
252
- template<typename _MatrixType>
253
- void IncompleteLUT<Scalar,StorageIndex>::factorize(const _MatrixType& amat)
254
- {
259
+ template <typename MatrixType_>
260
+ void IncompleteLUT<Scalar, StorageIndex>::factorize(const MatrixType_& amat) {
261
+ using internal::convert_index;
262
+ using std::abs;
255
263
  using std::sqrt;
256
264
  using std::swap;
257
- using std::abs;
258
- using internal::convert_index;
259
265
 
260
266
  eigen_assert((amat.rows() == amat.cols()) && "The factorization should be done on a square matrix");
261
267
  Index n = amat.cols(); // Size of the matrix
262
- m_lu.resize(n,n);
268
+ m_lu.resize(n, n);
263
269
  // Declare Working vectors and variables
264
- Vector u(n) ; // real values of the row -- maximum size is n --
265
- VectorI ju(n); // column position of the values in u -- maximum size is n
266
- 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
267
273
 
268
274
  // Apply the fill-reducing permutation
269
275
  eigen_assert(m_analysisIsOk && "You must first call analyzePattern()");
270
- SparseMatrix<Scalar,RowMajor, StorageIndex> mat;
276
+ SparseMatrix<Scalar, RowMajor, StorageIndex> mat;
271
277
  mat = amat.twistedBy(m_Pinv);
272
278
 
273
279
  // Initialization
@@ -276,44 +282,37 @@ void IncompleteLUT<Scalar,StorageIndex>::factorize(const _MatrixType& amat)
276
282
  u.fill(0);
277
283
 
278
284
  // number of largest elements to keep in each row:
279
- Index fill_in = (amat.nonZeros()*m_fillfactor)/n + 1;
285
+ Index fill_in = (amat.nonZeros() * m_fillfactor) / n + 1;
280
286
  if (fill_in > n) fill_in = n;
281
287
 
282
288
  // number of largest nonzero elements to keep in the L and the U part of the current row:
283
- Index nnzL = fill_in/2;
289
+ Index nnzL = fill_in / 2;
284
290
  Index nnzU = nnzL;
285
291
  m_lu.reserve(n * (nnzL + nnzU + 1));
286
292
 
287
293
  // global loop over the rows of the sparse matrix
288
- for (Index ii = 0; ii < n; ii++)
289
- {
294
+ for (Index ii = 0; ii < n; ii++) {
290
295
  // 1 - copy the lower and the upper part of the row i of mat in the working vector u
291
296
 
292
- Index sizeu = 1; // number of nonzero elements in the upper part of the current row
293
- Index sizel = 0; // number of nonzero elements in the lower part of the current row
294
- ju(ii) = convert_index<StorageIndex>(ii);
295
- u(ii) = 0;
296
- 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);
297
302
  RealScalar rownorm = 0;
298
303
 
299
- typename FactorType::InnerIterator j_it(mat, ii); // Iterate through the current row ii
300
- for (; j_it; ++j_it)
301
- {
304
+ typename FactorType::InnerIterator j_it(mat, ii); // Iterate through the current row ii
305
+ for (; j_it; ++j_it) {
302
306
  Index k = j_it.index();
303
- if (k < ii)
304
- {
307
+ if (k < ii) {
305
308
  // copy the lower part
306
309
  ju(sizel) = convert_index<StorageIndex>(k);
307
310
  u(sizel) = j_it.value();
308
311
  jr(k) = convert_index<StorageIndex>(sizel);
309
312
  ++sizel;
310
- }
311
- else if (k == ii)
312
- {
313
+ } else if (k == ii) {
313
314
  u(ii) = j_it.value();
314
- }
315
- else
316
- {
315
+ } else {
317
316
  // copy the upper part
318
317
  Index jpos = ii + sizeu;
319
318
  ju(jpos) = convert_index<StorageIndex>(k);
@@ -325,8 +324,7 @@ void IncompleteLUT<Scalar,StorageIndex>::factorize(const _MatrixType& amat)
325
324
  }
326
325
 
327
326
  // 2 - detect possible zero row
328
- if(rownorm==0)
329
- {
327
+ if (rownorm == 0) {
330
328
  m_info = NumericalIssue;
331
329
  return;
332
330
  }
@@ -336,15 +334,13 @@ void IncompleteLUT<Scalar,StorageIndex>::factorize(const _MatrixType& amat)
336
334
  // 3 - eliminate the previous nonzero rows
337
335
  Index jj = 0;
338
336
  Index len = 0;
339
- while (jj < sizel)
340
- {
337
+ while (jj < sizel) {
341
338
  // In order to eliminate in the correct order,
342
339
  // we must select first the smallest column index among ju(jj:sizel)
343
340
  Index k;
344
- 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
345
342
  k += jj;
346
- if (minrow != ju(jj))
347
- {
343
+ if (minrow != ju(jj)) {
348
344
  // swap the two locations
349
345
  Index j = ju(jj);
350
346
  swap(ju(jj), ju(k));
@@ -358,55 +354,51 @@ void IncompleteLUT<Scalar,StorageIndex>::factorize(const _MatrixType& amat)
358
354
  // Start elimination
359
355
  typename FactorType::InnerIterator ki_it(m_lu, minrow);
360
356
  while (ki_it && ki_it.index() < minrow) ++ki_it;
361
- eigen_internal_assert(ki_it && ki_it.col()==minrow);
357
+ eigen_internal_assert(ki_it && ki_it.col() == minrow);
362
358
  Scalar fact = u(jj) / ki_it.value();
363
359
 
364
360
  // drop too small elements
365
- if(abs(fact) <= m_droptol)
366
- {
361
+ if (abs(fact) <= m_droptol) {
367
362
  jj++;
368
363
  continue;
369
364
  }
370
365
 
371
366
  // linear combination of the current row ii and the row minrow
372
367
  ++ki_it;
373
- for (; ki_it; ++ki_it)
374
- {
368
+ for (; ki_it; ++ki_it) {
375
369
  Scalar prod = fact * ki_it.value();
376
- Index j = ki_it.index();
377
- Index jpos = jr(j);
378
- if (jpos == -1) // fill-in element
370
+ Index j = ki_it.index();
371
+ Index jpos = jr(j);
372
+ if (jpos == -1) // fill-in element
379
373
  {
380
374
  Index newpos;
381
- if (j >= ii) // dealing with the upper part
375
+ if (j >= ii) // dealing with the upper part
382
376
  {
383
377
  newpos = ii + sizeu;
384
378
  sizeu++;
385
- eigen_internal_assert(sizeu<=n);
386
- }
387
- else // dealing with the lower part
379
+ eigen_internal_assert(sizeu <= n);
380
+ } else // dealing with the lower part
388
381
  {
389
382
  newpos = sizel;
390
383
  sizel++;
391
- eigen_internal_assert(sizel<=ii);
384
+ eigen_internal_assert(sizel <= ii);
392
385
  }
393
386
  ju(newpos) = convert_index<StorageIndex>(j);
394
387
  u(newpos) = -prod;
395
388
  jr(j) = convert_index<StorageIndex>(newpos);
396
- }
397
- else
389
+ } else
398
390
  u(jpos) -= prod;
399
391
  }
400
392
  // store the pivot element
401
- u(len) = fact;
393
+ u(len) = fact;
402
394
  ju(len) = convert_index<StorageIndex>(minrow);
403
395
  ++len;
404
396
 
405
397
  jj++;
406
- } // end of the elimination on the row ii
398
+ } // end of the elimination on the row ii
407
399
 
408
400
  // reset the upper part of the pointer jr to zero
409
- 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;
410
402
 
411
403
  // 4 - partially sort and insert the elements in the m_lu matrix
412
404
 
@@ -419,36 +411,31 @@ void IncompleteLUT<Scalar,StorageIndex>::factorize(const _MatrixType& amat)
419
411
 
420
412
  // store the largest m_fill elements of the L part
421
413
  m_lu.startVec(ii);
422
- for(Index k = 0; k < len; k++)
423
- m_lu.insertBackByOuterInnerUnordered(ii,ju(k)) = u(k);
414
+ for (Index k = 0; k < len; k++) m_lu.insertBackByOuterInnerUnordered(ii, ju(k)) = u(k);
424
415
 
425
416
  // store the diagonal element
426
417
  // apply a shifting rule to avoid zero pivots (we are doing an incomplete factorization)
427
- if (u(ii) == Scalar(0))
428
- u(ii) = sqrt(m_droptol) * rownorm;
418
+ if (u(ii) == Scalar(0)) u(ii) = sqrt(m_droptol) * rownorm;
429
419
  m_lu.insertBackByOuterInnerUnordered(ii, ii) = u(ii);
430
420
 
431
421
  // sort the U-part of the row
432
422
  // apply the dropping rule first
433
423
  len = 0;
434
- for(Index k = 1; k < sizeu; k++)
435
- {
436
- if(abs(u(ii+k)) > m_droptol * rownorm )
437
- {
424
+ for (Index k = 1; k < sizeu; k++) {
425
+ if (abs(u(ii + k)) > m_droptol * rownorm) {
438
426
  ++len;
439
- u(ii + len) = u(ii + k);
427
+ u(ii + len) = u(ii + k);
440
428
  ju(ii + len) = ju(ii + k);
441
429
  }
442
430
  }
443
- sizeu = len + 1; // +1 to take into account the diagonal element
431
+ sizeu = len + 1; // +1 to take into account the diagonal element
444
432
  len = (std::min)(sizeu, nnzU);
445
- typename Vector::SegmentReturnType uu(u.segment(ii+1, sizeu-1));
446
- 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));
447
435
  internal::QuickSplit(uu, juu, len);
448
436
 
449
437
  // store the largest elements of the U part
450
- for(Index k = ii + 1; k < ii + len; k++)
451
- 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);
452
439
  }
453
440
  m_lu.finalize();
454
441
  m_lu.makeCompressed();
@@ -457,6 +444,6 @@ void IncompleteLUT<Scalar,StorageIndex>::factorize(const _MatrixType& amat)
457
444
  m_info = Success;
458
445
  }
459
446
 
460
- } // end namespace Eigen
447
+ } // end namespace Eigen
461
448
 
462
- #endif // EIGEN_INCOMPLETE_LUT_H
449
+ #endif // EIGEN_INCOMPLETE_LUT_H