faiss 0.1.7 → 0.2.3

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 (219) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +18 -0
  3. data/README.md +7 -7
  4. data/ext/faiss/ext.cpp +1 -1
  5. data/ext/faiss/extconf.rb +8 -2
  6. data/ext/faiss/index.cpp +102 -69
  7. data/ext/faiss/index_binary.cpp +24 -30
  8. data/ext/faiss/kmeans.cpp +20 -16
  9. data/ext/faiss/numo.hpp +867 -0
  10. data/ext/faiss/pca_matrix.cpp +13 -14
  11. data/ext/faiss/product_quantizer.cpp +23 -24
  12. data/ext/faiss/utils.cpp +10 -37
  13. data/ext/faiss/utils.h +2 -13
  14. data/lib/faiss/version.rb +1 -1
  15. data/lib/faiss.rb +0 -5
  16. data/vendor/faiss/faiss/AutoTune.cpp +292 -291
  17. data/vendor/faiss/faiss/AutoTune.h +55 -56
  18. data/vendor/faiss/faiss/Clustering.cpp +334 -195
  19. data/vendor/faiss/faiss/Clustering.h +88 -35
  20. data/vendor/faiss/faiss/IVFlib.cpp +171 -195
  21. data/vendor/faiss/faiss/IVFlib.h +48 -51
  22. data/vendor/faiss/faiss/Index.cpp +85 -103
  23. data/vendor/faiss/faiss/Index.h +54 -48
  24. data/vendor/faiss/faiss/Index2Layer.cpp +139 -164
  25. data/vendor/faiss/faiss/Index2Layer.h +22 -22
  26. data/vendor/faiss/faiss/IndexBinary.cpp +45 -37
  27. data/vendor/faiss/faiss/IndexBinary.h +140 -132
  28. data/vendor/faiss/faiss/IndexBinaryFlat.cpp +73 -53
  29. data/vendor/faiss/faiss/IndexBinaryFlat.h +29 -24
  30. data/vendor/faiss/faiss/IndexBinaryFromFloat.cpp +46 -43
  31. data/vendor/faiss/faiss/IndexBinaryFromFloat.h +16 -15
  32. data/vendor/faiss/faiss/IndexBinaryHNSW.cpp +215 -232
  33. data/vendor/faiss/faiss/IndexBinaryHNSW.h +25 -24
  34. data/vendor/faiss/faiss/IndexBinaryHash.cpp +182 -177
  35. data/vendor/faiss/faiss/IndexBinaryHash.h +41 -34
  36. data/vendor/faiss/faiss/IndexBinaryIVF.cpp +489 -461
  37. data/vendor/faiss/faiss/IndexBinaryIVF.h +97 -68
  38. data/vendor/faiss/faiss/IndexFlat.cpp +116 -147
  39. data/vendor/faiss/faiss/IndexFlat.h +35 -46
  40. data/vendor/faiss/faiss/IndexHNSW.cpp +372 -348
  41. data/vendor/faiss/faiss/IndexHNSW.h +57 -41
  42. data/vendor/faiss/faiss/IndexIVF.cpp +474 -454
  43. data/vendor/faiss/faiss/IndexIVF.h +146 -113
  44. data/vendor/faiss/faiss/IndexIVFFlat.cpp +248 -250
  45. data/vendor/faiss/faiss/IndexIVFFlat.h +48 -51
  46. data/vendor/faiss/faiss/IndexIVFPQ.cpp +457 -516
  47. data/vendor/faiss/faiss/IndexIVFPQ.h +74 -66
  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 +125 -133
  53. data/vendor/faiss/faiss/IndexIVFSpectralHash.h +19 -21
  54. data/vendor/faiss/faiss/IndexLSH.cpp +75 -96
  55. data/vendor/faiss/faiss/IndexLSH.h +21 -26
  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 +231 -0
  59. data/vendor/faiss/faiss/IndexNNDescent.h +72 -0
  60. data/vendor/faiss/faiss/IndexNSG.cpp +303 -0
  61. data/vendor/faiss/faiss/IndexNSG.h +85 -0
  62. data/vendor/faiss/faiss/IndexPQ.cpp +405 -464
  63. data/vendor/faiss/faiss/IndexPQ.h +64 -67
  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 +115 -131
  69. data/vendor/faiss/faiss/IndexRefine.h +22 -23
  70. data/vendor/faiss/faiss/IndexReplicas.cpp +147 -153
  71. data/vendor/faiss/faiss/IndexReplicas.h +62 -56
  72. data/vendor/faiss/faiss/IndexResidual.cpp +291 -0
  73. data/vendor/faiss/faiss/IndexResidual.h +152 -0
  74. data/vendor/faiss/faiss/IndexScalarQuantizer.cpp +120 -155
  75. data/vendor/faiss/faiss/IndexScalarQuantizer.h +41 -45
  76. data/vendor/faiss/faiss/IndexShards.cpp +256 -240
  77. data/vendor/faiss/faiss/IndexShards.h +85 -73
  78. data/vendor/faiss/faiss/MatrixStats.cpp +112 -97
  79. data/vendor/faiss/faiss/MatrixStats.h +7 -10
  80. data/vendor/faiss/faiss/MetaIndexes.cpp +135 -157
  81. data/vendor/faiss/faiss/MetaIndexes.h +40 -34
  82. data/vendor/faiss/faiss/MetricType.h +7 -7
  83. data/vendor/faiss/faiss/VectorTransform.cpp +652 -474
  84. data/vendor/faiss/faiss/VectorTransform.h +61 -89
  85. data/vendor/faiss/faiss/clone_index.cpp +77 -73
  86. data/vendor/faiss/faiss/clone_index.h +4 -9
  87. data/vendor/faiss/faiss/gpu/GpuAutoTune.cpp +33 -38
  88. data/vendor/faiss/faiss/gpu/GpuAutoTune.h +11 -9
  89. data/vendor/faiss/faiss/gpu/GpuCloner.cpp +197 -170
  90. data/vendor/faiss/faiss/gpu/GpuCloner.h +53 -35
  91. data/vendor/faiss/faiss/gpu/GpuClonerOptions.cpp +12 -14
  92. data/vendor/faiss/faiss/gpu/GpuClonerOptions.h +27 -25
  93. data/vendor/faiss/faiss/gpu/GpuDistance.h +116 -112
  94. data/vendor/faiss/faiss/gpu/GpuFaissAssert.h +1 -2
  95. data/vendor/faiss/faiss/gpu/GpuIndex.h +134 -137
  96. data/vendor/faiss/faiss/gpu/GpuIndexBinaryFlat.h +76 -73
  97. data/vendor/faiss/faiss/gpu/GpuIndexFlat.h +173 -162
  98. data/vendor/faiss/faiss/gpu/GpuIndexIVF.h +67 -64
  99. data/vendor/faiss/faiss/gpu/GpuIndexIVFFlat.h +89 -86
  100. data/vendor/faiss/faiss/gpu/GpuIndexIVFPQ.h +150 -141
  101. data/vendor/faiss/faiss/gpu/GpuIndexIVFScalarQuantizer.h +101 -103
  102. data/vendor/faiss/faiss/gpu/GpuIndicesOptions.h +17 -16
  103. data/vendor/faiss/faiss/gpu/GpuResources.cpp +116 -128
  104. data/vendor/faiss/faiss/gpu/GpuResources.h +182 -186
  105. data/vendor/faiss/faiss/gpu/StandardGpuResources.cpp +433 -422
  106. data/vendor/faiss/faiss/gpu/StandardGpuResources.h +131 -130
  107. data/vendor/faiss/faiss/gpu/impl/InterleavedCodes.cpp +468 -456
  108. data/vendor/faiss/faiss/gpu/impl/InterleavedCodes.h +25 -19
  109. data/vendor/faiss/faiss/gpu/impl/RemapIndices.cpp +22 -20
  110. data/vendor/faiss/faiss/gpu/impl/RemapIndices.h +9 -8
  111. data/vendor/faiss/faiss/gpu/perf/IndexWrapper-inl.h +39 -44
  112. data/vendor/faiss/faiss/gpu/perf/IndexWrapper.h +16 -14
  113. data/vendor/faiss/faiss/gpu/perf/PerfClustering.cpp +77 -71
  114. data/vendor/faiss/faiss/gpu/perf/PerfIVFPQAdd.cpp +109 -88
  115. data/vendor/faiss/faiss/gpu/perf/WriteIndex.cpp +75 -64
  116. data/vendor/faiss/faiss/gpu/test/TestCodePacking.cpp +230 -215
  117. data/vendor/faiss/faiss/gpu/test/TestGpuIndexBinaryFlat.cpp +80 -86
  118. data/vendor/faiss/faiss/gpu/test/TestGpuIndexFlat.cpp +284 -277
  119. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFFlat.cpp +416 -416
  120. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFPQ.cpp +611 -517
  121. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFScalarQuantizer.cpp +166 -164
  122. data/vendor/faiss/faiss/gpu/test/TestGpuMemoryException.cpp +61 -53
  123. data/vendor/faiss/faiss/gpu/test/TestUtils.cpp +274 -238
  124. data/vendor/faiss/faiss/gpu/test/TestUtils.h +73 -57
  125. data/vendor/faiss/faiss/gpu/test/demo_ivfpq_indexing_gpu.cpp +47 -50
  126. data/vendor/faiss/faiss/gpu/utils/DeviceUtils.h +79 -72
  127. data/vendor/faiss/faiss/gpu/utils/StackDeviceMemory.cpp +140 -146
  128. data/vendor/faiss/faiss/gpu/utils/StackDeviceMemory.h +69 -71
  129. data/vendor/faiss/faiss/gpu/utils/StaticUtils.h +21 -16
  130. data/vendor/faiss/faiss/gpu/utils/Timer.cpp +25 -29
  131. data/vendor/faiss/faiss/gpu/utils/Timer.h +30 -29
  132. data/vendor/faiss/faiss/impl/AdditiveQuantizer.cpp +270 -0
  133. data/vendor/faiss/faiss/impl/AdditiveQuantizer.h +115 -0
  134. data/vendor/faiss/faiss/impl/AuxIndexStructures.cpp +90 -120
  135. data/vendor/faiss/faiss/impl/AuxIndexStructures.h +81 -65
  136. data/vendor/faiss/faiss/impl/FaissAssert.h +73 -58
  137. data/vendor/faiss/faiss/impl/FaissException.cpp +56 -48
  138. data/vendor/faiss/faiss/impl/FaissException.h +41 -29
  139. data/vendor/faiss/faiss/impl/HNSW.cpp +595 -611
  140. data/vendor/faiss/faiss/impl/HNSW.h +179 -200
  141. data/vendor/faiss/faiss/impl/LocalSearchQuantizer.cpp +672 -0
  142. data/vendor/faiss/faiss/impl/LocalSearchQuantizer.h +172 -0
  143. data/vendor/faiss/faiss/impl/NNDescent.cpp +487 -0
  144. data/vendor/faiss/faiss/impl/NNDescent.h +154 -0
  145. data/vendor/faiss/faiss/impl/NSG.cpp +682 -0
  146. data/vendor/faiss/faiss/impl/NSG.h +199 -0
  147. data/vendor/faiss/faiss/impl/PolysemousTraining.cpp +484 -454
  148. data/vendor/faiss/faiss/impl/PolysemousTraining.h +52 -55
  149. data/vendor/faiss/faiss/impl/ProductQuantizer-inl.h +26 -47
  150. data/vendor/faiss/faiss/impl/ProductQuantizer.cpp +469 -459
  151. data/vendor/faiss/faiss/impl/ProductQuantizer.h +76 -87
  152. data/vendor/faiss/faiss/impl/ResidualQuantizer.cpp +448 -0
  153. data/vendor/faiss/faiss/impl/ResidualQuantizer.h +130 -0
  154. data/vendor/faiss/faiss/impl/ResultHandler.h +96 -132
  155. data/vendor/faiss/faiss/impl/ScalarQuantizer.cpp +648 -701
  156. data/vendor/faiss/faiss/impl/ScalarQuantizer.h +48 -46
  157. data/vendor/faiss/faiss/impl/ThreadedIndex-inl.h +129 -131
  158. data/vendor/faiss/faiss/impl/ThreadedIndex.h +61 -55
  159. data/vendor/faiss/faiss/impl/index_read.cpp +547 -479
  160. data/vendor/faiss/faiss/impl/index_write.cpp +497 -407
  161. data/vendor/faiss/faiss/impl/io.cpp +75 -94
  162. data/vendor/faiss/faiss/impl/io.h +31 -41
  163. data/vendor/faiss/faiss/impl/io_macros.h +40 -29
  164. data/vendor/faiss/faiss/impl/lattice_Zn.cpp +137 -186
  165. data/vendor/faiss/faiss/impl/lattice_Zn.h +40 -51
  166. data/vendor/faiss/faiss/impl/platform_macros.h +29 -8
  167. data/vendor/faiss/faiss/impl/pq4_fast_scan.cpp +77 -124
  168. data/vendor/faiss/faiss/impl/pq4_fast_scan.h +39 -48
  169. data/vendor/faiss/faiss/impl/pq4_fast_scan_search_1.cpp +41 -52
  170. data/vendor/faiss/faiss/impl/pq4_fast_scan_search_qbs.cpp +80 -117
  171. data/vendor/faiss/faiss/impl/simd_result_handlers.h +109 -137
  172. data/vendor/faiss/faiss/index_factory.cpp +269 -218
  173. data/vendor/faiss/faiss/index_factory.h +6 -7
  174. data/vendor/faiss/faiss/index_io.h +23 -26
  175. data/vendor/faiss/faiss/invlists/BlockInvertedLists.cpp +67 -75
  176. data/vendor/faiss/faiss/invlists/BlockInvertedLists.h +22 -24
  177. data/vendor/faiss/faiss/invlists/DirectMap.cpp +96 -112
  178. data/vendor/faiss/faiss/invlists/DirectMap.h +29 -33
  179. data/vendor/faiss/faiss/invlists/InvertedLists.cpp +307 -364
  180. data/vendor/faiss/faiss/invlists/InvertedLists.h +151 -151
  181. data/vendor/faiss/faiss/invlists/InvertedListsIOHook.cpp +29 -34
  182. data/vendor/faiss/faiss/invlists/InvertedListsIOHook.h +17 -18
  183. data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.cpp +257 -293
  184. data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.h +50 -45
  185. data/vendor/faiss/faiss/python/python_callbacks.cpp +23 -26
  186. data/vendor/faiss/faiss/python/python_callbacks.h +9 -16
  187. data/vendor/faiss/faiss/utils/AlignedTable.h +79 -44
  188. data/vendor/faiss/faiss/utils/Heap.cpp +40 -48
  189. data/vendor/faiss/faiss/utils/Heap.h +186 -209
  190. data/vendor/faiss/faiss/utils/WorkerThread.cpp +67 -76
  191. data/vendor/faiss/faiss/utils/WorkerThread.h +32 -33
  192. data/vendor/faiss/faiss/utils/distances.cpp +301 -310
  193. data/vendor/faiss/faiss/utils/distances.h +133 -118
  194. data/vendor/faiss/faiss/utils/distances_simd.cpp +456 -516
  195. data/vendor/faiss/faiss/utils/extra_distances-inl.h +117 -0
  196. data/vendor/faiss/faiss/utils/extra_distances.cpp +113 -232
  197. data/vendor/faiss/faiss/utils/extra_distances.h +30 -29
  198. data/vendor/faiss/faiss/utils/hamming-inl.h +260 -209
  199. data/vendor/faiss/faiss/utils/hamming.cpp +375 -469
  200. data/vendor/faiss/faiss/utils/hamming.h +62 -85
  201. data/vendor/faiss/faiss/utils/ordered_key_value.h +16 -18
  202. data/vendor/faiss/faiss/utils/partitioning.cpp +393 -318
  203. data/vendor/faiss/faiss/utils/partitioning.h +26 -21
  204. data/vendor/faiss/faiss/utils/quantize_lut.cpp +78 -66
  205. data/vendor/faiss/faiss/utils/quantize_lut.h +22 -20
  206. data/vendor/faiss/faiss/utils/random.cpp +39 -63
  207. data/vendor/faiss/faiss/utils/random.h +13 -16
  208. data/vendor/faiss/faiss/utils/simdlib.h +4 -2
  209. data/vendor/faiss/faiss/utils/simdlib_avx2.h +88 -85
  210. data/vendor/faiss/faiss/utils/simdlib_emulated.h +226 -165
  211. data/vendor/faiss/faiss/utils/simdlib_neon.h +832 -0
  212. data/vendor/faiss/faiss/utils/utils.cpp +304 -287
  213. data/vendor/faiss/faiss/utils/utils.h +53 -48
  214. metadata +26 -12
  215. data/lib/faiss/index.rb +0 -20
  216. data/lib/faiss/index_binary.rb +0 -20
  217. data/lib/faiss/kmeans.rb +0 -15
  218. data/lib/faiss/pca_matrix.rb +0 -15
  219. data/lib/faiss/product_quantizer.rb +0 -22
@@ -24,13 +24,11 @@
24
24
  #ifndef FAISS_hamming_h
25
25
  #define FAISS_hamming_h
26
26
 
27
-
28
27
  #include <stdint.h>
29
28
 
30
29
  #include <faiss/impl/platform_macros.h>
31
30
  #include <faiss/utils/Heap.h>
32
31
 
33
-
34
32
  /* The Hamming distance type */
35
33
  typedef int32_t hamdis_t;
36
34
 
@@ -42,8 +40,7 @@ namespace faiss {
42
40
 
43
41
  struct RangeSearchResult;
44
42
 
45
- void bitvec_print (const uint8_t * b, size_t d);
46
-
43
+ void bitvec_print(const uint8_t* b, size_t d);
47
44
 
48
45
  /* Functions for casting vectors of regular types to compact bits.
49
46
  They assume proper allocation done beforehand, meaning that b
@@ -52,53 +49,45 @@ void bitvec_print (const uint8_t * b, size_t d);
52
49
  /* Makes an array of bits from the signs of a float array. The length
53
50
  of the output array b is rounded up to byte size (allocate
54
51
  accordingly) */
55
- void fvecs2bitvecs (
56
- const float * x,
57
- uint8_t * b,
58
- size_t d,
59
- size_t n);
60
-
61
- void bitvecs2fvecs (
62
- const uint8_t * b,
63
- float * x,
64
- size_t d,
65
- size_t n);
52
+ void fvecs2bitvecs(const float* x, uint8_t* b, size_t d, size_t n);
66
53
 
54
+ void bitvecs2fvecs(const uint8_t* b, float* x, size_t d, size_t n);
67
55
 
68
- void fvec2bitvec (const float * x, uint8_t * b, size_t d);
56
+ void fvec2bitvec(const float* x, uint8_t* b, size_t d);
69
57
 
70
58
  /** Shuffle the bits from b(i, j) := a(i, order[j])
71
59
  */
72
- void bitvec_shuffle (size_t n, size_t da, size_t db,
73
- const int *order,
74
- const uint8_t *a,
75
- uint8_t *b);
76
-
60
+ void bitvec_shuffle(
61
+ size_t n,
62
+ size_t da,
63
+ size_t db,
64
+ const int* order,
65
+ const uint8_t* a,
66
+ uint8_t* b);
77
67
 
78
68
  /***********************************************
79
69
  * Generic reader/writer for bit strings
80
70
  ***********************************************/
81
71
 
82
-
83
72
  struct BitstringWriter {
84
- uint8_t *code;
73
+ uint8_t* code;
85
74
  size_t code_size;
86
75
  size_t i; // current bit offset
87
76
 
88
77
  // code_size in bytes
89
- BitstringWriter(uint8_t *code, size_t code_size);
78
+ BitstringWriter(uint8_t* code, size_t code_size);
90
79
 
91
80
  // write the nbit low bits of x
92
81
  void write(uint64_t x, int nbit);
93
82
  };
94
83
 
95
84
  struct BitstringReader {
96
- const uint8_t *code;
85
+ const uint8_t* code;
97
86
  size_t code_size;
98
87
  size_t i;
99
88
 
100
89
  // code_size in bytes
101
- BitstringReader(const uint8_t *code, size_t code_size);
90
+ BitstringReader(const uint8_t* code, size_t code_size);
102
91
 
103
92
  // read nbit bits from the code
104
93
  uint64_t read(int nbit);
@@ -108,15 +97,12 @@ struct BitstringReader {
108
97
  * Hamming distance computation functions
109
98
  **************************************************/
110
99
 
111
-
112
-
113
100
  FAISS_API extern size_t hamming_batch_size;
114
101
 
115
102
  inline int popcount64(uint64_t x) {
116
103
  return __builtin_popcountl(x);
117
104
  }
118
105
 
119
-
120
106
  /** Compute a set of Hamming distances between na and nb binary vectors
121
107
  *
122
108
  * @param a size na * nbytespercode
@@ -124,15 +110,13 @@ inline int popcount64(uint64_t x) {
124
110
  * @param nbytespercode should be multiple of 8
125
111
  * @param dis output distances, size na * nb
126
112
  */
127
- void hammings (
128
- const uint8_t * a,
129
- const uint8_t * b,
130
- size_t na, size_t nb,
113
+ void hammings(
114
+ const uint8_t* a,
115
+ const uint8_t* b,
116
+ size_t na,
117
+ size_t nb,
131
118
  size_t nbytespercode,
132
- hamdis_t * dis);
133
-
134
-
135
-
119
+ hamdis_t* dis);
136
120
 
137
121
  /** Return the k smallest Hamming distances for a set of binary query vectors,
138
122
  * using a max heap.
@@ -142,22 +126,22 @@ void hammings (
142
126
  * @param ncodes size of the binary codes (bytes)
143
127
  * @param ordered if != 0: order the results by decreasing distance
144
128
  * (may be bottleneck for k/n > 0.01) */
145
- void hammings_knn_hc (
146
- int_maxheap_array_t * ha,
147
- const uint8_t * a,
148
- const uint8_t * b,
129
+ void hammings_knn_hc(
130
+ int_maxheap_array_t* ha,
131
+ const uint8_t* a,
132
+ const uint8_t* b,
149
133
  size_t nb,
150
134
  size_t ncodes,
151
135
  int ordered);
152
136
 
153
137
  /* Legacy alias to hammings_knn_hc. */
154
- void hammings_knn (
155
- int_maxheap_array_t * ha,
156
- const uint8_t * a,
157
- const uint8_t * b,
158
- size_t nb,
159
- size_t ncodes,
160
- int ordered);
138
+ void hammings_knn(
139
+ int_maxheap_array_t* ha,
140
+ const uint8_t* a,
141
+ const uint8_t* b,
142
+ size_t nb,
143
+ size_t ncodes,
144
+ int ordered);
161
145
 
162
146
  /** Return the k smallest Hamming distances for a set of binary query vectors,
163
147
  * using counting max.
@@ -171,66 +155,59 @@ void hammings_knn (
171
155
  * neighbors
172
156
  * @param labels output ids of the k nearest neighbors to each query vector
173
157
  */
174
- void hammings_knn_mc (
175
- const uint8_t * a,
176
- const uint8_t * b,
177
- size_t na,
178
- size_t nb,
179
- size_t k,
180
- size_t ncodes,
181
- int32_t *distances,
182
- int64_t *labels);
158
+ void hammings_knn_mc(
159
+ const uint8_t* a,
160
+ const uint8_t* b,
161
+ size_t na,
162
+ size_t nb,
163
+ size_t k,
164
+ size_t ncodes,
165
+ int32_t* distances,
166
+ int64_t* labels);
183
167
 
184
168
  /** same as hammings_knn except we are doing a range search with radius */
185
- void hamming_range_search (
186
- const uint8_t * a,
187
- const uint8_t * b,
188
- size_t na,
189
- size_t nb,
190
- int radius,
191
- size_t ncodes,
192
- RangeSearchResult *result);
193
-
169
+ void hamming_range_search(
170
+ const uint8_t* a,
171
+ const uint8_t* b,
172
+ size_t na,
173
+ size_t nb,
174
+ int radius,
175
+ size_t ncodes,
176
+ RangeSearchResult* result);
194
177
 
195
178
  /* Counting the number of matches or of cross-matches (without returning them)
196
179
  For use with function that assume pre-allocated memory */
197
- void hamming_count_thres (
198
- const uint8_t * bs1,
199
- const uint8_t * bs2,
180
+ void hamming_count_thres(
181
+ const uint8_t* bs1,
182
+ const uint8_t* bs2,
200
183
  size_t n1,
201
184
  size_t n2,
202
185
  hamdis_t ht,
203
186
  size_t ncodes,
204
- size_t * nptr);
187
+ size_t* nptr);
205
188
 
206
189
  /* Return all Hamming distances/index passing a thres. Pre-allocation of output
207
190
  is required. Use hamming_count_thres to determine the proper size. */
208
- size_t match_hamming_thres (
209
- const uint8_t * bs1,
210
- const uint8_t * bs2,
191
+ size_t match_hamming_thres(
192
+ const uint8_t* bs1,
193
+ const uint8_t* bs2,
211
194
  size_t n1,
212
195
  size_t n2,
213
196
  hamdis_t ht,
214
197
  size_t ncodes,
215
- int64_t * idx,
216
- hamdis_t * dis);
198
+ int64_t* idx,
199
+ hamdis_t* dis);
217
200
 
218
201
  /* Cross-matching in a set of vectors */
219
- void crosshamming_count_thres (
220
- const uint8_t * dbs,
202
+ void crosshamming_count_thres(
203
+ const uint8_t* dbs,
221
204
  size_t n,
222
205
  hamdis_t ht,
223
206
  size_t ncodes,
224
- size_t * nptr);
225
-
207
+ size_t* nptr);
226
208
 
227
209
  /* compute the Hamming distances between two codewords of nwords*64 bits */
228
- hamdis_t hamming (
229
- const uint64_t * bs1,
230
- const uint64_t * bs2,
231
- size_t nwords);
232
-
233
-
210
+ hamdis_t hamming(const uint64_t* bs1, const uint64_t* bs2, size_t nwords);
234
211
 
235
212
  } // namespace faiss
236
213
 
@@ -5,8 +5,6 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
-
9
-
10
8
  #pragma once
11
9
 
12
10
  #include <climits>
@@ -14,7 +12,6 @@
14
12
 
15
13
  #include <limits>
16
14
 
17
-
18
15
  namespace faiss {
19
16
 
20
17
  /*******************************************************************
@@ -34,8 +31,10 @@ namespace faiss {
34
31
  template <typename T_, typename TI_>
35
32
  struct CMax;
36
33
 
37
- template<typename T> inline T cmin_nextafter(T x);
38
- template<typename T> inline T cmax_nextafter(T x);
34
+ template <typename T>
35
+ inline T cmin_nextafter(T x);
36
+ template <typename T>
37
+ inline T cmax_nextafter(T x);
39
38
 
40
39
  // traits of minheaps = heaps where the minimum value is stored on top
41
40
  // useful to find the *max* values of an array
@@ -44,10 +43,10 @@ struct CMin {
44
43
  typedef T_ T;
45
44
  typedef TI_ TI;
46
45
  typedef CMax<T_, TI_> Crev; // reference to reverse comparison
47
- inline static bool cmp (T a, T b) {
46
+ inline static bool cmp(T a, T b) {
48
47
  return a < b;
49
48
  }
50
- inline static T neutral () {
49
+ inline static T neutral() {
51
50
  return std::numeric_limits<T>::lowest();
52
51
  }
53
52
  static const bool is_max = false;
@@ -57,18 +56,15 @@ struct CMin {
57
56
  }
58
57
  };
59
58
 
60
-
61
-
62
-
63
59
  template <typename T_, typename TI_>
64
60
  struct CMax {
65
61
  typedef T_ T;
66
62
  typedef TI_ TI;
67
63
  typedef CMin<T_, TI_> Crev;
68
- inline static bool cmp (T a, T b) {
64
+ inline static bool cmp(T a, T b) {
69
65
  return a > b;
70
66
  }
71
- inline static T neutral () {
67
+ inline static T neutral() {
72
68
  return std::numeric_limits<T>::max();
73
69
  }
74
70
  static const bool is_max = true;
@@ -77,22 +73,24 @@ struct CMax {
77
73
  }
78
74
  };
79
75
 
80
-
81
- template<> inline float cmin_nextafter<float>(float x) {
76
+ template <>
77
+ inline float cmin_nextafter<float>(float x) {
82
78
  return std::nextafterf(x, -HUGE_VALF);
83
79
  }
84
80
 
85
- template<> inline float cmax_nextafter<float>(float x) {
81
+ template <>
82
+ inline float cmax_nextafter<float>(float x) {
86
83
  return std::nextafterf(x, HUGE_VALF);
87
84
  }
88
85
 
89
- template<> inline uint16_t cmin_nextafter<uint16_t>(uint16_t x) {
86
+ template <>
87
+ inline uint16_t cmin_nextafter<uint16_t>(uint16_t x) {
90
88
  return x - 1;
91
89
  }
92
90
 
93
- template<> inline uint16_t cmax_nextafter<uint16_t>(uint16_t x) {
91
+ template <>
92
+ inline uint16_t cmax_nextafter<uint16_t>(uint16_t x) {
94
93
  return x + 1;
95
94
  }
96
95
 
97
-
98
96
  } // namespace faiss