umappp 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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,120 @@
1
+ #ifndef ANNOY_KISSRANDOM_H
2
+ #define ANNOY_KISSRANDOM_H
3
+
4
+ #if defined(_MSC_VER) && _MSC_VER == 1500
5
+ typedef unsigned __int32 uint32_t;
6
+ typedef unsigned __int64 uint64_t;
7
+ #else
8
+ #include <stdint.h>
9
+ #endif
10
+
11
+ namespace Annoy {
12
+
13
+ // KISS = "keep it simple, stupid", but high quality random number generator
14
+ // http://www0.cs.ucl.ac.uk/staff/d.jones/GoodPracticeRNG.pdf -> "Use a good RNG and build it into your code"
15
+ // http://mathforum.org/kb/message.jspa?messageID=6627731
16
+ // https://de.wikipedia.org/wiki/KISS_(Zufallszahlengenerator)
17
+
18
+ // 32 bit KISS
19
+ struct Kiss32Random {
20
+ uint32_t x;
21
+ uint32_t y;
22
+ uint32_t z;
23
+ uint32_t c;
24
+
25
+ static const uint32_t default_seed = 123456789;
26
+ #if __cplusplus < 201103L
27
+ typedef uint32_t seed_type;
28
+ #endif
29
+
30
+ // seed must be != 0
31
+ Kiss32Random(uint32_t seed = default_seed) {
32
+ x = seed;
33
+ y = 362436000;
34
+ z = 521288629;
35
+ c = 7654321;
36
+ }
37
+
38
+ uint32_t kiss() {
39
+ // Linear congruence generator
40
+ x = 69069 * x + 12345;
41
+
42
+ // Xor shift
43
+ y ^= y << 13;
44
+ y ^= y >> 17;
45
+ y ^= y << 5;
46
+
47
+ // Multiply-with-carry
48
+ uint64_t t = 698769069ULL * z + c;
49
+ c = t >> 32;
50
+ z = (uint32_t) t;
51
+
52
+ return x + y + z;
53
+ }
54
+ inline int flip() {
55
+ // Draw random 0 or 1
56
+ return kiss() & 1;
57
+ }
58
+ inline size_t index(size_t n) {
59
+ // Draw random integer between 0 and n-1 where n is at most the number of data points you have
60
+ return kiss() % n;
61
+ }
62
+ inline void set_seed(uint32_t seed) {
63
+ x = seed;
64
+ }
65
+ };
66
+
67
+ // 64 bit KISS. Use this if you have more than about 2^24 data points ("big data" ;) )
68
+ struct Kiss64Random {
69
+ uint64_t x;
70
+ uint64_t y;
71
+ uint64_t z;
72
+ uint64_t c;
73
+
74
+ static const uint64_t default_seed = 1234567890987654321ULL;
75
+ #if __cplusplus < 201103L
76
+ typedef uint64_t seed_type;
77
+ #endif
78
+
79
+ // seed must be != 0
80
+ Kiss64Random(uint64_t seed = default_seed) {
81
+ x = seed;
82
+ y = 362436362436362436ULL;
83
+ z = 1066149217761810ULL;
84
+ c = 123456123456123456ULL;
85
+ }
86
+
87
+ uint64_t kiss() {
88
+ // Linear congruence generator
89
+ z = 6906969069LL*z+1234567;
90
+
91
+ // Xor shift
92
+ y ^= (y<<13);
93
+ y ^= (y>>17);
94
+ y ^= (y<<43);
95
+
96
+ // Multiply-with-carry (uint128_t t = (2^58 + 1) * x + c; c = t >> 64; x = (uint64_t) t)
97
+ uint64_t t = (x<<58)+c;
98
+ c = (x>>6);
99
+ x += t;
100
+ c += (x<t);
101
+
102
+ return x + y + z;
103
+ }
104
+ inline int flip() {
105
+ // Draw random 0 or 1
106
+ return kiss() & 1;
107
+ }
108
+ inline size_t index(size_t n) {
109
+ // Draw random integer between 0 and n-1 where n is at most the number of data points you have
110
+ return kiss() % n;
111
+ }
112
+ inline void set_seed(uint64_t seed) {
113
+ x = seed;
114
+ }
115
+ };
116
+
117
+ }
118
+
119
+ #endif
120
+ // vim: tabstop=2 shiftwidth=2
@@ -0,0 +1,242 @@
1
+
2
+ // This is from https://code.google.com/p/mman-win32/
3
+ //
4
+ // Licensed under MIT
5
+
6
+ #ifndef _MMAN_WIN32_H
7
+ #define _MMAN_WIN32_H
8
+
9
+ #ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later.
10
+ #define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target other versions of Windows.
11
+ #endif
12
+
13
+ #include <sys/types.h>
14
+ #include <windows.h>
15
+ #include <errno.h>
16
+ #include <io.h>
17
+
18
+ #define PROT_NONE 0
19
+ #define PROT_READ 1
20
+ #define PROT_WRITE 2
21
+ #define PROT_EXEC 4
22
+
23
+ #define MAP_FILE 0
24
+ #define MAP_SHARED 1
25
+ #define MAP_PRIVATE 2
26
+ #define MAP_TYPE 0xf
27
+ #define MAP_FIXED 0x10
28
+ #define MAP_ANONYMOUS 0x20
29
+ #define MAP_ANON MAP_ANONYMOUS
30
+
31
+ #define MAP_FAILED ((void *)-1)
32
+
33
+ /* Flags for msync. */
34
+ #define MS_ASYNC 1
35
+ #define MS_SYNC 2
36
+ #define MS_INVALIDATE 4
37
+
38
+ #ifndef FILE_MAP_EXECUTE
39
+ #define FILE_MAP_EXECUTE 0x0020
40
+ #endif
41
+
42
+ static int __map_mman_error(const DWORD err, const int deferr)
43
+ {
44
+ if (err == 0)
45
+ return 0;
46
+ //TODO: implement
47
+ return err;
48
+ }
49
+
50
+ static DWORD __map_mmap_prot_page(const int prot)
51
+ {
52
+ DWORD protect = 0;
53
+
54
+ if (prot == PROT_NONE)
55
+ return protect;
56
+
57
+ if ((prot & PROT_EXEC) != 0)
58
+ {
59
+ protect = ((prot & PROT_WRITE) != 0) ?
60
+ PAGE_EXECUTE_READWRITE : PAGE_EXECUTE_READ;
61
+ }
62
+ else
63
+ {
64
+ protect = ((prot & PROT_WRITE) != 0) ?
65
+ PAGE_READWRITE : PAGE_READONLY;
66
+ }
67
+
68
+ return protect;
69
+ }
70
+
71
+ static DWORD __map_mmap_prot_file(const int prot)
72
+ {
73
+ DWORD desiredAccess = 0;
74
+
75
+ if (prot == PROT_NONE)
76
+ return desiredAccess;
77
+
78
+ if ((prot & PROT_READ) != 0)
79
+ desiredAccess |= FILE_MAP_READ;
80
+ if ((prot & PROT_WRITE) != 0)
81
+ desiredAccess |= FILE_MAP_WRITE;
82
+ if ((prot & PROT_EXEC) != 0)
83
+ desiredAccess |= FILE_MAP_EXECUTE;
84
+
85
+ return desiredAccess;
86
+ }
87
+
88
+ inline void* mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off)
89
+ {
90
+ HANDLE fm, h;
91
+
92
+ void * map = MAP_FAILED;
93
+
94
+ #ifdef _MSC_VER
95
+ #pragma warning(push)
96
+ #pragma warning(disable: 4293)
97
+ #endif
98
+
99
+ const DWORD dwFileOffsetLow = (sizeof(off_t) <= sizeof(DWORD)) ?
100
+ (DWORD)off : (DWORD)(off & 0xFFFFFFFFL);
101
+ const DWORD dwFileOffsetHigh = (sizeof(off_t) <= sizeof(DWORD)) ?
102
+ (DWORD)0 : (DWORD)((off >> 32) & 0xFFFFFFFFL);
103
+ const DWORD protect = __map_mmap_prot_page(prot);
104
+ const DWORD desiredAccess = __map_mmap_prot_file(prot);
105
+
106
+ const off_t maxSize = off + (off_t)len;
107
+
108
+ const DWORD dwMaxSizeLow = (sizeof(off_t) <= sizeof(DWORD)) ?
109
+ (DWORD)maxSize : (DWORD)(maxSize & 0xFFFFFFFFL);
110
+ const DWORD dwMaxSizeHigh = (sizeof(off_t) <= sizeof(DWORD)) ?
111
+ (DWORD)0 : (DWORD)((maxSize >> 32) & 0xFFFFFFFFL);
112
+
113
+ #ifdef _MSC_VER
114
+ #pragma warning(pop)
115
+ #endif
116
+
117
+ errno = 0;
118
+
119
+ if (len == 0
120
+ /* Unsupported flag combinations */
121
+ || (flags & MAP_FIXED) != 0
122
+ /* Usupported protection combinations */
123
+ || prot == PROT_EXEC)
124
+ {
125
+ errno = EINVAL;
126
+ return MAP_FAILED;
127
+ }
128
+
129
+ h = ((flags & MAP_ANONYMOUS) == 0) ?
130
+ (HANDLE)_get_osfhandle(fildes) : INVALID_HANDLE_VALUE;
131
+
132
+ if ((flags & MAP_ANONYMOUS) == 0 && h == INVALID_HANDLE_VALUE)
133
+ {
134
+ errno = EBADF;
135
+ return MAP_FAILED;
136
+ }
137
+
138
+ fm = CreateFileMapping(h, NULL, protect, dwMaxSizeHigh, dwMaxSizeLow, NULL);
139
+
140
+ if (fm == NULL)
141
+ {
142
+ errno = __map_mman_error(GetLastError(), EPERM);
143
+ return MAP_FAILED;
144
+ }
145
+
146
+ map = MapViewOfFile(fm, desiredAccess, dwFileOffsetHigh, dwFileOffsetLow, len);
147
+
148
+ CloseHandle(fm);
149
+
150
+ if (map == NULL)
151
+ {
152
+ errno = __map_mman_error(GetLastError(), EPERM);
153
+ return MAP_FAILED;
154
+ }
155
+
156
+ return map;
157
+ }
158
+
159
+ inline int munmap(void *addr, size_t len)
160
+ {
161
+ if (UnmapViewOfFile(addr))
162
+ return 0;
163
+
164
+ errno = __map_mman_error(GetLastError(), EPERM);
165
+
166
+ return -1;
167
+ }
168
+
169
+ inline int mprotect(void *addr, size_t len, int prot)
170
+ {
171
+ DWORD newProtect = __map_mmap_prot_page(prot);
172
+ DWORD oldProtect = 0;
173
+
174
+ if (VirtualProtect(addr, len, newProtect, &oldProtect))
175
+ return 0;
176
+
177
+ errno = __map_mman_error(GetLastError(), EPERM);
178
+
179
+ return -1;
180
+ }
181
+
182
+ inline int msync(void *addr, size_t len, int flags)
183
+ {
184
+ if (FlushViewOfFile(addr, len))
185
+ return 0;
186
+
187
+ errno = __map_mman_error(GetLastError(), EPERM);
188
+
189
+ return -1;
190
+ }
191
+
192
+ inline int mlock(const void *addr, size_t len)
193
+ {
194
+ if (VirtualLock((LPVOID)addr, len))
195
+ return 0;
196
+
197
+ errno = __map_mman_error(GetLastError(), EPERM);
198
+
199
+ return -1;
200
+ }
201
+
202
+ inline int munlock(const void *addr, size_t len)
203
+ {
204
+ if (VirtualUnlock((LPVOID)addr, len))
205
+ return 0;
206
+
207
+ errno = __map_mman_error(GetLastError(), EPERM);
208
+
209
+ return -1;
210
+ }
211
+
212
+ #if !defined(__MINGW32__)
213
+ inline int ftruncate(const int fd, const int64_t size) {
214
+ if (fd < 0) {
215
+ errno = EBADF;
216
+ return -1;
217
+ }
218
+
219
+ HANDLE h = reinterpret_cast<HANDLE>(_get_osfhandle(fd));
220
+ LARGE_INTEGER li_start, li_size;
221
+ li_start.QuadPart = static_cast<int64_t>(0);
222
+ li_size.QuadPart = size;
223
+ if (SetFilePointerEx(h, li_start, NULL, FILE_CURRENT) == ~0 ||
224
+ SetFilePointerEx(h, li_size, NULL, FILE_BEGIN) == ~0 ||
225
+ !SetEndOfFile(h)) {
226
+ unsigned long error = GetLastError();
227
+ fprintf(stderr, "I/O error while truncating: %lu\n", error);
228
+ switch (error) {
229
+ case ERROR_INVALID_HANDLE:
230
+ errno = EBADF;
231
+ break;
232
+ default:
233
+ errno = EIO;
234
+ break;
235
+ }
236
+ return -1;
237
+ }
238
+ return 0;
239
+ }
240
+ #endif
241
+
242
+ #endif
@@ -0,0 +1,152 @@
1
+ #pragma once
2
+ #include <unordered_map>
3
+ #include <fstream>
4
+ #include <mutex>
5
+ #include <algorithm>
6
+
7
+ namespace hnswlib {
8
+ template<typename dist_t>
9
+ class BruteforceSearch : public AlgorithmInterface<dist_t> {
10
+ public:
11
+ BruteforceSearch(SpaceInterface <dist_t> *s) {
12
+
13
+ }
14
+ BruteforceSearch(SpaceInterface<dist_t> *s, const std::string &location) {
15
+ loadIndex(location, s);
16
+ }
17
+
18
+ BruteforceSearch(SpaceInterface <dist_t> *s, size_t maxElements) {
19
+ maxelements_ = maxElements;
20
+ data_size_ = s->get_data_size();
21
+ fstdistfunc_ = s->get_dist_func();
22
+ dist_func_param_ = s->get_dist_func_param();
23
+ size_per_element_ = data_size_ + sizeof(labeltype);
24
+ data_ = (char *) malloc(maxElements * size_per_element_);
25
+ if (data_ == nullptr)
26
+ std::runtime_error("Not enough memory: BruteforceSearch failed to allocate data");
27
+ cur_element_count = 0;
28
+ }
29
+
30
+ ~BruteforceSearch() {
31
+ free(data_);
32
+ }
33
+
34
+ char *data_;
35
+ size_t maxelements_;
36
+ size_t cur_element_count;
37
+ size_t size_per_element_;
38
+
39
+ size_t data_size_;
40
+ DISTFUNC <dist_t> fstdistfunc_;
41
+ void *dist_func_param_;
42
+ std::mutex index_lock;
43
+
44
+ std::unordered_map<labeltype,size_t > dict_external_to_internal;
45
+
46
+ void addPoint(const void *datapoint, labeltype label) {
47
+
48
+ int idx;
49
+ {
50
+ std::unique_lock<std::mutex> lock(index_lock);
51
+
52
+
53
+
54
+ auto search=dict_external_to_internal.find(label);
55
+ if (search != dict_external_to_internal.end()) {
56
+ idx=search->second;
57
+ }
58
+ else{
59
+ if (cur_element_count >= maxelements_) {
60
+ throw std::runtime_error("The number of elements exceeds the specified limit\n");
61
+ }
62
+ idx=cur_element_count;
63
+ dict_external_to_internal[label] = idx;
64
+ cur_element_count++;
65
+ }
66
+ }
67
+ memcpy(data_ + size_per_element_ * idx + data_size_, &label, sizeof(labeltype));
68
+ memcpy(data_ + size_per_element_ * idx, datapoint, data_size_);
69
+
70
+
71
+
72
+
73
+ };
74
+
75
+ void removePoint(labeltype cur_external) {
76
+ size_t cur_c=dict_external_to_internal[cur_external];
77
+
78
+ dict_external_to_internal.erase(cur_external);
79
+
80
+ labeltype label=*((labeltype*)(data_ + size_per_element_ * (cur_element_count-1) + data_size_));
81
+ dict_external_to_internal[label]=cur_c;
82
+ memcpy(data_ + size_per_element_ * cur_c,
83
+ data_ + size_per_element_ * (cur_element_count-1),
84
+ data_size_+sizeof(labeltype));
85
+ cur_element_count--;
86
+
87
+ }
88
+
89
+
90
+ std::priority_queue<std::pair<dist_t, labeltype >>
91
+ searchKnn(const void *query_data, size_t k) const {
92
+ std::priority_queue<std::pair<dist_t, labeltype >> topResults;
93
+ if (cur_element_count == 0) return topResults;
94
+ for (int i = 0; i < k; i++) {
95
+ dist_t dist = fstdistfunc_(query_data, data_ + size_per_element_ * i, dist_func_param_);
96
+ topResults.push(std::pair<dist_t, labeltype>(dist, *((labeltype *) (data_ + size_per_element_ * i +
97
+ data_size_))));
98
+ }
99
+ dist_t lastdist = topResults.top().first;
100
+ for (int i = k; i < cur_element_count; i++) {
101
+ dist_t dist = fstdistfunc_(query_data, data_ + size_per_element_ * i, dist_func_param_);
102
+ if (dist <= lastdist) {
103
+ topResults.push(std::pair<dist_t, labeltype>(dist, *((labeltype *) (data_ + size_per_element_ * i +
104
+ data_size_))));
105
+ if (topResults.size() > k)
106
+ topResults.pop();
107
+ lastdist = topResults.top().first;
108
+ }
109
+
110
+ }
111
+ return topResults;
112
+ };
113
+
114
+ void saveIndex(const std::string &location) {
115
+ std::ofstream output(location, std::ios::binary);
116
+ std::streampos position;
117
+
118
+ writeBinaryPOD(output, maxelements_);
119
+ writeBinaryPOD(output, size_per_element_);
120
+ writeBinaryPOD(output, cur_element_count);
121
+
122
+ output.write(data_, maxelements_ * size_per_element_);
123
+
124
+ output.close();
125
+ }
126
+
127
+ void loadIndex(const std::string &location, SpaceInterface<dist_t> *s) {
128
+
129
+
130
+ std::ifstream input(location, std::ios::binary);
131
+ std::streampos position;
132
+
133
+ readBinaryPOD(input, maxelements_);
134
+ readBinaryPOD(input, size_per_element_);
135
+ readBinaryPOD(input, cur_element_count);
136
+
137
+ data_size_ = s->get_data_size();
138
+ fstdistfunc_ = s->get_dist_func();
139
+ dist_func_param_ = s->get_dist_func_param();
140
+ size_per_element_ = data_size_ + sizeof(labeltype);
141
+ data_ = (char *) malloc(maxelements_ * size_per_element_);
142
+ if (data_ == nullptr)
143
+ std::runtime_error("Not enough memory: loadIndex failed to allocate data");
144
+
145
+ input.read(data_, maxelements_ * size_per_element_);
146
+
147
+ input.close();
148
+
149
+ }
150
+
151
+ };
152
+ }