use super::algorithms::{ClusteringAlgorithm, DistanceMetric};
#[derive(Debug, Clone)]
pub struct ClusteringConfig {
pub algorithm: ClusteringAlgorithm,
pub distance_metric: DistanceMetric,
pub feature_extraction: FeatureExtractionMethod,
pub parallel_processing: bool,
pub cache_distances: bool,
pub analysis_depth: AnalysisDepth,
pub seed: Option<u64>,
pub visualization: VisualizationConfig,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum FeatureExtractionMethod {
Raw,
EnergyBased,
Structural,
LSH { num_hashes: usize, num_bits: usize },
PCA { num_components: usize },
AutoEncoder { hidden_layers: Vec<usize> },
Custom { name: String },
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum AnalysisDepth {
Basic,
Standard,
Comprehensive,
Deep,
}
#[derive(Debug, Clone)]
pub struct VisualizationConfig {
pub enabled: bool,
pub dimensionality_reduction: DimensionalityReduction,
pub plot_types: Vec<PlotType>,
pub color_scheme: ColorScheme,
pub output_format: OutputFormat,
}
#[derive(Debug, Clone, PartialEq)]
pub enum DimensionalityReduction {
PCA,
TSNE { perplexity: f64 },
UMAP { n_neighbors: usize, min_dist: f64 },
MDS,
LDA,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum PlotType {
ScatterPlot,
EnergyHistogram,
SilhouettePlot,
Dendrogram,
LandscapeHeatMap,
ConvergenceTrajectories,
CorrelationMatrix,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ColorScheme {
Default,
Viridis,
Plasma,
Spectral,
Custom(Vec<String>),
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum OutputFormat {
PNG,
SVG,
PDF,
HTML,
}
impl Default for ClusteringConfig {
fn default() -> Self {
Self {
algorithm: ClusteringAlgorithm::KMeans {
k: 5,
max_iterations: 100,
},
distance_metric: DistanceMetric::Euclidean,
feature_extraction: FeatureExtractionMethod::Raw,
parallel_processing: true,
cache_distances: true,
analysis_depth: AnalysisDepth::Standard,
seed: None,
visualization: VisualizationConfig {
enabled: true,
dimensionality_reduction: DimensionalityReduction::PCA,
plot_types: vec![PlotType::ScatterPlot, PlotType::EnergyHistogram],
color_scheme: ColorScheme::Default,
output_format: OutputFormat::PNG,
},
}
}
}
#[must_use]
pub fn create_basic_clustering_config() -> ClusteringConfig {
ClusteringConfig {
algorithm: ClusteringAlgorithm::KMeans {
k: 5,
max_iterations: 100,
},
distance_metric: DistanceMetric::Euclidean,
feature_extraction: FeatureExtractionMethod::Raw,
analysis_depth: AnalysisDepth::Basic,
..Default::default()
}
}
#[must_use]
pub fn create_comprehensive_clustering_config() -> ClusteringConfig {
ClusteringConfig {
algorithm: ClusteringAlgorithm::DBSCAN {
eps: 0.5,
min_samples: 5,
},
distance_metric: DistanceMetric::Euclidean,
feature_extraction: FeatureExtractionMethod::Structural,
analysis_depth: AnalysisDepth::Comprehensive,
parallel_processing: true,
cache_distances: true,
visualization: VisualizationConfig {
enabled: true,
dimensionality_reduction: DimensionalityReduction::TSNE { perplexity: 30.0 },
plot_types: vec![
PlotType::ScatterPlot,
PlotType::EnergyHistogram,
PlotType::SilhouettePlot,
PlotType::LandscapeHeatMap,
],
color_scheme: ColorScheme::Viridis,
output_format: OutputFormat::SVG,
},
..Default::default()
}
}