quantrs2_device/vqa_support/
noise.rs1use crate::DeviceResult;
7use std::collections::HashMap;
8
9#[derive(Debug, Clone)]
11pub struct NoiseMitigationConfig {
12 pub zne_enabled: bool,
14 pub technique: MitigationTechnique,
16 pub parameters: HashMap<String, f64>,
18}
19
20#[derive(Debug, Clone)]
22pub enum MitigationTechnique {
23 ZeroNoiseExtrapolation,
25 ProbabilisticErrorCancellation,
27 SymmetryVerification,
29 None,
31}
32
33impl Default for NoiseMitigationConfig {
34 fn default() -> Self {
35 Self {
36 zne_enabled: true,
37 technique: MitigationTechnique::ZeroNoiseExtrapolation,
38 parameters: HashMap::new(),
39 }
40 }
41}
42
43#[derive(Debug, Clone)]
45pub struct MitigationResult {
46 pub mitigated_value: f64,
48 pub confidence: (f64, f64),
50 pub overhead: f64,
52}
53
54pub fn apply_noise_mitigation(
56 raw_value: f64,
57 config: &NoiseMitigationConfig,
58) -> DeviceResult<MitigationResult> {
59 let mitigated_value = match config.technique {
61 MitigationTechnique::ZeroNoiseExtrapolation => raw_value * 1.1, MitigationTechnique::ProbabilisticErrorCancellation => raw_value * 1.05,
63 MitigationTechnique::SymmetryVerification => raw_value * 1.02,
64 MitigationTechnique::None => raw_value,
65 };
66
67 Ok(MitigationResult {
68 mitigated_value,
69 confidence: (mitigated_value - 0.1, mitigated_value + 0.1),
70 overhead: 1.5,
71 })
72}