1use super::config::{AggregationLevel, PerformanceDashboardConfig};
7use crate::{DeviceError, DeviceResult};
8use scirs2_core::ndarray::Array2;
9use serde::{Deserialize, Serialize};
10use std::collections::HashMap;
11use std::time::{Duration, SystemTime};
12use tokio::sync::mpsc;
13
14#[derive(Debug, Clone, Serialize, Deserialize)]
16pub struct DashboardData {
17 pub realtime_metrics: RealtimeMetrics,
19 pub historical_data: HistoricalData,
21 pub statistical_analysis: StatisticalAnalysisResults,
23 pub trend_analysis: TrendAnalysisResults,
25 pub anomaly_detection: AnomalyDetectionResults,
27 pub predictions: PerformancePredictions,
29 pub alert_status: AlertStatus,
31 pub system_health: SystemHealthIndicators,
33}
34
35#[derive(Debug, Clone, Serialize, Deserialize)]
37pub struct RealtimeMetrics {
38 pub timestamp: u64,
40 pub device_metrics: DeviceMetrics,
42 pub circuit_metrics: CircuitMetrics,
44 pub resource_metrics: ResourceMetrics,
46 pub quality_metrics: QualityMetrics,
48 pub throughput_metrics: ThroughputMetrics,
50}
51
52#[derive(Debug, Clone, Serialize, Deserialize)]
54pub struct HistoricalData {
55 pub time_series: HashMap<AggregationLevel, TimeSeriesData>,
57 pub performance_evolution: PerformanceEvolution,
59 pub comparative_analysis: ComparativeAnalysis,
61 pub benchmark_results: BenchmarkResults,
63}
64
65#[derive(Debug, Clone, Serialize, Deserialize, Default)]
67pub struct StatisticalAnalysisResults {
68 pub descriptive_stats: DescriptiveStatistics,
70 pub distribution_analysis: DistributionAnalysis,
72 pub correlation_analysis: CorrelationAnalysis,
74 pub hypothesis_tests: HypothesisTestResults,
76 pub confidence_intervals: ConfidenceIntervals,
78}
79
80#[derive(Debug, Clone, Serialize, Deserialize)]
82pub struct TrendAnalysisResults {
83 pub trend_directions: HashMap<String, TrendDirection>,
85 pub trend_strengths: HashMap<String, f64>,
87 pub seasonal_patterns: SeasonalPatterns,
89 pub change_points: ChangePointDetection,
91 pub forecasts: ForecastingResults,
93}
94
95#[derive(Debug, Clone, Serialize, Deserialize)]
97pub struct AnomalyDetectionResults {
98 pub current_anomalies: Vec<Anomaly>,
100 pub anomaly_history: Vec<HistoricalAnomaly>,
102 pub anomaly_patterns: AnomalyPatterns,
104 pub root_cause_analysis: RootCauseAnalysis,
106}
107
108#[derive(Debug, Clone, Serialize, Deserialize, Default)]
110pub struct PerformancePredictions {
111 pub short_term: PredictionResults,
113 pub medium_term: PredictionResults,
115 pub long_term: PredictionResults,
117 pub accuracy_metrics: PredictionAccuracy,
119 pub model_performance: ModelPerformance,
121}
122
123#[derive(Debug, Clone, Serialize, Deserialize)]
125pub struct AlertStatus {
126 pub active_alerts: Vec<ActiveAlert>,
128 pub recent_alerts: Vec<ResolvedAlert>,
130 pub alert_statistics: AlertStatistics,
132 pub alert_trends: AlertTrends,
134}
135
136#[derive(Debug, Clone, Serialize, Deserialize)]
138pub struct SystemHealthIndicators {
139 pub overall_health_score: f64,
141 pub component_health: HashMap<String, f64>,
143 pub health_trends: HealthTrends,
145 pub performance_indicators: PerformanceIndicators,
147 pub capacity_utilization: CapacityUtilization,
149}
150
151#[derive(Debug, Clone, Serialize, Deserialize)]
153pub struct DeviceMetrics {
154 pub fidelity: f64,
155 pub error_rate: f64,
156 pub coherence_time: f64,
157 pub gate_time: f64,
158 pub readout_fidelity: f64,
159 pub cross_talk: f64,
160 pub temperature: f64,
161 pub uptime: f64,
162}
163
164#[derive(Debug, Clone, Serialize, Deserialize)]
166pub struct CircuitMetrics {
167 pub depth: f64,
168 pub gate_count: HashMap<String, usize>,
169 pub execution_time: f64,
170 pub success_rate: f64,
171 pub optimization_ratio: f64,
172 pub compilation_time: f64,
173}
174
175#[derive(Debug, Clone, Serialize, Deserialize)]
177pub struct ResourceMetrics {
178 pub cpu_utilization: f64,
179 pub memory_utilization: f64,
180 pub network_utilization: f64,
181 pub quantum_utilization: f64,
182 pub storage_utilization: f64,
183 pub cost_efficiency: f64,
184}
185
186#[derive(Debug, Clone, Serialize, Deserialize)]
188pub struct QualityMetrics {
189 pub overall_quality: f64,
190 pub consistency: f64,
191 pub reliability: f64,
192 pub accuracy: f64,
193 pub precision: f64,
194 pub robustness: f64,
195}
196
197#[derive(Debug, Clone, Serialize, Deserialize)]
199pub struct ThroughputMetrics {
200 pub jobs_per_hour: f64,
201 pub circuits_per_minute: f64,
202 pub gates_per_second: f64,
203 pub queue_length: usize,
204 pub average_wait_time: f64,
205}
206
207#[derive(Debug, Clone, Serialize, Deserialize)]
209pub struct TimeSeriesData {
210 pub timestamps: Vec<u64>,
211 pub values: HashMap<String, Vec<f64>>,
212 pub metadata: TimeSeriesMetadata,
213}
214
215#[derive(Debug, Clone, Serialize, Deserialize)]
217pub struct TimeSeriesMetadata {
218 pub collection_start: SystemTime,
219 pub collection_end: SystemTime,
220 pub sampling_rate: f64,
221 pub data_quality: f64,
222 pub missing_points: usize,
223}
224
225#[derive(Debug, Clone, Serialize, Deserialize, Default)]
227pub struct PerformanceEvolution {
228 pub performance_trends: HashMap<String, PerformanceTrend>,
229 pub improvement_metrics: ImprovementMetrics,
230 pub degradation_indicators: DegradationIndicators,
231}
232
233#[derive(Debug, Clone, Serialize, Deserialize)]
235pub struct PerformanceTrend {
236 pub metric_name: String,
237 pub trend_direction: TrendDirection,
238 pub trend_strength: f64,
239 pub confidence: f64,
240 pub time_horizon: Duration,
241}
242
243#[derive(Debug, Clone, Serialize, Deserialize)]
245pub struct ImprovementMetrics {
246 pub overall_improvement_rate: f64,
247 pub metric_improvements: HashMap<String, f64>,
248 pub improvement_sources: Vec<ImprovementSource>,
249}
250
251#[derive(Debug, Clone, Serialize, Deserialize)]
253pub struct ImprovementSource {
254 pub source_type: String,
255 pub impact_magnitude: f64,
256 pub confidence: f64,
257 pub description: String,
258}
259
260#[derive(Debug, Clone, Serialize, Deserialize)]
262pub struct DegradationIndicators {
263 pub degradation_alerts: Vec<DegradationAlert>,
264 pub degradation_rate: f64,
265 pub critical_metrics: Vec<String>,
266}
267
268#[derive(Debug, Clone, Serialize, Deserialize)]
270pub struct DegradationAlert {
271 pub metric_name: String,
272 pub current_value: f64,
273 pub baseline_value: f64,
274 pub degradation_percentage: f64,
275 pub severity: String,
276}
277
278#[derive(Debug, Clone, Serialize, Deserialize, Default)]
280pub struct ComparativeAnalysis {
281 pub device_comparisons: Vec<DeviceComparison>,
282 pub benchmark_comparisons: Vec<BenchmarkComparison>,
283 pub historical_comparisons: Vec<HistoricalComparison>,
284}
285
286#[derive(Debug, Clone, Serialize, Deserialize)]
288pub struct DeviceComparison {
289 pub device_a: String,
290 pub device_b: String,
291 pub performance_differences: HashMap<String, f64>,
292 pub statistical_significance: f64,
293}
294
295#[derive(Debug, Clone, Serialize, Deserialize)]
297pub struct BenchmarkComparison {
298 pub benchmark_name: String,
299 pub current_score: f64,
300 pub reference_score: f64,
301 pub performance_ratio: f64,
302 pub ranking: usize,
303}
304
305#[derive(Debug, Clone, Serialize, Deserialize)]
307pub struct HistoricalComparison {
308 pub time_period: String,
309 pub current_metrics: HashMap<String, f64>,
310 pub historical_metrics: HashMap<String, f64>,
311 pub change_indicators: HashMap<String, f64>,
312}
313
314#[derive(Debug, Clone, Serialize, Deserialize, Default)]
316pub struct BenchmarkResults {
317 pub standard_benchmarks: HashMap<String, BenchmarkResult>,
318 pub custom_benchmarks: HashMap<String, BenchmarkResult>,
319 pub benchmark_trends: BenchmarkTrends,
320}
321
322#[derive(Debug, Clone, Serialize, Deserialize)]
324pub struct BenchmarkResult {
325 pub benchmark_name: String,
326 pub score: f64,
327 pub percentile: f64,
328 pub execution_time: Duration,
329 pub details: HashMap<String, f64>,
330}
331
332#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
334pub enum TrendDirection {
335 Increasing,
336 Decreasing,
337 Stable,
338 Volatile,
339 Cyclical,
340 Improving,
341}
342
343pub struct DataCollector {
345 config: PerformanceDashboardConfig,
346 collection_tasks: HashMap<String, CollectionTask>,
347 data_pipeline: DataPipeline,
348 quality_monitor: DataQualityMonitor,
349}
350
351pub struct CollectionTask {
353 pub task_id: String,
354 pub collection_type: CollectionType,
355 pub interval: Duration,
356 pub enabled: bool,
357 pub last_collection: Option<SystemTime>,
358}
359
360#[derive(Debug, Clone, PartialEq, Eq)]
362pub enum CollectionType {
363 DeviceMetrics,
364 CircuitMetrics,
365 ResourceMetrics,
366 QualityMetrics,
367 ThroughputMetrics,
368 Custom(String),
369}
370
371pub struct DataPipeline {
373 processing_stages: Vec<ProcessingStage>,
374 output_channels: Vec<mpsc::Sender<ProcessedData>>,
375}
376
377pub struct ProcessingStage {
379 pub stage_name: String,
380 pub processor: Box<dyn DataProcessor + Send + Sync>,
381 pub enabled: bool,
382}
383
384pub trait DataProcessor {
386 fn process(&self, data: &RawData) -> DeviceResult<ProcessedData>;
387}
388
389#[derive(Debug, Clone)]
391pub struct RawData {
392 pub timestamp: SystemTime,
393 pub data_type: String,
394 pub values: HashMap<String, f64>,
395 pub metadata: HashMap<String, String>,
396}
397
398#[derive(Debug, Clone)]
400pub struct ProcessedData {
401 pub timestamp: SystemTime,
402 pub data_type: String,
403 pub processed_values: HashMap<String, f64>,
404 pub quality_score: f64,
405 pub processing_metadata: HashMap<String, String>,
406}
407
408pub struct DataQualityMonitor {
410 quality_rules: Vec<QualityRule>,
411 quality_history: Vec<QualityReport>,
412}
413
414pub struct QualityRule {
416 pub rule_name: String,
417 pub rule_type: QualityRuleType,
418 pub threshold: f64,
419 pub enabled: bool,
420}
421
422#[derive(Debug, Clone, PartialEq, Eq)]
424pub enum QualityRuleType {
425 Completeness,
426 Accuracy,
427 Consistency,
428 Timeliness,
429 Validity,
430 Custom(String),
431}
432
433#[derive(Debug, Clone)]
435pub struct QualityReport {
436 pub timestamp: SystemTime,
437 pub overall_score: f64,
438 pub rule_scores: HashMap<String, f64>,
439 pub issues: Vec<QualityIssue>,
440}
441
442#[derive(Debug, Clone)]
444pub struct QualityIssue {
445 pub issue_type: String,
446 pub severity: QualityIssueSeverity,
447 pub description: String,
448 pub affected_data: Vec<String>,
449}
450
451#[derive(Debug, Clone, PartialEq, Eq)]
453pub enum QualityIssueSeverity {
454 Low,
455 Medium,
456 High,
457 Critical,
458}
459
460impl Default for RealtimeMetrics {
463 fn default() -> Self {
464 Self::new()
465 }
466}
467
468impl RealtimeMetrics {
469 pub fn new() -> Self {
470 Self {
471 timestamp: SystemTime::now()
473 .duration_since(std::time::UNIX_EPOCH)
474 .unwrap_or(Duration::ZERO)
475 .as_secs(),
476 device_metrics: DeviceMetrics::default(),
477 circuit_metrics: CircuitMetrics::default(),
478 resource_metrics: ResourceMetrics::default(),
479 quality_metrics: QualityMetrics::default(),
480 throughput_metrics: ThroughputMetrics::default(),
481 }
482 }
483
484 pub fn update_timestamp(&mut self) {
485 self.timestamp = SystemTime::now()
487 .duration_since(std::time::UNIX_EPOCH)
488 .unwrap_or(Duration::ZERO)
489 .as_secs();
490 }
491}
492
493impl Default for HistoricalData {
494 fn default() -> Self {
495 Self::new()
496 }
497}
498
499impl HistoricalData {
500 pub fn new() -> Self {
501 Self {
502 time_series: HashMap::new(),
503 performance_evolution: PerformanceEvolution::default(),
504 comparative_analysis: ComparativeAnalysis::default(),
505 benchmark_results: BenchmarkResults::default(),
506 }
507 }
508}
509
510impl StatisticalAnalysisResults {
511 pub fn new() -> Self {
512 Self {
513 descriptive_stats: DescriptiveStatistics::default(),
514 distribution_analysis: DistributionAnalysis::default(),
515 correlation_analysis: CorrelationAnalysis::default(),
516 hypothesis_tests: HypothesisTestResults::default(),
517 confidence_intervals: ConfidenceIntervals::default(),
518 }
519 }
520}
521
522impl PerformancePredictions {
523 pub fn new() -> Self {
524 Self {
525 short_term: PredictionResults::default(),
526 medium_term: PredictionResults::default(),
527 long_term: PredictionResults::default(),
528 accuracy_metrics: PredictionAccuracy::default(),
529 model_performance: ModelPerformance::default(),
530 }
531 }
532}
533
534impl DataCollector {
535 pub fn new(config: PerformanceDashboardConfig) -> Self {
536 Self {
537 config,
538 collection_tasks: HashMap::new(),
539 data_pipeline: DataPipeline::new(),
540 quality_monitor: DataQualityMonitor::new(),
541 }
542 }
543
544 pub async fn start_collection(&mut self) -> DeviceResult<()> {
545 self.setup_collection_tasks().await?;
547
548 self.data_pipeline.start().await?;
550
551 self.quality_monitor.start_monitoring().await?;
553
554 Ok(())
555 }
556
557 pub async fn stop_collection(&mut self) -> DeviceResult<()> {
558 for task in self.collection_tasks.values_mut() {
560 task.enabled = false;
561 }
562
563 self.data_pipeline.stop().await?;
565
566 self.quality_monitor.stop_monitoring().await?;
568
569 Ok(())
570 }
571
572 async fn setup_collection_tasks(&mut self) -> DeviceResult<()> {
573 self.collection_tasks.insert(
575 "device_metrics".to_string(),
576 CollectionTask {
577 task_id: "device_metrics".to_string(),
578 collection_type: CollectionType::DeviceMetrics,
579 interval: Duration::from_secs(self.config.collection_interval),
580 enabled: true,
581 last_collection: None,
582 },
583 );
584
585 Ok(())
587 }
588}
589
590impl Default for DataPipeline {
591 fn default() -> Self {
592 Self::new()
593 }
594}
595
596impl DataPipeline {
597 pub const fn new() -> Self {
598 Self {
599 processing_stages: Vec::new(),
600 output_channels: Vec::new(),
601 }
602 }
603
604 pub async fn start(&self) -> DeviceResult<()> {
605 Ok(())
607 }
608
609 pub async fn stop(&self) -> DeviceResult<()> {
610 Ok(())
612 }
613}
614
615impl Default for DataQualityMonitor {
616 fn default() -> Self {
617 Self::new()
618 }
619}
620
621impl DataQualityMonitor {
622 pub const fn new() -> Self {
623 Self {
624 quality_rules: Vec::new(),
625 quality_history: Vec::new(),
626 }
627 }
628
629 pub async fn start_monitoring(&self) -> DeviceResult<()> {
630 Ok(())
632 }
633
634 pub async fn stop_monitoring(&self) -> DeviceResult<()> {
635 Ok(())
637 }
638}
639
640impl Default for DeviceMetrics {
643 fn default() -> Self {
644 Self {
645 fidelity: 0.95,
646 error_rate: 0.01,
647 coherence_time: 100.0,
648 gate_time: 20.0,
649 readout_fidelity: 0.98,
650 cross_talk: 0.01,
651 temperature: 0.01,
652 uptime: 0.99,
653 }
654 }
655}
656
657impl Default for CircuitMetrics {
658 fn default() -> Self {
659 Self {
660 depth: 10.0,
661 gate_count: HashMap::new(),
662 execution_time: 1000.0,
663 success_rate: 0.95,
664 optimization_ratio: 0.8,
665 compilation_time: 100.0,
666 }
667 }
668}
669
670impl Default for ResourceMetrics {
671 fn default() -> Self {
672 Self {
673 cpu_utilization: 0.5,
674 memory_utilization: 0.6,
675 network_utilization: 0.3,
676 quantum_utilization: 0.8,
677 storage_utilization: 0.4,
678 cost_efficiency: 0.7,
679 }
680 }
681}
682
683impl Default for QualityMetrics {
684 fn default() -> Self {
685 Self {
686 overall_quality: 0.9,
687 consistency: 0.85,
688 reliability: 0.95,
689 accuracy: 0.92,
690 precision: 0.88,
691 robustness: 0.87,
692 }
693 }
694}
695
696impl Default for ThroughputMetrics {
697 fn default() -> Self {
698 Self {
699 jobs_per_hour: 100.0,
700 circuits_per_minute: 10.0,
701 gates_per_second: 1000.0,
702 queue_length: 5,
703 average_wait_time: 30.0,
704 }
705 }
706}
707
708#[derive(Debug, Clone, Serialize, Deserialize, Default)]
710pub struct DescriptiveStatistics {
711 pub metrics_stats: HashMap<String, f64>,
712 pub summary_statistics: SummaryStatistics,
713 pub distribution_summaries: HashMap<String, f64>,
714}
715
716#[derive(Debug, Clone, Serialize, Deserialize, Default)]
717pub struct DistributionAnalysis {
718 pub distribution_fits: HashMap<String, String>,
719 pub goodness_of_fit: HashMap<String, f64>,
720 pub distribution_parameters: HashMap<String, f64>,
721}
722
723#[derive(Debug, Clone, Serialize, Deserialize)]
724pub struct CorrelationAnalysis {
725 pub correlationmatrix: Array2<f64>,
726 pub correlation_significance: HashMap<String, f64>,
727 pub causal_relationships: Vec<String>,
728}
729
730#[derive(Debug, Clone, Serialize, Deserialize, Default)]
731pub struct HypothesisTestResults {
732 pub test_results: HashMap<String, f64>,
733 pub significance_levels: HashMap<String, f64>,
734 pub effect_sizes: HashMap<String, f64>,
735}
736
737#[derive(Debug, Clone, Serialize, Deserialize, Default)]
738pub struct ConfidenceIntervals {
739 pub intervals: HashMap<String, (f64, f64)>,
740 pub confidence_levels: HashMap<String, f64>,
741 pub interval_interpretations: HashMap<String, String>,
742}
743
744#[derive(Debug, Clone, Serialize, Deserialize, Default)]
745pub struct SeasonalPatterns {
746 pub seasonal_components: HashMap<String, Vec<f64>>,
747 pub seasonal_strength: HashMap<String, f64>,
748 pub seasonal_periods: HashMap<String, usize>,
749}
750
751#[derive(Debug, Clone, Serialize, Deserialize, Default)]
752pub struct ChangePointDetection {
753 pub change_points: Vec<u64>,
754 pub change_magnitudes: Vec<f64>,
755 pub change_types: Vec<String>,
756}
757
758#[derive(Debug, Clone, Serialize, Deserialize, Default)]
759pub struct ForecastingResults {
760 pub forecasts: HashMap<String, Vec<f64>>,
761 pub forecast_intervals: HashMap<String, Vec<(f64, f64)>>,
762 pub forecast_accuracy: HashMap<String, f64>,
763}
764
765#[derive(Debug, Clone, Serialize, Deserialize)]
766pub struct Anomaly {
767 pub timestamp: u64,
768 pub metric_name: String,
769 pub anomaly_score: f64,
770 pub anomaly_type: String,
771 pub description: String,
772}
773
774#[derive(Debug, Clone, Serialize, Deserialize, Default)]
775pub struct HistoricalAnomaly {
776 pub anomaly: Anomaly,
777 pub resolution_time: Option<u64>,
778 pub impact_assessment: String,
779 pub lessons_learned: String,
780}
781
782#[derive(Debug, Clone, Serialize, Deserialize, Default)]
783pub struct AnomalyPatterns {
784 pub recurring_anomalies: Vec<String>,
785 pub anomaly_frequencies: HashMap<String, f64>,
786 pub anomaly_correlations: HashMap<String, f64>,
787}
788
789#[derive(Debug, Clone, Serialize, Deserialize, Default)]
790pub struct RootCauseAnalysis {
791 pub potential_causes: Vec<String>,
792 pub cause_probabilities: HashMap<String, f64>,
793 pub investigation_steps: Vec<String>,
794}
795
796#[derive(Debug, Clone, Serialize, Deserialize, Default)]
797pub struct BenchmarkTrends {
798 pub trend_directions: HashMap<String, String>,
799 pub improvement_rates: HashMap<String, f64>,
800 pub benchmark_stability: HashMap<String, f64>,
801}
802
803#[derive(Debug, Clone, Serialize, Deserialize, Default)]
804pub struct PredictionAccuracy {
805 pub accuracy_metrics: HashMap<String, f64>,
806 pub model_comparison: ModelComparison,
807 pub prediction_reliability: PredictionReliability,
808}
809
810#[derive(Debug, Clone, Serialize, Deserialize, Default)]
811pub struct ModelPerformance {
812 pub model_scores: HashMap<String, f64>,
813 pub feature_importance: HashMap<String, f64>,
814 pub model_diagnostics: ModelDiagnostics,
815}
816
817#[derive(Debug, Clone, Serialize, Deserialize, Default)]
818pub struct ActiveAlert {
819 pub alert_id: String,
820 pub metric_name: String,
821 pub severity: String,
822 pub timestamp: u64,
823 pub description: String,
824}
825
826#[derive(Debug, Clone, Serialize, Deserialize, Default)]
827pub struct ResolvedAlert {
828 pub alert_id: String,
829 pub resolution_time: u64,
830 pub resolution_method: String,
831 pub notes: String,
832}
833
834#[derive(Debug, Clone, Serialize, Deserialize, Default)]
835pub struct AlertStatistics {
836 pub total_alerts: usize,
837 pub alerts_by_severity: HashMap<String, usize>,
838 pub resolution_times: HashMap<String, f64>,
839}
840
841#[derive(Debug, Clone, Serialize, Deserialize, Default)]
842pub struct AlertTrends {
843 pub frequency_trends: HashMap<String, f64>,
844 pub severity_trends: HashMap<String, f64>,
845 pub resolution_trends: HashMap<String, f64>,
846}
847
848#[derive(Debug, Clone, Serialize, Deserialize)]
849pub struct HealthTrends {
850 pub overall_trend: String,
851 pub component_trends: HashMap<String, String>,
852 pub trend_confidence: f64,
853}
854
855#[derive(Debug, Clone, Serialize, Deserialize, Default)]
856pub struct PerformanceIndicators {
857 pub key_indicators: HashMap<String, f64>,
858 pub indicator_status: HashMap<String, String>,
859 pub thresholds: HashMap<String, f64>,
860}
861
862#[derive(Debug, Clone, Serialize, Deserialize)]
863pub struct CapacityUtilization {
864 pub current_capacity: HashMap<String, f64>,
865 pub peak_capacity: HashMap<String, f64>,
866 pub utilization_efficiency: f64,
867}
868
869impl Default for CorrelationAnalysis {
871 fn default() -> Self {
872 Self {
873 correlationmatrix: Array2::zeros((0, 0)),
874 correlation_significance: HashMap::new(),
875 causal_relationships: Vec::new(),
876 }
877 }
878}
879impl Default for ImprovementMetrics {
880 fn default() -> Self {
881 Self {
882 overall_improvement_rate: 0.0,
883 metric_improvements: HashMap::new(),
884 improvement_sources: Vec::new(),
885 }
886 }
887}
888impl Default for DegradationIndicators {
889 fn default() -> Self {
890 Self {
891 degradation_alerts: Vec::new(),
892 degradation_rate: 0.0,
893 critical_metrics: Vec::new(),
894 }
895 }
896}
897
898impl Default for Anomaly {
900 fn default() -> Self {
901 Self {
902 timestamp: 0,
903 metric_name: String::new(),
904 anomaly_score: 0.0,
905 anomaly_type: String::new(),
906 description: String::new(),
907 }
908 }
909}
910impl Default for HealthTrends {
911 fn default() -> Self {
912 Self {
913 overall_trend: String::new(),
914 component_trends: HashMap::new(),
915 trend_confidence: 0.0,
916 }
917 }
918}
919impl Default for CapacityUtilization {
920 fn default() -> Self {
921 Self {
922 current_capacity: HashMap::new(),
923 peak_capacity: HashMap::new(),
924 utilization_efficiency: 0.0,
925 }
926 }
927}
928
929#[derive(Debug, Clone, Serialize, Deserialize, Default)]
931pub struct SummaryStatistics {
932 pub mean: f64,
933 pub std: f64,
934 pub min: f64,
935 pub max: f64,
936}
937#[derive(Debug, Clone, Serialize, Deserialize, Default)]
938pub struct ModelInfo {
939 pub model_type: String,
940 pub parameters: HashMap<String, f64>,
941}
942#[derive(Debug, Clone, Serialize, Deserialize, Default)]
943pub struct ModelComparison {
944 pub models: Vec<String>,
945 pub scores: Vec<f64>,
946}
947#[derive(Debug, Clone, Serialize, Deserialize, Default)]
948pub struct PredictionReliability {
949 pub reliability_score: f64,
950 pub uncertainty: f64,
951}
952#[derive(Debug, Clone, Serialize, Deserialize, Default)]
953pub struct ModelDiagnostics {
954 pub residual_analysis: HashMap<String, f64>,
955 pub validation_metrics: HashMap<String, f64>,
956}
957#[derive(Debug, Clone, Serialize, Deserialize, Default)]
958pub struct PredictionResults {
959 pub predictions: HashMap<String, f64>,
960 pub confidence_intervals: HashMap<String, (f64, f64)>,
961 pub model_info: ModelInfo,
962}