1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169
|
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
// -*- c -*-
#ifndef FAISS_INDEX_BINARY_C_H
#define FAISS_INDEX_BINARY_C_H
#include <stddef.h>
#include "Index_c.h"
#include "faiss_c.h"
#ifdef __cplusplus
extern "C" {
#endif
// forward declaration required here
FAISS_DECLARE_CLASS(RangeSearchResult)
// typedef struct FaissRangeSearchResult_H FaissRangeSearchResult;
typedef struct FaissIDSelector_H FaissIDSelector;
/// Opaque type for referencing to a binary index object
FAISS_DECLARE_CLASS(IndexBinary)
FAISS_DECLARE_DESTRUCTOR(IndexBinary)
/// Getter for d
FAISS_DECLARE_GETTER(IndexBinary, int, d)
/// Getter for is_trained
FAISS_DECLARE_GETTER(IndexBinary, int, is_trained)
/// Getter for ntotal
FAISS_DECLARE_GETTER(IndexBinary, idx_t, ntotal)
/// Getter for metric_type
FAISS_DECLARE_GETTER(IndexBinary, FaissMetricType, metric_type)
FAISS_DECLARE_GETTER_SETTER(IndexBinary, int, verbose)
/** Perform training on a representative set of vectors
*
* @param index opaque pointer to index object
* @param n nb of training vectors
* @param x training vectors, size n * d
*/
int faiss_IndexBinary_train(FaissIndexBinary* index, idx_t n, const uint8_t* x);
/** Add n vectors of dimension d to the index.
*
* Vectors are implicitly assigned labels ntotal .. ntotal + n - 1
* This function slices the input vectors in chunks smaller than
* blocksize_add and calls add_core.
* @param index opaque pointer to index object
* @param x input matrix, size n * d
*/
int faiss_IndexBinary_add(FaissIndexBinary* index, idx_t n, const uint8_t* x);
/** Same as add, but stores xids instead of sequential ids.
*
* The default implementation fails with an assertion, as it is
* not supported by all indexes.
*
* @param index opaque pointer to index object
* @param xids if non-null, ids to store for the vectors (size n)
*/
int faiss_IndexBinary_add_with_ids(
FaissIndexBinary* index,
idx_t n,
const uint8_t* x,
const idx_t* xids);
/** query n vectors of dimension d to the index.
*
* return at most k vectors. If there are not enough results for a
* query, the result array is padded with -1s.
*
* @param index opaque pointer to index object
* @param x input vectors to search, size n * d
* @param labels output labels of the NNs, size n*k
* @param distances output pairwise distances, size n*k
*/
int faiss_IndexBinary_search(
const FaissIndexBinary* index,
idx_t n,
const uint8_t* x,
idx_t k,
int32_t* distances,
idx_t* labels);
/** query n vectors of dimension d to the index.
*
* return all vectors with distance < radius. Note that many
* indexes do not implement the range_search (only the k-NN search
* is mandatory).
*
* @param index opaque pointer to index object
* @param x input vectors to search, size n * d
* @param radius search radius
* @param result result table
*/
int faiss_IndexBinary_range_search(
const FaissIndexBinary* index,
idx_t n,
const uint8_t* x,
int radius,
FaissRangeSearchResult* result);
/** return the indexes of the k vectors closest to the query x.
*
* This function is identical as search but only return labels of neighbors.
* @param index opaque pointer to index object
* @param x input vectors to search, size n * d
* @param labels output labels of the NNs, size n*k
*/
int faiss_IndexBinary_assign(
FaissIndexBinary* index,
idx_t n,
const uint8_t* x,
idx_t* labels,
idx_t k);
/** removes all elements from the database.
* @param index opaque pointer to index object
*/
int faiss_IndexBinary_reset(FaissIndexBinary* index);
/** removes IDs from the index. Not supported by all indexes
* @param index opaque pointer to index object
* @param nremove output for the number of IDs removed
*/
int faiss_IndexBinary_remove_ids(
FaissIndexBinary* index,
const FaissIDSelector* sel,
size_t* n_removed);
/** Reconstruct a stored vector (or an approximation if lossy coding)
*
* this function may not be defined for some indexes
* @param index opaque pointer to index object
* @param key id of the vector to reconstruct
* @param recons reconstructed vector (size d)
*/
int faiss_IndexBinary_reconstruct(
const FaissIndexBinary* index,
idx_t key,
uint8_t* recons);
/** Reconstruct vectors i0 to i0 + ni - 1
*
* this function may not be defined for some indexes
* @param index opaque pointer to index object
* @param recons reconstructed vector (size ni * d)
*/
int faiss_IndexBinary_reconstruct_n(
const FaissIndexBinary* index,
idx_t i0,
idx_t ni,
uint8_t* recons);
#ifdef __cplusplus
}
#endif
#endif
|