stabilizer_ch_form_rust/form/
statevector.rs

1use crate::{StabilizerCHForm, error::Result};
2use ndarray::Array1;
3use num_complex::Complex64;
4
5impl StabilizerCHForm {
6    /// Represents this state as a statevector.
7    ///
8    /// NOTE:
9    ///  * This implementation iterates over all 2^n basis states. This functionality is
10    ///    mainly for testing and debugging purposes.
11    ///  * Uses little-endian convention for basis states.
12    pub fn to_statevector(&self) -> Result<Array1<Complex64>> {
13        let dim = 1 << self.num_qubits(); // 2^n
14        let mut statevector = ndarray::Array1::from_elem(dim, Complex64::new(0.0, 0.0));
15
16        for i in 0..dim {
17            let bitstring: ndarray::Array1<bool> = (0..self.num_qubits())
18                .map(|j| (i & (1 << j)) != 0)
19                .collect();
20            statevector[i] = self
21                .amplitude_at_computational_basis(&bitstring)?
22                .to_complex()
23                * self.global_phase();
24        }
25
26        Ok(statevector)
27    }
28}