@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
@@ -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,325 +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()
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;
71
+
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 };
79
+
80
+ public:
81
+ SPQR()
77
82
  : m_analysisIsOk(false),
78
83
  m_factorizationIsOk(false),
79
84
  m_isRUpToDate(false),
80
85
  m_ordering(SPQR_ORDERING_DEFAULT),
81
86
  m_allow_tol(SPQR_DEFAULT_TOL),
82
- m_tolerance (NumTraits<Scalar>::epsilon()),
87
+ m_tolerance(NumTraits<Scalar>::epsilon()),
83
88
  m_cR(0),
84
89
  m_E(0),
85
90
  m_H(0),
86
91
  m_HPinv(0),
87
92
  m_HTau(0),
88
- m_useDefaultThreshold(true)
89
- {
90
- cholmod_l_start(&m_cc);
91
- }
92
-
93
- explicit SPQR(const _MatrixType& matrix)
93
+ m_useDefaultThreshold(true) {
94
+ cholmod_l_start(&m_cc);
95
+ }
96
+
97
+ explicit SPQR(const MatrixType_& matrix)
94
98
  : m_analysisIsOk(false),
95
99
  m_factorizationIsOk(false),
96
100
  m_isRUpToDate(false),
97
101
  m_ordering(SPQR_ORDERING_DEFAULT),
98
102
  m_allow_tol(SPQR_DEFAULT_TOL),
99
- m_tolerance (NumTraits<Scalar>::epsilon()),
103
+ m_tolerance(NumTraits<Scalar>::epsilon()),
100
104
  m_cR(0),
101
105
  m_E(0),
102
106
  m_H(0),
103
107
  m_HPinv(0),
104
108
  m_HTau(0),
105
- m_useDefaultThreshold(true)
106
- {
107
- cholmod_l_start(&m_cc);
108
- compute(matrix);
109
- }
110
-
111
- ~SPQR()
112
- {
113
- SPQR_free();
114
- cholmod_l_finish(&m_cc);
115
- }
116
- void SPQR_free()
117
- {
118
- cholmod_l_free_sparse(&m_H, &m_cc);
119
- cholmod_l_free_sparse(&m_cR, &m_cc);
120
- cholmod_l_free_dense(&m_HTau, &m_cc);
121
- std::free(m_E);
122
- std::free(m_HPinv);
123
- }
109
+ m_useDefaultThreshold(true) {
110
+ cholmod_l_start(&m_cc);
111
+ compute(matrix);
112
+ }
124
113
 
125
- void compute(const _MatrixType& matrix)
126
- {
127
- if(m_isInitialized) SPQR_free();
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
+ }
128
125
 
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
134
- */
135
- RealScalar pivotThreshold = m_tolerance;
136
- if(m_useDefaultThreshold)
137
- {
138
- RealScalar max2Norm = 0.0;
139
- for (int j = 0; j < mat.cols(); j++) max2Norm = numext::maxi(max2Norm, mat.col(j).norm());
140
- if(max2Norm==RealScalar(0))
141
- max2Norm = RealScalar(1);
142
- pivotThreshold = 20 * (mat.rows() + mat.cols()) * max2Norm * NumTraits<RealScalar>::epsilon();
143
- }
144
- cholmod_sparse A;
145
- A = viewAsCholmod(mat);
146
- m_rows = matrix.rows();
147
- Index col = matrix.cols();
148
- m_rank = SuiteSparseQR<Scalar>(m_ordering, pivotThreshold, col, &A,
149
- &m_cR, &m_E, &m_H, &m_HPinv, &m_HTau, &m_cc);
126
+ void compute(const MatrixType_& matrix) {
127
+ if (m_isInitialized) SPQR_free();
150
128
 
151
- if (!m_cR)
152
- {
153
- m_info = NumericalIssue;
154
- m_isInitialized = false;
155
- return;
156
- }
157
- m_info = Success;
158
- m_isInitialized = true;
159
- m_isRUpToDate = false;
160
- }
161
- /**
162
- * Get the number of rows of the input matrix and the Q matrix
163
- */
164
- inline Index rows() const {return m_rows; }
165
-
166
- /**
167
- * Get the number of columns of the input matrix.
168
- */
169
- inline Index cols() const { return m_cR->ncol; }
170
-
171
- template<typename Rhs, typename Dest>
172
- void _solve_impl(const MatrixBase<Rhs> &b, MatrixBase<Dest> &dest) const
173
- {
174
- eigen_assert(m_isInitialized && " The QR factorization should be computed first, call compute()");
175
- eigen_assert(b.cols()==1 && "This method is for vectors only");
176
-
177
- //Compute Q^T * b
178
- typename Dest::PlainObject y, y2;
179
- y = matrixQ().transpose() * b;
180
-
181
- // Solves with the triangular matrix R
182
- Index rk = this->rank();
183
- y2 = y;
184
- y.resize((std::max)(cols(),Index(y.rows())),y.cols());
185
- y.topRows(rk) = this->matrixR().topLeftCorner(rk, rk).template triangularView<Upper>().solve(y2.topRows(rk));
129
+ MatrixType mat(matrix);
186
130
 
187
- // Apply the column permutation
188
- // colsPermutation() performs a copy of the permutation,
189
- // so let's apply it manually:
190
- for(Index i = 0; i < rk; ++i) dest.row(m_E[i]) = y.row(i);
191
- for(Index i = rk; i < cols(); ++i) dest.row(m_E[i]).setZero();
192
-
193
- // y.bottomRows(y.rows()-rk).setZero();
194
- // dest = colsPermutation() * y.topRows(cols());
195
-
196
- m_info = Success;
197
- }
198
-
199
- /** \returns the sparse triangular factor R. It is a sparse matrix
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
200
134
  */
201
- const MatrixType matrixR() const
202
- {
203
- eigen_assert(m_isInitialized && " The QR factorization should be computed first, call compute()");
204
- if(!m_isRUpToDate) {
205
- m_R = viewAsEigen<Scalar,ColMajor, typename MatrixType::StorageIndex>(*m_cR);
206
- m_isRUpToDate = true;
207
- }
208
- return m_R;
209
- }
210
- /// Get an expression of the matrix Q
211
- SPQRMatrixQReturnType<SPQR> matrixQ() const
212
- {
213
- return SPQRMatrixQReturnType<SPQR>(*this);
214
- }
215
- /// Get the permutation that was applied to columns of A
216
- PermutationType colsPermutation() const
217
- {
218
- eigen_assert(m_isInitialized && "Decomposition is not initialized.");
219
- return PermutationType(m_E, m_cR->ncol);
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();
220
141
  }
221
- /**
222
- * Gets the rank of the matrix.
223
- * It should be equal to matrixQR().cols if the matrix is full-rank
224
- */
225
- Index rank() const
226
- {
227
- eigen_assert(m_isInitialized && "Decomposition is not initialized.");
228
- return m_cc.SPQR_istat[4];
229
- }
230
- /// Set the fill-reducing ordering method to be used
231
- void setSPQROrdering(int ord) { m_ordering = ord;}
232
- /// Set the tolerance tol to treat columns with 2-norm < =tol as zero
233
- void setPivotThreshold(const RealScalar& tol)
234
- {
235
- m_useDefaultThreshold = false;
236
- 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;
237
152
  }
238
-
239
- /** \returns a pointer to the SPQR workspace */
240
- cholmod_common *cholmodCommon() const { return &m_cc; }
241
-
242
-
243
- /** \brief Reports whether previous computation was successful.
244
- *
245
- * \returns \c Success if computation was successful,
246
- * \c NumericalIssue if the sparse QR can not be computed
247
- */
248
- ComputationInfo info() const
249
- {
250
- eigen_assert(m_isInitialized && "Decomposition is not initialized.");
251
- 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;
252
201
  }
253
- protected:
254
- bool m_analysisIsOk;
255
- bool m_factorizationIsOk;
256
- mutable bool m_isRUpToDate;
257
- mutable ComputationInfo m_info;
258
- int m_ordering; // Ordering method to use, see SPQR's manual
259
- int m_allow_tol; // Allow to use some tolerance during numerical factorization.
260
- RealScalar m_tolerance; // treat columns with 2-norm below this tolerance as zero
261
- mutable cholmod_sparse *m_cR; // The sparse R factor in cholmod format
262
- mutable MatrixType m_R; // The sparse matrix R in Eigen format
263
- mutable StorageIndex *m_E; // The permutation applied to columns
264
- mutable cholmod_sparse *m_H; //The householder vectors
265
- mutable StorageIndex *m_HPinv; // The row permutation of H
266
- mutable cholmod_dense *m_HTau; // The Householder coefficients
267
- mutable Index m_rank; // The rank of the matrix
268
- mutable cholmod_common m_cc; // Workspace and parameters
269
- bool m_useDefaultThreshold; // Use default threshold
270
- Index m_rows;
271
- 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;
272
260
  };
273
261
 
274
262
  template <typename SPQRType, typename Derived>
275
- struct SPQR_QProduct : ReturnByValue<SPQR_QProduct<SPQRType,Derived> >
276
- {
263
+ struct SPQR_QProduct : ReturnByValue<SPQR_QProduct<SPQRType, Derived> > {
277
264
  typedef typename SPQRType::Scalar Scalar;
278
265
  typedef typename SPQRType::StorageIndex StorageIndex;
279
- //Define the constructor to get reference to argument types
280
- SPQR_QProduct(const SPQRType& spqr, const Derived& other, bool transpose) : m_spqr(spqr),m_other(other),m_transpose(transpose) {}
281
-
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
+
282
270
  inline Index rows() const { return m_transpose ? m_spqr.rows() : m_spqr.cols(); }
283
271
  inline Index cols() const { return m_other.cols(); }
284
272
  // Assign to a vector
285
- template<typename ResType>
286
- void evalTo(ResType& res) const
287
- {
273
+ template <typename ResType>
274
+ void evalTo(ResType& res) const {
288
275
  cholmod_dense y_cd;
289
- cholmod_dense *x_cd;
290
- int method = m_transpose ? SPQR_QTX : SPQR_QX;
291
- 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();
292
279
  y_cd = viewAsCholmod(m_other.const_cast_derived());
293
280
  x_cd = SuiteSparseQR_qmult<Scalar>(method, m_spqr.m_H, m_spqr.m_HTau, m_spqr.m_HPinv, &y_cd, cc);
294
- 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);
295
283
  cholmod_l_free_dense(&x_cd, cc);
296
284
  }
297
- const SPQRType& m_spqr;
298
- const Derived& m_other;
299
- bool m_transpose;
300
-
285
+ const SPQRType& m_spqr;
286
+ const Derived& m_other;
287
+ bool m_transpose;
301
288
  };
302
- template<typename SPQRType>
303
- struct SPQRMatrixQReturnType{
304
-
289
+ template <typename SPQRType>
290
+ struct SPQRMatrixQReturnType {
305
291
  SPQRMatrixQReturnType(const SPQRType& spqr) : m_spqr(spqr) {}
306
- template<typename Derived>
307
- SPQR_QProduct<SPQRType, Derived> operator*(const MatrixBase<Derived>& other)
308
- {
309
- return SPQR_QProduct<SPQRType,Derived>(m_spqr,other.derived(),false);
310
- }
311
- SPQRMatrixQTransposeReturnType<SPQRType> adjoint() const
312
- {
313
- 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);
314
295
  }
296
+ SPQRMatrixQTransposeReturnType<SPQRType> adjoint() const { return SPQRMatrixQTransposeReturnType<SPQRType>(m_spqr); }
315
297
  // To use for operations with the transpose of Q
316
- SPQRMatrixQTransposeReturnType<SPQRType> transpose() const
317
- {
298
+ SPQRMatrixQTransposeReturnType<SPQRType> transpose() const {
318
299
  return SPQRMatrixQTransposeReturnType<SPQRType>(m_spqr);
319
300
  }
320
301
  const SPQRType& m_spqr;
321
302
  };
322
303
 
323
- template<typename SPQRType>
324
- struct SPQRMatrixQTransposeReturnType{
304
+ template <typename SPQRType>
305
+ struct SPQRMatrixQTransposeReturnType {
325
306
  SPQRMatrixQTransposeReturnType(const SPQRType& spqr) : m_spqr(spqr) {}
326
- template<typename Derived>
327
- SPQR_QProduct<SPQRType,Derived> operator*(const MatrixBase<Derived>& other)
328
- {
329
- 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);
330
310
  }
331
311
  const SPQRType& m_spqr;
332
312
  };
333
313
 
334
- }// End namespace Eigen
314
+ } // End namespace Eigen
335
315
  #endif