use super::*;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SciRS2MappingResult {
pub initial_mapping: HashMap<usize, usize>,
pub final_mapping: HashMap<usize, usize>,
pub swap_operations: Vec<SwapOperation>,
pub graph_analysis: GraphAnalysisResult,
pub spectral_analysis: Option<SpectralAnalysisResult>,
pub community_analysis: CommunityAnalysisResult,
pub centrality_analysis: CentralityAnalysisResult,
pub optimization_metrics: OptimizationMetrics,
pub performance_predictions: Option<PerformancePredictions>,
pub realtime_analytics: RealtimeAnalyticsResult,
pub ml_performance: Option<MLPerformanceResult>,
pub adaptive_insights: AdaptiveMappingInsights,
pub optimization_recommendations: OptimizationRecommendations,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GraphAnalysisResult {
pub density: f64,
pub clustering_coefficient: f64,
pub diameter: usize,
pub radius: usize,
pub average_path_length: f64,
pub connectivity_stats: ConnectivityStats,
pub topological_properties: TopologicalProperties,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SpectralAnalysisResult {
pub laplacian_eigenvalues: Array1<f64>,
pub embedding_vectors: Array2<f64>,
pub spectral_radius: f64,
pub algebraic_connectivity: f64,
pub spectral_gap: f64,
pub embedding_quality: EmbeddingQuality,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CommunityAnalysisResult {
pub communities: HashMap<usize, usize>,
pub modularity: f64,
pub num_communities: usize,
pub community_sizes: Vec<usize>,
pub inter_community_edges: usize,
pub quality_metrics: CommunityQualityMetrics,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CentralityAnalysisResult {
pub betweenness_centrality: HashMap<usize, f64>,
pub closeness_centrality: HashMap<usize, f64>,
pub eigenvector_centrality: HashMap<usize, f64>,
pub pagerank_centrality: HashMap<usize, f64>,
pub centrality_correlations: Array2<f64>,
pub centrality_statistics: CentralityStatistics,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ConnectivityStats {
pub edge_connectivity: usize,
pub vertex_connectivity: usize,
pub algebraic_connectivity: f64,
pub is_connected: bool,
pub num_components: usize,
pub largest_component_size: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TopologicalProperties {
pub is_planar: bool,
pub is_bipartite: bool,
pub is_tree: bool,
pub is_forest: bool,
pub has_cycles: bool,
pub girth: usize,
pub chromatic_number: usize,
pub independence_number: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EmbeddingQuality {
pub stress: f64,
pub distortion: f64,
pub preservation_ratio: f64,
pub embedding_dimension: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CommunityQualityMetrics {
pub silhouette_score: f64,
pub conductance: f64,
pub coverage: f64,
pub performance: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CentralityStatistics {
pub max_betweenness: f64,
pub max_closeness: f64,
pub max_eigenvector: f64,
pub max_pagerank: f64,
pub mean_betweenness: f64,
pub mean_closeness: f64,
pub mean_eigenvector: f64,
pub mean_pagerank: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PathAnalysisResult {
pub distance_matrix: Array2<f64>,
pub efficiency_measures: EfficiencyMeasures,
pub routing_quality: RoutingQualityMetrics,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EfficiencyMeasures {
pub global_efficiency: f64,
pub local_efficiency: f64,
pub average_efficiency: f64,
pub efficiency_distribution: Vec<f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RoutingQualityMetrics {
pub average_path_length: f64,
pub path_length_distribution: HashMap<usize, usize>,
pub routing_overhead: f64,
pub load_balancing_index: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FlowAnalysisResult {
pub max_flows: HashMap<(usize, usize), f64>,
pub min_cuts: Vec<MinCutResult>,
pub bottlenecks: Vec<BottleneckInfo>,
pub flow_metrics: FlowMetrics,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MinCutResult {
pub source_sink: (usize, usize),
pub cut_value: f64,
pub cut_edges: Vec<(usize, usize)>,
pub partition: (Vec<usize>, Vec<usize>),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BottleneckInfo {
pub location: BottleneckLocation,
pub severity: f64,
pub flow_impact: f64,
pub improvement_suggestions: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum BottleneckLocation {
Edge(usize, usize),
Node(usize),
Region(Vec<usize>),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FlowMetrics {
pub total_capacity: f64,
pub utilized_capacity: f64,
pub utilization_efficiency: f64,
pub flow_entropy: f64,
}