pub struct Recompressor { /* private fields */ }Expand description
Recompression utilities for MinMax quantized vectors.
This struct provides functionality to further compress MinMax quantized
vectors from a source bitrate N to a target bitrate M for N > M.
A positive grid_scale is used to (optionally) tighten or widen the
reconstruction range that the target codes span before re-quantization.
grid_scale == 1.0 preserves the source reconstruction range exactly
(legacy behavior). grid_scale < 1.0 narrows the range, dedicating more
resolution to interior values at the cost of clipping the extremes;
grid_scale > 1.0 widens the range (coarser steps, no clipping).
§Notes
- Currently this API only supports the following conversions: 8 -> 4, 8 -> 2, 4 -> 2
§Example
use std::num::NonZeroUsize;
use diskann_quantization::algorithms::{Transform, transforms::NullTransform};
use diskann_quantization::minmax::{Data, MinMaxQuantizer, Recompressor};
use diskann_quantization::num::Positive;
use diskann_quantization::CompressInto;
use diskann_utils::{Reborrow, ReborrowMut};
// Create a quantizer and compress an f32 vector to 8-bit
let vector = vec![0.1, -0.5, 0.8, -0.2];
let quantizer = MinMaxQuantizer::new(
Transform::Null(NullTransform::new(NonZeroUsize::new(4).unwrap())),
Positive::new(1.0).unwrap(),
);
let mut encoded_8 = Data::<8>::new_boxed(4);
quantizer.compress_into(vector.as_slice(), encoded_8.reborrow_mut()).unwrap();
// Recompress from 8-bit to 4-bit, preserving the source range
let recompressor = Recompressor::new(Positive::new(1.0).unwrap());
let mut encoded_4 = Data::<4>::new_boxed(4);
recompressor.compress_into(encoded_8.reborrow(), encoded_4.reborrow_mut()).unwrap();Implementations§
Source§impl Recompressor
impl Recompressor
Sourcepub fn new(grid_scale: Positive<f32>) -> Self
pub fn new(grid_scale: Positive<f32>) -> Self
Construct a new Recompressor with the given positive grid_scale.
grid_scale == 1.0 reproduces the legacy behavior of preserving the
source reconstruction range exactly.
Sourcepub fn grid_scale(&self) -> Positive<f32>
pub fn grid_scale(&self) -> Positive<f32>
Returns the configured grid scale.
Trait Implementations§
Source§impl Clone for Recompressor
impl Clone for Recompressor
Source§fn clone(&self) -> Recompressor
fn clone(&self) -> Recompressor
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<'a, 'b> CompressInto<VectorBase<4, Unsigned, SlicePtr<'a, u8>, Ref<'a, MinMaxCompensation>>, VectorBase<2, Unsigned, MutSlicePtr<'b, u8>, Mut<'b, MinMaxCompensation>>> for Recompressor
impl<'a, 'b> CompressInto<VectorBase<4, Unsigned, SlicePtr<'a, u8>, Ref<'a, MinMaxCompensation>>, VectorBase<2, Unsigned, MutSlicePtr<'b, u8>, Mut<'b, MinMaxCompensation>>> for Recompressor
Source§impl<'a, 'b> CompressInto<VectorBase<8, Unsigned, SlicePtr<'a, u8>, Ref<'a, MinMaxCompensation>>, VectorBase<2, Unsigned, MutSlicePtr<'b, u8>, Mut<'b, MinMaxCompensation>>> for Recompressor
impl<'a, 'b> CompressInto<VectorBase<8, Unsigned, SlicePtr<'a, u8>, Ref<'a, MinMaxCompensation>>, VectorBase<2, Unsigned, MutSlicePtr<'b, u8>, Mut<'b, MinMaxCompensation>>> for Recompressor
Source§impl<'a, 'b> CompressInto<VectorBase<8, Unsigned, SlicePtr<'a, u8>, Ref<'a, MinMaxCompensation>>, VectorBase<4, Unsigned, MutSlicePtr<'b, u8>, Mut<'b, MinMaxCompensation>>> for Recompressor
impl<'a, 'b> CompressInto<VectorBase<8, Unsigned, SlicePtr<'a, u8>, Ref<'a, MinMaxCompensation>>, VectorBase<4, Unsigned, MutSlicePtr<'b, u8>, Mut<'b, MinMaxCompensation>>> for Recompressor
impl Copy for Recompressor
Auto Trait Implementations§
impl Freeze for Recompressor
impl RefUnwindSafe for Recompressor
impl Send for Recompressor
impl Sync for Recompressor
impl Unpin for Recompressor
impl UnsafeUnpin for Recompressor
impl UnwindSafe for Recompressor
Blanket Implementations§
impl<T> AsyncFriendly for T
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> 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>
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 more