faiss 0.1.7 → 0.2.3

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 (219) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +18 -0
  3. data/README.md +7 -7
  4. data/ext/faiss/ext.cpp +1 -1
  5. data/ext/faiss/extconf.rb +8 -2
  6. data/ext/faiss/index.cpp +102 -69
  7. data/ext/faiss/index_binary.cpp +24 -30
  8. data/ext/faiss/kmeans.cpp +20 -16
  9. data/ext/faiss/numo.hpp +867 -0
  10. data/ext/faiss/pca_matrix.cpp +13 -14
  11. data/ext/faiss/product_quantizer.cpp +23 -24
  12. data/ext/faiss/utils.cpp +10 -37
  13. data/ext/faiss/utils.h +2 -13
  14. data/lib/faiss/version.rb +1 -1
  15. data/lib/faiss.rb +0 -5
  16. data/vendor/faiss/faiss/AutoTune.cpp +292 -291
  17. data/vendor/faiss/faiss/AutoTune.h +55 -56
  18. data/vendor/faiss/faiss/Clustering.cpp +334 -195
  19. data/vendor/faiss/faiss/Clustering.h +88 -35
  20. data/vendor/faiss/faiss/IVFlib.cpp +171 -195
  21. data/vendor/faiss/faiss/IVFlib.h +48 -51
  22. data/vendor/faiss/faiss/Index.cpp +85 -103
  23. data/vendor/faiss/faiss/Index.h +54 -48
  24. data/vendor/faiss/faiss/Index2Layer.cpp +139 -164
  25. data/vendor/faiss/faiss/Index2Layer.h +22 -22
  26. data/vendor/faiss/faiss/IndexBinary.cpp +45 -37
  27. data/vendor/faiss/faiss/IndexBinary.h +140 -132
  28. data/vendor/faiss/faiss/IndexBinaryFlat.cpp +73 -53
  29. data/vendor/faiss/faiss/IndexBinaryFlat.h +29 -24
  30. data/vendor/faiss/faiss/IndexBinaryFromFloat.cpp +46 -43
  31. data/vendor/faiss/faiss/IndexBinaryFromFloat.h +16 -15
  32. data/vendor/faiss/faiss/IndexBinaryHNSW.cpp +215 -232
  33. data/vendor/faiss/faiss/IndexBinaryHNSW.h +25 -24
  34. data/vendor/faiss/faiss/IndexBinaryHash.cpp +182 -177
  35. data/vendor/faiss/faiss/IndexBinaryHash.h +41 -34
  36. data/vendor/faiss/faiss/IndexBinaryIVF.cpp +489 -461
  37. data/vendor/faiss/faiss/IndexBinaryIVF.h +97 -68
  38. data/vendor/faiss/faiss/IndexFlat.cpp +116 -147
  39. data/vendor/faiss/faiss/IndexFlat.h +35 -46
  40. data/vendor/faiss/faiss/IndexHNSW.cpp +372 -348
  41. data/vendor/faiss/faiss/IndexHNSW.h +57 -41
  42. data/vendor/faiss/faiss/IndexIVF.cpp +474 -454
  43. data/vendor/faiss/faiss/IndexIVF.h +146 -113
  44. data/vendor/faiss/faiss/IndexIVFFlat.cpp +248 -250
  45. data/vendor/faiss/faiss/IndexIVFFlat.h +48 -51
  46. data/vendor/faiss/faiss/IndexIVFPQ.cpp +457 -516
  47. data/vendor/faiss/faiss/IndexIVFPQ.h +74 -66
  48. data/vendor/faiss/faiss/IndexIVFPQFastScan.cpp +406 -372
  49. data/vendor/faiss/faiss/IndexIVFPQFastScan.h +82 -57
  50. data/vendor/faiss/faiss/IndexIVFPQR.cpp +104 -102
  51. data/vendor/faiss/faiss/IndexIVFPQR.h +33 -28
  52. data/vendor/faiss/faiss/IndexIVFSpectralHash.cpp +125 -133
  53. data/vendor/faiss/faiss/IndexIVFSpectralHash.h +19 -21
  54. data/vendor/faiss/faiss/IndexLSH.cpp +75 -96
  55. data/vendor/faiss/faiss/IndexLSH.h +21 -26
  56. data/vendor/faiss/faiss/IndexLattice.cpp +42 -56
  57. data/vendor/faiss/faiss/IndexLattice.h +11 -16
  58. data/vendor/faiss/faiss/IndexNNDescent.cpp +231 -0
  59. data/vendor/faiss/faiss/IndexNNDescent.h +72 -0
  60. data/vendor/faiss/faiss/IndexNSG.cpp +303 -0
  61. data/vendor/faiss/faiss/IndexNSG.h +85 -0
  62. data/vendor/faiss/faiss/IndexPQ.cpp +405 -464
  63. data/vendor/faiss/faiss/IndexPQ.h +64 -67
  64. data/vendor/faiss/faiss/IndexPQFastScan.cpp +143 -170
  65. data/vendor/faiss/faiss/IndexPQFastScan.h +46 -32
  66. data/vendor/faiss/faiss/IndexPreTransform.cpp +120 -150
  67. data/vendor/faiss/faiss/IndexPreTransform.h +33 -36
  68. data/vendor/faiss/faiss/IndexRefine.cpp +115 -131
  69. data/vendor/faiss/faiss/IndexRefine.h +22 -23
  70. data/vendor/faiss/faiss/IndexReplicas.cpp +147 -153
  71. data/vendor/faiss/faiss/IndexReplicas.h +62 -56
  72. data/vendor/faiss/faiss/IndexResidual.cpp +291 -0
  73. data/vendor/faiss/faiss/IndexResidual.h +152 -0
  74. data/vendor/faiss/faiss/IndexScalarQuantizer.cpp +120 -155
  75. data/vendor/faiss/faiss/IndexScalarQuantizer.h +41 -45
  76. data/vendor/faiss/faiss/IndexShards.cpp +256 -240
  77. data/vendor/faiss/faiss/IndexShards.h +85 -73
  78. data/vendor/faiss/faiss/MatrixStats.cpp +112 -97
  79. data/vendor/faiss/faiss/MatrixStats.h +7 -10
  80. data/vendor/faiss/faiss/MetaIndexes.cpp +135 -157
  81. data/vendor/faiss/faiss/MetaIndexes.h +40 -34
  82. data/vendor/faiss/faiss/MetricType.h +7 -7
  83. data/vendor/faiss/faiss/VectorTransform.cpp +652 -474
  84. data/vendor/faiss/faiss/VectorTransform.h +61 -89
  85. data/vendor/faiss/faiss/clone_index.cpp +77 -73
  86. data/vendor/faiss/faiss/clone_index.h +4 -9
  87. data/vendor/faiss/faiss/gpu/GpuAutoTune.cpp +33 -38
  88. data/vendor/faiss/faiss/gpu/GpuAutoTune.h +11 -9
  89. data/vendor/faiss/faiss/gpu/GpuCloner.cpp +197 -170
  90. data/vendor/faiss/faiss/gpu/GpuCloner.h +53 -35
  91. data/vendor/faiss/faiss/gpu/GpuClonerOptions.cpp +12 -14
  92. data/vendor/faiss/faiss/gpu/GpuClonerOptions.h +27 -25
  93. data/vendor/faiss/faiss/gpu/GpuDistance.h +116 -112
  94. data/vendor/faiss/faiss/gpu/GpuFaissAssert.h +1 -2
  95. data/vendor/faiss/faiss/gpu/GpuIndex.h +134 -137
  96. data/vendor/faiss/faiss/gpu/GpuIndexBinaryFlat.h +76 -73
  97. data/vendor/faiss/faiss/gpu/GpuIndexFlat.h +173 -162
  98. data/vendor/faiss/faiss/gpu/GpuIndexIVF.h +67 -64
  99. data/vendor/faiss/faiss/gpu/GpuIndexIVFFlat.h +89 -86
  100. data/vendor/faiss/faiss/gpu/GpuIndexIVFPQ.h +150 -141
  101. data/vendor/faiss/faiss/gpu/GpuIndexIVFScalarQuantizer.h +101 -103
  102. data/vendor/faiss/faiss/gpu/GpuIndicesOptions.h +17 -16
  103. data/vendor/faiss/faiss/gpu/GpuResources.cpp +116 -128
  104. data/vendor/faiss/faiss/gpu/GpuResources.h +182 -186
  105. data/vendor/faiss/faiss/gpu/StandardGpuResources.cpp +433 -422
  106. data/vendor/faiss/faiss/gpu/StandardGpuResources.h +131 -130
  107. data/vendor/faiss/faiss/gpu/impl/InterleavedCodes.cpp +468 -456
  108. data/vendor/faiss/faiss/gpu/impl/InterleavedCodes.h +25 -19
  109. data/vendor/faiss/faiss/gpu/impl/RemapIndices.cpp +22 -20
  110. data/vendor/faiss/faiss/gpu/impl/RemapIndices.h +9 -8
  111. data/vendor/faiss/faiss/gpu/perf/IndexWrapper-inl.h +39 -44
  112. data/vendor/faiss/faiss/gpu/perf/IndexWrapper.h +16 -14
  113. data/vendor/faiss/faiss/gpu/perf/PerfClustering.cpp +77 -71
  114. data/vendor/faiss/faiss/gpu/perf/PerfIVFPQAdd.cpp +109 -88
  115. data/vendor/faiss/faiss/gpu/perf/WriteIndex.cpp +75 -64
  116. data/vendor/faiss/faiss/gpu/test/TestCodePacking.cpp +230 -215
  117. data/vendor/faiss/faiss/gpu/test/TestGpuIndexBinaryFlat.cpp +80 -86
  118. data/vendor/faiss/faiss/gpu/test/TestGpuIndexFlat.cpp +284 -277
  119. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFFlat.cpp +416 -416
  120. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFPQ.cpp +611 -517
  121. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFScalarQuantizer.cpp +166 -164
  122. data/vendor/faiss/faiss/gpu/test/TestGpuMemoryException.cpp +61 -53
  123. data/vendor/faiss/faiss/gpu/test/TestUtils.cpp +274 -238
  124. data/vendor/faiss/faiss/gpu/test/TestUtils.h +73 -57
  125. data/vendor/faiss/faiss/gpu/test/demo_ivfpq_indexing_gpu.cpp +47 -50
  126. data/vendor/faiss/faiss/gpu/utils/DeviceUtils.h +79 -72
  127. data/vendor/faiss/faiss/gpu/utils/StackDeviceMemory.cpp +140 -146
  128. data/vendor/faiss/faiss/gpu/utils/StackDeviceMemory.h +69 -71
  129. data/vendor/faiss/faiss/gpu/utils/StaticUtils.h +21 -16
  130. data/vendor/faiss/faiss/gpu/utils/Timer.cpp +25 -29
  131. data/vendor/faiss/faiss/gpu/utils/Timer.h +30 -29
  132. data/vendor/faiss/faiss/impl/AdditiveQuantizer.cpp +270 -0
  133. data/vendor/faiss/faiss/impl/AdditiveQuantizer.h +115 -0
  134. data/vendor/faiss/faiss/impl/AuxIndexStructures.cpp +90 -120
  135. data/vendor/faiss/faiss/impl/AuxIndexStructures.h +81 -65
  136. data/vendor/faiss/faiss/impl/FaissAssert.h +73 -58
  137. data/vendor/faiss/faiss/impl/FaissException.cpp +56 -48
  138. data/vendor/faiss/faiss/impl/FaissException.h +41 -29
  139. data/vendor/faiss/faiss/impl/HNSW.cpp +595 -611
  140. data/vendor/faiss/faiss/impl/HNSW.h +179 -200
  141. data/vendor/faiss/faiss/impl/LocalSearchQuantizer.cpp +672 -0
  142. data/vendor/faiss/faiss/impl/LocalSearchQuantizer.h +172 -0
  143. data/vendor/faiss/faiss/impl/NNDescent.cpp +487 -0
  144. data/vendor/faiss/faiss/impl/NNDescent.h +154 -0
  145. data/vendor/faiss/faiss/impl/NSG.cpp +682 -0
  146. data/vendor/faiss/faiss/impl/NSG.h +199 -0
  147. data/vendor/faiss/faiss/impl/PolysemousTraining.cpp +484 -454
  148. data/vendor/faiss/faiss/impl/PolysemousTraining.h +52 -55
  149. data/vendor/faiss/faiss/impl/ProductQuantizer-inl.h +26 -47
  150. data/vendor/faiss/faiss/impl/ProductQuantizer.cpp +469 -459
  151. data/vendor/faiss/faiss/impl/ProductQuantizer.h +76 -87
  152. data/vendor/faiss/faiss/impl/ResidualQuantizer.cpp +448 -0
  153. data/vendor/faiss/faiss/impl/ResidualQuantizer.h +130 -0
  154. data/vendor/faiss/faiss/impl/ResultHandler.h +96 -132
  155. data/vendor/faiss/faiss/impl/ScalarQuantizer.cpp +648 -701
  156. data/vendor/faiss/faiss/impl/ScalarQuantizer.h +48 -46
  157. data/vendor/faiss/faiss/impl/ThreadedIndex-inl.h +129 -131
  158. data/vendor/faiss/faiss/impl/ThreadedIndex.h +61 -55
  159. data/vendor/faiss/faiss/impl/index_read.cpp +547 -479
  160. data/vendor/faiss/faiss/impl/index_write.cpp +497 -407
  161. data/vendor/faiss/faiss/impl/io.cpp +75 -94
  162. data/vendor/faiss/faiss/impl/io.h +31 -41
  163. data/vendor/faiss/faiss/impl/io_macros.h +40 -29
  164. data/vendor/faiss/faiss/impl/lattice_Zn.cpp +137 -186
  165. data/vendor/faiss/faiss/impl/lattice_Zn.h +40 -51
  166. data/vendor/faiss/faiss/impl/platform_macros.h +29 -8
  167. data/vendor/faiss/faiss/impl/pq4_fast_scan.cpp +77 -124
  168. data/vendor/faiss/faiss/impl/pq4_fast_scan.h +39 -48
  169. data/vendor/faiss/faiss/impl/pq4_fast_scan_search_1.cpp +41 -52
  170. data/vendor/faiss/faiss/impl/pq4_fast_scan_search_qbs.cpp +80 -117
  171. data/vendor/faiss/faiss/impl/simd_result_handlers.h +109 -137
  172. data/vendor/faiss/faiss/index_factory.cpp +269 -218
  173. data/vendor/faiss/faiss/index_factory.h +6 -7
  174. data/vendor/faiss/faiss/index_io.h +23 -26
  175. data/vendor/faiss/faiss/invlists/BlockInvertedLists.cpp +67 -75
  176. data/vendor/faiss/faiss/invlists/BlockInvertedLists.h +22 -24
  177. data/vendor/faiss/faiss/invlists/DirectMap.cpp +96 -112
  178. data/vendor/faiss/faiss/invlists/DirectMap.h +29 -33
  179. data/vendor/faiss/faiss/invlists/InvertedLists.cpp +307 -364
  180. data/vendor/faiss/faiss/invlists/InvertedLists.h +151 -151
  181. data/vendor/faiss/faiss/invlists/InvertedListsIOHook.cpp +29 -34
  182. data/vendor/faiss/faiss/invlists/InvertedListsIOHook.h +17 -18
  183. data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.cpp +257 -293
  184. data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.h +50 -45
  185. data/vendor/faiss/faiss/python/python_callbacks.cpp +23 -26
  186. data/vendor/faiss/faiss/python/python_callbacks.h +9 -16
  187. data/vendor/faiss/faiss/utils/AlignedTable.h +79 -44
  188. data/vendor/faiss/faiss/utils/Heap.cpp +40 -48
  189. data/vendor/faiss/faiss/utils/Heap.h +186 -209
  190. data/vendor/faiss/faiss/utils/WorkerThread.cpp +67 -76
  191. data/vendor/faiss/faiss/utils/WorkerThread.h +32 -33
  192. data/vendor/faiss/faiss/utils/distances.cpp +301 -310
  193. data/vendor/faiss/faiss/utils/distances.h +133 -118
  194. data/vendor/faiss/faiss/utils/distances_simd.cpp +456 -516
  195. data/vendor/faiss/faiss/utils/extra_distances-inl.h +117 -0
  196. data/vendor/faiss/faiss/utils/extra_distances.cpp +113 -232
  197. data/vendor/faiss/faiss/utils/extra_distances.h +30 -29
  198. data/vendor/faiss/faiss/utils/hamming-inl.h +260 -209
  199. data/vendor/faiss/faiss/utils/hamming.cpp +375 -469
  200. data/vendor/faiss/faiss/utils/hamming.h +62 -85
  201. data/vendor/faiss/faiss/utils/ordered_key_value.h +16 -18
  202. data/vendor/faiss/faiss/utils/partitioning.cpp +393 -318
  203. data/vendor/faiss/faiss/utils/partitioning.h +26 -21
  204. data/vendor/faiss/faiss/utils/quantize_lut.cpp +78 -66
  205. data/vendor/faiss/faiss/utils/quantize_lut.h +22 -20
  206. data/vendor/faiss/faiss/utils/random.cpp +39 -63
  207. data/vendor/faiss/faiss/utils/random.h +13 -16
  208. data/vendor/faiss/faiss/utils/simdlib.h +4 -2
  209. data/vendor/faiss/faiss/utils/simdlib_avx2.h +88 -85
  210. data/vendor/faiss/faiss/utils/simdlib_emulated.h +226 -165
  211. data/vendor/faiss/faiss/utils/simdlib_neon.h +832 -0
  212. data/vendor/faiss/faiss/utils/utils.cpp +304 -287
  213. data/vendor/faiss/faiss/utils/utils.h +53 -48
  214. metadata +26 -12
  215. data/lib/faiss/index.rb +0 -20
  216. data/lib/faiss/index_binary.rb +0 -20
  217. data/lib/faiss/kmeans.rb +0 -15
  218. data/lib/faiss/pca_matrix.rb +0 -15
  219. data/lib/faiss/product_quantizer.rb +0 -22
@@ -10,7 +10,6 @@
10
10
  #ifndef FAISS_INDEX_IVFPQ_H
11
11
  #define FAISS_INDEX_IVFPQ_H
12
12
 
13
-
14
13
  #include <vector>
15
14
 
16
15
  #include <faiss/IndexIVF.h>
@@ -20,32 +19,29 @@
20
19
 
21
20
  namespace faiss {
22
21
 
23
- struct IVFPQSearchParameters: IVFSearchParameters {
24
- size_t scan_table_threshold; ///< use table computation or on-the-fly?
25
- int polysemous_ht; ///< Hamming thresh for polysemous filtering
26
- IVFPQSearchParameters (): scan_table_threshold(0), polysemous_ht(0) {}
27
- ~IVFPQSearchParameters () {}
22
+ struct IVFPQSearchParameters : IVFSearchParameters {
23
+ size_t scan_table_threshold; ///< use table computation or on-the-fly?
24
+ int polysemous_ht; ///< Hamming thresh for polysemous filtering
25
+ IVFPQSearchParameters() : scan_table_threshold(0), polysemous_ht(0) {}
26
+ ~IVFPQSearchParameters() {}
28
27
  };
29
28
 
30
-
31
-
32
29
  FAISS_API extern size_t precomputed_table_max_bytes;
33
30
 
34
-
35
31
  /** Inverted file with Product Quantizer encoding. Each residual
36
32
  * vector is encoded as a product quantizer code.
37
33
  */
38
- struct IndexIVFPQ: IndexIVF {
39
- bool by_residual; ///< Encode residual or plain vector?
34
+ struct IndexIVFPQ : IndexIVF {
35
+ bool by_residual; ///< Encode residual or plain vector?
40
36
 
41
- ProductQuantizer pq; ///< produces the codes
37
+ ProductQuantizer pq; ///< produces the codes
42
38
 
43
- bool do_polysemous_training; ///< reorder PQ centroids after training?
44
- PolysemousTraining *polysemous_training; ///< if NULL, use default
39
+ bool do_polysemous_training; ///< reorder PQ centroids after training?
40
+ PolysemousTraining* polysemous_training; ///< if NULL, use default
45
41
 
46
42
  // search-time parameters
47
- size_t scan_table_threshold; ///< use table computation or on-the-fly?
48
- int polysemous_ht; ///< Hamming thresh for polysemous filtering
43
+ size_t scan_table_threshold; ///< use table computation or on-the-fly?
44
+ int polysemous_ht; ///< Hamming thresh for polysemous filtering
49
45
 
50
46
  /** Precompute table that speed up query preprocessing at some
51
47
  * memory cost (used only for by_residual with L2 metric)
@@ -56,37 +52,47 @@ struct IndexIVFPQ: IndexIVF {
56
52
  /// size nlist * pq.M * pq.ksub
57
53
  AlignedTable<float> precomputed_table;
58
54
 
59
- IndexIVFPQ (
60
- Index * quantizer, size_t d, size_t nlist,
61
- size_t M, size_t nbits_per_idx, MetricType metric = METRIC_L2);
62
-
63
- void add_with_ids(idx_t n, const float* x, const idx_t* xids = nullptr)
64
- override;
65
-
66
- void encode_vectors(idx_t n, const float* x,
67
- const idx_t *list_nos,
68
- uint8_t * codes,
69
- bool include_listnos = false) const override;
70
-
71
- void sa_decode (idx_t n, const uint8_t *bytes,
72
- float *x) const override;
73
-
55
+ IndexIVFPQ(
56
+ Index* quantizer,
57
+ size_t d,
58
+ size_t nlist,
59
+ size_t M,
60
+ size_t nbits_per_idx,
61
+ MetricType metric = METRIC_L2);
62
+
63
+ void encode_vectors(
64
+ idx_t n,
65
+ const float* x,
66
+ const idx_t* list_nos,
67
+ uint8_t* codes,
68
+ bool include_listnos = false) const override;
69
+
70
+ void sa_decode(idx_t n, const uint8_t* bytes, float* x) const override;
71
+
72
+ void add_core(
73
+ idx_t n,
74
+ const float* x,
75
+ const idx_t* xids,
76
+ const idx_t* precomputed_idx) override;
74
77
 
75
78
  /// same as add_core, also:
76
79
  /// - output 2nd level residuals if residuals_2 != NULL
77
- /// - use precomputed list numbers if precomputed_idx != NULL
78
- void add_core_o (idx_t n, const float *x,
79
- const idx_t *xids, float *residuals_2,
80
- const idx_t *precomputed_idx = nullptr);
80
+ /// - accepts precomputed_idx = nullptr
81
+ void add_core_o(
82
+ idx_t n,
83
+ const float* x,
84
+ const idx_t* xids,
85
+ float* residuals_2,
86
+ const idx_t* precomputed_idx = nullptr);
81
87
 
82
88
  /// trains the product quantizer
83
89
  void train_residual(idx_t n, const float* x) override;
84
90
 
85
91
  /// same as train_residual, also output 2nd level residuals
86
- void train_residual_o (idx_t n, const float *x, float *residuals_2);
92
+ void train_residual_o(idx_t n, const float* x, float* residuals_2);
87
93
 
88
- void reconstruct_from_offset (int64_t list_no, int64_t offset,
89
- float* recons) const override;
94
+ void reconstruct_from_offset(int64_t list_no, int64_t offset, float* recons)
95
+ const override;
90
96
 
91
97
  /** Find exact duplicates in the dataset.
92
98
  *
@@ -99,10 +105,10 @@ struct IndexIVFPQ: IndexIVF {
99
105
  * duplicates (max size ntotal)
100
106
  * @return n number of groups found
101
107
  */
102
- size_t find_duplicates (idx_t *ids, size_t *lims) const;
108
+ size_t find_duplicates(idx_t* ids, size_t* lims) const;
103
109
 
104
110
  // map a vector to a binary code knowning the index
105
- void encode (idx_t key, const float * x, uint8_t * code) const;
111
+ void encode(idx_t key, const float* x, uint8_t* code) const;
106
112
 
107
113
  /** Encode multiple vectors
108
114
  *
@@ -113,22 +119,27 @@ struct IndexIVFPQ: IndexIVF {
113
119
  * @param compute_keys if false, assume keys are precomputed,
114
120
  * otherwise compute them
115
121
  */
116
- void encode_multiple (size_t n, idx_t *keys,
117
- const float * x, uint8_t * codes,
118
- bool compute_keys = false) const;
122
+ void encode_multiple(
123
+ size_t n,
124
+ idx_t* keys,
125
+ const float* x,
126
+ uint8_t* codes,
127
+ bool compute_keys = false) const;
119
128
 
120
129
  /// inverse of encode_multiple
121
- void decode_multiple (size_t n, const idx_t *keys,
122
- const uint8_t * xcodes, float * x) const;
130
+ void decode_multiple(
131
+ size_t n,
132
+ const idx_t* keys,
133
+ const uint8_t* xcodes,
134
+ float* x) const;
123
135
 
124
- InvertedListScanner *get_InvertedListScanner (bool store_pairs)
125
- const override;
136
+ InvertedListScanner* get_InvertedListScanner(
137
+ bool store_pairs) const override;
126
138
 
127
139
  /// build precomputed table
128
- void precompute_table ();
129
-
130
- IndexIVFPQ ();
140
+ void precompute_table();
131
141
 
142
+ IndexIVFPQ();
132
143
  };
133
144
 
134
145
  /** Pre-compute distance tables for IVFPQ with by-residual and METRIC_L2
@@ -136,24 +147,23 @@ struct IndexIVFPQ: IndexIVF {
136
147
  * @param use_precomputed_table (I/O)
137
148
  * =-1: force disable
138
149
  * =0: decide heuristically (default: use tables only if they are
139
- * < precomputed_tables_max_bytes), set use_precomputed_table on output
140
- * =1: tables that work for all quantizers (size 256 * nlist * M)
141
- * =2: specific version for MultiIndexQuantizer (much more compact)
150
+ * < precomputed_tables_max_bytes), set use_precomputed_table on
151
+ * output =1: tables that work for all quantizers (size 256 * nlist * M) =2:
152
+ * specific version for MultiIndexQuantizer (much more compact)
142
153
  * @param precomputed_table precomputed table to intialize
143
154
  */
144
155
 
145
156
  void initialize_IVFPQ_precomputed_table(
146
- int &use_precomputed_table,
147
- const Index *quantizer,
148
- const ProductQuantizer &pq,
149
- AlignedTable<float> & precomputed_table,
150
- bool verbose
151
- );
157
+ int& use_precomputed_table,
158
+ const Index* quantizer,
159
+ const ProductQuantizer& pq,
160
+ AlignedTable<float>& precomputed_table,
161
+ bool verbose);
152
162
 
153
163
  /// statistics are robust to internal threading, but not if
154
164
  /// IndexIVFPQ::search_preassigned is called by multiple threads
155
165
  struct IndexIVFPQStats {
156
- size_t nrefine; ///< nb of refines (IVFPQR)
166
+ size_t nrefine; ///< nb of refines (IVFPQR)
157
167
 
158
168
  size_t n_hamming_pass;
159
169
  ///< nb of passed Hamming distance tests (for polysemous)
@@ -162,17 +172,15 @@ struct IndexIVFPQStats {
162
172
  size_t search_cycles;
163
173
  size_t refine_cycles; ///< only for IVFPQR
164
174
 
165
- IndexIVFPQStats () {reset (); }
166
- void reset ();
175
+ IndexIVFPQStats() {
176
+ reset();
177
+ }
178
+ void reset();
167
179
  };
168
180
 
169
181
  // global var that collects them all
170
182
  FAISS_API extern IndexIVFPQStats indexIVFPQ_stats;
171
183
 
172
-
173
-
174
-
175
184
  } // namespace faiss
176
185
 
177
-
178
186
  #endif