faiss 0.2.0 → 0.2.4

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 (215) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +16 -0
  3. data/LICENSE.txt +1 -1
  4. data/README.md +7 -7
  5. data/ext/faiss/extconf.rb +6 -3
  6. data/ext/faiss/numo.hpp +4 -4
  7. data/ext/faiss/utils.cpp +1 -1
  8. data/ext/faiss/utils.h +1 -1
  9. data/lib/faiss/version.rb +1 -1
  10. data/vendor/faiss/faiss/AutoTune.cpp +292 -291
  11. data/vendor/faiss/faiss/AutoTune.h +55 -56
  12. data/vendor/faiss/faiss/Clustering.cpp +365 -194
  13. data/vendor/faiss/faiss/Clustering.h +102 -35
  14. data/vendor/faiss/faiss/IVFlib.cpp +171 -195
  15. data/vendor/faiss/faiss/IVFlib.h +48 -51
  16. data/vendor/faiss/faiss/Index.cpp +85 -103
  17. data/vendor/faiss/faiss/Index.h +54 -48
  18. data/vendor/faiss/faiss/Index2Layer.cpp +126 -224
  19. data/vendor/faiss/faiss/Index2Layer.h +22 -36
  20. data/vendor/faiss/faiss/IndexAdditiveQuantizer.cpp +407 -0
  21. data/vendor/faiss/faiss/IndexAdditiveQuantizer.h +195 -0
  22. data/vendor/faiss/faiss/IndexBinary.cpp +45 -37
  23. data/vendor/faiss/faiss/IndexBinary.h +140 -132
  24. data/vendor/faiss/faiss/IndexBinaryFlat.cpp +73 -53
  25. data/vendor/faiss/faiss/IndexBinaryFlat.h +29 -24
  26. data/vendor/faiss/faiss/IndexBinaryFromFloat.cpp +46 -43
  27. data/vendor/faiss/faiss/IndexBinaryFromFloat.h +16 -15
  28. data/vendor/faiss/faiss/IndexBinaryHNSW.cpp +215 -232
  29. data/vendor/faiss/faiss/IndexBinaryHNSW.h +25 -24
  30. data/vendor/faiss/faiss/IndexBinaryHash.cpp +182 -177
  31. data/vendor/faiss/faiss/IndexBinaryHash.h +41 -34
  32. data/vendor/faiss/faiss/IndexBinaryIVF.cpp +489 -461
  33. data/vendor/faiss/faiss/IndexBinaryIVF.h +97 -68
  34. data/vendor/faiss/faiss/IndexFlat.cpp +115 -176
  35. data/vendor/faiss/faiss/IndexFlat.h +42 -59
  36. data/vendor/faiss/faiss/IndexFlatCodes.cpp +67 -0
  37. data/vendor/faiss/faiss/IndexFlatCodes.h +47 -0
  38. data/vendor/faiss/faiss/IndexHNSW.cpp +372 -348
  39. data/vendor/faiss/faiss/IndexHNSW.h +57 -41
  40. data/vendor/faiss/faiss/IndexIVF.cpp +545 -453
  41. data/vendor/faiss/faiss/IndexIVF.h +169 -118
  42. data/vendor/faiss/faiss/IndexIVFAdditiveQuantizer.cpp +316 -0
  43. data/vendor/faiss/faiss/IndexIVFAdditiveQuantizer.h +121 -0
  44. data/vendor/faiss/faiss/IndexIVFFlat.cpp +247 -252
  45. data/vendor/faiss/faiss/IndexIVFFlat.h +48 -51
  46. data/vendor/faiss/faiss/IndexIVFPQ.cpp +459 -517
  47. data/vendor/faiss/faiss/IndexIVFPQ.h +75 -67
  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 +163 -150
  53. data/vendor/faiss/faiss/IndexIVFSpectralHash.h +38 -25
  54. data/vendor/faiss/faiss/IndexLSH.cpp +66 -113
  55. data/vendor/faiss/faiss/IndexLSH.h +20 -38
  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 +229 -0
  59. data/vendor/faiss/faiss/IndexNNDescent.h +72 -0
  60. data/vendor/faiss/faiss/IndexNSG.cpp +301 -0
  61. data/vendor/faiss/faiss/IndexNSG.h +85 -0
  62. data/vendor/faiss/faiss/IndexPQ.cpp +387 -495
  63. data/vendor/faiss/faiss/IndexPQ.h +64 -82
  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 +139 -127
  69. data/vendor/faiss/faiss/IndexRefine.h +32 -23
  70. data/vendor/faiss/faiss/IndexReplicas.cpp +147 -153
  71. data/vendor/faiss/faiss/IndexReplicas.h +62 -56
  72. data/vendor/faiss/faiss/IndexScalarQuantizer.cpp +111 -172
  73. data/vendor/faiss/faiss/IndexScalarQuantizer.h +41 -59
  74. data/vendor/faiss/faiss/IndexShards.cpp +256 -240
  75. data/vendor/faiss/faiss/IndexShards.h +85 -73
  76. data/vendor/faiss/faiss/MatrixStats.cpp +112 -97
  77. data/vendor/faiss/faiss/MatrixStats.h +7 -10
  78. data/vendor/faiss/faiss/MetaIndexes.cpp +135 -157
  79. data/vendor/faiss/faiss/MetaIndexes.h +40 -34
  80. data/vendor/faiss/faiss/MetricType.h +7 -7
  81. data/vendor/faiss/faiss/VectorTransform.cpp +654 -475
  82. data/vendor/faiss/faiss/VectorTransform.h +64 -89
  83. data/vendor/faiss/faiss/clone_index.cpp +78 -73
  84. data/vendor/faiss/faiss/clone_index.h +4 -9
  85. data/vendor/faiss/faiss/gpu/GpuAutoTune.cpp +33 -38
  86. data/vendor/faiss/faiss/gpu/GpuAutoTune.h +11 -9
  87. data/vendor/faiss/faiss/gpu/GpuCloner.cpp +198 -171
  88. data/vendor/faiss/faiss/gpu/GpuCloner.h +53 -35
  89. data/vendor/faiss/faiss/gpu/GpuClonerOptions.cpp +12 -14
  90. data/vendor/faiss/faiss/gpu/GpuClonerOptions.h +27 -25
  91. data/vendor/faiss/faiss/gpu/GpuDistance.h +116 -112
  92. data/vendor/faiss/faiss/gpu/GpuFaissAssert.h +1 -2
  93. data/vendor/faiss/faiss/gpu/GpuIcmEncoder.h +60 -0
  94. data/vendor/faiss/faiss/gpu/GpuIndex.h +134 -137
  95. data/vendor/faiss/faiss/gpu/GpuIndexBinaryFlat.h +76 -73
  96. data/vendor/faiss/faiss/gpu/GpuIndexFlat.h +173 -162
  97. data/vendor/faiss/faiss/gpu/GpuIndexIVF.h +67 -64
  98. data/vendor/faiss/faiss/gpu/GpuIndexIVFFlat.h +89 -86
  99. data/vendor/faiss/faiss/gpu/GpuIndexIVFPQ.h +150 -141
  100. data/vendor/faiss/faiss/gpu/GpuIndexIVFScalarQuantizer.h +101 -103
  101. data/vendor/faiss/faiss/gpu/GpuIndicesOptions.h +17 -16
  102. data/vendor/faiss/faiss/gpu/GpuResources.cpp +116 -128
  103. data/vendor/faiss/faiss/gpu/GpuResources.h +182 -186
  104. data/vendor/faiss/faiss/gpu/StandardGpuResources.cpp +433 -422
  105. data/vendor/faiss/faiss/gpu/StandardGpuResources.h +131 -130
  106. data/vendor/faiss/faiss/gpu/impl/InterleavedCodes.cpp +468 -456
  107. data/vendor/faiss/faiss/gpu/impl/InterleavedCodes.h +25 -19
  108. data/vendor/faiss/faiss/gpu/impl/RemapIndices.cpp +22 -20
  109. data/vendor/faiss/faiss/gpu/impl/RemapIndices.h +9 -8
  110. data/vendor/faiss/faiss/gpu/perf/IndexWrapper-inl.h +39 -44
  111. data/vendor/faiss/faiss/gpu/perf/IndexWrapper.h +16 -14
  112. data/vendor/faiss/faiss/gpu/perf/PerfClustering.cpp +77 -71
  113. data/vendor/faiss/faiss/gpu/perf/PerfIVFPQAdd.cpp +109 -88
  114. data/vendor/faiss/faiss/gpu/perf/WriteIndex.cpp +75 -64
  115. data/vendor/faiss/faiss/gpu/test/TestCodePacking.cpp +230 -215
  116. data/vendor/faiss/faiss/gpu/test/TestGpuIndexBinaryFlat.cpp +80 -86
  117. data/vendor/faiss/faiss/gpu/test/TestGpuIndexFlat.cpp +284 -277
  118. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFFlat.cpp +416 -416
  119. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFPQ.cpp +611 -517
  120. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFScalarQuantizer.cpp +166 -164
  121. data/vendor/faiss/faiss/gpu/test/TestGpuMemoryException.cpp +61 -53
  122. data/vendor/faiss/faiss/gpu/test/TestUtils.cpp +274 -238
  123. data/vendor/faiss/faiss/gpu/test/TestUtils.h +73 -57
  124. data/vendor/faiss/faiss/gpu/test/demo_ivfpq_indexing_gpu.cpp +47 -50
  125. data/vendor/faiss/faiss/gpu/utils/DeviceUtils.h +79 -72
  126. data/vendor/faiss/faiss/gpu/utils/StackDeviceMemory.cpp +140 -146
  127. data/vendor/faiss/faiss/gpu/utils/StackDeviceMemory.h +69 -71
  128. data/vendor/faiss/faiss/gpu/utils/StaticUtils.h +21 -16
  129. data/vendor/faiss/faiss/gpu/utils/Timer.cpp +25 -29
  130. data/vendor/faiss/faiss/gpu/utils/Timer.h +30 -29
  131. data/vendor/faiss/faiss/impl/AdditiveQuantizer.cpp +503 -0
  132. data/vendor/faiss/faiss/impl/AdditiveQuantizer.h +175 -0
  133. data/vendor/faiss/faiss/impl/AuxIndexStructures.cpp +90 -120
  134. data/vendor/faiss/faiss/impl/AuxIndexStructures.h +81 -65
  135. data/vendor/faiss/faiss/impl/FaissAssert.h +73 -58
  136. data/vendor/faiss/faiss/impl/FaissException.cpp +56 -48
  137. data/vendor/faiss/faiss/impl/FaissException.h +41 -29
  138. data/vendor/faiss/faiss/impl/HNSW.cpp +606 -617
  139. data/vendor/faiss/faiss/impl/HNSW.h +179 -200
  140. data/vendor/faiss/faiss/impl/LocalSearchQuantizer.cpp +855 -0
  141. data/vendor/faiss/faiss/impl/LocalSearchQuantizer.h +244 -0
  142. data/vendor/faiss/faiss/impl/NNDescent.cpp +487 -0
  143. data/vendor/faiss/faiss/impl/NNDescent.h +154 -0
  144. data/vendor/faiss/faiss/impl/NSG.cpp +679 -0
  145. data/vendor/faiss/faiss/impl/NSG.h +199 -0
  146. data/vendor/faiss/faiss/impl/PolysemousTraining.cpp +484 -454
  147. data/vendor/faiss/faiss/impl/PolysemousTraining.h +52 -55
  148. data/vendor/faiss/faiss/impl/ProductQuantizer-inl.h +26 -47
  149. data/vendor/faiss/faiss/impl/ProductQuantizer.cpp +469 -459
  150. data/vendor/faiss/faiss/impl/ProductQuantizer.h +76 -87
  151. data/vendor/faiss/faiss/impl/ResidualQuantizer.cpp +758 -0
  152. data/vendor/faiss/faiss/impl/ResidualQuantizer.h +188 -0
  153. data/vendor/faiss/faiss/impl/ResultHandler.h +96 -132
  154. data/vendor/faiss/faiss/impl/ScalarQuantizer.cpp +647 -707
  155. data/vendor/faiss/faiss/impl/ScalarQuantizer.h +48 -46
  156. data/vendor/faiss/faiss/impl/ThreadedIndex-inl.h +129 -131
  157. data/vendor/faiss/faiss/impl/ThreadedIndex.h +61 -55
  158. data/vendor/faiss/faiss/impl/index_read.cpp +631 -480
  159. data/vendor/faiss/faiss/impl/index_write.cpp +547 -407
  160. data/vendor/faiss/faiss/impl/io.cpp +76 -95
  161. data/vendor/faiss/faiss/impl/io.h +31 -41
  162. data/vendor/faiss/faiss/impl/io_macros.h +60 -29
  163. data/vendor/faiss/faiss/impl/kmeans1d.cpp +301 -0
  164. data/vendor/faiss/faiss/impl/kmeans1d.h +48 -0
  165. data/vendor/faiss/faiss/impl/lattice_Zn.cpp +137 -186
  166. data/vendor/faiss/faiss/impl/lattice_Zn.h +40 -51
  167. data/vendor/faiss/faiss/impl/platform_macros.h +29 -8
  168. data/vendor/faiss/faiss/impl/pq4_fast_scan.cpp +77 -124
  169. data/vendor/faiss/faiss/impl/pq4_fast_scan.h +39 -48
  170. data/vendor/faiss/faiss/impl/pq4_fast_scan_search_1.cpp +41 -52
  171. data/vendor/faiss/faiss/impl/pq4_fast_scan_search_qbs.cpp +80 -117
  172. data/vendor/faiss/faiss/impl/simd_result_handlers.h +109 -137
  173. data/vendor/faiss/faiss/index_factory.cpp +619 -397
  174. data/vendor/faiss/faiss/index_factory.h +8 -6
  175. data/vendor/faiss/faiss/index_io.h +23 -26
  176. data/vendor/faiss/faiss/invlists/BlockInvertedLists.cpp +67 -75
  177. data/vendor/faiss/faiss/invlists/BlockInvertedLists.h +22 -24
  178. data/vendor/faiss/faiss/invlists/DirectMap.cpp +96 -112
  179. data/vendor/faiss/faiss/invlists/DirectMap.h +29 -33
  180. data/vendor/faiss/faiss/invlists/InvertedLists.cpp +307 -364
  181. data/vendor/faiss/faiss/invlists/InvertedLists.h +151 -151
  182. data/vendor/faiss/faiss/invlists/InvertedListsIOHook.cpp +29 -34
  183. data/vendor/faiss/faiss/invlists/InvertedListsIOHook.h +17 -18
  184. data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.cpp +257 -293
  185. data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.h +50 -45
  186. data/vendor/faiss/faiss/python/python_callbacks.cpp +23 -26
  187. data/vendor/faiss/faiss/python/python_callbacks.h +9 -16
  188. data/vendor/faiss/faiss/utils/AlignedTable.h +79 -44
  189. data/vendor/faiss/faiss/utils/Heap.cpp +40 -48
  190. data/vendor/faiss/faiss/utils/Heap.h +186 -209
  191. data/vendor/faiss/faiss/utils/WorkerThread.cpp +67 -76
  192. data/vendor/faiss/faiss/utils/WorkerThread.h +32 -33
  193. data/vendor/faiss/faiss/utils/distances.cpp +305 -312
  194. data/vendor/faiss/faiss/utils/distances.h +170 -122
  195. data/vendor/faiss/faiss/utils/distances_simd.cpp +498 -508
  196. data/vendor/faiss/faiss/utils/extra_distances-inl.h +117 -0
  197. data/vendor/faiss/faiss/utils/extra_distances.cpp +113 -232
  198. data/vendor/faiss/faiss/utils/extra_distances.h +30 -29
  199. data/vendor/faiss/faiss/utils/hamming-inl.h +260 -209
  200. data/vendor/faiss/faiss/utils/hamming.cpp +375 -469
  201. data/vendor/faiss/faiss/utils/hamming.h +62 -85
  202. data/vendor/faiss/faiss/utils/ordered_key_value.h +16 -18
  203. data/vendor/faiss/faiss/utils/partitioning.cpp +393 -318
  204. data/vendor/faiss/faiss/utils/partitioning.h +26 -21
  205. data/vendor/faiss/faiss/utils/quantize_lut.cpp +78 -66
  206. data/vendor/faiss/faiss/utils/quantize_lut.h +22 -20
  207. data/vendor/faiss/faiss/utils/random.cpp +39 -63
  208. data/vendor/faiss/faiss/utils/random.h +13 -16
  209. data/vendor/faiss/faiss/utils/simdlib.h +4 -2
  210. data/vendor/faiss/faiss/utils/simdlib_avx2.h +88 -85
  211. data/vendor/faiss/faiss/utils/simdlib_emulated.h +226 -165
  212. data/vendor/faiss/faiss/utils/simdlib_neon.h +832 -0
  213. data/vendor/faiss/faiss/utils/utils.cpp +304 -287
  214. data/vendor/faiss/faiss/utils/utils.h +54 -49
  215. metadata +29 -4
@@ -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)
142
- * @param precomputed_table precomputed table to intialize
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)
153
+ * @param precomputed_table precomputed table to initialize
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