@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
@@ -13,335 +13,314 @@
13
13
  #ifndef EIGEN_LDLT_H
14
14
  #define EIGEN_LDLT_H
15
15
 
16
+ // IWYU pragma: private
17
+ #include "./InternalHeaderCheck.h"
18
+
16
19
  namespace Eigen {
17
20
 
18
21
  namespace internal {
19
- template<typename _MatrixType, int _UpLo> struct traits<LDLT<_MatrixType, _UpLo> >
20
- : traits<_MatrixType>
21
- {
22
- typedef MatrixXpr XprKind;
23
- typedef SolverStorage StorageKind;
24
- typedef int StorageIndex;
25
- enum { Flags = 0 };
26
- };
22
+ template <typename MatrixType_, int UpLo_>
23
+ struct traits<LDLT<MatrixType_, UpLo_> > : traits<MatrixType_> {
24
+ typedef MatrixXpr XprKind;
25
+ typedef SolverStorage StorageKind;
26
+ typedef int StorageIndex;
27
+ enum { Flags = 0 };
28
+ };
27
29
 
28
- template<typename MatrixType, int UpLo> struct LDLT_Traits;
30
+ template <typename MatrixType, int UpLo>
31
+ struct LDLT_Traits;
29
32
 
30
- // PositiveSemiDef means positive semi-definite and non-zero; same for NegativeSemiDef
31
- enum SignMatrix { PositiveSemiDef, NegativeSemiDef, ZeroSign, Indefinite };
32
- }
33
+ // PositiveSemiDef means positive semi-definite and non-zero; same for NegativeSemiDef
34
+ enum SignMatrix { PositiveSemiDef, NegativeSemiDef, ZeroSign, Indefinite };
35
+ } // namespace internal
33
36
 
34
37
  /** \ingroup Cholesky_Module
35
- *
36
- * \class LDLT
37
- *
38
- * \brief Robust Cholesky decomposition of a matrix with pivoting
39
- *
40
- * \tparam _MatrixType the type of the matrix of which to compute the LDL^T Cholesky decomposition
41
- * \tparam _UpLo the triangular part that will be used for the decompositon: Lower (default) or Upper.
42
- * The other triangular part won't be read.
43
- *
44
- * Perform a robust Cholesky decomposition of a positive semidefinite or negative semidefinite
45
- * matrix \f$ A \f$ such that \f$ A = P^TLDL^*P \f$, where P is a permutation matrix, L
46
- * is lower triangular with a unit diagonal and D is a diagonal matrix.
47
- *
48
- * The decomposition uses pivoting to ensure stability, so that D will have
49
- * zeros in the bottom right rank(A) - n submatrix. Avoiding the square root
50
- * on D also stabilizes the computation.
51
- *
52
- * Remember that Cholesky decompositions are not rank-revealing. Also, do not use a Cholesky
53
- * decomposition to determine whether a system of equations has a solution.
54
- *
55
- * This class supports the \link InplaceDecomposition inplace decomposition \endlink mechanism.
56
- *
57
- * \sa MatrixBase::ldlt(), SelfAdjointView::ldlt(), class LLT
58
- */
59
- template<typename _MatrixType, int _UpLo> class LDLT
60
- : public SolverBase<LDLT<_MatrixType, _UpLo> >
61
- {
62
- public:
63
- typedef _MatrixType MatrixType;
64
- typedef SolverBase<LDLT> Base;
65
- friend class SolverBase<LDLT>;
66
-
67
- EIGEN_GENERIC_PUBLIC_INTERFACE(LDLT)
68
- enum {
69
- MaxRowsAtCompileTime = MatrixType::MaxRowsAtCompileTime,
70
- MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime,
71
- UpLo = _UpLo
72
- };
73
- typedef Matrix<Scalar, RowsAtCompileTime, 1, 0, MaxRowsAtCompileTime, 1> TmpMatrixType;
74
-
75
- typedef Transpositions<RowsAtCompileTime, MaxRowsAtCompileTime> TranspositionType;
76
- typedef PermutationMatrix<RowsAtCompileTime, MaxRowsAtCompileTime> PermutationType;
77
-
78
- typedef internal::LDLT_Traits<MatrixType,UpLo> Traits;
79
-
80
- /** \brief Default Constructor.
81
- *
82
- * The default constructor is useful in cases in which the user intends to
83
- * perform decompositions via LDLT::compute(const MatrixType&).
84
- */
85
- LDLT()
86
- : m_matrix(),
87
- m_transpositions(),
88
- m_sign(internal::ZeroSign),
89
- m_isInitialized(false)
90
- {}
91
-
92
- /** \brief Default Constructor with memory preallocation
93
- *
94
- * Like the default constructor but with preallocation of the internal data
95
- * according to the specified problem \a size.
96
- * \sa LDLT()
97
- */
98
- explicit LDLT(Index size)
38
+ *
39
+ * \class LDLT
40
+ *
41
+ * \brief Robust Cholesky decomposition of a matrix with pivoting
42
+ *
43
+ * \tparam MatrixType_ the type of the matrix of which to compute the LDL^T Cholesky decomposition
44
+ * \tparam UpLo_ the triangular part that will be used for the decomposition: Lower (default) or Upper.
45
+ * The other triangular part won't be read.
46
+ *
47
+ * Perform a robust Cholesky decomposition of a positive semidefinite or negative semidefinite
48
+ * matrix \f$ A \f$ such that \f$ A = P^TLDL^*P \f$, where P is a permutation matrix, L
49
+ * is lower triangular with a unit diagonal and D is a diagonal matrix.
50
+ *
51
+ * The decomposition uses pivoting to ensure stability, so that D will have
52
+ * zeros in the bottom right rank(A) - n submatrix. Avoiding the square root
53
+ * on D also stabilizes the computation.
54
+ *
55
+ * Remember that Cholesky decompositions are not rank-revealing. Also, do not use a Cholesky
56
+ * decomposition to determine whether a system of equations has a solution.
57
+ *
58
+ * This class supports the \link InplaceDecomposition inplace decomposition \endlink mechanism.
59
+ *
60
+ * \sa MatrixBase::ldlt(), SelfAdjointView::ldlt(), class LLT
61
+ */
62
+ template <typename MatrixType_, int UpLo_>
63
+ class LDLT : public SolverBase<LDLT<MatrixType_, UpLo_> > {
64
+ public:
65
+ typedef MatrixType_ MatrixType;
66
+ typedef SolverBase<LDLT> Base;
67
+ friend class SolverBase<LDLT>;
68
+
69
+ EIGEN_GENERIC_PUBLIC_INTERFACE(LDLT)
70
+ enum {
71
+ MaxRowsAtCompileTime = MatrixType::MaxRowsAtCompileTime,
72
+ MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime,
73
+ UpLo = UpLo_
74
+ };
75
+ typedef Matrix<Scalar, RowsAtCompileTime, 1, 0, MaxRowsAtCompileTime, 1> TmpMatrixType;
76
+
77
+ typedef Transpositions<RowsAtCompileTime, MaxRowsAtCompileTime> TranspositionType;
78
+ typedef PermutationMatrix<RowsAtCompileTime, MaxRowsAtCompileTime> PermutationType;
79
+
80
+ typedef internal::LDLT_Traits<MatrixType, UpLo> Traits;
81
+
82
+ /** \brief Default Constructor.
83
+ *
84
+ * The default constructor is useful in cases in which the user intends to
85
+ * perform decompositions via LDLT::compute(const MatrixType&).
86
+ */
87
+ LDLT() : m_matrix(), m_transpositions(), m_sign(internal::ZeroSign), m_isInitialized(false) {}
88
+
89
+ /** \brief Default Constructor with memory preallocation
90
+ *
91
+ * Like the default constructor but with preallocation of the internal data
92
+ * according to the specified problem \a size.
93
+ * \sa LDLT()
94
+ */
95
+ explicit LDLT(Index size)
99
96
  : m_matrix(size, size),
100
97
  m_transpositions(size),
101
98
  m_temporary(size),
102
99
  m_sign(internal::ZeroSign),
103
- m_isInitialized(false)
104
- {}
105
-
106
- /** \brief Constructor with decomposition
107
- *
108
- * This calculates the decomposition for the input \a matrix.
109
- *
110
- * \sa LDLT(Index size)
111
- */
112
- template<typename InputType>
113
- explicit LDLT(const EigenBase<InputType>& matrix)
100
+ m_isInitialized(false) {}
101
+
102
+ /** \brief Constructor with decomposition
103
+ *
104
+ * This calculates the decomposition for the input \a matrix.
105
+ *
106
+ * \sa LDLT(Index size)
107
+ */
108
+ template <typename InputType>
109
+ explicit LDLT(const EigenBase<InputType>& matrix)
114
110
  : m_matrix(matrix.rows(), matrix.cols()),
115
111
  m_transpositions(matrix.rows()),
116
112
  m_temporary(matrix.rows()),
117
113
  m_sign(internal::ZeroSign),
118
- m_isInitialized(false)
119
- {
120
- compute(matrix.derived());
121
- }
114
+ m_isInitialized(false) {
115
+ compute(matrix.derived());
116
+ }
122
117
 
123
- /** \brief Constructs a LDLT factorization from a given matrix
124
- *
125
- * This overloaded constructor is provided for \link InplaceDecomposition inplace decomposition \endlink when \c MatrixType is a Eigen::Ref.
126
- *
127
- * \sa LDLT(const EigenBase&)
128
- */
129
- template<typename InputType>
130
- explicit LDLT(EigenBase<InputType>& matrix)
118
+ /** \brief Constructs a LDLT factorization from a given matrix
119
+ *
120
+ * This overloaded constructor is provided for \link InplaceDecomposition inplace decomposition \endlink when \c
121
+ * MatrixType is a Eigen::Ref.
122
+ *
123
+ * \sa LDLT(const EigenBase&)
124
+ */
125
+ template <typename InputType>
126
+ explicit LDLT(EigenBase<InputType>& matrix)
131
127
  : m_matrix(matrix.derived()),
132
128
  m_transpositions(matrix.rows()),
133
129
  m_temporary(matrix.rows()),
134
130
  m_sign(internal::ZeroSign),
135
- m_isInitialized(false)
136
- {
137
- compute(matrix.derived());
138
- }
131
+ m_isInitialized(false) {
132
+ compute(matrix.derived());
133
+ }
139
134
 
140
- /** Clear any existing decomposition
141
- * \sa rankUpdate(w,sigma)
142
- */
143
- void setZero()
144
- {
145
- m_isInitialized = false;
146
- }
135
+ /** Clear any existing decomposition
136
+ * \sa rankUpdate(w,sigma)
137
+ */
138
+ void setZero() { m_isInitialized = false; }
147
139
 
148
- /** \returns a view of the upper triangular matrix U */
149
- inline typename Traits::MatrixU matrixU() const
150
- {
151
- eigen_assert(m_isInitialized && "LDLT is not initialized.");
152
- return Traits::getU(m_matrix);
153
- }
140
+ /** \returns a view of the upper triangular matrix U */
141
+ inline typename Traits::MatrixU matrixU() const {
142
+ eigen_assert(m_isInitialized && "LDLT is not initialized.");
143
+ return Traits::getU(m_matrix);
144
+ }
154
145
 
155
- /** \returns a view of the lower triangular matrix L */
156
- inline typename Traits::MatrixL matrixL() const
157
- {
158
- eigen_assert(m_isInitialized && "LDLT is not initialized.");
159
- return Traits::getL(m_matrix);
160
- }
146
+ /** \returns a view of the lower triangular matrix L */
147
+ inline typename Traits::MatrixL matrixL() const {
148
+ eigen_assert(m_isInitialized && "LDLT is not initialized.");
149
+ return Traits::getL(m_matrix);
150
+ }
161
151
 
162
- /** \returns the permutation matrix P as a transposition sequence.
163
- */
164
- inline const TranspositionType& transpositionsP() const
165
- {
166
- eigen_assert(m_isInitialized && "LDLT is not initialized.");
167
- return m_transpositions;
168
- }
152
+ /** \returns the permutation matrix P as a transposition sequence.
153
+ */
154
+ inline const TranspositionType& transpositionsP() const {
155
+ eigen_assert(m_isInitialized && "LDLT is not initialized.");
156
+ return m_transpositions;
157
+ }
169
158
 
170
- /** \returns the coefficients of the diagonal matrix D */
171
- inline Diagonal<const MatrixType> vectorD() const
172
- {
173
- eigen_assert(m_isInitialized && "LDLT is not initialized.");
174
- return m_matrix.diagonal();
175
- }
159
+ /** \returns the coefficients of the diagonal matrix D */
160
+ inline Diagonal<const MatrixType> vectorD() const {
161
+ eigen_assert(m_isInitialized && "LDLT is not initialized.");
162
+ return m_matrix.diagonal();
163
+ }
176
164
 
177
- /** \returns true if the matrix is positive (semidefinite) */
178
- inline bool isPositive() const
179
- {
180
- eigen_assert(m_isInitialized && "LDLT is not initialized.");
181
- return m_sign == internal::PositiveSemiDef || m_sign == internal::ZeroSign;
182
- }
165
+ /** \returns true if the matrix is positive (semidefinite) */
166
+ inline bool isPositive() const {
167
+ eigen_assert(m_isInitialized && "LDLT is not initialized.");
168
+ return m_sign == internal::PositiveSemiDef || m_sign == internal::ZeroSign;
169
+ }
183
170
 
184
- /** \returns true if the matrix is negative (semidefinite) */
185
- inline bool isNegative(void) const
186
- {
187
- eigen_assert(m_isInitialized && "LDLT is not initialized.");
188
- return m_sign == internal::NegativeSemiDef || m_sign == internal::ZeroSign;
189
- }
171
+ /** \returns true if the matrix is negative (semidefinite) */
172
+ inline bool isNegative(void) const {
173
+ eigen_assert(m_isInitialized && "LDLT is not initialized.");
174
+ return m_sign == internal::NegativeSemiDef || m_sign == internal::ZeroSign;
175
+ }
190
176
 
191
- #ifdef EIGEN_PARSED_BY_DOXYGEN
192
- /** \returns a solution x of \f$ A x = b \f$ using the current decomposition of A.
193
- *
194
- * This function also supports in-place solves using the syntax <tt>x = decompositionObject.solve(x)</tt> .
195
- *
196
- * \note_about_checking_solutions
197
- *
198
- * More precisely, this method solves \f$ A x = b \f$ using the decomposition \f$ A = P^T L D L^* P \f$
199
- * by solving the systems \f$ P^T y_1 = b \f$, \f$ L y_2 = y_1 \f$, \f$ D y_3 = y_2 \f$,
200
- * \f$ L^* y_4 = y_3 \f$ and \f$ P x = y_4 \f$ in succession. If the matrix \f$ A \f$ is singular, then
201
- * \f$ D \f$ will also be singular (all the other matrices are invertible). In that case, the
202
- * least-square solution of \f$ D y_3 = y_2 \f$ is computed. This does not mean that this function
203
- * computes the least-square solution of \f$ A x = b \f$ if \f$ A \f$ is singular.
204
- *
205
- * \sa MatrixBase::ldlt(), SelfAdjointView::ldlt()
206
- */
207
- template<typename Rhs>
208
- inline const Solve<LDLT, Rhs>
209
- solve(const MatrixBase<Rhs>& b) const;
210
- #endif
211
-
212
- template<typename Derived>
213
- bool solveInPlace(MatrixBase<Derived> &bAndX) const;
214
-
215
- template<typename InputType>
216
- LDLT& compute(const EigenBase<InputType>& matrix);
217
-
218
- /** \returns an estimate of the reciprocal condition number of the matrix of
219
- * which \c *this is the LDLT decomposition.
220
- */
221
- RealScalar rcond() const
222
- {
223
- eigen_assert(m_isInitialized && "LDLT is not initialized.");
224
- return internal::rcond_estimate_helper(m_l1_norm, *this);
225
- }
177
+ #ifdef EIGEN_PARSED_BY_DOXYGEN
178
+ /** \returns a solution x of \f$ A x = b \f$ using the current decomposition of A.
179
+ *
180
+ * This function also supports in-place solves using the syntax <tt>x = decompositionObject.solve(x)</tt> .
181
+ *
182
+ * \note_about_checking_solutions
183
+ *
184
+ * More precisely, this method solves \f$ A x = b \f$ using the decomposition \f$ A = P^T L D L^* P \f$
185
+ * by solving the systems \f$ P^T y_1 = b \f$, \f$ L y_2 = y_1 \f$, \f$ D y_3 = y_2 \f$,
186
+ * \f$ L^* y_4 = y_3 \f$ and \f$ P x = y_4 \f$ in succession. If the matrix \f$ A \f$ is singular, then
187
+ * \f$ D \f$ will also be singular (all the other matrices are invertible). In that case, the
188
+ * least-square solution of \f$ D y_3 = y_2 \f$ is computed. This does not mean that this function
189
+ * computes the least-square solution of \f$ A x = b \f$ if \f$ A \f$ is singular.
190
+ *
191
+ * \sa MatrixBase::ldlt(), SelfAdjointView::ldlt()
192
+ */
193
+ template <typename Rhs>
194
+ inline const Solve<LDLT, Rhs> solve(const MatrixBase<Rhs>& b) const;
195
+ #endif
226
196
 
227
- template <typename Derived>
228
- LDLT& rankUpdate(const MatrixBase<Derived>& w, const RealScalar& alpha=1);
229
-
230
- /** \returns the internal LDLT decomposition matrix
231
- *
232
- * TODO: document the storage layout
233
- */
234
- inline const MatrixType& matrixLDLT() const
235
- {
236
- eigen_assert(m_isInitialized && "LDLT is not initialized.");
237
- return m_matrix;
238
- }
197
+ template <typename Derived>
198
+ bool solveInPlace(MatrixBase<Derived>& bAndX) const;
239
199
 
240
- MatrixType reconstructedMatrix() const;
241
-
242
- /** \returns the adjoint of \c *this, that is, a const reference to the decomposition itself as the underlying matrix is self-adjoint.
243
- *
244
- * This method is provided for compatibility with other matrix decompositions, thus enabling generic code such as:
245
- * \code x = decomposition.adjoint().solve(b) \endcode
246
- */
247
- const LDLT& adjoint() const { return *this; };
248
-
249
- EIGEN_DEVICE_FUNC inline EIGEN_CONSTEXPR Index rows() const EIGEN_NOEXCEPT { return m_matrix.rows(); }
250
- EIGEN_DEVICE_FUNC inline EIGEN_CONSTEXPR Index cols() const EIGEN_NOEXCEPT { return m_matrix.cols(); }
251
-
252
- /** \brief Reports whether previous computation was successful.
253
- *
254
- * \returns \c Success if computation was successful,
255
- * \c NumericalIssue if the factorization failed because of a zero pivot.
256
- */
257
- ComputationInfo info() const
258
- {
259
- eigen_assert(m_isInitialized && "LDLT is not initialized.");
260
- return m_info;
261
- }
200
+ template <typename InputType>
201
+ LDLT& compute(const EigenBase<InputType>& matrix);
262
202
 
263
- #ifndef EIGEN_PARSED_BY_DOXYGEN
264
- template<typename RhsType, typename DstType>
265
- void _solve_impl(const RhsType &rhs, DstType &dst) const;
203
+ /** \returns an estimate of the reciprocal condition number of the matrix of
204
+ * which \c *this is the LDLT decomposition.
205
+ */
206
+ RealScalar rcond() const {
207
+ eigen_assert(m_isInitialized && "LDLT is not initialized.");
208
+ return internal::rcond_estimate_helper(m_l1_norm, *this);
209
+ }
266
210
 
267
- template<bool Conjugate, typename RhsType, typename DstType>
268
- void _solve_impl_transposed(const RhsType &rhs, DstType &dst) const;
269
- #endif
211
+ template <typename Derived>
212
+ LDLT& rankUpdate(const MatrixBase<Derived>& w, const RealScalar& alpha = 1);
270
213
 
271
- protected:
214
+ /** \returns the internal LDLT decomposition matrix
215
+ *
216
+ * TODO: document the storage layout
217
+ */
218
+ inline const MatrixType& matrixLDLT() const {
219
+ eigen_assert(m_isInitialized && "LDLT is not initialized.");
220
+ return m_matrix;
221
+ }
272
222
 
273
- static void check_template_parameters()
274
- {
275
- EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar);
276
- }
223
+ MatrixType reconstructedMatrix() const;
224
+
225
+ /** \returns the adjoint of \c *this, that is, a const reference to the decomposition itself as the underlying matrix
226
+ * is self-adjoint.
227
+ *
228
+ * This method is provided for compatibility with other matrix decompositions, thus enabling generic code such as:
229
+ * \code x = decomposition.adjoint().solve(b) \endcode
230
+ */
231
+ const LDLT& adjoint() const { return *this; }
232
+
233
+ EIGEN_DEVICE_FUNC constexpr Index rows() const noexcept { return m_matrix.rows(); }
234
+ EIGEN_DEVICE_FUNC constexpr Index cols() const noexcept { return m_matrix.cols(); }
235
+
236
+ /** \brief Reports whether previous computation was successful.
237
+ *
238
+ * \returns \c Success if computation was successful,
239
+ * \c NumericalIssue if the factorization failed because of a zero pivot.
240
+ */
241
+ ComputationInfo info() const {
242
+ eigen_assert(m_isInitialized && "LDLT is not initialized.");
243
+ return m_info;
244
+ }
245
+
246
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
247
+ template <typename RhsType, typename DstType>
248
+ void _solve_impl(const RhsType& rhs, DstType& dst) const;
249
+
250
+ template <bool Conjugate, typename RhsType, typename DstType>
251
+ void _solve_impl_transposed(const RhsType& rhs, DstType& dst) const;
252
+ #endif
277
253
 
278
- /** \internal
279
- * Used to compute and store the Cholesky decomposition A = L D L^* = U^* D U.
280
- * The strict upper part is used during the decomposition, the strict lower
281
- * part correspond to the coefficients of L (its diagonal is equal to 1 and
282
- * is not stored), and the diagonal entries correspond to D.
283
- */
284
- MatrixType m_matrix;
285
- RealScalar m_l1_norm;
286
- TranspositionType m_transpositions;
287
- TmpMatrixType m_temporary;
288
- internal::SignMatrix m_sign;
289
- bool m_isInitialized;
290
- ComputationInfo m_info;
254
+ protected:
255
+ EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar)
256
+
257
+ /** \internal
258
+ * Used to compute and store the Cholesky decomposition A = L D L^* = U^* D U.
259
+ * The strict upper part is used during the decomposition, the strict lower
260
+ * part correspond to the coefficients of L (its diagonal is equal to 1 and
261
+ * is not stored), and the diagonal entries correspond to D.
262
+ */
263
+ MatrixType m_matrix;
264
+ RealScalar m_l1_norm;
265
+ TranspositionType m_transpositions;
266
+ TmpMatrixType m_temporary;
267
+ internal::SignMatrix m_sign;
268
+ bool m_isInitialized;
269
+ ComputationInfo m_info;
291
270
  };
292
271
 
293
272
  namespace internal {
294
273
 
295
- template<int UpLo> struct ldlt_inplace;
274
+ template <int UpLo>
275
+ struct ldlt_inplace;
296
276
 
297
- template<> struct ldlt_inplace<Lower>
298
- {
299
- template<typename MatrixType, typename TranspositionType, typename Workspace>
300
- static bool unblocked(MatrixType& mat, TranspositionType& transpositions, Workspace& temp, SignMatrix& sign)
301
- {
277
+ template <>
278
+ struct ldlt_inplace<Lower> {
279
+ template <typename MatrixType, typename TranspositionType, typename Workspace>
280
+ static bool unblocked(MatrixType& mat, TranspositionType& transpositions, Workspace& temp, SignMatrix& sign) {
302
281
  using std::abs;
303
282
  typedef typename MatrixType::Scalar Scalar;
304
283
  typedef typename MatrixType::RealScalar RealScalar;
305
284
  typedef typename TranspositionType::StorageIndex IndexType;
306
- eigen_assert(mat.rows()==mat.cols());
285
+ eigen_assert(mat.rows() == mat.cols());
307
286
  const Index size = mat.rows();
308
287
  bool found_zero_pivot = false;
309
288
  bool ret = true;
310
289
 
311
- if (size <= 1)
312
- {
290
+ if (size <= 1) {
313
291
  transpositions.setIdentity();
314
- if(size==0) sign = ZeroSign;
315
- else if (numext::real(mat.coeff(0,0)) > static_cast<RealScalar>(0) ) sign = PositiveSemiDef;
316
- else if (numext::real(mat.coeff(0,0)) < static_cast<RealScalar>(0)) sign = NegativeSemiDef;
317
- else sign = ZeroSign;
292
+ if (size == 0)
293
+ sign = ZeroSign;
294
+ else if (numext::real(mat.coeff(0, 0)) > static_cast<RealScalar>(0))
295
+ sign = PositiveSemiDef;
296
+ else if (numext::real(mat.coeff(0, 0)) < static_cast<RealScalar>(0))
297
+ sign = NegativeSemiDef;
298
+ else
299
+ sign = ZeroSign;
318
300
  return true;
319
301
  }
320
302
 
321
- for (Index k = 0; k < size; ++k)
322
- {
303
+ for (Index k = 0; k < size; ++k) {
323
304
  // Find largest diagonal element
324
305
  Index index_of_biggest_in_corner;
325
- mat.diagonal().tail(size-k).cwiseAbs().maxCoeff(&index_of_biggest_in_corner);
306
+ mat.diagonal().tail(size - k).cwiseAbs().maxCoeff(&index_of_biggest_in_corner);
326
307
  index_of_biggest_in_corner += k;
327
308
 
328
309
  transpositions.coeffRef(k) = IndexType(index_of_biggest_in_corner);
329
- if(k != index_of_biggest_in_corner)
330
- {
310
+ if (k != index_of_biggest_in_corner) {
331
311
  // apply the transposition while taking care to consider only
332
312
  // the lower triangular part
333
- Index s = size-index_of_biggest_in_corner-1; // trailing size after the biggest element
313
+ Index s = size - index_of_biggest_in_corner - 1; // trailing size after the biggest element
334
314
  mat.row(k).head(k).swap(mat.row(index_of_biggest_in_corner).head(k));
335
315
  mat.col(k).tail(s).swap(mat.col(index_of_biggest_in_corner).tail(s));
336
- std::swap(mat.coeffRef(k,k),mat.coeffRef(index_of_biggest_in_corner,index_of_biggest_in_corner));
337
- for(Index i=k+1;i<index_of_biggest_in_corner;++i)
338
- {
339
- Scalar tmp = mat.coeffRef(i,k);
340
- mat.coeffRef(i,k) = numext::conj(mat.coeffRef(index_of_biggest_in_corner,i));
341
- mat.coeffRef(index_of_biggest_in_corner,i) = numext::conj(tmp);
316
+ std::swap(mat.coeffRef(k, k), mat.coeffRef(index_of_biggest_in_corner, index_of_biggest_in_corner));
317
+ for (Index i = k + 1; i < index_of_biggest_in_corner; ++i) {
318
+ Scalar tmp = mat.coeffRef(i, k);
319
+ mat.coeffRef(i, k) = numext::conj(mat.coeffRef(index_of_biggest_in_corner, i));
320
+ mat.coeffRef(index_of_biggest_in_corner, i) = numext::conj(tmp);
342
321
  }
343
- if(NumTraits<Scalar>::IsComplex)
344
- mat.coeffRef(index_of_biggest_in_corner,k) = numext::conj(mat.coeff(index_of_biggest_in_corner,k));
322
+ if (NumTraits<Scalar>::IsComplex)
323
+ mat.coeffRef(index_of_biggest_in_corner, k) = numext::conj(mat.coeff(index_of_biggest_in_corner, k));
345
324
  }
346
325
 
347
326
  // partition the matrix:
@@ -349,53 +328,53 @@ template<> struct ldlt_inplace<Lower>
349
328
  // lu = A10 | A11 | -
350
329
  // A20 | A21 | A22
351
330
  Index rs = size - k - 1;
352
- Block<MatrixType,Dynamic,1> A21(mat,k+1,k,rs,1);
353
- Block<MatrixType,1,Dynamic> A10(mat,k,0,1,k);
354
- Block<MatrixType,Dynamic,Dynamic> A20(mat,k+1,0,rs,k);
331
+ Block<MatrixType, Dynamic, 1> A21(mat, k + 1, k, rs, 1);
332
+ Block<MatrixType, 1, Dynamic> A10(mat, k, 0, 1, k);
333
+ Block<MatrixType, Dynamic, Dynamic> A20(mat, k + 1, 0, rs, k);
355
334
 
356
- if(k>0)
357
- {
335
+ if (k > 0) {
358
336
  temp.head(k) = mat.diagonal().real().head(k).asDiagonal() * A10.adjoint();
359
- mat.coeffRef(k,k) -= (A10 * temp.head(k)).value();
360
- if(rs>0)
361
- A21.noalias() -= A20 * temp.head(k);
337
+ mat.coeffRef(k, k) -= (A10 * temp.head(k)).value();
338
+ if (rs > 0) A21.noalias() -= A20 * temp.head(k);
362
339
  }
363
340
 
364
341
  // In some previous versions of Eigen (e.g., 3.2.1), the scaling was omitted if the pivot
365
342
  // was smaller than the cutoff value. However, since LDLT is not rank-revealing
366
343
  // we should only make sure that we do not introduce INF or NaN values.
367
344
  // Remark that LAPACK also uses 0 as the cutoff value.
368
- RealScalar realAkk = numext::real(mat.coeffRef(k,k));
345
+ RealScalar realAkk = numext::real(mat.coeffRef(k, k));
369
346
  bool pivot_is_valid = (abs(realAkk) > RealScalar(0));
370
347
 
371
- if(k==0 && !pivot_is_valid)
372
- {
348
+ if (k == 0 && !pivot_is_valid) {
373
349
  // The entire diagonal is zero, there is nothing more to do
374
350
  // except filling the transpositions, and checking whether the matrix is zero.
375
351
  sign = ZeroSign;
376
- for(Index j = 0; j<size; ++j)
377
- {
352
+ for (Index j = 0; j < size; ++j) {
378
353
  transpositions.coeffRef(j) = IndexType(j);
379
- ret = ret && (mat.col(j).tail(size-j-1).array()==Scalar(0)).all();
354
+ ret = ret && (mat.col(j).tail(size - j - 1).array() == Scalar(0)).all();
380
355
  }
381
356
  return ret;
382
357
  }
383
358
 
384
- if((rs>0) && pivot_is_valid)
359
+ if ((rs > 0) && pivot_is_valid)
385
360
  A21 /= realAkk;
386
- else if(rs>0)
387
- ret = ret && (A21.array()==Scalar(0)).all();
361
+ else if (rs > 0)
362
+ ret = ret && (A21.array() == Scalar(0)).all();
388
363
 
389
- if(found_zero_pivot && pivot_is_valid) ret = false; // factorization failed
390
- else if(!pivot_is_valid) found_zero_pivot = true;
364
+ if (found_zero_pivot && pivot_is_valid)
365
+ ret = false; // factorization failed
366
+ else if (!pivot_is_valid)
367
+ found_zero_pivot = true;
391
368
 
392
369
  if (sign == PositiveSemiDef) {
393
370
  if (realAkk < static_cast<RealScalar>(0)) sign = Indefinite;
394
371
  } else if (sign == NegativeSemiDef) {
395
372
  if (realAkk > static_cast<RealScalar>(0)) sign = Indefinite;
396
373
  } else if (sign == ZeroSign) {
397
- if (realAkk > static_cast<RealScalar>(0)) sign = PositiveSemiDef;
398
- else if (realAkk < static_cast<RealScalar>(0)) sign = NegativeSemiDef;
374
+ if (realAkk > static_cast<RealScalar>(0))
375
+ sign = PositiveSemiDef;
376
+ else if (realAkk < static_cast<RealScalar>(0))
377
+ sign = NegativeSemiDef;
399
378
  }
400
379
  }
401
380
 
@@ -409,98 +388,91 @@ template<> struct ldlt_inplace<Lower>
409
388
  // original matrix is not of full rank.
410
389
  // Here only rank-1 updates are implemented, to reduce the
411
390
  // requirement for intermediate storage and improve accuracy
412
- template<typename MatrixType, typename WDerived>
413
- static bool updateInPlace(MatrixType& mat, MatrixBase<WDerived>& w, const typename MatrixType::RealScalar& sigma=1)
414
- {
391
+ template <typename MatrixType, typename WDerived>
392
+ static bool updateInPlace(MatrixType& mat, MatrixBase<WDerived>& w,
393
+ const typename MatrixType::RealScalar& sigma = 1) {
415
394
  using numext::isfinite;
416
395
  typedef typename MatrixType::Scalar Scalar;
417
396
  typedef typename MatrixType::RealScalar RealScalar;
418
397
 
419
398
  const Index size = mat.rows();
420
- eigen_assert(mat.cols() == size && w.size()==size);
399
+ eigen_assert(mat.cols() == size && w.size() == size);
421
400
 
422
401
  RealScalar alpha = 1;
423
402
 
424
403
  // Apply the update
425
- for (Index j = 0; j < size; j++)
426
- {
404
+ for (Index j = 0; j < size; j++) {
427
405
  // Check for termination due to an original decomposition of low-rank
428
- if (!(isfinite)(alpha))
429
- break;
406
+ if (!(isfinite)(alpha)) break;
430
407
 
431
408
  // Update the diagonal terms
432
- RealScalar dj = numext::real(mat.coeff(j,j));
409
+ RealScalar dj = numext::real(mat.coeff(j, j));
433
410
  Scalar wj = w.coeff(j);
434
- RealScalar swj2 = sigma*numext::abs2(wj);
435
- RealScalar gamma = dj*alpha + swj2;
436
-
437
- mat.coeffRef(j,j) += swj2/alpha;
438
- alpha += swj2/dj;
411
+ RealScalar swj2 = sigma * numext::abs2(wj);
412
+ RealScalar gamma = dj * alpha + swj2;
439
413
 
414
+ mat.coeffRef(j, j) += swj2 / alpha;
415
+ alpha += swj2 / dj;
440
416
 
441
417
  // Update the terms of L
442
- Index rs = size-j-1;
418
+ Index rs = size - j - 1;
443
419
  w.tail(rs) -= wj * mat.col(j).tail(rs);
444
- if(gamma != 0)
445
- mat.col(j).tail(rs) += (sigma*numext::conj(wj)/gamma)*w.tail(rs);
420
+ if (!numext::is_exactly_zero(gamma)) mat.col(j).tail(rs) += (sigma * numext::conj(wj) / gamma) * w.tail(rs);
446
421
  }
447
422
  return true;
448
423
  }
449
424
 
450
- template<typename MatrixType, typename TranspositionType, typename Workspace, typename WType>
451
- static bool update(MatrixType& mat, const TranspositionType& transpositions, Workspace& tmp, const WType& w, const typename MatrixType::RealScalar& sigma=1)
452
- {
425
+ template <typename MatrixType, typename TranspositionType, typename Workspace, typename WType>
426
+ static bool update(MatrixType& mat, const TranspositionType& transpositions, Workspace& tmp, const WType& w,
427
+ const typename MatrixType::RealScalar& sigma = 1) {
453
428
  // Apply the permutation to the input w
454
429
  tmp = transpositions * w;
455
430
 
456
- return ldlt_inplace<Lower>::updateInPlace(mat,tmp,sigma);
431
+ return ldlt_inplace<Lower>::updateInPlace(mat, tmp, sigma);
457
432
  }
458
433
  };
459
434
 
460
- template<> struct ldlt_inplace<Upper>
461
- {
462
- template<typename MatrixType, typename TranspositionType, typename Workspace>
463
- static EIGEN_STRONG_INLINE bool unblocked(MatrixType& mat, TranspositionType& transpositions, Workspace& temp, SignMatrix& sign)
464
- {
435
+ template <>
436
+ struct ldlt_inplace<Upper> {
437
+ template <typename MatrixType, typename TranspositionType, typename Workspace>
438
+ static EIGEN_STRONG_INLINE bool unblocked(MatrixType& mat, TranspositionType& transpositions, Workspace& temp,
439
+ SignMatrix& sign) {
465
440
  Transpose<MatrixType> matt(mat);
466
441
  return ldlt_inplace<Lower>::unblocked(matt, transpositions, temp, sign);
467
442
  }
468
443
 
469
- template<typename MatrixType, typename TranspositionType, typename Workspace, typename WType>
470
- static EIGEN_STRONG_INLINE bool update(MatrixType& mat, TranspositionType& transpositions, Workspace& tmp, WType& w, const typename MatrixType::RealScalar& sigma=1)
471
- {
444
+ template <typename MatrixType, typename TranspositionType, typename Workspace, typename WType>
445
+ static EIGEN_STRONG_INLINE bool update(MatrixType& mat, TranspositionType& transpositions, Workspace& tmp, WType& w,
446
+ const typename MatrixType::RealScalar& sigma = 1) {
472
447
  Transpose<MatrixType> matt(mat);
473
448
  return ldlt_inplace<Lower>::update(matt, transpositions, tmp, w.conjugate(), sigma);
474
449
  }
475
450
  };
476
451
 
477
- template<typename MatrixType> struct LDLT_Traits<MatrixType,Lower>
478
- {
452
+ template <typename MatrixType>
453
+ struct LDLT_Traits<MatrixType, Lower> {
479
454
  typedef const TriangularView<const MatrixType, UnitLower> MatrixL;
480
455
  typedef const TriangularView<const typename MatrixType::AdjointReturnType, UnitUpper> MatrixU;
481
456
  static inline MatrixL getL(const MatrixType& m) { return MatrixL(m); }
482
457
  static inline MatrixU getU(const MatrixType& m) { return MatrixU(m.adjoint()); }
483
458
  };
484
459
 
485
- template<typename MatrixType> struct LDLT_Traits<MatrixType,Upper>
486
- {
460
+ template <typename MatrixType>
461
+ struct LDLT_Traits<MatrixType, Upper> {
487
462
  typedef const TriangularView<const typename MatrixType::AdjointReturnType, UnitLower> MatrixL;
488
463
  typedef const TriangularView<const MatrixType, UnitUpper> MatrixU;
489
464
  static inline MatrixL getL(const MatrixType& m) { return MatrixL(m.adjoint()); }
490
465
  static inline MatrixU getU(const MatrixType& m) { return MatrixU(m); }
491
466
  };
492
467
 
493
- } // end namespace internal
468
+ } // end namespace internal
494
469
 
495
470
  /** Compute / recompute the LDLT decomposition A = L D L^* = U^* D U of \a matrix
496
- */
497
- template<typename MatrixType, int _UpLo>
498
- template<typename InputType>
499
- LDLT<MatrixType,_UpLo>& LDLT<MatrixType,_UpLo>::compute(const EigenBase<InputType>& a)
500
- {
501
- check_template_parameters();
502
-
503
- eigen_assert(a.rows()==a.cols());
471
+ */
472
+ template <typename MatrixType, int UpLo_>
473
+ template <typename InputType>
474
+ LDLT<MatrixType, UpLo_>& LDLT<MatrixType, UpLo_>::compute(const EigenBase<InputType>& a) {
475
+ eigen_assert(a.rows() == a.cols());
504
476
  const Index size = a.rows();
505
477
 
506
478
  m_matrix = a.derived();
@@ -510,12 +482,13 @@ LDLT<MatrixType,_UpLo>& LDLT<MatrixType,_UpLo>::compute(const EigenBase<InputTyp
510
482
  // TODO move this code to SelfAdjointView
511
483
  for (Index col = 0; col < size; ++col) {
512
484
  RealScalar abs_col_sum;
513
- if (_UpLo == Lower)
514
- abs_col_sum = m_matrix.col(col).tail(size - col).template lpNorm<1>() + m_matrix.row(col).head(col).template lpNorm<1>();
485
+ if (UpLo_ == Lower)
486
+ abs_col_sum =
487
+ m_matrix.col(col).tail(size - col).template lpNorm<1>() + m_matrix.row(col).head(col).template lpNorm<1>();
515
488
  else
516
- abs_col_sum = m_matrix.col(col).head(col).template lpNorm<1>() + m_matrix.row(col).tail(size - col).template lpNorm<1>();
517
- if (abs_col_sum > m_l1_norm)
518
- m_l1_norm = abs_col_sum;
489
+ abs_col_sum =
490
+ m_matrix.col(col).head(col).template lpNorm<1>() + m_matrix.row(col).tail(size - col).template lpNorm<1>();
491
+ if (abs_col_sum > m_l1_norm) m_l1_norm = abs_col_sum;
519
492
  }
520
493
 
521
494
  m_transpositions.resize(size);
@@ -523,7 +496,8 @@ LDLT<MatrixType,_UpLo>& LDLT<MatrixType,_UpLo>::compute(const EigenBase<InputTyp
523
496
  m_temporary.resize(size);
524
497
  m_sign = internal::ZeroSign;
525
498
 
526
- m_info = internal::ldlt_inplace<UpLo>::unblocked(m_matrix, m_transpositions, m_temporary, m_sign) ? Success : NumericalIssue;
499
+ m_info = internal::ldlt_inplace<UpLo>::unblocked(m_matrix, m_transpositions, m_temporary, m_sign) ? Success
500
+ : NumericalIssue;
527
501
 
528
502
  m_isInitialized = true;
529
503
  return *this;
@@ -531,28 +505,24 @@ LDLT<MatrixType,_UpLo>& LDLT<MatrixType,_UpLo>::compute(const EigenBase<InputTyp
531
505
 
532
506
  /** Update the LDLT decomposition: given A = L D L^T, efficiently compute the decomposition of A + sigma w w^T.
533
507
  * \param w a vector to be incorporated into the decomposition.
534
- * \param sigma a scalar, +1 for updates and -1 for "downdates," which correspond to removing previously-added column vectors. Optional; default value is +1.
535
- * \sa setZero()
536
- */
537
- template<typename MatrixType, int _UpLo>
538
- template<typename Derived>
539
- LDLT<MatrixType,_UpLo>& LDLT<MatrixType,_UpLo>::rankUpdate(const MatrixBase<Derived>& w, const typename LDLT<MatrixType,_UpLo>::RealScalar& sigma)
540
- {
508
+ * \param sigma a scalar, +1 for updates and -1 for "downdates," which correspond to removing previously-added column
509
+ * vectors. Optional; default value is +1. \sa setZero()
510
+ */
511
+ template <typename MatrixType, int UpLo_>
512
+ template <typename Derived>
513
+ LDLT<MatrixType, UpLo_>& LDLT<MatrixType, UpLo_>::rankUpdate(
514
+ const MatrixBase<Derived>& w, const typename LDLT<MatrixType, UpLo_>::RealScalar& sigma) {
541
515
  typedef typename TranspositionType::StorageIndex IndexType;
542
516
  const Index size = w.rows();
543
- if (m_isInitialized)
544
- {
545
- eigen_assert(m_matrix.rows()==size);
546
- }
547
- else
548
- {
549
- m_matrix.resize(size,size);
517
+ if (m_isInitialized) {
518
+ eigen_assert(m_matrix.rows() == size);
519
+ } else {
520
+ m_matrix.resize(size, size);
550
521
  m_matrix.setZero();
551
522
  m_transpositions.resize(size);
552
- for (Index i = 0; i < size; i++)
553
- m_transpositions.coeffRef(i) = IndexType(i);
523
+ for (Index i = 0; i < size; i++) m_transpositions.coeffRef(i) = IndexType(i);
554
524
  m_temporary.resize(size);
555
- m_sign = sigma>=0 ? internal::PositiveSemiDef : internal::NegativeSemiDef;
525
+ m_sign = sigma >= 0 ? internal::PositiveSemiDef : internal::NegativeSemiDef;
556
526
  m_isInitialized = true;
557
527
  }
558
528
 
@@ -562,17 +532,15 @@ LDLT<MatrixType,_UpLo>& LDLT<MatrixType,_UpLo>::rankUpdate(const MatrixBase<Deri
562
532
  }
563
533
 
564
534
  #ifndef EIGEN_PARSED_BY_DOXYGEN
565
- template<typename _MatrixType, int _UpLo>
566
- template<typename RhsType, typename DstType>
567
- void LDLT<_MatrixType,_UpLo>::_solve_impl(const RhsType &rhs, DstType &dst) const
568
- {
535
+ template <typename MatrixType_, int UpLo_>
536
+ template <typename RhsType, typename DstType>
537
+ void LDLT<MatrixType_, UpLo_>::_solve_impl(const RhsType& rhs, DstType& dst) const {
569
538
  _solve_impl_transposed<true>(rhs, dst);
570
539
  }
571
540
 
572
- template<typename _MatrixType,int _UpLo>
573
- template<bool Conjugate, typename RhsType, typename DstType>
574
- void LDLT<_MatrixType,_UpLo>::_solve_impl_transposed(const RhsType &rhs, DstType &dst) const
575
- {
541
+ template <typename MatrixType_, int UpLo_>
542
+ template <bool Conjugate, typename RhsType, typename DstType>
543
+ void LDLT<MatrixType_, UpLo_>::_solve_impl_transposed(const RhsType& rhs, DstType& dst) const {
576
544
  // dst = P b
577
545
  dst = m_transpositions * rhs;
578
546
 
@@ -587,15 +555,13 @@ void LDLT<_MatrixType,_UpLo>::_solve_impl_transposed(const RhsType &rhs, DstType
587
555
  const typename Diagonal<const MatrixType>::RealReturnType vecD(vectorD());
588
556
  // In some previous versions, tolerance was set to the max of 1/highest (or rather numeric_limits::min())
589
557
  // and the maximal diagonal entry * epsilon as motivated by LAPACK's xGELSS:
590
- // RealScalar tolerance = numext::maxi(vecD.array().abs().maxCoeff() * NumTraits<RealScalar>::epsilon(),RealScalar(1) / NumTraits<RealScalar>::highest());
591
- // However, LDLT is not rank revealing, and so adjusting the tolerance wrt to the highest
592
- // diagonal element is not well justified and leads to numerical issues in some cases.
593
- // Moreover, Lapack's xSYTRS routines use 0 for the tolerance.
594
- // Using numeric_limits::min() gives us more robustness to denormals.
558
+ // RealScalar tolerance = numext::maxi(vecD.array().abs().maxCoeff() * NumTraits<RealScalar>::epsilon(),RealScalar(1)
559
+ // / NumTraits<RealScalar>::highest()); However, LDLT is not rank revealing, and so adjusting the tolerance wrt to the
560
+ // highest diagonal element is not well justified and leads to numerical issues in some cases. Moreover, Lapack's
561
+ // xSYTRS routines use 0 for the tolerance. Using numeric_limits::min() gives us more robustness to denormals.
595
562
  RealScalar tolerance = (std::numeric_limits<RealScalar>::min)();
596
- for (Index i = 0; i < vecD.size(); ++i)
597
- {
598
- if(abs(vecD(i)) > tolerance)
563
+ for (Index i = 0; i < vecD.size(); ++i) {
564
+ if (abs(vecD(i)) > tolerance)
599
565
  dst.row(i) /= vecD(i);
600
566
  else
601
567
  dst.row(i).setZero();
@@ -612,22 +578,21 @@ void LDLT<_MatrixType,_UpLo>::_solve_impl_transposed(const RhsType &rhs, DstType
612
578
  #endif
613
579
 
614
580
  /** \internal use x = ldlt_object.solve(x);
615
- *
616
- * This is the \em in-place version of solve().
617
- *
618
- * \param bAndX represents both the right-hand side matrix b and result x.
619
- *
620
- * \returns true always! If you need to check for existence of solutions, use another decomposition like LU, QR, or SVD.
621
- *
622
- * This version avoids a copy when the right hand side matrix b is not
623
- * needed anymore.
624
- *
625
- * \sa LDLT::solve(), MatrixBase::ldlt()
626
- */
627
- template<typename MatrixType,int _UpLo>
628
- template<typename Derived>
629
- bool LDLT<MatrixType,_UpLo>::solveInPlace(MatrixBase<Derived> &bAndX) const
630
- {
581
+ *
582
+ * This is the \em in-place version of solve().
583
+ *
584
+ * \param bAndX represents both the right-hand side matrix b and result x.
585
+ *
586
+ * \returns true always! If you need to check for existence of solutions, use another decomposition like LU, QR, or SVD.
587
+ *
588
+ * This version avoids a copy when the right hand side matrix b is not
589
+ * needed anymore.
590
+ *
591
+ * \sa LDLT::solve(), MatrixBase::ldlt()
592
+ */
593
+ template <typename MatrixType, int UpLo_>
594
+ template <typename Derived>
595
+ bool LDLT<MatrixType, UpLo_>::solveInPlace(MatrixBase<Derived>& bAndX) const {
631
596
  eigen_assert(m_isInitialized && "LDLT is not initialized.");
632
597
  eigen_assert(m_matrix.rows() == bAndX.rows());
633
598
 
@@ -639,12 +604,11 @@ bool LDLT<MatrixType,_UpLo>::solveInPlace(MatrixBase<Derived> &bAndX) const
639
604
  /** \returns the matrix represented by the decomposition,
640
605
  * i.e., it returns the product: P^T L D L^* P.
641
606
  * This function is provided for debug purpose. */
642
- template<typename MatrixType, int _UpLo>
643
- MatrixType LDLT<MatrixType,_UpLo>::reconstructedMatrix() const
644
- {
607
+ template <typename MatrixType, int UpLo_>
608
+ MatrixType LDLT<MatrixType, UpLo_>::reconstructedMatrix() const {
645
609
  eigen_assert(m_isInitialized && "LDLT is not initialized.");
646
610
  const Index size = m_matrix.rows();
647
- MatrixType res(size,size);
611
+ MatrixType res(size, size);
648
612
 
649
613
  // P
650
614
  res.setIdentity();
@@ -662,27 +626,24 @@ MatrixType LDLT<MatrixType,_UpLo>::reconstructedMatrix() const
662
626
  }
663
627
 
664
628
  /** \cholesky_module
665
- * \returns the Cholesky decomposition with full pivoting without square root of \c *this
666
- * \sa MatrixBase::ldlt()
667
- */
668
- template<typename MatrixType, unsigned int UpLo>
629
+ * \returns the Cholesky decomposition with full pivoting without square root of \c *this
630
+ * \sa MatrixBase::ldlt()
631
+ */
632
+ template <typename MatrixType, unsigned int UpLo>
669
633
  inline const LDLT<typename SelfAdjointView<MatrixType, UpLo>::PlainObject, UpLo>
670
- SelfAdjointView<MatrixType, UpLo>::ldlt() const
671
- {
672
- return LDLT<PlainObject,UpLo>(m_matrix);
634
+ SelfAdjointView<MatrixType, UpLo>::ldlt() const {
635
+ return LDLT<PlainObject, UpLo>(m_matrix);
673
636
  }
674
637
 
675
638
  /** \cholesky_module
676
- * \returns the Cholesky decomposition with full pivoting without square root of \c *this
677
- * \sa SelfAdjointView::ldlt()
678
- */
679
- template<typename Derived>
680
- inline const LDLT<typename MatrixBase<Derived>::PlainObject>
681
- MatrixBase<Derived>::ldlt() const
682
- {
639
+ * \returns the Cholesky decomposition with full pivoting without square root of \c *this
640
+ * \sa SelfAdjointView::ldlt()
641
+ */
642
+ template <typename Derived>
643
+ inline const LDLT<typename MatrixBase<Derived>::PlainObject> MatrixBase<Derived>::ldlt() const {
683
644
  return LDLT<PlainObject>(derived());
684
645
  }
685
646
 
686
- } // end namespace Eigen
647
+ } // end namespace Eigen
687
648
 
688
- #endif // EIGEN_LDLT_H
649
+ #endif // EIGEN_LDLT_H