1use serde::{Deserialize, Serialize};
4use std::collections::HashMap;
5use std::time::Duration;
6
7#[derive(Debug, Clone, Serialize, Deserialize)]
9pub struct ErrorMitigationConfig {
10 pub enable_zne: bool,
12 pub enable_symmetry_verification: bool,
14 pub enable_readout_correction: bool,
16 pub enable_dynamical_decoupling: bool,
18 pub mitigation_strategies: Vec<MitigationStrategy>,
20 pub zne_config: ZNEConfig,
22 pub enable_mitigation: bool,
24 pub strategies: Vec<MitigationStrategy>,
26 pub zne: ZNEConfig,
28 pub readout_mitigation: ReadoutMitigationConfig,
30 pub gate_mitigation: GateMitigationConfig,
32 pub symmetry_verification: SymmetryVerificationConfig,
34 pub virtual_distillation: VirtualDistillationConfig,
36}
37
38#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
40pub enum MitigationStrategy {
41 ZeroNoiseExtrapolation,
42 SymmetryVerification,
43 ReadoutErrorMitigation,
44 ReadoutMitigation,
45 GateMitigation,
46 VirtualDistillation,
47 ProbabilisticErrorCancellation,
48 CliffordDeRandomization,
49}
50
51#[derive(Debug, Clone, Serialize, Deserialize)]
53pub struct ZNEConfig {
54 pub noise_factors: Vec<f64>,
56 pub extrapolation_method: ExtrapolationMethod,
58 pub circuit_folding: CircuitFoldingMethod,
60 pub enable_zne: bool,
62 pub noise_scaling_factors: Vec<f64>,
64 pub folding: FoldingConfig,
66 pub richardson: RichardsonConfig,
68}
69
70#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
72pub enum CircuitFoldingMethod {
73 GlobalFolding,
74 LocalFolding,
75 UniformFolding,
76 RandomFolding,
77}
78
79#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
81pub enum ExtrapolationMethod {
82 Linear,
83 Polynomial,
84 Exponential,
85 Richardson,
86 AdaptiveExtrapolation,
87}
88
89#[derive(Debug, Clone, Serialize, Deserialize)]
91pub struct FoldingConfig {
92 pub folding_type: FoldingType,
94 pub global_folding: bool,
96 pub local_folding: LocalFoldingConfig,
98 pub gate_specific: GateSpecificFoldingConfig,
100}
101
102#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
104pub enum FoldingType {
105 Global,
106 Local,
107 GateSpecific,
108 RandomFolding,
109 IdentityInsertion,
110}
111
112#[derive(Debug, Clone, Serialize, Deserialize)]
114pub struct LocalFoldingConfig {
115 pub regions: Vec<FoldingRegion>,
117 pub selection_strategy: RegionSelectionStrategy,
119 pub overlap_handling: OverlapHandling,
121}
122
123#[derive(Debug, Clone, Serialize, Deserialize)]
125pub struct FoldingRegion {
126 pub start_qubit: usize,
128 pub end_qubit: usize,
130 pub start_time: f64,
132 pub end_time: f64,
134}
135
136#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
138pub enum RegionSelectionStrategy {
139 Random,
140 HighErrorRate,
141 CriticalPath,
142 Uniform,
143 Adaptive,
144 Automatic,
145}
146
147#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
149pub enum OverlapHandling {
150 Ignore,
151 Merge,
152 Prioritize,
153 Exclude,
154}
155
156#[derive(Debug, Clone, Serialize, Deserialize)]
158pub struct GateSpecificFoldingConfig {
159 pub folding_rules: HashMap<String, GateFoldingRule>,
161 pub priority_ordering: Vec<String>,
163 pub error_rate_weighting: bool,
165 pub folding_strategies: HashMap<String, GateFoldingRule>,
167 pub default_strategy: DefaultFoldingStrategy,
169 pub prioritized_gates: Vec<String>,
171}
172
173#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
175pub enum DefaultFoldingStrategy {
176 Identity,
177 Inverse,
178 Decomposition,
179 Random,
180 None,
181}
182
183#[derive(Debug, Clone, Serialize, Deserialize)]
185pub struct GateFoldingRule {
186 pub folding_factor: f64,
188 pub probability: f64,
190 pub replacement: GateReplacementStrategy,
192}
193
194#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
196pub enum GateReplacementStrategy {
197 Identity,
198 Inverse,
199 Decomposition,
200 Equivalent,
201}
202
203#[derive(Debug, Clone, Serialize, Deserialize)]
205pub struct RichardsonConfig {
206 pub enable_richardson: bool,
208 pub order: usize,
210 pub stability_check: bool,
212 pub error_estimation: ErrorEstimationConfig,
214}
215
216#[derive(Debug, Clone, Serialize, Deserialize)]
218pub struct ErrorEstimationConfig {
219 pub method: ErrorEstimationMethod,
221 pub bootstrap_samples: usize,
223 pub confidence_level: f64,
225}
226
227#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
229pub enum ErrorEstimationMethod {
230 Bootstrap,
231 Jackknife,
232 CrossValidation,
233 AnalyticalEstimate,
234}
235
236#[derive(Debug, Clone, Serialize, Deserialize)]
238pub struct ReadoutMitigationConfig {
239 pub enable_mitigation: bool,
241 pub methods: Vec<ReadoutMitigationMethod>,
243 pub calibration: ReadoutCalibrationConfig,
245 pub matrix_inversion: MatrixInversionConfig,
247 pub tensored_mitigation: TensoredMitigationConfig,
249}
250
251#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
253pub enum ReadoutMitigationMethod {
254 CompleteMitigation,
255 TensoredMitigation,
256 LocalMitigation,
257 ClusterMitigation,
258 PartialMitigation,
259}
260
261#[derive(Debug, Clone, Serialize, Deserialize)]
263pub struct ReadoutCalibrationConfig {
264 pub frequency: CalibrationFrequency,
266 pub states: Vec<CalibrationState>,
268 pub quality_metrics: Vec<QualityMetric>,
270}
271
272#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
274pub enum CalibrationFrequency {
275 BeforeEachExperiment,
276 Periodic(Duration),
277 OnDemand,
278 Adaptive,
279}
280
281#[derive(Debug, Clone, Serialize, Deserialize)]
283pub struct CalibrationState {
284 pub label: String,
286 pub preparation: Vec<String>,
288 pub expected_result: Vec<f64>,
290}
291
292#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
294pub enum QualityMetric {
295 Fidelity,
296 CrossTalk,
297 TemporalStability,
298 SpatialUniformity,
299}
300
301#[derive(Debug, Clone, Serialize, Deserialize)]
303pub struct MatrixInversionConfig {
304 pub method: InversionMethod,
306 pub regularization: RegularizationConfig,
308 pub stability: NumericalStabilityConfig,
310}
311
312#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
314pub enum InversionMethod {
315 DirectInversion,
316 PseudoInverse,
317 IterativeInversion,
318 RegularizedInversion,
319}
320
321#[derive(Debug, Clone, Serialize, Deserialize)]
323pub struct RegularizationConfig {
324 pub regularization_type: RegularizationType,
326 pub parameter: f64,
328 pub adaptive: bool,
330}
331
332#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
334pub enum RegularizationType {
335 L1,
336 L2,
337 ElasticNet,
338 Tikhonov,
339 None,
340}
341
342#[derive(Debug, Clone, Serialize, Deserialize)]
344pub struct NumericalStabilityConfig {
345 pub condition_threshold: f64,
347 pub pivoting: PivotingStrategy,
349 pub scaling: bool,
351}
352
353#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
355pub enum PivotingStrategy {
356 Partial,
357 Complete,
358 Rook,
359 None,
360}
361
362#[derive(Debug, Clone, Serialize, Deserialize)]
364pub struct TensoredMitigationConfig {
365 pub groups: Vec<MitigationGroup>,
367 pub group_strategy: GroupFormationStrategy,
369 pub crosstalk_handling: CrosstalkHandling,
371}
372
373#[derive(Debug, Clone, Serialize, Deserialize)]
375pub struct MitigationGroup {
376 pub qubits: Vec<usize>,
378 pub label: String,
380 pub independent: bool,
382}
383
384#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
386pub enum GroupFormationStrategy {
387 Topology,
388 ErrorRate,
389 Connectivity,
390 Manual,
391 Adaptive,
392}
393
394#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
396pub enum CrosstalkHandling {
397 Ignore,
398 Model,
399 Compensate,
400 Avoid,
401}
402
403#[derive(Debug, Clone, Serialize, Deserialize)]
405pub struct GateMitigationConfig {
406 pub enable_mitigation: bool,
408 pub gate_configs: HashMap<String, GateSpecificConfig>,
410 pub twirling: TwirlingConfig,
412 pub randomized_compiling: RandomizedCompilingConfig,
414}
415
416#[derive(Debug, Clone, Serialize, Deserialize)]
418pub struct GateSpecificConfig {
419 pub error_model: GateErrorModel,
421 pub mitigation_method: GateMitigationMethod,
423 pub compensation: CompensationParameters,
425}
426
427#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
429pub enum GateErrorModel {
430 Depolarizing,
431 Coherent,
432 Incoherent,
433 Composite,
434 Custom(String),
435}
436
437#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
439pub enum GateMitigationMethod {
440 PulseOptimization,
441 CompositePulses,
442 DynamicalDecoupling,
443 ErrorCorrection,
444 VirtualZ,
445}
446
447#[derive(Debug, Clone, Serialize, Deserialize)]
449pub struct CompensationParameters {
450 pub phase_corrections: HashMap<String, f64>,
452 pub amplitude_corrections: HashMap<String, f64>,
454 pub timing_corrections: HashMap<String, f64>,
456}
457
458#[derive(Debug, Clone, Serialize, Deserialize)]
460pub struct TwirlingConfig {
461 pub enable_twirling: bool,
463 pub twirling_type: TwirlingType,
465 pub groups: Vec<TwirlingGroup>,
467 pub randomization: RandomizationStrategy,
469}
470
471#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
473pub enum TwirlingType {
474 Pauli,
475 Clifford,
476 Gaussian,
477 Custom(String),
478}
479
480#[derive(Debug, Clone, Serialize, Deserialize)]
482pub struct TwirlingGroup {
483 pub elements: Vec<String>,
485 pub operation: String,
487 pub distribution: SamplingDistribution,
489}
490
491#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
493pub enum SamplingDistribution {
494 Uniform,
495 Weighted,
496 Adaptive,
497 Custom(String),
498}
499
500#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
502pub enum RandomizationStrategy {
503 FullRandomization,
504 PartialRandomization,
505 StructuredRandomization,
506 AdaptiveRandomization,
507}
508
509#[derive(Debug, Clone, Serialize, Deserialize)]
511pub struct RandomizedCompilingConfig {
512 pub enable_rc: bool,
514 pub strategies: Vec<CompilationStrategy>,
516 pub replacement_rules: HashMap<String, Vec<String>>,
518 pub randomization_level: RandomizationLevel,
520}
521
522#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
524pub enum CompilationStrategy {
525 GateReplacement,
526 CircuitReordering,
527 ParameterRandomization,
528 HybridApproach,
529}
530
531#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
533pub enum RandomizationLevel {
534 Low,
535 Medium,
536 High,
537 Adaptive,
538}
539
540#[derive(Debug, Clone, Serialize, Deserialize)]
542pub struct SymmetryVerificationConfig {
543 pub enable_verification: bool,
545 pub symmetry_types: Vec<SymmetryType>,
547 pub protocols: Vec<VerificationProtocol>,
549 pub tolerance: ToleranceSettings,
551}
552
553#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
555pub enum SymmetryType {
556 UnitarySymmetry,
557 HamiltonianSymmetry,
558 StateSymmetry,
559 OperatorSymmetry,
560}
561
562#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
564pub enum VerificationProtocol {
565 DirectVerification,
566 RandomizedBenchmarking,
567 ProcessTomography,
568 ShadowEstimation,
569}
570
571#[derive(Debug, Clone, Serialize, Deserialize)]
573pub struct ToleranceSettings {
574 pub symmetry_tolerance: f64,
576 pub statistical_tolerance: f64,
578 pub confidence_level: f64,
580}
581
582#[derive(Debug, Clone, Serialize, Deserialize)]
584pub struct VirtualDistillationConfig {
585 pub enable_distillation: bool,
587 pub protocols: Vec<DistillationProtocol>,
589 pub resources: ResourceRequirements,
591 pub quality_metrics: Vec<DistillationQualityMetric>,
593}
594
595#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
597pub enum DistillationProtocol {
598 Standard,
599 Accelerated,
600 ResourceOptimized,
601 FaultTolerant,
602}
603
604#[derive(Debug, Clone, Serialize, Deserialize)]
606pub struct ResourceRequirements {
607 pub auxiliary_qubits: usize,
609 pub measurement_rounds: usize,
611 pub classical_processing: ProcessingRequirements,
613}
614
615#[derive(Debug, Clone, Serialize, Deserialize)]
617pub struct ProcessingRequirements {
618 pub memory_mb: usize,
620 pub computation_time: Duration,
622 pub parallel_processing: bool,
624}
625
626#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
628pub enum DistillationQualityMetric {
629 Fidelity,
630 SuccessProbability,
631 ResourceEfficiency,
632 FaultTolerance,
633}
634
635#[derive(Debug, Clone, Serialize, Deserialize)]
637pub struct PECConfig {
638 pub enable_pec: bool,
640 pub quasi_probability: QuasiProbabilityConfig,
642 pub sampling: SamplingConfig,
644 pub optimization: PECOptimizationConfig,
646}
647
648#[derive(Debug, Clone, Serialize, Deserialize)]
650pub struct QuasiProbabilityConfig {
651 pub method: DecompositionMethod,
653 pub basis_operations: Vec<String>,
655 pub normalization: bool,
657}
658
659#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
661pub enum DecompositionMethod {
662 Optimal,
663 Greedy,
664 Heuristic,
665 MachineLearning,
666}
667
668#[derive(Debug, Clone, Serialize, Deserialize)]
670pub struct SamplingConfig {
671 pub method: SamplingMethod,
673 pub sample_size: usize,
675 pub importance_sampling: bool,
677}
678
679#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
681pub enum SamplingMethod {
682 MonteCarlo,
683 ImportanceSampling,
684 StratifiedSampling,
685 AdaptiveSampling,
686}
687
688#[derive(Debug, Clone, Serialize, Deserialize)]
690pub struct PECOptimizationConfig {
691 pub objective: ObjectiveFunction,
693 pub constraints: Vec<OptimizationConstraint>,
695 pub algorithm: OptimizationAlgorithm,
697}
698
699#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
701pub enum ObjectiveFunction {
702 MinimizeVariance,
703 MinimizeBias,
704 MaximizeEfficiency,
705 BalancedObjective,
706}
707
708#[derive(Debug, Clone, Serialize, Deserialize)]
710pub struct OptimizationConstraint {
711 pub constraint_type: String,
713 pub value: f64,
715 pub tolerance: f64,
717}
718
719#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
721pub enum OptimizationAlgorithm {
722 GradientDescent,
723 Newton,
724 QuasiNewton,
725 EvolutionaryAlgorithm,
726 BayesianOptimization,
727}
728
729impl Default for FoldingConfig {
732 fn default() -> Self {
733 Self {
734 folding_type: FoldingType::Global,
735 global_folding: true,
736 local_folding: LocalFoldingConfig::default(),
737 gate_specific: GateSpecificFoldingConfig::default(),
738 }
739 }
740}
741
742impl Default for LocalFoldingConfig {
743 fn default() -> Self {
744 Self {
745 regions: vec![],
746 selection_strategy: RegionSelectionStrategy::Automatic,
747 overlap_handling: OverlapHandling::Merge,
748 }
749 }
750}
751
752impl Default for GateSpecificFoldingConfig {
753 fn default() -> Self {
754 Self {
755 folding_rules: HashMap::new(),
756 priority_ordering: vec![],
757 error_rate_weighting: false,
758 folding_strategies: HashMap::new(),
759 default_strategy: DefaultFoldingStrategy::Identity,
760 prioritized_gates: vec![],
761 }
762 }
763}