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
@@ -9,8 +9,8 @@
9
9
 
10
10
  #include <memory>
11
11
 
12
- #include <faiss/impl/FastScanDistancePostProcessing.h>
13
- #include <faiss/impl/pq4_fast_scan.h>
12
+ #include <faiss/impl/fast_scan/FastScanDistancePostProcessing.h>
13
+ #include <faiss/impl/fast_scan/fast_scan.h>
14
14
  #include <faiss/utils/utils.h>
15
15
 
16
16
  namespace faiss {
@@ -20,25 +20,27 @@ inline size_t roundup(size_t a, size_t b) {
20
20
  }
21
21
 
22
22
  IndexPQFastScan::IndexPQFastScan(
23
- int d,
24
- size_t M,
25
- size_t nbits,
23
+ int d_in,
24
+ size_t M_in,
25
+ size_t nbits_in,
26
26
  MetricType metric,
27
- int bbs)
28
- : pq(d, M, nbits) {
29
- init_fastscan(d, M, nbits, metric, bbs);
27
+ int bbs_in)
28
+ : pq(d_in, M_in, nbits_in) {
29
+ init_fastscan(d_in, M_in, nbits_in, metric, bbs_in);
30
30
  }
31
31
 
32
- IndexPQFastScan::IndexPQFastScan(const IndexPQ& orig, int bbs) : pq(orig.pq) {
33
- init_fastscan(orig.d, pq.M, pq.nbits, orig.metric_type, bbs);
32
+ IndexPQFastScan::IndexPQFastScan(const IndexPQ& orig, int bbs_in)
33
+ : pq(orig.pq) {
34
+ init_fastscan(orig.d, pq.M, pq.nbits, orig.metric_type, bbs_in);
34
35
  ntotal = orig.ntotal;
35
- ntotal2 = roundup(ntotal, bbs);
36
+ ntotal2 = roundup(ntotal, bbs_in);
36
37
  is_trained = orig.is_trained;
37
38
  orig_codes = orig.codes.data();
38
39
 
39
40
  // pack the codes
40
41
  codes.resize(ntotal2 * M2 / 2);
41
- pq4_pack_codes(orig.codes.data(), ntotal, M, ntotal2, bbs, M2, codes.get());
42
+ pq4_pack_codes(
43
+ orig.codes.data(), ntotal, M, ntotal2, bbs_in, M2, codes.get());
42
44
  }
43
45
 
44
46
  void IndexPQFastScan::train(idx_t n, const float* x) {
@@ -49,9 +51,9 @@ void IndexPQFastScan::train(idx_t n, const float* x) {
49
51
  is_trained = true;
50
52
  }
51
53
 
52
- void IndexPQFastScan::compute_codes(uint8_t* codes, idx_t n, const float* x)
54
+ void IndexPQFastScan::compute_codes(uint8_t* out_codes, idx_t n, const float* x)
53
55
  const {
54
- pq.compute_codes(x, codes, n);
56
+ pq.compute_codes(x, out_codes, n);
55
57
  }
56
58
 
57
59
  void IndexPQFastScan::compute_float_LUT(
@@ -70,4 +72,8 @@ void IndexPQFastScan::sa_decode(idx_t n, const uint8_t* bytes, float* x) const {
70
72
  pq.decode(bytes, x, n);
71
73
  }
72
74
 
75
+ size_t IndexPQFastScan::fast_scan_code_size() const {
76
+ return M2 / 2;
77
+ }
78
+
73
79
  } // namespace faiss
@@ -52,6 +52,9 @@ struct IndexPQFastScan : IndexFastScan {
52
52
  const FastScanDistancePostProcessing& context) const override;
53
53
 
54
54
  void sa_decode(idx_t n, const uint8_t* bytes, float* x) const override;
55
+
56
+ /// Packed code size: M2 / 2 bytes (4-bit PQ sub-quantizer nibbles)
57
+ size_t fast_scan_code_size() const override;
55
58
  };
56
59
 
57
60
  } // namespace faiss
@@ -26,16 +26,20 @@ namespace faiss {
26
26
 
27
27
  IndexPreTransform::IndexPreTransform() : index(nullptr), own_fields(false) {}
28
28
 
29
- IndexPreTransform::IndexPreTransform(Index* index)
30
- : Index(index->d, index->metric_type), index(index), own_fields(false) {
31
- is_trained = index->is_trained;
32
- ntotal = index->ntotal;
29
+ IndexPreTransform::IndexPreTransform(Index* index_in)
30
+ : Index(index_in->d, index_in->metric_type),
31
+ index(index_in),
32
+ own_fields(false) {
33
+ is_trained = index_in->is_trained;
34
+ ntotal = index_in->ntotal;
33
35
  }
34
36
 
35
- IndexPreTransform::IndexPreTransform(VectorTransform* ltrans, Index* index)
36
- : Index(index->d, index->metric_type), index(index), own_fields(false) {
37
- is_trained = index->is_trained;
38
- ntotal = index->ntotal;
37
+ IndexPreTransform::IndexPreTransform(VectorTransform* ltrans, Index* index_in)
38
+ : Index(index_in->d, index_in->metric_type),
39
+ index(index_in),
40
+ own_fields(false) {
41
+ is_trained = index_in->is_trained;
42
+ ntotal = index_in->ntotal;
39
43
  prepend_transform(ltrans);
40
44
  }
41
45
 
@@ -48,7 +52,7 @@ void IndexPreTransform::prepend_transform(VectorTransform* ltrans) {
48
52
 
49
53
  IndexPreTransform::~IndexPreTransform() {
50
54
  if (own_fields) {
51
- for (int i = 0; i < chain.size(); i++) {
55
+ for (size_t i = 0; i < chain.size(); i++) {
52
56
  delete chain[i];
53
57
  }
54
58
  delete index;
@@ -58,9 +62,9 @@ IndexPreTransform::~IndexPreTransform() {
58
62
  void IndexPreTransform::train(idx_t n, const float* x) {
59
63
  int last_untrained = 0;
60
64
  if (!index->is_trained) {
61
- last_untrained = chain.size();
65
+ last_untrained = static_cast<int>(chain.size());
62
66
  } else {
63
- for (int i = chain.size() - 1; i >= 0; i--) {
67
+ for (int i = static_cast<int>(chain.size()) - 1; i >= 0; i--) {
64
68
  if (!chain[i]->is_trained) {
65
69
  last_untrained = i;
66
70
  break;
@@ -76,7 +80,7 @@ void IndexPreTransform::train(idx_t n, const float* x) {
76
80
  }
77
81
 
78
82
  for (int i = 0; i <= last_untrained; i++) {
79
- if (i < chain.size()) {
83
+ if (i < static_cast<int>(chain.size())) {
80
84
  VectorTransform* ltrans = chain[i];
81
85
  if (!ltrans->is_trained) {
82
86
  if (verbose) {
@@ -119,13 +123,15 @@ const float* IndexPreTransform::apply_chain(idx_t n, const float* x) const {
119
123
  const float* prev_x = x;
120
124
  std::unique_ptr<const float[]> del;
121
125
 
122
- for (int i = 0; i < chain.size(); i++) {
126
+ for (size_t i = 0; i < chain.size(); i++) {
123
127
  float* xt = chain[i]->apply(n, prev_x);
124
128
  std::unique_ptr<const float[]> del2(xt);
125
129
  del2.swap(del);
126
130
  prev_x = xt;
127
131
  }
128
- del.release();
132
+ // Intentionally release ownership: caller takes ownership of the returned
133
+ // buffer
134
+ (void)del.release();
129
135
  return prev_x;
130
136
  }
131
137
 
@@ -134,7 +140,7 @@ void IndexPreTransform::reverse_chain(idx_t n, const float* xt, float* x)
134
140
  const float* next_x = xt;
135
141
  std::unique_ptr<const float[]> del;
136
142
 
137
- for (int i = chain.size() - 1; i >= 0; i--) {
143
+ for (int i = static_cast<int>(chain.size()) - 1; i >= 0; i--) {
138
144
  float* prev_x = (i == 0) ? x : new float[n * chain[i]->d_in];
139
145
  std::unique_ptr<const float[]> del2((prev_x == x) ? nullptr : prev_x);
140
146
  chain[i]->reverse_transform(n, next_x, prev_x);
@@ -305,7 +311,7 @@ void IndexPreTransform::check_compatible_for_merge(
305
311
  auto other = dynamic_cast<const IndexPreTransform*>(&otherIndex);
306
312
  FAISS_THROW_IF_NOT(other);
307
313
  FAISS_THROW_IF_NOT(chain.size() == other->chain.size());
308
- for (int i = 0; i < chain.size(); i++) {
314
+ for (size_t i = 0; i < chain.size(); i++) {
309
315
  chain[i]->check_identical(*other->chain[i]);
310
316
  }
311
317
  index->check_compatible_for_merge(*other->index);
@@ -318,8 +324,9 @@ struct PreTransformDistanceComputer : DistanceComputer {
318
324
  std::unique_ptr<DistanceComputer> sub_dc;
319
325
  std::unique_ptr<const float[]> query;
320
326
 
321
- explicit PreTransformDistanceComputer(const IndexPreTransform* index)
322
- : index(index), sub_dc(index->index->get_distance_computer()) {}
327
+ explicit PreTransformDistanceComputer(const IndexPreTransform* index_in)
328
+ : index(index_in),
329
+ sub_dc(index_in->index->get_distance_computer()) {}
323
330
 
324
331
  void set_query(const float* x) override {
325
332
  const float* xt = index->apply_chain(1, x);
@@ -26,7 +26,7 @@ struct IndexPreTransform : Index {
26
26
  std::vector<VectorTransform*> chain; ///! chain of transforms
27
27
  Index* index; ///! the sub-index
28
28
 
29
- bool own_fields; ///! whether pointers are deleted in destructor
29
+ bool own_fields = false; ///! whether pointers are deleted in destructor
30
30
 
31
31
  explicit IndexPreTransform(Index* index);
32
32
 
@@ -21,8 +21,8 @@ using rabitq_utils::SignBitFactorsWithError;
21
21
 
22
22
  IndexRaBitQ::IndexRaBitQ() = default;
23
23
 
24
- IndexRaBitQ::IndexRaBitQ(idx_t d, MetricType metric, uint8_t nb_bits_in)
25
- : IndexFlatCodes(0, d, metric), rabitq(d, metric, nb_bits_in) {
24
+ IndexRaBitQ::IndexRaBitQ(idx_t d_in, MetricType metric, uint8_t nb_bits_in)
25
+ : IndexFlatCodes(0, d_in, metric), rabitq(d_in, metric, nb_bits_in) {
26
26
  // Update code size based on nb_bits
27
27
  code_size = rabitq.code_size;
28
28
 
@@ -32,14 +32,14 @@ IndexRaBitQ::IndexRaBitQ(idx_t d, MetricType metric, uint8_t nb_bits_in)
32
32
  void IndexRaBitQ::train(idx_t n, const float* x) {
33
33
  // compute a centroid
34
34
  std::vector<float> centroid(d, 0);
35
- for (size_t i = 0; i < n; i++) {
36
- for (size_t j = 0; j < d; j++) {
35
+ for (idx_t i = 0; i < n; i++) {
36
+ for (size_t j = 0; j < static_cast<size_t>(d); j++) {
37
37
  centroid[j] += x[i * d + j];
38
38
  }
39
39
  }
40
40
 
41
41
  if (n != 0) {
42
- for (size_t j = 0; j < d; j++) {
42
+ for (size_t j = 0; j < static_cast<size_t>(d); j++) {
43
43
  centroid[j] /= (float)n;
44
44
  }
45
45
  }
@@ -70,10 +70,10 @@ FlatCodesDistanceComputer* IndexRaBitQ::get_FlatCodesDistanceComputer() const {
70
70
  }
71
71
 
72
72
  FlatCodesDistanceComputer* IndexRaBitQ::get_quantized_distance_computer(
73
- const uint8_t qb,
74
- bool centered) const {
73
+ const uint8_t qb_in,
74
+ bool centered_in) const {
75
75
  FlatCodesDistanceComputer* dc =
76
- rabitq.get_distance_computer(qb, center.data(), centered);
76
+ rabitq.get_distance_computer(qb_in, center.data(), centered_in);
77
77
  dc->code_size = rabitq.code_size;
78
78
  dc->codes = codes.data();
79
79
  return dc;
@@ -102,19 +102,12 @@ struct Run_search_with_dc_res {
102
102
  index->get_quantized_distance_computer(qb, centered));
103
103
  SingleResultHandler resi(res);
104
104
  #pragma omp for
105
- for (int64_t q = 0; q < res.nq; q++) {
105
+ for (int64_t q = 0; q < static_cast<int64_t>(res.nq); q++) {
106
106
  resi.begin(q);
107
107
  dc_base->set_query(xq + d * q);
108
108
 
109
- // Stats tracking for multi-bit two-stage search only
110
- // n_1bit_evaluations: candidates evaluated using 1-bit lower
111
- // bound n_multibit_evaluations: candidates requiring full
112
- // multi-bit distance
113
- size_t local_1bit_evaluations = 0;
114
- size_t local_multibit_evaluations = 0;
115
-
116
109
  if (ex_bits == 0) {
117
- // 1-bit: Standard single-stage search (no stats tracking)
110
+ // 1-bit: Standard single-stage search
118
111
  for (size_t i = 0; i < ntotal; i++) {
119
112
  if (res.is_in_selection(i)) {
120
113
  float dis = (*dc_base)(i);
@@ -133,7 +126,6 @@ struct Run_search_with_dc_res {
133
126
  dc != nullptr,
134
127
  "Failed to cast to RaBitQDistanceComputer for two-stage search");
135
128
 
136
- // Use appropriate comparison based on metric type
137
129
  bool is_similarity =
138
130
  is_similarity_metric(index->metric_type);
139
131
 
@@ -142,16 +134,9 @@ struct Run_search_with_dc_res {
142
134
  const uint8_t* code =
143
135
  index->codes.data() + i * index->code_size;
144
136
 
145
- local_1bit_evaluations++;
146
-
147
- // Stage 1: Compute distance bound using 1-bit codes
148
- // For L2 (min-heap): use lower_bound (est -
149
- // error) For IP (max-heap): use upper_bound (est
150
- // + error)
151
137
  float est_distance =
152
138
  dc->distance_to_code_1bit(code);
153
139
 
154
- // Extract f_error for filtering
155
140
  size_t code_size_base = (index->d + 7) / 8;
156
141
  const rabitq_utils::SignBitFactorsWithError*
157
142
  base_fac = reinterpret_cast<
@@ -159,7 +144,6 @@ struct Run_search_with_dc_res {
159
144
  SignBitFactorsWithError*>(
160
145
  code + code_size_base);
161
146
 
162
- // Stage 2: Adaptive filtering
163
147
  bool should_refine =
164
148
  rabitq_utils::should_refine_candidate(
165
149
  est_distance,
@@ -168,8 +152,6 @@ struct Run_search_with_dc_res {
168
152
  resi.threshold,
169
153
  is_similarity);
170
154
  if (should_refine) {
171
- local_multibit_evaluations++;
172
- // Compute full multi-bit distance
173
155
  float dist_full =
174
156
  dc->distance_to_code_full(code);
175
157
  resi.add_result(dist_full, i);
@@ -178,13 +160,6 @@ struct Run_search_with_dc_res {
178
160
  }
179
161
  }
180
162
 
181
- // Update global stats atomically
182
- #pragma omp atomic
183
- rabitq_stats.n_1bit_evaluations += local_1bit_evaluations;
184
- #pragma omp atomic
185
- rabitq_stats.n_multibit_evaluations +=
186
- local_multibit_evaluations;
187
-
188
163
  resi.end();
189
164
  }
190
165
  }
@@ -224,7 +199,7 @@ void IndexRaBitQ::search(
224
199
  }
225
200
 
226
201
  void IndexRaBitQ::range_search(
227
- idx_t n,
202
+ idx_t /*n*/,
228
203
  const float* x,
229
204
  float radius,
230
205
  RangeSearchResult* result,
@@ -8,7 +8,6 @@
8
8
  #pragma once
9
9
 
10
10
  #include <faiss/IndexFlatCodes.h>
11
- #include <faiss/impl/RaBitQStats.h>
12
11
  #include <faiss/impl/RaBitQuantizer.h>
13
12
 
14
13
  namespace faiss {
@@ -26,6 +25,8 @@ struct IndexRaBitQ : IndexFlatCodes {
26
25
 
27
26
  // the default number of bits to quantize a query with.
28
27
  // use '0' to disable quantization and use raw fp32 values.
28
+ // Note: qb=0 is NOT supported by FastScan variants, which require
29
+ // quantized queries for SIMD lookup table construction.
29
30
  uint8_t qb = 4;
30
31
 
31
32
  // quantize the query with a zero-centered scalar quantizer.