Skip to main content

ppvm_traits/traits/
reset.rs

1// SPDX-FileCopyrightText: 2026 The PPVM Authors
2// SPDX-License-Identifier: Apache-2.0
3
4/// Reset one qubit to a computational/Pauli basis state.
5pub trait Reset: crate::traits::Clifford + crate::traits::CliffordExtensions {
6    /// Reset one qubit to `|0⟩` (stim `R`/`RZ`).
7    fn reset(&mut self, addr0: usize);
8    /// stim `RZ` alias — reset to `|0⟩`.
9    fn reset_z(&mut self, addr0: usize) {
10        self.reset(addr0)
11    }
12    /// stim `RX` — reset to `|+⟩`.
13    fn reset_x(&mut self, addr0: usize) {
14        self.reset(addr0);
15        self.h(addr0);
16    }
17    /// stim `RY` — reset to `|i⟩`.
18    fn reset_y(&mut self, addr0: usize) {
19        self.reset(addr0);
20        self.h(addr0);
21        self.s(addr0);
22    }
23
24    /// Explicit batched reset to `|0⟩`.
25    fn reset_many(&mut self, targets: &[usize]) {
26        for &q in targets {
27            self.reset(q);
28        }
29    }
30
31    /// Explicit batched `RZ` alias.
32    fn reset_z_many(&mut self, targets: &[usize]) {
33        self.reset_many(targets)
34    }
35
36    /// Explicit batched `RX`.
37    fn reset_x_many(&mut self, targets: &[usize]) {
38        for &q in targets {
39            self.reset_x(q);
40        }
41    }
42
43    /// Explicit batched `RY`.
44    fn reset_y_many(&mut self, targets: &[usize]) {
45        for &q in targets {
46            self.reset_y(q);
47        }
48    }
49}