faiss 0.6.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (361) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/ext/faiss/extconf.rb +2 -1
  4. data/ext/faiss/{index_rb.cpp → index.cpp} +1 -1
  5. data/ext/faiss/index_binary.cpp +1 -1
  6. data/ext/faiss/kmeans.cpp +1 -1
  7. data/ext/faiss/pca_matrix.cpp +1 -1
  8. data/ext/faiss/product_quantizer.cpp +1 -1
  9. data/ext/faiss/{utils_rb.cpp → utils.cpp} +1 -1
  10. data/lib/faiss/version.rb +1 -1
  11. data/vendor/faiss/faiss/AutoTune.cpp +93 -80
  12. data/vendor/faiss/faiss/Clustering.cpp +39 -240
  13. data/vendor/faiss/faiss/Clustering.h +6 -0
  14. data/vendor/faiss/faiss/IVFlib.cpp +41 -21
  15. data/vendor/faiss/faiss/Index.cpp +6 -5
  16. data/vendor/faiss/faiss/Index.h +5 -5
  17. data/vendor/faiss/faiss/Index2Layer.cpp +37 -53
  18. data/vendor/faiss/faiss/IndexAdditiveQuantizer.cpp +49 -37
  19. data/vendor/faiss/faiss/IndexAdditiveQuantizerFastScan.cpp +36 -34
  20. data/vendor/faiss/faiss/IndexAdditiveQuantizerFastScan.h +4 -1
  21. data/vendor/faiss/faiss/IndexBinary.cpp +5 -3
  22. data/vendor/faiss/faiss/IndexBinary.h +4 -4
  23. data/vendor/faiss/faiss/IndexBinaryFlat.cpp +1 -1
  24. data/vendor/faiss/faiss/IndexBinaryFlat.h +1 -1
  25. data/vendor/faiss/faiss/IndexBinaryFromFloat.cpp +4 -4
  26. data/vendor/faiss/faiss/IndexBinaryHNSW.cpp +84 -92
  27. data/vendor/faiss/faiss/IndexBinaryHNSW.h +9 -3
  28. data/vendor/faiss/faiss/IndexBinaryHash.cpp +45 -236
  29. data/vendor/faiss/faiss/IndexBinaryHash.h +6 -6
  30. data/vendor/faiss/faiss/IndexBinaryIVF.cpp +87 -415
  31. data/vendor/faiss/faiss/IndexFastScan.cpp +72 -109
  32. data/vendor/faiss/faiss/IndexFastScan.h +25 -23
  33. data/vendor/faiss/faiss/IndexFlat.cpp +27 -20
  34. data/vendor/faiss/faiss/IndexFlat.h +21 -18
  35. data/vendor/faiss/faiss/IndexFlatCodes.cpp +42 -19
  36. data/vendor/faiss/faiss/IndexHNSW.cpp +283 -145
  37. data/vendor/faiss/faiss/IndexHNSW.h +16 -2
  38. data/vendor/faiss/faiss/IndexIDMap.cpp +25 -21
  39. data/vendor/faiss/faiss/IndexIDMap.h +9 -7
  40. data/vendor/faiss/faiss/IndexIVF.cpp +465 -362
  41. data/vendor/faiss/faiss/IndexIVF.h +33 -12
  42. data/vendor/faiss/faiss/IndexIVFAdditiveQuantizer.cpp +77 -74
  43. data/vendor/faiss/faiss/IndexIVFAdditiveQuantizerFastScan.cpp +96 -93
  44. data/vendor/faiss/faiss/IndexIVFAdditiveQuantizerFastScan.h +4 -1
  45. data/vendor/faiss/faiss/IndexIVFFastScan.cpp +357 -238
  46. data/vendor/faiss/faiss/IndexIVFFastScan.h +42 -41
  47. data/vendor/faiss/faiss/IndexIVFFlat.cpp +36 -68
  48. data/vendor/faiss/faiss/IndexIVFFlat.h +32 -0
  49. data/vendor/faiss/faiss/IndexIVFFlatPanorama.cpp +53 -30
  50. data/vendor/faiss/faiss/IndexIVFFlatPanorama.h +3 -1
  51. data/vendor/faiss/faiss/IndexIVFIndependentQuantizer.cpp +18 -15
  52. data/vendor/faiss/faiss/IndexIVFPQ.cpp +71 -843
  53. data/vendor/faiss/faiss/IndexIVFPQFastScan.cpp +151 -121
  54. data/vendor/faiss/faiss/IndexIVFPQFastScan.h +3 -0
  55. data/vendor/faiss/faiss/IndexIVFPQR.cpp +21 -17
  56. data/vendor/faiss/faiss/IndexIVFRaBitQ.cpp +26 -39
  57. data/vendor/faiss/faiss/IndexIVFRaBitQ.h +2 -1
  58. data/vendor/faiss/faiss/IndexIVFRaBitQFastScan.cpp +475 -476
  59. data/vendor/faiss/faiss/IndexIVFRaBitQFastScan.h +248 -93
  60. data/vendor/faiss/faiss/IndexIVFSpectralHash.cpp +41 -127
  61. data/vendor/faiss/faiss/IndexIVFSpectralHash.h +1 -1
  62. data/vendor/faiss/faiss/IndexLSH.cpp +36 -19
  63. data/vendor/faiss/faiss/IndexLattice.cpp +13 -13
  64. data/vendor/faiss/faiss/IndexNNDescent.cpp +36 -21
  65. data/vendor/faiss/faiss/IndexNNDescent.h +2 -2
  66. data/vendor/faiss/faiss/IndexNSG.cpp +39 -23
  67. data/vendor/faiss/faiss/IndexNeuralNetCodec.cpp +31 -11
  68. data/vendor/faiss/faiss/IndexPQ.cpp +128 -221
  69. data/vendor/faiss/faiss/IndexPQ.h +3 -2
  70. data/vendor/faiss/faiss/IndexPQFastScan.cpp +20 -14
  71. data/vendor/faiss/faiss/IndexPQFastScan.h +3 -0
  72. data/vendor/faiss/faiss/IndexPreTransform.cpp +25 -18
  73. data/vendor/faiss/faiss/IndexPreTransform.h +1 -1
  74. data/vendor/faiss/faiss/IndexRaBitQ.cpp +11 -36
  75. data/vendor/faiss/faiss/IndexRaBitQ.h +2 -1
  76. data/vendor/faiss/faiss/IndexRaBitQFastScan.cpp +41 -277
  77. data/vendor/faiss/faiss/IndexRaBitQFastScan.h +183 -27
  78. data/vendor/faiss/faiss/IndexRefine.cpp +30 -25
  79. data/vendor/faiss/faiss/IndexRefine.h +4 -4
  80. data/vendor/faiss/faiss/IndexReplicas.cpp +6 -6
  81. data/vendor/faiss/faiss/IndexRowwiseMinMax.cpp +15 -14
  82. data/vendor/faiss/faiss/IndexRowwiseMinMax.h +1 -1
  83. data/vendor/faiss/faiss/IndexScalarQuantizer.cpp +82 -14
  84. data/vendor/faiss/faiss/IndexShards.cpp +10 -9
  85. data/vendor/faiss/faiss/IndexShardsIVF.cpp +21 -15
  86. data/vendor/faiss/faiss/MatrixStats.cpp +5 -4
  87. data/vendor/faiss/faiss/MetaIndexes.cpp +19 -17
  88. data/vendor/faiss/faiss/MetaIndexes.h +1 -1
  89. data/vendor/faiss/faiss/MetricType.h +14 -7
  90. data/vendor/faiss/faiss/SuperKMeans.cpp +656 -0
  91. data/vendor/faiss/faiss/SuperKMeans.h +97 -0
  92. data/vendor/faiss/faiss/VectorTransform.cpp +237 -149
  93. data/vendor/faiss/faiss/VectorTransform.h +16 -16
  94. data/vendor/faiss/faiss/build.cpp +23 -0
  95. data/vendor/faiss/faiss/build.h +15 -0
  96. data/vendor/faiss/faiss/clone_index.cpp +48 -47
  97. data/vendor/faiss/faiss/cppcontrib/sa_decode/Level2-avx2-inl.h +47 -47
  98. data/vendor/faiss/faiss/cppcontrib/sa_decode/Level2-inl.h +11 -0
  99. data/vendor/faiss/faiss/cppcontrib/sa_decode/PQ-avx2-inl.h +38 -38
  100. data/vendor/faiss/faiss/cppcontrib/sa_decode/PQ-inl.h +11 -0
  101. data/vendor/faiss/faiss/factory_tools.cpp +5 -0
  102. data/vendor/faiss/faiss/gpu/GpuIndexCagra.h +6 -5
  103. data/vendor/faiss/faiss/gpu/GpuResources.h +1 -1
  104. data/vendor/faiss/faiss/gpu/StandardGpuResources.cpp +9 -9
  105. data/vendor/faiss/faiss/gpu/StandardGpuResources.h +4 -3
  106. data/vendor/faiss/faiss/gpu/test/TestGpuIndexFlat.cpp +46 -0
  107. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFFlat.cpp +56 -0
  108. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFPQ.cpp +78 -1
  109. data/vendor/faiss/faiss/gpu/test/TestUtils.cpp +72 -0
  110. data/vendor/faiss/faiss/gpu/test/TestUtils.h +23 -0
  111. data/vendor/faiss/faiss/gpu/utils/CuvsFilterConvert.h +1 -1
  112. data/vendor/faiss/faiss/gpu/utils/CuvsUtils.h +21 -10
  113. data/vendor/faiss/faiss/gpu_metal/GpuIndexFlat.h +22 -0
  114. data/vendor/faiss/faiss/gpu_metal/MetalCloner.h +35 -0
  115. data/vendor/faiss/faiss/gpu_metal/MetalFlatKernels.h +40 -0
  116. data/vendor/faiss/faiss/gpu_metal/MetalIndex.h +51 -0
  117. data/vendor/faiss/faiss/gpu_metal/MetalIndexFlat.h +65 -0
  118. data/vendor/faiss/faiss/gpu_metal/MetalKernels.h +66 -0
  119. data/vendor/faiss/faiss/gpu_metal/MetalResources.h +79 -0
  120. data/vendor/faiss/faiss/gpu_metal/StandardMetalResources.h +35 -0
  121. data/vendor/faiss/faiss/impl/AdSampling.cpp +103 -0
  122. data/vendor/faiss/faiss/impl/AdSampling.h +35 -0
  123. data/vendor/faiss/faiss/impl/AdditiveQuantizer.cpp +29 -25
  124. data/vendor/faiss/faiss/impl/AdditiveQuantizer.h +1 -0
  125. data/vendor/faiss/faiss/impl/AuxIndexStructures.cpp +10 -9
  126. data/vendor/faiss/faiss/impl/AuxIndexStructures.h +3 -0
  127. data/vendor/faiss/faiss/impl/ClusteringHelpers.cpp +244 -0
  128. data/vendor/faiss/faiss/impl/ClusteringHelpers.h +94 -0
  129. data/vendor/faiss/faiss/impl/ClusteringInitialization.cpp +16 -16
  130. data/vendor/faiss/faiss/impl/CodePacker.cpp +3 -3
  131. data/vendor/faiss/faiss/impl/CodePackerRaBitQ.cpp +1 -1
  132. data/vendor/faiss/faiss/impl/DistanceComputer.h +8 -8
  133. data/vendor/faiss/faiss/impl/FaissAssert.h +6 -3
  134. data/vendor/faiss/faiss/impl/FaissException.h +50 -3
  135. data/vendor/faiss/faiss/impl/HNSW.cpp +92 -317
  136. data/vendor/faiss/faiss/impl/HNSW.h +13 -34
  137. data/vendor/faiss/faiss/impl/IDSelector.cpp +15 -11
  138. data/vendor/faiss/faiss/impl/IDSelector.h +8 -8
  139. data/vendor/faiss/faiss/impl/InvertedListScannerStats.h +26 -0
  140. data/vendor/faiss/faiss/impl/LocalSearchQuantizer.cpp +82 -77
  141. data/vendor/faiss/faiss/impl/NNDescent.cpp +62 -25
  142. data/vendor/faiss/faiss/impl/NNDescent.h +6 -2
  143. data/vendor/faiss/faiss/impl/NSG.cpp +38 -21
  144. data/vendor/faiss/faiss/impl/NSG.h +4 -4
  145. data/vendor/faiss/faiss/impl/Panorama.cpp +23 -6
  146. data/vendor/faiss/faiss/impl/Panorama.h +258 -87
  147. data/vendor/faiss/faiss/impl/PdxLayout.cpp +93 -0
  148. data/vendor/faiss/faiss/impl/PdxLayout.h +41 -0
  149. data/vendor/faiss/faiss/impl/PolysemousTraining.cpp +46 -32
  150. data/vendor/faiss/faiss/impl/PolysemousTraining.h +3 -3
  151. data/vendor/faiss/faiss/impl/ProductAdditiveQuantizer.cpp +35 -35
  152. data/vendor/faiss/faiss/impl/ProductQuantizer-inl.h +21 -16
  153. data/vendor/faiss/faiss/impl/ProductQuantizer.cpp +30 -23
  154. data/vendor/faiss/faiss/impl/Quantizer.h +2 -2
  155. data/vendor/faiss/faiss/impl/RaBitQUtils.cpp +55 -49
  156. data/vendor/faiss/faiss/impl/RaBitQUtils.h +65 -0
  157. data/vendor/faiss/faiss/impl/RaBitQuantizer.cpp +296 -283
  158. data/vendor/faiss/faiss/impl/ResidualQuantizer.cpp +26 -23
  159. data/vendor/faiss/faiss/impl/ResidualQuantizer.h +1 -1
  160. data/vendor/faiss/faiss/impl/ResultHandler.h +99 -75
  161. data/vendor/faiss/faiss/impl/ScalarQuantizer.cpp +52 -4
  162. data/vendor/faiss/faiss/impl/ScalarQuantizer.h +27 -1
  163. data/vendor/faiss/faiss/impl/ThreadedIndex-inl.h +14 -11
  164. data/vendor/faiss/faiss/impl/VisitedTable.h +7 -0
  165. data/vendor/faiss/faiss/impl/approx_topk/approx_topk.h +276 -0
  166. data/vendor/faiss/faiss/impl/approx_topk/avx2.cpp +68 -0
  167. data/vendor/faiss/faiss/{utils → impl}/approx_topk/generic.h +15 -8
  168. data/vendor/faiss/faiss/impl/approx_topk/neon.cpp +68 -0
  169. data/vendor/faiss/faiss/impl/approx_topk/rq_beam_search_tab-inl.h +169 -0
  170. data/vendor/faiss/faiss/impl/approx_topk/rq_beam_search_tab.h +117 -0
  171. data/vendor/faiss/faiss/impl/approx_topk/simdlib256-inl.h +146 -0
  172. data/vendor/faiss/faiss/impl/binary_hamming/IndexBinaryHNSW_impl.h +73 -0
  173. data/vendor/faiss/faiss/impl/binary_hamming/IndexBinaryHash_impl.h +270 -0
  174. data/vendor/faiss/faiss/impl/binary_hamming/IndexBinaryIVF_impl.h +460 -0
  175. data/vendor/faiss/faiss/impl/binary_hamming/IndexIVFSpectralHash_impl.h +159 -0
  176. data/vendor/faiss/faiss/impl/binary_hamming/IndexPQ_impl.h +92 -0
  177. data/vendor/faiss/faiss/impl/binary_hamming/avx2.cpp +26 -0
  178. data/vendor/faiss/faiss/impl/binary_hamming/avx512.cpp +26 -0
  179. data/vendor/faiss/faiss/impl/binary_hamming/dispatch.h +143 -0
  180. data/vendor/faiss/faiss/impl/binary_hamming/neon.cpp +26 -0
  181. data/vendor/faiss/faiss/impl/binary_hamming/rvv.cpp +26 -0
  182. data/vendor/faiss/faiss/impl/expanded_scanners.h +8 -3
  183. data/vendor/faiss/faiss/impl/{FastScanDistancePostProcessing.h → fast_scan/FastScanDistancePostProcessing.h} +13 -6
  184. data/vendor/faiss/faiss/impl/{LookupTableScaler.h → fast_scan/LookupTableScaler.h} +16 -5
  185. data/vendor/faiss/faiss/impl/fast_scan/accumulate_loops.h +237 -0
  186. data/vendor/faiss/faiss/impl/fast_scan/accumulate_loops_512.h +185 -0
  187. data/vendor/faiss/faiss/impl/fast_scan/decompose_qbs.h +229 -0
  188. data/vendor/faiss/faiss/impl/fast_scan/dispatching.h +268 -0
  189. data/vendor/faiss/faiss/impl/{pq4_fast_scan.cpp → fast_scan/fast_scan.cpp} +169 -2
  190. data/vendor/faiss/faiss/impl/fast_scan/fast_scan.h +341 -0
  191. data/vendor/faiss/faiss/impl/fast_scan/impl-avx2.cpp +36 -0
  192. data/vendor/faiss/faiss/impl/fast_scan/impl-avx512.cpp +40 -0
  193. data/vendor/faiss/faiss/impl/fast_scan/impl-neon.cpp +120 -0
  194. data/vendor/faiss/faiss/impl/fast_scan/impl-riscv.cpp +104 -0
  195. data/vendor/faiss/faiss/impl/fast_scan/kernels_simd256.h +213 -0
  196. data/vendor/faiss/faiss/impl/{pq4_fast_scan_search_qbs.cpp → fast_scan/kernels_simd512.h} +26 -356
  197. data/vendor/faiss/faiss/impl/fast_scan/rabitq_dispatching.h +90 -0
  198. data/vendor/faiss/faiss/impl/fast_scan/rabitq_result_handler.h +108 -0
  199. data/vendor/faiss/faiss/impl/{simd_result_handlers.h → fast_scan/simd_result_handlers.h} +282 -134
  200. data/vendor/faiss/faiss/impl/hnsw/LockVector.cpp +54 -0
  201. data/vendor/faiss/faiss/impl/hnsw/LockVector.h +64 -0
  202. data/vendor/faiss/faiss/impl/hnsw/MinimaxHeap.cpp +91 -0
  203. data/vendor/faiss/faiss/impl/hnsw/MinimaxHeap.h +64 -0
  204. data/vendor/faiss/faiss/impl/hnsw/avx2.cpp +104 -0
  205. data/vendor/faiss/faiss/impl/hnsw/avx512.cpp +111 -0
  206. data/vendor/faiss/faiss/impl/index_read.cpp +1132 -45
  207. data/vendor/faiss/faiss/impl/index_read_utils.h +1 -1
  208. data/vendor/faiss/faiss/impl/index_write.cpp +95 -13
  209. data/vendor/faiss/faiss/impl/io.cpp +6 -6
  210. data/vendor/faiss/faiss/impl/io_macros.h +33 -16
  211. data/vendor/faiss/faiss/impl/kmeans1d.cpp +10 -10
  212. data/vendor/faiss/faiss/impl/lattice_Zn.cpp +37 -23
  213. data/vendor/faiss/faiss/impl/lattice_Zn.h +6 -6
  214. data/vendor/faiss/faiss/impl/mapped_io.cpp +6 -6
  215. data/vendor/faiss/faiss/impl/platform_macros.h +11 -4
  216. data/vendor/faiss/faiss/impl/pq_code_distance/IVFPQScanner_impl.h +549 -0
  217. data/vendor/faiss/faiss/impl/pq_code_distance/IVFPQ_QueryTables.cpp +245 -0
  218. data/vendor/faiss/faiss/impl/pq_code_distance/IVFPQ_QueryTables.h +105 -0
  219. data/vendor/faiss/faiss/impl/pq_code_distance/PQDistanceComputer_impl.h +106 -0
  220. data/vendor/faiss/faiss/impl/pq_code_distance/avx2.cpp +21 -0
  221. data/vendor/faiss/faiss/impl/pq_code_distance/avx512.cpp +21 -0
  222. data/vendor/faiss/faiss/impl/pq_code_distance/neon.cpp +21 -0
  223. data/vendor/faiss/faiss/impl/pq_code_distance/{pq_code_distance-avx2.cpp → pq_code_distance-avx2.h} +9 -13
  224. data/vendor/faiss/faiss/impl/pq_code_distance/{pq_code_distance-avx512.cpp → pq_code_distance-avx512.h} +9 -57
  225. data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-generic.cpp +29 -111
  226. data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-generic.h +96 -0
  227. data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-inl.h +238 -5
  228. data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-sve.cpp +5 -7
  229. data/vendor/faiss/faiss/impl/pq_code_distance/rvv.cpp +68 -0
  230. data/vendor/faiss/faiss/impl/residual_quantizer_encode_steps.cpp +311 -477
  231. data/vendor/faiss/faiss/impl/residual_quantizer_encode_steps.h +1 -1
  232. data/vendor/faiss/faiss/impl/scalar_quantizer/codecs.h +1 -1
  233. data/vendor/faiss/faiss/impl/scalar_quantizer/distance_computers.h +3 -2
  234. data/vendor/faiss/faiss/impl/scalar_quantizer/quantizers.h +102 -11
  235. data/vendor/faiss/faiss/impl/scalar_quantizer/scanners.h +27 -1
  236. data/vendor/faiss/faiss/impl/scalar_quantizer/similarities.h +3 -3
  237. data/vendor/faiss/faiss/impl/scalar_quantizer/sq-avx2.cpp +148 -0
  238. data/vendor/faiss/faiss/impl/scalar_quantizer/sq-avx512.cpp +167 -0
  239. data/vendor/faiss/faiss/impl/scalar_quantizer/sq-dispatch.h +59 -0
  240. data/vendor/faiss/faiss/impl/scalar_quantizer/sq-neon.cpp +163 -0
  241. data/vendor/faiss/faiss/impl/scalar_quantizer/sq-rvv.cpp +311 -0
  242. data/vendor/faiss/faiss/impl/scalar_quantizer/training.cpp +192 -8
  243. data/vendor/faiss/faiss/impl/scalar_quantizer/training.h +12 -0
  244. data/vendor/faiss/faiss/impl/simd_dispatch.h +100 -66
  245. data/vendor/faiss/faiss/impl/simdlib/simdlib.h +57 -0
  246. data/vendor/faiss/faiss/{utils → impl/simdlib}/simdlib_avx2.h +264 -172
  247. data/vendor/faiss/faiss/impl/simdlib/simdlib_avx512.h +414 -0
  248. data/vendor/faiss/faiss/impl/simdlib/simdlib_dispatch.h +44 -0
  249. data/vendor/faiss/faiss/{utils → impl/simdlib}/simdlib_emulated.h +231 -166
  250. data/vendor/faiss/faiss/{utils → impl/simdlib}/simdlib_neon.h +270 -218
  251. data/vendor/faiss/faiss/{utils → impl/simdlib}/simdlib_ppc64.h +201 -160
  252. data/vendor/faiss/faiss/impl/svs_io.cpp +12 -3
  253. data/vendor/faiss/faiss/impl/svs_io.h +8 -2
  254. data/vendor/faiss/faiss/index_factory.cpp +86 -18
  255. data/vendor/faiss/faiss/index_io.h +24 -0
  256. data/vendor/faiss/faiss/invlists/BlockInvertedLists.cpp +66 -16
  257. data/vendor/faiss/faiss/invlists/DirectMap.cpp +24 -14
  258. data/vendor/faiss/faiss/invlists/DirectMap.h +4 -3
  259. data/vendor/faiss/faiss/invlists/InvertedLists.cpp +157 -73
  260. data/vendor/faiss/faiss/invlists/InvertedLists.h +86 -23
  261. data/vendor/faiss/faiss/invlists/InvertedListsIOHook.cpp +4 -4
  262. data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.cpp +13 -13
  263. data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.h +1 -1
  264. data/vendor/faiss/faiss/svs/IndexSVSFaissUtils.h +1 -1
  265. data/vendor/faiss/faiss/svs/IndexSVSFlat.cpp +2 -2
  266. data/vendor/faiss/faiss/svs/IndexSVSIVF.cpp +350 -0
  267. data/vendor/faiss/faiss/svs/IndexSVSIVF.h +128 -0
  268. data/vendor/faiss/faiss/svs/IndexSVSIVFLVQ.cpp +40 -0
  269. data/vendor/faiss/faiss/svs/IndexSVSIVFLVQ.h +43 -0
  270. data/vendor/faiss/faiss/svs/IndexSVSIVFLeanVec.cpp +225 -0
  271. data/vendor/faiss/faiss/svs/IndexSVSIVFLeanVec.h +71 -0
  272. data/vendor/faiss/faiss/svs/IndexSVSVamana.cpp +25 -1
  273. data/vendor/faiss/faiss/svs/IndexSVSVamana.h +18 -2
  274. data/vendor/faiss/faiss/svs/IndexSVSVamanaLVQ.h +1 -1
  275. data/vendor/faiss/faiss/svs/IndexSVSVamanaLeanVec.cpp +12 -3
  276. data/vendor/faiss/faiss/svs/IndexSVSVamanaLeanVec.h +7 -2
  277. data/vendor/faiss/faiss/utils/Heap.cpp +10 -10
  278. data/vendor/faiss/faiss/utils/NeuralNet.cpp +47 -36
  279. data/vendor/faiss/faiss/utils/NeuralNet.h +1 -1
  280. data/vendor/faiss/faiss/utils/approx_topk_hamming/approx_topk_hamming.h +10 -4
  281. data/vendor/faiss/faiss/utils/distances.cpp +390 -560
  282. data/vendor/faiss/faiss/utils/distances.h +20 -1
  283. data/vendor/faiss/faiss/utils/distances_dispatch.h +117 -37
  284. data/vendor/faiss/faiss/utils/distances_fused/avx512.cpp +8 -7
  285. data/vendor/faiss/faiss/utils/distances_fused/distances_fused.cpp +33 -14
  286. data/vendor/faiss/faiss/utils/distances_fused/distances_fused.h +12 -1
  287. data/vendor/faiss/faiss/utils/distances_fused/simdlib_based.cpp +16 -293
  288. data/vendor/faiss/faiss/utils/distances_fused/simdlib_based_neon.cpp +57 -0
  289. data/vendor/faiss/faiss/utils/distances_fused/simdlib_kernel-inl.h +290 -0
  290. data/vendor/faiss/faiss/utils/distances_simd.cpp +5 -177
  291. data/vendor/faiss/faiss/utils/extra_distances.cpp +9 -8
  292. data/vendor/faiss/faiss/utils/extra_distances.h +32 -6
  293. data/vendor/faiss/faiss/utils/hamming-inl.h +13 -11
  294. data/vendor/faiss/faiss/utils/hamming.cpp +66 -517
  295. data/vendor/faiss/faiss/utils/hamming.h +92 -2
  296. data/vendor/faiss/faiss/utils/hamming_distance/common.h +287 -10
  297. data/vendor/faiss/faiss/utils/hamming_distance/hamming_avx2.cpp +15 -0
  298. data/vendor/faiss/faiss/utils/hamming_distance/hamming_avx512.cpp +15 -0
  299. data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-avx2.h +142 -0
  300. data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-avx512.h +234 -0
  301. data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-generic.h +368 -0
  302. data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-neon.h +322 -0
  303. data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-rvv.h +39 -0
  304. data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer.h +146 -0
  305. data/vendor/faiss/faiss/utils/hamming_distance/hamming_impl.h +481 -0
  306. data/vendor/faiss/faiss/utils/hamming_distance/hamming_neon.cpp +15 -0
  307. data/vendor/faiss/faiss/utils/hamming_distance/hamming_rvv.cpp +15 -0
  308. data/vendor/faiss/faiss/utils/partitioning.cpp +66 -987
  309. data/vendor/faiss/faiss/utils/partitioning.h +31 -0
  310. data/vendor/faiss/faiss/utils/popcount.h +29 -0
  311. data/vendor/faiss/faiss/utils/pq_code_distance.h +2 -2
  312. data/vendor/faiss/faiss/utils/prefetch.h +2 -2
  313. data/vendor/faiss/faiss/utils/quantize_lut.cpp +30 -30
  314. data/vendor/faiss/faiss/utils/quantize_lut.h +1 -1
  315. data/vendor/faiss/faiss/utils/rabitq_simd.h +57 -536
  316. data/vendor/faiss/faiss/utils/random.cpp +6 -6
  317. data/vendor/faiss/faiss/utils/simd_impl/IVFFlatScanner-inl.h +51 -0
  318. data/vendor/faiss/faiss/utils/simd_impl/distances_aarch64.cpp +5 -1
  319. data/vendor/faiss/faiss/utils/simd_impl/distances_arm_sve.cpp +213 -4
  320. data/vendor/faiss/faiss/utils/simd_impl/distances_autovec-inl.h +163 -10
  321. data/vendor/faiss/faiss/utils/simd_impl/distances_avx2.cpp +250 -4
  322. data/vendor/faiss/faiss/utils/simd_impl/distances_avx512.cpp +7 -4
  323. data/vendor/faiss/faiss/utils/simd_impl/distances_rvv.cpp +189 -0
  324. data/vendor/faiss/faiss/utils/simd_impl/distances_simdlib256.h +195 -0
  325. data/vendor/faiss/faiss/utils/simd_impl/distances_sse-inl.h +2 -1
  326. data/vendor/faiss/faiss/utils/{distances_fused/simdlib_based.h → simd_impl/exhaustive_L2sqr_blas_cmax.h} +5 -10
  327. data/vendor/faiss/faiss/utils/simd_impl/hamming_impl.h +481 -0
  328. data/vendor/faiss/faiss/utils/simd_impl/partitioning_avx2.cpp +14 -0
  329. data/vendor/faiss/faiss/utils/simd_impl/partitioning_neon.cpp +14 -0
  330. data/vendor/faiss/faiss/utils/simd_impl/partitioning_simdlib256.h +1085 -0
  331. data/vendor/faiss/faiss/utils/simd_impl/rabitq_avx2.cpp +355 -0
  332. data/vendor/faiss/faiss/utils/simd_impl/rabitq_avx512.cpp +477 -0
  333. data/vendor/faiss/faiss/utils/simd_impl/rabitq_neon.cpp +55 -0
  334. data/vendor/faiss/faiss/utils/simd_impl/rabitq_rvv.cpp +55 -0
  335. data/vendor/faiss/faiss/utils/simd_impl/super_kmeans_dispatch.h +32 -0
  336. data/vendor/faiss/faiss/utils/simd_impl/super_kmeans_kernels.h +43 -0
  337. data/vendor/faiss/faiss/utils/simd_impl/super_kmeans_kernels_avx2.cpp +57 -0
  338. data/vendor/faiss/faiss/utils/simd_impl/super_kmeans_kernels_avx512.cpp +45 -0
  339. data/vendor/faiss/faiss/utils/simd_levels.cpp +17 -5
  340. data/vendor/faiss/faiss/utils/simd_levels.h +93 -1
  341. data/vendor/faiss/faiss/utils/sorting.cpp +48 -36
  342. data/vendor/faiss/faiss/utils/utils.cpp +5 -5
  343. data/vendor/faiss/faiss/utils/utils.h +3 -3
  344. metadata +119 -34
  345. data/vendor/faiss/faiss/impl/RaBitQStats.cpp +0 -29
  346. data/vendor/faiss/faiss/impl/RaBitQStats.h +0 -56
  347. data/vendor/faiss/faiss/impl/pq4_fast_scan.h +0 -224
  348. data/vendor/faiss/faiss/impl/pq4_fast_scan_search_1.cpp +0 -230
  349. data/vendor/faiss/faiss/utils/approx_topk/approx_topk.h +0 -84
  350. data/vendor/faiss/faiss/utils/approx_topk/avx2-inl.h +0 -196
  351. data/vendor/faiss/faiss/utils/approx_topk/mode.h +0 -34
  352. data/vendor/faiss/faiss/utils/distances_fused/avx512.h +0 -36
  353. data/vendor/faiss/faiss/utils/extra_distances-inl.h +0 -235
  354. data/vendor/faiss/faiss/utils/hamming_distance/avx2-inl.h +0 -462
  355. data/vendor/faiss/faiss/utils/hamming_distance/avx512-inl.h +0 -490
  356. data/vendor/faiss/faiss/utils/hamming_distance/generic-inl.h +0 -449
  357. data/vendor/faiss/faiss/utils/hamming_distance/hamdis-inl.h +0 -87
  358. data/vendor/faiss/faiss/utils/hamming_distance/neon-inl.h +0 -524
  359. data/vendor/faiss/faiss/utils/simdlib.h +0 -42
  360. data/vendor/faiss/faiss/utils/simdlib_avx512.h +0 -365
  361. /data/ext/faiss/{utils_rb.h → utils.h} +0 -0
@@ -58,7 +58,7 @@ struct Level1Quantizer {
58
58
  void encode_listno(idx_t list_no, uint8_t* code) const;
59
59
  idx_t decode_listno(const uint8_t* code) const;
60
60
 
61
- Level1Quantizer(Index* quantizer, size_t nlist);
61
+ Level1Quantizer(Index* quantizer_in, size_t nlist_in);
62
62
 
63
63
  Level1Quantizer();
64
64
 
@@ -68,6 +68,25 @@ struct Level1Quantizer {
68
68
  struct SearchParametersIVF : SearchParameters {
69
69
  size_t nprobe = 1; ///< number of probes at query time
70
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
+
71
90
  SearchParameters* quantizer_params = nullptr;
72
91
  /// context object to pass to InvertedLists
73
92
  void* inverted_list_context = nullptr;
@@ -86,8 +105,10 @@ struct IndexIVFInterface : Level1Quantizer {
86
105
  size_t nprobe = 1; ///< number of probes at query time
87
106
  size_t max_codes = 0; ///< max nb of codes to visit to do a query
88
107
 
89
- explicit IndexIVFInterface(Index* quantizer = nullptr, size_t nlist = 0)
90
- : Level1Quantizer(quantizer, nlist) {}
108
+ explicit IndexIVFInterface(
109
+ Index* quantizer_in = nullptr,
110
+ size_t nlist_in = 0)
111
+ : Level1Quantizer(quantizer_in, nlist_in) {}
91
112
 
92
113
  /** search a set of vectors, that are pre-quantized by the IVF
93
114
  * quantizer. Fill in the corresponding heaps with the query
@@ -203,12 +224,12 @@ struct IndexIVF : Index, IndexIVFInterface {
203
224
  * identifier.
204
225
  */
205
226
  IndexIVF(
206
- Index* quantizer,
207
- size_t d,
208
- size_t nlist,
209
- size_t code_size,
227
+ Index* quantizer_in,
228
+ size_t d_in,
229
+ size_t nlist_in,
230
+ size_t code_size_in,
210
231
  MetricType metric = METRIC_L2,
211
- bool own_invlists = true);
232
+ bool own_invlists_in = true);
212
233
 
213
234
  void reset() override;
214
235
 
@@ -484,9 +505,9 @@ struct InvertedListScanner {
484
505
  const IDSelector* sel;
485
506
 
486
507
  InvertedListScanner(
487
- bool store_pairs = false,
488
- const IDSelector* sel = nullptr)
489
- : 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) {}
490
511
 
491
512
  /// used in default implementation of scan_codes
492
513
  size_t code_size = 0;
@@ -512,7 +533,7 @@ struct InvertedListScanner {
512
533
  * @param k heap size
513
534
  * @return number of heap updates performed
514
535
  */
515
- virtual size_t scan_codes(
536
+ size_t scan_codes(
516
537
  size_t n,
517
538
  const uint8_t* codes,
518
539
  const idx_t* ids,
@@ -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;