Skip to content

Commit 6c79f5a

Browse files
committed
Update some docs + cleanup of ByteMessage to use .add_outcomes and .outcomes for measurement result related things
1 parent 90f4d72 commit 6c79f5a

36 files changed

+523
-779
lines changed

crates/pecos-engines/examples/biased_measurement_example.rs

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,7 @@ fn example1_different_bias_levels(circ: &ByteMessage, quantum: &StateVecEngine)
6464
let results = system
6565
.process_as_system(circ.clone())
6666
.expect("Failed to process circuit");
67-
let measurements = results
68-
.parse_measurements()
69-
.expect("Failed to parse measurements");
67+
let measurements = results.outcomes().expect("Failed to parse measurements");
7068

7169
// Each measurement result is a value
7270
let result = measurements
@@ -118,9 +116,7 @@ fn example2_with_seed(circ: &ByteMessage) {
118116
let results = system
119117
.process_as_system(circ.clone())
120118
.expect("Failed to process circuit");
121-
let measurements = results
122-
.parse_measurements()
123-
.expect("Failed to parse measurements");
119+
let measurements = results.outcomes().expect("Failed to parse measurements");
124120

125121
let result = measurements
126122
.first()
@@ -175,9 +171,7 @@ fn example3_bell_state() {
175171
let results = system2
176172
.process_as_system(bell_circ.clone())
177173
.expect("Failed to process Bell circuit");
178-
let measurements = results
179-
.parse_measurements()
180-
.expect("Failed to parse measurements");
174+
let measurements = results.outcomes().expect("Failed to parse measurements");
181175

182176
// Combine the measurement results into a string
183177
let mut result = String::new();

crates/pecos-engines/examples/compare_noise_models.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ fn compare_depolarizing_with_general(circ: &ByteMessage) {
7070
.process_as_system(circ.clone())
7171
.expect("Failed to process with depolarizing noise");
7272
let measurements = results
73-
.parse_measurements()
73+
.outcomes()
7474
.expect("Failed to parse depolarizing measurements");
7575

7676
// Format result string
@@ -89,7 +89,7 @@ fn compare_depolarizing_with_general(circ: &ByteMessage) {
8989
.process_as_system(circ.clone())
9090
.expect("Failed to process with general noise");
9191
let measurements = results
92-
.parse_measurements()
92+
.outcomes()
9393
.expect("Failed to parse general measurements");
9494

9595
// Format result string
@@ -215,7 +215,7 @@ fn test_asymmetric_measurements() {
215215
.process_as_system(circ.clone())
216216
.expect("Failed to process with general noise");
217217
let measurements = results
218-
.parse_measurements()
218+
.outcomes()
219219
.expect("Failed to parse general measurements");
220220
let result = measurements
221221
.first()
@@ -230,7 +230,7 @@ fn test_asymmetric_measurements() {
230230
.process_as_system(circ.clone())
231231
.expect("Failed to process with depolarizing noise");
232232
let measurements = results
233-
.parse_measurements()
233+
.outcomes()
234234
.expect("Failed to parse depolarizing measurements");
235235
let result = measurements
236236
.first()

crates/pecos-engines/examples/general_noise_test.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ fn compare_biased_and_general(circ: &ByteMessage, quantum: &StateVecEngine) {
7878
.process_as_system(circ.clone())
7979
.expect("Failed to process circuit with biased noise");
8080
let biased_measurements = biased_results
81-
.parse_measurements()
81+
.outcomes()
8282
.expect("Failed to parse biased measurements");
8383
let biased_result = biased_measurements
8484
.first()
@@ -93,7 +93,7 @@ fn compare_biased_and_general(circ: &ByteMessage, quantum: &StateVecEngine) {
9393
.process_as_system(circ.clone())
9494
.expect("Failed to process circuit with general noise");
9595
let general_measurements = general_results
96-
.parse_measurements()
96+
.outcomes()
9797
.expect("Failed to parse general measurements");
9898
let general_result = general_measurements
9999
.first()
@@ -177,7 +177,7 @@ fn bell_state_comparison() {
177177
.process_as_system(bell_circ.clone())
178178
.expect("Failed to process bell circuit with biased noise");
179179
let biased_measurements = biased_results
180-
.parse_measurements()
180+
.outcomes()
181181
.expect("Failed to parse biased measurements");
182182

183183
// Combine the measurement results into a string
@@ -195,7 +195,7 @@ fn bell_state_comparison() {
195195
.process_as_system(bell_circ.clone())
196196
.expect("Failed to process bell circuit with general noise");
197197
let general_measurements = general_results
198-
.parse_measurements()
198+
.outcomes()
199199
.expect("Failed to parse general measurements");
200200

201201
// Combine the measurement results into a string

crates/pecos-engines/examples/run_noisy_circ.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,7 @@ fn main() {
4848
let results = system
4949
.process_as_system(circ.clone())
5050
.expect("failed to process circ");
51-
let meas = results
52-
.parse_measurements()
53-
.expect("failed to parse measurements");
51+
let meas = results.outcomes().expect("failed to parse measurements");
5452

5553
print!("\"");
5654
for &value in &meas {

crates/pecos-engines/examples/run_noisy_circ_with_general.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,7 @@ fn main() {
5454
let results = system
5555
.process_as_system(circ.clone())
5656
.expect("failed to process circ");
57-
let meas = results
58-
.parse_measurements()
59-
.expect("failed to parse measurements");
57+
let meas = results.outcomes().expect("failed to parse measurements");
6058

6159
print!("\"");
6260
for &value in &meas {

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

Lines changed: 33 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
66
use crate::byte_message::message::ByteMessage;
77
use crate::byte_message::protocol::{
8-
BatchHeader, GateCommandHeader, MeasurementHeader, MeasurementResultHeader, MessageFlags,
9-
MessageHeader, MessageType, calc_padding,
8+
BatchHeader, GateCommandHeader, MeasurementHeader, MessageFlags, MessageHeader, MessageType,
9+
OutcomeHeader, calc_padding,
1010
};
1111
use bytemuck::bytes_of;
1212
use pecos_core::QubitId;
@@ -21,10 +21,10 @@ use std::mem::size_of;
2121
/// Enum to track what kind of message is being built
2222
#[derive(Debug, PartialEq, Clone, Copy)]
2323
pub enum BuilderMode {
24-
Empty, // No operations added yet
25-
QuantumOperations, // Contains quantum operations
26-
MeasurementResults, // Contains measurement results
27-
ControlMessage, // Contains control messages like Flush
24+
Empty, // No operations added yet
25+
QuantumOperations, // Contains quantum operations
26+
MeasurementOutcomes, // Contains measurement outcomes
27+
ControlMessage, // Contains control messages like Flush
2828
}
2929

3030
/// Helper for building binary messages
@@ -77,10 +77,10 @@ impl ByteMessageBuilder {
7777
self
7878
}
7979

80-
/// Create a builder pre-configured for measurement results
80+
/// Create a builder pre-configured for measurement outcomes
8181
#[must_use]
82-
pub fn for_measurement_results(&mut self) -> &mut Self {
83-
self.mode = BuilderMode::MeasurementResults;
82+
pub fn for_outcomes(&mut self) -> &mut Self {
83+
self.mode = BuilderMode::MeasurementOutcomes;
8484
self.add_message(MessageType::BeginBatch, &[], MessageFlags::NONE);
8585
self
8686
}
@@ -98,7 +98,7 @@ impl ByteMessageBuilder {
9898
/// # Panics
9999
///
100100
/// This function will panic if:
101-
/// - Attempting to mix quantum operations and measurement results in the same message
101+
/// - Attempting to mix quantum operations and measurement outcomes in the same message
102102
/// - Attempting to mix control messages with other message types
103103
pub fn add_message(
104104
&mut self,
@@ -120,19 +120,19 @@ impl ByteMessageBuilder {
120120
}
121121
MessageType::GateCommand | MessageType::Measurement => {
122122
assert!(
123-
!(self.mode == BuilderMode::MeasurementResults),
124-
"Cannot mix quantum operations and measurement results in the same message"
123+
!(self.mode == BuilderMode::MeasurementOutcomes),
124+
"Cannot mix quantum operations and measurement outcomes in the same message"
125125
);
126126
if self.mode == BuilderMode::Empty {
127127
self.mode = BuilderMode::QuantumOperations;
128128
}
129129
}
130-
MessageType::MeasurementResult => {
130+
MessageType::Outcome => {
131131
assert!(
132132
!(self.mode == BuilderMode::QuantumOperations),
133-
"Cannot mix quantum operations and measurement results in the same message"
133+
"Cannot mix quantum operations and measurement outcomes in the same message"
134134
);
135-
self.mode = BuilderMode::MeasurementResults;
135+
self.mode = BuilderMode::MeasurementOutcomes;
136136
}
137137
MessageType::Flush | MessageType::Reset | MessageType::Error => {
138138
assert!(
@@ -236,29 +236,25 @@ impl ByteMessageBuilder {
236236
self
237237
}
238238

239-
/// Add multiple measurement results at once
239+
/// Add multiple measurement outcomes at once
240240
///
241241
/// # Panics
242242
///
243243
/// Panics if any result outcome is too large to fit in a u32.
244-
pub fn add_measurement_results(&mut self, results: &[usize]) -> &mut Self {
245-
for (i, &result) in results.iter().enumerate() {
246-
let is_last = i == results.len() - 1;
244+
pub fn add_outcomes(&mut self, outcomes: &[usize]) -> &mut Self {
245+
for (i, &result) in outcomes.iter().enumerate() {
246+
let is_last = i == outcomes.len() - 1;
247247
let flags = if is_last {
248248
MessageFlags::LAST_MESSAGE
249249
} else {
250250
MessageFlags::NONE
251251
};
252252

253-
let result_header = MeasurementResultHeader {
253+
let result_header = OutcomeHeader {
254254
outcome: u32::try_from(result).expect("Result outcome too large"),
255255
};
256256

257-
self.add_message(
258-
MessageType::MeasurementResult,
259-
bytes_of(&result_header),
260-
flags,
261-
);
257+
self.add_message(MessageType::Outcome, bytes_of(&result_header), flags);
262258
}
263259
self
264260
}
@@ -518,7 +514,7 @@ impl ByteMessageBuilder {
518514
/// consider using `reset()` instead, which preserves memory allocation.
519515
///
520516
/// After clearing, you'll need to configure the builder for the desired message type
521-
/// by calling `for_quantum_operations()` or `for_measurement_results()`.
517+
/// by calling `for_quantum_operations()` or `for_outcomes()`.
522518
pub fn clear(&mut self) -> &mut Self {
523519
*self = Self::new();
524520
self
@@ -532,7 +528,7 @@ impl ByteMessageBuilder {
532528
/// especially when creating many messages in sequence.
533529
///
534530
/// After resetting, you'll need to configure the builder for the desired message type
535-
/// by calling `for_quantum_operations()` or `for_measurement_results()`:
531+
/// by calling `for_quantum_operations()` or `for_outcomes()`:
536532
///
537533
/// ```
538534
/// # use pecos_engines::byte_message::ByteMessageBuilder;
@@ -593,7 +589,7 @@ impl ByteMessageBuilder {
593589
// Validate that a mode was explicitly set if operations were added
594590
assert!(
595591
!(self.msg_count > 0 && self.mode == BuilderMode::Empty),
596-
"Builder mode not specified. Call for_quantum_operations() or for_measurement_results() before adding operations."
592+
"Builder mode not specified. Call for_quantum_operations() or for_outcomes() before adding operations."
597593
);
598594

599595
// Add validation based on the builder's current mode
@@ -604,8 +600,8 @@ impl ByteMessageBuilder {
604600
self.add_flush(true);
605601
}
606602
}
607-
BuilderMode::QuantumOperations | BuilderMode::MeasurementResults => {
608-
// For quantum operations and measurement results, ensure we have both BeginBatch and EndBatch
603+
BuilderMode::QuantumOperations | BuilderMode::MeasurementOutcomes => {
604+
// For quantum operations and measurement outcomes, ensure we have both BeginBatch and EndBatch
609605
// Check if the last message is already an EndBatch
610606
let has_end_batch = self.buffer.len() >= size_of::<MessageHeader>() && {
611607
let header_offset = self.buffer.len() - size_of::<MessageHeader>();
@@ -685,12 +681,12 @@ mod tests {
685681

686682
#[test]
687683
fn test_builder_measurement_message() {
688-
// Create a builder for measurement results
684+
// Create a builder for measurement outcomes
689685
let mut builder = ByteMessageBuilder::new();
690-
let _ = builder.for_measurement_results();
686+
let _ = builder.for_outcomes();
691687

692-
// Add some measurement results
693-
builder.add_measurement_results(&[0]);
688+
// Add some measurement outcomes
689+
builder.add_outcomes(&[0]);
694690

695691
// Build the message
696692
let message = builder.build();
@@ -735,12 +731,12 @@ mod tests {
735731

736732
#[test]
737733
#[should_panic(
738-
expected = "Cannot mix quantum operations and measurement results in the same message"
734+
expected = "Cannot mix quantum operations and measurement outcomes in the same message"
739735
)]
740736
fn test_builder_type_checking() {
741-
// Create a builder for measurement results
737+
// Create a builder for measurement outcomes
742738
let mut builder = ByteMessageBuilder::new();
743-
let _ = builder.for_measurement_results();
739+
let _ = builder.for_outcomes();
744740

745741
// Try to add a gate (should panic)
746742
builder.add_h(&[0]);

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ pub fn dump_batch(data: &[u8]) -> String {
5959
}
6060

6161
// Try to parse measurements
62-
match message.parse_measurements() {
62+
match message.outcomes() {
6363
Ok(measurements) => {
6464
if !measurements.is_empty() {
6565
writeln!(
@@ -282,7 +282,7 @@ pub fn dump_batch_raw(data: &[u8]) -> String {
282282
20 => {
283283
// MeasurementResult - use modern structured parsing
284284
let message = ByteMessage::new(data);
285-
match message.parse_measurements() {
285+
match message.outcomes() {
286286
Ok(measurements) => {
287287
output.push_str(" Measurement Results:\n");
288288
for (i, measurement) in measurements.iter().enumerate() {

0 commit comments

Comments
 (0)