1use crate::code::StabilizerCode;
2use crate::codes::built_in_css::built_in_css_checks;
3use crate::css::CssCode;
4use crate::error::Result;
5
6#[derive(Debug, Clone, PartialEq, Eq)]
7pub struct Steane {
8 code: StabilizerCode,
9}
10
11impl Steane {
12 pub fn new() -> Result<Self> {
13 let checks = built_in_css_checks("steane")?;
14 let hx = row_supports_to_dense(checks.num_cols, &checks.hx);
15 let hz = row_supports_to_dense(checks.num_cols, &checks.hz);
16 let css = CssCode::from_hx_hz(hx, hz)?;
17
18 Ok(Self {
19 code: css.code().clone(),
20 })
21 }
22
23 pub fn code(&self) -> &StabilizerCode {
24 &self.code
25 }
26}
27
28fn row_supports_to_dense(num_cols: usize, rows: &[Vec<usize>]) -> Vec<Vec<u8>> {
29 let mut matrix = vec![vec![0; num_cols]; rows.len()];
30
31 for (row_idx, row) in rows.iter().enumerate() {
32 for &col in row {
33 matrix[row_idx][col] = 1;
34 }
35 }
36
37 matrix
38}