Skip to main content

ppvm_tableau/
display.rs

1// SPDX-FileCopyrightText: 2026 The PPVM Authors
2// SPDX-License-Identifier: Apache-2.0
3
4use 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}