quantrs2_sim/
simulator.rs1use scirs2_core::Complex64;
4
5#[derive(Debug, Clone)]
7pub struct SimulatorResult<const N: usize> {
8 pub amplitudes: Vec<Complex64>,
10 pub num_qubits: usize,
12}
13
14impl<const N: usize> SimulatorResult<N> {
15 pub fn new(amplitudes: Vec<Complex64>) -> Self {
17 Self {
18 amplitudes,
19 num_qubits: N,
20 }
21 }
22
23 pub fn amplitudes(&self) -> &[Complex64] {
25 &self.amplitudes
26 }
27
28 pub fn probabilities(&self) -> Vec<f64> {
30 self.amplitudes.iter().map(|amp| amp.norm_sqr()).collect()
31 }
32
33 pub fn num_qubits(&self) -> usize {
35 self.num_qubits
36 }
37}
38
39pub trait Simulator {
41 fn run<const N: usize>(
43 &mut self,
44 circuit: &quantrs2_circuit::prelude::Circuit<N>,
45 ) -> crate::error::Result<SimulatorResult<N>>;
46}