use cubecl::wgpu::WgpuRuntime;
use fast_umap::prelude::*;
use rand::Rng;
fn main() {
let num_samples = 100;
let num_features = 3;
let mut rng = rand::rng();
let data: Vec<Vec<f64>> = (0..num_samples * num_features)
.map(|_| rng.random::<f64>())
.collect::<Vec<f64>>()
.chunks_exact(num_features)
.map(|chunk| chunk.to_vec())
.collect();
type MyBackend = burn::backend::wgpu::CubeBackend<WgpuRuntime, f32, i32, u32>;
type MyAutodiffBackend = burn::backend::Autodiff<MyBackend>;
let config = UmapConfig::default(); let umap = fast_umap::Umap::<MyAutodiffBackend>::new(config);
let fitted = umap.fit(data.clone(), None);
let embedding = fitted.embedding();
println!("Embedding shape: {} × {}", embedding.len(), embedding[0].len());
let _new_embedding = fitted.transform(data.clone());
println!("Transform done.");
}