@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
@@ -20,623 +20,587 @@
20
20
  #endif
21
21
  #endif
22
22
 
23
+ // IWYU pragma: private
24
+ #include "./InternalHeaderCheck.h"
25
+
23
26
  namespace Eigen {
24
27
 
25
28
  /* TODO extract L, extract U, compute det, etc... */
26
29
 
27
30
  // generic double/complex<double> wrapper functions:
28
31
 
32
+ // Defaults
33
+ inline void umfpack_defaults(double control[UMFPACK_CONTROL], double, int) { umfpack_di_defaults(control); }
29
34
 
30
- // Defaults
31
- inline void umfpack_defaults(double control[UMFPACK_CONTROL], double, int)
32
- { umfpack_di_defaults(control); }
33
-
34
- inline void umfpack_defaults(double control[UMFPACK_CONTROL], std::complex<double>, int)
35
- { umfpack_zi_defaults(control); }
35
+ inline void umfpack_defaults(double control[UMFPACK_CONTROL], std::complex<double>, int) {
36
+ umfpack_zi_defaults(control);
37
+ }
36
38
 
37
- inline void umfpack_defaults(double control[UMFPACK_CONTROL], double, SuiteSparse_long)
38
- { umfpack_dl_defaults(control); }
39
+ inline void umfpack_defaults(double control[UMFPACK_CONTROL], double, SuiteSparse_long) {
40
+ umfpack_dl_defaults(control);
41
+ }
39
42
 
40
- inline void umfpack_defaults(double control[UMFPACK_CONTROL], std::complex<double>, SuiteSparse_long)
41
- { umfpack_zl_defaults(control); }
43
+ inline void umfpack_defaults(double control[UMFPACK_CONTROL], std::complex<double>, SuiteSparse_long) {
44
+ umfpack_zl_defaults(control);
45
+ }
42
46
 
43
47
  // Report info
44
- inline void umfpack_report_info(double control[UMFPACK_CONTROL], double info[UMFPACK_INFO], double, int)
45
- { umfpack_di_report_info(control, info);}
48
+ inline void umfpack_report_info(double control[UMFPACK_CONTROL], double info[UMFPACK_INFO], double, int) {
49
+ umfpack_di_report_info(control, info);
50
+ }
46
51
 
47
- inline void umfpack_report_info(double control[UMFPACK_CONTROL], double info[UMFPACK_INFO], std::complex<double>, int)
48
- { umfpack_zi_report_info(control, info);}
52
+ inline void umfpack_report_info(double control[UMFPACK_CONTROL], double info[UMFPACK_INFO], std::complex<double>, int) {
53
+ umfpack_zi_report_info(control, info);
54
+ }
49
55
 
50
- inline void umfpack_report_info(double control[UMFPACK_CONTROL], double info[UMFPACK_INFO], double, SuiteSparse_long)
51
- { umfpack_dl_report_info(control, info);}
56
+ inline void umfpack_report_info(double control[UMFPACK_CONTROL], double info[UMFPACK_INFO], double, SuiteSparse_long) {
57
+ umfpack_dl_report_info(control, info);
58
+ }
52
59
 
53
- inline void umfpack_report_info(double control[UMFPACK_CONTROL], double info[UMFPACK_INFO], std::complex<double>, SuiteSparse_long)
54
- { umfpack_zl_report_info(control, info);}
60
+ inline void umfpack_report_info(double control[UMFPACK_CONTROL], double info[UMFPACK_INFO], std::complex<double>,
61
+ SuiteSparse_long) {
62
+ umfpack_zl_report_info(control, info);
63
+ }
55
64
 
56
65
  // Report status
57
- inline void umfpack_report_status(double control[UMFPACK_CONTROL], int status, double, int)
58
- { umfpack_di_report_status(control, status);}
66
+ inline void umfpack_report_status(double control[UMFPACK_CONTROL], int status, double, int) {
67
+ umfpack_di_report_status(control, status);
68
+ }
59
69
 
60
- inline void umfpack_report_status(double control[UMFPACK_CONTROL], int status, std::complex<double>, int)
61
- { umfpack_zi_report_status(control, status);}
70
+ inline void umfpack_report_status(double control[UMFPACK_CONTROL], int status, std::complex<double>, int) {
71
+ umfpack_zi_report_status(control, status);
72
+ }
62
73
 
63
- inline void umfpack_report_status(double control[UMFPACK_CONTROL], int status, double, SuiteSparse_long)
64
- { umfpack_dl_report_status(control, status);}
74
+ inline void umfpack_report_status(double control[UMFPACK_CONTROL], int status, double, SuiteSparse_long) {
75
+ umfpack_dl_report_status(control, status);
76
+ }
65
77
 
66
- inline void umfpack_report_status(double control[UMFPACK_CONTROL], int status, std::complex<double>, SuiteSparse_long)
67
- { umfpack_zl_report_status(control, status);}
78
+ inline void umfpack_report_status(double control[UMFPACK_CONTROL], int status, std::complex<double>, SuiteSparse_long) {
79
+ umfpack_zl_report_status(control, status);
80
+ }
68
81
 
69
82
  // report control
70
- inline void umfpack_report_control(double control[UMFPACK_CONTROL], double, int)
71
- { umfpack_di_report_control(control);}
83
+ inline void umfpack_report_control(double control[UMFPACK_CONTROL], double, int) { umfpack_di_report_control(control); }
72
84
 
73
- inline void umfpack_report_control(double control[UMFPACK_CONTROL], std::complex<double>, int)
74
- { umfpack_zi_report_control(control);}
85
+ inline void umfpack_report_control(double control[UMFPACK_CONTROL], std::complex<double>, int) {
86
+ umfpack_zi_report_control(control);
87
+ }
75
88
 
76
- inline void umfpack_report_control(double control[UMFPACK_CONTROL], double, SuiteSparse_long)
77
- { umfpack_dl_report_control(control);}
89
+ inline void umfpack_report_control(double control[UMFPACK_CONTROL], double, SuiteSparse_long) {
90
+ umfpack_dl_report_control(control);
91
+ }
78
92
 
79
- inline void umfpack_report_control(double control[UMFPACK_CONTROL], std::complex<double>, SuiteSparse_long)
80
- { umfpack_zl_report_control(control);}
93
+ inline void umfpack_report_control(double control[UMFPACK_CONTROL], std::complex<double>, SuiteSparse_long) {
94
+ umfpack_zl_report_control(control);
95
+ }
81
96
 
82
97
  // Free numeric
83
- inline void umfpack_free_numeric(void **Numeric, double, int)
84
- { umfpack_di_free_numeric(Numeric); *Numeric = 0; }
98
+ inline void umfpack_free_numeric(void **Numeric, double, int) {
99
+ umfpack_di_free_numeric(Numeric);
100
+ *Numeric = 0;
101
+ }
85
102
 
86
- inline void umfpack_free_numeric(void **Numeric, std::complex<double>, int)
87
- { umfpack_zi_free_numeric(Numeric); *Numeric = 0; }
103
+ inline void umfpack_free_numeric(void **Numeric, std::complex<double>, int) {
104
+ umfpack_zi_free_numeric(Numeric);
105
+ *Numeric = 0;
106
+ }
88
107
 
89
- inline void umfpack_free_numeric(void **Numeric, double, SuiteSparse_long)
90
- { umfpack_dl_free_numeric(Numeric); *Numeric = 0; }
108
+ inline void umfpack_free_numeric(void **Numeric, double, SuiteSparse_long) {
109
+ umfpack_dl_free_numeric(Numeric);
110
+ *Numeric = 0;
111
+ }
91
112
 
92
- inline void umfpack_free_numeric(void **Numeric, std::complex<double>, SuiteSparse_long)
93
- { umfpack_zl_free_numeric(Numeric); *Numeric = 0; }
113
+ inline void umfpack_free_numeric(void **Numeric, std::complex<double>, SuiteSparse_long) {
114
+ umfpack_zl_free_numeric(Numeric);
115
+ *Numeric = 0;
116
+ }
94
117
 
95
118
  // Free symbolic
96
- inline void umfpack_free_symbolic(void **Symbolic, double, int)
97
- { umfpack_di_free_symbolic(Symbolic); *Symbolic = 0; }
119
+ inline void umfpack_free_symbolic(void **Symbolic, double, int) {
120
+ umfpack_di_free_symbolic(Symbolic);
121
+ *Symbolic = 0;
122
+ }
98
123
 
99
- inline void umfpack_free_symbolic(void **Symbolic, std::complex<double>, int)
100
- { umfpack_zi_free_symbolic(Symbolic); *Symbolic = 0; }
124
+ inline void umfpack_free_symbolic(void **Symbolic, std::complex<double>, int) {
125
+ umfpack_zi_free_symbolic(Symbolic);
126
+ *Symbolic = 0;
127
+ }
101
128
 
102
- inline void umfpack_free_symbolic(void **Symbolic, double, SuiteSparse_long)
103
- { umfpack_dl_free_symbolic(Symbolic); *Symbolic = 0; }
129
+ inline void umfpack_free_symbolic(void **Symbolic, double, SuiteSparse_long) {
130
+ umfpack_dl_free_symbolic(Symbolic);
131
+ *Symbolic = 0;
132
+ }
104
133
 
105
- inline void umfpack_free_symbolic(void **Symbolic, std::complex<double>, SuiteSparse_long)
106
- { umfpack_zl_free_symbolic(Symbolic); *Symbolic = 0; }
134
+ inline void umfpack_free_symbolic(void **Symbolic, std::complex<double>, SuiteSparse_long) {
135
+ umfpack_zl_free_symbolic(Symbolic);
136
+ *Symbolic = 0;
137
+ }
107
138
 
108
139
  // Symbolic
109
- inline int umfpack_symbolic(int n_row,int n_col,
110
- const int Ap[], const int Ai[], const double Ax[], void **Symbolic,
111
- const double Control [UMFPACK_CONTROL], double Info [UMFPACK_INFO])
112
- {
113
- return umfpack_di_symbolic(n_row,n_col,Ap,Ai,Ax,Symbolic,Control,Info);
140
+ inline int umfpack_symbolic(int n_row, int n_col, const int Ap[], const int Ai[], const double Ax[], void **Symbolic,
141
+ const double Control[UMFPACK_CONTROL], double Info[UMFPACK_INFO]) {
142
+ return umfpack_di_symbolic(n_row, n_col, Ap, Ai, Ax, Symbolic, Control, Info);
114
143
  }
115
144
 
116
- inline int umfpack_symbolic(int n_row,int n_col,
117
- const int Ap[], const int Ai[], const std::complex<double> Ax[], void **Symbolic,
118
- const double Control [UMFPACK_CONTROL], double Info [UMFPACK_INFO])
119
- {
120
- return umfpack_zi_symbolic(n_row,n_col,Ap,Ai,&numext::real_ref(Ax[0]),0,Symbolic,Control,Info);
145
+ inline int umfpack_symbolic(int n_row, int n_col, const int Ap[], const int Ai[], const std::complex<double> Ax[],
146
+ void **Symbolic, const double Control[UMFPACK_CONTROL], double Info[UMFPACK_INFO]) {
147
+ return umfpack_zi_symbolic(n_row, n_col, Ap, Ai, &numext::real_ref(Ax[0]), 0, Symbolic, Control, Info);
121
148
  }
122
- inline SuiteSparse_long umfpack_symbolic( SuiteSparse_long n_row,SuiteSparse_long n_col,
123
- const SuiteSparse_long Ap[], const SuiteSparse_long Ai[], const double Ax[], void **Symbolic,
124
- const double Control [UMFPACK_CONTROL], double Info [UMFPACK_INFO])
125
- {
126
- return umfpack_dl_symbolic(n_row,n_col,Ap,Ai,Ax,Symbolic,Control,Info);
149
+ inline SuiteSparse_long umfpack_symbolic(SuiteSparse_long n_row, SuiteSparse_long n_col, const SuiteSparse_long Ap[],
150
+ const SuiteSparse_long Ai[], const double Ax[], void **Symbolic,
151
+ const double Control[UMFPACK_CONTROL], double Info[UMFPACK_INFO]) {
152
+ return umfpack_dl_symbolic(n_row, n_col, Ap, Ai, Ax, Symbolic, Control, Info);
127
153
  }
128
154
 
129
- inline SuiteSparse_long umfpack_symbolic( SuiteSparse_long n_row,SuiteSparse_long n_col,
130
- const SuiteSparse_long Ap[], const SuiteSparse_long Ai[], const std::complex<double> Ax[], void **Symbolic,
131
- const double Control [UMFPACK_CONTROL], double Info [UMFPACK_INFO])
132
- {
133
- return umfpack_zl_symbolic(n_row,n_col,Ap,Ai,&numext::real_ref(Ax[0]),0,Symbolic,Control,Info);
155
+ inline SuiteSparse_long umfpack_symbolic(SuiteSparse_long n_row, SuiteSparse_long n_col, const SuiteSparse_long Ap[],
156
+ const SuiteSparse_long Ai[], const std::complex<double> Ax[], void **Symbolic,
157
+ const double Control[UMFPACK_CONTROL], double Info[UMFPACK_INFO]) {
158
+ return umfpack_zl_symbolic(n_row, n_col, Ap, Ai, &numext::real_ref(Ax[0]), 0, Symbolic, Control, Info);
134
159
  }
135
160
 
136
161
  // Numeric
137
- inline int umfpack_numeric( const int Ap[], const int Ai[], const double Ax[],
138
- void *Symbolic, void **Numeric,
139
- const double Control[UMFPACK_CONTROL],double Info [UMFPACK_INFO])
140
- {
141
- return umfpack_di_numeric(Ap,Ai,Ax,Symbolic,Numeric,Control,Info);
162
+ inline int umfpack_numeric(const int Ap[], const int Ai[], const double Ax[], void *Symbolic, void **Numeric,
163
+ const double Control[UMFPACK_CONTROL], double Info[UMFPACK_INFO]) {
164
+ return umfpack_di_numeric(Ap, Ai, Ax, Symbolic, Numeric, Control, Info);
142
165
  }
143
166
 
144
- inline int umfpack_numeric( const int Ap[], const int Ai[], const std::complex<double> Ax[],
145
- void *Symbolic, void **Numeric,
146
- const double Control[UMFPACK_CONTROL],double Info [UMFPACK_INFO])
147
- {
148
- return umfpack_zi_numeric(Ap,Ai,&numext::real_ref(Ax[0]),0,Symbolic,Numeric,Control,Info);
167
+ inline int umfpack_numeric(const int Ap[], const int Ai[], const std::complex<double> Ax[], void *Symbolic,
168
+ void **Numeric, const double Control[UMFPACK_CONTROL], double Info[UMFPACK_INFO]) {
169
+ return umfpack_zi_numeric(Ap, Ai, &numext::real_ref(Ax[0]), 0, Symbolic, Numeric, Control, Info);
149
170
  }
150
171
  inline SuiteSparse_long umfpack_numeric(const SuiteSparse_long Ap[], const SuiteSparse_long Ai[], const double Ax[],
151
- void *Symbolic, void **Numeric,
152
- const double Control[UMFPACK_CONTROL],double Info [UMFPACK_INFO])
153
- {
154
- return umfpack_dl_numeric(Ap,Ai,Ax,Symbolic,Numeric,Control,Info);
172
+ void *Symbolic, void **Numeric, const double Control[UMFPACK_CONTROL],
173
+ double Info[UMFPACK_INFO]) {
174
+ return umfpack_dl_numeric(Ap, Ai, Ax, Symbolic, Numeric, Control, Info);
155
175
  }
156
176
 
157
- inline SuiteSparse_long umfpack_numeric(const SuiteSparse_long Ap[], const SuiteSparse_long Ai[], const std::complex<double> Ax[],
158
- void *Symbolic, void **Numeric,
159
- const double Control[UMFPACK_CONTROL],double Info [UMFPACK_INFO])
160
- {
161
- return umfpack_zl_numeric(Ap,Ai,&numext::real_ref(Ax[0]),0,Symbolic,Numeric,Control,Info);
177
+ inline SuiteSparse_long umfpack_numeric(const SuiteSparse_long Ap[], const SuiteSparse_long Ai[],
178
+ const std::complex<double> Ax[], void *Symbolic, void **Numeric,
179
+ const double Control[UMFPACK_CONTROL], double Info[UMFPACK_INFO]) {
180
+ return umfpack_zl_numeric(Ap, Ai, &numext::real_ref(Ax[0]), 0, Symbolic, Numeric, Control, Info);
162
181
  }
163
182
 
164
183
  // solve
165
- inline int umfpack_solve( int sys, const int Ap[], const int Ai[], const double Ax[],
166
- double X[], const double B[], void *Numeric,
167
- const double Control[UMFPACK_CONTROL], double Info[UMFPACK_INFO])
168
- {
169
- return umfpack_di_solve(sys,Ap,Ai,Ax,X,B,Numeric,Control,Info);
184
+ inline int umfpack_solve(int sys, const int Ap[], const int Ai[], const double Ax[], double X[], const double B[],
185
+ void *Numeric, const double Control[UMFPACK_CONTROL], double Info[UMFPACK_INFO]) {
186
+ return umfpack_di_solve(sys, Ap, Ai, Ax, X, B, Numeric, Control, Info);
170
187
  }
171
188
 
172
- inline int umfpack_solve( int sys, const int Ap[], const int Ai[], const std::complex<double> Ax[],
173
- std::complex<double> X[], const std::complex<double> B[], void *Numeric,
174
- const double Control[UMFPACK_CONTROL], double Info[UMFPACK_INFO])
175
- {
176
- return umfpack_zi_solve(sys,Ap,Ai,&numext::real_ref(Ax[0]),0,&numext::real_ref(X[0]),0,&numext::real_ref(B[0]),0,Numeric,Control,Info);
189
+ inline int umfpack_solve(int sys, const int Ap[], const int Ai[], const std::complex<double> Ax[],
190
+ std::complex<double> X[], const std::complex<double> B[], void *Numeric,
191
+ const double Control[UMFPACK_CONTROL], double Info[UMFPACK_INFO]) {
192
+ return umfpack_zi_solve(sys, Ap, Ai, &numext::real_ref(Ax[0]), 0, &numext::real_ref(X[0]), 0, &numext::real_ref(B[0]),
193
+ 0, Numeric, Control, Info);
177
194
  }
178
195
 
179
- inline SuiteSparse_long umfpack_solve(int sys, const SuiteSparse_long Ap[], const SuiteSparse_long Ai[], const double Ax[],
180
- double X[], const double B[], void *Numeric,
181
- const double Control[UMFPACK_CONTROL], double Info[UMFPACK_INFO])
182
- {
183
- return umfpack_dl_solve(sys,Ap,Ai,Ax,X,B,Numeric,Control,Info);
196
+ inline SuiteSparse_long umfpack_solve(int sys, const SuiteSparse_long Ap[], const SuiteSparse_long Ai[],
197
+ const double Ax[], double X[], const double B[], void *Numeric,
198
+ const double Control[UMFPACK_CONTROL], double Info[UMFPACK_INFO]) {
199
+ return umfpack_dl_solve(sys, Ap, Ai, Ax, X, B, Numeric, Control, Info);
184
200
  }
185
201
 
186
- inline SuiteSparse_long umfpack_solve(int sys, const SuiteSparse_long Ap[], const SuiteSparse_long Ai[], const std::complex<double> Ax[],
187
- std::complex<double> X[], const std::complex<double> B[], void *Numeric,
188
- const double Control[UMFPACK_CONTROL], double Info[UMFPACK_INFO])
189
- {
190
- return umfpack_zl_solve(sys,Ap,Ai,&numext::real_ref(Ax[0]),0,&numext::real_ref(X[0]),0,&numext::real_ref(B[0]),0,Numeric,Control,Info);
202
+ inline SuiteSparse_long umfpack_solve(int sys, const SuiteSparse_long Ap[], const SuiteSparse_long Ai[],
203
+ const std::complex<double> Ax[], std::complex<double> X[],
204
+ const std::complex<double> B[], void *Numeric,
205
+ const double Control[UMFPACK_CONTROL], double Info[UMFPACK_INFO]) {
206
+ return umfpack_zl_solve(sys, Ap, Ai, &numext::real_ref(Ax[0]), 0, &numext::real_ref(X[0]), 0, &numext::real_ref(B[0]),
207
+ 0, Numeric, Control, Info);
191
208
  }
192
209
 
193
210
  // Get Lunz
194
- inline int umfpack_get_lunz(int *lnz, int *unz, int *n_row, int *n_col, int *nz_udiag, void *Numeric, double)
195
- {
196
- return umfpack_di_get_lunz(lnz,unz,n_row,n_col,nz_udiag,Numeric);
211
+ inline int umfpack_get_lunz(int *lnz, int *unz, int *n_row, int *n_col, int *nz_udiag, void *Numeric, double) {
212
+ return umfpack_di_get_lunz(lnz, unz, n_row, n_col, nz_udiag, Numeric);
197
213
  }
198
214
 
199
- inline int umfpack_get_lunz(int *lnz, int *unz, int *n_row, int *n_col, int *nz_udiag, void *Numeric, std::complex<double>)
200
- {
201
- return umfpack_zi_get_lunz(lnz,unz,n_row,n_col,nz_udiag,Numeric);
215
+ inline int umfpack_get_lunz(int *lnz, int *unz, int *n_row, int *n_col, int *nz_udiag, void *Numeric,
216
+ std::complex<double>) {
217
+ return umfpack_zi_get_lunz(lnz, unz, n_row, n_col, nz_udiag, Numeric);
202
218
  }
203
219
 
204
- inline SuiteSparse_long umfpack_get_lunz( SuiteSparse_long *lnz, SuiteSparse_long *unz, SuiteSparse_long *n_row, SuiteSparse_long *n_col,
205
- SuiteSparse_long *nz_udiag, void *Numeric, double)
206
- {
207
- return umfpack_dl_get_lunz(lnz,unz,n_row,n_col,nz_udiag,Numeric);
220
+ inline SuiteSparse_long umfpack_get_lunz(SuiteSparse_long *lnz, SuiteSparse_long *unz, SuiteSparse_long *n_row,
221
+ SuiteSparse_long *n_col, SuiteSparse_long *nz_udiag, void *Numeric, double) {
222
+ return umfpack_dl_get_lunz(lnz, unz, n_row, n_col, nz_udiag, Numeric);
208
223
  }
209
224
 
210
- inline SuiteSparse_long umfpack_get_lunz( SuiteSparse_long *lnz, SuiteSparse_long *unz, SuiteSparse_long *n_row, SuiteSparse_long *n_col,
211
- SuiteSparse_long *nz_udiag, void *Numeric, std::complex<double>)
212
- {
213
- return umfpack_zl_get_lunz(lnz,unz,n_row,n_col,nz_udiag,Numeric);
225
+ inline SuiteSparse_long umfpack_get_lunz(SuiteSparse_long *lnz, SuiteSparse_long *unz, SuiteSparse_long *n_row,
226
+ SuiteSparse_long *n_col, SuiteSparse_long *nz_udiag, void *Numeric,
227
+ std::complex<double>) {
228
+ return umfpack_zl_get_lunz(lnz, unz, n_row, n_col, nz_udiag, Numeric);
214
229
  }
215
230
 
216
231
  // Get Numeric
217
- inline int umfpack_get_numeric(int Lp[], int Lj[], double Lx[], int Up[], int Ui[], double Ux[],
218
- int P[], int Q[], double Dx[], int *do_recip, double Rs[], void *Numeric)
219
- {
220
- return umfpack_di_get_numeric(Lp,Lj,Lx,Up,Ui,Ux,P,Q,Dx,do_recip,Rs,Numeric);
232
+ inline int umfpack_get_numeric(int Lp[], int Lj[], double Lx[], int Up[], int Ui[], double Ux[], int P[], int Q[],
233
+ double Dx[], int *do_recip, double Rs[], void *Numeric) {
234
+ return umfpack_di_get_numeric(Lp, Lj, Lx, Up, Ui, Ux, P, Q, Dx, do_recip, Rs, Numeric);
221
235
  }
222
236
 
223
- inline int umfpack_get_numeric(int Lp[], int Lj[], std::complex<double> Lx[], int Up[], int Ui[], std::complex<double> Ux[],
224
- int P[], int Q[], std::complex<double> Dx[], int *do_recip, double Rs[], void *Numeric)
225
- {
226
- double& lx0_real = numext::real_ref(Lx[0]);
227
- double& ux0_real = numext::real_ref(Ux[0]);
228
- double& dx0_real = numext::real_ref(Dx[0]);
229
- return umfpack_zi_get_numeric(Lp,Lj,Lx?&lx0_real:0,0,Up,Ui,Ux?&ux0_real:0,0,P,Q,
230
- Dx?&dx0_real:0,0,do_recip,Rs,Numeric);
237
+ inline int umfpack_get_numeric(int Lp[], int Lj[], std::complex<double> Lx[], int Up[], int Ui[],
238
+ std::complex<double> Ux[], int P[], int Q[], std::complex<double> Dx[], int *do_recip,
239
+ double Rs[], void *Numeric) {
240
+ double &lx0_real = numext::real_ref(Lx[0]);
241
+ double &ux0_real = numext::real_ref(Ux[0]);
242
+ double &dx0_real = numext::real_ref(Dx[0]);
243
+ return umfpack_zi_get_numeric(Lp, Lj, Lx ? &lx0_real : 0, 0, Up, Ui, Ux ? &ux0_real : 0, 0, P, Q, Dx ? &dx0_real : 0,
244
+ 0, do_recip, Rs, Numeric);
231
245
  }
232
- inline SuiteSparse_long umfpack_get_numeric(SuiteSparse_long Lp[], SuiteSparse_long Lj[], double Lx[], SuiteSparse_long Up[], SuiteSparse_long Ui[], double Ux[],
233
- SuiteSparse_long P[], SuiteSparse_long Q[], double Dx[], SuiteSparse_long *do_recip, double Rs[], void *Numeric)
234
- {
235
- return umfpack_dl_get_numeric(Lp,Lj,Lx,Up,Ui,Ux,P,Q,Dx,do_recip,Rs,Numeric);
246
+ inline SuiteSparse_long umfpack_get_numeric(SuiteSparse_long Lp[], SuiteSparse_long Lj[], double Lx[],
247
+ SuiteSparse_long Up[], SuiteSparse_long Ui[], double Ux[],
248
+ SuiteSparse_long P[], SuiteSparse_long Q[], double Dx[],
249
+ SuiteSparse_long *do_recip, double Rs[], void *Numeric) {
250
+ return umfpack_dl_get_numeric(Lp, Lj, Lx, Up, Ui, Ux, P, Q, Dx, do_recip, Rs, Numeric);
236
251
  }
237
252
 
238
- inline SuiteSparse_long umfpack_get_numeric(SuiteSparse_long Lp[], SuiteSparse_long Lj[], std::complex<double> Lx[], SuiteSparse_long Up[], SuiteSparse_long Ui[], std::complex<double> Ux[],
239
- SuiteSparse_long P[], SuiteSparse_long Q[], std::complex<double> Dx[], SuiteSparse_long *do_recip, double Rs[], void *Numeric)
240
- {
241
- double& lx0_real = numext::real_ref(Lx[0]);
242
- double& ux0_real = numext::real_ref(Ux[0]);
243
- double& dx0_real = numext::real_ref(Dx[0]);
244
- return umfpack_zl_get_numeric(Lp,Lj,Lx?&lx0_real:0,0,Up,Ui,Ux?&ux0_real:0,0,P,Q,
245
- Dx?&dx0_real:0,0,do_recip,Rs,Numeric);
253
+ inline SuiteSparse_long umfpack_get_numeric(SuiteSparse_long Lp[], SuiteSparse_long Lj[], std::complex<double> Lx[],
254
+ SuiteSparse_long Up[], SuiteSparse_long Ui[], std::complex<double> Ux[],
255
+ SuiteSparse_long P[], SuiteSparse_long Q[], std::complex<double> Dx[],
256
+ SuiteSparse_long *do_recip, double Rs[], void *Numeric) {
257
+ double &lx0_real = numext::real_ref(Lx[0]);
258
+ double &ux0_real = numext::real_ref(Ux[0]);
259
+ double &dx0_real = numext::real_ref(Dx[0]);
260
+ return umfpack_zl_get_numeric(Lp, Lj, Lx ? &lx0_real : 0, 0, Up, Ui, Ux ? &ux0_real : 0, 0, P, Q, Dx ? &dx0_real : 0,
261
+ 0, do_recip, Rs, Numeric);
246
262
  }
247
263
 
248
264
  // Get Determinant
249
- inline int umfpack_get_determinant(double *Mx, double *Ex, void *NumericHandle, double User_Info [UMFPACK_INFO], int)
250
- {
251
- return umfpack_di_get_determinant(Mx,Ex,NumericHandle,User_Info);
265
+ inline int umfpack_get_determinant(double *Mx, double *Ex, void *NumericHandle, double User_Info[UMFPACK_INFO], int) {
266
+ return umfpack_di_get_determinant(Mx, Ex, NumericHandle, User_Info);
252
267
  }
253
268
 
254
- inline int umfpack_get_determinant(std::complex<double> *Mx, double *Ex, void *NumericHandle, double User_Info [UMFPACK_INFO], int)
255
- {
256
- double& mx_real = numext::real_ref(*Mx);
257
- return umfpack_zi_get_determinant(&mx_real,0,Ex,NumericHandle,User_Info);
269
+ inline int umfpack_get_determinant(std::complex<double> *Mx, double *Ex, void *NumericHandle,
270
+ double User_Info[UMFPACK_INFO], int) {
271
+ double &mx_real = numext::real_ref(*Mx);
272
+ return umfpack_zi_get_determinant(&mx_real, 0, Ex, NumericHandle, User_Info);
258
273
  }
259
274
 
260
- inline SuiteSparse_long umfpack_get_determinant(double *Mx, double *Ex, void *NumericHandle, double User_Info [UMFPACK_INFO], SuiteSparse_long)
261
- {
262
- return umfpack_dl_get_determinant(Mx,Ex,NumericHandle,User_Info);
275
+ inline SuiteSparse_long umfpack_get_determinant(double *Mx, double *Ex, void *NumericHandle,
276
+ double User_Info[UMFPACK_INFO], SuiteSparse_long) {
277
+ return umfpack_dl_get_determinant(Mx, Ex, NumericHandle, User_Info);
263
278
  }
264
279
 
265
- inline SuiteSparse_long umfpack_get_determinant(std::complex<double> *Mx, double *Ex, void *NumericHandle, double User_Info [UMFPACK_INFO], SuiteSparse_long)
266
- {
267
- double& mx_real = numext::real_ref(*Mx);
268
- return umfpack_zl_get_determinant(&mx_real,0,Ex,NumericHandle,User_Info);
280
+ inline SuiteSparse_long umfpack_get_determinant(std::complex<double> *Mx, double *Ex, void *NumericHandle,
281
+ double User_Info[UMFPACK_INFO], SuiteSparse_long) {
282
+ double &mx_real = numext::real_ref(*Mx);
283
+ return umfpack_zl_get_determinant(&mx_real, 0, Ex, NumericHandle, User_Info);
269
284
  }
270
285
 
271
-
272
286
  /** \ingroup UmfPackSupport_Module
273
- * \brief A sparse LU factorization and solver based on UmfPack
274
- *
275
- * This class allows to solve for A.X = B sparse linear problems via a LU factorization
276
- * using the UmfPack library. The sparse matrix A must be squared and full rank.
277
- * The vectors or matrices X and B can be either dense or sparse.
278
- *
279
- * \warning The input matrix A should be in a \b compressed and \b column-major form.
280
- * Otherwise an expensive copy will be made. You can call the inexpensive makeCompressed() to get a compressed matrix.
281
- * \tparam _MatrixType the type of the sparse matrix A, it must be a SparseMatrix<>
282
- *
283
- * \implsparsesolverconcept
284
- *
285
- * \sa \ref TutorialSparseSolverConcept, class SparseLU
286
- */
287
- template<typename _MatrixType>
288
- class UmfPackLU : public SparseSolverBase<UmfPackLU<_MatrixType> >
289
- {
290
- protected:
291
- typedef SparseSolverBase<UmfPackLU<_MatrixType> > Base;
292
- using Base::m_isInitialized;
293
- public:
294
- using Base::_solve_impl;
295
- typedef _MatrixType MatrixType;
296
- typedef typename MatrixType::Scalar Scalar;
297
- typedef typename MatrixType::RealScalar RealScalar;
298
- typedef typename MatrixType::StorageIndex StorageIndex;
299
- typedef Matrix<Scalar,Dynamic,1> Vector;
300
- typedef Matrix<int, 1, MatrixType::ColsAtCompileTime> IntRowVectorType;
301
- typedef Matrix<int, MatrixType::RowsAtCompileTime, 1> IntColVectorType;
302
- typedef SparseMatrix<Scalar> LUMatrixType;
303
- typedef SparseMatrix<Scalar,ColMajor,StorageIndex> UmfpackMatrixType;
304
- typedef Ref<const UmfpackMatrixType, StandardCompressedFormat> UmfpackMatrixRef;
305
- enum {
306
- ColsAtCompileTime = MatrixType::ColsAtCompileTime,
307
- MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime
308
- };
309
-
310
- public:
311
-
312
- typedef Array<double, UMFPACK_CONTROL, 1> UmfpackControl;
313
- typedef Array<double, UMFPACK_INFO, 1> UmfpackInfo;
314
-
315
- UmfPackLU()
316
- : m_dummy(0,0), mp_matrix(m_dummy)
317
- {
318
- init();
319
- }
320
-
321
- template<typename InputMatrixType>
322
- explicit UmfPackLU(const InputMatrixType& matrix)
323
- : mp_matrix(matrix)
324
- {
325
- init();
326
- compute(matrix);
327
- }
328
-
329
- ~UmfPackLU()
330
- {
331
- if(m_symbolic) umfpack_free_symbolic(&m_symbolic,Scalar(), StorageIndex());
332
- if(m_numeric) umfpack_free_numeric(&m_numeric,Scalar(), StorageIndex());
333
- }
334
-
335
- inline Index rows() const { return mp_matrix.rows(); }
336
- inline Index cols() const { return mp_matrix.cols(); }
337
-
338
- /** \brief Reports whether previous computation was successful.
339
- *
340
- * \returns \c Success if computation was successful,
341
- * \c NumericalIssue if the matrix.appears to be negative.
342
- */
343
- ComputationInfo info() const
344
- {
345
- eigen_assert(m_isInitialized && "Decomposition is not initialized.");
346
- return m_info;
347
- }
348
-
349
- inline const LUMatrixType& matrixL() const
350
- {
351
- if (m_extractedDataAreDirty) extractData();
352
- return m_l;
353
- }
287
+ * \brief A sparse LU factorization and solver based on UmfPack
288
+ *
289
+ * This class allows to solve for A.X = B sparse linear problems via a LU factorization
290
+ * using the UmfPack library. The sparse matrix A must be squared and full rank.
291
+ * The vectors or matrices X and B can be either dense or sparse.
292
+ *
293
+ * \warning The input matrix A should be in a \b compressed and \b column-major form.
294
+ * Otherwise an expensive copy will be made. You can call the inexpensive makeCompressed() to get a compressed matrix.
295
+ * \tparam MatrixType_ the type of the sparse matrix A, it must be a SparseMatrix<>
296
+ *
297
+ * \implsparsesolverconcept
298
+ *
299
+ * \sa \ref TutorialSparseSolverConcept, class SparseLU
300
+ */
301
+ template <typename MatrixType_>
302
+ class UmfPackLU : public SparseSolverBase<UmfPackLU<MatrixType_> > {
303
+ protected:
304
+ typedef SparseSolverBase<UmfPackLU<MatrixType_> > Base;
305
+ using Base::m_isInitialized;
306
+
307
+ public:
308
+ using Base::_solve_impl;
309
+ typedef MatrixType_ MatrixType;
310
+ typedef typename MatrixType::Scalar Scalar;
311
+ typedef typename MatrixType::RealScalar RealScalar;
312
+ typedef typename MatrixType::StorageIndex StorageIndex;
313
+ typedef Matrix<Scalar, Dynamic, 1> Vector;
314
+ typedef Matrix<int, 1, MatrixType::ColsAtCompileTime> IntRowVectorType;
315
+ typedef Matrix<int, MatrixType::RowsAtCompileTime, 1> IntColVectorType;
316
+ typedef SparseMatrix<Scalar> LUMatrixType;
317
+ typedef SparseMatrix<Scalar, ColMajor, StorageIndex> UmfpackMatrixType;
318
+ typedef Ref<const UmfpackMatrixType, StandardCompressedFormat> UmfpackMatrixRef;
319
+ enum { ColsAtCompileTime = MatrixType::ColsAtCompileTime, MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime };
320
+
321
+ public:
322
+ typedef Array<double, UMFPACK_CONTROL, 1> UmfpackControl;
323
+ typedef Array<double, UMFPACK_INFO, 1> UmfpackInfo;
324
+
325
+ UmfPackLU() : m_dummy(0, 0), mp_matrix(m_dummy) { init(); }
326
+
327
+ template <typename InputMatrixType>
328
+ explicit UmfPackLU(const InputMatrixType &matrix) : mp_matrix(matrix) {
329
+ init();
330
+ compute(matrix);
331
+ }
354
332
 
355
- inline const LUMatrixType& matrixU() const
356
- {
357
- if (m_extractedDataAreDirty) extractData();
358
- return m_u;
359
- }
333
+ ~UmfPackLU() {
334
+ if (m_symbolic) umfpack_free_symbolic(&m_symbolic, Scalar(), StorageIndex());
335
+ if (m_numeric) umfpack_free_numeric(&m_numeric, Scalar(), StorageIndex());
336
+ }
360
337
 
361
- inline const IntColVectorType& permutationP() const
362
- {
363
- if (m_extractedDataAreDirty) extractData();
364
- return m_p;
365
- }
338
+ inline Index rows() const { return mp_matrix.rows(); }
339
+ inline Index cols() const { return mp_matrix.cols(); }
340
+
341
+ /** \brief Reports whether previous computation was successful.
342
+ *
343
+ * \returns \c Success if computation was successful,
344
+ * \c NumericalIssue if the matrix.appears to be negative.
345
+ */
346
+ ComputationInfo info() const {
347
+ eigen_assert(m_isInitialized && "Decomposition is not initialized.");
348
+ return m_info;
349
+ }
366
350
 
367
- inline const IntRowVectorType& permutationQ() const
368
- {
369
- if (m_extractedDataAreDirty) extractData();
370
- return m_q;
371
- }
351
+ inline const LUMatrixType &matrixL() const {
352
+ if (m_extractedDataAreDirty) extractData();
353
+ return m_l;
354
+ }
372
355
 
373
- /** Computes the sparse Cholesky decomposition of \a matrix
374
- * Note that the matrix should be column-major, and in compressed format for best performance.
375
- * \sa SparseMatrix::makeCompressed().
376
- */
377
- template<typename InputMatrixType>
378
- void compute(const InputMatrixType& matrix)
379
- {
380
- if(m_symbolic) umfpack_free_symbolic(&m_symbolic,Scalar(),StorageIndex());
381
- if(m_numeric) umfpack_free_numeric(&m_numeric,Scalar(),StorageIndex());
382
- grab(matrix.derived());
383
- analyzePattern_impl();
384
- factorize_impl();
385
- }
356
+ inline const LUMatrixType &matrixU() const {
357
+ if (m_extractedDataAreDirty) extractData();
358
+ return m_u;
359
+ }
386
360
 
387
- /** Performs a symbolic decomposition on the sparcity of \a matrix.
388
- *
389
- * This function is particularly useful when solving for several problems having the same structure.
390
- *
391
- * \sa factorize(), compute()
392
- */
393
- template<typename InputMatrixType>
394
- void analyzePattern(const InputMatrixType& matrix)
395
- {
396
- if(m_symbolic) umfpack_free_symbolic(&m_symbolic,Scalar(),StorageIndex());
397
- if(m_numeric) umfpack_free_numeric(&m_numeric,Scalar(),StorageIndex());
398
-
399
- grab(matrix.derived());
400
-
401
- analyzePattern_impl();
402
- }
361
+ inline const IntColVectorType &permutationP() const {
362
+ if (m_extractedDataAreDirty) extractData();
363
+ return m_p;
364
+ }
403
365
 
404
- /** Provides the return status code returned by UmfPack during the numeric
405
- * factorization.
406
- *
407
- * \sa factorize(), compute()
408
- */
409
- inline int umfpackFactorizeReturncode() const
410
- {
411
- eigen_assert(m_numeric && "UmfPackLU: you must first call factorize()");
412
- return m_fact_errorCode;
413
- }
366
+ inline const IntRowVectorType &permutationQ() const {
367
+ if (m_extractedDataAreDirty) extractData();
368
+ return m_q;
369
+ }
414
370
 
415
- /** Provides access to the control settings array used by UmfPack.
416
- *
417
- * If this array contains NaN's, the default values are used.
418
- *
419
- * See UMFPACK documentation for details.
420
- */
421
- inline const UmfpackControl& umfpackControl() const
422
- {
423
- return m_control;
424
- }
371
+ /** Computes the sparse Cholesky decomposition of \a matrix
372
+ * Note that the matrix should be column-major, and in compressed format for best performance.
373
+ * \sa SparseMatrix::makeCompressed().
374
+ */
375
+ template <typename InputMatrixType>
376
+ void compute(const InputMatrixType &matrix) {
377
+ if (m_symbolic) umfpack_free_symbolic(&m_symbolic, Scalar(), StorageIndex());
378
+ if (m_numeric) umfpack_free_numeric(&m_numeric, Scalar(), StorageIndex());
379
+ grab(matrix.derived());
380
+ analyzePattern_impl();
381
+ factorize_impl();
382
+ }
425
383
 
426
- /** Provides access to the control settings array used by UmfPack.
427
- *
428
- * If this array contains NaN's, the default values are used.
429
- *
430
- * See UMFPACK documentation for details.
431
- */
432
- inline UmfpackControl& umfpackControl()
433
- {
434
- return m_control;
435
- }
384
+ /** Performs a symbolic decomposition on the sparsity of \a matrix.
385
+ *
386
+ * This function is particularly useful when solving for several problems having the same structure.
387
+ *
388
+ * \sa factorize(), compute()
389
+ */
390
+ template <typename InputMatrixType>
391
+ void analyzePattern(const InputMatrixType &matrix) {
392
+ if (m_symbolic) umfpack_free_symbolic(&m_symbolic, Scalar(), StorageIndex());
393
+ if (m_numeric) umfpack_free_numeric(&m_numeric, Scalar(), StorageIndex());
436
394
 
437
- /** Performs a numeric decomposition of \a matrix
438
- *
439
- * The given matrix must has the same sparcity than the matrix on which the pattern anylysis has been performed.
440
- *
441
- * \sa analyzePattern(), compute()
442
- */
443
- template<typename InputMatrixType>
444
- void factorize(const InputMatrixType& matrix)
445
- {
446
- eigen_assert(m_analysisIsOk && "UmfPackLU: you must first call analyzePattern()");
447
- if(m_numeric)
448
- umfpack_free_numeric(&m_numeric,Scalar(),StorageIndex());
449
-
450
- grab(matrix.derived());
451
-
452
- factorize_impl();
453
- }
395
+ grab(matrix.derived());
454
396
 
455
- /** Prints the current UmfPack control settings.
456
- *
457
- * \sa umfpackControl()
458
- */
459
- void printUmfpackControl()
460
- {
461
- umfpack_report_control(m_control.data(), Scalar(),StorageIndex());
462
- }
397
+ analyzePattern_impl();
398
+ }
463
399
 
464
- /** Prints statistics collected by UmfPack.
465
- *
466
- * \sa analyzePattern(), compute()
467
- */
468
- void printUmfpackInfo()
469
- {
470
- eigen_assert(m_analysisIsOk && "UmfPackLU: you must first call analyzePattern()");
471
- umfpack_report_info(m_control.data(), m_umfpackInfo.data(), Scalar(),StorageIndex());
472
- }
400
+ /** Provides the return status code returned by UmfPack during the numeric
401
+ * factorization.
402
+ *
403
+ * \sa factorize(), compute()
404
+ */
405
+ inline int umfpackFactorizeReturncode() const {
406
+ eigen_assert(m_numeric && "UmfPackLU: you must first call factorize()");
407
+ return m_fact_errorCode;
408
+ }
473
409
 
474
- /** Prints the status of the previous factorization operation performed by UmfPack (symbolic or numerical factorization).
475
- *
476
- * \sa analyzePattern(), compute()
477
- */
478
- void printUmfpackStatus() {
479
- eigen_assert(m_analysisIsOk && "UmfPackLU: you must first call analyzePattern()");
480
- umfpack_report_status(m_control.data(), m_fact_errorCode, Scalar(),StorageIndex());
481
- }
410
+ /** Provides access to the control settings array used by UmfPack.
411
+ *
412
+ * If this array contains NaN's, the default values are used.
413
+ *
414
+ * See UMFPACK documentation for details.
415
+ */
416
+ inline const UmfpackControl &umfpackControl() const { return m_control; }
417
+
418
+ /** Provides access to the control settings array used by UmfPack.
419
+ *
420
+ * If this array contains NaN's, the default values are used.
421
+ *
422
+ * See UMFPACK documentation for details.
423
+ */
424
+ inline UmfpackControl &umfpackControl() { return m_control; }
425
+
426
+ /** Performs a numeric decomposition of \a matrix
427
+ *
428
+ * The given matrix must have the same sparsity than the matrix on which the pattern anylysis has been performed.
429
+ *
430
+ * \sa analyzePattern(), compute()
431
+ */
432
+ template <typename InputMatrixType>
433
+ void factorize(const InputMatrixType &matrix) {
434
+ eigen_assert(m_analysisIsOk && "UmfPackLU: you must first call analyzePattern()");
435
+ if (m_numeric) umfpack_free_numeric(&m_numeric, Scalar(), StorageIndex());
436
+
437
+ grab(matrix.derived());
438
+
439
+ factorize_impl();
440
+ }
482
441
 
483
- /** \internal */
484
- template<typename BDerived,typename XDerived>
485
- bool _solve_impl(const MatrixBase<BDerived> &b, MatrixBase<XDerived> &x) const;
442
+ /** Prints the current UmfPack control settings.
443
+ *
444
+ * \sa umfpackControl()
445
+ */
446
+ void printUmfpackControl() { umfpack_report_control(m_control.data(), Scalar(), StorageIndex()); }
447
+
448
+ /** Prints statistics collected by UmfPack.
449
+ *
450
+ * \sa analyzePattern(), compute()
451
+ */
452
+ void printUmfpackInfo() {
453
+ eigen_assert(m_analysisIsOk && "UmfPackLU: you must first call analyzePattern()");
454
+ umfpack_report_info(m_control.data(), m_umfpackInfo.data(), Scalar(), StorageIndex());
455
+ }
486
456
 
487
- Scalar determinant() const;
457
+ /** Prints the status of the previous factorization operation performed by UmfPack (symbolic or numerical
458
+ * factorization).
459
+ *
460
+ * \sa analyzePattern(), compute()
461
+ */
462
+ void printUmfpackStatus() {
463
+ eigen_assert(m_analysisIsOk && "UmfPackLU: you must first call analyzePattern()");
464
+ umfpack_report_status(m_control.data(), m_fact_errorCode, Scalar(), StorageIndex());
465
+ }
488
466
 
489
- void extractData() const;
467
+ /** \internal */
468
+ template <typename BDerived, typename XDerived>
469
+ bool _solve_impl(const MatrixBase<BDerived> &b, MatrixBase<XDerived> &x) const;
490
470
 
491
- protected:
471
+ Scalar determinant() const;
492
472
 
493
- void init()
494
- {
495
- m_info = InvalidInput;
496
- m_isInitialized = false;
497
- m_numeric = 0;
498
- m_symbolic = 0;
499
- m_extractedDataAreDirty = true;
473
+ void extractData() const;
500
474
 
501
- umfpack_defaults(m_control.data(), Scalar(),StorageIndex());
502
- }
475
+ protected:
476
+ void init() {
477
+ m_info = InvalidInput;
478
+ m_isInitialized = false;
479
+ m_numeric = 0;
480
+ m_symbolic = 0;
481
+ m_extractedDataAreDirty = true;
503
482
 
504
- void analyzePattern_impl()
505
- {
506
- m_fact_errorCode = umfpack_symbolic(internal::convert_index<StorageIndex>(mp_matrix.rows()),
507
- internal::convert_index<StorageIndex>(mp_matrix.cols()),
508
- mp_matrix.outerIndexPtr(), mp_matrix.innerIndexPtr(), mp_matrix.valuePtr(),
509
- &m_symbolic, m_control.data(), m_umfpackInfo.data());
510
-
511
- m_isInitialized = true;
512
- m_info = m_fact_errorCode ? InvalidInput : Success;
513
- m_analysisIsOk = true;
514
- m_factorizationIsOk = false;
515
- m_extractedDataAreDirty = true;
516
- }
483
+ umfpack_defaults(m_control.data(), Scalar(), StorageIndex());
484
+ }
517
485
 
518
- void factorize_impl()
519
- {
486
+ void analyzePattern_impl() {
487
+ m_fact_errorCode = umfpack_symbolic(internal::convert_index<StorageIndex>(mp_matrix.rows()),
488
+ internal::convert_index<StorageIndex>(mp_matrix.cols()),
489
+ mp_matrix.outerIndexPtr(), mp_matrix.innerIndexPtr(), mp_matrix.valuePtr(),
490
+ &m_symbolic, m_control.data(), m_umfpackInfo.data());
491
+
492
+ m_isInitialized = true;
493
+ m_info = m_fact_errorCode ? InvalidInput : Success;
494
+ m_analysisIsOk = true;
495
+ m_factorizationIsOk = false;
496
+ m_extractedDataAreDirty = true;
497
+ }
520
498
 
521
- m_fact_errorCode = umfpack_numeric(mp_matrix.outerIndexPtr(), mp_matrix.innerIndexPtr(), mp_matrix.valuePtr(),
522
- m_symbolic, &m_numeric, m_control.data(), m_umfpackInfo.data());
499
+ void factorize_impl() {
500
+ m_fact_errorCode = umfpack_numeric(mp_matrix.outerIndexPtr(), mp_matrix.innerIndexPtr(), mp_matrix.valuePtr(),
501
+ m_symbolic, &m_numeric, m_control.data(), m_umfpackInfo.data());
523
502
 
524
- m_info = m_fact_errorCode == UMFPACK_OK ? Success : NumericalIssue;
525
- m_factorizationIsOk = true;
526
- m_extractedDataAreDirty = true;
527
- }
503
+ m_info = m_fact_errorCode == UMFPACK_OK ? Success : NumericalIssue;
504
+ m_factorizationIsOk = true;
505
+ m_extractedDataAreDirty = true;
506
+ }
528
507
 
529
- template<typename MatrixDerived>
530
- void grab(const EigenBase<MatrixDerived> &A)
531
- {
532
- mp_matrix.~UmfpackMatrixRef();
533
- ::new (&mp_matrix) UmfpackMatrixRef(A.derived());
534
- }
508
+ template <typename MatrixDerived>
509
+ void grab(const EigenBase<MatrixDerived> &A) {
510
+ internal::destroy_at(&mp_matrix);
511
+ internal::construct_at(&mp_matrix, A.derived());
512
+ }
535
513
 
536
- void grab(const UmfpackMatrixRef &A)
537
- {
538
- if(&(A.derived()) != &mp_matrix)
539
- {
540
- mp_matrix.~UmfpackMatrixRef();
541
- ::new (&mp_matrix) UmfpackMatrixRef(A);
542
- }
514
+ void grab(const UmfpackMatrixRef &A) {
515
+ if (&(A.derived()) != &mp_matrix) {
516
+ internal::destroy_at(&mp_matrix);
517
+ internal::construct_at(&mp_matrix, A);
543
518
  }
519
+ }
544
520
 
545
- // cached data to reduce reallocation, etc.
546
- mutable LUMatrixType m_l;
547
- StorageIndex m_fact_errorCode;
548
- UmfpackControl m_control;
549
- mutable UmfpackInfo m_umfpackInfo;
521
+ // cached data to reduce reallocation, etc.
522
+ mutable LUMatrixType m_l;
523
+ StorageIndex m_fact_errorCode;
524
+ UmfpackControl m_control;
525
+ mutable UmfpackInfo m_umfpackInfo;
550
526
 
551
- mutable LUMatrixType m_u;
552
- mutable IntColVectorType m_p;
553
- mutable IntRowVectorType m_q;
527
+ mutable LUMatrixType m_u;
528
+ mutable IntColVectorType m_p;
529
+ mutable IntRowVectorType m_q;
554
530
 
555
- UmfpackMatrixType m_dummy;
556
- UmfpackMatrixRef mp_matrix;
531
+ UmfpackMatrixType m_dummy;
532
+ UmfpackMatrixRef mp_matrix;
557
533
 
558
- void* m_numeric;
559
- void* m_symbolic;
534
+ void *m_numeric;
535
+ void *m_symbolic;
560
536
 
561
- mutable ComputationInfo m_info;
562
- int m_factorizationIsOk;
563
- int m_analysisIsOk;
564
- mutable bool m_extractedDataAreDirty;
537
+ mutable ComputationInfo m_info;
538
+ int m_factorizationIsOk;
539
+ int m_analysisIsOk;
540
+ mutable bool m_extractedDataAreDirty;
565
541
 
566
- private:
567
- UmfPackLU(const UmfPackLU& ) { }
542
+ private:
543
+ UmfPackLU(const UmfPackLU &) {}
568
544
  };
569
545
 
570
-
571
- template<typename MatrixType>
572
- void UmfPackLU<MatrixType>::extractData() const
573
- {
574
- if (m_extractedDataAreDirty)
575
- {
546
+ template <typename MatrixType>
547
+ void UmfPackLU<MatrixType>::extractData() const {
548
+ if (m_extractedDataAreDirty) {
576
549
  // get size of the data
577
550
  StorageIndex lnz, unz, rows, cols, nz_udiag;
578
551
  umfpack_get_lunz(&lnz, &unz, &rows, &cols, &nz_udiag, m_numeric, Scalar());
579
552
 
580
553
  // allocate data
581
- m_l.resize(rows,(std::min)(rows,cols));
554
+ m_l.resize(rows, (std::min)(rows, cols));
582
555
  m_l.resizeNonZeros(lnz);
583
556
 
584
- m_u.resize((std::min)(rows,cols),cols);
557
+ m_u.resize((std::min)(rows, cols), cols);
585
558
  m_u.resizeNonZeros(unz);
586
559
 
587
560
  m_p.resize(rows);
588
561
  m_q.resize(cols);
589
562
 
590
563
  // extract
591
- umfpack_get_numeric(m_l.outerIndexPtr(), m_l.innerIndexPtr(), m_l.valuePtr(),
592
- m_u.outerIndexPtr(), m_u.innerIndexPtr(), m_u.valuePtr(),
593
- m_p.data(), m_q.data(), 0, 0, 0, m_numeric);
564
+ umfpack_get_numeric(m_l.outerIndexPtr(), m_l.innerIndexPtr(), m_l.valuePtr(), m_u.outerIndexPtr(),
565
+ m_u.innerIndexPtr(), m_u.valuePtr(), m_p.data(), m_q.data(), 0, 0, 0, m_numeric);
594
566
 
595
567
  m_extractedDataAreDirty = false;
596
568
  }
597
569
  }
598
570
 
599
- template<typename MatrixType>
600
- typename UmfPackLU<MatrixType>::Scalar UmfPackLU<MatrixType>::determinant() const
601
- {
571
+ template <typename MatrixType>
572
+ typename UmfPackLU<MatrixType>::Scalar UmfPackLU<MatrixType>::determinant() const {
602
573
  Scalar det;
603
574
  umfpack_get_determinant(&det, 0, m_numeric, 0, StorageIndex());
604
575
  return det;
605
576
  }
606
577
 
607
- template<typename MatrixType>
608
- template<typename BDerived,typename XDerived>
609
- bool UmfPackLU<MatrixType>::_solve_impl(const MatrixBase<BDerived> &b, MatrixBase<XDerived> &x) const
610
- {
578
+ template <typename MatrixType>
579
+ template <typename BDerived, typename XDerived>
580
+ bool UmfPackLU<MatrixType>::_solve_impl(const MatrixBase<BDerived> &b, MatrixBase<XDerived> &x) const {
611
581
  Index rhsCols = b.cols();
612
- eigen_assert((BDerived::Flags&RowMajorBit)==0 && "UmfPackLU backend does not support non col-major rhs yet");
613
- eigen_assert((XDerived::Flags&RowMajorBit)==0 && "UmfPackLU backend does not support non col-major result yet");
582
+ eigen_assert((BDerived::Flags & RowMajorBit) == 0 && "UmfPackLU backend does not support non col-major rhs yet");
583
+ eigen_assert((XDerived::Flags & RowMajorBit) == 0 && "UmfPackLU backend does not support non col-major result yet");
614
584
  eigen_assert(b.derived().data() != x.derived().data() && " Umfpack does not support inplace solve");
615
585
 
616
- Scalar* x_ptr = 0;
617
- Matrix<Scalar,Dynamic,1> x_tmp;
618
- if(x.innerStride()!=1)
619
- {
586
+ Scalar *x_ptr = 0;
587
+ Matrix<Scalar, Dynamic, 1> x_tmp;
588
+ if (x.innerStride() != 1) {
620
589
  x_tmp.resize(x.rows());
621
590
  x_ptr = x_tmp.data();
622
591
  }
623
- for (int j=0; j<rhsCols; ++j)
624
- {
625
- if(x.innerStride()==1)
626
- x_ptr = &x.col(j).coeffRef(0);
627
- StorageIndex errorCode = umfpack_solve(UMFPACK_A,
628
- mp_matrix.outerIndexPtr(), mp_matrix.innerIndexPtr(), mp_matrix.valuePtr(),
629
- x_ptr, &b.const_cast_derived().col(j).coeffRef(0),
630
- m_numeric, m_control.data(), m_umfpackInfo.data());
631
- if(x.innerStride()!=1)
632
- x.col(j) = x_tmp;
633
- if (errorCode!=0)
634
- return false;
592
+ for (int j = 0; j < rhsCols; ++j) {
593
+ if (x.innerStride() == 1) x_ptr = &x.col(j).coeffRef(0);
594
+ StorageIndex errorCode =
595
+ umfpack_solve(UMFPACK_A, mp_matrix.outerIndexPtr(), mp_matrix.innerIndexPtr(), mp_matrix.valuePtr(), x_ptr,
596
+ &b.const_cast_derived().col(j).coeffRef(0), m_numeric, m_control.data(), m_umfpackInfo.data());
597
+ if (x.innerStride() != 1) x.col(j) = x_tmp;
598
+ if (errorCode != 0) return false;
635
599
  }
636
600
 
637
601
  return true;
638
602
  }
639
603
 
640
- } // end namespace Eigen
604
+ } // end namespace Eigen
641
605
 
642
- #endif // EIGEN_UMFPACKSUPPORT_H
606
+ #endif // EIGEN_UMFPACKSUPPORT_H