faiss 0.6.0 → 0.6.1

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 (361) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/ext/faiss/extconf.rb +2 -1
  4. data/ext/faiss/{index_rb.cpp → index.cpp} +1 -1
  5. data/ext/faiss/index_binary.cpp +1 -1
  6. data/ext/faiss/kmeans.cpp +1 -1
  7. data/ext/faiss/pca_matrix.cpp +1 -1
  8. data/ext/faiss/product_quantizer.cpp +1 -1
  9. data/ext/faiss/{utils_rb.cpp → utils.cpp} +1 -1
  10. data/lib/faiss/version.rb +1 -1
  11. data/vendor/faiss/faiss/AutoTune.cpp +93 -80
  12. data/vendor/faiss/faiss/Clustering.cpp +39 -240
  13. data/vendor/faiss/faiss/Clustering.h +6 -0
  14. data/vendor/faiss/faiss/IVFlib.cpp +41 -21
  15. data/vendor/faiss/faiss/Index.cpp +6 -5
  16. data/vendor/faiss/faiss/Index.h +5 -5
  17. data/vendor/faiss/faiss/Index2Layer.cpp +37 -53
  18. data/vendor/faiss/faiss/IndexAdditiveQuantizer.cpp +49 -37
  19. data/vendor/faiss/faiss/IndexAdditiveQuantizerFastScan.cpp +36 -34
  20. data/vendor/faiss/faiss/IndexAdditiveQuantizerFastScan.h +4 -1
  21. data/vendor/faiss/faiss/IndexBinary.cpp +5 -3
  22. data/vendor/faiss/faiss/IndexBinary.h +4 -4
  23. data/vendor/faiss/faiss/IndexBinaryFlat.cpp +1 -1
  24. data/vendor/faiss/faiss/IndexBinaryFlat.h +1 -1
  25. data/vendor/faiss/faiss/IndexBinaryFromFloat.cpp +4 -4
  26. data/vendor/faiss/faiss/IndexBinaryHNSW.cpp +84 -92
  27. data/vendor/faiss/faiss/IndexBinaryHNSW.h +9 -3
  28. data/vendor/faiss/faiss/IndexBinaryHash.cpp +45 -236
  29. data/vendor/faiss/faiss/IndexBinaryHash.h +6 -6
  30. data/vendor/faiss/faiss/IndexBinaryIVF.cpp +87 -415
  31. data/vendor/faiss/faiss/IndexFastScan.cpp +72 -109
  32. data/vendor/faiss/faiss/IndexFastScan.h +25 -23
  33. data/vendor/faiss/faiss/IndexFlat.cpp +27 -20
  34. data/vendor/faiss/faiss/IndexFlat.h +21 -18
  35. data/vendor/faiss/faiss/IndexFlatCodes.cpp +42 -19
  36. data/vendor/faiss/faiss/IndexHNSW.cpp +283 -145
  37. data/vendor/faiss/faiss/IndexHNSW.h +16 -2
  38. data/vendor/faiss/faiss/IndexIDMap.cpp +25 -21
  39. data/vendor/faiss/faiss/IndexIDMap.h +9 -7
  40. data/vendor/faiss/faiss/IndexIVF.cpp +465 -362
  41. data/vendor/faiss/faiss/IndexIVF.h +33 -12
  42. data/vendor/faiss/faiss/IndexIVFAdditiveQuantizer.cpp +77 -74
  43. data/vendor/faiss/faiss/IndexIVFAdditiveQuantizerFastScan.cpp +96 -93
  44. data/vendor/faiss/faiss/IndexIVFAdditiveQuantizerFastScan.h +4 -1
  45. data/vendor/faiss/faiss/IndexIVFFastScan.cpp +357 -238
  46. data/vendor/faiss/faiss/IndexIVFFastScan.h +42 -41
  47. data/vendor/faiss/faiss/IndexIVFFlat.cpp +36 -68
  48. data/vendor/faiss/faiss/IndexIVFFlat.h +32 -0
  49. data/vendor/faiss/faiss/IndexIVFFlatPanorama.cpp +53 -30
  50. data/vendor/faiss/faiss/IndexIVFFlatPanorama.h +3 -1
  51. data/vendor/faiss/faiss/IndexIVFIndependentQuantizer.cpp +18 -15
  52. data/vendor/faiss/faiss/IndexIVFPQ.cpp +71 -843
  53. data/vendor/faiss/faiss/IndexIVFPQFastScan.cpp +151 -121
  54. data/vendor/faiss/faiss/IndexIVFPQFastScan.h +3 -0
  55. data/vendor/faiss/faiss/IndexIVFPQR.cpp +21 -17
  56. data/vendor/faiss/faiss/IndexIVFRaBitQ.cpp +26 -39
  57. data/vendor/faiss/faiss/IndexIVFRaBitQ.h +2 -1
  58. data/vendor/faiss/faiss/IndexIVFRaBitQFastScan.cpp +475 -476
  59. data/vendor/faiss/faiss/IndexIVFRaBitQFastScan.h +248 -93
  60. data/vendor/faiss/faiss/IndexIVFSpectralHash.cpp +41 -127
  61. data/vendor/faiss/faiss/IndexIVFSpectralHash.h +1 -1
  62. data/vendor/faiss/faiss/IndexLSH.cpp +36 -19
  63. data/vendor/faiss/faiss/IndexLattice.cpp +13 -13
  64. data/vendor/faiss/faiss/IndexNNDescent.cpp +36 -21
  65. data/vendor/faiss/faiss/IndexNNDescent.h +2 -2
  66. data/vendor/faiss/faiss/IndexNSG.cpp +39 -23
  67. data/vendor/faiss/faiss/IndexNeuralNetCodec.cpp +31 -11
  68. data/vendor/faiss/faiss/IndexPQ.cpp +128 -221
  69. data/vendor/faiss/faiss/IndexPQ.h +3 -2
  70. data/vendor/faiss/faiss/IndexPQFastScan.cpp +20 -14
  71. data/vendor/faiss/faiss/IndexPQFastScan.h +3 -0
  72. data/vendor/faiss/faiss/IndexPreTransform.cpp +25 -18
  73. data/vendor/faiss/faiss/IndexPreTransform.h +1 -1
  74. data/vendor/faiss/faiss/IndexRaBitQ.cpp +11 -36
  75. data/vendor/faiss/faiss/IndexRaBitQ.h +2 -1
  76. data/vendor/faiss/faiss/IndexRaBitQFastScan.cpp +41 -277
  77. data/vendor/faiss/faiss/IndexRaBitQFastScan.h +183 -27
  78. data/vendor/faiss/faiss/IndexRefine.cpp +30 -25
  79. data/vendor/faiss/faiss/IndexRefine.h +4 -4
  80. data/vendor/faiss/faiss/IndexReplicas.cpp +6 -6
  81. data/vendor/faiss/faiss/IndexRowwiseMinMax.cpp +15 -14
  82. data/vendor/faiss/faiss/IndexRowwiseMinMax.h +1 -1
  83. data/vendor/faiss/faiss/IndexScalarQuantizer.cpp +82 -14
  84. data/vendor/faiss/faiss/IndexShards.cpp +10 -9
  85. data/vendor/faiss/faiss/IndexShardsIVF.cpp +21 -15
  86. data/vendor/faiss/faiss/MatrixStats.cpp +5 -4
  87. data/vendor/faiss/faiss/MetaIndexes.cpp +19 -17
  88. data/vendor/faiss/faiss/MetaIndexes.h +1 -1
  89. data/vendor/faiss/faiss/MetricType.h +14 -7
  90. data/vendor/faiss/faiss/SuperKMeans.cpp +656 -0
  91. data/vendor/faiss/faiss/SuperKMeans.h +97 -0
  92. data/vendor/faiss/faiss/VectorTransform.cpp +237 -149
  93. data/vendor/faiss/faiss/VectorTransform.h +16 -16
  94. data/vendor/faiss/faiss/build.cpp +23 -0
  95. data/vendor/faiss/faiss/build.h +15 -0
  96. data/vendor/faiss/faiss/clone_index.cpp +48 -47
  97. data/vendor/faiss/faiss/cppcontrib/sa_decode/Level2-avx2-inl.h +47 -47
  98. data/vendor/faiss/faiss/cppcontrib/sa_decode/Level2-inl.h +11 -0
  99. data/vendor/faiss/faiss/cppcontrib/sa_decode/PQ-avx2-inl.h +38 -38
  100. data/vendor/faiss/faiss/cppcontrib/sa_decode/PQ-inl.h +11 -0
  101. data/vendor/faiss/faiss/factory_tools.cpp +5 -0
  102. data/vendor/faiss/faiss/gpu/GpuIndexCagra.h +6 -5
  103. data/vendor/faiss/faiss/gpu/GpuResources.h +1 -1
  104. data/vendor/faiss/faiss/gpu/StandardGpuResources.cpp +9 -9
  105. data/vendor/faiss/faiss/gpu/StandardGpuResources.h +4 -3
  106. data/vendor/faiss/faiss/gpu/test/TestGpuIndexFlat.cpp +46 -0
  107. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFFlat.cpp +56 -0
  108. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFPQ.cpp +78 -1
  109. data/vendor/faiss/faiss/gpu/test/TestUtils.cpp +72 -0
  110. data/vendor/faiss/faiss/gpu/test/TestUtils.h +23 -0
  111. data/vendor/faiss/faiss/gpu/utils/CuvsFilterConvert.h +1 -1
  112. data/vendor/faiss/faiss/gpu/utils/CuvsUtils.h +21 -10
  113. data/vendor/faiss/faiss/gpu_metal/GpuIndexFlat.h +22 -0
  114. data/vendor/faiss/faiss/gpu_metal/MetalCloner.h +35 -0
  115. data/vendor/faiss/faiss/gpu_metal/MetalFlatKernels.h +40 -0
  116. data/vendor/faiss/faiss/gpu_metal/MetalIndex.h +51 -0
  117. data/vendor/faiss/faiss/gpu_metal/MetalIndexFlat.h +65 -0
  118. data/vendor/faiss/faiss/gpu_metal/MetalKernels.h +66 -0
  119. data/vendor/faiss/faiss/gpu_metal/MetalResources.h +79 -0
  120. data/vendor/faiss/faiss/gpu_metal/StandardMetalResources.h +35 -0
  121. data/vendor/faiss/faiss/impl/AdSampling.cpp +103 -0
  122. data/vendor/faiss/faiss/impl/AdSampling.h +35 -0
  123. data/vendor/faiss/faiss/impl/AdditiveQuantizer.cpp +29 -25
  124. data/vendor/faiss/faiss/impl/AdditiveQuantizer.h +1 -0
  125. data/vendor/faiss/faiss/impl/AuxIndexStructures.cpp +10 -9
  126. data/vendor/faiss/faiss/impl/AuxIndexStructures.h +3 -0
  127. data/vendor/faiss/faiss/impl/ClusteringHelpers.cpp +244 -0
  128. data/vendor/faiss/faiss/impl/ClusteringHelpers.h +94 -0
  129. data/vendor/faiss/faiss/impl/ClusteringInitialization.cpp +16 -16
  130. data/vendor/faiss/faiss/impl/CodePacker.cpp +3 -3
  131. data/vendor/faiss/faiss/impl/CodePackerRaBitQ.cpp +1 -1
  132. data/vendor/faiss/faiss/impl/DistanceComputer.h +8 -8
  133. data/vendor/faiss/faiss/impl/FaissAssert.h +6 -3
  134. data/vendor/faiss/faiss/impl/FaissException.h +50 -3
  135. data/vendor/faiss/faiss/impl/HNSW.cpp +92 -317
  136. data/vendor/faiss/faiss/impl/HNSW.h +13 -34
  137. data/vendor/faiss/faiss/impl/IDSelector.cpp +15 -11
  138. data/vendor/faiss/faiss/impl/IDSelector.h +8 -8
  139. data/vendor/faiss/faiss/impl/InvertedListScannerStats.h +26 -0
  140. data/vendor/faiss/faiss/impl/LocalSearchQuantizer.cpp +82 -77
  141. data/vendor/faiss/faiss/impl/NNDescent.cpp +62 -25
  142. data/vendor/faiss/faiss/impl/NNDescent.h +6 -2
  143. data/vendor/faiss/faiss/impl/NSG.cpp +38 -21
  144. data/vendor/faiss/faiss/impl/NSG.h +4 -4
  145. data/vendor/faiss/faiss/impl/Panorama.cpp +23 -6
  146. data/vendor/faiss/faiss/impl/Panorama.h +258 -87
  147. data/vendor/faiss/faiss/impl/PdxLayout.cpp +93 -0
  148. data/vendor/faiss/faiss/impl/PdxLayout.h +41 -0
  149. data/vendor/faiss/faiss/impl/PolysemousTraining.cpp +46 -32
  150. data/vendor/faiss/faiss/impl/PolysemousTraining.h +3 -3
  151. data/vendor/faiss/faiss/impl/ProductAdditiveQuantizer.cpp +35 -35
  152. data/vendor/faiss/faiss/impl/ProductQuantizer-inl.h +21 -16
  153. data/vendor/faiss/faiss/impl/ProductQuantizer.cpp +30 -23
  154. data/vendor/faiss/faiss/impl/Quantizer.h +2 -2
  155. data/vendor/faiss/faiss/impl/RaBitQUtils.cpp +55 -49
  156. data/vendor/faiss/faiss/impl/RaBitQUtils.h +65 -0
  157. data/vendor/faiss/faiss/impl/RaBitQuantizer.cpp +296 -283
  158. data/vendor/faiss/faiss/impl/ResidualQuantizer.cpp +26 -23
  159. data/vendor/faiss/faiss/impl/ResidualQuantizer.h +1 -1
  160. data/vendor/faiss/faiss/impl/ResultHandler.h +99 -75
  161. data/vendor/faiss/faiss/impl/ScalarQuantizer.cpp +52 -4
  162. data/vendor/faiss/faiss/impl/ScalarQuantizer.h +27 -1
  163. data/vendor/faiss/faiss/impl/ThreadedIndex-inl.h +14 -11
  164. data/vendor/faiss/faiss/impl/VisitedTable.h +7 -0
  165. data/vendor/faiss/faiss/impl/approx_topk/approx_topk.h +276 -0
  166. data/vendor/faiss/faiss/impl/approx_topk/avx2.cpp +68 -0
  167. data/vendor/faiss/faiss/{utils → impl}/approx_topk/generic.h +15 -8
  168. data/vendor/faiss/faiss/impl/approx_topk/neon.cpp +68 -0
  169. data/vendor/faiss/faiss/impl/approx_topk/rq_beam_search_tab-inl.h +169 -0
  170. data/vendor/faiss/faiss/impl/approx_topk/rq_beam_search_tab.h +117 -0
  171. data/vendor/faiss/faiss/impl/approx_topk/simdlib256-inl.h +146 -0
  172. data/vendor/faiss/faiss/impl/binary_hamming/IndexBinaryHNSW_impl.h +73 -0
  173. data/vendor/faiss/faiss/impl/binary_hamming/IndexBinaryHash_impl.h +270 -0
  174. data/vendor/faiss/faiss/impl/binary_hamming/IndexBinaryIVF_impl.h +460 -0
  175. data/vendor/faiss/faiss/impl/binary_hamming/IndexIVFSpectralHash_impl.h +159 -0
  176. data/vendor/faiss/faiss/impl/binary_hamming/IndexPQ_impl.h +92 -0
  177. data/vendor/faiss/faiss/impl/binary_hamming/avx2.cpp +26 -0
  178. data/vendor/faiss/faiss/impl/binary_hamming/avx512.cpp +26 -0
  179. data/vendor/faiss/faiss/impl/binary_hamming/dispatch.h +143 -0
  180. data/vendor/faiss/faiss/impl/binary_hamming/neon.cpp +26 -0
  181. data/vendor/faiss/faiss/impl/binary_hamming/rvv.cpp +26 -0
  182. data/vendor/faiss/faiss/impl/expanded_scanners.h +8 -3
  183. data/vendor/faiss/faiss/impl/{FastScanDistancePostProcessing.h → fast_scan/FastScanDistancePostProcessing.h} +13 -6
  184. data/vendor/faiss/faiss/impl/{LookupTableScaler.h → fast_scan/LookupTableScaler.h} +16 -5
  185. data/vendor/faiss/faiss/impl/fast_scan/accumulate_loops.h +237 -0
  186. data/vendor/faiss/faiss/impl/fast_scan/accumulate_loops_512.h +185 -0
  187. data/vendor/faiss/faiss/impl/fast_scan/decompose_qbs.h +229 -0
  188. data/vendor/faiss/faiss/impl/fast_scan/dispatching.h +268 -0
  189. data/vendor/faiss/faiss/impl/{pq4_fast_scan.cpp → fast_scan/fast_scan.cpp} +169 -2
  190. data/vendor/faiss/faiss/impl/fast_scan/fast_scan.h +341 -0
  191. data/vendor/faiss/faiss/impl/fast_scan/impl-avx2.cpp +36 -0
  192. data/vendor/faiss/faiss/impl/fast_scan/impl-avx512.cpp +40 -0
  193. data/vendor/faiss/faiss/impl/fast_scan/impl-neon.cpp +120 -0
  194. data/vendor/faiss/faiss/impl/fast_scan/impl-riscv.cpp +104 -0
  195. data/vendor/faiss/faiss/impl/fast_scan/kernels_simd256.h +213 -0
  196. data/vendor/faiss/faiss/impl/{pq4_fast_scan_search_qbs.cpp → fast_scan/kernels_simd512.h} +26 -356
  197. data/vendor/faiss/faiss/impl/fast_scan/rabitq_dispatching.h +90 -0
  198. data/vendor/faiss/faiss/impl/fast_scan/rabitq_result_handler.h +108 -0
  199. data/vendor/faiss/faiss/impl/{simd_result_handlers.h → fast_scan/simd_result_handlers.h} +282 -134
  200. data/vendor/faiss/faiss/impl/hnsw/LockVector.cpp +54 -0
  201. data/vendor/faiss/faiss/impl/hnsw/LockVector.h +64 -0
  202. data/vendor/faiss/faiss/impl/hnsw/MinimaxHeap.cpp +91 -0
  203. data/vendor/faiss/faiss/impl/hnsw/MinimaxHeap.h +64 -0
  204. data/vendor/faiss/faiss/impl/hnsw/avx2.cpp +104 -0
  205. data/vendor/faiss/faiss/impl/hnsw/avx512.cpp +111 -0
  206. data/vendor/faiss/faiss/impl/index_read.cpp +1132 -45
  207. data/vendor/faiss/faiss/impl/index_read_utils.h +1 -1
  208. data/vendor/faiss/faiss/impl/index_write.cpp +95 -13
  209. data/vendor/faiss/faiss/impl/io.cpp +6 -6
  210. data/vendor/faiss/faiss/impl/io_macros.h +33 -16
  211. data/vendor/faiss/faiss/impl/kmeans1d.cpp +10 -10
  212. data/vendor/faiss/faiss/impl/lattice_Zn.cpp +37 -23
  213. data/vendor/faiss/faiss/impl/lattice_Zn.h +6 -6
  214. data/vendor/faiss/faiss/impl/mapped_io.cpp +6 -6
  215. data/vendor/faiss/faiss/impl/platform_macros.h +11 -4
  216. data/vendor/faiss/faiss/impl/pq_code_distance/IVFPQScanner_impl.h +549 -0
  217. data/vendor/faiss/faiss/impl/pq_code_distance/IVFPQ_QueryTables.cpp +245 -0
  218. data/vendor/faiss/faiss/impl/pq_code_distance/IVFPQ_QueryTables.h +105 -0
  219. data/vendor/faiss/faiss/impl/pq_code_distance/PQDistanceComputer_impl.h +106 -0
  220. data/vendor/faiss/faiss/impl/pq_code_distance/avx2.cpp +21 -0
  221. data/vendor/faiss/faiss/impl/pq_code_distance/avx512.cpp +21 -0
  222. data/vendor/faiss/faiss/impl/pq_code_distance/neon.cpp +21 -0
  223. data/vendor/faiss/faiss/impl/pq_code_distance/{pq_code_distance-avx2.cpp → pq_code_distance-avx2.h} +9 -13
  224. data/vendor/faiss/faiss/impl/pq_code_distance/{pq_code_distance-avx512.cpp → pq_code_distance-avx512.h} +9 -57
  225. data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-generic.cpp +29 -111
  226. data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-generic.h +96 -0
  227. data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-inl.h +238 -5
  228. data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-sve.cpp +5 -7
  229. data/vendor/faiss/faiss/impl/pq_code_distance/rvv.cpp +68 -0
  230. data/vendor/faiss/faiss/impl/residual_quantizer_encode_steps.cpp +311 -477
  231. data/vendor/faiss/faiss/impl/residual_quantizer_encode_steps.h +1 -1
  232. data/vendor/faiss/faiss/impl/scalar_quantizer/codecs.h +1 -1
  233. data/vendor/faiss/faiss/impl/scalar_quantizer/distance_computers.h +3 -2
  234. data/vendor/faiss/faiss/impl/scalar_quantizer/quantizers.h +102 -11
  235. data/vendor/faiss/faiss/impl/scalar_quantizer/scanners.h +27 -1
  236. data/vendor/faiss/faiss/impl/scalar_quantizer/similarities.h +3 -3
  237. data/vendor/faiss/faiss/impl/scalar_quantizer/sq-avx2.cpp +148 -0
  238. data/vendor/faiss/faiss/impl/scalar_quantizer/sq-avx512.cpp +167 -0
  239. data/vendor/faiss/faiss/impl/scalar_quantizer/sq-dispatch.h +59 -0
  240. data/vendor/faiss/faiss/impl/scalar_quantizer/sq-neon.cpp +163 -0
  241. data/vendor/faiss/faiss/impl/scalar_quantizer/sq-rvv.cpp +311 -0
  242. data/vendor/faiss/faiss/impl/scalar_quantizer/training.cpp +192 -8
  243. data/vendor/faiss/faiss/impl/scalar_quantizer/training.h +12 -0
  244. data/vendor/faiss/faiss/impl/simd_dispatch.h +100 -66
  245. data/vendor/faiss/faiss/impl/simdlib/simdlib.h +57 -0
  246. data/vendor/faiss/faiss/{utils → impl/simdlib}/simdlib_avx2.h +264 -172
  247. data/vendor/faiss/faiss/impl/simdlib/simdlib_avx512.h +414 -0
  248. data/vendor/faiss/faiss/impl/simdlib/simdlib_dispatch.h +44 -0
  249. data/vendor/faiss/faiss/{utils → impl/simdlib}/simdlib_emulated.h +231 -166
  250. data/vendor/faiss/faiss/{utils → impl/simdlib}/simdlib_neon.h +270 -218
  251. data/vendor/faiss/faiss/{utils → impl/simdlib}/simdlib_ppc64.h +201 -160
  252. data/vendor/faiss/faiss/impl/svs_io.cpp +12 -3
  253. data/vendor/faiss/faiss/impl/svs_io.h +8 -2
  254. data/vendor/faiss/faiss/index_factory.cpp +86 -18
  255. data/vendor/faiss/faiss/index_io.h +24 -0
  256. data/vendor/faiss/faiss/invlists/BlockInvertedLists.cpp +66 -16
  257. data/vendor/faiss/faiss/invlists/DirectMap.cpp +24 -14
  258. data/vendor/faiss/faiss/invlists/DirectMap.h +4 -3
  259. data/vendor/faiss/faiss/invlists/InvertedLists.cpp +157 -73
  260. data/vendor/faiss/faiss/invlists/InvertedLists.h +86 -23
  261. data/vendor/faiss/faiss/invlists/InvertedListsIOHook.cpp +4 -4
  262. data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.cpp +13 -13
  263. data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.h +1 -1
  264. data/vendor/faiss/faiss/svs/IndexSVSFaissUtils.h +1 -1
  265. data/vendor/faiss/faiss/svs/IndexSVSFlat.cpp +2 -2
  266. data/vendor/faiss/faiss/svs/IndexSVSIVF.cpp +350 -0
  267. data/vendor/faiss/faiss/svs/IndexSVSIVF.h +128 -0
  268. data/vendor/faiss/faiss/svs/IndexSVSIVFLVQ.cpp +40 -0
  269. data/vendor/faiss/faiss/svs/IndexSVSIVFLVQ.h +43 -0
  270. data/vendor/faiss/faiss/svs/IndexSVSIVFLeanVec.cpp +225 -0
  271. data/vendor/faiss/faiss/svs/IndexSVSIVFLeanVec.h +71 -0
  272. data/vendor/faiss/faiss/svs/IndexSVSVamana.cpp +25 -1
  273. data/vendor/faiss/faiss/svs/IndexSVSVamana.h +18 -2
  274. data/vendor/faiss/faiss/svs/IndexSVSVamanaLVQ.h +1 -1
  275. data/vendor/faiss/faiss/svs/IndexSVSVamanaLeanVec.cpp +12 -3
  276. data/vendor/faiss/faiss/svs/IndexSVSVamanaLeanVec.h +7 -2
  277. data/vendor/faiss/faiss/utils/Heap.cpp +10 -10
  278. data/vendor/faiss/faiss/utils/NeuralNet.cpp +47 -36
  279. data/vendor/faiss/faiss/utils/NeuralNet.h +1 -1
  280. data/vendor/faiss/faiss/utils/approx_topk_hamming/approx_topk_hamming.h +10 -4
  281. data/vendor/faiss/faiss/utils/distances.cpp +390 -560
  282. data/vendor/faiss/faiss/utils/distances.h +20 -1
  283. data/vendor/faiss/faiss/utils/distances_dispatch.h +117 -37
  284. data/vendor/faiss/faiss/utils/distances_fused/avx512.cpp +8 -7
  285. data/vendor/faiss/faiss/utils/distances_fused/distances_fused.cpp +33 -14
  286. data/vendor/faiss/faiss/utils/distances_fused/distances_fused.h +12 -1
  287. data/vendor/faiss/faiss/utils/distances_fused/simdlib_based.cpp +16 -293
  288. data/vendor/faiss/faiss/utils/distances_fused/simdlib_based_neon.cpp +57 -0
  289. data/vendor/faiss/faiss/utils/distances_fused/simdlib_kernel-inl.h +290 -0
  290. data/vendor/faiss/faiss/utils/distances_simd.cpp +5 -177
  291. data/vendor/faiss/faiss/utils/extra_distances.cpp +9 -8
  292. data/vendor/faiss/faiss/utils/extra_distances.h +32 -6
  293. data/vendor/faiss/faiss/utils/hamming-inl.h +13 -11
  294. data/vendor/faiss/faiss/utils/hamming.cpp +66 -517
  295. data/vendor/faiss/faiss/utils/hamming.h +92 -2
  296. data/vendor/faiss/faiss/utils/hamming_distance/common.h +287 -10
  297. data/vendor/faiss/faiss/utils/hamming_distance/hamming_avx2.cpp +15 -0
  298. data/vendor/faiss/faiss/utils/hamming_distance/hamming_avx512.cpp +15 -0
  299. data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-avx2.h +142 -0
  300. data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-avx512.h +234 -0
  301. data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-generic.h +368 -0
  302. data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-neon.h +322 -0
  303. data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-rvv.h +39 -0
  304. data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer.h +146 -0
  305. data/vendor/faiss/faiss/utils/hamming_distance/hamming_impl.h +481 -0
  306. data/vendor/faiss/faiss/utils/hamming_distance/hamming_neon.cpp +15 -0
  307. data/vendor/faiss/faiss/utils/hamming_distance/hamming_rvv.cpp +15 -0
  308. data/vendor/faiss/faiss/utils/partitioning.cpp +66 -987
  309. data/vendor/faiss/faiss/utils/partitioning.h +31 -0
  310. data/vendor/faiss/faiss/utils/popcount.h +29 -0
  311. data/vendor/faiss/faiss/utils/pq_code_distance.h +2 -2
  312. data/vendor/faiss/faiss/utils/prefetch.h +2 -2
  313. data/vendor/faiss/faiss/utils/quantize_lut.cpp +30 -30
  314. data/vendor/faiss/faiss/utils/quantize_lut.h +1 -1
  315. data/vendor/faiss/faiss/utils/rabitq_simd.h +57 -536
  316. data/vendor/faiss/faiss/utils/random.cpp +6 -6
  317. data/vendor/faiss/faiss/utils/simd_impl/IVFFlatScanner-inl.h +51 -0
  318. data/vendor/faiss/faiss/utils/simd_impl/distances_aarch64.cpp +5 -1
  319. data/vendor/faiss/faiss/utils/simd_impl/distances_arm_sve.cpp +213 -4
  320. data/vendor/faiss/faiss/utils/simd_impl/distances_autovec-inl.h +163 -10
  321. data/vendor/faiss/faiss/utils/simd_impl/distances_avx2.cpp +250 -4
  322. data/vendor/faiss/faiss/utils/simd_impl/distances_avx512.cpp +7 -4
  323. data/vendor/faiss/faiss/utils/simd_impl/distances_rvv.cpp +189 -0
  324. data/vendor/faiss/faiss/utils/simd_impl/distances_simdlib256.h +195 -0
  325. data/vendor/faiss/faiss/utils/simd_impl/distances_sse-inl.h +2 -1
  326. data/vendor/faiss/faiss/utils/{distances_fused/simdlib_based.h → simd_impl/exhaustive_L2sqr_blas_cmax.h} +5 -10
  327. data/vendor/faiss/faiss/utils/simd_impl/hamming_impl.h +481 -0
  328. data/vendor/faiss/faiss/utils/simd_impl/partitioning_avx2.cpp +14 -0
  329. data/vendor/faiss/faiss/utils/simd_impl/partitioning_neon.cpp +14 -0
  330. data/vendor/faiss/faiss/utils/simd_impl/partitioning_simdlib256.h +1085 -0
  331. data/vendor/faiss/faiss/utils/simd_impl/rabitq_avx2.cpp +355 -0
  332. data/vendor/faiss/faiss/utils/simd_impl/rabitq_avx512.cpp +477 -0
  333. data/vendor/faiss/faiss/utils/simd_impl/rabitq_neon.cpp +55 -0
  334. data/vendor/faiss/faiss/utils/simd_impl/rabitq_rvv.cpp +55 -0
  335. data/vendor/faiss/faiss/utils/simd_impl/super_kmeans_dispatch.h +32 -0
  336. data/vendor/faiss/faiss/utils/simd_impl/super_kmeans_kernels.h +43 -0
  337. data/vendor/faiss/faiss/utils/simd_impl/super_kmeans_kernels_avx2.cpp +57 -0
  338. data/vendor/faiss/faiss/utils/simd_impl/super_kmeans_kernels_avx512.cpp +45 -0
  339. data/vendor/faiss/faiss/utils/simd_levels.cpp +17 -5
  340. data/vendor/faiss/faiss/utils/simd_levels.h +93 -1
  341. data/vendor/faiss/faiss/utils/sorting.cpp +48 -36
  342. data/vendor/faiss/faiss/utils/utils.cpp +5 -5
  343. data/vendor/faiss/faiss/utils/utils.h +3 -3
  344. metadata +119 -34
  345. data/vendor/faiss/faiss/impl/RaBitQStats.cpp +0 -29
  346. data/vendor/faiss/faiss/impl/RaBitQStats.h +0 -56
  347. data/vendor/faiss/faiss/impl/pq4_fast_scan.h +0 -224
  348. data/vendor/faiss/faiss/impl/pq4_fast_scan_search_1.cpp +0 -230
  349. data/vendor/faiss/faiss/utils/approx_topk/approx_topk.h +0 -84
  350. data/vendor/faiss/faiss/utils/approx_topk/avx2-inl.h +0 -196
  351. data/vendor/faiss/faiss/utils/approx_topk/mode.h +0 -34
  352. data/vendor/faiss/faiss/utils/distances_fused/avx512.h +0 -36
  353. data/vendor/faiss/faiss/utils/extra_distances-inl.h +0 -235
  354. data/vendor/faiss/faiss/utils/hamming_distance/avx2-inl.h +0 -462
  355. data/vendor/faiss/faiss/utils/hamming_distance/avx512-inl.h +0 -490
  356. data/vendor/faiss/faiss/utils/hamming_distance/generic-inl.h +0 -449
  357. data/vendor/faiss/faiss/utils/hamming_distance/hamdis-inl.h +0 -87
  358. data/vendor/faiss/faiss/utils/hamming_distance/neon-inl.h +0 -524
  359. data/vendor/faiss/faiss/utils/simdlib.h +0 -42
  360. data/vendor/faiss/faiss/utils/simdlib_avx512.h +0 -365
  361. /data/ext/faiss/{utils_rb.h → utils.h} +0 -0
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: faiss
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
@@ -48,14 +48,14 @@ files:
48
48
  - README.md
49
49
  - ext/faiss/ext.cpp
50
50
  - ext/faiss/extconf.rb
51
+ - ext/faiss/index.cpp
51
52
  - ext/faiss/index_binary.cpp
52
- - ext/faiss/index_rb.cpp
53
53
  - ext/faiss/kmeans.cpp
54
54
  - ext/faiss/numo.hpp
55
55
  - ext/faiss/pca_matrix.cpp
56
56
  - ext/faiss/product_quantizer.cpp
57
- - ext/faiss/utils_rb.cpp
58
- - ext/faiss/utils_rb.h
57
+ - ext/faiss/utils.cpp
58
+ - ext/faiss/utils.h
59
59
  - lib/faiss.rb
60
60
  - lib/faiss/version.rb
61
61
  - vendor/faiss/LICENSE
@@ -158,8 +158,12 @@ files:
158
158
  - vendor/faiss/faiss/MetaIndexes.cpp
159
159
  - vendor/faiss/faiss/MetaIndexes.h
160
160
  - vendor/faiss/faiss/MetricType.h
161
+ - vendor/faiss/faiss/SuperKMeans.cpp
162
+ - vendor/faiss/faiss/SuperKMeans.h
161
163
  - vendor/faiss/faiss/VectorTransform.cpp
162
164
  - vendor/faiss/faiss/VectorTransform.h
165
+ - vendor/faiss/faiss/build.cpp
166
+ - vendor/faiss/faiss/build.h
163
167
  - vendor/faiss/faiss/clone_index.cpp
164
168
  - vendor/faiss/faiss/clone_index.h
165
169
  - vendor/faiss/faiss/cppcontrib/SaDecodeKernels.h
@@ -227,10 +231,22 @@ files:
227
231
  - vendor/faiss/faiss/gpu/utils/StaticUtils.h
228
232
  - vendor/faiss/faiss/gpu/utils/Timer.cpp
229
233
  - vendor/faiss/faiss/gpu/utils/Timer.h
234
+ - vendor/faiss/faiss/gpu_metal/GpuIndexFlat.h
235
+ - vendor/faiss/faiss/gpu_metal/MetalCloner.h
236
+ - vendor/faiss/faiss/gpu_metal/MetalFlatKernels.h
237
+ - vendor/faiss/faiss/gpu_metal/MetalIndex.h
238
+ - vendor/faiss/faiss/gpu_metal/MetalIndexFlat.h
239
+ - vendor/faiss/faiss/gpu_metal/MetalKernels.h
240
+ - vendor/faiss/faiss/gpu_metal/MetalResources.h
241
+ - vendor/faiss/faiss/gpu_metal/StandardMetalResources.h
242
+ - vendor/faiss/faiss/impl/AdSampling.cpp
243
+ - vendor/faiss/faiss/impl/AdSampling.h
230
244
  - vendor/faiss/faiss/impl/AdditiveQuantizer.cpp
231
245
  - vendor/faiss/faiss/impl/AdditiveQuantizer.h
232
246
  - vendor/faiss/faiss/impl/AuxIndexStructures.cpp
233
247
  - vendor/faiss/faiss/impl/AuxIndexStructures.h
248
+ - vendor/faiss/faiss/impl/ClusteringHelpers.cpp
249
+ - vendor/faiss/faiss/impl/ClusteringHelpers.h
234
250
  - vendor/faiss/faiss/impl/ClusteringInitialization.cpp
235
251
  - vendor/faiss/faiss/impl/ClusteringInitialization.h
236
252
  - vendor/faiss/faiss/impl/CodePacker.cpp
@@ -241,14 +257,13 @@ files:
241
257
  - vendor/faiss/faiss/impl/FaissAssert.h
242
258
  - vendor/faiss/faiss/impl/FaissException.cpp
243
259
  - vendor/faiss/faiss/impl/FaissException.h
244
- - vendor/faiss/faiss/impl/FastScanDistancePostProcessing.h
245
260
  - vendor/faiss/faiss/impl/HNSW.cpp
246
261
  - vendor/faiss/faiss/impl/HNSW.h
247
262
  - vendor/faiss/faiss/impl/IDSelector.cpp
248
263
  - vendor/faiss/faiss/impl/IDSelector.h
264
+ - vendor/faiss/faiss/impl/InvertedListScannerStats.h
249
265
  - vendor/faiss/faiss/impl/LocalSearchQuantizer.cpp
250
266
  - vendor/faiss/faiss/impl/LocalSearchQuantizer.h
251
- - vendor/faiss/faiss/impl/LookupTableScaler.h
252
267
  - vendor/faiss/faiss/impl/NNDescent.cpp
253
268
  - vendor/faiss/faiss/impl/NNDescent.h
254
269
  - vendor/faiss/faiss/impl/NSG.cpp
@@ -257,6 +272,8 @@ files:
257
272
  - vendor/faiss/faiss/impl/Panorama.h
258
273
  - vendor/faiss/faiss/impl/PanoramaStats.cpp
259
274
  - vendor/faiss/faiss/impl/PanoramaStats.h
275
+ - vendor/faiss/faiss/impl/PdxLayout.cpp
276
+ - vendor/faiss/faiss/impl/PdxLayout.h
260
277
  - vendor/faiss/faiss/impl/PolysemousTraining.cpp
261
278
  - vendor/faiss/faiss/impl/PolysemousTraining.h
262
279
  - vendor/faiss/faiss/impl/ProductAdditiveQuantizer.cpp
@@ -265,8 +282,6 @@ files:
265
282
  - vendor/faiss/faiss/impl/ProductQuantizer.cpp
266
283
  - vendor/faiss/faiss/impl/ProductQuantizer.h
267
284
  - vendor/faiss/faiss/impl/Quantizer.h
268
- - vendor/faiss/faiss/impl/RaBitQStats.cpp
269
- - vendor/faiss/faiss/impl/RaBitQStats.h
270
285
  - vendor/faiss/faiss/impl/RaBitQUtils.cpp
271
286
  - vendor/faiss/faiss/impl/RaBitQUtils.h
272
287
  - vendor/faiss/faiss/impl/RaBitQuantizer.cpp
@@ -282,7 +297,47 @@ files:
282
297
  - vendor/faiss/faiss/impl/ThreadedIndex.h
283
298
  - vendor/faiss/faiss/impl/VisitedTable.cpp
284
299
  - vendor/faiss/faiss/impl/VisitedTable.h
300
+ - vendor/faiss/faiss/impl/approx_topk/approx_topk.h
301
+ - vendor/faiss/faiss/impl/approx_topk/avx2.cpp
302
+ - vendor/faiss/faiss/impl/approx_topk/generic.h
303
+ - vendor/faiss/faiss/impl/approx_topk/neon.cpp
304
+ - vendor/faiss/faiss/impl/approx_topk/rq_beam_search_tab-inl.h
305
+ - vendor/faiss/faiss/impl/approx_topk/rq_beam_search_tab.h
306
+ - vendor/faiss/faiss/impl/approx_topk/simdlib256-inl.h
307
+ - vendor/faiss/faiss/impl/binary_hamming/IndexBinaryHNSW_impl.h
308
+ - vendor/faiss/faiss/impl/binary_hamming/IndexBinaryHash_impl.h
309
+ - vendor/faiss/faiss/impl/binary_hamming/IndexBinaryIVF_impl.h
310
+ - vendor/faiss/faiss/impl/binary_hamming/IndexIVFSpectralHash_impl.h
311
+ - vendor/faiss/faiss/impl/binary_hamming/IndexPQ_impl.h
312
+ - vendor/faiss/faiss/impl/binary_hamming/avx2.cpp
313
+ - vendor/faiss/faiss/impl/binary_hamming/avx512.cpp
314
+ - vendor/faiss/faiss/impl/binary_hamming/dispatch.h
315
+ - vendor/faiss/faiss/impl/binary_hamming/neon.cpp
316
+ - vendor/faiss/faiss/impl/binary_hamming/rvv.cpp
285
317
  - vendor/faiss/faiss/impl/expanded_scanners.h
318
+ - vendor/faiss/faiss/impl/fast_scan/FastScanDistancePostProcessing.h
319
+ - vendor/faiss/faiss/impl/fast_scan/LookupTableScaler.h
320
+ - vendor/faiss/faiss/impl/fast_scan/accumulate_loops.h
321
+ - vendor/faiss/faiss/impl/fast_scan/accumulate_loops_512.h
322
+ - vendor/faiss/faiss/impl/fast_scan/decompose_qbs.h
323
+ - vendor/faiss/faiss/impl/fast_scan/dispatching.h
324
+ - vendor/faiss/faiss/impl/fast_scan/fast_scan.cpp
325
+ - vendor/faiss/faiss/impl/fast_scan/fast_scan.h
326
+ - vendor/faiss/faiss/impl/fast_scan/impl-avx2.cpp
327
+ - vendor/faiss/faiss/impl/fast_scan/impl-avx512.cpp
328
+ - vendor/faiss/faiss/impl/fast_scan/impl-neon.cpp
329
+ - vendor/faiss/faiss/impl/fast_scan/impl-riscv.cpp
330
+ - vendor/faiss/faiss/impl/fast_scan/kernels_simd256.h
331
+ - vendor/faiss/faiss/impl/fast_scan/kernels_simd512.h
332
+ - vendor/faiss/faiss/impl/fast_scan/rabitq_dispatching.h
333
+ - vendor/faiss/faiss/impl/fast_scan/rabitq_result_handler.h
334
+ - vendor/faiss/faiss/impl/fast_scan/simd_result_handlers.h
335
+ - vendor/faiss/faiss/impl/hnsw/LockVector.cpp
336
+ - vendor/faiss/faiss/impl/hnsw/LockVector.h
337
+ - vendor/faiss/faiss/impl/hnsw/MinimaxHeap.cpp
338
+ - vendor/faiss/faiss/impl/hnsw/MinimaxHeap.h
339
+ - vendor/faiss/faiss/impl/hnsw/avx2.cpp
340
+ - vendor/faiss/faiss/impl/hnsw/avx512.cpp
286
341
  - vendor/faiss/faiss/impl/index_read.cpp
287
342
  - vendor/faiss/faiss/impl/index_read_utils.h
288
343
  - vendor/faiss/faiss/impl/index_write.cpp
@@ -297,15 +352,20 @@ files:
297
352
  - vendor/faiss/faiss/impl/mapped_io.h
298
353
  - vendor/faiss/faiss/impl/maybe_owned_vector.h
299
354
  - vendor/faiss/faiss/impl/platform_macros.h
300
- - vendor/faiss/faiss/impl/pq4_fast_scan.cpp
301
- - vendor/faiss/faiss/impl/pq4_fast_scan.h
302
- - vendor/faiss/faiss/impl/pq4_fast_scan_search_1.cpp
303
- - vendor/faiss/faiss/impl/pq4_fast_scan_search_qbs.cpp
304
- - vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-avx2.cpp
305
- - vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-avx512.cpp
355
+ - vendor/faiss/faiss/impl/pq_code_distance/IVFPQScanner_impl.h
356
+ - vendor/faiss/faiss/impl/pq_code_distance/IVFPQ_QueryTables.cpp
357
+ - vendor/faiss/faiss/impl/pq_code_distance/IVFPQ_QueryTables.h
358
+ - vendor/faiss/faiss/impl/pq_code_distance/PQDistanceComputer_impl.h
359
+ - vendor/faiss/faiss/impl/pq_code_distance/avx2.cpp
360
+ - vendor/faiss/faiss/impl/pq_code_distance/avx512.cpp
361
+ - vendor/faiss/faiss/impl/pq_code_distance/neon.cpp
362
+ - vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-avx2.h
363
+ - vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-avx512.h
306
364
  - vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-generic.cpp
365
+ - vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-generic.h
307
366
  - vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-inl.h
308
367
  - vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-sve.cpp
368
+ - vendor/faiss/faiss/impl/pq_code_distance/rvv.cpp
309
369
  - vendor/faiss/faiss/impl/residual_quantizer_encode_steps.cpp
310
370
  - vendor/faiss/faiss/impl/residual_quantizer_encode_steps.h
311
371
  - vendor/faiss/faiss/impl/scalar_quantizer/codecs.h
@@ -317,10 +377,17 @@ files:
317
377
  - vendor/faiss/faiss/impl/scalar_quantizer/sq-avx512.cpp
318
378
  - vendor/faiss/faiss/impl/scalar_quantizer/sq-dispatch.h
319
379
  - vendor/faiss/faiss/impl/scalar_quantizer/sq-neon.cpp
380
+ - vendor/faiss/faiss/impl/scalar_quantizer/sq-rvv.cpp
320
381
  - vendor/faiss/faiss/impl/scalar_quantizer/training.cpp
321
382
  - vendor/faiss/faiss/impl/scalar_quantizer/training.h
322
383
  - vendor/faiss/faiss/impl/simd_dispatch.h
323
- - vendor/faiss/faiss/impl/simd_result_handlers.h
384
+ - vendor/faiss/faiss/impl/simdlib/simdlib.h
385
+ - vendor/faiss/faiss/impl/simdlib/simdlib_avx2.h
386
+ - vendor/faiss/faiss/impl/simdlib/simdlib_avx512.h
387
+ - vendor/faiss/faiss/impl/simdlib/simdlib_dispatch.h
388
+ - vendor/faiss/faiss/impl/simdlib/simdlib_emulated.h
389
+ - vendor/faiss/faiss/impl/simdlib/simdlib_neon.h
390
+ - vendor/faiss/faiss/impl/simdlib/simdlib_ppc64.h
324
391
  - vendor/faiss/faiss/impl/svs_io.cpp
325
392
  - vendor/faiss/faiss/impl/svs_io.h
326
393
  - vendor/faiss/faiss/impl/zerocopy_io.cpp
@@ -343,6 +410,12 @@ files:
343
410
  - vendor/faiss/faiss/svs/IndexSVSFaissUtils.h
344
411
  - vendor/faiss/faiss/svs/IndexSVSFlat.cpp
345
412
  - vendor/faiss/faiss/svs/IndexSVSFlat.h
413
+ - vendor/faiss/faiss/svs/IndexSVSIVF.cpp
414
+ - vendor/faiss/faiss/svs/IndexSVSIVF.h
415
+ - vendor/faiss/faiss/svs/IndexSVSIVFLVQ.cpp
416
+ - vendor/faiss/faiss/svs/IndexSVSIVFLVQ.h
417
+ - vendor/faiss/faiss/svs/IndexSVSIVFLeanVec.cpp
418
+ - vendor/faiss/faiss/svs/IndexSVSIVFLeanVec.h
346
419
  - vendor/faiss/faiss/svs/IndexSVSVamana.cpp
347
420
  - vendor/faiss/faiss/svs/IndexSVSVamana.h
348
421
  - vendor/faiss/faiss/svs/IndexSVSVamanaLVQ.cpp
@@ -356,23 +429,18 @@ files:
356
429
  - vendor/faiss/faiss/utils/NeuralNet.h
357
430
  - vendor/faiss/faiss/utils/WorkerThread.cpp
358
431
  - vendor/faiss/faiss/utils/WorkerThread.h
359
- - vendor/faiss/faiss/utils/approx_topk/approx_topk.h
360
- - vendor/faiss/faiss/utils/approx_topk/avx2-inl.h
361
- - vendor/faiss/faiss/utils/approx_topk/generic.h
362
- - vendor/faiss/faiss/utils/approx_topk/mode.h
363
432
  - vendor/faiss/faiss/utils/approx_topk_hamming/approx_topk_hamming.h
364
433
  - vendor/faiss/faiss/utils/bf16.h
365
434
  - vendor/faiss/faiss/utils/distances.cpp
366
435
  - vendor/faiss/faiss/utils/distances.h
367
436
  - vendor/faiss/faiss/utils/distances_dispatch.h
368
437
  - vendor/faiss/faiss/utils/distances_fused/avx512.cpp
369
- - vendor/faiss/faiss/utils/distances_fused/avx512.h
370
438
  - vendor/faiss/faiss/utils/distances_fused/distances_fused.cpp
371
439
  - vendor/faiss/faiss/utils/distances_fused/distances_fused.h
372
440
  - vendor/faiss/faiss/utils/distances_fused/simdlib_based.cpp
373
- - vendor/faiss/faiss/utils/distances_fused/simdlib_based.h
441
+ - vendor/faiss/faiss/utils/distances_fused/simdlib_based_neon.cpp
442
+ - vendor/faiss/faiss/utils/distances_fused/simdlib_kernel-inl.h
374
443
  - vendor/faiss/faiss/utils/distances_simd.cpp
375
- - vendor/faiss/faiss/utils/extra_distances-inl.h
376
444
  - vendor/faiss/faiss/utils/extra_distances.cpp
377
445
  - vendor/faiss/faiss/utils/extra_distances.h
378
446
  - vendor/faiss/faiss/utils/fp16-arm.h
@@ -382,15 +450,22 @@ files:
382
450
  - vendor/faiss/faiss/utils/hamming-inl.h
383
451
  - vendor/faiss/faiss/utils/hamming.cpp
384
452
  - vendor/faiss/faiss/utils/hamming.h
385
- - vendor/faiss/faiss/utils/hamming_distance/avx2-inl.h
386
- - vendor/faiss/faiss/utils/hamming_distance/avx512-inl.h
387
453
  - vendor/faiss/faiss/utils/hamming_distance/common.h
388
- - vendor/faiss/faiss/utils/hamming_distance/generic-inl.h
389
- - vendor/faiss/faiss/utils/hamming_distance/hamdis-inl.h
390
- - vendor/faiss/faiss/utils/hamming_distance/neon-inl.h
454
+ - vendor/faiss/faiss/utils/hamming_distance/hamming_avx2.cpp
455
+ - vendor/faiss/faiss/utils/hamming_distance/hamming_avx512.cpp
456
+ - vendor/faiss/faiss/utils/hamming_distance/hamming_computer-avx2.h
457
+ - vendor/faiss/faiss/utils/hamming_distance/hamming_computer-avx512.h
458
+ - vendor/faiss/faiss/utils/hamming_distance/hamming_computer-generic.h
459
+ - vendor/faiss/faiss/utils/hamming_distance/hamming_computer-neon.h
460
+ - vendor/faiss/faiss/utils/hamming_distance/hamming_computer-rvv.h
461
+ - vendor/faiss/faiss/utils/hamming_distance/hamming_computer.h
462
+ - vendor/faiss/faiss/utils/hamming_distance/hamming_impl.h
463
+ - vendor/faiss/faiss/utils/hamming_distance/hamming_neon.cpp
464
+ - vendor/faiss/faiss/utils/hamming_distance/hamming_rvv.cpp
391
465
  - vendor/faiss/faiss/utils/ordered_key_value.h
392
466
  - vendor/faiss/faiss/utils/partitioning.cpp
393
467
  - vendor/faiss/faiss/utils/partitioning.h
468
+ - vendor/faiss/faiss/utils/popcount.h
394
469
  - vendor/faiss/faiss/utils/pq_code_distance.h
395
470
  - vendor/faiss/faiss/utils/prefetch.h
396
471
  - vendor/faiss/faiss/utils/quantize_lut.cpp
@@ -398,20 +473,30 @@ files:
398
473
  - vendor/faiss/faiss/utils/rabitq_simd.h
399
474
  - vendor/faiss/faiss/utils/random.cpp
400
475
  - vendor/faiss/faiss/utils/random.h
476
+ - vendor/faiss/faiss/utils/simd_impl/IVFFlatScanner-inl.h
401
477
  - vendor/faiss/faiss/utils/simd_impl/distances_aarch64.cpp
402
478
  - vendor/faiss/faiss/utils/simd_impl/distances_arm_sve.cpp
403
479
  - vendor/faiss/faiss/utils/simd_impl/distances_autovec-inl.h
404
480
  - vendor/faiss/faiss/utils/simd_impl/distances_avx2.cpp
405
481
  - vendor/faiss/faiss/utils/simd_impl/distances_avx512.cpp
482
+ - vendor/faiss/faiss/utils/simd_impl/distances_rvv.cpp
483
+ - vendor/faiss/faiss/utils/simd_impl/distances_simdlib256.h
406
484
  - vendor/faiss/faiss/utils/simd_impl/distances_sse-inl.h
485
+ - vendor/faiss/faiss/utils/simd_impl/exhaustive_L2sqr_blas_cmax.h
486
+ - vendor/faiss/faiss/utils/simd_impl/hamming_impl.h
487
+ - vendor/faiss/faiss/utils/simd_impl/partitioning_avx2.cpp
488
+ - vendor/faiss/faiss/utils/simd_impl/partitioning_neon.cpp
489
+ - vendor/faiss/faiss/utils/simd_impl/partitioning_simdlib256.h
490
+ - vendor/faiss/faiss/utils/simd_impl/rabitq_avx2.cpp
491
+ - vendor/faiss/faiss/utils/simd_impl/rabitq_avx512.cpp
492
+ - vendor/faiss/faiss/utils/simd_impl/rabitq_neon.cpp
493
+ - vendor/faiss/faiss/utils/simd_impl/rabitq_rvv.cpp
494
+ - vendor/faiss/faiss/utils/simd_impl/super_kmeans_dispatch.h
495
+ - vendor/faiss/faiss/utils/simd_impl/super_kmeans_kernels.h
496
+ - vendor/faiss/faiss/utils/simd_impl/super_kmeans_kernels_avx2.cpp
497
+ - vendor/faiss/faiss/utils/simd_impl/super_kmeans_kernels_avx512.cpp
407
498
  - vendor/faiss/faiss/utils/simd_levels.cpp
408
499
  - vendor/faiss/faiss/utils/simd_levels.h
409
- - vendor/faiss/faiss/utils/simdlib.h
410
- - vendor/faiss/faiss/utils/simdlib_avx2.h
411
- - vendor/faiss/faiss/utils/simdlib_avx512.h
412
- - vendor/faiss/faiss/utils/simdlib_emulated.h
413
- - vendor/faiss/faiss/utils/simdlib_neon.h
414
- - vendor/faiss/faiss/utils/simdlib_ppc64.h
415
500
  - vendor/faiss/faiss/utils/sorting.cpp
416
501
  - vendor/faiss/faiss/utils/sorting.h
417
502
  - vendor/faiss/faiss/utils/transpose/transpose-avx2-inl.h
@@ -436,7 +521,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
436
521
  - !ruby/object:Gem::Version
437
522
  version: '0'
438
523
  requirements: []
439
- rubygems_version: 4.0.6
524
+ rubygems_version: 4.0.10
440
525
  specification_version: 4
441
526
  summary: Efficient similarity search and clustering for Ruby
442
527
  test_files: []
@@ -1,29 +0,0 @@
1
- /*
2
- * Copyright (c) Meta Platforms, Inc. and affiliates.
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
-
8
- #include <faiss/impl/RaBitQStats.h>
9
-
10
- namespace faiss {
11
-
12
- // NOLINTNEXTLINE(facebook-avoid-non-const-global-variables)
13
- RaBitQStats rabitq_stats;
14
-
15
- void RaBitQStats::reset() {
16
- n_1bit_evaluations = 0;
17
- n_multibit_evaluations = 0;
18
- }
19
-
20
- double RaBitQStats::skip_percentage() const {
21
- const size_t copy_n_1bit_evaluations = n_1bit_evaluations;
22
- const size_t copy_n_multibit_evaluations = n_multibit_evaluations;
23
- return copy_n_1bit_evaluations > 0
24
- ? 100.0 * (copy_n_1bit_evaluations - copy_n_multibit_evaluations) /
25
- copy_n_1bit_evaluations
26
- : 0.0;
27
- }
28
-
29
- } // namespace faiss
@@ -1,56 +0,0 @@
1
- /*
2
- * Copyright (c) Meta Platforms, Inc. and affiliates.
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
-
8
- #pragma once
9
-
10
- #include <faiss/impl/platform_macros.h>
11
- #include <cstddef>
12
-
13
- namespace faiss {
14
-
15
- /// Statistics for RaBitQ multi-bit two-stage search.
16
- ///
17
- /// These stats are ONLY collected for multi-bit mode (nb_bits > 1).
18
- /// In 1-bit mode, there is no two-stage filtering - all candidates are
19
- /// evaluated with a single distance computation, so there is nothing
20
- /// meaningful to track. For 1-bit mode, both counters remain 0.
21
- ///
22
- /// Multi-bit mode uses a two-stage search:
23
- /// Stage 1: Compute 1-bit lower bound distance for all candidates
24
- /// Stage 2: Compute full multi-bit distance only for promising candidates
25
- ///
26
- /// The skip_percentage() metric measures filtering effectiveness:
27
- /// how many candidates were filtered out by the 1-bit lower bound
28
- /// without needing the more expensive multi-bit distance computation.
29
- ///
30
- /// WARNING: Statistics are not robust to internal threading nor to
31
- /// concurrent RaBitQ searches. Use these values in a single-threaded
32
- /// context to accurately gauge RaBitQ's filtering effectiveness.
33
- /// Call reset() before search, then read stats after search completes.
34
- struct RaBitQStats {
35
- /// Number of candidates evaluated using 1-bit (lower bound) distance.
36
- /// This is the first stage of two-stage search in multi-bit mode.
37
- /// Always 0 in 1-bit mode (stats not tracked).
38
- size_t n_1bit_evaluations = 0;
39
-
40
- /// Number of candidates that passed 1-bit filtering and required
41
- /// full multi-bit distance computation (second stage).
42
- /// Always 0 in 1-bit mode (stats not tracked).
43
- size_t n_multibit_evaluations = 0;
44
-
45
- void reset();
46
-
47
- /// Compute percentage of candidates skipped (filtered out by 1-bit stage).
48
- /// Returns 0 if no candidates were evaluated (including 1-bit mode).
49
- double skip_percentage() const;
50
- };
51
-
52
- /// Global stats for RaBitQ indexes
53
- // NOLINTNEXTLINE(facebook-avoid-non-const-global-variables)
54
- FAISS_API extern RaBitQStats rabitq_stats;
55
-
56
- } // namespace faiss
@@ -1,224 +0,0 @@
1
- /*
2
- * Copyright (c) Meta Platforms, Inc. and affiliates.
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
-
8
- #pragma once
9
-
10
- #include <cstdint>
11
- #include <cstdlib>
12
-
13
- #include <faiss/impl/CodePacker.h>
14
-
15
- /** PQ4 SIMD packing and accumulation functions
16
- *
17
- * The basic kernel accumulates nq query vectors with bbs = nb * 2 * 16 vectors
18
- * and produces an output matrix for that. It is interesting for nq * nb <= 4,
19
- * otherwise register spilling becomes too large.
20
- *
21
- * The implementation of these functions is spread over 3 cpp files to reduce
22
- * parallel compile times. Templates are instantiated explicitly.
23
- */
24
-
25
- namespace faiss {
26
-
27
- struct NormTableScaler;
28
- struct SIMDResultHandler;
29
-
30
- /** Pack codes for consumption by the SIMD kernels.
31
- * The unused bytes are set to 0.
32
- *
33
- * @param codes input codes, size (ntotal, ceil(M / 2))
34
- * @param ntotal number of input codes
35
- * @param nb output number of codes (ntotal rounded up to a multiple of
36
- * bbs)
37
- * @param nsq number of sub-quantizers (=M rounded up to a multiple of 2)
38
- * @param bbs size of database blocks (multiple of 32)
39
- * @param blocks output array, size nb * nsq / 2.
40
- * @param code_stride optional stride between consecutive codes (0 = use
41
- default (M + 1) / 2)
42
- */
43
- void pq4_pack_codes(
44
- const uint8_t* codes,
45
- size_t ntotal,
46
- size_t M,
47
- size_t nb,
48
- size_t bbs,
49
- size_t nsq,
50
- uint8_t* blocks,
51
- size_t code_stride = 0);
52
-
53
- /** Same as pack_codes but write in a given range of the output,
54
- * leaving the rest untouched. Assumes allocated entries are 0 on input.
55
- *
56
- * @param codes input codes, size (i1 - i0, ceil(M / 2))
57
- * @param i0 first output code to write
58
- * @param i1 last output code to write
59
- * @param blocks output array, size at least ceil(i1 / bbs) * bbs * nsq / 2
60
- * @param code_stride optional stride between consecutive codes (0 = use
61
- * default (M + 1) / 2)
62
- * @param block_stride stride in bytes between consecutive blocks.
63
- */
64
- void pq4_pack_codes_range(
65
- const uint8_t* codes,
66
- size_t M,
67
- size_t i0,
68
- size_t i1,
69
- size_t bbs,
70
- size_t nsq,
71
- uint8_t* blocks,
72
- size_t code_stride,
73
- size_t block_stride);
74
-
75
- /** get a single element from a packed codes table
76
- *
77
- * @param vector_id vector id
78
- * @param sq subquantizer (< nsq)
79
- */
80
- uint8_t pq4_get_packed_element(
81
- const uint8_t* data,
82
- size_t bbs,
83
- size_t nsq,
84
- size_t vector_id,
85
- size_t sq);
86
-
87
- /** set a single element "code" into a packed codes table
88
- *
89
- * @param vector_id vector id
90
- * @param sq subquantizer (< nsq)
91
- */
92
- void pq4_set_packed_element(
93
- uint8_t* data,
94
- uint8_t code,
95
- size_t bbs,
96
- size_t nsq,
97
- size_t vector_id,
98
- size_t sq);
99
-
100
- /** CodePacker API for the PQ4 fast-scan */
101
- struct CodePackerPQ4 : CodePacker {
102
- size_t nsq;
103
-
104
- CodePackerPQ4(size_t nsq, size_t bbs);
105
-
106
- CodePacker* clone() const final;
107
-
108
- void pack_1(const uint8_t* flat_code, size_t offset, uint8_t* block)
109
- const final;
110
- void unpack_1(const uint8_t* block, size_t offset, uint8_t* flat_code)
111
- const final;
112
- };
113
-
114
- /** Pack Look-up table for consumption by the kernel.
115
- *
116
- * @param nq number of queries
117
- * @param nsq number of sub-quantizers (multiple of 2)
118
- * @param src input array, size (nq, 16)
119
- * @param dest output array, size (nq, 16)
120
- */
121
- void pq4_pack_LUT(int nq, int nsq, const uint8_t* src, uint8_t* dest);
122
-
123
- /** Loop over database elements and accumulate results into result handler
124
- *
125
- * @param nq number of queries
126
- * @param nb number of database elements
127
- * @param bbs size of database blocks (multiple of 32)
128
- * @param nsq number of sub-quantizers (multiple of 2)
129
- * @param codes packed codes array
130
- * @param LUT packed look-up table
131
- * @param scaler scaler to scale the encoded norm
132
- * @param block_stride stride in bytes between consecutive blocks.
133
- */
134
- void pq4_accumulate_loop(
135
- int nq,
136
- size_t nb,
137
- int bbs,
138
- int nsq,
139
- const uint8_t* codes,
140
- const uint8_t* LUT,
141
- SIMDResultHandler& res,
142
- const NormTableScaler* scaler,
143
- size_t block_stride);
144
-
145
- /* qbs versions, supported only for bbs=32.
146
- *
147
- * The kernel function runs the kernel for *several* query blocks
148
- * and bbs database vectors. The sizes of the blocks are encoded in qbs as
149
- * base-16 digits.
150
- *
151
- * For example, qbs = 0x1223 means that the kernel will be run 4 times, the
152
- * first time with 3 query vectors, second time with 2 query vectors, then 2
153
- * vectors again and finally with 1 query vector. The output block will thus be
154
- * nq = 3 + 2 + 2 + 1 = 6 queries. For a given total block size, the optimal
155
- * decomposition into sub-blocks (measured empirically) is given by
156
- * preferred_qbs().
157
- */
158
-
159
- /* compute the number of queries from a base-16 decomposition */
160
- int pq4_qbs_to_nq(int qbs);
161
-
162
- /** return the preferred decomposition in blocks for a nb of queries. */
163
- int pq4_preferred_qbs(int nq);
164
-
165
- /** Pack Look-up table for consumption by the kernel.
166
- *
167
- * @param qbs 4-bit encoded number of query blocks, the total number of
168
- * queries handled (nq) is deduced from it
169
- * @param nsq number of sub-quantizers (multiple of 2)
170
- * @param src input array, size (nq, 16)
171
- * @param dest output array, size (nq, 16)
172
- * @return nq
173
- */
174
- int pq4_pack_LUT_qbs(int fqbs, int nsq, const uint8_t* src, uint8_t* dest);
175
-
176
- /** Same as pq4_pack_LUT_qbs, except the source vectors are remapped with q_map
177
- */
178
- int pq4_pack_LUT_qbs_q_map(
179
- int qbs,
180
- int nsq,
181
- const uint8_t* src,
182
- const int* q_map,
183
- uint8_t* dest);
184
-
185
- /** Run accumulation loop.
186
- *
187
- * @param qbs 4-bit encoded number of queries
188
- * @param nb number of database codes (multiple of bbs)
189
- * @param nsq number of sub-quantizers
190
- * @param codes encoded database vectors (packed)
191
- * @param LUT look-up table (packed)
192
- * @param res call-back for the results
193
- * @param scaler scaler to scale the encoded norm
194
- * @param block_stride stride in bytes between consecutive blocks.
195
- */
196
- void pq4_accumulate_loop_qbs(
197
- int qbs,
198
- size_t nb,
199
- int nsq,
200
- const uint8_t* codes,
201
- const uint8_t* LUT,
202
- SIMDResultHandler& res,
203
- const NormTableScaler* scaler,
204
- size_t block_stride);
205
-
206
- /** Wrapper of pq4_accumulate_loop_qbs using simple StoreResultHandler
207
- * and DummyScaler
208
- *
209
- * @param nq number of queries
210
- * @param ntotal2 number of database elements (multiple of 32)
211
- * @param nsq number of sub-quantizers (muliple of 2)
212
- * @param codes packed codes array
213
- * @param LUT packed look-up table
214
- * @param accu array to store the results
215
- */
216
- void accumulate_to_mem(
217
- int nq,
218
- size_t ntotal2,
219
- int nsq,
220
- const uint8_t* codes,
221
- const uint8_t* LUT,
222
- uint16_t* accu);
223
-
224
- } // namespace faiss