ruby-eigen 0.0.9 → 0.0.10.pre1

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 (293) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +22 -0
  3. data/README.md +21 -0
  4. data/ext/eigen/eigen3/COPYING.BSD +26 -0
  5. data/ext/eigen/eigen3/COPYING.MPL2 +373 -0
  6. data/ext/eigen/eigen3/COPYING.README +18 -0
  7. data/ext/eigen/eigen3/Eigen/Array +11 -0
  8. data/ext/eigen/eigen3/Eigen/Cholesky +32 -0
  9. data/ext/eigen/eigen3/Eigen/CholmodSupport +45 -0
  10. data/ext/eigen/eigen3/Eigen/Core +376 -0
  11. data/ext/eigen/eigen3/Eigen/Dense +7 -0
  12. data/ext/eigen/eigen3/Eigen/Eigen +2 -0
  13. data/ext/eigen/eigen3/Eigen/Eigen2Support +95 -0
  14. data/ext/eigen/eigen3/Eigen/Eigenvalues +48 -0
  15. data/ext/eigen/eigen3/Eigen/Geometry +63 -0
  16. data/ext/eigen/eigen3/Eigen/Householder +23 -0
  17. data/ext/eigen/eigen3/Eigen/IterativeLinearSolvers +40 -0
  18. data/ext/eigen/eigen3/Eigen/Jacobi +26 -0
  19. data/ext/eigen/eigen3/Eigen/LU +41 -0
  20. data/ext/eigen/eigen3/Eigen/LeastSquares +32 -0
  21. data/ext/eigen/eigen3/Eigen/MetisSupport +28 -0
  22. data/ext/eigen/eigen3/Eigen/PaStiXSupport +46 -0
  23. data/ext/eigen/eigen3/Eigen/PardisoSupport +30 -0
  24. data/ext/eigen/eigen3/Eigen/QR +45 -0
  25. data/ext/eigen/eigen3/Eigen/QtAlignedMalloc +34 -0
  26. data/ext/eigen/eigen3/Eigen/SPQRSupport +29 -0
  27. data/ext/eigen/eigen3/Eigen/SVD +37 -0
  28. data/ext/eigen/eigen3/Eigen/Sparse +27 -0
  29. data/ext/eigen/eigen3/Eigen/SparseCore +64 -0
  30. data/ext/eigen/eigen3/Eigen/SparseLU +49 -0
  31. data/ext/eigen/eigen3/Eigen/SparseQR +33 -0
  32. data/ext/eigen/eigen3/Eigen/StdDeque +27 -0
  33. data/ext/eigen/eigen3/Eigen/StdList +26 -0
  34. data/ext/eigen/eigen3/Eigen/StdVector +27 -0
  35. data/ext/eigen/eigen3/Eigen/SuperLUSupport +59 -0
  36. data/ext/eigen/eigen3/Eigen/UmfPackSupport +36 -0
  37. data/ext/eigen/eigen3/Eigen/src/Cholesky/LDLT.h +611 -0
  38. data/ext/eigen/eigen3/Eigen/src/Cholesky/LLT.h +498 -0
  39. data/ext/eigen/eigen3/Eigen/src/Cholesky/LLT_MKL.h +102 -0
  40. data/ext/eigen/eigen3/Eigen/src/CholmodSupport/CholmodSupport.h +607 -0
  41. data/ext/eigen/eigen3/Eigen/src/Core/Array.h +323 -0
  42. data/ext/eigen/eigen3/Eigen/src/Core/ArrayBase.h +226 -0
  43. data/ext/eigen/eigen3/Eigen/src/Core/ArrayWrapper.h +264 -0
  44. data/ext/eigen/eigen3/Eigen/src/Core/Assign.h +590 -0
  45. data/ext/eigen/eigen3/Eigen/src/Core/Assign_MKL.h +224 -0
  46. data/ext/eigen/eigen3/Eigen/src/Core/BandMatrix.h +334 -0
  47. data/ext/eigen/eigen3/Eigen/src/Core/Block.h +406 -0
  48. data/ext/eigen/eigen3/Eigen/src/Core/BooleanRedux.h +154 -0
  49. data/ext/eigen/eigen3/Eigen/src/Core/CommaInitializer.h +154 -0
  50. data/ext/eigen/eigen3/Eigen/src/Core/CoreIterators.h +61 -0
  51. data/ext/eigen/eigen3/Eigen/src/Core/CwiseBinaryOp.h +230 -0
  52. data/ext/eigen/eigen3/Eigen/src/Core/CwiseNullaryOp.h +864 -0
  53. data/ext/eigen/eigen3/Eigen/src/Core/CwiseUnaryOp.h +126 -0
  54. data/ext/eigen/eigen3/Eigen/src/Core/CwiseUnaryView.h +139 -0
  55. data/ext/eigen/eigen3/Eigen/src/Core/DenseBase.h +521 -0
  56. data/ext/eigen/eigen3/Eigen/src/Core/DenseCoeffsBase.h +754 -0
  57. data/ext/eigen/eigen3/Eigen/src/Core/DenseStorage.h +434 -0
  58. data/ext/eigen/eigen3/Eigen/src/Core/Diagonal.h +237 -0
  59. data/ext/eigen/eigen3/Eigen/src/Core/DiagonalMatrix.h +313 -0
  60. data/ext/eigen/eigen3/Eigen/src/Core/DiagonalProduct.h +131 -0
  61. data/ext/eigen/eigen3/Eigen/src/Core/Dot.h +263 -0
  62. data/ext/eigen/eigen3/Eigen/src/Core/EigenBase.h +131 -0
  63. data/ext/eigen/eigen3/Eigen/src/Core/Flagged.h +140 -0
  64. data/ext/eigen/eigen3/Eigen/src/Core/ForceAlignedAccess.h +146 -0
  65. data/ext/eigen/eigen3/Eigen/src/Core/Functors.h +1026 -0
  66. data/ext/eigen/eigen3/Eigen/src/Core/Fuzzy.h +150 -0
  67. data/ext/eigen/eigen3/Eigen/src/Core/GeneralProduct.h +635 -0
  68. data/ext/eigen/eigen3/Eigen/src/Core/GenericPacketMath.h +350 -0
  69. data/ext/eigen/eigen3/Eigen/src/Core/GlobalFunctions.h +92 -0
  70. data/ext/eigen/eigen3/Eigen/src/Core/IO.h +250 -0
  71. data/ext/eigen/eigen3/Eigen/src/Core/Map.h +192 -0
  72. data/ext/eigen/eigen3/Eigen/src/Core/MapBase.h +247 -0
  73. data/ext/eigen/eigen3/Eigen/src/Core/MathFunctions.h +768 -0
  74. data/ext/eigen/eigen3/Eigen/src/Core/Matrix.h +420 -0
  75. data/ext/eigen/eigen3/Eigen/src/Core/MatrixBase.h +563 -0
  76. data/ext/eigen/eigen3/Eigen/src/Core/NestByValue.h +111 -0
  77. data/ext/eigen/eigen3/Eigen/src/Core/NoAlias.h +134 -0
  78. data/ext/eigen/eigen3/Eigen/src/Core/NumTraits.h +150 -0
  79. data/ext/eigen/eigen3/Eigen/src/Core/PermutationMatrix.h +721 -0
  80. data/ext/eigen/eigen3/Eigen/src/Core/PlainObjectBase.h +822 -0
  81. data/ext/eigen/eigen3/Eigen/src/Core/ProductBase.h +290 -0
  82. data/ext/eigen/eigen3/Eigen/src/Core/Random.h +152 -0
  83. data/ext/eigen/eigen3/Eigen/src/Core/Redux.h +409 -0
  84. data/ext/eigen/eigen3/Eigen/src/Core/Ref.h +278 -0
  85. data/ext/eigen/eigen3/Eigen/src/Core/Replicate.h +177 -0
  86. data/ext/eigen/eigen3/Eigen/src/Core/ReturnByValue.h +99 -0
  87. data/ext/eigen/eigen3/Eigen/src/Core/Reverse.h +224 -0
  88. data/ext/eigen/eigen3/Eigen/src/Core/Select.h +162 -0
  89. data/ext/eigen/eigen3/Eigen/src/Core/SelfAdjointView.h +314 -0
  90. data/ext/eigen/eigen3/Eigen/src/Core/SelfCwiseBinaryOp.h +191 -0
  91. data/ext/eigen/eigen3/Eigen/src/Core/SolveTriangular.h +260 -0
  92. data/ext/eigen/eigen3/Eigen/src/Core/StableNorm.h +203 -0
  93. data/ext/eigen/eigen3/Eigen/src/Core/Stride.h +108 -0
  94. data/ext/eigen/eigen3/Eigen/src/Core/Swap.h +126 -0
  95. data/ext/eigen/eigen3/Eigen/src/Core/Transpose.h +419 -0
  96. data/ext/eigen/eigen3/Eigen/src/Core/Transpositions.h +436 -0
  97. data/ext/eigen/eigen3/Eigen/src/Core/TriangularMatrix.h +839 -0
  98. data/ext/eigen/eigen3/Eigen/src/Core/VectorBlock.h +95 -0
  99. data/ext/eigen/eigen3/Eigen/src/Core/VectorwiseOp.h +642 -0
  100. data/ext/eigen/eigen3/Eigen/src/Core/Visitor.h +237 -0
  101. data/ext/eigen/eigen3/Eigen/src/Core/arch/AltiVec/Complex.h +217 -0
  102. data/ext/eigen/eigen3/Eigen/src/Core/arch/AltiVec/PacketMath.h +501 -0
  103. data/ext/eigen/eigen3/Eigen/src/Core/arch/Default/Settings.h +49 -0
  104. data/ext/eigen/eigen3/Eigen/src/Core/arch/NEON/Complex.h +253 -0
  105. data/ext/eigen/eigen3/Eigen/src/Core/arch/NEON/PacketMath.h +420 -0
  106. data/ext/eigen/eigen3/Eigen/src/Core/arch/SSE/Complex.h +442 -0
  107. data/ext/eigen/eigen3/Eigen/src/Core/arch/SSE/MathFunctions.h +475 -0
  108. data/ext/eigen/eigen3/Eigen/src/Core/arch/SSE/PacketMath.h +649 -0
  109. data/ext/eigen/eigen3/Eigen/src/Core/products/CoeffBasedProduct.h +476 -0
  110. data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1341 -0
  111. data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralMatrixMatrix.h +427 -0
  112. data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +278 -0
  113. data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_MKL.h +146 -0
  114. data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralMatrixMatrix_MKL.h +118 -0
  115. data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralMatrixVector.h +566 -0
  116. data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralMatrixVector_MKL.h +131 -0
  117. data/ext/eigen/eigen3/Eigen/src/Core/products/Parallelizer.h +162 -0
  118. data/ext/eigen/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +436 -0
  119. data/ext/eigen/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix_MKL.h +295 -0
  120. data/ext/eigen/eigen3/Eigen/src/Core/products/SelfadjointMatrixVector.h +281 -0
  121. data/ext/eigen/eigen3/Eigen/src/Core/products/SelfadjointMatrixVector_MKL.h +114 -0
  122. data/ext/eigen/eigen3/Eigen/src/Core/products/SelfadjointProduct.h +123 -0
  123. data/ext/eigen/eigen3/Eigen/src/Core/products/SelfadjointRank2Update.h +93 -0
  124. data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix.h +427 -0
  125. data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix_MKL.h +309 -0
  126. data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularMatrixVector.h +348 -0
  127. data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularMatrixVector_MKL.h +247 -0
  128. data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularSolverMatrix.h +332 -0
  129. data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularSolverMatrix_MKL.h +155 -0
  130. data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularSolverVector.h +139 -0
  131. data/ext/eigen/eigen3/Eigen/src/Core/util/BlasUtil.h +264 -0
  132. data/ext/eigen/eigen3/Eigen/src/Core/util/Constants.h +451 -0
  133. data/ext/eigen/eigen3/Eigen/src/Core/util/DisableStupidWarnings.h +40 -0
  134. data/ext/eigen/eigen3/Eigen/src/Core/util/ForwardDeclarations.h +302 -0
  135. data/ext/eigen/eigen3/Eigen/src/Core/util/MKL_support.h +158 -0
  136. data/ext/eigen/eigen3/Eigen/src/Core/util/Macros.h +451 -0
  137. data/ext/eigen/eigen3/Eigen/src/Core/util/Memory.h +977 -0
  138. data/ext/eigen/eigen3/Eigen/src/Core/util/Meta.h +243 -0
  139. data/ext/eigen/eigen3/Eigen/src/Core/util/NonMPL2.h +3 -0
  140. data/ext/eigen/eigen3/Eigen/src/Core/util/ReenableStupidWarnings.h +14 -0
  141. data/ext/eigen/eigen3/Eigen/src/Core/util/StaticAssert.h +208 -0
  142. data/ext/eigen/eigen3/Eigen/src/Core/util/XprHelper.h +469 -0
  143. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Block.h +126 -0
  144. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Cwise.h +192 -0
  145. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/CwiseOperators.h +298 -0
  146. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/AlignedBox.h +159 -0
  147. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/All.h +115 -0
  148. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/AngleAxis.h +214 -0
  149. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/Hyperplane.h +254 -0
  150. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/ParametrizedLine.h +141 -0
  151. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/Quaternion.h +495 -0
  152. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/Rotation2D.h +145 -0
  153. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/RotationBase.h +123 -0
  154. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/Scaling.h +167 -0
  155. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/Transform.h +786 -0
  156. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/Translation.h +184 -0
  157. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/LU.h +120 -0
  158. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Lazy.h +71 -0
  159. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/LeastSquares.h +169 -0
  160. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Macros.h +20 -0
  161. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/MathFunctions.h +57 -0
  162. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Memory.h +45 -0
  163. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Meta.h +75 -0
  164. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Minor.h +117 -0
  165. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/QR.h +67 -0
  166. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/SVD.h +637 -0
  167. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/TriangularSolver.h +42 -0
  168. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/VectorBlock.h +94 -0
  169. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/ComplexEigenSolver.h +341 -0
  170. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/ComplexSchur.h +456 -0
  171. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/ComplexSchur_MKL.h +94 -0
  172. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/EigenSolver.h +607 -0
  173. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +350 -0
  174. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +227 -0
  175. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/HessenbergDecomposition.h +373 -0
  176. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +160 -0
  177. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/RealQZ.h +624 -0
  178. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/RealSchur.h +525 -0
  179. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/RealSchur_MKL.h +83 -0
  180. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +801 -0
  181. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_MKL.h +92 -0
  182. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/Tridiagonalization.h +557 -0
  183. data/ext/eigen/eigen3/Eigen/src/Geometry/AlignedBox.h +392 -0
  184. data/ext/eigen/eigen3/Eigen/src/Geometry/AngleAxis.h +233 -0
  185. data/ext/eigen/eigen3/Eigen/src/Geometry/EulerAngles.h +104 -0
  186. data/ext/eigen/eigen3/Eigen/src/Geometry/Homogeneous.h +307 -0
  187. data/ext/eigen/eigen3/Eigen/src/Geometry/Hyperplane.h +280 -0
  188. data/ext/eigen/eigen3/Eigen/src/Geometry/OrthoMethods.h +218 -0
  189. data/ext/eigen/eigen3/Eigen/src/Geometry/ParametrizedLine.h +195 -0
  190. data/ext/eigen/eigen3/Eigen/src/Geometry/Quaternion.h +776 -0
  191. data/ext/eigen/eigen3/Eigen/src/Geometry/Rotation2D.h +160 -0
  192. data/ext/eigen/eigen3/Eigen/src/Geometry/RotationBase.h +206 -0
  193. data/ext/eigen/eigen3/Eigen/src/Geometry/Scaling.h +166 -0
  194. data/ext/eigen/eigen3/Eigen/src/Geometry/Transform.h +1455 -0
  195. data/ext/eigen/eigen3/Eigen/src/Geometry/Translation.h +206 -0
  196. data/ext/eigen/eigen3/Eigen/src/Geometry/Umeyama.h +177 -0
  197. data/ext/eigen/eigen3/Eigen/src/Geometry/arch/Geometry_SSE.h +115 -0
  198. data/ext/eigen/eigen3/Eigen/src/Householder/BlockHouseholder.h +68 -0
  199. data/ext/eigen/eigen3/Eigen/src/Householder/Householder.h +171 -0
  200. data/ext/eigen/eigen3/Eigen/src/Householder/HouseholderSequence.h +441 -0
  201. data/ext/eigen/eigen3/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +149 -0
  202. data/ext/eigen/eigen3/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +263 -0
  203. data/ext/eigen/eigen3/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +256 -0
  204. data/ext/eigen/eigen3/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +282 -0
  205. data/ext/eigen/eigen3/Eigen/src/Jacobi/Jacobi.h +433 -0
  206. data/ext/eigen/eigen3/Eigen/src/LU/Determinant.h +101 -0
  207. data/ext/eigen/eigen3/Eigen/src/LU/FullPivLU.h +751 -0
  208. data/ext/eigen/eigen3/Eigen/src/LU/Inverse.h +400 -0
  209. data/ext/eigen/eigen3/Eigen/src/LU/PartialPivLU.h +509 -0
  210. data/ext/eigen/eigen3/Eigen/src/LU/PartialPivLU_MKL.h +85 -0
  211. data/ext/eigen/eigen3/Eigen/src/LU/arch/Inverse_SSE.h +329 -0
  212. data/ext/eigen/eigen3/Eigen/src/MetisSupport/MetisSupport.h +137 -0
  213. data/ext/eigen/eigen3/Eigen/src/OrderingMethods/Amd.h +444 -0
  214. data/ext/eigen/eigen3/Eigen/src/OrderingMethods/Eigen_Colamd.h +1850 -0
  215. data/ext/eigen/eigen3/Eigen/src/PaStiXSupport/PaStiXSupport.h +721 -0
  216. data/ext/eigen/eigen3/Eigen/src/PardisoSupport/PardisoSupport.h +592 -0
  217. data/ext/eigen/eigen3/Eigen/src/QR/ColPivHouseholderQR.h +580 -0
  218. data/ext/eigen/eigen3/Eigen/src/QR/ColPivHouseholderQR_MKL.h +99 -0
  219. data/ext/eigen/eigen3/Eigen/src/QR/FullPivHouseholderQR.h +622 -0
  220. data/ext/eigen/eigen3/Eigen/src/QR/HouseholderQR.h +388 -0
  221. data/ext/eigen/eigen3/Eigen/src/QR/HouseholderQR_MKL.h +71 -0
  222. data/ext/eigen/eigen3/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +338 -0
  223. data/ext/eigen/eigen3/Eigen/src/SVD/JacobiSVD.h +976 -0
  224. data/ext/eigen/eigen3/Eigen/src/SVD/JacobiSVD_MKL.h +92 -0
  225. data/ext/eigen/eigen3/Eigen/src/SVD/UpperBidiagonalization.h +148 -0
  226. data/ext/eigen/eigen3/Eigen/src/SparseCholesky/SimplicialCholesky.h +671 -0
  227. data/ext/eigen/eigen3/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +199 -0
  228. data/ext/eigen/eigen3/Eigen/src/SparseCore/AmbiVector.h +373 -0
  229. data/ext/eigen/eigen3/Eigen/src/SparseCore/CompressedStorage.h +233 -0
  230. data/ext/eigen/eigen3/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +245 -0
  231. data/ext/eigen/eigen3/Eigen/src/SparseCore/MappedSparseMatrix.h +181 -0
  232. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseBlock.h +537 -0
  233. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseColEtree.h +206 -0
  234. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +325 -0
  235. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +163 -0
  236. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseDenseProduct.h +311 -0
  237. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseDiagonalProduct.h +196 -0
  238. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseDot.h +101 -0
  239. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseFuzzy.h +26 -0
  240. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseMatrix.h +1262 -0
  241. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseMatrixBase.h +461 -0
  242. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparsePermutation.h +148 -0
  243. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseProduct.h +188 -0
  244. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseRedux.h +45 -0
  245. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseSelfAdjointView.h +507 -0
  246. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +150 -0
  247. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseTranspose.h +63 -0
  248. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseTriangularView.h +179 -0
  249. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseUtil.h +172 -0
  250. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseVector.h +448 -0
  251. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseView.h +99 -0
  252. data/ext/eigen/eigen3/Eigen/src/SparseCore/TriangularSolver.h +334 -0
  253. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU.h +806 -0
  254. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLUImpl.h +66 -0
  255. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_Memory.h +227 -0
  256. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_Structs.h +111 -0
  257. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +298 -0
  258. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_Utils.h +80 -0
  259. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_column_bmod.h +180 -0
  260. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_column_dfs.h +177 -0
  261. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +106 -0
  262. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +279 -0
  263. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +127 -0
  264. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +130 -0
  265. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_panel_bmod.h +223 -0
  266. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_panel_dfs.h +258 -0
  267. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_pivotL.h +137 -0
  268. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_pruneL.h +135 -0
  269. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_relax_snode.h +83 -0
  270. data/ext/eigen/eigen3/Eigen/src/SparseQR/SparseQR.h +714 -0
  271. data/ext/eigen/eigen3/Eigen/src/StlSupport/StdDeque.h +134 -0
  272. data/ext/eigen/eigen3/Eigen/src/StlSupport/StdList.h +114 -0
  273. data/ext/eigen/eigen3/Eigen/src/StlSupport/StdVector.h +126 -0
  274. data/ext/eigen/eigen3/Eigen/src/StlSupport/details.h +84 -0
  275. data/ext/eigen/eigen3/Eigen/src/SuperLUSupport/SuperLUSupport.h +1026 -0
  276. data/ext/eigen/eigen3/Eigen/src/UmfPackSupport/UmfPackSupport.h +474 -0
  277. data/ext/eigen/eigen3/Eigen/src/misc/Image.h +84 -0
  278. data/ext/eigen/eigen3/Eigen/src/misc/Kernel.h +81 -0
  279. data/ext/eigen/eigen3/Eigen/src/misc/Solve.h +76 -0
  280. data/ext/eigen/eigen3/Eigen/src/misc/SparseSolve.h +128 -0
  281. data/ext/eigen/eigen3/Eigen/src/misc/blas.h +658 -0
  282. data/ext/eigen/eigen3/Eigen/src/plugins/ArrayCwiseBinaryOps.h +253 -0
  283. data/ext/eigen/eigen3/Eigen/src/plugins/ArrayCwiseUnaryOps.h +187 -0
  284. data/ext/eigen/eigen3/Eigen/src/plugins/BlockMethods.h +935 -0
  285. data/ext/eigen/eigen3/Eigen/src/plugins/CommonCwiseBinaryOps.h +46 -0
  286. data/ext/eigen/eigen3/Eigen/src/plugins/CommonCwiseUnaryOps.h +172 -0
  287. data/ext/eigen/eigen3/Eigen/src/plugins/MatrixCwiseBinaryOps.h +143 -0
  288. data/ext/eigen/eigen3/Eigen/src/plugins/MatrixCwiseUnaryOps.h +52 -0
  289. data/ext/eigen/eigen3/signature_of_eigen3_matrix_library +1 -0
  290. data/ext/eigen/eigen_wrap.cxx +19420 -10396
  291. data/ext/eigen/extconf.rb +37 -2
  292. data/lib/eigen.rb +146 -3
  293. metadata +294 -7
@@ -0,0 +1,388 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // Copyright (C) 2008-2010 Gael Guennebaud <gael.guennebaud@inria.fr>
5
+ // Copyright (C) 2009 Benoit Jacob <jacob.benoit.1@gmail.com>
6
+ // Copyright (C) 2010 Vincent Lejeune
7
+ //
8
+ // This Source Code Form is subject to the terms of the Mozilla
9
+ // Public License v. 2.0. If a copy of the MPL was not distributed
10
+ // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
11
+
12
+ #ifndef EIGEN_QR_H
13
+ #define EIGEN_QR_H
14
+
15
+ namespace Eigen {
16
+
17
+ /** \ingroup QR_Module
18
+ *
19
+ *
20
+ * \class HouseholderQR
21
+ *
22
+ * \brief Householder QR decomposition of a matrix
23
+ *
24
+ * \param MatrixType the type of the matrix of which we are computing the QR decomposition
25
+ *
26
+ * This class performs a QR decomposition of a matrix \b A into matrices \b Q and \b R
27
+ * such that
28
+ * \f[
29
+ * \mathbf{A} = \mathbf{Q} \, \mathbf{R}
30
+ * \f]
31
+ * by using Householder transformations. Here, \b Q a unitary matrix and \b R an upper triangular matrix.
32
+ * The result is stored in a compact way compatible with LAPACK.
33
+ *
34
+ * Note that no pivoting is performed. This is \b not a rank-revealing decomposition.
35
+ * If you want that feature, use FullPivHouseholderQR or ColPivHouseholderQR instead.
36
+ *
37
+ * This Householder QR decomposition is faster, but less numerically stable and less feature-full than
38
+ * FullPivHouseholderQR or ColPivHouseholderQR.
39
+ *
40
+ * \sa MatrixBase::householderQr()
41
+ */
42
+ template<typename _MatrixType> class HouseholderQR
43
+ {
44
+ public:
45
+
46
+ typedef _MatrixType MatrixType;
47
+ enum {
48
+ RowsAtCompileTime = MatrixType::RowsAtCompileTime,
49
+ ColsAtCompileTime = MatrixType::ColsAtCompileTime,
50
+ Options = MatrixType::Options,
51
+ MaxRowsAtCompileTime = MatrixType::MaxRowsAtCompileTime,
52
+ MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime
53
+ };
54
+ typedef typename MatrixType::Scalar Scalar;
55
+ typedef typename MatrixType::RealScalar RealScalar;
56
+ typedef typename MatrixType::Index Index;
57
+ typedef Matrix<Scalar, RowsAtCompileTime, RowsAtCompileTime, (MatrixType::Flags&RowMajorBit) ? RowMajor : ColMajor, MaxRowsAtCompileTime, MaxRowsAtCompileTime> MatrixQType;
58
+ typedef typename internal::plain_diag_type<MatrixType>::type HCoeffsType;
59
+ typedef typename internal::plain_row_type<MatrixType>::type RowVectorType;
60
+ typedef HouseholderSequence<MatrixType,typename internal::remove_all<typename HCoeffsType::ConjugateReturnType>::type> HouseholderSequenceType;
61
+
62
+ /**
63
+ * \brief Default Constructor.
64
+ *
65
+ * The default constructor is useful in cases in which the user intends to
66
+ * perform decompositions via HouseholderQR::compute(const MatrixType&).
67
+ */
68
+ HouseholderQR() : m_qr(), m_hCoeffs(), m_temp(), m_isInitialized(false) {}
69
+
70
+ /** \brief Default Constructor with memory preallocation
71
+ *
72
+ * Like the default constructor but with preallocation of the internal data
73
+ * according to the specified problem \a size.
74
+ * \sa HouseholderQR()
75
+ */
76
+ HouseholderQR(Index rows, Index cols)
77
+ : m_qr(rows, cols),
78
+ m_hCoeffs((std::min)(rows,cols)),
79
+ m_temp(cols),
80
+ m_isInitialized(false) {}
81
+
82
+ /** \brief Constructs a QR factorization from a given matrix
83
+ *
84
+ * This constructor computes the QR factorization of the matrix \a matrix by calling
85
+ * the method compute(). It is a short cut for:
86
+ *
87
+ * \code
88
+ * HouseholderQR<MatrixType> qr(matrix.rows(), matrix.cols());
89
+ * qr.compute(matrix);
90
+ * \endcode
91
+ *
92
+ * \sa compute()
93
+ */
94
+ HouseholderQR(const MatrixType& matrix)
95
+ : m_qr(matrix.rows(), matrix.cols()),
96
+ m_hCoeffs((std::min)(matrix.rows(),matrix.cols())),
97
+ m_temp(matrix.cols()),
98
+ m_isInitialized(false)
99
+ {
100
+ compute(matrix);
101
+ }
102
+
103
+ /** This method finds a solution x to the equation Ax=b, where A is the matrix of which
104
+ * *this is the QR decomposition, if any exists.
105
+ *
106
+ * \param b the right-hand-side of the equation to solve.
107
+ *
108
+ * \returns a solution.
109
+ *
110
+ * \note The case where b is a matrix is not yet implemented. Also, this
111
+ * code is space inefficient.
112
+ *
113
+ * \note_about_checking_solutions
114
+ *
115
+ * \note_about_arbitrary_choice_of_solution
116
+ *
117
+ * Example: \include HouseholderQR_solve.cpp
118
+ * Output: \verbinclude HouseholderQR_solve.out
119
+ */
120
+ template<typename Rhs>
121
+ inline const internal::solve_retval<HouseholderQR, Rhs>
122
+ solve(const MatrixBase<Rhs>& b) const
123
+ {
124
+ eigen_assert(m_isInitialized && "HouseholderQR is not initialized.");
125
+ return internal::solve_retval<HouseholderQR, Rhs>(*this, b.derived());
126
+ }
127
+
128
+ /** This method returns an expression of the unitary matrix Q as a sequence of Householder transformations.
129
+ *
130
+ * The returned expression can directly be used to perform matrix products. It can also be assigned to a dense Matrix object.
131
+ * Here is an example showing how to recover the full or thin matrix Q, as well as how to perform matrix products using operator*:
132
+ *
133
+ * Example: \include HouseholderQR_householderQ.cpp
134
+ * Output: \verbinclude HouseholderQR_householderQ.out
135
+ */
136
+ HouseholderSequenceType householderQ() const
137
+ {
138
+ eigen_assert(m_isInitialized && "HouseholderQR is not initialized.");
139
+ return HouseholderSequenceType(m_qr, m_hCoeffs.conjugate());
140
+ }
141
+
142
+ /** \returns a reference to the matrix where the Householder QR decomposition is stored
143
+ * in a LAPACK-compatible way.
144
+ */
145
+ const MatrixType& matrixQR() const
146
+ {
147
+ eigen_assert(m_isInitialized && "HouseholderQR is not initialized.");
148
+ return m_qr;
149
+ }
150
+
151
+ HouseholderQR& compute(const MatrixType& matrix);
152
+
153
+ /** \returns the absolute value of the determinant of the matrix of which
154
+ * *this is the QR decomposition. It has only linear complexity
155
+ * (that is, O(n) where n is the dimension of the square matrix)
156
+ * as the QR decomposition has already been computed.
157
+ *
158
+ * \note This is only for square matrices.
159
+ *
160
+ * \warning a determinant can be very big or small, so for matrices
161
+ * of large enough dimension, there is a risk of overflow/underflow.
162
+ * One way to work around that is to use logAbsDeterminant() instead.
163
+ *
164
+ * \sa logAbsDeterminant(), MatrixBase::determinant()
165
+ */
166
+ typename MatrixType::RealScalar absDeterminant() const;
167
+
168
+ /** \returns the natural log of the absolute value of the determinant of the matrix of which
169
+ * *this is the QR decomposition. It has only linear complexity
170
+ * (that is, O(n) where n is the dimension of the square matrix)
171
+ * as the QR decomposition has already been computed.
172
+ *
173
+ * \note This is only for square matrices.
174
+ *
175
+ * \note This method is useful to work around the risk of overflow/underflow that's inherent
176
+ * to determinant computation.
177
+ *
178
+ * \sa absDeterminant(), MatrixBase::determinant()
179
+ */
180
+ typename MatrixType::RealScalar logAbsDeterminant() const;
181
+
182
+ inline Index rows() const { return m_qr.rows(); }
183
+ inline Index cols() const { return m_qr.cols(); }
184
+
185
+ /** \returns a const reference to the vector of Householder coefficients used to represent the factor \c Q.
186
+ *
187
+ * For advanced uses only.
188
+ */
189
+ const HCoeffsType& hCoeffs() const { return m_hCoeffs; }
190
+
191
+ protected:
192
+
193
+ static void check_template_parameters()
194
+ {
195
+ EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar);
196
+ }
197
+
198
+ MatrixType m_qr;
199
+ HCoeffsType m_hCoeffs;
200
+ RowVectorType m_temp;
201
+ bool m_isInitialized;
202
+ };
203
+
204
+ template<typename MatrixType>
205
+ typename MatrixType::RealScalar HouseholderQR<MatrixType>::absDeterminant() const
206
+ {
207
+ using std::abs;
208
+ eigen_assert(m_isInitialized && "HouseholderQR is not initialized.");
209
+ eigen_assert(m_qr.rows() == m_qr.cols() && "You can't take the determinant of a non-square matrix!");
210
+ return abs(m_qr.diagonal().prod());
211
+ }
212
+
213
+ template<typename MatrixType>
214
+ typename MatrixType::RealScalar HouseholderQR<MatrixType>::logAbsDeterminant() const
215
+ {
216
+ eigen_assert(m_isInitialized && "HouseholderQR is not initialized.");
217
+ eigen_assert(m_qr.rows() == m_qr.cols() && "You can't take the determinant of a non-square matrix!");
218
+ return m_qr.diagonal().cwiseAbs().array().log().sum();
219
+ }
220
+
221
+ namespace internal {
222
+
223
+ /** \internal */
224
+ template<typename MatrixQR, typename HCoeffs>
225
+ void householder_qr_inplace_unblocked(MatrixQR& mat, HCoeffs& hCoeffs, typename MatrixQR::Scalar* tempData = 0)
226
+ {
227
+ typedef typename MatrixQR::Index Index;
228
+ typedef typename MatrixQR::Scalar Scalar;
229
+ typedef typename MatrixQR::RealScalar RealScalar;
230
+ Index rows = mat.rows();
231
+ Index cols = mat.cols();
232
+ Index size = (std::min)(rows,cols);
233
+
234
+ eigen_assert(hCoeffs.size() == size);
235
+
236
+ typedef Matrix<Scalar,MatrixQR::ColsAtCompileTime,1> TempType;
237
+ TempType tempVector;
238
+ if(tempData==0)
239
+ {
240
+ tempVector.resize(cols);
241
+ tempData = tempVector.data();
242
+ }
243
+
244
+ for(Index k = 0; k < size; ++k)
245
+ {
246
+ Index remainingRows = rows - k;
247
+ Index remainingCols = cols - k - 1;
248
+
249
+ RealScalar beta;
250
+ mat.col(k).tail(remainingRows).makeHouseholderInPlace(hCoeffs.coeffRef(k), beta);
251
+ mat.coeffRef(k,k) = beta;
252
+
253
+ // apply H to remaining part of m_qr from the left
254
+ mat.bottomRightCorner(remainingRows, remainingCols)
255
+ .applyHouseholderOnTheLeft(mat.col(k).tail(remainingRows-1), hCoeffs.coeffRef(k), tempData+k+1);
256
+ }
257
+ }
258
+
259
+ /** \internal */
260
+ template<typename MatrixQR, typename HCoeffs,
261
+ typename MatrixQRScalar = typename MatrixQR::Scalar,
262
+ bool InnerStrideIsOne = (MatrixQR::InnerStrideAtCompileTime == 1 && HCoeffs::InnerStrideAtCompileTime == 1)>
263
+ struct householder_qr_inplace_blocked
264
+ {
265
+ // This is specialized for MKL-supported Scalar types in HouseholderQR_MKL.h
266
+ static void run(MatrixQR& mat, HCoeffs& hCoeffs,
267
+ typename MatrixQR::Index maxBlockSize=32,
268
+ typename MatrixQR::Scalar* tempData = 0)
269
+ {
270
+ typedef typename MatrixQR::Index Index;
271
+ typedef typename MatrixQR::Scalar Scalar;
272
+ typedef Block<MatrixQR,Dynamic,Dynamic> BlockType;
273
+
274
+ Index rows = mat.rows();
275
+ Index cols = mat.cols();
276
+ Index size = (std::min)(rows, cols);
277
+
278
+ typedef Matrix<Scalar,Dynamic,1,ColMajor,MatrixQR::MaxColsAtCompileTime,1> TempType;
279
+ TempType tempVector;
280
+ if(tempData==0)
281
+ {
282
+ tempVector.resize(cols);
283
+ tempData = tempVector.data();
284
+ }
285
+
286
+ Index blockSize = (std::min)(maxBlockSize,size);
287
+
288
+ Index k = 0;
289
+ for (k = 0; k < size; k += blockSize)
290
+ {
291
+ Index bs = (std::min)(size-k,blockSize); // actual size of the block
292
+ Index tcols = cols - k - bs; // trailing columns
293
+ Index brows = rows-k; // rows of the block
294
+
295
+ // partition the matrix:
296
+ // A00 | A01 | A02
297
+ // mat = A10 | A11 | A12
298
+ // A20 | A21 | A22
299
+ // and performs the qr dec of [A11^T A12^T]^T
300
+ // and update [A21^T A22^T]^T using level 3 operations.
301
+ // Finally, the algorithm continue on A22
302
+
303
+ BlockType A11_21 = mat.block(k,k,brows,bs);
304
+ Block<HCoeffs,Dynamic,1> hCoeffsSegment = hCoeffs.segment(k,bs);
305
+
306
+ householder_qr_inplace_unblocked(A11_21, hCoeffsSegment, tempData);
307
+
308
+ if(tcols)
309
+ {
310
+ BlockType A21_22 = mat.block(k,k+bs,brows,tcols);
311
+ apply_block_householder_on_the_left(A21_22,A11_21,hCoeffsSegment.adjoint());
312
+ }
313
+ }
314
+ }
315
+ };
316
+
317
+ template<typename _MatrixType, typename Rhs>
318
+ struct solve_retval<HouseholderQR<_MatrixType>, Rhs>
319
+ : solve_retval_base<HouseholderQR<_MatrixType>, Rhs>
320
+ {
321
+ EIGEN_MAKE_SOLVE_HELPERS(HouseholderQR<_MatrixType>,Rhs)
322
+
323
+ template<typename Dest> void evalTo(Dest& dst) const
324
+ {
325
+ const Index rows = dec().rows(), cols = dec().cols();
326
+ const Index rank = (std::min)(rows, cols);
327
+ eigen_assert(rhs().rows() == rows);
328
+
329
+ typename Rhs::PlainObject c(rhs());
330
+
331
+ // Note that the matrix Q = H_0^* H_1^*... so its inverse is Q^* = (H_0 H_1 ...)^T
332
+ c.applyOnTheLeft(householderSequence(
333
+ dec().matrixQR().leftCols(rank),
334
+ dec().hCoeffs().head(rank)).transpose()
335
+ );
336
+
337
+ dec().matrixQR()
338
+ .topLeftCorner(rank, rank)
339
+ .template triangularView<Upper>()
340
+ .solveInPlace(c.topRows(rank));
341
+
342
+ dst.topRows(rank) = c.topRows(rank);
343
+ dst.bottomRows(cols-rank).setZero();
344
+ }
345
+ };
346
+
347
+ } // end namespace internal
348
+
349
+ /** Performs the QR factorization of the given matrix \a matrix. The result of
350
+ * the factorization is stored into \c *this, and a reference to \c *this
351
+ * is returned.
352
+ *
353
+ * \sa class HouseholderQR, HouseholderQR(const MatrixType&)
354
+ */
355
+ template<typename MatrixType>
356
+ HouseholderQR<MatrixType>& HouseholderQR<MatrixType>::compute(const MatrixType& matrix)
357
+ {
358
+ check_template_parameters();
359
+
360
+ Index rows = matrix.rows();
361
+ Index cols = matrix.cols();
362
+ Index size = (std::min)(rows,cols);
363
+
364
+ m_qr = matrix;
365
+ m_hCoeffs.resize(size);
366
+
367
+ m_temp.resize(cols);
368
+
369
+ internal::householder_qr_inplace_blocked<MatrixType, HCoeffsType>::run(m_qr, m_hCoeffs, 48, m_temp.data());
370
+
371
+ m_isInitialized = true;
372
+ return *this;
373
+ }
374
+
375
+ /** \return the Householder QR decomposition of \c *this.
376
+ *
377
+ * \sa class HouseholderQR
378
+ */
379
+ template<typename Derived>
380
+ const HouseholderQR<typename MatrixBase<Derived>::PlainObject>
381
+ MatrixBase<Derived>::householderQr() const
382
+ {
383
+ return HouseholderQR<PlainObject>(eval());
384
+ }
385
+
386
+ } // end namespace Eigen
387
+
388
+ #endif // EIGEN_QR_H
@@ -0,0 +1,71 @@
1
+ /*
2
+ Copyright (c) 2011, Intel Corporation. All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without modification,
5
+ are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright notice, this
8
+ list of conditions and the following disclaimer.
9
+ * Redistributions in binary form must reproduce the above copyright notice,
10
+ this list of conditions and the following disclaimer in the documentation
11
+ and/or other materials provided with the distribution.
12
+ * Neither the name of Intel Corporation nor the names of its contributors may
13
+ be used to endorse or promote products derived from this software without
14
+ specific prior written permission.
15
+
16
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
20
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
23
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
+
27
+ ********************************************************************************
28
+ * Content : Eigen bindings to Intel(R) MKL
29
+ * Householder QR decomposition of a matrix w/o pivoting based on
30
+ * LAPACKE_?geqrf function.
31
+ ********************************************************************************
32
+ */
33
+
34
+ #ifndef EIGEN_QR_MKL_H
35
+ #define EIGEN_QR_MKL_H
36
+
37
+ #include "../Core/util/MKL_support.h"
38
+
39
+ namespace Eigen {
40
+
41
+ namespace internal {
42
+
43
+ /** \internal Specialization for the data types supported by MKL */
44
+
45
+ #define EIGEN_MKL_QR_NOPIV(EIGTYPE, MKLTYPE, MKLPREFIX) \
46
+ template<typename MatrixQR, typename HCoeffs> \
47
+ struct householder_qr_inplace_blocked<MatrixQR, HCoeffs, EIGTYPE, true> \
48
+ { \
49
+ static void run(MatrixQR& mat, HCoeffs& hCoeffs, \
50
+ typename MatrixQR::Index = 32, \
51
+ typename MatrixQR::Scalar* = 0) \
52
+ { \
53
+ lapack_int m = (lapack_int) mat.rows(); \
54
+ lapack_int n = (lapack_int) mat.cols(); \
55
+ lapack_int lda = (lapack_int) mat.outerStride(); \
56
+ lapack_int matrix_order = (MatrixQR::IsRowMajor) ? LAPACK_ROW_MAJOR : LAPACK_COL_MAJOR; \
57
+ LAPACKE_##MKLPREFIX##geqrf( matrix_order, m, n, (MKLTYPE*)mat.data(), lda, (MKLTYPE*)hCoeffs.data()); \
58
+ hCoeffs.adjointInPlace(); \
59
+ } \
60
+ };
61
+
62
+ EIGEN_MKL_QR_NOPIV(double, double, d)
63
+ EIGEN_MKL_QR_NOPIV(float, float, s)
64
+ EIGEN_MKL_QR_NOPIV(dcomplex, MKL_Complex16, z)
65
+ EIGEN_MKL_QR_NOPIV(scomplex, MKL_Complex8, c)
66
+
67
+ } // end namespace internal
68
+
69
+ } // end namespace Eigen
70
+
71
+ #endif // EIGEN_QR_MKL_H