@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
@@ -16,18 +16,73 @@
16
16
  #ifndef EIGEN_SVDBASE_H
17
17
  #define EIGEN_SVDBASE_H
18
18
 
19
+ // IWYU pragma: private
20
+ #include "./InternalHeaderCheck.h"
21
+
19
22
  namespace Eigen {
20
23
 
21
24
  namespace internal {
22
- template<typename Derived> struct traits<SVDBase<Derived> >
23
- : traits<Derived>
24
- {
25
+
26
+ enum OptionsMasks {
27
+ QRPreconditionerBits = NoQRPreconditioner | HouseholderQRPreconditioner | ColPivHouseholderQRPreconditioner |
28
+ FullPivHouseholderQRPreconditioner,
29
+ ComputationOptionsBits = ComputeThinU | ComputeFullU | ComputeThinV | ComputeFullV
30
+ };
31
+
32
+ constexpr int get_qr_preconditioner(int options) { return options & QRPreconditionerBits; }
33
+
34
+ constexpr int get_computation_options(int options) { return options & ComputationOptionsBits; }
35
+
36
+ constexpr bool should_svd_compute_thin_u(int options) { return (options & ComputeThinU) != 0; }
37
+ constexpr bool should_svd_compute_full_u(int options) { return (options & ComputeFullU) != 0; }
38
+ constexpr bool should_svd_compute_thin_v(int options) { return (options & ComputeThinV) != 0; }
39
+ constexpr bool should_svd_compute_full_v(int options) { return (options & ComputeFullV) != 0; }
40
+
41
+ template <typename MatrixType, int Options>
42
+ void check_svd_options_assertions(unsigned int computationOptions, Index rows, Index cols) {
43
+ EIGEN_STATIC_ASSERT((Options & ComputationOptionsBits) == 0,
44
+ "SVDBase: Cannot request U or V using both static and runtime options, even if they match. "
45
+ "Requesting unitaries at runtime is DEPRECATED: "
46
+ "Prefer requesting unitaries statically, using the Options template parameter.");
47
+ eigen_assert(
48
+ !(should_svd_compute_thin_u(computationOptions) && cols < rows && MatrixType::RowsAtCompileTime != Dynamic) &&
49
+ !(should_svd_compute_thin_v(computationOptions) && rows < cols && MatrixType::ColsAtCompileTime != Dynamic) &&
50
+ "SVDBase: If thin U is requested at runtime, your matrix must have more rows than columns or a dynamic number of "
51
+ "rows."
52
+ "Similarly, if thin V is requested at runtime, you matrix must have more columns than rows or a dynamic number "
53
+ "of columns.");
54
+ (void)computationOptions;
55
+ (void)rows;
56
+ (void)cols;
57
+ }
58
+
59
+ template <typename Derived>
60
+ struct traits<SVDBase<Derived> > : traits<Derived> {
25
61
  typedef MatrixXpr XprKind;
26
62
  typedef SolverStorage StorageKind;
27
63
  typedef int StorageIndex;
28
64
  enum { Flags = 0 };
29
65
  };
30
- }
66
+
67
+ template <typename MatrixType, int Options_>
68
+ struct svd_traits : traits<MatrixType> {
69
+ static constexpr int Options = Options_;
70
+ static constexpr bool ShouldComputeFullU = internal::should_svd_compute_full_u(Options);
71
+ static constexpr bool ShouldComputeThinU = internal::should_svd_compute_thin_u(Options);
72
+ static constexpr bool ShouldComputeFullV = internal::should_svd_compute_full_v(Options);
73
+ static constexpr bool ShouldComputeThinV = internal::should_svd_compute_thin_v(Options);
74
+ enum {
75
+ DiagSizeAtCompileTime =
76
+ internal::min_size_prefer_dynamic(MatrixType::RowsAtCompileTime, MatrixType::ColsAtCompileTime),
77
+ MaxDiagSizeAtCompileTime =
78
+ internal::min_size_prefer_dynamic(MatrixType::MaxRowsAtCompileTime, MatrixType::MaxColsAtCompileTime),
79
+ MatrixUColsAtCompileTime = ShouldComputeThinU ? DiagSizeAtCompileTime : MatrixType::RowsAtCompileTime,
80
+ MatrixVColsAtCompileTime = ShouldComputeThinV ? DiagSizeAtCompileTime : MatrixType::ColsAtCompileTime,
81
+ MatrixUMaxColsAtCompileTime = ShouldComputeThinU ? MaxDiagSizeAtCompileTime : MatrixType::MaxRowsAtCompileTime,
82
+ MatrixVMaxColsAtCompileTime = ShouldComputeThinV ? MaxDiagSizeAtCompileTime : MatrixType::MaxColsAtCompileTime
83
+ };
84
+ };
85
+ } // namespace internal
31
86
 
32
87
  /** \ingroup SVD_Module
33
88
  *
@@ -40,66 +95,82 @@ template<typename Derived> struct traits<SVDBase<Derived> >
40
95
  *
41
96
  * SVD decomposition consists in decomposing any n-by-p matrix \a A as a product
42
97
  * \f[ A = U S V^* \f]
43
- * where \a U is a n-by-n unitary, \a V is a p-by-p unitary, and \a S is a n-by-p real positive matrix which is zero outside of its main diagonal;
44
- * the diagonal entries of S are known as the \em singular \em values of \a A and the columns of \a U and \a V are known as the left
45
- * and right \em singular \em vectors of \a A respectively.
98
+ * where \a U is a n-by-n unitary, \a V is a p-by-p unitary, and \a S is a n-by-p real positive matrix which is zero
99
+ * outside of its main diagonal; the diagonal entries of S are known as the \em singular \em values of \a A and the
100
+ * columns of \a U and \a V are known as the left and right \em singular \em vectors of \a A respectively.
46
101
  *
47
102
  * Singular values are always sorted in decreasing order.
48
103
  *
49
- *
50
- * You can ask for only \em thin \a U or \a V to be computed, meaning the following. In case of a rectangular n-by-p matrix, letting \a m be the
51
- * smaller value among \a n and \a p, there are only \a m singular vectors; the remaining columns of \a U and \a V do not correspond to actual
52
- * singular vectors. Asking for \em thin \a U or \a V means asking for only their \a m first columns to be formed. So \a U is then a n-by-m matrix,
53
- * and \a V is then a p-by-m matrix. Notice that thin \a U and \a V are all you need for (least squares) solving.
54
- *
55
- * The status of the computation can be retrived using the \a info() method. Unless \a info() returns \a Success, the results should be not
56
- * considered well defined.
57
- *
58
- * If the input matrix has inf or nan coefficients, the result of the computation is undefined, and \a info() will return \a InvalidInput, but the computation is guaranteed to
59
- * terminate in finite (and reasonable) time.
60
- * \sa class BDCSVD, class JacobiSVD
104
+ *
105
+ * You can ask for only \em thin \a U or \a V to be computed, meaning the following. In case of a rectangular n-by-p
106
+ * matrix, letting \a m be the smaller value among \a n and \a p, there are only \a m singular vectors; the remaining
107
+ * columns of \a U and \a V do not correspond to actual singular vectors. Asking for \em thin \a U or \a V means asking
108
+ * for only their \a m first columns to be formed. So \a U is then a n-by-m matrix, and \a V is then a p-by-m matrix.
109
+ * Notice that thin \a U and \a V are all you need for (least squares) solving.
110
+ *
111
+ * The status of the computation can be retrieved using the \a info() method. Unless \a info() returns \a Success, the
112
+ * results should be not considered well defined.
113
+ *
114
+ * If the input matrix has inf or nan coefficients, the result of the computation is undefined, and \a info() will
115
+ * return \a InvalidInput, but the computation is guaranteed to terminate in finite (and reasonable) time. \sa class
116
+ * BDCSVD, class JacobiSVD
61
117
  */
62
- template<typename Derived> class SVDBase
63
- : public SolverBase<SVDBase<Derived> >
64
- {
65
- public:
66
-
67
- template<typename Derived_>
118
+ template <typename Derived>
119
+ class SVDBase : public SolverBase<SVDBase<Derived> > {
120
+ public:
121
+ template <typename Derived_>
68
122
  friend struct internal::solve_assertion;
69
123
 
70
124
  typedef typename internal::traits<Derived>::MatrixType MatrixType;
71
125
  typedef typename MatrixType::Scalar Scalar;
72
126
  typedef typename NumTraits<typename MatrixType::Scalar>::Real RealScalar;
73
127
  typedef typename Eigen::internal::traits<SVDBase>::StorageIndex StorageIndex;
74
- typedef Eigen::Index Index; ///< \deprecated since Eigen 3.3
128
+
129
+ static constexpr bool ShouldComputeFullU = internal::traits<Derived>::ShouldComputeFullU;
130
+ static constexpr bool ShouldComputeThinU = internal::traits<Derived>::ShouldComputeThinU;
131
+ static constexpr bool ShouldComputeFullV = internal::traits<Derived>::ShouldComputeFullV;
132
+ static constexpr bool ShouldComputeThinV = internal::traits<Derived>::ShouldComputeThinV;
133
+
75
134
  enum {
76
135
  RowsAtCompileTime = MatrixType::RowsAtCompileTime,
77
136
  ColsAtCompileTime = MatrixType::ColsAtCompileTime,
78
- DiagSizeAtCompileTime = EIGEN_SIZE_MIN_PREFER_DYNAMIC(RowsAtCompileTime,ColsAtCompileTime),
137
+ DiagSizeAtCompileTime = internal::min_size_prefer_dynamic(RowsAtCompileTime, ColsAtCompileTime),
79
138
  MaxRowsAtCompileTime = MatrixType::MaxRowsAtCompileTime,
80
139
  MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime,
81
- MaxDiagSizeAtCompileTime = EIGEN_SIZE_MIN_PREFER_FIXED(MaxRowsAtCompileTime,MaxColsAtCompileTime),
82
- MatrixOptions = MatrixType::Options
140
+ MaxDiagSizeAtCompileTime = internal::min_size_prefer_fixed(MaxRowsAtCompileTime, MaxColsAtCompileTime),
141
+ MatrixOptions = internal::traits<MatrixType>::Options,
142
+ MatrixUColsAtCompileTime = internal::traits<Derived>::MatrixUColsAtCompileTime,
143
+ MatrixVColsAtCompileTime = internal::traits<Derived>::MatrixVColsAtCompileTime,
144
+ MatrixUMaxColsAtCompileTime = internal::traits<Derived>::MatrixUMaxColsAtCompileTime,
145
+ MatrixVMaxColsAtCompileTime = internal::traits<Derived>::MatrixVMaxColsAtCompileTime
83
146
  };
84
147
 
85
- typedef Matrix<Scalar, RowsAtCompileTime, RowsAtCompileTime, MatrixOptions, MaxRowsAtCompileTime, MaxRowsAtCompileTime> MatrixUType;
86
- typedef Matrix<Scalar, ColsAtCompileTime, ColsAtCompileTime, MatrixOptions, MaxColsAtCompileTime, MaxColsAtCompileTime> MatrixVType;
148
+ EIGEN_STATIC_ASSERT(!(ShouldComputeFullU && ShouldComputeThinU), "SVDBase: Cannot request both full and thin U")
149
+ EIGEN_STATIC_ASSERT(!(ShouldComputeFullV && ShouldComputeThinV), "SVDBase: Cannot request both full and thin V")
150
+
151
+ typedef
152
+ typename internal::make_proper_matrix_type<Scalar, RowsAtCompileTime, MatrixUColsAtCompileTime, MatrixOptions,
153
+ MaxRowsAtCompileTime, MatrixUMaxColsAtCompileTime>::type MatrixUType;
154
+ typedef
155
+ typename internal::make_proper_matrix_type<Scalar, ColsAtCompileTime, MatrixVColsAtCompileTime, MatrixOptions,
156
+ MaxColsAtCompileTime, MatrixVMaxColsAtCompileTime>::type MatrixVType;
157
+
87
158
  typedef typename internal::plain_diag_type<MatrixType, RealScalar>::type SingularValuesType;
88
-
159
+
89
160
  Derived& derived() { return *static_cast<Derived*>(this); }
90
161
  const Derived& derived() const { return *static_cast<const Derived*>(this); }
91
162
 
92
163
  /** \returns the \a U matrix.
93
164
  *
94
165
  * For the SVD decomposition of a n-by-p matrix, letting \a m be the minimum of \a n and \a p,
95
- * the U matrix is n-by-n if you asked for \link Eigen::ComputeFullU ComputeFullU \endlink, and is n-by-m if you asked for \link Eigen::ComputeThinU ComputeThinU \endlink.
166
+ * the U matrix is n-by-n if you asked for \link Eigen::ComputeFullU ComputeFullU \endlink, and is n-by-m if you asked
167
+ * for \link Eigen::ComputeThinU ComputeThinU \endlink.
96
168
  *
97
169
  * The \a m first columns of \a U are the left singular vectors of the matrix being decomposed.
98
170
  *
99
171
  * This method asserts that you asked for \a U to be computed.
100
172
  */
101
- const MatrixUType& matrixU() const
102
- {
173
+ const MatrixUType& matrixU() const {
103
174
  _check_compute_assertions();
104
175
  eigen_assert(computeU() && "This SVD decomposition didn't compute U. Did you ask for it?");
105
176
  return m_matrixU;
@@ -108,14 +179,14 @@ public:
108
179
  /** \returns the \a V matrix.
109
180
  *
110
181
  * For the SVD decomposition of a n-by-p matrix, letting \a m be the minimum of \a n and \a p,
111
- * the V matrix is p-by-p if you asked for \link Eigen::ComputeFullV ComputeFullV \endlink, and is p-by-m if you asked for \link Eigen::ComputeThinV ComputeThinV \endlink.
182
+ * the V matrix is p-by-p if you asked for \link Eigen::ComputeFullV ComputeFullV \endlink, and is p-by-m if you asked
183
+ * for \link Eigen::ComputeThinV ComputeThinV \endlink.
112
184
  *
113
185
  * The \a m first columns of \a V are the right singular vectors of the matrix being decomposed.
114
186
  *
115
187
  * This method asserts that you asked for \a V to be computed.
116
188
  */
117
- const MatrixVType& matrixV() const
118
- {
189
+ const MatrixVType& matrixV() const {
119
190
  _check_compute_assertions();
120
191
  eigen_assert(computeV() && "This SVD decomposition didn't compute V. Did you ask for it?");
121
192
  return m_matrixV;
@@ -126,82 +197,76 @@ public:
126
197
  * For the SVD decomposition of a n-by-p matrix, letting \a m be the minimum of \a n and \a p, the
127
198
  * returned vector has size \a m. Singular values are always sorted in decreasing order.
128
199
  */
129
- const SingularValuesType& singularValues() const
130
- {
200
+ const SingularValuesType& singularValues() const {
131
201
  _check_compute_assertions();
132
202
  return m_singularValues;
133
203
  }
134
204
 
135
205
  /** \returns the number of singular values that are not exactly 0 */
136
- Index nonzeroSingularValues() const
137
- {
206
+ Index nonzeroSingularValues() const {
138
207
  _check_compute_assertions();
139
208
  return m_nonzeroSingularValues;
140
209
  }
141
-
210
+
142
211
  /** \returns the rank of the matrix of which \c *this is the SVD.
143
- *
144
- * \note This method has to determine which singular values should be considered nonzero.
145
- * For that, it uses the threshold value that you can control by calling
146
- * setThreshold(const RealScalar&).
147
- */
148
- inline Index rank() const
149
- {
212
+ *
213
+ * \note This method has to determine which singular values should be considered nonzero.
214
+ * For that, it uses the threshold value that you can control by calling
215
+ * setThreshold(const RealScalar&).
216
+ */
217
+ inline Index rank() const {
150
218
  using std::abs;
151
219
  _check_compute_assertions();
152
- if(m_singularValues.size()==0) return 0;
153
- RealScalar premultiplied_threshold = numext::maxi<RealScalar>(m_singularValues.coeff(0) * threshold(), (std::numeric_limits<RealScalar>::min)());
154
- Index i = m_nonzeroSingularValues-1;
155
- while(i>=0 && m_singularValues.coeff(i) < premultiplied_threshold) --i;
156
- return i+1;
220
+ if (m_singularValues.size() == 0) return 0;
221
+ RealScalar premultiplied_threshold =
222
+ numext::maxi<RealScalar>(m_singularValues.coeff(0) * threshold(), (std::numeric_limits<RealScalar>::min)());
223
+ Index i = m_nonzeroSingularValues - 1;
224
+ while (i >= 0 && m_singularValues.coeff(i) < premultiplied_threshold) --i;
225
+ return i + 1;
157
226
  }
158
-
227
+
159
228
  /** Allows to prescribe a threshold to be used by certain methods, such as rank() and solve(),
160
- * which need to determine when singular values are to be considered nonzero.
161
- * This is not used for the SVD decomposition itself.
162
- *
163
- * When it needs to get the threshold value, Eigen calls threshold().
164
- * The default is \c NumTraits<Scalar>::epsilon()
165
- *
166
- * \param threshold The new value to use as the threshold.
167
- *
168
- * A singular value will be considered nonzero if its value is strictly greater than
169
- * \f$ \vert singular value \vert \leqslant threshold \times \vert max singular value \vert \f$.
170
- *
171
- * If you want to come back to the default behavior, call setThreshold(Default_t)
172
- */
173
- Derived& setThreshold(const RealScalar& threshold)
174
- {
229
+ * which need to determine when singular values are to be considered nonzero.
230
+ * This is not used for the SVD decomposition itself.
231
+ *
232
+ * When it needs to get the threshold value, Eigen calls threshold().
233
+ * The default is \c NumTraits<Scalar>::epsilon()
234
+ *
235
+ * \param threshold The new value to use as the threshold.
236
+ *
237
+ * A singular value will be considered nonzero if its value is strictly greater than
238
+ * \f$ \vert singular value \vert \leqslant threshold \times \vert max singular value \vert \f$.
239
+ *
240
+ * If you want to come back to the default behavior, call setThreshold(Default_t)
241
+ */
242
+ Derived& setThreshold(const RealScalar& threshold) {
175
243
  m_usePrescribedThreshold = true;
176
244
  m_prescribedThreshold = threshold;
177
245
  return derived();
178
246
  }
179
247
 
180
248
  /** Allows to come back to the default behavior, letting Eigen use its default formula for
181
- * determining the threshold.
182
- *
183
- * You should pass the special object Eigen::Default as parameter here.
184
- * \code svd.setThreshold(Eigen::Default); \endcode
185
- *
186
- * See the documentation of setThreshold(const RealScalar&).
187
- */
188
- Derived& setThreshold(Default_t)
189
- {
249
+ * determining the threshold.
250
+ *
251
+ * You should pass the special object Eigen::Default as parameter here.
252
+ * \code svd.setThreshold(Eigen::Default); \endcode
253
+ *
254
+ * See the documentation of setThreshold(const RealScalar&).
255
+ */
256
+ Derived& setThreshold(Default_t) {
190
257
  m_usePrescribedThreshold = false;
191
258
  return derived();
192
259
  }
193
260
 
194
261
  /** Returns the threshold that will be used by certain methods such as rank().
195
- *
196
- * See the documentation of setThreshold(const RealScalar&).
197
- */
198
- RealScalar threshold() const
199
- {
262
+ *
263
+ * See the documentation of setThreshold(const RealScalar&).
264
+ */
265
+ RealScalar threshold() const {
200
266
  eigen_assert(m_isInitialized || m_usePrescribedThreshold);
201
267
  // this temporary is needed to workaround a MSVC issue
202
- Index diagSize = (std::max<Index>)(1,m_diagSize);
203
- return m_usePrescribedThreshold ? m_prescribedThreshold
204
- : RealScalar(diagSize)*NumTraits<Scalar>::epsilon();
268
+ Index diagSize = (std::max<Index>)(1, m_diagSize);
269
+ return m_usePrescribedThreshold ? m_prescribedThreshold : RealScalar(diagSize) * NumTraits<Scalar>::epsilon();
205
270
  }
206
271
 
207
272
  /** \returns true if \a U (full or thin) is asked for in this SVD decomposition */
@@ -209,65 +274,59 @@ public:
209
274
  /** \returns true if \a V (full or thin) is asked for in this SVD decomposition */
210
275
  inline bool computeV() const { return m_computeFullV || m_computeThinV; }
211
276
 
212
- inline Index rows() const { return m_rows; }
213
- inline Index cols() const { return m_cols; }
214
-
215
- #ifdef EIGEN_PARSED_BY_DOXYGEN
216
- /** \returns a (least squares) solution of \f$ A x = b \f$ using the current SVD decomposition of A.
217
- *
218
- * \param b the right-hand-side of the equation to solve.
219
- *
220
- * \note Solving requires both U and V to be computed. Thin U and V are enough, there is no need for full U or V.
221
- *
222
- * \note SVD solving is implicitly least-squares. Thus, this method serves both purposes of exact solving and least-squares solving.
223
- * In other words, the returned solution is guaranteed to minimize the Euclidean norm \f$ \Vert A x - b \Vert \f$.
224
- */
225
- template<typename Rhs>
226
- inline const Solve<Derived, Rhs>
227
- solve(const MatrixBase<Rhs>& b) const;
228
- #endif
277
+ inline Index rows() const { return m_rows.value(); }
278
+ inline Index cols() const { return m_cols.value(); }
279
+ inline Index diagSize() const { return m_diagSize.value(); }
229
280
 
281
+ #ifdef EIGEN_PARSED_BY_DOXYGEN
282
+ /** \returns a (least squares) solution of \f$ A x = b \f$ using the current SVD decomposition of A.
283
+ *
284
+ * \param b the right-hand-side of the equation to solve.
285
+ *
286
+ * \note Solving requires both U and V to be computed. Thin U and V are enough, there is no need for full U or V.
287
+ *
288
+ * \note SVD solving is implicitly least-squares. Thus, this method serves both purposes of exact solving and
289
+ * least-squares solving. In other words, the returned solution is guaranteed to minimize the Euclidean norm \f$ \Vert
290
+ * A x - b \Vert \f$.
291
+ */
292
+ template <typename Rhs>
293
+ inline const Solve<Derived, Rhs> solve(const MatrixBase<Rhs>& b) const;
294
+ #endif
230
295
 
231
296
  /** \brief Reports whether previous computation was successful.
232
297
  *
233
298
  * \returns \c Success if computation was successful.
234
299
  */
235
- EIGEN_DEVICE_FUNC
236
- ComputationInfo info() const
237
- {
300
+ EIGEN_DEVICE_FUNC ComputationInfo info() const {
238
301
  eigen_assert(m_isInitialized && "SVD is not initialized.");
239
302
  return m_info;
240
303
  }
241
304
 
242
- #ifndef EIGEN_PARSED_BY_DOXYGEN
243
- template<typename RhsType, typename DstType>
244
- void _solve_impl(const RhsType &rhs, DstType &dst) const;
245
-
246
- template<bool Conjugate, typename RhsType, typename DstType>
247
- void _solve_impl_transposed(const RhsType &rhs, DstType &dst) const;
248
- #endif
305
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
306
+ template <typename RhsType, typename DstType>
307
+ void _solve_impl(const RhsType& rhs, DstType& dst) const;
249
308
 
250
- protected:
309
+ template <bool Conjugate, typename RhsType, typename DstType>
310
+ void _solve_impl_transposed(const RhsType& rhs, DstType& dst) const;
311
+ #endif
251
312
 
252
- static void check_template_parameters()
253
- {
254
- EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar);
255
- }
313
+ protected:
314
+ EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar)
256
315
 
257
- void _check_compute_assertions() const {
258
- eigen_assert(m_isInitialized && "SVD is not initialized.");
259
- }
316
+ void _check_compute_assertions() const { eigen_assert(m_isInitialized && "SVD is not initialized."); }
260
317
 
261
- template<bool Transpose_, typename Rhs>
318
+ template <bool Transpose_, typename Rhs>
262
319
  void _check_solve_assertion(const Rhs& b) const {
263
- EIGEN_ONLY_USED_FOR_DEBUG(b);
264
- _check_compute_assertions();
265
- eigen_assert(computeU() && computeV() && "SVDBase::solve(): Both unitaries U and V are required to be computed (thin unitaries suffice).");
266
- eigen_assert((Transpose_?cols():rows())==b.rows() && "SVDBase::solve(): invalid number of rows of the right hand side matrix b");
320
+ EIGEN_ONLY_USED_FOR_DEBUG(b);
321
+ _check_compute_assertions();
322
+ eigen_assert(computeU() && computeV() &&
323
+ "SVDBase::solve(): Both unitaries U and V are required to be computed (thin unitaries suffice).");
324
+ eigen_assert((Transpose_ ? cols() : rows()) == b.rows() &&
325
+ "SVDBase::solve(): invalid number of rows of the right hand side matrix b");
267
326
  }
268
327
 
269
328
  // return true if already allocated
270
- bool allocate(Index rows, Index cols, unsigned int computationOptions) ;
329
+ bool allocate(Index rows, Index cols, unsigned int computationOptions);
271
330
 
272
331
  MatrixUType m_matrixU;
273
332
  MatrixVType m_matrixV;
@@ -277,7 +336,10 @@ protected:
277
336
  bool m_computeFullU, m_computeThinU;
278
337
  bool m_computeFullV, m_computeThinV;
279
338
  unsigned int m_computationOptions;
280
- Index m_nonzeroSingularValues, m_rows, m_cols, m_diagSize;
339
+ Index m_nonzeroSingularValues;
340
+ internal::variable_if_dynamic<Index, RowsAtCompileTime> m_rows;
341
+ internal::variable_if_dynamic<Index, ColsAtCompileTime> m_cols;
342
+ internal::variable_if_dynamic<Index, DiagSizeAtCompileTime> m_diagSize;
281
343
  RealScalar m_prescribedThreshold;
282
344
 
283
345
  /** \brief Default Constructor.
@@ -285,92 +347,90 @@ protected:
285
347
  * Default constructor of SVDBase
286
348
  */
287
349
  SVDBase()
288
- : m_info(Success),
289
- m_isInitialized(false),
290
- m_isAllocated(false),
291
- m_usePrescribedThreshold(false),
292
- m_computeFullU(false),
293
- m_computeThinU(false),
294
- m_computeFullV(false),
295
- m_computeThinV(false),
296
- m_computationOptions(0),
297
- m_rows(-1), m_cols(-1), m_diagSize(0)
298
- {
299
- check_template_parameters();
300
- }
301
-
302
-
350
+ : m_matrixU(MatrixUType()),
351
+ m_matrixV(MatrixVType()),
352
+ m_singularValues(SingularValuesType()),
353
+ m_info(Success),
354
+ m_isInitialized(false),
355
+ m_isAllocated(false),
356
+ m_usePrescribedThreshold(false),
357
+ m_computeFullU(ShouldComputeFullU),
358
+ m_computeThinU(ShouldComputeThinU),
359
+ m_computeFullV(ShouldComputeFullV),
360
+ m_computeThinV(ShouldComputeThinV),
361
+ m_computationOptions(internal::traits<Derived>::Options),
362
+ m_nonzeroSingularValues(0),
363
+ m_rows(RowsAtCompileTime),
364
+ m_cols(ColsAtCompileTime),
365
+ m_diagSize(DiagSizeAtCompileTime),
366
+ m_prescribedThreshold(0) {}
303
367
  };
304
368
 
305
369
  #ifndef EIGEN_PARSED_BY_DOXYGEN
306
- template<typename Derived>
307
- template<typename RhsType, typename DstType>
308
- void SVDBase<Derived>::_solve_impl(const RhsType &rhs, DstType &dst) const
309
- {
370
+ template <typename Derived>
371
+ template <typename RhsType, typename DstType>
372
+ void SVDBase<Derived>::_solve_impl(const RhsType& rhs, DstType& dst) const {
310
373
  // A = U S V^*
311
374
  // So A^{-1} = V S^{-1} U^*
312
375
 
313
- Matrix<typename RhsType::Scalar, Dynamic, RhsType::ColsAtCompileTime, 0, MatrixType::MaxRowsAtCompileTime, RhsType::MaxColsAtCompileTime> tmp;
376
+ Matrix<typename RhsType::Scalar, Dynamic, RhsType::ColsAtCompileTime, 0, MatrixType::MaxRowsAtCompileTime,
377
+ RhsType::MaxColsAtCompileTime>
378
+ tmp;
314
379
  Index l_rank = rank();
315
- tmp.noalias() = m_matrixU.leftCols(l_rank).adjoint() * rhs;
380
+ tmp.noalias() = m_matrixU.leftCols(l_rank).adjoint() * rhs;
316
381
  tmp = m_singularValues.head(l_rank).asDiagonal().inverse() * tmp;
317
- dst = m_matrixV.leftCols(l_rank) * tmp;
382
+ dst.noalias() = m_matrixV.leftCols(l_rank) * tmp;
318
383
  }
319
384
 
320
- template<typename Derived>
321
- template<bool Conjugate, typename RhsType, typename DstType>
322
- void SVDBase<Derived>::_solve_impl_transposed(const RhsType &rhs, DstType &dst) const
323
- {
385
+ template <typename Derived>
386
+ template <bool Conjugate, typename RhsType, typename DstType>
387
+ void SVDBase<Derived>::_solve_impl_transposed(const RhsType& rhs, DstType& dst) const {
324
388
  // A = U S V^*
325
389
  // So A^{-*} = U S^{-1} V^*
326
390
  // And A^{-T} = U_conj S^{-1} V^T
327
- Matrix<typename RhsType::Scalar, Dynamic, RhsType::ColsAtCompileTime, 0, MatrixType::MaxRowsAtCompileTime, RhsType::MaxColsAtCompileTime> tmp;
391
+ Matrix<typename RhsType::Scalar, Dynamic, RhsType::ColsAtCompileTime, 0, MatrixType::MaxRowsAtCompileTime,
392
+ RhsType::MaxColsAtCompileTime>
393
+ tmp;
328
394
  Index l_rank = rank();
329
395
 
330
- tmp.noalias() = m_matrixV.leftCols(l_rank).transpose().template conjugateIf<Conjugate>() * rhs;
396
+ tmp.noalias() = m_matrixV.leftCols(l_rank).transpose().template conjugateIf<Conjugate>() * rhs;
331
397
  tmp = m_singularValues.head(l_rank).asDiagonal().inverse() * tmp;
332
398
  dst = m_matrixU.template conjugateIf<!Conjugate>().leftCols(l_rank) * tmp;
333
399
  }
334
400
  #endif
335
401
 
336
- template<typename MatrixType>
337
- bool SVDBase<MatrixType>::allocate(Index rows, Index cols, unsigned int computationOptions)
338
- {
402
+ template <typename Derived>
403
+ bool SVDBase<Derived>::allocate(Index rows, Index cols, unsigned int computationOptions) {
339
404
  eigen_assert(rows >= 0 && cols >= 0);
340
405
 
341
- if (m_isAllocated &&
342
- rows == m_rows &&
343
- cols == m_cols &&
344
- computationOptions == m_computationOptions)
345
- {
406
+ if (m_isAllocated && rows == m_rows.value() && cols == m_cols.value() && computationOptions == m_computationOptions) {
346
407
  return true;
347
408
  }
348
409
 
349
- m_rows = rows;
350
- m_cols = cols;
410
+ m_rows.setValue(rows);
411
+ m_cols.setValue(cols);
351
412
  m_info = Success;
352
413
  m_isInitialized = false;
353
414
  m_isAllocated = true;
354
415
  m_computationOptions = computationOptions;
355
- m_computeFullU = (computationOptions & ComputeFullU) != 0;
356
- m_computeThinU = (computationOptions & ComputeThinU) != 0;
357
- m_computeFullV = (computationOptions & ComputeFullV) != 0;
358
- m_computeThinV = (computationOptions & ComputeThinV) != 0;
416
+ m_computeFullU = ShouldComputeFullU || internal::should_svd_compute_full_u(computationOptions);
417
+ m_computeThinU = ShouldComputeThinU || internal::should_svd_compute_thin_u(computationOptions);
418
+ m_computeFullV = ShouldComputeFullV || internal::should_svd_compute_full_v(computationOptions);
419
+ m_computeThinV = ShouldComputeThinV || internal::should_svd_compute_thin_v(computationOptions);
420
+
359
421
  eigen_assert(!(m_computeFullU && m_computeThinU) && "SVDBase: you can't ask for both full and thin U");
360
422
  eigen_assert(!(m_computeFullV && m_computeThinV) && "SVDBase: you can't ask for both full and thin V");
361
- eigen_assert(EIGEN_IMPLIES(m_computeThinU || m_computeThinV, MatrixType::ColsAtCompileTime==Dynamic) &&
362
- "SVDBase: thin U and V are only available when your matrix has a dynamic number of columns.");
363
423
 
364
- m_diagSize = (std::min)(m_rows, m_cols);
365
- m_singularValues.resize(m_diagSize);
366
- if(RowsAtCompileTime==Dynamic)
367
- m_matrixU.resize(m_rows, m_computeFullU ? m_rows : m_computeThinU ? m_diagSize : 0);
368
- if(ColsAtCompileTime==Dynamic)
369
- m_matrixV.resize(m_cols, m_computeFullV ? m_cols : m_computeThinV ? m_diagSize : 0);
424
+ m_diagSize.setValue(numext::mini(m_rows.value(), m_cols.value()));
425
+ m_singularValues.resize(m_diagSize.value());
426
+ if (RowsAtCompileTime == Dynamic)
427
+ m_matrixU.resize(m_rows.value(), m_computeFullU ? m_rows.value() : m_computeThinU ? m_diagSize.value() : 0);
428
+ if (ColsAtCompileTime == Dynamic)
429
+ m_matrixV.resize(m_cols.value(), m_computeFullV ? m_cols.value() : m_computeThinV ? m_diagSize.value() : 0);
370
430
 
371
431
  return false;
372
432
  }
373
433
 
374
- }// end namespace
434
+ } // namespace Eigen
375
435
 
376
- #endif // EIGEN_SVDBASE_H
436
+ #endif // EIGEN_SVDBASE_H