Skip to content

Commit 978cd5f

Browse files
committed
Adding GeneralDepolarizingNoise
1 parent fdb8fb1 commit 978cd5f

File tree

7 files changed

+384
-5
lines changed

7 files changed

+384
-5
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
use pecos_engines::byte_message::ByteMessage;
2+
use pecos_engines::engines::quantum::StateVecEngine;
3+
use pecos_engines::errors::QueueError;
4+
use pecos_engines::{Engine, GeneralDepolarizingNoise};
5+
use pecos_engines::{EngineSystem, QuantumSystem};
6+
7+
fn main() -> () {
8+
let circ = ByteMessage::quantum_operations_builder()
9+
.add_h(&[0])
10+
.add_cx(&[0], &[1])
11+
.add_measurements(&[0], &[0])
12+
.add_measurements(&[1], &[1])
13+
.build();
14+
15+
let quantum = Box::new(StateVecEngine::new(2));
16+
let noise = Box::new(GeneralDepolarizingNoise::new(0.1, 0.1, 0.1, 0.1));
17+
18+
let mut system = QuantumSystem::new(noise, quantum);
19+
20+
// system.set_seed(42).expect("failed to set seed");
21+
22+
print!("[");
23+
for _ in 0..20 {
24+
system.reset().expect("failed to reset");
25+
let results = system
26+
.process_as_system(circ.clone())
27+
.expect("failed to process circ");
28+
let meas = results
29+
.parse_measurements()
30+
.expect("failed to parse measurements");
31+
32+
print!("\"");
33+
for &(_, value) in &meas {
34+
print!("{value}");
35+
}
36+
print!("\", ");
37+
}
38+
print!("]");
39+
40+
println!();
41+
}

crates/pecos-engines/src/byte_message/builder.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ impl ByteMessageBuilder {
184184
let header_size = size_of::<QuantumGateHeader>();
185185
let qubits_size = gate.qubits.len() * size_of::<u32>();
186186
let params_size = match gate.gate_type {
187-
GateType::RZ => size_of::<f64>(),
187+
GateType::RZ | GateType::RZZ => size_of::<f64>(),
188188
GateType::R1XY => 2 * size_of::<f64>(),
189189
_ => 0,
190190
};

crates/pecos-engines/src/byte_message/gate_type.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,9 @@ pub struct QuantumGate {
7979
pub params: Vec<f64>,
8080
/// Optional result ID for measurement gates
8181
pub result_id: Option<usize>,
82+
/// Whether the gate should have noise applied to it
83+
pub noiseless: bool,
84+
// TODO: encode noiseless in the byte representation...
8285
}
8386

8487
impl QuantumGate {
@@ -95,6 +98,7 @@ impl QuantumGate {
9598
qubits,
9699
params,
97100
result_id,
101+
noiseless: false,
98102
}
99103
}
100104

@@ -162,6 +166,21 @@ impl QuantumGate {
162166
pub fn prep(qubit: usize) -> Self {
163167
Self::new(GateType::Prep, vec![qubit], vec![], None)
164168
}
169+
170+
#[must_use]
171+
pub fn set_noiseless(mut self) -> Self {
172+
self.noiseless = true;
173+
self
174+
}
175+
176+
#[must_use] pub fn set_noisy(mut self) -> Self {
177+
self.noiseless = false;
178+
self
179+
}
180+
181+
#[must_use] pub fn is_noiseless(&self) -> bool {
182+
self.noiseless
183+
}
165184
}
166185

167186
#[cfg(test)]

crates/pecos-engines/src/byte_message/message.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
use crate::byte_message::builder::ByteMessageBuilder;
22
use crate::byte_message::gate_type::{GateType, QuantumGate};
33
use crate::byte_message::protocol::{
4-
BatchHeader, MeasurementHeader, MeasurementResultHeader, MessageHeader, MessageType,
5-
QuantumGateHeader, calc_padding,
4+
calc_padding, BatchHeader, MeasurementHeader, MeasurementResultHeader, MessageHeader,
5+
MessageType, QuantumGateHeader,
66
};
77
use crate::errors::QueueError;
88
use bytemuck::from_bytes;
@@ -802,7 +802,7 @@ impl ByteMessage {
802802
#[cfg(test)]
803803
mod tests {
804804
use super::*;
805-
use crate::engines::{Engine, quantum::StateVecEngine};
805+
use crate::engines::{quantum::StateVecEngine, Engine};
806806

807807
#[test]
808808
fn test_bytemap_builder() {

crates/pecos-engines/src/engines/noise.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
pub mod depolarizing;
2+
pub mod general_depolarizing;
23
pub mod pass_through;
34

45
pub use depolarizing::DepolarizingNoise;
6+
pub use general_depolarizing::GeneralDepolarizingNoise;
57
pub use pass_through::PassThroughNoise;
68

79
use crate::byte_message::ByteMessage;

0 commit comments

Comments
 (0)