Skip to main content

lance_index/vector/sq/
builder.rs

1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: Copyright The Lance Authors
3
4use crate::vector::quantizer::QuantizerBuildParams;
5
6#[derive(Debug, Clone)]
7pub struct SQBuildParams {
8    /// Number of bits of scaling range.
9    pub num_bits: u16,
10
11    /// Sample rate for training.
12    pub sample_rate: usize,
13}
14
15impl From<&SQBuildParams> for crate::pb::vector_index_details::ScalarQuantization {
16    fn from(params: &SQBuildParams) -> Self {
17        Self {
18            num_bits: params.num_bits as u32,
19        }
20    }
21}
22
23impl Default for SQBuildParams {
24    fn default() -> Self {
25        Self {
26            num_bits: 8,
27            sample_rate: 256,
28        }
29    }
30}
31
32impl QuantizerBuildParams for SQBuildParams {
33    fn sample_size(&self) -> usize {
34        self.sample_rate * 2usize.pow(self.num_bits as u32)
35    }
36}