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
@@ -21,26 +21,25 @@ namespace faiss {
21
21
 
22
22
  /** Product Quantizer. Implemented only for METRIC_L2 */
23
23
  struct ProductQuantizer {
24
-
25
24
  using idx_t = Index::idx_t;
26
25
 
27
- size_t d; ///< size of the input vectors
28
- size_t M; ///< number of subquantizers
29
- size_t nbits; ///< number of bits per quantization index
26
+ size_t d; ///< size of the input vectors
27
+ size_t M; ///< number of subquantizers
28
+ size_t nbits; ///< number of bits per quantization index
30
29
 
31
30
  // values derived from the above
32
- size_t dsub; ///< dimensionality of each subvector
33
- size_t code_size; ///< bytes per indexed vector
34
- size_t ksub; ///< number of centroids for each subquantizer
35
- bool verbose; ///< verbose during training?
31
+ size_t dsub; ///< dimensionality of each subvector
32
+ size_t code_size; ///< bytes per indexed vector
33
+ size_t ksub; ///< number of centroids for each subquantizer
34
+ bool verbose; ///< verbose during training?
36
35
 
37
36
  /// initialization
38
37
  enum train_type_t {
39
38
  Train_default,
40
- Train_hot_start, ///< the centroids are already initialized
41
- Train_shared, ///< share dictionary accross PQ segments
42
- Train_hypercube, ///< intialize centroids with nbits-D hypercube
43
- Train_hypercube_pca, ///< intialize centroids with nbits-D hypercube
39
+ Train_hot_start, ///< the centroids are already initialized
40
+ Train_shared, ///< share dictionary accross PQ segments
41
+ Train_hypercube, ///< intialize centroids with nbits-D hypercube
42
+ Train_hypercube_pca, ///< intialize centroids with nbits-D hypercube
44
43
  };
45
44
  train_type_t train_type;
46
45
 
@@ -48,59 +47,57 @@ struct ProductQuantizer {
48
47
 
49
48
  /// if non-NULL, use this index for assignment (should be of size
50
49
  /// d / M)
51
- Index *assign_index;
50
+ Index* assign_index;
52
51
 
53
52
  /// Centroid table, size M * ksub * dsub
54
53
  std::vector<float> centroids;
55
54
 
56
55
  /// return the centroids associated with subvector m
57
- float * get_centroids (size_t m, size_t i) {
58
- return &centroids [(m * ksub + i) * dsub];
56
+ float* get_centroids(size_t m, size_t i) {
57
+ return &centroids[(m * ksub + i) * dsub];
59
58
  }
60
- const float * get_centroids (size_t m, size_t i) const {
61
- return &centroids [(m * ksub + i) * dsub];
59
+ const float* get_centroids(size_t m, size_t i) const {
60
+ return &centroids[(m * ksub + i) * dsub];
62
61
  }
63
62
 
64
63
  // Train the product quantizer on a set of points. A clustering
65
64
  // can be set on input to define non-default clustering parameters
66
- void train (int n, const float *x);
65
+ void train(int n, const float* x);
67
66
 
68
- ProductQuantizer(size_t d, /* dimensionality of the input vectors */
69
- size_t M, /* number of subquantizers */
70
- size_t nbits); /* number of bit per subvector index */
67
+ ProductQuantizer(
68
+ size_t d, /* dimensionality of the input vectors */
69
+ size_t M, /* number of subquantizers */
70
+ size_t nbits); /* number of bit per subvector index */
71
71
 
72
- ProductQuantizer ();
72
+ ProductQuantizer();
73
73
 
74
74
  /// compute derived values when d, M and nbits have been set
75
- void set_derived_values ();
75
+ void set_derived_values();
76
76
 
77
77
  /// Define the centroids for subquantizer m
78
- void set_params (const float * centroids, int m);
78
+ void set_params(const float* centroids, int m);
79
79
 
80
80
  /// Quantize one vector with the product quantizer
81
- void compute_code (const float * x, uint8_t * code) const ;
81
+ void compute_code(const float* x, uint8_t* code) const;
82
82
 
83
83
  /// same as compute_code for several vectors
84
- void compute_codes (const float * x,
85
- uint8_t * codes,
86
- size_t n) const ;
84
+ void compute_codes(const float* x, uint8_t* codes, size_t n) const;
87
85
 
88
86
  /// speed up code assignment using assign_index
89
87
  /// (non-const because the index is changed)
90
- void compute_codes_with_assign_index (
91
- const float * x,
92
- uint8_t * codes,
93
- size_t n);
88
+ void compute_codes_with_assign_index(
89
+ const float* x,
90
+ uint8_t* codes,
91
+ size_t n);
94
92
 
95
93
  /// decode a vector from a given code (or n vectors if third argument)
96
- void decode (const uint8_t *code, float *x) const;
97
- void decode (const uint8_t *code, float *x, size_t n) const;
94
+ void decode(const uint8_t* code, float* x) const;
95
+ void decode(const uint8_t* code, float* x, size_t n) const;
98
96
 
99
97
  /// If we happen to have the distance tables precomputed, this is
100
98
  /// more efficient to compute the codes.
101
- void compute_code_from_distance_table (const float *tab,
102
- uint8_t *code) const;
103
-
99
+ void compute_code_from_distance_table(const float* tab, uint8_t* code)
100
+ const;
104
101
 
105
102
  /** Compute distance table for one vector.
106
103
  *
@@ -115,26 +112,20 @@ struct ProductQuantizer {
115
112
  * @param x input vector size d
116
113
  * @param dis_table output table, size M * ksub
117
114
  */
118
- void compute_distance_table (const float * x,
119
- float * dis_table) const;
120
-
121
- void compute_inner_prod_table (const float * x,
122
- float * dis_table) const;
115
+ void compute_distance_table(const float* x, float* dis_table) const;
123
116
 
117
+ void compute_inner_prod_table(const float* x, float* dis_table) const;
124
118
 
125
119
  /** compute distance table for several vectors
126
120
  * @param nx nb of input vectors
127
121
  * @param x input vector size nx * d
128
122
  * @param dis_table output table, size nx * M * ksub
129
123
  */
130
- void compute_distance_tables (size_t nx,
131
- const float * x,
132
- float * dis_tables) const;
133
-
134
- void compute_inner_prod_tables (size_t nx,
135
- const float * x,
136
- float * dis_tables) const;
124
+ void compute_distance_tables(size_t nx, const float* x, float* dis_tables)
125
+ const;
137
126
 
127
+ void compute_inner_prod_tables(size_t nx, const float* x, float* dis_tables)
128
+ const;
138
129
 
139
130
  /** perform a search (L2 distance)
140
131
  * @param x query vectors, size nx * d
@@ -144,95 +135,93 @@ struct ProductQuantizer {
144
135
  * @param res heap array to store results (nh == nx)
145
136
  * @param init_finalize_heap initialize heap (input) and sort (output)?
146
137
  */
147
- void search (const float * x,
148
- size_t nx,
149
- const uint8_t * codes,
150
- const size_t ncodes,
151
- float_maxheap_array_t *res,
152
- bool init_finalize_heap = true) const;
138
+ void search(
139
+ const float* x,
140
+ size_t nx,
141
+ const uint8_t* codes,
142
+ const size_t ncodes,
143
+ float_maxheap_array_t* res,
144
+ bool init_finalize_heap = true) const;
153
145
 
154
146
  /** same as search, but with inner product similarity */
155
- void search_ip (const float * x,
156
- size_t nx,
157
- const uint8_t * codes,
158
- const size_t ncodes,
159
- float_minheap_array_t *res,
160
- bool init_finalize_heap = true) const;
161
-
147
+ void search_ip(
148
+ const float* x,
149
+ size_t nx,
150
+ const uint8_t* codes,
151
+ const size_t ncodes,
152
+ float_minheap_array_t* res,
153
+ bool init_finalize_heap = true) const;
162
154
 
163
155
  /// Symmetric Distance Table
164
156
  std::vector<float> sdc_table;
165
157
 
166
158
  // intitialize the SDC table from the centroids
167
- void compute_sdc_table ();
168
-
169
- void search_sdc (const uint8_t * qcodes,
170
- size_t nq,
171
- const uint8_t * bcodes,
172
- const size_t ncodes,
173
- float_maxheap_array_t * res,
174
- bool init_finalize_heap = true) const;
175
-
159
+ void compute_sdc_table();
160
+
161
+ void search_sdc(
162
+ const uint8_t* qcodes,
163
+ size_t nq,
164
+ const uint8_t* bcodes,
165
+ const size_t ncodes,
166
+ float_maxheap_array_t* res,
167
+ bool init_finalize_heap = true) const;
176
168
  };
177
169
 
178
-
179
170
  /*************************************************
180
171
  * Objects to encode / decode strings of bits
181
172
  *************************************************/
182
173
 
183
174
  struct PQEncoderGeneric {
184
- uint8_t *code; ///< code for this vector
175
+ uint8_t* code; ///< code for this vector
185
176
  uint8_t offset;
186
177
  const int nbits; ///< number of bits per subquantizer index
187
178
 
188
179
  uint8_t reg;
189
180
 
190
- PQEncoderGeneric(uint8_t *code, int nbits, uint8_t offset = 0);
181
+ PQEncoderGeneric(uint8_t* code, int nbits, uint8_t offset = 0);
191
182
 
192
183
  void encode(uint64_t x);
193
184
 
194
185
  ~PQEncoderGeneric();
195
186
  };
196
187
 
197
-
198
188
  struct PQEncoder8 {
199
- uint8_t *code;
200
- PQEncoder8(uint8_t *code, int nbits);
189
+ uint8_t* code;
190
+ PQEncoder8(uint8_t* code, int nbits);
201
191
  void encode(uint64_t x);
202
192
  };
203
193
 
204
194
  struct PQEncoder16 {
205
- uint16_t *code;
206
- PQEncoder16(uint8_t *code, int nbits);
195
+ uint16_t* code;
196
+ PQEncoder16(uint8_t* code, int nbits);
207
197
  void encode(uint64_t x);
208
198
  };
209
199
 
210
-
211
200
  struct PQDecoderGeneric {
212
- const uint8_t *code;
201
+ const uint8_t* code;
213
202
  uint8_t offset;
214
203
  const int nbits;
215
204
  const uint64_t mask;
216
205
  uint8_t reg;
217
- PQDecoderGeneric(const uint8_t *code, int nbits);
206
+ PQDecoderGeneric(const uint8_t* code, int nbits);
218
207
  uint64_t decode();
219
208
  };
220
209
 
221
210
  struct PQDecoder8 {
222
211
  static const int nbits = 8;
223
- const uint8_t *code;
224
- PQDecoder8(const uint8_t *code, int nbits);
212
+ const uint8_t* code;
213
+ PQDecoder8(const uint8_t* code, int nbits);
225
214
  uint64_t decode();
226
215
  };
227
216
 
228
217
  struct PQDecoder16 {
229
218
  static const int nbits = 16;
230
- const uint16_t *code;
231
- PQDecoder16(const uint8_t *code, int nbits);
219
+ const uint16_t* code;
220
+ PQDecoder16(const uint8_t* code, int nbits);
232
221
  uint64_t decode();
233
222
  };
234
223
 
235
- } // namespace faiss
224
+ } // namespace faiss
236
225
 
237
226
  #include <faiss/impl/ProductQuantizer-inl.h>
238
227