wai-quantum 0.7.0, the rest: a durable job service, error correction and mitigation, views in agent hosts, and the docs and course #524
414 changed files with 87988 additions and 12803 deletions
19
.github/workflows/wai-quantum-cli.yml
vendored
19
.github/workflows/wai-quantum-cli.yml
vendored
|
|
@ -4,7 +4,11 @@ name: wai-quantum command line
|
|||
# warnings as errors, with and without `submit`; its smoke checks (smoke.sh: lint,
|
||||
# plan, run, verify and a forged result refused, key, draw, MCP over stdio, the
|
||||
# research tools); and the WASI component, whose output under wasmtime equals the
|
||||
# native build's byte for byte. On macOS, also with the GPU state vector.
|
||||
# native build's byte for byte. On macOS, also with the GPU state vector. Its tests
|
||||
# include the model harness (src/eval.rs): every task's reference solved and an
|
||||
# empty program not, a scripted run, a model server on this machine asked and one
|
||||
# elsewhere refused, and the corpus (wai/quantum-conformance/eval/) held to the
|
||||
# task set.
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
|
|
@ -17,6 +21,7 @@ on:
|
|||
- 'wai/wai-quantum/**'
|
||||
- 'wai/wai-quantum-cli/**'
|
||||
- 'wai/wai-quantum-qpu/**'
|
||||
- 'wai/quantum-conformance/eval/**'
|
||||
- 'rust-toolchain.toml'
|
||||
- '.github/workflows/wai-quantum-cli.yml'
|
||||
pull_request:
|
||||
|
|
@ -24,6 +29,7 @@ on:
|
|||
- 'wai/wai-quantum/**'
|
||||
- 'wai/wai-quantum-cli/**'
|
||||
- 'wai/wai-quantum-qpu/**'
|
||||
- 'wai/quantum-conformance/eval/**'
|
||||
- 'rust-toolchain.toml'
|
||||
- '.github/workflows/wai-quantum-cli.yml'
|
||||
|
||||
|
|
@ -80,6 +86,17 @@ jobs:
|
|||
an_agent_lists_estimates_is_refused_and_runs_only_with_confirm_cost; do
|
||||
grep -q "^test $t \.\.\. ok$" "$RUNNER_TEMP/test.log" || { echo "::error::$t did not run and pass"; exit 1; }
|
||||
done
|
||||
# The model harness and the views in an agent's host, each test by name.
|
||||
for t in eval::tests::every_task_s_reference_is_solved_and_an_empty_program_is_not \
|
||||
eval::tests::a_scripted_run_reports_what_the_engine_found \
|
||||
eval::tests::a_model_on_this_machine_is_asked_and_one_elsewhere_is_refused \
|
||||
eval::tests::the_corpus_is_the_task_set_written_three_ways \
|
||||
eval::tests::an_answer_is_read_for_its_program_and_scored \
|
||||
mcp::tests::a_host_that_draws_views_gets_them_and_one_that_does_not_gets_words; do
|
||||
grep -q "^test $t \.\.\. ok$" "$RUNNER_TEMP/test.log" || { echo "::error::$t did not run and pass"; exit 1; }
|
||||
done
|
||||
# The token counter needs a model's vocabulary to run; here it is only read.
|
||||
python3 -I -c 'import ast, sys; ast.parse(open(sys.argv[1]).read())' ../quantum-conformance/eval/token_cost.py
|
||||
cargo clippy --locked --release --all-targets -- -D warnings
|
||||
cargo clippy --locked --release --all-targets --no-default-features -- -D warnings
|
||||
- name: The smoke checks
|
||||
|
|
|
|||
36
.github/workflows/wai-quantum-contract.yml
vendored
36
.github/workflows/wai-quantum-contract.yml
vendored
|
|
@ -12,14 +12,20 @@ name: wai-quantum contract
|
|||
# when crates.io holds a newer version than a baseline here, so a baseline
|
||||
# does not go stale unseen.
|
||||
# - schemas: the schema tests, each by name. The engine's: every schema file
|
||||
# reads and names itself, every method's job and every engine tool's answer
|
||||
# follows its schema with no member it does not name, and receipts issued
|
||||
# reads and names itself, every method's job, a set, a result's provenance,
|
||||
# every error-correction answer, a mitigated job and every engine tool's
|
||||
# answer follow their schemas with no member they do not name, and receipts issued
|
||||
# before results named their engine and schema still verify, their digests
|
||||
# pinned. Both MCP servers': every tool's answer follows its outputSchema,
|
||||
# the committed tool lists (wai-quantum-cli/docs/local-mcp.json and
|
||||
# service-mcp.json) are the live lists, the agent docs are what the binary
|
||||
# generates, and initialize reports the versions. The job service's job in
|
||||
# each status. The provider protocol's messages and answers. Then a full
|
||||
# each status, a set's among them, and its receipt key set after a rotation;
|
||||
# the command line's scheduler lease, its harness's report, corpus and token
|
||||
# counts, and the course's progress file; the answer layer's documents, a
|
||||
# correctness record, the views page's manifest, the course, its exercises
|
||||
# and its checks. The provider protocol's messages and
|
||||
# answers. Then a full
|
||||
# JSON Schema implementation (wai/wai-quantum/ci/check_schemas.py) reads
|
||||
# every schema file and both tool lists, and holds a release build's
|
||||
# answers to them.
|
||||
|
|
@ -41,6 +47,9 @@ on:
|
|||
- 'wai/wai-quantum-cli/**'
|
||||
- 'wai/wai-quantum-service/**'
|
||||
- 'wai/wai-quantum-qpu/**'
|
||||
# The schema tests read the answer layer's conformance set and the harness's corpus.
|
||||
- 'wai/quantum-conformance/answers/**'
|
||||
- 'wai/quantum-conformance/eval/**'
|
||||
- 'wai/wai-quantum-py/README.md'
|
||||
- 'wai/wai-quantum-desktop/README.md'
|
||||
- 'wai/quantum-studio/README.md'
|
||||
|
|
@ -54,6 +63,9 @@ on:
|
|||
- 'wai/wai-quantum-cli/**'
|
||||
- 'wai/wai-quantum-service/**'
|
||||
- 'wai/wai-quantum-qpu/**'
|
||||
# The schema tests read the answer layer's conformance set and the harness's corpus.
|
||||
- 'wai/quantum-conformance/answers/**'
|
||||
- 'wai/quantum-conformance/eval/**'
|
||||
- 'wai/wai-quantum-py/README.md'
|
||||
- 'wai/wai-quantum-desktop/README.md'
|
||||
- 'wai/quantum-studio/README.md'
|
||||
|
|
@ -188,12 +200,15 @@ jobs:
|
|||
working-directory: wai/wai-quantum
|
||||
run: |
|
||||
set -euo pipefail
|
||||
cargo test --locked --release --no-default-features --features quantum_engine,quantum_receipt --lib engine::schema:: 2>&1 | tee "$RUNNER_TEMP/engine.log"
|
||||
cargo test --locked --release --no-default-features --features quantum_engine,quantum_receipt,quantum_qec,quantum_noise --lib engine::schema:: 2>&1 | tee "$RUNNER_TEMP/engine.log"
|
||||
for t in every_schema_reads_names_itself_and_refers_only_to_what_is_there \
|
||||
the_checker_reads_the_subset_it_names_and_refuses_what_it_should \
|
||||
every_check_s_answer_follows_its_schema \
|
||||
every_method_s_job_follows_the_job_schemas \
|
||||
a_new_result_names_its_engine_and_schema_and_its_receipt_binds_them \
|
||||
error_correction_and_mitigation_follow_their_schemas \
|
||||
the_answer_layer_the_correctness_record_and_the_views_bundle_follow_their_schemas \
|
||||
the_course_its_exercises_and_its_checks_follow_their_schemas \
|
||||
receipts_issued_before_results_named_them_still_verify; do
|
||||
grep -q "^test engine::schema::tests::$t \.\.\. ok$" "$RUNNER_TEMP/engine.log" || { echo "::error::$t did not run and pass"; exit 1; }
|
||||
done
|
||||
|
|
@ -209,20 +224,25 @@ jobs:
|
|||
mcp::tests::an_agent_initializes_lists_the_tools_and_runs_a_circuit \
|
||||
guide::tests::the_committed_docs_are_what_the_binary_generates \
|
||||
guide::tests::the_docs_list_exactly_the_servers_tools_and_name_no_version \
|
||||
tests::the_command_line_parses_as_documented; do
|
||||
tests::the_command_line_parses_as_documented \
|
||||
task::tests::a_lease_follows_its_schema \
|
||||
eval::tests::a_scripted_run_reports_what_the_engine_found \
|
||||
eval::tests::the_corpus_is_the_task_set_written_three_ways \
|
||||
learn::tests::progress_is_kept_in_one_file_and_marks_a_pass_once; do
|
||||
grep -q "^test $t \.\.\. ok$" "$RUNNER_TEMP/cli.log" || { echo "::error::$t did not run and pass"; exit 1; }
|
||||
done
|
||||
- name: The job service's MCP server, its committed tool list and its job
|
||||
- name: The job service's MCP server, its committed tool list, its job and its receipt keys
|
||||
shell: bash
|
||||
working-directory: wai/wai-quantum-service
|
||||
run: |
|
||||
set -euo pipefail
|
||||
cargo test --locked --release -- mcp:: jobs:: 2>&1 | tee "$RUNNER_TEMP/service.log"
|
||||
cargo test --locked --release -- mcp:: jobs:: receipt:: 2>&1 | tee "$RUNNER_TEMP/service.log"
|
||||
for t in mcp::tests::the_schemas_read_and_the_versions_are_reported \
|
||||
mcp::tests::every_tool_s_answer_follows_its_output_schema \
|
||||
mcp::tests::every_tool_has_a_schema_and_a_description \
|
||||
mcp::tests::the_command_line_s_snapshot_is_this_server_s_live_list \
|
||||
jobs::tests::a_job_s_form_follows_the_job_schema; do
|
||||
jobs::tests::a_job_s_form_follows_the_job_schema \
|
||||
receipt::tests::a_rotation_keeps_the_old_key_published_with_its_window_and_a_signed_transition; do
|
||||
grep -q "^test $t \.\.\. ok$" "$RUNNER_TEMP/service.log" || { echo "::error::$t did not run and pass"; exit 1; }
|
||||
done
|
||||
- name: The provider protocol's messages
|
||||
|
|
|
|||
6
.github/workflows/wai-quantum-dataflow.yml
vendored
6
.github/workflows/wai-quantum-dataflow.yml
vendored
|
|
@ -170,9 +170,11 @@ jobs:
|
|||
cargo test --locked --release -j 6 --features quantum_fabric_dataflow --lib -- quantum_fabric_dataflow:: quantum_fabric::rv32:: quantum_fabric::tensix:: quantum_fabric::vector_engine:: --nocapture 2>&1 | tee "$RUNNER_TEMP/unit.log"
|
||||
grep -qE '^test result: ok\. [1-9][0-9]* passed; 0 failed' "$RUNNER_TEMP/unit.log" || { echo "::error::no unit test ran"; exit 1; }
|
||||
# The vector engine's encoder against the simulator's own table (the
|
||||
# test returns early without the table, so require its line).
|
||||
# test returns early without the table, so require its line). Tests
|
||||
# print from parallel threads, so the line may follow another test's
|
||||
# "ok" on the same line: it is matched anywhere in a line.
|
||||
if [ -n "${{ matrix.vector }}" ]; then
|
||||
grep -qE '^tensix layouts: [0-9]+ instructions match the table' "$RUNNER_TEMP/unit.log" || { echo "::error::the instruction table was not checked"; exit 1; }
|
||||
grep -qE 'tensix layouts: [0-9]+ instructions match the table' "$RUNNER_TEMP/unit.log" || { echo "::error::the instruction table was not checked"; exit 1; }
|
||||
fi
|
||||
report="$RUNNER_TEMP/dataflow-report.txt"; : > "$report"
|
||||
WAI_QUANTUM_DATAFLOW_REPORT="$report" cargo test --locked --release -j 6 --features quantum_fabric_dataflow --test dataflow_member -- --test-threads=1 2>&1 | tee "$RUNNER_TEMP/device.log"
|
||||
|
|
|
|||
170
.github/workflows/wai-quantum-docs.yml
vendored
Normal file
170
.github/workflows/wai-quantum-docs.yml
vendored
Normal file
|
|
@ -0,0 +1,170 @@
|
|||
name: wai-quantum docs, course and locales
|
||||
|
||||
# The WAI Quantum documentation, the circuits course and the translations:
|
||||
# - docs: wai/tools/quantum-docs/ci.sh builds the command line, the job service and
|
||||
# the Python package from this checkout, starts a service, and runs check_docs.py
|
||||
# over every page docs.json names (the READMEs and docs pages of the engine, the
|
||||
# command line, the service, Python, the Studio, the desktop app, the editors and
|
||||
# the providers, the course's lessons, the agent skill, and their translations):
|
||||
# every block marked runnable run, every shown output held to the real one, every
|
||||
# receipt a block writes verified, the Rust blocks built and run, every block that
|
||||
# cannot run checked for the commands and flags it names, every `wai-quantum …` in
|
||||
# the prose a real command, every relative link a file, every dependency shown one
|
||||
# this repository's version satisfies, and every translation holding its English
|
||||
# page's code;
|
||||
# - course: engine::course's tests (every lesson's solution passes its own exercise
|
||||
# by proof or evidence, every known wrong answer fails it for its stated reason,
|
||||
# no hint or lesson gives the solution, every locale has every text and message)
|
||||
# and the command line's course and locale tests, each required by name;
|
||||
# - locales: every key of the Studio's words in every locale, with the same
|
||||
# placeholders, each translation marked machine-assisted (no browser).
|
||||
# The Studio's course in the browser, in both languages, is in wai-quantum-studio.yml.
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
paths:
|
||||
- 'wai/wai-quantum/**'
|
||||
- 'wai/wai-quantum-cli/**'
|
||||
- 'wai/wai-quantum-service/**'
|
||||
- 'wai/wai-quantum-py/**'
|
||||
- 'wai/wai-quantum-qpu/**'
|
||||
- 'wai/wai-quantum-desktop/README.md'
|
||||
- 'wai/quantum-studio/**'
|
||||
- 'wai/tools/wai-quantum-editor/README.md'
|
||||
- 'wai/tools/quantum-docs/**'
|
||||
- 'wai/CHANGELOG.md'
|
||||
- 'rust-toolchain.toml'
|
||||
- '.github/workflows/wai-quantum-docs.yml'
|
||||
pull_request:
|
||||
paths:
|
||||
- 'wai/wai-quantum/**'
|
||||
- 'wai/wai-quantum-cli/**'
|
||||
- 'wai/wai-quantum-service/**'
|
||||
- 'wai/wai-quantum-py/**'
|
||||
- 'wai/wai-quantum-qpu/**'
|
||||
- 'wai/wai-quantum-desktop/README.md'
|
||||
- 'wai/quantum-studio/**'
|
||||
- 'wai/tools/wai-quantum-editor/README.md'
|
||||
- 'wai/tools/quantum-docs/**'
|
||||
- 'wai/CHANGELOG.md'
|
||||
- 'rust-toolchain.toml'
|
||||
- '.github/workflows/wai-quantum-docs.yml'
|
||||
|
||||
jobs:
|
||||
relevant:
|
||||
name: does this change touch it
|
||||
runs-on: linux-arm64
|
||||
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-docs.yml \
|
||||
"${{ github.event.pull_request.base.sha }}" \
|
||||
"${{ github.event.pull_request.head.sha }}")
|
||||
echo "this change touches the docs, the course or the locales: $r"
|
||||
echo "run=$r" >> "$GITHUB_OUTPUT"
|
||||
|
||||
docs:
|
||||
name: every command and snippet in the docs · linux
|
||||
needs: relevant
|
||||
if: needs.relevant.outputs.run == 'true'
|
||||
runs-on: linux
|
||||
timeout-minutes: 180
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
- name: Install Rust 1.98.0, and uv
|
||||
shell: bash
|
||||
run: |
|
||||
export PATH="$HOME/.local/bin:$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.98.0
|
||||
rustup toolchain install 1.98.0 --profile minimal
|
||||
rustup default 1.98.0
|
||||
command -v uv >/dev/null 2>&1 || curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||
echo "$HOME/.local/bin" >> "$GITHUB_PATH"
|
||||
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
|
||||
- name: Build, start a service, and run every page
|
||||
shell: bash
|
||||
run: |
|
||||
set -euo pipefail
|
||||
bash wai/tools/quantum-docs/ci.sh 2>&1 | tee "$RUNNER_TEMP/docs.log"
|
||||
grep -q '^every check passed$' "$RUNNER_TEMP/docs.log" || { echo "::error::a page's check failed"; exit 1; }
|
||||
|
||||
course:
|
||||
name: the course and the command line's languages · linux
|
||||
needs: relevant
|
||||
if: needs.relevant.outputs.run == 'true'
|
||||
runs-on: linux
|
||||
timeout-minutes: 60
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
- name: Install Rust 1.98.0
|
||||
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.98.0
|
||||
rustup toolchain install 1.98.0 --profile minimal
|
||||
rustup default 1.98.0
|
||||
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
|
||||
# A module filter is satisfied by any one test of the module, so each test is
|
||||
# required by name to have run.
|
||||
- name: Every solution passes, every wrong answer fails, every locale is whole
|
||||
shell: bash
|
||||
working-directory: wai/wai-quantum
|
||||
run: |
|
||||
set -euo pipefail
|
||||
cargo test --locked --release --features full --lib -- engine::course:: 2>&1 | tee "$RUNNER_TEMP/course.log"
|
||||
grep -qE '^test result: ok\. 9 passed; 0 failed' "$RUNNER_TEMP/course.log" || { echo "::error::the course's tests did not all pass"; exit 1; }
|
||||
for t in every_solution_passes_its_exercise_and_every_known_wrong_answer_fails_it \
|
||||
a_check_says_what_went_wrong_from_the_engine_and_never_shows_the_solution \
|
||||
no_hint_or_lesson_gives_the_solution \
|
||||
every_locale_has_every_text_and_every_message \
|
||||
the_course_reads_and_every_lesson_is_in_one_unit_with_its_files \
|
||||
the_schemas_name_the_fields_the_reader_takes \
|
||||
a_check_is_the_same_bytes_every_time \
|
||||
the_estimate_lesson_prices_the_program \
|
||||
a_locale_tag_picks_the_course_s_locale; do
|
||||
grep -q "^test engine::course::tests::$t \.\.\. ok$" "$RUNNER_TEMP/course.log" || { echo "::error::$t did not run"; exit 1; }
|
||||
done
|
||||
- name: The command line's course and its languages
|
||||
shell: bash
|
||||
working-directory: wai/wai-quantum-cli
|
||||
run: |
|
||||
set -euo pipefail
|
||||
cargo test --locked --release --bin wai-quantum -- locale:: learn:: 2>&1 | tee "$RUNNER_TEMP/cli.log"
|
||||
for t in locale::tests::the_language_is_lang_else_the_environment_s \
|
||||
locale::tests::every_key_exists_in_every_locale_and_every_summary_is_translated_from_today_s_english \
|
||||
locale::tests::a_label_is_padded_by_its_width_on_a_terminal \
|
||||
learn::tests::progress_is_kept_in_one_file_and_marks_a_pass_once; do
|
||||
grep -q "^test $t \.\.\. ok$" "$RUNNER_TEMP/cli.log" || { echo "::error::$t did not run"; exit 1; }
|
||||
done
|
||||
|
||||
locales:
|
||||
name: the Studio's words in every locale · linux
|
||||
needs: relevant
|
||||
if: needs.relevant.outputs.run == 'true'
|
||||
runs-on: linux
|
||||
timeout-minutes: 15
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '22'
|
||||
- name: Every key in every locale, with its placeholders
|
||||
shell: bash
|
||||
working-directory: wai/quantum-studio
|
||||
run: |
|
||||
set -euo pipefail
|
||||
node test/locales.test.mjs | tee "$RUNNER_TEMP/locales.log"
|
||||
grep -q '^every check passed$' "$RUNNER_TEMP/locales.log" || { echo "::error::a locale is missing a key"; exit 1; }
|
||||
152
.github/workflows/wai-quantum-qec.yml
vendored
Normal file
152
.github/workflows/wai-quantum-qec.yml
vendored
Normal file
|
|
@ -0,0 +1,152 @@
|
|||
name: wai-quantum error correction and mitigation
|
||||
|
||||
# Error correction and mitigation (wai/wai-quantum): the colour codes and
|
||||
# their decoder (quantum_color), distance certificates (quantum_distance),
|
||||
# the circuit and error-model texts and their conformance vectors
|
||||
# (quantum_qec_text, quantum-conformance/qec-text/), correlated matching
|
||||
# (quantum_match), sliding-window decoding (quantum_window), the frame
|
||||
# simulator's Pauli-target observables and tags (quantum_frame), mitigation
|
||||
# in a job (engine::mitigate), twirling and decoupling as compile passes
|
||||
# (engine::compile) and the error-correction call every host makes
|
||||
# (engine::qec).
|
||||
#
|
||||
# Every decoder is held to the exhaustive ground truth: every error below
|
||||
# half the distance corrected to a trivial residual (at circuit level, every
|
||||
# edge set below half the graph's distance). A release build runs the larger
|
||||
# distances (colour codes to d = 9, bivariate-bicycle certificates to 144
|
||||
# qubits); the crate's suites run the rest in debug elsewhere
|
||||
# (wai-energy-receipts.yml).
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
paths:
|
||||
- 'wai/wai-quantum/**'
|
||||
- 'wai/quantum-conformance/qec-text/**'
|
||||
- 'rust-toolchain.toml'
|
||||
- '.github/workflows/wai-quantum-qec.yml'
|
||||
pull_request:
|
||||
paths:
|
||||
- 'wai/wai-quantum/**'
|
||||
- 'wai/quantum-conformance/qec-text/**'
|
||||
- 'rust-toolchain.toml'
|
||||
- '.github/workflows/wai-quantum-qec.yml'
|
||||
|
||||
jobs:
|
||||
relevant:
|
||||
name: does this change touch it
|
||||
runs-on: linux-arm64
|
||||
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-qec.yml \
|
||||
"${{ github.event.pull_request.base.sha }}" \
|
||||
"${{ github.event.pull_request.head.sha }}")
|
||||
echo "this change touches error correction or mitigation: $r"
|
||||
echo "run=$r" >> "$GITHUB_OUTPUT"
|
||||
|
||||
native:
|
||||
name: codes, decoders, texts and mitigation · 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.98.0
|
||||
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.98.0
|
||||
rustup toolchain install 1.98.0 --profile minimal
|
||||
rustup default 1.98.0
|
||||
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
|
||||
# A module filter is satisfied by any one test of the module, so each
|
||||
# new test is required by name to have run and passed.
|
||||
- name: Codes, decoders, texts, mitigation and the error-correction call
|
||||
shell: bash
|
||||
working-directory: wai/wai-quantum
|
||||
run: |
|
||||
set -euo pipefail
|
||||
cargo test --locked --release --features full --lib -- \
|
||||
quantum_color:: quantum_distance:: quantum_qec_text:: quantum_window:: quantum_match:: quantum_frame:: \
|
||||
engine::mitigate:: engine::qec:: \
|
||||
engine::compile::tests::twirling_and_decoupling_keep_the_program \
|
||||
engine::compile::tests::every_frame_is_carried_through_its_gate \
|
||||
quantum_noisy::tests::steps_reproduce_the_evolution 2>&1 | tee "$RUNNER_TEMP/qec.log"
|
||||
grep -qE '^test result: ok\. [1-9][0-9]+ passed; 0 failed' "$RUNNER_TEMP/qec.log" || { echo "::error::the error-correction tests did not pass"; exit 1; }
|
||||
for t in quantum_color::tests::every_error_below_half_the_distance_is_corrected \
|
||||
quantum_color::tests::matching_alone_misses_some_correctable_errors \
|
||||
quantum_color::tests::the_triangular_codes_are_colour_codes \
|
||||
quantum_color::tests::decoding_is_deterministic_and_distance_helps \
|
||||
quantum_color::tests::the_empty_syndrome_needs_no_correction \
|
||||
quantum_distance::tests::the_search_agrees_with_brute_force \
|
||||
quantum_distance::tests::the_codes_have_their_distances \
|
||||
quantum_distance::tests::bivariate_bicycle_codes_have_their_distances \
|
||||
quantum_distance::tests::the_lightest_explanation_is_never_heavier_than_the_error \
|
||||
quantum_distance::tests::the_symmetric_search_agrees_with_brute_force_on_a_bivariate_bicycle_code \
|
||||
quantum_distance::tests::a_tampered_certificate_or_symmetry_is_refused \
|
||||
quantum_qec_text::tests::every_target_kind_and_a_tag_round_trip \
|
||||
quantum_qec_text::tests::any_layout_reads_to_its_rewritten_form \
|
||||
quantum_qec_text::tests::what_does_not_read_is_refused_with_its_line \
|
||||
quantum_qec_text::tests::a_model_unrolls_with_its_offsets_tags_and_parts \
|
||||
quantum_window::tests::narrow_windows_correct_every_edge_set_below_half_the_distance \
|
||||
quantum_window::tests::a_window_over_everything_is_the_batch_decoder \
|
||||
quantum_window::tests::narrow_windows_track_the_batch_decoder \
|
||||
quantum_window::tests::a_window_too_short_for_the_model_is_refused \
|
||||
quantum_match::tests::matching_corrects_every_edge_set_below_half_the_distance \
|
||||
quantum_match::tests::decomposed_faults_are_counted \
|
||||
quantum_match::tests::the_matched_edges_explain_the_shot \
|
||||
quantum_match::tests::correlated_matching_is_not_worse_on_the_same_shots \
|
||||
quantum_frame::tests::a_pauli_target_is_flipped_by_what_anticommutes_with_it \
|
||||
quantum_frame::tests::pauli_targets_agree_between_sampler_and_model \
|
||||
quantum_frame::tests::tags_reach_the_model_and_its_text \
|
||||
quantum_frame::tests::the_text_round_trips \
|
||||
engine::mitigate::tests::pauli_channels_round_trip_through_rates_and_fidelities \
|
||||
engine::mitigate::tests::the_twirled_circuit_is_the_job_where_the_noise_is_pauli \
|
||||
engine::mitigate::tests::the_exact_inverse_undoes_the_noise \
|
||||
engine::mitigate::tests::each_method_reduces_the_bias_and_states_its_error \
|
||||
engine::mitigate::tests::the_trace_with_a_pauli_is_the_expectation \
|
||||
engine::mitigate::tests::readout_inversion_recovers_the_distribution \
|
||||
engine::mitigate::tests::a_job_carries_its_mitigation_and_its_refusals_name_their_code \
|
||||
engine::mitigate::tests::refusals_say_why \
|
||||
engine::qec::tests::every_family_reads_and_certifies_its_distance \
|
||||
engine::qec::tests::each_decoder_corrects_every_single_error \
|
||||
engine::qec::tests::circuit_level_decoding_reads_every_model_form \
|
||||
engine::qec::tests::a_threshold_is_measured_and_distance_helps_below_it \
|
||||
engine::qec::tests::an_answer_is_sealed_and_a_changed_one_does_not_verify \
|
||||
engine::compile::tests::twirling_and_decoupling_keep_the_program \
|
||||
engine::compile::tests::every_frame_is_carried_through_its_gate \
|
||||
quantum_noisy::tests::steps_reproduce_the_evolution; do
|
||||
grep -q "^test $t \.\.\. ok$" "$RUNNER_TEMP/qec.log" || { echo "::error::$t did not run and pass"; exit 1; }
|
||||
done
|
||||
- name: The circuit and model texts against their conformance vectors
|
||||
shell: bash
|
||||
working-directory: wai/wai-quantum
|
||||
run: |
|
||||
set -euo pipefail
|
||||
cargo test --locked --release --features full --test qec_text_conformance 2>&1 | tee "$RUNNER_TEMP/text.log"
|
||||
grep -q '^test the_conformance_set_holds \.\.\. ok$' "$RUNNER_TEMP/text.log" || { echo "::error::the conformance vectors did not run and hold"; exit 1; }
|
||||
# Without warnings: a feature gate that leaves code unreachable or a
|
||||
# value unused in one feature set shows here.
|
||||
- name: Each feature set the hosts build still builds, without warnings
|
||||
shell: bash
|
||||
working-directory: wai/wai-quantum
|
||||
env:
|
||||
RUSTFLAGS: -D warnings
|
||||
run: |
|
||||
set -euo pipefail
|
||||
cargo check --locked --no-default-features --features quantum_engine --lib
|
||||
cargo check --locked --no-default-features --features quantum_qec --lib
|
||||
cargo check --locked --no-default-features --features quantum_engine,quantum_receipt,quantum_qec,quantum_noise --lib
|
||||
94
.github/workflows/wai-quantum-service.yml
vendored
94
.github/workflows/wai-quantum-service.yml
vendored
|
|
@ -4,7 +4,10 @@ name: wai-quantum service
|
|||
# tests, clippy with warnings as errors, and its smoke checks over HTTP against
|
||||
# an instance started here, on Linux and on the macOS runner (the host the
|
||||
# service is deployed to). Its tests also hold the command line's snapshot of
|
||||
# its MCP tools (wai/wai-quantum-cli/docs/service-mcp.json) to the live list.
|
||||
# its MCP tools (wai/wai-quantum-cli/docs/service-mcp.json) to the live list,
|
||||
# and one (tests/restart.rs) kills the service mid-job and starts it again on
|
||||
# its store. Each instance here keeps its job store in the runner's own
|
||||
# scratch directory.
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
|
|
@ -75,14 +78,37 @@ jobs:
|
|||
cargo test --locked --release 2>&1 | tee "$RUNNER_TEMP/test.log"
|
||||
grep -qE '^test result: ok\. [1-9][0-9]* passed; 0 failed' "$RUNNER_TEMP/test.log" || { echo "::error::no test ran"; exit 1; }
|
||||
cargo clippy --locked --release --all-targets -- -D warnings
|
||||
# The engine's parts of the service, each required by name: sets and
|
||||
# sweeps and their Merkle paths, a result's provenance, the package
|
||||
# counter's reader and probe (on fake trees; a container hides the real
|
||||
# one), and a real-valued input bound by the reader.
|
||||
- name: The engine's sets, provenance and package energy
|
||||
shell: bash
|
||||
working-directory: wai/wai-quantum
|
||||
run: |
|
||||
set -euo pipefail
|
||||
cargo test --locked --release --features full --lib -- engine::sets:: engine::energy:: merkle:: engine::run::tests::a_result_s_provenance qasm::tests::a_bound_parameter 2>&1 | tee "$RUNNER_TEMP/engine.log"
|
||||
grep -qE '^test result: ok\. [1-9][0-9]* passed; 0 failed' "$RUNNER_TEMP/engine.log" || { echo "::error::the engine's tests did not pass"; exit 1; }
|
||||
for t in engine::sets::tests::one_receipt_binds_every_item_and_any_change_breaks_it \
|
||||
engine::sets::tests::a_sweep_is_its_grid_each_point_the_program_written_out \
|
||||
engine::sets::tests::a_failed_item_is_bound_by_its_error \
|
||||
merkle::tests::every_leaf_s_path_leads_to_the_root_and_nothing_else_does \
|
||||
engine::run::tests::a_result_s_provenance_names_the_passes_its_certificate_ran \
|
||||
engine::energy::tests::the_probe_finds_a_live_counter_s_cadence_and_refuses_a_stalled_one \
|
||||
engine::energy::tests::only_top_level_package_zones_are_read_and_a_frozen_one_is_not_live \
|
||||
engine::energy::tests::a_package_figure_names_its_scope_and_declares_its_edges \
|
||||
qasm::tests::a_bound_parameter_reads_as_the_program_written_with_its_value; do
|
||||
grep -q "^test $t \.\.\. ok$" "$RUNNER_TEMP/engine.log" || { echo "::error::$t did not run"; exit 1; }
|
||||
done
|
||||
- name: The smoke checks over HTTP
|
||||
shell: bash
|
||||
working-directory: wai/wai-quantum-service
|
||||
run: |
|
||||
set -euo pipefail
|
||||
key="$RUNNER_TEMP/service.key"; rm -f "$key"
|
||||
key="$RUNNER_TEMP/service.key"; rm -f "$key" "$RUNNER_TEMP/service.keys.json"
|
||||
store="$RUNNER_TEMP/store"; rm -rf "$store"
|
||||
cargo build --locked --release
|
||||
WAI_QSVC_KEY="$key" WAI_QSVC_ADDR=127.0.0.1:18241 WAI_QSVC_BUDGET_GB=8 WAI_QSVC_JOB_GB=4 WAI_QSVC_WORKERS=2 \
|
||||
WAI_QSVC_KEY="$key" WAI_QSVC_STORE="$store" WAI_QSVC_ADDR=127.0.0.1:18241 WAI_QSVC_BUDGET_GB=8 WAI_QSVC_JOB_GB=4 WAI_QSVC_WORKERS=2 \
|
||||
./target/release/wai-quantum-service serve 2> "$RUNNER_TEMP/service.log" &
|
||||
pid=$!
|
||||
trap 'kill $pid 2>/dev/null || true; cat "$RUNNER_TEMP/service.log"' EXIT
|
||||
|
|
@ -139,11 +165,69 @@ jobs:
|
|||
working-directory: wai/wai-quantum-service
|
||||
run: |
|
||||
set -euo pipefail
|
||||
key="$RUNNER_TEMP/service.key"; rm -f "$key"
|
||||
key="$RUNNER_TEMP/service.key"; rm -f "$key" "$RUNNER_TEMP/service.keys.json"
|
||||
store="$RUNNER_TEMP/store"; rm -rf "$store"
|
||||
cargo build --locked --release
|
||||
WAI_QSVC_KEY="$key" WAI_QSVC_ADDR=127.0.0.1:18241 WAI_QSVC_BUDGET_GB=8 WAI_QSVC_JOB_GB=4 WAI_QSVC_WORKERS=2 \
|
||||
WAI_QSVC_KEY="$key" WAI_QSVC_STORE="$store" WAI_QSVC_ADDR=127.0.0.1:18241 WAI_QSVC_BUDGET_GB=8 WAI_QSVC_JOB_GB=4 WAI_QSVC_WORKERS=2 \
|
||||
./target/release/wai-quantum-service serve 2> "$RUNNER_TEMP/service.log" &
|
||||
pid=$!
|
||||
trap 'kill $pid 2>/dev/null || true; cat "$RUNNER_TEMP/service.log"' EXIT
|
||||
for _ in $(seq 1 50); do curl -s -o /dev/null http://127.0.0.1:18241/v1/health && break; sleep 0.2; done
|
||||
bash smoke.sh http://127.0.0.1:18241
|
||||
|
||||
# The processor packages' counters on a Linux host that has them readable
|
||||
# (the hardware runner, outside any container): the engine's live test
|
||||
# required to take its live branch, and the service's smoke checks with a
|
||||
# metered figure required on every job.
|
||||
energy-linux:
|
||||
name: service energy · linux packages
|
||||
needs: relevant
|
||||
if: needs.relevant.outputs.run == 'true'
|
||||
runs-on: linux-hw
|
||||
timeout-minutes: 90
|
||||
env:
|
||||
CARGO_PROFILE_RELEASE_DEBUG: '0'
|
||||
CARGO_BUILD_JOBS: '8'
|
||||
steps:
|
||||
- name: Fetch the source
|
||||
shell: bash
|
||||
run: |
|
||||
set -euo pipefail
|
||||
ref="${{ github.event_name == 'pull_request' && format('refs/pull/{0}/head', github.event.pull_request.number) || github.ref }}"
|
||||
want="${{ github.event.pull_request.head.sha || github.sha }}"
|
||||
rm -rf src && mkdir src && cd src
|
||||
git init -q
|
||||
git fetch -q --depth 1 http://100.64.224.0:3400/Transaction-Science/open-standards.git "$ref"
|
||||
git checkout -q FETCH_HEAD
|
||||
got="$(git rev-parse HEAD)"
|
||||
echo "fetched $ref at $got"
|
||||
if [ "$got" != "$want" ]; then
|
||||
echo "::error::$ref is at $got, not $want: it moved after this run started, and a newer run tests it"
|
||||
exit 1
|
||||
fi
|
||||
- name: The package counter, live
|
||||
shell: bash
|
||||
working-directory: src/wai/wai-quantum
|
||||
env:
|
||||
WAI_QUANTUM_PACKAGE_ENERGY_EXPECT: "1"
|
||||
run: |
|
||||
set -euo pipefail
|
||||
log=$(mktemp)
|
||||
CARGO_TARGET_DIR="$HOME/hw-target/wai-quantum" nice -n 10 cargo test --locked --release --features quantum_engine,quantum_receipt --lib engine::energy:: -- --nocapture --test-threads=1 2>&1 | tee "$log"
|
||||
# With --nocapture the test's line follows its name on the same line.
|
||||
grep -q 'package counter: {"joules_micro":' "$log" || { echo "::error::the package counter's live path never ran"; exit 1; }
|
||||
- name: The service's smoke checks, every job metered
|
||||
shell: bash
|
||||
working-directory: src/wai/wai-quantum-service
|
||||
run: |
|
||||
set -euo pipefail
|
||||
export CARGO_TARGET_DIR="$HOME/hw-target/wai-quantum-service"
|
||||
nice -n 10 cargo build --locked --release
|
||||
t=$(mktemp -d)
|
||||
WAI_QSVC_KEY="$t/service.key" WAI_QSVC_STORE="$t/store" WAI_QSVC_ADDR=127.0.0.1:18244 WAI_QSVC_BUDGET_GB=4 WAI_QSVC_JOB_GB=2 WAI_QSVC_WORKERS=1 \
|
||||
"$CARGO_TARGET_DIR/release/wai-quantum-service" serve 2> "$t/service.log" &
|
||||
pid=$!
|
||||
trap 'kill $pid 2>/dev/null || true; cat "$t/service.log"; rm -rf "$t"' EXIT
|
||||
for _ in $(seq 1 100); do curl -s -o /dev/null http://127.0.0.1:18244/v1/health && break; sleep 0.2; done
|
||||
curl -sS http://127.0.0.1:18244/v1 | python3 -I -c 'import json,sys; e=json.load(sys.stdin)["energy"]; assert e["meter"]=="packages", e; print("meter:", e)'
|
||||
SMOKE_EXPECT_ENERGY=1 bash smoke.sh http://127.0.0.1:18244
|
||||
|
|
|
|||
18
.github/workflows/wai-quantum-studio.yml
vendored
18
.github/workflows/wai-quantum-studio.yml
vendored
|
|
@ -11,6 +11,17 @@ name: wai-quantum studio and desktop
|
|||
# nothing scrolls sideways at a phone's width;
|
||||
# - test/hardware.test.mjs, without a browser: "Your hardware" asks the person before
|
||||
# a run that is not free, never before a free one, and sends nothing on a "no";
|
||||
# - test/telemetry.test.mjs, without a browser: the correctness record is off by
|
||||
# default, and while off records nothing, writes nothing and asks the engine
|
||||
# nothing; and the views page agent hosts draw is built from these sources
|
||||
# (build-views.mjs --check; wai-quantum-views.yml draws it);
|
||||
# - in the browser, too: answer views drawn as an answer streams in, and the
|
||||
# correctness record turned on and its failures exported;
|
||||
# - test/locales.test.mjs, without a browser: every key of the interface's words in
|
||||
# every locale, with the same placeholders, each translation marked machine-assisted;
|
||||
# - the course in the browser, in English and in Chinese (studio.test.mjs): a lesson
|
||||
# checked by the engine, what went wrong, a hint, a pass kept in the browser, and the
|
||||
# language followed from the browser and switched;
|
||||
# - the desktop app's tests and clippy with warnings as errors, and `check`: a job
|
||||
# run in the app's worker process, sealed in the app with a key that never leaves
|
||||
# it, and verified, with no window.
|
||||
|
|
@ -30,6 +41,7 @@ on:
|
|||
- 'wai/wai-quantum-qpu/**'
|
||||
- 'wai/wai-web/**'
|
||||
- 'wai/wai-rs/**'
|
||||
- 'wai/wai-quantum-views/**'
|
||||
- 'rust-toolchain.toml'
|
||||
- '.github/workflows/wai-quantum-studio.yml'
|
||||
pull_request:
|
||||
|
|
@ -41,6 +53,7 @@ on:
|
|||
- 'wai/wai-quantum-qpu/**'
|
||||
- 'wai/wai-web/**'
|
||||
- 'wai/wai-rs/**'
|
||||
- 'wai/wai-quantum-views/**'
|
||||
- 'rust-toolchain.toml'
|
||||
- '.github/workflows/wai-quantum-studio.yml'
|
||||
|
||||
|
|
@ -107,6 +120,9 @@ jobs:
|
|||
npm ci --no-audit --no-fund
|
||||
npx playwright install --with-deps chromium
|
||||
node test/hardware.test.mjs
|
||||
node test/telemetry.test.mjs
|
||||
node build-views.mjs --check
|
||||
node test/locales.test.mjs
|
||||
node build.mjs --pkg "$RUNNER_TEMP/pkg"
|
||||
node test/studio.test.mjs
|
||||
|
||||
|
|
@ -141,6 +157,8 @@ jobs:
|
|||
grep -qE '^test result: ok\. [1-9][0-9]* passed; 0 failed' "$RUNNER_TEMP/test.log" || { echo "::error::no test ran"; exit 1; }
|
||||
grep -q '^test tests::a_run_on_a_provider_is_estimated_refused_until_confirmed_and_sealed_with_the_app_s_key \.\.\. ok$' "$RUNNER_TEMP/test.log" || { echo "::error::the provider run test did not run and pass"; exit 1; }
|
||||
grep -q '^test tests::device_targets_are_listed_shown_and_placed_for_the_page \.\.\. ok$' "$RUNNER_TEMP/test.log" || { echo "::error::the device targets test did not run and pass"; exit 1; }
|
||||
grep -q '^test tests::an_answer_is_read_run_and_sealed_for_the_page \.\.\. ok$' "$RUNNER_TEMP/test.log" || { echo "::error::the answer views test did not run and pass"; exit 1; }
|
||||
grep -q '^test tests::the_course_is_read_and_checked_in_the_app \.\.\. ok$' "$RUNNER_TEMP/test.log" || { echo "::error::the course test did not run and pass"; exit 1; }
|
||||
nice -n 10 cargo clippy --locked --release --all-targets -- -D warnings
|
||||
nice -n 10 cargo build --locked --release
|
||||
./target/release/wai-quantum-desktop check
|
||||
|
|
|
|||
26
.github/workflows/wai-quantum-verdict.yml
vendored
26
.github/workflows/wai-quantum-verdict.yml
vendored
|
|
@ -10,6 +10,14 @@ name: wai-quantum verdicts and repairs
|
|||
# bundle equal to its files, and under wasm32-wasip2 by wasmtime, where the
|
||||
# cases come from the bundle the test compiles in. The browser build runs the
|
||||
# set too (wai-web-wasm.yml, wai-web's wasm32 tests).
|
||||
#
|
||||
# The answer view layer (engine/answer/: view statements over OpenQASM 3, each
|
||||
# bound to an engine call) and correctness telemetry (engine/telemetry.rs) run
|
||||
# here too: the layer's tests (the stream ending as the whole text reads at
|
||||
# every split, every code), and its conformance set
|
||||
# (wai/quantum-conformance/answers/: each answer's codes, root and order, its
|
||||
# views run to what they must show, the stored answers' receipts verified by
|
||||
# running them again), natively and under wasm32-wasip2.
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
|
|
@ -21,12 +29,14 @@ on:
|
|||
paths:
|
||||
- 'wai/wai-quantum/**'
|
||||
- 'wai/quantum-conformance/intents/**'
|
||||
- 'wai/quantum-conformance/answers/**'
|
||||
- 'rust-toolchain.toml'
|
||||
- '.github/workflows/wai-quantum-verdict.yml'
|
||||
pull_request:
|
||||
paths:
|
||||
- 'wai/wai-quantum/**'
|
||||
- 'wai/quantum-conformance/intents/**'
|
||||
- 'wai/quantum-conformance/answers/**'
|
||||
- 'rust-toolchain.toml'
|
||||
- '.github/workflows/wai-quantum-verdict.yml'
|
||||
|
||||
|
|
@ -91,6 +101,20 @@ jobs:
|
|||
set -euo pipefail
|
||||
cargo test --locked --release --features full --test intent_conformance 2>&1 | tee "$RUNNER_TEMP/intents.log"
|
||||
grep -q 'test result: ok. 2 passed; 0 failed' "$RUNNER_TEMP/intents.log" || { echo "::error::the intent set did not pass"; exit 1; }
|
||||
- name: The answer view layer, telemetry, and the answer conformance set
|
||||
shell: bash
|
||||
working-directory: wai/wai-quantum
|
||||
run: |
|
||||
set -euo pipefail
|
||||
cargo test --locked --release --features full --lib -- engine::answer:: engine::telemetry:: 2>&1 | tee "$RUNNER_TEMP/answer.log"
|
||||
for t in engine::answer::tests::streaming_at_every_split_ends_as_the_whole_text_reads \
|
||||
engine::answer::tests::every_problem_has_its_code_and_says_what_becomes_of_the_statement \
|
||||
engine::answer::tests::an_answer_s_calls_run_on_the_engine_and_its_seal_verifies_when_run_again \
|
||||
engine::telemetry::tests::the_failures_become_a_corpus_in_the_conformance_format; do
|
||||
grep -q "^test $t \.\.\. ok$" "$RUNNER_TEMP/answer.log" || { echo "::error::$t did not run"; exit 1; }
|
||||
done
|
||||
cargo test --locked --release --features full --test answer_conformance 2>&1 | tee "$RUNNER_TEMP/answers.log"
|
||||
grep -q 'test result: ok. 2 passed; 0 failed' "$RUNNER_TEMP/answers.log" || { echo "::error::the answer set did not pass"; exit 1; }
|
||||
|
||||
wasip2:
|
||||
name: the intent set and the verdict under wasm32-wasip2 (wasmtime)
|
||||
|
|
@ -140,6 +164,8 @@ jobs:
|
|||
set -euo pipefail
|
||||
cargo test --locked --target wasm32-wasip2 --features full --test intent_conformance 2>&1 | tee "$RUNNER_TEMP/wasip2.log"
|
||||
grep -q 'test result: ok. 1 passed; 0 failed' "$RUNNER_TEMP/wasip2.log" || { echo "::error::the intent set did not pass under wasip2"; exit 1; }
|
||||
cargo test --locked --target wasm32-wasip2 --features full --test answer_conformance 2>&1 | tee "$RUNNER_TEMP/wasip2-answers.log"
|
||||
grep -q 'test result: ok. 1 passed; 0 failed' "$RUNNER_TEMP/wasip2-answers.log" || { echo "::error::the answer set did not pass under wasip2"; exit 1; }
|
||||
- name: The verdict and the repair under wasmtime
|
||||
shell: bash
|
||||
working-directory: wai/wai-quantum
|
||||
|
|
|
|||
162
.github/workflows/wai-quantum-views.yml
vendored
Normal file
162
.github/workflows/wai-quantum-views.yml
vendored
Normal file
|
|
@ -0,0 +1,162 @@
|
|||
name: wai-quantum views in agent hosts
|
||||
|
||||
# The engine's answers drawn as interactive views inside an agent host, through
|
||||
# the Model Context Protocol's extension for them (wai/wai-quantum/src/engine/views.rs,
|
||||
# the page in wai/wai-quantum/views/, the engine inside it in wai/wai-quantum-views/,
|
||||
# the views themselves in wai/quantum-studio/src/views/):
|
||||
# - the committed page is built from its sources as they are (build-views.mjs
|
||||
# --check), and rebuilt here: its script and styles to the same bytes. The
|
||||
# engine inside it is compiled from wai-quantum, and LLVM lays the same code
|
||||
# out differently once anything else in that crate changes, so its bytes are
|
||||
# compared and a difference is a warning to rebuild, not a failure: the
|
||||
# scripted host below holds the committed page's engine to the receipts the
|
||||
# current servers seal;
|
||||
# - the engine inside the views checks a receipt as the engine does, and
|
||||
# engine::views gives the resources, the tool map, each view's data and its
|
||||
# answer in plain words, every view within the size limit;
|
||||
# - a scripted host draws every view from both MCP servers in a headless
|
||||
# browser (test/views.test.mjs): under the extension's default
|
||||
# content-security policy, which refuses WebAssembly, the receipt is checked
|
||||
# in the view by the engine translated to JavaScript, and with WebAssembly
|
||||
# allowed, by the WebAssembly; a changed result fails the check; the view's
|
||||
# own tool for a running job is kept from the model; no view makes a request.
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
paths:
|
||||
- 'wai/wai-quantum-views/**'
|
||||
- 'wai/wai-quantum/**'
|
||||
- 'wai/wai-quantum-cli/**'
|
||||
- 'wai/wai-quantum-service/**'
|
||||
- 'wai/wai-quantum-qpu/**'
|
||||
- 'wai/quantum-studio/**'
|
||||
- 'rust-toolchain.toml'
|
||||
- '.github/workflows/wai-quantum-views.yml'
|
||||
pull_request:
|
||||
paths:
|
||||
- 'wai/wai-quantum-views/**'
|
||||
- 'wai/wai-quantum/**'
|
||||
- 'wai/wai-quantum-cli/**'
|
||||
- 'wai/wai-quantum-service/**'
|
||||
- 'wai/wai-quantum-qpu/**'
|
||||
- 'wai/quantum-studio/**'
|
||||
- 'rust-toolchain.toml'
|
||||
- '.github/workflows/wai-quantum-views.yml'
|
||||
|
||||
jobs:
|
||||
relevant:
|
||||
name: does this change touch it
|
||||
runs-on: linux-arm64
|
||||
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-views.yml \
|
||||
"${{ github.event.pull_request.base.sha }}" \
|
||||
"${{ github.event.pull_request.head.sha }}")
|
||||
echo "this change touches the views: $r"
|
||||
echo "run=$r" >> "$GITHUB_OUTPUT"
|
||||
|
||||
page:
|
||||
name: views · the page and its engine
|
||||
needs: relevant
|
||||
if: needs.relevant.outputs.run == 'true'
|
||||
runs-on: linux
|
||||
timeout-minutes: 60
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
- name: Install Rust 1.98.0 with the wasm32 target
|
||||
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.98.0
|
||||
rustup toolchain install 1.98.0 --profile minimal
|
||||
rustup default 1.98.0
|
||||
rustup target add wasm32-unknown-unknown
|
||||
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '22'
|
||||
- name: The committed page is built from these sources
|
||||
shell: bash
|
||||
working-directory: wai/quantum-studio
|
||||
run: |
|
||||
set -euo pipefail
|
||||
npm ci --no-audit --no-fund
|
||||
node build-views.mjs --check
|
||||
- name: The engine inside the views, and engine::views
|
||||
shell: bash
|
||||
run: |
|
||||
set -euo pipefail
|
||||
(cd wai/wai-quantum-views && cargo test --locked --release 2>&1 | tee "$RUNNER_TEMP/views.log")
|
||||
grep -qE '^test result: ok\. 3 passed; 0 failed' "$RUNNER_TEMP/views.log" || { echo "::error::the views' engine tests did not all run and pass"; exit 1; }
|
||||
(cd wai/wai-quantum && cargo test --locked --release --features full --lib engine::views:: 2>&1 | tee "$RUNNER_TEMP/engine.log")
|
||||
grep -qE '^test result: ok\. 4 passed; 0 failed' "$RUNNER_TEMP/engine.log" || { echo "::error::engine::views' tests did not all run and pass"; exit 1; }
|
||||
- name: Rebuilt here, its script and styles to the same bytes
|
||||
shell: bash
|
||||
run: |
|
||||
set -euo pipefail
|
||||
bash wai/wai-quantum-views/build.sh "$RUNNER_TEMP/views"
|
||||
python3 - "$RUNNER_TEMP/views/manifest.json" wai/wai-quantum/views/manifest.json <<'EOF'
|
||||
import json, sys
|
||||
new, old = (json.load(open(p)) for p in sys.argv[1:])
|
||||
bad = [k for k in ("script", "styles") if new["sha256"][k] != old["sha256"][k]]
|
||||
if bad:
|
||||
print(f"::error::the committed views page's {', '.join(bad)} are not what their sources build: run bash wai/wai-quantum-views/build.sh and commit what it writes")
|
||||
sys.exit(1)
|
||||
for k in ("engine_wasm", "engine_js"):
|
||||
if new["sha256"][k] != old["sha256"][k]:
|
||||
print(f"::warning::the engine inside the views ({k}) compiles to other bytes than the committed page holds: wai-quantum changed since it was built; rebuild it with bash wai/wai-quantum-views/build.sh")
|
||||
print("the page's script and styles are what their sources build")
|
||||
EOF
|
||||
|
||||
hosts:
|
||||
name: views · a scripted host
|
||||
needs: relevant
|
||||
if: needs.relevant.outputs.run == 'true'
|
||||
runs-on: linux
|
||||
timeout-minutes: 75
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
- name: Install Rust 1.98.0
|
||||
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.98.0
|
||||
rustup toolchain install 1.98.0 --profile minimal
|
||||
rustup default 1.98.0
|
||||
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '22'
|
||||
- name: Both servers
|
||||
shell: bash
|
||||
run: |
|
||||
set -euo pipefail
|
||||
(cd wai/wai-quantum-cli && cargo build --locked --release)
|
||||
(cd wai/wai-quantum-service && cargo build --locked --release)
|
||||
- name: Every view drawn by a scripted host in a browser
|
||||
shell: bash
|
||||
working-directory: wai/quantum-studio
|
||||
env:
|
||||
WAI_E2E_CHANNEL: ''
|
||||
run: |
|
||||
set -euo pipefail
|
||||
npm ci --no-audit --no-fund
|
||||
npx playwright install --with-deps chromium
|
||||
WQ_CLI="$GITHUB_WORKSPACE/wai/wai-quantum-cli/target/release/wai-quantum" \
|
||||
WQ_SERVICE="$GITHUB_WORKSPACE/wai/wai-quantum-service/target/release/wai-quantum-service" \
|
||||
node test/views.test.mjs 2>&1 | tee "$RUNNER_TEMP/views.log"
|
||||
grep -q '^every check passed$' "$RUNNER_TEMP/views.log" || { echo "::error::the scripted host's checks did not all pass"; exit 1; }
|
||||
20
.github/workflows/wai-web-wasm.yml
vendored
20
.github/workflows/wai-web-wasm.yml
vendored
|
|
@ -166,7 +166,8 @@ jobs:
|
|||
# quantum_engine, which only the IDE's bundle carries): a job planned, run and
|
||||
# signed in wasm32 under Node, its receipt checked there and a changed result
|
||||
# refused, every method a tab holds run with no clock and no threads, a
|
||||
# program's critique, equivalence check and variants, its classical
|
||||
# program's critique, equivalence check and variants, error correction (a
|
||||
# code certified, a decode at circuit level and one at code capacity), its classical
|
||||
# shortcuts with a contraction search, the OpenQASM 3 conformance corpus
|
||||
# (wai/quantum-conformance/qasm3/bundle.json) read and run in the page, a
|
||||
# compile to Clifford+T and a resource estimate whose sealed bytes match the
|
||||
|
|
@ -174,8 +175,11 @@ jobs:
|
|||
# asked twice giving the same bits, a job on a device target, the intent
|
||||
# conformance set (wai/quantum-conformance/intents/bundle.json) run in the
|
||||
# page to the verdicts its manifest gives and each worked out again by
|
||||
# engine_verdict, and a repair there. The count is the four tests above
|
||||
# and its eleven.
|
||||
# engine_verdict, a repair there, the answer conformance set
|
||||
# (wai/quantum-conformance/answers/bundle.json) read to its codes, root and
|
||||
# order, its stored answers' receipts verified by running them again, and a
|
||||
# course check whose bytes match the native build's pinned digest. The count
|
||||
# is the four tests above and these fourteen.
|
||||
- name: The job engine in a page (wasm32 tests under Node)
|
||||
shell: bash
|
||||
working-directory: wai/wai-web
|
||||
|
|
@ -183,7 +187,7 @@ jobs:
|
|||
set -euo pipefail
|
||||
CARGO_TARGET_WASM32_UNKNOWN_UNKNOWN_RUNNER=wasm-bindgen-test-runner \
|
||||
cargo test --locked --target wasm32-unknown-unknown --features quantum_engine 2>&1 | tee "$RUNNER_TEMP/wai-web-engine-wasm.log"
|
||||
grep -q "test result: ok. 15 passed; 0 failed" "$RUNNER_TEMP/wai-web-engine-wasm.log"
|
||||
grep -q "test result: ok. 18 passed; 0 failed" "$RUNNER_TEMP/wai-web-engine-wasm.log"
|
||||
# Its native half: the service's form and receipt, any angle on the state
|
||||
# vector, what does not run saying why, plan, lint, draw and methods as JSON,
|
||||
# critique, equivalence and variants as JSON, the classical shortcuts, the
|
||||
|
|
@ -196,15 +200,17 @@ jobs:
|
|||
# that runs bit-exact, an estimate sealed there and re-run, the debugger's
|
||||
# steps and branches there, a drawing's edits and its SVG, LaTeX and words
|
||||
# there, device targets listed, shown, placed and run there, a verdict
|
||||
# sealed there and worked out again, and a repair held to the flagged
|
||||
# lines there.
|
||||
# sealed there and worked out again, a repair held to the flagged
|
||||
# lines there, an answer in the answer view layer streamed in, its calls
|
||||
# run and its seal verified there, a correctness record and its corpus made
|
||||
# there, and the circuits course read and checked there.
|
||||
- name: The job engine in a page (native unit tests)
|
||||
shell: bash
|
||||
working-directory: wai/wai-web
|
||||
run: |
|
||||
set -euo pipefail
|
||||
cargo test --locked --lib --features quantum_engine quantum_engine:: 2>&1 | tee "$RUNNER_TEMP/wai-web-engine.log"
|
||||
grep -q "test result: ok. 22 passed; 0 failed" "$RUNNER_TEMP/wai-web-engine.log"
|
||||
grep -q "test result: ok. 26 passed; 0 failed" "$RUNNER_TEMP/wai-web-engine.log"
|
||||
# The crate's native unit tests, run on the host: the pure-Rust halves of the
|
||||
# bindings, which wasm_tests does not run. They decode the committed integer
|
||||
# payloads to their sidecars' SHA-256 (int_payload::tests) and check that the
|
||||
|
|
|
|||
125
wai/CHANGELOG.md
125
wai/CHANGELOG.md
|
|
@ -2696,9 +2696,9 @@ wire format may change and such changes are recorded here.
|
|||
- **`tools/ops-gpu-bench`** times each capability's decode with its graphs on the CPU and on each adapter, and reads the energy counters the host has.
|
||||
- **CI:** `wai-ops-gpu.yml` runs the Metal and browser legs on the `macos` runner, and requires on a runner with no GPU that the device tests skip without `WAI_OPS_GPU_REQUIRE` and fail with it.
|
||||
|
||||
### wai-quantum 0.7.0 and wai-quantum-cli 0.2.0: one OpenQASM 3 reader, synthesis, verdicts and repair, estimates, device targets, the debugger, and a version contract
|
||||
### wai-quantum 0.7.0 and wai-quantum-cli 0.2.0: one OpenQASM 3 reader, synthesis, verdicts and repair, estimates, device targets, the debugger, error correction, sets and a durable service, views and a course, and a version contract
|
||||
|
||||
This release carries the twelve entries below it, down to the study of the co-design, to the package registry. `wai-quantum-cli` 0.2.0 requires `wai-quantum` 0.7.0 and `wai-quantum-qpu` 0.3.0, which requires 0.7.0 too; the job service is 0.2.0. The Python package stays 0.1.0 and the editor extension keeps its version. What each version now promises is the policy, `wai-quantum/VERSIONING.md`; nothing is deprecated.
|
||||
This release carries the sixteen entries below it, down to the study of the co-design, to the package registry. `wai-quantum-cli` 0.2.0 requires `wai-quantum` 0.7.0 and `wai-quantum-qpu` 0.3.0, which requires 0.7.0 too; the job service is 0.2.0. The Python package stays 0.1.0 and the editor extension keeps its version. What each version now promises is the policy, `wai-quantum/VERSIONING.md`; nothing is deprecated.
|
||||
|
||||
- **wai-quantum 0.7.0:**
|
||||
- one OpenQASM 3 reader for every surface (`qasm::read`), every refusal and warning under a stable code (`qasm::diag`, the `Q` codes), and the job layer's refusals under theirs (`engine::refusal`, the `J` codes);
|
||||
|
|
@ -2708,11 +2708,126 @@ This release carries the twelve entries below it, down to the study of the co-de
|
|||
- device targets (`engine::targets`): a device's calibration snapshot read into one document, `wai.quantum.target/1`, its noise derived, a program placed where it is most likely to succeed, and the target's hash in the receipt;
|
||||
- a debugger with branch enumeration and exact weights, and statistical tests (`engine::debug`, `engine::stats`);
|
||||
- the editors' language service and formatter (`engine::editor`), the agent front door's guide (`engine::guide`), a job on the person's own provider (`engine::provider`), and the study (`engine::study`);
|
||||
- sets and sweeps, one receipt over their Merkle root (`engine::sets`), and a result's provenance (`engine::run::run_with_provenance`); the processor packages' energy on Linux (`engine::energy`);
|
||||
- error correction for every surface (`engine::qec`): colour codes, distance certificates by exhaustive search, correlated matching, sliding-window decoding and thresholds; mitigation in a job (`engine::mitigate`: zero-noise extrapolation, error amplification and cancellation from a learned noise model, Clifford data regression, virtual distillation, readout inversion); Pauli twirling and dynamical decoupling as checked compile passes;
|
||||
- the engine's answers as views inside agent hosts (`engine::views`), the answer view layer as a draft extension (`engine::answer`), and correctness records kept only when asked (`engine::telemetry`);
|
||||
- the circuits course, each exercise checked by the engine (`engine::course`), in English and Simplified Chinese;
|
||||
- versioned JSON Schemas for every document it writes (`engine::schema`), each result naming the engine that made it and its schema inside what its receipt seals.
|
||||
- **wai-quantum-cli 0.2.0:** `new`, `test`, `setup-agent`, `mcp config | install`, `docs`, `lsp`, `fmt`, `dap`, `diagnostics`, `compile`, `repair`, `estimate`, `debug`, `targets`, `providers`, `run --intent | --compile | --repair | --target | --provider` and `version`; the MCP tools `repair_qasm`, `compile_qasm`, `qasm_diagnostics`, `estimate_resources`, `debug_step`, `debug_branches`, `list_targets`, `show_target`, `run_on_target`, `providers_list`, `provider_estimate` and `run_on_provider`, every tool with its output schema and every answer about a program with its verdict.
|
||||
- **wai-quantum-cli 0.2.0:** `new`, `test`, `setup-agent`, `mcp config | install`, `docs`, `lsp`, `fmt`, `dap`, `diagnostics`, `compile`, `repair`, `estimate`, `debug`, `targets`, `providers`, `qec`, `task`, `eval`, `learn`, `run --intent | --compile | --repair | --target | --provider | --program | --sweep | --mitigate`, `submit --dry-run | --detach`, `compile --twirl --dd`, `--lang` and `version`; the MCP tools `repair_qasm`, `compile_qasm`, `qasm_diagnostics`, `estimate_resources`, `debug_step`, `debug_branches`, `list_targets`, `show_target`, `run_on_target`, `providers_list`, `provider_estimate`, `run_on_provider`, `qec_code`, `qec_decode` and `qec_threshold`, and views for a host that draws them, every tool with its output schema and every answer about a program with its verdict.
|
||||
- **The job service 0.2.0:** a durable store (by default `~/.local/share/wai-quantum-service/store`; `WAI_QSVC_STORE` names another, or `memory`), sets and sweeps, dry runs, status events, rate-limit fields, rotating receipt keys, the error-correction endpoints, views and its own view tool, an OCI image and a scheduler's interface; the MCP tools `run_quantum_set`, `dry_run_quantum_job` and the `qec_*` three.
|
||||
- **wai-quantum-qpu 0.3.0:** the open provider protocol (`wai.quantum.provider/1`), its reference provider and conformance checker, and a registry whose credentials stay in the keychain.
|
||||
- **What changed that a caller may have to change** (`cargo-semver-checks` against 0.6.16 and 0.2.0): `engine::catalog::Request` gained `diagnostics`, `compiled` and `repaired`, `engine::catalog::Plan` gained `target`, and `qasm::Program` gained `extra`: take them from `catalog::read`, `catalog::plan` and `qasm::read` rather than writing them out. `quantum_resource_receipt::Program` gained the variant `Counted`: a `match` on it needs that arm. In `wai-quantum-qpu`, `JobInfo` and `JobRecord` gained `calibration` and `charged`. Every result now names its engine and schema, so a stored result's bytes and its receipt's digest differ from 0.6.16's for the same request; a receipt 0.6.16 issued still verifies.
|
||||
- Every lockfile that holds one of these crates moves with them (sixteen), so a `--locked` build still reads its own.
|
||||
- **What changed that a caller may have to change** (`cargo-semver-checks` against 0.6.16 and 0.2.0): `engine::catalog::Request` gained `diagnostics`, `compiled`, `compile_passes`, `repaired` and `mitigate`, `engine::catalog::Plan` gained `target`, and `qasm::Program` gained `extra`: take them from `catalog::read`, `catalog::plan` and `qasm::read` rather than writing them out. In `quantum_frame`, `Circuit` gained `detector_coords`, `tags` and `op_tags`, `ErrorModel` gained `detector_coords`, `Mechanism` gained `tag`, and `Op` gained the variant `Observe`; `quantum_resource_receipt::Program` gained the variant `Counted`: a `match` on either needs that arm, and a struct written out field by field needs the new fields. In `wai-quantum-qpu`, `JobInfo` and `JobRecord` gained `calibration` and `charged`. Every result now names its engine and schema (a set's head, an error-correction answer and a course check among them), so a stored result's bytes and its receipt's digest differ from 0.6.16's for the same request; a receipt 0.6.16 issued still verifies. The job service keeps its jobs on disk unless `WAI_QSVC_STORE=memory`, and a job it seals carries the result's `provenance`.
|
||||
- **Breaking:** `api:rust:wai_quantum::engine::catalog::Request::compile_passes`: a job may ask for compile passes (twirling, dynamical decoupling) before it runs. A struct literal adds `compile_passes: None`, which runs as before, or builds the request with `catalog::read`.
|
||||
- **Breaking:** `api:rust:wai_quantum::engine::catalog::Request::mitigate`: a job may ask for error mitigation. A struct literal adds `mitigate: None`, which runs as before, or builds the request with `catalog::read`.
|
||||
- **Breaking:** `api:rust:wai_quantum::engine::compile::Options::dd`: the compiler gains a dynamical-decoupling pass. A struct literal adds `dd: None`, which compiles as before.
|
||||
- **Breaking:** `api:rust:wai_quantum::engine::compile::Options::twirl`: the compiler gains a Pauli-twirling pass. A struct literal adds `twirl: None`, which compiles as before.
|
||||
- **Breaking:** `api:rust:wai_quantum::engine::refusal::Outcome::Defaulted`: the answer view layer's outcomes join the job layer's in one table of codes. A `match` over `Outcome` adds an arm for it, or a `_` arm.
|
||||
- **Breaking:** `api:rust:wai_quantum::engine::refusal::Outcome::Dropped`: as `Outcome::Defaulted`: a `match` over `Outcome` adds an arm for it, or a `_` arm.
|
||||
- **Breaking:** `api:rust:wai_quantum::engine::refusal::Outcome::Warned`: as `Outcome::Defaulted`: a `match` over `Outcome` adds an arm for it, or a `_` arm.
|
||||
- **Breaking:** `api:rust:wai_quantum::engine::schema::FILES`: the committed schemas grew from 11 to 22 with the documents this release adds. Code that names the array's length iterates over `FILES` instead.
|
||||
- **Breaking:** `api:rust:wai_quantum::quantum_frame::Circuit::detector_coords`: the error-correction circuit text keeps detector coordinates when it is read and written back. A struct literal adds `detector_coords: Vec::new()`, which reads as before.
|
||||
- **Breaking:** `api:rust:wai_quantum::quantum_frame::Circuit::op_tags`: the circuit text keeps each operation's tag. A struct literal adds `op_tags: Vec::new()`, which reads as before.
|
||||
- **Breaking:** `api:rust:wai_quantum::quantum_frame::Circuit::tags`: the circuit text keeps its tags. A struct literal adds `tags: Vec::new()`, which reads as before.
|
||||
- **Breaking:** `api:rust:wai_quantum::quantum_frame::ErrorModel::detector_coords`: the error-model text keeps detector coordinates. A struct literal adds `detector_coords: Vec::new()`, which reads as before.
|
||||
- **Breaking:** `api:rust:wai_quantum::quantum_frame::Mechanism::tag`: the error-model text keeps each mechanism's tag. A struct literal adds `tag: None`, which reads as before.
|
||||
- **Breaking:** `api:rust:wai_quantum::quantum_frame::Op::Observe`: a Pauli-target observable is now an operation of its own. A `match` over `Op` adds an arm for it, or a `_` arm.
|
||||
- New refusal codes: `J007` a set that does not read, `J008` a mitigation, `J009` an error-correction request, `J033` an API key a private deployment requires, and `J100` to `J112` the answer view layer's.
|
||||
- Every lockfile that holds one of these crates moves with them (seventeen, the views' engine among them), so a `--locked` build still reads its own.
|
||||
|
||||
### wai-quantum: a circuits course checked by the engine, documentation that runs, and Simplified Chinese
|
||||
|
||||
Someone new learns quantum computing and the toolchain from material the engine checks, in English or Simplified Chinese, and no page can drift from what the code does.
|
||||
|
||||
- **The circuits course** (`engine::course`, `wai-quantum/course/`): 21 lessons in eight units, from a first circuit through superposition, entanglement, interference, Deutsch–Jozsa, Bernstein–Vazirani, Grover, the quantum Fourier transform and phase estimation, noise and its mitigation, the bit-flip code and its syndrome, a Toffoli from Clifford+T and the T count, to a resource estimate.
|
||||
- The lessons are data: Markdown in each locale and an `exercise.json` with a JSON Schema (`wai-quantum/schemas/exercise.v1.json`, and `course.v1.json` for the course), so the same course runs in the Studio, the desktop app and the command line.
|
||||
- An exercise states its intent (an exact distribution, the same circuit or state as a program of its own, or a sampled test) and is checked with the verdict, in several cases for a generator's inputs, under the exercise's noise where it has some. Its constraints (the gates allowed, gate counts, the T count, the critique's smells, the resource estimate's counts) are measured on the program.
|
||||
- What went wrong and the hints come from the reader's diagnostics, the verdict and the critique, in the reader's language with the engine's own words beside them, and never show the solution. The tests hold every solution to pass by proof or evidence, every known wrong answer to fail for its stated reason, every starter to fail, and no hint or lesson to give the solution.
|
||||
- Progress is kept only where the learner is: the browser's storage, or `quantum-learn.json` beside the user's key.
|
||||
- The seven-module course on interference and learning stays where it is, on the site, listed beside this one.
|
||||
- **The command line**: `wai-quantum learn` lists the course and the progress, and `learn show`, `start`, `check` (exit 0 passed, 1 not yet), `hint`, `why` and `progress` work through a lesson. `--lang` (or `WAI_QUANTUM_LANG`, `LC_ALL`, `LC_MESSAGES`, `LANG`) picks English or Simplified Chinese for the command line's own words: the course, the `docs` topics and the summary of every command `--help` lists, each translation held to the English it came from and shown in English once that changes.
|
||||
- **The Studio and the desktop app**: a Course pane (the lessons, a lesson's text and exercise, Load the starter, Check, Hint, What went wrong?, and a hint from a connected model with any program in its answer held back), and the whole interface's words as data in `quantum-studio/locales/`, English and Simplified Chinese; the Studio follows the browser's language until the reader picks one with the switch. `engine_course`, `engine_course_lesson`, `engine_course_check` and `engine_course_hint` in the page, the same commands in the desktop app; a course check is the same bytes natively and in wasm32.
|
||||
- **Documentation that runs** (`wai/tools/quantum-docs/`): `check_docs.py` runs every block marked runnable on the pages `docs.json` names (the engine, the command line, the service, Python, the Studio, the desktop app, the editors, the providers, the compiler, estimates, verdicts, the feature matrix, the course and the translations), holds each shown output to the real one, verifies every receipt a block writes, builds the Rust blocks, and checks every block that cannot run for the commands and flags it names, every `wai-quantum …` in the prose, every relative link and every dependency shown. Its fixtures are in `fixtures/`; `ci.sh` is the check as CI runs it.
|
||||
- **Drift fixed**: the crate's README pinned `"0.4"`, named an unrelated crate for the command line, documented its research tools (`entropy`, `dmrg`, `qec` and the rest) outside `lab`, and claimed the whole suite runs under wasm32-wasip2 where CI runs its pinned results and core; the command line's README had placeholders and optional flags that did not run, a history merge of versions that do not exist, and a fixed formatter check in the wrong order; the service's, the desktop app's and the editor's build steps now match what CI runs. An observable may lead with its coefficient (`"0.5 X2"`), as the command line, the Studio and the guide documented.
|
||||
- **Translations**: the course, the command line's words, the Studio's interface, the main READMEs and the documentation's index in Simplified Chinese, each marked machine-assisted, to be reviewed by a fluent reader before it is advertised.
|
||||
- **Index**: `wai-quantum/docs/README.md` links every page, with a place for the migration and versioning pages.
|
||||
- **Schemas** (the version contract): the course as kept and as served (`wai.quantum.course/1`) and each exercise (`wai.quantum.exercise/1`), moved from `course/schema/` to the crate's `schemas/` with the rest; a check, a lesson as served and a hint (`wai.quantum.course-check/1`; a check now names its engine beside its schema); and the command line's progress file (`wai.quantum.learn-progress/1`). The docs runner reads the error-correction page, the version policy, the deprecations page and the service's self-hosting, scheduler and provenance pages too, and the index links them; the crate's README names 0.7. The command line's Chinese words cover the verbs the other branches added (`task`, `qec`, `eval`, `version`) and `submit` as it reads now, and the compile pages and the Studio's compile lens name the gate set `basis` in Chinese too.
|
||||
- **CI**: `wai-quantum-docs.yml` (the docs runner, the course's tests and the command line's language tests by name, the Studio's locale check); the Studio's e2e checks the course in English and in Chinese; wai-web's engine tests, with every entry's of this release, pin 26 native and 18 wasm32.
|
||||
|
||||
### wai-quantum: the engine's answers as views in agent hosts, the answer view layer, correctness records and a model harness
|
||||
|
||||
The engine's answers drawn where an agent works, written by a model as views whose numbers the engine computes, and the model scored on them.
|
||||
|
||||
- **Views in agent hosts** (`engine::views`; the Model Context Protocol's extension `io.modelcontextprotocol/ui`, version 2026-01-26): both MCP servers serve six `ui://wai-quantum/*` resources (the circuit, a result with its verdict, a receipt, a critique, an estimate's frontier, a device target's map) to a host that declares the extension, and each tool names its view in `_meta.ui.resourceUri`. The job-polling tool belongs to the view (`visibility: ["app"]`) and is kept from the model. A host without the extension gets the plain text it got before, and the text of a result is the same either way.
|
||||
- One self-contained page (`wai-quantum/views/`), with the view named in it: 802 495 bytes, under the extension's 1 MiB. Of that, the script is 93 783 bytes (the Studio's English words among it), the styles 49 020, and the engine 193 530 as WebAssembly (258 040 in base64) and 401 202 as JavaScript. It is built from the Studio's components by `quantum-studio/build-views.mjs`, and its manifest records each part's size and SHA-256 and every source's.
|
||||
- The receipt is checked inside the view, by the engine's own `job::verify` built with no imports (`wai/wai-quantum-views`). The extension's default content-security policy refuses to compile WebAssembly, as measured in a headless browser, so the page also carries the engine translated to JavaScript and uses whichever runs.
|
||||
- The page builds byte for byte the same in a clean CI image on x86_64 Linux. The engine's bytes change with any change to `wai-quantum`, and between macOS and Linux, so CI holds the script and the styles to their sources and warns when the engine needs a rebuild.
|
||||
- A scripted host (`quantum-studio/test/views.test.mjs`) runs against both servers in a headless browser: it lists, reads and draws every view, verifies the receipt in the view in both forms, refuses a changed one, and holds every page to the limit.
|
||||
- **The answer view layer** (`wai/extensions/quantum-answers.md`, `wai.quantum.answer/1`, a draft; `engine::answer`): fourteen views and eleven engine calls written beside an OpenQASM 3 program, one statement a line. Every number a view shows comes from an `@` call that the host carries out.
|
||||
- A streaming reader (`Stream`) gives each statement as it arrives, and the same answer however the text is split.
|
||||
- `@Seal` seals the calls. A stored answer carries its receipt, which is checked by running the answer again.
|
||||
- Codes `J100` to `J112`, each with its outcome (dropped, defaulted or warned), sit beside the reader's `Q` codes (`docs/job-refusals.md`).
|
||||
- Conformance (`quantum-conformance/answers/`): twenty cases covering every code, run natively, under `wasm32-wasip2` and in the browser build.
|
||||
- The token cost is measured and recorded (§9). On the harness's fourteen tasks, in the vocabularies of three open-weight models, the layer takes 29 to 32 percent more tokens than a job's JSON for the same request. The cost is per statement (24 to 28 tokens for one sample and one verdict), and noise that two calls share is named once. The whole layer is 2.7 to 2.8 times the program alone.
|
||||
- Surfaces:
|
||||
- wai-web: `AnswerStream`, `engine_answer_parse`, `engine_answer_prompt`, `engine_answer_verify` and `engine_answer_marker`, with `answer_value` and `answer_evaluate` on the page's engine;
|
||||
- the Studio's answer pane, which draws each statement as the assistant streams it, runs its calls and seals the answer;
|
||||
- the desktop app's `answer`.
|
||||
- **Correctness records** (`engine::telemetry`, `wai.quantum.telemetry/1`): off by default. Turned on in the Studio, it keeps one record per answer in the browser: the codes, the verdict level, the repairs, whether it was accepted, and the receipt id. Nothing is sent anywhere, and the records leave only when exported. The failures export as an eval corpus in the intent conformance format. A test shows that nothing is kept while it is off.
|
||||
- **A model harness** (`wai-quantum eval run` and `eval corpus`; `quantum-conformance/eval/`):
|
||||
- Fourteen tasks from the intent conformance set and the worked examples. Each has a reference program that a test holds to its intent by proof.
|
||||
- It asks a model at temperature 0, on this machine or a private network (any other host is refused unless allowed), for a program or for an answer in the layer. Optional repair rounds send the engine's codes back.
|
||||
- Each answer is scored as valid, and as solved with its verdict level. Joules per solved task are reported where the model server's process energy can be read (macOS).
|
||||
- A report ranks nothing and is not committed.
|
||||
- One open-weight model on the build host (35 billion parameters, 3 billion active, 5-bit, temperature 0), measured in §9.1 of the spec:
|
||||
- asked for the program, 12 of 14 answers were valid and 11 solved, and 13 and 12 after one repair round;
|
||||
- asked for the layer, 4 were valid and 3 solved, and 7 and 6 after one repair round.
|
||||
- Its errors are its own: an unnamed fence, a view given a call where it takes a program, undeclared names, and arguments written as `name=value`.
|
||||
- The prompt now gives each argument's kind and the rules those errors broke. The reader answers `name=value` by saying that arguments go by position.
|
||||
- **Schemas** (the version contract): the answer layer's documents (`wai.quantum.answer/1`: an answer read, carried out, a seal's request and result, a stored answer checked; labelled a draft whose form may change before the extension settles), a correctness record and its corpus (`wai.quantum.telemetry/1`), the views page's manifest (`wai.quantum.views-bundle/1`), and the harness's report, corpus and token counts (`wai.quantum.eval-report/1`, `wai.quantum.eval-answers/1`, `wai.quantum.token-cost/1`, the command line's). The view's own tool `poll_quantum_job` answers to the job's schema. The views name a compile's gate set by its basis.
|
||||
- **The engine**: the order of a program's final measurements makes no difference. Equivalence, the verdict's reference check and the rewriter compare which qubit each bit reads, not the order the measurements were written in. The harness found this: a correct GHZ state measured in the reverse order was refused.
|
||||
- **CI**:
|
||||
- `wai-quantum-views.yml`: the crate, the page against its sources, and the scripted host on `macos`;
|
||||
- the answer set under `wasm32-wasip2` in `wai-quantum-verdict.yml`;
|
||||
- the eval and views tests in `wai-quantum-cli.yml`;
|
||||
- the telemetry test, the page check and the desktop app's answer test in `wai-quantum-studio.yml`;
|
||||
- wai-web's test pins (with every entry's of this release, 26 native and 18 `wasm32`).
|
||||
|
||||
### wai-quantum: error correction and mitigation, completed and on every surface
|
||||
|
||||
Codes with certified distances, decoders each held to the exhaustive ground truth (every error below half the distance corrected to a trivial residual), the error-correction texts read and written as they are, and mitigation in a job with its error bars and assumptions (`wai-quantum/docs/qec.md`).
|
||||
|
||||
- **Colour codes** (`quantum_color`): the triangular 6.6.6 codes of odd distance, `[[(3d² + 1)/4, 1, d]]`, decoded by restriction to matching on the three restricted lattices, lifted at each colour with both logical classes kept, and completed below half the distance by an exact search; every error below half the distance corrected, checked to `d = 9`. Matching alone is shown missing 16, 16 and 10 of the 190 errors of weight at most two at `d = 5`.
|
||||
- **Distance certificates** (`quantum_distance`): an exhaustive search over connected supports, symmetries checked before use (a bivariate-bicycle code's translations), each sector's distance with a witness, `no_logical_below` and the node count, re-checked node for node (`wai.quantum.distance/1`); surface, toric, Steane, colour and bivariate-bicycle codes to 144 qubits certified in the tests, `[[288, 12, 18]]` in 18 s.
|
||||
- **Correlated matching** (`quantum_match::CorrelatedMatching`): exact matching twice through a model's decomposed faults, the second answer kept only when the model's mechanisms explain it more cheaply; fewer failures than exact matching on the same shots (338 against 440 at `d = 5`, `p = 0.006`, 20,000 shots), and on every set of one or two faults of the `d = 5`, two-round experiment it misses 73 pairs where matching misses 103. The circuit-level ground truth for matching: every edge set below half the graph's distance corrected.
|
||||
- **Sliding-window decoding** (`quantum_window`): a stream decoded as rounds arrive, `commit` rounds committed and `buffer` rounds decided again, with a stated latency budget per round and each window's time measured on the machine and labelled so; a window that covers everything is the batch decoder on every shot, and every edge set below half the distance is corrected once the buffer is `(d + 1)/2` rounds.
|
||||
- **The error-correction texts** (`quantum_qec_text`): the ecosystem's circuit text with tags, Pauli-target observables, coordinates and `REPEAT`, and the detector error model text with `^` decompositions, declarations, `repeat` and `shift_detectors`, read as written and written back; a circuit's model keeps its tags and coordinates. Conformance vectors (`quantum-conformance/qec-text/`) hold every form, the model each circuit gives and each refusal (`tests/qec_text_conformance.rs`).
|
||||
- **Mitigation in a job** (`engine::mitigate`, `"mitigate"` beside `"noise"`): zero-noise extrapolation by folding (Richardson, linear or exponential), error amplification and probabilistic error cancellation from a sparse Pauli–Lindblad model learned by simulated benchmarking, Clifford data regression, virtual distillation, and readout inversion. Each value raw and mitigated with its error bar, beside the ideal one the simulation knows, the method's options and its stated bias and variance assumptions, sealed with the job; refusals under `J008`.
|
||||
- **Twirling and decoupling as compile passes** (`engine::compile`, `"twirl": SEED`, `"dd": "xx" | "xy4"`): each two-qubit Clifford gate framed by a seeded Pauli and its image, each distinct frame proved the gate by the equivalence ladder; decoupling pulses in each idle window, the sequence proved the identity; the whole circuit checked by the ladder where it decides.
|
||||
- **One error-correction call for every host** (`engine::qec`: `code`, `decode`, `threshold`), refusals under `J009`, each answer sealed in a job's form:
|
||||
- the command line: `wai-quantum qec code|decode|threshold`, `run --mitigate`, `compile --twirl --dd`; the research forms stay at `wai-quantum lab qec`;
|
||||
- both MCP servers: `qec_code`, `qec_decode` and `qec_threshold`, and `mitigate` on runs and `twirl`/`dd` on compiles; the generated agent docs list them;
|
||||
- the service: `POST /v1/qec/code`, `/v1/qec/decode` and `/v1/qec/threshold`, bounded here (`J031`, with the command that runs it locally);
|
||||
- the Studio: an error-correction pane (the lattice, a syndrome made by flipping qubits, the correction and its residual, the certificate's witness, a threshold plot) and mitigation in the Noise section; the browser engine (`qec`) and the desktop app (`qec`);
|
||||
- Python: `qec_code`, `qec_decode`, `qec_threshold`, and `run(..., mitigate=...)`.
|
||||
- **Schemas** (the version contract): an error-correction answer (`wai.quantum.qec/1`: a code, a decode or a threshold, each naming the engine and its schema inside what its receipt seals), a distance certificate (`wai.quantum.distance/1`) and a job's mitigation (`wai.quantum.mitigation/1`); the job request names `mitigate`, and a compile's options `twirl` and `dd`. `qec_code`, `qec_decode` and `qec_threshold` answer to their output schemas on both servers, and the strict tests call each, a mitigated run and a compile with both passes. Mitigation's refusals are `J008` and error correction's `J009` (`J007` is a set that does not read).
|
||||
- **Not done:** a magic-state cultivation circuit generator; its non-Clifford stages would need state-vector checks against a reproduced reference.
|
||||
- **CI:** `wai-quantum-qec.yml` runs every new module's tests and the text conformance in release, each named test required to pass; `wai-web-wasm.yml` requires the browser engine's error-correction and mitigation tests by name, natively and under wasm32.
|
||||
|
||||
### wai-quantum: a durable job service with sets, sweeps and dry runs, run yourself
|
||||
|
||||
The job service keeps what it answered across its restarts, runs many programs as one job, says what a job would take before it runs, and can be run on your own premises from an image (`wai-quantum-service/docs/self-host.md`). The free hosted service still takes no account and no key.
|
||||
|
||||
- **A durable store** (`wai-quantum-service/src/store.rs`): programs, requests, results and receipts kept under the BLAKE3 digests of their bytes, behind a `Store` trait, with a files store (each file written whole, synced and renamed, under a lock) and a memory one. Every job is in the store before its submission is answered, and at each change of its status. On start the service reloads it: finished jobs served as they were, their receipts verifying; a job that was running comes back `interrupted`, with the reason; queued ones queued again. Retention stays configurable (`WAI_QSVC_RETAIN_SECS`, a day by default). A record names its client by a keyed hash, never its address. A worker whose service has gone stops itself. A test kills the service mid-job and restarts it (`tests/restart.rs`).
|
||||
- **Sets and sweeps** (`engine::sets`): `"programs"`, a list of programs or jobs, or `"sweep"`, values for the program's integer, float and angle inputs (every combination; the reader binds a real-valued input with `qasm::bind`). At most 100 items, each a plain job with its own result and receipt; the set's receipt seals its head, which holds the Merkle root of every item's leaf under the crate's Merkle domains, and each item carries its path. `POST /v1/verify` and `wai-quantum verify` check a set whole. `J007` is a set that does not read.
|
||||
- **Dry runs**: `"dry_run": true` returns the method, memory, estimated time and energy (each with its basis: this service's own timings and readings, or the planner's nominal rate, `catalog::nominal_rate`), the bounds that apply, where the client stands, and whether the service would take the job now, or the refusal it would give. It runs nothing.
|
||||
- **Status and limits**: `GET /v1/jobs/{id}/events` (server-sent events to the job's end) and `?wait=S` on the poll; every answer carries `RateLimit-Policy` and `RateLimit`, and a refusal past the limits `Retry-After`.
|
||||
- **Receipt keys**: the key set at `/.well-known/wai-quantum-receipt-keys`, each key with its validity window; `wai-quantum-service rotate-key` retires a key with a transition statement both keys sign, and the old key stays published.
|
||||
- **Energy on Linux** (`engine::energy::Packages`): the processor packages' counters, opened only when every package zone reads and is live, the figure the packages' energy over the job's window with no attribution to the job and the jobs beside it named, its uncertainty covering the two reads and the update edges measured at start; otherwise `unmetered` with the reason (no interface, no privilege, not live), never zero.
|
||||
- **Provenance** (`engine::run::run_with_provenance`, `wai-quantum-service/docs/provenance.md`): each new result carries the program's digest, the method, each pass its compile ran with its check's verdict and the certificate's digest, the shots, seed and plan, and the engine's and host's versions, mapped to the categories provenance surveys use. Results without it verify as they did, and the engine's own results are unchanged.
|
||||
- **Self-hosting**: an OCI image (`wai-quantum-service/deploy/Containerfile`: two stages, each base pinned by digest, a locked build with paths remapped and the timestamp fixed, an unprivileged user) and `deploy/check-image.sh`, which builds it, runs it, holds it to the smoke checks and removes it, pushing nothing. Optional API keys for a private deployment (`WAI_QSVC_API_KEYS`, off by default; `J033`), counted by key, stored as digests.
|
||||
- **A scheduler's resource**: `wai-quantum task` (target, acquire, start, status, wait, result, stop, release), the interface a batch scheduler's prologue, job and epilogue call (`wai-quantum-service/docs/scheduler.md`).
|
||||
- **Surfaces**: the service's MCP tools `run_quantum_set` and `dry_run_quantum_job`; the command line's `--program` and `--sweep` on `run`, `plan` and `submit`, and `submit --dry-run`, `--detach` and `--api-key`, `submit` following the job's status; the OpenAPI document, both smoke tests, the READMEs and the generated agent docs.
|
||||
- **Schemas** (the version contract): a set's result (`wai.quantum.set/1`, the head named as the engine's, inside what its receipt seals), a result's provenance (`wai.quantum.provenance/1`; its compilation names the gate set compiled to as `basis`), the service's receipt key set (`wai.quantum.receipt-keys/1`, with its signed transitions) and the command line's scheduler lease (`wai.quantum.lease/1`). The job request names `programs`, `sweep` and `dry_run`, a job's result may be a set's, an energy figure may be the processor packages', and a job names its store digests. `run_quantum_set` and `dry_run_quantum_job` answer to their output schemas, each with its verdict, refused or not, and a run asked as a dry run answers as one. The service keeps its store in `~/.local/share/wai-quantum-service/store` unless `WAI_QSVC_STORE` names another (or `memory`); every CI leg and test that starts it names one in its own scratch.
|
||||
|
||||
### wai-quantum: the version and deprecation contract, schemas as data, and versions in what is written
|
||||
|
||||
|
|
|
|||
364
wai/extensions/quantum-answers.md
Normal file
364
wai/extensions/quantum-answers.md
Normal file
|
|
@ -0,0 +1,364 @@
|
|||
# WAI Extension: Quantum Answer Views
|
||||
|
||||
> Status: Draft. Defines `wai.quantum.answer/1`, the **answer view layer**: a
|
||||
> few view statements written beside an OpenQASM 3 program, each view's
|
||||
> numbers bound to an engine call written with `@`, so that an answer a
|
||||
> model gives about a quantum program shows numbers the engine computed and
|
||||
> never numbers the model wrote. The text is read line by line as it
|
||||
> streams, every problem has a stable code with a defined outcome, and the
|
||||
> calls the answer makes can be sealed and checked again later by running
|
||||
> the answer. §9 records what the layer was measured to cost a model in
|
||||
> tokens against plain OpenQASM and against a job's JSON (29 to 32 percent
|
||||
> more than the JSON for the same request), and how reliably a model wrote
|
||||
> it (far less than a program alone). The syntax is not frozen. Reference
|
||||
> implementation: `wai_quantum::engine::answer`; corpus:
|
||||
> `quantum-conformance/answers/`.
|
||||
Keywords **MUST**, **MUST NOT**, **SHOULD**, **MAY** are RFC 2119/8174.
|
||||
|
||||
## 1. Scope and model
|
||||
|
||||
An **answer** is the text a model writes when it is asked to do something
|
||||
with a quantum program: the program, and what to show of it. In this layer
|
||||
the program is OpenQASM 3, unchanged, in a fenced block; what to show is a
|
||||
handful of **view statements** (`Histogram`, `Verdict`, `Receipt`, …), and
|
||||
every number a view shows comes from an **engine call** (`@Sample`,
|
||||
`@Check`, `@Seal`, …) that the host carries out on the engine:
|
||||
|
||||
````text
|
||||
root = Answer([bell, counts, check, seal])
|
||||
```qasm bell
|
||||
OPENQASM 3.0;
|
||||
qubit[2] q;
|
||||
bit[2] c;
|
||||
h q[0];
|
||||
cx q[0], q[1];
|
||||
c = measure q;
|
||||
```
|
||||
counts = Histogram(@Sample(bell, 1000))
|
||||
check = Verdict(@Check(bell, {"00": 0.5, "11": 0.5}))
|
||||
seal = Receipt(@Seal([bell, counts, check]))
|
||||
````
|
||||
|
||||
The trust boundary: a model writes only this declarative text. It writes no
|
||||
markup and no script, and the numbers it could get wrong (counts,
|
||||
probabilities, expectation values, a verdict) are not in its text at all.
|
||||
The host draws each view from the engine's answer to its call; a view
|
||||
whose argument is a number the model wrote is refused (§6, `J104`). A
|
||||
renderer MUST NOT execute anything in an answer other than the engine calls
|
||||
of §5, and MUST NOT draw a number in a view that the engine did not give.
|
||||
|
||||
In scope: the text (§2), statements (§3), the views (§4) and engine calls
|
||||
(§5), the diagnostics (§6), reading as the text streams (§7), carrying the
|
||||
calls out and sealing them (§8), the token comparison (§9) and conformance
|
||||
(§10). Out of scope: how a host lays a view out, and the program language,
|
||||
which is OpenQASM 3 as the engine's reader reads it.
|
||||
|
||||
## 2. The text
|
||||
|
||||
An answer is UTF-8 text, read a line at a time. A line ends at LF; a CR
|
||||
before the LF is not part of the line. The last line need not end with LF.
|
||||
Each line is one of:
|
||||
|
||||
- **blank** (only white space), or a **comment** (its first non-space
|
||||
characters `//`): nothing;
|
||||
- a **statement**, `name = Expression` (§3), on one line;
|
||||
- a **program**: a line ```` ```qasm NAME ```` (or ```` ```openqasm NAME ````)
|
||||
opens it, and the next line that is exactly ```` ``` ```` (white space
|
||||
aside) closes it. The lines between are the program's text, OpenQASM 3,
|
||||
read by the engine's reader when the block closes. Its `NAME` is a
|
||||
statement's name;
|
||||
- a **marker**: a line that begins `]]>wai:`. `]]>wai:receipt {…}` carries the
|
||||
receipt of a stored answer (§8.3). After an answer's first marker only
|
||||
markers follow.
|
||||
|
||||
Any other line is not read (`J100`). A **name** is a letter or `_`, then
|
||||
letters, digits or `_`.
|
||||
|
||||
The answer's **source** is its text before its first marker, each line
|
||||
ending in LF (a CR before it dropped, and an LF added to a last line that has
|
||||
none). Its **digest** is the BLAKE3 of the source, as lowercase hex.
|
||||
|
||||
## 3. Statements
|
||||
|
||||
```text
|
||||
statement = name ws "=" ws expr [ws "//" comment]
|
||||
expr = view | call | name | literal | list | object
|
||||
view = Name "(" [expr *("," expr)] ")"
|
||||
call = "@" Name "(" [expr *("," expr)] ")"
|
||||
list = "[" [expr *("," expr)] "]"
|
||||
object = "{" [key ":" expr *("," key ":" expr)] "}"
|
||||
key = json-string | name
|
||||
literal = json-number | json-string | "true" | "false" | "null"
|
||||
```
|
||||
|
||||
A statement's value is a view, an engine call, or a literal (a **value**:
|
||||
a number, a string, a list or an object, which an engine call's parameter
|
||||
may name). Arguments are positional, in the order §4 and §5 give; `null`
|
||||
leaves out an optional one. There are no named arguments: `seed=7` in a
|
||||
call is a line that does not parse (`J100`), and a reader SHOULD say that
|
||||
arguments go by position. A value that several calls take, such as the
|
||||
noise a sample and a verdict both run under, is declared once and passed by
|
||||
its name. A name used before the statement that declares
|
||||
it is a **forward reference**, and is allowed. A name declared again
|
||||
replaces the earlier declaration (`J110`): this is how an answer is edited,
|
||||
by writing the changed statement again.
|
||||
|
||||
The statement named `root` is the answer's layout, `root = Answer([...])`,
|
||||
and SHOULD come first, so that a renderer can lay the answer out before its
|
||||
parts arrive. With no root, the views are drawn in the order they are
|
||||
written (`J107`).
|
||||
|
||||
## 4. Views
|
||||
|
||||
A view's first argument is what it shows: an engine call of the kind the
|
||||
table names, written in place (`Histogram(@Sample(bell, 1000))`) or named
|
||||
(`s = @Sample(bell, 1000)` then `Histogram(s)`).
|
||||
|
||||
| View | Arguments | Shows |
|
||||
|---|---|---|
|
||||
| `Answer` | `children`: a list of views (a program in the list is drawn as its circuit) | the root: the views, in order |
|
||||
| `Text` | `text`: a string | a line of prose; a number in it is the model's, and is warned of (`J111`) |
|
||||
| `Circuit` | `program` | the program's circuit, from the engine's layout, with the circuit in words |
|
||||
| `Histogram` | `@Sample` | the counts of a sample |
|
||||
| `Expectation` | `@Expect` | Pauli expectation values, each with its accuracy |
|
||||
| `Amplitudes` | `@Amplitudes` | amplitudes of basis states, with each one's probability and phase |
|
||||
| `Bloch` | `@State` | one qubit's Bloch vector and purity |
|
||||
| `Verdict` | `@Check` | how far the engine checked the program against its intent |
|
||||
| `Equivalence` | `@Equivalent` | whether two programs are the same circuit, and how the engine knows |
|
||||
| `Critique` | `@Critique` | the program's measures and smells |
|
||||
| `Estimate` | `@Estimate` | a fault-tolerant resource estimate and its frontier |
|
||||
| `Compile` | `@Compile` | the program compiled through checked passes, and the bound on its distance |
|
||||
| `Plan` | `@Plan` | the method a run would take, and why |
|
||||
| `Receipt` | `@Seal` | a seal over the statements it names, checked where it is shown |
|
||||
|
||||
## 5. Engine calls
|
||||
|
||||
Each call is the engine's own operation on the program it names. A
|
||||
parameter (shots, a seed, a qubit, a tolerance, ε, a budget) MAY be a literal
|
||||
or the name of a value statement; a call's program is always a program's
|
||||
name.
|
||||
|
||||
| Call | Arguments | The engine's operation |
|
||||
|---|---|---|
|
||||
| `@Sample` | `program`, `shots`, `seed`? (1), `noise`? | a job of that many shots at that seed (under that noise, an object of channel probabilities as a job's `noise`), planned and run: its method, why, the request and the result |
|
||||
| `@Expect` | `program`, `observables` (a list of Pauli strings, as `"Z0 Z1"`) | a job asking those expectation values |
|
||||
| `@Amplitudes` | `program`, `states` (bit strings, qubit n−1 first) | a job asking those amplitudes |
|
||||
| `@State` | `program`, `qubit` | the debugger stepped through every gate, before the final measurements: the qubit's Bloch vector, its length and its purity. A program that measures in the middle is refused |
|
||||
| `@Check` | `program`, `intent`, `tolerance`?, `noise`? | the verdict a job with that intent (and that noise) gets (`wai_quantum::engine::verdict`): a distribution of its measured bits as an object (`{"00": 0.5, "11": 0.5}`), a program it must equal (its name, or `{"equivalent": name}`), or one whose state it must prepare (`{"prepares": name}`) |
|
||||
| `@Equivalent` | `program`, `reference` | the equivalence ladder: the same circuit up to a global phase, and how that was decided |
|
||||
| `@Critique` | `program` | the critique: measures and smells |
|
||||
| `@Estimate` | `program`, `qubit`? (a physical qubit's name), `budget`? | the resource estimate |
|
||||
| `@Compile` | `program`, `epsilon`? | the compile, with its certificate |
|
||||
| `@Plan` | `program` | the plan of a run of 1024 shots |
|
||||
| `@Seal` | `statements`: a list of programs, calls, or views of a call | a receipt over what they give (§8.2) |
|
||||
|
||||
A call the engine refuses is a refusal with its codes (the job layer's
|
||||
`J…`, a program's `Q…`), for that view alone; the rest of the answer is drawn.
|
||||
|
||||
## 6. Diagnostics
|
||||
|
||||
Every problem has a code that never changes meaning once released. A
|
||||
program's problems are the reader's own codes (`Q…`), at the answer's line.
|
||||
A statement's are the job layer's, `J100` to `J112`, each with what becomes
|
||||
of the statement:
|
||||
|
||||
| Code | Outcome | Meaning |
|
||||
|---|---|---|
|
||||
| `J100` | dropped | A line that is not a statement, a program, a comment or a marker. |
|
||||
| `J101` | dropped | A view the layer does not have. |
|
||||
| `J102` | dropped | An `@` call the engine does not have. |
|
||||
| `J103` | dropped | A required argument missing. |
|
||||
| `J104` | dropped | An argument of the wrong kind: a number where a view takes the engine's call (a number in a view comes from the engine), a list entry the list does not take (left out of the list), a root that is not `Answer`. |
|
||||
| `J105` | warned | More arguments than the view or call takes: the extra ones are left out. |
|
||||
| `J106` | dropped | A name no statement declares, or one whose statement was left out (a program the reader refused, say): the statement that names it is left out, and a list that names it is drawn without it. |
|
||||
| `J107` | defaulted | No root: the views in the order they are written. |
|
||||
| `J108` | dropped | The text ends inside a program or a statement. |
|
||||
| `J109` | dropped | Statements that name each other in a cycle. |
|
||||
| `J110` | warned | A name declared again: the later declaration stands. |
|
||||
| `J111` | warned | A number in a view's text, which no engine call gave (one with a decimal point, a per cent, or two digits or more). |
|
||||
| `J112` | warned | A statement the root does not reach: it is not drawn. |
|
||||
|
||||
`wai_quantum::engine::refusal` holds this table with the job layer's others
|
||||
(`wai/wai-quantum/docs/job-refusals.md`). An **error** is a diagnostic whose
|
||||
outcome is `dropped` or `refused`; the rest are notes. A host that sends an
|
||||
answer's problems back to the model so that it can repair them SHOULD send
|
||||
the errors alone, each as `line N: message [CODE]`, and never the notes.
|
||||
|
||||
## 7. Reading as the text streams
|
||||
|
||||
A reader takes the text in pieces as they arrive, in any split, and reads
|
||||
each line as it completes. After each piece it can give a **snapshot**: each
|
||||
statement read so far, **ready** (read, checked, and everything it names is
|
||||
ready), **pending** (it names a statement that has not arrived) or
|
||||
**dropped** (with the diagnostic that says why). The root is ready as soon as
|
||||
its line arrives, and the snapshot's order holds every view it lists, those
|
||||
that have not arrived among them, so a renderer lays the answer out first. A
|
||||
view that is ready can be drawn, and its call carried out, at once.
|
||||
|
||||
When the text has ended, the reader gives the **answer**: a last line
|
||||
without its LF is read; a program or a statement the text ends inside is
|
||||
dropped (`J108`); a name still undeclared is `J106`; the root's reach is
|
||||
checked (`J112`). A reader MUST give, for the same text, the same answer
|
||||
however it was split: the same statements, statuses, order, diagnostics and
|
||||
digest as reading the whole text at once.
|
||||
|
||||
## 8. Carrying the calls out, and sealing them
|
||||
|
||||
### 8.1 Values
|
||||
|
||||
A view's value is its call's; a `Circuit`'s is the engine's layout of the
|
||||
program and its description in words; a program's is `{"qasm", "digest"}`,
|
||||
its text and the BLAKE3 of it. A value MUST hold nothing the engine did not
|
||||
compute: a run's time is the host's, and a value MUST NOT carry it, so that
|
||||
running the answer again gives the same bytes.
|
||||
|
||||
### 8.2 The seal
|
||||
|
||||
`@Seal([a, b, …])` signs, with the host's key, as the job layer's receipt
|
||||
does (Ed25519 over the BLAKE3 of the RFC 8785 canonical text), the request
|
||||
|
||||
```json
|
||||
{ "format": "wai.quantum.answer/1", "answer": "<the answer's digest>", "sealed": ["a", "b"] }
|
||||
```
|
||||
|
||||
and the result `{"statements": {"a": <value>, "b": <value>}}`, the names
|
||||
those of the statements listed that are ready. Its value is in a job's form,
|
||||
`{"request", "result"}` with the receipt in the result, so any surface that
|
||||
checks a job's receipt checks it. A host with no key refuses a seal.
|
||||
|
||||
### 8.3 A stored answer
|
||||
|
||||
A stored answer is its source followed by a marker line carrying its seal's
|
||||
receipt:
|
||||
|
||||
```text
|
||||
]]>wai:receipt {"statement":"seal","receipt":{"alg":"ed25519","canon":"rfc8785","key":"…","digest":"…","signature":"…"}}
|
||||
```
|
||||
|
||||
To check it, read the answer, carry the sealed statements out again, build
|
||||
the request and the result of §8.2, and check the receipt over them. The
|
||||
engine is deterministic, so the same answer gives the same bytes on every
|
||||
build; a changed statement changes the digest or the values, and the
|
||||
receipt does not verify. A receipt shows that the key sealed these values for
|
||||
this answer; it does not show who holds the key.
|
||||
|
||||
## 9. What the layer costs in tokens
|
||||
|
||||
The corpus is `quantum-conformance/eval/answers.json`: the fourteen tasks of
|
||||
the model harness's task set (`eval/tasks.json`), each answer written four
|
||||
ways by `wai-quantum eval corpus`, and held by a test to the task set, every
|
||||
answer in the layer reading with no diagnostic and running to its intents:
|
||||
|
||||
| Form | What it carries |
|
||||
|---|---|
|
||||
| `plain` | the program alone, in a fenced block |
|
||||
| `views` | the layer whole: the program, its circuit, a sample when it measures, a verdict for each intent, a seal |
|
||||
| `views_request` | the layer with the sample and the verdicts alone |
|
||||
| `job` | the request an agent sends a run tool, as JSON with no white space |
|
||||
|
||||
`views_request` and `job` carry the same program and the same request, so
|
||||
they are the comparison of the layer against JSON; `plain` is what a model
|
||||
writes when it is asked for the program alone. Noise that a sample and a
|
||||
verdict both run under is declared once in the layer and passed by name
|
||||
(§3), as the JSON states it once. `eval/token_cost.py` counted every answer
|
||||
with the vocabularies of three open-weight models, read from their GGUF
|
||||
files by a tokenizer tool (`eval/token-cost.json`). Totals over the
|
||||
fourteen answers:
|
||||
|
||||
| Vocabulary | `plain` | `views` | `views_request` | `job` | `views_request` / `job` |
|
||||
|---|---:|---:|---:|---:|---:|
|
||||
| A, 49 159 tokens | 841 | 2 365 | 1 967 | 1 492 | 1.318 |
|
||||
| B, 248 320 tokens | 834 | 2 312 | 1 928 | 1 491 | 1.293 |
|
||||
| C, 262 144 tokens | 835 | 2 282 | 1 940 | 1 483 | 1.308 |
|
||||
|
||||
The means per answer are 60 tokens for the program alone, 163 to 169 for the
|
||||
layer whole, 138 to 141 for the layer with the request alone and 106 for
|
||||
the JSON. The three vocabularies, one a fifth the size of the other two,
|
||||
agree to within 3 percent on every ratio.
|
||||
|
||||
What the comparison shows:
|
||||
|
||||
- The layer costs more than JSON for the same request: 29 to 32 percent more
|
||||
in every vocabulary, 31 to 34 tokens an answer on the mean. The cost is
|
||||
per statement: the root's line, the fence's name, and each view's name and
|
||||
call, 24 to 28 tokens for one sample and one verdict. Those tokens carry
|
||||
what the JSON does not: which views to draw, and a name for each.
|
||||
- A second verdict is a second statement: 54 to 57 tokens more than the JSON
|
||||
on the task with two intents, one of them a reference program in its own
|
||||
fence. The noisy task, its noise named once, costs 36 to 41 more; written
|
||||
into each call, it cost 67 to 72 more.
|
||||
- The layer whole, with the circuit and the seal, costs 2.7 to 2.8 times the
|
||||
program alone and 1.54 to 1.59 times the JSON; the circuit and the seal
|
||||
add 24 to 28 tokens to an answer with one verdict, 30 to 34 to one with
|
||||
two.
|
||||
|
||||
The layer is not cheaper than JSON in tokens, and this draft does not claim
|
||||
it is. What it buys for the tokens is §1's: the numbers an answer shows are
|
||||
the engine's, never the model's, and the answer is drawn as it streams.
|
||||
|
||||
### 9.1 How well a model writes it
|
||||
|
||||
`wai-quantum eval run` asked one open-weight model each of the fourteen
|
||||
tasks at temperature 0: a mixture of experts of 35 billion parameters with
|
||||
3 billion active, quantised to 5 bits and served on the build host with its
|
||||
reasoning turned off. It was asked once for the program alone and once for
|
||||
an answer in the layer, each with no repair round and with one, which sends
|
||||
the engine's errors back for a corrected answer. **Valid** is an answer the
|
||||
engine reads with no error (in the layer, no error in the layer either);
|
||||
**solved** is one whose program holds the task's intent by proof or
|
||||
evidence. Joules are the model server's CPU energy as the kernel counts it
|
||||
for its process; the GPU the model runs on is not counted, so they compare
|
||||
these runs with each other and do not measure a task's whole cost.
|
||||
|
||||
| Asked for | Repair rounds | Valid | Solved | Joules per solved task |
|
||||
|---|---:|---:|---:|---:|
|
||||
| the program | 0 | 12 | 11 | 4.4 |
|
||||
| the program | 1 | 13 | 12 | 4.0 |
|
||||
| the layer | 0 | 4 | 3 | 17.6 |
|
||||
| the layer | 1 | 7 | 6 | 10.6 |
|
||||
|
||||
This model writes the layer far less reliably than it writes a program. Its
|
||||
errors are its own, not the reader's: a program in a fence with no name, a
|
||||
view given an engine call where it takes a program (`Circuit(@Compile(p))`),
|
||||
a name the root or a seal lists that no statement declares, a text or a
|
||||
circuit listed in a seal, arguments written as `seed=7`, and the prompt's
|
||||
example copied with its program's name. An answer that is not valid still
|
||||
draws, since a list leaves out what falls (§7) and only the statements in
|
||||
error are missing, unless its program is lost, as in the four first answers
|
||||
whose fence had no name or that ended inside the program. One repair round, with the codes and the lines, corrects
|
||||
three of the ten. The prompt was revised after the first run on these tasks
|
||||
to give each argument's kind and to state the rules those errors broke; the
|
||||
first run scored the same, 4 valid and 3 solved with no repair and 7 and 6
|
||||
with one, and the errors moved rather than went. The prompt and the reader
|
||||
are `answer::prompt()` and §6; whether a larger model or a model tuned on
|
||||
the layer does better is not measured here, and a report ranks nothing.
|
||||
|
||||
## 10. Conformance
|
||||
|
||||
`quantum-conformance/answers/` holds answers, each with the codes of its
|
||||
errors and warnings in line order, its root, its order, what its views show
|
||||
when run, and, for stored answers, whether the receipt verifies when the
|
||||
answer is run again. Every code of §6 has a case. A conforming reader MUST
|
||||
give each case's codes, root and order, and MUST give the same answer
|
||||
however the text is split (§7). A conforming host MUST give each view what
|
||||
its manifest says when run, and MUST verify the stored cases as they say.
|
||||
The reference implementation passes the set natively, under wasm32-wasip2
|
||||
and in the browser (wai-web's `engine_answer_parse` and
|
||||
`engine_answer_verify`); its stored case was written natively and verifies
|
||||
in each.
|
||||
|
||||
## 11. Implementation
|
||||
|
||||
- `wai_quantum::engine::answer`: the tables of §4 and §5 (`VIEWS`,
|
||||
`CALLS`), the reader (`parse`, and `Stream` with `push`, `snapshot` and
|
||||
`finish`), and `eval` (each call carried out, the seal, the marker, and a
|
||||
stored answer's check). `answer::prompt()` describes the layer to a model
|
||||
from the same tables, with its rules and a whole answer (`answer::EXAMPLE`)
|
||||
that reads with no diagnostic.
|
||||
- wai-web (feature `quantum_engine`): `AnswerStream`, `engine_answer_parse`,
|
||||
`engine_answer_prompt`, `engine_answer_verify`, `engine_answer_marker`, and
|
||||
on the page's engine `answer_value` and `answer_evaluate`.
|
||||
- Quantum Studio draws each statement as it arrives, its calls carried out by
|
||||
the engine in the page; the desktop app answers the same calls natively.
|
||||
- `wai-quantum eval run --format views` asks a model to answer in the layer
|
||||
and scores what it writes (§9.1).
|
||||
|
|
@ -17,7 +17,10 @@ Four trees, each a pinned corpus:
|
|||
| `accept/` + `accept/accept.json` | both | payloads a conforming reader accepts, at the edges of the same rules, each with how it reads: capability, `n_qubits`, op count, circuit hash and measurement (extension §2) |
|
||||
|
||||
The OpenQASM 3 reader's corpus, programs with what the reader must do with
|
||||
each, is `qasm3/`, with a README of its own.
|
||||
each, is `qasm3/`, with a README of its own. The error-correction text formats
|
||||
(noisy Clifford circuits and detector error models, read and written back byte
|
||||
for byte, with what each must count and what must be refused) are `qec-text/`,
|
||||
with a README of its own.
|
||||
|
||||
An entry with no `capability` is a `wai.quantum.circuit` vector. The trees are the
|
||||
one reference all three surfaces are checked against, rather than being checked
|
||||
|
|
|
|||
51
wai/quantum-conformance/answers/README.md
Normal file
51
wai/quantum-conformance/answers/README.md
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
# Answer conformance
|
||||
|
||||
Answers in the answer view layer ([quantum-answers.md](../../extensions/quantum-answers.md),
|
||||
`wai_quantum::engine::answer`), each with what the layer must make of it.
|
||||
|
||||
| Path | What |
|
||||
|---|---|
|
||||
| `cases/*.wqa` | The answers: a program, a sample, a verdict and a seal; an intent named by a reference program; the equivalence ladder; an intent that fails; expectation values, amplitudes and a Bloch vector; an engine call named apart from its view; no root; and one case for each code of the layer (`J100` to `J112`) and for a program the reader refuses (`Q103`). `bell-crlf` is `bell` with CRLF line ends. `bell-stored` is `bell` with the receipt marker its seal gives under the key whose seed is 32 bytes of 3, and `bell-stored-changed` the same with one sample's shots changed. |
|
||||
| `manifest.json` | Each case: its file, what it covers, and what it must give (the manifest's `expect` says what each field means). |
|
||||
| `bundle.json` | The manifest's cases with every answer inline, for builds that read no files. |
|
||||
|
||||
A case is held to the codes of its errors (the diagnostics whose outcome is
|
||||
`dropped` or `refused`, the ones a model is sent back) and of its warnings, in
|
||||
the order of their lines; to its root; and to the order its views are drawn
|
||||
in. A case with `run` has its views carried out on the engine and held to what
|
||||
they show: a sample's total and its outcomes, a verdict's level and whether it
|
||||
holds, an equivalence's decision, expectation values, a Bloch vector, the
|
||||
names a seal covers and its receipt. A stored case's receipt is checked by
|
||||
running the answer again: the engine is deterministic, so the same answer
|
||||
gives the same sealed bytes on every build, and a changed one does not verify.
|
||||
|
||||
## Native
|
||||
|
||||
```sh
|
||||
cd wai/wai-quantum
|
||||
cargo test --release --features full --test answer_conformance
|
||||
```
|
||||
|
||||
Two tests: every case against its manifest, and the bundle (and the stored
|
||||
cases) held equal to the files. After changing a case or the manifest, write
|
||||
them:
|
||||
|
||||
```sh
|
||||
WAI_ANSWER_BUNDLE_WRITE=1 cargo test --release --features full --test answer_conformance the_bundle_is_the_corpus
|
||||
```
|
||||
|
||||
## WASI (the edge)
|
||||
|
||||
```sh
|
||||
CARGO_TARGET_WASM32_WASIP2_RUNNER=wasmtime \
|
||||
cargo test --target wasm32-wasip2 --features full --test answer_conformance
|
||||
```
|
||||
|
||||
## Browser
|
||||
|
||||
wai-web's wasm32 tests (`--features quantum_engine`, under
|
||||
`wasm-bindgen-test-runner`) read every case of the bundle with
|
||||
`engine_answer_parse` and verify the stored cases with `engine_answer_verify`.
|
||||
|
||||
CI: `wai-quantum-verdict.yml` (native and wasm32-wasip2) and
|
||||
`wai-web-wasm.yml` (the browser build).
|
||||
462
wai/quantum-conformance/answers/bundle.json
Normal file
462
wai/quantum-conformance/answers/bundle.json
Normal file
|
|
@ -0,0 +1,462 @@
|
|||
{
|
||||
"format": "wai.quantum-answer-conformance-bundle/1",
|
||||
"about": "manifest.json's cases with every answer inline, for builds that read no files (the browser, the edge); a test holds it equal to the files",
|
||||
"cases": [
|
||||
{
|
||||
"name": "bell",
|
||||
"file": "cases/bell.wqa",
|
||||
"covers": [
|
||||
"a well-formed answer: a program, a sample, a verdict and a seal"
|
||||
],
|
||||
"expect": {
|
||||
"errors": [],
|
||||
"warnings": [],
|
||||
"root": "root",
|
||||
"order": [
|
||||
"bell",
|
||||
"counts",
|
||||
"check",
|
||||
"seal"
|
||||
],
|
||||
"run": {
|
||||
"counts": {
|
||||
"total": 1000,
|
||||
"outcomes": [
|
||||
"00",
|
||||
"11"
|
||||
]
|
||||
},
|
||||
"check": {
|
||||
"level": "proof",
|
||||
"holds": true
|
||||
},
|
||||
"seal": {
|
||||
"sealed": [
|
||||
"bell",
|
||||
"counts",
|
||||
"check"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"answer": "root = Answer([bell, counts, check, seal])\n```qasm bell\nOPENQASM 3.0;\nqubit[2] q;\nbit[2] c;\nh q[0];\ncx q[0], q[1];\nc = measure q;\n```\ncounts = Histogram(@Sample(bell, 1000))\ncheck = Verdict(@Check(bell, {\"00\": 0.5, \"11\": 0.5}))\nseal = Receipt(@Seal([bell, counts, check]))\n"
|
||||
},
|
||||
{
|
||||
"name": "bell-crlf",
|
||||
"file": "cases/bell-crlf.wqa",
|
||||
"covers": [
|
||||
"CRLF line ends read as LF: the same answer and the same digest"
|
||||
],
|
||||
"expect": {
|
||||
"errors": [],
|
||||
"warnings": [],
|
||||
"root": "root",
|
||||
"order": [
|
||||
"bell",
|
||||
"counts",
|
||||
"check",
|
||||
"seal"
|
||||
],
|
||||
"same_as": "bell"
|
||||
},
|
||||
"answer": "root = Answer([bell, counts, check, seal])\r\n```qasm bell\r\nOPENQASM 3.0;\r\nqubit[2] q;\r\nbit[2] c;\r\nh q[0];\r\ncx q[0], q[1];\r\nc = measure q;\r\n```\r\ncounts = Histogram(@Sample(bell, 1000))\r\ncheck = Verdict(@Check(bell, {\"00\": 0.5, \"11\": 0.5}))\r\nseal = Receipt(@Seal([bell, counts, check]))\r\n"
|
||||
},
|
||||
{
|
||||
"name": "ghz-prepares",
|
||||
"file": "cases/ghz-prepares.wqa",
|
||||
"covers": [
|
||||
"an intent named by a reference program whose state it must prepare"
|
||||
],
|
||||
"expect": {
|
||||
"errors": [],
|
||||
"warnings": [],
|
||||
"root": "root",
|
||||
"order": [
|
||||
"ghz",
|
||||
"check"
|
||||
],
|
||||
"run": {
|
||||
"check": {
|
||||
"level": "proof",
|
||||
"holds": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"answer": "root = Answer([ghz, check])\n```qasm ghz\nOPENQASM 3.0;\ninclude \"stdgates.inc\";\nqubit[4] q;\nbit[4] c;\nh q[0];\ncx q[0], q[1];\ncx q[0], q[2];\ncx q[1], q[3];\nc = measure q;\n```\n```qasm chain\nOPENQASM 3.0;\ninclude \"stdgates.inc\";\nqubit[4] q;\nbit[4] c;\nh q[0];\ncx q[0], q[1];\ncx q[1], q[2];\ncx q[2], q[3];\nc = measure q;\n```\ncheck = Verdict(@Check(ghz, {\"prepares\": chain}))\n"
|
||||
},
|
||||
{
|
||||
"name": "grover-equivalent",
|
||||
"file": "cases/grover-equivalent.wqa",
|
||||
"covers": [
|
||||
"the equivalence ladder, and a distribution of one outcome"
|
||||
],
|
||||
"expect": {
|
||||
"errors": [],
|
||||
"warnings": [],
|
||||
"root": "root",
|
||||
"order": [
|
||||
"same",
|
||||
"check"
|
||||
],
|
||||
"run": {
|
||||
"same": {
|
||||
"verdict": "equivalent"
|
||||
},
|
||||
"check": {
|
||||
"level": "proof",
|
||||
"holds": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"answer": "root = Answer([same, check])\n```qasm grover\nOPENQASM 3.0;\ninclude \"stdgates.inc\";\nqubit[2] q;\nbit[2] c;\nh q;\ncz q[0], q[1];\nh q;\nx q;\ncz q[0], q[1];\nx q;\nh q;\nc = measure q;\n```\n```qasm grover_cx\nOPENQASM 3.0;\ninclude \"stdgates.inc\";\nqubit[2] q;\nbit[2] c;\nh q;\nh q[1];\ncx q[0], q[1];\nh q[1];\nh q;\nx q;\nh q[1];\ncx q[0], q[1];\nh q[1];\nx q;\nh q;\nc = measure q;\n```\nsame = Equivalence(@Equivalent(grover, grover_cx))\ncheck = Verdict(@Check(grover, {\"11\": 1.0}))\n"
|
||||
},
|
||||
{
|
||||
"name": "wrong-distribution",
|
||||
"file": "cases/wrong-distribution.wqa",
|
||||
"covers": [
|
||||
"an intent that fails, decided by proof"
|
||||
],
|
||||
"expect": {
|
||||
"errors": [],
|
||||
"warnings": [],
|
||||
"root": "root",
|
||||
"order": [
|
||||
"check"
|
||||
],
|
||||
"run": {
|
||||
"check": {
|
||||
"level": "proof",
|
||||
"holds": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"answer": "root = Answer([check])\n```qasm bell\nOPENQASM 3.0;\nqubit[2] q;\nbit[2] c;\nh q[0];\ncx q[0], q[1];\nc = measure q;\n```\ncheck = Verdict(@Check(bell, {\"00\": 1.0}))\n"
|
||||
},
|
||||
{
|
||||
"name": "state-views",
|
||||
"file": "cases/state-views.wqa",
|
||||
"covers": [
|
||||
"a circuit, expectation values, amplitudes and a Bloch vector, each the engine's"
|
||||
],
|
||||
"expect": {
|
||||
"errors": [],
|
||||
"warnings": [],
|
||||
"root": "root",
|
||||
"order": [
|
||||
"circ",
|
||||
"z",
|
||||
"amps",
|
||||
"plus"
|
||||
],
|
||||
"run": {
|
||||
"z": {
|
||||
"expectations": [
|
||||
1.0,
|
||||
1.0
|
||||
]
|
||||
},
|
||||
"plus": {
|
||||
"bloch_x": 1.0
|
||||
}
|
||||
}
|
||||
},
|
||||
"answer": "root = Answer([circ, z, amps, plus])\n```qasm p\nOPENQASM 3.0;\nqubit[2] q;\nh q[0];\ncx q[0], q[1];\n```\n```qasm one\nOPENQASM 3.0;\nqubit[1] q;\nh q[0];\n```\ncirc = Circuit(p)\nz = Expectation(@Expect(p, [\"Z0 Z1\", \"X0 X1\"]))\namps = Amplitudes(@Amplitudes(p, [\"00\", \"11\"]))\nplus = Bloch(@State(one, 0))\n"
|
||||
},
|
||||
{
|
||||
"name": "calls-named-apart",
|
||||
"file": "cases/calls-named-apart.wqa",
|
||||
"covers": [
|
||||
"an engine call as a statement of its own, named by the view; a forward reference; a value no view uses"
|
||||
],
|
||||
"expect": {
|
||||
"errors": [],
|
||||
"warnings": [
|
||||
"J112"
|
||||
],
|
||||
"root": "root",
|
||||
"order": [
|
||||
"counts",
|
||||
"check"
|
||||
],
|
||||
"run": {
|
||||
"counts": {
|
||||
"total": 200,
|
||||
"outcomes": [
|
||||
"00",
|
||||
"11"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"answer": "root = Answer([counts, check])\ns = @Sample(bell, 200, 7)\ncounts = Histogram(s)\n```qasm bell\nOPENQASM 3.0;\nqubit[2] q;\nbit[2] c;\nh q[0];\ncx q[0], q[1];\nc = measure q;\n```\nwant = {\"00\": 0.5, \"11\": 0.5}\ncheck = Verdict(@Check(bell, {\"00\": 0.5, \"11\": 0.5}, 1e-9))\n"
|
||||
},
|
||||
{
|
||||
"name": "no-root",
|
||||
"file": "cases/no-root.wqa",
|
||||
"covers": [
|
||||
"no root: the views in the order written"
|
||||
],
|
||||
"expect": {
|
||||
"errors": [],
|
||||
"warnings": [
|
||||
"J107"
|
||||
],
|
||||
"root": null,
|
||||
"order": [
|
||||
"circ",
|
||||
"counts"
|
||||
]
|
||||
},
|
||||
"answer": "```qasm bell\nOPENQASM 3.0;\nqubit[2] q;\nbit[2] c;\nh q[0];\ncx q[0], q[1];\nc = measure q;\n```\ncirc = Circuit(bell)\ncounts = Histogram(@Sample(bell, 100))\n"
|
||||
},
|
||||
{
|
||||
"name": "number-in-a-view",
|
||||
"file": "cases/number-in-a-view.wqa",
|
||||
"covers": [
|
||||
"a number where a view takes the engine's call"
|
||||
],
|
||||
"expect": {
|
||||
"errors": [
|
||||
"J106",
|
||||
"J104"
|
||||
],
|
||||
"warnings": [
|
||||
"J112"
|
||||
],
|
||||
"root": "root",
|
||||
"order": []
|
||||
},
|
||||
"answer": "root = Answer([counts])\n```qasm bell\nOPENQASM 3.0;\nqubit[2] q;\nbit[2] c;\nh q[0];\ncx q[0], q[1];\nc = measure q;\n```\ncounts = Histogram(1000)\n"
|
||||
},
|
||||
{
|
||||
"name": "unknown-view-and-call",
|
||||
"file": "cases/unknown-view-and-call.wqa",
|
||||
"covers": [
|
||||
"a view and engine calls the layer does not have; the root listing an engine call, which it does not take, leaves it out"
|
||||
],
|
||||
"expect": {
|
||||
"errors": [
|
||||
"J104",
|
||||
"J106",
|
||||
"J101",
|
||||
"J102",
|
||||
"J102"
|
||||
],
|
||||
"warnings": [
|
||||
"J112"
|
||||
],
|
||||
"root": "root",
|
||||
"order": []
|
||||
},
|
||||
"answer": "root = Answer([a, b, c])\n```qasm bell\nOPENQASM 3.0;\nqubit[2] q;\nbit[2] c;\nh q[0];\ncx q[0], q[1];\nc = measure q;\n```\na = Barchart(@Sample(bell, 10))\nb = Histogram(@Run(bell, 10))\nc = @Simulate(bell)\n"
|
||||
},
|
||||
{
|
||||
"name": "missing-and-extra-arguments",
|
||||
"file": "cases/missing-and-extra-arguments.wqa",
|
||||
"covers": [
|
||||
"an argument missing, and one too many"
|
||||
],
|
||||
"expect": {
|
||||
"errors": [
|
||||
"J106",
|
||||
"J103"
|
||||
],
|
||||
"warnings": [
|
||||
"J105"
|
||||
],
|
||||
"root": "root",
|
||||
"order": [
|
||||
"b"
|
||||
]
|
||||
},
|
||||
"answer": "root = Answer([a, b])\n```qasm bell\nOPENQASM 3.0;\nqubit[2] q;\nbit[2] c;\nh q[0];\ncx q[0], q[1];\nc = measure q;\n```\na = Histogram(@Sample(bell))\nb = Circuit(bell, bell)\n"
|
||||
},
|
||||
{
|
||||
"name": "a-program-that-does-not-read",
|
||||
"file": "cases/a-program-that-does-not-read.wqa",
|
||||
"covers": [
|
||||
"the reader's refusal keeps its code; what names the program falls with it; a name nothing declares"
|
||||
],
|
||||
"expect": {
|
||||
"errors": [
|
||||
"J106",
|
||||
"Q103",
|
||||
"J106",
|
||||
"J106"
|
||||
],
|
||||
"warnings": [],
|
||||
"root": "root",
|
||||
"order": []
|
||||
},
|
||||
"answer": "root = Answer([counts, circ])\n```qasm bad\nOPENQASM 3.0;\nqubit[1] q;\nfoo q[0];\n```\ncounts = Histogram(@Sample(bad, 10))\ncirc = Circuit(nowhere)\n"
|
||||
},
|
||||
{
|
||||
"name": "truncated-program",
|
||||
"file": "cases/truncated-program.wqa",
|
||||
"covers": [
|
||||
"the text ends inside a program"
|
||||
],
|
||||
"expect": {
|
||||
"errors": [
|
||||
"J106",
|
||||
"J106",
|
||||
"J108"
|
||||
],
|
||||
"warnings": [],
|
||||
"root": "root",
|
||||
"order": []
|
||||
},
|
||||
"answer": "root = Answer([bell, counts])\ncounts = Histogram(@Sample(bell, 10))\n```qasm bell\nOPENQASM 3.0;\nqubit[2] q;\nh q[0];\n"
|
||||
},
|
||||
{
|
||||
"name": "truncated-statement",
|
||||
"file": "cases/truncated-statement.wqa",
|
||||
"covers": [
|
||||
"the text ends inside a statement"
|
||||
],
|
||||
"expect": {
|
||||
"errors": [
|
||||
"J106",
|
||||
"J108"
|
||||
],
|
||||
"warnings": [],
|
||||
"root": "root",
|
||||
"order": [
|
||||
"bell"
|
||||
]
|
||||
},
|
||||
"answer": "root = Answer([bell, counts])\n```qasm bell\nOPENQASM 3.0;\nqubit[2] q;\nbit[2] c;\nh q[0];\ncx q[0], q[1];\nc = measure q;\n```\ncounts = Histogram(@Sample(bell, 10"
|
||||
},
|
||||
{
|
||||
"name": "cycle",
|
||||
"file": "cases/cycle.wqa",
|
||||
"covers": [
|
||||
"statements that name each other"
|
||||
],
|
||||
"expect": {
|
||||
"errors": [
|
||||
"J106",
|
||||
"J109",
|
||||
"J109"
|
||||
],
|
||||
"warnings": [
|
||||
"J112"
|
||||
],
|
||||
"root": "root",
|
||||
"order": []
|
||||
},
|
||||
"answer": "root = Answer([a])\n```qasm bell\nOPENQASM 3.0;\nqubit[2] q;\nbit[2] c;\nh q[0];\ncx q[0], q[1];\nc = measure q;\n```\na = Receipt(@Seal([b]))\nb = @Seal([a])\n"
|
||||
},
|
||||
{
|
||||
"name": "edit-by-redeclaring",
|
||||
"file": "cases/edit-by-redeclaring.wqa",
|
||||
"covers": [
|
||||
"a later declaration stands: an edit"
|
||||
],
|
||||
"expect": {
|
||||
"errors": [],
|
||||
"warnings": [
|
||||
"J110"
|
||||
],
|
||||
"root": "root",
|
||||
"order": [
|
||||
"counts"
|
||||
],
|
||||
"run": {
|
||||
"counts": {
|
||||
"total": 500,
|
||||
"outcomes": [
|
||||
"00",
|
||||
"11"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"answer": "root = Answer([counts])\n```qasm bell\nOPENQASM 3.0;\nqubit[2] q;\nbit[2] c;\nh q[0];\ncx q[0], q[1];\nc = measure q;\n```\ncounts = Histogram(@Sample(bell, 10))\ncounts = Histogram(@Sample(bell, 500))\n"
|
||||
},
|
||||
{
|
||||
"name": "prose-and-unused",
|
||||
"file": "cases/prose-and-unused.wqa",
|
||||
"covers": [
|
||||
"a number in prose, and a view the root does not reach"
|
||||
],
|
||||
"expect": {
|
||||
"errors": [],
|
||||
"warnings": [
|
||||
"J111",
|
||||
"J112"
|
||||
],
|
||||
"root": "root",
|
||||
"order": [
|
||||
"note",
|
||||
"circ"
|
||||
]
|
||||
},
|
||||
"answer": "root = Answer([note, circ])\n```qasm bell\nOPENQASM 3.0;\nqubit[2] q;\nbit[2] c;\nh q[0];\ncx q[0], q[1];\nc = measure q;\n```\nnote = Text(\"about 50% read 00, the rest 11\")\ncirc = Circuit(bell)\nextra = Plan(@Plan(bell))\n"
|
||||
},
|
||||
{
|
||||
"name": "lines-that-are-not-statements",
|
||||
"file": "cases/lines-that-are-not-statements.wqa",
|
||||
"covers": [
|
||||
"prose, a fence that opens no program, and a marker this layer does not read"
|
||||
],
|
||||
"expect": {
|
||||
"errors": [
|
||||
"J100",
|
||||
"J100",
|
||||
"J100"
|
||||
],
|
||||
"warnings": [],
|
||||
"root": "root",
|
||||
"order": [
|
||||
"circ"
|
||||
]
|
||||
},
|
||||
"answer": "root = Answer([circ])\n```qasm bell\nOPENQASM 3.0;\nqubit[2] q;\nbit[2] c;\nh q[0];\ncx q[0], q[1];\nc = measure q;\n```\ncirc = Circuit(bell)\nThe program above makes a Bell pair.\n```python\n]]>wai:summary {}\n"
|
||||
},
|
||||
{
|
||||
"name": "bell-stored",
|
||||
"file": "cases/bell-stored.wqa",
|
||||
"covers": [
|
||||
"a stored answer with its receipt marker: run again, the receipt verifies"
|
||||
],
|
||||
"expect": {
|
||||
"errors": [],
|
||||
"warnings": [],
|
||||
"root": "root",
|
||||
"order": [
|
||||
"bell",
|
||||
"counts",
|
||||
"check",
|
||||
"seal"
|
||||
],
|
||||
"stored": {
|
||||
"valid": true
|
||||
}
|
||||
},
|
||||
"answer": "root = Answer([bell, counts, check, seal])\n```qasm bell\nOPENQASM 3.0;\nqubit[2] q;\nbit[2] c;\nh q[0];\ncx q[0], q[1];\nc = measure q;\n```\ncounts = Histogram(@Sample(bell, 1000))\ncheck = Verdict(@Check(bell, {\"00\": 0.5, \"11\": 0.5}))\nseal = Receipt(@Seal([bell, counts, check]))\n]]>wai:receipt {\"statement\":\"seal\",\"receipt\":{\"alg\":\"ed25519\",\"canon\":\"rfc8785\",\"key\":\"ed4928c628d1c2c6eae90338905995612959273a5c63f93636c14614ac8737d1\",\"digest\":\"172dd72f18d77dc7ef99525fc61859062015f4a44a34d8ae5c76a7ba4a1b7c6d\",\"signature\":\"4e0288de0313b8f76b03bcbcfedf01989833fd63fd31e7bf0d981b75541c0362b92af555b161a552e6a4242e5a1793d9f90705ef8297db924a3abd577e6e8907\"}}\n"
|
||||
},
|
||||
{
|
||||
"name": "bell-stored-changed",
|
||||
"file": "cases/bell-stored-changed.wqa",
|
||||
"covers": [
|
||||
"the stored answer with a statement changed: the receipt does not verify"
|
||||
],
|
||||
"expect": {
|
||||
"errors": [],
|
||||
"warnings": [],
|
||||
"root": "root",
|
||||
"order": [
|
||||
"bell",
|
||||
"counts",
|
||||
"check",
|
||||
"seal"
|
||||
],
|
||||
"stored": {
|
||||
"valid": false
|
||||
}
|
||||
},
|
||||
"answer": "root = Answer([bell, counts, check, seal])\n```qasm bell\nOPENQASM 3.0;\nqubit[2] q;\nbit[2] c;\nh q[0];\ncx q[0], q[1];\nc = measure q;\n```\ncounts = Histogram(@Sample(bell, 999))\ncheck = Verdict(@Check(bell, {\"00\": 0.5, \"11\": 0.5}))\nseal = Receipt(@Seal([bell, counts, check]))\n]]>wai:receipt {\"statement\":\"seal\",\"receipt\":{\"alg\":\"ed25519\",\"canon\":\"rfc8785\",\"key\":\"ed4928c628d1c2c6eae90338905995612959273a5c63f93636c14614ac8737d1\",\"digest\":\"172dd72f18d77dc7ef99525fc61859062015f4a44a34d8ae5c76a7ba4a1b7c6d\",\"signature\":\"4e0288de0313b8f76b03bcbcfedf01989833fd63fd31e7bf0d981b75541c0362b92af555b161a552e6a4242e5a1793d9f90705ef8297db924a3abd577e6e8907\"}}\n"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
root = Answer([counts, circ])
|
||||
```qasm bad
|
||||
OPENQASM 3.0;
|
||||
qubit[1] q;
|
||||
foo q[0];
|
||||
```
|
||||
counts = Histogram(@Sample(bad, 10))
|
||||
circ = Circuit(nowhere)
|
||||
12
wai/quantum-conformance/answers/cases/bell-crlf.wqa
Normal file
12
wai/quantum-conformance/answers/cases/bell-crlf.wqa
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
root = Answer([bell, counts, check, seal])
|
||||
```qasm bell
|
||||
OPENQASM 3.0;
|
||||
qubit[2] q;
|
||||
bit[2] c;
|
||||
h q[0];
|
||||
cx q[0], q[1];
|
||||
c = measure q;
|
||||
```
|
||||
counts = Histogram(@Sample(bell, 1000))
|
||||
check = Verdict(@Check(bell, {"00": 0.5, "11": 0.5}))
|
||||
seal = Receipt(@Seal([bell, counts, check]))
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
root = Answer([bell, counts, check, seal])
|
||||
```qasm bell
|
||||
OPENQASM 3.0;
|
||||
qubit[2] q;
|
||||
bit[2] c;
|
||||
h q[0];
|
||||
cx q[0], q[1];
|
||||
c = measure q;
|
||||
```
|
||||
counts = Histogram(@Sample(bell, 999))
|
||||
check = Verdict(@Check(bell, {"00": 0.5, "11": 0.5}))
|
||||
seal = Receipt(@Seal([bell, counts, check]))
|
||||
]]>wai:receipt {"statement":"seal","receipt":{"alg":"ed25519","canon":"rfc8785","key":"ed4928c628d1c2c6eae90338905995612959273a5c63f93636c14614ac8737d1","digest":"172dd72f18d77dc7ef99525fc61859062015f4a44a34d8ae5c76a7ba4a1b7c6d","signature":"4e0288de0313b8f76b03bcbcfedf01989833fd63fd31e7bf0d981b75541c0362b92af555b161a552e6a4242e5a1793d9f90705ef8297db924a3abd577e6e8907"}}
|
||||
13
wai/quantum-conformance/answers/cases/bell-stored.wqa
Normal file
13
wai/quantum-conformance/answers/cases/bell-stored.wqa
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
root = Answer([bell, counts, check, seal])
|
||||
```qasm bell
|
||||
OPENQASM 3.0;
|
||||
qubit[2] q;
|
||||
bit[2] c;
|
||||
h q[0];
|
||||
cx q[0], q[1];
|
||||
c = measure q;
|
||||
```
|
||||
counts = Histogram(@Sample(bell, 1000))
|
||||
check = Verdict(@Check(bell, {"00": 0.5, "11": 0.5}))
|
||||
seal = Receipt(@Seal([bell, counts, check]))
|
||||
]]>wai:receipt {"statement":"seal","receipt":{"alg":"ed25519","canon":"rfc8785","key":"ed4928c628d1c2c6eae90338905995612959273a5c63f93636c14614ac8737d1","digest":"172dd72f18d77dc7ef99525fc61859062015f4a44a34d8ae5c76a7ba4a1b7c6d","signature":"4e0288de0313b8f76b03bcbcfedf01989833fd63fd31e7bf0d981b75541c0362b92af555b161a552e6a4242e5a1793d9f90705ef8297db924a3abd577e6e8907"}}
|
||||
12
wai/quantum-conformance/answers/cases/bell.wqa
Normal file
12
wai/quantum-conformance/answers/cases/bell.wqa
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
root = Answer([bell, counts, check, seal])
|
||||
```qasm bell
|
||||
OPENQASM 3.0;
|
||||
qubit[2] q;
|
||||
bit[2] c;
|
||||
h q[0];
|
||||
cx q[0], q[1];
|
||||
c = measure q;
|
||||
```
|
||||
counts = Histogram(@Sample(bell, 1000))
|
||||
check = Verdict(@Check(bell, {"00": 0.5, "11": 0.5}))
|
||||
seal = Receipt(@Seal([bell, counts, check]))
|
||||
13
wai/quantum-conformance/answers/cases/calls-named-apart.wqa
Normal file
13
wai/quantum-conformance/answers/cases/calls-named-apart.wqa
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
root = Answer([counts, check])
|
||||
s = @Sample(bell, 200, 7)
|
||||
counts = Histogram(s)
|
||||
```qasm bell
|
||||
OPENQASM 3.0;
|
||||
qubit[2] q;
|
||||
bit[2] c;
|
||||
h q[0];
|
||||
cx q[0], q[1];
|
||||
c = measure q;
|
||||
```
|
||||
want = {"00": 0.5, "11": 0.5}
|
||||
check = Verdict(@Check(bell, {"00": 0.5, "11": 0.5}, 1e-9))
|
||||
11
wai/quantum-conformance/answers/cases/cycle.wqa
Normal file
11
wai/quantum-conformance/answers/cases/cycle.wqa
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
root = Answer([a])
|
||||
```qasm bell
|
||||
OPENQASM 3.0;
|
||||
qubit[2] q;
|
||||
bit[2] c;
|
||||
h q[0];
|
||||
cx q[0], q[1];
|
||||
c = measure q;
|
||||
```
|
||||
a = Receipt(@Seal([b]))
|
||||
b = @Seal([a])
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
root = Answer([counts])
|
||||
```qasm bell
|
||||
OPENQASM 3.0;
|
||||
qubit[2] q;
|
||||
bit[2] c;
|
||||
h q[0];
|
||||
cx q[0], q[1];
|
||||
c = measure q;
|
||||
```
|
||||
counts = Histogram(@Sample(bell, 10))
|
||||
counts = Histogram(@Sample(bell, 500))
|
||||
24
wai/quantum-conformance/answers/cases/ghz-prepares.wqa
Normal file
24
wai/quantum-conformance/answers/cases/ghz-prepares.wqa
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
root = Answer([ghz, check])
|
||||
```qasm ghz
|
||||
OPENQASM 3.0;
|
||||
include "stdgates.inc";
|
||||
qubit[4] q;
|
||||
bit[4] c;
|
||||
h q[0];
|
||||
cx q[0], q[1];
|
||||
cx q[0], q[2];
|
||||
cx q[1], q[3];
|
||||
c = measure q;
|
||||
```
|
||||
```qasm chain
|
||||
OPENQASM 3.0;
|
||||
include "stdgates.inc";
|
||||
qubit[4] q;
|
||||
bit[4] c;
|
||||
h q[0];
|
||||
cx q[0], q[1];
|
||||
cx q[1], q[2];
|
||||
cx q[2], q[3];
|
||||
c = measure q;
|
||||
```
|
||||
check = Verdict(@Check(ghz, {"prepares": chain}))
|
||||
35
wai/quantum-conformance/answers/cases/grover-equivalent.wqa
Normal file
35
wai/quantum-conformance/answers/cases/grover-equivalent.wqa
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
root = Answer([same, check])
|
||||
```qasm grover
|
||||
OPENQASM 3.0;
|
||||
include "stdgates.inc";
|
||||
qubit[2] q;
|
||||
bit[2] c;
|
||||
h q;
|
||||
cz q[0], q[1];
|
||||
h q;
|
||||
x q;
|
||||
cz q[0], q[1];
|
||||
x q;
|
||||
h q;
|
||||
c = measure q;
|
||||
```
|
||||
```qasm grover_cx
|
||||
OPENQASM 3.0;
|
||||
include "stdgates.inc";
|
||||
qubit[2] q;
|
||||
bit[2] c;
|
||||
h q;
|
||||
h q[1];
|
||||
cx q[0], q[1];
|
||||
h q[1];
|
||||
h q;
|
||||
x q;
|
||||
h q[1];
|
||||
cx q[0], q[1];
|
||||
h q[1];
|
||||
x q;
|
||||
h q;
|
||||
c = measure q;
|
||||
```
|
||||
same = Equivalence(@Equivalent(grover, grover_cx))
|
||||
check = Verdict(@Check(grover, {"11": 1.0}))
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
root = Answer([circ])
|
||||
```qasm bell
|
||||
OPENQASM 3.0;
|
||||
qubit[2] q;
|
||||
bit[2] c;
|
||||
h q[0];
|
||||
cx q[0], q[1];
|
||||
c = measure q;
|
||||
```
|
||||
circ = Circuit(bell)
|
||||
The program above makes a Bell pair.
|
||||
```python
|
||||
]]>wai:summary {}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
root = Answer([a, b])
|
||||
```qasm bell
|
||||
OPENQASM 3.0;
|
||||
qubit[2] q;
|
||||
bit[2] c;
|
||||
h q[0];
|
||||
cx q[0], q[1];
|
||||
c = measure q;
|
||||
```
|
||||
a = Histogram(@Sample(bell))
|
||||
b = Circuit(bell, bell)
|
||||
10
wai/quantum-conformance/answers/cases/no-root.wqa
Normal file
10
wai/quantum-conformance/answers/cases/no-root.wqa
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
```qasm bell
|
||||
OPENQASM 3.0;
|
||||
qubit[2] q;
|
||||
bit[2] c;
|
||||
h q[0];
|
||||
cx q[0], q[1];
|
||||
c = measure q;
|
||||
```
|
||||
circ = Circuit(bell)
|
||||
counts = Histogram(@Sample(bell, 100))
|
||||
10
wai/quantum-conformance/answers/cases/number-in-a-view.wqa
Normal file
10
wai/quantum-conformance/answers/cases/number-in-a-view.wqa
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
root = Answer([counts])
|
||||
```qasm bell
|
||||
OPENQASM 3.0;
|
||||
qubit[2] q;
|
||||
bit[2] c;
|
||||
h q[0];
|
||||
cx q[0], q[1];
|
||||
c = measure q;
|
||||
```
|
||||
counts = Histogram(1000)
|
||||
12
wai/quantum-conformance/answers/cases/prose-and-unused.wqa
Normal file
12
wai/quantum-conformance/answers/cases/prose-and-unused.wqa
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
root = Answer([note, circ])
|
||||
```qasm bell
|
||||
OPENQASM 3.0;
|
||||
qubit[2] q;
|
||||
bit[2] c;
|
||||
h q[0];
|
||||
cx q[0], q[1];
|
||||
c = measure q;
|
||||
```
|
||||
note = Text("about 50% read 00, the rest 11")
|
||||
circ = Circuit(bell)
|
||||
extra = Plan(@Plan(bell))
|
||||
16
wai/quantum-conformance/answers/cases/state-views.wqa
Normal file
16
wai/quantum-conformance/answers/cases/state-views.wqa
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
root = Answer([circ, z, amps, plus])
|
||||
```qasm p
|
||||
OPENQASM 3.0;
|
||||
qubit[2] q;
|
||||
h q[0];
|
||||
cx q[0], q[1];
|
||||
```
|
||||
```qasm one
|
||||
OPENQASM 3.0;
|
||||
qubit[1] q;
|
||||
h q[0];
|
||||
```
|
||||
circ = Circuit(p)
|
||||
z = Expectation(@Expect(p, ["Z0 Z1", "X0 X1"]))
|
||||
amps = Amplitudes(@Amplitudes(p, ["00", "11"]))
|
||||
plus = Bloch(@State(one, 0))
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
root = Answer([bell, counts])
|
||||
counts = Histogram(@Sample(bell, 10))
|
||||
```qasm bell
|
||||
OPENQASM 3.0;
|
||||
qubit[2] q;
|
||||
h q[0];
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
root = Answer([bell, counts])
|
||||
```qasm bell
|
||||
OPENQASM 3.0;
|
||||
qubit[2] q;
|
||||
bit[2] c;
|
||||
h q[0];
|
||||
cx q[0], q[1];
|
||||
c = measure q;
|
||||
```
|
||||
counts = Histogram(@Sample(bell, 10
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
root = Answer([a, b, c])
|
||||
```qasm bell
|
||||
OPENQASM 3.0;
|
||||
qubit[2] q;
|
||||
bit[2] c;
|
||||
h q[0];
|
||||
cx q[0], q[1];
|
||||
c = measure q;
|
||||
```
|
||||
a = Barchart(@Sample(bell, 10))
|
||||
b = Histogram(@Run(bell, 10))
|
||||
c = @Simulate(bell)
|
||||
10
wai/quantum-conformance/answers/cases/wrong-distribution.wqa
Normal file
10
wai/quantum-conformance/answers/cases/wrong-distribution.wqa
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
root = Answer([check])
|
||||
```qasm bell
|
||||
OPENQASM 3.0;
|
||||
qubit[2] q;
|
||||
bit[2] c;
|
||||
h q[0];
|
||||
cx q[0], q[1];
|
||||
c = measure q;
|
||||
```
|
||||
check = Verdict(@Check(bell, {"00": 1.0}))
|
||||
451
wai/quantum-conformance/answers/manifest.json
Normal file
451
wai/quantum-conformance/answers/manifest.json
Normal file
|
|
@ -0,0 +1,451 @@
|
|||
{
|
||||
"format": "wai.quantum-answer-conformance/1",
|
||||
"about": "Answers in the answer view layer (wai/extensions/quantum-answers.md), each with what the layer must make of it: the codes of its errors (the problems a model is sent back) and of its warnings, in the order of their lines; its root; the order its views are drawn in; and, run on the engine, what its views show. A stored answer's receipt is checked by running the answer again. bell-stored is bell with the marker its seal gives under the key whose seed is 32 bytes of 3, and bell-stored-changed the same with one sample's shots changed; a test writes both from bell.",
|
||||
"expect": {
|
||||
"errors": "the codes of the diagnostics whose outcome is dropped or refused, in line order",
|
||||
"warnings": "the codes of the others (defaulted, warned, or a program's warning), in line order",
|
||||
"root": "the root statement's name, or null",
|
||||
"order": "the statements drawn, in order",
|
||||
"run": "for a statement: total (the counts' sum), outcomes (the only outcomes seen), level and holds (a verdict), verdict (an equivalence), expectations (each value), bloch_x, sealed (the names a seal covers)",
|
||||
"same_as": "the case whose answer this one must equal, its digest included",
|
||||
"stored": "whether the receipt its marker carries verifies when the answer is run again"
|
||||
},
|
||||
"cases": [
|
||||
{
|
||||
"name": "bell",
|
||||
"file": "cases/bell.wqa",
|
||||
"covers": [
|
||||
"a well-formed answer: a program, a sample, a verdict and a seal"
|
||||
],
|
||||
"expect": {
|
||||
"errors": [],
|
||||
"warnings": [],
|
||||
"root": "root",
|
||||
"order": [
|
||||
"bell",
|
||||
"counts",
|
||||
"check",
|
||||
"seal"
|
||||
],
|
||||
"run": {
|
||||
"counts": {
|
||||
"total": 1000,
|
||||
"outcomes": [
|
||||
"00",
|
||||
"11"
|
||||
]
|
||||
},
|
||||
"check": {
|
||||
"level": "proof",
|
||||
"holds": true
|
||||
},
|
||||
"seal": {
|
||||
"sealed": [
|
||||
"bell",
|
||||
"counts",
|
||||
"check"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "bell-crlf",
|
||||
"file": "cases/bell-crlf.wqa",
|
||||
"covers": [
|
||||
"CRLF line ends read as LF: the same answer and the same digest"
|
||||
],
|
||||
"expect": {
|
||||
"errors": [],
|
||||
"warnings": [],
|
||||
"root": "root",
|
||||
"order": [
|
||||
"bell",
|
||||
"counts",
|
||||
"check",
|
||||
"seal"
|
||||
],
|
||||
"same_as": "bell"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "ghz-prepares",
|
||||
"file": "cases/ghz-prepares.wqa",
|
||||
"covers": [
|
||||
"an intent named by a reference program whose state it must prepare"
|
||||
],
|
||||
"expect": {
|
||||
"errors": [],
|
||||
"warnings": [],
|
||||
"root": "root",
|
||||
"order": [
|
||||
"ghz",
|
||||
"check"
|
||||
],
|
||||
"run": {
|
||||
"check": {
|
||||
"level": "proof",
|
||||
"holds": true
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "grover-equivalent",
|
||||
"file": "cases/grover-equivalent.wqa",
|
||||
"covers": [
|
||||
"the equivalence ladder, and a distribution of one outcome"
|
||||
],
|
||||
"expect": {
|
||||
"errors": [],
|
||||
"warnings": [],
|
||||
"root": "root",
|
||||
"order": [
|
||||
"same",
|
||||
"check"
|
||||
],
|
||||
"run": {
|
||||
"same": {
|
||||
"verdict": "equivalent"
|
||||
},
|
||||
"check": {
|
||||
"level": "proof",
|
||||
"holds": true
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "wrong-distribution",
|
||||
"file": "cases/wrong-distribution.wqa",
|
||||
"covers": [
|
||||
"an intent that fails, decided by proof"
|
||||
],
|
||||
"expect": {
|
||||
"errors": [],
|
||||
"warnings": [],
|
||||
"root": "root",
|
||||
"order": [
|
||||
"check"
|
||||
],
|
||||
"run": {
|
||||
"check": {
|
||||
"level": "proof",
|
||||
"holds": false
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "state-views",
|
||||
"file": "cases/state-views.wqa",
|
||||
"covers": [
|
||||
"a circuit, expectation values, amplitudes and a Bloch vector, each the engine's"
|
||||
],
|
||||
"expect": {
|
||||
"errors": [],
|
||||
"warnings": [],
|
||||
"root": "root",
|
||||
"order": [
|
||||
"circ",
|
||||
"z",
|
||||
"amps",
|
||||
"plus"
|
||||
],
|
||||
"run": {
|
||||
"z": {
|
||||
"expectations": [
|
||||
1.0,
|
||||
1.0
|
||||
]
|
||||
},
|
||||
"plus": {
|
||||
"bloch_x": 1.0
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "calls-named-apart",
|
||||
"file": "cases/calls-named-apart.wqa",
|
||||
"covers": [
|
||||
"an engine call as a statement of its own, named by the view; a forward reference; a value no view uses"
|
||||
],
|
||||
"expect": {
|
||||
"errors": [],
|
||||
"warnings": [
|
||||
"J112"
|
||||
],
|
||||
"root": "root",
|
||||
"order": [
|
||||
"counts",
|
||||
"check"
|
||||
],
|
||||
"run": {
|
||||
"counts": {
|
||||
"total": 200,
|
||||
"outcomes": [
|
||||
"00",
|
||||
"11"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "no-root",
|
||||
"file": "cases/no-root.wqa",
|
||||
"covers": [
|
||||
"no root: the views in the order written"
|
||||
],
|
||||
"expect": {
|
||||
"errors": [],
|
||||
"warnings": [
|
||||
"J107"
|
||||
],
|
||||
"root": null,
|
||||
"order": [
|
||||
"circ",
|
||||
"counts"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "number-in-a-view",
|
||||
"file": "cases/number-in-a-view.wqa",
|
||||
"covers": [
|
||||
"a number where a view takes the engine's call"
|
||||
],
|
||||
"expect": {
|
||||
"errors": [
|
||||
"J106",
|
||||
"J104"
|
||||
],
|
||||
"warnings": [
|
||||
"J112"
|
||||
],
|
||||
"root": "root",
|
||||
"order": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "unknown-view-and-call",
|
||||
"file": "cases/unknown-view-and-call.wqa",
|
||||
"covers": [
|
||||
"a view and engine calls the layer does not have; the root listing an engine call, which it does not take, leaves it out"
|
||||
],
|
||||
"expect": {
|
||||
"errors": [
|
||||
"J104",
|
||||
"J106",
|
||||
"J101",
|
||||
"J102",
|
||||
"J102"
|
||||
],
|
||||
"warnings": [
|
||||
"J112"
|
||||
],
|
||||
"root": "root",
|
||||
"order": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "missing-and-extra-arguments",
|
||||
"file": "cases/missing-and-extra-arguments.wqa",
|
||||
"covers": [
|
||||
"an argument missing, and one too many"
|
||||
],
|
||||
"expect": {
|
||||
"errors": [
|
||||
"J106",
|
||||
"J103"
|
||||
],
|
||||
"warnings": [
|
||||
"J105"
|
||||
],
|
||||
"root": "root",
|
||||
"order": [
|
||||
"b"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "a-program-that-does-not-read",
|
||||
"file": "cases/a-program-that-does-not-read.wqa",
|
||||
"covers": [
|
||||
"the reader's refusal keeps its code; what names the program falls with it; a name nothing declares"
|
||||
],
|
||||
"expect": {
|
||||
"errors": [
|
||||
"J106",
|
||||
"Q103",
|
||||
"J106",
|
||||
"J106"
|
||||
],
|
||||
"warnings": [],
|
||||
"root": "root",
|
||||
"order": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "truncated-program",
|
||||
"file": "cases/truncated-program.wqa",
|
||||
"covers": [
|
||||
"the text ends inside a program"
|
||||
],
|
||||
"expect": {
|
||||
"errors": [
|
||||
"J106",
|
||||
"J106",
|
||||
"J108"
|
||||
],
|
||||
"warnings": [],
|
||||
"root": "root",
|
||||
"order": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "truncated-statement",
|
||||
"file": "cases/truncated-statement.wqa",
|
||||
"covers": [
|
||||
"the text ends inside a statement"
|
||||
],
|
||||
"expect": {
|
||||
"errors": [
|
||||
"J106",
|
||||
"J108"
|
||||
],
|
||||
"warnings": [],
|
||||
"root": "root",
|
||||
"order": [
|
||||
"bell"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "cycle",
|
||||
"file": "cases/cycle.wqa",
|
||||
"covers": [
|
||||
"statements that name each other"
|
||||
],
|
||||
"expect": {
|
||||
"errors": [
|
||||
"J106",
|
||||
"J109",
|
||||
"J109"
|
||||
],
|
||||
"warnings": [
|
||||
"J112"
|
||||
],
|
||||
"root": "root",
|
||||
"order": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "edit-by-redeclaring",
|
||||
"file": "cases/edit-by-redeclaring.wqa",
|
||||
"covers": [
|
||||
"a later declaration stands: an edit"
|
||||
],
|
||||
"expect": {
|
||||
"errors": [],
|
||||
"warnings": [
|
||||
"J110"
|
||||
],
|
||||
"root": "root",
|
||||
"order": [
|
||||
"counts"
|
||||
],
|
||||
"run": {
|
||||
"counts": {
|
||||
"total": 500,
|
||||
"outcomes": [
|
||||
"00",
|
||||
"11"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "prose-and-unused",
|
||||
"file": "cases/prose-and-unused.wqa",
|
||||
"covers": [
|
||||
"a number in prose, and a view the root does not reach"
|
||||
],
|
||||
"expect": {
|
||||
"errors": [],
|
||||
"warnings": [
|
||||
"J111",
|
||||
"J112"
|
||||
],
|
||||
"root": "root",
|
||||
"order": [
|
||||
"note",
|
||||
"circ"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "lines-that-are-not-statements",
|
||||
"file": "cases/lines-that-are-not-statements.wqa",
|
||||
"covers": [
|
||||
"prose, a fence that opens no program, and a marker this layer does not read"
|
||||
],
|
||||
"expect": {
|
||||
"errors": [
|
||||
"J100",
|
||||
"J100",
|
||||
"J100"
|
||||
],
|
||||
"warnings": [],
|
||||
"root": "root",
|
||||
"order": [
|
||||
"circ"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "bell-stored",
|
||||
"file": "cases/bell-stored.wqa",
|
||||
"covers": [
|
||||
"a stored answer with its receipt marker: run again, the receipt verifies"
|
||||
],
|
||||
"expect": {
|
||||
"errors": [],
|
||||
"warnings": [],
|
||||
"root": "root",
|
||||
"order": [
|
||||
"bell",
|
||||
"counts",
|
||||
"check",
|
||||
"seal"
|
||||
],
|
||||
"stored": {
|
||||
"valid": true
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "bell-stored-changed",
|
||||
"file": "cases/bell-stored-changed.wqa",
|
||||
"covers": [
|
||||
"the stored answer with a statement changed: the receipt does not verify"
|
||||
],
|
||||
"expect": {
|
||||
"errors": [],
|
||||
"warnings": [],
|
||||
"root": "root",
|
||||
"order": [
|
||||
"bell",
|
||||
"counts",
|
||||
"check",
|
||||
"seal"
|
||||
],
|
||||
"stored": {
|
||||
"valid": false
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
20
wai/quantum-conformance/eval/README.md
Normal file
20
wai/quantum-conformance/eval/README.md
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
# The model harness's task set
|
||||
|
||||
What `wai-quantum eval run` asks a model, and the corpus the answer view
|
||||
layer's token cost is measured on.
|
||||
|
||||
| Path | What |
|
||||
|---|---|
|
||||
| `tasks.json` | The tasks, in the conformance format: each what a model is asked (`ask`), the intent its program is held to, the run, and a reference program a test holds to the intent by proof. Built from the intent conformance set's cases ([`../intents/`](../intents/)) and the worked examples (`wai_quantum::engine::guide::examples`), each named in `from`, with a few more of the first states of a circuits course. |
|
||||
| `answers.json` | Each task's answer written four ways (`wai-quantum eval corpus`): the program alone in a fenced block, the answer view layer whole (the circuit, a sample, a verdict for each intent, a seal) and with the request alone (the sample and the verdicts), and the request an agent sends a run tool as JSON. The last two carry the same program and the same request. A test holds it to the task set, and every answer in the layer reads with no diagnostic and runs to its intents. |
|
||||
| `token_cost.py` | Counts the tokens of each answer in each form with a model's own vocabulary (read from its GGUF file by a tokenizer tool), and reports the totals, the means and each form against the program alone. Standard library only. |
|
||||
| `token-cost.json` | Its report on `answers.json` for three open-weight models' vocabularies; the answer view layer's specification records it (§9). |
|
||||
|
||||
```sh
|
||||
wai-quantum eval run --tasks tasks.json --model http://127.0.0.1:8080/v1 --energy-pid PID --out report.json
|
||||
wai-quantum eval corpus --tasks tasks.json --out answers.json
|
||||
python3 -I token_cost.py answers.json --tokenizer A=MODEL.gguf --tokenizer B=… --tool TOKENIZER --out token-cost.json
|
||||
```
|
||||
|
||||
A report is one model on one task set and ranks nothing; reports are kept
|
||||
where they are written, not here.
|
||||
104
wai/quantum-conformance/eval/answers.json
Normal file
104
wai/quantum-conformance/eval/answers.json
Normal file
|
|
@ -0,0 +1,104 @@
|
|||
{
|
||||
"format": "wai.quantum.eval-answers/1",
|
||||
"about": "Each task's answer written four ways, for measuring what each costs a model in tokens: plain, the program alone in a fenced block (what to compute and show is not in it); views, the answer view layer (the program, its circuit, a sample when it measures, a verdict for each intent and a seal); views_request, the layer with the sample and the verdicts alone; job, the request an agent sends a run tool as JSON (the program as an escaped string, the run and the intents). views_request and job carry the same program and the same request. Written by wai-quantum eval corpus; a test holds it to the task set.",
|
||||
"answers": [
|
||||
{
|
||||
"name": "plus",
|
||||
"plain": "```qasm\nOPENQASM 3.0;\nqubit[1] q;\nbit[1] c;\nh q[0];\nc = measure q;\n```\n",
|
||||
"views": "root = Answer([circuit, counts, check, seal])\n```qasm prog\nOPENQASM 3.0;\nqubit[1] q;\nbit[1] c;\nh q[0];\nc = measure q;\n```\ncircuit = Circuit(prog)\ncounts = Histogram(@Sample(prog, 100))\ncheck = Verdict(@Check(prog, {\"0\": 0.5, \"1\": 0.5}))\nseal = Receipt(@Seal([prog, counts, check]))\n",
|
||||
"views_request": "root = Answer([counts, check])\n```qasm prog\nOPENQASM 3.0;\nqubit[1] q;\nbit[1] c;\nh q[0];\nc = measure q;\n```\ncounts = Histogram(@Sample(prog, 100))\ncheck = Verdict(@Check(prog, {\"0\": 0.5, \"1\": 0.5}))\n",
|
||||
"job": "{\"qasm\":\"OPENQASM 3.0;\\nqubit[1] q;\\nbit[1] c;\\nh q[0];\\nc = measure q;\\n\",\"shots\":100,\"intent\":[{\"distribution\":{\"0\":0.5,\"1\":0.5}}]}"
|
||||
},
|
||||
{
|
||||
"name": "bell",
|
||||
"plain": "```qasm\nOPENQASM 3.0;\ninclude \"stdgates.inc\";\nqubit[2] q;\nbit[2] c;\nh q[0];\ncx q[0], q[1];\nc = measure q;\n```\n",
|
||||
"views": "root = Answer([circuit, counts, check, seal])\n```qasm prog\nOPENQASM 3.0;\ninclude \"stdgates.inc\";\nqubit[2] q;\nbit[2] c;\nh q[0];\ncx q[0], q[1];\nc = measure q;\n```\ncircuit = Circuit(prog)\ncounts = Histogram(@Sample(prog, 100))\ncheck = Verdict(@Check(prog, {\"00\": 0.5, \"11\": 0.5}))\nseal = Receipt(@Seal([prog, counts, check]))\n",
|
||||
"views_request": "root = Answer([counts, check])\n```qasm prog\nOPENQASM 3.0;\ninclude \"stdgates.inc\";\nqubit[2] q;\nbit[2] c;\nh q[0];\ncx q[0], q[1];\nc = measure q;\n```\ncounts = Histogram(@Sample(prog, 100))\ncheck = Verdict(@Check(prog, {\"00\": 0.5, \"11\": 0.5}))\n",
|
||||
"job": "{\"qasm\":\"OPENQASM 3.0;\\ninclude \\\"stdgates.inc\\\";\\nqubit[2] q;\\nbit[2] c;\\nh q[0];\\ncx q[0], q[1];\\nc = measure q;\\n\",\"shots\":100,\"intent\":[{\"distribution\":{\"00\":0.5,\"11\":0.5}}]}"
|
||||
},
|
||||
{
|
||||
"name": "bell-odd-parity",
|
||||
"plain": "```qasm\nOPENQASM 3.0;\nqubit[2] q;\nbit[2] c;\nh q[0];\ncx q[0], q[1];\nx q[0];\nc = measure q;\n```\n",
|
||||
"views": "root = Answer([circuit, counts, check, seal])\n```qasm prog\nOPENQASM 3.0;\nqubit[2] q;\nbit[2] c;\nh q[0];\ncx q[0], q[1];\nx q[0];\nc = measure q;\n```\ncircuit = Circuit(prog)\ncounts = Histogram(@Sample(prog, 100))\ncheck = Verdict(@Check(prog, {\"01\": 0.5, \"10\": 0.5}))\nseal = Receipt(@Seal([prog, counts, check]))\n",
|
||||
"views_request": "root = Answer([counts, check])\n```qasm prog\nOPENQASM 3.0;\nqubit[2] q;\nbit[2] c;\nh q[0];\ncx q[0], q[1];\nx q[0];\nc = measure q;\n```\ncounts = Histogram(@Sample(prog, 100))\ncheck = Verdict(@Check(prog, {\"01\": 0.5, \"10\": 0.5}))\n",
|
||||
"job": "{\"qasm\":\"OPENQASM 3.0;\\nqubit[2] q;\\nbit[2] c;\\nh q[0];\\ncx q[0], q[1];\\nx q[0];\\nc = measure q;\\n\",\"shots\":100,\"intent\":[{\"distribution\":{\"01\":0.5,\"10\":0.5}}]}"
|
||||
},
|
||||
{
|
||||
"name": "ghz-3",
|
||||
"plain": "```qasm\nOPENQASM 3.0;\nqubit[3] q;\nbit[3] c;\nh q[0];\ncx q[0], q[1];\ncx q[1], q[2];\nc = measure q;\n```\n",
|
||||
"views": "root = Answer([circuit, counts, check, seal])\n```qasm prog\nOPENQASM 3.0;\nqubit[3] q;\nbit[3] c;\nh q[0];\ncx q[0], q[1];\ncx q[1], q[2];\nc = measure q;\n```\ncircuit = Circuit(prog)\ncounts = Histogram(@Sample(prog, 100))\ncheck = Verdict(@Check(prog, {\"000\": 0.5, \"111\": 0.5}))\nseal = Receipt(@Seal([prog, counts, check]))\n",
|
||||
"views_request": "root = Answer([counts, check])\n```qasm prog\nOPENQASM 3.0;\nqubit[3] q;\nbit[3] c;\nh q[0];\ncx q[0], q[1];\ncx q[1], q[2];\nc = measure q;\n```\ncounts = Histogram(@Sample(prog, 100))\ncheck = Verdict(@Check(prog, {\"000\": 0.5, \"111\": 0.5}))\n",
|
||||
"job": "{\"qasm\":\"OPENQASM 3.0;\\nqubit[3] q;\\nbit[3] c;\\nh q[0];\\ncx q[0], q[1];\\ncx q[1], q[2];\\nc = measure q;\\n\",\"shots\":100,\"intent\":[{\"distribution\":{\"000\":0.5,\"111\":0.5}}]}"
|
||||
},
|
||||
{
|
||||
"name": "ghz-4-prepares",
|
||||
"plain": "```qasm\nOPENQASM 3.0;\ninclude \"stdgates.inc\";\nqubit[4] q;\nbit[4] c;\nh q[0];\ncx q[0], q[1];\ncx q[0], q[2];\ncx q[1], q[3];\nc = measure q;\n```\n",
|
||||
"views": "root = Answer([circuit, counts, check_1, check_2, seal])\n```qasm prog\nOPENQASM 3.0;\ninclude \"stdgates.inc\";\nqubit[4] q;\nbit[4] c;\nh q[0];\ncx q[0], q[1];\ncx q[0], q[2];\ncx q[1], q[3];\nc = measure q;\n```\n```qasm reference\nOPENQASM 3.0;\ninclude \"stdgates.inc\";\nqubit[4] q;\nbit[4] c;\nh q[0];\ncx q[0], q[1];\ncx q[1], q[2];\ncx q[2], q[3];\nc = measure q;\n```\ncircuit = Circuit(prog)\ncounts = Histogram(@Sample(prog, 100))\ncheck_1 = Verdict(@Check(prog, {\"prepares\": reference}))\ncheck_2 = Verdict(@Check(prog, {\"0000\": 0.5, \"1111\": 0.5}))\nseal = Receipt(@Seal([prog, counts, check_1, check_2]))\n",
|
||||
"views_request": "root = Answer([counts, check_1, check_2])\n```qasm prog\nOPENQASM 3.0;\ninclude \"stdgates.inc\";\nqubit[4] q;\nbit[4] c;\nh q[0];\ncx q[0], q[1];\ncx q[0], q[2];\ncx q[1], q[3];\nc = measure q;\n```\n```qasm reference\nOPENQASM 3.0;\ninclude \"stdgates.inc\";\nqubit[4] q;\nbit[4] c;\nh q[0];\ncx q[0], q[1];\ncx q[1], q[2];\ncx q[2], q[3];\nc = measure q;\n```\ncounts = Histogram(@Sample(prog, 100))\ncheck_1 = Verdict(@Check(prog, {\"prepares\": reference}))\ncheck_2 = Verdict(@Check(prog, {\"0000\": 0.5, \"1111\": 0.5}))\n",
|
||||
"job": "{\"qasm\":\"OPENQASM 3.0;\\ninclude \\\"stdgates.inc\\\";\\nqubit[4] q;\\nbit[4] c;\\nh q[0];\\ncx q[0], q[1];\\ncx q[0], q[2];\\ncx q[1], q[3];\\nc = measure q;\\n\",\"shots\":100,\"intent\":[{\"prepares\":\"OPENQASM 3.0;\\ninclude \\\"stdgates.inc\\\";\\nqubit[4] q;\\nbit[4] c;\\nh q[0];\\ncx q[0], q[1];\\ncx q[1], q[2];\\ncx q[2], q[3];\\nc = measure q;\\n\"},{\"distribution\":{\"0000\":0.5,\"1111\":0.5}}]}"
|
||||
},
|
||||
{
|
||||
"name": "uniform-3",
|
||||
"plain": "```qasm\nOPENQASM 3.0;\nqubit[3] q;\nbit[3] c;\nh q;\nc = measure q;\n```\n",
|
||||
"views": "root = Answer([circuit, counts, check, seal])\n```qasm prog\nOPENQASM 3.0;\nqubit[3] q;\nbit[3] c;\nh q;\nc = measure q;\n```\ncircuit = Circuit(prog)\ncounts = Histogram(@Sample(prog, 100))\ncheck = Verdict(@Check(prog, {\"000\": 0.125, \"001\": 0.125, \"010\": 0.125, \"011\": 0.125, \"100\": 0.125, \"101\": 0.125, \"110\": 0.125, \"111\": 0.125}))\nseal = Receipt(@Seal([prog, counts, check]))\n",
|
||||
"views_request": "root = Answer([counts, check])\n```qasm prog\nOPENQASM 3.0;\nqubit[3] q;\nbit[3] c;\nh q;\nc = measure q;\n```\ncounts = Histogram(@Sample(prog, 100))\ncheck = Verdict(@Check(prog, {\"000\": 0.125, \"001\": 0.125, \"010\": 0.125, \"011\": 0.125, \"100\": 0.125, \"101\": 0.125, \"110\": 0.125, \"111\": 0.125}))\n",
|
||||
"job": "{\"qasm\":\"OPENQASM 3.0;\\nqubit[3] q;\\nbit[3] c;\\nh q;\\nc = measure q;\\n\",\"shots\":100,\"intent\":[{\"distribution\":{\"000\":0.125,\"001\":0.125,\"010\":0.125,\"011\":0.125,\"100\":0.125,\"101\":0.125,\"110\":0.125,\"111\":0.125}}]}"
|
||||
},
|
||||
{
|
||||
"name": "grover-2",
|
||||
"plain": "```qasm\nOPENQASM 3.0;\ninclude \"stdgates.inc\";\nqubit[2] q;\nbit[2] c;\nh q;\ncz q[0], q[1];\nh q;\nx q;\ncz q[0], q[1];\nx q;\nh q;\nc = measure q;\n```\n",
|
||||
"views": "root = Answer([circuit, counts, check, seal])\n```qasm prog\nOPENQASM 3.0;\ninclude \"stdgates.inc\";\nqubit[2] q;\nbit[2] c;\nh q;\ncz q[0], q[1];\nh q;\nx q;\ncz q[0], q[1];\nx q;\nh q;\nc = measure q;\n```\ncircuit = Circuit(prog)\ncounts = Histogram(@Sample(prog, 100))\ncheck = Verdict(@Check(prog, {\"11\": 1.0}))\nseal = Receipt(@Seal([prog, counts, check]))\n",
|
||||
"views_request": "root = Answer([counts, check])\n```qasm prog\nOPENQASM 3.0;\ninclude \"stdgates.inc\";\nqubit[2] q;\nbit[2] c;\nh q;\ncz q[0], q[1];\nh q;\nx q;\ncz q[0], q[1];\nx q;\nh q;\nc = measure q;\n```\ncounts = Histogram(@Sample(prog, 100))\ncheck = Verdict(@Check(prog, {\"11\": 1.0}))\n",
|
||||
"job": "{\"qasm\":\"OPENQASM 3.0;\\ninclude \\\"stdgates.inc\\\";\\nqubit[2] q;\\nbit[2] c;\\nh q;\\ncz q[0], q[1];\\nh q;\\nx q;\\ncz q[0], q[1];\\nx q;\\nh q;\\nc = measure q;\\n\",\"shots\":100,\"intent\":[{\"distribution\":{\"11\":1.0}}]}"
|
||||
},
|
||||
{
|
||||
"name": "rotation-three-quarters",
|
||||
"plain": "```qasm\nOPENQASM 3.0;\ninclude \"stdgates.inc\";\nqubit[1] q;\nbit[1] c;\nrx(pi/3) q[0];\nc = measure q;\n```\n",
|
||||
"views": "root = Answer([circuit, counts, check, seal])\n```qasm prog\nOPENQASM 3.0;\ninclude \"stdgates.inc\";\nqubit[1] q;\nbit[1] c;\nrx(pi/3) q[0];\nc = measure q;\n```\ncircuit = Circuit(prog)\ncounts = Histogram(@Sample(prog, 100))\ncheck = Verdict(@Check(prog, {\"0\": 0.75, \"1\": 0.25}))\nseal = Receipt(@Seal([prog, counts, check]))\n",
|
||||
"views_request": "root = Answer([counts, check])\n```qasm prog\nOPENQASM 3.0;\ninclude \"stdgates.inc\";\nqubit[1] q;\nbit[1] c;\nrx(pi/3) q[0];\nc = measure q;\n```\ncounts = Histogram(@Sample(prog, 100))\ncheck = Verdict(@Check(prog, {\"0\": 0.75, \"1\": 0.25}))\n",
|
||||
"job": "{\"qasm\":\"OPENQASM 3.0;\\ninclude \\\"stdgates.inc\\\";\\nqubit[1] q;\\nbit[1] c;\\nrx(pi/3) q[0];\\nc = measure q;\\n\",\"shots\":100,\"intent\":[{\"distribution\":{\"0\":0.75,\"1\":0.25}}]}"
|
||||
},
|
||||
{
|
||||
"name": "w-3",
|
||||
"plain": "```qasm\nOPENQASM 3.0;\nqubit[3] q;\nbit[3] c;\nry(1.9106332362490186) q[0];\nch q[0], q[1];\ncx q[1], q[2];\ncx q[0], q[1];\nx q[0];\nc = measure q;\n```\n",
|
||||
"views": "root = Answer([circuit, counts, check, seal])\n```qasm prog\nOPENQASM 3.0;\nqubit[3] q;\nbit[3] c;\nry(1.9106332362490186) q[0];\nch q[0], q[1];\ncx q[1], q[2];\ncx q[0], q[1];\nx q[0];\nc = measure q;\n```\ncircuit = Circuit(prog)\ncounts = Histogram(@Sample(prog, 100))\ncheck = Verdict(@Check(prog, {\"001\": 0.3333333333333333, \"010\": 0.3333333333333333, \"100\": 0.3333333333333333}, 0.000000001))\nseal = Receipt(@Seal([prog, counts, check]))\n",
|
||||
"views_request": "root = Answer([counts, check])\n```qasm prog\nOPENQASM 3.0;\nqubit[3] q;\nbit[3] c;\nry(1.9106332362490186) q[0];\nch q[0], q[1];\ncx q[1], q[2];\ncx q[0], q[1];\nx q[0];\nc = measure q;\n```\ncounts = Histogram(@Sample(prog, 100))\ncheck = Verdict(@Check(prog, {\"001\": 0.3333333333333333, \"010\": 0.3333333333333333, \"100\": 0.3333333333333333}, 0.000000001))\n",
|
||||
"job": "{\"qasm\":\"OPENQASM 3.0;\\nqubit[3] q;\\nbit[3] c;\\nry(1.9106332362490186) q[0];\\nch q[0], q[1];\\ncx q[1], q[2];\\ncx q[0], q[1];\\nx q[0];\\nc = measure q;\\n\",\"shots\":100,\"intent\":[{\"distribution\":{\"001\":0.3333333333333333,\"010\":0.3333333333333333,\"100\":0.3333333333333333},\"tolerance\":1e-9}]}"
|
||||
},
|
||||
{
|
||||
"name": "flip-the-last",
|
||||
"plain": "```qasm\nOPENQASM 3.0;\nqubit[3] q;\nbit[3] c;\nx q[2];\nc = measure q;\n```\n",
|
||||
"views": "root = Answer([circuit, counts, check, seal])\n```qasm prog\nOPENQASM 3.0;\nqubit[3] q;\nbit[3] c;\nx q[2];\nc = measure q;\n```\ncircuit = Circuit(prog)\ncounts = Histogram(@Sample(prog, 100))\ncheck = Verdict(@Check(prog, {\"100\": 1.0}))\nseal = Receipt(@Seal([prog, counts, check]))\n",
|
||||
"views_request": "root = Answer([counts, check])\n```qasm prog\nOPENQASM 3.0;\nqubit[3] q;\nbit[3] c;\nx q[2];\nc = measure q;\n```\ncounts = Histogram(@Sample(prog, 100))\ncheck = Verdict(@Check(prog, {\"100\": 1.0}))\n",
|
||||
"job": "{\"qasm\":\"OPENQASM 3.0;\\nqubit[3] q;\\nbit[3] c;\\nx q[2];\\nc = measure q;\\n\",\"shots\":100,\"intent\":[{\"distribution\":{\"100\":1.0}}]}"
|
||||
},
|
||||
{
|
||||
"name": "cz-from-cx",
|
||||
"plain": "```qasm\nOPENQASM 3.0;\nqubit[2] q;\nh q[1];\ncx q[0], q[1];\nh q[1];\n```\n",
|
||||
"views": "root = Answer([circuit, counts, check, seal])\n```qasm prog\nOPENQASM 3.0;\nqubit[2] q;\nh q[1];\ncx q[0], q[1];\nh q[1];\n```\n```qasm reference\nOPENQASM 3.0;\nqubit[2] q;\ncz q[0], q[1];\n```\ncircuit = Circuit(prog)\ncounts = Histogram(@Sample(prog, 100))\ncheck = Verdict(@Check(prog, {\"equivalent\": reference}))\nseal = Receipt(@Seal([prog, counts, check]))\n",
|
||||
"views_request": "root = Answer([counts, check])\n```qasm prog\nOPENQASM 3.0;\nqubit[2] q;\nh q[1];\ncx q[0], q[1];\nh q[1];\n```\n```qasm reference\nOPENQASM 3.0;\nqubit[2] q;\ncz q[0], q[1];\n```\ncounts = Histogram(@Sample(prog, 100))\ncheck = Verdict(@Check(prog, {\"equivalent\": reference}))\n",
|
||||
"job": "{\"qasm\":\"OPENQASM 3.0;\\nqubit[2] q;\\nh q[1];\\ncx q[0], q[1];\\nh q[1];\\n\",\"shots\":100,\"intent\":[{\"equivalent\":\"OPENQASM 3.0;\\nqubit[2] q;\\ncz q[0], q[1];\\n\"}]}"
|
||||
},
|
||||
{
|
||||
"name": "swap-from-cx",
|
||||
"plain": "```qasm\nOPENQASM 3.0;\nqubit[2] q;\ncx q[0], q[1];\ncx q[1], q[0];\ncx q[0], q[1];\n```\n",
|
||||
"views": "root = Answer([circuit, counts, check, seal])\n```qasm prog\nOPENQASM 3.0;\nqubit[2] q;\ncx q[0], q[1];\ncx q[1], q[0];\ncx q[0], q[1];\n```\n```qasm reference\nOPENQASM 3.0;\nqubit[2] q;\nswap q[0], q[1];\n```\ncircuit = Circuit(prog)\ncounts = Histogram(@Sample(prog, 100))\ncheck = Verdict(@Check(prog, {\"equivalent\": reference}))\nseal = Receipt(@Seal([prog, counts, check]))\n",
|
||||
"views_request": "root = Answer([counts, check])\n```qasm prog\nOPENQASM 3.0;\nqubit[2] q;\ncx q[0], q[1];\ncx q[1], q[0];\ncx q[0], q[1];\n```\n```qasm reference\nOPENQASM 3.0;\nqubit[2] q;\nswap q[0], q[1];\n```\ncounts = Histogram(@Sample(prog, 100))\ncheck = Verdict(@Check(prog, {\"equivalent\": reference}))\n",
|
||||
"job": "{\"qasm\":\"OPENQASM 3.0;\\nqubit[2] q;\\ncx q[0], q[1];\\ncx q[1], q[0];\\ncx q[0], q[1];\\n\",\"shots\":100,\"intent\":[{\"equivalent\":\"OPENQASM 3.0;\\nqubit[2] q;\\nswap q[0], q[1];\\n\"}]}"
|
||||
},
|
||||
{
|
||||
"name": "merged-rotations",
|
||||
"plain": "```qasm\nOPENQASM 3.0;\ninclude \"stdgates.inc\";\nqubit[2] q;\nh q;\nrz(0.7) q[0];\ncx q[0], q[1];\n```\n",
|
||||
"views": "root = Answer([circuit, counts, check, seal])\n```qasm prog\nOPENQASM 3.0;\ninclude \"stdgates.inc\";\nqubit[2] q;\nh q;\nrz(0.7) q[0];\ncx q[0], q[1];\n```\n```qasm reference\nOPENQASM 3.0;\ninclude \"stdgates.inc\";\nqubit[2] q;\nh q;\nrz(0.3) q[0];\nrz(0.4) q[0];\ncx q[0], q[1];\n```\ncircuit = Circuit(prog)\ncounts = Histogram(@Sample(prog, 100))\ncheck = Verdict(@Check(prog, {\"equivalent\": reference}))\nseal = Receipt(@Seal([prog, counts, check]))\n",
|
||||
"views_request": "root = Answer([counts, check])\n```qasm prog\nOPENQASM 3.0;\ninclude \"stdgates.inc\";\nqubit[2] q;\nh q;\nrz(0.7) q[0];\ncx q[0], q[1];\n```\n```qasm reference\nOPENQASM 3.0;\ninclude \"stdgates.inc\";\nqubit[2] q;\nh q;\nrz(0.3) q[0];\nrz(0.4) q[0];\ncx q[0], q[1];\n```\ncounts = Histogram(@Sample(prog, 100))\ncheck = Verdict(@Check(prog, {\"equivalent\": reference}))\n",
|
||||
"job": "{\"qasm\":\"OPENQASM 3.0;\\ninclude \\\"stdgates.inc\\\";\\nqubit[2] q;\\nh q;\\nrz(0.7) q[0];\\ncx q[0], q[1];\\n\",\"shots\":100,\"intent\":[{\"equivalent\":\"OPENQASM 3.0;\\ninclude \\\"stdgates.inc\\\";\\nqubit[2] q;\\nh q;\\nrz(0.3) q[0];\\nrz(0.4) q[0];\\ncx q[0], q[1];\\n\"}]}"
|
||||
},
|
||||
{
|
||||
"name": "noisy-bell",
|
||||
"plain": "```qasm\nOPENQASM 3.0;\ninclude \"stdgates.inc\";\nqubit[2] q;\nbit[2] c;\nh q[0];\ncx q[0], q[1];\nc = measure q;\n```\n",
|
||||
"views": "root = Answer([circuit, counts, check, seal])\n```qasm prog\nOPENQASM 3.0;\ninclude \"stdgates.inc\";\nqubit[2] q;\nbit[2] c;\nh q[0];\ncx q[0], q[1];\nc = measure q;\n```\ncircuit = Circuit(prog)\nnoise = {\"depolarizing_1q\": 0.01, \"depolarizing_2q\": 0.03, \"readout\": 0.02}\ncounts = Histogram(@Sample(prog, 4000, null, noise))\ncheck = Verdict(@Check(prog, {\"00\": 0.5, \"11\": 0.5}, 0.1, noise))\nseal = Receipt(@Seal([prog, counts, check]))\n",
|
||||
"views_request": "root = Answer([counts, check])\n```qasm prog\nOPENQASM 3.0;\ninclude \"stdgates.inc\";\nqubit[2] q;\nbit[2] c;\nh q[0];\ncx q[0], q[1];\nc = measure q;\n```\nnoise = {\"depolarizing_1q\": 0.01, \"depolarizing_2q\": 0.03, \"readout\": 0.02}\ncounts = Histogram(@Sample(prog, 4000, null, noise))\ncheck = Verdict(@Check(prog, {\"00\": 0.5, \"11\": 0.5}, 0.1, noise))\n",
|
||||
"job": "{\"qasm\":\"OPENQASM 3.0;\\ninclude \\\"stdgates.inc\\\";\\nqubit[2] q;\\nbit[2] c;\\nh q[0];\\ncx q[0], q[1];\\nc = measure q;\\n\",\"shots\":4000,\"noise\":{\"depolarizing_1q\":0.01,\"depolarizing_2q\":0.03,\"readout\":0.02},\"intent\":[{\"distribution\":{\"00\":0.5,\"11\":0.5},\"tolerance\":0.1}]}"
|
||||
}
|
||||
]
|
||||
}
|
||||
439
wai/quantum-conformance/eval/tasks.json
Normal file
439
wai/quantum-conformance/eval/tasks.json
Normal file
|
|
@ -0,0 +1,439 @@
|
|||
{
|
||||
"format": "wai.quantum-intent-conformance-bundle/1",
|
||||
"about": "The model harness's task set (wai-quantum eval run --tasks): each case what a model is asked (ask), the intent its program is held to, the run, and a reference program (qasm) that a test holds to the intent by proof. Built from the intent conformance set's cases (wai/quantum-conformance/intents/) and the worked examples (wai_quantum::engine::guide::examples), each named in from, with a few more of the first states of a circuits course.",
|
||||
"cases": [
|
||||
{
|
||||
"name": "plus",
|
||||
"from": [
|
||||
"new: the first state of the circuits curriculum"
|
||||
],
|
||||
"covers": [
|
||||
"Put one qubit in an equal superposition of 0 and 1, so that half the shots read 0 and half read 1."
|
||||
],
|
||||
"ask": "Put one qubit in an equal superposition of 0 and 1, so that half the shots read 0 and half read 1. Use 1 qubit. Measure every qubit at the end into a classical bit of the same index (c = measure q;); outcomes are written with the highest bit first.",
|
||||
"qubits": 1,
|
||||
"qasm": "OPENQASM 3.0;\nqubit[1] q;\nbit[1] c;\nh q[0];\nc = measure q;\n",
|
||||
"run": {
|
||||
"shots": 100
|
||||
},
|
||||
"intent": [
|
||||
{
|
||||
"distribution": {
|
||||
"0": 0.5,
|
||||
"1": 0.5
|
||||
}
|
||||
}
|
||||
],
|
||||
"expect": {
|
||||
"holds": true,
|
||||
"levels": [
|
||||
"proof",
|
||||
"evidence"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "bell",
|
||||
"from": [
|
||||
"intents: bell-distribution",
|
||||
"examples: bell"
|
||||
],
|
||||
"covers": [
|
||||
"Prepare a Bell pair on two qubits: half the shots read 00 and half 11, never 01 or 10."
|
||||
],
|
||||
"ask": "Prepare a Bell pair on two qubits: half the shots read 00 and half 11, never 01 or 10. Use 2 qubits. Measure every qubit at the end into a classical bit of the same index (c = measure q;); outcomes are written with the highest bit first.",
|
||||
"qubits": 2,
|
||||
"qasm": "OPENQASM 3.0;\ninclude \"stdgates.inc\";\nqubit[2] q;\nbit[2] c;\nh q[0];\ncx q[0], q[1];\nc = measure q;\n",
|
||||
"run": {
|
||||
"shots": 100
|
||||
},
|
||||
"intent": [
|
||||
{
|
||||
"distribution": {
|
||||
"00": 0.5,
|
||||
"11": 0.5
|
||||
}
|
||||
}
|
||||
],
|
||||
"expect": {
|
||||
"holds": true,
|
||||
"levels": [
|
||||
"proof",
|
||||
"evidence"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "bell-odd-parity",
|
||||
"from": [
|
||||
"new: a Bell state of odd parity"
|
||||
],
|
||||
"covers": [
|
||||
"Prepare the Bell state (|01⟩ + |10⟩)/√2 on two qubits: half the shots read 01 and half 10, never 00 or 11."
|
||||
],
|
||||
"ask": "Prepare the Bell state (|01⟩ + |10⟩)/√2 on two qubits: half the shots read 01 and half 10, never 00 or 11. Use 2 qubits. Measure every qubit at the end into a classical bit of the same index (c = measure q;); outcomes are written with the highest bit first.",
|
||||
"qubits": 2,
|
||||
"qasm": "OPENQASM 3.0;\nqubit[2] q;\nbit[2] c;\nh q[0];\ncx q[0], q[1];\nx q[0];\nc = measure q;\n",
|
||||
"run": {
|
||||
"shots": 100
|
||||
},
|
||||
"intent": [
|
||||
{
|
||||
"distribution": {
|
||||
"01": 0.5,
|
||||
"10": 0.5
|
||||
}
|
||||
}
|
||||
],
|
||||
"expect": {
|
||||
"holds": true,
|
||||
"levels": [
|
||||
"proof",
|
||||
"evidence"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "ghz-3",
|
||||
"from": [
|
||||
"intents: ghz-prepares-the-chain-s-state, at three qubits"
|
||||
],
|
||||
"covers": [
|
||||
"Prepare a three-qubit GHZ state: half the shots read 000 and half 111."
|
||||
],
|
||||
"ask": "Prepare a three-qubit GHZ state: half the shots read 000 and half 111. Use 3 qubits. Measure every qubit at the end into a classical bit of the same index (c = measure q;); outcomes are written with the highest bit first.",
|
||||
"qubits": 3,
|
||||
"qasm": "OPENQASM 3.0;\nqubit[3] q;\nbit[3] c;\nh q[0];\ncx q[0], q[1];\ncx q[1], q[2];\nc = measure q;\n",
|
||||
"run": {
|
||||
"shots": 100
|
||||
},
|
||||
"intent": [
|
||||
{
|
||||
"distribution": {
|
||||
"000": 0.5,
|
||||
"111": 0.5
|
||||
}
|
||||
}
|
||||
],
|
||||
"expect": {
|
||||
"holds": true,
|
||||
"levels": [
|
||||
"proof",
|
||||
"evidence"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "ghz-4-prepares",
|
||||
"from": [
|
||||
"intents: ghz-prepares-the-chain-s-state",
|
||||
"examples: ghz"
|
||||
],
|
||||
"covers": [
|
||||
"Prepare the four-qubit GHZ state (|0000⟩ + |1111⟩)/√2 from |0000⟩, in as few layers of gates as you can."
|
||||
],
|
||||
"ask": "Prepare the four-qubit GHZ state (|0000⟩ + |1111⟩)/√2 from |0000⟩, in as few layers of gates as you can. Use 4 qubits. Measure every qubit at the end into a classical bit of the same index (c = measure q;); outcomes are written with the highest bit first.",
|
||||
"qubits": 4,
|
||||
"qasm": "OPENQASM 3.0;\ninclude \"stdgates.inc\";\nqubit[4] q;\nbit[4] c;\nh q[0];\ncx q[0], q[1];\ncx q[0], q[2];\ncx q[1], q[3];\nc = measure q;\n",
|
||||
"run": {
|
||||
"shots": 100
|
||||
},
|
||||
"intent": [
|
||||
{
|
||||
"prepares": "OPENQASM 3.0;\ninclude \"stdgates.inc\";\nqubit[4] q;\nbit[4] c;\nh q[0];\ncx q[0], q[1];\ncx q[1], q[2];\ncx q[2], q[3];\nc = measure q;\n",
|
||||
"name": "the GHZ state by a chain of CNOTs"
|
||||
},
|
||||
{
|
||||
"distribution": {
|
||||
"0000": 0.5,
|
||||
"1111": 0.5
|
||||
}
|
||||
}
|
||||
],
|
||||
"expect": {
|
||||
"holds": true,
|
||||
"levels": [
|
||||
"proof",
|
||||
"evidence"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "uniform-3",
|
||||
"from": [
|
||||
"new: the uniform superposition"
|
||||
],
|
||||
"covers": [
|
||||
"Put three qubits in the uniform superposition: every one of the eight outcomes equally likely."
|
||||
],
|
||||
"ask": "Put three qubits in the uniform superposition: every one of the eight outcomes equally likely. Use 3 qubits. Measure every qubit at the end into a classical bit of the same index (c = measure q;); outcomes are written with the highest bit first.",
|
||||
"qubits": 3,
|
||||
"qasm": "OPENQASM 3.0;\nqubit[3] q;\nbit[3] c;\nh q;\nc = measure q;\n",
|
||||
"run": {
|
||||
"shots": 100
|
||||
},
|
||||
"intent": [
|
||||
{
|
||||
"distribution": {
|
||||
"000": 0.125,
|
||||
"001": 0.125,
|
||||
"010": 0.125,
|
||||
"011": 0.125,
|
||||
"100": 0.125,
|
||||
"101": 0.125,
|
||||
"110": 0.125,
|
||||
"111": 0.125
|
||||
}
|
||||
}
|
||||
],
|
||||
"expect": {
|
||||
"holds": true,
|
||||
"levels": [
|
||||
"proof",
|
||||
"evidence"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "grover-2",
|
||||
"from": [
|
||||
"intents: grover-two-intents",
|
||||
"examples: grover"
|
||||
],
|
||||
"covers": [
|
||||
"Run one round of Grover's search over the four basis states of two qubits, marking 11, so that every shot reads 11."
|
||||
],
|
||||
"ask": "Run one round of Grover's search over the four basis states of two qubits, marking 11, so that every shot reads 11. Use 2 qubits. Measure every qubit at the end into a classical bit of the same index (c = measure q;); outcomes are written with the highest bit first.",
|
||||
"qubits": 2,
|
||||
"qasm": "OPENQASM 3.0;\ninclude \"stdgates.inc\";\nqubit[2] q;\nbit[2] c;\nh q;\ncz q[0], q[1];\nh q;\nx q;\ncz q[0], q[1];\nx q;\nh q;\nc = measure q;\n",
|
||||
"run": {
|
||||
"shots": 100
|
||||
},
|
||||
"intent": [
|
||||
{
|
||||
"distribution": {
|
||||
"11": 1.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"expect": {
|
||||
"holds": true,
|
||||
"levels": [
|
||||
"proof",
|
||||
"evidence"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "rotation-three-quarters",
|
||||
"from": [
|
||||
"intents: compiled-first"
|
||||
],
|
||||
"covers": [
|
||||
"Rotate one qubit so that it reads 0 with probability 3/4 and 1 with probability 1/4."
|
||||
],
|
||||
"ask": "Rotate one qubit so that it reads 0 with probability 3/4 and 1 with probability 1/4. Use 1 qubit. Measure every qubit at the end into a classical bit of the same index (c = measure q;); outcomes are written with the highest bit first.",
|
||||
"qubits": 1,
|
||||
"qasm": "OPENQASM 3.0;\ninclude \"stdgates.inc\";\nqubit[1] q;\nbit[1] c;\nrx(pi/3) q[0];\nc = measure q;\n",
|
||||
"run": {
|
||||
"shots": 100
|
||||
},
|
||||
"intent": [
|
||||
{
|
||||
"distribution": {
|
||||
"0": 0.75,
|
||||
"1": 0.25
|
||||
}
|
||||
}
|
||||
],
|
||||
"expect": {
|
||||
"holds": true,
|
||||
"levels": [
|
||||
"proof",
|
||||
"evidence"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "w-3",
|
||||
"from": [
|
||||
"new: the W state"
|
||||
],
|
||||
"covers": [
|
||||
"Prepare the three-qubit W state (|001⟩ + |010⟩ + |100⟩)/√3: each of 001, 010 and 100 read a third of the time, and nothing else."
|
||||
],
|
||||
"ask": "Prepare the three-qubit W state (|001⟩ + |010⟩ + |100⟩)/√3: each of 001, 010 and 100 read a third of the time, and nothing else. Use 3 qubits. Measure every qubit at the end into a classical bit of the same index (c = measure q;); outcomes are written with the highest bit first.",
|
||||
"qubits": 3,
|
||||
"qasm": "OPENQASM 3.0;\nqubit[3] q;\nbit[3] c;\nry(1.9106332362490186) q[0];\nch q[0], q[1];\ncx q[1], q[2];\ncx q[0], q[1];\nx q[0];\nc = measure q;\n",
|
||||
"run": {
|
||||
"shots": 100
|
||||
},
|
||||
"intent": [
|
||||
{
|
||||
"distribution": {
|
||||
"001": 0.3333333333333333,
|
||||
"010": 0.3333333333333333,
|
||||
"100": 0.3333333333333333
|
||||
},
|
||||
"tolerance": 1e-09
|
||||
}
|
||||
],
|
||||
"expect": {
|
||||
"holds": true,
|
||||
"levels": [
|
||||
"proof",
|
||||
"evidence"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "flip-the-last",
|
||||
"from": [
|
||||
"new: one qubit flipped"
|
||||
],
|
||||
"covers": [
|
||||
"On three qubits, flip only q[2] to 1, so that every shot reads 100."
|
||||
],
|
||||
"ask": "On three qubits, flip only q[2] to 1, so that every shot reads 100. Use 3 qubits. Measure every qubit at the end into a classical bit of the same index (c = measure q;); outcomes are written with the highest bit first.",
|
||||
"qubits": 3,
|
||||
"qasm": "OPENQASM 3.0;\nqubit[3] q;\nbit[3] c;\nx q[2];\nc = measure q;\n",
|
||||
"run": {
|
||||
"shots": 100
|
||||
},
|
||||
"intent": [
|
||||
{
|
||||
"distribution": {
|
||||
"100": 1.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"expect": {
|
||||
"holds": true,
|
||||
"levels": [
|
||||
"proof",
|
||||
"evidence"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "cz-from-cx",
|
||||
"from": [
|
||||
"intents: the same circuit as a reference (equivalent)"
|
||||
],
|
||||
"covers": [
|
||||
"Write the controlled-Z gate between q[0] and q[1] using only h and cx gates (no cz), with no measurement."
|
||||
],
|
||||
"ask": "Write the controlled-Z gate between q[0] and q[1] using only h and cx gates (no cz), with no measurement. Use 2 qubits.",
|
||||
"qubits": 2,
|
||||
"qasm": "OPENQASM 3.0;\nqubit[2] q;\nh q[1];\ncx q[0], q[1];\nh q[1];\n",
|
||||
"run": {
|
||||
"shots": 100
|
||||
},
|
||||
"intent": [
|
||||
{
|
||||
"equivalent": "OPENQASM 3.0;\nqubit[2] q;\ncz q[0], q[1];\n",
|
||||
"name": "cz"
|
||||
}
|
||||
],
|
||||
"expect": {
|
||||
"holds": true,
|
||||
"levels": [
|
||||
"proof",
|
||||
"evidence"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "swap-from-cx",
|
||||
"from": [
|
||||
"intents: the same circuit as a reference (equivalent)"
|
||||
],
|
||||
"covers": [
|
||||
"Write a swap of q[0] and q[1] using only cx gates, with no measurement."
|
||||
],
|
||||
"ask": "Write a swap of q[0] and q[1] using only cx gates, with no measurement. Use 2 qubits.",
|
||||
"qubits": 2,
|
||||
"qasm": "OPENQASM 3.0;\nqubit[2] q;\ncx q[0], q[1];\ncx q[1], q[0];\ncx q[0], q[1];\n",
|
||||
"run": {
|
||||
"shots": 100
|
||||
},
|
||||
"intent": [
|
||||
{
|
||||
"equivalent": "OPENQASM 3.0;\nqubit[2] q;\nswap q[0], q[1];\n",
|
||||
"name": "swap"
|
||||
}
|
||||
],
|
||||
"expect": {
|
||||
"holds": true,
|
||||
"levels": [
|
||||
"proof",
|
||||
"evidence"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "merged-rotations",
|
||||
"from": [
|
||||
"intents: rotations-merge"
|
||||
],
|
||||
"covers": [
|
||||
"Write the same circuit as this one with the two rz gates on q[0] merged into one gate:"
|
||||
],
|
||||
"ask": "Write the same circuit as this one with the two rz gates on q[0] merged into one gate:\nOPENQASM 3.0;\ninclude \"stdgates.inc\";\nqubit[2] q;\nh q;\nrz(0.3) q[0];\nrz(0.4) q[0];\ncx q[0], q[1];\n Use 2 qubits.",
|
||||
"qubits": 2,
|
||||
"qasm": "OPENQASM 3.0;\ninclude \"stdgates.inc\";\nqubit[2] q;\nh q;\nrz(0.7) q[0];\ncx q[0], q[1];\n",
|
||||
"run": {
|
||||
"shots": 100
|
||||
},
|
||||
"intent": [
|
||||
{
|
||||
"equivalent": "OPENQASM 3.0;\ninclude \"stdgates.inc\";\nqubit[2] q;\nh q;\nrz(0.3) q[0];\nrz(0.4) q[0];\ncx q[0], q[1];\n",
|
||||
"name": "the program with its two rotations"
|
||||
}
|
||||
],
|
||||
"expect": {
|
||||
"holds": true,
|
||||
"levels": [
|
||||
"proof",
|
||||
"evidence"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "noisy-bell",
|
||||
"from": [
|
||||
"examples: noisy-bell"
|
||||
],
|
||||
"covers": [
|
||||
"Prepare a Bell pair on two qubits, to be run under gate errors and readout flips: the engine checks that its noisy distribution is within 0.1 of the ideal pair."
|
||||
],
|
||||
"ask": "Prepare a Bell pair on two qubits, to be run under gate errors and readout flips: the engine checks that its noisy distribution is within 0.1 of the ideal pair. Use 2 qubits. Measure every qubit at the end into a classical bit of the same index (c = measure q;); outcomes are written with the highest bit first.",
|
||||
"qubits": 2,
|
||||
"qasm": "OPENQASM 3.0;\ninclude \"stdgates.inc\";\nqubit[2] q;\nbit[2] c;\nh q[0];\ncx q[0], q[1];\nc = measure q;\n",
|
||||
"run": {
|
||||
"shots": 4000,
|
||||
"noise": {
|
||||
"depolarizing_1q": 0.01,
|
||||
"depolarizing_2q": 0.03,
|
||||
"readout": 0.02
|
||||
}
|
||||
},
|
||||
"intent": [
|
||||
{
|
||||
"distribution": {
|
||||
"00": 0.5,
|
||||
"11": 0.5
|
||||
},
|
||||
"tolerance": 0.1
|
||||
}
|
||||
],
|
||||
"expect": {
|
||||
"holds": true,
|
||||
"levels": [
|
||||
"proof",
|
||||
"evidence"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
382
wai/quantum-conformance/eval/token-cost.json
Normal file
382
wai/quantum-conformance/eval/token-cost.json
Normal file
|
|
@ -0,0 +1,382 @@
|
|||
{
|
||||
"format": "wai.quantum.token-cost/1",
|
||||
"about": "The tokens a task set's answers take, each written four ways: plain (the program alone, in a fenced block), views (the answer view layer: the program, its circuit, a sample when it measures, a verdict for each intent, a seal), views_request (the layer with the sample and the verdicts alone) and job (the request an agent sends a run tool, as JSON). views_request and job carry the same program and the same request; views adds the circuit and the seal; plain carries the program alone.",
|
||||
"answers": 14,
|
||||
"bytes": {
|
||||
"plain": 1402,
|
||||
"views": 5119,
|
||||
"views_request": 3932,
|
||||
"job": 2857
|
||||
},
|
||||
"tokenizers": [
|
||||
{
|
||||
"name": "A",
|
||||
"vocabulary": 49159,
|
||||
"totals": {
|
||||
"plain": 841,
|
||||
"views": 2365,
|
||||
"views_request": 1967,
|
||||
"job": 1492
|
||||
},
|
||||
"mean": {
|
||||
"plain": 60.1,
|
||||
"views": 168.9,
|
||||
"views_request": 140.5,
|
||||
"job": 106.6
|
||||
},
|
||||
"against_plain": {
|
||||
"plain": 1.0,
|
||||
"views": 2.812,
|
||||
"views_request": 2.339,
|
||||
"job": 1.774
|
||||
},
|
||||
"views_request_against_job": 1.318,
|
||||
"per_answer": [
|
||||
{
|
||||
"name": "plus",
|
||||
"plain": 42,
|
||||
"views": 120,
|
||||
"views_request": 92,
|
||||
"job": 64
|
||||
},
|
||||
{
|
||||
"name": "bell",
|
||||
"plain": 61,
|
||||
"views": 141,
|
||||
"views_request": 113,
|
||||
"job": 85
|
||||
},
|
||||
{
|
||||
"name": "bell-odd-parity",
|
||||
"plain": 58,
|
||||
"views": 138,
|
||||
"views_request": 110,
|
||||
"job": 82
|
||||
},
|
||||
{
|
||||
"name": "ghz-3",
|
||||
"plain": 62,
|
||||
"views": 144,
|
||||
"views_request": 116,
|
||||
"job": 88
|
||||
},
|
||||
{
|
||||
"name": "ghz-4-prepares",
|
||||
"plain": 81,
|
||||
"views": 280,
|
||||
"views_request": 246,
|
||||
"job": 189
|
||||
},
|
||||
{
|
||||
"name": "uniform-3",
|
||||
"plain": 40,
|
||||
"views": 198,
|
||||
"views_request": 170,
|
||||
"job": 130
|
||||
},
|
||||
{
|
||||
"name": "grover-2",
|
||||
"plain": 85,
|
||||
"views": 156,
|
||||
"views_request": 128,
|
||||
"job": 102
|
||||
},
|
||||
{
|
||||
"name": "rotation-three-quarters",
|
||||
"plain": 56,
|
||||
"views": 136,
|
||||
"views_request": 108,
|
||||
"job": 80
|
||||
},
|
||||
{
|
||||
"name": "w-3",
|
||||
"plain": 98,
|
||||
"views": 248,
|
||||
"views_request": 220,
|
||||
"job": 183
|
||||
},
|
||||
{
|
||||
"name": "flip-the-last",
|
||||
"plain": 42,
|
||||
"views": 114,
|
||||
"views_request": 86,
|
||||
"job": 60
|
||||
},
|
||||
{
|
||||
"name": "cz-from-cx",
|
||||
"plain": 45,
|
||||
"views": 147,
|
||||
"views_request": 119,
|
||||
"job": 83
|
||||
},
|
||||
{
|
||||
"name": "swap-from-cx",
|
||||
"plain": 53,
|
||||
"views": 155,
|
||||
"views_request": 127,
|
||||
"job": 91
|
||||
},
|
||||
{
|
||||
"name": "merged-rotations",
|
||||
"plain": 57,
|
||||
"views": 194,
|
||||
"views_request": 166,
|
||||
"job": 130
|
||||
},
|
||||
{
|
||||
"name": "noisy-bell",
|
||||
"plain": 61,
|
||||
"views": 194,
|
||||
"views_request": 166,
|
||||
"job": 125
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B",
|
||||
"vocabulary": 248320,
|
||||
"totals": {
|
||||
"plain": 834,
|
||||
"views": 2312,
|
||||
"views_request": 1928,
|
||||
"job": 1491
|
||||
},
|
||||
"mean": {
|
||||
"plain": 59.6,
|
||||
"views": 165.1,
|
||||
"views_request": 137.7,
|
||||
"job": 106.5
|
||||
},
|
||||
"against_plain": {
|
||||
"plain": 1.0,
|
||||
"views": 2.772,
|
||||
"views_request": 2.312,
|
||||
"job": 1.788
|
||||
},
|
||||
"views_request_against_job": 1.293,
|
||||
"per_answer": [
|
||||
{
|
||||
"name": "plus",
|
||||
"plain": 42,
|
||||
"views": 117,
|
||||
"views_request": 90,
|
||||
"job": 64
|
||||
},
|
||||
{
|
||||
"name": "bell",
|
||||
"plain": 60,
|
||||
"views": 137,
|
||||
"views_request": 110,
|
||||
"job": 84
|
||||
},
|
||||
{
|
||||
"name": "bell-odd-parity",
|
||||
"plain": 58,
|
||||
"views": 135,
|
||||
"views_request": 108,
|
||||
"job": 82
|
||||
},
|
||||
{
|
||||
"name": "ghz-3",
|
||||
"plain": 62,
|
||||
"views": 141,
|
||||
"views_request": 114,
|
||||
"job": 88
|
||||
},
|
||||
{
|
||||
"name": "ghz-4-prepares",
|
||||
"plain": 80,
|
||||
"views": 273,
|
||||
"views_request": 240,
|
||||
"job": 186
|
||||
},
|
||||
{
|
||||
"name": "uniform-3",
|
||||
"plain": 40,
|
||||
"views": 195,
|
||||
"views_request": 168,
|
||||
"job": 130
|
||||
},
|
||||
{
|
||||
"name": "grover-2",
|
||||
"plain": 84,
|
||||
"views": 152,
|
||||
"views_request": 125,
|
||||
"job": 101
|
||||
},
|
||||
{
|
||||
"name": "rotation-three-quarters",
|
||||
"plain": 54,
|
||||
"views": 131,
|
||||
"views_request": 104,
|
||||
"job": 78
|
||||
},
|
||||
{
|
||||
"name": "w-3",
|
||||
"plain": 98,
|
||||
"views": 245,
|
||||
"views_request": 218,
|
||||
"job": 186
|
||||
},
|
||||
{
|
||||
"name": "flip-the-last",
|
||||
"plain": 42,
|
||||
"views": 111,
|
||||
"views_request": 84,
|
||||
"job": 60
|
||||
},
|
||||
{
|
||||
"name": "cz-from-cx",
|
||||
"plain": 45,
|
||||
"views": 144,
|
||||
"views_request": 117,
|
||||
"job": 84
|
||||
},
|
||||
{
|
||||
"name": "swap-from-cx",
|
||||
"plain": 53,
|
||||
"views": 152,
|
||||
"views_request": 125,
|
||||
"job": 92
|
||||
},
|
||||
{
|
||||
"name": "merged-rotations",
|
||||
"plain": 56,
|
||||
"views": 189,
|
||||
"views_request": 162,
|
||||
"job": 129
|
||||
},
|
||||
{
|
||||
"name": "noisy-bell",
|
||||
"plain": 60,
|
||||
"views": 190,
|
||||
"views_request": 163,
|
||||
"job": 127
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "C",
|
||||
"vocabulary": 262144,
|
||||
"totals": {
|
||||
"plain": 835,
|
||||
"views": 2282,
|
||||
"views_request": 1940,
|
||||
"job": 1483
|
||||
},
|
||||
"mean": {
|
||||
"plain": 59.6,
|
||||
"views": 163.0,
|
||||
"views_request": 138.6,
|
||||
"job": 105.9
|
||||
},
|
||||
"against_plain": {
|
||||
"plain": 1.0,
|
||||
"views": 2.733,
|
||||
"views_request": 2.323,
|
||||
"job": 1.776
|
||||
},
|
||||
"views_request_against_job": 1.308,
|
||||
"per_answer": [
|
||||
{
|
||||
"name": "plus",
|
||||
"plain": 42,
|
||||
"views": 115,
|
||||
"views_request": 91,
|
||||
"job": 64
|
||||
},
|
||||
{
|
||||
"name": "bell",
|
||||
"plain": 60,
|
||||
"views": 135,
|
||||
"views_request": 111,
|
||||
"job": 84
|
||||
},
|
||||
{
|
||||
"name": "bell-odd-parity",
|
||||
"plain": 58,
|
||||
"views": 133,
|
||||
"views_request": 109,
|
||||
"job": 82
|
||||
},
|
||||
{
|
||||
"name": "ghz-3",
|
||||
"plain": 62,
|
||||
"views": 139,
|
||||
"views_request": 115,
|
||||
"job": 88
|
||||
},
|
||||
{
|
||||
"name": "ghz-4-prepares",
|
||||
"plain": 80,
|
||||
"views": 271,
|
||||
"views_request": 241,
|
||||
"job": 186
|
||||
},
|
||||
{
|
||||
"name": "uniform-3",
|
||||
"plain": 40,
|
||||
"views": 193,
|
||||
"views_request": 169,
|
||||
"job": 130
|
||||
},
|
||||
{
|
||||
"name": "grover-2",
|
||||
"plain": 84,
|
||||
"views": 150,
|
||||
"views_request": 126,
|
||||
"job": 101
|
||||
},
|
||||
{
|
||||
"name": "rotation-three-quarters",
|
||||
"plain": 55,
|
||||
"views": 130,
|
||||
"views_request": 106,
|
||||
"job": 79
|
||||
},
|
||||
{
|
||||
"name": "w-3",
|
||||
"plain": 98,
|
||||
"views": 243,
|
||||
"views_request": 219,
|
||||
"job": 183
|
||||
},
|
||||
{
|
||||
"name": "flip-the-last",
|
||||
"plain": 42,
|
||||
"views": 109,
|
||||
"views_request": 85,
|
||||
"job": 60
|
||||
},
|
||||
{
|
||||
"name": "cz-from-cx",
|
||||
"plain": 45,
|
||||
"views": 141,
|
||||
"views_request": 117,
|
||||
"job": 83
|
||||
},
|
||||
{
|
||||
"name": "swap-from-cx",
|
||||
"plain": 53,
|
||||
"views": 149,
|
||||
"views_request": 125,
|
||||
"job": 91
|
||||
},
|
||||
{
|
||||
"name": "merged-rotations",
|
||||
"plain": 56,
|
||||
"views": 186,
|
||||
"views_request": 162,
|
||||
"job": 128
|
||||
},
|
||||
{
|
||||
"name": "noisy-bell",
|
||||
"plain": 60,
|
||||
"views": 188,
|
||||
"views_request": 164,
|
||||
"job": 124
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
116
wai/quantum-conformance/eval/token_cost.py
Normal file
116
wai/quantum-conformance/eval/token_cost.py
Normal file
|
|
@ -0,0 +1,116 @@
|
|||
#!/usr/bin/env python3
|
||||
"""What a task set's answers cost a model in tokens, written four ways.
|
||||
|
||||
python3 -I token_cost.py answers.json --tokenizer NAME=MODEL.gguf [...] --tool PATH [--out FILE]
|
||||
|
||||
answers.json is what `wai-quantum eval corpus` writes: each task's answer as
|
||||
plain OpenQASM (the program alone, in a fenced block), in the answer view
|
||||
layer (whole, and with the request alone), and as a job's JSON. For each tokenizer, the vocabulary of a model read
|
||||
from its GGUF file by a tokenizer tool (one that takes `-m MODEL -f FILE --ids
|
||||
--no-bos --log-disable` and prints the ids as a list), this counts the tokens of
|
||||
every answer in each form, and reports the totals, the per-answer means, each
|
||||
form against plain, and the bytes. A tokenizer's size is its vocabulary's, read
|
||||
from the GGUF file's tokenizer.ggml.tokens. Standard library only; it reads the
|
||||
model files and writes nothing but its report.
|
||||
"""
|
||||
import argparse
|
||||
import json
|
||||
import os
|
||||
import struct
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
|
||||
FORMS = ["plain", "views", "views_request", "job"]
|
||||
|
||||
|
||||
def vocabulary(path):
|
||||
"""The number of tokens in a GGUF file's tokenizer.ggml.tokens, or None."""
|
||||
sizes = {0: 1, 1: 1, 2: 2, 3: 2, 4: 4, 5: 4, 6: 4, 7: 1, 10: 8, 11: 8, 12: 8}
|
||||
with open(path, "rb") as f:
|
||||
if f.read(4) != b"GGUF":
|
||||
return None
|
||||
(version,) = struct.unpack("<I", f.read(4))
|
||||
if version < 2:
|
||||
return None
|
||||
_tensors, kvs = struct.unpack("<QQ", f.read(16))
|
||||
|
||||
def string():
|
||||
(n,) = struct.unpack("<Q", f.read(8))
|
||||
return f.read(n)
|
||||
|
||||
def skip(t):
|
||||
if t in sizes:
|
||||
f.seek(sizes[t], 1)
|
||||
elif t == 8:
|
||||
string()
|
||||
elif t == 9:
|
||||
et, n = struct.unpack("<IQ", f.read(12))
|
||||
if et in sizes:
|
||||
f.seek(sizes[et] * n, 1)
|
||||
else:
|
||||
for _ in range(n):
|
||||
skip(et)
|
||||
else:
|
||||
raise ValueError(f"GGUF value type {t}")
|
||||
|
||||
for _ in range(kvs):
|
||||
key = string().decode("utf-8", "replace")
|
||||
(t,) = struct.unpack("<I", f.read(4))
|
||||
if key == "tokenizer.ggml.tokens" and t == 9:
|
||||
_et, n = struct.unpack("<IQ", f.read(12))
|
||||
return n
|
||||
skip(t)
|
||||
return None
|
||||
|
||||
|
||||
def count(tool, model, text):
|
||||
with tempfile.NamedTemporaryFile("w", suffix=".txt", delete=False, encoding="utf-8") as f:
|
||||
f.write(text)
|
||||
name = f.name
|
||||
try:
|
||||
out = subprocess.run([tool, "-m", model, "-f", name, "--ids", "--no-bos", "--log-disable"], capture_output=True, text=True, check=True).stdout
|
||||
finally:
|
||||
os.unlink(name)
|
||||
line = [l for l in out.splitlines() if l.strip().startswith("[")][-1]
|
||||
return len(json.loads(line))
|
||||
|
||||
|
||||
def main():
|
||||
p = argparse.ArgumentParser(description=__doc__.split("\n")[1])
|
||||
p.add_argument("answers")
|
||||
p.add_argument("--tokenizer", action="append", required=True, metavar="NAME=MODEL.gguf")
|
||||
p.add_argument("--tool", required=True, metavar="PATH", help="the tokenizer tool")
|
||||
p.add_argument("--out")
|
||||
a = p.parse_args()
|
||||
answers = json.load(open(a.answers, encoding="utf-8"))["answers"]
|
||||
report = {
|
||||
"format": "wai.quantum.token-cost/1",
|
||||
"about": "The tokens a task set's answers take, each written four ways: plain (the program alone, in a fenced block), views (the answer view layer: the program, its circuit, a sample when it measures, a verdict for each intent, a seal), views_request (the layer with the sample and the verdicts alone) and job (the request an agent sends a run tool, as JSON). views_request and job carry the same program and the same request; views adds the circuit and the seal; plain carries the program alone.",
|
||||
"answers": len(answers),
|
||||
"bytes": {form: sum(len(x[form].encode("utf-8")) for x in answers) for form in FORMS},
|
||||
"tokenizers": [],
|
||||
}
|
||||
for spec in a.tokenizer:
|
||||
name, model = spec.split("=", 1)
|
||||
counts = {form: [count(a.tool, model, x[form]) for x in answers] for form in FORMS}
|
||||
totals = {form: sum(v) for form, v in counts.items()}
|
||||
report["tokenizers"].append({
|
||||
"name": name,
|
||||
"vocabulary": vocabulary(model),
|
||||
"totals": totals,
|
||||
"mean": {form: round(totals[form] / len(answers), 1) for form in FORMS},
|
||||
"against_plain": {form: round(totals[form] / totals["plain"], 3) for form in FORMS},
|
||||
"views_request_against_job": round(totals["views_request"] / totals["job"], 3),
|
||||
"per_answer": [{"name": x["name"], **{form: counts[form][i] for form in FORMS}} for i, x in enumerate(answers)],
|
||||
})
|
||||
print(f"{name} ({report['tokenizers'][-1]['vocabulary']} tokens): " + ", ".join(f"{f} {totals[f]}" for f in FORMS), file=sys.stderr)
|
||||
text = json.dumps(report, indent=2) + "\n"
|
||||
if a.out:
|
||||
open(a.out, "w", encoding="utf-8").write(text)
|
||||
else:
|
||||
sys.stdout.write(text)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
54
wai/quantum-conformance/qec-text/README.md
Normal file
54
wai/quantum-conformance/qec-text/README.md
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
# qec-text
|
||||
|
||||
The error-correction text formats, as the engine reads and writes them: noisy
|
||||
Clifford circuits with detectors and observables (`circuits/`), and detector
|
||||
error models (`models/`). The reader and writer are
|
||||
`wai_quantum::quantum_qec_text`; the circuits' meaning, sampling and models
|
||||
are `wai_quantum::quantum_frame`.
|
||||
|
||||
Every file here is in the writer's layout (`NAME[tag](a, b) t1 t2`, a block's
|
||||
body four spaces in), so each must come back from reading and writing byte for
|
||||
byte. `vectors.json` pins, for each:
|
||||
|
||||
| field | what |
|
||||
|---|---|
|
||||
| `qubits`, `measurements`, `detectors`, `observables` | the circuit's counts after its blocks are unrolled |
|
||||
| `tags` | the tags its instructions carry, each once, in order |
|
||||
| `text_blake3` | BLAKE3 of the file |
|
||||
| `model`, `model_blake3`, `mechanisms` | the file holding the circuit's detector error model, as the engine writes it (coordinates, tags, decompositions), and its hash and size |
|
||||
| `generator` | for a circuit the crate writes, the call that writes it: the file must be what the code writes today |
|
||||
|
||||
A model's vector gives its detectors, observables and mechanisms after its
|
||||
`repeat` blocks are unrolled and `shift_detectors` applied, how many are
|
||||
decomposed (parts joined by `^`) and how many tagged.
|
||||
|
||||
The files:
|
||||
|
||||
- `surface_z_d3_r3`, `surface_z_d5_r1`: the rotated surface-code memory
|
||||
experiment, Z basis, every noise knob at `p`.
|
||||
- `bb72_z_c2`, `bb72_x_c1`: the `[[72,12,6]]` bivariate-bicycle memory, its
|
||||
depth-8 syndrome cycle, in each basis.
|
||||
- `tagged`: written by hand. Tags on a gate, on noise and on a `REPEAT`;
|
||||
Pauli-target observables (`OBSERVABLE_INCLUDE(1) X0 X1 X2` on a
|
||||
three-qubit cat state, `OBSERVABLE_INCLUDE(0) rec[-1] Z2` beside a
|
||||
measurement record); an inverted measurement target (`M !0 1`);
|
||||
coordinates shifted by `SHIFT_COORDS`. A tag on a noise instruction is the
|
||||
tag of every mechanism it makes, and mechanisms with one symptom set but
|
||||
different tags stay apart.
|
||||
- `models/decomposed.dem`: written by hand. Decomposed errors, a tagged one,
|
||||
a `repeat` block with `shift_detectors`, detector coordinates and a
|
||||
declared observable no error flips.
|
||||
|
||||
`refuse/` holds text the engine must refuse, each with its line and the words
|
||||
of its refusal in `vectors.json`: an instruction it does not implement (`T`,
|
||||
and a Pauli product measurement it reads but does not run), an observable
|
||||
that is random without noise, a record before the first measurement, a tag
|
||||
left open, an empty part of a decomposed error, and an unknown model
|
||||
instruction.
|
||||
|
||||
The test is `wai/wai-quantum/tests/qec_text_conformance.rs`:
|
||||
|
||||
```sh
|
||||
cargo test --release --features full --test qec_text_conformance
|
||||
WAI_QUANTUM_BLESS=1 cargo test --release --features full --test qec_text_conformance # rewrite the generated files
|
||||
```
|
||||
192
wai/quantum-conformance/qec-text/circuits/bb72_x_c1.circuit
Normal file
192
wai/quantum-conformance/qec-text/circuits/bb72_x_c1.circuit
Normal file
|
|
@ -0,0 +1,192 @@
|
|||
RX 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
||||
R 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
||||
RX 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
||||
Z_ERROR(0.003) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
||||
CX 90 108 91 109 92 110 93 111 94 112 95 113 96 114 97 115 98 116 99 117 100 118 101 119 102 120 103 121 104 122 105 123 106 124 107 125 72 126 73 127 74 128 75 129 76 130 77 131 78 132 79 133 80 134 81 135 82 136 83 137 84 138 85 139 86 140 87 141 88 142 89 143
|
||||
DEPOLARIZE2(0.003) 90 108 91 109 92 110 93 111 94 112 95 113 96 114 97 115 98 116 99 117 100 118 101 119 102 120 103 121 104 122 105 123 106 124 107 125 72 126 73 127 74 128 75 129 76 130 77 131 78 132 79 133 80 134 81 135 82 136 83 137 84 138 85 139 86 140 87 141 88 142 89 143
|
||||
DEPOLARIZE1(0.003) 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
||||
TICK
|
||||
CX 76 108 77 109 72 110 73 111 74 112 75 113 82 114 83 115 78 116 79 117 80 118 81 119 88 120 89 121 84 122 85 123 86 124 87 125 94 126 95 127 90 128 91 129 92 130 93 131 100 132 101 133 96 134 97 135 98 136 99 137 106 138 107 139 102 140 103 141 104 142 105 143 0 37 1 38 2 39 3 40 4 41 5 36 6 43 7 44 8 45 9 46 10 47 11 42 12 49 13 50 14 51 15 52 16 53 17 48 18 55 19 56 20 57 21 58 22 59 23 54 24 61 25 62 26 63 27 64 28 65 29 60 30 67 31 68 32 69 33 70 34 71 35 66
|
||||
DEPOLARIZE2(0.003) 76 108 77 109 72 110 73 111 74 112 75 113 82 114 83 115 78 116 79 117 80 118 81 119 88 120 89 121 84 122 85 123 86 124 87 125 94 126 95 127 90 128 91 129 92 130 93 131 100 132 101 133 96 134 97 135 98 136 99 137 106 138 107 139 102 140 103 141 104 142 105 143 0 37 1 38 2 39 3 40 4 41 5 36 6 43 7 44 8 45 9 46 10 47 11 42 12 49 13 50 14 51 15 52 16 53 17 48 18 55 19 56 20 57 21 58 22 59 23 54 24 61 25 62 26 63 27 64 28 65 29 60 30 67 31 68 32 69 33 70 34 71 35 66
|
||||
TICK
|
||||
CX 39 108 40 109 41 110 36 111 37 112 38 113 45 114 46 115 47 116 42 117 43 118 44 119 51 120 52 121 53 122 48 123 49 124 50 125 57 126 58 127 59 128 54 129 55 130 56 131 63 132 64 133 65 134 60 135 61 136 62 137 69 138 70 139 71 140 66 141 67 142 68 143 0 78 1 79 2 80 3 81 4 82 5 83 6 84 7 85 8 86 9 87 10 88 11 89 12 90 13 91 14 92 15 93 16 94 17 95 18 96 19 97 20 98 21 99 22 100 23 101 24 102 25 103 26 104 27 105 28 106 29 107 30 72 31 73 32 74 33 75 34 76 35 77
|
||||
DEPOLARIZE2(0.003) 39 108 40 109 41 110 36 111 37 112 38 113 45 114 46 115 47 116 42 117 43 118 44 119 51 120 52 121 53 122 48 123 49 124 50 125 57 126 58 127 59 128 54 129 55 130 56 131 63 132 64 133 65 134 60 135 61 136 62 137 69 138 70 139 71 140 66 141 67 142 68 143 0 78 1 79 2 80 3 81 4 82 5 83 6 84 7 85 8 86 9 87 10 88 11 89 12 90 13 91 14 92 15 93 16 94 17 95 18 96 19 97 20 98 21 99 22 100 23 101 24 102 25 103 26 104 27 105 28 106 29 107 30 72 31 73 32 74 33 75 34 76 35 77
|
||||
TICK
|
||||
CX 66 108 67 109 68 110 69 111 70 112 71 113 36 114 37 115 38 116 39 117 40 118 41 119 42 120 43 121 44 122 45 123 46 124 47 125 48 126 49 127 50 128 51 129 52 130 53 131 54 132 55 133 56 134 57 135 58 136 59 137 60 138 61 139 62 140 63 141 64 142 65 143 0 75 1 76 2 77 3 72 4 73 5 74 6 81 7 82 8 83 9 78 10 79 11 80 12 87 13 88 14 89 15 84 16 85 17 86 18 93 19 94 20 95 21 90 22 91 23 92 24 99 25 100 26 101 27 96 28 97 29 98 30 105 31 106 32 107 33 102 34 103 35 104
|
||||
DEPOLARIZE2(0.003) 66 108 67 109 68 110 69 111 70 112 71 113 36 114 37 115 38 116 39 117 40 118 41 119 42 120 43 121 44 122 45 123 46 124 47 125 48 126 49 127 50 128 51 129 52 130 53 131 54 132 55 133 56 134 57 135 58 136 59 137 60 138 61 139 62 140 63 141 64 142 65 143 0 75 1 76 2 77 3 72 4 73 5 74 6 81 7 82 8 83 9 78 10 79 11 80 12 87 13 88 14 89 15 84 16 85 17 86 18 93 19 94 20 95 21 90 22 91 23 92 24 99 25 100 26 101 27 96 28 97 29 98 30 105 31 106 32 107 33 102 34 103 35 104
|
||||
TICK
|
||||
CX 60 108 61 109 62 110 63 111 64 112 65 113 66 114 67 115 68 116 69 117 70 118 71 119 36 120 37 121 38 122 39 123 40 124 41 125 42 126 43 127 44 128 45 129 46 130 47 131 48 132 49 133 50 134 51 135 52 136 53 137 54 138 55 139 56 140 57 141 58 142 59 143 0 84 1 85 2 86 3 87 4 88 5 89 6 90 7 91 8 92 9 93 10 94 11 95 12 96 13 97 14 98 15 99 16 100 17 101 18 102 19 103 20 104 21 105 22 106 23 107 24 72 25 73 26 74 27 75 28 76 29 77 30 78 31 79 32 80 33 81 34 82 35 83
|
||||
DEPOLARIZE2(0.003) 60 108 61 109 62 110 63 111 64 112 65 113 66 114 67 115 68 116 69 117 70 118 71 119 36 120 37 121 38 122 39 123 40 124 41 125 42 126 43 127 44 128 45 129 46 130 47 131 48 132 49 133 50 134 51 135 52 136 53 137 54 138 55 139 56 140 57 141 58 142 59 143 0 84 1 85 2 86 3 87 4 88 5 89 6 90 7 91 8 92 9 93 10 94 11 95 12 96 13 97 14 98 15 99 16 100 17 101 18 102 19 103 20 104 21 105 22 106 23 107 24 72 25 73 26 74 27 75 28 76 29 77 30 78 31 79 32 80 33 81 34 82 35 83
|
||||
TICK
|
||||
CX 77 108 72 109 73 110 74 111 75 112 76 113 83 114 78 115 79 116 80 117 81 118 82 119 89 120 84 121 85 122 86 123 87 124 88 125 95 126 90 127 91 128 92 129 93 130 94 131 101 132 96 133 97 134 98 135 99 136 100 137 107 138 102 139 103 140 104 141 105 142 106 143 0 54 1 55 2 56 3 57 4 58 5 59 6 60 7 61 8 62 9 63 10 64 11 65 12 66 13 67 14 68 15 69 16 70 17 71 18 36 19 37 20 38 21 39 22 40 23 41 24 42 25 43 26 44 27 45 28 46 29 47 30 48 31 49 32 50 33 51 34 52 35 53
|
||||
DEPOLARIZE2(0.003) 77 108 72 109 73 110 74 111 75 112 76 113 83 114 78 115 79 116 80 117 81 118 82 119 89 120 84 121 85 122 86 123 87 124 88 125 95 126 90 127 91 128 92 129 93 130 94 131 101 132 96 133 97 134 98 135 99 136 100 137 107 138 102 139 103 140 104 141 105 142 106 143 0 54 1 55 2 56 3 57 4 58 5 59 6 60 7 61 8 62 9 63 10 64 11 65 12 66 13 67 14 68 15 69 16 70 17 71 18 36 19 37 20 38 21 39 22 40 23 41 24 42 25 43 26 44 27 45 28 46 29 47 30 48 31 49 32 50 33 51 34 52 35 53
|
||||
TICK
|
||||
M(0.003) 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
||||
CX 0 38 1 39 2 40 3 41 4 36 5 37 6 44 7 45 8 46 9 47 10 42 11 43 12 50 13 51 14 52 15 53 16 48 17 49 18 56 19 57 20 58 21 59 22 54 23 55 24 62 25 63 26 64 27 65 28 60 29 61 30 68 31 69 32 70 33 71 34 66 35 67
|
||||
DEPOLARIZE2(0.003) 0 38 1 39 2 40 3 41 4 36 5 37 6 44 7 45 8 46 9 47 10 42 11 43 12 50 13 51 14 52 15 53 16 48 17 49 18 56 19 57 20 58 21 59 22 54 23 55 24 62 25 63 26 64 27 65 28 60 29 61 30 68 31 69 32 70 33 71 34 66 35 67
|
||||
DEPOLARIZE1(0.003) 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
||||
TICK
|
||||
DEPOLARIZE1(0.003) 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
||||
MX(0.003) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
||||
R 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
||||
X_ERROR(0.003) 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
||||
TICK
|
||||
DETECTOR rec[-36]
|
||||
DETECTOR rec[-35]
|
||||
DETECTOR rec[-34]
|
||||
DETECTOR rec[-33]
|
||||
DETECTOR rec[-32]
|
||||
DETECTOR rec[-31]
|
||||
DETECTOR rec[-30]
|
||||
DETECTOR rec[-29]
|
||||
DETECTOR rec[-28]
|
||||
DETECTOR rec[-27]
|
||||
DETECTOR rec[-26]
|
||||
DETECTOR rec[-25]
|
||||
DETECTOR rec[-24]
|
||||
DETECTOR rec[-23]
|
||||
DETECTOR rec[-22]
|
||||
DETECTOR rec[-21]
|
||||
DETECTOR rec[-20]
|
||||
DETECTOR rec[-19]
|
||||
DETECTOR rec[-18]
|
||||
DETECTOR rec[-17]
|
||||
DETECTOR rec[-16]
|
||||
DETECTOR rec[-15]
|
||||
DETECTOR rec[-14]
|
||||
DETECTOR rec[-13]
|
||||
DETECTOR rec[-12]
|
||||
DETECTOR rec[-11]
|
||||
DETECTOR rec[-10]
|
||||
DETECTOR rec[-9]
|
||||
DETECTOR rec[-8]
|
||||
DETECTOR rec[-7]
|
||||
DETECTOR rec[-6]
|
||||
DETECTOR rec[-5]
|
||||
DETECTOR rec[-4]
|
||||
DETECTOR rec[-3]
|
||||
DETECTOR rec[-2]
|
||||
DETECTOR rec[-1]
|
||||
RX 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
||||
CX 90 108 91 109 92 110 93 111 94 112 95 113 96 114 97 115 98 116 99 117 100 118 101 119 102 120 103 121 104 122 105 123 106 124 107 125 72 126 73 127 74 128 75 129 76 130 77 131 78 132 79 133 80 134 81 135 82 136 83 137 84 138 85 139 86 140 87 141 88 142 89 143
|
||||
TICK
|
||||
CX 76 108 77 109 72 110 73 111 74 112 75 113 82 114 83 115 78 116 79 117 80 118 81 119 88 120 89 121 84 122 85 123 86 124 87 125 94 126 95 127 90 128 91 129 92 130 93 131 100 132 101 133 96 134 97 135 98 136 99 137 106 138 107 139 102 140 103 141 104 142 105 143 0 37 1 38 2 39 3 40 4 41 5 36 6 43 7 44 8 45 9 46 10 47 11 42 12 49 13 50 14 51 15 52 16 53 17 48 18 55 19 56 20 57 21 58 22 59 23 54 24 61 25 62 26 63 27 64 28 65 29 60 30 67 31 68 32 69 33 70 34 71 35 66
|
||||
TICK
|
||||
CX 39 108 40 109 41 110 36 111 37 112 38 113 45 114 46 115 47 116 42 117 43 118 44 119 51 120 52 121 53 122 48 123 49 124 50 125 57 126 58 127 59 128 54 129 55 130 56 131 63 132 64 133 65 134 60 135 61 136 62 137 69 138 70 139 71 140 66 141 67 142 68 143 0 78 1 79 2 80 3 81 4 82 5 83 6 84 7 85 8 86 9 87 10 88 11 89 12 90 13 91 14 92 15 93 16 94 17 95 18 96 19 97 20 98 21 99 22 100 23 101 24 102 25 103 26 104 27 105 28 106 29 107 30 72 31 73 32 74 33 75 34 76 35 77
|
||||
TICK
|
||||
CX 66 108 67 109 68 110 69 111 70 112 71 113 36 114 37 115 38 116 39 117 40 118 41 119 42 120 43 121 44 122 45 123 46 124 47 125 48 126 49 127 50 128 51 129 52 130 53 131 54 132 55 133 56 134 57 135 58 136 59 137 60 138 61 139 62 140 63 141 64 142 65 143 0 75 1 76 2 77 3 72 4 73 5 74 6 81 7 82 8 83 9 78 10 79 11 80 12 87 13 88 14 89 15 84 16 85 17 86 18 93 19 94 20 95 21 90 22 91 23 92 24 99 25 100 26 101 27 96 28 97 29 98 30 105 31 106 32 107 33 102 34 103 35 104
|
||||
TICK
|
||||
CX 60 108 61 109 62 110 63 111 64 112 65 113 66 114 67 115 68 116 69 117 70 118 71 119 36 120 37 121 38 122 39 123 40 124 41 125 42 126 43 127 44 128 45 129 46 130 47 131 48 132 49 133 50 134 51 135 52 136 53 137 54 138 55 139 56 140 57 141 58 142 59 143 0 84 1 85 2 86 3 87 4 88 5 89 6 90 7 91 8 92 9 93 10 94 11 95 12 96 13 97 14 98 15 99 16 100 17 101 18 102 19 103 20 104 21 105 22 106 23 107 24 72 25 73 26 74 27 75 28 76 29 77 30 78 31 79 32 80 33 81 34 82 35 83
|
||||
TICK
|
||||
CX 77 108 72 109 73 110 74 111 75 112 76 113 83 114 78 115 79 116 80 117 81 118 82 119 89 120 84 121 85 122 86 123 87 124 88 125 95 126 90 127 91 128 92 129 93 130 94 131 101 132 96 133 97 134 98 135 99 136 100 137 107 138 102 139 103 140 104 141 105 142 106 143 0 54 1 55 2 56 3 57 4 58 5 59 6 60 7 61 8 62 9 63 10 64 11 65 12 66 13 67 14 68 15 69 16 70 17 71 18 36 19 37 20 38 21 39 22 40 23 41 24 42 25 43 26 44 27 45 28 46 29 47 30 48 31 49 32 50 33 51 34 52 35 53
|
||||
TICK
|
||||
M 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
||||
CX 0 38 1 39 2 40 3 41 4 36 5 37 6 44 7 45 8 46 9 47 10 42 11 43 12 50 13 51 14 52 15 53 16 48 17 49 18 56 19 57 20 58 21 59 22 54 23 55 24 62 25 63 26 64 27 65 28 60 29 61 30 68 31 69 32 70 33 71 34 66 35 67
|
||||
TICK
|
||||
MX 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
||||
R 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
||||
TICK
|
||||
DETECTOR rec[-36] rec[-108]
|
||||
DETECTOR rec[-35] rec[-107]
|
||||
DETECTOR rec[-34] rec[-106]
|
||||
DETECTOR rec[-33] rec[-105]
|
||||
DETECTOR rec[-32] rec[-104]
|
||||
DETECTOR rec[-31] rec[-103]
|
||||
DETECTOR rec[-30] rec[-102]
|
||||
DETECTOR rec[-29] rec[-101]
|
||||
DETECTOR rec[-28] rec[-100]
|
||||
DETECTOR rec[-27] rec[-99]
|
||||
DETECTOR rec[-26] rec[-98]
|
||||
DETECTOR rec[-25] rec[-97]
|
||||
DETECTOR rec[-24] rec[-96]
|
||||
DETECTOR rec[-23] rec[-95]
|
||||
DETECTOR rec[-22] rec[-94]
|
||||
DETECTOR rec[-21] rec[-93]
|
||||
DETECTOR rec[-20] rec[-92]
|
||||
DETECTOR rec[-19] rec[-91]
|
||||
DETECTOR rec[-18] rec[-90]
|
||||
DETECTOR rec[-17] rec[-89]
|
||||
DETECTOR rec[-16] rec[-88]
|
||||
DETECTOR rec[-15] rec[-87]
|
||||
DETECTOR rec[-14] rec[-86]
|
||||
DETECTOR rec[-13] rec[-85]
|
||||
DETECTOR rec[-12] rec[-84]
|
||||
DETECTOR rec[-11] rec[-83]
|
||||
DETECTOR rec[-10] rec[-82]
|
||||
DETECTOR rec[-9] rec[-81]
|
||||
DETECTOR rec[-8] rec[-80]
|
||||
DETECTOR rec[-7] rec[-79]
|
||||
DETECTOR rec[-6] rec[-78]
|
||||
DETECTOR rec[-5] rec[-77]
|
||||
DETECTOR rec[-4] rec[-76]
|
||||
DETECTOR rec[-3] rec[-75]
|
||||
DETECTOR rec[-2] rec[-74]
|
||||
DETECTOR rec[-1] rec[-73]
|
||||
RX 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
||||
CX 90 108 91 109 92 110 93 111 94 112 95 113 96 114 97 115 98 116 99 117 100 118 101 119 102 120 103 121 104 122 105 123 106 124 107 125 72 126 73 127 74 128 75 129 76 130 77 131 78 132 79 133 80 134 81 135 82 136 83 137 84 138 85 139 86 140 87 141 88 142 89 143
|
||||
TICK
|
||||
CX 76 108 77 109 72 110 73 111 74 112 75 113 82 114 83 115 78 116 79 117 80 118 81 119 88 120 89 121 84 122 85 123 86 124 87 125 94 126 95 127 90 128 91 129 92 130 93 131 100 132 101 133 96 134 97 135 98 136 99 137 106 138 107 139 102 140 103 141 104 142 105 143 0 37 1 38 2 39 3 40 4 41 5 36 6 43 7 44 8 45 9 46 10 47 11 42 12 49 13 50 14 51 15 52 16 53 17 48 18 55 19 56 20 57 21 58 22 59 23 54 24 61 25 62 26 63 27 64 28 65 29 60 30 67 31 68 32 69 33 70 34 71 35 66
|
||||
TICK
|
||||
CX 39 108 40 109 41 110 36 111 37 112 38 113 45 114 46 115 47 116 42 117 43 118 44 119 51 120 52 121 53 122 48 123 49 124 50 125 57 126 58 127 59 128 54 129 55 130 56 131 63 132 64 133 65 134 60 135 61 136 62 137 69 138 70 139 71 140 66 141 67 142 68 143 0 78 1 79 2 80 3 81 4 82 5 83 6 84 7 85 8 86 9 87 10 88 11 89 12 90 13 91 14 92 15 93 16 94 17 95 18 96 19 97 20 98 21 99 22 100 23 101 24 102 25 103 26 104 27 105 28 106 29 107 30 72 31 73 32 74 33 75 34 76 35 77
|
||||
TICK
|
||||
CX 66 108 67 109 68 110 69 111 70 112 71 113 36 114 37 115 38 116 39 117 40 118 41 119 42 120 43 121 44 122 45 123 46 124 47 125 48 126 49 127 50 128 51 129 52 130 53 131 54 132 55 133 56 134 57 135 58 136 59 137 60 138 61 139 62 140 63 141 64 142 65 143 0 75 1 76 2 77 3 72 4 73 5 74 6 81 7 82 8 83 9 78 10 79 11 80 12 87 13 88 14 89 15 84 16 85 17 86 18 93 19 94 20 95 21 90 22 91 23 92 24 99 25 100 26 101 27 96 28 97 29 98 30 105 31 106 32 107 33 102 34 103 35 104
|
||||
TICK
|
||||
CX 60 108 61 109 62 110 63 111 64 112 65 113 66 114 67 115 68 116 69 117 70 118 71 119 36 120 37 121 38 122 39 123 40 124 41 125 42 126 43 127 44 128 45 129 46 130 47 131 48 132 49 133 50 134 51 135 52 136 53 137 54 138 55 139 56 140 57 141 58 142 59 143 0 84 1 85 2 86 3 87 4 88 5 89 6 90 7 91 8 92 9 93 10 94 11 95 12 96 13 97 14 98 15 99 16 100 17 101 18 102 19 103 20 104 21 105 22 106 23 107 24 72 25 73 26 74 27 75 28 76 29 77 30 78 31 79 32 80 33 81 34 82 35 83
|
||||
TICK
|
||||
CX 77 108 72 109 73 110 74 111 75 112 76 113 83 114 78 115 79 116 80 117 81 118 82 119 89 120 84 121 85 122 86 123 87 124 88 125 95 126 90 127 91 128 92 129 93 130 94 131 101 132 96 133 97 134 98 135 99 136 100 137 107 138 102 139 103 140 104 141 105 142 106 143 0 54 1 55 2 56 3 57 4 58 5 59 6 60 7 61 8 62 9 63 10 64 11 65 12 66 13 67 14 68 15 69 16 70 17 71 18 36 19 37 20 38 21 39 22 40 23 41 24 42 25 43 26 44 27 45 28 46 29 47 30 48 31 49 32 50 33 51 34 52 35 53
|
||||
TICK
|
||||
M 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
||||
CX 0 38 1 39 2 40 3 41 4 36 5 37 6 44 7 45 8 46 9 47 10 42 11 43 12 50 13 51 14 52 15 53 16 48 17 49 18 56 19 57 20 58 21 59 22 54 23 55 24 62 25 63 26 64 27 65 28 60 29 61 30 68 31 69 32 70 33 71 34 66 35 67
|
||||
TICK
|
||||
MX 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
||||
R 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
||||
TICK
|
||||
DETECTOR rec[-36] rec[-108]
|
||||
DETECTOR rec[-35] rec[-107]
|
||||
DETECTOR rec[-34] rec[-106]
|
||||
DETECTOR rec[-33] rec[-105]
|
||||
DETECTOR rec[-32] rec[-104]
|
||||
DETECTOR rec[-31] rec[-103]
|
||||
DETECTOR rec[-30] rec[-102]
|
||||
DETECTOR rec[-29] rec[-101]
|
||||
DETECTOR rec[-28] rec[-100]
|
||||
DETECTOR rec[-27] rec[-99]
|
||||
DETECTOR rec[-26] rec[-98]
|
||||
DETECTOR rec[-25] rec[-97]
|
||||
DETECTOR rec[-24] rec[-96]
|
||||
DETECTOR rec[-23] rec[-95]
|
||||
DETECTOR rec[-22] rec[-94]
|
||||
DETECTOR rec[-21] rec[-93]
|
||||
DETECTOR rec[-20] rec[-92]
|
||||
DETECTOR rec[-19] rec[-91]
|
||||
DETECTOR rec[-18] rec[-90]
|
||||
DETECTOR rec[-17] rec[-89]
|
||||
DETECTOR rec[-16] rec[-88]
|
||||
DETECTOR rec[-15] rec[-87]
|
||||
DETECTOR rec[-14] rec[-86]
|
||||
DETECTOR rec[-13] rec[-85]
|
||||
DETECTOR rec[-12] rec[-84]
|
||||
DETECTOR rec[-11] rec[-83]
|
||||
DETECTOR rec[-10] rec[-82]
|
||||
DETECTOR rec[-9] rec[-81]
|
||||
DETECTOR rec[-8] rec[-80]
|
||||
DETECTOR rec[-7] rec[-79]
|
||||
DETECTOR rec[-6] rec[-78]
|
||||
DETECTOR rec[-5] rec[-77]
|
||||
DETECTOR rec[-4] rec[-76]
|
||||
DETECTOR rec[-3] rec[-75]
|
||||
DETECTOR rec[-2] rec[-74]
|
||||
DETECTOR rec[-1] rec[-73]
|
||||
MX 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
||||
OBSERVABLE_INCLUDE(0) rec[-69] rec[-66] rec[-60] rec[-57] rec[-54] rec[-48]
|
||||
OBSERVABLE_INCLUDE(1) rec[-68] rec[-65] rec[-59] rec[-56] rec[-53] rec[-47]
|
||||
OBSERVABLE_INCLUDE(2) rec[-67] rec[-64] rec[-58] rec[-55] rec[-52] rec[-46]
|
||||
OBSERVABLE_INCLUDE(3) rec[-72] rec[-63] rec[-60] rec[-57] rec[-51] rec[-45]
|
||||
OBSERVABLE_INCLUDE(4) rec[-69] rec[-66] rec[-63] rec[-57] rec[-51] rec[-42]
|
||||
OBSERVABLE_INCLUDE(5) rec[-68] rec[-65] rec[-62] rec[-56] rec[-50] rec[-41]
|
||||
OBSERVABLE_INCLUDE(6) rec[-72] rec[-71] rec[-69] rec[-68] rec[-66] rec[-65] rec[-63] rec[-62] rec[-36] rec[-35] rec[-33] rec[-32]
|
||||
OBSERVABLE_INCLUDE(7) rec[-72] rec[-70] rec[-69] rec[-67] rec[-66] rec[-64] rec[-63] rec[-61] rec[-36] rec[-34] rec[-33] rec[-31]
|
||||
OBSERVABLE_INCLUDE(8) rec[-72] rec[-71] rec[-70] rec[-67] rec[-66] rec[-65] rec[-64] rec[-63] rec[-60] rec[-58] rec[-35] rec[-33] rec[-30] rec[-28]
|
||||
OBSERVABLE_INCLUDE(9) rec[-70] rec[-68] rec[-66] rec[-64] rec[-59] rec[-57] rec[-36] rec[-35] rec[-34] rec[-33] rec[-29] rec[-27]
|
||||
OBSERVABLE_INCLUDE(10) rec[-70] rec[-68] rec[-65] rec[-64] rec[-63] rec[-62] rec[-60] rec[-56] rec[-36] rec[-35] rec[-34] rec[-33] rec[-30] rec[-26]
|
||||
OBSERVABLE_INCLUDE(11) rec[-72] rec[-71] rec[-68] rec[-67] rec[-66] rec[-65] rec[-64] rec[-61] rec[-59] rec[-55] rec[-36] rec[-34] rec[-29] rec[-25]
|
||||
259
wai/quantum-conformance/qec-text/circuits/bb72_z_c2.circuit
Normal file
259
wai/quantum-conformance/qec-text/circuits/bb72_z_c2.circuit
Normal file
|
|
@ -0,0 +1,259 @@
|
|||
R 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
||||
R 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
||||
RX 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
||||
Z_ERROR(0.003) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
||||
CX 90 108 91 109 92 110 93 111 94 112 95 113 96 114 97 115 98 116 99 117 100 118 101 119 102 120 103 121 104 122 105 123 106 124 107 125 72 126 73 127 74 128 75 129 76 130 77 131 78 132 79 133 80 134 81 135 82 136 83 137 84 138 85 139 86 140 87 141 88 142 89 143
|
||||
DEPOLARIZE2(0.003) 90 108 91 109 92 110 93 111 94 112 95 113 96 114 97 115 98 116 99 117 100 118 101 119 102 120 103 121 104 122 105 123 106 124 107 125 72 126 73 127 74 128 75 129 76 130 77 131 78 132 79 133 80 134 81 135 82 136 83 137 84 138 85 139 86 140 87 141 88 142 89 143
|
||||
DEPOLARIZE1(0.003) 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
||||
TICK
|
||||
CX 76 108 77 109 72 110 73 111 74 112 75 113 82 114 83 115 78 116 79 117 80 118 81 119 88 120 89 121 84 122 85 123 86 124 87 125 94 126 95 127 90 128 91 129 92 130 93 131 100 132 101 133 96 134 97 135 98 136 99 137 106 138 107 139 102 140 103 141 104 142 105 143 0 37 1 38 2 39 3 40 4 41 5 36 6 43 7 44 8 45 9 46 10 47 11 42 12 49 13 50 14 51 15 52 16 53 17 48 18 55 19 56 20 57 21 58 22 59 23 54 24 61 25 62 26 63 27 64 28 65 29 60 30 67 31 68 32 69 33 70 34 71 35 66
|
||||
DEPOLARIZE2(0.003) 76 108 77 109 72 110 73 111 74 112 75 113 82 114 83 115 78 116 79 117 80 118 81 119 88 120 89 121 84 122 85 123 86 124 87 125 94 126 95 127 90 128 91 129 92 130 93 131 100 132 101 133 96 134 97 135 98 136 99 137 106 138 107 139 102 140 103 141 104 142 105 143 0 37 1 38 2 39 3 40 4 41 5 36 6 43 7 44 8 45 9 46 10 47 11 42 12 49 13 50 14 51 15 52 16 53 17 48 18 55 19 56 20 57 21 58 22 59 23 54 24 61 25 62 26 63 27 64 28 65 29 60 30 67 31 68 32 69 33 70 34 71 35 66
|
||||
TICK
|
||||
CX 39 108 40 109 41 110 36 111 37 112 38 113 45 114 46 115 47 116 42 117 43 118 44 119 51 120 52 121 53 122 48 123 49 124 50 125 57 126 58 127 59 128 54 129 55 130 56 131 63 132 64 133 65 134 60 135 61 136 62 137 69 138 70 139 71 140 66 141 67 142 68 143 0 78 1 79 2 80 3 81 4 82 5 83 6 84 7 85 8 86 9 87 10 88 11 89 12 90 13 91 14 92 15 93 16 94 17 95 18 96 19 97 20 98 21 99 22 100 23 101 24 102 25 103 26 104 27 105 28 106 29 107 30 72 31 73 32 74 33 75 34 76 35 77
|
||||
DEPOLARIZE2(0.003) 39 108 40 109 41 110 36 111 37 112 38 113 45 114 46 115 47 116 42 117 43 118 44 119 51 120 52 121 53 122 48 123 49 124 50 125 57 126 58 127 59 128 54 129 55 130 56 131 63 132 64 133 65 134 60 135 61 136 62 137 69 138 70 139 71 140 66 141 67 142 68 143 0 78 1 79 2 80 3 81 4 82 5 83 6 84 7 85 8 86 9 87 10 88 11 89 12 90 13 91 14 92 15 93 16 94 17 95 18 96 19 97 20 98 21 99 22 100 23 101 24 102 25 103 26 104 27 105 28 106 29 107 30 72 31 73 32 74 33 75 34 76 35 77
|
||||
TICK
|
||||
CX 66 108 67 109 68 110 69 111 70 112 71 113 36 114 37 115 38 116 39 117 40 118 41 119 42 120 43 121 44 122 45 123 46 124 47 125 48 126 49 127 50 128 51 129 52 130 53 131 54 132 55 133 56 134 57 135 58 136 59 137 60 138 61 139 62 140 63 141 64 142 65 143 0 75 1 76 2 77 3 72 4 73 5 74 6 81 7 82 8 83 9 78 10 79 11 80 12 87 13 88 14 89 15 84 16 85 17 86 18 93 19 94 20 95 21 90 22 91 23 92 24 99 25 100 26 101 27 96 28 97 29 98 30 105 31 106 32 107 33 102 34 103 35 104
|
||||
DEPOLARIZE2(0.003) 66 108 67 109 68 110 69 111 70 112 71 113 36 114 37 115 38 116 39 117 40 118 41 119 42 120 43 121 44 122 45 123 46 124 47 125 48 126 49 127 50 128 51 129 52 130 53 131 54 132 55 133 56 134 57 135 58 136 59 137 60 138 61 139 62 140 63 141 64 142 65 143 0 75 1 76 2 77 3 72 4 73 5 74 6 81 7 82 8 83 9 78 10 79 11 80 12 87 13 88 14 89 15 84 16 85 17 86 18 93 19 94 20 95 21 90 22 91 23 92 24 99 25 100 26 101 27 96 28 97 29 98 30 105 31 106 32 107 33 102 34 103 35 104
|
||||
TICK
|
||||
CX 60 108 61 109 62 110 63 111 64 112 65 113 66 114 67 115 68 116 69 117 70 118 71 119 36 120 37 121 38 122 39 123 40 124 41 125 42 126 43 127 44 128 45 129 46 130 47 131 48 132 49 133 50 134 51 135 52 136 53 137 54 138 55 139 56 140 57 141 58 142 59 143 0 84 1 85 2 86 3 87 4 88 5 89 6 90 7 91 8 92 9 93 10 94 11 95 12 96 13 97 14 98 15 99 16 100 17 101 18 102 19 103 20 104 21 105 22 106 23 107 24 72 25 73 26 74 27 75 28 76 29 77 30 78 31 79 32 80 33 81 34 82 35 83
|
||||
DEPOLARIZE2(0.003) 60 108 61 109 62 110 63 111 64 112 65 113 66 114 67 115 68 116 69 117 70 118 71 119 36 120 37 121 38 122 39 123 40 124 41 125 42 126 43 127 44 128 45 129 46 130 47 131 48 132 49 133 50 134 51 135 52 136 53 137 54 138 55 139 56 140 57 141 58 142 59 143 0 84 1 85 2 86 3 87 4 88 5 89 6 90 7 91 8 92 9 93 10 94 11 95 12 96 13 97 14 98 15 99 16 100 17 101 18 102 19 103 20 104 21 105 22 106 23 107 24 72 25 73 26 74 27 75 28 76 29 77 30 78 31 79 32 80 33 81 34 82 35 83
|
||||
TICK
|
||||
CX 77 108 72 109 73 110 74 111 75 112 76 113 83 114 78 115 79 116 80 117 81 118 82 119 89 120 84 121 85 122 86 123 87 124 88 125 95 126 90 127 91 128 92 129 93 130 94 131 101 132 96 133 97 134 98 135 99 136 100 137 107 138 102 139 103 140 104 141 105 142 106 143 0 54 1 55 2 56 3 57 4 58 5 59 6 60 7 61 8 62 9 63 10 64 11 65 12 66 13 67 14 68 15 69 16 70 17 71 18 36 19 37 20 38 21 39 22 40 23 41 24 42 25 43 26 44 27 45 28 46 29 47 30 48 31 49 32 50 33 51 34 52 35 53
|
||||
DEPOLARIZE2(0.003) 77 108 72 109 73 110 74 111 75 112 76 113 83 114 78 115 79 116 80 117 81 118 82 119 89 120 84 121 85 122 86 123 87 124 88 125 95 126 90 127 91 128 92 129 93 130 94 131 101 132 96 133 97 134 98 135 99 136 100 137 107 138 102 139 103 140 104 141 105 142 106 143 0 54 1 55 2 56 3 57 4 58 5 59 6 60 7 61 8 62 9 63 10 64 11 65 12 66 13 67 14 68 15 69 16 70 17 71 18 36 19 37 20 38 21 39 22 40 23 41 24 42 25 43 26 44 27 45 28 46 29 47 30 48 31 49 32 50 33 51 34 52 35 53
|
||||
TICK
|
||||
M(0.003) 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
||||
CX 0 38 1 39 2 40 3 41 4 36 5 37 6 44 7 45 8 46 9 47 10 42 11 43 12 50 13 51 14 52 15 53 16 48 17 49 18 56 19 57 20 58 21 59 22 54 23 55 24 62 25 63 26 64 27 65 28 60 29 61 30 68 31 69 32 70 33 71 34 66 35 67
|
||||
DEPOLARIZE2(0.003) 0 38 1 39 2 40 3 41 4 36 5 37 6 44 7 45 8 46 9 47 10 42 11 43 12 50 13 51 14 52 15 53 16 48 17 49 18 56 19 57 20 58 21 59 22 54 23 55 24 62 25 63 26 64 27 65 28 60 29 61 30 68 31 69 32 70 33 71 34 66 35 67
|
||||
DEPOLARIZE1(0.003) 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
||||
TICK
|
||||
DEPOLARIZE1(0.003) 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
||||
MX(0.003) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
||||
R 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
||||
X_ERROR(0.003) 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
||||
TICK
|
||||
DETECTOR rec[-72]
|
||||
DETECTOR rec[-71]
|
||||
DETECTOR rec[-70]
|
||||
DETECTOR rec[-69]
|
||||
DETECTOR rec[-68]
|
||||
DETECTOR rec[-67]
|
||||
DETECTOR rec[-66]
|
||||
DETECTOR rec[-65]
|
||||
DETECTOR rec[-64]
|
||||
DETECTOR rec[-63]
|
||||
DETECTOR rec[-62]
|
||||
DETECTOR rec[-61]
|
||||
DETECTOR rec[-60]
|
||||
DETECTOR rec[-59]
|
||||
DETECTOR rec[-58]
|
||||
DETECTOR rec[-57]
|
||||
DETECTOR rec[-56]
|
||||
DETECTOR rec[-55]
|
||||
DETECTOR rec[-54]
|
||||
DETECTOR rec[-53]
|
||||
DETECTOR rec[-52]
|
||||
DETECTOR rec[-51]
|
||||
DETECTOR rec[-50]
|
||||
DETECTOR rec[-49]
|
||||
DETECTOR rec[-48]
|
||||
DETECTOR rec[-47]
|
||||
DETECTOR rec[-46]
|
||||
DETECTOR rec[-45]
|
||||
DETECTOR rec[-44]
|
||||
DETECTOR rec[-43]
|
||||
DETECTOR rec[-42]
|
||||
DETECTOR rec[-41]
|
||||
DETECTOR rec[-40]
|
||||
DETECTOR rec[-39]
|
||||
DETECTOR rec[-38]
|
||||
DETECTOR rec[-37]
|
||||
RX 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
||||
Z_ERROR(0.003) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
||||
CX 90 108 91 109 92 110 93 111 94 112 95 113 96 114 97 115 98 116 99 117 100 118 101 119 102 120 103 121 104 122 105 123 106 124 107 125 72 126 73 127 74 128 75 129 76 130 77 131 78 132 79 133 80 134 81 135 82 136 83 137 84 138 85 139 86 140 87 141 88 142 89 143
|
||||
DEPOLARIZE2(0.003) 90 108 91 109 92 110 93 111 94 112 95 113 96 114 97 115 98 116 99 117 100 118 101 119 102 120 103 121 104 122 105 123 106 124 107 125 72 126 73 127 74 128 75 129 76 130 77 131 78 132 79 133 80 134 81 135 82 136 83 137 84 138 85 139 86 140 87 141 88 142 89 143
|
||||
DEPOLARIZE1(0.003) 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
||||
TICK
|
||||
CX 76 108 77 109 72 110 73 111 74 112 75 113 82 114 83 115 78 116 79 117 80 118 81 119 88 120 89 121 84 122 85 123 86 124 87 125 94 126 95 127 90 128 91 129 92 130 93 131 100 132 101 133 96 134 97 135 98 136 99 137 106 138 107 139 102 140 103 141 104 142 105 143 0 37 1 38 2 39 3 40 4 41 5 36 6 43 7 44 8 45 9 46 10 47 11 42 12 49 13 50 14 51 15 52 16 53 17 48 18 55 19 56 20 57 21 58 22 59 23 54 24 61 25 62 26 63 27 64 28 65 29 60 30 67 31 68 32 69 33 70 34 71 35 66
|
||||
DEPOLARIZE2(0.003) 76 108 77 109 72 110 73 111 74 112 75 113 82 114 83 115 78 116 79 117 80 118 81 119 88 120 89 121 84 122 85 123 86 124 87 125 94 126 95 127 90 128 91 129 92 130 93 131 100 132 101 133 96 134 97 135 98 136 99 137 106 138 107 139 102 140 103 141 104 142 105 143 0 37 1 38 2 39 3 40 4 41 5 36 6 43 7 44 8 45 9 46 10 47 11 42 12 49 13 50 14 51 15 52 16 53 17 48 18 55 19 56 20 57 21 58 22 59 23 54 24 61 25 62 26 63 27 64 28 65 29 60 30 67 31 68 32 69 33 70 34 71 35 66
|
||||
TICK
|
||||
CX 39 108 40 109 41 110 36 111 37 112 38 113 45 114 46 115 47 116 42 117 43 118 44 119 51 120 52 121 53 122 48 123 49 124 50 125 57 126 58 127 59 128 54 129 55 130 56 131 63 132 64 133 65 134 60 135 61 136 62 137 69 138 70 139 71 140 66 141 67 142 68 143 0 78 1 79 2 80 3 81 4 82 5 83 6 84 7 85 8 86 9 87 10 88 11 89 12 90 13 91 14 92 15 93 16 94 17 95 18 96 19 97 20 98 21 99 22 100 23 101 24 102 25 103 26 104 27 105 28 106 29 107 30 72 31 73 32 74 33 75 34 76 35 77
|
||||
DEPOLARIZE2(0.003) 39 108 40 109 41 110 36 111 37 112 38 113 45 114 46 115 47 116 42 117 43 118 44 119 51 120 52 121 53 122 48 123 49 124 50 125 57 126 58 127 59 128 54 129 55 130 56 131 63 132 64 133 65 134 60 135 61 136 62 137 69 138 70 139 71 140 66 141 67 142 68 143 0 78 1 79 2 80 3 81 4 82 5 83 6 84 7 85 8 86 9 87 10 88 11 89 12 90 13 91 14 92 15 93 16 94 17 95 18 96 19 97 20 98 21 99 22 100 23 101 24 102 25 103 26 104 27 105 28 106 29 107 30 72 31 73 32 74 33 75 34 76 35 77
|
||||
TICK
|
||||
CX 66 108 67 109 68 110 69 111 70 112 71 113 36 114 37 115 38 116 39 117 40 118 41 119 42 120 43 121 44 122 45 123 46 124 47 125 48 126 49 127 50 128 51 129 52 130 53 131 54 132 55 133 56 134 57 135 58 136 59 137 60 138 61 139 62 140 63 141 64 142 65 143 0 75 1 76 2 77 3 72 4 73 5 74 6 81 7 82 8 83 9 78 10 79 11 80 12 87 13 88 14 89 15 84 16 85 17 86 18 93 19 94 20 95 21 90 22 91 23 92 24 99 25 100 26 101 27 96 28 97 29 98 30 105 31 106 32 107 33 102 34 103 35 104
|
||||
DEPOLARIZE2(0.003) 66 108 67 109 68 110 69 111 70 112 71 113 36 114 37 115 38 116 39 117 40 118 41 119 42 120 43 121 44 122 45 123 46 124 47 125 48 126 49 127 50 128 51 129 52 130 53 131 54 132 55 133 56 134 57 135 58 136 59 137 60 138 61 139 62 140 63 141 64 142 65 143 0 75 1 76 2 77 3 72 4 73 5 74 6 81 7 82 8 83 9 78 10 79 11 80 12 87 13 88 14 89 15 84 16 85 17 86 18 93 19 94 20 95 21 90 22 91 23 92 24 99 25 100 26 101 27 96 28 97 29 98 30 105 31 106 32 107 33 102 34 103 35 104
|
||||
TICK
|
||||
CX 60 108 61 109 62 110 63 111 64 112 65 113 66 114 67 115 68 116 69 117 70 118 71 119 36 120 37 121 38 122 39 123 40 124 41 125 42 126 43 127 44 128 45 129 46 130 47 131 48 132 49 133 50 134 51 135 52 136 53 137 54 138 55 139 56 140 57 141 58 142 59 143 0 84 1 85 2 86 3 87 4 88 5 89 6 90 7 91 8 92 9 93 10 94 11 95 12 96 13 97 14 98 15 99 16 100 17 101 18 102 19 103 20 104 21 105 22 106 23 107 24 72 25 73 26 74 27 75 28 76 29 77 30 78 31 79 32 80 33 81 34 82 35 83
|
||||
DEPOLARIZE2(0.003) 60 108 61 109 62 110 63 111 64 112 65 113 66 114 67 115 68 116 69 117 70 118 71 119 36 120 37 121 38 122 39 123 40 124 41 125 42 126 43 127 44 128 45 129 46 130 47 131 48 132 49 133 50 134 51 135 52 136 53 137 54 138 55 139 56 140 57 141 58 142 59 143 0 84 1 85 2 86 3 87 4 88 5 89 6 90 7 91 8 92 9 93 10 94 11 95 12 96 13 97 14 98 15 99 16 100 17 101 18 102 19 103 20 104 21 105 22 106 23 107 24 72 25 73 26 74 27 75 28 76 29 77 30 78 31 79 32 80 33 81 34 82 35 83
|
||||
TICK
|
||||
CX 77 108 72 109 73 110 74 111 75 112 76 113 83 114 78 115 79 116 80 117 81 118 82 119 89 120 84 121 85 122 86 123 87 124 88 125 95 126 90 127 91 128 92 129 93 130 94 131 101 132 96 133 97 134 98 135 99 136 100 137 107 138 102 139 103 140 104 141 105 142 106 143 0 54 1 55 2 56 3 57 4 58 5 59 6 60 7 61 8 62 9 63 10 64 11 65 12 66 13 67 14 68 15 69 16 70 17 71 18 36 19 37 20 38 21 39 22 40 23 41 24 42 25 43 26 44 27 45 28 46 29 47 30 48 31 49 32 50 33 51 34 52 35 53
|
||||
DEPOLARIZE2(0.003) 77 108 72 109 73 110 74 111 75 112 76 113 83 114 78 115 79 116 80 117 81 118 82 119 89 120 84 121 85 122 86 123 87 124 88 125 95 126 90 127 91 128 92 129 93 130 94 131 101 132 96 133 97 134 98 135 99 136 100 137 107 138 102 139 103 140 104 141 105 142 106 143 0 54 1 55 2 56 3 57 4 58 5 59 6 60 7 61 8 62 9 63 10 64 11 65 12 66 13 67 14 68 15 69 16 70 17 71 18 36 19 37 20 38 21 39 22 40 23 41 24 42 25 43 26 44 27 45 28 46 29 47 30 48 31 49 32 50 33 51 34 52 35 53
|
||||
TICK
|
||||
M(0.003) 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
||||
CX 0 38 1 39 2 40 3 41 4 36 5 37 6 44 7 45 8 46 9 47 10 42 11 43 12 50 13 51 14 52 15 53 16 48 17 49 18 56 19 57 20 58 21 59 22 54 23 55 24 62 25 63 26 64 27 65 28 60 29 61 30 68 31 69 32 70 33 71 34 66 35 67
|
||||
DEPOLARIZE2(0.003) 0 38 1 39 2 40 3 41 4 36 5 37 6 44 7 45 8 46 9 47 10 42 11 43 12 50 13 51 14 52 15 53 16 48 17 49 18 56 19 57 20 58 21 59 22 54 23 55 24 62 25 63 26 64 27 65 28 60 29 61 30 68 31 69 32 70 33 71 34 66 35 67
|
||||
DEPOLARIZE1(0.003) 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
||||
TICK
|
||||
DEPOLARIZE1(0.003) 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
||||
MX(0.003) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
||||
R 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
||||
X_ERROR(0.003) 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
||||
TICK
|
||||
DETECTOR rec[-72] rec[-144]
|
||||
DETECTOR rec[-71] rec[-143]
|
||||
DETECTOR rec[-70] rec[-142]
|
||||
DETECTOR rec[-69] rec[-141]
|
||||
DETECTOR rec[-68] rec[-140]
|
||||
DETECTOR rec[-67] rec[-139]
|
||||
DETECTOR rec[-66] rec[-138]
|
||||
DETECTOR rec[-65] rec[-137]
|
||||
DETECTOR rec[-64] rec[-136]
|
||||
DETECTOR rec[-63] rec[-135]
|
||||
DETECTOR rec[-62] rec[-134]
|
||||
DETECTOR rec[-61] rec[-133]
|
||||
DETECTOR rec[-60] rec[-132]
|
||||
DETECTOR rec[-59] rec[-131]
|
||||
DETECTOR rec[-58] rec[-130]
|
||||
DETECTOR rec[-57] rec[-129]
|
||||
DETECTOR rec[-56] rec[-128]
|
||||
DETECTOR rec[-55] rec[-127]
|
||||
DETECTOR rec[-54] rec[-126]
|
||||
DETECTOR rec[-53] rec[-125]
|
||||
DETECTOR rec[-52] rec[-124]
|
||||
DETECTOR rec[-51] rec[-123]
|
||||
DETECTOR rec[-50] rec[-122]
|
||||
DETECTOR rec[-49] rec[-121]
|
||||
DETECTOR rec[-48] rec[-120]
|
||||
DETECTOR rec[-47] rec[-119]
|
||||
DETECTOR rec[-46] rec[-118]
|
||||
DETECTOR rec[-45] rec[-117]
|
||||
DETECTOR rec[-44] rec[-116]
|
||||
DETECTOR rec[-43] rec[-115]
|
||||
DETECTOR rec[-42] rec[-114]
|
||||
DETECTOR rec[-41] rec[-113]
|
||||
DETECTOR rec[-40] rec[-112]
|
||||
DETECTOR rec[-39] rec[-111]
|
||||
DETECTOR rec[-38] rec[-110]
|
||||
DETECTOR rec[-37] rec[-109]
|
||||
RX 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
||||
CX 90 108 91 109 92 110 93 111 94 112 95 113 96 114 97 115 98 116 99 117 100 118 101 119 102 120 103 121 104 122 105 123 106 124 107 125 72 126 73 127 74 128 75 129 76 130 77 131 78 132 79 133 80 134 81 135 82 136 83 137 84 138 85 139 86 140 87 141 88 142 89 143
|
||||
TICK
|
||||
CX 76 108 77 109 72 110 73 111 74 112 75 113 82 114 83 115 78 116 79 117 80 118 81 119 88 120 89 121 84 122 85 123 86 124 87 125 94 126 95 127 90 128 91 129 92 130 93 131 100 132 101 133 96 134 97 135 98 136 99 137 106 138 107 139 102 140 103 141 104 142 105 143 0 37 1 38 2 39 3 40 4 41 5 36 6 43 7 44 8 45 9 46 10 47 11 42 12 49 13 50 14 51 15 52 16 53 17 48 18 55 19 56 20 57 21 58 22 59 23 54 24 61 25 62 26 63 27 64 28 65 29 60 30 67 31 68 32 69 33 70 34 71 35 66
|
||||
TICK
|
||||
CX 39 108 40 109 41 110 36 111 37 112 38 113 45 114 46 115 47 116 42 117 43 118 44 119 51 120 52 121 53 122 48 123 49 124 50 125 57 126 58 127 59 128 54 129 55 130 56 131 63 132 64 133 65 134 60 135 61 136 62 137 69 138 70 139 71 140 66 141 67 142 68 143 0 78 1 79 2 80 3 81 4 82 5 83 6 84 7 85 8 86 9 87 10 88 11 89 12 90 13 91 14 92 15 93 16 94 17 95 18 96 19 97 20 98 21 99 22 100 23 101 24 102 25 103 26 104 27 105 28 106 29 107 30 72 31 73 32 74 33 75 34 76 35 77
|
||||
TICK
|
||||
CX 66 108 67 109 68 110 69 111 70 112 71 113 36 114 37 115 38 116 39 117 40 118 41 119 42 120 43 121 44 122 45 123 46 124 47 125 48 126 49 127 50 128 51 129 52 130 53 131 54 132 55 133 56 134 57 135 58 136 59 137 60 138 61 139 62 140 63 141 64 142 65 143 0 75 1 76 2 77 3 72 4 73 5 74 6 81 7 82 8 83 9 78 10 79 11 80 12 87 13 88 14 89 15 84 16 85 17 86 18 93 19 94 20 95 21 90 22 91 23 92 24 99 25 100 26 101 27 96 28 97 29 98 30 105 31 106 32 107 33 102 34 103 35 104
|
||||
TICK
|
||||
CX 60 108 61 109 62 110 63 111 64 112 65 113 66 114 67 115 68 116 69 117 70 118 71 119 36 120 37 121 38 122 39 123 40 124 41 125 42 126 43 127 44 128 45 129 46 130 47 131 48 132 49 133 50 134 51 135 52 136 53 137 54 138 55 139 56 140 57 141 58 142 59 143 0 84 1 85 2 86 3 87 4 88 5 89 6 90 7 91 8 92 9 93 10 94 11 95 12 96 13 97 14 98 15 99 16 100 17 101 18 102 19 103 20 104 21 105 22 106 23 107 24 72 25 73 26 74 27 75 28 76 29 77 30 78 31 79 32 80 33 81 34 82 35 83
|
||||
TICK
|
||||
CX 77 108 72 109 73 110 74 111 75 112 76 113 83 114 78 115 79 116 80 117 81 118 82 119 89 120 84 121 85 122 86 123 87 124 88 125 95 126 90 127 91 128 92 129 93 130 94 131 101 132 96 133 97 134 98 135 99 136 100 137 107 138 102 139 103 140 104 141 105 142 106 143 0 54 1 55 2 56 3 57 4 58 5 59 6 60 7 61 8 62 9 63 10 64 11 65 12 66 13 67 14 68 15 69 16 70 17 71 18 36 19 37 20 38 21 39 22 40 23 41 24 42 25 43 26 44 27 45 28 46 29 47 30 48 31 49 32 50 33 51 34 52 35 53
|
||||
TICK
|
||||
M 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
||||
CX 0 38 1 39 2 40 3 41 4 36 5 37 6 44 7 45 8 46 9 47 10 42 11 43 12 50 13 51 14 52 15 53 16 48 17 49 18 56 19 57 20 58 21 59 22 54 23 55 24 62 25 63 26 64 27 65 28 60 29 61 30 68 31 69 32 70 33 71 34 66 35 67
|
||||
TICK
|
||||
MX 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
||||
R 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
||||
TICK
|
||||
DETECTOR rec[-72] rec[-144]
|
||||
DETECTOR rec[-71] rec[-143]
|
||||
DETECTOR rec[-70] rec[-142]
|
||||
DETECTOR rec[-69] rec[-141]
|
||||
DETECTOR rec[-68] rec[-140]
|
||||
DETECTOR rec[-67] rec[-139]
|
||||
DETECTOR rec[-66] rec[-138]
|
||||
DETECTOR rec[-65] rec[-137]
|
||||
DETECTOR rec[-64] rec[-136]
|
||||
DETECTOR rec[-63] rec[-135]
|
||||
DETECTOR rec[-62] rec[-134]
|
||||
DETECTOR rec[-61] rec[-133]
|
||||
DETECTOR rec[-60] rec[-132]
|
||||
DETECTOR rec[-59] rec[-131]
|
||||
DETECTOR rec[-58] rec[-130]
|
||||
DETECTOR rec[-57] rec[-129]
|
||||
DETECTOR rec[-56] rec[-128]
|
||||
DETECTOR rec[-55] rec[-127]
|
||||
DETECTOR rec[-54] rec[-126]
|
||||
DETECTOR rec[-53] rec[-125]
|
||||
DETECTOR rec[-52] rec[-124]
|
||||
DETECTOR rec[-51] rec[-123]
|
||||
DETECTOR rec[-50] rec[-122]
|
||||
DETECTOR rec[-49] rec[-121]
|
||||
DETECTOR rec[-48] rec[-120]
|
||||
DETECTOR rec[-47] rec[-119]
|
||||
DETECTOR rec[-46] rec[-118]
|
||||
DETECTOR rec[-45] rec[-117]
|
||||
DETECTOR rec[-44] rec[-116]
|
||||
DETECTOR rec[-43] rec[-115]
|
||||
DETECTOR rec[-42] rec[-114]
|
||||
DETECTOR rec[-41] rec[-113]
|
||||
DETECTOR rec[-40] rec[-112]
|
||||
DETECTOR rec[-39] rec[-111]
|
||||
DETECTOR rec[-38] rec[-110]
|
||||
DETECTOR rec[-37] rec[-109]
|
||||
RX 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
||||
CX 90 108 91 109 92 110 93 111 94 112 95 113 96 114 97 115 98 116 99 117 100 118 101 119 102 120 103 121 104 122 105 123 106 124 107 125 72 126 73 127 74 128 75 129 76 130 77 131 78 132 79 133 80 134 81 135 82 136 83 137 84 138 85 139 86 140 87 141 88 142 89 143
|
||||
TICK
|
||||
CX 76 108 77 109 72 110 73 111 74 112 75 113 82 114 83 115 78 116 79 117 80 118 81 119 88 120 89 121 84 122 85 123 86 124 87 125 94 126 95 127 90 128 91 129 92 130 93 131 100 132 101 133 96 134 97 135 98 136 99 137 106 138 107 139 102 140 103 141 104 142 105 143 0 37 1 38 2 39 3 40 4 41 5 36 6 43 7 44 8 45 9 46 10 47 11 42 12 49 13 50 14 51 15 52 16 53 17 48 18 55 19 56 20 57 21 58 22 59 23 54 24 61 25 62 26 63 27 64 28 65 29 60 30 67 31 68 32 69 33 70 34 71 35 66
|
||||
TICK
|
||||
CX 39 108 40 109 41 110 36 111 37 112 38 113 45 114 46 115 47 116 42 117 43 118 44 119 51 120 52 121 53 122 48 123 49 124 50 125 57 126 58 127 59 128 54 129 55 130 56 131 63 132 64 133 65 134 60 135 61 136 62 137 69 138 70 139 71 140 66 141 67 142 68 143 0 78 1 79 2 80 3 81 4 82 5 83 6 84 7 85 8 86 9 87 10 88 11 89 12 90 13 91 14 92 15 93 16 94 17 95 18 96 19 97 20 98 21 99 22 100 23 101 24 102 25 103 26 104 27 105 28 106 29 107 30 72 31 73 32 74 33 75 34 76 35 77
|
||||
TICK
|
||||
CX 66 108 67 109 68 110 69 111 70 112 71 113 36 114 37 115 38 116 39 117 40 118 41 119 42 120 43 121 44 122 45 123 46 124 47 125 48 126 49 127 50 128 51 129 52 130 53 131 54 132 55 133 56 134 57 135 58 136 59 137 60 138 61 139 62 140 63 141 64 142 65 143 0 75 1 76 2 77 3 72 4 73 5 74 6 81 7 82 8 83 9 78 10 79 11 80 12 87 13 88 14 89 15 84 16 85 17 86 18 93 19 94 20 95 21 90 22 91 23 92 24 99 25 100 26 101 27 96 28 97 29 98 30 105 31 106 32 107 33 102 34 103 35 104
|
||||
TICK
|
||||
CX 60 108 61 109 62 110 63 111 64 112 65 113 66 114 67 115 68 116 69 117 70 118 71 119 36 120 37 121 38 122 39 123 40 124 41 125 42 126 43 127 44 128 45 129 46 130 47 131 48 132 49 133 50 134 51 135 52 136 53 137 54 138 55 139 56 140 57 141 58 142 59 143 0 84 1 85 2 86 3 87 4 88 5 89 6 90 7 91 8 92 9 93 10 94 11 95 12 96 13 97 14 98 15 99 16 100 17 101 18 102 19 103 20 104 21 105 22 106 23 107 24 72 25 73 26 74 27 75 28 76 29 77 30 78 31 79 32 80 33 81 34 82 35 83
|
||||
TICK
|
||||
CX 77 108 72 109 73 110 74 111 75 112 76 113 83 114 78 115 79 116 80 117 81 118 82 119 89 120 84 121 85 122 86 123 87 124 88 125 95 126 90 127 91 128 92 129 93 130 94 131 101 132 96 133 97 134 98 135 99 136 100 137 107 138 102 139 103 140 104 141 105 142 106 143 0 54 1 55 2 56 3 57 4 58 5 59 6 60 7 61 8 62 9 63 10 64 11 65 12 66 13 67 14 68 15 69 16 70 17 71 18 36 19 37 20 38 21 39 22 40 23 41 24 42 25 43 26 44 27 45 28 46 29 47 30 48 31 49 32 50 33 51 34 52 35 53
|
||||
TICK
|
||||
M 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
||||
CX 0 38 1 39 2 40 3 41 4 36 5 37 6 44 7 45 8 46 9 47 10 42 11 43 12 50 13 51 14 52 15 53 16 48 17 49 18 56 19 57 20 58 21 59 22 54 23 55 24 62 25 63 26 64 27 65 28 60 29 61 30 68 31 69 32 70 33 71 34 66 35 67
|
||||
TICK
|
||||
MX 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
||||
R 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
||||
TICK
|
||||
DETECTOR rec[-72] rec[-144]
|
||||
DETECTOR rec[-71] rec[-143]
|
||||
DETECTOR rec[-70] rec[-142]
|
||||
DETECTOR rec[-69] rec[-141]
|
||||
DETECTOR rec[-68] rec[-140]
|
||||
DETECTOR rec[-67] rec[-139]
|
||||
DETECTOR rec[-66] rec[-138]
|
||||
DETECTOR rec[-65] rec[-137]
|
||||
DETECTOR rec[-64] rec[-136]
|
||||
DETECTOR rec[-63] rec[-135]
|
||||
DETECTOR rec[-62] rec[-134]
|
||||
DETECTOR rec[-61] rec[-133]
|
||||
DETECTOR rec[-60] rec[-132]
|
||||
DETECTOR rec[-59] rec[-131]
|
||||
DETECTOR rec[-58] rec[-130]
|
||||
DETECTOR rec[-57] rec[-129]
|
||||
DETECTOR rec[-56] rec[-128]
|
||||
DETECTOR rec[-55] rec[-127]
|
||||
DETECTOR rec[-54] rec[-126]
|
||||
DETECTOR rec[-53] rec[-125]
|
||||
DETECTOR rec[-52] rec[-124]
|
||||
DETECTOR rec[-51] rec[-123]
|
||||
DETECTOR rec[-50] rec[-122]
|
||||
DETECTOR rec[-49] rec[-121]
|
||||
DETECTOR rec[-48] rec[-120]
|
||||
DETECTOR rec[-47] rec[-119]
|
||||
DETECTOR rec[-46] rec[-118]
|
||||
DETECTOR rec[-45] rec[-117]
|
||||
DETECTOR rec[-44] rec[-116]
|
||||
DETECTOR rec[-43] rec[-115]
|
||||
DETECTOR rec[-42] rec[-114]
|
||||
DETECTOR rec[-41] rec[-113]
|
||||
DETECTOR rec[-40] rec[-112]
|
||||
DETECTOR rec[-39] rec[-111]
|
||||
DETECTOR rec[-38] rec[-110]
|
||||
DETECTOR rec[-37] rec[-109]
|
||||
M 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
||||
OBSERVABLE_INCLUDE(0) rec[-72] rec[-71] rec[-68] rec[-67] rec[-54] rec[-52]
|
||||
OBSERVABLE_INCLUDE(1) rec[-72] rec[-71] rec[-70] rec[-67] rec[-53] rec[-51]
|
||||
OBSERVABLE_INCLUDE(2) rec[-70] rec[-69] rec[-68] rec[-67] rec[-54] rec[-50]
|
||||
OBSERVABLE_INCLUDE(3) rec[-72] rec[-69] rec[-68] rec[-67] rec[-53] rec[-49]
|
||||
OBSERVABLE_INCLUDE(4) rec[-66] rec[-65] rec[-62] rec[-61] rec[-48] rec[-46]
|
||||
OBSERVABLE_INCLUDE(5) rec[-66] rec[-65] rec[-64] rec[-61] rec[-47] rec[-45]
|
||||
OBSERVABLE_INCLUDE(6) rec[-72] rec[-68] rec[-65] rec[-64] rec[-61] rec[-54] rec[-53] rec[-47] rec[-36] rec[-35] rec[-34] rec[-30] rec[-29] rec[-28]
|
||||
OBSERVABLE_INCLUDE(7) rec[-63] rec[-62] rec[-48] rec[-47] rec[-36] rec[-33] rec[-30] rec[-27]
|
||||
OBSERVABLE_INCLUDE(8) rec[-72] rec[-67] rec[-64] rec[-61] rec[-60] rec[-59] rec[-58] rec[-55] rec[-53] rec[-47] rec[-41] rec[-36] rec[-34] rec[-30] rec[-29] rec[-24]
|
||||
OBSERVABLE_INCLUDE(9) rec[-72] rec[-67] rec[-64] rec[-63] rec[-62] rec[-58] rec[-57] rec[-56] rec[-55] rec[-53] rec[-48] rec[-47] rec[-42] rec[-36] rec[-34] rec[-33] rec[-30] rec[-23]
|
||||
OBSERVABLE_INCLUDE(10) rec[-72] rec[-68] rec[-66] rec[-65] rec[-64] rec[-63] rec[-60] rec[-58] rec[-57] rec[-56] rec[-55] rec[-54] rec[-53] rec[-42] rec[-36] rec[-35] rec[-34] rec[-33] rec[-29] rec[-22]
|
||||
OBSERVABLE_INCLUDE(11) rec[-72] rec[-67] rec[-64] rec[-63] rec[-62] rec[-61] rec[-60] rec[-59] rec[-58] rec[-57] rec[-56] rec[-55] rec[-53] rec[-48] rec[-42] rec[-34] rec[-33] rec[-30] rec[-29] rec[-21]
|
||||
|
|
@ -0,0 +1,89 @@
|
|||
QUBIT_COORDS(1, 1) 1
|
||||
QUBIT_COORDS(2, 0) 2
|
||||
QUBIT_COORDS(3, 1) 3
|
||||
QUBIT_COORDS(5, 1) 5
|
||||
QUBIT_COORDS(1, 3) 8
|
||||
QUBIT_COORDS(2, 2) 9
|
||||
QUBIT_COORDS(3, 3) 10
|
||||
QUBIT_COORDS(4, 2) 11
|
||||
QUBIT_COORDS(5, 3) 12
|
||||
QUBIT_COORDS(6, 2) 13
|
||||
QUBIT_COORDS(0, 4) 14
|
||||
QUBIT_COORDS(1, 5) 15
|
||||
QUBIT_COORDS(2, 4) 16
|
||||
QUBIT_COORDS(3, 5) 17
|
||||
QUBIT_COORDS(4, 4) 18
|
||||
QUBIT_COORDS(5, 5) 19
|
||||
QUBIT_COORDS(4, 6) 25
|
||||
R 1 3 5 8 10 12 15 17 19
|
||||
X_ERROR(0.001) 1 3 5 8 10 12 15 17 19
|
||||
R 2 9 11 13 14 16 18 25
|
||||
X_ERROR(0.001) 2 9 11 13 14 16 18 25
|
||||
TICK
|
||||
DEPOLARIZE1(0.001) 1 3 5 8 10 12 15 17 19
|
||||
H 2 11 16 25
|
||||
DEPOLARIZE1(0.001) 2 11 16 25
|
||||
TICK
|
||||
CX 2 3 16 17 11 12 15 14 10 9 19 18
|
||||
DEPOLARIZE2(0.001) 2 3 16 17 11 12 15 14 10 9 19 18
|
||||
TICK
|
||||
CX 2 1 16 15 11 10 8 14 3 9 12 18
|
||||
DEPOLARIZE2(0.001) 2 1 16 15 11 10 8 14 3 9 12 18
|
||||
TICK
|
||||
CX 16 10 11 5 25 19 8 9 17 18 12 13
|
||||
DEPOLARIZE2(0.001) 16 10 11 5 25 19 8 9 17 18 12 13
|
||||
TICK
|
||||
CX 16 8 11 3 25 17 1 9 10 18 5 13
|
||||
DEPOLARIZE2(0.001) 16 8 11 3 25 17 1 9 10 18 5 13
|
||||
TICK
|
||||
H 2 11 16 25
|
||||
DEPOLARIZE1(0.001) 2 11 16 25
|
||||
TICK
|
||||
X_ERROR(0.001) 2 9 11 13 14 16 18 25
|
||||
MR 2 9 11 13 14 16 18 25
|
||||
X_ERROR(0.001) 2 9 11 13 14 16 18 25
|
||||
DETECTOR(0, 4, 0) rec[-4]
|
||||
DETECTOR(2, 2, 0) rec[-7]
|
||||
DETECTOR(4, 4, 0) rec[-2]
|
||||
DETECTOR(6, 2, 0) rec[-5]
|
||||
REPEAT 2 {
|
||||
TICK
|
||||
DEPOLARIZE1(0.001) 1 3 5 8 10 12 15 17 19
|
||||
H 2 11 16 25
|
||||
DEPOLARIZE1(0.001) 2 11 16 25
|
||||
TICK
|
||||
CX 2 3 16 17 11 12 15 14 10 9 19 18
|
||||
DEPOLARIZE2(0.001) 2 3 16 17 11 12 15 14 10 9 19 18
|
||||
TICK
|
||||
CX 2 1 16 15 11 10 8 14 3 9 12 18
|
||||
DEPOLARIZE2(0.001) 2 1 16 15 11 10 8 14 3 9 12 18
|
||||
TICK
|
||||
CX 16 10 11 5 25 19 8 9 17 18 12 13
|
||||
DEPOLARIZE2(0.001) 16 10 11 5 25 19 8 9 17 18 12 13
|
||||
TICK
|
||||
CX 16 8 11 3 25 17 1 9 10 18 5 13
|
||||
DEPOLARIZE2(0.001) 16 8 11 3 25 17 1 9 10 18 5 13
|
||||
TICK
|
||||
H 2 11 16 25
|
||||
DEPOLARIZE1(0.001) 2 11 16 25
|
||||
TICK
|
||||
X_ERROR(0.001) 2 9 11 13 14 16 18 25
|
||||
MR 2 9 11 13 14 16 18 25
|
||||
X_ERROR(0.001) 2 9 11 13 14 16 18 25
|
||||
SHIFT_COORDS(0, 0, 1)
|
||||
DETECTOR(2, 0, 0) rec[-8] rec[-16]
|
||||
DETECTOR(2, 2, 0) rec[-7] rec[-15]
|
||||
DETECTOR(4, 2, 0) rec[-6] rec[-14]
|
||||
DETECTOR(6, 2, 0) rec[-5] rec[-13]
|
||||
DETECTOR(0, 4, 0) rec[-4] rec[-12]
|
||||
DETECTOR(2, 4, 0) rec[-3] rec[-11]
|
||||
DETECTOR(4, 4, 0) rec[-2] rec[-10]
|
||||
DETECTOR(4, 6, 0) rec[-1] rec[-9]
|
||||
}
|
||||
X_ERROR(0.001) 1 3 5 8 10 12 15 17 19
|
||||
M 1 3 5 8 10 12 15 17 19
|
||||
DETECTOR(0, 4, 1) rec[-3] rec[-6] rec[-13]
|
||||
DETECTOR(2, 2, 1) rec[-5] rec[-6] rec[-8] rec[-9] rec[-16]
|
||||
DETECTOR(4, 4, 1) rec[-1] rec[-2] rec[-4] rec[-5] rec[-11]
|
||||
DETECTOR(6, 2, 1) rec[-4] rec[-7] rec[-14]
|
||||
OBSERVABLE_INCLUDE(0) rec[-7] rec[-8] rec[-9]
|
||||
|
|
@ -0,0 +1,103 @@
|
|||
QUBIT_COORDS(1, 1) 1
|
||||
QUBIT_COORDS(2, 0) 2
|
||||
QUBIT_COORDS(3, 1) 3
|
||||
QUBIT_COORDS(5, 1) 5
|
||||
QUBIT_COORDS(6, 0) 6
|
||||
QUBIT_COORDS(7, 1) 7
|
||||
QUBIT_COORDS(9, 1) 9
|
||||
QUBIT_COORDS(1, 3) 12
|
||||
QUBIT_COORDS(2, 2) 13
|
||||
QUBIT_COORDS(3, 3) 14
|
||||
QUBIT_COORDS(4, 2) 15
|
||||
QUBIT_COORDS(5, 3) 16
|
||||
QUBIT_COORDS(6, 2) 17
|
||||
QUBIT_COORDS(7, 3) 18
|
||||
QUBIT_COORDS(8, 2) 19
|
||||
QUBIT_COORDS(9, 3) 20
|
||||
QUBIT_COORDS(10, 2) 21
|
||||
QUBIT_COORDS(0, 4) 22
|
||||
QUBIT_COORDS(1, 5) 23
|
||||
QUBIT_COORDS(2, 4) 24
|
||||
QUBIT_COORDS(3, 5) 25
|
||||
QUBIT_COORDS(4, 4) 26
|
||||
QUBIT_COORDS(5, 5) 27
|
||||
QUBIT_COORDS(6, 4) 28
|
||||
QUBIT_COORDS(7, 5) 29
|
||||
QUBIT_COORDS(8, 4) 30
|
||||
QUBIT_COORDS(9, 5) 31
|
||||
QUBIT_COORDS(1, 7) 34
|
||||
QUBIT_COORDS(2, 6) 35
|
||||
QUBIT_COORDS(3, 7) 36
|
||||
QUBIT_COORDS(4, 6) 37
|
||||
QUBIT_COORDS(5, 7) 38
|
||||
QUBIT_COORDS(6, 6) 39
|
||||
QUBIT_COORDS(7, 7) 40
|
||||
QUBIT_COORDS(8, 6) 41
|
||||
QUBIT_COORDS(9, 7) 42
|
||||
QUBIT_COORDS(10, 6) 43
|
||||
QUBIT_COORDS(0, 8) 44
|
||||
QUBIT_COORDS(1, 9) 45
|
||||
QUBIT_COORDS(2, 8) 46
|
||||
QUBIT_COORDS(3, 9) 47
|
||||
QUBIT_COORDS(4, 8) 48
|
||||
QUBIT_COORDS(5, 9) 49
|
||||
QUBIT_COORDS(6, 8) 50
|
||||
QUBIT_COORDS(7, 9) 51
|
||||
QUBIT_COORDS(8, 8) 52
|
||||
QUBIT_COORDS(9, 9) 53
|
||||
QUBIT_COORDS(4, 10) 59
|
||||
QUBIT_COORDS(8, 10) 63
|
||||
R 1 3 5 7 9 12 14 16 18 20 23 25 27 29 31 34 36 38 40 42 45 47 49 51 53
|
||||
X_ERROR(0.002) 1 3 5 7 9 12 14 16 18 20 23 25 27 29 31 34 36 38 40 42 45 47 49 51 53
|
||||
R 2 6 13 15 17 19 21 22 24 26 28 30 35 37 39 41 43 44 46 48 50 52 59 63
|
||||
X_ERROR(0.002) 2 6 13 15 17 19 21 22 24 26 28 30 35 37 39 41 43 44 46 48 50 52 59 63
|
||||
TICK
|
||||
DEPOLARIZE1(0.002) 1 3 5 7 9 12 14 16 18 20 23 25 27 29 31 34 36 38 40 42 45 47 49 51 53
|
||||
H 2 6 15 19 24 28 37 41 46 50 59 63
|
||||
DEPOLARIZE1(0.002) 2 6 15 19 24 28 37 41 46 50 59 63
|
||||
TICK
|
||||
CX 2 3 24 25 46 47 15 16 37 38 6 7 28 29 50 51 19 20 41 42 23 22 45 44 14 13 36 35 27 26 49 48 18 17 40 39 31 30 53 52
|
||||
DEPOLARIZE2(0.002) 2 3 24 25 46 47 15 16 37 38 6 7 28 29 50 51 19 20 41 42 23 22 45 44 14 13 36 35 27 26 49 48 18 17 40 39 31 30 53 52
|
||||
TICK
|
||||
CX 2 1 24 23 46 45 15 14 37 36 6 5 28 27 50 49 19 18 41 40 12 22 34 44 3 13 25 35 16 26 38 48 7 17 29 39 20 30 42 52
|
||||
DEPOLARIZE2(0.002) 2 1 24 23 46 45 15 14 37 36 6 5 28 27 50 49 19 18 41 40 12 22 34 44 3 13 25 35 16 26 38 48 7 17 29 39 20 30 42 52
|
||||
TICK
|
||||
CX 24 14 46 36 15 5 37 27 59 49 28 18 50 40 19 9 41 31 63 53 12 13 34 35 25 26 47 48 16 17 38 39 29 30 51 52 20 21 42 43
|
||||
DEPOLARIZE2(0.002) 24 14 46 36 15 5 37 27 59 49 28 18 50 40 19 9 41 31 63 53 12 13 34 35 25 26 47 48 16 17 38 39 29 30 51 52 20 21 42 43
|
||||
TICK
|
||||
CX 24 12 46 34 15 3 37 25 59 47 28 16 50 38 19 7 41 29 63 51 1 13 23 35 14 26 36 48 5 17 27 39 18 30 40 52 9 21 31 43
|
||||
DEPOLARIZE2(0.002) 24 12 46 34 15 3 37 25 59 47 28 16 50 38 19 7 41 29 63 51 1 13 23 35 14 26 36 48 5 17 27 39 18 30 40 52 9 21 31 43
|
||||
TICK
|
||||
H 2 6 15 19 24 28 37 41 46 50 59 63
|
||||
DEPOLARIZE1(0.002) 2 6 15 19 24 28 37 41 46 50 59 63
|
||||
TICK
|
||||
X_ERROR(0.002) 2 6 13 15 17 19 21 22 24 26 28 30 35 37 39 41 43 44 46 48 50 52 59 63
|
||||
MR 2 6 13 15 17 19 21 22 24 26 28 30 35 37 39 41 43 44 46 48 50 52 59 63
|
||||
X_ERROR(0.002) 2 6 13 15 17 19 21 22 24 26 28 30 35 37 39 41 43 44 46 48 50 52 59 63
|
||||
DETECTOR(0, 4, 0) rec[-17]
|
||||
DETECTOR(0, 8, 0) rec[-7]
|
||||
DETECTOR(2, 2, 0) rec[-22]
|
||||
DETECTOR(2, 6, 0) rec[-12]
|
||||
DETECTOR(4, 4, 0) rec[-15]
|
||||
DETECTOR(4, 8, 0) rec[-5]
|
||||
DETECTOR(6, 2, 0) rec[-20]
|
||||
DETECTOR(6, 6, 0) rec[-10]
|
||||
DETECTOR(8, 4, 0) rec[-13]
|
||||
DETECTOR(8, 8, 0) rec[-3]
|
||||
DETECTOR(10, 2, 0) rec[-18]
|
||||
DETECTOR(10, 6, 0) rec[-8]
|
||||
X_ERROR(0.002) 1 3 5 7 9 12 14 16 18 20 23 25 27 29 31 34 36 38 40 42 45 47 49 51 53
|
||||
M 1 3 5 7 9 12 14 16 18 20 23 25 27 29 31 34 36 38 40 42 45 47 49 51 53
|
||||
DETECTOR(0, 4, 1) rec[-15] rec[-20] rec[-42]
|
||||
DETECTOR(0, 8, 1) rec[-5] rec[-10] rec[-32]
|
||||
DETECTOR(2, 2, 1) rec[-19] rec[-20] rec[-24] rec[-25] rec[-47]
|
||||
DETECTOR(2, 6, 1) rec[-9] rec[-10] rec[-14] rec[-15] rec[-37]
|
||||
DETECTOR(4, 4, 1) rec[-13] rec[-14] rec[-18] rec[-19] rec[-40]
|
||||
DETECTOR(4, 8, 1) rec[-3] rec[-4] rec[-8] rec[-9] rec[-30]
|
||||
DETECTOR(6, 2, 1) rec[-17] rec[-18] rec[-22] rec[-23] rec[-45]
|
||||
DETECTOR(6, 6, 1) rec[-7] rec[-8] rec[-12] rec[-13] rec[-35]
|
||||
DETECTOR(8, 4, 1) rec[-11] rec[-12] rec[-16] rec[-17] rec[-38]
|
||||
DETECTOR(8, 8, 1) rec[-1] rec[-2] rec[-6] rec[-7] rec[-28]
|
||||
DETECTOR(10, 2, 1) rec[-16] rec[-21] rec[-43]
|
||||
DETECTOR(10, 6, 1) rec[-6] rec[-11] rec[-33]
|
||||
OBSERVABLE_INCLUDE(0) rec[-21] rec[-22] rec[-23] rec[-24] rec[-25]
|
||||
22
wai/quantum-conformance/qec-text/circuits/tagged.circuit
Normal file
22
wai/quantum-conformance/qec-text/circuits/tagged.circuit
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
QUBIT_COORDS(0, 0) 0
|
||||
QUBIT_COORDS(1, 0) 1
|
||||
QUBIT_COORDS(2, 0) 2
|
||||
R 0 1 2
|
||||
H[prep] 0
|
||||
CX[slow] 0 1 0 2
|
||||
X_ERROR[leak](0.01) 1
|
||||
Z_ERROR(0.02) 0
|
||||
OBSERVABLE_INCLUDE(1) X0 X1 X2
|
||||
REPEAT[cycle] 2 {
|
||||
TICK
|
||||
DEPOLARIZE2[pair](0.001) 0 1
|
||||
CX 0 2
|
||||
MR(0.005) 2
|
||||
DETECTOR(2, 0, 0) rec[-1]
|
||||
SHIFT_COORDS(0, 0, 1)
|
||||
CX 0 2
|
||||
}
|
||||
X_ERROR(0.03) 2
|
||||
M !0 1
|
||||
DETECTOR(0, 1) rec[-1] rec[-2]
|
||||
OBSERVABLE_INCLUDE(0) rec[-1] Z2
|
||||
433
wai/quantum-conformance/qec-text/models/bb72_x_c1.dem
Normal file
433
wai/quantum-conformance/qec-text/models/bb72_x_c1.dem
Normal file
|
|
@ -0,0 +1,433 @@
|
|||
detector D107
|
||||
error(0.0027974384619484597) D1 D37 ^ D0 D20 D37 L7 L8 L9 L10
|
||||
error(0.0027974384619484597) D0 D36 ^ D5 D19 D36 L6 L8 L11
|
||||
error(0.003990405122050568) D6 D42 ^ D0 D15 D42
|
||||
error(0.0016000000000002412) D15 D35 D52 L2 L11 ^ D0 D6 D20 D26 D52 L2 L11
|
||||
error(0.0016000000000002412) D15 D31 D68 ^ D0 D6 D22 D28 D68
|
||||
error(0.0016000000000002412) D6 D26 D43 L2 L7 L8 L9 L10 L11 ^ D0 D20 D43 D52 L7 L8 L9 L10
|
||||
error(0.0016000000000002412) D6 D28 D65 L0 ^ D0 D22 D65 D68 L0
|
||||
error(0.0016000000000002412) D0 D22 D59 L0 ^ D7 D13 D27 D33 D59 L0 L6 L7 L8 L9 L10
|
||||
error(0.0016000000000002412) D9 D29 D46 L7 L11 ^ D0 D14 D20 D30 D46 L7 L8 L10 L11
|
||||
error(0.0016000000000002412) D9 D25 D62 L3 ^ D0 D16 D22 D30 D62 L3 L8 L10
|
||||
error(0.003990405122050568) D0 D36 ^ D9 D30 D36 L8 L10
|
||||
error(0.0016000000000002412) D0 D20 D37 L7 L8 L9 L10 ^ D11 D17 D27 D33 D37 L6
|
||||
error(0.0016000000000002412) D0 D20 D37 L7 L8 L9 L10 ^ D14 D30 D37 D46 L9 L11
|
||||
error(0.0016000000000002412) D15 D51 ^ D0 D42 D51
|
||||
error(0.0016000000000002412) D0 D22 D59 L0 ^ D16 D30 D59 D62 L0 L3 L8 L10
|
||||
error(0.003990405122050568) D20 D56 ^ D0 D37 D56 L7 L8 L9 L10
|
||||
error(0.0016000000000002412) D0 D20 D37 L7 L8 L9 L10 ^ D37 D43 D52
|
||||
error(0.0027974384619484597) D23 D59 ^ D0 D22 D59 L0
|
||||
error(0.003990405122050568) D0 D36 ^ D22 D36 D59 L0
|
||||
error(0.0016000000000002412) D0 D22 D59 L0 ^ D59 D65 D68
|
||||
error(0.003990405122050568) D33 D69 ^ D0 D27 D69 L6 L7 L8 L9 L10
|
||||
error(0.0016000000000002412) D0 D36 ^ D27 D36 D69 L6 L7 L8 L9 L10
|
||||
error(0.010709412755022537) D0 D36
|
||||
error(0.0016000000000002412) D0 D36 ^ D36 D37 D56 L7 L8 L9 L10
|
||||
error(0.0016000000000002412) D0 D36 ^ D36 D42 D51
|
||||
error(0.0027974384619484597) D2 D38 ^ D1 D21 D38 L0 L4 L6 L7
|
||||
error(0.0016000000000002412) D1 D21 D38 L0 L4 L6 L7 ^ D6 D12 D28 D34 D38 L0 L4 L7
|
||||
error(0.003990405122050568) D7 D43 ^ D1 D16 D43
|
||||
error(0.0016000000000002412) D16 D30 D53 L0 L3 L8 L10 ^ D1 D7 D21 D27 D53 L0 L3 L8 L10
|
||||
error(0.0016000000000002412) D16 D32 D69 ^ D1 D7 D23 D29 D69
|
||||
error(0.0016000000000002412) D7 D27 D44 L3 L4 L6 L7 L8 L10 ^ D1 D21 D44 D53 L0 L4 L6 L7
|
||||
error(0.0016000000000002412) D7 D29 D60 L1 ^ D1 D23 D60 D69 L1
|
||||
error(0.0016000000000002412) D1 D23 D54 L1 ^ D8 D14 D28 D34 D54 L1 L6
|
||||
error(0.0016000000000002412) D10 D24 D47 L0 L4 L6 L7 L8 L9 L11 ^ D1 D15 D21 D31 D47 L0 L4 L6 L7 L8
|
||||
error(0.0016000000000002412) D10 D26 D63 ^ D1 D17 D23 D31 D63 L9 L11
|
||||
error(0.003990405122050568) D1 D37 ^ D10 D31 D37 L9 L11
|
||||
error(0.0016000000000002412) D1 D21 D38 L0 L4 L6 L7 ^ D15 D31 D38 D47 L8
|
||||
error(0.0016000000000002412) D16 D52 ^ D1 D43 D52
|
||||
error(0.0016000000000002412) D1 D23 D54 L1 ^ D17 D31 D54 D63 L1 L9 L11
|
||||
error(0.0027974384619484597) D18 D54 ^ D1 D23 D54 L1
|
||||
error(0.003990405122050568) D21 D57 ^ D1 D38 D57 L0 L4 L6 L7
|
||||
error(0.0016000000000002412) D1 D21 D38 L0 L4 L6 L7 ^ D38 D44 D53
|
||||
error(0.003990405122050568) D1 D37 ^ D23 D37 D54 L1
|
||||
error(0.0016000000000002412) D1 D23 D54 L1 ^ D54 D60 D69
|
||||
error(0.003990405122050568) D34 D70 ^ D1 D28 D70 L6
|
||||
error(0.0016000000000002412) D1 D37 ^ D28 D37 D70 L6
|
||||
error(0.010709412755022537) D1 D37
|
||||
error(0.0016000000000002412) D1 D37 ^ D37 D38 D57 L0 L4 L6 L7
|
||||
error(0.0016000000000002412) D1 D37 ^ D37 D43 D52
|
||||
error(0.0027974384619484597) D3 D39 ^ D2 D22 D39 L1 L5 L6 L9 L10 L11
|
||||
error(0.0016000000000002412) D2 D22 D39 L1 L5 L6 L9 L10 L11 ^ D7 D13 D29 D35 D39 L1 L5 L6 L7 L9 L10 L11
|
||||
error(0.003990405122050568) D8 D44 ^ D2 D17 D44
|
||||
error(0.0016000000000002412) D17 D33 D70 ^ D2 D8 D18 D24 D70
|
||||
error(0.0016000000000002412) D17 D31 D48 L1 L9 L11 ^ D2 D8 D22 D28 D48 L1 L9 L11
|
||||
error(0.0016000000000002412) D8 D24 D61 L2 ^ D2 D18 D61 D70 L2
|
||||
error(0.0016000000000002412) D8 D28 D45 L5 L6 L10 ^ D2 D22 D45 D48 L1 L5 L6 L9 L10 L11
|
||||
error(0.0016000000000002412) D2 D18 D55 L2 ^ D9 D15 D29 D35 D55 L2 L7
|
||||
error(0.0016000000000002412) D11 D27 D64 ^ D2 D12 D18 D32 D64 L8
|
||||
error(0.0016000000000002412) D11 D25 D42 L1 L5 L6 L8 L10 L11 ^ D2 D16 D22 D32 D42 L1 L5 L6 L10 L11
|
||||
error(0.003990405122050568) D2 D38 ^ D11 D32 D38 L8
|
||||
error(0.0016000000000002412) D2 D18 D55 L2 ^ D12 D32 D55 D64 L2 L8
|
||||
error(0.0016000000000002412) D2 D22 D39 L1 L5 L6 L9 L10 L11 ^ D16 D32 D39 D42 L9
|
||||
error(0.0016000000000002412) D17 D53 ^ D2 D44 D53
|
||||
error(0.0027974384619484597) D19 D55 ^ D2 D18 D55 L2
|
||||
error(0.003990405122050568) D2 D38 ^ D18 D38 D55 L2
|
||||
error(0.0016000000000002412) D2 D18 D55 L2 ^ D55 D61 D70
|
||||
error(0.003990405122050568) D22 D58 ^ D2 D39 D58 L1 L5 L6 L9 L10 L11
|
||||
error(0.0016000000000002412) D2 D22 D39 L1 L5 L6 L9 L10 L11 ^ D39 D45 D48
|
||||
error(0.003990405122050568) D35 D71 ^ D2 D29 D71 L7
|
||||
error(0.0016000000000002412) D2 D38 ^ D29 D38 D71 L7
|
||||
error(0.010709412755022537) D2 D38
|
||||
error(0.0016000000000002412) D2 D38 ^ D38 D39 D58 L1 L5 L6 L9 L10 L11
|
||||
error(0.0016000000000002412) D2 D38 ^ D38 D44 D53
|
||||
error(0.0027974384619484597) D4 D40 ^ D3 D23 D40 L2 L7 L8 L11
|
||||
error(0.0016000000000002412) D6 D28 D65 L0 ^ D3 D13 D19 D33 D65 L0 L9
|
||||
error(0.0016000000000002412) D6 D26 D43 L2 L7 L8 L9 L10 L11 ^ D3 D17 D23 D33 D43 L2 L7 L8 L10 L11
|
||||
error(0.003990405122050568) D3 D39 ^ D6 D33 D39 L9
|
||||
error(0.0016000000000002412) D3 D23 D40 L2 L7 L8 L11 ^ D8 D14 D24 D30 D40 L2 L6 L8 L9 L10
|
||||
error(0.003990405122050568) D9 D45 ^ D3 D12 D45
|
||||
error(0.0016000000000002412) D12 D34 D71 L4 ^ D3 D9 D19 D25 D71 L4
|
||||
error(0.0016000000000002412) D12 D32 D49 L2 L8 ^ D3 D9 D23 D29 D49 L2 L8
|
||||
error(0.0016000000000002412) D9 D25 D62 L3 ^ D3 D19 D62 D71 L3 L4
|
||||
error(0.0016000000000002412) D9 D29 D46 L7 L11 ^ D3 D23 D46 D49 L2 L7 L8 L11
|
||||
error(0.0016000000000002412) D3 D19 D56 L3 L4 ^ D10 D16 D24 D30 D56 L3 L4 L6 L7 L9 L10 L11
|
||||
error(0.0016000000000002412) D12 D48 ^ D3 D45 D48
|
||||
error(0.0016000000000002412) D3 D19 D56 L3 L4 ^ D13 D33 D56 D65 L0 L3 L4 L9
|
||||
error(0.0016000000000002412) D3 D23 D40 L2 L7 L8 L11 ^ D17 D33 D40 D43 L10
|
||||
error(0.0027974384619484597) D20 D56 ^ D3 D19 D56 L3 L4
|
||||
error(0.003990405122050568) D3 D39 ^ D19 D39 D56 L3 L4
|
||||
error(0.0016000000000002412) D3 D19 D56 L3 L4 ^ D56 D62 D71
|
||||
error(0.003990405122050568) D23 D59 ^ D3 D40 D59 L2 L7 L8 L11
|
||||
error(0.0016000000000002412) D3 D23 D40 L2 L7 L8 L11 ^ D40 D46 D49
|
||||
error(0.003990405122050568) D30 D66 ^ D3 D24 D66 L6 L7 L9 L10 L11
|
||||
error(0.0016000000000002412) D3 D39 ^ D24 D39 D66 L6 L7 L9 L10 L11
|
||||
error(0.010709412755022537) D3 D39
|
||||
error(0.0016000000000002412) D3 D39 ^ D39 D40 D59 L2 L7 L8 L11
|
||||
error(0.0016000000000002412) D3 D39 ^ D39 D45 D48
|
||||
error(0.0027974384619484597) D5 D41 ^ D4 D18 D41 L3 L6 L7 L8 L11
|
||||
error(0.0016000000000002412) D7 D27 D44 L3 L4 L6 L7 L8 L10 ^ D4 D12 D18 D34 D44 L3 L4 L6 L7 L8
|
||||
error(0.0016000000000002412) D7 D29 D60 L1 ^ D4 D14 D20 D34 D60 L1 L10
|
||||
error(0.003990405122050568) D4 D40 ^ D7 D34 D40 L10
|
||||
error(0.0016000000000002412) D4 D18 D41 L3 L6 L7 L8 L11 ^ D9 D15 D25 D31 D41 L3 L7 L9 L10 L11
|
||||
error(0.003990405122050568) D10 D46 ^ D4 D13 D46
|
||||
error(0.0016000000000002412) D13 D33 D50 L0 L3 L4 L9 ^ D4 D10 D18 D24 D50 L0 L3 L4 L9
|
||||
error(0.0016000000000002412) D13 D35 D66 L5 ^ D4 D10 D20 D26 D66 L5
|
||||
error(0.0016000000000002412) D10 D24 D47 L0 L4 L6 L7 L8 L9 L11 ^ D4 D18 D47 D50 L3 L6 L7 L8 L11
|
||||
error(0.0016000000000002412) D10 D26 D63 ^ D4 D20 D63 D66 L5
|
||||
error(0.0016000000000002412) D4 D20 D57 L5 ^ D11 D17 D25 D31 D57 L5 L6 L8 L9 L10
|
||||
error(0.0016000000000002412) D4 D18 D41 L3 L6 L7 L8 L11 ^ D12 D34 D41 D44 L4 L11
|
||||
error(0.0016000000000002412) D13 D49 ^ D4 D46 D49
|
||||
error(0.0016000000000002412) D4 D20 D57 L5 ^ D14 D34 D57 D60 L1 L5 L10
|
||||
error(0.003990405122050568) D18 D54 ^ D4 D41 D54 L3 L6 L7 L8 L11
|
||||
error(0.0016000000000002412) D4 D18 D41 L3 L6 L7 L8 L11 ^ D41 D47 D50
|
||||
error(0.0027974384619484597) D21 D57 ^ D4 D20 D57 L5
|
||||
error(0.003990405122050568) D4 D40 ^ D20 D40 D57 L5
|
||||
error(0.0016000000000002412) D4 D20 D57 L5 ^ D57 D63 D66
|
||||
error(0.003990405122050568) D31 D67 ^ D4 D25 D67 L6 L8 L9 L10
|
||||
error(0.0016000000000002412) D4 D40 ^ D25 D40 D67 L6 L8 L9 L10
|
||||
error(0.010709412755022537) D4 D40
|
||||
error(0.0016000000000002412) D4 D40 ^ D40 D41 D54 L3 L6 L7 L8 L11
|
||||
error(0.0016000000000002412) D4 D40 ^ D40 D46 D49
|
||||
error(0.0016000000000002412) D5 D21 D58 ^ D6 D12 D26 D32 D58 L7 L9 L10 L11
|
||||
error(0.0016000000000002412) D8 D28 D45 L5 L6 L10 ^ D5 D13 D19 D35 D45 L5 L6 L10 L11
|
||||
error(0.0016000000000002412) D8 D24 D61 L2 ^ D5 D15 D21 D35 D61 L2 L11
|
||||
error(0.003990405122050568) D5 D41 ^ D8 D35 D41 L11
|
||||
error(0.0016000000000002412) D5 D19 D36 L6 L8 L11 ^ D10 D16 D26 D32 D36 L6 L7 L8 L9 L10
|
||||
error(0.003990405122050568) D11 D47 ^ D5 D14 D47
|
||||
error(0.0016000000000002412) D14 D34 D51 L1 L5 L10 ^ D5 D11 D19 D25 D51 L1 L5 L10
|
||||
error(0.0016000000000002412) D14 D30 D67 ^ D5 D11 D21 D27 D67
|
||||
error(0.0016000000000002412) D11 D25 D42 L1 L5 L6 L8 L10 L11 ^ D5 D19 D42 D51 L6 L8 L11
|
||||
error(0.0016000000000002412) D11 D27 D64 ^ D5 D21 D64 D67
|
||||
error(0.0016000000000002412) D5 D19 D36 L6 L8 L11 ^ D13 D35 D36 D45 L5 L8 L10
|
||||
error(0.0016000000000002412) D14 D50 ^ D5 D47 D50
|
||||
error(0.0016000000000002412) D5 D21 D58 ^ D15 D35 D58 D61 L2 L11
|
||||
error(0.003990405122050568) D19 D55 ^ D5 D36 D55 L6 L8 L11
|
||||
error(0.0016000000000002412) D5 D19 D36 L6 L8 L11 ^ D36 D42 D51
|
||||
error(0.0027974384619484597) D22 D58 ^ D5 D21 D58
|
||||
error(0.003990405122050568) D5 D41 ^ D21 D41 D58
|
||||
error(0.0016000000000002412) D5 D21 D58 ^ D58 D64 D67
|
||||
error(0.003990405122050568) D32 D68 ^ D5 D26 D68 L7 L9 L10 L11
|
||||
error(0.0016000000000002412) D5 D41 ^ D26 D41 D68 L7 L9 L10 L11
|
||||
error(0.0016000000000002412) D5 D41 ^ D36 D41 D55 L6 L8 L11
|
||||
error(0.010709412755022537) D5 D41
|
||||
error(0.0016000000000002412) D5 D41 ^ D41 D47 D50
|
||||
error(0.0027974384619484597) D7 D43 ^ D6 D26 D43 L2 L7 L8 L9 L10 L11
|
||||
error(0.0027974384619484597) D6 D42 ^ D11 D25 D42 L1 L5 L6 L8 L10 L11
|
||||
error(0.003990405122050568) D12 D48 ^ D6 D21 D48
|
||||
error(0.0016000000000002412) D12 D32 D49 L2 L8 ^ D6 D26 D49 D58 L2 L7 L8 L9 L10 L11
|
||||
error(0.0016000000000002412) D12 D34 D71 L4 ^ D6 D28 D38 D71 L0 L7
|
||||
error(0.0016000000000002412) D21 D57 ^ D6 D48 D57
|
||||
error(0.003990405122050568) D26 D62 ^ D6 D43 D62 L2 L7 L8 L9 L10 L11
|
||||
error(0.0016000000000002412) D6 D26 D43 L2 L7 L8 L9 L10 L11 ^ D43 D49 D58
|
||||
error(0.0027974384619484597) D29 D65 ^ D6 D28 D65 L0
|
||||
error(0.0016000000000002412) D6 D28 D65 L0 ^ D38 D65 D71 L7
|
||||
error(0.003990405122050568) D6 D42 ^ D28 D42 D65 L0
|
||||
error(0.0016000000000002412) D6 D42 ^ D33 D39 D42 L9
|
||||
error(0.010709412755022537) D6 D42
|
||||
error(0.0016000000000002412) D6 D42 ^ D42 D43 D62 L2 L7 L8 L9 L10 L11
|
||||
error(0.0016000000000002412) D6 D42 ^ D42 D48 D57
|
||||
error(0.0027974384619484597) D8 D44 ^ D7 D27 D44 L3 L4 L6 L7 L8 L10
|
||||
error(0.003990405122050568) D13 D49 ^ D7 D22 D49
|
||||
error(0.0016000000000002412) D13 D33 D50 L0 L3 L4 L9 ^ D7 D27 D50 D59 L3 L4 L6 L7 L8 L10
|
||||
error(0.0016000000000002412) D13 D35 D66 L5 ^ D7 D29 D39 D66 L1 L6 L7 L9 L10 L11
|
||||
error(0.0016000000000002412) D22 D58 ^ D7 D49 D58
|
||||
error(0.0027974384619484597) D24 D60 ^ D7 D29 D60 L1
|
||||
error(0.003990405122050568) D27 D63 ^ D7 D44 D63 L3 L4 L6 L7 L8 L10
|
||||
error(0.0016000000000002412) D7 D27 D44 L3 L4 L6 L7 L8 L10 ^ D44 D50 D59
|
||||
error(0.0016000000000002412) D7 D29 D60 L1 ^ D39 D60 D66 L6 L7 L9 L10 L11
|
||||
error(0.003990405122050568) D7 D43 ^ D29 D43 D60 L1
|
||||
error(0.0016000000000002412) D7 D43 ^ D34 D40 D43 L10
|
||||
error(0.010709412755022537) D7 D43
|
||||
error(0.0016000000000002412) D7 D43 ^ D43 D44 D63 L3 L4 L6 L7 L8 L10
|
||||
error(0.0016000000000002412) D7 D43 ^ D43 D49 D58
|
||||
error(0.0027974384619484597) D9 D45 ^ D8 D28 D45 L5 L6 L10
|
||||
error(0.003990405122050568) D14 D50 ^ D8 D23 D50
|
||||
error(0.0016000000000002412) D14 D30 D67 ^ D8 D24 D40 D67 L2 L6 L8 L9 L10
|
||||
error(0.0016000000000002412) D14 D34 D51 L1 L5 L10 ^ D8 D28 D51 D54 L5 L6 L10
|
||||
error(0.0016000000000002412) D23 D59 ^ D8 D50 D59
|
||||
error(0.0027974384619484597) D25 D61 ^ D8 D24 D61 L2
|
||||
error(0.0016000000000002412) D8 D24 D61 L2 ^ D40 D61 D67 L6 L8 L9 L10
|
||||
error(0.003990405122050568) D8 D44 ^ D24 D44 D61 L2
|
||||
error(0.003990405122050568) D28 D64 ^ D8 D45 D64 L5 L6 L10
|
||||
error(0.0016000000000002412) D8 D28 D45 L5 L6 L10 ^ D45 D51 D54
|
||||
error(0.0016000000000002412) D8 D44 ^ D35 D41 D44 L11
|
||||
error(0.010709412755022537) D8 D44
|
||||
error(0.0016000000000002412) D8 D44 ^ D44 D45 D64 L5 L6 L10
|
||||
error(0.0016000000000002412) D8 D44 ^ D44 D50 D59
|
||||
error(0.0027974384619484597) D10 D46 ^ D9 D29 D46 L7 L11
|
||||
error(0.003990405122050568) D15 D51 ^ D9 D18 D51
|
||||
error(0.0016000000000002412) D15 D31 D68 ^ D9 D25 D41 D68 L3 L7 L9 L10 L11
|
||||
error(0.0016000000000002412) D15 D35 D52 L2 L11 ^ D9 D29 D52 D55 L7 L11
|
||||
error(0.0016000000000002412) D18 D54 ^ D9 D51 D54
|
||||
error(0.0027974384619484597) D26 D62 ^ D9 D25 D62 L3
|
||||
error(0.0016000000000002412) D9 D25 D62 L3 ^ D41 D62 D68 L7 L9 L10 L11
|
||||
error(0.003990405122050568) D9 D45 ^ D25 D45 D62 L3
|
||||
error(0.003990405122050568) D29 D65 ^ D9 D46 D65 L7 L11
|
||||
error(0.0016000000000002412) D9 D29 D46 L7 L11 ^ D46 D52 D55
|
||||
error(0.0016000000000002412) D9 D45 ^ D30 D36 D45 L8 L10
|
||||
error(0.010709412755022537) D9 D45
|
||||
error(0.0016000000000002412) D9 D45 ^ D45 D46 D65 L7 L11
|
||||
error(0.0016000000000002412) D9 D45 ^ D45 D51 D54
|
||||
error(0.0027974384619484597) D11 D47 ^ D10 D24 D47 L0 L4 L6 L7 L8 L9 L11
|
||||
error(0.003990405122050568) D16 D52 ^ D10 D19 D52
|
||||
error(0.0016000000000002412) D16 D30 D53 L0 L3 L8 L10 ^ D10 D24 D53 D56 L0 L4 L6 L7 L8 L9 L11
|
||||
error(0.0016000000000002412) D16 D32 D69 ^ D10 D26 D36 D69 L6 L7 L8 L9 L10
|
||||
error(0.0016000000000002412) D19 D55 ^ D10 D52 D55
|
||||
error(0.003990405122050568) D24 D60 ^ D10 D47 D60 L0 L4 L6 L7 L8 L9 L11
|
||||
error(0.0016000000000002412) D10 D24 D47 L0 L4 L6 L7 L8 L9 L11 ^ D47 D53 D56
|
||||
error(0.0027974384619484597) D27 D63 ^ D10 D26 D63
|
||||
error(0.0016000000000002412) D10 D26 D63 ^ D36 D63 D69 L6 L7 L8 L9 L10
|
||||
error(0.003990405122050568) D10 D46 ^ D26 D46 D63
|
||||
error(0.0016000000000002412) D10 D46 ^ D31 D37 D46 L9 L11
|
||||
error(0.010709412755022537) D10 D46
|
||||
error(0.0016000000000002412) D10 D46 ^ D46 D47 D60 L0 L4 L6 L7 L8 L9 L11
|
||||
error(0.0016000000000002412) D10 D46 ^ D46 D52 D55
|
||||
error(0.003990405122050568) D17 D53 ^ D11 D20 D53
|
||||
error(0.0016000000000002412) D17 D31 D48 L1 L9 L11 ^ D11 D25 D48 D57 L1 L5 L6 L8 L10 L11
|
||||
error(0.0016000000000002412) D17 D33 D70 ^ D11 D27 D37 D70 L6
|
||||
error(0.0016000000000002412) D20 D56 ^ D11 D53 D56
|
||||
error(0.003990405122050568) D25 D61 ^ D11 D42 D61 L1 L5 L6 L8 L10 L11
|
||||
error(0.0016000000000002412) D11 D25 D42 L1 L5 L6 L8 L10 L11 ^ D42 D48 D57
|
||||
error(0.0027974384619484597) D28 D64 ^ D11 D27 D64
|
||||
error(0.0016000000000002412) D11 D27 D64 ^ D37 D64 D70 L6
|
||||
error(0.003990405122050568) D11 D47 ^ D27 D47 D64
|
||||
error(0.0016000000000002412) D11 D47 ^ D32 D38 D47 L8
|
||||
error(0.0016000000000002412) D11 D47 ^ D42 D47 D61 L1 L5 L6 L8 L10 L11
|
||||
error(0.010709412755022537) D11 D47
|
||||
error(0.0016000000000002412) D11 D47 ^ D47 D53 D56
|
||||
error(0.0027974384619484597) D13 D49 ^ D12 D32 D49 L2 L8
|
||||
error(0.0027974384619484597) D12 D48 ^ D17 D31 D48 L1 L9 L11
|
||||
error(0.003990405122050568) D18 D54 ^ D12 D27 D54
|
||||
error(0.0016000000000002412) D27 D63 ^ D12 D54 D63
|
||||
error(0.003990405122050568) D32 D68 ^ D12 D49 D68 L2 L8
|
||||
error(0.0016000000000002412) D12 D32 D49 L2 L8 ^ D49 D55 D64
|
||||
error(0.0027974384619484597) D35 D71 ^ D12 D34 D71 L4
|
||||
error(0.0016000000000002412) D12 D34 D71 L4 ^ D41 D44 D71 L11
|
||||
error(0.003990405122050568) D12 D48 ^ D34 D48 D71 L4
|
||||
error(0.010709412755022537) D12 D48
|
||||
error(0.0016000000000002412) D12 D48 ^ D48 D49 D68 L2 L8
|
||||
error(0.0016000000000002412) D12 D48 ^ D48 D54 D63
|
||||
error(0.0027974384619484597) D14 D50 ^ D13 D33 D50 L0 L3 L4 L9
|
||||
error(0.003990405122050568) D19 D55 ^ D13 D28 D55
|
||||
error(0.0016000000000002412) D28 D64 ^ D13 D55 D64
|
||||
error(0.0027974384619484597) D30 D66 ^ D13 D35 D66 L5
|
||||
error(0.003990405122050568) D33 D69 ^ D13 D50 D69 L0 L3 L4 L9
|
||||
error(0.0016000000000002412) D13 D33 D50 L0 L3 L4 L9 ^ D50 D56 D65
|
||||
error(0.0016000000000002412) D13 D35 D66 L5 ^ D36 D45 D66 L8 L10
|
||||
error(0.003990405122050568) D13 D49 ^ D35 D49 D66 L5
|
||||
error(0.010709412755022537) D13 D49
|
||||
error(0.0016000000000002412) D13 D49 ^ D49 D50 D69 L0 L3 L4 L9
|
||||
error(0.0016000000000002412) D13 D49 ^ D49 D55 D64
|
||||
error(0.0027974384619484597) D15 D51 ^ D14 D34 D51 L1 L5 L10
|
||||
error(0.003990405122050568) D20 D56 ^ D14 D29 D56
|
||||
error(0.0016000000000002412) D29 D65 ^ D14 D56 D65
|
||||
error(0.0027974384619484597) D31 D67 ^ D14 D30 D67
|
||||
error(0.0016000000000002412) D14 D30 D67 ^ D37 D46 D67 L9 L11
|
||||
error(0.003990405122050568) D14 D50 ^ D30 D50 D67
|
||||
error(0.003990405122050568) D34 D70 ^ D14 D51 D70 L1 L5 L10
|
||||
error(0.0016000000000002412) D14 D34 D51 L1 L5 L10 ^ D51 D57 D60
|
||||
error(0.010709412755022537) D14 D50
|
||||
error(0.0016000000000002412) D14 D50 ^ D50 D51 D70 L1 L5 L10
|
||||
error(0.0016000000000002412) D14 D50 ^ D50 D56 D65
|
||||
error(0.0027974384619484597) D16 D52 ^ D15 D35 D52 L2 L11
|
||||
error(0.003990405122050568) D21 D57 ^ D15 D24 D57
|
||||
error(0.0016000000000002412) D24 D60 ^ D15 D57 D60
|
||||
error(0.0027974384619484597) D32 D68 ^ D15 D31 D68
|
||||
error(0.0016000000000002412) D15 D31 D68 ^ D38 D47 D68 L8
|
||||
error(0.003990405122050568) D15 D51 ^ D31 D51 D68
|
||||
error(0.003990405122050568) D35 D71 ^ D15 D52 D71 L2 L11
|
||||
error(0.0016000000000002412) D15 D35 D52 L2 L11 ^ D52 D58 D61
|
||||
error(0.010709412755022537) D15 D51
|
||||
error(0.0016000000000002412) D15 D51 ^ D51 D52 D71 L2 L11
|
||||
error(0.0016000000000002412) D15 D51 ^ D51 D57 D60
|
||||
error(0.0027974384619484597) D17 D53 ^ D16 D30 D53 L0 L3 L8 L10
|
||||
error(0.003990405122050568) D22 D58 ^ D16 D25 D58
|
||||
error(0.0016000000000002412) D25 D61 ^ D16 D58 D61
|
||||
error(0.003990405122050568) D30 D66 ^ D16 D53 D66 L0 L3 L8 L10
|
||||
error(0.0016000000000002412) D16 D30 D53 L0 L3 L8 L10 ^ D53 D59 D62
|
||||
error(0.0027974384619484597) D33 D69 ^ D16 D32 D69
|
||||
error(0.0016000000000002412) D16 D32 D69 ^ D39 D42 D69 L9
|
||||
error(0.003990405122050568) D16 D52 ^ D32 D52 D69
|
||||
error(0.010709412755022537) D16 D52
|
||||
error(0.0016000000000002412) D16 D52 ^ D52 D53 D66 L0 L3 L8 L10
|
||||
error(0.0016000000000002412) D16 D52 ^ D52 D58 D61
|
||||
error(0.003990405122050568) D23 D59 ^ D17 D26 D59
|
||||
error(0.0016000000000002412) D26 D62 ^ D17 D59 D62
|
||||
error(0.003990405122050568) D31 D67 ^ D17 D48 D67 L1 L9 L11
|
||||
error(0.0016000000000002412) D17 D31 D48 L1 L9 L11 ^ D48 D54 D63
|
||||
error(0.0027974384619484597) D34 D70 ^ D17 D33 D70
|
||||
error(0.0016000000000002412) D17 D33 D70 ^ D40 D43 D70 L10
|
||||
error(0.003990405122050568) D17 D53 ^ D33 D53 D70
|
||||
error(0.0016000000000002412) D17 D53 ^ D48 D53 D67 L1 L9 L11
|
||||
error(0.010709412755022537) D17 D53
|
||||
error(0.0016000000000002412) D17 D53 ^ D53 D59 D62
|
||||
error(0.003990405122050568) D24 D60 ^ D18 D33 D60
|
||||
error(0.0016000000000002412) D33 D69 ^ D18 D60 D69
|
||||
error(0.0016000000000002412) D18 D54 ^ D38 D54 D55 L2
|
||||
error(0.010709412755022537) D18 D54
|
||||
error(0.0016000000000002412) D18 D54 ^ D54 D60 D69
|
||||
error(0.003990405122050568) D25 D61 ^ D19 D34 D61
|
||||
error(0.0016000000000002412) D34 D70 ^ D19 D61 D70
|
||||
error(0.0016000000000002412) D19 D55 ^ D39 D55 D56 L3 L4
|
||||
error(0.010709412755022537) D19 D55
|
||||
error(0.0016000000000002412) D19 D55 ^ D55 D61 D70
|
||||
error(0.003990405122050568) D26 D62 ^ D20 D35 D62
|
||||
error(0.0016000000000002412) D35 D71 ^ D20 D62 D71
|
||||
error(0.0016000000000002412) D20 D56 ^ D40 D56 D57 L5
|
||||
error(0.010709412755022537) D20 D56
|
||||
error(0.0016000000000002412) D20 D56 ^ D56 D62 D71
|
||||
error(0.003990405122050568) D27 D63 ^ D21 D30 D63
|
||||
error(0.0016000000000002412) D30 D66 ^ D21 D63 D66
|
||||
error(0.0016000000000002412) D21 D57 ^ D41 D57 D58
|
||||
error(0.010709412755022537) D21 D57
|
||||
error(0.0016000000000002412) D21 D57 ^ D57 D63 D66
|
||||
error(0.003990405122050568) D28 D64 ^ D22 D31 D64
|
||||
error(0.0016000000000002412) D31 D67 ^ D22 D64 D67
|
||||
error(0.0016000000000002412) D22 D58 ^ D36 D58 D59 L0
|
||||
error(0.010709412755022537) D22 D58
|
||||
error(0.0016000000000002412) D22 D58 ^ D58 D64 D67
|
||||
error(0.003990405122050568) D29 D65 ^ D23 D32 D65
|
||||
error(0.0016000000000002412) D32 D68 ^ D23 D65 D68
|
||||
error(0.0016000000000002412) D23 D59 ^ D37 D54 D59 L1
|
||||
error(0.010709412755022537) D23 D59
|
||||
error(0.0016000000000002412) D23 D59 ^ D59 D65 D68
|
||||
error(0.0016000000000002412) D24 D60 ^ D39 D60 D66 L6 L7 L9 L10 L11
|
||||
error(0.0016000000000002412) D24 D60 ^ D44 D60 D61 L2
|
||||
error(0.010709412755022537) D24 D60
|
||||
error(0.0016000000000002412) D25 D61 ^ D40 D61 D67 L6 L8 L9 L10
|
||||
error(0.0016000000000002412) D25 D61 ^ D45 D61 D62 L3
|
||||
error(0.010709412755022537) D25 D61
|
||||
error(0.0016000000000002412) D26 D62 ^ D41 D62 D68 L7 L9 L10 L11
|
||||
error(0.0016000000000002412) D26 D62 ^ D46 D62 D63
|
||||
error(0.010709412755022537) D26 D62
|
||||
error(0.0016000000000002412) D27 D63 ^ D36 D63 D69 L6 L7 L8 L9 L10
|
||||
error(0.0016000000000002412) D27 D63 ^ D47 D63 D64
|
||||
error(0.010709412755022537) D27 D63
|
||||
error(0.0016000000000002412) D28 D64 ^ D37 D64 D70 L6
|
||||
error(0.0016000000000002412) D28 D64 ^ D42 D64 D65 L0
|
||||
error(0.010709412755022537) D28 D64
|
||||
error(0.0016000000000002412) D29 D65 ^ D38 D65 D71 L7
|
||||
error(0.0016000000000002412) D29 D65 ^ D43 D60 D65 L1
|
||||
error(0.010709412755022537) D29 D65
|
||||
error(0.0016000000000002412) D30 D66 ^ D36 D45 D66 L8 L10
|
||||
error(0.0016000000000002412) D30 D66 ^ D50 D66 D67
|
||||
error(0.010709412755022537) D30 D66
|
||||
error(0.0016000000000002412) D31 D67 ^ D37 D46 D67 L9 L11
|
||||
error(0.0016000000000002412) D31 D67 ^ D51 D67 D68
|
||||
error(0.010709412755022537) D31 D67
|
||||
error(0.0016000000000002412) D32 D68 ^ D38 D47 D68 L8
|
||||
error(0.0016000000000002412) D32 D68 ^ D52 D68 D69
|
||||
error(0.010709412755022537) D32 D68
|
||||
error(0.0016000000000002412) D33 D69 ^ D39 D42 D69 L9
|
||||
error(0.0016000000000002412) D33 D69 ^ D53 D69 D70
|
||||
error(0.010709412755022537) D33 D69
|
||||
error(0.0016000000000002412) D34 D70 ^ D40 D43 D70 L10
|
||||
error(0.0016000000000002412) D34 D70 ^ D48 D70 D71 L4
|
||||
error(0.010709412755022537) D34 D70
|
||||
error(0.0016000000000002412) D35 D71 ^ D41 D44 D71 L11
|
||||
error(0.0016000000000002412) D35 D71 ^ D49 D66 D71 L5
|
||||
error(0.010709412755022537) D35 D71
|
||||
error(0.0027974384619484606) D36 D37 D56 L7 L8 L9 L10
|
||||
error(0.0027974384619484606) D36 D41 D55 L6 L8 L11
|
||||
error(0.007161372078080381) D36 D42 D51
|
||||
error(0.007161372078080381) D36 D45 D66 L8 L10
|
||||
error(0.0027974384619484606) D36 D58 D59 L0
|
||||
error(0.007161372078080381) D36 D63 D69 L6 L7 L8 L9 L10
|
||||
error(0.0027974384619484606) D37 D38 D57 L0 L4 L6 L7
|
||||
error(0.007161372078080381) D37 D43 D52
|
||||
error(0.007161372078080381) D37 D46 D67 L9 L11
|
||||
error(0.0027974384619484606) D37 D54 D59 L1
|
||||
error(0.007161372078080381) D37 D64 D70 L6
|
||||
error(0.0027974384619484606) D38 D39 D58 L1 L5 L6 L9 L10 L11
|
||||
error(0.007161372078080381) D38 D44 D53
|
||||
error(0.007161372078080381) D38 D47 D68 L8
|
||||
error(0.0027974384619484606) D38 D54 D55 L2
|
||||
error(0.007161372078080381) D38 D65 D71 L7
|
||||
error(0.0027974384619484606) D39 D40 D59 L2 L7 L8 L11
|
||||
error(0.007161372078080381) D39 D42 D69 L9
|
||||
error(0.007161372078080381) D39 D45 D48
|
||||
error(0.0027974384619484606) D39 D55 D56 L3 L4
|
||||
error(0.007161372078080381) D39 D60 D66 L6 L7 L9 L10 L11
|
||||
error(0.0027974384619484606) D40 D41 D54 L3 L6 L7 L8 L11
|
||||
error(0.007161372078080381) D40 D43 D70 L10
|
||||
error(0.007161372078080381) D40 D46 D49
|
||||
error(0.0027974384619484606) D40 D56 D57 L5
|
||||
error(0.007161372078080381) D40 D61 D67 L6 L8 L9 L10
|
||||
error(0.007161372078080381) D41 D44 D71 L11
|
||||
error(0.007161372078080381) D41 D47 D50
|
||||
error(0.0027974384619484606) D41 D57 D58
|
||||
error(0.007161372078080381) D41 D62 D68 L7 L9 L10 L11
|
||||
error(0.0027974384619484606) D42 D43 D62 L2 L7 L8 L9 L10 L11
|
||||
error(0.0027974384619484606) D42 D47 D61 L1 L5 L6 L8 L10 L11
|
||||
error(0.007161372078080381) D42 D48 D57
|
||||
error(0.0027974384619484606) D42 D64 D65 L0
|
||||
error(0.0027974384619484606) D43 D44 D63 L3 L4 L6 L7 L8 L10
|
||||
error(0.007161372078080381) D43 D49 D58
|
||||
error(0.0027974384619484606) D43 D60 D65 L1
|
||||
error(0.0027974384619484606) D44 D45 D64 L5 L6 L10
|
||||
error(0.007161372078080381) D44 D50 D59
|
||||
error(0.0027974384619484606) D44 D60 D61 L2
|
||||
error(0.0027974384619484606) D45 D46 D65 L7 L11
|
||||
error(0.007161372078080381) D45 D51 D54
|
||||
error(0.0027974384619484606) D45 D61 D62 L3
|
||||
error(0.0027974384619484606) D46 D47 D60 L0 L4 L6 L7 L8 L9 L11
|
||||
error(0.007161372078080381) D46 D52 D55
|
||||
error(0.0027974384619484606) D46 D62 D63
|
||||
error(0.007161372078080381) D47 D53 D56
|
||||
error(0.0027974384619484606) D47 D63 D64
|
||||
error(0.0027974384619484606) D48 D49 D68 L2 L8
|
||||
error(0.0027974384619484606) D48 D53 D67 L1 L9 L11
|
||||
error(0.007161372078080381) D48 D54 D63
|
||||
error(0.0027974384619484606) D48 D70 D71 L4
|
||||
error(0.0027974384619484606) D49 D50 D69 L0 L3 L4 L9
|
||||
error(0.007161372078080381) D49 D55 D64
|
||||
error(0.0027974384619484606) D49 D66 D71 L5
|
||||
error(0.0027974384619484606) D50 D51 D70 L1 L5 L10
|
||||
error(0.007161372078080381) D50 D56 D65
|
||||
error(0.0027974384619484606) D50 D66 D67
|
||||
error(0.0027974384619484606) D51 D52 D71 L2 L11
|
||||
error(0.007161372078080381) D51 D57 D60
|
||||
error(0.0027974384619484606) D51 D67 D68
|
||||
error(0.0027974384619484606) D52 D53 D66 L0 L3 L8 L10
|
||||
error(0.007161372078080381) D52 D58 D61
|
||||
error(0.0027974384619484606) D52 D68 D69
|
||||
error(0.007161372078080381) D53 D59 D62
|
||||
error(0.0027974384619484606) D53 D69 D70
|
||||
error(0.007161372078080381) D54 D60 D69
|
||||
error(0.007161372078080381) D55 D61 D70
|
||||
error(0.007161372078080381) D56 D62 D71
|
||||
error(0.007161372078080381) D57 D63 D66
|
||||
error(0.007161372078080381) D58 D64 D67
|
||||
error(0.007161372078080381) D59 D65 D68
|
||||
828
wai/quantum-conformance/qec-text/models/bb72_z_c2.dem
Normal file
828
wai/quantum-conformance/qec-text/models/bb72_z_c2.dem
Normal file
|
|
@ -0,0 +1,828 @@
|
|||
error(0.0008006410260527195) D0 D1 D59 ^ D23 D59
|
||||
error(0.0016000000000002412) D0 D37 D59 ^ D1 D37
|
||||
error(0.0008006410260527195) D0 D5 D58 ^ D22 D58
|
||||
error(0.0016000000000002412) D5 D36 D58 ^ D0 D36
|
||||
error(0.005182100480000431) D6 D33 D37 D59 L9 L10 L11 ^ D0 D37 D59
|
||||
error(0.0016000000000002412) D6 D36 D69 L9 L10 L11 ^ D0 D36
|
||||
error(0.005182100480000431) D0 D15 D46 D62 L2 L3 L6 ^ D9 D46 D62 L6
|
||||
error(0.0016000000000002412) D15 D37 D46 D59 D62 L2 L3 L6 ^ D0 D37 D59
|
||||
error(0.0008006410260527195) D19 D20 D36 ^ D0 D36
|
||||
error(0.005182100480000431) D0 D27 D53 D67 L4 L7 L9 L11 ^ D30 D53 D67
|
||||
error(0.0016000000000002412) D0 D44 D53 D64 D67 L4 L7 L9 L11 ^ D27 D44 D64
|
||||
error(0.0016000000000002412) D0 D63 D66 L4 L7 L9 L11 ^ D30 D66
|
||||
error(0.007755948445696716) D0 D36
|
||||
error(0.003990405122050568) D36 D37 D59 ^ D0 D36
|
||||
error(0.0016000000000002412) D37 D44 D53 D59 D64 D67 L4 L7 L9 L11 ^ D0 D37 D59
|
||||
error(0.0016000000000002412) D36 D63 D66 L4 L7 L9 L11 ^ D0 D36
|
||||
error(0.0008006410260527195) D1 D2 D54 L6 L7 L8 L9 L10 ^ D18 D54
|
||||
error(0.0016000000000002412) D1 D38 D54 L6 L7 L8 L9 L10 ^ D2 D38
|
||||
error(0.005182100480000431) D7 D34 D38 D54 L6 L7 L9 L10 ^ D1 D38 D54 L6 L7 L8 L9 L10
|
||||
error(0.0016000000000002412) D7 D37 D70 L8 ^ D1 D37
|
||||
error(0.005182100480000431) D1 D16 D47 D63 L0 L2 L3 L6 L7 L10 ^ D10 D47 D63 L7
|
||||
error(0.0016000000000002412) D16 D38 D47 D54 D63 L0 L2 L3 L8 L9 ^ D1 D38 D54 L6 L7 L8 L9 L10
|
||||
error(0.0008006410260527195) D20 D21 D37 ^ D1 D37
|
||||
error(0.005182100480000431) D1 D28 D48 D68 L5 L6 L7 L8 L9 ^ D31 D48 D68
|
||||
error(0.0016000000000002412) D1 D45 D48 D65 D68 L5 L6 L7 L8 L9 ^ D28 D45 D65
|
||||
error(0.0016000000000002412) D1 D64 D67 L5 L6 L7 L8 L9 ^ D31 D67
|
||||
error(0.007755948445696716) D1 D37
|
||||
error(0.003990405122050568) D37 D38 D54 L6 L7 L8 L9 L10 ^ D1 D37
|
||||
error(0.0016000000000002412) D38 D45 D48 D54 D65 D68 L5 L10 ^ D1 D38 D54 L6 L7 L8 L9 L10
|
||||
error(0.0016000000000002412) D37 D64 D67 L5 L6 L7 L8 L9 ^ D1 D37
|
||||
error(0.0008006410260527195) D2 D3 D55 L6 L10 ^ D19 D55
|
||||
error(0.0016000000000002412) D2 D39 D55 L6 L10 ^ D3 D39
|
||||
error(0.005182100480000431) D8 D35 D39 D55 L6 L10 ^ D2 D39 D55 L6 L10
|
||||
error(0.0016000000000002412) D8 D38 D71 ^ D2 D38
|
||||
error(0.005182100480000431) D2 D17 D42 D64 L0 L1 L2 L3 L8 L9 L11 ^ D11 D42 D64
|
||||
error(0.0016000000000002412) D17 D39 D42 D55 D64 L0 L1 L2 L3 L6 L8 L9 L10 L11 ^ D2 D39 D55 L6 L10
|
||||
error(0.0008006410260527195) D21 D22 D38 ^ D2 D38
|
||||
error(0.005182100480000431) D2 D29 D49 D69 L4 ^ D32 D49 D69
|
||||
error(0.0016000000000002412) D2 D46 D49 D60 D69 L4 ^ D29 D46 D60
|
||||
error(0.0016000000000002412) D2 D65 D68 L4 ^ D32 D68
|
||||
error(0.007755948445696716) D2 D38
|
||||
error(0.003990405122050568) D38 D39 D55 L6 L10 ^ D2 D38
|
||||
error(0.0016000000000002412) D39 D46 D49 D55 D60 D69 L4 L6 L10 ^ D2 D39 D55 L6 L10
|
||||
error(0.0016000000000002412) D38 D65 D68 L4 ^ D2 D38
|
||||
error(0.0008006410260527195) D3 D4 D56 L6 L8 L9 L10 L11 ^ D20 D56
|
||||
error(0.0016000000000002412) D3 D40 D56 L6 L8 L9 L10 L11 ^ D4 D40
|
||||
error(0.005182100480000431) D3 D12 D43 D65 L0 L1 L3 L6 L8 L9 L10 L11 ^ D6 D43 D65
|
||||
error(0.005182100480000431) D9 D30 D40 D56 L6 L8 L9 L10 L11 ^ D3 D40 D56 L6 L8 L9 L10 L11
|
||||
error(0.0016000000000002412) D9 D39 D66 ^ D3 D39
|
||||
error(0.0016000000000002412) D12 D40 D43 D56 D65 L0 L1 L3 ^ D3 D40 D56 L6 L8 L9 L10 L11
|
||||
error(0.0008006410260527195) D22 D23 D39 ^ D3 D39
|
||||
error(0.005182100480000431) D3 D24 D50 D70 L5 ^ D33 D50 D70
|
||||
error(0.0016000000000002412) D3 D47 D50 D61 D70 L5 ^ D24 D47 D61
|
||||
error(0.0016000000000002412) D3 D60 D69 L5 ^ D33 D69
|
||||
error(0.007755948445696716) D3 D39
|
||||
error(0.003990405122050568) D39 D40 D56 L6 L8 L9 L10 L11 ^ D3 D39
|
||||
error(0.0016000000000002412) D40 D47 D50 D56 D61 D70 L5 L6 L8 L9 L10 L11 ^ D3 D40 D56 L6 L8 L9 L10 L11
|
||||
error(0.0016000000000002412) D39 D60 D69 L5 ^ D3 D39
|
||||
error(0.0008006410260527195) D4 D5 D57 L7 L9 L10 L11 ^ D21 D57
|
||||
error(0.0016000000000002412) D4 D41 D57 L7 L9 L10 L11 ^ D5 D41
|
||||
error(0.005182100480000431) D4 D13 D44 D60 L0 L1 L6 L7 L8 L9 L11 ^ D7 D44 D60 L6 L7 L8 L9 L11
|
||||
error(0.005182100480000431) D10 D31 D41 D57 L7 L9 L10 L11 ^ D4 D41 D57 L7 L9 L10 L11
|
||||
error(0.0016000000000002412) D10 D40 D67 ^ D4 D40
|
||||
error(0.0016000000000002412) D13 D41 D44 D57 D60 L0 L1 L6 L8 L10 ^ D4 D41 D57 L7 L9 L10 L11
|
||||
error(0.0008006410260527195) D18 D23 D40 ^ D4 D40
|
||||
error(0.005182100480000431) D4 D25 D51 D71 ^ D34 D51 D71
|
||||
error(0.0016000000000002412) D4 D42 D51 D62 D71 ^ D25 D42 D62
|
||||
error(0.0016000000000002412) D4 D61 D70 ^ D34 D70
|
||||
error(0.007755948445696716) D4 D40
|
||||
error(0.003990405122050568) D40 D41 D57 L7 L9 L10 L11 ^ D4 D40
|
||||
error(0.0016000000000002412) D41 D42 D51 D57 D62 D71 L7 L9 L10 L11 ^ D4 D41 D57 L7 L9 L10 L11
|
||||
error(0.0016000000000002412) D40 D61 D70 ^ D4 D40
|
||||
error(0.005182100480000431) D5 D14 D45 D61 L1 L2 L6 L8 L10 L11 ^ D8 D45 D61 L6 L8 L10 L11
|
||||
error(0.005182100480000431) D11 D32 D36 D58 ^ D5 D36 D58
|
||||
error(0.0016000000000002412) D11 D41 D68 ^ D5 D41
|
||||
error(0.0016000000000002412) D14 D36 D45 D58 D61 L1 L2 L6 L8 L10 L11 ^ D5 D36 D58
|
||||
error(0.0008006410260527195) D18 D19 D41 ^ D5 D41
|
||||
error(0.005182100480000431) D5 D26 D52 D66 ^ D35 D52 D66
|
||||
error(0.0016000000000002412) D5 D43 D52 D63 D66 ^ D26 D43 D63
|
||||
error(0.0016000000000002412) D5 D62 D71 ^ D35 D71
|
||||
error(0.003990405122050568) D36 D41 D58 ^ D5 D41
|
||||
error(0.007755948445696716) D5 D41
|
||||
error(0.0016000000000002412) D36 D43 D52 D58 D63 D66 ^ D5 D36 D58
|
||||
error(0.0016000000000002412) D41 D62 D71 ^ D5 D41
|
||||
error(0.0008006410260527195) D6 D7 D65 ^ D29 D65
|
||||
error(0.0016000000000002412) D6 D43 D65 ^ D7 D43
|
||||
error(0.0008006410260527195) D6 D11 D64 ^ D28 D64
|
||||
error(0.0016000000000002412) D11 D42 D64 ^ D6 D42
|
||||
error(0.0016000000000002412) D12 D39 D42 L0 L1 L3 L6 L8 L9 L10 L11 ^ D6 D42
|
||||
error(0.005182100480000431) D6 D21 D52 D68 L7 L9 L11 ^ D15 D52 D68 L10
|
||||
error(0.0016000000000002412) D21 D43 D52 D65 D68 L7 L9 L11 ^ D6 D43 D65
|
||||
error(0.0008006410260527195) D25 D26 D42 ^ D6 D42
|
||||
error(0.0016000000000002412) D6 D37 D50 D59 D70 L9 L10 L11 ^ D33 D50 D70
|
||||
error(0.0016000000000002412) D36 D42 D69 L9 L10 L11 ^ D6 D42
|
||||
error(0.0016000000000002412) D37 D43 D50 D59 D65 D70 L9 L10 L11 ^ D6 D43 D65
|
||||
error(0.007755948445696716) D6 D42
|
||||
error(0.003990405122050568) D42 D43 D65 ^ D6 D42
|
||||
error(0.0008006410260527195) D7 D8 D60 L6 L7 L8 L9 L11 ^ D24 D60
|
||||
error(0.0016000000000002412) D7 D44 D60 L6 L7 L8 L9 L11 ^ D8 D44
|
||||
error(0.0016000000000002412) D13 D40 D43 L0 L1 ^ D7 D43
|
||||
error(0.005182100480000431) D7 D22 D53 D69 L4 L7 L9 ^ D16 D53 D69 L11
|
||||
error(0.0016000000000002412) D22 D44 D53 D60 D69 L4 L6 L8 L11 ^ D7 D44 D60 L6 L7 L8 L9 L11
|
||||
error(0.0008006410260527195) D26 D27 D43 ^ D7 D43
|
||||
error(0.0016000000000002412) D7 D38 D51 D54 D71 L6 L7 L9 L10 ^ D34 D51 D71
|
||||
error(0.0016000000000002412) D37 D43 D70 L8 ^ D7 D43
|
||||
error(0.0016000000000002412) D38 D44 D51 D54 D60 D71 L8 L10 L11 ^ D7 D44 D60 L6 L7 L8 L9 L11
|
||||
error(0.007755948445696716) D7 D43
|
||||
error(0.003990405122050568) D43 D44 D60 L6 L7 L8 L9 L11 ^ D7 D43
|
||||
error(0.0008006410260527195) D8 D9 D61 L6 L8 L10 L11 ^ D25 D61
|
||||
error(0.0016000000000002412) D8 D45 D61 L6 L8 L10 L11 ^ D9 D45
|
||||
error(0.0016000000000002412) D14 D41 D44 L1 L2 ^ D8 D44
|
||||
error(0.005182100480000431) D8 D23 D48 D70 L4 L5 L6 L8 L11 ^ D17 D48 D70
|
||||
error(0.0016000000000002412) D23 D45 D48 D61 D70 L4 L5 L10 ^ D8 D45 D61 L6 L8 L10 L11
|
||||
error(0.0008006410260527195) D27 D28 D44 ^ D8 D44
|
||||
error(0.0016000000000002412) D8 D39 D52 D55 D66 L6 L10 ^ D35 D52 D66
|
||||
error(0.0016000000000002412) D38 D44 D71 ^ D8 D44
|
||||
error(0.0016000000000002412) D39 D45 D52 D55 D61 D66 L8 L11 ^ D8 D45 D61 L6 L8 L10 L11
|
||||
error(0.007755948445696716) D8 D44
|
||||
error(0.003990405122050568) D44 D45 D61 L6 L8 L10 L11 ^ D8 D44
|
||||
error(0.0008006410260527195) D9 D10 D62 L6 ^ D26 D62
|
||||
error(0.0016000000000002412) D9 D46 D62 L6 ^ D10 D46
|
||||
error(0.005182100480000431) D9 D18 D49 D71 L4 L5 L10 ^ D12 D49 D71
|
||||
error(0.0016000000000002412) D15 D36 D45 L2 L3 ^ D9 D45
|
||||
error(0.0016000000000002412) D18 D46 D49 D62 D71 L4 L5 L6 L10 ^ D9 D46 D62 L6
|
||||
error(0.0008006410260527195) D28 D29 D45 ^ D9 D45
|
||||
error(0.0016000000000002412) D9 D40 D53 D56 D67 L6 L8 L9 L10 L11 ^ D30 D53 D67
|
||||
error(0.0016000000000002412) D39 D45 D66 ^ D9 D45
|
||||
error(0.0016000000000002412) D40 D46 D53 D56 D62 D67 L8 L9 L10 L11 ^ D9 D46 D62 L6
|
||||
error(0.007755948445696716) D9 D45
|
||||
error(0.003990405122050568) D45 D46 D62 L6 ^ D9 D45
|
||||
error(0.0008006410260527195) D10 D11 D63 L7 ^ D27 D63
|
||||
error(0.0016000000000002412) D10 D47 D63 L7 ^ D11 D47
|
||||
error(0.005182100480000431) D10 D19 D50 D66 L4 L5 L6 L8 L10 ^ D13 D50 D66 L8
|
||||
error(0.0016000000000002412) D16 D37 D46 L0 L2 L3 L6 L10 ^ D10 D46
|
||||
error(0.0016000000000002412) D19 D47 D50 D63 D66 L4 L5 L6 L7 L8 L10 ^ D10 D47 D63 L7
|
||||
error(0.0008006410260527195) D24 D29 D46 ^ D10 D46
|
||||
error(0.0016000000000002412) D10 D41 D48 D57 D68 L7 L9 L10 L11 ^ D31 D48 D68
|
||||
error(0.0016000000000002412) D40 D46 D67 ^ D10 D46
|
||||
error(0.0016000000000002412) D41 D47 D48 D57 D63 D68 L9 L10 L11 ^ D10 D47 D63 L7
|
||||
error(0.007755948445696716) D10 D46
|
||||
error(0.003990405122050568) D46 D47 D63 L7 ^ D10 D46
|
||||
error(0.005182100480000431) D11 D20 D51 D67 L5 L6 L8 L10 L11 ^ D14 D51 D67 L9
|
||||
error(0.0016000000000002412) D17 D38 D47 L0 L1 L2 L3 L8 L9 L11 ^ D11 D47
|
||||
error(0.0016000000000002412) D20 D42 D51 D64 D67 L5 L6 L8 L10 L11 ^ D11 D42 D64
|
||||
error(0.0008006410260527195) D24 D25 D47 ^ D11 D47
|
||||
error(0.0016000000000002412) D11 D36 D49 D58 D69 ^ D32 D49 D69
|
||||
error(0.0016000000000002412) D36 D42 D49 D58 D64 D69 ^ D11 D42 D64
|
||||
error(0.0016000000000002412) D41 D47 D68 ^ D11 D47
|
||||
error(0.003990405122050568) D42 D47 D64 ^ D11 D47
|
||||
error(0.007755948445696716) D11 D47
|
||||
error(0.0008006410260527195) D12 D13 D71 ^ D35 D71
|
||||
error(0.0016000000000002412) D12 D49 D71 ^ D13 D49
|
||||
error(0.0008006410260527195) D12 D17 D70 ^ D34 D70
|
||||
error(0.0016000000000002412) D17 D48 D70 ^ D12 D48
|
||||
error(0.0016000000000002412) D18 D45 D48 L4 L5 L10 ^ D12 D48
|
||||
error(0.005182100480000431) D12 D27 D38 D58 L9 L10 L11 ^ D21 D38 D58
|
||||
error(0.0016000000000002412) D27 D38 D49 D58 D71 L9 L10 L11 ^ D12 D49 D71
|
||||
error(0.0008006410260527195) D31 D32 D48 ^ D12 D48
|
||||
error(0.0016000000000002412) D39 D42 D48 L0 L1 L3 L6 L8 L9 L10 L11 ^ D12 D48
|
||||
error(0.0016000000000002412) D40 D43 D49 D56 D65 D71 L0 L1 L3 ^ D12 D49 D71
|
||||
error(0.007755948445696716) D12 D48
|
||||
error(0.003990405122050568) D48 D49 D71 ^ D12 D48
|
||||
error(0.0008006410260527195) D13 D14 D66 L8 ^ D30 D66
|
||||
error(0.0016000000000002412) D13 D50 D66 L8 ^ D14 D50
|
||||
error(0.0016000000000002412) D19 D46 D49 L4 L5 L6 L10 ^ D13 D49
|
||||
error(0.005182100480000431) D13 D28 D39 D59 L9 L10 L11 ^ D22 D39 D59
|
||||
error(0.0016000000000002412) D28 D39 D50 D59 D66 L8 L9 L10 L11 ^ D13 D50 D66 L8
|
||||
error(0.0008006410260527195) D32 D33 D49 ^ D13 D49
|
||||
error(0.0016000000000002412) D40 D43 D49 L0 L1 ^ D13 D49
|
||||
error(0.0016000000000002412) D41 D44 D50 D57 D60 D66 L0 L1 L6 L10 ^ D13 D50 D66 L8
|
||||
error(0.007755948445696716) D13 D49
|
||||
error(0.003990405122050568) D49 D50 D66 L8 ^ D13 D49
|
||||
error(0.0008006410260527195) D14 D15 D67 L9 ^ D31 D67
|
||||
error(0.0016000000000002412) D14 D51 D67 L9 ^ D15 D51
|
||||
error(0.0016000000000002412) D20 D47 D50 L5 L6 L8 L9 L10 L11 ^ D14 D50
|
||||
error(0.005182100480000431) D14 D29 D40 D54 L8 L9 L10 L11 ^ D23 D40 D54
|
||||
error(0.0016000000000002412) D29 D40 D51 D54 D67 L8 L10 L11 ^ D14 D51 D67 L9
|
||||
error(0.0008006410260527195) D33 D34 D50 ^ D14 D50
|
||||
error(0.0016000000000002412) D36 D45 D51 D58 D61 D67 L1 L2 L6 L8 L9 L10 L11 ^ D14 D51 D67 L9
|
||||
error(0.0016000000000002412) D41 D44 D50 L1 L2 ^ D14 D50
|
||||
error(0.007755948445696716) D14 D50
|
||||
error(0.003990405122050568) D50 D51 D67 L9 ^ D14 D50
|
||||
error(0.0008006410260527195) D15 D16 D68 L10 ^ D32 D68
|
||||
error(0.0016000000000002412) D15 D52 D68 L10 ^ D16 D52
|
||||
error(0.005182100480000431) D15 D24 D41 D55 L8 L10 L11 ^ D18 D41 D55
|
||||
error(0.0016000000000002412) D21 D42 D51 L7 L9 L10 L11 ^ D15 D51
|
||||
error(0.0016000000000002412) D24 D41 D52 D55 D68 L8 L11 ^ D15 D52 D68 L10
|
||||
error(0.0008006410260527195) D34 D35 D51 ^ D15 D51
|
||||
error(0.0016000000000002412) D36 D45 D51 L2 L3 ^ D15 D51
|
||||
error(0.0016000000000002412) D37 D46 D52 D59 D62 D68 L2 L3 L6 L10 ^ D15 D52 D68 L10
|
||||
error(0.007755948445696716) D15 D51
|
||||
error(0.003990405122050568) D51 D52 D68 L10 ^ D15 D51
|
||||
error(0.0008006410260527195) D16 D17 D69 L11 ^ D33 D69
|
||||
error(0.0016000000000002412) D16 D53 D69 L11 ^ D17 D53
|
||||
error(0.005182100480000431) D16 D25 D36 D56 L8 L11 ^ D19 D36 D56
|
||||
error(0.0016000000000002412) D22 D43 D52 L4 L7 L9 L11 ^ D16 D52
|
||||
error(0.0016000000000002412) D25 D36 D53 D56 D69 L8 ^ D16 D53 D69 L11
|
||||
error(0.0008006410260527195) D30 D35 D52 ^ D16 D52
|
||||
error(0.0016000000000002412) D37 D46 D52 L0 L2 L3 L6 L10 ^ D16 D52
|
||||
error(0.0016000000000002412) D38 D47 D53 D54 D63 D69 L0 L2 L3 L8 L9 L11 ^ D16 D53 D69 L11
|
||||
error(0.007755948445696716) D16 D52
|
||||
error(0.003990405122050568) D52 D53 D69 L11 ^ D16 D52
|
||||
error(0.005182100480000431) D17 D26 D37 D57 L8 L9 L10 L11 ^ D20 D37 D57
|
||||
error(0.0016000000000002412) D23 D44 D53 L4 L5 L6 L8 L11 ^ D17 D53
|
||||
error(0.0016000000000002412) D26 D37 D48 D57 D70 L8 L9 L10 L11 ^ D17 D48 D70
|
||||
error(0.0008006410260527195) D30 D31 D53 ^ D17 D53
|
||||
error(0.0016000000000002412) D38 D47 D53 L0 L1 L2 L3 L8 L9 L11 ^ D17 D53
|
||||
error(0.0016000000000002412) D39 D42 D48 D55 D64 D70 L0 L1 L2 L3 L6 L8 L9 L10 L11 ^ D17 D48 D70
|
||||
error(0.003990405122050568) D48 D53 D70 ^ D17 D53
|
||||
error(0.007755948445696716) D17 D53
|
||||
error(0.0016000000000002412) D18 D41 D55 ^ D19 D55
|
||||
error(0.0016000000000002412) D23 D40 D54 ^ D18 D54
|
||||
error(0.0016000000000002412) D24 D51 D54 L8 L10 L11 ^ D18 D54
|
||||
error(0.005182100480000431) D18 D33 D44 D64 L1 ^ D27 D44 D64
|
||||
error(0.0016000000000002412) D33 D41 D44 D55 D64 L1 ^ D18 D41 D55
|
||||
error(0.003990405122050568) D41 D54 D55 ^ D18 D54
|
||||
error(0.0016000000000002412) D45 D48 D54 L4 L5 L10 ^ D18 D54
|
||||
error(0.0016000000000002412) D41 D46 D49 D55 D62 D71 L4 L5 L6 L10 ^ D18 D41 D55
|
||||
error(0.007755948445696716) D18 D54
|
||||
error(0.0016000000000002412) D19 D36 D56 ^ D20 D56
|
||||
error(0.0016000000000002412) D25 D52 D55 L8 L11 ^ D19 D55
|
||||
error(0.005182100480000431) D19 D34 D45 D65 L2 ^ D28 D45 D65
|
||||
error(0.0016000000000002412) D34 D36 D45 D56 D65 L2 ^ D19 D36 D56
|
||||
error(0.003990405122050568) D36 D55 D56 ^ D19 D55
|
||||
error(0.0016000000000002412) D46 D49 D55 L4 L5 L6 L10 ^ D19 D55
|
||||
error(0.0016000000000002412) D36 D47 D50 D56 D63 D66 L4 L5 L6 L7 L8 L10 ^ D19 D36 D56
|
||||
error(0.007755948445696716) D19 D55
|
||||
error(0.0016000000000002412) D20 D37 D57 ^ D21 D57
|
||||
error(0.0016000000000002412) D26 D53 D56 L8 L9 L10 L11 ^ D20 D56
|
||||
error(0.005182100480000431) D20 D35 D46 D60 L3 ^ D29 D46 D60
|
||||
error(0.0016000000000002412) D35 D37 D46 D57 D60 L3 ^ D20 D37 D57
|
||||
error(0.003990405122050568) D37 D56 D57 ^ D20 D56
|
||||
error(0.0016000000000002412) D37 D42 D51 D57 D64 D67 L5 L6 L8 L10 L11 ^ D20 D37 D57
|
||||
error(0.0016000000000002412) D47 D50 D56 L5 L6 L8 L9 L10 L11 ^ D20 D56
|
||||
error(0.007755948445696716) D20 D56
|
||||
error(0.0016000000000002412) D21 D38 D58 ^ D22 D58
|
||||
error(0.005182100480000431) D21 D30 D47 D61 L0 L2 L6 L10 ^ D24 D47 D61
|
||||
error(0.0016000000000002412) D27 D48 D57 L9 L10 L11 ^ D21 D57
|
||||
error(0.0016000000000002412) D30 D38 D47 D58 D61 L0 L2 L6 L10 ^ D21 D38 D58
|
||||
error(0.003990405122050568) D38 D57 D58 ^ D21 D57
|
||||
error(0.0016000000000002412) D42 D51 D57 L7 L9 L10 L11 ^ D21 D57
|
||||
error(0.0016000000000002412) D38 D43 D52 D58 D65 D68 L7 L9 L11 ^ D21 D38 D58
|
||||
error(0.007755948445696716) D21 D57
|
||||
error(0.0016000000000002412) D22 D39 D59 ^ D23 D59
|
||||
error(0.005182100480000431) D22 D31 D42 D62 L1 L3 L6 L8 L9 L10 L11 ^ D25 D42 D62
|
||||
error(0.0016000000000002412) D28 D49 D58 L9 L10 L11 ^ D22 D58
|
||||
error(0.0016000000000002412) D31 D39 D42 D59 D62 L1 L3 L6 L8 L9 L10 L11 ^ D22 D39 D59
|
||||
error(0.003990405122050568) D39 D58 D59 ^ D22 D58
|
||||
error(0.0016000000000002412) D43 D52 D58 L4 L7 L9 L11 ^ D22 D58
|
||||
error(0.0016000000000002412) D39 D44 D53 D59 D60 D69 L4 L6 L8 L11 ^ D22 D39 D59
|
||||
error(0.007755948445696716) D22 D58
|
||||
error(0.005182100480000431) D23 D32 D43 D63 L0 ^ D26 D43 D63
|
||||
error(0.0016000000000002412) D29 D50 D59 L8 L9 L10 L11 ^ D23 D59
|
||||
error(0.0016000000000002412) D32 D40 D43 D54 D63 L0 ^ D23 D40 D54
|
||||
error(0.003990405122050568) D40 D54 D59 ^ D23 D59
|
||||
error(0.0016000000000002412) D44 D53 D59 L4 L5 L6 L8 L11 ^ D23 D59
|
||||
error(0.0016000000000002412) D40 D45 D48 D54 D61 D70 L4 L5 L10 ^ D23 D40 D54
|
||||
error(0.007755948445696716) D23 D59
|
||||
error(0.0016000000000002412) D24 D47 D61 ^ D25 D61
|
||||
error(0.0016000000000002412) D29 D46 D60 ^ D24 D60
|
||||
error(0.0016000000000002412) D30 D57 D60 L0 L2 L6 L10 ^ D24 D60
|
||||
error(0.0016000000000002412) D41 D47 D52 D55 D61 D68 L8 L11 ^ D24 D47 D61
|
||||
error(0.003990405122050568) D47 D60 D61 ^ D24 D60
|
||||
error(0.0016000000000002412) D51 D54 D60 L8 L10 L11 ^ D24 D60
|
||||
error(0.007755948445696716) D24 D60
|
||||
error(0.0016000000000002412) D25 D42 D62 ^ D26 D62
|
||||
error(0.0016000000000002412) D31 D58 D61 L1 L3 L6 L8 L9 L10 L11 ^ D25 D61
|
||||
error(0.0016000000000002412) D36 D42 D53 D56 D62 D69 L8 ^ D25 D42 D62
|
||||
error(0.003990405122050568) D42 D61 D62 ^ D25 D61
|
||||
error(0.0016000000000002412) D52 D55 D61 L8 L11 ^ D25 D61
|
||||
error(0.007755948445696716) D25 D61
|
||||
error(0.0016000000000002412) D26 D43 D63 ^ D27 D63
|
||||
error(0.0016000000000002412) D32 D59 D62 L0 ^ D26 D62
|
||||
error(0.0016000000000002412) D37 D43 D48 D57 D63 D70 L8 L9 L10 L11 ^ D26 D43 D63
|
||||
error(0.003990405122050568) D43 D62 D63 ^ D26 D62
|
||||
error(0.0016000000000002412) D53 D56 D62 L8 L9 L10 L11 ^ D26 D62
|
||||
error(0.007755948445696716) D26 D62
|
||||
error(0.0016000000000002412) D27 D44 D64 ^ D28 D64
|
||||
error(0.0016000000000002412) D33 D54 D63 L1 ^ D27 D63
|
||||
error(0.0016000000000002412) D38 D44 D49 D58 D64 D71 L9 L10 L11 ^ D27 D44 D64
|
||||
error(0.003990405122050568) D44 D63 D64 ^ D27 D63
|
||||
error(0.0016000000000002412) D48 D57 D63 L9 L10 L11 ^ D27 D63
|
||||
error(0.007755948445696716) D27 D63
|
||||
error(0.0016000000000002412) D28 D45 D65 ^ D29 D65
|
||||
error(0.0016000000000002412) D34 D55 D64 L2 ^ D28 D64
|
||||
error(0.0016000000000002412) D39 D45 D50 D59 D65 D66 L8 L9 L10 L11 ^ D28 D45 D65
|
||||
error(0.003990405122050568) D45 D64 D65 ^ D28 D64
|
||||
error(0.0016000000000002412) D49 D58 D64 L9 L10 L11 ^ D28 D64
|
||||
error(0.007755948445696716) D28 D64
|
||||
error(0.0016000000000002412) D35 D56 D65 L3 ^ D29 D65
|
||||
error(0.0016000000000002412) D40 D46 D51 D54 D60 D67 L8 L10 L11 ^ D29 D46 D60
|
||||
error(0.003990405122050568) D46 D60 D65 ^ D29 D65
|
||||
error(0.0016000000000002412) D50 D59 D65 L8 L9 L10 L11 ^ D29 D65
|
||||
error(0.007755948445696716) D29 D65
|
||||
error(0.0016000000000002412) D30 D53 D67 ^ D31 D67
|
||||
error(0.0016000000000002412) D35 D52 D66 ^ D30 D66
|
||||
error(0.0016000000000002412) D38 D47 D53 D58 D61 D67 L0 L2 L6 L10 ^ D30 D53 D67
|
||||
error(0.003990405122050568) D53 D66 D67 ^ D30 D66
|
||||
error(0.0016000000000002412) D57 D60 D66 L0 L2 L6 L10 ^ D30 D66
|
||||
error(0.007755948445696716) D30 D66
|
||||
error(0.0016000000000002412) D31 D48 D68 ^ D32 D68
|
||||
error(0.0016000000000002412) D39 D42 D48 D59 D62 D68 L1 L3 L6 L8 L9 L10 L11 ^ D31 D48 D68
|
||||
error(0.003990405122050568) D48 D67 D68 ^ D31 D67
|
||||
error(0.0016000000000002412) D58 D61 D67 L1 L3 L6 L8 L9 L10 L11 ^ D31 D67
|
||||
error(0.007755948445696716) D31 D67
|
||||
error(0.0016000000000002412) D32 D49 D69 ^ D33 D69
|
||||
error(0.0016000000000002412) D40 D43 D49 D54 D63 D69 L0 ^ D32 D49 D69
|
||||
error(0.003990405122050568) D49 D68 D69 ^ D32 D68
|
||||
error(0.0016000000000002412) D59 D62 D68 L0 ^ D32 D68
|
||||
error(0.007755948445696716) D32 D68
|
||||
error(0.0016000000000002412) D33 D50 D70 ^ D34 D70
|
||||
error(0.0016000000000002412) D41 D44 D50 D55 D64 D70 L1 ^ D33 D50 D70
|
||||
error(0.003990405122050568) D50 D69 D70 ^ D33 D69
|
||||
error(0.0016000000000002412) D54 D63 D69 L1 ^ D33 D69
|
||||
error(0.007755948445696716) D33 D69
|
||||
error(0.0016000000000002412) D34 D51 D71 ^ D35 D71
|
||||
error(0.0016000000000002412) D36 D45 D51 D56 D65 D71 L2 ^ D34 D51 D71
|
||||
error(0.003990405122050568) D51 D70 D71 ^ D34 D70
|
||||
error(0.0016000000000002412) D55 D64 D70 L2 ^ D34 D70
|
||||
error(0.007755948445696716) D34 D70
|
||||
error(0.0016000000000002412) D37 D46 D52 D57 D60 D66 L3 ^ D35 D52 D66
|
||||
error(0.003990405122050568) D52 D66 D71 ^ D35 D71
|
||||
error(0.0016000000000002412) D56 D65 D71 L3 ^ D35 D71
|
||||
error(0.007755948445696716) D35 D71
|
||||
error(0.0055792256000001435) D36 D37 D95 ^ D59 D95
|
||||
error(0.0016000000000002412) D36 D73 D95 ^ D37 D73
|
||||
error(0.0055792256000001435) D36 D41 D94 ^ D58 D94
|
||||
error(0.0016000000000002412) D41 D72 D94 ^ D36 D72
|
||||
error(0.0016000000000002412) D36 D42 D69 L9 L10 L11 ^ D49 D58 D64 L9 L10 L11
|
||||
error(0.0016000000000002412) D53 D56 D62 L8 L9 L10 L11 ^ D36 D42 D69 L9 L10 L11
|
||||
error(0.011094623648488388) D42 D69 D73 D95 L9 L10 L11 ^ D36 D73 D95
|
||||
error(0.0016000000000002412) D42 D72 D105 L9 L10 L11 ^ D36 D72
|
||||
error(0.0016000000000002412) D36 D63 D66 L4 L7 L9 L11 ^ D43 D52 D58 L4 L7 L9 L11
|
||||
error(0.011094623648488388) D36 D51 D82 D98 L2 L3 L6 ^ D45 D82 D98 L6
|
||||
error(0.0016000000000002412) D56 D65 D71 L3 ^ D36 D45 D51 L2 L3
|
||||
error(0.0016000000000002412) D36 D45 D51 L2 L3 ^ D58 D61 D67 L1 L3 L6 L8 L9 L10 L11
|
||||
error(0.0016000000000002412) D47 D50 D56 L5 L6 L8 L9 L10 L11 ^ D36 D63 D66 L4 L7 L9 L11
|
||||
error(0.0016000000000002412) D51 D73 D82 D95 D98 L2 L3 L6 ^ D36 D73 D95
|
||||
error(0.0055792256000001435) D55 D56 D72 ^ D36 D72
|
||||
error(0.011094623648488388) D36 D63 D89 D103 L4 L7 L9 L11 ^ D66 D89 D103
|
||||
error(0.0016000000000002412) D36 D80 D89 D100 D103 L4 L7 L9 L11 ^ D63 D80 D100
|
||||
error(0.0016000000000002412) D36 D99 D102 L4 L7 L9 L11 ^ D66 D102
|
||||
error(0.010709412755022537) D36 D72
|
||||
error(0.003990405122050568) D72 D73 D95 ^ D36 D72
|
||||
error(0.0016000000000002412) D73 D80 D89 D95 D100 D103 L4 L7 L9 L11 ^ D36 D73 D95
|
||||
error(0.0016000000000002412) D72 D99 D102 L4 L7 L9 L11 ^ D36 D72
|
||||
error(0.0055792256000001435) D37 D38 D90 L6 L7 L8 L9 L10 ^ D54 D90
|
||||
error(0.0016000000000002412) D37 D74 D90 L6 L7 L8 L9 L10 ^ D38 D74
|
||||
error(0.0016000000000002412) D42 D51 D57 L7 L9 L10 L11 ^ D37 D64 D67 L5 L6 L7 L8 L9
|
||||
error(0.0016000000000002412) D48 D57 D63 L9 L10 L11 ^ D37 D43 D70 L8
|
||||
error(0.0016000000000002412) D37 D43 D70 L8 ^ D50 D59 D65 L8 L9 L10 L11
|
||||
error(0.011094623648488388) D43 D70 D74 D90 L6 L7 L9 L10 ^ D37 D74 D90 L6 L7 L8 L9 L10
|
||||
error(0.0016000000000002412) D43 D73 D106 L8 ^ D37 D73
|
||||
error(0.0016000000000002412) D37 D64 D67 L5 L6 L7 L8 L9 ^ D44 D53 D59 L4 L5 L6 L8 L11
|
||||
error(0.011094623648488388) D37 D52 D83 D99 L0 L2 L3 L6 L7 L10 ^ D46 D83 D99 L7
|
||||
error(0.0016000000000002412) D57 D60 D66 L0 L2 L6 L10 ^ D37 D46 D52 L0 L2 L3 L6 L10
|
||||
error(0.0016000000000002412) D37 D46 D52 L0 L2 L3 L6 L10 ^ D59 D62 D68 L0
|
||||
error(0.0016000000000002412) D52 D74 D83 D90 D99 L0 L2 L3 L8 L9 ^ D37 D74 D90 L6 L7 L8 L9 L10
|
||||
error(0.0055792256000001435) D56 D57 D73 ^ D37 D73
|
||||
error(0.011094623648488388) D37 D64 D84 D104 L5 L6 L7 L8 L9 ^ D67 D84 D104
|
||||
error(0.0016000000000002412) D37 D81 D84 D101 D104 L5 L6 L7 L8 L9 ^ D64 D81 D101
|
||||
error(0.0016000000000002412) D37 D100 D103 L5 L6 L7 L8 L9 ^ D67 D103
|
||||
error(0.010709412755022537) D37 D73
|
||||
error(0.003990405122050568) D73 D74 D90 L6 L7 L8 L9 L10 ^ D37 D73
|
||||
error(0.0016000000000002412) D74 D81 D84 D90 D101 D104 L5 L10 ^ D37 D74 D90 L6 L7 L8 L9 L10
|
||||
error(0.0016000000000002412) D73 D100 D103 L5 L6 L7 L8 L9 ^ D37 D73
|
||||
error(0.0055792256000001435) D38 D39 D91 L6 L10 ^ D55 D91
|
||||
error(0.0016000000000002412) D38 D75 D91 L6 L10 ^ D39 D75
|
||||
error(0.0016000000000002412) D43 D52 D58 L4 L7 L9 L11 ^ D38 D65 D68 L4
|
||||
error(0.0016000000000002412) D49 D58 D64 L9 L10 L11 ^ D38 D44 D71
|
||||
error(0.0016000000000002412) D38 D44 D71 ^ D51 D54 D60 L8 L10 L11
|
||||
error(0.011094623648488388) D44 D71 D75 D91 L6 L10 ^ D38 D75 D91 L6 L10
|
||||
error(0.0016000000000002412) D44 D74 D107 ^ D38 D74
|
||||
error(0.0016000000000002412) D38 D65 D68 L4 ^ D45 D48 D54 L4 L5 L10
|
||||
error(0.011094623648488388) D38 D53 D78 D100 L0 L1 L2 L3 L8 L9 L11 ^ D47 D78 D100
|
||||
error(0.0016000000000002412) D38 D47 D53 L0 L1 L2 L3 L8 L9 L11 ^ D54 D63 D69 L1
|
||||
error(0.0016000000000002412) D58 D61 D67 L1 L3 L6 L8 L9 L10 L11 ^ D38 D47 D53 L0 L1 L2 L3 L8 L9 L11
|
||||
error(0.0016000000000002412) D53 D75 D78 D91 D100 L0 L1 L2 L3 L6 L8 L9 L10 L11 ^ D38 D75 D91 L6 L10
|
||||
error(0.0055792256000001435) D57 D58 D74 ^ D38 D74
|
||||
error(0.011094623648488388) D38 D65 D85 D105 L4 ^ D68 D85 D105
|
||||
error(0.0016000000000002412) D38 D82 D85 D96 D105 L4 ^ D65 D82 D96
|
||||
error(0.0016000000000002412) D38 D101 D104 L4 ^ D68 D104
|
||||
error(0.010709412755022537) D38 D74
|
||||
error(0.003990405122050568) D74 D75 D91 L6 L10 ^ D38 D74
|
||||
error(0.0016000000000002412) D75 D82 D85 D91 D96 D105 L4 L6 L10 ^ D38 D75 D91 L6 L10
|
||||
error(0.0016000000000002412) D74 D101 D104 L4 ^ D38 D74
|
||||
error(0.0055792256000001435) D39 D40 D92 L6 L8 L9 L10 L11 ^ D56 D92
|
||||
error(0.0016000000000002412) D39 D76 D92 L6 L8 L9 L10 L11 ^ D40 D76
|
||||
error(0.011094623648488388) D39 D48 D79 D101 L0 L1 L3 L6 L8 L9 L10 L11 ^ D42 D79 D101
|
||||
error(0.0016000000000002412) D39 D42 D48 L0 L1 L3 L6 L8 L9 L10 L11 ^ D55 D64 D70 L2
|
||||
error(0.0016000000000002412) D59 D62 D68 L0 ^ D39 D42 D48 L0 L1 L3 L6 L8 L9 L10 L11
|
||||
error(0.0016000000000002412) D44 D53 D59 L4 L5 L6 L8 L11 ^ D39 D60 D69 L5
|
||||
error(0.0016000000000002412) D50 D59 D65 L8 L9 L10 L11 ^ D39 D45 D66
|
||||
error(0.0016000000000002412) D39 D45 D66 ^ D52 D55 D61 L8 L11
|
||||
error(0.011094623648488388) D45 D66 D76 D92 L6 L8 L9 L10 L11 ^ D39 D76 D92 L6 L8 L9 L10 L11
|
||||
error(0.0016000000000002412) D45 D75 D102 ^ D39 D75
|
||||
error(0.0016000000000002412) D39 D60 D69 L5 ^ D46 D49 D55 L4 L5 L6 L10
|
||||
error(0.0016000000000002412) D48 D76 D79 D92 D101 L0 L1 L3 ^ D39 D76 D92 L6 L8 L9 L10 L11
|
||||
error(0.0055792256000001435) D58 D59 D75 ^ D39 D75
|
||||
error(0.011094623648488388) D39 D60 D86 D106 L5 ^ D69 D86 D106
|
||||
error(0.0016000000000002412) D39 D83 D86 D97 D106 L5 ^ D60 D83 D97
|
||||
error(0.0016000000000002412) D39 D96 D105 L5 ^ D69 D105
|
||||
error(0.010709412755022537) D39 D75
|
||||
error(0.003990405122050568) D75 D76 D92 L6 L8 L9 L10 L11 ^ D39 D75
|
||||
error(0.0016000000000002412) D76 D83 D86 D92 D97 D106 L5 L6 L8 L9 L10 L11 ^ D39 D76 D92 L6 L8 L9 L10 L11
|
||||
error(0.0016000000000002412) D75 D96 D105 L5 ^ D39 D75
|
||||
error(0.0055792256000001435) D40 D41 D93 L7 L9 L10 L11 ^ D57 D93
|
||||
error(0.0016000000000002412) D40 D77 D93 L7 L9 L10 L11 ^ D41 D77
|
||||
error(0.011094623648488388) D40 D49 D80 D96 L0 L1 L6 L7 L8 L9 L11 ^ D43 D80 D96 L6 L7 L8 L9 L11
|
||||
error(0.0016000000000002412) D54 D63 D69 L1 ^ D40 D43 D49 L0 L1
|
||||
error(0.0016000000000002412) D40 D43 D49 L0 L1 ^ D56 D65 D71 L3
|
||||
error(0.0016000000000002412) D45 D48 D54 L4 L5 L10 ^ D40 D61 D70
|
||||
error(0.0016000000000002412) D51 D54 D60 L8 L10 L11 ^ D40 D46 D67
|
||||
error(0.0016000000000002412) D40 D46 D67 ^ D53 D56 D62 L8 L9 L10 L11
|
||||
error(0.011094623648488388) D46 D67 D77 D93 L7 L9 L10 L11 ^ D40 D77 D93 L7 L9 L10 L11
|
||||
error(0.0016000000000002412) D46 D76 D103 ^ D40 D76
|
||||
error(0.0016000000000002412) D40 D61 D70 ^ D47 D50 D56 L5 L6 L8 L9 L10 L11
|
||||
error(0.0016000000000002412) D49 D77 D80 D93 D96 L0 L1 L6 L8 L10 ^ D40 D77 D93 L7 L9 L10 L11
|
||||
error(0.0055792256000001435) D54 D59 D76 ^ D40 D76
|
||||
error(0.011094623648488388) D40 D61 D87 D107 ^ D70 D87 D107
|
||||
error(0.0016000000000002412) D40 D78 D87 D98 D107 ^ D61 D78 D98
|
||||
error(0.0016000000000002412) D40 D97 D106 ^ D70 D106
|
||||
error(0.010709412755022537) D40 D76
|
||||
error(0.003990405122050568) D76 D77 D93 L7 L9 L10 L11 ^ D40 D76
|
||||
error(0.0016000000000002412) D77 D78 D87 D93 D98 D107 L7 L9 L10 L11 ^ D40 D77 D93 L7 L9 L10 L11
|
||||
error(0.0016000000000002412) D76 D97 D106 ^ D40 D76
|
||||
error(0.0016000000000002412) D41 D62 D71 ^ D42 D51 D57 L7 L9 L10 L11
|
||||
error(0.011094623648488388) D41 D50 D81 D97 L1 L2 L6 L8 L10 L11 ^ D44 D81 D97 L6 L8 L10 L11
|
||||
error(0.0016000000000002412) D55 D64 D70 L2 ^ D41 D44 D50 L1 L2
|
||||
error(0.0016000000000002412) D41 D44 D50 L1 L2 ^ D57 D60 D66 L0 L2 L6 L10
|
||||
error(0.0016000000000002412) D46 D49 D55 L4 L5 L6 L10 ^ D41 D62 D71
|
||||
error(0.0016000000000002412) D41 D47 D68 ^ D48 D57 D63 L9 L10 L11
|
||||
error(0.0016000000000002412) D52 D55 D61 L8 L11 ^ D41 D47 D68
|
||||
error(0.011094623648488388) D47 D68 D72 D94 ^ D41 D72 D94
|
||||
error(0.0016000000000002412) D47 D77 D104 ^ D41 D77
|
||||
error(0.0016000000000002412) D50 D72 D81 D94 D97 L1 L2 L6 L8 L10 L11 ^ D41 D72 D94
|
||||
error(0.0055792256000001435) D54 D55 D77 ^ D41 D77
|
||||
error(0.011094623648488388) D41 D62 D88 D102 ^ D71 D88 D102
|
||||
error(0.0016000000000002412) D41 D79 D88 D99 D102 ^ D62 D79 D99
|
||||
error(0.0016000000000002412) D41 D98 D107 ^ D71 D107
|
||||
error(0.003990405122050568) D72 D77 D94 ^ D41 D77
|
||||
error(0.010709412755022537) D41 D77
|
||||
error(0.0016000000000002412) D72 D79 D88 D94 D99 D102 ^ D41 D72 D94
|
||||
error(0.0016000000000002412) D77 D98 D107 ^ D41 D77
|
||||
error(0.0055792256000001435) D42 D43 D101 ^ D65 D101
|
||||
error(0.0016000000000002412) D42 D79 D101 ^ D43 D79
|
||||
error(0.0055792256000001435) D42 D47 D100 ^ D64 D100
|
||||
error(0.0016000000000002412) D47 D78 D100 ^ D42 D78
|
||||
error(0.0016000000000002412) D48 D75 D78 L0 L1 L3 L6 L8 L9 L10 L11 ^ D42 D78
|
||||
error(0.011094623648488388) D42 D57 D88 D104 L7 L9 L11 ^ D51 D88 D104 L10
|
||||
error(0.0016000000000002412) D57 D79 D88 D101 D104 L7 L9 L11 ^ D42 D79 D101
|
||||
error(0.0055792256000001435) D61 D62 D78 ^ D42 D78
|
||||
error(0.0016000000000002412) D42 D73 D86 D95 D106 L9 L10 L11 ^ D69 D86 D106
|
||||
error(0.0016000000000002412) D72 D78 D105 L9 L10 L11 ^ D42 D78
|
||||
error(0.0016000000000002412) D73 D79 D86 D95 D101 D106 L9 L10 L11 ^ D42 D79 D101
|
||||
error(0.010709412755022537) D42 D78
|
||||
error(0.003990405122050568) D78 D79 D101 ^ D42 D78
|
||||
error(0.0055792256000001435) D43 D44 D96 L6 L7 L8 L9 L11 ^ D60 D96
|
||||
error(0.0016000000000002412) D43 D80 D96 L6 L7 L8 L9 L11 ^ D44 D80
|
||||
error(0.0016000000000002412) D49 D76 D79 L0 L1 ^ D43 D79
|
||||
error(0.011094623648488388) D43 D58 D89 D105 L4 L7 L9 ^ D52 D89 D105 L11
|
||||
error(0.0016000000000002412) D58 D80 D89 D96 D105 L4 L6 L8 L11 ^ D43 D80 D96 L6 L7 L8 L9 L11
|
||||
error(0.0055792256000001435) D62 D63 D79 ^ D43 D79
|
||||
error(0.0016000000000002412) D43 D74 D87 D90 D107 L6 L7 L9 L10 ^ D70 D87 D107
|
||||
error(0.0016000000000002412) D73 D79 D106 L8 ^ D43 D79
|
||||
error(0.0016000000000002412) D74 D80 D87 D90 D96 D107 L8 L10 L11 ^ D43 D80 D96 L6 L7 L8 L9 L11
|
||||
error(0.010709412755022537) D43 D79
|
||||
error(0.003990405122050568) D79 D80 D96 L6 L7 L8 L9 L11 ^ D43 D79
|
||||
error(0.0055792256000001435) D44 D45 D97 L6 L8 L10 L11 ^ D61 D97
|
||||
error(0.0016000000000002412) D44 D81 D97 L6 L8 L10 L11 ^ D45 D81
|
||||
error(0.0016000000000002412) D50 D77 D80 L1 L2 ^ D44 D80
|
||||
error(0.011094623648488388) D44 D59 D84 D106 L4 L5 L6 L8 L11 ^ D53 D84 D106
|
||||
error(0.0016000000000002412) D59 D81 D84 D97 D106 L4 L5 L10 ^ D44 D81 D97 L6 L8 L10 L11
|
||||
error(0.0055792256000001435) D63 D64 D80 ^ D44 D80
|
||||
error(0.0016000000000002412) D44 D75 D88 D91 D102 L6 L10 ^ D71 D88 D102
|
||||
error(0.0016000000000002412) D74 D80 D107 ^ D44 D80
|
||||
error(0.0016000000000002412) D75 D81 D88 D91 D97 D102 L8 L11 ^ D44 D81 D97 L6 L8 L10 L11
|
||||
error(0.010709412755022537) D44 D80
|
||||
error(0.003990405122050568) D80 D81 D97 L6 L8 L10 L11 ^ D44 D80
|
||||
error(0.0055792256000001435) D45 D46 D98 L6 ^ D62 D98
|
||||
error(0.0016000000000002412) D45 D82 D98 L6 ^ D46 D82
|
||||
error(0.011094623648488388) D45 D54 D85 D107 L4 L5 L10 ^ D48 D85 D107
|
||||
error(0.0016000000000002412) D51 D72 D81 L2 L3 ^ D45 D81
|
||||
error(0.0016000000000002412) D54 D82 D85 D98 D107 L4 L5 L6 L10 ^ D45 D82 D98 L6
|
||||
error(0.0055792256000001435) D64 D65 D81 ^ D45 D81
|
||||
error(0.0016000000000002412) D45 D76 D89 D92 D103 L6 L8 L9 L10 L11 ^ D66 D89 D103
|
||||
error(0.0016000000000002412) D75 D81 D102 ^ D45 D81
|
||||
error(0.0016000000000002412) D76 D82 D89 D92 D98 D103 L8 L9 L10 L11 ^ D45 D82 D98 L6
|
||||
error(0.010709412755022537) D45 D81
|
||||
error(0.003990405122050568) D81 D82 D98 L6 ^ D45 D81
|
||||
error(0.0055792256000001435) D46 D47 D99 L7 ^ D63 D99
|
||||
error(0.0016000000000002412) D46 D83 D99 L7 ^ D47 D83
|
||||
error(0.011094623648488388) D46 D55 D86 D102 L4 L5 L6 L8 L10 ^ D49 D86 D102 L8
|
||||
error(0.0016000000000002412) D52 D73 D82 L0 L2 L3 L6 L10 ^ D46 D82
|
||||
error(0.0016000000000002412) D55 D83 D86 D99 D102 L4 L5 L6 L7 L8 L10 ^ D46 D83 D99 L7
|
||||
error(0.0055792256000001435) D60 D65 D82 ^ D46 D82
|
||||
error(0.0016000000000002412) D46 D77 D84 D93 D104 L7 L9 L10 L11 ^ D67 D84 D104
|
||||
error(0.0016000000000002412) D76 D82 D103 ^ D46 D82
|
||||
error(0.0016000000000002412) D77 D83 D84 D93 D99 D104 L9 L10 L11 ^ D46 D83 D99 L7
|
||||
error(0.010709412755022537) D46 D82
|
||||
error(0.003990405122050568) D82 D83 D99 L7 ^ D46 D82
|
||||
error(0.011094623648488388) D47 D56 D87 D103 L5 L6 L8 L10 L11 ^ D50 D87 D103 L9
|
||||
error(0.0016000000000002412) D53 D74 D83 L0 L1 L2 L3 L8 L9 L11 ^ D47 D83
|
||||
error(0.0016000000000002412) D56 D78 D87 D100 D103 L5 L6 L8 L10 L11 ^ D47 D78 D100
|
||||
error(0.0055792256000001435) D60 D61 D83 ^ D47 D83
|
||||
error(0.0016000000000002412) D47 D72 D85 D94 D105 ^ D68 D85 D105
|
||||
error(0.0016000000000002412) D72 D78 D85 D94 D100 D105 ^ D47 D78 D100
|
||||
error(0.0016000000000002412) D77 D83 D104 ^ D47 D83
|
||||
error(0.003990405122050568) D78 D83 D100 ^ D47 D83
|
||||
error(0.010709412755022537) D47 D83
|
||||
error(0.0055792256000001435) D48 D49 D107 ^ D71 D107
|
||||
error(0.0016000000000002412) D48 D85 D107 ^ D49 D85
|
||||
error(0.0055792256000001435) D48 D53 D106 ^ D70 D106
|
||||
error(0.0016000000000002412) D53 D84 D106 ^ D48 D84
|
||||
error(0.0016000000000002412) D54 D81 D84 L4 L5 L10 ^ D48 D84
|
||||
error(0.011094623648488388) D48 D63 D74 D94 L9 L10 L11 ^ D57 D74 D94
|
||||
error(0.0016000000000002412) D63 D74 D85 D94 D107 L9 L10 L11 ^ D48 D85 D107
|
||||
error(0.0055792256000001435) D67 D68 D84 ^ D48 D84
|
||||
error(0.0016000000000002412) D75 D78 D84 L0 L1 L3 L6 L8 L9 L10 L11 ^ D48 D84
|
||||
error(0.0016000000000002412) D76 D79 D85 D92 D101 D107 L0 L1 L3 ^ D48 D85 D107
|
||||
error(0.010709412755022537) D48 D84
|
||||
error(0.003990405122050568) D84 D85 D107 ^ D48 D84
|
||||
error(0.0055792256000001435) D49 D50 D102 L8 ^ D66 D102
|
||||
error(0.0016000000000002412) D49 D86 D102 L8 ^ D50 D86
|
||||
error(0.0016000000000002412) D55 D82 D85 L4 L5 L6 L10 ^ D49 D85
|
||||
error(0.011094623648488388) D49 D64 D75 D95 L9 L10 L11 ^ D58 D75 D95
|
||||
error(0.0016000000000002412) D64 D75 D86 D95 D102 L8 L9 L10 L11 ^ D49 D86 D102 L8
|
||||
error(0.0055792256000001435) D68 D69 D85 ^ D49 D85
|
||||
error(0.0016000000000002412) D76 D79 D85 L0 L1 ^ D49 D85
|
||||
error(0.0016000000000002412) D77 D80 D86 D93 D96 D102 L0 L1 L6 L10 ^ D49 D86 D102 L8
|
||||
error(0.010709412755022537) D49 D85
|
||||
error(0.003990405122050568) D85 D86 D102 L8 ^ D49 D85
|
||||
error(0.0055792256000001435) D50 D51 D103 L9 ^ D67 D103
|
||||
error(0.0016000000000002412) D50 D87 D103 L9 ^ D51 D87
|
||||
error(0.0016000000000002412) D56 D83 D86 L5 L6 L8 L9 L10 L11 ^ D50 D86
|
||||
error(0.011094623648488388) D50 D65 D76 D90 L8 L9 L10 L11 ^ D59 D76 D90
|
||||
error(0.0016000000000002412) D65 D76 D87 D90 D103 L8 L10 L11 ^ D50 D87 D103 L9
|
||||
error(0.0055792256000001435) D69 D70 D86 ^ D50 D86
|
||||
error(0.0016000000000002412) D72 D81 D87 D94 D97 D103 L1 L2 L6 L8 L9 L10 L11 ^ D50 D87 D103 L9
|
||||
error(0.0016000000000002412) D77 D80 D86 L1 L2 ^ D50 D86
|
||||
error(0.010709412755022537) D50 D86
|
||||
error(0.003990405122050568) D86 D87 D103 L9 ^ D50 D86
|
||||
error(0.0055792256000001435) D51 D52 D104 L10 ^ D68 D104
|
||||
error(0.0016000000000002412) D51 D88 D104 L10 ^ D52 D88
|
||||
error(0.011094623648488388) D51 D60 D77 D91 L8 L10 L11 ^ D54 D77 D91
|
||||
error(0.0016000000000002412) D57 D78 D87 L7 L9 L10 L11 ^ D51 D87
|
||||
error(0.0016000000000002412) D60 D77 D88 D91 D104 L8 L11 ^ D51 D88 D104 L10
|
||||
error(0.0055792256000001435) D70 D71 D87 ^ D51 D87
|
||||
error(0.0016000000000002412) D72 D81 D87 L2 L3 ^ D51 D87
|
||||
error(0.0016000000000002412) D73 D82 D88 D95 D98 D104 L2 L3 L6 L10 ^ D51 D88 D104 L10
|
||||
error(0.010709412755022537) D51 D87
|
||||
error(0.003990405122050568) D87 D88 D104 L10 ^ D51 D87
|
||||
error(0.0055792256000001435) D52 D53 D105 L11 ^ D69 D105
|
||||
error(0.0016000000000002412) D52 D89 D105 L11 ^ D53 D89
|
||||
error(0.011094623648488388) D52 D61 D72 D92 L8 L11 ^ D55 D72 D92
|
||||
error(0.0016000000000002412) D58 D79 D88 L4 L7 L9 L11 ^ D52 D88
|
||||
error(0.0016000000000002412) D61 D72 D89 D92 D105 L8 ^ D52 D89 D105 L11
|
||||
error(0.0055792256000001435) D66 D71 D88 ^ D52 D88
|
||||
error(0.0016000000000002412) D73 D82 D88 L0 L2 L3 L6 L10 ^ D52 D88
|
||||
error(0.0016000000000002412) D74 D83 D89 D90 D99 D105 L0 L2 L3 L8 L9 L11 ^ D52 D89 D105 L11
|
||||
error(0.010709412755022537) D52 D88
|
||||
error(0.003990405122050568) D88 D89 D105 L11 ^ D52 D88
|
||||
error(0.011094623648488388) D53 D62 D73 D93 L8 L9 L10 L11 ^ D56 D73 D93
|
||||
error(0.0016000000000002412) D59 D80 D89 L4 L5 L6 L8 L11 ^ D53 D89
|
||||
error(0.0016000000000002412) D62 D73 D84 D93 D106 L8 L9 L10 L11 ^ D53 D84 D106
|
||||
error(0.0055792256000001435) D66 D67 D89 ^ D53 D89
|
||||
error(0.0016000000000002412) D74 D83 D89 L0 L1 L2 L3 L8 L9 L11 ^ D53 D89
|
||||
error(0.0016000000000002412) D75 D78 D84 D91 D100 D106 L0 L1 L2 L3 L6 L8 L9 L10 L11 ^ D53 D84 D106
|
||||
error(0.003990405122050568) D84 D89 D106 ^ D53 D89
|
||||
error(0.010709412755022537) D53 D89
|
||||
error(0.0016000000000002412) D54 D77 D91 ^ D55 D91
|
||||
error(0.0016000000000002412) D59 D76 D90 ^ D54 D90
|
||||
error(0.0016000000000002412) D60 D87 D90 L8 L10 L11 ^ D54 D90
|
||||
error(0.011094623648488388) D54 D69 D80 D100 L1 ^ D63 D80 D100
|
||||
error(0.0016000000000002412) D69 D77 D80 D91 D100 L1 ^ D54 D77 D91
|
||||
error(0.003990405122050568) D77 D90 D91 ^ D54 D90
|
||||
error(0.0016000000000002412) D81 D84 D90 L4 L5 L10 ^ D54 D90
|
||||
error(0.0016000000000002412) D77 D82 D85 D91 D98 D107 L4 L5 L6 L10 ^ D54 D77 D91
|
||||
error(0.010709412755022537) D54 D90
|
||||
error(0.0016000000000002412) D55 D72 D92 ^ D56 D92
|
||||
error(0.0016000000000002412) D61 D88 D91 L8 L11 ^ D55 D91
|
||||
error(0.011094623648488388) D55 D70 D81 D101 L2 ^ D64 D81 D101
|
||||
error(0.0016000000000002412) D70 D72 D81 D92 D101 L2 ^ D55 D72 D92
|
||||
error(0.003990405122050568) D72 D91 D92 ^ D55 D91
|
||||
error(0.0016000000000002412) D82 D85 D91 L4 L5 L6 L10 ^ D55 D91
|
||||
error(0.0016000000000002412) D72 D83 D86 D92 D99 D102 L4 L5 L6 L7 L8 L10 ^ D55 D72 D92
|
||||
error(0.010709412755022537) D55 D91
|
||||
error(0.0016000000000002412) D56 D73 D93 ^ D57 D93
|
||||
error(0.0016000000000002412) D62 D89 D92 L8 L9 L10 L11 ^ D56 D92
|
||||
error(0.011094623648488388) D56 D71 D82 D96 L3 ^ D65 D82 D96
|
||||
error(0.0016000000000002412) D71 D73 D82 D93 D96 L3 ^ D56 D73 D93
|
||||
error(0.003990405122050568) D73 D92 D93 ^ D56 D92
|
||||
error(0.0016000000000002412) D73 D78 D87 D93 D100 D103 L5 L6 L8 L10 L11 ^ D56 D73 D93
|
||||
error(0.0016000000000002412) D83 D86 D92 L5 L6 L8 L9 L10 L11 ^ D56 D92
|
||||
error(0.010709412755022537) D56 D92
|
||||
error(0.0016000000000002412) D57 D74 D94 ^ D58 D94
|
||||
error(0.011094623648488388) D57 D66 D83 D97 L0 L2 L6 L10 ^ D60 D83 D97
|
||||
error(0.0016000000000002412) D63 D84 D93 L9 L10 L11 ^ D57 D93
|
||||
error(0.0016000000000002412) D66 D74 D83 D94 D97 L0 L2 L6 L10 ^ D57 D74 D94
|
||||
error(0.003990405122050568) D74 D93 D94 ^ D57 D93
|
||||
error(0.0016000000000002412) D78 D87 D93 L7 L9 L10 L11 ^ D57 D93
|
||||
error(0.0016000000000002412) D74 D79 D88 D94 D101 D104 L7 L9 L11 ^ D57 D74 D94
|
||||
error(0.010709412755022537) D57 D93
|
||||
error(0.0016000000000002412) D58 D75 D95 ^ D59 D95
|
||||
error(0.011094623648488388) D58 D67 D78 D98 L1 L3 L6 L8 L9 L10 L11 ^ D61 D78 D98
|
||||
error(0.0016000000000002412) D64 D85 D94 L9 L10 L11 ^ D58 D94
|
||||
error(0.0016000000000002412) D67 D75 D78 D95 D98 L1 L3 L6 L8 L9 L10 L11 ^ D58 D75 D95
|
||||
error(0.003990405122050568) D75 D94 D95 ^ D58 D94
|
||||
error(0.0016000000000002412) D79 D88 D94 L4 L7 L9 L11 ^ D58 D94
|
||||
error(0.0016000000000002412) D75 D80 D89 D95 D96 D105 L4 L6 L8 L11 ^ D58 D75 D95
|
||||
error(0.010709412755022537) D58 D94
|
||||
error(0.011094623648488388) D59 D68 D79 D99 L0 ^ D62 D79 D99
|
||||
error(0.0016000000000002412) D65 D86 D95 L8 L9 L10 L11 ^ D59 D95
|
||||
error(0.0016000000000002412) D68 D76 D79 D90 D99 L0 ^ D59 D76 D90
|
||||
error(0.003990405122050568) D76 D90 D95 ^ D59 D95
|
||||
error(0.0016000000000002412) D80 D89 D95 L4 L5 L6 L8 L11 ^ D59 D95
|
||||
error(0.0016000000000002412) D76 D81 D84 D90 D97 D106 L4 L5 L10 ^ D59 D76 D90
|
||||
error(0.010709412755022537) D59 D95
|
||||
error(0.0016000000000002412) D60 D83 D97 ^ D61 D97
|
||||
error(0.0016000000000002412) D65 D82 D96 ^ D60 D96
|
||||
error(0.0016000000000002412) D66 D93 D96 L0 L2 L6 L10 ^ D60 D96
|
||||
error(0.0016000000000002412) D77 D83 D88 D91 D97 D104 L8 L11 ^ D60 D83 D97
|
||||
error(0.003990405122050568) D83 D96 D97 ^ D60 D96
|
||||
error(0.0016000000000002412) D87 D90 D96 L8 L10 L11 ^ D60 D96
|
||||
error(0.010709412755022537) D60 D96
|
||||
error(0.0016000000000002412) D61 D78 D98 ^ D62 D98
|
||||
error(0.0016000000000002412) D67 D94 D97 L1 L3 L6 L8 L9 L10 L11 ^ D61 D97
|
||||
error(0.0016000000000002412) D72 D78 D89 D92 D98 D105 L8 ^ D61 D78 D98
|
||||
error(0.003990405122050568) D78 D97 D98 ^ D61 D97
|
||||
error(0.0016000000000002412) D88 D91 D97 L8 L11 ^ D61 D97
|
||||
error(0.010709412755022537) D61 D97
|
||||
error(0.0016000000000002412) D62 D79 D99 ^ D63 D99
|
||||
error(0.0016000000000002412) D68 D95 D98 L0 ^ D62 D98
|
||||
error(0.0016000000000002412) D73 D79 D84 D93 D99 D106 L8 L9 L10 L11 ^ D62 D79 D99
|
||||
error(0.003990405122050568) D79 D98 D99 ^ D62 D98
|
||||
error(0.0016000000000002412) D89 D92 D98 L8 L9 L10 L11 ^ D62 D98
|
||||
error(0.010709412755022537) D62 D98
|
||||
error(0.0016000000000002412) D63 D80 D100 ^ D64 D100
|
||||
error(0.0016000000000002412) D69 D90 D99 L1 ^ D63 D99
|
||||
error(0.0016000000000002412) D74 D80 D85 D94 D100 D107 L9 L10 L11 ^ D63 D80 D100
|
||||
error(0.003990405122050568) D80 D99 D100 ^ D63 D99
|
||||
error(0.0016000000000002412) D84 D93 D99 L9 L10 L11 ^ D63 D99
|
||||
error(0.010709412755022537) D63 D99
|
||||
error(0.0016000000000002412) D64 D81 D101 ^ D65 D101
|
||||
error(0.0016000000000002412) D70 D91 D100 L2 ^ D64 D100
|
||||
error(0.0016000000000002412) D75 D81 D86 D95 D101 D102 L8 L9 L10 L11 ^ D64 D81 D101
|
||||
error(0.003990405122050568) D81 D100 D101 ^ D64 D100
|
||||
error(0.0016000000000002412) D85 D94 D100 L9 L10 L11 ^ D64 D100
|
||||
error(0.010709412755022537) D64 D100
|
||||
error(0.0016000000000002412) D71 D92 D101 L3 ^ D65 D101
|
||||
error(0.0016000000000002412) D76 D82 D87 D90 D96 D103 L8 L10 L11 ^ D65 D82 D96
|
||||
error(0.003990405122050568) D82 D96 D101 ^ D65 D101
|
||||
error(0.0016000000000002412) D86 D95 D101 L8 L9 L10 L11 ^ D65 D101
|
||||
error(0.010709412755022537) D65 D101
|
||||
error(0.0016000000000002412) D66 D89 D103 ^ D67 D103
|
||||
error(0.0016000000000002412) D71 D88 D102 ^ D66 D102
|
||||
error(0.0016000000000002412) D74 D83 D89 D94 D97 D103 L0 L2 L6 L10 ^ D66 D89 D103
|
||||
error(0.003990405122050568) D89 D102 D103 ^ D66 D102
|
||||
error(0.0016000000000002412) D93 D96 D102 L0 L2 L6 L10 ^ D66 D102
|
||||
error(0.010709412755022537) D66 D102
|
||||
error(0.0016000000000002412) D67 D84 D104 ^ D68 D104
|
||||
error(0.0016000000000002412) D75 D78 D84 D95 D98 D104 L1 L3 L6 L8 L9 L10 L11 ^ D67 D84 D104
|
||||
error(0.003990405122050568) D84 D103 D104 ^ D67 D103
|
||||
error(0.0016000000000002412) D94 D97 D103 L1 L3 L6 L8 L9 L10 L11 ^ D67 D103
|
||||
error(0.010709412755022537) D67 D103
|
||||
error(0.0016000000000002412) D68 D85 D105 ^ D69 D105
|
||||
error(0.0016000000000002412) D76 D79 D85 D90 D99 D105 L0 ^ D68 D85 D105
|
||||
error(0.003990405122050568) D85 D104 D105 ^ D68 D104
|
||||
error(0.0016000000000002412) D95 D98 D104 L0 ^ D68 D104
|
||||
error(0.010709412755022537) D68 D104
|
||||
error(0.0016000000000002412) D69 D86 D106 ^ D70 D106
|
||||
error(0.0016000000000002412) D77 D80 D86 D91 D100 D106 L1 ^ D69 D86 D106
|
||||
error(0.003990405122050568) D86 D105 D106 ^ D69 D105
|
||||
error(0.0016000000000002412) D90 D99 D105 L1 ^ D69 D105
|
||||
error(0.010709412755022537) D69 D105
|
||||
error(0.0016000000000002412) D70 D87 D107 ^ D71 D107
|
||||
error(0.0016000000000002412) D72 D81 D87 D92 D101 D107 L2 ^ D70 D87 D107
|
||||
error(0.003990405122050568) D87 D106 D107 ^ D70 D106
|
||||
error(0.0016000000000002412) D91 D100 D106 L2 ^ D70 D106
|
||||
error(0.010709412755022537) D70 D106
|
||||
error(0.0016000000000002412) D73 D82 D88 D93 D96 D102 L3 ^ D71 D88 D102
|
||||
error(0.003990405122050568) D88 D102 D107 ^ D71 D107
|
||||
error(0.0016000000000002412) D92 D101 D107 L3 ^ D71 D107
|
||||
error(0.010709412755022537) D71 D107
|
||||
error(0.004786248708100618) D72 D73 D95
|
||||
error(0.004786248708100618) D72 D77 D94
|
||||
error(0.0016000000000002412) D72 D78 D105 L9 L10 L11 ^ D85 D94 D100 L9 L10 L11
|
||||
error(0.0016000000000002412) D89 D92 D98 L8 L9 L10 L11 ^ D72 D78 D105 L9 L10 L11
|
||||
error(0.005974443501562319) D72 D78 D105 L9 L10 L11
|
||||
error(0.0016000000000002412) D72 D99 D102 L4 L7 L9 L11 ^ D79 D88 D94 L4 L7 L9 L11
|
||||
error(0.005974443501562319) D72 D81 D87 L2 L3
|
||||
error(0.0016000000000002412) D92 D101 D107 L3 ^ D72 D81 D87 L2 L3
|
||||
error(0.0016000000000002412) D72 D81 D87 L2 L3 ^ D94 D97 D103 L1 L3 L6 L8 L9 L10 L11
|
||||
error(0.0016000000000002412) D83 D86 D92 L5 L6 L8 L9 L10 L11 ^ D72 D99 D102 L4 L7 L9 L11
|
||||
error(0.004786248708100618) D72 D91 D92
|
||||
error(0.005974443501562319) D72 D99 D102 L4 L7 L9 L11
|
||||
error(0.003) D72 D108
|
||||
error(0.004786248708100618) D73 D74 D90 L6 L7 L8 L9 L10
|
||||
error(0.0016000000000002412) D78 D87 D93 L7 L9 L10 L11 ^ D73 D100 D103 L5 L6 L7 L8 L9
|
||||
error(0.0016000000000002412) D84 D93 D99 L9 L10 L11 ^ D73 D79 D106 L8
|
||||
error(0.0016000000000002412) D73 D79 D106 L8 ^ D86 D95 D101 L8 L9 L10 L11
|
||||
error(0.005974443501562319) D73 D79 D106 L8
|
||||
error(0.0016000000000002412) D73 D100 D103 L5 L6 L7 L8 L9 ^ D80 D89 D95 L4 L5 L6 L8 L11
|
||||
error(0.005974443501562319) D73 D82 D88 L0 L2 L3 L6 L10
|
||||
error(0.0016000000000002412) D93 D96 D102 L0 L2 L6 L10 ^ D73 D82 D88 L0 L2 L3 L6 L10
|
||||
error(0.0016000000000002412) D73 D82 D88 L0 L2 L3 L6 L10 ^ D95 D98 D104 L0
|
||||
error(0.004786248708100618) D73 D92 D93
|
||||
error(0.005974443501562319) D73 D100 D103 L5 L6 L7 L8 L9
|
||||
error(0.003) D73 D109
|
||||
error(0.004786248708100618) D74 D75 D91 L6 L10
|
||||
error(0.0016000000000002412) D79 D88 D94 L4 L7 L9 L11 ^ D74 D101 D104 L4
|
||||
error(0.0016000000000002412) D85 D94 D100 L9 L10 L11 ^ D74 D80 D107
|
||||
error(0.0016000000000002412) D74 D80 D107 ^ D87 D90 D96 L8 L10 L11
|
||||
error(0.005974443501562319) D74 D80 D107
|
||||
error(0.0016000000000002412) D74 D101 D104 L4 ^ D81 D84 D90 L4 L5 L10
|
||||
error(0.005974443501562319) D74 D83 D89 L0 L1 L2 L3 L8 L9 L11
|
||||
error(0.0016000000000002412) D74 D83 D89 L0 L1 L2 L3 L8 L9 L11 ^ D90 D99 D105 L1
|
||||
error(0.0016000000000002412) D94 D97 D103 L1 L3 L6 L8 L9 L10 L11 ^ D74 D83 D89 L0 L1 L2 L3 L8 L9 L11
|
||||
error(0.004786248708100618) D74 D93 D94
|
||||
error(0.005974443501562319) D74 D101 D104 L4
|
||||
error(0.003) D74 D110
|
||||
error(0.004786248708100618) D75 D76 D92 L6 L8 L9 L10 L11
|
||||
error(0.005974443501562319) D75 D78 D84 L0 L1 L3 L6 L8 L9 L10 L11
|
||||
error(0.0016000000000002412) D75 D78 D84 L0 L1 L3 L6 L8 L9 L10 L11 ^ D91 D100 D106 L2
|
||||
error(0.0016000000000002412) D95 D98 D104 L0 ^ D75 D78 D84 L0 L1 L3 L6 L8 L9 L10 L11
|
||||
error(0.0016000000000002412) D80 D89 D95 L4 L5 L6 L8 L11 ^ D75 D96 D105 L5
|
||||
error(0.0016000000000002412) D86 D95 D101 L8 L9 L10 L11 ^ D75 D81 D102
|
||||
error(0.0016000000000002412) D75 D81 D102 ^ D88 D91 D97 L8 L11
|
||||
error(0.005974443501562319) D75 D81 D102
|
||||
error(0.0016000000000002412) D75 D96 D105 L5 ^ D82 D85 D91 L4 L5 L6 L10
|
||||
error(0.004786248708100618) D75 D94 D95
|
||||
error(0.005974443501562319) D75 D96 D105 L5
|
||||
error(0.003) D75 D111
|
||||
error(0.004786248708100618) D76 D77 D93 L7 L9 L10 L11
|
||||
error(0.005974443501562319) D76 D79 D85 L0 L1
|
||||
error(0.0016000000000002412) D90 D99 D105 L1 ^ D76 D79 D85 L0 L1
|
||||
error(0.0016000000000002412) D76 D79 D85 L0 L1 ^ D92 D101 D107 L3
|
||||
error(0.0016000000000002412) D81 D84 D90 L4 L5 L10 ^ D76 D97 D106
|
||||
error(0.0016000000000002412) D87 D90 D96 L8 L10 L11 ^ D76 D82 D103
|
||||
error(0.0016000000000002412) D76 D82 D103 ^ D89 D92 D98 L8 L9 L10 L11
|
||||
error(0.005974443501562319) D76 D82 D103
|
||||
error(0.0016000000000002412) D76 D97 D106 ^ D83 D86 D92 L5 L6 L8 L9 L10 L11
|
||||
error(0.004786248708100618) D76 D90 D95
|
||||
error(0.005974443501562319) D76 D97 D106
|
||||
error(0.003) D76 D112
|
||||
error(0.0016000000000002412) D77 D98 D107 ^ D78 D87 D93 L7 L9 L10 L11
|
||||
error(0.005974443501562319) D77 D80 D86 L1 L2
|
||||
error(0.0016000000000002412) D91 D100 D106 L2 ^ D77 D80 D86 L1 L2
|
||||
error(0.0016000000000002412) D77 D80 D86 L1 L2 ^ D93 D96 D102 L0 L2 L6 L10
|
||||
error(0.0016000000000002412) D82 D85 D91 L4 L5 L6 L10 ^ D77 D98 D107
|
||||
error(0.0016000000000002412) D77 D83 D104 ^ D84 D93 D99 L9 L10 L11
|
||||
error(0.0016000000000002412) D88 D91 D97 L8 L11 ^ D77 D83 D104
|
||||
error(0.005974443501562319) D77 D83 D104
|
||||
error(0.004786248708100618) D77 D90 D91
|
||||
error(0.005974443501562319) D77 D98 D107
|
||||
error(0.003) D77 D113
|
||||
error(0.004786248708100618) D78 D79 D101
|
||||
error(0.004786248708100618) D78 D83 D100
|
||||
error(0.005974443501562319) D78 D87 D93 L7 L9 L10 L11
|
||||
error(0.004786248708100618) D78 D97 D98
|
||||
error(0.003) D78 D114
|
||||
error(0.004786248708100618) D79 D80 D96 L6 L7 L8 L9 L11
|
||||
error(0.005974443501562319) D79 D88 D94 L4 L7 L9 L11
|
||||
error(0.004786248708100618) D79 D98 D99
|
||||
error(0.003) D79 D115
|
||||
error(0.004786248708100618) D80 D81 D97 L6 L8 L10 L11
|
||||
error(0.005974443501562319) D80 D89 D95 L4 L5 L6 L8 L11
|
||||
error(0.004786248708100618) D80 D99 D100
|
||||
error(0.003) D80 D116
|
||||
error(0.004786248708100618) D81 D82 D98 L6
|
||||
error(0.005974443501562319) D81 D84 D90 L4 L5 L10
|
||||
error(0.004786248708100618) D81 D100 D101
|
||||
error(0.003) D81 D117
|
||||
error(0.004786248708100618) D82 D83 D99 L7
|
||||
error(0.005974443501562319) D82 D85 D91 L4 L5 L6 L10
|
||||
error(0.004786248708100618) D82 D96 D101
|
||||
error(0.003) D82 D118
|
||||
error(0.005974443501562319) D83 D86 D92 L5 L6 L8 L9 L10 L11
|
||||
error(0.004786248708100618) D83 D96 D97
|
||||
error(0.003) D83 D119
|
||||
error(0.004786248708100618) D84 D85 D107
|
||||
error(0.004786248708100618) D84 D89 D106
|
||||
error(0.005974443501562319) D84 D93 D99 L9 L10 L11
|
||||
error(0.004786248708100618) D84 D103 D104
|
||||
error(0.003) D84 D120
|
||||
error(0.004786248708100618) D85 D86 D102 L8
|
||||
error(0.005974443501562319) D85 D94 D100 L9 L10 L11
|
||||
error(0.004786248708100618) D85 D104 D105
|
||||
error(0.003) D85 D121
|
||||
error(0.004786248708100618) D86 D87 D103 L9
|
||||
error(0.005974443501562319) D86 D95 D101 L8 L9 L10 L11
|
||||
error(0.004786248708100618) D86 D105 D106
|
||||
error(0.003) D86 D122
|
||||
error(0.004786248708100618) D87 D88 D104 L10
|
||||
error(0.005974443501562319) D87 D90 D96 L8 L10 L11
|
||||
error(0.004786248708100618) D87 D106 D107
|
||||
error(0.003) D87 D123
|
||||
error(0.004786248708100618) D88 D89 D105 L11
|
||||
error(0.005974443501562319) D88 D91 D97 L8 L11
|
||||
error(0.004786248708100618) D88 D102 D107
|
||||
error(0.003) D88 D124
|
||||
error(0.005974443501562319) D89 D92 D98 L8 L9 L10 L11
|
||||
error(0.004786248708100618) D89 D102 D103
|
||||
error(0.003) D89 D125
|
||||
error(0.005974443501562319) D90 D99 D105 L1
|
||||
error(0.003) D90 D126
|
||||
error(0.005974443501562319) D91 D100 D106 L2
|
||||
error(0.003) D91 D127
|
||||
error(0.005974443501562319) D92 D101 D107 L3
|
||||
error(0.003) D92 D128
|
||||
error(0.005974443501562319) D93 D96 D102 L0 L2 L6 L10
|
||||
error(0.003) D93 D129
|
||||
error(0.005974443501562319) D94 D97 D103 L1 L3 L6 L8 L9 L10 L11
|
||||
error(0.003) D94 D130
|
||||
error(0.005974443501562319) D95 D98 D104 L0
|
||||
error(0.003) D95 D131
|
||||
error(0.003) D96 D132
|
||||
error(0.003) D97 D133
|
||||
error(0.003) D98 D134
|
||||
error(0.003) D99 D135
|
||||
error(0.003) D100 D136
|
||||
error(0.003) D101 D137
|
||||
error(0.003) D102 D138
|
||||
error(0.003) D103 D139
|
||||
error(0.003) D104 D140
|
||||
error(0.003) D105 D141
|
||||
error(0.003) D106 D142
|
||||
error(0.003) D107 D143
|
||||
10
wai/quantum-conformance/qec-text/models/decomposed.dem
Normal file
10
wai/quantum-conformance/qec-text/models/decomposed.dem
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
detector(0, 0, 0) D0
|
||||
detector(1, 0, 0) D1
|
||||
error[y](0.001) D0 D1 ^ D2 L0
|
||||
repeat 3 {
|
||||
error(0.002) D0 ^ D1
|
||||
error[meas](0.003) D0 D2
|
||||
detector(0, 0, 1) D2
|
||||
shift_detectors(0, 0, 1) 2
|
||||
}
|
||||
logical_observable L1
|
||||
243
wai/quantum-conformance/qec-text/models/surface_z_d3_r3.dem
Normal file
243
wai/quantum-conformance/qec-text/models/surface_z_d3_r3.dem
Normal file
|
|
@ -0,0 +1,243 @@
|
|||
detector(0, 4, 0) D0
|
||||
detector(2, 2, 0) D1
|
||||
detector(4, 4, 0) D2
|
||||
detector(6, 2, 0) D3
|
||||
detector(2, 0, 1) D4
|
||||
detector(2, 2, 1) D5
|
||||
detector(4, 2, 1) D6
|
||||
detector(6, 2, 1) D7
|
||||
detector(0, 4, 1) D8
|
||||
detector(2, 4, 1) D9
|
||||
detector(4, 4, 1) D10
|
||||
detector(4, 6, 1) D11
|
||||
detector(2, 0, 2) D12
|
||||
detector(2, 2, 2) D13
|
||||
detector(4, 2, 2) D14
|
||||
detector(6, 2, 2) D15
|
||||
detector(0, 4, 2) D16
|
||||
detector(2, 4, 2) D17
|
||||
detector(4, 4, 2) D18
|
||||
detector(4, 6, 2) D19
|
||||
detector(0, 4, 3) D20
|
||||
detector(2, 2, 3) D21
|
||||
detector(4, 4, 3) D22
|
||||
detector(6, 2, 3) D23
|
||||
error(0.0019311827343108832) D0
|
||||
error(0.0019311827343108832) D0 D1
|
||||
error(0.0025292021333335906) D0 D8
|
||||
error(0.0041195878521462686) D1 L0
|
||||
error(0.0019311827343108832) D1 D2
|
||||
error(0.0007997866287259494) D1 D4 L0
|
||||
error(0.00040005335705146287) D1 D5 ^ D4
|
||||
error(0.00013338669987627175) D1 D8 ^ D4
|
||||
error(0.002661914109358091) D1 D5
|
||||
error(0.00040005335705146287) D1 D8
|
||||
error(0.004053430763428667) D2
|
||||
error(0.0021968903111113714) D2 D3
|
||||
error(0.0005333333333335915) D2 D3 ^ D6
|
||||
error(0.0005999599875496199) D2 D5
|
||||
error(0.00020006670521226594) D2 D5 ^ D6
|
||||
error(0.00020006670521226594) D2 D5 ^ D6 D9
|
||||
error(0.00006669779853446522) D2 D5 ^ D9
|
||||
error(0.00006669779853446522) D2 D6
|
||||
error(0.00006669779853446522) D2 D8 ^ D6
|
||||
error(0.00006669779853446522) D2 D8 ^ D6 D9
|
||||
error(0.00006669779853446522) D2 ^ D6 D9
|
||||
error(0.00020006670521226594) D2 D10 ^ D6 D9
|
||||
error(0.00020006670521226594) D2 D10 ^ D6
|
||||
error(0.00020006670521226594) D2 D8
|
||||
error(0.00020006670521226594) D2 D8 ^ D9
|
||||
error(0.0004666977902295048) D2 D9
|
||||
error(0.00006669779853446522) D2 D10 ^ D9
|
||||
error(0.002595562547439372) D2 D10
|
||||
error(0.0019311827343108832) D3 L0
|
||||
error(0.00026673781572913573) D3 D5
|
||||
error(0.00026673781572913573) D3 D5 ^ D6
|
||||
error(0.00026673781572913573) D3 D6 L0
|
||||
error(0.00026673781572913573) D3 D7 ^ D6
|
||||
error(0.00026673781572913573) D3 D10 ^ D6
|
||||
error(0.002263671931417482) D3 D7
|
||||
error(0.00026673781572913573) D3 D10
|
||||
error(0.004846777716843442) D4
|
||||
error(0.000866422177760745) D4 D5 L0
|
||||
error(0.0006000044497843357) D5 L0 ^ D4 D6
|
||||
error(0.00013338669987627175) D5 D8 ^ D4
|
||||
error(0.00026673781572913573) D5 L0 ^ D4 D12
|
||||
error(0.0006000044497843357) D4 D6
|
||||
error(0.0035900839416838073) D4 D12
|
||||
error(0.0016648672681700714) D5 L0
|
||||
error(0.00026673781572913573) D5 D6 L0
|
||||
error(0.00006669779853446522) D5 D8 ^ D6
|
||||
error(0.00006669779853446522) D5 D8 ^ D6 D9
|
||||
error(0.00006669779853446522) D5 L0 ^ D6 D9
|
||||
error(0.0006000044497843357) D5 D10 ^ D6 D9
|
||||
error(0.00020006670521226594) D5 D13 ^ D6 D9
|
||||
error(0.00020006670521226594) D5 L0 ^ D6 D12
|
||||
error(0.00006669779853446522) D5 D13 ^ D6 D12
|
||||
error(0.000933004399391494) D5 D8
|
||||
error(0.0007998310731698395) D5 D8 ^ D9
|
||||
error(0.00006669779853446522) D5 L0 ^ D9 D12
|
||||
error(0.00013338669987627175) D5 D13 ^ D9 D12
|
||||
error(0.00006669779853446522) D5 D16 ^ D9 D12
|
||||
error(0.00006669779853446522) D5 D13 ^ D9
|
||||
error(0.00020006670521226594) D5 D16 ^ D9
|
||||
error(0.0006000044497843357) D5 D10
|
||||
error(0.00026673781572913573) D5 D12 L0
|
||||
error(0.00020006670521226594) D5 D13 ^ D12
|
||||
error(0.00006669779853446522) D5 D16 ^ D12
|
||||
error(0.002396454743836685) D5 D13
|
||||
error(0.00020006670521226594) D5 D16
|
||||
error(0.0053749851910576685) D6
|
||||
error(0.0005333778015001649) D6 D7 L0
|
||||
error(0.00006669779853446522) D7 D10 ^ D6 D9
|
||||
error(0.00006669779853446522) D7 D13 ^ D6 D9
|
||||
error(0.0006000044497843357) D7 D10 ^ D6
|
||||
error(0.00020006670521226594) D7 D10 ^ D6 D14
|
||||
error(0.00006669779853446522) D7 D13 ^ D6
|
||||
error(0.00013338669987627175) D7 D13 ^ D6 D14
|
||||
error(0.00006669779853446522) D7 L0 ^ D6 D14
|
||||
error(0.000866422177760745) D6 D9
|
||||
error(0.00006669779853446522) D10 ^ D6 D9
|
||||
error(0.00020006670521226594) D10 D13 ^ D6 D9
|
||||
error(0.00006669779853446522) D13 L0 ^ D6 D9
|
||||
error(0.00006669779853446522) D6 D10
|
||||
error(0.00006669779853446522) D10 D13 ^ D6 D14
|
||||
error(0.0003334000326134109) D6 D12
|
||||
error(0.00020006670521226594) D13 L0 ^ D6 D12
|
||||
error(0.00006669779853446522) D6 D13 L0
|
||||
error(0.00020006670521226594) D13 L0 ^ D6 D14
|
||||
error(0.003722512902661559) D6 D14
|
||||
error(0.0006666222103669779) D7 L0
|
||||
error(0.00006669779853446522) D7 D10 ^ D9 D14
|
||||
error(0.00006669779853446522) D7 D13 ^ D9 D14
|
||||
error(0.0007332310844336718) D7 D10
|
||||
error(0.00006669779853446522) D7 D10 ^ D11
|
||||
error(0.00006669779853446522) D7 D10 ^ D11 D14
|
||||
error(0.00020006670521226594) D7 D10 ^ D14
|
||||
error(0.00006669779853446522) D7 D18 ^ D11 D14
|
||||
error(0.00006669779853446522) D7 D18 ^ D11
|
||||
error(0.00013338669987627175) D7 D13
|
||||
error(0.00006669779853446522) D7 D13 ^ D14
|
||||
error(0.00020006670521226594) D7 D14 L0
|
||||
error(0.00026673781572913573) D7 D15 ^ D14
|
||||
error(0.00020006670521226594) D7 D18 ^ D14
|
||||
error(0.002263671931417482) D7 D15
|
||||
error(0.00020006670521226594) D7 D18
|
||||
error(0.000866422177760745) D8
|
||||
error(0.0006000044497843357) D8 D9
|
||||
error(0.00026673781572913573) D8 D16 ^ D9
|
||||
error(0.002263671931417482) D8 D16
|
||||
error(0.005440965990233335) D9
|
||||
error(0.00026673781572913573) D9 D10
|
||||
error(0.0006000044497843357) D10 ^ D9 D11
|
||||
error(0.00013338669987627175) D10 D13 ^ D9 D14
|
||||
error(0.00006669779853446522) D10 D13 ^ D9 D17
|
||||
error(0.00006669779853446522) D10 D16 ^ D9 D14
|
||||
error(0.00006669779853446522) D10 D16 ^ D9
|
||||
error(0.00013338669987627175) D10 D16 ^ D9 D17
|
||||
error(0.00020006670521226594) D10 ^ D9 D17
|
||||
error(0.0006000044497843357) D9 D11
|
||||
error(0.00013338669987627175) D9 D12
|
||||
error(0.00006669779853446522) D13 L0 ^ D9 D12
|
||||
error(0.00006669779853446522) D13 D16 ^ D9 D12
|
||||
error(0.00006669779853446522) D13 D16 ^ D9 D14
|
||||
error(0.00020006670521226594) D13 D16 ^ D9
|
||||
error(0.00020006670521226594) D13 D16 ^ D9 D17
|
||||
error(0.00013338669987627175) D9 D14
|
||||
error(0.00020006670521226594) D9 D16
|
||||
error(0.00006669779853446522) D16 ^ D9 D17
|
||||
error(0.003722512902661559) D9 D17
|
||||
error(0.0017978098257450767) D10
|
||||
error(0.000866422177760745) D10 D11
|
||||
error(0.00006669779853446522) D10 ^ D11 D14
|
||||
error(0.00013338669987627175) D10 D18 ^ D11 D14
|
||||
error(0.00020006670521226594) D10 ^ D11 D17
|
||||
error(0.00006669779853446522) D10 D18 ^ D11 D17
|
||||
error(0.00020006670521226594) D10 D18 ^ D11
|
||||
error(0.00040005335705146287) D10 D13
|
||||
error(0.00020006670521226594) D10 D13 ^ D14 D17
|
||||
error(0.00006669779853446522) D10 D16 ^ D14 D17
|
||||
error(0.00006669779853446522) D10 ^ D14 D17
|
||||
error(0.00020006670521226594) D10 D18 ^ D14 D17
|
||||
error(0.00006669779853446522) D10 D18 ^ D14
|
||||
error(0.00013338669987627175) D10 D16
|
||||
error(0.00006669779853446522) D10 D16 ^ D17
|
||||
error(0.00006669779853446522) D10 D17
|
||||
error(0.002396454743836685) D10 D18
|
||||
error(0.004384172093469955) D11
|
||||
error(0.00013338669987627175) D11 D14
|
||||
error(0.00006669779853446522) D18 ^ D11 D14
|
||||
error(0.0003334000326134109) D11 D17
|
||||
error(0.00020006670521226594) D18 ^ D11 D17
|
||||
error(0.00026673781572913573) D11 D18
|
||||
error(0.00026673781572913573) D18 ^ D11 D19
|
||||
error(0.0035900839416838073) D11 D19
|
||||
error(0.004384172093469953) D12
|
||||
error(0.000866422177760745) D12 D13 L0
|
||||
error(0.0006000044497843357) D13 L0 ^ D12 D14
|
||||
error(0.00006669779853446522) D13 D16 ^ D12
|
||||
error(0.0006000044497843357) D12 D14
|
||||
error(0.0017978098257450765) D13 L0
|
||||
error(0.00026673781572913573) D13 D14 L0
|
||||
error(0.00006669779853446522) D13 D16 ^ D14 D17
|
||||
error(0.00006669779853446522) D13 L0 ^ D14 D17
|
||||
error(0.0006000044497843357) D13 D18 ^ D14 D17
|
||||
error(0.00020006670521226594) D13 D21 ^ D14 D17
|
||||
error(0.00006669779853446522) D13 D21 ^ D14
|
||||
error(0.0007332310844336718) D13 D16
|
||||
error(0.0006000044497843357) D13 D16 ^ D17
|
||||
error(0.00006669779853446522) D13 D17 L0
|
||||
error(0.00026673781572913573) D13 D20 ^ D17
|
||||
error(0.00020006670521226594) D13 D21 ^ D17
|
||||
error(0.0006000044497843357) D13 D18
|
||||
error(0.00026673781572913573) D13 D20
|
||||
error(0.002595562547439372) D13 D21
|
||||
error(0.0054409659902333336) D14
|
||||
error(0.0006000044497843357) D14 D15 L0
|
||||
error(0.00006669779853446522) D15 D18 ^ D14 D17
|
||||
error(0.00006669779853446522) D15 D21 ^ D14 D17
|
||||
error(0.0007998310731698394) D15 D18 ^ D14
|
||||
error(0.00020006670521226594) D15 D21 ^ D14
|
||||
error(0.000866422177760745) D14 D17
|
||||
error(0.00006669779853446522) D18 ^ D14 D17
|
||||
error(0.00020006670521226594) D18 D21 ^ D14 D17
|
||||
error(0.00006669779853446522) D21 L0 ^ D14 D17
|
||||
error(0.00006669779853446522) D18 D21 ^ D14
|
||||
error(0.0004666977902295048) D14 D21 L0
|
||||
error(0.000866422177760745) D15 L0
|
||||
error(0.00006669779853446522) D15 D18 ^ D17
|
||||
error(0.00006669779853446522) D15 D21 ^ D17
|
||||
error(0.000933004399391494) D15 D18
|
||||
error(0.00013338669987627175) D15 D18 ^ D19
|
||||
error(0.00013338669987627175) D15 D22 ^ D19
|
||||
error(0.00020006670521226594) D15 D21
|
||||
error(0.00040005335705146287) D15 D22
|
||||
error(0.0025292021333335906) D15 D23
|
||||
error(0.0006666222103669779) D16
|
||||
error(0.0005333778015001649) D16 D17
|
||||
error(0.00026673781572913573) D16 D20 ^ D17
|
||||
error(0.002263671931417482) D16 D20
|
||||
error(0.005374985191057667) D17
|
||||
error(0.00026673781572913573) D17 D18
|
||||
error(0.0006000044497843357) D18 ^ D17 D19
|
||||
error(0.00026673781572913573) D18 D20 ^ D17
|
||||
error(0.00020006670521226594) D18 D21 ^ D17
|
||||
error(0.0006000044497843357) D17 D19
|
||||
error(0.00026673781572913573) D17 D20
|
||||
error(0.0005333333333335915) D20 D21 ^ D17
|
||||
error(0.00006669779853446522) D17 D21 L0
|
||||
error(0.0016648672681700714) D18
|
||||
error(0.000866422177760745) D18 D19
|
||||
error(0.00040005335705146287) D18 D22 ^ D19
|
||||
error(0.00026673781572913573) D18 D20
|
||||
error(0.0005999599875496199) D18 D21
|
||||
error(0.002661914109358091) D18 D22
|
||||
error(0.0048467777168434405) D19
|
||||
error(0.0007997866287259494) D19 D22
|
||||
error(0.0012662043400976774) D20
|
||||
error(0.0015322666666669244) D20 D21
|
||||
error(0.002728256820270593) D21 L0
|
||||
error(0.0012662043400976774) D21 D22
|
||||
error(0.0027945906813575607) D22
|
||||
error(0.0012662043400976774) D22 D23
|
||||
error(0.0012662043400976774) D23 L0
|
||||
101
wai/quantum-conformance/qec-text/models/surface_z_d5_r1.dem
Normal file
101
wai/quantum-conformance/qec-text/models/surface_z_d5_r1.dem
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
detector(0, 4, 0) D0
|
||||
detector(0, 8, 0) D1
|
||||
detector(2, 2, 0) D2
|
||||
detector(2, 6, 0) D3
|
||||
detector(4, 4, 0) D4
|
||||
detector(4, 8, 0) D5
|
||||
detector(6, 2, 0) D6
|
||||
detector(6, 6, 0) D7
|
||||
detector(8, 4, 0) D8
|
||||
detector(8, 8, 0) D9
|
||||
detector(10, 2, 0) D10
|
||||
detector(10, 6, 0) D11
|
||||
detector(0, 4, 1) D12
|
||||
detector(0, 8, 1) D13
|
||||
detector(2, 2, 1) D14
|
||||
detector(2, 6, 1) D15
|
||||
detector(4, 4, 1) D16
|
||||
detector(4, 8, 1) D17
|
||||
detector(6, 2, 1) D18
|
||||
detector(6, 6, 1) D19
|
||||
detector(8, 4, 1) D20
|
||||
detector(8, 8, 1) D21
|
||||
detector(10, 2, 1) D22
|
||||
detector(10, 6, 1) D23
|
||||
error(0.003858066319639164) D0 D2
|
||||
error(0.003858066319639164) D0 D3
|
||||
error(0.005050150399999852) D0 D12
|
||||
error(0.003858066319639164) D1
|
||||
error(0.003858066319639164) D1 D3
|
||||
error(0.005050150399999852) D1 D13
|
||||
error(0.009784660897067653) D2 L0
|
||||
error(0.003858066319639164) D2 D4
|
||||
error(0.0010666666666665158) D2 D12
|
||||
error(0.006106043412479702) D2 D14
|
||||
error(0.005444873457208561) D3 D4
|
||||
error(0.003858066319639164) D3 D5
|
||||
error(0.001599146363016048) D3 D12
|
||||
error(0.0010666666666665158) D3 D13
|
||||
error(0.006106043412479702) D3 D15
|
||||
error(0.005444873457208561) D4 D6
|
||||
error(0.003858066319639164) D4 D7
|
||||
error(0.0010666666666665158) D4 D12
|
||||
error(0.0021310577777774765) D4 D14
|
||||
error(0.0010666666666665158) D4 D15
|
||||
error(0.006106043412479702) D4 D16
|
||||
error(0.009260926411047818) D5
|
||||
error(0.005444873457208561) D5 D7
|
||||
error(0.0010666666666665158) D5 D13
|
||||
error(0.0021310577777774765) D5 D15
|
||||
error(0.006106043412479702) D5 D17
|
||||
error(0.0103078364347041) D6 L0
|
||||
error(0.003858066319639164) D6 D8
|
||||
error(0.0010666666666665158) D6 D14
|
||||
error(0.0010666666666665158) D6 D16
|
||||
error(0.006106043412479702) D6 D18
|
||||
error(0.005444873457208561) D7 D8
|
||||
error(0.003858066319639164) D7 D9
|
||||
error(0.0010666666666665158) D7 D15
|
||||
error(0.0021310577777774765) D7 D16
|
||||
error(0.0010666666666665158) D7 D17
|
||||
error(0.006106043412479702) D7 D19
|
||||
error(0.005444873457208561) D8 D10
|
||||
error(0.003858066319639164) D8 D11
|
||||
error(0.0010666666666665158) D8 D16
|
||||
error(0.0021310577777774765) D8 D18
|
||||
error(0.0010666666666665158) D8 D19
|
||||
error(0.006106043412479702) D8 D20
|
||||
error(0.009260926411047818) D9
|
||||
error(0.005444873457208561) D9 D11
|
||||
error(0.0010666666666665158) D9 D17
|
||||
error(0.0021310577777774765) D9 D19
|
||||
error(0.006106043412479702) D9 D21
|
||||
error(0.0043875669333331545) D10 L0
|
||||
error(0.0010666666666665158) D10 D18
|
||||
error(0.0010666666666665158) D10 D20
|
||||
error(0.005050150399999852) D10 D22
|
||||
error(0.0010666666666665158) D11 D19
|
||||
error(0.001599146363016048) D11 D20
|
||||
error(0.0010666666666665158) D11 D21
|
||||
error(0.005050150399999852) D11 D23
|
||||
error(0.004122533546666367) D12 D14
|
||||
error(0.0025314836092638973) D12 D15
|
||||
error(0.0030623999999998502) D13
|
||||
error(0.004122533546666367) D13 D15
|
||||
error(0.006633144903726212) D14 L0
|
||||
error(0.0025314836092638973) D14 D16
|
||||
error(0.004122533546666367) D15 D16
|
||||
error(0.0025314836092638973) D15 D17
|
||||
error(0.004122533546666367) D16 D18
|
||||
error(0.0025314836092638973) D16 D19
|
||||
error(0.00768566086126478) D17
|
||||
error(0.004122533546666367) D17 D19
|
||||
error(0.006633144903726212) D18 L0
|
||||
error(0.0025314836092638973) D18 D20
|
||||
error(0.004122533546666367) D19 D20
|
||||
error(0.0025314836092638973) D19 D21
|
||||
error(0.0025314836092638973) D20 D22
|
||||
error(0.0025314836092638973) D20 D23
|
||||
error(0.007159683853199596) D21
|
||||
error(0.0025314836092638973) D21 D23
|
||||
error(0.0025314836092638973) D22 L0
|
||||
13
wai/quantum-conformance/qec-text/models/tagged.dem
Normal file
13
wai/quantum-conformance/qec-text/models/tagged.dem
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
detector(2, 0, 0) D0
|
||||
detector(2, 0, 1) D1
|
||||
detector(0, 1) D2
|
||||
error(0.03) L0
|
||||
error(0.02) L1
|
||||
error(0.005) D0
|
||||
error[pair](0.00026673781572913573) D0
|
||||
error[pair](0.00026673781572913573) D0 D2 L0
|
||||
error(0.005) D1
|
||||
error[pair](0.00026673781572913573) D1
|
||||
error[pair](0.00026673781572913573) D1 D2 L0
|
||||
error[leak](0.01) D2 L0
|
||||
error[pair](0.0005333333333335915) D2 L0
|
||||
1
wai/quantum-conformance/qec-text/refuse/empty_part.dem
Normal file
1
wai/quantum-conformance/qec-text/refuse/empty_part.dem
Normal file
|
|
@ -0,0 +1 @@
|
|||
error(0.1) D0 ^ ^ D1
|
||||
2
wai/quantum-conformance/qec-text/refuse/open_tag.circuit
Normal file
2
wai/quantum-conformance/qec-text/refuse/open_tag.circuit
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
R 0
|
||||
X_ERROR[open(0.1) 0
|
||||
3
wai/quantum-conformance/qec-text/refuse/product.circuit
Normal file
3
wai/quantum-conformance/qec-text/refuse/product.circuit
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
R 0 1
|
||||
MPP X0*X1
|
||||
DETECTOR rec[-1]
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
R 0 1
|
||||
CX 0 1
|
||||
OBSERVABLE_INCLUDE(0) X1
|
||||
3
wai/quantum-conformance/qec-text/refuse/record.circuit
Normal file
3
wai/quantum-conformance/qec-text/refuse/record.circuit
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
R 0
|
||||
M 0
|
||||
DETECTOR rec[-1] rec[-2]
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
R 0
|
||||
H 0
|
||||
T 0
|
||||
M 0
|
||||
2
wai/quantum-conformance/qec-text/refuse/unsupported.dem
Normal file
2
wai/quantum-conformance/qec-text/refuse/unsupported.dem
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
error(0.1) D0
|
||||
flip(0.1) D1
|
||||
167
wai/quantum-conformance/qec-text/vectors.json
Normal file
167
wai/quantum-conformance/qec-text/vectors.json
Normal file
|
|
@ -0,0 +1,167 @@
|
|||
{
|
||||
"format": "wai.quantum.qec_text.vectors/1",
|
||||
"circuits": [
|
||||
{
|
||||
"file": "circuits/surface_z_d3_r3.circuit",
|
||||
"qubits": 26,
|
||||
"measurements": 33,
|
||||
"detectors": 24,
|
||||
"observables": 1,
|
||||
"tags": [],
|
||||
"text_blake3": "7d8d4e4823258e7fb4f67f086e6eea262691caac46b70cd80c8e7958c24d5693",
|
||||
"model": "models/surface_z_d3_r3.dem",
|
||||
"model_blake3": "07ffc5e7c94e14281f6912fc14eecacbdf3abfc8e576e833359977db5da5ef2b",
|
||||
"mechanisms": 219,
|
||||
"generator": "quantum_frame::surface_code_memory(3, 3, 0.001)"
|
||||
},
|
||||
{
|
||||
"file": "circuits/surface_z_d5_r1.circuit",
|
||||
"qubits": 64,
|
||||
"measurements": 49,
|
||||
"detectors": 24,
|
||||
"observables": 1,
|
||||
"tags": [],
|
||||
"text_blake3": "2ec297565264f8010295bc64a99540f0af8db80a497f985f5f1274beffef192c",
|
||||
"model": "models/surface_z_d5_r1.dem",
|
||||
"model_blake3": "db42d1f75e3c402ec70c9d8f2170bf04522f84949fa244a070d54b01ca1bfdd7",
|
||||
"mechanisms": 77,
|
||||
"generator": "quantum_frame::surface_code_memory(5, 1, 0.002)"
|
||||
},
|
||||
{
|
||||
"file": "circuits/bb72_z_c2.circuit",
|
||||
"qubits": 144,
|
||||
"measurements": 360,
|
||||
"detectors": 144,
|
||||
"observables": 12,
|
||||
"tags": [],
|
||||
"text_blake3": "4b699abb56acdee368c3877ab2bed66a2246d0e81f7a74627560a1d319bb2222",
|
||||
"model": "models/bb72_z_c2.dem",
|
||||
"model_blake3": "14e19d6784249875062e7e0778ab0783b5c26d3df7b2de8ee8c95b77a78c22f4",
|
||||
"mechanisms": 828,
|
||||
"generator": "quantum_ldpc::memory_circuit(&BbCode::bb72(), 2, 0.003, Basis::Z)"
|
||||
},
|
||||
{
|
||||
"file": "circuits/bb72_x_c1.circuit",
|
||||
"qubits": 144,
|
||||
"measurements": 288,
|
||||
"detectors": 108,
|
||||
"observables": 12,
|
||||
"tags": [],
|
||||
"text_blake3": "2c16a2603cb0f6e060b54042b95c8e38bb8a61b56fb7271adf0a75cae486cccb",
|
||||
"model": "models/bb72_x_c1.dem",
|
||||
"model_blake3": "a71766d109fe7974aaf90fffdd07461af3d6a4fec584a24c6220e7bc5612090f",
|
||||
"mechanisms": 432,
|
||||
"generator": "quantum_ldpc::memory_circuit(&BbCode::bb72(), 1, 0.003, Basis::X)"
|
||||
},
|
||||
{
|
||||
"file": "circuits/tagged.circuit",
|
||||
"qubits": 3,
|
||||
"measurements": 4,
|
||||
"detectors": 3,
|
||||
"observables": 2,
|
||||
"tags": [
|
||||
"prep",
|
||||
"slow",
|
||||
"leak",
|
||||
"pair"
|
||||
],
|
||||
"text_blake3": "30c7fcb9468ae32e0226b3ad615b04653d38c52489412641db5e10cfea68debc",
|
||||
"model": "models/tagged.dem",
|
||||
"model_blake3": "eb62f2e8d90f4f9a121314949852929d390112ef82cef91979ae7bd73182a95f",
|
||||
"mechanisms": 10
|
||||
}
|
||||
],
|
||||
"models": [
|
||||
{
|
||||
"file": "models/surface_z_d3_r3.dem",
|
||||
"detectors": 24,
|
||||
"observables": 1,
|
||||
"mechanisms": 219,
|
||||
"decomposed": 113,
|
||||
"tagged": 0,
|
||||
"text_blake3": "07ffc5e7c94e14281f6912fc14eecacbdf3abfc8e576e833359977db5da5ef2b"
|
||||
},
|
||||
{
|
||||
"file": "models/surface_z_d5_r1.dem",
|
||||
"detectors": 24,
|
||||
"observables": 1,
|
||||
"mechanisms": 77,
|
||||
"decomposed": 0,
|
||||
"tagged": 0,
|
||||
"text_blake3": "db42d1f75e3c402ec70c9d8f2170bf04522f84949fa244a070d54b01ca1bfdd7"
|
||||
},
|
||||
{
|
||||
"file": "models/bb72_z_c2.dem",
|
||||
"detectors": 144,
|
||||
"observables": 12,
|
||||
"mechanisms": 828,
|
||||
"decomposed": 648,
|
||||
"tagged": 0,
|
||||
"text_blake3": "14e19d6784249875062e7e0778ab0783b5c26d3df7b2de8ee8c95b77a78c22f4"
|
||||
},
|
||||
{
|
||||
"file": "models/bb72_x_c1.dem",
|
||||
"detectors": 108,
|
||||
"observables": 12,
|
||||
"mechanisms": 432,
|
||||
"decomposed": 324,
|
||||
"tagged": 0,
|
||||
"text_blake3": "a71766d109fe7974aaf90fffdd07461af3d6a4fec584a24c6220e7bc5612090f"
|
||||
},
|
||||
{
|
||||
"file": "models/tagged.dem",
|
||||
"detectors": 3,
|
||||
"observables": 2,
|
||||
"mechanisms": 10,
|
||||
"decomposed": 0,
|
||||
"tagged": 6,
|
||||
"text_blake3": "eb62f2e8d90f4f9a121314949852929d390112ef82cef91979ae7bd73182a95f"
|
||||
},
|
||||
{
|
||||
"file": "models/decomposed.dem",
|
||||
"detectors": 7,
|
||||
"observables": 2,
|
||||
"mechanisms": 7,
|
||||
"decomposed": 4,
|
||||
"tagged": 4,
|
||||
"text_blake3": "125a4e219807a7d0fc239165271a2ec0ea306781d3b9a8b049dcec60d7bd18f4"
|
||||
}
|
||||
],
|
||||
"refuse": [
|
||||
{
|
||||
"file": "refuse/unsupported.circuit",
|
||||
"line": 3,
|
||||
"contains": "unsupported instruction 'T'"
|
||||
},
|
||||
{
|
||||
"file": "refuse/random_observable.circuit",
|
||||
"line": 0,
|
||||
"contains": "not deterministic"
|
||||
},
|
||||
{
|
||||
"file": "refuse/record.circuit",
|
||||
"line": 3,
|
||||
"contains": "measurement record out of range"
|
||||
},
|
||||
{
|
||||
"file": "refuse/open_tag.circuit",
|
||||
"line": 2,
|
||||
"contains": "tag's '[' is not closed"
|
||||
},
|
||||
{
|
||||
"file": "refuse/product.circuit",
|
||||
"line": 2,
|
||||
"contains": "unsupported instruction 'MPP'"
|
||||
},
|
||||
{
|
||||
"file": "refuse/empty_part.dem",
|
||||
"line": 1,
|
||||
"contains": "empty"
|
||||
},
|
||||
{
|
||||
"file": "refuse/unsupported.dem",
|
||||
"line": 2,
|
||||
"contains": "unsupported model instruction 'flip'"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -22,6 +22,22 @@ The editor:
|
|||
|
||||
Ctrl+Enter (⌘+Enter on macOS) runs the program, and Escape cancels a run. The program and the history of runs are kept on the device. "Copy link" puts the program in a URL fragment, which no server sees.
|
||||
|
||||
## The course
|
||||
|
||||
**Course** opens the circuits course ([`wai-quantum/course/`](../wai-quantum/course/README.md)): 21 lessons from a first circuit to a resource estimate, the same course `wai-quantum learn` runs. A lesson is a short text and an exercise:
|
||||
|
||||
- **Load the starter** puts the exercise's starter program in the editor; your draft stays in Versions.
|
||||
- **Check** runs the program in the editor against the exercise with the engine (in this browser, or natively on the desktop): the verdict of each case with its badge, each rule (the gates allowed, gate counts, the T count, the critique's smells, the estimate's counts) with ✓ or ✗, and passed or not yet.
|
||||
- **What went wrong?** says what the reader's diagnostics, the verdict and the critique found, in your language, with the engine's own words beside them.
|
||||
- **Hint** gives the lesson's hints one at a time, with the engine's pointer toward where to look.
|
||||
- **Ask the assistant for a hint**, with a model connected, asks it for one hint and tells it not to write the program; a program in its answer that passes the exercise is held back, and code is not shown.
|
||||
|
||||
None of these shows the solution. Progress (which lessons passed, how many checks and hints) is kept only in this browser, and the pane says so. *Quantum, reconsidered*, the course on interference and learning, is linked beside it.
|
||||
|
||||
## Languages
|
||||
|
||||
The interface's words are data: `locales/<locale>/<area>.json`, one file for each part of the interface, English the source and Simplified Chinese beside it (`locales/index.js` gathers them). The Studio follows the browser's language until you pick one with the switch in the header; your choice is kept in this browser. A host may pin one with `data-lang` on the mount element. The engine's own messages (a verdict's statement, a diagnostic) stay as the engine writes them. The Chinese words are a machine-assisted translation, marked so in each file and in the footer, to be reviewed by a fluent reader. `node test/locales.test.mjs` holds every locale to every key, with the same placeholders.
|
||||
|
||||
## Step through
|
||||
|
||||
"Step through", under the circuit, runs the program one gate, measurement or reset at a time on the engine's debugger, in this browser (or natively on the desktop). It steps on a method where every number is exact for it: the bit-exact state vector when every angle is a dyadic multiple of 2π, else double precision, and under the job's noise the density matrix, beside the noiseless state on the same path. Up to 16 qubits are stepped, or 8 under noise; a wider program is refused with the reason.
|
||||
|
|
@ -86,6 +102,12 @@ A proposal is verified only when it reads, keeps the rules and passes the check
|
|||
|
||||
"Estimate", under the compile lens, says what a fault-tolerant machine would need to run the program, on the physical qubit chosen and within the error budget given (the probability the run may fail). It gives the program's logical counts first: its logical qubits (with the ancillas a gate under several controls takes), measurements, `T` gates, Toffolis and rotations, the `T` gates in the rotations' synthesised words, and the `T` depth and total depth; then each rotation's share of the budget and how many `T` gates its word took, and the code model the distance is chosen by (on a gate-based qubit, fitted to the engine's own exact-matching or union-find decoder, or the planar model's assumed one). The estimate is the headline: physical qubits, `T` factories and the share of qubits they take, runtime and code distance. The frontier plots every estimate no other beats on both physical qubits and runtime, runtime across and qubits up on log scales, and lists them in a table; pointing at a point, or focusing it, reads it out. Every estimate is sealed with this browser's key (the desktop app's, in the app) in the resource-estimate receipt family, and the line under the table says whether the seals verify and whether the request re-run here gives every figure. An estimate is marked stale once the program changes. Every number and what it assumes is on [the estimate page](../wai-quantum/docs/estimate.md).
|
||||
|
||||
## Error correction
|
||||
|
||||
"Error correction", a closed section under the result, opens on a code chosen from a list: the rotated surface code, the triangular colour code, the toric code, the Steane code, and two bivariate-bicycle codes. Its lattice is drawn with each check and qubit, and its distance certificate stated under it: in each sector, the least weight of a logical found, and every lighter support ruled out by an exhaustive search; "Show witness" rings a logical of that weight on the lattice. Clicking a qubit (or Enter on it) flips it, and its syndrome lights the checks it violates; "Decode" corrects the syndrome with the decoder chosen, draws the correction, and says whether the residual is a product of stabilizers (the logical state unharmed) or a logical error. Under "Threshold", "Measure" samples logical failure rates at distances 3, 5 and 7 over three physical rates and plots them on log scales, each point with its failures, shots and standard error. Every answer is sealed with this browser's key (the desktop app's, in the app) and checked here. What each decoder guarantees is on [the error-correction page](../wai-quantum/docs/qec.md).
|
||||
|
||||
With noise set, "Mitigate", in the Noise section, mitigates the run's expectation values (zero-noise extrapolation, error amplification or cancellation from a learned noise model, Clifford data regression, virtual distillation, or readout inversion). The result shows each value raw and mitigated with its error bar, beside the ideal one the simulation knows, with the method's bias and error-bar assumptions and the circuits and shots it took.
|
||||
|
||||
## What is new, and Found
|
||||
|
||||
The engine says what is new in a program: the known construction it is, found again; a known result reached by a different route; or how far it is from the nearest program it was compared with. The known constructions are GHZ by a chain, by doubling and by fan-out, the uniform superposition and the quantum Fourier transform. The distance is structural, from 0 (built alike) to 1 (nothing shared), and it is the engine's, not a search of the literature.
|
||||
|
|
@ -172,6 +194,21 @@ The engine is the model's tool, not an afterthought:
|
|||
|
||||
`node test/assistant-live.mjs URL` drives the assistant against a real model server and prints what it did. It is not part of CI, which has no model.
|
||||
|
||||
## Answer views
|
||||
|
||||
Under **Answer views**, an answer in the answer view layer ([quantum-answers.md](../extensions/quantum-answers.md)) is drawn as it arrives: the program in a fenced `qasm` block, and views whose numbers come from engine calls written with `@` (`counts = Histogram(@Sample(bell, 1000))`, `check = Verdict(@Check(bell, {"00": 0.5, "11": 0.5}))`, `seal = Receipt(@Seal([bell, counts, check]))`). Paste one and choose **Draw**, or ask the connected model for one: it is told the layer, streams its answer, and each view is drawn as soon as its statement and what it names have arrived, a program's circuit growing gate by gate while its lines stream in.
|
||||
|
||||
- The text goes through the engine's own reader (`AnswerStream` in the page, the native one on the desktop), so what is drawn is what the layer says.
|
||||
- Every number in a view is the engine's, from its call carried out here; a view whose argument is a number the model wrote is refused with `J104`, and every other problem is listed with its line and code. A view whose call the engine refuses shows the refusal, for that view alone.
|
||||
- A `Receipt` is the seal of the statements it names, checked here. **Save with its receipt** saves the answer with the marker line that lets anyone check it again by running it.
|
||||
|
||||
## Correctness record
|
||||
|
||||
Under the assistant, **Correctness record** keeps, when you turn it on, one record of each answer the model gives (an assistant's proposal, or an answer in the layer): the diagnostic codes it drew, the level the engine checked it to and whether its intent held, the repairs made, whether you took it (**Apply** and **Take it**) or set it aside (**Not this**), and its receipt. It is off by default: until you turn it on nothing is recorded and nothing is written, not even a key in this browser's storage. Nothing is ever sent anywhere. **Export the record** saves it to a file; **Export the failures as an eval corpus** saves the answers that did not hold, or that you set aside, in the conformance format, which `wai-quantum eval run --tasks` takes.
|
||||
|
||||
## Views for agent hosts
|
||||
|
||||
[`src/views/`](src/views/) is the same interface as six views an agent host draws through the Model Context Protocol's extension for interactive views (`io.modelcontextprotocol/ui`, version 2026-01-26): a result with its verdict, a receipt, a circuit, a critique, an estimate's frontier and a device target's map, each from the Studio's components (`circuit-svg.js`, `verdict-view.js`, `result-parts.js`, `device.js`, `estimate-view.js`, `critique-view.js`). `build-views.mjs` puts them into one self-contained page with the engine inside it (`wai/wai-quantum-views`), as WebAssembly and translated to JavaScript, which `wai/wai-quantum-views/build.sh` writes to `wai/wai-quantum/views/` for both MCP servers to serve; `node build-views.mjs --check` says whether that page is built from the sources as they are.
|
||||
## What is stable
|
||||
|
||||
The Studio is an application. What it promises is the engine's, through what it gives: a job in the engine's job JSON, which follows its schemas, its result naming the engine that made it and its schema, and a receipt that verifies in every later version; and the history files `wai-quantum history verify` checks. What each WAI Quantum version promises, and how a change is announced: [the policy](https://git.transaction.science/Transaction-Science/open-standards/src/branch/main/wai/wai-quantum/VERSIONING.md); what is deprecated: [the deprecations](https://git.transaction.science/Transaction-Science/open-standards/src/branch/main/wai/wai-quantum/DEPRECATIONS.md).
|
||||
|
|
@ -198,11 +235,17 @@ A host mounts the Studio on an element:
|
|||
<script type="module" src="/quantum-studio/studio.js"></script>
|
||||
```
|
||||
|
||||
`data-embedded` tells the Studio the host page has its own heading, so the Studio's name is not a second `h1`. `data-engine-pkg` names the engine's browser package: wai-web built with the feature `quantum_engine`. `node build.mjs --pkg DIR` copies such a package into `dist/pkg/` for `index.html`. On the desktop, `window.__TAURI__` is present and the Studio uses the native engine instead.
|
||||
`data-embedded` tells the Studio the host page has its own heading, so the Studio's name is not a second `h1`. `data-lang` (`en` or `zh-CN`) pins the language. `data-engine-pkg` names the engine's browser package: wai-web built with the feature `quantum_engine`. `node build.mjs --pkg DIR` copies such a package into `dist/pkg/` for `index.html`. On the desktop, `window.__TAURI__` is present and the Studio uses the native engine instead.
|
||||
|
||||
## Testing it
|
||||
|
||||
```sh
|
||||
`node test/telemetry.test.mjs` holds the correctness record to its rule without a browser: while it is off, nothing is recorded, nothing is written to storage and the engine is not asked.
|
||||
|
||||
`WQ_CLI=PATH/wai-quantum [WQ_SERVICE=PATH/wai-quantum-service] node test/views.test.mjs` is a scripted agent host in the installed browser: it finds each tool's view, reads the six pages (each within 1 MiB), and draws each in a sandboxed frame under the extension's default content-security policy and under that policy with WebAssembly allowed; the receipt is checked in the view (as JavaScript and as WebAssembly), a changed result fails the check, the model is told the check, the service's running job is followed by the view, and no view makes a request of its own.
|
||||
|
||||
The Studio itself:
|
||||
|
||||
```sh norun=ci:wai-quantum-studio.yml
|
||||
node build.mjs --pkg PATH/TO/PKG && node test/studio.test.mjs
|
||||
```
|
||||
|
||||
|
|
@ -220,6 +263,11 @@ The test runs the Studio in the installed browser:
|
|||
- stepping through teleportation on the bit-exact method: the slider forward and back to the same bits, the next step named and marked, each qubit's Bloch sphere and phase disk, the amplitudes, a reduced state, the four branches a quarter each, one chosen and the state it leaves, and the noisy state against the noiseless one;
|
||||
- editing by the drawing: a gate dropped from the palette onto a wire, one dragged to another wire, moved and deleted from the keyboard, each recorded as your edit, and a gate of a broadcast refused with its line;
|
||||
- the circuit described in the engine's words, and the drawing saved as SVG and as LaTeX;
|
||||
- the course, in English: a lesson's starter loaded and checked, what went wrong, a hint with its pointer, the solution passed and kept in the browser, a rule and a generator's cases each with their verdict;
|
||||
- the course in Chinese from the browser's language, the switch to English and back, and the layout at a phone's width with the course open;
|
||||
- the layout at a phone's width.
|
||||
|
||||
- the correctness record, off by default and nothing kept while off; turned on, a proposal recorded with its level, "Not this" kept, and the failures exported as a corpus;
|
||||
- answer views: an answer drawn from its text, its numbers the engine's, a number the model wrote refused with `J104`, the seal checked here, and an answer the scripted model streams drawn view by view before the stream ends;
|
||||
|
||||
`STUDIO_SKIP_SERVICE=1` leaves the service step out. It saves screenshots of both colour schemes in `test/screenshots/`.
|
||||
|
|
|
|||
240
wai/quantum-studio/README.zh-CN.md
Normal file
240
wai/quantum-studio/README.zh-CN.md
Normal file
|
|
@ -0,0 +1,240 @@
|
|||
<!-- 机器辅助翻译(machine-assisted translation):在对外推广之前,须由熟练的读者审校。 -->
|
||||
|
||||
# Quantum Studio
|
||||
|
||||
> 本文为机器辅助翻译,尚待熟练的读者审校。英文原文:[README.md](README.md)。
|
||||
|
||||
一个 OpenQASM 程序编辑器,可以在三个地方运行程序:
|
||||
|
||||
- **这个浏览器**:借助编译为 WebAssembly 的量子作业服务引擎,在一个 worker 中运行;
|
||||
- **这台计算机**:借助以原生方式构建的同一个引擎,在[桌面应用](../wai-quantum-desktop/)中运行;
|
||||
- **作业服务**:通过 HTTP 运行。
|
||||
|
||||
在桌面应用中,**你的硬件**是第四个地方:你自己的某个提供方(`wai-quantum providers add`);运行前先向它询问估算,不免费的运行之前会显示一个对话框;凭据由应用持有,从不由页面持有。在浏览器标签页中,这个切换开关只会说明此类运行须经由桌面应用或命令行进行(`wai-quantum run --provider NAME`),因为浏览器标签页不得持有提供方的凭据。
|
||||
|
||||
每个地方返回的都是同样的作业:请求、所用的方法及选择它的原因、结果,以及结果的回执。每次运行都会请求其判定,结果以徽章显示引擎检查所达到的级别,并附上其陈述,由回执封存;若结果来自不提供判定的主机,或运行被拒绝,其判定就在本设备上得出,并注明未经封存。Studio 以同样的方式显示它们,并在其运行所在的机器上检查每一份回执。同一个请求配上同一个种子,在每个地方都给出相同的计数。
|
||||
|
||||
编辑器:
|
||||
|
||||
- 高亮显示 OpenQASM;
|
||||
- 补全标准门和程序自身的寄存器;
|
||||
- 在相应的行上标出引擎的诊断;
|
||||
- 随着你输入,画出线路并显示计划。
|
||||
|
||||
- 让你通过线路图编辑线路(见下文);
|
||||
- 用引擎的措辞把线路读给屏幕阅读器,并把线路图保存为 SVG 或 LaTeX。
|
||||
|
||||
Ctrl+Enter(macOS 上为 ⌘+Enter)运行程序,Escape 取消运行。程序和运行历史保存在本设备上。“复制链接”(Copy link)把程序放进 URL 片段中,任何服务器都看不到它。
|
||||
|
||||
## 课程
|
||||
|
||||
**课程**(Course)打开量子线路课程([`wai-quantum/course/`](../wai-quantum/course/README.md)):21 课,从第一个线路到资源估算,与 `wai-quantum learn` 运行的是同一门课程。每一课由一段简短的文字和一道练习组成:
|
||||
|
||||
- **载入起始程序**(Load the starter)把练习的起始程序放进编辑器;你的草稿保留在“版本”(Versions)中。
|
||||
- **检查**(Check)用引擎对照练习运行编辑器中的程序(在这个浏览器中,或在桌面上以原生方式):给出每种情况的判定及其徽章,每条规则(允许的门、门的数量、T 门数、评析中的问题模式、估算的计数)以 ✓ 或 ✗ 标示,以及“已通过”或“尚未通过”。
|
||||
- **哪里出了问题?**(What went wrong?)用你的语言说明读取器的诊断、判定和评析发现了什么,并在旁边附上引擎的原文。
|
||||
- **提示**(Hint)逐条给出本课的提示,并附上引擎指出的“从哪里看起”。
|
||||
- **请助手给一条提示**(Ask the assistant for a hint):在已连接模型时,向它请求一条提示,并告诉它不要写出程序;它回答中能通过这道练习的程序会被扣下,代码也不会显示。
|
||||
|
||||
这些都不会显示答案。进度(哪些课已通过、检查和提示各用了多少次)只保存在这个浏览器中,窗格上也如此注明。旁边链接了 *Quantum, reconsidered*,一门关于干涉与学习的课程。
|
||||
|
||||
## 语言
|
||||
|
||||
界面上的文字是数据:`locales/<locale>/<area>.json`,界面的每个部分一个文件,英文为源文本,简体中文与之并列(由 `locales/index.js` 汇集)。在你用页眉中的切换开关选定一种语言之前,Studio 跟随浏览器的语言;你的选择保存在这个浏览器中。宿主页面可以在挂载元素上用 `data-lang` 固定一种语言。引擎自身的消息(判定的陈述、诊断)保持引擎写出时的原样。中文文字为机器辅助翻译,在每个文件和页脚中均已注明,尚待熟练的读者审校。`node test/locales.test.mjs` 要求每种语言都具备每一个键,且占位符相同。
|
||||
|
||||
## 单步执行
|
||||
|
||||
线路下方的“单步执行”(Step through)在引擎的调试器上运行程序,每次执行一个门、一次测量或一次重置,在这个浏览器中进行(或在桌面上以原生方式进行)。它所用的方法对每个数值都是精确的:当每个角度都是 2π 的二进有理数倍时,用逐位精确(bit-exact)的态矢量,否则用双精度态矢量;在作业的噪声下则用密度矩阵,并在同一路径上给出无噪声态作对照。最多可单步执行 16 个量子比特,有噪声时最多 8 个;更宽的程序会被拒绝,并给出原因。
|
||||
|
||||
- **滑块**及其旁边的按钮用于前进和后退。后退时,程序从引擎保存的某个状态重新运行,因此同一步看两次得到的是相同的比特,其摘要也表明这一点。下一步会注明其所在的行,门则在线路图上标出。
|
||||
- **量子比特**(Qubits):每个量子比特的相位圆盘(填充表示读到 1 的概率,指针表示绕 Z 轴的相位,外环表示纯度)及其 Bloch 球(一幅从一侧看去的简单图),下方附有引擎给出的数值。旁边给出前一半量子比特与其余量子比特之间的纠缠。
|
||||
- **振幅**(Amplitudes):每个基态的振幅、概率和相位,概率最大的排在最前,每个都配有一个圆盘,其面积表示概率,指针表示相位。对于混合态,则给出概率。
|
||||
- **约化态**(Reduced state):你勾选的量子比特的密度矩阵,每个元素按其大小以深浅着色,并附有其纯度和熵。
|
||||
- **与无噪声态对照**(Against the noiseless state):有噪声时,把有噪声态的每个概率与无噪声态的相应概率并列,并给出两者之间的保真度。
|
||||
- **分支**(Branches):程序中途每次测量的每个结果,以树的形式给出,每个都附有其概率和权重:对于无噪声的 Clifford 程序,这些都是精确的分数。每片叶子给出该分支上最终测量的分布。选择一个分支,路径就会走上它;若未选择,每次测量都取概率较大的结果。
|
||||
|
||||
显示的每个数值都来自引擎;图形只负责把它们摆放出来。
|
||||
|
||||
## 通过线路图编辑
|
||||
|
||||
线路图上方有一个门面板。把一个门拖到某条线上,或者先选中它再点击某个位置:它会放到那条线上(双量子比特门放在那条线及其下一条线上),位于放置点右侧所画的各门之前。把已画出的门上下拖动,可把它移到其他线上;左右拖动,可在其他门之间移动它。用键盘时,按 Tab 移到某个门:↑ 和 ↓ 在线之间移动它,← 和 → 把它移到前一个门之前或后一个门之后,Delete 删除它(“删除门”(Delete gate)也可以)。
|
||||
|
||||
引擎通过语法树,在程序自身的文本中完成每一次编辑,因此程序保留其名称、排版和注释。编辑器把它记录为你的编辑,就像你亲手输入的一样。不是由一条语句单独产生的门(寄存器上一次广播中的一个门、程序自定义门中的一个门,或循环中的一个门)不能在线路图上移动或删除:Studio 会指出应修改的那一行。生成器的线路取决于其输入,因此要在其文本中编辑。
|
||||
|
||||
## 线路的文字描述与文件
|
||||
|
||||
线路图的描述(供屏幕阅读器朗读)是引擎对线路的叙述:先是其量子比特和比特,然后是每一列,每个门及其在每个量子比特上的角色,每次测量及其比特,以及按图例写法给出的每个条件。“SVG”按引擎写出的样子保存线路图,这是一张独立的图像,颜色随其所在位置的文字颜色而变;“LaTeX”则把它保存为一幅纯 TikZ 图,只需要 `\usepackage{tikz}`。
|
||||
|
||||
## 设备
|
||||
|
||||
在**设备**(Device)下选择一个设备目标:内置目标之一(合成的,采用已公开格式的形态)、在此导入的目标(**导入…**(Import…)读取引擎能读取的任何格式的校准快照或目标快照,保存在这个浏览器中),或者在桌面应用中,用 `wai-quantum targets import` 保存的目标。耦合图中,每个耦合对按其双量子比特门误差着色,每个量子比特按其读出误差、单量子比特门误差或 T1 着色。颜色为同一色调的五档,按该设备自身数值的分位数划分;最差的耦合对画得更粗,每个标记在悬停时给出其数值,**以表格显示**(As a table)则把它们列出。选定设备后,运行会被编译为该设备的门,放置到最可能成功的量子比特和路由上,并在其噪声下模拟;噪声字段暂不起作用,因为噪声取自设备本身。计划选定的布局会在运行之前画在耦合图上。结果中的**设备**区块列出目标及其哈希(写入回执)、放置方式及其预期成功率(与交换次数最少的放置方式的预期成功率并列)、噪声,以及计数与理想计数相差多少。这是设备的一个模型,结果也如此注明。在作业服务上,内置目标按名称传递,其他目标则以其文档传递。
|
||||
|
||||
## 生成器
|
||||
|
||||
编辑器用引擎自己的读取器读取程序,每个入口用的都是这一个读取器:它覆盖 OpenQASM 3.1 的全部内容,每个问题都在其所在行上用读取器的代码(`[Q103]`)标出;`engine_diagnostic_codes()` 给出每个代码的含义。
|
||||
|
||||
声明了整数输入(`input uint n;`)的程序就是一个生成器:它的 `for` 循环和针对整数的 `if` 会为每个取值写出一条线路。Studio 在编辑器下方为每个输入显示一个字段,并按这些取值读取程序。lint 和评析读取的是生成器本身,因此问题或问题模式保留在生成器自身的行上。线路图、计划、运行(在这里或在作业服务上)、视角(lens)和备选方案(Alternatives)使用的则是它写出的线路。这些取值按名称保存在这个浏览器中。
|
||||
|
||||
## 工作台
|
||||
|
||||
工作台(Workbench)在一族线路中搜索代价最低的成员,引擎评判每一个建议。编辑器中的程序是参照。规格说明了:
|
||||
|
||||
- 每个成员必须做到什么:从 |0…0⟩ 制备出相同的态,或者是同一条线路;
|
||||
- 要检查的规模(`n = 3, 5, 8`);
|
||||
- 允许的门,以及门可以连接任意一对量子比特,还是只能连接一条直线上的相邻量子比特;
|
||||
- 代价:评析各项度量的加权值,在各规模上求和;
|
||||
- 图上绘制的两项度量。
|
||||
|
||||
“开始”(Start)在每个规模上检查参照,并以它为种子建立一个存档。存档在图的每个单元中保留代价最低的已验证生成器。有三个提出者向存档写入,每项发现都注明了是谁提出的:
|
||||
|
||||
- **读者**:“提交编辑器中的程序”(Submit the editor's program);
|
||||
- **内置的盲目搜索**:“搜索 ×100”(Search ×100),对存档中已有内容做带种子的编辑。它是一个想法必须胜过的基线;
|
||||
- **模型**(在已连接模型时):“询问模型 ×3”(Ask the model ×3)。它会被告知规格,并看到已找到的代价最低者,以及引擎测得的代价。
|
||||
|
||||
一个建议只有在能被读取、遵守规则,并在每个规模上都通过检查时,才算通过验证。每个保留的条目都用这个浏览器的密钥封存(在桌面应用中则用应用的密钥)。点击一个点会显示它的代价、检查方式、封存签名及来源;“在编辑器中打开”(Open in editor)把它放进编辑器。存档保存在这个浏览器中,重新打开页面时会恢复。“下载”(Download)把规格及其存档并排保存(`NAME.json` 和 `NAME.archive.json`),这样 `wai-quantum discover verify NAME.json` 就能检查每一个封存签名。在桌面应用中,搜索还会统计所用的秒数及其进程消耗的焦耳数。
|
||||
|
||||
## 重写
|
||||
|
||||
线路下方的“重写”(Rewrites)列出程序所容许的、保持其含义不变的每一种重写:相互抵消的门、可以合并的旋转门、夹在两个 Hadamard 门之间而变为其共轭的门、越过与之对易的部分而移动的门、互换位置的两个门。引擎在每个重写所涉及的量子比特上检查它。指向某个重写,会在线路图上标出其涉及的门;“采纳”(Take)把它作为引擎的建议提出,与其他建议一样接受审阅;列表随程序的变化而更新。在备选方案中,与草稿是同一条线路的候选会说明草稿如何变成它:一串经过检查的重写。
|
||||
|
||||
## 编译
|
||||
|
||||
线路下方的“编译”(Compile)让程序依次经过引擎的各遍处理(每一遍都在其作用之处经过检查),在预算 `ε` 之内编译到 Clifford+T(或编译到标准门,不做任何近似),级别可为 0、1 或 2。每一遍是表中的一行:处理前后的门、CNOT、`T` 门和旋转门的数量,以及它的检查结果(`proof`、`exact`,或附有距离的 `approximate`)。表格上方的一行说明:输出与程序相差多远(不计全局相位)、预算及其在各旋转门之间的分配、在稠密酉矩阵上(最多 8 个量子比特)对照程序测得的整个输出的距离,以及用这个浏览器的密钥(在桌面应用中则用应用的密钥)封存的证书是否在此处验证通过。最后一遍之后的线路画在表格下方;选择某一遍,就画出该遍之后的线路。“使用”(Use)把编译后的程序作为引擎的建议提出,与其他建议一样接受审阅。程序一旦改动,该次编译就会被标记为过时。各遍、各级别以及如何理解 `ε`,见[编译器页面](../wai-quantum/docs/compiler.md)。
|
||||
|
||||
编译视角下方的“估算”(Estimate)说明一台容错量子计算机在所选的物理量子比特上、在给定的错误预算(允许这次运行失败的概率)之内运行该程序需要什么。它先给出程序的逻辑计数:逻辑量子比特(包括多控制门所需的辅助量子比特)、测量、`T` 门、Toffoli 门和旋转门、各旋转门合成所得门序列中的 `T` 门,以及 `T` 深度和总深度;然后给出每个旋转门在预算中所占的份额及其门序列用了多少个 `T` 门,以及用来选择码距的码模型(对于基于门的量子比特,拟合到引擎自己的精确匹配或并查集解码器,或采用平面模型所假定的模型)。估算本身是重点:物理量子比特数、`T` 工厂及其占用的量子比特份额、运行时间和码距。前沿图画出所有不被其他估算在物理量子比特数和运行时间两方面同时胜过的估算,横轴为运行时间、纵轴为量子比特数,均为对数刻度,并在一张表中列出它们;指向某个点或使其获得焦点,就会读出该点。每个估算都在资源估算回执族中用这个浏览器的密钥(在桌面应用中则用应用的密钥)封存,表格下方的一行说明这些封存签名是否验证通过,以及在此处重新运行请求是否能得出每一个数字。程序一旦改动,估算就会被标记为过时。每个数字及其假设,见[估算页面](../wai-quantum/docs/estimate.md)。
|
||||
|
||||
## 新颖之处与“发现”
|
||||
|
||||
引擎会说明一个程序有什么新颖之处:它是被再次找到的某个已知构造;它经由另一条路径得到某个已知结果;或者它与所比较的程序中最近的那个相距多远。已知构造包括:以链式、倍增式和扇出式构造的 GHZ 态,均匀叠加态,以及量子傅里叶变换。这个距离是结构上的,从 0(构造相同)到 1(毫无共同之处),它由引擎给出,而不是文献检索的结果。
|
||||
|
||||
- **备选方案**:每张卡片都说明它相对已知构造和草稿有何新颖之处。经由另一条路径得到已知结果的卡片会被标出。
|
||||
- **工作台**:每个保留的生成器都标明了它是什么,其条目在显示它时还列出它在哪些代价未计入的度量上优于参照。只违反规格中的一条规则(某个门,或直线相邻的限制)、若去掉这条规则就能通过验证的候选,称为异常。它永远不会被保留:日志会说明它的代价是多少,而“去掉这条规则再试”(Try without that rule)会放宽规格,在放宽后的规格下建立一个新的存档。
|
||||
- **发现**(Found)保存值得再看一眼的内容:通往已知结果的另一条路径、异常、与所比较的一切都相距甚远的已验证条目。每一项都可以在编辑器中打开、附上备注保存,或者忽略。它的计数显示有多少项被标记、多少项被保存。它保存在这个浏览器中。
|
||||
|
||||
## 你自己的方式
|
||||
|
||||
在“版本”下,“你自己的方式”(Your own way)说明你的各个版本是否正在向模型的建议趋同:你最新的版本在构造方式上与它们相距多远,以及程序中有多少出自模型。“独自探索一段时间”(Explore on my own for a while)会在你工作期间暂停模型:
|
||||
|
||||
- 助手只提问,不提供它的程序;
|
||||
- 备选方案中的“探索”(Explore)和工作台中的“询问模型”暂停等待;
|
||||
- 你创建的版本会被记为独自完成,这一行会把它们与建议之间的距离和其余版本的距离并列。
|
||||
|
||||
“结束”(End)让模型重新提出建议。这一模式保存在这个浏览器中。
|
||||
|
||||
## 研究
|
||||
|
||||
“研究”(Study)窗格让你参与一项关于人们如何借助引擎进行设计的研究,或者为自己保留一份记录:
|
||||
|
||||
- **功能**(Features):Studio 的每项功能都可以关闭。在你参与研究期间,研究的条件会设定并锁定这些功能,以便每一项都能与对照组比较。
|
||||
- **载入研究方案**(Load a protocol):由研究者提供给你,在产生任何数据之前就已封存。在你作出选择之前,可以看到它研究的是什么。“参与”(Take part)根据这个浏览器的密钥分配你的条件,因此条件在你开始之前就已确定。
|
||||
- **经你要求后才保存,且只保存在这个浏览器中:**
|
||||
- 你应用了“改进”(Improve)给出的哪些候选,以及引擎认为其中最好的那个;
|
||||
- 你在工作台中打开了哪个保留的生成器;
|
||||
- 你关于归属感的回答(“这有多少是你的?”,五个题项,每项从 1 到 7);
|
||||
- 你在助手暂停时完成的探测任务,由引擎评分。
|
||||
- **我的记录**(My record):引擎对你所做的东西和所做的事的度量,每一项都根据它们重新计算。
|
||||
- **导出我的记录**(Export my record):用这个浏览器的密钥封存你的记录,保存为一个文件,交给研究者。不会发送任何内容。“退出研究”(Leave the study)会把这些功能交还给你。
|
||||
|
||||
## 你的品味
|
||||
|
||||
工作台中的“你的品味”(Your taste)从你自己的选择中学习你的偏好:
|
||||
|
||||
- **比较两个**(Compare two)显示你的档案最拿不准的两个保留生成器。引擎会证明它们作用相同,因此这一选择关乎品味,而从不关乎正确性。“选这个”(This one)记下这次选择,“关于”(About)说明选择所依据的方面:经济性、清晰性、洞见、精确性或实用性。
|
||||
- **也来自备选方案**:与草稿是同一条线路的备选方案,若被整体采纳或整体拒绝,就构成两者之间的一次选择。只采纳了一部分的则不说明任何偏好。一旦档案中有了选择,“改进”就会按你的档案对其候选排序。
|
||||
- **按我的品味排序**(Rank by my taste)对保留的生成器排序。每个生成器都显示其典型度(它的构造与已知构造有多接近);档案从不学习典型度,只有旋钮能把排序从典型移向新颖。排序会指出某个方面或代价在哪里把另一个生成器排在首位,以及排在前三的生成器在构造上是否比按代价排在前三的更相似。
|
||||
- **档案**(Profiles):每个名称都是一份独立的档案,保存在这个浏览器中;没有任何东西会把它们合并。摘要说明档案预测对了你的多少次选择,每一次都仅根据之前的选择来预测。
|
||||
|
||||
## 版本
|
||||
|
||||
“版本”窗格记录程序的每一处改动及其作者:
|
||||
|
||||
- 读者输入的内容归读者所有,在其停顿时、运行之前,以及其他任何东西改动程序之前记录下来;
|
||||
- 建议归其提出者所有:助手的程序、备选方案(引擎的或模型的)、从工作台打开的生成器;
|
||||
- 修正归引擎所有;
|
||||
- 示例、文件、链接或较早的运行,则记为程序的来源。
|
||||
|
||||
**建议逐处采纳**。建议的改动连同其所在的行一一列出,每处都带一个复选框,在读者作出选择之前,程序保持不变。只有被采纳的改动才会进入程序。版本会保留完整的建议以及哪些改动被采纳,因此被拒绝的建议仍然可读。
|
||||
|
||||
**工作线**。各个版本被画成若干条工作线。“打开”(Open)把一个较早的版本放进编辑器,在它之上所做的改动会开始一条独立的工作线。“并入”(Bring in)把另一条工作线的末端版本对照程序逐处展示,被采纳的改动记录为两者的合并。
|
||||
|
||||
**出自谁之手**。“谁写的”(Who wrote it)在编辑器的行号栏中标出每一行、在线路图上标出每个门出自谁之手:读者、助手、某个智能体、引擎、其来源,或者模型写出后又经读者编辑的行,这样的行出自两者之手。窗格显示每位贡献者的门和行。
|
||||
|
||||
**在回执上**。运行的请求携带编辑器中那个版本的归属记录:它的摘要,以及出自每一方之手的门和行。回执将其绑定,结果则显示“作者”(written by),以及在此处根据各版本重新计算出的归属记录。各版本保存在这个浏览器中,每个都用浏览器的密钥封存(在桌面应用中则用应用的密钥)。“下载”保存 `program.qasm` 和 `program.history.json`,可用 `wai-quantum history verify program.qasm` 检查。
|
||||
|
||||
嵌入 Studio 的页面可以用 `window.quantumStudio.propose(qasm, {kind, name}, note)` 把一个程序作为某人的建议提出;读者作出选择后,它即完成(resolve)。
|
||||
|
||||
## 针对建议的规则
|
||||
|
||||
编辑器下方的“针对建议的规则”(Rules for proposals)规定任何建议都不得改动的内容:
|
||||
|
||||
- **锁定的行**:“锁定选中的行”(Hold the selected lines)在程序中用 `// @lock` 和 `// @unlock` 标记它们。它们在编辑器中以底色显示,其中的门在线路图上标出。
|
||||
- **门**:建议可以添加的门,以及要避免的门。
|
||||
- **量子比特**:“锁定量子比特声明”(Hold the qubit declarations)。
|
||||
- **要避免的文本**(Text to avoid)。
|
||||
- **一个区域**:“把下一个建议限定在选中的行内”(Keep the next proposal to the selected lines),该建议一经决定即解除。
|
||||
|
||||
引擎会逐处对照这些规则检查每一个建议:助手的程序、备选方案、修正、来自工作台的生成器。违反规则的改动会在审阅中连同该规则一起显示,且不能被采纳。“版本”中的该版本把它记录为已阻止。每一处改动都违反规则的备选方案会被略去,并注明原因。每次请求都会把这些规则告诉模型。你自己输入的内容,你可以随意改动。
|
||||
|
||||
## 助手
|
||||
|
||||
“助手”(Assistant)窗格与这台机器上的语言模型对话:任何具有 chat-completions 接口和工具调用功能的服务器,例如 JouleClaw 运行时或 llama.cpp 服务器。地址填写在“模型…”(Model…)下,默认为 `http://127.0.0.1:8080/v1`。除非地址指向别处,否则没有任何内容离开这台机器。在桌面应用中,调用由应用自己发出,因此不会受到浏览器的源(origin)规则的阻碍。
|
||||
|
||||
引擎是模型的工具,而不是事后补上的附属品:
|
||||
|
||||
- **它的工具就是 Studio 的引擎**:读取程序、lint、绘制、计划、运行,以及说明程序有何新颖之处。它的第一轮必须调用其中之一,因此每个回答都从引擎出发。只有当引擎这样说时,它才可以称一个程序为新颖的,而且只能以引擎给出的距离来表述,而不是文献检索的结果。
|
||||
- **它提出的每个程序在提供之前都会经过检查**。引擎在这里读取它。无法解析的程序会连同引擎给出的原因退回给模型一次,以便更正。能够解析的程序会按模型所用的设置运行,因此它引用的计数就是显示的计数。然后“采纳”(Apply)把它放进编辑器。
|
||||
- **每个建议都以徽章显示其判定**:引擎检查它所达到的级别(被拒绝、已读取、已运行、作为证据检查、作为证明检查),并附上引擎的陈述。模型被告知要给 `run_job` 提供一个意图并引用判定,绝不能超出判定去称一个程序有效。
|
||||
- **它只能陈述引擎返回的数字**。它的文字中若有任何工具都未返回过的数字,会被标为“不是来自运行”(Not from a run)。
|
||||
- **回答是纯文本**。模型若仍写出 LaTeX,会以 Unicode 显示。
|
||||
|
||||
`node test/assistant-live.mjs URL` 让助手对接一个真实的模型服务器运行,并打印它做了什么。它不属于 CI,因为 CI 中没有模型。
|
||||
|
||||
## 托管
|
||||
|
||||
用 `npm ci && node build.mjs` 构建。它会写出 `dist/`:
|
||||
|
||||
| 文件 | 内容 |
|
||||
|---|---|
|
||||
| `studio.js` | 打包后的界面 |
|
||||
| `worker.js` | 引擎的 worker |
|
||||
| `studio.css` | Studio 的样式 |
|
||||
| `tokens.css` | 站点的设计令牌,供 Studio 独立运行时使用 |
|
||||
| `index.html` | 独立运行的页面 |
|
||||
|
||||
宿主页面把 Studio 挂载到一个元素上:
|
||||
|
||||
```html
|
||||
<div id="studio"
|
||||
data-engine-pkg="/quantum-ide/pkg/wai_quantum_ide.js"
|
||||
data-worker="/quantum-studio/worker.js"
|
||||
data-service="/quantum-jobs"></div>
|
||||
<script type="module" src="/quantum-studio/studio.js"></script>
|
||||
```
|
||||
|
||||
`data-embedded` 告诉 Studio 宿主页面有自己的标题,这样 Studio 的名称就不会成为第二个 `h1`。`data-lang`(`en` 或 `zh-CN`)固定语言。`data-engine-pkg` 指定引擎的浏览器包:以 `quantum_engine` 特性构建的 wai-web。`node build.mjs --pkg DIR` 把这样的包复制到 `dist/pkg/` 中,供 `index.html` 使用。在桌面上,存在 `window.__TAURI__`,Studio 会改用原生引擎。
|
||||
|
||||
## 测试
|
||||
|
||||
```sh norun=ci:wai-quantum-studio.yml
|
||||
node build.mjs --pkg PATH/TO/PKG && node test/studio.test.mjs
|
||||
```
|
||||
|
||||
测试在已安装的浏览器中运行 Studio:
|
||||
|
||||
- 在输入程序时进行 lint、绘制和计划;
|
||||
- 在浏览器中运行,并在浏览器中检查其回执;
|
||||
- 错误标在其所在的行上;
|
||||
- 在态矢量上运行一个旋转门;
|
||||
- 同一个作业在线上的作业服务上运行,给出与这里运行相同的计数,逐次一致;
|
||||
- Ctrl+Enter;
|
||||
- 程序和历史在重新载入后保留;
|
||||
- 估算窗格:三控制门经由一个辅助量子比特计数,在所选量子比特上的估算,前沿的绘制与列表,其封存签名的验证,以及在页面中重新运行请求;
|
||||
- 助手,对接一个按脚本应答的模型服务器:在引擎上执行的工具调用,引擎无法读取的建议连同原因被退回,更正后的建议在提供之前经过检查和运行,以及“采纳”;
|
||||
- 用逐位精确的方法单步执行量子隐形传态:滑块前进再后退回到相同的比特,下一步的注明和标记,每个量子比特的 Bloch 球和相位圆盘,振幅,一个约化态,各占四分之一的四个分支,选定其中一个及其留下的态,以及有噪声态与无噪声态的对照;
|
||||
- 通过线路图编辑:从门面板拖放到某条线上的门,拖到另一条线上的门,用键盘移动和删除的门,每一项都记录为你的编辑,以及广播中的一个门被拒绝并给出其所在行;
|
||||
- 用引擎的措辞描述的线路,以及保存为 SVG 和 LaTeX 的线路图;
|
||||
- 英文的课程:载入并检查一课的起始程序,哪里出了问题,附带引擎指引的提示,答案通过并保存在浏览器中,一条规则和一个生成器的各种情况各自附有判定;
|
||||
- 根据浏览器语言显示的中文课程,切换到英文再切换回来,以及打开课程时在手机宽度下的布局;
|
||||
- 手机宽度下的布局。
|
||||
|
||||
`STUDIO_SKIP_SERVICE=1` 会跳过作业服务这一步。测试会把两种配色方案的截图保存在 `test/screenshots/` 中。
|
||||
124
wai/quantum-studio/build-views.mjs
Normal file
124
wai/quantum-studio/build-views.mjs
Normal file
|
|
@ -0,0 +1,124 @@
|
|||
// Build the views an agent host draws (src/views/) into one self-contained
|
||||
// page: the view's script (the Studio's components, bundled), the Studio's
|
||||
// styles, and the engine inside the view (wai/wai-quantum-views) twice, as
|
||||
// WebAssembly (base64) and as the same build translated to JavaScript. The page
|
||||
// loads nothing and connects nowhere. The servers serve it for each of the six
|
||||
// views, naming the view in its <meta name="wai-view">.
|
||||
//
|
||||
// node build-views.mjs --wasm VIEWS.wasm --js VIEWS.mjs --out DIR
|
||||
//
|
||||
// writes DIR/wai-quantum-views.html and DIR/manifest.json (each part's size and
|
||||
// SHA-256, and every source the page is built from with its SHA-256). Run it
|
||||
// through wai/wai-quantum-views/build.sh, which builds the two engines first.
|
||||
//
|
||||
// node build-views.mjs --check
|
||||
//
|
||||
// says whether the committed page (wai/wai-quantum/views/) is built from the
|
||||
// sources as they are: every source it names unchanged, and no source added.
|
||||
import { build, transform } from 'esbuild';
|
||||
import { createHash } from 'node:crypto';
|
||||
import { mkdirSync, readFileSync, readdirSync, writeFileSync } from 'node:fs';
|
||||
import { dirname, join, relative } from 'node:path';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
|
||||
const here = dirname(fileURLToPath(import.meta.url));
|
||||
const repo = join(here, '..', '..');
|
||||
const arg = (k) => { const i = process.argv.indexOf(k); return i > 0 ? process.argv[i + 1] : null; };
|
||||
const [wasmPath, jsPath, out] = [arg('--wasm'), arg('--js'), arg('--out')];
|
||||
const checking = process.argv.includes('--check');
|
||||
if (!checking && (!wasmPath || !jsPath || !out)) {
|
||||
console.error('usage: node build-views.mjs --wasm VIEWS.wasm --js VIEWS.mjs --out DIR');
|
||||
process.exit(2);
|
||||
}
|
||||
// The most a view may be: the servers' tests hold every view to it.
|
||||
export const LIMIT = 1 << 20;
|
||||
// The name the servers replace with the view's.
|
||||
export const PLACEHOLDER = '__WAI_QUANTUM_VIEW__';
|
||||
|
||||
const sha = (b) => createHash('sha256').update(b).digest('hex');
|
||||
const bytes = (s) => Buffer.byteLength(s, 'utf8');
|
||||
|
||||
// The views are in English: the Studio's components they share read their
|
||||
// words through src/i18n.js, and here its locales are English alone, so the
|
||||
// page carries no other language's words.
|
||||
const englishOnly = {
|
||||
name: 'english-only',
|
||||
setup(b) {
|
||||
b.onResolve({ filter: /\/locales\/index\.js$/ }, () => ({ path: 'english-only', namespace: 'wai-views-locales' }));
|
||||
b.onLoad({ filter: /.*/, namespace: 'wai-views-locales' }, () => {
|
||||
const dir = join(here, 'locales', 'en');
|
||||
const areas = readdirSync(dir).filter((f) => f.endsWith('.json')).sort();
|
||||
const names = areas.map((f, i) => `en${i}`);
|
||||
return {
|
||||
resolveDir: dir,
|
||||
loader: 'js',
|
||||
contents: `${areas.map((f, i) => `import ${names[i]} from './${f}';`).join('\n')}\nexport const AREAS = ${JSON.stringify(areas.map((f) => f.replace(/\.json$/, '')))};\nexport default { en: Object.assign({}, ${names.join(', ')}) };\n`,
|
||||
};
|
||||
});
|
||||
},
|
||||
};
|
||||
// The view's script, and every module it bundles.
|
||||
const app = await build({ absWorkingDir: here, entryPoints: [join(here, 'src/views/main.js')], bundle: true, format: 'esm', target: ['es2022'], minify: true, legalComments: 'none', write: false, metafile: true, logLevel: 'warning', plugins: [englishOnly] });
|
||||
const script = app.outputFiles[0].text;
|
||||
const styleFiles = ['src/tokens.css', 'src/studio.css', 'src/views/views.css'];
|
||||
// Every source, relative to the repository.
|
||||
const sourcesOf = (inputs) => [
|
||||
...Object.keys(inputs).filter((p) => !p.startsWith('wai-views-locales:')).map((p) => join(here, p)),
|
||||
...styleFiles.map((f) => join(here, f)),
|
||||
join(here, 'build-views.mjs'),
|
||||
...['src/lib.rs', 'Cargo.toml', 'Cargo.lock', 'build.sh'].map((f) => join(repo, 'wai/wai-quantum-views', f)),
|
||||
].map((p) => relative(repo, p).split('\\').join('/')).sort();
|
||||
if (checking) {
|
||||
const committed = JSON.parse(readFileSync(join(repo, 'wai/wai-quantum/views/manifest.json'), 'utf8'));
|
||||
const now = sourcesOf(app.metafile.inputs);
|
||||
const stale = now.filter((p) => committed.sources[p] !== sha(readFileSync(join(repo, p))));
|
||||
const gone = Object.keys(committed.sources).filter((p) => !now.includes(p));
|
||||
if (stale.length || gone.length) {
|
||||
console.error(`the committed views page is not built from these sources: ${[...stale.map((p) => `${p} changed`), ...gone.map((p) => `${p} no longer used`)].join('; ')}. Rebuild it: bash wai/wai-quantum-views/build.sh`);
|
||||
process.exit(1);
|
||||
}
|
||||
console.log(`the committed views page is built from these ${now.length} sources`);
|
||||
process.exit(0);
|
||||
}
|
||||
// The engine as JavaScript, made a factory: it runs only when a host's policy refuses the WebAssembly.
|
||||
const engineJs = (await transform(readFileSync(jsPath, 'utf8'), { format: 'iife', globalName: '__wqEngine', minify: true, legalComments: 'none', target: 'es2022' })).code;
|
||||
const factory = `globalThis.wqEngineJs=function(){${engineJs};return __wqEngine};`;
|
||||
const wasm = readFileSync(wasmPath);
|
||||
const css = (await transform(styleFiles.map((f) => readFileSync(join(here, f), 'utf8')).join('\n'), { loader: 'css', minify: true, legalComments: 'none' })).code;
|
||||
|
||||
// Text inside a <script> or <style> must not end it early.
|
||||
const inert = (s, tag) => s.replace(new RegExp(`</${tag}`, 'gi'), `<\\/${tag}`);
|
||||
const html = `<!doctype html>
|
||||
<html lang="en" data-theme="auto">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="wai-view" content="${PLACEHOLDER}">
|
||||
<meta name="generator" content="wai-quantum-views">
|
||||
<title>WAI Quantum</title>
|
||||
<style>${inert(css, 'style')}</style>
|
||||
</head>
|
||||
<body>
|
||||
<main id="wq" aria-live="polite"></main>
|
||||
<script>globalThis.WQ_ENGINE_WASM="${wasm.toString('base64')}";${inert(factory, 'script')}</script>
|
||||
<script type="module">${inert(script, 'script')}</script>
|
||||
</body>
|
||||
</html>
|
||||
`;
|
||||
if (html.split(PLACEHOLDER).length !== 2) throw new Error('the page must name its view in one place');
|
||||
if (bytes(html) > LIMIT) throw new Error(`the page is ${bytes(html)} bytes, past the limit of ${LIMIT}`);
|
||||
|
||||
const sources = sourcesOf(app.metafile.inputs);
|
||||
const manifest = {
|
||||
format: 'wai.quantum.views-bundle/1',
|
||||
about: 'The page every view of WAI Quantum is served from, the view named in its <meta name="wai-view">. Built by wai/wai-quantum-views/build.sh; do not edit it by hand.',
|
||||
placeholder: PLACEHOLDER,
|
||||
limit_bytes: LIMIT,
|
||||
bytes: { page: bytes(html), script: bytes(script), styles: bytes(css), engine_wasm: wasm.length, engine_wasm_base64: Math.ceil(wasm.length / 3) * 4, engine_js: bytes(factory) },
|
||||
sha256: { page: sha(html), script: sha(script), styles: sha(css), engine_wasm: sha(wasm), engine_js: sha(factory) },
|
||||
sources: Object.fromEntries(sources.map((p) => [p, sha(readFileSync(join(repo, p)))])),
|
||||
};
|
||||
mkdirSync(out, { recursive: true });
|
||||
writeFileSync(join(out, 'wai-quantum-views.html'), html);
|
||||
writeFileSync(join(out, 'manifest.json'), JSON.stringify(manifest, null, 2) + '\n');
|
||||
console.log(`wrote ${join(out, 'wai-quantum-views.html')}: ${bytes(html)} bytes (script ${bytes(script)}, styles ${bytes(css)}, engine ${wasm.length} as WebAssembly and ${bytes(factory)} as JavaScript)`);
|
||||
14
wai/quantum-studio/locales/en/assistant.json
Normal file
14
wai/quantum-studio/locales/en/assistant.json
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"_meta": {
|
||||
"locale": "en",
|
||||
"area": "assistant",
|
||||
"translation": "source"
|
||||
},
|
||||
"assistant.stance_questions": "Ask me questions first",
|
||||
"assistant.stance_suggest": "Suggest changes",
|
||||
"assistant.stance_write": "Write programs",
|
||||
"assistant.model_answered": "the model answered {status}",
|
||||
"assistant.server_answered": "the model server answered {status}",
|
||||
"assistant.no_answer": "the model gave no answer",
|
||||
"assistant.kept_calling": "the model kept calling tools without answering"
|
||||
}
|
||||
10
wai/quantum-studio/locales/en/circuit_svg.json
Normal file
10
wai/quantum-studio/locales/en/circuit_svg.json
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"_meta": {
|
||||
"locale": "en",
|
||||
"area": "circuit_svg",
|
||||
"translation": "source"
|
||||
},
|
||||
"circuit_svg.label": "The circuit: {qubits} qubits, {gates} operations in {columns} columns",
|
||||
"circuit_svg.cell": "{gate} on q{q}",
|
||||
"circuit_svg.cell_sep": ", "
|
||||
}
|
||||
43
wai/quantum-studio/locales/en/compile_view.json
Normal file
43
wai/quantum-studio/locales/en/compile_view.json
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
{
|
||||
"_meta": {
|
||||
"locale": "en",
|
||||
"area": "compile_view",
|
||||
"translation": "source"
|
||||
},
|
||||
"compile_view.col_gates": "gates",
|
||||
"compile_view.col_cnots": "CNOTs",
|
||||
"compile_view.col_rotations": "rotations",
|
||||
"compile_view.basis_label": "Basis",
|
||||
"compile_view.basis_title": "The gate set to compile to. Clifford+T: every rotation written as a Clifford+T word within ε. Standard: the standard gates at any angle, nothing approximated",
|
||||
"compile_view.standard": "standard",
|
||||
"compile_view.level_label": "Level",
|
||||
"compile_view.level_title": "0: lower and approximate; 1: also checked rewrites and phase folding; 2: also one- and two-qubit resynthesis",
|
||||
"compile_view.level_option": "level {level}",
|
||||
"compile_view.eps_title": "The most the output may differ from the program: the operator norm, up to a global phase, shared by its rotations",
|
||||
"compile_view.compile": "Compile",
|
||||
"compile_view.compile_title": "The program through the engine’s passes, each checked, with a signed certificate",
|
||||
"compile_view.heading": "Compile",
|
||||
"compile_view.caption": "After {pass} (pass {number} of {of}): {gates} gates, {cnots} CNOTs, {t} T, {rotations} rotations{partial}.",
|
||||
"compile_view.caption_partial": "; the first {drawn} of {total} columns drawn",
|
||||
"compile_view.draw_title": "Draw the circuit after this pass",
|
||||
"compile_view.spent_one": "{n} rotation, {each} each",
|
||||
"compile_view.spent_other": "{n} rotations, {each} each",
|
||||
"compile_view.nothing_approximated": "nothing approximated",
|
||||
"compile_view.whole": " The whole output measured against the program: {distance}.",
|
||||
"compile_view.use": "Use",
|
||||
"compile_view.use_title": "Offer the compiled program for review",
|
||||
"compile_view.offer_note": "Compiled to {basis} at level {level}: within {bound} of the program (budget {budget}), {t} T gates; every pass checked.",
|
||||
"compile_view.the_standard_gates": "the standard gates",
|
||||
"compile_view.verdict_approximate": "Approximate",
|
||||
"compile_view.verdict_exact": "Exact",
|
||||
"compile_view.verdict_proved": "Proved",
|
||||
"compile_view.summary": "{verdict}: within {bound} of the program, up to a global phase (budget {budget}; {spent}).{whole} {certificate}",
|
||||
"compile_view.cert_verifies": "The certificate verifies.",
|
||||
"compile_view.cert_fails": "The certificate DOES NOT VERIFY.",
|
||||
"compile_view.col_pass": "pass",
|
||||
"compile_view.col_check": "check",
|
||||
"compile_view.note": "Choose a pass to draw the circuit after it. A check is proof (exact ring arithmetic, a phase polynomial in whole eighths), exact (equal to the rounding of doubles) or approximate with its distance; the distances add up to the bound.",
|
||||
"compile_view.bad_eps": "ε is a positive number, such as 1e-6.",
|
||||
"compile_view.compiling": "Compiling: each pass checked as it goes…",
|
||||
"compile_view.stale": "For an earlier version of the program: compile again."
|
||||
}
|
||||
19
wai/quantum-studio/locales/en/converge.json
Normal file
19
wai/quantum-studio/locales/en/converge.json
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"_meta": {
|
||||
"locale": "en",
|
||||
"area": "converge",
|
||||
"translation": "source"
|
||||
},
|
||||
"converge.converging": "Converging: {why}.",
|
||||
"converge.latest": "Your latest version is {distance} from the model’s proposals in how it is built.",
|
||||
"converge.own_one": "On your own: {n} version, {distance} from them{rest}.",
|
||||
"converge.own_many": "On your own: {n} versions, {distance} from them{rest}.",
|
||||
"converge.own_rest": "; the rest {distance}",
|
||||
"converge.try_own": "Try a while on your own: the assistant then only asks.",
|
||||
"converge.chip": "on your own",
|
||||
"converge.title": "Your own way",
|
||||
"converge.end": "End: let the assistant propose again",
|
||||
"converge.start": "Explore on my own for a while",
|
||||
"converge.end_title": "The assistant, Alternatives and the Workbench may ask the model again",
|
||||
"converge.start_title": "The assistant only asks; Alternatives and the Workbench do not ask the model; your versions are noted as made on your own"
|
||||
}
|
||||
47
wai/quantum-studio/locales/en/course.json
Normal file
47
wai/quantum-studio/locales/en/course.json
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
{
|
||||
"_meta": {
|
||||
"locale": "en",
|
||||
"area": "course",
|
||||
"translation": "source"
|
||||
},
|
||||
"course.title": "Course",
|
||||
"course.open": "Course",
|
||||
"course.open_title": "The circuits course: lessons with exercises the engine checks",
|
||||
"course.lessons": "The lessons",
|
||||
"course.where": "Lesson {number} of {of} · {unit}",
|
||||
"course.exercise": "Exercise",
|
||||
"course.starter": "Load the starter",
|
||||
"course.starter_title": "Put the exercise’s starter program in the editor (your draft stays in Versions)",
|
||||
"course.starter_loaded": "The starter program of “{title}” is in the editor.",
|
||||
"course.check": "Check",
|
||||
"course.check_title": "Check the program in the editor against the exercise, with the engine",
|
||||
"course.hint": "Hint",
|
||||
"course.no_more_hints": "No more hints",
|
||||
"course.hint_of": "Hint {level} of {of}",
|
||||
"course.why": "What went wrong?",
|
||||
"course.ask": "Ask the assistant for a hint",
|
||||
"course.ask_title": "The model on this machine, told not to write the program; any program in its answer is held back",
|
||||
"course.ask_needs_model": "The assistant needs a model: connect one under Assistant, then ask again.",
|
||||
"course.asking": "Asking the assistant…",
|
||||
"course.assistant_says": "The assistant’s hint",
|
||||
"course.held_solution": "The answer held a program that passes this exercise. It is not shown, so that the exercise stays yours.",
|
||||
"course.held_code": "The answer held code, which is not shown here.",
|
||||
"course.ask_failed": "The assistant could not answer: {error}",
|
||||
"course.not_checked": "not checked",
|
||||
"course.passed": "passed",
|
||||
"course.not_yet": "not yet",
|
||||
"course.passed_status": "Passed: “{title}”.",
|
||||
"course.not_yet_status": "Not yet: What went wrong? says what the engine found.",
|
||||
"course.engine_says": "The engine:",
|
||||
"course.nothing_wrong": "Nothing went wrong: the check passes.",
|
||||
"course.where_to_look": "Where to look:",
|
||||
"course.previous": "← Previous",
|
||||
"course.next": "Next →",
|
||||
"course.progress": "{passed} of {of} lessons passed",
|
||||
"course.kept": "kept only in this browser",
|
||||
"course.reset": "Reset progress",
|
||||
"course.reset_confirm": "Click again to reset",
|
||||
"course.reset_done": "Your progress in this browser is cleared.",
|
||||
"course.companion": "Beside it:",
|
||||
"course.machine_assisted": "This lesson is a machine-assisted translation, to be reviewed by a fluent reader."
|
||||
}
|
||||
24
wai/quantum-studio/locales/en/critique_view.json
Normal file
24
wai/quantum-studio/locales/en/critique_view.json
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
{
|
||||
"_meta": {
|
||||
"locale": "en",
|
||||
"area": "critique_view",
|
||||
"translation": "source"
|
||||
},
|
||||
"critique_view.qubits": "qubits",
|
||||
"critique_view.gates": "gates",
|
||||
"critique_view.two_qubit": "two-qubit",
|
||||
"critique_view.depth": "depth",
|
||||
"critique_view.two_qubit_depth": "two-qubit depth",
|
||||
"critique_view.non_clifford": "non-Clifford",
|
||||
"critique_view.since_last_run": "since the last run",
|
||||
"critique_view.fidelity_title": "The {note}. Rates: {one_qubit} per one-qubit gate, {two_qubit} per two-qubit gate, {readout} per measured qubit.",
|
||||
"critique_view.fidelity_modelled": "fidelity, modelled",
|
||||
"critique_view.line": "line {line}",
|
||||
"critique_view.lines": "lines {lines}",
|
||||
"critique_view.label": "The engine’s critique",
|
||||
"critique_view.waiting": "The critique waits for a program the engine can read.",
|
||||
"critique_view.clifford_title": "Every gate is a Clifford gate: the stabilizer tableau runs it exactly, at any width.",
|
||||
"critique_view.show": "Show",
|
||||
"critique_view.fix": "Fix",
|
||||
"critique_view.fix_title": "The engine rewrites these lines and checks the result is the same circuit"
|
||||
}
|
||||
46
wai/quantum-studio/locales/en/debugger.json
Normal file
46
wai/quantum-studio/locales/en/debugger.json
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
{
|
||||
"_meta": {
|
||||
"locale": "en",
|
||||
"area": "debugger",
|
||||
"translation": "source"
|
||||
},
|
||||
"debugger.start": "Step through",
|
||||
"debugger.start_title": "Step through the program on the engine, forward and back",
|
||||
"debugger.to_start": "To the start",
|
||||
"debugger.back": "One step back",
|
||||
"debugger.forward": "One step forward",
|
||||
"debugger.to_end": "To the end",
|
||||
"debugger.slider": "The step the state is shown at",
|
||||
"debugger.not_started": "not started",
|
||||
"debugger.pick": "The qubits whose reduced state to show",
|
||||
"debugger.against_noiseless": "Against the noiseless state",
|
||||
"debugger.qubits": "Qubits",
|
||||
"debugger.amplitudes": "Amplitudes",
|
||||
"debugger.reduced": "Reduced state",
|
||||
"debugger.branches": "Branches",
|
||||
"debugger.title": "Step through",
|
||||
"debugger.empty": "Step through the program on the engine: the state at each step, each qubit on its Bloch sphere, and every branch of its measurements with its weight.",
|
||||
"debugger.refused": "refused",
|
||||
"debugger.position": "position {position} of {length}",
|
||||
"debugger.line": " (line {line})",
|
||||
"debugger.next": "Next: ",
|
||||
"debugger.end": "The end of the program.",
|
||||
"debugger.just_now": " · just now: {kind} q{qubit}{line} read {outcome} with p {p} ({by})",
|
||||
"debugger.by_recorded": "the branch chosen",
|
||||
"debugger.by_likelier": "the likelier",
|
||||
"debugger.by_certain": "certain",
|
||||
"debugger.path": "Path: {outcomes} · weight {weight} · bits {bits}{read}",
|
||||
"debugger.outcomes": "outcomes {outcomes}",
|
||||
"debugger.no_measurement": "no measurement yet",
|
||||
"debugger.no_bits": "none",
|
||||
"debugger.entangled": "Entangled across q{cut} | the rest: {bits} bits (Schmidt rank {rank}).",
|
||||
"debugger.negativity": "Across q{cut} | the rest: logarithmic negativity {value} bits.",
|
||||
"debugger.final": "final: {final}{more}",
|
||||
"debugger.more": " and {n} more",
|
||||
"debugger.reads": "reads {outcome} · p {p} · weight {weight}",
|
||||
"debugger.branch_count_one": "{n} branch; weights {weights}.",
|
||||
"debugger.branch_count": "{n} branches; weights {weights}.",
|
||||
"debugger.tree_label": "The branches at the program’s measurements in the middle",
|
||||
"debugger.one_path": "No measurement in the middle: one path; {final}.",
|
||||
"debugger.again": "Again"
|
||||
}
|
||||
60
wai/quantum-studio/locales/en/device.json
Normal file
60
wai/quantum-studio/locales/en/device.json
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
{
|
||||
"_meta": {
|
||||
"locale": "en",
|
||||
"area": "device",
|
||||
"translation": "source"
|
||||
},
|
||||
"device.by_readout": "readout error",
|
||||
"device.by_one": "one-qubit error",
|
||||
"device.by_t1": "T1 (shorter is worse)",
|
||||
"device.map_label": "{name}: {qubits} qubits and {pairs} coupled pairs, each pair coloured by its two-qubit error and each qubit by its {by}, in five bins from lowest to highest{placed}",
|
||||
"device.map_placed": "; the program placed on physical qubits {layout}",
|
||||
"device.pair_tip": "pair {a}–{b}: {gate} error {error}",
|
||||
"device.two_qubit_gate": "two-qubit gate",
|
||||
"device.qubit_tip": "qubit {qubit}{label}: readout error {readout}, one-qubit error {single}, T1 {t_one} µs, T2 {t_two} µs",
|
||||
"device.qubit_label": " ({label})",
|
||||
"device.ends": "q{logical} ends",
|
||||
"device.legend_pairs": "pairs: two-qubit error",
|
||||
"device.legend_qubits": "qubits: {by}",
|
||||
"device.legend_note": "Each scale is this device’s own: five bins by quantile, lowest first. A dashed mark states no value. Hover a qubit or a pair for its numbers.",
|
||||
"device.as_table": "As a table",
|
||||
"device.th_qubit": "qubit",
|
||||
"device.th_readout": "readout",
|
||||
"device.th_error_1q": "1q error",
|
||||
"device.th_pair": "pair",
|
||||
"device.th_error": "error",
|
||||
"device.th_gate": "gate",
|
||||
"device.target_label": "Device target",
|
||||
"device.none": "None: the engine’s own methods",
|
||||
"device.colour_by": "Colour qubits by",
|
||||
"device.import": "Import…",
|
||||
"device.import_title": "A device’s calibration or target snapshot, in any format the engine reads",
|
||||
"device.title": "Device",
|
||||
"device.run_as_on": "Run as on",
|
||||
"device.about": "{qubits} qubits, {pairs} pairs · compiles to {basis}{costed} · calibration {calibration}{when} · {source} · hash {hash}…",
|
||||
"device.costed_own": ", each gate costed as the device’s own",
|
||||
"device.unnamed": "unnamed",
|
||||
"device.when": ", {timestamp}",
|
||||
"device.built_in": "Built in (synthetic)",
|
||||
"device.option": "{name} · {qubits} qubits",
|
||||
"device.yours": "Yours (wai-quantum targets)",
|
||||
"device.imported_here": "Imported here",
|
||||
"device.imported_app": "Imported {name} ({format}): {qubits} qubits, kept in this app.",
|
||||
"device.imported_browser": "Imported {name} ({format}): {qubits} qubits, kept in this browser.",
|
||||
"device.import_failed": "The snapshot did not read: {error}",
|
||||
"device.placed": "Placed on {layout}{ending}; {swaps} swaps; expected success {success} against {fewest} for the fewest swaps{noise}.",
|
||||
"device.ending_on": ", ending on {layout}",
|
||||
"device.placed_noise": "; {channels} noise channels over {ns} ns",
|
||||
"device.row_target": "target",
|
||||
"device.name_calibration": "{name} · calibration {calibration}",
|
||||
"device.row_hash": "hash",
|
||||
"device.row_placed": "placed",
|
||||
"device.placed_row": "on {layout} → {final}; {swaps} swaps; {gates} gates in {basis}",
|
||||
"device.row_success": "expected success",
|
||||
"device.success_row": "{success} (fewest swaps: {fewest})",
|
||||
"device.row_noise": "noise",
|
||||
"device.noise_row": "{channels} channels over {ns} ns, {idle} ns idle",
|
||||
"device.row_ideal": "from ideal",
|
||||
"device.ideal_row": "total variation distance {tvd}, Hellinger fidelity {fidelity}",
|
||||
"device.model_note": "A model of the device, not a run on it: {model}"
|
||||
}
|
||||
14
wai/quantum-studio/locales/en/dom.json
Normal file
14
wai/quantum-studio/locales/en/dom.json
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"_meta": {
|
||||
"locale": "en",
|
||||
"area": "dom",
|
||||
"translation": "source"
|
||||
},
|
||||
"dom.not_checked": "not checked",
|
||||
"dom.how_tableau": "equal tableaus",
|
||||
"dom.how_exact": "on every basis state",
|
||||
"dom.how_rewrites": "by checked rewrites",
|
||||
"dom.how_random": "on random inputs",
|
||||
"dom.same_circuit": "same circuit · {how}",
|
||||
"dom.different_circuit": "a different circuit"
|
||||
}
|
||||
63
wai/quantum-studio/locales/en/estimate_view.json
Normal file
63
wai/quantum-studio/locales/en/estimate_view.json
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
{
|
||||
"_meta": {
|
||||
"locale": "en",
|
||||
"area": "estimate_view",
|
||||
"translation": "source"
|
||||
},
|
||||
"estimate_view.qubit_ns_e4": "ns-e4 · 50 ns gates, 1e-4",
|
||||
"estimate_view.qubit_ns_e3": "ns-e3 · 50 ns gates, 1e-3",
|
||||
"estimate_view.qubit_us_e4": "us-e4 · 100 µs gates, 1e-4",
|
||||
"estimate_view.qubit_us_e3": "us-e3 · 100 µs gates, 1e-3",
|
||||
"estimate_view.qubit_meas_e4": "meas-e4 · measurement-based, 1e-4",
|
||||
"estimate_view.qubit_meas_e6": "meas-e6 · measurement-based, 1e-6",
|
||||
"estimate_view.days": "{n} days",
|
||||
"estimate_view.years": "{n} years",
|
||||
"estimate_view.frontier_label_one": "The frontier: {n} estimate, runtime against physical qubits on log scales",
|
||||
"estimate_view.frontier_label_other": "The frontier: {n} estimates, runtime against physical qubits on log scales",
|
||||
"estimate_view.runtime": "runtime",
|
||||
"estimate_view.physical_qubits": "physical qubits",
|
||||
"estimate_view.point_label": "slowdown {slowdown}: {qubits} physical qubits, {runtime}, distance {distance}, {factories} factories",
|
||||
"estimate_view.point_title": "slowdown {slowdown}: {qubits} physical qubits, {runtime}",
|
||||
"estimate_view.the_estimate": "the estimate",
|
||||
"estimate_view.qubit_label": "Physical qubit",
|
||||
"estimate_view.qubit_title": "The physical qubit the machine is built of",
|
||||
"estimate_view.budget_aria": "Error budget",
|
||||
"estimate_view.budget_title": "The probability the run may fail, shared by logical errors, distillation and the rotations’ synthesis",
|
||||
"estimate_view.model_label": "Code model",
|
||||
"estimate_view.model_title": "The gate-based surface code’s model: fitted to this engine’s exact-matching or union-find decoder, or the planar model’s assumed one",
|
||||
"estimate_view.fit_exact_matching": "fit: exact matching",
|
||||
"estimate_view.fit_union_find": "fit: union-find",
|
||||
"estimate_view.assumed_model": "assumed model",
|
||||
"estimate_view.estimate": "Estimate",
|
||||
"estimate_view.estimate_title": "What a fault-tolerant machine would need to run this program, each estimate signed",
|
||||
"estimate_view.heading": "Estimate",
|
||||
"estimate_view.budget": "budget",
|
||||
"estimate_view.ancillas_one": " ({n} ancilla)",
|
||||
"estimate_view.ancillas_other": " ({n} ancillas)",
|
||||
"estimate_view.depths": "; T depth {t_depth}, depth {depth}",
|
||||
"estimate_view.counts": "{logical} logical qubits{ancillas}, {measurements} measurements, {t} T, {toffolis} Toffolis, {rotations} rotations ({rotation_t} T in their words){depths}{bound}.",
|
||||
"estimate_view.bound_upper": "; the program branches, so these bound every run",
|
||||
"estimate_view.synth": "Each rotation within {each} (the synthesis share {synthesis} of the budget {budget}), {per} T apiece.",
|
||||
"estimate_view.synth_none": "Budget {budget}; nothing to synthesise.",
|
||||
"estimate_view.calibration": "Code distance from P(d) = a·(p/p*)^((d+1)/2) with a = {prefactor}, p* = {threshold}, fitted to this engine’s {label} decoder{extrapolated}.",
|
||||
"estimate_view.extrapolated": ", extrapolated past the measured p = 0.002–0.005",
|
||||
"estimate_view.factories_one": "{n} factory",
|
||||
"estimate_view.factories_other": "{n} factories",
|
||||
"estimate_view.readout": "{which}: {qubits} physical qubits ({factories}), {runtime}, code distance {distance}.",
|
||||
"estimate_view.the_estimate_cap": "The estimate",
|
||||
"estimate_view.slowed": "Slowed ×{slowdown}",
|
||||
"estimate_view.col_slowdown": "slowdown",
|
||||
"estimate_view.col_d": "d",
|
||||
"estimate_view.col_factories": "factories",
|
||||
"estimate_view.this_key": "this key",
|
||||
"estimate_view.verified_one": "{n} estimate sealed with {signer}: the seals verify, and the request re-run here gives every figure.",
|
||||
"estimate_view.verified_other": "{n} estimates sealed with {signer}: the seals verify, and the request re-run here gives every figure.",
|
||||
"estimate_view.not_verified": "The seals DO NOT VERIFY here (signed {signed}, receipts {receipts}, reproduced {reproduced}).",
|
||||
"estimate_view.t_factories_one": "{n} T factory",
|
||||
"estimate_view.t_factories_other": "{n} T factories",
|
||||
"estimate_view.summary": "On {qubit}: {qubits} physical qubits ({factories}, {share}% of them) for {runtime}, at code distance {distance} ({code}).",
|
||||
"estimate_view.model_note": "An estimate of a model: the planar model’s assumptions (uniform independent noise, free transport of T states, smooth T consumption) hold for every figure here. Slowing the program needs fewer factories; the frontier keeps each estimate that none of the others beats on both.",
|
||||
"estimate_view.bad_budget": "The budget is a probability between 0 and 1, such as 1e-3.",
|
||||
"estimate_view.estimating": "Estimating: counting the program, synthesising each rotation, searching the factories…",
|
||||
"estimate_view.stale": "For an earlier version of the program: estimate again."
|
||||
}
|
||||
21
wai/quantum-studio/locales/en/examples.json
Normal file
21
wai/quantum-studio/locales/en/examples.json
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
{
|
||||
"_meta": {
|
||||
"locale": "en",
|
||||
"area": "examples",
|
||||
"translation": "source"
|
||||
},
|
||||
"examples.bell_title": "Bell pair",
|
||||
"examples.bell_shows": "Two qubits entangled: only 00 and 11 come up, and ⟨Z0 Z1⟩ is exactly 1.",
|
||||
"examples.ghz_title": "GHZ state, 40 qubits",
|
||||
"examples.ghz_shows": "A Clifford circuit past any state vector, run exactly on the stabilizer tableau: all zeros or all ones.",
|
||||
"examples.rotation_title": "A rotation",
|
||||
"examples.rotation_shows": "Any angle runs on the double-precision state vector: ⟨Z0⟩ = cos 0.3 and ⟨Y0⟩ = −sin 0.3.",
|
||||
"examples.qft_title": "Quantum Fourier transform",
|
||||
"examples.qft_shows": "The Fourier transform of a basis state on three qubits: every outcome equally likely, the information in the amplitudes' phases.",
|
||||
"examples.teleport_title": "Teleportation",
|
||||
"examples.teleport_shows": "A state moved from qubit 0 to qubit 2 by measurement and correction: ⟨Z2⟩ = cos 0.7, ⟨X2⟩ = sin 0.7.",
|
||||
"examples.grover_title": "Grover search, 3 qubits",
|
||||
"examples.grover_shows": "Two rounds of amplitude amplification find the marked item 101 with probability 0.945.",
|
||||
"examples.noisy_bell_title": "A noisy Bell pair",
|
||||
"examples.noisy_bell_shows": "The same pair on a device whose gates go wrong at random: 01 and 10 appear, and ⟨Z0 Z1⟩ falls below 1."
|
||||
}
|
||||
21
wai/quantum-studio/locales/en/flags.json
Normal file
21
wai/quantum-studio/locales/en/flags.json
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
{
|
||||
"_meta": {
|
||||
"locale": "en",
|
||||
"area": "flags",
|
||||
"translation": "source"
|
||||
},
|
||||
"flags.critique": "the engine’s critique on the live diagram",
|
||||
"flags.assistant_asks": "the assistant asks before it proposes, and speaks only when asked",
|
||||
"flags.alternatives": "Alternatives: improve and explore, on the engine’s axes",
|
||||
"flags.predict_first": "predict before a run",
|
||||
"flags.workbench": "the Workbench",
|
||||
"flags.rules": "rules for proposals",
|
||||
"flags.shortcuts": "the classical-shortcut lens",
|
||||
"flags.novelty": "what is new: labels and Found",
|
||||
"flags.taste": "your taste",
|
||||
"flags.rewrites": "the rewrite lens",
|
||||
"flags.convergence": "your own way",
|
||||
"flags.note_locked": "The study you take part in sets the ones it names, so that each can be compared against a control; leave the study to change those.",
|
||||
"flags.note": "Turn any feature off; the Studio keeps your choice in this browser.",
|
||||
"flags.title": "Features"
|
||||
}
|
||||
188
wai/quantum-studio/locales/en/frame.json
Normal file
188
wai/quantum-studio/locales/en/frame.json
Normal file
|
|
@ -0,0 +1,188 @@
|
|||
{
|
||||
"_meta": {
|
||||
"locale": "en",
|
||||
"area": "frame",
|
||||
"translation": "source"
|
||||
},
|
||||
"method.exact": "Exact state vector",
|
||||
"method.statevector": "State vector, double precision",
|
||||
"method.statevector_single": "State vector on the GPU, single precision",
|
||||
"method.stabilizer": "Stabilizer tableau",
|
||||
"method.pauli": "Sparse Pauli dynamics",
|
||||
"method.mps": "Matrix product state",
|
||||
"method.tensor_network": "Tensor network",
|
||||
"method.cutrank": "Cut-rank sum",
|
||||
"method.cutrank_single": "Cut-rank sum on the GPU, single precision",
|
||||
"method.density_matrix": "Density matrix",
|
||||
"method.trajectories": "Trajectories",
|
||||
"accuracy.bit-exact": "The same bits on every machine.",
|
||||
"accuracy.exact": "No approximation beyond double-precision rounding.",
|
||||
"accuracy.single": "No approximation beyond single-precision rounding, about 10⁻⁷ per gate.",
|
||||
"accuracy.bounded": "An approximation, each value with a proven bound on its error.",
|
||||
"accuracy.estimate": "A statistical estimate, each value with its standard error.",
|
||||
"accuracy.heuristic": "An approximation, with the standard estimate of its error but no bound.",
|
||||
"noise.depolarizing_1q": "one-qubit depolarizing",
|
||||
"noise.depolarizing_2q": "two-qubit depolarizing",
|
||||
"noise.amplitude_damping": "amplitude damping",
|
||||
"noise.dephasing": "dephasing",
|
||||
"noise.readout": "readout flips",
|
||||
"frame.under_ms": "under 1 ms",
|
||||
"frame.bits": "{n} bits",
|
||||
"frame.run_title": "Run (Ctrl or ⌘ + Enter)",
|
||||
"frame.run": "▶ Run",
|
||||
"frame.cancel": "Cancel",
|
||||
"frame.predict_title": "Say what you expect before each run, and see how close you come",
|
||||
"frame.predict": "Predict first",
|
||||
"frame.this_computer": "This computer",
|
||||
"frame.this_browser": "This browser",
|
||||
"frame.the_service": "The service",
|
||||
"frame.examples_label": "Load an example",
|
||||
"frame.examples": "Examples…",
|
||||
"frame.studio": "Quantum Studio",
|
||||
"frame.run_on": "Run on",
|
||||
"frame.held": "Held lines {a} to {z}: no proposal may change them. Delete the markers to let them go.",
|
||||
"frame.review_label": "A proposal to review",
|
||||
"frame.copy_link": "Copy link",
|
||||
"frame.copy_link_title": "A link with the program in its fragment, which no server sees",
|
||||
"frame.open": "Open",
|
||||
"frame.save": "Save",
|
||||
"frame.shots": "Shots",
|
||||
"frame.seed": "Seed",
|
||||
"frame.auto_title": "The strongest method the program admits",
|
||||
"frame.method": "Method",
|
||||
"frame.observables": "Observables",
|
||||
"frame.amplitudes": "Amplitudes",
|
||||
"frame.device_noise": "A device is chosen: the noise is the device’s own, from its calibration.",
|
||||
"frame.noise": "Noise",
|
||||
"frame.program": "Program",
|
||||
"frame.circuit_text_label": "The circuit, drawn as text",
|
||||
"frame.saved": "Saved {path}.",
|
||||
"frame.saved_drawing": "Saved {name}, the engine's drawing.",
|
||||
"frame.svg_title": "Save the drawing as an SVG image",
|
||||
"frame.latex_title": "Save the drawing as LaTeX (plain TikZ)",
|
||||
"frame.choose_first": "Choose on the proposal under review first.",
|
||||
"frame.text": "Text",
|
||||
"frame.text_title": "The circuit as text, to copy",
|
||||
"frame.diagram": "Diagram",
|
||||
"frame.circuit": "Circuit",
|
||||
"frame.ready": "ready",
|
||||
"frame.result_empty": "Run the program to see its result here. Counts are keyed by the classical bits, highest bit first.",
|
||||
"frame.result": "Result",
|
||||
"frame.history": "History",
|
||||
"frame.clear": "Clear",
|
||||
"ai.server": "Model server",
|
||||
"ai.model": "Model",
|
||||
"ai.model_placeholder": "the server’s own",
|
||||
"ai.not_connected": "not connected",
|
||||
"ai.connect": "Connect",
|
||||
"ai.when_asked": "Only when I ask",
|
||||
"ai.when_stuck": "Offer a hint when I seem stuck",
|
||||
"ai.how": "How it helps",
|
||||
"ai.when": "When it speaks",
|
||||
"ai.settings_note": "A model on this machine by default: any server with the chat-completions interface and tool calls. Nothing leaves this machine unless the address points elsewhere.",
|
||||
"ai.intro": "Ask about the program. The assistant speaks only when asked, and uses the engine to check what it says: every number comes from a run, and every program it proposes is read and run here before it is offered.",
|
||||
"ai.placeholder": "Ask about this program…",
|
||||
"ai.ask_label": "Ask the assistant",
|
||||
"ai.ask": "Ask",
|
||||
"ai.stuck": "Stuck? Ask for a hint",
|
||||
"ai.q.question": "Ask me a question",
|
||||
"ai.q.hint": "Hint",
|
||||
"ai.q.explain": "Explain this circuit",
|
||||
"ai.q.method": "Why this method?",
|
||||
"ai.q.fix": "Fix the problem",
|
||||
"ai.title": "Assistant",
|
||||
"ai.gear": "Model…",
|
||||
"frame.engine_not_loaded": "engine not loaded",
|
||||
"frame.lint_at": " at {values}",
|
||||
"frame.lint": "{qubits} qubits · {gates} gates",
|
||||
"frame.lint_dynamic": " · measures in the middle",
|
||||
"frame.problem": "problem",
|
||||
"frame.editor_label": "The OpenQASM program",
|
||||
"frame.plan": "{method} · {mib} MiB at most",
|
||||
"frame.your_prediction": "your prediction",
|
||||
"frame.running": "running",
|
||||
"frame.running_on": "Running on {where}…",
|
||||
"frame.on_service": "On the service: {status}…",
|
||||
"frame.done": "Done on {where} in {took}.",
|
||||
"frame.cancelled_badge": "cancelled",
|
||||
"frame.refused": "refused",
|
||||
"frame.cancelled": "Cancelled.",
|
||||
"frame.verdict": "Verdict",
|
||||
"frame.accuracy": "Accuracy",
|
||||
"frame.working_out": "working it out here…",
|
||||
"frame.counts": "Counts · {total} shots · highest bit first",
|
||||
"frame.more_outcomes": "{n} more outcomes.",
|
||||
"frame.expectations": "Expectation values",
|
||||
"frame.th_state": "state",
|
||||
"frame.th_amplitude": "amplitude",
|
||||
"frame.th_probability": "probability",
|
||||
"frame.th_phase": "phase",
|
||||
"frame.checking": "checking…",
|
||||
"frame.download_job": "Download job",
|
||||
"frame.receipt": "Receipt",
|
||||
"frame.ran_on": "ran on",
|
||||
"frame.signed_by": "signed by",
|
||||
"frame.check": "check",
|
||||
"frame.ran_in": "ran in",
|
||||
"frame.timed_here": "{took}, timed by this page",
|
||||
"frame.energy": "energy",
|
||||
"frame.written_by": "written by",
|
||||
"frame.account": "account",
|
||||
"frame.receipt_note": "A receipt shows that this key signed this request and this result; anyone can run the request again to compare. It does not say who holds the key.",
|
||||
"frame.no_verdict": "no verdict",
|
||||
"frame.key_service": "the service’s key",
|
||||
"frame.key_computer": "this computer’s key",
|
||||
"frame.key_browser": "this browser’s key",
|
||||
"frame.key_named": "the key it names",
|
||||
"frame.verifies": "✓ verifies, checked on {where}",
|
||||
"frame.here_computer": "this computer",
|
||||
"frame.here_device": "this device",
|
||||
"frame.does_not_verify": "✗ does not verify",
|
||||
"frame.not_checked": "not checked: {error}",
|
||||
"frame.recomputed": "✓ recomputed from {version} in Versions",
|
||||
"frame.not_in_computer": "not in this computer’s versions",
|
||||
"frame.not_in_browser": "not in this browser’s versions",
|
||||
"frame.took": "Took {accepted} of {offered} change(s) from {who}{stops}, as {version}.",
|
||||
"frame.took_none": "Took none of the proposal from {who}{stops}; {version} in Versions keeps it.",
|
||||
"frame.blocked": "; {n} blocked by your rules",
|
||||
"frame.no_rewrite": "The engine has no rewrite for that one now; the program may have changed.",
|
||||
"frame.fix_blocked": "Your rules block that fix: it would change what they hold. {version} in Versions keeps it.",
|
||||
"frame.fixed_shows": "Fixed: {message}. The engine checked the result: {why}.",
|
||||
"frame.fixed": "Fixed, as {version}. Undo brings the lines back.",
|
||||
"frame.saved_job": "Saved {name}. wai-quantum verify checks it.",
|
||||
"frame.opened": "Opened {name}.",
|
||||
"frame.copied": "Copied a link with the program in its fragment, which no server sees.",
|
||||
"frame.from_history": "From the history: run on {where}, {when}.",
|
||||
"frame.history_empty": "Jobs you run appear here, kept on this device.",
|
||||
"frame.method_reach": "{method} (to {n} qubits)",
|
||||
"ai.thinking": "thinking…",
|
||||
"ai.used": "used {name}",
|
||||
"ai.retry": "The engine could not read the proposed program ({error}); asked for a correction.",
|
||||
"ai.does_not_parse": "does not parse",
|
||||
"ai.checked": "checked: {qubits} qubits, {gates} gates",
|
||||
"ai.ran_here": " ran here on {method}",
|
||||
"ai.did_not_run": " did not run: {error}",
|
||||
"ai.organic": " You are exploring on your own: end that under Versions to take it.",
|
||||
"ai.apply": "Apply",
|
||||
"ai.unsourced": "Not from a run: {list}. The model gave these itself; the engine did not compute them.",
|
||||
"ai.tokens": "{into} tokens in, {out} out",
|
||||
"ai.error": "The assistant could not answer: {error}. Check the model server under “Model…”.",
|
||||
"ai.connecting": "connecting…",
|
||||
"ai.connected": "connected",
|
||||
"frame.from_link": "The program from the link.",
|
||||
"frame.signs_as": "Signs as {did}… ({whose})",
|
||||
"frame.key_made_browser": "a key made for this browser",
|
||||
"frame.service_silent": "The service did not answer",
|
||||
"frame.versions_error": "Versions: {error}",
|
||||
"frame.lesson_loaded": "The starter program of “{title}”.",
|
||||
"frame.language": "Language",
|
||||
"frame.machine_assisted": "This interface's words are a machine-assisted translation, to be reviewed by a fluent reader.",
|
||||
"frame.where_browser": "this browser",
|
||||
"frame.where_service": "the service",
|
||||
"frame.where_computer": "this computer",
|
||||
"frame.gates_by": "{n} by {who}",
|
||||
"frame.written": "{parts} · of {of} gates, {version}",
|
||||
"frame.no_gates": "no gates",
|
||||
"frame.where_hardware": "your hardware",
|
||||
"frame.where_provider": "your provider {name}"
|
||||
}
|
||||
51
wai/quantum-studio/locales/en/gallery.json
Normal file
51
wai/quantum-studio/locales/en/gallery.json
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
{
|
||||
"_meta": {
|
||||
"locale": "en",
|
||||
"area": "gallery",
|
||||
"translation": "source"
|
||||
},
|
||||
"gallery.atlas_label": "The draft and {n} alternatives by two-qubit gates and depth",
|
||||
"gallery.axis_two_qubit": "two-qubit gates →",
|
||||
"gallery.axis_depth": "↑ depth",
|
||||
"gallery.draft_point": "the draft: {two_qubit} two-qubit gates, depth {depth}",
|
||||
"gallery.point_label": "alternative {n}: {two_qubit} two-qubit gates, depth {depth}",
|
||||
"gallery.point_title": "{n}. {label}: {two_qubit} two-qubit gates, depth {depth}",
|
||||
"gallery.aim_placeholder": "Toward… fewer qubits, another entangler, more symmetry",
|
||||
"gallery.aim_label": "What Explore should aim for",
|
||||
"gallery.improve": "Improve",
|
||||
"gallery.improve_title": "The same circuit, cheaper: each checked equivalent to the draft",
|
||||
"gallery.explore": "Explore",
|
||||
"gallery.explore_title": "Different circuits toward the aim, from the model, each measured by the engine",
|
||||
"gallery.intro": "Improve: the same circuit, cheaper, each checked equivalent. Explore: different circuits toward an aim, from the model, each measured by the engine. Nothing changes until you apply one.",
|
||||
"gallery.title": "Alternatives",
|
||||
"gallery.how_one": "How: {n} rewrite, each checked",
|
||||
"gallery.how_many": "How: {n} rewrites, each checked",
|
||||
"gallery.how_reordered": "How: the same gates, in another order",
|
||||
"gallery.and_this_one": "and this one reduces to the same by:",
|
||||
"gallery.commute": "The two are then the same up to the order of gates that commute.",
|
||||
"gallery.does_not_parse": "does not parse: {error}",
|
||||
"gallery.by_taste_one": "Ordered by your taste ({profile}, {n} choice).",
|
||||
"gallery.by_taste_many": "Ordered by your taste ({profile}, {n} choices).",
|
||||
"gallery.from_engine": "the engine",
|
||||
"gallery.from_model": "the model",
|
||||
"gallery.lines_changed": "{n} lines changed",
|
||||
"gallery.same_lines": "the same lines",
|
||||
"gallery.program": "Program",
|
||||
"gallery.apply": "Apply",
|
||||
"gallery.nothing_to_improve": "Nothing to improve that the engine can check: no gates cancel or merge, and the model offered none it could confirm.",
|
||||
"gallery.nothing_read": "The model offered nothing the engine could read.",
|
||||
"gallery.not_offered": "Not offered: {list}.",
|
||||
"gallery.engine_looking": "The engine is looking…",
|
||||
"gallery.cannot_read": "The engine cannot read the draft: {error}",
|
||||
"gallery.paused_engine_only": "You are exploring on your own: these are the engine’s alone.",
|
||||
"gallery.connect_for_rewrites": "Connect a model under “Model…” in the Assistant for its rewrites as well.",
|
||||
"gallery.a_rewrite": "a rewrite",
|
||||
"gallery.model_failed_engine_only": "The model did not answer ({error}); these are the engine’s alone.",
|
||||
"gallery.breaks_rules": "{label}: it breaks your rules: {why}",
|
||||
"gallery.not_same": "{label}: not the same circuit ({why})",
|
||||
"gallery.paused_explore": "You are exploring on your own: Explore asks the model, so it waits until you end that under Versions. Improve works without it.",
|
||||
"gallery.explore_needs_model": "Explore asks a model for ideas, and none is connected. Connect one under “Model…” in the Assistant; Improve works without one.",
|
||||
"gallery.model_imagining": "The model is imagining; the engine will measure each idea…",
|
||||
"gallery.an_idea": "an idea",
|
||||
"gallery.model_failed": "The model did not answer: {error}"
|
||||
}
|
||||
11
wai/quantum-studio/locales/en/generators.json
Normal file
11
wai/quantum-studio/locales/en/generators.json
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"_meta": {
|
||||
"locale": "en",
|
||||
"area": "generators",
|
||||
"translation": "source"
|
||||
},
|
||||
"generators.inputs": "The generator’s inputs",
|
||||
"generators.read_at": "A generator, read at",
|
||||
"generators.one_circuit": "one circuit of its family; the Workbench checks it at every size.",
|
||||
"generators.value_of": "the value of {name}"
|
||||
}
|
||||
24
wai/quantum-studio/locales/en/hardware.json
Normal file
24
wai/quantum-studio/locales/en/hardware.json
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
{
|
||||
"_meta": {
|
||||
"locale": "en",
|
||||
"area": "hardware",
|
||||
"translation": "source"
|
||||
},
|
||||
"hardware.note": "Runs on your own hardware go through the desktop app or the command line (wai-quantum run --provider NAME): a browser tab must not hold the credentials a provider needs.",
|
||||
"hardware.cost_unknown": "cost unknown: {why}",
|
||||
"hardware.free": "free",
|
||||
"hardware.billed_by": " (billed by the {unit})",
|
||||
"hardware.about_seconds": ", about {seconds} s",
|
||||
"hardware.confirm_run": "Run on {name} ({device}, {provenance})?",
|
||||
"hardware.confirm_cost": "It is not free: {cost}.",
|
||||
"hardware.confirm_compiled": "The program is compiled to {gates} native gates in {basis}, {swaps} swaps, and was checked against your circuit here; {shots} shots.",
|
||||
"hardware.confirm_spend": "Running it spends your account's money or quota.",
|
||||
"hardware.choose_provider": "choose one of your providers first",
|
||||
"hardware.run_it": "Run it",
|
||||
"hardware.cancel": "Cancel",
|
||||
"hardware.not_free_title": "This run is not free",
|
||||
"hardware.segment": "Your hardware",
|
||||
"hardware.segment_title": "Run on one of your own providers; a run that is not free asks first",
|
||||
"hardware.provider_label": "Your provider",
|
||||
"hardware.no_providers": "No providers yet: add one with wai-quantum providers add, then reopen this list."
|
||||
}
|
||||
29
wai/quantum-studio/locales/en/novelty.json
Normal file
29
wai/quantum-studio/locales/en/novelty.json
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
{
|
||||
"_meta": {
|
||||
"locale": "en",
|
||||
"area": "novelty",
|
||||
"translation": "source"
|
||||
},
|
||||
"novelty.same_state": "the same state from |0…0⟩",
|
||||
"novelty.same_circuit": "the same circuit",
|
||||
"novelty.route": "a different route to {name}",
|
||||
"novelty.route_why": "The engine finds {what} as {name} ({how}), built unlike it: {distance} apart, where 0 is built alike and 1 shares nothing. Worth a second look.",
|
||||
"novelty.known": "a known construction: {name}",
|
||||
"novelty.known_why": "The engine finds {what} as {name} ({how}), built alike.",
|
||||
"novelty.new": "new: {novelty} from the nearest ({name})",
|
||||
"novelty.new_why": "Its gates and their order are {novelty} from {name}, the nearest of the {compared} programs compared (0 built alike, 1 nothing shared). A reason to look, not a claim that nobody has built it.",
|
||||
"novelty.unasked": "Better than the reference on what the cost does not weigh: {list}.",
|
||||
"novelty.unasked_item": "{measure} {candidate} against {reference}",
|
||||
"novelty.kind_route": "a different route",
|
||||
"novelty.kind_aberration": "an aberration",
|
||||
"novelty.kind_novel": "far from the known",
|
||||
"novelty.found_empty": "What the engine finds worth a second look comes here: a known result reached by a different route, a Workbench candidate that breaks only one of its rules, a verified entry far from everything it was compared with. Save what you mean to keep; dismiss the rest.",
|
||||
"novelty.found_title": "Found",
|
||||
"novelty.found_count": "{flagged} flagged · {saved} saved",
|
||||
"novelty.note_placeholder": "A note, kept with it",
|
||||
"novelty.note_label": "A note on {title}",
|
||||
"novelty.saved": "Saved",
|
||||
"novelty.save": "Save",
|
||||
"novelty.dismiss": "Dismiss",
|
||||
"novelty.open": "Open in editor"
|
||||
}
|
||||
28
wai/quantum-studio/locales/en/predict.json
Normal file
28
wai/quantum-studio/locales/en/predict.json
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
{
|
||||
"_meta": {
|
||||
"locale": "en",
|
||||
"area": "predict",
|
||||
"translation": "source"
|
||||
},
|
||||
"predict.keyed": "Counts are keyed by the classical bits, highest bit first.",
|
||||
"predict.keyed_width": "Counts are keyed by the classical bits, highest bit first: {width} of them.",
|
||||
"predict.not_bits": "An outcome is a string of 0s and 1s, highest bit first.",
|
||||
"predict.wrong_width_one": "This program has {width} classical bit; the outcome has {length}.",
|
||||
"predict.wrong_width_other": "This program has {width} classical bits; the outcome has {length}.",
|
||||
"predict.bad_share": "The share is a percentage of the shots, from 0 to 100.",
|
||||
"predict.before": "Before it runs",
|
||||
"predict.question": "Which outcome do you expect most often, and in what share of the shots?",
|
||||
"predict.outcome_label": "Most likely outcome",
|
||||
"predict.share_label": "Its share, %",
|
||||
"predict.run": "Run",
|
||||
"predict.skip": "Run without predicting",
|
||||
"predict.yours": "Your prediction",
|
||||
"predict.no_counts": "This run gave no counts to set it against: give the job shots.",
|
||||
"predict.right": "The outcome you named came out on top; your share was {points} points off.",
|
||||
"predict.wrong": "Another outcome came out on top: {top} in {share} of the shots.",
|
||||
"predict.you_said": "you said",
|
||||
"predict.bits_in": "{bits} in {share}",
|
||||
"predict.the_run": "the run",
|
||||
"predict.first": "Your first prediction kept on this device; each one after it adds to a tally here.",
|
||||
"predict.tally": "Over {n} predictions kept on this device: you named the top outcome in {right}, and your share was off by {points} points on average."
|
||||
}
|
||||
24
wai/quantum-studio/locales/en/rewrite_view.json
Normal file
24
wai/quantum-studio/locales/en/rewrite_view.json
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
{
|
||||
"_meta": {
|
||||
"locale": "en",
|
||||
"area": "rewrite_view",
|
||||
"translation": "source"
|
||||
},
|
||||
"rewrite_view.rule_cancel": "cancel",
|
||||
"rewrite_view.rule_merge": "merge",
|
||||
"rewrite_view.rule_through": "carry",
|
||||
"rewrite_view.rule_conjugate": "conjugate",
|
||||
"rewrite_view.rule_drop": "drop",
|
||||
"rewrite_view.rule_move": "move",
|
||||
"rewrite_view.rewrites": "Rewrites",
|
||||
"rewrite_view.rewrites_title": "Every rewrite that keeps the program’s meaning, each checked by the engine",
|
||||
"rewrite_view.heading": "Rewrites",
|
||||
"rewrite_view.take": "Take",
|
||||
"rewrite_view.offer_note": "A rewrite, checked by the engine: {why}.",
|
||||
"rewrite_view.lines_one": "line {lines}",
|
||||
"rewrite_view.lines_other": "lines {lines}",
|
||||
"rewrite_view.checking": "The engine is checking each rewrite…",
|
||||
"rewrite_view.unread": "The engine cannot read the program: {error}",
|
||||
"rewrite_view.none": "No rewrite applies: no gates cancel, merge or conjugate, and no two that commute sit side by side.",
|
||||
"rewrite_view.note": "Each keeps the circuit’s meaning: the engine checks the gates a rewrite takes against the gates it puts, on the qubits they touch. Take one at a time; the review shows the change."
|
||||
}
|
||||
21
wai/quantum-studio/locales/en/rules.json
Normal file
21
wai/quantum-studio/locales/en/rules.json
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
{
|
||||
"_meta": {
|
||||
"locale": "en",
|
||||
"area": "rules",
|
||||
"translation": "source"
|
||||
},
|
||||
"rules.title": "Rules for proposals",
|
||||
"rules.hold": "Hold the selected lines",
|
||||
"rules.hold_title": "Mark them with {lock} and {unlock}: no proposal may change them",
|
||||
"rules.region": "Keep the next proposal to the selected lines",
|
||||
"rules.gates": "Gates a proposal may add",
|
||||
"rules.gates_any": "any",
|
||||
"rules.avoid_gates": "Gates to avoid",
|
||||
"rules.none": "none",
|
||||
"rules.avoid_text": "Text to avoid",
|
||||
"rules.avoid_text_placeholder": "none, or text, one per comma",
|
||||
"rules.qubits": "Hold the qubit declarations",
|
||||
"rules.note": "The engine checks every proposal against these, change by change: the assistant's, an alternative, a fix, an agent's. A change that breaks one cannot be taken. Lines between {lock} and {unlock} are held. What you type is yours to change.",
|
||||
"rules.only_lines": "Only lines {first} to {last}, for the next proposal ",
|
||||
"rules.clear_region": "Keep to no lines"
|
||||
}
|
||||
40
wai/quantum-studio/locales/en/shortcuts_view.json
Normal file
40
wai/quantum-studio/locales/en/shortcuts_view.json
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"_meta": {
|
||||
"locale": "en",
|
||||
"area": "shortcuts_view",
|
||||
"translation": "source"
|
||||
},
|
||||
"shortcuts_view.route_stabilizer": "Stabilizer tableau",
|
||||
"shortcuts_view.route_cutrank": "Cut-rank sum",
|
||||
"shortcuts_view.route_mps": "Exact matrix product state",
|
||||
"shortcuts_view.route_light_cone": "Light cone",
|
||||
"shortcuts_view.route_tensor_network": "Tensor network",
|
||||
"shortcuts_view.route_statevector": "State vector",
|
||||
"shortcuts_view.under_ms": "under 1 ms",
|
||||
"shortcuts_view.days": "{n} days",
|
||||
"shortcuts_view.years": "{n} years",
|
||||
"shortcuts_view.size_widest_cut": "widest cut {n} bits",
|
||||
"shortcuts_view.size_product_state": "a product state",
|
||||
"shortcuts_view.size_bond": "bond ≤ 2^{n}",
|
||||
"shortcuts_view.size_cone": "cone of {n} qubits",
|
||||
"shortcuts_view.size_largest_tensor": "largest tensor 2^{n}",
|
||||
"shortcuts_view.size_amplitudes": "2^{n} amplitudes",
|
||||
"shortcuts_view.size_tableau": "a tableau",
|
||||
"shortcuts_view.classical_cost": "Classical cost",
|
||||
"shortcuts_view.classical_cost_title": "Every exact classical route the engine knows for this program, with its cost",
|
||||
"shortcuts_view.thorough": "Thorough",
|
||||
"shortcuts_view.thorough_title": "Also search a contraction tree and a longer cut-rank order: seconds to minutes on a large program",
|
||||
"shortcuts_view.heading": "Classically",
|
||||
"shortcuts_view.unread": "The engine cannot read the program: {error}",
|
||||
"shortcuts_view.does_not_apply": "does not apply",
|
||||
"shortcuts_view.not_searched": "not searched",
|
||||
"shortcuts_view.col_route": "route",
|
||||
"shortcuts_view.col_size": "size",
|
||||
"shortcuts_view.col_memory": "memory",
|
||||
"shortcuts_view.col_operations": "operations",
|
||||
"shortcuts_view.col_rate": "at 10¹⁰/s",
|
||||
"shortcuts_view.note": "Each route is exact; operations are to a first sample, amplitude or expectation value. The times are at a reference rate, not a measurement. {note}.",
|
||||
"shortcuts_view.searching": "Searching each route, a contraction tree among them: this can take minutes on a large program…",
|
||||
"shortcuts_view.pricing": "Pricing each route…",
|
||||
"shortcuts_view.stale": "For an earlier version of the program: check again."
|
||||
}
|
||||
25
wai/quantum-studio/locales/en/state_views.json
Normal file
25
wai/quantum-studio/locales/en/state_views.json
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
{
|
||||
"_meta": {
|
||||
"locale": "en",
|
||||
"area": "state_views",
|
||||
"translation": "source"
|
||||
},
|
||||
"state_views.amp_label": "probability {p}, phase {phase}π",
|
||||
"state_views.prob_label": "probability {p}",
|
||||
"state_views.amps_label": "Amplitudes at this step",
|
||||
"state_views.col_state": "state",
|
||||
"state_views.col_amplitude": "amplitude",
|
||||
"state_views.col_probability": "probability",
|
||||
"state_views.col_phase": "phase",
|
||||
"state_views.amps_note": "{listed} of {nonzero} non-zero basis states listed, of {of}; purity {purity}{mixed}; digest {digest}…",
|
||||
"state_views.mixed": " (a mixed state: probabilities, no amplitudes)",
|
||||
"state_views.bloch_label": "Qubit {qubit}: Bloch vector ({x}, {y}, {z}), length {length}",
|
||||
"state_views.qubit_label": "Qubit {qubit}: probability of 1 {prob}, purity {purity}",
|
||||
"state_views.caption": " p(1) {prob} · purity {purity}{twin}",
|
||||
"state_views.without_noise_z": " · without noise z {z}",
|
||||
"state_views.choose_qubits": "Choose up to six qubits for their reduced state.",
|
||||
"state_views.rho_label": "The reduced density matrix of qubits {qubits}",
|
||||
"state_views.rho_note": "qubits {qubits} (the first the most significant): purity {purity}, entropy {entropy} bits. Each entry's size is shown; hover for its value.",
|
||||
"state_views.without_noise": "without noise {p}",
|
||||
"state_views.overlay_note": "The bars are the noisy state's probabilities; each mark is the noiseless state's on the same path. Fidelity to it {fidelity}."
|
||||
}
|
||||
60
wai/quantum-studio/locales/en/study.json
Normal file
60
wai/quantum-studio/locales/en/study.json
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
{
|
||||
"_meta": {
|
||||
"locale": "en",
|
||||
"area": "study",
|
||||
"translation": "source"
|
||||
},
|
||||
"study.measure_quality": "your edits the engine proves equal that made it cheaper",
|
||||
"study.measure_quality_trend": "that share, later against earlier",
|
||||
"study.measure_selection": "how often you took the engine’s best of those shown",
|
||||
"study.measure_calibration_off": "how far your predicted share was from the run’s",
|
||||
"study.measure_calibration_slope": "the run’s share against your prediction (1 is calibrated)",
|
||||
"study.measure_unassisted": "your probe score without the assistant (1 matches the reference)",
|
||||
"study.measure_ownership": "your answers on ownership, 1 to 7",
|
||||
"study.measure_authorship": "your share of the program’s gates",
|
||||
"study.measure_novelty": "how far your designs are from the known constructions",
|
||||
"study.measure_diversity": "how many distinct designs you made (Vendi)",
|
||||
"study.measure_convergence": "a model’s share of your program’s gates",
|
||||
"study.title": "Study",
|
||||
"study.load": "Load a protocol",
|
||||
"study.keep": "Keep a record of how I work, in this browser",
|
||||
"study.enrolled": "You take part in “{study}”, condition {condition}, set by your key. Your record stays in this browser until you export it.",
|
||||
"study.intro": "Take part in a study of how people design with the engine: a researcher gives you a protocol, sealed before any data, and you see what it studies before you choose. Or keep a record for yourself.",
|
||||
"study.kept": "Kept here: {choices} among candidates, {probes}, {answers} on ownership, and your predictions and history.",
|
||||
"study.choice_one": "{n} choice",
|
||||
"study.choices": "{n} choices",
|
||||
"study.probe_one": "{n} probe",
|
||||
"study.probes": "{n} probes",
|
||||
"study.answer_one": "{n} answer",
|
||||
"study.answers": "{n} answers",
|
||||
"study.own": "How much is this yours?",
|
||||
"study.probe": "A probe task",
|
||||
"study.my_record": "My record",
|
||||
"study.export": "Export my record",
|
||||
"study.leave": "Leave the study",
|
||||
"study.forget": "Forget what is kept",
|
||||
"study.hypotheses": "What it studies, written before any data:",
|
||||
"study.compares": "It compares {n} conditions, each a setting of the Studio’s features; your key assigns you one. Its primary measure: {primary}. The protocol is sealed (digest {digest}…), so it cannot change after you join.",
|
||||
"study.join": "Take part",
|
||||
"study.not_now": "Not now",
|
||||
"study.not_protocol": "That is not a protocol the engine opens: {error}",
|
||||
"study.left": "You left the study. What was kept stays in this browser until you forget it.",
|
||||
"study.save_answers": "Save my answers",
|
||||
"study.answer_all": "Answer every one",
|
||||
"study.saved_answers": "Saved, with the version of the program you answered about.",
|
||||
"study.own_scale": "About the program in the editor, from 1 (not at all) to 7 (completely):",
|
||||
"study.which_probe": "Which probe",
|
||||
"study.done_before": " (done before)",
|
||||
"study.answer_label": "Your answer, in OpenQASM",
|
||||
"study.score": "Score it",
|
||||
"study.verified": "Verified. Score {score} (the reference scores 1; cost {cost} against {reference}).",
|
||||
"study.not_verified": "Not verified: {failure}. Score 0.",
|
||||
"study.probe_note": "Done without the assistant: it is paused until you close this. The engine scores your answer.",
|
||||
"study.close": "Close",
|
||||
"study.of_edits": "{n} of {of} edits",
|
||||
"study.of_choices": "{n} of {of}; by chance {chance}",
|
||||
"study.predictions": "{n} predictions",
|
||||
"study.designs": "{n} designs",
|
||||
"study.measures_note": "Each is the engine’s, computed again from what you made and did; none is a model’s judgement.",
|
||||
"study.exported": "Saved {where}, sealed with your key. Give it to the researcher; nothing was sent."
|
||||
}
|
||||
58
wai/quantum-studio/locales/en/taste.json
Normal file
58
wai/quantum-studio/locales/en/taste.json
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
{
|
||||
"_meta": {
|
||||
"locale": "en",
|
||||
"area": "taste",
|
||||
"translation": "source"
|
||||
},
|
||||
"taste.part_economy_what": "what it spends: gates, depth, T gates",
|
||||
"taste.part_clarity_what": "how readily it is read",
|
||||
"taste.part_insight_what": "what it shows about the problem",
|
||||
"taste.part_precision_what": "how exactly it does its job, under noise too",
|
||||
"taste.part_utility_what": "how readily it is used elsewhere",
|
||||
"taste.part_economy": "economy",
|
||||
"taste.part_clarity": "clarity",
|
||||
"taste.part_insight": "insight",
|
||||
"taste.part_precision": "precision",
|
||||
"taste.part_utility": "utility",
|
||||
"taste.no_choices": "No choices yet. Compare two kept generators, or apply or refuse an alternative that is the same circuit as the draft, and your taste is learned from what you choose.",
|
||||
"taste.choices_one": "{n} choice",
|
||||
"taste.choices_many": "{n} choices",
|
||||
"taste.choices_parts": " ({parts})",
|
||||
"taste.predicts": "it predicts {right} of the {of} you made after your first, each from the ones before",
|
||||
"taste.leans": "it leans toward {list}",
|
||||
"taste.unmeasured": "{n} differ in nothing the engine measures",
|
||||
"taste.summary": "{parts}.",
|
||||
"taste.puts_first": "{part} puts {first} first",
|
||||
"taste.the_cost": "the cost",
|
||||
"taste.disagreeing": "Disagreeing: {list}.",
|
||||
"taste.narrow": "The first {first} are {ranked} apart in how they are built; by {by}, {baseline}{narrows}.",
|
||||
"taste.narrows": ": this ranking narrows what comes first",
|
||||
"taste.profile_label": "The taste profile’s name",
|
||||
"taste.compare": "Compare two",
|
||||
"taste.compare_title": "The two kept generators your profile is least sure of: choose the one you prefer",
|
||||
"taste.rank": "Rank by my taste",
|
||||
"taste.dial_label": "The novelty dial, from the typical to the novel",
|
||||
"taste.title": "Your taste",
|
||||
"taste.profile": "Profile",
|
||||
"taste.typical": "typical",
|
||||
"taste.novel": "novel",
|
||||
"taste.note": "You choose only between programs the engine proves do the same thing, so a choice is about taste, never correctness. The profile is yours, kept in this browser under its name. A ranking shows how typical each one is, which the profile never learns and only the dial moves.",
|
||||
"taste.none": "Start an archive and keep two generators or more to compare and rank them.",
|
||||
"taste.finding_pair": "The engine is finding the pair your profile is least sure of…",
|
||||
"taste.nothing_to_compare": "Nothing to compare: {why}.",
|
||||
"taste.part_label": "What the choice is about",
|
||||
"taste.the_whole": "the whole",
|
||||
"taste.cost_suffix": " · cost {cost}",
|
||||
"taste.this_one": "This one",
|
||||
"taste.which": "Which do you prefer? The engine proves they do the same thing ({how}).",
|
||||
"taste.about": "About",
|
||||
"taste.skip": "Skip",
|
||||
"taste.kept": "Kept: {chosen} over {other}{part}. ",
|
||||
"taste.for_its": ", for its {part}",
|
||||
"taste.another": "Another",
|
||||
"taste.typicality_title": "Typicality: how near the known constructions it is built, from 1 (built as one is) to 0 (nothing shared)",
|
||||
"taste.typicality_none": "typicality —",
|
||||
"taste.typicality": "typicality {value}",
|
||||
"taste.score": "score {score}",
|
||||
"taste.no_choices_dial": "No choices yet: ordered by the dial alone."
|
||||
}
|
||||
17
wai/quantum-studio/locales/en/verdict_view.json
Normal file
17
wai/quantum-studio/locales/en/verdict_view.json
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"_meta": {
|
||||
"locale": "en",
|
||||
"area": "verdict_view",
|
||||
"translation": "source"
|
||||
},
|
||||
"verdict_view.refused": "refused",
|
||||
"verdict_view.parsed": "parsed, not run",
|
||||
"verdict_view.executed": "executed, not checked",
|
||||
"verdict_view.evidence": "checked as evidence",
|
||||
"verdict_view.proof": "checked as proof",
|
||||
"verdict_view.fails": ": fails",
|
||||
"verdict_view.no_verdict": "no verdict",
|
||||
"verdict_view.sealed": "sealed by the receipt",
|
||||
"verdict_view.not_sealed": "worked out here, not sealed by a receipt",
|
||||
"verdict_view.why": " {statement} ({where})"
|
||||
}
|
||||
69
wai/quantum-studio/locales/en/versions.json
Normal file
69
wai/quantum-studio/locales/en/versions.json
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
{
|
||||
"_meta": {
|
||||
"locale": "en",
|
||||
"area": "versions",
|
||||
"translation": "source"
|
||||
},
|
||||
"versions.hand_person": "you",
|
||||
"versions.hand_assistant": "the assistant",
|
||||
"versions.hand_agent": "an agent",
|
||||
"versions.hand_engine": "the engine",
|
||||
"versions.hand_origin": "where it came from",
|
||||
"versions.hand_assistant_then_person": "the assistant, then you",
|
||||
"versions.hand_agent_then_person": "an agent, then you",
|
||||
"versions.how_start": "started",
|
||||
"versions.how_edit": "edited",
|
||||
"versions.how_proposal": "proposed",
|
||||
"versions.how_merge": "merged",
|
||||
"versions.made_by": "{how} by {who}",
|
||||
"versions.started_from": "started from {who}",
|
||||
"versions.opened_from": "opened {who}",
|
||||
"versions.change_one": "{n} change",
|
||||
"versions.changes": "{n} changes",
|
||||
"versions.gate_one": "{n} gate",
|
||||
"versions.gates": "{n} gates",
|
||||
"versions.line_one": "{n} line",
|
||||
"versions.lines": "{n} lines",
|
||||
"versions.hands": "Who wrote it",
|
||||
"versions.hands_title": "Mark each line and gate with whose hand it is in",
|
||||
"versions.download": "Download",
|
||||
"versions.download_title": "The program and its history, as wai-quantum history verify reads them",
|
||||
"versions.title": "Versions",
|
||||
"versions.intro": "Each change, who made it and how. What you type is yours; a proposal you apply is its proposer’s, and only the changes you take reach the program.",
|
||||
"versions.merge_nothing": "{id} holds nothing the program does not.",
|
||||
"versions.proposal_same": "The proposal is the program as it is.",
|
||||
"versions.take_all": "Take all {n}",
|
||||
"versions.take_some": "Take {n} of {of}",
|
||||
"versions.bring_in": "Bring in {id}",
|
||||
"versions.proposal_from": "A proposal from {who}",
|
||||
"versions.review_sum": " · {changes}{blocked}. Take the ones you want; the program waits until you choose.",
|
||||
"versions.blocked_by_your_rules": ", {n} blocked by your rules",
|
||||
"versions.at_line": "at line {line}",
|
||||
"versions.blocked_why": "Blocked: {why}.",
|
||||
"versions.not_now": "Not now",
|
||||
"versions.reject_all": "Reject all",
|
||||
"versions.unread": "The program does not read here, so its gates are not counted; its lines are marked.",
|
||||
"versions.bar_part": "{n} of {of} gates by {who}",
|
||||
"versions.hand_gates": "{who}: {gates}",
|
||||
"versions.sum": "{version}: {gates}, {lines}",
|
||||
"versions.hand_share": "{who}: {gates}, {lines}",
|
||||
"versions.open": "Open {id}",
|
||||
"versions.open_title": "Put this version in the editor; what you change from it is a line of work of its own",
|
||||
"versions.bring": "Bring {id} in",
|
||||
"versions.bring_title": "Review its changes against the program and take the ones you want; recorded as a merge",
|
||||
"versions.what": " {made}{from}, {when}",
|
||||
"versions.from": ", from {parents}",
|
||||
"versions.and": " and ",
|
||||
"versions.review_taken": "{n} of {changes} taken{blocked}{rest}.",
|
||||
"versions.blocked_by_the_rules": ", {n} blocked by the rules",
|
||||
"versions.rest_kept": "; the rest were not taken, and the whole proposal is kept below",
|
||||
"versions.whole_proposal": "The whole proposal",
|
||||
"versions.against": "+{added} −{removed} against {parent}{sealed}",
|
||||
"versions.sealed": " · sealed",
|
||||
"versions.opened": "Opened {id}. What you change from here is a line of work of its own.",
|
||||
"versions.in_editor": "in the editor",
|
||||
"versions.a_head": "a head",
|
||||
"versions.item_review": "{n} of {of} taken{blocked} · ",
|
||||
"versions.item_blocked": ", {n} blocked",
|
||||
"versions.saved": "Saved program.qasm and program.history.json; wai-quantum history verify program.qasm checks every version."
|
||||
}
|
||||
18
wai/quantum-studio/locales/en/visual_edit.json
Normal file
18
wai/quantum-studio/locales/en/visual_edit.json
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
"_meta": {
|
||||
"locale": "en",
|
||||
"area": "visual_edit",
|
||||
"translation": "source"
|
||||
},
|
||||
"visual_edit.chip_title": "Drag {gate} onto a wire, or choose it and then a place on the diagram",
|
||||
"visual_edit.armed": "Now choose a place on a wire for {gate}: click the diagram.",
|
||||
"visual_edit.delete": "Delete gate",
|
||||
"visual_edit.delete_title": "Delete the selected gate (Delete)",
|
||||
"visual_edit.palette_label": "Gates to put on the circuit",
|
||||
"visual_edit.edit_by_drawing": "Edit by drawing",
|
||||
"visual_edit.edited": "{summary}: an edit to the program's text, recorded as yours.",
|
||||
"visual_edit.too_few_wires": "{gate} takes {arity} wires; the program has {wires}.",
|
||||
"visual_edit.no_wire": "No wire there.",
|
||||
"visual_edit.gate_label": "{gate}: arrows move it, Delete removes it",
|
||||
"visual_edit.a_gate": "a gate"
|
||||
}
|
||||
101
wai/quantum-studio/locales/en/workbench.json
Normal file
101
wai/quantum-studio/locales/en/workbench.json
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
{
|
||||
"_meta": {
|
||||
"locale": "en",
|
||||
"area": "workbench",
|
||||
"translation": "source"
|
||||
},
|
||||
"workbench.measure_depth": "depth",
|
||||
"workbench.measure_two_qubit": "two-qubit gates",
|
||||
"workbench.measure_t_count": "T gates",
|
||||
"workbench.measure_gates": "gates",
|
||||
"workbench.measure_two_qubit_depth": "two-qubit depth",
|
||||
"workbench.measure_one_qubit": "one-qubit gates",
|
||||
"workbench.measure_three_qubit": "three-qubit gates",
|
||||
"workbench.measure_non_clifford": "non-Clifford gates",
|
||||
"workbench.measure_qubits": "qubits",
|
||||
"workbench.sizes_name_each": "name each input: {list}",
|
||||
"workbench.sizes_no_input": "the program takes no input {name}; it takes {names}",
|
||||
"workbench.sizes_whole": "{name}: whole numbers, 0 or more, as {name} = 3, 5, 8",
|
||||
"workbench.sizes_missing": "give values for {names}",
|
||||
"workbench.cost_needs_weight": "give a weight above 0 to at least one measure of the cost",
|
||||
"workbench.map_label": "The archive: {n} cells by {x} and {y}",
|
||||
"workbench.point_label": "{id}, by {proposer}: cost {cost}, {x} and {y}",
|
||||
"workbench.point_title": "{id} ({proposer}): cost {cost}",
|
||||
"workbench.outcome_duplicate": "{who}: seen before, not evaluated again",
|
||||
"workbench.outcome_not_verified": "{who}: not verified: {failure}",
|
||||
"workbench.outcome_did_not_read": "it did not read",
|
||||
"workbench.outcome_improvement": "{who}: kept as {id}, cheaper than every generator before it (cost {cost})",
|
||||
"workbench.outcome_kept": "{who}: kept as {id}, the best of its cell (cost {cost})",
|
||||
"workbench.outcome_verified": "{who}: verified (cost {cost}), but its cell already holds one as cheap",
|
||||
"workbench.start": "Start",
|
||||
"workbench.start_title": "A new archive, seeded with the program in the editor as the reference",
|
||||
"workbench.task_label": "What each member must do",
|
||||
"workbench.task_prepares": "prepare the same state from |0…0⟩",
|
||||
"workbench.task_equivalent": "be the same circuit (unitary)",
|
||||
"workbench.sizes_label": "The sizes to check at",
|
||||
"workbench.gates_any": "any",
|
||||
"workbench.gates_label": "The gates a proposal may use",
|
||||
"workbench.conn_label": "Which qubits a gate may join",
|
||||
"workbench.conn_all": "any pair",
|
||||
"workbench.conn_line": "neighbours on a line",
|
||||
"workbench.weight_label": "the cost's weight on {measure}",
|
||||
"workbench.axis_first": "The map’s first axis",
|
||||
"workbench.axis_second": "The map’s second axis",
|
||||
"workbench.spec": "The specification",
|
||||
"workbench.each_member_must": "Each member must",
|
||||
"workbench.checked_at": "checked at",
|
||||
"workbench.using": "using",
|
||||
"workbench.on": "on",
|
||||
"workbench.cost_summed": "Cost, summed over the sizes:",
|
||||
"workbench.map": "Map",
|
||||
"workbench.against": "against",
|
||||
"workbench.search": "Search ×100",
|
||||
"workbench.search_title": "The built-in, blind search: a hundred seeded edits of the archive’s best, each checked by the engine",
|
||||
"workbench.ask": "Ask the model ×3",
|
||||
"workbench.ask_title": "Three generators from the model, from the archive’s best; the engine judges each",
|
||||
"workbench.submit": "Submit the editor’s program",
|
||||
"workbench.submit_title": "The program in the editor, judged and kept if it is the best of its cell",
|
||||
"workbench.download": "Download",
|
||||
"workbench.download_title": "The specification and its archive, every kept generator with its sealed verdict, for wai-quantum discover verify",
|
||||
"workbench.intro": "Write a generator in the editor (a program with input uint n;), say what each member of its family must do and what it costs, and start. A program with no inputs works too: one circuit, one size.",
|
||||
"workbench.title": "Workbench",
|
||||
"workbench.stats_energy": ", {joules} J",
|
||||
"workbench.improvement_one": "{n} improvement",
|
||||
"workbench.improvement_many": "{n} improvements",
|
||||
"workbench.stats": "{evaluations} evaluated, {verified} verified, {kept} kept, {improvements}{energy}. ",
|
||||
"workbench.stats_best": "Best {id}: cost {cost} against the reference’s {reference}, by {proposer}, checked by {strength}.",
|
||||
"workbench.open": "Open in editor",
|
||||
"workbench.entry_title": "{id} · cost {cost} · {x_measure} {x_value}, {y_measure} {y_value}",
|
||||
"workbench.checked_by": "checked by {strength}{sealed}",
|
||||
"workbench.sealed": ", sealed",
|
||||
"workbench.lineage": "Where it came from",
|
||||
"workbench.its_generator": "Its generator",
|
||||
"workbench.checking_reference": "The engine is checking the reference at every size…",
|
||||
"workbench.started": "Started: the reference is {id}, cost {cost}.",
|
||||
"workbench.loosened": "The specification now {change}. This archive was built under the old rule; start a new one to search under the new.",
|
||||
"workbench.loosened_allows": "allows {gate}",
|
||||
"workbench.loosened_any_pair": "lets a gate join any pair",
|
||||
"workbench.novelty_said": "{id}: {text}.",
|
||||
"workbench.aberration_uses": "it uses {gate}",
|
||||
"workbench.aberration_joins": "it joins qubits that are not neighbours",
|
||||
"workbench.aberration_breaks": "it breaks a rule",
|
||||
"workbench.aberration_why": "It breaks only one rule ({rule}); without it, it would be verified ({strength}) at cost {cost}, {x_measure} {x_value}, {y_measure} {y_value}.",
|
||||
"workbench.try_without": "Try without that rule",
|
||||
"workbench.aberration_said": "{who}: an aberration. {why} The rule may be worth revising. ",
|
||||
"workbench.search_progress": "The blind search: {done} of {total} edits judged…",
|
||||
"workbench.search_done": "The blind search: {total} edits judged, {kept} kept.",
|
||||
"workbench.search_find_said": "{id} (the blind search): {text}.",
|
||||
"workbench.search_find_title": "{id} (the blind search): {text}",
|
||||
"workbench.search_stopped": "The search stopped: {error}",
|
||||
"workbench.paused": "You are exploring on your own: the model waits until you end that under Versions.",
|
||||
"workbench.needs_model": "Ask the model needs one: connect it under “Model…” in the Assistant.",
|
||||
"workbench.model_proposing": "The model is proposing; the engine will judge each…",
|
||||
"workbench.model_wrote_none": "The model wrote no generator in a ```qasm block.",
|
||||
"workbench.an_idea": "an idea",
|
||||
"workbench.model_failed": "The model did not answer: {error}",
|
||||
"workbench.your_program": "Your program",
|
||||
"workbench.not_judged": "It could not be judged: {error}",
|
||||
"workbench.saved": "Saved {path} and its archive; wai-quantum discover verify {stem}.json checks every seal.",
|
||||
"workbench.not_saved": "It could not be saved: {error}",
|
||||
"workbench.resumed": "Taken up again: {n} evaluated so far."
|
||||
}
|
||||
67
wai/quantum-studio/locales/index.js
Normal file
67
wai/quantum-studio/locales/index.js
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
// The Studio's words: one file for each part of the interface in each locale,
|
||||
// gathered here. English is the source. test/locales.test.mjs holds this list
|
||||
// to the files on disk, and every locale to every key.
|
||||
import enAssistant from './en/assistant.json' with { type: 'json' };
|
||||
import enCircuitSvg from './en/circuit_svg.json' with { type: 'json' };
|
||||
import enCompileView from './en/compile_view.json' with { type: 'json' };
|
||||
import enConverge from './en/converge.json' with { type: 'json' };
|
||||
import enCourse from './en/course.json' with { type: 'json' };
|
||||
import enCritiqueView from './en/critique_view.json' with { type: 'json' };
|
||||
import enDebugger from './en/debugger.json' with { type: 'json' };
|
||||
import enDevice from './en/device.json' with { type: 'json' };
|
||||
import enDom from './en/dom.json' with { type: 'json' };
|
||||
import enEstimateView from './en/estimate_view.json' with { type: 'json' };
|
||||
import enExamples from './en/examples.json' with { type: 'json' };
|
||||
import enFlags from './en/flags.json' with { type: 'json' };
|
||||
import enFrame from './en/frame.json' with { type: 'json' };
|
||||
import enGallery from './en/gallery.json' with { type: 'json' };
|
||||
import enGenerators from './en/generators.json' with { type: 'json' };
|
||||
import enHardware from './en/hardware.json' with { type: 'json' };
|
||||
import enNovelty from './en/novelty.json' with { type: 'json' };
|
||||
import enPredict from './en/predict.json' with { type: 'json' };
|
||||
import enRewriteView from './en/rewrite_view.json' with { type: 'json' };
|
||||
import enRules from './en/rules.json' with { type: 'json' };
|
||||
import enShortcutsView from './en/shortcuts_view.json' with { type: 'json' };
|
||||
import enStateViews from './en/state_views.json' with { type: 'json' };
|
||||
import enStudy from './en/study.json' with { type: 'json' };
|
||||
import enTaste from './en/taste.json' with { type: 'json' };
|
||||
import enVerdictView from './en/verdict_view.json' with { type: 'json' };
|
||||
import enVersions from './en/versions.json' with { type: 'json' };
|
||||
import enVisualEdit from './en/visual_edit.json' with { type: 'json' };
|
||||
import enWorkbench from './en/workbench.json' with { type: 'json' };
|
||||
import zhAssistant from './zh-CN/assistant.json' with { type: 'json' };
|
||||
import zhCircuitSvg from './zh-CN/circuit_svg.json' with { type: 'json' };
|
||||
import zhCompileView from './zh-CN/compile_view.json' with { type: 'json' };
|
||||
import zhConverge from './zh-CN/converge.json' with { type: 'json' };
|
||||
import zhCourse from './zh-CN/course.json' with { type: 'json' };
|
||||
import zhCritiqueView from './zh-CN/critique_view.json' with { type: 'json' };
|
||||
import zhDebugger from './zh-CN/debugger.json' with { type: 'json' };
|
||||
import zhDevice from './zh-CN/device.json' with { type: 'json' };
|
||||
import zhDom from './zh-CN/dom.json' with { type: 'json' };
|
||||
import zhEstimateView from './zh-CN/estimate_view.json' with { type: 'json' };
|
||||
import zhExamples from './zh-CN/examples.json' with { type: 'json' };
|
||||
import zhFlags from './zh-CN/flags.json' with { type: 'json' };
|
||||
import zhFrame from './zh-CN/frame.json' with { type: 'json' };
|
||||
import zhGallery from './zh-CN/gallery.json' with { type: 'json' };
|
||||
import zhGenerators from './zh-CN/generators.json' with { type: 'json' };
|
||||
import zhHardware from './zh-CN/hardware.json' with { type: 'json' };
|
||||
import zhNovelty from './zh-CN/novelty.json' with { type: 'json' };
|
||||
import zhPredict from './zh-CN/predict.json' with { type: 'json' };
|
||||
import zhRewriteView from './zh-CN/rewrite_view.json' with { type: 'json' };
|
||||
import zhRules from './zh-CN/rules.json' with { type: 'json' };
|
||||
import zhShortcutsView from './zh-CN/shortcuts_view.json' with { type: 'json' };
|
||||
import zhStateViews from './zh-CN/state_views.json' with { type: 'json' };
|
||||
import zhStudy from './zh-CN/study.json' with { type: 'json' };
|
||||
import zhTaste from './zh-CN/taste.json' with { type: 'json' };
|
||||
import zhVerdictView from './zh-CN/verdict_view.json' with { type: 'json' };
|
||||
import zhVersions from './zh-CN/versions.json' with { type: 'json' };
|
||||
import zhVisualEdit from './zh-CN/visual_edit.json' with { type: 'json' };
|
||||
import zhWorkbench from './zh-CN/workbench.json' with { type: 'json' };
|
||||
|
||||
// The parts of the interface, in the order their words are gathered.
|
||||
export const AREAS = ['assistant', 'circuit_svg', 'compile_view', 'converge', 'course', 'critique_view', 'debugger', 'device', 'dom', 'estimate_view', 'examples', 'flags', 'frame', 'gallery', 'generators', 'hardware', 'novelty', 'predict', 'rewrite_view', 'rules', 'shortcuts_view', 'state_views', 'study', 'taste', 'verdict_view', 'versions', 'visual_edit', 'workbench'];
|
||||
|
||||
export default {
|
||||
en: { ...enAssistant, ...enCircuitSvg, ...enCompileView, ...enConverge, ...enCourse, ...enCritiqueView, ...enDebugger, ...enDevice, ...enDom, ...enEstimateView, ...enExamples, ...enFlags, ...enFrame, ...enGallery, ...enGenerators, ...enHardware, ...enNovelty, ...enPredict, ...enRewriteView, ...enRules, ...enShortcutsView, ...enStateViews, ...enStudy, ...enTaste, ...enVerdictView, ...enVersions, ...enVisualEdit, ...enWorkbench },
|
||||
'zh-CN': { ...zhAssistant, ...zhCircuitSvg, ...zhCompileView, ...zhConverge, ...zhCourse, ...zhCritiqueView, ...zhDebugger, ...zhDevice, ...zhDom, ...zhEstimateView, ...zhExamples, ...zhFlags, ...zhFrame, ...zhGallery, ...zhGenerators, ...zhHardware, ...zhNovelty, ...zhPredict, ...zhRewriteView, ...zhRules, ...zhShortcutsView, ...zhStateViews, ...zhStudy, ...zhTaste, ...zhVerdictView, ...zhVersions, ...zhVisualEdit, ...zhWorkbench },
|
||||
};
|
||||
14
wai/quantum-studio/locales/zh-CN/assistant.json
Normal file
14
wai/quantum-studio/locales/zh-CN/assistant.json
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"_meta": {
|
||||
"locale": "zh-CN",
|
||||
"area": "assistant",
|
||||
"translation": "machine-assisted: to be reviewed by a fluent reader before it is advertised"
|
||||
},
|
||||
"assistant.stance_questions": "先向我提问",
|
||||
"assistant.stance_suggest": "建议修改",
|
||||
"assistant.stance_write": "编写程序",
|
||||
"assistant.model_answered": "模型返回了 {status}",
|
||||
"assistant.server_answered": "模型服务器返回了 {status}",
|
||||
"assistant.no_answer": "模型没有给出回答",
|
||||
"assistant.kept_calling": "模型一直在调用工具,没有作答"
|
||||
}
|
||||
10
wai/quantum-studio/locales/zh-CN/circuit_svg.json
Normal file
10
wai/quantum-studio/locales/zh-CN/circuit_svg.json
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"_meta": {
|
||||
"locale": "zh-CN",
|
||||
"area": "circuit_svg",
|
||||
"translation": "machine-assisted: to be reviewed by a fluent reader before it is advertised"
|
||||
},
|
||||
"circuit_svg.label": "线路:{qubits} 个量子比特,{gates} 个操作,共 {columns} 列",
|
||||
"circuit_svg.cell": "q{q} 上的 {gate}",
|
||||
"circuit_svg.cell_sep": ","
|
||||
}
|
||||
43
wai/quantum-studio/locales/zh-CN/compile_view.json
Normal file
43
wai/quantum-studio/locales/zh-CN/compile_view.json
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
{
|
||||
"_meta": {
|
||||
"locale": "zh-CN",
|
||||
"area": "compile_view",
|
||||
"translation": "machine-assisted: to be reviewed by a fluent reader before it is advertised"
|
||||
},
|
||||
"compile_view.col_gates": "门",
|
||||
"compile_view.col_cnots": "CNOT",
|
||||
"compile_view.col_rotations": "旋转门",
|
||||
"compile_view.basis_label": "门集",
|
||||
"compile_view.basis_title": "编译所用的门集。Clifford+T:每个旋转门都写成误差在 ε 以内的 Clifford+T 门序列。标准门:任意角度的标准门,不做任何近似",
|
||||
"compile_view.standard": "标准门",
|
||||
"compile_view.level_label": "级别",
|
||||
"compile_view.level_title": "0:降低到基本门并作近似;1:另加经检查的重写和相位折叠;2:再加单、双量子比特重合成",
|
||||
"compile_view.level_option": "级别 {level}",
|
||||
"compile_view.eps_title": "输出与程序之间允许的最大差异:算子范数,不计全局相位,由各旋转门分摊",
|
||||
"compile_view.compile": "编译",
|
||||
"compile_view.compile_title": "让程序经过引擎的各遍处理,每一遍都经过检查,并附有签名的证书",
|
||||
"compile_view.heading": "编译",
|
||||
"compile_view.caption": "{pass} 之后(第 {number}/{of} 遍):{gates} 个门,{cnots} 个 CNOT,{t} 个 T 门,{rotations} 个旋转门{partial}。",
|
||||
"compile_view.caption_partial": ";只画出了 {total} 列中的前 {drawn} 列",
|
||||
"compile_view.draw_title": "画出这一遍之后的线路",
|
||||
"compile_view.spent_one": "{n} 个旋转门,每个 {each}",
|
||||
"compile_view.spent_other": "{n} 个旋转门,每个 {each}",
|
||||
"compile_view.nothing_approximated": "没有任何近似",
|
||||
"compile_view.whole": "整个输出与程序对照测得的距离:{distance}。",
|
||||
"compile_view.use": "使用",
|
||||
"compile_view.use_title": "把编译后的程序作为建议提交审阅",
|
||||
"compile_view.offer_note": "已在级别 {level} 编译为“{basis}”:与程序的距离不超过 {bound}(预算 {budget}),{t} 个 T 门;每一遍都经过检查。",
|
||||
"compile_view.the_standard_gates": "标准门",
|
||||
"compile_view.verdict_approximate": "近似",
|
||||
"compile_view.verdict_exact": "精确",
|
||||
"compile_view.verdict_proved": "已证明",
|
||||
"compile_view.summary": "{verdict}:与程序的距离不超过 {bound},不计全局相位(预算 {budget};{spent})。{whole}{certificate}",
|
||||
"compile_view.cert_verifies": "证书验证通过。",
|
||||
"compile_view.cert_fails": "证书未通过验证。",
|
||||
"compile_view.col_pass": "遍",
|
||||
"compile_view.col_check": "检查",
|
||||
"compile_view.note": "选择一遍,即可画出它之后的线路。检查结果为 proof(精确的环算术,以整八分之一为单位的相位多项式)、exact(等于双精度浮点数的舍入)或 approximate(附其距离);各距离之和即为上界。",
|
||||
"compile_view.bad_eps": "ε 是一个正数,例如 1e-6。",
|
||||
"compile_view.compiling": "正在编译:每一遍都随即检查…",
|
||||
"compile_view.stale": "这是针对程序较早版本的结果:请重新编译。"
|
||||
}
|
||||
19
wai/quantum-studio/locales/zh-CN/converge.json
Normal file
19
wai/quantum-studio/locales/zh-CN/converge.json
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"_meta": {
|
||||
"locale": "zh-CN",
|
||||
"area": "converge",
|
||||
"translation": "machine-assisted: to be reviewed by a fluent reader before it is advertised"
|
||||
},
|
||||
"converge.converging": "正在趋同:{why}。",
|
||||
"converge.latest": "你最新的版本在构造方式上与模型的建议相距 {distance}。",
|
||||
"converge.own_one": "独自完成:{n} 个版本,与它们相距 {distance}{rest}。",
|
||||
"converge.own_many": "独自完成:{n} 个版本,与它们相距 {distance}{rest}。",
|
||||
"converge.own_rest": ";其余版本相距 {distance}",
|
||||
"converge.try_own": "试着独自探索一段时间:届时助手只提问。",
|
||||
"converge.chip": "独自探索中",
|
||||
"converge.title": "你自己的方式",
|
||||
"converge.end": "结束:让助手重新提出建议",
|
||||
"converge.start": "独自探索一段时间",
|
||||
"converge.end_title": "助手、备选方案和工作台可以再次询问模型",
|
||||
"converge.start_title": "助手只提问;备选方案和工作台不询问模型;你的版本会被记为独自完成"
|
||||
}
|
||||
47
wai/quantum-studio/locales/zh-CN/course.json
Normal file
47
wai/quantum-studio/locales/zh-CN/course.json
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
{
|
||||
"_meta": {
|
||||
"locale": "zh-CN",
|
||||
"area": "course",
|
||||
"translation": "machine-assisted: to be reviewed by a fluent reader before it is advertised"
|
||||
},
|
||||
"course.title": "课程",
|
||||
"course.open": "课程",
|
||||
"course.open_title": "量子线路课程:各课附有由引擎检查的练习",
|
||||
"course.lessons": "各课",
|
||||
"course.where": "第 {number}/{of} 课 · {unit}",
|
||||
"course.exercise": "练习",
|
||||
"course.starter": "载入起始程序",
|
||||
"course.starter_title": "把练习的起始程序放进编辑器(你的草稿保留在“版本”中)",
|
||||
"course.starter_loaded": "“{title}”的起始程序已放进编辑器。",
|
||||
"course.check": "检查",
|
||||
"course.check_title": "用引擎对照练习检查编辑器中的程序",
|
||||
"course.hint": "提示",
|
||||
"course.no_more_hints": "没有更多提示",
|
||||
"course.hint_of": "提示 {level}/{of}",
|
||||
"course.why": "哪里出了问题?",
|
||||
"course.ask": "请助手给一条提示",
|
||||
"course.ask_title": "这台机器上的模型,并被告知不要写出程序;它回答中的任何程序都会被扣下",
|
||||
"course.ask_needs_model": "助手需要一个模型:请先在“助手”下连接一个模型,然后再问。",
|
||||
"course.asking": "正在询问助手…",
|
||||
"course.assistant_says": "助手的提示",
|
||||
"course.held_solution": "回答中包含一个能通过这道练习的程序。为了让练习仍由你自己完成,它没有被显示。",
|
||||
"course.held_code": "回答中包含代码,这里没有显示。",
|
||||
"course.ask_failed": "助手无法回答:{error}",
|
||||
"course.not_checked": "未检查",
|
||||
"course.passed": "已通过",
|
||||
"course.not_yet": "尚未通过",
|
||||
"course.passed_status": "已通过:“{title}”。",
|
||||
"course.not_yet_status": "尚未通过:“哪里出了问题?”会说明引擎发现了什么。",
|
||||
"course.engine_says": "引擎原文:",
|
||||
"course.nothing_wrong": "没有出问题:检查已经通过。",
|
||||
"course.where_to_look": "从哪里看起:",
|
||||
"course.previous": "← 上一课",
|
||||
"course.next": "下一课 →",
|
||||
"course.progress": "已通过 {passed}/{of} 课",
|
||||
"course.kept": "只保存在这个浏览器中",
|
||||
"course.reset": "清除进度",
|
||||
"course.reset_confirm": "再点一次即清除",
|
||||
"course.reset_done": "你在这个浏览器中的进度已清除。",
|
||||
"course.companion": "配套课程:",
|
||||
"course.machine_assisted": "本课为机器辅助翻译,尚待熟练的读者审校。"
|
||||
}
|
||||
24
wai/quantum-studio/locales/zh-CN/critique_view.json
Normal file
24
wai/quantum-studio/locales/zh-CN/critique_view.json
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
{
|
||||
"_meta": {
|
||||
"locale": "zh-CN",
|
||||
"area": "critique_view",
|
||||
"translation": "machine-assisted: to be reviewed by a fluent reader before it is advertised"
|
||||
},
|
||||
"critique_view.qubits": "量子比特",
|
||||
"critique_view.gates": "门",
|
||||
"critique_view.two_qubit": "双量子比特门",
|
||||
"critique_view.depth": "深度",
|
||||
"critique_view.two_qubit_depth": "双量子比特门深度",
|
||||
"critique_view.non_clifford": "非 Clifford 门",
|
||||
"critique_view.since_last_run": "相对上次运行的变化",
|
||||
"critique_view.fidelity_title": "{note}。错误率:每个单量子比特门 {one_qubit},每个双量子比特门 {two_qubit},每个被测量的量子比特 {readout}。",
|
||||
"critique_view.fidelity_modelled": "保真度(模型估计)",
|
||||
"critique_view.line": "第 {line} 行",
|
||||
"critique_view.lines": "第 {lines} 行",
|
||||
"critique_view.label": "引擎的评析",
|
||||
"critique_view.waiting": "等到引擎能读取这个程序时,才会给出评析。",
|
||||
"critique_view.clifford_title": "每个门都是 Clifford 门:稳定子表可以在任意宽度上精确地运行它。",
|
||||
"critique_view.show": "查看",
|
||||
"critique_view.fix": "修正",
|
||||
"critique_view.fix_title": "引擎重写这些行,并检查结果仍是同一个线路"
|
||||
}
|
||||
46
wai/quantum-studio/locales/zh-CN/debugger.json
Normal file
46
wai/quantum-studio/locales/zh-CN/debugger.json
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
{
|
||||
"_meta": {
|
||||
"locale": "zh-CN",
|
||||
"area": "debugger",
|
||||
"translation": "machine-assisted: to be reviewed by a fluent reader before it is advertised"
|
||||
},
|
||||
"debugger.start": "单步执行",
|
||||
"debugger.start_title": "在引擎上单步执行程序,可前进也可后退",
|
||||
"debugger.to_start": "回到开头",
|
||||
"debugger.back": "后退一步",
|
||||
"debugger.forward": "前进一步",
|
||||
"debugger.to_end": "跳到结尾",
|
||||
"debugger.slider": "显示状态的那一步",
|
||||
"debugger.not_started": "未开始",
|
||||
"debugger.pick": "要显示约化态的量子比特",
|
||||
"debugger.against_noiseless": "与无噪声态对照",
|
||||
"debugger.qubits": "量子比特",
|
||||
"debugger.amplitudes": "振幅",
|
||||
"debugger.reduced": "约化态",
|
||||
"debugger.branches": "分支",
|
||||
"debugger.title": "单步执行",
|
||||
"debugger.empty": "在引擎上单步执行程序:每一步的状态、每个量子比特在其 Bloch 球上的位置,以及其测量的每个分支及其权重。",
|
||||
"debugger.refused": "被拒绝",
|
||||
"debugger.position": "位置 {position}/{length}",
|
||||
"debugger.line": "(第 {line} 行)",
|
||||
"debugger.next": "下一步:",
|
||||
"debugger.end": "程序结束。",
|
||||
"debugger.just_now": " · 刚才:{kind} q{qubit}{line} 读到 {outcome},p {p}({by})",
|
||||
"debugger.by_recorded": "所选的分支",
|
||||
"debugger.by_likelier": "概率较大者",
|
||||
"debugger.by_certain": "确定",
|
||||
"debugger.path": "路径:{outcomes} · 权重 {weight} · 比特 {bits}{read}",
|
||||
"debugger.outcomes": "结果 {outcomes}",
|
||||
"debugger.no_measurement": "尚无测量",
|
||||
"debugger.no_bits": "无",
|
||||
"debugger.entangled": "跨越 q{cut} | 其余部分的纠缠:{bits} 比特(Schmidt 秩 {rank})。",
|
||||
"debugger.negativity": "跨越 q{cut} | 其余部分:对数负性 {value} 比特。",
|
||||
"debugger.final": "最终:{final}{more}",
|
||||
"debugger.more": ",另有 {n} 个",
|
||||
"debugger.reads": "读到 {outcome} · p {p} · 权重 {weight}",
|
||||
"debugger.branch_count_one": "{n} 个分支;权重 {weights}。",
|
||||
"debugger.branch_count": "{n} 个分支;权重 {weights}。",
|
||||
"debugger.tree_label": "程序中途测量处的分支",
|
||||
"debugger.one_path": "没有中途测量:只有一条路径;{final}。",
|
||||
"debugger.again": "重新开始"
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue