ppvm_traits/traits/measure.rs
1// SPDX-FileCopyrightText: 2026 The PPVM Authors
2// SPDX-License-Identifier: Apache-2.0
3
4/// Projective Z-basis measurement returning a bare boolean outcome.
5pub trait Measure {
6 /// Measure qubit `addr0` in the computational basis. Returns
7 /// `true` for outcome `|1⟩`, `false` for `|0⟩`.
8 fn measure(&mut self, addr0: usize) -> bool;
9}
10
11/// Loss-aware Z-basis measurement.
12pub trait LossyMeasure {
13 /// Measure qubit `addr0`. Returns `Some(bit)` for an in-subspace
14 /// outcome, or `None` if the qubit has been lost.
15 fn measure(&mut self, addr0: usize) -> Option<bool>;
16
17 /// Explicit batched measurement: measure each target in order,
18 /// returning one result per target.
19 fn measure_many(&mut self, targets: &[usize]) -> Vec<Option<bool>> {
20 targets.iter().map(|&q| self.measure(q)).collect()
21 }
22}