faiss 0.2.4 → 0.2.6

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 (178) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +10 -0
  3. data/LICENSE.txt +1 -1
  4. data/README.md +23 -21
  5. data/ext/faiss/extconf.rb +11 -0
  6. data/ext/faiss/index.cpp +17 -4
  7. data/ext/faiss/index_binary.cpp +6 -6
  8. data/ext/faiss/product_quantizer.cpp +4 -4
  9. data/lib/faiss/version.rb +1 -1
  10. data/vendor/faiss/faiss/AutoTune.cpp +13 -0
  11. data/vendor/faiss/faiss/IVFlib.cpp +101 -2
  12. data/vendor/faiss/faiss/IVFlib.h +26 -2
  13. data/vendor/faiss/faiss/Index.cpp +36 -3
  14. data/vendor/faiss/faiss/Index.h +43 -6
  15. data/vendor/faiss/faiss/Index2Layer.cpp +6 -2
  16. data/vendor/faiss/faiss/Index2Layer.h +6 -1
  17. data/vendor/faiss/faiss/IndexAdditiveQuantizer.cpp +219 -16
  18. data/vendor/faiss/faiss/IndexAdditiveQuantizer.h +63 -5
  19. data/vendor/faiss/faiss/IndexAdditiveQuantizerFastScan.cpp +299 -0
  20. data/vendor/faiss/faiss/IndexAdditiveQuantizerFastScan.h +199 -0
  21. data/vendor/faiss/faiss/IndexBinary.cpp +20 -4
  22. data/vendor/faiss/faiss/IndexBinary.h +18 -3
  23. data/vendor/faiss/faiss/IndexBinaryFlat.cpp +9 -2
  24. data/vendor/faiss/faiss/IndexBinaryFlat.h +4 -2
  25. data/vendor/faiss/faiss/IndexBinaryFromFloat.cpp +4 -1
  26. data/vendor/faiss/faiss/IndexBinaryFromFloat.h +2 -1
  27. data/vendor/faiss/faiss/IndexBinaryHNSW.cpp +5 -1
  28. data/vendor/faiss/faiss/IndexBinaryHNSW.h +2 -1
  29. data/vendor/faiss/faiss/IndexBinaryHash.cpp +17 -4
  30. data/vendor/faiss/faiss/IndexBinaryHash.h +8 -4
  31. data/vendor/faiss/faiss/IndexBinaryIVF.cpp +28 -13
  32. data/vendor/faiss/faiss/IndexBinaryIVF.h +10 -7
  33. data/vendor/faiss/faiss/IndexFastScan.cpp +626 -0
  34. data/vendor/faiss/faiss/IndexFastScan.h +145 -0
  35. data/vendor/faiss/faiss/IndexFlat.cpp +34 -21
  36. data/vendor/faiss/faiss/IndexFlat.h +7 -4
  37. data/vendor/faiss/faiss/IndexFlatCodes.cpp +35 -1
  38. data/vendor/faiss/faiss/IndexFlatCodes.h +12 -0
  39. data/vendor/faiss/faiss/IndexHNSW.cpp +66 -138
  40. data/vendor/faiss/faiss/IndexHNSW.h +4 -2
  41. data/vendor/faiss/faiss/IndexIDMap.cpp +247 -0
  42. data/vendor/faiss/faiss/IndexIDMap.h +107 -0
  43. data/vendor/faiss/faiss/IndexIVF.cpp +121 -33
  44. data/vendor/faiss/faiss/IndexIVF.h +35 -16
  45. data/vendor/faiss/faiss/IndexIVFAdditiveQuantizer.cpp +84 -7
  46. data/vendor/faiss/faiss/IndexIVFAdditiveQuantizer.h +63 -1
  47. data/vendor/faiss/faiss/IndexIVFAdditiveQuantizerFastScan.cpp +590 -0
  48. data/vendor/faiss/faiss/IndexIVFAdditiveQuantizerFastScan.h +171 -0
  49. data/vendor/faiss/faiss/IndexIVFFastScan.cpp +1290 -0
  50. data/vendor/faiss/faiss/IndexIVFFastScan.h +213 -0
  51. data/vendor/faiss/faiss/IndexIVFFlat.cpp +37 -17
  52. data/vendor/faiss/faiss/IndexIVFFlat.h +4 -2
  53. data/vendor/faiss/faiss/IndexIVFPQ.cpp +234 -50
  54. data/vendor/faiss/faiss/IndexIVFPQ.h +5 -1
  55. data/vendor/faiss/faiss/IndexIVFPQFastScan.cpp +23 -852
  56. data/vendor/faiss/faiss/IndexIVFPQFastScan.h +7 -112
  57. data/vendor/faiss/faiss/IndexIVFPQR.cpp +3 -3
  58. data/vendor/faiss/faiss/IndexIVFPQR.h +1 -1
  59. data/vendor/faiss/faiss/IndexIVFSpectralHash.cpp +3 -1
  60. data/vendor/faiss/faiss/IndexIVFSpectralHash.h +2 -1
  61. data/vendor/faiss/faiss/IndexLSH.cpp +4 -2
  62. data/vendor/faiss/faiss/IndexLSH.h +2 -1
  63. data/vendor/faiss/faiss/IndexLattice.cpp +7 -1
  64. data/vendor/faiss/faiss/IndexLattice.h +3 -1
  65. data/vendor/faiss/faiss/IndexNNDescent.cpp +4 -3
  66. data/vendor/faiss/faiss/IndexNNDescent.h +2 -1
  67. data/vendor/faiss/faiss/IndexNSG.cpp +37 -3
  68. data/vendor/faiss/faiss/IndexNSG.h +25 -1
  69. data/vendor/faiss/faiss/IndexPQ.cpp +106 -69
  70. data/vendor/faiss/faiss/IndexPQ.h +19 -5
  71. data/vendor/faiss/faiss/IndexPQFastScan.cpp +15 -450
  72. data/vendor/faiss/faiss/IndexPQFastScan.h +15 -78
  73. data/vendor/faiss/faiss/IndexPreTransform.cpp +47 -8
  74. data/vendor/faiss/faiss/IndexPreTransform.h +15 -3
  75. data/vendor/faiss/faiss/IndexRefine.cpp +8 -4
  76. data/vendor/faiss/faiss/IndexRefine.h +4 -2
  77. data/vendor/faiss/faiss/IndexReplicas.cpp +4 -2
  78. data/vendor/faiss/faiss/IndexReplicas.h +2 -1
  79. data/vendor/faiss/faiss/IndexRowwiseMinMax.cpp +438 -0
  80. data/vendor/faiss/faiss/IndexRowwiseMinMax.h +92 -0
  81. data/vendor/faiss/faiss/IndexScalarQuantizer.cpp +26 -15
  82. data/vendor/faiss/faiss/IndexScalarQuantizer.h +6 -7
  83. data/vendor/faiss/faiss/IndexShards.cpp +4 -1
  84. data/vendor/faiss/faiss/IndexShards.h +2 -1
  85. data/vendor/faiss/faiss/MetaIndexes.cpp +5 -178
  86. data/vendor/faiss/faiss/MetaIndexes.h +3 -81
  87. data/vendor/faiss/faiss/VectorTransform.cpp +43 -0
  88. data/vendor/faiss/faiss/VectorTransform.h +22 -4
  89. data/vendor/faiss/faiss/clone_index.cpp +23 -1
  90. data/vendor/faiss/faiss/clone_index.h +3 -0
  91. data/vendor/faiss/faiss/cppcontrib/SaDecodeKernels.h +300 -0
  92. data/vendor/faiss/faiss/cppcontrib/detail/CoarseBitType.h +24 -0
  93. data/vendor/faiss/faiss/cppcontrib/detail/UintReader.h +195 -0
  94. data/vendor/faiss/faiss/cppcontrib/sa_decode/Level2-avx2-inl.h +2058 -0
  95. data/vendor/faiss/faiss/cppcontrib/sa_decode/Level2-inl.h +408 -0
  96. data/vendor/faiss/faiss/cppcontrib/sa_decode/Level2-neon-inl.h +2147 -0
  97. data/vendor/faiss/faiss/cppcontrib/sa_decode/MinMax-inl.h +460 -0
  98. data/vendor/faiss/faiss/cppcontrib/sa_decode/MinMaxFP16-inl.h +465 -0
  99. data/vendor/faiss/faiss/cppcontrib/sa_decode/PQ-avx2-inl.h +1618 -0
  100. data/vendor/faiss/faiss/cppcontrib/sa_decode/PQ-inl.h +251 -0
  101. data/vendor/faiss/faiss/cppcontrib/sa_decode/PQ-neon-inl.h +1452 -0
  102. data/vendor/faiss/faiss/gpu/GpuAutoTune.cpp +1 -0
  103. data/vendor/faiss/faiss/gpu/GpuCloner.cpp +0 -4
  104. data/vendor/faiss/faiss/gpu/GpuIndex.h +28 -4
  105. data/vendor/faiss/faiss/gpu/GpuIndexBinaryFlat.h +2 -1
  106. data/vendor/faiss/faiss/gpu/GpuIndexFlat.h +10 -8
  107. data/vendor/faiss/faiss/gpu/GpuIndexIVF.h +75 -14
  108. data/vendor/faiss/faiss/gpu/GpuIndexIVFFlat.h +19 -32
  109. data/vendor/faiss/faiss/gpu/GpuIndexIVFPQ.h +22 -31
  110. data/vendor/faiss/faiss/gpu/GpuIndexIVFScalarQuantizer.h +22 -28
  111. data/vendor/faiss/faiss/gpu/GpuResources.cpp +14 -0
  112. data/vendor/faiss/faiss/gpu/GpuResources.h +16 -3
  113. data/vendor/faiss/faiss/gpu/StandardGpuResources.cpp +3 -3
  114. data/vendor/faiss/faiss/gpu/impl/IndexUtils.h +32 -0
  115. data/vendor/faiss/faiss/gpu/test/TestGpuIndexBinaryFlat.cpp +1 -0
  116. data/vendor/faiss/faiss/gpu/test/TestGpuIndexFlat.cpp +311 -75
  117. data/vendor/faiss/faiss/gpu/test/TestUtils.cpp +10 -0
  118. data/vendor/faiss/faiss/gpu/test/TestUtils.h +3 -0
  119. data/vendor/faiss/faiss/gpu/test/demo_ivfpq_indexing_gpu.cpp +2 -2
  120. data/vendor/faiss/faiss/gpu/utils/DeviceUtils.h +5 -4
  121. data/vendor/faiss/faiss/impl/AdditiveQuantizer.cpp +116 -47
  122. data/vendor/faiss/faiss/impl/AdditiveQuantizer.h +44 -13
  123. data/vendor/faiss/faiss/impl/AuxIndexStructures.cpp +0 -54
  124. data/vendor/faiss/faiss/impl/AuxIndexStructures.h +0 -76
  125. data/vendor/faiss/faiss/impl/DistanceComputer.h +64 -0
  126. data/vendor/faiss/faiss/impl/HNSW.cpp +123 -27
  127. data/vendor/faiss/faiss/impl/HNSW.h +19 -16
  128. data/vendor/faiss/faiss/impl/IDSelector.cpp +125 -0
  129. data/vendor/faiss/faiss/impl/IDSelector.h +135 -0
  130. data/vendor/faiss/faiss/impl/LocalSearchQuantizer.cpp +6 -28
  131. data/vendor/faiss/faiss/impl/LocalSearchQuantizer.h +6 -1
  132. data/vendor/faiss/faiss/impl/LookupTableScaler.h +77 -0
  133. data/vendor/faiss/faiss/impl/NNDescent.cpp +1 -0
  134. data/vendor/faiss/faiss/impl/NSG.cpp +1 -1
  135. data/vendor/faiss/faiss/impl/ProductAdditiveQuantizer.cpp +383 -0
  136. data/vendor/faiss/faiss/impl/ProductAdditiveQuantizer.h +154 -0
  137. data/vendor/faiss/faiss/impl/ProductQuantizer.cpp +225 -145
  138. data/vendor/faiss/faiss/impl/ProductQuantizer.h +29 -10
  139. data/vendor/faiss/faiss/impl/Quantizer.h +43 -0
  140. data/vendor/faiss/faiss/impl/ResidualQuantizer.cpp +192 -36
  141. data/vendor/faiss/faiss/impl/ResidualQuantizer.h +40 -20
  142. data/vendor/faiss/faiss/impl/ResultHandler.h +96 -0
  143. data/vendor/faiss/faiss/impl/ScalarQuantizer.cpp +97 -173
  144. data/vendor/faiss/faiss/impl/ScalarQuantizer.h +18 -18
  145. data/vendor/faiss/faiss/impl/index_read.cpp +240 -9
  146. data/vendor/faiss/faiss/impl/index_write.cpp +237 -5
  147. data/vendor/faiss/faiss/impl/kmeans1d.cpp +6 -4
  148. data/vendor/faiss/faiss/impl/pq4_fast_scan.cpp +56 -16
  149. data/vendor/faiss/faiss/impl/pq4_fast_scan.h +25 -8
  150. data/vendor/faiss/faiss/impl/pq4_fast_scan_search_1.cpp +66 -25
  151. data/vendor/faiss/faiss/impl/pq4_fast_scan_search_qbs.cpp +75 -27
  152. data/vendor/faiss/faiss/index_factory.cpp +196 -7
  153. data/vendor/faiss/faiss/index_io.h +5 -0
  154. data/vendor/faiss/faiss/invlists/DirectMap.cpp +1 -0
  155. data/vendor/faiss/faiss/invlists/InvertedLists.cpp +4 -1
  156. data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.cpp +2 -1
  157. data/vendor/faiss/faiss/python/python_callbacks.cpp +27 -0
  158. data/vendor/faiss/faiss/python/python_callbacks.h +15 -0
  159. data/vendor/faiss/faiss/utils/Heap.h +31 -15
  160. data/vendor/faiss/faiss/utils/distances.cpp +380 -56
  161. data/vendor/faiss/faiss/utils/distances.h +113 -15
  162. data/vendor/faiss/faiss/utils/distances_simd.cpp +726 -6
  163. data/vendor/faiss/faiss/utils/extra_distances.cpp +12 -7
  164. data/vendor/faiss/faiss/utils/extra_distances.h +3 -1
  165. data/vendor/faiss/faiss/utils/fp16-fp16c.h +21 -0
  166. data/vendor/faiss/faiss/utils/fp16-inl.h +101 -0
  167. data/vendor/faiss/faiss/utils/fp16.h +11 -0
  168. data/vendor/faiss/faiss/utils/hamming-inl.h +54 -0
  169. data/vendor/faiss/faiss/utils/hamming.cpp +0 -48
  170. data/vendor/faiss/faiss/utils/ordered_key_value.h +10 -0
  171. data/vendor/faiss/faiss/utils/quantize_lut.cpp +62 -0
  172. data/vendor/faiss/faiss/utils/quantize_lut.h +20 -0
  173. data/vendor/faiss/faiss/utils/random.cpp +53 -0
  174. data/vendor/faiss/faiss/utils/random.h +5 -0
  175. data/vendor/faiss/faiss/utils/simdlib_avx2.h +4 -0
  176. data/vendor/faiss/faiss/utils/simdlib_emulated.h +6 -1
  177. data/vendor/faiss/faiss/utils/simdlib_neon.h +7 -2
  178. metadata +37 -3
@@ -12,6 +12,7 @@
12
12
  #include <cinttypes>
13
13
  #include <cstdio>
14
14
  #include <memory>
15
+ #include <unordered_set>
15
16
 
16
17
  #include <faiss/utils/hamming.h>
17
18
  #include <faiss/utils/utils.h>
@@ -216,7 +217,10 @@ void IndexBinaryHash::range_search(
216
217
  idx_t n,
217
218
  const uint8_t* x,
218
219
  int radius,
219
- RangeSearchResult* result) const {
220
+ RangeSearchResult* result,
221
+ const SearchParameters* params) const {
222
+ FAISS_THROW_IF_NOT_MSG(
223
+ !params, "search params not supported for this index");
220
224
  size_t nlist = 0, ndis = 0, n0 = 0;
221
225
 
222
226
  #pragma omp parallel if (n > 100) reduction(+ : ndis, n0, nlist)
@@ -244,7 +248,10 @@ void IndexBinaryHash::search(
244
248
  const uint8_t* x,
245
249
  idx_t k,
246
250
  int32_t* distances,
247
- idx_t* labels) const {
251
+ idx_t* labels,
252
+ const SearchParameters* params) const {
253
+ FAISS_THROW_IF_NOT_MSG(
254
+ !params, "search params not supported for this index");
248
255
  FAISS_THROW_IF_NOT(k > 0);
249
256
 
250
257
  using HeapForL2 = CMax<int32_t, idx_t>;
@@ -431,7 +438,10 @@ void IndexBinaryMultiHash::range_search(
431
438
  idx_t n,
432
439
  const uint8_t* x,
433
440
  int radius,
434
- RangeSearchResult* result) const {
441
+ RangeSearchResult* result,
442
+ const SearchParameters* params) const {
443
+ FAISS_THROW_IF_NOT_MSG(
444
+ !params, "search params not supported for this index");
435
445
  size_t nlist = 0, ndis = 0, n0 = 0;
436
446
 
437
447
  #pragma omp parallel if (n > 100) reduction(+ : ndis, n0, nlist)
@@ -459,7 +469,10 @@ void IndexBinaryMultiHash::search(
459
469
  const uint8_t* x,
460
470
  idx_t k,
461
471
  int32_t* distances,
462
- idx_t* labels) const {
472
+ idx_t* labels,
473
+ const SearchParameters* params) const {
474
+ FAISS_THROW_IF_NOT_MSG(
475
+ !params, "search params not supported for this index");
463
476
  FAISS_THROW_IF_NOT(k > 0);
464
477
 
465
478
  using HeapForL2 = CMax<int32_t, idx_t>;
@@ -50,14 +50,16 @@ struct IndexBinaryHash : IndexBinary {
50
50
  idx_t n,
51
51
  const uint8_t* x,
52
52
  int radius,
53
- RangeSearchResult* result) const override;
53
+ RangeSearchResult* result,
54
+ const SearchParameters* params = nullptr) const override;
54
55
 
55
56
  void search(
56
57
  idx_t n,
57
58
  const uint8_t* x,
58
59
  idx_t k,
59
60
  int32_t* distances,
60
- idx_t* labels) const override;
61
+ idx_t* labels,
62
+ const SearchParameters* params = nullptr) const override;
61
63
 
62
64
  void display() const;
63
65
  size_t hashtable_size() const;
@@ -107,14 +109,16 @@ struct IndexBinaryMultiHash : IndexBinary {
107
109
  idx_t n,
108
110
  const uint8_t* x,
109
111
  int radius,
110
- RangeSearchResult* result) const override;
112
+ RangeSearchResult* result,
113
+ const SearchParameters* params = nullptr) const override;
111
114
 
112
115
  void search(
113
116
  idx_t n,
114
117
  const uint8_t* x,
115
118
  idx_t k,
116
119
  int32_t* distances,
117
- idx_t* labels) const override;
120
+ idx_t* labels,
121
+ const SearchParameters* params = nullptr) const override;
118
122
 
119
123
  size_t hashtable_size() const;
120
124
  };
@@ -125,7 +125,10 @@ void IndexBinaryIVF::search(
125
125
  const uint8_t* x,
126
126
  idx_t k,
127
127
  int32_t* distances,
128
- idx_t* labels) const {
128
+ idx_t* labels,
129
+ const SearchParameters* params) const {
130
+ FAISS_THROW_IF_NOT_MSG(
131
+ !params, "search params not supported for this index");
129
132
  FAISS_THROW_IF_NOT(k > 0);
130
133
  FAISS_THROW_IF_NOT(nprobe > 0);
131
134
 
@@ -175,7 +178,10 @@ void IndexBinaryIVF::search_and_reconstruct(
175
178
  idx_t k,
176
179
  int32_t* distances,
177
180
  idx_t* labels,
178
- uint8_t* recons) const {
181
+ uint8_t* recons,
182
+ const SearchParameters* params) const {
183
+ FAISS_THROW_IF_NOT_MSG(
184
+ !params, "search params not supported for this index");
179
185
  const size_t nprobe = std::min(nlist, this->nprobe);
180
186
  FAISS_THROW_IF_NOT(k > 0);
181
187
  FAISS_THROW_IF_NOT(nprobe > 0);
@@ -279,22 +285,28 @@ void IndexBinaryIVF::train(idx_t n, const uint8_t* x) {
279
285
  is_trained = true;
280
286
  }
281
287
 
282
- void IndexBinaryIVF::merge_from(IndexBinaryIVF& other, idx_t add_id) {
283
- // minimal sanity checks
284
- FAISS_THROW_IF_NOT(other.d == d);
285
- FAISS_THROW_IF_NOT(other.nlist == nlist);
286
- FAISS_THROW_IF_NOT(other.code_size == code_size);
288
+ void IndexBinaryIVF::check_compatible_for_merge(
289
+ const IndexBinary& otherIndex) const {
290
+ auto other = dynamic_cast<const IndexBinaryIVF*>(&otherIndex);
291
+ FAISS_THROW_IF_NOT(other);
292
+ FAISS_THROW_IF_NOT(other->d == d);
293
+ FAISS_THROW_IF_NOT(other->nlist == nlist);
294
+ FAISS_THROW_IF_NOT(other->code_size == code_size);
287
295
  FAISS_THROW_IF_NOT_MSG(
288
- direct_map.no() && other.direct_map.no(),
296
+ direct_map.no() && other->direct_map.no(),
289
297
  "direct map copy not implemented");
290
298
  FAISS_THROW_IF_NOT_MSG(
291
299
  typeid(*this) == typeid(other),
292
300
  "can only merge indexes of the same type");
301
+ }
293
302
 
294
- invlists->merge_from(other.invlists, add_id);
295
-
296
- ntotal += other.ntotal;
297
- other.ntotal = 0;
303
+ void IndexBinaryIVF::merge_from(IndexBinary& otherIndex, idx_t add_id) {
304
+ // minimal sanity checks
305
+ check_compatible_for_merge(otherIndex);
306
+ auto other = static_cast<IndexBinaryIVF*>(&otherIndex);
307
+ invlists->merge_from(other->invlists, add_id);
308
+ ntotal += other->ntotal;
309
+ other->ntotal = 0;
298
310
  }
299
311
 
300
312
  void IndexBinaryIVF::replace_invlists(InvertedLists* il, bool own) {
@@ -650,7 +662,10 @@ void IndexBinaryIVF::range_search(
650
662
  idx_t n,
651
663
  const uint8_t* x,
652
664
  int radius,
653
- RangeSearchResult* res) const {
665
+ RangeSearchResult* res,
666
+ const SearchParameters* params) const {
667
+ FAISS_THROW_IF_NOT_MSG(
668
+ !params, "search params not supported for this index");
654
669
  const size_t nprobe = std::min(nlist, this->nprobe);
655
670
  std::unique_ptr<idx_t[]> idx(new idx_t[n * nprobe]);
656
671
  std::unique_ptr<int32_t[]> coarse_dis(new int32_t[n * nprobe]);
@@ -123,13 +123,15 @@ struct IndexBinaryIVF : IndexBinary {
123
123
  const uint8_t* x,
124
124
  idx_t k,
125
125
  int32_t* distances,
126
- idx_t* labels) const override;
126
+ idx_t* labels,
127
+ const SearchParameters* params = nullptr) const override;
127
128
 
128
129
  void range_search(
129
130
  idx_t n,
130
131
  const uint8_t* x,
131
132
  int radius,
132
- RangeSearchResult* result) const override;
133
+ RangeSearchResult* result,
134
+ const SearchParameters* params = nullptr) const override;
133
135
 
134
136
  void range_search_preassigned(
135
137
  idx_t n,
@@ -167,7 +169,8 @@ struct IndexBinaryIVF : IndexBinary {
167
169
  idx_t k,
168
170
  int32_t* distances,
169
171
  idx_t* labels,
170
- uint8_t* recons) const override;
172
+ uint8_t* recons,
173
+ const SearchParameters* params = nullptr) const override;
171
174
 
172
175
  /** Reconstruct a vector given the location in terms of (inv list index +
173
176
  * inv list offset) instead of the id.
@@ -184,10 +187,10 @@ struct IndexBinaryIVF : IndexBinary {
184
187
  /// Dataset manipulation functions
185
188
  size_t remove_ids(const IDSelector& sel) override;
186
189
 
187
- /** moves the entries from another dataset to self. On output,
188
- * other is empty. add_id is added to all moved ids (for
189
- * sequential ids, this would be this->ntotal */
190
- virtual void merge_from(IndexBinaryIVF& other, idx_t add_id);
190
+ void merge_from(IndexBinary& other, idx_t add_id) override;
191
+
192
+ void check_compatible_for_merge(
193
+ const IndexBinary& otherIndex) const override;
191
194
 
192
195
  size_t get_list_size(size_t list_no) const {
193
196
  return invlists->list_size(list_no);