@smake/eigen 1.1.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (431) hide show
  1. package/README.md +1 -1
  2. package/eigen/Eigen/AccelerateSupport +52 -0
  3. package/eigen/Eigen/Cholesky +18 -20
  4. package/eigen/Eigen/CholmodSupport +28 -28
  5. package/eigen/Eigen/Core +187 -120
  6. package/eigen/Eigen/Eigenvalues +16 -13
  7. package/eigen/Eigen/Geometry +18 -18
  8. package/eigen/Eigen/Householder +9 -7
  9. package/eigen/Eigen/IterativeLinearSolvers +8 -4
  10. package/eigen/Eigen/Jacobi +14 -13
  11. package/eigen/Eigen/KLUSupport +23 -21
  12. package/eigen/Eigen/LU +15 -16
  13. package/eigen/Eigen/MetisSupport +12 -12
  14. package/eigen/Eigen/OrderingMethods +54 -51
  15. package/eigen/Eigen/PaStiXSupport +23 -21
  16. package/eigen/Eigen/PardisoSupport +17 -14
  17. package/eigen/Eigen/QR +18 -20
  18. package/eigen/Eigen/QtAlignedMalloc +5 -12
  19. package/eigen/Eigen/SPQRSupport +21 -14
  20. package/eigen/Eigen/SVD +23 -17
  21. package/eigen/Eigen/Sparse +1 -2
  22. package/eigen/Eigen/SparseCholesky +18 -15
  23. package/eigen/Eigen/SparseCore +18 -17
  24. package/eigen/Eigen/SparseLU +9 -9
  25. package/eigen/Eigen/SparseQR +16 -14
  26. package/eigen/Eigen/StdDeque +5 -2
  27. package/eigen/Eigen/StdList +5 -2
  28. package/eigen/Eigen/StdVector +5 -2
  29. package/eigen/Eigen/SuperLUSupport +30 -24
  30. package/eigen/Eigen/ThreadPool +80 -0
  31. package/eigen/Eigen/UmfPackSupport +19 -17
  32. package/eigen/Eigen/Version +14 -0
  33. package/eigen/Eigen/src/AccelerateSupport/AccelerateSupport.h +423 -0
  34. package/eigen/Eigen/src/AccelerateSupport/InternalHeaderCheck.h +3 -0
  35. package/eigen/Eigen/src/Cholesky/InternalHeaderCheck.h +3 -0
  36. package/eigen/Eigen/src/Cholesky/LDLT.h +366 -405
  37. package/eigen/Eigen/src/Cholesky/LLT.h +323 -367
  38. package/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +81 -56
  39. package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +585 -529
  40. package/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
  41. package/eigen/Eigen/src/Core/ArithmeticSequence.h +143 -317
  42. package/eigen/Eigen/src/Core/Array.h +329 -370
  43. package/eigen/Eigen/src/Core/ArrayBase.h +190 -203
  44. package/eigen/Eigen/src/Core/ArrayWrapper.h +126 -170
  45. package/eigen/Eigen/src/Core/Assign.h +30 -40
  46. package/eigen/Eigen/src/Core/AssignEvaluator.h +651 -604
  47. package/eigen/Eigen/src/Core/Assign_MKL.h +125 -120
  48. package/eigen/Eigen/src/Core/BandMatrix.h +267 -282
  49. package/eigen/Eigen/src/Core/Block.h +371 -390
  50. package/eigen/Eigen/src/Core/CommaInitializer.h +85 -100
  51. package/eigen/Eigen/src/Core/ConditionEstimator.h +51 -53
  52. package/eigen/Eigen/src/Core/CoreEvaluators.h +1214 -937
  53. package/eigen/Eigen/src/Core/CoreIterators.h +72 -63
  54. package/eigen/Eigen/src/Core/CwiseBinaryOp.h +112 -129
  55. package/eigen/Eigen/src/Core/CwiseNullaryOp.h +676 -702
  56. package/eigen/Eigen/src/Core/CwiseTernaryOp.h +77 -103
  57. package/eigen/Eigen/src/Core/CwiseUnaryOp.h +55 -67
  58. package/eigen/Eigen/src/Core/CwiseUnaryView.h +127 -92
  59. package/eigen/Eigen/src/Core/DenseBase.h +630 -658
  60. package/eigen/Eigen/src/Core/DenseCoeffsBase.h +511 -628
  61. package/eigen/Eigen/src/Core/DenseStorage.h +511 -590
  62. package/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
  63. package/eigen/Eigen/src/Core/Diagonal.h +168 -207
  64. package/eigen/Eigen/src/Core/DiagonalMatrix.h +346 -317
  65. package/eigen/Eigen/src/Core/DiagonalProduct.h +12 -10
  66. package/eigen/Eigen/src/Core/Dot.h +167 -217
  67. package/eigen/Eigen/src/Core/EigenBase.h +74 -85
  68. package/eigen/Eigen/src/Core/Fill.h +138 -0
  69. package/eigen/Eigen/src/Core/FindCoeff.h +464 -0
  70. package/eigen/Eigen/src/Core/ForceAlignedAccess.h +90 -113
  71. package/eigen/Eigen/src/Core/Fuzzy.h +82 -105
  72. package/eigen/Eigen/src/Core/GeneralProduct.h +315 -261
  73. package/eigen/Eigen/src/Core/GenericPacketMath.h +1182 -520
  74. package/eigen/Eigen/src/Core/GlobalFunctions.h +193 -157
  75. package/eigen/Eigen/src/Core/IO.h +131 -156
  76. package/eigen/Eigen/src/Core/IndexedView.h +209 -125
  77. package/eigen/Eigen/src/Core/InnerProduct.h +260 -0
  78. package/eigen/Eigen/src/Core/InternalHeaderCheck.h +3 -0
  79. package/eigen/Eigen/src/Core/Inverse.h +50 -59
  80. package/eigen/Eigen/src/Core/Map.h +123 -141
  81. package/eigen/Eigen/src/Core/MapBase.h +255 -282
  82. package/eigen/Eigen/src/Core/MathFunctions.h +1247 -1201
  83. package/eigen/Eigen/src/Core/MathFunctionsImpl.h +162 -99
  84. package/eigen/Eigen/src/Core/Matrix.h +463 -494
  85. package/eigen/Eigen/src/Core/MatrixBase.h +468 -470
  86. package/eigen/Eigen/src/Core/NestByValue.h +58 -52
  87. package/eigen/Eigen/src/Core/NoAlias.h +79 -86
  88. package/eigen/Eigen/src/Core/NumTraits.h +206 -206
  89. package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +163 -142
  90. package/eigen/Eigen/src/Core/PermutationMatrix.h +461 -511
  91. package/eigen/Eigen/src/Core/PlainObjectBase.h +858 -972
  92. package/eigen/Eigen/src/Core/Product.h +246 -130
  93. package/eigen/Eigen/src/Core/ProductEvaluators.h +779 -671
  94. package/eigen/Eigen/src/Core/Random.h +153 -164
  95. package/eigen/Eigen/src/Core/RandomImpl.h +262 -0
  96. package/eigen/Eigen/src/Core/RealView.h +250 -0
  97. package/eigen/Eigen/src/Core/Redux.h +334 -314
  98. package/eigen/Eigen/src/Core/Ref.h +259 -257
  99. package/eigen/Eigen/src/Core/Replicate.h +92 -104
  100. package/eigen/Eigen/src/Core/Reshaped.h +215 -271
  101. package/eigen/Eigen/src/Core/ReturnByValue.h +47 -55
  102. package/eigen/Eigen/src/Core/Reverse.h +133 -148
  103. package/eigen/Eigen/src/Core/Select.h +68 -140
  104. package/eigen/Eigen/src/Core/SelfAdjointView.h +254 -290
  105. package/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h +23 -20
  106. package/eigen/Eigen/src/Core/SkewSymmetricMatrix3.h +382 -0
  107. package/eigen/Eigen/src/Core/Solve.h +88 -102
  108. package/eigen/Eigen/src/Core/SolveTriangular.h +126 -124
  109. package/eigen/Eigen/src/Core/SolverBase.h +132 -133
  110. package/eigen/Eigen/src/Core/StableNorm.h +113 -147
  111. package/eigen/Eigen/src/Core/StlIterators.h +404 -248
  112. package/eigen/Eigen/src/Core/Stride.h +90 -92
  113. package/eigen/Eigen/src/Core/Swap.h +70 -39
  114. package/eigen/Eigen/src/Core/Transpose.h +258 -295
  115. package/eigen/Eigen/src/Core/Transpositions.h +270 -333
  116. package/eigen/Eigen/src/Core/TriangularMatrix.h +642 -743
  117. package/eigen/Eigen/src/Core/VectorBlock.h +59 -72
  118. package/eigen/Eigen/src/Core/VectorwiseOp.h +653 -704
  119. package/eigen/Eigen/src/Core/Visitor.h +464 -308
  120. package/eigen/Eigen/src/Core/arch/AVX/Complex.h +380 -187
  121. package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +65 -163
  122. package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +2145 -638
  123. package/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
  124. package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +253 -60
  125. package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +278 -228
  126. package/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
  127. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +48 -269
  128. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
  129. package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1597 -754
  130. package/eigen/Eigen/src/Core/arch/AVX512/PacketMathFP16.h +1413 -0
  131. package/eigen/Eigen/src/Core/arch/AVX512/Reductions.h +297 -0
  132. package/eigen/Eigen/src/Core/arch/AVX512/TrsmKernel.h +1167 -0
  133. package/eigen/Eigen/src/Core/arch/AVX512/TrsmUnrolls.inc +1219 -0
  134. package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +229 -41
  135. package/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
  136. package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +420 -184
  137. package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +40 -49
  138. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2962 -2213
  139. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +196 -212
  140. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +713 -441
  141. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMAbfloat16.h +742 -0
  142. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixVectorProduct.inc +2818 -0
  143. package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +2380 -1362
  144. package/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
  145. package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +390 -224
  146. package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +78 -67
  147. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1784 -799
  148. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +167 -50
  149. package/eigen/Eigen/src/Core/arch/Default/Half.h +528 -379
  150. package/eigen/Eigen/src/Core/arch/Default/Settings.h +10 -12
  151. package/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
  152. package/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +41 -40
  153. package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +550 -523
  154. package/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
  155. package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +27 -30
  156. package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +8 -8
  157. package/eigen/Eigen/src/Core/arch/HVX/PacketMath.h +1088 -0
  158. package/eigen/Eigen/src/Core/arch/LSX/Complex.h +520 -0
  159. package/eigen/Eigen/src/Core/arch/LSX/GeneralBlockPanelKernel.h +23 -0
  160. package/eigen/Eigen/src/Core/arch/LSX/MathFunctions.h +43 -0
  161. package/eigen/Eigen/src/Core/arch/LSX/PacketMath.h +2866 -0
  162. package/eigen/Eigen/src/Core/arch/LSX/TypeCasting.h +526 -0
  163. package/eigen/Eigen/src/Core/arch/MSA/Complex.h +54 -82
  164. package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +84 -92
  165. package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +51 -47
  166. package/eigen/Eigen/src/Core/arch/NEON/Complex.h +454 -306
  167. package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +175 -115
  168. package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +23 -30
  169. package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +4366 -2857
  170. package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +616 -393
  171. package/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
  172. package/eigen/Eigen/src/Core/arch/SSE/Complex.h +350 -198
  173. package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +38 -149
  174. package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +1791 -912
  175. package/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
  176. package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +128 -40
  177. package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +10 -6
  178. package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +156 -234
  179. package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +6 -3
  180. package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +27 -32
  181. package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +119 -117
  182. package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +325 -419
  183. package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +15 -17
  184. package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +325 -181
  185. package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +94 -83
  186. package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +811 -458
  187. package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +121 -124
  188. package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +576 -370
  189. package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +194 -109
  190. package/eigen/Eigen/src/Core/functors/StlFunctors.h +95 -112
  191. package/eigen/Eigen/src/Core/functors/TernaryFunctors.h +34 -7
  192. package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1038 -749
  193. package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1883 -1375
  194. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +312 -370
  195. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +189 -176
  196. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +84 -81
  197. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +154 -73
  198. package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +292 -337
  199. package/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +80 -77
  200. package/eigen/Eigen/src/Core/products/Parallelizer.h +207 -105
  201. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +327 -388
  202. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +206 -224
  203. package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +138 -147
  204. package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +58 -61
  205. package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +71 -71
  206. package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +48 -47
  207. package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +294 -369
  208. package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +246 -238
  209. package/eigen/Eigen/src/Core/products/TriangularMatrixVector.h +244 -247
  210. package/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +212 -192
  211. package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +328 -277
  212. package/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +108 -109
  213. package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +68 -94
  214. package/eigen/Eigen/src/Core/util/Assert.h +158 -0
  215. package/eigen/Eigen/src/Core/util/BlasUtil.h +342 -303
  216. package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +348 -317
  217. package/eigen/Eigen/src/Core/util/Constants.h +297 -262
  218. package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +130 -90
  219. package/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
  220. package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +449 -247
  221. package/eigen/Eigen/src/Core/util/GpuHipCudaDefines.inc +101 -0
  222. package/eigen/Eigen/src/Core/util/GpuHipCudaUndefines.inc +45 -0
  223. package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +417 -116
  224. package/eigen/Eigen/src/Core/util/IntegralConstant.h +211 -204
  225. package/eigen/Eigen/src/Core/util/MKL_support.h +39 -37
  226. package/eigen/Eigen/src/Core/util/Macros.h +655 -773
  227. package/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
  228. package/eigen/Eigen/src/Core/util/Memory.h +970 -748
  229. package/eigen/Eigen/src/Core/util/Meta.h +581 -633
  230. package/eigen/Eigen/src/Core/util/MoreMeta.h +638 -0
  231. package/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +32 -19
  232. package/eigen/Eigen/src/Core/util/ReshapedHelper.h +17 -17
  233. package/eigen/Eigen/src/Core/util/Serializer.h +209 -0
  234. package/eigen/Eigen/src/Core/util/StaticAssert.h +50 -166
  235. package/eigen/Eigen/src/Core/util/SymbolicIndex.h +377 -225
  236. package/eigen/Eigen/src/Core/util/XprHelper.h +784 -547
  237. package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +246 -277
  238. package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +299 -319
  239. package/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +52 -48
  240. package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +413 -456
  241. package/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +309 -325
  242. package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +157 -171
  243. package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +292 -310
  244. package/eigen/Eigen/src/Eigenvalues/InternalHeaderCheck.h +3 -0
  245. package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +89 -105
  246. package/eigen/Eigen/src/Eigenvalues/RealQZ.h +537 -607
  247. package/eigen/Eigen/src/Eigenvalues/RealSchur.h +342 -381
  248. package/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +41 -35
  249. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +541 -595
  250. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +47 -44
  251. package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +430 -462
  252. package/eigen/Eigen/src/Geometry/AlignedBox.h +226 -227
  253. package/eigen/Eigen/src/Geometry/AngleAxis.h +131 -133
  254. package/eigen/Eigen/src/Geometry/EulerAngles.h +163 -74
  255. package/eigen/Eigen/src/Geometry/Homogeneous.h +285 -333
  256. package/eigen/Eigen/src/Geometry/Hyperplane.h +151 -160
  257. package/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
  258. package/eigen/Eigen/src/Geometry/OrthoMethods.h +168 -146
  259. package/eigen/Eigen/src/Geometry/ParametrizedLine.h +127 -127
  260. package/eigen/Eigen/src/Geometry/Quaternion.h +566 -506
  261. package/eigen/Eigen/src/Geometry/Rotation2D.h +107 -105
  262. package/eigen/Eigen/src/Geometry/RotationBase.h +148 -145
  263. package/eigen/Eigen/src/Geometry/Scaling.h +113 -106
  264. package/eigen/Eigen/src/Geometry/Transform.h +858 -936
  265. package/eigen/Eigen/src/Geometry/Translation.h +94 -92
  266. package/eigen/Eigen/src/Geometry/Umeyama.h +79 -84
  267. package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +90 -104
  268. package/eigen/Eigen/src/Householder/BlockHouseholder.h +51 -46
  269. package/eigen/Eigen/src/Householder/Householder.h +102 -124
  270. package/eigen/Eigen/src/Householder/HouseholderSequence.h +412 -453
  271. package/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
  272. package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +149 -162
  273. package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +124 -119
  274. package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +92 -104
  275. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +251 -243
  276. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +224 -228
  277. package/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
  278. package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +178 -227
  279. package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +79 -84
  280. package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +54 -60
  281. package/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
  282. package/eigen/Eigen/src/Jacobi/Jacobi.h +252 -308
  283. package/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
  284. package/eigen/Eigen/src/KLUSupport/KLUSupport.h +208 -227
  285. package/eigen/Eigen/src/LU/Determinant.h +50 -69
  286. package/eigen/Eigen/src/LU/FullPivLU.h +545 -596
  287. package/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
  288. package/eigen/Eigen/src/LU/InverseImpl.h +206 -285
  289. package/eigen/Eigen/src/LU/PartialPivLU.h +390 -428
  290. package/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +54 -40
  291. package/eigen/Eigen/src/LU/arch/InverseSize4.h +72 -70
  292. package/eigen/Eigen/src/MetisSupport/InternalHeaderCheck.h +3 -0
  293. package/eigen/Eigen/src/MetisSupport/MetisSupport.h +81 -93
  294. package/eigen/Eigen/src/OrderingMethods/Amd.h +243 -265
  295. package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +831 -1004
  296. package/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
  297. package/eigen/Eigen/src/OrderingMethods/Ordering.h +112 -119
  298. package/eigen/Eigen/src/PaStiXSupport/InternalHeaderCheck.h +3 -0
  299. package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +524 -570
  300. package/eigen/Eigen/src/PardisoSupport/InternalHeaderCheck.h +3 -0
  301. package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +385 -430
  302. package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +479 -479
  303. package/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +120 -56
  304. package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +166 -153
  305. package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +495 -475
  306. package/eigen/Eigen/src/QR/HouseholderQR.h +394 -285
  307. package/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h +32 -23
  308. package/eigen/Eigen/src/QR/InternalHeaderCheck.h +3 -0
  309. package/eigen/Eigen/src/SPQRSupport/InternalHeaderCheck.h +3 -0
  310. package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +244 -264
  311. package/eigen/Eigen/src/SVD/BDCSVD.h +817 -713
  312. package/eigen/Eigen/src/SVD/BDCSVD_LAPACKE.h +174 -0
  313. package/eigen/Eigen/src/SVD/InternalHeaderCheck.h +3 -0
  314. package/eigen/Eigen/src/SVD/JacobiSVD.h +577 -543
  315. package/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +85 -49
  316. package/eigen/Eigen/src/SVD/SVDBase.h +242 -182
  317. package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +200 -235
  318. package/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
  319. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +765 -594
  320. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +308 -94
  321. package/eigen/Eigen/src/SparseCore/AmbiVector.h +202 -251
  322. package/eigen/Eigen/src/SparseCore/CompressedStorage.h +184 -252
  323. package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +134 -178
  324. package/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
  325. package/eigen/Eigen/src/SparseCore/SparseAssign.h +149 -140
  326. package/eigen/Eigen/src/SparseCore/SparseBlock.h +403 -440
  327. package/eigen/Eigen/src/SparseCore/SparseColEtree.h +100 -112
  328. package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +525 -303
  329. package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +555 -339
  330. package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +100 -108
  331. package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +169 -197
  332. package/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h +71 -71
  333. package/eigen/Eigen/src/SparseCore/SparseDot.h +49 -47
  334. package/eigen/Eigen/src/SparseCore/SparseFuzzy.h +13 -11
  335. package/eigen/Eigen/src/SparseCore/SparseMap.h +243 -253
  336. package/eigen/Eigen/src/SparseCore/SparseMatrix.h +1603 -1245
  337. package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +403 -350
  338. package/eigen/Eigen/src/SparseCore/SparsePermutation.h +186 -115
  339. package/eigen/Eigen/src/SparseCore/SparseProduct.h +94 -97
  340. package/eigen/Eigen/src/SparseCore/SparseRedux.h +22 -24
  341. package/eigen/Eigen/src/SparseCore/SparseRef.h +268 -295
  342. package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +370 -416
  343. package/eigen/Eigen/src/SparseCore/SparseSolverBase.h +78 -87
  344. package/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +81 -95
  345. package/eigen/Eigen/src/SparseCore/SparseTranspose.h +62 -71
  346. package/eigen/Eigen/src/SparseCore/SparseTriangularView.h +132 -144
  347. package/eigen/Eigen/src/SparseCore/SparseUtil.h +138 -115
  348. package/eigen/Eigen/src/SparseCore/SparseVector.h +426 -372
  349. package/eigen/Eigen/src/SparseCore/SparseView.h +164 -193
  350. package/eigen/Eigen/src/SparseCore/TriangularSolver.h +129 -170
  351. package/eigen/Eigen/src/SparseLU/InternalHeaderCheck.h +3 -0
  352. package/eigen/Eigen/src/SparseLU/SparseLU.h +756 -710
  353. package/eigen/Eigen/src/SparseLU/SparseLUImpl.h +61 -48
  354. package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +102 -118
  355. package/eigen/Eigen/src/SparseLU/SparseLU_Structs.h +38 -35
  356. package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +245 -301
  357. package/eigen/Eigen/src/SparseLU/SparseLU_Utils.h +44 -49
  358. package/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h +104 -108
  359. package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +89 -100
  360. package/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +57 -58
  361. package/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +43 -55
  362. package/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +74 -71
  363. package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +124 -132
  364. package/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h +136 -159
  365. package/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h +51 -52
  366. package/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h +67 -73
  367. package/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h +24 -26
  368. package/eigen/Eigen/src/SparseQR/InternalHeaderCheck.h +3 -0
  369. package/eigen/Eigen/src/SparseQR/SparseQR.h +450 -502
  370. package/eigen/Eigen/src/StlSupport/StdDeque.h +28 -93
  371. package/eigen/Eigen/src/StlSupport/StdList.h +28 -84
  372. package/eigen/Eigen/src/StlSupport/StdVector.h +28 -108
  373. package/eigen/Eigen/src/StlSupport/details.h +48 -50
  374. package/eigen/Eigen/src/SuperLUSupport/InternalHeaderCheck.h +3 -0
  375. package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +634 -730
  376. package/eigen/Eigen/src/ThreadPool/Barrier.h +70 -0
  377. package/eigen/Eigen/src/ThreadPool/CoreThreadPoolDevice.h +336 -0
  378. package/eigen/Eigen/src/ThreadPool/EventCount.h +241 -0
  379. package/eigen/Eigen/src/ThreadPool/ForkJoin.h +140 -0
  380. package/eigen/Eigen/src/ThreadPool/InternalHeaderCheck.h +4 -0
  381. package/eigen/Eigen/src/ThreadPool/NonBlockingThreadPool.h +587 -0
  382. package/eigen/Eigen/src/ThreadPool/RunQueue.h +230 -0
  383. package/eigen/Eigen/src/ThreadPool/ThreadCancel.h +21 -0
  384. package/eigen/Eigen/src/ThreadPool/ThreadEnvironment.h +43 -0
  385. package/eigen/Eigen/src/ThreadPool/ThreadLocal.h +289 -0
  386. package/eigen/Eigen/src/ThreadPool/ThreadPoolInterface.h +50 -0
  387. package/eigen/Eigen/src/ThreadPool/ThreadYield.h +16 -0
  388. package/eigen/Eigen/src/UmfPackSupport/InternalHeaderCheck.h +3 -0
  389. package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +428 -464
  390. package/eigen/Eigen/src/misc/Image.h +41 -43
  391. package/eigen/Eigen/src/misc/InternalHeaderCheck.h +3 -0
  392. package/eigen/Eigen/src/misc/Kernel.h +39 -41
  393. package/eigen/Eigen/src/misc/RealSvd2x2.h +19 -21
  394. package/eigen/Eigen/src/misc/blas.h +83 -426
  395. package/eigen/Eigen/src/misc/lapacke.h +9972 -16179
  396. package/eigen/Eigen/src/misc/lapacke_helpers.h +163 -0
  397. package/eigen/Eigen/src/misc/lapacke_mangling.h +4 -5
  398. package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.inc +344 -0
  399. package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.inc +544 -0
  400. package/eigen/Eigen/src/plugins/{BlockMethods.h → BlockMethods.inc} +434 -506
  401. package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
  402. package/eigen/Eigen/src/plugins/{CommonCwiseUnaryOps.h → CommonCwiseUnaryOps.inc} +58 -68
  403. package/eigen/Eigen/src/plugins/IndexedViewMethods.inc +192 -0
  404. package/eigen/Eigen/src/plugins/InternalHeaderCheck.inc +3 -0
  405. package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.inc +331 -0
  406. package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.inc +118 -0
  407. package/eigen/Eigen/src/plugins/ReshapedMethods.inc +133 -0
  408. package/package.json +1 -1
  409. package/eigen/COPYING.APACHE +0 -203
  410. package/eigen/COPYING.BSD +0 -26
  411. package/eigen/COPYING.GPL +0 -674
  412. package/eigen/COPYING.LGPL +0 -502
  413. package/eigen/COPYING.MINPACK +0 -51
  414. package/eigen/COPYING.MPL2 +0 -373
  415. package/eigen/COPYING.README +0 -18
  416. package/eigen/Eigen/src/Core/BooleanRedux.h +0 -162
  417. package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +0 -258
  418. package/eigen/Eigen/src/Core/arch/Default/TypeCasting.h +0 -120
  419. package/eigen/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +0 -694
  420. package/eigen/Eigen/src/Core/util/NonMPL2.h +0 -3
  421. package/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h +0 -67
  422. package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +0 -280
  423. package/eigen/Eigen/src/misc/lapack.h +0 -152
  424. package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +0 -358
  425. package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +0 -696
  426. package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +0 -115
  427. package/eigen/Eigen/src/plugins/IndexedViewMethods.h +0 -262
  428. package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +0 -152
  429. package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +0 -95
  430. package/eigen/Eigen/src/plugins/ReshapedMethods.h +0 -149
  431. package/eigen/README.md +0 -5
@@ -11,78 +11,88 @@
11
11
  #ifndef EIGEN_COLPIVOTINGHOUSEHOLDERQR_H
12
12
  #define EIGEN_COLPIVOTINGHOUSEHOLDERQR_H
13
13
 
14
+ // IWYU pragma: private
15
+ #include "./InternalHeaderCheck.h"
16
+
14
17
  namespace Eigen {
15
18
 
16
19
  namespace internal {
17
- template<typename _MatrixType> struct traits<ColPivHouseholderQR<_MatrixType> >
18
- : traits<_MatrixType>
19
- {
20
+ template <typename MatrixType_, typename PermutationIndex_>
21
+ struct traits<ColPivHouseholderQR<MatrixType_, PermutationIndex_>> : traits<MatrixType_> {
20
22
  typedef MatrixXpr XprKind;
21
23
  typedef SolverStorage StorageKind;
22
- typedef int StorageIndex;
24
+ typedef PermutationIndex_ PermutationIndex;
23
25
  enum { Flags = 0 };
24
26
  };
25
27
 
26
- } // end namespace internal
28
+ } // end namespace internal
27
29
 
28
30
  /** \ingroup QR_Module
29
- *
30
- * \class ColPivHouseholderQR
31
- *
32
- * \brief Householder rank-revealing QR decomposition of a matrix with column-pivoting
33
- *
34
- * \tparam _MatrixType the type of the matrix of which we are computing the QR decomposition
35
- *
36
- * This class performs a rank-revealing QR decomposition of a matrix \b A into matrices \b P, \b Q and \b R
37
- * such that
38
- * \f[
39
- * \mathbf{A} \, \mathbf{P} = \mathbf{Q} \, \mathbf{R}
40
- * \f]
41
- * by using Householder transformations. Here, \b P is a permutation matrix, \b Q a unitary matrix and \b R an
42
- * upper triangular matrix.
43
- *
44
- * This decomposition performs column pivoting in order to be rank-revealing and improve
45
- * numerical stability. It is slower than HouseholderQR, and faster than FullPivHouseholderQR.
46
- *
47
- * This class supports the \link InplaceDecomposition inplace decomposition \endlink mechanism.
48
- *
49
- * \sa MatrixBase::colPivHouseholderQr()
50
- */
51
- template<typename _MatrixType> class ColPivHouseholderQR
52
- : public SolverBase<ColPivHouseholderQR<_MatrixType> >
53
- {
54
- public:
55
-
56
- typedef _MatrixType MatrixType;
57
- typedef SolverBase<ColPivHouseholderQR> Base;
58
- friend class SolverBase<ColPivHouseholderQR>;
59
-
60
- EIGEN_GENERIC_PUBLIC_INTERFACE(ColPivHouseholderQR)
61
- enum {
62
- MaxRowsAtCompileTime = MatrixType::MaxRowsAtCompileTime,
63
- MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime
64
- };
65
- typedef typename internal::plain_diag_type<MatrixType>::type HCoeffsType;
66
- typedef PermutationMatrix<ColsAtCompileTime, MaxColsAtCompileTime> PermutationType;
67
- typedef typename internal::plain_row_type<MatrixType, Index>::type IntRowVectorType;
68
- typedef typename internal::plain_row_type<MatrixType>::type RowVectorType;
69
- typedef typename internal::plain_row_type<MatrixType, RealScalar>::type RealRowVectorType;
70
- typedef HouseholderSequence<MatrixType,typename internal::remove_all<typename HCoeffsType::ConjugateReturnType>::type> HouseholderSequenceType;
71
- typedef typename MatrixType::PlainObject PlainObject;
72
-
73
- private:
74
-
75
- typedef typename PermutationType::StorageIndex PermIndexType;
76
-
77
- public:
78
-
79
- /**
80
- * \brief Default Constructor.
81
- *
82
- * The default constructor is useful in cases in which the user intends to
83
- * perform decompositions via ColPivHouseholderQR::compute(const MatrixType&).
84
- */
85
- ColPivHouseholderQR()
31
+ *
32
+ * \class ColPivHouseholderQR
33
+ *
34
+ * \brief Householder rank-revealing QR decomposition of a matrix with column-pivoting
35
+ *
36
+ * \tparam MatrixType_ the type of the matrix of which we are computing the QR decomposition
37
+ *
38
+ * This class performs a rank-revealing QR decomposition of a matrix \b A into matrices \b P, \b Q and \b R
39
+ * such that
40
+ * \f[
41
+ * \mathbf{A} \, \mathbf{P} = \mathbf{Q} \, \mathbf{R}
42
+ * \f]
43
+ * by using Householder transformations. Here, \b P is a permutation matrix, \b Q a unitary matrix and \b R an
44
+ * upper triangular matrix.
45
+ *
46
+ * This decomposition performs column pivoting in order to be rank-revealing and improve
47
+ * numerical stability. It is slower than HouseholderQR, and faster than FullPivHouseholderQR.
48
+ *
49
+ * This class supports the \link InplaceDecomposition inplace decomposition \endlink mechanism.
50
+ *
51
+ * \sa MatrixBase::colPivHouseholderQr()
52
+ */
53
+ template <typename MatrixType_, typename PermutationIndex_>
54
+ class ColPivHouseholderQR : public SolverBase<ColPivHouseholderQR<MatrixType_, PermutationIndex_>> {
55
+ public:
56
+ typedef MatrixType_ MatrixType;
57
+ typedef SolverBase<ColPivHouseholderQR> Base;
58
+ friend class SolverBase<ColPivHouseholderQR>;
59
+ typedef PermutationIndex_ PermutationIndex;
60
+ EIGEN_GENERIC_PUBLIC_INTERFACE(ColPivHouseholderQR)
61
+
62
+ enum {
63
+ MaxRowsAtCompileTime = MatrixType::MaxRowsAtCompileTime,
64
+ MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime
65
+ };
66
+ typedef typename internal::plain_diag_type<MatrixType>::type HCoeffsType;
67
+ typedef PermutationMatrix<ColsAtCompileTime, MaxColsAtCompileTime, PermutationIndex> PermutationType;
68
+ typedef typename internal::plain_row_type<MatrixType, PermutationIndex>::type IntRowVectorType;
69
+ typedef typename internal::plain_row_type<MatrixType>::type RowVectorType;
70
+ typedef typename internal::plain_row_type<MatrixType, RealScalar>::type RealRowVectorType;
71
+ typedef HouseholderSequence<MatrixType, internal::remove_all_t<typename HCoeffsType::ConjugateReturnType>>
72
+ HouseholderSequenceType;
73
+ typedef typename MatrixType::PlainObject PlainObject;
74
+
75
+ private:
76
+ void init(Index rows, Index cols) {
77
+ Index diag = numext::mini(rows, cols);
78
+ m_hCoeffs.resize(diag);
79
+ m_colsPermutation.resize(cols);
80
+ m_colsTranspositions.resize(cols);
81
+ m_temp.resize(cols);
82
+ m_colNormsUpdated.resize(cols);
83
+ m_colNormsDirect.resize(cols);
84
+ m_isInitialized = false;
85
+ m_usePrescribedThreshold = false;
86
+ }
87
+
88
+ public:
89
+ /**
90
+ * \brief Default Constructor.
91
+ *
92
+ * The default constructor is useful in cases in which the user intends to
93
+ * perform decompositions via ColPivHouseholderQR::compute(const MatrixType&).
94
+ */
95
+ ColPivHouseholderQR()
86
96
  : m_qr(),
87
97
  m_hCoeffs(),
88
98
  m_colsPermutation(),
@@ -93,398 +103,390 @@ template<typename _MatrixType> class ColPivHouseholderQR
93
103
  m_isInitialized(false),
94
104
  m_usePrescribedThreshold(false) {}
95
105
 
96
- /** \brief Default Constructor with memory preallocation
97
- *
98
- * Like the default constructor but with preallocation of the internal data
99
- * according to the specified problem \a size.
100
- * \sa ColPivHouseholderQR()
101
- */
102
- ColPivHouseholderQR(Index rows, Index cols)
103
- : m_qr(rows, cols),
104
- m_hCoeffs((std::min)(rows,cols)),
105
- m_colsPermutation(PermIndexType(cols)),
106
- m_colsTranspositions(cols),
107
- m_temp(cols),
108
- m_colNormsUpdated(cols),
109
- m_colNormsDirect(cols),
110
- m_isInitialized(false),
111
- m_usePrescribedThreshold(false) {}
106
+ /** \brief Default Constructor with memory preallocation
107
+ *
108
+ * Like the default constructor but with preallocation of the internal data
109
+ * according to the specified problem \a size.
110
+ * \sa ColPivHouseholderQR()
111
+ */
112
+ ColPivHouseholderQR(Index rows, Index cols) : m_qr(rows, cols) { init(rows, cols); }
113
+
114
+ /** \brief Constructs a QR factorization from a given matrix
115
+ *
116
+ * This constructor computes the QR factorization of the matrix \a matrix by calling
117
+ * the method compute(). It is a short cut for:
118
+ *
119
+ * \code
120
+ * ColPivHouseholderQR<MatrixType> qr(matrix.rows(), matrix.cols());
121
+ * qr.compute(matrix);
122
+ * \endcode
123
+ *
124
+ * \sa compute()
125
+ */
126
+ template <typename InputType>
127
+ explicit ColPivHouseholderQR(const EigenBase<InputType>& matrix) : m_qr(matrix.rows(), matrix.cols()) {
128
+ init(matrix.rows(), matrix.cols());
129
+ compute(matrix.derived());
130
+ }
112
131
 
113
- /** \brief Constructs a QR factorization from a given matrix
114
- *
115
- * This constructor computes the QR factorization of the matrix \a matrix by calling
116
- * the method compute(). It is a short cut for:
117
- *
118
- * \code
119
- * ColPivHouseholderQR<MatrixType> qr(matrix.rows(), matrix.cols());
120
- * qr.compute(matrix);
121
- * \endcode
122
- *
123
- * \sa compute()
124
- */
125
- template<typename InputType>
126
- explicit ColPivHouseholderQR(const EigenBase<InputType>& matrix)
127
- : m_qr(matrix.rows(), matrix.cols()),
128
- m_hCoeffs((std::min)(matrix.rows(),matrix.cols())),
129
- m_colsPermutation(PermIndexType(matrix.cols())),
130
- m_colsTranspositions(matrix.cols()),
131
- m_temp(matrix.cols()),
132
- m_colNormsUpdated(matrix.cols()),
133
- m_colNormsDirect(matrix.cols()),
134
- m_isInitialized(false),
135
- m_usePrescribedThreshold(false)
136
- {
137
- compute(matrix.derived());
138
- }
132
+ /** \brief Constructs a QR factorization from a given matrix
133
+ *
134
+ * This overloaded constructor is provided for \link InplaceDecomposition inplace decomposition \endlink when \c
135
+ * MatrixType is a Eigen::Ref.
136
+ *
137
+ * \sa ColPivHouseholderQR(const EigenBase&)
138
+ */
139
+ template <typename InputType>
140
+ explicit ColPivHouseholderQR(EigenBase<InputType>& matrix) : m_qr(matrix.derived()) {
141
+ init(matrix.rows(), matrix.cols());
142
+ computeInPlace();
143
+ }
139
144
 
140
- /** \brief Constructs a QR factorization from a given matrix
141
- *
142
- * This overloaded constructor is provided for \link InplaceDecomposition inplace decomposition \endlink when \c MatrixType is a Eigen::Ref.
143
- *
144
- * \sa ColPivHouseholderQR(const EigenBase&)
145
- */
146
- template<typename InputType>
147
- explicit ColPivHouseholderQR(EigenBase<InputType>& matrix)
148
- : m_qr(matrix.derived()),
149
- m_hCoeffs((std::min)(matrix.rows(),matrix.cols())),
150
- m_colsPermutation(PermIndexType(matrix.cols())),
151
- m_colsTranspositions(matrix.cols()),
152
- m_temp(matrix.cols()),
153
- m_colNormsUpdated(matrix.cols()),
154
- m_colNormsDirect(matrix.cols()),
155
- m_isInitialized(false),
156
- m_usePrescribedThreshold(false)
157
- {
158
- computeInPlace();
159
- }
145
+ #ifdef EIGEN_PARSED_BY_DOXYGEN
146
+ /** This method finds a solution x to the equation Ax=b, where A is the matrix of which
147
+ * *this is the QR decomposition, if any exists.
148
+ *
149
+ * \param b the right-hand-side of the equation to solve.
150
+ *
151
+ * \returns a solution.
152
+ *
153
+ * \note_about_checking_solutions
154
+ *
155
+ * \note_about_arbitrary_choice_of_solution
156
+ *
157
+ * Example: \include ColPivHouseholderQR_solve.cpp
158
+ * Output: \verbinclude ColPivHouseholderQR_solve.out
159
+ */
160
+ template <typename Rhs>
161
+ inline const Solve<ColPivHouseholderQR, Rhs> solve(const MatrixBase<Rhs>& b) const;
162
+ #endif
160
163
 
161
- #ifdef EIGEN_PARSED_BY_DOXYGEN
162
- /** This method finds a solution x to the equation Ax=b, where A is the matrix of which
163
- * *this is the QR decomposition, if any exists.
164
- *
165
- * \param b the right-hand-side of the equation to solve.
166
- *
167
- * \returns a solution.
168
- *
169
- * \note_about_checking_solutions
170
- *
171
- * \note_about_arbitrary_choice_of_solution
172
- *
173
- * Example: \include ColPivHouseholderQR_solve.cpp
174
- * Output: \verbinclude ColPivHouseholderQR_solve.out
175
- */
176
- template<typename Rhs>
177
- inline const Solve<ColPivHouseholderQR, Rhs>
178
- solve(const MatrixBase<Rhs>& b) const;
179
- #endif
180
-
181
- HouseholderSequenceType householderQ() const;
182
- HouseholderSequenceType matrixQ() const
183
- {
184
- return householderQ();
185
- }
164
+ HouseholderSequenceType householderQ() const;
165
+ HouseholderSequenceType matrixQ() const { return householderQ(); }
186
166
 
187
- /** \returns a reference to the matrix where the Householder QR decomposition is stored
188
- */
189
- const MatrixType& matrixQR() const
190
- {
191
- eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized.");
192
- return m_qr;
193
- }
167
+ /** \returns a reference to the matrix where the Householder QR decomposition is stored
168
+ */
169
+ const MatrixType& matrixQR() const {
170
+ eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized.");
171
+ return m_qr;
172
+ }
194
173
 
195
- /** \returns a reference to the matrix where the result Householder QR is stored
196
- * \warning The strict lower part of this matrix contains internal values.
197
- * Only the upper triangular part should be referenced. To get it, use
198
- * \code matrixR().template triangularView<Upper>() \endcode
199
- * For rank-deficient matrices, use
200
- * \code
201
- * matrixR().topLeftCorner(rank(), rank()).template triangularView<Upper>()
202
- * \endcode
203
- */
204
- const MatrixType& matrixR() const
205
- {
206
- eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized.");
207
- return m_qr;
208
- }
174
+ /** \returns a reference to the matrix where the result Householder QR is stored
175
+ * \warning The strict lower part of this matrix contains internal values.
176
+ * Only the upper triangular part should be referenced. To get it, use
177
+ * \code matrixR().template triangularView<Upper>() \endcode
178
+ * For rank-deficient matrices, use
179
+ * \code
180
+ * matrixR().topLeftCorner(rank(), rank()).template triangularView<Upper>()
181
+ * \endcode
182
+ */
183
+ const MatrixType& matrixR() const {
184
+ eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized.");
185
+ return m_qr;
186
+ }
209
187
 
210
- template<typename InputType>
211
- ColPivHouseholderQR& compute(const EigenBase<InputType>& matrix);
188
+ template <typename InputType>
189
+ ColPivHouseholderQR& compute(const EigenBase<InputType>& matrix);
212
190
 
213
- /** \returns a const reference to the column permutation matrix */
214
- const PermutationType& colsPermutation() const
215
- {
216
- eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized.");
217
- return m_colsPermutation;
218
- }
191
+ /** \returns a const reference to the column permutation matrix */
192
+ const PermutationType& colsPermutation() const {
193
+ eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized.");
194
+ return m_colsPermutation;
195
+ }
219
196
 
220
- /** \returns the absolute value of the determinant of the matrix of which
221
- * *this is the QR decomposition. It has only linear complexity
222
- * (that is, O(n) where n is the dimension of the square matrix)
223
- * as the QR decomposition has already been computed.
224
- *
225
- * \note This is only for square matrices.
226
- *
227
- * \warning a determinant can be very big or small, so for matrices
228
- * of large enough dimension, there is a risk of overflow/underflow.
229
- * One way to work around that is to use logAbsDeterminant() instead.
230
- *
231
- * \sa logAbsDeterminant(), MatrixBase::determinant()
232
- */
233
- typename MatrixType::RealScalar absDeterminant() const;
234
-
235
- /** \returns the natural log of the absolute value of the determinant of the matrix of which
236
- * *this is the QR decomposition. It has only linear complexity
237
- * (that is, O(n) where n is the dimension of the square matrix)
238
- * as the QR decomposition has already been computed.
239
- *
240
- * \note This is only for square matrices.
241
- *
242
- * \note This method is useful to work around the risk of overflow/underflow that's inherent
243
- * to determinant computation.
244
- *
245
- * \sa absDeterminant(), MatrixBase::determinant()
246
- */
247
- typename MatrixType::RealScalar logAbsDeterminant() const;
248
-
249
- /** \returns the rank of the matrix of which *this is the QR decomposition.
250
- *
251
- * \note This method has to determine which pivots should be considered nonzero.
252
- * For that, it uses the threshold value that you can control by calling
253
- * setThreshold(const RealScalar&).
254
- */
255
- inline Index rank() const
256
- {
257
- using std::abs;
258
- eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized.");
259
- RealScalar premultiplied_threshold = abs(m_maxpivot) * threshold();
260
- Index result = 0;
261
- for(Index i = 0; i < m_nonzero_pivots; ++i)
262
- result += (abs(m_qr.coeff(i,i)) > premultiplied_threshold);
263
- return result;
264
- }
197
+ /** \returns the determinant of the matrix of which
198
+ * *this is the QR decomposition. It has only linear complexity
199
+ * (that is, O(n) where n is the dimension of the square matrix)
200
+ * as the QR decomposition has already been computed.
201
+ *
202
+ * \note This is only for square matrices.
203
+ *
204
+ * \warning a determinant can be very big or small, so for matrices
205
+ * of large enough dimension, there is a risk of overflow/underflow.
206
+ * One way to work around that is to use logAbsDeterminant() instead.
207
+ *
208
+ * \sa absDeterminant(), logAbsDeterminant(), MatrixBase::determinant()
209
+ */
210
+ typename MatrixType::Scalar determinant() const;
211
+
212
+ /** \returns the absolute value of the determinant of the matrix of which
213
+ * *this is the QR decomposition. It has only linear complexity
214
+ * (that is, O(n) where n is the dimension of the square matrix)
215
+ * as the QR decomposition has already been computed.
216
+ *
217
+ * \note This is only for square matrices.
218
+ *
219
+ * \warning a determinant can be very big or small, so for matrices
220
+ * of large enough dimension, there is a risk of overflow/underflow.
221
+ * One way to work around that is to use logAbsDeterminant() instead.
222
+ *
223
+ * \sa determinant(), logAbsDeterminant(), MatrixBase::determinant()
224
+ */
225
+ typename MatrixType::RealScalar absDeterminant() const;
226
+
227
+ /** \returns the natural log of the absolute value of the determinant of the matrix of which
228
+ * *this is the QR decomposition. It has only linear complexity
229
+ * (that is, O(n) where n is the dimension of the square matrix)
230
+ * as the QR decomposition has already been computed.
231
+ *
232
+ * \note This is only for square matrices.
233
+ *
234
+ * \note This method is useful to work around the risk of overflow/underflow that's inherent
235
+ * to determinant computation.
236
+ *
237
+ * \sa determinant(), absDeterminant(), MatrixBase::determinant()
238
+ */
239
+ typename MatrixType::RealScalar logAbsDeterminant() const;
240
+
241
+ /** \returns the sign of the determinant of the matrix of which
242
+ * *this is the QR decomposition. It has only linear complexity
243
+ * (that is, O(n) where n is the dimension of the square matrix)
244
+ * as the QR decomposition has already been computed.
245
+ *
246
+ * \note This is only for square matrices.
247
+ *
248
+ * \note This method is useful to work around the risk of overflow/underflow that's inherent
249
+ * to determinant computation.
250
+ *
251
+ * \sa determinant(), absDeterminant(), logAbsDeterminant(), MatrixBase::determinant()
252
+ */
253
+ typename MatrixType::Scalar signDeterminant() const;
254
+
255
+ /** \returns the rank of the matrix of which *this is the QR decomposition.
256
+ *
257
+ * \note This method has to determine which pivots should be considered nonzero.
258
+ * For that, it uses the threshold value that you can control by calling
259
+ * setThreshold(const RealScalar&).
260
+ */
261
+ inline Index rank() const {
262
+ using std::abs;
263
+ eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized.");
264
+ RealScalar premultiplied_threshold = abs(m_maxpivot) * threshold();
265
+ Index result = 0;
266
+ for (Index i = 0; i < m_nonzero_pivots; ++i) result += (abs(m_qr.coeff(i, i)) > premultiplied_threshold);
267
+ return result;
268
+ }
265
269
 
266
- /** \returns the dimension of the kernel of the matrix of which *this is the QR decomposition.
267
- *
268
- * \note This method has to determine which pivots should be considered nonzero.
269
- * For that, it uses the threshold value that you can control by calling
270
- * setThreshold(const RealScalar&).
271
- */
272
- inline Index dimensionOfKernel() const
273
- {
274
- eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized.");
275
- return cols() - rank();
276
- }
270
+ /** \returns the dimension of the kernel of the matrix of which *this is the QR decomposition.
271
+ *
272
+ * \note This method has to determine which pivots should be considered nonzero.
273
+ * For that, it uses the threshold value that you can control by calling
274
+ * setThreshold(const RealScalar&).
275
+ */
276
+ inline Index dimensionOfKernel() const {
277
+ eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized.");
278
+ return cols() - rank();
279
+ }
277
280
 
278
- /** \returns true if the matrix of which *this is the QR decomposition represents an injective
279
- * linear map, i.e. has trivial kernel; false otherwise.
280
- *
281
- * \note This method has to determine which pivots should be considered nonzero.
282
- * For that, it uses the threshold value that you can control by calling
283
- * setThreshold(const RealScalar&).
284
- */
285
- inline bool isInjective() const
286
- {
287
- eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized.");
288
- return rank() == cols();
289
- }
281
+ /** \returns true if the matrix of which *this is the QR decomposition represents an injective
282
+ * linear map, i.e. has trivial kernel; false otherwise.
283
+ *
284
+ * \note This method has to determine which pivots should be considered nonzero.
285
+ * For that, it uses the threshold value that you can control by calling
286
+ * setThreshold(const RealScalar&).
287
+ */
288
+ inline bool isInjective() const {
289
+ eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized.");
290
+ return rank() == cols();
291
+ }
290
292
 
291
- /** \returns true if the matrix of which *this is the QR decomposition represents a surjective
292
- * linear map; false otherwise.
293
- *
294
- * \note This method has to determine which pivots should be considered nonzero.
295
- * For that, it uses the threshold value that you can control by calling
296
- * setThreshold(const RealScalar&).
297
- */
298
- inline bool isSurjective() const
299
- {
300
- eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized.");
301
- return rank() == rows();
302
- }
293
+ /** \returns true if the matrix of which *this is the QR decomposition represents a surjective
294
+ * linear map; false otherwise.
295
+ *
296
+ * \note This method has to determine which pivots should be considered nonzero.
297
+ * For that, it uses the threshold value that you can control by calling
298
+ * setThreshold(const RealScalar&).
299
+ */
300
+ inline bool isSurjective() const {
301
+ eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized.");
302
+ return rank() == rows();
303
+ }
303
304
 
304
- /** \returns true if the matrix of which *this is the QR decomposition is invertible.
305
- *
306
- * \note This method has to determine which pivots should be considered nonzero.
307
- * For that, it uses the threshold value that you can control by calling
308
- * setThreshold(const RealScalar&).
309
- */
310
- inline bool isInvertible() const
311
- {
312
- eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized.");
313
- return isInjective() && isSurjective();
314
- }
305
+ /** \returns true if the matrix of which *this is the QR decomposition is invertible.
306
+ *
307
+ * \note This method has to determine which pivots should be considered nonzero.
308
+ * For that, it uses the threshold value that you can control by calling
309
+ * setThreshold(const RealScalar&).
310
+ */
311
+ inline bool isInvertible() const {
312
+ eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized.");
313
+ return isInjective() && isSurjective();
314
+ }
315
315
 
316
- /** \returns the inverse of the matrix of which *this is the QR decomposition.
317
- *
318
- * \note If this matrix is not invertible, the returned matrix has undefined coefficients.
319
- * Use isInvertible() to first determine whether this matrix is invertible.
320
- */
321
- inline const Inverse<ColPivHouseholderQR> inverse() const
322
- {
323
- eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized.");
324
- return Inverse<ColPivHouseholderQR>(*this);
325
- }
316
+ /** \returns the inverse of the matrix of which *this is the QR decomposition.
317
+ *
318
+ * \note If this matrix is not invertible, the returned matrix has undefined coefficients.
319
+ * Use isInvertible() to first determine whether this matrix is invertible.
320
+ */
321
+ inline const Inverse<ColPivHouseholderQR> inverse() const {
322
+ eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized.");
323
+ return Inverse<ColPivHouseholderQR>(*this);
324
+ }
326
325
 
327
- inline Index rows() const { return m_qr.rows(); }
328
- inline Index cols() const { return m_qr.cols(); }
329
-
330
- /** \returns a const reference to the vector of Householder coefficients used to represent the factor \c Q.
331
- *
332
- * For advanced uses only.
333
- */
334
- const HCoeffsType& hCoeffs() const { return m_hCoeffs; }
335
-
336
- /** Allows to prescribe a threshold to be used by certain methods, such as rank(),
337
- * who need to determine when pivots are to be considered nonzero. This is not used for the
338
- * QR decomposition itself.
339
- *
340
- * When it needs to get the threshold value, Eigen calls threshold(). By default, this
341
- * uses a formula to automatically determine a reasonable threshold.
342
- * Once you have called the present method setThreshold(const RealScalar&),
343
- * your value is used instead.
344
- *
345
- * \param threshold The new value to use as the threshold.
346
- *
347
- * A pivot will be considered nonzero if its absolute value is strictly greater than
348
- * \f$ \vert pivot \vert \leqslant threshold \times \vert maxpivot \vert \f$
349
- * where maxpivot is the biggest pivot.
350
- *
351
- * If you want to come back to the default behavior, call setThreshold(Default_t)
352
- */
353
- ColPivHouseholderQR& setThreshold(const RealScalar& threshold)
354
- {
355
- m_usePrescribedThreshold = true;
356
- m_prescribedThreshold = threshold;
357
- return *this;
358
- }
326
+ inline Index rows() const { return m_qr.rows(); }
327
+ inline Index cols() const { return m_qr.cols(); }
328
+
329
+ /** \returns a const reference to the vector of Householder coefficients used to represent the factor \c Q.
330
+ *
331
+ * For advanced uses only.
332
+ */
333
+ const HCoeffsType& hCoeffs() const { return m_hCoeffs; }
334
+
335
+ /** Allows to prescribe a threshold to be used by certain methods, such as rank(),
336
+ * who need to determine when pivots are to be considered nonzero. This is not used for the
337
+ * QR decomposition itself.
338
+ *
339
+ * When it needs to get the threshold value, Eigen calls threshold(). By default, this
340
+ * uses a formula to automatically determine a reasonable threshold.
341
+ * Once you have called the present method setThreshold(const RealScalar&),
342
+ * your value is used instead.
343
+ *
344
+ * \param threshold The new value to use as the threshold.
345
+ *
346
+ * A pivot will be considered nonzero if its absolute value is strictly greater than
347
+ * \f$ \vert pivot \vert \leqslant threshold \times \vert maxpivot \vert \f$
348
+ * where maxpivot is the biggest pivot.
349
+ *
350
+ * If you want to come back to the default behavior, call setThreshold(Default_t)
351
+ */
352
+ ColPivHouseholderQR& setThreshold(const RealScalar& threshold) {
353
+ m_usePrescribedThreshold = true;
354
+ m_prescribedThreshold = threshold;
355
+ return *this;
356
+ }
359
357
 
360
- /** Allows to come back to the default behavior, letting Eigen use its default formula for
361
- * determining the threshold.
362
- *
363
- * You should pass the special object Eigen::Default as parameter here.
364
- * \code qr.setThreshold(Eigen::Default); \endcode
365
- *
366
- * See the documentation of setThreshold(const RealScalar&).
367
- */
368
- ColPivHouseholderQR& setThreshold(Default_t)
369
- {
370
- m_usePrescribedThreshold = false;
371
- return *this;
372
- }
358
+ /** Allows to come back to the default behavior, letting Eigen use its default formula for
359
+ * determining the threshold.
360
+ *
361
+ * You should pass the special object Eigen::Default as parameter here.
362
+ * \code qr.setThreshold(Eigen::Default); \endcode
363
+ *
364
+ * See the documentation of setThreshold(const RealScalar&).
365
+ */
366
+ ColPivHouseholderQR& setThreshold(Default_t) {
367
+ m_usePrescribedThreshold = false;
368
+ return *this;
369
+ }
373
370
 
374
- /** Returns the threshold that will be used by certain methods such as rank().
375
- *
376
- * See the documentation of setThreshold(const RealScalar&).
377
- */
378
- RealScalar threshold() const
379
- {
380
- eigen_assert(m_isInitialized || m_usePrescribedThreshold);
381
- return m_usePrescribedThreshold ? m_prescribedThreshold
382
- // this formula comes from experimenting (see "LU precision tuning" thread on the list)
383
- // and turns out to be identical to Higham's formula used already in LDLt.
384
- : NumTraits<Scalar>::epsilon() * RealScalar(m_qr.diagonalSize());
385
- }
371
+ /** Returns the threshold that will be used by certain methods such as rank().
372
+ *
373
+ * See the documentation of setThreshold(const RealScalar&).
374
+ */
375
+ RealScalar threshold() const {
376
+ eigen_assert(m_isInitialized || m_usePrescribedThreshold);
377
+ return m_usePrescribedThreshold ? m_prescribedThreshold
378
+ // this formula comes from experimenting (see "LU precision tuning" thread on the
379
+ // list) and turns out to be identical to Higham's formula used already in LDLt.
380
+ : NumTraits<Scalar>::epsilon() * RealScalar(m_qr.diagonalSize());
381
+ }
386
382
 
387
- /** \returns the number of nonzero pivots in the QR decomposition.
388
- * Here nonzero is meant in the exact sense, not in a fuzzy sense.
389
- * So that notion isn't really intrinsically interesting, but it is
390
- * still useful when implementing algorithms.
391
- *
392
- * \sa rank()
393
- */
394
- inline Index nonzeroPivots() const
395
- {
396
- eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized.");
397
- return m_nonzero_pivots;
398
- }
383
+ /** \returns the number of nonzero pivots in the QR decomposition.
384
+ * Here nonzero is meant in the exact sense, not in a fuzzy sense.
385
+ * So that notion isn't really intrinsically interesting, but it is
386
+ * still useful when implementing algorithms.
387
+ *
388
+ * \sa rank()
389
+ */
390
+ inline Index nonzeroPivots() const {
391
+ eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized.");
392
+ return m_nonzero_pivots;
393
+ }
399
394
 
400
- /** \returns the absolute value of the biggest pivot, i.e. the biggest
401
- * diagonal coefficient of R.
402
- */
403
- RealScalar maxPivot() const { return m_maxpivot; }
404
-
405
- /** \brief Reports whether the QR factorization was successful.
406
- *
407
- * \note This function always returns \c Success. It is provided for compatibility
408
- * with other factorization routines.
409
- * \returns \c Success
410
- */
411
- ComputationInfo info() const
412
- {
413
- eigen_assert(m_isInitialized && "Decomposition is not initialized.");
414
- return Success;
415
- }
395
+ /** \returns the absolute value of the biggest pivot, i.e. the biggest
396
+ * diagonal coefficient of R.
397
+ */
398
+ RealScalar maxPivot() const { return m_maxpivot; }
399
+
400
+ /** \brief Reports whether the QR factorization was successful.
401
+ *
402
+ * \note This function always returns \c Success. It is provided for compatibility
403
+ * with other factorization routines.
404
+ * \returns \c Success
405
+ */
406
+ ComputationInfo info() const {
407
+ eigen_assert(m_isInitialized && "Decomposition is not initialized.");
408
+ return Success;
409
+ }
416
410
 
417
- #ifndef EIGEN_PARSED_BY_DOXYGEN
418
- template<typename RhsType, typename DstType>
419
- void _solve_impl(const RhsType &rhs, DstType &dst) const;
411
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
412
+ template <typename RhsType, typename DstType>
413
+ void _solve_impl(const RhsType& rhs, DstType& dst) const;
420
414
 
421
- template<bool Conjugate, typename RhsType, typename DstType>
422
- void _solve_impl_transposed(const RhsType &rhs, DstType &dst) const;
423
- #endif
415
+ template <bool Conjugate, typename RhsType, typename DstType>
416
+ void _solve_impl_transposed(const RhsType& rhs, DstType& dst) const;
417
+ #endif
424
418
 
425
- protected:
419
+ protected:
420
+ friend class CompleteOrthogonalDecomposition<MatrixType, PermutationIndex>;
426
421
 
427
- friend class CompleteOrthogonalDecomposition<MatrixType>;
422
+ EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar)
428
423
 
429
- static void check_template_parameters()
430
- {
431
- EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar);
432
- }
424
+ void computeInPlace();
433
425
 
434
- void computeInPlace();
435
-
436
- MatrixType m_qr;
437
- HCoeffsType m_hCoeffs;
438
- PermutationType m_colsPermutation;
439
- IntRowVectorType m_colsTranspositions;
440
- RowVectorType m_temp;
441
- RealRowVectorType m_colNormsUpdated;
442
- RealRowVectorType m_colNormsDirect;
443
- bool m_isInitialized, m_usePrescribedThreshold;
444
- RealScalar m_prescribedThreshold, m_maxpivot;
445
- Index m_nonzero_pivots;
446
- Index m_det_pq;
426
+ MatrixType m_qr;
427
+ HCoeffsType m_hCoeffs;
428
+ PermutationType m_colsPermutation;
429
+ IntRowVectorType m_colsTranspositions;
430
+ RowVectorType m_temp;
431
+ RealRowVectorType m_colNormsUpdated;
432
+ RealRowVectorType m_colNormsDirect;
433
+ bool m_isInitialized, m_usePrescribedThreshold;
434
+ RealScalar m_prescribedThreshold, m_maxpivot;
435
+ Index m_nonzero_pivots;
436
+ Index m_det_p;
447
437
  };
448
438
 
449
- template<typename MatrixType>
450
- typename MatrixType::RealScalar ColPivHouseholderQR<MatrixType>::absDeterminant() const
451
- {
439
+ template <typename MatrixType, typename PermutationIndex>
440
+ typename MatrixType::Scalar ColPivHouseholderQR<MatrixType, PermutationIndex>::determinant() const {
441
+ eigen_assert(m_isInitialized && "HouseholderQR is not initialized.");
442
+ eigen_assert(m_qr.rows() == m_qr.cols() && "You can't take the determinant of a non-square matrix!");
443
+ Scalar detQ;
444
+ internal::householder_determinant<HCoeffsType, Scalar, NumTraits<Scalar>::IsComplex>::run(m_hCoeffs, detQ);
445
+ return isInjective() ? (detQ * Scalar(m_det_p)) * m_qr.diagonal().prod() : Scalar(0);
446
+ }
447
+
448
+ template <typename MatrixType, typename PermutationIndex>
449
+ typename MatrixType::RealScalar ColPivHouseholderQR<MatrixType, PermutationIndex>::absDeterminant() const {
452
450
  using std::abs;
453
451
  eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized.");
454
452
  eigen_assert(m_qr.rows() == m_qr.cols() && "You can't take the determinant of a non-square matrix!");
455
- return abs(m_qr.diagonal().prod());
453
+ return isInjective() ? abs(m_qr.diagonal().prod()) : RealScalar(0);
456
454
  }
457
455
 
458
- template<typename MatrixType>
459
- typename MatrixType::RealScalar ColPivHouseholderQR<MatrixType>::logAbsDeterminant() const
460
- {
456
+ template <typename MatrixType, typename PermutationIndex>
457
+ typename MatrixType::RealScalar ColPivHouseholderQR<MatrixType, PermutationIndex>::logAbsDeterminant() const {
461
458
  eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized.");
462
459
  eigen_assert(m_qr.rows() == m_qr.cols() && "You can't take the determinant of a non-square matrix!");
463
- return m_qr.diagonal().cwiseAbs().array().log().sum();
460
+ return isInjective() ? m_qr.diagonal().cwiseAbs().array().log().sum() : -NumTraits<RealScalar>::infinity();
461
+ }
462
+
463
+ template <typename MatrixType, typename PermutationIndex>
464
+ typename MatrixType::Scalar ColPivHouseholderQR<MatrixType, PermutationIndex>::signDeterminant() const {
465
+ eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized.");
466
+ eigen_assert(m_qr.rows() == m_qr.cols() && "You can't take the determinant of a non-square matrix!");
467
+ Scalar detQ;
468
+ internal::householder_determinant<HCoeffsType, Scalar, NumTraits<Scalar>::IsComplex>::run(m_hCoeffs, detQ);
469
+ return isInjective() ? (detQ * Scalar(m_det_p)) * m_qr.diagonal().array().sign().prod() : Scalar(0);
464
470
  }
465
471
 
466
472
  /** Performs the QR factorization of the given matrix \a matrix. The result of
467
- * the factorization is stored into \c *this, and a reference to \c *this
468
- * is returned.
469
- *
470
- * \sa class ColPivHouseholderQR, ColPivHouseholderQR(const MatrixType&)
471
- */
472
- template<typename MatrixType>
473
- template<typename InputType>
474
- ColPivHouseholderQR<MatrixType>& ColPivHouseholderQR<MatrixType>::compute(const EigenBase<InputType>& matrix)
475
- {
473
+ * the factorization is stored into \c *this, and a reference to \c *this
474
+ * is returned.
475
+ *
476
+ * \sa class ColPivHouseholderQR, ColPivHouseholderQR(const MatrixType&)
477
+ */
478
+ template <typename MatrixType, typename PermutationIndex>
479
+ template <typename InputType>
480
+ ColPivHouseholderQR<MatrixType, PermutationIndex>& ColPivHouseholderQR<MatrixType, PermutationIndex>::compute(
481
+ const EigenBase<InputType>& matrix) {
476
482
  m_qr = matrix.derived();
477
483
  computeInPlace();
478
484
  return *this;
479
485
  }
480
486
 
481
- template<typename MatrixType>
482
- void ColPivHouseholderQR<MatrixType>::computeInPlace()
483
- {
484
- check_template_parameters();
485
-
486
- // the column permutation is stored as int indices, so just to be sure:
487
- eigen_assert(m_qr.cols()<=NumTraits<int>::highest());
487
+ template <typename MatrixType, typename PermutationIndex>
488
+ void ColPivHouseholderQR<MatrixType, PermutationIndex>::computeInPlace() {
489
+ eigen_assert(m_qr.cols() <= NumTraits<PermutationIndex>::highest());
488
490
 
489
491
  using std::abs;
490
492
 
@@ -508,27 +510,26 @@ void ColPivHouseholderQR<MatrixType>::computeInPlace()
508
510
  m_colNormsUpdated.coeffRef(k) = m_colNormsDirect.coeffRef(k);
509
511
  }
510
512
 
511
- RealScalar threshold_helper = numext::abs2<RealScalar>(m_colNormsUpdated.maxCoeff() * NumTraits<RealScalar>::epsilon()) / RealScalar(rows);
513
+ RealScalar threshold_helper =
514
+ numext::abs2<RealScalar>(m_colNormsUpdated.maxCoeff() * NumTraits<RealScalar>::epsilon()) / RealScalar(rows);
512
515
  RealScalar norm_downdate_threshold = numext::sqrt(NumTraits<RealScalar>::epsilon());
513
516
 
514
- m_nonzero_pivots = size; // the generic case is that in which all pivots are nonzero (invertible case)
517
+ m_nonzero_pivots = size; // the generic case is that in which all pivots are nonzero (invertible case)
515
518
  m_maxpivot = RealScalar(0);
516
519
 
517
- for(Index k = 0; k < size; ++k)
518
- {
520
+ for (Index k = 0; k < size; ++k) {
519
521
  // first, we look up in our table m_colNormsUpdated which column has the biggest norm
520
522
  Index biggest_col_index;
521
- RealScalar biggest_col_sq_norm = numext::abs2(m_colNormsUpdated.tail(cols-k).maxCoeff(&biggest_col_index));
523
+ RealScalar biggest_col_sq_norm = numext::abs2(m_colNormsUpdated.tail(cols - k).maxCoeff(&biggest_col_index));
522
524
  biggest_col_index += k;
523
525
 
524
526
  // Track the number of meaningful pivots but do not stop the decomposition to make
525
527
  // sure that the initial matrix is properly reproduced. See bug 941.
526
- if(m_nonzero_pivots==size && biggest_col_sq_norm < threshold_helper * RealScalar(rows-k))
527
- m_nonzero_pivots = k;
528
+ if (m_nonzero_pivots == size && biggest_col_sq_norm < threshold_helper * RealScalar(rows - k)) m_nonzero_pivots = k;
528
529
 
529
530
  // apply the transposition to the columns
530
- m_colsTranspositions.coeffRef(k) = biggest_col_index;
531
- if(k != biggest_col_index) {
531
+ m_colsTranspositions.coeffRef(k) = static_cast<PermutationIndex>(biggest_col_index);
532
+ if (k != biggest_col_index) {
532
533
  m_qr.col(k).swap(m_qr.col(biggest_col_index));
533
534
  std::swap(m_colNormsUpdated.coeffRef(k), m_colNormsUpdated.coeffRef(biggest_col_index));
534
535
  std::swap(m_colNormsDirect.coeffRef(k), m_colNormsDirect.coeffRef(biggest_col_index));
@@ -537,17 +538,17 @@ void ColPivHouseholderQR<MatrixType>::computeInPlace()
537
538
 
538
539
  // generate the householder vector, store it below the diagonal
539
540
  RealScalar beta;
540
- m_qr.col(k).tail(rows-k).makeHouseholderInPlace(m_hCoeffs.coeffRef(k), beta);
541
+ m_qr.col(k).tail(rows - k).makeHouseholderInPlace(m_hCoeffs.coeffRef(k), beta);
541
542
 
542
543
  // apply the householder transformation to the diagonal coefficient
543
- m_qr.coeffRef(k,k) = beta;
544
+ m_qr.coeffRef(k, k) = beta;
544
545
 
545
546
  // remember the maximum absolute value of diagonal coefficients
546
- if(abs(beta) > m_maxpivot) m_maxpivot = abs(beta);
547
+ if (abs(beta) > m_maxpivot) m_maxpivot = abs(beta);
547
548
 
548
549
  // apply the householder transformation
549
- m_qr.bottomRightCorner(rows-k, cols-k-1)
550
- .applyHouseholderOnTheLeft(m_qr.col(k).tail(rows-k-1), m_hCoeffs.coeffRef(k), &m_temp.coeffRef(k+1));
550
+ m_qr.bottomRightCorner(rows - k, cols - k - 1)
551
+ .applyHouseholderOnTheLeft(m_qr.col(k).tail(rows - k - 1), m_hCoeffs.coeffRef(k), &m_temp.coeffRef(k + 1));
551
552
 
552
553
  // update our table of norms of the columns
553
554
  for (Index j = k + 1; j < cols; ++j) {
@@ -555,12 +556,12 @@ void ColPivHouseholderQR<MatrixType>::computeInPlace()
555
556
  // http://www.netlib.org/lapack/lawnspdf/lawn176.pdf
556
557
  // and used in LAPACK routines xGEQPF and xGEQP3.
557
558
  // See lines 278-297 in http://www.netlib.org/lapack/explore-html/dc/df4/sgeqpf_8f_source.html
558
- if (m_colNormsUpdated.coeffRef(j) != RealScalar(0)) {
559
+ if (!numext::is_exactly_zero(m_colNormsUpdated.coeffRef(j))) {
559
560
  RealScalar temp = abs(m_qr.coeffRef(k, j)) / m_colNormsUpdated.coeffRef(j);
560
561
  temp = (RealScalar(1) + temp) * (RealScalar(1) - temp);
561
- temp = temp < RealScalar(0) ? RealScalar(0) : temp;
562
- RealScalar temp2 = temp * numext::abs2<RealScalar>(m_colNormsUpdated.coeffRef(j) /
563
- m_colNormsDirect.coeffRef(j));
562
+ temp = temp < RealScalar(0) ? RealScalar(0) : temp;
563
+ RealScalar temp2 =
564
+ temp * numext::abs2<RealScalar>(m_colNormsUpdated.coeffRef(j) / m_colNormsDirect.coeffRef(j));
564
565
  if (temp2 <= norm_downdate_threshold) {
565
566
  // The updated norm has become too inaccurate so re-compute the column
566
567
  // norm directly.
@@ -573,102 +574,101 @@ void ColPivHouseholderQR<MatrixType>::computeInPlace()
573
574
  }
574
575
  }
575
576
 
576
- m_colsPermutation.setIdentity(PermIndexType(cols));
577
- for(PermIndexType k = 0; k < size/*m_nonzero_pivots*/; ++k)
578
- m_colsPermutation.applyTranspositionOnTheRight(k, PermIndexType(m_colsTranspositions.coeff(k)));
577
+ m_colsPermutation.setIdentity(cols);
578
+ for (Index k = 0; k < size /*m_nonzero_pivots*/; ++k)
579
+ m_colsPermutation.applyTranspositionOnTheRight(k, static_cast<Index>(m_colsTranspositions.coeff(k)));
579
580
 
580
- m_det_pq = (number_of_transpositions%2) ? -1 : 1;
581
+ m_det_p = (number_of_transpositions % 2) ? -1 : 1;
581
582
  m_isInitialized = true;
582
583
  }
583
584
 
584
585
  #ifndef EIGEN_PARSED_BY_DOXYGEN
585
- template<typename _MatrixType>
586
- template<typename RhsType, typename DstType>
587
- void ColPivHouseholderQR<_MatrixType>::_solve_impl(const RhsType &rhs, DstType &dst) const
588
- {
586
+ template <typename MatrixType_, typename PermutationIndex_>
587
+ template <typename RhsType, typename DstType>
588
+ void ColPivHouseholderQR<MatrixType_, PermutationIndex_>::_solve_impl(const RhsType& rhs, DstType& dst) const {
589
589
  const Index nonzero_pivots = nonzeroPivots();
590
590
 
591
- if(nonzero_pivots == 0)
592
- {
591
+ if (nonzero_pivots == 0) {
593
592
  dst.setZero();
594
593
  return;
595
594
  }
596
595
 
597
596
  typename RhsType::PlainObject c(rhs);
598
597
 
599
- c.applyOnTheLeft(householderQ().setLength(nonzero_pivots).adjoint() );
598
+ c.applyOnTheLeft(householderQ().setLength(nonzero_pivots).adjoint());
600
599
 
601
600
  m_qr.topLeftCorner(nonzero_pivots, nonzero_pivots)
602
601
  .template triangularView<Upper>()
603
602
  .solveInPlace(c.topRows(nonzero_pivots));
604
603
 
605
- for(Index i = 0; i < nonzero_pivots; ++i) dst.row(m_colsPermutation.indices().coeff(i)) = c.row(i);
606
- for(Index i = nonzero_pivots; i < cols(); ++i) dst.row(m_colsPermutation.indices().coeff(i)).setZero();
604
+ for (Index i = 0; i < nonzero_pivots; ++i) dst.row(m_colsPermutation.indices().coeff(i)) = c.row(i);
605
+ for (Index i = nonzero_pivots; i < cols(); ++i) dst.row(m_colsPermutation.indices().coeff(i)).setZero();
607
606
  }
608
607
 
609
- template<typename _MatrixType>
610
- template<bool Conjugate, typename RhsType, typename DstType>
611
- void ColPivHouseholderQR<_MatrixType>::_solve_impl_transposed(const RhsType &rhs, DstType &dst) const
612
- {
608
+ template <typename MatrixType_, typename PermutationIndex_>
609
+ template <bool Conjugate, typename RhsType, typename DstType>
610
+ void ColPivHouseholderQR<MatrixType_, PermutationIndex_>::_solve_impl_transposed(const RhsType& rhs,
611
+ DstType& dst) const {
613
612
  const Index nonzero_pivots = nonzeroPivots();
614
613
 
615
- if(nonzero_pivots == 0)
616
- {
614
+ if (nonzero_pivots == 0) {
617
615
  dst.setZero();
618
616
  return;
619
617
  }
620
618
 
621
- typename RhsType::PlainObject c(m_colsPermutation.transpose()*rhs);
619
+ typename RhsType::PlainObject c(m_colsPermutation.transpose() * rhs);
622
620
 
623
621
  m_qr.topLeftCorner(nonzero_pivots, nonzero_pivots)
624
- .template triangularView<Upper>()
625
- .transpose().template conjugateIf<Conjugate>()
626
- .solveInPlace(c.topRows(nonzero_pivots));
622
+ .template triangularView<Upper>()
623
+ .transpose()
624
+ .template conjugateIf<Conjugate>()
625
+ .solveInPlace(c.topRows(nonzero_pivots));
627
626
 
628
627
  dst.topRows(nonzero_pivots) = c.topRows(nonzero_pivots);
629
- dst.bottomRows(rows()-nonzero_pivots).setZero();
628
+ dst.bottomRows(rows() - nonzero_pivots).setZero();
630
629
 
631
- dst.applyOnTheLeft(householderQ().setLength(nonzero_pivots).template conjugateIf<!Conjugate>() );
630
+ dst.applyOnTheLeft(householderQ().setLength(nonzero_pivots).template conjugateIf<!Conjugate>());
632
631
  }
633
632
  #endif
634
633
 
635
634
  namespace internal {
636
635
 
637
- template<typename DstXprType, typename MatrixType>
638
- struct Assignment<DstXprType, Inverse<ColPivHouseholderQR<MatrixType> >, internal::assign_op<typename DstXprType::Scalar,typename ColPivHouseholderQR<MatrixType>::Scalar>, Dense2Dense>
639
- {
640
- typedef ColPivHouseholderQR<MatrixType> QrType;
636
+ template <typename DstXprType, typename MatrixType, typename PermutationIndex>
637
+ struct Assignment<DstXprType, Inverse<ColPivHouseholderQR<MatrixType, PermutationIndex>>,
638
+ internal::assign_op<typename DstXprType::Scalar,
639
+ typename ColPivHouseholderQR<MatrixType, PermutationIndex>::Scalar>,
640
+ Dense2Dense> {
641
+ typedef ColPivHouseholderQR<MatrixType, PermutationIndex> QrType;
641
642
  typedef Inverse<QrType> SrcXprType;
642
- static void run(DstXprType &dst, const SrcXprType &src, const internal::assign_op<typename DstXprType::Scalar,typename QrType::Scalar> &)
643
- {
643
+ static void run(DstXprType& dst, const SrcXprType& src,
644
+ const internal::assign_op<typename DstXprType::Scalar, typename QrType::Scalar>&) {
644
645
  dst = src.nestedExpression().solve(MatrixType::Identity(src.rows(), src.cols()));
645
646
  }
646
647
  };
647
648
 
648
- } // end namespace internal
649
+ } // end namespace internal
649
650
 
650
651
  /** \returns the matrix Q as a sequence of householder transformations.
651
- * You can extract the meaningful part only by using:
652
- * \code qr.householderQ().setLength(qr.nonzeroPivots()) \endcode*/
653
- template<typename MatrixType>
654
- typename ColPivHouseholderQR<MatrixType>::HouseholderSequenceType ColPivHouseholderQR<MatrixType>
655
- ::householderQ() const
656
- {
652
+ * You can extract the meaningful part only by using:
653
+ * \code qr.householderQ().setLength(qr.nonzeroPivots()) \endcode*/
654
+ template <typename MatrixType, typename PermutationIndex>
655
+ typename ColPivHouseholderQR<MatrixType, PermutationIndex>::HouseholderSequenceType
656
+ ColPivHouseholderQR<MatrixType, PermutationIndex>::householderQ() const {
657
657
  eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized.");
658
658
  return HouseholderSequenceType(m_qr, m_hCoeffs.conjugate());
659
659
  }
660
660
 
661
661
  /** \return the column-pivoting Householder QR decomposition of \c *this.
662
- *
663
- * \sa class ColPivHouseholderQR
664
- */
665
- template<typename Derived>
666
- const ColPivHouseholderQR<typename MatrixBase<Derived>::PlainObject>
667
- MatrixBase<Derived>::colPivHouseholderQr() const
668
- {
669
- return ColPivHouseholderQR<PlainObject>(eval());
662
+ *
663
+ * \sa class ColPivHouseholderQR
664
+ */
665
+ template <typename Derived>
666
+ template <typename PermutationIndexType>
667
+ const ColPivHouseholderQR<typename MatrixBase<Derived>::PlainObject, PermutationIndexType>
668
+ MatrixBase<Derived>::colPivHouseholderQr() const {
669
+ return ColPivHouseholderQR<PlainObject, PermutationIndexType>(eval());
670
670
  }
671
671
 
672
- } // end namespace Eigen
672
+ } // end namespace Eigen
673
673
 
674
- #endif // EIGEN_COLPIVOTINGHOUSEHOLDERQR_H
674
+ #endif // EIGEN_COLPIVOTINGHOUSEHOLDERQR_H