use std::collections::{HashMap, HashSet};
use std::time::{Duration, SystemTime};
use super::config::HardwareConstraints;
use crate::backend_traits::BackendCapabilities;
#[derive(Debug, Clone, PartialEq)]
pub enum CompilationTarget {
IBMQuantum {
backend_name: String,
coupling_map: Vec<(usize, usize)>,
native_gates: HashSet<String>,
basis_gates: Vec<String>,
max_shots: usize,
simulator: bool,
},
AWSBraket {
device_arn: String,
provider: BraketProvider,
supported_gates: HashSet<String>,
max_shots: usize,
cost_per_shot: f64,
},
AzureQuantum {
workspace: String,
target: String,
provider: AzureProvider,
supported_operations: HashSet<String>,
resource_estimation: bool,
},
IonQ {
backend: String,
all_to_all: bool,
native_gates: HashSet<String>,
noise_model: Option<String>,
},
GoogleQuantumAI {
processor_id: String,
gate_set: GoogleGateSet,
topology: GridTopology,
},
Rigetti {
qpu_id: String,
lattice: RigettiLattice,
supported_gates: HashSet<String>,
},
Custom {
name: String,
capabilities: BackendCapabilities,
constraints: HardwareConstraints,
},
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum BraketProvider {
IonQ,
Rigetti,
OQC,
QuEra,
Simulator,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum AzureProvider {
IonQ,
Quantinuum,
Pasqal,
Rigetti,
Microsoft,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum GoogleGateSet {
Sycamore,
SqrtISwap,
SYC,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct GridTopology {
pub rows: usize,
pub cols: usize,
pub connectivity: ConnectivityPattern,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ConnectivityPattern {
NearestNeighbor,
Square,
Hexagonal,
Custom(Vec<(usize, usize)>),
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum RigettiLattice {
Aspen,
Ankaa,
Custom(Vec<(usize, usize)>),
}
#[derive(Debug, Clone)]
pub struct PassInfo {
pub name: String,
pub execution_time: Duration,
pub gates_modified: usize,
pub improvement: f64,
pub metrics: HashMap<String, f64>,
pub success: bool,
pub error_message: Option<String>,
}
#[derive(Debug, Clone)]
pub struct HardwareAllocation {
pub qubit_mapping: HashMap<usize, usize>,
pub allocated_qubits: Vec<usize>,
pub resource_utilization: f64,
pub strategy: AllocationStrategy,
pub quality_score: f64,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum AllocationStrategy {
GreedyMapping,
OptimalMapping,
HeuristicMapping,
GraphBased,
Custom(String),
}
#[derive(Debug, Clone)]
pub struct PerformancePrediction {
pub execution_time: Duration,
pub fidelity: f64,
pub error_rate: f64,
pub success_probability: f64,
pub confidence_interval: (f64, f64),
pub model: String,
}
#[derive(Debug, Clone)]
pub struct AdvancedMetrics {
pub quantum_volume: usize,
pub expressivity: f64,
pub entanglement_entropy: f64,
pub complexity_score: f64,
pub resource_efficiency: f64,
pub error_resilience: f64,
pub compatibility_score: f64,
}
#[derive(Debug, Clone)]
pub struct OptimizationIteration {
pub iteration: usize,
pub objective_values: Vec<f64>,
pub transformations: Vec<String>,
pub intermediate_metrics: HashMap<String, f64>,
pub timestamp: Duration,
}
#[derive(Debug, Clone)]
pub struct PlatformSpecificResults {
pub platform: String,
pub metrics: HashMap<String, f64>,
pub transformations: Vec<String>,
}
#[derive(Debug, Clone)]
pub struct PlatformConstraints {
pub max_depth: Option<usize>,
pub supported_gates: HashSet<String>,
pub connectivity: Vec<(usize, usize)>,
pub timing_constraints: HashMap<String, f64>,
}
#[derive(Debug, Clone)]
pub struct VerificationResults {
pub equivalence_verified: bool,
pub constraints_satisfied: bool,
pub semantic_correctness: bool,
pub verification_time: Duration,
pub verification_report: String,
}
#[derive(Debug, Clone)]
pub struct ConstraintVerificationResult {
pub is_valid: bool,
}
#[derive(Debug, Clone)]
pub struct SemanticVerificationResult {
pub is_valid: bool,
}
#[derive(Debug, Clone)]
pub struct ComplexityMetrics {
pub depth_distribution: Vec<usize>,
pub gate_distribution: HashMap<String, usize>,
pub entanglement_entropy: f64,
pub expressivity_measure: f64,
pub quantum_volume: usize,
}
#[derive(Debug, Clone)]
pub struct CompilationResult {
pub original_circuit: String,
pub optimized_circuit: String,
pub optimization_stats: OptimizationStats,
pub applied_passes: Vec<PassInfo>,
pub hardware_allocation: HardwareAllocation,
pub predicted_performance: PerformancePrediction,
pub compilation_time: Duration,
pub advanced_metrics: AdvancedMetrics,
pub optimization_history: Vec<OptimizationIteration>,
pub platform_specific: PlatformSpecificResults,
pub verification_results: VerificationResults,
}
#[derive(Debug, Clone)]
pub struct OptimizationStats {
pub original_gate_count: usize,
pub optimized_gate_count: usize,
pub original_depth: usize,
pub optimized_depth: usize,
pub error_improvement: f64,
pub fidelity_improvement: f64,
pub efficiency_gain: f64,
pub overall_improvement: f64,
}
#[derive(Debug, Clone)]
pub struct PerformanceAnomaly {
pub description: String,
pub severity: AnomalySeverity,
pub confidence: f64,
pub affected_metrics: Vec<String>,
pub anomaly_type: String,
pub recommended_action: String,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum AnomalySeverity {
Low,
Medium,
High,
Critical,
}
#[derive(Debug, Clone)]
pub struct AdvancedOptimizationResult {
pub method: String,
pub converged: bool,
pub objective_value: f64,
pub iterations: usize,
pub parameter_evolution: Vec<scirs2_core::ndarray::Array1<f64>>,
pub success: bool,
pub x: scirs2_core::ndarray::Array1<f64>,
pub improvement: f64,
}
#[derive(Debug, Clone)]
pub struct LinalgOptimizationResult {
pub decomposition_improvements: HashMap<String, f64>,
pub stability_metrics: NumericalStabilityMetrics,
pub eigenvalue_analysis: EigenvalueAnalysis,
}
#[derive(Debug, Clone)]
pub struct NumericalStabilityMetrics {
pub condition_number: f64,
pub numerical_rank: usize,
pub spectral_radius: f64,
}
#[derive(Debug, Clone)]
pub struct EigenvalueAnalysis {
pub eigenvalue_distribution: Vec<scirs2_core::Complex64>,
pub spectral_gap: f64,
pub entanglement_spectrum: Vec<f64>,
}