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
@@ -18,6 +18,7 @@
18
18
  #include <cstring>
19
19
  #include <memory>
20
20
 
21
+ #include <faiss/impl/simd_dispatch.h>
21
22
  #include <faiss/utils/distances.h>
22
23
  #include <faiss/utils/hamming.h>
23
24
  #include <faiss/utils/random.h>
@@ -53,11 +54,11 @@ double PermutationObjective::cost_update(const int* perm, int iw, int jw)
53
54
  }
54
55
 
55
56
  SimulatedAnnealingOptimizer::SimulatedAnnealingOptimizer(
56
- PermutationObjective* obj,
57
+ PermutationObjective* obj_in,
57
58
  const SimulatedAnnealingParameters& p)
58
59
  : SimulatedAnnealingParameters(p),
59
- obj(obj),
60
- n(obj->n),
60
+ obj(obj_in),
61
+ n(obj_in->n),
61
62
  logfile(nullptr) {
62
63
  rnd = new RandomGenerator(p.seed);
63
64
  FAISS_THROW_IF_NOT(n < 100000 && n >= 0);
@@ -164,7 +165,7 @@ double SimulatedAnnealingOptimizer::optimize(int* perm) {
164
165
  ****************************************************/
165
166
 
166
167
  static inline int hamming_dis(uint64_t a, uint64_t b) {
167
- return __builtin_popcountl(a ^ b);
168
+ return popcount64(a ^ b);
168
169
  }
169
170
 
170
171
  namespace {
@@ -259,10 +260,10 @@ struct ReproduceWithHammingObjective : PermutationObjective {
259
260
  }
260
261
 
261
262
  ReproduceWithHammingObjective(
262
- int nbits,
263
+ int nbits_in,
263
264
  const std::vector<double>& dis_table,
264
- double dis_weight_factor)
265
- : nbits(nbits), dis_weight_factor(dis_weight_factor) {
265
+ double dis_weight_factor_in)
266
+ : nbits(nbits_in), dis_weight_factor(dis_weight_factor_in) {
266
267
  n = 1 << nbits;
267
268
  FAISS_THROW_IF_NOT(dis_table.size() == n * n);
268
269
  set_affine_target_dis(dis_table);
@@ -372,12 +373,12 @@ double ReproduceDistancesObjective::cost_update(const int* perm, int iw, int jw)
372
373
  }
373
374
 
374
375
  ReproduceDistancesObjective::ReproduceDistancesObjective(
375
- int n,
376
+ int n_in,
376
377
  const double* source_dis_in,
377
378
  const double* target_dis_in,
378
- double dis_weight_factor)
379
- : dis_weight_factor(dis_weight_factor), target_dis(target_dis_in) {
380
- this->n = n;
379
+ double dis_weight_factor_in)
380
+ : dis_weight_factor(dis_weight_factor_in), target_dis(target_dis_in) {
381
+ this->n = n_in;
381
382
  set_affine_target_dis(source_dis_in);
382
383
  }
383
384
 
@@ -387,7 +388,7 @@ void ReproduceDistancesObjective::compute_mean_stdev(
387
388
  double* mean_out,
388
389
  double* stddev_out) {
389
390
  double sum = 0, sum2 = 0;
390
- for (int i = 0; i < n2; i++) {
391
+ for (size_t i = 0; i < n2; i++) {
391
392
  sum += tab[i];
392
393
  sum2 += tab[i] * tab[i];
393
394
  }
@@ -431,6 +432,8 @@ void ReproduceDistancesObjective::set_affine_target_dis(
431
432
  * Cost functions: RankingScore
432
433
  ****************************************************/
433
434
 
435
+ namespace {
436
+
434
437
  /// Maintains a 3D table of elementary costs.
435
438
  /// Accumulates elements based on Hamming distance comparisons
436
439
  template <typename Ttab, typename Taccu>
@@ -665,18 +668,18 @@ struct RankingScore2 : Score3Computer<float, double> {
665
668
  const float* gt_distances;
666
669
 
667
670
  RankingScore2(
668
- int nbits,
669
- int nq,
670
- int nb,
671
- const uint32_t* qcodes,
672
- const uint32_t* bcodes,
673
- const float* gt_distances)
674
- : nbits(nbits),
675
- nq(nq),
676
- nb(nb),
677
- qcodes(qcodes),
678
- bcodes(bcodes),
679
- gt_distances(gt_distances) {
671
+ int nbits_in,
672
+ int nq_in,
673
+ int nb_in,
674
+ const uint32_t* qcodes_in,
675
+ const uint32_t* bcodes_in,
676
+ const float* gt_distances_in)
677
+ : nbits(nbits_in),
678
+ nq(nq_in),
679
+ nb(nb_in),
680
+ qcodes(qcodes_in),
681
+ bcodes(bcodes_in),
682
+ gt_distances(gt_distances_in) {
680
683
  n = nc = 1 << nbits;
681
684
  n_gt.resize(nc * nc * nc);
682
685
  init_n_gt();
@@ -756,6 +759,8 @@ struct RankingScore2 : Score3Computer<float, double> {
756
759
  }
757
760
  };
758
761
 
762
+ } // namespace
763
+
759
764
  /*****************************************
760
765
  * PolysemousTraining
761
766
  ******************************************/
@@ -791,19 +796,25 @@ void PolysemousTraining::optimize_reproduce_distances(
791
796
  }
792
797
 
793
798
  #pragma omp parallel for num_threads(nt)
794
- for (int m = 0; m < pq.M; m++) {
799
+ for (int m = 0; m < static_cast<int>(pq.M); m++) {
795
800
  std::vector<double> dis_table;
796
801
 
797
802
  // printf ("Optimizing quantizer %d\n", m);
798
803
 
799
804
  float* centroids = pq.get_centroids(m, 0);
800
805
 
801
- for (int i = 0; i < n; i++) {
802
- for (int j = 0; j < n; j++) {
803
- dis_table.push_back(fvec_L2sqr(
804
- centroids + i * dsub, centroids + j * dsub, dsub));
806
+ auto compute_dis_table = [&]<SIMDLevel SL>() {
807
+ for (int i = 0; i < n; i++) {
808
+ for (int j = 0; j < n; j++) {
809
+ dis_table.push_back(
810
+ fvec_L2sqr<SL>(
811
+ centroids + i * dsub,
812
+ centroids + j * dsub,
813
+ dsub));
814
+ }
805
815
  }
806
- }
816
+ };
817
+ with_simd_level(compute_dis_table);
807
818
 
808
819
  std::vector<int> perm(n);
809
820
  ReproduceWithHammingObjective obj(nbits, dis_table, dis_weight_factor);
@@ -812,7 +823,14 @@ void PolysemousTraining::optimize_reproduce_distances(
812
823
 
813
824
  if (log_pattern.size()) {
814
825
  char fname[256];
826
+ #if defined(__GNUC__) || defined(__clang__)
827
+ #pragma GCC diagnostic push
828
+ #pragma GCC diagnostic ignored "-Wformat-nonliteral"
829
+ #endif
815
830
  snprintf(fname, 256, log_pattern.c_str(), m);
831
+ #if defined(__GNUC__) || defined(__clang__)
832
+ #pragma GCC diagnostic pop
833
+ #endif
816
834
  printf("opening log file %s\n", fname);
817
835
  optim.logfile = fopen(fname, "w");
818
836
  FAISS_THROW_IF_NOT_MSG(optim.logfile, "could not open logfile");
@@ -861,21 +879,21 @@ void PolysemousTraining::optimize_ranking(
861
879
  }
862
880
 
863
881
  #pragma omp parallel for
864
- for (int m = 0; m < pq.M; m++) {
882
+ for (int m = 0; m < static_cast<int>(pq.M); m++) {
865
883
  size_t nq, nb;
866
884
  std::vector<uint32_t> codes; // query codes, then db codes
867
885
  std::vector<float> gt_distances; // nq * nb matrix of distances
868
886
 
869
887
  if (n > 0) {
870
888
  std::vector<float> xtrain(n * dsub);
871
- for (int i = 0; i < n; i++) {
889
+ for (size_t i = 0; i < n; i++) {
872
890
  memcpy(xtrain.data() + i * dsub,
873
891
  x + i * pq.d + m * dsub,
874
892
  sizeof(float) * dsub);
875
893
  }
876
894
 
877
895
  codes.resize(n);
878
- for (int i = 0; i < n; i++) {
896
+ for (size_t i = 0; i < n; i++) {
879
897
  codes[i] = all_codes[i * pq.code_size + m];
880
898
  }
881
899
 
@@ -890,8 +908,8 @@ void PolysemousTraining::optimize_ranking(
890
908
  } else {
891
909
  nq = nb = pq.ksub;
892
910
  codes.resize(2 * nq);
893
- for (int i = 0; i < nq; i++) {
894
- codes[i] = codes[i + nq] = i;
911
+ for (size_t i = 0; i < nq; i++) {
912
+ codes[i] = codes[i + nq] = static_cast<uint32_t>(i);
895
913
  }
896
914
 
897
915
  gt_distances.resize(nq * nb);
@@ -924,7 +942,14 @@ void PolysemousTraining::optimize_ranking(
924
942
 
925
943
  if (log_pattern.size()) {
926
944
  char fname[256];
945
+ #if defined(__GNUC__) || defined(__clang__)
946
+ #pragma GCC diagnostic push
947
+ #pragma GCC diagnostic ignored "-Wformat-nonliteral"
948
+ #endif
927
949
  snprintf(fname, 256, log_pattern.c_str(), m);
950
+ #if defined(__GNUC__) || defined(__clang__)
951
+ #pragma GCC diagnostic pop
952
+ #endif
928
953
  printf("opening log file %s\n", fname);
929
954
  optim.logfile = fopen(fname, "w");
930
955
  FAISS_THROW_IF_NOT_FMT(
@@ -946,11 +971,11 @@ void PolysemousTraining::optimize_ranking(
946
971
  float* centroids = pq.get_centroids(m, 0);
947
972
 
948
973
  std::vector<float> centroids_copy;
949
- for (int i = 0; i < dsub * pq.ksub; i++) {
974
+ for (size_t i = 0; i < dsub * pq.ksub; i++) {
950
975
  centroids_copy.push_back(centroids[i]);
951
976
  }
952
977
 
953
- for (int i = 0; i < pq.ksub; i++) {
978
+ for (size_t i = 0; i < pq.ksub; i++) {
954
979
  memcpy(centroids + perm[i] * dsub,
955
980
  centroids_copy.data() + i * dsub,
956
981
  dsub * sizeof(centroids[0]));
@@ -70,10 +70,10 @@ struct ReproduceDistancesObjective : PermutationObjective {
70
70
  double cost_update(const int* perm, int iw, int jw) const override;
71
71
 
72
72
  ReproduceDistancesObjective(
73
- int n,
73
+ int n_in,
74
74
  const double* source_dis_in,
75
75
  const double* target_dis_in,
76
- double dis_weight_factor);
76
+ double dis_weight_factor_in);
77
77
 
78
78
  static void compute_mean_stdev(
79
79
  const double* tab,
@@ -95,7 +95,7 @@ struct SimulatedAnnealingOptimizer : SimulatedAnnealingParameters {
95
95
  FILE* logfile; /// logs values of the cost function
96
96
 
97
97
  SimulatedAnnealingOptimizer(
98
- PermutationObjective* obj,
98
+ PermutationObjective* obj_in,
99
99
  const SimulatedAnnealingParameters& p);
100
100
  RandomGenerator* rnd;
101
101
 
@@ -42,22 +42,22 @@ int sgemm_(
42
42
  namespace faiss {
43
43
 
44
44
  ProductAdditiveQuantizer::ProductAdditiveQuantizer(
45
- size_t d,
45
+ size_t d_,
46
46
  const std::vector<AdditiveQuantizer*>& aqs,
47
- Search_type_t search_type) {
48
- init(d, aqs, search_type);
47
+ Search_type_t search_type_) {
48
+ init(d_, aqs, search_type_);
49
49
  }
50
50
 
51
51
  ProductAdditiveQuantizer::ProductAdditiveQuantizer()
52
52
  : ProductAdditiveQuantizer(0, {}) {}
53
53
 
54
54
  void ProductAdditiveQuantizer::init(
55
- size_t d,
55
+ size_t d_in,
56
56
  const std::vector<AdditiveQuantizer*>& aqs,
57
- Search_type_t search_type) {
57
+ Search_type_t search_type_in) {
58
58
  // AdditiveQuantizer constructor
59
- this->d = d;
60
- this->search_type = search_type;
59
+ this->d = d_in;
60
+ this->search_type = search_type_in;
61
61
  M = 0;
62
62
  for (const auto& q : aqs) {
63
63
  M += q->M;
@@ -98,7 +98,7 @@ void ProductAdditiveQuantizer::train(size_t n, const float* x) {
98
98
  xt.resize(q->d * n);
99
99
 
100
100
  #pragma omp parallel for if (n > 1000)
101
- for (idx_t i = 0; i < n; i++) {
101
+ for (idx_t i = 0; i < static_cast<idx_t>(n); i++) {
102
102
  memcpy(xt.data() + i * q->d,
103
103
  x + i * d + offset_d,
104
104
  q->d * sizeof(*x));
@@ -153,7 +153,7 @@ void ProductAdditiveQuantizer::compute_unpacked_codes(
153
153
  const float* x,
154
154
  int32_t* unpacked_codes,
155
155
  size_t n,
156
- const float* centroids) const {
156
+ const float* /*centroids*/) const {
157
157
  /// TODO: actually we do not need to unpack and pack
158
158
  size_t offset_d = 0, offset_m = 0;
159
159
  std::vector<float> xsub;
@@ -165,7 +165,7 @@ void ProductAdditiveQuantizer::compute_unpacked_codes(
165
165
  codes.resize(n * q->code_size);
166
166
 
167
167
  #pragma omp parallel for if (n > 1000)
168
- for (idx_t i = 0; i < n; i++) {
168
+ for (idx_t i = 0; i < static_cast<idx_t>(n); i++) {
169
169
  memcpy(xsub.data() + i * q->d,
170
170
  x + i * d + offset_d,
171
171
  q->d * sizeof(float));
@@ -175,7 +175,7 @@ void ProductAdditiveQuantizer::compute_unpacked_codes(
175
175
 
176
176
  // unpack
177
177
  #pragma omp parallel for if (n > 1000)
178
- for (idx_t i = 0; i < n; i++) {
178
+ for (idx_t i = 0; i < static_cast<idx_t>(n); i++) {
179
179
  uint8_t* code = codes.data() + i * q->code_size;
180
180
  BitstringReader bsr(code, q->code_size);
181
181
 
@@ -204,7 +204,7 @@ void ProductAdditiveQuantizer::decode_unpacked(
204
204
 
205
205
  // product additive quantizer decoding
206
206
  #pragma omp parallel for if (n > 1000)
207
- for (int64_t i = 0; i < n; i++) {
207
+ for (int64_t i = 0; i < static_cast<int64_t>(n); i++) {
208
208
  const int32_t* codesi = codes + i * ld_codes;
209
209
 
210
210
  size_t offset_m = 0, offset_d = 0;
@@ -212,7 +212,7 @@ void ProductAdditiveQuantizer::decode_unpacked(
212
212
  const auto q = quantizers[s];
213
213
  float* xi = x + i * d + offset_d;
214
214
 
215
- for (int m = 0; m < q->M; m++) {
215
+ for (size_t m = 0; m < q->M; m++) {
216
216
  int idx = codesi[offset_m + m];
217
217
  const float* c = codebooks.data() +
218
218
  q->d * (codebook_offsets[offset_m + m] + idx);
@@ -235,7 +235,7 @@ void ProductAdditiveQuantizer::decode(const uint8_t* codes, float* x, size_t n)
235
235
  is_trained, "The product additive quantizer is not trained yet.");
236
236
 
237
237
  #pragma omp parallel for if (n > 1000)
238
- for (int64_t i = 0; i < n; i++) {
238
+ for (int64_t i = 0; i < static_cast<int64_t>(n); i++) {
239
239
  BitstringReader bsr(codes + i * code_size, code_size);
240
240
 
241
241
  size_t offset_m = 0, offset_d = 0;
@@ -243,7 +243,7 @@ void ProductAdditiveQuantizer::decode(const uint8_t* codes, float* x, size_t n)
243
243
  const auto q = quantizers[s];
244
244
  float* xi = x + i * d + offset_d;
245
245
 
246
- for (int m = 0; m < q->M; m++) {
246
+ for (size_t m = 0; m < q->M; m++) {
247
247
  int idx = bsr.read(q->nbits[m]);
248
248
  const float* c = codebooks.data() +
249
249
  q->d * (codebook_offsets[offset_m + m] + idx);
@@ -315,24 +315,24 @@ void ProductAdditiveQuantizer::compute_LUT(
315
315
  ************************************/
316
316
 
317
317
  ProductLocalSearchQuantizer::ProductLocalSearchQuantizer(
318
- size_t d,
319
- size_t nsplits,
318
+ size_t d_,
319
+ size_t nsplits_,
320
320
  size_t Msub,
321
- size_t nbits,
322
- Search_type_t search_type) {
321
+ size_t nbits_,
322
+ Search_type_t search_type_) {
323
323
  std::vector<AdditiveQuantizer*> aqs;
324
324
 
325
- if (nsplits > 0) {
326
- FAISS_THROW_IF_NOT(d % nsplits == 0);
327
- size_t dsub = d / nsplits;
325
+ if (nsplits_ > 0) {
326
+ FAISS_THROW_IF_NOT(d_ % nsplits_ == 0);
327
+ size_t dsub = d_ / nsplits_;
328
328
 
329
- for (size_t i = 0; i < nsplits; i++) {
329
+ for (size_t i = 0; i < nsplits_; i++) {
330
330
  auto lsq =
331
- new LocalSearchQuantizer(dsub, Msub, nbits, ST_decompress);
331
+ new LocalSearchQuantizer(dsub, Msub, nbits_, ST_decompress);
332
332
  aqs.push_back(lsq);
333
333
  }
334
334
  }
335
- init(d, aqs, search_type);
335
+ init(d_, aqs, search_type_);
336
336
  for (auto& q : aqs) {
337
337
  delete q;
338
338
  }
@@ -346,23 +346,23 @@ ProductLocalSearchQuantizer::ProductLocalSearchQuantizer()
346
346
  ************************************/
347
347
 
348
348
  ProductResidualQuantizer::ProductResidualQuantizer(
349
- size_t d,
350
- size_t nsplits,
349
+ size_t d_,
350
+ size_t nsplits_,
351
351
  size_t Msub,
352
- size_t nbits,
353
- Search_type_t search_type) {
352
+ size_t nbits_,
353
+ Search_type_t search_type_) {
354
354
  std::vector<AdditiveQuantizer*> aqs;
355
355
 
356
- if (nsplits > 0) {
357
- FAISS_THROW_IF_NOT(d % nsplits == 0);
358
- size_t dsub = d / nsplits;
356
+ if (nsplits_ > 0) {
357
+ FAISS_THROW_IF_NOT(d_ % nsplits_ == 0);
358
+ size_t dsub = d_ / nsplits_;
359
359
 
360
- for (size_t i = 0; i < nsplits; i++) {
361
- auto rq = new ResidualQuantizer(dsub, Msub, nbits, ST_decompress);
360
+ for (size_t i = 0; i < nsplits_; i++) {
361
+ auto rq = new ResidualQuantizer(dsub, Msub, nbits_, ST_decompress);
362
362
  aqs.push_back(rq);
363
363
  }
364
364
  }
365
- init(d, aqs, search_type);
365
+ init(d_, aqs, search_type_);
366
366
  for (auto& q : aqs) {
367
367
  delete q;
368
368
  }
@@ -10,10 +10,10 @@
10
10
  namespace faiss {
11
11
 
12
12
  inline PQEncoderGeneric::PQEncoderGeneric(
13
- uint8_t* code,
14
- int nbits,
15
- uint8_t offset)
16
- : code(code), offset(offset), nbits(nbits), reg(0) {
13
+ uint8_t* code_in,
14
+ int nbits_in,
15
+ uint8_t offset_in)
16
+ : code(code_in), offset(offset_in), nbits(nbits_in), reg(0) {
17
17
  assert(nbits <= 64);
18
18
  if (offset > 0) {
19
19
  reg = (*code & ((1 << offset) - 1));
@@ -45,28 +45,30 @@ inline PQEncoderGeneric::~PQEncoderGeneric() {
45
45
  }
46
46
  }
47
47
 
48
- inline PQEncoder8::PQEncoder8(uint8_t* code, int nbits) : code(code) {
49
- assert(8 == nbits);
48
+ inline PQEncoder8::PQEncoder8(uint8_t* code_in, int nbits_in) : code(code_in) {
49
+ assert(8 == nbits_in);
50
+ (void)nbits_in;
50
51
  }
51
52
 
52
53
  inline void PQEncoder8::encode(uint64_t x) {
53
54
  *code++ = (uint8_t)x;
54
55
  }
55
56
 
56
- inline PQEncoder16::PQEncoder16(uint8_t* code, int nbits)
57
- : code((uint16_t*)code) {
58
- assert(16 == nbits);
57
+ inline PQEncoder16::PQEncoder16(uint8_t* code_in, int nbits_in)
58
+ : code((uint16_t*)code_in) {
59
+ assert(16 == nbits_in);
60
+ (void)nbits_in;
59
61
  }
60
62
 
61
63
  inline void PQEncoder16::encode(uint64_t x) {
62
64
  *code++ = (uint16_t)x;
63
65
  }
64
66
 
65
- inline PQDecoderGeneric::PQDecoderGeneric(const uint8_t* code, int nbits)
66
- : code(code),
67
+ inline PQDecoderGeneric::PQDecoderGeneric(const uint8_t* code_in, int nbits_in)
68
+ : code(code_in),
67
69
  offset(0),
68
- nbits(nbits),
69
- mask((1ull << nbits) - 1),
70
+ nbits(nbits_in),
71
+ mask((1ull << nbits_in) - 1),
70
72
  reg(0) {
71
73
  assert(nbits <= 64);
72
74
  }
@@ -98,17 +100,20 @@ inline uint64_t PQDecoderGeneric::decode() {
98
100
  return c & mask;
99
101
  }
100
102
 
101
- inline PQDecoder8::PQDecoder8(const uint8_t* code, int nbits_in) : code(code) {
103
+ inline PQDecoder8::PQDecoder8(const uint8_t* code_in, int nbits_in)
104
+ : code(code_in) {
102
105
  assert(8 == nbits_in);
106
+ (void)nbits_in;
103
107
  }
104
108
 
105
109
  inline uint64_t PQDecoder8::decode() {
106
110
  return (uint64_t)(*code++);
107
111
  }
108
112
 
109
- inline PQDecoder16::PQDecoder16(const uint8_t* code, int nbits_in)
110
- : code((uint16_t*)code) {
113
+ inline PQDecoder16::PQDecoder16(const uint8_t* code_in, int nbits_in)
114
+ : code((uint16_t*)code_in) {
111
115
  assert(16 == nbits_in);
116
+ (void)nbits_in;
112
117
  }
113
118
 
114
119
  inline uint64_t PQDecoder16::decode() {