faiss 0.2.3 → 0.2.5
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 +9 -0
- data/LICENSE.txt +1 -1
- data/README.md +23 -21
- data/ext/faiss/extconf.rb +11 -0
- data/ext/faiss/index.cpp +4 -4
- data/ext/faiss/index_binary.cpp +6 -6
- data/ext/faiss/product_quantizer.cpp +4 -4
- data/lib/faiss/version.rb +1 -1
- data/vendor/faiss/faiss/AutoTune.cpp +13 -0
- data/vendor/faiss/faiss/Clustering.cpp +32 -0
- data/vendor/faiss/faiss/Clustering.h +14 -0
- data/vendor/faiss/faiss/IVFlib.cpp +101 -2
- data/vendor/faiss/faiss/IVFlib.h +26 -2
- data/vendor/faiss/faiss/Index.cpp +36 -3
- data/vendor/faiss/faiss/Index.h +43 -6
- data/vendor/faiss/faiss/Index2Layer.cpp +24 -93
- data/vendor/faiss/faiss/Index2Layer.h +8 -17
- data/vendor/faiss/faiss/IndexAdditiveQuantizer.cpp +610 -0
- data/vendor/faiss/faiss/IndexAdditiveQuantizer.h +253 -0
- data/vendor/faiss/faiss/IndexAdditiveQuantizerFastScan.cpp +299 -0
- data/vendor/faiss/faiss/IndexAdditiveQuantizerFastScan.h +199 -0
- data/vendor/faiss/faiss/IndexBinary.cpp +20 -4
- data/vendor/faiss/faiss/IndexBinary.h +18 -3
- data/vendor/faiss/faiss/IndexBinaryFlat.cpp +9 -2
- data/vendor/faiss/faiss/IndexBinaryFlat.h +4 -2
- data/vendor/faiss/faiss/IndexBinaryFromFloat.cpp +4 -1
- data/vendor/faiss/faiss/IndexBinaryFromFloat.h +2 -1
- data/vendor/faiss/faiss/IndexBinaryHNSW.cpp +5 -1
- data/vendor/faiss/faiss/IndexBinaryHNSW.h +2 -1
- data/vendor/faiss/faiss/IndexBinaryHash.cpp +17 -4
- data/vendor/faiss/faiss/IndexBinaryHash.h +8 -4
- data/vendor/faiss/faiss/IndexBinaryIVF.cpp +28 -13
- data/vendor/faiss/faiss/IndexBinaryIVF.h +10 -7
- data/vendor/faiss/faiss/IndexFastScan.cpp +626 -0
- data/vendor/faiss/faiss/IndexFastScan.h +145 -0
- data/vendor/faiss/faiss/IndexFlat.cpp +52 -69
- data/vendor/faiss/faiss/IndexFlat.h +16 -19
- data/vendor/faiss/faiss/IndexFlatCodes.cpp +101 -0
- data/vendor/faiss/faiss/IndexFlatCodes.h +59 -0
- data/vendor/faiss/faiss/IndexHNSW.cpp +66 -138
- data/vendor/faiss/faiss/IndexHNSW.h +4 -2
- data/vendor/faiss/faiss/IndexIDMap.cpp +247 -0
- data/vendor/faiss/faiss/IndexIDMap.h +107 -0
- data/vendor/faiss/faiss/IndexIVF.cpp +200 -40
- data/vendor/faiss/faiss/IndexIVF.h +59 -22
- data/vendor/faiss/faiss/IndexIVFAdditiveQuantizer.cpp +393 -0
- data/vendor/faiss/faiss/IndexIVFAdditiveQuantizer.h +183 -0
- data/vendor/faiss/faiss/IndexIVFAdditiveQuantizerFastScan.cpp +590 -0
- data/vendor/faiss/faiss/IndexIVFAdditiveQuantizerFastScan.h +171 -0
- data/vendor/faiss/faiss/IndexIVFFastScan.cpp +1290 -0
- data/vendor/faiss/faiss/IndexIVFFastScan.h +213 -0
- data/vendor/faiss/faiss/IndexIVFFlat.cpp +43 -26
- data/vendor/faiss/faiss/IndexIVFFlat.h +4 -2
- data/vendor/faiss/faiss/IndexIVFPQ.cpp +238 -53
- data/vendor/faiss/faiss/IndexIVFPQ.h +6 -2
- data/vendor/faiss/faiss/IndexIVFPQFastScan.cpp +23 -852
- data/vendor/faiss/faiss/IndexIVFPQFastScan.h +7 -112
- data/vendor/faiss/faiss/IndexIVFPQR.cpp +3 -3
- data/vendor/faiss/faiss/IndexIVFPQR.h +1 -1
- data/vendor/faiss/faiss/IndexIVFSpectralHash.cpp +63 -40
- data/vendor/faiss/faiss/IndexIVFSpectralHash.h +23 -7
- data/vendor/faiss/faiss/IndexLSH.cpp +8 -32
- data/vendor/faiss/faiss/IndexLSH.h +4 -16
- data/vendor/faiss/faiss/IndexLattice.cpp +7 -1
- data/vendor/faiss/faiss/IndexLattice.h +3 -1
- data/vendor/faiss/faiss/IndexNNDescent.cpp +4 -5
- data/vendor/faiss/faiss/IndexNNDescent.h +2 -1
- data/vendor/faiss/faiss/IndexNSG.cpp +37 -5
- data/vendor/faiss/faiss/IndexNSG.h +25 -1
- data/vendor/faiss/faiss/IndexPQ.cpp +108 -120
- data/vendor/faiss/faiss/IndexPQ.h +21 -22
- data/vendor/faiss/faiss/IndexPQFastScan.cpp +15 -450
- data/vendor/faiss/faiss/IndexPQFastScan.h +15 -78
- data/vendor/faiss/faiss/IndexPreTransform.cpp +47 -8
- data/vendor/faiss/faiss/IndexPreTransform.h +15 -3
- data/vendor/faiss/faiss/IndexRefine.cpp +36 -4
- data/vendor/faiss/faiss/IndexRefine.h +14 -2
- data/vendor/faiss/faiss/IndexReplicas.cpp +4 -2
- data/vendor/faiss/faiss/IndexReplicas.h +2 -1
- data/vendor/faiss/faiss/IndexRowwiseMinMax.cpp +438 -0
- data/vendor/faiss/faiss/IndexRowwiseMinMax.h +92 -0
- data/vendor/faiss/faiss/IndexScalarQuantizer.cpp +28 -43
- data/vendor/faiss/faiss/IndexScalarQuantizer.h +8 -23
- data/vendor/faiss/faiss/IndexShards.cpp +4 -1
- data/vendor/faiss/faiss/IndexShards.h +2 -1
- data/vendor/faiss/faiss/MetaIndexes.cpp +5 -178
- data/vendor/faiss/faiss/MetaIndexes.h +3 -81
- data/vendor/faiss/faiss/VectorTransform.cpp +45 -1
- data/vendor/faiss/faiss/VectorTransform.h +25 -4
- data/vendor/faiss/faiss/clone_index.cpp +26 -3
- data/vendor/faiss/faiss/clone_index.h +3 -0
- data/vendor/faiss/faiss/cppcontrib/SaDecodeKernels.h +300 -0
- data/vendor/faiss/faiss/cppcontrib/detail/CoarseBitType.h +24 -0
- data/vendor/faiss/faiss/cppcontrib/detail/UintReader.h +195 -0
- data/vendor/faiss/faiss/cppcontrib/sa_decode/Level2-avx2-inl.h +2058 -0
- data/vendor/faiss/faiss/cppcontrib/sa_decode/Level2-inl.h +408 -0
- data/vendor/faiss/faiss/cppcontrib/sa_decode/Level2-neon-inl.h +2147 -0
- data/vendor/faiss/faiss/cppcontrib/sa_decode/MinMax-inl.h +460 -0
- data/vendor/faiss/faiss/cppcontrib/sa_decode/MinMaxFP16-inl.h +465 -0
- data/vendor/faiss/faiss/cppcontrib/sa_decode/PQ-avx2-inl.h +1618 -0
- data/vendor/faiss/faiss/cppcontrib/sa_decode/PQ-inl.h +251 -0
- data/vendor/faiss/faiss/cppcontrib/sa_decode/PQ-neon-inl.h +1452 -0
- data/vendor/faiss/faiss/gpu/GpuAutoTune.cpp +1 -0
- data/vendor/faiss/faiss/gpu/GpuCloner.cpp +2 -6
- data/vendor/faiss/faiss/gpu/GpuIcmEncoder.h +60 -0
- data/vendor/faiss/faiss/gpu/GpuIndex.h +28 -4
- data/vendor/faiss/faiss/gpu/GpuIndexBinaryFlat.h +2 -1
- data/vendor/faiss/faiss/gpu/GpuIndexFlat.h +10 -8
- data/vendor/faiss/faiss/gpu/GpuIndexIVF.h +75 -14
- data/vendor/faiss/faiss/gpu/GpuIndexIVFFlat.h +19 -32
- data/vendor/faiss/faiss/gpu/GpuIndexIVFPQ.h +22 -31
- data/vendor/faiss/faiss/gpu/GpuIndexIVFScalarQuantizer.h +22 -28
- data/vendor/faiss/faiss/gpu/GpuResources.cpp +14 -0
- data/vendor/faiss/faiss/gpu/GpuResources.h +16 -3
- data/vendor/faiss/faiss/gpu/StandardGpuResources.cpp +3 -3
- data/vendor/faiss/faiss/gpu/impl/IndexUtils.h +32 -0
- data/vendor/faiss/faiss/gpu/test/TestGpuIndexBinaryFlat.cpp +1 -0
- data/vendor/faiss/faiss/gpu/test/TestGpuIndexFlat.cpp +311 -75
- data/vendor/faiss/faiss/gpu/test/TestUtils.cpp +10 -0
- data/vendor/faiss/faiss/gpu/test/TestUtils.h +3 -0
- data/vendor/faiss/faiss/gpu/test/demo_ivfpq_indexing_gpu.cpp +2 -2
- data/vendor/faiss/faiss/gpu/utils/DeviceUtils.h +5 -4
- data/vendor/faiss/faiss/impl/AdditiveQuantizer.cpp +331 -29
- data/vendor/faiss/faiss/impl/AdditiveQuantizer.h +110 -19
- data/vendor/faiss/faiss/impl/AuxIndexStructures.cpp +0 -54
- data/vendor/faiss/faiss/impl/AuxIndexStructures.h +0 -76
- data/vendor/faiss/faiss/impl/DistanceComputer.h +64 -0
- data/vendor/faiss/faiss/impl/HNSW.cpp +133 -32
- data/vendor/faiss/faiss/impl/HNSW.h +19 -16
- data/vendor/faiss/faiss/impl/IDSelector.cpp +125 -0
- data/vendor/faiss/faiss/impl/IDSelector.h +135 -0
- data/vendor/faiss/faiss/impl/LocalSearchQuantizer.cpp +378 -217
- data/vendor/faiss/faiss/impl/LocalSearchQuantizer.h +106 -29
- data/vendor/faiss/faiss/impl/LookupTableScaler.h +77 -0
- data/vendor/faiss/faiss/impl/NNDescent.cpp +1 -0
- data/vendor/faiss/faiss/impl/NSG.cpp +1 -4
- data/vendor/faiss/faiss/impl/NSG.h +1 -1
- data/vendor/faiss/faiss/impl/ProductAdditiveQuantizer.cpp +383 -0
- data/vendor/faiss/faiss/impl/ProductAdditiveQuantizer.h +154 -0
- data/vendor/faiss/faiss/impl/ProductQuantizer.cpp +225 -145
- data/vendor/faiss/faiss/impl/ProductQuantizer.h +29 -10
- data/vendor/faiss/faiss/impl/Quantizer.h +43 -0
- data/vendor/faiss/faiss/impl/ResidualQuantizer.cpp +521 -55
- data/vendor/faiss/faiss/impl/ResidualQuantizer.h +94 -16
- data/vendor/faiss/faiss/impl/ResultHandler.h +96 -0
- data/vendor/faiss/faiss/impl/ScalarQuantizer.cpp +108 -191
- data/vendor/faiss/faiss/impl/ScalarQuantizer.h +18 -18
- data/vendor/faiss/faiss/impl/index_read.cpp +338 -24
- data/vendor/faiss/faiss/impl/index_write.cpp +300 -18
- data/vendor/faiss/faiss/impl/io.cpp +1 -1
- data/vendor/faiss/faiss/impl/io_macros.h +20 -0
- data/vendor/faiss/faiss/impl/kmeans1d.cpp +303 -0
- data/vendor/faiss/faiss/impl/kmeans1d.h +48 -0
- data/vendor/faiss/faiss/impl/pq4_fast_scan.cpp +56 -16
- data/vendor/faiss/faiss/impl/pq4_fast_scan.h +25 -8
- data/vendor/faiss/faiss/impl/pq4_fast_scan_search_1.cpp +66 -25
- data/vendor/faiss/faiss/impl/pq4_fast_scan_search_qbs.cpp +75 -27
- data/vendor/faiss/faiss/index_factory.cpp +772 -412
- data/vendor/faiss/faiss/index_factory.h +3 -0
- data/vendor/faiss/faiss/index_io.h +5 -0
- data/vendor/faiss/faiss/invlists/DirectMap.cpp +1 -0
- data/vendor/faiss/faiss/invlists/InvertedLists.cpp +4 -1
- data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.cpp +2 -1
- data/vendor/faiss/faiss/python/python_callbacks.cpp +27 -0
- data/vendor/faiss/faiss/python/python_callbacks.h +15 -0
- data/vendor/faiss/faiss/utils/Heap.h +31 -15
- data/vendor/faiss/faiss/utils/distances.cpp +384 -58
- data/vendor/faiss/faiss/utils/distances.h +149 -18
- data/vendor/faiss/faiss/utils/distances_simd.cpp +776 -6
- data/vendor/faiss/faiss/utils/extra_distances.cpp +12 -7
- data/vendor/faiss/faiss/utils/extra_distances.h +3 -1
- data/vendor/faiss/faiss/utils/fp16-fp16c.h +21 -0
- data/vendor/faiss/faiss/utils/fp16-inl.h +101 -0
- data/vendor/faiss/faiss/utils/fp16.h +11 -0
- data/vendor/faiss/faiss/utils/hamming-inl.h +54 -0
- data/vendor/faiss/faiss/utils/hamming.cpp +0 -48
- data/vendor/faiss/faiss/utils/ordered_key_value.h +10 -0
- data/vendor/faiss/faiss/utils/quantize_lut.cpp +62 -0
- data/vendor/faiss/faiss/utils/quantize_lut.h +20 -0
- data/vendor/faiss/faiss/utils/random.cpp +53 -0
- data/vendor/faiss/faiss/utils/random.h +5 -0
- data/vendor/faiss/faiss/utils/simdlib_avx2.h +4 -0
- data/vendor/faiss/faiss/utils/simdlib_emulated.h +6 -1
- data/vendor/faiss/faiss/utils/simdlib_neon.h +7 -2
- data/vendor/faiss/faiss/utils/utils.h +1 -1
- metadata +46 -5
- data/vendor/faiss/faiss/IndexResidual.cpp +0 -291
- data/vendor/faiss/faiss/IndexResidual.h +0 -152
|
@@ -18,6 +18,8 @@
|
|
|
18
18
|
|
|
19
19
|
namespace faiss {
|
|
20
20
|
|
|
21
|
+
struct IDSelector;
|
|
22
|
+
|
|
21
23
|
/*********************************************************
|
|
22
24
|
* Optimized distance/norm/inner prod computations
|
|
23
25
|
*********************************************************/
|
|
@@ -40,7 +42,7 @@ float fvec_Linf(const float* x, const float* y, size_t d);
|
|
|
40
42
|
* @param nq nb of query vectors
|
|
41
43
|
* @param nb nb of database vectors
|
|
42
44
|
* @param xq query vectors (size nq * d)
|
|
43
|
-
* @param xb database
|
|
45
|
+
* @param xb database vectors (size nb * d)
|
|
44
46
|
* @param dis output distances (size nq * nb)
|
|
45
47
|
* @param ldq,ldb, ldd strides for the matrices
|
|
46
48
|
*/
|
|
@@ -63,7 +65,7 @@ void fvec_inner_products_ny(
|
|
|
63
65
|
size_t d,
|
|
64
66
|
size_t ny);
|
|
65
67
|
|
|
66
|
-
/* compute ny square L2 distance
|
|
68
|
+
/* compute ny square L2 distance between x and a set of contiguous y vectors */
|
|
67
69
|
void fvec_L2sqr_ny(
|
|
68
70
|
float* dis,
|
|
69
71
|
const float* x,
|
|
@@ -71,6 +73,29 @@ void fvec_L2sqr_ny(
|
|
|
71
73
|
size_t d,
|
|
72
74
|
size_t ny);
|
|
73
75
|
|
|
76
|
+
/* compute ny square L2 distance between x and a set of contiguous y vectors
|
|
77
|
+
and return the index of the nearest vector.
|
|
78
|
+
return 0 if ny == 0. */
|
|
79
|
+
size_t fvec_L2sqr_ny_nearest(
|
|
80
|
+
float* distances_tmp_buffer,
|
|
81
|
+
const float* x,
|
|
82
|
+
const float* y,
|
|
83
|
+
size_t d,
|
|
84
|
+
size_t ny);
|
|
85
|
+
|
|
86
|
+
/* compute ny square L2 distance between x and a set of transposed contiguous
|
|
87
|
+
y vectors and return the index of the nearest vector.
|
|
88
|
+
squared lengths of y should be provided as well
|
|
89
|
+
return 0 if ny == 0. */
|
|
90
|
+
size_t fvec_L2sqr_ny_nearest_y_transposed(
|
|
91
|
+
float* distances_tmp_buffer,
|
|
92
|
+
const float* x,
|
|
93
|
+
const float* y,
|
|
94
|
+
const float* y_sqlen,
|
|
95
|
+
size_t d,
|
|
96
|
+
size_t d_offset,
|
|
97
|
+
size_t ny);
|
|
98
|
+
|
|
74
99
|
/** squared norm of a vector */
|
|
75
100
|
float fvec_norm_L2sqr(const float* x, size_t d);
|
|
76
101
|
|
|
@@ -87,7 +112,7 @@ void fvec_norms_L2sqr(float* norms, const float* x, size_t d, size_t nx);
|
|
|
87
112
|
/* L2-renormalize a set of vector. Nothing done if the vector is 0-normed */
|
|
88
113
|
void fvec_renorm_L2(size_t d, size_t nx, float* x);
|
|
89
114
|
|
|
90
|
-
/* This function exists because the Torch counterpart is
|
|
115
|
+
/* This function exists because the Torch counterpart is extremely slow
|
|
91
116
|
(not multi-threaded + unexpected overhead even in single thread).
|
|
92
117
|
It is here to implement the usual property |x-y|^2=|x|^2+|y|^2-2<x|y> */
|
|
93
118
|
void inner_product_to_L2sqr(
|
|
@@ -97,6 +122,39 @@ void inner_product_to_L2sqr(
|
|
|
97
122
|
size_t n1,
|
|
98
123
|
size_t n2);
|
|
99
124
|
|
|
125
|
+
/*********************************************************
|
|
126
|
+
* Vector to vector functions
|
|
127
|
+
*********************************************************/
|
|
128
|
+
|
|
129
|
+
/** compute c := a + b for vectors
|
|
130
|
+
*
|
|
131
|
+
* c and a can overlap, c and b can overlap
|
|
132
|
+
*
|
|
133
|
+
* @param a size d
|
|
134
|
+
* @param b size d
|
|
135
|
+
* @param c size d
|
|
136
|
+
*/
|
|
137
|
+
void fvec_add(size_t d, const float* a, const float* b, float* c);
|
|
138
|
+
|
|
139
|
+
/** compute c := a + b for a, c vectors and b a scalar
|
|
140
|
+
*
|
|
141
|
+
* c and a can overlap
|
|
142
|
+
*
|
|
143
|
+
* @param a size d
|
|
144
|
+
* @param c size d
|
|
145
|
+
*/
|
|
146
|
+
void fvec_add(size_t d, const float* a, float b, float* c);
|
|
147
|
+
|
|
148
|
+
/** compute c := a - b for vectors
|
|
149
|
+
*
|
|
150
|
+
* c and a can overlap, c and b can overlap
|
|
151
|
+
*
|
|
152
|
+
* @param a size d
|
|
153
|
+
* @param b size d
|
|
154
|
+
* @param c size d
|
|
155
|
+
*/
|
|
156
|
+
void fvec_sub(size_t d, const float* a, const float* b, float* c);
|
|
157
|
+
|
|
100
158
|
/***************************************************************************
|
|
101
159
|
* Compute a subset of distances
|
|
102
160
|
***************************************************************************/
|
|
@@ -165,11 +223,28 @@ FAISS_API extern int distance_compute_blas_database_bs;
|
|
|
165
223
|
FAISS_API extern int distance_compute_min_k_reservoir;
|
|
166
224
|
|
|
167
225
|
/** Return the k nearest neighors of each of the nx vectors x among the ny
|
|
168
|
-
* vector y, w.r.t to max inner product
|
|
226
|
+
* vector y, w.r.t to max inner product.
|
|
227
|
+
*
|
|
228
|
+
* @param x query vectors, size nx * d
|
|
229
|
+
* @param y database vectors, size ny * d
|
|
230
|
+
* @param res result heap structure, which also provides k. Sorted on output
|
|
231
|
+
*/
|
|
232
|
+
void knn_inner_product(
|
|
233
|
+
const float* x,
|
|
234
|
+
const float* y,
|
|
235
|
+
size_t d,
|
|
236
|
+
size_t nx,
|
|
237
|
+
size_t ny,
|
|
238
|
+
float_minheap_array_t* res,
|
|
239
|
+
const IDSelector* sel = nullptr);
|
|
240
|
+
|
|
241
|
+
/** Return the k nearest neighors of each of the nx vectors x among the ny
|
|
242
|
+
* vector y, for the inner product metric.
|
|
169
243
|
*
|
|
170
244
|
* @param x query vectors, size nx * d
|
|
171
245
|
* @param y database vectors, size ny * d
|
|
172
|
-
* @param
|
|
246
|
+
* @param distances output distances, size nq * k
|
|
247
|
+
* @param indexes output vector ids, size nq * k
|
|
173
248
|
*/
|
|
174
249
|
void knn_inner_product(
|
|
175
250
|
const float* x,
|
|
@@ -177,10 +252,18 @@ void knn_inner_product(
|
|
|
177
252
|
size_t d,
|
|
178
253
|
size_t nx,
|
|
179
254
|
size_t ny,
|
|
180
|
-
|
|
255
|
+
size_t k,
|
|
256
|
+
float* distances,
|
|
257
|
+
int64_t* indexes,
|
|
258
|
+
const IDSelector* sel = nullptr);
|
|
181
259
|
|
|
182
|
-
/**
|
|
183
|
-
*
|
|
260
|
+
/** Return the k nearest neighors of each of the nx vectors x among the ny
|
|
261
|
+
* vector y, for the L2 distance
|
|
262
|
+
* @param x query vectors, size nx * d
|
|
263
|
+
* @param y database vectors, size ny * d
|
|
264
|
+
* @param res result heap strcture, which also provides k. Sorted on output
|
|
265
|
+
* @param y_norm2 (optional) norms for the y vectors (nullptr or size ny)
|
|
266
|
+
* @param sel search in this subset of vectors
|
|
184
267
|
*/
|
|
185
268
|
void knn_L2sqr(
|
|
186
269
|
const float* x,
|
|
@@ -189,28 +272,74 @@ void knn_L2sqr(
|
|
|
189
272
|
size_t nx,
|
|
190
273
|
size_t ny,
|
|
191
274
|
float_maxheap_array_t* res,
|
|
192
|
-
const float* y_norm2 = nullptr
|
|
275
|
+
const float* y_norm2 = nullptr,
|
|
276
|
+
const IDSelector* sel = nullptr);
|
|
193
277
|
|
|
194
|
-
|
|
278
|
+
/** Return the k nearest neighors of each of the nx vectors x among the ny
|
|
279
|
+
* vector y, for the L2 distance
|
|
280
|
+
*
|
|
281
|
+
* @param x query vectors, size nx * d
|
|
282
|
+
* @param y database vectors, size ny * d
|
|
283
|
+
* @param distances output distances, size nq * k
|
|
284
|
+
* @param indexes output vector ids, size nq * k
|
|
285
|
+
* @param y_norm2 (optional) norms for the y vectors (nullptr or size ny)
|
|
286
|
+
* @param sel search in this subset of vectors
|
|
287
|
+
*/
|
|
288
|
+
void knn_L2sqr(
|
|
289
|
+
const float* x,
|
|
290
|
+
const float* y,
|
|
291
|
+
size_t d,
|
|
292
|
+
size_t nx,
|
|
293
|
+
size_t ny,
|
|
294
|
+
size_t k,
|
|
295
|
+
float* distances,
|
|
296
|
+
int64_t* indexes,
|
|
297
|
+
const float* y_norm2 = nullptr,
|
|
298
|
+
const IDSelector* sel = nullptr);
|
|
299
|
+
|
|
300
|
+
/** Find the max inner product neighbors for nx queries in a set of ny vectors
|
|
195
301
|
* indexed by ids. May be useful for re-ranking a pre-selected vector list
|
|
302
|
+
*
|
|
303
|
+
* @param x query vectors, size nx * d
|
|
304
|
+
* @param y database vectors, size (max(ids) + 1) * d
|
|
305
|
+
* @param ids subset of database vectors to consider, size (nx, nsubset)
|
|
306
|
+
* @param res result structure
|
|
307
|
+
* @param ld_ids stride for the ids array. -1: use nsubset, 0: all queries
|
|
308
|
+
* process the same subset
|
|
196
309
|
*/
|
|
197
310
|
void knn_inner_products_by_idx(
|
|
198
311
|
const float* x,
|
|
199
312
|
const float* y,
|
|
200
|
-
const int64_t*
|
|
313
|
+
const int64_t* subset,
|
|
201
314
|
size_t d,
|
|
202
315
|
size_t nx,
|
|
203
|
-
size_t
|
|
204
|
-
|
|
316
|
+
size_t nsubset,
|
|
317
|
+
size_t k,
|
|
318
|
+
float* vals,
|
|
319
|
+
int64_t* ids,
|
|
320
|
+
int64_t ld_ids = -1);
|
|
205
321
|
|
|
322
|
+
/** Find the nearest neighbors for nx queries in a set of ny vectors
|
|
323
|
+
* indexed by ids. May be useful for re-ranking a pre-selected vector list
|
|
324
|
+
*
|
|
325
|
+
* @param x query vectors, size nx * d
|
|
326
|
+
* @param y database vectors, size (max(ids) + 1) * d
|
|
327
|
+
* @param subset subset of database vectors to consider, size (nx, nsubset)
|
|
328
|
+
* @param res rIDesult structure
|
|
329
|
+
* @param ld_subset stride for the subset array. -1: use nsubset, 0: all queries
|
|
330
|
+
* process the same subset
|
|
331
|
+
*/
|
|
206
332
|
void knn_L2sqr_by_idx(
|
|
207
333
|
const float* x,
|
|
208
334
|
const float* y,
|
|
209
|
-
const int64_t*
|
|
335
|
+
const int64_t* subset,
|
|
210
336
|
size_t d,
|
|
211
337
|
size_t nx,
|
|
212
|
-
size_t
|
|
213
|
-
|
|
338
|
+
size_t nsubset,
|
|
339
|
+
size_t k,
|
|
340
|
+
float* vals,
|
|
341
|
+
int64_t* ids,
|
|
342
|
+
int64_t ld_subset = -1);
|
|
214
343
|
|
|
215
344
|
/***************************************************************************
|
|
216
345
|
* Range search
|
|
@@ -234,7 +363,8 @@ void range_search_L2sqr(
|
|
|
234
363
|
size_t nx,
|
|
235
364
|
size_t ny,
|
|
236
365
|
float radius,
|
|
237
|
-
RangeSearchResult* result
|
|
366
|
+
RangeSearchResult* result,
|
|
367
|
+
const IDSelector* sel = nullptr);
|
|
238
368
|
|
|
239
369
|
/// same as range_search_L2sqr for the inner product similarity
|
|
240
370
|
void range_search_inner_product(
|
|
@@ -244,7 +374,8 @@ void range_search_inner_product(
|
|
|
244
374
|
size_t nx,
|
|
245
375
|
size_t ny,
|
|
246
376
|
float radius,
|
|
247
|
-
RangeSearchResult* result
|
|
377
|
+
RangeSearchResult* result,
|
|
378
|
+
const IDSelector* sel = nullptr);
|
|
248
379
|
|
|
249
380
|
/***************************************************************************
|
|
250
381
|
* PQ tables computations
|