use std::collections::HashMap;
#[derive(Debug, Clone)]
pub struct DynamicalDecouplingConfig {
pub sequence_type: DDSequenceType,
pub optimization_config: DDOptimizationConfig,
pub hardware_adaptation: DDHardwareConfig,
pub noise_characterization: DDNoiseConfig,
pub performance_config: DDPerformanceConfig,
pub validation_config: DDValidationConfig,
}
impl Default for DynamicalDecouplingConfig {
fn default() -> Self {
Self {
sequence_type: DDSequenceType::CPMG { n_pulses: 4 },
optimization_config: DDOptimizationConfig::default(),
hardware_adaptation: DDHardwareConfig::default(),
noise_characterization: DDNoiseConfig::default(),
performance_config: DDPerformanceConfig::default(),
validation_config: DDValidationConfig::default(),
}
}
}
#[derive(Debug, Clone)]
pub struct AdaptiveDDConfig {
pub enable_adaptive_selection: bool,
pub enable_real_time_adaptation: bool,
pub adaptation_threshold: f64,
pub min_adaptation_interval: std::time::Duration,
pub adaptation_criteria: AdaptationCriteria,
pub monitoring_config: MonitoringConfig,
pub feedback_control: FeedbackControlConfig,
pub learning_config: LearningConfig,
pub selection_strategy: SequenceSelectionStrategy,
pub adaptation_triggers: Vec<crate::adaptive_compilation::strategies::AdaptationTrigger>,
}
impl Default for AdaptiveDDConfig {
fn default() -> Self {
Self {
enable_adaptive_selection: true,
enable_real_time_adaptation: true,
adaptation_threshold: 0.1,
min_adaptation_interval: std::time::Duration::from_millis(100),
adaptation_criteria: AdaptationCriteria::default(),
monitoring_config: MonitoringConfig::default(),
feedback_control: FeedbackControlConfig::default(),
learning_config: LearningConfig::default(),
selection_strategy: SequenceSelectionStrategy::PerformanceBased,
adaptation_triggers: vec![
crate::adaptive_compilation::strategies::AdaptationTrigger::PerformanceDegradation,
crate::adaptive_compilation::strategies::AdaptationTrigger::ErrorRateIncrease,
],
}
}
}
#[derive(Debug, Clone)]
pub struct AdaptationCriteria {
pub coherence_threshold: f64,
pub fidelity_threshold: f64,
pub noise_threshold: f64,
pub performance_tolerance: f64,
pub adaptation_frequency: AdaptationFrequency,
}
impl Default for AdaptationCriteria {
fn default() -> Self {
Self {
coherence_threshold: 0.1, fidelity_threshold: 0.95,
noise_threshold: 0.05,
performance_tolerance: 0.1,
adaptation_frequency: AdaptationFrequency::Dynamic,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum AdaptationFrequency {
Fixed(std::time::Duration),
EventDriven,
Dynamic,
Continuous,
}
#[derive(Debug, Clone)]
pub struct MonitoringConfig {
pub enable_realtime: bool,
pub metrics: Vec<MonitoringMetric>,
pub sampling_rate: f64,
pub buffer_size: usize,
pub alert_thresholds: std::collections::HashMap<String, f64>,
}
impl Default for MonitoringConfig {
fn default() -> Self {
Self {
enable_realtime: true,
metrics: vec![
MonitoringMetric::CoherenceTime,
MonitoringMetric::Fidelity,
MonitoringMetric::NoiseLevel,
],
sampling_rate: 1000.0, buffer_size: 1000,
alert_thresholds: std::collections::HashMap::new(),
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum MonitoringMetric {
CoherenceTime,
Fidelity,
NoiseLevel,
GateErrorRate,
ReadoutErrorRate,
CrosstalkStrength,
Temperature,
PowerConsumption,
}
#[derive(Debug, Clone)]
pub struct FeedbackControlConfig {
pub control_algorithm: ControlAlgorithm,
pub pid_parameters: PIDParameters,
pub control_bandwidth: f64,
pub actuator_limits: ActuatorLimits,
pub safety_margins: SafetyMargins,
}
impl Default for FeedbackControlConfig {
fn default() -> Self {
Self {
control_algorithm: ControlAlgorithm::PID,
pid_parameters: PIDParameters::default(),
control_bandwidth: 100.0, actuator_limits: ActuatorLimits::default(),
safety_margins: SafetyMargins::default(),
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ControlAlgorithm {
PID,
MPC,
Adaptive,
ReinforcementLearning,
NeuralNetwork,
}
#[derive(Debug, Clone)]
pub struct PIDParameters {
pub kp: f64,
pub ki: f64,
pub kd: f64,
pub windup_limit: f64,
pub output_limits: (f64, f64),
}
impl Default for PIDParameters {
fn default() -> Self {
Self {
kp: 1.0,
ki: 0.1,
kd: 0.01,
windup_limit: 100.0,
output_limits: (-100.0, 100.0),
}
}
}
#[derive(Debug, Clone)]
pub struct ActuatorLimits {
pub max_amplitude: f64,
pub max_duration: f64,
pub max_frequency: f64,
pub rate_limits: std::collections::HashMap<String, f64>,
}
impl Default for ActuatorLimits {
fn default() -> Self {
Self {
max_amplitude: 1.0,
max_duration: 1e-6, max_frequency: 1e9, rate_limits: std::collections::HashMap::new(),
}
}
}
#[derive(Debug, Clone)]
pub struct SafetyMargins {
pub temperature_margin: f64,
pub power_margin: f64,
pub coherence_margin: f64,
pub fidelity_margin: f64,
}
impl Default for SafetyMargins {
fn default() -> Self {
Self {
temperature_margin: 0.1, power_margin: 0.2, coherence_margin: 0.15, fidelity_margin: 0.05, }
}
}
#[derive(Debug, Clone)]
pub struct LearningConfig {
pub learning_algorithm: LearningAlgorithm,
pub learning_rate: f64,
pub replay_buffer_size: usize,
pub exploration_strategy: ExplorationStrategy,
pub update_frequency: usize,
pub target_update_frequency: usize,
}
impl Default for LearningConfig {
fn default() -> Self {
Self {
learning_algorithm: LearningAlgorithm::QLearning,
learning_rate: 0.01,
replay_buffer_size: 10000,
exploration_strategy: ExplorationStrategy::EpsilonGreedy(0.1),
update_frequency: 10,
target_update_frequency: 100,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum LearningAlgorithm {
QLearning,
DQN,
PolicyGradient,
ActorCritic,
PPO,
}
#[derive(Debug, Clone, PartialEq)]
pub enum ExplorationStrategy {
EpsilonGreedy(f64),
Boltzmann(f64),
UCB(f64),
ThompsonSampling,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum SequenceSelectionStrategy {
PerformanceBased,
NoiseCharacteristicBased,
HybridOptimization,
MLDriven,
RuleBased,
Random,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum DDSequenceType {
HahnEcho,
CarrPurcell,
CPMG { n_pulses: usize },
XY4,
XY8,
XY16,
KDD,
UDD { n_pulses: usize },
QDD,
CDD,
RDD,
Composite,
MultiQubitCoordinated,
SciRS2Optimized,
Adaptive,
Custom(String),
}
#[derive(Debug, Clone)]
pub struct DDOptimizationConfig {
pub enable_optimization: bool,
pub optimization_objective: DDOptimizationObjective,
pub optimization_algorithm: DDOptimizationAlgorithm,
pub max_iterations: usize,
pub convergence_tolerance: f64,
pub parameter_bounds: Option<Vec<(f64, f64)>>,
pub multi_objective_weights: HashMap<String, f64>,
pub enable_adaptive: bool,
pub enable_scirs2_optimization: bool,
pub max_optimization_iterations: usize,
pub optimization_objectives: Vec<DDOptimizationObjectiveType>,
}
impl Default for DDOptimizationConfig {
fn default() -> Self {
Self {
enable_optimization: true,
optimization_objective: DDOptimizationObjective::MaximizeCoherenceTime,
optimization_algorithm: DDOptimizationAlgorithm::GradientFree,
max_iterations: 1000,
convergence_tolerance: 1e-6,
parameter_bounds: None,
multi_objective_weights: HashMap::new(),
enable_adaptive: true,
enable_scirs2_optimization: true,
max_optimization_iterations: 1000,
optimization_objectives: vec![
DDOptimizationObjectiveType::MaximizeFidelity,
DDOptimizationObjectiveType::MaximizeCoherenceTime,
],
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum DDOptimizationObjective {
MaximizeCoherenceTime,
MinimizeDecoherenceRate,
MaximizeProcessFidelity,
MinimizeGateOverhead,
MaximizeRobustness,
MultiObjective,
Custom(String),
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum DDOptimizationObjectiveType {
MaximizeFidelity,
MinimizeExecutionTime,
MaximizeCoherenceTime,
MinimizeNoiseAmplification,
MaximizeRobustness,
MinimizeResourceUsage,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum DDOptimizationAlgorithm {
GradientFree,
SimulatedAnnealing,
GeneticAlgorithm,
ParticleSwarm,
DifferentialEvolution,
BayesianOptimization,
ReinforcementLearning,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum PlatformType {
IBMQuantum,
AWSBraket,
AzureQuantum,
GoogleQuantumAI,
RigettiQCS,
IonQCloud,
Generic,
}
#[derive(Debug, Clone)]
pub struct DDHardwareConfig {
pub enable_hardware_aware: bool,
pub gate_set_constraints: bool,
pub connectivity_constraints: bool,
pub timing_constraints: bool,
pub pulse_optimization: DDPulseConfig,
pub error_characterization: bool,
pub enable_platform_optimization: bool,
pub enable_calibration_integration: bool,
pub supported_platforms: Vec<PlatformType>,
pub target_platform: Option<PlatformType>,
}
impl Default for DDHardwareConfig {
fn default() -> Self {
Self {
enable_hardware_aware: true,
gate_set_constraints: true,
connectivity_constraints: true,
timing_constraints: true,
pulse_optimization: DDPulseConfig::default(),
error_characterization: true,
enable_platform_optimization: true,
enable_calibration_integration: true,
supported_platforms: vec![
PlatformType::IBMQuantum,
PlatformType::AWSBraket,
PlatformType::AzureQuantum,
PlatformType::GoogleQuantumAI,
PlatformType::Generic,
],
target_platform: Some(PlatformType::Generic),
}
}
}
#[derive(Debug, Clone)]
pub struct DDPulseConfig {
pub enable_pulse_optimization: bool,
pub pulse_shape_optimization: bool,
pub composite_pulses: bool,
pub adiabatic_pulses: bool,
pub optimal_control: bool,
}
impl Default for DDPulseConfig {
fn default() -> Self {
Self {
enable_pulse_optimization: false,
pulse_shape_optimization: false,
composite_pulses: true,
adiabatic_pulses: false,
optimal_control: false,
}
}
}
#[derive(Debug, Clone)]
pub struct DDNoiseConfig {
pub enable_characterization: bool,
pub noise_types: Vec<NoiseType>,
pub spectral_analysis: bool,
pub temporal_correlation: bool,
pub spatial_correlation: bool,
pub non_markovian_modeling: bool,
pub enable_spectral_analysis: bool,
pub enable_correlation_analysis: bool,
pub sampling_rate: f64,
pub target_noise_types: Vec<NoiseType>,
}
impl Default for DDNoiseConfig {
fn default() -> Self {
Self {
enable_characterization: true,
noise_types: vec![
NoiseType::AmplitudeDamping,
NoiseType::PhaseDamping,
NoiseType::Depolarizing,
],
spectral_analysis: true,
temporal_correlation: true,
spatial_correlation: false,
non_markovian_modeling: false,
enable_spectral_analysis: true,
enable_correlation_analysis: true,
sampling_rate: 1000.0,
target_noise_types: vec![
NoiseType::AmplitudeDamping,
NoiseType::PhaseDamping,
NoiseType::Depolarizing,
NoiseType::CoherentErrors,
],
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum NoiseType {
AmplitudeDamping,
PhaseDamping,
Depolarizing,
Pauli,
CoherentErrors,
OneOverFNoise,
RandomTelegraphNoise,
ChargeNoise,
FluxNoise,
CrossTalk,
MeasurementNoise,
ControlNoise,
}
#[derive(Debug, Clone)]
pub struct DDPerformanceConfig {
pub enable_analysis: bool,
pub metrics: Vec<DDPerformanceMetric>,
pub statistical_depth: StatisticalDepth,
pub enable_benchmarking: bool,
pub benchmarking_config: DDBenchmarkingConfig,
pub enable_coherence_tracking: bool,
pub enable_fidelity_monitoring: bool,
pub measurement_shots: usize,
}
impl Default for DDPerformanceConfig {
fn default() -> Self {
Self {
enable_analysis: true,
metrics: vec![
DDPerformanceMetric::CoherenceTime,
DDPerformanceMetric::ProcessFidelity,
DDPerformanceMetric::GateOverhead,
],
statistical_depth: StatisticalDepth::Comprehensive,
enable_benchmarking: true,
benchmarking_config: DDBenchmarkingConfig::default(),
enable_coherence_tracking: true,
enable_fidelity_monitoring: true,
measurement_shots: 1000,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum DDPerformanceMetric {
CoherenceTime,
ProcessFidelity,
GateOverhead,
TimeOverhead,
RobustnessScore,
NoiseSuppressionFactor,
ResourceEfficiency,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum StatisticalDepth {
Basic,
Comprehensive,
Advanced,
}
#[derive(Debug, Clone)]
pub struct DDBenchmarkingConfig {
pub enable_comparative: bool,
pub protocols: Vec<BenchmarkProtocol>,
pub benchmark_runs: usize,
pub confidence_level: f64,
}
impl Default for DDBenchmarkingConfig {
fn default() -> Self {
Self {
enable_comparative: true,
protocols: vec![
BenchmarkProtocol::RandomizedBenchmarking,
BenchmarkProtocol::ProcessTomography,
],
benchmark_runs: 100,
confidence_level: 0.95,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum BenchmarkProtocol {
RandomizedBenchmarking,
ProcessTomography,
GateSetTomography,
CrossEntropyBenchmarking,
CycleBenchmarking,
}
#[derive(Debug, Clone)]
pub struct DDValidationConfig {
pub enable_validation: bool,
pub cross_validation_folds: usize,
pub out_of_sample_fraction: f64,
pub enable_robustness_testing: bool,
pub robustness_test_config: RobustnessTestConfig,
pub enable_generalization: bool,
}
impl Default for DDValidationConfig {
fn default() -> Self {
Self {
enable_validation: true,
cross_validation_folds: 5,
out_of_sample_fraction: 0.2,
enable_robustness_testing: true,
robustness_test_config: RobustnessTestConfig::default(),
enable_generalization: true,
}
}
}
#[derive(Debug, Clone)]
pub struct RobustnessTestConfig {
pub parameter_variations: HashMap<String, (f64, f64)>,
pub noise_variations: Vec<f64>,
pub hardware_variations: bool,
pub systematic_errors: bool,
}
impl Default for RobustnessTestConfig {
fn default() -> Self {
let mut parameter_variations = HashMap::new();
parameter_variations.insert("pulse_amplitude".to_string(), (0.8, 1.2));
parameter_variations.insert("pulse_duration".to_string(), (0.9, 1.1));
Self {
parameter_variations,
noise_variations: vec![0.5, 1.0, 1.5, 2.0],
hardware_variations: true,
systematic_errors: true,
}
}
}
#[derive(Debug, Clone)]
pub struct RealTimeDDConfig {
pub enable_realtime: bool,
pub response_time: std::time::Duration,
pub scheduling_priority: SchedulingPriority,
pub resource_allocation: ResourceAllocation,
pub latency_requirements: LatencyRequirements,
}
impl Default for RealTimeDDConfig {
fn default() -> Self {
Self {
enable_realtime: true,
response_time: std::time::Duration::from_micros(10), scheduling_priority: SchedulingPriority::High,
resource_allocation: ResourceAllocation::default(),
latency_requirements: LatencyRequirements::default(),
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum SchedulingPriority {
Low,
Normal,
High,
Critical,
RealTime,
}
#[derive(Debug, Clone)]
pub struct ResourceAllocation {
pub cpu_cores: usize,
pub memory_allocation: usize,
pub gpu_acceleration: bool,
pub network_bandwidth: f64,
}
impl Default for ResourceAllocation {
fn default() -> Self {
Self {
cpu_cores: 2,
memory_allocation: 1024 * 1024 * 100, gpu_acceleration: false,
network_bandwidth: 1e6, }
}
}
#[derive(Debug, Clone)]
pub struct LatencyRequirements {
pub max_control_latency: std::time::Duration,
pub max_measurement_latency: std::time::Duration,
pub max_adaptation_latency: std::time::Duration,
pub jitter_tolerance: std::time::Duration,
}
impl Default for LatencyRequirements {
fn default() -> Self {
Self {
max_control_latency: std::time::Duration::from_nanos(100),
max_measurement_latency: std::time::Duration::from_micros(1),
max_adaptation_latency: std::time::Duration::from_micros(10),
jitter_tolerance: std::time::Duration::from_nanos(10),
}
}
}
pub type DDHardwareAdaptationConfig = DDHardwareConfig;