Skip to main content

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}