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
@@ -5,8 +5,6 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
- // -*- c++ -*-
9
-
10
8
  #ifndef FAISS_INDEX_PQ_H
11
9
  #define FAISS_INDEX_PQ_H
12
10
 
@@ -15,18 +13,15 @@
15
13
  #include <vector>
16
14
 
17
15
  #include <faiss/Index.h>
18
- #include <faiss/impl/ProductQuantizer.h>
19
16
  #include <faiss/impl/PolysemousTraining.h>
17
+ #include <faiss/impl/ProductQuantizer.h>
20
18
  #include <faiss/impl/platform_macros.h>
21
19
 
22
-
23
20
  namespace faiss {
24
21
 
25
-
26
22
  /** Index based on a product quantizer. Stored vectors are
27
23
  * approximated by PQ codes. */
28
- struct IndexPQ: Index {
29
-
24
+ struct IndexPQ : Index {
30
25
  /// The product quantizer used to encode the vectors
31
26
  ProductQuantizer pq;
32
27
 
@@ -39,23 +34,23 @@ struct IndexPQ: Index {
39
34
  * @param M number of subquantizers
40
35
  * @param nbits number of bit per subvector index
41
36
  */
42
- IndexPQ (int d, ///< dimensionality of the input vectors
43
- size_t M, ///< number of subquantizers
44
- size_t nbits, ///< number of bit per subvector index
45
- MetricType metric = METRIC_L2);
37
+ IndexPQ(int d, ///< dimensionality of the input vectors
38
+ size_t M, ///< number of subquantizers
39
+ size_t nbits, ///< number of bit per subvector index
40
+ MetricType metric = METRIC_L2);
46
41
 
47
- IndexPQ ();
42
+ IndexPQ();
48
43
 
49
44
  void train(idx_t n, const float* x) override;
50
45
 
51
46
  void add(idx_t n, const float* x) override;
52
47
 
53
48
  void search(
54
- idx_t n,
55
- const float* x,
56
- idx_t k,
57
- float* distances,
58
- idx_t* labels) const override;
49
+ idx_t n,
50
+ const float* x,
51
+ idx_t k,
52
+ float* distances,
53
+ idx_t* labels) const override;
59
54
 
60
55
  void reset() override;
61
56
 
@@ -66,16 +61,13 @@ struct IndexPQ: Index {
66
61
  size_t remove_ids(const IDSelector& sel) override;
67
62
 
68
63
  /* The standalone codec interface */
69
- size_t sa_code_size () const override;
64
+ size_t sa_code_size() const override;
70
65
 
71
- void sa_encode (idx_t n, const float *x,
72
- uint8_t *bytes) const override;
66
+ void sa_encode(idx_t n, const float* x, uint8_t* bytes) const override;
73
67
 
74
- void sa_decode (idx_t n, const uint8_t *bytes,
75
- float *x) const override;
68
+ void sa_decode(idx_t n, const uint8_t* bytes, float* x) const override;
76
69
 
77
-
78
- DistanceComputer * get_distance_computer() const override;
70
+ DistanceComputer* get_distance_computer() const override;
79
71
 
80
72
  /******************************************************
81
73
  * Polysemous codes implementation
@@ -87,12 +79,12 @@ struct IndexPQ: Index {
87
79
 
88
80
  /// how to perform the search in search_core
89
81
  enum Search_type_t {
90
- ST_PQ, ///< asymmetric product quantizer (default)
91
- ST_HE, ///< Hamming distance on codes
92
- ST_generalized_HE, ///< nb of same codes
93
- ST_SDC, ///< symmetric product quantizer (SDC)
94
- ST_polysemous, ///< HE filter (using ht) + PQ combination
95
- ST_polysemous_generalize, ///< Filter on generalized Hamming
82
+ ST_PQ, ///< asymmetric product quantizer (default)
83
+ ST_HE, ///< Hamming distance on codes
84
+ ST_generalized_HE, ///< nb of same codes
85
+ ST_SDC, ///< symmetric product quantizer (SDC)
86
+ ST_polysemous, ///< HE filter (using ht) + PQ combination
87
+ ST_polysemous_generalize, ///< Filter on generalized Hamming
96
88
  };
97
89
 
98
90
  Search_type_t search_type;
@@ -105,16 +97,23 @@ struct IndexPQ: Index {
105
97
  int polysemous_ht;
106
98
 
107
99
  // actual polysemous search
108
- void search_core_polysemous (idx_t n, const float *x, idx_t k,
109
- float *distances, idx_t *labels) const;
100
+ void search_core_polysemous(
101
+ idx_t n,
102
+ const float* x,
103
+ idx_t k,
104
+ float* distances,
105
+ idx_t* labels) const;
110
106
 
111
107
  /// prepare query for a polysemous search, but instead of
112
108
  /// computing the result, just get the histogram of Hamming
113
109
  /// distances. May be computed on a provided dataset if xb != NULL
114
110
  /// @param dist_histogram (M * nbits + 1)
115
- void hamming_distance_histogram (idx_t n, const float *x,
116
- idx_t nb, const float *xb,
117
- int64_t *dist_histogram);
111
+ void hamming_distance_histogram(
112
+ idx_t n,
113
+ const float* x,
114
+ idx_t nb,
115
+ const float* xb,
116
+ int64_t* dist_histogram);
118
117
 
119
118
  /** compute pairwise distances between queries and database
120
119
  *
@@ -122,80 +121,78 @@ struct IndexPQ: Index {
122
121
  * @param x query vector, size n * d
123
122
  * @param dis output distances, size n * ntotal
124
123
  */
125
- void hamming_distance_table (idx_t n, const float *x,
126
- int32_t *dis) const;
127
-
124
+ void hamming_distance_table(idx_t n, const float* x, int32_t* dis) const;
128
125
  };
129
126
 
130
-
131
127
  /// statistics are robust to internal threading, but not if
132
128
  /// IndexPQ::search is called by multiple threads
133
129
  struct IndexPQStats {
134
- size_t nq; // nb of queries run
135
- size_t ncode; // nb of codes visited
130
+ size_t nq; // nb of queries run
131
+ size_t ncode; // nb of codes visited
136
132
 
137
133
  size_t n_hamming_pass; // nb of passed Hamming distance tests (for polysemy)
138
134
 
139
- IndexPQStats () {reset (); }
140
- void reset ();
135
+ IndexPQStats() {
136
+ reset();
137
+ }
138
+ void reset();
141
139
  };
142
140
 
143
141
  FAISS_API extern IndexPQStats indexPQ_stats;
144
142
 
145
-
146
-
147
143
  /** Quantizer where centroids are virtual: they are the Cartesian
148
144
  * product of sub-centroids. */
149
- struct MultiIndexQuantizer: Index {
145
+ struct MultiIndexQuantizer : Index {
150
146
  ProductQuantizer pq;
151
147
 
152
- MultiIndexQuantizer (int d, ///< dimension of the input vectors
153
- size_t M, ///< number of subquantizers
154
- size_t nbits); ///< number of bit per subvector index
148
+ MultiIndexQuantizer(
149
+ int d, ///< dimension of the input vectors
150
+ size_t M, ///< number of subquantizers
151
+ size_t nbits); ///< number of bit per subvector index
155
152
 
156
153
  void train(idx_t n, const float* x) override;
157
154
 
158
155
  void search(
159
- idx_t n, const float* x, idx_t k,
160
- float* distances, idx_t* labels) const override;
156
+ idx_t n,
157
+ const float* x,
158
+ idx_t k,
159
+ float* distances,
160
+ idx_t* labels) const override;
161
161
 
162
162
  /// add and reset will crash at runtime
163
163
  void add(idx_t n, const float* x) override;
164
164
  void reset() override;
165
165
 
166
- MultiIndexQuantizer () {}
166
+ MultiIndexQuantizer() {}
167
167
 
168
168
  void reconstruct(idx_t key, float* recons) const override;
169
169
  };
170
170
 
171
-
172
171
  /** MultiIndexQuantizer where the PQ assignmnet is performed by sub-indexes
173
172
  */
174
- struct MultiIndexQuantizer2: MultiIndexQuantizer {
175
-
173
+ struct MultiIndexQuantizer2 : MultiIndexQuantizer {
176
174
  /// M Indexes on d / M dimensions
177
175
  std::vector<Index*> assign_indexes;
178
176
  bool own_fields;
179
177
 
180
- MultiIndexQuantizer2 (
181
- int d, size_t M, size_t nbits,
182
- Index **indexes);
178
+ MultiIndexQuantizer2(int d, size_t M, size_t nbits, Index** indexes);
183
179
 
184
- MultiIndexQuantizer2 (
185
- int d, size_t nbits,
186
- Index *assign_index_0,
187
- Index *assign_index_1);
180
+ MultiIndexQuantizer2(
181
+ int d,
182
+ size_t nbits,
183
+ Index* assign_index_0,
184
+ Index* assign_index_1);
188
185
 
189
186
  void train(idx_t n, const float* x) override;
190
187
 
191
188
  void search(
192
- idx_t n, const float* x, idx_t k,
193
- float* distances, idx_t* labels) const override;
194
-
189
+ idx_t n,
190
+ const float* x,
191
+ idx_t k,
192
+ float* distances,
193
+ idx_t* labels) const override;
195
194
  };
196
195
 
197
-
198
196
  } // namespace faiss
199
197
 
200
-
201
198
  #endif