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,150 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // Copyright (C) 2008-2011 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_SPARSESPARSEPRODUCTWITHPRUNING_H
11
+ #define EIGEN_SPARSESPARSEPRODUCTWITHPRUNING_H
12
+
13
+ namespace Eigen {
14
+
15
+ namespace internal {
16
+
17
+
18
+ // perform a pseudo in-place sparse * sparse product assuming all matrices are col major
19
+ template<typename Lhs, typename Rhs, typename ResultType>
20
+ static void sparse_sparse_product_with_pruning_impl(const Lhs& lhs, const Rhs& rhs, ResultType& res, const typename ResultType::RealScalar& tolerance)
21
+ {
22
+ // return sparse_sparse_product_with_pruning_impl2(lhs,rhs,res);
23
+
24
+ typedef typename remove_all<Lhs>::type::Scalar Scalar;
25
+ typedef typename remove_all<Lhs>::type::Index Index;
26
+
27
+ // make sure to call innerSize/outerSize since we fake the storage order.
28
+ Index rows = lhs.innerSize();
29
+ Index cols = rhs.outerSize();
30
+ //Index size = lhs.outerSize();
31
+ eigen_assert(lhs.outerSize() == rhs.innerSize());
32
+
33
+ // allocate a temporary buffer
34
+ AmbiVector<Scalar,Index> tempVector(rows);
35
+
36
+ // estimate the number of non zero entries
37
+ // given a rhs column containing Y non zeros, we assume that the respective Y columns
38
+ // of the lhs differs in average of one non zeros, thus the number of non zeros for
39
+ // the product of a rhs column with the lhs is X+Y where X is the average number of non zero
40
+ // per column of the lhs.
41
+ // Therefore, we have nnz(lhs*rhs) = nnz(lhs) + nnz(rhs)
42
+ Index estimated_nnz_prod = lhs.nonZeros() + rhs.nonZeros();
43
+
44
+ // mimics a resizeByInnerOuter:
45
+ if(ResultType::IsRowMajor)
46
+ res.resize(cols, rows);
47
+ else
48
+ res.resize(rows, cols);
49
+
50
+ res.reserve(estimated_nnz_prod);
51
+ double ratioColRes = double(estimated_nnz_prod)/double(lhs.rows()*rhs.cols());
52
+ for (Index j=0; j<cols; ++j)
53
+ {
54
+ // FIXME:
55
+ //double ratioColRes = (double(rhs.innerVector(j).nonZeros()) + double(lhs.nonZeros())/double(lhs.cols()))/double(lhs.rows());
56
+ // let's do a more accurate determination of the nnz ratio for the current column j of res
57
+ tempVector.init(ratioColRes);
58
+ tempVector.setZero();
59
+ for (typename Rhs::InnerIterator rhsIt(rhs, j); rhsIt; ++rhsIt)
60
+ {
61
+ // FIXME should be written like this: tmp += rhsIt.value() * lhs.col(rhsIt.index())
62
+ tempVector.restart();
63
+ Scalar x = rhsIt.value();
64
+ for (typename Lhs::InnerIterator lhsIt(lhs, rhsIt.index()); lhsIt; ++lhsIt)
65
+ {
66
+ tempVector.coeffRef(lhsIt.index()) += lhsIt.value() * x;
67
+ }
68
+ }
69
+ res.startVec(j);
70
+ for (typename AmbiVector<Scalar,Index>::Iterator it(tempVector,tolerance); it; ++it)
71
+ res.insertBackByOuterInner(j,it.index()) = it.value();
72
+ }
73
+ res.finalize();
74
+ }
75
+
76
+ template<typename Lhs, typename Rhs, typename ResultType,
77
+ int LhsStorageOrder = traits<Lhs>::Flags&RowMajorBit,
78
+ int RhsStorageOrder = traits<Rhs>::Flags&RowMajorBit,
79
+ int ResStorageOrder = traits<ResultType>::Flags&RowMajorBit>
80
+ struct sparse_sparse_product_with_pruning_selector;
81
+
82
+ template<typename Lhs, typename Rhs, typename ResultType>
83
+ struct sparse_sparse_product_with_pruning_selector<Lhs,Rhs,ResultType,ColMajor,ColMajor,ColMajor>
84
+ {
85
+ typedef typename traits<typename remove_all<Lhs>::type>::Scalar Scalar;
86
+ typedef typename ResultType::RealScalar RealScalar;
87
+
88
+ static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res, const RealScalar& tolerance)
89
+ {
90
+ typename remove_all<ResultType>::type _res(res.rows(), res.cols());
91
+ internal::sparse_sparse_product_with_pruning_impl<Lhs,Rhs,ResultType>(lhs, rhs, _res, tolerance);
92
+ res.swap(_res);
93
+ }
94
+ };
95
+
96
+ template<typename Lhs, typename Rhs, typename ResultType>
97
+ struct sparse_sparse_product_with_pruning_selector<Lhs,Rhs,ResultType,ColMajor,ColMajor,RowMajor>
98
+ {
99
+ typedef typename ResultType::RealScalar RealScalar;
100
+ static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res, const RealScalar& tolerance)
101
+ {
102
+ // we need a col-major matrix to hold the result
103
+ typedef SparseMatrix<typename ResultType::Scalar,ColMajor,typename ResultType::Index> SparseTemporaryType;
104
+ SparseTemporaryType _res(res.rows(), res.cols());
105
+ internal::sparse_sparse_product_with_pruning_impl<Lhs,Rhs,SparseTemporaryType>(lhs, rhs, _res, tolerance);
106
+ res = _res;
107
+ }
108
+ };
109
+
110
+ template<typename Lhs, typename Rhs, typename ResultType>
111
+ struct sparse_sparse_product_with_pruning_selector<Lhs,Rhs,ResultType,RowMajor,RowMajor,RowMajor>
112
+ {
113
+ typedef typename ResultType::RealScalar RealScalar;
114
+ static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res, const RealScalar& tolerance)
115
+ {
116
+ // let's transpose the product to get a column x column product
117
+ typename remove_all<ResultType>::type _res(res.rows(), res.cols());
118
+ internal::sparse_sparse_product_with_pruning_impl<Rhs,Lhs,ResultType>(rhs, lhs, _res, tolerance);
119
+ res.swap(_res);
120
+ }
121
+ };
122
+
123
+ template<typename Lhs, typename Rhs, typename ResultType>
124
+ struct sparse_sparse_product_with_pruning_selector<Lhs,Rhs,ResultType,RowMajor,RowMajor,ColMajor>
125
+ {
126
+ typedef typename ResultType::RealScalar RealScalar;
127
+ static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res, const RealScalar& tolerance)
128
+ {
129
+ typedef SparseMatrix<typename ResultType::Scalar,ColMajor,typename Lhs::Index> ColMajorMatrixLhs;
130
+ typedef SparseMatrix<typename ResultType::Scalar,ColMajor,typename Lhs::Index> ColMajorMatrixRhs;
131
+ ColMajorMatrixLhs colLhs(lhs);
132
+ ColMajorMatrixRhs colRhs(rhs);
133
+ internal::sparse_sparse_product_with_pruning_impl<ColMajorMatrixLhs,ColMajorMatrixRhs,ResultType>(colLhs, colRhs, res, tolerance);
134
+
135
+ // let's transpose the product to get a column x column product
136
+ // typedef SparseMatrix<typename ResultType::Scalar> SparseTemporaryType;
137
+ // SparseTemporaryType _res(res.cols(), res.rows());
138
+ // sparse_sparse_product_with_pruning_impl<Rhs,Lhs,SparseTemporaryType>(rhs, lhs, _res);
139
+ // res = _res.transpose();
140
+ }
141
+ };
142
+
143
+ // NOTE the 2 others cases (col row *) must never occur since they are caught
144
+ // by ProductReturnType which transforms it to (col col *) by evaluating rhs.
145
+
146
+ } // end namespace internal
147
+
148
+ } // end namespace Eigen
149
+
150
+ #endif // EIGEN_SPARSESPARSEPRODUCTWITHPRUNING_H
@@ -0,0 +1,63 @@
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_SPARSETRANSPOSE_H
11
+ #define EIGEN_SPARSETRANSPOSE_H
12
+
13
+ namespace Eigen {
14
+
15
+ template<typename MatrixType> class TransposeImpl<MatrixType,Sparse>
16
+ : public SparseMatrixBase<Transpose<MatrixType> >
17
+ {
18
+ typedef typename internal::remove_all<typename MatrixType::Nested>::type _MatrixTypeNested;
19
+ public:
20
+
21
+ EIGEN_SPARSE_PUBLIC_INTERFACE(Transpose<MatrixType> )
22
+
23
+ class InnerIterator;
24
+ class ReverseInnerIterator;
25
+
26
+ inline Index nonZeros() const { return derived().nestedExpression().nonZeros(); }
27
+ };
28
+
29
+ // NOTE: VC10 and VC11 trigger an ICE if don't put typename TransposeImpl<MatrixType,Sparse>:: in front of Index,
30
+ // a typedef typename TransposeImpl<MatrixType,Sparse>::Index Index;
31
+ // does not fix the issue.
32
+ // An alternative is to define the nested class in the parent class itself.
33
+ template<typename MatrixType> class TransposeImpl<MatrixType,Sparse>::InnerIterator
34
+ : public _MatrixTypeNested::InnerIterator
35
+ {
36
+ typedef typename _MatrixTypeNested::InnerIterator Base;
37
+ typedef typename TransposeImpl::Index Index;
38
+ public:
39
+
40
+ EIGEN_STRONG_INLINE InnerIterator(const TransposeImpl& trans, typename TransposeImpl<MatrixType,Sparse>::Index outer)
41
+ : Base(trans.derived().nestedExpression(), outer)
42
+ {}
43
+ typename TransposeImpl<MatrixType,Sparse>::Index row() const { return Base::col(); }
44
+ typename TransposeImpl<MatrixType,Sparse>::Index col() const { return Base::row(); }
45
+ };
46
+
47
+ template<typename MatrixType> class TransposeImpl<MatrixType,Sparse>::ReverseInnerIterator
48
+ : public _MatrixTypeNested::ReverseInnerIterator
49
+ {
50
+ typedef typename _MatrixTypeNested::ReverseInnerIterator Base;
51
+ typedef typename TransposeImpl::Index Index;
52
+ public:
53
+
54
+ EIGEN_STRONG_INLINE ReverseInnerIterator(const TransposeImpl& xpr, typename TransposeImpl<MatrixType,Sparse>::Index outer)
55
+ : Base(xpr.derived().nestedExpression(), outer)
56
+ {}
57
+ typename TransposeImpl<MatrixType,Sparse>::Index row() const { return Base::col(); }
58
+ typename TransposeImpl<MatrixType,Sparse>::Index col() const { return Base::row(); }
59
+ };
60
+
61
+ } // end namespace Eigen
62
+
63
+ #endif // EIGEN_SPARSETRANSPOSE_H
@@ -0,0 +1,179 @@
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
+ // Copyright (C) 2012 Désiré Nuentsa-Wakam <desire.nuentsa_wakam@inria.fr>
6
+ //
7
+ // This Source Code Form is subject to the terms of the Mozilla
8
+ // Public License v. 2.0. If a copy of the MPL was not distributed
9
+ // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
10
+
11
+ #ifndef EIGEN_SPARSE_TRIANGULARVIEW_H
12
+ #define EIGEN_SPARSE_TRIANGULARVIEW_H
13
+
14
+ namespace Eigen {
15
+
16
+ namespace internal {
17
+
18
+ template<typename MatrixType, int Mode>
19
+ struct traits<SparseTriangularView<MatrixType,Mode> >
20
+ : public traits<MatrixType>
21
+ {};
22
+
23
+ } // namespace internal
24
+
25
+ template<typename MatrixType, int Mode> class SparseTriangularView
26
+ : public SparseMatrixBase<SparseTriangularView<MatrixType,Mode> >
27
+ {
28
+ enum { SkipFirst = ((Mode&Lower) && !(MatrixType::Flags&RowMajorBit))
29
+ || ((Mode&Upper) && (MatrixType::Flags&RowMajorBit)),
30
+ SkipLast = !SkipFirst,
31
+ SkipDiag = (Mode&ZeroDiag) ? 1 : 0,
32
+ HasUnitDiag = (Mode&UnitDiag) ? 1 : 0
33
+ };
34
+
35
+ public:
36
+
37
+ EIGEN_SPARSE_PUBLIC_INTERFACE(SparseTriangularView)
38
+
39
+ class InnerIterator;
40
+ class ReverseInnerIterator;
41
+
42
+ inline Index rows() const { return m_matrix.rows(); }
43
+ inline Index cols() const { return m_matrix.cols(); }
44
+
45
+ typedef typename MatrixType::Nested MatrixTypeNested;
46
+ typedef typename internal::remove_reference<MatrixTypeNested>::type MatrixTypeNestedNonRef;
47
+ typedef typename internal::remove_all<MatrixTypeNested>::type MatrixTypeNestedCleaned;
48
+
49
+ inline SparseTriangularView(const MatrixType& matrix) : m_matrix(matrix) {}
50
+
51
+ /** \internal */
52
+ inline const MatrixTypeNestedCleaned& nestedExpression() const { return m_matrix; }
53
+
54
+ template<typename OtherDerived>
55
+ typename internal::plain_matrix_type_column_major<OtherDerived>::type
56
+ solve(const MatrixBase<OtherDerived>& other) const;
57
+
58
+ template<typename OtherDerived> void solveInPlace(MatrixBase<OtherDerived>& other) const;
59
+ template<typename OtherDerived> void solveInPlace(SparseMatrixBase<OtherDerived>& other) const;
60
+
61
+ protected:
62
+ MatrixTypeNested m_matrix;
63
+ };
64
+
65
+ template<typename MatrixType, int Mode>
66
+ class SparseTriangularView<MatrixType,Mode>::InnerIterator : public MatrixTypeNestedCleaned::InnerIterator
67
+ {
68
+ typedef typename MatrixTypeNestedCleaned::InnerIterator Base;
69
+ typedef typename SparseTriangularView::Index Index;
70
+ public:
71
+
72
+ EIGEN_STRONG_INLINE InnerIterator(const SparseTriangularView& view, Index outer)
73
+ : Base(view.nestedExpression(), outer), m_returnOne(false)
74
+ {
75
+ if(SkipFirst)
76
+ {
77
+ while((*this) && ((HasUnitDiag||SkipDiag) ? this->index()<=outer : this->index()<outer))
78
+ Base::operator++();
79
+ if(HasUnitDiag)
80
+ m_returnOne = true;
81
+ }
82
+ else if(HasUnitDiag && ((!Base::operator bool()) || Base::index()>=Base::outer()))
83
+ {
84
+ if((!SkipFirst) && Base::operator bool())
85
+ Base::operator++();
86
+ m_returnOne = true;
87
+ }
88
+ }
89
+
90
+ EIGEN_STRONG_INLINE InnerIterator& operator++()
91
+ {
92
+ if(HasUnitDiag && m_returnOne)
93
+ m_returnOne = false;
94
+ else
95
+ {
96
+ Base::operator++();
97
+ if(HasUnitDiag && (!SkipFirst) && ((!Base::operator bool()) || Base::index()>=Base::outer()))
98
+ {
99
+ if((!SkipFirst) && Base::operator bool())
100
+ Base::operator++();
101
+ m_returnOne = true;
102
+ }
103
+ }
104
+ return *this;
105
+ }
106
+
107
+ inline Index row() const { return (MatrixType::Flags&RowMajorBit ? Base::outer() : this->index()); }
108
+ inline Index col() const { return (MatrixType::Flags&RowMajorBit ? this->index() : Base::outer()); }
109
+ inline Index index() const
110
+ {
111
+ if(HasUnitDiag && m_returnOne) return Base::outer();
112
+ else return Base::index();
113
+ }
114
+ inline Scalar value() const
115
+ {
116
+ if(HasUnitDiag && m_returnOne) return Scalar(1);
117
+ else return Base::value();
118
+ }
119
+
120
+ EIGEN_STRONG_INLINE operator bool() const
121
+ {
122
+ if(HasUnitDiag && m_returnOne)
123
+ return true;
124
+ if(SkipFirst) return Base::operator bool();
125
+ else
126
+ {
127
+ if (SkipDiag) return (Base::operator bool() && this->index() < this->outer());
128
+ else return (Base::operator bool() && this->index() <= this->outer());
129
+ }
130
+ }
131
+ protected:
132
+ bool m_returnOne;
133
+ };
134
+
135
+ template<typename MatrixType, int Mode>
136
+ class SparseTriangularView<MatrixType,Mode>::ReverseInnerIterator : public MatrixTypeNestedCleaned::ReverseInnerIterator
137
+ {
138
+ typedef typename MatrixTypeNestedCleaned::ReverseInnerIterator Base;
139
+ typedef typename SparseTriangularView::Index Index;
140
+ public:
141
+
142
+ EIGEN_STRONG_INLINE ReverseInnerIterator(const SparseTriangularView& view, Index outer)
143
+ : Base(view.nestedExpression(), outer)
144
+ {
145
+ eigen_assert((!HasUnitDiag) && "ReverseInnerIterator does not support yet triangular views with a unit diagonal");
146
+ if(SkipLast) {
147
+ while((*this) && (SkipDiag ? this->index()>=outer : this->index()>outer))
148
+ --(*this);
149
+ }
150
+ }
151
+
152
+ EIGEN_STRONG_INLINE ReverseInnerIterator& operator--()
153
+ { Base::operator--(); return *this; }
154
+
155
+ inline Index row() const { return Base::row(); }
156
+ inline Index col() const { return Base::col(); }
157
+
158
+ EIGEN_STRONG_INLINE operator bool() const
159
+ {
160
+ if (SkipLast) return Base::operator bool() ;
161
+ else
162
+ {
163
+ if(SkipDiag) return (Base::operator bool() && this->index() > this->outer());
164
+ else return (Base::operator bool() && this->index() >= this->outer());
165
+ }
166
+ }
167
+ };
168
+
169
+ template<typename Derived>
170
+ template<int Mode>
171
+ inline const SparseTriangularView<Derived, Mode>
172
+ SparseMatrixBase<Derived>::triangularView() const
173
+ {
174
+ return derived();
175
+ }
176
+
177
+ } // end namespace Eigen
178
+
179
+ #endif // EIGEN_SPARSE_TRIANGULARVIEW_H
@@ -0,0 +1,172 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // Copyright (C) 2008 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_SPARSEUTIL_H
11
+ #define EIGEN_SPARSEUTIL_H
12
+
13
+ namespace Eigen {
14
+
15
+ #ifdef NDEBUG
16
+ #define EIGEN_DBG_SPARSE(X)
17
+ #else
18
+ #define EIGEN_DBG_SPARSE(X) X
19
+ #endif
20
+
21
+ #define EIGEN_SPARSE_INHERIT_ASSIGNMENT_OPERATOR(Derived, Op) \
22
+ template<typename OtherDerived> \
23
+ EIGEN_STRONG_INLINE Derived& operator Op(const Eigen::SparseMatrixBase<OtherDerived>& other) \
24
+ { \
25
+ return Base::operator Op(other.derived()); \
26
+ } \
27
+ EIGEN_STRONG_INLINE Derived& operator Op(const Derived& other) \
28
+ { \
29
+ return Base::operator Op(other); \
30
+ }
31
+
32
+ #define EIGEN_SPARSE_INHERIT_SCALAR_ASSIGNMENT_OPERATOR(Derived, Op) \
33
+ template<typename Other> \
34
+ EIGEN_STRONG_INLINE Derived& operator Op(const Other& scalar) \
35
+ { \
36
+ return Base::operator Op(scalar); \
37
+ }
38
+
39
+ #define EIGEN_SPARSE_INHERIT_ASSIGNMENT_OPERATORS(Derived) \
40
+ EIGEN_SPARSE_INHERIT_ASSIGNMENT_OPERATOR(Derived, =) \
41
+ EIGEN_SPARSE_INHERIT_ASSIGNMENT_OPERATOR(Derived, +=) \
42
+ EIGEN_SPARSE_INHERIT_ASSIGNMENT_OPERATOR(Derived, -=) \
43
+ EIGEN_SPARSE_INHERIT_SCALAR_ASSIGNMENT_OPERATOR(Derived, *=) \
44
+ EIGEN_SPARSE_INHERIT_SCALAR_ASSIGNMENT_OPERATOR(Derived, /=)
45
+
46
+ #define _EIGEN_SPARSE_PUBLIC_INTERFACE(Derived, BaseClass) \
47
+ typedef BaseClass Base; \
48
+ typedef typename Eigen::internal::traits<Derived >::Scalar Scalar; \
49
+ typedef typename Eigen::NumTraits<Scalar>::Real RealScalar; \
50
+ typedef typename Eigen::internal::nested<Derived >::type Nested; \
51
+ typedef typename Eigen::internal::traits<Derived >::StorageKind StorageKind; \
52
+ typedef typename Eigen::internal::traits<Derived >::Index Index; \
53
+ enum { RowsAtCompileTime = Eigen::internal::traits<Derived >::RowsAtCompileTime, \
54
+ ColsAtCompileTime = Eigen::internal::traits<Derived >::ColsAtCompileTime, \
55
+ Flags = Eigen::internal::traits<Derived >::Flags, \
56
+ CoeffReadCost = Eigen::internal::traits<Derived >::CoeffReadCost, \
57
+ SizeAtCompileTime = Base::SizeAtCompileTime, \
58
+ IsVectorAtCompileTime = Base::IsVectorAtCompileTime }; \
59
+ using Base::derived; \
60
+ using Base::const_cast_derived;
61
+
62
+ #define EIGEN_SPARSE_PUBLIC_INTERFACE(Derived) \
63
+ _EIGEN_SPARSE_PUBLIC_INTERFACE(Derived, Eigen::SparseMatrixBase<Derived >)
64
+
65
+ const int CoherentAccessPattern = 0x1;
66
+ const int InnerRandomAccessPattern = 0x2 | CoherentAccessPattern;
67
+ const int OuterRandomAccessPattern = 0x4 | CoherentAccessPattern;
68
+ const int RandomAccessPattern = 0x8 | OuterRandomAccessPattern | InnerRandomAccessPattern;
69
+
70
+ template<typename _Scalar, int _Flags = 0, typename _Index = int> class SparseMatrix;
71
+ template<typename _Scalar, int _Flags = 0, typename _Index = int> class DynamicSparseMatrix;
72
+ template<typename _Scalar, int _Flags = 0, typename _Index = int> class SparseVector;
73
+ template<typename _Scalar, int _Flags = 0, typename _Index = int> class MappedSparseMatrix;
74
+
75
+ template<typename MatrixType, int Mode> class SparseTriangularView;
76
+ template<typename MatrixType, unsigned int UpLo> class SparseSelfAdjointView;
77
+ template<typename Lhs, typename Rhs> class SparseDiagonalProduct;
78
+ template<typename MatrixType> class SparseView;
79
+
80
+ template<typename Lhs, typename Rhs> class SparseSparseProduct;
81
+ template<typename Lhs, typename Rhs> class SparseTimeDenseProduct;
82
+ template<typename Lhs, typename Rhs> class DenseTimeSparseProduct;
83
+ template<typename Lhs, typename Rhs, bool Transpose> class SparseDenseOuterProduct;
84
+
85
+ template<typename Lhs, typename Rhs> struct SparseSparseProductReturnType;
86
+ template<typename Lhs, typename Rhs,
87
+ int InnerSize = EIGEN_SIZE_MIN_PREFER_FIXED(internal::traits<Lhs>::ColsAtCompileTime,internal::traits<Rhs>::RowsAtCompileTime)> struct DenseSparseProductReturnType;
88
+ template<typename Lhs, typename Rhs,
89
+ int InnerSize = EIGEN_SIZE_MIN_PREFER_FIXED(internal::traits<Lhs>::ColsAtCompileTime,internal::traits<Rhs>::RowsAtCompileTime)> struct SparseDenseProductReturnType;
90
+ template<typename MatrixType,int UpLo> class SparseSymmetricPermutationProduct;
91
+
92
+ namespace internal {
93
+
94
+ template<typename T,int Rows,int Cols> struct sparse_eval;
95
+
96
+ template<typename T> struct eval<T,Sparse>
97
+ : public sparse_eval<T, traits<T>::RowsAtCompileTime,traits<T>::ColsAtCompileTime>
98
+ {};
99
+
100
+ template<typename T,int Cols> struct sparse_eval<T,1,Cols> {
101
+ typedef typename traits<T>::Scalar _Scalar;
102
+ typedef typename traits<T>::Index _Index;
103
+ public:
104
+ typedef SparseVector<_Scalar, RowMajor, _Index> type;
105
+ };
106
+
107
+ template<typename T,int Rows> struct sparse_eval<T,Rows,1> {
108
+ typedef typename traits<T>::Scalar _Scalar;
109
+ typedef typename traits<T>::Index _Index;
110
+ public:
111
+ typedef SparseVector<_Scalar, ColMajor, _Index> type;
112
+ };
113
+
114
+ template<typename T,int Rows,int Cols> struct sparse_eval {
115
+ typedef typename traits<T>::Scalar _Scalar;
116
+ typedef typename traits<T>::Index _Index;
117
+ enum { _Options = ((traits<T>::Flags&RowMajorBit)==RowMajorBit) ? RowMajor : ColMajor };
118
+ public:
119
+ typedef SparseMatrix<_Scalar, _Options, _Index> type;
120
+ };
121
+
122
+ template<typename T> struct sparse_eval<T,1,1> {
123
+ typedef typename traits<T>::Scalar _Scalar;
124
+ public:
125
+ typedef Matrix<_Scalar, 1, 1> type;
126
+ };
127
+
128
+ template<typename T> struct plain_matrix_type<T,Sparse>
129
+ {
130
+ typedef typename traits<T>::Scalar _Scalar;
131
+ typedef typename traits<T>::Index _Index;
132
+ enum { _Options = ((traits<T>::Flags&RowMajorBit)==RowMajorBit) ? RowMajor : ColMajor };
133
+ public:
134
+ typedef SparseMatrix<_Scalar, _Options, _Index> type;
135
+ };
136
+
137
+ } // end namespace internal
138
+
139
+ /** \ingroup SparseCore_Module
140
+ *
141
+ * \class Triplet
142
+ *
143
+ * \brief A small structure to hold a non zero as a triplet (i,j,value).
144
+ *
145
+ * \sa SparseMatrix::setFromTriplets()
146
+ */
147
+ template<typename Scalar, typename Index=typename SparseMatrix<Scalar>::Index >
148
+ class Triplet
149
+ {
150
+ public:
151
+ Triplet() : m_row(0), m_col(0), m_value(0) {}
152
+
153
+ Triplet(const Index& i, const Index& j, const Scalar& v = Scalar(0))
154
+ : m_row(i), m_col(j), m_value(v)
155
+ {}
156
+
157
+ /** \returns the row index of the element */
158
+ const Index& row() const { return m_row; }
159
+
160
+ /** \returns the column index of the element */
161
+ const Index& col() const { return m_col; }
162
+
163
+ /** \returns the value of the element */
164
+ const Scalar& value() const { return m_value; }
165
+ protected:
166
+ Index m_row, m_col;
167
+ Scalar m_value;
168
+ };
169
+
170
+ } // end namespace Eigen
171
+
172
+ #endif // EIGEN_SPARSEUTIL_H