use super::config::TimeSeriesAnomalyType;
use scirs2_core::ndarray::{Array1, Array2};
use std::collections::HashMap;
#[derive(Debug, Clone)]
pub struct AnomalyResult {
pub anomaly_scores: Array1<f64>,
pub anomaly_labels: Array1<i32>,
pub confidence_scores: Array1<f64>,
pub feature_importance: Array2<f64>,
pub method_results: HashMap<String, MethodSpecificResult>,
pub metrics: AnomalyMetrics,
pub processing_stats: ProcessingStats,
}
#[derive(Debug, Clone)]
pub enum MethodSpecificResult {
IsolationForest {
path_lengths: Array1<f64>,
tree_depths: Array1<f64>,
},
Autoencoder {
reconstruction_errors: Array1<f64>,
latent_representations: Array2<f64>,
},
OneClassSVM {
support_vectors: Array2<f64>,
decision_function: Array1<f64>,
},
Clustering {
cluster_assignments: Array1<usize>,
cluster_distances: Array1<f64>,
},
LOF {
local_outlier_factors: Array1<f64>,
reachability_distances: Array1<f64>,
},
DBSCAN {
cluster_labels: Array1<i32>,
core_sample_indices: Vec<usize>,
},
}
#[derive(Debug, Clone)]
pub struct AnomalyMetrics {
pub auc_roc: f64,
pub auc_pr: f64,
pub precision: f64,
pub recall: f64,
pub f1_score: f64,
pub false_positive_rate: f64,
pub false_negative_rate: f64,
pub mcc: f64,
pub balanced_accuracy: f64,
pub quantum_metrics: QuantumAnomalyMetrics,
}
#[derive(Debug, Clone)]
pub struct QuantumAnomalyMetrics {
pub quantum_advantage: f64,
pub entanglement_utilization: f64,
pub circuit_efficiency: f64,
pub quantum_error_rate: f64,
pub coherence_utilization: f64,
}
#[derive(Debug, Clone)]
pub struct ProcessingStats {
pub total_time: f64,
pub quantum_time: f64,
pub classical_time: f64,
pub memory_usage: f64,
pub quantum_executions: usize,
pub avg_circuit_depth: f64,
}
#[derive(Debug, Clone)]
pub struct TimeSeriesAnomalyPoint {
pub timestamp: usize,
pub score: f64,
pub anomaly_type: TimeSeriesAnomalyType,
pub seasonal_context: Option<super::config::SeasonalContext>,
pub trend_context: Option<super::config::TrendContext>,
}
#[derive(Debug, Clone)]
pub struct TrainingStats {
pub training_time: f64,
pub n_training_samples: usize,
pub feature_stats: Array2<f64>,
pub circuit_stats: CircuitStats,
}
#[derive(Debug, Clone)]
pub struct CircuitStats {
pub avg_depth: f64,
pub avg_gates: f64,
pub avg_execution_time: f64,
pub success_rate: f64,
}