@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
@@ -10,75 +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_> {
19
21
  typedef MatrixXpr XprKind;
20
22
  typedef SolverStorage StorageKind;
21
- typedef int StorageIndex;
23
+ typedef PermutationIndex_ PermutationIndex;
22
24
  enum { Flags = 0 };
23
25
  };
24
26
 
25
27
  } // end namespace internal
26
28
 
27
29
  /** \ingroup QR_Module
28
- *
29
- * \class CompleteOrthogonalDecomposition
30
- *
31
- * \brief Complete orthogonal decomposition (COD) of a matrix.
32
- *
33
- * \param MatrixType the type of the matrix of which we are computing the COD.
34
- *
35
- * This class performs a rank-revealing complete orthogonal decomposition of a
36
- * matrix \b A into matrices \b P, \b Q, \b T, and \b Z such that
37
- * \f[
38
- * \mathbf{A} \, \mathbf{P} = \mathbf{Q} \,
39
- * \begin{bmatrix} \mathbf{T} & \mathbf{0} \\
40
- * \mathbf{0} & \mathbf{0} \end{bmatrix} \, \mathbf{Z}
41
- * \f]
42
- * by using Householder transformations. Here, \b P is a permutation matrix,
43
- * \b Q and \b Z are unitary matrices and \b T an upper triangular matrix of
44
- * size rank-by-rank. \b A may be rank deficient.
45
- *
46
- * This class supports the \link InplaceDecomposition inplace decomposition \endlink mechanism.
47
- *
48
- * \sa MatrixBase::completeOrthogonalDecomposition()
49
- */
50
- template <typename _MatrixType> class CompleteOrthogonalDecomposition
51
- : public SolverBase<CompleteOrthogonalDecomposition<_MatrixType> >
52
- {
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_>> {
53
55
  public:
54
- typedef _MatrixType MatrixType;
56
+ typedef MatrixType_ MatrixType;
55
57
  typedef SolverBase<CompleteOrthogonalDecomposition> Base;
56
58
 
57
- template<typename Derived>
59
+ template <typename Derived>
58
60
  friend struct internal::solve_assertion;
59
-
61
+ typedef PermutationIndex_ PermutationIndex;
60
62
  EIGEN_GENERIC_PUBLIC_INTERFACE(CompleteOrthogonalDecomposition)
61
63
  enum {
62
64
  MaxRowsAtCompileTime = MatrixType::MaxRowsAtCompileTime,
63
65
  MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime
64
66
  };
65
67
  typedef typename internal::plain_diag_type<MatrixType>::type HCoeffsType;
66
- typedef PermutationMatrix<ColsAtCompileTime, MaxColsAtCompileTime>
67
- PermutationType;
68
- typedef typename internal::plain_row_type<MatrixType, Index>::type
69
- IntRowVectorType;
68
+ typedef PermutationMatrix<ColsAtCompileTime, MaxColsAtCompileTime, PermutationIndex> PermutationType;
69
+ typedef typename internal::plain_row_type<MatrixType, Index>::type IntRowVectorType;
70
70
  typedef typename internal::plain_row_type<MatrixType>::type RowVectorType;
71
- typedef typename internal::plain_row_type<MatrixType, RealScalar>::type
72
- RealRowVectorType;
73
- typedef HouseholderSequence<
74
- MatrixType, typename internal::remove_all<
75
- 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>>
76
73
  HouseholderSequenceType;
77
74
  typedef typename MatrixType::PlainObject PlainObject;
78
75
 
79
- private:
80
- typedef typename PermutationType::Index PermIndexType;
81
-
82
76
  public:
83
77
  /**
84
78
  * \brief Default Constructor.
@@ -118,27 +112,24 @@ template <typename _MatrixType> class CompleteOrthogonalDecomposition
118
112
  explicit CompleteOrthogonalDecomposition(const EigenBase<InputType>& matrix)
119
113
  : m_cpqr(matrix.rows(), matrix.cols()),
120
114
  m_zCoeffs((std::min)(matrix.rows(), matrix.cols())),
121
- m_temp(matrix.cols())
122
- {
115
+ m_temp(matrix.cols()) {
123
116
  compute(matrix.derived());
124
117
  }
125
118
 
126
119
  /** \brief Constructs a complete orthogonal decomposition from a given matrix
127
- *
128
- * This overloaded constructor is provided for \link InplaceDecomposition inplace decomposition \endlink when \c MatrixType is a Eigen::Ref.
129
- *
130
- * \sa CompleteOrthogonalDecomposition(const EigenBase&)
131
- */
132
- 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>
133
127
  explicit CompleteOrthogonalDecomposition(EigenBase<InputType>& matrix)
134
- : m_cpqr(matrix.derived()),
135
- m_zCoeffs((std::min)(matrix.rows(), matrix.cols())),
136
- m_temp(matrix.cols())
137
- {
128
+ : m_cpqr(matrix.derived()), m_zCoeffs((std::min)(matrix.rows(), matrix.cols())), m_temp(matrix.cols()) {
138
129
  computeInPlace();
139
- }
130
+ }
140
131
 
141
- #ifdef EIGEN_PARSED_BY_DOXYGEN
132
+ #ifdef EIGEN_PARSED_BY_DOXYGEN
142
133
  /** This method computes the minimum-norm solution X to a least squares
143
134
  * problem \f[\mathrm{minimize} \|A X - B\|, \f] where \b A is the matrix of
144
135
  * which \c *this is the complete orthogonal decomposition.
@@ -149,9 +140,8 @@ template <typename _MatrixType> class CompleteOrthogonalDecomposition
149
140
  *
150
141
  */
151
142
  template <typename Rhs>
152
- inline const Solve<CompleteOrthogonalDecomposition, Rhs> solve(
153
- const MatrixBase<Rhs>& b) const;
154
- #endif
143
+ inline const Solve<CompleteOrthogonalDecomposition, Rhs> solve(const MatrixBase<Rhs>& b) const;
144
+ #endif
155
145
 
156
146
  HouseholderSequenceType householderQ(void) const;
157
147
  HouseholderSequenceType matrixQ(void) const { return m_cpqr.householderQ(); }
@@ -177,7 +167,7 @@ template <typename _MatrixType> class CompleteOrthogonalDecomposition
177
167
  * \code matrixT().template triangularView<Upper>() \endcode
178
168
  * For rank-deficient matrices, use
179
169
  * \code
180
- * matrixR().topLeftCorner(rank(), rank()).template triangularView<Upper>()
170
+ * matrixT().topLeftCorner(rank(), rank()).template triangularView<Upper>()
181
171
  * \endcode
182
172
  */
183
173
  const MatrixType& matrixT() const { return m_cpqr.matrixQR(); }
@@ -191,9 +181,22 @@ template <typename _MatrixType> class CompleteOrthogonalDecomposition
191
181
  }
192
182
 
193
183
  /** \returns a const reference to the column permutation matrix */
194
- const PermutationType& colsPermutation() const {
195
- return m_cpqr.colsPermutation();
196
- }
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;
197
200
 
198
201
  /** \returns the absolute value of the determinant of the matrix of which
199
202
  * *this is the complete orthogonal decomposition. It has only linear
@@ -206,7 +209,7 @@ template <typename _MatrixType> class CompleteOrthogonalDecomposition
206
209
  * of large enough dimension, there is a risk of overflow/underflow.
207
210
  * One way to work around that is to use logAbsDeterminant() instead.
208
211
  *
209
- * \sa logAbsDeterminant(), MatrixBase::determinant()
212
+ * \sa determinant(), logAbsDeterminant(), MatrixBase::determinant()
210
213
  */
211
214
  typename MatrixType::RealScalar absDeterminant() const;
212
215
 
@@ -221,10 +224,25 @@ template <typename _MatrixType> class CompleteOrthogonalDecomposition
221
224
  * \note This method is useful to work around the risk of overflow/underflow
222
225
  * that's inherent to determinant computation.
223
226
  *
224
- * \sa absDeterminant(), MatrixBase::determinant()
227
+ * \sa determinant(), absDeterminant(), MatrixBase::determinant()
225
228
  */
226
229
  typename MatrixType::RealScalar logAbsDeterminant() const;
227
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
+
228
246
  /** \returns the rank of the matrix of which *this is the complete orthogonal
229
247
  * decomposition.
230
248
  *
@@ -275,8 +293,7 @@ template <typename _MatrixType> class CompleteOrthogonalDecomposition
275
293
  * \warning: Do not compute \c this->pseudoInverse()*rhs to solve a linear systems.
276
294
  * It is more efficient and numerically stable to call \c this->solve(rhs).
277
295
  */
278
- inline const Inverse<CompleteOrthogonalDecomposition> pseudoInverse() const
279
- {
296
+ inline const Inverse<CompleteOrthogonalDecomposition> pseudoInverse() const {
280
297
  eigen_assert(m_cpqr.m_isInitialized && "CompleteOrthogonalDecomposition is not initialized.");
281
298
  return Inverse<CompleteOrthogonalDecomposition>(*this);
282
299
  }
@@ -372,26 +389,25 @@ template <typename _MatrixType> class CompleteOrthogonalDecomposition
372
389
  template <typename RhsType, typename DstType>
373
390
  void _solve_impl(const RhsType& rhs, DstType& dst) const;
374
391
 
375
- template<bool Conjugate, typename RhsType, typename DstType>
376
- void _solve_impl_transposed(const RhsType &rhs, DstType &dst) const;
392
+ template <bool Conjugate, typename RhsType, typename DstType>
393
+ void _solve_impl_transposed(const RhsType& rhs, DstType& dst) const;
377
394
  #endif
378
395
 
379
396
  protected:
380
- static void check_template_parameters() {
381
- EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar);
382
- }
397
+ EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar)
383
398
 
384
- template<bool Transpose_, typename Rhs>
399
+ template <bool Transpose_, typename Rhs>
385
400
  void _check_solve_assertion(const Rhs& b) const {
386
- EIGEN_ONLY_USED_FOR_DEBUG(b);
387
- eigen_assert(m_cpqr.m_isInitialized && "CompleteOrthogonalDecomposition is not initialized.");
388
- eigen_assert((Transpose_?derived().cols():derived().rows())==b.rows() && "CompleteOrthogonalDecomposition::solve(): invalid number of rows of the right hand side matrix b");
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");
389
405
  }
390
406
 
391
407
  void computeInPlace();
392
408
 
393
409
  /** Overwrites \b rhs with \f$ \mathbf{Z} * \mathbf{rhs} \f$ or
394
- * \f$ \mathbf{\overline Z} * \mathbf{rhs} \f$ if \c Conjugate
410
+ * \f$ \mathbf{\overline Z} * \mathbf{rhs} \f$ if \c Conjugate
395
411
  * is set to \c true.
396
412
  */
397
413
  template <bool Conjugate, typename Rhs>
@@ -402,23 +418,32 @@ template <typename _MatrixType> class CompleteOrthogonalDecomposition
402
418
  template <typename Rhs>
403
419
  void applyZAdjointOnTheLeftInPlace(Rhs& rhs) const;
404
420
 
405
- ColPivHouseholderQR<MatrixType> m_cpqr;
421
+ ColPivHouseholderQR<MatrixType, PermutationIndex> m_cpqr;
406
422
  HCoeffsType m_zCoeffs;
407
423
  RowVectorType m_temp;
408
424
  };
409
425
 
410
- template <typename MatrixType>
411
- typename MatrixType::RealScalar
412
- 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 {
413
433
  return m_cpqr.absDeterminant();
414
434
  }
415
435
 
416
- template <typename MatrixType>
417
- typename MatrixType::RealScalar
418
- CompleteOrthogonalDecomposition<MatrixType>::logAbsDeterminant() const {
436
+ template <typename MatrixType, typename PermutationIndex>
437
+ typename MatrixType::RealScalar CompleteOrthogonalDecomposition<MatrixType, PermutationIndex>::logAbsDeterminant()
438
+ const {
419
439
  return m_cpqr.logAbsDeterminant();
420
440
  }
421
441
 
442
+ template <typename MatrixType, typename PermutationIndex>
443
+ typename MatrixType::Scalar CompleteOrthogonalDecomposition<MatrixType, PermutationIndex>::signDeterminant() const {
444
+ return m_cpqr.signDeterminant();
445
+ }
446
+
422
447
  /** Performs the complete orthogonal decomposition of the given matrix \a
423
448
  * matrix. The result of the factorization is stored into \c *this, and a
424
449
  * reference to \c *this is returned.
@@ -426,13 +451,9 @@ CompleteOrthogonalDecomposition<MatrixType>::logAbsDeterminant() const {
426
451
  * \sa class CompleteOrthogonalDecomposition,
427
452
  * CompleteOrthogonalDecomposition(const MatrixType&)
428
453
  */
429
- template <typename MatrixType>
430
- void CompleteOrthogonalDecomposition<MatrixType>::computeInPlace()
431
- {
432
- check_template_parameters();
433
-
434
- // the column permutation is stored as int indices, so just to be sure:
435
- 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());
436
457
 
437
458
  const Index rank = m_cpqr.rank();
438
459
  const Index cols = m_cpqr.cols();
@@ -457,59 +478,50 @@ void CompleteOrthogonalDecomposition<MatrixType>::computeInPlace()
457
478
  // Given the API for Householder reflectors, it is more convenient if
458
479
  // we swap the leading parts of columns k and r-1 (zero-based) to form
459
480
  // the matrix X_k = [X(0:k, k), X(0:k, r:n)]
460
- m_cpqr.m_qr.col(k).head(k + 1).swap(
461
- 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));
462
482
  }
463
483
  // Construct Householder reflector Z(k) to zero out the last row of X_k,
464
484
  // i.e. choose Z(k) such that
465
485
  // [X(k, k), X(k, r:n)] * Z(k) = [beta, 0, .., 0].
466
486
  RealScalar beta;
467
- m_cpqr.m_qr.row(k)
468
- .tail(cols - rank + 1)
469
- .makeHouseholderInPlace(m_zCoeffs(k), beta);
487
+ m_cpqr.m_qr.row(k).tail(cols - rank + 1).makeHouseholderInPlace(m_zCoeffs(k), beta);
470
488
  m_cpqr.m_qr(k, rank - 1) = beta;
471
489
  if (k > 0) {
472
490
  // Apply Z(k) to the first k rows of X_k
473
491
  m_cpqr.m_qr.topRightCorner(k, cols - rank + 1)
474
- .applyHouseholderOnTheRight(
475
- m_cpqr.m_qr.row(k).tail(cols - rank).adjoint(), m_zCoeffs(k),
476
- &m_temp(0));
492
+ .applyHouseholderOnTheRight(m_cpqr.m_qr.row(k).tail(cols - rank).adjoint(), m_zCoeffs(k), &m_temp(0));
477
493
  }
478
494
  if (k != rank - 1) {
479
495
  // Swap X(0:k,k) back to its proper location.
480
- m_cpqr.m_qr.col(k).head(k + 1).swap(
481
- 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));
482
497
  }
483
498
  }
484
499
  }
485
500
  }
486
501
 
487
- template <typename MatrixType>
502
+ template <typename MatrixType, typename PermutationIndex>
488
503
  template <bool Conjugate, typename Rhs>
489
- void CompleteOrthogonalDecomposition<MatrixType>::applyZOnTheLeftInPlace(
490
- Rhs& rhs) const {
504
+ void CompleteOrthogonalDecomposition<MatrixType, PermutationIndex>::applyZOnTheLeftInPlace(Rhs& rhs) const {
491
505
  const Index cols = this->cols();
492
506
  const Index nrhs = rhs.cols();
493
507
  const Index rank = this->rank();
494
508
  Matrix<typename Rhs::Scalar, Dynamic, 1> temp((std::max)(cols, nrhs));
495
- for (Index k = rank-1; k >= 0; --k) {
509
+ for (Index k = rank - 1; k >= 0; --k) {
496
510
  if (k != rank - 1) {
497
511
  rhs.row(k).swap(rhs.row(rank - 1));
498
512
  }
499
513
  rhs.middleRows(rank - 1, cols - rank + 1)
500
- .applyHouseholderOnTheLeft(
501
- matrixQTZ().row(k).tail(cols - rank).transpose().template conjugateIf<!Conjugate>(), zCoeffs().template conjugateIf<Conjugate>()(k),
502
- &temp(0));
514
+ .applyHouseholderOnTheLeft(matrixQTZ().row(k).tail(cols - rank).transpose().template conjugateIf<!Conjugate>(),
515
+ zCoeffs().template conjugateIf<Conjugate>()(k), &temp(0));
503
516
  if (k != rank - 1) {
504
517
  rhs.row(k).swap(rhs.row(rank - 1));
505
518
  }
506
519
  }
507
520
  }
508
521
 
509
- template <typename MatrixType>
522
+ template <typename MatrixType, typename PermutationIndex>
510
523
  template <typename Rhs>
511
- void CompleteOrthogonalDecomposition<MatrixType>::applyZAdjointOnTheLeftInPlace(
512
- Rhs& rhs) const {
524
+ void CompleteOrthogonalDecomposition<MatrixType, PermutationIndex>::applyZAdjointOnTheLeftInPlace(Rhs& rhs) const {
513
525
  const Index cols = this->cols();
514
526
  const Index nrhs = rhs.cols();
515
527
  const Index rank = this->rank();
@@ -519,9 +531,7 @@ void CompleteOrthogonalDecomposition<MatrixType>::applyZAdjointOnTheLeftInPlace(
519
531
  rhs.row(k).swap(rhs.row(rank - 1));
520
532
  }
521
533
  rhs.middleRows(rank - 1, cols - rank + 1)
522
- .applyHouseholderOnTheLeft(
523
- matrixQTZ().row(k).tail(cols - rank).adjoint(), zCoeffs()(k),
524
- &temp(0));
534
+ .applyHouseholderOnTheLeft(matrixQTZ().row(k).tail(cols - rank).adjoint(), zCoeffs()(k), &temp(0));
525
535
  if (k != rank - 1) {
526
536
  rhs.row(k).swap(rhs.row(rank - 1));
527
537
  }
@@ -529,10 +539,10 @@ void CompleteOrthogonalDecomposition<MatrixType>::applyZAdjointOnTheLeftInPlace(
529
539
  }
530
540
 
531
541
  #ifndef EIGEN_PARSED_BY_DOXYGEN
532
- template <typename _MatrixType>
542
+ template <typename MatrixType_, typename PermutationIndex_>
533
543
  template <typename RhsType, typename DstType>
534
- void CompleteOrthogonalDecomposition<_MatrixType>::_solve_impl(
535
- const RhsType& rhs, DstType& dst) const {
544
+ void CompleteOrthogonalDecomposition<MatrixType_, PermutationIndex_>::_solve_impl(const RhsType& rhs,
545
+ DstType& dst) const {
536
546
  const Index rank = this->rank();
537
547
  if (rank == 0) {
538
548
  dst.setZero();
@@ -544,10 +554,7 @@ void CompleteOrthogonalDecomposition<_MatrixType>::_solve_impl(
544
554
  c.applyOnTheLeft(matrixQ().setLength(rank).adjoint());
545
555
 
546
556
  // Solve T z = c(1:rank, :)
547
- dst.topRows(rank) = matrixT()
548
- .topLeftCorner(rank, rank)
549
- .template triangularView<Upper>()
550
- .solve(c.topRows(rank));
557
+ dst.topRows(rank) = matrixT().topLeftCorner(rank, rank).template triangularView<Upper>().solve(c.topRows(rank));
551
558
 
552
559
  const Index cols = this->cols();
553
560
  if (rank < cols) {
@@ -561,10 +568,10 @@ void CompleteOrthogonalDecomposition<_MatrixType>::_solve_impl(
561
568
  dst = colsPermutation() * dst;
562
569
  }
563
570
 
564
- template<typename _MatrixType>
565
- template<bool Conjugate, typename RhsType, typename DstType>
566
- void CompleteOrthogonalDecomposition<_MatrixType>::_solve_impl_transposed(const RhsType &rhs, DstType &dst) const
567
- {
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 {
568
575
  const Index rank = this->rank();
569
576
 
570
577
  if (rank == 0) {
@@ -572,60 +579,66 @@ void CompleteOrthogonalDecomposition<_MatrixType>::_solve_impl_transposed(const
572
579
  return;
573
580
  }
574
581
 
575
- typename RhsType::PlainObject c(colsPermutation().transpose()*rhs);
582
+ typename RhsType::PlainObject c(colsPermutation().transpose() * rhs);
576
583
 
577
584
  if (rank < cols()) {
578
585
  applyZOnTheLeftInPlace<!Conjugate>(c);
579
586
  }
580
587
 
581
- matrixT().topLeftCorner(rank, rank)
582
- .template triangularView<Upper>()
583
- .transpose().template conjugateIf<Conjugate>()
584
- .solveInPlace(c.topRows(rank));
588
+ matrixT()
589
+ .topLeftCorner(rank, rank)
590
+ .template triangularView<Upper>()
591
+ .transpose()
592
+ .template conjugateIf<Conjugate>()
593
+ .solveInPlace(c.topRows(rank));
585
594
 
586
595
  dst.topRows(rank) = c.topRows(rank);
587
- dst.bottomRows(rows()-rank).setZero();
596
+ dst.bottomRows(rows() - rank).setZero();
588
597
 
589
- dst.applyOnTheLeft(householderQ().setLength(rank).template conjugateIf<!Conjugate>() );
598
+ dst.applyOnTheLeft(householderQ().setLength(rank).template conjugateIf<!Conjugate>());
590
599
  }
591
600
  #endif
592
601
 
593
602
  namespace internal {
594
603
 
595
- template<typename MatrixType>
596
- struct traits<Inverse<CompleteOrthogonalDecomposition<MatrixType> > >
597
- : traits<typename Transpose<typename MatrixType::PlainObject>::PlainObject>
598
- {
604
+ template <typename MatrixType, typename PermutationIndex>
605
+ struct traits<Inverse<CompleteOrthogonalDecomposition<MatrixType, PermutationIndex>>>
606
+ : traits<typename Transpose<typename MatrixType::PlainObject>::PlainObject> {
599
607
  enum { Flags = 0 };
600
608
  };
601
609
 
602
- template<typename DstXprType, typename MatrixType>
603
- struct Assignment<DstXprType, Inverse<CompleteOrthogonalDecomposition<MatrixType> >, internal::assign_op<typename DstXprType::Scalar,typename CompleteOrthogonalDecomposition<MatrixType>::Scalar>, Dense2Dense>
604
- {
605
- typedef CompleteOrthogonalDecomposition<MatrixType> CodType;
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;
606
616
  typedef Inverse<CodType> SrcXprType;
607
- static void run(DstXprType &dst, const SrcXprType &src, const internal::assign_op<typename DstXprType::Scalar,typename CodType::Scalar> &)
608
- {
609
- typedef Matrix<typename CodType::Scalar, CodType::RowsAtCompileTime, CodType::RowsAtCompileTime, 0, CodType::MaxRowsAtCompileTime, CodType::MaxRowsAtCompileTime> IdentityMatrixType;
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;
610
622
  dst = src.nestedExpression().solve(IdentityMatrixType::Identity(src.cols(), src.cols()));
611
623
  }
612
624
  };
613
625
 
614
- } // end namespace internal
626
+ } // end namespace internal
615
627
 
616
628
  /** \returns the matrix Q as a sequence of householder transformations */
617
- template <typename MatrixType>
618
- typename CompleteOrthogonalDecomposition<MatrixType>::HouseholderSequenceType
619
- CompleteOrthogonalDecomposition<MatrixType>::householderQ() const {
629
+ template <typename MatrixType, typename PermutationIndex>
630
+ typename CompleteOrthogonalDecomposition<MatrixType, PermutationIndex>::HouseholderSequenceType
631
+ CompleteOrthogonalDecomposition<MatrixType, PermutationIndex>::householderQ() const {
620
632
  return m_cpqr.householderQ();
621
633
  }
622
634
 
623
635
  /** \return the complete orthogonal decomposition of \c *this.
624
- *
625
- * \sa class CompleteOrthogonalDecomposition
626
- */
636
+ *
637
+ * \sa class CompleteOrthogonalDecomposition
638
+ */
627
639
  template <typename Derived>
628
- const CompleteOrthogonalDecomposition<typename MatrixBase<Derived>::PlainObject>
640
+ template <typename PermutationIndex>
641
+ const CompleteOrthogonalDecomposition<typename MatrixBase<Derived>::PlainObject, PermutationIndex>
629
642
  MatrixBase<Derived>::completeOrthogonalDecomposition() const {
630
643
  return CompleteOrthogonalDecomposition<PlainObject>(eval());
631
644
  }