qec-code 0.3.0

Rust primitives for constructing and analyzing quantum error-correcting codes
Documentation
use std::fs;
use std::path::Path;

use qec_code::family_contract::{parse_css_construction_json, CssFamilySpec, RequestedFamilyId};
use qec_code::QecError;

const CONTRACT: &str = include_str!("../doc/hyperbolic_5_5_contract.md");
const PERTURBED_HGP_CONTRACT: &str = include_str!("../doc/perturbed_hgp_contract.md");

fn assert_contains(haystack: &str, needle: &str) {
    assert!(
        haystack.contains(needle),
        "missing contract marker: {needle}"
    );
}

fn assert_src_tree_does_not_define_callable_hyperbolic_5_5() {
    let src = Path::new(env!("CARGO_MANIFEST_DIR")).join("src");
    let forbidden = [
        "fn hyperbolic_5_5",
        "pub fn hyperbolic_5_5",
        "hyperbolic_5_5_css_checks",
        "construct_hyperbolic_5_5",
        "Hyperbolic55Spec",
    ];
    for path in rust_sources(&src) {
        let text = fs::read_to_string(&path).expect("Rust source should be readable");
        for marker in forbidden {
            assert!(
                !text.contains(marker),
                "{} must not define callable hyperbolic_5_5 runtime surface via {marker}",
                path.display()
            );
        }
    }
}

fn assert_src_tree_does_not_define_callable_perturbed_hgp() {
    let src = Path::new(env!("CARGO_MANIFEST_DIR")).join("src");
    let forbidden = [
        "fn perturbed_hgp",
        "pub fn perturbed_hgp",
        "perturbed_hgp_css_checks",
        "construct_perturbed_hgp",
        "PerturbedHgpSpec",
    ];
    for path in rust_sources(&src) {
        let text = fs::read_to_string(&path).expect("Rust source should be readable");
        for marker in forbidden {
            assert!(
                !text.contains(marker),
                "{} must not define callable perturbed_hgp runtime surface via {marker}",
                path.display()
            );
        }
    }
}

fn rust_sources(root: &Path) -> Vec<std::path::PathBuf> {
    let mut paths = Vec::new();
    collect_rust_sources(root, &mut paths);
    paths.sort();
    paths
}

fn collect_rust_sources(root: &Path, paths: &mut Vec<std::path::PathBuf>) {
    for entry in fs::read_dir(root).expect("source directory should be readable") {
        let entry = entry.expect("source directory entry should be readable");
        let path = entry.path();
        if path.is_dir() {
            collect_rust_sources(&path, paths);
        } else if path.extension().and_then(|extension| extension.to_str()) == Some("rs") {
            paths.push(path);
        }
    }
}

#[test]
fn hyperbolic_5_5_contract_is_complete_and_deferred() {
    assert_contains(CONTRACT, "# Hyperbolic {5,5} Quotient Contract");
    assert_contains(CONTRACT, "contract_version: 1");
    assert_contains(CONTRACT, "schema_version = 1");
    assert_contains(CONTRACT, "construction = \"hyperbolic_5_5_quotient\"");
    assert_contains(CONTRACT, "## Input Contract");
    assert_contains(CONTRACT, "## Quotient Input Choices");
    assert_contains(CONTRACT, "permutation quotient");
    assert_contains(CONTRACT, "subgroup");
    assert_contains(CONTRACT, "## Coxeter Presentation");
    assert_contains(CONTRACT, "r0^2 = r1^2 = r2^2 = 1");
    assert_contains(CONTRACT, "(r0 r1)^5 = 1");
    assert_contains(CONTRACT, "(r1 r2)^5 = 1");
    assert_contains(CONTRACT, "(r0 r2)^2 = 1");
    assert_contains(CONTRACT, "## Flag-Orbit Enumeration");
    assert_contains(CONTRACT, "vertices = orbits of <r1, r2>");
    assert_contains(CONTRACT, "edges = orbits of <r0, r2>");
    assert_contains(CONTRACT, "faces = orbits of <r0, r1>");
    assert_contains(CONTRACT, "## Canonical Ordering");
    assert_contains(CONTRACT, "independent of hash-map iteration");
    assert_contains(CONTRACT, "## Boundary Maps");
    assert_contains(CONTRACT, "H_X = boundary_1");
    assert_contains(CONTRACT, "H_Z = transpose(boundary_2)");
    assert_contains(CONTRACT, "## Validation");
    assert_contains(CONTRACT, "quotient transitivity");
    assert_contains(CONTRACT, "manifold incidence");
    assert_contains(CONTRACT, "orientability");
    assert_contains(CONTRACT, "torsion");
    assert_contains(CONTRACT, "boundary * boundary = 0");
    assert_contains(CONTRACT, "## Typed Failure Modes");
    assert_contains(CONTRACT, "InvalidCoxeterQuotient");
    assert_contains(CONTRACT, "failed_relation");
    assert_contains(CONTRACT, "## Pure-Rust Algorithms");
    assert_contains(CONTRACT, "union-find");
    assert_contains(CONTRACT, "Todd-Coxeter");
    assert_contains(CONTRACT, "## Resource Limits");
    assert_contains(CONTRACT, "max_flags = 200000");
    assert_contains(CONTRACT, "5 seconds");
    assert_contains(CONTRACT, "512 MiB");
    assert_contains(CONTRACT, "## Fixture: Small Stellated Dodecahedron");
    assert_contains(CONTRACT, "V = 12");
    assert_contains(CONTRACT, "E = 30");
    assert_contains(CONTRACT, "F = 12");
    assert_contains(CONTRACT, "code = [[30,8,3]]");
    assert_contains(CONTRACT, "m_x = 12");
    assert_contains(CONTRACT, "m_z = 12");
    assert_contains(CONTRACT, "rank_x = 11");
    assert_contains(CONTRACT, "rank_z = 11");
    assert_contains(CONTRACT, "x_check_weight = 5");
    assert_contains(CONTRACT, "z_check_weight = 5");
    assert_contains(CONTRACT, "## Negative Quotient Fixture");
    assert_contains(CONTRACT, "violates `(r0 r1)^5 = 1`");
    assert_contains(CONTRACT, "failed_relation = \"(r0 r1)^5 = 1\"");
    assert_contains(CONTRACT, "## Split Decision");
    assert_contains(CONTRACT, "one implementation issue");
    assert_contains(CONTRACT, "quotient enumeration");
    assert_contains(CONTRACT, "cellulation");
    assert_contains(CONTRACT, "## Deferred Runtime Status");
    assert_contains(CONTRACT, "No callable runtime stub");

    assert!(
        !CssFamilySpec::callable_requested_family_ids().contains(&RequestedFamilyId::Hyperbolic55),
        "hyperbolic_5_5 must remain absent from callable family IDs"
    );
    assert_eq!(
        parse_css_construction_json(
            r#"{"schema_version":1,"construction":"hyperbolic_5_5_quotient","num_flags":4,"r0":[1,0,3,2],"r1":[2,3,0,1],"r2":[2,3,0,1]}"#
        ),
        Err(QecError::UnknownCssConstruction {
            construction: "hyperbolic_5_5_quotient".to_owned(),
        }),
        "hyperbolic_5_5 quotient inputs must remain non-callable until implementation"
    );
    assert_src_tree_does_not_define_callable_hyperbolic_5_5();
}

#[test]
fn perturbed_hgp_contract_is_grounded_or_explicitly_unsupported() {
    assert_contains(
        PERTURBED_HGP_CONTRACT,
        "# Perturbed HGP Source-Grounding Decision Record",
    );
    assert_contains(PERTURBED_HGP_CONTRACT, "contract_version: 1");
    assert_contains(PERTURBED_HGP_CONTRACT, "family_id = \"perturbed_hgp\"");
    assert_contains(
        PERTURBED_HGP_CONTRACT,
        "selection_status = \"explicitly_unsupported\"",
    );
    assert_contains(
        PERTURBED_HGP_CONTRACT,
        "disposition_decision = \"remain_deferred_unsupported\"",
    );
    assert_contains(PERTURBED_HGP_CONTRACT, "## Searched Terminology");
    assert_contains(PERTURBED_HGP_CONTRACT, "\"perturbed HGP\"");
    assert_contains(PERTURBED_HGP_CONTRACT, "\"perturbed_hgp\"");
    assert_contains(PERTURBED_HGP_CONTRACT, "\"perturbed hypergraph product\"");
    assert_contains(PERTURBED_HGP_CONTRACT, "\"cross swap\"");
    assert_contains(PERTURBED_HGP_CONTRACT, "## Source Log");
    assert_contains(PERTURBED_HGP_CONTRACT, "arXiv:0903.0566");
    assert_contains(PERTURBED_HGP_CONTRACT, "arXiv:2511.04634");
    assert_contains(PERTURBED_HGP_CONTRACT, "arXiv:2501.09622");
    assert_contains(PERTURBED_HGP_CONTRACT, "arXiv:2409.02193");
    assert_contains(PERTURBED_HGP_CONTRACT, "arXiv:2601.08824");
    assert_contains(PERTURBED_HGP_CONTRACT, "Error Correction Zoo");
    assert_contains(PERTURBED_HGP_CONTRACT, "GitHub code search");
    assert_contains(PERTURBED_HGP_CONTRACT, "## Candidate Definitions And Dispositions");
    assert_contains(PERTURBED_HGP_CONTRACT, "Standard hypergraph product");
    assert_contains(PERTURBED_HGP_CONTRACT, "Okada-Kasai cross-swap repair");
    assert_contains(PERTURBED_HGP_CONTRACT, "HGP optimization by random walks");
    assert_contains(PERTURBED_HGP_CONTRACT, "weight-reduced HGP");
    assert_contains(PERTURBED_HGP_CONTRACT, "active-orthogonality APM-LDPC");
    assert_contains(PERTURBED_HGP_CONTRACT, "Rejected");
    assert_contains(PERTURBED_HGP_CONTRACT, "## Disposition Decision");
    assert_contains(PERTURBED_HGP_CONTRACT, "No construction is selected");
    assert_contains(PERTURBED_HGP_CONTRACT, "## No Selected Construction");
    assert_contains(PERTURBED_HGP_CONTRACT, "selected_primary_source = none");
    assert_contains(PERTURBED_HGP_CONTRACT, "perturbation_rule = none");
    assert_contains(PERTURBED_HGP_CONTRACT, "positive_fixture = none");
    assert_contains(PERTURBED_HGP_CONTRACT, "negative_fixture = none");
    assert_contains(PERTURBED_HGP_CONTRACT, "orthogonality_preservation_rule = none");
    assert_contains(PERTURBED_HGP_CONTRACT, "pure_rust_input_schema = none");
    assert_contains(PERTURBED_HGP_CONTRACT, "## Would-Be Selected Contract Requirements");
    assert_contains(PERTURBED_HGP_CONTRACT, "versioned pure-Rust input schema");
    assert_contains(PERTURBED_HGP_CONTRACT, "orthogonality-preservation rule");
    assert_contains(PERTURBED_HGP_CONTRACT, "one exact positive fixture");
    assert_contains(PERTURBED_HGP_CONTRACT, "one deliberately nonorthogonal negative fixture");
    assert_contains(PERTURBED_HGP_CONTRACT, "resource limits");
    assert_contains(PERTURBED_HGP_CONTRACT, "## Provenance And License Compatibility");
    assert_contains(PERTURBED_HGP_CONTRACT, "Apache-2.0");
    assert_contains(PERTURBED_HGP_CONTRACT, "Creative Commons");
    assert_contains(PERTURBED_HGP_CONTRACT, "## Follow-Up Scope");
    assert_contains(PERTURBED_HGP_CONTRACT, "No implementation issue is filed");
    assert_contains(PERTURBED_HGP_CONTRACT, "## Deferred Runtime Status");
    assert_contains(PERTURBED_HGP_CONTRACT, "No callable runtime stub");

    assert!(
        !CssFamilySpec::callable_requested_family_ids().contains(&RequestedFamilyId::PerturbedHgp),
        "perturbed_hgp must remain absent from callable family IDs"
    );
    assert_eq!(
        parse_css_construction_json(
            r#"{"schema_version":1,"construction":"perturbed_hgp","base":{"schema_version":1,"construction":"hypergraph_product","left":{"num_cols":2,"rows":[[0,1]]},"right":{"num_cols":2,"rows":[[0,1]]}},"operations":[]}"#
        ),
        Err(QecError::UnknownCssConstruction {
            construction: "perturbed_hgp".to_owned(),
        }),
        "perturbed_hgp inputs must remain non-callable until maintainers approve a unique construction"
    );
    assert_src_tree_does_not_define_callable_perturbed_hgp();
}