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,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