@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,63 +11,65 @@
11
11
  #ifndef EIGEN_HOUSEHOLDER_SEQUENCE_H
12
12
  #define EIGEN_HOUSEHOLDER_SEQUENCE_H
13
13
 
14
+ // IWYU pragma: private
15
+ #include "./InternalHeaderCheck.h"
16
+
14
17
  namespace Eigen {
15
18
 
16
19
  /** \ingroup Householder_Module
17
- * \householder_module
18
- * \class HouseholderSequence
19
- * \brief Sequence of Householder reflections acting on subspaces with decreasing size
20
- * \tparam VectorsType type of matrix containing the Householder vectors
21
- * \tparam CoeffsType type of vector containing the Householder coefficients
22
- * \tparam Side either OnTheLeft (the default) or OnTheRight
23
- *
24
- * This class represents a product sequence of Householder reflections where the first Householder reflection
25
- * acts on the whole space, the second Householder reflection leaves the one-dimensional subspace spanned by
26
- * the first unit vector invariant, the third Householder reflection leaves the two-dimensional subspace
27
- * spanned by the first two unit vectors invariant, and so on up to the last reflection which leaves all but
28
- * one dimensions invariant and acts only on the last dimension. Such sequences of Householder reflections
29
- * are used in several algorithms to zero out certain parts of a matrix. Indeed, the methods
30
- * HessenbergDecomposition::matrixQ(), Tridiagonalization::matrixQ(), HouseholderQR::householderQ(),
31
- * and ColPivHouseholderQR::householderQ() all return a %HouseholderSequence.
32
- *
33
- * More precisely, the class %HouseholderSequence represents an \f$ n \times n \f$ matrix \f$ H \f$ of the
34
- * form \f$ H = \prod_{i=0}^{n-1} H_i \f$ where the i-th Householder reflection is \f$ H_i = I - h_i v_i
35
- * v_i^* \f$. The i-th Householder coefficient \f$ h_i \f$ is a scalar and the i-th Householder vector \f$
36
- * v_i \f$ is a vector of the form
37
- * \f[
38
- * v_i = [\underbrace{0, \ldots, 0}_{i-1\mbox{ zeros}}, 1, \underbrace{*, \ldots,*}_{n-i\mbox{ arbitrary entries}} ].
39
- * \f]
40
- * The last \f$ n-i \f$ entries of \f$ v_i \f$ are called the essential part of the Householder vector.
41
- *
42
- * Typical usages are listed below, where H is a HouseholderSequence:
43
- * \code
44
- * A.applyOnTheRight(H); // A = A * H
45
- * A.applyOnTheLeft(H); // A = H * A
46
- * A.applyOnTheRight(H.adjoint()); // A = A * H^*
47
- * A.applyOnTheLeft(H.adjoint()); // A = H^* * A
48
- * MatrixXd Q = H; // conversion to a dense matrix
49
- * \endcode
50
- * In addition to the adjoint, you can also apply the inverse (=adjoint), the transpose, and the conjugate operators.
51
- *
52
- * See the documentation for HouseholderSequence(const VectorsType&, const CoeffsType&) for an example.
53
- *
54
- * \sa MatrixBase::applyOnTheLeft(), MatrixBase::applyOnTheRight()
55
- */
20
+ * \householder_module
21
+ * \class HouseholderSequence
22
+ * \brief Sequence of Householder reflections acting on subspaces with decreasing size
23
+ * \tparam VectorsType type of matrix containing the Householder vectors
24
+ * \tparam CoeffsType type of vector containing the Householder coefficients
25
+ * \tparam Side either OnTheLeft (the default) or OnTheRight
26
+ *
27
+ * This class represents a product sequence of Householder reflections where the first Householder reflection
28
+ * acts on the whole space, the second Householder reflection leaves the one-dimensional subspace spanned by
29
+ * the first unit vector invariant, the third Householder reflection leaves the two-dimensional subspace
30
+ * spanned by the first two unit vectors invariant, and so on up to the last reflection which leaves all but
31
+ * one dimensions invariant and acts only on the last dimension. Such sequences of Householder reflections
32
+ * are used in several algorithms to zero out certain parts of a matrix. Indeed, the methods
33
+ * HessenbergDecomposition::matrixQ(), Tridiagonalization::matrixQ(), HouseholderQR::householderQ(),
34
+ * and ColPivHouseholderQR::householderQ() all return a %HouseholderSequence.
35
+ *
36
+ * More precisely, the class %HouseholderSequence represents an \f$ n \times n \f$ matrix \f$ H \f$ of the
37
+ * form \f$ H = \prod_{i=0}^{n-1} H_i \f$ where the i-th Householder reflection is \f$ H_i = I - h_i v_i
38
+ * v_i^* \f$. The i-th Householder coefficient \f$ h_i \f$ is a scalar and the i-th Householder vector \f$
39
+ * v_i \f$ is a vector of the form
40
+ * \f[
41
+ * v_i = [\underbrace{0, \ldots, 0}_{i-1\mbox{ zeros}}, 1, \underbrace{*, \ldots,*}_{n-i\mbox{ arbitrary entries}} ].
42
+ * \f]
43
+ * The last \f$ n-i \f$ entries of \f$ v_i \f$ are called the essential part of the Householder vector.
44
+ *
45
+ * Typical usages are listed below, where H is a HouseholderSequence:
46
+ * \code
47
+ * A.applyOnTheRight(H); // A = A * H
48
+ * A.applyOnTheLeft(H); // A = H * A
49
+ * A.applyOnTheRight(H.adjoint()); // A = A * H^*
50
+ * A.applyOnTheLeft(H.adjoint()); // A = H^* * A
51
+ * MatrixXd Q = H; // conversion to a dense matrix
52
+ * \endcode
53
+ * In addition to the adjoint, you can also apply the inverse (=adjoint), the transpose, and the conjugate operators.
54
+ *
55
+ * See the documentation for HouseholderSequence(const VectorsType&, const CoeffsType&) for an example.
56
+ *
57
+ * \sa MatrixBase::applyOnTheLeft(), MatrixBase::applyOnTheRight()
58
+ */
56
59
 
57
60
  namespace internal {
58
61
 
59
- template<typename VectorsType, typename CoeffsType, int Side>
60
- struct traits<HouseholderSequence<VectorsType,CoeffsType,Side> >
61
- {
62
+ template <typename VectorsType, typename CoeffsType, int Side>
63
+ struct traits<HouseholderSequence<VectorsType, CoeffsType, Side> > {
62
64
  typedef typename VectorsType::Scalar Scalar;
63
65
  typedef typename VectorsType::StorageIndex StorageIndex;
64
66
  typedef typename VectorsType::StorageKind StorageKind;
65
67
  enum {
66
- RowsAtCompileTime = Side==OnTheLeft ? traits<VectorsType>::RowsAtCompileTime
67
- : traits<VectorsType>::ColsAtCompileTime,
68
+ RowsAtCompileTime =
69
+ Side == OnTheLeft ? traits<VectorsType>::RowsAtCompileTime : traits<VectorsType>::ColsAtCompileTime,
68
70
  ColsAtCompileTime = RowsAtCompileTime,
69
- MaxRowsAtCompileTime = Side==OnTheLeft ? traits<VectorsType>::MaxRowsAtCompileTime
70
- : traits<VectorsType>::MaxColsAtCompileTime,
71
+ MaxRowsAtCompileTime =
72
+ Side == OnTheLeft ? traits<VectorsType>::MaxRowsAtCompileTime : traits<VectorsType>::MaxColsAtCompileTime,
71
73
  MaxColsAtCompileTime = MaxRowsAtCompileTime,
72
74
  Flags = 0
73
75
  };
@@ -75,471 +77,428 @@ struct traits<HouseholderSequence<VectorsType,CoeffsType,Side> >
75
77
 
76
78
  struct HouseholderSequenceShape {};
77
79
 
78
- template<typename VectorsType, typename CoeffsType, int Side>
79
- struct evaluator_traits<HouseholderSequence<VectorsType,CoeffsType,Side> >
80
- : public evaluator_traits_base<HouseholderSequence<VectorsType,CoeffsType,Side> >
81
- {
80
+ template <typename VectorsType, typename CoeffsType, int Side>
81
+ struct evaluator_traits<HouseholderSequence<VectorsType, CoeffsType, Side> >
82
+ : public evaluator_traits_base<HouseholderSequence<VectorsType, CoeffsType, Side> > {
82
83
  typedef HouseholderSequenceShape Shape;
83
84
  };
84
85
 
85
- template<typename VectorsType, typename CoeffsType, int Side>
86
- struct hseq_side_dependent_impl
87
- {
86
+ template <typename VectorsType, typename CoeffsType, int Side>
87
+ struct hseq_side_dependent_impl {
88
88
  typedef Block<const VectorsType, Dynamic, 1> EssentialVectorType;
89
89
  typedef HouseholderSequence<VectorsType, CoeffsType, OnTheLeft> HouseholderSequenceType;
90
- static EIGEN_DEVICE_FUNC inline const EssentialVectorType essentialVector(const HouseholderSequenceType& h, Index k)
91
- {
92
- Index start = k+1+h.m_shift;
93
- return Block<const VectorsType,Dynamic,1>(h.m_vectors, start, k, h.rows()-start, 1);
90
+ static EIGEN_DEVICE_FUNC inline const EssentialVectorType essentialVector(const HouseholderSequenceType& h, Index k) {
91
+ Index start = k + 1 + h.m_shift;
92
+ return Block<const VectorsType, Dynamic, 1>(h.m_vectors, start, k, h.rows() - start, 1);
94
93
  }
95
94
  };
96
95
 
97
- template<typename VectorsType, typename CoeffsType>
98
- struct hseq_side_dependent_impl<VectorsType, CoeffsType, OnTheRight>
99
- {
96
+ template <typename VectorsType, typename CoeffsType>
97
+ struct hseq_side_dependent_impl<VectorsType, CoeffsType, OnTheRight> {
100
98
  typedef Transpose<Block<const VectorsType, 1, Dynamic> > EssentialVectorType;
101
99
  typedef HouseholderSequence<VectorsType, CoeffsType, OnTheRight> HouseholderSequenceType;
102
- static inline const EssentialVectorType essentialVector(const HouseholderSequenceType& h, Index k)
103
- {
104
- Index start = k+1+h.m_shift;
105
- return Block<const VectorsType,1,Dynamic>(h.m_vectors, k, start, 1, h.rows()-start).transpose();
100
+ static inline const EssentialVectorType essentialVector(const HouseholderSequenceType& h, Index k) {
101
+ Index start = k + 1 + h.m_shift;
102
+ return Block<const VectorsType, 1, Dynamic>(h.m_vectors, k, start, 1, h.rows() - start).transpose();
106
103
  }
107
104
  };
108
105
 
109
- template<typename OtherScalarType, typename MatrixType> struct matrix_type_times_scalar_type
110
- {
111
- typedef typename ScalarBinaryOpTraits<OtherScalarType, typename MatrixType::Scalar>::ReturnType
112
- ResultScalar;
113
- typedef Matrix<ResultScalar, MatrixType::RowsAtCompileTime, MatrixType::ColsAtCompileTime,
114
- 0, MatrixType::MaxRowsAtCompileTime, MatrixType::MaxColsAtCompileTime> Type;
106
+ template <typename OtherScalarType, typename MatrixType>
107
+ struct matrix_type_times_scalar_type {
108
+ typedef typename ScalarBinaryOpTraits<OtherScalarType, typename MatrixType::Scalar>::ReturnType ResultScalar;
109
+ typedef Matrix<ResultScalar, MatrixType::RowsAtCompileTime, MatrixType::ColsAtCompileTime, 0,
110
+ MatrixType::MaxRowsAtCompileTime, MatrixType::MaxColsAtCompileTime>
111
+ Type;
115
112
  };
116
113
 
117
- } // end namespace internal
118
-
119
- template<typename VectorsType, typename CoeffsType, int Side> class HouseholderSequence
120
- : public EigenBase<HouseholderSequence<VectorsType,CoeffsType,Side> >
121
- {
122
- typedef typename internal::hseq_side_dependent_impl<VectorsType,CoeffsType,Side>::EssentialVectorType EssentialVectorType;
123
-
124
- public:
125
- enum {
126
- RowsAtCompileTime = internal::traits<HouseholderSequence>::RowsAtCompileTime,
127
- ColsAtCompileTime = internal::traits<HouseholderSequence>::ColsAtCompileTime,
128
- MaxRowsAtCompileTime = internal::traits<HouseholderSequence>::MaxRowsAtCompileTime,
129
- MaxColsAtCompileTime = internal::traits<HouseholderSequence>::MaxColsAtCompileTime
130
- };
131
- typedef typename internal::traits<HouseholderSequence>::Scalar Scalar;
132
-
133
- typedef HouseholderSequence<
134
- typename internal::conditional<NumTraits<Scalar>::IsComplex,
135
- typename internal::remove_all<typename VectorsType::ConjugateReturnType>::type,
136
- VectorsType>::type,
137
- typename internal::conditional<NumTraits<Scalar>::IsComplex,
138
- typename internal::remove_all<typename CoeffsType::ConjugateReturnType>::type,
139
- CoeffsType>::type,
140
- Side
141
- > ConjugateReturnType;
142
-
143
- typedef HouseholderSequence<
144
- VectorsType,
145
- typename internal::conditional<NumTraits<Scalar>::IsComplex,
146
- typename internal::remove_all<typename CoeffsType::ConjugateReturnType>::type,
147
- CoeffsType>::type,
148
- Side
149
- > AdjointReturnType;
150
-
151
- typedef HouseholderSequence<
152
- typename internal::conditional<NumTraits<Scalar>::IsComplex,
153
- typename internal::remove_all<typename VectorsType::ConjugateReturnType>::type,
154
- VectorsType>::type,
155
- CoeffsType,
156
- Side
157
- > TransposeReturnType;
158
-
159
- typedef HouseholderSequence<
160
- typename internal::add_const<VectorsType>::type,
161
- typename internal::add_const<CoeffsType>::type,
162
- Side
163
- > ConstHouseholderSequence;
164
-
165
- /** \brief Constructor.
166
- * \param[in] v %Matrix containing the essential parts of the Householder vectors
167
- * \param[in] h Vector containing the Householder coefficients
168
- *
169
- * Constructs the Householder sequence with coefficients given by \p h and vectors given by \p v. The
170
- * i-th Householder coefficient \f$ h_i \f$ is given by \p h(i) and the essential part of the i-th
171
- * Householder vector \f$ v_i \f$ is given by \p v(k,i) with \p k > \p i (the subdiagonal part of the
172
- * i-th column). If \p v has fewer columns than rows, then the Householder sequence contains as many
173
- * Householder reflections as there are columns.
174
- *
175
- * \note The %HouseholderSequence object stores \p v and \p h by reference.
176
- *
177
- * Example: \include HouseholderSequence_HouseholderSequence.cpp
178
- * Output: \verbinclude HouseholderSequence_HouseholderSequence.out
179
- *
180
- * \sa setLength(), setShift()
181
- */
182
- EIGEN_DEVICE_FUNC
183
- HouseholderSequence(const VectorsType& v, const CoeffsType& h)
184
- : m_vectors(v), m_coeffs(h), m_reverse(false), m_length(v.diagonalSize()),
185
- m_shift(0)
186
- {
187
- }
114
+ } // end namespace internal
115
+
116
+ template <typename VectorsType, typename CoeffsType, int Side>
117
+ class HouseholderSequence : public EigenBase<HouseholderSequence<VectorsType, CoeffsType, Side> > {
118
+ typedef typename internal::hseq_side_dependent_impl<VectorsType, CoeffsType, Side>::EssentialVectorType
119
+ EssentialVectorType;
120
+
121
+ public:
122
+ enum {
123
+ RowsAtCompileTime = internal::traits<HouseholderSequence>::RowsAtCompileTime,
124
+ ColsAtCompileTime = internal::traits<HouseholderSequence>::ColsAtCompileTime,
125
+ MaxRowsAtCompileTime = internal::traits<HouseholderSequence>::MaxRowsAtCompileTime,
126
+ MaxColsAtCompileTime = internal::traits<HouseholderSequence>::MaxColsAtCompileTime
127
+ };
128
+ typedef typename internal::traits<HouseholderSequence>::Scalar Scalar;
188
129
 
189
- /** \brief Copy constructor. */
190
- EIGEN_DEVICE_FUNC
191
- HouseholderSequence(const HouseholderSequence& other)
130
+ typedef HouseholderSequence<
131
+ std::conditional_t<NumTraits<Scalar>::IsComplex,
132
+ internal::remove_all_t<typename VectorsType::ConjugateReturnType>, VectorsType>,
133
+ std::conditional_t<NumTraits<Scalar>::IsComplex, internal::remove_all_t<typename CoeffsType::ConjugateReturnType>,
134
+ CoeffsType>,
135
+ Side>
136
+ ConjugateReturnType;
137
+
138
+ typedef HouseholderSequence<
139
+ VectorsType,
140
+ std::conditional_t<NumTraits<Scalar>::IsComplex, internal::remove_all_t<typename CoeffsType::ConjugateReturnType>,
141
+ CoeffsType>,
142
+ Side>
143
+ AdjointReturnType;
144
+
145
+ typedef HouseholderSequence<
146
+ std::conditional_t<NumTraits<Scalar>::IsComplex,
147
+ internal::remove_all_t<typename VectorsType::ConjugateReturnType>, VectorsType>,
148
+ CoeffsType, Side>
149
+ TransposeReturnType;
150
+
151
+ typedef HouseholderSequence<std::add_const_t<VectorsType>, std::add_const_t<CoeffsType>, Side>
152
+ ConstHouseholderSequence;
153
+
154
+ /** \brief Constructor.
155
+ * \param[in] v %Matrix containing the essential parts of the Householder vectors
156
+ * \param[in] h Vector containing the Householder coefficients
157
+ *
158
+ * Constructs the Householder sequence with coefficients given by \p h and vectors given by \p v. The
159
+ * i-th Householder coefficient \f$ h_i \f$ is given by \p h(i) and the essential part of the i-th
160
+ * Householder vector \f$ v_i \f$ is given by \p v(k,i) with \p k > \p i (the subdiagonal part of the
161
+ * i-th column). If \p v has fewer columns than rows, then the Householder sequence contains as many
162
+ * Householder reflections as there are columns.
163
+ *
164
+ * \note The %HouseholderSequence object stores \p v and \p h by reference.
165
+ *
166
+ * Example: \include HouseholderSequence_HouseholderSequence.cpp
167
+ * Output: \verbinclude HouseholderSequence_HouseholderSequence.out
168
+ *
169
+ * \sa setLength(), setShift()
170
+ */
171
+ EIGEN_DEVICE_FUNC HouseholderSequence(const VectorsType& v, const CoeffsType& h)
172
+ : m_vectors(v), m_coeffs(h), m_reverse(false), m_length(v.diagonalSize()), m_shift(0) {}
173
+
174
+ /** \brief Copy constructor. */
175
+ EIGEN_DEVICE_FUNC HouseholderSequence(const HouseholderSequence& other)
192
176
  : m_vectors(other.m_vectors),
193
177
  m_coeffs(other.m_coeffs),
194
178
  m_reverse(other.m_reverse),
195
179
  m_length(other.m_length),
196
- m_shift(other.m_shift)
197
- {
198
- }
180
+ m_shift(other.m_shift) {}
181
+
182
+ /** \brief Number of rows of transformation viewed as a matrix.
183
+ * \returns Number of rows
184
+ * \details This equals the dimension of the space that the transformation acts on.
185
+ */
186
+ EIGEN_DEVICE_FUNC constexpr Index rows() const noexcept {
187
+ return Side == OnTheLeft ? m_vectors.rows() : m_vectors.cols();
188
+ }
199
189
 
200
- /** \brief Number of rows of transformation viewed as a matrix.
201
- * \returns Number of rows
202
- * \details This equals the dimension of the space that the transformation acts on.
203
- */
204
- EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
205
- Index rows() const EIGEN_NOEXCEPT { return Side==OnTheLeft ? m_vectors.rows() : m_vectors.cols(); }
206
-
207
- /** \brief Number of columns of transformation viewed as a matrix.
208
- * \returns Number of columns
209
- * \details This equals the dimension of the space that the transformation acts on.
210
- */
211
- EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
212
- Index cols() const EIGEN_NOEXCEPT { return rows(); }
213
-
214
- /** \brief Essential part of a Householder vector.
215
- * \param[in] k Index of Householder reflection
216
- * \returns Vector containing non-trivial entries of k-th Householder vector
217
- *
218
- * This function returns the essential part of the Householder vector \f$ v_i \f$. This is a vector of
219
- * length \f$ n-i \f$ containing the last \f$ n-i \f$ entries of the vector
220
- * \f[
221
- * v_i = [\underbrace{0, \ldots, 0}_{i-1\mbox{ zeros}}, 1, \underbrace{*, \ldots,*}_{n-i\mbox{ arbitrary entries}} ].
222
- * \f]
223
- * The index \f$ i \f$ equals \p k + shift(), corresponding to the k-th column of the matrix \p v
224
- * passed to the constructor.
225
- *
226
- * \sa setShift(), shift()
227
- */
228
- EIGEN_DEVICE_FUNC
229
- const EssentialVectorType essentialVector(Index k) const
230
- {
231
- eigen_assert(k >= 0 && k < m_length);
232
- return internal::hseq_side_dependent_impl<VectorsType,CoeffsType,Side>::essentialVector(*this, k);
233
- }
190
+ /** \brief Number of columns of transformation viewed as a matrix.
191
+ * \returns Number of columns
192
+ * \details This equals the dimension of the space that the transformation acts on.
193
+ */
194
+ EIGEN_DEVICE_FUNC constexpr Index cols() const noexcept { return rows(); }
195
+
196
+ /** \brief Essential part of a Householder vector.
197
+ * \param[in] k Index of Householder reflection
198
+ * \returns Vector containing non-trivial entries of k-th Householder vector
199
+ *
200
+ * This function returns the essential part of the Householder vector \f$ v_i \f$. This is a vector of
201
+ * length \f$ n-i \f$ containing the last \f$ n-i \f$ entries of the vector
202
+ * \f[
203
+ * v_i = [\underbrace{0, \ldots, 0}_{i-1\mbox{ zeros}}, 1, \underbrace{*, \ldots,*}_{n-i\mbox{ arbitrary entries}} ].
204
+ * \f]
205
+ * The index \f$ i \f$ equals \p k + shift(), corresponding to the k-th column of the matrix \p v
206
+ * passed to the constructor.
207
+ *
208
+ * \sa setShift(), shift()
209
+ */
210
+ EIGEN_DEVICE_FUNC const EssentialVectorType essentialVector(Index k) const {
211
+ eigen_assert(k >= 0 && k < m_length);
212
+ return internal::hseq_side_dependent_impl<VectorsType, CoeffsType, Side>::essentialVector(*this, k);
213
+ }
234
214
 
235
- /** \brief %Transpose of the Householder sequence. */
236
- TransposeReturnType transpose() const
237
- {
238
- return TransposeReturnType(m_vectors.conjugate(), m_coeffs)
239
- .setReverseFlag(!m_reverse)
240
- .setLength(m_length)
241
- .setShift(m_shift);
242
- }
215
+ /** \brief %Transpose of the Householder sequence. */
216
+ TransposeReturnType transpose() const {
217
+ return TransposeReturnType(m_vectors.conjugate(), m_coeffs)
218
+ .setReverseFlag(!m_reverse)
219
+ .setLength(m_length)
220
+ .setShift(m_shift);
221
+ }
243
222
 
244
- /** \brief Complex conjugate of the Householder sequence. */
245
- ConjugateReturnType conjugate() const
246
- {
247
- return ConjugateReturnType(m_vectors.conjugate(), m_coeffs.conjugate())
248
- .setReverseFlag(m_reverse)
249
- .setLength(m_length)
250
- .setShift(m_shift);
251
- }
223
+ /** \brief Complex conjugate of the Householder sequence. */
224
+ ConjugateReturnType conjugate() const {
225
+ return ConjugateReturnType(m_vectors.conjugate(), m_coeffs.conjugate())
226
+ .setReverseFlag(m_reverse)
227
+ .setLength(m_length)
228
+ .setShift(m_shift);
229
+ }
252
230
 
253
- /** \returns an expression of the complex conjugate of \c *this if Cond==true,
254
- * returns \c *this otherwise.
255
- */
256
- template<bool Cond>
257
- EIGEN_DEVICE_FUNC
258
- inline typename internal::conditional<Cond,ConjugateReturnType,ConstHouseholderSequence>::type
259
- conjugateIf() const
260
- {
261
- typedef typename internal::conditional<Cond,ConjugateReturnType,ConstHouseholderSequence>::type ReturnType;
262
- return ReturnType(m_vectors.template conjugateIf<Cond>(), m_coeffs.template conjugateIf<Cond>());
263
- }
231
+ /** \returns an expression of the complex conjugate of \c *this if Cond==true,
232
+ * returns \c *this otherwise.
233
+ */
234
+ template <bool Cond>
235
+ EIGEN_DEVICE_FUNC inline std::conditional_t<Cond, ConjugateReturnType, ConstHouseholderSequence> conjugateIf() const {
236
+ typedef std::conditional_t<Cond, ConjugateReturnType, ConstHouseholderSequence> ReturnType;
237
+ return ReturnType(m_vectors.template conjugateIf<Cond>(), m_coeffs.template conjugateIf<Cond>());
238
+ }
264
239
 
265
- /** \brief Adjoint (conjugate transpose) of the Householder sequence. */
266
- AdjointReturnType adjoint() const
267
- {
268
- return AdjointReturnType(m_vectors, m_coeffs.conjugate())
269
- .setReverseFlag(!m_reverse)
270
- .setLength(m_length)
271
- .setShift(m_shift);
272
- }
240
+ /** \brief Adjoint (conjugate transpose) of the Householder sequence. */
241
+ AdjointReturnType adjoint() const {
242
+ return AdjointReturnType(m_vectors, m_coeffs.conjugate())
243
+ .setReverseFlag(!m_reverse)
244
+ .setLength(m_length)
245
+ .setShift(m_shift);
246
+ }
273
247
 
274
- /** \brief Inverse of the Householder sequence (equals the adjoint). */
275
- AdjointReturnType inverse() const { return adjoint(); }
276
-
277
- /** \internal */
278
- template<typename DestType>
279
- inline EIGEN_DEVICE_FUNC
280
- void evalTo(DestType& dst) const
281
- {
282
- Matrix<Scalar, DestType::RowsAtCompileTime, 1,
283
- AutoAlign|ColMajor, DestType::MaxRowsAtCompileTime, 1> workspace(rows());
284
- evalTo(dst, workspace);
285
- }
248
+ /** \brief Inverse of the Householder sequence (equals the adjoint). */
249
+ AdjointReturnType inverse() const { return adjoint(); }
286
250
 
287
- /** \internal */
288
- template<typename Dest, typename Workspace>
289
- EIGEN_DEVICE_FUNC
290
- void evalTo(Dest& dst, Workspace& workspace) const
291
- {
292
- workspace.resize(rows());
293
- Index vecs = m_length;
294
- if(internal::is_same_dense(dst,m_vectors))
295
- {
296
- // in-place
297
- dst.diagonal().setOnes();
298
- dst.template triangularView<StrictlyUpper>().setZero();
299
- for(Index k = vecs-1; k >= 0; --k)
300
- {
301
- Index cornerSize = rows() - k - m_shift;
302
- if(m_reverse)
303
- dst.bottomRightCorner(cornerSize, cornerSize)
304
- .applyHouseholderOnTheRight(essentialVector(k), m_coeffs.coeff(k), workspace.data());
305
- else
306
- dst.bottomRightCorner(cornerSize, cornerSize)
307
- .applyHouseholderOnTheLeft(essentialVector(k), m_coeffs.coeff(k), workspace.data());
308
-
309
- // clear the off diagonal vector
310
- dst.col(k).tail(rows()-k-1).setZero();
311
- }
312
- // clear the remaining columns if needed
313
- for(Index k = 0; k<cols()-vecs ; ++k)
314
- dst.col(k).tail(rows()-k-1).setZero();
315
- }
316
- else if(m_length>BlockSize)
317
- {
318
- dst.setIdentity(rows(), rows());
319
- if(m_reverse)
320
- applyThisOnTheLeft(dst,workspace,true);
251
+ /** \internal */
252
+ template <typename DestType>
253
+ inline EIGEN_DEVICE_FUNC void evalTo(DestType& dst) const {
254
+ Matrix<Scalar, DestType::RowsAtCompileTime, 1, AutoAlign | ColMajor, DestType::MaxRowsAtCompileTime, 1> workspace(
255
+ rows());
256
+ evalTo(dst, workspace);
257
+ }
258
+
259
+ /** \internal */
260
+ template <typename Dest, typename Workspace>
261
+ EIGEN_DEVICE_FUNC void evalTo(Dest& dst, Workspace& workspace) const {
262
+ workspace.resize(rows());
263
+ Index vecs = m_length;
264
+ if (internal::is_same_dense(dst, m_vectors)) {
265
+ // in-place
266
+ dst.diagonal().setOnes();
267
+ dst.template triangularView<StrictlyUpper>().setZero();
268
+ for (Index k = vecs - 1; k >= 0; --k) {
269
+ Index cornerSize = rows() - k - m_shift;
270
+ if (m_reverse)
271
+ dst.bottomRightCorner(cornerSize, cornerSize)
272
+ .applyHouseholderOnTheRight(essentialVector(k), m_coeffs.coeff(k), workspace.data());
321
273
  else
322
- applyThisOnTheLeft(dst,workspace,true);
274
+ dst.bottomRightCorner(cornerSize, cornerSize)
275
+ .applyHouseholderOnTheLeft(essentialVector(k), m_coeffs.coeff(k), workspace.data());
276
+
277
+ // clear the off diagonal vector
278
+ dst.col(k).tail(rows() - k - 1).setZero();
323
279
  }
280
+ // clear the remaining columns if needed
281
+ for (Index k = 0; k < cols() - vecs; ++k) dst.col(k).tail(rows() - k - 1).setZero();
282
+ } else if (m_length > BlockSize) {
283
+ dst.setIdentity(rows(), rows());
284
+ if (m_reverse)
285
+ applyThisOnTheLeft(dst, workspace, true);
324
286
  else
325
- {
326
- dst.setIdentity(rows(), rows());
327
- for(Index k = vecs-1; k >= 0; --k)
328
- {
329
- Index cornerSize = rows() - k - m_shift;
330
- if(m_reverse)
331
- dst.bottomRightCorner(cornerSize, cornerSize)
332
- .applyHouseholderOnTheRight(essentialVector(k), m_coeffs.coeff(k), workspace.data());
333
- else
334
- dst.bottomRightCorner(cornerSize, cornerSize)
335
- .applyHouseholderOnTheLeft(essentialVector(k), m_coeffs.coeff(k), workspace.data());
336
- }
287
+ applyThisOnTheLeft(dst, workspace, true);
288
+ } else {
289
+ dst.setIdentity(rows(), rows());
290
+ for (Index k = vecs - 1; k >= 0; --k) {
291
+ Index cornerSize = rows() - k - m_shift;
292
+ if (m_reverse)
293
+ dst.bottomRightCorner(cornerSize, cornerSize)
294
+ .applyHouseholderOnTheRight(essentialVector(k), m_coeffs.coeff(k), workspace.data());
295
+ else
296
+ dst.bottomRightCorner(cornerSize, cornerSize)
297
+ .applyHouseholderOnTheLeft(essentialVector(k), m_coeffs.coeff(k), workspace.data());
337
298
  }
338
299
  }
300
+ }
339
301
 
340
- /** \internal */
341
- template<typename Dest> inline void applyThisOnTheRight(Dest& dst) const
342
- {
343
- Matrix<Scalar,1,Dest::RowsAtCompileTime,RowMajor,1,Dest::MaxRowsAtCompileTime> workspace(dst.rows());
344
- applyThisOnTheRight(dst, workspace);
345
- }
302
+ /** \internal */
303
+ template <typename Dest>
304
+ inline void applyThisOnTheRight(Dest& dst) const {
305
+ Matrix<Scalar, 1, Dest::RowsAtCompileTime, RowMajor, 1, Dest::MaxRowsAtCompileTime> workspace(dst.rows());
306
+ applyThisOnTheRight(dst, workspace);
307
+ }
346
308
 
347
- /** \internal */
348
- template<typename Dest, typename Workspace>
349
- inline void applyThisOnTheRight(Dest& dst, Workspace& workspace) const
350
- {
351
- workspace.resize(dst.rows());
352
- for(Index k = 0; k < m_length; ++k)
353
- {
354
- Index actual_k = m_reverse ? m_length-k-1 : k;
355
- dst.rightCols(rows()-m_shift-actual_k)
356
- .applyHouseholderOnTheRight(essentialVector(actual_k), m_coeffs.coeff(actual_k), workspace.data());
357
- }
309
+ /** \internal */
310
+ template <typename Dest, typename Workspace>
311
+ inline void applyThisOnTheRight(Dest& dst, Workspace& workspace) const {
312
+ workspace.resize(dst.rows());
313
+ for (Index k = 0; k < m_length; ++k) {
314
+ Index actual_k = m_reverse ? m_length - k - 1 : k;
315
+ dst.rightCols(rows() - m_shift - actual_k)
316
+ .applyHouseholderOnTheRight(essentialVector(actual_k), m_coeffs.coeff(actual_k), workspace.data());
358
317
  }
318
+ }
359
319
 
360
- /** \internal */
361
- template<typename Dest> inline void applyThisOnTheLeft(Dest& dst, bool inputIsIdentity = false) const
362
- {
363
- Matrix<Scalar,1,Dest::ColsAtCompileTime,RowMajor,1,Dest::MaxColsAtCompileTime> workspace;
364
- applyThisOnTheLeft(dst, workspace, inputIsIdentity);
365
- }
320
+ /** \internal */
321
+ template <typename Dest>
322
+ inline void applyThisOnTheLeft(Dest& dst, bool inputIsIdentity = false) const {
323
+ Matrix<Scalar, 1, Dest::ColsAtCompileTime, RowMajor, 1, Dest::MaxColsAtCompileTime> workspace;
324
+ applyThisOnTheLeft(dst, workspace, inputIsIdentity);
325
+ }
366
326
 
367
- /** \internal */
368
- template<typename Dest, typename Workspace>
369
- inline void applyThisOnTheLeft(Dest& dst, Workspace& workspace, bool inputIsIdentity = false) const
370
- {
371
- if(inputIsIdentity && m_reverse)
372
- inputIsIdentity = false;
373
- // if the entries are large enough, then apply the reflectors by block
374
- if(m_length>=BlockSize && dst.cols()>1)
375
- {
376
- // Make sure we have at least 2 useful blocks, otherwise it is point-less:
377
- Index blockSize = m_length<Index(2*BlockSize) ? (m_length+1)/2 : Index(BlockSize);
378
- for(Index i = 0; i < m_length; i+=blockSize)
379
- {
380
- Index end = m_reverse ? (std::min)(m_length,i+blockSize) : m_length-i;
381
- Index k = m_reverse ? i : (std::max)(Index(0),end-blockSize);
382
- Index bs = end-k;
383
- Index start = k + m_shift;
384
-
385
- typedef Block<typename internal::remove_all<VectorsType>::type,Dynamic,Dynamic> SubVectorsType;
386
- SubVectorsType sub_vecs1(m_vectors.const_cast_derived(), Side==OnTheRight ? k : start,
387
- Side==OnTheRight ? start : k,
388
- Side==OnTheRight ? bs : m_vectors.rows()-start,
389
- Side==OnTheRight ? m_vectors.cols()-start : bs);
390
- typename internal::conditional<Side==OnTheRight, Transpose<SubVectorsType>, SubVectorsType&>::type sub_vecs(sub_vecs1);
391
-
392
- Index dstStart = dst.rows()-rows()+m_shift+k;
393
- Index dstRows = rows()-m_shift-k;
394
- Block<Dest,Dynamic,Dynamic> sub_dst(dst,
395
- dstStart,
396
- inputIsIdentity ? dstStart : 0,
397
- dstRows,
398
- inputIsIdentity ? dstRows : dst.cols());
327
+ /** \internal */
328
+ template <typename Dest, typename Workspace>
329
+ inline void applyThisOnTheLeft(Dest& dst, Workspace& workspace, bool inputIsIdentity = false) const {
330
+ if (inputIsIdentity && m_reverse) inputIsIdentity = false;
331
+ // if the entries are large enough, then apply the reflectors by block
332
+ if (m_length >= BlockSize && dst.cols() > 1) {
333
+ // Make sure we have at least 2 useful blocks, otherwise it is point-less:
334
+ Index blockSize = m_length < Index(2 * BlockSize) ? (m_length + 1) / 2 : Index(BlockSize);
335
+ for (Index i = 0; i < m_length; i += blockSize) {
336
+ Index end = m_reverse ? (std::min)(m_length, i + blockSize) : m_length - i;
337
+ Index k = m_reverse ? i : (std::max)(Index(0), end - blockSize);
338
+ Index bs = end - k;
339
+ Index start = k + m_shift;
340
+
341
+ typedef Block<internal::remove_all_t<VectorsType>, Dynamic, Dynamic> SubVectorsType;
342
+ SubVectorsType sub_vecs1(m_vectors.const_cast_derived(), Side == OnTheRight ? k : start,
343
+ Side == OnTheRight ? start : k, Side == OnTheRight ? bs : m_vectors.rows() - start,
344
+ Side == OnTheRight ? m_vectors.cols() - start : bs);
345
+ std::conditional_t<Side == OnTheRight, Transpose<SubVectorsType>, SubVectorsType&> sub_vecs(sub_vecs1);
346
+
347
+ Index dstRows = rows() - m_shift - k;
348
+
349
+ if (inputIsIdentity) {
350
+ Block<Dest, Dynamic, Dynamic> sub_dst = dst.bottomRightCorner(dstRows, dstRows);
351
+ apply_block_householder_on_the_left(sub_dst, sub_vecs, m_coeffs.segment(k, bs), !m_reverse);
352
+ } else {
353
+ auto sub_dst = dst.bottomRows(dstRows);
399
354
  apply_block_householder_on_the_left(sub_dst, sub_vecs, m_coeffs.segment(k, bs), !m_reverse);
400
355
  }
401
356
  }
402
- else
403
- {
404
- workspace.resize(dst.cols());
405
- for(Index k = 0; k < m_length; ++k)
406
- {
407
- Index actual_k = m_reverse ? k : m_length-k-1;
408
- Index dstStart = rows()-m_shift-actual_k;
409
- dst.bottomRightCorner(dstStart, inputIsIdentity ? dstStart : dst.cols())
410
- .applyHouseholderOnTheLeft(essentialVector(actual_k), m_coeffs.coeff(actual_k), workspace.data());
357
+ } else {
358
+ workspace.resize(dst.cols());
359
+ for (Index k = 0; k < m_length; ++k) {
360
+ Index actual_k = m_reverse ? k : m_length - k - 1;
361
+ Index dstRows = rows() - m_shift - actual_k;
362
+
363
+ if (inputIsIdentity) {
364
+ Block<Dest, Dynamic, Dynamic> sub_dst = dst.bottomRightCorner(dstRows, dstRows);
365
+ sub_dst.applyHouseholderOnTheLeft(essentialVector(actual_k), m_coeffs.coeff(actual_k), workspace.data());
366
+ } else {
367
+ auto sub_dst = dst.bottomRows(dstRows);
368
+ sub_dst.applyHouseholderOnTheLeft(essentialVector(actual_k), m_coeffs.coeff(actual_k), workspace.data());
411
369
  }
412
370
  }
413
371
  }
372
+ }
414
373
 
415
- /** \brief Computes the product of a Householder sequence with a matrix.
416
- * \param[in] other %Matrix being multiplied.
417
- * \returns Expression object representing the product.
418
- *
419
- * This function computes \f$ HM \f$ where \f$ H \f$ is the Householder sequence represented by \p *this
420
- * and \f$ M \f$ is the matrix \p other.
421
- */
422
- template<typename OtherDerived>
423
- typename internal::matrix_type_times_scalar_type<Scalar, OtherDerived>::Type operator*(const MatrixBase<OtherDerived>& other) const
424
- {
425
- typename internal::matrix_type_times_scalar_type<Scalar, OtherDerived>::Type
426
- res(other.template cast<typename internal::matrix_type_times_scalar_type<Scalar,OtherDerived>::ResultScalar>());
427
- applyThisOnTheLeft(res, internal::is_identity<OtherDerived>::value && res.rows()==res.cols());
428
- return res;
429
- }
374
+ /** \brief Computes the product of a Householder sequence with a matrix.
375
+ * \param[in] other %Matrix being multiplied.
376
+ * \returns Expression object representing the product.
377
+ *
378
+ * This function computes \f$ HM \f$ where \f$ H \f$ is the Householder sequence represented by \p *this
379
+ * and \f$ M \f$ is the matrix \p other.
380
+ */
381
+ template <typename OtherDerived>
382
+ typename internal::matrix_type_times_scalar_type<Scalar, OtherDerived>::Type operator*(
383
+ const MatrixBase<OtherDerived>& other) const {
384
+ typename internal::matrix_type_times_scalar_type<Scalar, OtherDerived>::Type res(
385
+ other.template cast<typename internal::matrix_type_times_scalar_type<Scalar, OtherDerived>::ResultScalar>());
386
+ applyThisOnTheLeft(res, internal::is_identity<OtherDerived>::value && res.rows() == res.cols());
387
+ return res;
388
+ }
430
389
 
431
- template<typename _VectorsType, typename _CoeffsType, int _Side> friend struct internal::hseq_side_dependent_impl;
432
-
433
- /** \brief Sets the length of the Householder sequence.
434
- * \param [in] length New value for the length.
435
- *
436
- * By default, the length \f$ n \f$ of the Householder sequence \f$ H = H_0 H_1 \ldots H_{n-1} \f$ is set
437
- * to the number of columns of the matrix \p v passed to the constructor, or the number of rows if that
438
- * is smaller. After this function is called, the length equals \p length.
439
- *
440
- * \sa length()
441
- */
442
- EIGEN_DEVICE_FUNC
443
- HouseholderSequence& setLength(Index length)
444
- {
445
- m_length = length;
446
- return *this;
447
- }
390
+ template <typename VectorsType_, typename CoeffsType_, int Side_>
391
+ friend struct internal::hseq_side_dependent_impl;
392
+
393
+ /** \brief Sets the length of the Householder sequence.
394
+ * \param [in] length New value for the length.
395
+ *
396
+ * By default, the length \f$ n \f$ of the Householder sequence \f$ H = H_0 H_1 \ldots H_{n-1} \f$ is set
397
+ * to the number of columns of the matrix \p v passed to the constructor, or the number of rows if that
398
+ * is smaller. After this function is called, the length equals \p length.
399
+ *
400
+ * \sa length()
401
+ */
402
+ EIGEN_DEVICE_FUNC HouseholderSequence& setLength(Index length) {
403
+ m_length = length;
404
+ return *this;
405
+ }
448
406
 
449
- /** \brief Sets the shift of the Householder sequence.
450
- * \param [in] shift New value for the shift.
451
- *
452
- * By default, a %HouseholderSequence object represents \f$ H = H_0 H_1 \ldots H_{n-1} \f$ and the i-th
453
- * column of the matrix \p v passed to the constructor corresponds to the i-th Householder
454
- * reflection. After this function is called, the object represents \f$ H = H_{\mathrm{shift}}
455
- * H_{\mathrm{shift}+1} \ldots H_{n-1} \f$ and the i-th column of \p v corresponds to the (shift+i)-th
456
- * Householder reflection.
457
- *
458
- * \sa shift()
459
- */
460
- EIGEN_DEVICE_FUNC
461
- HouseholderSequence& setShift(Index shift)
462
- {
463
- m_shift = shift;
464
- return *this;
465
- }
407
+ /** \brief Sets the shift of the Householder sequence.
408
+ * \param [in] shift New value for the shift.
409
+ *
410
+ * By default, a %HouseholderSequence object represents \f$ H = H_0 H_1 \ldots H_{n-1} \f$ and the i-th
411
+ * column of the matrix \p v passed to the constructor corresponds to the i-th Householder
412
+ * reflection. After this function is called, the object represents \f$ H = H_{\mathrm{shift}}
413
+ * H_{\mathrm{shift}+1} \ldots H_{n-1} \f$ and the i-th column of \p v corresponds to the (shift+i)-th
414
+ * Householder reflection.
415
+ *
416
+ * \sa shift()
417
+ */
418
+ EIGEN_DEVICE_FUNC HouseholderSequence& setShift(Index shift) {
419
+ m_shift = shift;
420
+ return *this;
421
+ }
466
422
 
467
- EIGEN_DEVICE_FUNC
468
- Index length() const { return m_length; } /**< \brief Returns the length of the Householder sequence. */
469
-
470
- EIGEN_DEVICE_FUNC
471
- Index shift() const { return m_shift; } /**< \brief Returns the shift of the Householder sequence. */
472
-
473
- /* Necessary for .adjoint() and .conjugate() */
474
- template <typename VectorsType2, typename CoeffsType2, int Side2> friend class HouseholderSequence;
475
-
476
- protected:
477
-
478
- /** \internal
479
- * \brief Sets the reverse flag.
480
- * \param [in] reverse New value of the reverse flag.
481
- *
482
- * By default, the reverse flag is not set. If the reverse flag is set, then this object represents
483
- * \f$ H^r = H_{n-1} \ldots H_1 H_0 \f$ instead of \f$ H = H_0 H_1 \ldots H_{n-1} \f$.
484
- * \note For real valued HouseholderSequence this is equivalent to transposing \f$ H \f$.
485
- *
486
- * \sa reverseFlag(), transpose(), adjoint()
487
- */
488
- HouseholderSequence& setReverseFlag(bool reverse)
489
- {
490
- m_reverse = reverse;
491
- return *this;
492
- }
423
+ EIGEN_DEVICE_FUNC Index length() const {
424
+ return m_length;
425
+ } /**< \brief Returns the length of the Householder sequence. */
426
+
427
+ EIGEN_DEVICE_FUNC Index shift() const {
428
+ return m_shift;
429
+ } /**< \brief Returns the shift of the Householder sequence. */
430
+
431
+ /* Necessary for .adjoint() and .conjugate() */
432
+ template <typename VectorsType2, typename CoeffsType2, int Side2>
433
+ friend class HouseholderSequence;
434
+
435
+ protected:
436
+ /** \internal
437
+ * \brief Sets the reverse flag.
438
+ * \param [in] reverse New value of the reverse flag.
439
+ *
440
+ * By default, the reverse flag is not set. If the reverse flag is set, then this object represents
441
+ * \f$ H^r = H_{n-1} \ldots H_1 H_0 \f$ instead of \f$ H = H_0 H_1 \ldots H_{n-1} \f$.
442
+ * \note For real valued HouseholderSequence this is equivalent to transposing \f$ H \f$.
443
+ *
444
+ * \sa reverseFlag(), transpose(), adjoint()
445
+ */
446
+ HouseholderSequence& setReverseFlag(bool reverse) {
447
+ m_reverse = reverse;
448
+ return *this;
449
+ }
493
450
 
494
- bool reverseFlag() const { return m_reverse; } /**< \internal \brief Returns the reverse flag. */
451
+ bool reverseFlag() const { return m_reverse; } /**< \internal \brief Returns the reverse flag. */
495
452
 
496
- typename VectorsType::Nested m_vectors;
497
- typename CoeffsType::Nested m_coeffs;
498
- bool m_reverse;
499
- Index m_length;
500
- Index m_shift;
501
- enum { BlockSize = 48 };
453
+ typename VectorsType::Nested m_vectors;
454
+ typename CoeffsType::Nested m_coeffs;
455
+ bool m_reverse;
456
+ Index m_length;
457
+ Index m_shift;
458
+ enum { BlockSize = 48 };
502
459
  };
503
460
 
504
461
  /** \brief Computes the product of a matrix with a Householder sequence.
505
- * \param[in] other %Matrix being multiplied.
506
- * \param[in] h %HouseholderSequence being multiplied.
507
- * \returns Expression object representing the product.
508
- *
509
- * This function computes \f$ MH \f$ where \f$ M \f$ is the matrix \p other and \f$ H \f$ is the
510
- * Householder sequence represented by \p h.
511
- */
512
- template<typename OtherDerived, typename VectorsType, typename CoeffsType, int Side>
513
- typename internal::matrix_type_times_scalar_type<typename VectorsType::Scalar,OtherDerived>::Type operator*(const MatrixBase<OtherDerived>& other, const HouseholderSequence<VectorsType,CoeffsType,Side>& h)
514
- {
515
- typename internal::matrix_type_times_scalar_type<typename VectorsType::Scalar,OtherDerived>::Type
516
- res(other.template cast<typename internal::matrix_type_times_scalar_type<typename VectorsType::Scalar,OtherDerived>::ResultScalar>());
462
+ * \param[in] other %Matrix being multiplied.
463
+ * \param[in] h %HouseholderSequence being multiplied.
464
+ * \returns Expression object representing the product.
465
+ *
466
+ * This function computes \f$ MH \f$ where \f$ M \f$ is the matrix \p other and \f$ H \f$ is the
467
+ * Householder sequence represented by \p h.
468
+ */
469
+ template <typename OtherDerived, typename VectorsType, typename CoeffsType, int Side>
470
+ typename internal::matrix_type_times_scalar_type<typename VectorsType::Scalar, OtherDerived>::Type operator*(
471
+ const MatrixBase<OtherDerived>& other, const HouseholderSequence<VectorsType, CoeffsType, Side>& h) {
472
+ typename internal::matrix_type_times_scalar_type<typename VectorsType::Scalar, OtherDerived>::Type res(
473
+ other.template cast<typename internal::matrix_type_times_scalar_type<typename VectorsType::Scalar,
474
+ OtherDerived>::ResultScalar>());
517
475
  h.applyThisOnTheRight(res);
518
476
  return res;
519
477
  }
520
478
 
521
- /** \ingroup Householder_Module \householder_module
522
- * \brief Convenience function for constructing a Householder sequence.
523
- * \returns A HouseholderSequence constructed from the specified arguments.
524
- */
525
- template<typename VectorsType, typename CoeffsType>
526
- HouseholderSequence<VectorsType,CoeffsType> householderSequence(const VectorsType& v, const CoeffsType& h)
527
- {
528
- return HouseholderSequence<VectorsType,CoeffsType,OnTheLeft>(v, h);
479
+ /** \ingroup Householder_Module
480
+ * \householder_module
481
+ * \brief Convenience function for constructing a Householder sequence.
482
+ * \returns A HouseholderSequence constructed from the specified arguments.
483
+ */
484
+ template <typename VectorsType, typename CoeffsType>
485
+ HouseholderSequence<VectorsType, CoeffsType> householderSequence(const VectorsType& v, const CoeffsType& h) {
486
+ return HouseholderSequence<VectorsType, CoeffsType, OnTheLeft>(v, h);
529
487
  }
530
488
 
531
- /** \ingroup Householder_Module \householder_module
532
- * \brief Convenience function for constructing a Householder sequence.
533
- * \returns A HouseholderSequence constructed from the specified arguments.
534
- * \details This function differs from householderSequence() in that the template argument \p OnTheSide of
535
- * the constructed HouseholderSequence is set to OnTheRight, instead of the default OnTheLeft.
536
- */
537
- template<typename VectorsType, typename CoeffsType>
538
- HouseholderSequence<VectorsType,CoeffsType,OnTheRight> rightHouseholderSequence(const VectorsType& v, const CoeffsType& h)
539
- {
540
- return HouseholderSequence<VectorsType,CoeffsType,OnTheRight>(v, h);
489
+ /** \ingroup Householder_Module
490
+ * \householder_module
491
+ * \brief Convenience function for constructing a Householder sequence.
492
+ * \returns A HouseholderSequence constructed from the specified arguments.
493
+ * \details This function differs from householderSequence() in that the template argument \p OnTheSide of
494
+ * the constructed HouseholderSequence is set to OnTheRight, instead of the default OnTheLeft.
495
+ */
496
+ template <typename VectorsType, typename CoeffsType>
497
+ HouseholderSequence<VectorsType, CoeffsType, OnTheRight> rightHouseholderSequence(const VectorsType& v,
498
+ const CoeffsType& h) {
499
+ return HouseholderSequence<VectorsType, CoeffsType, OnTheRight>(v, h);
541
500
  }
542
501
 
543
- } // end namespace Eigen
502
+ } // end namespace Eigen
544
503
 
545
- #endif // EIGEN_HOUSEHOLDER_SEQUENCE_H
504
+ #endif // EIGEN_HOUSEHOLDER_SEQUENCE_H