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,92 @@
1
+ /*
2
+ Copyright (c) 2011, Intel Corporation. All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without modification,
5
+ are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright notice, this
8
+ list of conditions and the following disclaimer.
9
+ * Redistributions in binary form must reproduce the above copyright notice,
10
+ this list of conditions and the following disclaimer in the documentation
11
+ and/or other materials provided with the distribution.
12
+ * Neither the name of Intel Corporation nor the names of its contributors may
13
+ be used to endorse or promote products derived from this software without
14
+ specific prior written permission.
15
+
16
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
20
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
23
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
+
27
+ ********************************************************************************
28
+ * Content : Eigen bindings to Intel(R) MKL
29
+ * Singular Value Decomposition - SVD.
30
+ ********************************************************************************
31
+ */
32
+
33
+ #ifndef EIGEN_JACOBISVD_MKL_H
34
+ #define EIGEN_JACOBISVD_MKL_H
35
+
36
+ #include "Eigen/src/Core/util/MKL_support.h"
37
+
38
+ namespace Eigen {
39
+
40
+ /** \internal Specialization for the data types supported by MKL */
41
+
42
+ #define EIGEN_MKL_SVD(EIGTYPE, MKLTYPE, MKLRTYPE, MKLPREFIX, EIGCOLROW, MKLCOLROW) \
43
+ template<> inline \
44
+ JacobiSVD<Matrix<EIGTYPE, Dynamic, Dynamic, EIGCOLROW, Dynamic, Dynamic>, ColPivHouseholderQRPreconditioner>& \
45
+ JacobiSVD<Matrix<EIGTYPE, Dynamic, Dynamic, EIGCOLROW, Dynamic, Dynamic>, ColPivHouseholderQRPreconditioner>::compute(const Matrix<EIGTYPE, Dynamic, Dynamic, EIGCOLROW, Dynamic, Dynamic>& matrix, unsigned int computationOptions) \
46
+ { \
47
+ typedef Matrix<EIGTYPE, Dynamic, Dynamic, EIGCOLROW, Dynamic, Dynamic> MatrixType; \
48
+ typedef MatrixType::Scalar Scalar; \
49
+ typedef MatrixType::RealScalar RealScalar; \
50
+ allocate(matrix.rows(), matrix.cols(), computationOptions); \
51
+ \
52
+ /*const RealScalar precision = RealScalar(2) * NumTraits<Scalar>::epsilon();*/ \
53
+ m_nonzeroSingularValues = m_diagSize; \
54
+ \
55
+ lapack_int lda = matrix.outerStride(), ldu, ldvt; \
56
+ lapack_int matrix_order = MKLCOLROW; \
57
+ char jobu, jobvt; \
58
+ MKLTYPE *u, *vt, dummy; \
59
+ jobu = (m_computeFullU) ? 'A' : (m_computeThinU) ? 'S' : 'N'; \
60
+ jobvt = (m_computeFullV) ? 'A' : (m_computeThinV) ? 'S' : 'N'; \
61
+ if (computeU()) { \
62
+ ldu = m_matrixU.outerStride(); \
63
+ u = (MKLTYPE*)m_matrixU.data(); \
64
+ } else { ldu=1; u=&dummy; }\
65
+ MatrixType localV; \
66
+ ldvt = (m_computeFullV) ? m_cols : (m_computeThinV) ? m_diagSize : 1; \
67
+ if (computeV()) { \
68
+ localV.resize(ldvt, m_cols); \
69
+ vt = (MKLTYPE*)localV.data(); \
70
+ } else { ldvt=1; vt=&dummy; }\
71
+ Matrix<MKLRTYPE, Dynamic, Dynamic> superb; superb.resize(m_diagSize, 1); \
72
+ MatrixType m_temp; m_temp = matrix; \
73
+ LAPACKE_##MKLPREFIX##gesvd( matrix_order, jobu, jobvt, m_rows, m_cols, (MKLTYPE*)m_temp.data(), lda, (MKLRTYPE*)m_singularValues.data(), u, ldu, vt, ldvt, superb.data()); \
74
+ if (computeV()) m_matrixV = localV.adjoint(); \
75
+ /* for(int i=0;i<m_diagSize;i++) if (m_singularValues.coeffRef(i) < precision) { m_nonzeroSingularValues--; m_singularValues.coeffRef(i)=RealScalar(0);}*/ \
76
+ m_isInitialized = true; \
77
+ return *this; \
78
+ }
79
+
80
+ EIGEN_MKL_SVD(double, double, double, d, ColMajor, LAPACK_COL_MAJOR)
81
+ EIGEN_MKL_SVD(float, float, float , s, ColMajor, LAPACK_COL_MAJOR)
82
+ EIGEN_MKL_SVD(dcomplex, MKL_Complex16, double, z, ColMajor, LAPACK_COL_MAJOR)
83
+ EIGEN_MKL_SVD(scomplex, MKL_Complex8, float , c, ColMajor, LAPACK_COL_MAJOR)
84
+
85
+ EIGEN_MKL_SVD(double, double, double, d, RowMajor, LAPACK_ROW_MAJOR)
86
+ EIGEN_MKL_SVD(float, float, float , s, RowMajor, LAPACK_ROW_MAJOR)
87
+ EIGEN_MKL_SVD(dcomplex, MKL_Complex16, double, z, RowMajor, LAPACK_ROW_MAJOR)
88
+ EIGEN_MKL_SVD(scomplex, MKL_Complex8, float , c, RowMajor, LAPACK_ROW_MAJOR)
89
+
90
+ } // end namespace Eigen
91
+
92
+ #endif // EIGEN_JACOBISVD_MKL_H
@@ -0,0 +1,148 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // Copyright (C) 2010 Benoit Jacob <jacob.benoit.1@gmail.com>
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_BIDIAGONALIZATION_H
11
+ #define EIGEN_BIDIAGONALIZATION_H
12
+
13
+ namespace Eigen {
14
+
15
+ namespace internal {
16
+ // UpperBidiagonalization will probably be replaced by a Bidiagonalization class, don't want to make it stable API.
17
+ // At the same time, it's useful to keep for now as it's about the only thing that is testing the BandMatrix class.
18
+
19
+ template<typename _MatrixType> class UpperBidiagonalization
20
+ {
21
+ public:
22
+
23
+ typedef _MatrixType MatrixType;
24
+ enum {
25
+ RowsAtCompileTime = MatrixType::RowsAtCompileTime,
26
+ ColsAtCompileTime = MatrixType::ColsAtCompileTime,
27
+ ColsAtCompileTimeMinusOne = internal::decrement_size<ColsAtCompileTime>::ret
28
+ };
29
+ typedef typename MatrixType::Scalar Scalar;
30
+ typedef typename MatrixType::RealScalar RealScalar;
31
+ typedef typename MatrixType::Index Index;
32
+ typedef Matrix<Scalar, 1, ColsAtCompileTime> RowVectorType;
33
+ typedef Matrix<Scalar, RowsAtCompileTime, 1> ColVectorType;
34
+ typedef BandMatrix<RealScalar, ColsAtCompileTime, ColsAtCompileTime, 1, 0> BidiagonalType;
35
+ typedef Matrix<Scalar, ColsAtCompileTime, 1> DiagVectorType;
36
+ typedef Matrix<Scalar, ColsAtCompileTimeMinusOne, 1> SuperDiagVectorType;
37
+ typedef HouseholderSequence<
38
+ const MatrixType,
39
+ CwiseUnaryOp<internal::scalar_conjugate_op<Scalar>, const Diagonal<const MatrixType,0> >
40
+ > HouseholderUSequenceType;
41
+ typedef HouseholderSequence<
42
+ const typename internal::remove_all<typename MatrixType::ConjugateReturnType>::type,
43
+ Diagonal<const MatrixType,1>,
44
+ OnTheRight
45
+ > HouseholderVSequenceType;
46
+
47
+ /**
48
+ * \brief Default Constructor.
49
+ *
50
+ * The default constructor is useful in cases in which the user intends to
51
+ * perform decompositions via Bidiagonalization::compute(const MatrixType&).
52
+ */
53
+ UpperBidiagonalization() : m_householder(), m_bidiagonal(), m_isInitialized(false) {}
54
+
55
+ UpperBidiagonalization(const MatrixType& matrix)
56
+ : m_householder(matrix.rows(), matrix.cols()),
57
+ m_bidiagonal(matrix.cols(), matrix.cols()),
58
+ m_isInitialized(false)
59
+ {
60
+ compute(matrix);
61
+ }
62
+
63
+ UpperBidiagonalization& compute(const MatrixType& matrix);
64
+
65
+ const MatrixType& householder() const { return m_householder; }
66
+ const BidiagonalType& bidiagonal() const { return m_bidiagonal; }
67
+
68
+ const HouseholderUSequenceType householderU() const
69
+ {
70
+ eigen_assert(m_isInitialized && "UpperBidiagonalization is not initialized.");
71
+ return HouseholderUSequenceType(m_householder, m_householder.diagonal().conjugate());
72
+ }
73
+
74
+ const HouseholderVSequenceType householderV() // const here gives nasty errors and i'm lazy
75
+ {
76
+ eigen_assert(m_isInitialized && "UpperBidiagonalization is not initialized.");
77
+ return HouseholderVSequenceType(m_householder.conjugate(), m_householder.const_derived().template diagonal<1>())
78
+ .setLength(m_householder.cols()-1)
79
+ .setShift(1);
80
+ }
81
+
82
+ protected:
83
+ MatrixType m_householder;
84
+ BidiagonalType m_bidiagonal;
85
+ bool m_isInitialized;
86
+ };
87
+
88
+ template<typename _MatrixType>
89
+ UpperBidiagonalization<_MatrixType>& UpperBidiagonalization<_MatrixType>::compute(const _MatrixType& matrix)
90
+ {
91
+ Index rows = matrix.rows();
92
+ Index cols = matrix.cols();
93
+
94
+ eigen_assert(rows >= cols && "UpperBidiagonalization is only for matrices satisfying rows>=cols.");
95
+
96
+ m_householder = matrix;
97
+
98
+ ColVectorType temp(rows);
99
+
100
+ for (Index k = 0; /* breaks at k==cols-1 below */ ; ++k)
101
+ {
102
+ Index remainingRows = rows - k;
103
+ Index remainingCols = cols - k - 1;
104
+
105
+ // construct left householder transform in-place in m_householder
106
+ m_householder.col(k).tail(remainingRows)
107
+ .makeHouseholderInPlace(m_householder.coeffRef(k,k),
108
+ m_bidiagonal.template diagonal<0>().coeffRef(k));
109
+ // apply householder transform to remaining part of m_householder on the left
110
+ m_householder.bottomRightCorner(remainingRows, remainingCols)
111
+ .applyHouseholderOnTheLeft(m_householder.col(k).tail(remainingRows-1),
112
+ m_householder.coeff(k,k),
113
+ temp.data());
114
+
115
+ if(k == cols-1) break;
116
+
117
+ // construct right householder transform in-place in m_householder
118
+ m_householder.row(k).tail(remainingCols)
119
+ .makeHouseholderInPlace(m_householder.coeffRef(k,k+1),
120
+ m_bidiagonal.template diagonal<1>().coeffRef(k));
121
+ // apply householder transform to remaining part of m_householder on the left
122
+ m_householder.bottomRightCorner(remainingRows-1, remainingCols)
123
+ .applyHouseholderOnTheRight(m_householder.row(k).tail(remainingCols-1).transpose(),
124
+ m_householder.coeff(k,k+1),
125
+ temp.data());
126
+ }
127
+ m_isInitialized = true;
128
+ return *this;
129
+ }
130
+
131
+ #if 0
132
+ /** \return the Householder QR decomposition of \c *this.
133
+ *
134
+ * \sa class Bidiagonalization
135
+ */
136
+ template<typename Derived>
137
+ const UpperBidiagonalization<typename MatrixBase<Derived>::PlainObject>
138
+ MatrixBase<Derived>::bidiagonalization() const
139
+ {
140
+ return UpperBidiagonalization<PlainObject>(eval());
141
+ }
142
+ #endif
143
+
144
+ } // end namespace internal
145
+
146
+ } // end namespace Eigen
147
+
148
+ #endif // EIGEN_BIDIAGONALIZATION_H
@@ -0,0 +1,671 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // Copyright (C) 2008-2012 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_SIMPLICIAL_CHOLESKY_H
11
+ #define EIGEN_SIMPLICIAL_CHOLESKY_H
12
+
13
+ namespace Eigen {
14
+
15
+ enum SimplicialCholeskyMode {
16
+ SimplicialCholeskyLLT,
17
+ SimplicialCholeskyLDLT
18
+ };
19
+
20
+ /** \ingroup SparseCholesky_Module
21
+ * \brief A direct sparse Cholesky factorizations
22
+ *
23
+ * These classes provide LL^T and LDL^T Cholesky factorizations of sparse matrices that are
24
+ * selfadjoint and positive definite. The factorization allows for solving A.X = B where
25
+ * X and B can be either dense or sparse.
26
+ *
27
+ * In order to reduce the fill-in, a symmetric permutation P is applied prior to the factorization
28
+ * such that the factorized matrix is P A P^-1.
29
+ *
30
+ * \tparam _MatrixType the type of the sparse matrix A, it must be a SparseMatrix<>
31
+ * \tparam _UpLo the triangular part that will be used for the computations. It can be Lower
32
+ * or Upper. Default is Lower.
33
+ *
34
+ */
35
+ template<typename Derived>
36
+ class SimplicialCholeskyBase : internal::noncopyable
37
+ {
38
+ public:
39
+ typedef typename internal::traits<Derived>::MatrixType MatrixType;
40
+ typedef typename internal::traits<Derived>::OrderingType OrderingType;
41
+ enum { UpLo = internal::traits<Derived>::UpLo };
42
+ typedef typename MatrixType::Scalar Scalar;
43
+ typedef typename MatrixType::RealScalar RealScalar;
44
+ typedef typename MatrixType::Index Index;
45
+ typedef SparseMatrix<Scalar,ColMajor,Index> CholMatrixType;
46
+ typedef Matrix<Scalar,Dynamic,1> VectorType;
47
+
48
+ public:
49
+
50
+ /** Default constructor */
51
+ SimplicialCholeskyBase()
52
+ : m_info(Success), m_isInitialized(false), m_shiftOffset(0), m_shiftScale(1)
53
+ {}
54
+
55
+ SimplicialCholeskyBase(const MatrixType& matrix)
56
+ : m_info(Success), m_isInitialized(false), m_shiftOffset(0), m_shiftScale(1)
57
+ {
58
+ derived().compute(matrix);
59
+ }
60
+
61
+ ~SimplicialCholeskyBase()
62
+ {
63
+ }
64
+
65
+ Derived& derived() { return *static_cast<Derived*>(this); }
66
+ const Derived& derived() const { return *static_cast<const Derived*>(this); }
67
+
68
+ inline Index cols() const { return m_matrix.cols(); }
69
+ inline Index rows() const { return m_matrix.rows(); }
70
+
71
+ /** \brief Reports whether previous computation was successful.
72
+ *
73
+ * \returns \c Success if computation was succesful,
74
+ * \c NumericalIssue if the matrix.appears to be negative.
75
+ */
76
+ ComputationInfo info() const
77
+ {
78
+ eigen_assert(m_isInitialized && "Decomposition is not initialized.");
79
+ return m_info;
80
+ }
81
+
82
+ /** \returns the solution x of \f$ A x = b \f$ using the current decomposition of A.
83
+ *
84
+ * \sa compute()
85
+ */
86
+ template<typename Rhs>
87
+ inline const internal::solve_retval<SimplicialCholeskyBase, Rhs>
88
+ solve(const MatrixBase<Rhs>& b) const
89
+ {
90
+ eigen_assert(m_isInitialized && "Simplicial LLT or LDLT is not initialized.");
91
+ eigen_assert(rows()==b.rows()
92
+ && "SimplicialCholeskyBase::solve(): invalid number of rows of the right hand side matrix b");
93
+ return internal::solve_retval<SimplicialCholeskyBase, Rhs>(*this, b.derived());
94
+ }
95
+
96
+ /** \returns the solution x of \f$ A x = b \f$ using the current decomposition of A.
97
+ *
98
+ * \sa compute()
99
+ */
100
+ template<typename Rhs>
101
+ inline const internal::sparse_solve_retval<SimplicialCholeskyBase, Rhs>
102
+ solve(const SparseMatrixBase<Rhs>& b) const
103
+ {
104
+ eigen_assert(m_isInitialized && "Simplicial LLT or LDLT is not initialized.");
105
+ eigen_assert(rows()==b.rows()
106
+ && "SimplicialCholesky::solve(): invalid number of rows of the right hand side matrix b");
107
+ return internal::sparse_solve_retval<SimplicialCholeskyBase, Rhs>(*this, b.derived());
108
+ }
109
+
110
+ /** \returns the permutation P
111
+ * \sa permutationPinv() */
112
+ const PermutationMatrix<Dynamic,Dynamic,Index>& permutationP() const
113
+ { return m_P; }
114
+
115
+ /** \returns the inverse P^-1 of the permutation P
116
+ * \sa permutationP() */
117
+ const PermutationMatrix<Dynamic,Dynamic,Index>& permutationPinv() const
118
+ { return m_Pinv; }
119
+
120
+ /** Sets the shift parameters that will be used to adjust the diagonal coefficients during the numerical factorization.
121
+ *
122
+ * During the numerical factorization, the diagonal coefficients are transformed by the following linear model:\n
123
+ * \c d_ii = \a offset + \a scale * \c d_ii
124
+ *
125
+ * The default is the identity transformation with \a offset=0, and \a scale=1.
126
+ *
127
+ * \returns a reference to \c *this.
128
+ */
129
+ Derived& setShift(const RealScalar& offset, const RealScalar& scale = 1)
130
+ {
131
+ m_shiftOffset = offset;
132
+ m_shiftScale = scale;
133
+ return derived();
134
+ }
135
+
136
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
137
+ /** \internal */
138
+ template<typename Stream>
139
+ void dumpMemory(Stream& s)
140
+ {
141
+ int total = 0;
142
+ s << " L: " << ((total+=(m_matrix.cols()+1) * sizeof(int) + m_matrix.nonZeros()*(sizeof(int)+sizeof(Scalar))) >> 20) << "Mb" << "\n";
143
+ s << " diag: " << ((total+=m_diag.size() * sizeof(Scalar)) >> 20) << "Mb" << "\n";
144
+ s << " tree: " << ((total+=m_parent.size() * sizeof(int)) >> 20) << "Mb" << "\n";
145
+ s << " nonzeros: " << ((total+=m_nonZerosPerCol.size() * sizeof(int)) >> 20) << "Mb" << "\n";
146
+ s << " perm: " << ((total+=m_P.size() * sizeof(int)) >> 20) << "Mb" << "\n";
147
+ s << " perm^-1: " << ((total+=m_Pinv.size() * sizeof(int)) >> 20) << "Mb" << "\n";
148
+ s << " TOTAL: " << (total>> 20) << "Mb" << "\n";
149
+ }
150
+
151
+ /** \internal */
152
+ template<typename Rhs,typename Dest>
153
+ void _solve(const MatrixBase<Rhs> &b, MatrixBase<Dest> &dest) const
154
+ {
155
+ eigen_assert(m_factorizationIsOk && "The decomposition is not in a valid state for solving, you must first call either compute() or symbolic()/numeric()");
156
+ eigen_assert(m_matrix.rows()==b.rows());
157
+
158
+ if(m_info!=Success)
159
+ return;
160
+
161
+ if(m_P.size()>0)
162
+ dest = m_P * b;
163
+ else
164
+ dest = b;
165
+
166
+ if(m_matrix.nonZeros()>0) // otherwise L==I
167
+ derived().matrixL().solveInPlace(dest);
168
+
169
+ if(m_diag.size()>0)
170
+ dest = m_diag.asDiagonal().inverse() * dest;
171
+
172
+ if (m_matrix.nonZeros()>0) // otherwise U==I
173
+ derived().matrixU().solveInPlace(dest);
174
+
175
+ if(m_P.size()>0)
176
+ dest = m_Pinv * dest;
177
+ }
178
+
179
+ #endif // EIGEN_PARSED_BY_DOXYGEN
180
+
181
+ protected:
182
+
183
+ /** Computes the sparse Cholesky decomposition of \a matrix */
184
+ template<bool DoLDLT>
185
+ void compute(const MatrixType& matrix)
186
+ {
187
+ eigen_assert(matrix.rows()==matrix.cols());
188
+ Index size = matrix.cols();
189
+ CholMatrixType ap(size,size);
190
+ ordering(matrix, ap);
191
+ analyzePattern_preordered(ap, DoLDLT);
192
+ factorize_preordered<DoLDLT>(ap);
193
+ }
194
+
195
+ template<bool DoLDLT>
196
+ void factorize(const MatrixType& a)
197
+ {
198
+ eigen_assert(a.rows()==a.cols());
199
+ int size = a.cols();
200
+ CholMatrixType ap(size,size);
201
+ ap.template selfadjointView<Upper>() = a.template selfadjointView<UpLo>().twistedBy(m_P);
202
+ factorize_preordered<DoLDLT>(ap);
203
+ }
204
+
205
+ template<bool DoLDLT>
206
+ void factorize_preordered(const CholMatrixType& a);
207
+
208
+ void analyzePattern(const MatrixType& a, bool doLDLT)
209
+ {
210
+ eigen_assert(a.rows()==a.cols());
211
+ int size = a.cols();
212
+ CholMatrixType ap(size,size);
213
+ ordering(a, ap);
214
+ analyzePattern_preordered(ap,doLDLT);
215
+ }
216
+ void analyzePattern_preordered(const CholMatrixType& a, bool doLDLT);
217
+
218
+ void ordering(const MatrixType& a, CholMatrixType& ap);
219
+
220
+ /** keeps off-diagonal entries; drops diagonal entries */
221
+ struct keep_diag {
222
+ inline bool operator() (const Index& row, const Index& col, const Scalar&) const
223
+ {
224
+ return row!=col;
225
+ }
226
+ };
227
+
228
+ mutable ComputationInfo m_info;
229
+ bool m_isInitialized;
230
+ bool m_factorizationIsOk;
231
+ bool m_analysisIsOk;
232
+
233
+ CholMatrixType m_matrix;
234
+ VectorType m_diag; // the diagonal coefficients (LDLT mode)
235
+ VectorXi m_parent; // elimination tree
236
+ VectorXi m_nonZerosPerCol;
237
+ PermutationMatrix<Dynamic,Dynamic,Index> m_P; // the permutation
238
+ PermutationMatrix<Dynamic,Dynamic,Index> m_Pinv; // the inverse permutation
239
+
240
+ RealScalar m_shiftOffset;
241
+ RealScalar m_shiftScale;
242
+ };
243
+
244
+ template<typename _MatrixType, int _UpLo = Lower, typename _Ordering = AMDOrdering<typename _MatrixType::Index> > class SimplicialLLT;
245
+ template<typename _MatrixType, int _UpLo = Lower, typename _Ordering = AMDOrdering<typename _MatrixType::Index> > class SimplicialLDLT;
246
+ template<typename _MatrixType, int _UpLo = Lower, typename _Ordering = AMDOrdering<typename _MatrixType::Index> > class SimplicialCholesky;
247
+
248
+ namespace internal {
249
+
250
+ template<typename _MatrixType, int _UpLo, typename _Ordering> struct traits<SimplicialLLT<_MatrixType,_UpLo,_Ordering> >
251
+ {
252
+ typedef _MatrixType MatrixType;
253
+ typedef _Ordering OrderingType;
254
+ enum { UpLo = _UpLo };
255
+ typedef typename MatrixType::Scalar Scalar;
256
+ typedef typename MatrixType::Index Index;
257
+ typedef SparseMatrix<Scalar, ColMajor, Index> CholMatrixType;
258
+ typedef SparseTriangularView<CholMatrixType, Eigen::Lower> MatrixL;
259
+ typedef SparseTriangularView<typename CholMatrixType::AdjointReturnType, Eigen::Upper> MatrixU;
260
+ static inline MatrixL getL(const MatrixType& m) { return m; }
261
+ static inline MatrixU getU(const MatrixType& m) { return m.adjoint(); }
262
+ };
263
+
264
+ template<typename _MatrixType,int _UpLo, typename _Ordering> struct traits<SimplicialLDLT<_MatrixType,_UpLo,_Ordering> >
265
+ {
266
+ typedef _MatrixType MatrixType;
267
+ typedef _Ordering OrderingType;
268
+ enum { UpLo = _UpLo };
269
+ typedef typename MatrixType::Scalar Scalar;
270
+ typedef typename MatrixType::Index Index;
271
+ typedef SparseMatrix<Scalar, ColMajor, Index> CholMatrixType;
272
+ typedef SparseTriangularView<CholMatrixType, Eigen::UnitLower> MatrixL;
273
+ typedef SparseTriangularView<typename CholMatrixType::AdjointReturnType, Eigen::UnitUpper> MatrixU;
274
+ static inline MatrixL getL(const MatrixType& m) { return m; }
275
+ static inline MatrixU getU(const MatrixType& m) { return m.adjoint(); }
276
+ };
277
+
278
+ template<typename _MatrixType, int _UpLo, typename _Ordering> struct traits<SimplicialCholesky<_MatrixType,_UpLo,_Ordering> >
279
+ {
280
+ typedef _MatrixType MatrixType;
281
+ typedef _Ordering OrderingType;
282
+ enum { UpLo = _UpLo };
283
+ };
284
+
285
+ }
286
+
287
+ /** \ingroup SparseCholesky_Module
288
+ * \class SimplicialLLT
289
+ * \brief A direct sparse LLT Cholesky factorizations
290
+ *
291
+ * This class provides a LL^T Cholesky factorizations of sparse matrices that are
292
+ * selfadjoint and positive definite. The factorization allows for solving A.X = B where
293
+ * X and B can be either dense or sparse.
294
+ *
295
+ * In order to reduce the fill-in, a symmetric permutation P is applied prior to the factorization
296
+ * such that the factorized matrix is P A P^-1.
297
+ *
298
+ * \tparam _MatrixType the type of the sparse matrix A, it must be a SparseMatrix<>
299
+ * \tparam _UpLo the triangular part that will be used for the computations. It can be Lower
300
+ * or Upper. Default is Lower.
301
+ * \tparam _Ordering The ordering method to use, either AMDOrdering<> or NaturalOrdering<>. Default is AMDOrdering<>
302
+ *
303
+ * \sa class SimplicialLDLT, class AMDOrdering, class NaturalOrdering
304
+ */
305
+ template<typename _MatrixType, int _UpLo, typename _Ordering>
306
+ class SimplicialLLT : public SimplicialCholeskyBase<SimplicialLLT<_MatrixType,_UpLo,_Ordering> >
307
+ {
308
+ public:
309
+ typedef _MatrixType MatrixType;
310
+ enum { UpLo = _UpLo };
311
+ typedef SimplicialCholeskyBase<SimplicialLLT> Base;
312
+ typedef typename MatrixType::Scalar Scalar;
313
+ typedef typename MatrixType::RealScalar RealScalar;
314
+ typedef typename MatrixType::Index Index;
315
+ typedef SparseMatrix<Scalar,ColMajor,Index> CholMatrixType;
316
+ typedef Matrix<Scalar,Dynamic,1> VectorType;
317
+ typedef internal::traits<SimplicialLLT> Traits;
318
+ typedef typename Traits::MatrixL MatrixL;
319
+ typedef typename Traits::MatrixU MatrixU;
320
+ public:
321
+ /** Default constructor */
322
+ SimplicialLLT() : Base() {}
323
+ /** Constructs and performs the LLT factorization of \a matrix */
324
+ SimplicialLLT(const MatrixType& matrix)
325
+ : Base(matrix) {}
326
+
327
+ /** \returns an expression of the factor L */
328
+ inline const MatrixL matrixL() const {
329
+ eigen_assert(Base::m_factorizationIsOk && "Simplicial LLT not factorized");
330
+ return Traits::getL(Base::m_matrix);
331
+ }
332
+
333
+ /** \returns an expression of the factor U (= L^*) */
334
+ inline const MatrixU matrixU() const {
335
+ eigen_assert(Base::m_factorizationIsOk && "Simplicial LLT not factorized");
336
+ return Traits::getU(Base::m_matrix);
337
+ }
338
+
339
+ /** Computes the sparse Cholesky decomposition of \a matrix */
340
+ SimplicialLLT& compute(const MatrixType& matrix)
341
+ {
342
+ Base::template compute<false>(matrix);
343
+ return *this;
344
+ }
345
+
346
+ /** Performs a symbolic decomposition on the sparcity of \a matrix.
347
+ *
348
+ * This function is particularly useful when solving for several problems having the same structure.
349
+ *
350
+ * \sa factorize()
351
+ */
352
+ void analyzePattern(const MatrixType& a)
353
+ {
354
+ Base::analyzePattern(a, false);
355
+ }
356
+
357
+ /** Performs a numeric decomposition of \a matrix
358
+ *
359
+ * The given matrix must has the same sparcity than the matrix on which the symbolic decomposition has been performed.
360
+ *
361
+ * \sa analyzePattern()
362
+ */
363
+ void factorize(const MatrixType& a)
364
+ {
365
+ Base::template factorize<false>(a);
366
+ }
367
+
368
+ /** \returns the determinant of the underlying matrix from the current factorization */
369
+ Scalar determinant() const
370
+ {
371
+ Scalar detL = Base::m_matrix.diagonal().prod();
372
+ return numext::abs2(detL);
373
+ }
374
+ };
375
+
376
+ /** \ingroup SparseCholesky_Module
377
+ * \class SimplicialLDLT
378
+ * \brief A direct sparse LDLT Cholesky factorizations without square root.
379
+ *
380
+ * This class provides a LDL^T Cholesky factorizations without square root of sparse matrices that are
381
+ * selfadjoint and positive definite. The factorization allows for solving A.X = B where
382
+ * X and B can be either dense or sparse.
383
+ *
384
+ * In order to reduce the fill-in, a symmetric permutation P is applied prior to the factorization
385
+ * such that the factorized matrix is P A P^-1.
386
+ *
387
+ * \tparam _MatrixType the type of the sparse matrix A, it must be a SparseMatrix<>
388
+ * \tparam _UpLo the triangular part that will be used for the computations. It can be Lower
389
+ * or Upper. Default is Lower.
390
+ * \tparam _Ordering The ordering method to use, either AMDOrdering<> or NaturalOrdering<>. Default is AMDOrdering<>
391
+ *
392
+ * \sa class SimplicialLLT, class AMDOrdering, class NaturalOrdering
393
+ */
394
+ template<typename _MatrixType, int _UpLo, typename _Ordering>
395
+ class SimplicialLDLT : public SimplicialCholeskyBase<SimplicialLDLT<_MatrixType,_UpLo,_Ordering> >
396
+ {
397
+ public:
398
+ typedef _MatrixType MatrixType;
399
+ enum { UpLo = _UpLo };
400
+ typedef SimplicialCholeskyBase<SimplicialLDLT> Base;
401
+ typedef typename MatrixType::Scalar Scalar;
402
+ typedef typename MatrixType::RealScalar RealScalar;
403
+ typedef typename MatrixType::Index Index;
404
+ typedef SparseMatrix<Scalar,ColMajor,Index> CholMatrixType;
405
+ typedef Matrix<Scalar,Dynamic,1> VectorType;
406
+ typedef internal::traits<SimplicialLDLT> Traits;
407
+ typedef typename Traits::MatrixL MatrixL;
408
+ typedef typename Traits::MatrixU MatrixU;
409
+ public:
410
+ /** Default constructor */
411
+ SimplicialLDLT() : Base() {}
412
+
413
+ /** Constructs and performs the LLT factorization of \a matrix */
414
+ SimplicialLDLT(const MatrixType& matrix)
415
+ : Base(matrix) {}
416
+
417
+ /** \returns a vector expression of the diagonal D */
418
+ inline const VectorType vectorD() const {
419
+ eigen_assert(Base::m_factorizationIsOk && "Simplicial LDLT not factorized");
420
+ return Base::m_diag;
421
+ }
422
+ /** \returns an expression of the factor L */
423
+ inline const MatrixL matrixL() const {
424
+ eigen_assert(Base::m_factorizationIsOk && "Simplicial LDLT not factorized");
425
+ return Traits::getL(Base::m_matrix);
426
+ }
427
+
428
+ /** \returns an expression of the factor U (= L^*) */
429
+ inline const MatrixU matrixU() const {
430
+ eigen_assert(Base::m_factorizationIsOk && "Simplicial LDLT not factorized");
431
+ return Traits::getU(Base::m_matrix);
432
+ }
433
+
434
+ /** Computes the sparse Cholesky decomposition of \a matrix */
435
+ SimplicialLDLT& compute(const MatrixType& matrix)
436
+ {
437
+ Base::template compute<true>(matrix);
438
+ return *this;
439
+ }
440
+
441
+ /** Performs a symbolic decomposition on the sparcity of \a matrix.
442
+ *
443
+ * This function is particularly useful when solving for several problems having the same structure.
444
+ *
445
+ * \sa factorize()
446
+ */
447
+ void analyzePattern(const MatrixType& a)
448
+ {
449
+ Base::analyzePattern(a, true);
450
+ }
451
+
452
+ /** Performs a numeric decomposition of \a matrix
453
+ *
454
+ * The given matrix must has the same sparcity than the matrix on which the symbolic decomposition has been performed.
455
+ *
456
+ * \sa analyzePattern()
457
+ */
458
+ void factorize(const MatrixType& a)
459
+ {
460
+ Base::template factorize<true>(a);
461
+ }
462
+
463
+ /** \returns the determinant of the underlying matrix from the current factorization */
464
+ Scalar determinant() const
465
+ {
466
+ return Base::m_diag.prod();
467
+ }
468
+ };
469
+
470
+ /** \deprecated use SimplicialLDLT or class SimplicialLLT
471
+ * \ingroup SparseCholesky_Module
472
+ * \class SimplicialCholesky
473
+ *
474
+ * \sa class SimplicialLDLT, class SimplicialLLT
475
+ */
476
+ template<typename _MatrixType, int _UpLo, typename _Ordering>
477
+ class SimplicialCholesky : public SimplicialCholeskyBase<SimplicialCholesky<_MatrixType,_UpLo,_Ordering> >
478
+ {
479
+ public:
480
+ typedef _MatrixType MatrixType;
481
+ enum { UpLo = _UpLo };
482
+ typedef SimplicialCholeskyBase<SimplicialCholesky> Base;
483
+ typedef typename MatrixType::Scalar Scalar;
484
+ typedef typename MatrixType::RealScalar RealScalar;
485
+ typedef typename MatrixType::Index Index;
486
+ typedef SparseMatrix<Scalar,ColMajor,Index> CholMatrixType;
487
+ typedef Matrix<Scalar,Dynamic,1> VectorType;
488
+ typedef internal::traits<SimplicialCholesky> Traits;
489
+ typedef internal::traits<SimplicialLDLT<MatrixType,UpLo> > LDLTTraits;
490
+ typedef internal::traits<SimplicialLLT<MatrixType,UpLo> > LLTTraits;
491
+ public:
492
+ SimplicialCholesky() : Base(), m_LDLT(true) {}
493
+
494
+ SimplicialCholesky(const MatrixType& matrix)
495
+ : Base(), m_LDLT(true)
496
+ {
497
+ compute(matrix);
498
+ }
499
+
500
+ SimplicialCholesky& setMode(SimplicialCholeskyMode mode)
501
+ {
502
+ switch(mode)
503
+ {
504
+ case SimplicialCholeskyLLT:
505
+ m_LDLT = false;
506
+ break;
507
+ case SimplicialCholeskyLDLT:
508
+ m_LDLT = true;
509
+ break;
510
+ default:
511
+ break;
512
+ }
513
+
514
+ return *this;
515
+ }
516
+
517
+ inline const VectorType vectorD() const {
518
+ eigen_assert(Base::m_factorizationIsOk && "Simplicial Cholesky not factorized");
519
+ return Base::m_diag;
520
+ }
521
+ inline const CholMatrixType rawMatrix() const {
522
+ eigen_assert(Base::m_factorizationIsOk && "Simplicial Cholesky not factorized");
523
+ return Base::m_matrix;
524
+ }
525
+
526
+ /** Computes the sparse Cholesky decomposition of \a matrix */
527
+ SimplicialCholesky& compute(const MatrixType& matrix)
528
+ {
529
+ if(m_LDLT)
530
+ Base::template compute<true>(matrix);
531
+ else
532
+ Base::template compute<false>(matrix);
533
+ return *this;
534
+ }
535
+
536
+ /** Performs a symbolic decomposition on the sparcity of \a matrix.
537
+ *
538
+ * This function is particularly useful when solving for several problems having the same structure.
539
+ *
540
+ * \sa factorize()
541
+ */
542
+ void analyzePattern(const MatrixType& a)
543
+ {
544
+ Base::analyzePattern(a, m_LDLT);
545
+ }
546
+
547
+ /** Performs a numeric decomposition of \a matrix
548
+ *
549
+ * The given matrix must has the same sparcity than the matrix on which the symbolic decomposition has been performed.
550
+ *
551
+ * \sa analyzePattern()
552
+ */
553
+ void factorize(const MatrixType& a)
554
+ {
555
+ if(m_LDLT)
556
+ Base::template factorize<true>(a);
557
+ else
558
+ Base::template factorize<false>(a);
559
+ }
560
+
561
+ /** \internal */
562
+ template<typename Rhs,typename Dest>
563
+ void _solve(const MatrixBase<Rhs> &b, MatrixBase<Dest> &dest) const
564
+ {
565
+ eigen_assert(Base::m_factorizationIsOk && "The decomposition is not in a valid state for solving, you must first call either compute() or symbolic()/numeric()");
566
+ eigen_assert(Base::m_matrix.rows()==b.rows());
567
+
568
+ if(Base::m_info!=Success)
569
+ return;
570
+
571
+ if(Base::m_P.size()>0)
572
+ dest = Base::m_P * b;
573
+ else
574
+ dest = b;
575
+
576
+ if(Base::m_matrix.nonZeros()>0) // otherwise L==I
577
+ {
578
+ if(m_LDLT)
579
+ LDLTTraits::getL(Base::m_matrix).solveInPlace(dest);
580
+ else
581
+ LLTTraits::getL(Base::m_matrix).solveInPlace(dest);
582
+ }
583
+
584
+ if(Base::m_diag.size()>0)
585
+ dest = Base::m_diag.asDiagonal().inverse() * dest;
586
+
587
+ if (Base::m_matrix.nonZeros()>0) // otherwise I==I
588
+ {
589
+ if(m_LDLT)
590
+ LDLTTraits::getU(Base::m_matrix).solveInPlace(dest);
591
+ else
592
+ LLTTraits::getU(Base::m_matrix).solveInPlace(dest);
593
+ }
594
+
595
+ if(Base::m_P.size()>0)
596
+ dest = Base::m_Pinv * dest;
597
+ }
598
+
599
+ Scalar determinant() const
600
+ {
601
+ if(m_LDLT)
602
+ {
603
+ return Base::m_diag.prod();
604
+ }
605
+ else
606
+ {
607
+ Scalar detL = Diagonal<const CholMatrixType>(Base::m_matrix).prod();
608
+ return numext::abs2(detL);
609
+ }
610
+ }
611
+
612
+ protected:
613
+ bool m_LDLT;
614
+ };
615
+
616
+ template<typename Derived>
617
+ void SimplicialCholeskyBase<Derived>::ordering(const MatrixType& a, CholMatrixType& ap)
618
+ {
619
+ eigen_assert(a.rows()==a.cols());
620
+ const Index size = a.rows();
621
+ // Note that amd compute the inverse permutation
622
+ {
623
+ CholMatrixType C;
624
+ C = a.template selfadjointView<UpLo>();
625
+
626
+ OrderingType ordering;
627
+ ordering(C,m_Pinv);
628
+ }
629
+
630
+ if(m_Pinv.size()>0)
631
+ m_P = m_Pinv.inverse();
632
+ else
633
+ m_P.resize(0);
634
+
635
+ ap.resize(size,size);
636
+ ap.template selfadjointView<Upper>() = a.template selfadjointView<UpLo>().twistedBy(m_P);
637
+ }
638
+
639
+ namespace internal {
640
+
641
+ template<typename Derived, typename Rhs>
642
+ struct solve_retval<SimplicialCholeskyBase<Derived>, Rhs>
643
+ : solve_retval_base<SimplicialCholeskyBase<Derived>, Rhs>
644
+ {
645
+ typedef SimplicialCholeskyBase<Derived> Dec;
646
+ EIGEN_MAKE_SOLVE_HELPERS(Dec,Rhs)
647
+
648
+ template<typename Dest> void evalTo(Dest& dst) const
649
+ {
650
+ dec().derived()._solve(rhs(),dst);
651
+ }
652
+ };
653
+
654
+ template<typename Derived, typename Rhs>
655
+ struct sparse_solve_retval<SimplicialCholeskyBase<Derived>, Rhs>
656
+ : sparse_solve_retval_base<SimplicialCholeskyBase<Derived>, Rhs>
657
+ {
658
+ typedef SimplicialCholeskyBase<Derived> Dec;
659
+ EIGEN_MAKE_SPARSE_SOLVE_HELPERS(Dec,Rhs)
660
+
661
+ template<typename Dest> void evalTo(Dest& dst) const
662
+ {
663
+ this->defaultEvalTo(dst);
664
+ }
665
+ };
666
+
667
+ } // end namespace internal
668
+
669
+ } // end namespace Eigen
670
+
671
+ #endif // EIGEN_SIMPLICIAL_CHOLESKY_H