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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +18 -0
- data/README.md +7 -7
- data/ext/faiss/ext.cpp +1 -1
- data/ext/faiss/extconf.rb +8 -2
- data/ext/faiss/index.cpp +102 -69
- data/ext/faiss/index_binary.cpp +24 -30
- data/ext/faiss/kmeans.cpp +20 -16
- data/ext/faiss/numo.hpp +867 -0
- data/ext/faiss/pca_matrix.cpp +13 -14
- data/ext/faiss/product_quantizer.cpp +23 -24
- data/ext/faiss/utils.cpp +10 -37
- data/ext/faiss/utils.h +2 -13
- data/lib/faiss/version.rb +1 -1
- data/lib/faiss.rb +0 -5
- data/vendor/faiss/faiss/AutoTune.cpp +292 -291
- data/vendor/faiss/faiss/AutoTune.h +55 -56
- data/vendor/faiss/faiss/Clustering.cpp +334 -195
- data/vendor/faiss/faiss/Clustering.h +88 -35
- data/vendor/faiss/faiss/IVFlib.cpp +171 -195
- data/vendor/faiss/faiss/IVFlib.h +48 -51
- data/vendor/faiss/faiss/Index.cpp +85 -103
- data/vendor/faiss/faiss/Index.h +54 -48
- data/vendor/faiss/faiss/Index2Layer.cpp +139 -164
- data/vendor/faiss/faiss/Index2Layer.h +22 -22
- data/vendor/faiss/faiss/IndexBinary.cpp +45 -37
- data/vendor/faiss/faiss/IndexBinary.h +140 -132
- data/vendor/faiss/faiss/IndexBinaryFlat.cpp +73 -53
- data/vendor/faiss/faiss/IndexBinaryFlat.h +29 -24
- data/vendor/faiss/faiss/IndexBinaryFromFloat.cpp +46 -43
- data/vendor/faiss/faiss/IndexBinaryFromFloat.h +16 -15
- data/vendor/faiss/faiss/IndexBinaryHNSW.cpp +215 -232
- data/vendor/faiss/faiss/IndexBinaryHNSW.h +25 -24
- data/vendor/faiss/faiss/IndexBinaryHash.cpp +182 -177
- data/vendor/faiss/faiss/IndexBinaryHash.h +41 -34
- data/vendor/faiss/faiss/IndexBinaryIVF.cpp +489 -461
- data/vendor/faiss/faiss/IndexBinaryIVF.h +97 -68
- data/vendor/faiss/faiss/IndexFlat.cpp +116 -147
- data/vendor/faiss/faiss/IndexFlat.h +35 -46
- data/vendor/faiss/faiss/IndexHNSW.cpp +372 -348
- data/vendor/faiss/faiss/IndexHNSW.h +57 -41
- data/vendor/faiss/faiss/IndexIVF.cpp +474 -454
- data/vendor/faiss/faiss/IndexIVF.h +146 -113
- data/vendor/faiss/faiss/IndexIVFFlat.cpp +248 -250
- data/vendor/faiss/faiss/IndexIVFFlat.h +48 -51
- data/vendor/faiss/faiss/IndexIVFPQ.cpp +457 -516
- data/vendor/faiss/faiss/IndexIVFPQ.h +74 -66
- data/vendor/faiss/faiss/IndexIVFPQFastScan.cpp +406 -372
- data/vendor/faiss/faiss/IndexIVFPQFastScan.h +82 -57
- data/vendor/faiss/faiss/IndexIVFPQR.cpp +104 -102
- data/vendor/faiss/faiss/IndexIVFPQR.h +33 -28
- data/vendor/faiss/faiss/IndexIVFSpectralHash.cpp +125 -133
- data/vendor/faiss/faiss/IndexIVFSpectralHash.h +19 -21
- data/vendor/faiss/faiss/IndexLSH.cpp +75 -96
- data/vendor/faiss/faiss/IndexLSH.h +21 -26
- data/vendor/faiss/faiss/IndexLattice.cpp +42 -56
- data/vendor/faiss/faiss/IndexLattice.h +11 -16
- data/vendor/faiss/faiss/IndexNNDescent.cpp +231 -0
- data/vendor/faiss/faiss/IndexNNDescent.h +72 -0
- data/vendor/faiss/faiss/IndexNSG.cpp +303 -0
- data/vendor/faiss/faiss/IndexNSG.h +85 -0
- data/vendor/faiss/faiss/IndexPQ.cpp +405 -464
- data/vendor/faiss/faiss/IndexPQ.h +64 -67
- data/vendor/faiss/faiss/IndexPQFastScan.cpp +143 -170
- data/vendor/faiss/faiss/IndexPQFastScan.h +46 -32
- data/vendor/faiss/faiss/IndexPreTransform.cpp +120 -150
- data/vendor/faiss/faiss/IndexPreTransform.h +33 -36
- data/vendor/faiss/faiss/IndexRefine.cpp +115 -131
- data/vendor/faiss/faiss/IndexRefine.h +22 -23
- data/vendor/faiss/faiss/IndexReplicas.cpp +147 -153
- data/vendor/faiss/faiss/IndexReplicas.h +62 -56
- data/vendor/faiss/faiss/IndexResidual.cpp +291 -0
- data/vendor/faiss/faiss/IndexResidual.h +152 -0
- data/vendor/faiss/faiss/IndexScalarQuantizer.cpp +120 -155
- data/vendor/faiss/faiss/IndexScalarQuantizer.h +41 -45
- data/vendor/faiss/faiss/IndexShards.cpp +256 -240
- data/vendor/faiss/faiss/IndexShards.h +85 -73
- data/vendor/faiss/faiss/MatrixStats.cpp +112 -97
- data/vendor/faiss/faiss/MatrixStats.h +7 -10
- data/vendor/faiss/faiss/MetaIndexes.cpp +135 -157
- data/vendor/faiss/faiss/MetaIndexes.h +40 -34
- data/vendor/faiss/faiss/MetricType.h +7 -7
- data/vendor/faiss/faiss/VectorTransform.cpp +652 -474
- data/vendor/faiss/faiss/VectorTransform.h +61 -89
- data/vendor/faiss/faiss/clone_index.cpp +77 -73
- data/vendor/faiss/faiss/clone_index.h +4 -9
- data/vendor/faiss/faiss/gpu/GpuAutoTune.cpp +33 -38
- data/vendor/faiss/faiss/gpu/GpuAutoTune.h +11 -9
- data/vendor/faiss/faiss/gpu/GpuCloner.cpp +197 -170
- data/vendor/faiss/faiss/gpu/GpuCloner.h +53 -35
- data/vendor/faiss/faiss/gpu/GpuClonerOptions.cpp +12 -14
- data/vendor/faiss/faiss/gpu/GpuClonerOptions.h +27 -25
- data/vendor/faiss/faiss/gpu/GpuDistance.h +116 -112
- data/vendor/faiss/faiss/gpu/GpuFaissAssert.h +1 -2
- data/vendor/faiss/faiss/gpu/GpuIndex.h +134 -137
- data/vendor/faiss/faiss/gpu/GpuIndexBinaryFlat.h +76 -73
- data/vendor/faiss/faiss/gpu/GpuIndexFlat.h +173 -162
- data/vendor/faiss/faiss/gpu/GpuIndexIVF.h +67 -64
- data/vendor/faiss/faiss/gpu/GpuIndexIVFFlat.h +89 -86
- data/vendor/faiss/faiss/gpu/GpuIndexIVFPQ.h +150 -141
- data/vendor/faiss/faiss/gpu/GpuIndexIVFScalarQuantizer.h +101 -103
- data/vendor/faiss/faiss/gpu/GpuIndicesOptions.h +17 -16
- data/vendor/faiss/faiss/gpu/GpuResources.cpp +116 -128
- data/vendor/faiss/faiss/gpu/GpuResources.h +182 -186
- data/vendor/faiss/faiss/gpu/StandardGpuResources.cpp +433 -422
- data/vendor/faiss/faiss/gpu/StandardGpuResources.h +131 -130
- data/vendor/faiss/faiss/gpu/impl/InterleavedCodes.cpp +468 -456
- data/vendor/faiss/faiss/gpu/impl/InterleavedCodes.h +25 -19
- data/vendor/faiss/faiss/gpu/impl/RemapIndices.cpp +22 -20
- data/vendor/faiss/faiss/gpu/impl/RemapIndices.h +9 -8
- data/vendor/faiss/faiss/gpu/perf/IndexWrapper-inl.h +39 -44
- data/vendor/faiss/faiss/gpu/perf/IndexWrapper.h +16 -14
- data/vendor/faiss/faiss/gpu/perf/PerfClustering.cpp +77 -71
- data/vendor/faiss/faiss/gpu/perf/PerfIVFPQAdd.cpp +109 -88
- data/vendor/faiss/faiss/gpu/perf/WriteIndex.cpp +75 -64
- data/vendor/faiss/faiss/gpu/test/TestCodePacking.cpp +230 -215
- data/vendor/faiss/faiss/gpu/test/TestGpuIndexBinaryFlat.cpp +80 -86
- data/vendor/faiss/faiss/gpu/test/TestGpuIndexFlat.cpp +284 -277
- data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFFlat.cpp +416 -416
- data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFPQ.cpp +611 -517
- data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFScalarQuantizer.cpp +166 -164
- data/vendor/faiss/faiss/gpu/test/TestGpuMemoryException.cpp +61 -53
- data/vendor/faiss/faiss/gpu/test/TestUtils.cpp +274 -238
- data/vendor/faiss/faiss/gpu/test/TestUtils.h +73 -57
- data/vendor/faiss/faiss/gpu/test/demo_ivfpq_indexing_gpu.cpp +47 -50
- data/vendor/faiss/faiss/gpu/utils/DeviceUtils.h +79 -72
- data/vendor/faiss/faiss/gpu/utils/StackDeviceMemory.cpp +140 -146
- data/vendor/faiss/faiss/gpu/utils/StackDeviceMemory.h +69 -71
- data/vendor/faiss/faiss/gpu/utils/StaticUtils.h +21 -16
- data/vendor/faiss/faiss/gpu/utils/Timer.cpp +25 -29
- data/vendor/faiss/faiss/gpu/utils/Timer.h +30 -29
- data/vendor/faiss/faiss/impl/AdditiveQuantizer.cpp +270 -0
- data/vendor/faiss/faiss/impl/AdditiveQuantizer.h +115 -0
- data/vendor/faiss/faiss/impl/AuxIndexStructures.cpp +90 -120
- data/vendor/faiss/faiss/impl/AuxIndexStructures.h +81 -65
- data/vendor/faiss/faiss/impl/FaissAssert.h +73 -58
- data/vendor/faiss/faiss/impl/FaissException.cpp +56 -48
- data/vendor/faiss/faiss/impl/FaissException.h +41 -29
- data/vendor/faiss/faiss/impl/HNSW.cpp +595 -611
- data/vendor/faiss/faiss/impl/HNSW.h +179 -200
- data/vendor/faiss/faiss/impl/LocalSearchQuantizer.cpp +672 -0
- data/vendor/faiss/faiss/impl/LocalSearchQuantizer.h +172 -0
- data/vendor/faiss/faiss/impl/NNDescent.cpp +487 -0
- data/vendor/faiss/faiss/impl/NNDescent.h +154 -0
- data/vendor/faiss/faiss/impl/NSG.cpp +682 -0
- data/vendor/faiss/faiss/impl/NSG.h +199 -0
- data/vendor/faiss/faiss/impl/PolysemousTraining.cpp +484 -454
- data/vendor/faiss/faiss/impl/PolysemousTraining.h +52 -55
- data/vendor/faiss/faiss/impl/ProductQuantizer-inl.h +26 -47
- data/vendor/faiss/faiss/impl/ProductQuantizer.cpp +469 -459
- data/vendor/faiss/faiss/impl/ProductQuantizer.h +76 -87
- data/vendor/faiss/faiss/impl/ResidualQuantizer.cpp +448 -0
- data/vendor/faiss/faiss/impl/ResidualQuantizer.h +130 -0
- data/vendor/faiss/faiss/impl/ResultHandler.h +96 -132
- data/vendor/faiss/faiss/impl/ScalarQuantizer.cpp +648 -701
- data/vendor/faiss/faiss/impl/ScalarQuantizer.h +48 -46
- data/vendor/faiss/faiss/impl/ThreadedIndex-inl.h +129 -131
- data/vendor/faiss/faiss/impl/ThreadedIndex.h +61 -55
- data/vendor/faiss/faiss/impl/index_read.cpp +547 -479
- data/vendor/faiss/faiss/impl/index_write.cpp +497 -407
- data/vendor/faiss/faiss/impl/io.cpp +75 -94
- data/vendor/faiss/faiss/impl/io.h +31 -41
- data/vendor/faiss/faiss/impl/io_macros.h +40 -29
- data/vendor/faiss/faiss/impl/lattice_Zn.cpp +137 -186
- data/vendor/faiss/faiss/impl/lattice_Zn.h +40 -51
- data/vendor/faiss/faiss/impl/platform_macros.h +29 -8
- data/vendor/faiss/faiss/impl/pq4_fast_scan.cpp +77 -124
- data/vendor/faiss/faiss/impl/pq4_fast_scan.h +39 -48
- data/vendor/faiss/faiss/impl/pq4_fast_scan_search_1.cpp +41 -52
- data/vendor/faiss/faiss/impl/pq4_fast_scan_search_qbs.cpp +80 -117
- data/vendor/faiss/faiss/impl/simd_result_handlers.h +109 -137
- data/vendor/faiss/faiss/index_factory.cpp +269 -218
- data/vendor/faiss/faiss/index_factory.h +6 -7
- data/vendor/faiss/faiss/index_io.h +23 -26
- data/vendor/faiss/faiss/invlists/BlockInvertedLists.cpp +67 -75
- data/vendor/faiss/faiss/invlists/BlockInvertedLists.h +22 -24
- data/vendor/faiss/faiss/invlists/DirectMap.cpp +96 -112
- data/vendor/faiss/faiss/invlists/DirectMap.h +29 -33
- data/vendor/faiss/faiss/invlists/InvertedLists.cpp +307 -364
- data/vendor/faiss/faiss/invlists/InvertedLists.h +151 -151
- data/vendor/faiss/faiss/invlists/InvertedListsIOHook.cpp +29 -34
- data/vendor/faiss/faiss/invlists/InvertedListsIOHook.h +17 -18
- data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.cpp +257 -293
- data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.h +50 -45
- data/vendor/faiss/faiss/python/python_callbacks.cpp +23 -26
- data/vendor/faiss/faiss/python/python_callbacks.h +9 -16
- data/vendor/faiss/faiss/utils/AlignedTable.h +79 -44
- data/vendor/faiss/faiss/utils/Heap.cpp +40 -48
- data/vendor/faiss/faiss/utils/Heap.h +186 -209
- data/vendor/faiss/faiss/utils/WorkerThread.cpp +67 -76
- data/vendor/faiss/faiss/utils/WorkerThread.h +32 -33
- data/vendor/faiss/faiss/utils/distances.cpp +301 -310
- data/vendor/faiss/faiss/utils/distances.h +133 -118
- data/vendor/faiss/faiss/utils/distances_simd.cpp +456 -516
- data/vendor/faiss/faiss/utils/extra_distances-inl.h +117 -0
- data/vendor/faiss/faiss/utils/extra_distances.cpp +113 -232
- data/vendor/faiss/faiss/utils/extra_distances.h +30 -29
- data/vendor/faiss/faiss/utils/hamming-inl.h +260 -209
- data/vendor/faiss/faiss/utils/hamming.cpp +375 -469
- data/vendor/faiss/faiss/utils/hamming.h +62 -85
- data/vendor/faiss/faiss/utils/ordered_key_value.h +16 -18
- data/vendor/faiss/faiss/utils/partitioning.cpp +393 -318
- data/vendor/faiss/faiss/utils/partitioning.h +26 -21
- data/vendor/faiss/faiss/utils/quantize_lut.cpp +78 -66
- data/vendor/faiss/faiss/utils/quantize_lut.h +22 -20
- data/vendor/faiss/faiss/utils/random.cpp +39 -63
- data/vendor/faiss/faiss/utils/random.h +13 -16
- data/vendor/faiss/faiss/utils/simdlib.h +4 -2
- data/vendor/faiss/faiss/utils/simdlib_avx2.h +88 -85
- data/vendor/faiss/faiss/utils/simdlib_emulated.h +226 -165
- data/vendor/faiss/faiss/utils/simdlib_neon.h +832 -0
- data/vendor/faiss/faiss/utils/utils.cpp +304 -287
- data/vendor/faiss/faiss/utils/utils.h +53 -48
- metadata +26 -12
- data/lib/faiss/index.rb +0 -20
- data/lib/faiss/index_binary.rb +0 -20
- data/lib/faiss/kmeans.rb +0 -15
- data/lib/faiss/pca_matrix.rb +0 -15
- 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
|
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
|
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
|
73
|
-
|
74
|
-
|
75
|
-
|
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
|
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
|
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
|
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
|
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
|
129
|
-
const uint8_t
|
130
|
-
size_t na,
|
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
|
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
|
147
|
-
const uint8_t
|
148
|
-
const uint8_t
|
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
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
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
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
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
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
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
|
199
|
-
const uint8_t
|
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
|
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
|
210
|
-
const uint8_t
|
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
|
216
|
-
hamdis_t
|
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
|
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
|
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>
|
38
|
-
|
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
|
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
|
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
|
-
|
76
|
+
template <>
|
77
|
+
inline float cmin_nextafter<float>(float x) {
|
82
78
|
return std::nextafterf(x, -HUGE_VALF);
|
83
79
|
}
|
84
80
|
|
85
|
-
template<>
|
81
|
+
template <>
|
82
|
+
inline float cmax_nextafter<float>(float x) {
|
86
83
|
return std::nextafterf(x, HUGE_VALF);
|
87
84
|
}
|
88
85
|
|
89
|
-
template<>
|
86
|
+
template <>
|
87
|
+
inline uint16_t cmin_nextafter<uint16_t>(uint16_t x) {
|
90
88
|
return x - 1;
|
91
89
|
}
|
92
90
|
|
93
|
-
template<>
|
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
|