1use std::collections::{HashMap, HashSet};
4use std::time::{Duration, SystemTime};
5
6use super::config::HardwareConstraints;
7use crate::backend_traits::BackendCapabilities;
8
9#[derive(Debug, Clone, PartialEq)]
11pub enum CompilationTarget {
12 IBMQuantum {
14 backend_name: String,
15 coupling_map: Vec<(usize, usize)>,
16 native_gates: HashSet<String>,
17 basis_gates: Vec<String>,
18 max_shots: usize,
19 simulator: bool,
20 },
21 AWSBraket {
23 device_arn: String,
24 provider: BraketProvider,
25 supported_gates: HashSet<String>,
26 max_shots: usize,
27 cost_per_shot: f64,
28 },
29 AzureQuantum {
31 workspace: String,
32 target: String,
33 provider: AzureProvider,
34 supported_operations: HashSet<String>,
35 resource_estimation: bool,
36 },
37 IonQ {
39 backend: String,
40 all_to_all: bool,
41 native_gates: HashSet<String>,
42 noise_model: Option<String>,
43 },
44 GoogleQuantumAI {
46 processor_id: String,
47 gate_set: GoogleGateSet,
48 topology: GridTopology,
49 },
50 Rigetti {
52 qpu_id: String,
53 lattice: RigettiLattice,
54 supported_gates: HashSet<String>,
55 },
56 Custom {
58 name: String,
59 capabilities: BackendCapabilities,
60 constraints: HardwareConstraints,
61 },
62}
63
64#[derive(Debug, Clone, PartialEq)]
66pub enum BraketProvider {
67 IonQ,
68 Rigetti,
69 OQC,
70 QuEra,
71 Simulator,
72}
73
74#[derive(Debug, Clone, PartialEq)]
76pub enum AzureProvider {
77 IonQ,
78 Quantinuum,
79 Pasqal,
80 Rigetti,
81 Microsoft,
82}
83
84#[derive(Debug, Clone, PartialEq)]
86pub enum GoogleGateSet {
87 Sycamore,
88 SqrtISwap,
89 SYC,
90}
91
92#[derive(Debug, Clone, PartialEq)]
94pub struct GridTopology {
95 pub rows: usize,
96 pub cols: usize,
97 pub connectivity: ConnectivityPattern,
98}
99
100#[derive(Debug, Clone, PartialEq)]
102pub enum ConnectivityPattern {
103 NearestNeighbor,
104 Square,
105 Hexagonal,
106 Custom(Vec<(usize, usize)>),
107}
108
109#[derive(Debug, Clone, PartialEq)]
111pub enum RigettiLattice {
112 Aspen,
113 Ankaa,
114 Custom(Vec<(usize, usize)>),
115}
116
117#[derive(Debug, Clone)]
119pub struct PassInfo {
120 pub name: String,
122 pub execution_time: Duration,
124 pub gates_modified: usize,
126 pub improvement: f64,
128 pub metrics: HashMap<String, f64>,
130 pub success: bool,
132 pub error_message: Option<String>,
134}
135
136#[derive(Debug, Clone)]
138pub struct HardwareAllocation {
139 pub qubit_mapping: HashMap<usize, usize>,
141 pub allocated_qubits: Vec<usize>,
143 pub resource_utilization: f64,
145 pub strategy: AllocationStrategy,
147 pub quality_score: f64,
149}
150
151#[derive(Debug, Clone, PartialEq)]
153pub enum AllocationStrategy {
154 GreedyMapping,
155 OptimalMapping,
156 HeuristicMapping,
157 GraphBased,
158 Custom(String),
159}
160
161#[derive(Debug, Clone)]
163pub struct PerformancePrediction {
164 pub execution_time: Duration,
166 pub fidelity: f64,
168 pub error_rate: f64,
170 pub success_probability: f64,
172 pub confidence_interval: (f64, f64),
174 pub model: String,
176}
177
178#[derive(Debug, Clone)]
180pub struct AdvancedMetrics {
181 pub quantum_volume: usize,
183 pub expressivity: f64,
185 pub entanglement_entropy: f64,
187 pub complexity_score: f64,
189 pub resource_efficiency: f64,
191 pub error_resilience: f64,
193 pub compatibility_score: f64,
195}
196
197#[derive(Debug, Clone)]
199pub struct OptimizationIteration {
200 pub iteration: usize,
202 pub objective_values: Vec<f64>,
204 pub transformations: Vec<String>,
206 pub intermediate_metrics: HashMap<String, f64>,
208 pub timestamp: Duration,
210}
211
212#[derive(Debug, Clone)]
214pub struct PlatformSpecificResults {
215 pub platform: String,
217 pub metrics: HashMap<String, f64>,
219 pub transformations: Vec<String>,
221}
222
223#[derive(Debug, Clone)]
225pub struct PlatformConstraints {
226 pub max_depth: Option<usize>,
228 pub supported_gates: HashSet<String>,
230 pub connectivity: Vec<(usize, usize)>,
232 pub timing_constraints: HashMap<String, f64>,
234}
235
236#[derive(Debug, Clone)]
238pub struct VerificationResults {
239 pub equivalence_verified: bool,
241 pub constraints_satisfied: bool,
243 pub semantic_correctness: bool,
245 pub verification_time: Duration,
247 pub verification_report: String,
249}
250
251#[derive(Debug, Clone)]
253pub struct ConstraintVerificationResult {
254 pub is_valid: bool,
256}
257
258#[derive(Debug, Clone)]
260pub struct SemanticVerificationResult {
261 pub is_valid: bool,
263}
264
265#[derive(Debug, Clone)]
267pub struct ComplexityMetrics {
268 pub depth_distribution: Vec<usize>,
270 pub gate_distribution: HashMap<String, usize>,
272 pub entanglement_entropy: f64,
274 pub expressivity_measure: f64,
276 pub quantum_volume: usize,
278}
279
280#[derive(Debug, Clone)]
282pub struct CompilationResult {
283 pub original_circuit: String,
285 pub optimized_circuit: String,
287 pub optimization_stats: OptimizationStats,
289 pub applied_passes: Vec<PassInfo>,
291 pub hardware_allocation: HardwareAllocation,
293 pub predicted_performance: PerformancePrediction,
295 pub compilation_time: Duration,
297 pub advanced_metrics: AdvancedMetrics,
299 pub optimization_history: Vec<OptimizationIteration>,
301 pub platform_specific: PlatformSpecificResults,
303 pub verification_results: VerificationResults,
305}
306
307#[derive(Debug, Clone)]
309pub struct OptimizationStats {
310 pub original_gate_count: usize,
312 pub optimized_gate_count: usize,
314 pub original_depth: usize,
316 pub optimized_depth: usize,
318 pub error_improvement: f64,
320 pub fidelity_improvement: f64,
322 pub efficiency_gain: f64,
324 pub overall_improvement: f64,
326}
327
328#[derive(Debug, Clone)]
330pub struct PerformanceAnomaly {
331 pub description: String,
333 pub severity: AnomalySeverity,
335 pub confidence: f64,
337 pub affected_metrics: Vec<String>,
339 pub anomaly_type: String,
341 pub recommended_action: String,
343}
344
345#[derive(Debug, Clone, PartialEq)]
347pub enum AnomalySeverity {
348 Low,
349 Medium,
350 High,
351 Critical,
352}
353
354#[derive(Debug, Clone)]
356pub struct AdvancedOptimizationResult {
357 pub method: String,
359 pub converged: bool,
361 pub objective_value: f64,
363 pub iterations: usize,
365 pub parameter_evolution: Vec<scirs2_core::ndarray::Array1<f64>>,
367 pub success: bool,
369 pub x: scirs2_core::ndarray::Array1<f64>,
371 pub improvement: f64,
373}
374
375#[derive(Debug, Clone)]
377pub struct LinalgOptimizationResult {
378 pub decomposition_improvements: HashMap<String, f64>,
380 pub stability_metrics: NumericalStabilityMetrics,
382 pub eigenvalue_analysis: EigenvalueAnalysis,
384}
385
386#[derive(Debug, Clone)]
388pub struct NumericalStabilityMetrics {
389 pub condition_number: f64,
391 pub numerical_rank: usize,
393 pub spectral_radius: f64,
395}
396
397#[derive(Debug, Clone)]
399pub struct EigenvalueAnalysis {
400 pub eigenvalue_distribution: Vec<scirs2_core::Complex64>,
402 pub spectral_gap: f64,
404 pub entanglement_spectrum: Vec<f64>,
406}