quantrs2_device/mapping_scirs2/
graph_analysis.rs

1//! Graph analysis components and result types
2
3use super::*;
4
5/// Comprehensive mapping result with SciRS2 analysis
6#[derive(Debug, Clone, Serialize, Deserialize)]
7pub struct SciRS2MappingResult {
8    /// Initial logical-to-physical mapping
9    pub initial_mapping: HashMap<usize, usize>,
10    /// Final mapping after optimization
11    pub final_mapping: HashMap<usize, usize>,
12    /// Sequence of swap operations
13    pub swap_operations: Vec<SwapOperation>,
14    /// Graph analysis results
15    pub graph_analysis: GraphAnalysisResult,
16    /// Spectral analysis results
17    pub spectral_analysis: Option<SpectralAnalysisResult>,
18    /// Community structure analysis
19    pub community_analysis: CommunityAnalysisResult,
20    /// Centrality analysis
21    pub centrality_analysis: CentralityAnalysisResult,
22    /// Optimization metrics
23    pub optimization_metrics: OptimizationMetrics,
24    /// Performance predictions
25    pub performance_predictions: Option<PerformancePredictions>,
26    /// Real-time analytics results
27    pub realtime_analytics: RealtimeAnalyticsResult,
28    /// ML model performance
29    pub ml_performance: Option<MLPerformanceResult>,
30    /// Adaptive learning insights
31    pub adaptive_insights: AdaptiveMappingInsights,
32    /// Optimization recommendations
33    pub optimization_recommendations: OptimizationRecommendations,
34}
35
36/// Graph analysis results
37#[derive(Debug, Clone, Serialize, Deserialize)]
38pub struct GraphAnalysisResult {
39    /// Graph density
40    pub density: f64,
41    /// Average clustering coefficient
42    pub clustering_coefficient: f64,
43    /// Graph diameter
44    pub diameter: usize,
45    /// Graph radius
46    pub radius: usize,
47    /// Average path length
48    pub average_path_length: f64,
49    /// Connectivity statistics
50    pub connectivity_stats: ConnectivityStats,
51    /// Topological properties
52    pub topological_properties: TopologicalProperties,
53}
54
55/// Spectral analysis results
56#[derive(Debug, Clone, Serialize, Deserialize)]
57pub struct SpectralAnalysisResult {
58    /// Eigenvalues of the Laplacian matrix
59    pub laplacian_eigenvalues: Array1<f64>,
60    /// Eigenvectors for embedding
61    pub embedding_vectors: Array2<f64>,
62    /// Spectral radius
63    pub spectral_radius: f64,
64    /// Algebraic connectivity
65    pub algebraic_connectivity: f64,
66    /// Spectral gap
67    pub spectral_gap: f64,
68    /// Embedding quality metrics
69    pub embedding_quality: EmbeddingQuality,
70}
71
72/// Community analysis results
73#[derive(Debug, Clone, Serialize, Deserialize)]
74pub struct CommunityAnalysisResult {
75    /// Community assignments
76    pub communities: HashMap<usize, usize>,
77    /// Modularity score
78    pub modularity: f64,
79    /// Number of communities
80    pub num_communities: usize,
81    /// Community sizes
82    pub community_sizes: Vec<usize>,
83    /// Inter-community connections
84    pub inter_community_edges: usize,
85    /// Community quality metrics
86    pub quality_metrics: CommunityQualityMetrics,
87}
88
89/// Centrality analysis results
90#[derive(Debug, Clone, Serialize, Deserialize)]
91pub struct CentralityAnalysisResult {
92    /// Betweenness centrality for each node
93    pub betweenness_centrality: HashMap<usize, f64>,
94    /// Closeness centrality for each node
95    pub closeness_centrality: HashMap<usize, f64>,
96    /// Eigenvector centrality for each node
97    pub eigenvector_centrality: HashMap<usize, f64>,
98    /// PageRank centrality for each node
99    pub pagerank_centrality: HashMap<usize, f64>,
100    /// Correlation matrix between centrality measures
101    pub centrality_correlations: Array2<f64>,
102    /// Statistical summary of centrality measures
103    pub centrality_statistics: CentralityStatistics,
104}
105
106/// Connectivity statistics
107#[derive(Debug, Clone, Serialize, Deserialize)]
108pub struct ConnectivityStats {
109    /// Edge connectivity
110    pub edge_connectivity: usize,
111    /// Vertex connectivity
112    pub vertex_connectivity: usize,
113    /// Algebraic connectivity
114    pub algebraic_connectivity: f64,
115    /// Whether graph is connected
116    pub is_connected: bool,
117    /// Number of connected components
118    pub num_components: usize,
119    /// Size of largest component
120    pub largest_component_size: usize,
121}
122
123/// Topological properties
124#[derive(Debug, Clone, Serialize, Deserialize)]
125pub struct TopologicalProperties {
126    /// Whether graph is planar
127    pub is_planar: bool,
128    /// Whether graph is bipartite
129    pub is_bipartite: bool,
130    /// Whether graph is a tree
131    pub is_tree: bool,
132    /// Whether graph is a forest
133    pub is_forest: bool,
134    /// Whether graph has cycles
135    pub has_cycles: bool,
136    /// Girth (shortest cycle length)
137    pub girth: usize,
138    /// Chromatic number
139    pub chromatic_number: usize,
140    /// Independence number
141    pub independence_number: usize,
142}
143
144/// Embedding quality metrics
145#[derive(Debug, Clone, Serialize, Deserialize)]
146pub struct EmbeddingQuality {
147    /// Stress value (lower is better)
148    pub stress: f64,
149    /// Distortion measure
150    pub distortion: f64,
151    /// Distance preservation ratio
152    pub preservation_ratio: f64,
153    /// Dimensionality of embedding
154    pub embedding_dimension: usize,
155}
156
157/// Community quality metrics
158#[derive(Debug, Clone, Serialize, Deserialize)]
159pub struct CommunityQualityMetrics {
160    /// Silhouette score
161    pub silhouette_score: f64,
162    /// Conductance measure
163    pub conductance: f64,
164    /// Coverage ratio
165    pub coverage: f64,
166    /// Overall performance score
167    pub performance: f64,
168}
169
170/// Statistical summary of centrality measures
171#[derive(Debug, Clone, Serialize, Deserialize)]
172pub struct CentralityStatistics {
173    /// Maximum betweenness centrality
174    pub max_betweenness: f64,
175    /// Maximum closeness centrality
176    pub max_closeness: f64,
177    /// Maximum eigenvector centrality
178    pub max_eigenvector: f64,
179    /// Maximum PageRank centrality
180    pub max_pagerank: f64,
181    /// Mean betweenness centrality
182    pub mean_betweenness: f64,
183    /// Mean closeness centrality
184    pub mean_closeness: f64,
185    /// Mean eigenvector centrality
186    pub mean_eigenvector: f64,
187    /// Mean PageRank centrality
188    pub mean_pagerank: f64,
189}
190
191/// Path analysis results
192#[derive(Debug, Clone, Serialize, Deserialize)]
193pub struct PathAnalysisResult {
194    /// Shortest path distances between all pairs
195    pub distance_matrix: Array2<f64>,
196    /// Path efficiency measures
197    pub efficiency_measures: EfficiencyMeasures,
198    /// Routing quality metrics
199    pub routing_quality: RoutingQualityMetrics,
200}
201
202/// Efficiency measures for graph paths
203#[derive(Debug, Clone, Serialize, Deserialize)]
204pub struct EfficiencyMeasures {
205    /// Global efficiency
206    pub global_efficiency: f64,
207    /// Local efficiency
208    pub local_efficiency: f64,
209    /// Average efficiency
210    pub average_efficiency: f64,
211    /// Efficiency distribution
212    pub efficiency_distribution: Vec<f64>,
213}
214
215/// Routing quality metrics
216#[derive(Debug, Clone, Serialize, Deserialize)]
217pub struct RoutingQualityMetrics {
218    /// Average path length
219    pub average_path_length: f64,
220    /// Path length distribution
221    pub path_length_distribution: HashMap<usize, usize>,
222    /// Routing overhead
223    pub routing_overhead: f64,
224    /// Load balancing index
225    pub load_balancing_index: f64,
226}
227
228/// Network flow analysis results
229#[derive(Debug, Clone, Serialize, Deserialize)]
230pub struct FlowAnalysisResult {
231    /// Maximum flow between critical pairs
232    pub max_flows: HashMap<(usize, usize), f64>,
233    /// Minimum cut analysis
234    pub min_cuts: Vec<MinCutResult>,
235    /// Bottleneck identification
236    pub bottlenecks: Vec<BottleneckInfo>,
237    /// Flow distribution metrics
238    pub flow_metrics: FlowMetrics,
239}
240
241/// Minimum cut result
242#[derive(Debug, Clone, Serialize, Deserialize)]
243pub struct MinCutResult {
244    /// Source and sink nodes
245    pub source_sink: (usize, usize),
246    /// Minimum cut value
247    pub cut_value: f64,
248    /// Edges in the cut
249    pub cut_edges: Vec<(usize, usize)>,
250    /// Partition of nodes
251    pub partition: (Vec<usize>, Vec<usize>),
252}
253
254/// Bottleneck information
255#[derive(Debug, Clone, Serialize, Deserialize)]
256pub struct BottleneckInfo {
257    /// Bottleneck edge or node
258    pub location: BottleneckLocation,
259    /// Severity of bottleneck
260    pub severity: f64,
261    /// Impact on flow
262    pub flow_impact: f64,
263    /// Suggested improvements
264    pub improvement_suggestions: Vec<String>,
265}
266
267/// Location of a bottleneck
268#[derive(Debug, Clone, Serialize, Deserialize)]
269pub enum BottleneckLocation {
270    Edge(usize, usize),
271    Node(usize),
272    Region(Vec<usize>),
273}
274
275/// Flow metrics for the network
276#[derive(Debug, Clone, Serialize, Deserialize)]
277pub struct FlowMetrics {
278    /// Total flow capacity
279    pub total_capacity: f64,
280    /// Utilized capacity
281    pub utilized_capacity: f64,
282    /// Utilization efficiency
283    pub utilization_efficiency: f64,
284    /// Flow distribution entropy
285    pub flow_entropy: f64,
286}