use crate::distance::DistanceMetric;
#[derive(Debug, Clone, zerompk::ToMessagePack, zerompk::FromMessagePack)]
pub struct IvfPqParams {
pub n_cells: usize,
pub pq_m: usize,
pub pq_k: usize,
pub nprobe: usize,
pub metric: DistanceMetric,
}
impl IvfPqParams {
pub fn training_threshold(&self) -> usize {
self.n_cells.max(self.pq_k).max(1)
}
}
impl Default for IvfPqParams {
fn default() -> Self {
Self {
n_cells: 256,
pq_m: 8,
pq_k: 256,
nprobe: 16,
metric: DistanceMetric::L2,
}
}
}