use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SciRS2NoiseConfig {
pub enable_ml_modeling: bool,
pub enable_spectral_analysis: bool,
pub enable_temporal_modeling: bool,
pub enable_spatial_modeling: bool,
pub enable_multi_level_decomposition: bool,
pub confidence_level: f64,
pub num_realizations: usize,
pub sampling_frequency: f64,
pub spatial_range: usize,
pub enable_adaptive_modeling: bool,
pub validation_config: ValidationConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ValidationConfig {
pub cv_folds: usize,
pub test_ratio: f64,
pub enable_bootstrap: bool,
pub bootstrap_samples: usize,
pub metrics: Vec<ValidationMetric>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ValidationMetric {
RMSE,
MAE,
R2,
LogLikelihood,
AIC,
BIC,
KLDivergence,
WassersteinDistance,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum DistributionType {
Normal,
LogNormal,
Gamma,
Exponential,
Poisson,
Mixture,
Empirical,
Custom(String),
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum NoiseColor {
White,
Pink,
Brown,
Blue,
Violet,
Custom { exponent: f64 },
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ARModelType {
AR,
MA,
ARMA,
ARIMA,
GARCH,
Custom(String),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum MLModelType {
GaussianProcess,
NeuralNetwork,
RandomForest,
SupportVector,
Ensemble,
Custom(String),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum SpatialInterpolation {
Kriging,
RadialBasisFunction,
InverseDistance,
NearestNeighbor,
Spline,
Custom(String),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum DecompositionMethod {
PCA,
ICA,
NMF,
FastICA,
Wavelet,
Custom(String),
}
impl Default for SciRS2NoiseConfig {
fn default() -> Self {
Self {
enable_ml_modeling: true,
enable_spectral_analysis: true,
enable_temporal_modeling: true,
enable_spatial_modeling: true,
enable_multi_level_decomposition: true,
confidence_level: 0.95,
num_realizations: 1000,
sampling_frequency: 1e9, spatial_range: 5,
enable_adaptive_modeling: true,
validation_config: ValidationConfig {
cv_folds: 5,
test_ratio: 0.2,
enable_bootstrap: true,
bootstrap_samples: 100,
metrics: vec![
ValidationMetric::RMSE,
ValidationMetric::R2,
ValidationMetric::LogLikelihood,
],
},
}
}
}
impl Default for ValidationConfig {
fn default() -> Self {
Self {
cv_folds: 5,
test_ratio: 0.2,
enable_bootstrap: true,
bootstrap_samples: 100,
metrics: vec![ValidationMetric::RMSE, ValidationMetric::R2],
}
}
}