1use crate::prelude::*;
5use num::complex::Complex;
6use std::fmt::Display;
7use std::ops::{BitAnd, Shl};
8
9impl<T: Config> Display for Tableau<T> {
10 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
11 writeln!(f, "Tableau ({} qubits):", self.n_qubits)?;
12 writeln!(f, " Destabilizers: [")?;
13 for stab in self.destabilizers().iter() {
14 writeln!(f, " {}", stab)?;
15 }
16 writeln!(f, " ]")?;
17 writeln!(f, " Stabilizers: [")?;
18 for stab in self.stabilizers().iter() {
19 writeln!(f, " {}", stab)?;
20 }
21 writeln!(f, " ]")?;
22 Ok(())
23 }
24}
25
26impl<T: Config, I, C: SparseVector<Complex<T::Coeff>, I>> Display for GeneralizedTableau<T, I, C>
27where
28 Complex<T::Coeff>: Display,
29 <T as Config>::Coeff: num::Num,
30 I: TableauIndex + Display,
31 <I as BitAnd<<I as Shl<usize>>::Output>>::Output: PartialEq<I>,
32{
33 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
34 writeln!(f, "Generalized Tableau ({} qubits):", self.tableau.n_qubits)?;
35 writeln!(f, " Tableau:")?;
36 writeln!(f, "{}", self.tableau)?;
37 writeln!(f, " Coefficients:")?;
38 for (coeff, idx) in self.coefficients.clone().into_iter() {
39 writeln!(f, " Index {}: {}", idx, coeff)?;
40 }
41 writeln!(f, " Qubit status: [")?;
42 for (i, &occ) in self.qubit_status.iter().enumerate() {
43 writeln!(f, " Qubit {}: {:?}", i, occ)?;
44 }
45 writeln!(f, " ]")?;
46 Ok(())
47 }
48}