1use crate::bitpack::PackedCodes;
2
3#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
8#[derive(Debug, Clone, PartialEq)]
9pub struct QuantizedVector {
10 pub(crate) sketch_dim: usize,
11 pub(crate) bits: u8,
12 pub(crate) codes: PackedCodes,
13 pub(crate) encoded_norm: Option<u16>,
14}
15
16impl QuantizedVector {
17 pub fn sketch_dim(&self) -> usize {
19 self.sketch_dim
20 }
21
22 pub fn bits(&self) -> u8 {
24 self.bits
25 }
26
27 pub fn packed_bytes(&self) -> &[u8] {
29 self.codes.bytes()
30 }
31
32 pub fn encoded_norm(&self) -> Option<u16> {
34 self.encoded_norm
35 }
36
37 pub fn storage_bytes(&self) -> usize {
39 self.codes.bytes().len() + usize::from(self.encoded_norm.is_some()) * 2
40 }
41}
42
43#[derive(Debug, Clone, PartialEq)]
45pub struct QuerySketch {
46 pub(crate) values: Vec<f32>,
47 pub(crate) input_norm: f32,
48}
49
50impl QuerySketch {
51 pub fn values(&self) -> &[f32] {
53 &self.values
54 }
55
56 pub fn input_norm(&self) -> f32 {
58 self.input_norm
59 }
60
61 pub fn sketch_dim(&self) -> usize {
63 self.values.len()
64 }
65}