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, on the step clock # and the reaction-limited clock. # # The published-architecture check (src/published_architectures.rs) feeds the # stated assumptions of published resource estimates into the estimators # (quantum_arch, quantum_bicycle and the estimate job), holds every row to its # published figure (tests/data/published_figures.tsv: the digits it is printed # to, or a guard on ours) and the page docs/published-architectures.md to what # they give. Its search over 4¹¹ Paulis runs in a release build only. # # 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: gate 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 \ quantum_resource::tests::the_step_clock_is_the_estimate_bit_for_bit_and_the_reaction_clock_keeps_pace \ quantum_resource_receipt::tests::on_the_step_clock_a_clocked_job_is_the_job_and_on_the_reaction_clock_another \ engine::estimate::tests::without_a_clock_the_answer_is_the_step_clock_s_and_names_none \ engine::estimate::tests::the_reaction_clock_runs_each_toffoli_in_a_tick_with_factories_to_keep_up \ engine::estimate::tests::a_reaction_clock_estimate_is_sealed_as_a_clocked_job \ quantum_resource::tests::a_reaction_time_is_never_shorter_than_the_qubit_s_measurement \ quantum_resource::tests::a_machine_past_sixty_four_bits_is_refused_and_not_wrapped \ quantum_resource_receipt::tests::a_reaction_clock_receipt_names_its_clock_and_a_step_clock_receipt_is_unchanged \ engine::estimate::tests::a_reaction_time_shorter_than_a_measurement_is_refused \ engine::estimate::tests::the_answer_echoes_the_reaction_time_as_written \ engine::estimate::tests::the_schemas_say_of_the_clock_what_the_engine_takes; do grep -q "^test $t \.\.\. ok$" "$RUNNER_TEMP/estimate.log" || { echo "::error::$t did not run and pass"; exit 1; } done - name: Published architectures, re-estimated, and the page that prints them shell: bash working-directory: wai/wai-quantum run: | set -euo pipefail cargo test --locked --release --features full --lib -- quantum_arch:: quantum_bicycle:: published_architectures:: 2>&1 | tee "$RUNNER_TEMP/published.log" grep -qE '^test result: ok\. [1-9][0-9]+ passed; 0 failed; 0 ignored' "$RUNNER_TEMP/published.log" || { echo "::error::the published-architecture tests did not all run and pass"; exit 1; } for t in published_architectures::tests::the_page_is_what_the_estimators_give \ published_architectures::tests::every_row_holds_to_its_published_figure \ published_architectures::tests::the_ours_column_holds_only_ours_and_the_text_says_what_the_sources_say \ published_architectures::tests::section_2_11_is_the_parallel_basis_rounded_and_the_serial_figure_is_ours \ published_architectures::tests::the_reaction_rows_say_what_they_rest_on \ quantum_bicycle::tests::the_cost_tables_are_what_the_search_finds \ quantum_bicycle::tests::the_source_s_mean_costs_come_from_taking_z_by_the_inverse \ quantum_bicycle::tests::the_fits_give_the_printed_rates \ quantum_arch::tests::the_2021_rsa_table_is_reproduced_to_its_printed_digits \ quantum_arch::tests::the_chemistry_estimate_is_priced_by_the_same_clock; do grep -q "^test $t \.\.\. ok$" "$RUNNER_TEMP/published.log" || { echo "::error::$t did not run and pass"; exit 1; } done cargo run --locked --release --example published_architectures --features full - 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