name: wai-quantum resource estimation # Resource estimation from programs (wai/wai-quantum/src/engine/estimate/): # the logical counts against programs whose counts are known exactly, the # ladders through ancillas against the gates they replace on dense unitaries, # each rotation's T count against its synthesised word, the interchange # documents against the format's schema and a self-made fixture, the # frontier, the seals, and the planar model and its receipts # (quantum_resource, quantum_resource_receipt) beside them. # # In a release build the calibration test measures every point of the # decoders' table again (the rotated surface-code memory experiment, decoded # by exact matching and by union-find on the same shots), so the code model # the estimate calibrates from is held to what the decoders measure; a debug # build measures one point. The other platforms run these tests in the # crate's suites (wai-energy-receipts.yml, debug) and under wasm32-wasip2 # (wai-conformance.yml). concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true on: push: branches: [main] paths: - 'wai/wai-quantum/**' - 'rust-toolchain.toml' - '.github/workflows/wai-quantum-estimate.yml' pull_request: paths: - 'wai/wai-quantum/**' - 'rust-toolchain.toml' - '.github/workflows/wai-quantum-estimate.yml' jobs: relevant: name: does this change touch it runs-on: linux outputs: run: ${{ steps.gate.outputs.run }} steps: - uses: actions/checkout@v5 with: fetch-depth: 0 - id: gate run: | set -euo pipefail r=$(python3 scripts/pr-touches-paths.py .github/workflows/wai-quantum-estimate.yml \ "${{ github.event.pull_request.base.sha }}" \ "${{ github.event.pull_request.head.sha }}") echo "this change touches resource estimation: $r" echo "run=$r" >> "$GITHUB_OUTPUT" native: name: estimation and calibration ยท linux, release needs: relevant if: needs.relevant.outputs.run == 'true' runs-on: linux timeout-minutes: 60 steps: - uses: actions/checkout@v5 - name: Install Rust 1.99.1 shell: bash run: | export PATH="$HOME/.cargo/bin:$PATH" command -v rustup >/dev/null 2>&1 || \ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain 1.99.1 rustup toolchain install 1.99.1 --profile minimal rustup default 1.99.1 echo "$HOME/.cargo/bin" >> "$GITHUB_PATH" # A module filter is satisfied by any one test of the module, so each # module's tests are required by name to have run. - name: The estimate, the planar model and their receipts shell: bash working-directory: wai/wai-quantum run: | set -euo pipefail cargo test --locked --release --features full --lib -- engine::estimate quantum_resource 2>&1 | tee "$RUNNER_TEMP/estimate.log" grep -qE '^test result: ok\. [1-9][0-9]+ passed; 0 failed' "$RUNNER_TEMP/estimate.log" || { echo "::error::the estimate's tests did not pass"; exit 1; } for t in engine::estimate::calibration::tests::the_table_is_what_the_decoders_measure \ engine::estimate::count::tests::ladders_through_ancillas_are_the_controlled_gates_they_replace \ engine::estimate::count::tests::the_counts_of_programs_whose_counts_are_known_exactly \ engine::estimate::interchange::tests::the_fixture_meets_the_schema_and_its_totals_are_its_children_s \ engine::estimate::tests::an_estimate_is_sealed_verifies_and_a_changed_one_does_not \ quantum_resource::tests::the_summary_rows_are_reproduced \ quantum_resource_receipt::tests::a_counted_program_binds_its_digest_and_its_epsilon; do grep -q "^test $t \.\.\. ok$" "$RUNNER_TEMP/estimate.log" || { echo "::error::$t did not run and pass"; exit 1; } done - name: The engine without receipts still builds the estimate shell: bash working-directory: wai/wai-quantum run: cargo check --locked --no-default-features --features quantum_engine --lib