faiss 0.1.1 → 0.1.2

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 (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