1use super::config::*;
4use super::monitor::{
5 ExecutionQualityMetrics, OptimizationSuggestion, PerformanceMetrics, ResourceUsage,
6};
7use crate::translation::HardwareBackend;
8use quantrs2_core::qubit::QubitId;
9use serde::{Deserialize, Serialize};
10use std::collections::{HashMap, VecDeque};
11use std::time::{Duration, SystemTime};
12
13#[derive(Debug)]
15pub struct ParallelCircuitTask {
16 pub id: String,
17 pub circuit: Box<dyn std::any::Any + Send + Sync>,
18 pub target_backend: HardwareBackend,
19 pub priority: TaskPriority,
20 pub resource_requirements: ParallelResourceRequirements,
21 pub constraints: ExecutionConstraints,
22 pub submitted_at: SystemTime,
23 pub deadline: Option<SystemTime>,
24}
25
26#[derive(Debug, Clone)]
28pub struct ParallelGateTask {
29 pub id: String,
30 pub gate_operations: Vec<ParallelGateOperation>,
31 pub target_qubits: Vec<QubitId>,
32 pub dependency_graph: HashMap<String, Vec<String>>,
33 pub priority: TaskPriority,
34 pub submitted_at: SystemTime,
35}
36
37#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
39pub enum TaskPriority {
40 Low,
42 Normal,
44 High,
46 Critical,
48 System,
50}
51
52#[derive(Debug, Clone, Serialize, Deserialize)]
54pub struct ParallelResourceRequirements {
55 pub required_cpu_cores: usize,
57 pub required_memory_mb: f64,
59 pub required_qpu_time: Duration,
61 pub required_bandwidth_mbps: f64,
63 pub required_storage_mb: f64,
65}
66
67#[derive(Debug, Clone, Serialize, Deserialize)]
69pub struct ExecutionConstraints {
70 pub allowed_backends: Vec<HardwareBackend>,
72 pub forbidden_backends: Vec<HardwareBackend>,
74 pub quality_requirements: QualityRequirements,
76 pub timing_constraints: TimingConstraints,
78 pub resource_constraints: ResourceConstraints,
80}
81
82#[derive(Debug, Clone, Serialize, Deserialize)]
84pub struct QualityRequirements {
85 pub min_fidelity: Option<f64>,
87 pub max_error_rate: Option<f64>,
89 pub calibration_recency: Option<Duration>,
91 pub assessment_method: QualityAssessmentMethod,
93}
94
95#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
97pub enum QualityAssessmentMethod {
98 Static,
100 Dynamic,
102 Predictive,
104 BenchmarkBased,
106}
107
108#[derive(Debug, Clone, Serialize, Deserialize)]
110pub struct TimingConstraints {
111 pub max_execution_time: Option<Duration>,
113 pub max_queue_time: Option<Duration>,
115 pub preferred_window: Option<(SystemTime, SystemTime)>,
117 pub scheduling_flexibility: SchedulingFlexibility,
119}
120
121#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
123pub enum SchedulingFlexibility {
124 Rigid,
126 Flexible,
128 Adaptive,
130}
131
132#[derive(Debug, Clone, Serialize, Deserialize)]
134pub struct ResourceConstraints {
135 pub max_cost: Option<f64>,
137 pub max_energy: Option<f64>,
139 pub usage_limits: HashMap<String, f64>,
141 pub sharing_preferences: SharingPreferences,
143}
144
145#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
147pub enum SharingPreferences {
148 Exclusive,
150 Shared,
152 BestEffort,
154 Conditional(Vec<SharingCondition>),
156}
157
158#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
160pub enum SharingCondition {
161 UserWhitelist(Vec<String>),
163 CircuitTypeWhitelist(Vec<String>),
165 TimeWindow(SystemTime, SystemTime),
167 ResourceThreshold(String, f64),
169}
170
171#[derive(Debug, Clone, Serialize, Deserialize)]
173pub struct ParallelGateOperation {
174 pub id: String,
176 pub gate_type: String,
178 pub qubits: Vec<QubitId>,
180 pub parameters: Vec<f64>,
182 pub dependencies: Vec<String>,
184 pub parallelization_hints: ParallelizationHints,
186}
187
188#[derive(Debug, Clone, Serialize, Deserialize)]
190pub struct ParallelizationHints {
191 pub parallel_safe: bool,
193 pub execution_order: Option<usize>,
195 pub resource_affinity: ResourceAffinity,
197 pub scheduling_hints: SchedulingHints,
199}
200
201#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
203pub enum ResourceAffinity {
204 None,
206 Backend(HardwareBackend),
208 Qubits(Vec<QubitId>),
210 CoLocation(Vec<String>),
212}
213
214#[derive(Debug, Clone, Serialize, Deserialize)]
216pub struct SchedulingHints {
217 pub preferred_time: Option<SystemTime>,
219 pub priority: TaskPriority,
221 pub deadline: Option<SystemTime>,
223 pub batch_compatible: bool,
225}
226
227#[derive(Debug, Clone, Serialize, Deserialize)]
231pub struct LoadMetrics {
232 pub cpu_load: f64,
233 pub memory_load: f64,
234 pub qpu_load: f64,
235 pub network_load: f64,
236 pub queue_length: usize,
237 pub response_time: Duration,
238 pub throughput: f64,
239 pub error_rate: f64,
240 pub last_updated: SystemTime,
241}
242
243#[derive(Debug, Clone, Serialize, Deserialize)]
245pub struct LoadSnapshot {
246 pub timestamp: SystemTime,
247 pub backend_loads: HashMap<HardwareBackend, LoadMetrics>,
248 pub system_metrics: SystemMetrics,
249 pub predictions: LoadPredictions,
250}
251
252#[derive(Debug, Clone, Serialize, Deserialize)]
254pub struct SystemMetrics {
255 pub total_throughput: f64,
256 pub average_latency: Duration,
257 pub total_resource_utilization: f64,
258 pub overall_quality_score: f64,
259 pub cost_per_operation: f64,
260 pub energy_per_operation: f64,
261}
262
263#[derive(Debug, Clone, Serialize, Deserialize)]
265pub struct LoadPredictions {
266 pub predicted_loads: HashMap<HardwareBackend, f64>,
267 pub confidence_levels: HashMap<HardwareBackend, f64>,
268 pub prediction_horizon: Duration,
269 pub model_accuracy: f64,
270}
271
272#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
274pub enum RebalancingStrategy {
275 Reactive,
277 Proactive,
279 Predictive,
281 Hybrid,
283}
284
285pub struct MigrationTracker {
287 pub active_migrations: HashMap<String, MigrationStatus>,
288 pub migration_history: VecDeque<MigrationRecord>,
289 pub migration_costs: HashMap<(HardwareBackend, HardwareBackend), f64>,
290}
291
292#[derive(Debug, Clone, Serialize, Deserialize)]
294pub struct MigrationStatus {
295 pub task_id: String,
296 pub source_backend: HardwareBackend,
297 pub target_backend: HardwareBackend,
298 pub progress: f64, pub started_at: SystemTime,
300 pub estimated_completion: SystemTime,
301 pub migration_type: MigrationType,
302}
303
304#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
306pub enum MigrationType {
307 Circuit,
309 Data,
311 State,
313 Full,
315}
316
317#[derive(Debug, Clone, Serialize, Deserialize)]
319pub struct MigrationRecord {
320 pub task_id: String,
321 pub source_backend: HardwareBackend,
322 pub target_backend: HardwareBackend,
323 pub migration_time: Duration,
324 pub success: bool,
325 pub cost: f64,
326 pub quality_impact: f64,
327 pub timestamp: SystemTime,
328}
329
330#[derive(Debug, Clone, Serialize, Deserialize)]
332pub struct ParallelExecutionResult {
333 pub task_id: String,
334 pub success: bool,
335 pub execution_time: Duration,
336 pub resource_usage: ResourceUsage,
337 pub quality_metrics: ExecutionQualityMetrics,
338 pub results: Option<Vec<u8>>, pub error_message: Option<String>,
340}
341
342#[derive(Debug, Clone, Serialize, Deserialize)]
344pub struct LoadBalancingResult {
345 pub rebalancing_performed: bool,
346 pub migrations_performed: usize,
347 pub load_improvement: f64,
348 pub estimated_performance_gain: f64,
349 pub rebalancing_cost: f64,
350}