faiss 0.5.3 → 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 (379) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +12 -0
  3. data/ext/faiss/ext.cpp +1 -1
  4. data/ext/faiss/extconf.rb +4 -4
  5. data/ext/faiss/index.cpp +63 -45
  6. data/ext/faiss/index_binary.cpp +37 -27
  7. data/ext/faiss/kmeans.cpp +9 -8
  8. data/ext/faiss/pca_matrix.cpp +9 -7
  9. data/ext/faiss/product_quantizer.cpp +13 -11
  10. data/ext/faiss/utils.cpp +4 -2
  11. data/ext/faiss/utils.h +4 -0
  12. data/lib/faiss/version.rb +1 -1
  13. data/lib/faiss.rb +1 -1
  14. data/vendor/faiss/faiss/AutoTune.cpp +214 -82
  15. data/vendor/faiss/faiss/AutoTune.h +14 -1
  16. data/vendor/faiss/faiss/Clustering.cpp +97 -249
  17. data/vendor/faiss/faiss/Clustering.h +18 -0
  18. data/vendor/faiss/faiss/IVFlib.cpp +67 -44
  19. data/vendor/faiss/faiss/Index.cpp +25 -12
  20. data/vendor/faiss/faiss/Index.h +26 -4
  21. data/vendor/faiss/faiss/Index2Layer.cpp +37 -53
  22. data/vendor/faiss/faiss/IndexAdditiveQuantizer.cpp +68 -61
  23. data/vendor/faiss/faiss/IndexAdditiveQuantizerFastScan.cpp +36 -34
  24. data/vendor/faiss/faiss/IndexAdditiveQuantizerFastScan.h +4 -1
  25. data/vendor/faiss/faiss/IndexBinary.cpp +6 -3
  26. data/vendor/faiss/faiss/IndexBinary.h +4 -4
  27. data/vendor/faiss/faiss/IndexBinaryFlat.cpp +1 -1
  28. data/vendor/faiss/faiss/IndexBinaryFlat.h +1 -1
  29. data/vendor/faiss/faiss/IndexBinaryFromFloat.cpp +4 -4
  30. data/vendor/faiss/faiss/IndexBinaryHNSW.cpp +92 -95
  31. data/vendor/faiss/faiss/IndexBinaryHNSW.h +9 -3
  32. data/vendor/faiss/faiss/IndexBinaryHash.cpp +45 -236
  33. data/vendor/faiss/faiss/IndexBinaryHash.h +6 -6
  34. data/vendor/faiss/faiss/IndexBinaryIVF.cpp +120 -414
  35. data/vendor/faiss/faiss/IndexFastScan.cpp +105 -129
  36. data/vendor/faiss/faiss/IndexFastScan.h +35 -24
  37. data/vendor/faiss/faiss/IndexFlat.cpp +216 -152
  38. data/vendor/faiss/faiss/IndexFlat.h +32 -14
  39. data/vendor/faiss/faiss/IndexFlatCodes.cpp +88 -41
  40. data/vendor/faiss/faiss/IndexFlatCodes.h +7 -1
  41. data/vendor/faiss/faiss/IndexHNSW.cpp +299 -187
  42. data/vendor/faiss/faiss/IndexHNSW.h +30 -14
  43. data/vendor/faiss/faiss/IndexIDMap.cpp +26 -22
  44. data/vendor/faiss/faiss/IndexIDMap.h +9 -7
  45. data/vendor/faiss/faiss/IndexIVF.cpp +535 -405
  46. data/vendor/faiss/faiss/IndexIVF.h +47 -16
  47. data/vendor/faiss/faiss/IndexIVFAdditiveQuantizer.cpp +77 -74
  48. data/vendor/faiss/faiss/IndexIVFAdditiveQuantizerFastScan.cpp +105 -99
  49. data/vendor/faiss/faiss/IndexIVFAdditiveQuantizerFastScan.h +6 -3
  50. data/vendor/faiss/faiss/IndexIVFFastScan.cpp +379 -249
  51. data/vendor/faiss/faiss/IndexIVFFastScan.h +65 -60
  52. data/vendor/faiss/faiss/IndexIVFFlat.cpp +41 -124
  53. data/vendor/faiss/faiss/IndexIVFFlat.h +32 -0
  54. data/vendor/faiss/faiss/IndexIVFFlatPanorama.cpp +89 -138
  55. data/vendor/faiss/faiss/IndexIVFFlatPanorama.h +3 -1
  56. data/vendor/faiss/faiss/IndexIVFIndependentQuantizer.cpp +18 -15
  57. data/vendor/faiss/faiss/IndexIVFPQ.cpp +77 -907
  58. data/vendor/faiss/faiss/IndexIVFPQFastScan.cpp +184 -122
  59. data/vendor/faiss/faiss/IndexIVFPQFastScan.h +3 -0
  60. data/vendor/faiss/faiss/IndexIVFPQR.cpp +23 -18
  61. data/vendor/faiss/faiss/IndexIVFRaBitQ.cpp +59 -60
  62. data/vendor/faiss/faiss/IndexIVFRaBitQ.h +4 -3
  63. data/vendor/faiss/faiss/IndexIVFRaBitQFastScan.cpp +564 -416
  64. data/vendor/faiss/faiss/IndexIVFRaBitQFastScan.h +269 -111
  65. data/vendor/faiss/faiss/IndexIVFSpectralHash.cpp +41 -127
  66. data/vendor/faiss/faiss/IndexIVFSpectralHash.h +1 -1
  67. data/vendor/faiss/faiss/IndexLSH.cpp +44 -25
  68. data/vendor/faiss/faiss/IndexLattice.cpp +41 -36
  69. data/vendor/faiss/faiss/IndexNNDescent.cpp +37 -21
  70. data/vendor/faiss/faiss/IndexNNDescent.h +2 -2
  71. data/vendor/faiss/faiss/IndexNSG.cpp +40 -23
  72. data/vendor/faiss/faiss/IndexNSG.h +0 -2
  73. data/vendor/faiss/faiss/IndexNeuralNetCodec.cpp +32 -12
  74. data/vendor/faiss/faiss/IndexPQ.cpp +129 -213
  75. data/vendor/faiss/faiss/IndexPQ.h +3 -2
  76. data/vendor/faiss/faiss/IndexPQFastScan.cpp +20 -14
  77. data/vendor/faiss/faiss/IndexPQFastScan.h +3 -0
  78. data/vendor/faiss/faiss/IndexPreTransform.cpp +25 -18
  79. data/vendor/faiss/faiss/IndexPreTransform.h +1 -1
  80. data/vendor/faiss/faiss/IndexRaBitQ.cpp +31 -43
  81. data/vendor/faiss/faiss/IndexRaBitQ.h +4 -3
  82. data/vendor/faiss/faiss/IndexRaBitQFastScan.cpp +135 -317
  83. data/vendor/faiss/faiss/IndexRaBitQFastScan.h +192 -34
  84. data/vendor/faiss/faiss/IndexRefine.cpp +30 -55
  85. data/vendor/faiss/faiss/IndexRefine.h +4 -4
  86. data/vendor/faiss/faiss/IndexReplicas.cpp +6 -6
  87. data/vendor/faiss/faiss/IndexRowwiseMinMax.cpp +15 -14
  88. data/vendor/faiss/faiss/IndexRowwiseMinMax.h +1 -1
  89. data/vendor/faiss/faiss/IndexScalarQuantizer.cpp +82 -14
  90. data/vendor/faiss/faiss/IndexShards.cpp +13 -13
  91. data/vendor/faiss/faiss/IndexShardsIVF.cpp +21 -15
  92. data/vendor/faiss/faiss/MatrixStats.cpp +5 -4
  93. data/vendor/faiss/faiss/MetaIndexes.cpp +19 -17
  94. data/vendor/faiss/faiss/MetaIndexes.h +1 -1
  95. data/vendor/faiss/faiss/MetricType.h +29 -6
  96. data/vendor/faiss/faiss/SuperKMeans.cpp +656 -0
  97. data/vendor/faiss/faiss/SuperKMeans.h +97 -0
  98. data/vendor/faiss/faiss/VectorTransform.cpp +349 -141
  99. data/vendor/faiss/faiss/VectorTransform.h +39 -16
  100. data/vendor/faiss/faiss/build.cpp +23 -0
  101. data/vendor/faiss/faiss/build.h +15 -0
  102. data/vendor/faiss/faiss/clone_index.cpp +55 -51
  103. data/vendor/faiss/faiss/cppcontrib/sa_decode/Level2-avx2-inl.h +47 -47
  104. data/vendor/faiss/faiss/cppcontrib/sa_decode/Level2-inl.h +11 -0
  105. data/vendor/faiss/faiss/cppcontrib/sa_decode/PQ-avx2-inl.h +38 -38
  106. data/vendor/faiss/faiss/cppcontrib/sa_decode/PQ-inl.h +11 -0
  107. data/vendor/faiss/faiss/{cppcontrib/factory_tools.cpp → factory_tools.cpp} +6 -1
  108. data/vendor/faiss/faiss/gpu/GpuCloner.cpp +1 -1
  109. data/vendor/faiss/faiss/gpu/GpuIndexCagra.h +6 -5
  110. data/vendor/faiss/faiss/gpu/GpuResources.h +1 -1
  111. data/vendor/faiss/faiss/gpu/StandardGpuResources.cpp +9 -9
  112. data/vendor/faiss/faiss/gpu/StandardGpuResources.h +4 -3
  113. data/vendor/faiss/faiss/gpu/test/TestGpuIndexFlat.cpp +46 -0
  114. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFFlat.cpp +56 -0
  115. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFPQ.cpp +78 -1
  116. data/vendor/faiss/faiss/gpu/test/TestUtils.cpp +72 -0
  117. data/vendor/faiss/faiss/gpu/test/TestUtils.h +23 -0
  118. data/vendor/faiss/faiss/gpu/utils/CuvsFilterConvert.h +1 -1
  119. data/vendor/faiss/faiss/gpu/utils/CuvsUtils.h +21 -10
  120. data/vendor/faiss/faiss/gpu_metal/GpuIndexFlat.h +22 -0
  121. data/vendor/faiss/faiss/gpu_metal/MetalCloner.h +35 -0
  122. data/vendor/faiss/faiss/gpu_metal/MetalFlatKernels.h +40 -0
  123. data/vendor/faiss/faiss/gpu_metal/MetalIndex.h +51 -0
  124. data/vendor/faiss/faiss/gpu_metal/MetalIndexFlat.h +65 -0
  125. data/vendor/faiss/faiss/gpu_metal/MetalKernels.h +66 -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/impl/AdSampling.cpp +103 -0
  129. data/vendor/faiss/faiss/impl/AdSampling.h +35 -0
  130. data/vendor/faiss/faiss/impl/AdditiveQuantizer.cpp +64 -34
  131. data/vendor/faiss/faiss/impl/AdditiveQuantizer.h +1 -0
  132. data/vendor/faiss/faiss/impl/AuxIndexStructures.cpp +10 -9
  133. data/vendor/faiss/faiss/impl/AuxIndexStructures.h +3 -28
  134. data/vendor/faiss/faiss/impl/ClusteringHelpers.cpp +244 -0
  135. data/vendor/faiss/faiss/impl/ClusteringHelpers.h +94 -0
  136. data/vendor/faiss/faiss/impl/ClusteringInitialization.cpp +367 -0
  137. data/vendor/faiss/faiss/impl/ClusteringInitialization.h +107 -0
  138. data/vendor/faiss/faiss/impl/CodePacker.cpp +7 -3
  139. data/vendor/faiss/faiss/impl/CodePacker.h +11 -3
  140. data/vendor/faiss/faiss/impl/CodePackerRaBitQ.cpp +83 -0
  141. data/vendor/faiss/faiss/impl/CodePackerRaBitQ.h +47 -0
  142. data/vendor/faiss/faiss/impl/DistanceComputer.h +8 -8
  143. data/vendor/faiss/faiss/impl/FaissAssert.h +64 -3
  144. data/vendor/faiss/faiss/impl/FaissException.h +50 -3
  145. data/vendor/faiss/faiss/impl/HNSW.cpp +117 -351
  146. data/vendor/faiss/faiss/impl/HNSW.h +21 -40
  147. data/vendor/faiss/faiss/impl/IDSelector.cpp +15 -11
  148. data/vendor/faiss/faiss/impl/IDSelector.h +8 -8
  149. data/vendor/faiss/faiss/impl/InvertedListScannerStats.h +26 -0
  150. data/vendor/faiss/faiss/impl/LocalSearchQuantizer.cpp +114 -102
  151. data/vendor/faiss/faiss/impl/NNDescent.cpp +63 -26
  152. data/vendor/faiss/faiss/impl/NNDescent.h +6 -2
  153. data/vendor/faiss/faiss/impl/NSG.cpp +44 -26
  154. data/vendor/faiss/faiss/impl/NSG.h +20 -10
  155. data/vendor/faiss/faiss/impl/Panorama.cpp +76 -52
  156. data/vendor/faiss/faiss/impl/Panorama.h +265 -78
  157. data/vendor/faiss/faiss/impl/PdxLayout.cpp +93 -0
  158. data/vendor/faiss/faiss/impl/PdxLayout.h +41 -0
  159. data/vendor/faiss/faiss/impl/PolysemousTraining.cpp +62 -37
  160. data/vendor/faiss/faiss/impl/PolysemousTraining.h +3 -3
  161. data/vendor/faiss/faiss/impl/ProductAdditiveQuantizer.cpp +35 -35
  162. data/vendor/faiss/faiss/impl/ProductQuantizer-inl.h +21 -16
  163. data/vendor/faiss/faiss/impl/ProductQuantizer.cpp +99 -80
  164. data/vendor/faiss/faiss/impl/Quantizer.h +2 -2
  165. data/vendor/faiss/faiss/impl/RaBitQUtils.cpp +135 -37
  166. data/vendor/faiss/faiss/impl/RaBitQUtils.h +148 -21
  167. data/vendor/faiss/faiss/impl/RaBitQuantizer.cpp +298 -301
  168. data/vendor/faiss/faiss/impl/RaBitQuantizer.h +3 -10
  169. data/vendor/faiss/faiss/impl/RaBitQuantizerMultiBit.cpp +15 -41
  170. data/vendor/faiss/faiss/impl/RaBitQuantizerMultiBit.h +0 -4
  171. data/vendor/faiss/faiss/impl/ResidualQuantizer.cpp +40 -32
  172. data/vendor/faiss/faiss/impl/ResidualQuantizer.h +1 -1
  173. data/vendor/faiss/faiss/impl/ResultHandler.h +218 -113
  174. data/vendor/faiss/faiss/impl/ScalarQuantizer.cpp +119 -2362
  175. data/vendor/faiss/faiss/impl/ScalarQuantizer.h +27 -3
  176. data/vendor/faiss/faiss/impl/ThreadedIndex-inl.h +14 -11
  177. data/vendor/faiss/faiss/impl/VisitedTable.cpp +42 -0
  178. data/vendor/faiss/faiss/impl/VisitedTable.h +76 -0
  179. data/vendor/faiss/faiss/impl/approx_topk/approx_topk.h +276 -0
  180. data/vendor/faiss/faiss/impl/approx_topk/avx2.cpp +68 -0
  181. data/vendor/faiss/faiss/{utils → impl}/approx_topk/generic.h +15 -8
  182. data/vendor/faiss/faiss/impl/approx_topk/neon.cpp +68 -0
  183. data/vendor/faiss/faiss/impl/approx_topk/rq_beam_search_tab-inl.h +169 -0
  184. data/vendor/faiss/faiss/impl/approx_topk/rq_beam_search_tab.h +117 -0
  185. data/vendor/faiss/faiss/impl/approx_topk/simdlib256-inl.h +146 -0
  186. data/vendor/faiss/faiss/impl/binary_hamming/IndexBinaryHNSW_impl.h +73 -0
  187. data/vendor/faiss/faiss/impl/binary_hamming/IndexBinaryHash_impl.h +270 -0
  188. data/vendor/faiss/faiss/impl/binary_hamming/IndexBinaryIVF_impl.h +460 -0
  189. data/vendor/faiss/faiss/impl/binary_hamming/IndexIVFSpectralHash_impl.h +159 -0
  190. data/vendor/faiss/faiss/impl/binary_hamming/IndexPQ_impl.h +92 -0
  191. data/vendor/faiss/faiss/impl/binary_hamming/avx2.cpp +26 -0
  192. data/vendor/faiss/faiss/impl/binary_hamming/avx512.cpp +26 -0
  193. data/vendor/faiss/faiss/impl/binary_hamming/dispatch.h +143 -0
  194. data/vendor/faiss/faiss/impl/binary_hamming/neon.cpp +26 -0
  195. data/vendor/faiss/faiss/impl/binary_hamming/rvv.cpp +26 -0
  196. data/vendor/faiss/faiss/impl/expanded_scanners.h +163 -0
  197. data/vendor/faiss/faiss/impl/{FastScanDistancePostProcessing.h → fast_scan/FastScanDistancePostProcessing.h} +13 -6
  198. data/vendor/faiss/faiss/impl/{LookupTableScaler.h → fast_scan/LookupTableScaler.h} +16 -5
  199. data/vendor/faiss/faiss/impl/fast_scan/accumulate_loops.h +237 -0
  200. data/vendor/faiss/faiss/impl/fast_scan/accumulate_loops_512.h +185 -0
  201. data/vendor/faiss/faiss/impl/fast_scan/decompose_qbs.h +229 -0
  202. data/vendor/faiss/faiss/impl/fast_scan/dispatching.h +268 -0
  203. data/vendor/faiss/faiss/impl/{pq4_fast_scan.cpp → fast_scan/fast_scan.cpp} +176 -4
  204. data/vendor/faiss/faiss/impl/fast_scan/fast_scan.h +341 -0
  205. data/vendor/faiss/faiss/impl/fast_scan/impl-avx2.cpp +36 -0
  206. data/vendor/faiss/faiss/impl/fast_scan/impl-avx512.cpp +40 -0
  207. data/vendor/faiss/faiss/impl/fast_scan/impl-neon.cpp +120 -0
  208. data/vendor/faiss/faiss/impl/fast_scan/impl-riscv.cpp +104 -0
  209. data/vendor/faiss/faiss/impl/fast_scan/kernels_simd256.h +213 -0
  210. data/vendor/faiss/faiss/impl/{pq4_fast_scan_search_qbs.cpp → fast_scan/kernels_simd512.h} +26 -348
  211. data/vendor/faiss/faiss/impl/fast_scan/rabitq_dispatching.h +90 -0
  212. data/vendor/faiss/faiss/impl/fast_scan/rabitq_result_handler.h +108 -0
  213. data/vendor/faiss/faiss/impl/{simd_result_handlers.h → fast_scan/simd_result_handlers.h} +290 -142
  214. data/vendor/faiss/faiss/impl/hnsw/LockVector.cpp +54 -0
  215. data/vendor/faiss/faiss/impl/hnsw/LockVector.h +64 -0
  216. data/vendor/faiss/faiss/impl/hnsw/MinimaxHeap.cpp +91 -0
  217. data/vendor/faiss/faiss/impl/hnsw/MinimaxHeap.h +64 -0
  218. data/vendor/faiss/faiss/impl/hnsw/avx2.cpp +104 -0
  219. data/vendor/faiss/faiss/impl/hnsw/avx512.cpp +111 -0
  220. data/vendor/faiss/faiss/impl/index_read.cpp +1950 -505
  221. data/vendor/faiss/faiss/impl/index_read_utils.h +1 -2
  222. data/vendor/faiss/faiss/impl/index_write.cpp +112 -21
  223. data/vendor/faiss/faiss/impl/io.cpp +6 -6
  224. data/vendor/faiss/faiss/impl/io_macros.h +33 -16
  225. data/vendor/faiss/faiss/impl/kmeans1d.cpp +10 -10
  226. data/vendor/faiss/faiss/impl/lattice_Zn.cpp +81 -40
  227. data/vendor/faiss/faiss/impl/lattice_Zn.h +6 -6
  228. data/vendor/faiss/faiss/impl/mapped_io.cpp +15 -8
  229. data/vendor/faiss/faiss/impl/platform_macros.h +11 -4
  230. data/vendor/faiss/faiss/impl/pq_code_distance/IVFPQScanner_impl.h +549 -0
  231. data/vendor/faiss/faiss/impl/pq_code_distance/IVFPQ_QueryTables.cpp +245 -0
  232. data/vendor/faiss/faiss/impl/pq_code_distance/IVFPQ_QueryTables.h +105 -0
  233. data/vendor/faiss/faiss/impl/pq_code_distance/PQDistanceComputer_impl.h +106 -0
  234. data/vendor/faiss/faiss/impl/pq_code_distance/avx2.cpp +21 -0
  235. data/vendor/faiss/faiss/impl/pq_code_distance/avx512.cpp +21 -0
  236. data/vendor/faiss/faiss/impl/pq_code_distance/neon.cpp +21 -0
  237. data/vendor/faiss/faiss/impl/{code_distance/code_distance-avx2.h → pq_code_distance/pq_code_distance-avx2.h} +43 -220
  238. data/vendor/faiss/faiss/impl/{code_distance/code_distance-avx512.h → pq_code_distance/pq_code_distance-avx512.h} +25 -112
  239. data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-generic.cpp +59 -0
  240. data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-generic.h +96 -0
  241. data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-inl.h +256 -0
  242. data/vendor/faiss/faiss/impl/{code_distance/code_distance-sve.h → pq_code_distance/pq_code_distance-sve.cpp} +57 -146
  243. data/vendor/faiss/faiss/impl/pq_code_distance/rvv.cpp +68 -0
  244. data/vendor/faiss/faiss/impl/residual_quantizer_encode_steps.cpp +320 -483
  245. data/vendor/faiss/faiss/impl/residual_quantizer_encode_steps.h +1 -1
  246. data/vendor/faiss/faiss/impl/scalar_quantizer/codecs.h +121 -0
  247. data/vendor/faiss/faiss/impl/scalar_quantizer/distance_computers.h +137 -0
  248. data/vendor/faiss/faiss/impl/scalar_quantizer/quantizers.h +371 -0
  249. data/vendor/faiss/faiss/impl/scalar_quantizer/scanners.h +190 -0
  250. data/vendor/faiss/faiss/impl/scalar_quantizer/similarities.h +94 -0
  251. data/vendor/faiss/faiss/impl/scalar_quantizer/sq-avx2.cpp +603 -0
  252. data/vendor/faiss/faiss/impl/scalar_quantizer/sq-avx512.cpp +597 -0
  253. data/vendor/faiss/faiss/impl/scalar_quantizer/sq-dispatch.h +388 -0
  254. data/vendor/faiss/faiss/impl/scalar_quantizer/sq-neon.cpp +630 -0
  255. data/vendor/faiss/faiss/impl/scalar_quantizer/sq-rvv.cpp +311 -0
  256. data/vendor/faiss/faiss/impl/scalar_quantizer/training.cpp +387 -0
  257. data/vendor/faiss/faiss/impl/scalar_quantizer/training.h +54 -0
  258. data/vendor/faiss/faiss/impl/simd_dispatch.h +173 -0
  259. data/vendor/faiss/faiss/impl/simdlib/simdlib.h +57 -0
  260. data/vendor/faiss/faiss/{utils → impl/simdlib}/simdlib_avx2.h +274 -171
  261. data/vendor/faiss/faiss/impl/simdlib/simdlib_avx512.h +414 -0
  262. data/vendor/faiss/faiss/impl/simdlib/simdlib_dispatch.h +44 -0
  263. data/vendor/faiss/faiss/{utils → impl/simdlib}/simdlib_emulated.h +231 -166
  264. data/vendor/faiss/faiss/{utils → impl/simdlib}/simdlib_neon.h +275 -217
  265. data/vendor/faiss/faiss/{utils → impl/simdlib}/simdlib_ppc64.h +201 -160
  266. data/vendor/faiss/faiss/impl/svs_io.cpp +12 -3
  267. data/vendor/faiss/faiss/impl/svs_io.h +8 -2
  268. data/vendor/faiss/faiss/index_factory.cpp +115 -28
  269. data/vendor/faiss/faiss/index_io.h +53 -3
  270. data/vendor/faiss/faiss/invlists/BlockInvertedLists.cpp +73 -20
  271. data/vendor/faiss/faiss/invlists/DirectMap.cpp +24 -14
  272. data/vendor/faiss/faiss/invlists/DirectMap.h +4 -3
  273. data/vendor/faiss/faiss/invlists/InvertedLists.cpp +157 -73
  274. data/vendor/faiss/faiss/invlists/InvertedLists.h +86 -23
  275. data/vendor/faiss/faiss/invlists/InvertedListsIOHook.cpp +4 -4
  276. data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.cpp +14 -14
  277. data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.h +1 -1
  278. data/vendor/faiss/faiss/svs/IndexSVSFaissUtils.h +9 -19
  279. data/vendor/faiss/faiss/svs/IndexSVSFlat.cpp +2 -2
  280. data/vendor/faiss/faiss/svs/IndexSVSFlat.h +2 -0
  281. data/vendor/faiss/faiss/svs/IndexSVSIVF.cpp +350 -0
  282. data/vendor/faiss/faiss/svs/IndexSVSIVF.h +128 -0
  283. data/vendor/faiss/faiss/svs/IndexSVSIVFLVQ.cpp +40 -0
  284. data/vendor/faiss/faiss/svs/IndexSVSIVFLVQ.h +43 -0
  285. data/vendor/faiss/faiss/svs/IndexSVSIVFLeanVec.cpp +225 -0
  286. data/vendor/faiss/faiss/svs/IndexSVSIVFLeanVec.h +71 -0
  287. data/vendor/faiss/faiss/svs/IndexSVSVamana.cpp +25 -1
  288. data/vendor/faiss/faiss/svs/IndexSVSVamana.h +19 -2
  289. data/vendor/faiss/faiss/svs/IndexSVSVamanaLVQ.h +1 -1
  290. data/vendor/faiss/faiss/svs/IndexSVSVamanaLeanVec.cpp +19 -2
  291. data/vendor/faiss/faiss/svs/IndexSVSVamanaLeanVec.h +14 -0
  292. data/vendor/faiss/faiss/utils/Heap.cpp +56 -10
  293. data/vendor/faiss/faiss/utils/Heap.h +21 -0
  294. data/vendor/faiss/faiss/utils/NeuralNet.cpp +54 -40
  295. data/vendor/faiss/faiss/utils/NeuralNet.h +1 -1
  296. data/vendor/faiss/faiss/utils/approx_topk_hamming/approx_topk_hamming.h +10 -4
  297. data/vendor/faiss/faiss/utils/distances.cpp +507 -559
  298. data/vendor/faiss/faiss/utils/distances.h +118 -1
  299. data/vendor/faiss/faiss/utils/distances_dispatch.h +250 -0
  300. data/vendor/faiss/faiss/utils/distances_fused/avx512.cpp +8 -7
  301. data/vendor/faiss/faiss/utils/distances_fused/distances_fused.cpp +33 -14
  302. data/vendor/faiss/faiss/utils/distances_fused/distances_fused.h +12 -1
  303. data/vendor/faiss/faiss/utils/distances_fused/simdlib_based.cpp +16 -293
  304. data/vendor/faiss/faiss/utils/distances_fused/simdlib_based_neon.cpp +57 -0
  305. data/vendor/faiss/faiss/utils/distances_fused/simdlib_kernel-inl.h +290 -0
  306. data/vendor/faiss/faiss/utils/distances_simd.cpp +72 -3681
  307. data/vendor/faiss/faiss/utils/extra_distances.cpp +60 -102
  308. data/vendor/faiss/faiss/utils/extra_distances.h +79 -7
  309. data/vendor/faiss/faiss/utils/hamming-inl.h +13 -11
  310. data/vendor/faiss/faiss/utils/hamming.cpp +66 -517
  311. data/vendor/faiss/faiss/utils/hamming.h +92 -2
  312. data/vendor/faiss/faiss/utils/hamming_distance/common.h +287 -10
  313. data/vendor/faiss/faiss/utils/hamming_distance/hamming_avx2.cpp +15 -0
  314. data/vendor/faiss/faiss/utils/hamming_distance/hamming_avx512.cpp +15 -0
  315. data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-avx2.h +142 -0
  316. data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-avx512.h +234 -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 -987
  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 +251 -0
  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 +124 -343
  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 +154 -0
  335. data/vendor/faiss/faiss/utils/simd_impl/distances_arm_sve.cpp +777 -0
  336. data/vendor/faiss/faiss/utils/simd_impl/distances_autovec-inl.h +306 -0
  337. data/vendor/faiss/faiss/utils/simd_impl/distances_avx2.cpp +1431 -0
  338. data/vendor/faiss/faiss/utils/simd_impl/distances_avx512.cpp +1095 -0
  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 +392 -0
  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 +1085 -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_neon.cpp +55 -0
  350. data/vendor/faiss/faiss/utils/simd_impl/rabitq_rvv.cpp +55 -0
  351. data/vendor/faiss/faiss/utils/simd_impl/super_kmeans_dispatch.h +32 -0
  352. data/vendor/faiss/faiss/utils/simd_impl/super_kmeans_kernels.h +43 -0
  353. data/vendor/faiss/faiss/utils/simd_impl/super_kmeans_kernels_avx2.cpp +57 -0
  354. data/vendor/faiss/faiss/utils/simd_impl/super_kmeans_kernels_avx512.cpp +45 -0
  355. data/vendor/faiss/faiss/utils/simd_levels.cpp +334 -0
  356. data/vendor/faiss/faiss/utils/simd_levels.h +183 -0
  357. data/vendor/faiss/faiss/utils/sorting.cpp +48 -36
  358. data/vendor/faiss/faiss/utils/utils.cpp +21 -14
  359. data/vendor/faiss/faiss/utils/utils.h +3 -3
  360. metadata +156 -42
  361. data/vendor/faiss/faiss/impl/RaBitQStats.cpp +0 -29
  362. data/vendor/faiss/faiss/impl/RaBitQStats.h +0 -56
  363. data/vendor/faiss/faiss/impl/code_distance/code_distance-generic.h +0 -81
  364. data/vendor/faiss/faiss/impl/code_distance/code_distance.h +0 -186
  365. data/vendor/faiss/faiss/impl/pq4_fast_scan.h +0 -216
  366. data/vendor/faiss/faiss/impl/pq4_fast_scan_search_1.cpp +0 -224
  367. data/vendor/faiss/faiss/utils/approx_topk/approx_topk.h +0 -84
  368. data/vendor/faiss/faiss/utils/approx_topk/avx2-inl.h +0 -196
  369. data/vendor/faiss/faiss/utils/approx_topk/mode.h +0 -34
  370. data/vendor/faiss/faiss/utils/distances_fused/avx512.h +0 -36
  371. data/vendor/faiss/faiss/utils/extra_distances-inl.h +0 -228
  372. data/vendor/faiss/faiss/utils/hamming_distance/avx2-inl.h +0 -462
  373. data/vendor/faiss/faiss/utils/hamming_distance/avx512-inl.h +0 -490
  374. data/vendor/faiss/faiss/utils/hamming_distance/generic-inl.h +0 -450
  375. data/vendor/faiss/faiss/utils/hamming_distance/hamdis-inl.h +0 -87
  376. data/vendor/faiss/faiss/utils/hamming_distance/neon-inl.h +0 -524
  377. data/vendor/faiss/faiss/utils/simdlib.h +0 -42
  378. data/vendor/faiss/faiss/utils/simdlib_avx512.h +0 -296
  379. /data/vendor/faiss/faiss/{cppcontrib/factory_tools.h → factory_tools.h} +0 -0
@@ -11,9 +11,6 @@
11
11
  #define FAISS_INDEX_IVF_H
12
12
 
13
13
  #include <stdint.h>
14
- #include <memory>
15
- #include <unordered_map>
16
- #include <vector>
17
14
 
18
15
  #include <faiss/Clustering.h>
19
16
  #include <faiss/Index.h>
@@ -61,7 +58,7 @@ struct Level1Quantizer {
61
58
  void encode_listno(idx_t list_no, uint8_t* code) const;
62
59
  idx_t decode_listno(const uint8_t* code) const;
63
60
 
64
- Level1Quantizer(Index* quantizer, size_t nlist);
61
+ Level1Quantizer(Index* quantizer_in, size_t nlist_in);
65
62
 
66
63
  Level1Quantizer();
67
64
 
@@ -71,6 +68,25 @@ struct Level1Quantizer {
71
68
  struct SearchParametersIVF : SearchParameters {
72
69
  size_t nprobe = 1; ///< number of probes at query time
73
70
  size_t max_codes = 0; ///< max nb of codes to visit to do a query
71
+
72
+ /// FastScan k-NN only: maximum number of inverted lists to visit.
73
+ /// 0 means unlimited, i.e. bounded only by nprobe. When set together
74
+ /// with max_codes, either budget may stop the scan. With
75
+ /// ensure_topk_full, this limit is treated as at least k lists.
76
+ size_t max_lists_num = 0;
77
+
78
+ /// For k-NN search, make small early-stop budgets less aggressive:
79
+ /// max_codes is treated as at least k post-IDSelector scans. Supported
80
+ /// by generic IVF in parallel_mode 0 and 3, and by FastScan k-NN
81
+ /// implementations 10 and 11.
82
+ bool ensure_topk_full = false;
83
+
84
+ /// Range-search only: stop after this many consecutive probed lists add
85
+ /// no in-radius results. 0 disables the heuristic. This trades recall
86
+ /// for less work. Supported in parallel_mode 0; FastScan range search
87
+ /// uses implementation 10 for this option.
88
+ size_t max_empty_result_buckets = 0;
89
+
74
90
  SearchParameters* quantizer_params = nullptr;
75
91
  /// context object to pass to InvertedLists
76
92
  void* inverted_list_context = nullptr;
@@ -89,8 +105,10 @@ struct IndexIVFInterface : Level1Quantizer {
89
105
  size_t nprobe = 1; ///< number of probes at query time
90
106
  size_t max_codes = 0; ///< max nb of codes to visit to do a query
91
107
 
92
- explicit IndexIVFInterface(Index* quantizer = nullptr, size_t nlist = 0)
93
- : Level1Quantizer(quantizer, nlist) {}
108
+ explicit IndexIVFInterface(
109
+ Index* quantizer_in = nullptr,
110
+ size_t nlist_in = 0)
111
+ : Level1Quantizer(quantizer_in, nlist_in) {}
94
112
 
95
113
  /** search a set of vectors, that are pre-quantized by the IVF
96
114
  * quantizer. Fill in the corresponding heaps with the query
@@ -206,12 +224,12 @@ struct IndexIVF : Index, IndexIVFInterface {
206
224
  * identifier.
207
225
  */
208
226
  IndexIVF(
209
- Index* quantizer,
210
- size_t d,
211
- size_t nlist,
212
- size_t code_size,
227
+ Index* quantizer_in,
228
+ size_t d_in,
229
+ size_t nlist_in,
230
+ size_t code_size_in,
213
231
  MetricType metric = METRIC_L2,
214
- bool own_invlists = true);
232
+ bool own_invlists_in = true);
215
233
 
216
234
  void reset() override;
217
235
 
@@ -325,6 +343,12 @@ struct IndexIVF : Index, IndexIVFInterface {
325
343
  RangeSearchResult* result,
326
344
  const SearchParameters* params = nullptr) const override;
327
345
 
346
+ /** search one vector with a custom result handler */
347
+ void search1(
348
+ const float* x,
349
+ ResultHandler& handler,
350
+ SearchParameters* params = nullptr) const override;
351
+
328
352
  /** Get a scanner for this index (store_pairs means ignore labels)
329
353
  *
330
354
  * The default search implementation uses this to compute the distances.
@@ -481,9 +505,9 @@ struct InvertedListScanner {
481
505
  const IDSelector* sel;
482
506
 
483
507
  InvertedListScanner(
484
- bool store_pairs = false,
485
- const IDSelector* sel = nullptr)
486
- : store_pairs(store_pairs), sel(sel) {}
508
+ bool store_pairs_in = false,
509
+ const IDSelector* sel_in = nullptr)
510
+ : store_pairs(store_pairs_in), sel(sel_in) {}
487
511
 
488
512
  /// used in default implementation of scan_codes
489
513
  size_t code_size = 0;
@@ -492,7 +516,7 @@ struct InvertedListScanner {
492
516
  virtual void set_query(const float* query_vector) = 0;
493
517
 
494
518
  /// following codes come from this inverted list
495
- virtual void set_list(idx_t list_no, float coarse_dis) = 0;
519
+ virtual void set_list(idx_t list_no, float coarse_dis);
496
520
 
497
521
  /// compute a single query-to-code distance
498
522
  virtual float distance_to_code(const uint8_t* code) const = 0;
@@ -509,7 +533,7 @@ struct InvertedListScanner {
509
533
  * @param k heap size
510
534
  * @return number of heap updates performed
511
535
  */
512
- virtual size_t scan_codes(
536
+ size_t scan_codes(
513
537
  size_t n,
514
538
  const uint8_t* codes,
515
539
  const idx_t* ids,
@@ -543,6 +567,13 @@ struct InvertedListScanner {
543
567
  RangeQueryResult& result,
544
568
  size_t& list_size) const;
545
569
 
570
+ // accumulate results with a ResultHandler
571
+ virtual size_t scan_codes(
572
+ size_t n,
573
+ const uint8_t* codes,
574
+ const idx_t* ids,
575
+ ResultHandler& handler) const;
576
+
546
577
  virtual ~InvertedListScanner() {}
547
578
  };
548
579
 
@@ -24,23 +24,23 @@ namespace faiss {
24
24
  **************************************************************************************/
25
25
 
26
26
  IndexIVFAdditiveQuantizer::IndexIVFAdditiveQuantizer(
27
- AdditiveQuantizer* aq,
28
- Index* quantizer,
29
- size_t d,
30
- size_t nlist,
27
+ AdditiveQuantizer* aq_,
28
+ Index* quantizer_,
29
+ size_t d_,
30
+ size_t nlist_,
31
31
  MetricType metric,
32
- bool own_invlists)
33
- : IndexIVF(quantizer, d, nlist, 0, metric, own_invlists), aq(aq) {
32
+ bool own_invlists_)
33
+ : IndexIVF(quantizer_, d_, nlist_, 0, metric, own_invlists_), aq(aq_) {
34
34
  by_residual = true;
35
35
  }
36
36
 
37
- IndexIVFAdditiveQuantizer::IndexIVFAdditiveQuantizer(AdditiveQuantizer* aq)
38
- : IndexIVF(), aq(aq) {}
37
+ IndexIVFAdditiveQuantizer::IndexIVFAdditiveQuantizer(AdditiveQuantizer* aq_)
38
+ : IndexIVF(), aq(aq_) {}
39
39
 
40
40
  void IndexIVFAdditiveQuantizer::train_encoder(
41
41
  idx_t n,
42
42
  const float* x,
43
- const idx_t* assign) {
43
+ const idx_t* /*assign*/) {
44
44
  aq->train(n, x);
45
45
  }
46
46
 
@@ -107,7 +107,7 @@ void IndexIVFAdditiveQuantizer::decode_vectors(
107
107
  if (by_residual) {
108
108
  int64_t list_no = listnos[i];
109
109
  quantizer->reconstruct(list_no, residual.data());
110
- for (size_t j = 0; j < d; j++) {
110
+ for (int j = 0; j < d; j++) {
111
111
  xi[j] += residual[j];
112
112
  }
113
113
  }
@@ -133,7 +133,7 @@ void IndexIVFAdditiveQuantizer::sa_decode(
133
133
  aq->decode(code + coarse_size, xi, 1);
134
134
  if (by_residual) {
135
135
  quantizer->reconstruct(list_no, residual.data());
136
- for (size_t j = 0; j < d; j++) {
136
+ for (int j = 0; j < d; j++) {
137
137
  xi[j] += residual[j];
138
138
  }
139
139
  }
@@ -171,27 +171,29 @@ struct AQInvertedListScanner : InvertedListScanner {
171
171
  const AdditiveQuantizer& aq;
172
172
  std::vector<float> tmp;
173
173
 
174
- AQInvertedListScanner(const IndexIVFAdditiveQuantizer& ia, bool store_pairs)
175
- : ia(ia), aq(*ia.aq) {
176
- this->store_pairs = store_pairs;
177
- this->code_size = ia.code_size;
174
+ AQInvertedListScanner(
175
+ const IndexIVFAdditiveQuantizer& ia_,
176
+ bool store_pairs_)
177
+ : ia(ia_), aq(*ia_.aq) {
178
+ this->store_pairs = store_pairs_;
179
+ this->code_size = ia_.code_size;
178
180
  keep_max = is_similarity_metric(ia.metric_type);
179
181
  tmp.resize(ia.d);
180
182
  }
181
183
 
182
- const float* q0;
184
+ const float* q0 = nullptr;
183
185
 
184
186
  /// from now on we handle this query.
185
187
  void set_query(const float* query_vector) override {
186
188
  q0 = query_vector;
187
189
  }
188
190
 
189
- const float* q;
191
+ const float* q = nullptr;
190
192
  /// following codes come from this inverted list
191
- void set_list(idx_t list_no, float coarse_dis) override {
192
- this->list_no = list_no;
193
+ void set_list(idx_t list_no_, float /*coarse_dis*/) override {
194
+ this->list_no = list_no_;
193
195
  if (ia.metric_type == METRIC_L2 && ia.by_residual) {
194
- ia.quantizer->compute_residual(q0, tmp.data(), list_no);
196
+ ia.quantizer->compute_residual(q0, tmp.data(), list_no_);
195
197
  q = tmp.data();
196
198
  } else {
197
199
  q = q0;
@@ -204,15 +206,15 @@ struct AQInvertedListScanner : InvertedListScanner {
204
206
  template <bool is_IP>
205
207
  struct AQInvertedListScannerDecompress : AQInvertedListScanner {
206
208
  AQInvertedListScannerDecompress(
207
- const IndexIVFAdditiveQuantizer& ia,
208
- bool store_pairs)
209
- : AQInvertedListScanner(ia, store_pairs) {}
209
+ const IndexIVFAdditiveQuantizer& ia_,
210
+ bool store_pairs_)
211
+ : AQInvertedListScanner(ia_, store_pairs_) {}
210
212
 
211
213
  float coarse_dis = 0;
212
214
 
213
215
  /// following codes come from this inverted list
214
- void set_list(idx_t list_no, float coarse_dis_2) override {
215
- AQInvertedListScanner::set_list(list_no, coarse_dis_2);
216
+ void set_list(idx_t list_no_, float coarse_dis_2) override {
217
+ AQInvertedListScanner::set_list(list_no_, coarse_dis_2);
216
218
  if (ia.by_residual) {
217
219
  this->coarse_dis = coarse_dis_2;
218
220
  }
@@ -238,9 +240,9 @@ struct AQInvertedListScannerLUT : AQInvertedListScanner {
238
240
  float distance_bias;
239
241
 
240
242
  AQInvertedListScannerLUT(
241
- const IndexIVFAdditiveQuantizer& ia,
242
- bool store_pairs)
243
- : AQInvertedListScanner(ia, store_pairs) {
243
+ const IndexIVFAdditiveQuantizer& ia_,
244
+ bool store_pairs_)
245
+ : AQInvertedListScanner(ia_, store_pairs_) {
244
246
  LUT.resize(aq.total_codebook_size);
245
247
  tmp.resize(ia.d);
246
248
  distance_bias = 0;
@@ -255,8 +257,8 @@ struct AQInvertedListScannerLUT : AQInvertedListScanner {
255
257
  }
256
258
 
257
259
  /// following codes come from this inverted list
258
- void set_list(idx_t list_no, float coarse_dis) override {
259
- AQInvertedListScanner::set_list(list_no, coarse_dis);
260
+ void set_list(idx_t list_no_, float coarse_dis) override {
261
+ AQInvertedListScanner::set_list(list_no_, coarse_dis);
260
262
  // TODO find a way to provide the nprobes together to do a matmul
261
263
  // + precompute tables
262
264
  aq.compute_LUT(1, q, LUT.data());
@@ -310,6 +312,7 @@ InvertedListScanner* IndexIVFAdditiveQuantizer::get_InvertedListScanner(
310
312
  case AdditiveQuantizer::ST_norm_rq2x4:
311
313
  A(ST_norm_cqint8)
312
314
  #undef A
315
+ case AdditiveQuantizer::ST_count:
313
316
  default:
314
317
  FAISS_THROW_FMT(
315
318
  "search type %d not supported", aq->search_type);
@@ -322,21 +325,21 @@ InvertedListScanner* IndexIVFAdditiveQuantizer::get_InvertedListScanner(
322
325
  **************************************************************************************/
323
326
 
324
327
  IndexIVFResidualQuantizer::IndexIVFResidualQuantizer(
325
- Index* quantizer,
326
- size_t d,
327
- size_t nlist,
328
+ Index* quantizer_,
329
+ size_t d_,
330
+ size_t nlist_,
328
331
  const std::vector<size_t>& nbits,
329
332
  MetricType metric,
330
333
  Search_type_t search_type,
331
- bool own_invlists)
334
+ bool own_invlists_)
332
335
  : IndexIVFAdditiveQuantizer(
333
336
  &rq,
334
- quantizer,
335
- d,
336
- nlist,
337
+ quantizer_,
338
+ d_,
339
+ nlist_,
337
340
  metric,
338
- own_invlists),
339
- rq(d, nbits, search_type) {
341
+ own_invlists_),
342
+ rq(d_, nbits, search_type) {
340
343
  code_size = rq.code_size;
341
344
  if (invlists) {
342
345
  invlists->code_size = code_size;
@@ -347,22 +350,22 @@ IndexIVFResidualQuantizer::IndexIVFResidualQuantizer()
347
350
  : IndexIVFAdditiveQuantizer(&rq) {}
348
351
 
349
352
  IndexIVFResidualQuantizer::IndexIVFResidualQuantizer(
350
- Index* quantizer,
351
- size_t d,
352
- size_t nlist,
353
+ Index* quantizer_,
354
+ size_t d_,
355
+ size_t nlist_,
353
356
  size_t M, /* number of subquantizers */
354
357
  size_t nbits, /* number of bit per subvector index */
355
358
  MetricType metric,
356
359
  Search_type_t search_type,
357
- bool own_invlists)
360
+ bool own_invlists_)
358
361
  : IndexIVFResidualQuantizer(
359
- quantizer,
360
- d,
361
- nlist,
362
+ quantizer_,
363
+ d_,
364
+ nlist_,
362
365
  std::vector<size_t>(M, nbits),
363
366
  metric,
364
367
  search_type,
365
- own_invlists) {}
368
+ own_invlists_) {}
366
369
 
367
370
  IndexIVFResidualQuantizer::~IndexIVFResidualQuantizer() = default;
368
371
 
@@ -371,22 +374,22 @@ IndexIVFResidualQuantizer::~IndexIVFResidualQuantizer() = default;
371
374
  **************************************************************************************/
372
375
 
373
376
  IndexIVFLocalSearchQuantizer::IndexIVFLocalSearchQuantizer(
374
- Index* quantizer,
375
- size_t d,
376
- size_t nlist,
377
+ Index* quantizer_,
378
+ size_t d_,
379
+ size_t nlist_,
377
380
  size_t M, /* number of subquantizers */
378
381
  size_t nbits, /* number of bit per subvector index */
379
382
  MetricType metric,
380
383
  Search_type_t search_type,
381
- bool own_invlists)
384
+ bool own_invlists_)
382
385
  : IndexIVFAdditiveQuantizer(
383
386
  &lsq,
384
- quantizer,
385
- d,
386
- nlist,
387
+ quantizer_,
388
+ d_,
389
+ nlist_,
387
390
  metric,
388
- own_invlists),
389
- lsq(d, M, nbits, search_type) {
391
+ own_invlists_),
392
+ lsq(d_, M, nbits, search_type) {
390
393
  code_size = lsq.code_size;
391
394
  if (invlists) {
392
395
  invlists->code_size = code_size;
@@ -403,23 +406,23 @@ IndexIVFLocalSearchQuantizer::~IndexIVFLocalSearchQuantizer() = default;
403
406
  **************************************************************************************/
404
407
 
405
408
  IndexIVFProductResidualQuantizer::IndexIVFProductResidualQuantizer(
406
- Index* quantizer,
407
- size_t d,
408
- size_t nlist,
409
+ Index* quantizer_,
410
+ size_t d_,
411
+ size_t nlist_,
409
412
  size_t nsplits,
410
413
  size_t Msub,
411
414
  size_t nbits,
412
415
  MetricType metric,
413
416
  Search_type_t search_type,
414
- bool own_invlists)
417
+ bool own_invlists_)
415
418
  : IndexIVFAdditiveQuantizer(
416
419
  &prq,
417
- quantizer,
418
- d,
419
- nlist,
420
+ quantizer_,
421
+ d_,
422
+ nlist_,
420
423
  metric,
421
- own_invlists),
422
- prq(d, nsplits, Msub, nbits, search_type) {
424
+ own_invlists_),
425
+ prq(d_, nsplits, Msub, nbits, search_type) {
423
426
  code_size = prq.code_size;
424
427
  if (invlists) {
425
428
  invlists->code_size = code_size;
@@ -436,23 +439,23 @@ IndexIVFProductResidualQuantizer::~IndexIVFProductResidualQuantizer() = default;
436
439
  **************************************************************************************/
437
440
 
438
441
  IndexIVFProductLocalSearchQuantizer::IndexIVFProductLocalSearchQuantizer(
439
- Index* quantizer,
440
- size_t d,
441
- size_t nlist,
442
+ Index* quantizer_,
443
+ size_t d_,
444
+ size_t nlist_,
442
445
  size_t nsplits,
443
446
  size_t Msub,
444
447
  size_t nbits,
445
448
  MetricType metric,
446
449
  Search_type_t search_type,
447
- bool own_invlists)
450
+ bool own_invlists_)
448
451
  : IndexIVFAdditiveQuantizer(
449
452
  &plsq,
450
- quantizer,
451
- d,
452
- nlist,
453
+ quantizer_,
454
+ d_,
455
+ nlist_,
453
456
  metric,
454
- own_invlists),
455
- plsq(d, nsplits, Msub, nbits, search_type) {
457
+ own_invlists_),
458
+ plsq(d_, nsplits, Msub, nbits, search_type) {
456
459
  code_size = plsq.code_size;
457
460
  if (invlists) {
458
461
  invlists->code_size = code_size;