use crate::DeviceResult;
use std::collections::HashMap;
#[derive(Debug, Clone)]
pub struct NoiseMitigationConfig {
pub zne_enabled: bool,
pub technique: MitigationTechnique,
pub parameters: HashMap<String, f64>,
}
#[derive(Debug, Clone)]
pub enum MitigationTechnique {
ZeroNoiseExtrapolation,
ProbabilisticErrorCancellation,
SymmetryVerification,
None,
}
impl Default for NoiseMitigationConfig {
fn default() -> Self {
Self {
zne_enabled: true,
technique: MitigationTechnique::ZeroNoiseExtrapolation,
parameters: HashMap::new(),
}
}
}
#[derive(Debug, Clone)]
pub struct MitigationResult {
pub mitigated_value: f64,
pub confidence: (f64, f64),
pub overhead: f64,
}
pub fn apply_noise_mitigation(
raw_value: f64,
config: &NoiseMitigationConfig,
) -> DeviceResult<MitigationResult> {
let mitigated_value = match config.technique {
MitigationTechnique::ZeroNoiseExtrapolation => raw_value * 1.1, MitigationTechnique::ProbabilisticErrorCancellation => raw_value * 1.05,
MitigationTechnique::SymmetryVerification => raw_value * 1.02,
MitigationTechnique::None => raw_value,
};
Ok(MitigationResult {
mitigated_value,
confidence: (mitigated_value - 0.1, mitigated_value + 0.1),
overhead: 1.5,
})
}