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,314 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // Copyright (C) 2009 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_SELFADJOINTMATRIX_H
11
+ #define EIGEN_SELFADJOINTMATRIX_H
12
+
13
+ namespace Eigen {
14
+
15
+ /** \class SelfAdjointView
16
+ * \ingroup Core_Module
17
+ *
18
+ *
19
+ * \brief Expression of a selfadjoint matrix from a triangular part of a dense matrix
20
+ *
21
+ * \param MatrixType the type of the dense matrix storing the coefficients
22
+ * \param TriangularPart can be either \c #Lower or \c #Upper
23
+ *
24
+ * This class is an expression of a sefladjoint matrix from a triangular part of a matrix
25
+ * with given dense storage of the coefficients. It is the return type of MatrixBase::selfadjointView()
26
+ * and most of the time this is the only way that it is used.
27
+ *
28
+ * \sa class TriangularBase, MatrixBase::selfadjointView()
29
+ */
30
+
31
+ namespace internal {
32
+ template<typename MatrixType, unsigned int UpLo>
33
+ struct traits<SelfAdjointView<MatrixType, UpLo> > : traits<MatrixType>
34
+ {
35
+ typedef typename nested<MatrixType>::type MatrixTypeNested;
36
+ typedef typename remove_all<MatrixTypeNested>::type MatrixTypeNestedCleaned;
37
+ typedef MatrixType ExpressionType;
38
+ typedef typename MatrixType::PlainObject DenseMatrixType;
39
+ enum {
40
+ Mode = UpLo | SelfAdjoint,
41
+ Flags = MatrixTypeNestedCleaned::Flags & (HereditaryBits)
42
+ & (~(PacketAccessBit | DirectAccessBit | LinearAccessBit)), // FIXME these flags should be preserved
43
+ CoeffReadCost = MatrixTypeNestedCleaned::CoeffReadCost
44
+ };
45
+ };
46
+ }
47
+
48
+ template <typename Lhs, int LhsMode, bool LhsIsVector,
49
+ typename Rhs, int RhsMode, bool RhsIsVector>
50
+ struct SelfadjointProductMatrix;
51
+
52
+ // FIXME could also be called SelfAdjointWrapper to be consistent with DiagonalWrapper ??
53
+ template<typename MatrixType, unsigned int UpLo> class SelfAdjointView
54
+ : public TriangularBase<SelfAdjointView<MatrixType, UpLo> >
55
+ {
56
+ public:
57
+
58
+ typedef TriangularBase<SelfAdjointView> Base;
59
+ typedef typename internal::traits<SelfAdjointView>::MatrixTypeNested MatrixTypeNested;
60
+ typedef typename internal::traits<SelfAdjointView>::MatrixTypeNestedCleaned MatrixTypeNestedCleaned;
61
+
62
+ /** \brief The type of coefficients in this matrix */
63
+ typedef typename internal::traits<SelfAdjointView>::Scalar Scalar;
64
+
65
+ typedef typename MatrixType::Index Index;
66
+
67
+ enum {
68
+ Mode = internal::traits<SelfAdjointView>::Mode
69
+ };
70
+ typedef typename MatrixType::PlainObject PlainObject;
71
+
72
+ inline SelfAdjointView(MatrixType& matrix) : m_matrix(matrix)
73
+ {}
74
+
75
+ inline Index rows() const { return m_matrix.rows(); }
76
+ inline Index cols() const { return m_matrix.cols(); }
77
+ inline Index outerStride() const { return m_matrix.outerStride(); }
78
+ inline Index innerStride() const { return m_matrix.innerStride(); }
79
+
80
+ /** \sa MatrixBase::coeff()
81
+ * \warning the coordinates must fit into the referenced triangular part
82
+ */
83
+ inline Scalar coeff(Index row, Index col) const
84
+ {
85
+ Base::check_coordinates_internal(row, col);
86
+ return m_matrix.coeff(row, col);
87
+ }
88
+
89
+ /** \sa MatrixBase::coeffRef()
90
+ * \warning the coordinates must fit into the referenced triangular part
91
+ */
92
+ inline Scalar& coeffRef(Index row, Index col)
93
+ {
94
+ Base::check_coordinates_internal(row, col);
95
+ return m_matrix.const_cast_derived().coeffRef(row, col);
96
+ }
97
+
98
+ /** \internal */
99
+ const MatrixTypeNestedCleaned& _expression() const { return m_matrix; }
100
+
101
+ const MatrixTypeNestedCleaned& nestedExpression() const { return m_matrix; }
102
+ MatrixTypeNestedCleaned& nestedExpression() { return *const_cast<MatrixTypeNestedCleaned*>(&m_matrix); }
103
+
104
+ /** Efficient self-adjoint matrix times vector/matrix product */
105
+ template<typename OtherDerived>
106
+ SelfadjointProductMatrix<MatrixType,Mode,false,OtherDerived,0,OtherDerived::IsVectorAtCompileTime>
107
+ operator*(const MatrixBase<OtherDerived>& rhs) const
108
+ {
109
+ return SelfadjointProductMatrix
110
+ <MatrixType,Mode,false,OtherDerived,0,OtherDerived::IsVectorAtCompileTime>
111
+ (m_matrix, rhs.derived());
112
+ }
113
+
114
+ /** Efficient vector/matrix times self-adjoint matrix product */
115
+ template<typename OtherDerived> friend
116
+ SelfadjointProductMatrix<OtherDerived,0,OtherDerived::IsVectorAtCompileTime,MatrixType,Mode,false>
117
+ operator*(const MatrixBase<OtherDerived>& lhs, const SelfAdjointView& rhs)
118
+ {
119
+ return SelfadjointProductMatrix
120
+ <OtherDerived,0,OtherDerived::IsVectorAtCompileTime,MatrixType,Mode,false>
121
+ (lhs.derived(),rhs.m_matrix);
122
+ }
123
+
124
+ /** Perform a symmetric rank 2 update of the selfadjoint matrix \c *this:
125
+ * \f$ this = this + \alpha u v^* + conj(\alpha) v u^* \f$
126
+ * \returns a reference to \c *this
127
+ *
128
+ * The vectors \a u and \c v \b must be column vectors, however they can be
129
+ * a adjoint expression without any overhead. Only the meaningful triangular
130
+ * part of the matrix is updated, the rest is left unchanged.
131
+ *
132
+ * \sa rankUpdate(const MatrixBase<DerivedU>&, Scalar)
133
+ */
134
+ template<typename DerivedU, typename DerivedV>
135
+ SelfAdjointView& rankUpdate(const MatrixBase<DerivedU>& u, const MatrixBase<DerivedV>& v, const Scalar& alpha = Scalar(1));
136
+
137
+ /** Perform a symmetric rank K update of the selfadjoint matrix \c *this:
138
+ * \f$ this = this + \alpha ( u u^* ) \f$ where \a u is a vector or matrix.
139
+ *
140
+ * \returns a reference to \c *this
141
+ *
142
+ * Note that to perform \f$ this = this + \alpha ( u^* u ) \f$ you can simply
143
+ * call this function with u.adjoint().
144
+ *
145
+ * \sa rankUpdate(const MatrixBase<DerivedU>&, const MatrixBase<DerivedV>&, Scalar)
146
+ */
147
+ template<typename DerivedU>
148
+ SelfAdjointView& rankUpdate(const MatrixBase<DerivedU>& u, const Scalar& alpha = Scalar(1));
149
+
150
+ /////////// Cholesky module ///////////
151
+
152
+ const LLT<PlainObject, UpLo> llt() const;
153
+ const LDLT<PlainObject, UpLo> ldlt() const;
154
+
155
+ /////////// Eigenvalue module ///////////
156
+
157
+ /** Real part of #Scalar */
158
+ typedef typename NumTraits<Scalar>::Real RealScalar;
159
+ /** Return type of eigenvalues() */
160
+ typedef Matrix<RealScalar, internal::traits<MatrixType>::ColsAtCompileTime, 1> EigenvaluesReturnType;
161
+
162
+ EigenvaluesReturnType eigenvalues() const;
163
+ RealScalar operatorNorm() const;
164
+
165
+ #ifdef EIGEN2_SUPPORT
166
+ template<typename OtherDerived>
167
+ SelfAdjointView& operator=(const MatrixBase<OtherDerived>& other)
168
+ {
169
+ enum {
170
+ OtherPart = UpLo == Upper ? StrictlyLower : StrictlyUpper
171
+ };
172
+ m_matrix.const_cast_derived().template triangularView<UpLo>() = other;
173
+ m_matrix.const_cast_derived().template triangularView<OtherPart>() = other.adjoint();
174
+ return *this;
175
+ }
176
+ template<typename OtherMatrixType, unsigned int OtherMode>
177
+ SelfAdjointView& operator=(const TriangularView<OtherMatrixType, OtherMode>& other)
178
+ {
179
+ enum {
180
+ OtherPart = UpLo == Upper ? StrictlyLower : StrictlyUpper
181
+ };
182
+ m_matrix.const_cast_derived().template triangularView<UpLo>() = other.toDenseMatrix();
183
+ m_matrix.const_cast_derived().template triangularView<OtherPart>() = other.toDenseMatrix().adjoint();
184
+ return *this;
185
+ }
186
+ #endif
187
+
188
+ protected:
189
+ MatrixTypeNested m_matrix;
190
+ };
191
+
192
+
193
+ // template<typename OtherDerived, typename MatrixType, unsigned int UpLo>
194
+ // internal::selfadjoint_matrix_product_returntype<OtherDerived,SelfAdjointView<MatrixType,UpLo> >
195
+ // operator*(const MatrixBase<OtherDerived>& lhs, const SelfAdjointView<MatrixType,UpLo>& rhs)
196
+ // {
197
+ // return internal::matrix_selfadjoint_product_returntype<OtherDerived,SelfAdjointView<MatrixType,UpLo> >(lhs.derived(),rhs);
198
+ // }
199
+
200
+ // selfadjoint to dense matrix
201
+
202
+ namespace internal {
203
+
204
+ template<typename Derived1, typename Derived2, int UnrollCount, bool ClearOpposite>
205
+ struct triangular_assignment_selector<Derived1, Derived2, (SelfAdjoint|Upper), UnrollCount, ClearOpposite>
206
+ {
207
+ enum {
208
+ col = (UnrollCount-1) / Derived1::RowsAtCompileTime,
209
+ row = (UnrollCount-1) % Derived1::RowsAtCompileTime
210
+ };
211
+
212
+ static inline void run(Derived1 &dst, const Derived2 &src)
213
+ {
214
+ triangular_assignment_selector<Derived1, Derived2, (SelfAdjoint|Upper), UnrollCount-1, ClearOpposite>::run(dst, src);
215
+
216
+ if(row == col)
217
+ dst.coeffRef(row, col) = numext::real(src.coeff(row, col));
218
+ else if(row < col)
219
+ dst.coeffRef(col, row) = numext::conj(dst.coeffRef(row, col) = src.coeff(row, col));
220
+ }
221
+ };
222
+
223
+ template<typename Derived1, typename Derived2, bool ClearOpposite>
224
+ struct triangular_assignment_selector<Derived1, Derived2, SelfAdjoint|Upper, 0, ClearOpposite>
225
+ {
226
+ static inline void run(Derived1 &, const Derived2 &) {}
227
+ };
228
+
229
+ template<typename Derived1, typename Derived2, int UnrollCount, bool ClearOpposite>
230
+ struct triangular_assignment_selector<Derived1, Derived2, (SelfAdjoint|Lower), UnrollCount, ClearOpposite>
231
+ {
232
+ enum {
233
+ col = (UnrollCount-1) / Derived1::RowsAtCompileTime,
234
+ row = (UnrollCount-1) % Derived1::RowsAtCompileTime
235
+ };
236
+
237
+ static inline void run(Derived1 &dst, const Derived2 &src)
238
+ {
239
+ triangular_assignment_selector<Derived1, Derived2, (SelfAdjoint|Lower), UnrollCount-1, ClearOpposite>::run(dst, src);
240
+
241
+ if(row == col)
242
+ dst.coeffRef(row, col) = numext::real(src.coeff(row, col));
243
+ else if(row > col)
244
+ dst.coeffRef(col, row) = numext::conj(dst.coeffRef(row, col) = src.coeff(row, col));
245
+ }
246
+ };
247
+
248
+ template<typename Derived1, typename Derived2, bool ClearOpposite>
249
+ struct triangular_assignment_selector<Derived1, Derived2, SelfAdjoint|Lower, 0, ClearOpposite>
250
+ {
251
+ static inline void run(Derived1 &, const Derived2 &) {}
252
+ };
253
+
254
+ template<typename Derived1, typename Derived2, bool ClearOpposite>
255
+ struct triangular_assignment_selector<Derived1, Derived2, SelfAdjoint|Upper, Dynamic, ClearOpposite>
256
+ {
257
+ typedef typename Derived1::Index Index;
258
+ static inline void run(Derived1 &dst, const Derived2 &src)
259
+ {
260
+ for(Index j = 0; j < dst.cols(); ++j)
261
+ {
262
+ for(Index i = 0; i < j; ++i)
263
+ {
264
+ dst.copyCoeff(i, j, src);
265
+ dst.coeffRef(j,i) = numext::conj(dst.coeff(i,j));
266
+ }
267
+ dst.copyCoeff(j, j, src);
268
+ }
269
+ }
270
+ };
271
+
272
+ template<typename Derived1, typename Derived2, bool ClearOpposite>
273
+ struct triangular_assignment_selector<Derived1, Derived2, SelfAdjoint|Lower, Dynamic, ClearOpposite>
274
+ {
275
+ static inline void run(Derived1 &dst, const Derived2 &src)
276
+ {
277
+ typedef typename Derived1::Index Index;
278
+ for(Index i = 0; i < dst.rows(); ++i)
279
+ {
280
+ for(Index j = 0; j < i; ++j)
281
+ {
282
+ dst.copyCoeff(i, j, src);
283
+ dst.coeffRef(j,i) = numext::conj(dst.coeff(i,j));
284
+ }
285
+ dst.copyCoeff(i, i, src);
286
+ }
287
+ }
288
+ };
289
+
290
+ } // end namespace internal
291
+
292
+ /***************************************************************************
293
+ * Implementation of MatrixBase methods
294
+ ***************************************************************************/
295
+
296
+ template<typename Derived>
297
+ template<unsigned int UpLo>
298
+ typename MatrixBase<Derived>::template ConstSelfAdjointViewReturnType<UpLo>::Type
299
+ MatrixBase<Derived>::selfadjointView() const
300
+ {
301
+ return derived();
302
+ }
303
+
304
+ template<typename Derived>
305
+ template<unsigned int UpLo>
306
+ typename MatrixBase<Derived>::template SelfAdjointViewReturnType<UpLo>::Type
307
+ MatrixBase<Derived>::selfadjointView()
308
+ {
309
+ return derived();
310
+ }
311
+
312
+ } // end namespace Eigen
313
+
314
+ #endif // EIGEN_SELFADJOINTMATRIX_H
@@ -0,0 +1,191 @@
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_SELFCWISEBINARYOP_H
11
+ #define EIGEN_SELFCWISEBINARYOP_H
12
+
13
+ namespace Eigen {
14
+
15
+ /** \class SelfCwiseBinaryOp
16
+ * \ingroup Core_Module
17
+ *
18
+ * \internal
19
+ *
20
+ * \brief Internal helper class for optimizing operators like +=, -=
21
+ *
22
+ * This is a pseudo expression class re-implementing the copyCoeff/copyPacket
23
+ * method to directly performs a +=/-= operations in an optimal way. In particular,
24
+ * this allows to make sure that the input/output data are loaded only once using
25
+ * aligned packet loads.
26
+ *
27
+ * \sa class SwapWrapper for a similar trick.
28
+ */
29
+
30
+ namespace internal {
31
+ template<typename BinaryOp, typename Lhs, typename Rhs>
32
+ struct traits<SelfCwiseBinaryOp<BinaryOp,Lhs,Rhs> >
33
+ : traits<CwiseBinaryOp<BinaryOp,Lhs,Rhs> >
34
+ {
35
+ enum {
36
+ // Note that it is still a good idea to preserve the DirectAccessBit
37
+ // so that assign can correctly align the data.
38
+ Flags = traits<CwiseBinaryOp<BinaryOp,Lhs,Rhs> >::Flags | (Lhs::Flags&DirectAccessBit) | (Lhs::Flags&LvalueBit),
39
+ OuterStrideAtCompileTime = Lhs::OuterStrideAtCompileTime,
40
+ InnerStrideAtCompileTime = Lhs::InnerStrideAtCompileTime
41
+ };
42
+ };
43
+ }
44
+
45
+ template<typename BinaryOp, typename Lhs, typename Rhs> class SelfCwiseBinaryOp
46
+ : public internal::dense_xpr_base< SelfCwiseBinaryOp<BinaryOp, Lhs, Rhs> >::type
47
+ {
48
+ public:
49
+
50
+ typedef typename internal::dense_xpr_base<SelfCwiseBinaryOp>::type Base;
51
+ EIGEN_DENSE_PUBLIC_INTERFACE(SelfCwiseBinaryOp)
52
+
53
+ typedef typename internal::packet_traits<Scalar>::type Packet;
54
+
55
+ inline SelfCwiseBinaryOp(Lhs& xpr, const BinaryOp& func = BinaryOp()) : m_matrix(xpr), m_functor(func) {}
56
+
57
+ inline Index rows() const { return m_matrix.rows(); }
58
+ inline Index cols() const { return m_matrix.cols(); }
59
+ inline Index outerStride() const { return m_matrix.outerStride(); }
60
+ inline Index innerStride() const { return m_matrix.innerStride(); }
61
+ inline const Scalar* data() const { return m_matrix.data(); }
62
+
63
+ // note that this function is needed by assign to correctly align loads/stores
64
+ // TODO make Assign use .data()
65
+ inline Scalar& coeffRef(Index row, Index col)
66
+ {
67
+ EIGEN_STATIC_ASSERT_LVALUE(Lhs)
68
+ return m_matrix.const_cast_derived().coeffRef(row, col);
69
+ }
70
+ inline const Scalar& coeffRef(Index row, Index col) const
71
+ {
72
+ return m_matrix.coeffRef(row, col);
73
+ }
74
+
75
+ // note that this function is needed by assign to correctly align loads/stores
76
+ // TODO make Assign use .data()
77
+ inline Scalar& coeffRef(Index index)
78
+ {
79
+ EIGEN_STATIC_ASSERT_LVALUE(Lhs)
80
+ return m_matrix.const_cast_derived().coeffRef(index);
81
+ }
82
+ inline const Scalar& coeffRef(Index index) const
83
+ {
84
+ return m_matrix.const_cast_derived().coeffRef(index);
85
+ }
86
+
87
+ template<typename OtherDerived>
88
+ void copyCoeff(Index row, Index col, const DenseBase<OtherDerived>& other)
89
+ {
90
+ OtherDerived& _other = other.const_cast_derived();
91
+ eigen_internal_assert(row >= 0 && row < rows()
92
+ && col >= 0 && col < cols());
93
+ Scalar& tmp = m_matrix.coeffRef(row,col);
94
+ tmp = m_functor(tmp, _other.coeff(row,col));
95
+ }
96
+
97
+ template<typename OtherDerived>
98
+ void copyCoeff(Index index, const DenseBase<OtherDerived>& other)
99
+ {
100
+ OtherDerived& _other = other.const_cast_derived();
101
+ eigen_internal_assert(index >= 0 && index < m_matrix.size());
102
+ Scalar& tmp = m_matrix.coeffRef(index);
103
+ tmp = m_functor(tmp, _other.coeff(index));
104
+ }
105
+
106
+ template<typename OtherDerived, int StoreMode, int LoadMode>
107
+ void copyPacket(Index row, Index col, const DenseBase<OtherDerived>& other)
108
+ {
109
+ OtherDerived& _other = other.const_cast_derived();
110
+ eigen_internal_assert(row >= 0 && row < rows()
111
+ && col >= 0 && col < cols());
112
+ m_matrix.template writePacket<StoreMode>(row, col,
113
+ m_functor.packetOp(m_matrix.template packet<StoreMode>(row, col),_other.template packet<LoadMode>(row, col)) );
114
+ }
115
+
116
+ template<typename OtherDerived, int StoreMode, int LoadMode>
117
+ void copyPacket(Index index, const DenseBase<OtherDerived>& other)
118
+ {
119
+ OtherDerived& _other = other.const_cast_derived();
120
+ eigen_internal_assert(index >= 0 && index < m_matrix.size());
121
+ m_matrix.template writePacket<StoreMode>(index,
122
+ m_functor.packetOp(m_matrix.template packet<StoreMode>(index),_other.template packet<LoadMode>(index)) );
123
+ }
124
+
125
+ // reimplement lazyAssign to handle complex *= real
126
+ // see CwiseBinaryOp ctor for details
127
+ template<typename RhsDerived>
128
+ EIGEN_STRONG_INLINE SelfCwiseBinaryOp& lazyAssign(const DenseBase<RhsDerived>& rhs)
129
+ {
130
+ EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE(Lhs,RhsDerived)
131
+ EIGEN_CHECK_BINARY_COMPATIBILIY(BinaryOp,typename Lhs::Scalar,typename RhsDerived::Scalar);
132
+
133
+ #ifdef EIGEN_DEBUG_ASSIGN
134
+ internal::assign_traits<SelfCwiseBinaryOp, RhsDerived>::debug();
135
+ #endif
136
+ eigen_assert(rows() == rhs.rows() && cols() == rhs.cols());
137
+ internal::assign_impl<SelfCwiseBinaryOp, RhsDerived>::run(*this,rhs.derived());
138
+ #ifndef EIGEN_NO_DEBUG
139
+ this->checkTransposeAliasing(rhs.derived());
140
+ #endif
141
+ return *this;
142
+ }
143
+
144
+ // overloaded to honor evaluation of special matrices
145
+ // maybe another solution would be to not use SelfCwiseBinaryOp
146
+ // at first...
147
+ SelfCwiseBinaryOp& operator=(const Rhs& _rhs)
148
+ {
149
+ typename internal::nested<Rhs>::type rhs(_rhs);
150
+ return Base::operator=(rhs);
151
+ }
152
+
153
+ Lhs& expression() const
154
+ {
155
+ return m_matrix;
156
+ }
157
+
158
+ const BinaryOp& functor() const
159
+ {
160
+ return m_functor;
161
+ }
162
+
163
+ protected:
164
+ Lhs& m_matrix;
165
+ const BinaryOp& m_functor;
166
+
167
+ private:
168
+ SelfCwiseBinaryOp& operator=(const SelfCwiseBinaryOp&);
169
+ };
170
+
171
+ template<typename Derived>
172
+ inline Derived& DenseBase<Derived>::operator*=(const Scalar& other)
173
+ {
174
+ typedef typename Derived::PlainObject PlainObject;
175
+ SelfCwiseBinaryOp<internal::scalar_product_op<Scalar>, Derived, typename PlainObject::ConstantReturnType> tmp(derived());
176
+ tmp = PlainObject::Constant(rows(),cols(),other);
177
+ return derived();
178
+ }
179
+
180
+ template<typename Derived>
181
+ inline Derived& DenseBase<Derived>::operator/=(const Scalar& other)
182
+ {
183
+ typedef typename Derived::PlainObject PlainObject;
184
+ SelfCwiseBinaryOp<internal::scalar_quotient_op<Scalar>, Derived, typename PlainObject::ConstantReturnType> tmp(derived());
185
+ tmp = PlainObject::Constant(rows(),cols(), other);
186
+ return derived();
187
+ }
188
+
189
+ } // end namespace Eigen
190
+
191
+ #endif // EIGEN_SELFCWISEBINARYOP_H