quantrs2_device/distributed/
types.rs1use serde::{Deserialize, Serialize};
4use std::collections::HashMap;
5use std::net::SocketAddr;
6use std::sync::{Arc, Mutex};
7use std::time::{Duration, Instant, SystemTime};
8
9use super::config::DistributedOrchestratorConfig;
10
11#[derive(Debug)]
20pub struct DistributedQuantumOrchestrator {
21 pub(crate) config: DistributedOrchestratorConfig,
22 pub(crate) nodes: Arc<Mutex<HashMap<String, NodeInfo>>>,
23 pub(crate) workflows: Arc<Mutex<HashMap<String, DistributedWorkflow>>>,
24 pub(crate) execution_counter: Arc<Mutex<u64>>,
25}
26
27#[derive(Debug, Clone, Serialize, Deserialize)]
29pub struct DistributedExecutionResult {
30 pub execution_id: String,
31 pub status: DistributedExecutionStatus,
32 pub results: HashMap<String, String>,
33 pub performance_metrics: DistributedPerformanceAnalytics,
34 pub execution_time: Duration,
35}
36
37#[derive(Debug, Clone, Serialize, Deserialize)]
38pub enum DistributedExecutionStatus {
39 Pending,
40 Running,
41 Completed,
42 Failed,
43 Cancelled,
44}
45
46#[derive(Debug, Clone, Serialize, Deserialize)]
48pub struct NodeInfo {
49 pub node_id: String,
50 pub address: SocketAddr,
51 pub capabilities: NodeCapabilities,
52 pub status: NodeStatus,
53 #[serde(skip)]
54 pub last_heartbeat: Option<Instant>,
55}
56
57#[derive(Debug, Clone, Serialize, Deserialize)]
58pub struct NodeCapabilities {
59 pub max_qubits: u32,
60 pub supported_gates: Vec<String>,
61 pub connectivity: HashMap<u32, Vec<u32>>,
62 pub error_rates: HashMap<String, f64>,
63}
64
65#[derive(Debug, Clone, Serialize, Deserialize)]
66pub enum NodeStatus {
67 Available,
68 Busy,
69 Offline,
70 Maintenance,
71 Error,
72}
73
74#[derive(Debug, Clone, Serialize, Deserialize)]
76pub struct DistributedWorkflow {
77 pub workflow_id: String,
78 pub workflow_type: DistributedWorkflowType,
79 pub steps: Vec<String>,
80 pub dependencies: HashMap<String, Vec<String>>,
81}
82
83#[derive(Debug, Clone, Serialize, Deserialize)]
84pub enum DistributedWorkflowType {
85 Sequential,
86 Parallel,
87 ConditionalBranching,
88 IterativeLoop,
89 EventDriven,
90}
91
92#[derive(Debug, Clone, Serialize, Deserialize)]
94pub struct DistributedEvent {
95 pub event_id: String,
96 pub event_type: String,
97 pub timestamp: SystemTime,
98 pub data: HashMap<String, String>,
99}
100
101#[derive(Debug, Clone, Serialize, Deserialize)]
102pub struct DistributedCommand {
103 pub command_id: String,
104 pub command_type: String,
105 pub target_node: String,
106 pub parameters: HashMap<String, String>,
107}
108
109#[derive(Debug, Clone, Serialize, Deserialize)]
111pub struct CircuitDecompositionResult {
112 pub subcircuits: Vec<String>,
113 pub dependencies: HashMap<String, Vec<String>>,
114 pub resource_requirements: HashMap<String, u32>,
115}
116
117impl Default for DistributedExecutionResult {
119 fn default() -> Self {
120 Self {
121 execution_id: "default".to_string(),
122 status: DistributedExecutionStatus::Pending,
123 results: HashMap::new(),
124 performance_metrics: DistributedPerformanceAnalytics::default(),
125 execution_time: Duration::from_secs(0),
126 }
127 }
128}
129
130impl Default for NodeCapabilities {
131 fn default() -> Self {
132 Self {
133 max_qubits: 5,
134 supported_gates: vec![
135 "X".to_string(),
136 "Y".to_string(),
137 "Z".to_string(),
138 "CNOT".to_string(),
139 ],
140 connectivity: HashMap::new(),
141 error_rates: HashMap::new(),
142 }
143 }
144}
145
146#[derive(Debug, Clone, Serialize, Deserialize, Default)]
148pub struct DistributedPerformanceAnalytics {
149 pub throughput: f64,
150 pub latency: Duration,
151 pub error_rate: f64,
152 pub resource_utilization: f64,
153}