use rabitq_rs::{IvfRabitqIndex, Metric, RotatorType, SearchParams};
use rand::prelude::*;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut rng = StdRng::seed_from_u64(42);
let dim = 128;
let dataset: Vec<Vec<f32>> = (0..10_000)
.map(|_| (0..dim).map(|_| rng.gen::<f32>()).collect())
.collect();
let index = IvfRabitqIndex::train(
&dataset,
256, 7, Metric::L2,
RotatorType::FhtKacRotator, 42, false, )?;
let params = SearchParams::new(10, 32);
let results = index.search(&dataset[0], params)?;
println!(
"Top neighbor ID: {}, distance: {}",
results[0].id, results[0].score
);
Ok(())
}