11 #ifndef FAISS_INDEX_BINARY_IVF_H
12 #define FAISS_INDEX_BINARY_IVF_H
17 #include "IndexBinary.h"
19 #include "Clustering.h"
25 struct BinaryInvertedListScanner;
51 std::vector<long> direct_map;
75 void reset()
override;
78 void train(
idx_t n,
const uint8_t *x)
override;
81 void add(
idx_t n,
const uint8_t *x)
override;
87 const long *precomputed_idx);
108 const int32_t *centroid_dis,
109 int32_t *distances,
idx_t *labels,
115 bool store_pairs=
false)
const;
119 int32_t *distances,
idx_t *labels)
const override;
144 int32_t *distances,
idx_t *labels,
145 uint8_t *recons)
const override;
155 uint8_t* recons)
const;
167 size_t get_list_size(
size_t list_no)
const
192 virtual void set_query (
const uint8_t *query_vector) = 0;
195 virtual void set_list (idx_t list_no, uint8_t coarse_dis) = 0;
211 const uint8_t *codes,
213 int32_t *distances, idx_t *labels,
223 #endif // FAISS_INDEX_BINARY_IVF_H
virtual void set_query(const uint8_t *query_vector)=0
from now on we handle this query.
size_t nprobe
number of probes at query time
void add_core(idx_t n, const uint8_t *x, const long *xids, const long *precomputed_idx)
same as add_with_ids, with precomputed coarse quantizer
virtual void reconstruct_from_offset(long list_no, long offset, uint8_t *recons) const
virtual void set_list(idx_t list_no, uint8_t coarse_dis)=0
following codes come from this inverted list
bool maintain_direct_map
map for direct access to the elements. Enables reconstruct().
ClusteringParameters cp
to override default clustering params
void search_preassigned(idx_t n, const uint8_t *x, idx_t k, const idx_t *assign, const int32_t *centroid_dis, int32_t *distances, idx_t *labels, bool store_pairs, const IVFSearchParameters *params=nullptr) const
size_t nlist
number of possible key values
virtual size_t list_size(size_t list_no) const =0
get the size of a list
bool verbose
verbosity level
IndexBinary * quantizer
quantizer that maps vectors to inverted lists
bool own_fields
whether object owns the quantizer
virtual void merge_from(IndexBinaryIVF &other, idx_t add_id)
void make_direct_map(bool new_maintain_direct_map=true)
Index * clustering_index
to override index used during clustering
void train_q1(size_t n, const uint8_t *x, bool verbose)
Trains the quantizer and calls train_residual to train sub-quantizers.
virtual uint32_t distance_to_code(const uint8_t *code) const =0
compute a single query-to-code distance
double imbalance_factor() const
1= perfectly balanced, >1: imbalanced
void train(idx_t n, const uint8_t *x) override
Trains the quantizer and calls train_residual to train sub-quantizers.
void assign(idx_t n, const uint8_t *x, idx_t *labels, idx_t k=1)
void reset() override
Removes all elements from the database.
long idx_t
all indices are this type
virtual size_t scan_codes(size_t n, const uint8_t *codes, const idx_t *ids, int32_t *distances, idx_t *labels, size_t k) const =0
size_t max_codes
max nb of codes to visit to do a query
void print_stats() const
display some stats about the inverted lists
void add_with_ids(idx_t n, const uint8_t *x, const long *xids) override
void add(idx_t n, const uint8_t *x) override
Quantizes x and calls add_with_key.
long remove_ids(const IDSelector &sel) override
Dataset manipulation functions.
long idx_t
all indices are this type
virtual void search(idx_t n, const uint8_t *x, idx_t k, int32_t *distances, idx_t *labels) const override
void search_and_reconstruct(idx_t n, const uint8_t *x, idx_t k, int32_t *distances, idx_t *labels, uint8_t *recons) const override
void reconstruct_n(idx_t i0, idx_t ni, uint8_t *recons) const override
void reconstruct(idx_t key, uint8_t *recons) const override
InvertedLists * invlists
Acess to the actual data.