faiss 0.4.3 → 0.5.0

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 (152) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5 -0
  3. data/ext/faiss/index.cpp +25 -6
  4. data/ext/faiss/index_binary.cpp +17 -4
  5. data/ext/faiss/kmeans.cpp +6 -6
  6. data/lib/faiss/version.rb +1 -1
  7. data/vendor/faiss/faiss/AutoTune.cpp +2 -3
  8. data/vendor/faiss/faiss/AutoTune.h +1 -1
  9. data/vendor/faiss/faiss/Clustering.cpp +2 -2
  10. data/vendor/faiss/faiss/Clustering.h +2 -2
  11. data/vendor/faiss/faiss/IVFlib.cpp +1 -2
  12. data/vendor/faiss/faiss/IVFlib.h +1 -1
  13. data/vendor/faiss/faiss/Index.h +10 -10
  14. data/vendor/faiss/faiss/Index2Layer.cpp +1 -1
  15. data/vendor/faiss/faiss/Index2Layer.h +2 -2
  16. data/vendor/faiss/faiss/IndexAdditiveQuantizerFastScan.cpp +9 -4
  17. data/vendor/faiss/faiss/IndexAdditiveQuantizerFastScan.h +5 -1
  18. data/vendor/faiss/faiss/IndexBinary.h +7 -7
  19. data/vendor/faiss/faiss/IndexBinaryFromFloat.h +1 -1
  20. data/vendor/faiss/faiss/IndexBinaryHNSW.cpp +3 -1
  21. data/vendor/faiss/faiss/IndexBinaryHNSW.h +1 -1
  22. data/vendor/faiss/faiss/IndexBinaryHash.cpp +3 -3
  23. data/vendor/faiss/faiss/IndexBinaryHash.h +5 -5
  24. data/vendor/faiss/faiss/IndexBinaryIVF.cpp +7 -6
  25. data/vendor/faiss/faiss/IndexFastScan.cpp +125 -49
  26. data/vendor/faiss/faiss/IndexFastScan.h +107 -7
  27. data/vendor/faiss/faiss/IndexFlat.h +1 -1
  28. data/vendor/faiss/faiss/IndexHNSW.cpp +3 -1
  29. data/vendor/faiss/faiss/IndexHNSW.h +1 -1
  30. data/vendor/faiss/faiss/IndexIDMap.cpp +14 -13
  31. data/vendor/faiss/faiss/IndexIDMap.h +6 -6
  32. data/vendor/faiss/faiss/IndexIVF.cpp +1 -1
  33. data/vendor/faiss/faiss/IndexIVF.h +5 -5
  34. data/vendor/faiss/faiss/IndexIVFAdditiveQuantizer.cpp +1 -1
  35. data/vendor/faiss/faiss/IndexIVFAdditiveQuantizerFastScan.cpp +9 -3
  36. data/vendor/faiss/faiss/IndexIVFAdditiveQuantizerFastScan.h +3 -1
  37. data/vendor/faiss/faiss/IndexIVFFastScan.cpp +176 -90
  38. data/vendor/faiss/faiss/IndexIVFFastScan.h +173 -18
  39. data/vendor/faiss/faiss/IndexIVFFlat.cpp +1 -0
  40. data/vendor/faiss/faiss/IndexIVFFlatPanorama.cpp +366 -0
  41. data/vendor/faiss/faiss/IndexIVFFlatPanorama.h +64 -0
  42. data/vendor/faiss/faiss/IndexIVFPQ.cpp +3 -1
  43. data/vendor/faiss/faiss/IndexIVFPQ.h +1 -1
  44. data/vendor/faiss/faiss/IndexIVFPQFastScan.cpp +134 -2
  45. data/vendor/faiss/faiss/IndexIVFPQFastScan.h +7 -1
  46. data/vendor/faiss/faiss/IndexIVFRaBitQ.cpp +13 -6
  47. data/vendor/faiss/faiss/IndexIVFRaBitQ.h +1 -0
  48. data/vendor/faiss/faiss/IndexIVFRaBitQFastScan.cpp +650 -0
  49. data/vendor/faiss/faiss/IndexIVFRaBitQFastScan.h +216 -0
  50. data/vendor/faiss/faiss/IndexIVFSpectralHash.cpp +1 -1
  51. data/vendor/faiss/faiss/IndexIVFSpectralHash.h +1 -1
  52. data/vendor/faiss/faiss/IndexNNDescent.cpp +1 -1
  53. data/vendor/faiss/faiss/IndexNSG.cpp +1 -1
  54. data/vendor/faiss/faiss/IndexNeuralNetCodec.h +1 -1
  55. data/vendor/faiss/faiss/IndexPQ.h +1 -1
  56. data/vendor/faiss/faiss/IndexPQFastScan.cpp +6 -2
  57. data/vendor/faiss/faiss/IndexPQFastScan.h +5 -1
  58. data/vendor/faiss/faiss/IndexRaBitQ.cpp +13 -10
  59. data/vendor/faiss/faiss/IndexRaBitQ.h +7 -2
  60. data/vendor/faiss/faiss/IndexRaBitQFastScan.cpp +586 -0
  61. data/vendor/faiss/faiss/IndexRaBitQFastScan.h +149 -0
  62. data/vendor/faiss/faiss/IndexShards.cpp +1 -1
  63. data/vendor/faiss/faiss/MatrixStats.cpp +3 -3
  64. data/vendor/faiss/faiss/MetricType.h +1 -1
  65. data/vendor/faiss/faiss/VectorTransform.h +2 -2
  66. data/vendor/faiss/faiss/clone_index.cpp +3 -1
  67. data/vendor/faiss/faiss/gpu/GpuCloner.cpp +1 -1
  68. data/vendor/faiss/faiss/gpu/GpuIndex.h +11 -11
  69. data/vendor/faiss/faiss/gpu/GpuIndexBinaryCagra.h +1 -1
  70. data/vendor/faiss/faiss/gpu/GpuIndexBinaryFlat.h +1 -1
  71. data/vendor/faiss/faiss/gpu/GpuIndexCagra.h +10 -6
  72. data/vendor/faiss/faiss/gpu/perf/IndexWrapper-inl.h +2 -0
  73. data/vendor/faiss/faiss/gpu/test/TestGpuIcmEncoder.cpp +7 -0
  74. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFFlat.cpp +1 -1
  75. data/vendor/faiss/faiss/impl/AdditiveQuantizer.cpp +1 -1
  76. data/vendor/faiss/faiss/impl/AdditiveQuantizer.h +1 -1
  77. data/vendor/faiss/faiss/impl/AuxIndexStructures.cpp +2 -2
  78. data/vendor/faiss/faiss/impl/AuxIndexStructures.h +1 -1
  79. data/vendor/faiss/faiss/impl/CodePacker.h +2 -2
  80. data/vendor/faiss/faiss/impl/DistanceComputer.h +3 -3
  81. data/vendor/faiss/faiss/impl/FastScanDistancePostProcessing.h +53 -0
  82. data/vendor/faiss/faiss/impl/HNSW.cpp +1 -1
  83. data/vendor/faiss/faiss/impl/HNSW.h +4 -4
  84. data/vendor/faiss/faiss/impl/IDSelector.cpp +2 -2
  85. data/vendor/faiss/faiss/impl/IDSelector.h +1 -1
  86. data/vendor/faiss/faiss/impl/LocalSearchQuantizer.cpp +4 -4
  87. data/vendor/faiss/faiss/impl/LocalSearchQuantizer.h +1 -1
  88. data/vendor/faiss/faiss/impl/LookupTableScaler.h +1 -1
  89. data/vendor/faiss/faiss/impl/NNDescent.cpp +1 -1
  90. data/vendor/faiss/faiss/impl/NNDescent.h +2 -2
  91. data/vendor/faiss/faiss/impl/NSG.cpp +1 -1
  92. data/vendor/faiss/faiss/impl/PanoramaStats.cpp +33 -0
  93. data/vendor/faiss/faiss/impl/PanoramaStats.h +38 -0
  94. data/vendor/faiss/faiss/impl/PolysemousTraining.cpp +5 -5
  95. data/vendor/faiss/faiss/impl/ProductAdditiveQuantizer.cpp +1 -1
  96. data/vendor/faiss/faiss/impl/ProductAdditiveQuantizer.h +1 -1
  97. data/vendor/faiss/faiss/impl/ProductQuantizer-inl.h +2 -0
  98. data/vendor/faiss/faiss/impl/ProductQuantizer.h +1 -1
  99. data/vendor/faiss/faiss/impl/RaBitQUtils.cpp +246 -0
  100. data/vendor/faiss/faiss/impl/RaBitQUtils.h +153 -0
  101. data/vendor/faiss/faiss/impl/RaBitQuantizer.cpp +54 -158
  102. data/vendor/faiss/faiss/impl/RaBitQuantizer.h +2 -1
  103. data/vendor/faiss/faiss/impl/ResidualQuantizer.h +1 -1
  104. data/vendor/faiss/faiss/impl/ResultHandler.h +4 -4
  105. data/vendor/faiss/faiss/impl/ScalarQuantizer.cpp +1 -1
  106. data/vendor/faiss/faiss/impl/ScalarQuantizer.h +1 -1
  107. data/vendor/faiss/faiss/impl/ThreadedIndex-inl.h +7 -4
  108. data/vendor/faiss/faiss/impl/index_read.cpp +87 -3
  109. data/vendor/faiss/faiss/impl/index_write.cpp +73 -3
  110. data/vendor/faiss/faiss/impl/io.cpp +2 -2
  111. data/vendor/faiss/faiss/impl/io.h +4 -4
  112. data/vendor/faiss/faiss/impl/kmeans1d.cpp +1 -1
  113. data/vendor/faiss/faiss/impl/kmeans1d.h +1 -1
  114. data/vendor/faiss/faiss/impl/lattice_Zn.h +2 -2
  115. data/vendor/faiss/faiss/impl/mapped_io.cpp +2 -2
  116. data/vendor/faiss/faiss/impl/mapped_io.h +4 -3
  117. data/vendor/faiss/faiss/impl/maybe_owned_vector.h +8 -1
  118. data/vendor/faiss/faiss/impl/pq4_fast_scan.cpp +30 -4
  119. data/vendor/faiss/faiss/impl/pq4_fast_scan.h +14 -8
  120. data/vendor/faiss/faiss/impl/pq4_fast_scan_search_qbs.cpp +5 -6
  121. data/vendor/faiss/faiss/impl/simd_result_handlers.h +55 -11
  122. data/vendor/faiss/faiss/impl/zerocopy_io.h +1 -1
  123. data/vendor/faiss/faiss/index_factory.cpp +43 -1
  124. data/vendor/faiss/faiss/index_factory.h +1 -1
  125. data/vendor/faiss/faiss/index_io.h +1 -1
  126. data/vendor/faiss/faiss/invlists/InvertedLists.cpp +205 -0
  127. data/vendor/faiss/faiss/invlists/InvertedLists.h +62 -0
  128. data/vendor/faiss/faiss/utils/AlignedTable.h +1 -1
  129. data/vendor/faiss/faiss/utils/Heap.cpp +2 -2
  130. data/vendor/faiss/faiss/utils/Heap.h +3 -3
  131. data/vendor/faiss/faiss/utils/NeuralNet.cpp +1 -1
  132. data/vendor/faiss/faiss/utils/NeuralNet.h +3 -3
  133. data/vendor/faiss/faiss/utils/approx_topk/approx_topk.h +2 -2
  134. data/vendor/faiss/faiss/utils/approx_topk/avx2-inl.h +2 -2
  135. data/vendor/faiss/faiss/utils/approx_topk/mode.h +1 -1
  136. data/vendor/faiss/faiss/utils/distances.h +2 -2
  137. data/vendor/faiss/faiss/utils/extra_distances-inl.h +3 -1
  138. data/vendor/faiss/faiss/utils/hamming-inl.h +2 -0
  139. data/vendor/faiss/faiss/utils/hamming.cpp +7 -6
  140. data/vendor/faiss/faiss/utils/hamming.h +1 -1
  141. data/vendor/faiss/faiss/utils/hamming_distance/common.h +1 -2
  142. data/vendor/faiss/faiss/utils/partitioning.cpp +5 -5
  143. data/vendor/faiss/faiss/utils/partitioning.h +2 -2
  144. data/vendor/faiss/faiss/utils/rabitq_simd.h +222 -336
  145. data/vendor/faiss/faiss/utils/random.cpp +1 -1
  146. data/vendor/faiss/faiss/utils/simdlib_avx2.h +1 -1
  147. data/vendor/faiss/faiss/utils/simdlib_avx512.h +1 -1
  148. data/vendor/faiss/faiss/utils/simdlib_neon.h +2 -2
  149. data/vendor/faiss/faiss/utils/transpose/transpose-avx512-inl.h +1 -1
  150. data/vendor/faiss/faiss/utils/utils.cpp +5 -2
  151. data/vendor/faiss/faiss/utils/utils.h +2 -2
  152. metadata +12 -1
@@ -91,7 +91,7 @@ uint64_t SplitMix64RandomGenerator::next() {
91
91
  * more than 1-100 billion values. */
92
92
 
93
93
  /* Generate a set of random floating point values such that x[i] in [0,1]
94
- multi-threading. For this reason, we rely on re-entreant functions. */
94
+ multi-threading. For this reason, we rely on re-entrant functions. */
95
95
  void float_rand(float* x, size_t n, int64_t seed) {
96
96
  // only try to parallelize on large enough arrays
97
97
  const size_t nblock = n < 1024 ? 1 : 1024;
@@ -21,7 +21,7 @@ namespace faiss {
21
21
  * The objective is to separate the different interpretations of the same
22
22
  * registers (as a vector of uint8, uint16 or uint32), to provide printing
23
23
  * functions, and to give more readable names to the AVX intrinsics. It does not
24
- * pretend to be exhausitve, functions are added as needed.
24
+ * pretend to be exhaustive, functions are added as needed.
25
25
  */
26
26
 
27
27
  /// 256-bit representation without interpretation as a vector
@@ -23,7 +23,7 @@ namespace faiss {
23
23
  * The objective is to separate the different interpretations of the same
24
24
  * registers (as a vector of uint8, uint16 or uint32), to provide printing
25
25
  * functions, and to give more readable names to the AVX intrinsics. It does not
26
- * pretend to be exhausitve, functions are added as needed.
26
+ * pretend to be exhaustive, functions are added as needed.
27
27
  */
28
28
 
29
29
  /// 512-bit representation without interpretation as a vector
@@ -805,8 +805,8 @@ struct simd32uint8 {
805
805
  uint8_t bytes[32];
806
806
  store(bytes);
807
807
  detail::simdlib::bin(
808
- const_cast<const char(&)[32]>(
809
- reinterpret_cast<char(&)[32]>(bytes)),
808
+ const_cast<const char (&)[32]>(
809
+ reinterpret_cast<char (&)[32]>(bytes)),
810
810
  bits);
811
811
  }
812
812
 
@@ -59,7 +59,7 @@ inline void transpose_16x4(
59
59
  const __m512 r1 = _mm512_shuffle_f32x4(i0, i1, _MM_SHUFFLE(3, 1, 3, 1));
60
60
  // 32 33 34 35 40 41 42 43 48 49 50 51 56 57 58 59
61
61
  const __m512 r2 = _mm512_shuffle_f32x4(i2, i3, _MM_SHUFFLE(2, 0, 2, 0));
62
- // 52 53 54 55 60 61 62 63 52 53 54 55 60 61 62 63
62
+ // 36 37 38 39 44 45 46 47 52 53 54 55 60 61 62 63
63
63
  const __m512 r3 = _mm512_shuffle_f32x4(i2, i3, _MM_SHUFFLE(3, 1, 3, 1));
64
64
 
65
65
  // 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30
@@ -102,7 +102,10 @@ int sgemv_(
102
102
  namespace faiss {
103
103
 
104
104
  // this will be set at load time from GPU Faiss
105
- std::string gpu_compile_options;
105
+ std::string& ref_gpu_compile_options() {
106
+ static std::string gpu_compile_options;
107
+ return gpu_compile_options;
108
+ }
106
109
 
107
110
  std::string get_compile_options() {
108
111
  std::string options;
@@ -124,7 +127,7 @@ std::string get_compile_options() {
124
127
  options += "GENERIC ";
125
128
  #endif
126
129
 
127
- options += gpu_compile_options;
130
+ options += ref_gpu_compile_options();
128
131
 
129
132
  return options;
130
133
  }
@@ -8,7 +8,7 @@
8
8
  // -*- c++ -*-
9
9
 
10
10
  /*
11
- * A few utilitary functions for similarity search:
11
+ * A few utility functions for similarity search:
12
12
  * - optimized exhaustive distance and knn search functions
13
13
  * - some functions reimplemented from torch for speed
14
14
  */
@@ -64,7 +64,7 @@ void matrix_qr(int m, int n, float* a);
64
64
  void ranklist_handle_ties(int k, int64_t* idx, const float* dis);
65
65
 
66
66
  /** count the number of common elements between v1 and v2
67
- * algorithm = sorting + bissection to avoid double-counting duplicates
67
+ * algorithm = sorting + bisection to avoid double-counting duplicates
68
68
  */
69
69
  size_t ranklist_intersection_size(
70
70
  size_t k1,
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: faiss
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
@@ -105,6 +105,8 @@ files:
105
105
  - vendor/faiss/faiss/IndexIVFFastScan.h
106
106
  - vendor/faiss/faiss/IndexIVFFlat.cpp
107
107
  - vendor/faiss/faiss/IndexIVFFlat.h
108
+ - vendor/faiss/faiss/IndexIVFFlatPanorama.cpp
109
+ - vendor/faiss/faiss/IndexIVFFlatPanorama.h
108
110
  - vendor/faiss/faiss/IndexIVFIndependentQuantizer.cpp
109
111
  - vendor/faiss/faiss/IndexIVFIndependentQuantizer.h
110
112
  - vendor/faiss/faiss/IndexIVFPQ.cpp
@@ -115,6 +117,8 @@ files:
115
117
  - vendor/faiss/faiss/IndexIVFPQR.h
116
118
  - vendor/faiss/faiss/IndexIVFRaBitQ.cpp
117
119
  - vendor/faiss/faiss/IndexIVFRaBitQ.h
120
+ - vendor/faiss/faiss/IndexIVFRaBitQFastScan.cpp
121
+ - vendor/faiss/faiss/IndexIVFRaBitQFastScan.h
118
122
  - vendor/faiss/faiss/IndexIVFSpectralHash.cpp
119
123
  - vendor/faiss/faiss/IndexIVFSpectralHash.h
120
124
  - vendor/faiss/faiss/IndexLSH.cpp
@@ -135,6 +139,8 @@ files:
135
139
  - vendor/faiss/faiss/IndexPreTransform.h
136
140
  - vendor/faiss/faiss/IndexRaBitQ.cpp
137
141
  - vendor/faiss/faiss/IndexRaBitQ.h
142
+ - vendor/faiss/faiss/IndexRaBitQFastScan.cpp
143
+ - vendor/faiss/faiss/IndexRaBitQFastScan.h
138
144
  - vendor/faiss/faiss/IndexRefine.cpp
139
145
  - vendor/faiss/faiss/IndexRefine.h
140
146
  - vendor/faiss/faiss/IndexReplicas.cpp
@@ -231,6 +237,7 @@ files:
231
237
  - vendor/faiss/faiss/impl/FaissAssert.h
232
238
  - vendor/faiss/faiss/impl/FaissException.cpp
233
239
  - vendor/faiss/faiss/impl/FaissException.h
240
+ - vendor/faiss/faiss/impl/FastScanDistancePostProcessing.h
234
241
  - vendor/faiss/faiss/impl/HNSW.cpp
235
242
  - vendor/faiss/faiss/impl/HNSW.h
236
243
  - vendor/faiss/faiss/impl/IDSelector.cpp
@@ -242,6 +249,8 @@ files:
242
249
  - vendor/faiss/faiss/impl/NNDescent.h
243
250
  - vendor/faiss/faiss/impl/NSG.cpp
244
251
  - vendor/faiss/faiss/impl/NSG.h
252
+ - vendor/faiss/faiss/impl/PanoramaStats.cpp
253
+ - vendor/faiss/faiss/impl/PanoramaStats.h
245
254
  - vendor/faiss/faiss/impl/PolysemousTraining.cpp
246
255
  - vendor/faiss/faiss/impl/PolysemousTraining.h
247
256
  - vendor/faiss/faiss/impl/ProductAdditiveQuantizer.cpp
@@ -250,6 +259,8 @@ files:
250
259
  - vendor/faiss/faiss/impl/ProductQuantizer.cpp
251
260
  - vendor/faiss/faiss/impl/ProductQuantizer.h
252
261
  - vendor/faiss/faiss/impl/Quantizer.h
262
+ - vendor/faiss/faiss/impl/RaBitQUtils.cpp
263
+ - vendor/faiss/faiss/impl/RaBitQUtils.h
253
264
  - vendor/faiss/faiss/impl/RaBitQuantizer.cpp
254
265
  - vendor/faiss/faiss/impl/RaBitQuantizer.h
255
266
  - vendor/faiss/faiss/impl/ResidualQuantizer.cpp