use std::io;
use serde::{Deserialize, Serialize};
mod binary;
mod pq;
pub(crate) mod pq_kmeans;
pub(crate) mod pq_opq;
mod rabitq;
pub(crate) mod rabitq_store;
mod scalar;
pub use binary::BinaryQuantizedVector;
#[allow(unused_imports)]
pub(crate) use pq::distance_pq_l2;
pub use pq::{PQCodebook, PQVector, ProductQuantizer};
#[cfg(feature = "persistence")]
pub use pq_opq::train_opq;
#[cfg(feature = "persistence")]
pub(crate) use rabitq::PreparedQuery;
pub use rabitq::{RaBitQCorrection, RaBitQIndex, RaBitQVector};
#[cfg(feature = "persistence")]
pub(crate) use rabitq_store::RaBitQVectorStore;
pub use scalar::{
cosine_similarity_quantized, cosine_similarity_quantized_simd, dot_product_quantized,
dot_product_quantized_simd, euclidean_squared_quantized, euclidean_squared_quantized_simd,
QuantizedVector,
};
pub trait QuantizationCodec: Sized {
fn to_bytes(&self) -> Vec<u8>;
fn from_bytes(bytes: &[u8]) -> io::Result<Self>;
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
#[non_exhaustive]
pub enum StorageMode {
#[default]
Full,
SQ8,
Binary,
ProductQuantization,
RaBitQ,
}