mod pq;
mod rabitq;
pub use pq::{DistanceTable, PQCodebook, PQConfig, PQVector};
pub use rabitq::{QuantizedQuery, QuantizedVector, RaBitQCodebook, RaBitQConfig};
use super::ivf::cluster::QuantizedCode;
pub trait Quantizer: Clone + Send + Sync {
type Code: QuantizedCode;
type Config: Clone;
type QueryData;
fn encode(&self, vector: &[f32], centroid: Option<&[f32]>) -> Self::Code;
fn prepare_query(&self, query: &[f32], centroid: Option<&[f32]>) -> Self::QueryData;
fn compute_distance(&self, query_data: &Self::QueryData, code: &Self::Code) -> f32;
fn decode(&self, _code: &Self::Code) -> Option<Vec<f32>> {
None
}
fn size_bytes(&self) -> usize;
}