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 #[must_use]
17 pub const fn new(amplitudes: Vec<Complex64>) -> Self {
18 Self {
19 amplitudes,
20 num_qubits: N,
21 }
22 }
23
24 #[must_use]
26 pub fn amplitudes(&self) -> &[Complex64] {
27 &self.amplitudes
28 }
29
30 #[must_use]
32 pub fn probabilities(&self) -> Vec<f64> {
33 self.amplitudes
34 .iter()
35 .map(scirs2_core::Complex::norm_sqr)
36 .collect()
37 }
38
39 #[must_use]
41 pub const fn num_qubits(&self) -> usize {
42 self.num_qubits
43 }
44}
45
46pub trait Simulator {
48 fn run<const N: usize>(
50 &mut self,
51 circuit: &quantrs2_circuit::prelude::Circuit<N>,
52 ) -> crate::error::Result<SimulatorResult<N>>;
53}