use super::config::*;
use super::monitor::{
ExecutionQualityMetrics, OptimizationSuggestion, PerformanceMetrics, ResourceUsage,
};
use crate::translation::HardwareBackend;
use quantrs2_core::qubit::QubitId;
use serde::{Deserialize, Serialize};
use std::collections::{HashMap, VecDeque};
use std::time::{Duration, SystemTime};
#[derive(Debug)]
pub struct ParallelCircuitTask {
pub id: String,
pub circuit: Box<dyn std::any::Any + Send + Sync>,
pub target_backend: HardwareBackend,
pub priority: TaskPriority,
pub resource_requirements: ParallelResourceRequirements,
pub constraints: ExecutionConstraints,
pub submitted_at: SystemTime,
pub deadline: Option<SystemTime>,
}
#[derive(Debug, Clone)]
pub struct ParallelGateTask {
pub id: String,
pub gate_operations: Vec<ParallelGateOperation>,
pub target_qubits: Vec<QubitId>,
pub dependency_graph: HashMap<String, Vec<String>>,
pub priority: TaskPriority,
pub submitted_at: SystemTime,
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
pub enum TaskPriority {
Low,
Normal,
High,
Critical,
System,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ParallelResourceRequirements {
pub required_cpu_cores: usize,
pub required_memory_mb: f64,
pub required_qpu_time: Duration,
pub required_bandwidth_mbps: f64,
pub required_storage_mb: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ExecutionConstraints {
pub allowed_backends: Vec<HardwareBackend>,
pub forbidden_backends: Vec<HardwareBackend>,
pub quality_requirements: QualityRequirements,
pub timing_constraints: TimingConstraints,
pub resource_constraints: ResourceConstraints,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QualityRequirements {
pub min_fidelity: Option<f64>,
pub max_error_rate: Option<f64>,
pub calibration_recency: Option<Duration>,
pub assessment_method: QualityAssessmentMethod,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum QualityAssessmentMethod {
Static,
Dynamic,
Predictive,
BenchmarkBased,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TimingConstraints {
pub max_execution_time: Option<Duration>,
pub max_queue_time: Option<Duration>,
pub preferred_window: Option<(SystemTime, SystemTime)>,
pub scheduling_flexibility: SchedulingFlexibility,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum SchedulingFlexibility {
Rigid,
Flexible,
Adaptive,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResourceConstraints {
pub max_cost: Option<f64>,
pub max_energy: Option<f64>,
pub usage_limits: HashMap<String, f64>,
pub sharing_preferences: SharingPreferences,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum SharingPreferences {
Exclusive,
Shared,
BestEffort,
Conditional(Vec<SharingCondition>),
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum SharingCondition {
UserWhitelist(Vec<String>),
CircuitTypeWhitelist(Vec<String>),
TimeWindow(SystemTime, SystemTime),
ResourceThreshold(String, f64),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ParallelGateOperation {
pub id: String,
pub gate_type: String,
pub qubits: Vec<QubitId>,
pub parameters: Vec<f64>,
pub dependencies: Vec<String>,
pub parallelization_hints: ParallelizationHints,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ParallelizationHints {
pub parallel_safe: bool,
pub execution_order: Option<usize>,
pub resource_affinity: ResourceAffinity,
pub scheduling_hints: SchedulingHints,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ResourceAffinity {
None,
Backend(HardwareBackend),
Qubits(Vec<QubitId>),
CoLocation(Vec<String>),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SchedulingHints {
pub preferred_time: Option<SystemTime>,
pub priority: TaskPriority,
pub deadline: Option<SystemTime>,
pub batch_compatible: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LoadMetrics {
pub cpu_load: f64,
pub memory_load: f64,
pub qpu_load: f64,
pub network_load: f64,
pub queue_length: usize,
pub response_time: Duration,
pub throughput: f64,
pub error_rate: f64,
pub last_updated: SystemTime,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LoadSnapshot {
pub timestamp: SystemTime,
pub backend_loads: HashMap<HardwareBackend, LoadMetrics>,
pub system_metrics: SystemMetrics,
pub predictions: LoadPredictions,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SystemMetrics {
pub total_throughput: f64,
pub average_latency: Duration,
pub total_resource_utilization: f64,
pub overall_quality_score: f64,
pub cost_per_operation: f64,
pub energy_per_operation: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LoadPredictions {
pub predicted_loads: HashMap<HardwareBackend, f64>,
pub confidence_levels: HashMap<HardwareBackend, f64>,
pub prediction_horizon: Duration,
pub model_accuracy: f64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum RebalancingStrategy {
Reactive,
Proactive,
Predictive,
Hybrid,
}
pub struct MigrationTracker {
pub active_migrations: HashMap<String, MigrationStatus>,
pub migration_history: VecDeque<MigrationRecord>,
pub migration_costs: HashMap<(HardwareBackend, HardwareBackend), f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MigrationStatus {
pub task_id: String,
pub source_backend: HardwareBackend,
pub target_backend: HardwareBackend,
pub progress: f64, pub started_at: SystemTime,
pub estimated_completion: SystemTime,
pub migration_type: MigrationType,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum MigrationType {
Circuit,
Data,
State,
Full,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MigrationRecord {
pub task_id: String,
pub source_backend: HardwareBackend,
pub target_backend: HardwareBackend,
pub migration_time: Duration,
pub success: bool,
pub cost: f64,
pub quality_impact: f64,
pub timestamp: SystemTime,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ParallelExecutionResult {
pub task_id: String,
pub success: bool,
pub execution_time: Duration,
pub resource_usage: ResourceUsage,
pub quality_metrics: ExecutionQualityMetrics,
pub results: Option<Vec<u8>>, pub error_message: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LoadBalancingResult {
pub rebalancing_performed: bool,
pub migrations_performed: usize,
pub load_improvement: f64,
pub estimated_performance_gain: f64,
pub rebalancing_cost: f64,
}