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
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
// -*- c++ -*-
|
|
9
|
+
|
|
10
|
+
#pragma once
|
|
11
|
+
|
|
12
|
+
#include <memory>
|
|
13
|
+
#include <mutex>
|
|
14
|
+
#include <vector>
|
|
15
|
+
|
|
16
|
+
#include <omp.h>
|
|
17
|
+
|
|
18
|
+
#include <faiss/Index.h>
|
|
19
|
+
#include <faiss/impl/AuxIndexStructures.h>
|
|
20
|
+
#include <faiss/impl/FaissAssert.h>
|
|
21
|
+
#include <faiss/utils/Heap.h>
|
|
22
|
+
#include <faiss/utils/random.h>
|
|
23
|
+
|
|
24
|
+
namespace faiss {
|
|
25
|
+
|
|
26
|
+
/** Implementation of the Navigating Spreading-out Graph (NSG)
|
|
27
|
+
* datastructure.
|
|
28
|
+
*
|
|
29
|
+
* Fast Approximate Nearest Neighbor Search With The
|
|
30
|
+
* Navigating Spreading-out Graph
|
|
31
|
+
*
|
|
32
|
+
* Cong Fu, Chao Xiang, Changxu Wang, Deng Cai, VLDB 2019
|
|
33
|
+
*
|
|
34
|
+
* This implementation is heavily influenced by the NSG
|
|
35
|
+
* implementation by ZJULearning Group
|
|
36
|
+
* (https://github.com/zjulearning/nsg)
|
|
37
|
+
*
|
|
38
|
+
* The NSG object stores only the neighbor link structure, see
|
|
39
|
+
* IndexNSG.h for the full index object.
|
|
40
|
+
*/
|
|
41
|
+
|
|
42
|
+
struct DistanceComputer; // from AuxIndexStructures
|
|
43
|
+
struct Neighbor;
|
|
44
|
+
struct Node;
|
|
45
|
+
|
|
46
|
+
namespace nsg {
|
|
47
|
+
|
|
48
|
+
/***********************************************************
|
|
49
|
+
* Graph structure to store a graph.
|
|
50
|
+
*
|
|
51
|
+
* It is represented by an adjacency matrix `data`, where
|
|
52
|
+
* data[i, j] is the j-th neighbor of node i.
|
|
53
|
+
***********************************************************/
|
|
54
|
+
|
|
55
|
+
template <class node_t>
|
|
56
|
+
struct Graph {
|
|
57
|
+
node_t* data; ///< the flattened adjacency matrix
|
|
58
|
+
int K; ///< nb of neighbors per node
|
|
59
|
+
int N; ///< total nb of nodes
|
|
60
|
+
bool own_fields; ///< the underlying data owned by itself or not
|
|
61
|
+
|
|
62
|
+
// construct from a known graph
|
|
63
|
+
Graph(node_t* data, int N, int K)
|
|
64
|
+
: data(data), K(K), N(N), own_fields(false) {}
|
|
65
|
+
|
|
66
|
+
// construct an empty graph
|
|
67
|
+
// NOTE: the newly allocated data needs to be destroyed at destruction time
|
|
68
|
+
Graph(int N, int K) : K(K), N(N), own_fields(true) {
|
|
69
|
+
data = new node_t[N * K];
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// copy constructor
|
|
73
|
+
Graph(const Graph& g) : Graph(g.N, g.K) {
|
|
74
|
+
memcpy(data, g.data, N * K * sizeof(node_t));
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// release the allocated memory if needed
|
|
78
|
+
~Graph() {
|
|
79
|
+
if (own_fields) {
|
|
80
|
+
delete[] data;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// access the j-th neighbor of node i
|
|
85
|
+
inline node_t at(int i, int j) const {
|
|
86
|
+
return data[i * K + j];
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// access the j-th neighbor of node i by reference
|
|
90
|
+
inline node_t& at(int i, int j) {
|
|
91
|
+
return data[i * K + j];
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
DistanceComputer* storage_distance_computer(const Index* storage);
|
|
96
|
+
|
|
97
|
+
} // namespace nsg
|
|
98
|
+
|
|
99
|
+
struct NSG {
|
|
100
|
+
/// internal storage of vectors (32 bits: this is expensive)
|
|
101
|
+
using storage_idx_t = int;
|
|
102
|
+
|
|
103
|
+
/// Faiss results are 64-bit
|
|
104
|
+
using idx_t = Index::idx_t;
|
|
105
|
+
|
|
106
|
+
int ntotal; ///< nb of nodes
|
|
107
|
+
|
|
108
|
+
// construction-time parameters
|
|
109
|
+
int R; ///< nb of neighbors per node
|
|
110
|
+
int L; ///< length of the search path at construction time
|
|
111
|
+
int C; ///< candidate pool size at construction time
|
|
112
|
+
|
|
113
|
+
// search-time parameters
|
|
114
|
+
int search_L; ///< length of the search path
|
|
115
|
+
|
|
116
|
+
int enterpoint; ///< enterpoint
|
|
117
|
+
|
|
118
|
+
std::shared_ptr<nsg::Graph<int>> final_graph; ///< NSG graph structure
|
|
119
|
+
|
|
120
|
+
bool is_built; ///< NSG is built or not
|
|
121
|
+
|
|
122
|
+
RandomGenerator rng; ///< random generator
|
|
123
|
+
|
|
124
|
+
explicit NSG(int R = 32);
|
|
125
|
+
|
|
126
|
+
// build NSG from a KNN graph
|
|
127
|
+
void build(
|
|
128
|
+
Index* storage,
|
|
129
|
+
idx_t n,
|
|
130
|
+
const nsg::Graph<idx_t>& knn_graph,
|
|
131
|
+
bool verbose);
|
|
132
|
+
|
|
133
|
+
// reset the graph
|
|
134
|
+
void reset();
|
|
135
|
+
|
|
136
|
+
// search interface
|
|
137
|
+
void search(
|
|
138
|
+
DistanceComputer& dis,
|
|
139
|
+
int k,
|
|
140
|
+
idx_t* I,
|
|
141
|
+
float* D,
|
|
142
|
+
VisitedTable& vt) const;
|
|
143
|
+
|
|
144
|
+
// Compute the center point
|
|
145
|
+
void init_graph(Index* storage, const nsg::Graph<idx_t>& knn_graph);
|
|
146
|
+
|
|
147
|
+
// Search on a built graph.
|
|
148
|
+
// If collect_fullset is true, the visited nodes will be
|
|
149
|
+
// collected in `fullset`.
|
|
150
|
+
template <bool collect_fullset, class index_t>
|
|
151
|
+
void search_on_graph(
|
|
152
|
+
const nsg::Graph<index_t>& graph,
|
|
153
|
+
DistanceComputer& dis,
|
|
154
|
+
VisitedTable& vt,
|
|
155
|
+
int ep,
|
|
156
|
+
int pool_size,
|
|
157
|
+
std::vector<Neighbor>& retset,
|
|
158
|
+
std::vector<Node>& fullset) const;
|
|
159
|
+
|
|
160
|
+
// Add reverse links
|
|
161
|
+
void add_reverse_links(
|
|
162
|
+
int q,
|
|
163
|
+
std::vector<std::mutex>& locks,
|
|
164
|
+
DistanceComputer& dis,
|
|
165
|
+
nsg::Graph<Node>& graph);
|
|
166
|
+
|
|
167
|
+
void sync_prune(
|
|
168
|
+
int q,
|
|
169
|
+
std::vector<Node>& pool,
|
|
170
|
+
DistanceComputer& dis,
|
|
171
|
+
VisitedTable& vt,
|
|
172
|
+
const nsg::Graph<idx_t>& knn_graph,
|
|
173
|
+
nsg::Graph<Node>& graph);
|
|
174
|
+
|
|
175
|
+
void link(
|
|
176
|
+
Index* storage,
|
|
177
|
+
const nsg::Graph<idx_t>& knn_graph,
|
|
178
|
+
nsg::Graph<Node>& graph,
|
|
179
|
+
bool verbose);
|
|
180
|
+
|
|
181
|
+
// make NSG be fully connected
|
|
182
|
+
int tree_grow(Index* storage, std::vector<int>& degrees);
|
|
183
|
+
|
|
184
|
+
// count the size of the connected component
|
|
185
|
+
// using depth first search start by root
|
|
186
|
+
int dfs(VisitedTable& vt, int root, int cnt) const;
|
|
187
|
+
|
|
188
|
+
// attach one unlinked node
|
|
189
|
+
int attach_unlinked(
|
|
190
|
+
Index* storage,
|
|
191
|
+
VisitedTable& vt,
|
|
192
|
+
VisitedTable& vt2,
|
|
193
|
+
std::vector<int>& degrees);
|
|
194
|
+
|
|
195
|
+
// check the integrity of the NSG built
|
|
196
|
+
void check_graph() const;
|
|
197
|
+
};
|
|
198
|
+
|
|
199
|
+
} // namespace faiss
|