turboquant 0.1.0

Implementation of Google's TurboQuant algorithm for vector quantization
Documentation
//! # TurboQuant
//!
//! A Rust implementation of Google's TurboQuant algorithm for high-performance
//! vector quantization, optimized for LLM KV cache compression.
//!
//! ## Overview
//!
//! TurboQuant provides two complementary quantizers:
//!
//! - **TurboQuantMSE**: Minimizes mean squared reconstruction error via
//!   random rotation + Lloyd-Max scalar quantization.
//! - **TurboQuantProd**: Minimizes inner product estimation error via
//!   two-stage quantization (MSE stage + QJL residual correction).
//! - **PolarQuant**: Hierarchical polar-coordinate quantizer for KV caches.
//!
//! ## Example
//!
//! ```rust
//! use turboquant::turboquant_mse::TurboQuantMSE;
//! use turboquant::utils::normalize;
//!
//! let dim = 128;
//! let tq = TurboQuantMSE::new(dim, 4, 42).unwrap();
//! let x: Vec<f64> = (0..dim).map(|i| i as f64).collect();
//! let x_norm = normalize(&x).unwrap();
//!
//! let q = tq.quantize(&x_norm).unwrap();
//! let x_approx = tq.dequantize(&q).unwrap();
//! println!("Compression ratio: {:.1}x", q.compression_ratio());
//! ```

pub mod batch;
pub mod bitpack;
pub mod codebook;
pub mod error;
pub mod kv_cache;
pub mod polar;
pub mod qjl;
pub mod rotation;
pub mod scalar_quant;
pub mod turboquant_mse;
pub mod turboquant_prod;
pub mod utils;

// Convenient re-exports for the most common types
pub use batch::{
    batch_attention_scores_mse, batch_dequantize_mse, batch_estimate_inner_products,
    batch_ip_error, batch_mse, batch_quantize_mse, batch_quantize_prod, BatchQuantizedMSE,
    BatchQuantizedProd, BatchStats,
};
pub use bitpack::BitPackedVector;
pub use codebook::Codebook;
pub use error::{Result, TurboQuantError};
pub use kv_cache::{
    CacheStats, KVCacheConfig, MultiHeadCacheStats, MultiHeadConfig, MultiHeadKVCache,
    QuantStrategy, QuantizedKVCache,
};
pub use polar::{PolarQuant, PolarQuantized};
pub use qjl::{QJLQuantized, QJL};
pub use rotation::RandomRotation;
pub use scalar_quant::ScalarQuantizer;
pub use turboquant_mse::{QuantizedVector, TurboQuantMSE};
pub use turboquant_prod::{ProdQuantized, TurboQuantProd};