use super::types::*;
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EdgeCaseDiscoveryResult {
pub timestamp: DateTime<Utc>,
pub edge_cases: Vec<EdgeCase>,
pub classification: EdgeCaseClassification,
pub coverage_analysis: CoverageAnalysis,
pub risk_assessment: EdgeCaseRiskAssessment,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EdgeCase {
pub id: String,
pub description: String,
pub trigger_input: HashMap<String, f64>,
pub model_output: f64,
pub expected_output: Option<f64>,
pub edge_case_type: EdgeCaseType,
pub severity: EdgeCaseSeverity,
pub likelihood: f64,
pub detection_method: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EdgeCaseClassification {
pub by_type: HashMap<EdgeCaseType, usize>,
pub by_severity: HashMap<EdgeCaseSeverity, usize>,
pub common_patterns: Vec<EdgeCasePattern>,
pub systematic_issues: Vec<SystematicIssue>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EdgeCasePattern {
pub pattern: String,
pub frequency: usize,
pub involved_features: Vec<String>,
pub pattern_severity: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SystematicIssue {
pub issue: String,
pub affected_regions: Vec<String>,
pub impact: SystematicIssueImpact,
pub recommended_fixes: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CoverageAnalysis {
pub feature_space_coverage: f64,
pub boundary_coverage: f64,
pub uncovered_regions: Vec<UncoveredRegion>,
pub coverage_gaps: Vec<CoverageGap>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UncoveredRegion {
pub region: String,
pub boundaries: HashMap<String, (f64, f64)>,
pub risk_level: f64,
pub coverage_reason: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CoverageGap {
pub gap: String,
pub location: HashMap<String, f64>,
pub size: f64,
pub potential_edge_cases: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EdgeCaseRiskAssessment {
pub overall_risk: f64,
pub risk_by_type: HashMap<EdgeCaseType, f64>,
pub high_risk_cases: Vec<String>,
pub mitigation_priorities: Vec<RiskMitigationPriority>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RiskMitigationPriority {
pub priority: usize,
pub edge_cases: Vec<String>,
pub actions: Vec<String>,
pub risk_reduction: f64,
}