@smake/eigen 1.1.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (431) hide show
  1. package/README.md +1 -1
  2. package/eigen/Eigen/AccelerateSupport +52 -0
  3. package/eigen/Eigen/Cholesky +18 -20
  4. package/eigen/Eigen/CholmodSupport +28 -28
  5. package/eigen/Eigen/Core +187 -120
  6. package/eigen/Eigen/Eigenvalues +16 -13
  7. package/eigen/Eigen/Geometry +18 -18
  8. package/eigen/Eigen/Householder +9 -7
  9. package/eigen/Eigen/IterativeLinearSolvers +8 -4
  10. package/eigen/Eigen/Jacobi +14 -13
  11. package/eigen/Eigen/KLUSupport +23 -21
  12. package/eigen/Eigen/LU +15 -16
  13. package/eigen/Eigen/MetisSupport +12 -12
  14. package/eigen/Eigen/OrderingMethods +54 -51
  15. package/eigen/Eigen/PaStiXSupport +23 -21
  16. package/eigen/Eigen/PardisoSupport +17 -14
  17. package/eigen/Eigen/QR +18 -20
  18. package/eigen/Eigen/QtAlignedMalloc +5 -12
  19. package/eigen/Eigen/SPQRSupport +21 -14
  20. package/eigen/Eigen/SVD +23 -17
  21. package/eigen/Eigen/Sparse +1 -2
  22. package/eigen/Eigen/SparseCholesky +18 -15
  23. package/eigen/Eigen/SparseCore +18 -17
  24. package/eigen/Eigen/SparseLU +9 -9
  25. package/eigen/Eigen/SparseQR +16 -14
  26. package/eigen/Eigen/StdDeque +5 -2
  27. package/eigen/Eigen/StdList +5 -2
  28. package/eigen/Eigen/StdVector +5 -2
  29. package/eigen/Eigen/SuperLUSupport +30 -24
  30. package/eigen/Eigen/ThreadPool +80 -0
  31. package/eigen/Eigen/UmfPackSupport +19 -17
  32. package/eigen/Eigen/Version +14 -0
  33. package/eigen/Eigen/src/AccelerateSupport/AccelerateSupport.h +423 -0
  34. package/eigen/Eigen/src/AccelerateSupport/InternalHeaderCheck.h +3 -0
  35. package/eigen/Eigen/src/Cholesky/InternalHeaderCheck.h +3 -0
  36. package/eigen/Eigen/src/Cholesky/LDLT.h +366 -405
  37. package/eigen/Eigen/src/Cholesky/LLT.h +323 -367
  38. package/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +81 -56
  39. package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +585 -529
  40. package/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
  41. package/eigen/Eigen/src/Core/ArithmeticSequence.h +143 -317
  42. package/eigen/Eigen/src/Core/Array.h +329 -370
  43. package/eigen/Eigen/src/Core/ArrayBase.h +190 -203
  44. package/eigen/Eigen/src/Core/ArrayWrapper.h +126 -170
  45. package/eigen/Eigen/src/Core/Assign.h +30 -40
  46. package/eigen/Eigen/src/Core/AssignEvaluator.h +651 -604
  47. package/eigen/Eigen/src/Core/Assign_MKL.h +125 -120
  48. package/eigen/Eigen/src/Core/BandMatrix.h +267 -282
  49. package/eigen/Eigen/src/Core/Block.h +371 -390
  50. package/eigen/Eigen/src/Core/CommaInitializer.h +85 -100
  51. package/eigen/Eigen/src/Core/ConditionEstimator.h +51 -53
  52. package/eigen/Eigen/src/Core/CoreEvaluators.h +1214 -937
  53. package/eigen/Eigen/src/Core/CoreIterators.h +72 -63
  54. package/eigen/Eigen/src/Core/CwiseBinaryOp.h +112 -129
  55. package/eigen/Eigen/src/Core/CwiseNullaryOp.h +676 -702
  56. package/eigen/Eigen/src/Core/CwiseTernaryOp.h +77 -103
  57. package/eigen/Eigen/src/Core/CwiseUnaryOp.h +55 -67
  58. package/eigen/Eigen/src/Core/CwiseUnaryView.h +127 -92
  59. package/eigen/Eigen/src/Core/DenseBase.h +630 -658
  60. package/eigen/Eigen/src/Core/DenseCoeffsBase.h +511 -628
  61. package/eigen/Eigen/src/Core/DenseStorage.h +511 -590
  62. package/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
  63. package/eigen/Eigen/src/Core/Diagonal.h +168 -207
  64. package/eigen/Eigen/src/Core/DiagonalMatrix.h +346 -317
  65. package/eigen/Eigen/src/Core/DiagonalProduct.h +12 -10
  66. package/eigen/Eigen/src/Core/Dot.h +167 -217
  67. package/eigen/Eigen/src/Core/EigenBase.h +74 -85
  68. package/eigen/Eigen/src/Core/Fill.h +138 -0
  69. package/eigen/Eigen/src/Core/FindCoeff.h +464 -0
  70. package/eigen/Eigen/src/Core/ForceAlignedAccess.h +90 -113
  71. package/eigen/Eigen/src/Core/Fuzzy.h +82 -105
  72. package/eigen/Eigen/src/Core/GeneralProduct.h +315 -261
  73. package/eigen/Eigen/src/Core/GenericPacketMath.h +1182 -520
  74. package/eigen/Eigen/src/Core/GlobalFunctions.h +193 -157
  75. package/eigen/Eigen/src/Core/IO.h +131 -156
  76. package/eigen/Eigen/src/Core/IndexedView.h +209 -125
  77. package/eigen/Eigen/src/Core/InnerProduct.h +260 -0
  78. package/eigen/Eigen/src/Core/InternalHeaderCheck.h +3 -0
  79. package/eigen/Eigen/src/Core/Inverse.h +50 -59
  80. package/eigen/Eigen/src/Core/Map.h +123 -141
  81. package/eigen/Eigen/src/Core/MapBase.h +255 -282
  82. package/eigen/Eigen/src/Core/MathFunctions.h +1247 -1201
  83. package/eigen/Eigen/src/Core/MathFunctionsImpl.h +162 -99
  84. package/eigen/Eigen/src/Core/Matrix.h +463 -494
  85. package/eigen/Eigen/src/Core/MatrixBase.h +468 -470
  86. package/eigen/Eigen/src/Core/NestByValue.h +58 -52
  87. package/eigen/Eigen/src/Core/NoAlias.h +79 -86
  88. package/eigen/Eigen/src/Core/NumTraits.h +206 -206
  89. package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +163 -142
  90. package/eigen/Eigen/src/Core/PermutationMatrix.h +461 -511
  91. package/eigen/Eigen/src/Core/PlainObjectBase.h +858 -972
  92. package/eigen/Eigen/src/Core/Product.h +246 -130
  93. package/eigen/Eigen/src/Core/ProductEvaluators.h +779 -671
  94. package/eigen/Eigen/src/Core/Random.h +153 -164
  95. package/eigen/Eigen/src/Core/RandomImpl.h +262 -0
  96. package/eigen/Eigen/src/Core/RealView.h +250 -0
  97. package/eigen/Eigen/src/Core/Redux.h +334 -314
  98. package/eigen/Eigen/src/Core/Ref.h +259 -257
  99. package/eigen/Eigen/src/Core/Replicate.h +92 -104
  100. package/eigen/Eigen/src/Core/Reshaped.h +215 -271
  101. package/eigen/Eigen/src/Core/ReturnByValue.h +47 -55
  102. package/eigen/Eigen/src/Core/Reverse.h +133 -148
  103. package/eigen/Eigen/src/Core/Select.h +68 -140
  104. package/eigen/Eigen/src/Core/SelfAdjointView.h +254 -290
  105. package/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h +23 -20
  106. package/eigen/Eigen/src/Core/SkewSymmetricMatrix3.h +382 -0
  107. package/eigen/Eigen/src/Core/Solve.h +88 -102
  108. package/eigen/Eigen/src/Core/SolveTriangular.h +126 -124
  109. package/eigen/Eigen/src/Core/SolverBase.h +132 -133
  110. package/eigen/Eigen/src/Core/StableNorm.h +113 -147
  111. package/eigen/Eigen/src/Core/StlIterators.h +404 -248
  112. package/eigen/Eigen/src/Core/Stride.h +90 -92
  113. package/eigen/Eigen/src/Core/Swap.h +70 -39
  114. package/eigen/Eigen/src/Core/Transpose.h +258 -295
  115. package/eigen/Eigen/src/Core/Transpositions.h +270 -333
  116. package/eigen/Eigen/src/Core/TriangularMatrix.h +642 -743
  117. package/eigen/Eigen/src/Core/VectorBlock.h +59 -72
  118. package/eigen/Eigen/src/Core/VectorwiseOp.h +653 -704
  119. package/eigen/Eigen/src/Core/Visitor.h +464 -308
  120. package/eigen/Eigen/src/Core/arch/AVX/Complex.h +380 -187
  121. package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +65 -163
  122. package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +2145 -638
  123. package/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
  124. package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +253 -60
  125. package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +278 -228
  126. package/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
  127. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +48 -269
  128. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
  129. package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1597 -754
  130. package/eigen/Eigen/src/Core/arch/AVX512/PacketMathFP16.h +1413 -0
  131. package/eigen/Eigen/src/Core/arch/AVX512/Reductions.h +297 -0
  132. package/eigen/Eigen/src/Core/arch/AVX512/TrsmKernel.h +1167 -0
  133. package/eigen/Eigen/src/Core/arch/AVX512/TrsmUnrolls.inc +1219 -0
  134. package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +229 -41
  135. package/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
  136. package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +420 -184
  137. package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +40 -49
  138. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2962 -2213
  139. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +196 -212
  140. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +713 -441
  141. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMAbfloat16.h +742 -0
  142. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixVectorProduct.inc +2818 -0
  143. package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +2380 -1362
  144. package/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
  145. package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +390 -224
  146. package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +78 -67
  147. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1784 -799
  148. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +167 -50
  149. package/eigen/Eigen/src/Core/arch/Default/Half.h +528 -379
  150. package/eigen/Eigen/src/Core/arch/Default/Settings.h +10 -12
  151. package/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
  152. package/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +41 -40
  153. package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +550 -523
  154. package/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
  155. package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +27 -30
  156. package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +8 -8
  157. package/eigen/Eigen/src/Core/arch/HVX/PacketMath.h +1088 -0
  158. package/eigen/Eigen/src/Core/arch/LSX/Complex.h +520 -0
  159. package/eigen/Eigen/src/Core/arch/LSX/GeneralBlockPanelKernel.h +23 -0
  160. package/eigen/Eigen/src/Core/arch/LSX/MathFunctions.h +43 -0
  161. package/eigen/Eigen/src/Core/arch/LSX/PacketMath.h +2866 -0
  162. package/eigen/Eigen/src/Core/arch/LSX/TypeCasting.h +526 -0
  163. package/eigen/Eigen/src/Core/arch/MSA/Complex.h +54 -82
  164. package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +84 -92
  165. package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +51 -47
  166. package/eigen/Eigen/src/Core/arch/NEON/Complex.h +454 -306
  167. package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +175 -115
  168. package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +23 -30
  169. package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +4366 -2857
  170. package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +616 -393
  171. package/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
  172. package/eigen/Eigen/src/Core/arch/SSE/Complex.h +350 -198
  173. package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +38 -149
  174. package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +1791 -912
  175. package/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
  176. package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +128 -40
  177. package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +10 -6
  178. package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +156 -234
  179. package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +6 -3
  180. package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +27 -32
  181. package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +119 -117
  182. package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +325 -419
  183. package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +15 -17
  184. package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +325 -181
  185. package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +94 -83
  186. package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +811 -458
  187. package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +121 -124
  188. package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +576 -370
  189. package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +194 -109
  190. package/eigen/Eigen/src/Core/functors/StlFunctors.h +95 -112
  191. package/eigen/Eigen/src/Core/functors/TernaryFunctors.h +34 -7
  192. package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1038 -749
  193. package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1883 -1375
  194. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +312 -370
  195. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +189 -176
  196. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +84 -81
  197. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +154 -73
  198. package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +292 -337
  199. package/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +80 -77
  200. package/eigen/Eigen/src/Core/products/Parallelizer.h +207 -105
  201. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +327 -388
  202. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +206 -224
  203. package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +138 -147
  204. package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +58 -61
  205. package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +71 -71
  206. package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +48 -47
  207. package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +294 -369
  208. package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +246 -238
  209. package/eigen/Eigen/src/Core/products/TriangularMatrixVector.h +244 -247
  210. package/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +212 -192
  211. package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +328 -277
  212. package/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +108 -109
  213. package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +68 -94
  214. package/eigen/Eigen/src/Core/util/Assert.h +158 -0
  215. package/eigen/Eigen/src/Core/util/BlasUtil.h +342 -303
  216. package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +348 -317
  217. package/eigen/Eigen/src/Core/util/Constants.h +297 -262
  218. package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +130 -90
  219. package/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
  220. package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +449 -247
  221. package/eigen/Eigen/src/Core/util/GpuHipCudaDefines.inc +101 -0
  222. package/eigen/Eigen/src/Core/util/GpuHipCudaUndefines.inc +45 -0
  223. package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +417 -116
  224. package/eigen/Eigen/src/Core/util/IntegralConstant.h +211 -204
  225. package/eigen/Eigen/src/Core/util/MKL_support.h +39 -37
  226. package/eigen/Eigen/src/Core/util/Macros.h +655 -773
  227. package/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
  228. package/eigen/Eigen/src/Core/util/Memory.h +970 -748
  229. package/eigen/Eigen/src/Core/util/Meta.h +581 -633
  230. package/eigen/Eigen/src/Core/util/MoreMeta.h +638 -0
  231. package/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +32 -19
  232. package/eigen/Eigen/src/Core/util/ReshapedHelper.h +17 -17
  233. package/eigen/Eigen/src/Core/util/Serializer.h +209 -0
  234. package/eigen/Eigen/src/Core/util/StaticAssert.h +50 -166
  235. package/eigen/Eigen/src/Core/util/SymbolicIndex.h +377 -225
  236. package/eigen/Eigen/src/Core/util/XprHelper.h +784 -547
  237. package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +246 -277
  238. package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +299 -319
  239. package/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +52 -48
  240. package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +413 -456
  241. package/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +309 -325
  242. package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +157 -171
  243. package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +292 -310
  244. package/eigen/Eigen/src/Eigenvalues/InternalHeaderCheck.h +3 -0
  245. package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +89 -105
  246. package/eigen/Eigen/src/Eigenvalues/RealQZ.h +537 -607
  247. package/eigen/Eigen/src/Eigenvalues/RealSchur.h +342 -381
  248. package/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +41 -35
  249. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +541 -595
  250. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +47 -44
  251. package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +430 -462
  252. package/eigen/Eigen/src/Geometry/AlignedBox.h +226 -227
  253. package/eigen/Eigen/src/Geometry/AngleAxis.h +131 -133
  254. package/eigen/Eigen/src/Geometry/EulerAngles.h +163 -74
  255. package/eigen/Eigen/src/Geometry/Homogeneous.h +285 -333
  256. package/eigen/Eigen/src/Geometry/Hyperplane.h +151 -160
  257. package/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
  258. package/eigen/Eigen/src/Geometry/OrthoMethods.h +168 -146
  259. package/eigen/Eigen/src/Geometry/ParametrizedLine.h +127 -127
  260. package/eigen/Eigen/src/Geometry/Quaternion.h +566 -506
  261. package/eigen/Eigen/src/Geometry/Rotation2D.h +107 -105
  262. package/eigen/Eigen/src/Geometry/RotationBase.h +148 -145
  263. package/eigen/Eigen/src/Geometry/Scaling.h +113 -106
  264. package/eigen/Eigen/src/Geometry/Transform.h +858 -936
  265. package/eigen/Eigen/src/Geometry/Translation.h +94 -92
  266. package/eigen/Eigen/src/Geometry/Umeyama.h +79 -84
  267. package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +90 -104
  268. package/eigen/Eigen/src/Householder/BlockHouseholder.h +51 -46
  269. package/eigen/Eigen/src/Householder/Householder.h +102 -124
  270. package/eigen/Eigen/src/Householder/HouseholderSequence.h +412 -453
  271. package/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
  272. package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +149 -162
  273. package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +124 -119
  274. package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +92 -104
  275. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +251 -243
  276. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +224 -228
  277. package/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
  278. package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +178 -227
  279. package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +79 -84
  280. package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +54 -60
  281. package/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
  282. package/eigen/Eigen/src/Jacobi/Jacobi.h +252 -308
  283. package/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
  284. package/eigen/Eigen/src/KLUSupport/KLUSupport.h +208 -227
  285. package/eigen/Eigen/src/LU/Determinant.h +50 -69
  286. package/eigen/Eigen/src/LU/FullPivLU.h +545 -596
  287. package/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
  288. package/eigen/Eigen/src/LU/InverseImpl.h +206 -285
  289. package/eigen/Eigen/src/LU/PartialPivLU.h +390 -428
  290. package/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +54 -40
  291. package/eigen/Eigen/src/LU/arch/InverseSize4.h +72 -70
  292. package/eigen/Eigen/src/MetisSupport/InternalHeaderCheck.h +3 -0
  293. package/eigen/Eigen/src/MetisSupport/MetisSupport.h +81 -93
  294. package/eigen/Eigen/src/OrderingMethods/Amd.h +243 -265
  295. package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +831 -1004
  296. package/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
  297. package/eigen/Eigen/src/OrderingMethods/Ordering.h +112 -119
  298. package/eigen/Eigen/src/PaStiXSupport/InternalHeaderCheck.h +3 -0
  299. package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +524 -570
  300. package/eigen/Eigen/src/PardisoSupport/InternalHeaderCheck.h +3 -0
  301. package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +385 -430
  302. package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +479 -479
  303. package/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +120 -56
  304. package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +166 -153
  305. package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +495 -475
  306. package/eigen/Eigen/src/QR/HouseholderQR.h +394 -285
  307. package/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h +32 -23
  308. package/eigen/Eigen/src/QR/InternalHeaderCheck.h +3 -0
  309. package/eigen/Eigen/src/SPQRSupport/InternalHeaderCheck.h +3 -0
  310. package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +244 -264
  311. package/eigen/Eigen/src/SVD/BDCSVD.h +817 -713
  312. package/eigen/Eigen/src/SVD/BDCSVD_LAPACKE.h +174 -0
  313. package/eigen/Eigen/src/SVD/InternalHeaderCheck.h +3 -0
  314. package/eigen/Eigen/src/SVD/JacobiSVD.h +577 -543
  315. package/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +85 -49
  316. package/eigen/Eigen/src/SVD/SVDBase.h +242 -182
  317. package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +200 -235
  318. package/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
  319. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +765 -594
  320. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +308 -94
  321. package/eigen/Eigen/src/SparseCore/AmbiVector.h +202 -251
  322. package/eigen/Eigen/src/SparseCore/CompressedStorage.h +184 -252
  323. package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +134 -178
  324. package/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
  325. package/eigen/Eigen/src/SparseCore/SparseAssign.h +149 -140
  326. package/eigen/Eigen/src/SparseCore/SparseBlock.h +403 -440
  327. package/eigen/Eigen/src/SparseCore/SparseColEtree.h +100 -112
  328. package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +525 -303
  329. package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +555 -339
  330. package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +100 -108
  331. package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +169 -197
  332. package/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h +71 -71
  333. package/eigen/Eigen/src/SparseCore/SparseDot.h +49 -47
  334. package/eigen/Eigen/src/SparseCore/SparseFuzzy.h +13 -11
  335. package/eigen/Eigen/src/SparseCore/SparseMap.h +243 -253
  336. package/eigen/Eigen/src/SparseCore/SparseMatrix.h +1603 -1245
  337. package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +403 -350
  338. package/eigen/Eigen/src/SparseCore/SparsePermutation.h +186 -115
  339. package/eigen/Eigen/src/SparseCore/SparseProduct.h +94 -97
  340. package/eigen/Eigen/src/SparseCore/SparseRedux.h +22 -24
  341. package/eigen/Eigen/src/SparseCore/SparseRef.h +268 -295
  342. package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +370 -416
  343. package/eigen/Eigen/src/SparseCore/SparseSolverBase.h +78 -87
  344. package/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +81 -95
  345. package/eigen/Eigen/src/SparseCore/SparseTranspose.h +62 -71
  346. package/eigen/Eigen/src/SparseCore/SparseTriangularView.h +132 -144
  347. package/eigen/Eigen/src/SparseCore/SparseUtil.h +138 -115
  348. package/eigen/Eigen/src/SparseCore/SparseVector.h +426 -372
  349. package/eigen/Eigen/src/SparseCore/SparseView.h +164 -193
  350. package/eigen/Eigen/src/SparseCore/TriangularSolver.h +129 -170
  351. package/eigen/Eigen/src/SparseLU/InternalHeaderCheck.h +3 -0
  352. package/eigen/Eigen/src/SparseLU/SparseLU.h +756 -710
  353. package/eigen/Eigen/src/SparseLU/SparseLUImpl.h +61 -48
  354. package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +102 -118
  355. package/eigen/Eigen/src/SparseLU/SparseLU_Structs.h +38 -35
  356. package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +245 -301
  357. package/eigen/Eigen/src/SparseLU/SparseLU_Utils.h +44 -49
  358. package/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h +104 -108
  359. package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +89 -100
  360. package/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +57 -58
  361. package/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +43 -55
  362. package/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +74 -71
  363. package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +124 -132
  364. package/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h +136 -159
  365. package/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h +51 -52
  366. package/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h +67 -73
  367. package/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h +24 -26
  368. package/eigen/Eigen/src/SparseQR/InternalHeaderCheck.h +3 -0
  369. package/eigen/Eigen/src/SparseQR/SparseQR.h +450 -502
  370. package/eigen/Eigen/src/StlSupport/StdDeque.h +28 -93
  371. package/eigen/Eigen/src/StlSupport/StdList.h +28 -84
  372. package/eigen/Eigen/src/StlSupport/StdVector.h +28 -108
  373. package/eigen/Eigen/src/StlSupport/details.h +48 -50
  374. package/eigen/Eigen/src/SuperLUSupport/InternalHeaderCheck.h +3 -0
  375. package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +634 -730
  376. package/eigen/Eigen/src/ThreadPool/Barrier.h +70 -0
  377. package/eigen/Eigen/src/ThreadPool/CoreThreadPoolDevice.h +336 -0
  378. package/eigen/Eigen/src/ThreadPool/EventCount.h +241 -0
  379. package/eigen/Eigen/src/ThreadPool/ForkJoin.h +140 -0
  380. package/eigen/Eigen/src/ThreadPool/InternalHeaderCheck.h +4 -0
  381. package/eigen/Eigen/src/ThreadPool/NonBlockingThreadPool.h +587 -0
  382. package/eigen/Eigen/src/ThreadPool/RunQueue.h +230 -0
  383. package/eigen/Eigen/src/ThreadPool/ThreadCancel.h +21 -0
  384. package/eigen/Eigen/src/ThreadPool/ThreadEnvironment.h +43 -0
  385. package/eigen/Eigen/src/ThreadPool/ThreadLocal.h +289 -0
  386. package/eigen/Eigen/src/ThreadPool/ThreadPoolInterface.h +50 -0
  387. package/eigen/Eigen/src/ThreadPool/ThreadYield.h +16 -0
  388. package/eigen/Eigen/src/UmfPackSupport/InternalHeaderCheck.h +3 -0
  389. package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +428 -464
  390. package/eigen/Eigen/src/misc/Image.h +41 -43
  391. package/eigen/Eigen/src/misc/InternalHeaderCheck.h +3 -0
  392. package/eigen/Eigen/src/misc/Kernel.h +39 -41
  393. package/eigen/Eigen/src/misc/RealSvd2x2.h +19 -21
  394. package/eigen/Eigen/src/misc/blas.h +83 -426
  395. package/eigen/Eigen/src/misc/lapacke.h +9972 -16179
  396. package/eigen/Eigen/src/misc/lapacke_helpers.h +163 -0
  397. package/eigen/Eigen/src/misc/lapacke_mangling.h +4 -5
  398. package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.inc +344 -0
  399. package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.inc +544 -0
  400. package/eigen/Eigen/src/plugins/{BlockMethods.h → BlockMethods.inc} +434 -506
  401. package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
  402. package/eigen/Eigen/src/plugins/{CommonCwiseUnaryOps.h → CommonCwiseUnaryOps.inc} +58 -68
  403. package/eigen/Eigen/src/plugins/IndexedViewMethods.inc +192 -0
  404. package/eigen/Eigen/src/plugins/InternalHeaderCheck.inc +3 -0
  405. package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.inc +331 -0
  406. package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.inc +118 -0
  407. package/eigen/Eigen/src/plugins/ReshapedMethods.inc +133 -0
  408. package/package.json +1 -1
  409. package/eigen/COPYING.APACHE +0 -203
  410. package/eigen/COPYING.BSD +0 -26
  411. package/eigen/COPYING.GPL +0 -674
  412. package/eigen/COPYING.LGPL +0 -502
  413. package/eigen/COPYING.MINPACK +0 -51
  414. package/eigen/COPYING.MPL2 +0 -373
  415. package/eigen/COPYING.README +0 -18
  416. package/eigen/Eigen/src/Core/BooleanRedux.h +0 -162
  417. package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +0 -258
  418. package/eigen/Eigen/src/Core/arch/Default/TypeCasting.h +0 -120
  419. package/eigen/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +0 -694
  420. package/eigen/Eigen/src/Core/util/NonMPL2.h +0 -3
  421. package/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h +0 -67
  422. package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +0 -280
  423. package/eigen/Eigen/src/misc/lapack.h +0 -152
  424. package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +0 -358
  425. package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +0 -696
  426. package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +0 -115
  427. package/eigen/Eigen/src/plugins/IndexedViewMethods.h +0 -262
  428. package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +0 -152
  429. package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +0 -95
  430. package/eigen/Eigen/src/plugins/ReshapedMethods.h +0 -149
  431. package/eigen/README.md +0 -5
@@ -11,310 +11,294 @@
11
11
  #ifndef EIGEN_TRIDIAGONALIZATION_H
12
12
  #define EIGEN_TRIDIAGONALIZATION_H
13
13
 
14
+ // IWYU pragma: private
15
+ #include "./InternalHeaderCheck.h"
16
+
14
17
  namespace Eigen {
15
18
 
16
19
  namespace internal {
17
20
 
18
- template<typename MatrixType> struct TridiagonalizationMatrixTReturnType;
19
- template<typename MatrixType>
20
- struct traits<TridiagonalizationMatrixTReturnType<MatrixType> >
21
- : public traits<typename MatrixType::PlainObject>
22
- {
23
- typedef typename MatrixType::PlainObject ReturnType; // FIXME shall it be a BandMatrix?
21
+ template <typename MatrixType>
22
+ struct TridiagonalizationMatrixTReturnType;
23
+ template <typename MatrixType>
24
+ struct traits<TridiagonalizationMatrixTReturnType<MatrixType>> : public traits<typename MatrixType::PlainObject> {
25
+ typedef typename MatrixType::PlainObject ReturnType; // FIXME shall it be a BandMatrix?
24
26
  enum { Flags = 0 };
25
27
  };
26
28
 
27
- template<typename MatrixType, typename CoeffVectorType>
28
- EIGEN_DEVICE_FUNC
29
- void tridiagonalization_inplace(MatrixType& matA, CoeffVectorType& hCoeffs);
30
- }
29
+ template <typename MatrixType, typename CoeffVectorType>
30
+ EIGEN_DEVICE_FUNC void tridiagonalization_inplace(MatrixType& matA, CoeffVectorType& hCoeffs);
31
+ } // namespace internal
31
32
 
32
33
  /** \eigenvalues_module \ingroup Eigenvalues_Module
33
- *
34
- *
35
- * \class Tridiagonalization
36
- *
37
- * \brief Tridiagonal decomposition of a selfadjoint matrix
38
- *
39
- * \tparam _MatrixType the type of the matrix of which we are computing the
40
- * tridiagonal decomposition; this is expected to be an instantiation of the
41
- * Matrix class template.
42
- *
43
- * This class performs a tridiagonal decomposition of a selfadjoint matrix \f$ A \f$ such that:
44
- * \f$ A = Q T Q^* \f$ where \f$ Q \f$ is unitary and \f$ T \f$ a real symmetric tridiagonal matrix.
45
- *
46
- * A tridiagonal matrix is a matrix which has nonzero elements only on the
47
- * main diagonal and the first diagonal below and above it. The Hessenberg
48
- * decomposition of a selfadjoint matrix is in fact a tridiagonal
49
- * decomposition. This class is used in SelfAdjointEigenSolver to compute the
50
- * eigenvalues and eigenvectors of a selfadjoint matrix.
51
- *
52
- * Call the function compute() to compute the tridiagonal decomposition of a
53
- * given matrix. Alternatively, you can use the Tridiagonalization(const MatrixType&)
54
- * constructor which computes the tridiagonal Schur decomposition at
55
- * construction time. Once the decomposition is computed, you can use the
56
- * matrixQ() and matrixT() functions to retrieve the matrices Q and T in the
57
- * decomposition.
58
- *
59
- * The documentation of Tridiagonalization(const MatrixType&) contains an
60
- * example of the typical use of this class.
61
- *
62
- * \sa class HessenbergDecomposition, class SelfAdjointEigenSolver
63
- */
64
- template<typename _MatrixType> class Tridiagonalization
65
- {
66
- public:
67
-
68
- /** \brief Synonym for the template parameter \p _MatrixType. */
69
- typedef _MatrixType MatrixType;
70
-
71
- typedef typename MatrixType::Scalar Scalar;
72
- typedef typename NumTraits<Scalar>::Real RealScalar;
73
- typedef Eigen::Index Index; ///< \deprecated since Eigen 3.3
74
-
75
- enum {
76
- Size = MatrixType::RowsAtCompileTime,
77
- SizeMinusOne = Size == Dynamic ? Dynamic : (Size > 1 ? Size - 1 : 1),
78
- Options = MatrixType::Options,
79
- MaxSize = MatrixType::MaxRowsAtCompileTime,
80
- MaxSizeMinusOne = MaxSize == Dynamic ? Dynamic : (MaxSize > 1 ? MaxSize - 1 : 1)
81
- };
82
-
83
- typedef Matrix<Scalar, SizeMinusOne, 1, Options & ~RowMajor, MaxSizeMinusOne, 1> CoeffVectorType;
84
- typedef typename internal::plain_col_type<MatrixType, RealScalar>::type DiagonalType;
85
- typedef Matrix<RealScalar, SizeMinusOne, 1, Options & ~RowMajor, MaxSizeMinusOne, 1> SubDiagonalType;
86
- typedef typename internal::remove_all<typename MatrixType::RealReturnType>::type MatrixTypeRealView;
87
- typedef internal::TridiagonalizationMatrixTReturnType<MatrixTypeRealView> MatrixTReturnType;
88
-
89
- typedef typename internal::conditional<NumTraits<Scalar>::IsComplex,
90
- typename internal::add_const_on_value_type<typename Diagonal<const MatrixType>::RealReturnType>::type,
91
- const Diagonal<const MatrixType>
92
- >::type DiagonalReturnType;
93
-
94
- typedef typename internal::conditional<NumTraits<Scalar>::IsComplex,
95
- typename internal::add_const_on_value_type<typename Diagonal<const MatrixType, -1>::RealReturnType>::type,
96
- const Diagonal<const MatrixType, -1>
97
- >::type SubDiagonalReturnType;
98
-
99
- /** \brief Return type of matrixQ() */
100
- typedef HouseholderSequence<MatrixType,typename internal::remove_all<typename CoeffVectorType::ConjugateReturnType>::type> HouseholderSequenceType;
101
-
102
- /** \brief Default constructor.
103
- *
104
- * \param [in] size Positive integer, size of the matrix whose tridiagonal
105
- * decomposition will be computed.
106
- *
107
- * The default constructor is useful in cases in which the user intends to
108
- * perform decompositions via compute(). The \p size parameter is only
109
- * used as a hint. It is not an error to give a wrong \p size, but it may
110
- * impair performance.
111
- *
112
- * \sa compute() for an example.
113
- */
114
- explicit Tridiagonalization(Index size = Size==Dynamic ? 2 : Size)
115
- : m_matrix(size,size),
116
- m_hCoeffs(size > 1 ? size-1 : 1),
117
- m_isInitialized(false)
118
- {}
119
-
120
- /** \brief Constructor; computes tridiagonal decomposition of given matrix.
121
- *
122
- * \param[in] matrix Selfadjoint matrix whose tridiagonal decomposition
123
- * is to be computed.
124
- *
125
- * This constructor calls compute() to compute the tridiagonal decomposition.
126
- *
127
- * Example: \include Tridiagonalization_Tridiagonalization_MatrixType.cpp
128
- * Output: \verbinclude Tridiagonalization_Tridiagonalization_MatrixType.out
129
- */
130
- template<typename InputType>
131
- explicit Tridiagonalization(const EigenBase<InputType>& matrix)
132
- : m_matrix(matrix.derived()),
133
- m_hCoeffs(matrix.cols() > 1 ? matrix.cols()-1 : 1),
134
- m_isInitialized(false)
135
- {
136
- internal::tridiagonalization_inplace(m_matrix, m_hCoeffs);
137
- m_isInitialized = true;
138
- }
34
+ *
35
+ *
36
+ * \class Tridiagonalization
37
+ *
38
+ * \brief Tridiagonal decomposition of a selfadjoint matrix
39
+ *
40
+ * \tparam MatrixType_ the type of the matrix of which we are computing the
41
+ * tridiagonal decomposition; this is expected to be an instantiation of the
42
+ * Matrix class template.
43
+ *
44
+ * This class performs a tridiagonal decomposition of a selfadjoint matrix \f$ A \f$ such that:
45
+ * \f$ A = Q T Q^* \f$ where \f$ Q \f$ is unitary and \f$ T \f$ a real symmetric tridiagonal matrix.
46
+ *
47
+ * A tridiagonal matrix is a matrix which has nonzero elements only on the
48
+ * main diagonal and the first diagonal below and above it. The Hessenberg
49
+ * decomposition of a selfadjoint matrix is in fact a tridiagonal
50
+ * decomposition. This class is used in SelfAdjointEigenSolver to compute the
51
+ * eigenvalues and eigenvectors of a selfadjoint matrix.
52
+ *
53
+ * Call the function compute() to compute the tridiagonal decomposition of a
54
+ * given matrix. Alternatively, you can use the Tridiagonalization(const MatrixType&)
55
+ * constructor which computes the tridiagonal Schur decomposition at
56
+ * construction time. Once the decomposition is computed, you can use the
57
+ * matrixQ() and matrixT() functions to retrieve the matrices Q and T in the
58
+ * decomposition.
59
+ *
60
+ * The documentation of Tridiagonalization(const MatrixType&) contains an
61
+ * example of the typical use of this class.
62
+ *
63
+ * \sa class HessenbergDecomposition, class SelfAdjointEigenSolver
64
+ */
65
+ template <typename MatrixType_>
66
+ class Tridiagonalization {
67
+ public:
68
+ /** \brief Synonym for the template parameter \p MatrixType_. */
69
+ typedef MatrixType_ MatrixType;
139
70
 
140
- /** \brief Computes tridiagonal decomposition of given matrix.
141
- *
142
- * \param[in] matrix Selfadjoint matrix whose tridiagonal decomposition
143
- * is to be computed.
144
- * \returns Reference to \c *this
145
- *
146
- * The tridiagonal decomposition is computed by bringing the columns of
147
- * the matrix successively in the required form using Householder
148
- * reflections. The cost is \f$ 4n^3/3 \f$ flops, where \f$ n \f$ denotes
149
- * the size of the given matrix.
150
- *
151
- * This method reuses of the allocated data in the Tridiagonalization
152
- * object, if the size of the matrix does not change.
153
- *
154
- * Example: \include Tridiagonalization_compute.cpp
155
- * Output: \verbinclude Tridiagonalization_compute.out
156
- */
157
- template<typename InputType>
158
- Tridiagonalization& compute(const EigenBase<InputType>& matrix)
159
- {
160
- m_matrix = matrix.derived();
161
- m_hCoeffs.resize(matrix.rows()-1, 1);
162
- internal::tridiagonalization_inplace(m_matrix, m_hCoeffs);
163
- m_isInitialized = true;
164
- return *this;
165
- }
71
+ typedef typename MatrixType::Scalar Scalar;
72
+ typedef typename NumTraits<Scalar>::Real RealScalar;
73
+ typedef Eigen::Index Index; ///< \deprecated since Eigen 3.3
74
+
75
+ enum {
76
+ Size = MatrixType::RowsAtCompileTime,
77
+ SizeMinusOne = Size == Dynamic ? Dynamic : (Size > 1 ? Size - 1 : 1),
78
+ Options = internal::traits<MatrixType>::Options,
79
+ MaxSize = MatrixType::MaxRowsAtCompileTime,
80
+ MaxSizeMinusOne = MaxSize == Dynamic ? Dynamic : (MaxSize > 1 ? MaxSize - 1 : 1)
81
+ };
82
+
83
+ typedef Matrix<Scalar, SizeMinusOne, 1, Options & ~RowMajor, MaxSizeMinusOne, 1> CoeffVectorType;
84
+ typedef typename internal::plain_col_type<MatrixType, RealScalar>::type DiagonalType;
85
+ typedef Matrix<RealScalar, SizeMinusOne, 1, Options & ~RowMajor, MaxSizeMinusOne, 1> SubDiagonalType;
86
+ typedef internal::remove_all_t<typename MatrixType::RealReturnType> MatrixTypeRealView;
87
+ typedef internal::TridiagonalizationMatrixTReturnType<MatrixTypeRealView> MatrixTReturnType;
88
+
89
+ typedef std::conditional_t<NumTraits<Scalar>::IsComplex,
90
+ internal::add_const_on_value_type_t<typename Diagonal<const MatrixType>::RealReturnType>,
91
+ const Diagonal<const MatrixType>>
92
+ DiagonalReturnType;
93
+
94
+ typedef std::conditional_t<
95
+ NumTraits<Scalar>::IsComplex,
96
+ internal::add_const_on_value_type_t<typename Diagonal<const MatrixType, -1>::RealReturnType>,
97
+ const Diagonal<const MatrixType, -1>>
98
+ SubDiagonalReturnType;
99
+
100
+ /** \brief Return type of matrixQ() */
101
+ typedef HouseholderSequence<MatrixType, internal::remove_all_t<typename CoeffVectorType::ConjugateReturnType>>
102
+ HouseholderSequenceType;
103
+
104
+ /** \brief Default constructor.
105
+ *
106
+ * \param [in] size Positive integer, size of the matrix whose tridiagonal
107
+ * decomposition will be computed.
108
+ *
109
+ * The default constructor is useful in cases in which the user intends to
110
+ * perform decompositions via compute(). The \p size parameter is only
111
+ * used as a hint. It is not an error to give a wrong \p size, but it may
112
+ * impair performance.
113
+ *
114
+ * \sa compute() for an example.
115
+ */
116
+ explicit Tridiagonalization(Index size = Size == Dynamic ? 2 : Size)
117
+ : m_matrix(size, size), m_hCoeffs(size > 1 ? size - 1 : 1), m_isInitialized(false) {}
118
+
119
+ /** \brief Constructor; computes tridiagonal decomposition of given matrix.
120
+ *
121
+ * \param[in] matrix Selfadjoint matrix whose tridiagonal decomposition
122
+ * is to be computed.
123
+ *
124
+ * This constructor calls compute() to compute the tridiagonal decomposition.
125
+ *
126
+ * Example: \include Tridiagonalization_Tridiagonalization_MatrixType.cpp
127
+ * Output: \verbinclude Tridiagonalization_Tridiagonalization_MatrixType.out
128
+ */
129
+ template <typename InputType>
130
+ explicit Tridiagonalization(const EigenBase<InputType>& matrix)
131
+ : m_matrix(matrix.derived()), m_hCoeffs(matrix.cols() > 1 ? matrix.cols() - 1 : 1), m_isInitialized(false) {
132
+ internal::tridiagonalization_inplace(m_matrix, m_hCoeffs);
133
+ m_isInitialized = true;
134
+ }
166
135
 
167
- /** \brief Returns the Householder coefficients.
168
- *
169
- * \returns a const reference to the vector of Householder coefficients
170
- *
171
- * \pre Either the constructor Tridiagonalization(const MatrixType&) or
172
- * the member function compute(const MatrixType&) has been called before
173
- * to compute the tridiagonal decomposition of a matrix.
174
- *
175
- * The Householder coefficients allow the reconstruction of the matrix
176
- * \f$ Q \f$ in the tridiagonal decomposition from the packed data.
177
- *
178
- * Example: \include Tridiagonalization_householderCoefficients.cpp
179
- * Output: \verbinclude Tridiagonalization_householderCoefficients.out
180
- *
181
- * \sa packedMatrix(), \ref Householder_Module "Householder module"
182
- */
183
- inline CoeffVectorType householderCoefficients() const
184
- {
185
- eigen_assert(m_isInitialized && "Tridiagonalization is not initialized.");
186
- return m_hCoeffs;
187
- }
136
+ /** \brief Computes tridiagonal decomposition of given matrix.
137
+ *
138
+ * \param[in] matrix Selfadjoint matrix whose tridiagonal decomposition
139
+ * is to be computed.
140
+ * \returns Reference to \c *this
141
+ *
142
+ * The tridiagonal decomposition is computed by bringing the columns of
143
+ * the matrix successively in the required form using Householder
144
+ * reflections. The cost is \f$ 4n^3/3 \f$ flops, where \f$ n \f$ denotes
145
+ * the size of the given matrix.
146
+ *
147
+ * This method reuses of the allocated data in the Tridiagonalization
148
+ * object, if the size of the matrix does not change.
149
+ *
150
+ * Example: \include Tridiagonalization_compute.cpp
151
+ * Output: \verbinclude Tridiagonalization_compute.out
152
+ */
153
+ template <typename InputType>
154
+ Tridiagonalization& compute(const EigenBase<InputType>& matrix) {
155
+ m_matrix = matrix.derived();
156
+ m_hCoeffs.resize(matrix.rows() - 1, 1);
157
+ internal::tridiagonalization_inplace(m_matrix, m_hCoeffs);
158
+ m_isInitialized = true;
159
+ return *this;
160
+ }
188
161
 
189
- /** \brief Returns the internal representation of the decomposition
190
- *
191
- * \returns a const reference to a matrix with the internal representation
192
- * of the decomposition.
193
- *
194
- * \pre Either the constructor Tridiagonalization(const MatrixType&) or
195
- * the member function compute(const MatrixType&) has been called before
196
- * to compute the tridiagonal decomposition of a matrix.
197
- *
198
- * The returned matrix contains the following information:
199
- * - the strict upper triangular part is equal to the input matrix A.
200
- * - the diagonal and lower sub-diagonal represent the real tridiagonal
201
- * symmetric matrix T.
202
- * - the rest of the lower part contains the Householder vectors that,
203
- * combined with Householder coefficients returned by
204
- * householderCoefficients(), allows to reconstruct the matrix Q as
205
- * \f$ Q = H_{N-1} \ldots H_1 H_0 \f$.
206
- * Here, the matrices \f$ H_i \f$ are the Householder transformations
207
- * \f$ H_i = (I - h_i v_i v_i^T) \f$
208
- * where \f$ h_i \f$ is the \f$ i \f$th Householder coefficient and
209
- * \f$ v_i \f$ is the Householder vector defined by
210
- * \f$ v_i = [ 0, \ldots, 0, 1, M(i+2,i), \ldots, M(N-1,i) ]^T \f$
211
- * with M the matrix returned by this function.
212
- *
213
- * See LAPACK for further details on this packed storage.
214
- *
215
- * Example: \include Tridiagonalization_packedMatrix.cpp
216
- * Output: \verbinclude Tridiagonalization_packedMatrix.out
217
- *
218
- * \sa householderCoefficients()
219
- */
220
- inline const MatrixType& packedMatrix() const
221
- {
222
- eigen_assert(m_isInitialized && "Tridiagonalization is not initialized.");
223
- return m_matrix;
224
- }
162
+ /** \brief Returns the Householder coefficients.
163
+ *
164
+ * \returns a const reference to the vector of Householder coefficients
165
+ *
166
+ * \pre Either the constructor Tridiagonalization(const MatrixType&) or
167
+ * the member function compute(const MatrixType&) has been called before
168
+ * to compute the tridiagonal decomposition of a matrix.
169
+ *
170
+ * The Householder coefficients allow the reconstruction of the matrix
171
+ * \f$ Q \f$ in the tridiagonal decomposition from the packed data.
172
+ *
173
+ * Example: \include Tridiagonalization_householderCoefficients.cpp
174
+ * Output: \verbinclude Tridiagonalization_householderCoefficients.out
175
+ *
176
+ * \sa packedMatrix(), \ref Householder_Module "Householder module"
177
+ */
178
+ inline CoeffVectorType householderCoefficients() const {
179
+ eigen_assert(m_isInitialized && "Tridiagonalization is not initialized.");
180
+ return m_hCoeffs;
181
+ }
225
182
 
226
- /** \brief Returns the unitary matrix Q in the decomposition
227
- *
228
- * \returns object representing the matrix Q
229
- *
230
- * \pre Either the constructor Tridiagonalization(const MatrixType&) or
231
- * the member function compute(const MatrixType&) has been called before
232
- * to compute the tridiagonal decomposition of a matrix.
233
- *
234
- * This function returns a light-weight object of template class
235
- * HouseholderSequence. You can either apply it directly to a matrix or
236
- * you can convert it to a matrix of type #MatrixType.
237
- *
238
- * \sa Tridiagonalization(const MatrixType&) for an example,
239
- * matrixT(), class HouseholderSequence
240
- */
241
- HouseholderSequenceType matrixQ() const
242
- {
243
- eigen_assert(m_isInitialized && "Tridiagonalization is not initialized.");
244
- return HouseholderSequenceType(m_matrix, m_hCoeffs.conjugate())
245
- .setLength(m_matrix.rows() - 1)
246
- .setShift(1);
247
- }
183
+ /** \brief Returns the internal representation of the decomposition
184
+ *
185
+ * \returns a const reference to a matrix with the internal representation
186
+ * of the decomposition.
187
+ *
188
+ * \pre Either the constructor Tridiagonalization(const MatrixType&) or
189
+ * the member function compute(const MatrixType&) has been called before
190
+ * to compute the tridiagonal decomposition of a matrix.
191
+ *
192
+ * The returned matrix contains the following information:
193
+ * - the strict upper triangular part is equal to the input matrix A.
194
+ * - the diagonal and lower sub-diagonal represent the real tridiagonal
195
+ * symmetric matrix T.
196
+ * - the rest of the lower part contains the Householder vectors that,
197
+ * combined with Householder coefficients returned by
198
+ * householderCoefficients(), allows to reconstruct the matrix Q as
199
+ * \f$ Q = H_{N-1} \ldots H_1 H_0 \f$.
200
+ * Here, the matrices \f$ H_i \f$ are the Householder transformations
201
+ * \f$ H_i = (I - h_i v_i v_i^T) \f$
202
+ * where \f$ h_i \f$ is the \f$ i \f$th Householder coefficient and
203
+ * \f$ v_i \f$ is the Householder vector defined by
204
+ * \f$ v_i = [ 0, \ldots, 0, 1, M(i+2,i), \ldots, M(N-1,i) ]^T \f$
205
+ * with M the matrix returned by this function.
206
+ *
207
+ * See LAPACK for further details on this packed storage.
208
+ *
209
+ * Example: \include Tridiagonalization_packedMatrix.cpp
210
+ * Output: \verbinclude Tridiagonalization_packedMatrix.out
211
+ *
212
+ * \sa householderCoefficients()
213
+ */
214
+ inline const MatrixType& packedMatrix() const {
215
+ eigen_assert(m_isInitialized && "Tridiagonalization is not initialized.");
216
+ return m_matrix;
217
+ }
248
218
 
249
- /** \brief Returns an expression of the tridiagonal matrix T in the decomposition
250
- *
251
- * \returns expression object representing the matrix T
252
- *
253
- * \pre Either the constructor Tridiagonalization(const MatrixType&) or
254
- * the member function compute(const MatrixType&) has been called before
255
- * to compute the tridiagonal decomposition of a matrix.
256
- *
257
- * Currently, this function can be used to extract the matrix T from internal
258
- * data and copy it to a dense matrix object. In most cases, it may be
259
- * sufficient to directly use the packed matrix or the vector expressions
260
- * returned by diagonal() and subDiagonal() instead of creating a new
261
- * dense copy matrix with this function.
262
- *
263
- * \sa Tridiagonalization(const MatrixType&) for an example,
264
- * matrixQ(), packedMatrix(), diagonal(), subDiagonal()
265
- */
266
- MatrixTReturnType matrixT() const
267
- {
268
- eigen_assert(m_isInitialized && "Tridiagonalization is not initialized.");
269
- return MatrixTReturnType(m_matrix.real());
270
- }
219
+ /** \brief Returns the unitary matrix Q in the decomposition
220
+ *
221
+ * \returns object representing the matrix Q
222
+ *
223
+ * \pre Either the constructor Tridiagonalization(const MatrixType&) or
224
+ * the member function compute(const MatrixType&) has been called before
225
+ * to compute the tridiagonal decomposition of a matrix.
226
+ *
227
+ * This function returns a light-weight object of template class
228
+ * HouseholderSequence. You can either apply it directly to a matrix or
229
+ * you can convert it to a matrix of type #MatrixType.
230
+ *
231
+ * \sa Tridiagonalization(const MatrixType&) for an example,
232
+ * matrixT(), class HouseholderSequence
233
+ */
234
+ HouseholderSequenceType matrixQ() const {
235
+ eigen_assert(m_isInitialized && "Tridiagonalization is not initialized.");
236
+ return HouseholderSequenceType(m_matrix, m_hCoeffs.conjugate()).setLength(m_matrix.rows() - 1).setShift(1);
237
+ }
238
+
239
+ /** \brief Returns an expression of the tridiagonal matrix T in the decomposition
240
+ *
241
+ * \returns expression object representing the matrix T
242
+ *
243
+ * \pre Either the constructor Tridiagonalization(const MatrixType&) or
244
+ * the member function compute(const MatrixType&) has been called before
245
+ * to compute the tridiagonal decomposition of a matrix.
246
+ *
247
+ * Currently, this function can be used to extract the matrix T from internal
248
+ * data and copy it to a dense matrix object. In most cases, it may be
249
+ * sufficient to directly use the packed matrix or the vector expressions
250
+ * returned by diagonal() and subDiagonal() instead of creating a new
251
+ * dense copy matrix with this function.
252
+ *
253
+ * \sa Tridiagonalization(const MatrixType&) for an example,
254
+ * matrixQ(), packedMatrix(), diagonal(), subDiagonal()
255
+ */
256
+ MatrixTReturnType matrixT() const {
257
+ eigen_assert(m_isInitialized && "Tridiagonalization is not initialized.");
258
+ return MatrixTReturnType(m_matrix.real());
259
+ }
271
260
 
272
- /** \brief Returns the diagonal of the tridiagonal matrix T in the decomposition.
273
- *
274
- * \returns expression representing the diagonal of T
275
- *
276
- * \pre Either the constructor Tridiagonalization(const MatrixType&) or
277
- * the member function compute(const MatrixType&) has been called before
278
- * to compute the tridiagonal decomposition of a matrix.
279
- *
280
- * Example: \include Tridiagonalization_diagonal.cpp
281
- * Output: \verbinclude Tridiagonalization_diagonal.out
282
- *
283
- * \sa matrixT(), subDiagonal()
284
- */
285
- DiagonalReturnType diagonal() const;
286
-
287
- /** \brief Returns the subdiagonal of the tridiagonal matrix T in the decomposition.
288
- *
289
- * \returns expression representing the subdiagonal of T
290
- *
291
- * \pre Either the constructor Tridiagonalization(const MatrixType&) or
292
- * the member function compute(const MatrixType&) has been called before
293
- * to compute the tridiagonal decomposition of a matrix.
294
- *
295
- * \sa diagonal() for an example, matrixT()
296
- */
297
- SubDiagonalReturnType subDiagonal() const;
298
-
299
- protected:
300
-
301
- MatrixType m_matrix;
302
- CoeffVectorType m_hCoeffs;
303
- bool m_isInitialized;
261
+ /** \brief Returns the diagonal of the tridiagonal matrix T in the decomposition.
262
+ *
263
+ * \returns expression representing the diagonal of T
264
+ *
265
+ * \pre Either the constructor Tridiagonalization(const MatrixType&) or
266
+ * the member function compute(const MatrixType&) has been called before
267
+ * to compute the tridiagonal decomposition of a matrix.
268
+ *
269
+ * Example: \include Tridiagonalization_diagonal.cpp
270
+ * Output: \verbinclude Tridiagonalization_diagonal.out
271
+ *
272
+ * \sa matrixT(), subDiagonal()
273
+ */
274
+ DiagonalReturnType diagonal() const;
275
+
276
+ /** \brief Returns the subdiagonal of the tridiagonal matrix T in the decomposition.
277
+ *
278
+ * \returns expression representing the subdiagonal of T
279
+ *
280
+ * \pre Either the constructor Tridiagonalization(const MatrixType&) or
281
+ * the member function compute(const MatrixType&) has been called before
282
+ * to compute the tridiagonal decomposition of a matrix.
283
+ *
284
+ * \sa diagonal() for an example, matrixT()
285
+ */
286
+ SubDiagonalReturnType subDiagonal() const;
287
+
288
+ protected:
289
+ MatrixType m_matrix;
290
+ CoeffVectorType m_hCoeffs;
291
+ bool m_isInitialized;
304
292
  };
305
293
 
306
- template<typename MatrixType>
307
- typename Tridiagonalization<MatrixType>::DiagonalReturnType
308
- Tridiagonalization<MatrixType>::diagonal() const
309
- {
294
+ template <typename MatrixType>
295
+ typename Tridiagonalization<MatrixType>::DiagonalReturnType Tridiagonalization<MatrixType>::diagonal() const {
310
296
  eigen_assert(m_isInitialized && "Tridiagonalization is not initialized.");
311
297
  return m_matrix.diagonal().real();
312
298
  }
313
299
 
314
- template<typename MatrixType>
315
- typename Tridiagonalization<MatrixType>::SubDiagonalReturnType
316
- Tridiagonalization<MatrixType>::subDiagonal() const
317
- {
300
+ template <typename MatrixType>
301
+ typename Tridiagonalization<MatrixType>::SubDiagonalReturnType Tridiagonalization<MatrixType>::subDiagonal() const {
318
302
  eigen_assert(m_isInitialized && "Tridiagonalization is not initialized.");
319
303
  return m_matrix.template diagonal<-1>().real();
320
304
  }
@@ -322,240 +306,224 @@ Tridiagonalization<MatrixType>::subDiagonal() const
322
306
  namespace internal {
323
307
 
324
308
  /** \internal
325
- * Performs a tridiagonal decomposition of the selfadjoint matrix \a matA in-place.
326
- *
327
- * \param[in,out] matA On input the selfadjoint matrix. Only the \b lower triangular part is referenced.
328
- * On output, the strict upper part is left unchanged, and the lower triangular part
329
- * represents the T and Q matrices in packed format has detailed below.
330
- * \param[out] hCoeffs returned Householder coefficients (see below)
331
- *
332
- * On output, the tridiagonal selfadjoint matrix T is stored in the diagonal
333
- * and lower sub-diagonal of the matrix \a matA.
334
- * The unitary matrix Q is represented in a compact way as a product of
335
- * Householder reflectors \f$ H_i \f$ such that:
336
- * \f$ Q = H_{N-1} \ldots H_1 H_0 \f$.
337
- * The Householder reflectors are defined as
338
- * \f$ H_i = (I - h_i v_i v_i^T) \f$
339
- * where \f$ h_i = hCoeffs[i]\f$ is the \f$ i \f$th Householder coefficient and
340
- * \f$ v_i \f$ is the Householder vector defined by
341
- * \f$ v_i = [ 0, \ldots, 0, 1, matA(i+2,i), \ldots, matA(N-1,i) ]^T \f$.
342
- *
343
- * Implemented from Golub's "Matrix Computations", algorithm 8.3.1.
344
- *
345
- * \sa Tridiagonalization::packedMatrix()
346
- */
347
- template<typename MatrixType, typename CoeffVectorType>
348
- EIGEN_DEVICE_FUNC
349
- void tridiagonalization_inplace(MatrixType& matA, CoeffVectorType& hCoeffs)
350
- {
309
+ * Performs a tridiagonal decomposition of the selfadjoint matrix \a matA in-place.
310
+ *
311
+ * \param[in,out] matA On input the selfadjoint matrix. Only the \b lower triangular part is referenced.
312
+ * On output, the strict upper part is left unchanged, and the lower triangular part
313
+ * represents the T and Q matrices in packed format has detailed below.
314
+ * \param[out] hCoeffs returned Householder coefficients (see below)
315
+ *
316
+ * On output, the tridiagonal selfadjoint matrix T is stored in the diagonal
317
+ * and lower sub-diagonal of the matrix \a matA.
318
+ * The unitary matrix Q is represented in a compact way as a product of
319
+ * Householder reflectors \f$ H_i \f$ such that:
320
+ * \f$ Q = H_{N-1} \ldots H_1 H_0 \f$.
321
+ * The Householder reflectors are defined as
322
+ * \f$ H_i = (I - h_i v_i v_i^T) \f$
323
+ * where \f$ h_i = hCoeffs[i]\f$ is the \f$ i \f$th Householder coefficient and
324
+ * \f$ v_i \f$ is the Householder vector defined by
325
+ * \f$ v_i = [ 0, \ldots, 0, 1, matA(i+2,i), \ldots, matA(N-1,i) ]^T \f$.
326
+ *
327
+ * Implemented from Golub's "Matrix Computations", algorithm 8.3.1.
328
+ *
329
+ * \sa Tridiagonalization::packedMatrix()
330
+ */
331
+ template <typename MatrixType, typename CoeffVectorType>
332
+ EIGEN_DEVICE_FUNC void tridiagonalization_inplace(MatrixType& matA, CoeffVectorType& hCoeffs) {
351
333
  using numext::conj;
352
334
  typedef typename MatrixType::Scalar Scalar;
353
335
  typedef typename MatrixType::RealScalar RealScalar;
354
336
  Index n = matA.rows();
355
- eigen_assert(n==matA.cols());
356
- eigen_assert(n==hCoeffs.size()+1 || n==1);
337
+ eigen_assert(n == matA.cols());
338
+ eigen_assert(n == hCoeffs.size() + 1 || n == 1);
357
339
 
358
- for (Index i = 0; i<n-1; ++i)
359
- {
360
- Index remainingSize = n-i-1;
340
+ for (Index i = 0; i < n - 1; ++i) {
341
+ Index remainingSize = n - i - 1;
361
342
  RealScalar beta;
362
343
  Scalar h;
363
344
  matA.col(i).tail(remainingSize).makeHouseholderInPlace(h, beta);
364
345
 
365
346
  // Apply similarity transformation to remaining columns,
366
347
  // i.e., A = H A H' where H = I - h v v' and v = matA.col(i).tail(n-i-1)
367
- matA.col(i).coeffRef(i+1) = 1;
348
+ matA.col(i).coeffRef(i + 1) = Scalar(1);
368
349
 
369
- hCoeffs.tail(n-i-1).noalias() = (matA.bottomRightCorner(remainingSize,remainingSize).template selfadjointView<Lower>()
370
- * (conj(h) * matA.col(i).tail(remainingSize)));
350
+ hCoeffs.tail(n - i - 1).noalias() =
351
+ (matA.bottomRightCorner(remainingSize, remainingSize).template selfadjointView<Lower>() *
352
+ (conj(h) * matA.col(i).tail(remainingSize)));
371
353
 
372
- hCoeffs.tail(n-i-1) += (conj(h)*RealScalar(-0.5)*(hCoeffs.tail(remainingSize).dot(matA.col(i).tail(remainingSize)))) * matA.col(i).tail(n-i-1);
354
+ hCoeffs.tail(n - i - 1) +=
355
+ (conj(h) * RealScalar(-0.5) * (hCoeffs.tail(remainingSize).dot(matA.col(i).tail(remainingSize)))) *
356
+ matA.col(i).tail(n - i - 1);
373
357
 
374
- matA.bottomRightCorner(remainingSize, remainingSize).template selfadjointView<Lower>()
375
- .rankUpdate(matA.col(i).tail(remainingSize), hCoeffs.tail(remainingSize), Scalar(-1));
358
+ matA.bottomRightCorner(remainingSize, remainingSize)
359
+ .template selfadjointView<Lower>()
360
+ .rankUpdate(matA.col(i).tail(remainingSize), hCoeffs.tail(remainingSize), Scalar(-1));
376
361
 
377
- matA.col(i).coeffRef(i+1) = beta;
362
+ matA.col(i).coeffRef(i + 1) = beta;
378
363
  hCoeffs.coeffRef(i) = h;
379
364
  }
380
365
  }
381
366
 
382
367
  // forward declaration, implementation at the end of this file
383
- template<typename MatrixType,
384
- int Size=MatrixType::ColsAtCompileTime,
385
- bool IsComplex=NumTraits<typename MatrixType::Scalar>::IsComplex>
368
+ template <typename MatrixType, int Size = MatrixType::ColsAtCompileTime,
369
+ bool IsComplex = NumTraits<typename MatrixType::Scalar>::IsComplex>
386
370
  struct tridiagonalization_inplace_selector;
387
371
 
388
372
  /** \brief Performs a full tridiagonalization in place
389
- *
390
- * \param[in,out] mat On input, the selfadjoint matrix whose tridiagonal
391
- * decomposition is to be computed. Only the lower triangular part referenced.
392
- * The rest is left unchanged. On output, the orthogonal matrix Q
393
- * in the decomposition if \p extractQ is true.
394
- * \param[out] diag The diagonal of the tridiagonal matrix T in the
395
- * decomposition.
396
- * \param[out] subdiag The subdiagonal of the tridiagonal matrix T in
397
- * the decomposition.
398
- * \param[in] extractQ If true, the orthogonal matrix Q in the
399
- * decomposition is computed and stored in \p mat.
400
- *
401
- * Computes the tridiagonal decomposition of the selfadjoint matrix \p mat in place
402
- * such that \f$ mat = Q T Q^* \f$ where \f$ Q \f$ is unitary and \f$ T \f$ a real
403
- * symmetric tridiagonal matrix.
404
- *
405
- * The tridiagonal matrix T is passed to the output parameters \p diag and \p subdiag. If
406
- * \p extractQ is true, then the orthogonal matrix Q is passed to \p mat. Otherwise the lower
407
- * part of the matrix \p mat is destroyed.
408
- *
409
- * The vectors \p diag and \p subdiag are not resized. The function
410
- * assumes that they are already of the correct size. The length of the
411
- * vector \p diag should equal the number of rows in \p mat, and the
412
- * length of the vector \p subdiag should be one left.
413
- *
414
- * This implementation contains an optimized path for 3-by-3 matrices
415
- * which is especially useful for plane fitting.
416
- *
417
- * \note Currently, it requires two temporary vectors to hold the intermediate
418
- * Householder coefficients, and to reconstruct the matrix Q from the Householder
419
- * reflectors.
420
- *
421
- * Example (this uses the same matrix as the example in
422
- * Tridiagonalization::Tridiagonalization(const MatrixType&)):
423
- * \include Tridiagonalization_decomposeInPlace.cpp
424
- * Output: \verbinclude Tridiagonalization_decomposeInPlace.out
425
- *
426
- * \sa class Tridiagonalization
427
- */
428
- template<typename MatrixType, typename DiagonalType, typename SubDiagonalType, typename CoeffVectorType>
429
- EIGEN_DEVICE_FUNC
430
- void tridiagonalization_inplace(MatrixType& mat, DiagonalType& diag, SubDiagonalType& subdiag,
431
- CoeffVectorType& hcoeffs, bool extractQ)
432
- {
433
- eigen_assert(mat.cols()==mat.rows() && diag.size()==mat.rows() && subdiag.size()==mat.rows()-1);
434
- tridiagonalization_inplace_selector<MatrixType>::run(mat, diag, subdiag, hcoeffs, extractQ);
373
+ *
374
+ * \param[in,out] mat On input, the selfadjoint matrix whose tridiagonal
375
+ * decomposition is to be computed. Only the lower triangular part referenced.
376
+ * The rest is left unchanged. On output, the orthogonal matrix Q
377
+ * in the decomposition if \p extractQ is true.
378
+ * \param[out] diag The diagonal of the tridiagonal matrix T in the
379
+ * decomposition.
380
+ * \param[out] subdiag The subdiagonal of the tridiagonal matrix T in
381
+ * the decomposition.
382
+ * \param[out] hcoeffs
383
+ * \param[out] workspace
384
+ * \param[in] extractQ If true, the orthogonal matrix Q in the
385
+ * decomposition is computed and stored in \p mat.
386
+ *
387
+ * Computes the tridiagonal decomposition of the selfadjoint matrix \p mat in place
388
+ * such that \f$ mat = Q T Q^* \f$ where \f$ Q \f$ is unitary and \f$ T \f$ a real
389
+ * symmetric tridiagonal matrix.
390
+ *
391
+ * The tridiagonal matrix T is passed to the output parameters \p diag and \p subdiag. If
392
+ * \p extractQ is true, then the orthogonal matrix Q is passed to \p mat. Otherwise the lower
393
+ * part of the matrix \p mat is destroyed.
394
+ *
395
+ * The vectors \p diag and \p subdiag are not resized. The function
396
+ * assumes that they are already of the correct size. The length of the
397
+ * vector \p diag should equal the number of rows in \p mat, and the
398
+ * length of the vector \p subdiag should be one left.
399
+ *
400
+ * This implementation contains an optimized path for 3-by-3 matrices
401
+ * which is especially useful for plane fitting.
402
+ *
403
+ * \note Currently, it requires two temporary vectors to hold the intermediate
404
+ * Householder coefficients, and to reconstruct the matrix Q from the Householder
405
+ * reflectors.
406
+ *
407
+ * Example (this uses the same matrix as the example in
408
+ * Tridiagonalization::Tridiagonalization(const MatrixType&)):
409
+ * \include Tridiagonalization_decomposeInPlace.cpp
410
+ * Output: \verbinclude Tridiagonalization_decomposeInPlace.out
411
+ *
412
+ * \sa class Tridiagonalization
413
+ */
414
+ template <typename MatrixType, typename DiagonalType, typename SubDiagonalType, typename CoeffVectorType,
415
+ typename WorkSpaceType>
416
+ EIGEN_DEVICE_FUNC void tridiagonalization_inplace(MatrixType& mat, DiagonalType& diag, SubDiagonalType& subdiag,
417
+ CoeffVectorType& hcoeffs, WorkSpaceType& workspace, bool extractQ) {
418
+ eigen_assert(mat.cols() == mat.rows() && diag.size() == mat.rows() && subdiag.size() == mat.rows() - 1);
419
+ tridiagonalization_inplace_selector<MatrixType>::run(mat, diag, subdiag, hcoeffs, workspace, extractQ);
435
420
  }
436
421
 
437
422
  /** \internal
438
- * General full tridiagonalization
439
- */
440
- template<typename MatrixType, int Size, bool IsComplex>
441
- struct tridiagonalization_inplace_selector
442
- {
443
- typedef typename Tridiagonalization<MatrixType>::CoeffVectorType CoeffVectorType;
423
+ * General full tridiagonalization
424
+ */
425
+ template <typename MatrixType, int Size, bool IsComplex>
426
+ struct tridiagonalization_inplace_selector {
444
427
  typedef typename Tridiagonalization<MatrixType>::HouseholderSequenceType HouseholderSequenceType;
445
- template<typename DiagonalType, typename SubDiagonalType>
446
- static EIGEN_DEVICE_FUNC
447
- void run(MatrixType& mat, DiagonalType& diag, SubDiagonalType& subdiag, CoeffVectorType& hCoeffs, bool extractQ)
448
- {
428
+ template <typename DiagonalType, typename SubDiagonalType, typename CoeffVectorType, typename WorkSpaceType>
429
+ static EIGEN_DEVICE_FUNC void run(MatrixType& mat, DiagonalType& diag, SubDiagonalType& subdiag,
430
+ CoeffVectorType& hCoeffs, WorkSpaceType& workspace, bool extractQ) {
449
431
  tridiagonalization_inplace(mat, hCoeffs);
450
432
  diag = mat.diagonal().real();
451
433
  subdiag = mat.template diagonal<-1>().real();
452
- if(extractQ)
453
- mat = HouseholderSequenceType(mat, hCoeffs.conjugate())
454
- .setLength(mat.rows() - 1)
455
- .setShift(1);
434
+ if (extractQ) {
435
+ HouseholderSequenceType(mat, hCoeffs.conjugate()).setLength(mat.rows() - 1).setShift(1).evalTo(mat, workspace);
436
+ }
456
437
  }
457
438
  };
458
439
 
459
440
  /** \internal
460
- * Specialization for 3x3 real matrices.
461
- * Especially useful for plane fitting.
462
- */
463
- template<typename MatrixType>
464
- struct tridiagonalization_inplace_selector<MatrixType,3,false>
465
- {
441
+ * Specialization for 3x3 real matrices.
442
+ * Especially useful for plane fitting.
443
+ */
444
+ template <typename MatrixType>
445
+ struct tridiagonalization_inplace_selector<MatrixType, 3, false> {
466
446
  typedef typename MatrixType::Scalar Scalar;
467
447
  typedef typename MatrixType::RealScalar RealScalar;
468
448
 
469
- template<typename DiagonalType, typename SubDiagonalType, typename CoeffVectorType>
470
- static void run(MatrixType& mat, DiagonalType& diag, SubDiagonalType& subdiag, CoeffVectorType&, bool extractQ)
471
- {
449
+ template <typename DiagonalType, typename SubDiagonalType, typename CoeffVectorType, typename WorkSpaceType>
450
+ static EIGEN_DEVICE_FUNC void run(MatrixType& mat, DiagonalType& diag, SubDiagonalType& subdiag, CoeffVectorType&,
451
+ WorkSpaceType&, bool extractQ) {
472
452
  using std::sqrt;
473
453
  const RealScalar tol = (std::numeric_limits<RealScalar>::min)();
474
- diag[0] = mat(0,0);
475
- RealScalar v1norm2 = numext::abs2(mat(2,0));
476
- if(v1norm2 <= tol)
477
- {
478
- diag[1] = mat(1,1);
479
- diag[2] = mat(2,2);
480
- subdiag[0] = mat(1,0);
481
- subdiag[1] = mat(2,1);
482
- if (extractQ)
483
- mat.setIdentity();
484
- }
485
- else
486
- {
487
- RealScalar beta = sqrt(numext::abs2(mat(1,0)) + v1norm2);
488
- RealScalar invBeta = RealScalar(1)/beta;
489
- Scalar m01 = mat(1,0) * invBeta;
490
- Scalar m02 = mat(2,0) * invBeta;
491
- Scalar q = RealScalar(2)*m01*mat(2,1) + m02*(mat(2,2) - mat(1,1));
492
- diag[1] = mat(1,1) + m02*q;
493
- diag[2] = mat(2,2) - m02*q;
454
+ diag[0] = mat(0, 0);
455
+ RealScalar v1norm2 = numext::abs2(mat(2, 0));
456
+ if (v1norm2 <= tol) {
457
+ diag[1] = mat(1, 1);
458
+ diag[2] = mat(2, 2);
459
+ subdiag[0] = mat(1, 0);
460
+ subdiag[1] = mat(2, 1);
461
+ if (extractQ) mat.setIdentity();
462
+ } else {
463
+ RealScalar beta = sqrt(numext::abs2(mat(1, 0)) + v1norm2);
464
+ RealScalar invBeta = RealScalar(1) / beta;
465
+ Scalar m01 = mat(1, 0) * invBeta;
466
+ Scalar m02 = mat(2, 0) * invBeta;
467
+ Scalar q = RealScalar(2) * m01 * mat(2, 1) + m02 * (mat(2, 2) - mat(1, 1));
468
+ diag[1] = mat(1, 1) + m02 * q;
469
+ diag[2] = mat(2, 2) - m02 * q;
494
470
  subdiag[0] = beta;
495
- subdiag[1] = mat(2,1) - m01 * q;
496
- if (extractQ)
497
- {
498
- mat << 1, 0, 0,
499
- 0, m01, m02,
500
- 0, m02, -m01;
471
+ subdiag[1] = mat(2, 1) - m01 * q;
472
+ if (extractQ) {
473
+ mat << 1, 0, 0, 0, m01, m02, 0, m02, -m01;
501
474
  }
502
475
  }
503
476
  }
504
477
  };
505
478
 
506
479
  /** \internal
507
- * Trivial specialization for 1x1 matrices
508
- */
509
- template<typename MatrixType, bool IsComplex>
510
- struct tridiagonalization_inplace_selector<MatrixType,1,IsComplex>
511
- {
480
+ * Trivial specialization for 1x1 matrices
481
+ */
482
+ template <typename MatrixType, bool IsComplex>
483
+ struct tridiagonalization_inplace_selector<MatrixType, 1, IsComplex> {
512
484
  typedef typename MatrixType::Scalar Scalar;
513
485
 
514
- template<typename DiagonalType, typename SubDiagonalType, typename CoeffVectorType>
515
- static EIGEN_DEVICE_FUNC
516
- void run(MatrixType& mat, DiagonalType& diag, SubDiagonalType&, CoeffVectorType&, bool extractQ)
517
- {
518
- diag(0,0) = numext::real(mat(0,0));
519
- if(extractQ)
520
- mat(0,0) = Scalar(1);
486
+ template <typename DiagonalType, typename SubDiagonalType, typename CoeffVectorType, typename WorkSpaceType>
487
+ static EIGEN_DEVICE_FUNC void run(MatrixType& mat, DiagonalType& diag, SubDiagonalType&, CoeffVectorType&,
488
+ WorkSpaceType&, bool extractQ) {
489
+ diag(0, 0) = numext::real(mat(0, 0));
490
+ if (extractQ) mat(0, 0) = Scalar(1);
521
491
  }
522
492
  };
523
493
 
524
494
  /** \internal
525
- * \eigenvalues_module \ingroup Eigenvalues_Module
526
- *
527
- * \brief Expression type for return value of Tridiagonalization::matrixT()
528
- *
529
- * \tparam MatrixType type of underlying dense matrix
530
- */
531
- template<typename MatrixType> struct TridiagonalizationMatrixTReturnType
532
- : public ReturnByValue<TridiagonalizationMatrixTReturnType<MatrixType> >
533
- {
534
- public:
535
- /** \brief Constructor.
536
- *
537
- * \param[in] mat The underlying dense matrix
538
- */
539
- TridiagonalizationMatrixTReturnType(const MatrixType& mat) : m_matrix(mat) { }
540
-
541
- template <typename ResultType>
542
- inline void evalTo(ResultType& result) const
543
- {
544
- result.setZero();
545
- result.template diagonal<1>() = m_matrix.template diagonal<-1>().conjugate();
546
- result.diagonal() = m_matrix.diagonal();
547
- result.template diagonal<-1>() = m_matrix.template diagonal<-1>();
548
- }
495
+ * \eigenvalues_module \ingroup Eigenvalues_Module
496
+ *
497
+ * \brief Expression type for return value of Tridiagonalization::matrixT()
498
+ *
499
+ * \tparam MatrixType type of underlying dense matrix
500
+ */
501
+ template <typename MatrixType>
502
+ struct TridiagonalizationMatrixTReturnType : public ReturnByValue<TridiagonalizationMatrixTReturnType<MatrixType>> {
503
+ public:
504
+ /** \brief Constructor.
505
+ *
506
+ * \param[in] mat The underlying dense matrix
507
+ */
508
+ TridiagonalizationMatrixTReturnType(const MatrixType& mat) : m_matrix(mat) {}
509
+
510
+ template <typename ResultType>
511
+ inline void evalTo(ResultType& result) const {
512
+ result.setZero();
513
+ result.template diagonal<1>() = m_matrix.template diagonal<-1>().conjugate();
514
+ result.diagonal() = m_matrix.diagonal();
515
+ result.template diagonal<-1>() = m_matrix.template diagonal<-1>();
516
+ }
549
517
 
550
- EIGEN_CONSTEXPR Index rows() const EIGEN_NOEXCEPT { return m_matrix.rows(); }
551
- EIGEN_CONSTEXPR Index cols() const EIGEN_NOEXCEPT { return m_matrix.cols(); }
518
+ constexpr Index rows() const noexcept { return m_matrix.rows(); }
519
+ constexpr Index cols() const noexcept { return m_matrix.cols(); }
552
520
 
553
- protected:
554
- typename MatrixType::Nested m_matrix;
521
+ protected:
522
+ typename MatrixType::Nested m_matrix;
555
523
  };
556
524
 
557
- } // end namespace internal
525
+ } // end namespace internal
558
526
 
559
- } // end namespace Eigen
527
+ } // end namespace Eigen
560
528
 
561
- #endif // EIGEN_TRIDIAGONALIZATION_H
529
+ #endif // EIGEN_TRIDIAGONALIZATION_H