pub struct PolarCodec { /* private fields */ }Expand description
PolarQuant codec: batch encode, query preparation, and high-throughput scan.
Implementations§
Source§impl PolarCodec
impl PolarCodec
Sourcepub fn encode(&self, vector: &[f32]) -> CompressedCode
pub fn encode(&self, vector: &[f32]) -> CompressedCode
Encode a single vector (convenience, allocates).
Sourcepub fn encode_batch(&self, vectors: &Array2<f32>) -> CompressedCorpus
pub fn encode_batch(&self, vectors: &Array2<f32>) -> CompressedCorpus
Batch-encode into a flat CompressedCorpus (SoA layout).
Uses BLAS for the rotation: rotated = vectors × Πᵀ (one GEMM).
Quantization is scalar but cache-friendly (sequential writes).
Sourcepub fn encode_batch_codes(&self, vectors: &Array2<f32>) -> Vec<CompressedCode>
pub fn encode_batch_codes(&self, vectors: &Array2<f32>) -> Vec<CompressedCode>
Also produce the old per-vector codes (for backward compat with index.rs).
Sourcepub fn prepare_query(&self, query: &[f32]) -> QueryState
pub fn prepare_query(&self, query: &[f32]) -> QueryState
Prepare query-dependent centroid lookup table.
Cost: one 768×768 matvec + 384×16 multiply-adds = ~0.08ms.
The returned QueryState is reused for ALL vectors in the scan.
Sourcepub fn scan_corpus(
&self,
corpus: &CompressedCorpus,
qs: &QueryState,
) -> Vec<f32>
pub fn scan_corpus( &self, corpus: &CompressedCorpus, qs: &QueryState, ) -> Vec<f32>
High-throughput scan of a CompressedCorpus against a prepared query.
Returns approximate inner product scores for all vectors. Memory access: sequential streaming through radii + indices (cache-optimal). Centroid table: 24 KB, stays in L1 throughout.
At 100K vectors, d=768: ~3.3ms on CPU, ~0.1ms on GPU (future Metal kernel).
Sourcepub fn batch_scan(&self, codes: &[CompressedCode], qs: &QueryState) -> Vec<f32>
pub fn batch_scan(&self, codes: &[CompressedCode], qs: &QueryState) -> Vec<f32>
Scan per-vector codes (old API, for backward compat).
Auto Trait Implementations§
impl Freeze for PolarCodec
impl RefUnwindSafe for PolarCodec
impl Send for PolarCodec
impl Sync for PolarCodec
impl Unpin for PolarCodec
impl UnsafeUnpin for PolarCodec
impl UnwindSafe for PolarCodec
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
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<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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>
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>
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> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.