use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MidCircuitConfig {
pub max_measurement_latency: f64,
pub enable_realtime_processing: bool,
pub measurement_buffer_size: usize,
pub classical_timeout: f64,
pub enable_measurement_mitigation: bool,
pub enable_parallel_measurements: bool,
pub hardware_optimizations: HardwareOptimizations,
pub validation_config: ValidationConfig,
pub analytics_config: AdvancedAnalyticsConfig,
pub adaptive_config: AdaptiveConfig,
pub ml_optimization_config: MLOptimizationConfig,
pub prediction_config: PredictionConfig,
pub enable_adaptive_protocols: bool,
}
impl Default for MidCircuitConfig {
fn default() -> Self {
Self {
max_measurement_latency: 100.0, enable_realtime_processing: true,
measurement_buffer_size: 1024,
classical_timeout: 50.0, enable_measurement_mitigation: true,
enable_parallel_measurements: true,
hardware_optimizations: HardwareOptimizations::default(),
validation_config: ValidationConfig::default(),
analytics_config: AdvancedAnalyticsConfig::default(),
adaptive_config: AdaptiveConfig::default(),
ml_optimization_config: MLOptimizationConfig::default(),
prediction_config: PredictionConfig::default(),
enable_adaptive_protocols: true,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HardwareOptimizations {
pub batch_measurements: bool,
pub optimize_scheduling: bool,
pub use_native_protocols: bool,
pub measurement_compression: bool,
pub precompile_conditions: bool,
}
impl Default for HardwareOptimizations {
fn default() -> Self {
Self {
batch_measurements: true,
optimize_scheduling: true,
use_native_protocols: true,
measurement_compression: false,
precompile_conditions: true,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ValidationConfig {
pub validate_capabilities: bool,
pub check_timing_constraints: bool,
pub validate_register_sizes: bool,
pub check_measurement_conflicts: bool,
pub validate_feedforward: bool,
}
impl Default for ValidationConfig {
fn default() -> Self {
Self {
validate_capabilities: true,
check_timing_constraints: true,
validate_register_sizes: true,
check_measurement_conflicts: true,
validate_feedforward: true,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AdvancedAnalyticsConfig {
pub enable_realtime_stats: bool,
pub enable_correlation_analysis: bool,
pub enable_time_series: bool,
pub enable_anomaly_detection: bool,
pub significance_threshold: f64,
pub analysis_window_size: usize,
pub enable_distribution_fitting: bool,
pub enable_causal_inference: bool,
}
impl Default for AdvancedAnalyticsConfig {
fn default() -> Self {
Self {
enable_realtime_stats: true,
enable_correlation_analysis: true,
enable_time_series: false,
enable_anomaly_detection: true,
significance_threshold: 0.05,
analysis_window_size: 100,
enable_distribution_fitting: false,
enable_causal_inference: false,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AdaptiveConfig {
pub enable_adaptive_scheduling: bool,
pub enable_dynamic_thresholds: bool,
pub enable_protocol_adaptation: bool,
pub learning_rate: f64,
pub baseline_update_rate: f64,
pub drift_threshold: f64,
pub adaptation_window: usize,
pub enable_feedback_optimization: bool,
pub improvement_threshold: f64,
}
impl Default for AdaptiveConfig {
fn default() -> Self {
Self {
enable_adaptive_scheduling: false,
enable_dynamic_thresholds: false,
enable_protocol_adaptation: false,
learning_rate: 0.01,
baseline_update_rate: 0.1,
drift_threshold: 0.1,
adaptation_window: 50,
enable_feedback_optimization: false,
improvement_threshold: 0.05,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MLOptimizationConfig {
pub enable_ml_optimization: bool,
pub model_types: Vec<MLModelType>,
pub training_config: MLTrainingConfig,
pub feature_engineering: FeatureEngineeringConfig,
pub enable_transfer_learning: bool,
pub online_learning: OnlineLearningConfig,
}
impl Default for MLOptimizationConfig {
fn default() -> Self {
Self {
enable_ml_optimization: false,
model_types: vec![MLModelType::LinearRegression],
training_config: MLTrainingConfig::default(),
feature_engineering: FeatureEngineeringConfig::default(),
enable_transfer_learning: false,
online_learning: OnlineLearningConfig::default(),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum MLModelType {
LinearRegression,
RandomForest {
n_estimators: usize,
},
GradientBoosting {
n_estimators: usize,
learning_rate: f64,
},
NeuralNetwork {
hidden_layers: Vec<usize>,
},
SupportVectorMachine {
kernel: String,
},
GaussianProcess,
ReinforcementLearning {
algorithm: String,
},
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MLTrainingConfig {
pub training_size: usize,
pub validation_split: f64,
pub cv_folds: usize,
pub early_stopping_patience: usize,
pub learning_rate_schedule: LearningRateSchedule,
pub regularization: RegularizationConfig,
}
impl Default for MLTrainingConfig {
fn default() -> Self {
Self {
training_size: 1000,
validation_split: 0.2,
cv_folds: 5,
early_stopping_patience: 10,
learning_rate_schedule: LearningRateSchedule::Constant { rate: 0.001 },
regularization: RegularizationConfig::default(),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum LearningRateSchedule {
Constant { rate: f64 },
Exponential { initial_rate: f64, decay_rate: f64 },
StepWise { rates: Vec<(usize, f64)> },
Adaptive { patience: usize, factor: f64 },
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RegularizationConfig {
pub l1_alpha: f64,
pub l2_alpha: f64,
pub dropout_rate: f64,
pub batch_normalization: bool,
}
impl Default for RegularizationConfig {
fn default() -> Self {
Self {
l1_alpha: 0.01,
l2_alpha: 0.01,
dropout_rate: 0.1,
batch_normalization: false,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FeatureEngineeringConfig {
pub enable_temporal_features: bool,
pub enable_statistical_features: bool,
pub enable_frequency_features: bool,
pub enable_interaction_features: bool,
pub selection_method: FeatureSelectionMethod,
pub max_features: usize,
}
impl Default for FeatureEngineeringConfig {
fn default() -> Self {
Self {
enable_temporal_features: true,
enable_statistical_features: true,
enable_frequency_features: false,
enable_interaction_features: false,
selection_method: FeatureSelectionMethod::VarianceThreshold { threshold: 0.01 },
max_features: 20,
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum FeatureSelectionMethod {
VarianceThreshold { threshold: f64 },
UnivariateSelection { k_best: usize },
RecursiveFeatureElimination { n_features: usize },
LassoRegularization { alpha: f64 },
MutualInformation { k_best: usize },
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OnlineLearningConfig {
pub enable_online_learning: bool,
pub update_frequency: usize,
pub memory_window: usize,
pub drift_detection: DriftDetectionConfig,
}
impl Default for OnlineLearningConfig {
fn default() -> Self {
Self {
enable_online_learning: false,
update_frequency: 100,
memory_window: 1000,
drift_detection: DriftDetectionConfig::default(),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DriftDetectionConfig {
pub enable_drift_detection: bool,
pub detection_method: DriftDetectionMethod,
pub detection_threshold: f64,
pub min_samples: usize,
}
impl Default for DriftDetectionConfig {
fn default() -> Self {
Self {
enable_drift_detection: false,
detection_method: DriftDetectionMethod::KolmogorovSmirnov,
detection_threshold: 0.05,
min_samples: 30,
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum DriftDetectionMethod {
KolmogorovSmirnov,
PageHinkley {
delta: f64,
lambda: f64,
},
ADWIN {
delta: f64,
},
DDM {
alpha_warning: f64,
alpha_drift: f64,
},
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PredictionConfig {
pub enable_prediction: bool,
pub prediction_horizon: usize,
pub min_training_samples: usize,
pub sequence_length: usize,
pub time_series_config: TimeSeriesConfig,
pub uncertainty_config: UncertaintyConfig,
pub enable_ensemble: bool,
}
impl Default for PredictionConfig {
fn default() -> Self {
Self {
enable_prediction: false,
prediction_horizon: 5,
min_training_samples: 100,
sequence_length: 10,
time_series_config: TimeSeriesConfig::default(),
uncertainty_config: UncertaintyConfig::default(),
enable_ensemble: false,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TimeSeriesConfig {
pub enable_trend: bool,
pub enable_seasonality: bool,
pub seasonality_period: usize,
pub enable_autocorrelation: bool,
pub forecasting_method: ForecastingMethod,
}
impl Default for TimeSeriesConfig {
fn default() -> Self {
Self {
enable_trend: true,
enable_seasonality: false,
seasonality_period: 24,
enable_autocorrelation: true,
forecasting_method: ForecastingMethod::ExponentialSmoothing {
alpha: 0.3,
beta: 0.1,
gamma: 0.1,
},
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum ForecastingMethod {
ARIMA {
p: usize,
d: usize,
q: usize,
},
ExponentialSmoothing {
alpha: f64,
beta: f64,
gamma: f64,
},
Prophet,
LSTM {
hidden_size: usize,
num_layers: usize,
},
Transformer {
d_model: usize,
n_heads: usize,
},
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UncertaintyConfig {
pub enable_uncertainty: bool,
pub confidence_level: f64,
pub uncertainty_method: UncertaintyMethod,
pub bootstrap_samples: usize,
}
impl Default for UncertaintyConfig {
fn default() -> Self {
Self {
enable_uncertainty: false,
confidence_level: 0.95,
uncertainty_method: UncertaintyMethod::Bootstrap,
bootstrap_samples: 1000,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum UncertaintyMethod {
Bootstrap,
BayesianInference,
ConformalPrediction,
GaussianProcess,
EnsembleVariance,
}