use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::time::Duration;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ErrorMitigationConfig {
pub enable_zne: bool,
pub enable_symmetry_verification: bool,
pub enable_readout_correction: bool,
pub enable_dynamical_decoupling: bool,
pub mitigation_strategies: Vec<MitigationStrategy>,
pub zne_config: ZNEConfig,
pub enable_mitigation: bool,
pub strategies: Vec<MitigationStrategy>,
pub zne: ZNEConfig,
pub readout_mitigation: ReadoutMitigationConfig,
pub gate_mitigation: GateMitigationConfig,
pub symmetry_verification: SymmetryVerificationConfig,
pub virtual_distillation: VirtualDistillationConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum MitigationStrategy {
ZeroNoiseExtrapolation,
SymmetryVerification,
ReadoutErrorMitigation,
ReadoutMitigation,
GateMitigation,
VirtualDistillation,
ProbabilisticErrorCancellation,
CliffordDeRandomization,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ZNEConfig {
pub noise_factors: Vec<f64>,
pub extrapolation_method: ExtrapolationMethod,
pub circuit_folding: CircuitFoldingMethod,
pub enable_zne: bool,
pub noise_scaling_factors: Vec<f64>,
pub folding: FoldingConfig,
pub richardson: RichardsonConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum CircuitFoldingMethod {
GlobalFolding,
LocalFolding,
UniformFolding,
RandomFolding,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ExtrapolationMethod {
Linear,
Polynomial,
Exponential,
Richardson,
AdaptiveExtrapolation,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FoldingConfig {
pub folding_type: FoldingType,
pub global_folding: bool,
pub local_folding: LocalFoldingConfig,
pub gate_specific: GateSpecificFoldingConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum FoldingType {
Global,
Local,
GateSpecific,
RandomFolding,
IdentityInsertion,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LocalFoldingConfig {
pub regions: Vec<FoldingRegion>,
pub selection_strategy: RegionSelectionStrategy,
pub overlap_handling: OverlapHandling,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FoldingRegion {
pub start_qubit: usize,
pub end_qubit: usize,
pub start_time: f64,
pub end_time: f64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum RegionSelectionStrategy {
Random,
HighErrorRate,
CriticalPath,
Uniform,
Adaptive,
Automatic,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum OverlapHandling {
Ignore,
Merge,
Prioritize,
Exclude,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GateSpecificFoldingConfig {
pub folding_rules: HashMap<String, GateFoldingRule>,
pub priority_ordering: Vec<String>,
pub error_rate_weighting: bool,
pub folding_strategies: HashMap<String, GateFoldingRule>,
pub default_strategy: DefaultFoldingStrategy,
pub prioritized_gates: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum DefaultFoldingStrategy {
Identity,
Inverse,
Decomposition,
Random,
None,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GateFoldingRule {
pub folding_factor: f64,
pub probability: f64,
pub replacement: GateReplacementStrategy,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum GateReplacementStrategy {
Identity,
Inverse,
Decomposition,
Equivalent,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RichardsonConfig {
pub enable_richardson: bool,
pub order: usize,
pub stability_check: bool,
pub error_estimation: ErrorEstimationConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ErrorEstimationConfig {
pub method: ErrorEstimationMethod,
pub bootstrap_samples: usize,
pub confidence_level: f64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ErrorEstimationMethod {
Bootstrap,
Jackknife,
CrossValidation,
AnalyticalEstimate,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReadoutMitigationConfig {
pub enable_mitigation: bool,
pub methods: Vec<ReadoutMitigationMethod>,
pub calibration: ReadoutCalibrationConfig,
pub matrix_inversion: MatrixInversionConfig,
pub tensored_mitigation: TensoredMitigationConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ReadoutMitigationMethod {
CompleteMitigation,
TensoredMitigation,
LocalMitigation,
ClusterMitigation,
PartialMitigation,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReadoutCalibrationConfig {
pub frequency: CalibrationFrequency,
pub states: Vec<CalibrationState>,
pub quality_metrics: Vec<QualityMetric>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum CalibrationFrequency {
BeforeEachExperiment,
Periodic(Duration),
OnDemand,
Adaptive,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CalibrationState {
pub label: String,
pub preparation: Vec<String>,
pub expected_result: Vec<f64>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum QualityMetric {
Fidelity,
CrossTalk,
TemporalStability,
SpatialUniformity,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MatrixInversionConfig {
pub method: InversionMethod,
pub regularization: RegularizationConfig,
pub stability: NumericalStabilityConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum InversionMethod {
DirectInversion,
PseudoInverse,
IterativeInversion,
RegularizedInversion,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RegularizationConfig {
pub regularization_type: RegularizationType,
pub parameter: f64,
pub adaptive: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum RegularizationType {
L1,
L2,
ElasticNet,
Tikhonov,
None,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NumericalStabilityConfig {
pub condition_threshold: f64,
pub pivoting: PivotingStrategy,
pub scaling: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PivotingStrategy {
Partial,
Complete,
Rook,
None,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TensoredMitigationConfig {
pub groups: Vec<MitigationGroup>,
pub group_strategy: GroupFormationStrategy,
pub crosstalk_handling: CrosstalkHandling,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MitigationGroup {
pub qubits: Vec<usize>,
pub label: String,
pub independent: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum GroupFormationStrategy {
Topology,
ErrorRate,
Connectivity,
Manual,
Adaptive,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum CrosstalkHandling {
Ignore,
Model,
Compensate,
Avoid,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GateMitigationConfig {
pub enable_mitigation: bool,
pub gate_configs: HashMap<String, GateSpecificConfig>,
pub twirling: TwirlingConfig,
pub randomized_compiling: RandomizedCompilingConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GateSpecificConfig {
pub error_model: GateErrorModel,
pub mitigation_method: GateMitigationMethod,
pub compensation: CompensationParameters,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum GateErrorModel {
Depolarizing,
Coherent,
Incoherent,
Composite,
Custom(String),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum GateMitigationMethod {
PulseOptimization,
CompositePulses,
DynamicalDecoupling,
ErrorCorrection,
VirtualZ,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CompensationParameters {
pub phase_corrections: HashMap<String, f64>,
pub amplitude_corrections: HashMap<String, f64>,
pub timing_corrections: HashMap<String, f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TwirlingConfig {
pub enable_twirling: bool,
pub twirling_type: TwirlingType,
pub groups: Vec<TwirlingGroup>,
pub randomization: RandomizationStrategy,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum TwirlingType {
Pauli,
Clifford,
Gaussian,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TwirlingGroup {
pub elements: Vec<String>,
pub operation: String,
pub distribution: SamplingDistribution,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum SamplingDistribution {
Uniform,
Weighted,
Adaptive,
Custom(String),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum RandomizationStrategy {
FullRandomization,
PartialRandomization,
StructuredRandomization,
AdaptiveRandomization,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RandomizedCompilingConfig {
pub enable_rc: bool,
pub strategies: Vec<CompilationStrategy>,
pub replacement_rules: HashMap<String, Vec<String>>,
pub randomization_level: RandomizationLevel,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum CompilationStrategy {
GateReplacement,
CircuitReordering,
ParameterRandomization,
HybridApproach,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum RandomizationLevel {
Low,
Medium,
High,
Adaptive,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SymmetryVerificationConfig {
pub enable_verification: bool,
pub symmetry_types: Vec<SymmetryType>,
pub protocols: Vec<VerificationProtocol>,
pub tolerance: ToleranceSettings,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum SymmetryType {
UnitarySymmetry,
HamiltonianSymmetry,
StateSymmetry,
OperatorSymmetry,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum VerificationProtocol {
DirectVerification,
RandomizedBenchmarking,
ProcessTomography,
ShadowEstimation,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ToleranceSettings {
pub symmetry_tolerance: f64,
pub statistical_tolerance: f64,
pub confidence_level: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VirtualDistillationConfig {
pub enable_distillation: bool,
pub protocols: Vec<DistillationProtocol>,
pub resources: ResourceRequirements,
pub quality_metrics: Vec<DistillationQualityMetric>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum DistillationProtocol {
Standard,
Accelerated,
ResourceOptimized,
FaultTolerant,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResourceRequirements {
pub auxiliary_qubits: usize,
pub measurement_rounds: usize,
pub classical_processing: ProcessingRequirements,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProcessingRequirements {
pub memory_mb: usize,
pub computation_time: Duration,
pub parallel_processing: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum DistillationQualityMetric {
Fidelity,
SuccessProbability,
ResourceEfficiency,
FaultTolerance,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PECConfig {
pub enable_pec: bool,
pub quasi_probability: QuasiProbabilityConfig,
pub sampling: SamplingConfig,
pub optimization: PECOptimizationConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QuasiProbabilityConfig {
pub method: DecompositionMethod,
pub basis_operations: Vec<String>,
pub normalization: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum DecompositionMethod {
Optimal,
Greedy,
Heuristic,
MachineLearning,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SamplingConfig {
pub method: SamplingMethod,
pub sample_size: usize,
pub importance_sampling: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum SamplingMethod {
MonteCarlo,
ImportanceSampling,
StratifiedSampling,
AdaptiveSampling,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PECOptimizationConfig {
pub objective: ObjectiveFunction,
pub constraints: Vec<OptimizationConstraint>,
pub algorithm: OptimizationAlgorithm,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ObjectiveFunction {
MinimizeVariance,
MinimizeBias,
MaximizeEfficiency,
BalancedObjective,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OptimizationConstraint {
pub constraint_type: String,
pub value: f64,
pub tolerance: f64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum OptimizationAlgorithm {
GradientDescent,
Newton,
QuasiNewton,
EvolutionaryAlgorithm,
BayesianOptimization,
}
impl Default for FoldingConfig {
fn default() -> Self {
Self {
folding_type: FoldingType::Global,
global_folding: true,
local_folding: LocalFoldingConfig::default(),
gate_specific: GateSpecificFoldingConfig::default(),
}
}
}
impl Default for LocalFoldingConfig {
fn default() -> Self {
Self {
regions: vec![],
selection_strategy: RegionSelectionStrategy::Automatic,
overlap_handling: OverlapHandling::Merge,
}
}
}
impl Default for GateSpecificFoldingConfig {
fn default() -> Self {
Self {
folding_rules: HashMap::new(),
priority_ordering: vec![],
error_rate_weighting: false,
folding_strategies: HashMap::new(),
default_strategy: DefaultFoldingStrategy::Identity,
prioritized_gates: vec![],
}
}
}