@smake/eigen 1.0.2 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (435) hide show
  1. package/README.md +1 -1
  2. package/eigen/Eigen/AccelerateSupport +52 -0
  3. package/eigen/Eigen/Cholesky +18 -21
  4. package/eigen/Eigen/CholmodSupport +28 -28
  5. package/eigen/Eigen/Core +235 -326
  6. package/eigen/Eigen/Eigenvalues +16 -14
  7. package/eigen/Eigen/Geometry +21 -24
  8. package/eigen/Eigen/Householder +9 -8
  9. package/eigen/Eigen/IterativeLinearSolvers +8 -4
  10. package/eigen/Eigen/Jacobi +14 -14
  11. package/eigen/Eigen/KLUSupport +43 -0
  12. package/eigen/Eigen/LU +16 -20
  13. package/eigen/Eigen/MetisSupport +12 -12
  14. package/eigen/Eigen/OrderingMethods +54 -54
  15. package/eigen/Eigen/PaStiXSupport +23 -20
  16. package/eigen/Eigen/PardisoSupport +17 -14
  17. package/eigen/Eigen/QR +18 -21
  18. package/eigen/Eigen/QtAlignedMalloc +5 -13
  19. package/eigen/Eigen/SPQRSupport +21 -14
  20. package/eigen/Eigen/SVD +23 -18
  21. package/eigen/Eigen/Sparse +1 -4
  22. package/eigen/Eigen/SparseCholesky +18 -23
  23. package/eigen/Eigen/SparseCore +18 -17
  24. package/eigen/Eigen/SparseLU +12 -8
  25. package/eigen/Eigen/SparseQR +16 -14
  26. package/eigen/Eigen/StdDeque +5 -2
  27. package/eigen/Eigen/StdList +5 -2
  28. package/eigen/Eigen/StdVector +5 -2
  29. package/eigen/Eigen/SuperLUSupport +30 -24
  30. package/eigen/Eigen/ThreadPool +80 -0
  31. package/eigen/Eigen/UmfPackSupport +19 -17
  32. package/eigen/Eigen/Version +14 -0
  33. package/eigen/Eigen/src/AccelerateSupport/AccelerateSupport.h +423 -0
  34. package/eigen/Eigen/src/AccelerateSupport/InternalHeaderCheck.h +3 -0
  35. package/eigen/Eigen/src/Cholesky/InternalHeaderCheck.h +3 -0
  36. package/eigen/Eigen/src/Cholesky/LDLT.h +377 -401
  37. package/eigen/Eigen/src/Cholesky/LLT.h +332 -360
  38. package/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +81 -56
  39. package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +620 -521
  40. package/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
  41. package/eigen/Eigen/src/Core/ArithmeticSequence.h +239 -0
  42. package/eigen/Eigen/src/Core/Array.h +341 -294
  43. package/eigen/Eigen/src/Core/ArrayBase.h +190 -203
  44. package/eigen/Eigen/src/Core/ArrayWrapper.h +127 -171
  45. package/eigen/Eigen/src/Core/Assign.h +30 -40
  46. package/eigen/Eigen/src/Core/AssignEvaluator.h +711 -589
  47. package/eigen/Eigen/src/Core/Assign_MKL.h +130 -125
  48. package/eigen/Eigen/src/Core/BandMatrix.h +268 -283
  49. package/eigen/Eigen/src/Core/Block.h +375 -398
  50. package/eigen/Eigen/src/Core/CommaInitializer.h +86 -97
  51. package/eigen/Eigen/src/Core/ConditionEstimator.h +51 -53
  52. package/eigen/Eigen/src/Core/CoreEvaluators.h +1356 -1026
  53. package/eigen/Eigen/src/Core/CoreIterators.h +73 -59
  54. package/eigen/Eigen/src/Core/CwiseBinaryOp.h +114 -132
  55. package/eigen/Eigen/src/Core/CwiseNullaryOp.h +726 -617
  56. package/eigen/Eigen/src/Core/CwiseTernaryOp.h +77 -103
  57. package/eigen/Eigen/src/Core/CwiseUnaryOp.h +56 -68
  58. package/eigen/Eigen/src/Core/CwiseUnaryView.h +132 -95
  59. package/eigen/Eigen/src/Core/DenseBase.h +632 -571
  60. package/eigen/Eigen/src/Core/DenseCoeffsBase.h +511 -624
  61. package/eigen/Eigen/src/Core/DenseStorage.h +512 -509
  62. package/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
  63. package/eigen/Eigen/src/Core/Diagonal.h +169 -210
  64. package/eigen/Eigen/src/Core/DiagonalMatrix.h +351 -274
  65. package/eigen/Eigen/src/Core/DiagonalProduct.h +12 -10
  66. package/eigen/Eigen/src/Core/Dot.h +172 -222
  67. package/eigen/Eigen/src/Core/EigenBase.h +75 -85
  68. package/eigen/Eigen/src/Core/Fill.h +138 -0
  69. package/eigen/Eigen/src/Core/FindCoeff.h +464 -0
  70. package/eigen/Eigen/src/Core/ForceAlignedAccess.h +90 -109
  71. package/eigen/Eigen/src/Core/Fuzzy.h +82 -105
  72. package/eigen/Eigen/src/Core/GeneralProduct.h +327 -263
  73. package/eigen/Eigen/src/Core/GenericPacketMath.h +1472 -360
  74. package/eigen/Eigen/src/Core/GlobalFunctions.h +194 -151
  75. package/eigen/Eigen/src/Core/IO.h +147 -139
  76. package/eigen/Eigen/src/Core/IndexedView.h +321 -0
  77. package/eigen/Eigen/src/Core/InnerProduct.h +260 -0
  78. package/eigen/Eigen/src/Core/InternalHeaderCheck.h +3 -0
  79. package/eigen/Eigen/src/Core/Inverse.h +56 -66
  80. package/eigen/Eigen/src/Core/Map.h +124 -142
  81. package/eigen/Eigen/src/Core/MapBase.h +256 -281
  82. package/eigen/Eigen/src/Core/MathFunctions.h +1620 -938
  83. package/eigen/Eigen/src/Core/MathFunctionsImpl.h +233 -71
  84. package/eigen/Eigen/src/Core/Matrix.h +491 -416
  85. package/eigen/Eigen/src/Core/MatrixBase.h +468 -453
  86. package/eigen/Eigen/src/Core/NestByValue.h +66 -85
  87. package/eigen/Eigen/src/Core/NoAlias.h +79 -85
  88. package/eigen/Eigen/src/Core/NumTraits.h +235 -148
  89. package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +253 -0
  90. package/eigen/Eigen/src/Core/PermutationMatrix.h +461 -511
  91. package/eigen/Eigen/src/Core/PlainObjectBase.h +871 -894
  92. package/eigen/Eigen/src/Core/Product.h +260 -139
  93. package/eigen/Eigen/src/Core/ProductEvaluators.h +863 -714
  94. package/eigen/Eigen/src/Core/Random.h +161 -136
  95. package/eigen/Eigen/src/Core/RandomImpl.h +262 -0
  96. package/eigen/Eigen/src/Core/RealView.h +250 -0
  97. package/eigen/Eigen/src/Core/Redux.h +366 -336
  98. package/eigen/Eigen/src/Core/Ref.h +308 -209
  99. package/eigen/Eigen/src/Core/Replicate.h +94 -106
  100. package/eigen/Eigen/src/Core/Reshaped.h +398 -0
  101. package/eigen/Eigen/src/Core/ReturnByValue.h +49 -55
  102. package/eigen/Eigen/src/Core/Reverse.h +136 -145
  103. package/eigen/Eigen/src/Core/Select.h +70 -140
  104. package/eigen/Eigen/src/Core/SelfAdjointView.h +262 -285
  105. package/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h +23 -20
  106. package/eigen/Eigen/src/Core/SkewSymmetricMatrix3.h +382 -0
  107. package/eigen/Eigen/src/Core/Solve.h +97 -111
  108. package/eigen/Eigen/src/Core/SolveTriangular.h +131 -129
  109. package/eigen/Eigen/src/Core/SolverBase.h +138 -101
  110. package/eigen/Eigen/src/Core/StableNorm.h +156 -160
  111. package/eigen/Eigen/src/Core/StlIterators.h +619 -0
  112. package/eigen/Eigen/src/Core/Stride.h +91 -88
  113. package/eigen/Eigen/src/Core/Swap.h +70 -38
  114. package/eigen/Eigen/src/Core/Transpose.h +295 -273
  115. package/eigen/Eigen/src/Core/Transpositions.h +272 -317
  116. package/eigen/Eigen/src/Core/TriangularMatrix.h +670 -755
  117. package/eigen/Eigen/src/Core/VectorBlock.h +59 -72
  118. package/eigen/Eigen/src/Core/VectorwiseOp.h +668 -630
  119. package/eigen/Eigen/src/Core/Visitor.h +480 -216
  120. package/eigen/Eigen/src/Core/arch/AVX/Complex.h +407 -293
  121. package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +79 -388
  122. package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +2935 -491
  123. package/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
  124. package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +279 -22
  125. package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +472 -0
  126. package/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
  127. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +85 -333
  128. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
  129. package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +2490 -649
  130. package/eigen/Eigen/src/Core/arch/AVX512/PacketMathFP16.h +1413 -0
  131. package/eigen/Eigen/src/Core/arch/AVX512/Reductions.h +297 -0
  132. package/eigen/Eigen/src/Core/arch/AVX512/TrsmKernel.h +1167 -0
  133. package/eigen/Eigen/src/Core/arch/AVX512/TrsmUnrolls.inc +1219 -0
  134. package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +277 -0
  135. package/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
  136. package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +521 -298
  137. package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +39 -280
  138. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +3686 -0
  139. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +205 -0
  140. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +901 -0
  141. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMAbfloat16.h +742 -0
  142. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixVectorProduct.inc +2818 -0
  143. package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +3391 -723
  144. package/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
  145. package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +866 -0
  146. package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +113 -14
  147. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +2634 -0
  148. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +227 -0
  149. package/eigen/Eigen/src/Core/arch/Default/Half.h +1091 -0
  150. package/eigen/Eigen/src/Core/arch/Default/Settings.h +11 -13
  151. package/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
  152. package/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +104 -0
  153. package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1712 -0
  154. package/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
  155. package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +77 -0
  156. package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
  157. package/eigen/Eigen/src/Core/arch/HVX/PacketMath.h +1088 -0
  158. package/eigen/Eigen/src/Core/arch/LSX/Complex.h +520 -0
  159. package/eigen/Eigen/src/Core/arch/LSX/GeneralBlockPanelKernel.h +23 -0
  160. package/eigen/Eigen/src/Core/arch/LSX/MathFunctions.h +43 -0
  161. package/eigen/Eigen/src/Core/arch/LSX/PacketMath.h +2866 -0
  162. package/eigen/Eigen/src/Core/arch/LSX/TypeCasting.h +526 -0
  163. package/eigen/Eigen/src/Core/arch/MSA/Complex.h +620 -0
  164. package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +379 -0
  165. package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1237 -0
  166. package/eigen/Eigen/src/Core/arch/NEON/Complex.h +531 -289
  167. package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +243 -0
  168. package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +50 -73
  169. package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +5915 -579
  170. package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1642 -0
  171. package/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
  172. package/eigen/Eigen/src/Core/arch/SSE/Complex.h +366 -334
  173. package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +40 -514
  174. package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +2164 -675
  175. package/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
  176. package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +188 -35
  177. package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +48 -0
  178. package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +674 -0
  179. package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +52 -0
  180. package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +227 -0
  181. package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +303 -0
  182. package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +576 -0
  183. package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +83 -0
  184. package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +434 -261
  185. package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +160 -53
  186. package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +1073 -605
  187. package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +123 -117
  188. package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +594 -322
  189. package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +204 -118
  190. package/eigen/Eigen/src/Core/functors/StlFunctors.h +110 -97
  191. package/eigen/Eigen/src/Core/functors/TernaryFunctors.h +34 -7
  192. package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1158 -530
  193. package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +2329 -1333
  194. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +328 -364
  195. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +191 -178
  196. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +85 -82
  197. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +154 -73
  198. package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +396 -542
  199. package/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +80 -77
  200. package/eigen/Eigen/src/Core/products/Parallelizer.h +208 -92
  201. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +331 -375
  202. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +206 -224
  203. package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +139 -146
  204. package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +58 -61
  205. package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +71 -71
  206. package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +48 -46
  207. package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +294 -369
  208. package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +246 -238
  209. package/eigen/Eigen/src/Core/products/TriangularMatrixVector.h +244 -247
  210. package/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +212 -192
  211. package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +328 -275
  212. package/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +108 -109
  213. package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +70 -93
  214. package/eigen/Eigen/src/Core/util/Assert.h +158 -0
  215. package/eigen/Eigen/src/Core/util/BlasUtil.h +413 -290
  216. package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +543 -0
  217. package/eigen/Eigen/src/Core/util/Constants.h +314 -263
  218. package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +130 -78
  219. package/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
  220. package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +450 -224
  221. package/eigen/Eigen/src/Core/util/GpuHipCudaDefines.inc +101 -0
  222. package/eigen/Eigen/src/Core/util/GpuHipCudaUndefines.inc +45 -0
  223. package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +487 -0
  224. package/eigen/Eigen/src/Core/util/IntegralConstant.h +279 -0
  225. package/eigen/Eigen/src/Core/util/MKL_support.h +39 -30
  226. package/eigen/Eigen/src/Core/util/Macros.h +939 -646
  227. package/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
  228. package/eigen/Eigen/src/Core/util/Memory.h +1042 -650
  229. package/eigen/Eigen/src/Core/util/Meta.h +618 -426
  230. package/eigen/Eigen/src/Core/util/MoreMeta.h +638 -0
  231. package/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +32 -19
  232. package/eigen/Eigen/src/Core/util/ReshapedHelper.h +51 -0
  233. package/eigen/Eigen/src/Core/util/Serializer.h +209 -0
  234. package/eigen/Eigen/src/Core/util/StaticAssert.h +51 -164
  235. package/eigen/Eigen/src/Core/util/SymbolicIndex.h +445 -0
  236. package/eigen/Eigen/src/Core/util/XprHelper.h +793 -538
  237. package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +246 -277
  238. package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +299 -319
  239. package/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +52 -48
  240. package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +413 -456
  241. package/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +309 -325
  242. package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +157 -171
  243. package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +292 -310
  244. package/eigen/Eigen/src/Eigenvalues/InternalHeaderCheck.h +3 -0
  245. package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +91 -107
  246. package/eigen/Eigen/src/Eigenvalues/RealQZ.h +539 -606
  247. package/eigen/Eigen/src/Eigenvalues/RealSchur.h +348 -382
  248. package/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +41 -35
  249. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +579 -600
  250. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +47 -44
  251. package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +434 -461
  252. package/eigen/Eigen/src/Geometry/AlignedBox.h +307 -214
  253. package/eigen/Eigen/src/Geometry/AngleAxis.h +135 -137
  254. package/eigen/Eigen/src/Geometry/EulerAngles.h +163 -74
  255. package/eigen/Eigen/src/Geometry/Homogeneous.h +289 -333
  256. package/eigen/Eigen/src/Geometry/Hyperplane.h +152 -161
  257. package/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
  258. package/eigen/Eigen/src/Geometry/OrthoMethods.h +168 -145
  259. package/eigen/Eigen/src/Geometry/ParametrizedLine.h +141 -104
  260. package/eigen/Eigen/src/Geometry/Quaternion.h +595 -497
  261. package/eigen/Eigen/src/Geometry/Rotation2D.h +110 -108
  262. package/eigen/Eigen/src/Geometry/RotationBase.h +148 -145
  263. package/eigen/Eigen/src/Geometry/Scaling.h +115 -90
  264. package/eigen/Eigen/src/Geometry/Transform.h +896 -953
  265. package/eigen/Eigen/src/Geometry/Translation.h +100 -98
  266. package/eigen/Eigen/src/Geometry/Umeyama.h +79 -84
  267. package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +154 -0
  268. package/eigen/Eigen/src/Householder/BlockHouseholder.h +54 -42
  269. package/eigen/Eigen/src/Householder/Householder.h +104 -122
  270. package/eigen/Eigen/src/Householder/HouseholderSequence.h +416 -382
  271. package/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
  272. package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +153 -166
  273. package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +127 -138
  274. package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +95 -124
  275. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +269 -267
  276. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +246 -259
  277. package/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
  278. package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +218 -217
  279. package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +80 -103
  280. package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +59 -63
  281. package/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
  282. package/eigen/Eigen/src/Jacobi/Jacobi.h +256 -291
  283. package/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
  284. package/eigen/Eigen/src/KLUSupport/KLUSupport.h +339 -0
  285. package/eigen/Eigen/src/LU/Determinant.h +60 -63
  286. package/eigen/Eigen/src/LU/FullPivLU.h +561 -626
  287. package/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
  288. package/eigen/Eigen/src/LU/InverseImpl.h +213 -275
  289. package/eigen/Eigen/src/LU/PartialPivLU.h +407 -435
  290. package/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +54 -40
  291. package/eigen/Eigen/src/LU/arch/InverseSize4.h +353 -0
  292. package/eigen/Eigen/src/MetisSupport/InternalHeaderCheck.h +3 -0
  293. package/eigen/Eigen/src/MetisSupport/MetisSupport.h +81 -93
  294. package/eigen/Eigen/src/OrderingMethods/Amd.h +250 -282
  295. package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +950 -1103
  296. package/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
  297. package/eigen/Eigen/src/OrderingMethods/Ordering.h +111 -122
  298. package/eigen/Eigen/src/PaStiXSupport/InternalHeaderCheck.h +3 -0
  299. package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +524 -570
  300. package/eigen/Eigen/src/PardisoSupport/InternalHeaderCheck.h +3 -0
  301. package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +385 -429
  302. package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +494 -473
  303. package/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +120 -56
  304. package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +223 -137
  305. package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +517 -460
  306. package/eigen/Eigen/src/QR/HouseholderQR.h +412 -278
  307. package/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h +32 -23
  308. package/eigen/Eigen/src/QR/InternalHeaderCheck.h +3 -0
  309. package/eigen/Eigen/src/SPQRSupport/InternalHeaderCheck.h +3 -0
  310. package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +263 -261
  311. package/eigen/Eigen/src/SVD/BDCSVD.h +872 -679
  312. package/eigen/Eigen/src/SVD/BDCSVD_LAPACKE.h +174 -0
  313. package/eigen/Eigen/src/SVD/InternalHeaderCheck.h +3 -0
  314. package/eigen/Eigen/src/SVD/JacobiSVD.h +585 -543
  315. package/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +85 -49
  316. package/eigen/Eigen/src/SVD/SVDBase.h +281 -160
  317. package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +202 -237
  318. package/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
  319. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +769 -590
  320. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +318 -129
  321. package/eigen/Eigen/src/SparseCore/AmbiVector.h +202 -251
  322. package/eigen/Eigen/src/SparseCore/CompressedStorage.h +184 -236
  323. package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +140 -184
  324. package/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
  325. package/eigen/Eigen/src/SparseCore/SparseAssign.h +174 -111
  326. package/eigen/Eigen/src/SparseCore/SparseBlock.h +408 -477
  327. package/eigen/Eigen/src/SparseCore/SparseColEtree.h +100 -112
  328. package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +531 -280
  329. package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +559 -347
  330. package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +100 -108
  331. package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +185 -191
  332. package/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h +71 -71
  333. package/eigen/Eigen/src/SparseCore/SparseDot.h +49 -47
  334. package/eigen/Eigen/src/SparseCore/SparseFuzzy.h +13 -11
  335. package/eigen/Eigen/src/SparseCore/SparseMap.h +243 -253
  336. package/eigen/Eigen/src/SparseCore/SparseMatrix.h +1614 -1142
  337. package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +403 -357
  338. package/eigen/Eigen/src/SparseCore/SparsePermutation.h +186 -115
  339. package/eigen/Eigen/src/SparseCore/SparseProduct.h +100 -91
  340. package/eigen/Eigen/src/SparseCore/SparseRedux.h +22 -24
  341. package/eigen/Eigen/src/SparseCore/SparseRef.h +268 -295
  342. package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +371 -414
  343. package/eigen/Eigen/src/SparseCore/SparseSolverBase.h +78 -87
  344. package/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +81 -95
  345. package/eigen/Eigen/src/SparseCore/SparseTranspose.h +62 -71
  346. package/eigen/Eigen/src/SparseCore/SparseTriangularView.h +132 -144
  347. package/eigen/Eigen/src/SparseCore/SparseUtil.h +146 -115
  348. package/eigen/Eigen/src/SparseCore/SparseVector.h +426 -372
  349. package/eigen/Eigen/src/SparseCore/SparseView.h +164 -193
  350. package/eigen/Eigen/src/SparseCore/TriangularSolver.h +129 -170
  351. package/eigen/Eigen/src/SparseLU/InternalHeaderCheck.h +3 -0
  352. package/eigen/Eigen/src/SparseLU/SparseLU.h +814 -618
  353. package/eigen/Eigen/src/SparseLU/SparseLUImpl.h +61 -48
  354. package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +102 -118
  355. package/eigen/Eigen/src/SparseLU/SparseLU_Structs.h +38 -35
  356. package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +273 -255
  357. package/eigen/Eigen/src/SparseLU/SparseLU_Utils.h +44 -49
  358. package/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h +104 -108
  359. package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +90 -101
  360. package/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +57 -58
  361. package/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +43 -55
  362. package/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +74 -71
  363. package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +125 -133
  364. package/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h +136 -159
  365. package/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h +51 -52
  366. package/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h +67 -73
  367. package/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h +24 -26
  368. package/eigen/Eigen/src/SparseQR/InternalHeaderCheck.h +3 -0
  369. package/eigen/Eigen/src/SparseQR/SparseQR.h +451 -490
  370. package/eigen/Eigen/src/StlSupport/StdDeque.h +28 -105
  371. package/eigen/Eigen/src/StlSupport/StdList.h +28 -84
  372. package/eigen/Eigen/src/StlSupport/StdVector.h +28 -108
  373. package/eigen/Eigen/src/StlSupport/details.h +48 -50
  374. package/eigen/Eigen/src/SuperLUSupport/InternalHeaderCheck.h +3 -0
  375. package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +634 -732
  376. package/eigen/Eigen/src/ThreadPool/Barrier.h +70 -0
  377. package/eigen/Eigen/src/ThreadPool/CoreThreadPoolDevice.h +336 -0
  378. package/eigen/Eigen/src/ThreadPool/EventCount.h +241 -0
  379. package/eigen/Eigen/src/ThreadPool/ForkJoin.h +140 -0
  380. package/eigen/Eigen/src/ThreadPool/InternalHeaderCheck.h +4 -0
  381. package/eigen/Eigen/src/ThreadPool/NonBlockingThreadPool.h +587 -0
  382. package/eigen/Eigen/src/ThreadPool/RunQueue.h +230 -0
  383. package/eigen/Eigen/src/ThreadPool/ThreadCancel.h +21 -0
  384. package/eigen/Eigen/src/ThreadPool/ThreadEnvironment.h +43 -0
  385. package/eigen/Eigen/src/ThreadPool/ThreadLocal.h +289 -0
  386. package/eigen/Eigen/src/ThreadPool/ThreadPoolInterface.h +50 -0
  387. package/eigen/Eigen/src/ThreadPool/ThreadYield.h +16 -0
  388. package/eigen/Eigen/src/UmfPackSupport/InternalHeaderCheck.h +3 -0
  389. package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +480 -380
  390. package/eigen/Eigen/src/misc/Image.h +41 -43
  391. package/eigen/Eigen/src/misc/InternalHeaderCheck.h +3 -0
  392. package/eigen/Eigen/src/misc/Kernel.h +39 -41
  393. package/eigen/Eigen/src/misc/RealSvd2x2.h +19 -21
  394. package/eigen/Eigen/src/misc/blas.h +83 -426
  395. package/eigen/Eigen/src/misc/lapacke.h +9976 -16182
  396. package/eigen/Eigen/src/misc/lapacke_helpers.h +163 -0
  397. package/eigen/Eigen/src/misc/lapacke_mangling.h +4 -5
  398. package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.inc +344 -0
  399. package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.inc +544 -0
  400. package/eigen/Eigen/src/plugins/BlockMethods.inc +1370 -0
  401. package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
  402. package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.inc +167 -0
  403. package/eigen/Eigen/src/plugins/IndexedViewMethods.inc +192 -0
  404. package/eigen/Eigen/src/plugins/InternalHeaderCheck.inc +3 -0
  405. package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.inc +331 -0
  406. package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.inc +118 -0
  407. package/eigen/Eigen/src/plugins/ReshapedMethods.inc +133 -0
  408. package/lib/LibEigen.d.ts +4 -0
  409. package/lib/LibEigen.js +14 -0
  410. package/lib/index.d.ts +1 -1
  411. package/lib/index.js +7 -3
  412. package/package.json +2 -10
  413. package/eigen/Eigen/CMakeLists.txt +0 -19
  414. package/eigen/Eigen/src/Core/BooleanRedux.h +0 -164
  415. package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +0 -103
  416. package/eigen/Eigen/src/Core/arch/CUDA/Half.h +0 -675
  417. package/eigen/Eigen/src/Core/arch/CUDA/MathFunctions.h +0 -91
  418. package/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +0 -333
  419. package/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +0 -1124
  420. package/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +0 -212
  421. package/eigen/Eigen/src/Core/util/NonMPL2.h +0 -3
  422. package/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +0 -161
  423. package/eigen/Eigen/src/LU/arch/Inverse_SSE.h +0 -338
  424. package/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h +0 -67
  425. package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +0 -280
  426. package/eigen/Eigen/src/misc/lapack.h +0 -152
  427. package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +0 -332
  428. package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +0 -552
  429. package/eigen/Eigen/src/plugins/BlockMethods.h +0 -1058
  430. package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +0 -115
  431. package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +0 -163
  432. package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +0 -152
  433. package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +0 -85
  434. package/lib/eigen.d.ts +0 -2
  435. package/lib/eigen.js +0 -15
@@ -10,70 +10,69 @@
10
10
  #ifndef EIGEN_COMPLETEORTHOGONALDECOMPOSITION_H
11
11
  #define EIGEN_COMPLETEORTHOGONALDECOMPOSITION_H
12
12
 
13
+ // IWYU pragma: private
14
+ #include "./InternalHeaderCheck.h"
15
+
13
16
  namespace Eigen {
14
17
 
15
18
  namespace internal {
16
- template <typename _MatrixType>
17
- struct traits<CompleteOrthogonalDecomposition<_MatrixType> >
18
- : traits<_MatrixType> {
19
+ template <typename MatrixType_, typename PermutationIndex_>
20
+ struct traits<CompleteOrthogonalDecomposition<MatrixType_, PermutationIndex_>> : traits<MatrixType_> {
21
+ typedef MatrixXpr XprKind;
22
+ typedef SolverStorage StorageKind;
23
+ typedef PermutationIndex_ PermutationIndex;
19
24
  enum { Flags = 0 };
20
25
  };
21
26
 
22
27
  } // end namespace internal
23
28
 
24
29
  /** \ingroup QR_Module
25
- *
26
- * \class CompleteOrthogonalDecomposition
27
- *
28
- * \brief Complete orthogonal decomposition (COD) of a matrix.
29
- *
30
- * \param MatrixType the type of the matrix of which we are computing the COD.
31
- *
32
- * This class performs a rank-revealing complete orthogonal decomposition of a
33
- * matrix \b A into matrices \b P, \b Q, \b T, and \b Z such that
34
- * \f[
35
- * \mathbf{A} \, \mathbf{P} = \mathbf{Q} \,
36
- * \begin{bmatrix} \mathbf{T} & \mathbf{0} \\
37
- * \mathbf{0} & \mathbf{0} \end{bmatrix} \, \mathbf{Z}
38
- * \f]
39
- * by using Householder transformations. Here, \b P is a permutation matrix,
40
- * \b Q and \b Z are unitary matrices and \b T an upper triangular matrix of
41
- * size rank-by-rank. \b A may be rank deficient.
42
- *
43
- * This class supports the \link InplaceDecomposition inplace decomposition \endlink mechanism.
44
- *
45
- * \sa MatrixBase::completeOrthogonalDecomposition()
46
- */
47
- template <typename _MatrixType>
48
- class CompleteOrthogonalDecomposition {
30
+ *
31
+ * \class CompleteOrthogonalDecomposition
32
+ *
33
+ * \brief Complete orthogonal decomposition (COD) of a matrix.
34
+ *
35
+ * \tparam MatrixType_ the type of the matrix of which we are computing the COD.
36
+ *
37
+ * This class performs a rank-revealing complete orthogonal decomposition of a
38
+ * matrix \b A into matrices \b P, \b Q, \b T, and \b Z such that
39
+ * \f[
40
+ * \mathbf{A} \, \mathbf{P} = \mathbf{Q} \,
41
+ * \begin{bmatrix} \mathbf{T} & \mathbf{0} \\
42
+ * \mathbf{0} & \mathbf{0} \end{bmatrix} \, \mathbf{Z}
43
+ * \f]
44
+ * by using Householder transformations. Here, \b P is a permutation matrix,
45
+ * \b Q and \b Z are unitary matrices and \b T an upper triangular matrix of
46
+ * size rank-by-rank. \b A may be rank deficient.
47
+ *
48
+ * This class supports the \link InplaceDecomposition inplace decomposition \endlink mechanism.
49
+ *
50
+ * \sa MatrixBase::completeOrthogonalDecomposition()
51
+ */
52
+ template <typename MatrixType_, typename PermutationIndex_>
53
+ class CompleteOrthogonalDecomposition
54
+ : public SolverBase<CompleteOrthogonalDecomposition<MatrixType_, PermutationIndex_>> {
49
55
  public:
50
- typedef _MatrixType MatrixType;
56
+ typedef MatrixType_ MatrixType;
57
+ typedef SolverBase<CompleteOrthogonalDecomposition> Base;
58
+
59
+ template <typename Derived>
60
+ friend struct internal::solve_assertion;
61
+ typedef PermutationIndex_ PermutationIndex;
62
+ EIGEN_GENERIC_PUBLIC_INTERFACE(CompleteOrthogonalDecomposition)
51
63
  enum {
52
- RowsAtCompileTime = MatrixType::RowsAtCompileTime,
53
- ColsAtCompileTime = MatrixType::ColsAtCompileTime,
54
64
  MaxRowsAtCompileTime = MatrixType::MaxRowsAtCompileTime,
55
65
  MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime
56
66
  };
57
- typedef typename MatrixType::Scalar Scalar;
58
- typedef typename MatrixType::RealScalar RealScalar;
59
- typedef typename MatrixType::StorageIndex StorageIndex;
60
67
  typedef typename internal::plain_diag_type<MatrixType>::type HCoeffsType;
61
- typedef PermutationMatrix<ColsAtCompileTime, MaxColsAtCompileTime>
62
- PermutationType;
63
- typedef typename internal::plain_row_type<MatrixType, Index>::type
64
- IntRowVectorType;
68
+ typedef PermutationMatrix<ColsAtCompileTime, MaxColsAtCompileTime, PermutationIndex> PermutationType;
69
+ typedef typename internal::plain_row_type<MatrixType, Index>::type IntRowVectorType;
65
70
  typedef typename internal::plain_row_type<MatrixType>::type RowVectorType;
66
- typedef typename internal::plain_row_type<MatrixType, RealScalar>::type
67
- RealRowVectorType;
68
- typedef HouseholderSequence<
69
- MatrixType, typename internal::remove_all<
70
- typename HCoeffsType::ConjugateReturnType>::type>
71
+ typedef typename internal::plain_row_type<MatrixType, RealScalar>::type RealRowVectorType;
72
+ typedef HouseholderSequence<MatrixType, internal::remove_all_t<typename HCoeffsType::ConjugateReturnType>>
71
73
  HouseholderSequenceType;
72
74
  typedef typename MatrixType::PlainObject PlainObject;
73
75
 
74
- private:
75
- typedef typename PermutationType::Index PermIndexType;
76
-
77
76
  public:
78
77
  /**
79
78
  * \brief Default Constructor.
@@ -113,27 +112,24 @@ class CompleteOrthogonalDecomposition {
113
112
  explicit CompleteOrthogonalDecomposition(const EigenBase<InputType>& matrix)
114
113
  : m_cpqr(matrix.rows(), matrix.cols()),
115
114
  m_zCoeffs((std::min)(matrix.rows(), matrix.cols())),
116
- m_temp(matrix.cols())
117
- {
115
+ m_temp(matrix.cols()) {
118
116
  compute(matrix.derived());
119
117
  }
120
118
 
121
119
  /** \brief Constructs a complete orthogonal decomposition from a given matrix
122
- *
123
- * This overloaded constructor is provided for \link InplaceDecomposition inplace decomposition \endlink when \c MatrixType is a Eigen::Ref.
124
- *
125
- * \sa CompleteOrthogonalDecomposition(const EigenBase&)
126
- */
127
- template<typename InputType>
120
+ *
121
+ * This overloaded constructor is provided for \link InplaceDecomposition inplace decomposition \endlink when \c
122
+ * MatrixType is a Eigen::Ref.
123
+ *
124
+ * \sa CompleteOrthogonalDecomposition(const EigenBase&)
125
+ */
126
+ template <typename InputType>
128
127
  explicit CompleteOrthogonalDecomposition(EigenBase<InputType>& matrix)
129
- : m_cpqr(matrix.derived()),
130
- m_zCoeffs((std::min)(matrix.rows(), matrix.cols())),
131
- m_temp(matrix.cols())
132
- {
128
+ : m_cpqr(matrix.derived()), m_zCoeffs((std::min)(matrix.rows(), matrix.cols())), m_temp(matrix.cols()) {
133
129
  computeInPlace();
134
130
  }
135
131
 
136
-
132
+ #ifdef EIGEN_PARSED_BY_DOXYGEN
137
133
  /** This method computes the minimum-norm solution X to a least squares
138
134
  * problem \f[\mathrm{minimize} \|A X - B\|, \f] where \b A is the matrix of
139
135
  * which \c *this is the complete orthogonal decomposition.
@@ -144,12 +140,8 @@ class CompleteOrthogonalDecomposition {
144
140
  *
145
141
  */
146
142
  template <typename Rhs>
147
- inline const Solve<CompleteOrthogonalDecomposition, Rhs> solve(
148
- const MatrixBase<Rhs>& b) const {
149
- eigen_assert(m_cpqr.m_isInitialized &&
150
- "CompleteOrthogonalDecomposition is not initialized.");
151
- return Solve<CompleteOrthogonalDecomposition, Rhs>(*this, b.derived());
152
- }
143
+ inline const Solve<CompleteOrthogonalDecomposition, Rhs> solve(const MatrixBase<Rhs>& b) const;
144
+ #endif
153
145
 
154
146
  HouseholderSequenceType householderQ(void) const;
155
147
  HouseholderSequenceType matrixQ(void) const { return m_cpqr.householderQ(); }
@@ -158,8 +150,8 @@ class CompleteOrthogonalDecomposition {
158
150
  */
159
151
  MatrixType matrixZ() const {
160
152
  MatrixType Z = MatrixType::Identity(m_cpqr.cols(), m_cpqr.cols());
161
- applyZAdjointOnTheLeftInPlace(Z);
162
- return Z.adjoint();
153
+ applyZOnTheLeftInPlace<false>(Z);
154
+ return Z;
163
155
  }
164
156
 
165
157
  /** \returns a reference to the matrix where the complete orthogonal
@@ -175,7 +167,7 @@ class CompleteOrthogonalDecomposition {
175
167
  * \code matrixT().template triangularView<Upper>() \endcode
176
168
  * For rank-deficient matrices, use
177
169
  * \code
178
- * matrixR().topLeftCorner(rank(), rank()).template triangularView<Upper>()
170
+ * matrixT().topLeftCorner(rank(), rank()).template triangularView<Upper>()
179
171
  * \endcode
180
172
  */
181
173
  const MatrixType& matrixT() const { return m_cpqr.matrixQR(); }
@@ -189,9 +181,22 @@ class CompleteOrthogonalDecomposition {
189
181
  }
190
182
 
191
183
  /** \returns a const reference to the column permutation matrix */
192
- const PermutationType& colsPermutation() const {
193
- return m_cpqr.colsPermutation();
194
- }
184
+ const PermutationType& colsPermutation() const { return m_cpqr.colsPermutation(); }
185
+
186
+ /** \returns the determinant of the matrix of which
187
+ * *this is the complete orthogonal decomposition. It has only linear
188
+ * complexity (that is, O(n) where n is the dimension of the square matrix)
189
+ * as the complete orthogonal decomposition has already been computed.
190
+ *
191
+ * \note This is only for square matrices.
192
+ *
193
+ * \warning a determinant can be very big or small, so for matrices
194
+ * of large enough dimension, there is a risk of overflow/underflow.
195
+ * One way to work around that is to use logAbsDeterminant() instead.
196
+ *
197
+ * \sa absDeterminant(), logAbsDeterminant(), MatrixBase::determinant()
198
+ */
199
+ typename MatrixType::Scalar determinant() const;
195
200
 
196
201
  /** \returns the absolute value of the determinant of the matrix of which
197
202
  * *this is the complete orthogonal decomposition. It has only linear
@@ -204,7 +209,7 @@ class CompleteOrthogonalDecomposition {
204
209
  * of large enough dimension, there is a risk of overflow/underflow.
205
210
  * One way to work around that is to use logAbsDeterminant() instead.
206
211
  *
207
- * \sa logAbsDeterminant(), MatrixBase::determinant()
212
+ * \sa determinant(), logAbsDeterminant(), MatrixBase::determinant()
208
213
  */
209
214
  typename MatrixType::RealScalar absDeterminant() const;
210
215
 
@@ -219,10 +224,25 @@ class CompleteOrthogonalDecomposition {
219
224
  * \note This method is useful to work around the risk of overflow/underflow
220
225
  * that's inherent to determinant computation.
221
226
  *
222
- * \sa absDeterminant(), MatrixBase::determinant()
227
+ * \sa determinant(), absDeterminant(), MatrixBase::determinant()
223
228
  */
224
229
  typename MatrixType::RealScalar logAbsDeterminant() const;
225
230
 
231
+ /** \returns the sign of the determinant of the
232
+ * matrix of which *this is the complete orthogonal decomposition. It has
233
+ * only linear complexity (that is, O(n) where n is the dimension of the
234
+ * square matrix) as the complete orthogonal decomposition has already been
235
+ * computed.
236
+ *
237
+ * \note This is only for square matrices.
238
+ *
239
+ * \note This method is useful to work around the risk of overflow/underflow
240
+ * that's inherent to determinant computation.
241
+ *
242
+ * \sa determinant(), absDeterminant(), logAbsDeterminant(), MatrixBase::determinant()
243
+ */
244
+ typename MatrixType::Scalar signDeterminant() const;
245
+
226
246
  /** \returns the rank of the matrix of which *this is the complete orthogonal
227
247
  * decomposition.
228
248
  *
@@ -273,8 +293,8 @@ class CompleteOrthogonalDecomposition {
273
293
  * \warning: Do not compute \c this->pseudoInverse()*rhs to solve a linear systems.
274
294
  * It is more efficient and numerically stable to call \c this->solve(rhs).
275
295
  */
276
- inline const Inverse<CompleteOrthogonalDecomposition> pseudoInverse() const
277
- {
296
+ inline const Inverse<CompleteOrthogonalDecomposition> pseudoInverse() const {
297
+ eigen_assert(m_cpqr.m_isInitialized && "CompleteOrthogonalDecomposition is not initialized.");
278
298
  return Inverse<CompleteOrthogonalDecomposition>(*this);
279
299
  }
280
300
 
@@ -353,7 +373,7 @@ class CompleteOrthogonalDecomposition {
353
373
  inline RealScalar maxPivot() const { return m_cpqr.maxPivot(); }
354
374
 
355
375
  /** \brief Reports whether the complete orthogonal decomposition was
356
- * succesful.
376
+ * successful.
357
377
  *
358
378
  * \note This function always returns \c Success. It is provided for
359
379
  * compatibility
@@ -367,38 +387,63 @@ class CompleteOrthogonalDecomposition {
367
387
 
368
388
  #ifndef EIGEN_PARSED_BY_DOXYGEN
369
389
  template <typename RhsType, typename DstType>
370
- EIGEN_DEVICE_FUNC void _solve_impl(const RhsType& rhs, DstType& dst) const;
390
+ void _solve_impl(const RhsType& rhs, DstType& dst) const;
391
+
392
+ template <bool Conjugate, typename RhsType, typename DstType>
393
+ void _solve_impl_transposed(const RhsType& rhs, DstType& dst) const;
371
394
  #endif
372
395
 
373
396
  protected:
374
- static void check_template_parameters() {
375
- EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar);
397
+ EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar)
398
+
399
+ template <bool Transpose_, typename Rhs>
400
+ void _check_solve_assertion(const Rhs& b) const {
401
+ EIGEN_ONLY_USED_FOR_DEBUG(b);
402
+ eigen_assert(m_cpqr.m_isInitialized && "CompleteOrthogonalDecomposition is not initialized.");
403
+ eigen_assert((Transpose_ ? derived().cols() : derived().rows()) == b.rows() &&
404
+ "CompleteOrthogonalDecomposition::solve(): invalid number of rows of the right hand side matrix b");
376
405
  }
377
406
 
378
407
  void computeInPlace();
379
408
 
409
+ /** Overwrites \b rhs with \f$ \mathbf{Z} * \mathbf{rhs} \f$ or
410
+ * \f$ \mathbf{\overline Z} * \mathbf{rhs} \f$ if \c Conjugate
411
+ * is set to \c true.
412
+ */
413
+ template <bool Conjugate, typename Rhs>
414
+ void applyZOnTheLeftInPlace(Rhs& rhs) const;
415
+
380
416
  /** Overwrites \b rhs with \f$ \mathbf{Z}^* * \mathbf{rhs} \f$.
381
417
  */
382
418
  template <typename Rhs>
383
419
  void applyZAdjointOnTheLeftInPlace(Rhs& rhs) const;
384
420
 
385
- ColPivHouseholderQR<MatrixType> m_cpqr;
421
+ ColPivHouseholderQR<MatrixType, PermutationIndex> m_cpqr;
386
422
  HCoeffsType m_zCoeffs;
387
423
  RowVectorType m_temp;
388
424
  };
389
425
 
390
- template <typename MatrixType>
391
- typename MatrixType::RealScalar
392
- CompleteOrthogonalDecomposition<MatrixType>::absDeterminant() const {
426
+ template <typename MatrixType, typename PermutationIndex>
427
+ typename MatrixType::Scalar CompleteOrthogonalDecomposition<MatrixType, PermutationIndex>::determinant() const {
428
+ return m_cpqr.determinant();
429
+ }
430
+
431
+ template <typename MatrixType, typename PermutationIndex>
432
+ typename MatrixType::RealScalar CompleteOrthogonalDecomposition<MatrixType, PermutationIndex>::absDeterminant() const {
393
433
  return m_cpqr.absDeterminant();
394
434
  }
395
435
 
396
- template <typename MatrixType>
397
- typename MatrixType::RealScalar
398
- CompleteOrthogonalDecomposition<MatrixType>::logAbsDeterminant() const {
436
+ template <typename MatrixType, typename PermutationIndex>
437
+ typename MatrixType::RealScalar CompleteOrthogonalDecomposition<MatrixType, PermutationIndex>::logAbsDeterminant()
438
+ const {
399
439
  return m_cpqr.logAbsDeterminant();
400
440
  }
401
441
 
442
+ template <typename MatrixType, typename PermutationIndex>
443
+ typename MatrixType::Scalar CompleteOrthogonalDecomposition<MatrixType, PermutationIndex>::signDeterminant() const {
444
+ return m_cpqr.signDeterminant();
445
+ }
446
+
402
447
  /** Performs the complete orthogonal decomposition of the given matrix \a
403
448
  * matrix. The result of the factorization is stored into \c *this, and a
404
449
  * reference to \c *this is returned.
@@ -406,13 +451,9 @@ CompleteOrthogonalDecomposition<MatrixType>::logAbsDeterminant() const {
406
451
  * \sa class CompleteOrthogonalDecomposition,
407
452
  * CompleteOrthogonalDecomposition(const MatrixType&)
408
453
  */
409
- template <typename MatrixType>
410
- void CompleteOrthogonalDecomposition<MatrixType>::computeInPlace()
411
- {
412
- check_template_parameters();
413
-
414
- // the column permutation is stored as int indices, so just to be sure:
415
- eigen_assert(m_cpqr.cols() <= NumTraits<int>::highest());
454
+ template <typename MatrixType, typename PermutationIndex>
455
+ void CompleteOrthogonalDecomposition<MatrixType, PermutationIndex>::computeInPlace() {
456
+ eigen_assert(m_cpqr.cols() <= NumTraits<PermutationIndex>::highest());
416
457
 
417
458
  const Index rank = m_cpqr.rank();
418
459
  const Index cols = m_cpqr.cols();
@@ -437,49 +478,60 @@ void CompleteOrthogonalDecomposition<MatrixType>::computeInPlace()
437
478
  // Given the API for Householder reflectors, it is more convenient if
438
479
  // we swap the leading parts of columns k and r-1 (zero-based) to form
439
480
  // the matrix X_k = [X(0:k, k), X(0:k, r:n)]
440
- m_cpqr.m_qr.col(k).head(k + 1).swap(
441
- m_cpqr.m_qr.col(rank - 1).head(k + 1));
481
+ m_cpqr.m_qr.col(k).head(k + 1).swap(m_cpqr.m_qr.col(rank - 1).head(k + 1));
442
482
  }
443
483
  // Construct Householder reflector Z(k) to zero out the last row of X_k,
444
484
  // i.e. choose Z(k) such that
445
485
  // [X(k, k), X(k, r:n)] * Z(k) = [beta, 0, .., 0].
446
486
  RealScalar beta;
447
- m_cpqr.m_qr.row(k)
448
- .tail(cols - rank + 1)
449
- .makeHouseholderInPlace(m_zCoeffs(k), beta);
487
+ m_cpqr.m_qr.row(k).tail(cols - rank + 1).makeHouseholderInPlace(m_zCoeffs(k), beta);
450
488
  m_cpqr.m_qr(k, rank - 1) = beta;
451
489
  if (k > 0) {
452
490
  // Apply Z(k) to the first k rows of X_k
453
491
  m_cpqr.m_qr.topRightCorner(k, cols - rank + 1)
454
- .applyHouseholderOnTheRight(
455
- m_cpqr.m_qr.row(k).tail(cols - rank).transpose(), m_zCoeffs(k),
456
- &m_temp(0));
492
+ .applyHouseholderOnTheRight(m_cpqr.m_qr.row(k).tail(cols - rank).adjoint(), m_zCoeffs(k), &m_temp(0));
457
493
  }
458
494
  if (k != rank - 1) {
459
495
  // Swap X(0:k,k) back to its proper location.
460
- m_cpqr.m_qr.col(k).head(k + 1).swap(
461
- m_cpqr.m_qr.col(rank - 1).head(k + 1));
496
+ m_cpqr.m_qr.col(k).head(k + 1).swap(m_cpqr.m_qr.col(rank - 1).head(k + 1));
462
497
  }
463
498
  }
464
499
  }
465
500
  }
466
501
 
467
- template <typename MatrixType>
502
+ template <typename MatrixType, typename PermutationIndex>
503
+ template <bool Conjugate, typename Rhs>
504
+ void CompleteOrthogonalDecomposition<MatrixType, PermutationIndex>::applyZOnTheLeftInPlace(Rhs& rhs) const {
505
+ const Index cols = this->cols();
506
+ const Index nrhs = rhs.cols();
507
+ const Index rank = this->rank();
508
+ Matrix<typename Rhs::Scalar, Dynamic, 1> temp((std::max)(cols, nrhs));
509
+ for (Index k = rank - 1; k >= 0; --k) {
510
+ if (k != rank - 1) {
511
+ rhs.row(k).swap(rhs.row(rank - 1));
512
+ }
513
+ rhs.middleRows(rank - 1, cols - rank + 1)
514
+ .applyHouseholderOnTheLeft(matrixQTZ().row(k).tail(cols - rank).transpose().template conjugateIf<!Conjugate>(),
515
+ zCoeffs().template conjugateIf<Conjugate>()(k), &temp(0));
516
+ if (k != rank - 1) {
517
+ rhs.row(k).swap(rhs.row(rank - 1));
518
+ }
519
+ }
520
+ }
521
+
522
+ template <typename MatrixType, typename PermutationIndex>
468
523
  template <typename Rhs>
469
- void CompleteOrthogonalDecomposition<MatrixType>::applyZAdjointOnTheLeftInPlace(
470
- Rhs& rhs) const {
524
+ void CompleteOrthogonalDecomposition<MatrixType, PermutationIndex>::applyZAdjointOnTheLeftInPlace(Rhs& rhs) const {
471
525
  const Index cols = this->cols();
472
526
  const Index nrhs = rhs.cols();
473
527
  const Index rank = this->rank();
474
- Matrix<typename MatrixType::Scalar, Dynamic, 1> temp((std::max)(cols, nrhs));
528
+ Matrix<typename Rhs::Scalar, Dynamic, 1> temp((std::max)(cols, nrhs));
475
529
  for (Index k = 0; k < rank; ++k) {
476
530
  if (k != rank - 1) {
477
531
  rhs.row(k).swap(rhs.row(rank - 1));
478
532
  }
479
533
  rhs.middleRows(rank - 1, cols - rank + 1)
480
- .applyHouseholderOnTheLeft(
481
- matrixQTZ().row(k).tail(cols - rank).adjoint(), zCoeffs()(k),
482
- &temp(0));
534
+ .applyHouseholderOnTheLeft(matrixQTZ().row(k).tail(cols - rank).adjoint(), zCoeffs()(k), &temp(0));
483
535
  if (k != rank - 1) {
484
536
  rhs.row(k).swap(rhs.row(rank - 1));
485
537
  }
@@ -487,12 +539,10 @@ void CompleteOrthogonalDecomposition<MatrixType>::applyZAdjointOnTheLeftInPlace(
487
539
  }
488
540
 
489
541
  #ifndef EIGEN_PARSED_BY_DOXYGEN
490
- template <typename _MatrixType>
542
+ template <typename MatrixType_, typename PermutationIndex_>
491
543
  template <typename RhsType, typename DstType>
492
- void CompleteOrthogonalDecomposition<_MatrixType>::_solve_impl(
493
- const RhsType& rhs, DstType& dst) const {
494
- eigen_assert(rhs.rows() == this->rows());
495
-
544
+ void CompleteOrthogonalDecomposition<MatrixType_, PermutationIndex_>::_solve_impl(const RhsType& rhs,
545
+ DstType& dst) const {
496
546
  const Index rank = this->rank();
497
547
  if (rank == 0) {
498
548
  dst.setZero();
@@ -500,17 +550,11 @@ void CompleteOrthogonalDecomposition<_MatrixType>::_solve_impl(
500
550
  }
501
551
 
502
552
  // Compute c = Q^* * rhs
503
- // Note that the matrix Q = H_0^* H_1^*... so its inverse is
504
- // Q^* = (H_0 H_1 ...)^T
505
553
  typename RhsType::PlainObject c(rhs);
506
- c.applyOnTheLeft(
507
- householderSequence(matrixQTZ(), hCoeffs()).setLength(rank).transpose());
554
+ c.applyOnTheLeft(matrixQ().setLength(rank).adjoint());
508
555
 
509
556
  // Solve T z = c(1:rank, :)
510
- dst.topRows(rank) = matrixT()
511
- .topLeftCorner(rank, rank)
512
- .template triangularView<Upper>()
513
- .solve(c.topRows(rank));
557
+ dst.topRows(rank) = matrixT().topLeftCorner(rank, rank).template triangularView<Upper>().solve(c.topRows(rank));
514
558
 
515
559
  const Index cols = this->cols();
516
560
  if (rank < cols) {
@@ -523,36 +567,78 @@ void CompleteOrthogonalDecomposition<_MatrixType>::_solve_impl(
523
567
  // Undo permutation to get x = P^{-1} * y.
524
568
  dst = colsPermutation() * dst;
525
569
  }
570
+
571
+ template <typename MatrixType_, typename PermutationIndex_>
572
+ template <bool Conjugate, typename RhsType, typename DstType>
573
+ void CompleteOrthogonalDecomposition<MatrixType_, PermutationIndex_>::_solve_impl_transposed(const RhsType& rhs,
574
+ DstType& dst) const {
575
+ const Index rank = this->rank();
576
+
577
+ if (rank == 0) {
578
+ dst.setZero();
579
+ return;
580
+ }
581
+
582
+ typename RhsType::PlainObject c(colsPermutation().transpose() * rhs);
583
+
584
+ if (rank < cols()) {
585
+ applyZOnTheLeftInPlace<!Conjugate>(c);
586
+ }
587
+
588
+ matrixT()
589
+ .topLeftCorner(rank, rank)
590
+ .template triangularView<Upper>()
591
+ .transpose()
592
+ .template conjugateIf<Conjugate>()
593
+ .solveInPlace(c.topRows(rank));
594
+
595
+ dst.topRows(rank) = c.topRows(rank);
596
+ dst.bottomRows(rows() - rank).setZero();
597
+
598
+ dst.applyOnTheLeft(householderQ().setLength(rank).template conjugateIf<!Conjugate>());
599
+ }
526
600
  #endif
527
601
 
528
602
  namespace internal {
529
603
 
530
- template<typename DstXprType, typename MatrixType>
531
- struct Assignment<DstXprType, Inverse<CompleteOrthogonalDecomposition<MatrixType> >, internal::assign_op<typename DstXprType::Scalar,typename CompleteOrthogonalDecomposition<MatrixType>::Scalar>, Dense2Dense>
532
- {
533
- typedef CompleteOrthogonalDecomposition<MatrixType> CodType;
604
+ template <typename MatrixType, typename PermutationIndex>
605
+ struct traits<Inverse<CompleteOrthogonalDecomposition<MatrixType, PermutationIndex>>>
606
+ : traits<typename Transpose<typename MatrixType::PlainObject>::PlainObject> {
607
+ enum { Flags = 0 };
608
+ };
609
+
610
+ template <typename DstXprType, typename MatrixType, typename PermutationIndex>
611
+ struct Assignment<DstXprType, Inverse<CompleteOrthogonalDecomposition<MatrixType, PermutationIndex>>,
612
+ internal::assign_op<typename DstXprType::Scalar,
613
+ typename CompleteOrthogonalDecomposition<MatrixType, PermutationIndex>::Scalar>,
614
+ Dense2Dense> {
615
+ typedef CompleteOrthogonalDecomposition<MatrixType, PermutationIndex> CodType;
534
616
  typedef Inverse<CodType> SrcXprType;
535
- static void run(DstXprType &dst, const SrcXprType &src, const internal::assign_op<typename DstXprType::Scalar,typename CodType::Scalar> &)
536
- {
537
- dst = src.nestedExpression().solve(MatrixType::Identity(src.rows(), src.rows()));
617
+ static void run(DstXprType& dst, const SrcXprType& src,
618
+ const internal::assign_op<typename DstXprType::Scalar, typename CodType::Scalar>&) {
619
+ typedef Matrix<typename CodType::Scalar, CodType::RowsAtCompileTime, CodType::RowsAtCompileTime, 0,
620
+ CodType::MaxRowsAtCompileTime, CodType::MaxRowsAtCompileTime>
621
+ IdentityMatrixType;
622
+ dst = src.nestedExpression().solve(IdentityMatrixType::Identity(src.cols(), src.cols()));
538
623
  }
539
624
  };
540
625
 
541
- } // end namespace internal
626
+ } // end namespace internal
542
627
 
543
628
  /** \returns the matrix Q as a sequence of householder transformations */
544
- template <typename MatrixType>
545
- typename CompleteOrthogonalDecomposition<MatrixType>::HouseholderSequenceType
546
- CompleteOrthogonalDecomposition<MatrixType>::householderQ() const {
629
+ template <typename MatrixType, typename PermutationIndex>
630
+ typename CompleteOrthogonalDecomposition<MatrixType, PermutationIndex>::HouseholderSequenceType
631
+ CompleteOrthogonalDecomposition<MatrixType, PermutationIndex>::householderQ() const {
547
632
  return m_cpqr.householderQ();
548
633
  }
549
634
 
550
635
  /** \return the complete orthogonal decomposition of \c *this.
551
- *
552
- * \sa class CompleteOrthogonalDecomposition
553
- */
636
+ *
637
+ * \sa class CompleteOrthogonalDecomposition
638
+ */
554
639
  template <typename Derived>
555
- const CompleteOrthogonalDecomposition<typename MatrixBase<Derived>::PlainObject>
640
+ template <typename PermutationIndex>
641
+ const CompleteOrthogonalDecomposition<typename MatrixBase<Derived>::PlainObject, PermutationIndex>
556
642
  MatrixBase<Derived>::completeOrthogonalDecomposition() const {
557
643
  return CompleteOrthogonalDecomposition<PlainObject>(eval());
558
644
  }