pub struct RaBitQCodec {
pub dim: usize,
pub bias_correct: bool,
/* private fields */
}Expand description
RaBitQ codec: 1-bit quantization with O(1/√D) MSE error bound.
See module-level documentation for algorithm details.
Fields§
§dim: usize§bias_correct: boolIf true, subtract dot_quantized from the asymmetric distance
estimate as a TurboQuant-style IP-bias correction term.
Implementations§
Source§impl RaBitQCodec
impl RaBitQCodec
Sourcepub fn calibrate(vectors: &[&[f32]], dim: usize, rotation_seed: u64) -> Self
pub fn calibrate(vectors: &[&[f32]], dim: usize, rotation_seed: u64) -> Self
Calibrate a new codec from a set of training vectors.
- Computes the centroid as the coordinate-wise mean of
vectors. - Stores
rotation_seedfor reproducible signed-diagonal generation.
§Errors (none — returns Self directly)
Returns a zero-centroid codec if vectors is empty.
Sourcepub fn apply_rotation(&self, v: &[f32]) -> Vec<f32>
pub fn apply_rotation(&self, v: &[f32]) -> Vec<f32>
Apply the randomised WHT rotation to a residual vector.
Steps:
- Apply signed-diagonal
D(deterministic fromrotation_seed). - Zero-pad to the next power of two if
dimis not pow2. - WHT in-place.
- Truncate back to
dim.
Trait Implementations§
Source§impl VectorCodec for RaBitQCodec
impl VectorCodec for RaBitQCodec
Source§fn fast_symmetric_distance(
&self,
q: &Self::Quantized,
v: &Self::Quantized,
) -> f32
fn fast_symmetric_distance( &self, q: &Self::Quantized, v: &Self::Quantized, ) -> f32
Symmetric distance estimate: both q and v are quantized.
approx_l2 = ‖v-c‖² + ‖q-c‖² − 2·‖v-c‖·‖q-c‖·(1 − 2·hamming/D)
The angular factor 1 − 2·hamming/D approximates cos(θ) between
the two sign-vectors. Error bound: O(1/√D) MSE.
Source§fn exact_asymmetric_distance(&self, q: &Self::Query, v: &Self::Quantized) -> f32
fn exact_asymmetric_distance(&self, q: &Self::Query, v: &Self::Quantized) -> f32
Asymmetric distance estimate: q is a prepared RaBitQQuery, v
is a stored quantized vector.
Uses query_norm (exact ‖q−c‖) against v.residual_norm (exact ‖v−c‖)
for higher fidelity than the symmetric variant.
If self.bias_correct = true, subtract v.dot_quantized as a first-
order IP-bias correction term (TurboQuant-style).
Source§type Quantized = RaBitQQuantized
type Quantized = RaBitQQuantized
UnifiedQuantizedVector
reference via AsRef.Source§type Query = RaBitQQuery
type Query = RaBitQQuery
Source§fn encode(&self, v: &[f32]) -> Self::Quantized
fn encode(&self, v: &[f32]) -> Self::Quantized
Source§fn prepare_query(&self, q: &[f32]) -> Self::Query
fn prepare_query(&self, q: &[f32]) -> Self::Query
Auto Trait Implementations§
impl Freeze for RaBitQCodec
impl RefUnwindSafe for RaBitQCodec
impl Send for RaBitQCodec
impl Sync for RaBitQCodec
impl Unpin for RaBitQCodec
impl UnsafeUnpin for RaBitQCodec
impl UnwindSafe for RaBitQCodec
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
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>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
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
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.