use std::collections::HashMap;
use std::time::{Duration, Instant};
use super::hardware::{HardwareSpecification, PlatformPerformanceCharacteristics};
#[derive(Debug, Clone, PartialEq, Hash, Eq)]
pub enum QuantumPlatform {
DWave,
IBM,
IonQ,
Rigetti,
AWSBraket,
GoogleQuantumAI,
AzureQuantum,
Xanadu,
QCI,
LocalSimulator,
Custom(String),
}
pub struct PlatformRegistry {
pub platforms: HashMap<QuantumPlatform, PlatformInfo>,
pub capabilities: HashMap<QuantumPlatform, PlatformCapabilities>,
pub availability: HashMap<QuantumPlatform, AvailabilityInfo>,
pub performance_history: HashMap<QuantumPlatform, PerformanceHistory>,
}
impl PlatformRegistry {
pub fn new() -> Self {
Self {
platforms: HashMap::new(),
capabilities: HashMap::new(),
availability: HashMap::new(),
performance_history: HashMap::new(),
}
}
}
impl Default for PlatformRegistry {
fn default() -> Self {
Self::new()
}
}
#[derive(Debug, Clone)]
pub struct PlatformInfo {
pub name: String,
pub provider: String,
pub version: String,
pub credentials: PlatformCredentials,
pub connection_params: ConnectionParameters,
pub metadata: HashMap<String, String>,
}
#[derive(Debug, Clone)]
pub enum PlatformCredentials {
ApiKey(String),
Token(String),
Certificate { cert: String, key: String },
OAuth {
client_id: String,
client_secret: String,
},
Custom(HashMap<String, String>),
}
#[derive(Debug, Clone)]
pub struct ConnectionParameters {
pub endpoint: String,
pub timeout: Duration,
pub retry_config: RetryConfig,
pub connection_pooling: bool,
}
#[derive(Debug, Clone)]
pub struct RetryConfig {
pub max_retries: usize,
pub base_delay: Duration,
pub max_delay: Duration,
pub backoff_strategy: BackoffStrategy,
}
#[derive(Debug, Clone, PartialEq)]
pub enum BackoffStrategy {
Fixed,
Linear,
Exponential,
JitteredExponential,
}
#[derive(Debug, Clone)]
pub struct PlatformCapabilities {
pub supported_problem_types: Vec<ProblemType>,
pub hardware_specs: Vec<HardwareSpecification>,
pub software_capabilities: SoftwareCapabilities,
pub performance_characteristics: PlatformPerformanceCharacteristics,
pub cost_structure: CostStructure,
}
#[derive(Debug, Clone, PartialEq)]
pub enum ProblemType {
Ising,
QUBO,
GateBased,
ContinuousVariable,
Hybrid,
}
#[derive(Debug, Clone)]
pub struct SoftwareCapabilities {
pub supported_languages: Vec<String>,
pub optimizers: Vec<OptimizerType>,
pub error_mitigation: Vec<ErrorMitigationType>,
pub compilation_features: CompilationFeatures,
}
#[derive(Debug, Clone, PartialEq)]
pub enum OptimizerType {
QuantumAnnealing,
Variational,
Adiabatic,
Hybrid,
}
#[derive(Debug, Clone, PartialEq)]
pub enum ErrorMitigationType {
ZeroNoiseExtrapolation,
ProbabilisticErrorCancellation,
SymmetryVerification,
ReadoutErrorMitigation,
}
#[derive(Debug, Clone)]
pub struct CompilationFeatures {
pub circuit_optimization: bool,
pub layout_optimization: bool,
pub scheduling_optimization: bool,
pub error_aware_compilation: bool,
}
#[derive(Debug, Clone)]
pub struct CostStructure {
pub pricing_model: PricingModel,
pub base_cost: f64,
pub variable_costs: VariableCosts,
pub billing_granularity: BillingGranularity,
}
#[derive(Debug, Clone, PartialEq)]
pub enum PricingModel {
PerShot,
PerCircuit,
PerTime,
Subscription,
Credits,
}
#[derive(Debug, Clone)]
pub struct VariableCosts {
pub per_qubit: f64,
pub per_gate: f64,
pub per_second: f64,
pub per_shot: f64,
}
#[derive(Debug, Clone, PartialEq)]
pub enum BillingGranularity {
PerSecond,
PerMinute,
PerHour,
PerJob,
}
#[derive(Debug, Clone)]
pub struct AvailabilityInfo {
pub status: PlatformStatus,
pub uptime: f64,
pub maintenance_windows: Vec<MaintenanceWindow>,
pub queue_info: QueueInfo,
}
#[derive(Debug, Clone, PartialEq)]
pub enum PlatformStatus {
Available,
Busy,
Maintenance,
Unavailable,
Unknown,
}
#[derive(Debug, Clone)]
pub struct MaintenanceWindow {
pub start_time: Instant,
pub end_time: Instant,
pub maintenance_type: MaintenanceType,
pub description: String,
}
#[derive(Debug, Clone, PartialEq)]
pub enum MaintenanceType {
Scheduled,
Emergency,
Calibration,
Upgrade,
}
#[derive(Debug, Clone)]
pub struct QueueInfo {
pub queue_length: usize,
pub estimated_wait_time: Duration,
pub queue_position: Option<usize>,
pub priority_levels: Vec<PriorityLevel>,
}
#[derive(Debug, Clone)]
pub struct PriorityLevel {
pub name: String,
pub queue_length: usize,
pub estimated_wait_time: Duration,
}
#[derive(Debug, Clone)]
pub struct PerformanceHistory {
pub data_points: std::collections::VecDeque<PerformanceDataPoint>,
pub trends: PerformanceTrends,
pub anomalies: Vec<PerformanceAnomaly>,
}
#[derive(Debug, Clone)]
pub struct PerformanceDataPoint {
pub timestamp: Instant,
pub success_rate: f64,
pub avg_execution_time: Duration,
pub avg_queue_time: Duration,
pub fidelity: f64,
}
#[derive(Debug, Clone)]
pub struct PerformanceTrends {
pub success_rate_trend: TrendDirection,
pub execution_time_trend: TrendDirection,
pub queue_time_trend: TrendDirection,
pub fidelity_trend: TrendDirection,
}
#[derive(Debug, Clone, PartialEq)]
pub enum TrendDirection {
Improving,
Stable,
Declining,
Unknown,
}
#[derive(Debug, Clone)]
pub struct PerformanceAnomaly {
pub detected_at: Instant,
pub anomaly_type: AnomalyType,
pub severity: AnomalySeverity,
pub description: String,
}
#[derive(Debug, Clone, PartialEq)]
pub enum AnomalyType {
PerformanceDegradation,
AvailabilityIssue,
ErrorRateSpike,
UnusualQueueBehavior,
}
#[derive(Debug, Clone, PartialEq)]
pub enum AnomalySeverity {
Low,
Medium,
High,
Critical,
}