in faiss/AutoTune.cpp [444:551]
void ParameterSpace::set_index_parameter(
Index* index,
const std::string& name,
double val) const {
if (verbose > 1) {
printf(" set_index_parameter %s=%g\n", name.c_str(), val);
}
if (name == "verbose") {
index->verbose = int(val);
// and fall through to also enable it on sub-indexes
}
if (DC(IndexIDMap)) {
set_index_parameter(ix->index, name, val);
return;
}
if (DC(IndexPreTransform)) {
set_index_parameter(ix->index, name, val);
return;
}
if (DC(ThreadedIndex<Index>)) {
// call on all sub-indexes
auto fn = [this, name, val](int /* no */, Index* subIndex) {
set_index_parameter(subIndex, name, val);
};
ix->runOnIndex(fn);
return;
}
if (DC(IndexRefine)) {
if (name == "k_factor_rf") {
ix->k_factor = int(val);
return;
}
// otherwise it is for the sub-index
set_index_parameter(ix->base_index, name, val);
return;
}
if (name == "verbose") {
index->verbose = int(val);
return; // last verbose that we could find
}
if (name == "nprobe") {
if (DC(IndexIVF)) {
ix->nprobe = int(val);
return;
}
}
if (name == "ht") {
if (DC(IndexPQ)) {
if (val >= ix->pq.code_size * 8) {
ix->search_type = IndexPQ::ST_PQ;
} else {
ix->search_type = IndexPQ::ST_polysemous;
ix->polysemous_ht = int(val);
}
return;
} else if (DC(IndexIVFPQ)) {
if (val >= ix->pq.code_size * 8) {
ix->polysemous_ht = 0;
} else {
ix->polysemous_ht = int(val);
}
return;
}
}
if (name == "k_factor") {
if (DC(IndexIVFPQR)) {
ix->k_factor = val;
return;
}
}
if (name == "max_codes") {
if (DC(IndexIVF)) {
ix->max_codes = std::isfinite(val) ? size_t(val) : 0;
return;
}
}
if (name == "efSearch") {
if (DC(IndexHNSW)) {
ix->hnsw.efSearch = int(val);
return;
}
if (DC(IndexIVF)) {
if (IndexHNSW* cq = dynamic_cast<IndexHNSW*>(ix->quantizer)) {
cq->hnsw.efSearch = int(val);
return;
}
}
}
if (name.find("quantizer_") == 0) {
if (DC(IndexIVF)) {
std::string sub_name = name.substr(strlen("quantizer_"));
set_index_parameter(ix->quantizer, sub_name, val);
return;
}
}
FAISS_THROW_FMT(
"ParameterSpace::set_index_parameter:"
"could not set parameter %s",
name.c_str());
}