#![allow(dead_code)]
use docbert_plaid::index::DocumentTokens;
use rand::{RngExt, SeedableRng, rngs::StdRng};
pub fn random_unit_vectors(seed: u64, n_points: usize, dim: usize) -> Vec<f32> {
let mut rng = StdRng::seed_from_u64(seed);
let mut data = Vec::with_capacity(n_points * dim);
for _ in 0..n_points {
let mut row = vec![0.0f32; dim];
for v in &mut row {
*v = rng.random::<f32>() * 2.0 - 1.0;
}
let norm = row.iter().map(|x| x * x).sum::<f32>().sqrt().max(1e-9);
for v in &mut row {
*v /= norm;
}
data.extend_from_slice(&row);
}
data
}
pub fn random_corpus(
seed: u64,
n_docs: usize,
tokens_per_doc: usize,
dim: usize,
) -> Vec<DocumentTokens> {
let mut rng = StdRng::seed_from_u64(seed);
(0..n_docs)
.map(|i| {
let inner_seed = rng.random::<u64>();
let tokens = random_unit_vectors(inner_seed, tokens_per_doc, dim);
DocumentTokens {
doc_id: i as u64,
tokens,
n_tokens: tokens_per_doc,
}
})
.collect()
}