Skip to main content

oxirs_stream/quantum_streaming/
types.rs

1//! Quantum streaming types and enums
2
3use anyhow::Result;
4use serde::{Deserialize, Serialize};
5use std::collections::HashMap;
6use std::time::Duration;
7
8/// Quantum error correction codes
9#[derive(Debug, Clone, Serialize, Deserialize)]
10pub enum QuantumErrorCorrection {
11    /// Five-qubit code (perfect for single qubit errors)
12    FiveQubitCode,
13    /// Shor's 9-qubit code
14    Shor9Qubit,
15    /// Surface code
16    SurfaceCode { distance: usize },
17}
18
19/// Quantum state representation
20#[derive(Debug, Clone, Serialize, Deserialize)]
21pub struct QuantumState {
22    pub amplitudes: Vec<f64>,
23    pub phases: Vec<f64>,
24    pub entanglement_graph: HashMap<String, Vec<String>>,
25}
26
27impl Default for QuantumState {
28    fn default() -> Self {
29        Self {
30            amplitudes: vec![1.0, 0.0], // |0⟩ state
31            phases: vec![0.0, 0.0],
32            entanglement_graph: HashMap::new(),
33        }
34    }
35}
36
37/// Quantum operation types
38#[derive(Debug, Clone, Serialize, Deserialize)]
39pub enum QuantumOperation {
40    /// Pauli-X gate
41    PauliX,
42    /// Pauli-Y gate  
43    PauliY,
44    /// Pauli-Z gate
45    PauliZ,
46    /// Hadamard gate
47    Hadamard,
48    /// CNOT gate
49    CNOT { control: usize, target: usize },
50    /// Measurement
51    Measure,
52}
53
54/// Quantum event in the streaming system
55#[derive(Debug, Clone, Serialize, Deserialize)]
56pub struct QuantumEvent {
57    pub id: String,
58    pub timestamp: u64, // Unix timestamp in milliseconds
59    pub quantum_state: QuantumState,
60    pub operation: QuantumOperation,
61    pub metadata: HashMap<String, String>,
62}
63
64/// Statistics for quantum processing
65#[derive(Debug, Default, Serialize, Deserialize)]
66pub struct QuantumProcessingStats {
67    pub operations_processed: u64,
68    pub average_fidelity: f64,
69    pub error_rate: f64,
70    pub decoherence_time: Duration,
71    pub gate_errors: u64,
72    pub measurement_errors: u64,
73}
74
75/// Quantum stream processor
76#[derive(Debug)]
77pub struct QuantumStreamProcessor {
78    pub quantum_registers: Vec<QuantumState>,
79    pub error_correction: QuantumErrorCorrection,
80    pub stats: QuantumProcessingStats,
81    pub active_operations: Vec<QuantumOperation>,
82}
83
84impl Default for QuantumStreamProcessor {
85    fn default() -> Self {
86        Self::new()
87    }
88}
89
90impl QuantumStreamProcessor {
91    pub fn new() -> Self {
92        Self {
93            quantum_registers: vec![QuantumState::default()],
94            error_correction: QuantumErrorCorrection::FiveQubitCode,
95            stats: QuantumProcessingStats::default(),
96            active_operations: Vec::new(),
97        }
98    }
99
100    pub async fn process_event(&mut self, event: QuantumEvent) -> Result<()> {
101        self.stats.operations_processed += 1;
102        self.active_operations.push(event.operation);
103        Ok(())
104    }
105
106    pub fn get_stats(&self) -> &QuantumProcessingStats {
107        &self.stats
108    }
109}