1pub mod analytics;
7pub mod config;
8pub mod executor;
9pub mod fallback;
10pub mod ml;
11pub mod monitoring;
12pub mod results;
13
14pub use config::{
16 AdaptiveConfig, AdvancedAnalyticsConfig, FeatureEngineeringConfig, HardwareOptimizations,
17 MLModelType, MLOptimizationConfig, MLTrainingConfig, MidCircuitConfig, OnlineLearningConfig,
18 PredictionConfig, TimeSeriesConfig, UncertaintyConfig, ValidationConfig,
19};
20
21pub use results::{
22 AdaptiveLearningInsights, AdvancedAnalyticsResults, ErrorAnalysis, ExecutionStats,
23 MeasurementEvent, MeasurementPredictionResults, MeasurementType, MidCircuitCapabilities,
24 MidCircuitExecutionResult, OptimizationRecommendations, PerformanceMetrics, StorageLocation,
25 TimingConstraints, TrendDirection,
26};
27
28pub use executor::{MidCircuitDeviceExecutor, MidCircuitExecutor, ValidationResult};
29
30pub use analytics::{
31 anomaly::AnomalyDetector, causal::CausalAnalyzer, correlation::CorrelationAnalyzer,
32 distribution::DistributionAnalyzer, statistical::StatisticalAnalyzer,
33 time_series::TimeSeriesAnalyzer, AdvancedAnalyticsEngine,
34};
35
36pub use ml::{AdaptiveMeasurementManager, MLOptimizer, MeasurementPredictor};
37
38pub use monitoring::{AlertThresholds, ExportFormat, OptimizationCache, PerformanceMonitor};
39
40use crate::DeviceResult;
41use std::time::Duration;
42
43pub fn create_mid_circuit_executor(
45 config: MidCircuitConfig,
46 calibration_manager: crate::calibration::CalibrationManager,
47) -> MidCircuitExecutor {
48 MidCircuitExecutor::new(config, calibration_manager)
49}
50
51pub fn default_mid_circuit_config() -> MidCircuitConfig {
53 MidCircuitConfig::default()
54}
55
56pub fn high_performance_config() -> MidCircuitConfig {
58 MidCircuitConfig {
59 max_measurement_latency: 500.0, enable_realtime_processing: true,
61 measurement_buffer_size: 10000,
62 classical_timeout: 100.0,
63 enable_measurement_mitigation: true,
64 enable_parallel_measurements: true,
65 enable_adaptive_protocols: true,
66 hardware_optimizations: HardwareOptimizations {
67 batch_measurements: true,
68 optimize_scheduling: true,
69 use_native_protocols: true,
70 measurement_compression: false,
71 precompile_conditions: true,
72 },
73 validation_config: ValidationConfig {
74 validate_capabilities: true,
75 check_timing_constraints: true,
76 validate_register_sizes: true,
77 check_measurement_conflicts: true,
78 validate_feedforward: true,
79 },
80 analytics_config: AdvancedAnalyticsConfig {
81 enable_realtime_stats: true,
82 enable_correlation_analysis: true,
83 enable_time_series: true,
84 enable_anomaly_detection: true,
85 significance_threshold: 0.05,
86 analysis_window_size: 1000,
87 enable_distribution_fitting: true,
88 enable_causal_inference: true,
89 },
90 ml_optimization_config: MLOptimizationConfig {
91 enable_ml_optimization: true,
92 model_types: vec![MLModelType::NeuralNetwork {
93 hidden_layers: vec![64, 32],
94 }],
95 training_config: MLTrainingConfig::default(),
96 feature_engineering: FeatureEngineeringConfig::default(),
97 enable_transfer_learning: true,
98 online_learning: OnlineLearningConfig::default(),
99 },
100 prediction_config: PredictionConfig {
101 enable_prediction: true,
102 prediction_horizon: 50,
103 min_training_samples: 100,
104 sequence_length: 10,
105 time_series_config: TimeSeriesConfig::default(),
106 uncertainty_config: UncertaintyConfig::default(),
107 enable_ensemble: false,
108 },
109 adaptive_config: AdaptiveConfig {
110 enable_adaptive_scheduling: true,
111 enable_dynamic_thresholds: true,
112 enable_protocol_adaptation: true,
113 learning_rate: 0.001,
114 baseline_update_rate: 0.1,
115 drift_threshold: 0.1,
116 adaptation_window: 50,
117 enable_feedback_optimization: true,
118 improvement_threshold: 0.05,
119 },
120 }
121}
122
123pub fn analytics_focused_config() -> MidCircuitConfig {
125 MidCircuitConfig {
126 analytics_config: AdvancedAnalyticsConfig {
127 enable_realtime_stats: true,
128 enable_correlation_analysis: true,
129 enable_time_series: true,
130 enable_anomaly_detection: true,
131 significance_threshold: 0.01,
132 analysis_window_size: 5000,
133 enable_distribution_fitting: true,
134 enable_causal_inference: true,
135 },
136 ml_optimization_config: MLOptimizationConfig {
137 enable_ml_optimization: true,
138 model_types: vec![],
139 training_config: Default::default(),
140 feature_engineering: Default::default(),
141 enable_transfer_learning: true,
142 online_learning: Default::default(),
143 },
144 ..Default::default()
145 }
146}
147
148pub fn minimal_config() -> MidCircuitConfig {
150 MidCircuitConfig {
151 max_measurement_latency: 2000.0, enable_realtime_processing: false,
153 measurement_buffer_size: 1000,
154 classical_timeout: 50.0, enable_measurement_mitigation: false,
156 enable_parallel_measurements: false,
157 enable_adaptive_protocols: false,
158 hardware_optimizations: HardwareOptimizations {
159 batch_measurements: false,
160 optimize_scheduling: false,
161 use_native_protocols: false,
162 measurement_compression: false,
163 precompile_conditions: false,
164 },
165 validation_config: ValidationConfig {
166 validate_capabilities: true,
167 check_timing_constraints: false,
168 validate_register_sizes: false,
169 check_measurement_conflicts: false,
170 validate_feedforward: false,
171 },
172 analytics_config: AdvancedAnalyticsConfig {
173 enable_realtime_stats: true,
174 enable_correlation_analysis: false,
175 enable_time_series: false,
176 enable_anomaly_detection: false,
177 significance_threshold: 0.05,
178 analysis_window_size: 100,
179 enable_distribution_fitting: false,
180 enable_causal_inference: false,
181 },
182 ml_optimization_config: MLOptimizationConfig {
183 enable_ml_optimization: false,
184 model_types: vec![],
185 training_config: Default::default(),
186 feature_engineering: Default::default(),
187 enable_transfer_learning: false,
188 online_learning: Default::default(),
189 },
190 prediction_config: PredictionConfig {
191 enable_prediction: false,
192 prediction_horizon: 5,
193 min_training_samples: 100,
194 sequence_length: 10,
195 time_series_config: Default::default(),
196 uncertainty_config: Default::default(),
197 enable_ensemble: false,
198 },
199 adaptive_config: AdaptiveConfig {
200 enable_adaptive_scheduling: false,
201 enable_dynamic_thresholds: false,
202 enable_protocol_adaptation: false,
203 learning_rate: 0.01,
204 baseline_update_rate: 0.1,
205 drift_threshold: 0.1,
206 adaptation_window: 100,
207 enable_feedback_optimization: false,
208 improvement_threshold: 0.05,
209 },
210 }
211}
212
213pub fn initialize_system(config: MidCircuitConfig) -> DeviceResult<MidCircuitMeasurementSystem> {
215 let calibration_manager = crate::calibration::CalibrationManager::new();
216 let executor = MidCircuitExecutor::new(config.clone(), calibration_manager);
217 let analytics_engine = analytics::AdvancedAnalyticsEngine::new(&config.analytics_config);
218 let performance_monitor = monitoring::PerformanceMonitor::new();
219 let optimization_cache = monitoring::OptimizationCache::new();
220
221 Ok(MidCircuitMeasurementSystem {
222 config,
223 executor,
224 analytics_engine,
225 performance_monitor,
226 optimization_cache,
227 })
228}
229
230pub struct MidCircuitMeasurementSystem {
232 pub config: MidCircuitConfig,
233 pub executor: MidCircuitExecutor,
234 pub analytics_engine: analytics::AdvancedAnalyticsEngine,
235 pub performance_monitor: monitoring::PerformanceMonitor,
236 pub optimization_cache: monitoring::OptimizationCache,
237}
238
239impl MidCircuitMeasurementSystem {
240 pub fn new() -> DeviceResult<Self> {
242 initialize_system(default_mid_circuit_config())
243 }
244
245 pub fn new_high_performance() -> DeviceResult<Self> {
247 initialize_system(high_performance_config())
248 }
249
250 pub fn new_analytics_focused() -> DeviceResult<Self> {
252 initialize_system(analytics_focused_config())
253 }
254
255 pub fn new_minimal() -> DeviceResult<Self> {
257 initialize_system(minimal_config())
258 }
259
260 pub async fn execute_and_analyze<const N: usize>(
262 &mut self,
263 circuit: &quantrs2_circuit::measurement::MeasurementCircuit<N>,
264 device_executor: &dyn MidCircuitDeviceExecutor,
265 shots: usize,
266 ) -> DeviceResult<MidCircuitExecutionResult> {
267 let mut result = self
269 .executor
270 .execute_circuit(circuit, device_executor, shots)
271 .await?;
272
273 self.performance_monitor
275 .record_metrics(&result.performance_metrics)?;
276
277 if self.config.analytics_config.enable_realtime_stats {
279 let enhanced_analytics = self
280 .analytics_engine
281 .analyze(&result.measurement_history, &result.execution_stats)
282 .await?;
283 result.analytics_results = enhanced_analytics;
284 }
285
286 Ok(result)
287 }
288
289 pub fn get_system_status(&self) -> DeviceResult<SystemStatus> {
291 let performance_summary = self.performance_monitor.get_performance_summary()?;
292 let cache_stats = self.optimization_cache.get_cache_stats();
293 let active_alerts = self.performance_monitor.check_alerts()?;
294
295 let system_health = if active_alerts.iter().any(|a| a.severity == "Critical") {
296 SystemHealth::Critical
297 } else if !active_alerts.is_empty() {
298 SystemHealth::Warning
299 } else {
300 SystemHealth::Healthy
301 };
302
303 Ok(SystemStatus {
304 performance_summary,
305 cache_stats: Some(cache_stats),
306 active_alerts,
307 system_health,
308 uptime: Duration::from_secs(0), })
310 }
311
312 pub fn export_metrics(&self, format: monitoring::ExportFormat) -> DeviceResult<String> {
314 self.performance_monitor.export_metrics(format)
315 }
316
317 pub fn reset_system(&mut self) -> DeviceResult<()> {
319 self.optimization_cache.clear();
320 Ok(())
323 }
324}
325
326#[derive(Debug, Clone)]
328pub struct SystemStatus {
329 pub performance_summary: monitoring::PerformanceSummary,
330 pub cache_stats: Option<monitoring::CacheStatistics>,
331 pub active_alerts: Vec<monitoring::PerformanceAlert>,
332 pub system_health: SystemHealth,
333 pub uptime: std::time::Duration,
334}
335
336#[derive(Debug, Clone, PartialEq, Eq)]
338pub enum SystemHealth {
339 Healthy,
340 Warning,
341 Critical,
342}
343
344impl Default for MidCircuitMeasurementSystem {
345 fn default() -> Self {
346 Self::new().expect("Failed to create default MidCircuitMeasurementSystem")
347 }
348}
349
350#[cfg(test)]
351mod tests {
352 use super::*;
353
354 #[test]
355 fn test_default_config_creation() {
356 let config = default_mid_circuit_config();
357 assert!(config.max_measurement_latency > 0.0);
358 assert!(config.measurement_buffer_size > 0);
359 }
360
361 #[test]
362 fn test_high_performance_config() {
363 let config = high_performance_config();
364 assert!(config.enable_realtime_processing);
365 assert!(config.hardware_optimizations.batch_measurements);
366 assert!(config.analytics_config.enable_realtime_stats);
367 }
368
369 #[test]
370 fn test_minimal_config() {
371 let config = minimal_config();
372 assert!(!config.enable_realtime_processing);
373 assert!(!config.ml_optimization_config.enable_ml_optimization);
374 assert!(!config.prediction_config.enable_prediction);
375 }
376
377 #[test]
378 fn test_system_initialization() {
379 let config = default_mid_circuit_config();
380 let result = initialize_system(config);
381 assert!(result.is_ok());
382 }
383}