@smake/eigen 1.1.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (431) hide show
  1. package/README.md +1 -1
  2. package/eigen/Eigen/AccelerateSupport +52 -0
  3. package/eigen/Eigen/Cholesky +18 -20
  4. package/eigen/Eigen/CholmodSupport +28 -28
  5. package/eigen/Eigen/Core +187 -120
  6. package/eigen/Eigen/Eigenvalues +16 -13
  7. package/eigen/Eigen/Geometry +18 -18
  8. package/eigen/Eigen/Householder +9 -7
  9. package/eigen/Eigen/IterativeLinearSolvers +8 -4
  10. package/eigen/Eigen/Jacobi +14 -13
  11. package/eigen/Eigen/KLUSupport +23 -21
  12. package/eigen/Eigen/LU +15 -16
  13. package/eigen/Eigen/MetisSupport +12 -12
  14. package/eigen/Eigen/OrderingMethods +54 -51
  15. package/eigen/Eigen/PaStiXSupport +23 -21
  16. package/eigen/Eigen/PardisoSupport +17 -14
  17. package/eigen/Eigen/QR +18 -20
  18. package/eigen/Eigen/QtAlignedMalloc +5 -12
  19. package/eigen/Eigen/SPQRSupport +21 -14
  20. package/eigen/Eigen/SVD +23 -17
  21. package/eigen/Eigen/Sparse +1 -2
  22. package/eigen/Eigen/SparseCholesky +18 -15
  23. package/eigen/Eigen/SparseCore +18 -17
  24. package/eigen/Eigen/SparseLU +9 -9
  25. package/eigen/Eigen/SparseQR +16 -14
  26. package/eigen/Eigen/StdDeque +5 -2
  27. package/eigen/Eigen/StdList +5 -2
  28. package/eigen/Eigen/StdVector +5 -2
  29. package/eigen/Eigen/SuperLUSupport +30 -24
  30. package/eigen/Eigen/ThreadPool +80 -0
  31. package/eigen/Eigen/UmfPackSupport +19 -17
  32. package/eigen/Eigen/Version +14 -0
  33. package/eigen/Eigen/src/AccelerateSupport/AccelerateSupport.h +423 -0
  34. package/eigen/Eigen/src/AccelerateSupport/InternalHeaderCheck.h +3 -0
  35. package/eigen/Eigen/src/Cholesky/InternalHeaderCheck.h +3 -0
  36. package/eigen/Eigen/src/Cholesky/LDLT.h +366 -405
  37. package/eigen/Eigen/src/Cholesky/LLT.h +323 -367
  38. package/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +81 -56
  39. package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +585 -529
  40. package/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
  41. package/eigen/Eigen/src/Core/ArithmeticSequence.h +143 -317
  42. package/eigen/Eigen/src/Core/Array.h +329 -370
  43. package/eigen/Eigen/src/Core/ArrayBase.h +190 -203
  44. package/eigen/Eigen/src/Core/ArrayWrapper.h +126 -170
  45. package/eigen/Eigen/src/Core/Assign.h +30 -40
  46. package/eigen/Eigen/src/Core/AssignEvaluator.h +651 -604
  47. package/eigen/Eigen/src/Core/Assign_MKL.h +125 -120
  48. package/eigen/Eigen/src/Core/BandMatrix.h +267 -282
  49. package/eigen/Eigen/src/Core/Block.h +371 -390
  50. package/eigen/Eigen/src/Core/CommaInitializer.h +85 -100
  51. package/eigen/Eigen/src/Core/ConditionEstimator.h +51 -53
  52. package/eigen/Eigen/src/Core/CoreEvaluators.h +1214 -937
  53. package/eigen/Eigen/src/Core/CoreIterators.h +72 -63
  54. package/eigen/Eigen/src/Core/CwiseBinaryOp.h +112 -129
  55. package/eigen/Eigen/src/Core/CwiseNullaryOp.h +676 -702
  56. package/eigen/Eigen/src/Core/CwiseTernaryOp.h +77 -103
  57. package/eigen/Eigen/src/Core/CwiseUnaryOp.h +55 -67
  58. package/eigen/Eigen/src/Core/CwiseUnaryView.h +127 -92
  59. package/eigen/Eigen/src/Core/DenseBase.h +630 -658
  60. package/eigen/Eigen/src/Core/DenseCoeffsBase.h +511 -628
  61. package/eigen/Eigen/src/Core/DenseStorage.h +511 -590
  62. package/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
  63. package/eigen/Eigen/src/Core/Diagonal.h +168 -207
  64. package/eigen/Eigen/src/Core/DiagonalMatrix.h +346 -317
  65. package/eigen/Eigen/src/Core/DiagonalProduct.h +12 -10
  66. package/eigen/Eigen/src/Core/Dot.h +167 -217
  67. package/eigen/Eigen/src/Core/EigenBase.h +74 -85
  68. package/eigen/Eigen/src/Core/Fill.h +138 -0
  69. package/eigen/Eigen/src/Core/FindCoeff.h +464 -0
  70. package/eigen/Eigen/src/Core/ForceAlignedAccess.h +90 -113
  71. package/eigen/Eigen/src/Core/Fuzzy.h +82 -105
  72. package/eigen/Eigen/src/Core/GeneralProduct.h +315 -261
  73. package/eigen/Eigen/src/Core/GenericPacketMath.h +1182 -520
  74. package/eigen/Eigen/src/Core/GlobalFunctions.h +193 -157
  75. package/eigen/Eigen/src/Core/IO.h +131 -156
  76. package/eigen/Eigen/src/Core/IndexedView.h +209 -125
  77. package/eigen/Eigen/src/Core/InnerProduct.h +260 -0
  78. package/eigen/Eigen/src/Core/InternalHeaderCheck.h +3 -0
  79. package/eigen/Eigen/src/Core/Inverse.h +50 -59
  80. package/eigen/Eigen/src/Core/Map.h +123 -141
  81. package/eigen/Eigen/src/Core/MapBase.h +255 -282
  82. package/eigen/Eigen/src/Core/MathFunctions.h +1247 -1201
  83. package/eigen/Eigen/src/Core/MathFunctionsImpl.h +162 -99
  84. package/eigen/Eigen/src/Core/Matrix.h +463 -494
  85. package/eigen/Eigen/src/Core/MatrixBase.h +468 -470
  86. package/eigen/Eigen/src/Core/NestByValue.h +58 -52
  87. package/eigen/Eigen/src/Core/NoAlias.h +79 -86
  88. package/eigen/Eigen/src/Core/NumTraits.h +206 -206
  89. package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +163 -142
  90. package/eigen/Eigen/src/Core/PermutationMatrix.h +461 -511
  91. package/eigen/Eigen/src/Core/PlainObjectBase.h +858 -972
  92. package/eigen/Eigen/src/Core/Product.h +246 -130
  93. package/eigen/Eigen/src/Core/ProductEvaluators.h +779 -671
  94. package/eigen/Eigen/src/Core/Random.h +153 -164
  95. package/eigen/Eigen/src/Core/RandomImpl.h +262 -0
  96. package/eigen/Eigen/src/Core/RealView.h +250 -0
  97. package/eigen/Eigen/src/Core/Redux.h +334 -314
  98. package/eigen/Eigen/src/Core/Ref.h +259 -257
  99. package/eigen/Eigen/src/Core/Replicate.h +92 -104
  100. package/eigen/Eigen/src/Core/Reshaped.h +215 -271
  101. package/eigen/Eigen/src/Core/ReturnByValue.h +47 -55
  102. package/eigen/Eigen/src/Core/Reverse.h +133 -148
  103. package/eigen/Eigen/src/Core/Select.h +68 -140
  104. package/eigen/Eigen/src/Core/SelfAdjointView.h +254 -290
  105. package/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h +23 -20
  106. package/eigen/Eigen/src/Core/SkewSymmetricMatrix3.h +382 -0
  107. package/eigen/Eigen/src/Core/Solve.h +88 -102
  108. package/eigen/Eigen/src/Core/SolveTriangular.h +126 -124
  109. package/eigen/Eigen/src/Core/SolverBase.h +132 -133
  110. package/eigen/Eigen/src/Core/StableNorm.h +113 -147
  111. package/eigen/Eigen/src/Core/StlIterators.h +404 -248
  112. package/eigen/Eigen/src/Core/Stride.h +90 -92
  113. package/eigen/Eigen/src/Core/Swap.h +70 -39
  114. package/eigen/Eigen/src/Core/Transpose.h +258 -295
  115. package/eigen/Eigen/src/Core/Transpositions.h +270 -333
  116. package/eigen/Eigen/src/Core/TriangularMatrix.h +642 -743
  117. package/eigen/Eigen/src/Core/VectorBlock.h +59 -72
  118. package/eigen/Eigen/src/Core/VectorwiseOp.h +653 -704
  119. package/eigen/Eigen/src/Core/Visitor.h +464 -308
  120. package/eigen/Eigen/src/Core/arch/AVX/Complex.h +380 -187
  121. package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +65 -163
  122. package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +2145 -638
  123. package/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
  124. package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +253 -60
  125. package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +278 -228
  126. package/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
  127. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +48 -269
  128. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
  129. package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1597 -754
  130. package/eigen/Eigen/src/Core/arch/AVX512/PacketMathFP16.h +1413 -0
  131. package/eigen/Eigen/src/Core/arch/AVX512/Reductions.h +297 -0
  132. package/eigen/Eigen/src/Core/arch/AVX512/TrsmKernel.h +1167 -0
  133. package/eigen/Eigen/src/Core/arch/AVX512/TrsmUnrolls.inc +1219 -0
  134. package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +229 -41
  135. package/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
  136. package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +420 -184
  137. package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +40 -49
  138. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2962 -2213
  139. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +196 -212
  140. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +713 -441
  141. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMAbfloat16.h +742 -0
  142. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixVectorProduct.inc +2818 -0
  143. package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +2380 -1362
  144. package/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
  145. package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +390 -224
  146. package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +78 -67
  147. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1784 -799
  148. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +167 -50
  149. package/eigen/Eigen/src/Core/arch/Default/Half.h +528 -379
  150. package/eigen/Eigen/src/Core/arch/Default/Settings.h +10 -12
  151. package/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
  152. package/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +41 -40
  153. package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +550 -523
  154. package/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
  155. package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +27 -30
  156. package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +8 -8
  157. package/eigen/Eigen/src/Core/arch/HVX/PacketMath.h +1088 -0
  158. package/eigen/Eigen/src/Core/arch/LSX/Complex.h +520 -0
  159. package/eigen/Eigen/src/Core/arch/LSX/GeneralBlockPanelKernel.h +23 -0
  160. package/eigen/Eigen/src/Core/arch/LSX/MathFunctions.h +43 -0
  161. package/eigen/Eigen/src/Core/arch/LSX/PacketMath.h +2866 -0
  162. package/eigen/Eigen/src/Core/arch/LSX/TypeCasting.h +526 -0
  163. package/eigen/Eigen/src/Core/arch/MSA/Complex.h +54 -82
  164. package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +84 -92
  165. package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +51 -47
  166. package/eigen/Eigen/src/Core/arch/NEON/Complex.h +454 -306
  167. package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +175 -115
  168. package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +23 -30
  169. package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +4366 -2857
  170. package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +616 -393
  171. package/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
  172. package/eigen/Eigen/src/Core/arch/SSE/Complex.h +350 -198
  173. package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +38 -149
  174. package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +1791 -912
  175. package/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
  176. package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +128 -40
  177. package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +10 -6
  178. package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +156 -234
  179. package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +6 -3
  180. package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +27 -32
  181. package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +119 -117
  182. package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +325 -419
  183. package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +15 -17
  184. package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +325 -181
  185. package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +94 -83
  186. package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +811 -458
  187. package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +121 -124
  188. package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +576 -370
  189. package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +194 -109
  190. package/eigen/Eigen/src/Core/functors/StlFunctors.h +95 -112
  191. package/eigen/Eigen/src/Core/functors/TernaryFunctors.h +34 -7
  192. package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1038 -749
  193. package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1883 -1375
  194. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +312 -370
  195. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +189 -176
  196. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +84 -81
  197. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +154 -73
  198. package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +292 -337
  199. package/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +80 -77
  200. package/eigen/Eigen/src/Core/products/Parallelizer.h +207 -105
  201. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +327 -388
  202. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +206 -224
  203. package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +138 -147
  204. package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +58 -61
  205. package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +71 -71
  206. package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +48 -47
  207. package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +294 -369
  208. package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +246 -238
  209. package/eigen/Eigen/src/Core/products/TriangularMatrixVector.h +244 -247
  210. package/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +212 -192
  211. package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +328 -277
  212. package/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +108 -109
  213. package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +68 -94
  214. package/eigen/Eigen/src/Core/util/Assert.h +158 -0
  215. package/eigen/Eigen/src/Core/util/BlasUtil.h +342 -303
  216. package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +348 -317
  217. package/eigen/Eigen/src/Core/util/Constants.h +297 -262
  218. package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +130 -90
  219. package/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
  220. package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +449 -247
  221. package/eigen/Eigen/src/Core/util/GpuHipCudaDefines.inc +101 -0
  222. package/eigen/Eigen/src/Core/util/GpuHipCudaUndefines.inc +45 -0
  223. package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +417 -116
  224. package/eigen/Eigen/src/Core/util/IntegralConstant.h +211 -204
  225. package/eigen/Eigen/src/Core/util/MKL_support.h +39 -37
  226. package/eigen/Eigen/src/Core/util/Macros.h +655 -773
  227. package/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
  228. package/eigen/Eigen/src/Core/util/Memory.h +970 -748
  229. package/eigen/Eigen/src/Core/util/Meta.h +581 -633
  230. package/eigen/Eigen/src/Core/util/MoreMeta.h +638 -0
  231. package/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +32 -19
  232. package/eigen/Eigen/src/Core/util/ReshapedHelper.h +17 -17
  233. package/eigen/Eigen/src/Core/util/Serializer.h +209 -0
  234. package/eigen/Eigen/src/Core/util/StaticAssert.h +50 -166
  235. package/eigen/Eigen/src/Core/util/SymbolicIndex.h +377 -225
  236. package/eigen/Eigen/src/Core/util/XprHelper.h +784 -547
  237. package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +246 -277
  238. package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +299 -319
  239. package/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +52 -48
  240. package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +413 -456
  241. package/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +309 -325
  242. package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +157 -171
  243. package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +292 -310
  244. package/eigen/Eigen/src/Eigenvalues/InternalHeaderCheck.h +3 -0
  245. package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +89 -105
  246. package/eigen/Eigen/src/Eigenvalues/RealQZ.h +537 -607
  247. package/eigen/Eigen/src/Eigenvalues/RealSchur.h +342 -381
  248. package/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +41 -35
  249. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +541 -595
  250. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +47 -44
  251. package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +430 -462
  252. package/eigen/Eigen/src/Geometry/AlignedBox.h +226 -227
  253. package/eigen/Eigen/src/Geometry/AngleAxis.h +131 -133
  254. package/eigen/Eigen/src/Geometry/EulerAngles.h +163 -74
  255. package/eigen/Eigen/src/Geometry/Homogeneous.h +285 -333
  256. package/eigen/Eigen/src/Geometry/Hyperplane.h +151 -160
  257. package/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
  258. package/eigen/Eigen/src/Geometry/OrthoMethods.h +168 -146
  259. package/eigen/Eigen/src/Geometry/ParametrizedLine.h +127 -127
  260. package/eigen/Eigen/src/Geometry/Quaternion.h +566 -506
  261. package/eigen/Eigen/src/Geometry/Rotation2D.h +107 -105
  262. package/eigen/Eigen/src/Geometry/RotationBase.h +148 -145
  263. package/eigen/Eigen/src/Geometry/Scaling.h +113 -106
  264. package/eigen/Eigen/src/Geometry/Transform.h +858 -936
  265. package/eigen/Eigen/src/Geometry/Translation.h +94 -92
  266. package/eigen/Eigen/src/Geometry/Umeyama.h +79 -84
  267. package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +90 -104
  268. package/eigen/Eigen/src/Householder/BlockHouseholder.h +51 -46
  269. package/eigen/Eigen/src/Householder/Householder.h +102 -124
  270. package/eigen/Eigen/src/Householder/HouseholderSequence.h +412 -453
  271. package/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
  272. package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +149 -162
  273. package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +124 -119
  274. package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +92 -104
  275. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +251 -243
  276. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +224 -228
  277. package/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
  278. package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +178 -227
  279. package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +79 -84
  280. package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +54 -60
  281. package/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
  282. package/eigen/Eigen/src/Jacobi/Jacobi.h +252 -308
  283. package/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
  284. package/eigen/Eigen/src/KLUSupport/KLUSupport.h +208 -227
  285. package/eigen/Eigen/src/LU/Determinant.h +50 -69
  286. package/eigen/Eigen/src/LU/FullPivLU.h +545 -596
  287. package/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
  288. package/eigen/Eigen/src/LU/InverseImpl.h +206 -285
  289. package/eigen/Eigen/src/LU/PartialPivLU.h +390 -428
  290. package/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +54 -40
  291. package/eigen/Eigen/src/LU/arch/InverseSize4.h +72 -70
  292. package/eigen/Eigen/src/MetisSupport/InternalHeaderCheck.h +3 -0
  293. package/eigen/Eigen/src/MetisSupport/MetisSupport.h +81 -93
  294. package/eigen/Eigen/src/OrderingMethods/Amd.h +243 -265
  295. package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +831 -1004
  296. package/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
  297. package/eigen/Eigen/src/OrderingMethods/Ordering.h +112 -119
  298. package/eigen/Eigen/src/PaStiXSupport/InternalHeaderCheck.h +3 -0
  299. package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +524 -570
  300. package/eigen/Eigen/src/PardisoSupport/InternalHeaderCheck.h +3 -0
  301. package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +385 -430
  302. package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +479 -479
  303. package/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +120 -56
  304. package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +166 -153
  305. package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +495 -475
  306. package/eigen/Eigen/src/QR/HouseholderQR.h +394 -285
  307. package/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h +32 -23
  308. package/eigen/Eigen/src/QR/InternalHeaderCheck.h +3 -0
  309. package/eigen/Eigen/src/SPQRSupport/InternalHeaderCheck.h +3 -0
  310. package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +244 -264
  311. package/eigen/Eigen/src/SVD/BDCSVD.h +817 -713
  312. package/eigen/Eigen/src/SVD/BDCSVD_LAPACKE.h +174 -0
  313. package/eigen/Eigen/src/SVD/InternalHeaderCheck.h +3 -0
  314. package/eigen/Eigen/src/SVD/JacobiSVD.h +577 -543
  315. package/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +85 -49
  316. package/eigen/Eigen/src/SVD/SVDBase.h +242 -182
  317. package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +200 -235
  318. package/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
  319. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +765 -594
  320. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +308 -94
  321. package/eigen/Eigen/src/SparseCore/AmbiVector.h +202 -251
  322. package/eigen/Eigen/src/SparseCore/CompressedStorage.h +184 -252
  323. package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +134 -178
  324. package/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
  325. package/eigen/Eigen/src/SparseCore/SparseAssign.h +149 -140
  326. package/eigen/Eigen/src/SparseCore/SparseBlock.h +403 -440
  327. package/eigen/Eigen/src/SparseCore/SparseColEtree.h +100 -112
  328. package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +525 -303
  329. package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +555 -339
  330. package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +100 -108
  331. package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +169 -197
  332. package/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h +71 -71
  333. package/eigen/Eigen/src/SparseCore/SparseDot.h +49 -47
  334. package/eigen/Eigen/src/SparseCore/SparseFuzzy.h +13 -11
  335. package/eigen/Eigen/src/SparseCore/SparseMap.h +243 -253
  336. package/eigen/Eigen/src/SparseCore/SparseMatrix.h +1603 -1245
  337. package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +403 -350
  338. package/eigen/Eigen/src/SparseCore/SparsePermutation.h +186 -115
  339. package/eigen/Eigen/src/SparseCore/SparseProduct.h +94 -97
  340. package/eigen/Eigen/src/SparseCore/SparseRedux.h +22 -24
  341. package/eigen/Eigen/src/SparseCore/SparseRef.h +268 -295
  342. package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +370 -416
  343. package/eigen/Eigen/src/SparseCore/SparseSolverBase.h +78 -87
  344. package/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +81 -95
  345. package/eigen/Eigen/src/SparseCore/SparseTranspose.h +62 -71
  346. package/eigen/Eigen/src/SparseCore/SparseTriangularView.h +132 -144
  347. package/eigen/Eigen/src/SparseCore/SparseUtil.h +138 -115
  348. package/eigen/Eigen/src/SparseCore/SparseVector.h +426 -372
  349. package/eigen/Eigen/src/SparseCore/SparseView.h +164 -193
  350. package/eigen/Eigen/src/SparseCore/TriangularSolver.h +129 -170
  351. package/eigen/Eigen/src/SparseLU/InternalHeaderCheck.h +3 -0
  352. package/eigen/Eigen/src/SparseLU/SparseLU.h +756 -710
  353. package/eigen/Eigen/src/SparseLU/SparseLUImpl.h +61 -48
  354. package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +102 -118
  355. package/eigen/Eigen/src/SparseLU/SparseLU_Structs.h +38 -35
  356. package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +245 -301
  357. package/eigen/Eigen/src/SparseLU/SparseLU_Utils.h +44 -49
  358. package/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h +104 -108
  359. package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +89 -100
  360. package/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +57 -58
  361. package/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +43 -55
  362. package/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +74 -71
  363. package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +124 -132
  364. package/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h +136 -159
  365. package/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h +51 -52
  366. package/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h +67 -73
  367. package/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h +24 -26
  368. package/eigen/Eigen/src/SparseQR/InternalHeaderCheck.h +3 -0
  369. package/eigen/Eigen/src/SparseQR/SparseQR.h +450 -502
  370. package/eigen/Eigen/src/StlSupport/StdDeque.h +28 -93
  371. package/eigen/Eigen/src/StlSupport/StdList.h +28 -84
  372. package/eigen/Eigen/src/StlSupport/StdVector.h +28 -108
  373. package/eigen/Eigen/src/StlSupport/details.h +48 -50
  374. package/eigen/Eigen/src/SuperLUSupport/InternalHeaderCheck.h +3 -0
  375. package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +634 -730
  376. package/eigen/Eigen/src/ThreadPool/Barrier.h +70 -0
  377. package/eigen/Eigen/src/ThreadPool/CoreThreadPoolDevice.h +336 -0
  378. package/eigen/Eigen/src/ThreadPool/EventCount.h +241 -0
  379. package/eigen/Eigen/src/ThreadPool/ForkJoin.h +140 -0
  380. package/eigen/Eigen/src/ThreadPool/InternalHeaderCheck.h +4 -0
  381. package/eigen/Eigen/src/ThreadPool/NonBlockingThreadPool.h +587 -0
  382. package/eigen/Eigen/src/ThreadPool/RunQueue.h +230 -0
  383. package/eigen/Eigen/src/ThreadPool/ThreadCancel.h +21 -0
  384. package/eigen/Eigen/src/ThreadPool/ThreadEnvironment.h +43 -0
  385. package/eigen/Eigen/src/ThreadPool/ThreadLocal.h +289 -0
  386. package/eigen/Eigen/src/ThreadPool/ThreadPoolInterface.h +50 -0
  387. package/eigen/Eigen/src/ThreadPool/ThreadYield.h +16 -0
  388. package/eigen/Eigen/src/UmfPackSupport/InternalHeaderCheck.h +3 -0
  389. package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +428 -464
  390. package/eigen/Eigen/src/misc/Image.h +41 -43
  391. package/eigen/Eigen/src/misc/InternalHeaderCheck.h +3 -0
  392. package/eigen/Eigen/src/misc/Kernel.h +39 -41
  393. package/eigen/Eigen/src/misc/RealSvd2x2.h +19 -21
  394. package/eigen/Eigen/src/misc/blas.h +83 -426
  395. package/eigen/Eigen/src/misc/lapacke.h +9972 -16179
  396. package/eigen/Eigen/src/misc/lapacke_helpers.h +163 -0
  397. package/eigen/Eigen/src/misc/lapacke_mangling.h +4 -5
  398. package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.inc +344 -0
  399. package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.inc +544 -0
  400. package/eigen/Eigen/src/plugins/{BlockMethods.h → BlockMethods.inc} +434 -506
  401. package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
  402. package/eigen/Eigen/src/plugins/{CommonCwiseUnaryOps.h → CommonCwiseUnaryOps.inc} +58 -68
  403. package/eigen/Eigen/src/plugins/IndexedViewMethods.inc +192 -0
  404. package/eigen/Eigen/src/plugins/InternalHeaderCheck.inc +3 -0
  405. package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.inc +331 -0
  406. package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.inc +118 -0
  407. package/eigen/Eigen/src/plugins/ReshapedMethods.inc +133 -0
  408. package/package.json +1 -1
  409. package/eigen/COPYING.APACHE +0 -203
  410. package/eigen/COPYING.BSD +0 -26
  411. package/eigen/COPYING.GPL +0 -674
  412. package/eigen/COPYING.LGPL +0 -502
  413. package/eigen/COPYING.MINPACK +0 -51
  414. package/eigen/COPYING.MPL2 +0 -373
  415. package/eigen/COPYING.README +0 -18
  416. package/eigen/Eigen/src/Core/BooleanRedux.h +0 -162
  417. package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +0 -258
  418. package/eigen/Eigen/src/Core/arch/Default/TypeCasting.h +0 -120
  419. package/eigen/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +0 -694
  420. package/eigen/Eigen/src/Core/util/NonMPL2.h +0 -3
  421. package/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h +0 -67
  422. package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +0 -280
  423. package/eigen/Eigen/src/misc/lapack.h +0 -152
  424. package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +0 -358
  425. package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +0 -696
  426. package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +0 -115
  427. package/eigen/Eigen/src/plugins/IndexedViewMethods.h +0 -262
  428. package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +0 -152
  429. package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +0 -95
  430. package/eigen/Eigen/src/plugins/ReshapedMethods.h +0 -149
  431. package/eigen/README.md +0 -5
@@ -12,324 +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 {
16
19
 
17
20
  namespace internal {
18
- template<typename _MatrixType> struct traits<HouseholderQR<_MatrixType> >
19
- : traits<_MatrixType>
20
- {
21
+ template <typename MatrixType_>
22
+ struct traits<HouseholderQR<MatrixType_>> : traits<MatrixType_> {
21
23
  typedef MatrixXpr XprKind;
22
24
  typedef SolverStorage StorageKind;
23
25
  typedef int StorageIndex;
24
26
  enum { Flags = 0 };
25
27
  };
26
28
 
27
- } // end namespace internal
29
+ } // end namespace internal
28
30
 
29
31
  /** \ingroup QR_Module
30
- *
31
- *
32
- * \class HouseholderQR
33
- *
34
- * \brief Householder QR decomposition of a matrix
35
- *
36
- * \tparam _MatrixType the type of the matrix of which we are computing the QR decomposition
37
- *
38
- * This class performs a QR decomposition of a matrix \b A into matrices \b Q and \b R
39
- * such that
40
- * \f[
41
- * \mathbf{A} = \mathbf{Q} \, \mathbf{R}
42
- * \f]
43
- * by using Householder transformations. Here, \b Q a unitary matrix and \b R an upper triangular matrix.
44
- * The result is stored in a compact way compatible with LAPACK.
45
- *
46
- * Note that no pivoting is performed. This is \b not a rank-revealing decomposition.
47
- * If you want that feature, use FullPivHouseholderQR or ColPivHouseholderQR instead.
48
- *
49
- * This Householder QR decomposition is faster, but less numerically stable and less feature-full than
50
- * FullPivHouseholderQR or ColPivHouseholderQR.
51
- *
52
- * This class supports the \link InplaceDecomposition inplace decomposition \endlink mechanism.
53
- *
54
- * \sa MatrixBase::householderQr()
55
- */
56
- template<typename _MatrixType> class HouseholderQR
57
- : public SolverBase<HouseholderQR<_MatrixType> >
58
- {
59
- public:
60
-
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, MaxRowsAtCompileTime, MaxRowsAtCompileTime> MatrixQType;
71
- typedef typename internal::plain_diag_type<MatrixType>::type HCoeffsType;
72
- typedef typename internal::plain_row_type<MatrixType>::type RowVectorType;
73
- typedef HouseholderSequence<MatrixType,typename internal::remove_all<typename HCoeffsType::ConjugateReturnType>::type> HouseholderSequenceType;
74
-
75
- /**
76
- * \brief Default Constructor.
77
- *
78
- * The default constructor is useful in cases in which the user intends to
79
- * perform decompositions via HouseholderQR::compute(const MatrixType&).
80
- */
81
- HouseholderQR() : m_qr(), m_hCoeffs(), m_temp(), m_isInitialized(false) {}
82
-
83
- /** \brief Default Constructor with memory preallocation
84
- *
85
- * Like the default constructor but with preallocation of the internal data
86
- * according to the specified problem \a size.
87
- * \sa HouseholderQR()
88
- */
89
- HouseholderQR(Index rows, Index cols)
90
- : m_qr(rows, cols),
91
- m_hCoeffs((std::min)(rows,cols)),
92
- m_temp(cols),
93
- m_isInitialized(false) {}
94
-
95
- /** \brief Constructs a QR factorization from a given matrix
96
- *
97
- * This constructor computes the QR factorization of the matrix \a matrix by calling
98
- * the method compute(). It is a short cut for:
99
- *
100
- * \code
101
- * HouseholderQR<MatrixType> qr(matrix.rows(), matrix.cols());
102
- * qr.compute(matrix);
103
- * \endcode
104
- *
105
- * \sa compute()
106
- */
107
- template<typename InputType>
108
- 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)
109
120
  : m_qr(matrix.rows(), matrix.cols()),
110
- m_hCoeffs((std::min)(matrix.rows(),matrix.cols())),
121
+ m_hCoeffs((std::min)(matrix.rows(), matrix.cols())),
111
122
  m_temp(matrix.cols()),
112
- m_isInitialized(false)
113
- {
114
- compute(matrix.derived());
115
- }
116
-
123
+ m_isInitialized(false) {
124
+ compute(matrix.derived());
125
+ }
117
126
 
118
- /** \brief Constructs a QR factorization from a given matrix
119
- *
120
- * This overloaded constructor is provided for \link InplaceDecomposition inplace decomposition \endlink when
121
- * \c MatrixType is a Eigen::Ref.
122
- *
123
- * \sa HouseholderQR(const EigenBase&)
124
- */
125
- template<typename InputType>
126
- 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)
127
136
  : m_qr(matrix.derived()),
128
- m_hCoeffs((std::min)(matrix.rows(),matrix.cols())),
137
+ m_hCoeffs((std::min)(matrix.rows(), matrix.cols())),
129
138
  m_temp(matrix.cols()),
130
- m_isInitialized(false)
131
- {
132
- computeInPlace();
133
- }
139
+ m_isInitialized(false) {
140
+ computeInPlace();
141
+ }
134
142
 
135
- #ifdef EIGEN_PARSED_BY_DOXYGEN
136
- /** This method finds a solution x to the equation Ax=b, where A is the matrix of which
137
- * *this is the QR decomposition, if any exists.
138
- *
139
- * \param b the right-hand-side of the equation to solve.
140
- *
141
- * \returns a solution.
142
- *
143
- * \note_about_checking_solutions
144
- *
145
- * \note_about_arbitrary_choice_of_solution
146
- *
147
- * Example: \include HouseholderQR_solve.cpp
148
- * Output: \verbinclude HouseholderQR_solve.out
149
- */
150
- template<typename Rhs>
151
- inline const Solve<HouseholderQR, Rhs>
152
- solve(const MatrixBase<Rhs>& b) const;
153
- #endif
154
-
155
- /** This method returns an expression of the unitary matrix Q as a sequence of Householder transformations.
156
- *
157
- * The returned expression can directly be used to perform matrix products. It can also be assigned to a dense Matrix object.
158
- * Here is an example showing how to recover the full or thin matrix Q, as well as how to perform matrix products using operator*:
159
- *
160
- * Example: \include HouseholderQR_householderQ.cpp
161
- * Output: \verbinclude HouseholderQR_householderQ.out
162
- */
163
- HouseholderSequenceType householderQ() const
164
- {
165
- eigen_assert(m_isInitialized && "HouseholderQR is not initialized.");
166
- return HouseholderSequenceType(m_qr, m_hCoeffs.conjugate());
167
- }
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
168
161
 
169
- /** \returns a reference to the matrix where the Householder QR decomposition is stored
170
- * in a LAPACK-compatible way.
171
- */
172
- const MatrixType& matrixQR() const
173
- {
174
- eigen_assert(m_isInitialized && "HouseholderQR is not initialized.");
175
- return m_qr;
176
- }
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
+ }
175
+
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
+ }
183
+
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
+ };
177
286
 
178
- template<typename InputType>
179
- HouseholderQR& compute(const EigenBase<InputType>& matrix) {
180
- m_qr = matrix.derived();
181
- computeInPlace();
182
- return *this;
287
+ namespace internal {
288
+
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);
183
300
  }
301
+ }
302
+ };
184
303
 
185
- /** \returns the absolute value of the determinant of the matrix of which
186
- * *this is the QR decomposition. It has only linear complexity
187
- * (that is, O(n) where n is the dimension of the square matrix)
188
- * as the QR decomposition has already been computed.
189
- *
190
- * \note This is only for square matrices.
191
- *
192
- * \warning a determinant can be very big or small, so for matrices
193
- * of large enough dimension, there is a risk of overflow/underflow.
194
- * One way to work around that is to use logAbsDeterminant() instead.
195
- *
196
- * \sa logAbsDeterminant(), MatrixBase::determinant()
197
- */
198
- typename MatrixType::RealScalar absDeterminant() const;
199
-
200
- /** \returns the natural log of the absolute value of the determinant of the matrix of which
201
- * *this is the QR decomposition. It has only linear complexity
202
- * (that is, O(n) where n is the dimension of the square matrix)
203
- * as the QR decomposition has already been computed.
204
- *
205
- * \note This is only for square matrices.
206
- *
207
- * \note This method is useful to work around the risk of overflow/underflow that's inherent
208
- * to determinant computation.
209
- *
210
- * \sa absDeterminant(), MatrixBase::determinant()
211
- */
212
- typename MatrixType::RealScalar logAbsDeterminant() const;
213
-
214
- inline Index rows() const { return m_qr.rows(); }
215
- inline Index cols() const { return m_qr.cols(); }
216
-
217
- /** \returns a const reference to the vector of Householder coefficients used to represent the factor \c Q.
218
- *
219
- * For advanced uses only.
220
- */
221
- const HCoeffsType& hCoeffs() const { return m_hCoeffs; }
222
-
223
- #ifndef EIGEN_PARSED_BY_DOXYGEN
224
- template<typename RhsType, typename DstType>
225
- void _solve_impl(const RhsType &rhs, DstType &dst) const;
226
-
227
- template<bool Conjugate, typename RhsType, typename DstType>
228
- void _solve_impl_transposed(const RhsType &rhs, DstType &dst) const;
229
- #endif
230
-
231
- protected:
232
-
233
- static void check_template_parameters()
234
- {
235
- EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar);
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;
236
313
  }
314
+ out_det = negated ? Scalar(-1) : Scalar(1);
315
+ }
316
+ };
237
317
 
238
- void computeInPlace();
318
+ } // end namespace internal
239
319
 
240
- MatrixType m_qr;
241
- HCoeffsType m_hCoeffs;
242
- RowVectorType m_temp;
243
- bool m_isInitialized;
244
- };
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
+ }
245
328
 
246
- template<typename MatrixType>
247
- typename MatrixType::RealScalar HouseholderQR<MatrixType>::absDeterminant() const
248
- {
329
+ template <typename MatrixType>
330
+ typename MatrixType::RealScalar HouseholderQR<MatrixType>::absDeterminant() const {
249
331
  using std::abs;
250
332
  eigen_assert(m_isInitialized && "HouseholderQR is not initialized.");
251
333
  eigen_assert(m_qr.rows() == m_qr.cols() && "You can't take the determinant of a non-square matrix!");
252
334
  return abs(m_qr.diagonal().prod());
253
335
  }
254
336
 
255
- template<typename MatrixType>
256
- typename MatrixType::RealScalar HouseholderQR<MatrixType>::logAbsDeterminant() const
257
- {
337
+ template <typename MatrixType>
338
+ typename MatrixType::RealScalar HouseholderQR<MatrixType>::logAbsDeterminant() const {
258
339
  eigen_assert(m_isInitialized && "HouseholderQR is not initialized.");
259
340
  eigen_assert(m_qr.rows() == m_qr.cols() && "You can't take the determinant of a non-square matrix!");
260
341
  return m_qr.diagonal().cwiseAbs().array().log().sum();
261
342
  }
262
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
+
263
353
  namespace internal {
264
354
 
265
355
  /** \internal */
266
- template<typename MatrixQR, typename HCoeffs>
267
- void householder_qr_inplace_unblocked(MatrixQR& mat, HCoeffs& hCoeffs, typename MatrixQR::Scalar* tempData = 0)
268
- {
356
+ template <typename MatrixQR, typename HCoeffs>
357
+ void householder_qr_inplace_unblocked(MatrixQR& mat, HCoeffs& hCoeffs, typename MatrixQR::Scalar* tempData = 0) {
269
358
  typedef typename MatrixQR::Scalar Scalar;
270
359
  typedef typename MatrixQR::RealScalar RealScalar;
271
360
  Index rows = mat.rows();
272
361
  Index cols = mat.cols();
273
- Index size = (std::min)(rows,cols);
362
+ Index size = (std::min)(rows, cols);
274
363
 
275
364
  eigen_assert(hCoeffs.size() == size);
276
365
 
277
- typedef Matrix<Scalar,MatrixQR::ColsAtCompileTime,1> TempType;
366
+ typedef Matrix<Scalar, MatrixQR::ColsAtCompileTime, 1> TempType;
278
367
  TempType tempVector;
279
- if(tempData==0)
280
- {
368
+ if (tempData == 0) {
281
369
  tempVector.resize(cols);
282
370
  tempData = tempVector.data();
283
371
  }
284
372
 
285
- for(Index k = 0; k < size; ++k)
286
- {
373
+ for (Index k = 0; k < size; ++k) {
287
374
  Index remainingRows = rows - k;
288
375
  Index remainingCols = cols - k - 1;
289
376
 
290
377
  RealScalar beta;
291
378
  mat.col(k).tail(remainingRows).makeHouseholderInPlace(hCoeffs.coeffRef(k), beta);
292
- mat.coeffRef(k,k) = beta;
379
+ mat.coeffRef(k, k) = beta;
293
380
 
294
381
  // apply H to remaining part of m_qr from the left
295
382
  mat.bottomRightCorner(remainingRows, remainingCols)
296
- .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);
384
+ }
385
+ }
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);
297
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;
298
422
  }
299
423
 
300
424
  /** \internal */
301
- template<typename MatrixQR, typename HCoeffs,
302
- typename MatrixQRScalar = typename MatrixQR::Scalar,
303
- bool InnerStrideIsOne = (MatrixQR::InnerStrideAtCompileTime == 1 && HCoeffs::InnerStrideAtCompileTime == 1)>
304
- struct householder_qr_inplace_blocked
305
- {
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 {
306
428
  // This is specialized for LAPACK-supported Scalar types in HouseholderQR_LAPACKE.h
307
- static void run(MatrixQR& mat, HCoeffs& hCoeffs, Index maxBlockSize=32,
308
- typename MatrixQR::Scalar* tempData = 0)
309
- {
429
+ static void run(MatrixQR& mat, HCoeffs& hCoeffs, Index maxBlockSize = 32, typename MatrixQR::Scalar* tempData = 0) {
310
430
  typedef typename MatrixQR::Scalar Scalar;
311
- typedef Block<MatrixQR,Dynamic,Dynamic> BlockType;
431
+ typedef Block<MatrixQR, Dynamic, Dynamic> BlockType;
312
432
 
313
433
  Index rows = mat.rows();
314
434
  Index cols = mat.cols();
315
435
  Index size = (std::min)(rows, cols);
316
436
 
317
- typedef Matrix<Scalar,Dynamic,1,ColMajor,MatrixQR::MaxColsAtCompileTime,1> TempType;
437
+ typedef Matrix<Scalar, Dynamic, 1, ColMajor, MatrixQR::MaxColsAtCompileTime, 1> TempType;
318
438
  TempType tempVector;
319
- if(tempData==0)
320
- {
439
+ if (tempData == 0) {
321
440
  tempVector.resize(cols);
322
441
  tempData = tempVector.data();
323
442
  }
324
443
 
325
- Index blockSize = (std::min)(maxBlockSize,size);
444
+ Index blockSize = (std::min)(maxBlockSize, size);
326
445
 
327
446
  Index k = 0;
328
- for (k = 0; k < size; k += blockSize)
329
- {
330
- Index bs = (std::min)(size-k,blockSize); // actual size of the block
331
- Index tcols = cols - k - bs; // trailing columns
332
- 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
333
451
 
334
452
  // partition the matrix:
335
453
  // A00 | A01 | A02
@@ -339,75 +457,68 @@ struct householder_qr_inplace_blocked
339
457
  // and update [A21^T A22^T]^T using level 3 operations.
340
458
  // Finally, the algorithm continue on A22
341
459
 
342
- BlockType A11_21 = mat.block(k,k,brows,bs);
343
- 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);
344
462
 
345
463
  householder_qr_inplace_unblocked(A11_21, hCoeffsSegment, tempData);
346
464
 
347
- if(tcols)
348
- {
349
- BlockType A21_22 = mat.block(k,k+bs,brows,tcols);
350
- 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
351
468
  }
352
469
  }
353
470
  }
354
471
  };
355
472
 
356
- } // end namespace internal
473
+ } // end namespace internal
357
474
 
358
475
  #ifndef EIGEN_PARSED_BY_DOXYGEN
359
- template<typename _MatrixType>
360
- template<typename RhsType, typename DstType>
361
- void HouseholderQR<_MatrixType>::_solve_impl(const RhsType &rhs, DstType &dst) const
362
- {
476
+ template <typename MatrixType_>
477
+ template <typename RhsType, typename DstType>
478
+ void HouseholderQR<MatrixType_>::_solve_impl(const RhsType& rhs, DstType& dst) const {
363
479
  const Index rank = (std::min)(rows(), cols());
364
480
 
365
481
  typename RhsType::PlainObject c(rhs);
366
482
 
367
- c.applyOnTheLeft(householderQ().setLength(rank).adjoint() );
483
+ c.applyOnTheLeft(householderQ().setLength(rank).adjoint());
368
484
 
369
- m_qr.topLeftCorner(rank, rank)
370
- .template triangularView<Upper>()
371
- .solveInPlace(c.topRows(rank));
485
+ m_qr.topLeftCorner(rank, rank).template triangularView<Upper>().solveInPlace(c.topRows(rank));
372
486
 
373
487
  dst.topRows(rank) = c.topRows(rank);
374
- dst.bottomRows(cols()-rank).setZero();
488
+ dst.bottomRows(cols() - rank).setZero();
375
489
  }
376
490
 
377
- template<typename _MatrixType>
378
- template<bool Conjugate, typename RhsType, typename DstType>
379
- void HouseholderQR<_MatrixType>::_solve_impl_transposed(const RhsType &rhs, DstType &dst) const
380
- {
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 {
381
494
  const Index rank = (std::min)(rows(), cols());
382
495
 
383
496
  typename RhsType::PlainObject c(rhs);
384
497
 
385
498
  m_qr.topLeftCorner(rank, rank)
386
499
  .template triangularView<Upper>()
387
- .transpose().template conjugateIf<Conjugate>()
500
+ .transpose()
501
+ .template conjugateIf<Conjugate>()
388
502
  .solveInPlace(c.topRows(rank));
389
503
 
390
504
  dst.topRows(rank) = c.topRows(rank);
391
- dst.bottomRows(rows()-rank).setZero();
505
+ dst.bottomRows(rows() - rank).setZero();
392
506
 
393
- dst.applyOnTheLeft(householderQ().setLength(rank).template conjugateIf<!Conjugate>() );
507
+ dst.applyOnTheLeft(householderQ().setLength(rank).template conjugateIf<!Conjugate>());
394
508
  }
395
509
  #endif
396
510
 
397
511
  /** Performs the QR factorization of the given matrix \a matrix. The result of
398
- * the factorization is stored into \c *this, and a reference to \c *this
399
- * is returned.
400
- *
401
- * \sa class HouseholderQR, HouseholderQR(const MatrixType&)
402
- */
403
- template<typename MatrixType>
404
- void HouseholderQR<MatrixType>::computeInPlace()
405
- {
406
- check_template_parameters();
407
-
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() {
408
519
  Index rows = m_qr.rows();
409
520
  Index cols = m_qr.cols();
410
- Index size = (std::min)(rows,cols);
521
+ Index size = (std::min)(rows, cols);
411
522
 
412
523
  m_hCoeffs.resize(size);
413
524
 
@@ -419,16 +530,14 @@ void HouseholderQR<MatrixType>::computeInPlace()
419
530
  }
420
531
 
421
532
  /** \return the Householder QR decomposition of \c *this.
422
- *
423
- * \sa class HouseholderQR
424
- */
425
- template<typename Derived>
426
- const HouseholderQR<typename MatrixBase<Derived>::PlainObject>
427
- MatrixBase<Derived>::householderQr() const
428
- {
533
+ *
534
+ * \sa class HouseholderQR
535
+ */
536
+ template <typename Derived>
537
+ const HouseholderQR<typename MatrixBase<Derived>::PlainObject> MatrixBase<Derived>::householderQr() const {
429
538
  return HouseholderQR<PlainObject>(eval());
430
539
  }
431
540
 
432
- } // end namespace Eigen
541
+ } // end namespace Eigen
433
542
 
434
- #endif // EIGEN_QR_H
543
+ #endif // EIGEN_QR_H