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    pub fn new(amplitudes: Vec<Complex64>) -> Self {
17        Self {
18            amplitudes,
19            num_qubits: N,
20        }
21    }
22
23    /// Get the state vector amplitudes
24    pub fn amplitudes(&self) -> &[Complex64] {
25        &self.amplitudes
26    }
27
28    /// Get the probabilities for each basis state
29    pub fn probabilities(&self) -> Vec<f64> {
30        self.amplitudes.iter().map(|amp| amp.norm_sqr()).collect()
31    }
32
33    /// Get the number of qubits
34    pub fn num_qubits(&self) -> usize {
35        self.num_qubits
36    }
37}
38
39/// Common trait for all quantum circuit simulators
40pub trait Simulator {
41    /// Run a quantum circuit and return the simulation result
42    fn run<const N: usize>(
43        &mut self,
44        circuit: &quantrs2_circuit::prelude::Circuit<N>,
45    ) -> crate::error::Result<SimulatorResult<N>>;
46}