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
@@ -14,9 +14,9 @@
14
14
 
15
15
  #include <faiss/impl/AuxIndexStructures.h>
16
16
  #include <faiss/impl/FaissAssert.h>
17
- #include <faiss/impl/FastScanDistancePostProcessing.h>
18
- #include <faiss/impl/LookupTableScaler.h>
19
- #include <faiss/impl/pq4_fast_scan.h>
17
+ #include <faiss/impl/fast_scan/FastScanDistancePostProcessing.h>
18
+ #include <faiss/impl/fast_scan/fast_scan.h>
19
+ #include <faiss/impl/simd_dispatch.h>
20
20
  #include <faiss/invlists/BlockInvertedLists.h>
21
21
  #include <faiss/utils/distances.h>
22
22
  #include <faiss/utils/quantize_lut.h>
@@ -29,46 +29,46 @@ inline size_t roundup(size_t a, size_t b) {
29
29
  }
30
30
 
31
31
  IndexIVFAdditiveQuantizerFastScan::IndexIVFAdditiveQuantizerFastScan(
32
- Index* quantizer,
33
- AdditiveQuantizer* aq,
34
- size_t d,
35
- size_t nlist,
32
+ Index* quantizer_,
33
+ AdditiveQuantizer* aq_,
34
+ size_t d_,
35
+ size_t nlist_,
36
36
  MetricType metric,
37
- int bbs,
38
- bool own_invlists)
39
- : IndexIVFFastScan(quantizer, d, nlist, 0, metric, own_invlists) {
40
- if (aq != nullptr) {
41
- init(aq, nlist, metric, bbs, own_invlists);
37
+ int bbs_,
38
+ bool own_invlists_)
39
+ : IndexIVFFastScan(quantizer_, d_, nlist_, 0, metric, own_invlists_) {
40
+ if (aq_ != nullptr) {
41
+ init(aq_, nlist_, metric, bbs_, own_invlists_);
42
42
  }
43
43
  }
44
44
 
45
45
  void IndexIVFAdditiveQuantizerFastScan::init(
46
- AdditiveQuantizer* aq,
47
- size_t nlist,
46
+ AdditiveQuantizer* aq_,
47
+ size_t nlist_,
48
48
  MetricType metric,
49
- int bbs,
50
- bool own_invlists) {
51
- FAISS_THROW_IF_NOT(aq != nullptr);
52
- FAISS_THROW_IF_NOT(!aq->nbits.empty());
53
- FAISS_THROW_IF_NOT(aq->nbits[0] == 4);
49
+ int bbs_,
50
+ bool own_invlists_) {
51
+ FAISS_THROW_IF_NOT(aq_ != nullptr);
52
+ FAISS_THROW_IF_NOT(!aq_->nbits.empty());
53
+ FAISS_THROW_IF_NOT(aq_->nbits[0] == 4);
54
54
  if (metric == METRIC_INNER_PRODUCT) {
55
55
  FAISS_THROW_IF_NOT_MSG(
56
- aq->search_type == AdditiveQuantizer::ST_LUT_nonorm,
56
+ aq_->search_type == AdditiveQuantizer::ST_LUT_nonorm,
57
57
  "Search type must be ST_LUT_nonorm for IP metric");
58
58
  } else {
59
59
  FAISS_THROW_IF_NOT_MSG(
60
- aq->search_type == AdditiveQuantizer::ST_norm_lsq2x4 ||
61
- aq->search_type == AdditiveQuantizer::ST_norm_rq2x4,
60
+ aq_->search_type == AdditiveQuantizer::ST_norm_lsq2x4 ||
61
+ aq_->search_type == AdditiveQuantizer::ST_norm_rq2x4,
62
62
  "Search type must be lsq2x4 or rq2x4 for L2 metric");
63
63
  }
64
64
 
65
- this->aq = aq;
65
+ this->aq = aq_;
66
66
  if (metric_type == METRIC_L2) {
67
- M = aq->M + 2; // 2x4 bits AQ
67
+ M = aq_->M + 2; // 2x4 bits AQ
68
68
  } else {
69
- M = aq->M;
69
+ M = aq_->M;
70
70
  }
71
- init_fastscan(aq, M, 4, nlist, metric, bbs, own_invlists);
71
+ init_fastscan(aq_, M, 4, nlist_, metric, bbs_, own_invlists_);
72
72
 
73
73
  max_train_points = 1024 * ksub * M;
74
74
  by_residual = true;
@@ -76,7 +76,7 @@ void IndexIVFAdditiveQuantizerFastScan::init(
76
76
 
77
77
  IndexIVFAdditiveQuantizerFastScan::IndexIVFAdditiveQuantizerFastScan(
78
78
  const IndexIVFAdditiveQuantizer& orig,
79
- int bbs)
79
+ int bbs_)
80
80
  : IndexIVFFastScan(
81
81
  orig.quantizer,
82
82
  orig.d,
@@ -88,7 +88,7 @@ IndexIVFAdditiveQuantizerFastScan::IndexIVFAdditiveQuantizerFastScan(
88
88
  FAISS_THROW_IF_NOT(
89
89
  metric_type == METRIC_INNER_PRODUCT || !orig.by_residual);
90
90
 
91
- init(aq, nlist, metric_type, bbs, own_invlists);
91
+ init(aq, nlist, metric_type, bbs_, own_invlists);
92
92
 
93
93
  is_trained = orig.is_trained;
94
94
  ntotal = orig.ntotal;
@@ -129,6 +129,10 @@ IndexIVFAdditiveQuantizerFastScan::IndexIVFAdditiveQuantizerFastScan() {
129
129
  IndexIVFAdditiveQuantizerFastScan::~IndexIVFAdditiveQuantizerFastScan() =
130
130
  default;
131
131
 
132
+ size_t IndexIVFAdditiveQuantizerFastScan::fast_scan_code_size() const {
133
+ return M2 / 2;
134
+ }
135
+
132
136
  /*********************************************************
133
137
  * Training
134
138
  *********************************************************/
@@ -316,9 +320,8 @@ void IndexIVFAdditiveQuantizerFastScan::search(
316
320
  return;
317
321
  }
318
322
 
319
- NormTableScaler scaler(norm_scale);
320
323
  FastScanDistancePostProcessing context;
321
- context.norm_scaler = &scaler;
324
+ context.pq2x4_scale = norm_scale;
322
325
  IndexIVFFastScan::CoarseQuantized cq{nprobe};
323
326
  search_dispatch_implem(n, x, k, distances, labels, cq, context);
324
327
  }
@@ -392,7 +395,7 @@ void IndexIVFAdditiveQuantizerFastScan::compute_LUT(
392
395
  const FastScanDistancePostProcessing&) const {
393
396
  const size_t dim12 = ksub * M;
394
397
  const size_t ip_dim12 = aq->M * ksub;
395
- const size_t nprobe = cq.nprobe;
398
+ const size_t cq_nprobe = cq.nprobe;
396
399
 
397
400
  dis_tables.resize(n * dim12);
398
401
 
@@ -404,19 +407,22 @@ void IndexIVFAdditiveQuantizerFastScan::compute_LUT(
404
407
  if (by_residual) {
405
408
  // bias = coef * <q, c>
406
409
  // NOTE: q^2 is not added to `biases`
407
- biases.resize(n * nprobe);
410
+ biases.resize(n * cq_nprobe);
411
+ with_simd_level([&]<SIMDLevel SL>() {
408
412
  #pragma omp parallel
409
- {
410
- std::vector<float> centroid(d);
411
- float* c = centroid.data();
413
+ {
414
+ std::vector<float> centroid(d);
415
+ float* c = centroid.data();
412
416
 
413
417
  #pragma omp for
414
- for (idx_t ij = 0; ij < n * nprobe; ij++) {
415
- int i = ij / nprobe;
416
- quantizer->reconstruct(cq.ids[ij], c);
417
- biases[ij] = coef * fvec_inner_product(c, x + i * d, d);
418
+ for (idx_t ij = 0; ij < static_cast<idx_t>(n * cq_nprobe);
419
+ ij++) {
420
+ idx_t i = ij / cq_nprobe;
421
+ quantizer->reconstruct(cq.ids[ij], c);
422
+ biases[ij] = coef * fvec_inner_product<SL>(c, x + i * d, d);
423
+ }
418
424
  }
419
- }
425
+ });
420
426
  }
421
427
 
422
428
  if (metric_type == METRIC_L2) {
@@ -437,7 +443,7 @@ void IndexIVFAdditiveQuantizerFastScan::compute_LUT(
437
443
 
438
444
  // combine them
439
445
  #pragma omp parallel for if (n > 100)
440
- for (idx_t i = 0; i < n; i++) {
446
+ for (idx_t i = 0; i < static_cast<idx_t>(n); i++) {
441
447
  float* tab = dis_tables.data() + i * dim12 + ip_dim12;
442
448
  memcpy(tab, norm_lut, norm_dim12 * sizeof(*tab));
443
449
  }
@@ -451,26 +457,26 @@ void IndexIVFAdditiveQuantizerFastScan::compute_LUT(
451
457
 
452
458
  /********** IndexIVFLocalSearchQuantizerFastScan ************/
453
459
  IndexIVFLocalSearchQuantizerFastScan::IndexIVFLocalSearchQuantizerFastScan(
454
- Index* quantizer,
455
- size_t d,
456
- size_t nlist,
457
- size_t M,
458
- size_t nbits,
460
+ Index* quantizer_,
461
+ size_t d_,
462
+ size_t nlist_,
463
+ size_t M_,
464
+ size_t nbits_,
459
465
  MetricType metric,
460
466
  Search_type_t search_type,
461
- int bbs,
462
- bool own_invlists)
467
+ int bbs_,
468
+ bool own_invlists_)
463
469
  : IndexIVFAdditiveQuantizerFastScan(
464
- quantizer,
470
+ quantizer_,
465
471
  nullptr,
466
- d,
467
- nlist,
472
+ d_,
473
+ nlist_,
468
474
  metric,
469
- bbs,
470
- own_invlists),
471
- lsq(d, M, nbits, search_type) {
472
- FAISS_THROW_IF_NOT(nbits == 4);
473
- init(&lsq, nlist, metric, bbs, own_invlists);
475
+ bbs_,
476
+ own_invlists_),
477
+ lsq(d_, M_, nbits_, search_type) {
478
+ FAISS_THROW_IF_NOT(nbits_ == 4);
479
+ init(&lsq, nlist_, metric, bbs_, own_invlists_);
474
480
  }
475
481
 
476
482
  IndexIVFLocalSearchQuantizerFastScan::IndexIVFLocalSearchQuantizerFastScan() {
@@ -479,26 +485,26 @@ IndexIVFLocalSearchQuantizerFastScan::IndexIVFLocalSearchQuantizerFastScan() {
479
485
 
480
486
  /********** IndexIVFResidualQuantizerFastScan ************/
481
487
  IndexIVFResidualQuantizerFastScan::IndexIVFResidualQuantizerFastScan(
482
- Index* quantizer,
483
- size_t d,
484
- size_t nlist,
485
- size_t M,
486
- size_t nbits,
488
+ Index* quantizer_,
489
+ size_t d_,
490
+ size_t nlist_,
491
+ size_t M_,
492
+ size_t nbits_,
487
493
  MetricType metric,
488
494
  Search_type_t search_type,
489
- int bbs,
490
- bool own_invlists)
495
+ int bbs_,
496
+ bool own_invlists_)
491
497
  : IndexIVFAdditiveQuantizerFastScan(
492
- quantizer,
498
+ quantizer_,
493
499
  nullptr,
494
- d,
495
- nlist,
500
+ d_,
501
+ nlist_,
496
502
  metric,
497
- bbs,
498
- own_invlists),
499
- rq(d, M, nbits, search_type) {
500
- FAISS_THROW_IF_NOT(nbits == 4);
501
- init(&rq, nlist, metric, bbs, own_invlists);
503
+ bbs_,
504
+ own_invlists_),
505
+ rq(d_, M_, nbits_, search_type) {
506
+ FAISS_THROW_IF_NOT(nbits_ == 4);
507
+ init(&rq, nlist_, metric, bbs_, own_invlists_);
502
508
  }
503
509
 
504
510
  IndexIVFResidualQuantizerFastScan::IndexIVFResidualQuantizerFastScan() {
@@ -508,27 +514,27 @@ IndexIVFResidualQuantizerFastScan::IndexIVFResidualQuantizerFastScan() {
508
514
  /********** IndexIVFProductLocalSearchQuantizerFastScan ************/
509
515
  IndexIVFProductLocalSearchQuantizerFastScan::
510
516
  IndexIVFProductLocalSearchQuantizerFastScan(
511
- Index* quantizer,
512
- size_t d,
513
- size_t nlist,
517
+ Index* quantizer_,
518
+ size_t d_,
519
+ size_t nlist_,
514
520
  size_t nsplits,
515
521
  size_t Msub,
516
- size_t nbits,
522
+ size_t nbits_,
517
523
  MetricType metric,
518
524
  Search_type_t search_type,
519
- int bbs,
520
- bool own_invlists)
525
+ int bbs_,
526
+ bool own_invlists_)
521
527
  : IndexIVFAdditiveQuantizerFastScan(
522
- quantizer,
528
+ quantizer_,
523
529
  nullptr,
524
- d,
525
- nlist,
530
+ d_,
531
+ nlist_,
526
532
  metric,
527
- bbs,
528
- own_invlists),
529
- plsq(d, nsplits, Msub, nbits, search_type) {
530
- FAISS_THROW_IF_NOT(nbits == 4);
531
- init(&plsq, nlist, metric, bbs, own_invlists);
533
+ bbs_,
534
+ own_invlists_),
535
+ plsq(d_, nsplits, Msub, nbits_, search_type) {
536
+ FAISS_THROW_IF_NOT(nbits_ == 4);
537
+ init(&plsq, nlist_, metric, bbs_, own_invlists_);
532
538
  }
533
539
 
534
540
  IndexIVFProductLocalSearchQuantizerFastScan::
@@ -539,27 +545,27 @@ IndexIVFProductLocalSearchQuantizerFastScan::
539
545
  /********** IndexIVFProductResidualQuantizerFastScan ************/
540
546
  IndexIVFProductResidualQuantizerFastScan::
541
547
  IndexIVFProductResidualQuantizerFastScan(
542
- Index* quantizer,
543
- size_t d,
544
- size_t nlist,
548
+ Index* quantizer_,
549
+ size_t d_,
550
+ size_t nlist_,
545
551
  size_t nsplits,
546
552
  size_t Msub,
547
- size_t nbits,
553
+ size_t nbits_,
548
554
  MetricType metric,
549
555
  Search_type_t search_type,
550
- int bbs,
551
- bool own_invlists)
556
+ int bbs_,
557
+ bool own_invlists_)
552
558
  : IndexIVFAdditiveQuantizerFastScan(
553
- quantizer,
559
+ quantizer_,
554
560
  nullptr,
555
- d,
556
- nlist,
561
+ d_,
562
+ nlist_,
557
563
  metric,
558
- bbs,
559
- own_invlists),
560
- prq(d, nsplits, Msub, nbits, search_type) {
561
- FAISS_THROW_IF_NOT(nbits == 4);
562
- init(&prq, nlist, metric, bbs, own_invlists);
564
+ bbs_,
565
+ own_invlists_),
566
+ prq(d_, nsplits, Msub, nbits_, search_type) {
567
+ FAISS_THROW_IF_NOT(nbits_ == 4);
568
+ init(&prq, nlist_, metric, bbs_, own_invlists_);
563
569
  }
564
570
 
565
571
  IndexIVFProductResidualQuantizerFastScan::
@@ -12,8 +12,8 @@
12
12
  #include <faiss/IndexIVFAdditiveQuantizer.h>
13
13
  #include <faiss/IndexIVFFastScan.h>
14
14
  #include <faiss/impl/AdditiveQuantizer.h>
15
- #include <faiss/impl/FastScanDistancePostProcessing.h>
16
15
  #include <faiss/impl/ProductAdditiveQuantizer.h>
16
+ #include <faiss/impl/fast_scan/FastScanDistancePostProcessing.h>
17
17
  #include <faiss/utils/AlignedTable.h>
18
18
 
19
19
  namespace faiss {
@@ -37,13 +37,13 @@ namespace faiss {
37
37
  struct IndexIVFAdditiveQuantizerFastScan : IndexIVFFastScan {
38
38
  using Search_type_t = AdditiveQuantizer::Search_type_t;
39
39
 
40
- AdditiveQuantizer* aq;
40
+ AdditiveQuantizer* aq{};
41
41
 
42
42
  bool rescale_norm = false;
43
43
  int norm_scale = 1;
44
44
 
45
45
  // max number of training vectors
46
- size_t max_train_points;
46
+ size_t max_train_points{};
47
47
 
48
48
  IndexIVFAdditiveQuantizerFastScan(
49
49
  Index* quantizer,
@@ -70,6 +70,9 @@ struct IndexIVFAdditiveQuantizerFastScan : IndexIVFFastScan {
70
70
  const IndexIVFAdditiveQuantizer& orig,
71
71
  int bbs = 32);
72
72
 
73
+ /// Packed code size: M2 / 2 bytes (4-bit AQ sub-quantizer nibbles)
74
+ size_t fast_scan_code_size() const override;
75
+
73
76
  void train_encoder(idx_t n, const float* x, const idx_t* assign) override;
74
77
 
75
78
  idx_t train_encoder_num_vectors() const override;