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
|
@@ -5,49 +5,34 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
// -*- c++ -*-
|
|
9
|
-
|
|
10
8
|
/* All distance functions for L2 and IP distances.
|
|
11
|
-
* The actual functions are implemented in distances.cpp and distances_simd.cpp
|
|
9
|
+
* The actual functions are implemented in distances.cpp and distances_simd.cpp
|
|
10
|
+
*/
|
|
12
11
|
|
|
13
12
|
#pragma once
|
|
14
13
|
|
|
15
14
|
#include <stdint.h>
|
|
16
15
|
|
|
17
|
-
#include <faiss/utils/Heap.h>
|
|
18
16
|
#include <faiss/impl/platform_macros.h>
|
|
19
|
-
|
|
17
|
+
#include <faiss/utils/Heap.h>
|
|
20
18
|
|
|
21
19
|
namespace faiss {
|
|
22
20
|
|
|
23
|
-
|
|
21
|
+
/*********************************************************
|
|
24
22
|
* Optimized distance/norm/inner prod computations
|
|
25
23
|
*********************************************************/
|
|
26
24
|
|
|
27
|
-
|
|
28
25
|
/// Squared L2 distance between two vectors
|
|
29
|
-
float fvec_L2sqr
|
|
30
|
-
const float * x,
|
|
31
|
-
const float * y,
|
|
32
|
-
size_t d);
|
|
26
|
+
float fvec_L2sqr(const float* x, const float* y, size_t d);
|
|
33
27
|
|
|
34
28
|
/// inner product
|
|
35
|
-
float
|
|
36
|
-
const float * x,
|
|
37
|
-
const float * y,
|
|
38
|
-
size_t d);
|
|
29
|
+
float fvec_inner_product(const float* x, const float* y, size_t d);
|
|
39
30
|
|
|
40
31
|
/// L1 distance
|
|
41
|
-
float fvec_L1
|
|
42
|
-
const float * x,
|
|
43
|
-
const float * y,
|
|
44
|
-
size_t d);
|
|
45
|
-
|
|
46
|
-
float fvec_Linf (
|
|
47
|
-
const float * x,
|
|
48
|
-
const float * y,
|
|
49
|
-
size_t d);
|
|
32
|
+
float fvec_L1(const float* x, const float* y, size_t d);
|
|
50
33
|
|
|
34
|
+
/// infinity distance
|
|
35
|
+
float fvec_Linf(const float* x, const float* y, size_t d);
|
|
51
36
|
|
|
52
37
|
/** Compute pairwise distances between sets of vectors
|
|
53
38
|
*
|
|
@@ -59,74 +44,83 @@ float fvec_Linf (
|
|
|
59
44
|
* @param dis output distances (size nq * nb)
|
|
60
45
|
* @param ldq,ldb, ldd strides for the matrices
|
|
61
46
|
*/
|
|
62
|
-
void pairwise_L2sqr
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
47
|
+
void pairwise_L2sqr(
|
|
48
|
+
int64_t d,
|
|
49
|
+
int64_t nq,
|
|
50
|
+
const float* xq,
|
|
51
|
+
int64_t nb,
|
|
52
|
+
const float* xb,
|
|
53
|
+
float* dis,
|
|
54
|
+
int64_t ldq = -1,
|
|
55
|
+
int64_t ldb = -1,
|
|
56
|
+
int64_t ldd = -1);
|
|
67
57
|
|
|
68
58
|
/* compute the inner product between nx vectors x and one y */
|
|
69
|
-
void fvec_inner_products_ny
|
|
70
|
-
float
|
|
71
|
-
const float
|
|
72
|
-
const float
|
|
73
|
-
size_t d,
|
|
59
|
+
void fvec_inner_products_ny(
|
|
60
|
+
float* ip, /* output inner product */
|
|
61
|
+
const float* x,
|
|
62
|
+
const float* y,
|
|
63
|
+
size_t d,
|
|
64
|
+
size_t ny);
|
|
74
65
|
|
|
75
66
|
/* compute ny square L2 distance bewteen x and a set of contiguous y vectors */
|
|
76
|
-
void fvec_L2sqr_ny
|
|
77
|
-
float
|
|
78
|
-
const float
|
|
79
|
-
const float
|
|
80
|
-
size_t d,
|
|
81
|
-
|
|
67
|
+
void fvec_L2sqr_ny(
|
|
68
|
+
float* dis,
|
|
69
|
+
const float* x,
|
|
70
|
+
const float* y,
|
|
71
|
+
size_t d,
|
|
72
|
+
size_t ny);
|
|
82
73
|
|
|
83
74
|
/** squared norm of a vector */
|
|
84
|
-
float fvec_norm_L2sqr
|
|
85
|
-
size_t d);
|
|
75
|
+
float fvec_norm_L2sqr(const float* x, size_t d);
|
|
86
76
|
|
|
87
77
|
/** compute the L2 norms for a set of vectors
|
|
88
78
|
*
|
|
89
|
-
* @param
|
|
79
|
+
* @param norms output norms, size nx
|
|
90
80
|
* @param x set of vectors, size nx * d
|
|
91
81
|
*/
|
|
92
|
-
void fvec_norms_L2
|
|
82
|
+
void fvec_norms_L2(float* norms, const float* x, size_t d, size_t nx);
|
|
93
83
|
|
|
94
|
-
/// same as fvec_norms_L2, but computes
|
|
95
|
-
void fvec_norms_L2sqr
|
|
84
|
+
/// same as fvec_norms_L2, but computes squared norms
|
|
85
|
+
void fvec_norms_L2sqr(float* norms, const float* x, size_t d, size_t nx);
|
|
96
86
|
|
|
97
87
|
/* L2-renormalize a set of vector. Nothing done if the vector is 0-normed */
|
|
98
|
-
void fvec_renorm_L2
|
|
99
|
-
|
|
88
|
+
void fvec_renorm_L2(size_t d, size_t nx, float* x);
|
|
100
89
|
|
|
101
90
|
/* This function exists because the Torch counterpart is extremly slow
|
|
102
91
|
(not multi-threaded + unexpected overhead even in single thread).
|
|
103
92
|
It is here to implement the usual property |x-y|^2=|x|^2+|y|^2-2<x|y> */
|
|
104
|
-
void inner_product_to_L2sqr
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
93
|
+
void inner_product_to_L2sqr(
|
|
94
|
+
float* dis,
|
|
95
|
+
const float* nr1,
|
|
96
|
+
const float* nr2,
|
|
97
|
+
size_t n1,
|
|
98
|
+
size_t n2);
|
|
108
99
|
|
|
109
100
|
/***************************************************************************
|
|
110
101
|
* Compute a subset of distances
|
|
111
102
|
***************************************************************************/
|
|
112
103
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
void fvec_inner_products_by_idx
|
|
116
|
-
float
|
|
117
|
-
const float
|
|
118
|
-
const float
|
|
119
|
-
const int64_t
|
|
120
|
-
size_t d,
|
|
104
|
+
/* compute the inner product between x and a subset y of ny vectors,
|
|
105
|
+
whose indices are given by idy. */
|
|
106
|
+
void fvec_inner_products_by_idx(
|
|
107
|
+
float* ip,
|
|
108
|
+
const float* x,
|
|
109
|
+
const float* y,
|
|
110
|
+
const int64_t* ids,
|
|
111
|
+
size_t d,
|
|
112
|
+
size_t nx,
|
|
113
|
+
size_t ny);
|
|
121
114
|
|
|
122
115
|
/* same but for a subset in y indexed by idsy (ny vectors in total) */
|
|
123
|
-
void fvec_L2sqr_by_idx
|
|
124
|
-
float
|
|
125
|
-
const float
|
|
126
|
-
const float
|
|
127
|
-
const int64_t
|
|
128
|
-
size_t d,
|
|
129
|
-
|
|
116
|
+
void fvec_L2sqr_by_idx(
|
|
117
|
+
float* dis,
|
|
118
|
+
const float* x,
|
|
119
|
+
const float* y,
|
|
120
|
+
const int64_t* ids, /* ids of y vecs */
|
|
121
|
+
size_t d,
|
|
122
|
+
size_t nx,
|
|
123
|
+
size_t ny);
|
|
130
124
|
|
|
131
125
|
/** compute dis[j] = L2sqr(x[ix[j]], y[iy[j]]) forall j=0..n-1
|
|
132
126
|
*
|
|
@@ -136,18 +130,24 @@ void fvec_L2sqr_by_idx (
|
|
|
136
130
|
* @param iy size n
|
|
137
131
|
* @param dis size n
|
|
138
132
|
*/
|
|
139
|
-
void pairwise_indexed_L2sqr
|
|
140
|
-
size_t d,
|
|
141
|
-
|
|
142
|
-
const float
|
|
143
|
-
|
|
133
|
+
void pairwise_indexed_L2sqr(
|
|
134
|
+
size_t d,
|
|
135
|
+
size_t n,
|
|
136
|
+
const float* x,
|
|
137
|
+
const int64_t* ix,
|
|
138
|
+
const float* y,
|
|
139
|
+
const int64_t* iy,
|
|
140
|
+
float* dis);
|
|
144
141
|
|
|
145
142
|
/* same for inner product */
|
|
146
|
-
void pairwise_indexed_inner_product
|
|
147
|
-
size_t d,
|
|
148
|
-
|
|
149
|
-
const float
|
|
150
|
-
|
|
143
|
+
void pairwise_indexed_inner_product(
|
|
144
|
+
size_t d,
|
|
145
|
+
size_t n,
|
|
146
|
+
const float* x,
|
|
147
|
+
const int64_t* ix,
|
|
148
|
+
const float* y,
|
|
149
|
+
const int64_t* iy,
|
|
150
|
+
float* dis);
|
|
151
151
|
|
|
152
152
|
/***************************************************************************
|
|
153
153
|
* KNN functions
|
|
@@ -171,46 +171,51 @@ FAISS_API extern int distance_compute_min_k_reservoir;
|
|
|
171
171
|
* @param y database vectors, size ny * d
|
|
172
172
|
* @param res result array, which also provides k. Sorted on output
|
|
173
173
|
*/
|
|
174
|
-
void knn_inner_product
|
|
175
|
-
const float
|
|
176
|
-
const float
|
|
177
|
-
size_t d,
|
|
178
|
-
|
|
174
|
+
void knn_inner_product(
|
|
175
|
+
const float* x,
|
|
176
|
+
const float* y,
|
|
177
|
+
size_t d,
|
|
178
|
+
size_t nx,
|
|
179
|
+
size_t ny,
|
|
180
|
+
float_minheap_array_t* res);
|
|
179
181
|
|
|
180
182
|
/** Same as knn_inner_product, for the L2 distance
|
|
181
183
|
* @param y_norm2 norms for the y vectors (nullptr or size ny)
|
|
182
184
|
*/
|
|
183
|
-
void knn_L2sqr
|
|
184
|
-
const float
|
|
185
|
-
const float
|
|
186
|
-
size_t d,
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
185
|
+
void knn_L2sqr(
|
|
186
|
+
const float* x,
|
|
187
|
+
const float* y,
|
|
188
|
+
size_t d,
|
|
189
|
+
size_t nx,
|
|
190
|
+
size_t ny,
|
|
191
|
+
float_maxheap_array_t* res,
|
|
192
|
+
const float* y_norm2 = nullptr);
|
|
190
193
|
|
|
191
194
|
/* Find the nearest neighbors for nx queries in a set of ny vectors
|
|
192
195
|
* indexed by ids. May be useful for re-ranking a pre-selected vector list
|
|
193
196
|
*/
|
|
194
|
-
void knn_inner_products_by_idx
|
|
195
|
-
const float
|
|
196
|
-
const float
|
|
197
|
-
const int64_t
|
|
198
|
-
size_t d,
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
const
|
|
205
|
-
|
|
206
|
-
|
|
197
|
+
void knn_inner_products_by_idx(
|
|
198
|
+
const float* x,
|
|
199
|
+
const float* y,
|
|
200
|
+
const int64_t* ids,
|
|
201
|
+
size_t d,
|
|
202
|
+
size_t nx,
|
|
203
|
+
size_t ny,
|
|
204
|
+
float_minheap_array_t* res);
|
|
205
|
+
|
|
206
|
+
void knn_L2sqr_by_idx(
|
|
207
|
+
const float* x,
|
|
208
|
+
const float* y,
|
|
209
|
+
const int64_t* ids,
|
|
210
|
+
size_t d,
|
|
211
|
+
size_t nx,
|
|
212
|
+
size_t ny,
|
|
213
|
+
float_maxheap_array_t* res);
|
|
207
214
|
|
|
208
215
|
/***************************************************************************
|
|
209
216
|
* Range search
|
|
210
217
|
***************************************************************************/
|
|
211
218
|
|
|
212
|
-
|
|
213
|
-
|
|
214
219
|
/// Forward declaration, see AuxIndexStructures.h
|
|
215
220
|
struct RangeSearchResult;
|
|
216
221
|
|
|
@@ -222,21 +227,24 @@ struct RangeSearchResult;
|
|
|
222
227
|
* @param radius search radius around the x vectors
|
|
223
228
|
* @param result result structure
|
|
224
229
|
*/
|
|
225
|
-
void range_search_L2sqr
|
|
226
|
-
const float
|
|
227
|
-
const float
|
|
228
|
-
size_t d,
|
|
230
|
+
void range_search_L2sqr(
|
|
231
|
+
const float* x,
|
|
232
|
+
const float* y,
|
|
233
|
+
size_t d,
|
|
234
|
+
size_t nx,
|
|
235
|
+
size_t ny,
|
|
229
236
|
float radius,
|
|
230
|
-
RangeSearchResult
|
|
237
|
+
RangeSearchResult* result);
|
|
231
238
|
|
|
232
239
|
/// same as range_search_L2sqr for the inner product similarity
|
|
233
|
-
void range_search_inner_product
|
|
234
|
-
const float
|
|
235
|
-
const float
|
|
236
|
-
size_t d,
|
|
240
|
+
void range_search_inner_product(
|
|
241
|
+
const float* x,
|
|
242
|
+
const float* y,
|
|
243
|
+
size_t d,
|
|
244
|
+
size_t nx,
|
|
245
|
+
size_t ny,
|
|
237
246
|
float radius,
|
|
238
|
-
RangeSearchResult
|
|
239
|
-
|
|
247
|
+
RangeSearchResult* result);
|
|
240
248
|
|
|
241
249
|
/***************************************************************************
|
|
242
250
|
* PQ tables computations
|
|
@@ -244,9 +252,16 @@ void range_search_inner_product (
|
|
|
244
252
|
|
|
245
253
|
/// specialized function for PQ2
|
|
246
254
|
void compute_PQ_dis_tables_dsub2(
|
|
247
|
-
size_t d,
|
|
248
|
-
size_t
|
|
255
|
+
size_t d,
|
|
256
|
+
size_t ksub,
|
|
257
|
+
const float* centroids,
|
|
258
|
+
size_t nx,
|
|
259
|
+
const float* x,
|
|
249
260
|
bool is_inner_product,
|
|
250
|
-
float
|
|
261
|
+
float* dis_tables);
|
|
262
|
+
|
|
263
|
+
/***************************************************************************
|
|
264
|
+
* Templatized versions of distance functions
|
|
265
|
+
***************************************************************************/
|
|
251
266
|
|
|
252
267
|
} // namespace faiss
|