1use std::collections::HashMap;
4
5#[derive(Debug, Clone)]
7pub struct DynamicalDecouplingConfig {
8 pub sequence_type: DDSequenceType,
10 pub optimization_config: DDOptimizationConfig,
12 pub hardware_adaptation: DDHardwareConfig,
14 pub noise_characterization: DDNoiseConfig,
16 pub performance_config: DDPerformanceConfig,
18 pub validation_config: DDValidationConfig,
20}
21
22impl Default for DynamicalDecouplingConfig {
23 fn default() -> Self {
24 Self {
25 sequence_type: DDSequenceType::CPMG { n_pulses: 4 },
26 optimization_config: DDOptimizationConfig::default(),
27 hardware_adaptation: DDHardwareConfig::default(),
28 noise_characterization: DDNoiseConfig::default(),
29 performance_config: DDPerformanceConfig::default(),
30 validation_config: DDValidationConfig::default(),
31 }
32 }
33}
34
35#[derive(Debug, Clone)]
37pub struct AdaptiveDDConfig {
38 pub enable_adaptive_selection: bool,
40 pub enable_real_time_adaptation: bool,
42 pub adaptation_threshold: f64,
44 pub min_adaptation_interval: std::time::Duration,
46 pub adaptation_criteria: AdaptationCriteria,
48 pub monitoring_config: MonitoringConfig,
50 pub feedback_control: FeedbackControlConfig,
52 pub learning_config: LearningConfig,
54 pub selection_strategy: SequenceSelectionStrategy,
56 pub adaptation_triggers: Vec<crate::adaptive_compilation::strategies::AdaptationTrigger>,
58}
59
60impl Default for AdaptiveDDConfig {
61 fn default() -> Self {
62 Self {
63 enable_adaptive_selection: true,
64 enable_real_time_adaptation: true,
65 adaptation_threshold: 0.1,
66 min_adaptation_interval: std::time::Duration::from_millis(100),
67 adaptation_criteria: AdaptationCriteria::default(),
68 monitoring_config: MonitoringConfig::default(),
69 feedback_control: FeedbackControlConfig::default(),
70 learning_config: LearningConfig::default(),
71 selection_strategy: SequenceSelectionStrategy::PerformanceBased,
72 adaptation_triggers: vec![
73 crate::adaptive_compilation::strategies::AdaptationTrigger::PerformanceDegradation,
74 crate::adaptive_compilation::strategies::AdaptationTrigger::ErrorRateIncrease,
75 ],
76 }
77 }
78}
79
80#[derive(Debug, Clone)]
82pub struct AdaptationCriteria {
83 pub coherence_threshold: f64,
85 pub fidelity_threshold: f64,
87 pub noise_threshold: f64,
89 pub performance_tolerance: f64,
91 pub adaptation_frequency: AdaptationFrequency,
93}
94
95impl Default for AdaptationCriteria {
96 fn default() -> Self {
97 Self {
98 coherence_threshold: 0.1, fidelity_threshold: 0.95,
100 noise_threshold: 0.05,
101 performance_tolerance: 0.1,
102 adaptation_frequency: AdaptationFrequency::Dynamic,
103 }
104 }
105}
106
107#[derive(Debug, Clone, PartialEq)]
109pub enum AdaptationFrequency {
110 Fixed(std::time::Duration),
112 EventDriven,
114 Dynamic,
116 Continuous,
118}
119
120#[derive(Debug, Clone)]
122pub struct MonitoringConfig {
123 pub enable_realtime: bool,
125 pub metrics: Vec<MonitoringMetric>,
127 pub sampling_rate: f64,
129 pub buffer_size: usize,
131 pub alert_thresholds: std::collections::HashMap<String, f64>,
133}
134
135impl Default for MonitoringConfig {
136 fn default() -> Self {
137 Self {
138 enable_realtime: true,
139 metrics: vec![
140 MonitoringMetric::CoherenceTime,
141 MonitoringMetric::Fidelity,
142 MonitoringMetric::NoiseLevel,
143 ],
144 sampling_rate: 1000.0, buffer_size: 1000,
146 alert_thresholds: std::collections::HashMap::new(),
147 }
148 }
149}
150
151#[derive(Debug, Clone, PartialEq, Eq, Hash)]
153pub enum MonitoringMetric {
154 CoherenceTime,
156 Fidelity,
158 NoiseLevel,
160 GateErrorRate,
162 ReadoutErrorRate,
164 CrosstalkStrength,
166 Temperature,
168 PowerConsumption,
170}
171
172#[derive(Debug, Clone)]
174pub struct FeedbackControlConfig {
175 pub control_algorithm: ControlAlgorithm,
177 pub pid_parameters: PIDParameters,
179 pub control_bandwidth: f64,
181 pub actuator_limits: ActuatorLimits,
183 pub safety_margins: SafetyMargins,
185}
186
187impl Default for FeedbackControlConfig {
188 fn default() -> Self {
189 Self {
190 control_algorithm: ControlAlgorithm::PID,
191 pid_parameters: PIDParameters::default(),
192 control_bandwidth: 100.0, actuator_limits: ActuatorLimits::default(),
194 safety_margins: SafetyMargins::default(),
195 }
196 }
197}
198
199#[derive(Debug, Clone, PartialEq)]
201pub enum ControlAlgorithm {
202 PID,
204 MPC,
206 Adaptive,
208 ReinforcementLearning,
210 NeuralNetwork,
212}
213
214#[derive(Debug, Clone)]
216pub struct PIDParameters {
217 pub kp: f64,
219 pub ki: f64,
221 pub kd: f64,
223 pub windup_limit: f64,
225 pub output_limits: (f64, f64),
227}
228
229impl Default for PIDParameters {
230 fn default() -> Self {
231 Self {
232 kp: 1.0,
233 ki: 0.1,
234 kd: 0.01,
235 windup_limit: 100.0,
236 output_limits: (-100.0, 100.0),
237 }
238 }
239}
240
241#[derive(Debug, Clone)]
243pub struct ActuatorLimits {
244 pub max_amplitude: f64,
246 pub max_duration: f64,
248 pub max_frequency: f64,
250 pub rate_limits: std::collections::HashMap<String, f64>,
252}
253
254impl Default for ActuatorLimits {
255 fn default() -> Self {
256 Self {
257 max_amplitude: 1.0,
258 max_duration: 1e-6, max_frequency: 1e9, rate_limits: std::collections::HashMap::new(),
261 }
262 }
263}
264
265#[derive(Debug, Clone)]
267pub struct SafetyMargins {
268 pub temperature_margin: f64,
270 pub power_margin: f64,
272 pub coherence_margin: f64,
274 pub fidelity_margin: f64,
276}
277
278impl Default for SafetyMargins {
279 fn default() -> Self {
280 Self {
281 temperature_margin: 0.1, power_margin: 0.2, coherence_margin: 0.15, fidelity_margin: 0.05, }
286 }
287}
288
289#[derive(Debug, Clone)]
291pub struct LearningConfig {
292 pub learning_algorithm: LearningAlgorithm,
294 pub learning_rate: f64,
296 pub replay_buffer_size: usize,
298 pub exploration_strategy: ExplorationStrategy,
300 pub update_frequency: usize,
302 pub target_update_frequency: usize,
304}
305
306impl Default for LearningConfig {
307 fn default() -> Self {
308 Self {
309 learning_algorithm: LearningAlgorithm::QLearning,
310 learning_rate: 0.01,
311 replay_buffer_size: 10000,
312 exploration_strategy: ExplorationStrategy::EpsilonGreedy(0.1),
313 update_frequency: 10,
314 target_update_frequency: 100,
315 }
316 }
317}
318
319#[derive(Debug, Clone, PartialEq)]
321pub enum LearningAlgorithm {
322 QLearning,
324 DQN,
326 PolicyGradient,
328 ActorCritic,
330 PPO,
332}
333
334#[derive(Debug, Clone, PartialEq)]
336pub enum ExplorationStrategy {
337 EpsilonGreedy(f64),
339 Boltzmann(f64),
341 UCB(f64),
343 ThompsonSampling,
345}
346
347#[derive(Debug, Clone, PartialEq)]
349pub enum SequenceSelectionStrategy {
350 PerformanceBased,
352 NoiseCharacteristicBased,
354 HybridOptimization,
356 MLDriven,
358 RuleBased,
360 Random,
362}
363
364#[derive(Debug, Clone, PartialEq, Eq, Hash)]
366pub enum DDSequenceType {
367 HahnEcho,
369 CarrPurcell,
371 CPMG { n_pulses: usize },
373 XY4,
375 XY8,
377 XY16,
379 KDD,
381 UDD { n_pulses: usize },
383 QDD,
385 CDD,
387 RDD,
389 Composite,
391 MultiQubitCoordinated,
393 SciRS2Optimized,
395 Adaptive,
397 Custom(String),
399}
400
401#[derive(Debug, Clone)]
403pub struct DDOptimizationConfig {
404 pub enable_optimization: bool,
406 pub optimization_objective: DDOptimizationObjective,
408 pub optimization_algorithm: DDOptimizationAlgorithm,
410 pub max_iterations: usize,
412 pub convergence_tolerance: f64,
414 pub parameter_bounds: Option<Vec<(f64, f64)>>,
416 pub multi_objective_weights: HashMap<String, f64>,
418 pub enable_adaptive: bool,
420 pub enable_scirs2_optimization: bool,
422 pub max_optimization_iterations: usize,
424 pub optimization_objectives: Vec<DDOptimizationObjectiveType>,
426}
427
428impl Default for DDOptimizationConfig {
429 fn default() -> Self {
430 Self {
431 enable_optimization: true,
432 optimization_objective: DDOptimizationObjective::MaximizeCoherenceTime,
433 optimization_algorithm: DDOptimizationAlgorithm::GradientFree,
434 max_iterations: 1000,
435 convergence_tolerance: 1e-6,
436 parameter_bounds: None,
437 multi_objective_weights: HashMap::new(),
438 enable_adaptive: true,
439 enable_scirs2_optimization: true,
440 max_optimization_iterations: 1000,
441 optimization_objectives: vec![
442 DDOptimizationObjectiveType::MaximizeFidelity,
443 DDOptimizationObjectiveType::MaximizeCoherenceTime,
444 ],
445 }
446 }
447}
448
449#[derive(Debug, Clone, PartialEq)]
451pub enum DDOptimizationObjective {
452 MaximizeCoherenceTime,
454 MinimizeDecoherenceRate,
456 MaximizeProcessFidelity,
458 MinimizeGateOverhead,
460 MaximizeRobustness,
462 MultiObjective,
464 Custom(String),
466}
467
468#[derive(Debug, Clone, PartialEq)]
470pub enum DDOptimizationObjectiveType {
471 MaximizeFidelity,
473 MinimizeExecutionTime,
475 MaximizeCoherenceTime,
477 MinimizeNoiseAmplification,
479 MaximizeRobustness,
481 MinimizeResourceUsage,
483}
484
485#[derive(Debug, Clone, PartialEq)]
487pub enum DDOptimizationAlgorithm {
488 GradientFree,
490 SimulatedAnnealing,
492 GeneticAlgorithm,
494 ParticleSwarm,
496 DifferentialEvolution,
498 BayesianOptimization,
500 ReinforcementLearning,
502}
503
504#[derive(Debug, Clone, PartialEq)]
506pub enum PlatformType {
507 IBMQuantum,
509 AWSBraket,
511 AzureQuantum,
513 GoogleQuantumAI,
515 RigettiQCS,
517 IonQCloud,
519 Generic,
521}
522
523#[derive(Debug, Clone)]
525pub struct DDHardwareConfig {
526 pub enable_hardware_aware: bool,
528 pub gate_set_constraints: bool,
530 pub connectivity_constraints: bool,
532 pub timing_constraints: bool,
534 pub pulse_optimization: DDPulseConfig,
536 pub error_characterization: bool,
538 pub enable_platform_optimization: bool,
540 pub enable_calibration_integration: bool,
542 pub supported_platforms: Vec<PlatformType>,
544 pub target_platform: Option<PlatformType>,
546}
547
548impl Default for DDHardwareConfig {
549 fn default() -> Self {
550 Self {
551 enable_hardware_aware: true,
552 gate_set_constraints: true,
553 connectivity_constraints: true,
554 timing_constraints: true,
555 pulse_optimization: DDPulseConfig::default(),
556 error_characterization: true,
557 enable_platform_optimization: true,
558 enable_calibration_integration: true,
559 supported_platforms: vec![
560 PlatformType::IBMQuantum,
561 PlatformType::AWSBraket,
562 PlatformType::AzureQuantum,
563 PlatformType::GoogleQuantumAI,
564 PlatformType::Generic,
565 ],
566 target_platform: Some(PlatformType::Generic),
567 }
568 }
569}
570
571#[derive(Debug, Clone)]
573pub struct DDPulseConfig {
574 pub enable_pulse_optimization: bool,
576 pub pulse_shape_optimization: bool,
578 pub composite_pulses: bool,
580 pub adiabatic_pulses: bool,
582 pub optimal_control: bool,
584}
585
586impl Default for DDPulseConfig {
587 fn default() -> Self {
588 Self {
589 enable_pulse_optimization: false,
590 pulse_shape_optimization: false,
591 composite_pulses: true,
592 adiabatic_pulses: false,
593 optimal_control: false,
594 }
595 }
596}
597
598#[derive(Debug, Clone)]
600pub struct DDNoiseConfig {
601 pub enable_characterization: bool,
603 pub noise_types: Vec<NoiseType>,
605 pub spectral_analysis: bool,
607 pub temporal_correlation: bool,
609 pub spatial_correlation: bool,
611 pub non_markovian_modeling: bool,
613 pub enable_spectral_analysis: bool,
615 pub enable_correlation_analysis: bool,
617 pub sampling_rate: f64,
619 pub target_noise_types: Vec<NoiseType>,
621}
622
623impl Default for DDNoiseConfig {
624 fn default() -> Self {
625 Self {
626 enable_characterization: true,
627 noise_types: vec![
628 NoiseType::AmplitudeDamping,
629 NoiseType::PhaseDamping,
630 NoiseType::Depolarizing,
631 ],
632 spectral_analysis: true,
633 temporal_correlation: true,
634 spatial_correlation: false,
635 non_markovian_modeling: false,
636 enable_spectral_analysis: true,
637 enable_correlation_analysis: true,
638 sampling_rate: 1000.0,
639 target_noise_types: vec![
640 NoiseType::AmplitudeDamping,
641 NoiseType::PhaseDamping,
642 NoiseType::Depolarizing,
643 NoiseType::CoherentErrors,
644 ],
645 }
646 }
647}
648
649#[derive(Debug, Clone, PartialEq, Eq, Hash)]
651pub enum NoiseType {
652 AmplitudeDamping,
654 PhaseDamping,
656 Depolarizing,
658 Pauli,
660 CoherentErrors,
662 OneOverFNoise,
664 RandomTelegraphNoise,
666 ChargeNoise,
668 FluxNoise,
670 CrossTalk,
672 MeasurementNoise,
674 ControlNoise,
676}
677
678#[derive(Debug, Clone)]
680pub struct DDPerformanceConfig {
681 pub enable_analysis: bool,
683 pub metrics: Vec<DDPerformanceMetric>,
685 pub statistical_depth: StatisticalDepth,
687 pub enable_benchmarking: bool,
689 pub benchmarking_config: DDBenchmarkingConfig,
691 pub enable_coherence_tracking: bool,
693 pub enable_fidelity_monitoring: bool,
695 pub measurement_shots: usize,
697}
698
699impl Default for DDPerformanceConfig {
700 fn default() -> Self {
701 Self {
702 enable_analysis: true,
703 metrics: vec![
704 DDPerformanceMetric::CoherenceTime,
705 DDPerformanceMetric::ProcessFidelity,
706 DDPerformanceMetric::GateOverhead,
707 ],
708 statistical_depth: StatisticalDepth::Comprehensive,
709 enable_benchmarking: true,
710 benchmarking_config: DDBenchmarkingConfig::default(),
711 enable_coherence_tracking: true,
712 enable_fidelity_monitoring: true,
713 measurement_shots: 1000,
714 }
715 }
716}
717
718#[derive(Debug, Clone, PartialEq, Eq, Hash)]
720pub enum DDPerformanceMetric {
721 CoherenceTime,
723 ProcessFidelity,
725 GateOverhead,
727 TimeOverhead,
729 RobustnessScore,
731 NoiseSuppressionFactor,
733 ResourceEfficiency,
735}
736
737#[derive(Debug, Clone, PartialEq)]
739pub enum StatisticalDepth {
740 Basic,
742 Comprehensive,
744 Advanced,
746}
747
748#[derive(Debug, Clone)]
750pub struct DDBenchmarkingConfig {
751 pub enable_comparative: bool,
753 pub protocols: Vec<BenchmarkProtocol>,
755 pub benchmark_runs: usize,
757 pub confidence_level: f64,
759}
760
761impl Default for DDBenchmarkingConfig {
762 fn default() -> Self {
763 Self {
764 enable_comparative: true,
765 protocols: vec![
766 BenchmarkProtocol::RandomizedBenchmarking,
767 BenchmarkProtocol::ProcessTomography,
768 ],
769 benchmark_runs: 100,
770 confidence_level: 0.95,
771 }
772 }
773}
774
775#[derive(Debug, Clone, PartialEq)]
777pub enum BenchmarkProtocol {
778 RandomizedBenchmarking,
780 ProcessTomography,
782 GateSetTomography,
784 CrossEntropyBenchmarking,
786 CycleBenchmarking,
788}
789
790#[derive(Debug, Clone)]
792pub struct DDValidationConfig {
793 pub enable_validation: bool,
795 pub cross_validation_folds: usize,
797 pub out_of_sample_fraction: f64,
799 pub enable_robustness_testing: bool,
801 pub robustness_test_config: RobustnessTestConfig,
803 pub enable_generalization: bool,
805}
806
807impl Default for DDValidationConfig {
808 fn default() -> Self {
809 Self {
810 enable_validation: true,
811 cross_validation_folds: 5,
812 out_of_sample_fraction: 0.2,
813 enable_robustness_testing: true,
814 robustness_test_config: RobustnessTestConfig::default(),
815 enable_generalization: true,
816 }
817 }
818}
819
820#[derive(Debug, Clone)]
822pub struct RobustnessTestConfig {
823 pub parameter_variations: HashMap<String, (f64, f64)>,
825 pub noise_variations: Vec<f64>,
827 pub hardware_variations: bool,
829 pub systematic_errors: bool,
831}
832
833impl Default for RobustnessTestConfig {
834 fn default() -> Self {
835 let mut parameter_variations = HashMap::new();
836 parameter_variations.insert("pulse_amplitude".to_string(), (0.8, 1.2));
837 parameter_variations.insert("pulse_duration".to_string(), (0.9, 1.1));
838
839 Self {
840 parameter_variations,
841 noise_variations: vec![0.5, 1.0, 1.5, 2.0],
842 hardware_variations: true,
843 systematic_errors: true,
844 }
845 }
846}
847
848#[derive(Debug, Clone)]
850pub struct RealTimeDDConfig {
851 pub enable_realtime: bool,
853 pub response_time: std::time::Duration,
855 pub scheduling_priority: SchedulingPriority,
857 pub resource_allocation: ResourceAllocation,
859 pub latency_requirements: LatencyRequirements,
861}
862
863impl Default for RealTimeDDConfig {
864 fn default() -> Self {
865 Self {
866 enable_realtime: true,
867 response_time: std::time::Duration::from_micros(10), scheduling_priority: SchedulingPriority::High,
869 resource_allocation: ResourceAllocation::default(),
870 latency_requirements: LatencyRequirements::default(),
871 }
872 }
873}
874
875#[derive(Debug, Clone, PartialEq)]
877pub enum SchedulingPriority {
878 Low,
879 Normal,
880 High,
881 Critical,
882 RealTime,
883}
884
885#[derive(Debug, Clone)]
887pub struct ResourceAllocation {
888 pub cpu_cores: usize,
890 pub memory_allocation: usize,
892 pub gpu_acceleration: bool,
894 pub network_bandwidth: f64,
896}
897
898impl Default for ResourceAllocation {
899 fn default() -> Self {
900 Self {
901 cpu_cores: 2,
902 memory_allocation: 1024 * 1024 * 100, gpu_acceleration: false,
904 network_bandwidth: 1e6, }
906 }
907}
908
909#[derive(Debug, Clone)]
911pub struct LatencyRequirements {
912 pub max_control_latency: std::time::Duration,
914 pub max_measurement_latency: std::time::Duration,
916 pub max_adaptation_latency: std::time::Duration,
918 pub jitter_tolerance: std::time::Duration,
920}
921
922impl Default for LatencyRequirements {
923 fn default() -> Self {
924 Self {
925 max_control_latency: std::time::Duration::from_nanos(100),
926 max_measurement_latency: std::time::Duration::from_micros(1),
927 max_adaptation_latency: std::time::Duration::from_micros(10),
928 jitter_tolerance: std::time::Duration::from_nanos(10),
929 }
930 }
931}
932
933pub type DDHardwareAdaptationConfig = DDHardwareConfig;