umappp 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (395) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +25 -0
  3. data/README.md +110 -0
  4. data/ext/umappp/extconf.rb +25 -0
  5. data/ext/umappp/numo.hpp +867 -0
  6. data/ext/umappp/umappp.cpp +225 -0
  7. data/lib/umappp/version.rb +5 -0
  8. data/lib/umappp.rb +41 -0
  9. data/vendor/Eigen/Cholesky +45 -0
  10. data/vendor/Eigen/CholmodSupport +48 -0
  11. data/vendor/Eigen/Core +384 -0
  12. data/vendor/Eigen/Dense +7 -0
  13. data/vendor/Eigen/Eigen +2 -0
  14. data/vendor/Eigen/Eigenvalues +60 -0
  15. data/vendor/Eigen/Geometry +59 -0
  16. data/vendor/Eigen/Householder +29 -0
  17. data/vendor/Eigen/IterativeLinearSolvers +48 -0
  18. data/vendor/Eigen/Jacobi +32 -0
  19. data/vendor/Eigen/KLUSupport +41 -0
  20. data/vendor/Eigen/LU +47 -0
  21. data/vendor/Eigen/MetisSupport +35 -0
  22. data/vendor/Eigen/OrderingMethods +70 -0
  23. data/vendor/Eigen/PaStiXSupport +49 -0
  24. data/vendor/Eigen/PardisoSupport +35 -0
  25. data/vendor/Eigen/QR +50 -0
  26. data/vendor/Eigen/QtAlignedMalloc +39 -0
  27. data/vendor/Eigen/SPQRSupport +34 -0
  28. data/vendor/Eigen/SVD +50 -0
  29. data/vendor/Eigen/Sparse +34 -0
  30. data/vendor/Eigen/SparseCholesky +37 -0
  31. data/vendor/Eigen/SparseCore +69 -0
  32. data/vendor/Eigen/SparseLU +50 -0
  33. data/vendor/Eigen/SparseQR +36 -0
  34. data/vendor/Eigen/StdDeque +27 -0
  35. data/vendor/Eigen/StdList +26 -0
  36. data/vendor/Eigen/StdVector +27 -0
  37. data/vendor/Eigen/SuperLUSupport +64 -0
  38. data/vendor/Eigen/UmfPackSupport +40 -0
  39. data/vendor/Eigen/src/Cholesky/LDLT.h +688 -0
  40. data/vendor/Eigen/src/Cholesky/LLT.h +558 -0
  41. data/vendor/Eigen/src/Cholesky/LLT_LAPACKE.h +99 -0
  42. data/vendor/Eigen/src/CholmodSupport/CholmodSupport.h +682 -0
  43. data/vendor/Eigen/src/Core/ArithmeticSequence.h +413 -0
  44. data/vendor/Eigen/src/Core/Array.h +417 -0
  45. data/vendor/Eigen/src/Core/ArrayBase.h +226 -0
  46. data/vendor/Eigen/src/Core/ArrayWrapper.h +209 -0
  47. data/vendor/Eigen/src/Core/Assign.h +90 -0
  48. data/vendor/Eigen/src/Core/AssignEvaluator.h +1010 -0
  49. data/vendor/Eigen/src/Core/Assign_MKL.h +178 -0
  50. data/vendor/Eigen/src/Core/BandMatrix.h +353 -0
  51. data/vendor/Eigen/src/Core/Block.h +448 -0
  52. data/vendor/Eigen/src/Core/BooleanRedux.h +162 -0
  53. data/vendor/Eigen/src/Core/CommaInitializer.h +164 -0
  54. data/vendor/Eigen/src/Core/ConditionEstimator.h +175 -0
  55. data/vendor/Eigen/src/Core/CoreEvaluators.h +1741 -0
  56. data/vendor/Eigen/src/Core/CoreIterators.h +132 -0
  57. data/vendor/Eigen/src/Core/CwiseBinaryOp.h +183 -0
  58. data/vendor/Eigen/src/Core/CwiseNullaryOp.h +1001 -0
  59. data/vendor/Eigen/src/Core/CwiseTernaryOp.h +197 -0
  60. data/vendor/Eigen/src/Core/CwiseUnaryOp.h +103 -0
  61. data/vendor/Eigen/src/Core/CwiseUnaryView.h +132 -0
  62. data/vendor/Eigen/src/Core/DenseBase.h +701 -0
  63. data/vendor/Eigen/src/Core/DenseCoeffsBase.h +685 -0
  64. data/vendor/Eigen/src/Core/DenseStorage.h +652 -0
  65. data/vendor/Eigen/src/Core/Diagonal.h +258 -0
  66. data/vendor/Eigen/src/Core/DiagonalMatrix.h +391 -0
  67. data/vendor/Eigen/src/Core/DiagonalProduct.h +28 -0
  68. data/vendor/Eigen/src/Core/Dot.h +318 -0
  69. data/vendor/Eigen/src/Core/EigenBase.h +160 -0
  70. data/vendor/Eigen/src/Core/ForceAlignedAccess.h +150 -0
  71. data/vendor/Eigen/src/Core/Fuzzy.h +155 -0
  72. data/vendor/Eigen/src/Core/GeneralProduct.h +465 -0
  73. data/vendor/Eigen/src/Core/GenericPacketMath.h +1040 -0
  74. data/vendor/Eigen/src/Core/GlobalFunctions.h +194 -0
  75. data/vendor/Eigen/src/Core/IO.h +258 -0
  76. data/vendor/Eigen/src/Core/IndexedView.h +237 -0
  77. data/vendor/Eigen/src/Core/Inverse.h +117 -0
  78. data/vendor/Eigen/src/Core/Map.h +171 -0
  79. data/vendor/Eigen/src/Core/MapBase.h +310 -0
  80. data/vendor/Eigen/src/Core/MathFunctions.h +2057 -0
  81. data/vendor/Eigen/src/Core/MathFunctionsImpl.h +200 -0
  82. data/vendor/Eigen/src/Core/Matrix.h +565 -0
  83. data/vendor/Eigen/src/Core/MatrixBase.h +547 -0
  84. data/vendor/Eigen/src/Core/NestByValue.h +85 -0
  85. data/vendor/Eigen/src/Core/NoAlias.h +109 -0
  86. data/vendor/Eigen/src/Core/NumTraits.h +335 -0
  87. data/vendor/Eigen/src/Core/PartialReduxEvaluator.h +232 -0
  88. data/vendor/Eigen/src/Core/PermutationMatrix.h +605 -0
  89. data/vendor/Eigen/src/Core/PlainObjectBase.h +1128 -0
  90. data/vendor/Eigen/src/Core/Product.h +191 -0
  91. data/vendor/Eigen/src/Core/ProductEvaluators.h +1179 -0
  92. data/vendor/Eigen/src/Core/Random.h +218 -0
  93. data/vendor/Eigen/src/Core/Redux.h +515 -0
  94. data/vendor/Eigen/src/Core/Ref.h +381 -0
  95. data/vendor/Eigen/src/Core/Replicate.h +142 -0
  96. data/vendor/Eigen/src/Core/Reshaped.h +454 -0
  97. data/vendor/Eigen/src/Core/ReturnByValue.h +119 -0
  98. data/vendor/Eigen/src/Core/Reverse.h +217 -0
  99. data/vendor/Eigen/src/Core/Select.h +164 -0
  100. data/vendor/Eigen/src/Core/SelfAdjointView.h +365 -0
  101. data/vendor/Eigen/src/Core/SelfCwiseBinaryOp.h +47 -0
  102. data/vendor/Eigen/src/Core/Solve.h +188 -0
  103. data/vendor/Eigen/src/Core/SolveTriangular.h +235 -0
  104. data/vendor/Eigen/src/Core/SolverBase.h +168 -0
  105. data/vendor/Eigen/src/Core/StableNorm.h +251 -0
  106. data/vendor/Eigen/src/Core/StlIterators.h +463 -0
  107. data/vendor/Eigen/src/Core/Stride.h +116 -0
  108. data/vendor/Eigen/src/Core/Swap.h +68 -0
  109. data/vendor/Eigen/src/Core/Transpose.h +464 -0
  110. data/vendor/Eigen/src/Core/Transpositions.h +386 -0
  111. data/vendor/Eigen/src/Core/TriangularMatrix.h +1001 -0
  112. data/vendor/Eigen/src/Core/VectorBlock.h +96 -0
  113. data/vendor/Eigen/src/Core/VectorwiseOp.h +784 -0
  114. data/vendor/Eigen/src/Core/Visitor.h +381 -0
  115. data/vendor/Eigen/src/Core/arch/AVX/Complex.h +372 -0
  116. data/vendor/Eigen/src/Core/arch/AVX/MathFunctions.h +228 -0
  117. data/vendor/Eigen/src/Core/arch/AVX/PacketMath.h +1574 -0
  118. data/vendor/Eigen/src/Core/arch/AVX/TypeCasting.h +115 -0
  119. data/vendor/Eigen/src/Core/arch/AVX512/Complex.h +422 -0
  120. data/vendor/Eigen/src/Core/arch/AVX512/MathFunctions.h +362 -0
  121. data/vendor/Eigen/src/Core/arch/AVX512/PacketMath.h +2303 -0
  122. data/vendor/Eigen/src/Core/arch/AVX512/TypeCasting.h +89 -0
  123. data/vendor/Eigen/src/Core/arch/AltiVec/Complex.h +417 -0
  124. data/vendor/Eigen/src/Core/arch/AltiVec/MathFunctions.h +90 -0
  125. data/vendor/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2937 -0
  126. data/vendor/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +221 -0
  127. data/vendor/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +629 -0
  128. data/vendor/Eigen/src/Core/arch/AltiVec/PacketMath.h +2711 -0
  129. data/vendor/Eigen/src/Core/arch/CUDA/Complex.h +258 -0
  130. data/vendor/Eigen/src/Core/arch/Default/BFloat16.h +700 -0
  131. data/vendor/Eigen/src/Core/arch/Default/ConjHelper.h +117 -0
  132. data/vendor/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1649 -0
  133. data/vendor/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +110 -0
  134. data/vendor/Eigen/src/Core/arch/Default/Half.h +942 -0
  135. data/vendor/Eigen/src/Core/arch/Default/Settings.h +49 -0
  136. data/vendor/Eigen/src/Core/arch/Default/TypeCasting.h +120 -0
  137. data/vendor/Eigen/src/Core/arch/GPU/MathFunctions.h +103 -0
  138. data/vendor/Eigen/src/Core/arch/GPU/PacketMath.h +1685 -0
  139. data/vendor/Eigen/src/Core/arch/GPU/TypeCasting.h +80 -0
  140. data/vendor/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
  141. data/vendor/Eigen/src/Core/arch/MSA/Complex.h +648 -0
  142. data/vendor/Eigen/src/Core/arch/MSA/MathFunctions.h +387 -0
  143. data/vendor/Eigen/src/Core/arch/MSA/PacketMath.h +1233 -0
  144. data/vendor/Eigen/src/Core/arch/NEON/Complex.h +584 -0
  145. data/vendor/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +183 -0
  146. data/vendor/Eigen/src/Core/arch/NEON/MathFunctions.h +75 -0
  147. data/vendor/Eigen/src/Core/arch/NEON/PacketMath.h +4587 -0
  148. data/vendor/Eigen/src/Core/arch/NEON/TypeCasting.h +1419 -0
  149. data/vendor/Eigen/src/Core/arch/SSE/Complex.h +351 -0
  150. data/vendor/Eigen/src/Core/arch/SSE/MathFunctions.h +199 -0
  151. data/vendor/Eigen/src/Core/arch/SSE/PacketMath.h +1505 -0
  152. data/vendor/Eigen/src/Core/arch/SSE/TypeCasting.h +142 -0
  153. data/vendor/Eigen/src/Core/arch/SVE/MathFunctions.h +44 -0
  154. data/vendor/Eigen/src/Core/arch/SVE/PacketMath.h +752 -0
  155. data/vendor/Eigen/src/Core/arch/SVE/TypeCasting.h +49 -0
  156. data/vendor/Eigen/src/Core/arch/SYCL/InteropHeaders.h +232 -0
  157. data/vendor/Eigen/src/Core/arch/SYCL/MathFunctions.h +301 -0
  158. data/vendor/Eigen/src/Core/arch/SYCL/PacketMath.h +670 -0
  159. data/vendor/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +694 -0
  160. data/vendor/Eigen/src/Core/arch/SYCL/TypeCasting.h +85 -0
  161. data/vendor/Eigen/src/Core/arch/ZVector/Complex.h +426 -0
  162. data/vendor/Eigen/src/Core/arch/ZVector/MathFunctions.h +233 -0
  163. data/vendor/Eigen/src/Core/arch/ZVector/PacketMath.h +1060 -0
  164. data/vendor/Eigen/src/Core/functors/AssignmentFunctors.h +177 -0
  165. data/vendor/Eigen/src/Core/functors/BinaryFunctors.h +541 -0
  166. data/vendor/Eigen/src/Core/functors/NullaryFunctors.h +189 -0
  167. data/vendor/Eigen/src/Core/functors/StlFunctors.h +166 -0
  168. data/vendor/Eigen/src/Core/functors/TernaryFunctors.h +25 -0
  169. data/vendor/Eigen/src/Core/functors/UnaryFunctors.h +1131 -0
  170. data/vendor/Eigen/src/Core/products/GeneralBlockPanelKernel.h +2645 -0
  171. data/vendor/Eigen/src/Core/products/GeneralMatrixMatrix.h +517 -0
  172. data/vendor/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +317 -0
  173. data/vendor/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +145 -0
  174. data/vendor/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +124 -0
  175. data/vendor/Eigen/src/Core/products/GeneralMatrixVector.h +518 -0
  176. data/vendor/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +136 -0
  177. data/vendor/Eigen/src/Core/products/Parallelizer.h +180 -0
  178. data/vendor/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +544 -0
  179. data/vendor/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +295 -0
  180. data/vendor/Eigen/src/Core/products/SelfadjointMatrixVector.h +262 -0
  181. data/vendor/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +118 -0
  182. data/vendor/Eigen/src/Core/products/SelfadjointProduct.h +133 -0
  183. data/vendor/Eigen/src/Core/products/SelfadjointRank2Update.h +94 -0
  184. data/vendor/Eigen/src/Core/products/TriangularMatrixMatrix.h +472 -0
  185. data/vendor/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +317 -0
  186. data/vendor/Eigen/src/Core/products/TriangularMatrixVector.h +350 -0
  187. data/vendor/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +255 -0
  188. data/vendor/Eigen/src/Core/products/TriangularSolverMatrix.h +337 -0
  189. data/vendor/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +167 -0
  190. data/vendor/Eigen/src/Core/products/TriangularSolverVector.h +148 -0
  191. data/vendor/Eigen/src/Core/util/BlasUtil.h +583 -0
  192. data/vendor/Eigen/src/Core/util/ConfigureVectorization.h +512 -0
  193. data/vendor/Eigen/src/Core/util/Constants.h +563 -0
  194. data/vendor/Eigen/src/Core/util/DisableStupidWarnings.h +106 -0
  195. data/vendor/Eigen/src/Core/util/ForwardDeclarations.h +322 -0
  196. data/vendor/Eigen/src/Core/util/IndexedViewHelper.h +186 -0
  197. data/vendor/Eigen/src/Core/util/IntegralConstant.h +272 -0
  198. data/vendor/Eigen/src/Core/util/MKL_support.h +137 -0
  199. data/vendor/Eigen/src/Core/util/Macros.h +1464 -0
  200. data/vendor/Eigen/src/Core/util/Memory.h +1163 -0
  201. data/vendor/Eigen/src/Core/util/Meta.h +812 -0
  202. data/vendor/Eigen/src/Core/util/NonMPL2.h +3 -0
  203. data/vendor/Eigen/src/Core/util/ReenableStupidWarnings.h +31 -0
  204. data/vendor/Eigen/src/Core/util/ReshapedHelper.h +51 -0
  205. data/vendor/Eigen/src/Core/util/StaticAssert.h +221 -0
  206. data/vendor/Eigen/src/Core/util/SymbolicIndex.h +293 -0
  207. data/vendor/Eigen/src/Core/util/XprHelper.h +856 -0
  208. data/vendor/Eigen/src/Eigenvalues/ComplexEigenSolver.h +346 -0
  209. data/vendor/Eigen/src/Eigenvalues/ComplexSchur.h +462 -0
  210. data/vendor/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +91 -0
  211. data/vendor/Eigen/src/Eigenvalues/EigenSolver.h +622 -0
  212. data/vendor/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +418 -0
  213. data/vendor/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +226 -0
  214. data/vendor/Eigen/src/Eigenvalues/HessenbergDecomposition.h +374 -0
  215. data/vendor/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +158 -0
  216. data/vendor/Eigen/src/Eigenvalues/RealQZ.h +657 -0
  217. data/vendor/Eigen/src/Eigenvalues/RealSchur.h +558 -0
  218. data/vendor/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +77 -0
  219. data/vendor/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +904 -0
  220. data/vendor/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +87 -0
  221. data/vendor/Eigen/src/Eigenvalues/Tridiagonalization.h +561 -0
  222. data/vendor/Eigen/src/Geometry/AlignedBox.h +486 -0
  223. data/vendor/Eigen/src/Geometry/AngleAxis.h +247 -0
  224. data/vendor/Eigen/src/Geometry/EulerAngles.h +114 -0
  225. data/vendor/Eigen/src/Geometry/Homogeneous.h +501 -0
  226. data/vendor/Eigen/src/Geometry/Hyperplane.h +282 -0
  227. data/vendor/Eigen/src/Geometry/OrthoMethods.h +235 -0
  228. data/vendor/Eigen/src/Geometry/ParametrizedLine.h +232 -0
  229. data/vendor/Eigen/src/Geometry/Quaternion.h +870 -0
  230. data/vendor/Eigen/src/Geometry/Rotation2D.h +199 -0
  231. data/vendor/Eigen/src/Geometry/RotationBase.h +206 -0
  232. data/vendor/Eigen/src/Geometry/Scaling.h +188 -0
  233. data/vendor/Eigen/src/Geometry/Transform.h +1563 -0
  234. data/vendor/Eigen/src/Geometry/Translation.h +202 -0
  235. data/vendor/Eigen/src/Geometry/Umeyama.h +166 -0
  236. data/vendor/Eigen/src/Geometry/arch/Geometry_SIMD.h +168 -0
  237. data/vendor/Eigen/src/Householder/BlockHouseholder.h +110 -0
  238. data/vendor/Eigen/src/Householder/Householder.h +176 -0
  239. data/vendor/Eigen/src/Householder/HouseholderSequence.h +545 -0
  240. data/vendor/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +226 -0
  241. data/vendor/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +212 -0
  242. data/vendor/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +229 -0
  243. data/vendor/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +394 -0
  244. data/vendor/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +453 -0
  245. data/vendor/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +444 -0
  246. data/vendor/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +198 -0
  247. data/vendor/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +117 -0
  248. data/vendor/Eigen/src/Jacobi/Jacobi.h +483 -0
  249. data/vendor/Eigen/src/KLUSupport/KLUSupport.h +358 -0
  250. data/vendor/Eigen/src/LU/Determinant.h +117 -0
  251. data/vendor/Eigen/src/LU/FullPivLU.h +877 -0
  252. data/vendor/Eigen/src/LU/InverseImpl.h +432 -0
  253. data/vendor/Eigen/src/LU/PartialPivLU.h +624 -0
  254. data/vendor/Eigen/src/LU/PartialPivLU_LAPACKE.h +83 -0
  255. data/vendor/Eigen/src/LU/arch/InverseSize4.h +351 -0
  256. data/vendor/Eigen/src/MetisSupport/MetisSupport.h +137 -0
  257. data/vendor/Eigen/src/OrderingMethods/Amd.h +435 -0
  258. data/vendor/Eigen/src/OrderingMethods/Eigen_Colamd.h +1863 -0
  259. data/vendor/Eigen/src/OrderingMethods/Ordering.h +153 -0
  260. data/vendor/Eigen/src/PaStiXSupport/PaStiXSupport.h +678 -0
  261. data/vendor/Eigen/src/PardisoSupport/PardisoSupport.h +545 -0
  262. data/vendor/Eigen/src/QR/ColPivHouseholderQR.h +674 -0
  263. data/vendor/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +97 -0
  264. data/vendor/Eigen/src/QR/CompleteOrthogonalDecomposition.h +635 -0
  265. data/vendor/Eigen/src/QR/FullPivHouseholderQR.h +713 -0
  266. data/vendor/Eigen/src/QR/HouseholderQR.h +434 -0
  267. data/vendor/Eigen/src/QR/HouseholderQR_LAPACKE.h +68 -0
  268. data/vendor/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +335 -0
  269. data/vendor/Eigen/src/SVD/BDCSVD.h +1366 -0
  270. data/vendor/Eigen/src/SVD/JacobiSVD.h +812 -0
  271. data/vendor/Eigen/src/SVD/JacobiSVD_LAPACKE.h +91 -0
  272. data/vendor/Eigen/src/SVD/SVDBase.h +376 -0
  273. data/vendor/Eigen/src/SVD/UpperBidiagonalization.h +414 -0
  274. data/vendor/Eigen/src/SparseCholesky/SimplicialCholesky.h +697 -0
  275. data/vendor/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +174 -0
  276. data/vendor/Eigen/src/SparseCore/AmbiVector.h +378 -0
  277. data/vendor/Eigen/src/SparseCore/CompressedStorage.h +274 -0
  278. data/vendor/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +352 -0
  279. data/vendor/Eigen/src/SparseCore/MappedSparseMatrix.h +67 -0
  280. data/vendor/Eigen/src/SparseCore/SparseAssign.h +270 -0
  281. data/vendor/Eigen/src/SparseCore/SparseBlock.h +571 -0
  282. data/vendor/Eigen/src/SparseCore/SparseColEtree.h +206 -0
  283. data/vendor/Eigen/src/SparseCore/SparseCompressedBase.h +370 -0
  284. data/vendor/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +722 -0
  285. data/vendor/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +150 -0
  286. data/vendor/Eigen/src/SparseCore/SparseDenseProduct.h +342 -0
  287. data/vendor/Eigen/src/SparseCore/SparseDiagonalProduct.h +138 -0
  288. data/vendor/Eigen/src/SparseCore/SparseDot.h +98 -0
  289. data/vendor/Eigen/src/SparseCore/SparseFuzzy.h +29 -0
  290. data/vendor/Eigen/src/SparseCore/SparseMap.h +305 -0
  291. data/vendor/Eigen/src/SparseCore/SparseMatrix.h +1518 -0
  292. data/vendor/Eigen/src/SparseCore/SparseMatrixBase.h +398 -0
  293. data/vendor/Eigen/src/SparseCore/SparsePermutation.h +178 -0
  294. data/vendor/Eigen/src/SparseCore/SparseProduct.h +181 -0
  295. data/vendor/Eigen/src/SparseCore/SparseRedux.h +49 -0
  296. data/vendor/Eigen/src/SparseCore/SparseRef.h +397 -0
  297. data/vendor/Eigen/src/SparseCore/SparseSelfAdjointView.h +659 -0
  298. data/vendor/Eigen/src/SparseCore/SparseSolverBase.h +124 -0
  299. data/vendor/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +198 -0
  300. data/vendor/Eigen/src/SparseCore/SparseTranspose.h +92 -0
  301. data/vendor/Eigen/src/SparseCore/SparseTriangularView.h +189 -0
  302. data/vendor/Eigen/src/SparseCore/SparseUtil.h +186 -0
  303. data/vendor/Eigen/src/SparseCore/SparseVector.h +478 -0
  304. data/vendor/Eigen/src/SparseCore/SparseView.h +254 -0
  305. data/vendor/Eigen/src/SparseCore/TriangularSolver.h +315 -0
  306. data/vendor/Eigen/src/SparseLU/SparseLU.h +923 -0
  307. data/vendor/Eigen/src/SparseLU/SparseLUImpl.h +66 -0
  308. data/vendor/Eigen/src/SparseLU/SparseLU_Memory.h +226 -0
  309. data/vendor/Eigen/src/SparseLU/SparseLU_Structs.h +110 -0
  310. data/vendor/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +375 -0
  311. data/vendor/Eigen/src/SparseLU/SparseLU_Utils.h +80 -0
  312. data/vendor/Eigen/src/SparseLU/SparseLU_column_bmod.h +181 -0
  313. data/vendor/Eigen/src/SparseLU/SparseLU_column_dfs.h +179 -0
  314. data/vendor/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +107 -0
  315. data/vendor/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +280 -0
  316. data/vendor/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +126 -0
  317. data/vendor/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +130 -0
  318. data/vendor/Eigen/src/SparseLU/SparseLU_panel_bmod.h +223 -0
  319. data/vendor/Eigen/src/SparseLU/SparseLU_panel_dfs.h +258 -0
  320. data/vendor/Eigen/src/SparseLU/SparseLU_pivotL.h +137 -0
  321. data/vendor/Eigen/src/SparseLU/SparseLU_pruneL.h +136 -0
  322. data/vendor/Eigen/src/SparseLU/SparseLU_relax_snode.h +83 -0
  323. data/vendor/Eigen/src/SparseQR/SparseQR.h +758 -0
  324. data/vendor/Eigen/src/StlSupport/StdDeque.h +116 -0
  325. data/vendor/Eigen/src/StlSupport/StdList.h +106 -0
  326. data/vendor/Eigen/src/StlSupport/StdVector.h +131 -0
  327. data/vendor/Eigen/src/StlSupport/details.h +84 -0
  328. data/vendor/Eigen/src/SuperLUSupport/SuperLUSupport.h +1025 -0
  329. data/vendor/Eigen/src/UmfPackSupport/UmfPackSupport.h +642 -0
  330. data/vendor/Eigen/src/misc/Image.h +82 -0
  331. data/vendor/Eigen/src/misc/Kernel.h +79 -0
  332. data/vendor/Eigen/src/misc/RealSvd2x2.h +55 -0
  333. data/vendor/Eigen/src/misc/blas.h +440 -0
  334. data/vendor/Eigen/src/misc/lapack.h +152 -0
  335. data/vendor/Eigen/src/misc/lapacke.h +16292 -0
  336. data/vendor/Eigen/src/misc/lapacke_mangling.h +17 -0
  337. data/vendor/Eigen/src/plugins/ArrayCwiseBinaryOps.h +358 -0
  338. data/vendor/Eigen/src/plugins/ArrayCwiseUnaryOps.h +696 -0
  339. data/vendor/Eigen/src/plugins/BlockMethods.h +1442 -0
  340. data/vendor/Eigen/src/plugins/CommonCwiseBinaryOps.h +115 -0
  341. data/vendor/Eigen/src/plugins/CommonCwiseUnaryOps.h +177 -0
  342. data/vendor/Eigen/src/plugins/IndexedViewMethods.h +262 -0
  343. data/vendor/Eigen/src/plugins/MatrixCwiseBinaryOps.h +152 -0
  344. data/vendor/Eigen/src/plugins/MatrixCwiseUnaryOps.h +95 -0
  345. data/vendor/Eigen/src/plugins/ReshapedMethods.h +149 -0
  346. data/vendor/aarand/aarand.hpp +114 -0
  347. data/vendor/annoy/annoylib.h +1495 -0
  348. data/vendor/annoy/kissrandom.h +120 -0
  349. data/vendor/annoy/mman.h +242 -0
  350. data/vendor/hnswlib/bruteforce.h +152 -0
  351. data/vendor/hnswlib/hnswalg.h +1192 -0
  352. data/vendor/hnswlib/hnswlib.h +108 -0
  353. data/vendor/hnswlib/space_ip.h +282 -0
  354. data/vendor/hnswlib/space_l2.h +281 -0
  355. data/vendor/hnswlib/visited_list_pool.h +79 -0
  356. data/vendor/irlba/irlba.hpp +575 -0
  357. data/vendor/irlba/lanczos.hpp +212 -0
  358. data/vendor/irlba/parallel.hpp +474 -0
  359. data/vendor/irlba/utils.hpp +224 -0
  360. data/vendor/irlba/wrappers.hpp +228 -0
  361. data/vendor/kmeans/Base.hpp +75 -0
  362. data/vendor/kmeans/Details.hpp +79 -0
  363. data/vendor/kmeans/HartiganWong.hpp +492 -0
  364. data/vendor/kmeans/InitializeKmeansPP.hpp +144 -0
  365. data/vendor/kmeans/InitializeNone.hpp +44 -0
  366. data/vendor/kmeans/InitializePCAPartition.hpp +309 -0
  367. data/vendor/kmeans/InitializeRandom.hpp +91 -0
  368. data/vendor/kmeans/Kmeans.hpp +161 -0
  369. data/vendor/kmeans/Lloyd.hpp +134 -0
  370. data/vendor/kmeans/MiniBatch.hpp +269 -0
  371. data/vendor/kmeans/QuickSearch.hpp +179 -0
  372. data/vendor/kmeans/compute_centroids.hpp +32 -0
  373. data/vendor/kmeans/compute_wcss.hpp +27 -0
  374. data/vendor/kmeans/is_edge_case.hpp +42 -0
  375. data/vendor/kmeans/random.hpp +55 -0
  376. data/vendor/knncolle/Annoy/Annoy.hpp +193 -0
  377. data/vendor/knncolle/BruteForce/BruteForce.hpp +120 -0
  378. data/vendor/knncolle/Hnsw/Hnsw.hpp +225 -0
  379. data/vendor/knncolle/Kmknn/Kmknn.hpp +286 -0
  380. data/vendor/knncolle/VpTree/VpTree.hpp +256 -0
  381. data/vendor/knncolle/knncolle.hpp +34 -0
  382. data/vendor/knncolle/utils/Base.hpp +100 -0
  383. data/vendor/knncolle/utils/NeighborQueue.hpp +94 -0
  384. data/vendor/knncolle/utils/distances.hpp +98 -0
  385. data/vendor/knncolle/utils/find_nearest_neighbors.hpp +112 -0
  386. data/vendor/powerit/PowerIterations.hpp +157 -0
  387. data/vendor/umappp/NeighborList.hpp +37 -0
  388. data/vendor/umappp/Umap.hpp +662 -0
  389. data/vendor/umappp/combine_neighbor_sets.hpp +95 -0
  390. data/vendor/umappp/find_ab.hpp +157 -0
  391. data/vendor/umappp/neighbor_similarities.hpp +136 -0
  392. data/vendor/umappp/optimize_layout.hpp +285 -0
  393. data/vendor/umappp/spectral_init.hpp +181 -0
  394. data/vendor/umappp/umappp.hpp +13 -0
  395. metadata +465 -0
@@ -0,0 +1,697 @@
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
+ namespace internal {
21
+ template<typename CholMatrixType, typename InputMatrixType>
22
+ struct simplicial_cholesky_grab_input {
23
+ typedef CholMatrixType const * ConstCholMatrixPtr;
24
+ static void run(const InputMatrixType& input, ConstCholMatrixPtr &pmat, CholMatrixType &tmp)
25
+ {
26
+ tmp = input;
27
+ pmat = &tmp;
28
+ }
29
+ };
30
+
31
+ template<typename MatrixType>
32
+ struct simplicial_cholesky_grab_input<MatrixType,MatrixType> {
33
+ typedef MatrixType const * ConstMatrixPtr;
34
+ static void run(const MatrixType& input, ConstMatrixPtr &pmat, MatrixType &/*tmp*/)
35
+ {
36
+ pmat = &input;
37
+ }
38
+ };
39
+ } // end namespace internal
40
+
41
+ /** \ingroup SparseCholesky_Module
42
+ * \brief A base class for direct sparse Cholesky factorizations
43
+ *
44
+ * This is a base class for LL^T and LDL^T Cholesky factorizations of sparse matrices that are
45
+ * selfadjoint and positive definite. These factorizations allow for solving A.X = B where
46
+ * X and B can be either dense or sparse.
47
+ *
48
+ * In order to reduce the fill-in, a symmetric permutation P is applied prior to the factorization
49
+ * such that the factorized matrix is P A P^-1.
50
+ *
51
+ * \tparam Derived the type of the derived class, that is the actual factorization type.
52
+ *
53
+ */
54
+ template<typename Derived>
55
+ class SimplicialCholeskyBase : public SparseSolverBase<Derived>
56
+ {
57
+ typedef SparseSolverBase<Derived> Base;
58
+ using Base::m_isInitialized;
59
+
60
+ public:
61
+ typedef typename internal::traits<Derived>::MatrixType MatrixType;
62
+ typedef typename internal::traits<Derived>::OrderingType OrderingType;
63
+ enum { UpLo = internal::traits<Derived>::UpLo };
64
+ typedef typename MatrixType::Scalar Scalar;
65
+ typedef typename MatrixType::RealScalar RealScalar;
66
+ typedef typename MatrixType::StorageIndex StorageIndex;
67
+ typedef SparseMatrix<Scalar,ColMajor,StorageIndex> CholMatrixType;
68
+ typedef CholMatrixType const * ConstCholMatrixPtr;
69
+ typedef Matrix<Scalar,Dynamic,1> VectorType;
70
+ typedef Matrix<StorageIndex,Dynamic,1> VectorI;
71
+
72
+ enum {
73
+ ColsAtCompileTime = MatrixType::ColsAtCompileTime,
74
+ MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime
75
+ };
76
+
77
+ public:
78
+
79
+ using Base::derived;
80
+
81
+ /** Default constructor */
82
+ SimplicialCholeskyBase()
83
+ : m_info(Success),
84
+ m_factorizationIsOk(false),
85
+ m_analysisIsOk(false),
86
+ m_shiftOffset(0),
87
+ m_shiftScale(1)
88
+ {}
89
+
90
+ explicit SimplicialCholeskyBase(const MatrixType& matrix)
91
+ : m_info(Success),
92
+ m_factorizationIsOk(false),
93
+ m_analysisIsOk(false),
94
+ m_shiftOffset(0),
95
+ m_shiftScale(1)
96
+ {
97
+ derived().compute(matrix);
98
+ }
99
+
100
+ ~SimplicialCholeskyBase()
101
+ {
102
+ }
103
+
104
+ Derived& derived() { return *static_cast<Derived*>(this); }
105
+ const Derived& derived() const { return *static_cast<const Derived*>(this); }
106
+
107
+ inline Index cols() const { return m_matrix.cols(); }
108
+ inline Index rows() const { return m_matrix.rows(); }
109
+
110
+ /** \brief Reports whether previous computation was successful.
111
+ *
112
+ * \returns \c Success if computation was successful,
113
+ * \c NumericalIssue if the matrix.appears to be negative.
114
+ */
115
+ ComputationInfo info() const
116
+ {
117
+ eigen_assert(m_isInitialized && "Decomposition is not initialized.");
118
+ return m_info;
119
+ }
120
+
121
+ /** \returns the permutation P
122
+ * \sa permutationPinv() */
123
+ const PermutationMatrix<Dynamic,Dynamic,StorageIndex>& permutationP() const
124
+ { return m_P; }
125
+
126
+ /** \returns the inverse P^-1 of the permutation P
127
+ * \sa permutationP() */
128
+ const PermutationMatrix<Dynamic,Dynamic,StorageIndex>& permutationPinv() const
129
+ { return m_Pinv; }
130
+
131
+ /** Sets the shift parameters that will be used to adjust the diagonal coefficients during the numerical factorization.
132
+ *
133
+ * During the numerical factorization, the diagonal coefficients are transformed by the following linear model:\n
134
+ * \c d_ii = \a offset + \a scale * \c d_ii
135
+ *
136
+ * The default is the identity transformation with \a offset=0, and \a scale=1.
137
+ *
138
+ * \returns a reference to \c *this.
139
+ */
140
+ Derived& setShift(const RealScalar& offset, const RealScalar& scale = 1)
141
+ {
142
+ m_shiftOffset = offset;
143
+ m_shiftScale = scale;
144
+ return derived();
145
+ }
146
+
147
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
148
+ /** \internal */
149
+ template<typename Stream>
150
+ void dumpMemory(Stream& s)
151
+ {
152
+ int total = 0;
153
+ s << " L: " << ((total+=(m_matrix.cols()+1) * sizeof(int) + m_matrix.nonZeros()*(sizeof(int)+sizeof(Scalar))) >> 20) << "Mb" << "\n";
154
+ s << " diag: " << ((total+=m_diag.size() * sizeof(Scalar)) >> 20) << "Mb" << "\n";
155
+ s << " tree: " << ((total+=m_parent.size() * sizeof(int)) >> 20) << "Mb" << "\n";
156
+ s << " nonzeros: " << ((total+=m_nonZerosPerCol.size() * sizeof(int)) >> 20) << "Mb" << "\n";
157
+ s << " perm: " << ((total+=m_P.size() * sizeof(int)) >> 20) << "Mb" << "\n";
158
+ s << " perm^-1: " << ((total+=m_Pinv.size() * sizeof(int)) >> 20) << "Mb" << "\n";
159
+ s << " TOTAL: " << (total>> 20) << "Mb" << "\n";
160
+ }
161
+
162
+ /** \internal */
163
+ template<typename Rhs,typename Dest>
164
+ void _solve_impl(const MatrixBase<Rhs> &b, MatrixBase<Dest> &dest) const
165
+ {
166
+ eigen_assert(m_factorizationIsOk && "The decomposition is not in a valid state for solving, you must first call either compute() or symbolic()/numeric()");
167
+ eigen_assert(m_matrix.rows()==b.rows());
168
+
169
+ if(m_info!=Success)
170
+ return;
171
+
172
+ if(m_P.size()>0)
173
+ dest = m_P * b;
174
+ else
175
+ dest = b;
176
+
177
+ if(m_matrix.nonZeros()>0) // otherwise L==I
178
+ derived().matrixL().solveInPlace(dest);
179
+
180
+ if(m_diag.size()>0)
181
+ dest = m_diag.asDiagonal().inverse() * dest;
182
+
183
+ if (m_matrix.nonZeros()>0) // otherwise U==I
184
+ derived().matrixU().solveInPlace(dest);
185
+
186
+ if(m_P.size()>0)
187
+ dest = m_Pinv * dest;
188
+ }
189
+
190
+ template<typename Rhs,typename Dest>
191
+ void _solve_impl(const SparseMatrixBase<Rhs> &b, SparseMatrixBase<Dest> &dest) const
192
+ {
193
+ internal::solve_sparse_through_dense_panels(derived(), b, dest);
194
+ }
195
+
196
+ #endif // EIGEN_PARSED_BY_DOXYGEN
197
+
198
+ protected:
199
+
200
+ /** Computes the sparse Cholesky decomposition of \a matrix */
201
+ template<bool DoLDLT>
202
+ void compute(const MatrixType& matrix)
203
+ {
204
+ eigen_assert(matrix.rows()==matrix.cols());
205
+ Index size = matrix.cols();
206
+ CholMatrixType tmp(size,size);
207
+ ConstCholMatrixPtr pmat;
208
+ ordering(matrix, pmat, tmp);
209
+ analyzePattern_preordered(*pmat, DoLDLT);
210
+ factorize_preordered<DoLDLT>(*pmat);
211
+ }
212
+
213
+ template<bool DoLDLT>
214
+ void factorize(const MatrixType& a)
215
+ {
216
+ eigen_assert(a.rows()==a.cols());
217
+ Index size = a.cols();
218
+ CholMatrixType tmp(size,size);
219
+ ConstCholMatrixPtr pmat;
220
+
221
+ if(m_P.size() == 0 && (int(UpLo) & int(Upper)) == Upper)
222
+ {
223
+ // If there is no ordering, try to directly use the input matrix without any copy
224
+ internal::simplicial_cholesky_grab_input<CholMatrixType,MatrixType>::run(a, pmat, tmp);
225
+ }
226
+ else
227
+ {
228
+ tmp.template selfadjointView<Upper>() = a.template selfadjointView<UpLo>().twistedBy(m_P);
229
+ pmat = &tmp;
230
+ }
231
+
232
+ factorize_preordered<DoLDLT>(*pmat);
233
+ }
234
+
235
+ template<bool DoLDLT>
236
+ void factorize_preordered(const CholMatrixType& a);
237
+
238
+ void analyzePattern(const MatrixType& a, bool doLDLT)
239
+ {
240
+ eigen_assert(a.rows()==a.cols());
241
+ Index size = a.cols();
242
+ CholMatrixType tmp(size,size);
243
+ ConstCholMatrixPtr pmat;
244
+ ordering(a, pmat, tmp);
245
+ analyzePattern_preordered(*pmat,doLDLT);
246
+ }
247
+ void analyzePattern_preordered(const CholMatrixType& a, bool doLDLT);
248
+
249
+ void ordering(const MatrixType& a, ConstCholMatrixPtr &pmat, CholMatrixType& ap);
250
+
251
+ /** keeps off-diagonal entries; drops diagonal entries */
252
+ struct keep_diag {
253
+ inline bool operator() (const Index& row, const Index& col, const Scalar&) const
254
+ {
255
+ return row!=col;
256
+ }
257
+ };
258
+
259
+ mutable ComputationInfo m_info;
260
+ bool m_factorizationIsOk;
261
+ bool m_analysisIsOk;
262
+
263
+ CholMatrixType m_matrix;
264
+ VectorType m_diag; // the diagonal coefficients (LDLT mode)
265
+ VectorI m_parent; // elimination tree
266
+ VectorI m_nonZerosPerCol;
267
+ PermutationMatrix<Dynamic,Dynamic,StorageIndex> m_P; // the permutation
268
+ PermutationMatrix<Dynamic,Dynamic,StorageIndex> m_Pinv; // the inverse permutation
269
+
270
+ RealScalar m_shiftOffset;
271
+ RealScalar m_shiftScale;
272
+ };
273
+
274
+ template<typename _MatrixType, int _UpLo = Lower, typename _Ordering = AMDOrdering<typename _MatrixType::StorageIndex> > class SimplicialLLT;
275
+ template<typename _MatrixType, int _UpLo = Lower, typename _Ordering = AMDOrdering<typename _MatrixType::StorageIndex> > class SimplicialLDLT;
276
+ template<typename _MatrixType, int _UpLo = Lower, typename _Ordering = AMDOrdering<typename _MatrixType::StorageIndex> > class SimplicialCholesky;
277
+
278
+ namespace internal {
279
+
280
+ template<typename _MatrixType, int _UpLo, typename _Ordering> struct traits<SimplicialLLT<_MatrixType,_UpLo,_Ordering> >
281
+ {
282
+ typedef _MatrixType MatrixType;
283
+ typedef _Ordering OrderingType;
284
+ enum { UpLo = _UpLo };
285
+ typedef typename MatrixType::Scalar Scalar;
286
+ typedef typename MatrixType::StorageIndex StorageIndex;
287
+ typedef SparseMatrix<Scalar, ColMajor, StorageIndex> CholMatrixType;
288
+ typedef TriangularView<const CholMatrixType, Eigen::Lower> MatrixL;
289
+ typedef TriangularView<const typename CholMatrixType::AdjointReturnType, Eigen::Upper> MatrixU;
290
+ static inline MatrixL getL(const CholMatrixType& m) { return MatrixL(m); }
291
+ static inline MatrixU getU(const CholMatrixType& m) { return MatrixU(m.adjoint()); }
292
+ };
293
+
294
+ template<typename _MatrixType,int _UpLo, typename _Ordering> struct traits<SimplicialLDLT<_MatrixType,_UpLo,_Ordering> >
295
+ {
296
+ typedef _MatrixType MatrixType;
297
+ typedef _Ordering OrderingType;
298
+ enum { UpLo = _UpLo };
299
+ typedef typename MatrixType::Scalar Scalar;
300
+ typedef typename MatrixType::StorageIndex StorageIndex;
301
+ typedef SparseMatrix<Scalar, ColMajor, StorageIndex> CholMatrixType;
302
+ typedef TriangularView<const CholMatrixType, Eigen::UnitLower> MatrixL;
303
+ typedef TriangularView<const typename CholMatrixType::AdjointReturnType, Eigen::UnitUpper> MatrixU;
304
+ static inline MatrixL getL(const CholMatrixType& m) { return MatrixL(m); }
305
+ static inline MatrixU getU(const CholMatrixType& m) { return MatrixU(m.adjoint()); }
306
+ };
307
+
308
+ template<typename _MatrixType, int _UpLo, typename _Ordering> struct traits<SimplicialCholesky<_MatrixType,_UpLo,_Ordering> >
309
+ {
310
+ typedef _MatrixType MatrixType;
311
+ typedef _Ordering OrderingType;
312
+ enum { UpLo = _UpLo };
313
+ };
314
+
315
+ }
316
+
317
+ /** \ingroup SparseCholesky_Module
318
+ * \class SimplicialLLT
319
+ * \brief A direct sparse LLT Cholesky factorizations
320
+ *
321
+ * This class provides a LL^T Cholesky factorizations of sparse matrices that are
322
+ * selfadjoint and positive definite. The factorization allows for solving A.X = B where
323
+ * X and B can be either dense or sparse.
324
+ *
325
+ * In order to reduce the fill-in, a symmetric permutation P is applied prior to the factorization
326
+ * such that the factorized matrix is P A P^-1.
327
+ *
328
+ * \tparam _MatrixType the type of the sparse matrix A, it must be a SparseMatrix<>
329
+ * \tparam _UpLo the triangular part that will be used for the computations. It can be Lower
330
+ * or Upper. Default is Lower.
331
+ * \tparam _Ordering The ordering method to use, either AMDOrdering<> or NaturalOrdering<>. Default is AMDOrdering<>
332
+ *
333
+ * \implsparsesolverconcept
334
+ *
335
+ * \sa class SimplicialLDLT, class AMDOrdering, class NaturalOrdering
336
+ */
337
+ template<typename _MatrixType, int _UpLo, typename _Ordering>
338
+ class SimplicialLLT : public SimplicialCholeskyBase<SimplicialLLT<_MatrixType,_UpLo,_Ordering> >
339
+ {
340
+ public:
341
+ typedef _MatrixType MatrixType;
342
+ enum { UpLo = _UpLo };
343
+ typedef SimplicialCholeskyBase<SimplicialLLT> Base;
344
+ typedef typename MatrixType::Scalar Scalar;
345
+ typedef typename MatrixType::RealScalar RealScalar;
346
+ typedef typename MatrixType::StorageIndex StorageIndex;
347
+ typedef SparseMatrix<Scalar,ColMajor,Index> CholMatrixType;
348
+ typedef Matrix<Scalar,Dynamic,1> VectorType;
349
+ typedef internal::traits<SimplicialLLT> Traits;
350
+ typedef typename Traits::MatrixL MatrixL;
351
+ typedef typename Traits::MatrixU MatrixU;
352
+ public:
353
+ /** Default constructor */
354
+ SimplicialLLT() : Base() {}
355
+ /** Constructs and performs the LLT factorization of \a matrix */
356
+ explicit SimplicialLLT(const MatrixType& matrix)
357
+ : Base(matrix) {}
358
+
359
+ /** \returns an expression of the factor L */
360
+ inline const MatrixL matrixL() const {
361
+ eigen_assert(Base::m_factorizationIsOk && "Simplicial LLT not factorized");
362
+ return Traits::getL(Base::m_matrix);
363
+ }
364
+
365
+ /** \returns an expression of the factor U (= L^*) */
366
+ inline const MatrixU matrixU() const {
367
+ eigen_assert(Base::m_factorizationIsOk && "Simplicial LLT not factorized");
368
+ return Traits::getU(Base::m_matrix);
369
+ }
370
+
371
+ /** Computes the sparse Cholesky decomposition of \a matrix */
372
+ SimplicialLLT& compute(const MatrixType& matrix)
373
+ {
374
+ Base::template compute<false>(matrix);
375
+ return *this;
376
+ }
377
+
378
+ /** Performs a symbolic decomposition on the sparcity of \a matrix.
379
+ *
380
+ * This function is particularly useful when solving for several problems having the same structure.
381
+ *
382
+ * \sa factorize()
383
+ */
384
+ void analyzePattern(const MatrixType& a)
385
+ {
386
+ Base::analyzePattern(a, false);
387
+ }
388
+
389
+ /** Performs a numeric decomposition of \a matrix
390
+ *
391
+ * The given matrix must has the same sparcity than the matrix on which the symbolic decomposition has been performed.
392
+ *
393
+ * \sa analyzePattern()
394
+ */
395
+ void factorize(const MatrixType& a)
396
+ {
397
+ Base::template factorize<false>(a);
398
+ }
399
+
400
+ /** \returns the determinant of the underlying matrix from the current factorization */
401
+ Scalar determinant() const
402
+ {
403
+ Scalar detL = Base::m_matrix.diagonal().prod();
404
+ return numext::abs2(detL);
405
+ }
406
+ };
407
+
408
+ /** \ingroup SparseCholesky_Module
409
+ * \class SimplicialLDLT
410
+ * \brief A direct sparse LDLT Cholesky factorizations without square root.
411
+ *
412
+ * This class provides a LDL^T Cholesky factorizations without square root of sparse matrices that are
413
+ * selfadjoint and positive definite. The factorization allows for solving A.X = B where
414
+ * X and B can be either dense or sparse.
415
+ *
416
+ * In order to reduce the fill-in, a symmetric permutation P is applied prior to the factorization
417
+ * such that the factorized matrix is P A P^-1.
418
+ *
419
+ * \tparam _MatrixType the type of the sparse matrix A, it must be a SparseMatrix<>
420
+ * \tparam _UpLo the triangular part that will be used for the computations. It can be Lower
421
+ * or Upper. Default is Lower.
422
+ * \tparam _Ordering The ordering method to use, either AMDOrdering<> or NaturalOrdering<>. Default is AMDOrdering<>
423
+ *
424
+ * \implsparsesolverconcept
425
+ *
426
+ * \sa class SimplicialLLT, class AMDOrdering, class NaturalOrdering
427
+ */
428
+ template<typename _MatrixType, int _UpLo, typename _Ordering>
429
+ class SimplicialLDLT : public SimplicialCholeskyBase<SimplicialLDLT<_MatrixType,_UpLo,_Ordering> >
430
+ {
431
+ public:
432
+ typedef _MatrixType MatrixType;
433
+ enum { UpLo = _UpLo };
434
+ typedef SimplicialCholeskyBase<SimplicialLDLT> Base;
435
+ typedef typename MatrixType::Scalar Scalar;
436
+ typedef typename MatrixType::RealScalar RealScalar;
437
+ typedef typename MatrixType::StorageIndex StorageIndex;
438
+ typedef SparseMatrix<Scalar,ColMajor,StorageIndex> CholMatrixType;
439
+ typedef Matrix<Scalar,Dynamic,1> VectorType;
440
+ typedef internal::traits<SimplicialLDLT> Traits;
441
+ typedef typename Traits::MatrixL MatrixL;
442
+ typedef typename Traits::MatrixU MatrixU;
443
+ public:
444
+ /** Default constructor */
445
+ SimplicialLDLT() : Base() {}
446
+
447
+ /** Constructs and performs the LLT factorization of \a matrix */
448
+ explicit SimplicialLDLT(const MatrixType& matrix)
449
+ : Base(matrix) {}
450
+
451
+ /** \returns a vector expression of the diagonal D */
452
+ inline const VectorType vectorD() const {
453
+ eigen_assert(Base::m_factorizationIsOk && "Simplicial LDLT not factorized");
454
+ return Base::m_diag;
455
+ }
456
+ /** \returns an expression of the factor L */
457
+ inline const MatrixL matrixL() const {
458
+ eigen_assert(Base::m_factorizationIsOk && "Simplicial LDLT not factorized");
459
+ return Traits::getL(Base::m_matrix);
460
+ }
461
+
462
+ /** \returns an expression of the factor U (= L^*) */
463
+ inline const MatrixU matrixU() const {
464
+ eigen_assert(Base::m_factorizationIsOk && "Simplicial LDLT not factorized");
465
+ return Traits::getU(Base::m_matrix);
466
+ }
467
+
468
+ /** Computes the sparse Cholesky decomposition of \a matrix */
469
+ SimplicialLDLT& compute(const MatrixType& matrix)
470
+ {
471
+ Base::template compute<true>(matrix);
472
+ return *this;
473
+ }
474
+
475
+ /** Performs a symbolic decomposition on the sparcity of \a matrix.
476
+ *
477
+ * This function is particularly useful when solving for several problems having the same structure.
478
+ *
479
+ * \sa factorize()
480
+ */
481
+ void analyzePattern(const MatrixType& a)
482
+ {
483
+ Base::analyzePattern(a, true);
484
+ }
485
+
486
+ /** Performs a numeric decomposition of \a matrix
487
+ *
488
+ * The given matrix must has the same sparcity than the matrix on which the symbolic decomposition has been performed.
489
+ *
490
+ * \sa analyzePattern()
491
+ */
492
+ void factorize(const MatrixType& a)
493
+ {
494
+ Base::template factorize<true>(a);
495
+ }
496
+
497
+ /** \returns the determinant of the underlying matrix from the current factorization */
498
+ Scalar determinant() const
499
+ {
500
+ return Base::m_diag.prod();
501
+ }
502
+ };
503
+
504
+ /** \deprecated use SimplicialLDLT or class SimplicialLLT
505
+ * \ingroup SparseCholesky_Module
506
+ * \class SimplicialCholesky
507
+ *
508
+ * \sa class SimplicialLDLT, class SimplicialLLT
509
+ */
510
+ template<typename _MatrixType, int _UpLo, typename _Ordering>
511
+ class SimplicialCholesky : public SimplicialCholeskyBase<SimplicialCholesky<_MatrixType,_UpLo,_Ordering> >
512
+ {
513
+ public:
514
+ typedef _MatrixType MatrixType;
515
+ enum { UpLo = _UpLo };
516
+ typedef SimplicialCholeskyBase<SimplicialCholesky> Base;
517
+ typedef typename MatrixType::Scalar Scalar;
518
+ typedef typename MatrixType::RealScalar RealScalar;
519
+ typedef typename MatrixType::StorageIndex StorageIndex;
520
+ typedef SparseMatrix<Scalar,ColMajor,StorageIndex> CholMatrixType;
521
+ typedef Matrix<Scalar,Dynamic,1> VectorType;
522
+ typedef internal::traits<SimplicialCholesky> Traits;
523
+ typedef internal::traits<SimplicialLDLT<MatrixType,UpLo> > LDLTTraits;
524
+ typedef internal::traits<SimplicialLLT<MatrixType,UpLo> > LLTTraits;
525
+ public:
526
+ SimplicialCholesky() : Base(), m_LDLT(true) {}
527
+
528
+ explicit SimplicialCholesky(const MatrixType& matrix)
529
+ : Base(), m_LDLT(true)
530
+ {
531
+ compute(matrix);
532
+ }
533
+
534
+ SimplicialCholesky& setMode(SimplicialCholeskyMode mode)
535
+ {
536
+ switch(mode)
537
+ {
538
+ case SimplicialCholeskyLLT:
539
+ m_LDLT = false;
540
+ break;
541
+ case SimplicialCholeskyLDLT:
542
+ m_LDLT = true;
543
+ break;
544
+ default:
545
+ break;
546
+ }
547
+
548
+ return *this;
549
+ }
550
+
551
+ inline const VectorType vectorD() const {
552
+ eigen_assert(Base::m_factorizationIsOk && "Simplicial Cholesky not factorized");
553
+ return Base::m_diag;
554
+ }
555
+ inline const CholMatrixType rawMatrix() const {
556
+ eigen_assert(Base::m_factorizationIsOk && "Simplicial Cholesky not factorized");
557
+ return Base::m_matrix;
558
+ }
559
+
560
+ /** Computes the sparse Cholesky decomposition of \a matrix */
561
+ SimplicialCholesky& compute(const MatrixType& matrix)
562
+ {
563
+ if(m_LDLT)
564
+ Base::template compute<true>(matrix);
565
+ else
566
+ Base::template compute<false>(matrix);
567
+ return *this;
568
+ }
569
+
570
+ /** Performs a symbolic decomposition on the sparcity of \a matrix.
571
+ *
572
+ * This function is particularly useful when solving for several problems having the same structure.
573
+ *
574
+ * \sa factorize()
575
+ */
576
+ void analyzePattern(const MatrixType& a)
577
+ {
578
+ Base::analyzePattern(a, m_LDLT);
579
+ }
580
+
581
+ /** Performs a numeric decomposition of \a matrix
582
+ *
583
+ * The given matrix must has the same sparcity than the matrix on which the symbolic decomposition has been performed.
584
+ *
585
+ * \sa analyzePattern()
586
+ */
587
+ void factorize(const MatrixType& a)
588
+ {
589
+ if(m_LDLT)
590
+ Base::template factorize<true>(a);
591
+ else
592
+ Base::template factorize<false>(a);
593
+ }
594
+
595
+ /** \internal */
596
+ template<typename Rhs,typename Dest>
597
+ void _solve_impl(const MatrixBase<Rhs> &b, MatrixBase<Dest> &dest) const
598
+ {
599
+ eigen_assert(Base::m_factorizationIsOk && "The decomposition is not in a valid state for solving, you must first call either compute() or symbolic()/numeric()");
600
+ eigen_assert(Base::m_matrix.rows()==b.rows());
601
+
602
+ if(Base::m_info!=Success)
603
+ return;
604
+
605
+ if(Base::m_P.size()>0)
606
+ dest = Base::m_P * b;
607
+ else
608
+ dest = b;
609
+
610
+ if(Base::m_matrix.nonZeros()>0) // otherwise L==I
611
+ {
612
+ if(m_LDLT)
613
+ LDLTTraits::getL(Base::m_matrix).solveInPlace(dest);
614
+ else
615
+ LLTTraits::getL(Base::m_matrix).solveInPlace(dest);
616
+ }
617
+
618
+ if(Base::m_diag.size()>0)
619
+ dest = Base::m_diag.real().asDiagonal().inverse() * dest;
620
+
621
+ if (Base::m_matrix.nonZeros()>0) // otherwise I==I
622
+ {
623
+ if(m_LDLT)
624
+ LDLTTraits::getU(Base::m_matrix).solveInPlace(dest);
625
+ else
626
+ LLTTraits::getU(Base::m_matrix).solveInPlace(dest);
627
+ }
628
+
629
+ if(Base::m_P.size()>0)
630
+ dest = Base::m_Pinv * dest;
631
+ }
632
+
633
+ /** \internal */
634
+ template<typename Rhs,typename Dest>
635
+ void _solve_impl(const SparseMatrixBase<Rhs> &b, SparseMatrixBase<Dest> &dest) const
636
+ {
637
+ internal::solve_sparse_through_dense_panels(*this, b, dest);
638
+ }
639
+
640
+ Scalar determinant() const
641
+ {
642
+ if(m_LDLT)
643
+ {
644
+ return Base::m_diag.prod();
645
+ }
646
+ else
647
+ {
648
+ Scalar detL = Diagonal<const CholMatrixType>(Base::m_matrix).prod();
649
+ return numext::abs2(detL);
650
+ }
651
+ }
652
+
653
+ protected:
654
+ bool m_LDLT;
655
+ };
656
+
657
+ template<typename Derived>
658
+ void SimplicialCholeskyBase<Derived>::ordering(const MatrixType& a, ConstCholMatrixPtr &pmat, CholMatrixType& ap)
659
+ {
660
+ eigen_assert(a.rows()==a.cols());
661
+ const Index size = a.rows();
662
+ pmat = &ap;
663
+ // Note that ordering methods compute the inverse permutation
664
+ if(!internal::is_same<OrderingType,NaturalOrdering<Index> >::value)
665
+ {
666
+ {
667
+ CholMatrixType C;
668
+ C = a.template selfadjointView<UpLo>();
669
+
670
+ OrderingType ordering;
671
+ ordering(C,m_Pinv);
672
+ }
673
+
674
+ if(m_Pinv.size()>0) m_P = m_Pinv.inverse();
675
+ else m_P.resize(0);
676
+
677
+ ap.resize(size,size);
678
+ ap.template selfadjointView<Upper>() = a.template selfadjointView<UpLo>().twistedBy(m_P);
679
+ }
680
+ else
681
+ {
682
+ m_Pinv.resize(0);
683
+ m_P.resize(0);
684
+ if(int(UpLo)==int(Lower) || MatrixType::IsRowMajor)
685
+ {
686
+ // we have to transpose the lower part to to the upper one
687
+ ap.resize(size,size);
688
+ ap.template selfadjointView<Upper>() = a.template selfadjointView<UpLo>();
689
+ }
690
+ else
691
+ internal::simplicial_cholesky_grab_input<CholMatrixType,MatrixType>::run(a, pmat, ap);
692
+ }
693
+ }
694
+
695
+ } // end namespace Eigen
696
+
697
+ #endif // EIGEN_SIMPLICIAL_CHOLESKY_H