turbo-quant 0.2.2

Experimental vector compression sidecars with PolarQuant, TurboQuant, QJL sketches, wire formats, and benchmark receipts
Documentation
use turbo_quant::{PolarQuantizer, TurboQuantizer};

#[test]
fn polar_projected_query_matches_unprepared_scoring() {
    let q = PolarQuantizer::new(32, 8, 42).unwrap();
    let vector = vec![0.25; 32];
    let query = vec![0.125; 32];
    let code = q.encode(&vector).unwrap();
    let prepared = q.project_query(&query).unwrap();
    let direct = q.inner_product_estimate(&code, &query).unwrap();
    let prepared_score = q
        .inner_product_estimate_with_projected_query(&code, &prepared)
        .unwrap();
    assert!((direct - prepared_score).abs() <= 1e-6);
}

#[test]
fn turbo_projected_query_matches_unprepared_scoring() {
    let q = TurboQuantizer::new(32, 8, 8, 42).unwrap();
    let vector = vec![0.25; 32];
    let query = vec![0.125; 32];
    let code = q.encode(&vector).unwrap();
    let prepared = q.prepare_query(&query).unwrap();
    let direct = q.inner_product_estimate(&code, &query).unwrap();
    let prepared_score = q.inner_product_estimate_prepared(&code, &prepared).unwrap();
    assert!((direct - prepared_score).abs() <= 1e-6);
}