import numpy as np
import bitpolar
q = bitpolar.TurboQuantizer(dim=128, bits=4, projections=32, seed=42)
print(f"Quantizer: dim={q.dim}, code_size={q.code_size_bytes}B")
vector = np.random.randn(128).astype(np.float32)
code = q.encode(vector)
print(f"Encoded: {len(vector)*4}B → {len(code)}B ({len(vector)*4/len(code):.1f}x compression)")
decoded = q.decode(code)
error = np.linalg.norm(vector - decoded) / np.linalg.norm(vector)
print(f"Reconstruction error: {error:.4f}")
score = q.inner_product(code, vector)
exact = float(np.dot(vector, vector))
print(f"Inner product: estimated={score:.4f}, exact={exact:.4f}")