@smake/eigen 1.0.2 → 1.1.1

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