@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
@@ -12,313 +12,442 @@
12
12
  #ifndef EIGEN_QR_H
13
13
  #define EIGEN_QR_H
14
14
 
15
- namespace Eigen {
15
+ // IWYU pragma: private
16
+ #include "./InternalHeaderCheck.h"
17
+
18
+ namespace Eigen {
19
+
20
+ namespace internal {
21
+ template <typename MatrixType_>
22
+ struct traits<HouseholderQR<MatrixType_>> : traits<MatrixType_> {
23
+ typedef MatrixXpr XprKind;
24
+ typedef SolverStorage StorageKind;
25
+ typedef int StorageIndex;
26
+ enum { Flags = 0 };
27
+ };
28
+
29
+ } // end namespace internal
16
30
 
17
31
  /** \ingroup QR_Module
18
- *
19
- *
20
- * \class HouseholderQR
21
- *
22
- * \brief Householder QR decomposition of a matrix
23
- *
24
- * \tparam _MatrixType the type of the matrix of which we are computing the QR decomposition
25
- *
26
- * This class performs a QR decomposition of a matrix \b A into matrices \b Q and \b R
27
- * such that
28
- * \f[
29
- * \mathbf{A} = \mathbf{Q} \, \mathbf{R}
30
- * \f]
31
- * by using Householder transformations. Here, \b Q a unitary matrix and \b R an upper triangular matrix.
32
- * The result is stored in a compact way compatible with LAPACK.
33
- *
34
- * Note that no pivoting is performed. This is \b not a rank-revealing decomposition.
35
- * If you want that feature, use FullPivHouseholderQR or ColPivHouseholderQR instead.
36
- *
37
- * This Householder QR decomposition is faster, but less numerically stable and less feature-full than
38
- * FullPivHouseholderQR or ColPivHouseholderQR.
39
- *
40
- * This class supports the \link InplaceDecomposition inplace decomposition \endlink mechanism.
41
- *
42
- * \sa MatrixBase::householderQr()
43
- */
44
- template<typename _MatrixType> class HouseholderQR
45
- {
46
- public:
47
-
48
- typedef _MatrixType MatrixType;
49
- enum {
50
- RowsAtCompileTime = MatrixType::RowsAtCompileTime,
51
- ColsAtCompileTime = MatrixType::ColsAtCompileTime,
52
- MaxRowsAtCompileTime = MatrixType::MaxRowsAtCompileTime,
53
- MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime
54
- };
55
- typedef typename MatrixType::Scalar Scalar;
56
- typedef typename MatrixType::RealScalar RealScalar;
57
- // FIXME should be int
58
- typedef typename MatrixType::StorageIndex StorageIndex;
59
- typedef Matrix<Scalar, RowsAtCompileTime, RowsAtCompileTime, (MatrixType::Flags&RowMajorBit) ? RowMajor : ColMajor, MaxRowsAtCompileTime, MaxRowsAtCompileTime> MatrixQType;
60
- typedef typename internal::plain_diag_type<MatrixType>::type HCoeffsType;
61
- typedef typename internal::plain_row_type<MatrixType>::type RowVectorType;
62
- typedef HouseholderSequence<MatrixType,typename internal::remove_all<typename HCoeffsType::ConjugateReturnType>::type> HouseholderSequenceType;
63
-
64
- /**
65
- * \brief Default Constructor.
66
- *
67
- * The default constructor is useful in cases in which the user intends to
68
- * perform decompositions via HouseholderQR::compute(const MatrixType&).
69
- */
70
- HouseholderQR() : m_qr(), m_hCoeffs(), m_temp(), m_isInitialized(false) {}
71
-
72
- /** \brief Default Constructor with memory preallocation
73
- *
74
- * Like the default constructor but with preallocation of the internal data
75
- * according to the specified problem \a size.
76
- * \sa HouseholderQR()
77
- */
78
- HouseholderQR(Index rows, Index cols)
79
- : m_qr(rows, cols),
80
- m_hCoeffs((std::min)(rows,cols)),
81
- m_temp(cols),
82
- m_isInitialized(false) {}
83
-
84
- /** \brief Constructs a QR factorization from a given matrix
85
- *
86
- * This constructor computes the QR factorization of the matrix \a matrix by calling
87
- * the method compute(). It is a short cut for:
88
- *
89
- * \code
90
- * HouseholderQR<MatrixType> qr(matrix.rows(), matrix.cols());
91
- * qr.compute(matrix);
92
- * \endcode
93
- *
94
- * \sa compute()
95
- */
96
- template<typename InputType>
97
- explicit HouseholderQR(const EigenBase<InputType>& matrix)
32
+ *
33
+ *
34
+ * \class HouseholderQR
35
+ *
36
+ * \brief Householder QR decomposition of a matrix
37
+ *
38
+ * \tparam MatrixType_ the type of the matrix of which we are computing the QR decomposition
39
+ *
40
+ * This class performs a QR decomposition of a matrix \b A into matrices \b Q and \b R
41
+ * such that
42
+ * \f[
43
+ * \mathbf{A} = \mathbf{Q} \, \mathbf{R}
44
+ * \f]
45
+ * by using Householder transformations. Here, \b Q a unitary matrix and \b R an upper triangular matrix.
46
+ * The result is stored in a compact way compatible with LAPACK.
47
+ *
48
+ * Note that no pivoting is performed. This is \b not a rank-revealing decomposition.
49
+ * If you want that feature, use FullPivHouseholderQR or ColPivHouseholderQR instead.
50
+ *
51
+ * This Householder QR decomposition is faster, but less numerically stable and less feature-full than
52
+ * FullPivHouseholderQR or ColPivHouseholderQR.
53
+ *
54
+ * This class supports the \link InplaceDecomposition inplace decomposition \endlink mechanism.
55
+ *
56
+ * \sa MatrixBase::householderQr()
57
+ */
58
+ template <typename MatrixType_>
59
+ class HouseholderQR : public SolverBase<HouseholderQR<MatrixType_>> {
60
+ public:
61
+ typedef MatrixType_ MatrixType;
62
+ typedef SolverBase<HouseholderQR> Base;
63
+ friend class SolverBase<HouseholderQR>;
64
+
65
+ EIGEN_GENERIC_PUBLIC_INTERFACE(HouseholderQR)
66
+ enum {
67
+ MaxRowsAtCompileTime = MatrixType::MaxRowsAtCompileTime,
68
+ MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime
69
+ };
70
+ typedef Matrix<Scalar, RowsAtCompileTime, RowsAtCompileTime, (MatrixType::Flags & RowMajorBit) ? RowMajor : ColMajor,
71
+ MaxRowsAtCompileTime, MaxRowsAtCompileTime>
72
+ MatrixQType;
73
+ typedef typename internal::plain_diag_type<MatrixType>::type HCoeffsType;
74
+ typedef typename internal::plain_row_type<MatrixType>::type RowVectorType;
75
+ typedef HouseholderSequence<MatrixType, internal::remove_all_t<typename HCoeffsType::ConjugateReturnType>>
76
+ HouseholderSequenceType;
77
+
78
+ /** \brief Reports whether the QR factorization was successful.
79
+ *
80
+ * \note This function always returns \c Success. It is provided for compatibility
81
+ * with other factorization routines.
82
+ * \returns \c Success
83
+ */
84
+ ComputationInfo info() const {
85
+ eigen_assert(m_isInitialized && "HouseHolderQR is not initialized.");
86
+ return Success;
87
+ }
88
+
89
+ /**
90
+ * \brief Default Constructor.
91
+ *
92
+ * The default constructor is useful in cases in which the user intends to
93
+ * perform decompositions via HouseholderQR::compute(const MatrixType&).
94
+ */
95
+ HouseholderQR() : m_qr(), m_hCoeffs(), m_temp(), m_isInitialized(false) {}
96
+
97
+ /** \brief Default Constructor with memory preallocation
98
+ *
99
+ * Like the default constructor but with preallocation of the internal data
100
+ * according to the specified problem \a size.
101
+ * \sa HouseholderQR()
102
+ */
103
+ HouseholderQR(Index rows, Index cols)
104
+ : m_qr(rows, cols), m_hCoeffs((std::min)(rows, cols)), m_temp(cols), m_isInitialized(false) {}
105
+
106
+ /** \brief Constructs a QR factorization from a given matrix
107
+ *
108
+ * This constructor computes the QR factorization of the matrix \a matrix by calling
109
+ * the method compute(). It is a short cut for:
110
+ *
111
+ * \code
112
+ * HouseholderQR<MatrixType> qr(matrix.rows(), matrix.cols());
113
+ * qr.compute(matrix);
114
+ * \endcode
115
+ *
116
+ * \sa compute()
117
+ */
118
+ template <typename InputType>
119
+ explicit HouseholderQR(const EigenBase<InputType>& matrix)
98
120
  : m_qr(matrix.rows(), matrix.cols()),
99
- m_hCoeffs((std::min)(matrix.rows(),matrix.cols())),
121
+ m_hCoeffs((std::min)(matrix.rows(), matrix.cols())),
100
122
  m_temp(matrix.cols()),
101
- m_isInitialized(false)
102
- {
103
- compute(matrix.derived());
104
- }
105
-
123
+ m_isInitialized(false) {
124
+ compute(matrix.derived());
125
+ }
106
126
 
107
- /** \brief Constructs a QR factorization from a given matrix
108
- *
109
- * This overloaded constructor is provided for \link InplaceDecomposition inplace decomposition \endlink when
110
- * \c MatrixType is a Eigen::Ref.
111
- *
112
- * \sa HouseholderQR(const EigenBase&)
113
- */
114
- template<typename InputType>
115
- explicit HouseholderQR(EigenBase<InputType>& matrix)
127
+ /** \brief Constructs a QR factorization from a given matrix
128
+ *
129
+ * This overloaded constructor is provided for \link InplaceDecomposition inplace decomposition \endlink when
130
+ * \c MatrixType is a Eigen::Ref.
131
+ *
132
+ * \sa HouseholderQR(const EigenBase&)
133
+ */
134
+ template <typename InputType>
135
+ explicit HouseholderQR(EigenBase<InputType>& matrix)
116
136
  : m_qr(matrix.derived()),
117
- m_hCoeffs((std::min)(matrix.rows(),matrix.cols())),
137
+ m_hCoeffs((std::min)(matrix.rows(), matrix.cols())),
118
138
  m_temp(matrix.cols()),
119
- m_isInitialized(false)
120
- {
121
- computeInPlace();
122
- }
139
+ m_isInitialized(false) {
140
+ computeInPlace();
141
+ }
123
142
 
124
- /** This method finds a solution x to the equation Ax=b, where A is the matrix of which
125
- * *this is the QR decomposition, if any exists.
126
- *
127
- * \param b the right-hand-side of the equation to solve.
128
- *
129
- * \returns a solution.
130
- *
131
- * \note_about_checking_solutions
132
- *
133
- * \note_about_arbitrary_choice_of_solution
134
- *
135
- * Example: \include HouseholderQR_solve.cpp
136
- * Output: \verbinclude HouseholderQR_solve.out
137
- */
138
- template<typename Rhs>
139
- inline const Solve<HouseholderQR, Rhs>
140
- solve(const MatrixBase<Rhs>& b) const
141
- {
142
- eigen_assert(m_isInitialized && "HouseholderQR is not initialized.");
143
- return Solve<HouseholderQR, Rhs>(*this, b.derived());
144
- }
143
+ #ifdef EIGEN_PARSED_BY_DOXYGEN
144
+ /** This method finds a solution x to the equation Ax=b, where A is the matrix of which
145
+ * *this is the QR decomposition, if any exists.
146
+ *
147
+ * \param b the right-hand-side of the equation to solve.
148
+ *
149
+ * \returns a solution.
150
+ *
151
+ * \note_about_checking_solutions
152
+ *
153
+ * \note_about_arbitrary_choice_of_solution
154
+ *
155
+ * Example: \include HouseholderQR_solve.cpp
156
+ * Output: \verbinclude HouseholderQR_solve.out
157
+ */
158
+ template <typename Rhs>
159
+ inline const Solve<HouseholderQR, Rhs> solve(const MatrixBase<Rhs>& b) const;
160
+ #endif
145
161
 
146
- /** This method returns an expression of the unitary matrix Q as a sequence of Householder transformations.
147
- *
148
- * The returned expression can directly be used to perform matrix products. It can also be assigned to a dense Matrix object.
149
- * Here is an example showing how to recover the full or thin matrix Q, as well as how to perform matrix products using operator*:
150
- *
151
- * Example: \include HouseholderQR_householderQ.cpp
152
- * Output: \verbinclude HouseholderQR_householderQ.out
153
- */
154
- HouseholderSequenceType householderQ() const
155
- {
156
- eigen_assert(m_isInitialized && "HouseholderQR is not initialized.");
157
- return HouseholderSequenceType(m_qr, m_hCoeffs.conjugate());
158
- }
162
+ /** This method returns an expression of the unitary matrix Q as a sequence of Householder transformations.
163
+ *
164
+ * The returned expression can directly be used to perform matrix products. It can also be assigned to a dense Matrix
165
+ * object. Here is an example showing how to recover the full or thin matrix Q, as well as how to perform matrix
166
+ * products using operator*:
167
+ *
168
+ * Example: \include HouseholderQR_householderQ.cpp
169
+ * Output: \verbinclude HouseholderQR_householderQ.out
170
+ */
171
+ HouseholderSequenceType householderQ() const {
172
+ eigen_assert(m_isInitialized && "HouseholderQR is not initialized.");
173
+ return HouseholderSequenceType(m_qr, m_hCoeffs.conjugate());
174
+ }
159
175
 
160
- /** \returns a reference to the matrix where the Householder QR decomposition is stored
161
- * in a LAPACK-compatible way.
162
- */
163
- const MatrixType& matrixQR() const
164
- {
165
- eigen_assert(m_isInitialized && "HouseholderQR is not initialized.");
166
- return m_qr;
167
- }
176
+ /** \returns a reference to the matrix where the Householder QR decomposition is stored
177
+ * in a LAPACK-compatible way.
178
+ */
179
+ const MatrixType& matrixQR() const {
180
+ eigen_assert(m_isInitialized && "HouseholderQR is not initialized.");
181
+ return m_qr;
182
+ }
168
183
 
169
- template<typename InputType>
170
- HouseholderQR& compute(const EigenBase<InputType>& matrix) {
171
- m_qr = matrix.derived();
172
- computeInPlace();
173
- return *this;
174
- }
184
+ template <typename InputType>
185
+ HouseholderQR& compute(const EigenBase<InputType>& matrix) {
186
+ m_qr = matrix.derived();
187
+ computeInPlace();
188
+ return *this;
189
+ }
190
+
191
+ /** \returns the determinant of the matrix of which
192
+ * *this is the QR decomposition. It has only linear complexity
193
+ * (that is, O(n) where n is the dimension of the square matrix)
194
+ * as the QR decomposition has already been computed.
195
+ *
196
+ * \note This is only for square matrices.
197
+ *
198
+ * \warning a determinant can be very big or small, so for matrices
199
+ * of large enough dimension, there is a risk of overflow/underflow.
200
+ * One way to work around that is to use logAbsDeterminant() instead.
201
+ * Also, do not rely on the determinant being exactly zero for testing
202
+ * singularity or rank-deficiency.
203
+ *
204
+ * \sa absDeterminant(), logAbsDeterminant(), MatrixBase::determinant()
205
+ */
206
+ typename MatrixType::Scalar determinant() const;
207
+
208
+ /** \returns the absolute value of the determinant of the matrix of which
209
+ * *this is the QR decomposition. It has only linear complexity
210
+ * (that is, O(n) where n is the dimension of the square matrix)
211
+ * as the QR decomposition has already been computed.
212
+ *
213
+ * \note This is only for square matrices.
214
+ *
215
+ * \warning a determinant can be very big or small, so for matrices
216
+ * of large enough dimension, there is a risk of overflow/underflow.
217
+ * One way to work around that is to use logAbsDeterminant() instead.
218
+ * Also, do not rely on the determinant being exactly zero for testing
219
+ * singularity or rank-deficiency.
220
+ *
221
+ * \sa determinant(), logAbsDeterminant(), MatrixBase::determinant()
222
+ */
223
+ typename MatrixType::RealScalar absDeterminant() const;
224
+
225
+ /** \returns the natural log of the absolute value of the determinant of the matrix of which
226
+ * *this is the QR decomposition. It has only linear complexity
227
+ * (that is, O(n) where n is the dimension of the square matrix)
228
+ * as the QR decomposition has already been computed.
229
+ *
230
+ * \note This is only for square matrices.
231
+ *
232
+ * \note This method is useful to work around the risk of overflow/underflow that's inherent
233
+ * to determinant computation.
234
+ *
235
+ * \warning Do not rely on the determinant being exactly zero for testing
236
+ * singularity or rank-deficiency.
237
+ *
238
+ * \sa determinant(), absDeterminant(), MatrixBase::determinant()
239
+ */
240
+ typename MatrixType::RealScalar logAbsDeterminant() const;
241
+
242
+ /** \returns the sign of the determinant of the matrix of which
243
+ * *this is the QR decomposition. It has only linear complexity
244
+ * (that is, O(n) where n is the dimension of the square matrix)
245
+ * as the QR decomposition has already been computed.
246
+ *
247
+ * \note This is only for square matrices.
248
+ *
249
+ * \note This method is useful to work around the risk of overflow/underflow that's inherent
250
+ * to determinant computation.
251
+ *
252
+ * \warning Do not rely on the determinant being exactly zero for testing
253
+ * singularity or rank-deficiency.
254
+ *
255
+ * \sa determinant(), absDeterminant(), MatrixBase::determinant()
256
+ */
257
+ typename MatrixType::Scalar signDeterminant() const;
258
+
259
+ inline Index rows() const { return m_qr.rows(); }
260
+ inline Index cols() const { return m_qr.cols(); }
261
+
262
+ /** \returns a const reference to the vector of Householder coefficients used to represent the factor \c Q.
263
+ *
264
+ * For advanced uses only.
265
+ */
266
+ const HCoeffsType& hCoeffs() const { return m_hCoeffs; }
267
+
268
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
269
+ template <typename RhsType, typename DstType>
270
+ void _solve_impl(const RhsType& rhs, DstType& dst) const;
271
+
272
+ template <bool Conjugate, typename RhsType, typename DstType>
273
+ void _solve_impl_transposed(const RhsType& rhs, DstType& dst) const;
274
+ #endif
275
+
276
+ protected:
277
+ EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar)
278
+
279
+ void computeInPlace();
280
+
281
+ MatrixType m_qr;
282
+ HCoeffsType m_hCoeffs;
283
+ RowVectorType m_temp;
284
+ bool m_isInitialized;
285
+ };
286
+
287
+ namespace internal {
175
288
 
176
- /** \returns the absolute value of the determinant of the matrix of which
177
- * *this is the QR decomposition. It has only linear complexity
178
- * (that is, O(n) where n is the dimension of the square matrix)
179
- * as the QR decomposition has already been computed.
180
- *
181
- * \note This is only for square matrices.
182
- *
183
- * \warning a determinant can be very big or small, so for matrices
184
- * of large enough dimension, there is a risk of overflow/underflow.
185
- * One way to work around that is to use logAbsDeterminant() instead.
186
- *
187
- * \sa logAbsDeterminant(), MatrixBase::determinant()
188
- */
189
- typename MatrixType::RealScalar absDeterminant() const;
190
-
191
- /** \returns the natural log of the absolute value of the determinant of the matrix of which
192
- * *this is the QR decomposition. It has only linear complexity
193
- * (that is, O(n) where n is the dimension of the square matrix)
194
- * as the QR decomposition has already been computed.
195
- *
196
- * \note This is only for square matrices.
197
- *
198
- * \note This method is useful to work around the risk of overflow/underflow that's inherent
199
- * to determinant computation.
200
- *
201
- * \sa absDeterminant(), MatrixBase::determinant()
202
- */
203
- typename MatrixType::RealScalar logAbsDeterminant() const;
204
-
205
- inline Index rows() const { return m_qr.rows(); }
206
- inline Index cols() const { return m_qr.cols(); }
207
-
208
- /** \returns a const reference to the vector of Householder coefficients used to represent the factor \c Q.
209
- *
210
- * For advanced uses only.
211
- */
212
- const HCoeffsType& hCoeffs() const { return m_hCoeffs; }
213
-
214
- #ifndef EIGEN_PARSED_BY_DOXYGEN
215
- template<typename RhsType, typename DstType>
216
- EIGEN_DEVICE_FUNC
217
- void _solve_impl(const RhsType &rhs, DstType &dst) const;
218
- #endif
219
-
220
- protected:
221
-
222
- static void check_template_parameters()
223
- {
224
- EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar);
289
+ /** \internal */
290
+ template <typename HCoeffs, typename Scalar, bool IsComplex>
291
+ struct householder_determinant {
292
+ static void run(const HCoeffs& hCoeffs, Scalar& out_det) {
293
+ out_det = Scalar(1);
294
+ Index size = hCoeffs.rows();
295
+ for (Index i = 0; i < size; i++) {
296
+ // For each valid reflection Q_n,
297
+ // det(Q_n) = - conj(h_n) / h_n
298
+ // where h_n is the Householder coefficient.
299
+ if (hCoeffs(i) != Scalar(0)) out_det *= -numext::conj(hCoeffs(i)) / hCoeffs(i);
225
300
  }
301
+ }
302
+ };
226
303
 
227
- void computeInPlace();
228
-
229
- MatrixType m_qr;
230
- HCoeffsType m_hCoeffs;
231
- RowVectorType m_temp;
232
- bool m_isInitialized;
304
+ /** \internal */
305
+ template <typename HCoeffs, typename Scalar>
306
+ struct householder_determinant<HCoeffs, Scalar, false> {
307
+ static void run(const HCoeffs& hCoeffs, Scalar& out_det) {
308
+ bool negated = false;
309
+ Index size = hCoeffs.rows();
310
+ for (Index i = 0; i < size; i++) {
311
+ // Each valid reflection negates the determinant.
312
+ if (hCoeffs(i) != Scalar(0)) negated ^= true;
313
+ }
314
+ out_det = negated ? Scalar(-1) : Scalar(1);
315
+ }
233
316
  };
234
317
 
235
- template<typename MatrixType>
236
- typename MatrixType::RealScalar HouseholderQR<MatrixType>::absDeterminant() const
237
- {
318
+ } // end namespace internal
319
+
320
+ template <typename MatrixType>
321
+ typename MatrixType::Scalar HouseholderQR<MatrixType>::determinant() const {
322
+ eigen_assert(m_isInitialized && "HouseholderQR is not initialized.");
323
+ eigen_assert(m_qr.rows() == m_qr.cols() && "You can't take the determinant of a non-square matrix!");
324
+ Scalar detQ;
325
+ internal::householder_determinant<HCoeffsType, Scalar, NumTraits<Scalar>::IsComplex>::run(m_hCoeffs, detQ);
326
+ return m_qr.diagonal().prod() * detQ;
327
+ }
328
+
329
+ template <typename MatrixType>
330
+ typename MatrixType::RealScalar HouseholderQR<MatrixType>::absDeterminant() const {
238
331
  using std::abs;
239
332
  eigen_assert(m_isInitialized && "HouseholderQR is not initialized.");
240
333
  eigen_assert(m_qr.rows() == m_qr.cols() && "You can't take the determinant of a non-square matrix!");
241
334
  return abs(m_qr.diagonal().prod());
242
335
  }
243
336
 
244
- template<typename MatrixType>
245
- typename MatrixType::RealScalar HouseholderQR<MatrixType>::logAbsDeterminant() const
246
- {
337
+ template <typename MatrixType>
338
+ typename MatrixType::RealScalar HouseholderQR<MatrixType>::logAbsDeterminant() const {
247
339
  eigen_assert(m_isInitialized && "HouseholderQR is not initialized.");
248
340
  eigen_assert(m_qr.rows() == m_qr.cols() && "You can't take the determinant of a non-square matrix!");
249
341
  return m_qr.diagonal().cwiseAbs().array().log().sum();
250
342
  }
251
343
 
344
+ template <typename MatrixType>
345
+ typename MatrixType::Scalar HouseholderQR<MatrixType>::signDeterminant() const {
346
+ eigen_assert(m_isInitialized && "HouseholderQR is not initialized.");
347
+ eigen_assert(m_qr.rows() == m_qr.cols() && "You can't take the determinant of a non-square matrix!");
348
+ Scalar detQ;
349
+ internal::householder_determinant<HCoeffsType, Scalar, NumTraits<Scalar>::IsComplex>::run(m_hCoeffs, detQ);
350
+ return detQ * m_qr.diagonal().array().sign().prod();
351
+ }
352
+
252
353
  namespace internal {
253
354
 
254
355
  /** \internal */
255
- template<typename MatrixQR, typename HCoeffs>
256
- void householder_qr_inplace_unblocked(MatrixQR& mat, HCoeffs& hCoeffs, typename MatrixQR::Scalar* tempData = 0)
257
- {
356
+ template <typename MatrixQR, typename HCoeffs>
357
+ void householder_qr_inplace_unblocked(MatrixQR& mat, HCoeffs& hCoeffs, typename MatrixQR::Scalar* tempData = 0) {
258
358
  typedef typename MatrixQR::Scalar Scalar;
259
359
  typedef typename MatrixQR::RealScalar RealScalar;
260
360
  Index rows = mat.rows();
261
361
  Index cols = mat.cols();
262
- Index size = (std::min)(rows,cols);
362
+ Index size = (std::min)(rows, cols);
263
363
 
264
364
  eigen_assert(hCoeffs.size() == size);
265
365
 
266
- typedef Matrix<Scalar,MatrixQR::ColsAtCompileTime,1> TempType;
366
+ typedef Matrix<Scalar, MatrixQR::ColsAtCompileTime, 1> TempType;
267
367
  TempType tempVector;
268
- if(tempData==0)
269
- {
368
+ if (tempData == 0) {
270
369
  tempVector.resize(cols);
271
370
  tempData = tempVector.data();
272
371
  }
273
372
 
274
- for(Index k = 0; k < size; ++k)
275
- {
373
+ for (Index k = 0; k < size; ++k) {
276
374
  Index remainingRows = rows - k;
277
375
  Index remainingCols = cols - k - 1;
278
376
 
279
377
  RealScalar beta;
280
378
  mat.col(k).tail(remainingRows).makeHouseholderInPlace(hCoeffs.coeffRef(k), beta);
281
- mat.coeffRef(k,k) = beta;
379
+ mat.coeffRef(k, k) = beta;
282
380
 
283
381
  // apply H to remaining part of m_qr from the left
284
382
  mat.bottomRightCorner(remainingRows, remainingCols)
285
- .applyHouseholderOnTheLeft(mat.col(k).tail(remainingRows-1), hCoeffs.coeffRef(k), tempData+k+1);
383
+ .applyHouseholderOnTheLeft(mat.col(k).tail(remainingRows - 1), hCoeffs.coeffRef(k), tempData + k + 1);
286
384
  }
287
385
  }
288
386
 
387
+ // TODO: add a corresponding public API for updating a QR factorization
388
+ /** \internal
389
+ * Basically a modified copy of @c Eigen::internal::householder_qr_inplace_unblocked that
390
+ * performs a rank-1 update of the QR matrix in compact storage. This function assumes, that
391
+ * the first @c k-1 columns of the matrix @c mat contain the QR decomposition of \f$A^N\f$ up to
392
+ * column k-1. Then the QR decomposition of the k-th column (given by @c newColumn) is computed by
393
+ * applying the k-1 Householder projectors on it and finally compute the projector \f$H_k\f$ of
394
+ * it. On exit the matrix @c mat and the vector @c hCoeffs contain the QR decomposition of the
395
+ * first k columns of \f$A^N\f$. The \a tempData argument must point to at least mat.cols() scalars. */
396
+ template <typename MatrixQR, typename HCoeffs, typename VectorQR>
397
+ void householder_qr_inplace_update(MatrixQR& mat, HCoeffs& hCoeffs, const VectorQR& newColumn,
398
+ typename MatrixQR::Index k, typename MatrixQR::Scalar* tempData) {
399
+ typedef typename MatrixQR::Index Index;
400
+ typedef typename MatrixQR::RealScalar RealScalar;
401
+ Index rows = mat.rows();
402
+
403
+ eigen_assert(k < mat.cols());
404
+ eigen_assert(k < rows);
405
+ eigen_assert(hCoeffs.size() == mat.cols());
406
+ eigen_assert(newColumn.size() == rows);
407
+ eigen_assert(tempData);
408
+
409
+ // Store new column in mat at column k
410
+ mat.col(k) = newColumn;
411
+ // Apply H = H_1...H_{k-1} on newColumn (skip if k=0)
412
+ for (Index i = 0; i < k; ++i) {
413
+ Index remainingRows = rows - i;
414
+ mat.col(k)
415
+ .tail(remainingRows)
416
+ .applyHouseholderOnTheLeft(mat.col(i).tail(remainingRows - 1), hCoeffs.coeffRef(i), tempData + i + 1);
417
+ }
418
+ // Construct Householder projector in-place in column k
419
+ RealScalar beta;
420
+ mat.col(k).tail(rows - k).makeHouseholderInPlace(hCoeffs.coeffRef(k), beta);
421
+ mat.coeffRef(k, k) = beta;
422
+ }
423
+
289
424
  /** \internal */
290
- template<typename MatrixQR, typename HCoeffs,
291
- typename MatrixQRScalar = typename MatrixQR::Scalar,
292
- bool InnerStrideIsOne = (MatrixQR::InnerStrideAtCompileTime == 1 && HCoeffs::InnerStrideAtCompileTime == 1)>
293
- struct householder_qr_inplace_blocked
294
- {
295
- // This is specialized for MKL-supported Scalar types in HouseholderQR_MKL.h
296
- static void run(MatrixQR& mat, HCoeffs& hCoeffs, Index maxBlockSize=32,
297
- typename MatrixQR::Scalar* tempData = 0)
298
- {
425
+ template <typename MatrixQR, typename HCoeffs, typename MatrixQRScalar = typename MatrixQR::Scalar,
426
+ bool InnerStrideIsOne = (MatrixQR::InnerStrideAtCompileTime == 1 && HCoeffs::InnerStrideAtCompileTime == 1)>
427
+ struct householder_qr_inplace_blocked {
428
+ // This is specialized for LAPACK-supported Scalar types in HouseholderQR_LAPACKE.h
429
+ static void run(MatrixQR& mat, HCoeffs& hCoeffs, Index maxBlockSize = 32, typename MatrixQR::Scalar* tempData = 0) {
299
430
  typedef typename MatrixQR::Scalar Scalar;
300
- typedef Block<MatrixQR,Dynamic,Dynamic> BlockType;
431
+ typedef Block<MatrixQR, Dynamic, Dynamic> BlockType;
301
432
 
302
433
  Index rows = mat.rows();
303
434
  Index cols = mat.cols();
304
435
  Index size = (std::min)(rows, cols);
305
436
 
306
- typedef Matrix<Scalar,Dynamic,1,ColMajor,MatrixQR::MaxColsAtCompileTime,1> TempType;
437
+ typedef Matrix<Scalar, Dynamic, 1, ColMajor, MatrixQR::MaxColsAtCompileTime, 1> TempType;
307
438
  TempType tempVector;
308
- if(tempData==0)
309
- {
439
+ if (tempData == 0) {
310
440
  tempVector.resize(cols);
311
441
  tempData = tempVector.data();
312
442
  }
313
443
 
314
- Index blockSize = (std::min)(maxBlockSize,size);
444
+ Index blockSize = (std::min)(maxBlockSize, size);
315
445
 
316
446
  Index k = 0;
317
- for (k = 0; k < size; k += blockSize)
318
- {
319
- Index bs = (std::min)(size-k,blockSize); // actual size of the block
320
- Index tcols = cols - k - bs; // trailing columns
321
- Index brows = rows-k; // rows of the block
447
+ for (k = 0; k < size; k += blockSize) {
448
+ Index bs = (std::min)(size - k, blockSize); // actual size of the block
449
+ Index tcols = cols - k - bs; // trailing columns
450
+ Index brows = rows - k; // rows of the block
322
451
 
323
452
  // partition the matrix:
324
453
  // A00 | A01 | A02
@@ -328,61 +457,68 @@ struct householder_qr_inplace_blocked
328
457
  // and update [A21^T A22^T]^T using level 3 operations.
329
458
  // Finally, the algorithm continue on A22
330
459
 
331
- BlockType A11_21 = mat.block(k,k,brows,bs);
332
- Block<HCoeffs,Dynamic,1> hCoeffsSegment = hCoeffs.segment(k,bs);
460
+ BlockType A11_21 = mat.block(k, k, brows, bs);
461
+ Block<HCoeffs, Dynamic, 1> hCoeffsSegment = hCoeffs.segment(k, bs);
333
462
 
334
463
  householder_qr_inplace_unblocked(A11_21, hCoeffsSegment, tempData);
335
464
 
336
- if(tcols)
337
- {
338
- BlockType A21_22 = mat.block(k,k+bs,brows,tcols);
339
- apply_block_householder_on_the_left(A21_22,A11_21,hCoeffsSegment, false); // false == backward
465
+ if (tcols) {
466
+ BlockType A21_22 = mat.block(k, k + bs, brows, tcols);
467
+ apply_block_householder_on_the_left(A21_22, A11_21, hCoeffsSegment, false); // false == backward
340
468
  }
341
469
  }
342
470
  }
343
471
  };
344
472
 
345
- } // end namespace internal
473
+ } // end namespace internal
346
474
 
347
475
  #ifndef EIGEN_PARSED_BY_DOXYGEN
348
- template<typename _MatrixType>
349
- template<typename RhsType, typename DstType>
350
- void HouseholderQR<_MatrixType>::_solve_impl(const RhsType &rhs, DstType &dst) const
351
- {
476
+ template <typename MatrixType_>
477
+ template <typename RhsType, typename DstType>
478
+ void HouseholderQR<MatrixType_>::_solve_impl(const RhsType& rhs, DstType& dst) const {
352
479
  const Index rank = (std::min)(rows(), cols());
353
- eigen_assert(rhs.rows() == rows());
354
480
 
355
481
  typename RhsType::PlainObject c(rhs);
356
482
 
357
- // Note that the matrix Q = H_0^* H_1^*... so its inverse is Q^* = (H_0 H_1 ...)^T
358
- c.applyOnTheLeft(householderSequence(
359
- m_qr.leftCols(rank),
360
- m_hCoeffs.head(rank)).transpose()
361
- );
483
+ c.applyOnTheLeft(householderQ().setLength(rank).adjoint());
484
+
485
+ m_qr.topLeftCorner(rank, rank).template triangularView<Upper>().solveInPlace(c.topRows(rank));
486
+
487
+ dst.topRows(rank) = c.topRows(rank);
488
+ dst.bottomRows(cols() - rank).setZero();
489
+ }
490
+
491
+ template <typename MatrixType_>
492
+ template <bool Conjugate, typename RhsType, typename DstType>
493
+ void HouseholderQR<MatrixType_>::_solve_impl_transposed(const RhsType& rhs, DstType& dst) const {
494
+ const Index rank = (std::min)(rows(), cols());
495
+
496
+ typename RhsType::PlainObject c(rhs);
362
497
 
363
498
  m_qr.topLeftCorner(rank, rank)
364
499
  .template triangularView<Upper>()
500
+ .transpose()
501
+ .template conjugateIf<Conjugate>()
365
502
  .solveInPlace(c.topRows(rank));
366
503
 
367
504
  dst.topRows(rank) = c.topRows(rank);
368
- dst.bottomRows(cols()-rank).setZero();
505
+ dst.bottomRows(rows() - rank).setZero();
506
+
507
+ dst.applyOnTheLeft(householderQ().setLength(rank).template conjugateIf<!Conjugate>());
369
508
  }
370
509
  #endif
371
510
 
372
511
  /** Performs the QR factorization of the given matrix \a matrix. The result of
373
- * the factorization is stored into \c *this, and a reference to \c *this
374
- * is returned.
375
- *
376
- * \sa class HouseholderQR, HouseholderQR(const MatrixType&)
377
- */
378
- template<typename MatrixType>
379
- void HouseholderQR<MatrixType>::computeInPlace()
380
- {
381
- check_template_parameters();
382
-
512
+ * the factorization is stored into \c *this, and a reference to \c *this
513
+ * is returned.
514
+ *
515
+ * \sa class HouseholderQR, HouseholderQR(const MatrixType&)
516
+ */
517
+ template <typename MatrixType>
518
+ void HouseholderQR<MatrixType>::computeInPlace() {
383
519
  Index rows = m_qr.rows();
384
520
  Index cols = m_qr.cols();
385
- Index size = (std::min)(rows,cols);
521
+ Index size = (std::min)(rows, cols);
386
522
 
387
523
  m_hCoeffs.resize(size);
388
524
 
@@ -394,16 +530,14 @@ void HouseholderQR<MatrixType>::computeInPlace()
394
530
  }
395
531
 
396
532
  /** \return the Householder QR decomposition of \c *this.
397
- *
398
- * \sa class HouseholderQR
399
- */
400
- template<typename Derived>
401
- const HouseholderQR<typename MatrixBase<Derived>::PlainObject>
402
- MatrixBase<Derived>::householderQr() const
403
- {
533
+ *
534
+ * \sa class HouseholderQR
535
+ */
536
+ template <typename Derived>
537
+ const HouseholderQR<typename MatrixBase<Derived>::PlainObject> MatrixBase<Derived>::householderQr() const {
404
538
  return HouseholderQR<PlainObject>(eval());
405
539
  }
406
540
 
407
- } // end namespace Eigen
541
+ } // end namespace Eigen
408
542
 
409
- #endif // EIGEN_QR_H
543
+ #endif // EIGEN_QR_H