use linfa::traits::Transformer;
use linfa_kernel::{Kernel, KernelMethod, KernelType};
use linfa_reduction::utils::generate_convoluted_rings2d;
use linfa_reduction::{DiffusionMap, Result};
use ndarray_npy::write_npy;
use rand::{rngs::SmallRng, SeedableRng};
fn main() -> Result<()> {
let mut rng = SmallRng::seed_from_u64(42);
let n = 500;
let dataset =
generate_convoluted_rings2d(&[(0.0, 3.0), (10.0, 13.0), (20.0, 23.0)], n, &mut rng);
let kernel = Kernel::params()
.kind(KernelType::Sparse(15))
.method(KernelMethod::Gaussian(2.0))
.transform(dataset.view());
let embedding = DiffusionMap::<f64>::params(2).steps(1).transform(&kernel)?;
let embedding = embedding.embedding();
write_npy("diffusion_map_dataset.npy", &dataset).expect("Failed to write .npy file");
write_npy("diffusion_map_embedding.npy", embedding).expect("Failed to write .npy file");
Ok(())
}