rustiq_core/structures/
pauli_like.rs1use super::clifford_circuit::{CliffordCircuit, CliffordGate};
2
3pub trait PauliLike {
5 fn h(&mut self, i: usize);
7 fn s(&mut self, i: usize);
9 fn sd(&mut self, i: usize);
11 fn sqrt_x(&mut self, i: usize);
13 fn sqrt_xd(&mut self, i: usize);
15 fn cnot(&mut self, i: usize, j: usize);
17 fn cz(&mut self, i: usize, j: usize) {
19 self.h(j);
20 self.cnot(i, j);
21 self.h(j);
22 }
23 fn conjugate_with_gate(&mut self, gate: &CliffordGate) {
25 match gate {
26 CliffordGate::CNOT(i, j) => self.cnot(*i, *j),
27 CliffordGate::CZ(i, j) => self.cz(*i, *j),
28 CliffordGate::H(i) => self.h(*i),
29 CliffordGate::S(i) => self.s(*i),
30 CliffordGate::Sd(i) => self.sd(*i),
31 CliffordGate::SqrtX(i) => self.sqrt_x(*i),
32 CliffordGate::SqrtXd(i) => self.sqrt_xd(*i),
33 }
34 }
35 fn conjugate_with_circuit(&mut self, circuit: &CliffordCircuit) {
37 for gate in circuit.gates.iter() {
38 self.conjugate_with_gate(gate);
39 }
40 }
41}