quantrs2_device/mid_circuit_measurements/analytics/
mod.rs

1//! Analytics engine and analysis components
2
3pub mod anomaly;
4pub mod causal;
5pub mod correlation;
6pub mod distribution;
7pub mod statistical;
8pub mod time_series;
9
10use super::config::AdvancedAnalyticsConfig;
11use super::results::*;
12use crate::DeviceResult;
13
14/// Advanced analytics engine for mid-circuit measurements
15pub struct AdvancedAnalyticsEngine {
16    config: AdvancedAnalyticsConfig,
17    statistical_analyzer: statistical::StatisticalAnalyzer,
18    correlation_analyzer: correlation::CorrelationAnalyzer,
19    time_series_analyzer: Option<time_series::TimeSeriesAnalyzer>,
20    anomaly_detector: Option<anomaly::AnomalyDetector>,
21    distribution_analyzer: distribution::DistributionAnalyzer,
22    causal_analyzer: Option<causal::CausalAnalyzer>,
23}
24
25impl AdvancedAnalyticsEngine {
26    /// Create new analytics engine
27    pub fn new(config: &AdvancedAnalyticsConfig) -> Self {
28        Self {
29            config: config.clone(),
30            statistical_analyzer: statistical::StatisticalAnalyzer::new(),
31            correlation_analyzer: correlation::CorrelationAnalyzer::new(),
32            time_series_analyzer: if config.enable_time_series {
33                Some(time_series::TimeSeriesAnalyzer::new())
34            } else {
35                None
36            },
37            anomaly_detector: if config.enable_anomaly_detection {
38                Some(anomaly::AnomalyDetector::new())
39            } else {
40                None
41            },
42            distribution_analyzer: distribution::DistributionAnalyzer::new(),
43            causal_analyzer: if config.enable_causal_inference {
44                Some(causal::CausalAnalyzer::new())
45            } else {
46                None
47            },
48        }
49    }
50
51    /// Perform comprehensive analytics
52    pub async fn analyze(
53        &self,
54        measurement_history: &[MeasurementEvent],
55        execution_stats: &ExecutionStats,
56    ) -> DeviceResult<AdvancedAnalyticsResults> {
57        // Extract measurement data for analysis
58        let latencies: Vec<f64> = measurement_history.iter().map(|e| e.latency).collect();
59        let confidences: Vec<f64> = measurement_history.iter().map(|e| e.confidence).collect();
60        let timestamps: Vec<f64> = measurement_history.iter().map(|e| e.timestamp).collect();
61
62        // Statistical analysis
63        let statistical_analysis = self
64            .statistical_analyzer
65            .analyze(&latencies, &confidences)?;
66
67        // Correlation analysis
68        let correlation_analysis =
69            self.correlation_analyzer
70                .analyze(&latencies, &confidences, &timestamps)?;
71
72        // Time series analysis (if enabled)
73        let time_series_analysis = if let Some(ref analyzer) = self.time_series_analyzer {
74            Some(analyzer.analyze(&latencies, &timestamps)?)
75        } else {
76            None
77        };
78
79        // Anomaly detection (if enabled)
80        let anomaly_detection = if let Some(ref detector) = self.anomaly_detector {
81            Some(detector.detect(&latencies, &confidences)?)
82        } else {
83            None
84        };
85
86        // Distribution analysis
87        let distribution_analysis = self.distribution_analyzer.analyze(&latencies)?;
88
89        // Causal analysis (if enabled)
90        let causal_analysis = if let Some(ref analyzer) = self.causal_analyzer {
91            Some(analyzer.analyze(&latencies, &confidences, &timestamps)?)
92        } else {
93            None
94        };
95
96        Ok(AdvancedAnalyticsResults {
97            statistical_analysis,
98            correlation_analysis,
99            time_series_analysis,
100            anomaly_detection,
101            distribution_analysis,
102            causal_analysis,
103        })
104    }
105}