faiss 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (77) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/LICENSE.txt +18 -18
  4. data/README.md +1 -1
  5. data/lib/faiss/version.rb +1 -1
  6. data/vendor/faiss/Clustering.cpp +318 -53
  7. data/vendor/faiss/Clustering.h +39 -11
  8. data/vendor/faiss/DirectMap.cpp +267 -0
  9. data/vendor/faiss/DirectMap.h +120 -0
  10. data/vendor/faiss/IVFlib.cpp +24 -4
  11. data/vendor/faiss/IVFlib.h +4 -0
  12. data/vendor/faiss/Index.h +5 -24
  13. data/vendor/faiss/Index2Layer.cpp +0 -1
  14. data/vendor/faiss/IndexBinary.h +7 -3
  15. data/vendor/faiss/IndexBinaryFlat.cpp +5 -0
  16. data/vendor/faiss/IndexBinaryFlat.h +3 -0
  17. data/vendor/faiss/IndexBinaryHash.cpp +492 -0
  18. data/vendor/faiss/IndexBinaryHash.h +116 -0
  19. data/vendor/faiss/IndexBinaryIVF.cpp +160 -107
  20. data/vendor/faiss/IndexBinaryIVF.h +14 -4
  21. data/vendor/faiss/IndexFlat.h +2 -1
  22. data/vendor/faiss/IndexHNSW.cpp +68 -16
  23. data/vendor/faiss/IndexHNSW.h +3 -3
  24. data/vendor/faiss/IndexIVF.cpp +72 -76
  25. data/vendor/faiss/IndexIVF.h +24 -5
  26. data/vendor/faiss/IndexIVFFlat.cpp +19 -54
  27. data/vendor/faiss/IndexIVFFlat.h +1 -11
  28. data/vendor/faiss/IndexIVFPQ.cpp +49 -26
  29. data/vendor/faiss/IndexIVFPQ.h +9 -10
  30. data/vendor/faiss/IndexIVFPQR.cpp +2 -2
  31. data/vendor/faiss/IndexIVFSpectralHash.cpp +2 -2
  32. data/vendor/faiss/IndexLSH.h +4 -1
  33. data/vendor/faiss/IndexPreTransform.cpp +0 -1
  34. data/vendor/faiss/IndexScalarQuantizer.cpp +8 -1
  35. data/vendor/faiss/InvertedLists.cpp +0 -2
  36. data/vendor/faiss/MetaIndexes.cpp +0 -1
  37. data/vendor/faiss/MetricType.h +36 -0
  38. data/vendor/faiss/c_api/Clustering_c.cpp +13 -7
  39. data/vendor/faiss/c_api/Clustering_c.h +11 -5
  40. data/vendor/faiss/c_api/IndexIVF_c.cpp +7 -0
  41. data/vendor/faiss/c_api/IndexIVF_c.h +7 -0
  42. data/vendor/faiss/c_api/IndexPreTransform_c.cpp +21 -0
  43. data/vendor/faiss/c_api/IndexPreTransform_c.h +32 -0
  44. data/vendor/faiss/demos/demo_weighted_kmeans.cpp +185 -0
  45. data/vendor/faiss/gpu/GpuCloner.cpp +4 -0
  46. data/vendor/faiss/gpu/GpuClonerOptions.cpp +1 -1
  47. data/vendor/faiss/gpu/GpuDistance.h +93 -0
  48. data/vendor/faiss/gpu/GpuIndex.h +7 -0
  49. data/vendor/faiss/gpu/GpuIndexFlat.h +0 -10
  50. data/vendor/faiss/gpu/GpuIndexIVF.h +1 -0
  51. data/vendor/faiss/gpu/StandardGpuResources.cpp +8 -0
  52. data/vendor/faiss/gpu/test/TestGpuIndexFlat.cpp +49 -27
  53. data/vendor/faiss/gpu/test/TestGpuIndexIVFPQ.cpp +110 -2
  54. data/vendor/faiss/gpu/utils/DeviceUtils.h +6 -0
  55. data/vendor/faiss/impl/AuxIndexStructures.cpp +17 -0
  56. data/vendor/faiss/impl/AuxIndexStructures.h +14 -3
  57. data/vendor/faiss/impl/HNSW.cpp +0 -1
  58. data/vendor/faiss/impl/PolysemousTraining.h +5 -5
  59. data/vendor/faiss/impl/ProductQuantizer-inl.h +138 -0
  60. data/vendor/faiss/impl/ProductQuantizer.cpp +1 -113
  61. data/vendor/faiss/impl/ProductQuantizer.h +42 -47
  62. data/vendor/faiss/impl/index_read.cpp +103 -7
  63. data/vendor/faiss/impl/index_write.cpp +101 -5
  64. data/vendor/faiss/impl/io.cpp +111 -1
  65. data/vendor/faiss/impl/io.h +38 -0
  66. data/vendor/faiss/index_factory.cpp +0 -1
  67. data/vendor/faiss/tests/test_merge.cpp +0 -1
  68. data/vendor/faiss/tests/test_pq_encoding.cpp +6 -6
  69. data/vendor/faiss/tutorial/cpp/5-Multiple-GPUs.cpp +1 -0
  70. data/vendor/faiss/utils/distances.cpp +4 -5
  71. data/vendor/faiss/utils/distances_simd.cpp +0 -1
  72. data/vendor/faiss/utils/hamming.cpp +85 -3
  73. data/vendor/faiss/utils/hamming.h +20 -0
  74. data/vendor/faiss/utils/utils.cpp +0 -96
  75. data/vendor/faiss/utils/utils.h +0 -15
  76. metadata +11 -3
  77. data/lib/faiss/ext.bundle +0 -0
@@ -14,7 +14,6 @@
14
14
  #include <faiss/AutoTune.h>
15
15
 
16
16
  #include <cmath>
17
- #include <stdarg.h> /* va_list, va_start, va_arg, va_end */
18
17
 
19
18
 
20
19
  #include <faiss/impl/FaissAssert.h>
@@ -14,7 +14,6 @@
14
14
  #include <faiss/IndexIVFPQ.h>
15
15
  #include <faiss/IndexFlat.h>
16
16
  #include <faiss/MetaIndexes.h>
17
- #include <faiss/impl/FaissAssert.h>
18
17
  #include <faiss/IndexPreTransform.h>
19
18
  #include <faiss/OnDiskInvertedLists.h>
20
19
  #include <faiss/IVFlib.h>
@@ -45,13 +45,13 @@ TEST(PQEncoderGeneric, encode) {
45
45
 
46
46
  // NOTE(hoss): Necessary scope to ensure trailing bits are flushed to mem.
47
47
  {
48
- faiss::ProductQuantizer::PQEncoderGeneric encoder(codes.get(), nbits);
48
+ faiss::PQEncoderGeneric encoder(codes.get(), nbits);
49
49
  for (const auto& v : values) {
50
50
  encoder.encode(v & mask);
51
51
  }
52
52
  }
53
53
 
54
- faiss::ProductQuantizer::PQDecoderGeneric decoder(codes.get(), nbits);
54
+ faiss::PQDecoderGeneric decoder(codes.get(), nbits);
55
55
  for (int i = 0; i < nsubcodes; ++i) {
56
56
  uint64_t v = decoder.decode();
57
57
  EXPECT_EQ(values[i] & mask, v);
@@ -66,12 +66,12 @@ TEST(PQEncoder8, encode) {
66
66
  const uint64_t mask = 0xFF;
67
67
  std::unique_ptr<uint8_t[]> codes(new uint8_t[nsubcodes]);
68
68
 
69
- faiss::ProductQuantizer::PQEncoder8 encoder(codes.get(), 8);
69
+ faiss::PQEncoder8 encoder(codes.get(), 8);
70
70
  for (const auto& v : values) {
71
71
  encoder.encode(v & mask);
72
72
  }
73
73
 
74
- faiss::ProductQuantizer::PQDecoder8 decoder(codes.get(), 8);
74
+ faiss::PQDecoder8 decoder(codes.get(), 8);
75
75
  for (int i = 0; i < nsubcodes; ++i) {
76
76
  uint64_t v = decoder.decode();
77
77
  EXPECT_EQ(values[i] & mask, v);
@@ -85,12 +85,12 @@ TEST(PQEncoder16, encode) {
85
85
  const uint64_t mask = 0xFFFF;
86
86
  std::unique_ptr<uint8_t[]> codes(new uint8_t[2 * nsubcodes]);
87
87
 
88
- faiss::ProductQuantizer::PQEncoder16 encoder(codes.get(), 16);
88
+ faiss::PQEncoder16 encoder(codes.get(), 16);
89
89
  for (const auto& v : values) {
90
90
  encoder.encode(v & mask);
91
91
  }
92
92
 
93
- faiss::ProductQuantizer::PQDecoder16 decoder(codes.get(), 16);
93
+ faiss::PQDecoder16 decoder(codes.get(), 16);
94
94
  for (int i = 0; i < nsubcodes; ++i) {
95
95
  uint64_t v = decoder.decode();
96
96
  EXPECT_EQ(values[i] & mask, v);
@@ -10,6 +10,7 @@
10
10
 
11
11
  #include <faiss/IndexFlat.h>
12
12
  #include <faiss/gpu/GpuAutoTune.h>
13
+ #include <faiss/gpu/GpuCloner.h>
13
14
  #include <faiss/gpu/GpuIndexFlat.h>
14
15
  #include <faiss/gpu/StandardGpuResources.h>
15
16
  #include <faiss/gpu/utils/DeviceUtils.h>
@@ -359,7 +359,7 @@ void knn_inner_product (const float * x,
359
359
  size_t d, size_t nx, size_t ny,
360
360
  float_minheap_array_t * res)
361
361
  {
362
- if (d % 4 == 0 && nx < distance_compute_blas_threshold) {
362
+ if (nx < distance_compute_blas_threshold) {
363
363
  knn_inner_product_sse (x, y, d, nx, ny, res);
364
364
  } else {
365
365
  knn_inner_product_blas (x, y, d, nx, ny, res);
@@ -379,7 +379,7 @@ void knn_L2sqr (const float * x,
379
379
  size_t d, size_t nx, size_t ny,
380
380
  float_maxheap_array_t * res)
381
381
  {
382
- if (d % 4 == 0 && nx < distance_compute_blas_threshold) {
382
+ if (nx < distance_compute_blas_threshold) {
383
383
  knn_L2sqr_sse (x, y, d, nx, ny, res);
384
384
  } else {
385
385
  NopDistanceCorrection nop;
@@ -643,7 +643,6 @@ static void range_search_sse (const float * x,
643
643
  float radius,
644
644
  RangeSearchResult *res)
645
645
  {
646
- FAISS_THROW_IF_NOT (d % 4 == 0);
647
646
 
648
647
  #pragma omp parallel
649
648
  {
@@ -693,7 +692,7 @@ void range_search_L2sqr (
693
692
  RangeSearchResult *res)
694
693
  {
695
694
 
696
- if (d % 4 == 0 && nx < distance_compute_blas_threshold) {
695
+ if (nx < distance_compute_blas_threshold) {
697
696
  range_search_sse<true> (x, y, d, nx, ny, radius, res);
698
697
  } else {
699
698
  range_search_blas<true> (x, y, d, nx, ny, radius, res);
@@ -708,7 +707,7 @@ void range_search_inner_product (
708
707
  RangeSearchResult *res)
709
708
  {
710
709
 
711
- if (d % 4 == 0 && nx < distance_compute_blas_threshold) {
710
+ if (nx < distance_compute_blas_threshold) {
712
711
  range_search_sse<false> (x, y, d, nx, ny, radius, res);
713
712
  } else {
714
713
  range_search_blas<false> (x, y, d, nx, ny, radius, res);
@@ -22,7 +22,6 @@
22
22
  #include <arm_neon.h>
23
23
  #endif
24
24
 
25
- #include <omp.h>
26
25
 
27
26
  namespace faiss {
28
27
 
@@ -28,15 +28,13 @@
28
28
 
29
29
  #include <vector>
30
30
  #include <memory>
31
- #include <stdlib.h>
32
31
  #include <stdio.h>
33
32
  #include <math.h>
34
- #include <assert.h>
35
- #include <limits.h>
36
33
 
37
34
  #include <faiss/utils/Heap.h>
38
35
  #include <faiss/impl/FaissAssert.h>
39
36
  #include <faiss/utils/utils.h>
37
+ #include <faiss/impl/AuxIndexStructures.h>
40
38
 
41
39
  static const size_t BLOCKSIZE_QUERY = 8192;
42
40
 
@@ -487,6 +485,30 @@ void bitvec_print (const uint8_t * b, size_t d)
487
485
  }
488
486
 
489
487
 
488
+ void bitvec_shuffle (size_t n, size_t da, size_t db,
489
+ const int *order,
490
+ const uint8_t *a,
491
+ uint8_t *b)
492
+ {
493
+ for(size_t i = 0; i < db; i++) {
494
+ FAISS_THROW_IF_NOT (order[i] >= 0 && order[i] < da);
495
+ }
496
+ size_t lda = (da + 7) / 8;
497
+ size_t ldb = (db + 7) / 8;
498
+
499
+ #pragma omp parallel for if(n > 10000)
500
+ for (size_t i = 0; i < n; i++) {
501
+ const uint8_t *ai = a + i * lda;
502
+ uint8_t *bi = b + i * ldb;
503
+ memset (bi, 0, ldb);
504
+ for(size_t i = 0; i < db; i++) {
505
+ int o = order[i];
506
+ uint8_t the_bit = (ai[o >> 3] >> (o & 7)) & 1;
507
+ bi[i >> 3] |= the_bit << (i & 7);
508
+ }
509
+ }
510
+
511
+ }
490
512
 
491
513
 
492
514
 
@@ -530,6 +552,7 @@ void hammings_knn(
530
552
  {
531
553
  hammings_knn_hc(ha, a, b, nb, ncodes, order);
532
554
  }
555
+
533
556
  void hammings_knn_hc (
534
557
  int_maxheap_array_t * ha,
535
558
  const uint8_t * a,
@@ -613,7 +636,66 @@ void hammings_knn_mc(
613
636
  }
614
637
  }
615
638
  }
639
+ template <class HammingComputer>
640
+ static
641
+ void hamming_range_search_template (
642
+ const uint8_t * a,
643
+ const uint8_t * b,
644
+ size_t na,
645
+ size_t nb,
646
+ int radius,
647
+ size_t code_size,
648
+ RangeSearchResult *res)
649
+ {
616
650
 
651
+ #pragma omp parallel
652
+ {
653
+ RangeSearchPartialResult pres (res);
654
+
655
+ #pragma omp for
656
+ for (size_t i = 0; i < na; i++) {
657
+ HammingComputer hc (a + i * code_size, code_size);
658
+ const uint8_t * yi = b;
659
+ RangeQueryResult & qres = pres.new_result (i);
660
+
661
+ for (size_t j = 0; j < nb; j++) {
662
+ int dis = hc.hamming (yi);
663
+ if (dis < radius) {
664
+ qres.add(dis, j);
665
+ }
666
+ yi += code_size;
667
+ }
668
+ }
669
+ pres.finalize ();
670
+ }
671
+ }
672
+
673
+ void hamming_range_search (
674
+ const uint8_t * a,
675
+ const uint8_t * b,
676
+ size_t na,
677
+ size_t nb,
678
+ int radius,
679
+ size_t code_size,
680
+ RangeSearchResult *result)
681
+ {
682
+
683
+ #define HC(name) hamming_range_search_template<name> (a, b, na, nb, radius, code_size, result)
684
+
685
+ switch(code_size) {
686
+ case 4: HC(HammingComputer4); break;
687
+ case 8: HC(HammingComputer8); break;
688
+ case 16: HC(HammingComputer16); break;
689
+ case 32: HC(HammingComputer32); break;
690
+ default:
691
+ if (code_size % 8 == 0) {
692
+ HC(HammingComputerM8);
693
+ } else {
694
+ HC(HammingComputerDefault);
695
+ }
696
+ }
697
+ #undef HC
698
+ }
617
699
 
618
700
 
619
701
 
@@ -39,6 +39,7 @@ namespace faiss {
39
39
  * General bit vector functions
40
40
  **************************************************/
41
41
 
42
+ struct RangeSearchResult;
42
43
 
43
44
  void bitvec_print (const uint8_t * b, size_t d);
44
45
 
@@ -65,6 +66,14 @@ void bitvecs2fvecs (
65
66
 
66
67
  void fvec2bitvec (const float * x, uint8_t * b, size_t d);
67
68
 
69
+ /** Shuffle the bits from b(i, j) := a(i, order[j])
70
+ */
71
+ void bitvec_shuffle (size_t n, size_t da, size_t db,
72
+ const int *order,
73
+ const uint8_t *a,
74
+ uint8_t *b);
75
+
76
+
68
77
  /***********************************************
69
78
  * Generic reader/writer for bit strings
70
79
  ***********************************************/
@@ -171,6 +180,17 @@ void hammings_knn_mc (
171
180
  int32_t *distances,
172
181
  int64_t *labels);
173
182
 
183
+ /** same as hammings_knn except we are doing a range search with radius */
184
+ void hamming_range_search (
185
+ const uint8_t * a,
186
+ const uint8_t * b,
187
+ size_t na,
188
+ size_t nb,
189
+ int radius,
190
+ size_t ncodes,
191
+ RangeSearchResult *result);
192
+
193
+
174
194
  /* Counting the number of matches or of cross-matches (without returning them)
175
195
  For use with function that assume pre-allocated memory */
176
196
  void hamming_count_thres (
@@ -214,102 +214,6 @@ void matrix_qr (int m, int n, float *a)
214
214
  }
215
215
 
216
216
 
217
- /***************************************************************************
218
- * Kmeans subroutine
219
- ***************************************************************************/
220
-
221
- // a bit above machine epsilon for float16
222
-
223
- #define EPS (1 / 1024.)
224
-
225
- /* For k-means, compute centroids given assignment of vectors to centroids */
226
- int km_update_centroids (const float * x,
227
- float * centroids,
228
- int64_t * assign,
229
- size_t d, size_t k, size_t n,
230
- size_t k_frozen)
231
- {
232
- k -= k_frozen;
233
- centroids += k_frozen * d;
234
-
235
- std::vector<size_t> hassign(k);
236
- memset (centroids, 0, sizeof(*centroids) * d * k);
237
-
238
- #pragma omp parallel
239
- {
240
- int nt = omp_get_num_threads();
241
- int rank = omp_get_thread_num();
242
- // this thread is taking care of centroids c0:c1
243
- size_t c0 = (k * rank) / nt;
244
- size_t c1 = (k * (rank + 1)) / nt;
245
- const float *xi = x;
246
- size_t nacc = 0;
247
-
248
- for (size_t i = 0; i < n; i++) {
249
- int64_t ci = assign[i];
250
- assert (ci >= 0 && ci < k + k_frozen);
251
- ci -= k_frozen;
252
- if (ci >= c0 && ci < c1) {
253
- float * c = centroids + ci * d;
254
- hassign[ci]++;
255
- for (size_t j = 0; j < d; j++)
256
- c[j] += xi[j];
257
- nacc++;
258
- }
259
- xi += d;
260
- }
261
-
262
- }
263
-
264
- #pragma omp parallel for
265
- for (size_t ci = 0; ci < k; ci++) {
266
- float * c = centroids + ci * d;
267
- float ni = (float) hassign[ci];
268
- if (ni != 0) {
269
- for (size_t j = 0; j < d; j++)
270
- c[j] /= ni;
271
- }
272
- }
273
-
274
- /* Take care of void clusters */
275
- size_t nsplit = 0;
276
- RandomGenerator rng (1234);
277
- for (size_t ci = 0; ci < k; ci++) {
278
- if (hassign[ci] == 0) { /* need to redefine a centroid */
279
- size_t cj;
280
- for (cj = 0; 1; cj = (cj + 1) % k) {
281
- /* probability to pick this cluster for split */
282
- float p = (hassign[cj] - 1.0) / (float) (n - k);
283
- float r = rng.rand_float ();
284
- if (r < p) {
285
- break; /* found our cluster to be split */
286
- }
287
- }
288
- memcpy (centroids+ci*d, centroids+cj*d, sizeof(*centroids) * d);
289
-
290
- /* small symmetric pertubation. Much better than */
291
- for (size_t j = 0; j < d; j++) {
292
- if (j % 2 == 0) {
293
- centroids[ci * d + j] *= 1 + EPS;
294
- centroids[cj * d + j] *= 1 - EPS;
295
- } else {
296
- centroids[ci * d + j] *= 1 - EPS;
297
- centroids[cj * d + j] *= 1 + EPS;
298
- }
299
- }
300
-
301
- /* assume even split of the cluster */
302
- hassign[ci] = hassign[cj] / 2;
303
- hassign[cj] -= hassign[ci];
304
- nsplit++;
305
- }
306
- }
307
-
308
- return nsplit;
309
- }
310
-
311
- #undef EPS
312
-
313
217
 
314
218
 
315
219
  /***************************************************************************
@@ -65,21 +65,6 @@ int fvec_madd_and_argmin (size_t n, const float *a,
65
65
  void reflection (const float * u, float * x, size_t n, size_t d, size_t nu);
66
66
 
67
67
 
68
- /** For k-means: update stage.
69
- *
70
- * @param x training vectors, size n * d
71
- * @param centroids centroid vectors, size k * d
72
- * @param assign nearest centroid for each training vector, size n
73
- * @param k_frozen do not update the k_frozen first centroids
74
- * @return nb of spliting operations to fight empty clusters
75
- */
76
- int km_update_centroids (
77
- const float * x,
78
- float * centroids,
79
- int64_t * assign,
80
- size_t d, size_t k, size_t n,
81
- size_t k_frozen);
82
-
83
68
  /** compute the Q of the QR decomposition for m > n
84
69
  * @param a size n * m: input matrix and output Q
85
70
  */
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: faiss
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-03-09 00:00:00.000000000 Z
11
+ date: 2020-08-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rice
@@ -107,7 +107,6 @@ files:
107
107
  - ext/faiss/ext.cpp
108
108
  - ext/faiss/extconf.rb
109
109
  - lib/faiss.rb
110
- - lib/faiss/ext.bundle
111
110
  - lib/faiss/index.rb
112
111
  - lib/faiss/index_binary.rb
113
112
  - lib/faiss/kmeans.rb
@@ -118,6 +117,8 @@ files:
118
117
  - vendor/faiss/AutoTune.h
119
118
  - vendor/faiss/Clustering.cpp
120
119
  - vendor/faiss/Clustering.h
120
+ - vendor/faiss/DirectMap.cpp
121
+ - vendor/faiss/DirectMap.h
121
122
  - vendor/faiss/IVFlib.cpp
122
123
  - vendor/faiss/IVFlib.h
123
124
  - vendor/faiss/Index.cpp
@@ -132,6 +133,8 @@ files:
132
133
  - vendor/faiss/IndexBinaryFromFloat.h
133
134
  - vendor/faiss/IndexBinaryHNSW.cpp
134
135
  - vendor/faiss/IndexBinaryHNSW.h
136
+ - vendor/faiss/IndexBinaryHash.cpp
137
+ - vendor/faiss/IndexBinaryHash.h
135
138
  - vendor/faiss/IndexBinaryIVF.cpp
136
139
  - vendor/faiss/IndexBinaryIVF.h
137
140
  - vendor/faiss/IndexFlat.cpp
@@ -169,6 +172,7 @@ files:
169
172
  - vendor/faiss/MatrixStats.h
170
173
  - vendor/faiss/MetaIndexes.cpp
171
174
  - vendor/faiss/MetaIndexes.h
175
+ - vendor/faiss/MetricType.h
172
176
  - vendor/faiss/OnDiskInvertedLists.cpp
173
177
  - vendor/faiss/OnDiskInvertedLists.h
174
178
  - vendor/faiss/VectorTransform.cpp
@@ -185,6 +189,8 @@ files:
185
189
  - vendor/faiss/c_api/IndexIVF_c.h
186
190
  - vendor/faiss/c_api/IndexLSH_c.cpp
187
191
  - vendor/faiss/c_api/IndexLSH_c.h
192
+ - vendor/faiss/c_api/IndexPreTransform_c.cpp
193
+ - vendor/faiss/c_api/IndexPreTransform_c.h
188
194
  - vendor/faiss/c_api/IndexShards_c.cpp
189
195
  - vendor/faiss/c_api/IndexShards_c.h
190
196
  - vendor/faiss/c_api/Index_c.cpp
@@ -222,6 +228,7 @@ files:
222
228
  - vendor/faiss/demos/demo_imi_pq.cpp
223
229
  - vendor/faiss/demos/demo_ivfpq_indexing.cpp
224
230
  - vendor/faiss/demos/demo_sift1M.cpp
231
+ - vendor/faiss/demos/demo_weighted_kmeans.cpp
225
232
  - vendor/faiss/gpu/GpuAutoTune.cpp
226
233
  - vendor/faiss/gpu/GpuAutoTune.h
227
234
  - vendor/faiss/gpu/GpuCloner.cpp
@@ -276,6 +283,7 @@ files:
276
283
  - vendor/faiss/impl/HNSW.h
277
284
  - vendor/faiss/impl/PolysemousTraining.cpp
278
285
  - vendor/faiss/impl/PolysemousTraining.h
286
+ - vendor/faiss/impl/ProductQuantizer-inl.h
279
287
  - vendor/faiss/impl/ProductQuantizer.cpp
280
288
  - vendor/faiss/impl/ProductQuantizer.h
281
289
  - vendor/faiss/impl/ScalarQuantizer.cpp