@smake/eigen 1.0.2 → 1.1.0

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 (287) hide show
  1. package/README.md +1 -1
  2. package/eigen/COPYING.APACHE +203 -0
  3. package/eigen/COPYING.BSD +26 -0
  4. package/eigen/COPYING.GPL +674 -0
  5. package/eigen/COPYING.LGPL +502 -0
  6. package/eigen/COPYING.MINPACK +51 -0
  7. package/eigen/COPYING.MPL2 +373 -0
  8. package/eigen/COPYING.README +18 -0
  9. package/eigen/Eigen/Cholesky +0 -1
  10. package/eigen/Eigen/Core +108 -266
  11. package/eigen/Eigen/Eigenvalues +0 -1
  12. package/eigen/Eigen/Geometry +3 -6
  13. package/eigen/Eigen/Householder +0 -1
  14. package/eigen/Eigen/Jacobi +0 -1
  15. package/eigen/Eigen/KLUSupport +41 -0
  16. package/eigen/Eigen/LU +2 -5
  17. package/eigen/Eigen/OrderingMethods +0 -3
  18. package/eigen/Eigen/PaStiXSupport +1 -0
  19. package/eigen/Eigen/PardisoSupport +0 -0
  20. package/eigen/Eigen/QR +0 -1
  21. package/eigen/Eigen/QtAlignedMalloc +0 -1
  22. package/eigen/Eigen/SVD +0 -1
  23. package/eigen/Eigen/Sparse +0 -2
  24. package/eigen/Eigen/SparseCholesky +0 -8
  25. package/eigen/Eigen/SparseLU +4 -0
  26. package/eigen/Eigen/src/Cholesky/LDLT.h +42 -27
  27. package/eigen/Eigen/src/Cholesky/LLT.h +39 -23
  28. package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +90 -47
  29. package/eigen/Eigen/src/Core/ArithmeticSequence.h +413 -0
  30. package/eigen/Eigen/src/Core/Array.h +99 -11
  31. package/eigen/Eigen/src/Core/ArrayBase.h +1 -1
  32. package/eigen/Eigen/src/Core/ArrayWrapper.h +21 -21
  33. package/eigen/Eigen/src/Core/Assign.h +1 -1
  34. package/eigen/Eigen/src/Core/AssignEvaluator.h +125 -50
  35. package/eigen/Eigen/src/Core/Assign_MKL.h +10 -10
  36. package/eigen/Eigen/src/Core/BandMatrix.h +16 -16
  37. package/eigen/Eigen/src/Core/Block.h +56 -60
  38. package/eigen/Eigen/src/Core/BooleanRedux.h +29 -31
  39. package/eigen/Eigen/src/Core/CommaInitializer.h +7 -3
  40. package/eigen/Eigen/src/Core/CoreEvaluators.h +325 -272
  41. package/eigen/Eigen/src/Core/CoreIterators.h +5 -0
  42. package/eigen/Eigen/src/Core/CwiseBinaryOp.h +21 -22
  43. package/eigen/Eigen/src/Core/CwiseNullaryOp.h +153 -18
  44. package/eigen/Eigen/src/Core/CwiseUnaryOp.h +6 -6
  45. package/eigen/Eigen/src/Core/CwiseUnaryView.h +12 -10
  46. package/eigen/Eigen/src/Core/DenseBase.h +128 -39
  47. package/eigen/Eigen/src/Core/DenseCoeffsBase.h +25 -21
  48. package/eigen/Eigen/src/Core/DenseStorage.h +150 -68
  49. package/eigen/Eigen/src/Core/Diagonal.h +21 -23
  50. package/eigen/Eigen/src/Core/DiagonalMatrix.h +50 -2
  51. package/eigen/Eigen/src/Core/DiagonalProduct.h +1 -1
  52. package/eigen/Eigen/src/Core/Dot.h +10 -10
  53. package/eigen/Eigen/src/Core/EigenBase.h +10 -9
  54. package/eigen/Eigen/src/Core/ForceAlignedAccess.h +8 -4
  55. package/eigen/Eigen/src/Core/Fuzzy.h +3 -3
  56. package/eigen/Eigen/src/Core/GeneralProduct.h +20 -10
  57. package/eigen/Eigen/src/Core/GenericPacketMath.h +597 -147
  58. package/eigen/Eigen/src/Core/GlobalFunctions.h +40 -33
  59. package/eigen/Eigen/src/Core/IO.h +40 -7
  60. package/eigen/Eigen/src/Core/IndexedView.h +237 -0
  61. package/eigen/Eigen/src/Core/Inverse.h +9 -10
  62. package/eigen/Eigen/src/Core/Map.h +7 -7
  63. package/eigen/Eigen/src/Core/MapBase.h +5 -3
  64. package/eigen/Eigen/src/Core/MathFunctions.h +756 -120
  65. package/eigen/Eigen/src/Core/MathFunctionsImpl.h +118 -19
  66. package/eigen/Eigen/src/Core/Matrix.h +131 -25
  67. package/eigen/Eigen/src/Core/MatrixBase.h +19 -2
  68. package/eigen/Eigen/src/Core/NestByValue.h +25 -50
  69. package/eigen/Eigen/src/Core/NoAlias.h +4 -3
  70. package/eigen/Eigen/src/Core/NumTraits.h +107 -20
  71. package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +232 -0
  72. package/eigen/Eigen/src/Core/PermutationMatrix.h +3 -3
  73. package/eigen/Eigen/src/Core/PlainObjectBase.h +145 -54
  74. package/eigen/Eigen/src/Core/Product.h +30 -25
  75. package/eigen/Eigen/src/Core/ProductEvaluators.h +183 -142
  76. package/eigen/Eigen/src/Core/Random.h +37 -1
  77. package/eigen/Eigen/src/Core/Redux.h +180 -170
  78. package/eigen/Eigen/src/Core/Ref.h +118 -21
  79. package/eigen/Eigen/src/Core/Replicate.h +8 -8
  80. package/eigen/Eigen/src/Core/Reshaped.h +454 -0
  81. package/eigen/Eigen/src/Core/ReturnByValue.h +7 -5
  82. package/eigen/Eigen/src/Core/Reverse.h +18 -12
  83. package/eigen/Eigen/src/Core/Select.h +8 -6
  84. package/eigen/Eigen/src/Core/SelfAdjointView.h +33 -20
  85. package/eigen/Eigen/src/Core/Solve.h +14 -14
  86. package/eigen/Eigen/src/Core/SolveTriangular.h +13 -13
  87. package/eigen/Eigen/src/Core/SolverBase.h +41 -3
  88. package/eigen/Eigen/src/Core/StableNorm.h +100 -70
  89. package/eigen/Eigen/src/Core/StlIterators.h +463 -0
  90. package/eigen/Eigen/src/Core/Stride.h +9 -4
  91. package/eigen/Eigen/src/Core/Swap.h +5 -4
  92. package/eigen/Eigen/src/Core/Transpose.h +86 -27
  93. package/eigen/Eigen/src/Core/Transpositions.h +26 -8
  94. package/eigen/Eigen/src/Core/TriangularMatrix.h +88 -72
  95. package/eigen/Eigen/src/Core/VectorBlock.h +5 -5
  96. package/eigen/Eigen/src/Core/VectorwiseOp.h +159 -70
  97. package/eigen/Eigen/src/Core/Visitor.h +137 -29
  98. package/eigen/Eigen/src/Core/arch/AVX/Complex.h +50 -129
  99. package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +126 -337
  100. package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +1092 -155
  101. package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +65 -1
  102. package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +422 -0
  103. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +186 -213
  104. package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1250 -252
  105. package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +89 -0
  106. package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +152 -165
  107. package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +19 -251
  108. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2937 -0
  109. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +221 -0
  110. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +629 -0
  111. package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +2042 -392
  112. package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +235 -80
  113. package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +700 -0
  114. package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +102 -14
  115. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1649 -0
  116. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +110 -0
  117. package/eigen/Eigen/src/Core/arch/Default/Half.h +942 -0
  118. package/eigen/Eigen/src/Core/arch/Default/Settings.h +1 -1
  119. package/eigen/Eigen/src/Core/arch/Default/TypeCasting.h +120 -0
  120. package/eigen/Eigen/src/Core/arch/{CUDA → GPU}/MathFunctions.h +16 -4
  121. package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1685 -0
  122. package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +80 -0
  123. package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
  124. package/eigen/Eigen/src/Core/arch/MSA/Complex.h +648 -0
  125. package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +387 -0
  126. package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1233 -0
  127. package/eigen/Eigen/src/Core/arch/NEON/Complex.h +313 -219
  128. package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +183 -0
  129. package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +54 -70
  130. package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +4376 -549
  131. package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1419 -0
  132. package/eigen/Eigen/src/Core/arch/SSE/Complex.h +59 -179
  133. package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +65 -428
  134. package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +893 -283
  135. package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +65 -0
  136. package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +44 -0
  137. package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +752 -0
  138. package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +49 -0
  139. package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +232 -0
  140. package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +301 -0
  141. package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +670 -0
  142. package/eigen/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +694 -0
  143. package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +85 -0
  144. package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +212 -183
  145. package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +101 -5
  146. package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +510 -395
  147. package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +11 -2
  148. package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +112 -46
  149. package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +31 -30
  150. package/eigen/Eigen/src/Core/functors/StlFunctors.h +32 -2
  151. package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +354 -15
  152. package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1073 -585
  153. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +29 -7
  154. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +4 -4
  155. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +1 -1
  156. package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +382 -483
  157. package/eigen/Eigen/src/Core/products/Parallelizer.h +23 -9
  158. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +23 -6
  159. package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +8 -6
  160. package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +2 -2
  161. package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +5 -4
  162. package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +3 -3
  163. package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +5 -3
  164. package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +13 -10
  165. package/eigen/Eigen/src/Core/util/BlasUtil.h +208 -124
  166. package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +512 -0
  167. package/eigen/Eigen/src/Core/util/Constants.h +25 -9
  168. package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +14 -2
  169. package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +28 -4
  170. package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +186 -0
  171. package/eigen/Eigen/src/Core/util/IntegralConstant.h +272 -0
  172. package/eigen/Eigen/src/Core/util/MKL_support.h +8 -1
  173. package/eigen/Eigen/src/Core/util/Macros.h +661 -250
  174. package/eigen/Eigen/src/Core/util/Memory.h +222 -52
  175. package/eigen/Eigen/src/Core/util/Meta.h +349 -105
  176. package/eigen/Eigen/src/Core/util/ReshapedHelper.h +51 -0
  177. package/eigen/Eigen/src/Core/util/StaticAssert.h +8 -5
  178. package/eigen/Eigen/src/Core/util/SymbolicIndex.h +293 -0
  179. package/eigen/Eigen/src/Core/util/XprHelper.h +48 -30
  180. package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +1 -1
  181. package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +1 -1
  182. package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +2 -2
  183. package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +1 -1
  184. package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +2 -2
  185. package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +2 -2
  186. package/eigen/Eigen/src/Eigenvalues/RealQZ.h +9 -6
  187. package/eigen/Eigen/src/Eigenvalues/RealSchur.h +10 -5
  188. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +75 -42
  189. package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +20 -15
  190. package/eigen/Eigen/src/Geometry/AlignedBox.h +99 -5
  191. package/eigen/Eigen/src/Geometry/AngleAxis.h +4 -4
  192. package/eigen/Eigen/src/Geometry/EulerAngles.h +3 -3
  193. package/eigen/Eigen/src/Geometry/Homogeneous.h +15 -11
  194. package/eigen/Eigen/src/Geometry/Hyperplane.h +1 -1
  195. package/eigen/Eigen/src/Geometry/OrthoMethods.h +3 -2
  196. package/eigen/Eigen/src/Geometry/ParametrizedLine.h +39 -2
  197. package/eigen/Eigen/src/Geometry/Quaternion.h +52 -14
  198. package/eigen/Eigen/src/Geometry/Rotation2D.h +3 -3
  199. package/eigen/Eigen/src/Geometry/Scaling.h +22 -4
  200. package/eigen/Eigen/src/Geometry/Transform.h +86 -65
  201. package/eigen/Eigen/src/Geometry/Translation.h +6 -6
  202. package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +168 -0
  203. package/eigen/Eigen/src/Householder/BlockHouseholder.h +9 -2
  204. package/eigen/Eigen/src/Householder/Householder.h +8 -4
  205. package/eigen/Eigen/src/Householder/HouseholderSequence.h +123 -48
  206. package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +15 -15
  207. package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +7 -23
  208. package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +5 -22
  209. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +41 -47
  210. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +51 -60
  211. package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +70 -20
  212. package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +2 -20
  213. package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +11 -9
  214. package/eigen/Eigen/src/Jacobi/Jacobi.h +31 -10
  215. package/eigen/Eigen/src/KLUSupport/KLUSupport.h +358 -0
  216. package/eigen/Eigen/src/LU/Determinant.h +35 -19
  217. package/eigen/Eigen/src/LU/FullPivLU.h +29 -43
  218. package/eigen/Eigen/src/LU/InverseImpl.h +25 -8
  219. package/eigen/Eigen/src/LU/PartialPivLU.h +67 -57
  220. package/eigen/Eigen/src/LU/arch/InverseSize4.h +351 -0
  221. package/eigen/Eigen/src/OrderingMethods/Amd.h +7 -17
  222. package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +297 -277
  223. package/eigen/Eigen/src/OrderingMethods/Ordering.h +6 -10
  224. package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +1 -1
  225. package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +10 -9
  226. package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +41 -20
  227. package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +100 -27
  228. package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +59 -22
  229. package/eigen/Eigen/src/QR/HouseholderQR.h +48 -23
  230. package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +25 -3
  231. package/eigen/Eigen/src/SVD/BDCSVD.h +137 -48
  232. package/eigen/Eigen/src/SVD/JacobiSVD.h +22 -14
  233. package/eigen/Eigen/src/SVD/SVDBase.h +82 -21
  234. package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +3 -3
  235. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +16 -8
  236. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +11 -36
  237. package/eigen/Eigen/src/SparseCore/CompressedStorage.h +16 -0
  238. package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +6 -6
  239. package/eigen/Eigen/src/SparseCore/SparseAssign.h +81 -27
  240. package/eigen/Eigen/src/SparseCore/SparseBlock.h +25 -57
  241. package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +40 -11
  242. package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +11 -15
  243. package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +2 -2
  244. package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +30 -8
  245. package/eigen/Eigen/src/SparseCore/SparseMatrix.h +124 -10
  246. package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +5 -12
  247. package/eigen/Eigen/src/SparseCore/SparseProduct.h +13 -1
  248. package/eigen/Eigen/src/SparseCore/SparseRef.h +7 -7
  249. package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +3 -0
  250. package/eigen/Eigen/src/SparseCore/SparseUtil.h +8 -0
  251. package/eigen/Eigen/src/SparseCore/SparseVector.h +1 -1
  252. package/eigen/Eigen/src/SparseLU/SparseLU.h +160 -10
  253. package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +1 -1
  254. package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +76 -2
  255. package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +2 -2
  256. package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +1 -1
  257. package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +1 -1
  258. package/eigen/Eigen/src/SparseQR/SparseQR.h +19 -6
  259. package/eigen/Eigen/src/StlSupport/StdDeque.h +2 -14
  260. package/eigen/Eigen/src/StlSupport/StdList.h +2 -2
  261. package/eigen/Eigen/src/StlSupport/StdVector.h +2 -2
  262. package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +6 -8
  263. package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +175 -39
  264. package/eigen/Eigen/src/misc/lapacke.h +5 -4
  265. package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +27 -1
  266. package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +155 -11
  267. package/eigen/Eigen/src/plugins/BlockMethods.h +626 -242
  268. package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +14 -0
  269. package/eigen/Eigen/src/plugins/IndexedViewMethods.h +262 -0
  270. package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +4 -4
  271. package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +10 -0
  272. package/eigen/Eigen/src/plugins/ReshapedMethods.h +149 -0
  273. package/eigen/README.md +5 -0
  274. package/lib/LibEigen.d.ts +4 -0
  275. package/lib/LibEigen.js +14 -0
  276. package/lib/index.d.ts +1 -1
  277. package/lib/index.js +7 -3
  278. package/package.json +2 -10
  279. package/eigen/Eigen/CMakeLists.txt +0 -19
  280. package/eigen/Eigen/src/Core/arch/CUDA/Half.h +0 -675
  281. package/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +0 -333
  282. package/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +0 -1124
  283. package/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +0 -212
  284. package/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +0 -161
  285. package/eigen/Eigen/src/LU/arch/Inverse_SSE.h +0 -338
  286. package/lib/eigen.d.ts +0 -2
  287. package/lib/eigen.js +0 -15
@@ -31,15 +31,13 @@ void ordering_helper_at_plus_a(const MatrixType& A, MatrixType& symmat)
31
31
  for (int i = 0; i < C.rows(); i++)
32
32
  {
33
33
  for (typename MatrixType::InnerIterator it(C, i); it; ++it)
34
- it.valueRef() = 0.0;
34
+ it.valueRef() = typename MatrixType::Scalar(0);
35
35
  }
36
36
  symmat = C + A;
37
37
  }
38
38
 
39
39
  }
40
40
 
41
- #ifndef EIGEN_MPL2_ONLY
42
-
43
41
  /** \ingroup OrderingMethods_Module
44
42
  * \class AMDOrdering
45
43
  *
@@ -81,8 +79,6 @@ class AMDOrdering
81
79
  }
82
80
  };
83
81
 
84
- #endif // EIGEN_MPL2_ONLY
85
-
86
82
  /** \ingroup OrderingMethods_Module
87
83
  * \class NaturalOrdering
88
84
  *
@@ -133,17 +129,17 @@ class COLAMDOrdering
133
129
  StorageIndex n = StorageIndex(mat.cols());
134
130
  StorageIndex nnz = StorageIndex(mat.nonZeros());
135
131
  // Get the recommended value of Alen to be used by colamd
136
- StorageIndex Alen = internal::colamd_recommended(nnz, m, n);
132
+ StorageIndex Alen = internal::Colamd::recommended(nnz, m, n);
137
133
  // Set the default parameters
138
- double knobs [COLAMD_KNOBS];
139
- StorageIndex stats [COLAMD_STATS];
140
- internal::colamd_set_defaults(knobs);
134
+ double knobs [internal::Colamd::NKnobs];
135
+ StorageIndex stats [internal::Colamd::NStats];
136
+ internal::Colamd::set_defaults(knobs);
141
137
 
142
138
  IndexVector p(n+1), A(Alen);
143
139
  for(StorageIndex i=0; i <= n; i++) p(i) = mat.outerIndexPtr()[i];
144
140
  for(StorageIndex i=0; i < nnz; i++) A(i) = mat.innerIndexPtr()[i];
145
141
  // Call Colamd routine to compute the ordering
146
- StorageIndex info = internal::colamd(m, n, Alen, A.data(), p.data(), knobs, stats);
142
+ StorageIndex info = internal::Colamd::compute_ordering(m, n, Alen, A.data(), p.data(), knobs, stats);
147
143
  EIGEN_UNUSED_VARIABLE(info);
148
144
  eigen_assert( info && "COLAMD failed " );
149
145
 
@@ -203,7 +203,7 @@ class PastixBase : public SparseSolverBase<Derived>
203
203
 
204
204
  /** \brief Reports whether previous computation was successful.
205
205
  *
206
- * \returns \c Success if computation was succesful,
206
+ * \returns \c Success if computation was successful,
207
207
  * \c NumericalIssue if the PaStiX reports a problem
208
208
  * \c InvalidInput if the input matrix is invalid
209
209
  *
@@ -123,6 +123,7 @@ class PardisoImpl : public SparseSolverBase<Derived>
123
123
  };
124
124
 
125
125
  PardisoImpl()
126
+ : m_analysisIsOk(false), m_factorizationIsOk(false)
126
127
  {
127
128
  eigen_assert((sizeof(StorageIndex) >= sizeof(_INTEGER_t) && sizeof(StorageIndex) <= 8) && "Non-supported index type");
128
129
  m_iparm.setZero();
@@ -140,7 +141,7 @@ class PardisoImpl : public SparseSolverBase<Derived>
140
141
 
141
142
  /** \brief Reports whether previous computation was successful.
142
143
  *
143
- * \returns \c Success if computation was succesful,
144
+ * \returns \c Success if computation was successful,
144
145
  * \c NumericalIssue if the matrix appears to be negative.
145
146
  */
146
147
  ComputationInfo info() const
@@ -192,8 +193,7 @@ class PardisoImpl : public SparseSolverBase<Derived>
192
193
  void pardisoInit(int type)
193
194
  {
194
195
  m_type = type;
195
- EIGEN_USING_STD_MATH(abs);
196
- bool symmetric = abs(m_type) < 10;
196
+ bool symmetric = std::abs(m_type) < 10;
197
197
  m_iparm[0] = 1; // No solver default
198
198
  m_iparm[1] = 2; // use Metis for the ordering
199
199
  m_iparm[2] = 0; // Reserved. Set to zero. (??Numbers of processors, value of OMP_NUM_THREADS??)
@@ -386,14 +386,15 @@ class PardisoLU : public PardisoImpl< PardisoLU<MatrixType> >
386
386
  {
387
387
  protected:
388
388
  typedef PardisoImpl<PardisoLU> Base;
389
- typedef typename Base::Scalar Scalar;
390
- typedef typename Base::RealScalar RealScalar;
391
389
  using Base::pardisoInit;
392
390
  using Base::m_matrix;
393
391
  friend class PardisoImpl< PardisoLU<MatrixType> >;
394
392
 
395
393
  public:
396
394
 
395
+ typedef typename Base::Scalar Scalar;
396
+ typedef typename Base::RealScalar RealScalar;
397
+
397
398
  using Base::compute;
398
399
  using Base::solve;
399
400
 
@@ -441,14 +442,14 @@ class PardisoLLT : public PardisoImpl< PardisoLLT<MatrixType,_UpLo> >
441
442
  {
442
443
  protected:
443
444
  typedef PardisoImpl< PardisoLLT<MatrixType,_UpLo> > Base;
444
- typedef typename Base::Scalar Scalar;
445
- typedef typename Base::RealScalar RealScalar;
446
445
  using Base::pardisoInit;
447
446
  using Base::m_matrix;
448
447
  friend class PardisoImpl< PardisoLLT<MatrixType,_UpLo> >;
449
448
 
450
449
  public:
451
450
 
451
+ typedef typename Base::Scalar Scalar;
452
+ typedef typename Base::RealScalar RealScalar;
452
453
  typedef typename Base::StorageIndex StorageIndex;
453
454
  enum { UpLo = _UpLo };
454
455
  using Base::compute;
@@ -504,14 +505,14 @@ class PardisoLDLT : public PardisoImpl< PardisoLDLT<MatrixType,Options> >
504
505
  {
505
506
  protected:
506
507
  typedef PardisoImpl< PardisoLDLT<MatrixType,Options> > Base;
507
- typedef typename Base::Scalar Scalar;
508
- typedef typename Base::RealScalar RealScalar;
509
508
  using Base::pardisoInit;
510
509
  using Base::m_matrix;
511
510
  friend class PardisoImpl< PardisoLDLT<MatrixType,Options> >;
512
511
 
513
512
  public:
514
513
 
514
+ typedef typename Base::Scalar Scalar;
515
+ typedef typename Base::RealScalar RealScalar;
515
516
  typedef typename Base::StorageIndex StorageIndex;
516
517
  using Base::compute;
517
518
  enum { UpLo = Options&(Upper|Lower) };
@@ -17,6 +17,9 @@ namespace internal {
17
17
  template<typename _MatrixType> struct traits<ColPivHouseholderQR<_MatrixType> >
18
18
  : traits<_MatrixType>
19
19
  {
20
+ typedef MatrixXpr XprKind;
21
+ typedef SolverStorage StorageKind;
22
+ typedef int StorageIndex;
20
23
  enum { Flags = 0 };
21
24
  };
22
25
 
@@ -46,20 +49,19 @@ template<typename _MatrixType> struct traits<ColPivHouseholderQR<_MatrixType> >
46
49
  * \sa MatrixBase::colPivHouseholderQr()
47
50
  */
48
51
  template<typename _MatrixType> class ColPivHouseholderQR
52
+ : public SolverBase<ColPivHouseholderQR<_MatrixType> >
49
53
  {
50
54
  public:
51
55
 
52
56
  typedef _MatrixType MatrixType;
57
+ typedef SolverBase<ColPivHouseholderQR> Base;
58
+ friend class SolverBase<ColPivHouseholderQR>;
59
+
60
+ EIGEN_GENERIC_PUBLIC_INTERFACE(ColPivHouseholderQR)
53
61
  enum {
54
- RowsAtCompileTime = MatrixType::RowsAtCompileTime,
55
- ColsAtCompileTime = MatrixType::ColsAtCompileTime,
56
62
  MaxRowsAtCompileTime = MatrixType::MaxRowsAtCompileTime,
57
63
  MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime
58
64
  };
59
- typedef typename MatrixType::Scalar Scalar;
60
- typedef typename MatrixType::RealScalar RealScalar;
61
- // FIXME should be int
62
- typedef typename MatrixType::StorageIndex StorageIndex;
63
65
  typedef typename internal::plain_diag_type<MatrixType>::type HCoeffsType;
64
66
  typedef PermutationMatrix<ColsAtCompileTime, MaxColsAtCompileTime> PermutationType;
65
67
  typedef typename internal::plain_row_type<MatrixType, Index>::type IntRowVectorType;
@@ -156,6 +158,7 @@ template<typename _MatrixType> class ColPivHouseholderQR
156
158
  computeInPlace();
157
159
  }
158
160
 
161
+ #ifdef EIGEN_PARSED_BY_DOXYGEN
159
162
  /** This method finds a solution x to the equation Ax=b, where A is the matrix of which
160
163
  * *this is the QR decomposition, if any exists.
161
164
  *
@@ -172,11 +175,8 @@ template<typename _MatrixType> class ColPivHouseholderQR
172
175
  */
173
176
  template<typename Rhs>
174
177
  inline const Solve<ColPivHouseholderQR, Rhs>
175
- solve(const MatrixBase<Rhs>& b) const
176
- {
177
- eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized.");
178
- return Solve<ColPivHouseholderQR, Rhs>(*this, b.derived());
179
- }
178
+ solve(const MatrixBase<Rhs>& b) const;
179
+ #endif
180
180
 
181
181
  HouseholderSequenceType householderQ() const;
182
182
  HouseholderSequenceType matrixQ() const
@@ -402,7 +402,7 @@ template<typename _MatrixType> class ColPivHouseholderQR
402
402
  */
403
403
  RealScalar maxPivot() const { return m_maxpivot; }
404
404
 
405
- /** \brief Reports whether the QR factorization was succesful.
405
+ /** \brief Reports whether the QR factorization was successful.
406
406
  *
407
407
  * \note This function always returns \c Success. It is provided for compatibility
408
408
  * with other factorization routines.
@@ -416,8 +416,10 @@ template<typename _MatrixType> class ColPivHouseholderQR
416
416
 
417
417
  #ifndef EIGEN_PARSED_BY_DOXYGEN
418
418
  template<typename RhsType, typename DstType>
419
- EIGEN_DEVICE_FUNC
420
419
  void _solve_impl(const RhsType &rhs, DstType &dst) const;
420
+
421
+ template<bool Conjugate, typename RhsType, typename DstType>
422
+ void _solve_impl_transposed(const RhsType &rhs, DstType &dst) const;
421
423
  #endif
422
424
 
423
425
  protected:
@@ -584,8 +586,6 @@ template<typename _MatrixType>
584
586
  template<typename RhsType, typename DstType>
585
587
  void ColPivHouseholderQR<_MatrixType>::_solve_impl(const RhsType &rhs, DstType &dst) const
586
588
  {
587
- eigen_assert(rhs.rows() == rows());
588
-
589
589
  const Index nonzero_pivots = nonzeroPivots();
590
590
 
591
591
  if(nonzero_pivots == 0)
@@ -596,11 +596,7 @@ void ColPivHouseholderQR<_MatrixType>::_solve_impl(const RhsType &rhs, DstType &
596
596
 
597
597
  typename RhsType::PlainObject c(rhs);
598
598
 
599
- // Note that the matrix Q = H_0^* H_1^*... so its inverse is Q^* = (H_0 H_1 ...)^T
600
- c.applyOnTheLeft(householderSequence(m_qr, m_hCoeffs)
601
- .setLength(nonzero_pivots)
602
- .transpose()
603
- );
599
+ c.applyOnTheLeft(householderQ().setLength(nonzero_pivots).adjoint() );
604
600
 
605
601
  m_qr.topLeftCorner(nonzero_pivots, nonzero_pivots)
606
602
  .template triangularView<Upper>()
@@ -609,6 +605,31 @@ void ColPivHouseholderQR<_MatrixType>::_solve_impl(const RhsType &rhs, DstType &
609
605
  for(Index i = 0; i < nonzero_pivots; ++i) dst.row(m_colsPermutation.indices().coeff(i)) = c.row(i);
610
606
  for(Index i = nonzero_pivots; i < cols(); ++i) dst.row(m_colsPermutation.indices().coeff(i)).setZero();
611
607
  }
608
+
609
+ template<typename _MatrixType>
610
+ template<bool Conjugate, typename RhsType, typename DstType>
611
+ void ColPivHouseholderQR<_MatrixType>::_solve_impl_transposed(const RhsType &rhs, DstType &dst) const
612
+ {
613
+ const Index nonzero_pivots = nonzeroPivots();
614
+
615
+ if(nonzero_pivots == 0)
616
+ {
617
+ dst.setZero();
618
+ return;
619
+ }
620
+
621
+ typename RhsType::PlainObject c(m_colsPermutation.transpose()*rhs);
622
+
623
+ m_qr.topLeftCorner(nonzero_pivots, nonzero_pivots)
624
+ .template triangularView<Upper>()
625
+ .transpose().template conjugateIf<Conjugate>()
626
+ .solveInPlace(c.topRows(nonzero_pivots));
627
+
628
+ dst.topRows(nonzero_pivots) = c.topRows(nonzero_pivots);
629
+ dst.bottomRows(rows()-nonzero_pivots).setZero();
630
+
631
+ dst.applyOnTheLeft(householderQ().setLength(nonzero_pivots).template conjugateIf<!Conjugate>() );
632
+ }
612
633
  #endif
613
634
 
614
635
  namespace internal {
@@ -16,6 +16,9 @@ namespace internal {
16
16
  template <typename _MatrixType>
17
17
  struct traits<CompleteOrthogonalDecomposition<_MatrixType> >
18
18
  : traits<_MatrixType> {
19
+ typedef MatrixXpr XprKind;
20
+ typedef SolverStorage StorageKind;
21
+ typedef int StorageIndex;
19
22
  enum { Flags = 0 };
20
23
  };
21
24
 
@@ -44,19 +47,21 @@ struct traits<CompleteOrthogonalDecomposition<_MatrixType> >
44
47
  *
45
48
  * \sa MatrixBase::completeOrthogonalDecomposition()
46
49
  */
47
- template <typename _MatrixType>
48
- class CompleteOrthogonalDecomposition {
50
+ template <typename _MatrixType> class CompleteOrthogonalDecomposition
51
+ : public SolverBase<CompleteOrthogonalDecomposition<_MatrixType> >
52
+ {
49
53
  public:
50
54
  typedef _MatrixType MatrixType;
55
+ typedef SolverBase<CompleteOrthogonalDecomposition> Base;
56
+
57
+ template<typename Derived>
58
+ friend struct internal::solve_assertion;
59
+
60
+ EIGEN_GENERIC_PUBLIC_INTERFACE(CompleteOrthogonalDecomposition)
51
61
  enum {
52
- RowsAtCompileTime = MatrixType::RowsAtCompileTime,
53
- ColsAtCompileTime = MatrixType::ColsAtCompileTime,
54
62
  MaxRowsAtCompileTime = MatrixType::MaxRowsAtCompileTime,
55
63
  MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime
56
64
  };
57
- typedef typename MatrixType::Scalar Scalar;
58
- typedef typename MatrixType::RealScalar RealScalar;
59
- typedef typename MatrixType::StorageIndex StorageIndex;
60
65
  typedef typename internal::plain_diag_type<MatrixType>::type HCoeffsType;
61
66
  typedef PermutationMatrix<ColsAtCompileTime, MaxColsAtCompileTime>
62
67
  PermutationType;
@@ -131,9 +136,9 @@ class CompleteOrthogonalDecomposition {
131
136
  m_temp(matrix.cols())
132
137
  {
133
138
  computeInPlace();
134
- }
135
-
139
+ }
136
140
 
141
+ #ifdef EIGEN_PARSED_BY_DOXYGEN
137
142
  /** This method computes the minimum-norm solution X to a least squares
138
143
  * problem \f[\mathrm{minimize} \|A X - B\|, \f] where \b A is the matrix of
139
144
  * which \c *this is the complete orthogonal decomposition.
@@ -145,11 +150,8 @@ class CompleteOrthogonalDecomposition {
145
150
  */
146
151
  template <typename Rhs>
147
152
  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
- }
153
+ const MatrixBase<Rhs>& b) const;
154
+ #endif
153
155
 
154
156
  HouseholderSequenceType householderQ(void) const;
155
157
  HouseholderSequenceType matrixQ(void) const { return m_cpqr.householderQ(); }
@@ -158,8 +160,8 @@ class CompleteOrthogonalDecomposition {
158
160
  */
159
161
  MatrixType matrixZ() const {
160
162
  MatrixType Z = MatrixType::Identity(m_cpqr.cols(), m_cpqr.cols());
161
- applyZAdjointOnTheLeftInPlace(Z);
162
- return Z.adjoint();
163
+ applyZOnTheLeftInPlace<false>(Z);
164
+ return Z;
163
165
  }
164
166
 
165
167
  /** \returns a reference to the matrix where the complete orthogonal
@@ -275,6 +277,7 @@ class CompleteOrthogonalDecomposition {
275
277
  */
276
278
  inline const Inverse<CompleteOrthogonalDecomposition> pseudoInverse() const
277
279
  {
280
+ eigen_assert(m_cpqr.m_isInitialized && "CompleteOrthogonalDecomposition is not initialized.");
278
281
  return Inverse<CompleteOrthogonalDecomposition>(*this);
279
282
  }
280
283
 
@@ -353,7 +356,7 @@ class CompleteOrthogonalDecomposition {
353
356
  inline RealScalar maxPivot() const { return m_cpqr.maxPivot(); }
354
357
 
355
358
  /** \brief Reports whether the complete orthogonal decomposition was
356
- * succesful.
359
+ * successful.
357
360
  *
358
361
  * \note This function always returns \c Success. It is provided for
359
362
  * compatibility
@@ -367,7 +370,10 @@ class CompleteOrthogonalDecomposition {
367
370
 
368
371
  #ifndef EIGEN_PARSED_BY_DOXYGEN
369
372
  template <typename RhsType, typename DstType>
370
- EIGEN_DEVICE_FUNC void _solve_impl(const RhsType& rhs, DstType& dst) const;
373
+ void _solve_impl(const RhsType& rhs, DstType& dst) const;
374
+
375
+ template<bool Conjugate, typename RhsType, typename DstType>
376
+ void _solve_impl_transposed(const RhsType &rhs, DstType &dst) const;
371
377
  #endif
372
378
 
373
379
  protected:
@@ -375,8 +381,22 @@ class CompleteOrthogonalDecomposition {
375
381
  EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar);
376
382
  }
377
383
 
384
+ template<bool Transpose_, typename Rhs>
385
+ 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");
389
+ }
390
+
378
391
  void computeInPlace();
379
392
 
393
+ /** Overwrites \b rhs with \f$ \mathbf{Z} * \mathbf{rhs} \f$ or
394
+ * \f$ \mathbf{\overline Z} * \mathbf{rhs} \f$ if \c Conjugate
395
+ * is set to \c true.
396
+ */
397
+ template <bool Conjugate, typename Rhs>
398
+ void applyZOnTheLeftInPlace(Rhs& rhs) const;
399
+
380
400
  /** Overwrites \b rhs with \f$ \mathbf{Z}^* * \mathbf{rhs} \f$.
381
401
  */
382
402
  template <typename Rhs>
@@ -452,7 +472,7 @@ void CompleteOrthogonalDecomposition<MatrixType>::computeInPlace()
452
472
  // Apply Z(k) to the first k rows of X_k
453
473
  m_cpqr.m_qr.topRightCorner(k, cols - rank + 1)
454
474
  .applyHouseholderOnTheRight(
455
- m_cpqr.m_qr.row(k).tail(cols - rank).transpose(), m_zCoeffs(k),
475
+ m_cpqr.m_qr.row(k).tail(cols - rank).adjoint(), m_zCoeffs(k),
456
476
  &m_temp(0));
457
477
  }
458
478
  if (k != rank - 1) {
@@ -464,6 +484,28 @@ void CompleteOrthogonalDecomposition<MatrixType>::computeInPlace()
464
484
  }
465
485
  }
466
486
 
487
+ template <typename MatrixType>
488
+ template <bool Conjugate, typename Rhs>
489
+ void CompleteOrthogonalDecomposition<MatrixType>::applyZOnTheLeftInPlace(
490
+ Rhs& rhs) const {
491
+ const Index cols = this->cols();
492
+ const Index nrhs = rhs.cols();
493
+ const Index rank = this->rank();
494
+ Matrix<typename Rhs::Scalar, Dynamic, 1> temp((std::max)(cols, nrhs));
495
+ for (Index k = rank-1; k >= 0; --k) {
496
+ if (k != rank - 1) {
497
+ rhs.row(k).swap(rhs.row(rank - 1));
498
+ }
499
+ 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));
503
+ if (k != rank - 1) {
504
+ rhs.row(k).swap(rhs.row(rank - 1));
505
+ }
506
+ }
507
+ }
508
+
467
509
  template <typename MatrixType>
468
510
  template <typename Rhs>
469
511
  void CompleteOrthogonalDecomposition<MatrixType>::applyZAdjointOnTheLeftInPlace(
@@ -471,7 +513,7 @@ void CompleteOrthogonalDecomposition<MatrixType>::applyZAdjointOnTheLeftInPlace(
471
513
  const Index cols = this->cols();
472
514
  const Index nrhs = rhs.cols();
473
515
  const Index rank = this->rank();
474
- Matrix<typename MatrixType::Scalar, Dynamic, 1> temp((std::max)(cols, nrhs));
516
+ Matrix<typename Rhs::Scalar, Dynamic, 1> temp((std::max)(cols, nrhs));
475
517
  for (Index k = 0; k < rank; ++k) {
476
518
  if (k != rank - 1) {
477
519
  rhs.row(k).swap(rhs.row(rank - 1));
@@ -491,8 +533,6 @@ template <typename _MatrixType>
491
533
  template <typename RhsType, typename DstType>
492
534
  void CompleteOrthogonalDecomposition<_MatrixType>::_solve_impl(
493
535
  const RhsType& rhs, DstType& dst) const {
494
- eigen_assert(rhs.rows() == this->rows());
495
-
496
536
  const Index rank = this->rank();
497
537
  if (rank == 0) {
498
538
  dst.setZero();
@@ -500,11 +540,8 @@ void CompleteOrthogonalDecomposition<_MatrixType>::_solve_impl(
500
540
  }
501
541
 
502
542
  // 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
543
  typename RhsType::PlainObject c(rhs);
506
- c.applyOnTheLeft(
507
- householderSequence(matrixQTZ(), hCoeffs()).setLength(rank).transpose());
544
+ c.applyOnTheLeft(matrixQ().setLength(rank).adjoint());
508
545
 
509
546
  // Solve T z = c(1:rank, :)
510
547
  dst.topRows(rank) = matrixT()
@@ -523,10 +560,45 @@ void CompleteOrthogonalDecomposition<_MatrixType>::_solve_impl(
523
560
  // Undo permutation to get x = P^{-1} * y.
524
561
  dst = colsPermutation() * dst;
525
562
  }
563
+
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
+ {
568
+ const Index rank = this->rank();
569
+
570
+ if (rank == 0) {
571
+ dst.setZero();
572
+ return;
573
+ }
574
+
575
+ typename RhsType::PlainObject c(colsPermutation().transpose()*rhs);
576
+
577
+ if (rank < cols()) {
578
+ applyZOnTheLeftInPlace<!Conjugate>(c);
579
+ }
580
+
581
+ matrixT().topLeftCorner(rank, rank)
582
+ .template triangularView<Upper>()
583
+ .transpose().template conjugateIf<Conjugate>()
584
+ .solveInPlace(c.topRows(rank));
585
+
586
+ dst.topRows(rank) = c.topRows(rank);
587
+ dst.bottomRows(rows()-rank).setZero();
588
+
589
+ dst.applyOnTheLeft(householderQ().setLength(rank).template conjugateIf<!Conjugate>() );
590
+ }
526
591
  #endif
527
592
 
528
593
  namespace internal {
529
594
 
595
+ template<typename MatrixType>
596
+ struct traits<Inverse<CompleteOrthogonalDecomposition<MatrixType> > >
597
+ : traits<typename Transpose<typename MatrixType::PlainObject>::PlainObject>
598
+ {
599
+ enum { Flags = 0 };
600
+ };
601
+
530
602
  template<typename DstXprType, typename MatrixType>
531
603
  struct Assignment<DstXprType, Inverse<CompleteOrthogonalDecomposition<MatrixType> >, internal::assign_op<typename DstXprType::Scalar,typename CompleteOrthogonalDecomposition<MatrixType>::Scalar>, Dense2Dense>
532
604
  {
@@ -534,7 +606,8 @@ struct Assignment<DstXprType, Inverse<CompleteOrthogonalDecomposition<MatrixType
534
606
  typedef Inverse<CodType> SrcXprType;
535
607
  static void run(DstXprType &dst, const SrcXprType &src, const internal::assign_op<typename DstXprType::Scalar,typename CodType::Scalar> &)
536
608
  {
537
- dst = src.nestedExpression().solve(MatrixType::Identity(src.rows(), src.rows()));
609
+ typedef Matrix<typename CodType::Scalar, CodType::RowsAtCompileTime, CodType::RowsAtCompileTime, 0, CodType::MaxRowsAtCompileTime, CodType::MaxRowsAtCompileTime> IdentityMatrixType;
610
+ dst = src.nestedExpression().solve(IdentityMatrixType::Identity(src.cols(), src.cols()));
538
611
  }
539
612
  };
540
613
 
@@ -18,6 +18,9 @@ namespace internal {
18
18
  template<typename _MatrixType> struct traits<FullPivHouseholderQR<_MatrixType> >
19
19
  : traits<_MatrixType>
20
20
  {
21
+ typedef MatrixXpr XprKind;
22
+ typedef SolverStorage StorageKind;
23
+ typedef int StorageIndex;
21
24
  enum { Flags = 0 };
22
25
  };
23
26
 
@@ -55,20 +58,19 @@ struct traits<FullPivHouseholderQRMatrixQReturnType<MatrixType> >
55
58
  * \sa MatrixBase::fullPivHouseholderQr()
56
59
  */
57
60
  template<typename _MatrixType> class FullPivHouseholderQR
61
+ : public SolverBase<FullPivHouseholderQR<_MatrixType> >
58
62
  {
59
63
  public:
60
64
 
61
65
  typedef _MatrixType MatrixType;
66
+ typedef SolverBase<FullPivHouseholderQR> Base;
67
+ friend class SolverBase<FullPivHouseholderQR>;
68
+
69
+ EIGEN_GENERIC_PUBLIC_INTERFACE(FullPivHouseholderQR)
62
70
  enum {
63
- RowsAtCompileTime = MatrixType::RowsAtCompileTime,
64
- ColsAtCompileTime = MatrixType::ColsAtCompileTime,
65
71
  MaxRowsAtCompileTime = MatrixType::MaxRowsAtCompileTime,
66
72
  MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime
67
73
  };
68
- typedef typename MatrixType::Scalar Scalar;
69
- typedef typename MatrixType::RealScalar RealScalar;
70
- // FIXME should be int
71
- typedef typename MatrixType::StorageIndex StorageIndex;
72
74
  typedef internal::FullPivHouseholderQRMatrixQReturnType<MatrixType> MatrixQReturnType;
73
75
  typedef typename internal::plain_diag_type<MatrixType>::type HCoeffsType;
74
76
  typedef Matrix<StorageIndex, 1,
@@ -156,6 +158,7 @@ template<typename _MatrixType> class FullPivHouseholderQR
156
158
  computeInPlace();
157
159
  }
158
160
 
161
+ #ifdef EIGEN_PARSED_BY_DOXYGEN
159
162
  /** This method finds a solution x to the equation Ax=b, where A is the matrix of which
160
163
  * \c *this is the QR decomposition.
161
164
  *
@@ -173,11 +176,8 @@ template<typename _MatrixType> class FullPivHouseholderQR
173
176
  */
174
177
  template<typename Rhs>
175
178
  inline const Solve<FullPivHouseholderQR, Rhs>
176
- solve(const MatrixBase<Rhs>& b) const
177
- {
178
- eigen_assert(m_isInitialized && "FullPivHouseholderQR is not initialized.");
179
- return Solve<FullPivHouseholderQR, Rhs>(*this, b.derived());
180
- }
179
+ solve(const MatrixBase<Rhs>& b) const;
180
+ #endif
181
181
 
182
182
  /** \returns Expression object representing the matrix Q
183
183
  */
@@ -392,22 +392,24 @@ template<typename _MatrixType> class FullPivHouseholderQR
392
392
  * diagonal coefficient of U.
393
393
  */
394
394
  RealScalar maxPivot() const { return m_maxpivot; }
395
-
395
+
396
396
  #ifndef EIGEN_PARSED_BY_DOXYGEN
397
397
  template<typename RhsType, typename DstType>
398
- EIGEN_DEVICE_FUNC
399
398
  void _solve_impl(const RhsType &rhs, DstType &dst) const;
399
+
400
+ template<bool Conjugate, typename RhsType, typename DstType>
401
+ void _solve_impl_transposed(const RhsType &rhs, DstType &dst) const;
400
402
  #endif
401
403
 
402
404
  protected:
403
-
405
+
404
406
  static void check_template_parameters()
405
407
  {
406
408
  EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar);
407
409
  }
408
-
410
+
409
411
  void computeInPlace();
410
-
412
+
411
413
  MatrixType m_qr;
412
414
  HCoeffsType m_hCoeffs;
413
415
  IntDiagSizeVectorType m_rows_transpositions;
@@ -499,15 +501,15 @@ void FullPivHouseholderQR<MatrixType>::computeInPlace()
499
501
  m_nonzero_pivots = k;
500
502
  for(Index i = k; i < size; i++)
501
503
  {
502
- m_rows_transpositions.coeffRef(i) = i;
503
- m_cols_transpositions.coeffRef(i) = i;
504
+ m_rows_transpositions.coeffRef(i) = internal::convert_index<StorageIndex>(i);
505
+ m_cols_transpositions.coeffRef(i) = internal::convert_index<StorageIndex>(i);
504
506
  m_hCoeffs.coeffRef(i) = Scalar(0);
505
507
  }
506
508
  break;
507
509
  }
508
510
 
509
- m_rows_transpositions.coeffRef(k) = row_of_biggest_in_corner;
510
- m_cols_transpositions.coeffRef(k) = col_of_biggest_in_corner;
511
+ m_rows_transpositions.coeffRef(k) = internal::convert_index<StorageIndex>(row_of_biggest_in_corner);
512
+ m_cols_transpositions.coeffRef(k) = internal::convert_index<StorageIndex>(col_of_biggest_in_corner);
511
513
  if(k != row_of_biggest_in_corner) {
512
514
  m_qr.row(k).tail(cols-k).swap(m_qr.row(row_of_biggest_in_corner).tail(cols-k));
513
515
  ++number_of_transpositions;
@@ -541,7 +543,6 @@ template<typename _MatrixType>
541
543
  template<typename RhsType, typename DstType>
542
544
  void FullPivHouseholderQR<_MatrixType>::_solve_impl(const RhsType &rhs, DstType &dst) const
543
545
  {
544
- eigen_assert(rhs.rows() == rows());
545
546
  const Index l_rank = rank();
546
547
 
547
548
  // FIXME introduce nonzeroPivots() and use it here. and more generally,
@@ -554,7 +555,7 @@ void FullPivHouseholderQR<_MatrixType>::_solve_impl(const RhsType &rhs, DstType
554
555
 
555
556
  typename RhsType::PlainObject c(rhs);
556
557
 
557
- Matrix<Scalar,1,RhsType::ColsAtCompileTime> temp(rhs.cols());
558
+ Matrix<typename RhsType::Scalar,1,RhsType::ColsAtCompileTime> temp(rhs.cols());
558
559
  for (Index k = 0; k < l_rank; ++k)
559
560
  {
560
561
  Index remainingSize = rows()-k;
@@ -571,6 +572,42 @@ void FullPivHouseholderQR<_MatrixType>::_solve_impl(const RhsType &rhs, DstType
571
572
  for(Index i = 0; i < l_rank; ++i) dst.row(m_cols_permutation.indices().coeff(i)) = c.row(i);
572
573
  for(Index i = l_rank; i < cols(); ++i) dst.row(m_cols_permutation.indices().coeff(i)).setZero();
573
574
  }
575
+
576
+ template<typename _MatrixType>
577
+ template<bool Conjugate, typename RhsType, typename DstType>
578
+ void FullPivHouseholderQR<_MatrixType>::_solve_impl_transposed(const RhsType &rhs, DstType &dst) const
579
+ {
580
+ const Index l_rank = rank();
581
+
582
+ if(l_rank == 0)
583
+ {
584
+ dst.setZero();
585
+ return;
586
+ }
587
+
588
+ typename RhsType::PlainObject c(m_cols_permutation.transpose()*rhs);
589
+
590
+ m_qr.topLeftCorner(l_rank, l_rank)
591
+ .template triangularView<Upper>()
592
+ .transpose().template conjugateIf<Conjugate>()
593
+ .solveInPlace(c.topRows(l_rank));
594
+
595
+ dst.topRows(l_rank) = c.topRows(l_rank);
596
+ dst.bottomRows(rows()-l_rank).setZero();
597
+
598
+ Matrix<Scalar, 1, DstType::ColsAtCompileTime> temp(dst.cols());
599
+ const Index size = (std::min)(rows(), cols());
600
+ for (Index k = size-1; k >= 0; --k)
601
+ {
602
+ Index remainingSize = rows()-k;
603
+
604
+ dst.bottomRightCorner(remainingSize, dst.cols())
605
+ .applyHouseholderOnTheLeft(m_qr.col(k).tail(remainingSize-1).template conjugateIf<!Conjugate>(),
606
+ m_hCoeffs.template conjugateIf<Conjugate>().coeff(k), &temp.coeffRef(0));
607
+
608
+ dst.row(k).swap(dst.row(m_rows_transpositions.coeff(k)));
609
+ }
610
+ }
574
611
  #endif
575
612
 
576
613
  namespace internal {