use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FeatureExtractionConfig {
pub enable_syndrome_history: bool,
pub history_length: usize,
pub enable_spatial_features: bool,
pub enable_temporal_features: bool,
pub enable_correlation_features: bool,
pub enable_auto_extraction: bool,
pub circuit_features: CircuitFeatureConfig,
pub hardware_features: HardwareFeatureConfig,
pub temporal_features: TemporalFeatureConfig,
pub statistical_features: StatisticalFeatureConfig,
pub graph_features: GraphFeatureConfig,
pub feature_selection: FeatureSelectionConfig,
pub dimensionality_reduction: DimensionalityReductionConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CircuitFeatureConfig {
pub basic_properties: bool,
pub gate_distributions: bool,
pub depth_analysis: bool,
pub connectivity_patterns: bool,
pub entanglement_measures: bool,
pub symmetry_analysis: bool,
pub critical_path_analysis: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HardwareFeatureConfig {
pub topology_features: bool,
pub calibration_features: bool,
pub error_rate_features: bool,
pub timing_features: bool,
pub resource_features: bool,
pub environmental_features: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TemporalFeatureConfig {
pub time_series_analysis: bool,
pub trend_detection: bool,
pub seasonality_analysis: bool,
pub autocorrelation_features: bool,
pub fourier_features: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StatisticalFeatureConfig {
pub moment_features: bool,
pub distribution_fitting: bool,
pub correlation_features: bool,
pub outlier_features: bool,
pub normality_tests: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GraphFeatureConfig {
pub centrality_measures: bool,
pub community_features: bool,
pub spectral_features: bool,
pub path_features: bool,
pub clustering_features: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FeatureSelectionConfig {
pub enable_selection: bool,
pub selection_methods: Vec<FeatureSelectionMethod>,
pub num_features: Option<usize>,
pub selection_threshold: f64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum FeatureSelectionMethod {
VarianceThreshold,
UnivariateSelection,
RecursiveFeatureElimination,
FeatureImportance,
MutualInformation,
CorrelationFilter,
LassoSelection,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DimensionalityReductionConfig {
pub enable_reduction: bool,
pub reduction_methods: Vec<DimensionalityReductionMethod>,
pub target_dimensions: Option<usize>,
pub variance_threshold: f64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum DimensionalityReductionMethod {
PCA,
ICA,
LDA,
TSNE,
UMAP,
AutoEncoder,
VariationalAutoEncoder,
}