quantrs2_device/qec/
traits.rs1use std::collections::HashMap;
9
10use scirs2_core::ndarray::Array1;
11use scirs2_core::Complex64;
12
13use crate::DeviceError;
14
15use super::{CorrectionOperation, LogicalOperator, StabilizerGroup, SyndromePattern};
16
17pub type QECResult<T> = Result<T, DeviceError>;
19
20pub trait SyndromeDetector {
22 fn detect_syndromes(
24 &self,
25 measurements: &HashMap<String, Vec<i32>>,
26 stabilizers: &[StabilizerGroup],
27 ) -> QECResult<Vec<SyndromePattern>>;
28
29 fn validate_syndrome(
31 &self,
32 syndrome: &SyndromePattern,
33 history: &[SyndromePattern],
34 ) -> QECResult<bool>;
35}
36
37pub trait ErrorCorrector {
39 fn correct_errors(
41 &self,
42 syndromes: &[SyndromePattern],
43 code: &dyn QuantumErrorCode,
44 ) -> QECResult<Vec<CorrectionOperation>>;
45
46 fn estimate_correction_fidelity(
48 &self,
49 correction: &CorrectionOperation,
50 current_state: Option<&Array1<Complex64>>,
51 ) -> QECResult<f64>;
52}
53
54pub trait QuantumErrorCode {
56 fn get_stabilizers(&self) -> Vec<StabilizerGroup>;
58
59 fn get_logical_operators(&self) -> Vec<LogicalOperator>;
61
62 fn distance(&self) -> usize;
64
65 fn num_data_qubits(&self) -> usize;
67
68 fn num_ancilla_qubits(&self) -> usize;
70
71 fn logical_qubit_count(&self) -> usize;
73
74 fn encode_logical_state(
76 &self,
77 logical_state: &Array1<Complex64>,
78 ) -> QECResult<Array1<Complex64>>;
79}