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
|
@@ -11,13 +11,12 @@
|
|
|
11
11
|
|
|
12
12
|
#include <vector>
|
|
13
13
|
|
|
14
|
-
#include <faiss/impl/HNSW.h>
|
|
15
14
|
#include <faiss/IndexFlat.h>
|
|
16
15
|
#include <faiss/IndexPQ.h>
|
|
17
16
|
#include <faiss/IndexScalarQuantizer.h>
|
|
17
|
+
#include <faiss/impl/HNSW.h>
|
|
18
18
|
#include <faiss/utils/utils.h>
|
|
19
19
|
|
|
20
|
-
|
|
21
20
|
namespace faiss {
|
|
22
21
|
|
|
23
22
|
struct IndexHNSW;
|
|
@@ -26,9 +25,9 @@ struct ReconstructFromNeighbors {
|
|
|
26
25
|
typedef Index::idx_t idx_t;
|
|
27
26
|
typedef HNSW::storage_idx_t storage_idx_t;
|
|
28
27
|
|
|
29
|
-
const IndexHNSW
|
|
30
|
-
size_t M;
|
|
31
|
-
size_t k;
|
|
28
|
+
const IndexHNSW& index;
|
|
29
|
+
size_t M; // number of neighbors
|
|
30
|
+
size_t k; // number of codebook entries
|
|
32
31
|
size_t nsq; // number of subvectors
|
|
33
32
|
size_t code_size;
|
|
34
33
|
int k_reorder; // nb to reorder. -1 = all
|
|
@@ -39,35 +38,37 @@ struct ReconstructFromNeighbors {
|
|
|
39
38
|
size_t ntotal;
|
|
40
39
|
size_t d, dsub; // derived values
|
|
41
40
|
|
|
42
|
-
explicit ReconstructFromNeighbors(
|
|
43
|
-
|
|
41
|
+
explicit ReconstructFromNeighbors(
|
|
42
|
+
const IndexHNSW& index,
|
|
43
|
+
size_t k = 256,
|
|
44
|
+
size_t nsq = 1);
|
|
44
45
|
|
|
45
46
|
/// codes must be added in the correct order and the IndexHNSW
|
|
46
47
|
/// must be populated and sorted
|
|
47
|
-
void add_codes(size_t n, const float
|
|
48
|
+
void add_codes(size_t n, const float* x);
|
|
48
49
|
|
|
49
|
-
size_t compute_distances(
|
|
50
|
-
|
|
50
|
+
size_t compute_distances(
|
|
51
|
+
size_t n,
|
|
52
|
+
const idx_t* shortlist,
|
|
53
|
+
const float* query,
|
|
54
|
+
float* distances) const;
|
|
51
55
|
|
|
52
56
|
/// called by add_codes
|
|
53
|
-
void estimate_code(const float
|
|
57
|
+
void estimate_code(const float* x, storage_idx_t i, uint8_t* code) const;
|
|
54
58
|
|
|
55
59
|
/// called by compute_distances
|
|
56
|
-
void reconstruct(storage_idx_t i, float
|
|
60
|
+
void reconstruct(storage_idx_t i, float* x, float* tmp) const;
|
|
57
61
|
|
|
58
|
-
void reconstruct_n(storage_idx_t n0, storage_idx_t ni, float
|
|
62
|
+
void reconstruct_n(storage_idx_t n0, storage_idx_t ni, float* x) const;
|
|
59
63
|
|
|
60
64
|
/// get the M+1 -by-d table for neighbor coordinates for vector i
|
|
61
|
-
void get_neighbor_table(storage_idx_t i, float
|
|
62
|
-
|
|
65
|
+
void get_neighbor_table(storage_idx_t i, float* out) const;
|
|
63
66
|
};
|
|
64
67
|
|
|
65
|
-
|
|
66
68
|
/** The HNSW index is a normal random-access index with a HNSW
|
|
67
69
|
* link structure built on top */
|
|
68
70
|
|
|
69
71
|
struct IndexHNSW : Index {
|
|
70
|
-
|
|
71
72
|
typedef HNSW::storage_idx_t storage_idx_t;
|
|
72
73
|
|
|
73
74
|
// the link strcuture
|
|
@@ -75,27 +76,31 @@ struct IndexHNSW : Index {
|
|
|
75
76
|
|
|
76
77
|
// the sequential storage
|
|
77
78
|
bool own_fields;
|
|
78
|
-
Index
|
|
79
|
+
Index* storage;
|
|
79
80
|
|
|
80
|
-
ReconstructFromNeighbors
|
|
81
|
+
ReconstructFromNeighbors* reconstruct_from_neighbors;
|
|
81
82
|
|
|
82
|
-
explicit IndexHNSW
|
|
83
|
-
explicit IndexHNSW
|
|
83
|
+
explicit IndexHNSW(int d = 0, int M = 32, MetricType metric = METRIC_L2);
|
|
84
|
+
explicit IndexHNSW(Index* storage, int M = 32);
|
|
84
85
|
|
|
85
86
|
~IndexHNSW() override;
|
|
86
87
|
|
|
87
|
-
void add(idx_t n, const float
|
|
88
|
+
void add(idx_t n, const float* x) override;
|
|
88
89
|
|
|
89
90
|
/// Trains the storage if needed
|
|
90
91
|
void train(idx_t n, const float* x) override;
|
|
91
92
|
|
|
92
93
|
/// entry point for search
|
|
93
|
-
void search
|
|
94
|
-
|
|
94
|
+
void search(
|
|
95
|
+
idx_t n,
|
|
96
|
+
const float* x,
|
|
97
|
+
idx_t k,
|
|
98
|
+
float* distances,
|
|
99
|
+
idx_t* labels) const override;
|
|
95
100
|
|
|
96
101
|
void reconstruct(idx_t key, float* recons) const override;
|
|
97
102
|
|
|
98
|
-
void reset
|
|
103
|
+
void reset() override;
|
|
99
104
|
|
|
100
105
|
void shrink_level_0_neighbors(int size);
|
|
101
106
|
|
|
@@ -105,19 +110,25 @@ struct IndexHNSW : Index {
|
|
|
105
110
|
* @param search_type 1:perform one search per nprobe, 2: enqueue
|
|
106
111
|
* all entry points
|
|
107
112
|
*/
|
|
108
|
-
void search_level_0(
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
113
|
+
void search_level_0(
|
|
114
|
+
idx_t n,
|
|
115
|
+
const float* x,
|
|
116
|
+
idx_t k,
|
|
117
|
+
const storage_idx_t* nearest,
|
|
118
|
+
const float* nearest_d,
|
|
119
|
+
float* distances,
|
|
120
|
+
idx_t* labels,
|
|
121
|
+
int nprobe = 1,
|
|
122
|
+
int search_type = 1) const;
|
|
112
123
|
|
|
113
124
|
/// alternative graph building
|
|
114
|
-
void init_level_0_from_knngraph(
|
|
115
|
-
int k, const float *D, const idx_t *I);
|
|
125
|
+
void init_level_0_from_knngraph(int k, const float* D, const idx_t* I);
|
|
116
126
|
|
|
117
127
|
/// alternative graph building
|
|
118
128
|
void init_level_0_from_entry_points(
|
|
119
|
-
|
|
120
|
-
|
|
129
|
+
int npt,
|
|
130
|
+
const storage_idx_t* points,
|
|
131
|
+
const storage_idx_t* nearests);
|
|
121
132
|
|
|
122
133
|
// reorder links from nearest to farthest
|
|
123
134
|
void reorder_links();
|
|
@@ -125,7 +136,6 @@ struct IndexHNSW : Index {
|
|
|
125
136
|
void link_singletons();
|
|
126
137
|
};
|
|
127
138
|
|
|
128
|
-
|
|
129
139
|
/** Flat index topped with with a HNSW structure to access elements
|
|
130
140
|
* more efficiently.
|
|
131
141
|
*/
|
|
@@ -149,22 +159,28 @@ struct IndexHNSWPQ : IndexHNSW {
|
|
|
149
159
|
*/
|
|
150
160
|
struct IndexHNSWSQ : IndexHNSW {
|
|
151
161
|
IndexHNSWSQ();
|
|
152
|
-
IndexHNSWSQ(
|
|
162
|
+
IndexHNSWSQ(
|
|
163
|
+
int d,
|
|
164
|
+
ScalarQuantizer::QuantizerType qtype,
|
|
165
|
+
int M,
|
|
166
|
+
MetricType metric = METRIC_L2);
|
|
153
167
|
};
|
|
154
168
|
|
|
155
169
|
/** 2-level code structure with fast random access
|
|
156
170
|
*/
|
|
157
171
|
struct IndexHNSW2Level : IndexHNSW {
|
|
158
172
|
IndexHNSW2Level();
|
|
159
|
-
IndexHNSW2Level(Index
|
|
173
|
+
IndexHNSW2Level(Index* quantizer, size_t nlist, int m_pq, int M);
|
|
160
174
|
|
|
161
175
|
void flip_to_ivf();
|
|
162
176
|
|
|
163
177
|
/// entry point for search
|
|
164
|
-
void search
|
|
165
|
-
|
|
166
|
-
|
|
178
|
+
void search(
|
|
179
|
+
idx_t n,
|
|
180
|
+
const float* x,
|
|
181
|
+
idx_t k,
|
|
182
|
+
float* distances,
|
|
183
|
+
idx_t* labels) const override;
|
|
167
184
|
};
|
|
168
185
|
|
|
169
|
-
|
|
170
|
-
} // namespace faiss
|
|
186
|
+
} // namespace faiss
|