@smake/eigen 1.0.2 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (435) hide show
  1. package/README.md +1 -1
  2. package/eigen/Eigen/AccelerateSupport +52 -0
  3. package/eigen/Eigen/Cholesky +18 -21
  4. package/eigen/Eigen/CholmodSupport +28 -28
  5. package/eigen/Eigen/Core +235 -326
  6. package/eigen/Eigen/Eigenvalues +16 -14
  7. package/eigen/Eigen/Geometry +21 -24
  8. package/eigen/Eigen/Householder +9 -8
  9. package/eigen/Eigen/IterativeLinearSolvers +8 -4
  10. package/eigen/Eigen/Jacobi +14 -14
  11. package/eigen/Eigen/KLUSupport +43 -0
  12. package/eigen/Eigen/LU +16 -20
  13. package/eigen/Eigen/MetisSupport +12 -12
  14. package/eigen/Eigen/OrderingMethods +54 -54
  15. package/eigen/Eigen/PaStiXSupport +23 -20
  16. package/eigen/Eigen/PardisoSupport +17 -14
  17. package/eigen/Eigen/QR +18 -21
  18. package/eigen/Eigen/QtAlignedMalloc +5 -13
  19. package/eigen/Eigen/SPQRSupport +21 -14
  20. package/eigen/Eigen/SVD +23 -18
  21. package/eigen/Eigen/Sparse +1 -4
  22. package/eigen/Eigen/SparseCholesky +18 -23
  23. package/eigen/Eigen/SparseCore +18 -17
  24. package/eigen/Eigen/SparseLU +12 -8
  25. package/eigen/Eigen/SparseQR +16 -14
  26. package/eigen/Eigen/StdDeque +5 -2
  27. package/eigen/Eigen/StdList +5 -2
  28. package/eigen/Eigen/StdVector +5 -2
  29. package/eigen/Eigen/SuperLUSupport +30 -24
  30. package/eigen/Eigen/ThreadPool +80 -0
  31. package/eigen/Eigen/UmfPackSupport +19 -17
  32. package/eigen/Eigen/Version +14 -0
  33. package/eigen/Eigen/src/AccelerateSupport/AccelerateSupport.h +423 -0
  34. package/eigen/Eigen/src/AccelerateSupport/InternalHeaderCheck.h +3 -0
  35. package/eigen/Eigen/src/Cholesky/InternalHeaderCheck.h +3 -0
  36. package/eigen/Eigen/src/Cholesky/LDLT.h +377 -401
  37. package/eigen/Eigen/src/Cholesky/LLT.h +332 -360
  38. package/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +81 -56
  39. package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +620 -521
  40. package/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
  41. package/eigen/Eigen/src/Core/ArithmeticSequence.h +239 -0
  42. package/eigen/Eigen/src/Core/Array.h +341 -294
  43. package/eigen/Eigen/src/Core/ArrayBase.h +190 -203
  44. package/eigen/Eigen/src/Core/ArrayWrapper.h +127 -171
  45. package/eigen/Eigen/src/Core/Assign.h +30 -40
  46. package/eigen/Eigen/src/Core/AssignEvaluator.h +711 -589
  47. package/eigen/Eigen/src/Core/Assign_MKL.h +130 -125
  48. package/eigen/Eigen/src/Core/BandMatrix.h +268 -283
  49. package/eigen/Eigen/src/Core/Block.h +375 -398
  50. package/eigen/Eigen/src/Core/CommaInitializer.h +86 -97
  51. package/eigen/Eigen/src/Core/ConditionEstimator.h +51 -53
  52. package/eigen/Eigen/src/Core/CoreEvaluators.h +1356 -1026
  53. package/eigen/Eigen/src/Core/CoreIterators.h +73 -59
  54. package/eigen/Eigen/src/Core/CwiseBinaryOp.h +114 -132
  55. package/eigen/Eigen/src/Core/CwiseNullaryOp.h +726 -617
  56. package/eigen/Eigen/src/Core/CwiseTernaryOp.h +77 -103
  57. package/eigen/Eigen/src/Core/CwiseUnaryOp.h +56 -68
  58. package/eigen/Eigen/src/Core/CwiseUnaryView.h +132 -95
  59. package/eigen/Eigen/src/Core/DenseBase.h +632 -571
  60. package/eigen/Eigen/src/Core/DenseCoeffsBase.h +511 -624
  61. package/eigen/Eigen/src/Core/DenseStorage.h +512 -509
  62. package/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
  63. package/eigen/Eigen/src/Core/Diagonal.h +169 -210
  64. package/eigen/Eigen/src/Core/DiagonalMatrix.h +351 -274
  65. package/eigen/Eigen/src/Core/DiagonalProduct.h +12 -10
  66. package/eigen/Eigen/src/Core/Dot.h +172 -222
  67. package/eigen/Eigen/src/Core/EigenBase.h +75 -85
  68. package/eigen/Eigen/src/Core/Fill.h +138 -0
  69. package/eigen/Eigen/src/Core/FindCoeff.h +464 -0
  70. package/eigen/Eigen/src/Core/ForceAlignedAccess.h +90 -109
  71. package/eigen/Eigen/src/Core/Fuzzy.h +82 -105
  72. package/eigen/Eigen/src/Core/GeneralProduct.h +327 -263
  73. package/eigen/Eigen/src/Core/GenericPacketMath.h +1472 -360
  74. package/eigen/Eigen/src/Core/GlobalFunctions.h +194 -151
  75. package/eigen/Eigen/src/Core/IO.h +147 -139
  76. package/eigen/Eigen/src/Core/IndexedView.h +321 -0
  77. package/eigen/Eigen/src/Core/InnerProduct.h +260 -0
  78. package/eigen/Eigen/src/Core/InternalHeaderCheck.h +3 -0
  79. package/eigen/Eigen/src/Core/Inverse.h +56 -66
  80. package/eigen/Eigen/src/Core/Map.h +124 -142
  81. package/eigen/Eigen/src/Core/MapBase.h +256 -281
  82. package/eigen/Eigen/src/Core/MathFunctions.h +1620 -938
  83. package/eigen/Eigen/src/Core/MathFunctionsImpl.h +233 -71
  84. package/eigen/Eigen/src/Core/Matrix.h +491 -416
  85. package/eigen/Eigen/src/Core/MatrixBase.h +468 -453
  86. package/eigen/Eigen/src/Core/NestByValue.h +66 -85
  87. package/eigen/Eigen/src/Core/NoAlias.h +79 -85
  88. package/eigen/Eigen/src/Core/NumTraits.h +235 -148
  89. package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +253 -0
  90. package/eigen/Eigen/src/Core/PermutationMatrix.h +461 -511
  91. package/eigen/Eigen/src/Core/PlainObjectBase.h +871 -894
  92. package/eigen/Eigen/src/Core/Product.h +260 -139
  93. package/eigen/Eigen/src/Core/ProductEvaluators.h +863 -714
  94. package/eigen/Eigen/src/Core/Random.h +161 -136
  95. package/eigen/Eigen/src/Core/RandomImpl.h +262 -0
  96. package/eigen/Eigen/src/Core/RealView.h +250 -0
  97. package/eigen/Eigen/src/Core/Redux.h +366 -336
  98. package/eigen/Eigen/src/Core/Ref.h +308 -209
  99. package/eigen/Eigen/src/Core/Replicate.h +94 -106
  100. package/eigen/Eigen/src/Core/Reshaped.h +398 -0
  101. package/eigen/Eigen/src/Core/ReturnByValue.h +49 -55
  102. package/eigen/Eigen/src/Core/Reverse.h +136 -145
  103. package/eigen/Eigen/src/Core/Select.h +70 -140
  104. package/eigen/Eigen/src/Core/SelfAdjointView.h +262 -285
  105. package/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h +23 -20
  106. package/eigen/Eigen/src/Core/SkewSymmetricMatrix3.h +382 -0
  107. package/eigen/Eigen/src/Core/Solve.h +97 -111
  108. package/eigen/Eigen/src/Core/SolveTriangular.h +131 -129
  109. package/eigen/Eigen/src/Core/SolverBase.h +138 -101
  110. package/eigen/Eigen/src/Core/StableNorm.h +156 -160
  111. package/eigen/Eigen/src/Core/StlIterators.h +619 -0
  112. package/eigen/Eigen/src/Core/Stride.h +91 -88
  113. package/eigen/Eigen/src/Core/Swap.h +70 -38
  114. package/eigen/Eigen/src/Core/Transpose.h +295 -273
  115. package/eigen/Eigen/src/Core/Transpositions.h +272 -317
  116. package/eigen/Eigen/src/Core/TriangularMatrix.h +670 -755
  117. package/eigen/Eigen/src/Core/VectorBlock.h +59 -72
  118. package/eigen/Eigen/src/Core/VectorwiseOp.h +668 -630
  119. package/eigen/Eigen/src/Core/Visitor.h +480 -216
  120. package/eigen/Eigen/src/Core/arch/AVX/Complex.h +407 -293
  121. package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +79 -388
  122. package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +2935 -491
  123. package/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
  124. package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +279 -22
  125. package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +472 -0
  126. package/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
  127. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +85 -333
  128. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
  129. package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +2490 -649
  130. package/eigen/Eigen/src/Core/arch/AVX512/PacketMathFP16.h +1413 -0
  131. package/eigen/Eigen/src/Core/arch/AVX512/Reductions.h +297 -0
  132. package/eigen/Eigen/src/Core/arch/AVX512/TrsmKernel.h +1167 -0
  133. package/eigen/Eigen/src/Core/arch/AVX512/TrsmUnrolls.inc +1219 -0
  134. package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +277 -0
  135. package/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
  136. package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +521 -298
  137. package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +39 -280
  138. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +3686 -0
  139. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +205 -0
  140. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +901 -0
  141. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMAbfloat16.h +742 -0
  142. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixVectorProduct.inc +2818 -0
  143. package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +3391 -723
  144. package/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
  145. package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +866 -0
  146. package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +113 -14
  147. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +2634 -0
  148. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +227 -0
  149. package/eigen/Eigen/src/Core/arch/Default/Half.h +1091 -0
  150. package/eigen/Eigen/src/Core/arch/Default/Settings.h +11 -13
  151. package/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
  152. package/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +104 -0
  153. package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1712 -0
  154. package/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
  155. package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +77 -0
  156. package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
  157. package/eigen/Eigen/src/Core/arch/HVX/PacketMath.h +1088 -0
  158. package/eigen/Eigen/src/Core/arch/LSX/Complex.h +520 -0
  159. package/eigen/Eigen/src/Core/arch/LSX/GeneralBlockPanelKernel.h +23 -0
  160. package/eigen/Eigen/src/Core/arch/LSX/MathFunctions.h +43 -0
  161. package/eigen/Eigen/src/Core/arch/LSX/PacketMath.h +2866 -0
  162. package/eigen/Eigen/src/Core/arch/LSX/TypeCasting.h +526 -0
  163. package/eigen/Eigen/src/Core/arch/MSA/Complex.h +620 -0
  164. package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +379 -0
  165. package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1237 -0
  166. package/eigen/Eigen/src/Core/arch/NEON/Complex.h +531 -289
  167. package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +243 -0
  168. package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +50 -73
  169. package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +5915 -579
  170. package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1642 -0
  171. package/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
  172. package/eigen/Eigen/src/Core/arch/SSE/Complex.h +366 -334
  173. package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +40 -514
  174. package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +2164 -675
  175. package/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
  176. package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +188 -35
  177. package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +48 -0
  178. package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +674 -0
  179. package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +52 -0
  180. package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +227 -0
  181. package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +303 -0
  182. package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +576 -0
  183. package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +83 -0
  184. package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +434 -261
  185. package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +160 -53
  186. package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +1073 -605
  187. package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +123 -117
  188. package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +594 -322
  189. package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +204 -118
  190. package/eigen/Eigen/src/Core/functors/StlFunctors.h +110 -97
  191. package/eigen/Eigen/src/Core/functors/TernaryFunctors.h +34 -7
  192. package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1158 -530
  193. package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +2329 -1333
  194. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +328 -364
  195. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +191 -178
  196. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +85 -82
  197. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +154 -73
  198. package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +396 -542
  199. package/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +80 -77
  200. package/eigen/Eigen/src/Core/products/Parallelizer.h +208 -92
  201. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +331 -375
  202. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +206 -224
  203. package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +139 -146
  204. package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +58 -61
  205. package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +71 -71
  206. package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +48 -46
  207. package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +294 -369
  208. package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +246 -238
  209. package/eigen/Eigen/src/Core/products/TriangularMatrixVector.h +244 -247
  210. package/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +212 -192
  211. package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +328 -275
  212. package/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +108 -109
  213. package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +70 -93
  214. package/eigen/Eigen/src/Core/util/Assert.h +158 -0
  215. package/eigen/Eigen/src/Core/util/BlasUtil.h +413 -290
  216. package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +543 -0
  217. package/eigen/Eigen/src/Core/util/Constants.h +314 -263
  218. package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +130 -78
  219. package/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
  220. package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +450 -224
  221. package/eigen/Eigen/src/Core/util/GpuHipCudaDefines.inc +101 -0
  222. package/eigen/Eigen/src/Core/util/GpuHipCudaUndefines.inc +45 -0
  223. package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +487 -0
  224. package/eigen/Eigen/src/Core/util/IntegralConstant.h +279 -0
  225. package/eigen/Eigen/src/Core/util/MKL_support.h +39 -30
  226. package/eigen/Eigen/src/Core/util/Macros.h +939 -646
  227. package/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
  228. package/eigen/Eigen/src/Core/util/Memory.h +1042 -650
  229. package/eigen/Eigen/src/Core/util/Meta.h +618 -426
  230. package/eigen/Eigen/src/Core/util/MoreMeta.h +638 -0
  231. package/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +32 -19
  232. package/eigen/Eigen/src/Core/util/ReshapedHelper.h +51 -0
  233. package/eigen/Eigen/src/Core/util/Serializer.h +209 -0
  234. package/eigen/Eigen/src/Core/util/StaticAssert.h +51 -164
  235. package/eigen/Eigen/src/Core/util/SymbolicIndex.h +445 -0
  236. package/eigen/Eigen/src/Core/util/XprHelper.h +793 -538
  237. package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +246 -277
  238. package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +299 -319
  239. package/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +52 -48
  240. package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +413 -456
  241. package/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +309 -325
  242. package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +157 -171
  243. package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +292 -310
  244. package/eigen/Eigen/src/Eigenvalues/InternalHeaderCheck.h +3 -0
  245. package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +91 -107
  246. package/eigen/Eigen/src/Eigenvalues/RealQZ.h +539 -606
  247. package/eigen/Eigen/src/Eigenvalues/RealSchur.h +348 -382
  248. package/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +41 -35
  249. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +579 -600
  250. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +47 -44
  251. package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +434 -461
  252. package/eigen/Eigen/src/Geometry/AlignedBox.h +307 -214
  253. package/eigen/Eigen/src/Geometry/AngleAxis.h +135 -137
  254. package/eigen/Eigen/src/Geometry/EulerAngles.h +163 -74
  255. package/eigen/Eigen/src/Geometry/Homogeneous.h +289 -333
  256. package/eigen/Eigen/src/Geometry/Hyperplane.h +152 -161
  257. package/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
  258. package/eigen/Eigen/src/Geometry/OrthoMethods.h +168 -145
  259. package/eigen/Eigen/src/Geometry/ParametrizedLine.h +141 -104
  260. package/eigen/Eigen/src/Geometry/Quaternion.h +595 -497
  261. package/eigen/Eigen/src/Geometry/Rotation2D.h +110 -108
  262. package/eigen/Eigen/src/Geometry/RotationBase.h +148 -145
  263. package/eigen/Eigen/src/Geometry/Scaling.h +115 -90
  264. package/eigen/Eigen/src/Geometry/Transform.h +896 -953
  265. package/eigen/Eigen/src/Geometry/Translation.h +100 -98
  266. package/eigen/Eigen/src/Geometry/Umeyama.h +79 -84
  267. package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +154 -0
  268. package/eigen/Eigen/src/Householder/BlockHouseholder.h +54 -42
  269. package/eigen/Eigen/src/Householder/Householder.h +104 -122
  270. package/eigen/Eigen/src/Householder/HouseholderSequence.h +416 -382
  271. package/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
  272. package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +153 -166
  273. package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +127 -138
  274. package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +95 -124
  275. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +269 -267
  276. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +246 -259
  277. package/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
  278. package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +218 -217
  279. package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +80 -103
  280. package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +59 -63
  281. package/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
  282. package/eigen/Eigen/src/Jacobi/Jacobi.h +256 -291
  283. package/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
  284. package/eigen/Eigen/src/KLUSupport/KLUSupport.h +339 -0
  285. package/eigen/Eigen/src/LU/Determinant.h +60 -63
  286. package/eigen/Eigen/src/LU/FullPivLU.h +561 -626
  287. package/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
  288. package/eigen/Eigen/src/LU/InverseImpl.h +213 -275
  289. package/eigen/Eigen/src/LU/PartialPivLU.h +407 -435
  290. package/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +54 -40
  291. package/eigen/Eigen/src/LU/arch/InverseSize4.h +353 -0
  292. package/eigen/Eigen/src/MetisSupport/InternalHeaderCheck.h +3 -0
  293. package/eigen/Eigen/src/MetisSupport/MetisSupport.h +81 -93
  294. package/eigen/Eigen/src/OrderingMethods/Amd.h +250 -282
  295. package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +950 -1103
  296. package/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
  297. package/eigen/Eigen/src/OrderingMethods/Ordering.h +111 -122
  298. package/eigen/Eigen/src/PaStiXSupport/InternalHeaderCheck.h +3 -0
  299. package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +524 -570
  300. package/eigen/Eigen/src/PardisoSupport/InternalHeaderCheck.h +3 -0
  301. package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +385 -429
  302. package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +494 -473
  303. package/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +120 -56
  304. package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +223 -137
  305. package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +517 -460
  306. package/eigen/Eigen/src/QR/HouseholderQR.h +412 -278
  307. package/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h +32 -23
  308. package/eigen/Eigen/src/QR/InternalHeaderCheck.h +3 -0
  309. package/eigen/Eigen/src/SPQRSupport/InternalHeaderCheck.h +3 -0
  310. package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +263 -261
  311. package/eigen/Eigen/src/SVD/BDCSVD.h +872 -679
  312. package/eigen/Eigen/src/SVD/BDCSVD_LAPACKE.h +174 -0
  313. package/eigen/Eigen/src/SVD/InternalHeaderCheck.h +3 -0
  314. package/eigen/Eigen/src/SVD/JacobiSVD.h +585 -543
  315. package/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +85 -49
  316. package/eigen/Eigen/src/SVD/SVDBase.h +281 -160
  317. package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +202 -237
  318. package/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
  319. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +769 -590
  320. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +318 -129
  321. package/eigen/Eigen/src/SparseCore/AmbiVector.h +202 -251
  322. package/eigen/Eigen/src/SparseCore/CompressedStorage.h +184 -236
  323. package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +140 -184
  324. package/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
  325. package/eigen/Eigen/src/SparseCore/SparseAssign.h +174 -111
  326. package/eigen/Eigen/src/SparseCore/SparseBlock.h +408 -477
  327. package/eigen/Eigen/src/SparseCore/SparseColEtree.h +100 -112
  328. package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +531 -280
  329. package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +559 -347
  330. package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +100 -108
  331. package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +185 -191
  332. package/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h +71 -71
  333. package/eigen/Eigen/src/SparseCore/SparseDot.h +49 -47
  334. package/eigen/Eigen/src/SparseCore/SparseFuzzy.h +13 -11
  335. package/eigen/Eigen/src/SparseCore/SparseMap.h +243 -253
  336. package/eigen/Eigen/src/SparseCore/SparseMatrix.h +1614 -1142
  337. package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +403 -357
  338. package/eigen/Eigen/src/SparseCore/SparsePermutation.h +186 -115
  339. package/eigen/Eigen/src/SparseCore/SparseProduct.h +100 -91
  340. package/eigen/Eigen/src/SparseCore/SparseRedux.h +22 -24
  341. package/eigen/Eigen/src/SparseCore/SparseRef.h +268 -295
  342. package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +371 -414
  343. package/eigen/Eigen/src/SparseCore/SparseSolverBase.h +78 -87
  344. package/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +81 -95
  345. package/eigen/Eigen/src/SparseCore/SparseTranspose.h +62 -71
  346. package/eigen/Eigen/src/SparseCore/SparseTriangularView.h +132 -144
  347. package/eigen/Eigen/src/SparseCore/SparseUtil.h +146 -115
  348. package/eigen/Eigen/src/SparseCore/SparseVector.h +426 -372
  349. package/eigen/Eigen/src/SparseCore/SparseView.h +164 -193
  350. package/eigen/Eigen/src/SparseCore/TriangularSolver.h +129 -170
  351. package/eigen/Eigen/src/SparseLU/InternalHeaderCheck.h +3 -0
  352. package/eigen/Eigen/src/SparseLU/SparseLU.h +814 -618
  353. package/eigen/Eigen/src/SparseLU/SparseLUImpl.h +61 -48
  354. package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +102 -118
  355. package/eigen/Eigen/src/SparseLU/SparseLU_Structs.h +38 -35
  356. package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +273 -255
  357. package/eigen/Eigen/src/SparseLU/SparseLU_Utils.h +44 -49
  358. package/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h +104 -108
  359. package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +90 -101
  360. package/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +57 -58
  361. package/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +43 -55
  362. package/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +74 -71
  363. package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +125 -133
  364. package/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h +136 -159
  365. package/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h +51 -52
  366. package/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h +67 -73
  367. package/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h +24 -26
  368. package/eigen/Eigen/src/SparseQR/InternalHeaderCheck.h +3 -0
  369. package/eigen/Eigen/src/SparseQR/SparseQR.h +451 -490
  370. package/eigen/Eigen/src/StlSupport/StdDeque.h +28 -105
  371. package/eigen/Eigen/src/StlSupport/StdList.h +28 -84
  372. package/eigen/Eigen/src/StlSupport/StdVector.h +28 -108
  373. package/eigen/Eigen/src/StlSupport/details.h +48 -50
  374. package/eigen/Eigen/src/SuperLUSupport/InternalHeaderCheck.h +3 -0
  375. package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +634 -732
  376. package/eigen/Eigen/src/ThreadPool/Barrier.h +70 -0
  377. package/eigen/Eigen/src/ThreadPool/CoreThreadPoolDevice.h +336 -0
  378. package/eigen/Eigen/src/ThreadPool/EventCount.h +241 -0
  379. package/eigen/Eigen/src/ThreadPool/ForkJoin.h +140 -0
  380. package/eigen/Eigen/src/ThreadPool/InternalHeaderCheck.h +4 -0
  381. package/eigen/Eigen/src/ThreadPool/NonBlockingThreadPool.h +587 -0
  382. package/eigen/Eigen/src/ThreadPool/RunQueue.h +230 -0
  383. package/eigen/Eigen/src/ThreadPool/ThreadCancel.h +21 -0
  384. package/eigen/Eigen/src/ThreadPool/ThreadEnvironment.h +43 -0
  385. package/eigen/Eigen/src/ThreadPool/ThreadLocal.h +289 -0
  386. package/eigen/Eigen/src/ThreadPool/ThreadPoolInterface.h +50 -0
  387. package/eigen/Eigen/src/ThreadPool/ThreadYield.h +16 -0
  388. package/eigen/Eigen/src/UmfPackSupport/InternalHeaderCheck.h +3 -0
  389. package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +480 -380
  390. package/eigen/Eigen/src/misc/Image.h +41 -43
  391. package/eigen/Eigen/src/misc/InternalHeaderCheck.h +3 -0
  392. package/eigen/Eigen/src/misc/Kernel.h +39 -41
  393. package/eigen/Eigen/src/misc/RealSvd2x2.h +19 -21
  394. package/eigen/Eigen/src/misc/blas.h +83 -426
  395. package/eigen/Eigen/src/misc/lapacke.h +9976 -16182
  396. package/eigen/Eigen/src/misc/lapacke_helpers.h +163 -0
  397. package/eigen/Eigen/src/misc/lapacke_mangling.h +4 -5
  398. package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.inc +344 -0
  399. package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.inc +544 -0
  400. package/eigen/Eigen/src/plugins/BlockMethods.inc +1370 -0
  401. package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
  402. package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.inc +167 -0
  403. package/eigen/Eigen/src/plugins/IndexedViewMethods.inc +192 -0
  404. package/eigen/Eigen/src/plugins/InternalHeaderCheck.inc +3 -0
  405. package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.inc +331 -0
  406. package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.inc +118 -0
  407. package/eigen/Eigen/src/plugins/ReshapedMethods.inc +133 -0
  408. package/lib/LibEigen.d.ts +4 -0
  409. package/lib/LibEigen.js +14 -0
  410. package/lib/index.d.ts +1 -1
  411. package/lib/index.js +7 -3
  412. package/package.json +2 -10
  413. package/eigen/Eigen/CMakeLists.txt +0 -19
  414. package/eigen/Eigen/src/Core/BooleanRedux.h +0 -164
  415. package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +0 -103
  416. package/eigen/Eigen/src/Core/arch/CUDA/Half.h +0 -675
  417. package/eigen/Eigen/src/Core/arch/CUDA/MathFunctions.h +0 -91
  418. package/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +0 -333
  419. package/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +0 -1124
  420. package/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +0 -212
  421. package/eigen/Eigen/src/Core/util/NonMPL2.h +0 -3
  422. package/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +0 -161
  423. package/eigen/Eigen/src/LU/arch/Inverse_SSE.h +0 -338
  424. package/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h +0 -67
  425. package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +0 -280
  426. package/eigen/Eigen/src/misc/lapack.h +0 -152
  427. package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +0 -332
  428. package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +0 -552
  429. package/eigen/Eigen/src/plugins/BlockMethods.h +0 -1058
  430. package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +0 -115
  431. package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +0 -163
  432. package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +0 -152
  433. package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +0 -85
  434. package/lib/eigen.d.ts +0 -2
  435. package/lib/eigen.js +0 -15
@@ -10,439 +10,410 @@
10
10
  #ifndef EIGEN_LLT_H
11
11
  #define EIGEN_LLT_H
12
12
 
13
+ // IWYU pragma: private
14
+ #include "./InternalHeaderCheck.h"
15
+
13
16
  namespace Eigen {
14
17
 
15
- namespace internal{
16
- template<typename MatrixType, int UpLo> struct LLT_Traits;
17
- }
18
+ namespace internal {
18
19
 
19
- /** \ingroup Cholesky_Module
20
- *
21
- * \class LLT
22
- *
23
- * \brief Standard Cholesky decomposition (LL^T) of a matrix and associated features
24
- *
25
- * \tparam _MatrixType the type of the matrix of which we are computing the LL^T Cholesky decomposition
26
- * \tparam _UpLo the triangular part that will be used for the decompositon: Lower (default) or Upper.
27
- * The other triangular part won't be read.
28
- *
29
- * This class performs a LL^T Cholesky decomposition of a symmetric, positive definite
30
- * matrix A such that A = LL^* = U^*U, where L is lower triangular.
31
- *
32
- * While the Cholesky decomposition is particularly useful to solve selfadjoint problems like D^*D x = b,
33
- * for that purpose, we recommend the Cholesky decomposition without square root which is more stable
34
- * and even faster. Nevertheless, this standard Cholesky decomposition remains useful in many other
35
- * situations like generalised eigen problems with hermitian matrices.
36
- *
37
- * Remember that Cholesky decompositions are not rank-revealing. This LLT decomposition is only stable on positive definite matrices,
38
- * use LDLT instead for the semidefinite case. Also, do not use a Cholesky decomposition to determine whether a system of equations
39
- * has a solution.
40
- *
41
- * Example: \include LLT_example.cpp
42
- * Output: \verbinclude LLT_example.out
43
- *
44
- * \b Performance: for best performance, it is recommended to use a column-major storage format
45
- * with the Lower triangular part (the default), or, equivalently, a row-major storage format
46
- * with the Upper triangular part. Otherwise, you might get a 20% slowdown for the full factorization
47
- * step, and rank-updates can be up to 3 times slower.
48
- *
49
- * This class supports the \link InplaceDecomposition inplace decomposition \endlink mechanism.
50
- *
51
- * Note that during the decomposition, only the lower (or upper, as defined by _UpLo) triangular part of A is considered.
52
- * Therefore, the strict lower part does not have to store correct values.
53
- *
54
- * \sa MatrixBase::llt(), SelfAdjointView::llt(), class LDLT
55
- */
56
- template<typename _MatrixType, int _UpLo> class LLT
57
- {
58
- public:
59
- typedef _MatrixType MatrixType;
60
- enum {
61
- RowsAtCompileTime = MatrixType::RowsAtCompileTime,
62
- ColsAtCompileTime = MatrixType::ColsAtCompileTime,
63
- MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime
64
- };
65
- typedef typename MatrixType::Scalar Scalar;
66
- typedef typename NumTraits<typename MatrixType::Scalar>::Real RealScalar;
67
- typedef Eigen::Index Index; ///< \deprecated since Eigen 3.3
68
- typedef typename MatrixType::StorageIndex StorageIndex;
69
-
70
- enum {
71
- PacketSize = internal::packet_traits<Scalar>::size,
72
- AlignmentMask = int(PacketSize)-1,
73
- UpLo = _UpLo
74
- };
75
-
76
- typedef internal::LLT_Traits<MatrixType,UpLo> Traits;
77
-
78
- /**
79
- * \brief Default Constructor.
80
- *
81
- * The default constructor is useful in cases in which the user intends to
82
- * perform decompositions via LLT::compute(const MatrixType&).
83
- */
84
- LLT() : m_matrix(), m_isInitialized(false) {}
85
-
86
- /** \brief Default Constructor with memory preallocation
87
- *
88
- * Like the default constructor but with preallocation of the internal data
89
- * according to the specified problem \a size.
90
- * \sa LLT()
91
- */
92
- explicit LLT(Index size) : m_matrix(size, size),
93
- m_isInitialized(false) {}
94
-
95
- template<typename InputType>
96
- explicit LLT(const EigenBase<InputType>& matrix)
97
- : m_matrix(matrix.rows(), matrix.cols()),
98
- m_isInitialized(false)
99
- {
100
- compute(matrix.derived());
101
- }
20
+ template <typename MatrixType_, int UpLo_>
21
+ struct traits<LLT<MatrixType_, UpLo_> > : traits<MatrixType_> {
22
+ typedef MatrixXpr XprKind;
23
+ typedef SolverStorage StorageKind;
24
+ typedef int StorageIndex;
25
+ enum { Flags = 0 };
26
+ };
102
27
 
103
- /** \brief Constructs a LDLT factorization from a given matrix
104
- *
105
- * This overloaded constructor is provided for \link InplaceDecomposition inplace decomposition \endlink when
106
- * \c MatrixType is a Eigen::Ref.
107
- *
108
- * \sa LLT(const EigenBase&)
109
- */
110
- template<typename InputType>
111
- explicit LLT(EigenBase<InputType>& matrix)
112
- : m_matrix(matrix.derived()),
113
- m_isInitialized(false)
114
- {
115
- compute(matrix.derived());
116
- }
28
+ template <typename MatrixType, int UpLo>
29
+ struct LLT_Traits;
30
+ } // namespace internal
117
31
 
118
- /** \returns a view of the upper triangular matrix U */
119
- inline typename Traits::MatrixU matrixU() const
120
- {
121
- eigen_assert(m_isInitialized && "LLT is not initialized.");
122
- return Traits::getU(m_matrix);
123
- }
32
+ /** \ingroup Cholesky_Module
33
+ *
34
+ * \class LLT
35
+ *
36
+ * \brief Standard Cholesky decomposition (LL^T) of a matrix and associated features
37
+ *
38
+ * \tparam MatrixType_ the type of the matrix of which we are computing the LL^T Cholesky decomposition
39
+ * \tparam UpLo_ the triangular part that will be used for the decomposition: Lower (default) or Upper.
40
+ * The other triangular part won't be read.
41
+ *
42
+ * This class performs a LL^T Cholesky decomposition of a symmetric, positive definite
43
+ * matrix A such that A = LL^* = U^*U, where L is lower triangular.
44
+ *
45
+ * While the Cholesky decomposition is particularly useful to solve selfadjoint problems like D^*D x = b,
46
+ * for that purpose, we recommend the Cholesky decomposition without square root which is more stable
47
+ * and even faster. Nevertheless, this standard Cholesky decomposition remains useful in many other
48
+ * situations like generalised eigen problems with hermitian matrices.
49
+ *
50
+ * Remember that Cholesky decompositions are not rank-revealing. This LLT decomposition is only stable on positive
51
+ * definite matrices, use LDLT instead for the semidefinite case. Also, do not use a Cholesky decomposition to determine
52
+ * whether a system of equations has a solution.
53
+ *
54
+ * Example: \include LLT_example.cpp
55
+ * Output: \verbinclude LLT_example.out
56
+ *
57
+ * \b Performance: for best performance, it is recommended to use a column-major storage format
58
+ * with the Lower triangular part (the default), or, equivalently, a row-major storage format
59
+ * with the Upper triangular part. Otherwise, you might get a 20% slowdown for the full factorization
60
+ * step, and rank-updates can be up to 3 times slower.
61
+ *
62
+ * This class supports the \link InplaceDecomposition inplace decomposition \endlink mechanism.
63
+ *
64
+ * Note that during the decomposition, only the lower (or upper, as defined by UpLo_) triangular part of A is
65
+ * considered. Therefore, the strict lower part does not have to store correct values.
66
+ *
67
+ * \sa MatrixBase::llt(), SelfAdjointView::llt(), class LDLT
68
+ */
69
+ template <typename MatrixType_, int UpLo_>
70
+ class LLT : public SolverBase<LLT<MatrixType_, UpLo_> > {
71
+ public:
72
+ typedef MatrixType_ MatrixType;
73
+ typedef SolverBase<LLT> Base;
74
+ friend class SolverBase<LLT>;
75
+
76
+ EIGEN_GENERIC_PUBLIC_INTERFACE(LLT)
77
+ enum { MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime };
78
+
79
+ enum { PacketSize = internal::packet_traits<Scalar>::size, AlignmentMask = int(PacketSize) - 1, UpLo = UpLo_ };
80
+
81
+ typedef internal::LLT_Traits<MatrixType, UpLo> Traits;
82
+
83
+ /**
84
+ * \brief Default Constructor.
85
+ *
86
+ * The default constructor is useful in cases in which the user intends to
87
+ * perform decompositions via LLT::compute(const MatrixType&).
88
+ */
89
+ LLT() : m_matrix(), m_isInitialized(false) {}
90
+
91
+ /** \brief Default Constructor with memory preallocation
92
+ *
93
+ * Like the default constructor but with preallocation of the internal data
94
+ * according to the specified problem \a size.
95
+ * \sa LLT()
96
+ */
97
+ explicit LLT(Index size) : m_matrix(size, size), m_isInitialized(false) {}
98
+
99
+ template <typename InputType>
100
+ explicit LLT(const EigenBase<InputType>& matrix) : m_matrix(matrix.rows(), matrix.cols()), m_isInitialized(false) {
101
+ compute(matrix.derived());
102
+ }
124
103
 
125
- /** \returns a view of the lower triangular matrix L */
126
- inline typename Traits::MatrixL matrixL() const
127
- {
128
- eigen_assert(m_isInitialized && "LLT is not initialized.");
129
- return Traits::getL(m_matrix);
130
- }
104
+ /** \brief Constructs a LLT factorization from a given matrix
105
+ *
106
+ * This overloaded constructor is provided for \link InplaceDecomposition inplace decomposition \endlink when
107
+ * \c MatrixType is a Eigen::Ref.
108
+ *
109
+ * \sa LLT(const EigenBase&)
110
+ */
111
+ template <typename InputType>
112
+ explicit LLT(EigenBase<InputType>& matrix) : m_matrix(matrix.derived()), m_isInitialized(false) {
113
+ compute(matrix.derived());
114
+ }
131
115
 
132
- /** \returns the solution x of \f$ A x = b \f$ using the current decomposition of A.
133
- *
134
- * Since this LLT class assumes anyway that the matrix A is invertible, the solution
135
- * theoretically exists and is unique regardless of b.
136
- *
137
- * Example: \include LLT_solve.cpp
138
- * Output: \verbinclude LLT_solve.out
139
- *
140
- * \sa solveInPlace(), MatrixBase::llt(), SelfAdjointView::llt()
141
- */
142
- template<typename Rhs>
143
- inline const Solve<LLT, Rhs>
144
- solve(const MatrixBase<Rhs>& b) const
145
- {
146
- eigen_assert(m_isInitialized && "LLT is not initialized.");
147
- eigen_assert(m_matrix.rows()==b.rows()
148
- && "LLT::solve(): invalid number of rows of the right hand side matrix b");
149
- return Solve<LLT, Rhs>(*this, b.derived());
150
- }
116
+ /** \returns a view of the upper triangular matrix U */
117
+ inline typename Traits::MatrixU matrixU() const {
118
+ eigen_assert(m_isInitialized && "LLT is not initialized.");
119
+ return Traits::getU(m_matrix);
120
+ }
151
121
 
152
- template<typename Derived>
153
- void solveInPlace(const MatrixBase<Derived> &bAndX) const;
122
+ /** \returns a view of the lower triangular matrix L */
123
+ inline typename Traits::MatrixL matrixL() const {
124
+ eigen_assert(m_isInitialized && "LLT is not initialized.");
125
+ return Traits::getL(m_matrix);
126
+ }
154
127
 
155
- template<typename InputType>
156
- LLT& compute(const EigenBase<InputType>& matrix);
128
+ #ifdef EIGEN_PARSED_BY_DOXYGEN
129
+ /** \returns the solution x of \f$ A x = b \f$ using the current decomposition of A.
130
+ *
131
+ * Since this LLT class assumes anyway that the matrix A is invertible, the solution
132
+ * theoretically exists and is unique regardless of b.
133
+ *
134
+ * Example: \include LLT_solve.cpp
135
+ * Output: \verbinclude LLT_solve.out
136
+ *
137
+ * \sa solveInPlace(), MatrixBase::llt(), SelfAdjointView::llt()
138
+ */
139
+ template <typename Rhs>
140
+ inline const Solve<LLT, Rhs> solve(const MatrixBase<Rhs>& b) const;
141
+ #endif
157
142
 
158
- /** \returns an estimate of the reciprocal condition number of the matrix of
159
- * which \c *this is the Cholesky decomposition.
160
- */
161
- RealScalar rcond() const
162
- {
163
- eigen_assert(m_isInitialized && "LLT is not initialized.");
164
- eigen_assert(m_info == Success && "LLT failed because matrix appears to be negative");
165
- return internal::rcond_estimate_helper(m_l1_norm, *this);
166
- }
143
+ template <typename Derived>
144
+ void solveInPlace(const MatrixBase<Derived>& bAndX) const;
167
145
 
168
- /** \returns the LLT decomposition matrix
169
- *
170
- * TODO: document the storage layout
171
- */
172
- inline const MatrixType& matrixLLT() const
173
- {
174
- eigen_assert(m_isInitialized && "LLT is not initialized.");
175
- return m_matrix;
176
- }
146
+ template <typename InputType>
147
+ LLT& compute(const EigenBase<InputType>& matrix);
177
148
 
178
- MatrixType reconstructedMatrix() const;
149
+ /** \returns an estimate of the reciprocal condition number of the matrix of
150
+ * which \c *this is the Cholesky decomposition.
151
+ */
152
+ RealScalar rcond() const {
153
+ eigen_assert(m_isInitialized && "LLT is not initialized.");
154
+ eigen_assert(m_info == Success && "LLT failed because matrix appears to be negative");
155
+ return internal::rcond_estimate_helper(m_l1_norm, *this);
156
+ }
179
157
 
158
+ /** \returns the LLT decomposition matrix
159
+ *
160
+ * TODO: document the storage layout
161
+ */
162
+ inline const MatrixType& matrixLLT() const {
163
+ eigen_assert(m_isInitialized && "LLT is not initialized.");
164
+ return m_matrix;
165
+ }
180
166
 
181
- /** \brief Reports whether previous computation was successful.
182
- *
183
- * \returns \c Success if computation was succesful,
184
- * \c NumericalIssue if the matrix.appears not to be positive definite.
185
- */
186
- ComputationInfo info() const
187
- {
188
- eigen_assert(m_isInitialized && "LLT is not initialized.");
189
- return m_info;
190
- }
167
+ MatrixType reconstructedMatrix() const;
191
168
 
192
- /** \returns the adjoint of \c *this, that is, a const reference to the decomposition itself as the underlying matrix is self-adjoint.
193
- *
194
- * This method is provided for compatibility with other matrix decompositions, thus enabling generic code such as:
195
- * \code x = decomposition.adjoint().solve(b) \endcode
196
- */
197
- const LLT& adjoint() const { return *this; };
169
+ /** \brief Reports whether previous computation was successful.
170
+ *
171
+ * \returns \c Success if computation was successful,
172
+ * \c NumericalIssue if the matrix.appears not to be positive definite.
173
+ */
174
+ ComputationInfo info() const {
175
+ eigen_assert(m_isInitialized && "LLT is not initialized.");
176
+ return m_info;
177
+ }
198
178
 
199
- inline Index rows() const { return m_matrix.rows(); }
200
- inline Index cols() const { return m_matrix.cols(); }
179
+ /** \returns the adjoint of \c *this, that is, a const reference to the decomposition itself as the underlying matrix
180
+ * is self-adjoint.
181
+ *
182
+ * This method is provided for compatibility with other matrix decompositions, thus enabling generic code such as:
183
+ * \code x = decomposition.adjoint().solve(b) \endcode
184
+ */
185
+ const LLT& adjoint() const noexcept { return *this; }
201
186
 
202
- template<typename VectorType>
203
- LLT rankUpdate(const VectorType& vec, const RealScalar& sigma = 1);
187
+ constexpr Index rows() const noexcept { return m_matrix.rows(); }
188
+ constexpr Index cols() const noexcept { return m_matrix.cols(); }
204
189
 
205
- #ifndef EIGEN_PARSED_BY_DOXYGEN
206
- template<typename RhsType, typename DstType>
207
- EIGEN_DEVICE_FUNC
208
- void _solve_impl(const RhsType &rhs, DstType &dst) const;
209
- #endif
190
+ template <typename VectorType>
191
+ LLT& rankUpdate(const VectorType& vec, const RealScalar& sigma = 1);
210
192
 
211
- protected:
193
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
194
+ template <typename RhsType, typename DstType>
195
+ void _solve_impl(const RhsType& rhs, DstType& dst) const;
212
196
 
213
- static void check_template_parameters()
214
- {
215
- EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar);
216
- }
197
+ template <bool Conjugate, typename RhsType, typename DstType>
198
+ void _solve_impl_transposed(const RhsType& rhs, DstType& dst) const;
199
+ #endif
217
200
 
218
- /** \internal
219
- * Used to compute and store L
220
- * The strict upper part is not used and even not initialized.
221
- */
222
- MatrixType m_matrix;
223
- RealScalar m_l1_norm;
224
- bool m_isInitialized;
225
- ComputationInfo m_info;
201
+ protected:
202
+ EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar)
203
+
204
+ /** \internal
205
+ * Used to compute and store L
206
+ * The strict upper part is not used and even not initialized.
207
+ */
208
+ MatrixType m_matrix;
209
+ RealScalar m_l1_norm;
210
+ bool m_isInitialized;
211
+ ComputationInfo m_info;
226
212
  };
227
213
 
228
214
  namespace internal {
229
215
 
230
- template<typename Scalar, int UpLo> struct llt_inplace;
216
+ template <typename Scalar, int UpLo>
217
+ struct llt_inplace;
231
218
 
232
- template<typename MatrixType, typename VectorType>
233
- static Index llt_rank_update_lower(MatrixType& mat, const VectorType& vec, const typename MatrixType::RealScalar& sigma)
234
- {
219
+ template <typename MatrixType, typename VectorType>
220
+ static Index llt_rank_update_lower(MatrixType& mat, const VectorType& vec,
221
+ const typename MatrixType::RealScalar& sigma) {
235
222
  using std::sqrt;
236
223
  typedef typename MatrixType::Scalar Scalar;
237
224
  typedef typename MatrixType::RealScalar RealScalar;
238
225
  typedef typename MatrixType::ColXpr ColXpr;
239
- typedef typename internal::remove_all<ColXpr>::type ColXprCleaned;
226
+ typedef internal::remove_all_t<ColXpr> ColXprCleaned;
240
227
  typedef typename ColXprCleaned::SegmentReturnType ColXprSegment;
241
- typedef Matrix<Scalar,Dynamic,1> TempVectorType;
228
+ typedef Matrix<Scalar, Dynamic, 1> TempVectorType;
242
229
  typedef typename TempVectorType::SegmentReturnType TempVecSegment;
243
230
 
244
231
  Index n = mat.cols();
245
- eigen_assert(mat.rows()==n && vec.size()==n);
232
+ eigen_assert(mat.rows() == n && vec.size() == n);
246
233
 
247
234
  TempVectorType temp;
248
235
 
249
- if(sigma>0)
250
- {
236
+ if (sigma > 0) {
251
237
  // This version is based on Givens rotations.
252
238
  // It is faster than the other one below, but only works for updates,
253
239
  // i.e., for sigma > 0
254
240
  temp = sqrt(sigma) * vec;
255
241
 
256
- for(Index i=0; i<n; ++i)
257
- {
242
+ for (Index i = 0; i < n; ++i) {
258
243
  JacobiRotation<Scalar> g;
259
- g.makeGivens(mat(i,i), -temp(i), &mat(i,i));
244
+ g.makeGivens(mat(i, i), -temp(i), &mat(i, i));
260
245
 
261
- Index rs = n-i-1;
262
- if(rs>0)
263
- {
246
+ Index rs = n - i - 1;
247
+ if (rs > 0) {
264
248
  ColXprSegment x(mat.col(i).tail(rs));
265
249
  TempVecSegment y(temp.tail(rs));
266
250
  apply_rotation_in_the_plane(x, y, g);
267
251
  }
268
252
  }
269
- }
270
- else
271
- {
253
+ } else {
272
254
  temp = vec;
273
255
  RealScalar beta = 1;
274
- for(Index j=0; j<n; ++j)
275
- {
276
- RealScalar Ljj = numext::real(mat.coeff(j,j));
256
+ for (Index j = 0; j < n; ++j) {
257
+ RealScalar Ljj = numext::real(mat.coeff(j, j));
277
258
  RealScalar dj = numext::abs2(Ljj);
278
259
  Scalar wj = temp.coeff(j);
279
- RealScalar swj2 = sigma*numext::abs2(wj);
280
- RealScalar gamma = dj*beta + swj2;
260
+ RealScalar swj2 = sigma * numext::abs2(wj);
261
+ RealScalar gamma = dj * beta + swj2;
281
262
 
282
- RealScalar x = dj + swj2/beta;
283
- if (x<=RealScalar(0))
284
- return j;
263
+ RealScalar x = dj + swj2 / beta;
264
+ if (x <= RealScalar(0)) return j;
285
265
  RealScalar nLjj = sqrt(x);
286
- mat.coeffRef(j,j) = nLjj;
287
- beta += swj2/dj;
266
+ mat.coeffRef(j, j) = nLjj;
267
+ beta += swj2 / dj;
288
268
 
289
269
  // Update the terms of L
290
- Index rs = n-j-1;
291
- if(rs)
292
- {
293
- temp.tail(rs) -= (wj/Ljj) * mat.col(j).tail(rs);
294
- if(gamma != 0)
295
- mat.col(j).tail(rs) = (nLjj/Ljj) * mat.col(j).tail(rs) + (nLjj * sigma*numext::conj(wj)/gamma)*temp.tail(rs);
270
+ Index rs = n - j - 1;
271
+ if (rs) {
272
+ temp.tail(rs) -= (wj / Ljj) * mat.col(j).tail(rs);
273
+ if (!numext::is_exactly_zero(gamma))
274
+ mat.col(j).tail(rs) =
275
+ (nLjj / Ljj) * mat.col(j).tail(rs) + (nLjj * sigma * numext::conj(wj) / gamma) * temp.tail(rs);
296
276
  }
297
277
  }
298
278
  }
299
279
  return -1;
300
280
  }
301
281
 
302
- template<typename Scalar> struct llt_inplace<Scalar, Lower>
303
- {
282
+ template <typename Scalar>
283
+ struct llt_inplace<Scalar, Lower> {
304
284
  typedef typename NumTraits<Scalar>::Real RealScalar;
305
- template<typename MatrixType>
306
- static Index unblocked(MatrixType& mat)
307
- {
285
+ template <typename MatrixType>
286
+ static Index unblocked(MatrixType& mat) {
308
287
  using std::sqrt;
309
288
 
310
- eigen_assert(mat.rows()==mat.cols());
289
+ eigen_assert(mat.rows() == mat.cols());
311
290
  const Index size = mat.rows();
312
- for(Index k = 0; k < size; ++k)
313
- {
314
- Index rs = size-k-1; // remaining size
315
-
316
- Block<MatrixType,Dynamic,1> A21(mat,k+1,k,rs,1);
317
- Block<MatrixType,1,Dynamic> A10(mat,k,0,1,k);
318
- Block<MatrixType,Dynamic,Dynamic> A20(mat,k+1,0,rs,k);
319
-
320
- RealScalar x = numext::real(mat.coeff(k,k));
321
- if (k>0) x -= A10.squaredNorm();
322
- if (x<=RealScalar(0))
323
- return k;
324
- mat.coeffRef(k,k) = x = sqrt(x);
325
- if (k>0 && rs>0) A21.noalias() -= A20 * A10.adjoint();
326
- if (rs>0) A21 /= x;
291
+ for (Index k = 0; k < size; ++k) {
292
+ Index rs = size - k - 1; // remaining size
293
+
294
+ Block<MatrixType, Dynamic, 1> A21(mat, k + 1, k, rs, 1);
295
+ Block<MatrixType, 1, Dynamic> A10(mat, k, 0, 1, k);
296
+ Block<MatrixType, Dynamic, Dynamic> A20(mat, k + 1, 0, rs, k);
297
+
298
+ RealScalar x = numext::real(mat.coeff(k, k));
299
+ if (k > 0) x -= A10.squaredNorm();
300
+ if (x <= RealScalar(0)) return k;
301
+ mat.coeffRef(k, k) = x = sqrt(x);
302
+ if (k > 0 && rs > 0) A21.noalias() -= A20 * A10.adjoint();
303
+ if (rs > 0) A21 /= x;
327
304
  }
328
305
  return -1;
329
306
  }
330
307
 
331
- template<typename MatrixType>
332
- static Index blocked(MatrixType& m)
333
- {
334
- eigen_assert(m.rows()==m.cols());
308
+ template <typename MatrixType>
309
+ static Index blocked(MatrixType& m) {
310
+ eigen_assert(m.rows() == m.cols());
335
311
  Index size = m.rows();
336
- if(size<32)
337
- return unblocked(m);
312
+ if (size < 32) return unblocked(m);
338
313
 
339
- Index blockSize = size/8;
340
- blockSize = (blockSize/16)*16;
341
- blockSize = (std::min)((std::max)(blockSize,Index(8)), Index(128));
314
+ Index blockSize = size / 8;
315
+ blockSize = (blockSize / 16) * 16;
316
+ blockSize = (std::min)((std::max)(blockSize, Index(8)), Index(128));
342
317
 
343
- for (Index k=0; k<size; k+=blockSize)
344
- {
318
+ for (Index k = 0; k < size; k += blockSize) {
345
319
  // partition the matrix:
346
320
  // A00 | - | -
347
321
  // lu = A10 | A11 | -
348
322
  // A20 | A21 | A22
349
- Index bs = (std::min)(blockSize, size-k);
323
+ Index bs = (std::min)(blockSize, size - k);
350
324
  Index rs = size - k - bs;
351
- Block<MatrixType,Dynamic,Dynamic> A11(m,k, k, bs,bs);
352
- Block<MatrixType,Dynamic,Dynamic> A21(m,k+bs,k, rs,bs);
353
- Block<MatrixType,Dynamic,Dynamic> A22(m,k+bs,k+bs,rs,rs);
325
+ Block<MatrixType, Dynamic, Dynamic> A11(m, k, k, bs, bs);
326
+ Block<MatrixType, Dynamic, Dynamic> A21(m, k + bs, k, rs, bs);
327
+ Block<MatrixType, Dynamic, Dynamic> A22(m, k + bs, k + bs, rs, rs);
354
328
 
355
329
  Index ret;
356
- if((ret=unblocked(A11))>=0) return k+ret;
357
- if(rs>0) A11.adjoint().template triangularView<Upper>().template solveInPlace<OnTheRight>(A21);
358
- if(rs>0) A22.template selfadjointView<Lower>().rankUpdate(A21,typename NumTraits<RealScalar>::Literal(-1)); // bottleneck
330
+ if ((ret = unblocked(A11)) >= 0) return k + ret;
331
+ if (rs > 0) A11.adjoint().template triangularView<Upper>().template solveInPlace<OnTheRight>(A21);
332
+ if (rs > 0)
333
+ A22.template selfadjointView<Lower>().rankUpdate(A21,
334
+ typename NumTraits<RealScalar>::Literal(-1)); // bottleneck
359
335
  }
360
336
  return -1;
361
337
  }
362
338
 
363
- template<typename MatrixType, typename VectorType>
364
- static Index rankUpdate(MatrixType& mat, const VectorType& vec, const RealScalar& sigma)
365
- {
339
+ template <typename MatrixType, typename VectorType>
340
+ static Index rankUpdate(MatrixType& mat, const VectorType& vec, const RealScalar& sigma) {
366
341
  return Eigen::internal::llt_rank_update_lower(mat, vec, sigma);
367
342
  }
368
343
  };
369
344
 
370
- template<typename Scalar> struct llt_inplace<Scalar, Upper>
371
- {
345
+ template <typename Scalar>
346
+ struct llt_inplace<Scalar, Upper> {
372
347
  typedef typename NumTraits<Scalar>::Real RealScalar;
373
348
 
374
- template<typename MatrixType>
375
- static EIGEN_STRONG_INLINE Index unblocked(MatrixType& mat)
376
- {
349
+ template <typename MatrixType>
350
+ static EIGEN_STRONG_INLINE Index unblocked(MatrixType& mat) {
377
351
  Transpose<MatrixType> matt(mat);
378
352
  return llt_inplace<Scalar, Lower>::unblocked(matt);
379
353
  }
380
- template<typename MatrixType>
381
- static EIGEN_STRONG_INLINE Index blocked(MatrixType& mat)
382
- {
354
+ template <typename MatrixType>
355
+ static EIGEN_STRONG_INLINE Index blocked(MatrixType& mat) {
383
356
  Transpose<MatrixType> matt(mat);
384
357
  return llt_inplace<Scalar, Lower>::blocked(matt);
385
358
  }
386
- template<typename MatrixType, typename VectorType>
387
- static Index rankUpdate(MatrixType& mat, const VectorType& vec, const RealScalar& sigma)
388
- {
359
+ template <typename MatrixType, typename VectorType>
360
+ static Index rankUpdate(MatrixType& mat, const VectorType& vec, const RealScalar& sigma) {
389
361
  Transpose<MatrixType> matt(mat);
390
362
  return llt_inplace<Scalar, Lower>::rankUpdate(matt, vec.conjugate(), sigma);
391
363
  }
392
364
  };
393
365
 
394
- template<typename MatrixType> struct LLT_Traits<MatrixType,Lower>
395
- {
366
+ template <typename MatrixType>
367
+ struct LLT_Traits<MatrixType, Lower> {
396
368
  typedef const TriangularView<const MatrixType, Lower> MatrixL;
397
369
  typedef const TriangularView<const typename MatrixType::AdjointReturnType, Upper> MatrixU;
398
370
  static inline MatrixL getL(const MatrixType& m) { return MatrixL(m); }
399
371
  static inline MatrixU getU(const MatrixType& m) { return MatrixU(m.adjoint()); }
400
- static bool inplace_decomposition(MatrixType& m)
401
- { return llt_inplace<typename MatrixType::Scalar, Lower>::blocked(m)==-1; }
372
+ static bool inplace_decomposition(MatrixType& m) {
373
+ return llt_inplace<typename MatrixType::Scalar, Lower>::blocked(m) == -1;
374
+ }
402
375
  };
403
376
 
404
- template<typename MatrixType> struct LLT_Traits<MatrixType,Upper>
405
- {
377
+ template <typename MatrixType>
378
+ struct LLT_Traits<MatrixType, Upper> {
406
379
  typedef const TriangularView<const typename MatrixType::AdjointReturnType, Lower> MatrixL;
407
380
  typedef const TriangularView<const MatrixType, Upper> MatrixU;
408
381
  static inline MatrixL getL(const MatrixType& m) { return MatrixL(m.adjoint()); }
409
382
  static inline MatrixU getU(const MatrixType& m) { return MatrixU(m); }
410
- static bool inplace_decomposition(MatrixType& m)
411
- { return llt_inplace<typename MatrixType::Scalar, Upper>::blocked(m)==-1; }
383
+ static bool inplace_decomposition(MatrixType& m) {
384
+ return llt_inplace<typename MatrixType::Scalar, Upper>::blocked(m) == -1;
385
+ }
412
386
  };
413
387
 
414
- } // end namespace internal
388
+ } // end namespace internal
415
389
 
416
390
  /** Computes / recomputes the Cholesky decomposition A = LL^* = U^*U of \a matrix
417
- *
418
- * \returns a reference to *this
419
- *
420
- * Example: \include TutorialLinAlgComputeTwice.cpp
421
- * Output: \verbinclude TutorialLinAlgComputeTwice.out
422
- */
423
- template<typename MatrixType, int _UpLo>
424
- template<typename InputType>
425
- LLT<MatrixType,_UpLo>& LLT<MatrixType,_UpLo>::compute(const EigenBase<InputType>& a)
426
- {
427
- check_template_parameters();
428
-
429
- eigen_assert(a.rows()==a.cols());
391
+ *
392
+ * \returns a reference to *this
393
+ *
394
+ * Example: \include TutorialLinAlgComputeTwice.cpp
395
+ * Output: \verbinclude TutorialLinAlgComputeTwice.out
396
+ */
397
+ template <typename MatrixType, int UpLo_>
398
+ template <typename InputType>
399
+ LLT<MatrixType, UpLo_>& LLT<MatrixType, UpLo_>::compute(const EigenBase<InputType>& a) {
400
+ eigen_assert(a.rows() == a.cols());
430
401
  const Index size = a.rows();
431
402
  m_matrix.resize(size, size);
432
- if (!internal::is_same_dense(m_matrix, a.derived()))
433
- m_matrix = a.derived();
403
+ if (!internal::is_same_dense(m_matrix, a.derived())) m_matrix = a.derived();
434
404
 
435
405
  // Compute matrix L1 norm = max abs column sum.
436
406
  m_l1_norm = RealScalar(0);
437
407
  // TODO move this code to SelfAdjointView
438
408
  for (Index col = 0; col < size; ++col) {
439
409
  RealScalar abs_col_sum;
440
- if (_UpLo == Lower)
441
- abs_col_sum = m_matrix.col(col).tail(size - col).template lpNorm<1>() + m_matrix.row(col).head(col).template lpNorm<1>();
410
+ if (UpLo_ == Lower)
411
+ abs_col_sum =
412
+ m_matrix.col(col).tail(size - col).template lpNorm<1>() + m_matrix.row(col).head(col).template lpNorm<1>();
442
413
  else
443
- abs_col_sum = m_matrix.col(col).head(col).template lpNorm<1>() + m_matrix.row(col).tail(size - col).template lpNorm<1>();
444
- if (abs_col_sum > m_l1_norm)
445
- m_l1_norm = abs_col_sum;
414
+ abs_col_sum =
415
+ m_matrix.col(col).head(col).template lpNorm<1>() + m_matrix.row(col).tail(size - col).template lpNorm<1>();
416
+ if (abs_col_sum > m_l1_norm) m_l1_norm = abs_col_sum;
446
417
  }
447
418
 
448
419
  m_isInitialized = true;
@@ -453,18 +424,17 @@ LLT<MatrixType,_UpLo>& LLT<MatrixType,_UpLo>::compute(const EigenBase<InputType>
453
424
  }
454
425
 
455
426
  /** Performs a rank one update (or dowdate) of the current decomposition.
456
- * If A = LL^* before the rank one update,
457
- * then after it we have LL^* = A + sigma * v v^* where \a v must be a vector
458
- * of same dimension.
459
- */
460
- template<typename _MatrixType, int _UpLo>
461
- template<typename VectorType>
462
- LLT<_MatrixType,_UpLo> LLT<_MatrixType,_UpLo>::rankUpdate(const VectorType& v, const RealScalar& sigma)
463
- {
427
+ * If A = LL^* before the rank one update,
428
+ * then after it we have LL^* = A + sigma * v v^* where \a v must be a vector
429
+ * of same dimension.
430
+ */
431
+ template <typename MatrixType_, int UpLo_>
432
+ template <typename VectorType>
433
+ LLT<MatrixType_, UpLo_>& LLT<MatrixType_, UpLo_>::rankUpdate(const VectorType& v, const RealScalar& sigma) {
464
434
  EIGEN_STATIC_ASSERT_VECTOR_ONLY(VectorType);
465
- eigen_assert(v.size()==m_matrix.cols());
435
+ eigen_assert(v.size() == m_matrix.cols());
466
436
  eigen_assert(m_isInitialized);
467
- if(internal::llt_inplace<typename MatrixType::Scalar, UpLo>::rankUpdate(m_matrix,v,sigma)>=0)
437
+ if (internal::llt_inplace<typename MatrixType::Scalar, UpLo>::rankUpdate(m_matrix, v, sigma) >= 0)
468
438
  m_info = NumericalIssue;
469
439
  else
470
440
  m_info = Success;
@@ -473,34 +443,40 @@ LLT<_MatrixType,_UpLo> LLT<_MatrixType,_UpLo>::rankUpdate(const VectorType& v, c
473
443
  }
474
444
 
475
445
  #ifndef EIGEN_PARSED_BY_DOXYGEN
476
- template<typename _MatrixType,int _UpLo>
477
- template<typename RhsType, typename DstType>
478
- void LLT<_MatrixType,_UpLo>::_solve_impl(const RhsType &rhs, DstType &dst) const
479
- {
446
+ template <typename MatrixType_, int UpLo_>
447
+ template <typename RhsType, typename DstType>
448
+ void LLT<MatrixType_, UpLo_>::_solve_impl(const RhsType& rhs, DstType& dst) const {
449
+ _solve_impl_transposed<true>(rhs, dst);
450
+ }
451
+
452
+ template <typename MatrixType_, int UpLo_>
453
+ template <bool Conjugate, typename RhsType, typename DstType>
454
+ void LLT<MatrixType_, UpLo_>::_solve_impl_transposed(const RhsType& rhs, DstType& dst) const {
480
455
  dst = rhs;
481
- solveInPlace(dst);
456
+
457
+ matrixL().template conjugateIf<!Conjugate>().solveInPlace(dst);
458
+ matrixU().template conjugateIf<!Conjugate>().solveInPlace(dst);
482
459
  }
483
460
  #endif
484
461
 
485
462
  /** \internal use x = llt_object.solve(x);
486
- *
487
- * This is the \em in-place version of solve().
488
- *
489
- * \param bAndX represents both the right-hand side matrix b and result x.
490
- *
491
- * This version avoids a copy when the right hand side matrix b is not needed anymore.
492
- *
493
- * \warning The parameter is only marked 'const' to make the C++ compiler accept a temporary expression here.
494
- * This function will const_cast it, so constness isn't honored here.
495
- *
496
- * \sa LLT::solve(), MatrixBase::llt()
497
- */
498
- template<typename MatrixType, int _UpLo>
499
- template<typename Derived>
500
- void LLT<MatrixType,_UpLo>::solveInPlace(const MatrixBase<Derived> &bAndX) const
501
- {
463
+ *
464
+ * This is the \em in-place version of solve().
465
+ *
466
+ * \param bAndX represents both the right-hand side matrix b and result x.
467
+ *
468
+ * This version avoids a copy when the right hand side matrix b is not needed anymore.
469
+ *
470
+ * \warning The parameter is only marked 'const' to make the C++ compiler accept a temporary expression here.
471
+ * This function will const_cast it, so constness isn't honored here.
472
+ *
473
+ * \sa LLT::solve(), MatrixBase::llt()
474
+ */
475
+ template <typename MatrixType, int UpLo_>
476
+ template <typename Derived>
477
+ void LLT<MatrixType, UpLo_>::solveInPlace(const MatrixBase<Derived>& bAndX) const {
502
478
  eigen_assert(m_isInitialized && "LLT is not initialized.");
503
- eigen_assert(m_matrix.rows()==bAndX.rows());
479
+ eigen_assert(m_matrix.rows() == bAndX.rows());
504
480
  matrixL().solveInPlace(bAndX);
505
481
  matrixU().solveInPlace(bAndX);
506
482
  }
@@ -508,35 +484,31 @@ void LLT<MatrixType,_UpLo>::solveInPlace(const MatrixBase<Derived> &bAndX) const
508
484
  /** \returns the matrix represented by the decomposition,
509
485
  * i.e., it returns the product: L L^*.
510
486
  * This function is provided for debug purpose. */
511
- template<typename MatrixType, int _UpLo>
512
- MatrixType LLT<MatrixType,_UpLo>::reconstructedMatrix() const
513
- {
487
+ template <typename MatrixType, int UpLo_>
488
+ MatrixType LLT<MatrixType, UpLo_>::reconstructedMatrix() const {
514
489
  eigen_assert(m_isInitialized && "LLT is not initialized.");
515
490
  return matrixL() * matrixL().adjoint().toDenseMatrix();
516
491
  }
517
492
 
518
493
  /** \cholesky_module
519
- * \returns the LLT decomposition of \c *this
520
- * \sa SelfAdjointView::llt()
521
- */
522
- template<typename Derived>
523
- inline const LLT<typename MatrixBase<Derived>::PlainObject>
524
- MatrixBase<Derived>::llt() const
525
- {
494
+ * \returns the LLT decomposition of \c *this
495
+ * \sa SelfAdjointView::llt()
496
+ */
497
+ template <typename Derived>
498
+ inline const LLT<typename MatrixBase<Derived>::PlainObject> MatrixBase<Derived>::llt() const {
526
499
  return LLT<PlainObject>(derived());
527
500
  }
528
501
 
529
502
  /** \cholesky_module
530
- * \returns the LLT decomposition of \c *this
531
- * \sa SelfAdjointView::llt()
532
- */
533
- template<typename MatrixType, unsigned int UpLo>
534
- inline const LLT<typename SelfAdjointView<MatrixType, UpLo>::PlainObject, UpLo>
535
- SelfAdjointView<MatrixType, UpLo>::llt() const
536
- {
537
- return LLT<PlainObject,UpLo>(m_matrix);
503
+ * \returns the LLT decomposition of \c *this
504
+ * \sa SelfAdjointView::llt()
505
+ */
506
+ template <typename MatrixType, unsigned int UpLo>
507
+ inline const LLT<typename SelfAdjointView<MatrixType, UpLo>::PlainObject, UpLo> SelfAdjointView<MatrixType, UpLo>::llt()
508
+ const {
509
+ return LLT<PlainObject, UpLo>(m_matrix);
538
510
  }
539
511
 
540
- } // end namespace Eigen
512
+ } // end namespace Eigen
541
513
 
542
- #endif // EIGEN_LLT_H
514
+ #endif // EIGEN_LLT_H