Skip to main content

trustformers_debug/simulation_tools/
perturbation_testing.rs

1//! Perturbation Testing and Robustness Assessment
2//!
3//! This module provides comprehensive perturbation testing capabilities including
4//! robustness assessment, sensitivity hotspot identification, and failure mode analysis.
5
6use super::types::*;
7use chrono::{DateTime, Utc};
8use serde::{Deserialize, Serialize};
9use std::collections::HashMap;
10
11/// Perturbation testing result
12#[derive(Debug, Clone, Serialize, Deserialize)]
13pub struct PerturbationTestResult {
14    /// Analysis timestamp
15    pub timestamp: DateTime<Utc>,
16    /// Base input
17    pub base_input: HashMap<String, f64>,
18    /// Perturbation test results by intensity
19    pub results_by_intensity: HashMap<String, PerturbationIntensityResult>,
20    /// Overall robustness assessment
21    pub robustness_assessment: RobustnessAssessment,
22    /// Sensitivity hotspots
23    pub sensitivity_hotspots: Vec<SensitivityHotspot>,
24    /// Failure modes analysis
25    pub failure_modes: FailureModesAnalysis,
26}
27
28/// Perturbation test results for a specific intensity level
29#[derive(Debug, Clone, Serialize, Deserialize)]
30pub struct PerturbationIntensityResult {
31    /// Perturbation intensity
32    pub intensity: f64,
33    /// Number of perturbations tested
34    pub num_perturbations: usize,
35    /// Successful perturbations (model behavior unchanged)
36    pub successful_perturbations: usize,
37    /// Failed perturbations (significant behavior change)
38    pub failed_perturbations: usize,
39    /// Average prediction change
40    pub avg_prediction_change: f64,
41    /// Maximum prediction change
42    pub max_prediction_change: f64,
43    /// Standard deviation of prediction changes
44    pub std_prediction_change: f64,
45    /// Detailed perturbation results
46    pub perturbation_details: Vec<PerturbationDetail>,
47}
48
49/// Detailed result for a single perturbation
50#[derive(Debug, Clone, Serialize, Deserialize)]
51pub struct PerturbationDetail {
52    /// Perturbation ID
53    pub id: String,
54    /// Original input
55    pub original_input: HashMap<String, f64>,
56    /// Perturbed input
57    pub perturbed_input: HashMap<String, f64>,
58    /// Original prediction
59    pub original_prediction: f64,
60    /// Perturbed prediction
61    pub perturbed_prediction: f64,
62    /// Prediction change
63    pub prediction_change: f64,
64    /// Perturbation vector
65    pub perturbation_vector: HashMap<String, f64>,
66    /// Perturbation magnitude
67    pub perturbation_magnitude: f64,
68    /// Success/failure classification
69    pub is_successful: bool,
70}
71
72/// Overall robustness assessment
73#[derive(Debug, Clone, Serialize, Deserialize)]
74pub struct RobustnessAssessment {
75    /// Overall robustness score (0-1)
76    pub robustness_score: f64,
77    /// Robustness classification
78    pub robustness_class: RobustnessClass,
79    /// Robustness by feature
80    pub feature_robustness: HashMap<String, f64>,
81    /// Critical intensity threshold
82    pub critical_threshold: f64,
83    /// Recommendations for improvement
84    pub improvement_recommendations: Vec<String>,
85}
86
87/// Sensitivity hotspot identification
88#[derive(Debug, Clone, Serialize, Deserialize)]
89pub struct SensitivityHotspot {
90    /// Hotspot location in feature space
91    pub location: HashMap<String, f64>,
92    /// Sensitivity score
93    pub sensitivity_score: f64,
94    /// Radius of sensitivity
95    pub sensitivity_radius: f64,
96    /// Primary sensitive features
97    pub sensitive_features: Vec<String>,
98    /// Hotspot type
99    pub hotspot_type: HotspotType,
100}
101
102/// Analysis of model failure modes
103#[derive(Debug, Clone, Serialize, Deserialize)]
104pub struct FailureModesAnalysis {
105    /// Identified failure modes
106    pub failure_modes: Vec<FailureMode>,
107    /// Failure frequency analysis
108    pub failure_frequency: FailureFrequencyAnalysis,
109    /// Failure severity analysis
110    pub failure_severity: FailureSeverityAnalysis,
111    /// Failure mitigation strategies
112    pub mitigation_strategies: Vec<MitigationStrategy>,
113}
114
115/// Individual failure mode
116#[derive(Debug, Clone, Serialize, Deserialize)]
117pub struct FailureMode {
118    /// Failure mode ID
119    pub id: String,
120    /// Description of the failure
121    pub description: String,
122    /// Triggering conditions
123    pub triggering_conditions: Vec<TriggeringCondition>,
124    /// Failure severity
125    pub severity: FailureSeverity,
126    /// Frequency of occurrence
127    pub frequency: f64,
128    /// Example failing inputs
129    pub example_inputs: Vec<HashMap<String, f64>>,
130}
131
132/// Condition that triggers a failure
133#[derive(Debug, Clone, Serialize, Deserialize)]
134pub struct TriggeringCondition {
135    /// Feature involved
136    pub feature: String,
137    /// Condition type
138    pub condition_type: ConditionType,
139    /// Threshold value
140    pub threshold: f64,
141    /// Condition description
142    pub description: String,
143}
144
145/// Analysis of failure frequency
146#[derive(Debug, Clone, Serialize, Deserialize)]
147pub struct FailureFrequencyAnalysis {
148    /// Overall failure rate
149    pub overall_failure_rate: f64,
150    /// Failure rate by intensity
151    pub failure_rate_by_intensity: HashMap<String, f64>,
152    /// Failure rate by feature
153    pub failure_rate_by_feature: HashMap<String, f64>,
154    /// Time-to-failure analysis
155    pub time_to_failure: TimeToFailureAnalysis,
156}
157
158/// Analysis of time to failure
159#[derive(Debug, Clone, Serialize, Deserialize)]
160pub struct TimeToFailureAnalysis {
161    /// Average time to failure
162    pub avg_time_to_failure: f64,
163    /// Median time to failure
164    pub median_time_to_failure: f64,
165    /// Time to failure distribution
166    pub distribution_parameters: HashMap<String, f64>,
167}
168
169/// Analysis of failure severity
170#[derive(Debug, Clone, Serialize, Deserialize)]
171pub struct FailureSeverityAnalysis {
172    /// Average failure severity
173    pub avg_severity: f64,
174    /// Severity distribution
175    pub severity_distribution: HashMap<FailureSeverity, usize>,
176    /// Most severe failure modes
177    pub most_severe_modes: Vec<String>,
178    /// Cascading failure analysis
179    pub cascading_failures: CascadingFailureAnalysis,
180}
181
182/// Analysis of cascading failures
183#[derive(Debug, Clone, Serialize, Deserialize)]
184pub struct CascadingFailureAnalysis {
185    /// Number of cascading events
186    pub cascading_events: usize,
187    /// Average cascade length
188    pub avg_cascade_length: f64,
189    /// Cascade triggers
190    pub cascade_triggers: Vec<String>,
191    /// Cascade amplification factors
192    pub amplification_factors: HashMap<String, f64>,
193}
194
195/// Strategy for mitigating failures
196#[derive(Debug, Clone, Serialize, Deserialize)]
197pub struct MitigationStrategy {
198    /// Strategy name
199    pub name: String,
200    /// Strategy description
201    pub description: String,
202    /// Target failure modes
203    pub target_failure_modes: Vec<String>,
204    /// Expected effectiveness
205    pub effectiveness: f64,
206    /// Implementation cost
207    pub implementation_cost: ImplementationCost,
208    /// Implementation steps
209    pub implementation_steps: Vec<String>,
210}