faiss 0.6.0 → 0.6.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 (378) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +8 -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 +88 -97
  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 +89 -417
  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 +374 -206
  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 +467 -364
  41. data/vendor/faiss/faiss/IndexIVF.h +33 -12
  42. data/vendor/faiss/faiss/IndexIVFAdditiveQuantizer.cpp +79 -76
  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 +39 -69
  48. data/vendor/faiss/faiss/IndexIVFFlat.h +32 -0
  49. data/vendor/faiss/faiss/IndexIVFFlatPanorama.cpp +56 -33
  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 +73 -846
  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 +23 -20
  56. data/vendor/faiss/faiss/IndexIVFRaBitQ.cpp +30 -52
  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 +38 -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 +150 -20
  84. data/vendor/faiss/faiss/IndexScalarQuantizer.h +10 -0
  85. data/vendor/faiss/faiss/IndexShards.cpp +10 -9
  86. data/vendor/faiss/faiss/IndexShardsIVF.cpp +21 -15
  87. data/vendor/faiss/faiss/MatrixStats.cpp +5 -4
  88. data/vendor/faiss/faiss/MetaIndexes.cpp +19 -17
  89. data/vendor/faiss/faiss/MetaIndexes.h +1 -1
  90. data/vendor/faiss/faiss/MetricType.h +14 -7
  91. data/vendor/faiss/faiss/SuperKMeans.cpp +656 -0
  92. data/vendor/faiss/faiss/SuperKMeans.h +97 -0
  93. data/vendor/faiss/faiss/VectorTransform.cpp +237 -149
  94. data/vendor/faiss/faiss/VectorTransform.h +16 -16
  95. data/vendor/faiss/faiss/build.cpp +23 -0
  96. data/vendor/faiss/faiss/build.h +15 -0
  97. data/vendor/faiss/faiss/clone_index.cpp +48 -47
  98. data/vendor/faiss/faiss/cppcontrib/SaDecodeKernels.h +1 -1
  99. data/vendor/faiss/faiss/cppcontrib/sa_decode/Level2-avx2-inl.h +47 -47
  100. data/vendor/faiss/faiss/cppcontrib/sa_decode/Level2-inl.h +11 -0
  101. data/vendor/faiss/faiss/cppcontrib/sa_decode/Level2-neon-inl.h +902 -12
  102. data/vendor/faiss/faiss/cppcontrib/sa_decode/PQ-avx2-inl.h +38 -38
  103. data/vendor/faiss/faiss/cppcontrib/sa_decode/PQ-inl.h +11 -0
  104. data/vendor/faiss/faiss/cppcontrib/sa_decode/PQ-neon-inl.h +702 -10
  105. data/vendor/faiss/faiss/factory_tools.cpp +9 -0
  106. data/vendor/faiss/faiss/gpu/GpuIndexCagra.h +6 -5
  107. data/vendor/faiss/faiss/gpu/GpuResources.h +3 -2
  108. data/vendor/faiss/faiss/gpu/StandardGpuResources.cpp +15 -16
  109. data/vendor/faiss/faiss/gpu/StandardGpuResources.h +5 -4
  110. data/vendor/faiss/faiss/gpu/test/TestGpuIndexFlat.cpp +46 -0
  111. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFFlat.cpp +56 -0
  112. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFPQ.cpp +78 -1
  113. data/vendor/faiss/faiss/gpu/test/TestUtils.cpp +72 -0
  114. data/vendor/faiss/faiss/gpu/test/TestUtils.h +23 -0
  115. data/vendor/faiss/faiss/gpu/utils/CuvsFilterConvert.h +1 -1
  116. data/vendor/faiss/faiss/gpu/utils/CuvsUtils.h +21 -10
  117. data/vendor/faiss/faiss/gpu_metal/GpuIndexFlat.h +22 -0
  118. data/vendor/faiss/faiss/gpu_metal/MetalCloner.h +35 -0
  119. data/vendor/faiss/faiss/gpu_metal/MetalDistance.h +87 -0
  120. data/vendor/faiss/faiss/gpu_metal/MetalFlatKernels.h +40 -0
  121. data/vendor/faiss/faiss/gpu_metal/MetalIndex.h +58 -0
  122. data/vendor/faiss/faiss/gpu_metal/MetalIndexFlat.h +65 -0
  123. data/vendor/faiss/faiss/gpu_metal/MetalIndexIVFFlat.h +181 -0
  124. data/vendor/faiss/faiss/gpu_metal/MetalKernels.h +111 -0
  125. data/vendor/faiss/faiss/gpu_metal/MetalPythonBridge.h +45 -0
  126. data/vendor/faiss/faiss/gpu_metal/MetalResources.h +79 -0
  127. data/vendor/faiss/faiss/gpu_metal/StandardMetalResources.h +35 -0
  128. data/vendor/faiss/faiss/gpu_metal/impl/MetalIVFFlat.h +193 -0
  129. data/vendor/faiss/faiss/impl/AdSampling.cpp +103 -0
  130. data/vendor/faiss/faiss/impl/AdSampling.h +35 -0
  131. data/vendor/faiss/faiss/impl/AdditiveQuantizer.cpp +29 -25
  132. data/vendor/faiss/faiss/impl/AdditiveQuantizer.h +1 -0
  133. data/vendor/faiss/faiss/impl/AuxIndexStructures.cpp +10 -9
  134. data/vendor/faiss/faiss/impl/AuxIndexStructures.h +3 -0
  135. data/vendor/faiss/faiss/impl/ClusteringHelpers.cpp +244 -0
  136. data/vendor/faiss/faiss/impl/ClusteringHelpers.h +94 -0
  137. data/vendor/faiss/faiss/impl/ClusteringInitialization.cpp +16 -16
  138. data/vendor/faiss/faiss/impl/CodePacker.cpp +3 -3
  139. data/vendor/faiss/faiss/impl/CodePackerRaBitQ.cpp +1 -1
  140. data/vendor/faiss/faiss/impl/DistanceComputer.h +8 -8
  141. data/vendor/faiss/faiss/impl/FaissAssert.h +6 -3
  142. data/vendor/faiss/faiss/impl/FaissException.h +50 -3
  143. data/vendor/faiss/faiss/impl/HNSW.cpp +639 -507
  144. data/vendor/faiss/faiss/impl/HNSW.h +61 -44
  145. data/vendor/faiss/faiss/impl/IDSelector.cpp +15 -11
  146. data/vendor/faiss/faiss/impl/IDSelector.h +8 -8
  147. data/vendor/faiss/faiss/impl/InvertedListScannerStats.h +26 -0
  148. data/vendor/faiss/faiss/impl/LocalSearchQuantizer.cpp +82 -77
  149. data/vendor/faiss/faiss/impl/NNDescent.cpp +62 -25
  150. data/vendor/faiss/faiss/impl/NNDescent.h +6 -2
  151. data/vendor/faiss/faiss/impl/NSG.cpp +53 -32
  152. data/vendor/faiss/faiss/impl/NSG.h +4 -4
  153. data/vendor/faiss/faiss/impl/Panorama.cpp +23 -6
  154. data/vendor/faiss/faiss/impl/Panorama.h +269 -87
  155. data/vendor/faiss/faiss/impl/PdxLayout.cpp +93 -0
  156. data/vendor/faiss/faiss/impl/PdxLayout.h +41 -0
  157. data/vendor/faiss/faiss/impl/PolysemousTraining.cpp +46 -32
  158. data/vendor/faiss/faiss/impl/PolysemousTraining.h +3 -3
  159. data/vendor/faiss/faiss/impl/ProductAdditiveQuantizer.cpp +35 -35
  160. data/vendor/faiss/faiss/impl/ProductQuantizer-inl.h +21 -16
  161. data/vendor/faiss/faiss/impl/ProductQuantizer.cpp +55 -25
  162. data/vendor/faiss/faiss/impl/Quantizer.h +2 -2
  163. data/vendor/faiss/faiss/impl/RaBitQUtils.cpp +55 -49
  164. data/vendor/faiss/faiss/impl/RaBitQUtils.h +65 -0
  165. data/vendor/faiss/faiss/impl/RaBitQuantizer.cpp +302 -283
  166. data/vendor/faiss/faiss/impl/ResidualQuantizer.cpp +26 -23
  167. data/vendor/faiss/faiss/impl/ResidualQuantizer.h +1 -1
  168. data/vendor/faiss/faiss/impl/ResultHandler.h +100 -75
  169. data/vendor/faiss/faiss/impl/ScalarQuantizer.cpp +318 -7
  170. data/vendor/faiss/faiss/impl/ScalarQuantizer.h +77 -1
  171. data/vendor/faiss/faiss/impl/ThreadedIndex-inl.h +14 -11
  172. data/vendor/faiss/faiss/impl/VisitedTable.cpp +10 -10
  173. data/vendor/faiss/faiss/impl/VisitedTable.h +70 -28
  174. data/vendor/faiss/faiss/impl/approx_topk/approx_topk.h +276 -0
  175. data/vendor/faiss/faiss/impl/approx_topk/avx2.cpp +68 -0
  176. data/vendor/faiss/faiss/{utils → impl}/approx_topk/generic.h +15 -8
  177. data/vendor/faiss/faiss/impl/approx_topk/neon.cpp +68 -0
  178. data/vendor/faiss/faiss/impl/approx_topk/rq_beam_search_tab-inl.h +169 -0
  179. data/vendor/faiss/faiss/impl/approx_topk/rq_beam_search_tab.h +117 -0
  180. data/vendor/faiss/faiss/impl/approx_topk/simdlib256-inl.h +146 -0
  181. data/vendor/faiss/faiss/impl/binary_hamming/IndexBinaryHNSW_impl.h +73 -0
  182. data/vendor/faiss/faiss/impl/binary_hamming/IndexBinaryHash_impl.h +270 -0
  183. data/vendor/faiss/faiss/impl/binary_hamming/IndexBinaryIVF_impl.h +460 -0
  184. data/vendor/faiss/faiss/impl/binary_hamming/IndexIVFSpectralHash_impl.h +159 -0
  185. data/vendor/faiss/faiss/impl/binary_hamming/IndexPQ_impl.h +92 -0
  186. data/vendor/faiss/faiss/impl/binary_hamming/avx2.cpp +26 -0
  187. data/vendor/faiss/faiss/impl/binary_hamming/avx512.cpp +26 -0
  188. data/vendor/faiss/faiss/impl/binary_hamming/dispatch.h +143 -0
  189. data/vendor/faiss/faiss/impl/binary_hamming/neon.cpp +26 -0
  190. data/vendor/faiss/faiss/impl/binary_hamming/rvv.cpp +26 -0
  191. data/vendor/faiss/faiss/impl/expanded_scanners.h +8 -3
  192. data/vendor/faiss/faiss/impl/{FastScanDistancePostProcessing.h → fast_scan/FastScanDistancePostProcessing.h} +13 -6
  193. data/vendor/faiss/faiss/impl/{LookupTableScaler.h → fast_scan/LookupTableScaler.h} +16 -5
  194. data/vendor/faiss/faiss/impl/fast_scan/accumulate_loops.h +237 -0
  195. data/vendor/faiss/faiss/impl/fast_scan/accumulate_loops_512.h +185 -0
  196. data/vendor/faiss/faiss/impl/fast_scan/decompose_qbs.h +229 -0
  197. data/vendor/faiss/faiss/impl/fast_scan/dispatching.h +270 -0
  198. data/vendor/faiss/faiss/impl/{pq4_fast_scan.cpp → fast_scan/fast_scan.cpp} +169 -2
  199. data/vendor/faiss/faiss/impl/fast_scan/fast_scan.h +341 -0
  200. data/vendor/faiss/faiss/impl/fast_scan/impl-avx2.cpp +36 -0
  201. data/vendor/faiss/faiss/impl/fast_scan/impl-avx512.cpp +40 -0
  202. data/vendor/faiss/faiss/impl/fast_scan/impl-neon.cpp +120 -0
  203. data/vendor/faiss/faiss/impl/fast_scan/impl-riscv.cpp +104 -0
  204. data/vendor/faiss/faiss/impl/fast_scan/kernels_simd256.h +213 -0
  205. data/vendor/faiss/faiss/impl/{pq4_fast_scan_search_qbs.cpp → fast_scan/kernels_simd512.h} +26 -356
  206. data/vendor/faiss/faiss/impl/fast_scan/rabitq_dispatching.h +90 -0
  207. data/vendor/faiss/faiss/impl/fast_scan/rabitq_result_handler.h +108 -0
  208. data/vendor/faiss/faiss/impl/{simd_result_handlers.h → fast_scan/simd_result_handlers.h} +282 -134
  209. data/vendor/faiss/faiss/impl/hnsw/LockVector.cpp +54 -0
  210. data/vendor/faiss/faiss/impl/hnsw/LockVector.h +64 -0
  211. data/vendor/faiss/faiss/impl/hnsw/MinimaxHeap.cpp +83 -0
  212. data/vendor/faiss/faiss/impl/hnsw/MinimaxHeap.h +113 -0
  213. data/vendor/faiss/faiss/impl/hnsw/avx2.cpp +150 -0
  214. data/vendor/faiss/faiss/impl/hnsw/avx512.cpp +142 -0
  215. data/vendor/faiss/faiss/impl/index_read.cpp +1227 -79
  216. data/vendor/faiss/faiss/impl/index_read_utils.h +1 -1
  217. data/vendor/faiss/faiss/impl/index_write.cpp +96 -13
  218. data/vendor/faiss/faiss/impl/io.cpp +6 -6
  219. data/vendor/faiss/faiss/impl/io_macros.h +58 -16
  220. data/vendor/faiss/faiss/impl/kmeans1d.cpp +10 -10
  221. data/vendor/faiss/faiss/impl/lattice_Zn.cpp +37 -23
  222. data/vendor/faiss/faiss/impl/lattice_Zn.h +6 -6
  223. data/vendor/faiss/faiss/impl/mapped_io.cpp +6 -6
  224. data/vendor/faiss/faiss/impl/platform_macros.h +15 -4
  225. data/vendor/faiss/faiss/impl/pq_code_distance/IVFPQScanner_impl.h +549 -0
  226. data/vendor/faiss/faiss/impl/pq_code_distance/IVFPQ_QueryTables.cpp +245 -0
  227. data/vendor/faiss/faiss/impl/pq_code_distance/IVFPQ_QueryTables.h +105 -0
  228. data/vendor/faiss/faiss/impl/pq_code_distance/PQDistanceComputer_impl.h +106 -0
  229. data/vendor/faiss/faiss/impl/pq_code_distance/avx2.cpp +23 -0
  230. data/vendor/faiss/faiss/impl/pq_code_distance/avx512.cpp +23 -0
  231. data/vendor/faiss/faiss/impl/pq_code_distance/neon.cpp +23 -0
  232. data/vendor/faiss/faiss/impl/pq_code_distance/{pq_code_distance-avx2.cpp → pq_code_distance-avx2.h} +9 -13
  233. data/vendor/faiss/faiss/impl/pq_code_distance/{pq_code_distance-avx512.cpp → pq_code_distance-avx512.h} +9 -57
  234. data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-generic.cpp +45 -107
  235. data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-generic.h +96 -0
  236. data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-inl.h +274 -5
  237. data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-sve.cpp +10 -7
  238. data/vendor/faiss/faiss/impl/pq_code_distance/pq_scan_impl.h +105 -0
  239. data/vendor/faiss/faiss/impl/pq_code_distance/rvv.cpp +70 -0
  240. data/vendor/faiss/faiss/impl/residual_quantizer_encode_steps.cpp +311 -477
  241. data/vendor/faiss/faiss/impl/residual_quantizer_encode_steps.h +1 -1
  242. data/vendor/faiss/faiss/impl/scalar_quantizer/codecs.h +1 -1
  243. data/vendor/faiss/faiss/impl/scalar_quantizer/distance_computers.h +9 -2
  244. data/vendor/faiss/faiss/impl/scalar_quantizer/quantizers.h +419 -19
  245. data/vendor/faiss/faiss/impl/scalar_quantizer/scanners.h +27 -1
  246. data/vendor/faiss/faiss/impl/scalar_quantizer/similarities.h +3 -3
  247. data/vendor/faiss/faiss/impl/scalar_quantizer/sq-avx2.cpp +387 -2
  248. data/vendor/faiss/faiss/impl/scalar_quantizer/sq-avx512-impl.h +553 -0
  249. data/vendor/faiss/faiss/impl/scalar_quantizer/sq-avx512-spr.cpp +559 -0
  250. data/vendor/faiss/faiss/impl/scalar_quantizer/sq-avx512.cpp +341 -2
  251. data/vendor/faiss/faiss/impl/scalar_quantizer/sq-dispatch.h +425 -3
  252. data/vendor/faiss/faiss/impl/scalar_quantizer/sq-neon.cpp +290 -2
  253. data/vendor/faiss/faiss/impl/scalar_quantizer/sq-rvv.cpp +337 -0
  254. data/vendor/faiss/faiss/impl/scalar_quantizer/training.cpp +192 -8
  255. data/vendor/faiss/faiss/impl/scalar_quantizer/training.h +12 -0
  256. data/vendor/faiss/faiss/impl/simd_dispatch.h +157 -66
  257. data/vendor/faiss/faiss/impl/simdlib/simdlib.h +57 -0
  258. data/vendor/faiss/faiss/{utils → impl/simdlib}/simdlib_avx2.h +264 -172
  259. data/vendor/faiss/faiss/impl/simdlib/simdlib_avx512.h +414 -0
  260. data/vendor/faiss/faiss/impl/simdlib/simdlib_dispatch.h +44 -0
  261. data/vendor/faiss/faiss/{utils → impl/simdlib}/simdlib_emulated.h +231 -166
  262. data/vendor/faiss/faiss/{utils → impl/simdlib}/simdlib_neon.h +270 -218
  263. data/vendor/faiss/faiss/{utils → impl/simdlib}/simdlib_ppc64.h +201 -160
  264. data/vendor/faiss/faiss/impl/svs_io.cpp +12 -3
  265. data/vendor/faiss/faiss/impl/svs_io.h +8 -2
  266. data/vendor/faiss/faiss/index_factory.cpp +90 -18
  267. data/vendor/faiss/faiss/index_io.h +40 -0
  268. data/vendor/faiss/faiss/invlists/BlockInvertedLists.cpp +66 -16
  269. data/vendor/faiss/faiss/invlists/DirectMap.cpp +28 -15
  270. data/vendor/faiss/faiss/invlists/DirectMap.h +4 -3
  271. data/vendor/faiss/faiss/invlists/InvertedLists.cpp +170 -86
  272. data/vendor/faiss/faiss/invlists/InvertedLists.h +88 -25
  273. data/vendor/faiss/faiss/invlists/InvertedListsIOHook.cpp +4 -4
  274. data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.cpp +13 -13
  275. data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.h +1 -1
  276. data/vendor/faiss/faiss/svs/IndexSVSFaissUtils.h +1 -1
  277. data/vendor/faiss/faiss/svs/IndexSVSFlat.cpp +2 -2
  278. data/vendor/faiss/faiss/svs/IndexSVSIVF.cpp +350 -0
  279. data/vendor/faiss/faiss/svs/IndexSVSIVF.h +128 -0
  280. data/vendor/faiss/faiss/svs/IndexSVSIVFLVQ.cpp +40 -0
  281. data/vendor/faiss/faiss/svs/IndexSVSIVFLVQ.h +43 -0
  282. data/vendor/faiss/faiss/svs/IndexSVSIVFLeanVec.cpp +225 -0
  283. data/vendor/faiss/faiss/svs/IndexSVSIVFLeanVec.h +71 -0
  284. data/vendor/faiss/faiss/svs/IndexSVSVamana.cpp +142 -21
  285. data/vendor/faiss/faiss/svs/IndexSVSVamana.h +33 -7
  286. data/vendor/faiss/faiss/svs/IndexSVSVamanaLVQ.cpp +3 -2
  287. data/vendor/faiss/faiss/svs/IndexSVSVamanaLVQ.h +2 -1
  288. data/vendor/faiss/faiss/svs/IndexSVSVamanaLeanVec.cpp +77 -27
  289. data/vendor/faiss/faiss/svs/IndexSVSVamanaLeanVec.h +10 -4
  290. data/vendor/faiss/faiss/utils/Heap.cpp +10 -10
  291. data/vendor/faiss/faiss/utils/NeuralNet.cpp +47 -36
  292. data/vendor/faiss/faiss/utils/NeuralNet.h +1 -1
  293. data/vendor/faiss/faiss/utils/approx_topk_hamming/approx_topk_hamming.h +10 -4
  294. data/vendor/faiss/faiss/utils/bf16.h +34 -0
  295. data/vendor/faiss/faiss/utils/distances.cpp +390 -560
  296. data/vendor/faiss/faiss/utils/distances.h +20 -1
  297. data/vendor/faiss/faiss/utils/distances_dispatch.h +117 -37
  298. data/vendor/faiss/faiss/utils/distances_fused/avx512.cpp +8 -7
  299. data/vendor/faiss/faiss/utils/distances_fused/distances_fused.cpp +33 -14
  300. data/vendor/faiss/faiss/utils/distances_fused/distances_fused.h +12 -1
  301. data/vendor/faiss/faiss/utils/distances_fused/simdlib_based.cpp +16 -293
  302. data/vendor/faiss/faiss/utils/distances_fused/simdlib_based_neon.cpp +57 -0
  303. data/vendor/faiss/faiss/utils/distances_fused/simdlib_kernel-inl.h +290 -0
  304. data/vendor/faiss/faiss/utils/distances_simd.cpp +5 -178
  305. data/vendor/faiss/faiss/utils/extra_distances.cpp +9 -8
  306. data/vendor/faiss/faiss/utils/extra_distances.h +32 -6
  307. data/vendor/faiss/faiss/utils/hamming-inl.h +13 -11
  308. data/vendor/faiss/faiss/utils/hamming.cpp +66 -517
  309. data/vendor/faiss/faiss/utils/hamming.h +92 -2
  310. data/vendor/faiss/faiss/utils/hamming_distance/common.h +287 -10
  311. data/vendor/faiss/faiss/utils/hamming_distance/hamming_avx2.cpp +16 -0
  312. data/vendor/faiss/faiss/utils/hamming_distance/hamming_avx512.cpp +15 -0
  313. data/vendor/faiss/faiss/utils/hamming_distance/hamming_avx512_spr.cpp +15 -0
  314. data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-avx2.h +142 -0
  315. data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-avx512.h +210 -0
  316. data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-avx512_spr.h +171 -0
  317. data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-generic.h +368 -0
  318. data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-neon.h +322 -0
  319. data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-rvv.h +39 -0
  320. data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer.h +146 -0
  321. data/vendor/faiss/faiss/utils/hamming_distance/hamming_impl.h +481 -0
  322. data/vendor/faiss/faiss/utils/hamming_distance/hamming_neon.cpp +15 -0
  323. data/vendor/faiss/faiss/utils/hamming_distance/hamming_rvv.cpp +15 -0
  324. data/vendor/faiss/faiss/utils/partitioning.cpp +66 -989
  325. data/vendor/faiss/faiss/utils/partitioning.h +31 -0
  326. data/vendor/faiss/faiss/utils/popcount.h +29 -0
  327. data/vendor/faiss/faiss/utils/pq_code_distance.h +2 -2
  328. data/vendor/faiss/faiss/utils/prefetch.h +2 -2
  329. data/vendor/faiss/faiss/utils/quantize_lut.cpp +30 -30
  330. data/vendor/faiss/faiss/utils/quantize_lut.h +1 -1
  331. data/vendor/faiss/faiss/utils/rabitq_simd.h +57 -536
  332. data/vendor/faiss/faiss/utils/random.cpp +6 -6
  333. data/vendor/faiss/faiss/utils/simd_impl/IVFFlatScanner-inl.h +51 -0
  334. data/vendor/faiss/faiss/utils/simd_impl/distances_aarch64.cpp +5 -1
  335. data/vendor/faiss/faiss/utils/simd_impl/distances_arm_sve.cpp +213 -4
  336. data/vendor/faiss/faiss/utils/simd_impl/distances_autovec-inl.h +163 -10
  337. data/vendor/faiss/faiss/utils/simd_impl/distances_avx2.cpp +250 -4
  338. data/vendor/faiss/faiss/utils/simd_impl/distances_avx512.cpp +7 -4
  339. data/vendor/faiss/faiss/utils/simd_impl/distances_rvv.cpp +189 -0
  340. data/vendor/faiss/faiss/utils/simd_impl/distances_simdlib256.h +195 -0
  341. data/vendor/faiss/faiss/utils/simd_impl/distances_sse-inl.h +2 -1
  342. data/vendor/faiss/faiss/utils/{distances_fused/simdlib_based.h → simd_impl/exhaustive_L2sqr_blas_cmax.h} +5 -10
  343. data/vendor/faiss/faiss/utils/simd_impl/hamming_impl.h +481 -0
  344. data/vendor/faiss/faiss/utils/simd_impl/partitioning_avx2.cpp +14 -0
  345. data/vendor/faiss/faiss/utils/simd_impl/partitioning_neon.cpp +14 -0
  346. data/vendor/faiss/faiss/utils/simd_impl/partitioning_simdlib256.h +1031 -0
  347. data/vendor/faiss/faiss/utils/simd_impl/rabitq_avx2.cpp +355 -0
  348. data/vendor/faiss/faiss/utils/simd_impl/rabitq_avx512.cpp +477 -0
  349. data/vendor/faiss/faiss/utils/simd_impl/rabitq_avx512_spr.cpp +343 -0
  350. data/vendor/faiss/faiss/utils/simd_impl/rabitq_neon.cpp +55 -0
  351. data/vendor/faiss/faiss/utils/simd_impl/rabitq_rvv.cpp +55 -0
  352. data/vendor/faiss/faiss/utils/simd_impl/super_kmeans_dispatch.h +32 -0
  353. data/vendor/faiss/faiss/utils/simd_impl/super_kmeans_kernels.h +43 -0
  354. data/vendor/faiss/faiss/utils/simd_impl/super_kmeans_kernels_avx2.cpp +57 -0
  355. data/vendor/faiss/faiss/utils/simd_impl/super_kmeans_kernels_avx512.cpp +45 -0
  356. data/vendor/faiss/faiss/utils/simd_levels.cpp +29 -7
  357. data/vendor/faiss/faiss/utils/simd_levels.h +93 -1
  358. data/vendor/faiss/faiss/utils/sorting.cpp +48 -36
  359. data/vendor/faiss/faiss/utils/utils.cpp +5 -5
  360. data/vendor/faiss/faiss/utils/utils.h +3 -3
  361. metadata +129 -34
  362. data/vendor/faiss/faiss/impl/RaBitQStats.cpp +0 -29
  363. data/vendor/faiss/faiss/impl/RaBitQStats.h +0 -56
  364. data/vendor/faiss/faiss/impl/pq4_fast_scan.h +0 -224
  365. data/vendor/faiss/faiss/impl/pq4_fast_scan_search_1.cpp +0 -230
  366. data/vendor/faiss/faiss/utils/approx_topk/approx_topk.h +0 -84
  367. data/vendor/faiss/faiss/utils/approx_topk/avx2-inl.h +0 -196
  368. data/vendor/faiss/faiss/utils/approx_topk/mode.h +0 -34
  369. data/vendor/faiss/faiss/utils/distances_fused/avx512.h +0 -36
  370. data/vendor/faiss/faiss/utils/extra_distances-inl.h +0 -235
  371. data/vendor/faiss/faiss/utils/hamming_distance/avx2-inl.h +0 -462
  372. data/vendor/faiss/faiss/utils/hamming_distance/avx512-inl.h +0 -490
  373. data/vendor/faiss/faiss/utils/hamming_distance/generic-inl.h +0 -449
  374. data/vendor/faiss/faiss/utils/hamming_distance/hamdis-inl.h +0 -87
  375. data/vendor/faiss/faiss/utils/hamming_distance/neon-inl.h +0 -524
  376. data/vendor/faiss/faiss/utils/simdlib.h +0 -42
  377. data/vendor/faiss/faiss/utils/simdlib_avx512.h +0 -365
  378. /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.2
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,26 @@ 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/MetalDistance.h
237
+ - vendor/faiss/faiss/gpu_metal/MetalFlatKernels.h
238
+ - vendor/faiss/faiss/gpu_metal/MetalIndex.h
239
+ - vendor/faiss/faiss/gpu_metal/MetalIndexFlat.h
240
+ - vendor/faiss/faiss/gpu_metal/MetalIndexIVFFlat.h
241
+ - vendor/faiss/faiss/gpu_metal/MetalKernels.h
242
+ - vendor/faiss/faiss/gpu_metal/MetalPythonBridge.h
243
+ - vendor/faiss/faiss/gpu_metal/MetalResources.h
244
+ - vendor/faiss/faiss/gpu_metal/StandardMetalResources.h
245
+ - vendor/faiss/faiss/gpu_metal/impl/MetalIVFFlat.h
246
+ - vendor/faiss/faiss/impl/AdSampling.cpp
247
+ - vendor/faiss/faiss/impl/AdSampling.h
230
248
  - vendor/faiss/faiss/impl/AdditiveQuantizer.cpp
231
249
  - vendor/faiss/faiss/impl/AdditiveQuantizer.h
232
250
  - vendor/faiss/faiss/impl/AuxIndexStructures.cpp
233
251
  - vendor/faiss/faiss/impl/AuxIndexStructures.h
252
+ - vendor/faiss/faiss/impl/ClusteringHelpers.cpp
253
+ - vendor/faiss/faiss/impl/ClusteringHelpers.h
234
254
  - vendor/faiss/faiss/impl/ClusteringInitialization.cpp
235
255
  - vendor/faiss/faiss/impl/ClusteringInitialization.h
236
256
  - vendor/faiss/faiss/impl/CodePacker.cpp
@@ -241,14 +261,13 @@ files:
241
261
  - vendor/faiss/faiss/impl/FaissAssert.h
242
262
  - vendor/faiss/faiss/impl/FaissException.cpp
243
263
  - vendor/faiss/faiss/impl/FaissException.h
244
- - vendor/faiss/faiss/impl/FastScanDistancePostProcessing.h
245
264
  - vendor/faiss/faiss/impl/HNSW.cpp
246
265
  - vendor/faiss/faiss/impl/HNSW.h
247
266
  - vendor/faiss/faiss/impl/IDSelector.cpp
248
267
  - vendor/faiss/faiss/impl/IDSelector.h
268
+ - vendor/faiss/faiss/impl/InvertedListScannerStats.h
249
269
  - vendor/faiss/faiss/impl/LocalSearchQuantizer.cpp
250
270
  - vendor/faiss/faiss/impl/LocalSearchQuantizer.h
251
- - vendor/faiss/faiss/impl/LookupTableScaler.h
252
271
  - vendor/faiss/faiss/impl/NNDescent.cpp
253
272
  - vendor/faiss/faiss/impl/NNDescent.h
254
273
  - vendor/faiss/faiss/impl/NSG.cpp
@@ -257,6 +276,8 @@ files:
257
276
  - vendor/faiss/faiss/impl/Panorama.h
258
277
  - vendor/faiss/faiss/impl/PanoramaStats.cpp
259
278
  - vendor/faiss/faiss/impl/PanoramaStats.h
279
+ - vendor/faiss/faiss/impl/PdxLayout.cpp
280
+ - vendor/faiss/faiss/impl/PdxLayout.h
260
281
  - vendor/faiss/faiss/impl/PolysemousTraining.cpp
261
282
  - vendor/faiss/faiss/impl/PolysemousTraining.h
262
283
  - vendor/faiss/faiss/impl/ProductAdditiveQuantizer.cpp
@@ -265,8 +286,6 @@ files:
265
286
  - vendor/faiss/faiss/impl/ProductQuantizer.cpp
266
287
  - vendor/faiss/faiss/impl/ProductQuantizer.h
267
288
  - vendor/faiss/faiss/impl/Quantizer.h
268
- - vendor/faiss/faiss/impl/RaBitQStats.cpp
269
- - vendor/faiss/faiss/impl/RaBitQStats.h
270
289
  - vendor/faiss/faiss/impl/RaBitQUtils.cpp
271
290
  - vendor/faiss/faiss/impl/RaBitQUtils.h
272
291
  - vendor/faiss/faiss/impl/RaBitQuantizer.cpp
@@ -282,7 +301,47 @@ files:
282
301
  - vendor/faiss/faiss/impl/ThreadedIndex.h
283
302
  - vendor/faiss/faiss/impl/VisitedTable.cpp
284
303
  - vendor/faiss/faiss/impl/VisitedTable.h
304
+ - vendor/faiss/faiss/impl/approx_topk/approx_topk.h
305
+ - vendor/faiss/faiss/impl/approx_topk/avx2.cpp
306
+ - vendor/faiss/faiss/impl/approx_topk/generic.h
307
+ - vendor/faiss/faiss/impl/approx_topk/neon.cpp
308
+ - vendor/faiss/faiss/impl/approx_topk/rq_beam_search_tab-inl.h
309
+ - vendor/faiss/faiss/impl/approx_topk/rq_beam_search_tab.h
310
+ - vendor/faiss/faiss/impl/approx_topk/simdlib256-inl.h
311
+ - vendor/faiss/faiss/impl/binary_hamming/IndexBinaryHNSW_impl.h
312
+ - vendor/faiss/faiss/impl/binary_hamming/IndexBinaryHash_impl.h
313
+ - vendor/faiss/faiss/impl/binary_hamming/IndexBinaryIVF_impl.h
314
+ - vendor/faiss/faiss/impl/binary_hamming/IndexIVFSpectralHash_impl.h
315
+ - vendor/faiss/faiss/impl/binary_hamming/IndexPQ_impl.h
316
+ - vendor/faiss/faiss/impl/binary_hamming/avx2.cpp
317
+ - vendor/faiss/faiss/impl/binary_hamming/avx512.cpp
318
+ - vendor/faiss/faiss/impl/binary_hamming/dispatch.h
319
+ - vendor/faiss/faiss/impl/binary_hamming/neon.cpp
320
+ - vendor/faiss/faiss/impl/binary_hamming/rvv.cpp
285
321
  - vendor/faiss/faiss/impl/expanded_scanners.h
322
+ - vendor/faiss/faiss/impl/fast_scan/FastScanDistancePostProcessing.h
323
+ - vendor/faiss/faiss/impl/fast_scan/LookupTableScaler.h
324
+ - vendor/faiss/faiss/impl/fast_scan/accumulate_loops.h
325
+ - vendor/faiss/faiss/impl/fast_scan/accumulate_loops_512.h
326
+ - vendor/faiss/faiss/impl/fast_scan/decompose_qbs.h
327
+ - vendor/faiss/faiss/impl/fast_scan/dispatching.h
328
+ - vendor/faiss/faiss/impl/fast_scan/fast_scan.cpp
329
+ - vendor/faiss/faiss/impl/fast_scan/fast_scan.h
330
+ - vendor/faiss/faiss/impl/fast_scan/impl-avx2.cpp
331
+ - vendor/faiss/faiss/impl/fast_scan/impl-avx512.cpp
332
+ - vendor/faiss/faiss/impl/fast_scan/impl-neon.cpp
333
+ - vendor/faiss/faiss/impl/fast_scan/impl-riscv.cpp
334
+ - vendor/faiss/faiss/impl/fast_scan/kernels_simd256.h
335
+ - vendor/faiss/faiss/impl/fast_scan/kernels_simd512.h
336
+ - vendor/faiss/faiss/impl/fast_scan/rabitq_dispatching.h
337
+ - vendor/faiss/faiss/impl/fast_scan/rabitq_result_handler.h
338
+ - vendor/faiss/faiss/impl/fast_scan/simd_result_handlers.h
339
+ - vendor/faiss/faiss/impl/hnsw/LockVector.cpp
340
+ - vendor/faiss/faiss/impl/hnsw/LockVector.h
341
+ - vendor/faiss/faiss/impl/hnsw/MinimaxHeap.cpp
342
+ - vendor/faiss/faiss/impl/hnsw/MinimaxHeap.h
343
+ - vendor/faiss/faiss/impl/hnsw/avx2.cpp
344
+ - vendor/faiss/faiss/impl/hnsw/avx512.cpp
286
345
  - vendor/faiss/faiss/impl/index_read.cpp
287
346
  - vendor/faiss/faiss/impl/index_read_utils.h
288
347
  - vendor/faiss/faiss/impl/index_write.cpp
@@ -297,15 +356,21 @@ files:
297
356
  - vendor/faiss/faiss/impl/mapped_io.h
298
357
  - vendor/faiss/faiss/impl/maybe_owned_vector.h
299
358
  - 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
359
+ - vendor/faiss/faiss/impl/pq_code_distance/IVFPQScanner_impl.h
360
+ - vendor/faiss/faiss/impl/pq_code_distance/IVFPQ_QueryTables.cpp
361
+ - vendor/faiss/faiss/impl/pq_code_distance/IVFPQ_QueryTables.h
362
+ - vendor/faiss/faiss/impl/pq_code_distance/PQDistanceComputer_impl.h
363
+ - vendor/faiss/faiss/impl/pq_code_distance/avx2.cpp
364
+ - vendor/faiss/faiss/impl/pq_code_distance/avx512.cpp
365
+ - vendor/faiss/faiss/impl/pq_code_distance/neon.cpp
366
+ - vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-avx2.h
367
+ - vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-avx512.h
306
368
  - vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-generic.cpp
369
+ - vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-generic.h
307
370
  - vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-inl.h
308
371
  - vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-sve.cpp
372
+ - vendor/faiss/faiss/impl/pq_code_distance/pq_scan_impl.h
373
+ - vendor/faiss/faiss/impl/pq_code_distance/rvv.cpp
309
374
  - vendor/faiss/faiss/impl/residual_quantizer_encode_steps.cpp
310
375
  - vendor/faiss/faiss/impl/residual_quantizer_encode_steps.h
311
376
  - vendor/faiss/faiss/impl/scalar_quantizer/codecs.h
@@ -314,13 +379,22 @@ files:
314
379
  - vendor/faiss/faiss/impl/scalar_quantizer/scanners.h
315
380
  - vendor/faiss/faiss/impl/scalar_quantizer/similarities.h
316
381
  - vendor/faiss/faiss/impl/scalar_quantizer/sq-avx2.cpp
382
+ - vendor/faiss/faiss/impl/scalar_quantizer/sq-avx512-impl.h
383
+ - vendor/faiss/faiss/impl/scalar_quantizer/sq-avx512-spr.cpp
317
384
  - vendor/faiss/faiss/impl/scalar_quantizer/sq-avx512.cpp
318
385
  - vendor/faiss/faiss/impl/scalar_quantizer/sq-dispatch.h
319
386
  - vendor/faiss/faiss/impl/scalar_quantizer/sq-neon.cpp
387
+ - vendor/faiss/faiss/impl/scalar_quantizer/sq-rvv.cpp
320
388
  - vendor/faiss/faiss/impl/scalar_quantizer/training.cpp
321
389
  - vendor/faiss/faiss/impl/scalar_quantizer/training.h
322
390
  - vendor/faiss/faiss/impl/simd_dispatch.h
323
- - vendor/faiss/faiss/impl/simd_result_handlers.h
391
+ - vendor/faiss/faiss/impl/simdlib/simdlib.h
392
+ - vendor/faiss/faiss/impl/simdlib/simdlib_avx2.h
393
+ - vendor/faiss/faiss/impl/simdlib/simdlib_avx512.h
394
+ - vendor/faiss/faiss/impl/simdlib/simdlib_dispatch.h
395
+ - vendor/faiss/faiss/impl/simdlib/simdlib_emulated.h
396
+ - vendor/faiss/faiss/impl/simdlib/simdlib_neon.h
397
+ - vendor/faiss/faiss/impl/simdlib/simdlib_ppc64.h
324
398
  - vendor/faiss/faiss/impl/svs_io.cpp
325
399
  - vendor/faiss/faiss/impl/svs_io.h
326
400
  - vendor/faiss/faiss/impl/zerocopy_io.cpp
@@ -343,6 +417,12 @@ files:
343
417
  - vendor/faiss/faiss/svs/IndexSVSFaissUtils.h
344
418
  - vendor/faiss/faiss/svs/IndexSVSFlat.cpp
345
419
  - vendor/faiss/faiss/svs/IndexSVSFlat.h
420
+ - vendor/faiss/faiss/svs/IndexSVSIVF.cpp
421
+ - vendor/faiss/faiss/svs/IndexSVSIVF.h
422
+ - vendor/faiss/faiss/svs/IndexSVSIVFLVQ.cpp
423
+ - vendor/faiss/faiss/svs/IndexSVSIVFLVQ.h
424
+ - vendor/faiss/faiss/svs/IndexSVSIVFLeanVec.cpp
425
+ - vendor/faiss/faiss/svs/IndexSVSIVFLeanVec.h
346
426
  - vendor/faiss/faiss/svs/IndexSVSVamana.cpp
347
427
  - vendor/faiss/faiss/svs/IndexSVSVamana.h
348
428
  - vendor/faiss/faiss/svs/IndexSVSVamanaLVQ.cpp
@@ -356,23 +436,18 @@ files:
356
436
  - vendor/faiss/faiss/utils/NeuralNet.h
357
437
  - vendor/faiss/faiss/utils/WorkerThread.cpp
358
438
  - 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
439
  - vendor/faiss/faiss/utils/approx_topk_hamming/approx_topk_hamming.h
364
440
  - vendor/faiss/faiss/utils/bf16.h
365
441
  - vendor/faiss/faiss/utils/distances.cpp
366
442
  - vendor/faiss/faiss/utils/distances.h
367
443
  - vendor/faiss/faiss/utils/distances_dispatch.h
368
444
  - vendor/faiss/faiss/utils/distances_fused/avx512.cpp
369
- - vendor/faiss/faiss/utils/distances_fused/avx512.h
370
445
  - vendor/faiss/faiss/utils/distances_fused/distances_fused.cpp
371
446
  - vendor/faiss/faiss/utils/distances_fused/distances_fused.h
372
447
  - vendor/faiss/faiss/utils/distances_fused/simdlib_based.cpp
373
- - vendor/faiss/faiss/utils/distances_fused/simdlib_based.h
448
+ - vendor/faiss/faiss/utils/distances_fused/simdlib_based_neon.cpp
449
+ - vendor/faiss/faiss/utils/distances_fused/simdlib_kernel-inl.h
374
450
  - vendor/faiss/faiss/utils/distances_simd.cpp
375
- - vendor/faiss/faiss/utils/extra_distances-inl.h
376
451
  - vendor/faiss/faiss/utils/extra_distances.cpp
377
452
  - vendor/faiss/faiss/utils/extra_distances.h
378
453
  - vendor/faiss/faiss/utils/fp16-arm.h
@@ -382,15 +457,24 @@ files:
382
457
  - vendor/faiss/faiss/utils/hamming-inl.h
383
458
  - vendor/faiss/faiss/utils/hamming.cpp
384
459
  - 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
460
  - 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
461
+ - vendor/faiss/faiss/utils/hamming_distance/hamming_avx2.cpp
462
+ - vendor/faiss/faiss/utils/hamming_distance/hamming_avx512.cpp
463
+ - vendor/faiss/faiss/utils/hamming_distance/hamming_avx512_spr.cpp
464
+ - vendor/faiss/faiss/utils/hamming_distance/hamming_computer-avx2.h
465
+ - vendor/faiss/faiss/utils/hamming_distance/hamming_computer-avx512.h
466
+ - vendor/faiss/faiss/utils/hamming_distance/hamming_computer-avx512_spr.h
467
+ - vendor/faiss/faiss/utils/hamming_distance/hamming_computer-generic.h
468
+ - vendor/faiss/faiss/utils/hamming_distance/hamming_computer-neon.h
469
+ - vendor/faiss/faiss/utils/hamming_distance/hamming_computer-rvv.h
470
+ - vendor/faiss/faiss/utils/hamming_distance/hamming_computer.h
471
+ - vendor/faiss/faiss/utils/hamming_distance/hamming_impl.h
472
+ - vendor/faiss/faiss/utils/hamming_distance/hamming_neon.cpp
473
+ - vendor/faiss/faiss/utils/hamming_distance/hamming_rvv.cpp
391
474
  - vendor/faiss/faiss/utils/ordered_key_value.h
392
475
  - vendor/faiss/faiss/utils/partitioning.cpp
393
476
  - vendor/faiss/faiss/utils/partitioning.h
477
+ - vendor/faiss/faiss/utils/popcount.h
394
478
  - vendor/faiss/faiss/utils/pq_code_distance.h
395
479
  - vendor/faiss/faiss/utils/prefetch.h
396
480
  - vendor/faiss/faiss/utils/quantize_lut.cpp
@@ -398,20 +482,31 @@ files:
398
482
  - vendor/faiss/faiss/utils/rabitq_simd.h
399
483
  - vendor/faiss/faiss/utils/random.cpp
400
484
  - vendor/faiss/faiss/utils/random.h
485
+ - vendor/faiss/faiss/utils/simd_impl/IVFFlatScanner-inl.h
401
486
  - vendor/faiss/faiss/utils/simd_impl/distances_aarch64.cpp
402
487
  - vendor/faiss/faiss/utils/simd_impl/distances_arm_sve.cpp
403
488
  - vendor/faiss/faiss/utils/simd_impl/distances_autovec-inl.h
404
489
  - vendor/faiss/faiss/utils/simd_impl/distances_avx2.cpp
405
490
  - vendor/faiss/faiss/utils/simd_impl/distances_avx512.cpp
491
+ - vendor/faiss/faiss/utils/simd_impl/distances_rvv.cpp
492
+ - vendor/faiss/faiss/utils/simd_impl/distances_simdlib256.h
406
493
  - vendor/faiss/faiss/utils/simd_impl/distances_sse-inl.h
494
+ - vendor/faiss/faiss/utils/simd_impl/exhaustive_L2sqr_blas_cmax.h
495
+ - vendor/faiss/faiss/utils/simd_impl/hamming_impl.h
496
+ - vendor/faiss/faiss/utils/simd_impl/partitioning_avx2.cpp
497
+ - vendor/faiss/faiss/utils/simd_impl/partitioning_neon.cpp
498
+ - vendor/faiss/faiss/utils/simd_impl/partitioning_simdlib256.h
499
+ - vendor/faiss/faiss/utils/simd_impl/rabitq_avx2.cpp
500
+ - vendor/faiss/faiss/utils/simd_impl/rabitq_avx512.cpp
501
+ - vendor/faiss/faiss/utils/simd_impl/rabitq_avx512_spr.cpp
502
+ - vendor/faiss/faiss/utils/simd_impl/rabitq_neon.cpp
503
+ - vendor/faiss/faiss/utils/simd_impl/rabitq_rvv.cpp
504
+ - vendor/faiss/faiss/utils/simd_impl/super_kmeans_dispatch.h
505
+ - vendor/faiss/faiss/utils/simd_impl/super_kmeans_kernels.h
506
+ - vendor/faiss/faiss/utils/simd_impl/super_kmeans_kernels_avx2.cpp
507
+ - vendor/faiss/faiss/utils/simd_impl/super_kmeans_kernels_avx512.cpp
407
508
  - vendor/faiss/faiss/utils/simd_levels.cpp
408
509
  - 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
510
  - vendor/faiss/faiss/utils/sorting.cpp
416
511
  - vendor/faiss/faiss/utils/sorting.h
417
512
  - vendor/faiss/faiss/utils/transpose/transpose-avx2-inl.h
@@ -436,7 +531,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
436
531
  - !ruby/object:Gem::Version
437
532
  version: '0'
438
533
  requirements: []
439
- rubygems_version: 4.0.6
534
+ rubygems_version: 4.0.14
440
535
  specification_version: 4
441
536
  summary: Efficient similarity search and clustering for Ruby
442
537
  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