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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +16 -0
- data/LICENSE.txt +1 -1
- data/README.md +7 -7
- data/ext/faiss/extconf.rb +6 -3
- data/ext/faiss/numo.hpp +4 -4
- data/ext/faiss/utils.cpp +1 -1
- data/ext/faiss/utils.h +1 -1
- data/lib/faiss/version.rb +1 -1
- data/vendor/faiss/faiss/AutoTune.cpp +292 -291
- data/vendor/faiss/faiss/AutoTune.h +55 -56
- data/vendor/faiss/faiss/Clustering.cpp +365 -194
- data/vendor/faiss/faiss/Clustering.h +102 -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 +126 -224
- data/vendor/faiss/faiss/Index2Layer.h +22 -36
- data/vendor/faiss/faiss/IndexAdditiveQuantizer.cpp +407 -0
- data/vendor/faiss/faiss/IndexAdditiveQuantizer.h +195 -0
- 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 +115 -176
- data/vendor/faiss/faiss/IndexFlat.h +42 -59
- data/vendor/faiss/faiss/IndexFlatCodes.cpp +67 -0
- data/vendor/faiss/faiss/IndexFlatCodes.h +47 -0
- data/vendor/faiss/faiss/IndexHNSW.cpp +372 -348
- data/vendor/faiss/faiss/IndexHNSW.h +57 -41
- data/vendor/faiss/faiss/IndexIVF.cpp +545 -453
- data/vendor/faiss/faiss/IndexIVF.h +169 -118
- data/vendor/faiss/faiss/IndexIVFAdditiveQuantizer.cpp +316 -0
- data/vendor/faiss/faiss/IndexIVFAdditiveQuantizer.h +121 -0
- data/vendor/faiss/faiss/IndexIVFFlat.cpp +247 -252
- data/vendor/faiss/faiss/IndexIVFFlat.h +48 -51
- data/vendor/faiss/faiss/IndexIVFPQ.cpp +459 -517
- data/vendor/faiss/faiss/IndexIVFPQ.h +75 -67
- 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 +163 -150
- data/vendor/faiss/faiss/IndexIVFSpectralHash.h +38 -25
- data/vendor/faiss/faiss/IndexLSH.cpp +66 -113
- data/vendor/faiss/faiss/IndexLSH.h +20 -38
- data/vendor/faiss/faiss/IndexLattice.cpp +42 -56
- data/vendor/faiss/faiss/IndexLattice.h +11 -16
- data/vendor/faiss/faiss/IndexNNDescent.cpp +229 -0
- data/vendor/faiss/faiss/IndexNNDescent.h +72 -0
- data/vendor/faiss/faiss/IndexNSG.cpp +301 -0
- data/vendor/faiss/faiss/IndexNSG.h +85 -0
- data/vendor/faiss/faiss/IndexPQ.cpp +387 -495
- data/vendor/faiss/faiss/IndexPQ.h +64 -82
- 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 +139 -127
- data/vendor/faiss/faiss/IndexRefine.h +32 -23
- data/vendor/faiss/faiss/IndexReplicas.cpp +147 -153
- data/vendor/faiss/faiss/IndexReplicas.h +62 -56
- data/vendor/faiss/faiss/IndexScalarQuantizer.cpp +111 -172
- data/vendor/faiss/faiss/IndexScalarQuantizer.h +41 -59
- 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 +654 -475
- data/vendor/faiss/faiss/VectorTransform.h +64 -89
- data/vendor/faiss/faiss/clone_index.cpp +78 -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 +198 -171
- 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/GpuIcmEncoder.h +60 -0
- 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 +503 -0
- data/vendor/faiss/faiss/impl/AdditiveQuantizer.h +175 -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 +606 -617
- data/vendor/faiss/faiss/impl/HNSW.h +179 -200
- data/vendor/faiss/faiss/impl/LocalSearchQuantizer.cpp +855 -0
- data/vendor/faiss/faiss/impl/LocalSearchQuantizer.h +244 -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 +679 -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 +758 -0
- data/vendor/faiss/faiss/impl/ResidualQuantizer.h +188 -0
- data/vendor/faiss/faiss/impl/ResultHandler.h +96 -132
- data/vendor/faiss/faiss/impl/ScalarQuantizer.cpp +647 -707
- 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 +631 -480
- data/vendor/faiss/faiss/impl/index_write.cpp +547 -407
- data/vendor/faiss/faiss/impl/io.cpp +76 -95
- data/vendor/faiss/faiss/impl/io.h +31 -41
- data/vendor/faiss/faiss/impl/io_macros.h +60 -29
- data/vendor/faiss/faiss/impl/kmeans1d.cpp +301 -0
- data/vendor/faiss/faiss/impl/kmeans1d.h +48 -0
- 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 +619 -397
- data/vendor/faiss/faiss/index_factory.h +8 -6
- 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 +305 -312
- data/vendor/faiss/faiss/utils/distances.h +170 -122
- data/vendor/faiss/faiss/utils/distances_simd.cpp +498 -508
- 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 +54 -49
- metadata +29 -4
|
@@ -10,15 +10,13 @@
|
|
|
10
10
|
#ifndef FAISS_INDEX_BINARY_IVF_H
|
|
11
11
|
#define FAISS_INDEX_BINARY_IVF_H
|
|
12
12
|
|
|
13
|
-
|
|
14
13
|
#include <vector>
|
|
15
14
|
|
|
15
|
+
#include <faiss/Clustering.h>
|
|
16
16
|
#include <faiss/IndexBinary.h>
|
|
17
17
|
#include <faiss/IndexIVF.h>
|
|
18
|
-
#include <faiss/Clustering.h>
|
|
19
18
|
#include <faiss/utils/Heap.h>
|
|
20
19
|
|
|
21
|
-
|
|
22
20
|
namespace faiss {
|
|
23
21
|
|
|
24
22
|
struct BinaryInvertedListScanner;
|
|
@@ -34,11 +32,11 @@ struct BinaryInvertedListScanner;
|
|
|
34
32
|
*/
|
|
35
33
|
struct IndexBinaryIVF : IndexBinary {
|
|
36
34
|
/// Access to the actual data
|
|
37
|
-
InvertedLists
|
|
35
|
+
InvertedLists* invlists;
|
|
38
36
|
bool own_invlists;
|
|
39
37
|
|
|
40
|
-
size_t nprobe;
|
|
41
|
-
size_t max_codes;
|
|
38
|
+
size_t nprobe; ///< number of probes at query time
|
|
39
|
+
size_t max_codes; ///< max nb of codes to visit to do a query
|
|
42
40
|
|
|
43
41
|
/** Select between using a heap or counting to select the k smallest values
|
|
44
42
|
* when scanning inverted lists.
|
|
@@ -48,20 +46,20 @@ struct IndexBinaryIVF : IndexBinary {
|
|
|
48
46
|
/// map for direct access to the elements. Enables reconstruct().
|
|
49
47
|
DirectMap direct_map;
|
|
50
48
|
|
|
51
|
-
IndexBinary
|
|
52
|
-
size_t nlist;
|
|
49
|
+
IndexBinary* quantizer; ///< quantizer that maps vectors to inverted lists
|
|
50
|
+
size_t nlist; ///< number of possible key values
|
|
53
51
|
|
|
54
|
-
bool own_fields;
|
|
52
|
+
bool own_fields; ///< whether object owns the quantizer
|
|
55
53
|
|
|
56
54
|
ClusteringParameters cp; ///< to override default clustering params
|
|
57
|
-
Index
|
|
55
|
+
Index* clustering_index; ///< to override index used during clustering
|
|
58
56
|
|
|
59
57
|
/** The Inverted file takes a quantizer (an IndexBinary) on input,
|
|
60
58
|
* which implements the function mapping a vector to a list
|
|
61
59
|
* identifier. The pointer is borrowed: the quantizer should not
|
|
62
60
|
* be deleted while the IndexBinaryIVF is in use.
|
|
63
61
|
*/
|
|
64
|
-
IndexBinaryIVF(IndexBinary
|
|
62
|
+
IndexBinaryIVF(IndexBinary* quantizer, size_t d, size_t nlist);
|
|
65
63
|
|
|
66
64
|
IndexBinaryIVF();
|
|
67
65
|
|
|
@@ -70,15 +68,23 @@ struct IndexBinaryIVF : IndexBinary {
|
|
|
70
68
|
void reset() override;
|
|
71
69
|
|
|
72
70
|
/// Trains the quantizer
|
|
73
|
-
void train(idx_t n, const uint8_t
|
|
71
|
+
void train(idx_t n, const uint8_t* x) override;
|
|
74
72
|
|
|
75
|
-
void add(idx_t n, const uint8_t
|
|
73
|
+
void add(idx_t n, const uint8_t* x) override;
|
|
76
74
|
|
|
77
|
-
void add_with_ids(idx_t n, const uint8_t
|
|
75
|
+
void add_with_ids(idx_t n, const uint8_t* x, const idx_t* xids) override;
|
|
78
76
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
77
|
+
/** Implementation of vector addition where the vector assignments are
|
|
78
|
+
* predefined.
|
|
79
|
+
*
|
|
80
|
+
* @param precomputed_idx quantization indices for the input vectors
|
|
81
|
+
* (size n)
|
|
82
|
+
*/
|
|
83
|
+
void add_core(
|
|
84
|
+
idx_t n,
|
|
85
|
+
const uint8_t* x,
|
|
86
|
+
const idx_t* xids,
|
|
87
|
+
const idx_t* precomputed_idx);
|
|
82
88
|
|
|
83
89
|
/** Search a set of vectors, that are pre-quantized by the IVF
|
|
84
90
|
* quantizer. Fill in the corresponding heaps with the query
|
|
@@ -97,25 +103,43 @@ struct IndexBinaryIVF : IndexBinary {
|
|
|
97
103
|
* instead of ids (used for reranking).
|
|
98
104
|
* @param params used to override the object's search parameters
|
|
99
105
|
*/
|
|
100
|
-
void search_preassigned(
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
106
|
+
void search_preassigned(
|
|
107
|
+
idx_t n,
|
|
108
|
+
const uint8_t* x,
|
|
109
|
+
idx_t k,
|
|
110
|
+
const idx_t* assign,
|
|
111
|
+
const int32_t* centroid_dis,
|
|
112
|
+
int32_t* distances,
|
|
113
|
+
idx_t* labels,
|
|
114
|
+
bool store_pairs,
|
|
115
|
+
const IVFSearchParameters* params = nullptr) const;
|
|
116
|
+
|
|
117
|
+
virtual BinaryInvertedListScanner* get_InvertedListScanner(
|
|
118
|
+
bool store_pairs = false) const;
|
|
110
119
|
|
|
111
120
|
/** assign the vectors, then call search_preassign */
|
|
112
|
-
void search(
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
121
|
+
void search(
|
|
122
|
+
idx_t n,
|
|
123
|
+
const uint8_t* x,
|
|
124
|
+
idx_t k,
|
|
125
|
+
int32_t* distances,
|
|
126
|
+
idx_t* labels) const override;
|
|
127
|
+
|
|
128
|
+
void range_search(
|
|
129
|
+
idx_t n,
|
|
130
|
+
const uint8_t* x,
|
|
131
|
+
int radius,
|
|
132
|
+
RangeSearchResult* result) const override;
|
|
133
|
+
|
|
134
|
+
void range_search_preassigned(
|
|
135
|
+
idx_t n,
|
|
136
|
+
const uint8_t* x,
|
|
137
|
+
int radius,
|
|
138
|
+
const idx_t* assign,
|
|
139
|
+
const int32_t* centroid_dis,
|
|
140
|
+
RangeSearchResult* result) const;
|
|
141
|
+
|
|
142
|
+
void reconstruct(idx_t key, uint8_t* recons) const override;
|
|
119
143
|
|
|
120
144
|
/** Reconstruct a subset of the indexed vectors.
|
|
121
145
|
*
|
|
@@ -126,7 +150,7 @@ struct IndexBinaryIVF : IndexBinary {
|
|
|
126
150
|
* @param ni nb of vectors to reconstruct
|
|
127
151
|
* @param recons output array of reconstructed vectors, size ni * d / 8
|
|
128
152
|
*/
|
|
129
|
-
void reconstruct_n(idx_t i0, idx_t ni, uint8_t
|
|
153
|
+
void reconstruct_n(idx_t i0, idx_t ni, uint8_t* recons) const override;
|
|
130
154
|
|
|
131
155
|
/** Similar to search, but also reconstructs the stored vectors (or an
|
|
132
156
|
* approximation in the case of lossy coding) for the search results.
|
|
@@ -137,9 +161,13 @@ struct IndexBinaryIVF : IndexBinary {
|
|
|
137
161
|
*
|
|
138
162
|
* @param recons reconstructed vectors size (n, k, d / 8)
|
|
139
163
|
*/
|
|
140
|
-
void search_and_reconstruct(
|
|
141
|
-
|
|
142
|
-
|
|
164
|
+
void search_and_reconstruct(
|
|
165
|
+
idx_t n,
|
|
166
|
+
const uint8_t* x,
|
|
167
|
+
idx_t k,
|
|
168
|
+
int32_t* distances,
|
|
169
|
+
idx_t* labels,
|
|
170
|
+
uint8_t* recons) const override;
|
|
143
171
|
|
|
144
172
|
/** Reconstruct a vector given the location in terms of (inv list index +
|
|
145
173
|
* inv list offset) instead of the id.
|
|
@@ -148,9 +176,10 @@ struct IndexBinaryIVF : IndexBinary {
|
|
|
148
176
|
* the inv list offset is computed by search_preassigned() with
|
|
149
177
|
* `store_pairs` set.
|
|
150
178
|
*/
|
|
151
|
-
virtual void reconstruct_from_offset(
|
|
152
|
-
|
|
153
|
-
|
|
179
|
+
virtual void reconstruct_from_offset(
|
|
180
|
+
idx_t list_no,
|
|
181
|
+
idx_t offset,
|
|
182
|
+
uint8_t* recons) const;
|
|
154
183
|
|
|
155
184
|
/// Dataset manipulation functions
|
|
156
185
|
size_t remove_ids(const IDSelector& sel) override;
|
|
@@ -160,34 +189,33 @@ struct IndexBinaryIVF : IndexBinary {
|
|
|
160
189
|
* sequential ids, this would be this->ntotal */
|
|
161
190
|
virtual void merge_from(IndexBinaryIVF& other, idx_t add_id);
|
|
162
191
|
|
|
163
|
-
size_t get_list_size(size_t list_no) const
|
|
164
|
-
|
|
192
|
+
size_t get_list_size(size_t list_no) const {
|
|
193
|
+
return invlists->list_size(list_no);
|
|
194
|
+
}
|
|
165
195
|
|
|
166
196
|
/** intialize a direct map
|
|
167
197
|
*
|
|
168
198
|
* @param new_maintain_direct_map if true, create a direct map,
|
|
169
199
|
* else clear it
|
|
170
200
|
*/
|
|
171
|
-
void make_direct_map(bool new_maintain_direct_map=true);
|
|
201
|
+
void make_direct_map(bool new_maintain_direct_map = true);
|
|
172
202
|
|
|
173
|
-
void set_direct_map_type
|
|
203
|
+
void set_direct_map_type(DirectMap::Type type);
|
|
174
204
|
|
|
175
|
-
void replace_invlists(InvertedLists
|
|
205
|
+
void replace_invlists(InvertedLists* il, bool own = false);
|
|
176
206
|
};
|
|
177
207
|
|
|
178
|
-
|
|
179
208
|
struct BinaryInvertedListScanner {
|
|
180
|
-
|
|
181
209
|
using idx_t = Index::idx_t;
|
|
182
210
|
|
|
183
211
|
/// from now on we handle this query.
|
|
184
|
-
virtual void set_query
|
|
212
|
+
virtual void set_query(const uint8_t* query_vector) = 0;
|
|
185
213
|
|
|
186
214
|
/// following codes come from this inverted list
|
|
187
|
-
virtual void set_list
|
|
215
|
+
virtual void set_list(idx_t list_no, uint8_t coarse_dis) = 0;
|
|
188
216
|
|
|
189
217
|
/// compute a single query-to-code distance
|
|
190
|
-
virtual uint32_t distance_to_code
|
|
218
|
+
virtual uint32_t distance_to_code(const uint8_t* code) const = 0;
|
|
191
219
|
|
|
192
220
|
/** compute the distances to codes. (distances, labels) should be
|
|
193
221
|
* organized as a min- or max-heap
|
|
@@ -199,23 +227,24 @@ struct BinaryInvertedListScanner {
|
|
|
199
227
|
* @param labels heap labels (size k)
|
|
200
228
|
* @param k heap size
|
|
201
229
|
*/
|
|
202
|
-
virtual size_t scan_codes
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
230
|
+
virtual size_t scan_codes(
|
|
231
|
+
size_t n,
|
|
232
|
+
const uint8_t* codes,
|
|
233
|
+
const idx_t* ids,
|
|
234
|
+
int32_t* distances,
|
|
235
|
+
idx_t* labels,
|
|
236
|
+
size_t k) const = 0;
|
|
237
|
+
|
|
238
|
+
virtual void scan_codes_range(
|
|
239
|
+
size_t n,
|
|
240
|
+
const uint8_t* codes,
|
|
241
|
+
const idx_t* ids,
|
|
242
|
+
int radius,
|
|
243
|
+
RangeQueryResult& result) const = 0;
|
|
244
|
+
|
|
245
|
+
virtual ~BinaryInvertedListScanner() {}
|
|
216
246
|
};
|
|
217
247
|
|
|
248
|
+
} // namespace faiss
|
|
218
249
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
#endif // FAISS_INDEX_BINARY_IVF_H
|
|
250
|
+
#endif // FAISS_INDEX_BINARY_IVF_H
|