Skip to main content

qec_code/codes/
steane.rs

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}