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,476 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // Copyright (C) 2006-2008 Benoit Jacob <jacob.benoit.1@gmail.com>
5
+ // Copyright (C) 2008-2010 Gael Guennebaud <gael.guennebaud@inria.fr>
6
+ //
7
+ // This Source Code Form is subject to the terms of the Mozilla
8
+ // Public License v. 2.0. If a copy of the MPL was not distributed
9
+ // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
10
+
11
+ #ifndef EIGEN_COEFFBASED_PRODUCT_H
12
+ #define EIGEN_COEFFBASED_PRODUCT_H
13
+
14
+ namespace Eigen {
15
+
16
+ namespace internal {
17
+
18
+ /*********************************************************************************
19
+ * Coefficient based product implementation.
20
+ * It is designed for the following use cases:
21
+ * - small fixed sizes
22
+ * - lazy products
23
+ *********************************************************************************/
24
+
25
+ /* Since the all the dimensions of the product are small, here we can rely
26
+ * on the generic Assign mechanism to evaluate the product per coeff (or packet).
27
+ *
28
+ * Note that here the inner-loops should always be unrolled.
29
+ */
30
+
31
+ template<int Traversal, int UnrollingIndex, typename Lhs, typename Rhs, typename RetScalar>
32
+ struct product_coeff_impl;
33
+
34
+ template<int StorageOrder, int UnrollingIndex, typename Lhs, typename Rhs, typename Packet, int LoadMode>
35
+ struct product_packet_impl;
36
+
37
+ template<typename LhsNested, typename RhsNested, int NestingFlags>
38
+ struct traits<CoeffBasedProduct<LhsNested,RhsNested,NestingFlags> >
39
+ {
40
+ typedef MatrixXpr XprKind;
41
+ typedef typename remove_all<LhsNested>::type _LhsNested;
42
+ typedef typename remove_all<RhsNested>::type _RhsNested;
43
+ typedef typename scalar_product_traits<typename _LhsNested::Scalar, typename _RhsNested::Scalar>::ReturnType Scalar;
44
+ typedef typename promote_storage_type<typename traits<_LhsNested>::StorageKind,
45
+ typename traits<_RhsNested>::StorageKind>::ret StorageKind;
46
+ typedef typename promote_index_type<typename traits<_LhsNested>::Index,
47
+ typename traits<_RhsNested>::Index>::type Index;
48
+
49
+ enum {
50
+ LhsCoeffReadCost = _LhsNested::CoeffReadCost,
51
+ RhsCoeffReadCost = _RhsNested::CoeffReadCost,
52
+ LhsFlags = _LhsNested::Flags,
53
+ RhsFlags = _RhsNested::Flags,
54
+
55
+ RowsAtCompileTime = _LhsNested::RowsAtCompileTime,
56
+ ColsAtCompileTime = _RhsNested::ColsAtCompileTime,
57
+ InnerSize = EIGEN_SIZE_MIN_PREFER_FIXED(_LhsNested::ColsAtCompileTime, _RhsNested::RowsAtCompileTime),
58
+
59
+ MaxRowsAtCompileTime = _LhsNested::MaxRowsAtCompileTime,
60
+ MaxColsAtCompileTime = _RhsNested::MaxColsAtCompileTime,
61
+
62
+ LhsRowMajor = LhsFlags & RowMajorBit,
63
+ RhsRowMajor = RhsFlags & RowMajorBit,
64
+
65
+ SameType = is_same<typename _LhsNested::Scalar,typename _RhsNested::Scalar>::value,
66
+
67
+ CanVectorizeRhs = RhsRowMajor && (RhsFlags & PacketAccessBit)
68
+ && (ColsAtCompileTime == Dynamic
69
+ || ( (ColsAtCompileTime % packet_traits<Scalar>::size) == 0
70
+ && (RhsFlags&AlignedBit)
71
+ )
72
+ ),
73
+
74
+ CanVectorizeLhs = (!LhsRowMajor) && (LhsFlags & PacketAccessBit)
75
+ && (RowsAtCompileTime == Dynamic
76
+ || ( (RowsAtCompileTime % packet_traits<Scalar>::size) == 0
77
+ && (LhsFlags&AlignedBit)
78
+ )
79
+ ),
80
+
81
+ EvalToRowMajor = (MaxRowsAtCompileTime==1&&MaxColsAtCompileTime!=1) ? 1
82
+ : (MaxColsAtCompileTime==1&&MaxRowsAtCompileTime!=1) ? 0
83
+ : (RhsRowMajor && !CanVectorizeLhs),
84
+
85
+ Flags = ((unsigned int)(LhsFlags | RhsFlags) & HereditaryBits & ~RowMajorBit)
86
+ | (EvalToRowMajor ? RowMajorBit : 0)
87
+ | NestingFlags
88
+ | (LhsFlags & RhsFlags & AlignedBit)
89
+ // TODO enable vectorization for mixed types
90
+ | (SameType && (CanVectorizeLhs || CanVectorizeRhs) ? PacketAccessBit : 0),
91
+
92
+ CoeffReadCost = InnerSize == Dynamic ? Dynamic
93
+ : InnerSize == 0 ? 0
94
+ : InnerSize * (NumTraits<Scalar>::MulCost + LhsCoeffReadCost + RhsCoeffReadCost)
95
+ + (InnerSize - 1) * NumTraits<Scalar>::AddCost,
96
+
97
+ /* CanVectorizeInner deserves special explanation. It does not affect the product flags. It is not used outside
98
+ * of Product. If the Product itself is not a packet-access expression, there is still a chance that the inner
99
+ * loop of the product might be vectorized. This is the meaning of CanVectorizeInner. Since it doesn't affect
100
+ * the Flags, it is safe to make this value depend on ActualPacketAccessBit, that doesn't affect the ABI.
101
+ */
102
+ CanVectorizeInner = SameType
103
+ && LhsRowMajor
104
+ && (!RhsRowMajor)
105
+ && (LhsFlags & RhsFlags & ActualPacketAccessBit)
106
+ && (LhsFlags & RhsFlags & AlignedBit)
107
+ && (InnerSize % packet_traits<Scalar>::size == 0)
108
+ };
109
+ };
110
+
111
+ } // end namespace internal
112
+
113
+ template<typename LhsNested, typename RhsNested, int NestingFlags>
114
+ class CoeffBasedProduct
115
+ : internal::no_assignment_operator,
116
+ public MatrixBase<CoeffBasedProduct<LhsNested, RhsNested, NestingFlags> >
117
+ {
118
+ public:
119
+
120
+ typedef MatrixBase<CoeffBasedProduct> Base;
121
+ EIGEN_DENSE_PUBLIC_INTERFACE(CoeffBasedProduct)
122
+ typedef typename Base::PlainObject PlainObject;
123
+
124
+ private:
125
+
126
+ typedef typename internal::traits<CoeffBasedProduct>::_LhsNested _LhsNested;
127
+ typedef typename internal::traits<CoeffBasedProduct>::_RhsNested _RhsNested;
128
+
129
+ enum {
130
+ PacketSize = internal::packet_traits<Scalar>::size,
131
+ InnerSize = internal::traits<CoeffBasedProduct>::InnerSize,
132
+ Unroll = CoeffReadCost != Dynamic && CoeffReadCost <= EIGEN_UNROLLING_LIMIT,
133
+ CanVectorizeInner = internal::traits<CoeffBasedProduct>::CanVectorizeInner
134
+ };
135
+
136
+ typedef internal::product_coeff_impl<CanVectorizeInner ? InnerVectorizedTraversal : DefaultTraversal,
137
+ Unroll ? InnerSize : Dynamic,
138
+ _LhsNested, _RhsNested, Scalar> ScalarCoeffImpl;
139
+
140
+ typedef CoeffBasedProduct<LhsNested,RhsNested,NestByRefBit> LazyCoeffBasedProductType;
141
+
142
+ public:
143
+
144
+ inline CoeffBasedProduct(const CoeffBasedProduct& other)
145
+ : Base(), m_lhs(other.m_lhs), m_rhs(other.m_rhs)
146
+ {}
147
+
148
+ template<typename Lhs, typename Rhs>
149
+ inline CoeffBasedProduct(const Lhs& lhs, const Rhs& rhs)
150
+ : m_lhs(lhs), m_rhs(rhs)
151
+ {
152
+ // we don't allow taking products of matrices of different real types, as that wouldn't be vectorizable.
153
+ // We still allow to mix T and complex<T>.
154
+ EIGEN_STATIC_ASSERT((internal::scalar_product_traits<typename Lhs::RealScalar, typename Rhs::RealScalar>::Defined),
155
+ YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY)
156
+ eigen_assert(lhs.cols() == rhs.rows()
157
+ && "invalid matrix product"
158
+ && "if you wanted a coeff-wise or a dot product use the respective explicit functions");
159
+ }
160
+
161
+ EIGEN_STRONG_INLINE Index rows() const { return m_lhs.rows(); }
162
+ EIGEN_STRONG_INLINE Index cols() const { return m_rhs.cols(); }
163
+
164
+ EIGEN_STRONG_INLINE const Scalar coeff(Index row, Index col) const
165
+ {
166
+ Scalar res;
167
+ ScalarCoeffImpl::run(row, col, m_lhs, m_rhs, res);
168
+ return res;
169
+ }
170
+
171
+ /* Allow index-based non-packet access. It is impossible though to allow index-based packed access,
172
+ * which is why we don't set the LinearAccessBit.
173
+ */
174
+ EIGEN_STRONG_INLINE const Scalar coeff(Index index) const
175
+ {
176
+ Scalar res;
177
+ const Index row = RowsAtCompileTime == 1 ? 0 : index;
178
+ const Index col = RowsAtCompileTime == 1 ? index : 0;
179
+ ScalarCoeffImpl::run(row, col, m_lhs, m_rhs, res);
180
+ return res;
181
+ }
182
+
183
+ template<int LoadMode>
184
+ EIGEN_STRONG_INLINE const PacketScalar packet(Index row, Index col) const
185
+ {
186
+ PacketScalar res;
187
+ internal::product_packet_impl<Flags&RowMajorBit ? RowMajor : ColMajor,
188
+ Unroll ? InnerSize : Dynamic,
189
+ _LhsNested, _RhsNested, PacketScalar, LoadMode>
190
+ ::run(row, col, m_lhs, m_rhs, res);
191
+ return res;
192
+ }
193
+
194
+ // Implicit conversion to the nested type (trigger the evaluation of the product)
195
+ EIGEN_STRONG_INLINE operator const PlainObject& () const
196
+ {
197
+ m_result.lazyAssign(*this);
198
+ return m_result;
199
+ }
200
+
201
+ const _LhsNested& lhs() const { return m_lhs; }
202
+ const _RhsNested& rhs() const { return m_rhs; }
203
+
204
+ const Diagonal<const LazyCoeffBasedProductType,0> diagonal() const
205
+ { return reinterpret_cast<const LazyCoeffBasedProductType&>(*this); }
206
+
207
+ template<int DiagonalIndex>
208
+ const Diagonal<const LazyCoeffBasedProductType,DiagonalIndex> diagonal() const
209
+ { return reinterpret_cast<const LazyCoeffBasedProductType&>(*this); }
210
+
211
+ const Diagonal<const LazyCoeffBasedProductType,Dynamic> diagonal(Index index) const
212
+ { return reinterpret_cast<const LazyCoeffBasedProductType&>(*this).diagonal(index); }
213
+
214
+ protected:
215
+ typename internal::add_const_on_value_type<LhsNested>::type m_lhs;
216
+ typename internal::add_const_on_value_type<RhsNested>::type m_rhs;
217
+
218
+ mutable PlainObject m_result;
219
+ };
220
+
221
+ namespace internal {
222
+
223
+ // here we need to overload the nested rule for products
224
+ // such that the nested type is a const reference to a plain matrix
225
+ template<typename Lhs, typename Rhs, int N, typename PlainObject>
226
+ struct nested<CoeffBasedProduct<Lhs,Rhs,EvalBeforeNestingBit|EvalBeforeAssigningBit>, N, PlainObject>
227
+ {
228
+ typedef PlainObject const& type;
229
+ };
230
+
231
+ /***************************************************************************
232
+ * Normal product .coeff() implementation (with meta-unrolling)
233
+ ***************************************************************************/
234
+
235
+ /**************************************
236
+ *** Scalar path - no vectorization ***
237
+ **************************************/
238
+
239
+ template<int UnrollingIndex, typename Lhs, typename Rhs, typename RetScalar>
240
+ struct product_coeff_impl<DefaultTraversal, UnrollingIndex, Lhs, Rhs, RetScalar>
241
+ {
242
+ typedef typename Lhs::Index Index;
243
+ static EIGEN_STRONG_INLINE void run(Index row, Index col, const Lhs& lhs, const Rhs& rhs, RetScalar &res)
244
+ {
245
+ product_coeff_impl<DefaultTraversal, UnrollingIndex-1, Lhs, Rhs, RetScalar>::run(row, col, lhs, rhs, res);
246
+ res += lhs.coeff(row, UnrollingIndex-1) * rhs.coeff(UnrollingIndex-1, col);
247
+ }
248
+ };
249
+
250
+ template<typename Lhs, typename Rhs, typename RetScalar>
251
+ struct product_coeff_impl<DefaultTraversal, 1, Lhs, Rhs, RetScalar>
252
+ {
253
+ typedef typename Lhs::Index Index;
254
+ static EIGEN_STRONG_INLINE void run(Index row, Index col, const Lhs& lhs, const Rhs& rhs, RetScalar &res)
255
+ {
256
+ res = lhs.coeff(row, 0) * rhs.coeff(0, col);
257
+ }
258
+ };
259
+
260
+ template<typename Lhs, typename Rhs, typename RetScalar>
261
+ struct product_coeff_impl<DefaultTraversal, 0, Lhs, Rhs, RetScalar>
262
+ {
263
+ typedef typename Lhs::Index Index;
264
+ static EIGEN_STRONG_INLINE void run(Index /*row*/, Index /*col*/, const Lhs& /*lhs*/, const Rhs& /*rhs*/, RetScalar &res)
265
+ {
266
+ res = RetScalar(0);
267
+ }
268
+ };
269
+
270
+ template<typename Lhs, typename Rhs, typename RetScalar>
271
+ struct product_coeff_impl<DefaultTraversal, Dynamic, Lhs, Rhs, RetScalar>
272
+ {
273
+ typedef typename Lhs::Index Index;
274
+ static EIGEN_STRONG_INLINE void run(Index row, Index col, const Lhs& lhs, const Rhs& rhs, RetScalar& res)
275
+ {
276
+ res = (lhs.row(row).transpose().cwiseProduct( rhs.col(col) )).sum();
277
+ }
278
+ };
279
+
280
+ /*******************************************
281
+ *** Scalar path with inner vectorization ***
282
+ *******************************************/
283
+
284
+ template<int UnrollingIndex, typename Lhs, typename Rhs, typename Packet>
285
+ struct product_coeff_vectorized_unroller
286
+ {
287
+ typedef typename Lhs::Index Index;
288
+ enum { PacketSize = packet_traits<typename Lhs::Scalar>::size };
289
+ static EIGEN_STRONG_INLINE void run(Index row, Index col, const Lhs& lhs, const Rhs& rhs, typename Lhs::PacketScalar &pres)
290
+ {
291
+ product_coeff_vectorized_unroller<UnrollingIndex-PacketSize, Lhs, Rhs, Packet>::run(row, col, lhs, rhs, pres);
292
+ pres = padd(pres, pmul( lhs.template packet<Aligned>(row, UnrollingIndex) , rhs.template packet<Aligned>(UnrollingIndex, col) ));
293
+ }
294
+ };
295
+
296
+ template<typename Lhs, typename Rhs, typename Packet>
297
+ struct product_coeff_vectorized_unroller<0, Lhs, Rhs, Packet>
298
+ {
299
+ typedef typename Lhs::Index Index;
300
+ static EIGEN_STRONG_INLINE void run(Index row, Index col, const Lhs& lhs, const Rhs& rhs, typename Lhs::PacketScalar &pres)
301
+ {
302
+ pres = pmul(lhs.template packet<Aligned>(row, 0) , rhs.template packet<Aligned>(0, col));
303
+ }
304
+ };
305
+
306
+ template<typename Lhs, typename Rhs, typename RetScalar>
307
+ struct product_coeff_impl<InnerVectorizedTraversal, 0, Lhs, Rhs, RetScalar>
308
+ {
309
+ typedef typename Lhs::Index Index;
310
+ static EIGEN_STRONG_INLINE void run(Index /*row*/, Index /*col*/, const Lhs& /*lhs*/, const Rhs& /*rhs*/, RetScalar &res)
311
+ {
312
+ res = 0;
313
+ }
314
+ };
315
+
316
+ template<int UnrollingIndex, typename Lhs, typename Rhs, typename RetScalar>
317
+ struct product_coeff_impl<InnerVectorizedTraversal, UnrollingIndex, Lhs, Rhs, RetScalar>
318
+ {
319
+ typedef typename Lhs::PacketScalar Packet;
320
+ typedef typename Lhs::Index Index;
321
+ enum { PacketSize = packet_traits<typename Lhs::Scalar>::size };
322
+ static EIGEN_STRONG_INLINE void run(Index row, Index col, const Lhs& lhs, const Rhs& rhs, RetScalar &res)
323
+ {
324
+ Packet pres;
325
+ product_coeff_vectorized_unroller<UnrollingIndex-PacketSize, Lhs, Rhs, Packet>::run(row, col, lhs, rhs, pres);
326
+ res = predux(pres);
327
+ }
328
+ };
329
+
330
+ template<typename Lhs, typename Rhs, int LhsRows = Lhs::RowsAtCompileTime, int RhsCols = Rhs::ColsAtCompileTime>
331
+ struct product_coeff_vectorized_dyn_selector
332
+ {
333
+ typedef typename Lhs::Index Index;
334
+ static EIGEN_STRONG_INLINE void run(Index row, Index col, const Lhs& lhs, const Rhs& rhs, typename Lhs::Scalar &res)
335
+ {
336
+ res = lhs.row(row).transpose().cwiseProduct(rhs.col(col)).sum();
337
+ }
338
+ };
339
+
340
+ // NOTE the 3 following specializations are because taking .col(0) on a vector is a bit slower
341
+ // NOTE maybe they are now useless since we have a specialization for Block<Matrix>
342
+ template<typename Lhs, typename Rhs, int RhsCols>
343
+ struct product_coeff_vectorized_dyn_selector<Lhs,Rhs,1,RhsCols>
344
+ {
345
+ typedef typename Lhs::Index Index;
346
+ static EIGEN_STRONG_INLINE void run(Index /*row*/, Index col, const Lhs& lhs, const Rhs& rhs, typename Lhs::Scalar &res)
347
+ {
348
+ res = lhs.transpose().cwiseProduct(rhs.col(col)).sum();
349
+ }
350
+ };
351
+
352
+ template<typename Lhs, typename Rhs, int LhsRows>
353
+ struct product_coeff_vectorized_dyn_selector<Lhs,Rhs,LhsRows,1>
354
+ {
355
+ typedef typename Lhs::Index Index;
356
+ static EIGEN_STRONG_INLINE void run(Index row, Index /*col*/, const Lhs& lhs, const Rhs& rhs, typename Lhs::Scalar &res)
357
+ {
358
+ res = lhs.row(row).transpose().cwiseProduct(rhs).sum();
359
+ }
360
+ };
361
+
362
+ template<typename Lhs, typename Rhs>
363
+ struct product_coeff_vectorized_dyn_selector<Lhs,Rhs,1,1>
364
+ {
365
+ typedef typename Lhs::Index Index;
366
+ static EIGEN_STRONG_INLINE void run(Index /*row*/, Index /*col*/, const Lhs& lhs, const Rhs& rhs, typename Lhs::Scalar &res)
367
+ {
368
+ res = lhs.transpose().cwiseProduct(rhs).sum();
369
+ }
370
+ };
371
+
372
+ template<typename Lhs, typename Rhs, typename RetScalar>
373
+ struct product_coeff_impl<InnerVectorizedTraversal, Dynamic, Lhs, Rhs, RetScalar>
374
+ {
375
+ typedef typename Lhs::Index Index;
376
+ static EIGEN_STRONG_INLINE void run(Index row, Index col, const Lhs& lhs, const Rhs& rhs, typename Lhs::Scalar &res)
377
+ {
378
+ product_coeff_vectorized_dyn_selector<Lhs,Rhs>::run(row, col, lhs, rhs, res);
379
+ }
380
+ };
381
+
382
+ /*******************
383
+ *** Packet path ***
384
+ *******************/
385
+
386
+ template<int UnrollingIndex, typename Lhs, typename Rhs, typename Packet, int LoadMode>
387
+ struct product_packet_impl<RowMajor, UnrollingIndex, Lhs, Rhs, Packet, LoadMode>
388
+ {
389
+ typedef typename Lhs::Index Index;
390
+ static EIGEN_STRONG_INLINE void run(Index row, Index col, const Lhs& lhs, const Rhs& rhs, Packet &res)
391
+ {
392
+ product_packet_impl<RowMajor, UnrollingIndex-1, Lhs, Rhs, Packet, LoadMode>::run(row, col, lhs, rhs, res);
393
+ res = pmadd(pset1<Packet>(lhs.coeff(row, UnrollingIndex-1)), rhs.template packet<LoadMode>(UnrollingIndex-1, col), res);
394
+ }
395
+ };
396
+
397
+ template<int UnrollingIndex, typename Lhs, typename Rhs, typename Packet, int LoadMode>
398
+ struct product_packet_impl<ColMajor, UnrollingIndex, Lhs, Rhs, Packet, LoadMode>
399
+ {
400
+ typedef typename Lhs::Index Index;
401
+ static EIGEN_STRONG_INLINE void run(Index row, Index col, const Lhs& lhs, const Rhs& rhs, Packet &res)
402
+ {
403
+ product_packet_impl<ColMajor, UnrollingIndex-1, Lhs, Rhs, Packet, LoadMode>::run(row, col, lhs, rhs, res);
404
+ res = pmadd(lhs.template packet<LoadMode>(row, UnrollingIndex-1), pset1<Packet>(rhs.coeff(UnrollingIndex-1, col)), res);
405
+ }
406
+ };
407
+
408
+ template<typename Lhs, typename Rhs, typename Packet, int LoadMode>
409
+ struct product_packet_impl<RowMajor, 1, Lhs, Rhs, Packet, LoadMode>
410
+ {
411
+ typedef typename Lhs::Index Index;
412
+ static EIGEN_STRONG_INLINE void run(Index row, Index col, const Lhs& lhs, const Rhs& rhs, Packet &res)
413
+ {
414
+ res = pmul(pset1<Packet>(lhs.coeff(row, 0)),rhs.template packet<LoadMode>(0, col));
415
+ }
416
+ };
417
+
418
+ template<typename Lhs, typename Rhs, typename Packet, int LoadMode>
419
+ struct product_packet_impl<ColMajor, 1, Lhs, Rhs, Packet, LoadMode>
420
+ {
421
+ typedef typename Lhs::Index Index;
422
+ static EIGEN_STRONG_INLINE void run(Index row, Index col, const Lhs& lhs, const Rhs& rhs, Packet &res)
423
+ {
424
+ res = pmul(lhs.template packet<LoadMode>(row, 0), pset1<Packet>(rhs.coeff(0, col)));
425
+ }
426
+ };
427
+
428
+ template<typename Lhs, typename Rhs, typename Packet, int LoadMode>
429
+ struct product_packet_impl<RowMajor, 0, Lhs, Rhs, Packet, LoadMode>
430
+ {
431
+ typedef typename Lhs::Index Index;
432
+ static EIGEN_STRONG_INLINE void run(Index /*row*/, Index /*col*/, const Lhs& /*lhs*/, const Rhs& /*rhs*/, Packet &res)
433
+ {
434
+ res = pset1<Packet>(0);
435
+ }
436
+ };
437
+
438
+ template<typename Lhs, typename Rhs, typename Packet, int LoadMode>
439
+ struct product_packet_impl<ColMajor, 0, Lhs, Rhs, Packet, LoadMode>
440
+ {
441
+ typedef typename Lhs::Index Index;
442
+ static EIGEN_STRONG_INLINE void run(Index /*row*/, Index /*col*/, const Lhs& /*lhs*/, const Rhs& /*rhs*/, Packet &res)
443
+ {
444
+ res = pset1<Packet>(0);
445
+ }
446
+ };
447
+
448
+ template<typename Lhs, typename Rhs, typename Packet, int LoadMode>
449
+ struct product_packet_impl<RowMajor, Dynamic, Lhs, Rhs, Packet, LoadMode>
450
+ {
451
+ typedef typename Lhs::Index Index;
452
+ static EIGEN_STRONG_INLINE void run(Index row, Index col, const Lhs& lhs, const Rhs& rhs, Packet& res)
453
+ {
454
+ res = pset1<Packet>(0);
455
+ for(Index i = 0; i < lhs.cols(); ++i)
456
+ res = pmadd(pset1<Packet>(lhs.coeff(row, i)), rhs.template packet<LoadMode>(i, col), res);
457
+ }
458
+ };
459
+
460
+ template<typename Lhs, typename Rhs, typename Packet, int LoadMode>
461
+ struct product_packet_impl<ColMajor, Dynamic, Lhs, Rhs, Packet, LoadMode>
462
+ {
463
+ typedef typename Lhs::Index Index;
464
+ static EIGEN_STRONG_INLINE void run(Index row, Index col, const Lhs& lhs, const Rhs& rhs, Packet& res)
465
+ {
466
+ res = pset1<Packet>(0);
467
+ for(Index i = 0; i < lhs.cols(); ++i)
468
+ res = pmadd(lhs.template packet<LoadMode>(row, i), pset1<Packet>(rhs.coeff(i, col)), res);
469
+ }
470
+ };
471
+
472
+ } // end namespace internal
473
+
474
+ } // end namespace Eigen
475
+
476
+ #endif // EIGEN_COEFFBASED_PRODUCT_H