Skip to main content

quantrs2_device/characterization/
functions.rs

1//! Auto-generated module
2//!
3//! 🤖 Generated with [SplitRS](https://github.com/cool-japan/splitrs)
4
5use crate::{CircuitResult, DeviceResult};
6use quantrs2_circuit::prelude::*;
7use quantrs2_core::qubit::QubitId;
8
9use super::types::{DriftTracker, ProcessTomography, RandomizedBenchmarking, StateTomography};
10
11/// Trait for executing characterization circuits
12#[async_trait::async_trait]
13pub trait CharacterizationExecutor {
14    async fn execute_characterization_circuit<const N: usize>(
15        &self,
16        circuit: &Circuit<N>,
17        shots: usize,
18    ) -> DeviceResult<CircuitResult>;
19}
20#[cfg(test)]
21mod tests {
22    use super::*;
23    #[test]
24    fn test_process_tomography_circuits() {
25        let tomo = ProcessTomography::new(1);
26        let prep_circuits = tomo.preparation_circuits();
27        let meas_circuits = tomo.measurement_circuits();
28        assert_eq!(prep_circuits.len(), 4);
29        assert_eq!(meas_circuits.len(), 4);
30    }
31    #[test]
32    fn test_state_tomography_circuits() {
33        let tomo = StateTomography::new(2);
34        let circuits = tomo.measurement_circuits();
35        assert_eq!(circuits.len(), 9);
36    }
37    #[test]
38    #[ignore = "Skipping randomized benchmarking test"]
39    fn test_randomized_benchmarking() {
40        let rb = RandomizedBenchmarking::new(vec![QubitId::new(0)]);
41        let sequence = rb.generate_clifford_sequence(10);
42        assert!(!sequence.is_empty());
43    }
44    #[test]
45    fn test_drift_tracking() {
46        let mut tracker = DriftTracker::new(vec!["T1".to_string()]);
47        for i in 0..20 {
48            let value = 50.0 + (i as f64) * 0.1;
49            tracker.add_measurement("T1", i as f64, value);
50        }
51        let drift = tracker.detect_drift("T1", 5);
52        assert!(drift.is_some());
53        assert!(drift.expect("drift should be Some") > 0.0);
54    }
55}