use super::types::*;
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PerturbationTestResult {
pub timestamp: DateTime<Utc>,
pub base_input: HashMap<String, f64>,
pub results_by_intensity: HashMap<String, PerturbationIntensityResult>,
pub robustness_assessment: RobustnessAssessment,
pub sensitivity_hotspots: Vec<SensitivityHotspot>,
pub failure_modes: FailureModesAnalysis,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PerturbationIntensityResult {
pub intensity: f64,
pub num_perturbations: usize,
pub successful_perturbations: usize,
pub failed_perturbations: usize,
pub avg_prediction_change: f64,
pub max_prediction_change: f64,
pub std_prediction_change: f64,
pub perturbation_details: Vec<PerturbationDetail>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PerturbationDetail {
pub id: String,
pub original_input: HashMap<String, f64>,
pub perturbed_input: HashMap<String, f64>,
pub original_prediction: f64,
pub perturbed_prediction: f64,
pub prediction_change: f64,
pub perturbation_vector: HashMap<String, f64>,
pub perturbation_magnitude: f64,
pub is_successful: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RobustnessAssessment {
pub robustness_score: f64,
pub robustness_class: RobustnessClass,
pub feature_robustness: HashMap<String, f64>,
pub critical_threshold: f64,
pub improvement_recommendations: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SensitivityHotspot {
pub location: HashMap<String, f64>,
pub sensitivity_score: f64,
pub sensitivity_radius: f64,
pub sensitive_features: Vec<String>,
pub hotspot_type: HotspotType,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FailureModesAnalysis {
pub failure_modes: Vec<FailureMode>,
pub failure_frequency: FailureFrequencyAnalysis,
pub failure_severity: FailureSeverityAnalysis,
pub mitigation_strategies: Vec<MitigationStrategy>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FailureMode {
pub id: String,
pub description: String,
pub triggering_conditions: Vec<TriggeringCondition>,
pub severity: FailureSeverity,
pub frequency: f64,
pub example_inputs: Vec<HashMap<String, f64>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TriggeringCondition {
pub feature: String,
pub condition_type: ConditionType,
pub threshold: f64,
pub description: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FailureFrequencyAnalysis {
pub overall_failure_rate: f64,
pub failure_rate_by_intensity: HashMap<String, f64>,
pub failure_rate_by_feature: HashMap<String, f64>,
pub time_to_failure: TimeToFailureAnalysis,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TimeToFailureAnalysis {
pub avg_time_to_failure: f64,
pub median_time_to_failure: f64,
pub distribution_parameters: HashMap<String, f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FailureSeverityAnalysis {
pub avg_severity: f64,
pub severity_distribution: HashMap<FailureSeverity, usize>,
pub most_severe_modes: Vec<String>,
pub cascading_failures: CascadingFailureAnalysis,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CascadingFailureAnalysis {
pub cascading_events: usize,
pub avg_cascade_length: f64,
pub cascade_triggers: Vec<String>,
pub amplification_factors: HashMap<String, f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MitigationStrategy {
pub name: String,
pub description: String,
pub target_failure_modes: Vec<String>,
pub effectiveness: f64,
pub implementation_cost: ImplementationCost,
pub implementation_steps: Vec<String>,
}