faiss 0.2.0 → 0.2.4

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 (215) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +16 -0
  3. data/LICENSE.txt +1 -1
  4. data/README.md +7 -7
  5. data/ext/faiss/extconf.rb +6 -3
  6. data/ext/faiss/numo.hpp +4 -4
  7. data/ext/faiss/utils.cpp +1 -1
  8. data/ext/faiss/utils.h +1 -1
  9. data/lib/faiss/version.rb +1 -1
  10. data/vendor/faiss/faiss/AutoTune.cpp +292 -291
  11. data/vendor/faiss/faiss/AutoTune.h +55 -56
  12. data/vendor/faiss/faiss/Clustering.cpp +365 -194
  13. data/vendor/faiss/faiss/Clustering.h +102 -35
  14. data/vendor/faiss/faiss/IVFlib.cpp +171 -195
  15. data/vendor/faiss/faiss/IVFlib.h +48 -51
  16. data/vendor/faiss/faiss/Index.cpp +85 -103
  17. data/vendor/faiss/faiss/Index.h +54 -48
  18. data/vendor/faiss/faiss/Index2Layer.cpp +126 -224
  19. data/vendor/faiss/faiss/Index2Layer.h +22 -36
  20. data/vendor/faiss/faiss/IndexAdditiveQuantizer.cpp +407 -0
  21. data/vendor/faiss/faiss/IndexAdditiveQuantizer.h +195 -0
  22. data/vendor/faiss/faiss/IndexBinary.cpp +45 -37
  23. data/vendor/faiss/faiss/IndexBinary.h +140 -132
  24. data/vendor/faiss/faiss/IndexBinaryFlat.cpp +73 -53
  25. data/vendor/faiss/faiss/IndexBinaryFlat.h +29 -24
  26. data/vendor/faiss/faiss/IndexBinaryFromFloat.cpp +46 -43
  27. data/vendor/faiss/faiss/IndexBinaryFromFloat.h +16 -15
  28. data/vendor/faiss/faiss/IndexBinaryHNSW.cpp +215 -232
  29. data/vendor/faiss/faiss/IndexBinaryHNSW.h +25 -24
  30. data/vendor/faiss/faiss/IndexBinaryHash.cpp +182 -177
  31. data/vendor/faiss/faiss/IndexBinaryHash.h +41 -34
  32. data/vendor/faiss/faiss/IndexBinaryIVF.cpp +489 -461
  33. data/vendor/faiss/faiss/IndexBinaryIVF.h +97 -68
  34. data/vendor/faiss/faiss/IndexFlat.cpp +115 -176
  35. data/vendor/faiss/faiss/IndexFlat.h +42 -59
  36. data/vendor/faiss/faiss/IndexFlatCodes.cpp +67 -0
  37. data/vendor/faiss/faiss/IndexFlatCodes.h +47 -0
  38. data/vendor/faiss/faiss/IndexHNSW.cpp +372 -348
  39. data/vendor/faiss/faiss/IndexHNSW.h +57 -41
  40. data/vendor/faiss/faiss/IndexIVF.cpp +545 -453
  41. data/vendor/faiss/faiss/IndexIVF.h +169 -118
  42. data/vendor/faiss/faiss/IndexIVFAdditiveQuantizer.cpp +316 -0
  43. data/vendor/faiss/faiss/IndexIVFAdditiveQuantizer.h +121 -0
  44. data/vendor/faiss/faiss/IndexIVFFlat.cpp +247 -252
  45. data/vendor/faiss/faiss/IndexIVFFlat.h +48 -51
  46. data/vendor/faiss/faiss/IndexIVFPQ.cpp +459 -517
  47. data/vendor/faiss/faiss/IndexIVFPQ.h +75 -67
  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 +163 -150
  53. data/vendor/faiss/faiss/IndexIVFSpectralHash.h +38 -25
  54. data/vendor/faiss/faiss/IndexLSH.cpp +66 -113
  55. data/vendor/faiss/faiss/IndexLSH.h +20 -38
  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 +229 -0
  59. data/vendor/faiss/faiss/IndexNNDescent.h +72 -0
  60. data/vendor/faiss/faiss/IndexNSG.cpp +301 -0
  61. data/vendor/faiss/faiss/IndexNSG.h +85 -0
  62. data/vendor/faiss/faiss/IndexPQ.cpp +387 -495
  63. data/vendor/faiss/faiss/IndexPQ.h +64 -82
  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 +139 -127
  69. data/vendor/faiss/faiss/IndexRefine.h +32 -23
  70. data/vendor/faiss/faiss/IndexReplicas.cpp +147 -153
  71. data/vendor/faiss/faiss/IndexReplicas.h +62 -56
  72. data/vendor/faiss/faiss/IndexScalarQuantizer.cpp +111 -172
  73. data/vendor/faiss/faiss/IndexScalarQuantizer.h +41 -59
  74. data/vendor/faiss/faiss/IndexShards.cpp +256 -240
  75. data/vendor/faiss/faiss/IndexShards.h +85 -73
  76. data/vendor/faiss/faiss/MatrixStats.cpp +112 -97
  77. data/vendor/faiss/faiss/MatrixStats.h +7 -10
  78. data/vendor/faiss/faiss/MetaIndexes.cpp +135 -157
  79. data/vendor/faiss/faiss/MetaIndexes.h +40 -34
  80. data/vendor/faiss/faiss/MetricType.h +7 -7
  81. data/vendor/faiss/faiss/VectorTransform.cpp +654 -475
  82. data/vendor/faiss/faiss/VectorTransform.h +64 -89
  83. data/vendor/faiss/faiss/clone_index.cpp +78 -73
  84. data/vendor/faiss/faiss/clone_index.h +4 -9
  85. data/vendor/faiss/faiss/gpu/GpuAutoTune.cpp +33 -38
  86. data/vendor/faiss/faiss/gpu/GpuAutoTune.h +11 -9
  87. data/vendor/faiss/faiss/gpu/GpuCloner.cpp +198 -171
  88. data/vendor/faiss/faiss/gpu/GpuCloner.h +53 -35
  89. data/vendor/faiss/faiss/gpu/GpuClonerOptions.cpp +12 -14
  90. data/vendor/faiss/faiss/gpu/GpuClonerOptions.h +27 -25
  91. data/vendor/faiss/faiss/gpu/GpuDistance.h +116 -112
  92. data/vendor/faiss/faiss/gpu/GpuFaissAssert.h +1 -2
  93. data/vendor/faiss/faiss/gpu/GpuIcmEncoder.h +60 -0
  94. data/vendor/faiss/faiss/gpu/GpuIndex.h +134 -137
  95. data/vendor/faiss/faiss/gpu/GpuIndexBinaryFlat.h +76 -73
  96. data/vendor/faiss/faiss/gpu/GpuIndexFlat.h +173 -162
  97. data/vendor/faiss/faiss/gpu/GpuIndexIVF.h +67 -64
  98. data/vendor/faiss/faiss/gpu/GpuIndexIVFFlat.h +89 -86
  99. data/vendor/faiss/faiss/gpu/GpuIndexIVFPQ.h +150 -141
  100. data/vendor/faiss/faiss/gpu/GpuIndexIVFScalarQuantizer.h +101 -103
  101. data/vendor/faiss/faiss/gpu/GpuIndicesOptions.h +17 -16
  102. data/vendor/faiss/faiss/gpu/GpuResources.cpp +116 -128
  103. data/vendor/faiss/faiss/gpu/GpuResources.h +182 -186
  104. data/vendor/faiss/faiss/gpu/StandardGpuResources.cpp +433 -422
  105. data/vendor/faiss/faiss/gpu/StandardGpuResources.h +131 -130
  106. data/vendor/faiss/faiss/gpu/impl/InterleavedCodes.cpp +468 -456
  107. data/vendor/faiss/faiss/gpu/impl/InterleavedCodes.h +25 -19
  108. data/vendor/faiss/faiss/gpu/impl/RemapIndices.cpp +22 -20
  109. data/vendor/faiss/faiss/gpu/impl/RemapIndices.h +9 -8
  110. data/vendor/faiss/faiss/gpu/perf/IndexWrapper-inl.h +39 -44
  111. data/vendor/faiss/faiss/gpu/perf/IndexWrapper.h +16 -14
  112. data/vendor/faiss/faiss/gpu/perf/PerfClustering.cpp +77 -71
  113. data/vendor/faiss/faiss/gpu/perf/PerfIVFPQAdd.cpp +109 -88
  114. data/vendor/faiss/faiss/gpu/perf/WriteIndex.cpp +75 -64
  115. data/vendor/faiss/faiss/gpu/test/TestCodePacking.cpp +230 -215
  116. data/vendor/faiss/faiss/gpu/test/TestGpuIndexBinaryFlat.cpp +80 -86
  117. data/vendor/faiss/faiss/gpu/test/TestGpuIndexFlat.cpp +284 -277
  118. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFFlat.cpp +416 -416
  119. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFPQ.cpp +611 -517
  120. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFScalarQuantizer.cpp +166 -164
  121. data/vendor/faiss/faiss/gpu/test/TestGpuMemoryException.cpp +61 -53
  122. data/vendor/faiss/faiss/gpu/test/TestUtils.cpp +274 -238
  123. data/vendor/faiss/faiss/gpu/test/TestUtils.h +73 -57
  124. data/vendor/faiss/faiss/gpu/test/demo_ivfpq_indexing_gpu.cpp +47 -50
  125. data/vendor/faiss/faiss/gpu/utils/DeviceUtils.h +79 -72
  126. data/vendor/faiss/faiss/gpu/utils/StackDeviceMemory.cpp +140 -146
  127. data/vendor/faiss/faiss/gpu/utils/StackDeviceMemory.h +69 -71
  128. data/vendor/faiss/faiss/gpu/utils/StaticUtils.h +21 -16
  129. data/vendor/faiss/faiss/gpu/utils/Timer.cpp +25 -29
  130. data/vendor/faiss/faiss/gpu/utils/Timer.h +30 -29
  131. data/vendor/faiss/faiss/impl/AdditiveQuantizer.cpp +503 -0
  132. data/vendor/faiss/faiss/impl/AdditiveQuantizer.h +175 -0
  133. data/vendor/faiss/faiss/impl/AuxIndexStructures.cpp +90 -120
  134. data/vendor/faiss/faiss/impl/AuxIndexStructures.h +81 -65
  135. data/vendor/faiss/faiss/impl/FaissAssert.h +73 -58
  136. data/vendor/faiss/faiss/impl/FaissException.cpp +56 -48
  137. data/vendor/faiss/faiss/impl/FaissException.h +41 -29
  138. data/vendor/faiss/faiss/impl/HNSW.cpp +606 -617
  139. data/vendor/faiss/faiss/impl/HNSW.h +179 -200
  140. data/vendor/faiss/faiss/impl/LocalSearchQuantizer.cpp +855 -0
  141. data/vendor/faiss/faiss/impl/LocalSearchQuantizer.h +244 -0
  142. data/vendor/faiss/faiss/impl/NNDescent.cpp +487 -0
  143. data/vendor/faiss/faiss/impl/NNDescent.h +154 -0
  144. data/vendor/faiss/faiss/impl/NSG.cpp +679 -0
  145. data/vendor/faiss/faiss/impl/NSG.h +199 -0
  146. data/vendor/faiss/faiss/impl/PolysemousTraining.cpp +484 -454
  147. data/vendor/faiss/faiss/impl/PolysemousTraining.h +52 -55
  148. data/vendor/faiss/faiss/impl/ProductQuantizer-inl.h +26 -47
  149. data/vendor/faiss/faiss/impl/ProductQuantizer.cpp +469 -459
  150. data/vendor/faiss/faiss/impl/ProductQuantizer.h +76 -87
  151. data/vendor/faiss/faiss/impl/ResidualQuantizer.cpp +758 -0
  152. data/vendor/faiss/faiss/impl/ResidualQuantizer.h +188 -0
  153. data/vendor/faiss/faiss/impl/ResultHandler.h +96 -132
  154. data/vendor/faiss/faiss/impl/ScalarQuantizer.cpp +647 -707
  155. data/vendor/faiss/faiss/impl/ScalarQuantizer.h +48 -46
  156. data/vendor/faiss/faiss/impl/ThreadedIndex-inl.h +129 -131
  157. data/vendor/faiss/faiss/impl/ThreadedIndex.h +61 -55
  158. data/vendor/faiss/faiss/impl/index_read.cpp +631 -480
  159. data/vendor/faiss/faiss/impl/index_write.cpp +547 -407
  160. data/vendor/faiss/faiss/impl/io.cpp +76 -95
  161. data/vendor/faiss/faiss/impl/io.h +31 -41
  162. data/vendor/faiss/faiss/impl/io_macros.h +60 -29
  163. data/vendor/faiss/faiss/impl/kmeans1d.cpp +301 -0
  164. data/vendor/faiss/faiss/impl/kmeans1d.h +48 -0
  165. data/vendor/faiss/faiss/impl/lattice_Zn.cpp +137 -186
  166. data/vendor/faiss/faiss/impl/lattice_Zn.h +40 -51
  167. data/vendor/faiss/faiss/impl/platform_macros.h +29 -8
  168. data/vendor/faiss/faiss/impl/pq4_fast_scan.cpp +77 -124
  169. data/vendor/faiss/faiss/impl/pq4_fast_scan.h +39 -48
  170. data/vendor/faiss/faiss/impl/pq4_fast_scan_search_1.cpp +41 -52
  171. data/vendor/faiss/faiss/impl/pq4_fast_scan_search_qbs.cpp +80 -117
  172. data/vendor/faiss/faiss/impl/simd_result_handlers.h +109 -137
  173. data/vendor/faiss/faiss/index_factory.cpp +619 -397
  174. data/vendor/faiss/faiss/index_factory.h +8 -6
  175. data/vendor/faiss/faiss/index_io.h +23 -26
  176. data/vendor/faiss/faiss/invlists/BlockInvertedLists.cpp +67 -75
  177. data/vendor/faiss/faiss/invlists/BlockInvertedLists.h +22 -24
  178. data/vendor/faiss/faiss/invlists/DirectMap.cpp +96 -112
  179. data/vendor/faiss/faiss/invlists/DirectMap.h +29 -33
  180. data/vendor/faiss/faiss/invlists/InvertedLists.cpp +307 -364
  181. data/vendor/faiss/faiss/invlists/InvertedLists.h +151 -151
  182. data/vendor/faiss/faiss/invlists/InvertedListsIOHook.cpp +29 -34
  183. data/vendor/faiss/faiss/invlists/InvertedListsIOHook.h +17 -18
  184. data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.cpp +257 -293
  185. data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.h +50 -45
  186. data/vendor/faiss/faiss/python/python_callbacks.cpp +23 -26
  187. data/vendor/faiss/faiss/python/python_callbacks.h +9 -16
  188. data/vendor/faiss/faiss/utils/AlignedTable.h +79 -44
  189. data/vendor/faiss/faiss/utils/Heap.cpp +40 -48
  190. data/vendor/faiss/faiss/utils/Heap.h +186 -209
  191. data/vendor/faiss/faiss/utils/WorkerThread.cpp +67 -76
  192. data/vendor/faiss/faiss/utils/WorkerThread.h +32 -33
  193. data/vendor/faiss/faiss/utils/distances.cpp +305 -312
  194. data/vendor/faiss/faiss/utils/distances.h +170 -122
  195. data/vendor/faiss/faiss/utils/distances_simd.cpp +498 -508
  196. data/vendor/faiss/faiss/utils/extra_distances-inl.h +117 -0
  197. data/vendor/faiss/faiss/utils/extra_distances.cpp +113 -232
  198. data/vendor/faiss/faiss/utils/extra_distances.h +30 -29
  199. data/vendor/faiss/faiss/utils/hamming-inl.h +260 -209
  200. data/vendor/faiss/faiss/utils/hamming.cpp +375 -469
  201. data/vendor/faiss/faiss/utils/hamming.h +62 -85
  202. data/vendor/faiss/faiss/utils/ordered_key_value.h +16 -18
  203. data/vendor/faiss/faiss/utils/partitioning.cpp +393 -318
  204. data/vendor/faiss/faiss/utils/partitioning.h +26 -21
  205. data/vendor/faiss/faiss/utils/quantize_lut.cpp +78 -66
  206. data/vendor/faiss/faiss/utils/quantize_lut.h +22 -20
  207. data/vendor/faiss/faiss/utils/random.cpp +39 -63
  208. data/vendor/faiss/faiss/utils/random.h +13 -16
  209. data/vendor/faiss/faiss/utils/simdlib.h +4 -2
  210. data/vendor/faiss/faiss/utils/simdlib_avx2.h +88 -85
  211. data/vendor/faiss/faiss/utils/simdlib_emulated.h +226 -165
  212. data/vendor/faiss/faiss/utils/simdlib_neon.h +832 -0
  213. data/vendor/faiss/faiss/utils/utils.cpp +304 -287
  214. data/vendor/faiss/faiss/utils/utils.h +54 -49
  215. metadata +29 -4
@@ -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