quantrs2_tytan/realtime_quantum_integration/
metrics.rs1use scirs2_core::ndarray::{Array1, Array2};
6use serde::{Deserialize, Serialize};
7use std::collections::{HashMap, VecDeque};
8use std::time::{Duration, SystemTime};
9
10use super::hardware::DecoherenceRates;
11
12#[derive(Debug, Clone, Serialize, Deserialize)]
14pub struct DeviceMetrics {
15 pub timestamp: SystemTime,
17 pub cpu_utilization: f64,
19 pub memory_utilization: f64,
21 pub network_utilization: f64,
23 pub hardware_metrics: HardwareMetrics,
25 pub quantum_metrics: QuantumMetrics,
27 pub environmental_metrics: EnvironmentalMetrics,
29}
30
31#[derive(Debug, Clone, Serialize, Deserialize)]
33pub struct HardwareMetrics {
34 pub temperatures: HashMap<String, f64>,
36 pub power_consumption: f64,
38 pub vibration_levels: HashMap<String, f64>,
40 pub magnetic_fields: HashMap<String, f64>,
42}
43
44#[derive(Debug, Clone, Serialize, Deserialize)]
46pub struct QuantumMetrics {
47 pub gate_fidelities: HashMap<String, f64>,
49 pub measurement_fidelities: HashMap<usize, f64>,
51 pub coherence_measurements: HashMap<usize, DecoherenceRates>,
53 pub crosstalk_matrix: Option<Array2<f64>>,
55}
56
57#[derive(Debug, Clone, Serialize, Deserialize)]
59pub struct EnvironmentalMetrics {
60 pub ambient_temperature: f64,
62 pub humidity: f64,
64 pub pressure: f64,
66 pub air_quality: Option<f64>,
68}
69
70#[derive(Debug, Clone, Serialize, Deserialize)]
72pub struct CalibrationData {
73 pub last_calibration: SystemTime,
75 pub calibration_results: CalibrationResults,
77 pub calibration_schedule: CalibrationSchedule,
79 pub drift_monitoring: DriftMonitoring,
81}
82
83impl Default for CalibrationData {
84 fn default() -> Self {
85 Self {
86 last_calibration: SystemTime::now(),
87 calibration_results: CalibrationResults {
88 gate_calibrations: HashMap::new(),
89 measurement_calibrations: HashMap::new(),
90 crosstalk_calibration: None,
91 overall_score: 0.95,
92 },
93 calibration_schedule: CalibrationSchedule {
94 regular_interval: Duration::from_secs(24 * 3600), next_calibration: SystemTime::now() + Duration::from_secs(24 * 3600),
96 trigger_conditions: vec![],
97 maintenance_integration: true,
98 },
99 drift_monitoring: DriftMonitoring {
100 drift_parameters: HashMap::new(),
101 prediction_model: None,
102 drift_thresholds: HashMap::new(),
103 },
104 }
105 }
106}
107
108#[derive(Debug, Clone, Serialize, Deserialize)]
110pub struct CalibrationResults {
111 pub gate_calibrations: HashMap<String, GateCalibration>,
113 pub measurement_calibrations: HashMap<usize, MeasurementCalibration>,
115 pub crosstalk_calibration: Option<CrosstalkCalibration>,
117 pub overall_score: f64,
119}
120
121#[derive(Debug, Clone, Serialize, Deserialize)]
123pub struct GateCalibration {
124 pub gate_name: String,
126 pub target_qubits: Vec<usize>,
128 pub fidelity: f64,
130 pub parameters: HashMap<String, f64>,
132 pub calibration_time: Duration,
134}
135
136#[derive(Debug, Clone, Serialize, Deserialize)]
138pub struct MeasurementCalibration {
139 pub qubit_index: usize,
141 pub fidelity: f64,
143 pub readout_parameters: ReadoutParameters,
145 pub calibration_matrices: Option<Array2<f64>>,
147}
148
149#[derive(Debug, Clone, Serialize, Deserialize)]
151pub struct ReadoutParameters {
152 pub pulse_parameters: HashMap<String, f64>,
154 pub integration_weights: Option<Array1<f64>>,
156 pub discrimination_threshold: f64,
158}
159
160#[derive(Debug, Clone, Serialize, Deserialize)]
162pub struct CrosstalkCalibration {
163 pub crosstalk_matrix: Array2<f64>,
165 pub mitigation_strategy: CrosstalkMitigation,
167 pub effectiveness_score: f64,
169}
170
171#[derive(Debug, Clone, Serialize, Deserialize)]
173pub enum CrosstalkMitigation {
174 None,
175 StaticCompensation,
176 DynamicCompensation,
177 PostProcessing,
178}
179
180#[derive(Debug, Clone, Serialize, Deserialize)]
182pub struct CalibrationSchedule {
183 pub regular_interval: Duration,
185 pub next_calibration: SystemTime,
187 pub trigger_conditions: Vec<CalibrationTrigger>,
189 pub maintenance_integration: bool,
191}
192
193#[derive(Debug, Clone, Serialize, Deserialize)]
195pub enum CalibrationTrigger {
196 TimeInterval(Duration),
197 PerformanceDegradation(f64),
198 EnvironmentalChange(f64),
199 UserRequest,
200 MaintenanceEvent,
201}
202
203#[derive(Debug, Clone, Serialize, Deserialize)]
205pub struct DriftMonitoring {
206 pub drift_parameters: HashMap<String, DriftParameter>,
208 pub prediction_model: Option<DriftPredictionModel>,
210 pub drift_thresholds: HashMap<String, f64>,
212}
213
214#[derive(Debug, Clone, Serialize, Deserialize)]
216pub struct DriftParameter {
217 pub parameter_name: String,
219 pub current_value: f64,
221 pub baseline_value: f64,
223 pub drift_rate: f64,
225 pub value_history: VecDeque<(SystemTime, f64)>,
227}
228
229#[derive(Debug, Clone, Serialize, Deserialize)]
231pub struct DriftPredictionModel {
232 pub model_type: String,
234 pub parameters: HashMap<String, f64>,
236 pub accuracy: f64,
238 pub last_update: SystemTime,
240}