use serde::Deserialize;
use serde::Serialize;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ManifoldParams {
pub min_dist: f32,
pub spread: f32,
pub a: Option<f32>,
pub b: Option<f32>,
}
impl Default for ManifoldParams {
fn default() -> Self {
Self {
min_dist: 0.1,
spread: 1.0,
a: None,
b: None,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GraphParams {
pub n_neighbors: usize,
pub local_connectivity: f32,
pub set_op_mix_ratio: f32,
pub disconnection_distance: Option<f32>,
pub symmetrize: bool,
}
impl Default for GraphParams {
fn default() -> Self {
Self {
n_neighbors: 15,
local_connectivity: 1.0,
set_op_mix_ratio: 1.0,
disconnection_distance: None,
symmetrize: true,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OptimizationParams {
pub n_epochs: Option<usize>,
pub learning_rate: f32,
pub negative_sample_rate: usize,
pub repulsion_strength: f32,
}
impl Default for OptimizationParams {
fn default() -> Self {
Self {
n_epochs: None,
learning_rate: 1.0,
negative_sample_rate: 5,
repulsion_strength: 1.0,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UmapConfig {
pub n_components: usize,
pub manifold: ManifoldParams,
pub graph: GraphParams,
pub optimization: OptimizationParams,
}
impl Default for UmapConfig {
fn default() -> Self {
Self {
n_components: 2,
manifold: ManifoldParams::default(),
graph: GraphParams::default(),
optimization: OptimizationParams::default(),
}
}
}