Skip to main content

RaBitQuantizer

Struct RaBitQuantizer 

Source
pub struct RaBitQuantizer { /* private fields */ }
Expand description

RaBitQ 1-bit quantizer (32x compression, unbiased distance estimator).

Implementations§

Source§

impl RaBitQuantizer

Source

pub fn fit(training_vectors: &[Vec<f32>]) -> Self

Fit a quantizer from training vectors using the default rotation seed.

Computes the centroid as the per-dimension mean and generates a seeded random orthonormal rotation. Reproducible across runs.

§Panics

Panics if training_vectors is empty or has inconsistent dimensions.

Source

pub fn fit_with_seed(training_vectors: &[Vec<f32>], seed: u64) -> Self

Fit with an explicit rotation seed.

Source

pub fn dim(&self) -> usize

Dimensionality.

Source

pub fn encode(&self, vector: &[f32]) -> RaBitCode

Encode a vector into a RaBitQ code.

Source

pub fn prepare_query(&self, query: &[f32]) -> PreparedQuery

Prepare a query once for repeated estimate_dist_sq calls.

Source

pub fn estimate_dist_sq(&self, query: &PreparedQuery, code: &RaBitCode) -> f32

Estimate squared L2 distance between a prepared query and a code.

S = Σ (2bᵢ − 1) · rqᵢ, then ‖o−q‖² ≈ dtc² + ‖q−c‖² − 2·est_factor·S.

Source§

impl RaBitQuantizer

Inherent, not a trait impl.

These used to satisfy a Quantizer trait in vector::quantize, which had three implementors and was used polymorphically by nothing – no dyn Quantizer, no T: Quantizer bound anywhere in the workspace. The other two implementors (ScalarQuantizer, BinaryQuantizer) were a SECOND implementation of SQ8, which the index never called: hnsw.rs has its own SoA layout and its own AVX2 kernels in vector::simd. Two copies of one idea, one of them shipped and one of them merely benchmarked. That is the shape of every bug in the 1.0 audit, so the copy nobody ran was deleted and the abstraction over it went with it.

Source

pub fn quantize(&self, vector: &[f32]) -> RaBitCode

Encode a vector to its 1-bit code. See Self::encode.

Source

pub fn dequantize(&self, quantized: &RaBitCode) -> Vec<f32>

Reconstruct an approximate vector from its code. Lossy (sign-only) but directionally correct; used by [Self::distance_symmetric].

Source

pub fn distance_quantized(&self, a: &RaBitCode, b: &RaBitCode) -> f32

Distance between two codes, with one side dequantized – RaBitQ’s estimator is asymmetric, so there is no honest code-to-code distance.

Source

pub fn distance_asymmetric(&self, query: &[f32], quantized: &RaBitCode) -> f32

Distance from a full-precision query to a code. This is the estimator the index uses, though the hot path goes through simd::rabitq_asymmetric_l2_simd rather than here.

Trait Implementations§

Source§

impl Clone for RaBitQuantizer

Source§

fn clone(&self) -> RaBitQuantizer

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for RaBitQuantizer

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for RaBitQuantizer

Source§

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 Serialize for RaBitQuantizer

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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 more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.