qec-code 0.3.0

Rust primitives for constructing and analyzing quantum error-correcting codes
Documentation
use crate::code::StabilizerCode;
use crate::codes::built_in_css::built_in_css_checks;
use crate::css::CssCode;
use crate::error::Result;

#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Steane {
    code: StabilizerCode,
}

impl Steane {
    pub fn new() -> Result<Self> {
        let checks = built_in_css_checks("steane")?;
        let hx = row_supports_to_dense(checks.num_cols, &checks.hx);
        let hz = row_supports_to_dense(checks.num_cols, &checks.hz);
        let css = CssCode::from_hx_hz(hx, hz)?;

        Ok(Self {
            code: css.code().clone(),
        })
    }

    pub fn code(&self) -> &StabilizerCode {
        &self.code
    }
}

fn row_supports_to_dense(num_cols: usize, rows: &[Vec<usize>]) -> Vec<Vec<u8>> {
    let mut matrix = vec![vec![0; num_cols]; rows.len()];

    for (row_idx, row) in rows.iter().enumerate() {
        for &col in row {
            matrix[row_idx][col] = 1;
        }
    }

    matrix
}