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
@@ -12,39 +12,43 @@
12
12
  #include <cstdio>
13
13
 
14
14
  #include <faiss/IndexFlat.h>
15
+ #include <faiss/MetricType.h>
15
16
 
16
17
  #include <faiss/impl/AuxIndexStructures.h>
17
18
  #include <faiss/impl/IDSelector.h>
18
19
  #include <faiss/impl/PanoramaStats.h>
20
+ #include <faiss/impl/ResultHandler.h>
19
21
 
20
22
  #include <faiss/impl/FaissAssert.h>
21
- #include <faiss/utils/distances.h>
23
+ #include <faiss/utils/distances_dispatch.h>
22
24
  #include <faiss/utils/extra_distances.h>
23
25
  #include <faiss/utils/utils.h>
24
26
 
25
27
  namespace faiss {
26
28
 
27
29
  IndexIVFFlatPanorama::IndexIVFFlatPanorama(
28
- Index* quantizer,
29
- size_t d,
30
- size_t nlist,
31
- int n_levels,
30
+ Index* quantizer_in,
31
+ size_t d_in,
32
+ size_t nlist_in,
33
+ int n_levels_in,
32
34
  MetricType metric,
33
- bool own_invlists)
34
- : IndexIVFFlat(quantizer, d, nlist, metric, false), n_levels(n_levels) {
35
- // For now, we only support L2 distance.
36
- // Supporting dot product and cosine distance is a trivial addition
37
- // left for future work.
38
- FAISS_THROW_IF_NOT(metric == METRIC_L2);
35
+ bool own_invlists_in,
36
+ size_t batch_size_in)
37
+ : IndexIVFFlat(quantizer_in, d_in, nlist_in, metric, false),
38
+ n_levels(n_levels_in),
39
+ batch_size(batch_size_in) {
40
+ FAISS_THROW_IF_NOT(metric == METRIC_L2 || metric == METRIC_INNER_PRODUCT);
39
41
 
40
42
  // We construct the inverted lists here so that we can use the
41
43
  // level-oriented storage. This does not cause a leak as we constructed
42
44
  // IndexIVF first, with own_invlists set to false.
43
- this->invlists = new ArrayInvertedListsPanorama(nlist, code_size, n_levels);
44
- this->own_invlists = own_invlists;
45
+ this->invlists = new ArrayInvertedListsPanorama(
46
+ nlist, code_size, n_levels, batch_size);
47
+ this->own_invlists = own_invlists_in;
45
48
  }
46
49
 
47
- IndexIVFFlatPanorama::IndexIVFFlatPanorama() : n_levels(0) {}
50
+ IndexIVFFlatPanorama::IndexIVFFlatPanorama()
51
+ : n_levels(0), batch_size(Panorama::kDefaultBatchSize) {}
48
52
 
49
53
  namespace {
50
54
 
@@ -53,16 +57,28 @@ struct IVFFlatScannerPanorama : InvertedListScanner {
53
57
  VectorDistance vd;
54
58
  const ArrayInvertedListsPanorama* storage;
55
59
  using C = typename VectorDistance::C;
60
+ static constexpr MetricType metric = VectorDistance::metric;
61
+
62
+ mutable std::vector<uint32_t> active_indices_;
63
+ mutable std::vector<uint8_t> active_byteset_;
64
+ mutable std::vector<float> exact_distances_;
65
+ mutable std::vector<float> dot_buffer_;
56
66
 
57
67
  IVFFlatScannerPanorama(
58
- const VectorDistance& vd,
59
- const ArrayInvertedListsPanorama* storage,
60
- bool store_pairs,
61
- const IDSelector* sel)
62
- : InvertedListScanner(store_pairs, sel), vd(vd), storage(storage) {
68
+ const VectorDistance& vd_in,
69
+ const ArrayInvertedListsPanorama* storage_in,
70
+ bool store_pairs_in,
71
+ const IDSelector* sel_in)
72
+ : InvertedListScanner(store_pairs_in, sel_in),
73
+ vd(vd_in),
74
+ storage(storage_in) {
63
75
  keep_max = vd.is_similarity;
64
76
  code_size = vd.d * sizeof(float);
65
- cum_sums.resize(storage->n_levels + 1);
77
+ cum_sums.resize(storage->pano.n_levels + 1);
78
+ active_indices_.resize(storage->pano.batch_size);
79
+ active_byteset_.resize(storage->pano.batch_size);
80
+ exact_distances_.resize(storage->pano.batch_size);
81
+ dot_buffer_.resize(storage->pano.batch_size);
66
82
  }
67
83
 
68
84
  const float* xi = nullptr;
@@ -74,8 +90,8 @@ struct IVFFlatScannerPanorama : InvertedListScanner {
74
90
  q_norm = cum_sums[0] * cum_sums[0];
75
91
  }
76
92
 
77
- void set_list(idx_t list_no, float /* coarse_dis */) override {
78
- this->list_no = list_no;
93
+ void set_list(idx_t list_no_in, float /* coarse_dis */) override {
94
+ this->list_no = list_no_in;
79
95
  }
80
96
 
81
97
  /// This function is unreachable as `IndexIVF` only calls this within
@@ -86,57 +102,61 @@ struct IVFFlatScannerPanorama : InvertedListScanner {
86
102
  "IndexIVFFlatPanorama does not support distance_to_code");
87
103
  }
88
104
 
105
+ using InvertedListScanner::scan_codes;
106
+
89
107
  size_t scan_codes(
90
108
  size_t list_size,
91
109
  const uint8_t* codes,
92
110
  const idx_t* ids,
93
- float* simi,
94
- idx_t* idxi,
95
- size_t k) const override {
111
+ ResultHandler& handler) const override {
96
112
  size_t nup = 0;
97
113
 
98
- const size_t n_batches =
99
- (list_size + storage->kBatchSize - 1) / storage->kBatchSize;
114
+ const size_t bs = storage->pano.batch_size;
115
+ const size_t n_batches = (list_size + bs - 1) / bs;
100
116
 
101
117
  const float* cum_sums_data = storage->get_cum_sums(list_no);
102
118
 
103
- std::vector<float> exact_distances(storage->kBatchSize);
104
- std::vector<uint32_t> active_indices(storage->kBatchSize);
105
-
106
119
  PanoramaStats local_stats;
107
120
  local_stats.reset();
108
121
 
109
122
  for (size_t batch_no = 0; batch_no < n_batches; batch_no++) {
110
- size_t batch_start = batch_no * storage->kBatchSize;
111
-
112
- size_t num_active =
113
- storage->pano
114
- .progressive_filter_batch<CMax<float, int64_t>>(
115
- codes,
116
- cum_sums_data,
117
- xi,
118
- cum_sums.data(),
119
- batch_no,
120
- list_size,
121
- sel,
122
- ids,
123
- use_sel,
124
- active_indices,
125
- exact_distances,
126
- simi[0],
127
- local_stats);
123
+ size_t batch_start = batch_no * bs;
124
+ size_t num_active = with_metric_type(metric, [&]<MetricType M>() {
125
+ return storage->pano.progressive_filter_batch<C, M>(
126
+ codes,
127
+ cum_sums_data,
128
+ xi,
129
+ cum_sums.data(),
130
+ batch_no,
131
+ list_size,
132
+ sel,
133
+ ids,
134
+ use_sel,
135
+ active_indices_,
136
+ active_byteset_,
137
+ exact_distances_,
138
+ dot_buffer_,
139
+ handler.threshold,
140
+ local_stats);
141
+ });
142
+
143
+ // num_active is the count of codes for which exact distance
144
+ // was computed in this batch (post-filter, post-pruning).
145
+ handler.stats.scan_cnt += num_active;
128
146
 
129
147
  // Add batch survivors to heap.
130
148
  for (size_t i = 0; i < num_active; i++) {
131
- uint32_t idx = active_indices[i];
149
+ uint32_t idx = active_indices_[i];
132
150
  size_t global_idx = batch_start + idx;
133
- float dis = exact_distances[idx];
151
+ float dis = exact_distances_[idx];
134
152
 
135
- if (C::cmp(simi[0], dis)) {
153
+ if (C::cmp(handler.threshold, dis)) {
136
154
  int64_t id = store_pairs ? lo_build(list_no, global_idx)
137
155
  : ids[global_idx];
138
- heap_replace_top<C>(k, simi, idxi, dis, id);
139
- nup++;
156
+ if (handler.add_result(dis, id)) {
157
+ handler.stats.nheap_updates++;
158
+ nup++;
159
+ }
140
160
  }
141
161
  }
142
162
  }
@@ -144,88 +164,6 @@ struct IVFFlatScannerPanorama : InvertedListScanner {
144
164
  indexPanorama_stats.add(local_stats);
145
165
  return nup;
146
166
  }
147
-
148
- void scan_codes_range(
149
- size_t list_size,
150
- const uint8_t* codes,
151
- const idx_t* ids,
152
- float radius,
153
- RangeQueryResult& res) const override {
154
- const size_t n_batches =
155
- (list_size + storage->kBatchSize - 1) / storage->kBatchSize;
156
-
157
- const float* cum_sums_data = storage->get_cum_sums(list_no);
158
-
159
- std::vector<float> exact_distances(storage->kBatchSize);
160
- std::vector<uint32_t> active_indices(storage->kBatchSize);
161
-
162
- PanoramaStats local_stats;
163
- local_stats.reset();
164
-
165
- // Same progressive filtering as scan_codes, but with fixed radius
166
- // threshold instead of dynamic heap threshold.
167
- for (size_t batch_no = 0; batch_no < n_batches; batch_no++) {
168
- size_t batch_start = batch_no * storage->kBatchSize;
169
-
170
- size_t num_active =
171
- storage->pano
172
- .progressive_filter_batch<CMax<float, int64_t>>(
173
- codes,
174
- cum_sums_data,
175
- xi,
176
- cum_sums.data(),
177
- batch_no,
178
- list_size,
179
- sel,
180
- ids,
181
- use_sel,
182
- active_indices,
183
- exact_distances,
184
- radius,
185
- local_stats);
186
-
187
- // Add batch survivors to range result.
188
- for (size_t i = 0; i < num_active; i++) {
189
- uint32_t idx = active_indices[i];
190
- size_t global_idx = batch_start + idx;
191
- float dis = exact_distances[idx];
192
-
193
- if (C::cmp(radius, dis)) {
194
- int64_t id = store_pairs ? lo_build(list_no, global_idx)
195
- : ids[global_idx];
196
- res.add(dis, id);
197
- }
198
- }
199
- }
200
-
201
- indexPanorama_stats.add(local_stats);
202
- }
203
- };
204
-
205
- struct Run_get_InvertedListScanner {
206
- using T = InvertedListScanner*;
207
-
208
- template <class VD>
209
- InvertedListScanner* f(
210
- VD& vd,
211
- const IndexIVFFlatPanorama* ivf,
212
- bool store_pairs,
213
- const IDSelector* sel) {
214
- // Safely cast to ArrayInvertedListsPanorama to access cumulative sums.
215
- const ArrayInvertedListsPanorama* storage =
216
- dynamic_cast<const ArrayInvertedListsPanorama*>(ivf->invlists);
217
- FAISS_THROW_IF_NOT_MSG(
218
- storage,
219
- "IndexIVFFlatPanorama requires ArrayInvertedListsPanorama");
220
-
221
- if (sel) {
222
- return new IVFFlatScannerPanorama<VD, true>(
223
- vd, storage, store_pairs, sel);
224
- } else {
225
- return new IVFFlatScannerPanorama<VD, false>(
226
- vd, storage, store_pairs, sel);
227
- }
228
- }
229
167
  };
230
168
 
231
169
  } // anonymous namespace
@@ -234,9 +172,22 @@ InvertedListScanner* IndexIVFFlatPanorama::get_InvertedListScanner(
234
172
  bool store_pairs,
235
173
  const IDSelector* sel,
236
174
  const IVFSearchParameters*) const {
237
- Run_get_InvertedListScanner run;
238
- return dispatch_VectorDistance(
239
- d, metric_type, metric_arg, run, this, store_pairs, sel);
175
+ const ArrayInvertedListsPanorama* storage =
176
+ dynamic_cast<const ArrayInvertedListsPanorama*>(invlists);
177
+ FAISS_THROW_IF_NOT_MSG(
178
+ storage,
179
+ "IndexIVFFlatPanorama requires ArrayInvertedListsPanorama");
180
+
181
+ return with_VectorDistance(
182
+ d, metric_type, metric_arg, [&](auto vd) -> InvertedListScanner* {
183
+ if (sel) {
184
+ return new IVFFlatScannerPanorama<decltype(vd), true>(
185
+ vd, storage, store_pairs, sel);
186
+ } else {
187
+ return new IVFFlatScannerPanorama<decltype(vd), false>(
188
+ vd, storage, store_pairs, sel);
189
+ }
190
+ });
240
191
  }
241
192
 
242
193
  void IndexIVFFlatPanorama::reconstruct_from_offset(
@@ -37,6 +37,7 @@ namespace faiss {
37
37
  /// `ArrayInvertedListsPanorama`, which is a struct member of `IndexIVF`.
38
38
  struct IndexIVFFlatPanorama : IndexIVFFlat {
39
39
  size_t n_levels;
40
+ size_t batch_size;
40
41
 
41
42
  std::vector<MaybeOwnedVector<float>> cum_sums;
42
43
 
@@ -46,7 +47,8 @@ struct IndexIVFFlatPanorama : IndexIVFFlat {
46
47
  size_t nlist_,
47
48
  int n_levels,
48
49
  MetricType = METRIC_L2,
49
- bool own_invlists = true);
50
+ bool own_invlists = true,
51
+ size_t batch_size = Panorama::kDefaultBatchSize);
50
52
 
51
53
  InvertedListScanner* get_InvertedListScanner(
52
54
  bool store_pairs,
@@ -13,13 +13,13 @@
13
13
  namespace faiss {
14
14
 
15
15
  IndexIVFIndependentQuantizer::IndexIVFIndependentQuantizer(
16
- Index* quantizer,
17
- IndexIVF* index_ivf,
18
- VectorTransform* vt)
19
- : Index(quantizer->d, index_ivf->metric_type),
20
- quantizer(quantizer),
21
- vt(vt),
22
- index_ivf(index_ivf) {
16
+ Index* quantizer_in,
17
+ IndexIVF* index_ivf_in,
18
+ VectorTransform* vt_in)
19
+ : Index(quantizer_in->d, index_ivf_in->metric_type),
20
+ quantizer(quantizer_in),
21
+ vt(vt_in),
22
+ index_ivf(index_ivf_in) {
23
23
  if (vt) {
24
24
  FAISS_THROW_IF_NOT_MSG(
25
25
  vt->d_in == d && vt->d_out == index_ivf->d,
@@ -29,14 +29,16 @@ IndexIVFIndependentQuantizer::IndexIVFIndependentQuantizer(
29
29
  }
30
30
 
31
31
  if (quantizer->is_trained && quantizer->ntotal != 0) {
32
- FAISS_THROW_IF_NOT(quantizer->ntotal == index_ivf->nlist);
32
+ FAISS_THROW_IF_NOT(
33
+ quantizer->ntotal == static_cast<idx_t>(index_ivf->nlist));
33
34
  }
34
35
  if (index_ivf->is_trained && vt) {
35
36
  FAISS_THROW_IF_NOT(vt->is_trained);
36
37
  }
37
38
  ntotal = index_ivf->ntotal;
38
39
  is_trained =
39
- (quantizer->is_trained && quantizer->ntotal == index_ivf->nlist &&
40
+ (quantizer->is_trained &&
41
+ quantizer->ntotal == static_cast<idx_t>(index_ivf->nlist) &&
40
42
  (!vt || vt->is_trained) && index_ivf->is_trained);
41
43
 
42
44
  // disable precomputed tables because they use the distances that are
@@ -57,15 +59,16 @@ IndexIVFIndependentQuantizer::~IndexIVFIndependentQuantizer() {
57
59
  namespace {
58
60
 
59
61
  struct VTransformedVectors : TransformedVectors {
60
- VTransformedVectors(const VectorTransform* vt, idx_t n, const float* x)
61
- : TransformedVectors(x, vt ? vt->apply(n, x) : x) {}
62
+ VTransformedVectors(const VectorTransform* vt, idx_t n, const float* x_in)
63
+ : TransformedVectors(x_in, vt ? vt->apply(n, x_in) : x_in) {}
62
64
  };
63
65
 
64
66
  struct SubsampledVectors : TransformedVectors {
65
- SubsampledVectors(int d, idx_t* n, idx_t max_n, const float* x)
67
+ SubsampledVectors(int d, idx_t* n, idx_t max_n, const float* x_in)
66
68
  : TransformedVectors(
67
- x,
68
- fvecs_maybe_subsample(d, (size_t*)n, max_n, x, true)) {}
69
+ x_in,
70
+ fvecs_maybe_subsample(d, (size_t*)n, max_n, x_in, true)) {
71
+ }
69
72
  };
70
73
 
71
74
  } // anonymous namespace
@@ -88,7 +91,7 @@ void IndexIVFIndependentQuantizer::search(
88
91
  idx_t* labels,
89
92
  const SearchParameters* params) const {
90
93
  FAISS_THROW_IF_NOT_MSG(!params, "search parameters not supported");
91
- int nprobe = index_ivf->nprobe;
94
+ size_t nprobe = index_ivf->nprobe;
92
95
  std::vector<float> D(n * nprobe);
93
96
  std::vector<idx_t> I(n * nprobe);
94
97
  quantizer->search(n, x, nprobe, D.data(), I.data());