pub struct PQCodebook {
pub config: PQConfig,
pub rotation_matrix: Option<Vec<f32>>,
pub centroids: Vec<f32>,
pub version: u64,
pub centroid_norms: Option<Vec<f32>>,
}Expand description
Learned codebook for Product Quantization with OPQ rotation
Trained once, shared across all segments (like CoarseCentroids).
Fields§
§config: PQConfigConfiguration
rotation_matrix: Option<Vec<f32>>OPQ rotation matrix (dim × dim), stored row-major
centroids: Vec<f32>Centroids: M subspaces × K centroids × subspace_dim
version: u64Version for merge compatibility checking
centroid_norms: Option<Vec<f32>>Precomputed centroid norms for faster distance computation
Implementations§
Source§impl PQCodebook
impl PQCodebook
Sourcepub fn train(config: PQConfig, vectors: &[Vec<f32>], max_iters: usize) -> Self
pub fn train(config: PQConfig, vectors: &[Vec<f32>], max_iters: usize) -> Self
Train codebook with OPQ rotation and anisotropic loss
Sourcepub fn encode(&self, vector: &[f32], centroid: Option<&[f32]>) -> PQVector
pub fn encode(&self, vector: &[f32], centroid: Option<&[f32]>) -> PQVector
Encode a vector to PQ codes
Sourcepub fn get_centroid(&self, subspace_idx: usize, code: u8) -> &[f32]
pub fn get_centroid(&self, subspace_idx: usize, code: u8) -> &[f32]
Get centroid for a specific subspace and code
Sourcepub fn rotate_query(&self, query: &[f32]) -> Vec<f32>
pub fn rotate_query(&self, query: &[f32]) -> Vec<f32>
Rotate a query vector
Sourcepub fn size_bytes(&self) -> usize
pub fn size_bytes(&self) -> usize
Memory usage in bytes
Trait Implementations§
Source§impl Clone for PQCodebook
impl Clone for PQCodebook
Source§fn clone(&self) -> PQCodebook
fn clone(&self) -> PQCodebook
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for PQCodebook
impl Debug for PQCodebook
Source§impl<'de> Deserialize<'de> for PQCodebook
impl<'de> Deserialize<'de> for PQCodebook
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Source§impl Quantizer for PQCodebook
impl Quantizer for PQCodebook
Source§type QueryData = DistanceTable
type QueryData = DistanceTable
Query-specific precomputed data for fast distance computation
Source§fn encode(&self, vector: &[f32], centroid: Option<&[f32]>) -> Self::Code
fn encode(&self, vector: &[f32], centroid: Option<&[f32]>) -> Self::Code
Encode a vector (optionally relative to a centroid)
Source§fn prepare_query(
&self,
query: &[f32],
centroid: Option<&[f32]>,
) -> Self::QueryData
fn prepare_query( &self, query: &[f32], centroid: Option<&[f32]>, ) -> Self::QueryData
Prepare query-specific data for fast distance computation
Source§fn compute_distance(
&self,
query_data: &Self::QueryData,
code: &Self::Code,
) -> f32
fn compute_distance( &self, query_data: &Self::QueryData, code: &Self::Code, ) -> f32
Compute approximate distance using precomputed query data
Source§fn decode(&self, code: &Self::Code) -> Option<Vec<f32>>
fn decode(&self, code: &Self::Code) -> Option<Vec<f32>>
Decode a code back to approximate vector (if supported)
Source§fn size_bytes(&self) -> usize
fn size_bytes(&self) -> usize
Memory usage of the quantizer itself (codebooks, etc.)
Auto Trait Implementations§
impl Freeze for PQCodebook
impl RefUnwindSafe for PQCodebook
impl Send for PQCodebook
impl Sync for PQCodebook
impl Unpin for PQCodebook
impl UnwindSafe for PQCodebook
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.