1use std::collections::HashMap;
4use std::time::{Duration, SystemTime};
5
6use quantrs2_core::qubit::QubitId;
7use scirs2_core::ndarray::{Array1, Array2};
8use serde::{Deserialize, Serialize};
9
10#[derive(Debug, Clone, Serialize, Deserialize)]
12pub struct MidCircuitExecutionResult {
13 pub final_measurements: HashMap<String, usize>,
15 pub classical_registers: HashMap<String, Vec<u8>>,
17 pub measurement_history: Vec<MeasurementEvent>,
19 pub execution_stats: ExecutionStats,
21 pub performance_metrics: PerformanceMetrics,
23 pub error_analysis: Option<ErrorAnalysis>,
25 pub analytics_results: AdvancedAnalyticsResults,
27 pub prediction_results: Option<MeasurementPredictionResults>,
29 pub optimization_recommendations: OptimizationRecommendations,
31 pub adaptive_insights: AdaptiveLearningInsights,
33}
34
35#[derive(Debug, Clone, Serialize, Deserialize)]
37pub struct MeasurementEvent {
38 pub timestamp: f64,
40 pub qubit: QubitId,
42 pub result: u8,
44 pub storage_location: StorageLocation,
46 pub latency: f64,
48 pub confidence: f64,
50}
51
52#[derive(Debug, Clone, Serialize, Deserialize)]
54pub enum StorageLocation {
55 ClassicalBit(usize),
57 ClassicalRegister(String, usize),
59 Buffer(usize),
61}
62
63#[derive(Debug, Clone, Serialize, Deserialize)]
65pub struct ExecutionStats {
66 pub total_execution_time: Duration,
68 pub quantum_time: Duration,
70 pub measurement_time: Duration,
72 pub classical_time: Duration,
74 pub num_measurements: usize,
76 pub num_conditional_ops: usize,
78 pub avg_measurement_latency: f64,
80 pub max_measurement_latency: f64,
82}
83
84#[derive(Debug, Clone, Serialize, Deserialize)]
86pub struct PerformanceMetrics {
87 pub measurement_success_rate: f64,
89 pub classical_efficiency: f64,
91 pub circuit_fidelity: f64,
93 pub measurement_error_rate: f64,
95 pub timing_overhead: f64,
97 pub resource_utilization: ResourceUtilization,
99}
100
101#[derive(Debug, Clone, Serialize, Deserialize)]
103pub struct ResourceUtilization {
104 pub quantum_utilization: f64,
106 pub classical_utilization: f64,
108 pub memory_usage: usize,
110 pub communication_overhead: f64,
112}
113
114#[derive(Debug, Clone, Serialize, Deserialize)]
116pub struct ErrorAnalysis {
117 pub measurement_errors: HashMap<QubitId, MeasurementErrorStats>,
119 pub classical_errors: Vec<ClassicalError>,
121 pub timing_violations: Vec<TimingViolation>,
123 pub error_correlations: Array2<f64>,
125}
126
127#[derive(Debug, Clone, Serialize, Deserialize)]
129pub struct MeasurementErrorStats {
130 pub readout_error_rate: f64,
132 pub spam_error: f64,
134 pub thermal_relaxation: f64,
136 pub dephasing: f64,
138}
139
140#[derive(Debug, Clone, Serialize, Deserialize)]
142pub struct ClassicalError {
143 pub error_type: ClassicalErrorType,
145 pub timestamp: f64,
147 pub description: String,
149 pub affected_operations: Vec<usize>,
151}
152
153#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
155pub enum ClassicalErrorType {
156 Timeout,
158 InvalidRegisterAccess,
160 ConditionEvaluationError,
162 BufferOverflow,
164 CommunicationError,
166}
167
168#[derive(Debug, Clone, Serialize, Deserialize)]
170pub struct TimingViolation {
171 pub operation_index: usize,
173 pub expected_timing: f64,
175 pub actual_timing: f64,
177 pub severity: f64,
179}
180
181#[derive(Debug, Clone, Serialize, Deserialize, Default)]
183pub struct AdvancedAnalyticsResults {
184 pub statistical_analysis: StatisticalAnalysisResults,
186 pub correlation_analysis: CorrelationAnalysisResults,
188 pub time_series_analysis: Option<TimeSeriesAnalysisResults>,
190 pub anomaly_detection: Option<AnomalyDetectionResults>,
192 pub distribution_analysis: DistributionAnalysisResults,
194 pub causal_analysis: Option<CausalAnalysisResults>,
196}
197
198#[derive(Debug, Clone, Serialize, Deserialize, Default)]
200pub struct StatisticalAnalysisResults {
201 pub descriptive_stats: DescriptiveStatistics,
203 pub hypothesis_tests: HypothesisTestResults,
205 pub confidence_intervals: ConfidenceIntervals,
207 pub effect_sizes: EffectSizeAnalysis,
209}
210
211#[derive(Debug, Clone, Serialize, Deserialize)]
213pub struct DescriptiveStatistics {
214 pub mean_latency: f64,
216 pub std_latency: f64,
218 pub median_latency: f64,
220 pub latency_percentiles: Vec<f64>,
222 pub success_rate_stats: MeasurementSuccessStats,
224 pub error_rate_distribution: ErrorRateDistribution,
226}
227
228#[derive(Debug, Clone, Serialize, Deserialize)]
230pub struct MeasurementSuccessStats {
231 pub overall_success_rate: f64,
233 pub per_qubit_success_rate: HashMap<QubitId, f64>,
235 pub temporal_success_rate: Vec<(f64, f64)>, pub success_rate_ci: (f64, f64),
239}
240
241#[derive(Debug, Clone, Serialize, Deserialize)]
243pub struct ErrorRateDistribution {
244 pub histogram: Vec<(f64, usize)>, pub best_fit_distribution: String,
248 pub distribution_parameters: Vec<f64>,
250 pub goodness_of_fit: f64,
252}
253
254#[derive(Debug, Clone, Serialize, Deserialize, Default)]
256pub struct HypothesisTestResults {
257 pub independence_tests: HashMap<String, StatisticalTest>,
259 pub stationarity_tests: HashMap<String, StatisticalTest>,
261 pub normality_tests: HashMap<String, StatisticalTest>,
263 pub comparison_tests: HashMap<String, ComparisonTest>,
265}
266
267#[derive(Debug, Clone, Serialize, Deserialize)]
269pub struct StatisticalTest {
270 pub statistic: f64,
272 pub p_value: f64,
274 pub critical_value: f64,
276 pub is_significant: bool,
278 pub effect_size: Option<f64>,
280}
281
282impl Default for StatisticalTest {
283 fn default() -> Self {
284 Self {
285 statistic: 0.0,
286 p_value: 0.1,
287 critical_value: 1.96,
288 is_significant: false,
289 effect_size: None,
290 }
291 }
292}
293
294#[derive(Debug, Clone, Serialize, Deserialize)]
296pub struct ComparisonTest {
297 pub test_type: String,
299 pub statistic: f64,
301 pub p_value: f64,
303 pub mean_difference: f64,
305 pub difference_ci: (f64, f64),
307 pub cohens_d: f64,
309}
310
311#[derive(Debug, Clone, Serialize, Deserialize)]
313pub struct ConfidenceIntervals {
314 pub confidence_level: f64,
316 pub mean_intervals: HashMap<String, (f64, f64)>,
318 pub bootstrap_intervals: HashMap<String, (f64, f64)>,
320 pub prediction_intervals: HashMap<String, (f64, f64)>,
322}
323
324#[derive(Debug, Clone, Serialize, Deserialize, Default)]
326pub struct EffectSizeAnalysis {
327 pub cohens_d: HashMap<String, f64>,
329 pub correlations: HashMap<String, f64>,
331 pub r_squared: HashMap<String, f64>,
333 pub practical_significance: HashMap<String, bool>,
335}
336
337#[derive(Debug, Clone, Serialize, Deserialize)]
339pub struct CorrelationAnalysisResults {
340 pub pearson_correlations: Array2<f64>,
342 pub spearman_correlations: Array2<f64>,
344 pub kendall_correlations: Array2<f64>,
346 pub significant_correlations: Vec<CorrelationPair>,
348 pub partial_correlations: Array2<f64>,
350 pub network_analysis: CorrelationNetworkAnalysis,
352}
353
354#[derive(Debug, Clone, Serialize, Deserialize)]
356pub struct CorrelationPair {
357 pub variable1: String,
359 pub variable2: String,
361 pub correlation: f64,
363 pub p_value: f64,
365 pub correlation_type: CorrelationType,
367}
368
369#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
371pub enum CorrelationType {
372 Pearson,
373 Spearman,
374 Kendall,
375 Partial,
376}
377
378#[derive(Debug, Clone, Serialize, Deserialize)]
380pub struct CorrelationNetworkAnalysis {
381 pub adjacency_matrix: Array2<f64>,
383 pub centrality_measures: NodeCentralityMeasures,
385 pub communities: Vec<Vec<usize>>,
387 pub network_density: f64,
389 pub clustering_coefficient: f64,
391}
392
393#[derive(Debug, Clone, Serialize, Deserialize, Default)]
395pub struct NodeCentralityMeasures {
396 pub betweenness: Vec<f64>,
398 pub closeness: Vec<f64>,
400 pub eigenvector: Vec<f64>,
402 pub degree: Vec<f64>,
404}
405
406#[derive(Debug, Clone, Serialize, Deserialize)]
408pub struct TimeSeriesAnalysisResults {
409 pub trend_analysis: TrendAnalysis,
411 pub seasonality_analysis: Option<SeasonalityAnalysis>,
413 pub autocorrelation: AutocorrelationAnalysis,
415 pub change_points: Vec<ChangePoint>,
417 pub stationarity: StationarityTestResults,
419}
420
421#[derive(Debug, Clone, Serialize, Deserialize)]
423pub struct TrendAnalysis {
424 pub trend_direction: TrendDirection,
426 pub trend_strength: f64,
428 pub trend_slope: f64,
430 pub trend_significance: f64,
432 pub trend_ci: (f64, f64),
434}
435
436#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
438pub enum TrendDirection {
439 Increasing,
440 Decreasing,
441 Stable,
442 Volatile,
443 Cyclical,
444}
445
446#[derive(Debug, Clone, Serialize, Deserialize)]
448pub struct SeasonalityAnalysis {
449 pub periods: Vec<usize>,
451 pub seasonal_strength: f64,
453 pub seasonal_components: Array1<f64>,
455 pub residual_components: Array1<f64>,
457}
458
459#[derive(Debug, Clone, Serialize, Deserialize)]
461pub struct AutocorrelationAnalysis {
462 pub acf: Array1<f64>,
464 pub pacf: Array1<f64>,
466 pub significant_lags: Vec<usize>,
468 pub ljung_box_statistic: f64,
470 pub ljung_box_p_value: f64,
472}
473
474#[derive(Debug, Clone, Serialize, Deserialize)]
476pub struct ChangePoint {
477 pub index: usize,
479 pub timestamp: f64,
481 pub confidence: f64,
483 pub magnitude: f64,
485 pub change_type: ChangePointType,
487}
488
489#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
491pub enum ChangePointType {
492 MeanShift,
493 VarianceChange,
494 TrendChange,
495 DistributionChange,
496}
497
498#[derive(Debug, Clone, Serialize, Deserialize)]
500pub struct StationarityTestResults {
501 pub adf_test: StatisticalTest,
503 pub kpss_test: StatisticalTest,
505 pub pp_test: StatisticalTest,
507 pub is_stationary: bool,
509}
510
511#[derive(Debug, Clone, Serialize, Deserialize)]
513pub struct AnomalyDetectionResults {
514 pub anomalies: Vec<AnomalyEvent>,
516 pub anomaly_scores: Array1<f64>,
518 pub thresholds: HashMap<String, f64>,
520 pub method_performance: AnomalyMethodPerformance,
522}
523
524#[derive(Debug, Clone, Serialize, Deserialize)]
526pub struct AnomalyEvent {
527 pub index: usize,
529 pub timestamp: f64,
531 pub anomaly_score: f64,
533 pub anomaly_type: AnomalyType,
535 pub affected_measurements: Vec<usize>,
537 pub severity: AnomalySeverity,
539}
540
541#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
543pub enum AnomalyType {
544 PointAnomaly,
545 ContextualAnomaly,
546 CollectiveAnomaly,
547 TrendAnomaly,
548 SeasonalAnomaly,
549}
550
551#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
553pub enum AnomalySeverity {
554 Low,
555 Medium,
556 High,
557 Critical,
558}
559
560#[derive(Debug, Clone, Serialize, Deserialize)]
562pub struct AnomalyMethodPerformance {
563 pub precision: HashMap<String, f64>,
565 pub recall: HashMap<String, f64>,
567 pub f1_scores: HashMap<String, f64>,
569 pub false_positive_rates: HashMap<String, f64>,
571}
572
573#[derive(Debug, Clone, Serialize, Deserialize, Default)]
575pub struct DistributionAnalysisResults {
576 pub best_fit_distributions: HashMap<String, DistributionFit>,
578 pub distribution_comparisons: Vec<DistributionComparison>,
580 pub mixture_models: Option<MixtureModelResults>,
582 pub normality_assessment: NormalityAssessment,
584}
585
586#[derive(Debug, Clone, Serialize, Deserialize)]
588pub struct DistributionFit {
589 pub distribution_name: String,
591 pub parameters: Vec<f64>,
593 pub log_likelihood: f64,
595 pub aic: f64,
597 pub bic: f64,
599 pub ks_statistic: f64,
601 pub ks_p_value: f64,
603}
604
605#[derive(Debug, Clone, Serialize, Deserialize)]
607pub struct DistributionComparison {
608 pub distribution1: String,
610 pub distribution2: String,
612 pub aic_difference: f64,
614 pub bic_difference: f64,
616 pub likelihood_ratio_test: StatisticalTest,
618 pub better_fit: String,
620}
621
622#[derive(Debug, Clone, Serialize, Deserialize)]
624pub struct MixtureModelResults {
625 pub n_components: usize,
627 pub weights: Array1<f64>,
629 pub component_parameters: Vec<Vec<f64>>,
631 pub log_likelihood: f64,
633 pub bic: f64,
635 pub assignments: Array1<usize>,
637}
638
639#[derive(Debug, Clone, Serialize, Deserialize)]
641pub struct NormalityAssessment {
642 pub shapiro_wilk: StatisticalTest,
644 pub anderson_darling: StatisticalTest,
646 pub jarque_bera: StatisticalTest,
648 pub is_normal: bool,
650 pub normality_confidence: f64,
652}
653
654#[derive(Debug, Clone, Serialize, Deserialize, Default)]
656pub struct CausalAnalysisResults {
657 pub causal_graph: CausalGraph,
659 pub causal_effects: Vec<CausalEffect>,
661 pub confounding_analysis: ConfoundingAnalysis,
663 pub causal_strength: HashMap<String, f64>,
665}
666
667#[derive(Debug, Clone, Serialize, Deserialize)]
669pub struct CausalGraph {
670 pub adjacency_matrix: Array2<f64>,
672 pub node_names: Vec<String>,
674 pub edge_weights: HashMap<(usize, usize), f64>,
676 pub graph_confidence: f64,
678}
679
680#[derive(Debug, Clone, Serialize, Deserialize)]
682pub struct CausalEffect {
683 pub cause: String,
685 pub effect: String,
687 pub effect_size: f64,
689 pub confidence_interval: (f64, f64),
691 pub p_value: f64,
693 pub mechanism: CausalMechanism,
695}
696
697#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
699pub enum CausalMechanism {
700 Direct,
701 Indirect,
702 Mediated,
703 Confounded,
704 Spurious,
705}
706
707#[derive(Debug, Clone, Serialize, Deserialize, Default)]
709pub struct ConfoundingAnalysis {
710 pub confounders: Vec<String>,
712 pub confounder_strength: HashMap<String, f64>,
714 pub backdoor_satisfied: bool,
716 pub frontdoor_satisfied: bool,
718}
719
720#[derive(Debug, Clone, Serialize, Deserialize)]
722pub struct MeasurementPredictionResults {
723 pub predictions: Array1<f64>,
725 pub confidence_intervals: Array2<f64>,
727 pub timestamps: Vec<f64>,
729 pub model_performance: PredictionModelPerformance,
731 pub uncertainty: PredictionUncertainty,
733}
734
735#[derive(Debug, Clone, Serialize, Deserialize)]
737pub struct PredictionModelPerformance {
738 pub mae: f64,
740 pub mse: f64,
742 pub rmse: f64,
744 pub mape: f64,
746 pub r2_score: f64,
748 pub accuracy: f64,
750}
751
752#[derive(Debug, Clone, Serialize, Deserialize)]
754pub struct PredictionUncertainty {
755 pub aleatoric_uncertainty: Array1<f64>,
757 pub epistemic_uncertainty: Array1<f64>,
759 pub total_uncertainty: Array1<f64>,
761 pub uncertainty_bounds: Array2<f64>,
763}
764
765#[derive(Debug, Clone, Serialize, Deserialize)]
767pub struct OptimizationRecommendations {
768 pub scheduling_optimizations: Vec<SchedulingOptimization>,
770 pub protocol_optimizations: Vec<ProtocolOptimization>,
772 pub resource_optimizations: Vec<ResourceOptimization>,
774 pub performance_improvements: Vec<PerformanceImprovement>,
776}
777
778#[derive(Debug, Clone, Serialize, Deserialize)]
780pub struct SchedulingOptimization {
781 pub optimization_type: SchedulingOptimizationType,
783 pub expected_improvement: f64,
785 pub difficulty: OptimizationDifficulty,
787 pub description: String,
789 pub implementation_steps: Vec<String>,
791}
792
793#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
795pub enum SchedulingOptimizationType {
796 MeasurementBatching,
797 TemporalReordering,
798 ParallelExecution,
799 ConditionalOptimization,
800 LatencyReduction,
801}
802
803#[derive(Debug, Clone, Serialize, Deserialize)]
805pub struct ProtocolOptimization {
806 pub protocol_type: String,
808 pub description: String,
810 pub expected_benefit: f64,
812 pub risk_level: RiskLevel,
814 pub validation_requirements: Vec<String>,
816}
817
818#[derive(Debug, Clone, Serialize, Deserialize)]
820pub struct ResourceOptimization {
821 pub resource_type: ResourceType,
823 pub current_utilization: f64,
825 pub optimal_utilization: f64,
827 pub strategy: String,
829 pub expected_savings: f64,
831}
832
833#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
835pub enum ResourceType {
836 QuantumProcessor,
837 ClassicalProcessor,
838 Memory,
839 NetworkBandwidth,
840 StorageCapacity,
841}
842
843#[derive(Debug, Clone, Serialize, Deserialize)]
845pub struct PerformanceImprovement {
846 pub area: PerformanceArea,
848 pub current_performance: f64,
850 pub target_performance: f64,
852 pub strategy: String,
854 pub priority: Priority,
856}
857
858#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
860pub enum PerformanceArea {
861 MeasurementLatency,
862 MeasurementAccuracy,
863 ThroughputRate,
864 ErrorRate,
865 ResourceEfficiency,
866}
867
868#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
870pub enum Priority {
871 Low,
872 Medium,
873 High,
874 Critical,
875}
876
877#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
879pub enum RiskLevel {
880 Low,
881 Medium,
882 High,
883 VeryHigh,
884}
885
886#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
888pub enum OptimizationDifficulty {
889 Easy,
890 Moderate,
891 Difficult,
892 VeryDifficult,
893}
894
895#[derive(Debug, Clone, Serialize, Deserialize)]
897pub struct AdaptiveLearningInsights {
898 pub learning_progress: LearningProgress,
900 pub adaptation_history: Vec<AdaptationEvent>,
902 pub performance_trends: PerformanceTrends,
904 pub drift_detection: DriftDetectionResults,
906 pub transfer_learning: TransferLearningInsights,
908}
909
910#[derive(Debug, Clone, Serialize, Deserialize)]
912pub struct LearningProgress {
913 pub iterations_completed: usize,
915 pub current_learning_rate: f64,
917 pub loss_history: Array1<f64>,
919 pub accuracy_history: Array1<f64>,
921 pub convergence_status: ConvergenceStatus,
923}
924
925#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
927pub enum ConvergenceStatus {
928 NotStarted,
929 InProgress,
930 Converged,
931 Diverged,
932 Plateaued,
933 Stuck,
934 Improving,
935 Diverging,
936 Oscillating,
937}
938
939#[derive(Debug, Clone, Serialize, Deserialize)]
941pub struct AdaptationEvent {
942 pub timestamp: SystemTime,
944 pub adaptation_type: AdaptationType,
946 pub trigger: String,
948 pub performance_before: f64,
950 pub performance_after: f64,
952 pub performance_snapshot: PerformanceMetrics,
954 pub adaptation_magnitude: f64,
956 pub success_indicator: f64,
958 pub success: bool,
960}
961
962#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
964pub enum AdaptationType {
965 ParameterTuning,
966 ArchitectureChange,
967 FeatureSelection,
968 HyperparameterOptimization,
969 ModelRetrained,
970 ThresholdAdjustment,
971 PerformanceOptimization,
972}
973
974#[derive(Debug, Clone, Serialize, Deserialize)]
976pub struct PerformanceTrends {
977 pub short_term_trend: TrendDirection,
979 pub long_term_trend: TrendDirection,
981 pub trend_strength: f64,
983 pub seasonal_patterns: Option<SeasonalityAnalysis>,
985 pub volatility: f64,
987}
988
989#[derive(Debug, Clone, Serialize, Deserialize)]
991pub struct DriftDetectionResults {
992 pub drift_detected: bool,
994 pub drift_type: Option<DriftType>,
996 pub drift_magnitude: f64,
998 pub detection_confidence: f64,
1000 pub recommended_actions: Vec<String>,
1002}
1003
1004#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1006pub enum DriftType {
1007 Gradual,
1008 Sudden,
1009 Incremental,
1010 Recurring,
1011 Virtual,
1012 PerformanceDegradation,
1013 QualityDrift,
1014 ConceptDrift,
1015}
1016
1017#[derive(Debug, Clone, Serialize, Deserialize)]
1019pub struct TransferLearningInsights {
1020 pub transfer_effectiveness: f64,
1022 pub domain_similarity: f64,
1024 pub feature_transferability: Array1<f64>,
1026 pub adaptation_requirements: Vec<String>,
1028 pub recommendations: Vec<String>,
1030}
1031
1032#[derive(Debug, Clone, Serialize, Deserialize)]
1034pub struct MidCircuitCapabilities {
1035 pub max_measurements: Option<usize>,
1037 pub supported_measurement_types: Vec<MeasurementType>,
1039 pub classical_register_capacity: usize,
1041 pub max_classical_processing_time: f64,
1043 pub realtime_feedback: bool,
1045 pub parallel_measurements: bool,
1047 pub native_protocols: Vec<String>,
1049 pub timing_constraints: TimingConstraints,
1051}
1052
1053#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1055pub enum MeasurementType {
1056 ZBasis,
1058 XBasis,
1060 YBasis,
1062 Pauli(String),
1064 Joint,
1066 NonDestructive,
1068}
1069
1070#[derive(Debug, Clone, Serialize, Deserialize)]
1072pub struct TimingConstraints {
1073 pub min_measurement_spacing: f64,
1075 pub max_measurement_duration: f64,
1077 pub classical_deadline: f64,
1079 pub coherence_limits: HashMap<QubitId, f64>,
1081}
1082
1083#[derive(Debug, Clone, Serialize, Deserialize)]
1087pub struct StatisticalAnomaly {
1088 pub index: usize,
1090 pub value: f64,
1092 pub z_score: f64,
1094 pub p_value: f64,
1096 pub metric_type: String,
1098 pub anomaly_severity: AnomalySeverity,
1100}
1101
1102#[derive(Debug, Clone, Serialize, Deserialize)]
1104pub struct TemporalAnomaly {
1105 pub start_index: usize,
1107 pub end_index: usize,
1109 pub change_point: usize,
1111 pub magnitude: f64,
1113 pub direction: ChangeDirection,
1115 pub confidence: f64,
1117}
1118
1119#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1121pub enum ChangeDirection {
1122 Increase,
1123 Decrease,
1124 Oscillation,
1125}
1126
1127#[derive(Debug, Clone, Serialize, Deserialize)]
1129pub struct PatternAnomaly {
1130 pub pattern_type: PatternType,
1132 pub description: String,
1134 pub severity: AnomalySeverity,
1136 pub affected_indices: Vec<usize>,
1138 pub confidence: f64,
1140}
1141
1142#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1144pub enum PatternType {
1145 CorrelationAnomaly,
1146 ConstantSequence,
1147 PeriodicityBreak,
1148 TrendReversal,
1149 VariabilityAnomaly,
1150}
1151
1152#[derive(Debug, Clone, Serialize, Deserialize)]
1154pub struct AnomalySummary {
1155 pub total_anomalies: usize,
1157 pub anomaly_rate: f64,
1159 pub severity_distribution: Vec<(String, usize)>,
1161 pub anomaly_types: Vec<String>,
1163 pub recommendations: Vec<String>,
1165}
1166
1167#[derive(Debug, Clone, Serialize, Deserialize)]
1169pub struct CausalRelationship {
1170 pub cause: String,
1172 pub effect: String,
1174 pub causal_strength: f64,
1176 pub causal_direction: CausalDirection,
1178 pub p_value: f64,
1180 pub confidence_interval: (f64, f64),
1182 pub mechanism: CausalMechanism,
1184}
1185
1186#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1188pub enum CausalDirection {
1189 Forward,
1190 Backward,
1191 Bidirectional,
1192 None,
1193}
1194
1195#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1197pub enum EdgeType {
1198 Directed,
1199 Undirected,
1200 Bidirected,
1201}
1202
1203#[derive(Debug, Clone, Serialize, Deserialize)]
1205pub struct InterventionAnalysis {
1206 pub intervention_type: String,
1208 pub target_variable: String,
1210 pub intervention_magnitude: f64,
1212 pub predicted_effects: Vec<PredictedEffect>,
1214 pub intervention_cost: f64,
1216 pub benefit_ratio: f64,
1218}
1219
1220#[derive(Debug, Clone, Serialize, Deserialize)]
1222pub struct PredictedEffect {
1223 pub variable: String,
1225 pub effect_size: f64,
1227 pub confidence_interval: (f64, f64),
1229 pub p_value: f64,
1231}
1232
1233#[derive(Debug, Clone, Serialize, Deserialize)]
1235pub struct ConfoundingAssessment {
1236 pub confounders: Vec<ConfoundingVariable>,
1238 pub overall_confounding_risk: String,
1240 pub recommendations: Vec<String>,
1242}
1243
1244#[derive(Debug, Clone, Serialize, Deserialize)]
1246pub struct ConfoundingVariable {
1247 pub variable: String,
1249 pub confounding_strength: f64,
1251 pub adjustment_method: String,
1253 pub p_value: f64,
1255}
1256
1257#[derive(Debug, Clone, Serialize, Deserialize)]
1259pub struct PredictionModel {
1260 pub model_type: String,
1262 pub coefficients: Vec<f64>,
1264 pub feature_names: Vec<String>,
1266 pub training_accuracy: f64,
1268 pub validation_accuracy: f64,
1270 pub last_trained: SystemTime,
1272 pub hyperparameters: Vec<(String, f64)>,
1274}
1275
1276impl Default for PredictionModel {
1277 fn default() -> Self {
1278 Self {
1279 model_type: "linear".to_string(),
1280 coefficients: vec![],
1281 feature_names: vec![],
1282 training_accuracy: 0.0,
1283 validation_accuracy: 0.0,
1284 last_trained: SystemTime::now(),
1285 hyperparameters: vec![],
1286 }
1287 }
1288}
1289
1290#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1292pub struct MLFeatures {
1293 pub statistical_features: StatisticalFeatures,
1295 pub temporal_features: TemporalFeatures,
1297 pub pattern_features: PatternFeatures,
1299 pub feature_importance: Vec<FeatureImportance>,
1301}
1302
1303#[derive(Debug, Clone, Serialize, Deserialize)]
1305pub struct StatisticalFeatures {
1306 pub mean_latency: f64,
1308 pub std_latency: f64,
1310 pub mean_confidence: f64,
1312 pub std_confidence: f64,
1314 pub skewness_latency: f64,
1316 pub kurtosis_latency: f64,
1318}
1319
1320impl Default for StatisticalFeatures {
1321 fn default() -> Self {
1322 Self {
1323 mean_latency: 0.0,
1324 std_latency: 0.0,
1325 mean_confidence: 0.0,
1326 std_confidence: 0.0,
1327 skewness_latency: 0.0,
1328 kurtosis_latency: 0.0,
1329 }
1330 }
1331}
1332
1333#[derive(Debug, Clone, Serialize, Deserialize)]
1335pub struct TemporalFeatures {
1336 pub measurement_rate: f64,
1338 pub temporal_autocorrelation: f64,
1340 pub trend_slope: f64,
1342 pub periodicity_strength: f64,
1344}
1345
1346impl Default for TemporalFeatures {
1347 fn default() -> Self {
1348 Self {
1349 measurement_rate: 0.0,
1350 temporal_autocorrelation: 0.0,
1351 trend_slope: 0.0,
1352 periodicity_strength: 0.0,
1353 }
1354 }
1355}
1356
1357#[derive(Debug, Clone, Serialize, Deserialize)]
1359pub struct PatternFeatures {
1360 pub latency_confidence_correlation: f64,
1362 pub measurement_consistency: f64,
1364 pub outlier_ratio: f64,
1366 pub pattern_complexity: f64,
1368}
1369
1370impl Default for PatternFeatures {
1371 fn default() -> Self {
1372 Self {
1373 latency_confidence_correlation: 0.0,
1374 measurement_consistency: 0.0,
1375 outlier_ratio: 0.0,
1376 pattern_complexity: 0.0,
1377 }
1378 }
1379}
1380
1381#[derive(Debug, Clone, Serialize, Deserialize)]
1383pub struct FeatureImportance {
1384 pub feature_name: String,
1386 pub importance: f64,
1388}
1389
1390#[derive(Debug, Clone, Serialize, Deserialize)]
1392pub struct TrainingEpoch {
1393 pub epoch_number: usize,
1395 pub features: MLFeatures,
1397 pub target_metrics: PerformanceMetrics,
1399 pub training_loss: f64,
1401 pub validation_loss: f64,
1403 pub learning_rate: f64,
1405}
1406
1407#[derive(Debug, Clone, Serialize, Deserialize)]
1409pub struct ModelPerformance {
1410 pub training_accuracy: f64,
1412 pub validation_accuracy: f64,
1414 pub cross_validation_score: f64,
1416 pub overfitting_score: f64,
1418}
1419
1420#[derive(Debug, Clone, Serialize, Deserialize)]
1422pub struct OptimizationModel {
1423 pub model_type: String,
1425 pub parameters: Vec<f64>,
1427 pub training_features: MLFeatures,
1429 pub model_performance: ModelPerformance,
1431 pub last_updated: SystemTime,
1433}
1434
1435#[derive(Debug, Clone, Serialize, Deserialize)]
1437pub struct PerformanceImprovements {
1438 pub latency_reduction: f64,
1440 pub confidence_increase: f64,
1442 pub throughput_increase: f64,
1444 pub error_rate_reduction: f64,
1446 pub overall_score_improvement: f64,
1448}
1449
1450impl Default for PerformanceImprovements {
1451 fn default() -> Self {
1452 Self {
1453 latency_reduction: 0.0,
1454 confidence_increase: 0.0,
1455 throughput_increase: 0.0,
1456 error_rate_reduction: 0.0,
1457 overall_score_improvement: 0.0,
1458 }
1459 }
1460}
1461
1462#[derive(Debug, Clone, Serialize, Deserialize)]
1464pub struct OptimizationRecommendation {
1465 pub parameter: String,
1467 pub current_value: f64,
1469 pub recommended_value: f64,
1471 pub expected_improvement: f64,
1473 pub confidence: f64,
1475 pub rationale: String,
1477}
1478
1479#[derive(Debug, Clone, Serialize, Deserialize)]
1481pub struct OptimizationResult {
1482 pub recommendations: Vec<OptimizationRecommendation>,
1484 pub predicted_improvements: PerformanceImprovements,
1486 pub confidence: f64,
1488 pub model_version: String,
1490}
1491
1492impl Default for OptimizationResult {
1493 fn default() -> Self {
1494 Self {
1495 recommendations: vec![],
1496 predicted_improvements: PerformanceImprovements::default(),
1497 confidence: 0.5,
1498 model_version: "1.0".to_string(),
1499 }
1500 }
1501}