trustformers_debug/simulation_tools/
perturbation_testing.rs1use super::types::*;
7use chrono::{DateTime, Utc};
8use serde::{Deserialize, Serialize};
9use std::collections::HashMap;
10
11#[derive(Debug, Clone, Serialize, Deserialize)]
13pub struct PerturbationTestResult {
14 pub timestamp: DateTime<Utc>,
16 pub base_input: HashMap<String, f64>,
18 pub results_by_intensity: HashMap<String, PerturbationIntensityResult>,
20 pub robustness_assessment: RobustnessAssessment,
22 pub sensitivity_hotspots: Vec<SensitivityHotspot>,
24 pub failure_modes: FailureModesAnalysis,
26}
27
28#[derive(Debug, Clone, Serialize, Deserialize)]
30pub struct PerturbationIntensityResult {
31 pub intensity: f64,
33 pub num_perturbations: usize,
35 pub successful_perturbations: usize,
37 pub failed_perturbations: usize,
39 pub avg_prediction_change: f64,
41 pub max_prediction_change: f64,
43 pub std_prediction_change: f64,
45 pub perturbation_details: Vec<PerturbationDetail>,
47}
48
49#[derive(Debug, Clone, Serialize, Deserialize)]
51pub struct PerturbationDetail {
52 pub id: String,
54 pub original_input: HashMap<String, f64>,
56 pub perturbed_input: HashMap<String, f64>,
58 pub original_prediction: f64,
60 pub perturbed_prediction: f64,
62 pub prediction_change: f64,
64 pub perturbation_vector: HashMap<String, f64>,
66 pub perturbation_magnitude: f64,
68 pub is_successful: bool,
70}
71
72#[derive(Debug, Clone, Serialize, Deserialize)]
74pub struct RobustnessAssessment {
75 pub robustness_score: f64,
77 pub robustness_class: RobustnessClass,
79 pub feature_robustness: HashMap<String, f64>,
81 pub critical_threshold: f64,
83 pub improvement_recommendations: Vec<String>,
85}
86
87#[derive(Debug, Clone, Serialize, Deserialize)]
89pub struct SensitivityHotspot {
90 pub location: HashMap<String, f64>,
92 pub sensitivity_score: f64,
94 pub sensitivity_radius: f64,
96 pub sensitive_features: Vec<String>,
98 pub hotspot_type: HotspotType,
100}
101
102#[derive(Debug, Clone, Serialize, Deserialize)]
104pub struct FailureModesAnalysis {
105 pub failure_modes: Vec<FailureMode>,
107 pub failure_frequency: FailureFrequencyAnalysis,
109 pub failure_severity: FailureSeverityAnalysis,
111 pub mitigation_strategies: Vec<MitigationStrategy>,
113}
114
115#[derive(Debug, Clone, Serialize, Deserialize)]
117pub struct FailureMode {
118 pub id: String,
120 pub description: String,
122 pub triggering_conditions: Vec<TriggeringCondition>,
124 pub severity: FailureSeverity,
126 pub frequency: f64,
128 pub example_inputs: Vec<HashMap<String, f64>>,
130}
131
132#[derive(Debug, Clone, Serialize, Deserialize)]
134pub struct TriggeringCondition {
135 pub feature: String,
137 pub condition_type: ConditionType,
139 pub threshold: f64,
141 pub description: String,
143}
144
145#[derive(Debug, Clone, Serialize, Deserialize)]
147pub struct FailureFrequencyAnalysis {
148 pub overall_failure_rate: f64,
150 pub failure_rate_by_intensity: HashMap<String, f64>,
152 pub failure_rate_by_feature: HashMap<String, f64>,
154 pub time_to_failure: TimeToFailureAnalysis,
156}
157
158#[derive(Debug, Clone, Serialize, Deserialize)]
160pub struct TimeToFailureAnalysis {
161 pub avg_time_to_failure: f64,
163 pub median_time_to_failure: f64,
165 pub distribution_parameters: HashMap<String, f64>,
167}
168
169#[derive(Debug, Clone, Serialize, Deserialize)]
171pub struct FailureSeverityAnalysis {
172 pub avg_severity: f64,
174 pub severity_distribution: HashMap<FailureSeverity, usize>,
176 pub most_severe_modes: Vec<String>,
178 pub cascading_failures: CascadingFailureAnalysis,
180}
181
182#[derive(Debug, Clone, Serialize, Deserialize)]
184pub struct CascadingFailureAnalysis {
185 pub cascading_events: usize,
187 pub avg_cascade_length: f64,
189 pub cascade_triggers: Vec<String>,
191 pub amplification_factors: HashMap<String, f64>,
193}
194
195#[derive(Debug, Clone, Serialize, Deserialize)]
197pub struct MitigationStrategy {
198 pub name: String,
200 pub description: String,
202 pub target_failure_modes: Vec<String>,
204 pub effectiveness: f64,
206 pub implementation_cost: ImplementationCost,
208 pub implementation_steps: Vec<String>,
210}