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,448 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // Copyright (C) 2008-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_SPARSEVECTOR_H
11
+ #define EIGEN_SPARSEVECTOR_H
12
+
13
+ namespace Eigen {
14
+
15
+ /** \ingroup SparseCore_Module
16
+ * \class SparseVector
17
+ *
18
+ * \brief a sparse vector class
19
+ *
20
+ * \tparam _Scalar the scalar type, i.e. the type of the coefficients
21
+ *
22
+ * See http://www.netlib.org/linalg/html_templates/node91.html for details on the storage scheme.
23
+ *
24
+ * This class can be extended with the help of the plugin mechanism described on the page
25
+ * \ref TopicCustomizingEigen by defining the preprocessor symbol \c EIGEN_SPARSEVECTOR_PLUGIN.
26
+ */
27
+
28
+ namespace internal {
29
+ template<typename _Scalar, int _Options, typename _Index>
30
+ struct traits<SparseVector<_Scalar, _Options, _Index> >
31
+ {
32
+ typedef _Scalar Scalar;
33
+ typedef _Index Index;
34
+ typedef Sparse StorageKind;
35
+ typedef MatrixXpr XprKind;
36
+ enum {
37
+ IsColVector = (_Options & RowMajorBit) ? 0 : 1,
38
+
39
+ RowsAtCompileTime = IsColVector ? Dynamic : 1,
40
+ ColsAtCompileTime = IsColVector ? 1 : Dynamic,
41
+ MaxRowsAtCompileTime = RowsAtCompileTime,
42
+ MaxColsAtCompileTime = ColsAtCompileTime,
43
+ Flags = _Options | NestByRefBit | LvalueBit | (IsColVector ? 0 : RowMajorBit),
44
+ CoeffReadCost = NumTraits<Scalar>::ReadCost,
45
+ SupportedAccessPatterns = InnerRandomAccessPattern
46
+ };
47
+ };
48
+
49
+ // Sparse-Vector-Assignment kinds:
50
+ enum {
51
+ SVA_RuntimeSwitch,
52
+ SVA_Inner,
53
+ SVA_Outer
54
+ };
55
+
56
+ template< typename Dest, typename Src,
57
+ int AssignmentKind = !bool(Src::IsVectorAtCompileTime) ? SVA_RuntimeSwitch
58
+ : Src::InnerSizeAtCompileTime==1 ? SVA_Outer
59
+ : SVA_Inner>
60
+ struct sparse_vector_assign_selector;
61
+
62
+ }
63
+
64
+ template<typename _Scalar, int _Options, typename _Index>
65
+ class SparseVector
66
+ : public SparseMatrixBase<SparseVector<_Scalar, _Options, _Index> >
67
+ {
68
+ typedef SparseMatrixBase<SparseVector> SparseBase;
69
+
70
+ public:
71
+ EIGEN_SPARSE_PUBLIC_INTERFACE(SparseVector)
72
+ EIGEN_SPARSE_INHERIT_ASSIGNMENT_OPERATOR(SparseVector, +=)
73
+ EIGEN_SPARSE_INHERIT_ASSIGNMENT_OPERATOR(SparseVector, -=)
74
+
75
+ typedef internal::CompressedStorage<Scalar,Index> Storage;
76
+ enum { IsColVector = internal::traits<SparseVector>::IsColVector };
77
+
78
+ enum {
79
+ Options = _Options
80
+ };
81
+
82
+ EIGEN_STRONG_INLINE Index rows() const { return IsColVector ? m_size : 1; }
83
+ EIGEN_STRONG_INLINE Index cols() const { return IsColVector ? 1 : m_size; }
84
+ EIGEN_STRONG_INLINE Index innerSize() const { return m_size; }
85
+ EIGEN_STRONG_INLINE Index outerSize() const { return 1; }
86
+
87
+ EIGEN_STRONG_INLINE const Scalar* valuePtr() const { return &m_data.value(0); }
88
+ EIGEN_STRONG_INLINE Scalar* valuePtr() { return &m_data.value(0); }
89
+
90
+ EIGEN_STRONG_INLINE const Index* innerIndexPtr() const { return &m_data.index(0); }
91
+ EIGEN_STRONG_INLINE Index* innerIndexPtr() { return &m_data.index(0); }
92
+
93
+ /** \internal */
94
+ inline Storage& data() { return m_data; }
95
+ /** \internal */
96
+ inline const Storage& data() const { return m_data; }
97
+
98
+ inline Scalar coeff(Index row, Index col) const
99
+ {
100
+ eigen_assert(IsColVector ? (col==0 && row>=0 && row<m_size) : (row==0 && col>=0 && col<m_size));
101
+ return coeff(IsColVector ? row : col);
102
+ }
103
+ inline Scalar coeff(Index i) const
104
+ {
105
+ eigen_assert(i>=0 && i<m_size);
106
+ return m_data.at(i);
107
+ }
108
+
109
+ inline Scalar& coeffRef(Index row, Index col)
110
+ {
111
+ eigen_assert(IsColVector ? (col==0 && row>=0 && row<m_size) : (row==0 && col>=0 && col<m_size));
112
+ return coeff(IsColVector ? row : col);
113
+ }
114
+
115
+ /** \returns a reference to the coefficient value at given index \a i
116
+ * This operation involes a log(rho*size) binary search. If the coefficient does not
117
+ * exist yet, then a sorted insertion into a sequential buffer is performed.
118
+ *
119
+ * This insertion might be very costly if the number of nonzeros above \a i is large.
120
+ */
121
+ inline Scalar& coeffRef(Index i)
122
+ {
123
+ eigen_assert(i>=0 && i<m_size);
124
+ return m_data.atWithInsertion(i);
125
+ }
126
+
127
+ public:
128
+
129
+ class InnerIterator;
130
+ class ReverseInnerIterator;
131
+
132
+ inline void setZero() { m_data.clear(); }
133
+
134
+ /** \returns the number of non zero coefficients */
135
+ inline Index nonZeros() const { return static_cast<Index>(m_data.size()); }
136
+
137
+ inline void startVec(Index outer)
138
+ {
139
+ EIGEN_UNUSED_VARIABLE(outer);
140
+ eigen_assert(outer==0);
141
+ }
142
+
143
+ inline Scalar& insertBackByOuterInner(Index outer, Index inner)
144
+ {
145
+ EIGEN_UNUSED_VARIABLE(outer);
146
+ eigen_assert(outer==0);
147
+ return insertBack(inner);
148
+ }
149
+ inline Scalar& insertBack(Index i)
150
+ {
151
+ m_data.append(0, i);
152
+ return m_data.value(m_data.size()-1);
153
+ }
154
+
155
+ inline Scalar& insert(Index row, Index col)
156
+ {
157
+ eigen_assert(IsColVector ? (col==0 && row>=0 && row<m_size) : (row==0 && col>=0 && col<m_size));
158
+
159
+ Index inner = IsColVector ? row : col;
160
+ Index outer = IsColVector ? col : row;
161
+ EIGEN_ONLY_USED_FOR_DEBUG(outer);
162
+ eigen_assert(outer==0);
163
+ return insert(inner);
164
+ }
165
+ Scalar& insert(Index i)
166
+ {
167
+ eigen_assert(i>=0 && i<m_size);
168
+
169
+ Index startId = 0;
170
+ Index p = Index(m_data.size()) - 1;
171
+ // TODO smart realloc
172
+ m_data.resize(p+2,1);
173
+
174
+ while ( (p >= startId) && (m_data.index(p) > i) )
175
+ {
176
+ m_data.index(p+1) = m_data.index(p);
177
+ m_data.value(p+1) = m_data.value(p);
178
+ --p;
179
+ }
180
+ m_data.index(p+1) = i;
181
+ m_data.value(p+1) = 0;
182
+ return m_data.value(p+1);
183
+ }
184
+
185
+ /**
186
+ */
187
+ inline void reserve(Index reserveSize) { m_data.reserve(reserveSize); }
188
+
189
+
190
+ inline void finalize() {}
191
+
192
+ void prune(const Scalar& reference, const RealScalar& epsilon = NumTraits<RealScalar>::dummy_precision())
193
+ {
194
+ m_data.prune(reference,epsilon);
195
+ }
196
+
197
+ void resize(Index rows, Index cols)
198
+ {
199
+ eigen_assert(rows==1 || cols==1);
200
+ resize(IsColVector ? rows : cols);
201
+ }
202
+
203
+ void resize(Index newSize)
204
+ {
205
+ m_size = newSize;
206
+ m_data.clear();
207
+ }
208
+
209
+ void resizeNonZeros(Index size) { m_data.resize(size); }
210
+
211
+ inline SparseVector() : m_size(0) { check_template_parameters(); resize(0); }
212
+
213
+ inline SparseVector(Index size) : m_size(0) { check_template_parameters(); resize(size); }
214
+
215
+ inline SparseVector(Index rows, Index cols) : m_size(0) { check_template_parameters(); resize(rows,cols); }
216
+
217
+ template<typename OtherDerived>
218
+ inline SparseVector(const SparseMatrixBase<OtherDerived>& other)
219
+ : m_size(0)
220
+ {
221
+ check_template_parameters();
222
+ *this = other.derived();
223
+ }
224
+
225
+ inline SparseVector(const SparseVector& other)
226
+ : SparseBase(other), m_size(0)
227
+ {
228
+ check_template_parameters();
229
+ *this = other.derived();
230
+ }
231
+
232
+ /** Swaps the values of \c *this and \a other.
233
+ * Overloaded for performance: this version performs a \em shallow swap by swaping pointers and attributes only.
234
+ * \sa SparseMatrixBase::swap()
235
+ */
236
+ inline void swap(SparseVector& other)
237
+ {
238
+ std::swap(m_size, other.m_size);
239
+ m_data.swap(other.m_data);
240
+ }
241
+
242
+ inline SparseVector& operator=(const SparseVector& other)
243
+ {
244
+ if (other.isRValue())
245
+ {
246
+ swap(other.const_cast_derived());
247
+ }
248
+ else
249
+ {
250
+ resize(other.size());
251
+ m_data = other.m_data;
252
+ }
253
+ return *this;
254
+ }
255
+
256
+ template<typename OtherDerived>
257
+ inline SparseVector& operator=(const SparseMatrixBase<OtherDerived>& other)
258
+ {
259
+ SparseVector tmp(other.size());
260
+ internal::sparse_vector_assign_selector<SparseVector,OtherDerived>::run(tmp,other.derived());
261
+ this->swap(tmp);
262
+ return *this;
263
+ }
264
+
265
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
266
+ template<typename Lhs, typename Rhs>
267
+ inline SparseVector& operator=(const SparseSparseProduct<Lhs,Rhs>& product)
268
+ {
269
+ return Base::operator=(product);
270
+ }
271
+ #endif
272
+
273
+ friend std::ostream & operator << (std::ostream & s, const SparseVector& m)
274
+ {
275
+ for (Index i=0; i<m.nonZeros(); ++i)
276
+ s << "(" << m.m_data.value(i) << "," << m.m_data.index(i) << ") ";
277
+ s << std::endl;
278
+ return s;
279
+ }
280
+
281
+ /** Destructor */
282
+ inline ~SparseVector() {}
283
+
284
+ /** Overloaded for performance */
285
+ Scalar sum() const;
286
+
287
+ public:
288
+
289
+ /** \internal \deprecated use setZero() and reserve() */
290
+ EIGEN_DEPRECATED void startFill(Index reserve)
291
+ {
292
+ setZero();
293
+ m_data.reserve(reserve);
294
+ }
295
+
296
+ /** \internal \deprecated use insertBack(Index,Index) */
297
+ EIGEN_DEPRECATED Scalar& fill(Index r, Index c)
298
+ {
299
+ eigen_assert(r==0 || c==0);
300
+ return fill(IsColVector ? r : c);
301
+ }
302
+
303
+ /** \internal \deprecated use insertBack(Index) */
304
+ EIGEN_DEPRECATED Scalar& fill(Index i)
305
+ {
306
+ m_data.append(0, i);
307
+ return m_data.value(m_data.size()-1);
308
+ }
309
+
310
+ /** \internal \deprecated use insert(Index,Index) */
311
+ EIGEN_DEPRECATED Scalar& fillrand(Index r, Index c)
312
+ {
313
+ eigen_assert(r==0 || c==0);
314
+ return fillrand(IsColVector ? r : c);
315
+ }
316
+
317
+ /** \internal \deprecated use insert(Index) */
318
+ EIGEN_DEPRECATED Scalar& fillrand(Index i)
319
+ {
320
+ return insert(i);
321
+ }
322
+
323
+ /** \internal \deprecated use finalize() */
324
+ EIGEN_DEPRECATED void endFill() {}
325
+
326
+ // These two functions were here in the 3.1 release, so let's keep them in case some code rely on them.
327
+ /** \internal \deprecated use data() */
328
+ EIGEN_DEPRECATED Storage& _data() { return m_data; }
329
+ /** \internal \deprecated use data() */
330
+ EIGEN_DEPRECATED const Storage& _data() const { return m_data; }
331
+
332
+ # ifdef EIGEN_SPARSEVECTOR_PLUGIN
333
+ # include EIGEN_SPARSEVECTOR_PLUGIN
334
+ # endif
335
+
336
+ protected:
337
+
338
+ static void check_template_parameters()
339
+ {
340
+ EIGEN_STATIC_ASSERT(NumTraits<Index>::IsSigned,THE_INDEX_TYPE_MUST_BE_A_SIGNED_TYPE);
341
+ EIGEN_STATIC_ASSERT((_Options&(ColMajor|RowMajor))==Options,INVALID_MATRIX_TEMPLATE_PARAMETERS);
342
+ }
343
+
344
+ Storage m_data;
345
+ Index m_size;
346
+ };
347
+
348
+ template<typename Scalar, int _Options, typename _Index>
349
+ class SparseVector<Scalar,_Options,_Index>::InnerIterator
350
+ {
351
+ public:
352
+ InnerIterator(const SparseVector& vec, Index outer=0)
353
+ : m_data(vec.m_data), m_id(0), m_end(static_cast<Index>(m_data.size()))
354
+ {
355
+ EIGEN_UNUSED_VARIABLE(outer);
356
+ eigen_assert(outer==0);
357
+ }
358
+
359
+ InnerIterator(const internal::CompressedStorage<Scalar,Index>& data)
360
+ : m_data(data), m_id(0), m_end(static_cast<Index>(m_data.size()))
361
+ {}
362
+
363
+ inline InnerIterator& operator++() { m_id++; return *this; }
364
+
365
+ inline Scalar value() const { return m_data.value(m_id); }
366
+ inline Scalar& valueRef() { return const_cast<Scalar&>(m_data.value(m_id)); }
367
+
368
+ inline Index index() const { return m_data.index(m_id); }
369
+ inline Index row() const { return IsColVector ? index() : 0; }
370
+ inline Index col() const { return IsColVector ? 0 : index(); }
371
+
372
+ inline operator bool() const { return (m_id < m_end); }
373
+
374
+ protected:
375
+ const internal::CompressedStorage<Scalar,Index>& m_data;
376
+ Index m_id;
377
+ const Index m_end;
378
+ };
379
+
380
+ template<typename Scalar, int _Options, typename _Index>
381
+ class SparseVector<Scalar,_Options,_Index>::ReverseInnerIterator
382
+ {
383
+ public:
384
+ ReverseInnerIterator(const SparseVector& vec, Index outer=0)
385
+ : m_data(vec.m_data), m_id(static_cast<Index>(m_data.size())), m_start(0)
386
+ {
387
+ EIGEN_UNUSED_VARIABLE(outer);
388
+ eigen_assert(outer==0);
389
+ }
390
+
391
+ ReverseInnerIterator(const internal::CompressedStorage<Scalar,Index>& data)
392
+ : m_data(data), m_id(static_cast<Index>(m_data.size())), m_start(0)
393
+ {}
394
+
395
+ inline ReverseInnerIterator& operator--() { m_id--; return *this; }
396
+
397
+ inline Scalar value() const { return m_data.value(m_id-1); }
398
+ inline Scalar& valueRef() { return const_cast<Scalar&>(m_data.value(m_id-1)); }
399
+
400
+ inline Index index() const { return m_data.index(m_id-1); }
401
+ inline Index row() const { return IsColVector ? index() : 0; }
402
+ inline Index col() const { return IsColVector ? 0 : index(); }
403
+
404
+ inline operator bool() const { return (m_id > m_start); }
405
+
406
+ protected:
407
+ const internal::CompressedStorage<Scalar,Index>& m_data;
408
+ Index m_id;
409
+ const Index m_start;
410
+ };
411
+
412
+ namespace internal {
413
+
414
+ template< typename Dest, typename Src>
415
+ struct sparse_vector_assign_selector<Dest,Src,SVA_Inner> {
416
+ static void run(Dest& dst, const Src& src) {
417
+ eigen_internal_assert(src.innerSize()==src.size());
418
+ for(typename Src::InnerIterator it(src, 0); it; ++it)
419
+ dst.insert(it.index()) = it.value();
420
+ }
421
+ };
422
+
423
+ template< typename Dest, typename Src>
424
+ struct sparse_vector_assign_selector<Dest,Src,SVA_Outer> {
425
+ static void run(Dest& dst, const Src& src) {
426
+ eigen_internal_assert(src.outerSize()==src.size());
427
+ for(typename Dest::Index i=0; i<src.size(); ++i)
428
+ {
429
+ typename Src::InnerIterator it(src, i);
430
+ if(it)
431
+ dst.insert(i) = it.value();
432
+ }
433
+ }
434
+ };
435
+
436
+ template< typename Dest, typename Src>
437
+ struct sparse_vector_assign_selector<Dest,Src,SVA_RuntimeSwitch> {
438
+ static void run(Dest& dst, const Src& src) {
439
+ if(src.outerSize()==1) sparse_vector_assign_selector<Dest,Src,SVA_Inner>::run(dst, src);
440
+ else sparse_vector_assign_selector<Dest,Src,SVA_Outer>::run(dst, src);
441
+ }
442
+ };
443
+
444
+ }
445
+
446
+ } // end namespace Eigen
447
+
448
+ #endif // EIGEN_SPARSEVECTOR_H
@@ -0,0 +1,99 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // Copyright (C) 2011 Gael Guennebaud <gael.guennebaud@inria.fr>
5
+ // Copyright (C) 2010 Daniel Lowengrub <lowdanie@gmail.com>
6
+ //
7
+ // This Source Code Form is subject to the terms of the Mozilla
8
+ // Public License v. 2.0. If a copy of the MPL was not distributed
9
+ // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
10
+
11
+ #ifndef EIGEN_SPARSEVIEW_H
12
+ #define EIGEN_SPARSEVIEW_H
13
+
14
+ namespace Eigen {
15
+
16
+ namespace internal {
17
+
18
+ template<typename MatrixType>
19
+ struct traits<SparseView<MatrixType> > : traits<MatrixType>
20
+ {
21
+ typedef typename MatrixType::Index Index;
22
+ typedef Sparse StorageKind;
23
+ enum {
24
+ Flags = int(traits<MatrixType>::Flags) & (RowMajorBit)
25
+ };
26
+ };
27
+
28
+ } // end namespace internal
29
+
30
+ template<typename MatrixType>
31
+ class SparseView : public SparseMatrixBase<SparseView<MatrixType> >
32
+ {
33
+ typedef typename MatrixType::Nested MatrixTypeNested;
34
+ typedef typename internal::remove_all<MatrixTypeNested>::type _MatrixTypeNested;
35
+ public:
36
+ EIGEN_SPARSE_PUBLIC_INTERFACE(SparseView)
37
+
38
+ SparseView(const MatrixType& mat, const Scalar& m_reference = Scalar(0),
39
+ typename NumTraits<Scalar>::Real m_epsilon = NumTraits<Scalar>::dummy_precision()) :
40
+ m_matrix(mat), m_reference(m_reference), m_epsilon(m_epsilon) {}
41
+
42
+ class InnerIterator;
43
+
44
+ inline Index rows() const { return m_matrix.rows(); }
45
+ inline Index cols() const { return m_matrix.cols(); }
46
+
47
+ inline Index innerSize() const { return m_matrix.innerSize(); }
48
+ inline Index outerSize() const { return m_matrix.outerSize(); }
49
+
50
+ protected:
51
+ MatrixTypeNested m_matrix;
52
+ Scalar m_reference;
53
+ typename NumTraits<Scalar>::Real m_epsilon;
54
+ };
55
+
56
+ template<typename MatrixType>
57
+ class SparseView<MatrixType>::InnerIterator : public _MatrixTypeNested::InnerIterator
58
+ {
59
+ typedef typename SparseView::Index Index;
60
+ public:
61
+ typedef typename _MatrixTypeNested::InnerIterator IterBase;
62
+ InnerIterator(const SparseView& view, Index outer) :
63
+ IterBase(view.m_matrix, outer), m_view(view)
64
+ {
65
+ incrementToNonZero();
66
+ }
67
+
68
+ EIGEN_STRONG_INLINE InnerIterator& operator++()
69
+ {
70
+ IterBase::operator++();
71
+ incrementToNonZero();
72
+ return *this;
73
+ }
74
+
75
+ using IterBase::value;
76
+
77
+ protected:
78
+ const SparseView& m_view;
79
+
80
+ private:
81
+ void incrementToNonZero()
82
+ {
83
+ while((bool(*this)) && internal::isMuchSmallerThan(value(), m_view.m_reference, m_view.m_epsilon))
84
+ {
85
+ IterBase::operator++();
86
+ }
87
+ }
88
+ };
89
+
90
+ template<typename Derived>
91
+ const SparseView<Derived> MatrixBase<Derived>::sparseView(const Scalar& m_reference,
92
+ const typename NumTraits<Scalar>::Real& m_epsilon) const
93
+ {
94
+ return SparseView<Derived>(derived(), m_reference, m_epsilon);
95
+ }
96
+
97
+ } // end namespace Eigen
98
+
99
+ #endif