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