quantrs2_sim/stabilizer/
stabilizersimulator_traits.rs1use crate::simulator::{Simulator, SimulatorResult};
12use quantrs2_circuit::prelude::*;
13use quantrs2_core::prelude::*;
14use scirs2_core::random::prelude::*;
15
16use super::functions::gate_to_stabilizer;
17use super::types::StabilizerSimulator;
18
19impl Simulator for StabilizerSimulator {
21 fn run<const N: usize>(
22 &mut self,
23 circuit: &Circuit<N>,
24 ) -> crate::error::Result<SimulatorResult<N>> {
25 let mut sim = Self::new(N);
26 for gate in circuit.gates() {
27 match gate_to_stabilizer(gate) {
28 Some(stab_gate) => sim.apply_gate(stab_gate)?,
29 None => {
30 return Err(crate::error::SimulatorError::UnsupportedOperation(format!(
34 "StabilizerSimulator cannot simulate non-Clifford gate '{}' on qubits {:?}",
35 gate.name(),
36 gate.qubits()
37 )));
38 }
39 }
40 }
41 let amplitudes = sim.get_statevector();
42 Ok(SimulatorResult::new(amplitudes))
43 }
44}