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
@@ -15,9 +15,8 @@
15
15
  * the interface.
16
16
  */
17
17
 
18
- #include <vector>
19
18
  #include <faiss/Index.h>
20
-
19
+ #include <vector>
21
20
 
22
21
  namespace faiss {
23
22
 
@@ -31,10 +30,10 @@ namespace faiss {
31
30
  struct InvertedLists {
32
31
  typedef Index::idx_t idx_t;
33
32
 
34
- size_t nlist; ///< number of possible key values
35
- size_t code_size; ///< code size per vector in bytes
33
+ size_t nlist; ///< number of possible key values
34
+ size_t code_size; ///< code size per vector in bytes
36
35
 
37
- InvertedLists (size_t nlist, size_t code_size);
36
+ InvertedLists(size_t nlist, size_t code_size);
38
37
 
39
38
  /// used for BlockInvertedLists, where the codes are packed into groups
40
39
  /// and the individual code size is meaningless
@@ -51,70 +50,77 @@ struct InvertedLists {
51
50
  *
52
51
  * @return codes size list_size * code_size
53
52
  */
54
- virtual const uint8_t * get_codes (size_t list_no) const = 0;
53
+ virtual const uint8_t* get_codes(size_t list_no) const = 0;
55
54
 
56
55
  /** get the ids for an inverted list
57
56
  * must be released by release_ids
58
57
  *
59
58
  * @return ids size list_size
60
59
  */
61
- virtual const idx_t * get_ids (size_t list_no) const = 0;
60
+ virtual const idx_t* get_ids(size_t list_no) const = 0;
62
61
 
63
62
  /// release codes returned by get_codes (default implementation is nop
64
- virtual void release_codes (size_t list_no, const uint8_t *codes) const;
63
+ virtual void release_codes(size_t list_no, const uint8_t* codes) const;
65
64
 
66
65
  /// release ids returned by get_ids
67
- virtual void release_ids (size_t list_no, const idx_t *ids) const;
66
+ virtual void release_ids(size_t list_no, const idx_t* ids) const;
68
67
 
69
68
  /// @return a single id in an inverted list
70
- virtual idx_t get_single_id (size_t list_no, size_t offset) const;
69
+ virtual idx_t get_single_id(size_t list_no, size_t offset) const;
71
70
 
72
71
  /// @return a single code in an inverted list
73
72
  /// (should be deallocated with release_codes)
74
- virtual const uint8_t * get_single_code (
75
- size_t list_no, size_t offset) const;
73
+ virtual const uint8_t* get_single_code(size_t list_no, size_t offset) const;
76
74
 
77
75
  /// prepare the following lists (default does nothing)
78
76
  /// a list can be -1 hence the signed long
79
- virtual void prefetch_lists (const idx_t *list_nos, int nlist) const;
77
+ virtual void prefetch_lists(const idx_t* list_nos, int nlist) const;
80
78
 
81
79
  /*************************
82
80
  * writing functions */
83
81
 
84
82
  /// add one entry to an inverted list
85
- virtual size_t add_entry (size_t list_no, idx_t theid,
86
- const uint8_t *code);
83
+ virtual size_t add_entry(size_t list_no, idx_t theid, const uint8_t* code);
87
84
 
88
- virtual size_t add_entries (
89
- size_t list_no, size_t n_entry,
90
- const idx_t* ids, const uint8_t *code) = 0;
85
+ virtual size_t add_entries(
86
+ size_t list_no,
87
+ size_t n_entry,
88
+ const idx_t* ids,
89
+ const uint8_t* code) = 0;
91
90
 
92
- virtual void update_entry (size_t list_no, size_t offset,
93
- idx_t id, const uint8_t *code);
91
+ virtual void update_entry(
92
+ size_t list_no,
93
+ size_t offset,
94
+ idx_t id,
95
+ const uint8_t* code);
94
96
 
95
- virtual void update_entries (size_t list_no, size_t offset, size_t n_entry,
96
- const idx_t *ids, const uint8_t *code) = 0;
97
+ virtual void update_entries(
98
+ size_t list_no,
99
+ size_t offset,
100
+ size_t n_entry,
101
+ const idx_t* ids,
102
+ const uint8_t* code) = 0;
97
103
 
98
- virtual void resize (size_t list_no, size_t new_size) = 0;
104
+ virtual void resize(size_t list_no, size_t new_size) = 0;
99
105
 
100
- virtual void reset ();
106
+ virtual void reset();
101
107
 
102
108
  /// move all entries from oivf (empty on output)
103
- void merge_from (InvertedLists *oivf, size_t add_id);
109
+ void merge_from(InvertedLists* oivf, size_t add_id);
104
110
 
105
- virtual ~InvertedLists ();
111
+ virtual ~InvertedLists();
106
112
 
107
113
  /*************************
108
114
  * statistics */
109
115
 
110
116
  /// 1= perfectly balanced, >1: imbalanced
111
- double imbalance_factor () const;
117
+ double imbalance_factor() const;
112
118
 
113
119
  /// display some stats about the inverted lists
114
- void print_stats () const;
120
+ void print_stats() const;
115
121
 
116
122
  /// sum up list sizes
117
- size_t compute_ntotal () const;
123
+ size_t compute_ntotal() const;
118
124
 
119
125
  /**************************************
120
126
  * Scoped inverted lists (for automatic deallocation)
@@ -138,71 +144,76 @@ struct InvertedLists {
138
144
  */
139
145
 
140
146
  struct ScopedIds {
141
- const InvertedLists *il;
142
- const idx_t *ids;
147
+ const InvertedLists* il;
148
+ const idx_t* ids;
143
149
  size_t list_no;
144
150
 
145
- ScopedIds (const InvertedLists *il, size_t list_no):
146
- il (il), ids (il->get_ids (list_no)), list_no (list_no)
147
- {}
151
+ ScopedIds(const InvertedLists* il, size_t list_no)
152
+ : il(il), ids(il->get_ids(list_no)), list_no(list_no) {}
148
153
 
149
- const idx_t *get() {return ids; }
154
+ const idx_t* get() {
155
+ return ids;
156
+ }
150
157
 
151
- idx_t operator [] (size_t i) const {
158
+ idx_t operator[](size_t i) const {
152
159
  return ids[i];
153
160
  }
154
161
 
155
- ~ScopedIds () {
156
- il->release_ids (list_no, ids);
162
+ ~ScopedIds() {
163
+ il->release_ids(list_no, ids);
157
164
  }
158
165
  };
159
166
 
160
167
  struct ScopedCodes {
161
- const InvertedLists *il;
162
- const uint8_t *codes;
168
+ const InvertedLists* il;
169
+ const uint8_t* codes;
163
170
  size_t list_no;
164
171
 
165
- ScopedCodes (const InvertedLists *il, size_t list_no):
166
- il (il), codes (il->get_codes (list_no)), list_no (list_no)
167
- {}
172
+ ScopedCodes(const InvertedLists* il, size_t list_no)
173
+ : il(il), codes(il->get_codes(list_no)), list_no(list_no) {}
168
174
 
169
- ScopedCodes (const InvertedLists *il, size_t list_no, size_t offset):
170
- il (il), codes (il->get_single_code (list_no, offset)),
171
- list_no (list_no)
172
- {}
175
+ ScopedCodes(const InvertedLists* il, size_t list_no, size_t offset)
176
+ : il(il),
177
+ codes(il->get_single_code(list_no, offset)),
178
+ list_no(list_no) {}
173
179
 
174
- const uint8_t *get() {return codes; }
180
+ const uint8_t* get() {
181
+ return codes;
182
+ }
175
183
 
176
- ~ScopedCodes () {
177
- il->release_codes (list_no, codes);
184
+ ~ScopedCodes() {
185
+ il->release_codes(list_no, codes);
178
186
  }
179
187
  };
180
-
181
-
182
188
  };
183
189
 
184
-
185
190
  /// simple (default) implementation as an array of inverted lists
186
- struct ArrayInvertedLists: InvertedLists {
187
- std::vector < std::vector<uint8_t> > codes; // binary codes, size nlist
188
- std::vector < std::vector<idx_t> > ids; ///< Inverted lists for indexes
191
+ struct ArrayInvertedLists : InvertedLists {
192
+ std::vector<std::vector<uint8_t>> codes; // binary codes, size nlist
193
+ std::vector<std::vector<idx_t>> ids; ///< Inverted lists for indexes
189
194
 
190
- ArrayInvertedLists (size_t nlist, size_t code_size);
195
+ ArrayInvertedLists(size_t nlist, size_t code_size);
191
196
 
192
197
  size_t list_size(size_t list_no) const override;
193
- const uint8_t * get_codes (size_t list_no) const override;
194
- const idx_t * get_ids (size_t list_no) const override;
198
+ const uint8_t* get_codes(size_t list_no) const override;
199
+ const idx_t* get_ids(size_t list_no) const override;
195
200
 
196
- size_t add_entries (
197
- size_t list_no, size_t n_entry,
198
- const idx_t* ids, const uint8_t *code) override;
201
+ size_t add_entries(
202
+ size_t list_no,
203
+ size_t n_entry,
204
+ const idx_t* ids,
205
+ const uint8_t* code) override;
199
206
 
200
- void update_entries (size_t list_no, size_t offset, size_t n_entry,
201
- const idx_t *ids, const uint8_t *code) override;
207
+ void update_entries(
208
+ size_t list_no,
209
+ size_t offset,
210
+ size_t n_entry,
211
+ const idx_t* ids,
212
+ const uint8_t* code) override;
202
213
 
203
- void resize (size_t list_no, size_t new_size) override;
214
+ void resize(size_t list_no, size_t new_size) override;
204
215
 
205
- ~ArrayInvertedLists () override;
216
+ ~ArrayInvertedLists() override;
206
217
  };
207
218
 
208
219
  /*****************************************************************
@@ -213,154 +224,143 @@ struct ArrayInvertedLists: InvertedLists {
213
224
  *****************************************************************/
214
225
 
215
226
  /// invlists that fail for all write functions
216
- struct ReadOnlyInvertedLists: InvertedLists {
217
-
218
- ReadOnlyInvertedLists (size_t nlist, size_t code_size):
219
- InvertedLists (nlist, code_size) {}
220
-
221
- size_t add_entries (
222
- size_t list_no, size_t n_entry,
223
- const idx_t* ids, const uint8_t *code) override;
224
-
225
- void update_entries (size_t list_no, size_t offset, size_t n_entry,
226
- const idx_t *ids, const uint8_t *code) override;
227
-
228
- void resize (size_t list_no, size_t new_size) override;
229
-
227
+ struct ReadOnlyInvertedLists : InvertedLists {
228
+ ReadOnlyInvertedLists(size_t nlist, size_t code_size)
229
+ : InvertedLists(nlist, code_size) {}
230
+
231
+ size_t add_entries(
232
+ size_t list_no,
233
+ size_t n_entry,
234
+ const idx_t* ids,
235
+ const uint8_t* code) override;
236
+
237
+ void update_entries(
238
+ size_t list_no,
239
+ size_t offset,
240
+ size_t n_entry,
241
+ const idx_t* ids,
242
+ const uint8_t* code) override;
243
+
244
+ void resize(size_t list_no, size_t new_size) override;
230
245
  };
231
246
 
232
-
233
247
  /// Horizontal stack of inverted lists
234
- struct HStackInvertedLists: ReadOnlyInvertedLists {
235
-
236
- std::vector<const InvertedLists *>ils;
248
+ struct HStackInvertedLists : ReadOnlyInvertedLists {
249
+ std::vector<const InvertedLists*> ils;
237
250
 
238
251
  /// build InvertedLists by concatenating nil of them
239
- HStackInvertedLists (int nil, const InvertedLists **ils);
252
+ HStackInvertedLists(int nil, const InvertedLists** ils);
240
253
 
241
254
  size_t list_size(size_t list_no) const override;
242
- const uint8_t * get_codes (size_t list_no) const override;
243
- const idx_t * get_ids (size_t list_no) const override;
244
-
245
- void prefetch_lists (const idx_t *list_nos, int nlist) const override;
255
+ const uint8_t* get_codes(size_t list_no) const override;
256
+ const idx_t* get_ids(size_t list_no) const override;
246
257
 
247
- void release_codes (size_t list_no, const uint8_t *codes) const override;
248
- void release_ids (size_t list_no, const idx_t *ids) const override;
258
+ void prefetch_lists(const idx_t* list_nos, int nlist) const override;
249
259
 
250
- idx_t get_single_id (size_t list_no, size_t offset) const override;
260
+ void release_codes(size_t list_no, const uint8_t* codes) const override;
261
+ void release_ids(size_t list_no, const idx_t* ids) const override;
251
262
 
252
- const uint8_t * get_single_code (
253
- size_t list_no, size_t offset) const override;
263
+ idx_t get_single_id(size_t list_no, size_t offset) const override;
254
264
 
265
+ const uint8_t* get_single_code(size_t list_no, size_t offset)
266
+ const override;
255
267
  };
256
268
 
257
269
  using ConcatenatedInvertedLists = HStackInvertedLists;
258
270
 
259
-
260
271
  /// vertical slice of indexes in another InvertedLists
261
- struct SliceInvertedLists: ReadOnlyInvertedLists {
262
- const InvertedLists *il;
272
+ struct SliceInvertedLists : ReadOnlyInvertedLists {
273
+ const InvertedLists* il;
263
274
  idx_t i0, i1;
264
275
 
265
- SliceInvertedLists(const InvertedLists *il, idx_t i0, idx_t i1);
276
+ SliceInvertedLists(const InvertedLists* il, idx_t i0, idx_t i1);
266
277
 
267
278
  size_t list_size(size_t list_no) const override;
268
- const uint8_t * get_codes (size_t list_no) const override;
269
- const idx_t * get_ids (size_t list_no) const override;
279
+ const uint8_t* get_codes(size_t list_no) const override;
280
+ const idx_t* get_ids(size_t list_no) const override;
270
281
 
271
- void release_codes (size_t list_no, const uint8_t *codes) const override;
272
- void release_ids (size_t list_no, const idx_t *ids) const override;
282
+ void release_codes(size_t list_no, const uint8_t* codes) const override;
283
+ void release_ids(size_t list_no, const idx_t* ids) const override;
273
284
 
274
- idx_t get_single_id (size_t list_no, size_t offset) const override;
285
+ idx_t get_single_id(size_t list_no, size_t offset) const override;
275
286
 
276
- const uint8_t * get_single_code (
277
- size_t list_no, size_t offset) const override;
287
+ const uint8_t* get_single_code(size_t list_no, size_t offset)
288
+ const override;
278
289
 
279
- void prefetch_lists (const idx_t *list_nos, int nlist) const override;
290
+ void prefetch_lists(const idx_t* list_nos, int nlist) const override;
280
291
  };
281
292
 
282
-
283
- struct VStackInvertedLists: ReadOnlyInvertedLists {
284
- std::vector<const InvertedLists *>ils;
293
+ struct VStackInvertedLists : ReadOnlyInvertedLists {
294
+ std::vector<const InvertedLists*> ils;
285
295
  std::vector<idx_t> cumsz;
286
296
 
287
297
  /// build InvertedLists by concatenating nil of them
288
- VStackInvertedLists (int nil, const InvertedLists **ils);
298
+ VStackInvertedLists(int nil, const InvertedLists** ils);
289
299
 
290
300
  size_t list_size(size_t list_no) const override;
291
- const uint8_t * get_codes (size_t list_no) const override;
292
- const idx_t * get_ids (size_t list_no) const override;
301
+ const uint8_t* get_codes(size_t list_no) const override;
302
+ const idx_t* get_ids(size_t list_no) const override;
293
303
 
294
- void release_codes (size_t list_no, const uint8_t *codes) const override;
295
- void release_ids (size_t list_no, const idx_t *ids) const override;
304
+ void release_codes(size_t list_no, const uint8_t* codes) const override;
305
+ void release_ids(size_t list_no, const idx_t* ids) const override;
296
306
 
297
- idx_t get_single_id (size_t list_no, size_t offset) const override;
307
+ idx_t get_single_id(size_t list_no, size_t offset) const override;
298
308
 
299
- const uint8_t * get_single_code (
300
- size_t list_no, size_t offset) const override;
301
-
302
- void prefetch_lists (const idx_t *list_nos, int nlist) const override;
309
+ const uint8_t* get_single_code(size_t list_no, size_t offset)
310
+ const override;
303
311
 
312
+ void prefetch_lists(const idx_t* list_nos, int nlist) const override;
304
313
  };
305
314
 
306
-
307
315
  /** use the first inverted lists if they are non-empty otherwise use the second
308
316
  *
309
317
  * This is useful if il1 has a few inverted lists that are too long,
310
318
  * and that il0 has replacement lists for those, with empty lists for
311
319
  * the others. */
312
- struct MaskedInvertedLists: ReadOnlyInvertedLists {
313
-
314
- const InvertedLists *il0;
315
- const InvertedLists *il1;
320
+ struct MaskedInvertedLists : ReadOnlyInvertedLists {
321
+ const InvertedLists* il0;
322
+ const InvertedLists* il1;
316
323
 
317
- MaskedInvertedLists (const InvertedLists *il0,
318
- const InvertedLists *il1);
324
+ MaskedInvertedLists(const InvertedLists* il0, const InvertedLists* il1);
319
325
 
320
326
  size_t list_size(size_t list_no) const override;
321
- const uint8_t * get_codes (size_t list_no) const override;
322
- const idx_t * get_ids (size_t list_no) const override;
327
+ const uint8_t* get_codes(size_t list_no) const override;
328
+ const idx_t* get_ids(size_t list_no) const override;
323
329
 
324
- void release_codes (size_t list_no, const uint8_t *codes) const override;
325
- void release_ids (size_t list_no, const idx_t *ids) const override;
330
+ void release_codes(size_t list_no, const uint8_t* codes) const override;
331
+ void release_ids(size_t list_no, const idx_t* ids) const override;
326
332
 
327
- idx_t get_single_id (size_t list_no, size_t offset) const override;
333
+ idx_t get_single_id(size_t list_no, size_t offset) const override;
328
334
 
329
- const uint8_t * get_single_code (
330
- size_t list_no, size_t offset) const override;
331
-
332
- void prefetch_lists (const idx_t *list_nos, int nlist) const override;
335
+ const uint8_t* get_single_code(size_t list_no, size_t offset)
336
+ const override;
333
337
 
338
+ void prefetch_lists(const idx_t* list_nos, int nlist) const override;
334
339
  };
335
340
 
336
-
337
341
  /** if the inverted list in il is smaller than maxsize then return it,
338
342
  * otherwise return an empty invlist */
339
- struct StopWordsInvertedLists: ReadOnlyInvertedLists {
340
-
341
- const InvertedLists *il0;
343
+ struct StopWordsInvertedLists : ReadOnlyInvertedLists {
344
+ const InvertedLists* il0;
342
345
  size_t maxsize;
343
346
 
344
- StopWordsInvertedLists (const InvertedLists *il, size_t maxsize);
347
+ StopWordsInvertedLists(const InvertedLists* il, size_t maxsize);
345
348
 
346
349
  size_t list_size(size_t list_no) const override;
347
- const uint8_t * get_codes (size_t list_no) const override;
348
- const idx_t * get_ids (size_t list_no) const override;
350
+ const uint8_t* get_codes(size_t list_no) const override;
351
+ const idx_t* get_ids(size_t list_no) const override;
349
352
 
350
- void release_codes (size_t list_no, const uint8_t *codes) const override;
351
- void release_ids (size_t list_no, const idx_t *ids) const override;
353
+ void release_codes(size_t list_no, const uint8_t* codes) const override;
354
+ void release_ids(size_t list_no, const idx_t* ids) const override;
352
355
 
353
- idx_t get_single_id (size_t list_no, size_t offset) const override;
356
+ idx_t get_single_id(size_t list_no, size_t offset) const override;
354
357
 
355
- const uint8_t * get_single_code (
356
- size_t list_no, size_t offset) const override;
357
-
358
- void prefetch_lists (const idx_t *list_nos, int nlist) const override;
358
+ const uint8_t* get_single_code(size_t list_no, size_t offset)
359
+ const override;
359
360
 
361
+ void prefetch_lists(const idx_t* list_nos, int nlist) const override;
360
362
  };
361
363
 
362
-
363
364
  } // namespace faiss
364
365
 
365
-
366
366
  #endif
@@ -7,9 +7,9 @@
7
7
 
8
8
  #include <faiss/invlists/InvertedListsIOHook.h>
9
9
 
10
+ #include <faiss/impl/FaissAssert.h>
10
11
  #include <faiss/impl/io.h>
11
12
  #include <faiss/impl/io_macros.h>
12
- #include <faiss/impl/FaissAssert.h>
13
13
 
14
14
  #include <faiss/invlists/BlockInvertedLists.h>
15
15
 
@@ -17,24 +17,21 @@
17
17
  #include <faiss/invlists/OnDiskInvertedLists.h>
18
18
  #endif // !_MSC_VER
19
19
 
20
-
21
20
  namespace faiss {
22
21
 
23
-
24
22
  /**********************************************************
25
23
  * InvertedListIOHook's
26
24
  **********************************************************/
27
25
 
28
26
  InvertedListsIOHook::InvertedListsIOHook(
29
- const std::string & key, const std::string & classname):
30
- key(key), classname(classname)
31
- {}
27
+ const std::string& key,
28
+ const std::string& classname)
29
+ : key(key), classname(classname) {}
32
30
 
33
31
  namespace {
34
32
 
35
33
  /// std::vector that deletes its contents
36
- struct IOHookTable: std::vector<InvertedListsIOHook*> {
37
-
34
+ struct IOHookTable : std::vector<InvertedListsIOHook*> {
38
35
  IOHookTable() {
39
36
  #ifndef _MSC_VER
40
37
  push_back(new OnDiskInvertedListsIOHook());
@@ -43,7 +40,7 @@ struct IOHookTable: std::vector<InvertedListsIOHook*> {
43
40
  }
44
41
 
45
42
  ~IOHookTable() {
46
- for (auto x: *this) {
43
+ for (auto x : *this) {
47
44
  delete x;
48
45
  }
49
46
  }
@@ -51,44 +48,41 @@ struct IOHookTable: std::vector<InvertedListsIOHook*> {
51
48
 
52
49
  static IOHookTable InvertedListsIOHook_table;
53
50
 
54
- } // anonymous namepsace
51
+ } // namespace
55
52
 
56
- InvertedListsIOHook* InvertedListsIOHook::lookup(int h)
57
- {
58
- for(const auto & callback: InvertedListsIOHook_table) {
53
+ InvertedListsIOHook* InvertedListsIOHook::lookup(int h) {
54
+ for (const auto& callback : InvertedListsIOHook_table) {
59
55
  if (h == fourcc(callback->key)) {
60
56
  return callback;
61
57
  }
62
58
  }
63
- FAISS_THROW_FMT (
64
- "read_InvertedLists: could not load ArrayInvertedLists as "
65
- "%08x (\"%s\")", h, fourcc_inv_printable(h).c_str()
66
- );
59
+ FAISS_THROW_FMT(
60
+ "read_InvertedLists: could not load ArrayInvertedLists as "
61
+ "%08x (\"%s\")",
62
+ h,
63
+ fourcc_inv_printable(h).c_str());
67
64
  }
68
65
 
69
- InvertedListsIOHook* InvertedListsIOHook::lookup_classname(const std::string & classname)
70
- {
71
- for(const auto & callback: InvertedListsIOHook_table) {
66
+ InvertedListsIOHook* InvertedListsIOHook::lookup_classname(
67
+ const std::string& classname) {
68
+ for (const auto& callback : InvertedListsIOHook_table) {
72
69
  if (callback->classname == classname) {
73
70
  return callback;
74
71
  }
75
72
  }
76
- FAISS_THROW_FMT (
73
+ FAISS_THROW_FMT(
77
74
  "read_InvertedLists: could not find classname %s",
78
- classname.c_str()
79
- );
75
+ classname.c_str());
80
76
  }
81
77
 
82
- void InvertedListsIOHook::add_callback(InvertedListsIOHook *cb)
83
- {
78
+ void InvertedListsIOHook::add_callback(InvertedListsIOHook* cb) {
84
79
  InvertedListsIOHook_table.push_back(cb);
85
80
  }
86
81
 
87
- void InvertedListsIOHook::print_callbacks()
88
- {
82
+ void InvertedListsIOHook::print_callbacks() {
89
83
  printf("registered %zd InvertedListsIOHooks:\n",
90
- InvertedListsIOHook_table.size());
91
- for(const auto & cb: InvertedListsIOHook_table) {
84
+ InvertedListsIOHook_table.size());
85
+ for (const auto& cb : InvertedListsIOHook_table) {
92
86
  printf("%08x %s %s\n",
93
87
  fourcc(cb->key.c_str()),
94
88
  cb->key.c_str(),
@@ -96,11 +90,12 @@ void InvertedListsIOHook::print_callbacks()
96
90
  }
97
91
  }
98
92
 
99
- InvertedLists * InvertedListsIOHook::read_ArrayInvertedLists(
100
- IOReader *, int ,
101
- size_t , size_t ,
102
- const std::vector<size_t> &) const
103
- {
93
+ InvertedLists* InvertedListsIOHook::read_ArrayInvertedLists(
94
+ IOReader*,
95
+ int,
96
+ size_t,
97
+ size_t,
98
+ const std::vector<size_t>&) const {
104
99
  FAISS_THROW_FMT("read to array not implemented for %s", classname.c_str());
105
100
  }
106
101
 
@@ -7,14 +7,12 @@
7
7
 
8
8
  #pragma once
9
9
 
10
- #include <string>
11
- #include <faiss/invlists/InvertedLists.h>
12
10
  #include <faiss/impl/io.h>
13
-
11
+ #include <faiss/invlists/InvertedLists.h>
12
+ #include <string>
14
13
 
15
14
  namespace faiss {
16
15
 
17
-
18
16
  /** Callbacks to handle other types of InvertedList objects.
19
17
  *
20
18
  * The callbacks should be registered with add_callback before calling
@@ -26,38 +24,39 @@ namespace faiss {
26
24
  * - the class name (as given by typeid.name) at write time
27
25
  */
28
26
  struct InvertedListsIOHook {
29
- const std::string key; ///< string version of the fourcc
27
+ const std::string key; ///< string version of the fourcc
30
28
  const std::string classname; ///< typeid.name
31
29
 
32
- InvertedListsIOHook(const std::string & key, const std::string & classname);
30
+ InvertedListsIOHook(const std::string& key, const std::string& classname);
33
31
 
34
32
  /// write the index to the IOWriter (including the fourcc)
35
- virtual void write(const InvertedLists *ils, IOWriter *f) const = 0;
33
+ virtual void write(const InvertedLists* ils, IOWriter* f) const = 0;
36
34
 
37
35
  /// called when the fourcc matches this class's fourcc
38
- virtual InvertedLists * read(IOReader *f, int io_flags) const = 0;
36
+ virtual InvertedLists* read(IOReader* f, int io_flags) const = 0;
39
37
 
40
38
  /** read from a ArrayInvertedLists into this invertedlist type.
41
- * For this to work, the callback has to be enabled and the io_flag has to be set to
42
- * IO_FLAG_SKIP_IVF_DATA | (16 upper bits of the fourcc)
39
+ * For this to work, the callback has to be enabled and the io_flag has to
40
+ * be set to IO_FLAG_SKIP_IVF_DATA | (16 upper bits of the fourcc)
43
41
  *
44
42
  * (default implementation fails)
45
43
  */
46
- virtual InvertedLists * read_ArrayInvertedLists(
47
- IOReader *f, int io_flags,
48
- size_t nlist, size_t code_size,
49
- const std::vector<size_t> &sizes) const;
44
+ virtual InvertedLists* read_ArrayInvertedLists(
45
+ IOReader* f,
46
+ int io_flags,
47
+ size_t nlist,
48
+ size_t code_size,
49
+ const std::vector<size_t>& sizes) const;
50
50
 
51
51
  virtual ~InvertedListsIOHook() {}
52
52
 
53
53
  /**************************** Manage the set of callbacks ******/
54
54
 
55
55
  // transfers ownership
56
- static void add_callback(InvertedListsIOHook *);
56
+ static void add_callback(InvertedListsIOHook*);
57
57
  static void print_callbacks();
58
58
  static InvertedListsIOHook* lookup(int h);
59
- static InvertedListsIOHook* lookup_classname(const std::string & classname);
60
-
59
+ static InvertedListsIOHook* lookup_classname(const std::string& classname);
61
60
  };
62
61
 
63
- } // namespace faiss
62
+ } // namespace faiss