ruby-eigen 0.0.9 → 0.0.10.pre1

Sign up to get free protection for your applications and to get access to all the features.
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,264 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // Copyright (C) 2009-2010 Gael Guennebaud <gael.guennebaud@inria.fr>
5
+ //
6
+ // This Source Code Form is subject to the terms of the Mozilla
7
+ // Public License v. 2.0. If a copy of the MPL was not distributed
8
+ // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
9
+
10
+ #ifndef EIGEN_ARRAYWRAPPER_H
11
+ #define EIGEN_ARRAYWRAPPER_H
12
+
13
+ namespace Eigen {
14
+
15
+ /** \class ArrayWrapper
16
+ * \ingroup Core_Module
17
+ *
18
+ * \brief Expression of a mathematical vector or matrix as an array object
19
+ *
20
+ * This class is the return type of MatrixBase::array(), and most of the time
21
+ * this is the only way it is use.
22
+ *
23
+ * \sa MatrixBase::array(), class MatrixWrapper
24
+ */
25
+
26
+ namespace internal {
27
+ template<typename ExpressionType>
28
+ struct traits<ArrayWrapper<ExpressionType> >
29
+ : public traits<typename remove_all<typename ExpressionType::Nested>::type >
30
+ {
31
+ typedef ArrayXpr XprKind;
32
+ // Let's remove NestByRefBit
33
+ enum {
34
+ Flags0 = traits<typename remove_all<typename ExpressionType::Nested>::type >::Flags,
35
+ Flags = Flags0 & ~NestByRefBit
36
+ };
37
+ };
38
+ }
39
+
40
+ template<typename ExpressionType>
41
+ class ArrayWrapper : public ArrayBase<ArrayWrapper<ExpressionType> >
42
+ {
43
+ public:
44
+ typedef ArrayBase<ArrayWrapper> Base;
45
+ EIGEN_DENSE_PUBLIC_INTERFACE(ArrayWrapper)
46
+ EIGEN_INHERIT_ASSIGNMENT_OPERATORS(ArrayWrapper)
47
+
48
+ typedef typename internal::conditional<
49
+ internal::is_lvalue<ExpressionType>::value,
50
+ Scalar,
51
+ const Scalar
52
+ >::type ScalarWithConstIfNotLvalue;
53
+
54
+ typedef typename internal::nested<ExpressionType>::type NestedExpressionType;
55
+
56
+ inline ArrayWrapper(ExpressionType& matrix) : m_expression(matrix) {}
57
+
58
+ inline Index rows() const { return m_expression.rows(); }
59
+ inline Index cols() const { return m_expression.cols(); }
60
+ inline Index outerStride() const { return m_expression.outerStride(); }
61
+ inline Index innerStride() const { return m_expression.innerStride(); }
62
+
63
+ inline ScalarWithConstIfNotLvalue* data() { return m_expression.const_cast_derived().data(); }
64
+ inline const Scalar* data() const { return m_expression.data(); }
65
+
66
+ inline CoeffReturnType coeff(Index rowId, Index colId) const
67
+ {
68
+ return m_expression.coeff(rowId, colId);
69
+ }
70
+
71
+ inline Scalar& coeffRef(Index rowId, Index colId)
72
+ {
73
+ return m_expression.const_cast_derived().coeffRef(rowId, colId);
74
+ }
75
+
76
+ inline const Scalar& coeffRef(Index rowId, Index colId) const
77
+ {
78
+ return m_expression.const_cast_derived().coeffRef(rowId, colId);
79
+ }
80
+
81
+ inline CoeffReturnType coeff(Index index) const
82
+ {
83
+ return m_expression.coeff(index);
84
+ }
85
+
86
+ inline Scalar& coeffRef(Index index)
87
+ {
88
+ return m_expression.const_cast_derived().coeffRef(index);
89
+ }
90
+
91
+ inline const Scalar& coeffRef(Index index) const
92
+ {
93
+ return m_expression.const_cast_derived().coeffRef(index);
94
+ }
95
+
96
+ template<int LoadMode>
97
+ inline const PacketScalar packet(Index rowId, Index colId) const
98
+ {
99
+ return m_expression.template packet<LoadMode>(rowId, colId);
100
+ }
101
+
102
+ template<int LoadMode>
103
+ inline void writePacket(Index rowId, Index colId, const PacketScalar& val)
104
+ {
105
+ m_expression.const_cast_derived().template writePacket<LoadMode>(rowId, colId, val);
106
+ }
107
+
108
+ template<int LoadMode>
109
+ inline const PacketScalar packet(Index index) const
110
+ {
111
+ return m_expression.template packet<LoadMode>(index);
112
+ }
113
+
114
+ template<int LoadMode>
115
+ inline void writePacket(Index index, const PacketScalar& val)
116
+ {
117
+ m_expression.const_cast_derived().template writePacket<LoadMode>(index, val);
118
+ }
119
+
120
+ template<typename Dest>
121
+ inline void evalTo(Dest& dst) const { dst = m_expression; }
122
+
123
+ const typename internal::remove_all<NestedExpressionType>::type&
124
+ nestedExpression() const
125
+ {
126
+ return m_expression;
127
+ }
128
+
129
+ /** Forwards the resizing request to the nested expression
130
+ * \sa DenseBase::resize(Index) */
131
+ void resize(Index newSize) { m_expression.const_cast_derived().resize(newSize); }
132
+ /** Forwards the resizing request to the nested expression
133
+ * \sa DenseBase::resize(Index,Index)*/
134
+ void resize(Index nbRows, Index nbCols) { m_expression.const_cast_derived().resize(nbRows,nbCols); }
135
+
136
+ protected:
137
+ NestedExpressionType m_expression;
138
+ };
139
+
140
+ /** \class MatrixWrapper
141
+ * \ingroup Core_Module
142
+ *
143
+ * \brief Expression of an array as a mathematical vector or matrix
144
+ *
145
+ * This class is the return type of ArrayBase::matrix(), and most of the time
146
+ * this is the only way it is use.
147
+ *
148
+ * \sa MatrixBase::matrix(), class ArrayWrapper
149
+ */
150
+
151
+ namespace internal {
152
+ template<typename ExpressionType>
153
+ struct traits<MatrixWrapper<ExpressionType> >
154
+ : public traits<typename remove_all<typename ExpressionType::Nested>::type >
155
+ {
156
+ typedef MatrixXpr XprKind;
157
+ // Let's remove NestByRefBit
158
+ enum {
159
+ Flags0 = traits<typename remove_all<typename ExpressionType::Nested>::type >::Flags,
160
+ Flags = Flags0 & ~NestByRefBit
161
+ };
162
+ };
163
+ }
164
+
165
+ template<typename ExpressionType>
166
+ class MatrixWrapper : public MatrixBase<MatrixWrapper<ExpressionType> >
167
+ {
168
+ public:
169
+ typedef MatrixBase<MatrixWrapper<ExpressionType> > Base;
170
+ EIGEN_DENSE_PUBLIC_INTERFACE(MatrixWrapper)
171
+ EIGEN_INHERIT_ASSIGNMENT_OPERATORS(MatrixWrapper)
172
+
173
+ typedef typename internal::conditional<
174
+ internal::is_lvalue<ExpressionType>::value,
175
+ Scalar,
176
+ const Scalar
177
+ >::type ScalarWithConstIfNotLvalue;
178
+
179
+ typedef typename internal::nested<ExpressionType>::type NestedExpressionType;
180
+
181
+ inline MatrixWrapper(ExpressionType& a_matrix) : m_expression(a_matrix) {}
182
+
183
+ inline Index rows() const { return m_expression.rows(); }
184
+ inline Index cols() const { return m_expression.cols(); }
185
+ inline Index outerStride() const { return m_expression.outerStride(); }
186
+ inline Index innerStride() const { return m_expression.innerStride(); }
187
+
188
+ inline ScalarWithConstIfNotLvalue* data() { return m_expression.const_cast_derived().data(); }
189
+ inline const Scalar* data() const { return m_expression.data(); }
190
+
191
+ inline CoeffReturnType coeff(Index rowId, Index colId) const
192
+ {
193
+ return m_expression.coeff(rowId, colId);
194
+ }
195
+
196
+ inline Scalar& coeffRef(Index rowId, Index colId)
197
+ {
198
+ return m_expression.const_cast_derived().coeffRef(rowId, colId);
199
+ }
200
+
201
+ inline const Scalar& coeffRef(Index rowId, Index colId) const
202
+ {
203
+ return m_expression.derived().coeffRef(rowId, colId);
204
+ }
205
+
206
+ inline CoeffReturnType coeff(Index index) const
207
+ {
208
+ return m_expression.coeff(index);
209
+ }
210
+
211
+ inline Scalar& coeffRef(Index index)
212
+ {
213
+ return m_expression.const_cast_derived().coeffRef(index);
214
+ }
215
+
216
+ inline const Scalar& coeffRef(Index index) const
217
+ {
218
+ return m_expression.const_cast_derived().coeffRef(index);
219
+ }
220
+
221
+ template<int LoadMode>
222
+ inline const PacketScalar packet(Index rowId, Index colId) const
223
+ {
224
+ return m_expression.template packet<LoadMode>(rowId, colId);
225
+ }
226
+
227
+ template<int LoadMode>
228
+ inline void writePacket(Index rowId, Index colId, const PacketScalar& val)
229
+ {
230
+ m_expression.const_cast_derived().template writePacket<LoadMode>(rowId, colId, val);
231
+ }
232
+
233
+ template<int LoadMode>
234
+ inline const PacketScalar packet(Index index) const
235
+ {
236
+ return m_expression.template packet<LoadMode>(index);
237
+ }
238
+
239
+ template<int LoadMode>
240
+ inline void writePacket(Index index, const PacketScalar& val)
241
+ {
242
+ m_expression.const_cast_derived().template writePacket<LoadMode>(index, val);
243
+ }
244
+
245
+ const typename internal::remove_all<NestedExpressionType>::type&
246
+ nestedExpression() const
247
+ {
248
+ return m_expression;
249
+ }
250
+
251
+ /** Forwards the resizing request to the nested expression
252
+ * \sa DenseBase::resize(Index) */
253
+ void resize(Index newSize) { m_expression.const_cast_derived().resize(newSize); }
254
+ /** Forwards the resizing request to the nested expression
255
+ * \sa DenseBase::resize(Index,Index)*/
256
+ void resize(Index nbRows, Index nbCols) { m_expression.const_cast_derived().resize(nbRows,nbCols); }
257
+
258
+ protected:
259
+ NestedExpressionType m_expression;
260
+ };
261
+
262
+ } // end namespace Eigen
263
+
264
+ #endif // EIGEN_ARRAYWRAPPER_H
@@ -0,0 +1,590 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // Copyright (C) 2007 Michael Olbrich <michael.olbrich@gmx.net>
5
+ // Copyright (C) 2006-2010 Benoit Jacob <jacob.benoit.1@gmail.com>
6
+ // Copyright (C) 2008 Gael Guennebaud <gael.guennebaud@inria.fr>
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_ASSIGN_H
13
+ #define EIGEN_ASSIGN_H
14
+
15
+ namespace Eigen {
16
+
17
+ namespace internal {
18
+
19
+ /***************************************************************************
20
+ * Part 1 : the logic deciding a strategy for traversal and unrolling *
21
+ ***************************************************************************/
22
+
23
+ template <typename Derived, typename OtherDerived>
24
+ struct assign_traits
25
+ {
26
+ public:
27
+ enum {
28
+ DstIsAligned = Derived::Flags & AlignedBit,
29
+ DstHasDirectAccess = Derived::Flags & DirectAccessBit,
30
+ SrcIsAligned = OtherDerived::Flags & AlignedBit,
31
+ JointAlignment = bool(DstIsAligned) && bool(SrcIsAligned) ? Aligned : Unaligned
32
+ };
33
+
34
+ private:
35
+ enum {
36
+ InnerSize = int(Derived::IsVectorAtCompileTime) ? int(Derived::SizeAtCompileTime)
37
+ : int(Derived::Flags)&RowMajorBit ? int(Derived::ColsAtCompileTime)
38
+ : int(Derived::RowsAtCompileTime),
39
+ InnerMaxSize = int(Derived::IsVectorAtCompileTime) ? int(Derived::MaxSizeAtCompileTime)
40
+ : int(Derived::Flags)&RowMajorBit ? int(Derived::MaxColsAtCompileTime)
41
+ : int(Derived::MaxRowsAtCompileTime),
42
+ MaxSizeAtCompileTime = Derived::SizeAtCompileTime,
43
+ PacketSize = packet_traits<typename Derived::Scalar>::size
44
+ };
45
+
46
+ enum {
47
+ StorageOrdersAgree = (int(Derived::IsRowMajor) == int(OtherDerived::IsRowMajor)),
48
+ MightVectorize = StorageOrdersAgree
49
+ && (int(Derived::Flags) & int(OtherDerived::Flags) & ActualPacketAccessBit),
50
+ MayInnerVectorize = MightVectorize && int(InnerSize)!=Dynamic && int(InnerSize)%int(PacketSize)==0
51
+ && int(DstIsAligned) && int(SrcIsAligned),
52
+ MayLinearize = StorageOrdersAgree && (int(Derived::Flags) & int(OtherDerived::Flags) & LinearAccessBit),
53
+ MayLinearVectorize = MightVectorize && MayLinearize && DstHasDirectAccess
54
+ && (DstIsAligned || MaxSizeAtCompileTime == Dynamic),
55
+ /* If the destination isn't aligned, we have to do runtime checks and we don't unroll,
56
+ so it's only good for large enough sizes. */
57
+ MaySliceVectorize = MightVectorize && DstHasDirectAccess
58
+ && (int(InnerMaxSize)==Dynamic || int(InnerMaxSize)>=3*PacketSize)
59
+ /* slice vectorization can be slow, so we only want it if the slices are big, which is
60
+ indicated by InnerMaxSize rather than InnerSize, think of the case of a dynamic block
61
+ in a fixed-size matrix */
62
+ };
63
+
64
+ public:
65
+ enum {
66
+ Traversal = int(MayInnerVectorize) ? int(InnerVectorizedTraversal)
67
+ : int(MayLinearVectorize) ? int(LinearVectorizedTraversal)
68
+ : int(MaySliceVectorize) ? int(SliceVectorizedTraversal)
69
+ : int(MayLinearize) ? int(LinearTraversal)
70
+ : int(DefaultTraversal),
71
+ Vectorized = int(Traversal) == InnerVectorizedTraversal
72
+ || int(Traversal) == LinearVectorizedTraversal
73
+ || int(Traversal) == SliceVectorizedTraversal
74
+ };
75
+
76
+ private:
77
+ enum {
78
+ UnrollingLimit = EIGEN_UNROLLING_LIMIT * (Vectorized ? int(PacketSize) : 1),
79
+ MayUnrollCompletely = int(Derived::SizeAtCompileTime) != Dynamic
80
+ && int(OtherDerived::CoeffReadCost) != Dynamic
81
+ && int(Derived::SizeAtCompileTime) * int(OtherDerived::CoeffReadCost) <= int(UnrollingLimit),
82
+ MayUnrollInner = int(InnerSize) != Dynamic
83
+ && int(OtherDerived::CoeffReadCost) != Dynamic
84
+ && int(InnerSize) * int(OtherDerived::CoeffReadCost) <= int(UnrollingLimit)
85
+ };
86
+
87
+ public:
88
+ enum {
89
+ Unrolling = (int(Traversal) == int(InnerVectorizedTraversal) || int(Traversal) == int(DefaultTraversal))
90
+ ? (
91
+ int(MayUnrollCompletely) ? int(CompleteUnrolling)
92
+ : int(MayUnrollInner) ? int(InnerUnrolling)
93
+ : int(NoUnrolling)
94
+ )
95
+ : int(Traversal) == int(LinearVectorizedTraversal)
96
+ ? ( bool(MayUnrollCompletely) && bool(DstIsAligned) ? int(CompleteUnrolling) : int(NoUnrolling) )
97
+ : int(Traversal) == int(LinearTraversal)
98
+ ? ( bool(MayUnrollCompletely) ? int(CompleteUnrolling) : int(NoUnrolling) )
99
+ : int(NoUnrolling)
100
+ };
101
+
102
+ #ifdef EIGEN_DEBUG_ASSIGN
103
+ static void debug()
104
+ {
105
+ EIGEN_DEBUG_VAR(DstIsAligned)
106
+ EIGEN_DEBUG_VAR(SrcIsAligned)
107
+ EIGEN_DEBUG_VAR(JointAlignment)
108
+ EIGEN_DEBUG_VAR(InnerSize)
109
+ EIGEN_DEBUG_VAR(InnerMaxSize)
110
+ EIGEN_DEBUG_VAR(PacketSize)
111
+ EIGEN_DEBUG_VAR(StorageOrdersAgree)
112
+ EIGEN_DEBUG_VAR(MightVectorize)
113
+ EIGEN_DEBUG_VAR(MayLinearize)
114
+ EIGEN_DEBUG_VAR(MayInnerVectorize)
115
+ EIGEN_DEBUG_VAR(MayLinearVectorize)
116
+ EIGEN_DEBUG_VAR(MaySliceVectorize)
117
+ EIGEN_DEBUG_VAR(Traversal)
118
+ EIGEN_DEBUG_VAR(UnrollingLimit)
119
+ EIGEN_DEBUG_VAR(MayUnrollCompletely)
120
+ EIGEN_DEBUG_VAR(MayUnrollInner)
121
+ EIGEN_DEBUG_VAR(Unrolling)
122
+ }
123
+ #endif
124
+ };
125
+
126
+ /***************************************************************************
127
+ * Part 2 : meta-unrollers
128
+ ***************************************************************************/
129
+
130
+ /************************
131
+ *** Default traversal ***
132
+ ************************/
133
+
134
+ template<typename Derived1, typename Derived2, int Index, int Stop>
135
+ struct assign_DefaultTraversal_CompleteUnrolling
136
+ {
137
+ enum {
138
+ outer = Index / Derived1::InnerSizeAtCompileTime,
139
+ inner = Index % Derived1::InnerSizeAtCompileTime
140
+ };
141
+
142
+ static EIGEN_STRONG_INLINE void run(Derived1 &dst, const Derived2 &src)
143
+ {
144
+ dst.copyCoeffByOuterInner(outer, inner, src);
145
+ assign_DefaultTraversal_CompleteUnrolling<Derived1, Derived2, Index+1, Stop>::run(dst, src);
146
+ }
147
+ };
148
+
149
+ template<typename Derived1, typename Derived2, int Stop>
150
+ struct assign_DefaultTraversal_CompleteUnrolling<Derived1, Derived2, Stop, Stop>
151
+ {
152
+ static EIGEN_STRONG_INLINE void run(Derived1 &, const Derived2 &) {}
153
+ };
154
+
155
+ template<typename Derived1, typename Derived2, int Index, int Stop>
156
+ struct assign_DefaultTraversal_InnerUnrolling
157
+ {
158
+ static EIGEN_STRONG_INLINE void run(Derived1 &dst, const Derived2 &src, typename Derived1::Index outer)
159
+ {
160
+ dst.copyCoeffByOuterInner(outer, Index, src);
161
+ assign_DefaultTraversal_InnerUnrolling<Derived1, Derived2, Index+1, Stop>::run(dst, src, outer);
162
+ }
163
+ };
164
+
165
+ template<typename Derived1, typename Derived2, int Stop>
166
+ struct assign_DefaultTraversal_InnerUnrolling<Derived1, Derived2, Stop, Stop>
167
+ {
168
+ static EIGEN_STRONG_INLINE void run(Derived1 &, const Derived2 &, typename Derived1::Index) {}
169
+ };
170
+
171
+ /***********************
172
+ *** Linear traversal ***
173
+ ***********************/
174
+
175
+ template<typename Derived1, typename Derived2, int Index, int Stop>
176
+ struct assign_LinearTraversal_CompleteUnrolling
177
+ {
178
+ static EIGEN_STRONG_INLINE void run(Derived1 &dst, const Derived2 &src)
179
+ {
180
+ dst.copyCoeff(Index, src);
181
+ assign_LinearTraversal_CompleteUnrolling<Derived1, Derived2, Index+1, Stop>::run(dst, src);
182
+ }
183
+ };
184
+
185
+ template<typename Derived1, typename Derived2, int Stop>
186
+ struct assign_LinearTraversal_CompleteUnrolling<Derived1, Derived2, Stop, Stop>
187
+ {
188
+ static EIGEN_STRONG_INLINE void run(Derived1 &, const Derived2 &) {}
189
+ };
190
+
191
+ /**************************
192
+ *** Inner vectorization ***
193
+ **************************/
194
+
195
+ template<typename Derived1, typename Derived2, int Index, int Stop>
196
+ struct assign_innervec_CompleteUnrolling
197
+ {
198
+ enum {
199
+ outer = Index / Derived1::InnerSizeAtCompileTime,
200
+ inner = Index % Derived1::InnerSizeAtCompileTime,
201
+ JointAlignment = assign_traits<Derived1,Derived2>::JointAlignment
202
+ };
203
+
204
+ static EIGEN_STRONG_INLINE void run(Derived1 &dst, const Derived2 &src)
205
+ {
206
+ dst.template copyPacketByOuterInner<Derived2, Aligned, JointAlignment>(outer, inner, src);
207
+ assign_innervec_CompleteUnrolling<Derived1, Derived2,
208
+ Index+packet_traits<typename Derived1::Scalar>::size, Stop>::run(dst, src);
209
+ }
210
+ };
211
+
212
+ template<typename Derived1, typename Derived2, int Stop>
213
+ struct assign_innervec_CompleteUnrolling<Derived1, Derived2, Stop, Stop>
214
+ {
215
+ static EIGEN_STRONG_INLINE void run(Derived1 &, const Derived2 &) {}
216
+ };
217
+
218
+ template<typename Derived1, typename Derived2, int Index, int Stop>
219
+ struct assign_innervec_InnerUnrolling
220
+ {
221
+ static EIGEN_STRONG_INLINE void run(Derived1 &dst, const Derived2 &src, typename Derived1::Index outer)
222
+ {
223
+ dst.template copyPacketByOuterInner<Derived2, Aligned, Aligned>(outer, Index, src);
224
+ assign_innervec_InnerUnrolling<Derived1, Derived2,
225
+ Index+packet_traits<typename Derived1::Scalar>::size, Stop>::run(dst, src, outer);
226
+ }
227
+ };
228
+
229
+ template<typename Derived1, typename Derived2, int Stop>
230
+ struct assign_innervec_InnerUnrolling<Derived1, Derived2, Stop, Stop>
231
+ {
232
+ static EIGEN_STRONG_INLINE void run(Derived1 &, const Derived2 &, typename Derived1::Index) {}
233
+ };
234
+
235
+ /***************************************************************************
236
+ * Part 3 : implementation of all cases
237
+ ***************************************************************************/
238
+
239
+ template<typename Derived1, typename Derived2,
240
+ int Traversal = assign_traits<Derived1, Derived2>::Traversal,
241
+ int Unrolling = assign_traits<Derived1, Derived2>::Unrolling,
242
+ int Version = Specialized>
243
+ struct assign_impl;
244
+
245
+ /************************
246
+ *** Default traversal ***
247
+ ************************/
248
+
249
+ template<typename Derived1, typename Derived2, int Unrolling, int Version>
250
+ struct assign_impl<Derived1, Derived2, InvalidTraversal, Unrolling, Version>
251
+ {
252
+ static inline void run(Derived1 &, const Derived2 &) { }
253
+ };
254
+
255
+ template<typename Derived1, typename Derived2, int Version>
256
+ struct assign_impl<Derived1, Derived2, DefaultTraversal, NoUnrolling, Version>
257
+ {
258
+ typedef typename Derived1::Index Index;
259
+ static inline void run(Derived1 &dst, const Derived2 &src)
260
+ {
261
+ const Index innerSize = dst.innerSize();
262
+ const Index outerSize = dst.outerSize();
263
+ for(Index outer = 0; outer < outerSize; ++outer)
264
+ for(Index inner = 0; inner < innerSize; ++inner)
265
+ dst.copyCoeffByOuterInner(outer, inner, src);
266
+ }
267
+ };
268
+
269
+ template<typename Derived1, typename Derived2, int Version>
270
+ struct assign_impl<Derived1, Derived2, DefaultTraversal, CompleteUnrolling, Version>
271
+ {
272
+ static EIGEN_STRONG_INLINE void run(Derived1 &dst, const Derived2 &src)
273
+ {
274
+ assign_DefaultTraversal_CompleteUnrolling<Derived1, Derived2, 0, Derived1::SizeAtCompileTime>
275
+ ::run(dst, src);
276
+ }
277
+ };
278
+
279
+ template<typename Derived1, typename Derived2, int Version>
280
+ struct assign_impl<Derived1, Derived2, DefaultTraversal, InnerUnrolling, Version>
281
+ {
282
+ typedef typename Derived1::Index Index;
283
+ static EIGEN_STRONG_INLINE void run(Derived1 &dst, const Derived2 &src)
284
+ {
285
+ const Index outerSize = dst.outerSize();
286
+ for(Index outer = 0; outer < outerSize; ++outer)
287
+ assign_DefaultTraversal_InnerUnrolling<Derived1, Derived2, 0, Derived1::InnerSizeAtCompileTime>
288
+ ::run(dst, src, outer);
289
+ }
290
+ };
291
+
292
+ /***********************
293
+ *** Linear traversal ***
294
+ ***********************/
295
+
296
+ template<typename Derived1, typename Derived2, int Version>
297
+ struct assign_impl<Derived1, Derived2, LinearTraversal, NoUnrolling, Version>
298
+ {
299
+ typedef typename Derived1::Index Index;
300
+ static inline void run(Derived1 &dst, const Derived2 &src)
301
+ {
302
+ const Index size = dst.size();
303
+ for(Index i = 0; i < size; ++i)
304
+ dst.copyCoeff(i, src);
305
+ }
306
+ };
307
+
308
+ template<typename Derived1, typename Derived2, int Version>
309
+ struct assign_impl<Derived1, Derived2, LinearTraversal, CompleteUnrolling, Version>
310
+ {
311
+ static EIGEN_STRONG_INLINE void run(Derived1 &dst, const Derived2 &src)
312
+ {
313
+ assign_LinearTraversal_CompleteUnrolling<Derived1, Derived2, 0, Derived1::SizeAtCompileTime>
314
+ ::run(dst, src);
315
+ }
316
+ };
317
+
318
+ /**************************
319
+ *** Inner vectorization ***
320
+ **************************/
321
+
322
+ template<typename Derived1, typename Derived2, int Version>
323
+ struct assign_impl<Derived1, Derived2, InnerVectorizedTraversal, NoUnrolling, Version>
324
+ {
325
+ typedef typename Derived1::Index Index;
326
+ static inline void run(Derived1 &dst, const Derived2 &src)
327
+ {
328
+ const Index innerSize = dst.innerSize();
329
+ const Index outerSize = dst.outerSize();
330
+ const Index packetSize = packet_traits<typename Derived1::Scalar>::size;
331
+ for(Index outer = 0; outer < outerSize; ++outer)
332
+ for(Index inner = 0; inner < innerSize; inner+=packetSize)
333
+ dst.template copyPacketByOuterInner<Derived2, Aligned, Aligned>(outer, inner, src);
334
+ }
335
+ };
336
+
337
+ template<typename Derived1, typename Derived2, int Version>
338
+ struct assign_impl<Derived1, Derived2, InnerVectorizedTraversal, CompleteUnrolling, Version>
339
+ {
340
+ static EIGEN_STRONG_INLINE void run(Derived1 &dst, const Derived2 &src)
341
+ {
342
+ assign_innervec_CompleteUnrolling<Derived1, Derived2, 0, Derived1::SizeAtCompileTime>
343
+ ::run(dst, src);
344
+ }
345
+ };
346
+
347
+ template<typename Derived1, typename Derived2, int Version>
348
+ struct assign_impl<Derived1, Derived2, InnerVectorizedTraversal, InnerUnrolling, Version>
349
+ {
350
+ typedef typename Derived1::Index Index;
351
+ static EIGEN_STRONG_INLINE void run(Derived1 &dst, const Derived2 &src)
352
+ {
353
+ const Index outerSize = dst.outerSize();
354
+ for(Index outer = 0; outer < outerSize; ++outer)
355
+ assign_innervec_InnerUnrolling<Derived1, Derived2, 0, Derived1::InnerSizeAtCompileTime>
356
+ ::run(dst, src, outer);
357
+ }
358
+ };
359
+
360
+ /***************************
361
+ *** Linear vectorization ***
362
+ ***************************/
363
+
364
+ template <bool IsAligned = false>
365
+ struct unaligned_assign_impl
366
+ {
367
+ template <typename Derived, typename OtherDerived>
368
+ static EIGEN_STRONG_INLINE void run(const Derived&, OtherDerived&, typename Derived::Index, typename Derived::Index) {}
369
+ };
370
+
371
+ template <>
372
+ struct unaligned_assign_impl<false>
373
+ {
374
+ // MSVC must not inline this functions. If it does, it fails to optimize the
375
+ // packet access path.
376
+ #ifdef _MSC_VER
377
+ template <typename Derived, typename OtherDerived>
378
+ static EIGEN_DONT_INLINE void run(const Derived& src, OtherDerived& dst, typename Derived::Index start, typename Derived::Index end)
379
+ #else
380
+ template <typename Derived, typename OtherDerived>
381
+ static EIGEN_STRONG_INLINE void run(const Derived& src, OtherDerived& dst, typename Derived::Index start, typename Derived::Index end)
382
+ #endif
383
+ {
384
+ for (typename Derived::Index index = start; index < end; ++index)
385
+ dst.copyCoeff(index, src);
386
+ }
387
+ };
388
+
389
+ template<typename Derived1, typename Derived2, int Version>
390
+ struct assign_impl<Derived1, Derived2, LinearVectorizedTraversal, NoUnrolling, Version>
391
+ {
392
+ typedef typename Derived1::Index Index;
393
+ static EIGEN_STRONG_INLINE void run(Derived1 &dst, const Derived2 &src)
394
+ {
395
+ const Index size = dst.size();
396
+ typedef packet_traits<typename Derived1::Scalar> PacketTraits;
397
+ enum {
398
+ packetSize = PacketTraits::size,
399
+ dstAlignment = PacketTraits::AlignedOnScalar ? Aligned : int(assign_traits<Derived1,Derived2>::DstIsAligned) ,
400
+ srcAlignment = assign_traits<Derived1,Derived2>::JointAlignment
401
+ };
402
+ const Index alignedStart = assign_traits<Derived1,Derived2>::DstIsAligned ? 0
403
+ : internal::first_aligned(&dst.coeffRef(0), size);
404
+ const Index alignedEnd = alignedStart + ((size-alignedStart)/packetSize)*packetSize;
405
+
406
+ unaligned_assign_impl<assign_traits<Derived1,Derived2>::DstIsAligned!=0>::run(src,dst,0,alignedStart);
407
+
408
+ for(Index index = alignedStart; index < alignedEnd; index += packetSize)
409
+ {
410
+ dst.template copyPacket<Derived2, dstAlignment, srcAlignment>(index, src);
411
+ }
412
+
413
+ unaligned_assign_impl<>::run(src,dst,alignedEnd,size);
414
+ }
415
+ };
416
+
417
+ template<typename Derived1, typename Derived2, int Version>
418
+ struct assign_impl<Derived1, Derived2, LinearVectorizedTraversal, CompleteUnrolling, Version>
419
+ {
420
+ typedef typename Derived1::Index Index;
421
+ static EIGEN_STRONG_INLINE void run(Derived1 &dst, const Derived2 &src)
422
+ {
423
+ enum { size = Derived1::SizeAtCompileTime,
424
+ packetSize = packet_traits<typename Derived1::Scalar>::size,
425
+ alignedSize = (size/packetSize)*packetSize };
426
+
427
+ assign_innervec_CompleteUnrolling<Derived1, Derived2, 0, alignedSize>::run(dst, src);
428
+ assign_DefaultTraversal_CompleteUnrolling<Derived1, Derived2, alignedSize, size>::run(dst, src);
429
+ }
430
+ };
431
+
432
+ /**************************
433
+ *** Slice vectorization ***
434
+ ***************************/
435
+
436
+ template<typename Derived1, typename Derived2, int Version>
437
+ struct assign_impl<Derived1, Derived2, SliceVectorizedTraversal, NoUnrolling, Version>
438
+ {
439
+ typedef typename Derived1::Index Index;
440
+ static inline void run(Derived1 &dst, const Derived2 &src)
441
+ {
442
+ typedef typename Derived1::Scalar Scalar;
443
+ typedef packet_traits<Scalar> PacketTraits;
444
+ enum {
445
+ packetSize = PacketTraits::size,
446
+ alignable = PacketTraits::AlignedOnScalar,
447
+ dstIsAligned = assign_traits<Derived1,Derived2>::DstIsAligned,
448
+ dstAlignment = alignable ? Aligned : int(dstIsAligned),
449
+ srcAlignment = assign_traits<Derived1,Derived2>::JointAlignment
450
+ };
451
+ const Scalar *dst_ptr = &dst.coeffRef(0,0);
452
+ if((!bool(dstIsAligned)) && (size_t(dst_ptr) % sizeof(Scalar))>0)
453
+ {
454
+ // the pointer is not aligend-on scalar, so alignment is not possible
455
+ return assign_impl<Derived1,Derived2,DefaultTraversal,NoUnrolling>::run(dst, src);
456
+ }
457
+ const Index packetAlignedMask = packetSize - 1;
458
+ const Index innerSize = dst.innerSize();
459
+ const Index outerSize = dst.outerSize();
460
+ const Index alignedStep = alignable ? (packetSize - dst.outerStride() % packetSize) & packetAlignedMask : 0;
461
+ Index alignedStart = ((!alignable) || bool(dstIsAligned)) ? 0 : internal::first_aligned(dst_ptr, innerSize);
462
+
463
+ for(Index outer = 0; outer < outerSize; ++outer)
464
+ {
465
+ const Index alignedEnd = alignedStart + ((innerSize-alignedStart) & ~packetAlignedMask);
466
+ // do the non-vectorizable part of the assignment
467
+ for(Index inner = 0; inner<alignedStart ; ++inner)
468
+ dst.copyCoeffByOuterInner(outer, inner, src);
469
+
470
+ // do the vectorizable part of the assignment
471
+ for(Index inner = alignedStart; inner<alignedEnd; inner+=packetSize)
472
+ dst.template copyPacketByOuterInner<Derived2, dstAlignment, Unaligned>(outer, inner, src);
473
+
474
+ // do the non-vectorizable part of the assignment
475
+ for(Index inner = alignedEnd; inner<innerSize ; ++inner)
476
+ dst.copyCoeffByOuterInner(outer, inner, src);
477
+
478
+ alignedStart = std::min<Index>((alignedStart+alignedStep)%packetSize, innerSize);
479
+ }
480
+ }
481
+ };
482
+
483
+ } // end namespace internal
484
+
485
+ /***************************************************************************
486
+ * Part 4 : implementation of DenseBase methods
487
+ ***************************************************************************/
488
+
489
+ template<typename Derived>
490
+ template<typename OtherDerived>
491
+ EIGEN_STRONG_INLINE Derived& DenseBase<Derived>
492
+ ::lazyAssign(const DenseBase<OtherDerived>& other)
493
+ {
494
+ enum{
495
+ SameType = internal::is_same<typename Derived::Scalar,typename OtherDerived::Scalar>::value
496
+ };
497
+
498
+ EIGEN_STATIC_ASSERT_LVALUE(Derived)
499
+ EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE(Derived,OtherDerived)
500
+ EIGEN_STATIC_ASSERT(SameType,YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY)
501
+
502
+ #ifdef EIGEN_DEBUG_ASSIGN
503
+ internal::assign_traits<Derived, OtherDerived>::debug();
504
+ #endif
505
+ eigen_assert(rows() == other.rows() && cols() == other.cols());
506
+ internal::assign_impl<Derived, OtherDerived, int(SameType) ? int(internal::assign_traits<Derived, OtherDerived>::Traversal)
507
+ : int(InvalidTraversal)>::run(derived(),other.derived());
508
+ #ifndef EIGEN_NO_DEBUG
509
+ checkTransposeAliasing(other.derived());
510
+ #endif
511
+ return derived();
512
+ }
513
+
514
+ namespace internal {
515
+
516
+ template<typename Derived, typename OtherDerived,
517
+ bool EvalBeforeAssigning = (int(internal::traits<OtherDerived>::Flags) & EvalBeforeAssigningBit) != 0,
518
+ bool NeedToTranspose = ((int(Derived::RowsAtCompileTime) == 1 && int(OtherDerived::ColsAtCompileTime) == 1)
519
+ | // FIXME | instead of || to please GCC 4.4.0 stupid warning "suggest parentheses around &&".
520
+ // revert to || as soon as not needed anymore.
521
+ (int(Derived::ColsAtCompileTime) == 1 && int(OtherDerived::RowsAtCompileTime) == 1))
522
+ && int(Derived::SizeAtCompileTime) != 1>
523
+ struct assign_selector;
524
+
525
+ template<typename Derived, typename OtherDerived>
526
+ struct assign_selector<Derived,OtherDerived,false,false> {
527
+ static EIGEN_STRONG_INLINE Derived& run(Derived& dst, const OtherDerived& other) { return dst.lazyAssign(other.derived()); }
528
+ template<typename ActualDerived, typename ActualOtherDerived>
529
+ static EIGEN_STRONG_INLINE Derived& evalTo(ActualDerived& dst, const ActualOtherDerived& other) { other.evalTo(dst); return dst; }
530
+ };
531
+ template<typename Derived, typename OtherDerived>
532
+ struct assign_selector<Derived,OtherDerived,true,false> {
533
+ static EIGEN_STRONG_INLINE Derived& run(Derived& dst, const OtherDerived& other) { return dst.lazyAssign(other.eval()); }
534
+ };
535
+ template<typename Derived, typename OtherDerived>
536
+ struct assign_selector<Derived,OtherDerived,false,true> {
537
+ static EIGEN_STRONG_INLINE Derived& run(Derived& dst, const OtherDerived& other) { return dst.lazyAssign(other.transpose()); }
538
+ template<typename ActualDerived, typename ActualOtherDerived>
539
+ static EIGEN_STRONG_INLINE Derived& evalTo(ActualDerived& dst, const ActualOtherDerived& other) { Transpose<ActualDerived> dstTrans(dst); other.evalTo(dstTrans); return dst; }
540
+ };
541
+ template<typename Derived, typename OtherDerived>
542
+ struct assign_selector<Derived,OtherDerived,true,true> {
543
+ static EIGEN_STRONG_INLINE Derived& run(Derived& dst, const OtherDerived& other) { return dst.lazyAssign(other.transpose().eval()); }
544
+ };
545
+
546
+ } // end namespace internal
547
+
548
+ template<typename Derived>
549
+ template<typename OtherDerived>
550
+ EIGEN_STRONG_INLINE Derived& DenseBase<Derived>::operator=(const DenseBase<OtherDerived>& other)
551
+ {
552
+ return internal::assign_selector<Derived,OtherDerived>::run(derived(), other.derived());
553
+ }
554
+
555
+ template<typename Derived>
556
+ EIGEN_STRONG_INLINE Derived& DenseBase<Derived>::operator=(const DenseBase& other)
557
+ {
558
+ return internal::assign_selector<Derived,Derived>::run(derived(), other.derived());
559
+ }
560
+
561
+ template<typename Derived>
562
+ EIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::operator=(const MatrixBase& other)
563
+ {
564
+ return internal::assign_selector<Derived,Derived>::run(derived(), other.derived());
565
+ }
566
+
567
+ template<typename Derived>
568
+ template <typename OtherDerived>
569
+ EIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::operator=(const DenseBase<OtherDerived>& other)
570
+ {
571
+ return internal::assign_selector<Derived,OtherDerived>::run(derived(), other.derived());
572
+ }
573
+
574
+ template<typename Derived>
575
+ template <typename OtherDerived>
576
+ EIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::operator=(const EigenBase<OtherDerived>& other)
577
+ {
578
+ return internal::assign_selector<Derived,OtherDerived,false>::evalTo(derived(), other.derived());
579
+ }
580
+
581
+ template<typename Derived>
582
+ template<typename OtherDerived>
583
+ EIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::operator=(const ReturnByValue<OtherDerived>& other)
584
+ {
585
+ return internal::assign_selector<Derived,OtherDerived,false>::evalTo(derived(), other.derived());
586
+ }
587
+
588
+ } // end namespace Eigen
589
+
590
+ #endif // EIGEN_ASSIGN_H