@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
@@ -34,35 +34,44 @@
34
34
  #ifndef EIGEN_QR_LAPACKE_H
35
35
  #define EIGEN_QR_LAPACKE_H
36
36
 
37
- namespace Eigen {
37
+ // IWYU pragma: private
38
+ #include "./InternalHeaderCheck.h"
39
+
40
+ namespace Eigen {
38
41
 
39
42
  namespace internal {
40
43
 
41
- /** \internal Specialization for the data types supported by LAPACKe */
44
+ namespace lapacke_helpers {
42
45
 
43
- #define EIGEN_LAPACKE_QR_NOPIV(EIGTYPE, LAPACKE_TYPE, LAPACKE_PREFIX) \
44
- template<typename MatrixQR, typename HCoeffs> \
45
- struct householder_qr_inplace_blocked<MatrixQR, HCoeffs, EIGTYPE, true> \
46
- { \
47
- static void run(MatrixQR& mat, HCoeffs& hCoeffs, Index = 32, \
48
- typename MatrixQR::Scalar* = 0) \
49
- { \
50
- lapack_int m = (lapack_int) mat.rows(); \
51
- lapack_int n = (lapack_int) mat.cols(); \
52
- lapack_int lda = (lapack_int) mat.outerStride(); \
53
- lapack_int matrix_order = (MatrixQR::IsRowMajor) ? LAPACK_ROW_MAJOR : LAPACK_COL_MAJOR; \
54
- LAPACKE_##LAPACKE_PREFIX##geqrf( matrix_order, m, n, (LAPACKE_TYPE*)mat.data(), lda, (LAPACKE_TYPE*)hCoeffs.data()); \
55
- hCoeffs.adjointInPlace(); \
56
- } \
46
+ template <typename MatrixQR, typename HCoeffs>
47
+ struct lapacke_hqr {
48
+ static void run(MatrixQR& mat, HCoeffs& hCoeffs, Index = 32, typename MatrixQR::Scalar* = 0) {
49
+ lapack_int m = to_lapack(mat.rows());
50
+ lapack_int n = to_lapack(mat.cols());
51
+ lapack_int lda = to_lapack(mat.outerStride());
52
+ lapack_int matrix_order = lapack_storage_of(mat);
53
+ geqrf(matrix_order, m, n, to_lapack(mat.data()), lda, to_lapack(hCoeffs.data()));
54
+ hCoeffs.adjointInPlace();
55
+ }
57
56
  };
58
57
 
59
- EIGEN_LAPACKE_QR_NOPIV(double, double, d)
60
- EIGEN_LAPACKE_QR_NOPIV(float, float, s)
61
- EIGEN_LAPACKE_QR_NOPIV(dcomplex, lapack_complex_double, z)
62
- EIGEN_LAPACKE_QR_NOPIV(scomplex, lapack_complex_float, c)
58
+ } // namespace lapacke_helpers
59
+
60
+ /** \internal Specialization for the data types supported by LAPACKe */
61
+ #define EIGEN_LAPACKE_HH_QR(EIGTYPE) \
62
+ template <typename MatrixQR, typename HCoeffs> \
63
+ struct householder_qr_inplace_blocked<MatrixQR, HCoeffs, EIGTYPE, true> \
64
+ : public lapacke_helpers::lapacke_hqr<MatrixQR, HCoeffs> {};
65
+
66
+ EIGEN_LAPACKE_HH_QR(double)
67
+ EIGEN_LAPACKE_HH_QR(float)
68
+ EIGEN_LAPACKE_HH_QR(std::complex<double>)
69
+ EIGEN_LAPACKE_HH_QR(std::complex<float>)
70
+
71
+ #undef EIGEN_LAPACKE_HH_QR
63
72
 
64
- } // end namespace internal
73
+ } // end namespace internal
65
74
 
66
- } // end namespace Eigen
75
+ } // end namespace Eigen
67
76
 
68
- #endif // EIGEN_QR_LAPACKE_H
77
+ #endif // EIGEN_QR_LAPACKE_H
@@ -0,0 +1,3 @@
1
+ #ifndef EIGEN_QR_MODULE_H
2
+ #error "Please include Eigen/QR instead of including headers inside the src directory directly."
3
+ #endif
@@ -0,0 +1,3 @@
1
+ #ifndef EIGEN_SPQRSUPPORT_MODULE_H
2
+ #error "Please include Eigen/SPQRSupport instead of including headers inside the src directory directly."
3
+ #endif
@@ -11,303 +11,305 @@
11
11
  #ifndef EIGEN_SUITESPARSEQRSUPPORT_H
12
12
  #define EIGEN_SUITESPARSEQRSUPPORT_H
13
13
 
14
+ // IWYU pragma: private
15
+ #include "./InternalHeaderCheck.h"
16
+
14
17
  namespace Eigen {
15
-
16
- template<typename MatrixType> class SPQR;
17
- template<typename SPQRType> struct SPQRMatrixQReturnType;
18
- template<typename SPQRType> struct SPQRMatrixQTransposeReturnType;
19
- template <typename SPQRType, typename Derived> struct SPQR_QProduct;
20
- namespace internal {
21
- template <typename SPQRType> struct traits<SPQRMatrixQReturnType<SPQRType> >
22
- {
23
- typedef typename SPQRType::MatrixType ReturnType;
24
- };
25
- template <typename SPQRType> struct traits<SPQRMatrixQTransposeReturnType<SPQRType> >
26
- {
27
- typedef typename SPQRType::MatrixType ReturnType;
28
- };
29
- template <typename SPQRType, typename Derived> struct traits<SPQR_QProduct<SPQRType, Derived> >
30
- {
31
- typedef typename Derived::PlainObject ReturnType;
32
- };
33
- } // End namespace internal
34
-
18
+
19
+ template <typename MatrixType>
20
+ class SPQR;
21
+ template <typename SPQRType>
22
+ struct SPQRMatrixQReturnType;
23
+ template <typename SPQRType>
24
+ struct SPQRMatrixQTransposeReturnType;
25
+ template <typename SPQRType, typename Derived>
26
+ struct SPQR_QProduct;
27
+ namespace internal {
28
+ template <typename SPQRType>
29
+ struct traits<SPQRMatrixQReturnType<SPQRType> > {
30
+ typedef typename SPQRType::MatrixType ReturnType;
31
+ };
32
+ template <typename SPQRType>
33
+ struct traits<SPQRMatrixQTransposeReturnType<SPQRType> > {
34
+ typedef typename SPQRType::MatrixType ReturnType;
35
+ };
36
+ template <typename SPQRType, typename Derived>
37
+ struct traits<SPQR_QProduct<SPQRType, Derived> > {
38
+ typedef typename Derived::PlainObject ReturnType;
39
+ };
40
+ } // End namespace internal
41
+
35
42
  /**
36
- * \ingroup SPQRSupport_Module
37
- * \class SPQR
38
- * \brief Sparse QR factorization based on SuiteSparseQR library
39
- *
40
- * This class is used to perform a multithreaded and multifrontal rank-revealing QR decomposition
41
- * of sparse matrices. The result is then used to solve linear leasts_square systems.
42
- * Clearly, a QR factorization is returned such that A*P = Q*R where :
43
- *
44
- * P is the column permutation. Use colsPermutation() to get it.
45
- *
46
- * Q is the orthogonal matrix represented as Householder reflectors.
47
- * Use matrixQ() to get an expression and matrixQ().transpose() to get the transpose.
48
- * You can then apply it to a vector.
49
- *
50
- * R is the sparse triangular factor. Use matrixQR() to get it as SparseMatrix.
51
- * NOTE : The Index type of R is always SuiteSparse_long. You can get it with SPQR::Index
52
- *
53
- * \tparam _MatrixType The type of the sparse matrix A, must be a column-major SparseMatrix<>
54
- *
55
- * \implsparsesolverconcept
56
- *
57
- *
58
- */
59
- template<typename _MatrixType>
60
- class SPQR : public SparseSolverBase<SPQR<_MatrixType> >
61
- {
62
- protected:
63
- typedef SparseSolverBase<SPQR<_MatrixType> > Base;
64
- using Base::m_isInitialized;
65
- public:
66
- typedef typename _MatrixType::Scalar Scalar;
67
- typedef typename _MatrixType::RealScalar RealScalar;
68
- typedef SuiteSparse_long StorageIndex ;
69
- typedef SparseMatrix<Scalar, ColMajor, StorageIndex> MatrixType;
70
- typedef Map<PermutationMatrix<Dynamic, Dynamic, StorageIndex> > PermutationType;
71
- enum {
72
- ColsAtCompileTime = Dynamic,
73
- MaxColsAtCompileTime = Dynamic
74
- };
75
- public:
76
- SPQR()
77
- : m_ordering(SPQR_ORDERING_DEFAULT), m_allow_tol(SPQR_DEFAULT_TOL), m_tolerance (NumTraits<Scalar>::epsilon()), m_useDefaultThreshold(true)
78
- {
79
- cholmod_l_start(&m_cc);
80
- }
81
-
82
- explicit SPQR(const _MatrixType& matrix)
83
- : m_ordering(SPQR_ORDERING_DEFAULT), m_allow_tol(SPQR_DEFAULT_TOL), m_tolerance (NumTraits<Scalar>::epsilon()), m_useDefaultThreshold(true)
84
- {
85
- cholmod_l_start(&m_cc);
86
- compute(matrix);
87
- }
88
-
89
- ~SPQR()
90
- {
91
- SPQR_free();
92
- cholmod_l_finish(&m_cc);
93
- }
94
- void SPQR_free()
95
- {
96
- cholmod_l_free_sparse(&m_H, &m_cc);
97
- cholmod_l_free_sparse(&m_cR, &m_cc);
98
- cholmod_l_free_dense(&m_HTau, &m_cc);
99
- std::free(m_E);
100
- std::free(m_HPinv);
101
- }
43
+ * \ingroup SPQRSupport_Module
44
+ * \class SPQR
45
+ * \brief Sparse QR factorization based on SuiteSparseQR library
46
+ *
47
+ * This class is used to perform a multithreaded and multifrontal rank-revealing QR decomposition
48
+ * of sparse matrices. The result is then used to solve linear leasts_square systems.
49
+ * Clearly, a QR factorization is returned such that A*P = Q*R where :
50
+ *
51
+ * P is the column permutation. Use colsPermutation() to get it.
52
+ *
53
+ * Q is the orthogonal matrix represented as Householder reflectors.
54
+ * Use matrixQ() to get an expression and matrixQ().transpose() to get the transpose.
55
+ * You can then apply it to a vector.
56
+ *
57
+ * R is the sparse triangular factor. Use matrixQR() to get it as SparseMatrix.
58
+ * NOTE : The Index type of R is always SuiteSparse_long. You can get it with SPQR::Index
59
+ *
60
+ * \tparam MatrixType_ The type of the sparse matrix A, must be a column-major SparseMatrix<>
61
+ *
62
+ * \implsparsesolverconcept
63
+ *
64
+ *
65
+ */
66
+ template <typename MatrixType_>
67
+ class SPQR : public SparseSolverBase<SPQR<MatrixType_> > {
68
+ protected:
69
+ typedef SparseSolverBase<SPQR<MatrixType_> > Base;
70
+ using Base::m_isInitialized;
102
71
 
103
- void compute(const _MatrixType& matrix)
104
- {
105
- if(m_isInitialized) SPQR_free();
72
+ public:
73
+ typedef typename MatrixType_::Scalar Scalar;
74
+ typedef typename MatrixType_::RealScalar RealScalar;
75
+ typedef SuiteSparse_long StorageIndex;
76
+ typedef SparseMatrix<Scalar, ColMajor, StorageIndex> MatrixType;
77
+ typedef Map<PermutationMatrix<Dynamic, Dynamic, StorageIndex> > PermutationType;
78
+ enum { ColsAtCompileTime = Dynamic, MaxColsAtCompileTime = Dynamic };
106
79
 
107
- MatrixType mat(matrix);
108
-
109
- /* Compute the default threshold as in MatLab, see:
110
- * Tim Davis, "Algorithm 915, SuiteSparseQR: Multifrontal Multithreaded Rank-Revealing
111
- * Sparse QR Factorization, ACM Trans. on Math. Soft. 38(1), 2011, Page 8:3
112
- */
113
- RealScalar pivotThreshold = m_tolerance;
114
- if(m_useDefaultThreshold)
115
- {
116
- RealScalar max2Norm = 0.0;
117
- for (int j = 0; j < mat.cols(); j++) max2Norm = numext::maxi(max2Norm, mat.col(j).norm());
118
- if(max2Norm==RealScalar(0))
119
- max2Norm = RealScalar(1);
120
- pivotThreshold = 20 * (mat.rows() + mat.cols()) * max2Norm * NumTraits<RealScalar>::epsilon();
121
- }
122
- cholmod_sparse A;
123
- A = viewAsCholmod(mat);
124
- m_rows = matrix.rows();
125
- Index col = matrix.cols();
126
- m_rank = SuiteSparseQR<Scalar>(m_ordering, pivotThreshold, col, &A,
127
- &m_cR, &m_E, &m_H, &m_HPinv, &m_HTau, &m_cc);
80
+ public:
81
+ SPQR()
82
+ : m_analysisIsOk(false),
83
+ m_factorizationIsOk(false),
84
+ m_isRUpToDate(false),
85
+ m_ordering(SPQR_ORDERING_DEFAULT),
86
+ m_allow_tol(SPQR_DEFAULT_TOL),
87
+ m_tolerance(NumTraits<Scalar>::epsilon()),
88
+ m_cR(0),
89
+ m_E(0),
90
+ m_H(0),
91
+ m_HPinv(0),
92
+ m_HTau(0),
93
+ m_useDefaultThreshold(true) {
94
+ cholmod_l_start(&m_cc);
95
+ }
128
96
 
129
- if (!m_cR)
130
- {
131
- m_info = NumericalIssue;
132
- m_isInitialized = false;
133
- return;
134
- }
135
- m_info = Success;
136
- m_isInitialized = true;
137
- m_isRUpToDate = false;
138
- }
139
- /**
140
- * Get the number of rows of the input matrix and the Q matrix
141
- */
142
- inline Index rows() const {return m_rows; }
143
-
144
- /**
145
- * Get the number of columns of the input matrix.
146
- */
147
- inline Index cols() const { return m_cR->ncol; }
148
-
149
- template<typename Rhs, typename Dest>
150
- void _solve_impl(const MatrixBase<Rhs> &b, MatrixBase<Dest> &dest) const
151
- {
152
- eigen_assert(m_isInitialized && " The QR factorization should be computed first, call compute()");
153
- eigen_assert(b.cols()==1 && "This method is for vectors only");
97
+ explicit SPQR(const MatrixType_& matrix)
98
+ : m_analysisIsOk(false),
99
+ m_factorizationIsOk(false),
100
+ m_isRUpToDate(false),
101
+ m_ordering(SPQR_ORDERING_DEFAULT),
102
+ m_allow_tol(SPQR_DEFAULT_TOL),
103
+ m_tolerance(NumTraits<Scalar>::epsilon()),
104
+ m_cR(0),
105
+ m_E(0),
106
+ m_H(0),
107
+ m_HPinv(0),
108
+ m_HTau(0),
109
+ m_useDefaultThreshold(true) {
110
+ cholmod_l_start(&m_cc);
111
+ compute(matrix);
112
+ }
113
+
114
+ ~SPQR() {
115
+ SPQR_free();
116
+ cholmod_l_finish(&m_cc);
117
+ }
118
+ void SPQR_free() {
119
+ cholmod_l_free_sparse(&m_H, &m_cc);
120
+ cholmod_l_free_sparse(&m_cR, &m_cc);
121
+ cholmod_l_free_dense(&m_HTau, &m_cc);
122
+ std::free(m_E);
123
+ std::free(m_HPinv);
124
+ }
154
125
 
155
- //Compute Q^T * b
156
- typename Dest::PlainObject y, y2;
157
- y = matrixQ().transpose() * b;
158
-
159
- // Solves with the triangular matrix R
160
- Index rk = this->rank();
161
- y2 = y;
162
- y.resize((std::max)(cols(),Index(y.rows())),y.cols());
163
- y.topRows(rk) = this->matrixR().topLeftCorner(rk, rk).template triangularView<Upper>().solve(y2.topRows(rk));
126
+ void compute(const MatrixType_& matrix) {
127
+ if (m_isInitialized) SPQR_free();
164
128
 
165
- // Apply the column permutation
166
- // colsPermutation() performs a copy of the permutation,
167
- // so let's apply it manually:
168
- for(Index i = 0; i < rk; ++i) dest.row(m_E[i]) = y.row(i);
169
- for(Index i = rk; i < cols(); ++i) dest.row(m_E[i]).setZero();
170
-
171
- // y.bottomRows(y.rows()-rk).setZero();
172
- // dest = colsPermutation() * y.topRows(cols());
173
-
174
- m_info = Success;
175
- }
176
-
177
- /** \returns the sparse triangular factor R. It is a sparse matrix
178
- */
179
- const MatrixType matrixR() const
180
- {
181
- eigen_assert(m_isInitialized && " The QR factorization should be computed first, call compute()");
182
- if(!m_isRUpToDate) {
183
- m_R = viewAsEigen<Scalar,ColMajor, typename MatrixType::StorageIndex>(*m_cR);
184
- m_isRUpToDate = true;
185
- }
186
- return m_R;
187
- }
188
- /// Get an expression of the matrix Q
189
- SPQRMatrixQReturnType<SPQR> matrixQ() const
190
- {
191
- return SPQRMatrixQReturnType<SPQR>(*this);
192
- }
193
- /// Get the permutation that was applied to columns of A
194
- PermutationType colsPermutation() const
195
- {
196
- eigen_assert(m_isInitialized && "Decomposition is not initialized.");
197
- return PermutationType(m_E, m_cR->ncol);
198
- }
199
- /**
200
- * Gets the rank of the matrix.
201
- * It should be equal to matrixQR().cols if the matrix is full-rank
129
+ MatrixType mat(matrix);
130
+
131
+ /* Compute the default threshold as in MatLab, see:
132
+ * Tim Davis, "Algorithm 915, SuiteSparseQR: Multifrontal Multithreaded Rank-Revealing
133
+ * Sparse QR Factorization, ACM Trans. on Math. Soft. 38(1), 2011, Page 8:3
202
134
  */
203
- Index rank() const
204
- {
205
- eigen_assert(m_isInitialized && "Decomposition is not initialized.");
206
- return m_cc.SPQR_istat[4];
135
+ RealScalar pivotThreshold = m_tolerance;
136
+ if (m_useDefaultThreshold) {
137
+ RealScalar max2Norm = 0.0;
138
+ for (int j = 0; j < mat.cols(); j++) max2Norm = numext::maxi(max2Norm, mat.col(j).norm());
139
+ if (numext::is_exactly_zero(max2Norm)) max2Norm = RealScalar(1);
140
+ pivotThreshold = 20 * (mat.rows() + mat.cols()) * max2Norm * NumTraits<RealScalar>::epsilon();
207
141
  }
208
- /// Set the fill-reducing ordering method to be used
209
- void setSPQROrdering(int ord) { m_ordering = ord;}
210
- /// Set the tolerance tol to treat columns with 2-norm < =tol as zero
211
- void setPivotThreshold(const RealScalar& tol)
212
- {
213
- m_useDefaultThreshold = false;
214
- m_tolerance = tol;
142
+ cholmod_sparse A;
143
+ A = viewAsCholmod(mat);
144
+ m_rows = matrix.rows();
145
+ m_rank = SuiteSparseQR<Scalar>(m_ordering, pivotThreshold, internal::convert_index<StorageIndex>(matrix.cols()), &A,
146
+ &m_cR, &m_E, &m_H, &m_HPinv, &m_HTau, &m_cc);
147
+
148
+ if (!m_cR) {
149
+ m_info = NumericalIssue;
150
+ m_isInitialized = false;
151
+ return;
215
152
  }
216
-
217
- /** \returns a pointer to the SPQR workspace */
218
- cholmod_common *cholmodCommon() const { return &m_cc; }
219
-
220
-
221
- /** \brief Reports whether previous computation was successful.
222
- *
223
- * \returns \c Success if computation was succesful,
224
- * \c NumericalIssue if the sparse QR can not be computed
225
- */
226
- ComputationInfo info() const
227
- {
228
- eigen_assert(m_isInitialized && "Decomposition is not initialized.");
229
- return m_info;
153
+ m_info = Success;
154
+ m_isInitialized = true;
155
+ m_isRUpToDate = false;
156
+ }
157
+ /**
158
+ * Get the number of rows of the input matrix and the Q matrix
159
+ */
160
+ inline Index rows() const { return m_rows; }
161
+
162
+ /**
163
+ * Get the number of columns of the input matrix.
164
+ */
165
+ inline Index cols() const { return m_cR->ncol; }
166
+
167
+ template <typename Rhs, typename Dest>
168
+ void _solve_impl(const MatrixBase<Rhs>& b, MatrixBase<Dest>& dest) const {
169
+ eigen_assert(m_isInitialized && " The QR factorization should be computed first, call compute()");
170
+ eigen_assert(b.cols() == 1 && "This method is for vectors only");
171
+
172
+ // Compute Q^T * b
173
+ typename Dest::PlainObject y, y2;
174
+ y = matrixQ().transpose() * b;
175
+
176
+ // Solves with the triangular matrix R
177
+ Index rk = this->rank();
178
+ y2 = y;
179
+ y.resize((std::max)(cols(), Index(y.rows())), y.cols());
180
+ y.topRows(rk) = this->matrixR().topLeftCorner(rk, rk).template triangularView<Upper>().solve(y2.topRows(rk));
181
+
182
+ // Apply the column permutation
183
+ // colsPermutation() performs a copy of the permutation,
184
+ // so let's apply it manually:
185
+ for (Index i = 0; i < rk; ++i) dest.row(m_E[i]) = y.row(i);
186
+ for (Index i = rk; i < cols(); ++i) dest.row(m_E[i]).setZero();
187
+
188
+ // y.bottomRows(y.rows()-rk).setZero();
189
+ // dest = colsPermutation() * y.topRows(cols());
190
+
191
+ m_info = Success;
192
+ }
193
+
194
+ /** \returns the sparse triangular factor R. It is a sparse matrix
195
+ */
196
+ const MatrixType matrixR() const {
197
+ eigen_assert(m_isInitialized && " The QR factorization should be computed first, call compute()");
198
+ if (!m_isRUpToDate) {
199
+ m_R = viewAsEigen<Scalar, StorageIndex>(*m_cR);
200
+ m_isRUpToDate = true;
230
201
  }
231
- protected:
232
- bool m_analysisIsOk;
233
- bool m_factorizationIsOk;
234
- mutable bool m_isRUpToDate;
235
- mutable ComputationInfo m_info;
236
- int m_ordering; // Ordering method to use, see SPQR's manual
237
- int m_allow_tol; // Allow to use some tolerance during numerical factorization.
238
- RealScalar m_tolerance; // treat columns with 2-norm below this tolerance as zero
239
- mutable cholmod_sparse *m_cR; // The sparse R factor in cholmod format
240
- mutable MatrixType m_R; // The sparse matrix R in Eigen format
241
- mutable StorageIndex *m_E; // The permutation applied to columns
242
- mutable cholmod_sparse *m_H; //The householder vectors
243
- mutable StorageIndex *m_HPinv; // The row permutation of H
244
- mutable cholmod_dense *m_HTau; // The Householder coefficients
245
- mutable Index m_rank; // The rank of the matrix
246
- mutable cholmod_common m_cc; // Workspace and parameters
247
- bool m_useDefaultThreshold; // Use default threshold
248
- Index m_rows;
249
- template<typename ,typename > friend struct SPQR_QProduct;
202
+ return m_R;
203
+ }
204
+ /// Get an expression of the matrix Q
205
+ SPQRMatrixQReturnType<SPQR> matrixQ() const { return SPQRMatrixQReturnType<SPQR>(*this); }
206
+ /// Get the permutation that was applied to columns of A
207
+ PermutationType colsPermutation() const {
208
+ eigen_assert(m_isInitialized && "Decomposition is not initialized.");
209
+ return PermutationType(m_E, m_cR->ncol);
210
+ }
211
+ /**
212
+ * Gets the rank of the matrix.
213
+ * It should be equal to matrixQR().cols if the matrix is full-rank
214
+ */
215
+ Index rank() const {
216
+ eigen_assert(m_isInitialized && "Decomposition is not initialized.");
217
+ return m_cc.SPQR_istat[4];
218
+ }
219
+ /// Set the fill-reducing ordering method to be used
220
+ void setSPQROrdering(int ord) { m_ordering = ord; }
221
+ /// Set the tolerance tol to treat columns with 2-norm < =tol as zero
222
+ void setPivotThreshold(const RealScalar& tol) {
223
+ m_useDefaultThreshold = false;
224
+ m_tolerance = tol;
225
+ }
226
+
227
+ /** \returns a pointer to the SPQR workspace */
228
+ cholmod_common* cholmodCommon() const { return &m_cc; }
229
+
230
+ /** \brief Reports whether previous computation was successful.
231
+ *
232
+ * \returns \c Success if computation was successful,
233
+ * \c NumericalIssue if the sparse QR can not be computed
234
+ */
235
+ ComputationInfo info() const {
236
+ eigen_assert(m_isInitialized && "Decomposition is not initialized.");
237
+ return m_info;
238
+ }
239
+
240
+ protected:
241
+ bool m_analysisIsOk;
242
+ bool m_factorizationIsOk;
243
+ mutable bool m_isRUpToDate;
244
+ mutable ComputationInfo m_info;
245
+ int m_ordering; // Ordering method to use, see SPQR's manual
246
+ int m_allow_tol; // Allow to use some tolerance during numerical factorization.
247
+ RealScalar m_tolerance; // treat columns with 2-norm below this tolerance as zero
248
+ mutable cholmod_sparse* m_cR = nullptr; // The sparse R factor in cholmod format
249
+ mutable MatrixType m_R; // The sparse matrix R in Eigen format
250
+ mutable StorageIndex* m_E = nullptr; // The permutation applied to columns
251
+ mutable cholmod_sparse* m_H = nullptr; // The householder vectors
252
+ mutable StorageIndex* m_HPinv = nullptr; // The row permutation of H
253
+ mutable cholmod_dense* m_HTau = nullptr; // The Householder coefficients
254
+ mutable Index m_rank; // The rank of the matrix
255
+ mutable cholmod_common m_cc; // Workspace and parameters
256
+ bool m_useDefaultThreshold; // Use default threshold
257
+ Index m_rows;
258
+ template <typename, typename>
259
+ friend struct SPQR_QProduct;
250
260
  };
251
261
 
252
262
  template <typename SPQRType, typename Derived>
253
- struct SPQR_QProduct : ReturnByValue<SPQR_QProduct<SPQRType,Derived> >
254
- {
263
+ struct SPQR_QProduct : ReturnByValue<SPQR_QProduct<SPQRType, Derived> > {
255
264
  typedef typename SPQRType::Scalar Scalar;
256
265
  typedef typename SPQRType::StorageIndex StorageIndex;
257
- //Define the constructor to get reference to argument types
258
- SPQR_QProduct(const SPQRType& spqr, const Derived& other, bool transpose) : m_spqr(spqr),m_other(other),m_transpose(transpose) {}
259
-
266
+ // Define the constructor to get reference to argument types
267
+ SPQR_QProduct(const SPQRType& spqr, const Derived& other, bool transpose)
268
+ : m_spqr(spqr), m_other(other), m_transpose(transpose) {}
269
+
260
270
  inline Index rows() const { return m_transpose ? m_spqr.rows() : m_spqr.cols(); }
261
271
  inline Index cols() const { return m_other.cols(); }
262
272
  // Assign to a vector
263
- template<typename ResType>
264
- void evalTo(ResType& res) const
265
- {
273
+ template <typename ResType>
274
+ void evalTo(ResType& res) const {
266
275
  cholmod_dense y_cd;
267
- cholmod_dense *x_cd;
268
- int method = m_transpose ? SPQR_QTX : SPQR_QX;
269
- cholmod_common *cc = m_spqr.cholmodCommon();
276
+ cholmod_dense* x_cd;
277
+ int method = m_transpose ? SPQR_QTX : SPQR_QX;
278
+ cholmod_common* cc = m_spqr.cholmodCommon();
270
279
  y_cd = viewAsCholmod(m_other.const_cast_derived());
271
280
  x_cd = SuiteSparseQR_qmult<Scalar>(method, m_spqr.m_H, m_spqr.m_HTau, m_spqr.m_HPinv, &y_cd, cc);
272
- res = Matrix<Scalar,ResType::RowsAtCompileTime,ResType::ColsAtCompileTime>::Map(reinterpret_cast<Scalar*>(x_cd->x), x_cd->nrow, x_cd->ncol);
281
+ res = Matrix<Scalar, ResType::RowsAtCompileTime, ResType::ColsAtCompileTime>::Map(
282
+ reinterpret_cast<Scalar*>(x_cd->x), x_cd->nrow, x_cd->ncol);
273
283
  cholmod_l_free_dense(&x_cd, cc);
274
284
  }
275
- const SPQRType& m_spqr;
276
- const Derived& m_other;
277
- bool m_transpose;
278
-
285
+ const SPQRType& m_spqr;
286
+ const Derived& m_other;
287
+ bool m_transpose;
279
288
  };
280
- template<typename SPQRType>
281
- struct SPQRMatrixQReturnType{
282
-
289
+ template <typename SPQRType>
290
+ struct SPQRMatrixQReturnType {
283
291
  SPQRMatrixQReturnType(const SPQRType& spqr) : m_spqr(spqr) {}
284
- template<typename Derived>
285
- SPQR_QProduct<SPQRType, Derived> operator*(const MatrixBase<Derived>& other)
286
- {
287
- return SPQR_QProduct<SPQRType,Derived>(m_spqr,other.derived(),false);
288
- }
289
- SPQRMatrixQTransposeReturnType<SPQRType> adjoint() const
290
- {
291
- return SPQRMatrixQTransposeReturnType<SPQRType>(m_spqr);
292
+ template <typename Derived>
293
+ SPQR_QProduct<SPQRType, Derived> operator*(const MatrixBase<Derived>& other) {
294
+ return SPQR_QProduct<SPQRType, Derived>(m_spqr, other.derived(), false);
292
295
  }
296
+ SPQRMatrixQTransposeReturnType<SPQRType> adjoint() const { return SPQRMatrixQTransposeReturnType<SPQRType>(m_spqr); }
293
297
  // To use for operations with the transpose of Q
294
- SPQRMatrixQTransposeReturnType<SPQRType> transpose() const
295
- {
298
+ SPQRMatrixQTransposeReturnType<SPQRType> transpose() const {
296
299
  return SPQRMatrixQTransposeReturnType<SPQRType>(m_spqr);
297
300
  }
298
301
  const SPQRType& m_spqr;
299
302
  };
300
303
 
301
- template<typename SPQRType>
302
- struct SPQRMatrixQTransposeReturnType{
304
+ template <typename SPQRType>
305
+ struct SPQRMatrixQTransposeReturnType {
303
306
  SPQRMatrixQTransposeReturnType(const SPQRType& spqr) : m_spqr(spqr) {}
304
- template<typename Derived>
305
- SPQR_QProduct<SPQRType,Derived> operator*(const MatrixBase<Derived>& other)
306
- {
307
- return SPQR_QProduct<SPQRType,Derived>(m_spqr,other.derived(), true);
307
+ template <typename Derived>
308
+ SPQR_QProduct<SPQRType, Derived> operator*(const MatrixBase<Derived>& other) {
309
+ return SPQR_QProduct<SPQRType, Derived>(m_spqr, other.derived(), true);
308
310
  }
309
311
  const SPQRType& m_spqr;
310
312
  };
311
313
 
312
- }// End namespace Eigen
314
+ } // End namespace Eigen
313
315
  #endif