quantrs2_sim/
simulator.rs

1//! Common simulator interface and results for quantum circuit simulations.
2
3use scirs2_core::Complex64;
4
5/// Result of a quantum circuit simulation
6#[derive(Debug, Clone)]
7pub struct SimulatorResult<const N: usize> {
8    /// State vector amplitudes (complex coefficients)
9    pub amplitudes: Vec<Complex64>,
10    /// Number of qubits
11    pub num_qubits: usize,
12}
13
14impl<const N: usize> SimulatorResult<N> {
15    /// Create a new simulator result with the given amplitudes
16    #[must_use]
17    pub const fn new(amplitudes: Vec<Complex64>) -> Self {
18        Self {
19            amplitudes,
20            num_qubits: N,
21        }
22    }
23
24    /// Get the state vector amplitudes
25    #[must_use]
26    pub fn amplitudes(&self) -> &[Complex64] {
27        &self.amplitudes
28    }
29
30    /// Get the probabilities for each basis state
31    #[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    /// Get the number of qubits
40    #[must_use]
41    pub const fn num_qubits(&self) -> usize {
42        self.num_qubits
43    }
44}
45
46/// Common trait for all quantum circuit simulators
47pub trait Simulator {
48    /// Run a quantum circuit and return the simulation result
49    fn run<const N: usize>(
50        &mut self,
51        circuit: &quantrs2_circuit::prelude::Circuit<N>,
52    ) -> crate::error::Result<SimulatorResult<N>>;
53}