quantrs2_device/mid_circuit_measurements/analytics/
mod.rs1pub 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
14pub 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 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 pub async fn analyze(
53 &self,
54 measurement_history: &[MeasurementEvent],
55 execution_stats: &ExecutionStats,
56 ) -> DeviceResult<AdvancedAnalyticsResults> {
57 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 let statistical_analysis = self
64 .statistical_analyzer
65 .analyze(&latencies, &confidences)?;
66
67 let correlation_analysis =
69 self.correlation_analyzer
70 .analyze(&latencies, &confidences, ×tamps)?;
71
72 let time_series_analysis = if let Some(ref analyzer) = self.time_series_analyzer {
74 Some(analyzer.analyze(&latencies, ×tamps)?)
75 } else {
76 None
77 };
78
79 let anomaly_detection = if let Some(ref detector) = self.anomaly_detector {
81 Some(detector.detect(&latencies, &confidences)?)
82 } else {
83 None
84 };
85
86 let distribution_analysis = self.distribution_analyzer.analyze(&latencies)?;
88
89 let causal_analysis = if let Some(ref analyzer) = self.causal_analyzer {
91 Some(analyzer.analyze(&latencies, &confidences, ×tamps)?)
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}