use crate::bitpack::PackedCodes;
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Debug, Clone, PartialEq)]
pub struct QuantizedVector {
pub(crate) sketch_dim: usize,
pub(crate) bits: u8,
pub(crate) codes: PackedCodes,
pub(crate) encoded_norm: Option<u16>,
}
impl QuantizedVector {
pub fn sketch_dim(&self) -> usize {
self.sketch_dim
}
pub fn bits(&self) -> u8 {
self.bits
}
pub fn packed_bytes(&self) -> &[u8] {
self.codes.bytes()
}
pub fn encoded_norm(&self) -> Option<u16> {
self.encoded_norm
}
pub fn storage_bytes(&self) -> usize {
self.codes.bytes().len() + usize::from(self.encoded_norm.is_some()) * 2
}
}
#[derive(Debug, Clone, PartialEq)]
pub struct QuerySketch {
pub(crate) values: Vec<f32>,
pub(crate) input_norm: f32,
}
impl QuerySketch {
pub fn values(&self) -> &[f32] {
&self.values
}
pub fn input_norm(&self) -> f32 {
self.input_norm
}
pub fn sketch_dim(&self) -> usize {
self.values.len()
}
}