From 112cc14bd39fd9a2ccf3037970fcd86760591f10 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Thu, 5 Nov 2026 14:26:00 -0500 Subject: [PATCH 1/8] wai-quantum: the surface-code memory experiment at p = 0 writes the reference generator's text quantum_frame::surface_code_memory documents that its text matches the ecosystem's reference generator byte for byte. That held for every p > 0 and not for p = 0: there it wrote each noise instruction with probability zero (DEPOLARIZE1(0) ..., X_ERROR(0) ...) and the first round's two resets on two lines, where the reference writes no noise instruction and one reset. The circuits meant the same thing, so the model and the samples were unaffected; only the text differed. It now writes no noise instruction of probability zero, and the two resets as one instruction. A new fixture test, the reference generator's text at d = 5 with four rounds and p = 0 (tests/data/memory_z_d5_noiseless.circuit), failed before the change and passes after it. The fixture count pinned in wai-quantum-processors.yml and wai-quantum-dsp.yml goes from 2 to 3. The cross-simulator corpus found it (entry surface_z_d5_noiseless): the engine's own generator checked against the pinned reference generator. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/wai-quantum-dsp.yml | 2 +- .github/workflows/wai-quantum-processors.yml | 4 +- .../2026-11-05-noiseless-surface-code-text.md | 9 ++ wai/wai-quantum/src/quantum_frame.rs | 35 +++-- .../tests/data/memory_z_d5_noiseless.circuit | 131 ++++++++++++++++++ wai/wai-quantum/tests/frame_reference.rs | 13 +- 6 files changed, 179 insertions(+), 15 deletions(-) create mode 100644 wai/changes/2026-11-05-noiseless-surface-code-text.md create mode 100644 wai/wai-quantum/tests/data/memory_z_d5_noiseless.circuit diff --git a/.github/workflows/wai-quantum-dsp.yml b/.github/workflows/wai-quantum-dsp.yml index 253598676..380424d22 100644 --- a/.github/workflows/wai-quantum-dsp.yml +++ b/.github/workflows/wai-quantum-dsp.yml @@ -186,7 +186,7 @@ jobs: t bit_identity --test bit_identity -- --test-threads=1 grep -qE '^test result: ok\. 23 passed; 0 failed' "$logs/bit_identity.log" || { echo "::error::the 23 bit-identity digests did not all pass"; exit 1; } t frame --test frame_reference -- --test-threads=1 - grep -qE '^test result: ok\. 2 passed; 0 failed' "$logs/frame.log" || { echo "::error::the fixtures did not pass"; exit 1; } + grep -qE '^test result: ok\. 3 passed; 0 failed' "$logs/frame.log" || { echo "::error::the fixtures did not pass"; exit 1; } # The library's tests with the features their modules need, not full: the # whole engine's test binary is past the processor's direct-call reach # (R_HEX_B22_PCREL, ±8 MiB), and these modules need none of the rest. diff --git a/.github/workflows/wai-quantum-processors.yml b/.github/workflows/wai-quantum-processors.yml index 14679f927..6c54490c3 100644 --- a/.github/workflows/wai-quantum-processors.yml +++ b/.github/workflows/wai-quantum-processors.yml @@ -131,7 +131,7 @@ jobs: run bit_identity --test bit_identity grep -qE '^test result: ok\. 23 passed; 0 failed' "$logs/bit_identity.log" || { echo "::error::$t: the 23 bit-identity digests did not all pass"; exit 1; } run frame --test frame_reference - grep -qE '^test result: ok\. 2 passed; 0 failed' "$logs/frame.log" || { echo "::error::$t: the fixtures did not pass"; exit 1; } + grep -qE '^test result: ok\. 3 passed; 0 failed' "$logs/frame.log" || { echo "::error::$t: the fixtures did not pass"; exit 1; } run lib --lib -- quantum:: quantum_fabric:: ijson:: quantum_receipt quantum_energy quantum_qbom merkle grep -qE '^test result: ok\. [1-9][0-9]+ passed; 0 failed' "$logs/lib.log" || { echo "::error::$t: the byte-pinning library tests did not pass"; exit 1; } - echo "processor: $t (${{ matrix.how }}) bit_identity 23/23, fixtures 2/2, $(grep -E '^test result' "$logs/lib.log" | tail -1)" + echo "processor: $t (${{ matrix.how }}) bit_identity 23/23, fixtures 3/3, $(grep -E '^test result' "$logs/lib.log" | tail -1)" diff --git a/wai/changes/2026-11-05-noiseless-surface-code-text.md b/wai/changes/2026-11-05-noiseless-surface-code-text.md new file mode 100644 index 000000000..12ecde0d5 --- /dev/null +++ b/wai/changes/2026-11-05-noiseless-surface-code-text.md @@ -0,0 +1,9 @@ +### wai-quantum: the surface-code memory experiment at p = 0 writes the reference generator's text + +- **Fixed** (`quantum_frame::surface_code_memory`). Its text is meant to match the ecosystem's reference generator + byte for byte, and did for every p > 0. At p = 0 it wrote every noise instruction with probability 0 + (`DEPOLARIZE1(0) …`, `X_ERROR(0) …`) and the first round's two resets on two lines, where the reference writes no + noise instruction and one reset line. The circuits meant the same, and gave the same model and samples; only the + text differed. It now writes no noise instruction of probability zero, and the two resets as one. + `tests/frame_reference.rs` holds it to the reference's text at d = 5, four rounds + (`data/memory_z_d5_noiseless.circuit`). Found by the cross-simulator corpus (entry `surface_z_d5_noiseless`). diff --git a/wai/wai-quantum/src/quantum_frame.rs b/wai/wai-quantum/src/quantum_frame.rs index 48aa2a028..f8b101de7 100644 --- a/wai/wai-quantum/src/quantum_frame.rs +++ b/wai/wai-quantum/src/quantum_frame.rs @@ -390,7 +390,9 @@ fn lower_instruction(i: &crate::quantum_qec_text::Instruction, c: &mut Circuit, /// - flips after resets. /// /// The layout, gate order and detector order follow the ecosystem's reference -/// generator, so the text matches it byte for byte. +/// generator, so the text matches it byte for byte. At `p = 0` that generator +/// writes no noise instruction at all, and so the two resets of the first round +/// are one line; so does this. pub fn surface_code_memory(d: u32, rounds: u32, p: f64) -> String { assert!(d >= 2 && rounds >= 1, "distance ≥ 2 and at least one round"); let w = 2 * d + 1; @@ -450,30 +452,42 @@ pub fn surface_code_memory(d: u32, rounds: u32, p: f64) -> String { } let list = |v: &[u32]| v.iter().map(|q| q.to_string()).collect::>().join(" "); let fp = fmt_prob(p); + // A noise instruction of probability zero is not written. + let noisy = p != 0.0; + let noise = |o: &mut String, line: String| { + if noisy { + *o += &line; + } + }; let mut o = String::new(); for (q, (x, y)) in &all { o += &format!("QUBIT_COORDS({x}, {y}) {q}\n"); } let rec_of = |q: u32, list: &[u32]| -> i64 { list.iter().position(|&m| m == q).unwrap() as i64 - list.len() as i64 }; let round = |o: &mut String, indent: &str| { - *o += &format!("{indent}DEPOLARIZE1({fp}) {}\n", list(&data_ix)); + noise(o, format!("{indent}DEPOLARIZE1({fp}) {}\n", list(&data_ix))); *o += &format!("{indent}H {}\n", list(&x_ix)); - *o += &format!("{indent}DEPOLARIZE1({fp}) {}\n", list(&x_ix)); + noise(o, format!("{indent}DEPOLARIZE1({fp}) {}\n", list(&x_ix))); *o += &format!("{indent}TICK\n"); for l in &layers { *o += &format!("{indent}CX {}\n", list(l)); - *o += &format!("{indent}DEPOLARIZE2({fp}) {}\n", list(l)); + noise(o, format!("{indent}DEPOLARIZE2({fp}) {}\n", list(l))); *o += &format!("{indent}TICK\n"); } *o += &format!("{indent}H {}\n", list(&x_ix)); - *o += &format!("{indent}DEPOLARIZE1({fp}) {}\n", list(&x_ix)); + noise(o, format!("{indent}DEPOLARIZE1({fp}) {}\n", list(&x_ix))); *o += &format!("{indent}TICK\n"); - *o += &format!("{indent}X_ERROR({fp}) {}\n", list(&meas_ix)); + noise(o, format!("{indent}X_ERROR({fp}) {}\n", list(&meas_ix))); *o += &format!("{indent}MR {}\n", list(&meas_ix)); - *o += &format!("{indent}X_ERROR({fp}) {}\n", list(&meas_ix)); + noise(o, format!("{indent}X_ERROR({fp}) {}\n", list(&meas_ix))); }; - o += &format!("R {}\nX_ERROR({fp}) {}\n", list(&data_ix), list(&data_ix)); - o += &format!("R {}\nX_ERROR({fp}) {}\nTICK\n", list(&meas_ix), list(&meas_ix)); + if noisy { + o += &format!("R {}\nX_ERROR({fp}) {}\n", list(&data_ix), list(&data_ix)); + o += &format!("R {}\nX_ERROR({fp}) {}\nTICK\n", list(&meas_ix), list(&meas_ix)); + } else { + // With nothing between them, the two resets are one instruction. + o += &format!("R {} {}\nTICK\n", list(&data_ix), list(&meas_ix)); + } round(&mut o, ""); for &((x, y), is_x) in &meas { if !is_x { @@ -499,7 +513,8 @@ pub fn surface_code_memory(d: u32, rounds: u32, p: f64) -> String { o += "}\n"; } } - o += &format!("X_ERROR({fp}) {}\nM {}\n", list(&data_ix), list(&data_ix)); + noise(&mut o, format!("X_ERROR({fp}) {}\n", list(&data_ix))); + o += &format!("M {}\n", list(&data_ix)); let nd = data_ix.len() as i64; for &((x, y), is_x) in &meas { if is_x { diff --git a/wai/wai-quantum/tests/data/memory_z_d5_noiseless.circuit b/wai/wai-quantum/tests/data/memory_z_d5_noiseless.circuit new file mode 100644 index 000000000..25ed2bcb8 --- /dev/null +++ b/wai/wai-quantum/tests/data/memory_z_d5_noiseless.circuit @@ -0,0 +1,131 @@ +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 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 +H 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 +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 +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 +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 +TICK +H 2 6 15 19 24 28 37 41 46 50 59 63 +TICK +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 +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] +REPEAT 3 { + TICK + H 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 + 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 + 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 + 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 + TICK + H 2 6 15 19 24 28 37 41 46 50 59 63 + TICK + 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 + SHIFT_COORDS(0, 0, 1) + DETECTOR(2, 0, 0) rec[-24] rec[-48] + DETECTOR(6, 0, 0) rec[-23] rec[-47] + DETECTOR(2, 2, 0) rec[-22] rec[-46] + DETECTOR(4, 2, 0) rec[-21] rec[-45] + DETECTOR(6, 2, 0) rec[-20] rec[-44] + DETECTOR(8, 2, 0) rec[-19] rec[-43] + DETECTOR(10, 2, 0) rec[-18] rec[-42] + DETECTOR(0, 4, 0) rec[-17] rec[-41] + DETECTOR(2, 4, 0) rec[-16] rec[-40] + DETECTOR(4, 4, 0) rec[-15] rec[-39] + DETECTOR(6, 4, 0) rec[-14] rec[-38] + DETECTOR(8, 4, 0) rec[-13] rec[-37] + DETECTOR(2, 6, 0) rec[-12] rec[-36] + DETECTOR(4, 6, 0) rec[-11] rec[-35] + DETECTOR(6, 6, 0) rec[-10] rec[-34] + DETECTOR(8, 6, 0) rec[-9] rec[-33] + DETECTOR(10, 6, 0) rec[-8] rec[-32] + DETECTOR(0, 8, 0) rec[-7] rec[-31] + DETECTOR(2, 8, 0) rec[-6] rec[-30] + DETECTOR(4, 8, 0) rec[-5] rec[-29] + DETECTOR(6, 8, 0) rec[-4] rec[-28] + DETECTOR(8, 8, 0) rec[-3] rec[-27] + DETECTOR(4, 10, 0) rec[-2] rec[-26] + DETECTOR(8, 10, 0) rec[-1] rec[-25] +} +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] diff --git a/wai/wai-quantum/tests/frame_reference.rs b/wai/wai-quantum/tests/frame_reference.rs index 7dc797807..1f648a03a 100644 --- a/wai/wai-quantum/tests/frame_reference.rs +++ b/wai/wai-quantum/tests/frame_reference.rs @@ -1,7 +1,7 @@ //! Cross-tool fixtures for noisy Clifford circuits. //! -//! `data/memory_z_d5.circuit` and `data/memory_x_d3.circuit` were written by -//! an independent circuit generator. `data/memory_x_d3.dem` is that tool's +//! `data/memory_z_d5.circuit`, `data/memory_z_d5_noiseless.circuit` and +//! `data/memory_x_d3.circuit` were written by an independent circuit generator. `data/memory_x_d3.dem` is that tool's //! detector error model of the second circuit, flattened, with identical //! mechanisms XOR-combined. Matching them checks three things against an //! implementation that shares no code with this one: @@ -20,6 +20,15 @@ fn the_generator_matches_the_reference_text() { assert_eq!(surface_code_memory(5, 4, 0.001), want); } +/// At p = 0 the reference writes no noise instruction, and its first round's +/// two resets are one line. (Found by the cross-simulator corpus, +/// wai/quantum-cross-simulator/, entry `surface_z_d5_noiseless`.) +#[test] +fn the_noiseless_generator_matches_the_reference_text() { + let want = include_str!("data/memory_z_d5_noiseless.circuit"); + assert_eq!(surface_code_memory(5, 4, 0.0), want); +} + /// `"D0 D4 L0"` → probability. fn model_map(text: &str) -> BTreeMap { text.lines() -- 2.54.0 (Apple Git-157) From ec4f2a5accede589e76e5d33f10349740676c2f3 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Thu, 5 Nov 2026 15:14:36 -0500 Subject: [PATCH 2/8] wai-quantum: a cross-simulator conformance corpus, reproducible with one command wai/quantum-cross-simulator/ runs the engine beside pinned third-party simulators on a published set of circuits and holds every answer to an exact reference within a tolerance derived from the arithmetic that produced it. The corpus (tools/corpus.py, corpus/manifest.json with each circuit's SHA-256): bit order, GHZ, QFT, Grover, phase estimation, random Clifford+T, dyadic and arbitrary-angle circuits, mirror circuits, angles at and below the fixed-point table's resolution, every gate of OpenQASM 3's standard library, measurement in the middle with reset and feedback, stabilizer circuits to 5000 qubits, noise in closed form, wide circuits by matrix product states and contraction, and error-correction memory experiments to distance 15. The references (tools/exact.py, standard library only): a state vector in integers at scale 2^-256, exact distributions by walking every branch of a dynamic program, and an integer stabilizer tableau with the reduced form of a group. The bit-exact method's op-log is rerun by the existing referee and must give the same integers and hash. The tolerances (tools/tolerance.py): the bit-exact method's from the extension's published bound summed over the op-log it ran; floating point from a stated per-gate rounding model at each engine's fusion width; sampled counts by Bernstein's inequality at a family-wise rate of 1e-6. None is fitted to a result. reproduce.sh fetches a pinned uv, CPython and every wheel by hash, builds the engine with --locked, runs every check and prints PASS or FAIL. --self-test injects six faults and passes only when each fails the run on its own check. --perf measures run time and peak memory per engine. provider/seeded_statevector_provider.py wraps a third-party simulator as a process provider of wai.quantum.provider/1; provider/test.sh holds it to the protocol's conformance vectors through `providers test`, runs it with `run --provider` and verifies the receipt. wai-quantum-cli/examples/cross_simulator.rs is the engine's side: one job in, one answer out, through the calls the command line and the job service make. CI: the Linux leg of wai-quantum-cli.yml runs the CI tier, the self-test, the provider template and the check that the page's results section is what the committed results say. Co-Authored-By: Claude Fable 5.1 --- .github/workflows/wai-quantum-cli.yml | 22 +- ...26-11-05-quantum-cross-simulator-corpus.md | 31 + wai/quantum-cross-simulator/README.md | 240 ++ .../corpus/known-disagreements.json | 19 + .../corpus/manifest.json | 2145 +++++++++++++++++ .../corpus/qasm/below_grid_k33.qasm | 6 + .../corpus/qasm/below_grid_k40.qasm | 6 + .../corpus/qasm/below_grid_k47.qasm | 6 + .../corpus/qasm/below_grid_k48.qasm | 6 + .../corpus/qasm/below_grid_k52.qasm | 6 + .../corpus/qasm/below_grid_k60.qasm | 6 + .../corpus/qasm/bit_order_control.qasm | 5 + .../corpus/qasm/bit_order_named_bits.qasm | 7 + .../corpus/qasm/bit_order_product.qasm | 15 + .../corpus/qasm/bit_order_x_high.qasm | 4 + .../corpus/qasm/bit_order_x_low.qasm | 4 + .../corpus/qasm/clifford_cluster_n65.qasm | 154 ++ .../corpus/qasm/clifford_counts_n40.qasm | 430 ++++ .../corpus/qasm/clifford_ghz_n100.qasm | 103 + .../qasm/clifford_random_n10_as_state.qasm | 371 +++ .../corpus/qasm/clifford_random_n63.qasm | 895 +++++++ .../corpus/qasm/clifford_random_n64.qasm | 896 +++++++ .../corpus/qasm/clifford_random_n65.qasm | 899 +++++++ .../corpus/qasm/clifford_t_n12_d40.qasm | 550 +++++ .../corpus/qasm/clifford_t_n4_d20.qasm | 100 + .../corpus/qasm/clifford_t_n8_d40.qasm | 377 +++ .../corpus/qasm/controlled_rz_full_turn.qasm | 6 + .../qasm/controlled_small_angle_k30.qasm | 6 + .../corpus/qasm/dyadic_n10_k30.qasm | 438 ++++ .../corpus/qasm/dyadic_n6_k20.qasm | 173 ++ .../corpus/qasm/empty_register.qasm | 3 + .../corpus/qasm/feedback_flip.qasm | 8 + .../corpus/qasm/full_turn_p_t1_0.qasm | 6 + .../corpus/qasm/full_turn_rx_t1_0.qasm | 6 + .../corpus/qasm/full_turn_ry_t1_0.qasm | 6 + .../corpus/qasm/full_turn_rz_t1_0.qasm | 6 + .../corpus/qasm/full_turn_rz_t2_0.qasm | 6 + .../corpus/qasm/full_turn_u_t1_0.qasm | 6 + .../corpus/qasm/gate_c2p.qasm | 10 + .../corpus/qasm/gate_c2ry.qasm | 10 + .../corpus/qasm/gate_c2rz.qasm | 10 + .../corpus/qasm/gate_c3x.qasm | 12 + .../corpus/qasm/gate_c3z.qasm | 12 + .../corpus/qasm/gate_ccx.qasm | 10 + .../corpus/qasm/gate_ccz.qasm | 10 + .../corpus/qasm/gate_ch.qasm | 8 + .../corpus/qasm/gate_cp.qasm | 8 + .../corpus/qasm/gate_crx.qasm | 8 + .../corpus/qasm/gate_cry.qasm | 8 + .../corpus/qasm/gate_crz.qasm | 8 + .../corpus/qasm/gate_cswap.qasm | 10 + .../corpus/qasm/gate_csx.qasm | 8 + .../corpus/qasm/gate_cu.qasm | 8 + .../corpus/qasm/gate_cx.qasm | 8 + .../corpus/qasm/gate_cy.qasm | 8 + .../corpus/qasm/gate_cz.qasm | 8 + .../corpus/qasm/gate_gphase_controlled.qasm | 8 + .../corpus/qasm/gate_h.qasm | 6 + .../corpus/qasm/gate_id.qasm | 6 + .../corpus/qasm/gate_negcx.qasm | 8 + .../corpus/qasm/gate_p.qasm | 6 + .../corpus/qasm/gate_rx.qasm | 6 + .../corpus/qasm/gate_rxx.qasm | 9 + .../corpus/qasm/gate_ry.qasm | 6 + .../corpus/qasm/gate_ryy.qasm | 9 + .../corpus/qasm/gate_rz.qasm | 6 + .../corpus/qasm/gate_rzz.qasm | 9 + .../corpus/qasm/gate_s.qasm | 6 + .../corpus/qasm/gate_sdg.qasm | 6 + .../corpus/qasm/gate_swap.qasm | 8 + .../corpus/qasm/gate_sx.qasm | 6 + .../corpus/qasm/gate_sxdg.qasm | 6 + .../corpus/qasm/gate_t.qasm | 6 + .../corpus/qasm/gate_tdg.qasm | 6 + .../corpus/qasm/gate_u.qasm | 6 + .../corpus/qasm/gate_x.qasm | 6 + .../corpus/qasm/gate_y.qasm | 6 + .../corpus/qasm/gate_z.qasm | 6 + .../corpus/qasm/ghz_by_fusion.qasm | 14 + .../corpus/qasm/ghz_counts_n8.qasm | 20 + .../corpus/qasm/ghz_n12.qasm | 15 + .../corpus/qasm/ghz_n2.qasm | 5 + .../corpus/qasm/ghz_n3.qasm | 6 + .../corpus/qasm/ghz_n5.qasm | 8 + .../corpus/qasm/ghz_n8.qasm | 11 + .../corpus/qasm/grover_counts_n5.qasm | 118 + .../corpus/qasm/grover_n10.qasm | 1263 ++++++++++ .../corpus/qasm/grover_n3.qasm | 38 + .../corpus/qasm/grover_n5.qasm | 112 + .../corpus/qasm/grover_n8.qasm | 491 ++++ .../corpus/qasm/measure_twice.qasm | 7 + .../corpus/qasm/mps_ghz_n100.qasm | 103 + .../corpus/qasm/mps_ghz_n30.qasm | 33 + .../corpus/qasm/mps_ghz_n50.qasm | 53 + .../corpus/qasm/mps_qft_n30.qasm | 499 ++++ .../qasm/noise_depol1_x_chain_p0_01_k20.qasm | 23 + .../qasm/noise_depol1_x_chain_p0_1_k7.qasm | 10 + .../corpus/qasm/noise_depol2_cx_chain.qasm | 12 + .../corpus/qasm/one_qubit.qasm | 4 + .../corpus/qasm/qft_counts_n8.qasm | 57 + .../corpus/qasm/qft_n12_x2741.qasm | 94 + .../corpus/qasm/qft_n14_x10923.qasm | 123 + .../corpus/qasm/qft_n3_x5.qasm | 12 + .../corpus/qasm/qft_n5_x19.qasm | 23 + .../corpus/qasm/qft_n8_x173.qasm | 48 + .../corpus/qasm/qft_superposed_n10.qasm | 112 + .../corpus/qasm/qft_wide_n20.qasm | 234 ++ .../corpus/qasm/qpe_t10_third.qasm | 84 + .../corpus/qasm/qpe_t12_m2741.qasm | 112 + .../corpus/qasm/qpe_t4_m5.qasm | 24 + .../corpus/qasm/qpe_t6_third.qasm | 40 + .../corpus/qasm/qpe_t8_m173.qasm | 60 + .../corpus/qasm/repeat_until_success.qasm | 32 + .../qasm/reset_after_superposition.qasm | 9 + .../corpus/qasm/rotations_counts_n6.qasm | 180 ++ .../corpus/qasm/rotations_n6.qasm | 173 ++ .../corpus/qasm/rotations_wide_n20.qasm | 298 +++ .../corpus/qasm/small_angle_k16.qasm | 6 + .../corpus/qasm/small_angle_k24.qasm | 6 + .../corpus/qasm/small_angle_k26.qasm | 6 + .../corpus/qasm/small_angle_k28.qasm | 6 + .../corpus/qasm/small_angle_k30.qasm | 6 + .../corpus/qasm/small_angle_k32.qasm | 6 + .../corpus/qasm/small_angle_k8.qasm | 6 + .../corpus/qasm/teleport.qasm | 14 + .../corpus/qasm/tiny_radians.qasm | 6 + .../corpus/qasm/tn_mirror_n40.qasm | 361 +++ .../corpus/qasm/tn_shallow_n26.qasm | 196 ++ .../corpus/qasm/top_index_n20.qasm | 5 + .../corpus/qec-hand-written.json | 30 + .../corpus/qec/color_d3.circuit | 79 + .../corpus/qec/repetition_d25.circuit | 102 + .../corpus/qec/repetition_d3.circuit | 36 + .../corpus/qec/repetition_d9.circuit | 54 + .../corpus/qec/surface_x_d3.circuit | 89 + .../corpus/qec/surface_x_d5.circuit | 153 ++ .../corpus/qec/surface_x_d7.circuit | 249 ++ .../corpus/qec/surface_z_d11.circuit | 537 +++++ .../corpus/qec/surface_z_d15.circuit | 953 ++++++++ .../corpus/qec/surface_z_d3.circuit | 89 + .../corpus/qec/surface_z_d5.circuit | 153 ++ .../corpus/qec/surface_z_d5_noiseless.circuit | 131 + .../corpus/qec/surface_z_d7.circuit | 249 ++ .../corpus/qec/surface_z_d9.circuit | 377 +++ .../corpus/qec/unrotated_z_d3.circuit | 105 + .../corpus/qec/unrotated_z_d5.circuit | 217 ++ .../env/requirements.in | 11 + .../env/requirements.lock | 1246 ++++++++++ .../provider/seeded_statevector_provider.py | 221 ++ wai/quantum-cross-simulator/provider/test.sh | 61 + wai/quantum-cross-simulator/reproduce.sh | 156 ++ wai/quantum-cross-simulator/tools/compare.py | 909 +++++++ wai/quantum-cross-simulator/tools/corpus.py | 541 +++++ wai/quantum-cross-simulator/tools/engines.py | 727 ++++++ wai/quantum-cross-simulator/tools/exact.py | 748 ++++++ wai/quantum-cross-simulator/tools/perf.py | 178 ++ wai/quantum-cross-simulator/tools/report.py | 157 ++ .../tools/tolerance.py | 144 ++ .../examples/cross_simulator.rs | 163 ++ 159 files changed, 22332 insertions(+), 1 deletion(-) create mode 100644 wai/changes/2026-11-05-quantum-cross-simulator-corpus.md create mode 100644 wai/quantum-cross-simulator/README.md create mode 100644 wai/quantum-cross-simulator/corpus/known-disagreements.json create mode 100644 wai/quantum-cross-simulator/corpus/manifest.json create mode 100644 wai/quantum-cross-simulator/corpus/qasm/below_grid_k33.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/below_grid_k40.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/below_grid_k47.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/below_grid_k48.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/below_grid_k52.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/below_grid_k60.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/bit_order_control.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/bit_order_named_bits.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/bit_order_product.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/bit_order_x_high.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/bit_order_x_low.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/clifford_cluster_n65.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/clifford_counts_n40.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/clifford_ghz_n100.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/clifford_random_n10_as_state.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/clifford_random_n63.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/clifford_random_n64.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/clifford_random_n65.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/clifford_t_n12_d40.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/clifford_t_n4_d20.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/clifford_t_n8_d40.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/controlled_rz_full_turn.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/controlled_small_angle_k30.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/dyadic_n10_k30.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/dyadic_n6_k20.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/empty_register.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/feedback_flip.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/full_turn_p_t1_0.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/full_turn_rx_t1_0.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/full_turn_ry_t1_0.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/full_turn_rz_t1_0.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/full_turn_rz_t2_0.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/full_turn_u_t1_0.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/gate_c2p.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/gate_c2ry.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/gate_c2rz.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/gate_c3x.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/gate_c3z.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/gate_ccx.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/gate_ccz.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/gate_ch.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/gate_cp.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/gate_crx.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/gate_cry.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/gate_crz.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/gate_cswap.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/gate_csx.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/gate_cu.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/gate_cx.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/gate_cy.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/gate_cz.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/gate_gphase_controlled.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/gate_h.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/gate_id.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/gate_negcx.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/gate_p.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/gate_rx.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/gate_rxx.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/gate_ry.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/gate_ryy.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/gate_rz.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/gate_rzz.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/gate_s.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/gate_sdg.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/gate_swap.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/gate_sx.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/gate_sxdg.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/gate_t.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/gate_tdg.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/gate_u.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/gate_x.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/gate_y.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/gate_z.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/ghz_by_fusion.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/ghz_counts_n8.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/ghz_n12.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/ghz_n2.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/ghz_n3.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/ghz_n5.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/ghz_n8.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/grover_counts_n5.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/grover_n10.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/grover_n3.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/grover_n5.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/grover_n8.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/measure_twice.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/mps_ghz_n100.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/mps_ghz_n30.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/mps_ghz_n50.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/mps_qft_n30.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/noise_depol1_x_chain_p0_01_k20.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/noise_depol1_x_chain_p0_1_k7.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/noise_depol2_cx_chain.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/one_qubit.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/qft_counts_n8.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/qft_n12_x2741.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/qft_n14_x10923.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/qft_n3_x5.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/qft_n5_x19.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/qft_n8_x173.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/qft_superposed_n10.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/qft_wide_n20.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/qpe_t10_third.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/qpe_t12_m2741.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/qpe_t4_m5.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/qpe_t6_third.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/qpe_t8_m173.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/repeat_until_success.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/reset_after_superposition.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/rotations_counts_n6.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/rotations_n6.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/rotations_wide_n20.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/small_angle_k16.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/small_angle_k24.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/small_angle_k26.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/small_angle_k28.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/small_angle_k30.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/small_angle_k32.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/small_angle_k8.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/teleport.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/tiny_radians.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/tn_mirror_n40.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/tn_shallow_n26.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qasm/top_index_n20.qasm create mode 100644 wai/quantum-cross-simulator/corpus/qec-hand-written.json create mode 100644 wai/quantum-cross-simulator/corpus/qec/color_d3.circuit create mode 100644 wai/quantum-cross-simulator/corpus/qec/repetition_d25.circuit create mode 100644 wai/quantum-cross-simulator/corpus/qec/repetition_d3.circuit create mode 100644 wai/quantum-cross-simulator/corpus/qec/repetition_d9.circuit create mode 100644 wai/quantum-cross-simulator/corpus/qec/surface_x_d3.circuit create mode 100644 wai/quantum-cross-simulator/corpus/qec/surface_x_d5.circuit create mode 100644 wai/quantum-cross-simulator/corpus/qec/surface_x_d7.circuit create mode 100644 wai/quantum-cross-simulator/corpus/qec/surface_z_d11.circuit create mode 100644 wai/quantum-cross-simulator/corpus/qec/surface_z_d15.circuit create mode 100644 wai/quantum-cross-simulator/corpus/qec/surface_z_d3.circuit create mode 100644 wai/quantum-cross-simulator/corpus/qec/surface_z_d5.circuit create mode 100644 wai/quantum-cross-simulator/corpus/qec/surface_z_d5_noiseless.circuit create mode 100644 wai/quantum-cross-simulator/corpus/qec/surface_z_d7.circuit create mode 100644 wai/quantum-cross-simulator/corpus/qec/surface_z_d9.circuit create mode 100644 wai/quantum-cross-simulator/corpus/qec/unrotated_z_d3.circuit create mode 100644 wai/quantum-cross-simulator/corpus/qec/unrotated_z_d5.circuit create mode 100644 wai/quantum-cross-simulator/env/requirements.in create mode 100644 wai/quantum-cross-simulator/env/requirements.lock create mode 100644 wai/quantum-cross-simulator/provider/seeded_statevector_provider.py create mode 100644 wai/quantum-cross-simulator/provider/test.sh create mode 100644 wai/quantum-cross-simulator/reproduce.sh create mode 100644 wai/quantum-cross-simulator/tools/compare.py create mode 100644 wai/quantum-cross-simulator/tools/corpus.py create mode 100644 wai/quantum-cross-simulator/tools/engines.py create mode 100644 wai/quantum-cross-simulator/tools/exact.py create mode 100644 wai/quantum-cross-simulator/tools/perf.py create mode 100644 wai/quantum-cross-simulator/tools/report.py create mode 100644 wai/quantum-cross-simulator/tools/tolerance.py create mode 100644 wai/wai-quantum-cli/examples/cross_simulator.rs diff --git a/.github/workflows/wai-quantum-cli.yml b/.github/workflows/wai-quantum-cli.yml index 8c2bc37e3..2cbb521eb 100644 --- a/.github/workflows/wai-quantum-cli.yml +++ b/.github/workflows/wai-quantum-cli.yml @@ -8,7 +8,11 @@ name: wai-quantum command line # 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. +# task set. On Linux, also the cross-simulator corpus's CI tier +# (wai/quantum-cross-simulator/: the engine against pinned third-party +# simulators and integer references, each answer within its stated tolerance), its +# self-test (every injected fault caught), and its provider template held to the +# provider protocol's conformance vectors through `providers test` and `run --provider`. concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -22,6 +26,7 @@ on: - 'wai/wai-quantum-cli/**' - 'wai/wai-quantum-qpu/**' - 'wai/quantum-conformance/eval/**' + - 'wai/quantum-cross-simulator/**' - 'rust-toolchain.toml' - '.github/workflows/wai-quantum-cli.yml' pull_request: @@ -30,6 +35,7 @@ on: - 'wai/wai-quantum-cli/**' - 'wai/wai-quantum-qpu/**' - 'wai/quantum-conformance/eval/**' + - 'wai/quantum-cross-simulator/**' - 'rust-toolchain.toml' - '.github/workflows/wai-quantum-cli.yml' @@ -110,6 +116,20 @@ jobs: set -euo pipefail cargo build --locked --release bash smoke.sh ./target/release/wai-quantum + # The cross-simulator corpus's CI tier: small circuits of every family on the engine, + # pinned third-party simulators (wheels checked against their hashes) and the integer + # references, a few seconds of work each; then each fault compare.py can inject must + # fail the run on its own check; then the provider template end to end. The full corpus + # is `reproduce.sh --tier full`, run by hand (its README). + - name: The cross-simulator corpus (CI tier), its self-test, and the provider template + shell: bash + run: | + set -euo pipefail + export QCORPUS_CACHE="$HOME/.cache/wai-quantum-cross-simulator" + bash wai/quantum-cross-simulator/reproduce.sh --tier ci --jobs 2 --out "$RUNNER_TEMP/cross-simulator.json" + bash wai/quantum-cross-simulator/reproduce.sh --self-test --jobs 2 + # The page's results section is what the committed results files say. + python3 -I wai/quantum-cross-simulator/tools/report.py --check # The release binary, pinned by version and SHA-256, rather than a build from source. # Every WAI workflow that runs wasmtime pins this one version, and every run passes # -W nan-canonicalization=y -W relaxed-simd-deterministic=y: every NaN a float diff --git a/wai/changes/2026-11-05-quantum-cross-simulator-corpus.md b/wai/changes/2026-11-05-quantum-cross-simulator-corpus.md new file mode 100644 index 000000000..4e51027e4 --- /dev/null +++ b/wai/changes/2026-11-05-quantum-cross-simulator-corpus.md @@ -0,0 +1,31 @@ +### wai-quantum: a cross-simulator conformance corpus, reproducible with one command + +- **The corpus** ([quantum-cross-simulator/](quantum-cross-simulator/README.md)). Circuits + in families, each with its parameters, the reason it is there and what it must give: bit order and named bits, + GHZ, the QFT, Grover, phase estimation (dyadic and not), random Clifford+T, dyadic and arbitrary-angle circuits, + mirror circuits, angles at and below the fixed-point table's resolution, every gate of OpenQASM 3's standard + library on a state with no symmetry, measurement in the middle with reset and feedback, stabilizer circuits to + 5000 qubits, noise in closed form, wide circuits by matrix product states and contraction, and error-correction + memory experiments to distance 15. `corpus/manifest.json` pins each program's SHA-256; programs up to 16 KiB are + committed as OpenQASM 3. +- **The references** (`tools/exact.py`, standard library only): a state vector in integers at scale 2^-256, which + reproduces the extension's correctly rounded phase table at all 32 entries; the exact distribution of a program + with measurements in the middle, by walking every branch; an integer stabilizer tableau and the reduced form of a + group. Where engines disagree, these say which is right. +- **The comparison** (`tools/compare.py`). The engine (bit-exact, state vector, stabilizer, matrix product state, + tensor network, density matrix, error-correction frames, and the job path with method `auto`) against pinned + third-party simulators, each run in a process of its own. Every tolerance is derived from the engine's arithmetic + (`tools/tolerance.py`): the bit-exact method's from the extension's published bound (quantum-sim.md §5) summed + over the op-log it ran, which the referee also reruns bit for bit; double and single precision from a stated + per-gate rounding model; sampled counts by Bernstein's inequality at a family-wise error rate of 10^-6. +- **One command** (`reproduce.sh`): the pinned uv, CPython and wheels (each against its hash), the engine built with + `--locked`, every check printed with PASS or FAIL. `--self-test` injects six faults (an amplitude moved by 1e-9, + qubits reversed, shots moved, a model probability changed by one part in 10^6, a stabilizer sign flipped, one + fixed-point bit flipped) and passes only when each fails the run on its own check. `--perf` measures run time and + peak memory per engine. Committed results name the host and every version. +- **A provider template** (`provider/seeded_statevector_provider.py`): a third-party simulator as a `process` + provider of `wai.quantum.provider/1`. It passes `wai-quantum providers test`, and `run --provider` seals its + counts in a receipt that `verify` accepts. +- **The driver** (`wai-quantum-cli/examples/cross_simulator.rs`): one job in, one answer out, through the same + engine calls the command line and the job service make. +- **CI** (`wai-quantum-cli.yml`, Linux): the CI tier, the self-test and the provider template. diff --git a/wai/quantum-cross-simulator/README.md b/wai/quantum-cross-simulator/README.md new file mode 100644 index 000000000..bf75cc813 --- /dev/null +++ b/wai/quantum-cross-simulator/README.md @@ -0,0 +1,240 @@ +# Cross-simulator conformance corpus + +WAI Quantum's engine, run beside other simulators on a published set of circuits, every answer +held to a reference within a tolerance derived from the arithmetic that produced it. One +command regenerates every result here on a clean machine. + +```sh +bash wai/quantum-cross-simulator/reproduce.sh --tier full # the whole corpus: about 35 minutes on the hosts below +bash wai/quantum-cross-simulator/reproduce.sh # the CI tier, a few minutes +bash wai/quantum-cross-simulator/reproduce.sh --self-test # every injected fault must be caught +bash wai/quantum-cross-simulator/reproduce.sh --perf --out perf.json +``` + +It needs macOS on arm64 or Linux on x86_64, `curl`, `tar`, a C compiler and rustup; no account +and no key. It fetches the pinned +uv release (by SHA-256), CPython 3.12.16 through it, and the engines of +[`env/requirements.lock`](env/requirements.lock), every wheel checked against its hash. It builds +the engine from this checkout with `--locked`, runs every check, prints each failure with its +measured value and tolerance, and ends with `PASS` or `FAIL` (exit 0 or 1). `QCORPUS_CACHE` says +where the downloads go. + +## What is compared + +| engine | version | methods compared here | +|---|---|---| +| wai-quantum (this repository) | the checkout | bit-exact fixed point (`exact`), double-precision state vector, stabilizer tableau, matrix product state, tensor network, density matrix, error-correction frames and models, and the whole job path with method `auto` | +| Qiskit Aer | 0.18.2, with Qiskit 2.6.2 | state vector (built in code, and read from the published OpenQASM 3 text), stabilizer, matrix product state, density matrix | +| Stim | 1.16.0 | tableau, sampler, detector error models, the reference generator of the error-correction circuits | +| quimb | 1.15.0 | dense state, tensor network contracted, matrix product state | +| MQT DDSIM | 2.7.0, with mqt.core 3.11.0 | decision-diagram state vector and sampler | +| qsim | qsimcirq 0.22.1, with Cirq 1.7.0 | single-precision state vector and sampler | + +Each engine runs every job in a process of its own ([`tools/engines.py`](tools/engines.py)). A +third-party engine takes each gate by its own name for it where it has one, so a gate it +defines differently shows; where it has none, the adapter says so in the result and gives it the +gate's matrix. The engine under test is driven through +[`wai-quantum-cli/examples/cross_simulator.rs`](../wai-quantum-cli/examples/cross_simulator.rs), +which calls what the command line and the job service call. + +## The corpus + +[`corpus/manifest.json`](corpus/manifest.json) lists every circuit with its parameters, the +reason it is there, what it is held to and the SHA-256 of its OpenQASM 3 text; +[`tools/corpus.py`](tools/corpus.py) writes it, and a run fails if the generator no longer gives +those bytes. Programs up to 16 KiB are committed in [`corpus/qasm/`](corpus/qasm/), and the +error-correction circuits, which are the pinned reference generator's, in +[`corpus/qec/`](corpus/qec/); a run checks that the generator still writes them. Random +circuits draw from SHA-256 in counter mode, and every angle is written exactly: `m/2^k` of a +turn, a rational fraction of a turn, or a decimal number of radians. + +| family | what it exposes | +|---|---| +| bit order | which index an X on qubit 0 reads as; named classical bits out of order; a state whose every amplitude differs, so any exchange of qubits shows; an empty register; index bit 19 | +| GHZ, QFT, Grover, phase estimation | closed forms: two amplitudes of 1/√2; e^{2πixy/2^n}/2^(n/2) with every controlled phase to 2π/2^n; sin²((2k+1)θ); an outcome of probability 1, and for a phase of 1/3 the closed law, which the bit-exact method must refuse to round | +| random Clifford+T, dyadic, arbitrary angles | universal circuits in the table's gates, rotations that become many table phases in fixed point, and decimal angles no dyadic grid holds | +| mirror | U then U†, at widths past the integer reference: the answer is \|0…0⟩ exactly | +| small angles | phases of 2π/2^k for k up to 32, the table's last entry, and below it to k = 60; 2^18 applications of p(2π/2^19), whose fixed-point result the extension states | +| gate conventions | every gate of OpenQASM 3's standard library, and modifiers, on a state with no symmetry; rotations by whole turns, whose sign is the convention; a controlled global phase | +| measurement in the middle | teleportation, reset of an entangled qubit, measuring twice, feedback, a GHZ state by fusion, repeat-until-success: exact laws from every branch | +| stabilizer circuits | GHZ and cluster states to 5000 qubits; random Clifford layers at 63, 64, 65, 127, 128 and 129 qubits (either side of a machine word) and to 2000; a Clifford circuit as a state vector and a tableau; outcomes at 40 qubits | +| noise | depolarizing channels after X and cx chains, whose expectation values are closed forms | +| wide circuits | GHZ to 100 qubits and the QFT at 30 and 40 by matrix product states and contraction; a shallow brickwork at 26; a 40-qubit mirror | +| error correction | the rotated surface-code memory experiment in Z (d = 3 … 15) and X, the unrotated layout, repetition codes to d = 25, a noiseless run, a colour code, and hand-written circuits for inverted targets, tags, flip noise, merging, Pauli observables, and three instructions that must be refused | + +## How a result is judged + +The references are exact or as good as exact, and share no code with any engine +([`tools/exact.py`](tools/exact.py), standard library only): + +- **A state vector in integers.** Amplitudes are integers at scale 2^-256; sine and cosine come + from an integer π and an integer series. It reproduces the extension's correctly rounded phase + table at all 32 entries and the closed forms above to a few units of 2^-256. +- **Exact distributions.** A program that measures in the middle is walked branch by branch. +- **An integer stabilizer tableau**, and the reduced row echelon form of a group with its signs, so + that two descriptions of a stabilizer state compare as bytes. +- **The referee** ([`../quantum-conformance/tools/referee.py`](../quantum-conformance/tools/referee.py)) reruns the bit-exact method's + op-log in its own integer arithmetic and must give the engine's integers and hash. + +Each tolerance comes from [`tools/tolerance.py`](tools/tolerance.py), and none is fitted to a +result: + +- **The bit-exact method**: the extension's published bound (quantum-sim.md §5, at most 1 + √2/2 + units of 2^-30 per component per inexact gate), summed over the op-log the engine ran. +- **Floating point**: a gate of width w costs C(w)·u in the Euclidean norm, C(w) = (2√2 + (2^w − 1) + + 2 + π)·2^(w/2), from the complex products, the row sum, the matrix entries and the angle's + rounding; u = 2^-53 in double and 2^-24 in single precision; widths are each engine's fusion. + Contractions, decision diagrams (whose merging tolerance, 2^-42, is read from mqt.core's header) + and matrix product states (with LAPACK's unstated SVD constant taken as 16·m, and the weight + their truncation can drop) are stated in the same file. +- **Sampled counts**: every outcome's count against its exact probability by Bernstein's + inequality, each test at a share of a family-wise error rate of 10^-6, so a correct engine fails + a run with probability at most 10^-6. An outcome of probability 0 that appears at all fails. +- **Error-correction models**: the same symptom sets, probabilities within 16u per noise site of + the circuit; detection rates against the rates the model gives, by Bernstein's inequality. + +A state is held to its reference modulo a global phase, which no measurement sees; the +distance with the phase is recorded beside it (`strict`). The bounds are worst cases and so are +loose: each result records how far inside its bound an engine is, and the table below gives the +largest such ratio. + +A run can be seen to fail. `--self-test` injects six faults into one engine's answers (an +amplitude moved by 10^-9, the qubits of a state reversed, 2% of the shots of an outcome moved, +the largest mechanism's probability raised by one part in 10^6, a stabilizer's sign flipped, the +lowest bit of one fixed-point amplitude flipped), and passes only if each one fails the run on the +check it breaks. + +## Results + +The committed runs, one file per host, are in [`results/`](results/): every check with its +measured value and tolerance, the host and every version. A cell below is checks passed of those +made, with the largest ratio of measured value to tolerance among the passes in brackets. + +### What agreed + +On both hosts, every engine met its reference within its tolerance on every circuit it ran, with +the exceptions listed next. That covers eight methods of the engine under test and eleven +of the others, on states, sampled counts, stabilizer groups to 5000 qubits, amplitudes to 100 +qubits, noisy expectation values, and detector error models and detection rates to distance 15. +The bit-exact method's integers were reproduced bit for bit by the referee on every circuit of up +to 14 qubits, and its distance from the ideal state stayed inside the extension's published bound +everywhere, including `repeated_phase_k19`, where it ends 1.89·10^-5 from the half turn, the +figure the extension states. + +### What disagreed, and who was right + +- **The engine under test, wrong; fixed.** `quantum_frame::surface_code_memory` documents that + its text is the reference generator's, byte for byte. At p = 0 it was not: it wrote every noise + instruction with probability 0 and the first round's resets on two lines, where the reference + writes no noise instruction and one reset line (`surface_z_d5_noiseless`). The two circuits + meant the same, so models and samples agreed; the text did not. Fixed in the engine, with a + test against the reference's text (`wai-quantum/tests/frame_reference.rs`). +- **Another engine, wrong.** `ddsim.statevector` on `measure_twice` (h, then the same qubit + measured into two bits): it returns 00 and 10, where a repeated measurement must repeat, 00 and + 11. The exact reference, the engine under test by three methods, and the two other engines + that ran it agree on 00 and 11. With a barrier between the two measurements the same engine also gives 00 and 11. On + `repeat_until_success` it raises an error and gives no counts. Both are recorded in + [`corpus/known-disagreements.json`](corpus/known-disagreements.json) with what reproduces + them, and are reported as `known`; only other engines may be listed there. +- **The reference, wrong once.** While this corpus was written, the integer reference's `ryy` + used the wrong fixed rotation. It showed as every engine agreeing with every other and none + with the reference, and was corrected before any result here was recorded. A reference is + examined first when that pattern appears. + +### Conventions the corpus shows + +- **Global phase.** Every engine keeps OpenQASM 3's global phases except the bit-exact method, + which lowers `rz`, `rx`, `ry` and `U` through phase gates and so differs from the standard's + matrices by a global phase (a `strict` distance of up to 1.97 on a rotation by a whole turn). + No measurement sees it, and under a control the method is right (`controlled_rz_full_turn`, + `gate_crz`, `gate_cu`). The amplitudes a job answers with this method carry that phase, and the + result does not say so. +- **Angles below the table.** The bit-exact method reads an angle within 10^-14 of a turn of a + dyadic one as that dyadic. A phase of 2π/2^k is therefore refused for k = 33 … 46 (`[Q500]`), + and for k ≥ 47 runs as no phase at all, labelled bit-exact; the state is then within 2.3·10^-14 + of the ideal one, far inside the method's resolution. Method `auto` sends k = 33 … 46 to double + precision. +- **Bit order.** Every engine's answers were brought to one convention (qubit 0 the lowest bit of + an index, classical bit 0 the last character of an outcome) by its adapter, and the bit-order + family holds each adapter to it; the self-test's reversed state fails there. + + + + +## Limits + +- **The bounds are loose.** They are worst cases, so an error smaller than a bound passes, and + a double-precision engine usually measures a hundred times or more below its bound. The + ratios in the tables say how much room each check left. The sharp checks are the exact ones: + the referee's bit-for-bit rerun, stabilizer groups as bytes, outcomes of probability 0, and + symptom sets. +- **The integer state reference stops at 14 qubits.** Wider circuits are held to closed forms + (QFT, GHZ), to mirror circuits, and to each other. +- **Sampling is checked by marginals.** Each outcome's count is held to its probability; the + independence of shots is not tested. +- **Not compared at all:** the engine's Pauli propagation, cut-rank, stabilizer-rank, + trajectory, pulse and mitigation methods; its GPU and other fabric members; single-precision + GPU state vectors of any engine; decoders; noise beyond depolarizing channels in closed form. +- **What the engine under test refused.** Its frame simulator does not implement `C_XYZ`, + correlated errors (`E`) or general Pauli channels, so the reference generator's colour-code + memory circuits do not run on it; it refuses each with its line. Its matrix-product-state job + refuses the 30- and 40-qubit QFT at `max_bond` 256 as more work than one job may take + (`[J011]`): its estimate counts the bond asked for, not the bond the circuit reaches. The + corpus runs it at 64, where the bond it reaches is recorded in the results. +- **What the adapters do not drive.** The qsim adapter runs no measurement in the middle of a + circuit, so those entries are `not run` for it; that is this adapter's limit. `aer.mps` is + not run at 100 qubits: its target holds 63. +- **Platforms.** The pinned wheels exist together for macOS on arm64 and Linux on x86_64 only. +- **Performance** is one shared host a file, on one day. Other work on the host moves a timing + by several times; the load average before and after each case is beside it, and each figure is + the median of repeated runs with the minimum in brackets. Time is the engine's own call: + process start, imports and the building of a circuit object are outside it (for quimb the + circuit object is the simulation, and is inside it). Memory is the whole process, interpreter + and packages included, with the same process's baseline beside it. The engine under test + uses every CPU of the host; it has no thread setting, so the one-thread rows exist only on + Linux, where the process is pinned to one CPU. +- **One author** wrote the adapters, the references and the tolerances. A reproduction by + someone else, and adapters reviewed by each engine's own users, are what this page still needs. + +## A provider of the open protocol + +[`provider/seeded_statevector_provider.py`](provider/seeded_statevector_provider.py) wraps a +third-party state-vector simulator as a `process` provider of `wai.quantum.provider/1` +([the extension](../extensions/quantum-providers.md)). It is also the template for a device of +your own: replace the `Device` class's `run` with a call to your device. + +```sh +wai-quantum providers add sim --kind process -- python3 -I provider/seeded_statevector_provider.py +wai-quantum providers test sim # the protocol's conformance vectors +wai-quantum run bell.qasm --provider sim --shots 1000 --json > job.json +wai-quantum verify job.json +``` + +[`provider/test.sh`](provider/test.sh) does exactly that in a directory of its own, as part of +`reproduce.sh` and of CI: every conformance vector passes, the counts are sealed as `measured` on a +`simulator`, the receipt verifies, and the same job gives the same counts twice (the device is +seeded; on the two hosts here it gave the same counts, too). + +## CI + +`.github/workflows/wai-quantum-cli.yml` runs the CI tier on Linux (the circuits marked `ci` in the +manifest: about a minute and a half in all), the self-test, the provider template, and +`tools/report.py --check`, which holds this page's results section to `results/`. The full tier +is the command above, run by hand. + +## Files + +| path | what | +|---|---| +| `reproduce.sh` | the one command | +| `env/requirements.in`, `env/requirements.lock` | the pinned engines, and every wheel's hash for macOS and Linux | +| `corpus/` | the manifest, the committed programs and error-correction circuits, the hand-written ones, and the known disagreements | +| `tools/corpus.py` | the circuits | +| `tools/exact.py` | the references | +| `tools/tolerance.py` | every tolerance and where it comes from | +| `tools/engines.py` | one adapter per engine and method | +| `tools/compare.py` | the run: references, tolerances, injected faults, the results file | +| `tools/perf.py` | run time and peak memory | +| `tools/report.py` | this page's results section | +| `provider/` | the provider template and its test | +| `results/` | the committed runs | diff --git a/wai/quantum-cross-simulator/corpus/known-disagreements.json b/wai/quantum-cross-simulator/corpus/known-disagreements.json new file mode 100644 index 000000000..6687228eb --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/known-disagreements.json @@ -0,0 +1,19 @@ +{ + "about": "Disagreements of other engines with the exact reference, each examined and reproduced in isolation. tools/compare.py reports a failing check that matches one as `known`, not as a failure of the run. The engine under test may not be listed here: a failure of its checks is always a failure.", + "disagreements": [ + { + "entry": "measure_twice", + "engine": "ddsim.statevector", + "quantity": "deviation of an outcome's count", + "right": "the exact reference, and every other engine here: a second measurement of a qubit in the same basis repeats the first, so only 00 and 11 occur", + "finding": "MQT DDSIM 2.7.0's qasm_simulator, given h q[0]; c[0] = measure q[0]; c[1] = measure q[0]; with nothing between the two measurements, returns 00 and 10: the first bit is never set (x q[0] first gives 10 on every shot). A barrier between the measurements gives 00 and 11. Measuring into c[1] first and then c[0] raises ValueError [changePermutation]. Reproduced with the circuit built in Qiskit 2.6.2 and run directly." + }, + { + "entry": "repeat_until_success", + "engine": "ddsim.statevector", + "quantity": "counts", + "right": "the exact reference, which the engine under test and the other engines here meet", + "finding": "MQT DDSIM 2.7.0's qasm_simulator raises ValueError [changePermutation] on this program (measurement, reset and a classically controlled X in the middle of the circuit, three rounds), where it gives no counts at all." + } + ] +} diff --git a/wai/quantum-cross-simulator/corpus/manifest.json b/wai/quantum-cross-simulator/corpus/manifest.json new file mode 100644 index 000000000..29e1ffa86 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/manifest.json @@ -0,0 +1,2145 @@ +{ + "about": "Every circuit of the corpus: parameters, reason, what it is held to, and the SHA-256 of its OpenQASM text. tools/corpus.py writes this file; the run fails if the generator no longer gives these bytes.", + "circuits": [ + { + "id": "bit_order_x_low", + "family": "bit_order", + "params": { + "n": 5 + }, + "reason": "An X on qubit 0 must read as index 1, the first thing that differs between engines' conventions.", + "expect": "exact_state", + "tier": "ci", + "qubits": 5, + "gates": 1, + "sha256": "a82737e4baf9d9760161ce7a3803ff974199203b8db9fa0d635ab530acb5e627" + }, + { + "id": "bit_order_x_high", + "family": "bit_order", + "params": { + "n": 5 + }, + "reason": "The other end of the same convention: an X on the highest qubit is index 16.", + "expect": "exact_state", + "tier": "full", + "qubits": 5, + "gates": 1, + "sha256": "cd847f1612f274f3b6ca4e9d19df937b87792554942a858a129b4775916c9c46" + }, + { + "id": "bit_order_product", + "family": "bit_order", + "params": { + "n": 6 + }, + "reason": "Every amplitude differs, so any exchange of two qubits changes the state.", + "expect": "exact_state", + "tier": "ci", + "qubits": 6, + "gates": 12, + "sha256": "7dfe8ecb9180708a158cc0a938b77bb3f889c853acf28f86ef78b3605563de9e" + }, + { + "id": "bit_order_control", + "family": "bit_order", + "params": { + "n": 4 + }, + "reason": "A cx from qubit 0 to qubit 3: the control and target must not swap roles.", + "expect": "exact_state", + "tier": "full", + "qubits": 4, + "gates": 2, + "sha256": "014f5678d1eae72d2ced1e63d638cf03d15b478e2a36ff3cf785c0cae046780f" + }, + { + "id": "bit_order_named_bits", + "family": "bit_order", + "params": { + "n": 2 + }, + "reason": "Classical bits named out of order: qubit 1 into bit 0. The counts must follow the bits, not the qubits.", + "expect": "distribution", + "tier": "ci", + "qubits": 2, + "gates": 1, + "sha256": "619e3c9a70d6d064e2aef47115fb90cf2c2d7876e75dfdc29ffefdeaf438ae2a" + }, + { + "id": "empty_register", + "family": "bit_order", + "params": { + "n": 3 + }, + "reason": "A program of no gates: the state is |000>.", + "expect": "exact_state", + "tier": "full", + "qubits": 3, + "gates": 0, + "sha256": "0c1b72064ff5c99789655cc918b2e730a4ba04d0f52b65d04f6e458a0d49eedb" + }, + { + "id": "one_qubit", + "family": "bit_order", + "params": { + "n": 1 + }, + "reason": "The smallest register.", + "expect": "exact_state", + "tier": "full", + "qubits": 1, + "gates": 1, + "sha256": "b0b1111a0363f9d90a405a33fbe23352771e64a85909ebb91758f8d82ecf6e60" + }, + { + "id": "top_index_n20", + "family": "bit_order", + "params": { + "n": 20 + }, + "reason": "An index at bit 19: index arithmetic past 16 bits, with no entanglement to hide it.", + "expect": "pairwise", + "tier": "full", + "qubits": 20, + "gates": 2, + "sha256": "c68126ca3e0190a4795baab939de10bc3ceb23cc232e0af23f90949b314a649f" + }, + { + "id": "ghz_n2", + "family": "ghz", + "params": { + "n": 2 + }, + "reason": "Known answer: two amplitudes of 1/sqrt(2), every other zero. It exposes any leakage out of those two.", + "expect": "known_state", + "tier": "full", + "qubits": 2, + "gates": 2, + "sha256": "ce49d4e871f80cc36e550cadd5559c84fb63af50a0cf3bf29a297d769ce723fa" + }, + { + "id": "ghz_n3", + "family": "ghz", + "params": { + "n": 3 + }, + "reason": "Known answer: two amplitudes of 1/sqrt(2), every other zero. It exposes any leakage out of those two.", + "expect": "known_state", + "tier": "ci", + "qubits": 3, + "gates": 3, + "sha256": "034e3b190c9ea5007a430f737921eb20ad330b975a4a4399bfe59105d8c08258" + }, + { + "id": "ghz_n5", + "family": "ghz", + "params": { + "n": 5 + }, + "reason": "Known answer: two amplitudes of 1/sqrt(2), every other zero. It exposes any leakage out of those two.", + "expect": "known_state", + "tier": "full", + "qubits": 5, + "gates": 5, + "sha256": "1d857d82f61600819e01b84a9c2f4fbde13cde86fbf5b654600c708cd1bacc2b" + }, + { + "id": "ghz_n8", + "family": "ghz", + "params": { + "n": 8 + }, + "reason": "Known answer: two amplitudes of 1/sqrt(2), every other zero. It exposes any leakage out of those two.", + "expect": "known_state", + "tier": "full", + "qubits": 8, + "gates": 8, + "sha256": "2059ad0e537bfcfaf20ae709d44bef13d933d20d16722d2b892dec6334989ab9" + }, + { + "id": "ghz_n12", + "family": "ghz", + "params": { + "n": 12 + }, + "reason": "Known answer: two amplitudes of 1/sqrt(2), every other zero. It exposes any leakage out of those two.", + "expect": "known_state", + "tier": "full", + "qubits": 12, + "gates": 12, + "sha256": "c3fe93f462b9412dd9523e83654b1770d7ebe1cdfe9656112cdb780456ce18eb" + }, + { + "id": "ghz_counts_n8", + "family": "ghz", + "params": { + "n": 8 + }, + "reason": "Sampling: only the two outcomes may appear, equally often.", + "expect": "distribution", + "tier": "full", + "qubits": 8, + "gates": 8, + "sha256": "7b8a8b276092782689825d84e6ab030e23e26bb2a5e541307e6417a862fb4489" + }, + { + "id": "qft_n3_x5", + "family": "qft", + "params": { + "n": 3, + "x": 5 + }, + "reason": "Closed form e^{2πi xy/2^n}/2^(n/2), and every controlled phase up to 2π/2^n: the rotations a fixed-point table holds least well.", + "expect": "known_state", + "tier": "full", + "qubits": 3, + "gates": 9, + "sha256": "e7214b90b0e5d48d8e38ca3b06276f6f701b8a99165dc636a25183c94e63a4d9" + }, + { + "id": "qft_n5_x19", + "family": "qft", + "params": { + "n": 5, + "x": 19 + }, + "reason": "Closed form e^{2πi xy/2^n}/2^(n/2), and every controlled phase up to 2π/2^n: the rotations a fixed-point table holds least well.", + "expect": "known_state", + "tier": "ci", + "qubits": 5, + "gates": 20, + "sha256": "b208f04e2cba99c16de498db8ad86990187a08df90271d27f99553b8ee4ac6bd" + }, + { + "id": "qft_n8_x173", + "family": "qft", + "params": { + "n": 8, + "x": 173 + }, + "reason": "Closed form e^{2πi xy/2^n}/2^(n/2), and every controlled phase up to 2π/2^n: the rotations a fixed-point table holds least well.", + "expect": "known_state", + "tier": "full", + "qubits": 8, + "gates": 45, + "sha256": "6219596fde9111e9a9d263629d32d90604154cca49eba7bc1a5c82fa377294ab" + }, + { + "id": "qft_n12_x2741", + "family": "qft", + "params": { + "n": 12, + "x": 2741 + }, + "reason": "Closed form e^{2πi xy/2^n}/2^(n/2), and every controlled phase up to 2π/2^n: the rotations a fixed-point table holds least well.", + "expect": "known_state", + "tier": "full", + "qubits": 12, + "gates": 91, + "sha256": "6c5713a9476008b7594f9165e7548ae067126dbe73ac5543fc382ce6aff1311b" + }, + { + "id": "qft_n14_x10923", + "family": "qft", + "params": { + "n": 14, + "x": 10923 + }, + "reason": "Closed form e^{2πi xy/2^n}/2^(n/2), and every controlled phase up to 2π/2^n: the rotations a fixed-point table holds least well.", + "expect": "known_state", + "tier": "full", + "qubits": 14, + "gates": 120, + "sha256": "2416d7468e01f2180ba9f7a2a9c5063bfcda04c0a9adc202f2bb7b302662521e" + }, + { + "id": "qft_superposed_n10", + "family": "qft", + "params": { + "n": 10, + "seed": 11 + }, + "reason": "A QFT over a random Clifford+T state: its phases act on every amplitude, where from a basis state most cancel.", + "expect": "exact_state", + "tier": "full", + "qubits": 10, + "gates": 109, + "sha256": "7e1dc0a356bcfcdd0b8f04e3530ceb130f54a0cc90bca8f5a7b062f9b77bd4aa" + }, + { + "id": "qft_counts_n8", + "family": "qft", + "params": { + "n": 8, + "x": 173 + }, + "reason": "Sampling a uniform distribution of 256 outcomes.", + "expect": "distribution", + "tier": "full", + "qubits": 8, + "gates": 45, + "sha256": "76c9cbad3117de189ea04d94f4c1c8dcdf59130902cc126cb2e55d4e8ad847d9" + }, + { + "id": "qft_wide_n20", + "family": "qft", + "params": { + "n": 20, + "x": 699051 + }, + "reason": "Past any integer reference here: engines against each other, and chosen amplitudes against the closed form.", + "expect": "pairwise", + "tier": "full", + "qubits": 20, + "gates": 231, + "sha256": "6e27ec2cf4b5e17dd35411ad50d8cdf830f5080c7be02f0c0a588c5f60aa0c93" + }, + { + "id": "grover_n3", + "family": "grover", + "params": { + "n": 3, + "marked": 5, + "iterations": 2 + }, + "reason": "Closed form: the marked state's probability is sin²((2k+1)θ) with sin θ = 2^(-n/2). Multi-controlled gates, and interference that rounding drains.", + "expect": "exact_state", + "tier": "ci", + "qubits": 3, + "gates": 35, + "sha256": "8f9f181ab580808afd4332a4f3677eb208de31f6266a5f7e9c9cde7a6c7a41e0" + }, + { + "id": "grover_n5", + "family": "grover", + "params": { + "n": 5, + "marked": 19, + "iterations": 4 + }, + "reason": "Closed form: the marked state's probability is sin²((2k+1)θ) with sin θ = 2^(-n/2). Multi-controlled gates, and interference that rounding drains.", + "expect": "exact_state", + "tier": "full", + "qubits": 5, + "gates": 109, + "sha256": "dba78d67d58020d49b84cfc0ce1e79c3226128cad2d9ce90d949ca53657ea8f8" + }, + { + "id": "grover_n8", + "family": "grover", + "params": { + "n": 8, + "marked": 173, + "iterations": 12 + }, + "reason": "Closed form: the marked state's probability is sin²((2k+1)θ) with sin θ = 2^(-n/2). Multi-controlled gates, and interference that rounding drains.", + "expect": "exact_state", + "tier": "full", + "qubits": 8, + "gates": 488, + "sha256": "6d9edebc9c9b36cabc065c0bd38913e1fe3620e31d6d291048874c28e490dcee" + }, + { + "id": "grover_n10", + "family": "grover", + "params": { + "n": 10, + "marked": 683, + "iterations": 25 + }, + "reason": "Closed form: the marked state's probability is sin²((2k+1)θ) with sin θ = 2^(-n/2). Multi-controlled gates, and interference that rounding drains.", + "expect": "exact_state", + "tier": "full", + "qubits": 10, + "gates": 1260, + "sha256": "e1b17e8db06acc7551f0c305e8b679208236884913e604b2eb5e1c2a169629db" + }, + { + "id": "grover_counts_n5", + "family": "grover", + "params": { + "n": 5, + "marked": 19, + "iterations": 4 + }, + "reason": "Sampling a peaked distribution.", + "expect": "distribution", + "tier": "full", + "qubits": 5, + "gates": 109, + "sha256": "8dcbab3a86fcd1ba349a5958f8c055d305402969783c267c5d52cf5b66a88442" + }, + { + "id": "qpe_t4_m5", + "family": "qpe", + "params": { + "bits": 4, + "phase": "5/2^4" + }, + "reason": "A phase of exactly m/2^t: the outcome is m with probability 1, so every other amplitude must cancel to zero.", + "expect": "exact_state", + "tier": "ci", + "qubits": 5, + "gates": 21, + "sha256": "faafed7df4e137998ed36db00b1ef571c926ee99fae83fab721284c7c568b510" + }, + { + "id": "qpe_t8_m173", + "family": "qpe", + "params": { + "bits": 8, + "phase": "173/2^8" + }, + "reason": "A phase of exactly m/2^t: the outcome is m with probability 1, so every other amplitude must cancel to zero.", + "expect": "exact_state", + "tier": "full", + "qubits": 9, + "gates": 57, + "sha256": "e1694667fc9071b918f42fc9ea780db3f9245eb48351a10d8b7b8acd10c7d033" + }, + { + "id": "qpe_t12_m2741", + "family": "qpe", + "params": { + "bits": 12, + "phase": "2741/2^12" + }, + "reason": "A phase of exactly m/2^t: the outcome is m with probability 1, so every other amplitude must cancel to zero.", + "expect": "exact_state", + "tier": "full", + "qubits": 13, + "gates": 109, + "sha256": "afb31ffc8ece9649a0eacb088abe0ba26665ac54f3f3eb609edc2f22edb49b09" + }, + { + "id": "qpe_t6_third", + "family": "qpe", + "params": { + "bits": 6, + "phase": "1/3" + }, + "reason": "A phase that is no dyadic: the outcome's law is the closed form sin²(π2^t δ)/(2^(2t) sin²(πδ)), and the bit-exact method must refuse it rather than round it.", + "expect": "exact_state", + "tier": "full", + "qubits": 7, + "gates": 37, + "sha256": "f49ff7bd41b46e1c07268ae0d1410d189601e6701bd65212364af7933dbc318b" + }, + { + "id": "qpe_t10_third", + "family": "qpe", + "params": { + "bits": 10, + "phase": "1/3" + }, + "reason": "A phase that is no dyadic: the outcome's law is the closed form sin²(π2^t δ)/(2^(2t) sin²(πδ)), and the bit-exact method must refuse it rather than round it.", + "expect": "exact_state", + "tier": "full", + "qubits": 11, + "gates": 81, + "sha256": "ec30289ba987fa8d2dcad560778fa1b5e49bfe9185e137e1506e112eac16efbe" + }, + { + "id": "clifford_t_n4_d20", + "family": "random_clifford_t", + "params": { + "n": 4, + "depth": 20, + "seed": 1 + }, + "reason": "Universal, in the gates the bit-exact method holds as table constants.", + "expect": "exact_state", + "tier": "ci", + "qubits": 4, + "gates": 97, + "sha256": "ae74f2872c687bf1c1c09f812b5c550f1d69c59000f67debb716f660bd6d548d" + }, + { + "id": "clifford_t_n8_d40", + "family": "random_clifford_t", + "params": { + "n": 8, + "depth": 40, + "seed": 2 + }, + "reason": "Universal, in the gates the bit-exact method holds as table constants.", + "expect": "exact_state", + "tier": "full", + "qubits": 8, + "gates": 374, + "sha256": "b9d7e8c529492ca5ad8481384f157da54749b6d5e4c8d81a887137b468b7cf38" + }, + { + "id": "clifford_t_n12_d40", + "family": "random_clifford_t", + "params": { + "n": 12, + "depth": 40, + "seed": 3 + }, + "reason": "Universal, in the gates the bit-exact method holds as table constants.", + "expect": "exact_state", + "tier": "full", + "qubits": 12, + "gates": 547, + "sha256": "f00af086f06d6a3917ee0d265e3c98b690918aadae5f4bd3d58dc57f78b6d73a" + }, + { + "id": "dyadic_n6_k20", + "family": "random_dyadic", + "params": { + "n": 6, + "depth": 20, + "seed": 4, + "k": 16 + }, + "reason": "Rotations by m/2^k of a turn: each is many table phases in fixed point, so its error is largest here.", + "expect": "exact_state", + "tier": "full", + "qubits": 6, + "gates": 170, + "sha256": "0eb2567c7f1513d150dc136a4e190a4a29c60914721f05a0b3be9f381d4e273d" + }, + { + "id": "dyadic_n10_k30", + "family": "random_dyadic", + "params": { + "n": 10, + "depth": 30, + "seed": 5, + "k": 32 + }, + "reason": "Rotations by m/2^k of a turn: each is many table phases in fixed point, so its error is largest here.", + "expect": "exact_state", + "tier": "full", + "qubits": 10, + "gates": 435, + "sha256": "ed6c2c3ab152da8e856ee41f39c11acac9de2ed36e6234207db811cd52df898b" + }, + { + "id": "rotations_n6", + "family": "random_rotations", + "params": { + "n": 6, + "depth": 20, + "seed": 6 + }, + "reason": "Arbitrary decimal angles: double-precision engines only, and the bit-exact method must refuse.", + "expect": "exact_state", + "tier": "ci", + "qubits": 6, + "gates": 170, + "sha256": "6d079a7a27d31785fde1909ef5f16acaa8ae5062a2c66bb3b8737a31260ccd3c" + }, + { + "id": "rotations_n10", + "family": "random_rotations", + "params": { + "n": 10, + "depth": 30, + "seed": 7 + }, + "reason": "Arbitrary decimal angles: double-precision engines only, and the bit-exact method must refuse.", + "expect": "exact_state", + "tier": "full", + "qubits": 10, + "gates": 435, + "sha256": "9faecc98ce6e3af81886043b631267e97dfed9bcfe83d8f3003f1b38d0a31a8c" + }, + { + "id": "rotations_n12", + "family": "random_rotations", + "params": { + "n": 12, + "depth": 40, + "seed": 8 + }, + "reason": "Arbitrary decimal angles: double-precision engines only, and the bit-exact method must refuse.", + "expect": "exact_state", + "tier": "full", + "qubits": 12, + "gates": 700, + "sha256": "2f5baf86bd99393faa99d654549995948595c6b0e20238a15d3e2ec9101ab166" + }, + { + "id": "rotations_counts_n6", + "family": "random_rotations", + "params": { + "n": 6, + "depth": 20, + "seed": 6 + }, + "reason": "Sampling a distribution with no structure.", + "expect": "distribution", + "tier": "full", + "qubits": 6, + "gates": 170, + "sha256": "960179efed275ac39a696dc1e14fca228136ef116f6ee191da452179320d37b7" + }, + { + "id": "rotations_wide_n20", + "family": "random_rotations", + "params": { + "n": 20, + "depth": 10, + "seed": 9 + }, + "reason": "No integer reference at this width: engines against each other, with fusion and threads in play.", + "expect": "pairwise", + "tier": "full", + "qubits": 20, + "gates": 295, + "sha256": "96c614aef3cae3293bbe0f99a08af605a2ea0696649def324519e2e8ca9fed64" + }, + { + "id": "mirror_n10", + "family": "mirror", + "params": { + "n": 10, + "depth": 40, + "seed": 21 + }, + "reason": "U then its inverse: the state is |0…0> exactly, at a width no integer reference reaches, and what remains is the engine's accumulated rounding.", + "expect": "mirror", + "tier": "full", + "qubits": 10, + "gates": 1160, + "sha256": "d6e98007f676cbb2727e5e5d83fb99a17442a70d2003c7806fc6d6eb7f8a6d58" + }, + { + "id": "mirror_n16", + "family": "mirror", + "params": { + "n": 16, + "depth": 30, + "seed": 22 + }, + "reason": "U then its inverse: the state is |0…0> exactly, at a width no integer reference reaches, and what remains is the engine's accumulated rounding.", + "expect": "mirror", + "tier": "full", + "qubits": 16, + "gates": 1410, + "sha256": "c46bd14fecf66ebeb17f91d78780fd589788888561b4cd78875b064e6693cd7b" + }, + { + "id": "mirror_n20", + "family": "mirror", + "params": { + "n": 20, + "depth": 20, + "seed": 23 + }, + "reason": "U then its inverse: the state is |0…0> exactly, at a width no integer reference reaches, and what remains is the engine's accumulated rounding.", + "expect": "mirror", + "tier": "full", + "qubits": 20, + "gates": 1180, + "sha256": "9b5f51a89b17005dc6ce3a53481672c9000cf653e12b7200dc6385250a52ccec" + }, + { + "id": "small_angle_k8", + "family": "small_angle", + "params": { + "k": 8 + }, + "reason": "h, p(2π/2^k), h: P(1) = sin²(π/2^k). Within the phase table, and at its resolution floor as k nears 32.", + "expect": "exact_state", + "tier": "full", + "qubits": 1, + "gates": 3, + "sha256": "441d7b3720a39556a70c4c670a1398c2ea62b7ddecc4f1048ce749c35c492a8e" + }, + { + "id": "small_angle_k16", + "family": "small_angle", + "params": { + "k": 16 + }, + "reason": "h, p(2π/2^k), h: P(1) = sin²(π/2^k). Within the phase table, and at its resolution floor as k nears 32.", + "expect": "exact_state", + "tier": "full", + "qubits": 1, + "gates": 3, + "sha256": "a8c43d2fbde8e229249d4c7d965da82f3f59cd21fec16c517d1c296126d679a7" + }, + { + "id": "small_angle_k24", + "family": "small_angle", + "params": { + "k": 24 + }, + "reason": "h, p(2π/2^k), h: P(1) = sin²(π/2^k). Within the phase table, and at its resolution floor as k nears 32.", + "expect": "exact_state", + "tier": "full", + "qubits": 1, + "gates": 3, + "sha256": "e89d4ba5941183c89848f2ed850a828c908e5251fe748c5d7fcb9e69d98a9111" + }, + { + "id": "small_angle_k26", + "family": "small_angle", + "params": { + "k": 26 + }, + "reason": "h, p(2π/2^k), h: P(1) = sin²(π/2^k). Within the phase table, and at its resolution floor as k nears 32.", + "expect": "exact_state", + "tier": "full", + "qubits": 1, + "gates": 3, + "sha256": "b1f5a2b44a4759a75bf154b80a0739d84135f1392718bc5d60a09ff2bfd972c0" + }, + { + "id": "small_angle_k28", + "family": "small_angle", + "params": { + "k": 28 + }, + "reason": "h, p(2π/2^k), h: P(1) = sin²(π/2^k). Within the phase table, and at its resolution floor as k nears 32.", + "expect": "exact_state", + "tier": "full", + "qubits": 1, + "gates": 3, + "sha256": "98d7a4384a76f675a9b075f823fdb63b9e9ad1229e81613322d8308c6ce2da93" + }, + { + "id": "small_angle_k30", + "family": "small_angle", + "params": { + "k": 30 + }, + "reason": "h, p(2π/2^k), h: P(1) = sin²(π/2^k). Within the phase table, and at its resolution floor as k nears 32.", + "expect": "exact_state", + "tier": "full", + "qubits": 1, + "gates": 3, + "sha256": "5dc3bc52bcf8ed1ab7d58a55d83f1b583b1220d45286f3e10607ce5d3724dfcc" + }, + { + "id": "small_angle_k32", + "family": "small_angle", + "params": { + "k": 32 + }, + "reason": "h, p(2π/2^k), h: P(1) = sin²(π/2^k). Within the phase table, and at its resolution floor as k nears 32.", + "expect": "exact_state", + "tier": "ci", + "qubits": 1, + "gates": 3, + "sha256": "0557416f9083f48643327897d8cb7bbafcaaef0355b9b19340d9cd4398409a34" + }, + { + "id": "below_grid_k33", + "family": "small_angle", + "params": { + "k": 33 + }, + "reason": "An angle below the table's last entry: the bit-exact method may refuse it, or read it as nothing when it is below the tolerance of its reader. Double-precision engines hold it.", + "expect": "exact_state", + "tier": "full", + "qubits": 1, + "gates": 3, + "sha256": "147a4fa66fb22fe948b2c8b5d21536d9bb050119b5108727d4b241b5fbf55751" + }, + { + "id": "below_grid_k40", + "family": "small_angle", + "params": { + "k": 40 + }, + "reason": "An angle below the table's last entry: the bit-exact method may refuse it, or read it as nothing when it is below the tolerance of its reader. Double-precision engines hold it.", + "expect": "exact_state", + "tier": "full", + "qubits": 1, + "gates": 3, + "sha256": "596651513c2bf225c2539ff24060029cd7021fd0cfe5d33a5f9e2ec3982119a6" + }, + { + "id": "below_grid_k47", + "family": "small_angle", + "params": { + "k": 47 + }, + "reason": "An angle below the table's last entry: the bit-exact method may refuse it, or read it as nothing when it is below the tolerance of its reader. Double-precision engines hold it.", + "expect": "exact_state", + "tier": "ci", + "qubits": 1, + "gates": 3, + "sha256": "7ad45c9521a2074266a7be652e6dd89e79597e0896417703ab9ffc5708f75aff" + }, + { + "id": "below_grid_k48", + "family": "small_angle", + "params": { + "k": 48 + }, + "reason": "An angle below the table's last entry: the bit-exact method may refuse it, or read it as nothing when it is below the tolerance of its reader. Double-precision engines hold it.", + "expect": "exact_state", + "tier": "full", + "qubits": 1, + "gates": 3, + "sha256": "242464540967874cb21915d2da1447468bd214b13b5b3a0d05087afe06534720" + }, + { + "id": "below_grid_k52", + "family": "small_angle", + "params": { + "k": 52 + }, + "reason": "An angle below the table's last entry: the bit-exact method may refuse it, or read it as nothing when it is below the tolerance of its reader. Double-precision engines hold it.", + "expect": "exact_state", + "tier": "full", + "qubits": 1, + "gates": 3, + "sha256": "d07b0afcd0abe79f6f8b4708f5e07f8008306c09fbd535077346c3c34c555b1f" + }, + { + "id": "below_grid_k60", + "family": "small_angle", + "params": { + "k": 60 + }, + "reason": "An angle below the table's last entry: the bit-exact method may refuse it, or read it as nothing when it is below the tolerance of its reader. Double-precision engines hold it.", + "expect": "exact_state", + "tier": "full", + "qubits": 1, + "gates": 3, + "sha256": "fabab0f8ce0d4aed47ad8023be781c983bfa9cd630a6bd2192577c8664d9efa0" + }, + { + "id": "tiny_radians", + "family": "small_angle", + "params": { + "radians": "1e-12" + }, + "reason": "A small decimal angle, not on any dyadic grid.", + "expect": "exact_state", + "tier": "full", + "qubits": 1, + "gates": 3, + "sha256": "2fd0b42317d869eee9922d08d1d93b0bf8e6ca3093c19eaf7048e909603346b6" + }, + { + "id": "controlled_small_angle_k30", + "family": "small_angle", + "params": { + "k": 30 + }, + "reason": "The same phase under a control.", + "expect": "exact_state", + "tier": "full", + "qubits": 2, + "gates": 3, + "sha256": "6976262be9349c505927643d4df89363989a7ccd572f215e8ce097e1de06387c" + }, + { + "id": "repeated_phase_k19", + "family": "small_angle", + "params": { + "k": 19, + "count": 262144 + }, + "reason": "p(2π/2^19) applied 2^18 times is a half turn. The extension's section 5 states what fixed point leaves of it: modulus 1.0000189, within 1e-5 rad of the half turn.", + "expect": "exact_state", + "tier": "full", + "qubits": 1, + "gates": 262145, + "sha256": "50ac497a03b02ee67e75f0e9b8349df93c25fb2351a9735ea2fcf71c317c229d" + }, + { + "id": "h_squared_chain", + "family": "small_angle", + "params": { + "count": 4096 + }, + "reason": "2048 pairs of H on a superposition: the identity, where fixed point's rounding of 1/sqrt(2) adds up.", + "expect": "exact_state", + "tier": "full", + "qubits": 1, + "gates": 4096, + "sha256": "fa91d24ee9a709bbbadc89249aaa70c3bf5a8210b8a0873ae153020600c28215" + }, + { + "id": "gate_id", + "family": "gate_conventions", + "params": { + "gate": "id" + }, + "reason": "What this gate means, from OpenQASM 3's standard library, applied to a state with no symmetry; engines that define it otherwise show here.", + "expect": "exact_state", + "tier": "full", + "qubits": 1, + "gates": 3, + "sha256": "410dbbb6cf7ac67dc80d96346a1e622cad75fa15c35f829865ab91ea4cd28193" + }, + { + "id": "gate_x", + "family": "gate_conventions", + "params": { + "gate": "x" + }, + "reason": "What this gate means, from OpenQASM 3's standard library, applied to a state with no symmetry; engines that define it otherwise show here.", + "expect": "exact_state", + "tier": "full", + "qubits": 1, + "gates": 3, + "sha256": "101d783d4c08cd8cde13b5968b57002dbcaa2786a263f1c2b4223a91896e9634" + }, + { + "id": "gate_y", + "family": "gate_conventions", + "params": { + "gate": "y" + }, + "reason": "What this gate means, from OpenQASM 3's standard library, applied to a state with no symmetry; engines that define it otherwise show here.", + "expect": "exact_state", + "tier": "full", + "qubits": 1, + "gates": 3, + "sha256": "ed558ad0592cf43ceedb58e86dfe1b164d6637d135c0ccb763bb27dac060b8bd" + }, + { + "id": "gate_z", + "family": "gate_conventions", + "params": { + "gate": "z" + }, + "reason": "What this gate means, from OpenQASM 3's standard library, applied to a state with no symmetry; engines that define it otherwise show here.", + "expect": "exact_state", + "tier": "full", + "qubits": 1, + "gates": 3, + "sha256": "04ecc5acd4bfceede677e706b213311975b00d6e451ec5c21d77cb8feaf7933b" + }, + { + "id": "gate_h", + "family": "gate_conventions", + "params": { + "gate": "h" + }, + "reason": "What this gate means, from OpenQASM 3's standard library, applied to a state with no symmetry; engines that define it otherwise show here.", + "expect": "exact_state", + "tier": "full", + "qubits": 1, + "gates": 3, + "sha256": "2389becc8d9688b0da81fbf5865bda444050c6251185ade338b71c09fed80417" + }, + { + "id": "gate_s", + "family": "gate_conventions", + "params": { + "gate": "s" + }, + "reason": "What this gate means, from OpenQASM 3's standard library, applied to a state with no symmetry; engines that define it otherwise show here.", + "expect": "exact_state", + "tier": "full", + "qubits": 1, + "gates": 3, + "sha256": "a0c411011974218a8d8036bcfae2063abbb5665c8db5a743d0dca52c99c7cdea" + }, + { + "id": "gate_sdg", + "family": "gate_conventions", + "params": { + "gate": "sdg" + }, + "reason": "What this gate means, from OpenQASM 3's standard library, applied to a state with no symmetry; engines that define it otherwise show here.", + "expect": "exact_state", + "tier": "full", + "qubits": 1, + "gates": 3, + "sha256": "0d80b91b1453b7b32d39de05e4dde6cc71f0670a59ab9bd793961b26d9024aa9" + }, + { + "id": "gate_t", + "family": "gate_conventions", + "params": { + "gate": "t" + }, + "reason": "What this gate means, from OpenQASM 3's standard library, applied to a state with no symmetry; engines that define it otherwise show here.", + "expect": "exact_state", + "tier": "full", + "qubits": 1, + "gates": 3, + "sha256": "ac131bbe355e94067f687e55334b54691b027ee3b22de7742c0649c4d690d1e9" + }, + { + "id": "gate_tdg", + "family": "gate_conventions", + "params": { + "gate": "tdg" + }, + "reason": "What this gate means, from OpenQASM 3's standard library, applied to a state with no symmetry; engines that define it otherwise show here.", + "expect": "exact_state", + "tier": "full", + "qubits": 1, + "gates": 3, + "sha256": "ab32faa354c866f6ace89b48557e7ca06ecf7d28971e1fee87c13faca2bac46e" + }, + { + "id": "gate_sx", + "family": "gate_conventions", + "params": { + "gate": "sx" + }, + "reason": "What this gate means, from OpenQASM 3's standard library, applied to a state with no symmetry; engines that define it otherwise show here.", + "expect": "exact_state", + "tier": "ci", + "qubits": 1, + "gates": 3, + "sha256": "2209cf5acff099194978f7818fde05ff8779130e4e7cbb62775d68db3262fc9b" + }, + { + "id": "gate_sxdg", + "family": "gate_conventions", + "params": { + "gate": "sxdg" + }, + "reason": "What this gate means, from OpenQASM 3's standard library, applied to a state with no symmetry; engines that define it otherwise show here.", + "expect": "exact_state", + "tier": "full", + "qubits": 1, + "gates": 3, + "sha256": "d67cc49598fb46364f0f774f12ed29c2f16d845e87f1c2be29b90a58632a0f88" + }, + { + "id": "gate_p", + "family": "gate_conventions", + "params": { + "gate": "p" + }, + "reason": "What this gate means, from OpenQASM 3's standard library, applied to a state with no symmetry; engines that define it otherwise show here.", + "expect": "exact_state", + "tier": "full", + "qubits": 1, + "gates": 3, + "sha256": "dbb2f63c618e6eb77baa83be379a2e63d49cf2014b6b5cce691e00c6cef0a565" + }, + { + "id": "gate_rz", + "family": "gate_conventions", + "params": { + "gate": "rz" + }, + "reason": "What this gate means, from OpenQASM 3's standard library, applied to a state with no symmetry; engines that define it otherwise show here.", + "expect": "exact_state", + "tier": "ci", + "qubits": 1, + "gates": 3, + "sha256": "84b4fe10f5cae706848e37ec80bf7e8e8d945bf4883826371199bb9255eb883c" + }, + { + "id": "gate_rx", + "family": "gate_conventions", + "params": { + "gate": "rx" + }, + "reason": "What this gate means, from OpenQASM 3's standard library, applied to a state with no symmetry; engines that define it otherwise show here.", + "expect": "exact_state", + "tier": "full", + "qubits": 1, + "gates": 3, + "sha256": "5581cb1ff06bf6ec0637571d7b8c62e2f4302c59afad2afcfdba8c5443685810" + }, + { + "id": "gate_ry", + "family": "gate_conventions", + "params": { + "gate": "ry" + }, + "reason": "What this gate means, from OpenQASM 3's standard library, applied to a state with no symmetry; engines that define it otherwise show here.", + "expect": "exact_state", + "tier": "full", + "qubits": 1, + "gates": 3, + "sha256": "7bbfad7997d4b45474ce9a40739669f63f8b7c22e23b5775b390fef2fcdbf203" + }, + { + "id": "gate_u", + "family": "gate_conventions", + "params": { + "gate": "u" + }, + "reason": "What this gate means, from OpenQASM 3's standard library, applied to a state with no symmetry; engines that define it otherwise show here.", + "expect": "exact_state", + "tier": "full", + "qubits": 1, + "gates": 3, + "sha256": "73b69f3410dd823829aa8618705158fa6bf53a20636fca7a742f2d612a7d9654" + }, + { + "id": "gate_cx", + "family": "gate_conventions", + "params": { + "gate": "cx" + }, + "reason": "What this gate means, from OpenQASM 3's standard library, applied to a state with no symmetry; engines that define it otherwise show here.", + "expect": "exact_state", + "tier": "full", + "qubits": 2, + "gates": 5, + "sha256": "42cd9d0f9b9b8941dea9092857a2a3023e0f6cbb8e952302da754749173ed998" + }, + { + "id": "gate_cy", + "family": "gate_conventions", + "params": { + "gate": "cy" + }, + "reason": "What this gate means, from OpenQASM 3's standard library, applied to a state with no symmetry; engines that define it otherwise show here.", + "expect": "exact_state", + "tier": "full", + "qubits": 2, + "gates": 5, + "sha256": "12a32fef83d3a669abe411ed8a521d15c41632914015825e9ead41129137a957" + }, + { + "id": "gate_cz", + "family": "gate_conventions", + "params": { + "gate": "cz" + }, + "reason": "What this gate means, from OpenQASM 3's standard library, applied to a state with no symmetry; engines that define it otherwise show here.", + "expect": "exact_state", + "tier": "full", + "qubits": 2, + "gates": 5, + "sha256": "0c81b6b2c303ead17836a353bfde9c4d3c5f3830c0da1ee9de92b40c7217e031" + }, + { + "id": "gate_ch", + "family": "gate_conventions", + "params": { + "gate": "ch" + }, + "reason": "What this gate means, from OpenQASM 3's standard library, applied to a state with no symmetry; engines that define it otherwise show here.", + "expect": "exact_state", + "tier": "full", + "qubits": 2, + "gates": 5, + "sha256": "9b029614a02987f77ccb25d3545defcd429b9f3ec5245a1be5cfea56ade70f0c" + }, + { + "id": "gate_csx", + "family": "gate_conventions", + "params": { + "gate": "csx" + }, + "reason": "What this gate means, from OpenQASM 3's standard library, applied to a state with no symmetry; engines that define it otherwise show here.", + "expect": "exact_state", + "tier": "full", + "qubits": 2, + "gates": 5, + "sha256": "ad02746fbcab35804053320f2581a94ee80a8389a4eed0067c26eec039f81759" + }, + { + "id": "gate_swap", + "family": "gate_conventions", + "params": { + "gate": "swap" + }, + "reason": "What this gate means, from OpenQASM 3's standard library, applied to a state with no symmetry; engines that define it otherwise show here.", + "expect": "exact_state", + "tier": "full", + "qubits": 2, + "gates": 5, + "sha256": "e3b5899a6bb2bceea707a61ae04ae29a47f9bf6f35ab884d323285ef2300d961" + }, + { + "id": "gate_cp", + "family": "gate_conventions", + "params": { + "gate": "cp" + }, + "reason": "What this gate means, from OpenQASM 3's standard library, applied to a state with no symmetry; engines that define it otherwise show here.", + "expect": "exact_state", + "tier": "full", + "qubits": 2, + "gates": 5, + "sha256": "701162612a1e1c07b32394787b5b452a3982cfd9db4e31620b351fd191e21ab4" + }, + { + "id": "gate_crx", + "family": "gate_conventions", + "params": { + "gate": "crx" + }, + "reason": "What this gate means, from OpenQASM 3's standard library, applied to a state with no symmetry; engines that define it otherwise show here.", + "expect": "exact_state", + "tier": "full", + "qubits": 2, + "gates": 5, + "sha256": "8d1871d908947146c115f33b9927942d63afcdb14cdba704c84ac1cd653ab46a" + }, + { + "id": "gate_cry", + "family": "gate_conventions", + "params": { + "gate": "cry" + }, + "reason": "What this gate means, from OpenQASM 3's standard library, applied to a state with no symmetry; engines that define it otherwise show here.", + "expect": "exact_state", + "tier": "full", + "qubits": 2, + "gates": 5, + "sha256": "f95f61642a7dd81ec2dd5c68106dc201fe14a1d0ae5e59356346ab4469b46e00" + }, + { + "id": "gate_crz", + "family": "gate_conventions", + "params": { + "gate": "crz" + }, + "reason": "What this gate means, from OpenQASM 3's standard library, applied to a state with no symmetry; engines that define it otherwise show here.", + "expect": "exact_state", + "tier": "full", + "qubits": 2, + "gates": 5, + "sha256": "3b4a010a5b1ac5a21a1499a5512c4baa9d7b717f214164bb1855fd0b41e5f317" + }, + { + "id": "gate_cu", + "family": "gate_conventions", + "params": { + "gate": "cu" + }, + "reason": "What this gate means, from OpenQASM 3's standard library, applied to a state with no symmetry; engines that define it otherwise show here.", + "expect": "exact_state", + "tier": "ci", + "qubits": 2, + "gates": 5, + "sha256": "567eaae329cf9034155343eb6d857d4aa184f7eec9c54e599c2ada2e3fa39b25" + }, + { + "id": "gate_rzz", + "family": "gate_conventions", + "params": { + "gate": "rzz" + }, + "reason": "What this gate means, from OpenQASM 3's standard library, applied to a state with no symmetry; engines that define it otherwise show here.", + "expect": "exact_state", + "tier": "full", + "qubits": 2, + "gates": 5, + "sha256": "1a6127bfd89d87869a2cb37e2aa3073f919948418105f542b3354693629f53fe" + }, + { + "id": "gate_rxx", + "family": "gate_conventions", + "params": { + "gate": "rxx" + }, + "reason": "What this gate means, from OpenQASM 3's standard library, applied to a state with no symmetry; engines that define it otherwise show here.", + "expect": "exact_state", + "tier": "full", + "qubits": 2, + "gates": 5, + "sha256": "0e29507d9f92ba0c5649ae6c1151f9b11241fcae912fabca8ad1b5217842ad68" + }, + { + "id": "gate_ryy", + "family": "gate_conventions", + "params": { + "gate": "ryy" + }, + "reason": "What this gate means, from OpenQASM 3's standard library, applied to a state with no symmetry; engines that define it otherwise show here.", + "expect": "exact_state", + "tier": "full", + "qubits": 2, + "gates": 5, + "sha256": "9c021a44b079998fe65503ba21d03e955b468ba07c2d474f4642bf82c239e084" + }, + { + "id": "gate_negcx", + "family": "gate_conventions", + "params": { + "gate": "negcx" + }, + "reason": "What this gate means, from OpenQASM 3's standard library, applied to a state with no symmetry; engines that define it otherwise show here.", + "expect": "exact_state", + "tier": "ci", + "qubits": 2, + "gates": 5, + "sha256": "c2f9d47519b0b82c8eb7b92dee977f3dfe570992063b2c4fbff933b05dddaa2b" + }, + { + "id": "gate_ccx", + "family": "gate_conventions", + "params": { + "gate": "ccx" + }, + "reason": "What this gate means, from OpenQASM 3's standard library, applied to a state with no symmetry; engines that define it otherwise show here.", + "expect": "exact_state", + "tier": "full", + "qubits": 3, + "gates": 7, + "sha256": "2b2c10e47a66b66a4f68a97b66587e4479b2449860ee89e5254e9633945b9324" + }, + { + "id": "gate_ccz", + "family": "gate_conventions", + "params": { + "gate": "ccz" + }, + "reason": "What this gate means, from OpenQASM 3's standard library, applied to a state with no symmetry; engines that define it otherwise show here.", + "expect": "exact_state", + "tier": "full", + "qubits": 3, + "gates": 7, + "sha256": "834e4d6b2a3efaeeb1781b371e79acb9a426a06deb708129ed2713e96eae2892" + }, + { + "id": "gate_cswap", + "family": "gate_conventions", + "params": { + "gate": "cswap" + }, + "reason": "What this gate means, from OpenQASM 3's standard library, applied to a state with no symmetry; engines that define it otherwise show here.", + "expect": "exact_state", + "tier": "full", + "qubits": 3, + "gates": 7, + "sha256": "235ea138c7f18beda3f38c66219491567809e570702ca9f0ba02a6dd29766dc4" + }, + { + "id": "gate_c2p", + "family": "gate_conventions", + "params": { + "gate": "c2p" + }, + "reason": "What this gate means, from OpenQASM 3's standard library, applied to a state with no symmetry; engines that define it otherwise show here.", + "expect": "exact_state", + "tier": "full", + "qubits": 3, + "gates": 7, + "sha256": "11949363536a395c9815704449202e434dbf2bcce01540afc32ec2e59b9f8a94" + }, + { + "id": "gate_c2rz", + "family": "gate_conventions", + "params": { + "gate": "c2rz" + }, + "reason": "What this gate means, from OpenQASM 3's standard library, applied to a state with no symmetry; engines that define it otherwise show here.", + "expect": "exact_state", + "tier": "ci", + "qubits": 3, + "gates": 7, + "sha256": "d0ad4c4b451fe9de8654a8c0c00c7c8ae6988a0a2adf722c54e9e8634f23066e" + }, + { + "id": "gate_c2ry", + "family": "gate_conventions", + "params": { + "gate": "c2ry" + }, + "reason": "What this gate means, from OpenQASM 3's standard library, applied to a state with no symmetry; engines that define it otherwise show here.", + "expect": "exact_state", + "tier": "full", + "qubits": 3, + "gates": 7, + "sha256": "a41490d8d5e208f95916f8434ab94c4871441caead281c96673c411aa6da9a63" + }, + { + "id": "gate_c3x", + "family": "gate_conventions", + "params": { + "gate": "c3x" + }, + "reason": "What this gate means, from OpenQASM 3's standard library, applied to a state with no symmetry; engines that define it otherwise show here.", + "expect": "exact_state", + "tier": "full", + "qubits": 4, + "gates": 9, + "sha256": "fd36273d77efbe2f905954302a21668954e7ef088168fb1fb20a627b6cc80164" + }, + { + "id": "gate_c3z", + "family": "gate_conventions", + "params": { + "gate": "c3z" + }, + "reason": "What this gate means, from OpenQASM 3's standard library, applied to a state with no symmetry; engines that define it otherwise show here.", + "expect": "exact_state", + "tier": "full", + "qubits": 4, + "gates": 9, + "sha256": "205ace2f760d1fd949b5951d5b576b23d167da0a6baa21c47eea7b5c8d708ee0" + }, + { + "id": "full_turn_rz_t1_0", + "family": "gate_conventions", + "params": { + "gate": "rz", + "angle": "t:1/0" + }, + "reason": "A rotation by whole turns: the identity up to a sign, and the sign is the convention. Engines that lower it through a phase gate lose the sign; a global phase changes no outcome, and under a control it would.", + "expect": "exact_state", + "tier": "full", + "qubits": 1, + "gates": 3, + "sha256": "5eaf505117f1497fc788f87c41d6d973e23ca931dc6cd5a109d429e848d28a55" + }, + { + "id": "full_turn_rx_t1_0", + "family": "gate_conventions", + "params": { + "gate": "rx", + "angle": "t:1/0" + }, + "reason": "A rotation by whole turns: the identity up to a sign, and the sign is the convention. Engines that lower it through a phase gate lose the sign; a global phase changes no outcome, and under a control it would.", + "expect": "exact_state", + "tier": "full", + "qubits": 1, + "gates": 3, + "sha256": "05b6e1aa3b391ac5ec1ac915cf9c6fee25caa859b788e69f28a135511f668e17" + }, + { + "id": "full_turn_ry_t1_0", + "family": "gate_conventions", + "params": { + "gate": "ry", + "angle": "t:1/0" + }, + "reason": "A rotation by whole turns: the identity up to a sign, and the sign is the convention. Engines that lower it through a phase gate lose the sign; a global phase changes no outcome, and under a control it would.", + "expect": "exact_state", + "tier": "full", + "qubits": 1, + "gates": 3, + "sha256": "0d6489b0229eb9aadad07776d623c2e447ebddbf6f57a04d0ce479bb3255cf7f" + }, + { + "id": "full_turn_p_t1_0", + "family": "gate_conventions", + "params": { + "gate": "p", + "angle": "t:1/0" + }, + "reason": "A rotation by whole turns: the identity up to a sign, and the sign is the convention. Engines that lower it through a phase gate lose the sign; a global phase changes no outcome, and under a control it would.", + "expect": "exact_state", + "tier": "full", + "qubits": 1, + "gates": 3, + "sha256": "3e500fc97782f5d41e0324217dfb35acb3ff9fb18d02cfd6e402244dabaf3a2d" + }, + { + "id": "full_turn_rz_t2_0", + "family": "gate_conventions", + "params": { + "gate": "rz", + "angle": "t:2/0" + }, + "reason": "A rotation by whole turns: the identity up to a sign, and the sign is the convention. Engines that lower it through a phase gate lose the sign; a global phase changes no outcome, and under a control it would.", + "expect": "exact_state", + "tier": "full", + "qubits": 1, + "gates": 3, + "sha256": "09fa5069890177bf8b4f104520024759535f8eebad4e8870b004f47294282771" + }, + { + "id": "full_turn_u_t1_0", + "family": "gate_conventions", + "params": { + "gate": "u", + "angle": "t:1/0" + }, + "reason": "A rotation by whole turns: the identity up to a sign, and the sign is the convention. Engines that lower it through a phase gate lose the sign; a global phase changes no outcome, and under a control it would.", + "expect": "exact_state", + "tier": "full", + "qubits": 1, + "gates": 3, + "sha256": "6af19c78d282400323c6d62dd7d7fd5f12401449d57e4a85807e70a8a59b612c" + }, + { + "id": "gate_gphase_controlled", + "family": "gate_conventions", + "params": { + "gate": "ctrl @ gphase" + }, + "reason": "A global phase under a control is a relative phase, so no engine may drop it.", + "expect": "exact_state", + "tier": "full", + "qubits": 2, + "gates": 5, + "sha256": "128fbc34c560b278f9de1b4eb8251eda4f750c6ab7f287a523263af00bf017f2" + }, + { + "id": "controlled_rz_full_turn", + "family": "gate_conventions", + "params": { + "gate": "crz", + "angle": "1 turn" + }, + "reason": "crz by a full turn is diag(1, 1, -1, -1): the sign rz loses globally is here relative.", + "expect": "exact_state", + "tier": "ci", + "qubits": 2, + "gates": 3, + "sha256": "bb963fde5eba4902114a92cda166d3cfdce07872d7aa0b52aa4c7228675476df" + }, + { + "id": "teleport", + "family": "dynamic", + "params": { + "angle": "t:1/5" + }, + "reason": "Teleportation: Bell measurement, then corrections on classical bits. Qubit 2 must end as qubit 0 began, whatever the outcomes.", + "expect": "distribution", + "tier": "ci", + "qubits": 3, + "gates": 5, + "sha256": "b51249684603be332b55365391c76b841a0d99ff356f354d6bbb0f8fbef475cb" + }, + { + "id": "reset_after_superposition", + "family": "dynamic", + "params": {}, + "reason": "A reset of a qubit in superposition leaves |0> whatever it read, and leaves its Bell partner mixed.", + "expect": "distribution", + "tier": "ci", + "qubits": 2, + "gates": 2, + "sha256": "bde71ca7273cd4a14415bf3b981a88967beb919ea6905aefd07bbfb5a9f3ee8a" + }, + { + "id": "measure_twice", + "family": "dynamic", + "params": {}, + "reason": "A second measurement in the same basis repeats the first: 00 and 11 only.", + "expect": "distribution", + "tier": "full", + "qubits": 1, + "gates": 1, + "sha256": "dbe3fe87a6d6de2a6e22364a21287a24b3f9b7d5e4eb92baeabca67b43a1fc7b" + }, + { + "id": "feedback_flip", + "family": "dynamic", + "params": {}, + "reason": "Flip a measured 1 back: the second reading is always 0.", + "expect": "distribution", + "tier": "full", + "qubits": 1, + "gates": 1, + "sha256": "89cb3358513ac69bd7914cbc8d4af3e96ba31fca0b35d6548111a0c9ae7587ea" + }, + { + "id": "ghz_by_fusion", + "family": "dynamic", + "params": {}, + "reason": "A GHZ state made from two Bell pairs by a parity measurement and a correction: Clifford, with feedback, so a stabilizer engine must also get it.", + "expect": "distribution", + "tier": "full", + "qubits": 4, + "gates": 5, + "sha256": "2b3d02b64ff8fc7fe0b3d804471f7bedab1c5cdb3245fa4de84e568c22e34a07" + }, + { + "id": "repeat_until_success", + "family": "dynamic", + "params": { + "rounds": 3 + }, + "reason": "Three rounds of a non-Clifford trial with reset and a correction on what was read: the branches weigh differently, and the law is exact.", + "expect": "distribution", + "tier": "full", + "qubits": 2, + "gates": 21, + "sha256": "d0044b6e99f918586234275c0973526e0d40d6322fe9b62bcf395903595c726a" + }, + { + "id": "clifford_ghz_n100", + "family": "clifford_large", + "params": { + "n": 100 + }, + "reason": "A GHZ state across the whole register: sparse generators, past any state vector.", + "expect": "stabilizer", + "tier": "ci", + "qubits": 100, + "gates": 100, + "sha256": "179476ff167ff32f6192bae315a60f734f3d38fbb62258b52fc3bfa16a2a1172" + }, + { + "id": "clifford_ghz_n1000", + "family": "clifford_large", + "params": { + "n": 1000 + }, + "reason": "A GHZ state across the whole register: sparse generators, past any state vector.", + "expect": "stabilizer", + "tier": "full", + "qubits": 1000, + "gates": 1000, + "sha256": "b9168790108bf4c99e5b1498b138b00fc981bcea3ac5469606c975b41b757199" + }, + { + "id": "clifford_ghz_n5000", + "family": "clifford_large", + "params": { + "n": 5000 + }, + "reason": "A GHZ state across the whole register: sparse generators, past any state vector.", + "expect": "stabilizer", + "tier": "full", + "qubits": 5000, + "gates": 5000, + "sha256": "18061d8d2d75ae009b0cbbfb6f74de225888e8e7ca961fa214ceb0da671752ed" + }, + { + "id": "clifford_cluster_n65", + "family": "clifford_large", + "params": { + "n": 65 + }, + "reason": "A line cluster state: every generator X Z neighbours, with its signs flipped by a layer of Z.", + "expect": "stabilizer", + "tier": "full", + "qubits": 65, + "gates": 151, + "sha256": "8bbdea8f9f72d192b9438fef815c3a589aea2beecedf20d6429859409b529841" + }, + { + "id": "clifford_cluster_n1000", + "family": "clifford_large", + "params": { + "n": 1000 + }, + "reason": "A line cluster state: every generator X Z neighbours, with its signs flipped by a layer of Z.", + "expect": "stabilizer", + "tier": "full", + "qubits": 1000, + "gates": 2333, + "sha256": "28217b599d6d18f8bf2b499883dc994bbf2e5bcff473814d34d5df3c7cd8c35f" + }, + { + "id": "clifford_cluster_n5000", + "family": "clifford_large", + "params": { + "n": 5000 + }, + "reason": "A line cluster state: every generator X Z neighbours, with its signs flipped by a layer of Z.", + "expect": "stabilizer", + "tier": "full", + "qubits": 5000, + "gates": 11666, + "sha256": "98015fa3e487ea6e1f9fac217ff9e7dfd5053fbd8288ca0f586bfdef3064dfd4" + }, + { + "id": "clifford_random_n63", + "family": "clifford_large", + "params": { + "n": 63, + "depth": 12, + "seed": 31 + }, + "reason": "Random Clifford layers, with widths on and either side of a machine word: packing bugs live at those edges.", + "expect": "stabilizer", + "tier": "full", + "qubits": 63, + "gates": 892, + "sha256": "85e2860494ac571f288b299dc24c71ff8bf91000384c164f2a37c75ab23b461d" + }, + { + "id": "clifford_random_n64", + "family": "clifford_large", + "params": { + "n": 64, + "depth": 12, + "seed": 32 + }, + "reason": "Random Clifford layers, with widths on and either side of a machine word: packing bugs live at those edges.", + "expect": "stabilizer", + "tier": "full", + "qubits": 64, + "gates": 893, + "sha256": "c65f2c8f34c218d4e59d2b067a6f41cbce4d5c5e6cdf59ac252e74c98f26bc27" + }, + { + "id": "clifford_random_n65", + "family": "clifford_large", + "params": { + "n": 65, + "depth": 12, + "seed": 33 + }, + "reason": "Random Clifford layers, with widths on and either side of a machine word: packing bugs live at those edges.", + "expect": "stabilizer", + "tier": "ci", + "qubits": 65, + "gates": 896, + "sha256": "bafd82411962f45f78e4b0409a62abdb877fee38be5c9c55a2cf406e1f345374" + }, + { + "id": "clifford_random_n127", + "family": "clifford_large", + "params": { + "n": 127, + "depth": 12, + "seed": 34 + }, + "reason": "Random Clifford layers, with widths on and either side of a machine word: packing bugs live at those edges.", + "expect": "stabilizer", + "tier": "full", + "qubits": 127, + "gates": 1787, + "sha256": "a9d1f83e00dea420f33e8d7b4bd77621096d7b3c2bc0d7e912eb2974ead18c7f" + }, + { + "id": "clifford_random_n128", + "family": "clifford_large", + "params": { + "n": 128, + "depth": 12, + "seed": 35 + }, + "reason": "Random Clifford layers, with widths on and either side of a machine word: packing bugs live at those edges.", + "expect": "stabilizer", + "tier": "full", + "qubits": 128, + "gates": 1790, + "sha256": "913b37b9bc6dd3f9b0f00aa7999abae7be4a7e695aff6e4b152c24edd2bcaa07" + }, + { + "id": "clifford_random_n129", + "family": "clifford_large", + "params": { + "n": 129, + "depth": 12, + "seed": 36 + }, + "reason": "Random Clifford layers, with widths on and either side of a machine word: packing bugs live at those edges.", + "expect": "stabilizer", + "tier": "full", + "qubits": 129, + "gates": 1769, + "sha256": "bffbf930bf19b76d6edd8b434be45bc6b4fda88ec9f7d71ed508a254ca66d815" + }, + { + "id": "clifford_random_n1000", + "family": "clifford_large", + "params": { + "n": 1000, + "depth": 30, + "seed": 37 + }, + "reason": "Random Clifford layers, with widths on and either side of a machine word: packing bugs live at those edges.", + "expect": "stabilizer", + "tier": "full", + "qubits": 1000, + "gates": 35064, + "sha256": "fc149f341f34178ef71e7fbebd0386fbea8300254c30bc6cdc68e4daf4746461" + }, + { + "id": "clifford_random_n2000", + "family": "clifford_large", + "params": { + "n": 2000, + "depth": 20, + "seed": 38 + }, + "reason": "Random Clifford layers, with widths on and either side of a machine word: packing bugs live at those edges.", + "expect": "stabilizer", + "tier": "full", + "qubits": 2000, + "gates": 46739, + "sha256": "0b1a99492c4c93ce72afed789f251df049454e3ea38f4b449783b91bbef07236" + }, + { + "id": "clifford_random_n10_as_state", + "family": "clifford_large", + "params": { + "n": 10, + "depth": 30, + "seed": 39 + }, + "reason": "A Clifford circuit small enough for a state vector: the two formalisms must describe one state.", + "expect": "exact_state", + "tier": "full", + "qubits": 10, + "gates": 368, + "sha256": "3bb4576bf9a8bfd96c60295983c99f26f8c3e41538e7a2ac2a15d500795d2835" + }, + { + "id": "clifford_counts_n40", + "family": "clifford_large", + "params": { + "n": 40, + "depth": 8, + "seed": 40 + }, + "reason": "Sampling past the provider receipt's 22-qubit comparison: outcomes must lie in the affine space the stabilizers fix.", + "expect": "stabilizer_counts", + "tier": "full", + "qubits": 40, + "gates": 386, + "sha256": "b9b31a6404494f7f1fa898b0df28b101e103686df9a085b4010e6ac144789aeb" + }, + { + "id": "noise_depol1_x_chain_p0_01_k20", + "family": "noise", + "params": { + "channel": "depolarizing_1q", + "p": "0.01", + "gates": 20 + }, + "reason": "k X gates, each followed by a depolarizing channel: = (-1)^k (1 - 4p/3)^k exactly.", + "expect": "expectation", + "tier": "full", + "qubits": 1, + "gates": 20, + "sha256": "47ed308c102a6a486312b1e1c2a50f62db00fb6fdd1628e78a92cfe81021ebfe" + }, + { + "id": "noise_depol1_x_chain_p0_1_k7", + "family": "noise", + "params": { + "channel": "depolarizing_1q", + "p": "0.1", + "gates": 7 + }, + "reason": "k X gates, each followed by a depolarizing channel: = (-1)^k (1 - 4p/3)^k exactly.", + "expect": "expectation", + "tier": "full", + "qubits": 1, + "gates": 7, + "sha256": "7f1121fd951270119a6b4863c744e21466b59e7d61143531416e7a8958314320" + }, + { + "id": "noise_depol2_cx_chain", + "family": "noise", + "params": { + "channel": "depolarizing_2q", + "p": "0.02", + "gates": 9 + }, + "reason": "k cx gates, each followed by a two-qubit depolarizing channel: = (1 - 16p/15)^k exactly.", + "expect": "expectation", + "tier": "full", + "qubits": 2, + "gates": 9, + "sha256": "de63ebb7cc336f7c9c35ca31c8711aeed307f01ef624386abc544c8e673cf3c8" + }, + { + "id": "mps_ghz_n30", + "family": "wide_mps", + "params": { + "n": 30 + }, + "reason": "Bond dimension 2 at any width: the amplitudes of the two outcomes, in closed form.", + "expect": "amplitudes", + "tier": "ci", + "qubits": 30, + "gates": 30, + "sha256": "f8ff22e29d4aaee58b5586834db8f724ce78a28a2c5e5df3c0f54c7dc0ce08b2" + }, + { + "id": "mps_ghz_n50", + "family": "wide_mps", + "params": { + "n": 50 + }, + "reason": "Bond dimension 2 at any width: the amplitudes of the two outcomes, in closed form.", + "expect": "amplitudes", + "tier": "full", + "qubits": 50, + "gates": 50, + "sha256": "7cbb65512c08c1313d465b68ec4a8b899fc707fc35b3795bdf0342bdfa561077" + }, + { + "id": "mps_ghz_n100", + "family": "wide_mps", + "params": { + "n": 100 + }, + "reason": "Bond dimension 2 at any width: the amplitudes of the two outcomes, in closed form.", + "expect": "amplitudes", + "tier": "full", + "qubits": 100, + "gates": 100, + "sha256": "179476ff167ff32f6192bae315a60f734f3d38fbb62258b52fc3bfa16a2a1172" + }, + { + "id": "mps_qft_n30", + "family": "wide_mps", + "params": { + "n": 30, + "x": 715827883 + }, + "reason": "The QFT of a basis state is a product state, reached through modest entanglement. Chosen amplitudes in closed form.", + "expect": "amplitudes", + "tier": "full", + "qubits": 30, + "gates": 496, + "sha256": "a85588ba6e9133b1d19ff9cae05c2f1b599755e1738458a888eff79ec67079e1" + }, + { + "id": "mps_qft_n40", + "family": "wide_mps", + "params": { + "n": 40, + "x": 366503875925 + }, + "reason": "The QFT of a basis state is a product state, reached through modest entanglement. Chosen amplitudes in closed form.", + "expect": "amplitudes", + "tier": "full", + "qubits": 40, + "gates": 860, + "sha256": "acd8a1a61d5131a006b2fba9a3fd5eef79fcb6d407323fb32080d8c117b09b86" + }, + { + "id": "tn_shallow_n26", + "family": "wide_tn", + "params": { + "n": 26, + "depth": 5, + "seed": 41 + }, + "reason": "A shallow rotation brickwork: amplitudes by contraction, against matrix product states and a state vector.", + "expect": "wide_pairwise", + "tier": "full", + "qubits": 26, + "gates": 193, + "sha256": "7ec2245be70c8b715da6ebad8a0ad18613fe94b983b56c88515ddeb94e907180" + }, + { + "id": "tn_mirror_n40", + "family": "wide_tn", + "params": { + "n": 40, + "depth": 3, + "seed": 42 + }, + "reason": "A shallow mirror circuit, too wide for a state vector here: the amplitude of |0…0> is exactly 1.", + "expect": "wide_mirror", + "tier": "full", + "qubits": 40, + "gates": 358, + "sha256": "1289db3e2dfd19a53d9b5e3c109240a400d018c77601c6c61aad5840c4a15bea" + }, + { + "id": "surface_z_d3", + "family": "qec", + "params": { + "code": "surface_code:rotated_memory_z", + "distance": 3, + "rounds": 3, + "p": 0.001 + }, + "reason": "The rotated surface-code memory experiment in Z: the circuit decoders are measured on. The model must match mechanism by mechanism, and every detector's rate must follow it.", + "expect": "qec", + "tier": "ci", + "sha256": "e31b57f43f1026cc305c7c7a7b6c8f5932198c268a039bb680a3b36870f2f32b" + }, + { + "id": "surface_z_d5", + "family": "qec", + "params": { + "code": "surface_code:rotated_memory_z", + "distance": 5, + "rounds": 5, + "p": 0.001 + }, + "reason": "The rotated surface-code memory experiment in Z: the circuit decoders are measured on. The model must match mechanism by mechanism, and every detector's rate must follow it.", + "expect": "qec", + "tier": "full", + "sha256": "f81a6b91ee38809f4c7483e06e438ce28e7b06e72d038767d68470c8eb50dc37" + }, + { + "id": "surface_z_d7", + "family": "qec", + "params": { + "code": "surface_code:rotated_memory_z", + "distance": 7, + "rounds": 7, + "p": 0.001 + }, + "reason": "The rotated surface-code memory experiment in Z: the circuit decoders are measured on. The model must match mechanism by mechanism, and every detector's rate must follow it.", + "expect": "qec", + "tier": "full", + "sha256": "30d1940101d70e05a63f0d2f877756ffaeaba7e8e17e94cd2ea40fce04b99583" + }, + { + "id": "surface_z_d9", + "family": "qec", + "params": { + "code": "surface_code:rotated_memory_z", + "distance": 9, + "rounds": 9, + "p": 0.001 + }, + "reason": "The rotated surface-code memory experiment in Z: the circuit decoders are measured on. The model must match mechanism by mechanism, and every detector's rate must follow it.", + "expect": "qec", + "tier": "full", + "sha256": "8d93c8ab2ad82edcf7850981dee62a4de88cfe58782d86e68fe1eaeb6b8d777c" + }, + { + "id": "surface_z_d11", + "family": "qec", + "params": { + "code": "surface_code:rotated_memory_z", + "distance": 11, + "rounds": 11, + "p": 0.001 + }, + "reason": "The rotated surface-code memory experiment in Z: the circuit decoders are measured on. The model must match mechanism by mechanism, and every detector's rate must follow it.", + "expect": "qec", + "tier": "full", + "sha256": "28123360f8cac8aeb950fa903804b9fc005f2bde346f4f3c6ae74b031ea8fa6e" + }, + { + "id": "surface_z_d15", + "family": "qec", + "params": { + "code": "surface_code:rotated_memory_z", + "distance": 15, + "rounds": 15, + "p": 0.001 + }, + "reason": "The rotated surface-code memory experiment in Z: the circuit decoders are measured on. The model must match mechanism by mechanism, and every detector's rate must follow it.", + "expect": "qec", + "tier": "full", + "sha256": "f75ecabba13814b9da92bd89e6e71ce332c6a9b6a93983825dd141f222c17e59" + }, + { + "id": "surface_x_d3", + "family": "qec", + "params": { + "code": "surface_code:rotated_memory_x", + "distance": 3, + "rounds": 3, + "p": 0.001 + }, + "reason": "The same in the X basis: resets and measurements in X.", + "expect": "qec", + "tier": "full", + "sha256": "c31c3aec8676349f2380baed8b09276a9dc38d9bde15dcae3c1833ef27458ea9" + }, + { + "id": "surface_x_d5", + "family": "qec", + "params": { + "code": "surface_code:rotated_memory_x", + "distance": 5, + "rounds": 5, + "p": 0.001 + }, + "reason": "The same in the X basis: resets and measurements in X.", + "expect": "qec", + "tier": "full", + "sha256": "867ba3ba1f432111269cc6f7cfdcd9449c6935a9f9f3820e89348e74bb1e8207" + }, + { + "id": "surface_x_d7", + "family": "qec", + "params": { + "code": "surface_code:rotated_memory_x", + "distance": 7, + "rounds": 7, + "p": 0.001 + }, + "reason": "The same in the X basis: resets and measurements in X.", + "expect": "qec", + "tier": "full", + "sha256": "378879e0ca7737bcfc8e4faf890e3382926cb8d964f45b317526d3ae3e9e191a" + }, + { + "id": "unrotated_z_d3", + "family": "qec", + "params": { + "code": "surface_code:unrotated_memory_z", + "distance": 3, + "rounds": 3, + "p": 0.002 + }, + "reason": "The unrotated layout: another gate order, and detectors with other coordinates.", + "expect": "qec", + "tier": "full", + "sha256": "1c2b7723393362879383916a10f8c57f17ef83ea8d10760ed02b248b5891a647" + }, + { + "id": "unrotated_z_d5", + "family": "qec", + "params": { + "code": "surface_code:unrotated_memory_z", + "distance": 5, + "rounds": 5, + "p": 0.002 + }, + "reason": "The unrotated layout: another gate order, and detectors with other coordinates.", + "expect": "qec", + "tier": "full", + "sha256": "e26b28cac438ce337f7a94d963c1f7c94f7290a3f282d742c9cb2e43c8d0f9b2" + }, + { + "id": "repetition_d3", + "family": "qec", + "params": { + "code": "repetition_code:memory", + "distance": 3, + "rounds": 3, + "p": 0.005 + }, + "reason": "A line of data qubits: the simplest model, with long detector chains at d = 25.", + "expect": "qec", + "tier": "full", + "sha256": "a0ba772c05b244340fb16789febfe05d981823ac17ee3a78e3da8fb07ec61e02" + }, + { + "id": "repetition_d9", + "family": "qec", + "params": { + "code": "repetition_code:memory", + "distance": 9, + "rounds": 9, + "p": 0.005 + }, + "reason": "A line of data qubits: the simplest model, with long detector chains at d = 25.", + "expect": "qec", + "tier": "full", + "sha256": "c5cb3a38ea7fa26259704c470498ef2cd9b597c0f4904fbd325c1e60d6e5f0de" + }, + { + "id": "repetition_d25", + "family": "qec", + "params": { + "code": "repetition_code:memory", + "distance": 25, + "rounds": 25, + "p": 0.005 + }, + "reason": "A line of data qubits: the simplest model, with long detector chains at d = 25.", + "expect": "qec", + "tier": "full", + "sha256": "7b15c3a17b2b22080314c6981e596e709d21fcc995015efc8d7c18143407ce83" + }, + { + "id": "surface_z_d5_noiseless", + "family": "qec", + "params": { + "code": "surface_code:rotated_memory_z", + "distance": 5, + "rounds": 5, + "p": 0.0 + }, + "reason": "No noise at all: every detector and the observable are silent on every shot, and the model is empty.", + "expect": "qec", + "tier": "ci", + "sha256": "88abf88817c5999a8e2e5428c5cfa94cbd165381dc683d214b69ddcc756e7dcb" + }, + { + "id": "color_d3", + "family": "qec", + "params": { + "code": "color_code:memory_xyz", + "distance": 3, + "rounds": 3, + "p": 0.002 + }, + "reason": "A colour code with C_XYZ gates: an instruction the frame simulator does not implement must be refused with its line, never skipped.", + "expect": "qec", + "tier": "full", + "sha256": "bcda6739a090378385999ac51a2a66e2cfcee038796f1e12e9b8efcd9c33f75c" + } + ] +} diff --git a/wai/quantum-cross-simulator/corpus/qasm/below_grid_k33.qasm b/wai/quantum-cross-simulator/corpus/qasm/below_grid_k33.qasm new file mode 100644 index 000000000..d23612400 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/below_grid_k33.qasm @@ -0,0 +1,6 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +h q[0]; +p(pi/4294967296) q[0]; +h q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/below_grid_k40.qasm b/wai/quantum-cross-simulator/corpus/qasm/below_grid_k40.qasm new file mode 100644 index 000000000..88e9809a8 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/below_grid_k40.qasm @@ -0,0 +1,6 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +h q[0]; +p(pi/549755813888) q[0]; +h q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/below_grid_k47.qasm b/wai/quantum-cross-simulator/corpus/qasm/below_grid_k47.qasm new file mode 100644 index 000000000..70e569b4a --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/below_grid_k47.qasm @@ -0,0 +1,6 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +h q[0]; +p(pi/70368744177664) q[0]; +h q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/below_grid_k48.qasm b/wai/quantum-cross-simulator/corpus/qasm/below_grid_k48.qasm new file mode 100644 index 000000000..ca0e7aa93 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/below_grid_k48.qasm @@ -0,0 +1,6 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +h q[0]; +p(pi/140737488355328) q[0]; +h q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/below_grid_k52.qasm b/wai/quantum-cross-simulator/corpus/qasm/below_grid_k52.qasm new file mode 100644 index 000000000..b1a9c5712 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/below_grid_k52.qasm @@ -0,0 +1,6 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +h q[0]; +p(pi/2251799813685248) q[0]; +h q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/below_grid_k60.qasm b/wai/quantum-cross-simulator/corpus/qasm/below_grid_k60.qasm new file mode 100644 index 000000000..1bd6e638b --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/below_grid_k60.qasm @@ -0,0 +1,6 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +h q[0]; +p(pi/576460752303423488) q[0]; +h q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/bit_order_control.qasm b/wai/quantum-cross-simulator/corpus/qasm/bit_order_control.qasm new file mode 100644 index 000000000..d9d839aec --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/bit_order_control.qasm @@ -0,0 +1,5 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[4] q; +x q[0]; +cx q[0], q[3]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/bit_order_named_bits.qasm b/wai/quantum-cross-simulator/corpus/qasm/bit_order_named_bits.qasm new file mode 100644 index 000000000..71ff5b813 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/bit_order_named_bits.qasm @@ -0,0 +1,7 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[2] q; +bit[2] c; +x q[1]; +c[0] = measure q[1]; +c[1] = measure q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/bit_order_product.qasm b/wai/quantum-cross-simulator/corpus/qasm/bit_order_product.qasm new file mode 100644 index 000000000..0c9168e62 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/bit_order_product.qasm @@ -0,0 +1,15 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[6] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +ry(pi/16) q[1]; +rz(pi*3/64) q[1]; +ry(pi/32) q[2]; +rz(pi*3/128) q[2]; +ry(pi/64) q[3]; +rz(pi*3/256) q[3]; +ry(pi/128) q[4]; +rz(pi*3/512) q[4]; +ry(pi/256) q[5]; +rz(pi*3/1024) q[5]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/bit_order_x_high.qasm b/wai/quantum-cross-simulator/corpus/qasm/bit_order_x_high.qasm new file mode 100644 index 000000000..06ef3eb8a --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/bit_order_x_high.qasm @@ -0,0 +1,4 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[5] q; +x q[4]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/bit_order_x_low.qasm b/wai/quantum-cross-simulator/corpus/qasm/bit_order_x_low.qasm new file mode 100644 index 000000000..48ec74461 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/bit_order_x_low.qasm @@ -0,0 +1,4 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[5] q; +x q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/clifford_cluster_n65.qasm b/wai/quantum-cross-simulator/corpus/qasm/clifford_cluster_n65.qasm new file mode 100644 index 000000000..5d5cc24d5 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/clifford_cluster_n65.qasm @@ -0,0 +1,154 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[65] q; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +h q[10]; +h q[11]; +h q[12]; +h q[13]; +h q[14]; +h q[15]; +h q[16]; +h q[17]; +h q[18]; +h q[19]; +h q[20]; +h q[21]; +h q[22]; +h q[23]; +h q[24]; +h q[25]; +h q[26]; +h q[27]; +h q[28]; +h q[29]; +h q[30]; +h q[31]; +h q[32]; +h q[33]; +h q[34]; +h q[35]; +h q[36]; +h q[37]; +h q[38]; +h q[39]; +h q[40]; +h q[41]; +h q[42]; +h q[43]; +h q[44]; +h q[45]; +h q[46]; +h q[47]; +h q[48]; +h q[49]; +h q[50]; +h q[51]; +h q[52]; +h q[53]; +h q[54]; +h q[55]; +h q[56]; +h q[57]; +h q[58]; +h q[59]; +h q[60]; +h q[61]; +h q[62]; +h q[63]; +h q[64]; +cz q[0], q[1]; +cz q[1], q[2]; +cz q[2], q[3]; +cz q[3], q[4]; +cz q[4], q[5]; +cz q[5], q[6]; +cz q[6], q[7]; +cz q[7], q[8]; +cz q[8], q[9]; +cz q[9], q[10]; +cz q[10], q[11]; +cz q[11], q[12]; +cz q[12], q[13]; +cz q[13], q[14]; +cz q[14], q[15]; +cz q[15], q[16]; +cz q[16], q[17]; +cz q[17], q[18]; +cz q[18], q[19]; +cz q[19], q[20]; +cz q[20], q[21]; +cz q[21], q[22]; +cz q[22], q[23]; +cz q[23], q[24]; +cz q[24], q[25]; +cz q[25], q[26]; +cz q[26], q[27]; +cz q[27], q[28]; +cz q[28], q[29]; +cz q[29], q[30]; +cz q[30], q[31]; +cz q[31], q[32]; +cz q[32], q[33]; +cz q[33], q[34]; +cz q[34], q[35]; +cz q[35], q[36]; +cz q[36], q[37]; +cz q[37], q[38]; +cz q[38], q[39]; +cz q[39], q[40]; +cz q[40], q[41]; +cz q[41], q[42]; +cz q[42], q[43]; +cz q[43], q[44]; +cz q[44], q[45]; +cz q[45], q[46]; +cz q[46], q[47]; +cz q[47], q[48]; +cz q[48], q[49]; +cz q[49], q[50]; +cz q[50], q[51]; +cz q[51], q[52]; +cz q[52], q[53]; +cz q[53], q[54]; +cz q[54], q[55]; +cz q[55], q[56]; +cz q[56], q[57]; +cz q[57], q[58]; +cz q[58], q[59]; +cz q[59], q[60]; +cz q[60], q[61]; +cz q[61], q[62]; +cz q[62], q[63]; +cz q[63], q[64]; +z q[0]; +z q[3]; +z q[6]; +z q[9]; +z q[12]; +z q[15]; +z q[18]; +z q[21]; +z q[24]; +z q[27]; +z q[30]; +z q[33]; +z q[36]; +z q[39]; +z q[42]; +z q[45]; +z q[48]; +z q[51]; +z q[54]; +z q[57]; +z q[60]; +z q[63]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/clifford_counts_n40.qasm b/wai/quantum-cross-simulator/corpus/qasm/clifford_counts_n40.qasm new file mode 100644 index 000000000..52fa8b0ce --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/clifford_counts_n40.qasm @@ -0,0 +1,430 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[40] q; +bit[40] c; +h q[0]; +x q[2]; +sx q[4]; +sdg q[9]; +h q[10]; +z q[11]; +x q[12]; +y q[13]; +z q[14]; +z q[15]; +s q[16]; +sdg q[17]; +s q[18]; +x q[20]; +x q[22]; +sx q[23]; +z q[25]; +s q[26]; +y q[27]; +y q[29]; +y q[30]; +z q[32]; +x q[34]; +x q[35]; +s q[36]; +z q[37]; +y q[38]; +cz q[37], q[18]; +cz q[13], q[26]; +cx q[36], q[4]; +cz q[1], q[25]; +cz q[6], q[14]; +cz q[11], q[3]; +cz q[7], q[10]; +cz q[15], q[29]; +cx q[2], q[34]; +cz q[24], q[21]; +cx q[33], q[19]; +cz q[17], q[27]; +cz q[23], q[22]; +cx q[39], q[30]; +cz q[5], q[38]; +cx q[9], q[0]; +cx q[20], q[31]; +cz q[28], q[16]; +cz q[32], q[35]; +cx q[8], q[12]; +y q[2]; +z q[4]; +sdg q[5]; +sdg q[6]; +y q[7]; +sdg q[8]; +s q[10]; +s q[11]; +sdg q[13]; +x q[15]; +y q[17]; +sx q[18]; +h q[20]; +s q[22]; +s q[24]; +s q[25]; +z q[26]; +z q[30]; +sx q[31]; +y q[32]; +y q[33]; +x q[34]; +sx q[37]; +y q[38]; +sx q[39]; +cx q[38], q[37]; +cx q[2], q[33]; +cz q[0], q[21]; +cz q[17], q[35]; +cz q[18], q[32]; +cx q[6], q[14]; +cx q[12], q[23]; +cx q[34], q[5]; +cx q[39], q[36]; +cx q[19], q[13]; +cz q[24], q[3]; +cz q[10], q[26]; +cx q[31], q[28]; +cx q[30], q[15]; +cx q[29], q[22]; +cx q[25], q[7]; +cx q[20], q[27]; +cx q[11], q[16]; +cz q[1], q[9]; +cz q[4], q[8]; +y q[1]; +sdg q[2]; +y q[3]; +s q[6]; +x q[7]; +sdg q[9]; +y q[11]; +sdg q[12]; +y q[13]; +y q[14]; +s q[15]; +sx q[16]; +x q[17]; +y q[20]; +y q[21]; +s q[22]; +z q[23]; +h q[24]; +x q[27]; +z q[28]; +sdg q[29]; +s q[30]; +s q[31]; +h q[32]; +sx q[33]; +s q[34]; +z q[35]; +z q[36]; +h q[38]; +cz q[2], q[7]; +cz q[39], q[10]; +cx q[14], q[17]; +cx q[0], q[30]; +cz q[31], q[16]; +cz q[1], q[8]; +cx q[22], q[36]; +cx q[19], q[5]; +cz q[35], q[33]; +cx q[25], q[20]; +cx q[11], q[12]; +cz q[15], q[9]; +cz q[3], q[32]; +cz q[27], q[38]; +cz q[21], q[4]; +cz q[34], q[26]; +cx q[18], q[24]; +cx q[37], q[6]; +cz q[13], q[28]; +cx q[23], q[29]; +x q[0]; +z q[1]; +sdg q[2]; +s q[3]; +y q[4]; +x q[5]; +h q[7]; +z q[8]; +sdg q[9]; +y q[10]; +s q[11]; +h q[12]; +z q[13]; +s q[15]; +y q[16]; +sdg q[17]; +y q[18]; +h q[20]; +y q[21]; +s q[23]; +sdg q[24]; +sx q[30]; +h q[31]; +s q[32]; +y q[34]; +sdg q[35]; +sdg q[36]; +y q[37]; +h q[38]; +h q[39]; +cx q[23], q[1]; +cx q[18], q[9]; +cx q[16], q[26]; +cx q[30], q[7]; +cz q[27], q[36]; +cz q[25], q[13]; +cz q[33], q[8]; +cx q[32], q[20]; +cx q[5], q[29]; +cz q[11], q[38]; +cz q[2], q[39]; +cz q[6], q[0]; +cz q[15], q[28]; +cz q[4], q[17]; +cz q[24], q[22]; +cz q[14], q[12]; +cz q[35], q[34]; +cz q[37], q[31]; +cz q[21], q[19]; +cx q[3], q[10]; +h q[0]; +x q[3]; +z q[4]; +sdg q[5]; +sx q[6]; +x q[8]; +s q[10]; +sx q[11]; +z q[12]; +h q[14]; +x q[16]; +sx q[17]; +x q[18]; +h q[19]; +y q[20]; +s q[21]; +sx q[22]; +y q[24]; +h q[25]; +h q[26]; +z q[27]; +sdg q[29]; +x q[30]; +sdg q[31]; +y q[33]; +x q[36]; +h q[37]; +h q[38]; +y q[39]; +cx q[27], q[21]; +cz q[13], q[20]; +cz q[1], q[34]; +cx q[12], q[7]; +cx q[31], q[23]; +cz q[19], q[35]; +cx q[16], q[8]; +cz q[37], q[9]; +cx q[0], q[22]; +cx q[4], q[36]; +cx q[18], q[17]; +cz q[11], q[32]; +cz q[24], q[28]; +cz q[6], q[39]; +cz q[5], q[2]; +cz q[33], q[30]; +cx q[14], q[29]; +cz q[3], q[15]; +cz q[38], q[10]; +cz q[25], q[26]; +x q[0]; +sx q[2]; +z q[3]; +sx q[5]; +z q[7]; +x q[8]; +z q[9]; +sx q[10]; +y q[11]; +sx q[12]; +h q[13]; +z q[14]; +y q[15]; +sx q[16]; +y q[17]; +h q[18]; +sx q[19]; +sdg q[20]; +y q[21]; +z q[23]; +sdg q[27]; +s q[28]; +sx q[29]; +s q[30]; +s q[31]; +h q[33]; +sx q[34]; +sdg q[35]; +sdg q[36]; +sx q[37]; +z q[39]; +cz q[4], q[19]; +cz q[30], q[32]; +cz q[39], q[33]; +cz q[8], q[15]; +cx q[31], q[6]; +cz q[29], q[3]; +cz q[7], q[1]; +cz q[35], q[26]; +cz q[36], q[14]; +cz q[21], q[12]; +cx q[0], q[11]; +cz q[9], q[18]; +cz q[25], q[5]; +cz q[13], q[22]; +cx q[28], q[17]; +cz q[20], q[10]; +cz q[27], q[23]; +cz q[24], q[38]; +cz q[34], q[16]; +cx q[37], q[2]; +h q[3]; +h q[4]; +sdg q[6]; +s q[7]; +s q[8]; +h q[9]; +s q[11]; +sx q[12]; +sx q[13]; +h q[14]; +s q[15]; +h q[16]; +sx q[17]; +h q[19]; +y q[20]; +z q[21]; +sdg q[23]; +z q[25]; +z q[26]; +x q[27]; +sx q[28]; +x q[29]; +sdg q[30]; +x q[31]; +z q[32]; +x q[33]; +z q[34]; +h q[36]; +sx q[39]; +cz q[3], q[14]; +cx q[33], q[34]; +cz q[26], q[12]; +cx q[32], q[9]; +cx q[8], q[20]; +cz q[38], q[25]; +cz q[39], q[4]; +cx q[30], q[37]; +cx q[5], q[35]; +cz q[10], q[22]; +cz q[31], q[28]; +cz q[6], q[29]; +cx q[18], q[16]; +cx q[36], q[11]; +cx q[23], q[21]; +cx q[13], q[1]; +cz q[19], q[15]; +cz q[24], q[2]; +cx q[17], q[27]; +cx q[0], q[7]; +z q[0]; +s q[1]; +z q[2]; +z q[8]; +y q[9]; +z q[10]; +x q[12]; +y q[13]; +s q[14]; +z q[15]; +s q[16]; +y q[18]; +h q[19]; +y q[20]; +s q[24]; +x q[25]; +sx q[26]; +x q[27]; +s q[28]; +s q[29]; +s q[30]; +sx q[32]; +sx q[33]; +z q[35]; +s q[37]; +h q[38]; +cx q[29], q[32]; +cz q[11], q[0]; +cz q[35], q[36]; +cx q[37], q[17]; +cz q[33], q[2]; +cx q[5], q[12]; +cz q[13], q[26]; +cx q[7], q[38]; +cx q[3], q[1]; +cz q[22], q[21]; +cx q[10], q[31]; +cx q[9], q[14]; +cx q[34], q[30]; +cz q[18], q[25]; +cx q[28], q[27]; +cx q[24], q[39]; +cx q[23], q[8]; +cz q[4], q[6]; +cz q[15], q[16]; +cx q[19], q[20]; +c[0] = measure q[0]; +c[1] = measure q[1]; +c[2] = measure q[2]; +c[3] = measure q[3]; +c[4] = measure q[4]; +c[5] = measure q[5]; +c[6] = measure q[6]; +c[7] = measure q[7]; +c[8] = measure q[8]; +c[9] = measure q[9]; +c[10] = measure q[10]; +c[11] = measure q[11]; +c[12] = measure q[12]; +c[13] = measure q[13]; +c[14] = measure q[14]; +c[15] = measure q[15]; +c[16] = measure q[16]; +c[17] = measure q[17]; +c[18] = measure q[18]; +c[19] = measure q[19]; +c[20] = measure q[20]; +c[21] = measure q[21]; +c[22] = measure q[22]; +c[23] = measure q[23]; +c[24] = measure q[24]; +c[25] = measure q[25]; +c[26] = measure q[26]; +c[27] = measure q[27]; +c[28] = measure q[28]; +c[29] = measure q[29]; +c[30] = measure q[30]; +c[31] = measure q[31]; +c[32] = measure q[32]; +c[33] = measure q[33]; +c[34] = measure q[34]; +c[35] = measure q[35]; +c[36] = measure q[36]; +c[37] = measure q[37]; +c[38] = measure q[38]; +c[39] = measure q[39]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/clifford_ghz_n100.qasm b/wai/quantum-cross-simulator/corpus/qasm/clifford_ghz_n100.qasm new file mode 100644 index 000000000..76b660e51 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/clifford_ghz_n100.qasm @@ -0,0 +1,103 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[100] q; +h q[0]; +cx q[0], q[1]; +cx q[1], q[2]; +cx q[2], q[3]; +cx q[3], q[4]; +cx q[4], q[5]; +cx q[5], q[6]; +cx q[6], q[7]; +cx q[7], q[8]; +cx q[8], q[9]; +cx q[9], q[10]; +cx q[10], q[11]; +cx q[11], q[12]; +cx q[12], q[13]; +cx q[13], q[14]; +cx q[14], q[15]; +cx q[15], q[16]; +cx q[16], q[17]; +cx q[17], q[18]; +cx q[18], q[19]; +cx q[19], q[20]; +cx q[20], q[21]; +cx q[21], q[22]; +cx q[22], q[23]; +cx q[23], q[24]; +cx q[24], q[25]; +cx q[25], q[26]; +cx q[26], q[27]; +cx q[27], q[28]; +cx q[28], q[29]; +cx q[29], q[30]; +cx q[30], q[31]; +cx q[31], q[32]; +cx q[32], q[33]; +cx q[33], q[34]; +cx q[34], q[35]; +cx q[35], q[36]; +cx q[36], q[37]; +cx q[37], q[38]; +cx q[38], q[39]; +cx q[39], q[40]; +cx q[40], q[41]; +cx q[41], q[42]; +cx q[42], q[43]; +cx q[43], q[44]; +cx q[44], q[45]; +cx q[45], q[46]; +cx q[46], q[47]; +cx q[47], q[48]; +cx q[48], q[49]; +cx q[49], q[50]; +cx q[50], q[51]; +cx q[51], q[52]; +cx q[52], q[53]; +cx q[53], q[54]; +cx q[54], q[55]; +cx q[55], q[56]; +cx q[56], q[57]; +cx q[57], q[58]; +cx q[58], q[59]; +cx q[59], q[60]; +cx q[60], q[61]; +cx q[61], q[62]; +cx q[62], q[63]; +cx q[63], q[64]; +cx q[64], q[65]; +cx q[65], q[66]; +cx q[66], q[67]; +cx q[67], q[68]; +cx q[68], q[69]; +cx q[69], q[70]; +cx q[70], q[71]; +cx q[71], q[72]; +cx q[72], q[73]; +cx q[73], q[74]; +cx q[74], q[75]; +cx q[75], q[76]; +cx q[76], q[77]; +cx q[77], q[78]; +cx q[78], q[79]; +cx q[79], q[80]; +cx q[80], q[81]; +cx q[81], q[82]; +cx q[82], q[83]; +cx q[83], q[84]; +cx q[84], q[85]; +cx q[85], q[86]; +cx q[86], q[87]; +cx q[87], q[88]; +cx q[88], q[89]; +cx q[89], q[90]; +cx q[90], q[91]; +cx q[91], q[92]; +cx q[92], q[93]; +cx q[93], q[94]; +cx q[94], q[95]; +cx q[95], q[96]; +cx q[96], q[97]; +cx q[97], q[98]; +cx q[98], q[99]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/clifford_random_n10_as_state.qasm b/wai/quantum-cross-simulator/corpus/qasm/clifford_random_n10_as_state.qasm new file mode 100644 index 000000000..4d1fe2fc1 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/clifford_random_n10_as_state.qasm @@ -0,0 +1,371 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[10] q; +h q[2]; +z q[3]; +sdg q[5]; +sdg q[6]; +sdg q[7]; +h q[9]; +cz q[5], q[3]; +cx q[2], q[9]; +cz q[0], q[1]; +cx q[7], q[8]; +cx q[4], q[6]; +z q[1]; +s q[2]; +h q[3]; +z q[4]; +y q[5]; +y q[6]; +s q[8]; +z q[9]; +cx q[6], q[3]; +cx q[7], q[8]; +cz q[1], q[4]; +cx q[5], q[0]; +cz q[9], q[2]; +y q[2]; +x q[3]; +y q[5]; +z q[6]; +sx q[7]; +y q[8]; +z q[9]; +cx q[4], q[0]; +cz q[9], q[7]; +cx q[6], q[8]; +cz q[3], q[1]; +cx q[5], q[2]; +sx q[0]; +y q[2]; +sx q[4]; +z q[6]; +sx q[7]; +x q[8]; +z q[9]; +cz q[9], q[4]; +cz q[2], q[8]; +cx q[1], q[3]; +cx q[7], q[5]; +cx q[0], q[6]; +z q[1]; +sx q[2]; +y q[5]; +z q[7]; +sdg q[8]; +cz q[8], q[2]; +cz q[5], q[7]; +cz q[0], q[1]; +cz q[3], q[4]; +cx q[9], q[6]; +z q[0]; +h q[3]; +sdg q[5]; +h q[6]; +sx q[8]; +sx q[9]; +cz q[9], q[8]; +cz q[2], q[4]; +cz q[1], q[0]; +cx q[7], q[6]; +cz q[5], q[3]; +h q[0]; +sdg q[1]; +x q[3]; +h q[4]; +x q[5]; +z q[6]; +s q[7]; +y q[8]; +z q[9]; +cx q[4], q[6]; +cz q[1], q[0]; +cx q[2], q[9]; +cz q[7], q[5]; +cx q[8], q[3]; +s q[0]; +h q[1]; +sdg q[2]; +sdg q[3]; +z q[5]; +x q[8]; +s q[9]; +cx q[8], q[9]; +cx q[2], q[3]; +cz q[7], q[6]; +cx q[1], q[0]; +cz q[4], q[5]; +sdg q[0]; +h q[1]; +h q[3]; +z q[4]; +h q[5]; +s q[6]; +sdg q[7]; +sx q[8]; +x q[9]; +cx q[7], q[1]; +cx q[5], q[4]; +cx q[9], q[6]; +cx q[2], q[3]; +cx q[0], q[8]; +y q[0]; +z q[2]; +y q[3]; +sdg q[5]; +sx q[6]; +s q[8]; +y q[9]; +cz q[6], q[5]; +cx q[4], q[2]; +cx q[3], q[0]; +cx q[7], q[1]; +cz q[8], q[9]; +x q[1]; +sdg q[2]; +s q[3]; +s q[4]; +sdg q[5]; +h q[6]; +z q[7]; +s q[8]; +h q[9]; +cx q[8], q[7]; +cx q[9], q[5]; +cx q[6], q[4]; +cz q[2], q[1]; +cx q[0], q[3]; +z q[0]; +sdg q[2]; +h q[7]; +x q[8]; +y q[9]; +cz q[9], q[1]; +cz q[4], q[3]; +cx q[7], q[0]; +cx q[6], q[8]; +cx q[5], q[2]; +sdg q[0]; +x q[1]; +h q[2]; +s q[3]; +h q[4]; +x q[5]; +x q[6]; +x q[7]; +h q[8]; +cx q[0], q[3]; +cx q[7], q[5]; +cz q[6], q[2]; +cz q[9], q[1]; +cz q[8], q[4]; +sx q[1]; +sx q[2]; +sx q[3]; +x q[4]; +z q[6]; +s q[8]; +y q[9]; +cz q[5], q[2]; +cx q[9], q[1]; +cx q[4], q[8]; +cz q[3], q[0]; +cz q[7], q[6]; +z q[0]; +sx q[1]; +x q[2]; +h q[6]; +y q[7]; +x q[9]; +cz q[6], q[1]; +cz q[8], q[2]; +cx q[5], q[7]; +cx q[9], q[3]; +cz q[4], q[0]; +x q[0]; +sdg q[1]; +z q[3]; +x q[5]; +z q[6]; +s q[7]; +s q[8]; +h q[9]; +cz q[8], q[7]; +cx q[1], q[4]; +cz q[5], q[0]; +cz q[2], q[3]; +cz q[6], q[9]; +x q[0]; +z q[2]; +z q[3]; +s q[4]; +y q[5]; +sx q[6]; +sdg q[7]; +z q[8]; +sx q[9]; +cz q[8], q[0]; +cx q[4], q[1]; +cz q[6], q[3]; +cx q[7], q[9]; +cz q[5], q[2]; +z q[0]; +sx q[1]; +s q[2]; +h q[3]; +z q[6]; +y q[7]; +cz q[9], q[6]; +cz q[1], q[8]; +cx q[2], q[3]; +cz q[0], q[4]; +cz q[7], q[5]; +x q[1]; +h q[2]; +sx q[3]; +y q[4]; +sdg q[5]; +x q[6]; +z q[7]; +sdg q[8]; +sx q[9]; +cz q[2], q[9]; +cz q[4], q[6]; +cx q[3], q[7]; +cx q[1], q[5]; +cx q[8], q[0]; +y q[0]; +y q[3]; +z q[4]; +x q[5]; +z q[6]; +sx q[7]; +s q[8]; +y q[9]; +cz q[3], q[4]; +cz q[9], q[0]; +cz q[1], q[6]; +cx q[8], q[7]; +cx q[5], q[2]; +s q[0]; +sdg q[1]; +sx q[2]; +sdg q[3]; +sx q[4]; +z q[5]; +y q[6]; +sdg q[7]; +cz q[6], q[7]; +cz q[9], q[5]; +cx q[2], q[4]; +cz q[8], q[3]; +cz q[0], q[1]; +s q[0]; +z q[2]; +x q[4]; +y q[5]; +s q[6]; +h q[7]; +sdg q[8]; +h q[9]; +cz q[5], q[4]; +cx q[8], q[1]; +cx q[3], q[7]; +cz q[9], q[0]; +cz q[2], q[6]; +h q[3]; +y q[7]; +x q[8]; +sx q[9]; +cx q[3], q[4]; +cz q[5], q[1]; +cz q[8], q[9]; +cz q[0], q[7]; +cx q[6], q[2]; +x q[2]; +y q[3]; +y q[6]; +z q[7]; +z q[8]; +sx q[9]; +cx q[2], q[8]; +cz q[7], q[0]; +cz q[6], q[1]; +cx q[9], q[5]; +cz q[3], q[4]; +x q[0]; +y q[1]; +y q[2]; +sx q[3]; +x q[4]; +sx q[5]; +sdg q[6]; +s q[7]; +cz q[5], q[6]; +cx q[1], q[2]; +cz q[3], q[8]; +cz q[0], q[4]; +cz q[7], q[9]; +z q[0]; +sx q[1]; +x q[2]; +z q[4]; +h q[5]; +h q[6]; +h q[8]; +sx q[9]; +cx q[6], q[2]; +cz q[9], q[0]; +cz q[5], q[7]; +cx q[8], q[4]; +cx q[1], q[3]; +x q[0]; +sx q[1]; +s q[2]; +s q[3]; +z q[4]; +sx q[6]; +sdg q[8]; +z q[9]; +cz q[7], q[0]; +cz q[6], q[3]; +cz q[1], q[4]; +cz q[8], q[9]; +cx q[2], q[5]; +h q[1]; +sx q[2]; +x q[3]; +h q[4]; +sx q[7]; +sdg q[8]; +s q[9]; +cx q[8], q[4]; +cx q[9], q[0]; +cx q[2], q[5]; +cz q[1], q[6]; +cz q[7], q[3]; +z q[0]; +z q[2]; +z q[3]; +z q[4]; +x q[5]; +x q[6]; +x q[7]; +sx q[9]; +cx q[0], q[8]; +cx q[5], q[1]; +cz q[6], q[7]; +cz q[3], q[9]; +cx q[2], q[4]; +h q[0]; +sdg q[2]; +h q[3]; +x q[4]; +sdg q[5]; +z q[9]; +cx q[9], q[0]; +cz q[4], q[2]; +cz q[3], q[7]; +cx q[6], q[1]; +cz q[8], q[5]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/clifford_random_n63.qasm b/wai/quantum-cross-simulator/corpus/qasm/clifford_random_n63.qasm new file mode 100644 index 000000000..e925c5b43 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/clifford_random_n63.qasm @@ -0,0 +1,895 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[63] q; +x q[0]; +x q[1]; +y q[2]; +s q[3]; +sdg q[5]; +h q[6]; +x q[7]; +h q[8]; +y q[10]; +y q[12]; +s q[13]; +sx q[15]; +y q[16]; +sx q[17]; +x q[18]; +s q[20]; +h q[22]; +sdg q[23]; +sdg q[24]; +z q[25]; +x q[27]; +s q[28]; +s q[29]; +x q[35]; +x q[37]; +z q[38]; +sdg q[40]; +y q[41]; +sx q[42]; +s q[44]; +sdg q[47]; +z q[49]; +y q[52]; +y q[53]; +x q[55]; +z q[57]; +s q[59]; +h q[61]; +cz q[50], q[3]; +cx q[16], q[42]; +cz q[30], q[62]; +cx q[25], q[33]; +cz q[1], q[28]; +cx q[7], q[15]; +cx q[27], q[52]; +cz q[38], q[53]; +cz q[54], q[58]; +cx q[6], q[11]; +cx q[21], q[49]; +cz q[23], q[34]; +cx q[20], q[39]; +cz q[41], q[44]; +cx q[17], q[36]; +cz q[24], q[19]; +cx q[26], q[47]; +cx q[43], q[60]; +cx q[40], q[46]; +cx q[13], q[32]; +cz q[14], q[0]; +cx q[35], q[8]; +cx q[56], q[37]; +cz q[9], q[57]; +cz q[4], q[45]; +cz q[59], q[48]; +cx q[2], q[12]; +cz q[10], q[55]; +cx q[61], q[51]; +cz q[31], q[5]; +cz q[29], q[22]; +sdg q[1]; +h q[2]; +sx q[3]; +h q[4]; +z q[5]; +sdg q[9]; +z q[10]; +z q[11]; +sx q[12]; +z q[13]; +x q[14]; +h q[16]; +z q[17]; +y q[18]; +z q[19]; +y q[20]; +sx q[21]; +y q[22]; +z q[24]; +z q[27]; +sx q[29]; +sx q[30]; +sx q[31]; +sdg q[32]; +x q[33]; +s q[34]; +y q[36]; +y q[37]; +x q[44]; +x q[45]; +sdg q[46]; +sx q[47]; +y q[48]; +sx q[50]; +sdg q[51]; +y q[55]; +x q[56]; +h q[57]; +h q[58]; +z q[59]; +z q[60]; +z q[62]; +cx q[50], q[53]; +cx q[40], q[45]; +cx q[5], q[3]; +cx q[38], q[52]; +cx q[29], q[43]; +cx q[54], q[47]; +cx q[1], q[58]; +cz q[30], q[8]; +cx q[42], q[14]; +cx q[60], q[51]; +cx q[36], q[16]; +cx q[56], q[48]; +cz q[24], q[20]; +cx q[15], q[25]; +cx q[37], q[4]; +cz q[12], q[2]; +cx q[21], q[10]; +cx q[59], q[57]; +cx q[13], q[39]; +cx q[44], q[7]; +cx q[19], q[46]; +cz q[27], q[55]; +cx q[26], q[23]; +cx q[34], q[35]; +cx q[6], q[22]; +cx q[41], q[33]; +cx q[49], q[11]; +cx q[32], q[9]; +cx q[62], q[17]; +cx q[31], q[0]; +cz q[28], q[61]; +x q[1]; +sdg q[2]; +x q[5]; +z q[6]; +sdg q[7]; +y q[8]; +y q[9]; +sdg q[11]; +sx q[12]; +sdg q[13]; +y q[14]; +y q[15]; +sdg q[16]; +z q[17]; +h q[19]; +s q[20]; +h q[21]; +x q[22]; +z q[23]; +sx q[24]; +z q[25]; +y q[26]; +h q[27]; +x q[28]; +y q[29]; +x q[30]; +sdg q[32]; +s q[33]; +sdg q[34]; +s q[35]; +x q[37]; +x q[38]; +sx q[39]; +sdg q[40]; +s q[41]; +sdg q[42]; +y q[43]; +sdg q[44]; +z q[48]; +x q[51]; +sx q[52]; +h q[53]; +y q[54]; +y q[55]; +s q[56]; +sx q[57]; +sx q[59]; +h q[60]; +cx q[31], q[58]; +cx q[49], q[48]; +cx q[0], q[23]; +cx q[60], q[25]; +cx q[56], q[19]; +cx q[44], q[14]; +cx q[55], q[18]; +cz q[5], q[11]; +cz q[2], q[32]; +cz q[1], q[52]; +cz q[34], q[41]; +cz q[36], q[40]; +cx q[57], q[42]; +cx q[13], q[62]; +cz q[12], q[6]; +cx q[46], q[21]; +cx q[24], q[39]; +cz q[15], q[59]; +cz q[3], q[20]; +cz q[47], q[7]; +cx q[50], q[51]; +cx q[27], q[54]; +cx q[61], q[8]; +cx q[4], q[35]; +cx q[28], q[26]; +cx q[30], q[29]; +cx q[22], q[43]; +cx q[17], q[16]; +cz q[9], q[53]; +cz q[37], q[10]; +cx q[33], q[38]; +y q[0]; +sx q[4]; +y q[5]; +s q[7]; +x q[8]; +x q[9]; +y q[11]; +sx q[12]; +s q[14]; +y q[15]; +sdg q[17]; +y q[18]; +sx q[19]; +h q[23]; +y q[24]; +h q[26]; +sdg q[27]; +y q[28]; +y q[29]; +sdg q[30]; +sx q[32]; +sx q[33]; +y q[34]; +h q[35]; +sdg q[37]; +sdg q[38]; +x q[39]; +sx q[40]; +y q[41]; +x q[42]; +x q[43]; +sdg q[44]; +sx q[48]; +s q[49]; +h q[51]; +sx q[52]; +s q[53]; +h q[54]; +h q[55]; +x q[56]; +y q[57]; +sx q[58]; +y q[60]; +sdg q[61]; +y q[62]; +cx q[27], q[38]; +cx q[13], q[10]; +cx q[23], q[28]; +cx q[52], q[50]; +cx q[48], q[5]; +cx q[12], q[15]; +cx q[14], q[36]; +cx q[39], q[47]; +cx q[21], q[44]; +cx q[20], q[3]; +cz q[19], q[49]; +cz q[24], q[51]; +cz q[1], q[11]; +cz q[2], q[58]; +cz q[6], q[40]; +cx q[0], q[34]; +cz q[17], q[45]; +cx q[55], q[46]; +cz q[42], q[60]; +cz q[61], q[62]; +cx q[59], q[4]; +cx q[22], q[9]; +cx q[43], q[37]; +cx q[41], q[26]; +cx q[33], q[35]; +cx q[30], q[54]; +cz q[7], q[16]; +cz q[32], q[29]; +cx q[31], q[25]; +cx q[8], q[53]; +cx q[18], q[57]; +y q[0]; +z q[1]; +sx q[2]; +z q[4]; +z q[5]; +y q[7]; +x q[8]; +y q[9]; +sx q[10]; +s q[14]; +z q[15]; +s q[16]; +x q[17]; +h q[18]; +z q[20]; +s q[21]; +h q[22]; +y q[25]; +sdg q[28]; +x q[29]; +sx q[30]; +z q[32]; +sx q[33]; +sx q[34]; +h q[37]; +y q[39]; +h q[40]; +z q[41]; +h q[42]; +s q[43]; +y q[44]; +s q[45]; +h q[46]; +z q[47]; +sdg q[48]; +y q[49]; +y q[50]; +x q[51]; +sx q[52]; +s q[53]; +z q[54]; +sdg q[55]; +sx q[58]; +s q[59]; +z q[60]; +y q[61]; +sx q[62]; +cx q[54], q[43]; +cx q[23], q[53]; +cz q[62], q[13]; +cz q[49], q[27]; +cx q[55], q[47]; +cz q[44], q[7]; +cz q[25], q[22]; +cz q[59], q[37]; +cx q[29], q[12]; +cx q[30], q[10]; +cz q[19], q[57]; +cz q[33], q[56]; +cx q[46], q[0]; +cz q[20], q[45]; +cx q[38], q[5]; +cz q[48], q[34]; +cx q[11], q[28]; +cx q[42], q[26]; +cz q[61], q[18]; +cz q[17], q[51]; +cz q[16], q[6]; +cz q[21], q[8]; +cx q[40], q[14]; +cz q[31], q[39]; +cx q[24], q[35]; +cz q[60], q[32]; +cx q[9], q[50]; +cx q[1], q[15]; +cx q[41], q[36]; +cz q[4], q[2]; +cz q[58], q[52]; +s q[1]; +sdg q[2]; +y q[3]; +sdg q[4]; +h q[6]; +s q[7]; +x q[8]; +z q[10]; +s q[11]; +z q[12]; +s q[14]; +sx q[16]; +z q[17]; +s q[18]; +h q[20]; +y q[22]; +sdg q[25]; +s q[31]; +s q[33]; +sx q[34]; +sdg q[37]; +y q[38]; +y q[39]; +sdg q[41]; +x q[42]; +x q[43]; +y q[46]; +z q[47]; +sdg q[48]; +sx q[49]; +sx q[50]; +sdg q[51]; +z q[53]; +x q[55]; +y q[56]; +z q[57]; +x q[58]; +h q[60]; +sx q[61]; +cx q[6], q[20]; +cx q[34], q[57]; +cz q[61], q[4]; +cz q[53], q[37]; +cz q[51], q[24]; +cx q[11], q[29]; +cz q[59], q[26]; +cz q[14], q[31]; +cx q[16], q[60]; +cx q[49], q[25]; +cx q[36], q[55]; +cx q[9], q[23]; +cx q[7], q[13]; +cx q[46], q[18]; +cx q[33], q[3]; +cz q[44], q[38]; +cz q[1], q[5]; +cx q[15], q[27]; +cx q[0], q[56]; +cz q[35], q[62]; +cx q[41], q[54]; +cx q[12], q[32]; +cx q[28], q[40]; +cz q[22], q[50]; +cx q[30], q[45]; +cz q[39], q[48]; +cz q[17], q[47]; +cx q[42], q[10]; +cz q[21], q[19]; +cz q[8], q[2]; +cx q[52], q[43]; +y q[0]; +sdg q[1]; +h q[2]; +x q[6]; +h q[7]; +sx q[8]; +sx q[9]; +x q[10]; +s q[11]; +z q[13]; +sx q[14]; +h q[15]; +y q[17]; +sdg q[18]; +sx q[19]; +h q[21]; +s q[22]; +h q[23]; +y q[27]; +sx q[29]; +z q[30]; +h q[31]; +z q[32]; +h q[34]; +sx q[35]; +y q[36]; +x q[37]; +z q[39]; +x q[41]; +sdg q[42]; +x q[43]; +s q[44]; +z q[46]; +h q[47]; +sdg q[48]; +sdg q[49]; +sdg q[50]; +h q[51]; +s q[52]; +x q[53]; +x q[55]; +x q[56]; +sx q[57]; +y q[58]; +x q[61]; +sx q[62]; +cz q[47], q[6]; +cx q[18], q[25]; +cx q[27], q[61]; +cx q[20], q[10]; +cz q[1], q[42]; +cz q[45], q[56]; +cz q[38], q[4]; +cx q[52], q[36]; +cz q[40], q[8]; +cx q[23], q[21]; +cx q[3], q[48]; +cx q[15], q[37]; +cz q[62], q[49]; +cz q[5], q[58]; +cx q[2], q[60]; +cx q[53], q[16]; +cz q[59], q[50]; +cx q[33], q[19]; +cx q[13], q[35]; +cz q[9], q[7]; +cz q[31], q[17]; +cx q[34], q[51]; +cz q[39], q[32]; +cx q[28], q[44]; +cz q[43], q[29]; +cx q[46], q[22]; +cz q[24], q[54]; +cz q[41], q[0]; +cx q[57], q[12]; +cz q[11], q[55]; +cz q[26], q[14]; +x q[0]; +x q[1]; +h q[2]; +sx q[7]; +x q[9]; +sx q[10]; +x q[11]; +z q[12]; +z q[13]; +s q[15]; +z q[19]; +sx q[20]; +x q[22]; +sdg q[23]; +y q[26]; +s q[27]; +sx q[29]; +z q[30]; +y q[31]; +s q[32]; +sx q[36]; +s q[38]; +sdg q[39]; +x q[40]; +h q[44]; +y q[45]; +y q[46]; +sx q[47]; +x q[48]; +y q[49]; +z q[50]; +z q[52]; +h q[55]; +z q[56]; +x q[57]; +h q[59]; +h q[60]; +x q[62]; +cx q[22], q[1]; +cx q[24], q[55]; +cx q[33], q[57]; +cx q[48], q[39]; +cz q[46], q[19]; +cz q[11], q[23]; +cx q[34], q[4]; +cz q[52], q[16]; +cz q[51], q[27]; +cz q[38], q[47]; +cx q[6], q[58]; +cx q[26], q[28]; +cz q[60], q[42]; +cz q[2], q[43]; +cx q[35], q[53]; +cx q[29], q[12]; +cz q[25], q[50]; +cx q[40], q[10]; +cz q[13], q[5]; +cx q[37], q[41]; +cx q[36], q[54]; +cx q[20], q[9]; +cx q[15], q[18]; +cx q[7], q[32]; +cx q[45], q[14]; +cz q[62], q[59]; +cx q[44], q[3]; +cz q[21], q[31]; +cz q[56], q[0]; +cz q[17], q[49]; +cx q[61], q[8]; +y q[0]; +s q[1]; +y q[2]; +x q[4]; +sdg q[5]; +z q[6]; +z q[7]; +sdg q[8]; +x q[9]; +y q[10]; +h q[12]; +x q[13]; +x q[14]; +y q[15]; +z q[16]; +z q[17]; +x q[18]; +y q[20]; +sx q[21]; +s q[23]; +y q[25]; +z q[27]; +sdg q[29]; +sdg q[30]; +h q[31]; +sx q[34]; +x q[36]; +y q[37]; +x q[38]; +x q[40]; +h q[41]; +s q[42]; +s q[43]; +x q[46]; +y q[47]; +s q[48]; +z q[49]; +sx q[50]; +sx q[52]; +h q[53]; +h q[54]; +z q[55]; +h q[56]; +sdg q[57]; +y q[58]; +sx q[60]; +sx q[61]; +sdg q[62]; +cz q[25], q[31]; +cz q[51], q[46]; +cx q[38], q[34]; +cx q[18], q[17]; +cx q[43], q[48]; +cz q[11], q[55]; +cx q[23], q[54]; +cz q[41], q[52]; +cz q[27], q[42]; +cz q[36], q[32]; +cx q[14], q[57]; +cz q[21], q[22]; +cx q[19], q[33]; +cx q[50], q[49]; +cx q[6], q[13]; +cz q[12], q[44]; +cx q[53], q[47]; +cx q[56], q[24]; +cx q[61], q[30]; +cx q[7], q[45]; +cx q[58], q[4]; +cx q[28], q[3]; +cz q[60], q[15]; +cx q[2], q[8]; +cx q[39], q[16]; +cx q[40], q[1]; +cz q[37], q[26]; +cz q[20], q[9]; +cx q[0], q[59]; +cx q[5], q[62]; +cx q[29], q[10]; +y q[2]; +y q[4]; +sx q[5]; +y q[6]; +y q[7]; +sdg q[9]; +s q[11]; +sx q[12]; +x q[14]; +x q[18]; +h q[19]; +sx q[20]; +s q[21]; +s q[22]; +h q[23]; +y q[25]; +s q[26]; +x q[27]; +y q[28]; +sx q[29]; +z q[30]; +s q[31]; +s q[33]; +z q[34]; +z q[35]; +z q[37]; +h q[38]; +h q[39]; +h q[40]; +h q[42]; +sx q[43]; +s q[44]; +sx q[47]; +y q[50]; +sdg q[52]; +sdg q[53]; +x q[54]; +z q[55]; +h q[56]; +z q[58]; +y q[59]; +x q[60]; +x q[62]; +cx q[19], q[43]; +cz q[27], q[54]; +cz q[30], q[57]; +cz q[39], q[11]; +cx q[50], q[21]; +cz q[17], q[44]; +cx q[55], q[24]; +cx q[1], q[36]; +cz q[48], q[56]; +cx q[26], q[10]; +cz q[34], q[49]; +cz q[23], q[4]; +cz q[52], q[40]; +cx q[15], q[16]; +cx q[25], q[60]; +cx q[59], q[61]; +cx q[2], q[7]; +cz q[33], q[53]; +cz q[38], q[20]; +cz q[31], q[5]; +cx q[8], q[41]; +cz q[6], q[9]; +cx q[13], q[12]; +cx q[37], q[62]; +cx q[32], q[47]; +cx q[29], q[35]; +cz q[3], q[0]; +cz q[22], q[42]; +cz q[58], q[45]; +cz q[14], q[51]; +cz q[18], q[28]; +x q[0]; +z q[1]; +sx q[2]; +s q[3]; +z q[4]; +x q[5]; +sx q[8]; +x q[9]; +z q[10]; +h q[11]; +h q[12]; +z q[13]; +x q[14]; +x q[15]; +sx q[17]; +y q[18]; +y q[21]; +y q[22]; +sx q[23]; +sx q[25]; +y q[26]; +sdg q[27]; +sdg q[28]; +s q[29]; +z q[31]; +s q[33]; +x q[34]; +z q[36]; +s q[38]; +h q[39]; +x q[40]; +sdg q[42]; +sdg q[43]; +x q[44]; +y q[46]; +z q[47]; +sx q[48]; +s q[49]; +h q[51]; +s q[52]; +sdg q[53]; +x q[54]; +x q[55]; +s q[57]; +sx q[58]; +z q[60]; +z q[61]; +x q[62]; +cz q[19], q[35]; +cz q[34], q[23]; +cx q[15], q[6]; +cx q[17], q[46]; +cz q[4], q[12]; +cz q[50], q[5]; +cx q[13], q[16]; +cx q[42], q[18]; +cz q[56], q[10]; +cx q[14], q[52]; +cx q[60], q[43]; +cx q[3], q[44]; +cx q[29], q[58]; +cz q[40], q[61]; +cx q[62], q[47]; +cx q[9], q[41]; +cx q[21], q[0]; +cx q[7], q[38]; +cx q[27], q[26]; +cz q[51], q[59]; +cz q[39], q[25]; +cx q[53], q[45]; +cz q[48], q[1]; +cz q[30], q[36]; +cx q[33], q[55]; +cz q[32], q[20]; +cz q[2], q[11]; +cx q[57], q[37]; +cx q[49], q[24]; +cz q[8], q[22]; +cx q[31], q[54]; +s q[0]; +y q[1]; +y q[3]; +x q[4]; +y q[6]; +x q[7]; +sdg q[8]; +z q[9]; +sx q[10]; +y q[12]; +s q[19]; +x q[20]; +x q[21]; +sx q[23]; +x q[25]; +sx q[26]; +z q[28]; +h q[30]; +x q[33]; +sdg q[34]; +sx q[35]; +x q[36]; +y q[37]; +y q[38]; +x q[39]; +s q[40]; +s q[41]; +h q[44]; +sx q[45]; +h q[46]; +z q[47]; +x q[50]; +sdg q[52]; +sdg q[54]; +s q[55]; +sx q[58]; +sdg q[60]; +sx q[61]; +cz q[52], q[5]; +cz q[59], q[34]; +cz q[18], q[60]; +cx q[41], q[24]; +cx q[32], q[42]; +cz q[17], q[54]; +cx q[3], q[58]; +cx q[12], q[33]; +cx q[37], q[35]; +cx q[49], q[19]; +cz q[11], q[1]; +cx q[21], q[31]; +cx q[14], q[6]; +cz q[7], q[27]; +cz q[39], q[30]; +cz q[40], q[62]; +cx q[36], q[23]; +cx q[53], q[8]; +cz q[57], q[9]; +cx q[56], q[22]; +cx q[38], q[16]; +cx q[2], q[20]; +cz q[28], q[15]; +cz q[46], q[13]; +cz q[50], q[0]; +cz q[29], q[44]; +cx q[47], q[43]; +cx q[61], q[51]; +cx q[10], q[55]; +cz q[4], q[25]; +cx q[45], q[48]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/clifford_random_n64.qasm b/wai/quantum-cross-simulator/corpus/qasm/clifford_random_n64.qasm new file mode 100644 index 000000000..0057267c8 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/clifford_random_n64.qasm @@ -0,0 +1,896 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[64] q; +z q[0]; +z q[1]; +sx q[2]; +y q[4]; +x q[5]; +sx q[6]; +y q[7]; +x q[8]; +sx q[10]; +s q[11]; +z q[13]; +z q[14]; +sx q[16]; +sx q[18]; +sdg q[19]; +sx q[21]; +h q[22]; +x q[23]; +h q[25]; +sx q[26]; +x q[27]; +z q[28]; +h q[29]; +y q[30]; +sx q[32]; +z q[33]; +z q[35]; +sdg q[36]; +z q[37]; +z q[40]; +sdg q[41]; +z q[42]; +x q[43]; +h q[45]; +x q[46]; +z q[47]; +h q[48]; +sdg q[49]; +h q[50]; +s q[51]; +sdg q[53]; +x q[54]; +h q[57]; +h q[58]; +y q[60]; +y q[61]; +h q[62]; +x q[63]; +cz q[25], q[36]; +cx q[6], q[12]; +cx q[27], q[2]; +cz q[58], q[1]; +cx q[49], q[8]; +cx q[61], q[11]; +cz q[53], q[9]; +cx q[57], q[48]; +cz q[15], q[5]; +cx q[19], q[45]; +cx q[24], q[35]; +cx q[50], q[14]; +cz q[34], q[3]; +cz q[7], q[21]; +cz q[33], q[20]; +cx q[46], q[18]; +cx q[31], q[32]; +cz q[10], q[38]; +cz q[47], q[43]; +cz q[26], q[60]; +cz q[17], q[29]; +cz q[30], q[23]; +cz q[13], q[37]; +cx q[51], q[62]; +cx q[40], q[54]; +cx q[42], q[52]; +cx q[55], q[28]; +cx q[16], q[22]; +cz q[63], q[56]; +cz q[4], q[59]; +cz q[39], q[41]; +cz q[44], q[0]; +z q[0]; +h q[3]; +sdg q[4]; +z q[7]; +x q[8]; +s q[10]; +y q[11]; +sdg q[12]; +h q[13]; +z q[14]; +h q[16]; +sx q[17]; +sdg q[18]; +sdg q[20]; +sx q[28]; +y q[29]; +sx q[31]; +z q[33]; +sdg q[34]; +y q[36]; +sx q[37]; +sdg q[38]; +x q[39]; +sx q[40]; +z q[41]; +h q[42]; +s q[43]; +z q[45]; +s q[46]; +x q[48]; +sx q[49]; +x q[51]; +x q[52]; +x q[54]; +y q[55]; +s q[56]; +h q[57]; +x q[58]; +x q[59]; +x q[60]; +sdg q[61]; +s q[63]; +cx q[59], q[57]; +cz q[55], q[0]; +cx q[50], q[37]; +cz q[34], q[27]; +cx q[21], q[1]; +cx q[10], q[4]; +cx q[53], q[44]; +cz q[58], q[51]; +cz q[45], q[7]; +cx q[63], q[8]; +cz q[43], q[14]; +cz q[54], q[42]; +cz q[35], q[24]; +cx q[15], q[48]; +cz q[11], q[5]; +cx q[49], q[41]; +cx q[47], q[46]; +cx q[33], q[61]; +cx q[6], q[28]; +cz q[52], q[31]; +cz q[38], q[29]; +cx q[62], q[40]; +cz q[18], q[2]; +cx q[56], q[12]; +cz q[3], q[26]; +cz q[23], q[36]; +cz q[19], q[20]; +cx q[30], q[25]; +cx q[13], q[9]; +cz q[39], q[16]; +cz q[32], q[17]; +cz q[60], q[22]; +s q[0]; +sdg q[1]; +y q[2]; +h q[7]; +sx q[9]; +y q[10]; +sx q[11]; +sdg q[13]; +x q[15]; +sx q[17]; +x q[18]; +sx q[19]; +z q[20]; +s q[21]; +s q[22]; +sx q[23]; +sdg q[24]; +y q[25]; +z q[26]; +sx q[28]; +z q[29]; +sx q[31]; +sdg q[33]; +x q[34]; +s q[36]; +z q[37]; +z q[39]; +h q[45]; +x q[47]; +sx q[48]; +sx q[49]; +s q[52]; +x q[54]; +h q[55]; +x q[56]; +sx q[57]; +h q[58]; +x q[59]; +h q[61]; +y q[62]; +cz q[47], q[25]; +cx q[33], q[16]; +cx q[29], q[37]; +cx q[48], q[51]; +cx q[52], q[28]; +cz q[15], q[36]; +cz q[58], q[21]; +cz q[10], q[62]; +cx q[55], q[24]; +cz q[5], q[45]; +cz q[0], q[57]; +cx q[7], q[20]; +cx q[63], q[19]; +cx q[34], q[50]; +cz q[44], q[53]; +cz q[18], q[23]; +cz q[6], q[59]; +cx q[43], q[38]; +cz q[56], q[49]; +cz q[39], q[61]; +cz q[22], q[17]; +cz q[8], q[26]; +cz q[31], q[42]; +cz q[2], q[46]; +cx q[14], q[32]; +cx q[27], q[35]; +cz q[3], q[40]; +cx q[1], q[12]; +cz q[60], q[11]; +cz q[30], q[4]; +cx q[54], q[41]; +cz q[13], q[9]; +y q[0]; +sdg q[1]; +s q[7]; +x q[8]; +sdg q[9]; +sx q[11]; +sx q[12]; +s q[16]; +s q[18]; +h q[19]; +sdg q[20]; +y q[22]; +h q[23]; +s q[25]; +z q[27]; +z q[28]; +h q[29]; +sx q[31]; +s q[32]; +z q[33]; +sdg q[34]; +sx q[35]; +z q[37]; +s q[38]; +sx q[39]; +y q[40]; +y q[41]; +x q[45]; +x q[47]; +sdg q[48]; +z q[49]; +sx q[50]; +s q[52]; +h q[53]; +sx q[54]; +sx q[56]; +h q[57]; +s q[58]; +x q[60]; +h q[61]; +z q[62]; +cx q[29], q[61]; +cx q[4], q[33]; +cz q[20], q[23]; +cz q[51], q[32]; +cz q[25], q[43]; +cx q[45], q[30]; +cx q[58], q[38]; +cz q[60], q[13]; +cx q[40], q[36]; +cz q[35], q[42]; +cz q[53], q[62]; +cx q[9], q[21]; +cx q[39], q[27]; +cx q[7], q[6]; +cz q[26], q[18]; +cx q[16], q[49]; +cx q[55], q[17]; +cz q[14], q[47]; +cz q[24], q[34]; +cz q[11], q[19]; +cx q[44], q[57]; +cx q[3], q[48]; +cx q[63], q[2]; +cx q[50], q[12]; +cx q[56], q[37]; +cx q[59], q[15]; +cz q[41], q[22]; +cx q[46], q[28]; +cx q[5], q[52]; +cz q[1], q[10]; +cx q[54], q[31]; +cx q[8], q[0]; +z q[2]; +h q[3]; +sx q[4]; +h q[5]; +x q[6]; +z q[8]; +s q[10]; +h q[11]; +h q[12]; +x q[13]; +z q[15]; +sx q[16]; +sx q[17]; +s q[21]; +s q[22]; +sdg q[24]; +z q[26]; +x q[28]; +x q[29]; +y q[30]; +h q[31]; +y q[33]; +x q[35]; +sx q[36]; +sx q[37]; +y q[38]; +x q[39]; +y q[40]; +x q[41]; +z q[42]; +s q[43]; +x q[47]; +sdg q[48]; +x q[49]; +s q[50]; +sx q[53]; +x q[58]; +s q[59]; +sx q[60]; +x q[62]; +z q[63]; +cz q[7], q[14]; +cx q[55], q[27]; +cz q[15], q[8]; +cz q[47], q[18]; +cx q[60], q[9]; +cz q[30], q[36]; +cx q[16], q[50]; +cx q[52], q[4]; +cz q[3], q[22]; +cx q[41], q[48]; +cz q[62], q[44]; +cz q[19], q[40]; +cz q[5], q[51]; +cx q[33], q[23]; +cz q[13], q[6]; +cz q[28], q[20]; +cx q[32], q[11]; +cz q[39], q[2]; +cz q[53], q[54]; +cz q[57], q[38]; +cx q[56], q[49]; +cx q[58], q[25]; +cx q[35], q[34]; +cz q[59], q[29]; +cx q[42], q[46]; +cx q[31], q[63]; +cz q[45], q[17]; +cz q[43], q[26]; +cz q[37], q[10]; +cz q[21], q[0]; +cz q[1], q[12]; +cx q[24], q[61]; +x q[0]; +s q[2]; +sx q[4]; +s q[5]; +y q[7]; +sdg q[8]; +s q[9]; +sx q[11]; +sdg q[12]; +sdg q[14]; +z q[18]; +s q[19]; +z q[22]; +y q[24]; +s q[25]; +x q[26]; +sx q[27]; +x q[28]; +x q[29]; +h q[33]; +h q[34]; +x q[37]; +s q[38]; +sdg q[39]; +y q[42]; +y q[43]; +x q[44]; +x q[45]; +z q[47]; +h q[50]; +s q[52]; +y q[54]; +z q[55]; +s q[56]; +y q[57]; +s q[58]; +z q[59]; +y q[60]; +y q[61]; +y q[62]; +z q[63]; +cz q[53], q[61]; +cz q[58], q[56]; +cz q[50], q[0]; +cx q[12], q[30]; +cz q[10], q[59]; +cx q[4], q[49]; +cz q[9], q[7]; +cz q[42], q[13]; +cz q[57], q[19]; +cx q[47], q[28]; +cz q[43], q[35]; +cz q[27], q[22]; +cz q[20], q[54]; +cx q[52], q[15]; +cz q[23], q[55]; +cz q[25], q[17]; +cx q[38], q[45]; +cz q[3], q[32]; +cz q[26], q[11]; +cz q[2], q[21]; +cx q[62], q[5]; +cx q[41], q[18]; +cx q[60], q[40]; +cx q[39], q[63]; +cz q[37], q[36]; +cz q[6], q[51]; +cz q[16], q[31]; +cz q[24], q[29]; +cz q[46], q[44]; +cz q[48], q[14]; +cz q[1], q[33]; +cx q[8], q[34]; +x q[1]; +sx q[2]; +sx q[4]; +s q[5]; +h q[6]; +s q[7]; +h q[9]; +s q[10]; +y q[11]; +h q[12]; +sx q[13]; +s q[15]; +sdg q[16]; +y q[17]; +y q[18]; +h q[19]; +z q[20]; +z q[22]; +z q[23]; +sdg q[24]; +h q[25]; +sdg q[26]; +y q[28]; +sdg q[30]; +x q[31]; +y q[32]; +s q[33]; +x q[34]; +z q[35]; +sx q[36]; +h q[37]; +sdg q[38]; +x q[39]; +sdg q[41]; +h q[42]; +sdg q[44]; +h q[46]; +sx q[47]; +sdg q[49]; +y q[50]; +h q[52]; +sdg q[53]; +s q[55]; +x q[56]; +x q[57]; +s q[58]; +z q[60]; +h q[62]; +s q[63]; +cx q[9], q[3]; +cz q[58], q[11]; +cx q[2], q[40]; +cx q[17], q[21]; +cx q[52], q[61]; +cz q[51], q[30]; +cx q[63], q[62]; +cx q[14], q[54]; +cx q[27], q[24]; +cx q[18], q[6]; +cx q[43], q[34]; +cz q[23], q[32]; +cx q[38], q[7]; +cz q[49], q[31]; +cz q[22], q[50]; +cx q[37], q[59]; +cz q[0], q[29]; +cz q[13], q[33]; +cx q[46], q[26]; +cz q[36], q[57]; +cx q[15], q[55]; +cx q[4], q[28]; +cx q[25], q[41]; +cx q[44], q[10]; +cz q[47], q[16]; +cx q[53], q[1]; +cz q[60], q[5]; +cx q[20], q[56]; +cz q[8], q[35]; +cx q[19], q[12]; +cx q[45], q[42]; +cz q[48], q[39]; +sdg q[1]; +sdg q[4]; +x q[9]; +s q[10]; +sx q[11]; +h q[13]; +sx q[14]; +sx q[16]; +y q[17]; +s q[18]; +y q[19]; +s q[21]; +x q[23]; +sdg q[24]; +sx q[25]; +sdg q[26]; +sx q[27]; +y q[28]; +z q[29]; +z q[30]; +y q[31]; +x q[32]; +s q[33]; +sx q[34]; +y q[35]; +s q[37]; +y q[38]; +z q[39]; +y q[41]; +y q[42]; +s q[43]; +y q[45]; +z q[47]; +h q[48]; +sdg q[49]; +sdg q[50]; +z q[51]; +y q[53]; +s q[55]; +sdg q[56]; +z q[57]; +y q[60]; +sx q[63]; +cx q[45], q[37]; +cx q[11], q[18]; +cz q[21], q[25]; +cx q[27], q[60]; +cx q[58], q[47]; +cz q[52], q[53]; +cx q[9], q[61]; +cx q[3], q[49]; +cx q[39], q[24]; +cz q[19], q[6]; +cz q[48], q[1]; +cx q[36], q[40]; +cz q[31], q[28]; +cz q[33], q[50]; +cz q[16], q[13]; +cx q[5], q[57]; +cx q[22], q[51]; +cz q[14], q[30]; +cx q[63], q[12]; +cx q[55], q[38]; +cx q[46], q[35]; +cz q[41], q[59]; +cz q[23], q[34]; +cx q[8], q[7]; +cz q[2], q[15]; +cx q[44], q[43]; +cx q[17], q[56]; +cx q[54], q[0]; +cz q[62], q[42]; +cz q[20], q[10]; +cx q[29], q[4]; +cx q[32], q[26]; +sx q[1]; +h q[2]; +z q[5]; +x q[6]; +s q[8]; +s q[10]; +sx q[11]; +x q[12]; +z q[13]; +z q[15]; +h q[16]; +x q[17]; +sdg q[18]; +sdg q[20]; +sdg q[21]; +h q[22]; +z q[24]; +sdg q[27]; +sdg q[30]; +x q[31]; +x q[32]; +s q[33]; +y q[34]; +y q[39]; +sx q[42]; +y q[43]; +h q[44]; +sx q[45]; +sx q[46]; +sx q[47]; +sx q[50]; +sdg q[51]; +h q[52]; +sx q[53]; +sdg q[54]; +sdg q[56]; +sx q[60]; +s q[62]; +z q[63]; +cz q[17], q[7]; +cz q[3], q[45]; +cz q[41], q[5]; +cx q[46], q[13]; +cx q[27], q[29]; +cz q[49], q[26]; +cx q[62], q[44]; +cx q[30], q[35]; +cz q[50], q[1]; +cz q[56], q[52]; +cz q[9], q[38]; +cz q[54], q[59]; +cx q[11], q[25]; +cz q[55], q[22]; +cx q[61], q[43]; +cx q[0], q[19]; +cz q[18], q[58]; +cz q[8], q[28]; +cx q[15], q[40]; +cz q[34], q[6]; +cx q[12], q[36]; +cz q[57], q[63]; +cz q[53], q[37]; +cz q[20], q[47]; +cz q[48], q[14]; +cx q[16], q[60]; +cx q[32], q[31]; +cx q[42], q[51]; +cz q[4], q[39]; +cz q[23], q[24]; +cz q[10], q[21]; +cz q[2], q[33]; +sx q[0]; +h q[1]; +y q[4]; +sdg q[6]; +sx q[8]; +h q[10]; +h q[14]; +y q[15]; +y q[17]; +sdg q[18]; +x q[21]; +x q[22]; +sdg q[24]; +y q[25]; +x q[26]; +h q[27]; +sx q[28]; +x q[29]; +h q[30]; +x q[33]; +z q[34]; +sdg q[35]; +h q[36]; +sdg q[37]; +x q[38]; +h q[39]; +y q[40]; +h q[41]; +s q[42]; +sdg q[43]; +sdg q[44]; +sdg q[45]; +sdg q[47]; +sx q[51]; +s q[52]; +h q[53]; +s q[55]; +h q[56]; +z q[58]; +sdg q[59]; +z q[60]; +y q[61]; +z q[63]; +cz q[6], q[29]; +cz q[21], q[47]; +cx q[0], q[2]; +cz q[31], q[41]; +cz q[52], q[8]; +cz q[63], q[42]; +cx q[15], q[10]; +cx q[40], q[9]; +cz q[44], q[51]; +cz q[12], q[18]; +cz q[62], q[7]; +cx q[60], q[11]; +cx q[25], q[17]; +cx q[13], q[19]; +cz q[53], q[1]; +cz q[22], q[54]; +cx q[3], q[4]; +cx q[56], q[58]; +cx q[55], q[59]; +cx q[26], q[30]; +cz q[28], q[35]; +cz q[23], q[39]; +cz q[24], q[33]; +cz q[16], q[20]; +cz q[43], q[49]; +cz q[38], q[50]; +cz q[14], q[32]; +cx q[45], q[34]; +cz q[48], q[57]; +cx q[61], q[27]; +cx q[5], q[37]; +cx q[46], q[36]; +h q[2]; +y q[3]; +h q[4]; +z q[5]; +s q[6]; +h q[7]; +x q[9]; +sx q[10]; +sdg q[12]; +sdg q[13]; +z q[14]; +s q[15]; +z q[16]; +y q[18]; +z q[19]; +sdg q[21]; +z q[22]; +sx q[23]; +z q[24]; +h q[25]; +z q[26]; +z q[27]; +h q[28]; +s q[29]; +sx q[30]; +x q[32]; +h q[38]; +z q[39]; +z q[40]; +s q[42]; +sx q[43]; +y q[44]; +s q[45]; +y q[46]; +sdg q[49]; +x q[51]; +h q[52]; +y q[53]; +sdg q[54]; +z q[55]; +sx q[56]; +s q[57]; +z q[58]; +x q[60]; +sdg q[61]; +y q[63]; +cz q[6], q[40]; +cx q[56], q[33]; +cx q[26], q[4]; +cz q[34], q[20]; +cx q[23], q[17]; +cx q[61], q[21]; +cx q[7], q[38]; +cx q[30], q[48]; +cz q[13], q[3]; +cz q[9], q[25]; +cx q[32], q[12]; +cz q[42], q[51]; +cx q[2], q[39]; +cz q[62], q[47]; +cz q[24], q[14]; +cx q[37], q[50]; +cz q[36], q[5]; +cx q[35], q[10]; +cx q[49], q[44]; +cx q[16], q[46]; +cz q[15], q[54]; +cz q[59], q[58]; +cz q[52], q[0]; +cx q[43], q[53]; +cx q[22], q[19]; +cz q[55], q[27]; +cx q[18], q[57]; +cz q[28], q[1]; +cz q[60], q[41]; +cz q[29], q[8]; +cx q[11], q[63]; +cz q[45], q[31]; +sx q[0]; +h q[1]; +sdg q[4]; +y q[7]; +sdg q[8]; +s q[9]; +z q[10]; +y q[11]; +z q[12]; +x q[13]; +x q[14]; +x q[15]; +sdg q[18]; +x q[20]; +sx q[21]; +y q[22]; +y q[25]; +x q[31]; +x q[37]; +y q[38]; +s q[39]; +s q[40]; +y q[42]; +h q[45]; +sdg q[46]; +h q[49]; +h q[51]; +x q[53]; +sx q[54]; +s q[56]; +y q[57]; +sx q[58]; +h q[59]; +sdg q[60]; +s q[61]; +x q[62]; +cx q[43], q[10]; +cz q[21], q[50]; +cz q[34], q[59]; +cz q[37], q[57]; +cz q[53], q[39]; +cz q[28], q[20]; +cz q[13], q[12]; +cx q[42], q[44]; +cx q[61], q[38]; +cx q[60], q[1]; +cz q[52], q[33]; +cx q[63], q[23]; +cx q[7], q[51]; +cz q[17], q[32]; +cz q[0], q[4]; +cx q[41], q[30]; +cz q[48], q[27]; +cx q[58], q[16]; +cx q[56], q[14]; +cz q[29], q[9]; +cx q[11], q[47]; +cx q[55], q[24]; +cz q[22], q[6]; +cz q[46], q[5]; +cz q[19], q[45]; +cz q[31], q[35]; +cx q[15], q[26]; +cz q[18], q[2]; +cx q[3], q[8]; +cz q[49], q[62]; +cx q[54], q[40]; +cz q[36], q[25]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/clifford_random_n65.qasm b/wai/quantum-cross-simulator/corpus/qasm/clifford_random_n65.qasm new file mode 100644 index 000000000..952351df8 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/clifford_random_n65.qasm @@ -0,0 +1,899 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[65] q; +h q[1]; +y q[3]; +s q[4]; +y q[6]; +z q[7]; +z q[9]; +z q[10]; +s q[11]; +x q[12]; +z q[13]; +sdg q[15]; +h q[16]; +y q[17]; +y q[18]; +x q[19]; +z q[21]; +h q[22]; +sx q[23]; +s q[25]; +sx q[27]; +z q[29]; +sdg q[30]; +sx q[31]; +z q[34]; +z q[35]; +s q[36]; +x q[41]; +sdg q[42]; +sx q[44]; +x q[46]; +s q[49]; +sdg q[50]; +x q[51]; +y q[55]; +h q[56]; +sx q[57]; +y q[59]; +s q[61]; +z q[63]; +z q[64]; +cz q[35], q[50]; +cx q[58], q[23]; +cx q[63], q[48]; +cz q[16], q[62]; +cz q[21], q[22]; +cx q[43], q[39]; +cx q[53], q[55]; +cx q[0], q[15]; +cx q[6], q[52]; +cx q[64], q[47]; +cz q[34], q[27]; +cz q[7], q[59]; +cx q[24], q[17]; +cx q[13], q[19]; +cx q[32], q[3]; +cz q[45], q[33]; +cx q[4], q[28]; +cx q[14], q[26]; +cz q[57], q[12]; +cz q[11], q[9]; +cx q[20], q[42]; +cx q[25], q[51]; +cx q[30], q[38]; +cz q[61], q[31]; +cx q[54], q[29]; +cz q[36], q[1]; +cz q[49], q[60]; +cz q[5], q[8]; +cx q[40], q[46]; +cx q[2], q[10]; +cz q[41], q[56]; +cz q[37], q[18]; +s q[0]; +h q[3]; +s q[4]; +s q[6]; +z q[7]; +sdg q[8]; +x q[9]; +s q[11]; +h q[12]; +h q[14]; +h q[15]; +z q[16]; +sx q[17]; +sdg q[18]; +sx q[19]; +z q[21]; +sdg q[22]; +x q[25]; +y q[27]; +x q[28]; +sdg q[29]; +h q[30]; +y q[33]; +x q[36]; +s q[37]; +h q[38]; +z q[39]; +y q[40]; +y q[42]; +s q[43]; +sdg q[44]; +s q[45]; +h q[46]; +x q[48]; +x q[49]; +sdg q[50]; +sx q[51]; +z q[52]; +x q[55]; +s q[56]; +sdg q[57]; +sdg q[60]; +h q[61]; +h q[62]; +y q[63]; +sdg q[64]; +cz q[3], q[34]; +cz q[63], q[26]; +cx q[53], q[52]; +cz q[39], q[33]; +cx q[6], q[44]; +cx q[5], q[27]; +cx q[41], q[4]; +cx q[16], q[28]; +cz q[59], q[19]; +cz q[62], q[8]; +cz q[42], q[24]; +cz q[49], q[47]; +cx q[57], q[17]; +cz q[48], q[54]; +cz q[10], q[15]; +cx q[55], q[12]; +cx q[11], q[0]; +cx q[43], q[60]; +cz q[13], q[50]; +cx q[25], q[40]; +cx q[1], q[22]; +cz q[35], q[29]; +cx q[18], q[36]; +cz q[45], q[56]; +cz q[7], q[58]; +cz q[23], q[20]; +cz q[51], q[30]; +cx q[21], q[2]; +cx q[9], q[46]; +cz q[61], q[32]; +cz q[37], q[31]; +cx q[64], q[14]; +sdg q[0]; +sx q[1]; +s q[2]; +z q[3]; +z q[4]; +sx q[5]; +sx q[6]; +s q[7]; +h q[8]; +x q[9]; +s q[10]; +y q[11]; +x q[14]; +s q[15]; +z q[16]; +x q[17]; +sdg q[18]; +x q[19]; +sx q[20]; +sx q[21]; +s q[22]; +y q[23]; +z q[24]; +s q[25]; +z q[27]; +sx q[28]; +z q[29]; +sdg q[31]; +x q[32]; +h q[33]; +y q[35]; +x q[37]; +h q[38]; +x q[39]; +sdg q[40]; +h q[41]; +z q[43]; +sx q[44]; +s q[45]; +h q[46]; +s q[47]; +y q[48]; +x q[49]; +h q[51]; +sdg q[53]; +sx q[58]; +sx q[59]; +y q[62]; +cx q[5], q[29]; +cz q[3], q[42]; +cx q[10], q[39]; +cz q[50], q[9]; +cz q[32], q[54]; +cx q[15], q[31]; +cx q[20], q[58]; +cx q[37], q[46]; +cz q[38], q[51]; +cz q[49], q[22]; +cx q[16], q[53]; +cz q[35], q[21]; +cx q[18], q[34]; +cz q[26], q[1]; +cz q[57], q[30]; +cz q[62], q[40]; +cx q[27], q[43]; +cz q[25], q[64]; +cz q[13], q[56]; +cx q[19], q[33]; +cz q[24], q[59]; +cz q[47], q[48]; +cx q[17], q[44]; +cz q[41], q[23]; +cz q[52], q[45]; +cz q[6], q[28]; +cz q[0], q[61]; +cz q[11], q[7]; +cz q[63], q[12]; +cz q[2], q[14]; +cz q[60], q[55]; +cx q[4], q[8]; +sdg q[0]; +y q[2]; +s q[3]; +sx q[5]; +y q[6]; +x q[7]; +z q[9]; +z q[10]; +z q[11]; +z q[12]; +sdg q[13]; +x q[14]; +sx q[15]; +y q[16]; +sdg q[19]; +sx q[20]; +s q[21]; +y q[23]; +h q[24]; +h q[25]; +s q[26]; +y q[27]; +h q[28]; +x q[29]; +sx q[30]; +h q[31]; +z q[36]; +sdg q[39]; +y q[42]; +z q[47]; +y q[50]; +s q[53]; +x q[54]; +z q[55]; +s q[58]; +sdg q[59]; +y q[62]; +z q[63]; +x q[64]; +cx q[47], q[48]; +cx q[61], q[26]; +cx q[64], q[19]; +cz q[37], q[54]; +cx q[32], q[53]; +cz q[27], q[16]; +cz q[39], q[36]; +cz q[57], q[34]; +cz q[60], q[15]; +cx q[4], q[43]; +cz q[40], q[5]; +cz q[44], q[24]; +cz q[22], q[28]; +cx q[38], q[33]; +cz q[7], q[2]; +cx q[8], q[21]; +cz q[49], q[30]; +cz q[1], q[3]; +cx q[25], q[11]; +cz q[20], q[14]; +cx q[62], q[18]; +cz q[42], q[35]; +cz q[0], q[23]; +cz q[45], q[31]; +cz q[13], q[17]; +cx q[29], q[52]; +cz q[56], q[46]; +cz q[55], q[50]; +cz q[63], q[59]; +cx q[51], q[10]; +cz q[6], q[9]; +cx q[41], q[12]; +s q[2]; +x q[4]; +sx q[5]; +z q[6]; +h q[7]; +sx q[8]; +sx q[9]; +x q[12]; +sdg q[14]; +h q[15]; +z q[16]; +y q[17]; +x q[18]; +sx q[20]; +sx q[22]; +sx q[23]; +sdg q[24]; +sx q[25]; +s q[26]; +sdg q[27]; +h q[28]; +sx q[29]; +s q[31]; +h q[32]; +x q[33]; +z q[35]; +x q[37]; +h q[38]; +z q[40]; +z q[41]; +s q[45]; +sx q[46]; +h q[48]; +x q[49]; +z q[50]; +z q[51]; +x q[52]; +z q[53]; +s q[55]; +z q[56]; +s q[58]; +y q[60]; +x q[63]; +sdg q[64]; +cz q[21], q[22]; +cz q[12], q[17]; +cz q[40], q[41]; +cx q[25], q[20]; +cz q[37], q[44]; +cx q[61], q[52]; +cx q[3], q[35]; +cx q[45], q[58]; +cx q[24], q[50]; +cz q[26], q[32]; +cx q[39], q[47]; +cz q[10], q[51]; +cx q[48], q[18]; +cx q[49], q[30]; +cx q[6], q[63]; +cz q[55], q[42]; +cx q[62], q[54]; +cz q[8], q[53]; +cz q[28], q[34]; +cx q[14], q[1]; +cx q[36], q[0]; +cx q[27], q[5]; +cx q[64], q[11]; +cx q[23], q[46]; +cx q[31], q[38]; +cx q[56], q[33]; +cx q[2], q[16]; +cx q[4], q[9]; +cz q[19], q[7]; +cx q[57], q[15]; +cx q[59], q[13]; +cz q[60], q[29]; +s q[0]; +sdg q[1]; +z q[3]; +s q[4]; +y q[5]; +s q[6]; +z q[9]; +y q[10]; +s q[11]; +y q[12]; +s q[13]; +h q[16]; +sx q[17]; +sx q[18]; +s q[21]; +h q[22]; +z q[23]; +h q[24]; +z q[26]; +z q[27]; +x q[28]; +h q[29]; +x q[31]; +x q[32]; +y q[34]; +s q[35]; +z q[37]; +sdg q[38]; +z q[39]; +h q[40]; +sx q[42]; +s q[44]; +z q[45]; +h q[46]; +y q[47]; +z q[48]; +sx q[49]; +h q[50]; +x q[51]; +sdg q[52]; +y q[53]; +h q[56]; +sx q[57]; +x q[58]; +z q[59]; +z q[61]; +y q[62]; +sx q[63]; +h q[64]; +cx q[13], q[0]; +cx q[57], q[38]; +cx q[23], q[3]; +cz q[24], q[6]; +cx q[49], q[17]; +cx q[41], q[19]; +cx q[45], q[48]; +cz q[40], q[64]; +cx q[60], q[55]; +cx q[52], q[14]; +cx q[58], q[9]; +cz q[27], q[31]; +cx q[12], q[59]; +cx q[61], q[44]; +cz q[26], q[22]; +cz q[30], q[36]; +cx q[32], q[21]; +cx q[46], q[2]; +cx q[1], q[15]; +cx q[8], q[10]; +cz q[53], q[25]; +cx q[47], q[63]; +cx q[4], q[39]; +cz q[43], q[5]; +cz q[7], q[56]; +cx q[35], q[62]; +cz q[29], q[20]; +cx q[28], q[51]; +cz q[11], q[37]; +cx q[18], q[33]; +cx q[50], q[54]; +cx q[42], q[16]; +s q[0]; +x q[1]; +sdg q[2]; +x q[3]; +z q[4]; +z q[5]; +y q[6]; +y q[7]; +z q[8]; +z q[9]; +z q[10]; +sdg q[11]; +z q[13]; +s q[15]; +z q[17]; +y q[18]; +h q[20]; +sx q[22]; +z q[23]; +x q[25]; +s q[27]; +sdg q[28]; +x q[29]; +s q[30]; +s q[31]; +y q[34]; +h q[35]; +h q[37]; +x q[38]; +sx q[39]; +sx q[42]; +x q[44]; +h q[45]; +sx q[48]; +sdg q[49]; +x q[51]; +x q[52]; +h q[57]; +sx q[59]; +x q[61]; +y q[62]; +h q[63]; +sdg q[64]; +cx q[13], q[4]; +cz q[53], q[47]; +cz q[60], q[37]; +cz q[55], q[15]; +cx q[17], q[16]; +cx q[14], q[8]; +cx q[24], q[42]; +cx q[19], q[52]; +cz q[18], q[1]; +cz q[46], q[34]; +cz q[0], q[49]; +cz q[63], q[22]; +cx q[57], q[5]; +cx q[32], q[40]; +cz q[54], q[26]; +cx q[29], q[35]; +cz q[31], q[12]; +cz q[7], q[27]; +cx q[38], q[30]; +cz q[21], q[23]; +cz q[33], q[51]; +cx q[45], q[11]; +cx q[62], q[39]; +cx q[64], q[2]; +cx q[9], q[59]; +cx q[28], q[50]; +cz q[25], q[56]; +cz q[44], q[43]; +cz q[10], q[6]; +cz q[58], q[61]; +cx q[36], q[3]; +cx q[20], q[41]; +s q[0]; +s q[1]; +y q[2]; +sdg q[3]; +z q[6]; +z q[7]; +h q[8]; +z q[11]; +sdg q[12]; +y q[13]; +x q[15]; +y q[17]; +z q[18]; +sx q[19]; +s q[20]; +sx q[21]; +s q[22]; +h q[23]; +s q[25]; +x q[26]; +h q[30]; +z q[31]; +s q[34]; +x q[35]; +sdg q[36]; +sx q[38]; +y q[39]; +y q[41]; +x q[42]; +sx q[43]; +sdg q[44]; +z q[45]; +sdg q[49]; +y q[50]; +z q[51]; +sx q[53]; +h q[55]; +sdg q[57]; +sx q[58]; +s q[59]; +sx q[60]; +sdg q[61]; +z q[62]; +h q[63]; +cx q[63], q[14]; +cz q[34], q[56]; +cz q[54], q[11]; +cx q[32], q[31]; +cx q[59], q[61]; +cz q[8], q[44]; +cz q[33], q[58]; +cz q[12], q[13]; +cx q[16], q[10]; +cz q[23], q[57]; +cx q[19], q[21]; +cx q[6], q[64]; +cz q[25], q[47]; +cx q[4], q[20]; +cz q[60], q[1]; +cx q[22], q[15]; +cx q[0], q[53]; +cz q[39], q[35]; +cx q[38], q[62]; +cx q[18], q[49]; +cz q[46], q[45]; +cz q[28], q[3]; +cx q[43], q[51]; +cx q[55], q[41]; +cz q[7], q[2]; +cx q[5], q[37]; +cz q[26], q[52]; +cx q[27], q[50]; +cz q[9], q[40]; +cx q[48], q[29]; +cx q[17], q[36]; +cx q[42], q[24]; +y q[2]; +x q[4]; +x q[6]; +s q[7]; +z q[8]; +s q[11]; +x q[12]; +y q[13]; +s q[14]; +s q[15]; +sx q[16]; +sx q[19]; +sdg q[23]; +z q[26]; +h q[27]; +sdg q[30]; +z q[32]; +x q[33]; +z q[34]; +h q[37]; +s q[38]; +x q[40]; +z q[44]; +x q[45]; +z q[47]; +x q[48]; +s q[49]; +y q[50]; +z q[52]; +y q[54]; +sdg q[56]; +s q[57]; +h q[59]; +z q[60]; +s q[62]; +cx q[59], q[35]; +cz q[53], q[20]; +cx q[3], q[26]; +cz q[51], q[54]; +cx q[11], q[16]; +cz q[57], q[49]; +cx q[48], q[38]; +cx q[7], q[64]; +cz q[31], q[14]; +cz q[0], q[21]; +cz q[43], q[6]; +cz q[50], q[13]; +cx q[10], q[61]; +cz q[24], q[47]; +cx q[44], q[45]; +cz q[30], q[55]; +cz q[29], q[32]; +cx q[40], q[62]; +cx q[5], q[23]; +cx q[8], q[58]; +cz q[2], q[41]; +cx q[46], q[37]; +cz q[22], q[63]; +cz q[15], q[39]; +cx q[34], q[4]; +cx q[52], q[25]; +cx q[42], q[12]; +cz q[18], q[9]; +cx q[17], q[60]; +cx q[27], q[33]; +cx q[56], q[36]; +cx q[28], q[1]; +sx q[0]; +h q[1]; +x q[3]; +y q[5]; +z q[6]; +y q[7]; +sx q[8]; +sx q[10]; +z q[12]; +y q[14]; +y q[15]; +x q[16]; +sx q[17]; +y q[19]; +x q[20]; +h q[21]; +sdg q[22]; +x q[23]; +h q[24]; +y q[25]; +h q[26]; +z q[27]; +x q[29]; +sdg q[30]; +sdg q[31]; +sdg q[32]; +h q[33]; +s q[34]; +z q[35]; +x q[37]; +y q[39]; +s q[40]; +sdg q[42]; +y q[44]; +x q[45]; +z q[46]; +z q[47]; +sx q[48]; +h q[52]; +y q[55]; +s q[56]; +s q[59]; +y q[60]; +z q[62]; +h q[63]; +z q[64]; +cx q[64], q[30]; +cz q[12], q[2]; +cx q[18], q[7]; +cx q[16], q[11]; +cx q[60], q[63]; +cx q[59], q[34]; +cz q[4], q[48]; +cx q[53], q[31]; +cx q[56], q[1]; +cz q[25], q[51]; +cz q[54], q[29]; +cx q[58], q[55]; +cz q[5], q[46]; +cz q[37], q[44]; +cx q[35], q[13]; +cz q[0], q[50]; +cz q[27], q[38]; +cx q[43], q[40]; +cx q[19], q[33]; +cz q[22], q[8]; +cz q[24], q[14]; +cx q[28], q[32]; +cx q[52], q[61]; +cx q[3], q[26]; +cx q[20], q[41]; +cx q[17], q[47]; +cx q[23], q[39]; +cz q[57], q[10]; +cx q[45], q[9]; +cx q[21], q[6]; +cx q[36], q[42]; +cx q[15], q[62]; +s q[1]; +sx q[2]; +h q[3]; +sx q[6]; +x q[9]; +h q[10]; +sx q[11]; +z q[13]; +h q[14]; +sdg q[16]; +s q[17]; +h q[18]; +x q[20]; +y q[21]; +y q[24]; +sdg q[25]; +x q[26]; +s q[27]; +s q[28]; +sdg q[32]; +z q[33]; +h q[34]; +sx q[35]; +s q[36]; +x q[39]; +z q[40]; +s q[41]; +sx q[42]; +sx q[43]; +h q[46]; +z q[49]; +sdg q[50]; +sx q[51]; +sdg q[52]; +sdg q[53]; +y q[54]; +z q[55]; +sdg q[58]; +sdg q[59]; +z q[61]; +z q[62]; +cx q[56], q[54]; +cx q[15], q[35]; +cz q[43], q[60]; +cx q[17], q[39]; +cz q[33], q[13]; +cx q[38], q[28]; +cz q[61], q[19]; +cz q[50], q[62]; +cz q[46], q[57]; +cz q[32], q[40]; +cx q[10], q[14]; +cx q[6], q[29]; +cx q[18], q[26]; +cz q[41], q[59]; +cx q[11], q[7]; +cz q[12], q[9]; +cx q[42], q[49]; +cx q[64], q[3]; +cz q[44], q[53]; +cx q[24], q[45]; +cx q[63], q[27]; +cz q[36], q[30]; +cx q[51], q[20]; +cz q[0], q[55]; +cx q[25], q[21]; +cx q[58], q[22]; +cx q[1], q[4]; +cz q[52], q[2]; +cx q[34], q[31]; +cz q[37], q[8]; +cx q[5], q[48]; +cx q[47], q[16]; +sdg q[0]; +s q[1]; +h q[6]; +sdg q[7]; +y q[9]; +y q[12]; +sdg q[14]; +s q[15]; +s q[16]; +h q[17]; +z q[25]; +sx q[26]; +z q[28]; +h q[29]; +sx q[32]; +s q[34]; +sdg q[35]; +y q[36]; +sx q[38]; +z q[39]; +s q[40]; +y q[41]; +z q[42]; +sx q[43]; +sdg q[44]; +sdg q[45]; +h q[46]; +z q[49]; +sx q[50]; +z q[51]; +sx q[53]; +x q[56]; +y q[57]; +sx q[58]; +sx q[61]; +z q[62]; +sx q[63]; +cz q[11], q[29]; +cx q[24], q[13]; +cz q[25], q[36]; +cz q[22], q[39]; +cz q[20], q[26]; +cx q[17], q[46]; +cx q[50], q[49]; +cx q[23], q[44]; +cz q[47], q[21]; +cx q[54], q[30]; +cz q[52], q[34]; +cz q[60], q[9]; +cx q[33], q[7]; +cz q[43], q[56]; +cx q[18], q[3]; +cx q[1], q[61]; +cz q[51], q[6]; +cz q[32], q[8]; +cx q[35], q[59]; +cx q[0], q[38]; +cx q[40], q[27]; +cz q[45], q[64]; +cx q[2], q[62]; +cx q[57], q[58]; +cx q[53], q[63]; +cx q[28], q[10]; +cx q[4], q[48]; +cx q[41], q[5]; +cz q[31], q[14]; +cz q[15], q[37]; +cz q[55], q[42]; +cx q[19], q[12]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/clifford_t_n12_d40.qasm b/wai/quantum-cross-simulator/corpus/qasm/clifford_t_n12_d40.qasm new file mode 100644 index 000000000..1e13ad140 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/clifford_t_n12_d40.qasm @@ -0,0 +1,550 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[12] q; +t q[3]; +h q[6]; +sdg q[7]; +s q[8]; +sdg q[9]; +sdg q[10]; +cx q[6], q[11]; +cz q[5], q[3]; +cx q[8], q[9]; +cz q[0], q[10]; +cz q[2], q[4]; +cz q[1], q[7]; +x q[0]; +h q[2]; +sdg q[4]; +h q[9]; +h q[11]; +cx q[6], q[7]; +cz q[0], q[3]; +cx q[11], q[2]; +cz q[8], q[1]; +cz q[4], q[9]; +cz q[10], q[5]; +sdg q[0]; +t q[1]; +sdg q[3]; +h q[4]; +sdg q[5]; +s q[6]; +tdg q[7]; +h q[8]; +tdg q[9]; +h q[10]; +tdg q[11]; +cz q[2], q[1]; +cx q[3], q[11]; +cz q[5], q[9]; +cx q[8], q[7]; +cx q[6], q[10]; +cz q[4], q[0]; +s q[0]; +sdg q[1]; +tdg q[3]; +tdg q[4]; +tdg q[6]; +x q[7]; +s q[8]; +tdg q[9]; +h q[10]; +cz q[6], q[4]; +cx q[7], q[5]; +cz q[9], q[2]; +cx q[8], q[11]; +cz q[10], q[1]; +cz q[0], q[3]; +tdg q[0]; +tdg q[1]; +h q[3]; +sdg q[6]; +s q[8]; +t q[10]; +h q[11]; +cx q[0], q[1]; +cz q[8], q[2]; +cz q[10], q[4]; +cx q[5], q[9]; +cx q[11], q[3]; +cz q[6], q[7]; +sdg q[1]; +h q[2]; +x q[3]; +s q[4]; +t q[6]; +tdg q[8]; +h q[9]; +sdg q[10]; +cx q[0], q[8]; +cx q[3], q[10]; +cx q[9], q[4]; +cz q[1], q[11]; +cx q[7], q[2]; +cx q[6], q[5]; +s q[3]; +t q[4]; +x q[5]; +x q[6]; +sdg q[7]; +x q[8]; +h q[9]; +s q[10]; +cz q[2], q[1]; +cz q[10], q[3]; +cz q[6], q[9]; +cz q[4], q[0]; +cx q[8], q[7]; +cx q[5], q[11]; +tdg q[0]; +tdg q[1]; +tdg q[2]; +sdg q[4]; +sdg q[5]; +sdg q[6]; +t q[7]; +tdg q[8]; +cx q[3], q[5]; +cx q[11], q[10]; +cx q[6], q[1]; +cz q[9], q[2]; +cz q[8], q[7]; +cz q[0], q[4]; +t q[2]; +t q[3]; +sdg q[4]; +t q[5]; +x q[7]; +sdg q[8]; +x q[9]; +tdg q[10]; +s q[11]; +cz q[4], q[0]; +cx q[5], q[6]; +cx q[2], q[11]; +cx q[3], q[1]; +cx q[8], q[9]; +cx q[7], q[10]; +s q[1]; +t q[2]; +tdg q[4]; +sdg q[7]; +x q[8]; +sdg q[9]; +sdg q[11]; +cz q[3], q[11]; +cx q[9], q[8]; +cx q[5], q[2]; +cx q[6], q[1]; +cx q[4], q[10]; +cz q[7], q[0]; +tdg q[0]; +s q[1]; +s q[2]; +x q[3]; +sdg q[4]; +x q[5]; +sdg q[7]; +sdg q[11]; +cz q[4], q[8]; +cz q[10], q[7]; +cx q[2], q[5]; +cx q[3], q[0]; +cz q[11], q[1]; +cz q[6], q[9]; +s q[0]; +tdg q[1]; +x q[2]; +t q[3]; +h q[5]; +x q[6]; +x q[7]; +h q[8]; +sdg q[10]; +tdg q[11]; +cx q[0], q[3]; +cz q[2], q[11]; +cx q[7], q[4]; +cz q[10], q[9]; +cz q[6], q[8]; +cx q[5], q[1]; +x q[1]; +t q[2]; +t q[3]; +x q[4]; +s q[5]; +s q[6]; +tdg q[10]; +x q[11]; +cx q[8], q[7]; +cz q[10], q[11]; +cx q[6], q[4]; +cx q[1], q[2]; +cx q[9], q[3]; +cz q[0], q[5]; +s q[0]; +sdg q[1]; +h q[2]; +s q[3]; +x q[5]; +h q[6]; +x q[7]; +x q[10]; +s q[11]; +cz q[9], q[1]; +cx q[5], q[10]; +cz q[8], q[6]; +cx q[2], q[11]; +cx q[7], q[0]; +cx q[3], q[4]; +h q[0]; +tdg q[1]; +h q[2]; +t q[3]; +tdg q[4]; +sdg q[5]; +x q[7]; +tdg q[11]; +cx q[0], q[3]; +cz q[11], q[2]; +cx q[6], q[1]; +cz q[7], q[9]; +cz q[8], q[4]; +cx q[5], q[10]; +h q[1]; +tdg q[2]; +t q[3]; +tdg q[4]; +x q[5]; +t q[6]; +t q[7]; +s q[8]; +s q[9]; +x q[10]; +cz q[11], q[7]; +cz q[3], q[1]; +cx q[2], q[4]; +cz q[10], q[6]; +cx q[9], q[0]; +cx q[8], q[5]; +sdg q[0]; +tdg q[2]; +t q[3]; +sdg q[6]; +sdg q[9]; +x q[10]; +cx q[5], q[10]; +cx q[3], q[7]; +cx q[11], q[1]; +cz q[9], q[6]; +cx q[4], q[8]; +cz q[0], q[2]; +x q[1]; +x q[2]; +h q[3]; +tdg q[5]; +sdg q[9]; +sdg q[10]; +cx q[0], q[8]; +cz q[1], q[11]; +cz q[3], q[5]; +cx q[9], q[6]; +cx q[4], q[2]; +cx q[7], q[10]; +x q[1]; +t q[2]; +h q[9]; +sdg q[11]; +cz q[9], q[5]; +cx q[0], q[3]; +cz q[10], q[4]; +cx q[2], q[1]; +cz q[7], q[11]; +cx q[6], q[8]; +t q[1]; +t q[2]; +s q[3]; +t q[5]; +x q[10]; +t q[11]; +cz q[10], q[3]; +cx q[2], q[7]; +cz q[5], q[9]; +cx q[0], q[11]; +cz q[8], q[6]; +cx q[1], q[4]; +h q[0]; +s q[4]; +h q[5]; +x q[6]; +x q[7]; +h q[8]; +sdg q[9]; +t q[11]; +cz q[6], q[10]; +cx q[8], q[11]; +cz q[2], q[9]; +cz q[3], q[0]; +cx q[1], q[4]; +cx q[5], q[7]; +s q[4]; +t q[7]; +sdg q[8]; +tdg q[9]; +tdg q[10]; +h q[11]; +cz q[10], q[11]; +cx q[4], q[2]; +cx q[8], q[3]; +cz q[0], q[6]; +cx q[1], q[5]; +cz q[9], q[7]; +sdg q[0]; +sdg q[1]; +tdg q[2]; +h q[3]; +sdg q[5]; +tdg q[7]; +h q[8]; +t q[10]; +t q[11]; +cz q[9], q[2]; +cz q[5], q[6]; +cz q[1], q[10]; +cx q[7], q[4]; +cz q[0], q[3]; +cz q[11], q[8]; +tdg q[0]; +x q[2]; +sdg q[3]; +sdg q[5]; +x q[7]; +cx q[5], q[9]; +cx q[6], q[0]; +cx q[2], q[10]; +cx q[11], q[8]; +cz q[1], q[4]; +cx q[7], q[3]; +s q[0]; +h q[1]; +s q[2]; +sdg q[4]; +h q[5]; +sdg q[6]; +x q[7]; +x q[9]; +cz q[3], q[8]; +cz q[10], q[7]; +cx q[2], q[11]; +cx q[5], q[1]; +cx q[4], q[0]; +cx q[6], q[9]; +sdg q[1]; +t q[2]; +s q[3]; +h q[4]; +sdg q[7]; +s q[8]; +t q[10]; +h q[11]; +cx q[4], q[11]; +cx q[3], q[0]; +cx q[1], q[6]; +cx q[2], q[8]; +cx q[7], q[5]; +cx q[10], q[9]; +sdg q[0]; +sdg q[3]; +t q[4]; +s q[6]; +x q[8]; +t q[10]; +cz q[3], q[10]; +cx q[11], q[9]; +cx q[8], q[5]; +cx q[0], q[2]; +cx q[4], q[1]; +cx q[7], q[6]; +h q[0]; +t q[2]; +tdg q[3]; +t q[5]; +sdg q[8]; +sdg q[9]; +tdg q[10]; +t q[11]; +cz q[0], q[4]; +cz q[6], q[8]; +cx q[10], q[5]; +cz q[7], q[11]; +cz q[3], q[2]; +cz q[1], q[9]; +t q[0]; +h q[2]; +s q[3]; +x q[4]; +s q[5]; +s q[6]; +sdg q[7]; +sdg q[9]; +sdg q[11]; +cz q[4], q[9]; +cz q[10], q[5]; +cz q[7], q[1]; +cz q[8], q[0]; +cz q[2], q[11]; +cx q[3], q[6]; +tdg q[0]; +sdg q[2]; +h q[5]; +s q[6]; +t q[8]; +s q[9]; +h q[10]; +sdg q[11]; +cz q[0], q[6]; +cz q[3], q[1]; +cz q[9], q[5]; +cx q[11], q[4]; +cz q[7], q[8]; +cx q[10], q[2]; +h q[0]; +sdg q[1]; +x q[2]; +h q[3]; +h q[6]; +x q[7]; +x q[9]; +sdg q[10]; +x q[11]; +cx q[2], q[0]; +cz q[8], q[4]; +cz q[5], q[9]; +cz q[10], q[7]; +cz q[1], q[11]; +cx q[3], q[6]; +sdg q[6]; +h q[7]; +x q[8]; +t q[9]; +s q[10]; +cx q[7], q[11]; +cz q[1], q[9]; +cx q[5], q[0]; +cz q[3], q[10]; +cx q[2], q[6]; +cx q[4], q[8]; +t q[0]; +h q[2]; +sdg q[5]; +sdg q[6]; +s q[7]; +sdg q[9]; +t q[10]; +h q[11]; +cx q[2], q[5]; +cx q[3], q[0]; +cz q[8], q[6]; +cz q[1], q[4]; +cz q[9], q[7]; +cz q[10], q[11]; +sdg q[1]; +s q[2]; +tdg q[3]; +sdg q[7]; +h q[9]; +h q[11]; +cx q[10], q[9]; +cz q[8], q[0]; +cz q[3], q[5]; +cx q[2], q[4]; +cx q[7], q[1]; +cz q[11], q[6]; +sdg q[0]; +x q[2]; +x q[3]; +s q[5]; +h q[6]; +h q[7]; +t q[9]; +s q[10]; +cx q[8], q[6]; +cz q[5], q[4]; +cx q[3], q[7]; +cx q[9], q[11]; +cx q[1], q[10]; +cz q[0], q[2]; +h q[0]; +tdg q[1]; +sdg q[3]; +sdg q[4]; +t q[5]; +s q[6]; +sdg q[7]; +sdg q[8]; +h q[9]; +tdg q[11]; +cx q[2], q[7]; +cz q[6], q[3]; +cz q[11], q[8]; +cz q[1], q[0]; +cz q[9], q[10]; +cx q[5], q[4]; +s q[0]; +x q[3]; +tdg q[4]; +x q[5]; +t q[6]; +sdg q[7]; +tdg q[8]; +h q[9]; +t q[10]; +cx q[6], q[4]; +cx q[1], q[8]; +cx q[7], q[2]; +cx q[10], q[5]; +cz q[3], q[11]; +cz q[9], q[0]; +tdg q[1]; +t q[2]; +h q[3]; +sdg q[4]; +t q[6]; +t q[7]; +t q[8]; +tdg q[10]; +cz q[1], q[2]; +cz q[0], q[11]; +cx q[10], q[7]; +cx q[8], q[3]; +cx q[4], q[5]; +cz q[6], q[9]; +x q[0]; +s q[2]; +h q[3]; +tdg q[4]; +t q[5]; +h q[6]; +h q[7]; +s q[9]; +x q[10]; +t q[11]; +cx q[10], q[5]; +cx q[2], q[8]; +cx q[7], q[0]; +cx q[4], q[3]; +cx q[11], q[6]; +cx q[1], q[9]; +tdg q[2]; +t q[3]; +t q[6]; +h q[8]; +h q[10]; +tdg q[11]; +cx q[7], q[11]; +cx q[0], q[2]; +cx q[3], q[9]; +cz q[4], q[5]; +cz q[10], q[6]; +cz q[1], q[8]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/clifford_t_n4_d20.qasm b/wai/quantum-cross-simulator/corpus/qasm/clifford_t_n4_d20.qasm new file mode 100644 index 000000000..e62b1f1d9 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/clifford_t_n4_d20.qasm @@ -0,0 +1,100 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[4] q; +sdg q[0]; +t q[2]; +cx q[2], q[3]; +cz q[0], q[1]; +x q[0]; +sdg q[1]; +h q[2]; +sdg q[3]; +cx q[0], q[2]; +cz q[3], q[1]; +x q[2]; +x q[3]; +cx q[3], q[1]; +cx q[2], q[0]; +h q[0]; +tdg q[2]; +cx q[2], q[3]; +cx q[1], q[0]; +s q[0]; +sdg q[1]; +t q[2]; +tdg q[3]; +cz q[0], q[2]; +cz q[3], q[1]; +sdg q[0]; +s q[1]; +x q[2]; +cx q[2], q[3]; +cx q[0], q[1]; +h q[1]; +t q[3]; +cx q[2], q[3]; +cz q[0], q[1]; +h q[0]; +sdg q[1]; +tdg q[2]; +cx q[1], q[0]; +cz q[3], q[2]; +t q[0]; +h q[1]; +s q[2]; +h q[3]; +cx q[0], q[1]; +cx q[3], q[2]; +h q[0]; +sdg q[1]; +h q[2]; +s q[3]; +cz q[3], q[1]; +cx q[0], q[2]; +tdg q[1]; +tdg q[2]; +tdg q[3]; +cz q[1], q[3]; +cx q[2], q[0]; +t q[0]; +h q[3]; +cz q[1], q[0]; +cz q[2], q[3]; +h q[0]; +h q[2]; +tdg q[3]; +cx q[3], q[1]; +cz q[2], q[0]; +t q[0]; +x q[1]; +s q[2]; +s q[3]; +cz q[2], q[3]; +cz q[0], q[1]; +t q[0]; +h q[2]; +tdg q[3]; +cx q[0], q[1]; +cz q[3], q[2]; +x q[0]; +x q[3]; +cx q[3], q[2]; +cx q[1], q[0]; +h q[0]; +sdg q[1]; +sdg q[2]; +t q[3]; +cz q[3], q[0]; +cx q[1], q[2]; +h q[3]; +cz q[1], q[2]; +cz q[0], q[3]; +tdg q[0]; +tdg q[2]; +cz q[1], q[2]; +cx q[0], q[3]; +x q[1]; +tdg q[2]; +h q[3]; +cz q[3], q[2]; +cz q[0], q[1]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/clifford_t_n8_d40.qasm b/wai/quantum-cross-simulator/corpus/qasm/clifford_t_n8_d40.qasm new file mode 100644 index 000000000..e55ee4d62 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/clifford_t_n8_d40.qasm @@ -0,0 +1,377 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[8] q; +x q[1]; +h q[2]; +t q[4]; +h q[7]; +cz q[4], q[1]; +cz q[2], q[6]; +cx q[3], q[7]; +cx q[5], q[0]; +s q[1]; +t q[3]; +tdg q[5]; +h q[6]; +h q[7]; +cz q[1], q[7]; +cx q[5], q[2]; +cx q[0], q[6]; +cx q[4], q[3]; +sdg q[0]; +h q[1]; +h q[2]; +tdg q[4]; +sdg q[6]; +sdg q[7]; +cz q[6], q[2]; +cz q[4], q[0]; +cx q[1], q[5]; +cx q[7], q[3]; +sdg q[0]; +sdg q[3]; +x q[4]; +tdg q[5]; +sdg q[7]; +cz q[4], q[1]; +cx q[2], q[3]; +cz q[6], q[0]; +cz q[5], q[7]; +t q[0]; +h q[1]; +sdg q[2]; +tdg q[3]; +s q[4]; +s q[5]; +sdg q[7]; +cz q[1], q[5]; +cz q[4], q[7]; +cx q[0], q[3]; +cx q[6], q[2]; +h q[0]; +s q[1]; +tdg q[3]; +cx q[6], q[4]; +cz q[0], q[7]; +cx q[2], q[3]; +cx q[5], q[1]; +sdg q[0]; +tdg q[2]; +h q[5]; +tdg q[6]; +s q[7]; +cx q[1], q[4]; +cx q[7], q[0]; +cx q[5], q[3]; +cx q[6], q[2]; +h q[2]; +sdg q[4]; +x q[6]; +cx q[6], q[7]; +cz q[4], q[3]; +cx q[1], q[2]; +cz q[0], q[5]; +t q[3]; +x q[5]; +sdg q[7]; +cz q[2], q[4]; +cz q[3], q[1]; +cx q[6], q[7]; +cz q[0], q[5]; +tdg q[0]; +h q[1]; +t q[3]; +s q[4]; +x q[5]; +tdg q[6]; +sdg q[7]; +cz q[6], q[4]; +cx q[5], q[3]; +cx q[0], q[1]; +cz q[7], q[2]; +s q[1]; +h q[2]; +h q[3]; +t q[5]; +s q[6]; +s q[7]; +cx q[4], q[3]; +cx q[2], q[0]; +cz q[6], q[1]; +cx q[5], q[7]; +x q[0]; +x q[2]; +sdg q[3]; +t q[4]; +cx q[5], q[4]; +cz q[0], q[6]; +cx q[7], q[1]; +cz q[2], q[3]; +x q[0]; +h q[1]; +h q[2]; +tdg q[3]; +sdg q[6]; +cx q[5], q[1]; +cx q[3], q[7]; +cx q[4], q[6]; +cx q[0], q[2]; +h q[0]; +h q[1]; +sdg q[2]; +x q[3]; +s q[4]; +x q[5]; +h q[6]; +cz q[2], q[3]; +cz q[1], q[6]; +cx q[5], q[7]; +cx q[0], q[4]; +t q[1]; +s q[4]; +h q[5]; +t q[7]; +cx q[4], q[1]; +cx q[3], q[5]; +cx q[6], q[7]; +cz q[2], q[0]; +x q[3]; +sdg q[5]; +h q[6]; +cx q[6], q[0]; +cz q[5], q[2]; +cz q[1], q[4]; +cz q[7], q[3]; +s q[1]; +sdg q[5]; +x q[6]; +x q[7]; +cx q[6], q[3]; +cz q[7], q[4]; +cz q[0], q[2]; +cz q[1], q[5]; +x q[0]; +s q[1]; +tdg q[2]; +x q[3]; +sdg q[4]; +x q[5]; +t q[7]; +cx q[1], q[4]; +cz q[6], q[0]; +cz q[3], q[5]; +cx q[2], q[7]; +sdg q[0]; +t q[1]; +sdg q[2]; +t q[4]; +t q[5]; +x q[6]; +tdg q[7]; +cx q[5], q[7]; +cx q[4], q[2]; +cx q[0], q[3]; +cx q[6], q[1]; +s q[0]; +tdg q[1]; +t q[2]; +h q[3]; +h q[4]; +cx q[4], q[3]; +cx q[1], q[2]; +cx q[6], q[7]; +cz q[0], q[5]; +h q[0]; +s q[1]; +x q[4]; +h q[5]; +tdg q[7]; +cx q[6], q[0]; +cz q[2], q[7]; +cx q[4], q[3]; +cz q[5], q[1]; +sdg q[3]; +h q[4]; +h q[5]; +h q[6]; +sdg q[7]; +cx q[7], q[6]; +cx q[4], q[3]; +cx q[2], q[5]; +cx q[1], q[0]; +h q[1]; +x q[2]; +sdg q[3]; +t q[4]; +h q[6]; +cx q[0], q[5]; +cx q[4], q[1]; +cx q[3], q[2]; +cz q[6], q[7]; +s q[0]; +tdg q[1]; +x q[2]; +t q[3]; +tdg q[4]; +sdg q[6]; +tdg q[7]; +cz q[6], q[0]; +cz q[5], q[3]; +cx q[7], q[2]; +cz q[4], q[1]; +t q[0]; +sdg q[2]; +s q[3]; +tdg q[6]; +s q[7]; +cx q[7], q[1]; +cx q[3], q[2]; +cz q[6], q[4]; +cz q[5], q[0]; +t q[0]; +tdg q[2]; +tdg q[3]; +h q[4]; +x q[5]; +sdg q[6]; +cx q[2], q[0]; +cx q[1], q[6]; +cz q[4], q[3]; +cz q[5], q[7]; +h q[0]; +t q[1]; +s q[3]; +x q[4]; +tdg q[6]; +t q[7]; +cz q[7], q[6]; +cz q[0], q[1]; +cz q[3], q[5]; +cz q[4], q[2]; +sdg q[0]; +t q[1]; +tdg q[2]; +sdg q[4]; +x q[6]; +h q[7]; +cx q[2], q[5]; +cx q[6], q[3]; +cx q[7], q[1]; +cx q[0], q[4]; +tdg q[1]; +s q[2]; +t q[3]; +s q[4]; +h q[6]; +t q[7]; +cz q[7], q[0]; +cz q[6], q[5]; +cz q[3], q[1]; +cx q[2], q[4]; +x q[0]; +h q[1]; +s q[2]; +t q[4]; +sdg q[5]; +tdg q[6]; +h q[7]; +cx q[5], q[4]; +cz q[0], q[1]; +cx q[2], q[6]; +cx q[3], q[7]; +sdg q[0]; +sdg q[1]; +s q[3]; +h q[6]; +cz q[1], q[6]; +cx q[2], q[0]; +cx q[4], q[5]; +cz q[7], q[3]; +s q[1]; +h q[3]; +t q[4]; +tdg q[5]; +s q[6]; +sdg q[7]; +cx q[3], q[2]; +cx q[6], q[1]; +cx q[5], q[4]; +cx q[7], q[0]; +t q[0]; +s q[1]; +s q[2]; +h q[3]; +sdg q[4]; +tdg q[6]; +t q[7]; +cx q[6], q[1]; +cx q[7], q[3]; +cz q[5], q[4]; +cx q[0], q[2]; +sdg q[0]; +x q[1]; +sdg q[2]; +t q[3]; +tdg q[6]; +h q[7]; +cz q[0], q[2]; +cx q[4], q[3]; +cz q[7], q[5]; +cz q[6], q[1]; +h q[0]; +t q[2]; +tdg q[3]; +tdg q[4]; +tdg q[6]; +cx q[0], q[6]; +cz q[1], q[4]; +cz q[5], q[7]; +cx q[2], q[3]; +t q[1]; +t q[2]; +t q[3]; +t q[4]; +tdg q[6]; +h q[7]; +cz q[2], q[5]; +cx q[1], q[4]; +cz q[7], q[3]; +cx q[0], q[6]; +sdg q[1]; +s q[2]; +t q[3]; +t q[4]; +x q[5]; +t q[6]; +cz q[1], q[5]; +cx q[3], q[0]; +cz q[6], q[4]; +cz q[7], q[2]; +t q[1]; +sdg q[2]; +h q[3]; +tdg q[4]; +s q[5]; +x q[6]; +t q[7]; +cx q[4], q[0]; +cz q[1], q[6]; +cz q[5], q[7]; +cz q[2], q[3]; +sdg q[0]; +s q[2]; +s q[3]; +x q[6]; +cx q[7], q[0]; +cx q[1], q[3]; +cx q[4], q[6]; +cx q[5], q[2]; +tdg q[1]; +x q[2]; +s q[3]; +tdg q[4]; +x q[6]; +cz q[3], q[4]; +cz q[5], q[0]; +cz q[6], q[2]; +cx q[1], q[7]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/controlled_rz_full_turn.qasm b/wai/quantum-cross-simulator/corpus/qasm/controlled_rz_full_turn.qasm new file mode 100644 index 000000000..11da24fa7 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/controlled_rz_full_turn.qasm @@ -0,0 +1,6 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[2] q; +h q[0]; +h q[1]; +crz(pi*2) q[0], q[1]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/controlled_small_angle_k30.qasm b/wai/quantum-cross-simulator/corpus/qasm/controlled_small_angle_k30.qasm new file mode 100644 index 000000000..818d398d5 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/controlled_small_angle_k30.qasm @@ -0,0 +1,6 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[2] q; +h q[0]; +h q[1]; +cp(pi/536870912) q[0], q[1]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/dyadic_n10_k30.qasm b/wai/quantum-cross-simulator/corpus/qasm/dyadic_n10_k30.qasm new file mode 100644 index 000000000..582dce501 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/dyadic_n10_k30.qasm @@ -0,0 +1,438 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[10] q; +ry(pi*1941153179/1073741824) q[0]; +ry(pi*119997061/1073741824) q[1]; +rz(pi*3063532941/2147483648) q[2]; +ry(pi*2039996545/2147483648) q[3]; +rz(pi*935817721/536870912) q[4]; +ry(pi*105293621/536870912) q[5]; +rz(pi*1998922301/2147483648) q[6]; +rx(pi*4210031687/2147483648) q[7]; +ry(pi*984753229/536870912) q[8]; +rz(pi*1708466781/1073741824) q[9]; +cz q[0], q[1]; +cz q[2], q[3]; +cz q[4], q[5]; +cz q[6], q[7]; +cz q[8], q[9]; +rz(pi*3567105099/2147483648) q[0]; +rx(pi*3126821343/2147483648) q[1]; +rx(pi*2655085277/2147483648) q[2]; +rz(pi*324771633/268435456) q[3]; +rz(pi*2139264975/2147483648) q[4]; +rx(pi*252928877/268435456) q[5]; +rz(pi*1073337187/536870912) q[6]; +ry(pi*11373355/16777216) q[7]; +rz(pi*805057597/1073741824) q[8]; +rz(pi*1333639267/1073741824) q[9]; +cz q[1], q[2]; +cz q[3], q[4]; +cz q[5], q[6]; +cz q[7], q[8]; +ry(pi*4120338771/2147483648) q[0]; +rx(pi*3814404455/2147483648) q[1]; +rx(pi*3429367781/2147483648) q[2]; +ry(pi*172496455/268435456) q[3]; +ry(pi*991161955/1073741824) q[4]; +ry(pi*75207485/67108864) q[5]; +rx(pi*1492530901/1073741824) q[6]; +rz(pi*751435565/536870912) q[7]; +rx(pi*725678501/536870912) q[8]; +rx(pi*1419450953/2147483648) q[9]; +cz q[0], q[1]; +cz q[2], q[3]; +cz q[4], q[5]; +cz q[6], q[7]; +cz q[8], q[9]; +ry(pi*2213639871/2147483648) q[0]; +ry(pi*3262171/536870912) q[1]; +rz(pi*4028792267/2147483648) q[2]; +rz(pi*141559607/134217728) q[3]; +rz(pi*984804837/536870912) q[4]; +rx(pi*108931223/2147483648) q[5]; +rz(pi*307397381/1073741824) q[6]; +ry(pi*82613/268435456) q[7]; +rx(pi*161954959/2147483648) q[8]; +rx(pi*1899147053/2147483648) q[9]; +cz q[1], q[2]; +cz q[3], q[4]; +cz q[5], q[6]; +cz q[7], q[8]; +ry(pi*2952927589/2147483648) q[0]; +rz(pi*2527632547/2147483648) q[1]; +rz(pi*114138569/1073741824) q[2]; +rz(pi*3426399319/2147483648) q[3]; +ry(pi*175232739/536870912) q[4]; +rx(pi*1605165245/1073741824) q[5]; +rx(pi*405860319/1073741824) q[6]; +rz(pi*1361074205/1073741824) q[7]; +ry(pi*778448387/1073741824) q[8]; +rx(pi*2519248789/2147483648) q[9]; +cz q[0], q[1]; +cz q[2], q[3]; +cz q[4], q[5]; +cz q[6], q[7]; +cz q[8], q[9]; +rx(pi*1469149425/1073741824) q[0]; +rx(pi*2667104105/2147483648) q[1]; +rx(pi*943031235/2147483648) q[2]; +rx(pi*787012425/536870912) q[3]; +rx(pi*2580018157/2147483648) q[4]; +rz(pi*554033637/2147483648) q[5]; +rz(pi*3404419683/2147483648) q[6]; +rz(pi*804692519/1073741824) q[7]; +ry(pi*628525347/2147483648) q[8]; +rz(pi*1505029159/2147483648) q[9]; +cz q[1], q[2]; +cz q[3], q[4]; +cz q[5], q[6]; +cz q[7], q[8]; +rx(pi*890718525/536870912) q[0]; +rx(pi*2031694693/2147483648) q[1]; +rz(pi*288696011/268435456) q[2]; +rz(pi*1667583923/2147483648) q[3]; +ry(pi*1955963883/2147483648) q[4]; +rz(pi*254771191/2147483648) q[5]; +ry(pi*232954567/536870912) q[6]; +rz(pi*2088097457/1073741824) q[7]; +rx(pi*872373751/1073741824) q[8]; +ry(pi*621444251/1073741824) q[9]; +cz q[0], q[1]; +cz q[2], q[3]; +cz q[4], q[5]; +cz q[6], q[7]; +cz q[8], q[9]; +rx(pi*10284775/2147483648) q[0]; +rx(pi*1774331001/1073741824) q[1]; +ry(pi*719092869/536870912) q[2]; +rz(pi*895476647/536870912) q[3]; +ry(pi*215526359/268435456) q[4]; +ry(pi*1020471295/2147483648) q[5]; +rz(pi*533716009/268435456) q[6]; +rx(pi*1074555853/1073741824) q[7]; +ry(pi*1065755031/1073741824) q[8]; +ry(pi*704881689/536870912) q[9]; +cz q[1], q[2]; +cz q[3], q[4]; +cz q[5], q[6]; +cz q[7], q[8]; +ry(pi*3584482667/2147483648) q[0]; +rx(pi*323265143/2147483648) q[1]; +ry(pi*2839491089/2147483648) q[2]; +ry(pi*4290249761/2147483648) q[3]; +rx(pi*2428118697/2147483648) q[4]; +rx(pi*171514917/536870912) q[5]; +rz(pi*1607931015/2147483648) q[6]; +ry(pi*1479683809/1073741824) q[7]; +rx(pi*120506171/536870912) q[8]; +rz(pi*1431636037/2147483648) q[9]; +cz q[0], q[1]; +cz q[2], q[3]; +cz q[4], q[5]; +cz q[6], q[7]; +cz q[8], q[9]; +ry(pi*1726293527/1073741824) q[0]; +ry(pi*976577969/536870912) q[1]; +rx(pi*1006811523/2147483648) q[2]; +ry(pi*1855146299/2147483648) q[3]; +rz(pi*1885900151/2147483648) q[4]; +rz(pi*2781206329/2147483648) q[5]; +ry(pi*407481031/1073741824) q[6]; +rz(pi*391803635/2147483648) q[7]; +ry(pi*159662161/1073741824) q[8]; +rz(pi*4253253587/2147483648) q[9]; +cz q[1], q[2]; +cz q[3], q[4]; +cz q[5], q[6]; +cz q[7], q[8]; +ry(pi*618877475/2147483648) q[0]; +ry(pi*1127016225/2147483648) q[1]; +rx(pi*371995025/536870912) q[2]; +ry(pi*148148615/134217728) q[3]; +rx(pi*2624172449/2147483648) q[4]; +rz(pi*447275715/268435456) q[5]; +rz(pi*15875021/67108864) q[6]; +rx(pi*4229624159/2147483648) q[7]; +ry(pi*2214503617/2147483648) q[8]; +rz(pi*1924133437/1073741824) q[9]; +cz q[0], q[1]; +cz q[2], q[3]; +cz q[4], q[5]; +cz q[6], q[7]; +cz q[8], q[9]; +rz(pi*911892501/536870912) q[0]; +rz(pi*739312313/2147483648) q[1]; +rz(pi*480726481/268435456) q[2]; +rx(pi*2620465435/2147483648) q[3]; +ry(pi*3740402155/2147483648) q[4]; +rx(pi*2282790127/2147483648) q[5]; +rz(pi*3926442713/2147483648) q[6]; +ry(pi*556281011/536870912) q[7]; +ry(pi*231984895/536870912) q[8]; +rx(pi*1086334105/2147483648) q[9]; +cz q[1], q[2]; +cz q[3], q[4]; +cz q[5], q[6]; +cz q[7], q[8]; +ry(pi*2929434999/2147483648) q[0]; +ry(pi*406393045/268435456) q[1]; +ry(pi*1843364849/1073741824) q[2]; +rx(pi*39188317/67108864) q[3]; +rz(pi*2012505203/1073741824) q[4]; +rz(pi*850057741/1073741824) q[5]; +rz(pi*1148963221/1073741824) q[6]; +rx(pi*3330026959/2147483648) q[7]; +rz(pi*2740089857/2147483648) q[8]; +rz(pi*942502833/1073741824) q[9]; +cz q[0], q[1]; +cz q[2], q[3]; +cz q[4], q[5]; +cz q[6], q[7]; +cz q[8], q[9]; +rz(pi*386322983/268435456) q[0]; +rz(pi*147148907/134217728) q[1]; +ry(pi*670736637/2147483648) q[2]; +rz(pi*985247413/1073741824) q[3]; +ry(pi*3485006673/2147483648) q[4]; +rx(pi*209816259/134217728) q[5]; +rz(pi*48310643/33554432) q[6]; +rx(pi*181604235/134217728) q[7]; +ry(pi*921731051/2147483648) q[8]; +rz(pi*2608445519/2147483648) q[9]; +cz q[1], q[2]; +cz q[3], q[4]; +cz q[5], q[6]; +cz q[7], q[8]; +ry(pi*32552801/536870912) q[0]; +rx(pi*1104409363/2147483648) q[1]; +rx(pi*988294965/1073741824) q[2]; +rx(pi*2054409957/2147483648) q[3]; +rz(pi*2711859909/2147483648) q[4]; +rx(pi*116083119/268435456) q[5]; +rx(pi*1743949355/1073741824) q[6]; +rx(pi*402239801/268435456) q[7]; +rz(pi*3039941513/2147483648) q[8]; +rz(pi*1114622313/1073741824) q[9]; +cz q[0], q[1]; +cz q[2], q[3]; +cz q[4], q[5]; +cz q[6], q[7]; +cz q[8], q[9]; +rx(pi*1227638855/2147483648) q[0]; +ry(pi*10968099/268435456) q[1]; +rz(pi*462028963/2147483648) q[2]; +rz(pi*3714794167/2147483648) q[3]; +rx(pi*715349233/1073741824) q[4]; +rz(pi*3185319963/2147483648) q[5]; +rx(pi*705957071/2147483648) q[6]; +rx(pi*595007529/2147483648) q[7]; +ry(pi*279375267/1073741824) q[8]; +rz(pi*87583445/1073741824) q[9]; +cz q[1], q[2]; +cz q[3], q[4]; +cz q[5], q[6]; +cz q[7], q[8]; +rz(pi*24625517/536870912) q[0]; +rx(pi*3422082077/2147483648) q[1]; +ry(pi*2676132571/2147483648) q[2]; +rx(pi*764339397/1073741824) q[3]; +ry(pi*686752821/536870912) q[4]; +ry(pi*5813757/1073741824) q[5]; +rx(pi*670620271/536870912) q[6]; +rx(pi*4261302471/2147483648) q[7]; +rx(pi*889646205/1073741824) q[8]; +ry(pi*773814073/2147483648) q[9]; +cz q[0], q[1]; +cz q[2], q[3]; +cz q[4], q[5]; +cz q[6], q[7]; +cz q[8], q[9]; +rx(pi*3960060291/2147483648) q[0]; +rz(pi*4060650525/2147483648) q[1]; +ry(pi*1023099549/2147483648) q[2]; +rx(pi*2135991693/2147483648) q[3]; +ry(pi*1138707957/2147483648) q[4]; +rz(pi*2467173715/2147483648) q[5]; +ry(pi*1276556955/1073741824) q[6]; +rx(pi*174427379/1073741824) q[7]; +rx(pi*326732175/536870912) q[8]; +ry(pi*6703837/134217728) q[9]; +cz q[1], q[2]; +cz q[3], q[4]; +cz q[5], q[6]; +cz q[7], q[8]; +rx(pi*1057017407/536870912) q[0]; +ry(pi*1157822195/2147483648) q[1]; +ry(pi*123969639/536870912) q[2]; +rz(pi*2047541977/1073741824) q[3]; +rz(pi*1190876629/2147483648) q[4]; +rx(pi*3631495247/2147483648) q[5]; +ry(pi*65822687/1073741824) q[6]; +ry(pi*2407192861/2147483648) q[7]; +ry(pi*61268133/268435456) q[8]; +rz(pi*1208389431/2147483648) q[9]; +cz q[0], q[1]; +cz q[2], q[3]; +cz q[4], q[5]; +cz q[6], q[7]; +cz q[8], q[9]; +rz(pi*3507247325/2147483648) q[0]; +rz(pi*2365643163/2147483648) q[1]; +rx(pi*157401111/134217728) q[2]; +rx(pi*2269570345/2147483648) q[3]; +rx(pi*817567773/536870912) q[4]; +ry(pi*1732811843/2147483648) q[5]; +ry(pi*87568283/536870912) q[6]; +rx(pi*1780292283/2147483648) q[7]; +rz(pi*2042119601/2147483648) q[8]; +ry(pi*1005996591/536870912) q[9]; +cz q[1], q[2]; +cz q[3], q[4]; +cz q[5], q[6]; +cz q[7], q[8]; +rz(pi*1035540661/1073741824) q[0]; +ry(pi*1811875041/2147483648) q[1]; +ry(pi*1698663811/2147483648) q[2]; +rz(pi*2239444687/2147483648) q[3]; +ry(pi*3640446737/2147483648) q[4]; +rz(pi*3166364633/2147483648) q[5]; +rx(pi*1139860717/2147483648) q[6]; +rx(pi*70857867/536870912) q[7]; +rx(pi*1460890169/1073741824) q[8]; +rx(pi*1726063499/1073741824) q[9]; +cz q[0], q[1]; +cz q[2], q[3]; +cz q[4], q[5]; +cz q[6], q[7]; +cz q[8], q[9]; +rz(pi*1440806127/1073741824) q[0]; +rx(pi*2359970853/2147483648) q[1]; +rx(pi*1295598023/1073741824) q[2]; +rz(pi*15944483/33554432) q[3]; +rz(pi*1730057523/1073741824) q[4]; +ry(pi*454348629/1073741824) q[5]; +rz(pi*173694203/134217728) q[6]; +rz(pi*4056674379/2147483648) q[7]; +ry(pi*830292337/536870912) q[8]; +rz(pi*528516493/1073741824) q[9]; +cz q[1], q[2]; +cz q[3], q[4]; +cz q[5], q[6]; +cz q[7], q[8]; +rx(pi*1511383787/2147483648) q[0]; +rx(pi*2984571169/2147483648) q[1]; +ry(pi*3706064427/2147483648) q[2]; +rz(pi*436593985/2147483648) q[3]; +ry(pi*481693285/268435456) q[4]; +rx(pi*1830374583/2147483648) q[5]; +rx(pi*67980271/134217728) q[6]; +rz(pi*949211883/536870912) q[7]; +ry(pi*3936181671/2147483648) q[8]; +ry(pi*94502799/268435456) q[9]; +cz q[0], q[1]; +cz q[2], q[3]; +cz q[4], q[5]; +cz q[6], q[7]; +cz q[8], q[9]; +ry(pi*3247341075/2147483648) q[0]; +ry(pi*127508707/2147483648) q[1]; +rz(pi*111505215/67108864) q[2]; +ry(pi*1407757371/2147483648) q[3]; +rx(pi*329323497/1073741824) q[4]; +rz(pi*393559227/1073741824) q[5]; +rx(pi*236508355/268435456) q[6]; +ry(pi*1921350755/2147483648) q[7]; +rx(pi*1390885299/1073741824) q[8]; +ry(pi*126016259/134217728) q[9]; +cz q[1], q[2]; +cz q[3], q[4]; +cz q[5], q[6]; +cz q[7], q[8]; +rx(pi*387489097/1073741824) q[0]; +rz(pi*1197071071/2147483648) q[1]; +rx(pi*2582466421/2147483648) q[2]; +rx(pi*186659321/2147483648) q[3]; +ry(pi*768210895/536870912) q[4]; +ry(pi*2607653319/2147483648) q[5]; +ry(pi*29811191/536870912) q[6]; +ry(pi*655295157/1073741824) q[7]; +ry(pi*3304934753/2147483648) q[8]; +rx(pi*1475060307/1073741824) q[9]; +cz q[0], q[1]; +cz q[2], q[3]; +cz q[4], q[5]; +cz q[6], q[7]; +cz q[8], q[9]; +ry(pi*97704399/1073741824) q[0]; +rz(pi*1048184543/2147483648) q[1]; +rz(pi*3626660413/2147483648) q[2]; +ry(pi*3727720599/2147483648) q[3]; +ry(pi*4127105863/2147483648) q[4]; +rz(pi*897273481/1073741824) q[5]; +rz(pi*681064523/2147483648) q[6]; +ry(pi*226389307/134217728) q[7]; +ry(pi*23794401/33554432) q[8]; +rz(pi*3933242291/2147483648) q[9]; +cz q[1], q[2]; +cz q[3], q[4]; +cz q[5], q[6]; +cz q[7], q[8]; +rx(pi*3210135961/2147483648) q[0]; +ry(pi*279960603/1073741824) q[1]; +rx(pi*743956631/536870912) q[2]; +rx(pi*71819163/134217728) q[3]; +ry(pi*3352850711/2147483648) q[4]; +ry(pi*183450343/2147483648) q[5]; +rz(pi*500536989/268435456) q[6]; +rx(pi*1891049743/1073741824) q[7]; +ry(pi*207066025/268435456) q[8]; +rz(pi*2685681/16777216) q[9]; +cz q[0], q[1]; +cz q[2], q[3]; +cz q[4], q[5]; +cz q[6], q[7]; +cz q[8], q[9]; +rz(pi*3441326185/2147483648) q[0]; +rx(pi*784292239/2147483648) q[1]; +rx(pi*3538757235/2147483648) q[2]; +rx(pi*3590134657/2147483648) q[3]; +rx(pi*800462907/2147483648) q[4]; +rx(pi*820381419/536870912) q[5]; +rz(pi*1531861813/1073741824) q[6]; +rz(pi*2349299809/2147483648) q[7]; +rx(pi*1708628563/2147483648) q[8]; +rx(pi*1865803213/1073741824) q[9]; +cz q[1], q[2]; +cz q[3], q[4]; +cz q[5], q[6]; +cz q[7], q[8]; +rz(pi*1543205717/1073741824) q[0]; +rx(pi*304391543/1073741824) q[1]; +rx(pi*3102337495/2147483648) q[2]; +rx(pi*1718671631/1073741824) q[3]; +ry(pi*269020645/268435456) q[4]; +rz(pi*1889857073/2147483648) q[5]; +rz(pi*1025175913/536870912) q[6]; +rx(pi*8447111/67108864) q[7]; +rz(pi*2395023211/2147483648) q[8]; +rz(pi*647733097/2147483648) q[9]; +cz q[0], q[1]; +cz q[2], q[3]; +cz q[4], q[5]; +cz q[6], q[7]; +cz q[8], q[9]; +rx(pi*1487674381/1073741824) q[0]; +ry(pi*2694626879/2147483648) q[1]; +rx(pi*17496457/134217728) q[2]; +rx(pi*778144931/2147483648) q[3]; +rz(pi*717040113/2147483648) q[4]; +rz(pi*2060004691/2147483648) q[5]; +rx(pi*3925513333/2147483648) q[6]; +rz(pi*1956335501/2147483648) q[7]; +rz(pi*273172691/536870912) q[8]; +ry(pi*744202719/1073741824) q[9]; +cz q[1], q[2]; +cz q[3], q[4]; +cz q[5], q[6]; +cz q[7], q[8]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/dyadic_n6_k20.qasm b/wai/quantum-cross-simulator/corpus/qasm/dyadic_n6_k20.qasm new file mode 100644 index 000000000..17ccd9f7c --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/dyadic_n6_k20.qasm @@ -0,0 +1,173 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[6] q; +rx(pi*2857/16384) q[0]; +ry(pi*57095/32768) q[1]; +rz(pi*23127/16384) q[2]; +rz(pi*58865/32768) q[3]; +ry(pi*16363/8192) q[4]; +rx(pi*23313/32768) q[5]; +cz q[0], q[1]; +cz q[2], q[3]; +cz q[4], q[5]; +rx(pi*17575/32768) q[0]; +rx(pi*22163/16384) q[1]; +rx(pi*44751/32768) q[2]; +ry(pi*2473/32768) q[3]; +rz(pi*38551/32768) q[4]; +rz(pi*3521/8192) q[5]; +cz q[1], q[2]; +cz q[3], q[4]; +rx(pi*62477/32768) q[0]; +rz(pi*26675/32768) q[1]; +rx(pi*50073/32768) q[2]; +rx(pi*4487/8192) q[3]; +rz(pi*7239/8192) q[4]; +ry(pi*45613/32768) q[5]; +cz q[0], q[1]; +cz q[2], q[3]; +cz q[4], q[5]; +ry(pi*22805/16384) q[0]; +rz(pi*14591/32768) q[1]; +rx(pi*871/32768) q[2]; +rx(pi*32387/16384) q[3]; +rz(pi*51329/32768) q[4]; +ry(pi*60931/32768) q[5]; +cz q[1], q[2]; +cz q[3], q[4]; +rx(pi*32201/16384) q[0]; +rz(pi*5601/8192) q[1]; +rx(pi*2651/8192) q[2]; +rz(pi*55643/32768) q[3]; +rz(pi*14209/8192) q[4]; +rx(pi*5039/8192) q[5]; +cz q[0], q[1]; +cz q[2], q[3]; +cz q[4], q[5]; +rx(pi*47879/32768) q[0]; +rz(pi*62789/32768) q[1]; +ry(pi*3275/32768) q[2]; +ry(pi*51443/32768) q[3]; +rx(pi*3733/32768) q[4]; +rx(pi*5977/16384) q[5]; +cz q[1], q[2]; +cz q[3], q[4]; +rx(pi*3203/16384) q[0]; +rz(pi*36245/32768) q[1]; +rz(pi*62069/32768) q[2]; +rx(pi*6335/32768) q[3]; +rz(pi*3793/32768) q[4]; +ry(pi*29391/16384) q[5]; +cz q[0], q[1]; +cz q[2], q[3]; +cz q[4], q[5]; +rz(pi*11237/8192) q[0]; +ry(pi*48759/32768) q[1]; +rz(pi*62119/32768) q[2]; +rx(pi*46915/32768) q[3]; +rx(pi*13091/8192) q[4]; +rz(pi*7659/4096) q[5]; +cz q[1], q[2]; +cz q[3], q[4]; +rx(pi*767/512) q[0]; +rx(pi*42297/32768) q[1]; +rz(pi*9983/16384) q[2]; +ry(pi*45335/32768) q[3]; +rx(pi*25345/16384) q[4]; +rx(pi*55635/32768) q[5]; +cz q[0], q[1]; +cz q[2], q[3]; +cz q[4], q[5]; +ry(pi*63595/32768) q[0]; +ry(pi*40691/32768) q[1]; +ry(pi*1289/4096) q[2]; +ry(pi*1213/2048) q[3]; +ry(pi*7233/4096) q[4]; +rz(pi*29739/32768) q[5]; +cz q[1], q[2]; +cz q[3], q[4]; +rx(pi*23079/16384) q[0]; +rx(pi*37417/32768) q[1]; +rx(pi*39465/32768) q[2]; +rz(pi*50149/32768) q[3]; +rz(pi*6493/8192) q[4]; +rx(pi*16443/32768) q[5]; +cz q[0], q[1]; +cz q[2], q[3]; +cz q[4], q[5]; +ry(pi*15671/16384) q[0]; +rx(pi*8531/8192) q[1]; +rz(pi*27691/16384) q[2]; +ry(pi*24469/32768) q[3]; +rz(pi*23961/16384) q[4]; +rz(pi*15367/16384) q[5]; +cz q[1], q[2]; +cz q[3], q[4]; +ry(pi*7525/4096) q[0]; +ry(pi*18509/16384) q[1]; +rz(pi*2917/16384) q[2]; +ry(pi*13989/16384) q[3]; +rx(pi*17649/16384) q[4]; +ry(pi*23633/32768) q[5]; +cz q[0], q[1]; +cz q[2], q[3]; +cz q[4], q[5]; +rx(pi*51421/32768) q[0]; +ry(pi*64749/32768) q[1]; +ry(pi*2765/16384) q[2]; +rx(pi*17049/32768) q[3]; +rz(pi*2099/16384) q[4]; +ry(pi*10731/32768) q[5]; +cz q[1], q[2]; +cz q[3], q[4]; +ry(pi*12119/16384) q[0]; +rz(pi*3607/16384) q[1]; +ry(pi*50003/32768) q[2]; +rx(pi*29473/16384) q[3]; +ry(pi*615/4096) q[4]; +ry(pi*23359/16384) q[5]; +cz q[0], q[1]; +cz q[2], q[3]; +cz q[4], q[5]; +rz(pi*20249/32768) q[0]; +rz(pi*19399/16384) q[1]; +rx(pi*25997/32768) q[2]; +rx(pi*603/512) q[3]; +ry(pi*4993/16384) q[4]; +ry(pi*4405/32768) q[5]; +cz q[1], q[2]; +cz q[3], q[4]; +ry(pi*2493/32768) q[0]; +rx(pi*5507/4096) q[1]; +rz(pi*2619/4096) q[2]; +rx(pi*42829/32768) q[3]; +rz(pi*2861/2048) q[4]; +rx(pi*21319/16384) q[5]; +cz q[0], q[1]; +cz q[2], q[3]; +cz q[4], q[5]; +rz(pi*11563/32768) q[0]; +rx(pi*2583/16384) q[1]; +rz(pi*40013/32768) q[2]; +rz(pi*11511/16384) q[3]; +rz(pi*29031/16384) q[4]; +rx(pi*21071/32768) q[5]; +cz q[1], q[2]; +cz q[3], q[4]; +ry(pi*26803/32768) q[0]; +ry(pi*327/2048) q[1]; +rz(pi*12821/8192) q[2]; +rx(pi*11509/8192) q[3]; +rz(pi*1039/8192) q[4]; +ry(pi*50419/32768) q[5]; +cz q[0], q[1]; +cz q[2], q[3]; +cz q[4], q[5]; +rz(pi*2103/32768) q[0]; +ry(pi*10565/8192) q[1]; +rz(pi*48835/32768) q[2]; +rx(pi*12237/8192) q[3]; +rz(pi*26015/16384) q[4]; +ry(pi*31421/16384) q[5]; +cz q[1], q[2]; +cz q[3], q[4]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/empty_register.qasm b/wai/quantum-cross-simulator/corpus/qasm/empty_register.qasm new file mode 100644 index 000000000..21d091b6e --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/empty_register.qasm @@ -0,0 +1,3 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[3] q; diff --git a/wai/quantum-cross-simulator/corpus/qasm/feedback_flip.qasm b/wai/quantum-cross-simulator/corpus/qasm/feedback_flip.qasm new file mode 100644 index 000000000..2e3845add --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/feedback_flip.qasm @@ -0,0 +1,8 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +bit[2] c; +h q[0]; +c[0] = measure q[0]; +if (c[0] == 1) { x q[0]; } +c[1] = measure q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/full_turn_p_t1_0.qasm b/wai/quantum-cross-simulator/corpus/qasm/full_turn_p_t1_0.qasm new file mode 100644 index 000000000..a48e4d802 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/full_turn_p_t1_0.qasm @@ -0,0 +1,6 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +p(pi*2) q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/full_turn_rx_t1_0.qasm b/wai/quantum-cross-simulator/corpus/qasm/full_turn_rx_t1_0.qasm new file mode 100644 index 000000000..104f5c9b0 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/full_turn_rx_t1_0.qasm @@ -0,0 +1,6 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +rx(pi*2) q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/full_turn_ry_t1_0.qasm b/wai/quantum-cross-simulator/corpus/qasm/full_turn_ry_t1_0.qasm new file mode 100644 index 000000000..d42a3be0f --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/full_turn_ry_t1_0.qasm @@ -0,0 +1,6 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +ry(pi*2) q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/full_turn_rz_t1_0.qasm b/wai/quantum-cross-simulator/corpus/qasm/full_turn_rz_t1_0.qasm new file mode 100644 index 000000000..60b4bd138 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/full_turn_rz_t1_0.qasm @@ -0,0 +1,6 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +rz(pi*2) q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/full_turn_rz_t2_0.qasm b/wai/quantum-cross-simulator/corpus/qasm/full_turn_rz_t2_0.qasm new file mode 100644 index 000000000..3e21a42c6 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/full_turn_rz_t2_0.qasm @@ -0,0 +1,6 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +rz(pi*4) q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/full_turn_u_t1_0.qasm b/wai/quantum-cross-simulator/corpus/qasm/full_turn_u_t1_0.qasm new file mode 100644 index 000000000..2f0e07436 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/full_turn_u_t1_0.qasm @@ -0,0 +1,6 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +U(pi*2, 0, 0) q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/gate_c2p.qasm b/wai/quantum-cross-simulator/corpus/qasm/gate_c2p.qasm new file mode 100644 index 000000000..9aa38e3b8 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/gate_c2p.qasm @@ -0,0 +1,10 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[3] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +ry(pi/16) q[1]; +rz(pi*3/64) q[1]; +ry(pi/32) q[2]; +rz(pi*3/128) q[2]; +ctrl(2) @ p(pi*3/64) q[0], q[1], q[2]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/gate_c2ry.qasm b/wai/quantum-cross-simulator/corpus/qasm/gate_c2ry.qasm new file mode 100644 index 000000000..735d6704b --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/gate_c2ry.qasm @@ -0,0 +1,10 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[3] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +ry(pi/16) q[1]; +rz(pi*3/64) q[1]; +ry(pi/32) q[2]; +rz(pi*3/128) q[2]; +ctrl(2) @ ry(pi*3/64) q[0], q[1], q[2]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/gate_c2rz.qasm b/wai/quantum-cross-simulator/corpus/qasm/gate_c2rz.qasm new file mode 100644 index 000000000..e17813b7d --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/gate_c2rz.qasm @@ -0,0 +1,10 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[3] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +ry(pi/16) q[1]; +rz(pi*3/64) q[1]; +ry(pi/32) q[2]; +rz(pi*3/128) q[2]; +ctrl(2) @ rz(pi*3/64) q[0], q[1], q[2]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/gate_c3x.qasm b/wai/quantum-cross-simulator/corpus/qasm/gate_c3x.qasm new file mode 100644 index 000000000..db5abf41f --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/gate_c3x.qasm @@ -0,0 +1,12 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[4] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +ry(pi/16) q[1]; +rz(pi*3/64) q[1]; +ry(pi/32) q[2]; +rz(pi*3/128) q[2]; +ry(pi/64) q[3]; +rz(pi*3/256) q[3]; +ctrl(3) @ x q[0], q[1], q[2], q[3]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/gate_c3z.qasm b/wai/quantum-cross-simulator/corpus/qasm/gate_c3z.qasm new file mode 100644 index 000000000..f6a13fd9c --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/gate_c3z.qasm @@ -0,0 +1,12 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[4] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +ry(pi/16) q[1]; +rz(pi*3/64) q[1]; +ry(pi/32) q[2]; +rz(pi*3/128) q[2]; +ry(pi/64) q[3]; +rz(pi*3/256) q[3]; +ctrl(3) @ z q[0], q[1], q[2], q[3]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/gate_ccx.qasm b/wai/quantum-cross-simulator/corpus/qasm/gate_ccx.qasm new file mode 100644 index 000000000..e55befc2a --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/gate_ccx.qasm @@ -0,0 +1,10 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[3] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +ry(pi/16) q[1]; +rz(pi*3/64) q[1]; +ry(pi/32) q[2]; +rz(pi*3/128) q[2]; +ccx q[0], q[1], q[2]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/gate_ccz.qasm b/wai/quantum-cross-simulator/corpus/qasm/gate_ccz.qasm new file mode 100644 index 000000000..3dc254ce3 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/gate_ccz.qasm @@ -0,0 +1,10 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[3] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +ry(pi/16) q[1]; +rz(pi*3/64) q[1]; +ry(pi/32) q[2]; +rz(pi*3/128) q[2]; +ctrl(2) @ z q[0], q[1], q[2]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/gate_ch.qasm b/wai/quantum-cross-simulator/corpus/qasm/gate_ch.qasm new file mode 100644 index 000000000..ee4c5fa54 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/gate_ch.qasm @@ -0,0 +1,8 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[2] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +ry(pi/16) q[1]; +rz(pi*3/64) q[1]; +ch q[0], q[1]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/gate_cp.qasm b/wai/quantum-cross-simulator/corpus/qasm/gate_cp.qasm new file mode 100644 index 000000000..3d637d2fa --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/gate_cp.qasm @@ -0,0 +1,8 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[2] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +ry(pi/16) q[1]; +rz(pi*3/64) q[1]; +cp(pi*3/64) q[0], q[1]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/gate_crx.qasm b/wai/quantum-cross-simulator/corpus/qasm/gate_crx.qasm new file mode 100644 index 000000000..1a974bc20 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/gate_crx.qasm @@ -0,0 +1,8 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[2] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +ry(pi/16) q[1]; +rz(pi*3/64) q[1]; +crx(pi*3/64) q[0], q[1]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/gate_cry.qasm b/wai/quantum-cross-simulator/corpus/qasm/gate_cry.qasm new file mode 100644 index 000000000..e21838634 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/gate_cry.qasm @@ -0,0 +1,8 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[2] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +ry(pi/16) q[1]; +rz(pi*3/64) q[1]; +cry(pi*3/64) q[0], q[1]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/gate_crz.qasm b/wai/quantum-cross-simulator/corpus/qasm/gate_crz.qasm new file mode 100644 index 000000000..1d3b0a649 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/gate_crz.qasm @@ -0,0 +1,8 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[2] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +ry(pi/16) q[1]; +rz(pi*3/64) q[1]; +crz(pi*3/64) q[0], q[1]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/gate_cswap.qasm b/wai/quantum-cross-simulator/corpus/qasm/gate_cswap.qasm new file mode 100644 index 000000000..25e53bdf8 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/gate_cswap.qasm @@ -0,0 +1,10 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[3] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +ry(pi/16) q[1]; +rz(pi*3/64) q[1]; +ry(pi/32) q[2]; +rz(pi*3/128) q[2]; +cswap q[0], q[1], q[2]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/gate_csx.qasm b/wai/quantum-cross-simulator/corpus/qasm/gate_csx.qasm new file mode 100644 index 000000000..3c3acc203 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/gate_csx.qasm @@ -0,0 +1,8 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[2] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +ry(pi/16) q[1]; +rz(pi*3/64) q[1]; +ctrl(1) @ sx q[0], q[1]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/gate_cu.qasm b/wai/quantum-cross-simulator/corpus/qasm/gate_cu.qasm new file mode 100644 index 000000000..3c9edb024 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/gate_cu.qasm @@ -0,0 +1,8 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[2] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +ry(pi/16) q[1]; +rz(pi*3/64) q[1]; +cu(pi*3/64, pi*5/128, pi*7/256, pi/16) q[0], q[1]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/gate_cx.qasm b/wai/quantum-cross-simulator/corpus/qasm/gate_cx.qasm new file mode 100644 index 000000000..cf1b97e27 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/gate_cx.qasm @@ -0,0 +1,8 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[2] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +ry(pi/16) q[1]; +rz(pi*3/64) q[1]; +cx q[0], q[1]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/gate_cy.qasm b/wai/quantum-cross-simulator/corpus/qasm/gate_cy.qasm new file mode 100644 index 000000000..de2bc257e --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/gate_cy.qasm @@ -0,0 +1,8 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[2] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +ry(pi/16) q[1]; +rz(pi*3/64) q[1]; +cy q[0], q[1]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/gate_cz.qasm b/wai/quantum-cross-simulator/corpus/qasm/gate_cz.qasm new file mode 100644 index 000000000..35799eaa9 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/gate_cz.qasm @@ -0,0 +1,8 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[2] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +ry(pi/16) q[1]; +rz(pi*3/64) q[1]; +cz q[0], q[1]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/gate_gphase_controlled.qasm b/wai/quantum-cross-simulator/corpus/qasm/gate_gphase_controlled.qasm new file mode 100644 index 000000000..e932f21c0 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/gate_gphase_controlled.qasm @@ -0,0 +1,8 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[2] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +ry(pi/16) q[1]; +rz(pi*3/64) q[1]; +ctrl(1) @ gphase(pi*3/64) q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/gate_h.qasm b/wai/quantum-cross-simulator/corpus/qasm/gate_h.qasm new file mode 100644 index 000000000..35f3089b2 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/gate_h.qasm @@ -0,0 +1,6 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +h q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/gate_id.qasm b/wai/quantum-cross-simulator/corpus/qasm/gate_id.qasm new file mode 100644 index 000000000..df5064fcc --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/gate_id.qasm @@ -0,0 +1,6 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +id q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/gate_negcx.qasm b/wai/quantum-cross-simulator/corpus/qasm/gate_negcx.qasm new file mode 100644 index 000000000..0a155d307 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/gate_negcx.qasm @@ -0,0 +1,8 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[2] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +ry(pi/16) q[1]; +rz(pi*3/64) q[1]; +negctrl @ x q[0], q[1]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/gate_p.qasm b/wai/quantum-cross-simulator/corpus/qasm/gate_p.qasm new file mode 100644 index 000000000..5db7ed854 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/gate_p.qasm @@ -0,0 +1,6 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +p(pi*3/64) q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/gate_rx.qasm b/wai/quantum-cross-simulator/corpus/qasm/gate_rx.qasm new file mode 100644 index 000000000..4473eddd2 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/gate_rx.qasm @@ -0,0 +1,6 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +rx(pi*3/64) q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/gate_rxx.qasm b/wai/quantum-cross-simulator/corpus/qasm/gate_rxx.qasm new file mode 100644 index 000000000..e663d37a9 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/gate_rxx.qasm @@ -0,0 +1,9 @@ +OPENQASM 3.0; +include "stdgates.inc"; +gate rxx(theta) a, b { h a; h b; cx a, b; rz(theta) b; cx a, b; h a; h b; } +qubit[2] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +ry(pi/16) q[1]; +rz(pi*3/64) q[1]; +rxx(pi*3/64) q[0], q[1]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/gate_ry.qasm b/wai/quantum-cross-simulator/corpus/qasm/gate_ry.qasm new file mode 100644 index 000000000..6bb0a81d9 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/gate_ry.qasm @@ -0,0 +1,6 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +ry(pi*3/64) q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/gate_ryy.qasm b/wai/quantum-cross-simulator/corpus/qasm/gate_ryy.qasm new file mode 100644 index 000000000..f4481884e --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/gate_ryy.qasm @@ -0,0 +1,9 @@ +OPENQASM 3.0; +include "stdgates.inc"; +gate ryy(theta) a, b { rx(pi/2) a; rx(pi/2) b; cx a, b; rz(theta) b; cx a, b; rx(-pi/2) a; rx(-pi/2) b; } +qubit[2] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +ry(pi/16) q[1]; +rz(pi*3/64) q[1]; +ryy(pi*3/64) q[0], q[1]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/gate_rz.qasm b/wai/quantum-cross-simulator/corpus/qasm/gate_rz.qasm new file mode 100644 index 000000000..4e1acf4d1 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/gate_rz.qasm @@ -0,0 +1,6 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +rz(pi*3/64) q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/gate_rzz.qasm b/wai/quantum-cross-simulator/corpus/qasm/gate_rzz.qasm new file mode 100644 index 000000000..d67b053fb --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/gate_rzz.qasm @@ -0,0 +1,9 @@ +OPENQASM 3.0; +include "stdgates.inc"; +gate rzz(theta) a, b { cx a, b; rz(theta) b; cx a, b; } +qubit[2] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +ry(pi/16) q[1]; +rz(pi*3/64) q[1]; +rzz(pi*3/64) q[0], q[1]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/gate_s.qasm b/wai/quantum-cross-simulator/corpus/qasm/gate_s.qasm new file mode 100644 index 000000000..ed6ec12df --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/gate_s.qasm @@ -0,0 +1,6 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +s q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/gate_sdg.qasm b/wai/quantum-cross-simulator/corpus/qasm/gate_sdg.qasm new file mode 100644 index 000000000..81b86f9dc --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/gate_sdg.qasm @@ -0,0 +1,6 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +sdg q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/gate_swap.qasm b/wai/quantum-cross-simulator/corpus/qasm/gate_swap.qasm new file mode 100644 index 000000000..589da2fb4 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/gate_swap.qasm @@ -0,0 +1,8 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[2] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +ry(pi/16) q[1]; +rz(pi*3/64) q[1]; +swap q[0], q[1]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/gate_sx.qasm b/wai/quantum-cross-simulator/corpus/qasm/gate_sx.qasm new file mode 100644 index 000000000..a220a5380 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/gate_sx.qasm @@ -0,0 +1,6 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +sx q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/gate_sxdg.qasm b/wai/quantum-cross-simulator/corpus/qasm/gate_sxdg.qasm new file mode 100644 index 000000000..f7858077e --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/gate_sxdg.qasm @@ -0,0 +1,6 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +inv @ sx q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/gate_t.qasm b/wai/quantum-cross-simulator/corpus/qasm/gate_t.qasm new file mode 100644 index 000000000..143c92da8 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/gate_t.qasm @@ -0,0 +1,6 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +t q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/gate_tdg.qasm b/wai/quantum-cross-simulator/corpus/qasm/gate_tdg.qasm new file mode 100644 index 000000000..e6cf2118e --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/gate_tdg.qasm @@ -0,0 +1,6 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +tdg q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/gate_u.qasm b/wai/quantum-cross-simulator/corpus/qasm/gate_u.qasm new file mode 100644 index 000000000..22ce8cbf1 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/gate_u.qasm @@ -0,0 +1,6 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +U(pi*3/64, pi*5/128, pi*7/256) q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/gate_x.qasm b/wai/quantum-cross-simulator/corpus/qasm/gate_x.qasm new file mode 100644 index 000000000..2400faf7c --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/gate_x.qasm @@ -0,0 +1,6 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +x q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/gate_y.qasm b/wai/quantum-cross-simulator/corpus/qasm/gate_y.qasm new file mode 100644 index 000000000..645d95436 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/gate_y.qasm @@ -0,0 +1,6 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +y q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/gate_z.qasm b/wai/quantum-cross-simulator/corpus/qasm/gate_z.qasm new file mode 100644 index 000000000..317387c20 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/gate_z.qasm @@ -0,0 +1,6 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +ry(pi/8) q[0]; +rz(pi*3/32) q[0]; +z q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/ghz_by_fusion.qasm b/wai/quantum-cross-simulator/corpus/qasm/ghz_by_fusion.qasm new file mode 100644 index 000000000..49cb0d5ba --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/ghz_by_fusion.qasm @@ -0,0 +1,14 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[4] q; +bit[4] c; +h q[0]; +cx q[0], q[1]; +h q[2]; +cx q[2], q[3]; +cx q[1], q[2]; +c[0] = measure q[2]; +if (c[0] == 1) { x q[3]; } +c[1] = measure q[0]; +c[2] = measure q[1]; +c[3] = measure q[3]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/ghz_counts_n8.qasm b/wai/quantum-cross-simulator/corpus/qasm/ghz_counts_n8.qasm new file mode 100644 index 000000000..a369ca371 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/ghz_counts_n8.qasm @@ -0,0 +1,20 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[8] q; +bit[8] c; +h q[0]; +cx q[0], q[1]; +cx q[1], q[2]; +cx q[2], q[3]; +cx q[3], q[4]; +cx q[4], q[5]; +cx q[5], q[6]; +cx q[6], q[7]; +c[0] = measure q[0]; +c[1] = measure q[1]; +c[2] = measure q[2]; +c[3] = measure q[3]; +c[4] = measure q[4]; +c[5] = measure q[5]; +c[6] = measure q[6]; +c[7] = measure q[7]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/ghz_n12.qasm b/wai/quantum-cross-simulator/corpus/qasm/ghz_n12.qasm new file mode 100644 index 000000000..11ccebcf4 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/ghz_n12.qasm @@ -0,0 +1,15 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[12] q; +h q[0]; +cx q[0], q[1]; +cx q[1], q[2]; +cx q[2], q[3]; +cx q[3], q[4]; +cx q[4], q[5]; +cx q[5], q[6]; +cx q[6], q[7]; +cx q[7], q[8]; +cx q[8], q[9]; +cx q[9], q[10]; +cx q[10], q[11]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/ghz_n2.qasm b/wai/quantum-cross-simulator/corpus/qasm/ghz_n2.qasm new file mode 100644 index 000000000..6034bc930 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/ghz_n2.qasm @@ -0,0 +1,5 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[2] q; +h q[0]; +cx q[0], q[1]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/ghz_n3.qasm b/wai/quantum-cross-simulator/corpus/qasm/ghz_n3.qasm new file mode 100644 index 000000000..9d4ac2156 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/ghz_n3.qasm @@ -0,0 +1,6 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[3] q; +h q[0]; +cx q[0], q[1]; +cx q[1], q[2]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/ghz_n5.qasm b/wai/quantum-cross-simulator/corpus/qasm/ghz_n5.qasm new file mode 100644 index 000000000..4f751cbc0 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/ghz_n5.qasm @@ -0,0 +1,8 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[5] q; +h q[0]; +cx q[0], q[1]; +cx q[1], q[2]; +cx q[2], q[3]; +cx q[3], q[4]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/ghz_n8.qasm b/wai/quantum-cross-simulator/corpus/qasm/ghz_n8.qasm new file mode 100644 index 000000000..3d7119aea --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/ghz_n8.qasm @@ -0,0 +1,11 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[8] q; +h q[0]; +cx q[0], q[1]; +cx q[1], q[2]; +cx q[2], q[3]; +cx q[3], q[4]; +cx q[4], q[5]; +cx q[5], q[6]; +cx q[6], q[7]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/grover_counts_n5.qasm b/wai/quantum-cross-simulator/corpus/qasm/grover_counts_n5.qasm new file mode 100644 index 000000000..fbcaa5be5 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/grover_counts_n5.qasm @@ -0,0 +1,118 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[5] q; +bit[5] c; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +x q[2]; +x q[3]; +ctrl(4) @ z q[0], q[1], q[2], q[3], q[4]; +x q[2]; +x q[3]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +ctrl(4) @ z q[0], q[1], q[2], q[3], q[4]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +x q[2]; +x q[3]; +ctrl(4) @ z q[0], q[1], q[2], q[3], q[4]; +x q[2]; +x q[3]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +ctrl(4) @ z q[0], q[1], q[2], q[3], q[4]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +x q[2]; +x q[3]; +ctrl(4) @ z q[0], q[1], q[2], q[3], q[4]; +x q[2]; +x q[3]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +ctrl(4) @ z q[0], q[1], q[2], q[3], q[4]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +x q[2]; +x q[3]; +ctrl(4) @ z q[0], q[1], q[2], q[3], q[4]; +x q[2]; +x q[3]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +ctrl(4) @ z q[0], q[1], q[2], q[3], q[4]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +c[0] = measure q[0]; +c[1] = measure q[1]; +c[2] = measure q[2]; +c[3] = measure q[3]; +c[4] = measure q[4]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/grover_n10.qasm b/wai/quantum-cross-simulator/corpus/qasm/grover_n10.qasm new file mode 100644 index 000000000..6cdb683f7 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/grover_n10.qasm @@ -0,0 +1,1263 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[10] q; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[2]; +x q[4]; +x q[6]; +x q[8]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +ctrl(9) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], q[8], q[9]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +x q[8]; +x q[9]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/grover_n3.qasm b/wai/quantum-cross-simulator/corpus/qasm/grover_n3.qasm new file mode 100644 index 000000000..f1f6e8cc7 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/grover_n3.qasm @@ -0,0 +1,38 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[3] q; +h q[0]; +h q[1]; +h q[2]; +x q[1]; +ctrl(2) @ z q[0], q[1], q[2]; +x q[1]; +h q[0]; +h q[1]; +h q[2]; +x q[0]; +x q[1]; +x q[2]; +ctrl(2) @ z q[0], q[1], q[2]; +x q[0]; +x q[1]; +x q[2]; +h q[0]; +h q[1]; +h q[2]; +x q[1]; +ctrl(2) @ z q[0], q[1], q[2]; +x q[1]; +h q[0]; +h q[1]; +h q[2]; +x q[0]; +x q[1]; +x q[2]; +ctrl(2) @ z q[0], q[1], q[2]; +x q[0]; +x q[1]; +x q[2]; +h q[0]; +h q[1]; +h q[2]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/grover_n5.qasm b/wai/quantum-cross-simulator/corpus/qasm/grover_n5.qasm new file mode 100644 index 000000000..15346e3de --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/grover_n5.qasm @@ -0,0 +1,112 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[5] q; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +x q[2]; +x q[3]; +ctrl(4) @ z q[0], q[1], q[2], q[3], q[4]; +x q[2]; +x q[3]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +ctrl(4) @ z q[0], q[1], q[2], q[3], q[4]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +x q[2]; +x q[3]; +ctrl(4) @ z q[0], q[1], q[2], q[3], q[4]; +x q[2]; +x q[3]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +ctrl(4) @ z q[0], q[1], q[2], q[3], q[4]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +x q[2]; +x q[3]; +ctrl(4) @ z q[0], q[1], q[2], q[3], q[4]; +x q[2]; +x q[3]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +ctrl(4) @ z q[0], q[1], q[2], q[3], q[4]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +x q[2]; +x q[3]; +ctrl(4) @ z q[0], q[1], q[2], q[3], q[4]; +x q[2]; +x q[3]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +ctrl(4) @ z q[0], q[1], q[2], q[3], q[4]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/grover_n8.qasm b/wai/quantum-cross-simulator/corpus/qasm/grover_n8.qasm new file mode 100644 index 000000000..64ef2ee83 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/grover_n8.qasm @@ -0,0 +1,491 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[8] q; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +x q[1]; +x q[4]; +x q[6]; +ctrl(7) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7]; +x q[1]; +x q[4]; +x q[6]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +ctrl(7) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +x q[1]; +x q[4]; +x q[6]; +ctrl(7) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7]; +x q[1]; +x q[4]; +x q[6]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +ctrl(7) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +x q[1]; +x q[4]; +x q[6]; +ctrl(7) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7]; +x q[1]; +x q[4]; +x q[6]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +ctrl(7) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +x q[1]; +x q[4]; +x q[6]; +ctrl(7) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7]; +x q[1]; +x q[4]; +x q[6]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +ctrl(7) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +x q[1]; +x q[4]; +x q[6]; +ctrl(7) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7]; +x q[1]; +x q[4]; +x q[6]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +ctrl(7) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +x q[1]; +x q[4]; +x q[6]; +ctrl(7) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7]; +x q[1]; +x q[4]; +x q[6]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +ctrl(7) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +x q[1]; +x q[4]; +x q[6]; +ctrl(7) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7]; +x q[1]; +x q[4]; +x q[6]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +ctrl(7) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +x q[1]; +x q[4]; +x q[6]; +ctrl(7) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7]; +x q[1]; +x q[4]; +x q[6]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +ctrl(7) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +x q[1]; +x q[4]; +x q[6]; +ctrl(7) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7]; +x q[1]; +x q[4]; +x q[6]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +ctrl(7) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +x q[1]; +x q[4]; +x q[6]; +ctrl(7) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7]; +x q[1]; +x q[4]; +x q[6]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +ctrl(7) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +x q[1]; +x q[4]; +x q[6]; +ctrl(7) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7]; +x q[1]; +x q[4]; +x q[6]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +ctrl(7) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +x q[1]; +x q[4]; +x q[6]; +ctrl(7) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7]; +x q[1]; +x q[4]; +x q[6]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +ctrl(7) @ z q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7]; +x q[0]; +x q[1]; +x q[2]; +x q[3]; +x q[4]; +x q[5]; +x q[6]; +x q[7]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/measure_twice.qasm b/wai/quantum-cross-simulator/corpus/qasm/measure_twice.qasm new file mode 100644 index 000000000..dd16fd578 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/measure_twice.qasm @@ -0,0 +1,7 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +bit[2] c; +h q[0]; +c[0] = measure q[0]; +c[1] = measure q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/mps_ghz_n100.qasm b/wai/quantum-cross-simulator/corpus/qasm/mps_ghz_n100.qasm new file mode 100644 index 000000000..76b660e51 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/mps_ghz_n100.qasm @@ -0,0 +1,103 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[100] q; +h q[0]; +cx q[0], q[1]; +cx q[1], q[2]; +cx q[2], q[3]; +cx q[3], q[4]; +cx q[4], q[5]; +cx q[5], q[6]; +cx q[6], q[7]; +cx q[7], q[8]; +cx q[8], q[9]; +cx q[9], q[10]; +cx q[10], q[11]; +cx q[11], q[12]; +cx q[12], q[13]; +cx q[13], q[14]; +cx q[14], q[15]; +cx q[15], q[16]; +cx q[16], q[17]; +cx q[17], q[18]; +cx q[18], q[19]; +cx q[19], q[20]; +cx q[20], q[21]; +cx q[21], q[22]; +cx q[22], q[23]; +cx q[23], q[24]; +cx q[24], q[25]; +cx q[25], q[26]; +cx q[26], q[27]; +cx q[27], q[28]; +cx q[28], q[29]; +cx q[29], q[30]; +cx q[30], q[31]; +cx q[31], q[32]; +cx q[32], q[33]; +cx q[33], q[34]; +cx q[34], q[35]; +cx q[35], q[36]; +cx q[36], q[37]; +cx q[37], q[38]; +cx q[38], q[39]; +cx q[39], q[40]; +cx q[40], q[41]; +cx q[41], q[42]; +cx q[42], q[43]; +cx q[43], q[44]; +cx q[44], q[45]; +cx q[45], q[46]; +cx q[46], q[47]; +cx q[47], q[48]; +cx q[48], q[49]; +cx q[49], q[50]; +cx q[50], q[51]; +cx q[51], q[52]; +cx q[52], q[53]; +cx q[53], q[54]; +cx q[54], q[55]; +cx q[55], q[56]; +cx q[56], q[57]; +cx q[57], q[58]; +cx q[58], q[59]; +cx q[59], q[60]; +cx q[60], q[61]; +cx q[61], q[62]; +cx q[62], q[63]; +cx q[63], q[64]; +cx q[64], q[65]; +cx q[65], q[66]; +cx q[66], q[67]; +cx q[67], q[68]; +cx q[68], q[69]; +cx q[69], q[70]; +cx q[70], q[71]; +cx q[71], q[72]; +cx q[72], q[73]; +cx q[73], q[74]; +cx q[74], q[75]; +cx q[75], q[76]; +cx q[76], q[77]; +cx q[77], q[78]; +cx q[78], q[79]; +cx q[79], q[80]; +cx q[80], q[81]; +cx q[81], q[82]; +cx q[82], q[83]; +cx q[83], q[84]; +cx q[84], q[85]; +cx q[85], q[86]; +cx q[86], q[87]; +cx q[87], q[88]; +cx q[88], q[89]; +cx q[89], q[90]; +cx q[90], q[91]; +cx q[91], q[92]; +cx q[92], q[93]; +cx q[93], q[94]; +cx q[94], q[95]; +cx q[95], q[96]; +cx q[96], q[97]; +cx q[97], q[98]; +cx q[98], q[99]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/mps_ghz_n30.qasm b/wai/quantum-cross-simulator/corpus/qasm/mps_ghz_n30.qasm new file mode 100644 index 000000000..3d0cab911 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/mps_ghz_n30.qasm @@ -0,0 +1,33 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[30] q; +h q[0]; +cx q[0], q[1]; +cx q[1], q[2]; +cx q[2], q[3]; +cx q[3], q[4]; +cx q[4], q[5]; +cx q[5], q[6]; +cx q[6], q[7]; +cx q[7], q[8]; +cx q[8], q[9]; +cx q[9], q[10]; +cx q[10], q[11]; +cx q[11], q[12]; +cx q[12], q[13]; +cx q[13], q[14]; +cx q[14], q[15]; +cx q[15], q[16]; +cx q[16], q[17]; +cx q[17], q[18]; +cx q[18], q[19]; +cx q[19], q[20]; +cx q[20], q[21]; +cx q[21], q[22]; +cx q[22], q[23]; +cx q[23], q[24]; +cx q[24], q[25]; +cx q[25], q[26]; +cx q[26], q[27]; +cx q[27], q[28]; +cx q[28], q[29]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/mps_ghz_n50.qasm b/wai/quantum-cross-simulator/corpus/qasm/mps_ghz_n50.qasm new file mode 100644 index 000000000..c7de81873 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/mps_ghz_n50.qasm @@ -0,0 +1,53 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[50] q; +h q[0]; +cx q[0], q[1]; +cx q[1], q[2]; +cx q[2], q[3]; +cx q[3], q[4]; +cx q[4], q[5]; +cx q[5], q[6]; +cx q[6], q[7]; +cx q[7], q[8]; +cx q[8], q[9]; +cx q[9], q[10]; +cx q[10], q[11]; +cx q[11], q[12]; +cx q[12], q[13]; +cx q[13], q[14]; +cx q[14], q[15]; +cx q[15], q[16]; +cx q[16], q[17]; +cx q[17], q[18]; +cx q[18], q[19]; +cx q[19], q[20]; +cx q[20], q[21]; +cx q[21], q[22]; +cx q[22], q[23]; +cx q[23], q[24]; +cx q[24], q[25]; +cx q[25], q[26]; +cx q[26], q[27]; +cx q[27], q[28]; +cx q[28], q[29]; +cx q[29], q[30]; +cx q[30], q[31]; +cx q[31], q[32]; +cx q[32], q[33]; +cx q[33], q[34]; +cx q[34], q[35]; +cx q[35], q[36]; +cx q[36], q[37]; +cx q[37], q[38]; +cx q[38], q[39]; +cx q[39], q[40]; +cx q[40], q[41]; +cx q[41], q[42]; +cx q[42], q[43]; +cx q[43], q[44]; +cx q[44], q[45]; +cx q[45], q[46]; +cx q[46], q[47]; +cx q[47], q[48]; +cx q[48], q[49]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/mps_qft_n30.qasm b/wai/quantum-cross-simulator/corpus/qasm/mps_qft_n30.qasm new file mode 100644 index 000000000..64bb8e224 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/mps_qft_n30.qasm @@ -0,0 +1,499 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[30] q; +x q[0]; +x q[1]; +x q[3]; +x q[5]; +x q[7]; +x q[9]; +x q[11]; +x q[13]; +x q[15]; +x q[17]; +x q[19]; +x q[21]; +x q[23]; +x q[25]; +x q[27]; +x q[29]; +h q[29]; +cp(pi/2) q[28], q[29]; +cp(pi/4) q[27], q[29]; +cp(pi/8) q[26], q[29]; +cp(pi/16) q[25], q[29]; +cp(pi/32) q[24], q[29]; +cp(pi/64) q[23], q[29]; +cp(pi/128) q[22], q[29]; +cp(pi/256) q[21], q[29]; +cp(pi/512) q[20], q[29]; +cp(pi/1024) q[19], q[29]; +cp(pi/2048) q[18], q[29]; +cp(pi/4096) q[17], q[29]; +cp(pi/8192) q[16], q[29]; +cp(pi/16384) q[15], q[29]; +cp(pi/32768) q[14], q[29]; +cp(pi/65536) q[13], q[29]; +cp(pi/131072) q[12], q[29]; +cp(pi/262144) q[11], q[29]; +cp(pi/524288) q[10], q[29]; +cp(pi/1048576) q[9], q[29]; +cp(pi/2097152) q[8], q[29]; +cp(pi/4194304) q[7], q[29]; +cp(pi/8388608) q[6], q[29]; +cp(pi/16777216) q[5], q[29]; +cp(pi/33554432) q[4], q[29]; +cp(pi/67108864) q[3], q[29]; +cp(pi/134217728) q[2], q[29]; +cp(pi/268435456) q[1], q[29]; +cp(pi/536870912) q[0], q[29]; +h q[28]; +cp(pi/2) q[27], q[28]; +cp(pi/4) q[26], q[28]; +cp(pi/8) q[25], q[28]; +cp(pi/16) q[24], q[28]; +cp(pi/32) q[23], q[28]; +cp(pi/64) q[22], q[28]; +cp(pi/128) q[21], q[28]; +cp(pi/256) q[20], q[28]; +cp(pi/512) q[19], q[28]; +cp(pi/1024) q[18], q[28]; +cp(pi/2048) q[17], q[28]; +cp(pi/4096) q[16], q[28]; +cp(pi/8192) q[15], q[28]; +cp(pi/16384) q[14], q[28]; +cp(pi/32768) q[13], q[28]; +cp(pi/65536) q[12], q[28]; +cp(pi/131072) q[11], q[28]; +cp(pi/262144) q[10], q[28]; +cp(pi/524288) q[9], q[28]; +cp(pi/1048576) q[8], q[28]; +cp(pi/2097152) q[7], q[28]; +cp(pi/4194304) q[6], q[28]; +cp(pi/8388608) q[5], q[28]; +cp(pi/16777216) q[4], q[28]; +cp(pi/33554432) q[3], q[28]; +cp(pi/67108864) q[2], q[28]; +cp(pi/134217728) q[1], q[28]; +cp(pi/268435456) q[0], q[28]; +h q[27]; +cp(pi/2) q[26], q[27]; +cp(pi/4) q[25], q[27]; +cp(pi/8) q[24], q[27]; +cp(pi/16) q[23], q[27]; +cp(pi/32) q[22], q[27]; +cp(pi/64) q[21], q[27]; +cp(pi/128) q[20], q[27]; +cp(pi/256) q[19], q[27]; +cp(pi/512) q[18], q[27]; +cp(pi/1024) q[17], q[27]; +cp(pi/2048) q[16], q[27]; +cp(pi/4096) q[15], q[27]; +cp(pi/8192) q[14], q[27]; +cp(pi/16384) q[13], q[27]; +cp(pi/32768) q[12], q[27]; +cp(pi/65536) q[11], q[27]; +cp(pi/131072) q[10], q[27]; +cp(pi/262144) q[9], q[27]; +cp(pi/524288) q[8], q[27]; +cp(pi/1048576) q[7], q[27]; +cp(pi/2097152) q[6], q[27]; +cp(pi/4194304) q[5], q[27]; +cp(pi/8388608) q[4], q[27]; +cp(pi/16777216) q[3], q[27]; +cp(pi/33554432) q[2], q[27]; +cp(pi/67108864) q[1], q[27]; +cp(pi/134217728) q[0], q[27]; +h q[26]; +cp(pi/2) q[25], q[26]; +cp(pi/4) q[24], q[26]; +cp(pi/8) q[23], q[26]; +cp(pi/16) q[22], q[26]; +cp(pi/32) q[21], q[26]; +cp(pi/64) q[20], q[26]; +cp(pi/128) q[19], q[26]; +cp(pi/256) q[18], q[26]; +cp(pi/512) q[17], q[26]; +cp(pi/1024) q[16], q[26]; +cp(pi/2048) q[15], q[26]; +cp(pi/4096) q[14], q[26]; +cp(pi/8192) q[13], q[26]; +cp(pi/16384) q[12], q[26]; +cp(pi/32768) q[11], q[26]; +cp(pi/65536) q[10], q[26]; +cp(pi/131072) q[9], q[26]; +cp(pi/262144) q[8], q[26]; +cp(pi/524288) q[7], q[26]; +cp(pi/1048576) q[6], q[26]; +cp(pi/2097152) q[5], q[26]; +cp(pi/4194304) q[4], q[26]; +cp(pi/8388608) q[3], q[26]; +cp(pi/16777216) q[2], q[26]; +cp(pi/33554432) q[1], q[26]; +cp(pi/67108864) q[0], q[26]; +h q[25]; +cp(pi/2) q[24], q[25]; +cp(pi/4) q[23], q[25]; +cp(pi/8) q[22], q[25]; +cp(pi/16) q[21], q[25]; +cp(pi/32) q[20], q[25]; +cp(pi/64) q[19], q[25]; +cp(pi/128) q[18], q[25]; +cp(pi/256) q[17], q[25]; +cp(pi/512) q[16], q[25]; +cp(pi/1024) q[15], q[25]; +cp(pi/2048) q[14], q[25]; +cp(pi/4096) q[13], q[25]; +cp(pi/8192) q[12], q[25]; +cp(pi/16384) q[11], q[25]; +cp(pi/32768) q[10], q[25]; +cp(pi/65536) q[9], q[25]; +cp(pi/131072) q[8], q[25]; +cp(pi/262144) q[7], q[25]; +cp(pi/524288) q[6], q[25]; +cp(pi/1048576) q[5], q[25]; +cp(pi/2097152) q[4], q[25]; +cp(pi/4194304) q[3], q[25]; +cp(pi/8388608) q[2], q[25]; +cp(pi/16777216) q[1], q[25]; +cp(pi/33554432) q[0], q[25]; +h q[24]; +cp(pi/2) q[23], q[24]; +cp(pi/4) q[22], q[24]; +cp(pi/8) q[21], q[24]; +cp(pi/16) q[20], q[24]; +cp(pi/32) q[19], q[24]; +cp(pi/64) q[18], q[24]; +cp(pi/128) q[17], q[24]; +cp(pi/256) q[16], q[24]; +cp(pi/512) q[15], q[24]; +cp(pi/1024) q[14], q[24]; +cp(pi/2048) q[13], q[24]; +cp(pi/4096) q[12], q[24]; +cp(pi/8192) q[11], q[24]; +cp(pi/16384) q[10], q[24]; +cp(pi/32768) q[9], q[24]; +cp(pi/65536) q[8], q[24]; +cp(pi/131072) q[7], q[24]; +cp(pi/262144) q[6], q[24]; +cp(pi/524288) q[5], q[24]; +cp(pi/1048576) q[4], q[24]; +cp(pi/2097152) q[3], q[24]; +cp(pi/4194304) q[2], q[24]; +cp(pi/8388608) q[1], q[24]; +cp(pi/16777216) q[0], q[24]; +h q[23]; +cp(pi/2) q[22], q[23]; +cp(pi/4) q[21], q[23]; +cp(pi/8) q[20], q[23]; +cp(pi/16) q[19], q[23]; +cp(pi/32) q[18], q[23]; +cp(pi/64) q[17], q[23]; +cp(pi/128) q[16], q[23]; +cp(pi/256) q[15], q[23]; +cp(pi/512) q[14], q[23]; +cp(pi/1024) q[13], q[23]; +cp(pi/2048) q[12], q[23]; +cp(pi/4096) q[11], q[23]; +cp(pi/8192) q[10], q[23]; +cp(pi/16384) q[9], q[23]; +cp(pi/32768) q[8], q[23]; +cp(pi/65536) q[7], q[23]; +cp(pi/131072) q[6], q[23]; +cp(pi/262144) q[5], q[23]; +cp(pi/524288) q[4], q[23]; +cp(pi/1048576) q[3], q[23]; +cp(pi/2097152) q[2], q[23]; +cp(pi/4194304) q[1], q[23]; +cp(pi/8388608) q[0], q[23]; +h q[22]; +cp(pi/2) q[21], q[22]; +cp(pi/4) q[20], q[22]; +cp(pi/8) q[19], q[22]; +cp(pi/16) q[18], q[22]; +cp(pi/32) q[17], q[22]; +cp(pi/64) q[16], q[22]; +cp(pi/128) q[15], q[22]; +cp(pi/256) q[14], q[22]; +cp(pi/512) q[13], q[22]; +cp(pi/1024) q[12], q[22]; +cp(pi/2048) q[11], q[22]; +cp(pi/4096) q[10], q[22]; +cp(pi/8192) q[9], q[22]; +cp(pi/16384) q[8], q[22]; +cp(pi/32768) q[7], q[22]; +cp(pi/65536) q[6], q[22]; +cp(pi/131072) q[5], q[22]; +cp(pi/262144) q[4], q[22]; +cp(pi/524288) q[3], q[22]; +cp(pi/1048576) q[2], q[22]; +cp(pi/2097152) q[1], q[22]; +cp(pi/4194304) q[0], q[22]; +h q[21]; +cp(pi/2) q[20], q[21]; +cp(pi/4) q[19], q[21]; +cp(pi/8) q[18], q[21]; +cp(pi/16) q[17], q[21]; +cp(pi/32) q[16], q[21]; +cp(pi/64) q[15], q[21]; +cp(pi/128) q[14], q[21]; +cp(pi/256) q[13], q[21]; +cp(pi/512) q[12], q[21]; +cp(pi/1024) q[11], q[21]; +cp(pi/2048) q[10], q[21]; +cp(pi/4096) q[9], q[21]; +cp(pi/8192) q[8], q[21]; +cp(pi/16384) q[7], q[21]; +cp(pi/32768) q[6], q[21]; +cp(pi/65536) q[5], q[21]; +cp(pi/131072) q[4], q[21]; +cp(pi/262144) q[3], q[21]; +cp(pi/524288) q[2], q[21]; +cp(pi/1048576) q[1], q[21]; +cp(pi/2097152) q[0], q[21]; +h q[20]; +cp(pi/2) q[19], q[20]; +cp(pi/4) q[18], q[20]; +cp(pi/8) q[17], q[20]; +cp(pi/16) q[16], q[20]; +cp(pi/32) q[15], q[20]; +cp(pi/64) q[14], q[20]; +cp(pi/128) q[13], q[20]; +cp(pi/256) q[12], q[20]; +cp(pi/512) q[11], q[20]; +cp(pi/1024) q[10], q[20]; +cp(pi/2048) q[9], q[20]; +cp(pi/4096) q[8], q[20]; +cp(pi/8192) q[7], q[20]; +cp(pi/16384) q[6], q[20]; +cp(pi/32768) q[5], q[20]; +cp(pi/65536) q[4], q[20]; +cp(pi/131072) q[3], q[20]; +cp(pi/262144) q[2], q[20]; +cp(pi/524288) q[1], q[20]; +cp(pi/1048576) q[0], q[20]; +h q[19]; +cp(pi/2) q[18], q[19]; +cp(pi/4) q[17], q[19]; +cp(pi/8) q[16], q[19]; +cp(pi/16) q[15], q[19]; +cp(pi/32) q[14], q[19]; +cp(pi/64) q[13], q[19]; +cp(pi/128) q[12], q[19]; +cp(pi/256) q[11], q[19]; +cp(pi/512) q[10], q[19]; +cp(pi/1024) q[9], q[19]; +cp(pi/2048) q[8], q[19]; +cp(pi/4096) q[7], q[19]; +cp(pi/8192) q[6], q[19]; +cp(pi/16384) q[5], q[19]; +cp(pi/32768) q[4], q[19]; +cp(pi/65536) q[3], q[19]; +cp(pi/131072) q[2], q[19]; +cp(pi/262144) q[1], q[19]; +cp(pi/524288) q[0], q[19]; +h q[18]; +cp(pi/2) q[17], q[18]; +cp(pi/4) q[16], q[18]; +cp(pi/8) q[15], q[18]; +cp(pi/16) q[14], q[18]; +cp(pi/32) q[13], q[18]; +cp(pi/64) q[12], q[18]; +cp(pi/128) q[11], q[18]; +cp(pi/256) q[10], q[18]; +cp(pi/512) q[9], q[18]; +cp(pi/1024) q[8], q[18]; +cp(pi/2048) q[7], q[18]; +cp(pi/4096) q[6], q[18]; +cp(pi/8192) q[5], q[18]; +cp(pi/16384) q[4], q[18]; +cp(pi/32768) q[3], q[18]; +cp(pi/65536) q[2], q[18]; +cp(pi/131072) q[1], q[18]; +cp(pi/262144) q[0], q[18]; +h q[17]; +cp(pi/2) q[16], q[17]; +cp(pi/4) q[15], q[17]; +cp(pi/8) q[14], q[17]; +cp(pi/16) q[13], q[17]; +cp(pi/32) q[12], q[17]; +cp(pi/64) q[11], q[17]; +cp(pi/128) q[10], q[17]; +cp(pi/256) q[9], q[17]; +cp(pi/512) q[8], q[17]; +cp(pi/1024) q[7], q[17]; +cp(pi/2048) q[6], q[17]; +cp(pi/4096) q[5], q[17]; +cp(pi/8192) q[4], q[17]; +cp(pi/16384) q[3], q[17]; +cp(pi/32768) q[2], q[17]; +cp(pi/65536) q[1], q[17]; +cp(pi/131072) q[0], q[17]; +h q[16]; +cp(pi/2) q[15], q[16]; +cp(pi/4) q[14], q[16]; +cp(pi/8) q[13], q[16]; +cp(pi/16) q[12], q[16]; +cp(pi/32) q[11], q[16]; +cp(pi/64) q[10], q[16]; +cp(pi/128) q[9], q[16]; +cp(pi/256) q[8], q[16]; +cp(pi/512) q[7], q[16]; +cp(pi/1024) q[6], q[16]; +cp(pi/2048) q[5], q[16]; +cp(pi/4096) q[4], q[16]; +cp(pi/8192) q[3], q[16]; +cp(pi/16384) q[2], q[16]; +cp(pi/32768) q[1], q[16]; +cp(pi/65536) q[0], q[16]; +h q[15]; +cp(pi/2) q[14], q[15]; +cp(pi/4) q[13], q[15]; +cp(pi/8) q[12], q[15]; +cp(pi/16) q[11], q[15]; +cp(pi/32) q[10], q[15]; +cp(pi/64) q[9], q[15]; +cp(pi/128) q[8], q[15]; +cp(pi/256) q[7], q[15]; +cp(pi/512) q[6], q[15]; +cp(pi/1024) q[5], q[15]; +cp(pi/2048) q[4], q[15]; +cp(pi/4096) q[3], q[15]; +cp(pi/8192) q[2], q[15]; +cp(pi/16384) q[1], q[15]; +cp(pi/32768) q[0], q[15]; +h q[14]; +cp(pi/2) q[13], q[14]; +cp(pi/4) q[12], q[14]; +cp(pi/8) q[11], q[14]; +cp(pi/16) q[10], q[14]; +cp(pi/32) q[9], q[14]; +cp(pi/64) q[8], q[14]; +cp(pi/128) q[7], q[14]; +cp(pi/256) q[6], q[14]; +cp(pi/512) q[5], q[14]; +cp(pi/1024) q[4], q[14]; +cp(pi/2048) q[3], q[14]; +cp(pi/4096) q[2], q[14]; +cp(pi/8192) q[1], q[14]; +cp(pi/16384) q[0], q[14]; +h q[13]; +cp(pi/2) q[12], q[13]; +cp(pi/4) q[11], q[13]; +cp(pi/8) q[10], q[13]; +cp(pi/16) q[9], q[13]; +cp(pi/32) q[8], q[13]; +cp(pi/64) q[7], q[13]; +cp(pi/128) q[6], q[13]; +cp(pi/256) q[5], q[13]; +cp(pi/512) q[4], q[13]; +cp(pi/1024) q[3], q[13]; +cp(pi/2048) q[2], q[13]; +cp(pi/4096) q[1], q[13]; +cp(pi/8192) q[0], q[13]; +h q[12]; +cp(pi/2) q[11], q[12]; +cp(pi/4) q[10], q[12]; +cp(pi/8) q[9], q[12]; +cp(pi/16) q[8], q[12]; +cp(pi/32) q[7], q[12]; +cp(pi/64) q[6], q[12]; +cp(pi/128) q[5], q[12]; +cp(pi/256) q[4], q[12]; +cp(pi/512) q[3], q[12]; +cp(pi/1024) q[2], q[12]; +cp(pi/2048) q[1], q[12]; +cp(pi/4096) q[0], q[12]; +h q[11]; +cp(pi/2) q[10], q[11]; +cp(pi/4) q[9], q[11]; +cp(pi/8) q[8], q[11]; +cp(pi/16) q[7], q[11]; +cp(pi/32) q[6], q[11]; +cp(pi/64) q[5], q[11]; +cp(pi/128) q[4], q[11]; +cp(pi/256) q[3], q[11]; +cp(pi/512) q[2], q[11]; +cp(pi/1024) q[1], q[11]; +cp(pi/2048) q[0], q[11]; +h q[10]; +cp(pi/2) q[9], q[10]; +cp(pi/4) q[8], q[10]; +cp(pi/8) q[7], q[10]; +cp(pi/16) q[6], q[10]; +cp(pi/32) q[5], q[10]; +cp(pi/64) q[4], q[10]; +cp(pi/128) q[3], q[10]; +cp(pi/256) q[2], q[10]; +cp(pi/512) q[1], q[10]; +cp(pi/1024) q[0], q[10]; +h q[9]; +cp(pi/2) q[8], q[9]; +cp(pi/4) q[7], q[9]; +cp(pi/8) q[6], q[9]; +cp(pi/16) q[5], q[9]; +cp(pi/32) q[4], q[9]; +cp(pi/64) q[3], q[9]; +cp(pi/128) q[2], q[9]; +cp(pi/256) q[1], q[9]; +cp(pi/512) q[0], q[9]; +h q[8]; +cp(pi/2) q[7], q[8]; +cp(pi/4) q[6], q[8]; +cp(pi/8) q[5], q[8]; +cp(pi/16) q[4], q[8]; +cp(pi/32) q[3], q[8]; +cp(pi/64) q[2], q[8]; +cp(pi/128) q[1], q[8]; +cp(pi/256) q[0], q[8]; +h q[7]; +cp(pi/2) q[6], q[7]; +cp(pi/4) q[5], q[7]; +cp(pi/8) q[4], q[7]; +cp(pi/16) q[3], q[7]; +cp(pi/32) q[2], q[7]; +cp(pi/64) q[1], q[7]; +cp(pi/128) q[0], q[7]; +h q[6]; +cp(pi/2) q[5], q[6]; +cp(pi/4) q[4], q[6]; +cp(pi/8) q[3], q[6]; +cp(pi/16) q[2], q[6]; +cp(pi/32) q[1], q[6]; +cp(pi/64) q[0], q[6]; +h q[5]; +cp(pi/2) q[4], q[5]; +cp(pi/4) q[3], q[5]; +cp(pi/8) q[2], q[5]; +cp(pi/16) q[1], q[5]; +cp(pi/32) q[0], q[5]; +h q[4]; +cp(pi/2) q[3], q[4]; +cp(pi/4) q[2], q[4]; +cp(pi/8) q[1], q[4]; +cp(pi/16) q[0], q[4]; +h q[3]; +cp(pi/2) q[2], q[3]; +cp(pi/4) q[1], q[3]; +cp(pi/8) q[0], q[3]; +h q[2]; +cp(pi/2) q[1], q[2]; +cp(pi/4) q[0], q[2]; +h q[1]; +cp(pi/2) q[0], q[1]; +h q[0]; +swap q[0], q[29]; +swap q[1], q[28]; +swap q[2], q[27]; +swap q[3], q[26]; +swap q[4], q[25]; +swap q[5], q[24]; +swap q[6], q[23]; +swap q[7], q[22]; +swap q[8], q[21]; +swap q[9], q[20]; +swap q[10], q[19]; +swap q[11], q[18]; +swap q[12], q[17]; +swap q[13], q[16]; +swap q[14], q[15]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/noise_depol1_x_chain_p0_01_k20.qasm b/wai/quantum-cross-simulator/corpus/qasm/noise_depol1_x_chain_p0_01_k20.qasm new file mode 100644 index 000000000..36f224747 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/noise_depol1_x_chain_p0_01_k20.qasm @@ -0,0 +1,23 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +x q[0]; +x q[0]; +x q[0]; +x q[0]; +x q[0]; +x q[0]; +x q[0]; +x q[0]; +x q[0]; +x q[0]; +x q[0]; +x q[0]; +x q[0]; +x q[0]; +x q[0]; +x q[0]; +x q[0]; +x q[0]; +x q[0]; +x q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/noise_depol1_x_chain_p0_1_k7.qasm b/wai/quantum-cross-simulator/corpus/qasm/noise_depol1_x_chain_p0_1_k7.qasm new file mode 100644 index 000000000..df7ae896d --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/noise_depol1_x_chain_p0_1_k7.qasm @@ -0,0 +1,10 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +x q[0]; +x q[0]; +x q[0]; +x q[0]; +x q[0]; +x q[0]; +x q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/noise_depol2_cx_chain.qasm b/wai/quantum-cross-simulator/corpus/qasm/noise_depol2_cx_chain.qasm new file mode 100644 index 000000000..bf0fa848e --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/noise_depol2_cx_chain.qasm @@ -0,0 +1,12 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[2] q; +cx q[0], q[1]; +cx q[0], q[1]; +cx q[0], q[1]; +cx q[0], q[1]; +cx q[0], q[1]; +cx q[0], q[1]; +cx q[0], q[1]; +cx q[0], q[1]; +cx q[0], q[1]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/one_qubit.qasm b/wai/quantum-cross-simulator/corpus/qasm/one_qubit.qasm new file mode 100644 index 000000000..9e9234eca --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/one_qubit.qasm @@ -0,0 +1,4 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +h q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/qft_counts_n8.qasm b/wai/quantum-cross-simulator/corpus/qasm/qft_counts_n8.qasm new file mode 100644 index 000000000..714d4b143 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/qft_counts_n8.qasm @@ -0,0 +1,57 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[8] q; +bit[8] c; +x q[0]; +x q[2]; +x q[3]; +x q[5]; +x q[7]; +h q[7]; +cp(pi/2) q[6], q[7]; +cp(pi/4) q[5], q[7]; +cp(pi/8) q[4], q[7]; +cp(pi/16) q[3], q[7]; +cp(pi/32) q[2], q[7]; +cp(pi/64) q[1], q[7]; +cp(pi/128) q[0], q[7]; +h q[6]; +cp(pi/2) q[5], q[6]; +cp(pi/4) q[4], q[6]; +cp(pi/8) q[3], q[6]; +cp(pi/16) q[2], q[6]; +cp(pi/32) q[1], q[6]; +cp(pi/64) q[0], q[6]; +h q[5]; +cp(pi/2) q[4], q[5]; +cp(pi/4) q[3], q[5]; +cp(pi/8) q[2], q[5]; +cp(pi/16) q[1], q[5]; +cp(pi/32) q[0], q[5]; +h q[4]; +cp(pi/2) q[3], q[4]; +cp(pi/4) q[2], q[4]; +cp(pi/8) q[1], q[4]; +cp(pi/16) q[0], q[4]; +h q[3]; +cp(pi/2) q[2], q[3]; +cp(pi/4) q[1], q[3]; +cp(pi/8) q[0], q[3]; +h q[2]; +cp(pi/2) q[1], q[2]; +cp(pi/4) q[0], q[2]; +h q[1]; +cp(pi/2) q[0], q[1]; +h q[0]; +swap q[0], q[7]; +swap q[1], q[6]; +swap q[2], q[5]; +swap q[3], q[4]; +c[0] = measure q[0]; +c[1] = measure q[1]; +c[2] = measure q[2]; +c[3] = measure q[3]; +c[4] = measure q[4]; +c[5] = measure q[5]; +c[6] = measure q[6]; +c[7] = measure q[7]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/qft_n12_x2741.qasm b/wai/quantum-cross-simulator/corpus/qasm/qft_n12_x2741.qasm new file mode 100644 index 000000000..eb85843f7 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/qft_n12_x2741.qasm @@ -0,0 +1,94 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[12] q; +x q[0]; +x q[2]; +x q[4]; +x q[5]; +x q[7]; +x q[9]; +x q[11]; +h q[11]; +cp(pi/2) q[10], q[11]; +cp(pi/4) q[9], q[11]; +cp(pi/8) q[8], q[11]; +cp(pi/16) q[7], q[11]; +cp(pi/32) q[6], q[11]; +cp(pi/64) q[5], q[11]; +cp(pi/128) q[4], q[11]; +cp(pi/256) q[3], q[11]; +cp(pi/512) q[2], q[11]; +cp(pi/1024) q[1], q[11]; +cp(pi/2048) q[0], q[11]; +h q[10]; +cp(pi/2) q[9], q[10]; +cp(pi/4) q[8], q[10]; +cp(pi/8) q[7], q[10]; +cp(pi/16) q[6], q[10]; +cp(pi/32) q[5], q[10]; +cp(pi/64) q[4], q[10]; +cp(pi/128) q[3], q[10]; +cp(pi/256) q[2], q[10]; +cp(pi/512) q[1], q[10]; +cp(pi/1024) q[0], q[10]; +h q[9]; +cp(pi/2) q[8], q[9]; +cp(pi/4) q[7], q[9]; +cp(pi/8) q[6], q[9]; +cp(pi/16) q[5], q[9]; +cp(pi/32) q[4], q[9]; +cp(pi/64) q[3], q[9]; +cp(pi/128) q[2], q[9]; +cp(pi/256) q[1], q[9]; +cp(pi/512) q[0], q[9]; +h q[8]; +cp(pi/2) q[7], q[8]; +cp(pi/4) q[6], q[8]; +cp(pi/8) q[5], q[8]; +cp(pi/16) q[4], q[8]; +cp(pi/32) q[3], q[8]; +cp(pi/64) q[2], q[8]; +cp(pi/128) q[1], q[8]; +cp(pi/256) q[0], q[8]; +h q[7]; +cp(pi/2) q[6], q[7]; +cp(pi/4) q[5], q[7]; +cp(pi/8) q[4], q[7]; +cp(pi/16) q[3], q[7]; +cp(pi/32) q[2], q[7]; +cp(pi/64) q[1], q[7]; +cp(pi/128) q[0], q[7]; +h q[6]; +cp(pi/2) q[5], q[6]; +cp(pi/4) q[4], q[6]; +cp(pi/8) q[3], q[6]; +cp(pi/16) q[2], q[6]; +cp(pi/32) q[1], q[6]; +cp(pi/64) q[0], q[6]; +h q[5]; +cp(pi/2) q[4], q[5]; +cp(pi/4) q[3], q[5]; +cp(pi/8) q[2], q[5]; +cp(pi/16) q[1], q[5]; +cp(pi/32) q[0], q[5]; +h q[4]; +cp(pi/2) q[3], q[4]; +cp(pi/4) q[2], q[4]; +cp(pi/8) q[1], q[4]; +cp(pi/16) q[0], q[4]; +h q[3]; +cp(pi/2) q[2], q[3]; +cp(pi/4) q[1], q[3]; +cp(pi/8) q[0], q[3]; +h q[2]; +cp(pi/2) q[1], q[2]; +cp(pi/4) q[0], q[2]; +h q[1]; +cp(pi/2) q[0], q[1]; +h q[0]; +swap q[0], q[11]; +swap q[1], q[10]; +swap q[2], q[9]; +swap q[3], q[8]; +swap q[4], q[7]; +swap q[5], q[6]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/qft_n14_x10923.qasm b/wai/quantum-cross-simulator/corpus/qasm/qft_n14_x10923.qasm new file mode 100644 index 000000000..73bc356f5 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/qft_n14_x10923.qasm @@ -0,0 +1,123 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[14] q; +x q[0]; +x q[1]; +x q[3]; +x q[5]; +x q[7]; +x q[9]; +x q[11]; +x q[13]; +h q[13]; +cp(pi/2) q[12], q[13]; +cp(pi/4) q[11], q[13]; +cp(pi/8) q[10], q[13]; +cp(pi/16) q[9], q[13]; +cp(pi/32) q[8], q[13]; +cp(pi/64) q[7], q[13]; +cp(pi/128) q[6], q[13]; +cp(pi/256) q[5], q[13]; +cp(pi/512) q[4], q[13]; +cp(pi/1024) q[3], q[13]; +cp(pi/2048) q[2], q[13]; +cp(pi/4096) q[1], q[13]; +cp(pi/8192) q[0], q[13]; +h q[12]; +cp(pi/2) q[11], q[12]; +cp(pi/4) q[10], q[12]; +cp(pi/8) q[9], q[12]; +cp(pi/16) q[8], q[12]; +cp(pi/32) q[7], q[12]; +cp(pi/64) q[6], q[12]; +cp(pi/128) q[5], q[12]; +cp(pi/256) q[4], q[12]; +cp(pi/512) q[3], q[12]; +cp(pi/1024) q[2], q[12]; +cp(pi/2048) q[1], q[12]; +cp(pi/4096) q[0], q[12]; +h q[11]; +cp(pi/2) q[10], q[11]; +cp(pi/4) q[9], q[11]; +cp(pi/8) q[8], q[11]; +cp(pi/16) q[7], q[11]; +cp(pi/32) q[6], q[11]; +cp(pi/64) q[5], q[11]; +cp(pi/128) q[4], q[11]; +cp(pi/256) q[3], q[11]; +cp(pi/512) q[2], q[11]; +cp(pi/1024) q[1], q[11]; +cp(pi/2048) q[0], q[11]; +h q[10]; +cp(pi/2) q[9], q[10]; +cp(pi/4) q[8], q[10]; +cp(pi/8) q[7], q[10]; +cp(pi/16) q[6], q[10]; +cp(pi/32) q[5], q[10]; +cp(pi/64) q[4], q[10]; +cp(pi/128) q[3], q[10]; +cp(pi/256) q[2], q[10]; +cp(pi/512) q[1], q[10]; +cp(pi/1024) q[0], q[10]; +h q[9]; +cp(pi/2) q[8], q[9]; +cp(pi/4) q[7], q[9]; +cp(pi/8) q[6], q[9]; +cp(pi/16) q[5], q[9]; +cp(pi/32) q[4], q[9]; +cp(pi/64) q[3], q[9]; +cp(pi/128) q[2], q[9]; +cp(pi/256) q[1], q[9]; +cp(pi/512) q[0], q[9]; +h q[8]; +cp(pi/2) q[7], q[8]; +cp(pi/4) q[6], q[8]; +cp(pi/8) q[5], q[8]; +cp(pi/16) q[4], q[8]; +cp(pi/32) q[3], q[8]; +cp(pi/64) q[2], q[8]; +cp(pi/128) q[1], q[8]; +cp(pi/256) q[0], q[8]; +h q[7]; +cp(pi/2) q[6], q[7]; +cp(pi/4) q[5], q[7]; +cp(pi/8) q[4], q[7]; +cp(pi/16) q[3], q[7]; +cp(pi/32) q[2], q[7]; +cp(pi/64) q[1], q[7]; +cp(pi/128) q[0], q[7]; +h q[6]; +cp(pi/2) q[5], q[6]; +cp(pi/4) q[4], q[6]; +cp(pi/8) q[3], q[6]; +cp(pi/16) q[2], q[6]; +cp(pi/32) q[1], q[6]; +cp(pi/64) q[0], q[6]; +h q[5]; +cp(pi/2) q[4], q[5]; +cp(pi/4) q[3], q[5]; +cp(pi/8) q[2], q[5]; +cp(pi/16) q[1], q[5]; +cp(pi/32) q[0], q[5]; +h q[4]; +cp(pi/2) q[3], q[4]; +cp(pi/4) q[2], q[4]; +cp(pi/8) q[1], q[4]; +cp(pi/16) q[0], q[4]; +h q[3]; +cp(pi/2) q[2], q[3]; +cp(pi/4) q[1], q[3]; +cp(pi/8) q[0], q[3]; +h q[2]; +cp(pi/2) q[1], q[2]; +cp(pi/4) q[0], q[2]; +h q[1]; +cp(pi/2) q[0], q[1]; +h q[0]; +swap q[0], q[13]; +swap q[1], q[12]; +swap q[2], q[11]; +swap q[3], q[10]; +swap q[4], q[9]; +swap q[5], q[8]; +swap q[6], q[7]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/qft_n3_x5.qasm b/wai/quantum-cross-simulator/corpus/qasm/qft_n3_x5.qasm new file mode 100644 index 000000000..fece81645 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/qft_n3_x5.qasm @@ -0,0 +1,12 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[3] q; +x q[0]; +x q[2]; +h q[2]; +cp(pi/2) q[1], q[2]; +cp(pi/4) q[0], q[2]; +h q[1]; +cp(pi/2) q[0], q[1]; +h q[0]; +swap q[0], q[2]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/qft_n5_x19.qasm b/wai/quantum-cross-simulator/corpus/qasm/qft_n5_x19.qasm new file mode 100644 index 000000000..25897ddc0 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/qft_n5_x19.qasm @@ -0,0 +1,23 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[5] q; +x q[0]; +x q[1]; +x q[4]; +h q[4]; +cp(pi/2) q[3], q[4]; +cp(pi/4) q[2], q[4]; +cp(pi/8) q[1], q[4]; +cp(pi/16) q[0], q[4]; +h q[3]; +cp(pi/2) q[2], q[3]; +cp(pi/4) q[1], q[3]; +cp(pi/8) q[0], q[3]; +h q[2]; +cp(pi/2) q[1], q[2]; +cp(pi/4) q[0], q[2]; +h q[1]; +cp(pi/2) q[0], q[1]; +h q[0]; +swap q[0], q[4]; +swap q[1], q[3]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/qft_n8_x173.qasm b/wai/quantum-cross-simulator/corpus/qasm/qft_n8_x173.qasm new file mode 100644 index 000000000..76cc2c019 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/qft_n8_x173.qasm @@ -0,0 +1,48 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[8] q; +x q[0]; +x q[2]; +x q[3]; +x q[5]; +x q[7]; +h q[7]; +cp(pi/2) q[6], q[7]; +cp(pi/4) q[5], q[7]; +cp(pi/8) q[4], q[7]; +cp(pi/16) q[3], q[7]; +cp(pi/32) q[2], q[7]; +cp(pi/64) q[1], q[7]; +cp(pi/128) q[0], q[7]; +h q[6]; +cp(pi/2) q[5], q[6]; +cp(pi/4) q[4], q[6]; +cp(pi/8) q[3], q[6]; +cp(pi/16) q[2], q[6]; +cp(pi/32) q[1], q[6]; +cp(pi/64) q[0], q[6]; +h q[5]; +cp(pi/2) q[4], q[5]; +cp(pi/4) q[3], q[5]; +cp(pi/8) q[2], q[5]; +cp(pi/16) q[1], q[5]; +cp(pi/32) q[0], q[5]; +h q[4]; +cp(pi/2) q[3], q[4]; +cp(pi/4) q[2], q[4]; +cp(pi/8) q[1], q[4]; +cp(pi/16) q[0], q[4]; +h q[3]; +cp(pi/2) q[2], q[3]; +cp(pi/4) q[1], q[3]; +cp(pi/8) q[0], q[3]; +h q[2]; +cp(pi/2) q[1], q[2]; +cp(pi/4) q[0], q[2]; +h q[1]; +cp(pi/2) q[0], q[1]; +h q[0]; +swap q[0], q[7]; +swap q[1], q[6]; +swap q[2], q[5]; +swap q[3], q[4]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/qft_superposed_n10.qasm b/wai/quantum-cross-simulator/corpus/qasm/qft_superposed_n10.qasm new file mode 100644 index 000000000..7fb58afd1 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/qft_superposed_n10.qasm @@ -0,0 +1,112 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[10] q; +h q[0]; +x q[1]; +h q[2]; +s q[3]; +s q[4]; +t q[6]; +s q[7]; +s q[9]; +cz q[9], q[2]; +cz q[6], q[0]; +cx q[5], q[4]; +cx q[1], q[3]; +cx q[7], q[8]; +t q[0]; +tdg q[1]; +s q[3]; +tdg q[4]; +tdg q[5]; +sdg q[7]; +sdg q[8]; +h q[9]; +cx q[3], q[2]; +cz q[8], q[9]; +cz q[1], q[6]; +cx q[5], q[4]; +cz q[0], q[7]; +s q[0]; +x q[2]; +sdg q[3]; +t q[5]; +s q[6]; +t q[7]; +cz q[0], q[6]; +cz q[9], q[2]; +cz q[4], q[7]; +cx q[1], q[3]; +cx q[8], q[5]; +h q[0]; +x q[2]; +s q[4]; +x q[5]; +sdg q[7]; +t q[8]; +tdg q[9]; +cz q[7], q[6]; +cx q[5], q[8]; +cx q[1], q[0]; +cx q[4], q[3]; +cx q[2], q[9]; +h q[9]; +cp(pi/2) q[8], q[9]; +cp(pi/4) q[7], q[9]; +cp(pi/8) q[6], q[9]; +cp(pi/16) q[5], q[9]; +cp(pi/32) q[4], q[9]; +cp(pi/64) q[3], q[9]; +cp(pi/128) q[2], q[9]; +cp(pi/256) q[1], q[9]; +cp(pi/512) q[0], q[9]; +h q[8]; +cp(pi/2) q[7], q[8]; +cp(pi/4) q[6], q[8]; +cp(pi/8) q[5], q[8]; +cp(pi/16) q[4], q[8]; +cp(pi/32) q[3], q[8]; +cp(pi/64) q[2], q[8]; +cp(pi/128) q[1], q[8]; +cp(pi/256) q[0], q[8]; +h q[7]; +cp(pi/2) q[6], q[7]; +cp(pi/4) q[5], q[7]; +cp(pi/8) q[4], q[7]; +cp(pi/16) q[3], q[7]; +cp(pi/32) q[2], q[7]; +cp(pi/64) q[1], q[7]; +cp(pi/128) q[0], q[7]; +h q[6]; +cp(pi/2) q[5], q[6]; +cp(pi/4) q[4], q[6]; +cp(pi/8) q[3], q[6]; +cp(pi/16) q[2], q[6]; +cp(pi/32) q[1], q[6]; +cp(pi/64) q[0], q[6]; +h q[5]; +cp(pi/2) q[4], q[5]; +cp(pi/4) q[3], q[5]; +cp(pi/8) q[2], q[5]; +cp(pi/16) q[1], q[5]; +cp(pi/32) q[0], q[5]; +h q[4]; +cp(pi/2) q[3], q[4]; +cp(pi/4) q[2], q[4]; +cp(pi/8) q[1], q[4]; +cp(pi/16) q[0], q[4]; +h q[3]; +cp(pi/2) q[2], q[3]; +cp(pi/4) q[1], q[3]; +cp(pi/8) q[0], q[3]; +h q[2]; +cp(pi/2) q[1], q[2]; +cp(pi/4) q[0], q[2]; +h q[1]; +cp(pi/2) q[0], q[1]; +h q[0]; +swap q[0], q[9]; +swap q[1], q[8]; +swap q[2], q[7]; +swap q[3], q[6]; +swap q[4], q[5]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/qft_wide_n20.qasm b/wai/quantum-cross-simulator/corpus/qasm/qft_wide_n20.qasm new file mode 100644 index 000000000..aa5fa59f0 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/qft_wide_n20.qasm @@ -0,0 +1,234 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[20] q; +x q[0]; +x q[1]; +x q[3]; +x q[5]; +x q[7]; +x q[9]; +x q[11]; +x q[13]; +x q[15]; +x q[17]; +x q[19]; +h q[19]; +cp(pi/2) q[18], q[19]; +cp(pi/4) q[17], q[19]; +cp(pi/8) q[16], q[19]; +cp(pi/16) q[15], q[19]; +cp(pi/32) q[14], q[19]; +cp(pi/64) q[13], q[19]; +cp(pi/128) q[12], q[19]; +cp(pi/256) q[11], q[19]; +cp(pi/512) q[10], q[19]; +cp(pi/1024) q[9], q[19]; +cp(pi/2048) q[8], q[19]; +cp(pi/4096) q[7], q[19]; +cp(pi/8192) q[6], q[19]; +cp(pi/16384) q[5], q[19]; +cp(pi/32768) q[4], q[19]; +cp(pi/65536) q[3], q[19]; +cp(pi/131072) q[2], q[19]; +cp(pi/262144) q[1], q[19]; +cp(pi/524288) q[0], q[19]; +h q[18]; +cp(pi/2) q[17], q[18]; +cp(pi/4) q[16], q[18]; +cp(pi/8) q[15], q[18]; +cp(pi/16) q[14], q[18]; +cp(pi/32) q[13], q[18]; +cp(pi/64) q[12], q[18]; +cp(pi/128) q[11], q[18]; +cp(pi/256) q[10], q[18]; +cp(pi/512) q[9], q[18]; +cp(pi/1024) q[8], q[18]; +cp(pi/2048) q[7], q[18]; +cp(pi/4096) q[6], q[18]; +cp(pi/8192) q[5], q[18]; +cp(pi/16384) q[4], q[18]; +cp(pi/32768) q[3], q[18]; +cp(pi/65536) q[2], q[18]; +cp(pi/131072) q[1], q[18]; +cp(pi/262144) q[0], q[18]; +h q[17]; +cp(pi/2) q[16], q[17]; +cp(pi/4) q[15], q[17]; +cp(pi/8) q[14], q[17]; +cp(pi/16) q[13], q[17]; +cp(pi/32) q[12], q[17]; +cp(pi/64) q[11], q[17]; +cp(pi/128) q[10], q[17]; +cp(pi/256) q[9], q[17]; +cp(pi/512) q[8], q[17]; +cp(pi/1024) q[7], q[17]; +cp(pi/2048) q[6], q[17]; +cp(pi/4096) q[5], q[17]; +cp(pi/8192) q[4], q[17]; +cp(pi/16384) q[3], q[17]; +cp(pi/32768) q[2], q[17]; +cp(pi/65536) q[1], q[17]; +cp(pi/131072) q[0], q[17]; +h q[16]; +cp(pi/2) q[15], q[16]; +cp(pi/4) q[14], q[16]; +cp(pi/8) q[13], q[16]; +cp(pi/16) q[12], q[16]; +cp(pi/32) q[11], q[16]; +cp(pi/64) q[10], q[16]; +cp(pi/128) q[9], q[16]; +cp(pi/256) q[8], q[16]; +cp(pi/512) q[7], q[16]; +cp(pi/1024) q[6], q[16]; +cp(pi/2048) q[5], q[16]; +cp(pi/4096) q[4], q[16]; +cp(pi/8192) q[3], q[16]; +cp(pi/16384) q[2], q[16]; +cp(pi/32768) q[1], q[16]; +cp(pi/65536) q[0], q[16]; +h q[15]; +cp(pi/2) q[14], q[15]; +cp(pi/4) q[13], q[15]; +cp(pi/8) q[12], q[15]; +cp(pi/16) q[11], q[15]; +cp(pi/32) q[10], q[15]; +cp(pi/64) q[9], q[15]; +cp(pi/128) q[8], q[15]; +cp(pi/256) q[7], q[15]; +cp(pi/512) q[6], q[15]; +cp(pi/1024) q[5], q[15]; +cp(pi/2048) q[4], q[15]; +cp(pi/4096) q[3], q[15]; +cp(pi/8192) q[2], q[15]; +cp(pi/16384) q[1], q[15]; +cp(pi/32768) q[0], q[15]; +h q[14]; +cp(pi/2) q[13], q[14]; +cp(pi/4) q[12], q[14]; +cp(pi/8) q[11], q[14]; +cp(pi/16) q[10], q[14]; +cp(pi/32) q[9], q[14]; +cp(pi/64) q[8], q[14]; +cp(pi/128) q[7], q[14]; +cp(pi/256) q[6], q[14]; +cp(pi/512) q[5], q[14]; +cp(pi/1024) q[4], q[14]; +cp(pi/2048) q[3], q[14]; +cp(pi/4096) q[2], q[14]; +cp(pi/8192) q[1], q[14]; +cp(pi/16384) q[0], q[14]; +h q[13]; +cp(pi/2) q[12], q[13]; +cp(pi/4) q[11], q[13]; +cp(pi/8) q[10], q[13]; +cp(pi/16) q[9], q[13]; +cp(pi/32) q[8], q[13]; +cp(pi/64) q[7], q[13]; +cp(pi/128) q[6], q[13]; +cp(pi/256) q[5], q[13]; +cp(pi/512) q[4], q[13]; +cp(pi/1024) q[3], q[13]; +cp(pi/2048) q[2], q[13]; +cp(pi/4096) q[1], q[13]; +cp(pi/8192) q[0], q[13]; +h q[12]; +cp(pi/2) q[11], q[12]; +cp(pi/4) q[10], q[12]; +cp(pi/8) q[9], q[12]; +cp(pi/16) q[8], q[12]; +cp(pi/32) q[7], q[12]; +cp(pi/64) q[6], q[12]; +cp(pi/128) q[5], q[12]; +cp(pi/256) q[4], q[12]; +cp(pi/512) q[3], q[12]; +cp(pi/1024) q[2], q[12]; +cp(pi/2048) q[1], q[12]; +cp(pi/4096) q[0], q[12]; +h q[11]; +cp(pi/2) q[10], q[11]; +cp(pi/4) q[9], q[11]; +cp(pi/8) q[8], q[11]; +cp(pi/16) q[7], q[11]; +cp(pi/32) q[6], q[11]; +cp(pi/64) q[5], q[11]; +cp(pi/128) q[4], q[11]; +cp(pi/256) q[3], q[11]; +cp(pi/512) q[2], q[11]; +cp(pi/1024) q[1], q[11]; +cp(pi/2048) q[0], q[11]; +h q[10]; +cp(pi/2) q[9], q[10]; +cp(pi/4) q[8], q[10]; +cp(pi/8) q[7], q[10]; +cp(pi/16) q[6], q[10]; +cp(pi/32) q[5], q[10]; +cp(pi/64) q[4], q[10]; +cp(pi/128) q[3], q[10]; +cp(pi/256) q[2], q[10]; +cp(pi/512) q[1], q[10]; +cp(pi/1024) q[0], q[10]; +h q[9]; +cp(pi/2) q[8], q[9]; +cp(pi/4) q[7], q[9]; +cp(pi/8) q[6], q[9]; +cp(pi/16) q[5], q[9]; +cp(pi/32) q[4], q[9]; +cp(pi/64) q[3], q[9]; +cp(pi/128) q[2], q[9]; +cp(pi/256) q[1], q[9]; +cp(pi/512) q[0], q[9]; +h q[8]; +cp(pi/2) q[7], q[8]; +cp(pi/4) q[6], q[8]; +cp(pi/8) q[5], q[8]; +cp(pi/16) q[4], q[8]; +cp(pi/32) q[3], q[8]; +cp(pi/64) q[2], q[8]; +cp(pi/128) q[1], q[8]; +cp(pi/256) q[0], q[8]; +h q[7]; +cp(pi/2) q[6], q[7]; +cp(pi/4) q[5], q[7]; +cp(pi/8) q[4], q[7]; +cp(pi/16) q[3], q[7]; +cp(pi/32) q[2], q[7]; +cp(pi/64) q[1], q[7]; +cp(pi/128) q[0], q[7]; +h q[6]; +cp(pi/2) q[5], q[6]; +cp(pi/4) q[4], q[6]; +cp(pi/8) q[3], q[6]; +cp(pi/16) q[2], q[6]; +cp(pi/32) q[1], q[6]; +cp(pi/64) q[0], q[6]; +h q[5]; +cp(pi/2) q[4], q[5]; +cp(pi/4) q[3], q[5]; +cp(pi/8) q[2], q[5]; +cp(pi/16) q[1], q[5]; +cp(pi/32) q[0], q[5]; +h q[4]; +cp(pi/2) q[3], q[4]; +cp(pi/4) q[2], q[4]; +cp(pi/8) q[1], q[4]; +cp(pi/16) q[0], q[4]; +h q[3]; +cp(pi/2) q[2], q[3]; +cp(pi/4) q[1], q[3]; +cp(pi/8) q[0], q[3]; +h q[2]; +cp(pi/2) q[1], q[2]; +cp(pi/4) q[0], q[2]; +h q[1]; +cp(pi/2) q[0], q[1]; +h q[0]; +swap q[0], q[19]; +swap q[1], q[18]; +swap q[2], q[17]; +swap q[3], q[16]; +swap q[4], q[15]; +swap q[5], q[14]; +swap q[6], q[13]; +swap q[7], q[12]; +swap q[8], q[11]; +swap q[9], q[10]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/qpe_t10_third.qasm b/wai/quantum-cross-simulator/corpus/qasm/qpe_t10_third.qasm new file mode 100644 index 000000000..82f8800c2 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/qpe_t10_third.qasm @@ -0,0 +1,84 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[11] q; +x q[10]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +cp(pi*2/3) q[0], q[10]; +cp(pi*4/3) q[1], q[10]; +cp(pi*2/3) q[2], q[10]; +cp(pi*4/3) q[3], q[10]; +cp(pi*2/3) q[4], q[10]; +cp(pi*4/3) q[5], q[10]; +cp(pi*2/3) q[6], q[10]; +cp(pi*4/3) q[7], q[10]; +cp(pi*2/3) q[8], q[10]; +cp(pi*4/3) q[9], q[10]; +swap q[4], q[5]; +swap q[3], q[6]; +swap q[2], q[7]; +swap q[1], q[8]; +swap q[0], q[9]; +h q[0]; +cp(-pi/2) q[0], q[1]; +h q[1]; +cp(-pi/4) q[0], q[2]; +cp(-pi/2) q[1], q[2]; +h q[2]; +cp(-pi/8) q[0], q[3]; +cp(-pi/4) q[1], q[3]; +cp(-pi/2) q[2], q[3]; +h q[3]; +cp(-pi/16) q[0], q[4]; +cp(-pi/8) q[1], q[4]; +cp(-pi/4) q[2], q[4]; +cp(-pi/2) q[3], q[4]; +h q[4]; +cp(-pi/32) q[0], q[5]; +cp(-pi/16) q[1], q[5]; +cp(-pi/8) q[2], q[5]; +cp(-pi/4) q[3], q[5]; +cp(-pi/2) q[4], q[5]; +h q[5]; +cp(-pi/64) q[0], q[6]; +cp(-pi/32) q[1], q[6]; +cp(-pi/16) q[2], q[6]; +cp(-pi/8) q[3], q[6]; +cp(-pi/4) q[4], q[6]; +cp(-pi/2) q[5], q[6]; +h q[6]; +cp(-pi/128) q[0], q[7]; +cp(-pi/64) q[1], q[7]; +cp(-pi/32) q[2], q[7]; +cp(-pi/16) q[3], q[7]; +cp(-pi/8) q[4], q[7]; +cp(-pi/4) q[5], q[7]; +cp(-pi/2) q[6], q[7]; +h q[7]; +cp(-pi/256) q[0], q[8]; +cp(-pi/128) q[1], q[8]; +cp(-pi/64) q[2], q[8]; +cp(-pi/32) q[3], q[8]; +cp(-pi/16) q[4], q[8]; +cp(-pi/8) q[5], q[8]; +cp(-pi/4) q[6], q[8]; +cp(-pi/2) q[7], q[8]; +h q[8]; +cp(-pi/512) q[0], q[9]; +cp(-pi/256) q[1], q[9]; +cp(-pi/128) q[2], q[9]; +cp(-pi/64) q[3], q[9]; +cp(-pi/32) q[4], q[9]; +cp(-pi/16) q[5], q[9]; +cp(-pi/8) q[6], q[9]; +cp(-pi/4) q[7], q[9]; +cp(-pi/2) q[8], q[9]; +h q[9]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/qpe_t12_m2741.qasm b/wai/quantum-cross-simulator/corpus/qasm/qpe_t12_m2741.qasm new file mode 100644 index 000000000..ace661a81 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/qpe_t12_m2741.qasm @@ -0,0 +1,112 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[13] q; +x q[12]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +h q[10]; +h q[11]; +cp(pi*2741/2048) q[0], q[12]; +cp(pi*693/1024) q[1], q[12]; +cp(pi*693/512) q[2], q[12]; +cp(pi*181/256) q[3], q[12]; +cp(pi*181/128) q[4], q[12]; +cp(pi*53/64) q[5], q[12]; +cp(pi*53/32) q[6], q[12]; +cp(pi*21/16) q[7], q[12]; +cp(pi*5/8) q[8], q[12]; +cp(pi*5/4) q[9], q[12]; +cp(pi/2) q[10], q[12]; +cp(pi) q[11], q[12]; +swap q[5], q[6]; +swap q[4], q[7]; +swap q[3], q[8]; +swap q[2], q[9]; +swap q[1], q[10]; +swap q[0], q[11]; +h q[0]; +cp(-pi/2) q[0], q[1]; +h q[1]; +cp(-pi/4) q[0], q[2]; +cp(-pi/2) q[1], q[2]; +h q[2]; +cp(-pi/8) q[0], q[3]; +cp(-pi/4) q[1], q[3]; +cp(-pi/2) q[2], q[3]; +h q[3]; +cp(-pi/16) q[0], q[4]; +cp(-pi/8) q[1], q[4]; +cp(-pi/4) q[2], q[4]; +cp(-pi/2) q[3], q[4]; +h q[4]; +cp(-pi/32) q[0], q[5]; +cp(-pi/16) q[1], q[5]; +cp(-pi/8) q[2], q[5]; +cp(-pi/4) q[3], q[5]; +cp(-pi/2) q[4], q[5]; +h q[5]; +cp(-pi/64) q[0], q[6]; +cp(-pi/32) q[1], q[6]; +cp(-pi/16) q[2], q[6]; +cp(-pi/8) q[3], q[6]; +cp(-pi/4) q[4], q[6]; +cp(-pi/2) q[5], q[6]; +h q[6]; +cp(-pi/128) q[0], q[7]; +cp(-pi/64) q[1], q[7]; +cp(-pi/32) q[2], q[7]; +cp(-pi/16) q[3], q[7]; +cp(-pi/8) q[4], q[7]; +cp(-pi/4) q[5], q[7]; +cp(-pi/2) q[6], q[7]; +h q[7]; +cp(-pi/256) q[0], q[8]; +cp(-pi/128) q[1], q[8]; +cp(-pi/64) q[2], q[8]; +cp(-pi/32) q[3], q[8]; +cp(-pi/16) q[4], q[8]; +cp(-pi/8) q[5], q[8]; +cp(-pi/4) q[6], q[8]; +cp(-pi/2) q[7], q[8]; +h q[8]; +cp(-pi/512) q[0], q[9]; +cp(-pi/256) q[1], q[9]; +cp(-pi/128) q[2], q[9]; +cp(-pi/64) q[3], q[9]; +cp(-pi/32) q[4], q[9]; +cp(-pi/16) q[5], q[9]; +cp(-pi/8) q[6], q[9]; +cp(-pi/4) q[7], q[9]; +cp(-pi/2) q[8], q[9]; +h q[9]; +cp(-pi/1024) q[0], q[10]; +cp(-pi/512) q[1], q[10]; +cp(-pi/256) q[2], q[10]; +cp(-pi/128) q[3], q[10]; +cp(-pi/64) q[4], q[10]; +cp(-pi/32) q[5], q[10]; +cp(-pi/16) q[6], q[10]; +cp(-pi/8) q[7], q[10]; +cp(-pi/4) q[8], q[10]; +cp(-pi/2) q[9], q[10]; +h q[10]; +cp(-pi/2048) q[0], q[11]; +cp(-pi/1024) q[1], q[11]; +cp(-pi/512) q[2], q[11]; +cp(-pi/256) q[3], q[11]; +cp(-pi/128) q[4], q[11]; +cp(-pi/64) q[5], q[11]; +cp(-pi/32) q[6], q[11]; +cp(-pi/16) q[7], q[11]; +cp(-pi/8) q[8], q[11]; +cp(-pi/4) q[9], q[11]; +cp(-pi/2) q[10], q[11]; +h q[11]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/qpe_t4_m5.qasm b/wai/quantum-cross-simulator/corpus/qasm/qpe_t4_m5.qasm new file mode 100644 index 000000000..385cf94aa --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/qpe_t4_m5.qasm @@ -0,0 +1,24 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[5] q; +x q[4]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +cp(pi*5/8) q[0], q[4]; +cp(pi*5/4) q[1], q[4]; +cp(pi/2) q[2], q[4]; +cp(pi) q[3], q[4]; +swap q[1], q[2]; +swap q[0], q[3]; +h q[0]; +cp(-pi/2) q[0], q[1]; +h q[1]; +cp(-pi/4) q[0], q[2]; +cp(-pi/2) q[1], q[2]; +h q[2]; +cp(-pi/8) q[0], q[3]; +cp(-pi/4) q[1], q[3]; +cp(-pi/2) q[2], q[3]; +h q[3]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/qpe_t6_third.qasm b/wai/quantum-cross-simulator/corpus/qasm/qpe_t6_third.qasm new file mode 100644 index 000000000..6dbe81195 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/qpe_t6_third.qasm @@ -0,0 +1,40 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[7] q; +x q[6]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +cp(pi*2/3) q[0], q[6]; +cp(pi*4/3) q[1], q[6]; +cp(pi*2/3) q[2], q[6]; +cp(pi*4/3) q[3], q[6]; +cp(pi*2/3) q[4], q[6]; +cp(pi*4/3) q[5], q[6]; +swap q[2], q[3]; +swap q[1], q[4]; +swap q[0], q[5]; +h q[0]; +cp(-pi/2) q[0], q[1]; +h q[1]; +cp(-pi/4) q[0], q[2]; +cp(-pi/2) q[1], q[2]; +h q[2]; +cp(-pi/8) q[0], q[3]; +cp(-pi/4) q[1], q[3]; +cp(-pi/2) q[2], q[3]; +h q[3]; +cp(-pi/16) q[0], q[4]; +cp(-pi/8) q[1], q[4]; +cp(-pi/4) q[2], q[4]; +cp(-pi/2) q[3], q[4]; +h q[4]; +cp(-pi/32) q[0], q[5]; +cp(-pi/16) q[1], q[5]; +cp(-pi/8) q[2], q[5]; +cp(-pi/4) q[3], q[5]; +cp(-pi/2) q[4], q[5]; +h q[5]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/qpe_t8_m173.qasm b/wai/quantum-cross-simulator/corpus/qasm/qpe_t8_m173.qasm new file mode 100644 index 000000000..e933e7301 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/qpe_t8_m173.qasm @@ -0,0 +1,60 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[9] q; +x q[8]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +cp(pi*173/128) q[0], q[8]; +cp(pi*45/64) q[1], q[8]; +cp(pi*45/32) q[2], q[8]; +cp(pi*13/16) q[3], q[8]; +cp(pi*13/8) q[4], q[8]; +cp(pi*5/4) q[5], q[8]; +cp(pi/2) q[6], q[8]; +cp(pi) q[7], q[8]; +swap q[3], q[4]; +swap q[2], q[5]; +swap q[1], q[6]; +swap q[0], q[7]; +h q[0]; +cp(-pi/2) q[0], q[1]; +h q[1]; +cp(-pi/4) q[0], q[2]; +cp(-pi/2) q[1], q[2]; +h q[2]; +cp(-pi/8) q[0], q[3]; +cp(-pi/4) q[1], q[3]; +cp(-pi/2) q[2], q[3]; +h q[3]; +cp(-pi/16) q[0], q[4]; +cp(-pi/8) q[1], q[4]; +cp(-pi/4) q[2], q[4]; +cp(-pi/2) q[3], q[4]; +h q[4]; +cp(-pi/32) q[0], q[5]; +cp(-pi/16) q[1], q[5]; +cp(-pi/8) q[2], q[5]; +cp(-pi/4) q[3], q[5]; +cp(-pi/2) q[4], q[5]; +h q[5]; +cp(-pi/64) q[0], q[6]; +cp(-pi/32) q[1], q[6]; +cp(-pi/16) q[2], q[6]; +cp(-pi/8) q[3], q[6]; +cp(-pi/4) q[4], q[6]; +cp(-pi/2) q[5], q[6]; +h q[6]; +cp(-pi/128) q[0], q[7]; +cp(-pi/64) q[1], q[7]; +cp(-pi/32) q[2], q[7]; +cp(-pi/16) q[3], q[7]; +cp(-pi/8) q[4], q[7]; +cp(-pi/4) q[5], q[7]; +cp(-pi/2) q[6], q[7]; +h q[7]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/repeat_until_success.qasm b/wai/quantum-cross-simulator/corpus/qasm/repeat_until_success.qasm new file mode 100644 index 000000000..90bbb1857 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/repeat_until_success.qasm @@ -0,0 +1,32 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[2] q; +bit[4] c; +h q[1]; +t q[1]; +cx q[0], q[1]; +h q[1]; +t q[1]; +c[0] = measure q[1]; +if (c[0] == 1) { x q[1]; } +h q[0]; +t q[0]; +h q[1]; +t q[1]; +cx q[0], q[1]; +h q[1]; +t q[1]; +c[1] = measure q[1]; +if (c[1] == 1) { x q[1]; } +h q[0]; +t q[0]; +h q[1]; +t q[1]; +cx q[0], q[1]; +h q[1]; +t q[1]; +c[2] = measure q[1]; +if (c[2] == 1) { x q[1]; } +h q[0]; +t q[0]; +c[3] = measure q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/reset_after_superposition.qasm b/wai/quantum-cross-simulator/corpus/qasm/reset_after_superposition.qasm new file mode 100644 index 000000000..8bf340543 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/reset_after_superposition.qasm @@ -0,0 +1,9 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[2] q; +bit[2] c; +h q[0]; +cx q[0], q[1]; +reset q[0]; +c[0] = measure q[0]; +c[1] = measure q[1]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/rotations_counts_n6.qasm b/wai/quantum-cross-simulator/corpus/qasm/rotations_counts_n6.qasm new file mode 100644 index 000000000..0bc16b97c --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/rotations_counts_n6.qasm @@ -0,0 +1,180 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[6] q; +bit[6] c; +U(1.50149751610298094, 2.98033700011497851, 1.64590151017894759) q[0]; +U(1.93752518902363929, 2.28663508311859593, 1.67960116894186391) q[1]; +U(0.23628562470471927, 0.64749767712160586, 0.71927500100972603) q[2]; +U(1.44464422744511989, 2.94398210329709101, 1.97608934002193844) q[3]; +U(1.13671815330683929, 1.64059746183696474, 1.43607995119298533) q[4]; +U(2.58928242428118442, 2.48608387403147952, 0.33138154773168676) q[5]; +cx q[0], q[1]; +cx q[2], q[3]; +cx q[4], q[5]; +U(2.81905881264298740, 2.34740402450336420, 1.24906445080515375) q[0]; +U(1.54493204713189988, 0.39094696497481752, 2.02738379773481162) q[1]; +U(0.86606235497968128, 2.08532711979830692, 0.25956284650284934) q[2]; +U(1.02152906245646787, 0.84783423018344274, 2.36334231919519889) q[3]; +U(1.42647293329657350, 0.92446112777529152, 1.67453807046105563) q[4]; +U(2.32482115086690043, 0.09210891297016108, 0.72185815848982970) q[5]; +cx q[1], q[2]; +cx q[3], q[4]; +U(1.94781198405520535, 0.78557449030008693, 0.82887671375209533) q[0]; +U(1.19817511273063034, 1.69779999607367592, 0.64177647487443609) q[1]; +U(0.66256621402934444, 2.67148186268681169, 0.23096289234533641) q[2]; +U(2.13771475907107643, 0.21618818572512906, 0.12456050101899381) q[3]; +U(1.16288717461409890, 2.39952575578859683, 2.53901033299538383) q[4]; +U(0.57128855034933836, 1.84370763110564957, 2.93517839229751633) q[5]; +cx q[0], q[1]; +cx q[2], q[3]; +cx q[4], q[5]; +U(2.43633760313890194, 2.73674758063377214, 1.77096993293853786) q[0]; +U(0.77147223375800483, 2.59830899830802753, 1.05819756073535439) q[1]; +U(2.29176470717864270, 1.69214001425435463, 0.07647178064668911) q[2]; +U(1.08739006836072653, 1.60275692733181789, 1.41860968611403354) q[3]; +U(1.82901408033278470, 0.04909000786803146, 1.23060753672316281) q[4]; +U(1.81327007619851203, 1.41041960885198167, 1.83953432644998371) q[5]; +cx q[1], q[2]; +cx q[3], q[4]; +U(2.98612549800796162, 1.29772055413432928, 0.93473718990264667) q[0]; +U(1.42988354971988452, 1.78405037236822760, 1.91124474736461905) q[1]; +U(1.49163902537001929, 2.52288031312275582, 2.91989326173163357) q[2]; +U(0.14083038385990504, 2.66962668295110371, 2.57625832367354150) q[3]; +U(2.23734574944245023, 0.04326374460670426, 1.29927076686161264) q[4]; +U(0.95787055827194076, 0.22655739928262355, 0.44739118532511002) q[5]; +cx q[0], q[1]; +cx q[2], q[3]; +cx q[4], q[5]; +U(1.30039029151733550, 0.28493888898959164, 0.92020740423707121) q[0]; +U(1.83830128816816504, 0.46357754192928880, 2.83448855027792046) q[1]; +U(0.45228408076923538, 1.89716470412049732, 1.05361419993442231) q[2]; +U(0.32558616813784649, 2.09184084730333938, 2.84162131555724213) q[3]; +U(1.06815624751718512, 2.54975002339673854, 2.21459787537470905) q[4]; +U(2.15129147231712394, 0.59868492316822087, 2.49664803786746646) q[5]; +cx q[1], q[2]; +cx q[3], q[4]; +U(1.78835238085736146, 0.42938037741841342, 2.38807534245408240) q[0]; +U(1.63012661782782082, 2.73191306214736942, 0.42364557852916132) q[1]; +U(2.50377234228330543, 1.20721931515877782, 0.68865786246402588) q[2]; +U(0.82546763557561850, 0.90516123375752942, 1.45140063202456797) q[3]; +U(1.15472455671284342, 0.75584020048086154, 1.48738393922373306) q[4]; +U(0.94149924156248327, 2.80751759519928951, 2.42237916674880346) q[5]; +cx q[0], q[1]; +cx q[2], q[3]; +cx q[4], q[5]; +U(1.13358284901497153, 1.95511450754421337, 2.21189931451802975) q[0]; +U(2.23332918845640241, 0.25668303276816290, 0.09423616476546013) q[1]; +U(1.74284298021049589, 2.83893504504915285, 2.21342704100424228) q[2]; +U(0.54262941330832370, 2.32158812438605101, 2.03782262789654063) q[3]; +U(2.03217182488088136, 1.39963285367206713, 2.40846108086863941) q[4]; +U(0.07264255533105027, 0.16040981685582746, 0.16851647752246063) q[5]; +cx q[1], q[2]; +cx q[3], q[4]; +U(1.98296159498566108, 0.13379603784947007, 2.21831437813818482) q[0]; +U(1.15677092865322605, 2.36154118809254623, 0.73304605101360003) q[1]; +U(0.31043212107323052, 1.07156505175520680, 1.04827249676285860) q[2]; +U(0.59049098142826538, 2.08012054366643280, 0.59968249292091182) q[3]; +U(0.66596538387696427, 1.96410481394210868, 2.41586518531174700) q[4]; +U(2.87216589530011466, 1.96702466640057843, 2.18243998880318889) q[5]; +cx q[0], q[1]; +cx q[2], q[3]; +cx q[4], q[5]; +U(1.52942714653994485, 0.84518565612896092, 2.91588772734130073) q[0]; +U(0.08947709250549662, 0.29211966212854385, 2.37194622328461525) q[1]; +U(1.61652589280828456, 2.49534864268182151, 0.72972899347175157) q[2]; +U(2.79677707521165691, 2.63836160973376222, 0.43150791761853891) q[3]; +U(1.07262230225352675, 0.16918171450475413, 0.00762497374913322) q[4]; +U(2.47601969210533762, 1.08725719196236491, 2.40644292065628341) q[5]; +cx q[1], q[2]; +cx q[3], q[4]; +U(2.97477539167985049, 2.74629864494816311, 1.39810483990775023) q[0]; +U(2.55445197834397599, 1.36601963088246418, 2.01979915918368800) q[1]; +U(1.45606227719054466, 1.56553632512454576, 0.44673768342649407) q[2]; +U(0.83925222499360776, 2.61173570939231607, 2.50406002993464472) q[3]; +U(0.49298082307244257, 0.99847300780989706, 1.52160738581784439) q[4]; +U(2.99004869597337216, 2.71752298628405650, 2.26508535578437463) q[5]; +cx q[0], q[1]; +cx q[2], q[3]; +cx q[4], q[5]; +U(2.70773373151545092, 1.15166064781506363, 2.22045462450204766) q[0]; +U(0.69259449567942980, 1.42775995274254703, 1.40843116666646822) q[1]; +U(2.12741125866758535, 1.35640381252668039, 0.32060365984208601) q[2]; +U(0.95890058631891940, 0.99149694982066830, 0.36733762458781645) q[3]; +U(0.17500210269439707, 0.29514780676376177, 2.93046282095102596) q[4]; +U(0.70113629907649364, 0.99384597272610808, 0.27906171669790194) q[5]; +cx q[1], q[2]; +cx q[3], q[4]; +U(2.76078208011146987, 1.48105950626069341, 2.66875158418566413) q[0]; +U(0.84510234194877101, 0.98904263508746175, 0.49609109524637206) q[1]; +U(0.08020834870138253, 0.29276590050366855, 1.97844246285111658) q[2]; +U(1.97555589002000298, 0.52591670358766215, 1.50623846013752547) q[3]; +U(1.60963322203361890, 0.33004285398028644, 1.98283615808353509) q[4]; +U(1.97620403763151775, 0.87095984614056772, 0.26058962791619129) q[5]; +cx q[0], q[1]; +cx q[2], q[3]; +cx q[4], q[5]; +U(1.62577300000935120, 0.69794524876474155, 1.27280616462760178) q[0]; +U(2.76310063767228946, 2.36438860121595631, 2.44448815696183740) q[1]; +U(2.87776338407901157, 2.17463738533521890, 1.00640087477139905) q[2]; +U(0.27723740092914066, 2.04411281557987703, 2.67578788402571320) q[3]; +U(2.97391943192803033, 2.00706899854588618, 0.05022000202479518) q[4]; +U(0.64273586606371904, 2.01559902792444022, 0.35291684029250737) q[5]; +cx q[1], q[2]; +cx q[3], q[4]; +U(1.92917098213764228, 2.86665366558752605, 0.04221566440546548) q[0]; +U(0.23096280270811925, 2.69967346200316996, 1.39623336744860080) q[1]; +U(1.20374446984884306, 0.74546071282629843, 2.01174764639237514) q[2]; +U(1.53088158082935561, 1.03501405089829840, 1.16727769959461704) q[3]; +U(2.03116137514259372, 2.56860136306976485, 2.94446027866111323) q[4]; +U(0.34867966323127313, 1.68669768729996394, 0.85778952032368158) q[5]; +cx q[0], q[1]; +cx q[2], q[3]; +cx q[4], q[5]; +U(1.63446026994369332, 2.36003998236926304, 0.27398808497672198) q[0]; +U(0.39365957208659120, 2.49818905280742018, 1.84281817517620261) q[1]; +U(0.16149808225989297, 2.95168241360949147, 0.13377039416952914) q[2]; +U(2.79131495285047119, 2.76313641667336757, 1.94256894727264084) q[3]; +U(0.14109783114591885, 2.47979413606656124, 0.08610774935111830) q[4]; +U(2.07909794655327983, 2.80188026713711414, 2.46890318776441730) q[5]; +cx q[1], q[2]; +cx q[3], q[4]; +U(2.50312620909772216, 2.35738611525283158, 2.01770787957940881) q[0]; +U(1.25683984017594466, 0.93367351110234954, 1.22911144941376017) q[1]; +U(2.75938076807498046, 2.24524258917309923, 0.41266882065236444) q[2]; +U(2.87937153248392257, 2.08243244487488367, 1.02878412909182299) q[3]; +U(1.04020080282559270, 0.78434793539454645, 2.62200652043837273) q[4]; +U(1.62000674872440687, 1.67235439334478801, 0.75779899358452946) q[5]; +cx q[0], q[1]; +cx q[2], q[3]; +cx q[4], q[5]; +U(2.57288463594865404, 2.78547449603955002, 1.65132233428938271) q[0]; +U(0.26850352433629476, 0.16789276044354406, 2.26105188779353736) q[1]; +U(1.42799274336927142, 1.10953604813616307, 1.54082131658989105) q[2]; +U(0.14142462008234476, 2.54931539938241060, 1.37385445341176081) q[3]; +U(2.34079066471638096, 1.80747830247946870, 1.61378521356969788) q[4]; +U(1.59787508002805943, 2.12553979525057680, 0.09014131571478354) q[5]; +cx q[1], q[2]; +cx q[3], q[4]; +U(0.08810318523849561, 0.96517960732837279, 2.08582142720323723) q[0]; +U(0.33269823872992551, 1.00768417387409980, 0.32370251383097404) q[1]; +U(2.40839180791378733, 2.17472082013707284, 0.12090890276992941) q[2]; +U(0.03082054574297435, 2.28440490401877888, 2.17897541423215676) q[3]; +U(1.66475363435617799, 2.81098943451787494, 1.52826832772156300) q[4]; +U(0.95512645970930865, 0.32569288549052242, 1.25908161580446375) q[5]; +cx q[0], q[1]; +cx q[2], q[3]; +cx q[4], q[5]; +U(1.74951717844275526, 2.45689872605020653, 0.81325632644544354) q[0]; +U(1.02374282457777729, 2.61448858301261967, 0.87203559360238363) q[1]; +U(1.49870831717374514, 2.18516064997543877, 1.37777655249477107) q[2]; +U(2.10153645903850936, 0.70671570239128727, 2.32135216123252721) q[3]; +U(1.78317292506442365, 0.30752190887753493, 1.97418220161232297) q[4]; +U(2.09098311425928247, 1.54072897205642993, 1.66455214588912214) q[5]; +cx q[1], q[2]; +cx q[3], q[4]; +c[0] = measure q[0]; +c[1] = measure q[1]; +c[2] = measure q[2]; +c[3] = measure q[3]; +c[4] = measure q[4]; +c[5] = measure q[5]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/rotations_n6.qasm b/wai/quantum-cross-simulator/corpus/qasm/rotations_n6.qasm new file mode 100644 index 000000000..538238b7d --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/rotations_n6.qasm @@ -0,0 +1,173 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[6] q; +U(1.50149751610298094, 2.98033700011497851, 1.64590151017894759) q[0]; +U(1.93752518902363929, 2.28663508311859593, 1.67960116894186391) q[1]; +U(0.23628562470471927, 0.64749767712160586, 0.71927500100972603) q[2]; +U(1.44464422744511989, 2.94398210329709101, 1.97608934002193844) q[3]; +U(1.13671815330683929, 1.64059746183696474, 1.43607995119298533) q[4]; +U(2.58928242428118442, 2.48608387403147952, 0.33138154773168676) q[5]; +cx q[0], q[1]; +cx q[2], q[3]; +cx q[4], q[5]; +U(2.81905881264298740, 2.34740402450336420, 1.24906445080515375) q[0]; +U(1.54493204713189988, 0.39094696497481752, 2.02738379773481162) q[1]; +U(0.86606235497968128, 2.08532711979830692, 0.25956284650284934) q[2]; +U(1.02152906245646787, 0.84783423018344274, 2.36334231919519889) q[3]; +U(1.42647293329657350, 0.92446112777529152, 1.67453807046105563) q[4]; +U(2.32482115086690043, 0.09210891297016108, 0.72185815848982970) q[5]; +cx q[1], q[2]; +cx q[3], q[4]; +U(1.94781198405520535, 0.78557449030008693, 0.82887671375209533) q[0]; +U(1.19817511273063034, 1.69779999607367592, 0.64177647487443609) q[1]; +U(0.66256621402934444, 2.67148186268681169, 0.23096289234533641) q[2]; +U(2.13771475907107643, 0.21618818572512906, 0.12456050101899381) q[3]; +U(1.16288717461409890, 2.39952575578859683, 2.53901033299538383) q[4]; +U(0.57128855034933836, 1.84370763110564957, 2.93517839229751633) q[5]; +cx q[0], q[1]; +cx q[2], q[3]; +cx q[4], q[5]; +U(2.43633760313890194, 2.73674758063377214, 1.77096993293853786) q[0]; +U(0.77147223375800483, 2.59830899830802753, 1.05819756073535439) q[1]; +U(2.29176470717864270, 1.69214001425435463, 0.07647178064668911) q[2]; +U(1.08739006836072653, 1.60275692733181789, 1.41860968611403354) q[3]; +U(1.82901408033278470, 0.04909000786803146, 1.23060753672316281) q[4]; +U(1.81327007619851203, 1.41041960885198167, 1.83953432644998371) q[5]; +cx q[1], q[2]; +cx q[3], q[4]; +U(2.98612549800796162, 1.29772055413432928, 0.93473718990264667) q[0]; +U(1.42988354971988452, 1.78405037236822760, 1.91124474736461905) q[1]; +U(1.49163902537001929, 2.52288031312275582, 2.91989326173163357) q[2]; +U(0.14083038385990504, 2.66962668295110371, 2.57625832367354150) q[3]; +U(2.23734574944245023, 0.04326374460670426, 1.29927076686161264) q[4]; +U(0.95787055827194076, 0.22655739928262355, 0.44739118532511002) q[5]; +cx q[0], q[1]; +cx q[2], q[3]; +cx q[4], q[5]; +U(1.30039029151733550, 0.28493888898959164, 0.92020740423707121) q[0]; +U(1.83830128816816504, 0.46357754192928880, 2.83448855027792046) q[1]; +U(0.45228408076923538, 1.89716470412049732, 1.05361419993442231) q[2]; +U(0.32558616813784649, 2.09184084730333938, 2.84162131555724213) q[3]; +U(1.06815624751718512, 2.54975002339673854, 2.21459787537470905) q[4]; +U(2.15129147231712394, 0.59868492316822087, 2.49664803786746646) q[5]; +cx q[1], q[2]; +cx q[3], q[4]; +U(1.78835238085736146, 0.42938037741841342, 2.38807534245408240) q[0]; +U(1.63012661782782082, 2.73191306214736942, 0.42364557852916132) q[1]; +U(2.50377234228330543, 1.20721931515877782, 0.68865786246402588) q[2]; +U(0.82546763557561850, 0.90516123375752942, 1.45140063202456797) q[3]; +U(1.15472455671284342, 0.75584020048086154, 1.48738393922373306) q[4]; +U(0.94149924156248327, 2.80751759519928951, 2.42237916674880346) q[5]; +cx q[0], q[1]; +cx q[2], q[3]; +cx q[4], q[5]; +U(1.13358284901497153, 1.95511450754421337, 2.21189931451802975) q[0]; +U(2.23332918845640241, 0.25668303276816290, 0.09423616476546013) q[1]; +U(1.74284298021049589, 2.83893504504915285, 2.21342704100424228) q[2]; +U(0.54262941330832370, 2.32158812438605101, 2.03782262789654063) q[3]; +U(2.03217182488088136, 1.39963285367206713, 2.40846108086863941) q[4]; +U(0.07264255533105027, 0.16040981685582746, 0.16851647752246063) q[5]; +cx q[1], q[2]; +cx q[3], q[4]; +U(1.98296159498566108, 0.13379603784947007, 2.21831437813818482) q[0]; +U(1.15677092865322605, 2.36154118809254623, 0.73304605101360003) q[1]; +U(0.31043212107323052, 1.07156505175520680, 1.04827249676285860) q[2]; +U(0.59049098142826538, 2.08012054366643280, 0.59968249292091182) q[3]; +U(0.66596538387696427, 1.96410481394210868, 2.41586518531174700) q[4]; +U(2.87216589530011466, 1.96702466640057843, 2.18243998880318889) q[5]; +cx q[0], q[1]; +cx q[2], q[3]; +cx q[4], q[5]; +U(1.52942714653994485, 0.84518565612896092, 2.91588772734130073) q[0]; +U(0.08947709250549662, 0.29211966212854385, 2.37194622328461525) q[1]; +U(1.61652589280828456, 2.49534864268182151, 0.72972899347175157) q[2]; +U(2.79677707521165691, 2.63836160973376222, 0.43150791761853891) q[3]; +U(1.07262230225352675, 0.16918171450475413, 0.00762497374913322) q[4]; +U(2.47601969210533762, 1.08725719196236491, 2.40644292065628341) q[5]; +cx q[1], q[2]; +cx q[3], q[4]; +U(2.97477539167985049, 2.74629864494816311, 1.39810483990775023) q[0]; +U(2.55445197834397599, 1.36601963088246418, 2.01979915918368800) q[1]; +U(1.45606227719054466, 1.56553632512454576, 0.44673768342649407) q[2]; +U(0.83925222499360776, 2.61173570939231607, 2.50406002993464472) q[3]; +U(0.49298082307244257, 0.99847300780989706, 1.52160738581784439) q[4]; +U(2.99004869597337216, 2.71752298628405650, 2.26508535578437463) q[5]; +cx q[0], q[1]; +cx q[2], q[3]; +cx q[4], q[5]; +U(2.70773373151545092, 1.15166064781506363, 2.22045462450204766) q[0]; +U(0.69259449567942980, 1.42775995274254703, 1.40843116666646822) q[1]; +U(2.12741125866758535, 1.35640381252668039, 0.32060365984208601) q[2]; +U(0.95890058631891940, 0.99149694982066830, 0.36733762458781645) q[3]; +U(0.17500210269439707, 0.29514780676376177, 2.93046282095102596) q[4]; +U(0.70113629907649364, 0.99384597272610808, 0.27906171669790194) q[5]; +cx q[1], q[2]; +cx q[3], q[4]; +U(2.76078208011146987, 1.48105950626069341, 2.66875158418566413) q[0]; +U(0.84510234194877101, 0.98904263508746175, 0.49609109524637206) q[1]; +U(0.08020834870138253, 0.29276590050366855, 1.97844246285111658) q[2]; +U(1.97555589002000298, 0.52591670358766215, 1.50623846013752547) q[3]; +U(1.60963322203361890, 0.33004285398028644, 1.98283615808353509) q[4]; +U(1.97620403763151775, 0.87095984614056772, 0.26058962791619129) q[5]; +cx q[0], q[1]; +cx q[2], q[3]; +cx q[4], q[5]; +U(1.62577300000935120, 0.69794524876474155, 1.27280616462760178) q[0]; +U(2.76310063767228946, 2.36438860121595631, 2.44448815696183740) q[1]; +U(2.87776338407901157, 2.17463738533521890, 1.00640087477139905) q[2]; +U(0.27723740092914066, 2.04411281557987703, 2.67578788402571320) q[3]; +U(2.97391943192803033, 2.00706899854588618, 0.05022000202479518) q[4]; +U(0.64273586606371904, 2.01559902792444022, 0.35291684029250737) q[5]; +cx q[1], q[2]; +cx q[3], q[4]; +U(1.92917098213764228, 2.86665366558752605, 0.04221566440546548) q[0]; +U(0.23096280270811925, 2.69967346200316996, 1.39623336744860080) q[1]; +U(1.20374446984884306, 0.74546071282629843, 2.01174764639237514) q[2]; +U(1.53088158082935561, 1.03501405089829840, 1.16727769959461704) q[3]; +U(2.03116137514259372, 2.56860136306976485, 2.94446027866111323) q[4]; +U(0.34867966323127313, 1.68669768729996394, 0.85778952032368158) q[5]; +cx q[0], q[1]; +cx q[2], q[3]; +cx q[4], q[5]; +U(1.63446026994369332, 2.36003998236926304, 0.27398808497672198) q[0]; +U(0.39365957208659120, 2.49818905280742018, 1.84281817517620261) q[1]; +U(0.16149808225989297, 2.95168241360949147, 0.13377039416952914) q[2]; +U(2.79131495285047119, 2.76313641667336757, 1.94256894727264084) q[3]; +U(0.14109783114591885, 2.47979413606656124, 0.08610774935111830) q[4]; +U(2.07909794655327983, 2.80188026713711414, 2.46890318776441730) q[5]; +cx q[1], q[2]; +cx q[3], q[4]; +U(2.50312620909772216, 2.35738611525283158, 2.01770787957940881) q[0]; +U(1.25683984017594466, 0.93367351110234954, 1.22911144941376017) q[1]; +U(2.75938076807498046, 2.24524258917309923, 0.41266882065236444) q[2]; +U(2.87937153248392257, 2.08243244487488367, 1.02878412909182299) q[3]; +U(1.04020080282559270, 0.78434793539454645, 2.62200652043837273) q[4]; +U(1.62000674872440687, 1.67235439334478801, 0.75779899358452946) q[5]; +cx q[0], q[1]; +cx q[2], q[3]; +cx q[4], q[5]; +U(2.57288463594865404, 2.78547449603955002, 1.65132233428938271) q[0]; +U(0.26850352433629476, 0.16789276044354406, 2.26105188779353736) q[1]; +U(1.42799274336927142, 1.10953604813616307, 1.54082131658989105) q[2]; +U(0.14142462008234476, 2.54931539938241060, 1.37385445341176081) q[3]; +U(2.34079066471638096, 1.80747830247946870, 1.61378521356969788) q[4]; +U(1.59787508002805943, 2.12553979525057680, 0.09014131571478354) q[5]; +cx q[1], q[2]; +cx q[3], q[4]; +U(0.08810318523849561, 0.96517960732837279, 2.08582142720323723) q[0]; +U(0.33269823872992551, 1.00768417387409980, 0.32370251383097404) q[1]; +U(2.40839180791378733, 2.17472082013707284, 0.12090890276992941) q[2]; +U(0.03082054574297435, 2.28440490401877888, 2.17897541423215676) q[3]; +U(1.66475363435617799, 2.81098943451787494, 1.52826832772156300) q[4]; +U(0.95512645970930865, 0.32569288549052242, 1.25908161580446375) q[5]; +cx q[0], q[1]; +cx q[2], q[3]; +cx q[4], q[5]; +U(1.74951717844275526, 2.45689872605020653, 0.81325632644544354) q[0]; +U(1.02374282457777729, 2.61448858301261967, 0.87203559360238363) q[1]; +U(1.49870831717374514, 2.18516064997543877, 1.37777655249477107) q[2]; +U(2.10153645903850936, 0.70671570239128727, 2.32135216123252721) q[3]; +U(1.78317292506442365, 0.30752190887753493, 1.97418220161232297) q[4]; +U(2.09098311425928247, 1.54072897205642993, 1.66455214588912214) q[5]; +cx q[1], q[2]; +cx q[3], q[4]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/rotations_wide_n20.qasm b/wai/quantum-cross-simulator/corpus/qasm/rotations_wide_n20.qasm new file mode 100644 index 000000000..ace144a14 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/rotations_wide_n20.qasm @@ -0,0 +1,298 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[20] q; +U(0.96585456831455149, 2.81740693622979837, 2.32042187587695041) q[0]; +U(2.51892055336466532, 0.65085583288933773, 1.11414459052023638) q[1]; +U(2.98167068742664261, 2.09908644078740947, 0.58589190409393385) q[2]; +U(2.07669461011711591, 1.07021249301623334, 0.16683912562929917) q[3]; +U(0.03091121126693869, 2.82042812407929245, 1.93409002394689967) q[4]; +U(2.05503655986033807, 0.87008186292158326, 2.41512123504251882) q[5]; +U(1.99501035166922006, 0.88173447976412522, 1.11429850727708553) q[6]; +U(0.89822587176620764, 1.02461592428396331, 1.63112001982834387) q[7]; +U(1.87771720132907513, 2.48557336070692922, 2.52289484257742785) q[8]; +U(2.48606433511320017, 0.29355710146121820, 0.12183224605237800) q[9]; +U(0.22625786399471283, 2.36113764933939285, 0.02190417040013176) q[10]; +U(0.79212190258097048, 1.28247754838154417, 0.15678416977016927) q[11]; +U(2.93069021564965197, 2.64346734509480360, 0.67619124702205058) q[12]; +U(1.53040141482564573, 1.99112168098470026, 0.30369057380570807) q[13]; +U(1.97160672871521481, 0.84578777718511189, 0.78916337289398422) q[14]; +U(1.51153479932798213, 0.82396616447775649, 1.22782568678250899) q[15]; +U(2.78106606079801886, 1.38174661261679368, 0.07355971120825342) q[16]; +U(1.47116283228980652, 0.27844595562631828, 0.83728927534711779) q[17]; +U(1.30033786115337829, 0.05370456511146486, 2.93844787504909044) q[18]; +U(0.33609434620533839, 0.86265768736833536, 0.01447388989486485) q[19]; +cx q[0], q[1]; +cx q[2], q[3]; +cx q[4], q[5]; +cx q[6], q[7]; +cx q[8], q[9]; +cx q[10], q[11]; +cx q[12], q[13]; +cx q[14], q[15]; +cx q[16], q[17]; +cx q[18], q[19]; +U(2.64299169868920633, 0.03975115398278383, 1.38779989543196346) q[0]; +U(1.98771958650044054, 0.35867384161990948, 1.68614435084498703) q[1]; +U(2.14700430442890135, 0.11207468921427912, 1.67523805418604690) q[2]; +U(2.43794444792833952, 2.04675477085082348, 2.58796388687085572) q[3]; +U(1.03630563124502622, 2.50691318043316058, 1.25964211462310614) q[4]; +U(2.78198666557084817, 2.39965969321807484, 0.87973896684987521) q[5]; +U(2.79099955925949840, 0.94522457287521685, 2.40146591751834461) q[6]; +U(1.99764790623119827, 2.64188076179261554, 0.70784264197992900) q[7]; +U(2.38849725360901659, 1.82882466031068743, 2.99187553071215896) q[8]; +U(1.93868586117759631, 1.23342377153545564, 0.70892924086873833) q[9]; +U(2.07919575743916851, 2.72675009739792430, 2.79898283444133081) q[10]; +U(1.76657247307001431, 1.22854104418325557, 2.70832871299980748) q[11]; +U(2.07823731971621149, 1.17350187116230314, 2.08456293150681510) q[12]; +U(1.10594272305837987, 2.11620901222920023, 2.17578069539847024) q[13]; +U(2.15469377160882118, 1.91947351778467379, 0.80899998099565817) q[14]; +U(1.15628333246781836, 1.75375368534073816, 2.95391497506015068) q[15]; +U(2.83090108065654358, 0.31790214401021724, 0.47616341537369528) q[16]; +U(0.22060842859697265, 2.30879830035556605, 1.41204784397636015) q[17]; +U(2.52087199884808034, 1.38593818608970268, 0.29950755909937562) q[18]; +U(0.16766738460581114, 2.60512288175189223, 0.98460524118553937) q[19]; +cx q[1], q[2]; +cx q[3], q[4]; +cx q[5], q[6]; +cx q[7], q[8]; +cx q[9], q[10]; +cx q[11], q[12]; +cx q[13], q[14]; +cx q[15], q[16]; +cx q[17], q[18]; +U(0.89342951741028828, 1.31611570537273541, 1.11849793270647752) q[0]; +U(2.94184358995983072, 0.77369632743831830, 0.29948186082805737) q[1]; +U(2.71878323362995361, 0.19469672393646026, 2.43755566115140587) q[2]; +U(1.88561045032951088, 0.89054303971927538, 2.30468154194400334) q[3]; +U(0.71806408280798716, 2.64245142777336924, 2.22781219862054896) q[4]; +U(2.74374146328132743, 2.84400155507675890, 2.62931603349906762) q[5]; +U(0.17986044560078731, 2.93782860696347545, 1.32708533670121395) q[6]; +U(1.91712452387435394, 1.28227474013776552, 1.25280200867146111) q[7]; +U(0.26723336365652457, 1.26416844102041996, 0.75605576195357794) q[8]; +U(0.85689318757925709, 1.23770499180537698, 1.32958343145821928) q[9]; +U(0.76756074980874559, 1.45855921360417617, 2.44216310535731436) q[10]; +U(2.46447789774426101, 1.06518717487502117, 0.31543398602950033) q[11]; +U(1.65124757025957075, 0.02123316988001803, 0.64333156132948747) q[12]; +U(0.65513863541074588, 0.04405516583109304, 0.57891009191355976) q[13]; +U(1.34691081359954637, 0.79785480608360748, 2.82963354240611363) q[14]; +U(0.24137036183311617, 1.36441410367905011, 1.55424674264799742) q[15]; +U(1.35012891949016995, 0.76353401208120212, 1.42265673833557656) q[16]; +U(1.45507203668119876, 2.29100217665995289, 2.93212466083366701) q[17]; +U(1.86571351718489251, 0.26974435294327551, 0.67932010635817642) q[18]; +U(0.96930038804523056, 1.90265743153490898, 2.59721935661318188) q[19]; +cx q[0], q[1]; +cx q[2], q[3]; +cx q[4], q[5]; +cx q[6], q[7]; +cx q[8], q[9]; +cx q[10], q[11]; +cx q[12], q[13]; +cx q[14], q[15]; +cx q[16], q[17]; +cx q[18], q[19]; +U(1.53260420249045440, 1.57971603950599785, 0.51430780156660276) q[0]; +U(1.48248912680479207, 2.52614995524384181, 1.56389829073762909) q[1]; +U(0.32352385557749248, 2.65032095241895069, 0.35948513021716983) q[2]; +U(1.28347595192412504, 2.05479188815019809, 2.10382431596930496) q[3]; +U(1.45251015303552970, 0.81370500508356425, 1.21014013938371424) q[4]; +U(0.08278241694593828, 0.95200825098620180, 1.68169136699367920) q[5]; +U(0.93326482779484232, 1.10406608118248242, 0.22623084509719133) q[6]; +U(2.45215860813996247, 1.13007175044194238, 0.20352914727930937) q[7]; +U(2.20642136846105202, 2.63080034157996815, 2.65677871919257550) q[8]; +U(2.08245342041043596, 0.37606561014334250, 1.48432971829736604) q[9]; +U(0.54296793828717530, 0.61486381275847521, 1.16824710261135191) q[10]; +U(1.17341070146286078, 0.50287810676085758, 1.21727851268412974) q[11]; +U(2.18904983279979546, 0.82900712557365552, 2.40022417717545639) q[12]; +U(0.37684141922915037, 1.65852538380941353, 1.24991550571269368) q[13]; +U(2.71018394469068495, 0.56250638294506764, 1.81232947202077457) q[14]; +U(1.74572840829002423, 2.44790599858224343, 0.15568819211649543) q[15]; +U(1.89519576706338506, 1.55401381675521184, 0.46109461430534932) q[16]; +U(0.01969169714505026, 0.02752141938320629, 2.06656598536141152) q[17]; +U(2.42438626691635697, 1.64832579076816038, 2.53947125194288214) q[18]; +U(1.86884865412437213, 2.34528620247031583, 1.70256311743798836) q[19]; +cx q[1], q[2]; +cx q[3], q[4]; +cx q[5], q[6]; +cx q[7], q[8]; +cx q[9], q[10]; +cx q[11], q[12]; +cx q[13], q[14]; +cx q[15], q[16]; +cx q[17], q[18]; +U(0.09118079729437296, 1.65134243813487233, 0.73371279840419399) q[0]; +U(2.82762609144239172, 0.77677972338805245, 1.30434111340506149) q[1]; +U(1.92126495587553579, 2.43953620659439442, 0.35435682111373897) q[2]; +U(0.98615985021584037, 0.32638388977655149, 1.09131394470521674) q[3]; +U(0.13949877256130913, 2.23891267197377707, 2.97025158827343349) q[4]; +U(0.96913169312000541, 1.10227886908488404, 1.68647328372487558) q[5]; +U(0.25884092396580137, 2.64146614443843039, 2.90308996075312136) q[6]; +U(0.48639373732025138, 2.02586757240072522, 2.60620646825898458) q[7]; +U(0.00661250964076357, 1.03011073804236337, 2.75362666600842169) q[8]; +U(2.63851023264609416, 2.78374223853975221, 1.60511248528685578) q[9]; +U(1.84880330790041940, 1.90555695959786464, 1.39049403066729381) q[10]; +U(2.45777333974668042, 1.46688680971430356, 1.44861680451061521) q[11]; +U(1.45379094401490733, 0.71334501594359704, 1.31997434952348979) q[12]; +U(1.69799645512392334, 2.80560825137020121, 0.53719848622922726) q[13]; +U(2.15051331437414089, 1.69565880055603939, 1.84678447066538213) q[14]; +U(1.29259551640990833, 0.43880694398386705, 2.42052383216021190) q[15]; +U(2.06008438974804317, 1.23486891301709602, 1.72868633662932565) q[16]; +U(1.63530417183687230, 0.12380027840508459, 0.42244200297441601) q[17]; +U(1.19962576446301722, 2.34631289399583113, 1.61986268843323835) q[18]; +U(0.37413727632405009, 0.10214496993325467, 1.36618478178568757) q[19]; +cx q[0], q[1]; +cx q[2], q[3]; +cx q[4], q[5]; +cx q[6], q[7]; +cx q[8], q[9]; +cx q[10], q[11]; +cx q[12], q[13]; +cx q[14], q[15]; +cx q[16], q[17]; +cx q[18], q[19]; +U(2.62520747357511963, 0.04316449616388144, 1.63646231483119670) q[0]; +U(2.27787796329423708, 0.51196468999380641, 0.64133012775528569) q[1]; +U(2.05882288854907487, 1.11339911579427232, 2.65382209370161905) q[2]; +U(2.33363799651119381, 2.01678764972498202, 2.35055597540328158) q[3]; +U(2.66826097594348668, 2.07818460151277617, 0.47921355977775967) q[4]; +U(0.02825388393587870, 1.54132827340089098, 2.80983366105653638) q[5]; +U(1.23411005810476430, 1.16972838648331761, 2.83073089823301836) q[6]; +U(0.02736822125408132, 2.76868103727370574, 2.67735041135379985) q[7]; +U(1.06621649992739314, 1.72260004922924331, 1.45443229888653442) q[8]; +U(2.82514623999140193, 2.35068635305531740, 0.13326741973621157) q[9]; +U(0.79054067916023017, 2.21022735413861697, 0.86565039873455670) q[10]; +U(1.33353863730306791, 2.68901062311594510, 1.04750064299698237) q[11]; +U(1.67482705253084055, 0.86788626171605650, 0.87805418109948683) q[12]; +U(1.02406715293227198, 0.78653140556596325, 1.17646465608317096) q[13]; +U(0.19651046936307551, 1.76356453570668466, 1.95644154833028199) q[14]; +U(0.73719129334439973, 0.15009741389089318, 0.68464595163568175) q[15]; +U(0.16165520735124816, 0.50376420274373930, 2.18860078286081943) q[16]; +U(2.71504771821285323, 1.14398709479053568, 2.33925001116451827) q[17]; +U(2.84985109093226068, 1.38373377148270768, 0.60306518068902217) q[18]; +U(0.38635526623383315, 2.18315306386604891, 0.81086634079277823) q[19]; +cx q[1], q[2]; +cx q[3], q[4]; +cx q[5], q[6]; +cx q[7], q[8]; +cx q[9], q[10]; +cx q[11], q[12]; +cx q[13], q[14]; +cx q[15], q[16]; +cx q[17], q[18]; +U(0.06692385865032597, 2.91839346502542207, 1.86568777048112195) q[0]; +U(2.43791055082664291, 1.07080829641597073, 1.21599434657444244) q[1]; +U(0.57255488187791482, 2.06837748759321829, 1.71393488138821868) q[2]; +U(1.13838303384761782, 0.40624023376737439, 2.98711636011148213) q[3]; +U(1.11055023188219770, 1.32124088100318266, 2.00742992306090651) q[4]; +U(1.36525636007200320, 1.13765508991895373, 0.87552648724476894) q[5]; +U(0.85504433625815918, 0.63348507558355621, 1.16875859510038809) q[6]; +U(1.73483054689411440, 2.11109275802888891, 2.28060555965255740) q[7]; +U(1.90778659867838847, 2.41803937983475291, 2.47235353641819897) q[8]; +U(1.05453796779662199, 2.14722565809784597, 1.05396143392178876) q[9]; +U(0.82529499192520769, 1.66593429831547326, 2.19604418590831832) q[10]; +U(0.10507493827888131, 0.40695991973212217, 1.33459755681544637) q[11]; +U(0.93231629068408082, 1.98197629983744924, 0.64922494805528689) q[12]; +U(2.74714502939845892, 0.95422851734418584, 0.46946768749554887) q[13]; +U(2.60363571630620417, 1.81600230075120942, 2.30574244192918162) q[14]; +U(0.78047378968486146, 1.27347071692417354, 0.29188026396344856) q[15]; +U(0.66902570802217623, 1.10159559054672395, 1.50684570227293701) q[16]; +U(0.69159280944436926, 0.18291790129056186, 1.97405185964233905) q[17]; +U(2.14631420871983213, 1.34024243994037543, 1.83953512172772857) q[18]; +U(0.82066158849806655, 2.39013029743480399, 1.77981407721138772) q[19]; +cx q[0], q[1]; +cx q[2], q[3]; +cx q[4], q[5]; +cx q[6], q[7]; +cx q[8], q[9]; +cx q[10], q[11]; +cx q[12], q[13]; +cx q[14], q[15]; +cx q[16], q[17]; +cx q[18], q[19]; +U(1.54181724970123332, 2.59180775912447361, 1.34405993424178656) q[0]; +U(1.17425886640526036, 1.39724711875378641, 1.94802973751773088) q[1]; +U(1.45420581652646510, 1.17743163690529240, 0.81287640835761995) q[2]; +U(0.97962285992489052, 1.10355411464739554, 2.13970497991797787) q[3]; +U(0.64331478417185587, 0.31742226035200209, 2.74162648816825721) q[4]; +U(1.32266951352335226, 1.35608895319149826, 1.99592774797709219) q[5]; +U(0.25736662119737100, 2.21110485488212123, 0.24159298048739706) q[6]; +U(1.46895678787383917, 1.88083950390473462, 1.68956002640846708) q[7]; +U(0.08080599722713388, 1.33572395645557829, 1.08838856021639019) q[8]; +U(0.80112247842409546, 1.29701571751337767, 2.24171612193964604) q[9]; +U(1.63476106761398187, 2.36059187166359456, 0.06731204185518071) q[10]; +U(1.77721789929174353, 1.64020716439617636, 1.98320013475324266) q[11]; +U(1.13994146719189884, 2.65527058275670640, 2.48764189988298784) q[12]; +U(2.14174950645701021, 0.13048798454536329, 2.97085221808004511) q[13]; +U(0.09941920445742930, 2.96641324978676259, 0.53330229862501587) q[14]; +U(2.70602529889729887, 2.33110945958430778, 0.77299214907478810) q[15]; +U(1.55715472083608037, 0.58256008665020529, 0.61673596844207241) q[16]; +U(0.08528092181422142, 0.93694404985104184, 0.38885369027268322) q[17]; +U(1.37623383671726222, 1.61860338422540381, 1.06729158217940922) q[18]; +U(0.38303021886261337, 1.39306017421480227, 1.75077600015464912) q[19]; +cx q[1], q[2]; +cx q[3], q[4]; +cx q[5], q[6]; +cx q[7], q[8]; +cx q[9], q[10]; +cx q[11], q[12]; +cx q[13], q[14]; +cx q[15], q[16]; +cx q[17], q[18]; +U(2.23488646139160877, 1.99883721880798372, 1.21502485507058449) q[0]; +U(0.12645694552300309, 1.15160102147544610, 1.56271439497125823) q[1]; +U(2.66121573083496081, 1.62218143798758689, 1.81606298349751808) q[2]; +U(1.62252281381111121, 2.61558824624097239, 2.37561686914282932) q[3]; +U(2.31306902150966289, 2.26374240200890190, 0.90730103655408756) q[4]; +U(2.20169863256125060, 0.35070617570365952, 0.23946481632475196) q[5]; +U(2.09097648295131712, 2.02580074652117015, 1.20214858644105414) q[6]; +U(0.22431883125607970, 1.10831890493147851, 0.68266863034258558) q[7]; +U(0.81118358971231768, 1.48289169859065689, 2.61578738510405405) q[8]; +U(0.35351312254348249, 1.73017548407828768, 1.19110822036413494) q[9]; +U(0.27125353201984503, 1.59092661788677397, 1.22787098634794003) q[10]; +U(0.46215346501971658, 0.63000793291014013, 2.86088320188359984) q[11]; +U(0.72455025927888127, 0.62687874751967853, 0.68693216187668163) q[12]; +U(1.13138754102117500, 2.37112398347739330, 2.21938932117718732) q[13]; +U(2.49081643266661862, 1.26488130773033268, 0.65161072749369362) q[14]; +U(0.72375618126662642, 1.11199908945799632, 2.44518541983102489) q[15]; +U(0.16044413840108563, 2.44099336972821132, 0.44273584799098837) q[16]; +U(2.99658472626643604, 1.11095515493590097, 0.32696056163391458) q[17]; +U(1.67587623444989613, 0.54960787891020691, 1.10942177097950778) q[18]; +U(0.81142319528154224, 0.08491613871402277, 1.79569453888997869) q[19]; +cx q[0], q[1]; +cx q[2], q[3]; +cx q[4], q[5]; +cx q[6], q[7]; +cx q[8], q[9]; +cx q[10], q[11]; +cx q[12], q[13]; +cx q[14], q[15]; +cx q[16], q[17]; +cx q[18], q[19]; +U(2.13558233955113236, 1.24698623707435401, 1.87230403996857353) q[0]; +U(2.39088804922756458, 0.38260820930792871, 0.52193769905042285) q[1]; +U(0.65132451830901545, 0.42948730749821191, 2.78651267156938220) q[2]; +U(1.46398918375765565, 2.30966016540379264, 2.11747875922496738) q[3]; +U(1.64686376160513595, 1.63305365108715846, 0.89787061611970619) q[4]; +U(0.82633797982645023, 1.91187788586524475, 1.33863824620585032) q[5]; +U(0.38384857194878761, 0.31394900760027112, 2.76764192696759948) q[6]; +U(2.67088418131365035, 2.44482347600092364, 1.37974025609419083) q[7]; +U(0.81177136298751845, 0.43014833381207995, 1.28667966872150434) q[8]; +U(0.74129100177101878, 0.90895231512451774, 1.13972490929346119) q[9]; +U(0.20402544695710553, 0.88194602761372955, 0.30041658286295767) q[10]; +U(2.36867862142989714, 1.34500227956638233, 1.52046631669223661) q[11]; +U(2.48505722148570100, 1.04602014065354968, 0.95653424700835843) q[12]; +U(1.33091791733784131, 1.81819622368224274, 0.97054710375386311) q[13]; +U(2.43749687132345759, 1.23817715859316421, 2.35600254356428465) q[14]; +U(1.22873033464528187, 0.93177638821729750, 1.77634063619467944) q[15]; +U(2.08821597736914455, 0.03768733792737878, 0.72414085336501882) q[16]; +U(1.83553065610236592, 2.97510620591479831, 1.90215852022120873) q[17]; +U(2.48305759141455990, 0.40467582602065578, 2.46543885459178876) q[18]; +U(1.41404625227621362, 1.68150639970318320, 2.04253229544863055) q[19]; +cx q[1], q[2]; +cx q[3], q[4]; +cx q[5], q[6]; +cx q[7], q[8]; +cx q[9], q[10]; +cx q[11], q[12]; +cx q[13], q[14]; +cx q[15], q[16]; +cx q[17], q[18]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/small_angle_k16.qasm b/wai/quantum-cross-simulator/corpus/qasm/small_angle_k16.qasm new file mode 100644 index 000000000..babf11beb --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/small_angle_k16.qasm @@ -0,0 +1,6 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +h q[0]; +p(pi/32768) q[0]; +h q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/small_angle_k24.qasm b/wai/quantum-cross-simulator/corpus/qasm/small_angle_k24.qasm new file mode 100644 index 000000000..1e96725dd --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/small_angle_k24.qasm @@ -0,0 +1,6 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +h q[0]; +p(pi/8388608) q[0]; +h q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/small_angle_k26.qasm b/wai/quantum-cross-simulator/corpus/qasm/small_angle_k26.qasm new file mode 100644 index 000000000..c15225b15 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/small_angle_k26.qasm @@ -0,0 +1,6 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +h q[0]; +p(pi/33554432) q[0]; +h q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/small_angle_k28.qasm b/wai/quantum-cross-simulator/corpus/qasm/small_angle_k28.qasm new file mode 100644 index 000000000..0a302922a --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/small_angle_k28.qasm @@ -0,0 +1,6 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +h q[0]; +p(pi/134217728) q[0]; +h q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/small_angle_k30.qasm b/wai/quantum-cross-simulator/corpus/qasm/small_angle_k30.qasm new file mode 100644 index 000000000..813b4670b --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/small_angle_k30.qasm @@ -0,0 +1,6 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +h q[0]; +p(pi/536870912) q[0]; +h q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/small_angle_k32.qasm b/wai/quantum-cross-simulator/corpus/qasm/small_angle_k32.qasm new file mode 100644 index 000000000..339254fc1 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/small_angle_k32.qasm @@ -0,0 +1,6 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +h q[0]; +p(pi/2147483648) q[0]; +h q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/small_angle_k8.qasm b/wai/quantum-cross-simulator/corpus/qasm/small_angle_k8.qasm new file mode 100644 index 000000000..8bb6a51ea --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/small_angle_k8.qasm @@ -0,0 +1,6 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +h q[0]; +p(pi/128) q[0]; +h q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/teleport.qasm b/wai/quantum-cross-simulator/corpus/qasm/teleport.qasm new file mode 100644 index 000000000..d9dcf67c5 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/teleport.qasm @@ -0,0 +1,14 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[3] q; +bit[3] c; +ry(pi/16) q[0]; +h q[1]; +cx q[1], q[2]; +cx q[0], q[1]; +h q[0]; +c[0] = measure q[0]; +c[1] = measure q[1]; +if (c[1] == 1) { x q[2]; } +if (c[0] == 1) { z q[2]; } +c[2] = measure q[2]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/tiny_radians.qasm b/wai/quantum-cross-simulator/corpus/qasm/tiny_radians.qasm new file mode 100644 index 000000000..fdf6b3c0a --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/tiny_radians.qasm @@ -0,0 +1,6 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[1] q; +h q[0]; +rz(1e-12) q[0]; +h q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/tn_mirror_n40.qasm b/wai/quantum-cross-simulator/corpus/qasm/tn_mirror_n40.qasm new file mode 100644 index 000000000..f2581bed2 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/tn_mirror_n40.qasm @@ -0,0 +1,361 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[40] q; +rx(pi*26515/16384) q[0]; +rx(pi*23623/32768) q[1]; +rx(pi*61719/32768) q[2]; +rx(pi*9595/8192) q[3]; +rz(pi*5509/16384) q[4]; +ry(pi*61591/32768) q[5]; +ry(pi*525/512) q[6]; +rz(pi*51209/32768) q[7]; +rz(pi*21073/32768) q[8]; +rz(pi*17661/16384) q[9]; +ry(pi*6959/16384) q[10]; +rx(pi*20841/32768) q[11]; +rz(pi*27611/16384) q[12]; +rx(pi*22071/32768) q[13]; +rz(pi*26039/16384) q[14]; +rz(pi*26249/16384) q[15]; +ry(pi*46155/32768) q[16]; +rx(pi*835/4096) q[17]; +ry(pi*52799/32768) q[18]; +rx(pi*1171/16384) q[19]; +ry(pi*4393/4096) q[20]; +rz(pi*9091/32768) q[21]; +rz(pi*22353/16384) q[22]; +rz(pi*19221/32768) q[23]; +rx(pi*4769/4096) q[24]; +rz(pi*3975/2048) q[25]; +rz(pi*87/512) q[26]; +rx(pi*52793/32768) q[27]; +ry(pi*1767/4096) q[28]; +rz(pi*12893/32768) q[29]; +rz(pi*3951/8192) q[30]; +rx(pi*17657/16384) q[31]; +ry(pi*11309/16384) q[32]; +ry(pi*885/8192) q[33]; +ry(pi*41735/32768) q[34]; +rz(pi*28911/32768) q[35]; +ry(pi*8993/8192) q[36]; +rx(pi*11937/8192) q[37]; +rx(pi*22211/32768) q[38]; +rz(pi*489/32768) q[39]; +cz q[0], q[1]; +cz q[2], q[3]; +cz q[4], q[5]; +cz q[6], q[7]; +cz q[8], q[9]; +cz q[10], q[11]; +cz q[12], q[13]; +cz q[14], q[15]; +cz q[16], q[17]; +cz q[18], q[19]; +cz q[20], q[21]; +cz q[22], q[23]; +cz q[24], q[25]; +cz q[26], q[27]; +cz q[28], q[29]; +cz q[30], q[31]; +cz q[32], q[33]; +cz q[34], q[35]; +cz q[36], q[37]; +cz q[38], q[39]; +ry(pi*31977/32768) q[0]; +ry(pi*45367/32768) q[1]; +rx(pi*11395/8192) q[2]; +rz(pi*40569/32768) q[3]; +rz(pi*22809/16384) q[4]; +ry(pi*15671/16384) q[5]; +rz(pi*24709/16384) q[6]; +rx(pi*6935/16384) q[7]; +rx(pi*13401/8192) q[8]; +rz(pi*45733/32768) q[9]; +ry(pi*5249/4096) q[10]; +ry(pi*19679/16384) q[11]; +ry(pi*4635/32768) q[12]; +rx(pi*20831/16384) q[13]; +rz(pi*58875/32768) q[14]; +ry(pi*20817/32768) q[15]; +rx(pi*13481/32768) q[16]; +rx(pi*31657/16384) q[17]; +ry(pi*13667/16384) q[18]; +rx(pi*29101/16384) q[19]; +rz(pi*32655/16384) q[20]; +rx(pi*11183/32768) q[21]; +rz(pi*4315/16384) q[22]; +ry(pi*26079/16384) q[23]; +ry(pi*30901/16384) q[24]; +rz(pi*37199/32768) q[25]; +rz(pi*5255/16384) q[26]; +rx(pi*231/128) q[27]; +rx(pi*27499/32768) q[28]; +rx(pi*15293/8192) q[29]; +rz(pi*32771/32768) q[30]; +rz(pi*23919/16384) q[31]; +rz(pi*21407/16384) q[32]; +ry(pi*1699/32768) q[33]; +rx(pi*31601/32768) q[34]; +rx(pi*3317/2048) q[35]; +rz(pi*54823/32768) q[36]; +rx(pi*9973/8192) q[37]; +rz(pi*48081/32768) q[38]; +rx(pi*12403/8192) q[39]; +cz q[1], q[2]; +cz q[3], q[4]; +cz q[5], q[6]; +cz q[7], q[8]; +cz q[9], q[10]; +cz q[11], q[12]; +cz q[13], q[14]; +cz q[15], q[16]; +cz q[17], q[18]; +cz q[19], q[20]; +cz q[21], q[22]; +cz q[23], q[24]; +cz q[25], q[26]; +cz q[27], q[28]; +cz q[29], q[30]; +cz q[31], q[32]; +cz q[33], q[34]; +cz q[35], q[36]; +cz q[37], q[38]; +rz(pi*2333/16384) q[0]; +ry(pi*6659/4096) q[1]; +ry(pi*17811/16384) q[2]; +rz(pi*5483/32768) q[3]; +rx(pi*46441/32768) q[4]; +ry(pi*35565/32768) q[5]; +ry(pi*22001/32768) q[6]; +rx(pi*687/32768) q[7]; +ry(pi*7429/16384) q[8]; +ry(pi*2183/2048) q[9]; +rx(pi*201/128) q[10]; +rx(pi*41367/32768) q[11]; +rx(pi*22465/16384) q[12]; +rz(pi*47867/32768) q[13]; +rx(pi*52137/32768) q[14]; +rx(pi*3887/4096) q[15]; +rx(pi*38647/32768) q[16]; +rx(pi*40391/32768) q[17]; +ry(pi*33225/32768) q[18]; +rz(pi*18597/16384) q[19]; +rz(pi*7131/32768) q[20]; +ry(pi*1337/4096) q[21]; +rz(pi*897/2048) q[22]; +rz(pi*8257/8192) q[23]; +rx(pi*24691/32768) q[24]; +rx(pi*2113/32768) q[25]; +rx(pi*2259/2048) q[26]; +ry(pi*46129/32768) q[27]; +rz(pi*31861/16384) q[28]; +ry(pi*10021/32768) q[29]; +rz(pi*7609/32768) q[30]; +rx(pi*8683/8192) q[31]; +rz(pi*15641/16384) q[32]; +ry(pi*42233/32768) q[33]; +ry(pi*377/2048) q[34]; +rx(pi*1693/16384) q[35]; +rz(pi*27389/32768) q[36]; +rx(pi*27899/16384) q[37]; +rz(pi*36149/32768) q[38]; +rz(pi*32533/32768) q[39]; +cz q[0], q[1]; +cz q[2], q[3]; +cz q[4], q[5]; +cz q[6], q[7]; +cz q[8], q[9]; +cz q[10], q[11]; +cz q[12], q[13]; +cz q[14], q[15]; +cz q[16], q[17]; +cz q[18], q[19]; +cz q[20], q[21]; +cz q[22], q[23]; +cz q[24], q[25]; +cz q[26], q[27]; +cz q[28], q[29]; +cz q[30], q[31]; +cz q[32], q[33]; +cz q[34], q[35]; +cz q[36], q[37]; +cz q[38], q[39]; +cz q[38], q[39]; +cz q[36], q[37]; +cz q[34], q[35]; +cz q[32], q[33]; +cz q[30], q[31]; +cz q[28], q[29]; +cz q[26], q[27]; +cz q[24], q[25]; +cz q[22], q[23]; +cz q[20], q[21]; +cz q[18], q[19]; +cz q[16], q[17]; +cz q[14], q[15]; +cz q[12], q[13]; +cz q[10], q[11]; +cz q[8], q[9]; +cz q[6], q[7]; +cz q[4], q[5]; +cz q[2], q[3]; +cz q[0], q[1]; +rz(-pi*32533/32768) q[39]; +rz(-pi*36149/32768) q[38]; +rx(-pi*27899/16384) q[37]; +rz(-pi*27389/32768) q[36]; +rx(-pi*1693/16384) q[35]; +ry(-pi*377/2048) q[34]; +ry(-pi*42233/32768) q[33]; +rz(-pi*15641/16384) q[32]; +rx(-pi*8683/8192) q[31]; +rz(-pi*7609/32768) q[30]; +ry(-pi*10021/32768) q[29]; +rz(-pi*31861/16384) q[28]; +ry(-pi*46129/32768) q[27]; +rx(-pi*2259/2048) q[26]; +rx(-pi*2113/32768) q[25]; +rx(-pi*24691/32768) q[24]; +rz(-pi*8257/8192) q[23]; +rz(-pi*897/2048) q[22]; +ry(-pi*1337/4096) q[21]; +rz(-pi*7131/32768) q[20]; +rz(-pi*18597/16384) q[19]; +ry(-pi*33225/32768) q[18]; +rx(-pi*40391/32768) q[17]; +rx(-pi*38647/32768) q[16]; +rx(-pi*3887/4096) q[15]; +rx(-pi*52137/32768) q[14]; +rz(-pi*47867/32768) q[13]; +rx(-pi*22465/16384) q[12]; +rx(-pi*41367/32768) q[11]; +rx(-pi*201/128) q[10]; +ry(-pi*2183/2048) q[9]; +ry(-pi*7429/16384) q[8]; +rx(-pi*687/32768) q[7]; +ry(-pi*22001/32768) q[6]; +ry(-pi*35565/32768) q[5]; +rx(-pi*46441/32768) q[4]; +rz(-pi*5483/32768) q[3]; +ry(-pi*17811/16384) q[2]; +ry(-pi*6659/4096) q[1]; +rz(-pi*2333/16384) q[0]; +cz q[37], q[38]; +cz q[35], q[36]; +cz q[33], q[34]; +cz q[31], q[32]; +cz q[29], q[30]; +cz q[27], q[28]; +cz q[25], q[26]; +cz q[23], q[24]; +cz q[21], q[22]; +cz q[19], q[20]; +cz q[17], q[18]; +cz q[15], q[16]; +cz q[13], q[14]; +cz q[11], q[12]; +cz q[9], q[10]; +cz q[7], q[8]; +cz q[5], q[6]; +cz q[3], q[4]; +cz q[1], q[2]; +rx(-pi*12403/8192) q[39]; +rz(-pi*48081/32768) q[38]; +rx(-pi*9973/8192) q[37]; +rz(-pi*54823/32768) q[36]; +rx(-pi*3317/2048) q[35]; +rx(-pi*31601/32768) q[34]; +ry(-pi*1699/32768) q[33]; +rz(-pi*21407/16384) q[32]; +rz(-pi*23919/16384) q[31]; +rz(-pi*32771/32768) q[30]; +rx(-pi*15293/8192) q[29]; +rx(-pi*27499/32768) q[28]; +rx(-pi*231/128) q[27]; +rz(-pi*5255/16384) q[26]; +rz(-pi*37199/32768) q[25]; +ry(-pi*30901/16384) q[24]; +ry(-pi*26079/16384) q[23]; +rz(-pi*4315/16384) q[22]; +rx(-pi*11183/32768) q[21]; +rz(-pi*32655/16384) q[20]; +rx(-pi*29101/16384) q[19]; +ry(-pi*13667/16384) q[18]; +rx(-pi*31657/16384) q[17]; +rx(-pi*13481/32768) q[16]; +ry(-pi*20817/32768) q[15]; +rz(-pi*58875/32768) q[14]; +rx(-pi*20831/16384) q[13]; +ry(-pi*4635/32768) q[12]; +ry(-pi*19679/16384) q[11]; +ry(-pi*5249/4096) q[10]; +rz(-pi*45733/32768) q[9]; +rx(-pi*13401/8192) q[8]; +rx(-pi*6935/16384) q[7]; +rz(-pi*24709/16384) q[6]; +ry(-pi*15671/16384) q[5]; +rz(-pi*22809/16384) q[4]; +rz(-pi*40569/32768) q[3]; +rx(-pi*11395/8192) q[2]; +ry(-pi*45367/32768) q[1]; +ry(-pi*31977/32768) q[0]; +cz q[38], q[39]; +cz q[36], q[37]; +cz q[34], q[35]; +cz q[32], q[33]; +cz q[30], q[31]; +cz q[28], q[29]; +cz q[26], q[27]; +cz q[24], q[25]; +cz q[22], q[23]; +cz q[20], q[21]; +cz q[18], q[19]; +cz q[16], q[17]; +cz q[14], q[15]; +cz q[12], q[13]; +cz q[10], q[11]; +cz q[8], q[9]; +cz q[6], q[7]; +cz q[4], q[5]; +cz q[2], q[3]; +cz q[0], q[1]; +rz(-pi*489/32768) q[39]; +rx(-pi*22211/32768) q[38]; +rx(-pi*11937/8192) q[37]; +ry(-pi*8993/8192) q[36]; +rz(-pi*28911/32768) q[35]; +ry(-pi*41735/32768) q[34]; +ry(-pi*885/8192) q[33]; +ry(-pi*11309/16384) q[32]; +rx(-pi*17657/16384) q[31]; +rz(-pi*3951/8192) q[30]; +rz(-pi*12893/32768) q[29]; +ry(-pi*1767/4096) q[28]; +rx(-pi*52793/32768) q[27]; +rz(-pi*87/512) q[26]; +rz(-pi*3975/2048) q[25]; +rx(-pi*4769/4096) q[24]; +rz(-pi*19221/32768) q[23]; +rz(-pi*22353/16384) q[22]; +rz(-pi*9091/32768) q[21]; +ry(-pi*4393/4096) q[20]; +rx(-pi*1171/16384) q[19]; +ry(-pi*52799/32768) q[18]; +rx(-pi*835/4096) q[17]; +ry(-pi*46155/32768) q[16]; +rz(-pi*26249/16384) q[15]; +rz(-pi*26039/16384) q[14]; +rx(-pi*22071/32768) q[13]; +rz(-pi*27611/16384) q[12]; +rx(-pi*20841/32768) q[11]; +ry(-pi*6959/16384) q[10]; +rz(-pi*17661/16384) q[9]; +rz(-pi*21073/32768) q[8]; +rz(-pi*51209/32768) q[7]; +ry(-pi*525/512) q[6]; +ry(-pi*61591/32768) q[5]; +rz(-pi*5509/16384) q[4]; +rx(-pi*9595/8192) q[3]; +rx(-pi*61719/32768) q[2]; +rx(-pi*23623/32768) q[1]; +rx(-pi*26515/16384) q[0]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/tn_shallow_n26.qasm b/wai/quantum-cross-simulator/corpus/qasm/tn_shallow_n26.qasm new file mode 100644 index 000000000..8e5031e72 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/tn_shallow_n26.qasm @@ -0,0 +1,196 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[26] q; +U(0.28921225976413933, 2.13378350042675569, 0.54315949693516716) q[0]; +U(1.35613967444062799, 0.34987531930656981, 2.44661754277362562) q[1]; +U(2.51568557274920423, 2.20794772386979299, 2.12026248649258342) q[2]; +U(2.57102508509970004, 2.51738988119452073, 2.56528294743257370) q[3]; +U(2.44669480382253831, 0.47534517539978303, 0.28458558964804128) q[4]; +U(2.24293903271935247, 2.45105370427144580, 0.41976624368000888) q[5]; +U(2.72102842312215692, 2.54114081981177957, 0.81873374583129396) q[6]; +U(1.01539592506962234, 1.74225582871509264, 0.86992375172224456) q[7]; +U(0.39663157082749336, 2.27400789363666668, 1.95472328453787719) q[8]; +U(0.15678082614323413, 1.41553253942740078, 0.71762811400807724) q[9]; +U(2.68861688078254798, 0.91655613533290272, 0.07510599441440601) q[10]; +U(0.97620805028523038, 0.71549006858975711, 1.68751167439424418) q[11]; +U(1.36212678080945541, 0.21723331466542363, 2.68721663932024367) q[12]; +U(2.96800576471636026, 0.28783487847778422, 2.66816156046702555) q[13]; +U(1.34896678312692678, 0.97851645270143033, 0.57860479041641127) q[14]; +U(0.35571213228654498, 1.36194811938358962, 0.16379622404783697) q[15]; +U(0.30666075411324555, 1.65337294927316601, 2.42936676935982654) q[16]; +U(2.02719240401644403, 1.17656670189194510, 2.56695128019721491) q[17]; +U(1.47451680694782506, 2.39513097614234125, 2.66054108871172831) q[18]; +U(0.86522230118940318, 2.72714703590825203, 2.80113187076782783) q[19]; +U(0.15010365328568755, 2.71662237264069935, 1.27562122121937995) q[20]; +U(1.66284664545736726, 1.80012184628741879, 1.84774945802991332) q[21]; +U(2.25316172532630307, 2.65421853706031639, 2.55737192078390618) q[22]; +U(0.46691334550016849, 2.15981346032440303, 0.30083321668661685) q[23]; +U(0.08961012070570302, 0.16289090674645599, 2.36865927049395561) q[24]; +U(0.72853644661118910, 0.26329195961119011, 0.33831241624009485) q[25]; +cx q[0], q[1]; +cx q[2], q[3]; +cx q[4], q[5]; +cx q[6], q[7]; +cx q[8], q[9]; +cx q[10], q[11]; +cx q[12], q[13]; +cx q[14], q[15]; +cx q[16], q[17]; +cx q[18], q[19]; +cx q[20], q[21]; +cx q[22], q[23]; +cx q[24], q[25]; +U(1.47849583308367078, 0.94157620945561358, 2.52594072394489160) q[0]; +U(1.56777307300767299, 1.48549000331278048, 1.88599928265559866) q[1]; +U(1.34668260755464919, 2.59840914343434248, 1.93384351517847334) q[2]; +U(0.43016740196083500, 0.11394176057341462, 1.30325023866859932) q[3]; +U(1.90467921807573472, 2.31162006186099734, 2.32869211311180597) q[4]; +U(0.09609187848107627, 0.52269430763217583, 1.66760078189857995) q[5]; +U(1.03092838359013085, 0.70108541029771053, 0.70480401865770561) q[6]; +U(2.06058927170451358, 1.53541373152644972, 2.62815490412942366) q[7]; +U(0.01238623745520077, 2.58187392898489626, 2.03041934938370070) q[8]; +U(0.67723990167063485, 2.38539919895078700, 0.19742657126204180) q[9]; +U(2.34851325434225582, 0.95840789830214467, 2.96427698876003327) q[10]; +U(0.20953547901185675, 2.27953066194348475, 2.65363329725065337) q[11]; +U(1.50171623427984035, 2.86758019456390693, 1.15229397122141617) q[12]; +U(0.43418741716635235, 1.10084899043586670, 0.34834048981917266) q[13]; +U(0.20323136921100678, 1.28291083680612116, 0.28038974618045819) q[14]; +U(2.94685592113749639, 0.37705974543678673, 0.86200550868480203) q[15]; +U(1.46550249088423166, 1.45845003363471525, 1.24814741087469782) q[16]; +U(2.22578483130685159, 0.85253489046599317, 2.14619152125341914) q[17]; +U(0.91438012370725719, 0.81784827528716429, 0.69682657123694169) q[18]; +U(2.91861775300058239, 2.86546968144821402, 1.73322260258349483) q[19]; +U(2.98377846072404403, 0.26428170241555094, 1.60709562776214177) q[20]; +U(1.69096305586401945, 0.28942614388708256, 0.38049673954421859) q[21]; +U(2.26081565483164383, 1.46149629749515133, 1.51674435680780620) q[22]; +U(1.56149859981260070, 2.87142055848072393, 1.54686539480816263) q[23]; +U(1.05148726575722253, 1.72399000203986245, 2.22295579045025936) q[24]; +U(1.60137531556916844, 1.72516011120474624, 1.44981469928289442) q[25]; +cx q[1], q[2]; +cx q[3], q[4]; +cx q[5], q[6]; +cx q[7], q[8]; +cx q[9], q[10]; +cx q[11], q[12]; +cx q[13], q[14]; +cx q[15], q[16]; +cx q[17], q[18]; +cx q[19], q[20]; +cx q[21], q[22]; +cx q[23], q[24]; +U(0.15285339341795662, 1.02969332787743337, 2.45725161762993663) q[0]; +U(2.14656153098433413, 2.16925446611404448, 2.04419698881737124) q[1]; +U(1.50409510706591801, 0.82857245013194622, 1.75275980181519757) q[2]; +U(1.14730246680389225, 1.46800743317950635, 0.60548899995745219) q[3]; +U(2.76422516047928439, 1.64840894721796451, 1.57967692121735663) q[4]; +U(1.42483026909010025, 1.30719012565057022, 1.96936622478720540) q[5]; +U(0.54829323713611462, 0.55185569335862407, 1.72518783250081990) q[6]; +U(1.16115104126838598, 2.51500339549230196, 2.49642098322420939) q[7]; +U(0.16717786953131999, 1.08009986115677509, 2.74038618845420618) q[8]; +U(2.93345444339504050, 2.11831510147012574, 1.58666492181064182) q[9]; +U(1.48023614940327390, 2.06176528424185999, 0.07826037572101456) q[10]; +U(2.01999359500185410, 0.99853577278169907, 2.82308367281201789) q[11]; +U(1.90181350800646319, 1.72558743179683623, 1.43086036830881009) q[12]; +U(0.47365025869096567, 0.69812237815805373, 1.25127001401979460) q[13]; +U(1.95950913557300971, 1.97161992415821295, 0.75935609473879546) q[14]; +U(1.92711769055155497, 1.52364923831006385, 0.77502414449030717) q[15]; +U(2.33115326053306660, 0.18328943565392824, 1.17519367198169442) q[16]; +U(2.82428522189215998, 2.80221712420474438, 0.94808882623055921) q[17]; +U(1.11987224717147546, 1.87454473275542177, 1.75834043381443645) q[18]; +U(2.88879826543950429, 1.56851217769043242, 2.28810436627216473) q[19]; +U(0.95006552998405151, 1.68214614964306332, 1.75593989424479830) q[20]; +U(2.28087034405093754, 2.14071077938703475, 2.50678053993371216) q[21]; +U(2.30548144532201551, 1.95243904216968586, 2.22671207310705704) q[22]; +U(1.03594731984298614, 2.23271795637600252, 1.84790481743891780) q[23]; +U(2.66130507841139027, 2.73626405179474605, 1.21363210117516510) q[24]; +U(1.67422511319485985, 0.05557348828811935, 0.22109746088969676) q[25]; +cx q[0], q[1]; +cx q[2], q[3]; +cx q[4], q[5]; +cx q[6], q[7]; +cx q[8], q[9]; +cx q[10], q[11]; +cx q[12], q[13]; +cx q[14], q[15]; +cx q[16], q[17]; +cx q[18], q[19]; +cx q[20], q[21]; +cx q[22], q[23]; +cx q[24], q[25]; +U(2.72488059384152830, 2.03845557335818459, 2.92452679112498747) q[0]; +U(1.45323252098682506, 0.38801395719652180, 2.81179926069441444) q[1]; +U(2.54028328501402533, 2.87545775959449306, 1.15889018252445765) q[2]; +U(0.12311894966759943, 2.20101235150252938, 0.22591803372914574) q[3]; +U(2.67976567462108929, 1.88468096710200861, 2.59047099570055174) q[4]; +U(2.11858411639352016, 0.66497500026339918, 1.13015472875561267) q[5]; +U(0.21311094987007065, 1.94144786072791548, 0.06095175401447012) q[6]; +U(2.27955111335838751, 1.55292435364892926, 1.12304621609343454) q[7]; +U(1.35431022409162667, 2.08648287348213517, 2.83253034762416338) q[8]; +U(2.77248317292118602, 0.72178624659699750, 0.44537761455121695) q[9]; +U(0.03649398424477329, 0.80482440831566999, 1.56142977099029271) q[10]; +U(0.27551937878126083, 0.52278604774716640, 0.31150731323887304) q[11]; +U(1.60817143747595168, 2.30060155355966953, 2.42696535157589414) q[12]; +U(1.63024005404851755, 2.11388413095685295, 2.41616454913179132) q[13]; +U(2.57263147483774253, 1.75151741543281436, 0.37228535533022659) q[14]; +U(2.18920768655424351, 0.75727219782156081, 1.06461972742205263) q[15]; +U(0.94464013157483469, 0.32457679213566477, 2.46755725083615051) q[16]; +U(2.91861606518219903, 1.18165816235252908, 2.40197010822675787) q[17]; +U(0.50924552213490884, 2.04641119549528655, 0.33590909404532843) q[18]; +U(2.96525926843046878, 0.51850426714571520, 0.31212761578157355) q[19]; +U(2.29511381682494021, 0.98843903183005559, 0.70449897205716108) q[20]; +U(1.28819666679407473, 1.80934507361645253, 0.16113326933563802) q[21]; +U(2.32769127973316360, 0.38405886361359763, 0.20790229047527495) q[22]; +U(0.16690568004876994, 1.54925316144896330, 0.04253685949301125) q[23]; +U(1.89845780163227604, 2.63517070431555205, 1.87282804220476379) q[24]; +U(1.31667767966131700, 0.45945669716486907, 1.29174570537905875) q[25]; +cx q[1], q[2]; +cx q[3], q[4]; +cx q[5], q[6]; +cx q[7], q[8]; +cx q[9], q[10]; +cx q[11], q[12]; +cx q[13], q[14]; +cx q[15], q[16]; +cx q[17], q[18]; +cx q[19], q[20]; +cx q[21], q[22]; +cx q[23], q[24]; +U(2.75361610347005924, 2.29512694403438659, 0.04351032225260778) q[0]; +U(2.57534813314434716, 2.05648032923994805, 0.23971948720475619) q[1]; +U(1.61065007377397477, 1.74838101093954571, 0.11955241952757462) q[2]; +U(2.37569733402602027, 2.66714783421644457, 1.47092964683248770) q[3]; +U(1.35597500598051126, 2.07878142774099604, 0.92074533836573968) q[4]; +U(0.45061977759494271, 2.57762479098089144, 2.92063356868713676) q[5]; +U(2.98885699496554960, 2.24149718816404777, 1.96274598837894421) q[6]; +U(2.37088029321606361, 2.26838822395827782, 2.32540727768936955) q[7]; +U(0.38244554084203584, 1.04495162922089595, 1.22668903221623366) q[8]; +U(1.96169429954651215, 0.05666935394530516, 2.74839256572664941) q[9]; +U(0.38423846801513716, 0.50291450218067726, 1.03341440222573227) q[10]; +U(2.36823007761389652, 1.31861229726032604, 0.81232062634987690) q[11]; +U(0.93366612641865582, 2.37889294711486399, 0.67460510300217786) q[12]; +U(2.68976789984843133, 1.35262522789414407, 1.90716903419632351) q[13]; +U(2.37804882996650283, 2.09795604080139930, 2.18854269713953313) q[14]; +U(2.22626427134823426, 2.49986884565977436, 0.00250076612780896) q[15]; +U(1.60313745336371034, 1.15779498411483432, 1.31921832498240553) q[16]; +U(0.57654796954528563, 1.23035735282864327, 0.67646588304841521) q[17]; +U(2.57713470605112908, 0.50100994400841285, 0.49841839744016081) q[18]; +U(0.58976915737784300, 0.17055567554997997, 2.78209713699621061) q[19]; +U(2.30952915684217438, 2.79787665507733937, 2.96047757479471362) q[20]; +U(1.05507800001958687, 0.03902011774735460, 2.23908312197381860) q[21]; +U(2.82984769789893181, 1.52497879584918821, 1.10657182406680995) q[22]; +U(1.08370314409946159, 2.58747882963041422, 0.38187366123158792) q[23]; +U(2.64113032006194805, 2.67391914116341279, 2.49705957981057667) q[24]; +U(0.96194036745219214, 2.95700016227676077, 1.74220290745303404) q[25]; +cx q[0], q[1]; +cx q[2], q[3]; +cx q[4], q[5]; +cx q[6], q[7]; +cx q[8], q[9]; +cx q[10], q[11]; +cx q[12], q[13]; +cx q[14], q[15]; +cx q[16], q[17]; +cx q[18], q[19]; +cx q[20], q[21]; +cx q[22], q[23]; +cx q[24], q[25]; diff --git a/wai/quantum-cross-simulator/corpus/qasm/top_index_n20.qasm b/wai/quantum-cross-simulator/corpus/qasm/top_index_n20.qasm new file mode 100644 index 000000000..8cb2b13d8 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qasm/top_index_n20.qasm @@ -0,0 +1,5 @@ +OPENQASM 3.0; +include "stdgates.inc"; +qubit[20] q; +x q[19]; +h q[18]; diff --git a/wai/quantum-cross-simulator/corpus/qec-hand-written.json b/wai/quantum-cross-simulator/corpus/qec-hand-written.json new file mode 100644 index 000000000..bfb420cd1 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qec-hand-written.json @@ -0,0 +1,30 @@ +{ + "qec_inverted_and_tagged": { + "reason": "A measurement target inverted, which flips its value and no detection event, and a tag on noise.", + "text": "R 0 1\nX_ERROR[leak](0.01) 0\nCX 0 1\nM !0 1\nDETECTOR rec[-1] rec[-2]\nOBSERVABLE_INCLUDE(0) rec[-1]\n" + }, + "qec_measure_flip_noise": { + "reason": "Measurement flip noise in both bases, and a reset in X.", + "text": "R 0\nRX 1\nM(0.02) 0\nMX(0.03) 1\nDETECTOR rec[-2]\nDETECTOR rec[-1]\n" + }, + "qec_depolarize_merge": { + "reason": "Two channels whose mechanisms have the same symptoms merge by the XOR rule, p1 + p2 - 2 p1 p2.", + "text": "R 0 1\nDEPOLARIZE1(0.01) 0\nX_ERROR(0.02) 0\nDEPOLARIZE2(0.03) 0 1\nM 0 1\nDETECTOR rec[-2]\nDETECTOR rec[-1]\n" + }, + "qec_pauli_observable": { + "reason": "An observable on Pauli targets rather than measurement records.", + "text": "R 0 1 2\nH 0\nCX 0 1 1 2\nZ_ERROR(0.01) 1\nOBSERVABLE_INCLUDE(0) X0 X1 X2\n" + }, + "qec_refused_correlated": { + "reason": "A correlated error, which the frame simulator does not implement: it must be refused with its line.", + "text": "R 0 1\nE(0.01) X0 X1\nM 0 1\nDETECTOR rec[-1]\n" + }, + "qec_refused_pauli_channel": { + "reason": "A general Pauli channel, which it does not implement either.", + "text": "R 0\nPAULI_CHANNEL_1(0.01, 0.02, 0.03) 0\nM 0\nDETECTOR rec[-1]\n" + }, + "qec_refused_random_detector": { + "reason": "A detector that is random without noise is no detector: it must be refused.", + "text": "RX 0\nM 0\nDETECTOR rec[-1]\n" + } +} diff --git a/wai/quantum-cross-simulator/corpus/qec/color_d3.circuit b/wai/quantum-cross-simulator/corpus/qec/color_d3.circuit new file mode 100644 index 000000000..ed9ce2033 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qec/color_d3.circuit @@ -0,0 +1,79 @@ +QUBIT_COORDS(0, 0) 0 +QUBIT_COORDS(1, 0) 1 +QUBIT_COORDS(2, 0) 2 +QUBIT_COORDS(3, 0) 3 +QUBIT_COORDS(0.5, 1) 4 +QUBIT_COORDS(1.5, 1) 5 +QUBIT_COORDS(2.5, 1) 6 +QUBIT_COORDS(1, 2) 7 +QUBIT_COORDS(2, 2) 8 +QUBIT_COORDS(1.5, 3) 9 +R 0 1 2 3 4 5 6 7 8 9 +X_ERROR(0.002) 0 1 2 3 4 5 6 7 8 9 +REPEAT 2 { + TICK + DEPOLARIZE1(0.002) 0 1 3 5 6 7 9 + C_XYZ 0 1 3 5 6 7 9 + DEPOLARIZE1(0.002) 0 1 3 5 6 7 9 + TICK + CX 5 4 3 2 + DEPOLARIZE2(0.002) 5 4 3 2 + TICK + CX 7 4 6 2 + DEPOLARIZE2(0.002) 7 4 6 2 + TICK + CX 1 4 6 8 + DEPOLARIZE2(0.002) 1 4 6 8 + TICK + CX 1 2 7 8 + DEPOLARIZE2(0.002) 1 2 7 8 + TICK + CX 5 2 9 8 + DEPOLARIZE2(0.002) 5 2 9 8 + TICK + CX 0 4 5 8 + DEPOLARIZE2(0.002) 0 4 5 8 + TICK + X_ERROR(0.002) 2 4 8 + MR 2 4 8 + X_ERROR(0.002) 2 4 8 +} +DETECTOR(2, 0, 0) rec[-3] rec[-6] +DETECTOR(0.5, 1, 0) rec[-2] rec[-5] +DETECTOR(2, 2, 0) rec[-1] rec[-4] +TICK +DEPOLARIZE1(0.002) 0 1 3 5 6 7 9 +C_XYZ 0 1 3 5 6 7 9 +DEPOLARIZE1(0.002) 0 1 3 5 6 7 9 +TICK +CX 5 4 3 2 +DEPOLARIZE2(0.002) 5 4 3 2 +TICK +CX 7 4 6 2 +DEPOLARIZE2(0.002) 7 4 6 2 +TICK +CX 1 4 6 8 +DEPOLARIZE2(0.002) 1 4 6 8 +TICK +CX 1 2 7 8 +DEPOLARIZE2(0.002) 1 2 7 8 +TICK +CX 5 2 9 8 +DEPOLARIZE2(0.002) 5 2 9 8 +TICK +CX 0 4 5 8 +DEPOLARIZE2(0.002) 0 4 5 8 +TICK +X_ERROR(0.002) 2 4 8 +MR 2 4 8 +X_ERROR(0.002) 2 4 8 +SHIFT_COORDS(0, 0, 1) +DETECTOR(2, 0, 0) rec[-3] rec[-6] rec[-9] +DETECTOR(0.5, 1, 0) rec[-2] rec[-5] rec[-8] +DETECTOR(2, 2, 0) rec[-1] rec[-4] rec[-7] +X_ERROR(0.002) 0 1 3 5 6 7 9 +M 0 1 3 5 6 7 9 +DETECTOR(2, 0, 1) rec[-3] rec[-4] rec[-5] rec[-6] rec[-10] +DETECTOR(0.5, 1, 1) rec[-2] rec[-4] rec[-6] rec[-7] rec[-9] +DETECTOR(2, 2, 1) rec[-1] rec[-2] rec[-3] rec[-4] rec[-8] +OBSERVABLE_INCLUDE(0) rec[-5] rec[-6] rec[-7] diff --git a/wai/quantum-cross-simulator/corpus/qec/repetition_d25.circuit b/wai/quantum-cross-simulator/corpus/qec/repetition_d25.circuit new file mode 100644 index 000000000..b5ed6243c --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qec/repetition_d25.circuit @@ -0,0 +1,102 @@ +R 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 36 37 38 39 40 41 42 43 44 45 46 47 48 +X_ERROR(0.005) 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 36 37 38 39 40 41 42 43 44 45 46 47 48 +TICK +DEPOLARIZE1(0.005) 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 +CX 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 36 37 38 39 40 41 42 43 44 45 46 47 +DEPOLARIZE2(0.005) 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 36 37 38 39 40 41 42 43 44 45 46 47 +TICK +CX 2 1 4 3 6 5 8 7 10 9 12 11 14 13 16 15 18 17 20 19 22 21 24 23 26 25 28 27 30 29 32 31 34 33 36 35 38 37 40 39 42 41 44 43 46 45 48 47 +DEPOLARIZE2(0.005) 2 1 4 3 6 5 8 7 10 9 12 11 14 13 16 15 18 17 20 19 22 21 24 23 26 25 28 27 30 29 32 31 34 33 36 35 38 37 40 39 42 41 44 43 46 45 48 47 +TICK +X_ERROR(0.005) 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 +MR 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 +X_ERROR(0.005) 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 +DETECTOR(1, 0) rec[-24] +DETECTOR(3, 0) rec[-23] +DETECTOR(5, 0) rec[-22] +DETECTOR(7, 0) rec[-21] +DETECTOR(9, 0) rec[-20] +DETECTOR(11, 0) rec[-19] +DETECTOR(13, 0) rec[-18] +DETECTOR(15, 0) rec[-17] +DETECTOR(17, 0) rec[-16] +DETECTOR(19, 0) rec[-15] +DETECTOR(21, 0) rec[-14] +DETECTOR(23, 0) rec[-13] +DETECTOR(25, 0) rec[-12] +DETECTOR(27, 0) rec[-11] +DETECTOR(29, 0) rec[-10] +DETECTOR(31, 0) rec[-9] +DETECTOR(33, 0) rec[-8] +DETECTOR(35, 0) rec[-7] +DETECTOR(37, 0) rec[-6] +DETECTOR(39, 0) rec[-5] +DETECTOR(41, 0) rec[-4] +DETECTOR(43, 0) rec[-3] +DETECTOR(45, 0) rec[-2] +DETECTOR(47, 0) rec[-1] +REPEAT 24 { + TICK + DEPOLARIZE1(0.005) 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 + CX 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 36 37 38 39 40 41 42 43 44 45 46 47 + DEPOLARIZE2(0.005) 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 36 37 38 39 40 41 42 43 44 45 46 47 + TICK + CX 2 1 4 3 6 5 8 7 10 9 12 11 14 13 16 15 18 17 20 19 22 21 24 23 26 25 28 27 30 29 32 31 34 33 36 35 38 37 40 39 42 41 44 43 46 45 48 47 + DEPOLARIZE2(0.005) 2 1 4 3 6 5 8 7 10 9 12 11 14 13 16 15 18 17 20 19 22 21 24 23 26 25 28 27 30 29 32 31 34 33 36 35 38 37 40 39 42 41 44 43 46 45 48 47 + TICK + X_ERROR(0.005) 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 + MR 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 + X_ERROR(0.005) 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 + SHIFT_COORDS(0, 1) + DETECTOR(1, 0) rec[-24] rec[-48] + DETECTOR(3, 0) rec[-23] rec[-47] + DETECTOR(5, 0) rec[-22] rec[-46] + DETECTOR(7, 0) rec[-21] rec[-45] + DETECTOR(9, 0) rec[-20] rec[-44] + DETECTOR(11, 0) rec[-19] rec[-43] + DETECTOR(13, 0) rec[-18] rec[-42] + DETECTOR(15, 0) rec[-17] rec[-41] + DETECTOR(17, 0) rec[-16] rec[-40] + DETECTOR(19, 0) rec[-15] rec[-39] + DETECTOR(21, 0) rec[-14] rec[-38] + DETECTOR(23, 0) rec[-13] rec[-37] + DETECTOR(25, 0) rec[-12] rec[-36] + DETECTOR(27, 0) rec[-11] rec[-35] + DETECTOR(29, 0) rec[-10] rec[-34] + DETECTOR(31, 0) rec[-9] rec[-33] + DETECTOR(33, 0) rec[-8] rec[-32] + DETECTOR(35, 0) rec[-7] rec[-31] + DETECTOR(37, 0) rec[-6] rec[-30] + DETECTOR(39, 0) rec[-5] rec[-29] + DETECTOR(41, 0) rec[-4] rec[-28] + DETECTOR(43, 0) rec[-3] rec[-27] + DETECTOR(45, 0) rec[-2] rec[-26] + DETECTOR(47, 0) rec[-1] rec[-25] +} +X_ERROR(0.005) 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 +M 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 +DETECTOR(1, 1) rec[-24] rec[-25] rec[-49] +DETECTOR(3, 1) rec[-23] rec[-24] rec[-48] +DETECTOR(5, 1) rec[-22] rec[-23] rec[-47] +DETECTOR(7, 1) rec[-21] rec[-22] rec[-46] +DETECTOR(9, 1) rec[-20] rec[-21] rec[-45] +DETECTOR(11, 1) rec[-19] rec[-20] rec[-44] +DETECTOR(13, 1) rec[-18] rec[-19] rec[-43] +DETECTOR(15, 1) rec[-17] rec[-18] rec[-42] +DETECTOR(17, 1) rec[-16] rec[-17] rec[-41] +DETECTOR(19, 1) rec[-15] rec[-16] rec[-40] +DETECTOR(21, 1) rec[-14] rec[-15] rec[-39] +DETECTOR(23, 1) rec[-13] rec[-14] rec[-38] +DETECTOR(25, 1) rec[-12] rec[-13] rec[-37] +DETECTOR(27, 1) rec[-11] rec[-12] rec[-36] +DETECTOR(29, 1) rec[-10] rec[-11] rec[-35] +DETECTOR(31, 1) rec[-9] rec[-10] rec[-34] +DETECTOR(33, 1) rec[-8] rec[-9] rec[-33] +DETECTOR(35, 1) rec[-7] rec[-8] rec[-32] +DETECTOR(37, 1) rec[-6] rec[-7] rec[-31] +DETECTOR(39, 1) rec[-5] rec[-6] rec[-30] +DETECTOR(41, 1) rec[-4] rec[-5] rec[-29] +DETECTOR(43, 1) rec[-3] rec[-4] rec[-28] +DETECTOR(45, 1) rec[-2] rec[-3] rec[-27] +DETECTOR(47, 1) rec[-1] rec[-2] rec[-26] +OBSERVABLE_INCLUDE(0) rec[-1] diff --git a/wai/quantum-cross-simulator/corpus/qec/repetition_d3.circuit b/wai/quantum-cross-simulator/corpus/qec/repetition_d3.circuit new file mode 100644 index 000000000..12104ddef --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qec/repetition_d3.circuit @@ -0,0 +1,36 @@ +R 0 1 2 3 4 +X_ERROR(0.005) 0 1 2 3 4 +TICK +DEPOLARIZE1(0.005) 0 2 4 +CX 0 1 2 3 +DEPOLARIZE2(0.005) 0 1 2 3 +TICK +CX 2 1 4 3 +DEPOLARIZE2(0.005) 2 1 4 3 +TICK +X_ERROR(0.005) 1 3 +MR 1 3 +X_ERROR(0.005) 1 3 +DETECTOR(1, 0) rec[-2] +DETECTOR(3, 0) rec[-1] +REPEAT 2 { + TICK + DEPOLARIZE1(0.005) 0 2 4 + CX 0 1 2 3 + DEPOLARIZE2(0.005) 0 1 2 3 + TICK + CX 2 1 4 3 + DEPOLARIZE2(0.005) 2 1 4 3 + TICK + X_ERROR(0.005) 1 3 + MR 1 3 + X_ERROR(0.005) 1 3 + SHIFT_COORDS(0, 1) + DETECTOR(1, 0) rec[-2] rec[-4] + DETECTOR(3, 0) rec[-1] rec[-3] +} +X_ERROR(0.005) 0 2 4 +M 0 2 4 +DETECTOR(1, 1) rec[-2] rec[-3] rec[-5] +DETECTOR(3, 1) rec[-1] rec[-2] rec[-4] +OBSERVABLE_INCLUDE(0) rec[-1] diff --git a/wai/quantum-cross-simulator/corpus/qec/repetition_d9.circuit b/wai/quantum-cross-simulator/corpus/qec/repetition_d9.circuit new file mode 100644 index 000000000..9d36c1b1b --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qec/repetition_d9.circuit @@ -0,0 +1,54 @@ +R 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 +X_ERROR(0.005) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 +TICK +DEPOLARIZE1(0.005) 0 2 4 6 8 10 12 14 16 +CX 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 +DEPOLARIZE2(0.005) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 +TICK +CX 2 1 4 3 6 5 8 7 10 9 12 11 14 13 16 15 +DEPOLARIZE2(0.005) 2 1 4 3 6 5 8 7 10 9 12 11 14 13 16 15 +TICK +X_ERROR(0.005) 1 3 5 7 9 11 13 15 +MR 1 3 5 7 9 11 13 15 +X_ERROR(0.005) 1 3 5 7 9 11 13 15 +DETECTOR(1, 0) rec[-8] +DETECTOR(3, 0) rec[-7] +DETECTOR(5, 0) rec[-6] +DETECTOR(7, 0) rec[-5] +DETECTOR(9, 0) rec[-4] +DETECTOR(11, 0) rec[-3] +DETECTOR(13, 0) rec[-2] +DETECTOR(15, 0) rec[-1] +REPEAT 8 { + TICK + DEPOLARIZE1(0.005) 0 2 4 6 8 10 12 14 16 + CX 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 + DEPOLARIZE2(0.005) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 + TICK + CX 2 1 4 3 6 5 8 7 10 9 12 11 14 13 16 15 + DEPOLARIZE2(0.005) 2 1 4 3 6 5 8 7 10 9 12 11 14 13 16 15 + TICK + X_ERROR(0.005) 1 3 5 7 9 11 13 15 + MR 1 3 5 7 9 11 13 15 + X_ERROR(0.005) 1 3 5 7 9 11 13 15 + SHIFT_COORDS(0, 1) + DETECTOR(1, 0) rec[-8] rec[-16] + DETECTOR(3, 0) rec[-7] rec[-15] + DETECTOR(5, 0) rec[-6] rec[-14] + DETECTOR(7, 0) rec[-5] rec[-13] + DETECTOR(9, 0) rec[-4] rec[-12] + DETECTOR(11, 0) rec[-3] rec[-11] + DETECTOR(13, 0) rec[-2] rec[-10] + DETECTOR(15, 0) rec[-1] rec[-9] +} +X_ERROR(0.005) 0 2 4 6 8 10 12 14 16 +M 0 2 4 6 8 10 12 14 16 +DETECTOR(1, 1) rec[-8] rec[-9] rec[-17] +DETECTOR(3, 1) rec[-7] rec[-8] rec[-16] +DETECTOR(5, 1) rec[-6] rec[-7] rec[-15] +DETECTOR(7, 1) rec[-5] rec[-6] rec[-14] +DETECTOR(9, 1) rec[-4] rec[-5] rec[-13] +DETECTOR(11, 1) rec[-3] rec[-4] rec[-12] +DETECTOR(13, 1) rec[-2] rec[-3] rec[-11] +DETECTOR(15, 1) rec[-1] rec[-2] rec[-10] +OBSERVABLE_INCLUDE(0) rec[-1] diff --git a/wai/quantum-cross-simulator/corpus/qec/surface_x_d3.circuit b/wai/quantum-cross-simulator/corpus/qec/surface_x_d3.circuit new file mode 100644 index 000000000..2de135e0e --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qec/surface_x_d3.circuit @@ -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 +RX 1 3 5 8 10 12 15 17 19 +Z_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(2, 0, 0) rec[-8] +DETECTOR(2, 4, 0) rec[-3] +DETECTOR(4, 2, 0) rec[-6] +DETECTOR(4, 6, 0) rec[-1] +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] +} +Z_ERROR(0.001) 1 3 5 8 10 12 15 17 19 +MX 1 3 5 8 10 12 15 17 19 +DETECTOR(2, 0, 1) rec[-8] rec[-9] rec[-17] +DETECTOR(2, 4, 1) rec[-2] rec[-3] rec[-5] rec[-6] rec[-12] +DETECTOR(4, 2, 1) rec[-4] rec[-5] rec[-7] rec[-8] rec[-15] +DETECTOR(4, 6, 1) rec[-1] rec[-2] rec[-10] +OBSERVABLE_INCLUDE(0) rec[-3] rec[-6] rec[-9] diff --git a/wai/quantum-cross-simulator/corpus/qec/surface_x_d5.circuit b/wai/quantum-cross-simulator/corpus/qec/surface_x_d5.circuit new file mode 100644 index 000000000..7a54f2cf1 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qec/surface_x_d5.circuit @@ -0,0 +1,153 @@ +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 +RX 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 +Z_ERROR(0.001) 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.001) 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.001) 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.001) 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.001) 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.001) 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.001) 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.001) 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.001) 2 6 15 19 24 28 37 41 46 50 59 63 +TICK +X_ERROR(0.001) 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.001) 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(2, 0, 0) rec[-24] +DETECTOR(2, 4, 0) rec[-16] +DETECTOR(2, 8, 0) rec[-6] +DETECTOR(4, 2, 0) rec[-21] +DETECTOR(4, 6, 0) rec[-11] +DETECTOR(4, 10, 0) rec[-2] +DETECTOR(6, 0, 0) rec[-23] +DETECTOR(6, 4, 0) rec[-14] +DETECTOR(6, 8, 0) rec[-4] +DETECTOR(8, 2, 0) rec[-19] +DETECTOR(8, 6, 0) rec[-9] +DETECTOR(8, 10, 0) rec[-1] +REPEAT 4 { + TICK + DEPOLARIZE1(0.001) 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.001) 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.001) 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.001) 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.001) 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.001) 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.001) 2 6 15 19 24 28 37 41 46 50 59 63 + TICK + X_ERROR(0.001) 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.001) 2 6 13 15 17 19 21 22 24 26 28 30 35 37 39 41 43 44 46 48 50 52 59 63 + SHIFT_COORDS(0, 0, 1) + DETECTOR(2, 0, 0) rec[-24] rec[-48] + DETECTOR(6, 0, 0) rec[-23] rec[-47] + DETECTOR(2, 2, 0) rec[-22] rec[-46] + DETECTOR(4, 2, 0) rec[-21] rec[-45] + DETECTOR(6, 2, 0) rec[-20] rec[-44] + DETECTOR(8, 2, 0) rec[-19] rec[-43] + DETECTOR(10, 2, 0) rec[-18] rec[-42] + DETECTOR(0, 4, 0) rec[-17] rec[-41] + DETECTOR(2, 4, 0) rec[-16] rec[-40] + DETECTOR(4, 4, 0) rec[-15] rec[-39] + DETECTOR(6, 4, 0) rec[-14] rec[-38] + DETECTOR(8, 4, 0) rec[-13] rec[-37] + DETECTOR(2, 6, 0) rec[-12] rec[-36] + DETECTOR(4, 6, 0) rec[-11] rec[-35] + DETECTOR(6, 6, 0) rec[-10] rec[-34] + DETECTOR(8, 6, 0) rec[-9] rec[-33] + DETECTOR(10, 6, 0) rec[-8] rec[-32] + DETECTOR(0, 8, 0) rec[-7] rec[-31] + DETECTOR(2, 8, 0) rec[-6] rec[-30] + DETECTOR(4, 8, 0) rec[-5] rec[-29] + DETECTOR(6, 8, 0) rec[-4] rec[-28] + DETECTOR(8, 8, 0) rec[-3] rec[-27] + DETECTOR(4, 10, 0) rec[-2] rec[-26] + DETECTOR(8, 10, 0) rec[-1] rec[-25] +} +Z_ERROR(0.001) 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 +MX 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(2, 0, 1) rec[-24] rec[-25] rec[-49] +DETECTOR(2, 4, 1) rec[-14] rec[-15] rec[-19] rec[-20] rec[-41] +DETECTOR(2, 8, 1) rec[-4] rec[-5] rec[-9] rec[-10] rec[-31] +DETECTOR(4, 2, 1) rec[-18] rec[-19] rec[-23] rec[-24] rec[-46] +DETECTOR(4, 6, 1) rec[-8] rec[-9] rec[-13] rec[-14] rec[-36] +DETECTOR(4, 10, 1) rec[-3] rec[-4] rec[-27] +DETECTOR(6, 0, 1) rec[-22] rec[-23] rec[-48] +DETECTOR(6, 4, 1) rec[-12] rec[-13] rec[-17] rec[-18] rec[-39] +DETECTOR(6, 8, 1) rec[-2] rec[-3] rec[-7] rec[-8] rec[-29] +DETECTOR(8, 2, 1) rec[-16] rec[-17] rec[-21] rec[-22] rec[-44] +DETECTOR(8, 6, 1) rec[-6] rec[-7] rec[-11] rec[-12] rec[-34] +DETECTOR(8, 10, 1) rec[-1] rec[-2] rec[-26] +OBSERVABLE_INCLUDE(0) rec[-5] rec[-10] rec[-15] rec[-20] rec[-25] diff --git a/wai/quantum-cross-simulator/corpus/qec/surface_x_d7.circuit b/wai/quantum-cross-simulator/corpus/qec/surface_x_d7.circuit new file mode 100644 index 000000000..488b0a7b2 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qec/surface_x_d7.circuit @@ -0,0 +1,249 @@ +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(10, 0) 10 +QUBIT_COORDS(11, 1) 11 +QUBIT_COORDS(13, 1) 13 +QUBIT_COORDS(1, 3) 16 +QUBIT_COORDS(2, 2) 17 +QUBIT_COORDS(3, 3) 18 +QUBIT_COORDS(4, 2) 19 +QUBIT_COORDS(5, 3) 20 +QUBIT_COORDS(6, 2) 21 +QUBIT_COORDS(7, 3) 22 +QUBIT_COORDS(8, 2) 23 +QUBIT_COORDS(9, 3) 24 +QUBIT_COORDS(10, 2) 25 +QUBIT_COORDS(11, 3) 26 +QUBIT_COORDS(12, 2) 27 +QUBIT_COORDS(13, 3) 28 +QUBIT_COORDS(14, 2) 29 +QUBIT_COORDS(0, 4) 30 +QUBIT_COORDS(1, 5) 31 +QUBIT_COORDS(2, 4) 32 +QUBIT_COORDS(3, 5) 33 +QUBIT_COORDS(4, 4) 34 +QUBIT_COORDS(5, 5) 35 +QUBIT_COORDS(6, 4) 36 +QUBIT_COORDS(7, 5) 37 +QUBIT_COORDS(8, 4) 38 +QUBIT_COORDS(9, 5) 39 +QUBIT_COORDS(10, 4) 40 +QUBIT_COORDS(11, 5) 41 +QUBIT_COORDS(12, 4) 42 +QUBIT_COORDS(13, 5) 43 +QUBIT_COORDS(1, 7) 46 +QUBIT_COORDS(2, 6) 47 +QUBIT_COORDS(3, 7) 48 +QUBIT_COORDS(4, 6) 49 +QUBIT_COORDS(5, 7) 50 +QUBIT_COORDS(6, 6) 51 +QUBIT_COORDS(7, 7) 52 +QUBIT_COORDS(8, 6) 53 +QUBIT_COORDS(9, 7) 54 +QUBIT_COORDS(10, 6) 55 +QUBIT_COORDS(11, 7) 56 +QUBIT_COORDS(12, 6) 57 +QUBIT_COORDS(13, 7) 58 +QUBIT_COORDS(14, 6) 59 +QUBIT_COORDS(0, 8) 60 +QUBIT_COORDS(1, 9) 61 +QUBIT_COORDS(2, 8) 62 +QUBIT_COORDS(3, 9) 63 +QUBIT_COORDS(4, 8) 64 +QUBIT_COORDS(5, 9) 65 +QUBIT_COORDS(6, 8) 66 +QUBIT_COORDS(7, 9) 67 +QUBIT_COORDS(8, 8) 68 +QUBIT_COORDS(9, 9) 69 +QUBIT_COORDS(10, 8) 70 +QUBIT_COORDS(11, 9) 71 +QUBIT_COORDS(12, 8) 72 +QUBIT_COORDS(13, 9) 73 +QUBIT_COORDS(1, 11) 76 +QUBIT_COORDS(2, 10) 77 +QUBIT_COORDS(3, 11) 78 +QUBIT_COORDS(4, 10) 79 +QUBIT_COORDS(5, 11) 80 +QUBIT_COORDS(6, 10) 81 +QUBIT_COORDS(7, 11) 82 +QUBIT_COORDS(8, 10) 83 +QUBIT_COORDS(9, 11) 84 +QUBIT_COORDS(10, 10) 85 +QUBIT_COORDS(11, 11) 86 +QUBIT_COORDS(12, 10) 87 +QUBIT_COORDS(13, 11) 88 +QUBIT_COORDS(14, 10) 89 +QUBIT_COORDS(0, 12) 90 +QUBIT_COORDS(1, 13) 91 +QUBIT_COORDS(2, 12) 92 +QUBIT_COORDS(3, 13) 93 +QUBIT_COORDS(4, 12) 94 +QUBIT_COORDS(5, 13) 95 +QUBIT_COORDS(6, 12) 96 +QUBIT_COORDS(7, 13) 97 +QUBIT_COORDS(8, 12) 98 +QUBIT_COORDS(9, 13) 99 +QUBIT_COORDS(10, 12) 100 +QUBIT_COORDS(11, 13) 101 +QUBIT_COORDS(12, 12) 102 +QUBIT_COORDS(13, 13) 103 +QUBIT_COORDS(4, 14) 109 +QUBIT_COORDS(8, 14) 113 +QUBIT_COORDS(12, 14) 117 +RX 1 3 5 7 9 11 13 16 18 20 22 24 26 28 31 33 35 37 39 41 43 46 48 50 52 54 56 58 61 63 65 67 69 71 73 76 78 80 82 84 86 88 91 93 95 97 99 101 103 +Z_ERROR(0.001) 1 3 5 7 9 11 13 16 18 20 22 24 26 28 31 33 35 37 39 41 43 46 48 50 52 54 56 58 61 63 65 67 69 71 73 76 78 80 82 84 86 88 91 93 95 97 99 101 103 +R 2 6 10 17 19 21 23 25 27 29 30 32 34 36 38 40 42 47 49 51 53 55 57 59 60 62 64 66 68 70 72 77 79 81 83 85 87 89 90 92 94 96 98 100 102 109 113 117 +X_ERROR(0.001) 2 6 10 17 19 21 23 25 27 29 30 32 34 36 38 40 42 47 49 51 53 55 57 59 60 62 64 66 68 70 72 77 79 81 83 85 87 89 90 92 94 96 98 100 102 109 113 117 +TICK +DEPOLARIZE1(0.001) 1 3 5 7 9 11 13 16 18 20 22 24 26 28 31 33 35 37 39 41 43 46 48 50 52 54 56 58 61 63 65 67 69 71 73 76 78 80 82 84 86 88 91 93 95 97 99 101 103 +H 2 6 10 19 23 27 32 36 40 49 53 57 62 66 70 79 83 87 92 96 100 109 113 117 +DEPOLARIZE1(0.001) 2 6 10 19 23 27 32 36 40 49 53 57 62 66 70 79 83 87 92 96 100 109 113 117 +TICK +CX 2 3 32 33 62 63 92 93 19 20 49 50 79 80 6 7 36 37 66 67 96 97 23 24 53 54 83 84 10 11 40 41 70 71 100 101 27 28 57 58 87 88 31 30 61 60 91 90 18 17 48 47 78 77 35 34 65 64 95 94 22 21 52 51 82 81 39 38 69 68 99 98 26 25 56 55 86 85 43 42 73 72 103 102 +DEPOLARIZE2(0.001) 2 3 32 33 62 63 92 93 19 20 49 50 79 80 6 7 36 37 66 67 96 97 23 24 53 54 83 84 10 11 40 41 70 71 100 101 27 28 57 58 87 88 31 30 61 60 91 90 18 17 48 47 78 77 35 34 65 64 95 94 22 21 52 51 82 81 39 38 69 68 99 98 26 25 56 55 86 85 43 42 73 72 103 102 +TICK +CX 2 1 32 31 62 61 92 91 19 18 49 48 79 78 6 5 36 35 66 65 96 95 23 22 53 52 83 82 10 9 40 39 70 69 100 99 27 26 57 56 87 86 16 30 46 60 76 90 3 17 33 47 63 77 20 34 50 64 80 94 7 21 37 51 67 81 24 38 54 68 84 98 11 25 41 55 71 85 28 42 58 72 88 102 +DEPOLARIZE2(0.001) 2 1 32 31 62 61 92 91 19 18 49 48 79 78 6 5 36 35 66 65 96 95 23 22 53 52 83 82 10 9 40 39 70 69 100 99 27 26 57 56 87 86 16 30 46 60 76 90 3 17 33 47 63 77 20 34 50 64 80 94 7 21 37 51 67 81 24 38 54 68 84 98 11 25 41 55 71 85 28 42 58 72 88 102 +TICK +CX 32 18 62 48 92 78 19 5 49 35 79 65 109 95 36 22 66 52 96 82 23 9 53 39 83 69 113 99 40 26 70 56 100 86 27 13 57 43 87 73 117 103 16 17 46 47 76 77 33 34 63 64 93 94 20 21 50 51 80 81 37 38 67 68 97 98 24 25 54 55 84 85 41 42 71 72 101 102 28 29 58 59 88 89 +DEPOLARIZE2(0.001) 32 18 62 48 92 78 19 5 49 35 79 65 109 95 36 22 66 52 96 82 23 9 53 39 83 69 113 99 40 26 70 56 100 86 27 13 57 43 87 73 117 103 16 17 46 47 76 77 33 34 63 64 93 94 20 21 50 51 80 81 37 38 67 68 97 98 24 25 54 55 84 85 41 42 71 72 101 102 28 29 58 59 88 89 +TICK +CX 32 16 62 46 92 76 19 3 49 33 79 63 109 93 36 20 66 50 96 80 23 7 53 37 83 67 113 97 40 24 70 54 100 84 27 11 57 41 87 71 117 101 1 17 31 47 61 77 18 34 48 64 78 94 5 21 35 51 65 81 22 38 52 68 82 98 9 25 39 55 69 85 26 42 56 72 86 102 13 29 43 59 73 89 +DEPOLARIZE2(0.001) 32 16 62 46 92 76 19 3 49 33 79 63 109 93 36 20 66 50 96 80 23 7 53 37 83 67 113 97 40 24 70 54 100 84 27 11 57 41 87 71 117 101 1 17 31 47 61 77 18 34 48 64 78 94 5 21 35 51 65 81 22 38 52 68 82 98 9 25 39 55 69 85 26 42 56 72 86 102 13 29 43 59 73 89 +TICK +H 2 6 10 19 23 27 32 36 40 49 53 57 62 66 70 79 83 87 92 96 100 109 113 117 +DEPOLARIZE1(0.001) 2 6 10 19 23 27 32 36 40 49 53 57 62 66 70 79 83 87 92 96 100 109 113 117 +TICK +X_ERROR(0.001) 2 6 10 17 19 21 23 25 27 29 30 32 34 36 38 40 42 47 49 51 53 55 57 59 60 62 64 66 68 70 72 77 79 81 83 85 87 89 90 92 94 96 98 100 102 109 113 117 +MR 2 6 10 17 19 21 23 25 27 29 30 32 34 36 38 40 42 47 49 51 53 55 57 59 60 62 64 66 68 70 72 77 79 81 83 85 87 89 90 92 94 96 98 100 102 109 113 117 +X_ERROR(0.001) 2 6 10 17 19 21 23 25 27 29 30 32 34 36 38 40 42 47 49 51 53 55 57 59 60 62 64 66 68 70 72 77 79 81 83 85 87 89 90 92 94 96 98 100 102 109 113 117 +DETECTOR(2, 0, 0) rec[-48] +DETECTOR(2, 4, 0) rec[-37] +DETECTOR(2, 8, 0) rec[-23] +DETECTOR(2, 12, 0) rec[-9] +DETECTOR(4, 2, 0) rec[-44] +DETECTOR(4, 6, 0) rec[-30] +DETECTOR(4, 10, 0) rec[-16] +DETECTOR(4, 14, 0) rec[-3] +DETECTOR(6, 0, 0) rec[-47] +DETECTOR(6, 4, 0) rec[-35] +DETECTOR(6, 8, 0) rec[-21] +DETECTOR(6, 12, 0) rec[-7] +DETECTOR(8, 2, 0) rec[-42] +DETECTOR(8, 6, 0) rec[-28] +DETECTOR(8, 10, 0) rec[-14] +DETECTOR(8, 14, 0) rec[-2] +DETECTOR(10, 0, 0) rec[-46] +DETECTOR(10, 4, 0) rec[-33] +DETECTOR(10, 8, 0) rec[-19] +DETECTOR(10, 12, 0) rec[-5] +DETECTOR(12, 2, 0) rec[-40] +DETECTOR(12, 6, 0) rec[-26] +DETECTOR(12, 10, 0) rec[-12] +DETECTOR(12, 14, 0) rec[-1] +REPEAT 6 { + TICK + DEPOLARIZE1(0.001) 1 3 5 7 9 11 13 16 18 20 22 24 26 28 31 33 35 37 39 41 43 46 48 50 52 54 56 58 61 63 65 67 69 71 73 76 78 80 82 84 86 88 91 93 95 97 99 101 103 + H 2 6 10 19 23 27 32 36 40 49 53 57 62 66 70 79 83 87 92 96 100 109 113 117 + DEPOLARIZE1(0.001) 2 6 10 19 23 27 32 36 40 49 53 57 62 66 70 79 83 87 92 96 100 109 113 117 + TICK + CX 2 3 32 33 62 63 92 93 19 20 49 50 79 80 6 7 36 37 66 67 96 97 23 24 53 54 83 84 10 11 40 41 70 71 100 101 27 28 57 58 87 88 31 30 61 60 91 90 18 17 48 47 78 77 35 34 65 64 95 94 22 21 52 51 82 81 39 38 69 68 99 98 26 25 56 55 86 85 43 42 73 72 103 102 + DEPOLARIZE2(0.001) 2 3 32 33 62 63 92 93 19 20 49 50 79 80 6 7 36 37 66 67 96 97 23 24 53 54 83 84 10 11 40 41 70 71 100 101 27 28 57 58 87 88 31 30 61 60 91 90 18 17 48 47 78 77 35 34 65 64 95 94 22 21 52 51 82 81 39 38 69 68 99 98 26 25 56 55 86 85 43 42 73 72 103 102 + TICK + CX 2 1 32 31 62 61 92 91 19 18 49 48 79 78 6 5 36 35 66 65 96 95 23 22 53 52 83 82 10 9 40 39 70 69 100 99 27 26 57 56 87 86 16 30 46 60 76 90 3 17 33 47 63 77 20 34 50 64 80 94 7 21 37 51 67 81 24 38 54 68 84 98 11 25 41 55 71 85 28 42 58 72 88 102 + DEPOLARIZE2(0.001) 2 1 32 31 62 61 92 91 19 18 49 48 79 78 6 5 36 35 66 65 96 95 23 22 53 52 83 82 10 9 40 39 70 69 100 99 27 26 57 56 87 86 16 30 46 60 76 90 3 17 33 47 63 77 20 34 50 64 80 94 7 21 37 51 67 81 24 38 54 68 84 98 11 25 41 55 71 85 28 42 58 72 88 102 + TICK + CX 32 18 62 48 92 78 19 5 49 35 79 65 109 95 36 22 66 52 96 82 23 9 53 39 83 69 113 99 40 26 70 56 100 86 27 13 57 43 87 73 117 103 16 17 46 47 76 77 33 34 63 64 93 94 20 21 50 51 80 81 37 38 67 68 97 98 24 25 54 55 84 85 41 42 71 72 101 102 28 29 58 59 88 89 + DEPOLARIZE2(0.001) 32 18 62 48 92 78 19 5 49 35 79 65 109 95 36 22 66 52 96 82 23 9 53 39 83 69 113 99 40 26 70 56 100 86 27 13 57 43 87 73 117 103 16 17 46 47 76 77 33 34 63 64 93 94 20 21 50 51 80 81 37 38 67 68 97 98 24 25 54 55 84 85 41 42 71 72 101 102 28 29 58 59 88 89 + TICK + CX 32 16 62 46 92 76 19 3 49 33 79 63 109 93 36 20 66 50 96 80 23 7 53 37 83 67 113 97 40 24 70 54 100 84 27 11 57 41 87 71 117 101 1 17 31 47 61 77 18 34 48 64 78 94 5 21 35 51 65 81 22 38 52 68 82 98 9 25 39 55 69 85 26 42 56 72 86 102 13 29 43 59 73 89 + DEPOLARIZE2(0.001) 32 16 62 46 92 76 19 3 49 33 79 63 109 93 36 20 66 50 96 80 23 7 53 37 83 67 113 97 40 24 70 54 100 84 27 11 57 41 87 71 117 101 1 17 31 47 61 77 18 34 48 64 78 94 5 21 35 51 65 81 22 38 52 68 82 98 9 25 39 55 69 85 26 42 56 72 86 102 13 29 43 59 73 89 + TICK + H 2 6 10 19 23 27 32 36 40 49 53 57 62 66 70 79 83 87 92 96 100 109 113 117 + DEPOLARIZE1(0.001) 2 6 10 19 23 27 32 36 40 49 53 57 62 66 70 79 83 87 92 96 100 109 113 117 + TICK + X_ERROR(0.001) 2 6 10 17 19 21 23 25 27 29 30 32 34 36 38 40 42 47 49 51 53 55 57 59 60 62 64 66 68 70 72 77 79 81 83 85 87 89 90 92 94 96 98 100 102 109 113 117 + MR 2 6 10 17 19 21 23 25 27 29 30 32 34 36 38 40 42 47 49 51 53 55 57 59 60 62 64 66 68 70 72 77 79 81 83 85 87 89 90 92 94 96 98 100 102 109 113 117 + X_ERROR(0.001) 2 6 10 17 19 21 23 25 27 29 30 32 34 36 38 40 42 47 49 51 53 55 57 59 60 62 64 66 68 70 72 77 79 81 83 85 87 89 90 92 94 96 98 100 102 109 113 117 + SHIFT_COORDS(0, 0, 1) + DETECTOR(2, 0, 0) rec[-48] rec[-96] + DETECTOR(6, 0, 0) rec[-47] rec[-95] + DETECTOR(10, 0, 0) rec[-46] rec[-94] + DETECTOR(2, 2, 0) rec[-45] rec[-93] + DETECTOR(4, 2, 0) rec[-44] rec[-92] + DETECTOR(6, 2, 0) rec[-43] rec[-91] + DETECTOR(8, 2, 0) rec[-42] rec[-90] + DETECTOR(10, 2, 0) rec[-41] rec[-89] + DETECTOR(12, 2, 0) rec[-40] rec[-88] + DETECTOR(14, 2, 0) rec[-39] rec[-87] + DETECTOR(0, 4, 0) rec[-38] rec[-86] + DETECTOR(2, 4, 0) rec[-37] rec[-85] + DETECTOR(4, 4, 0) rec[-36] rec[-84] + DETECTOR(6, 4, 0) rec[-35] rec[-83] + DETECTOR(8, 4, 0) rec[-34] rec[-82] + DETECTOR(10, 4, 0) rec[-33] rec[-81] + DETECTOR(12, 4, 0) rec[-32] rec[-80] + DETECTOR(2, 6, 0) rec[-31] rec[-79] + DETECTOR(4, 6, 0) rec[-30] rec[-78] + DETECTOR(6, 6, 0) rec[-29] rec[-77] + DETECTOR(8, 6, 0) rec[-28] rec[-76] + DETECTOR(10, 6, 0) rec[-27] rec[-75] + DETECTOR(12, 6, 0) rec[-26] rec[-74] + DETECTOR(14, 6, 0) rec[-25] rec[-73] + DETECTOR(0, 8, 0) rec[-24] rec[-72] + DETECTOR(2, 8, 0) rec[-23] rec[-71] + DETECTOR(4, 8, 0) rec[-22] rec[-70] + DETECTOR(6, 8, 0) rec[-21] rec[-69] + DETECTOR(8, 8, 0) rec[-20] rec[-68] + DETECTOR(10, 8, 0) rec[-19] rec[-67] + DETECTOR(12, 8, 0) rec[-18] rec[-66] + DETECTOR(2, 10, 0) rec[-17] rec[-65] + DETECTOR(4, 10, 0) rec[-16] rec[-64] + DETECTOR(6, 10, 0) rec[-15] rec[-63] + DETECTOR(8, 10, 0) rec[-14] rec[-62] + DETECTOR(10, 10, 0) rec[-13] rec[-61] + DETECTOR(12, 10, 0) rec[-12] rec[-60] + DETECTOR(14, 10, 0) rec[-11] rec[-59] + DETECTOR(0, 12, 0) rec[-10] rec[-58] + DETECTOR(2, 12, 0) rec[-9] rec[-57] + DETECTOR(4, 12, 0) rec[-8] rec[-56] + DETECTOR(6, 12, 0) rec[-7] rec[-55] + DETECTOR(8, 12, 0) rec[-6] rec[-54] + DETECTOR(10, 12, 0) rec[-5] rec[-53] + DETECTOR(12, 12, 0) rec[-4] rec[-52] + DETECTOR(4, 14, 0) rec[-3] rec[-51] + DETECTOR(8, 14, 0) rec[-2] rec[-50] + DETECTOR(12, 14, 0) rec[-1] rec[-49] +} +Z_ERROR(0.001) 1 3 5 7 9 11 13 16 18 20 22 24 26 28 31 33 35 37 39 41 43 46 48 50 52 54 56 58 61 63 65 67 69 71 73 76 78 80 82 84 86 88 91 93 95 97 99 101 103 +MX 1 3 5 7 9 11 13 16 18 20 22 24 26 28 31 33 35 37 39 41 43 46 48 50 52 54 56 58 61 63 65 67 69 71 73 76 78 80 82 84 86 88 91 93 95 97 99 101 103 +DETECTOR(2, 0, 1) rec[-48] rec[-49] rec[-97] +DETECTOR(2, 4, 1) rec[-34] rec[-35] rec[-41] rec[-42] rec[-86] +DETECTOR(2, 8, 1) rec[-20] rec[-21] rec[-27] rec[-28] rec[-72] +DETECTOR(2, 12, 1) rec[-6] rec[-7] rec[-13] rec[-14] rec[-58] +DETECTOR(4, 2, 1) rec[-40] rec[-41] rec[-47] rec[-48] rec[-93] +DETECTOR(4, 6, 1) rec[-26] rec[-27] rec[-33] rec[-34] rec[-79] +DETECTOR(4, 10, 1) rec[-12] rec[-13] rec[-19] rec[-20] rec[-65] +DETECTOR(4, 14, 1) rec[-5] rec[-6] rec[-52] +DETECTOR(6, 0, 1) rec[-46] rec[-47] rec[-96] +DETECTOR(6, 4, 1) rec[-32] rec[-33] rec[-39] rec[-40] rec[-84] +DETECTOR(6, 8, 1) rec[-18] rec[-19] rec[-25] rec[-26] rec[-70] +DETECTOR(6, 12, 1) rec[-4] rec[-5] rec[-11] rec[-12] rec[-56] +DETECTOR(8, 2, 1) rec[-38] rec[-39] rec[-45] rec[-46] rec[-91] +DETECTOR(8, 6, 1) rec[-24] rec[-25] rec[-31] rec[-32] rec[-77] +DETECTOR(8, 10, 1) rec[-10] rec[-11] rec[-17] rec[-18] rec[-63] +DETECTOR(8, 14, 1) rec[-3] rec[-4] rec[-51] +DETECTOR(10, 0, 1) rec[-44] rec[-45] rec[-95] +DETECTOR(10, 4, 1) rec[-30] rec[-31] rec[-37] rec[-38] rec[-82] +DETECTOR(10, 8, 1) rec[-16] rec[-17] rec[-23] rec[-24] rec[-68] +DETECTOR(10, 12, 1) rec[-2] rec[-3] rec[-9] rec[-10] rec[-54] +DETECTOR(12, 2, 1) rec[-36] rec[-37] rec[-43] rec[-44] rec[-89] +DETECTOR(12, 6, 1) rec[-22] rec[-23] rec[-29] rec[-30] rec[-75] +DETECTOR(12, 10, 1) rec[-8] rec[-9] rec[-15] rec[-16] rec[-61] +DETECTOR(12, 14, 1) rec[-1] rec[-2] rec[-50] +OBSERVABLE_INCLUDE(0) rec[-7] rec[-14] rec[-21] rec[-28] rec[-35] rec[-42] rec[-49] diff --git a/wai/quantum-cross-simulator/corpus/qec/surface_z_d11.circuit b/wai/quantum-cross-simulator/corpus/qec/surface_z_d11.circuit new file mode 100644 index 000000000..c5d1da693 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qec/surface_z_d11.circuit @@ -0,0 +1,537 @@ +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(10, 0) 10 +QUBIT_COORDS(11, 1) 11 +QUBIT_COORDS(13, 1) 13 +QUBIT_COORDS(14, 0) 14 +QUBIT_COORDS(15, 1) 15 +QUBIT_COORDS(17, 1) 17 +QUBIT_COORDS(18, 0) 18 +QUBIT_COORDS(19, 1) 19 +QUBIT_COORDS(21, 1) 21 +QUBIT_COORDS(1, 3) 24 +QUBIT_COORDS(2, 2) 25 +QUBIT_COORDS(3, 3) 26 +QUBIT_COORDS(4, 2) 27 +QUBIT_COORDS(5, 3) 28 +QUBIT_COORDS(6, 2) 29 +QUBIT_COORDS(7, 3) 30 +QUBIT_COORDS(8, 2) 31 +QUBIT_COORDS(9, 3) 32 +QUBIT_COORDS(10, 2) 33 +QUBIT_COORDS(11, 3) 34 +QUBIT_COORDS(12, 2) 35 +QUBIT_COORDS(13, 3) 36 +QUBIT_COORDS(14, 2) 37 +QUBIT_COORDS(15, 3) 38 +QUBIT_COORDS(16, 2) 39 +QUBIT_COORDS(17, 3) 40 +QUBIT_COORDS(18, 2) 41 +QUBIT_COORDS(19, 3) 42 +QUBIT_COORDS(20, 2) 43 +QUBIT_COORDS(21, 3) 44 +QUBIT_COORDS(22, 2) 45 +QUBIT_COORDS(0, 4) 46 +QUBIT_COORDS(1, 5) 47 +QUBIT_COORDS(2, 4) 48 +QUBIT_COORDS(3, 5) 49 +QUBIT_COORDS(4, 4) 50 +QUBIT_COORDS(5, 5) 51 +QUBIT_COORDS(6, 4) 52 +QUBIT_COORDS(7, 5) 53 +QUBIT_COORDS(8, 4) 54 +QUBIT_COORDS(9, 5) 55 +QUBIT_COORDS(10, 4) 56 +QUBIT_COORDS(11, 5) 57 +QUBIT_COORDS(12, 4) 58 +QUBIT_COORDS(13, 5) 59 +QUBIT_COORDS(14, 4) 60 +QUBIT_COORDS(15, 5) 61 +QUBIT_COORDS(16, 4) 62 +QUBIT_COORDS(17, 5) 63 +QUBIT_COORDS(18, 4) 64 +QUBIT_COORDS(19, 5) 65 +QUBIT_COORDS(20, 4) 66 +QUBIT_COORDS(21, 5) 67 +QUBIT_COORDS(1, 7) 70 +QUBIT_COORDS(2, 6) 71 +QUBIT_COORDS(3, 7) 72 +QUBIT_COORDS(4, 6) 73 +QUBIT_COORDS(5, 7) 74 +QUBIT_COORDS(6, 6) 75 +QUBIT_COORDS(7, 7) 76 +QUBIT_COORDS(8, 6) 77 +QUBIT_COORDS(9, 7) 78 +QUBIT_COORDS(10, 6) 79 +QUBIT_COORDS(11, 7) 80 +QUBIT_COORDS(12, 6) 81 +QUBIT_COORDS(13, 7) 82 +QUBIT_COORDS(14, 6) 83 +QUBIT_COORDS(15, 7) 84 +QUBIT_COORDS(16, 6) 85 +QUBIT_COORDS(17, 7) 86 +QUBIT_COORDS(18, 6) 87 +QUBIT_COORDS(19, 7) 88 +QUBIT_COORDS(20, 6) 89 +QUBIT_COORDS(21, 7) 90 +QUBIT_COORDS(22, 6) 91 +QUBIT_COORDS(0, 8) 92 +QUBIT_COORDS(1, 9) 93 +QUBIT_COORDS(2, 8) 94 +QUBIT_COORDS(3, 9) 95 +QUBIT_COORDS(4, 8) 96 +QUBIT_COORDS(5, 9) 97 +QUBIT_COORDS(6, 8) 98 +QUBIT_COORDS(7, 9) 99 +QUBIT_COORDS(8, 8) 100 +QUBIT_COORDS(9, 9) 101 +QUBIT_COORDS(10, 8) 102 +QUBIT_COORDS(11, 9) 103 +QUBIT_COORDS(12, 8) 104 +QUBIT_COORDS(13, 9) 105 +QUBIT_COORDS(14, 8) 106 +QUBIT_COORDS(15, 9) 107 +QUBIT_COORDS(16, 8) 108 +QUBIT_COORDS(17, 9) 109 +QUBIT_COORDS(18, 8) 110 +QUBIT_COORDS(19, 9) 111 +QUBIT_COORDS(20, 8) 112 +QUBIT_COORDS(21, 9) 113 +QUBIT_COORDS(1, 11) 116 +QUBIT_COORDS(2, 10) 117 +QUBIT_COORDS(3, 11) 118 +QUBIT_COORDS(4, 10) 119 +QUBIT_COORDS(5, 11) 120 +QUBIT_COORDS(6, 10) 121 +QUBIT_COORDS(7, 11) 122 +QUBIT_COORDS(8, 10) 123 +QUBIT_COORDS(9, 11) 124 +QUBIT_COORDS(10, 10) 125 +QUBIT_COORDS(11, 11) 126 +QUBIT_COORDS(12, 10) 127 +QUBIT_COORDS(13, 11) 128 +QUBIT_COORDS(14, 10) 129 +QUBIT_COORDS(15, 11) 130 +QUBIT_COORDS(16, 10) 131 +QUBIT_COORDS(17, 11) 132 +QUBIT_COORDS(18, 10) 133 +QUBIT_COORDS(19, 11) 134 +QUBIT_COORDS(20, 10) 135 +QUBIT_COORDS(21, 11) 136 +QUBIT_COORDS(22, 10) 137 +QUBIT_COORDS(0, 12) 138 +QUBIT_COORDS(1, 13) 139 +QUBIT_COORDS(2, 12) 140 +QUBIT_COORDS(3, 13) 141 +QUBIT_COORDS(4, 12) 142 +QUBIT_COORDS(5, 13) 143 +QUBIT_COORDS(6, 12) 144 +QUBIT_COORDS(7, 13) 145 +QUBIT_COORDS(8, 12) 146 +QUBIT_COORDS(9, 13) 147 +QUBIT_COORDS(10, 12) 148 +QUBIT_COORDS(11, 13) 149 +QUBIT_COORDS(12, 12) 150 +QUBIT_COORDS(13, 13) 151 +QUBIT_COORDS(14, 12) 152 +QUBIT_COORDS(15, 13) 153 +QUBIT_COORDS(16, 12) 154 +QUBIT_COORDS(17, 13) 155 +QUBIT_COORDS(18, 12) 156 +QUBIT_COORDS(19, 13) 157 +QUBIT_COORDS(20, 12) 158 +QUBIT_COORDS(21, 13) 159 +QUBIT_COORDS(1, 15) 162 +QUBIT_COORDS(2, 14) 163 +QUBIT_COORDS(3, 15) 164 +QUBIT_COORDS(4, 14) 165 +QUBIT_COORDS(5, 15) 166 +QUBIT_COORDS(6, 14) 167 +QUBIT_COORDS(7, 15) 168 +QUBIT_COORDS(8, 14) 169 +QUBIT_COORDS(9, 15) 170 +QUBIT_COORDS(10, 14) 171 +QUBIT_COORDS(11, 15) 172 +QUBIT_COORDS(12, 14) 173 +QUBIT_COORDS(13, 15) 174 +QUBIT_COORDS(14, 14) 175 +QUBIT_COORDS(15, 15) 176 +QUBIT_COORDS(16, 14) 177 +QUBIT_COORDS(17, 15) 178 +QUBIT_COORDS(18, 14) 179 +QUBIT_COORDS(19, 15) 180 +QUBIT_COORDS(20, 14) 181 +QUBIT_COORDS(21, 15) 182 +QUBIT_COORDS(22, 14) 183 +QUBIT_COORDS(0, 16) 184 +QUBIT_COORDS(1, 17) 185 +QUBIT_COORDS(2, 16) 186 +QUBIT_COORDS(3, 17) 187 +QUBIT_COORDS(4, 16) 188 +QUBIT_COORDS(5, 17) 189 +QUBIT_COORDS(6, 16) 190 +QUBIT_COORDS(7, 17) 191 +QUBIT_COORDS(8, 16) 192 +QUBIT_COORDS(9, 17) 193 +QUBIT_COORDS(10, 16) 194 +QUBIT_COORDS(11, 17) 195 +QUBIT_COORDS(12, 16) 196 +QUBIT_COORDS(13, 17) 197 +QUBIT_COORDS(14, 16) 198 +QUBIT_COORDS(15, 17) 199 +QUBIT_COORDS(16, 16) 200 +QUBIT_COORDS(17, 17) 201 +QUBIT_COORDS(18, 16) 202 +QUBIT_COORDS(19, 17) 203 +QUBIT_COORDS(20, 16) 204 +QUBIT_COORDS(21, 17) 205 +QUBIT_COORDS(1, 19) 208 +QUBIT_COORDS(2, 18) 209 +QUBIT_COORDS(3, 19) 210 +QUBIT_COORDS(4, 18) 211 +QUBIT_COORDS(5, 19) 212 +QUBIT_COORDS(6, 18) 213 +QUBIT_COORDS(7, 19) 214 +QUBIT_COORDS(8, 18) 215 +QUBIT_COORDS(9, 19) 216 +QUBIT_COORDS(10, 18) 217 +QUBIT_COORDS(11, 19) 218 +QUBIT_COORDS(12, 18) 219 +QUBIT_COORDS(13, 19) 220 +QUBIT_COORDS(14, 18) 221 +QUBIT_COORDS(15, 19) 222 +QUBIT_COORDS(16, 18) 223 +QUBIT_COORDS(17, 19) 224 +QUBIT_COORDS(18, 18) 225 +QUBIT_COORDS(19, 19) 226 +QUBIT_COORDS(20, 18) 227 +QUBIT_COORDS(21, 19) 228 +QUBIT_COORDS(22, 18) 229 +QUBIT_COORDS(0, 20) 230 +QUBIT_COORDS(1, 21) 231 +QUBIT_COORDS(2, 20) 232 +QUBIT_COORDS(3, 21) 233 +QUBIT_COORDS(4, 20) 234 +QUBIT_COORDS(5, 21) 235 +QUBIT_COORDS(6, 20) 236 +QUBIT_COORDS(7, 21) 237 +QUBIT_COORDS(8, 20) 238 +QUBIT_COORDS(9, 21) 239 +QUBIT_COORDS(10, 20) 240 +QUBIT_COORDS(11, 21) 241 +QUBIT_COORDS(12, 20) 242 +QUBIT_COORDS(13, 21) 243 +QUBIT_COORDS(14, 20) 244 +QUBIT_COORDS(15, 21) 245 +QUBIT_COORDS(16, 20) 246 +QUBIT_COORDS(17, 21) 247 +QUBIT_COORDS(18, 20) 248 +QUBIT_COORDS(19, 21) 249 +QUBIT_COORDS(20, 20) 250 +QUBIT_COORDS(21, 21) 251 +QUBIT_COORDS(4, 22) 257 +QUBIT_COORDS(8, 22) 261 +QUBIT_COORDS(12, 22) 265 +QUBIT_COORDS(16, 22) 269 +QUBIT_COORDS(20, 22) 273 +R 1 3 5 7 9 11 13 15 17 19 21 24 26 28 30 32 34 36 38 40 42 44 47 49 51 53 55 57 59 61 63 65 67 70 72 74 76 78 80 82 84 86 88 90 93 95 97 99 101 103 105 107 109 111 113 116 118 120 122 124 126 128 130 132 134 136 139 141 143 145 147 149 151 153 155 157 159 162 164 166 168 170 172 174 176 178 180 182 185 187 189 191 193 195 197 199 201 203 205 208 210 212 214 216 218 220 222 224 226 228 231 233 235 237 239 241 243 245 247 249 251 +X_ERROR(0.001) 1 3 5 7 9 11 13 15 17 19 21 24 26 28 30 32 34 36 38 40 42 44 47 49 51 53 55 57 59 61 63 65 67 70 72 74 76 78 80 82 84 86 88 90 93 95 97 99 101 103 105 107 109 111 113 116 118 120 122 124 126 128 130 132 134 136 139 141 143 145 147 149 151 153 155 157 159 162 164 166 168 170 172 174 176 178 180 182 185 187 189 191 193 195 197 199 201 203 205 208 210 212 214 216 218 220 222 224 226 228 231 233 235 237 239 241 243 245 247 249 251 +R 2 6 10 14 18 25 27 29 31 33 35 37 39 41 43 45 46 48 50 52 54 56 58 60 62 64 66 71 73 75 77 79 81 83 85 87 89 91 92 94 96 98 100 102 104 106 108 110 112 117 119 121 123 125 127 129 131 133 135 137 138 140 142 144 146 148 150 152 154 156 158 163 165 167 169 171 173 175 177 179 181 183 184 186 188 190 192 194 196 198 200 202 204 209 211 213 215 217 219 221 223 225 227 229 230 232 234 236 238 240 242 244 246 248 250 257 261 265 269 273 +X_ERROR(0.001) 2 6 10 14 18 25 27 29 31 33 35 37 39 41 43 45 46 48 50 52 54 56 58 60 62 64 66 71 73 75 77 79 81 83 85 87 89 91 92 94 96 98 100 102 104 106 108 110 112 117 119 121 123 125 127 129 131 133 135 137 138 140 142 144 146 148 150 152 154 156 158 163 165 167 169 171 173 175 177 179 181 183 184 186 188 190 192 194 196 198 200 202 204 209 211 213 215 217 219 221 223 225 227 229 230 232 234 236 238 240 242 244 246 248 250 257 261 265 269 273 +TICK +DEPOLARIZE1(0.001) 1 3 5 7 9 11 13 15 17 19 21 24 26 28 30 32 34 36 38 40 42 44 47 49 51 53 55 57 59 61 63 65 67 70 72 74 76 78 80 82 84 86 88 90 93 95 97 99 101 103 105 107 109 111 113 116 118 120 122 124 126 128 130 132 134 136 139 141 143 145 147 149 151 153 155 157 159 162 164 166 168 170 172 174 176 178 180 182 185 187 189 191 193 195 197 199 201 203 205 208 210 212 214 216 218 220 222 224 226 228 231 233 235 237 239 241 243 245 247 249 251 +H 2 6 10 14 18 27 31 35 39 43 48 52 56 60 64 73 77 81 85 89 94 98 102 106 110 119 123 127 131 135 140 144 148 152 156 165 169 173 177 181 186 190 194 198 202 211 215 219 223 227 232 236 240 244 248 257 261 265 269 273 +DEPOLARIZE1(0.001) 2 6 10 14 18 27 31 35 39 43 48 52 56 60 64 73 77 81 85 89 94 98 102 106 110 119 123 127 131 135 140 144 148 152 156 165 169 173 177 181 186 190 194 198 202 211 215 219 223 227 232 236 240 244 248 257 261 265 269 273 +TICK +CX 2 3 48 49 94 95 140 141 186 187 232 233 27 28 73 74 119 120 165 166 211 212 6 7 52 53 98 99 144 145 190 191 236 237 31 32 77 78 123 124 169 170 215 216 10 11 56 57 102 103 148 149 194 195 240 241 35 36 81 82 127 128 173 174 219 220 14 15 60 61 106 107 152 153 198 199 244 245 39 40 85 86 131 132 177 178 223 224 18 19 64 65 110 111 156 157 202 203 248 249 43 44 89 90 135 136 181 182 227 228 47 46 93 92 139 138 185 184 231 230 26 25 72 71 118 117 164 163 210 209 51 50 97 96 143 142 189 188 235 234 30 29 76 75 122 121 168 167 214 213 55 54 101 100 147 146 193 192 239 238 34 33 80 79 126 125 172 171 218 217 59 58 105 104 151 150 197 196 243 242 38 37 84 83 130 129 176 175 222 221 63 62 109 108 155 154 201 200 247 246 42 41 88 87 134 133 180 179 226 225 67 66 113 112 159 158 205 204 251 250 +DEPOLARIZE2(0.001) 2 3 48 49 94 95 140 141 186 187 232 233 27 28 73 74 119 120 165 166 211 212 6 7 52 53 98 99 144 145 190 191 236 237 31 32 77 78 123 124 169 170 215 216 10 11 56 57 102 103 148 149 194 195 240 241 35 36 81 82 127 128 173 174 219 220 14 15 60 61 106 107 152 153 198 199 244 245 39 40 85 86 131 132 177 178 223 224 18 19 64 65 110 111 156 157 202 203 248 249 43 44 89 90 135 136 181 182 227 228 47 46 93 92 139 138 185 184 231 230 26 25 72 71 118 117 164 163 210 209 51 50 97 96 143 142 189 188 235 234 30 29 76 75 122 121 168 167 214 213 55 54 101 100 147 146 193 192 239 238 34 33 80 79 126 125 172 171 218 217 59 58 105 104 151 150 197 196 243 242 38 37 84 83 130 129 176 175 222 221 63 62 109 108 155 154 201 200 247 246 42 41 88 87 134 133 180 179 226 225 67 66 113 112 159 158 205 204 251 250 +TICK +CX 2 1 48 47 94 93 140 139 186 185 232 231 27 26 73 72 119 118 165 164 211 210 6 5 52 51 98 97 144 143 190 189 236 235 31 30 77 76 123 122 169 168 215 214 10 9 56 55 102 101 148 147 194 193 240 239 35 34 81 80 127 126 173 172 219 218 14 13 60 59 106 105 152 151 198 197 244 243 39 38 85 84 131 130 177 176 223 222 18 17 64 63 110 109 156 155 202 201 248 247 43 42 89 88 135 134 181 180 227 226 24 46 70 92 116 138 162 184 208 230 3 25 49 71 95 117 141 163 187 209 28 50 74 96 120 142 166 188 212 234 7 29 53 75 99 121 145 167 191 213 32 54 78 100 124 146 170 192 216 238 11 33 57 79 103 125 149 171 195 217 36 58 82 104 128 150 174 196 220 242 15 37 61 83 107 129 153 175 199 221 40 62 86 108 132 154 178 200 224 246 19 41 65 87 111 133 157 179 203 225 44 66 90 112 136 158 182 204 228 250 +DEPOLARIZE2(0.001) 2 1 48 47 94 93 140 139 186 185 232 231 27 26 73 72 119 118 165 164 211 210 6 5 52 51 98 97 144 143 190 189 236 235 31 30 77 76 123 122 169 168 215 214 10 9 56 55 102 101 148 147 194 193 240 239 35 34 81 80 127 126 173 172 219 218 14 13 60 59 106 105 152 151 198 197 244 243 39 38 85 84 131 130 177 176 223 222 18 17 64 63 110 109 156 155 202 201 248 247 43 42 89 88 135 134 181 180 227 226 24 46 70 92 116 138 162 184 208 230 3 25 49 71 95 117 141 163 187 209 28 50 74 96 120 142 166 188 212 234 7 29 53 75 99 121 145 167 191 213 32 54 78 100 124 146 170 192 216 238 11 33 57 79 103 125 149 171 195 217 36 58 82 104 128 150 174 196 220 242 15 37 61 83 107 129 153 175 199 221 40 62 86 108 132 154 178 200 224 246 19 41 65 87 111 133 157 179 203 225 44 66 90 112 136 158 182 204 228 250 +TICK +CX 48 26 94 72 140 118 186 164 232 210 27 5 73 51 119 97 165 143 211 189 257 235 52 30 98 76 144 122 190 168 236 214 31 9 77 55 123 101 169 147 215 193 261 239 56 34 102 80 148 126 194 172 240 218 35 13 81 59 127 105 173 151 219 197 265 243 60 38 106 84 152 130 198 176 244 222 39 17 85 63 131 109 177 155 223 201 269 247 64 42 110 88 156 134 202 180 248 226 43 21 89 67 135 113 181 159 227 205 273 251 24 25 70 71 116 117 162 163 208 209 49 50 95 96 141 142 187 188 233 234 28 29 74 75 120 121 166 167 212 213 53 54 99 100 145 146 191 192 237 238 32 33 78 79 124 125 170 171 216 217 57 58 103 104 149 150 195 196 241 242 36 37 82 83 128 129 174 175 220 221 61 62 107 108 153 154 199 200 245 246 40 41 86 87 132 133 178 179 224 225 65 66 111 112 157 158 203 204 249 250 44 45 90 91 136 137 182 183 228 229 +DEPOLARIZE2(0.001) 48 26 94 72 140 118 186 164 232 210 27 5 73 51 119 97 165 143 211 189 257 235 52 30 98 76 144 122 190 168 236 214 31 9 77 55 123 101 169 147 215 193 261 239 56 34 102 80 148 126 194 172 240 218 35 13 81 59 127 105 173 151 219 197 265 243 60 38 106 84 152 130 198 176 244 222 39 17 85 63 131 109 177 155 223 201 269 247 64 42 110 88 156 134 202 180 248 226 43 21 89 67 135 113 181 159 227 205 273 251 24 25 70 71 116 117 162 163 208 209 49 50 95 96 141 142 187 188 233 234 28 29 74 75 120 121 166 167 212 213 53 54 99 100 145 146 191 192 237 238 32 33 78 79 124 125 170 171 216 217 57 58 103 104 149 150 195 196 241 242 36 37 82 83 128 129 174 175 220 221 61 62 107 108 153 154 199 200 245 246 40 41 86 87 132 133 178 179 224 225 65 66 111 112 157 158 203 204 249 250 44 45 90 91 136 137 182 183 228 229 +TICK +CX 48 24 94 70 140 116 186 162 232 208 27 3 73 49 119 95 165 141 211 187 257 233 52 28 98 74 144 120 190 166 236 212 31 7 77 53 123 99 169 145 215 191 261 237 56 32 102 78 148 124 194 170 240 216 35 11 81 57 127 103 173 149 219 195 265 241 60 36 106 82 152 128 198 174 244 220 39 15 85 61 131 107 177 153 223 199 269 245 64 40 110 86 156 132 202 178 248 224 43 19 89 65 135 111 181 157 227 203 273 249 1 25 47 71 93 117 139 163 185 209 26 50 72 96 118 142 164 188 210 234 5 29 51 75 97 121 143 167 189 213 30 54 76 100 122 146 168 192 214 238 9 33 55 79 101 125 147 171 193 217 34 58 80 104 126 150 172 196 218 242 13 37 59 83 105 129 151 175 197 221 38 62 84 108 130 154 176 200 222 246 17 41 63 87 109 133 155 179 201 225 42 66 88 112 134 158 180 204 226 250 21 45 67 91 113 137 159 183 205 229 +DEPOLARIZE2(0.001) 48 24 94 70 140 116 186 162 232 208 27 3 73 49 119 95 165 141 211 187 257 233 52 28 98 74 144 120 190 166 236 212 31 7 77 53 123 99 169 145 215 191 261 237 56 32 102 78 148 124 194 170 240 216 35 11 81 57 127 103 173 149 219 195 265 241 60 36 106 82 152 128 198 174 244 220 39 15 85 61 131 107 177 153 223 199 269 245 64 40 110 86 156 132 202 178 248 224 43 19 89 65 135 111 181 157 227 203 273 249 1 25 47 71 93 117 139 163 185 209 26 50 72 96 118 142 164 188 210 234 5 29 51 75 97 121 143 167 189 213 30 54 76 100 122 146 168 192 214 238 9 33 55 79 101 125 147 171 193 217 34 58 80 104 126 150 172 196 218 242 13 37 59 83 105 129 151 175 197 221 38 62 84 108 130 154 176 200 222 246 17 41 63 87 109 133 155 179 201 225 42 66 88 112 134 158 180 204 226 250 21 45 67 91 113 137 159 183 205 229 +TICK +H 2 6 10 14 18 27 31 35 39 43 48 52 56 60 64 73 77 81 85 89 94 98 102 106 110 119 123 127 131 135 140 144 148 152 156 165 169 173 177 181 186 190 194 198 202 211 215 219 223 227 232 236 240 244 248 257 261 265 269 273 +DEPOLARIZE1(0.001) 2 6 10 14 18 27 31 35 39 43 48 52 56 60 64 73 77 81 85 89 94 98 102 106 110 119 123 127 131 135 140 144 148 152 156 165 169 173 177 181 186 190 194 198 202 211 215 219 223 227 232 236 240 244 248 257 261 265 269 273 +TICK +X_ERROR(0.001) 2 6 10 14 18 25 27 29 31 33 35 37 39 41 43 45 46 48 50 52 54 56 58 60 62 64 66 71 73 75 77 79 81 83 85 87 89 91 92 94 96 98 100 102 104 106 108 110 112 117 119 121 123 125 127 129 131 133 135 137 138 140 142 144 146 148 150 152 154 156 158 163 165 167 169 171 173 175 177 179 181 183 184 186 188 190 192 194 196 198 200 202 204 209 211 213 215 217 219 221 223 225 227 229 230 232 234 236 238 240 242 244 246 248 250 257 261 265 269 273 +MR 2 6 10 14 18 25 27 29 31 33 35 37 39 41 43 45 46 48 50 52 54 56 58 60 62 64 66 71 73 75 77 79 81 83 85 87 89 91 92 94 96 98 100 102 104 106 108 110 112 117 119 121 123 125 127 129 131 133 135 137 138 140 142 144 146 148 150 152 154 156 158 163 165 167 169 171 173 175 177 179 181 183 184 186 188 190 192 194 196 198 200 202 204 209 211 213 215 217 219 221 223 225 227 229 230 232 234 236 238 240 242 244 246 248 250 257 261 265 269 273 +X_ERROR(0.001) 2 6 10 14 18 25 27 29 31 33 35 37 39 41 43 45 46 48 50 52 54 56 58 60 62 64 66 71 73 75 77 79 81 83 85 87 89 91 92 94 96 98 100 102 104 106 108 110 112 117 119 121 123 125 127 129 131 133 135 137 138 140 142 144 146 148 150 152 154 156 158 163 165 167 169 171 173 175 177 179 181 183 184 186 188 190 192 194 196 198 200 202 204 209 211 213 215 217 219 221 223 225 227 229 230 232 234 236 238 240 242 244 246 248 250 257 261 265 269 273 +DETECTOR(0, 4, 0) rec[-104] +DETECTOR(0, 8, 0) rec[-82] +DETECTOR(0, 12, 0) rec[-60] +DETECTOR(0, 16, 0) rec[-38] +DETECTOR(0, 20, 0) rec[-16] +DETECTOR(2, 2, 0) rec[-115] +DETECTOR(2, 6, 0) rec[-93] +DETECTOR(2, 10, 0) rec[-71] +DETECTOR(2, 14, 0) rec[-49] +DETECTOR(2, 18, 0) rec[-27] +DETECTOR(4, 4, 0) rec[-102] +DETECTOR(4, 8, 0) rec[-80] +DETECTOR(4, 12, 0) rec[-58] +DETECTOR(4, 16, 0) rec[-36] +DETECTOR(4, 20, 0) rec[-14] +DETECTOR(6, 2, 0) rec[-113] +DETECTOR(6, 6, 0) rec[-91] +DETECTOR(6, 10, 0) rec[-69] +DETECTOR(6, 14, 0) rec[-47] +DETECTOR(6, 18, 0) rec[-25] +DETECTOR(8, 4, 0) rec[-100] +DETECTOR(8, 8, 0) rec[-78] +DETECTOR(8, 12, 0) rec[-56] +DETECTOR(8, 16, 0) rec[-34] +DETECTOR(8, 20, 0) rec[-12] +DETECTOR(10, 2, 0) rec[-111] +DETECTOR(10, 6, 0) rec[-89] +DETECTOR(10, 10, 0) rec[-67] +DETECTOR(10, 14, 0) rec[-45] +DETECTOR(10, 18, 0) rec[-23] +DETECTOR(12, 4, 0) rec[-98] +DETECTOR(12, 8, 0) rec[-76] +DETECTOR(12, 12, 0) rec[-54] +DETECTOR(12, 16, 0) rec[-32] +DETECTOR(12, 20, 0) rec[-10] +DETECTOR(14, 2, 0) rec[-109] +DETECTOR(14, 6, 0) rec[-87] +DETECTOR(14, 10, 0) rec[-65] +DETECTOR(14, 14, 0) rec[-43] +DETECTOR(14, 18, 0) rec[-21] +DETECTOR(16, 4, 0) rec[-96] +DETECTOR(16, 8, 0) rec[-74] +DETECTOR(16, 12, 0) rec[-52] +DETECTOR(16, 16, 0) rec[-30] +DETECTOR(16, 20, 0) rec[-8] +DETECTOR(18, 2, 0) rec[-107] +DETECTOR(18, 6, 0) rec[-85] +DETECTOR(18, 10, 0) rec[-63] +DETECTOR(18, 14, 0) rec[-41] +DETECTOR(18, 18, 0) rec[-19] +DETECTOR(20, 4, 0) rec[-94] +DETECTOR(20, 8, 0) rec[-72] +DETECTOR(20, 12, 0) rec[-50] +DETECTOR(20, 16, 0) rec[-28] +DETECTOR(20, 20, 0) rec[-6] +DETECTOR(22, 2, 0) rec[-105] +DETECTOR(22, 6, 0) rec[-83] +DETECTOR(22, 10, 0) rec[-61] +DETECTOR(22, 14, 0) rec[-39] +DETECTOR(22, 18, 0) rec[-17] +REPEAT 10 { + TICK + DEPOLARIZE1(0.001) 1 3 5 7 9 11 13 15 17 19 21 24 26 28 30 32 34 36 38 40 42 44 47 49 51 53 55 57 59 61 63 65 67 70 72 74 76 78 80 82 84 86 88 90 93 95 97 99 101 103 105 107 109 111 113 116 118 120 122 124 126 128 130 132 134 136 139 141 143 145 147 149 151 153 155 157 159 162 164 166 168 170 172 174 176 178 180 182 185 187 189 191 193 195 197 199 201 203 205 208 210 212 214 216 218 220 222 224 226 228 231 233 235 237 239 241 243 245 247 249 251 + H 2 6 10 14 18 27 31 35 39 43 48 52 56 60 64 73 77 81 85 89 94 98 102 106 110 119 123 127 131 135 140 144 148 152 156 165 169 173 177 181 186 190 194 198 202 211 215 219 223 227 232 236 240 244 248 257 261 265 269 273 + DEPOLARIZE1(0.001) 2 6 10 14 18 27 31 35 39 43 48 52 56 60 64 73 77 81 85 89 94 98 102 106 110 119 123 127 131 135 140 144 148 152 156 165 169 173 177 181 186 190 194 198 202 211 215 219 223 227 232 236 240 244 248 257 261 265 269 273 + TICK + CX 2 3 48 49 94 95 140 141 186 187 232 233 27 28 73 74 119 120 165 166 211 212 6 7 52 53 98 99 144 145 190 191 236 237 31 32 77 78 123 124 169 170 215 216 10 11 56 57 102 103 148 149 194 195 240 241 35 36 81 82 127 128 173 174 219 220 14 15 60 61 106 107 152 153 198 199 244 245 39 40 85 86 131 132 177 178 223 224 18 19 64 65 110 111 156 157 202 203 248 249 43 44 89 90 135 136 181 182 227 228 47 46 93 92 139 138 185 184 231 230 26 25 72 71 118 117 164 163 210 209 51 50 97 96 143 142 189 188 235 234 30 29 76 75 122 121 168 167 214 213 55 54 101 100 147 146 193 192 239 238 34 33 80 79 126 125 172 171 218 217 59 58 105 104 151 150 197 196 243 242 38 37 84 83 130 129 176 175 222 221 63 62 109 108 155 154 201 200 247 246 42 41 88 87 134 133 180 179 226 225 67 66 113 112 159 158 205 204 251 250 + DEPOLARIZE2(0.001) 2 3 48 49 94 95 140 141 186 187 232 233 27 28 73 74 119 120 165 166 211 212 6 7 52 53 98 99 144 145 190 191 236 237 31 32 77 78 123 124 169 170 215 216 10 11 56 57 102 103 148 149 194 195 240 241 35 36 81 82 127 128 173 174 219 220 14 15 60 61 106 107 152 153 198 199 244 245 39 40 85 86 131 132 177 178 223 224 18 19 64 65 110 111 156 157 202 203 248 249 43 44 89 90 135 136 181 182 227 228 47 46 93 92 139 138 185 184 231 230 26 25 72 71 118 117 164 163 210 209 51 50 97 96 143 142 189 188 235 234 30 29 76 75 122 121 168 167 214 213 55 54 101 100 147 146 193 192 239 238 34 33 80 79 126 125 172 171 218 217 59 58 105 104 151 150 197 196 243 242 38 37 84 83 130 129 176 175 222 221 63 62 109 108 155 154 201 200 247 246 42 41 88 87 134 133 180 179 226 225 67 66 113 112 159 158 205 204 251 250 + TICK + CX 2 1 48 47 94 93 140 139 186 185 232 231 27 26 73 72 119 118 165 164 211 210 6 5 52 51 98 97 144 143 190 189 236 235 31 30 77 76 123 122 169 168 215 214 10 9 56 55 102 101 148 147 194 193 240 239 35 34 81 80 127 126 173 172 219 218 14 13 60 59 106 105 152 151 198 197 244 243 39 38 85 84 131 130 177 176 223 222 18 17 64 63 110 109 156 155 202 201 248 247 43 42 89 88 135 134 181 180 227 226 24 46 70 92 116 138 162 184 208 230 3 25 49 71 95 117 141 163 187 209 28 50 74 96 120 142 166 188 212 234 7 29 53 75 99 121 145 167 191 213 32 54 78 100 124 146 170 192 216 238 11 33 57 79 103 125 149 171 195 217 36 58 82 104 128 150 174 196 220 242 15 37 61 83 107 129 153 175 199 221 40 62 86 108 132 154 178 200 224 246 19 41 65 87 111 133 157 179 203 225 44 66 90 112 136 158 182 204 228 250 + DEPOLARIZE2(0.001) 2 1 48 47 94 93 140 139 186 185 232 231 27 26 73 72 119 118 165 164 211 210 6 5 52 51 98 97 144 143 190 189 236 235 31 30 77 76 123 122 169 168 215 214 10 9 56 55 102 101 148 147 194 193 240 239 35 34 81 80 127 126 173 172 219 218 14 13 60 59 106 105 152 151 198 197 244 243 39 38 85 84 131 130 177 176 223 222 18 17 64 63 110 109 156 155 202 201 248 247 43 42 89 88 135 134 181 180 227 226 24 46 70 92 116 138 162 184 208 230 3 25 49 71 95 117 141 163 187 209 28 50 74 96 120 142 166 188 212 234 7 29 53 75 99 121 145 167 191 213 32 54 78 100 124 146 170 192 216 238 11 33 57 79 103 125 149 171 195 217 36 58 82 104 128 150 174 196 220 242 15 37 61 83 107 129 153 175 199 221 40 62 86 108 132 154 178 200 224 246 19 41 65 87 111 133 157 179 203 225 44 66 90 112 136 158 182 204 228 250 + TICK + CX 48 26 94 72 140 118 186 164 232 210 27 5 73 51 119 97 165 143 211 189 257 235 52 30 98 76 144 122 190 168 236 214 31 9 77 55 123 101 169 147 215 193 261 239 56 34 102 80 148 126 194 172 240 218 35 13 81 59 127 105 173 151 219 197 265 243 60 38 106 84 152 130 198 176 244 222 39 17 85 63 131 109 177 155 223 201 269 247 64 42 110 88 156 134 202 180 248 226 43 21 89 67 135 113 181 159 227 205 273 251 24 25 70 71 116 117 162 163 208 209 49 50 95 96 141 142 187 188 233 234 28 29 74 75 120 121 166 167 212 213 53 54 99 100 145 146 191 192 237 238 32 33 78 79 124 125 170 171 216 217 57 58 103 104 149 150 195 196 241 242 36 37 82 83 128 129 174 175 220 221 61 62 107 108 153 154 199 200 245 246 40 41 86 87 132 133 178 179 224 225 65 66 111 112 157 158 203 204 249 250 44 45 90 91 136 137 182 183 228 229 + DEPOLARIZE2(0.001) 48 26 94 72 140 118 186 164 232 210 27 5 73 51 119 97 165 143 211 189 257 235 52 30 98 76 144 122 190 168 236 214 31 9 77 55 123 101 169 147 215 193 261 239 56 34 102 80 148 126 194 172 240 218 35 13 81 59 127 105 173 151 219 197 265 243 60 38 106 84 152 130 198 176 244 222 39 17 85 63 131 109 177 155 223 201 269 247 64 42 110 88 156 134 202 180 248 226 43 21 89 67 135 113 181 159 227 205 273 251 24 25 70 71 116 117 162 163 208 209 49 50 95 96 141 142 187 188 233 234 28 29 74 75 120 121 166 167 212 213 53 54 99 100 145 146 191 192 237 238 32 33 78 79 124 125 170 171 216 217 57 58 103 104 149 150 195 196 241 242 36 37 82 83 128 129 174 175 220 221 61 62 107 108 153 154 199 200 245 246 40 41 86 87 132 133 178 179 224 225 65 66 111 112 157 158 203 204 249 250 44 45 90 91 136 137 182 183 228 229 + TICK + CX 48 24 94 70 140 116 186 162 232 208 27 3 73 49 119 95 165 141 211 187 257 233 52 28 98 74 144 120 190 166 236 212 31 7 77 53 123 99 169 145 215 191 261 237 56 32 102 78 148 124 194 170 240 216 35 11 81 57 127 103 173 149 219 195 265 241 60 36 106 82 152 128 198 174 244 220 39 15 85 61 131 107 177 153 223 199 269 245 64 40 110 86 156 132 202 178 248 224 43 19 89 65 135 111 181 157 227 203 273 249 1 25 47 71 93 117 139 163 185 209 26 50 72 96 118 142 164 188 210 234 5 29 51 75 97 121 143 167 189 213 30 54 76 100 122 146 168 192 214 238 9 33 55 79 101 125 147 171 193 217 34 58 80 104 126 150 172 196 218 242 13 37 59 83 105 129 151 175 197 221 38 62 84 108 130 154 176 200 222 246 17 41 63 87 109 133 155 179 201 225 42 66 88 112 134 158 180 204 226 250 21 45 67 91 113 137 159 183 205 229 + DEPOLARIZE2(0.001) 48 24 94 70 140 116 186 162 232 208 27 3 73 49 119 95 165 141 211 187 257 233 52 28 98 74 144 120 190 166 236 212 31 7 77 53 123 99 169 145 215 191 261 237 56 32 102 78 148 124 194 170 240 216 35 11 81 57 127 103 173 149 219 195 265 241 60 36 106 82 152 128 198 174 244 220 39 15 85 61 131 107 177 153 223 199 269 245 64 40 110 86 156 132 202 178 248 224 43 19 89 65 135 111 181 157 227 203 273 249 1 25 47 71 93 117 139 163 185 209 26 50 72 96 118 142 164 188 210 234 5 29 51 75 97 121 143 167 189 213 30 54 76 100 122 146 168 192 214 238 9 33 55 79 101 125 147 171 193 217 34 58 80 104 126 150 172 196 218 242 13 37 59 83 105 129 151 175 197 221 38 62 84 108 130 154 176 200 222 246 17 41 63 87 109 133 155 179 201 225 42 66 88 112 134 158 180 204 226 250 21 45 67 91 113 137 159 183 205 229 + TICK + H 2 6 10 14 18 27 31 35 39 43 48 52 56 60 64 73 77 81 85 89 94 98 102 106 110 119 123 127 131 135 140 144 148 152 156 165 169 173 177 181 186 190 194 198 202 211 215 219 223 227 232 236 240 244 248 257 261 265 269 273 + DEPOLARIZE1(0.001) 2 6 10 14 18 27 31 35 39 43 48 52 56 60 64 73 77 81 85 89 94 98 102 106 110 119 123 127 131 135 140 144 148 152 156 165 169 173 177 181 186 190 194 198 202 211 215 219 223 227 232 236 240 244 248 257 261 265 269 273 + TICK + X_ERROR(0.001) 2 6 10 14 18 25 27 29 31 33 35 37 39 41 43 45 46 48 50 52 54 56 58 60 62 64 66 71 73 75 77 79 81 83 85 87 89 91 92 94 96 98 100 102 104 106 108 110 112 117 119 121 123 125 127 129 131 133 135 137 138 140 142 144 146 148 150 152 154 156 158 163 165 167 169 171 173 175 177 179 181 183 184 186 188 190 192 194 196 198 200 202 204 209 211 213 215 217 219 221 223 225 227 229 230 232 234 236 238 240 242 244 246 248 250 257 261 265 269 273 + MR 2 6 10 14 18 25 27 29 31 33 35 37 39 41 43 45 46 48 50 52 54 56 58 60 62 64 66 71 73 75 77 79 81 83 85 87 89 91 92 94 96 98 100 102 104 106 108 110 112 117 119 121 123 125 127 129 131 133 135 137 138 140 142 144 146 148 150 152 154 156 158 163 165 167 169 171 173 175 177 179 181 183 184 186 188 190 192 194 196 198 200 202 204 209 211 213 215 217 219 221 223 225 227 229 230 232 234 236 238 240 242 244 246 248 250 257 261 265 269 273 + X_ERROR(0.001) 2 6 10 14 18 25 27 29 31 33 35 37 39 41 43 45 46 48 50 52 54 56 58 60 62 64 66 71 73 75 77 79 81 83 85 87 89 91 92 94 96 98 100 102 104 106 108 110 112 117 119 121 123 125 127 129 131 133 135 137 138 140 142 144 146 148 150 152 154 156 158 163 165 167 169 171 173 175 177 179 181 183 184 186 188 190 192 194 196 198 200 202 204 209 211 213 215 217 219 221 223 225 227 229 230 232 234 236 238 240 242 244 246 248 250 257 261 265 269 273 + SHIFT_COORDS(0, 0, 1) + DETECTOR(2, 0, 0) rec[-120] rec[-240] + DETECTOR(6, 0, 0) rec[-119] rec[-239] + DETECTOR(10, 0, 0) rec[-118] rec[-238] + DETECTOR(14, 0, 0) rec[-117] rec[-237] + DETECTOR(18, 0, 0) rec[-116] rec[-236] + DETECTOR(2, 2, 0) rec[-115] rec[-235] + DETECTOR(4, 2, 0) rec[-114] rec[-234] + DETECTOR(6, 2, 0) rec[-113] rec[-233] + DETECTOR(8, 2, 0) rec[-112] rec[-232] + DETECTOR(10, 2, 0) rec[-111] rec[-231] + DETECTOR(12, 2, 0) rec[-110] rec[-230] + DETECTOR(14, 2, 0) rec[-109] rec[-229] + DETECTOR(16, 2, 0) rec[-108] rec[-228] + DETECTOR(18, 2, 0) rec[-107] rec[-227] + DETECTOR(20, 2, 0) rec[-106] rec[-226] + DETECTOR(22, 2, 0) rec[-105] rec[-225] + DETECTOR(0, 4, 0) rec[-104] rec[-224] + DETECTOR(2, 4, 0) rec[-103] rec[-223] + DETECTOR(4, 4, 0) rec[-102] rec[-222] + DETECTOR(6, 4, 0) rec[-101] rec[-221] + DETECTOR(8, 4, 0) rec[-100] rec[-220] + DETECTOR(10, 4, 0) rec[-99] rec[-219] + DETECTOR(12, 4, 0) rec[-98] rec[-218] + DETECTOR(14, 4, 0) rec[-97] rec[-217] + DETECTOR(16, 4, 0) rec[-96] rec[-216] + DETECTOR(18, 4, 0) rec[-95] rec[-215] + DETECTOR(20, 4, 0) rec[-94] rec[-214] + DETECTOR(2, 6, 0) rec[-93] rec[-213] + DETECTOR(4, 6, 0) rec[-92] rec[-212] + DETECTOR(6, 6, 0) rec[-91] rec[-211] + DETECTOR(8, 6, 0) rec[-90] rec[-210] + DETECTOR(10, 6, 0) rec[-89] rec[-209] + DETECTOR(12, 6, 0) rec[-88] rec[-208] + DETECTOR(14, 6, 0) rec[-87] rec[-207] + DETECTOR(16, 6, 0) rec[-86] rec[-206] + DETECTOR(18, 6, 0) rec[-85] rec[-205] + DETECTOR(20, 6, 0) rec[-84] rec[-204] + DETECTOR(22, 6, 0) rec[-83] rec[-203] + DETECTOR(0, 8, 0) rec[-82] rec[-202] + DETECTOR(2, 8, 0) rec[-81] rec[-201] + DETECTOR(4, 8, 0) rec[-80] rec[-200] + DETECTOR(6, 8, 0) rec[-79] rec[-199] + DETECTOR(8, 8, 0) rec[-78] rec[-198] + DETECTOR(10, 8, 0) rec[-77] rec[-197] + DETECTOR(12, 8, 0) rec[-76] rec[-196] + DETECTOR(14, 8, 0) rec[-75] rec[-195] + DETECTOR(16, 8, 0) rec[-74] rec[-194] + DETECTOR(18, 8, 0) rec[-73] rec[-193] + DETECTOR(20, 8, 0) rec[-72] rec[-192] + DETECTOR(2, 10, 0) rec[-71] rec[-191] + DETECTOR(4, 10, 0) rec[-70] rec[-190] + DETECTOR(6, 10, 0) rec[-69] rec[-189] + DETECTOR(8, 10, 0) rec[-68] rec[-188] + DETECTOR(10, 10, 0) rec[-67] rec[-187] + DETECTOR(12, 10, 0) rec[-66] rec[-186] + DETECTOR(14, 10, 0) rec[-65] rec[-185] + DETECTOR(16, 10, 0) rec[-64] rec[-184] + DETECTOR(18, 10, 0) rec[-63] rec[-183] + DETECTOR(20, 10, 0) rec[-62] rec[-182] + DETECTOR(22, 10, 0) rec[-61] rec[-181] + DETECTOR(0, 12, 0) rec[-60] rec[-180] + DETECTOR(2, 12, 0) rec[-59] rec[-179] + DETECTOR(4, 12, 0) rec[-58] rec[-178] + DETECTOR(6, 12, 0) rec[-57] rec[-177] + DETECTOR(8, 12, 0) rec[-56] rec[-176] + DETECTOR(10, 12, 0) rec[-55] rec[-175] + DETECTOR(12, 12, 0) rec[-54] rec[-174] + DETECTOR(14, 12, 0) rec[-53] rec[-173] + DETECTOR(16, 12, 0) rec[-52] rec[-172] + DETECTOR(18, 12, 0) rec[-51] rec[-171] + DETECTOR(20, 12, 0) rec[-50] rec[-170] + DETECTOR(2, 14, 0) rec[-49] rec[-169] + DETECTOR(4, 14, 0) rec[-48] rec[-168] + DETECTOR(6, 14, 0) rec[-47] rec[-167] + DETECTOR(8, 14, 0) rec[-46] rec[-166] + DETECTOR(10, 14, 0) rec[-45] rec[-165] + DETECTOR(12, 14, 0) rec[-44] rec[-164] + DETECTOR(14, 14, 0) rec[-43] rec[-163] + DETECTOR(16, 14, 0) rec[-42] rec[-162] + DETECTOR(18, 14, 0) rec[-41] rec[-161] + DETECTOR(20, 14, 0) rec[-40] rec[-160] + DETECTOR(22, 14, 0) rec[-39] rec[-159] + DETECTOR(0, 16, 0) rec[-38] rec[-158] + DETECTOR(2, 16, 0) rec[-37] rec[-157] + DETECTOR(4, 16, 0) rec[-36] rec[-156] + DETECTOR(6, 16, 0) rec[-35] rec[-155] + DETECTOR(8, 16, 0) rec[-34] rec[-154] + DETECTOR(10, 16, 0) rec[-33] rec[-153] + DETECTOR(12, 16, 0) rec[-32] rec[-152] + DETECTOR(14, 16, 0) rec[-31] rec[-151] + DETECTOR(16, 16, 0) rec[-30] rec[-150] + DETECTOR(18, 16, 0) rec[-29] rec[-149] + DETECTOR(20, 16, 0) rec[-28] rec[-148] + DETECTOR(2, 18, 0) rec[-27] rec[-147] + DETECTOR(4, 18, 0) rec[-26] rec[-146] + DETECTOR(6, 18, 0) rec[-25] rec[-145] + DETECTOR(8, 18, 0) rec[-24] rec[-144] + DETECTOR(10, 18, 0) rec[-23] rec[-143] + DETECTOR(12, 18, 0) rec[-22] rec[-142] + DETECTOR(14, 18, 0) rec[-21] rec[-141] + DETECTOR(16, 18, 0) rec[-20] rec[-140] + DETECTOR(18, 18, 0) rec[-19] rec[-139] + DETECTOR(20, 18, 0) rec[-18] rec[-138] + DETECTOR(22, 18, 0) rec[-17] rec[-137] + DETECTOR(0, 20, 0) rec[-16] rec[-136] + DETECTOR(2, 20, 0) rec[-15] rec[-135] + DETECTOR(4, 20, 0) rec[-14] rec[-134] + DETECTOR(6, 20, 0) rec[-13] rec[-133] + DETECTOR(8, 20, 0) rec[-12] rec[-132] + DETECTOR(10, 20, 0) rec[-11] rec[-131] + DETECTOR(12, 20, 0) rec[-10] rec[-130] + DETECTOR(14, 20, 0) rec[-9] rec[-129] + DETECTOR(16, 20, 0) rec[-8] rec[-128] + DETECTOR(18, 20, 0) rec[-7] rec[-127] + DETECTOR(20, 20, 0) rec[-6] rec[-126] + DETECTOR(4, 22, 0) rec[-5] rec[-125] + DETECTOR(8, 22, 0) rec[-4] rec[-124] + DETECTOR(12, 22, 0) rec[-3] rec[-123] + DETECTOR(16, 22, 0) rec[-2] rec[-122] + DETECTOR(20, 22, 0) rec[-1] rec[-121] +} +X_ERROR(0.001) 1 3 5 7 9 11 13 15 17 19 21 24 26 28 30 32 34 36 38 40 42 44 47 49 51 53 55 57 59 61 63 65 67 70 72 74 76 78 80 82 84 86 88 90 93 95 97 99 101 103 105 107 109 111 113 116 118 120 122 124 126 128 130 132 134 136 139 141 143 145 147 149 151 153 155 157 159 162 164 166 168 170 172 174 176 178 180 182 185 187 189 191 193 195 197 199 201 203 205 208 210 212 214 216 218 220 222 224 226 228 231 233 235 237 239 241 243 245 247 249 251 +M 1 3 5 7 9 11 13 15 17 19 21 24 26 28 30 32 34 36 38 40 42 44 47 49 51 53 55 57 59 61 63 65 67 70 72 74 76 78 80 82 84 86 88 90 93 95 97 99 101 103 105 107 109 111 113 116 118 120 122 124 126 128 130 132 134 136 139 141 143 145 147 149 151 153 155 157 159 162 164 166 168 170 172 174 176 178 180 182 185 187 189 191 193 195 197 199 201 203 205 208 210 212 214 216 218 220 222 224 226 228 231 233 235 237 239 241 243 245 247 249 251 +DETECTOR(0, 4, 1) rec[-99] rec[-110] rec[-225] +DETECTOR(0, 8, 1) rec[-77] rec[-88] rec[-203] +DETECTOR(0, 12, 1) rec[-55] rec[-66] rec[-181] +DETECTOR(0, 16, 1) rec[-33] rec[-44] rec[-159] +DETECTOR(0, 20, 1) rec[-11] rec[-22] rec[-137] +DETECTOR(2, 2, 1) rec[-109] rec[-110] rec[-120] rec[-121] rec[-236] +DETECTOR(2, 6, 1) rec[-87] rec[-88] rec[-98] rec[-99] rec[-214] +DETECTOR(2, 10, 1) rec[-65] rec[-66] rec[-76] rec[-77] rec[-192] +DETECTOR(2, 14, 1) rec[-43] rec[-44] rec[-54] rec[-55] rec[-170] +DETECTOR(2, 18, 1) rec[-21] rec[-22] rec[-32] rec[-33] rec[-148] +DETECTOR(4, 4, 1) rec[-97] rec[-98] rec[-108] rec[-109] rec[-223] +DETECTOR(4, 8, 1) rec[-75] rec[-76] rec[-86] rec[-87] rec[-201] +DETECTOR(4, 12, 1) rec[-53] rec[-54] rec[-64] rec[-65] rec[-179] +DETECTOR(4, 16, 1) rec[-31] rec[-32] rec[-42] rec[-43] rec[-157] +DETECTOR(4, 20, 1) rec[-9] rec[-10] rec[-20] rec[-21] rec[-135] +DETECTOR(6, 2, 1) rec[-107] rec[-108] rec[-118] rec[-119] rec[-234] +DETECTOR(6, 6, 1) rec[-85] rec[-86] rec[-96] rec[-97] rec[-212] +DETECTOR(6, 10, 1) rec[-63] rec[-64] rec[-74] rec[-75] rec[-190] +DETECTOR(6, 14, 1) rec[-41] rec[-42] rec[-52] rec[-53] rec[-168] +DETECTOR(6, 18, 1) rec[-19] rec[-20] rec[-30] rec[-31] rec[-146] +DETECTOR(8, 4, 1) rec[-95] rec[-96] rec[-106] rec[-107] rec[-221] +DETECTOR(8, 8, 1) rec[-73] rec[-74] rec[-84] rec[-85] rec[-199] +DETECTOR(8, 12, 1) rec[-51] rec[-52] rec[-62] rec[-63] rec[-177] +DETECTOR(8, 16, 1) rec[-29] rec[-30] rec[-40] rec[-41] rec[-155] +DETECTOR(8, 20, 1) rec[-7] rec[-8] rec[-18] rec[-19] rec[-133] +DETECTOR(10, 2, 1) rec[-105] rec[-106] rec[-116] rec[-117] rec[-232] +DETECTOR(10, 6, 1) rec[-83] rec[-84] rec[-94] rec[-95] rec[-210] +DETECTOR(10, 10, 1) rec[-61] rec[-62] rec[-72] rec[-73] rec[-188] +DETECTOR(10, 14, 1) rec[-39] rec[-40] rec[-50] rec[-51] rec[-166] +DETECTOR(10, 18, 1) rec[-17] rec[-18] rec[-28] rec[-29] rec[-144] +DETECTOR(12, 4, 1) rec[-93] rec[-94] rec[-104] rec[-105] rec[-219] +DETECTOR(12, 8, 1) rec[-71] rec[-72] rec[-82] rec[-83] rec[-197] +DETECTOR(12, 12, 1) rec[-49] rec[-50] rec[-60] rec[-61] rec[-175] +DETECTOR(12, 16, 1) rec[-27] rec[-28] rec[-38] rec[-39] rec[-153] +DETECTOR(12, 20, 1) rec[-5] rec[-6] rec[-16] rec[-17] rec[-131] +DETECTOR(14, 2, 1) rec[-103] rec[-104] rec[-114] rec[-115] rec[-230] +DETECTOR(14, 6, 1) rec[-81] rec[-82] rec[-92] rec[-93] rec[-208] +DETECTOR(14, 10, 1) rec[-59] rec[-60] rec[-70] rec[-71] rec[-186] +DETECTOR(14, 14, 1) rec[-37] rec[-38] rec[-48] rec[-49] rec[-164] +DETECTOR(14, 18, 1) rec[-15] rec[-16] rec[-26] rec[-27] rec[-142] +DETECTOR(16, 4, 1) rec[-91] rec[-92] rec[-102] rec[-103] rec[-217] +DETECTOR(16, 8, 1) rec[-69] rec[-70] rec[-80] rec[-81] rec[-195] +DETECTOR(16, 12, 1) rec[-47] rec[-48] rec[-58] rec[-59] rec[-173] +DETECTOR(16, 16, 1) rec[-25] rec[-26] rec[-36] rec[-37] rec[-151] +DETECTOR(16, 20, 1) rec[-3] rec[-4] rec[-14] rec[-15] rec[-129] +DETECTOR(18, 2, 1) rec[-101] rec[-102] rec[-112] rec[-113] rec[-228] +DETECTOR(18, 6, 1) rec[-79] rec[-80] rec[-90] rec[-91] rec[-206] +DETECTOR(18, 10, 1) rec[-57] rec[-58] rec[-68] rec[-69] rec[-184] +DETECTOR(18, 14, 1) rec[-35] rec[-36] rec[-46] rec[-47] rec[-162] +DETECTOR(18, 18, 1) rec[-13] rec[-14] rec[-24] rec[-25] rec[-140] +DETECTOR(20, 4, 1) rec[-89] rec[-90] rec[-100] rec[-101] rec[-215] +DETECTOR(20, 8, 1) rec[-67] rec[-68] rec[-78] rec[-79] rec[-193] +DETECTOR(20, 12, 1) rec[-45] rec[-46] rec[-56] rec[-57] rec[-171] +DETECTOR(20, 16, 1) rec[-23] rec[-24] rec[-34] rec[-35] rec[-149] +DETECTOR(20, 20, 1) rec[-1] rec[-2] rec[-12] rec[-13] rec[-127] +DETECTOR(22, 2, 1) rec[-100] rec[-111] rec[-226] +DETECTOR(22, 6, 1) rec[-78] rec[-89] rec[-204] +DETECTOR(22, 10, 1) rec[-56] rec[-67] rec[-182] +DETECTOR(22, 14, 1) rec[-34] rec[-45] rec[-160] +DETECTOR(22, 18, 1) rec[-12] rec[-23] rec[-138] +OBSERVABLE_INCLUDE(0) rec[-111] rec[-112] rec[-113] rec[-114] rec[-115] rec[-116] rec[-117] rec[-118] rec[-119] rec[-120] rec[-121] diff --git a/wai/quantum-cross-simulator/corpus/qec/surface_z_d15.circuit b/wai/quantum-cross-simulator/corpus/qec/surface_z_d15.circuit new file mode 100644 index 000000000..5abd7c0ae --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qec/surface_z_d15.circuit @@ -0,0 +1,953 @@ +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(10, 0) 10 +QUBIT_COORDS(11, 1) 11 +QUBIT_COORDS(13, 1) 13 +QUBIT_COORDS(14, 0) 14 +QUBIT_COORDS(15, 1) 15 +QUBIT_COORDS(17, 1) 17 +QUBIT_COORDS(18, 0) 18 +QUBIT_COORDS(19, 1) 19 +QUBIT_COORDS(21, 1) 21 +QUBIT_COORDS(22, 0) 22 +QUBIT_COORDS(23, 1) 23 +QUBIT_COORDS(25, 1) 25 +QUBIT_COORDS(26, 0) 26 +QUBIT_COORDS(27, 1) 27 +QUBIT_COORDS(29, 1) 29 +QUBIT_COORDS(1, 3) 32 +QUBIT_COORDS(2, 2) 33 +QUBIT_COORDS(3, 3) 34 +QUBIT_COORDS(4, 2) 35 +QUBIT_COORDS(5, 3) 36 +QUBIT_COORDS(6, 2) 37 +QUBIT_COORDS(7, 3) 38 +QUBIT_COORDS(8, 2) 39 +QUBIT_COORDS(9, 3) 40 +QUBIT_COORDS(10, 2) 41 +QUBIT_COORDS(11, 3) 42 +QUBIT_COORDS(12, 2) 43 +QUBIT_COORDS(13, 3) 44 +QUBIT_COORDS(14, 2) 45 +QUBIT_COORDS(15, 3) 46 +QUBIT_COORDS(16, 2) 47 +QUBIT_COORDS(17, 3) 48 +QUBIT_COORDS(18, 2) 49 +QUBIT_COORDS(19, 3) 50 +QUBIT_COORDS(20, 2) 51 +QUBIT_COORDS(21, 3) 52 +QUBIT_COORDS(22, 2) 53 +QUBIT_COORDS(23, 3) 54 +QUBIT_COORDS(24, 2) 55 +QUBIT_COORDS(25, 3) 56 +QUBIT_COORDS(26, 2) 57 +QUBIT_COORDS(27, 3) 58 +QUBIT_COORDS(28, 2) 59 +QUBIT_COORDS(29, 3) 60 +QUBIT_COORDS(30, 2) 61 +QUBIT_COORDS(0, 4) 62 +QUBIT_COORDS(1, 5) 63 +QUBIT_COORDS(2, 4) 64 +QUBIT_COORDS(3, 5) 65 +QUBIT_COORDS(4, 4) 66 +QUBIT_COORDS(5, 5) 67 +QUBIT_COORDS(6, 4) 68 +QUBIT_COORDS(7, 5) 69 +QUBIT_COORDS(8, 4) 70 +QUBIT_COORDS(9, 5) 71 +QUBIT_COORDS(10, 4) 72 +QUBIT_COORDS(11, 5) 73 +QUBIT_COORDS(12, 4) 74 +QUBIT_COORDS(13, 5) 75 +QUBIT_COORDS(14, 4) 76 +QUBIT_COORDS(15, 5) 77 +QUBIT_COORDS(16, 4) 78 +QUBIT_COORDS(17, 5) 79 +QUBIT_COORDS(18, 4) 80 +QUBIT_COORDS(19, 5) 81 +QUBIT_COORDS(20, 4) 82 +QUBIT_COORDS(21, 5) 83 +QUBIT_COORDS(22, 4) 84 +QUBIT_COORDS(23, 5) 85 +QUBIT_COORDS(24, 4) 86 +QUBIT_COORDS(25, 5) 87 +QUBIT_COORDS(26, 4) 88 +QUBIT_COORDS(27, 5) 89 +QUBIT_COORDS(28, 4) 90 +QUBIT_COORDS(29, 5) 91 +QUBIT_COORDS(1, 7) 94 +QUBIT_COORDS(2, 6) 95 +QUBIT_COORDS(3, 7) 96 +QUBIT_COORDS(4, 6) 97 +QUBIT_COORDS(5, 7) 98 +QUBIT_COORDS(6, 6) 99 +QUBIT_COORDS(7, 7) 100 +QUBIT_COORDS(8, 6) 101 +QUBIT_COORDS(9, 7) 102 +QUBIT_COORDS(10, 6) 103 +QUBIT_COORDS(11, 7) 104 +QUBIT_COORDS(12, 6) 105 +QUBIT_COORDS(13, 7) 106 +QUBIT_COORDS(14, 6) 107 +QUBIT_COORDS(15, 7) 108 +QUBIT_COORDS(16, 6) 109 +QUBIT_COORDS(17, 7) 110 +QUBIT_COORDS(18, 6) 111 +QUBIT_COORDS(19, 7) 112 +QUBIT_COORDS(20, 6) 113 +QUBIT_COORDS(21, 7) 114 +QUBIT_COORDS(22, 6) 115 +QUBIT_COORDS(23, 7) 116 +QUBIT_COORDS(24, 6) 117 +QUBIT_COORDS(25, 7) 118 +QUBIT_COORDS(26, 6) 119 +QUBIT_COORDS(27, 7) 120 +QUBIT_COORDS(28, 6) 121 +QUBIT_COORDS(29, 7) 122 +QUBIT_COORDS(30, 6) 123 +QUBIT_COORDS(0, 8) 124 +QUBIT_COORDS(1, 9) 125 +QUBIT_COORDS(2, 8) 126 +QUBIT_COORDS(3, 9) 127 +QUBIT_COORDS(4, 8) 128 +QUBIT_COORDS(5, 9) 129 +QUBIT_COORDS(6, 8) 130 +QUBIT_COORDS(7, 9) 131 +QUBIT_COORDS(8, 8) 132 +QUBIT_COORDS(9, 9) 133 +QUBIT_COORDS(10, 8) 134 +QUBIT_COORDS(11, 9) 135 +QUBIT_COORDS(12, 8) 136 +QUBIT_COORDS(13, 9) 137 +QUBIT_COORDS(14, 8) 138 +QUBIT_COORDS(15, 9) 139 +QUBIT_COORDS(16, 8) 140 +QUBIT_COORDS(17, 9) 141 +QUBIT_COORDS(18, 8) 142 +QUBIT_COORDS(19, 9) 143 +QUBIT_COORDS(20, 8) 144 +QUBIT_COORDS(21, 9) 145 +QUBIT_COORDS(22, 8) 146 +QUBIT_COORDS(23, 9) 147 +QUBIT_COORDS(24, 8) 148 +QUBIT_COORDS(25, 9) 149 +QUBIT_COORDS(26, 8) 150 +QUBIT_COORDS(27, 9) 151 +QUBIT_COORDS(28, 8) 152 +QUBIT_COORDS(29, 9) 153 +QUBIT_COORDS(1, 11) 156 +QUBIT_COORDS(2, 10) 157 +QUBIT_COORDS(3, 11) 158 +QUBIT_COORDS(4, 10) 159 +QUBIT_COORDS(5, 11) 160 +QUBIT_COORDS(6, 10) 161 +QUBIT_COORDS(7, 11) 162 +QUBIT_COORDS(8, 10) 163 +QUBIT_COORDS(9, 11) 164 +QUBIT_COORDS(10, 10) 165 +QUBIT_COORDS(11, 11) 166 +QUBIT_COORDS(12, 10) 167 +QUBIT_COORDS(13, 11) 168 +QUBIT_COORDS(14, 10) 169 +QUBIT_COORDS(15, 11) 170 +QUBIT_COORDS(16, 10) 171 +QUBIT_COORDS(17, 11) 172 +QUBIT_COORDS(18, 10) 173 +QUBIT_COORDS(19, 11) 174 +QUBIT_COORDS(20, 10) 175 +QUBIT_COORDS(21, 11) 176 +QUBIT_COORDS(22, 10) 177 +QUBIT_COORDS(23, 11) 178 +QUBIT_COORDS(24, 10) 179 +QUBIT_COORDS(25, 11) 180 +QUBIT_COORDS(26, 10) 181 +QUBIT_COORDS(27, 11) 182 +QUBIT_COORDS(28, 10) 183 +QUBIT_COORDS(29, 11) 184 +QUBIT_COORDS(30, 10) 185 +QUBIT_COORDS(0, 12) 186 +QUBIT_COORDS(1, 13) 187 +QUBIT_COORDS(2, 12) 188 +QUBIT_COORDS(3, 13) 189 +QUBIT_COORDS(4, 12) 190 +QUBIT_COORDS(5, 13) 191 +QUBIT_COORDS(6, 12) 192 +QUBIT_COORDS(7, 13) 193 +QUBIT_COORDS(8, 12) 194 +QUBIT_COORDS(9, 13) 195 +QUBIT_COORDS(10, 12) 196 +QUBIT_COORDS(11, 13) 197 +QUBIT_COORDS(12, 12) 198 +QUBIT_COORDS(13, 13) 199 +QUBIT_COORDS(14, 12) 200 +QUBIT_COORDS(15, 13) 201 +QUBIT_COORDS(16, 12) 202 +QUBIT_COORDS(17, 13) 203 +QUBIT_COORDS(18, 12) 204 +QUBIT_COORDS(19, 13) 205 +QUBIT_COORDS(20, 12) 206 +QUBIT_COORDS(21, 13) 207 +QUBIT_COORDS(22, 12) 208 +QUBIT_COORDS(23, 13) 209 +QUBIT_COORDS(24, 12) 210 +QUBIT_COORDS(25, 13) 211 +QUBIT_COORDS(26, 12) 212 +QUBIT_COORDS(27, 13) 213 +QUBIT_COORDS(28, 12) 214 +QUBIT_COORDS(29, 13) 215 +QUBIT_COORDS(1, 15) 218 +QUBIT_COORDS(2, 14) 219 +QUBIT_COORDS(3, 15) 220 +QUBIT_COORDS(4, 14) 221 +QUBIT_COORDS(5, 15) 222 +QUBIT_COORDS(6, 14) 223 +QUBIT_COORDS(7, 15) 224 +QUBIT_COORDS(8, 14) 225 +QUBIT_COORDS(9, 15) 226 +QUBIT_COORDS(10, 14) 227 +QUBIT_COORDS(11, 15) 228 +QUBIT_COORDS(12, 14) 229 +QUBIT_COORDS(13, 15) 230 +QUBIT_COORDS(14, 14) 231 +QUBIT_COORDS(15, 15) 232 +QUBIT_COORDS(16, 14) 233 +QUBIT_COORDS(17, 15) 234 +QUBIT_COORDS(18, 14) 235 +QUBIT_COORDS(19, 15) 236 +QUBIT_COORDS(20, 14) 237 +QUBIT_COORDS(21, 15) 238 +QUBIT_COORDS(22, 14) 239 +QUBIT_COORDS(23, 15) 240 +QUBIT_COORDS(24, 14) 241 +QUBIT_COORDS(25, 15) 242 +QUBIT_COORDS(26, 14) 243 +QUBIT_COORDS(27, 15) 244 +QUBIT_COORDS(28, 14) 245 +QUBIT_COORDS(29, 15) 246 +QUBIT_COORDS(30, 14) 247 +QUBIT_COORDS(0, 16) 248 +QUBIT_COORDS(1, 17) 249 +QUBIT_COORDS(2, 16) 250 +QUBIT_COORDS(3, 17) 251 +QUBIT_COORDS(4, 16) 252 +QUBIT_COORDS(5, 17) 253 +QUBIT_COORDS(6, 16) 254 +QUBIT_COORDS(7, 17) 255 +QUBIT_COORDS(8, 16) 256 +QUBIT_COORDS(9, 17) 257 +QUBIT_COORDS(10, 16) 258 +QUBIT_COORDS(11, 17) 259 +QUBIT_COORDS(12, 16) 260 +QUBIT_COORDS(13, 17) 261 +QUBIT_COORDS(14, 16) 262 +QUBIT_COORDS(15, 17) 263 +QUBIT_COORDS(16, 16) 264 +QUBIT_COORDS(17, 17) 265 +QUBIT_COORDS(18, 16) 266 +QUBIT_COORDS(19, 17) 267 +QUBIT_COORDS(20, 16) 268 +QUBIT_COORDS(21, 17) 269 +QUBIT_COORDS(22, 16) 270 +QUBIT_COORDS(23, 17) 271 +QUBIT_COORDS(24, 16) 272 +QUBIT_COORDS(25, 17) 273 +QUBIT_COORDS(26, 16) 274 +QUBIT_COORDS(27, 17) 275 +QUBIT_COORDS(28, 16) 276 +QUBIT_COORDS(29, 17) 277 +QUBIT_COORDS(1, 19) 280 +QUBIT_COORDS(2, 18) 281 +QUBIT_COORDS(3, 19) 282 +QUBIT_COORDS(4, 18) 283 +QUBIT_COORDS(5, 19) 284 +QUBIT_COORDS(6, 18) 285 +QUBIT_COORDS(7, 19) 286 +QUBIT_COORDS(8, 18) 287 +QUBIT_COORDS(9, 19) 288 +QUBIT_COORDS(10, 18) 289 +QUBIT_COORDS(11, 19) 290 +QUBIT_COORDS(12, 18) 291 +QUBIT_COORDS(13, 19) 292 +QUBIT_COORDS(14, 18) 293 +QUBIT_COORDS(15, 19) 294 +QUBIT_COORDS(16, 18) 295 +QUBIT_COORDS(17, 19) 296 +QUBIT_COORDS(18, 18) 297 +QUBIT_COORDS(19, 19) 298 +QUBIT_COORDS(20, 18) 299 +QUBIT_COORDS(21, 19) 300 +QUBIT_COORDS(22, 18) 301 +QUBIT_COORDS(23, 19) 302 +QUBIT_COORDS(24, 18) 303 +QUBIT_COORDS(25, 19) 304 +QUBIT_COORDS(26, 18) 305 +QUBIT_COORDS(27, 19) 306 +QUBIT_COORDS(28, 18) 307 +QUBIT_COORDS(29, 19) 308 +QUBIT_COORDS(30, 18) 309 +QUBIT_COORDS(0, 20) 310 +QUBIT_COORDS(1, 21) 311 +QUBIT_COORDS(2, 20) 312 +QUBIT_COORDS(3, 21) 313 +QUBIT_COORDS(4, 20) 314 +QUBIT_COORDS(5, 21) 315 +QUBIT_COORDS(6, 20) 316 +QUBIT_COORDS(7, 21) 317 +QUBIT_COORDS(8, 20) 318 +QUBIT_COORDS(9, 21) 319 +QUBIT_COORDS(10, 20) 320 +QUBIT_COORDS(11, 21) 321 +QUBIT_COORDS(12, 20) 322 +QUBIT_COORDS(13, 21) 323 +QUBIT_COORDS(14, 20) 324 +QUBIT_COORDS(15, 21) 325 +QUBIT_COORDS(16, 20) 326 +QUBIT_COORDS(17, 21) 327 +QUBIT_COORDS(18, 20) 328 +QUBIT_COORDS(19, 21) 329 +QUBIT_COORDS(20, 20) 330 +QUBIT_COORDS(21, 21) 331 +QUBIT_COORDS(22, 20) 332 +QUBIT_COORDS(23, 21) 333 +QUBIT_COORDS(24, 20) 334 +QUBIT_COORDS(25, 21) 335 +QUBIT_COORDS(26, 20) 336 +QUBIT_COORDS(27, 21) 337 +QUBIT_COORDS(28, 20) 338 +QUBIT_COORDS(29, 21) 339 +QUBIT_COORDS(1, 23) 342 +QUBIT_COORDS(2, 22) 343 +QUBIT_COORDS(3, 23) 344 +QUBIT_COORDS(4, 22) 345 +QUBIT_COORDS(5, 23) 346 +QUBIT_COORDS(6, 22) 347 +QUBIT_COORDS(7, 23) 348 +QUBIT_COORDS(8, 22) 349 +QUBIT_COORDS(9, 23) 350 +QUBIT_COORDS(10, 22) 351 +QUBIT_COORDS(11, 23) 352 +QUBIT_COORDS(12, 22) 353 +QUBIT_COORDS(13, 23) 354 +QUBIT_COORDS(14, 22) 355 +QUBIT_COORDS(15, 23) 356 +QUBIT_COORDS(16, 22) 357 +QUBIT_COORDS(17, 23) 358 +QUBIT_COORDS(18, 22) 359 +QUBIT_COORDS(19, 23) 360 +QUBIT_COORDS(20, 22) 361 +QUBIT_COORDS(21, 23) 362 +QUBIT_COORDS(22, 22) 363 +QUBIT_COORDS(23, 23) 364 +QUBIT_COORDS(24, 22) 365 +QUBIT_COORDS(25, 23) 366 +QUBIT_COORDS(26, 22) 367 +QUBIT_COORDS(27, 23) 368 +QUBIT_COORDS(28, 22) 369 +QUBIT_COORDS(29, 23) 370 +QUBIT_COORDS(30, 22) 371 +QUBIT_COORDS(0, 24) 372 +QUBIT_COORDS(1, 25) 373 +QUBIT_COORDS(2, 24) 374 +QUBIT_COORDS(3, 25) 375 +QUBIT_COORDS(4, 24) 376 +QUBIT_COORDS(5, 25) 377 +QUBIT_COORDS(6, 24) 378 +QUBIT_COORDS(7, 25) 379 +QUBIT_COORDS(8, 24) 380 +QUBIT_COORDS(9, 25) 381 +QUBIT_COORDS(10, 24) 382 +QUBIT_COORDS(11, 25) 383 +QUBIT_COORDS(12, 24) 384 +QUBIT_COORDS(13, 25) 385 +QUBIT_COORDS(14, 24) 386 +QUBIT_COORDS(15, 25) 387 +QUBIT_COORDS(16, 24) 388 +QUBIT_COORDS(17, 25) 389 +QUBIT_COORDS(18, 24) 390 +QUBIT_COORDS(19, 25) 391 +QUBIT_COORDS(20, 24) 392 +QUBIT_COORDS(21, 25) 393 +QUBIT_COORDS(22, 24) 394 +QUBIT_COORDS(23, 25) 395 +QUBIT_COORDS(24, 24) 396 +QUBIT_COORDS(25, 25) 397 +QUBIT_COORDS(26, 24) 398 +QUBIT_COORDS(27, 25) 399 +QUBIT_COORDS(28, 24) 400 +QUBIT_COORDS(29, 25) 401 +QUBIT_COORDS(1, 27) 404 +QUBIT_COORDS(2, 26) 405 +QUBIT_COORDS(3, 27) 406 +QUBIT_COORDS(4, 26) 407 +QUBIT_COORDS(5, 27) 408 +QUBIT_COORDS(6, 26) 409 +QUBIT_COORDS(7, 27) 410 +QUBIT_COORDS(8, 26) 411 +QUBIT_COORDS(9, 27) 412 +QUBIT_COORDS(10, 26) 413 +QUBIT_COORDS(11, 27) 414 +QUBIT_COORDS(12, 26) 415 +QUBIT_COORDS(13, 27) 416 +QUBIT_COORDS(14, 26) 417 +QUBIT_COORDS(15, 27) 418 +QUBIT_COORDS(16, 26) 419 +QUBIT_COORDS(17, 27) 420 +QUBIT_COORDS(18, 26) 421 +QUBIT_COORDS(19, 27) 422 +QUBIT_COORDS(20, 26) 423 +QUBIT_COORDS(21, 27) 424 +QUBIT_COORDS(22, 26) 425 +QUBIT_COORDS(23, 27) 426 +QUBIT_COORDS(24, 26) 427 +QUBIT_COORDS(25, 27) 428 +QUBIT_COORDS(26, 26) 429 +QUBIT_COORDS(27, 27) 430 +QUBIT_COORDS(28, 26) 431 +QUBIT_COORDS(29, 27) 432 +QUBIT_COORDS(30, 26) 433 +QUBIT_COORDS(0, 28) 434 +QUBIT_COORDS(1, 29) 435 +QUBIT_COORDS(2, 28) 436 +QUBIT_COORDS(3, 29) 437 +QUBIT_COORDS(4, 28) 438 +QUBIT_COORDS(5, 29) 439 +QUBIT_COORDS(6, 28) 440 +QUBIT_COORDS(7, 29) 441 +QUBIT_COORDS(8, 28) 442 +QUBIT_COORDS(9, 29) 443 +QUBIT_COORDS(10, 28) 444 +QUBIT_COORDS(11, 29) 445 +QUBIT_COORDS(12, 28) 446 +QUBIT_COORDS(13, 29) 447 +QUBIT_COORDS(14, 28) 448 +QUBIT_COORDS(15, 29) 449 +QUBIT_COORDS(16, 28) 450 +QUBIT_COORDS(17, 29) 451 +QUBIT_COORDS(18, 28) 452 +QUBIT_COORDS(19, 29) 453 +QUBIT_COORDS(20, 28) 454 +QUBIT_COORDS(21, 29) 455 +QUBIT_COORDS(22, 28) 456 +QUBIT_COORDS(23, 29) 457 +QUBIT_COORDS(24, 28) 458 +QUBIT_COORDS(25, 29) 459 +QUBIT_COORDS(26, 28) 460 +QUBIT_COORDS(27, 29) 461 +QUBIT_COORDS(28, 28) 462 +QUBIT_COORDS(29, 29) 463 +QUBIT_COORDS(4, 30) 469 +QUBIT_COORDS(8, 30) 473 +QUBIT_COORDS(12, 30) 477 +QUBIT_COORDS(16, 30) 481 +QUBIT_COORDS(20, 30) 485 +QUBIT_COORDS(24, 30) 489 +QUBIT_COORDS(28, 30) 493 +R 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 94 96 98 100 102 104 106 108 110 112 114 116 118 120 122 125 127 129 131 133 135 137 139 141 143 145 147 149 151 153 156 158 160 162 164 166 168 170 172 174 176 178 180 182 184 187 189 191 193 195 197 199 201 203 205 207 209 211 213 215 218 220 222 224 226 228 230 232 234 236 238 240 242 244 246 249 251 253 255 257 259 261 263 265 267 269 271 273 275 277 280 282 284 286 288 290 292 294 296 298 300 302 304 306 308 311 313 315 317 319 321 323 325 327 329 331 333 335 337 339 342 344 346 348 350 352 354 356 358 360 362 364 366 368 370 373 375 377 379 381 383 385 387 389 391 393 395 397 399 401 404 406 408 410 412 414 416 418 420 422 424 426 428 430 432 435 437 439 441 443 445 447 449 451 453 455 457 459 461 463 +X_ERROR(0.001) 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 94 96 98 100 102 104 106 108 110 112 114 116 118 120 122 125 127 129 131 133 135 137 139 141 143 145 147 149 151 153 156 158 160 162 164 166 168 170 172 174 176 178 180 182 184 187 189 191 193 195 197 199 201 203 205 207 209 211 213 215 218 220 222 224 226 228 230 232 234 236 238 240 242 244 246 249 251 253 255 257 259 261 263 265 267 269 271 273 275 277 280 282 284 286 288 290 292 294 296 298 300 302 304 306 308 311 313 315 317 319 321 323 325 327 329 331 333 335 337 339 342 344 346 348 350 352 354 356 358 360 362 364 366 368 370 373 375 377 379 381 383 385 387 389 391 393 395 397 399 401 404 406 408 410 412 414 416 418 420 422 424 426 428 430 432 435 437 439 441 443 445 447 449 451 453 455 457 459 461 463 +R 2 6 10 14 18 22 26 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 95 97 99 101 103 105 107 109 111 113 115 117 119 121 123 124 126 128 130 132 134 136 138 140 142 144 146 148 150 152 157 159 161 163 165 167 169 171 173 175 177 179 181 183 185 186 188 190 192 194 196 198 200 202 204 206 208 210 212 214 219 221 223 225 227 229 231 233 235 237 239 241 243 245 247 248 250 252 254 256 258 260 262 264 266 268 270 272 274 276 281 283 285 287 289 291 293 295 297 299 301 303 305 307 309 310 312 314 316 318 320 322 324 326 328 330 332 334 336 338 343 345 347 349 351 353 355 357 359 361 363 365 367 369 371 372 374 376 378 380 382 384 386 388 390 392 394 396 398 400 405 407 409 411 413 415 417 419 421 423 425 427 429 431 433 434 436 438 440 442 444 446 448 450 452 454 456 458 460 462 469 473 477 481 485 489 493 +X_ERROR(0.001) 2 6 10 14 18 22 26 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 95 97 99 101 103 105 107 109 111 113 115 117 119 121 123 124 126 128 130 132 134 136 138 140 142 144 146 148 150 152 157 159 161 163 165 167 169 171 173 175 177 179 181 183 185 186 188 190 192 194 196 198 200 202 204 206 208 210 212 214 219 221 223 225 227 229 231 233 235 237 239 241 243 245 247 248 250 252 254 256 258 260 262 264 266 268 270 272 274 276 281 283 285 287 289 291 293 295 297 299 301 303 305 307 309 310 312 314 316 318 320 322 324 326 328 330 332 334 336 338 343 345 347 349 351 353 355 357 359 361 363 365 367 369 371 372 374 376 378 380 382 384 386 388 390 392 394 396 398 400 405 407 409 411 413 415 417 419 421 423 425 427 429 431 433 434 436 438 440 442 444 446 448 450 452 454 456 458 460 462 469 473 477 481 485 489 493 +TICK +DEPOLARIZE1(0.001) 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 94 96 98 100 102 104 106 108 110 112 114 116 118 120 122 125 127 129 131 133 135 137 139 141 143 145 147 149 151 153 156 158 160 162 164 166 168 170 172 174 176 178 180 182 184 187 189 191 193 195 197 199 201 203 205 207 209 211 213 215 218 220 222 224 226 228 230 232 234 236 238 240 242 244 246 249 251 253 255 257 259 261 263 265 267 269 271 273 275 277 280 282 284 286 288 290 292 294 296 298 300 302 304 306 308 311 313 315 317 319 321 323 325 327 329 331 333 335 337 339 342 344 346 348 350 352 354 356 358 360 362 364 366 368 370 373 375 377 379 381 383 385 387 389 391 393 395 397 399 401 404 406 408 410 412 414 416 418 420 422 424 426 428 430 432 435 437 439 441 443 445 447 449 451 453 455 457 459 461 463 +H 2 6 10 14 18 22 26 35 39 43 47 51 55 59 64 68 72 76 80 84 88 97 101 105 109 113 117 121 126 130 134 138 142 146 150 159 163 167 171 175 179 183 188 192 196 200 204 208 212 221 225 229 233 237 241 245 250 254 258 262 266 270 274 283 287 291 295 299 303 307 312 316 320 324 328 332 336 345 349 353 357 361 365 369 374 378 382 386 390 394 398 407 411 415 419 423 427 431 436 440 444 448 452 456 460 469 473 477 481 485 489 493 +DEPOLARIZE1(0.001) 2 6 10 14 18 22 26 35 39 43 47 51 55 59 64 68 72 76 80 84 88 97 101 105 109 113 117 121 126 130 134 138 142 146 150 159 163 167 171 175 179 183 188 192 196 200 204 208 212 221 225 229 233 237 241 245 250 254 258 262 266 270 274 283 287 291 295 299 303 307 312 316 320 324 328 332 336 345 349 353 357 361 365 369 374 378 382 386 390 394 398 407 411 415 419 423 427 431 436 440 444 448 452 456 460 469 473 477 481 485 489 493 +TICK +CX 2 3 64 65 126 127 188 189 250 251 312 313 374 375 436 437 35 36 97 98 159 160 221 222 283 284 345 346 407 408 6 7 68 69 130 131 192 193 254 255 316 317 378 379 440 441 39 40 101 102 163 164 225 226 287 288 349 350 411 412 10 11 72 73 134 135 196 197 258 259 320 321 382 383 444 445 43 44 105 106 167 168 229 230 291 292 353 354 415 416 14 15 76 77 138 139 200 201 262 263 324 325 386 387 448 449 47 48 109 110 171 172 233 234 295 296 357 358 419 420 18 19 80 81 142 143 204 205 266 267 328 329 390 391 452 453 51 52 113 114 175 176 237 238 299 300 361 362 423 424 22 23 84 85 146 147 208 209 270 271 332 333 394 395 456 457 55 56 117 118 179 180 241 242 303 304 365 366 427 428 26 27 88 89 150 151 212 213 274 275 336 337 398 399 460 461 59 60 121 122 183 184 245 246 307 308 369 370 431 432 63 62 125 124 187 186 249 248 311 310 373 372 435 434 34 33 96 95 158 157 220 219 282 281 344 343 406 405 67 66 129 128 191 190 253 252 315 314 377 376 439 438 38 37 100 99 162 161 224 223 286 285 348 347 410 409 71 70 133 132 195 194 257 256 319 318 381 380 443 442 42 41 104 103 166 165 228 227 290 289 352 351 414 413 75 74 137 136 199 198 261 260 323 322 385 384 447 446 46 45 108 107 170 169 232 231 294 293 356 355 418 417 79 78 141 140 203 202 265 264 327 326 389 388 451 450 50 49 112 111 174 173 236 235 298 297 360 359 422 421 83 82 145 144 207 206 269 268 331 330 393 392 455 454 54 53 116 115 178 177 240 239 302 301 364 363 426 425 87 86 149 148 211 210 273 272 335 334 397 396 459 458 58 57 120 119 182 181 244 243 306 305 368 367 430 429 91 90 153 152 215 214 277 276 339 338 401 400 463 462 +DEPOLARIZE2(0.001) 2 3 64 65 126 127 188 189 250 251 312 313 374 375 436 437 35 36 97 98 159 160 221 222 283 284 345 346 407 408 6 7 68 69 130 131 192 193 254 255 316 317 378 379 440 441 39 40 101 102 163 164 225 226 287 288 349 350 411 412 10 11 72 73 134 135 196 197 258 259 320 321 382 383 444 445 43 44 105 106 167 168 229 230 291 292 353 354 415 416 14 15 76 77 138 139 200 201 262 263 324 325 386 387 448 449 47 48 109 110 171 172 233 234 295 296 357 358 419 420 18 19 80 81 142 143 204 205 266 267 328 329 390 391 452 453 51 52 113 114 175 176 237 238 299 300 361 362 423 424 22 23 84 85 146 147 208 209 270 271 332 333 394 395 456 457 55 56 117 118 179 180 241 242 303 304 365 366 427 428 26 27 88 89 150 151 212 213 274 275 336 337 398 399 460 461 59 60 121 122 183 184 245 246 307 308 369 370 431 432 63 62 125 124 187 186 249 248 311 310 373 372 435 434 34 33 96 95 158 157 220 219 282 281 344 343 406 405 67 66 129 128 191 190 253 252 315 314 377 376 439 438 38 37 100 99 162 161 224 223 286 285 348 347 410 409 71 70 133 132 195 194 257 256 319 318 381 380 443 442 42 41 104 103 166 165 228 227 290 289 352 351 414 413 75 74 137 136 199 198 261 260 323 322 385 384 447 446 46 45 108 107 170 169 232 231 294 293 356 355 418 417 79 78 141 140 203 202 265 264 327 326 389 388 451 450 50 49 112 111 174 173 236 235 298 297 360 359 422 421 83 82 145 144 207 206 269 268 331 330 393 392 455 454 54 53 116 115 178 177 240 239 302 301 364 363 426 425 87 86 149 148 211 210 273 272 335 334 397 396 459 458 58 57 120 119 182 181 244 243 306 305 368 367 430 429 91 90 153 152 215 214 277 276 339 338 401 400 463 462 +TICK +CX 2 1 64 63 126 125 188 187 250 249 312 311 374 373 436 435 35 34 97 96 159 158 221 220 283 282 345 344 407 406 6 5 68 67 130 129 192 191 254 253 316 315 378 377 440 439 39 38 101 100 163 162 225 224 287 286 349 348 411 410 10 9 72 71 134 133 196 195 258 257 320 319 382 381 444 443 43 42 105 104 167 166 229 228 291 290 353 352 415 414 14 13 76 75 138 137 200 199 262 261 324 323 386 385 448 447 47 46 109 108 171 170 233 232 295 294 357 356 419 418 18 17 80 79 142 141 204 203 266 265 328 327 390 389 452 451 51 50 113 112 175 174 237 236 299 298 361 360 423 422 22 21 84 83 146 145 208 207 270 269 332 331 394 393 456 455 55 54 117 116 179 178 241 240 303 302 365 364 427 426 26 25 88 87 150 149 212 211 274 273 336 335 398 397 460 459 59 58 121 120 183 182 245 244 307 306 369 368 431 430 32 62 94 124 156 186 218 248 280 310 342 372 404 434 3 33 65 95 127 157 189 219 251 281 313 343 375 405 36 66 98 128 160 190 222 252 284 314 346 376 408 438 7 37 69 99 131 161 193 223 255 285 317 347 379 409 40 70 102 132 164 194 226 256 288 318 350 380 412 442 11 41 73 103 135 165 197 227 259 289 321 351 383 413 44 74 106 136 168 198 230 260 292 322 354 384 416 446 15 45 77 107 139 169 201 231 263 293 325 355 387 417 48 78 110 140 172 202 234 264 296 326 358 388 420 450 19 49 81 111 143 173 205 235 267 297 329 359 391 421 52 82 114 144 176 206 238 268 300 330 362 392 424 454 23 53 85 115 147 177 209 239 271 301 333 363 395 425 56 86 118 148 180 210 242 272 304 334 366 396 428 458 27 57 89 119 151 181 213 243 275 305 337 367 399 429 60 90 122 152 184 214 246 276 308 338 370 400 432 462 +DEPOLARIZE2(0.001) 2 1 64 63 126 125 188 187 250 249 312 311 374 373 436 435 35 34 97 96 159 158 221 220 283 282 345 344 407 406 6 5 68 67 130 129 192 191 254 253 316 315 378 377 440 439 39 38 101 100 163 162 225 224 287 286 349 348 411 410 10 9 72 71 134 133 196 195 258 257 320 319 382 381 444 443 43 42 105 104 167 166 229 228 291 290 353 352 415 414 14 13 76 75 138 137 200 199 262 261 324 323 386 385 448 447 47 46 109 108 171 170 233 232 295 294 357 356 419 418 18 17 80 79 142 141 204 203 266 265 328 327 390 389 452 451 51 50 113 112 175 174 237 236 299 298 361 360 423 422 22 21 84 83 146 145 208 207 270 269 332 331 394 393 456 455 55 54 117 116 179 178 241 240 303 302 365 364 427 426 26 25 88 87 150 149 212 211 274 273 336 335 398 397 460 459 59 58 121 120 183 182 245 244 307 306 369 368 431 430 32 62 94 124 156 186 218 248 280 310 342 372 404 434 3 33 65 95 127 157 189 219 251 281 313 343 375 405 36 66 98 128 160 190 222 252 284 314 346 376 408 438 7 37 69 99 131 161 193 223 255 285 317 347 379 409 40 70 102 132 164 194 226 256 288 318 350 380 412 442 11 41 73 103 135 165 197 227 259 289 321 351 383 413 44 74 106 136 168 198 230 260 292 322 354 384 416 446 15 45 77 107 139 169 201 231 263 293 325 355 387 417 48 78 110 140 172 202 234 264 296 326 358 388 420 450 19 49 81 111 143 173 205 235 267 297 329 359 391 421 52 82 114 144 176 206 238 268 300 330 362 392 424 454 23 53 85 115 147 177 209 239 271 301 333 363 395 425 56 86 118 148 180 210 242 272 304 334 366 396 428 458 27 57 89 119 151 181 213 243 275 305 337 367 399 429 60 90 122 152 184 214 246 276 308 338 370 400 432 462 +TICK +CX 64 34 126 96 188 158 250 220 312 282 374 344 436 406 35 5 97 67 159 129 221 191 283 253 345 315 407 377 469 439 68 38 130 100 192 162 254 224 316 286 378 348 440 410 39 9 101 71 163 133 225 195 287 257 349 319 411 381 473 443 72 42 134 104 196 166 258 228 320 290 382 352 444 414 43 13 105 75 167 137 229 199 291 261 353 323 415 385 477 447 76 46 138 108 200 170 262 232 324 294 386 356 448 418 47 17 109 79 171 141 233 203 295 265 357 327 419 389 481 451 80 50 142 112 204 174 266 236 328 298 390 360 452 422 51 21 113 83 175 145 237 207 299 269 361 331 423 393 485 455 84 54 146 116 208 178 270 240 332 302 394 364 456 426 55 25 117 87 179 149 241 211 303 273 365 335 427 397 489 459 88 58 150 120 212 182 274 244 336 306 398 368 460 430 59 29 121 91 183 153 245 215 307 277 369 339 431 401 493 463 32 33 94 95 156 157 218 219 280 281 342 343 404 405 65 66 127 128 189 190 251 252 313 314 375 376 437 438 36 37 98 99 160 161 222 223 284 285 346 347 408 409 69 70 131 132 193 194 255 256 317 318 379 380 441 442 40 41 102 103 164 165 226 227 288 289 350 351 412 413 73 74 135 136 197 198 259 260 321 322 383 384 445 446 44 45 106 107 168 169 230 231 292 293 354 355 416 417 77 78 139 140 201 202 263 264 325 326 387 388 449 450 48 49 110 111 172 173 234 235 296 297 358 359 420 421 81 82 143 144 205 206 267 268 329 330 391 392 453 454 52 53 114 115 176 177 238 239 300 301 362 363 424 425 85 86 147 148 209 210 271 272 333 334 395 396 457 458 56 57 118 119 180 181 242 243 304 305 366 367 428 429 89 90 151 152 213 214 275 276 337 338 399 400 461 462 60 61 122 123 184 185 246 247 308 309 370 371 432 433 +DEPOLARIZE2(0.001) 64 34 126 96 188 158 250 220 312 282 374 344 436 406 35 5 97 67 159 129 221 191 283 253 345 315 407 377 469 439 68 38 130 100 192 162 254 224 316 286 378 348 440 410 39 9 101 71 163 133 225 195 287 257 349 319 411 381 473 443 72 42 134 104 196 166 258 228 320 290 382 352 444 414 43 13 105 75 167 137 229 199 291 261 353 323 415 385 477 447 76 46 138 108 200 170 262 232 324 294 386 356 448 418 47 17 109 79 171 141 233 203 295 265 357 327 419 389 481 451 80 50 142 112 204 174 266 236 328 298 390 360 452 422 51 21 113 83 175 145 237 207 299 269 361 331 423 393 485 455 84 54 146 116 208 178 270 240 332 302 394 364 456 426 55 25 117 87 179 149 241 211 303 273 365 335 427 397 489 459 88 58 150 120 212 182 274 244 336 306 398 368 460 430 59 29 121 91 183 153 245 215 307 277 369 339 431 401 493 463 32 33 94 95 156 157 218 219 280 281 342 343 404 405 65 66 127 128 189 190 251 252 313 314 375 376 437 438 36 37 98 99 160 161 222 223 284 285 346 347 408 409 69 70 131 132 193 194 255 256 317 318 379 380 441 442 40 41 102 103 164 165 226 227 288 289 350 351 412 413 73 74 135 136 197 198 259 260 321 322 383 384 445 446 44 45 106 107 168 169 230 231 292 293 354 355 416 417 77 78 139 140 201 202 263 264 325 326 387 388 449 450 48 49 110 111 172 173 234 235 296 297 358 359 420 421 81 82 143 144 205 206 267 268 329 330 391 392 453 454 52 53 114 115 176 177 238 239 300 301 362 363 424 425 85 86 147 148 209 210 271 272 333 334 395 396 457 458 56 57 118 119 180 181 242 243 304 305 366 367 428 429 89 90 151 152 213 214 275 276 337 338 399 400 461 462 60 61 122 123 184 185 246 247 308 309 370 371 432 433 +TICK +CX 64 32 126 94 188 156 250 218 312 280 374 342 436 404 35 3 97 65 159 127 221 189 283 251 345 313 407 375 469 437 68 36 130 98 192 160 254 222 316 284 378 346 440 408 39 7 101 69 163 131 225 193 287 255 349 317 411 379 473 441 72 40 134 102 196 164 258 226 320 288 382 350 444 412 43 11 105 73 167 135 229 197 291 259 353 321 415 383 477 445 76 44 138 106 200 168 262 230 324 292 386 354 448 416 47 15 109 77 171 139 233 201 295 263 357 325 419 387 481 449 80 48 142 110 204 172 266 234 328 296 390 358 452 420 51 19 113 81 175 143 237 205 299 267 361 329 423 391 485 453 84 52 146 114 208 176 270 238 332 300 394 362 456 424 55 23 117 85 179 147 241 209 303 271 365 333 427 395 489 457 88 56 150 118 212 180 274 242 336 304 398 366 460 428 59 27 121 89 183 151 245 213 307 275 369 337 431 399 493 461 1 33 63 95 125 157 187 219 249 281 311 343 373 405 34 66 96 128 158 190 220 252 282 314 344 376 406 438 5 37 67 99 129 161 191 223 253 285 315 347 377 409 38 70 100 132 162 194 224 256 286 318 348 380 410 442 9 41 71 103 133 165 195 227 257 289 319 351 381 413 42 74 104 136 166 198 228 260 290 322 352 384 414 446 13 45 75 107 137 169 199 231 261 293 323 355 385 417 46 78 108 140 170 202 232 264 294 326 356 388 418 450 17 49 79 111 141 173 203 235 265 297 327 359 389 421 50 82 112 144 174 206 236 268 298 330 360 392 422 454 21 53 83 115 145 177 207 239 269 301 331 363 393 425 54 86 116 148 178 210 240 272 302 334 364 396 426 458 25 57 87 119 149 181 211 243 273 305 335 367 397 429 58 90 120 152 182 214 244 276 306 338 368 400 430 462 29 61 91 123 153 185 215 247 277 309 339 371 401 433 +DEPOLARIZE2(0.001) 64 32 126 94 188 156 250 218 312 280 374 342 436 404 35 3 97 65 159 127 221 189 283 251 345 313 407 375 469 437 68 36 130 98 192 160 254 222 316 284 378 346 440 408 39 7 101 69 163 131 225 193 287 255 349 317 411 379 473 441 72 40 134 102 196 164 258 226 320 288 382 350 444 412 43 11 105 73 167 135 229 197 291 259 353 321 415 383 477 445 76 44 138 106 200 168 262 230 324 292 386 354 448 416 47 15 109 77 171 139 233 201 295 263 357 325 419 387 481 449 80 48 142 110 204 172 266 234 328 296 390 358 452 420 51 19 113 81 175 143 237 205 299 267 361 329 423 391 485 453 84 52 146 114 208 176 270 238 332 300 394 362 456 424 55 23 117 85 179 147 241 209 303 271 365 333 427 395 489 457 88 56 150 118 212 180 274 242 336 304 398 366 460 428 59 27 121 89 183 151 245 213 307 275 369 337 431 399 493 461 1 33 63 95 125 157 187 219 249 281 311 343 373 405 34 66 96 128 158 190 220 252 282 314 344 376 406 438 5 37 67 99 129 161 191 223 253 285 315 347 377 409 38 70 100 132 162 194 224 256 286 318 348 380 410 442 9 41 71 103 133 165 195 227 257 289 319 351 381 413 42 74 104 136 166 198 228 260 290 322 352 384 414 446 13 45 75 107 137 169 199 231 261 293 323 355 385 417 46 78 108 140 170 202 232 264 294 326 356 388 418 450 17 49 79 111 141 173 203 235 265 297 327 359 389 421 50 82 112 144 174 206 236 268 298 330 360 392 422 454 21 53 83 115 145 177 207 239 269 301 331 363 393 425 54 86 116 148 178 210 240 272 302 334 364 396 426 458 25 57 87 119 149 181 211 243 273 305 335 367 397 429 58 90 120 152 182 214 244 276 306 338 368 400 430 462 29 61 91 123 153 185 215 247 277 309 339 371 401 433 +TICK +H 2 6 10 14 18 22 26 35 39 43 47 51 55 59 64 68 72 76 80 84 88 97 101 105 109 113 117 121 126 130 134 138 142 146 150 159 163 167 171 175 179 183 188 192 196 200 204 208 212 221 225 229 233 237 241 245 250 254 258 262 266 270 274 283 287 291 295 299 303 307 312 316 320 324 328 332 336 345 349 353 357 361 365 369 374 378 382 386 390 394 398 407 411 415 419 423 427 431 436 440 444 448 452 456 460 469 473 477 481 485 489 493 +DEPOLARIZE1(0.001) 2 6 10 14 18 22 26 35 39 43 47 51 55 59 64 68 72 76 80 84 88 97 101 105 109 113 117 121 126 130 134 138 142 146 150 159 163 167 171 175 179 183 188 192 196 200 204 208 212 221 225 229 233 237 241 245 250 254 258 262 266 270 274 283 287 291 295 299 303 307 312 316 320 324 328 332 336 345 349 353 357 361 365 369 374 378 382 386 390 394 398 407 411 415 419 423 427 431 436 440 444 448 452 456 460 469 473 477 481 485 489 493 +TICK +X_ERROR(0.001) 2 6 10 14 18 22 26 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 95 97 99 101 103 105 107 109 111 113 115 117 119 121 123 124 126 128 130 132 134 136 138 140 142 144 146 148 150 152 157 159 161 163 165 167 169 171 173 175 177 179 181 183 185 186 188 190 192 194 196 198 200 202 204 206 208 210 212 214 219 221 223 225 227 229 231 233 235 237 239 241 243 245 247 248 250 252 254 256 258 260 262 264 266 268 270 272 274 276 281 283 285 287 289 291 293 295 297 299 301 303 305 307 309 310 312 314 316 318 320 322 324 326 328 330 332 334 336 338 343 345 347 349 351 353 355 357 359 361 363 365 367 369 371 372 374 376 378 380 382 384 386 388 390 392 394 396 398 400 405 407 409 411 413 415 417 419 421 423 425 427 429 431 433 434 436 438 440 442 444 446 448 450 452 454 456 458 460 462 469 473 477 481 485 489 493 +MR 2 6 10 14 18 22 26 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 95 97 99 101 103 105 107 109 111 113 115 117 119 121 123 124 126 128 130 132 134 136 138 140 142 144 146 148 150 152 157 159 161 163 165 167 169 171 173 175 177 179 181 183 185 186 188 190 192 194 196 198 200 202 204 206 208 210 212 214 219 221 223 225 227 229 231 233 235 237 239 241 243 245 247 248 250 252 254 256 258 260 262 264 266 268 270 272 274 276 281 283 285 287 289 291 293 295 297 299 301 303 305 307 309 310 312 314 316 318 320 322 324 326 328 330 332 334 336 338 343 345 347 349 351 353 355 357 359 361 363 365 367 369 371 372 374 376 378 380 382 384 386 388 390 392 394 396 398 400 405 407 409 411 413 415 417 419 421 423 425 427 429 431 433 434 436 438 440 442 444 446 448 450 452 454 456 458 460 462 469 473 477 481 485 489 493 +X_ERROR(0.001) 2 6 10 14 18 22 26 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 95 97 99 101 103 105 107 109 111 113 115 117 119 121 123 124 126 128 130 132 134 136 138 140 142 144 146 148 150 152 157 159 161 163 165 167 169 171 173 175 177 179 181 183 185 186 188 190 192 194 196 198 200 202 204 206 208 210 212 214 219 221 223 225 227 229 231 233 235 237 239 241 243 245 247 248 250 252 254 256 258 260 262 264 266 268 270 272 274 276 281 283 285 287 289 291 293 295 297 299 301 303 305 307 309 310 312 314 316 318 320 322 324 326 328 330 332 334 336 338 343 345 347 349 351 353 355 357 359 361 363 365 367 369 371 372 374 376 378 380 382 384 386 388 390 392 394 396 398 400 405 407 409 411 413 415 417 419 421 423 425 427 429 431 433 434 436 438 440 442 444 446 448 450 452 454 456 458 460 462 469 473 477 481 485 489 493 +DETECTOR(0, 4, 0) rec[-202] +DETECTOR(0, 8, 0) rec[-172] +DETECTOR(0, 12, 0) rec[-142] +DETECTOR(0, 16, 0) rec[-112] +DETECTOR(0, 20, 0) rec[-82] +DETECTOR(0, 24, 0) rec[-52] +DETECTOR(0, 28, 0) rec[-22] +DETECTOR(2, 2, 0) rec[-217] +DETECTOR(2, 6, 0) rec[-187] +DETECTOR(2, 10, 0) rec[-157] +DETECTOR(2, 14, 0) rec[-127] +DETECTOR(2, 18, 0) rec[-97] +DETECTOR(2, 22, 0) rec[-67] +DETECTOR(2, 26, 0) rec[-37] +DETECTOR(4, 4, 0) rec[-200] +DETECTOR(4, 8, 0) rec[-170] +DETECTOR(4, 12, 0) rec[-140] +DETECTOR(4, 16, 0) rec[-110] +DETECTOR(4, 20, 0) rec[-80] +DETECTOR(4, 24, 0) rec[-50] +DETECTOR(4, 28, 0) rec[-20] +DETECTOR(6, 2, 0) rec[-215] +DETECTOR(6, 6, 0) rec[-185] +DETECTOR(6, 10, 0) rec[-155] +DETECTOR(6, 14, 0) rec[-125] +DETECTOR(6, 18, 0) rec[-95] +DETECTOR(6, 22, 0) rec[-65] +DETECTOR(6, 26, 0) rec[-35] +DETECTOR(8, 4, 0) rec[-198] +DETECTOR(8, 8, 0) rec[-168] +DETECTOR(8, 12, 0) rec[-138] +DETECTOR(8, 16, 0) rec[-108] +DETECTOR(8, 20, 0) rec[-78] +DETECTOR(8, 24, 0) rec[-48] +DETECTOR(8, 28, 0) rec[-18] +DETECTOR(10, 2, 0) rec[-213] +DETECTOR(10, 6, 0) rec[-183] +DETECTOR(10, 10, 0) rec[-153] +DETECTOR(10, 14, 0) rec[-123] +DETECTOR(10, 18, 0) rec[-93] +DETECTOR(10, 22, 0) rec[-63] +DETECTOR(10, 26, 0) rec[-33] +DETECTOR(12, 4, 0) rec[-196] +DETECTOR(12, 8, 0) rec[-166] +DETECTOR(12, 12, 0) rec[-136] +DETECTOR(12, 16, 0) rec[-106] +DETECTOR(12, 20, 0) rec[-76] +DETECTOR(12, 24, 0) rec[-46] +DETECTOR(12, 28, 0) rec[-16] +DETECTOR(14, 2, 0) rec[-211] +DETECTOR(14, 6, 0) rec[-181] +DETECTOR(14, 10, 0) rec[-151] +DETECTOR(14, 14, 0) rec[-121] +DETECTOR(14, 18, 0) rec[-91] +DETECTOR(14, 22, 0) rec[-61] +DETECTOR(14, 26, 0) rec[-31] +DETECTOR(16, 4, 0) rec[-194] +DETECTOR(16, 8, 0) rec[-164] +DETECTOR(16, 12, 0) rec[-134] +DETECTOR(16, 16, 0) rec[-104] +DETECTOR(16, 20, 0) rec[-74] +DETECTOR(16, 24, 0) rec[-44] +DETECTOR(16, 28, 0) rec[-14] +DETECTOR(18, 2, 0) rec[-209] +DETECTOR(18, 6, 0) rec[-179] +DETECTOR(18, 10, 0) rec[-149] +DETECTOR(18, 14, 0) rec[-119] +DETECTOR(18, 18, 0) rec[-89] +DETECTOR(18, 22, 0) rec[-59] +DETECTOR(18, 26, 0) rec[-29] +DETECTOR(20, 4, 0) rec[-192] +DETECTOR(20, 8, 0) rec[-162] +DETECTOR(20, 12, 0) rec[-132] +DETECTOR(20, 16, 0) rec[-102] +DETECTOR(20, 20, 0) rec[-72] +DETECTOR(20, 24, 0) rec[-42] +DETECTOR(20, 28, 0) rec[-12] +DETECTOR(22, 2, 0) rec[-207] +DETECTOR(22, 6, 0) rec[-177] +DETECTOR(22, 10, 0) rec[-147] +DETECTOR(22, 14, 0) rec[-117] +DETECTOR(22, 18, 0) rec[-87] +DETECTOR(22, 22, 0) rec[-57] +DETECTOR(22, 26, 0) rec[-27] +DETECTOR(24, 4, 0) rec[-190] +DETECTOR(24, 8, 0) rec[-160] +DETECTOR(24, 12, 0) rec[-130] +DETECTOR(24, 16, 0) rec[-100] +DETECTOR(24, 20, 0) rec[-70] +DETECTOR(24, 24, 0) rec[-40] +DETECTOR(24, 28, 0) rec[-10] +DETECTOR(26, 2, 0) rec[-205] +DETECTOR(26, 6, 0) rec[-175] +DETECTOR(26, 10, 0) rec[-145] +DETECTOR(26, 14, 0) rec[-115] +DETECTOR(26, 18, 0) rec[-85] +DETECTOR(26, 22, 0) rec[-55] +DETECTOR(26, 26, 0) rec[-25] +DETECTOR(28, 4, 0) rec[-188] +DETECTOR(28, 8, 0) rec[-158] +DETECTOR(28, 12, 0) rec[-128] +DETECTOR(28, 16, 0) rec[-98] +DETECTOR(28, 20, 0) rec[-68] +DETECTOR(28, 24, 0) rec[-38] +DETECTOR(28, 28, 0) rec[-8] +DETECTOR(30, 2, 0) rec[-203] +DETECTOR(30, 6, 0) rec[-173] +DETECTOR(30, 10, 0) rec[-143] +DETECTOR(30, 14, 0) rec[-113] +DETECTOR(30, 18, 0) rec[-83] +DETECTOR(30, 22, 0) rec[-53] +DETECTOR(30, 26, 0) rec[-23] +REPEAT 14 { + TICK + DEPOLARIZE1(0.001) 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 94 96 98 100 102 104 106 108 110 112 114 116 118 120 122 125 127 129 131 133 135 137 139 141 143 145 147 149 151 153 156 158 160 162 164 166 168 170 172 174 176 178 180 182 184 187 189 191 193 195 197 199 201 203 205 207 209 211 213 215 218 220 222 224 226 228 230 232 234 236 238 240 242 244 246 249 251 253 255 257 259 261 263 265 267 269 271 273 275 277 280 282 284 286 288 290 292 294 296 298 300 302 304 306 308 311 313 315 317 319 321 323 325 327 329 331 333 335 337 339 342 344 346 348 350 352 354 356 358 360 362 364 366 368 370 373 375 377 379 381 383 385 387 389 391 393 395 397 399 401 404 406 408 410 412 414 416 418 420 422 424 426 428 430 432 435 437 439 441 443 445 447 449 451 453 455 457 459 461 463 + H 2 6 10 14 18 22 26 35 39 43 47 51 55 59 64 68 72 76 80 84 88 97 101 105 109 113 117 121 126 130 134 138 142 146 150 159 163 167 171 175 179 183 188 192 196 200 204 208 212 221 225 229 233 237 241 245 250 254 258 262 266 270 274 283 287 291 295 299 303 307 312 316 320 324 328 332 336 345 349 353 357 361 365 369 374 378 382 386 390 394 398 407 411 415 419 423 427 431 436 440 444 448 452 456 460 469 473 477 481 485 489 493 + DEPOLARIZE1(0.001) 2 6 10 14 18 22 26 35 39 43 47 51 55 59 64 68 72 76 80 84 88 97 101 105 109 113 117 121 126 130 134 138 142 146 150 159 163 167 171 175 179 183 188 192 196 200 204 208 212 221 225 229 233 237 241 245 250 254 258 262 266 270 274 283 287 291 295 299 303 307 312 316 320 324 328 332 336 345 349 353 357 361 365 369 374 378 382 386 390 394 398 407 411 415 419 423 427 431 436 440 444 448 452 456 460 469 473 477 481 485 489 493 + TICK + CX 2 3 64 65 126 127 188 189 250 251 312 313 374 375 436 437 35 36 97 98 159 160 221 222 283 284 345 346 407 408 6 7 68 69 130 131 192 193 254 255 316 317 378 379 440 441 39 40 101 102 163 164 225 226 287 288 349 350 411 412 10 11 72 73 134 135 196 197 258 259 320 321 382 383 444 445 43 44 105 106 167 168 229 230 291 292 353 354 415 416 14 15 76 77 138 139 200 201 262 263 324 325 386 387 448 449 47 48 109 110 171 172 233 234 295 296 357 358 419 420 18 19 80 81 142 143 204 205 266 267 328 329 390 391 452 453 51 52 113 114 175 176 237 238 299 300 361 362 423 424 22 23 84 85 146 147 208 209 270 271 332 333 394 395 456 457 55 56 117 118 179 180 241 242 303 304 365 366 427 428 26 27 88 89 150 151 212 213 274 275 336 337 398 399 460 461 59 60 121 122 183 184 245 246 307 308 369 370 431 432 63 62 125 124 187 186 249 248 311 310 373 372 435 434 34 33 96 95 158 157 220 219 282 281 344 343 406 405 67 66 129 128 191 190 253 252 315 314 377 376 439 438 38 37 100 99 162 161 224 223 286 285 348 347 410 409 71 70 133 132 195 194 257 256 319 318 381 380 443 442 42 41 104 103 166 165 228 227 290 289 352 351 414 413 75 74 137 136 199 198 261 260 323 322 385 384 447 446 46 45 108 107 170 169 232 231 294 293 356 355 418 417 79 78 141 140 203 202 265 264 327 326 389 388 451 450 50 49 112 111 174 173 236 235 298 297 360 359 422 421 83 82 145 144 207 206 269 268 331 330 393 392 455 454 54 53 116 115 178 177 240 239 302 301 364 363 426 425 87 86 149 148 211 210 273 272 335 334 397 396 459 458 58 57 120 119 182 181 244 243 306 305 368 367 430 429 91 90 153 152 215 214 277 276 339 338 401 400 463 462 + DEPOLARIZE2(0.001) 2 3 64 65 126 127 188 189 250 251 312 313 374 375 436 437 35 36 97 98 159 160 221 222 283 284 345 346 407 408 6 7 68 69 130 131 192 193 254 255 316 317 378 379 440 441 39 40 101 102 163 164 225 226 287 288 349 350 411 412 10 11 72 73 134 135 196 197 258 259 320 321 382 383 444 445 43 44 105 106 167 168 229 230 291 292 353 354 415 416 14 15 76 77 138 139 200 201 262 263 324 325 386 387 448 449 47 48 109 110 171 172 233 234 295 296 357 358 419 420 18 19 80 81 142 143 204 205 266 267 328 329 390 391 452 453 51 52 113 114 175 176 237 238 299 300 361 362 423 424 22 23 84 85 146 147 208 209 270 271 332 333 394 395 456 457 55 56 117 118 179 180 241 242 303 304 365 366 427 428 26 27 88 89 150 151 212 213 274 275 336 337 398 399 460 461 59 60 121 122 183 184 245 246 307 308 369 370 431 432 63 62 125 124 187 186 249 248 311 310 373 372 435 434 34 33 96 95 158 157 220 219 282 281 344 343 406 405 67 66 129 128 191 190 253 252 315 314 377 376 439 438 38 37 100 99 162 161 224 223 286 285 348 347 410 409 71 70 133 132 195 194 257 256 319 318 381 380 443 442 42 41 104 103 166 165 228 227 290 289 352 351 414 413 75 74 137 136 199 198 261 260 323 322 385 384 447 446 46 45 108 107 170 169 232 231 294 293 356 355 418 417 79 78 141 140 203 202 265 264 327 326 389 388 451 450 50 49 112 111 174 173 236 235 298 297 360 359 422 421 83 82 145 144 207 206 269 268 331 330 393 392 455 454 54 53 116 115 178 177 240 239 302 301 364 363 426 425 87 86 149 148 211 210 273 272 335 334 397 396 459 458 58 57 120 119 182 181 244 243 306 305 368 367 430 429 91 90 153 152 215 214 277 276 339 338 401 400 463 462 + TICK + CX 2 1 64 63 126 125 188 187 250 249 312 311 374 373 436 435 35 34 97 96 159 158 221 220 283 282 345 344 407 406 6 5 68 67 130 129 192 191 254 253 316 315 378 377 440 439 39 38 101 100 163 162 225 224 287 286 349 348 411 410 10 9 72 71 134 133 196 195 258 257 320 319 382 381 444 443 43 42 105 104 167 166 229 228 291 290 353 352 415 414 14 13 76 75 138 137 200 199 262 261 324 323 386 385 448 447 47 46 109 108 171 170 233 232 295 294 357 356 419 418 18 17 80 79 142 141 204 203 266 265 328 327 390 389 452 451 51 50 113 112 175 174 237 236 299 298 361 360 423 422 22 21 84 83 146 145 208 207 270 269 332 331 394 393 456 455 55 54 117 116 179 178 241 240 303 302 365 364 427 426 26 25 88 87 150 149 212 211 274 273 336 335 398 397 460 459 59 58 121 120 183 182 245 244 307 306 369 368 431 430 32 62 94 124 156 186 218 248 280 310 342 372 404 434 3 33 65 95 127 157 189 219 251 281 313 343 375 405 36 66 98 128 160 190 222 252 284 314 346 376 408 438 7 37 69 99 131 161 193 223 255 285 317 347 379 409 40 70 102 132 164 194 226 256 288 318 350 380 412 442 11 41 73 103 135 165 197 227 259 289 321 351 383 413 44 74 106 136 168 198 230 260 292 322 354 384 416 446 15 45 77 107 139 169 201 231 263 293 325 355 387 417 48 78 110 140 172 202 234 264 296 326 358 388 420 450 19 49 81 111 143 173 205 235 267 297 329 359 391 421 52 82 114 144 176 206 238 268 300 330 362 392 424 454 23 53 85 115 147 177 209 239 271 301 333 363 395 425 56 86 118 148 180 210 242 272 304 334 366 396 428 458 27 57 89 119 151 181 213 243 275 305 337 367 399 429 60 90 122 152 184 214 246 276 308 338 370 400 432 462 + DEPOLARIZE2(0.001) 2 1 64 63 126 125 188 187 250 249 312 311 374 373 436 435 35 34 97 96 159 158 221 220 283 282 345 344 407 406 6 5 68 67 130 129 192 191 254 253 316 315 378 377 440 439 39 38 101 100 163 162 225 224 287 286 349 348 411 410 10 9 72 71 134 133 196 195 258 257 320 319 382 381 444 443 43 42 105 104 167 166 229 228 291 290 353 352 415 414 14 13 76 75 138 137 200 199 262 261 324 323 386 385 448 447 47 46 109 108 171 170 233 232 295 294 357 356 419 418 18 17 80 79 142 141 204 203 266 265 328 327 390 389 452 451 51 50 113 112 175 174 237 236 299 298 361 360 423 422 22 21 84 83 146 145 208 207 270 269 332 331 394 393 456 455 55 54 117 116 179 178 241 240 303 302 365 364 427 426 26 25 88 87 150 149 212 211 274 273 336 335 398 397 460 459 59 58 121 120 183 182 245 244 307 306 369 368 431 430 32 62 94 124 156 186 218 248 280 310 342 372 404 434 3 33 65 95 127 157 189 219 251 281 313 343 375 405 36 66 98 128 160 190 222 252 284 314 346 376 408 438 7 37 69 99 131 161 193 223 255 285 317 347 379 409 40 70 102 132 164 194 226 256 288 318 350 380 412 442 11 41 73 103 135 165 197 227 259 289 321 351 383 413 44 74 106 136 168 198 230 260 292 322 354 384 416 446 15 45 77 107 139 169 201 231 263 293 325 355 387 417 48 78 110 140 172 202 234 264 296 326 358 388 420 450 19 49 81 111 143 173 205 235 267 297 329 359 391 421 52 82 114 144 176 206 238 268 300 330 362 392 424 454 23 53 85 115 147 177 209 239 271 301 333 363 395 425 56 86 118 148 180 210 242 272 304 334 366 396 428 458 27 57 89 119 151 181 213 243 275 305 337 367 399 429 60 90 122 152 184 214 246 276 308 338 370 400 432 462 + TICK + CX 64 34 126 96 188 158 250 220 312 282 374 344 436 406 35 5 97 67 159 129 221 191 283 253 345 315 407 377 469 439 68 38 130 100 192 162 254 224 316 286 378 348 440 410 39 9 101 71 163 133 225 195 287 257 349 319 411 381 473 443 72 42 134 104 196 166 258 228 320 290 382 352 444 414 43 13 105 75 167 137 229 199 291 261 353 323 415 385 477 447 76 46 138 108 200 170 262 232 324 294 386 356 448 418 47 17 109 79 171 141 233 203 295 265 357 327 419 389 481 451 80 50 142 112 204 174 266 236 328 298 390 360 452 422 51 21 113 83 175 145 237 207 299 269 361 331 423 393 485 455 84 54 146 116 208 178 270 240 332 302 394 364 456 426 55 25 117 87 179 149 241 211 303 273 365 335 427 397 489 459 88 58 150 120 212 182 274 244 336 306 398 368 460 430 59 29 121 91 183 153 245 215 307 277 369 339 431 401 493 463 32 33 94 95 156 157 218 219 280 281 342 343 404 405 65 66 127 128 189 190 251 252 313 314 375 376 437 438 36 37 98 99 160 161 222 223 284 285 346 347 408 409 69 70 131 132 193 194 255 256 317 318 379 380 441 442 40 41 102 103 164 165 226 227 288 289 350 351 412 413 73 74 135 136 197 198 259 260 321 322 383 384 445 446 44 45 106 107 168 169 230 231 292 293 354 355 416 417 77 78 139 140 201 202 263 264 325 326 387 388 449 450 48 49 110 111 172 173 234 235 296 297 358 359 420 421 81 82 143 144 205 206 267 268 329 330 391 392 453 454 52 53 114 115 176 177 238 239 300 301 362 363 424 425 85 86 147 148 209 210 271 272 333 334 395 396 457 458 56 57 118 119 180 181 242 243 304 305 366 367 428 429 89 90 151 152 213 214 275 276 337 338 399 400 461 462 60 61 122 123 184 185 246 247 308 309 370 371 432 433 + DEPOLARIZE2(0.001) 64 34 126 96 188 158 250 220 312 282 374 344 436 406 35 5 97 67 159 129 221 191 283 253 345 315 407 377 469 439 68 38 130 100 192 162 254 224 316 286 378 348 440 410 39 9 101 71 163 133 225 195 287 257 349 319 411 381 473 443 72 42 134 104 196 166 258 228 320 290 382 352 444 414 43 13 105 75 167 137 229 199 291 261 353 323 415 385 477 447 76 46 138 108 200 170 262 232 324 294 386 356 448 418 47 17 109 79 171 141 233 203 295 265 357 327 419 389 481 451 80 50 142 112 204 174 266 236 328 298 390 360 452 422 51 21 113 83 175 145 237 207 299 269 361 331 423 393 485 455 84 54 146 116 208 178 270 240 332 302 394 364 456 426 55 25 117 87 179 149 241 211 303 273 365 335 427 397 489 459 88 58 150 120 212 182 274 244 336 306 398 368 460 430 59 29 121 91 183 153 245 215 307 277 369 339 431 401 493 463 32 33 94 95 156 157 218 219 280 281 342 343 404 405 65 66 127 128 189 190 251 252 313 314 375 376 437 438 36 37 98 99 160 161 222 223 284 285 346 347 408 409 69 70 131 132 193 194 255 256 317 318 379 380 441 442 40 41 102 103 164 165 226 227 288 289 350 351 412 413 73 74 135 136 197 198 259 260 321 322 383 384 445 446 44 45 106 107 168 169 230 231 292 293 354 355 416 417 77 78 139 140 201 202 263 264 325 326 387 388 449 450 48 49 110 111 172 173 234 235 296 297 358 359 420 421 81 82 143 144 205 206 267 268 329 330 391 392 453 454 52 53 114 115 176 177 238 239 300 301 362 363 424 425 85 86 147 148 209 210 271 272 333 334 395 396 457 458 56 57 118 119 180 181 242 243 304 305 366 367 428 429 89 90 151 152 213 214 275 276 337 338 399 400 461 462 60 61 122 123 184 185 246 247 308 309 370 371 432 433 + TICK + CX 64 32 126 94 188 156 250 218 312 280 374 342 436 404 35 3 97 65 159 127 221 189 283 251 345 313 407 375 469 437 68 36 130 98 192 160 254 222 316 284 378 346 440 408 39 7 101 69 163 131 225 193 287 255 349 317 411 379 473 441 72 40 134 102 196 164 258 226 320 288 382 350 444 412 43 11 105 73 167 135 229 197 291 259 353 321 415 383 477 445 76 44 138 106 200 168 262 230 324 292 386 354 448 416 47 15 109 77 171 139 233 201 295 263 357 325 419 387 481 449 80 48 142 110 204 172 266 234 328 296 390 358 452 420 51 19 113 81 175 143 237 205 299 267 361 329 423 391 485 453 84 52 146 114 208 176 270 238 332 300 394 362 456 424 55 23 117 85 179 147 241 209 303 271 365 333 427 395 489 457 88 56 150 118 212 180 274 242 336 304 398 366 460 428 59 27 121 89 183 151 245 213 307 275 369 337 431 399 493 461 1 33 63 95 125 157 187 219 249 281 311 343 373 405 34 66 96 128 158 190 220 252 282 314 344 376 406 438 5 37 67 99 129 161 191 223 253 285 315 347 377 409 38 70 100 132 162 194 224 256 286 318 348 380 410 442 9 41 71 103 133 165 195 227 257 289 319 351 381 413 42 74 104 136 166 198 228 260 290 322 352 384 414 446 13 45 75 107 137 169 199 231 261 293 323 355 385 417 46 78 108 140 170 202 232 264 294 326 356 388 418 450 17 49 79 111 141 173 203 235 265 297 327 359 389 421 50 82 112 144 174 206 236 268 298 330 360 392 422 454 21 53 83 115 145 177 207 239 269 301 331 363 393 425 54 86 116 148 178 210 240 272 302 334 364 396 426 458 25 57 87 119 149 181 211 243 273 305 335 367 397 429 58 90 120 152 182 214 244 276 306 338 368 400 430 462 29 61 91 123 153 185 215 247 277 309 339 371 401 433 + DEPOLARIZE2(0.001) 64 32 126 94 188 156 250 218 312 280 374 342 436 404 35 3 97 65 159 127 221 189 283 251 345 313 407 375 469 437 68 36 130 98 192 160 254 222 316 284 378 346 440 408 39 7 101 69 163 131 225 193 287 255 349 317 411 379 473 441 72 40 134 102 196 164 258 226 320 288 382 350 444 412 43 11 105 73 167 135 229 197 291 259 353 321 415 383 477 445 76 44 138 106 200 168 262 230 324 292 386 354 448 416 47 15 109 77 171 139 233 201 295 263 357 325 419 387 481 449 80 48 142 110 204 172 266 234 328 296 390 358 452 420 51 19 113 81 175 143 237 205 299 267 361 329 423 391 485 453 84 52 146 114 208 176 270 238 332 300 394 362 456 424 55 23 117 85 179 147 241 209 303 271 365 333 427 395 489 457 88 56 150 118 212 180 274 242 336 304 398 366 460 428 59 27 121 89 183 151 245 213 307 275 369 337 431 399 493 461 1 33 63 95 125 157 187 219 249 281 311 343 373 405 34 66 96 128 158 190 220 252 282 314 344 376 406 438 5 37 67 99 129 161 191 223 253 285 315 347 377 409 38 70 100 132 162 194 224 256 286 318 348 380 410 442 9 41 71 103 133 165 195 227 257 289 319 351 381 413 42 74 104 136 166 198 228 260 290 322 352 384 414 446 13 45 75 107 137 169 199 231 261 293 323 355 385 417 46 78 108 140 170 202 232 264 294 326 356 388 418 450 17 49 79 111 141 173 203 235 265 297 327 359 389 421 50 82 112 144 174 206 236 268 298 330 360 392 422 454 21 53 83 115 145 177 207 239 269 301 331 363 393 425 54 86 116 148 178 210 240 272 302 334 364 396 426 458 25 57 87 119 149 181 211 243 273 305 335 367 397 429 58 90 120 152 182 214 244 276 306 338 368 400 430 462 29 61 91 123 153 185 215 247 277 309 339 371 401 433 + TICK + H 2 6 10 14 18 22 26 35 39 43 47 51 55 59 64 68 72 76 80 84 88 97 101 105 109 113 117 121 126 130 134 138 142 146 150 159 163 167 171 175 179 183 188 192 196 200 204 208 212 221 225 229 233 237 241 245 250 254 258 262 266 270 274 283 287 291 295 299 303 307 312 316 320 324 328 332 336 345 349 353 357 361 365 369 374 378 382 386 390 394 398 407 411 415 419 423 427 431 436 440 444 448 452 456 460 469 473 477 481 485 489 493 + DEPOLARIZE1(0.001) 2 6 10 14 18 22 26 35 39 43 47 51 55 59 64 68 72 76 80 84 88 97 101 105 109 113 117 121 126 130 134 138 142 146 150 159 163 167 171 175 179 183 188 192 196 200 204 208 212 221 225 229 233 237 241 245 250 254 258 262 266 270 274 283 287 291 295 299 303 307 312 316 320 324 328 332 336 345 349 353 357 361 365 369 374 378 382 386 390 394 398 407 411 415 419 423 427 431 436 440 444 448 452 456 460 469 473 477 481 485 489 493 + TICK + X_ERROR(0.001) 2 6 10 14 18 22 26 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 95 97 99 101 103 105 107 109 111 113 115 117 119 121 123 124 126 128 130 132 134 136 138 140 142 144 146 148 150 152 157 159 161 163 165 167 169 171 173 175 177 179 181 183 185 186 188 190 192 194 196 198 200 202 204 206 208 210 212 214 219 221 223 225 227 229 231 233 235 237 239 241 243 245 247 248 250 252 254 256 258 260 262 264 266 268 270 272 274 276 281 283 285 287 289 291 293 295 297 299 301 303 305 307 309 310 312 314 316 318 320 322 324 326 328 330 332 334 336 338 343 345 347 349 351 353 355 357 359 361 363 365 367 369 371 372 374 376 378 380 382 384 386 388 390 392 394 396 398 400 405 407 409 411 413 415 417 419 421 423 425 427 429 431 433 434 436 438 440 442 444 446 448 450 452 454 456 458 460 462 469 473 477 481 485 489 493 + MR 2 6 10 14 18 22 26 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 95 97 99 101 103 105 107 109 111 113 115 117 119 121 123 124 126 128 130 132 134 136 138 140 142 144 146 148 150 152 157 159 161 163 165 167 169 171 173 175 177 179 181 183 185 186 188 190 192 194 196 198 200 202 204 206 208 210 212 214 219 221 223 225 227 229 231 233 235 237 239 241 243 245 247 248 250 252 254 256 258 260 262 264 266 268 270 272 274 276 281 283 285 287 289 291 293 295 297 299 301 303 305 307 309 310 312 314 316 318 320 322 324 326 328 330 332 334 336 338 343 345 347 349 351 353 355 357 359 361 363 365 367 369 371 372 374 376 378 380 382 384 386 388 390 392 394 396 398 400 405 407 409 411 413 415 417 419 421 423 425 427 429 431 433 434 436 438 440 442 444 446 448 450 452 454 456 458 460 462 469 473 477 481 485 489 493 + X_ERROR(0.001) 2 6 10 14 18 22 26 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 95 97 99 101 103 105 107 109 111 113 115 117 119 121 123 124 126 128 130 132 134 136 138 140 142 144 146 148 150 152 157 159 161 163 165 167 169 171 173 175 177 179 181 183 185 186 188 190 192 194 196 198 200 202 204 206 208 210 212 214 219 221 223 225 227 229 231 233 235 237 239 241 243 245 247 248 250 252 254 256 258 260 262 264 266 268 270 272 274 276 281 283 285 287 289 291 293 295 297 299 301 303 305 307 309 310 312 314 316 318 320 322 324 326 328 330 332 334 336 338 343 345 347 349 351 353 355 357 359 361 363 365 367 369 371 372 374 376 378 380 382 384 386 388 390 392 394 396 398 400 405 407 409 411 413 415 417 419 421 423 425 427 429 431 433 434 436 438 440 442 444 446 448 450 452 454 456 458 460 462 469 473 477 481 485 489 493 + SHIFT_COORDS(0, 0, 1) + DETECTOR(2, 0, 0) rec[-224] rec[-448] + DETECTOR(6, 0, 0) rec[-223] rec[-447] + DETECTOR(10, 0, 0) rec[-222] rec[-446] + DETECTOR(14, 0, 0) rec[-221] rec[-445] + DETECTOR(18, 0, 0) rec[-220] rec[-444] + DETECTOR(22, 0, 0) rec[-219] rec[-443] + DETECTOR(26, 0, 0) rec[-218] rec[-442] + DETECTOR(2, 2, 0) rec[-217] rec[-441] + DETECTOR(4, 2, 0) rec[-216] rec[-440] + DETECTOR(6, 2, 0) rec[-215] rec[-439] + DETECTOR(8, 2, 0) rec[-214] rec[-438] + DETECTOR(10, 2, 0) rec[-213] rec[-437] + DETECTOR(12, 2, 0) rec[-212] rec[-436] + DETECTOR(14, 2, 0) rec[-211] rec[-435] + DETECTOR(16, 2, 0) rec[-210] rec[-434] + DETECTOR(18, 2, 0) rec[-209] rec[-433] + DETECTOR(20, 2, 0) rec[-208] rec[-432] + DETECTOR(22, 2, 0) rec[-207] rec[-431] + DETECTOR(24, 2, 0) rec[-206] rec[-430] + DETECTOR(26, 2, 0) rec[-205] rec[-429] + DETECTOR(28, 2, 0) rec[-204] rec[-428] + DETECTOR(30, 2, 0) rec[-203] rec[-427] + DETECTOR(0, 4, 0) rec[-202] rec[-426] + DETECTOR(2, 4, 0) rec[-201] rec[-425] + DETECTOR(4, 4, 0) rec[-200] rec[-424] + DETECTOR(6, 4, 0) rec[-199] rec[-423] + DETECTOR(8, 4, 0) rec[-198] rec[-422] + DETECTOR(10, 4, 0) rec[-197] rec[-421] + DETECTOR(12, 4, 0) rec[-196] rec[-420] + DETECTOR(14, 4, 0) rec[-195] rec[-419] + DETECTOR(16, 4, 0) rec[-194] rec[-418] + DETECTOR(18, 4, 0) rec[-193] rec[-417] + DETECTOR(20, 4, 0) rec[-192] rec[-416] + DETECTOR(22, 4, 0) rec[-191] rec[-415] + DETECTOR(24, 4, 0) rec[-190] rec[-414] + DETECTOR(26, 4, 0) rec[-189] rec[-413] + DETECTOR(28, 4, 0) rec[-188] rec[-412] + DETECTOR(2, 6, 0) rec[-187] rec[-411] + DETECTOR(4, 6, 0) rec[-186] rec[-410] + DETECTOR(6, 6, 0) rec[-185] rec[-409] + DETECTOR(8, 6, 0) rec[-184] rec[-408] + DETECTOR(10, 6, 0) rec[-183] rec[-407] + DETECTOR(12, 6, 0) rec[-182] rec[-406] + DETECTOR(14, 6, 0) rec[-181] rec[-405] + DETECTOR(16, 6, 0) rec[-180] rec[-404] + DETECTOR(18, 6, 0) rec[-179] rec[-403] + DETECTOR(20, 6, 0) rec[-178] rec[-402] + DETECTOR(22, 6, 0) rec[-177] rec[-401] + DETECTOR(24, 6, 0) rec[-176] rec[-400] + DETECTOR(26, 6, 0) rec[-175] rec[-399] + DETECTOR(28, 6, 0) rec[-174] rec[-398] + DETECTOR(30, 6, 0) rec[-173] rec[-397] + DETECTOR(0, 8, 0) rec[-172] rec[-396] + DETECTOR(2, 8, 0) rec[-171] rec[-395] + DETECTOR(4, 8, 0) rec[-170] rec[-394] + DETECTOR(6, 8, 0) rec[-169] rec[-393] + DETECTOR(8, 8, 0) rec[-168] rec[-392] + DETECTOR(10, 8, 0) rec[-167] rec[-391] + DETECTOR(12, 8, 0) rec[-166] rec[-390] + DETECTOR(14, 8, 0) rec[-165] rec[-389] + DETECTOR(16, 8, 0) rec[-164] rec[-388] + DETECTOR(18, 8, 0) rec[-163] rec[-387] + DETECTOR(20, 8, 0) rec[-162] rec[-386] + DETECTOR(22, 8, 0) rec[-161] rec[-385] + DETECTOR(24, 8, 0) rec[-160] rec[-384] + DETECTOR(26, 8, 0) rec[-159] rec[-383] + DETECTOR(28, 8, 0) rec[-158] rec[-382] + DETECTOR(2, 10, 0) rec[-157] rec[-381] + DETECTOR(4, 10, 0) rec[-156] rec[-380] + DETECTOR(6, 10, 0) rec[-155] rec[-379] + DETECTOR(8, 10, 0) rec[-154] rec[-378] + DETECTOR(10, 10, 0) rec[-153] rec[-377] + DETECTOR(12, 10, 0) rec[-152] rec[-376] + DETECTOR(14, 10, 0) rec[-151] rec[-375] + DETECTOR(16, 10, 0) rec[-150] rec[-374] + DETECTOR(18, 10, 0) rec[-149] rec[-373] + DETECTOR(20, 10, 0) rec[-148] rec[-372] + DETECTOR(22, 10, 0) rec[-147] rec[-371] + DETECTOR(24, 10, 0) rec[-146] rec[-370] + DETECTOR(26, 10, 0) rec[-145] rec[-369] + DETECTOR(28, 10, 0) rec[-144] rec[-368] + DETECTOR(30, 10, 0) rec[-143] rec[-367] + DETECTOR(0, 12, 0) rec[-142] rec[-366] + DETECTOR(2, 12, 0) rec[-141] rec[-365] + DETECTOR(4, 12, 0) rec[-140] rec[-364] + DETECTOR(6, 12, 0) rec[-139] rec[-363] + DETECTOR(8, 12, 0) rec[-138] rec[-362] + DETECTOR(10, 12, 0) rec[-137] rec[-361] + DETECTOR(12, 12, 0) rec[-136] rec[-360] + DETECTOR(14, 12, 0) rec[-135] rec[-359] + DETECTOR(16, 12, 0) rec[-134] rec[-358] + DETECTOR(18, 12, 0) rec[-133] rec[-357] + DETECTOR(20, 12, 0) rec[-132] rec[-356] + DETECTOR(22, 12, 0) rec[-131] rec[-355] + DETECTOR(24, 12, 0) rec[-130] rec[-354] + DETECTOR(26, 12, 0) rec[-129] rec[-353] + DETECTOR(28, 12, 0) rec[-128] rec[-352] + DETECTOR(2, 14, 0) rec[-127] rec[-351] + DETECTOR(4, 14, 0) rec[-126] rec[-350] + DETECTOR(6, 14, 0) rec[-125] rec[-349] + DETECTOR(8, 14, 0) rec[-124] rec[-348] + DETECTOR(10, 14, 0) rec[-123] rec[-347] + DETECTOR(12, 14, 0) rec[-122] rec[-346] + DETECTOR(14, 14, 0) rec[-121] rec[-345] + DETECTOR(16, 14, 0) rec[-120] rec[-344] + DETECTOR(18, 14, 0) rec[-119] rec[-343] + DETECTOR(20, 14, 0) rec[-118] rec[-342] + DETECTOR(22, 14, 0) rec[-117] rec[-341] + DETECTOR(24, 14, 0) rec[-116] rec[-340] + DETECTOR(26, 14, 0) rec[-115] rec[-339] + DETECTOR(28, 14, 0) rec[-114] rec[-338] + DETECTOR(30, 14, 0) rec[-113] rec[-337] + DETECTOR(0, 16, 0) rec[-112] rec[-336] + DETECTOR(2, 16, 0) rec[-111] rec[-335] + DETECTOR(4, 16, 0) rec[-110] rec[-334] + DETECTOR(6, 16, 0) rec[-109] rec[-333] + DETECTOR(8, 16, 0) rec[-108] rec[-332] + DETECTOR(10, 16, 0) rec[-107] rec[-331] + DETECTOR(12, 16, 0) rec[-106] rec[-330] + DETECTOR(14, 16, 0) rec[-105] rec[-329] + DETECTOR(16, 16, 0) rec[-104] rec[-328] + DETECTOR(18, 16, 0) rec[-103] rec[-327] + DETECTOR(20, 16, 0) rec[-102] rec[-326] + DETECTOR(22, 16, 0) rec[-101] rec[-325] + DETECTOR(24, 16, 0) rec[-100] rec[-324] + DETECTOR(26, 16, 0) rec[-99] rec[-323] + DETECTOR(28, 16, 0) rec[-98] rec[-322] + DETECTOR(2, 18, 0) rec[-97] rec[-321] + DETECTOR(4, 18, 0) rec[-96] rec[-320] + DETECTOR(6, 18, 0) rec[-95] rec[-319] + DETECTOR(8, 18, 0) rec[-94] rec[-318] + DETECTOR(10, 18, 0) rec[-93] rec[-317] + DETECTOR(12, 18, 0) rec[-92] rec[-316] + DETECTOR(14, 18, 0) rec[-91] rec[-315] + DETECTOR(16, 18, 0) rec[-90] rec[-314] + DETECTOR(18, 18, 0) rec[-89] rec[-313] + DETECTOR(20, 18, 0) rec[-88] rec[-312] + DETECTOR(22, 18, 0) rec[-87] rec[-311] + DETECTOR(24, 18, 0) rec[-86] rec[-310] + DETECTOR(26, 18, 0) rec[-85] rec[-309] + DETECTOR(28, 18, 0) rec[-84] rec[-308] + DETECTOR(30, 18, 0) rec[-83] rec[-307] + DETECTOR(0, 20, 0) rec[-82] rec[-306] + DETECTOR(2, 20, 0) rec[-81] rec[-305] + DETECTOR(4, 20, 0) rec[-80] rec[-304] + DETECTOR(6, 20, 0) rec[-79] rec[-303] + DETECTOR(8, 20, 0) rec[-78] rec[-302] + DETECTOR(10, 20, 0) rec[-77] rec[-301] + DETECTOR(12, 20, 0) rec[-76] rec[-300] + DETECTOR(14, 20, 0) rec[-75] rec[-299] + DETECTOR(16, 20, 0) rec[-74] rec[-298] + DETECTOR(18, 20, 0) rec[-73] rec[-297] + DETECTOR(20, 20, 0) rec[-72] rec[-296] + DETECTOR(22, 20, 0) rec[-71] rec[-295] + DETECTOR(24, 20, 0) rec[-70] rec[-294] + DETECTOR(26, 20, 0) rec[-69] rec[-293] + DETECTOR(28, 20, 0) rec[-68] rec[-292] + DETECTOR(2, 22, 0) rec[-67] rec[-291] + DETECTOR(4, 22, 0) rec[-66] rec[-290] + DETECTOR(6, 22, 0) rec[-65] rec[-289] + DETECTOR(8, 22, 0) rec[-64] rec[-288] + DETECTOR(10, 22, 0) rec[-63] rec[-287] + DETECTOR(12, 22, 0) rec[-62] rec[-286] + DETECTOR(14, 22, 0) rec[-61] rec[-285] + DETECTOR(16, 22, 0) rec[-60] rec[-284] + DETECTOR(18, 22, 0) rec[-59] rec[-283] + DETECTOR(20, 22, 0) rec[-58] rec[-282] + DETECTOR(22, 22, 0) rec[-57] rec[-281] + DETECTOR(24, 22, 0) rec[-56] rec[-280] + DETECTOR(26, 22, 0) rec[-55] rec[-279] + DETECTOR(28, 22, 0) rec[-54] rec[-278] + DETECTOR(30, 22, 0) rec[-53] rec[-277] + DETECTOR(0, 24, 0) rec[-52] rec[-276] + DETECTOR(2, 24, 0) rec[-51] rec[-275] + DETECTOR(4, 24, 0) rec[-50] rec[-274] + DETECTOR(6, 24, 0) rec[-49] rec[-273] + DETECTOR(8, 24, 0) rec[-48] rec[-272] + DETECTOR(10, 24, 0) rec[-47] rec[-271] + DETECTOR(12, 24, 0) rec[-46] rec[-270] + DETECTOR(14, 24, 0) rec[-45] rec[-269] + DETECTOR(16, 24, 0) rec[-44] rec[-268] + DETECTOR(18, 24, 0) rec[-43] rec[-267] + DETECTOR(20, 24, 0) rec[-42] rec[-266] + DETECTOR(22, 24, 0) rec[-41] rec[-265] + DETECTOR(24, 24, 0) rec[-40] rec[-264] + DETECTOR(26, 24, 0) rec[-39] rec[-263] + DETECTOR(28, 24, 0) rec[-38] rec[-262] + DETECTOR(2, 26, 0) rec[-37] rec[-261] + DETECTOR(4, 26, 0) rec[-36] rec[-260] + DETECTOR(6, 26, 0) rec[-35] rec[-259] + DETECTOR(8, 26, 0) rec[-34] rec[-258] + DETECTOR(10, 26, 0) rec[-33] rec[-257] + DETECTOR(12, 26, 0) rec[-32] rec[-256] + DETECTOR(14, 26, 0) rec[-31] rec[-255] + DETECTOR(16, 26, 0) rec[-30] rec[-254] + DETECTOR(18, 26, 0) rec[-29] rec[-253] + DETECTOR(20, 26, 0) rec[-28] rec[-252] + DETECTOR(22, 26, 0) rec[-27] rec[-251] + DETECTOR(24, 26, 0) rec[-26] rec[-250] + DETECTOR(26, 26, 0) rec[-25] rec[-249] + DETECTOR(28, 26, 0) rec[-24] rec[-248] + DETECTOR(30, 26, 0) rec[-23] rec[-247] + DETECTOR(0, 28, 0) rec[-22] rec[-246] + DETECTOR(2, 28, 0) rec[-21] rec[-245] + DETECTOR(4, 28, 0) rec[-20] rec[-244] + DETECTOR(6, 28, 0) rec[-19] rec[-243] + DETECTOR(8, 28, 0) rec[-18] rec[-242] + DETECTOR(10, 28, 0) rec[-17] rec[-241] + DETECTOR(12, 28, 0) rec[-16] rec[-240] + DETECTOR(14, 28, 0) rec[-15] rec[-239] + DETECTOR(16, 28, 0) rec[-14] rec[-238] + DETECTOR(18, 28, 0) rec[-13] rec[-237] + DETECTOR(20, 28, 0) rec[-12] rec[-236] + DETECTOR(22, 28, 0) rec[-11] rec[-235] + DETECTOR(24, 28, 0) rec[-10] rec[-234] + DETECTOR(26, 28, 0) rec[-9] rec[-233] + DETECTOR(28, 28, 0) rec[-8] rec[-232] + DETECTOR(4, 30, 0) rec[-7] rec[-231] + DETECTOR(8, 30, 0) rec[-6] rec[-230] + DETECTOR(12, 30, 0) rec[-5] rec[-229] + DETECTOR(16, 30, 0) rec[-4] rec[-228] + DETECTOR(20, 30, 0) rec[-3] rec[-227] + DETECTOR(24, 30, 0) rec[-2] rec[-226] + DETECTOR(28, 30, 0) rec[-1] rec[-225] +} +X_ERROR(0.001) 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 94 96 98 100 102 104 106 108 110 112 114 116 118 120 122 125 127 129 131 133 135 137 139 141 143 145 147 149 151 153 156 158 160 162 164 166 168 170 172 174 176 178 180 182 184 187 189 191 193 195 197 199 201 203 205 207 209 211 213 215 218 220 222 224 226 228 230 232 234 236 238 240 242 244 246 249 251 253 255 257 259 261 263 265 267 269 271 273 275 277 280 282 284 286 288 290 292 294 296 298 300 302 304 306 308 311 313 315 317 319 321 323 325 327 329 331 333 335 337 339 342 344 346 348 350 352 354 356 358 360 362 364 366 368 370 373 375 377 379 381 383 385 387 389 391 393 395 397 399 401 404 406 408 410 412 414 416 418 420 422 424 426 428 430 432 435 437 439 441 443 445 447 449 451 453 455 457 459 461 463 +M 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 94 96 98 100 102 104 106 108 110 112 114 116 118 120 122 125 127 129 131 133 135 137 139 141 143 145 147 149 151 153 156 158 160 162 164 166 168 170 172 174 176 178 180 182 184 187 189 191 193 195 197 199 201 203 205 207 209 211 213 215 218 220 222 224 226 228 230 232 234 236 238 240 242 244 246 249 251 253 255 257 259 261 263 265 267 269 271 273 275 277 280 282 284 286 288 290 292 294 296 298 300 302 304 306 308 311 313 315 317 319 321 323 325 327 329 331 333 335 337 339 342 344 346 348 350 352 354 356 358 360 362 364 366 368 370 373 375 377 379 381 383 385 387 389 391 393 395 397 399 401 404 406 408 410 412 414 416 418 420 422 424 426 428 430 432 435 437 439 441 443 445 447 449 451 453 455 457 459 461 463 +DETECTOR(0, 4, 1) rec[-195] rec[-210] rec[-427] +DETECTOR(0, 8, 1) rec[-165] rec[-180] rec[-397] +DETECTOR(0, 12, 1) rec[-135] rec[-150] rec[-367] +DETECTOR(0, 16, 1) rec[-105] rec[-120] rec[-337] +DETECTOR(0, 20, 1) rec[-75] rec[-90] rec[-307] +DETECTOR(0, 24, 1) rec[-45] rec[-60] rec[-277] +DETECTOR(0, 28, 1) rec[-15] rec[-30] rec[-247] +DETECTOR(2, 2, 1) rec[-209] rec[-210] rec[-224] rec[-225] rec[-442] +DETECTOR(2, 6, 1) rec[-179] rec[-180] rec[-194] rec[-195] rec[-412] +DETECTOR(2, 10, 1) rec[-149] rec[-150] rec[-164] rec[-165] rec[-382] +DETECTOR(2, 14, 1) rec[-119] rec[-120] rec[-134] rec[-135] rec[-352] +DETECTOR(2, 18, 1) rec[-89] rec[-90] rec[-104] rec[-105] rec[-322] +DETECTOR(2, 22, 1) rec[-59] rec[-60] rec[-74] rec[-75] rec[-292] +DETECTOR(2, 26, 1) rec[-29] rec[-30] rec[-44] rec[-45] rec[-262] +DETECTOR(4, 4, 1) rec[-193] rec[-194] rec[-208] rec[-209] rec[-425] +DETECTOR(4, 8, 1) rec[-163] rec[-164] rec[-178] rec[-179] rec[-395] +DETECTOR(4, 12, 1) rec[-133] rec[-134] rec[-148] rec[-149] rec[-365] +DETECTOR(4, 16, 1) rec[-103] rec[-104] rec[-118] rec[-119] rec[-335] +DETECTOR(4, 20, 1) rec[-73] rec[-74] rec[-88] rec[-89] rec[-305] +DETECTOR(4, 24, 1) rec[-43] rec[-44] rec[-58] rec[-59] rec[-275] +DETECTOR(4, 28, 1) rec[-13] rec[-14] rec[-28] rec[-29] rec[-245] +DETECTOR(6, 2, 1) rec[-207] rec[-208] rec[-222] rec[-223] rec[-440] +DETECTOR(6, 6, 1) rec[-177] rec[-178] rec[-192] rec[-193] rec[-410] +DETECTOR(6, 10, 1) rec[-147] rec[-148] rec[-162] rec[-163] rec[-380] +DETECTOR(6, 14, 1) rec[-117] rec[-118] rec[-132] rec[-133] rec[-350] +DETECTOR(6, 18, 1) rec[-87] rec[-88] rec[-102] rec[-103] rec[-320] +DETECTOR(6, 22, 1) rec[-57] rec[-58] rec[-72] rec[-73] rec[-290] +DETECTOR(6, 26, 1) rec[-27] rec[-28] rec[-42] rec[-43] rec[-260] +DETECTOR(8, 4, 1) rec[-191] rec[-192] rec[-206] rec[-207] rec[-423] +DETECTOR(8, 8, 1) rec[-161] rec[-162] rec[-176] rec[-177] rec[-393] +DETECTOR(8, 12, 1) rec[-131] rec[-132] rec[-146] rec[-147] rec[-363] +DETECTOR(8, 16, 1) rec[-101] rec[-102] rec[-116] rec[-117] rec[-333] +DETECTOR(8, 20, 1) rec[-71] rec[-72] rec[-86] rec[-87] rec[-303] +DETECTOR(8, 24, 1) rec[-41] rec[-42] rec[-56] rec[-57] rec[-273] +DETECTOR(8, 28, 1) rec[-11] rec[-12] rec[-26] rec[-27] rec[-243] +DETECTOR(10, 2, 1) rec[-205] rec[-206] rec[-220] rec[-221] rec[-438] +DETECTOR(10, 6, 1) rec[-175] rec[-176] rec[-190] rec[-191] rec[-408] +DETECTOR(10, 10, 1) rec[-145] rec[-146] rec[-160] rec[-161] rec[-378] +DETECTOR(10, 14, 1) rec[-115] rec[-116] rec[-130] rec[-131] rec[-348] +DETECTOR(10, 18, 1) rec[-85] rec[-86] rec[-100] rec[-101] rec[-318] +DETECTOR(10, 22, 1) rec[-55] rec[-56] rec[-70] rec[-71] rec[-288] +DETECTOR(10, 26, 1) rec[-25] rec[-26] rec[-40] rec[-41] rec[-258] +DETECTOR(12, 4, 1) rec[-189] rec[-190] rec[-204] rec[-205] rec[-421] +DETECTOR(12, 8, 1) rec[-159] rec[-160] rec[-174] rec[-175] rec[-391] +DETECTOR(12, 12, 1) rec[-129] rec[-130] rec[-144] rec[-145] rec[-361] +DETECTOR(12, 16, 1) rec[-99] rec[-100] rec[-114] rec[-115] rec[-331] +DETECTOR(12, 20, 1) rec[-69] rec[-70] rec[-84] rec[-85] rec[-301] +DETECTOR(12, 24, 1) rec[-39] rec[-40] rec[-54] rec[-55] rec[-271] +DETECTOR(12, 28, 1) rec[-9] rec[-10] rec[-24] rec[-25] rec[-241] +DETECTOR(14, 2, 1) rec[-203] rec[-204] rec[-218] rec[-219] rec[-436] +DETECTOR(14, 6, 1) rec[-173] rec[-174] rec[-188] rec[-189] rec[-406] +DETECTOR(14, 10, 1) rec[-143] rec[-144] rec[-158] rec[-159] rec[-376] +DETECTOR(14, 14, 1) rec[-113] rec[-114] rec[-128] rec[-129] rec[-346] +DETECTOR(14, 18, 1) rec[-83] rec[-84] rec[-98] rec[-99] rec[-316] +DETECTOR(14, 22, 1) rec[-53] rec[-54] rec[-68] rec[-69] rec[-286] +DETECTOR(14, 26, 1) rec[-23] rec[-24] rec[-38] rec[-39] rec[-256] +DETECTOR(16, 4, 1) rec[-187] rec[-188] rec[-202] rec[-203] rec[-419] +DETECTOR(16, 8, 1) rec[-157] rec[-158] rec[-172] rec[-173] rec[-389] +DETECTOR(16, 12, 1) rec[-127] rec[-128] rec[-142] rec[-143] rec[-359] +DETECTOR(16, 16, 1) rec[-97] rec[-98] rec[-112] rec[-113] rec[-329] +DETECTOR(16, 20, 1) rec[-67] rec[-68] rec[-82] rec[-83] rec[-299] +DETECTOR(16, 24, 1) rec[-37] rec[-38] rec[-52] rec[-53] rec[-269] +DETECTOR(16, 28, 1) rec[-7] rec[-8] rec[-22] rec[-23] rec[-239] +DETECTOR(18, 2, 1) rec[-201] rec[-202] rec[-216] rec[-217] rec[-434] +DETECTOR(18, 6, 1) rec[-171] rec[-172] rec[-186] rec[-187] rec[-404] +DETECTOR(18, 10, 1) rec[-141] rec[-142] rec[-156] rec[-157] rec[-374] +DETECTOR(18, 14, 1) rec[-111] rec[-112] rec[-126] rec[-127] rec[-344] +DETECTOR(18, 18, 1) rec[-81] rec[-82] rec[-96] rec[-97] rec[-314] +DETECTOR(18, 22, 1) rec[-51] rec[-52] rec[-66] rec[-67] rec[-284] +DETECTOR(18, 26, 1) rec[-21] rec[-22] rec[-36] rec[-37] rec[-254] +DETECTOR(20, 4, 1) rec[-185] rec[-186] rec[-200] rec[-201] rec[-417] +DETECTOR(20, 8, 1) rec[-155] rec[-156] rec[-170] rec[-171] rec[-387] +DETECTOR(20, 12, 1) rec[-125] rec[-126] rec[-140] rec[-141] rec[-357] +DETECTOR(20, 16, 1) rec[-95] rec[-96] rec[-110] rec[-111] rec[-327] +DETECTOR(20, 20, 1) rec[-65] rec[-66] rec[-80] rec[-81] rec[-297] +DETECTOR(20, 24, 1) rec[-35] rec[-36] rec[-50] rec[-51] rec[-267] +DETECTOR(20, 28, 1) rec[-5] rec[-6] rec[-20] rec[-21] rec[-237] +DETECTOR(22, 2, 1) rec[-199] rec[-200] rec[-214] rec[-215] rec[-432] +DETECTOR(22, 6, 1) rec[-169] rec[-170] rec[-184] rec[-185] rec[-402] +DETECTOR(22, 10, 1) rec[-139] rec[-140] rec[-154] rec[-155] rec[-372] +DETECTOR(22, 14, 1) rec[-109] rec[-110] rec[-124] rec[-125] rec[-342] +DETECTOR(22, 18, 1) rec[-79] rec[-80] rec[-94] rec[-95] rec[-312] +DETECTOR(22, 22, 1) rec[-49] rec[-50] rec[-64] rec[-65] rec[-282] +DETECTOR(22, 26, 1) rec[-19] rec[-20] rec[-34] rec[-35] rec[-252] +DETECTOR(24, 4, 1) rec[-183] rec[-184] rec[-198] rec[-199] rec[-415] +DETECTOR(24, 8, 1) rec[-153] rec[-154] rec[-168] rec[-169] rec[-385] +DETECTOR(24, 12, 1) rec[-123] rec[-124] rec[-138] rec[-139] rec[-355] +DETECTOR(24, 16, 1) rec[-93] rec[-94] rec[-108] rec[-109] rec[-325] +DETECTOR(24, 20, 1) rec[-63] rec[-64] rec[-78] rec[-79] rec[-295] +DETECTOR(24, 24, 1) rec[-33] rec[-34] rec[-48] rec[-49] rec[-265] +DETECTOR(24, 28, 1) rec[-3] rec[-4] rec[-18] rec[-19] rec[-235] +DETECTOR(26, 2, 1) rec[-197] rec[-198] rec[-212] rec[-213] rec[-430] +DETECTOR(26, 6, 1) rec[-167] rec[-168] rec[-182] rec[-183] rec[-400] +DETECTOR(26, 10, 1) rec[-137] rec[-138] rec[-152] rec[-153] rec[-370] +DETECTOR(26, 14, 1) rec[-107] rec[-108] rec[-122] rec[-123] rec[-340] +DETECTOR(26, 18, 1) rec[-77] rec[-78] rec[-92] rec[-93] rec[-310] +DETECTOR(26, 22, 1) rec[-47] rec[-48] rec[-62] rec[-63] rec[-280] +DETECTOR(26, 26, 1) rec[-17] rec[-18] rec[-32] rec[-33] rec[-250] +DETECTOR(28, 4, 1) rec[-181] rec[-182] rec[-196] rec[-197] rec[-413] +DETECTOR(28, 8, 1) rec[-151] rec[-152] rec[-166] rec[-167] rec[-383] +DETECTOR(28, 12, 1) rec[-121] rec[-122] rec[-136] rec[-137] rec[-353] +DETECTOR(28, 16, 1) rec[-91] rec[-92] rec[-106] rec[-107] rec[-323] +DETECTOR(28, 20, 1) rec[-61] rec[-62] rec[-76] rec[-77] rec[-293] +DETECTOR(28, 24, 1) rec[-31] rec[-32] rec[-46] rec[-47] rec[-263] +DETECTOR(28, 28, 1) rec[-1] rec[-2] rec[-16] rec[-17] rec[-233] +DETECTOR(30, 2, 1) rec[-196] rec[-211] rec[-428] +DETECTOR(30, 6, 1) rec[-166] rec[-181] rec[-398] +DETECTOR(30, 10, 1) rec[-136] rec[-151] rec[-368] +DETECTOR(30, 14, 1) rec[-106] rec[-121] rec[-338] +DETECTOR(30, 18, 1) rec[-76] rec[-91] rec[-308] +DETECTOR(30, 22, 1) rec[-46] rec[-61] rec[-278] +DETECTOR(30, 26, 1) rec[-16] rec[-31] rec[-248] +OBSERVABLE_INCLUDE(0) rec[-211] rec[-212] rec[-213] rec[-214] rec[-215] rec[-216] rec[-217] rec[-218] rec[-219] rec[-220] rec[-221] rec[-222] rec[-223] rec[-224] rec[-225] diff --git a/wai/quantum-cross-simulator/corpus/qec/surface_z_d3.circuit b/wai/quantum-cross-simulator/corpus/qec/surface_z_d3.circuit new file mode 100644 index 000000000..f0db99aef --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qec/surface_z_d3.circuit @@ -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] diff --git a/wai/quantum-cross-simulator/corpus/qec/surface_z_d5.circuit b/wai/quantum-cross-simulator/corpus/qec/surface_z_d5.circuit new file mode 100644 index 000000000..86cbe35fc --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qec/surface_z_d5.circuit @@ -0,0 +1,153 @@ +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.001) 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.001) 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.001) 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.001) 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.001) 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.001) 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.001) 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.001) 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.001) 2 6 15 19 24 28 37 41 46 50 59 63 +TICK +X_ERROR(0.001) 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.001) 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] +REPEAT 4 { + TICK + DEPOLARIZE1(0.001) 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.001) 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.001) 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.001) 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.001) 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.001) 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.001) 2 6 15 19 24 28 37 41 46 50 59 63 + TICK + X_ERROR(0.001) 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.001) 2 6 13 15 17 19 21 22 24 26 28 30 35 37 39 41 43 44 46 48 50 52 59 63 + SHIFT_COORDS(0, 0, 1) + DETECTOR(2, 0, 0) rec[-24] rec[-48] + DETECTOR(6, 0, 0) rec[-23] rec[-47] + DETECTOR(2, 2, 0) rec[-22] rec[-46] + DETECTOR(4, 2, 0) rec[-21] rec[-45] + DETECTOR(6, 2, 0) rec[-20] rec[-44] + DETECTOR(8, 2, 0) rec[-19] rec[-43] + DETECTOR(10, 2, 0) rec[-18] rec[-42] + DETECTOR(0, 4, 0) rec[-17] rec[-41] + DETECTOR(2, 4, 0) rec[-16] rec[-40] + DETECTOR(4, 4, 0) rec[-15] rec[-39] + DETECTOR(6, 4, 0) rec[-14] rec[-38] + DETECTOR(8, 4, 0) rec[-13] rec[-37] + DETECTOR(2, 6, 0) rec[-12] rec[-36] + DETECTOR(4, 6, 0) rec[-11] rec[-35] + DETECTOR(6, 6, 0) rec[-10] rec[-34] + DETECTOR(8, 6, 0) rec[-9] rec[-33] + DETECTOR(10, 6, 0) rec[-8] rec[-32] + DETECTOR(0, 8, 0) rec[-7] rec[-31] + DETECTOR(2, 8, 0) rec[-6] rec[-30] + DETECTOR(4, 8, 0) rec[-5] rec[-29] + DETECTOR(6, 8, 0) rec[-4] rec[-28] + DETECTOR(8, 8, 0) rec[-3] rec[-27] + DETECTOR(4, 10, 0) rec[-2] rec[-26] + DETECTOR(8, 10, 0) rec[-1] rec[-25] +} +X_ERROR(0.001) 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] diff --git a/wai/quantum-cross-simulator/corpus/qec/surface_z_d5_noiseless.circuit b/wai/quantum-cross-simulator/corpus/qec/surface_z_d5_noiseless.circuit new file mode 100644 index 000000000..6a959c862 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qec/surface_z_d5_noiseless.circuit @@ -0,0 +1,131 @@ +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 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 +H 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 +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 +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 +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 +TICK +H 2 6 15 19 24 28 37 41 46 50 59 63 +TICK +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 +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] +REPEAT 4 { + TICK + H 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 + 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 + 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 + 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 + TICK + H 2 6 15 19 24 28 37 41 46 50 59 63 + TICK + 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 + SHIFT_COORDS(0, 0, 1) + DETECTOR(2, 0, 0) rec[-24] rec[-48] + DETECTOR(6, 0, 0) rec[-23] rec[-47] + DETECTOR(2, 2, 0) rec[-22] rec[-46] + DETECTOR(4, 2, 0) rec[-21] rec[-45] + DETECTOR(6, 2, 0) rec[-20] rec[-44] + DETECTOR(8, 2, 0) rec[-19] rec[-43] + DETECTOR(10, 2, 0) rec[-18] rec[-42] + DETECTOR(0, 4, 0) rec[-17] rec[-41] + DETECTOR(2, 4, 0) rec[-16] rec[-40] + DETECTOR(4, 4, 0) rec[-15] rec[-39] + DETECTOR(6, 4, 0) rec[-14] rec[-38] + DETECTOR(8, 4, 0) rec[-13] rec[-37] + DETECTOR(2, 6, 0) rec[-12] rec[-36] + DETECTOR(4, 6, 0) rec[-11] rec[-35] + DETECTOR(6, 6, 0) rec[-10] rec[-34] + DETECTOR(8, 6, 0) rec[-9] rec[-33] + DETECTOR(10, 6, 0) rec[-8] rec[-32] + DETECTOR(0, 8, 0) rec[-7] rec[-31] + DETECTOR(2, 8, 0) rec[-6] rec[-30] + DETECTOR(4, 8, 0) rec[-5] rec[-29] + DETECTOR(6, 8, 0) rec[-4] rec[-28] + DETECTOR(8, 8, 0) rec[-3] rec[-27] + DETECTOR(4, 10, 0) rec[-2] rec[-26] + DETECTOR(8, 10, 0) rec[-1] rec[-25] +} +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] diff --git a/wai/quantum-cross-simulator/corpus/qec/surface_z_d7.circuit b/wai/quantum-cross-simulator/corpus/qec/surface_z_d7.circuit new file mode 100644 index 000000000..fbc3b7104 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qec/surface_z_d7.circuit @@ -0,0 +1,249 @@ +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(10, 0) 10 +QUBIT_COORDS(11, 1) 11 +QUBIT_COORDS(13, 1) 13 +QUBIT_COORDS(1, 3) 16 +QUBIT_COORDS(2, 2) 17 +QUBIT_COORDS(3, 3) 18 +QUBIT_COORDS(4, 2) 19 +QUBIT_COORDS(5, 3) 20 +QUBIT_COORDS(6, 2) 21 +QUBIT_COORDS(7, 3) 22 +QUBIT_COORDS(8, 2) 23 +QUBIT_COORDS(9, 3) 24 +QUBIT_COORDS(10, 2) 25 +QUBIT_COORDS(11, 3) 26 +QUBIT_COORDS(12, 2) 27 +QUBIT_COORDS(13, 3) 28 +QUBIT_COORDS(14, 2) 29 +QUBIT_COORDS(0, 4) 30 +QUBIT_COORDS(1, 5) 31 +QUBIT_COORDS(2, 4) 32 +QUBIT_COORDS(3, 5) 33 +QUBIT_COORDS(4, 4) 34 +QUBIT_COORDS(5, 5) 35 +QUBIT_COORDS(6, 4) 36 +QUBIT_COORDS(7, 5) 37 +QUBIT_COORDS(8, 4) 38 +QUBIT_COORDS(9, 5) 39 +QUBIT_COORDS(10, 4) 40 +QUBIT_COORDS(11, 5) 41 +QUBIT_COORDS(12, 4) 42 +QUBIT_COORDS(13, 5) 43 +QUBIT_COORDS(1, 7) 46 +QUBIT_COORDS(2, 6) 47 +QUBIT_COORDS(3, 7) 48 +QUBIT_COORDS(4, 6) 49 +QUBIT_COORDS(5, 7) 50 +QUBIT_COORDS(6, 6) 51 +QUBIT_COORDS(7, 7) 52 +QUBIT_COORDS(8, 6) 53 +QUBIT_COORDS(9, 7) 54 +QUBIT_COORDS(10, 6) 55 +QUBIT_COORDS(11, 7) 56 +QUBIT_COORDS(12, 6) 57 +QUBIT_COORDS(13, 7) 58 +QUBIT_COORDS(14, 6) 59 +QUBIT_COORDS(0, 8) 60 +QUBIT_COORDS(1, 9) 61 +QUBIT_COORDS(2, 8) 62 +QUBIT_COORDS(3, 9) 63 +QUBIT_COORDS(4, 8) 64 +QUBIT_COORDS(5, 9) 65 +QUBIT_COORDS(6, 8) 66 +QUBIT_COORDS(7, 9) 67 +QUBIT_COORDS(8, 8) 68 +QUBIT_COORDS(9, 9) 69 +QUBIT_COORDS(10, 8) 70 +QUBIT_COORDS(11, 9) 71 +QUBIT_COORDS(12, 8) 72 +QUBIT_COORDS(13, 9) 73 +QUBIT_COORDS(1, 11) 76 +QUBIT_COORDS(2, 10) 77 +QUBIT_COORDS(3, 11) 78 +QUBIT_COORDS(4, 10) 79 +QUBIT_COORDS(5, 11) 80 +QUBIT_COORDS(6, 10) 81 +QUBIT_COORDS(7, 11) 82 +QUBIT_COORDS(8, 10) 83 +QUBIT_COORDS(9, 11) 84 +QUBIT_COORDS(10, 10) 85 +QUBIT_COORDS(11, 11) 86 +QUBIT_COORDS(12, 10) 87 +QUBIT_COORDS(13, 11) 88 +QUBIT_COORDS(14, 10) 89 +QUBIT_COORDS(0, 12) 90 +QUBIT_COORDS(1, 13) 91 +QUBIT_COORDS(2, 12) 92 +QUBIT_COORDS(3, 13) 93 +QUBIT_COORDS(4, 12) 94 +QUBIT_COORDS(5, 13) 95 +QUBIT_COORDS(6, 12) 96 +QUBIT_COORDS(7, 13) 97 +QUBIT_COORDS(8, 12) 98 +QUBIT_COORDS(9, 13) 99 +QUBIT_COORDS(10, 12) 100 +QUBIT_COORDS(11, 13) 101 +QUBIT_COORDS(12, 12) 102 +QUBIT_COORDS(13, 13) 103 +QUBIT_COORDS(4, 14) 109 +QUBIT_COORDS(8, 14) 113 +QUBIT_COORDS(12, 14) 117 +R 1 3 5 7 9 11 13 16 18 20 22 24 26 28 31 33 35 37 39 41 43 46 48 50 52 54 56 58 61 63 65 67 69 71 73 76 78 80 82 84 86 88 91 93 95 97 99 101 103 +X_ERROR(0.001) 1 3 5 7 9 11 13 16 18 20 22 24 26 28 31 33 35 37 39 41 43 46 48 50 52 54 56 58 61 63 65 67 69 71 73 76 78 80 82 84 86 88 91 93 95 97 99 101 103 +R 2 6 10 17 19 21 23 25 27 29 30 32 34 36 38 40 42 47 49 51 53 55 57 59 60 62 64 66 68 70 72 77 79 81 83 85 87 89 90 92 94 96 98 100 102 109 113 117 +X_ERROR(0.001) 2 6 10 17 19 21 23 25 27 29 30 32 34 36 38 40 42 47 49 51 53 55 57 59 60 62 64 66 68 70 72 77 79 81 83 85 87 89 90 92 94 96 98 100 102 109 113 117 +TICK +DEPOLARIZE1(0.001) 1 3 5 7 9 11 13 16 18 20 22 24 26 28 31 33 35 37 39 41 43 46 48 50 52 54 56 58 61 63 65 67 69 71 73 76 78 80 82 84 86 88 91 93 95 97 99 101 103 +H 2 6 10 19 23 27 32 36 40 49 53 57 62 66 70 79 83 87 92 96 100 109 113 117 +DEPOLARIZE1(0.001) 2 6 10 19 23 27 32 36 40 49 53 57 62 66 70 79 83 87 92 96 100 109 113 117 +TICK +CX 2 3 32 33 62 63 92 93 19 20 49 50 79 80 6 7 36 37 66 67 96 97 23 24 53 54 83 84 10 11 40 41 70 71 100 101 27 28 57 58 87 88 31 30 61 60 91 90 18 17 48 47 78 77 35 34 65 64 95 94 22 21 52 51 82 81 39 38 69 68 99 98 26 25 56 55 86 85 43 42 73 72 103 102 +DEPOLARIZE2(0.001) 2 3 32 33 62 63 92 93 19 20 49 50 79 80 6 7 36 37 66 67 96 97 23 24 53 54 83 84 10 11 40 41 70 71 100 101 27 28 57 58 87 88 31 30 61 60 91 90 18 17 48 47 78 77 35 34 65 64 95 94 22 21 52 51 82 81 39 38 69 68 99 98 26 25 56 55 86 85 43 42 73 72 103 102 +TICK +CX 2 1 32 31 62 61 92 91 19 18 49 48 79 78 6 5 36 35 66 65 96 95 23 22 53 52 83 82 10 9 40 39 70 69 100 99 27 26 57 56 87 86 16 30 46 60 76 90 3 17 33 47 63 77 20 34 50 64 80 94 7 21 37 51 67 81 24 38 54 68 84 98 11 25 41 55 71 85 28 42 58 72 88 102 +DEPOLARIZE2(0.001) 2 1 32 31 62 61 92 91 19 18 49 48 79 78 6 5 36 35 66 65 96 95 23 22 53 52 83 82 10 9 40 39 70 69 100 99 27 26 57 56 87 86 16 30 46 60 76 90 3 17 33 47 63 77 20 34 50 64 80 94 7 21 37 51 67 81 24 38 54 68 84 98 11 25 41 55 71 85 28 42 58 72 88 102 +TICK +CX 32 18 62 48 92 78 19 5 49 35 79 65 109 95 36 22 66 52 96 82 23 9 53 39 83 69 113 99 40 26 70 56 100 86 27 13 57 43 87 73 117 103 16 17 46 47 76 77 33 34 63 64 93 94 20 21 50 51 80 81 37 38 67 68 97 98 24 25 54 55 84 85 41 42 71 72 101 102 28 29 58 59 88 89 +DEPOLARIZE2(0.001) 32 18 62 48 92 78 19 5 49 35 79 65 109 95 36 22 66 52 96 82 23 9 53 39 83 69 113 99 40 26 70 56 100 86 27 13 57 43 87 73 117 103 16 17 46 47 76 77 33 34 63 64 93 94 20 21 50 51 80 81 37 38 67 68 97 98 24 25 54 55 84 85 41 42 71 72 101 102 28 29 58 59 88 89 +TICK +CX 32 16 62 46 92 76 19 3 49 33 79 63 109 93 36 20 66 50 96 80 23 7 53 37 83 67 113 97 40 24 70 54 100 84 27 11 57 41 87 71 117 101 1 17 31 47 61 77 18 34 48 64 78 94 5 21 35 51 65 81 22 38 52 68 82 98 9 25 39 55 69 85 26 42 56 72 86 102 13 29 43 59 73 89 +DEPOLARIZE2(0.001) 32 16 62 46 92 76 19 3 49 33 79 63 109 93 36 20 66 50 96 80 23 7 53 37 83 67 113 97 40 24 70 54 100 84 27 11 57 41 87 71 117 101 1 17 31 47 61 77 18 34 48 64 78 94 5 21 35 51 65 81 22 38 52 68 82 98 9 25 39 55 69 85 26 42 56 72 86 102 13 29 43 59 73 89 +TICK +H 2 6 10 19 23 27 32 36 40 49 53 57 62 66 70 79 83 87 92 96 100 109 113 117 +DEPOLARIZE1(0.001) 2 6 10 19 23 27 32 36 40 49 53 57 62 66 70 79 83 87 92 96 100 109 113 117 +TICK +X_ERROR(0.001) 2 6 10 17 19 21 23 25 27 29 30 32 34 36 38 40 42 47 49 51 53 55 57 59 60 62 64 66 68 70 72 77 79 81 83 85 87 89 90 92 94 96 98 100 102 109 113 117 +MR 2 6 10 17 19 21 23 25 27 29 30 32 34 36 38 40 42 47 49 51 53 55 57 59 60 62 64 66 68 70 72 77 79 81 83 85 87 89 90 92 94 96 98 100 102 109 113 117 +X_ERROR(0.001) 2 6 10 17 19 21 23 25 27 29 30 32 34 36 38 40 42 47 49 51 53 55 57 59 60 62 64 66 68 70 72 77 79 81 83 85 87 89 90 92 94 96 98 100 102 109 113 117 +DETECTOR(0, 4, 0) rec[-38] +DETECTOR(0, 8, 0) rec[-24] +DETECTOR(0, 12, 0) rec[-10] +DETECTOR(2, 2, 0) rec[-45] +DETECTOR(2, 6, 0) rec[-31] +DETECTOR(2, 10, 0) rec[-17] +DETECTOR(4, 4, 0) rec[-36] +DETECTOR(4, 8, 0) rec[-22] +DETECTOR(4, 12, 0) rec[-8] +DETECTOR(6, 2, 0) rec[-43] +DETECTOR(6, 6, 0) rec[-29] +DETECTOR(6, 10, 0) rec[-15] +DETECTOR(8, 4, 0) rec[-34] +DETECTOR(8, 8, 0) rec[-20] +DETECTOR(8, 12, 0) rec[-6] +DETECTOR(10, 2, 0) rec[-41] +DETECTOR(10, 6, 0) rec[-27] +DETECTOR(10, 10, 0) rec[-13] +DETECTOR(12, 4, 0) rec[-32] +DETECTOR(12, 8, 0) rec[-18] +DETECTOR(12, 12, 0) rec[-4] +DETECTOR(14, 2, 0) rec[-39] +DETECTOR(14, 6, 0) rec[-25] +DETECTOR(14, 10, 0) rec[-11] +REPEAT 6 { + TICK + DEPOLARIZE1(0.001) 1 3 5 7 9 11 13 16 18 20 22 24 26 28 31 33 35 37 39 41 43 46 48 50 52 54 56 58 61 63 65 67 69 71 73 76 78 80 82 84 86 88 91 93 95 97 99 101 103 + H 2 6 10 19 23 27 32 36 40 49 53 57 62 66 70 79 83 87 92 96 100 109 113 117 + DEPOLARIZE1(0.001) 2 6 10 19 23 27 32 36 40 49 53 57 62 66 70 79 83 87 92 96 100 109 113 117 + TICK + CX 2 3 32 33 62 63 92 93 19 20 49 50 79 80 6 7 36 37 66 67 96 97 23 24 53 54 83 84 10 11 40 41 70 71 100 101 27 28 57 58 87 88 31 30 61 60 91 90 18 17 48 47 78 77 35 34 65 64 95 94 22 21 52 51 82 81 39 38 69 68 99 98 26 25 56 55 86 85 43 42 73 72 103 102 + DEPOLARIZE2(0.001) 2 3 32 33 62 63 92 93 19 20 49 50 79 80 6 7 36 37 66 67 96 97 23 24 53 54 83 84 10 11 40 41 70 71 100 101 27 28 57 58 87 88 31 30 61 60 91 90 18 17 48 47 78 77 35 34 65 64 95 94 22 21 52 51 82 81 39 38 69 68 99 98 26 25 56 55 86 85 43 42 73 72 103 102 + TICK + CX 2 1 32 31 62 61 92 91 19 18 49 48 79 78 6 5 36 35 66 65 96 95 23 22 53 52 83 82 10 9 40 39 70 69 100 99 27 26 57 56 87 86 16 30 46 60 76 90 3 17 33 47 63 77 20 34 50 64 80 94 7 21 37 51 67 81 24 38 54 68 84 98 11 25 41 55 71 85 28 42 58 72 88 102 + DEPOLARIZE2(0.001) 2 1 32 31 62 61 92 91 19 18 49 48 79 78 6 5 36 35 66 65 96 95 23 22 53 52 83 82 10 9 40 39 70 69 100 99 27 26 57 56 87 86 16 30 46 60 76 90 3 17 33 47 63 77 20 34 50 64 80 94 7 21 37 51 67 81 24 38 54 68 84 98 11 25 41 55 71 85 28 42 58 72 88 102 + TICK + CX 32 18 62 48 92 78 19 5 49 35 79 65 109 95 36 22 66 52 96 82 23 9 53 39 83 69 113 99 40 26 70 56 100 86 27 13 57 43 87 73 117 103 16 17 46 47 76 77 33 34 63 64 93 94 20 21 50 51 80 81 37 38 67 68 97 98 24 25 54 55 84 85 41 42 71 72 101 102 28 29 58 59 88 89 + DEPOLARIZE2(0.001) 32 18 62 48 92 78 19 5 49 35 79 65 109 95 36 22 66 52 96 82 23 9 53 39 83 69 113 99 40 26 70 56 100 86 27 13 57 43 87 73 117 103 16 17 46 47 76 77 33 34 63 64 93 94 20 21 50 51 80 81 37 38 67 68 97 98 24 25 54 55 84 85 41 42 71 72 101 102 28 29 58 59 88 89 + TICK + CX 32 16 62 46 92 76 19 3 49 33 79 63 109 93 36 20 66 50 96 80 23 7 53 37 83 67 113 97 40 24 70 54 100 84 27 11 57 41 87 71 117 101 1 17 31 47 61 77 18 34 48 64 78 94 5 21 35 51 65 81 22 38 52 68 82 98 9 25 39 55 69 85 26 42 56 72 86 102 13 29 43 59 73 89 + DEPOLARIZE2(0.001) 32 16 62 46 92 76 19 3 49 33 79 63 109 93 36 20 66 50 96 80 23 7 53 37 83 67 113 97 40 24 70 54 100 84 27 11 57 41 87 71 117 101 1 17 31 47 61 77 18 34 48 64 78 94 5 21 35 51 65 81 22 38 52 68 82 98 9 25 39 55 69 85 26 42 56 72 86 102 13 29 43 59 73 89 + TICK + H 2 6 10 19 23 27 32 36 40 49 53 57 62 66 70 79 83 87 92 96 100 109 113 117 + DEPOLARIZE1(0.001) 2 6 10 19 23 27 32 36 40 49 53 57 62 66 70 79 83 87 92 96 100 109 113 117 + TICK + X_ERROR(0.001) 2 6 10 17 19 21 23 25 27 29 30 32 34 36 38 40 42 47 49 51 53 55 57 59 60 62 64 66 68 70 72 77 79 81 83 85 87 89 90 92 94 96 98 100 102 109 113 117 + MR 2 6 10 17 19 21 23 25 27 29 30 32 34 36 38 40 42 47 49 51 53 55 57 59 60 62 64 66 68 70 72 77 79 81 83 85 87 89 90 92 94 96 98 100 102 109 113 117 + X_ERROR(0.001) 2 6 10 17 19 21 23 25 27 29 30 32 34 36 38 40 42 47 49 51 53 55 57 59 60 62 64 66 68 70 72 77 79 81 83 85 87 89 90 92 94 96 98 100 102 109 113 117 + SHIFT_COORDS(0, 0, 1) + DETECTOR(2, 0, 0) rec[-48] rec[-96] + DETECTOR(6, 0, 0) rec[-47] rec[-95] + DETECTOR(10, 0, 0) rec[-46] rec[-94] + DETECTOR(2, 2, 0) rec[-45] rec[-93] + DETECTOR(4, 2, 0) rec[-44] rec[-92] + DETECTOR(6, 2, 0) rec[-43] rec[-91] + DETECTOR(8, 2, 0) rec[-42] rec[-90] + DETECTOR(10, 2, 0) rec[-41] rec[-89] + DETECTOR(12, 2, 0) rec[-40] rec[-88] + DETECTOR(14, 2, 0) rec[-39] rec[-87] + DETECTOR(0, 4, 0) rec[-38] rec[-86] + DETECTOR(2, 4, 0) rec[-37] rec[-85] + DETECTOR(4, 4, 0) rec[-36] rec[-84] + DETECTOR(6, 4, 0) rec[-35] rec[-83] + DETECTOR(8, 4, 0) rec[-34] rec[-82] + DETECTOR(10, 4, 0) rec[-33] rec[-81] + DETECTOR(12, 4, 0) rec[-32] rec[-80] + DETECTOR(2, 6, 0) rec[-31] rec[-79] + DETECTOR(4, 6, 0) rec[-30] rec[-78] + DETECTOR(6, 6, 0) rec[-29] rec[-77] + DETECTOR(8, 6, 0) rec[-28] rec[-76] + DETECTOR(10, 6, 0) rec[-27] rec[-75] + DETECTOR(12, 6, 0) rec[-26] rec[-74] + DETECTOR(14, 6, 0) rec[-25] rec[-73] + DETECTOR(0, 8, 0) rec[-24] rec[-72] + DETECTOR(2, 8, 0) rec[-23] rec[-71] + DETECTOR(4, 8, 0) rec[-22] rec[-70] + DETECTOR(6, 8, 0) rec[-21] rec[-69] + DETECTOR(8, 8, 0) rec[-20] rec[-68] + DETECTOR(10, 8, 0) rec[-19] rec[-67] + DETECTOR(12, 8, 0) rec[-18] rec[-66] + DETECTOR(2, 10, 0) rec[-17] rec[-65] + DETECTOR(4, 10, 0) rec[-16] rec[-64] + DETECTOR(6, 10, 0) rec[-15] rec[-63] + DETECTOR(8, 10, 0) rec[-14] rec[-62] + DETECTOR(10, 10, 0) rec[-13] rec[-61] + DETECTOR(12, 10, 0) rec[-12] rec[-60] + DETECTOR(14, 10, 0) rec[-11] rec[-59] + DETECTOR(0, 12, 0) rec[-10] rec[-58] + DETECTOR(2, 12, 0) rec[-9] rec[-57] + DETECTOR(4, 12, 0) rec[-8] rec[-56] + DETECTOR(6, 12, 0) rec[-7] rec[-55] + DETECTOR(8, 12, 0) rec[-6] rec[-54] + DETECTOR(10, 12, 0) rec[-5] rec[-53] + DETECTOR(12, 12, 0) rec[-4] rec[-52] + DETECTOR(4, 14, 0) rec[-3] rec[-51] + DETECTOR(8, 14, 0) rec[-2] rec[-50] + DETECTOR(12, 14, 0) rec[-1] rec[-49] +} +X_ERROR(0.001) 1 3 5 7 9 11 13 16 18 20 22 24 26 28 31 33 35 37 39 41 43 46 48 50 52 54 56 58 61 63 65 67 69 71 73 76 78 80 82 84 86 88 91 93 95 97 99 101 103 +M 1 3 5 7 9 11 13 16 18 20 22 24 26 28 31 33 35 37 39 41 43 46 48 50 52 54 56 58 61 63 65 67 69 71 73 76 78 80 82 84 86 88 91 93 95 97 99 101 103 +DETECTOR(0, 4, 1) rec[-35] rec[-42] rec[-87] +DETECTOR(0, 8, 1) rec[-21] rec[-28] rec[-73] +DETECTOR(0, 12, 1) rec[-7] rec[-14] rec[-59] +DETECTOR(2, 2, 1) rec[-41] rec[-42] rec[-48] rec[-49] rec[-94] +DETECTOR(2, 6, 1) rec[-27] rec[-28] rec[-34] rec[-35] rec[-80] +DETECTOR(2, 10, 1) rec[-13] rec[-14] rec[-20] rec[-21] rec[-66] +DETECTOR(4, 4, 1) rec[-33] rec[-34] rec[-40] rec[-41] rec[-85] +DETECTOR(4, 8, 1) rec[-19] rec[-20] rec[-26] rec[-27] rec[-71] +DETECTOR(4, 12, 1) rec[-5] rec[-6] rec[-12] rec[-13] rec[-57] +DETECTOR(6, 2, 1) rec[-39] rec[-40] rec[-46] rec[-47] rec[-92] +DETECTOR(6, 6, 1) rec[-25] rec[-26] rec[-32] rec[-33] rec[-78] +DETECTOR(6, 10, 1) rec[-11] rec[-12] rec[-18] rec[-19] rec[-64] +DETECTOR(8, 4, 1) rec[-31] rec[-32] rec[-38] rec[-39] rec[-83] +DETECTOR(8, 8, 1) rec[-17] rec[-18] rec[-24] rec[-25] rec[-69] +DETECTOR(8, 12, 1) rec[-3] rec[-4] rec[-10] rec[-11] rec[-55] +DETECTOR(10, 2, 1) rec[-37] rec[-38] rec[-44] rec[-45] rec[-90] +DETECTOR(10, 6, 1) rec[-23] rec[-24] rec[-30] rec[-31] rec[-76] +DETECTOR(10, 10, 1) rec[-9] rec[-10] rec[-16] rec[-17] rec[-62] +DETECTOR(12, 4, 1) rec[-29] rec[-30] rec[-36] rec[-37] rec[-81] +DETECTOR(12, 8, 1) rec[-15] rec[-16] rec[-22] rec[-23] rec[-67] +DETECTOR(12, 12, 1) rec[-1] rec[-2] rec[-8] rec[-9] rec[-53] +DETECTOR(14, 2, 1) rec[-36] rec[-43] rec[-88] +DETECTOR(14, 6, 1) rec[-22] rec[-29] rec[-74] +DETECTOR(14, 10, 1) rec[-8] rec[-15] rec[-60] +OBSERVABLE_INCLUDE(0) rec[-43] rec[-44] rec[-45] rec[-46] rec[-47] rec[-48] rec[-49] diff --git a/wai/quantum-cross-simulator/corpus/qec/surface_z_d9.circuit b/wai/quantum-cross-simulator/corpus/qec/surface_z_d9.circuit new file mode 100644 index 000000000..8a382f486 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qec/surface_z_d9.circuit @@ -0,0 +1,377 @@ +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(10, 0) 10 +QUBIT_COORDS(11, 1) 11 +QUBIT_COORDS(13, 1) 13 +QUBIT_COORDS(14, 0) 14 +QUBIT_COORDS(15, 1) 15 +QUBIT_COORDS(17, 1) 17 +QUBIT_COORDS(1, 3) 20 +QUBIT_COORDS(2, 2) 21 +QUBIT_COORDS(3, 3) 22 +QUBIT_COORDS(4, 2) 23 +QUBIT_COORDS(5, 3) 24 +QUBIT_COORDS(6, 2) 25 +QUBIT_COORDS(7, 3) 26 +QUBIT_COORDS(8, 2) 27 +QUBIT_COORDS(9, 3) 28 +QUBIT_COORDS(10, 2) 29 +QUBIT_COORDS(11, 3) 30 +QUBIT_COORDS(12, 2) 31 +QUBIT_COORDS(13, 3) 32 +QUBIT_COORDS(14, 2) 33 +QUBIT_COORDS(15, 3) 34 +QUBIT_COORDS(16, 2) 35 +QUBIT_COORDS(17, 3) 36 +QUBIT_COORDS(18, 2) 37 +QUBIT_COORDS(0, 4) 38 +QUBIT_COORDS(1, 5) 39 +QUBIT_COORDS(2, 4) 40 +QUBIT_COORDS(3, 5) 41 +QUBIT_COORDS(4, 4) 42 +QUBIT_COORDS(5, 5) 43 +QUBIT_COORDS(6, 4) 44 +QUBIT_COORDS(7, 5) 45 +QUBIT_COORDS(8, 4) 46 +QUBIT_COORDS(9, 5) 47 +QUBIT_COORDS(10, 4) 48 +QUBIT_COORDS(11, 5) 49 +QUBIT_COORDS(12, 4) 50 +QUBIT_COORDS(13, 5) 51 +QUBIT_COORDS(14, 4) 52 +QUBIT_COORDS(15, 5) 53 +QUBIT_COORDS(16, 4) 54 +QUBIT_COORDS(17, 5) 55 +QUBIT_COORDS(1, 7) 58 +QUBIT_COORDS(2, 6) 59 +QUBIT_COORDS(3, 7) 60 +QUBIT_COORDS(4, 6) 61 +QUBIT_COORDS(5, 7) 62 +QUBIT_COORDS(6, 6) 63 +QUBIT_COORDS(7, 7) 64 +QUBIT_COORDS(8, 6) 65 +QUBIT_COORDS(9, 7) 66 +QUBIT_COORDS(10, 6) 67 +QUBIT_COORDS(11, 7) 68 +QUBIT_COORDS(12, 6) 69 +QUBIT_COORDS(13, 7) 70 +QUBIT_COORDS(14, 6) 71 +QUBIT_COORDS(15, 7) 72 +QUBIT_COORDS(16, 6) 73 +QUBIT_COORDS(17, 7) 74 +QUBIT_COORDS(18, 6) 75 +QUBIT_COORDS(0, 8) 76 +QUBIT_COORDS(1, 9) 77 +QUBIT_COORDS(2, 8) 78 +QUBIT_COORDS(3, 9) 79 +QUBIT_COORDS(4, 8) 80 +QUBIT_COORDS(5, 9) 81 +QUBIT_COORDS(6, 8) 82 +QUBIT_COORDS(7, 9) 83 +QUBIT_COORDS(8, 8) 84 +QUBIT_COORDS(9, 9) 85 +QUBIT_COORDS(10, 8) 86 +QUBIT_COORDS(11, 9) 87 +QUBIT_COORDS(12, 8) 88 +QUBIT_COORDS(13, 9) 89 +QUBIT_COORDS(14, 8) 90 +QUBIT_COORDS(15, 9) 91 +QUBIT_COORDS(16, 8) 92 +QUBIT_COORDS(17, 9) 93 +QUBIT_COORDS(1, 11) 96 +QUBIT_COORDS(2, 10) 97 +QUBIT_COORDS(3, 11) 98 +QUBIT_COORDS(4, 10) 99 +QUBIT_COORDS(5, 11) 100 +QUBIT_COORDS(6, 10) 101 +QUBIT_COORDS(7, 11) 102 +QUBIT_COORDS(8, 10) 103 +QUBIT_COORDS(9, 11) 104 +QUBIT_COORDS(10, 10) 105 +QUBIT_COORDS(11, 11) 106 +QUBIT_COORDS(12, 10) 107 +QUBIT_COORDS(13, 11) 108 +QUBIT_COORDS(14, 10) 109 +QUBIT_COORDS(15, 11) 110 +QUBIT_COORDS(16, 10) 111 +QUBIT_COORDS(17, 11) 112 +QUBIT_COORDS(18, 10) 113 +QUBIT_COORDS(0, 12) 114 +QUBIT_COORDS(1, 13) 115 +QUBIT_COORDS(2, 12) 116 +QUBIT_COORDS(3, 13) 117 +QUBIT_COORDS(4, 12) 118 +QUBIT_COORDS(5, 13) 119 +QUBIT_COORDS(6, 12) 120 +QUBIT_COORDS(7, 13) 121 +QUBIT_COORDS(8, 12) 122 +QUBIT_COORDS(9, 13) 123 +QUBIT_COORDS(10, 12) 124 +QUBIT_COORDS(11, 13) 125 +QUBIT_COORDS(12, 12) 126 +QUBIT_COORDS(13, 13) 127 +QUBIT_COORDS(14, 12) 128 +QUBIT_COORDS(15, 13) 129 +QUBIT_COORDS(16, 12) 130 +QUBIT_COORDS(17, 13) 131 +QUBIT_COORDS(1, 15) 134 +QUBIT_COORDS(2, 14) 135 +QUBIT_COORDS(3, 15) 136 +QUBIT_COORDS(4, 14) 137 +QUBIT_COORDS(5, 15) 138 +QUBIT_COORDS(6, 14) 139 +QUBIT_COORDS(7, 15) 140 +QUBIT_COORDS(8, 14) 141 +QUBIT_COORDS(9, 15) 142 +QUBIT_COORDS(10, 14) 143 +QUBIT_COORDS(11, 15) 144 +QUBIT_COORDS(12, 14) 145 +QUBIT_COORDS(13, 15) 146 +QUBIT_COORDS(14, 14) 147 +QUBIT_COORDS(15, 15) 148 +QUBIT_COORDS(16, 14) 149 +QUBIT_COORDS(17, 15) 150 +QUBIT_COORDS(18, 14) 151 +QUBIT_COORDS(0, 16) 152 +QUBIT_COORDS(1, 17) 153 +QUBIT_COORDS(2, 16) 154 +QUBIT_COORDS(3, 17) 155 +QUBIT_COORDS(4, 16) 156 +QUBIT_COORDS(5, 17) 157 +QUBIT_COORDS(6, 16) 158 +QUBIT_COORDS(7, 17) 159 +QUBIT_COORDS(8, 16) 160 +QUBIT_COORDS(9, 17) 161 +QUBIT_COORDS(10, 16) 162 +QUBIT_COORDS(11, 17) 163 +QUBIT_COORDS(12, 16) 164 +QUBIT_COORDS(13, 17) 165 +QUBIT_COORDS(14, 16) 166 +QUBIT_COORDS(15, 17) 167 +QUBIT_COORDS(16, 16) 168 +QUBIT_COORDS(17, 17) 169 +QUBIT_COORDS(4, 18) 175 +QUBIT_COORDS(8, 18) 179 +QUBIT_COORDS(12, 18) 183 +QUBIT_COORDS(16, 18) 187 +R 1 3 5 7 9 11 13 15 17 20 22 24 26 28 30 32 34 36 39 41 43 45 47 49 51 53 55 58 60 62 64 66 68 70 72 74 77 79 81 83 85 87 89 91 93 96 98 100 102 104 106 108 110 112 115 117 119 121 123 125 127 129 131 134 136 138 140 142 144 146 148 150 153 155 157 159 161 163 165 167 169 +X_ERROR(0.001) 1 3 5 7 9 11 13 15 17 20 22 24 26 28 30 32 34 36 39 41 43 45 47 49 51 53 55 58 60 62 64 66 68 70 72 74 77 79 81 83 85 87 89 91 93 96 98 100 102 104 106 108 110 112 115 117 119 121 123 125 127 129 131 134 136 138 140 142 144 146 148 150 153 155 157 159 161 163 165 167 169 +R 2 6 10 14 21 23 25 27 29 31 33 35 37 38 40 42 44 46 48 50 52 54 59 61 63 65 67 69 71 73 75 76 78 80 82 84 86 88 90 92 97 99 101 103 105 107 109 111 113 114 116 118 120 122 124 126 128 130 135 137 139 141 143 145 147 149 151 152 154 156 158 160 162 164 166 168 175 179 183 187 +X_ERROR(0.001) 2 6 10 14 21 23 25 27 29 31 33 35 37 38 40 42 44 46 48 50 52 54 59 61 63 65 67 69 71 73 75 76 78 80 82 84 86 88 90 92 97 99 101 103 105 107 109 111 113 114 116 118 120 122 124 126 128 130 135 137 139 141 143 145 147 149 151 152 154 156 158 160 162 164 166 168 175 179 183 187 +TICK +DEPOLARIZE1(0.001) 1 3 5 7 9 11 13 15 17 20 22 24 26 28 30 32 34 36 39 41 43 45 47 49 51 53 55 58 60 62 64 66 68 70 72 74 77 79 81 83 85 87 89 91 93 96 98 100 102 104 106 108 110 112 115 117 119 121 123 125 127 129 131 134 136 138 140 142 144 146 148 150 153 155 157 159 161 163 165 167 169 +H 2 6 10 14 23 27 31 35 40 44 48 52 61 65 69 73 78 82 86 90 99 103 107 111 116 120 124 128 137 141 145 149 154 158 162 166 175 179 183 187 +DEPOLARIZE1(0.001) 2 6 10 14 23 27 31 35 40 44 48 52 61 65 69 73 78 82 86 90 99 103 107 111 116 120 124 128 137 141 145 149 154 158 162 166 175 179 183 187 +TICK +CX 2 3 40 41 78 79 116 117 154 155 23 24 61 62 99 100 137 138 6 7 44 45 82 83 120 121 158 159 27 28 65 66 103 104 141 142 10 11 48 49 86 87 124 125 162 163 31 32 69 70 107 108 145 146 14 15 52 53 90 91 128 129 166 167 35 36 73 74 111 112 149 150 39 38 77 76 115 114 153 152 22 21 60 59 98 97 136 135 43 42 81 80 119 118 157 156 26 25 64 63 102 101 140 139 47 46 85 84 123 122 161 160 30 29 68 67 106 105 144 143 51 50 89 88 127 126 165 164 34 33 72 71 110 109 148 147 55 54 93 92 131 130 169 168 +DEPOLARIZE2(0.001) 2 3 40 41 78 79 116 117 154 155 23 24 61 62 99 100 137 138 6 7 44 45 82 83 120 121 158 159 27 28 65 66 103 104 141 142 10 11 48 49 86 87 124 125 162 163 31 32 69 70 107 108 145 146 14 15 52 53 90 91 128 129 166 167 35 36 73 74 111 112 149 150 39 38 77 76 115 114 153 152 22 21 60 59 98 97 136 135 43 42 81 80 119 118 157 156 26 25 64 63 102 101 140 139 47 46 85 84 123 122 161 160 30 29 68 67 106 105 144 143 51 50 89 88 127 126 165 164 34 33 72 71 110 109 148 147 55 54 93 92 131 130 169 168 +TICK +CX 2 1 40 39 78 77 116 115 154 153 23 22 61 60 99 98 137 136 6 5 44 43 82 81 120 119 158 157 27 26 65 64 103 102 141 140 10 9 48 47 86 85 124 123 162 161 31 30 69 68 107 106 145 144 14 13 52 51 90 89 128 127 166 165 35 34 73 72 111 110 149 148 20 38 58 76 96 114 134 152 3 21 41 59 79 97 117 135 24 42 62 80 100 118 138 156 7 25 45 63 83 101 121 139 28 46 66 84 104 122 142 160 11 29 49 67 87 105 125 143 32 50 70 88 108 126 146 164 15 33 53 71 91 109 129 147 36 54 74 92 112 130 150 168 +DEPOLARIZE2(0.001) 2 1 40 39 78 77 116 115 154 153 23 22 61 60 99 98 137 136 6 5 44 43 82 81 120 119 158 157 27 26 65 64 103 102 141 140 10 9 48 47 86 85 124 123 162 161 31 30 69 68 107 106 145 144 14 13 52 51 90 89 128 127 166 165 35 34 73 72 111 110 149 148 20 38 58 76 96 114 134 152 3 21 41 59 79 97 117 135 24 42 62 80 100 118 138 156 7 25 45 63 83 101 121 139 28 46 66 84 104 122 142 160 11 29 49 67 87 105 125 143 32 50 70 88 108 126 146 164 15 33 53 71 91 109 129 147 36 54 74 92 112 130 150 168 +TICK +CX 40 22 78 60 116 98 154 136 23 5 61 43 99 81 137 119 175 157 44 26 82 64 120 102 158 140 27 9 65 47 103 85 141 123 179 161 48 30 86 68 124 106 162 144 31 13 69 51 107 89 145 127 183 165 52 34 90 72 128 110 166 148 35 17 73 55 111 93 149 131 187 169 20 21 58 59 96 97 134 135 41 42 79 80 117 118 155 156 24 25 62 63 100 101 138 139 45 46 83 84 121 122 159 160 28 29 66 67 104 105 142 143 49 50 87 88 125 126 163 164 32 33 70 71 108 109 146 147 53 54 91 92 129 130 167 168 36 37 74 75 112 113 150 151 +DEPOLARIZE2(0.001) 40 22 78 60 116 98 154 136 23 5 61 43 99 81 137 119 175 157 44 26 82 64 120 102 158 140 27 9 65 47 103 85 141 123 179 161 48 30 86 68 124 106 162 144 31 13 69 51 107 89 145 127 183 165 52 34 90 72 128 110 166 148 35 17 73 55 111 93 149 131 187 169 20 21 58 59 96 97 134 135 41 42 79 80 117 118 155 156 24 25 62 63 100 101 138 139 45 46 83 84 121 122 159 160 28 29 66 67 104 105 142 143 49 50 87 88 125 126 163 164 32 33 70 71 108 109 146 147 53 54 91 92 129 130 167 168 36 37 74 75 112 113 150 151 +TICK +CX 40 20 78 58 116 96 154 134 23 3 61 41 99 79 137 117 175 155 44 24 82 62 120 100 158 138 27 7 65 45 103 83 141 121 179 159 48 28 86 66 124 104 162 142 31 11 69 49 107 87 145 125 183 163 52 32 90 70 128 108 166 146 35 15 73 53 111 91 149 129 187 167 1 21 39 59 77 97 115 135 22 42 60 80 98 118 136 156 5 25 43 63 81 101 119 139 26 46 64 84 102 122 140 160 9 29 47 67 85 105 123 143 30 50 68 88 106 126 144 164 13 33 51 71 89 109 127 147 34 54 72 92 110 130 148 168 17 37 55 75 93 113 131 151 +DEPOLARIZE2(0.001) 40 20 78 58 116 96 154 134 23 3 61 41 99 79 137 117 175 155 44 24 82 62 120 100 158 138 27 7 65 45 103 83 141 121 179 159 48 28 86 66 124 104 162 142 31 11 69 49 107 87 145 125 183 163 52 32 90 70 128 108 166 146 35 15 73 53 111 91 149 129 187 167 1 21 39 59 77 97 115 135 22 42 60 80 98 118 136 156 5 25 43 63 81 101 119 139 26 46 64 84 102 122 140 160 9 29 47 67 85 105 123 143 30 50 68 88 106 126 144 164 13 33 51 71 89 109 127 147 34 54 72 92 110 130 148 168 17 37 55 75 93 113 131 151 +TICK +H 2 6 10 14 23 27 31 35 40 44 48 52 61 65 69 73 78 82 86 90 99 103 107 111 116 120 124 128 137 141 145 149 154 158 162 166 175 179 183 187 +DEPOLARIZE1(0.001) 2 6 10 14 23 27 31 35 40 44 48 52 61 65 69 73 78 82 86 90 99 103 107 111 116 120 124 128 137 141 145 149 154 158 162 166 175 179 183 187 +TICK +X_ERROR(0.001) 2 6 10 14 21 23 25 27 29 31 33 35 37 38 40 42 44 46 48 50 52 54 59 61 63 65 67 69 71 73 75 76 78 80 82 84 86 88 90 92 97 99 101 103 105 107 109 111 113 114 116 118 120 122 124 126 128 130 135 137 139 141 143 145 147 149 151 152 154 156 158 160 162 164 166 168 175 179 183 187 +MR 2 6 10 14 21 23 25 27 29 31 33 35 37 38 40 42 44 46 48 50 52 54 59 61 63 65 67 69 71 73 75 76 78 80 82 84 86 88 90 92 97 99 101 103 105 107 109 111 113 114 116 118 120 122 124 126 128 130 135 137 139 141 143 145 147 149 151 152 154 156 158 160 162 164 166 168 175 179 183 187 +X_ERROR(0.001) 2 6 10 14 21 23 25 27 29 31 33 35 37 38 40 42 44 46 48 50 52 54 59 61 63 65 67 69 71 73 75 76 78 80 82 84 86 88 90 92 97 99 101 103 105 107 109 111 113 114 116 118 120 122 124 126 128 130 135 137 139 141 143 145 147 149 151 152 154 156 158 160 162 164 166 168 175 179 183 187 +DETECTOR(0, 4, 0) rec[-67] +DETECTOR(0, 8, 0) rec[-49] +DETECTOR(0, 12, 0) rec[-31] +DETECTOR(0, 16, 0) rec[-13] +DETECTOR(2, 2, 0) rec[-76] +DETECTOR(2, 6, 0) rec[-58] +DETECTOR(2, 10, 0) rec[-40] +DETECTOR(2, 14, 0) rec[-22] +DETECTOR(4, 4, 0) rec[-65] +DETECTOR(4, 8, 0) rec[-47] +DETECTOR(4, 12, 0) rec[-29] +DETECTOR(4, 16, 0) rec[-11] +DETECTOR(6, 2, 0) rec[-74] +DETECTOR(6, 6, 0) rec[-56] +DETECTOR(6, 10, 0) rec[-38] +DETECTOR(6, 14, 0) rec[-20] +DETECTOR(8, 4, 0) rec[-63] +DETECTOR(8, 8, 0) rec[-45] +DETECTOR(8, 12, 0) rec[-27] +DETECTOR(8, 16, 0) rec[-9] +DETECTOR(10, 2, 0) rec[-72] +DETECTOR(10, 6, 0) rec[-54] +DETECTOR(10, 10, 0) rec[-36] +DETECTOR(10, 14, 0) rec[-18] +DETECTOR(12, 4, 0) rec[-61] +DETECTOR(12, 8, 0) rec[-43] +DETECTOR(12, 12, 0) rec[-25] +DETECTOR(12, 16, 0) rec[-7] +DETECTOR(14, 2, 0) rec[-70] +DETECTOR(14, 6, 0) rec[-52] +DETECTOR(14, 10, 0) rec[-34] +DETECTOR(14, 14, 0) rec[-16] +DETECTOR(16, 4, 0) rec[-59] +DETECTOR(16, 8, 0) rec[-41] +DETECTOR(16, 12, 0) rec[-23] +DETECTOR(16, 16, 0) rec[-5] +DETECTOR(18, 2, 0) rec[-68] +DETECTOR(18, 6, 0) rec[-50] +DETECTOR(18, 10, 0) rec[-32] +DETECTOR(18, 14, 0) rec[-14] +REPEAT 8 { + TICK + DEPOLARIZE1(0.001) 1 3 5 7 9 11 13 15 17 20 22 24 26 28 30 32 34 36 39 41 43 45 47 49 51 53 55 58 60 62 64 66 68 70 72 74 77 79 81 83 85 87 89 91 93 96 98 100 102 104 106 108 110 112 115 117 119 121 123 125 127 129 131 134 136 138 140 142 144 146 148 150 153 155 157 159 161 163 165 167 169 + H 2 6 10 14 23 27 31 35 40 44 48 52 61 65 69 73 78 82 86 90 99 103 107 111 116 120 124 128 137 141 145 149 154 158 162 166 175 179 183 187 + DEPOLARIZE1(0.001) 2 6 10 14 23 27 31 35 40 44 48 52 61 65 69 73 78 82 86 90 99 103 107 111 116 120 124 128 137 141 145 149 154 158 162 166 175 179 183 187 + TICK + CX 2 3 40 41 78 79 116 117 154 155 23 24 61 62 99 100 137 138 6 7 44 45 82 83 120 121 158 159 27 28 65 66 103 104 141 142 10 11 48 49 86 87 124 125 162 163 31 32 69 70 107 108 145 146 14 15 52 53 90 91 128 129 166 167 35 36 73 74 111 112 149 150 39 38 77 76 115 114 153 152 22 21 60 59 98 97 136 135 43 42 81 80 119 118 157 156 26 25 64 63 102 101 140 139 47 46 85 84 123 122 161 160 30 29 68 67 106 105 144 143 51 50 89 88 127 126 165 164 34 33 72 71 110 109 148 147 55 54 93 92 131 130 169 168 + DEPOLARIZE2(0.001) 2 3 40 41 78 79 116 117 154 155 23 24 61 62 99 100 137 138 6 7 44 45 82 83 120 121 158 159 27 28 65 66 103 104 141 142 10 11 48 49 86 87 124 125 162 163 31 32 69 70 107 108 145 146 14 15 52 53 90 91 128 129 166 167 35 36 73 74 111 112 149 150 39 38 77 76 115 114 153 152 22 21 60 59 98 97 136 135 43 42 81 80 119 118 157 156 26 25 64 63 102 101 140 139 47 46 85 84 123 122 161 160 30 29 68 67 106 105 144 143 51 50 89 88 127 126 165 164 34 33 72 71 110 109 148 147 55 54 93 92 131 130 169 168 + TICK + CX 2 1 40 39 78 77 116 115 154 153 23 22 61 60 99 98 137 136 6 5 44 43 82 81 120 119 158 157 27 26 65 64 103 102 141 140 10 9 48 47 86 85 124 123 162 161 31 30 69 68 107 106 145 144 14 13 52 51 90 89 128 127 166 165 35 34 73 72 111 110 149 148 20 38 58 76 96 114 134 152 3 21 41 59 79 97 117 135 24 42 62 80 100 118 138 156 7 25 45 63 83 101 121 139 28 46 66 84 104 122 142 160 11 29 49 67 87 105 125 143 32 50 70 88 108 126 146 164 15 33 53 71 91 109 129 147 36 54 74 92 112 130 150 168 + DEPOLARIZE2(0.001) 2 1 40 39 78 77 116 115 154 153 23 22 61 60 99 98 137 136 6 5 44 43 82 81 120 119 158 157 27 26 65 64 103 102 141 140 10 9 48 47 86 85 124 123 162 161 31 30 69 68 107 106 145 144 14 13 52 51 90 89 128 127 166 165 35 34 73 72 111 110 149 148 20 38 58 76 96 114 134 152 3 21 41 59 79 97 117 135 24 42 62 80 100 118 138 156 7 25 45 63 83 101 121 139 28 46 66 84 104 122 142 160 11 29 49 67 87 105 125 143 32 50 70 88 108 126 146 164 15 33 53 71 91 109 129 147 36 54 74 92 112 130 150 168 + TICK + CX 40 22 78 60 116 98 154 136 23 5 61 43 99 81 137 119 175 157 44 26 82 64 120 102 158 140 27 9 65 47 103 85 141 123 179 161 48 30 86 68 124 106 162 144 31 13 69 51 107 89 145 127 183 165 52 34 90 72 128 110 166 148 35 17 73 55 111 93 149 131 187 169 20 21 58 59 96 97 134 135 41 42 79 80 117 118 155 156 24 25 62 63 100 101 138 139 45 46 83 84 121 122 159 160 28 29 66 67 104 105 142 143 49 50 87 88 125 126 163 164 32 33 70 71 108 109 146 147 53 54 91 92 129 130 167 168 36 37 74 75 112 113 150 151 + DEPOLARIZE2(0.001) 40 22 78 60 116 98 154 136 23 5 61 43 99 81 137 119 175 157 44 26 82 64 120 102 158 140 27 9 65 47 103 85 141 123 179 161 48 30 86 68 124 106 162 144 31 13 69 51 107 89 145 127 183 165 52 34 90 72 128 110 166 148 35 17 73 55 111 93 149 131 187 169 20 21 58 59 96 97 134 135 41 42 79 80 117 118 155 156 24 25 62 63 100 101 138 139 45 46 83 84 121 122 159 160 28 29 66 67 104 105 142 143 49 50 87 88 125 126 163 164 32 33 70 71 108 109 146 147 53 54 91 92 129 130 167 168 36 37 74 75 112 113 150 151 + TICK + CX 40 20 78 58 116 96 154 134 23 3 61 41 99 79 137 117 175 155 44 24 82 62 120 100 158 138 27 7 65 45 103 83 141 121 179 159 48 28 86 66 124 104 162 142 31 11 69 49 107 87 145 125 183 163 52 32 90 70 128 108 166 146 35 15 73 53 111 91 149 129 187 167 1 21 39 59 77 97 115 135 22 42 60 80 98 118 136 156 5 25 43 63 81 101 119 139 26 46 64 84 102 122 140 160 9 29 47 67 85 105 123 143 30 50 68 88 106 126 144 164 13 33 51 71 89 109 127 147 34 54 72 92 110 130 148 168 17 37 55 75 93 113 131 151 + DEPOLARIZE2(0.001) 40 20 78 58 116 96 154 134 23 3 61 41 99 79 137 117 175 155 44 24 82 62 120 100 158 138 27 7 65 45 103 83 141 121 179 159 48 28 86 66 124 104 162 142 31 11 69 49 107 87 145 125 183 163 52 32 90 70 128 108 166 146 35 15 73 53 111 91 149 129 187 167 1 21 39 59 77 97 115 135 22 42 60 80 98 118 136 156 5 25 43 63 81 101 119 139 26 46 64 84 102 122 140 160 9 29 47 67 85 105 123 143 30 50 68 88 106 126 144 164 13 33 51 71 89 109 127 147 34 54 72 92 110 130 148 168 17 37 55 75 93 113 131 151 + TICK + H 2 6 10 14 23 27 31 35 40 44 48 52 61 65 69 73 78 82 86 90 99 103 107 111 116 120 124 128 137 141 145 149 154 158 162 166 175 179 183 187 + DEPOLARIZE1(0.001) 2 6 10 14 23 27 31 35 40 44 48 52 61 65 69 73 78 82 86 90 99 103 107 111 116 120 124 128 137 141 145 149 154 158 162 166 175 179 183 187 + TICK + X_ERROR(0.001) 2 6 10 14 21 23 25 27 29 31 33 35 37 38 40 42 44 46 48 50 52 54 59 61 63 65 67 69 71 73 75 76 78 80 82 84 86 88 90 92 97 99 101 103 105 107 109 111 113 114 116 118 120 122 124 126 128 130 135 137 139 141 143 145 147 149 151 152 154 156 158 160 162 164 166 168 175 179 183 187 + MR 2 6 10 14 21 23 25 27 29 31 33 35 37 38 40 42 44 46 48 50 52 54 59 61 63 65 67 69 71 73 75 76 78 80 82 84 86 88 90 92 97 99 101 103 105 107 109 111 113 114 116 118 120 122 124 126 128 130 135 137 139 141 143 145 147 149 151 152 154 156 158 160 162 164 166 168 175 179 183 187 + X_ERROR(0.001) 2 6 10 14 21 23 25 27 29 31 33 35 37 38 40 42 44 46 48 50 52 54 59 61 63 65 67 69 71 73 75 76 78 80 82 84 86 88 90 92 97 99 101 103 105 107 109 111 113 114 116 118 120 122 124 126 128 130 135 137 139 141 143 145 147 149 151 152 154 156 158 160 162 164 166 168 175 179 183 187 + SHIFT_COORDS(0, 0, 1) + DETECTOR(2, 0, 0) rec[-80] rec[-160] + DETECTOR(6, 0, 0) rec[-79] rec[-159] + DETECTOR(10, 0, 0) rec[-78] rec[-158] + DETECTOR(14, 0, 0) rec[-77] rec[-157] + DETECTOR(2, 2, 0) rec[-76] rec[-156] + DETECTOR(4, 2, 0) rec[-75] rec[-155] + DETECTOR(6, 2, 0) rec[-74] rec[-154] + DETECTOR(8, 2, 0) rec[-73] rec[-153] + DETECTOR(10, 2, 0) rec[-72] rec[-152] + DETECTOR(12, 2, 0) rec[-71] rec[-151] + DETECTOR(14, 2, 0) rec[-70] rec[-150] + DETECTOR(16, 2, 0) rec[-69] rec[-149] + DETECTOR(18, 2, 0) rec[-68] rec[-148] + DETECTOR(0, 4, 0) rec[-67] rec[-147] + DETECTOR(2, 4, 0) rec[-66] rec[-146] + DETECTOR(4, 4, 0) rec[-65] rec[-145] + DETECTOR(6, 4, 0) rec[-64] rec[-144] + DETECTOR(8, 4, 0) rec[-63] rec[-143] + DETECTOR(10, 4, 0) rec[-62] rec[-142] + DETECTOR(12, 4, 0) rec[-61] rec[-141] + DETECTOR(14, 4, 0) rec[-60] rec[-140] + DETECTOR(16, 4, 0) rec[-59] rec[-139] + DETECTOR(2, 6, 0) rec[-58] rec[-138] + DETECTOR(4, 6, 0) rec[-57] rec[-137] + DETECTOR(6, 6, 0) rec[-56] rec[-136] + DETECTOR(8, 6, 0) rec[-55] rec[-135] + DETECTOR(10, 6, 0) rec[-54] rec[-134] + DETECTOR(12, 6, 0) rec[-53] rec[-133] + DETECTOR(14, 6, 0) rec[-52] rec[-132] + DETECTOR(16, 6, 0) rec[-51] rec[-131] + DETECTOR(18, 6, 0) rec[-50] rec[-130] + DETECTOR(0, 8, 0) rec[-49] rec[-129] + DETECTOR(2, 8, 0) rec[-48] rec[-128] + DETECTOR(4, 8, 0) rec[-47] rec[-127] + DETECTOR(6, 8, 0) rec[-46] rec[-126] + DETECTOR(8, 8, 0) rec[-45] rec[-125] + DETECTOR(10, 8, 0) rec[-44] rec[-124] + DETECTOR(12, 8, 0) rec[-43] rec[-123] + DETECTOR(14, 8, 0) rec[-42] rec[-122] + DETECTOR(16, 8, 0) rec[-41] rec[-121] + DETECTOR(2, 10, 0) rec[-40] rec[-120] + DETECTOR(4, 10, 0) rec[-39] rec[-119] + DETECTOR(6, 10, 0) rec[-38] rec[-118] + DETECTOR(8, 10, 0) rec[-37] rec[-117] + DETECTOR(10, 10, 0) rec[-36] rec[-116] + DETECTOR(12, 10, 0) rec[-35] rec[-115] + DETECTOR(14, 10, 0) rec[-34] rec[-114] + DETECTOR(16, 10, 0) rec[-33] rec[-113] + DETECTOR(18, 10, 0) rec[-32] rec[-112] + DETECTOR(0, 12, 0) rec[-31] rec[-111] + DETECTOR(2, 12, 0) rec[-30] rec[-110] + DETECTOR(4, 12, 0) rec[-29] rec[-109] + DETECTOR(6, 12, 0) rec[-28] rec[-108] + DETECTOR(8, 12, 0) rec[-27] rec[-107] + DETECTOR(10, 12, 0) rec[-26] rec[-106] + DETECTOR(12, 12, 0) rec[-25] rec[-105] + DETECTOR(14, 12, 0) rec[-24] rec[-104] + DETECTOR(16, 12, 0) rec[-23] rec[-103] + DETECTOR(2, 14, 0) rec[-22] rec[-102] + DETECTOR(4, 14, 0) rec[-21] rec[-101] + DETECTOR(6, 14, 0) rec[-20] rec[-100] + DETECTOR(8, 14, 0) rec[-19] rec[-99] + DETECTOR(10, 14, 0) rec[-18] rec[-98] + DETECTOR(12, 14, 0) rec[-17] rec[-97] + DETECTOR(14, 14, 0) rec[-16] rec[-96] + DETECTOR(16, 14, 0) rec[-15] rec[-95] + DETECTOR(18, 14, 0) rec[-14] rec[-94] + DETECTOR(0, 16, 0) rec[-13] rec[-93] + DETECTOR(2, 16, 0) rec[-12] rec[-92] + DETECTOR(4, 16, 0) rec[-11] rec[-91] + DETECTOR(6, 16, 0) rec[-10] rec[-90] + DETECTOR(8, 16, 0) rec[-9] rec[-89] + DETECTOR(10, 16, 0) rec[-8] rec[-88] + DETECTOR(12, 16, 0) rec[-7] rec[-87] + DETECTOR(14, 16, 0) rec[-6] rec[-86] + DETECTOR(16, 16, 0) rec[-5] rec[-85] + DETECTOR(4, 18, 0) rec[-4] rec[-84] + DETECTOR(8, 18, 0) rec[-3] rec[-83] + DETECTOR(12, 18, 0) rec[-2] rec[-82] + DETECTOR(16, 18, 0) rec[-1] rec[-81] +} +X_ERROR(0.001) 1 3 5 7 9 11 13 15 17 20 22 24 26 28 30 32 34 36 39 41 43 45 47 49 51 53 55 58 60 62 64 66 68 70 72 74 77 79 81 83 85 87 89 91 93 96 98 100 102 104 106 108 110 112 115 117 119 121 123 125 127 129 131 134 136 138 140 142 144 146 148 150 153 155 157 159 161 163 165 167 169 +M 1 3 5 7 9 11 13 15 17 20 22 24 26 28 30 32 34 36 39 41 43 45 47 49 51 53 55 58 60 62 64 66 68 70 72 74 77 79 81 83 85 87 89 91 93 96 98 100 102 104 106 108 110 112 115 117 119 121 123 125 127 129 131 134 136 138 140 142 144 146 148 150 153 155 157 159 161 163 165 167 169 +DETECTOR(0, 4, 1) rec[-63] rec[-72] rec[-148] +DETECTOR(0, 8, 1) rec[-45] rec[-54] rec[-130] +DETECTOR(0, 12, 1) rec[-27] rec[-36] rec[-112] +DETECTOR(0, 16, 1) rec[-9] rec[-18] rec[-94] +DETECTOR(2, 2, 1) rec[-71] rec[-72] rec[-80] rec[-81] rec[-157] +DETECTOR(2, 6, 1) rec[-53] rec[-54] rec[-62] rec[-63] rec[-139] +DETECTOR(2, 10, 1) rec[-35] rec[-36] rec[-44] rec[-45] rec[-121] +DETECTOR(2, 14, 1) rec[-17] rec[-18] rec[-26] rec[-27] rec[-103] +DETECTOR(4, 4, 1) rec[-61] rec[-62] rec[-70] rec[-71] rec[-146] +DETECTOR(4, 8, 1) rec[-43] rec[-44] rec[-52] rec[-53] rec[-128] +DETECTOR(4, 12, 1) rec[-25] rec[-26] rec[-34] rec[-35] rec[-110] +DETECTOR(4, 16, 1) rec[-7] rec[-8] rec[-16] rec[-17] rec[-92] +DETECTOR(6, 2, 1) rec[-69] rec[-70] rec[-78] rec[-79] rec[-155] +DETECTOR(6, 6, 1) rec[-51] rec[-52] rec[-60] rec[-61] rec[-137] +DETECTOR(6, 10, 1) rec[-33] rec[-34] rec[-42] rec[-43] rec[-119] +DETECTOR(6, 14, 1) rec[-15] rec[-16] rec[-24] rec[-25] rec[-101] +DETECTOR(8, 4, 1) rec[-59] rec[-60] rec[-68] rec[-69] rec[-144] +DETECTOR(8, 8, 1) rec[-41] rec[-42] rec[-50] rec[-51] rec[-126] +DETECTOR(8, 12, 1) rec[-23] rec[-24] rec[-32] rec[-33] rec[-108] +DETECTOR(8, 16, 1) rec[-5] rec[-6] rec[-14] rec[-15] rec[-90] +DETECTOR(10, 2, 1) rec[-67] rec[-68] rec[-76] rec[-77] rec[-153] +DETECTOR(10, 6, 1) rec[-49] rec[-50] rec[-58] rec[-59] rec[-135] +DETECTOR(10, 10, 1) rec[-31] rec[-32] rec[-40] rec[-41] rec[-117] +DETECTOR(10, 14, 1) rec[-13] rec[-14] rec[-22] rec[-23] rec[-99] +DETECTOR(12, 4, 1) rec[-57] rec[-58] rec[-66] rec[-67] rec[-142] +DETECTOR(12, 8, 1) rec[-39] rec[-40] rec[-48] rec[-49] rec[-124] +DETECTOR(12, 12, 1) rec[-21] rec[-22] rec[-30] rec[-31] rec[-106] +DETECTOR(12, 16, 1) rec[-3] rec[-4] rec[-12] rec[-13] rec[-88] +DETECTOR(14, 2, 1) rec[-65] rec[-66] rec[-74] rec[-75] rec[-151] +DETECTOR(14, 6, 1) rec[-47] rec[-48] rec[-56] rec[-57] rec[-133] +DETECTOR(14, 10, 1) rec[-29] rec[-30] rec[-38] rec[-39] rec[-115] +DETECTOR(14, 14, 1) rec[-11] rec[-12] rec[-20] rec[-21] rec[-97] +DETECTOR(16, 4, 1) rec[-55] rec[-56] rec[-64] rec[-65] rec[-140] +DETECTOR(16, 8, 1) rec[-37] rec[-38] rec[-46] rec[-47] rec[-122] +DETECTOR(16, 12, 1) rec[-19] rec[-20] rec[-28] rec[-29] rec[-104] +DETECTOR(16, 16, 1) rec[-1] rec[-2] rec[-10] rec[-11] rec[-86] +DETECTOR(18, 2, 1) rec[-64] rec[-73] rec[-149] +DETECTOR(18, 6, 1) rec[-46] rec[-55] rec[-131] +DETECTOR(18, 10, 1) rec[-28] rec[-37] rec[-113] +DETECTOR(18, 14, 1) rec[-10] rec[-19] rec[-95] +OBSERVABLE_INCLUDE(0) rec[-73] rec[-74] rec[-75] rec[-76] rec[-77] rec[-78] rec[-79] rec[-80] rec[-81] diff --git a/wai/quantum-cross-simulator/corpus/qec/unrotated_z_d3.circuit b/wai/quantum-cross-simulator/corpus/qec/unrotated_z_d3.circuit new file mode 100644 index 000000000..c3e1dd311 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qec/unrotated_z_d3.circuit @@ -0,0 +1,105 @@ +QUBIT_COORDS(0, 0) 0 +QUBIT_COORDS(1, 0) 1 +QUBIT_COORDS(2, 0) 2 +QUBIT_COORDS(3, 0) 3 +QUBIT_COORDS(4, 0) 4 +QUBIT_COORDS(0, 1) 5 +QUBIT_COORDS(1, 1) 6 +QUBIT_COORDS(2, 1) 7 +QUBIT_COORDS(3, 1) 8 +QUBIT_COORDS(4, 1) 9 +QUBIT_COORDS(0, 2) 10 +QUBIT_COORDS(1, 2) 11 +QUBIT_COORDS(2, 2) 12 +QUBIT_COORDS(3, 2) 13 +QUBIT_COORDS(4, 2) 14 +QUBIT_COORDS(0, 3) 15 +QUBIT_COORDS(1, 3) 16 +QUBIT_COORDS(2, 3) 17 +QUBIT_COORDS(3, 3) 18 +QUBIT_COORDS(4, 3) 19 +QUBIT_COORDS(0, 4) 20 +QUBIT_COORDS(1, 4) 21 +QUBIT_COORDS(2, 4) 22 +QUBIT_COORDS(3, 4) 23 +QUBIT_COORDS(4, 4) 24 +R 0 2 4 6 8 10 12 14 16 18 20 22 24 +X_ERROR(0.002) 0 2 4 6 8 10 12 14 16 18 20 22 24 +R 1 3 5 7 9 11 13 15 17 19 21 23 +X_ERROR(0.002) 1 3 5 7 9 11 13 15 17 19 21 23 +TICK +DEPOLARIZE1(0.002) 0 2 4 6 8 10 12 14 16 18 20 22 24 +H 1 3 11 13 21 23 +DEPOLARIZE1(0.002) 1 3 11 13 21 23 +TICK +CX 1 2 11 12 21 22 3 4 13 14 23 24 6 5 16 15 8 7 18 17 +DEPOLARIZE2(0.002) 1 2 11 12 21 22 3 4 13 14 23 24 6 5 16 15 8 7 18 17 +TICK +CX 1 6 11 16 3 8 13 18 10 5 20 15 12 7 22 17 14 9 24 19 +DEPOLARIZE2(0.002) 1 6 11 16 3 8 13 18 10 5 20 15 12 7 22 17 14 9 24 19 +TICK +CX 11 6 21 16 13 8 23 18 0 5 10 15 2 7 12 17 4 9 14 19 +DEPOLARIZE2(0.002) 11 6 21 16 13 8 23 18 0 5 10 15 2 7 12 17 4 9 14 19 +TICK +CX 1 0 11 10 21 20 3 2 13 12 23 22 6 7 16 17 8 9 18 19 +DEPOLARIZE2(0.002) 1 0 11 10 21 20 3 2 13 12 23 22 6 7 16 17 8 9 18 19 +TICK +H 1 3 11 13 21 23 +DEPOLARIZE1(0.002) 1 3 11 13 21 23 +TICK +X_ERROR(0.002) 1 3 5 7 9 11 13 15 17 19 21 23 +MR 1 3 5 7 9 11 13 15 17 19 21 23 +X_ERROR(0.002) 1 3 5 7 9 11 13 15 17 19 21 23 +DETECTOR(0, 1, 0) rec[-10] +DETECTOR(0, 3, 0) rec[-5] +DETECTOR(2, 1, 0) rec[-9] +DETECTOR(2, 3, 0) rec[-4] +DETECTOR(4, 1, 0) rec[-8] +DETECTOR(4, 3, 0) rec[-3] +REPEAT 2 { + TICK + DEPOLARIZE1(0.002) 0 2 4 6 8 10 12 14 16 18 20 22 24 + H 1 3 11 13 21 23 + DEPOLARIZE1(0.002) 1 3 11 13 21 23 + TICK + CX 1 2 11 12 21 22 3 4 13 14 23 24 6 5 16 15 8 7 18 17 + DEPOLARIZE2(0.002) 1 2 11 12 21 22 3 4 13 14 23 24 6 5 16 15 8 7 18 17 + TICK + CX 1 6 11 16 3 8 13 18 10 5 20 15 12 7 22 17 14 9 24 19 + DEPOLARIZE2(0.002) 1 6 11 16 3 8 13 18 10 5 20 15 12 7 22 17 14 9 24 19 + TICK + CX 11 6 21 16 13 8 23 18 0 5 10 15 2 7 12 17 4 9 14 19 + DEPOLARIZE2(0.002) 11 6 21 16 13 8 23 18 0 5 10 15 2 7 12 17 4 9 14 19 + TICK + CX 1 0 11 10 21 20 3 2 13 12 23 22 6 7 16 17 8 9 18 19 + DEPOLARIZE2(0.002) 1 0 11 10 21 20 3 2 13 12 23 22 6 7 16 17 8 9 18 19 + TICK + H 1 3 11 13 21 23 + DEPOLARIZE1(0.002) 1 3 11 13 21 23 + TICK + X_ERROR(0.002) 1 3 5 7 9 11 13 15 17 19 21 23 + MR 1 3 5 7 9 11 13 15 17 19 21 23 + X_ERROR(0.002) 1 3 5 7 9 11 13 15 17 19 21 23 + SHIFT_COORDS(0, 0, 1) + DETECTOR(1, 0, 0) rec[-12] rec[-24] + DETECTOR(3, 0, 0) rec[-11] rec[-23] + DETECTOR(0, 1, 0) rec[-10] rec[-22] + DETECTOR(2, 1, 0) rec[-9] rec[-21] + DETECTOR(4, 1, 0) rec[-8] rec[-20] + DETECTOR(1, 2, 0) rec[-7] rec[-19] + DETECTOR(3, 2, 0) rec[-6] rec[-18] + DETECTOR(0, 3, 0) rec[-5] rec[-17] + DETECTOR(2, 3, 0) rec[-4] rec[-16] + DETECTOR(4, 3, 0) rec[-3] rec[-15] + DETECTOR(1, 4, 0) rec[-2] rec[-14] + DETECTOR(3, 4, 0) rec[-1] rec[-13] +} +X_ERROR(0.002) 0 2 4 6 8 10 12 14 16 18 20 22 24 +M 0 2 4 6 8 10 12 14 16 18 20 22 24 +DETECTOR(0, 1, 1) rec[-8] rec[-10] rec[-13] rec[-23] +DETECTOR(0, 3, 1) rec[-3] rec[-5] rec[-8] rec[-18] +DETECTOR(2, 1, 1) rec[-7] rec[-9] rec[-10] rec[-12] rec[-22] +DETECTOR(2, 3, 1) rec[-2] rec[-4] rec[-5] rec[-7] rec[-17] +DETECTOR(4, 1, 1) rec[-6] rec[-9] rec[-11] rec[-21] +DETECTOR(4, 3, 1) rec[-1] rec[-4] rec[-6] rec[-16] +OBSERVABLE_INCLUDE(0) rec[-11] rec[-12] rec[-13] diff --git a/wai/quantum-cross-simulator/corpus/qec/unrotated_z_d5.circuit b/wai/quantum-cross-simulator/corpus/qec/unrotated_z_d5.circuit new file mode 100644 index 000000000..ef7c00795 --- /dev/null +++ b/wai/quantum-cross-simulator/corpus/qec/unrotated_z_d5.circuit @@ -0,0 +1,217 @@ +QUBIT_COORDS(0, 0) 0 +QUBIT_COORDS(1, 0) 1 +QUBIT_COORDS(2, 0) 2 +QUBIT_COORDS(3, 0) 3 +QUBIT_COORDS(4, 0) 4 +QUBIT_COORDS(5, 0) 5 +QUBIT_COORDS(6, 0) 6 +QUBIT_COORDS(7, 0) 7 +QUBIT_COORDS(8, 0) 8 +QUBIT_COORDS(0, 1) 9 +QUBIT_COORDS(1, 1) 10 +QUBIT_COORDS(2, 1) 11 +QUBIT_COORDS(3, 1) 12 +QUBIT_COORDS(4, 1) 13 +QUBIT_COORDS(5, 1) 14 +QUBIT_COORDS(6, 1) 15 +QUBIT_COORDS(7, 1) 16 +QUBIT_COORDS(8, 1) 17 +QUBIT_COORDS(0, 2) 18 +QUBIT_COORDS(1, 2) 19 +QUBIT_COORDS(2, 2) 20 +QUBIT_COORDS(3, 2) 21 +QUBIT_COORDS(4, 2) 22 +QUBIT_COORDS(5, 2) 23 +QUBIT_COORDS(6, 2) 24 +QUBIT_COORDS(7, 2) 25 +QUBIT_COORDS(8, 2) 26 +QUBIT_COORDS(0, 3) 27 +QUBIT_COORDS(1, 3) 28 +QUBIT_COORDS(2, 3) 29 +QUBIT_COORDS(3, 3) 30 +QUBIT_COORDS(4, 3) 31 +QUBIT_COORDS(5, 3) 32 +QUBIT_COORDS(6, 3) 33 +QUBIT_COORDS(7, 3) 34 +QUBIT_COORDS(8, 3) 35 +QUBIT_COORDS(0, 4) 36 +QUBIT_COORDS(1, 4) 37 +QUBIT_COORDS(2, 4) 38 +QUBIT_COORDS(3, 4) 39 +QUBIT_COORDS(4, 4) 40 +QUBIT_COORDS(5, 4) 41 +QUBIT_COORDS(6, 4) 42 +QUBIT_COORDS(7, 4) 43 +QUBIT_COORDS(8, 4) 44 +QUBIT_COORDS(0, 5) 45 +QUBIT_COORDS(1, 5) 46 +QUBIT_COORDS(2, 5) 47 +QUBIT_COORDS(3, 5) 48 +QUBIT_COORDS(4, 5) 49 +QUBIT_COORDS(5, 5) 50 +QUBIT_COORDS(6, 5) 51 +QUBIT_COORDS(7, 5) 52 +QUBIT_COORDS(8, 5) 53 +QUBIT_COORDS(0, 6) 54 +QUBIT_COORDS(1, 6) 55 +QUBIT_COORDS(2, 6) 56 +QUBIT_COORDS(3, 6) 57 +QUBIT_COORDS(4, 6) 58 +QUBIT_COORDS(5, 6) 59 +QUBIT_COORDS(6, 6) 60 +QUBIT_COORDS(7, 6) 61 +QUBIT_COORDS(8, 6) 62 +QUBIT_COORDS(0, 7) 63 +QUBIT_COORDS(1, 7) 64 +QUBIT_COORDS(2, 7) 65 +QUBIT_COORDS(3, 7) 66 +QUBIT_COORDS(4, 7) 67 +QUBIT_COORDS(5, 7) 68 +QUBIT_COORDS(6, 7) 69 +QUBIT_COORDS(7, 7) 70 +QUBIT_COORDS(8, 7) 71 +QUBIT_COORDS(0, 8) 72 +QUBIT_COORDS(1, 8) 73 +QUBIT_COORDS(2, 8) 74 +QUBIT_COORDS(3, 8) 75 +QUBIT_COORDS(4, 8) 76 +QUBIT_COORDS(5, 8) 77 +QUBIT_COORDS(6, 8) 78 +QUBIT_COORDS(7, 8) 79 +QUBIT_COORDS(8, 8) 80 +R 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 +X_ERROR(0.002) 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 +R 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 +X_ERROR(0.002) 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 +TICK +DEPOLARIZE1(0.002) 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 +H 1 3 5 7 19 21 23 25 37 39 41 43 55 57 59 61 73 75 77 79 +DEPOLARIZE1(0.002) 1 3 5 7 19 21 23 25 37 39 41 43 55 57 59 61 73 75 77 79 +TICK +CX 1 2 19 20 37 38 55 56 73 74 3 4 21 22 39 40 57 58 75 76 5 6 23 24 41 42 59 60 77 78 7 8 25 26 43 44 61 62 79 80 10 9 28 27 46 45 64 63 12 11 30 29 48 47 66 65 14 13 32 31 50 49 68 67 16 15 34 33 52 51 70 69 +DEPOLARIZE2(0.002) 1 2 19 20 37 38 55 56 73 74 3 4 21 22 39 40 57 58 75 76 5 6 23 24 41 42 59 60 77 78 7 8 25 26 43 44 61 62 79 80 10 9 28 27 46 45 64 63 12 11 30 29 48 47 66 65 14 13 32 31 50 49 68 67 16 15 34 33 52 51 70 69 +TICK +CX 1 10 19 28 37 46 55 64 3 12 21 30 39 48 57 66 5 14 23 32 41 50 59 68 7 16 25 34 43 52 61 70 18 9 36 27 54 45 72 63 20 11 38 29 56 47 74 65 22 13 40 31 58 49 76 67 24 15 42 33 60 51 78 69 26 17 44 35 62 53 80 71 +DEPOLARIZE2(0.002) 1 10 19 28 37 46 55 64 3 12 21 30 39 48 57 66 5 14 23 32 41 50 59 68 7 16 25 34 43 52 61 70 18 9 36 27 54 45 72 63 20 11 38 29 56 47 74 65 22 13 40 31 58 49 76 67 24 15 42 33 60 51 78 69 26 17 44 35 62 53 80 71 +TICK +CX 19 10 37 28 55 46 73 64 21 12 39 30 57 48 75 66 23 14 41 32 59 50 77 68 25 16 43 34 61 52 79 70 0 9 18 27 36 45 54 63 2 11 20 29 38 47 56 65 4 13 22 31 40 49 58 67 6 15 24 33 42 51 60 69 8 17 26 35 44 53 62 71 +DEPOLARIZE2(0.002) 19 10 37 28 55 46 73 64 21 12 39 30 57 48 75 66 23 14 41 32 59 50 77 68 25 16 43 34 61 52 79 70 0 9 18 27 36 45 54 63 2 11 20 29 38 47 56 65 4 13 22 31 40 49 58 67 6 15 24 33 42 51 60 69 8 17 26 35 44 53 62 71 +TICK +CX 1 0 19 18 37 36 55 54 73 72 3 2 21 20 39 38 57 56 75 74 5 4 23 22 41 40 59 58 77 76 7 6 25 24 43 42 61 60 79 78 10 11 28 29 46 47 64 65 12 13 30 31 48 49 66 67 14 15 32 33 50 51 68 69 16 17 34 35 52 53 70 71 +DEPOLARIZE2(0.002) 1 0 19 18 37 36 55 54 73 72 3 2 21 20 39 38 57 56 75 74 5 4 23 22 41 40 59 58 77 76 7 6 25 24 43 42 61 60 79 78 10 11 28 29 46 47 64 65 12 13 30 31 48 49 66 67 14 15 32 33 50 51 68 69 16 17 34 35 52 53 70 71 +TICK +H 1 3 5 7 19 21 23 25 37 39 41 43 55 57 59 61 73 75 77 79 +DEPOLARIZE1(0.002) 1 3 5 7 19 21 23 25 37 39 41 43 55 57 59 61 73 75 77 79 +TICK +X_ERROR(0.002) 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 +MR 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 +X_ERROR(0.002) 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 +DETECTOR(0, 1, 0) rec[-36] +DETECTOR(0, 3, 0) rec[-27] +DETECTOR(0, 5, 0) rec[-18] +DETECTOR(0, 7, 0) rec[-9] +DETECTOR(2, 1, 0) rec[-35] +DETECTOR(2, 3, 0) rec[-26] +DETECTOR(2, 5, 0) rec[-17] +DETECTOR(2, 7, 0) rec[-8] +DETECTOR(4, 1, 0) rec[-34] +DETECTOR(4, 3, 0) rec[-25] +DETECTOR(4, 5, 0) rec[-16] +DETECTOR(4, 7, 0) rec[-7] +DETECTOR(6, 1, 0) rec[-33] +DETECTOR(6, 3, 0) rec[-24] +DETECTOR(6, 5, 0) rec[-15] +DETECTOR(6, 7, 0) rec[-6] +DETECTOR(8, 1, 0) rec[-32] +DETECTOR(8, 3, 0) rec[-23] +DETECTOR(8, 5, 0) rec[-14] +DETECTOR(8, 7, 0) rec[-5] +REPEAT 4 { + TICK + DEPOLARIZE1(0.002) 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 + H 1 3 5 7 19 21 23 25 37 39 41 43 55 57 59 61 73 75 77 79 + DEPOLARIZE1(0.002) 1 3 5 7 19 21 23 25 37 39 41 43 55 57 59 61 73 75 77 79 + TICK + CX 1 2 19 20 37 38 55 56 73 74 3 4 21 22 39 40 57 58 75 76 5 6 23 24 41 42 59 60 77 78 7 8 25 26 43 44 61 62 79 80 10 9 28 27 46 45 64 63 12 11 30 29 48 47 66 65 14 13 32 31 50 49 68 67 16 15 34 33 52 51 70 69 + DEPOLARIZE2(0.002) 1 2 19 20 37 38 55 56 73 74 3 4 21 22 39 40 57 58 75 76 5 6 23 24 41 42 59 60 77 78 7 8 25 26 43 44 61 62 79 80 10 9 28 27 46 45 64 63 12 11 30 29 48 47 66 65 14 13 32 31 50 49 68 67 16 15 34 33 52 51 70 69 + TICK + CX 1 10 19 28 37 46 55 64 3 12 21 30 39 48 57 66 5 14 23 32 41 50 59 68 7 16 25 34 43 52 61 70 18 9 36 27 54 45 72 63 20 11 38 29 56 47 74 65 22 13 40 31 58 49 76 67 24 15 42 33 60 51 78 69 26 17 44 35 62 53 80 71 + DEPOLARIZE2(0.002) 1 10 19 28 37 46 55 64 3 12 21 30 39 48 57 66 5 14 23 32 41 50 59 68 7 16 25 34 43 52 61 70 18 9 36 27 54 45 72 63 20 11 38 29 56 47 74 65 22 13 40 31 58 49 76 67 24 15 42 33 60 51 78 69 26 17 44 35 62 53 80 71 + TICK + CX 19 10 37 28 55 46 73 64 21 12 39 30 57 48 75 66 23 14 41 32 59 50 77 68 25 16 43 34 61 52 79 70 0 9 18 27 36 45 54 63 2 11 20 29 38 47 56 65 4 13 22 31 40 49 58 67 6 15 24 33 42 51 60 69 8 17 26 35 44 53 62 71 + DEPOLARIZE2(0.002) 19 10 37 28 55 46 73 64 21 12 39 30 57 48 75 66 23 14 41 32 59 50 77 68 25 16 43 34 61 52 79 70 0 9 18 27 36 45 54 63 2 11 20 29 38 47 56 65 4 13 22 31 40 49 58 67 6 15 24 33 42 51 60 69 8 17 26 35 44 53 62 71 + TICK + CX 1 0 19 18 37 36 55 54 73 72 3 2 21 20 39 38 57 56 75 74 5 4 23 22 41 40 59 58 77 76 7 6 25 24 43 42 61 60 79 78 10 11 28 29 46 47 64 65 12 13 30 31 48 49 66 67 14 15 32 33 50 51 68 69 16 17 34 35 52 53 70 71 + DEPOLARIZE2(0.002) 1 0 19 18 37 36 55 54 73 72 3 2 21 20 39 38 57 56 75 74 5 4 23 22 41 40 59 58 77 76 7 6 25 24 43 42 61 60 79 78 10 11 28 29 46 47 64 65 12 13 30 31 48 49 66 67 14 15 32 33 50 51 68 69 16 17 34 35 52 53 70 71 + TICK + H 1 3 5 7 19 21 23 25 37 39 41 43 55 57 59 61 73 75 77 79 + DEPOLARIZE1(0.002) 1 3 5 7 19 21 23 25 37 39 41 43 55 57 59 61 73 75 77 79 + TICK + X_ERROR(0.002) 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 + MR 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 + X_ERROR(0.002) 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 + SHIFT_COORDS(0, 0, 1) + DETECTOR(1, 0, 0) rec[-40] rec[-80] + DETECTOR(3, 0, 0) rec[-39] rec[-79] + DETECTOR(5, 0, 0) rec[-38] rec[-78] + DETECTOR(7, 0, 0) rec[-37] rec[-77] + DETECTOR(0, 1, 0) rec[-36] rec[-76] + DETECTOR(2, 1, 0) rec[-35] rec[-75] + DETECTOR(4, 1, 0) rec[-34] rec[-74] + DETECTOR(6, 1, 0) rec[-33] rec[-73] + DETECTOR(8, 1, 0) rec[-32] rec[-72] + DETECTOR(1, 2, 0) rec[-31] rec[-71] + DETECTOR(3, 2, 0) rec[-30] rec[-70] + DETECTOR(5, 2, 0) rec[-29] rec[-69] + DETECTOR(7, 2, 0) rec[-28] rec[-68] + DETECTOR(0, 3, 0) rec[-27] rec[-67] + DETECTOR(2, 3, 0) rec[-26] rec[-66] + DETECTOR(4, 3, 0) rec[-25] rec[-65] + DETECTOR(6, 3, 0) rec[-24] rec[-64] + DETECTOR(8, 3, 0) rec[-23] rec[-63] + DETECTOR(1, 4, 0) rec[-22] rec[-62] + DETECTOR(3, 4, 0) rec[-21] rec[-61] + DETECTOR(5, 4, 0) rec[-20] rec[-60] + DETECTOR(7, 4, 0) rec[-19] rec[-59] + DETECTOR(0, 5, 0) rec[-18] rec[-58] + DETECTOR(2, 5, 0) rec[-17] rec[-57] + DETECTOR(4, 5, 0) rec[-16] rec[-56] + DETECTOR(6, 5, 0) rec[-15] rec[-55] + DETECTOR(8, 5, 0) rec[-14] rec[-54] + DETECTOR(1, 6, 0) rec[-13] rec[-53] + DETECTOR(3, 6, 0) rec[-12] rec[-52] + DETECTOR(5, 6, 0) rec[-11] rec[-51] + DETECTOR(7, 6, 0) rec[-10] rec[-50] + DETECTOR(0, 7, 0) rec[-9] rec[-49] + DETECTOR(2, 7, 0) rec[-8] rec[-48] + DETECTOR(4, 7, 0) rec[-7] rec[-47] + DETECTOR(6, 7, 0) rec[-6] rec[-46] + DETECTOR(8, 7, 0) rec[-5] rec[-45] + DETECTOR(1, 8, 0) rec[-4] rec[-44] + DETECTOR(3, 8, 0) rec[-3] rec[-43] + DETECTOR(5, 8, 0) rec[-2] rec[-42] + DETECTOR(7, 8, 0) rec[-1] rec[-41] +} +X_ERROR(0.002) 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 +M 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 +DETECTOR(0, 1, 1) rec[-32] rec[-36] rec[-41] rec[-77] +DETECTOR(0, 3, 1) rec[-23] rec[-27] rec[-32] rec[-68] +DETECTOR(0, 5, 1) rec[-14] rec[-18] rec[-23] rec[-59] +DETECTOR(0, 7, 1) rec[-5] rec[-9] rec[-14] rec[-50] +DETECTOR(2, 1, 1) rec[-31] rec[-35] rec[-36] rec[-40] rec[-76] +DETECTOR(2, 3, 1) rec[-22] rec[-26] rec[-27] rec[-31] rec[-67] +DETECTOR(2, 5, 1) rec[-13] rec[-17] rec[-18] rec[-22] rec[-58] +DETECTOR(2, 7, 1) rec[-4] rec[-8] rec[-9] rec[-13] rec[-49] +DETECTOR(4, 1, 1) rec[-30] rec[-34] rec[-35] rec[-39] rec[-75] +DETECTOR(4, 3, 1) rec[-21] rec[-25] rec[-26] rec[-30] rec[-66] +DETECTOR(4, 5, 1) rec[-12] rec[-16] rec[-17] rec[-21] rec[-57] +DETECTOR(4, 7, 1) rec[-3] rec[-7] rec[-8] rec[-12] rec[-48] +DETECTOR(6, 1, 1) rec[-29] rec[-33] rec[-34] rec[-38] rec[-74] +DETECTOR(6, 3, 1) rec[-20] rec[-24] rec[-25] rec[-29] rec[-65] +DETECTOR(6, 5, 1) rec[-11] rec[-15] rec[-16] rec[-20] rec[-56] +DETECTOR(6, 7, 1) rec[-2] rec[-6] rec[-7] rec[-11] rec[-47] +DETECTOR(8, 1, 1) rec[-28] rec[-33] rec[-37] rec[-73] +DETECTOR(8, 3, 1) rec[-19] rec[-24] rec[-28] rec[-64] +DETECTOR(8, 5, 1) rec[-10] rec[-15] rec[-19] rec[-55] +DETECTOR(8, 7, 1) rec[-1] rec[-6] rec[-10] rec[-46] +OBSERVABLE_INCLUDE(0) rec[-37] rec[-38] rec[-39] rec[-40] rec[-41] diff --git a/wai/quantum-cross-simulator/env/requirements.in b/wai/quantum-cross-simulator/env/requirements.in new file mode 100644 index 000000000..8cf33af29 --- /dev/null +++ b/wai/quantum-cross-simulator/env/requirements.in @@ -0,0 +1,11 @@ +# The pinned engines the corpus compares against, and what they need. Every one publishes +# wheels for macOS on arm64 and Linux on x86_64; not all do for other platforms (stim for +# Linux on arm64, llvmlite, which quimb needs, for macOS on x86_64). +stim==1.16.0 +qiskit==2.6.2 +qiskit-aer==0.18.2 +quimb==1.15.0 +mqt.ddsim==2.7.0 +qsimcirq==0.22.1 +cirq-core==1.7.0 +opt-einsum==3.4.0 diff --git a/wai/quantum-cross-simulator/env/requirements.lock b/wai/quantum-cross-simulator/env/requirements.lock new file mode 100644 index 000000000..8760b9cb2 --- /dev/null +++ b/wai/quantum-cross-simulator/env/requirements.lock @@ -0,0 +1,1246 @@ +absl-py==2.5.1 \ + --hash=sha256:286e71c82c1a38e75bbcf185f9b37d0305ad7786535107cb49bf4df9ff2e1f95 \ + --hash=sha256:721200f2f0e9960f2ca9dc3a2a706b201f5f75d812c158f059cbbe29eeafbdb8 + # via qsimcirq +antlr4-python3-runtime==4.13.2 \ + --hash=sha256:909b647e1d2fc2b70180ac586df3933e38919c85f98ccc656a96cd3f25ef3916 \ + --hash=sha256:fe3835eb8d33daece0e799090eda89719dbccee7aa39ef94eed3818cafa5a7e8 + # via openqasm3 +attrs==26.1.0 \ + --hash=sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309 \ + --hash=sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32 + # via cirq-core +autoray==0.11.0 \ + --hash=sha256:2e9ca95070834574e054162ee02946d2414f7821f65960308b95f49d08ee9227 \ + --hash=sha256:ef9c23d8307f2e5030d10dd222d304401450157172a6fcc6f7456b6e82681bf4 + # via + # cotengra + # quimb +cirq-core==1.7.0 \ + --hash=sha256:9d2e9610b06e2b2b2195184f44c0df4e94f31485831f8e1c6a96c858b7897bce + # via + # -r requirements.in + # qsimcirq +colorama==0.4.6 ; sys_platform == 'win32' \ + --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ + --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + # via tqdm +contourpy==1.3.2 \ + --hash=sha256:0475b1f6604896bc7c53bb070e355e9321e1bc0d381735421a2d2068ec56531f \ + --hash=sha256:106fab697af11456fcba3e352ad50effe493a90f893fca6c2ca5c033820cea92 \ + --hash=sha256:107ba8a6a7eec58bb475329e6d3b95deba9440667c4d62b9b6063942b61d7f16 \ + --hash=sha256:15ce6ab60957ca74cff444fe66d9045c1fd3e92c8936894ebd1f3eef2fff075f \ + --hash=sha256:1c48188778d4d2f3d48e4643fb15d8608b1d01e4b4d6b0548d9b336c28fc9b6f \ + --hash=sha256:3859783aefa2b8355697f16642695a5b9792e7a46ab86da1118a4a23a51a33d7 \ + --hash=sha256:3d80b2c0300583228ac98d0a927a1ba6a2ba6b8a742463c564f1d419ee5b211e \ + --hash=sha256:3f9e896f447c5c8618f1edb2bafa9a4030f22a575ec418ad70611450720b5b08 \ + --hash=sha256:434f0adf84911c924519d2b08fc10491dd282b20bdd3fa8f60fd816ea0b48841 \ + --hash=sha256:49b65a95d642d4efa8f64ba12558fcb83407e58a2dfba9d796d77b63ccfcaff5 \ + --hash=sha256:4caf2bcd2969402bf77edc4cb6034c7dd7c0803213b3523f111eb7460a51b8d2 \ + --hash=sha256:532fd26e715560721bb0d5fc7610fce279b3699b018600ab999d1be895b09415 \ + --hash=sha256:5ebac872ba09cb8f2131c46b8739a7ff71de28a24c869bcad554477eb089a878 \ + --hash=sha256:5f5964cdad279256c084b69c3f412b7801e15356b16efa9d78aa974041903da0 \ + --hash=sha256:65a887a6e8c4cd0897507d814b14c54a8c2e2aa4ac9f7686292f9769fcf9a6ab \ + --hash=sha256:6a37a2fb93d4df3fc4c0e363ea4d16f83195fc09c891bc8ce072b9d084853445 \ + --hash=sha256:70771a461aaeb335df14deb6c97439973d253ae70660ca085eec25241137ef43 \ + --hash=sha256:71e2bd4a1c4188f5c2b8d274da78faab884b59df20df63c34f74aa1813c4427c \ + --hash=sha256:745b57db7758f3ffc05a10254edd3182a2a83402a89c00957a8e8a22f5582823 \ + --hash=sha256:78e9253c3de756b3f6a5174d024c4835acd59eb3f8e2ca13e775dbffe1558f69 \ + --hash=sha256:82199cb78276249796419fe36b7386bd8d2cc3f28b3bc19fe2454fe2e26c4c15 \ + --hash=sha256:8b7fc0cd78ba2f4695fd0a6ad81a19e7e3ab825c31b577f384aa9d7817dc3bef \ + --hash=sha256:8c5acb8dddb0752bf252e01a3035b21443158910ac16a3b0d20e7fed7d534ce5 \ + --hash=sha256:8c942a01d9163e2e5cfb05cb66110121b8d07ad438a17f9e766317bcb62abf73 \ + --hash=sha256:8d2e74acbcba3bfdb6d9d8384cdc4f9260cae86ed9beee8bd5f54fee49a430b9 \ + --hash=sha256:90df94c89a91b7362e1142cbee7568f86514412ab8a2c0d0fca72d7e91b62912 \ + --hash=sha256:970e9173dbd7eba9b4e01aab19215a48ee5dd3f43cef736eebde064a171f89a5 \ + --hash=sha256:977e98a0e0480d3fe292246417239d2d45435904afd6d7332d8455981c408b85 \ + --hash=sha256:9be002b31c558d1ddf1b9b415b162c603405414bacd6932d031c5b5a8b757f0d \ + --hash=sha256:ad687a04bc802cbe8b9c399c07162a3c35e227e2daccf1668eb1f278cb698631 \ + --hash=sha256:b4f54d6a2defe9f257327b0f243612dd051cc43825587520b1bf74a31e2f6ef2 \ + --hash=sha256:b6945942715a034c671b7fc54f9588126b0b8bf23db2696e3ca8328f3ff0ab54 \ + --hash=sha256:b7cd50c38f500bbcc9b6a46643a40e0913673f869315d8e70de0438817cb7773 \ + --hash=sha256:ba38e3f9f330af820c4b27ceb4b9c7feee5fe0493ea53a8720f4792667465934 \ + --hash=sha256:c440093bbc8fc21c637c03bafcbef95ccd963bc6e0514ad887932c18ca2a759a \ + --hash=sha256:c49f73e61f1f774650a55d221803b101d966ca0c5a2d6d5e4320ec3997489441 \ + --hash=sha256:c66c4906cdbc50e9cba65978823e6e00b45682eb09adbb78c9775b74eb222422 \ + --hash=sha256:c6c4639a9c22230276b7bffb6a850dfc8258a2521305e1faefe804d006b2e532 \ + --hash=sha256:c85bb486e9be652314bb5b9e2e3b0d1b2e643d5eec4992c0fbe8ac71775da739 \ + --hash=sha256:cc829960f34ba36aad4302e78eabf3ef16a3a100863f0d4eeddf30e8a485a03b \ + --hash=sha256:cdd22595308f53ef2f891040ab2b93d79192513ffccbd7fe19be7aa773a5e09f \ + --hash=sha256:d0e589ae0d55204991450bb5c23f571c64fe43adaa53f93fc902a84c96f52fe1 \ + --hash=sha256:d14f12932a8d620e307f715857107b1d1845cc44fdb5da2bc8e850f5ceba9f87 \ + --hash=sha256:d32530b534e986374fc19eaa77fcb87e8a99e5431499949b828312bdcd20ac52 \ + --hash=sha256:d6658ccc7251a4433eebd89ed2672c2ed96fba367fd25ca9512aa92a4b46c4f1 \ + --hash=sha256:d91a3ccc7fea94ca0acab82ceb77f396d50a1f67412efe4c526f5d20264e6ecd \ + --hash=sha256:dc41ba0714aa2968d1f8674ec97504a8f7e334f48eeacebcaa6256213acb0989 \ + --hash=sha256:de39db2604ae755316cb5967728f4bea92685884b1e767b7c24e983ef5f771cb \ + --hash=sha256:de425af81b6cea33101ae95ece1f696af39446db9682a0b56daaa48cfc29f38f \ + --hash=sha256:ded1706ed0c1049224531b81128efbd5084598f18d8a2d9efae833edbd2b40ad \ + --hash=sha256:e1578f7eafce927b168752ed7e22646dad6cd9bca673c60bff55889fa236ebf9 \ + --hash=sha256:e259bced5549ac64410162adc973c5e2fb77f04df4a439d00b478e57a0e65512 \ + --hash=sha256:e298e7e70cf4eb179cc1077be1c725b5fd131ebc81181bf0c03525c8abc297fd \ + --hash=sha256:eab0f6db315fa4d70f1d8ab514e527f0366ec021ff853d7ed6a2d33605cf4b83 \ + --hash=sha256:f26b383144cf2d2c29f01a1e8170f50dacf0eac02d64139dcd709a8ac4eb3cfe \ + --hash=sha256:f939a054192ddc596e031e50bb13b657ce318cf13d264f095ce9db7dc6ae81c0 \ + --hash=sha256:fd93cc7f3139b6dd7aab2f26a90dde0aa9fc264dbf70f6740d498a70b860b82c + # via + # matplotlib + # qsimcirq +cotengra==0.8.3 \ + --hash=sha256:51748e29714489d15f456055a69cb784c37e7215f0729108cdfd9ff74c00ae98 \ + --hash=sha256:848ca60c61d932d1747774fe40d87de90c899d0327c7d6f90c5eff1d617126bc + # via quimb +cycler==0.12.1 \ + --hash=sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30 \ + --hash=sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c + # via matplotlib +cytoolz==1.2.0 \ + --hash=sha256:014accc95d06d7ef5040f482567dd4833d8ecfc99c2c3503594d860d80b4e055 \ + --hash=sha256:018ac56c3263b1d258c5f2be0473494a2a3cc6e3c1568a609adedfb28d93bf41 \ + --hash=sha256:023f62bd5cc9324da6f837386a8e5f960b576063ebaa75ebd2ec54a5c8e9f9d1 \ + --hash=sha256:0240efe4710e274b76594c1a04c47819ace3cc6c0a8281d6c885562bd52aa1da \ + --hash=sha256:0298a3eb3b6f9b441cab463cc8273dbb99c6acd79491bcccf48a195f55a9e9f5 \ + --hash=sha256:040bc9f38b3867428884cb902503032b312fc5d3306fa4689ac2b114fa981341 \ + --hash=sha256:047a1a54d58718738e4bd79a11ca83989129e0b2ec997311e6d15b8ebe2d5a16 \ + --hash=sha256:0544835a24a4239aa221fec3e49e35f05c775ba7ac1e20b2a6a2064c297b0418 \ + --hash=sha256:059117147f90646dc99958bb7875531e8d7cf2ec7b39f9ee3d23fac1300b9730 \ + --hash=sha256:08a9cb2d25e40919bc5f49857da044300bf4fb7c7fb0280c125669cbe34115b6 \ + --hash=sha256:092701b9c1fcc5169156fadd393db1a1ed0473e86475fd402241cd843df7b037 \ + --hash=sha256:09296d0aaca108c89323e8301558bddf8ac4c1e85ac572633c2852474329dc76 \ + --hash=sha256:0b3f663bfa65d4d38acd3b98b8cfc82b0ca2914ccb8285d60435d5f7d7e7727e \ + --hash=sha256:0d8b5b0e9af57a9ee253cf7f29775e1eabbacad4e6ad41a2e30498f9054835cf \ + --hash=sha256:0f88b60393636ce8f6801d11335cfd9213725c89efd46b8fe788f16f7d1a8657 \ + --hash=sha256:101633cfee814f6d9a5e2d5f3ff16019db9697d55d149e3436e7316c5a19f8ec \ + --hash=sha256:102a293f27a49a20b0f7f205e3a4915d55e9c31c2c540ed0c83ca424bff2374e \ + --hash=sha256:10389a0711f4a00630bece585da224c115be81ea7bef1d38c4a8529b0a631c00 \ + --hash=sha256:117c3a8c154b56e95c3cc0d96e8febaf727bdf846fe5fed28280ed6a6d8b2b36 \ + --hash=sha256:11ed7cb04e0ff4d777698d19ea7e7d3aa247f300a6c86d942b88a4e05108b5fa \ + --hash=sha256:12796227b954cd8fd9e264b4a4a3bc4036b4ca73fe35b5737481e78879d9cbaf \ + --hash=sha256:132ef98602b3d4ec2d83bb0e073de280ca69538841e4b2ff1079fedb07882324 \ + --hash=sha256:1842d175dddbbb14bf7ef7a06e9f39907db60d9d41dcc13366f51af128717606 \ + --hash=sha256:1a819a4f512944b364b86dc551c391aaab901e890f41d65f0aecc7e7e7b8a2e3 \ + --hash=sha256:1b5bc4bf6af65af7039276ab701abf09f1f1f1ee66b7059f2377c64d4faeef56 \ + --hash=sha256:1c967cb0073aee5c6c4c46534d7591a7a2ba4d8b1387a1ddc353f97cc9a11d5e \ + --hash=sha256:20339e9aadcc20fa6b9a64063d92978b36fa338a444dc0657f54f0ccaa649d3b \ + --hash=sha256:20fee7dc262a3b49fea974efb3ca6c5523b8bebcd3942cb9bb8ef34e60f07f9b \ + --hash=sha256:21724ba0e21b92289122ec84185b5c3b1882395958de505e5aa2b95a2e967966 \ + --hash=sha256:22c060a3de0c3628fcb7f9e7690ba7b5164e8cd78d831628046a33657715afa6 \ + --hash=sha256:243d533c949c334286cb06080ae0d94f7efbdc64218d05f7f0f9acb754f5efc9 \ + --hash=sha256:26726524d5348adbecdec799aed4a1cb277ceac9fb0df042cb0979abce8c19c4 \ + --hash=sha256:2a83a4c8d2274fa28b9445b973e25965314b852a0c0a29ba5fb70f7416a839ff \ + --hash=sha256:2c4badd009e02702f3e410ac7e8bcfd37c40699526ed2814bcf73c5795e8db57 \ + --hash=sha256:2d0164d7d418e7099501de66bb40068e53585e35341469dc7548a39f320c7ab1 \ + --hash=sha256:2e76017e5ebdcf803eb3f313eee5afd696701e129a31b0d169e2f55816712714 \ + --hash=sha256:2ef10773f9a41baceec29432ce5dabfd9267bdc7608cd0c28ce53b0e354434be \ + --hash=sha256:30134d21ae4c5319bede38ce153bb906585be78d168bfd77a050ffd5bf5c6bfa \ + --hash=sha256:30f5987bd84f2743bee69b5b776b3d39613228d7779a44fdf14b77b199cc35f6 \ + --hash=sha256:34fab06d105869b48af8bb8316c4293bfa165f2a07cefbd18f550ec2ec03d536 \ + --hash=sha256:3546b76c00cdf4ed9c37a6a39426f35e05435b5c9f288a6d074c42c93e3055c5 \ + --hash=sha256:386f26bbde26e87b76ccc68daabb6ca50dc73e87e144690a9240bac1a5325114 \ + --hash=sha256:3afe377ed8dd31174f0457bb641e05df12b50fd5981c69e8801aae1cd6ed9155 \ + --hash=sha256:3b04cbb776ab4a996cf6b61c03af931c4b62b4b0ff9e0cc20e26a64155631e74 \ + --hash=sha256:3d1b76bf267b59fe437beb5fa1013cc56efd0e84ce04cbfa6d077940426f3980 \ + --hash=sha256:3d77764cca1a097b738e0ea5969bcfdae513441c3a34724a9ba59769b5efe910 \ + --hash=sha256:3ee7c5dddee7cdfd1fbacce06d2c6bb9c1d9041f4920809ca5100a0ff18c8ab7 \ + --hash=sha256:3eebe9e05af65052c168a204551a7bd2db61a38bfda9e512688bfd939878630b \ + --hash=sha256:3f2b78d40376094216e15969afeccb0aa6730bd8e2237f9ef9c978bca080d2bb \ + --hash=sha256:3faf310d09b98e6e53c85f84f7705ebf24a903b672219d5510880ab7be92cff3 \ + --hash=sha256:3fcecd2000087515d19cb6abfab26e58078059bc204b6d3839976a08868dd56f \ + --hash=sha256:3fefc24a365673fa77c0bc10c4314d8761a1d4153edc912d834f3abfa0928eea \ + --hash=sha256:407e3111d7ad2f4120aca06682a36f12e920819bee73225b81bd9eb1e8c01cc8 \ + --hash=sha256:4279744ddcdd751085488abc3cb3c32e35e301e625f9cc1120d679017dcaec39 \ + --hash=sha256:430e22e81900a714da93a69ef02c4c326b85717b1d9346e316ef1a36401321cc \ + --hash=sha256:4397cf6bb88fd202ba57c5d3d9bb474edebc758d3564c6b60a6cad4c4a6dbf06 \ + --hash=sha256:44eb992772bac234a43a6c5345d7748e21643762a9a26612934bb387515912e6 \ + --hash=sha256:46078aae6e4d55962a7e331ca12bac637b0eeea7c4d7ba27763b7ac7561ac9f7 \ + --hash=sha256:473c769c5886141bdd1b5de9806f0992f4ca512a692ee65ce05f78ae1bef5b2a \ + --hash=sha256:4815f2cf3d2b5ff40c8f1edb9089e6e479fd81b0eef107fe494e28e12c1f81ed \ + --hash=sha256:484211d4732bd9b587c7422e5043e00775e3327017519f81d8ff166b00c85af7 \ + --hash=sha256:49093863e870e79a158c189ed11485bd63a7c7f5b7b12eb87f627f64fcc5366b \ + --hash=sha256:496d4e8e3586bbcef58f42f51784a679ed3bababd9f19e7ddb7adaa3de1ddf1a \ + --hash=sha256:4d4078d0b9860b0e0a07cf82dee774a8ca7baaffa343e607732b77fdbec28157 \ + --hash=sha256:50997f36106a784831fb8a39a8adba274040382e85e74c96598f69f9f13333a1 \ + --hash=sha256:517cd4efc345df2a8eb146e65f002934e24b7b9245af8ea74ed1b3611d7df6f2 \ + --hash=sha256:51e389999d225f092ec660011c307e14d9de0a5ad8b14963d7ee18ea9d0ad59b \ + --hash=sha256:529165b178b7bea732e40d8122fbe04339948ac79188a58c72c64bfc19a54e56 \ + --hash=sha256:53c81e501d35affceedbb810ac43de56eafa45cd45b45a2970396da746587597 \ + --hash=sha256:5418e99f53aa0be404cf7fa2f1f1915bd0bd6340bcba38cdde6d2164cebaf0ac \ + --hash=sha256:558889d8cc6c6c9da71c4c3219d8ce83f0b64346e5a9822454ddb5410312e82e \ + --hash=sha256:59c8b1f59fd36dcf6eade8a54031804ea4a81bca004ae5c89c0ca19348e52782 \ + --hash=sha256:5a5567b397218529989c492fb646d7484b754d3ba1c8e50d7baced86b878aa63 \ + --hash=sha256:5a67a1ae9746a2942448743a097d836a4567b7119be93e01ec962b605a16cac2 \ + --hash=sha256:602b7f6f081f89bbd115ef255572ffa204480163d23ffb6e6529c778bc7d7359 \ + --hash=sha256:60870e904fde37aaa7aaf57eaaa287fa574d3b721d1c4913284984236f10fe44 \ + --hash=sha256:662ba3e27eeb9662e258f9d8e3f17ce55a3e4c6484bfcdc8dff9ae754f0f4099 \ + --hash=sha256:66fad0e07f0ab568030db93298d583b204cba7123b7728a64a20260ec4ca40ca \ + --hash=sha256:6721c3bac1a2c1fc0a151f2d0e41b152aacb0ecb79c66cae624641bf1b695df0 \ + --hash=sha256:68028b49df3fa5b1126f0f266085bed81aeabe726dc13659875d0953da92df60 \ + --hash=sha256:69b74289052caf6f892d85b3bf36f53e63fbbeb34cb4e9e3d6f5eb509917527a \ + --hash=sha256:6aa47e523ebebddf4c8da475985befc30470cc908cafa41fdb25bd3db5373baf \ + --hash=sha256:6b17ac998160b59d9ad31f8337078c663971a473ac17b4570739a938b2b8b298 \ + --hash=sha256:6c1f4ea53877632c92b7b0471b8ce128dcba2ecaa40d13c051bee715ecdca255 \ + --hash=sha256:6e6c3c2815ade563a496c7f4dc29630c16ba1f76547542c948bf2d46bb53736a \ + --hash=sha256:6ebe99f69fb9854ab956d4c066bb82833ee09401977cfd6a5a1274171e27c310 \ + --hash=sha256:6f468aa68a751d254d3f6159cfa99c273c3c08196dd796ba0fe913ff2dc7e267 \ + --hash=sha256:718248bab4d91dc28d3fa7b9bb77b89ab8d48c4c1dee89e3d411dde5cb4d0a4a \ + --hash=sha256:72eeb2b32bcbacefbed82b236386ade1867fff1da261e2b030cc703ffeea0feb \ + --hash=sha256:73ffb4e056217328269aa12e1932726cd2839353fa47100ff3e441a339495a47 \ + --hash=sha256:756442c6b537af09b07b58aa2596b036e558a82ec257de7dcfde1624c1ebd6d5 \ + --hash=sha256:762aff004c487e0ed24d6de2ce6791ca688cf76b2364e7a679872b82fec8c96a \ + --hash=sha256:76b344d42f34d89e8ddd175b8918aad3216b93de0c224ecff022afdc6bb95e74 \ + --hash=sha256:788ef782e107781be3d5e26f139723330efe2501e3af7311d00ff0c95eb6d948 \ + --hash=sha256:79029525176cdb3890a5c646a464d6ea760bdf4c7a046735ef50c5d79e953d09 \ + --hash=sha256:795285dc9baa51c6b96ab34c3769f85ef6f8d991b498f265d873a7871126beab \ + --hash=sha256:7b5b620748488cfc379e5376b845dbd5116429882ca0d1aa954afaa636ffb9d9 \ + --hash=sha256:7e479e89b13fa41a4fa3d70cbe94265df197a0b1a6b9e3497dba61cf02f101d5 \ + --hash=sha256:808cd21ccbd11a861e3d71757b7e2bb3077bb43e217f777302a1962a5271249e \ + --hash=sha256:80f25953abfd097e9426e852d0ee5af91013b38203c3b7686fca008774d79151 \ + --hash=sha256:84784c3ba3a6676f4498c85eac60ba4be90b3afd5a292e2664024e105055d436 \ + --hash=sha256:85eac212c9c371ab0e67d5167a0679427c9a914482368276bf3398d9a45e1f8d \ + --hash=sha256:8750d01346b2daee5084766b5b0e306c105e877b8bbe74a8e68682c4c29bbebc \ + --hash=sha256:87cefa6e471672802630bab22fb808bdda41c58b50a2ab0b1cdc8f507ae2f950 \ + --hash=sha256:87d56e129b50e69df8321c804f614ce7681324da03226802ee5da4884a81ab52 \ + --hash=sha256:883cef4cc648e3506121b77e486ee4abdaf7819a8f4264345c7b39accbd52d48 \ + --hash=sha256:88636d4e3f722f38943560f7ed581807acbe9d88790c8f20a251660127b9c02c \ + --hash=sha256:89f4d870d53cbf0a8876ced47aed11da66757bf93b523af309c1bbb5dc695eb4 \ + --hash=sha256:8a46ee8f86cc9644f60d440633a71a304d987f88ad62cd7f97418d08a7317a7a \ + --hash=sha256:8b67af224d2d5530abf5dcfc5b869628d8cabd69d969ba7efbb03495cf157160 \ + --hash=sha256:8dcd865382e37ff11c95b74144d4b2a14b87e840c4d3e9ca0b41aaa4b16b0648 \ + --hash=sha256:8f0f1c48e204ba3ea4a5adbc0de12f09b440e4d88f50da5512e42a580d774366 \ + --hash=sha256:91817f4bee837996ce9d623210cf8da8d1ad0876672c088ab14b8ae96c60dd33 \ + --hash=sha256:91da85729205c16877fa6e9631c9e8f141677b7a9986473f718b39c8fc4c0ba9 \ + --hash=sha256:91fba29f49057375ade7622c98eeb3fc4f718c809b2f2b16bfbdbaeada442250 \ + --hash=sha256:921e256e70436a719ea9887fd07ece4adbd54f5d19a9d0131f6789743af62686 \ + --hash=sha256:9424e82acf7001ad5fcc7b3346a239967022b1f4b7a1b057dbaaebd746cf168f \ + --hash=sha256:958b793f01a4ab5d9df91aba30dbde225b8acf1d83dd0394b159030b2ad82972 \ + --hash=sha256:979217911f7a6749a225c84fe642b3357476d4f723a94557bd9ce9d4f106daa3 \ + --hash=sha256:994c39a0fc47498927beedf7b50aa45f3a16ad2d2fe4358cf06c2e77874eded3 \ + --hash=sha256:9ba345986e31edc60276061c33533f839b0f5b165a160b7e0235dc019fe3eaa4 \ + --hash=sha256:9bb93d6cc39708daf4ac6d91b5ac92a1955c2f3bef54f8e51c7ab664a88c0d62 \ + --hash=sha256:9e1dff3d8e2c6020d239e4ecfad5b9ed46b04e2aeafb395ed8e6c011c1d394cc \ + --hash=sha256:9e99002216c0fc79e544297677641031b48fc03c84b0d39f4364fc5a49730c46 \ + --hash=sha256:9f37c629ffe37c82e08946e9171a23f2e33cfd8aaf2d982fdbdc9a066994e648 \ + --hash=sha256:9f4cf9332500cb990f5076403f8e7f69391823dbab4ea9b3ecefc277a7169794 \ + --hash=sha256:9f725efd5755af042ce91b7f25ccfd91fcb45eecdc9cfb9d8225c0d4ce805822 \ + --hash=sha256:a088a9c2922ce596a6e4d971e6781f23f594ded8399f143328d406da2f03b8a4 \ + --hash=sha256:a0a7867e88c87f7c5a7ae44b00f70ae088053c1a3b2203b0fb5ca47c14f5b744 \ + --hash=sha256:a129044d3ab46c1229fd41281dc1241b8c9433baf08b5bc0d555718ff7be98a5 \ + --hash=sha256:a4b26666d525ad638863e5231905e742f1217234a48ed8fbc0286716e87bbfcb \ + --hash=sha256:a7128d458a724d9c8cbb9dc21af51308234ff6a6ccb235ea7098e18343b3597c \ + --hash=sha256:a7e06dc453dbdce1d15ff74f1609d1f750ba4f23c9feac208d53310be77aea79 \ + --hash=sha256:a91588f87c8b11759d85597de96e64ca52208461ad5f066b7a6e2b8227427fee \ + --hash=sha256:aada80b66f628c77f01c5f10e70639476eddfe350de8e56bfb7b958a6453b39f \ + --hash=sha256:ad70512f0c2abd9e209efe479b123dfdd775c77ace703f414445f0a640ef7b1f \ + --hash=sha256:ae87173e2e064fedd939cfdc712946b56fefeede8065437792dbe592746b0f51 \ + --hash=sha256:afb91aa6cba01311e2ad16c5e707c8f4db08fad78d95d19b30c59eb659039d7a \ + --hash=sha256:b092364312772f2eb525f6690b9726ecc27afd2378127246e21636fb4db8bf28 \ + --hash=sha256:b1920ffb98a70403f9e25268badeecef2dce5de0ea430534f19b3da44d5e4ecd \ + --hash=sha256:b244b33f99e66342665566cac09d3c69e0573c8864015fc9e2482229cb1ef17d \ + --hash=sha256:b2ef6e50f18f49f894b5fea22b8599928c8d6dbfbc0e2818d3117fa228a47672 \ + --hash=sha256:b3b0716b3f7e2f42029fcae249cf9885b4f612165ea02302f12e7ff0d23a8035 \ + --hash=sha256:b3ebfdc9abb0c3b7170353bdfbc2a4e404581bace4a32c6941362f039363990b \ + --hash=sha256:b7bb3afc573cd848bbf647a29f0b71b867346a5c572f99dbad5050e320e53c11 \ + --hash=sha256:b9c213a8e100c4a89eb9c2166c030e0e1be13e18dd46616b075f1d3005b5af15 \ + --hash=sha256:ba71ece8a063ee71af70b3ec3c084d2b1328ac5c54fdfd35d16c0316028f5f56 \ + --hash=sha256:bb854a744dc7fed783dd1a20731c1c0eeccde747260c5591e4265daa435b3148 \ + --hash=sha256:bbccc7c9593afe50a4463cb6c594a6375999d15ef31f28bfe0493177a531ef6f \ + --hash=sha256:c007ab8317b4005ccbde5c744d9e862264fd503a8aa2635f456215bb16abacba \ + --hash=sha256:c0d774707b2630688b3b3009ab621da65b3d913c5e56354d150dad62044ccd19 \ + --hash=sha256:c243a175f5767299e3a0c5b1d08b229e4c1f1be4b7491d0a0cfc3526ee213ccc \ + --hash=sha256:c2b0b668e3f6ca38306a77d94be6e659c8d49e441e09174dbbb9c55b73a0157a \ + --hash=sha256:c3a5ab8905b0d01c0077dd28786efa7128908edcdcabe29935a3c45dcbae3128 \ + --hash=sha256:c6bfa292551f40ed36633a2a15e53f3aa07ac7ec584ecc04b7fb86fd45458f1c \ + --hash=sha256:c72bec295c681485e15562f87b104d90ce28cb75f800c48a60af8cb605b10cf8 \ + --hash=sha256:c8d6a9e3441cbe2d4a1ad45bf41071f8a8287d58a2ef84bed8d629524adaaaeb \ + --hash=sha256:c8da085fe30af35a184a74f70cd551fc30ac12eb06fdbb94825459db6baefa7f \ + --hash=sha256:cc21da21983be662ce185069a150bbb17cc00d46785ee63ef427baa250ac495d \ + --hash=sha256:cd2a1e188c6968aa2cc639073c10eda88b03798a2e09e3b2724be370065b35a7 \ + --hash=sha256:cd6df6b95a4c115d71104fe1aa84cbcb8c263f83de940725652c4bd9403b4716 \ + --hash=sha256:cf8144bf363b31fcb1b4e766ac181c5128e38469aee1f37a666fad9867c4e5f6 \ + --hash=sha256:d0e8b96fdf3201cb30fdf0037ceec516eac4eb3289696f3ca73e99f5cbd792af \ + --hash=sha256:d113195501ee883e22708653f89958b231a6acce76dbd9c69b5210a8f01d4132 \ + --hash=sha256:d1ef13738b7241439a5f514a87568e9b9696384078500b510612e615c2435ac0 \ + --hash=sha256:d251e040c91fe15f732ee829d9f4b94d8b8d7efdb04671b912288dfd95657b27 \ + --hash=sha256:d2729207b36de62871d987e1a2325806adc2044b37f352c812d36f95c092ed34 \ + --hash=sha256:d6d6f7eb24d3e4cffb44f973ed55c4ef895fbe5913323365b782b627e0971d7f \ + --hash=sha256:d9003634a330deec2fd475499ca447546c1e82c7076883926ef0d9ef5b934344 \ + --hash=sha256:da923ff6ec226925f901b8e59c50c7e8a011827deb9aaa9143bfde51a2ca1474 \ + --hash=sha256:db5c8885138f1789a1316f341bf643ac23626a1530005db0e5b30b425b3140d1 \ + --hash=sha256:dcaa296cec85c8654fdd95beff236c3b6db227361136dc16287e3f1a9420e21d \ + --hash=sha256:dd0c7c7cbba43a498a05c26f349b88f50513232d9f3ac9c2722494a8102d0321 \ + --hash=sha256:de697334697ca13c89bb544753c28301e309ac312c347b3029605ed0a1eca278 \ + --hash=sha256:de81bb9875723d1d8dff275df49045e7c51b9192948fc65c3f297c4efddcc1a7 \ + --hash=sha256:df5ac6f78b50a7aa7b497fd8a02d6503d9ff9d3825afbfb16cd8e8098bf2c48f \ + --hash=sha256:e2b2e2dbd74d64159bd7d8df19bb1e7f9f17fbc0e960ebf22107f41b0cd71682 \ + --hash=sha256:e2ca6c753b160cf67cc8a32666f9f8cdb6b387e480e2e27f1ba079b90c81aac9 \ + --hash=sha256:e4a7ffe2e7c3602df8b23e03ee0e501c782e4a810c9671cbf6cacc9dea6ca51c \ + --hash=sha256:e5a1b7790ec8ab8e226b599a39fcf5170a022354c245b29d7cf615bd5cb1c5ee \ + --hash=sha256:e76bf3aa13fa58cb358082314c76be315a155598d3209ad0cb6ee7c74c4eec1b \ + --hash=sha256:e786ff4d376e54db46da4eef66abd4f6b61f5db1bda0276a8ca02c79b9206ef9 \ + --hash=sha256:e816d321906868190df9ad83520bdf7bc1a9ac23be521ef55eacbc185987e9c4 \ + --hash=sha256:e8eaaa893ec327cdb170a1da48438108f4de2bbc319c2ae52fd76ba96d57e947 \ + --hash=sha256:e9445048a3ddf363f49ace4cdb8341461b623930849cbf59cc66ef20c139064e \ + --hash=sha256:ea77262e4ff9c27cbc9c2ca077b46e03a3d8af5ca6b5e88f1ac4d97d811f2e61 \ + --hash=sha256:eb457a27a7bff3ceff2690f421f848d3f92054c5c80f02460675ce95fea6470f \ + --hash=sha256:ed62012c6717cf33cc179c6a9ce15bd875253e75cfadc19b32a7b88d963533d1 \ + --hash=sha256:ef3f757e2381a8b28541bbb60d966938baf1d3f26dcea7eb6e4e51f4b3bcfbf5 \ + --hash=sha256:ef469b837877b1cc067ef5e24833bc3545a3ea34614be5b4c0b2cff3dec9e9ad \ + --hash=sha256:f022df618f8cbd902a1aabbcad6b6320248da7b0f3e901247fee3d438bc1a6f7 \ + --hash=sha256:f0e9b425255b228e1e960ac053b9355b2d41c33e4c24a3065aec689dc83648ed \ + --hash=sha256:f464a0505cf3e0b18bb23494a25f19f7550f90f53ad1b61f7fa5bdae12f0d48e \ + --hash=sha256:f4c7d2d7db6ed6b6b9a11beb198ef60689d2b085a625b50906f612c5f67b3a77 \ + --hash=sha256:f76d0e5f0afc81afd46d31c052002873f32bb77d01bd00fa59ee1645fe004029 \ + --hash=sha256:f7e8d6c2af4b02157c0dec3d17aca222ce314030ecf8fd12e21210ec294c6a1c \ + --hash=sha256:f7ed31a13159fa2fbad8a1548f3ebc4f826810d89c6b1ce63939003445a26bcd \ + --hash=sha256:f871459b311f33119766b6ecd07e89509b12e004dc2c29a210cf9e1584352e48 \ + --hash=sha256:f89a57f79f4647b220d947e4612b24a12f5bec3613e2eb965aecdc29873576a5 \ + --hash=sha256:f99e8e1f1e84522257c4c762ed194106b6b40eeca5a5d181b180fdeb3e927ef5 \ + --hash=sha256:f9dee6caeb80aafb9c2519481249dcc2f2ea7cf96c36ac49293bcd3ceb2fe152 \ + --hash=sha256:fab21ca27e20e63ed9878447dd2ef11c4be4a0ca04a3523f559ded0e612d349e \ + --hash=sha256:fafe98bb24c3e271937d62bce13378be09a208afcf1d15a5553338b0d5fa0138 \ + --hash=sha256:fb13f3904a2bd4c0712e39a85f7ae8825322b202bfd0fc2cc313cb1fafc21ae5 \ + --hash=sha256:fba475df3ffdbb28f1f84c99169c1ec1b54e5faddf96502f65a0debe850f8989 \ + --hash=sha256:fbe3036e47d4389e55482a7dfc6207b5b298373bead77f371e0bc18a3fbb6061 \ + --hash=sha256:fdd8ded8a93e1be009577fccddaacf78aa21cbe7dc6ec53c229def0198a1ffa5 \ + --hash=sha256:fe02199daecf1f4d7cdc4351bc451b590f4574ef4aff30f04d630a5c0cc327ea + # via quimb +dill==0.4.1 \ + --hash=sha256:1e1ce33e978ae97fcfcff5638477032b801c46c7c65cf717f95fbc2248f79a9d \ + --hash=sha256:423092df4182177d4d8ba8290c8a5b640c66ab35ec7da59ccfa00f6fa3eea5fa + # via qiskit +duet==0.2.9 \ + --hash=sha256:a16088b68b0faee8aee12cdf4d0a8af060ed958badb44f3e32f123f13f64119a \ + --hash=sha256:d6fa39582e6a3dce1096c47e5fbcbda648a633eed94a38943e68662afa2587f3 + # via cirq-core +fonttools==4.68.0 \ + --hash=sha256:039142b75a068c93f8596ef68787f82c74940b9153d24c224ab31e750eb083a2 \ + --hash=sha256:03c9ef1272e464747f67c623f76449b888da6d5de7fb46275bb36488b9ceedba \ + --hash=sha256:04365b897c9ee29a048b6d4db74c75c38b70aa6d1074726fbdd7ea1a23aa8ed2 \ + --hash=sha256:04a4868dcfcc23f00bb033147d5afc1a118a992842644c3eb9da55467ab4fd74 \ + --hash=sha256:054a4d5de7e1f973ab9789e9ae3f20238774783ca9bf7ee0359aebae4de9400c \ + --hash=sha256:0841a4dac69efda309fca2ed0834186ee66d39787f1d26430ed7f779a699a096 \ + --hash=sha256:08851f7d2b983412f490b73a7c56f17cbda1d4d85d2ad3f857564bf15b5d9475 \ + --hash=sha256:1695cd2e1f9768fe3f14d369ce6ef1b3e8561069cc9e47059571985d1ea42614 \ + --hash=sha256:1782f2cf952eb262c4126b1f57b5f0e027e71bf2b632350a033dec526f448428 \ + --hash=sha256:1dde2f0ec3fd0fb43cf818593b38a8202eb7f3b59cae86289a8b19fbf6f6313b \ + --hash=sha256:35425bba603cf9d72c9f3c173ea6c98632164f3bdfb1ce1a3dcc928979c6ec6d \ + --hash=sha256:362443ab355701d6fd26b10d022cd6c8456e1e248f80103c44cbe5ef0228f87f \ + --hash=sha256:39913c1f576af86c69519dc351302332561ee62b39fed04dcfa8019d9c2d129f \ + --hash=sha256:3b9b87645bcdbfc3f30240e2758a37bbef4fdd0f708683b2bfceb60975d63e59 \ + --hash=sha256:3edce69ecdefa73ab1041901ca22eefed6ebb93a77bc77e889d940479f25bf7d \ + --hash=sha256:419bf78474adaa6fb320a06822f4f941b19345d598a9de379d6e2f0e4d819df6 \ + --hash=sha256:4b9c89b5876f1a74b1341632dfaf4c4c2be565d76c060445df401ebe7a4ceefa \ + --hash=sha256:4bc352572abc800177fba513995c01b1cfbe8c810ac2506cbf29f0795ae061c5 \ + --hash=sha256:4be32afa53ba3dea243b95b62e9b2e6ed6cf7096acd741d379c12f4113694ddc \ + --hash=sha256:4da99b83ae17f531838bc750abf56164ff37e1543e8e9b2b5403548f50497ce0 \ + --hash=sha256:5083a456d68d2995ab78600ccb18ec08c42f9bc14f0ef80c12e2e5b11cc371ce \ + --hash=sha256:53f2387d7e3816763f30e08d14263be18e28ead53d4dc20a82f9280d0c99d88a \ + --hash=sha256:573ccce8b5fd9b6952dcbc5d896255041ab330cc33520d13b1266fca859d8aba \ + --hash=sha256:664dfa7a4869b3c827dfc2c38dbbb7a58d53e97933d1bd51ee6729792ee73d50 \ + --hash=sha256:6aea5cdbc32f5fd202cf8dec053a784b08692f8b1992af80eba32bef82bf84c7 \ + --hash=sha256:6e73d4b1526343b45bbafa9badc0396a49d902f9a1774666ed4244f1df717629 \ + --hash=sha256:6ed796b220654b4d37ad20af73419ec7969b669dd678cab88afb602c5683a331 \ + --hash=sha256:73294e233070f71e2b3653b6bd8564af676d57f26d075761fb06d1ab2e4a7a5d \ + --hash=sha256:7ab8097e7e191784974c5608eb95fb31e1243fe3054cb66778ac82558e9b36f8 \ + --hash=sha256:81ea963d4390bb9e79f91a905310d91ac7ff7675d8e1c0cfc0f1712521c41a43 \ + --hash=sha256:82b8024fbdcddc399b1e21575b9b82f46b8391e711a44d6bd4a1616b0aca3681 \ + --hash=sha256:83bd3d558c15f4e1d87b8f3fcfb337c2bce63c7e5c05212abc8fdcf15e216c54 \ + --hash=sha256:86d319a1feedfc75c8ff582d947b21fa1854e2829cb8cf9428784d750a05f1d9 \ + --hash=sha256:93afd51f30ae38f7d826f4632eb799a06bd94e1fb4bc59fdce6d291e93491027 \ + --hash=sha256:956230858b7a7bb9f5e0971ae07dc64b6155307304acd8c62aedca30e6aae874 \ + --hash=sha256:95628bbc5ea81d5761268f4c4f1ba709af510b970f363498ac801c0c1fd7a4a8 \ + --hash=sha256:9b6e4ae9763c67df2b0f4c4f1a0b18e47ee6572eb602b82e798acc88b64a6137 \ + --hash=sha256:9d80813ae74b969ef2166a3040b591826e80ecd879bdeab7f13f4e8eaf08b345 \ + --hash=sha256:9fee5880486c3fd6f45f5a1679a9f4291ae74e503d725de7f1e30efa2d627440 \ + --hash=sha256:a325e6d7f96f20b3004658c5ed17ccfce5b66277b43ccd883035c61be6945275 \ + --hash=sha256:a6837def5de49772b82683dadd836df214def04b307cb98d0e7723d49e7e15bb \ + --hash=sha256:ab6505dfbe3199453d8542b25f55c1ea3260d38029d9db58c0c7304d438abdc0 \ + --hash=sha256:b2ee7b9c1a5e1d637073c39b0978956febad7e862a1269719f527934c65535a4 \ + --hash=sha256:b41e71b2657c9843b2327b4e3c116db1757dc8cd05d978cd47cb5061272d4997 \ + --hash=sha256:b5a015b322275d3d745b06d5e69cf74ef4b1ce2dae02afbe4826cb186d8527a3 \ + --hash=sha256:b612613f0165f560571c4e372af0ebbb1c4b36067de409922dcea349beb8bb20 \ + --hash=sha256:b637d82a488116da2869afbddccfd93ca14e3c47b404c8ec5a9bad9d4381b08c \ + --hash=sha256:b65c2f3c4449383429507a7e1b372bd759f60a2df8ddc8d6c1cf9010585576b1 \ + --hash=sha256:b6f7c5fabf5b1d9ca79f204664f2c3e2f8218e50aebc43e85e02df0b2d9cc313 \ + --hash=sha256:bd5b047ed8f16b83d0344fef053668712ab9c88e2e46d8612ec41df83c5222e1 \ + --hash=sha256:cbb63b26d33acc3eb61f544c22a0cadbe01682fc064b266bb0e33fa66cea853f \ + --hash=sha256:cd4b0d00523cae1e5e1eaed1d2b85ef342cec000f58d0738e12b064d72a7bbc2 \ + --hash=sha256:cea1969b9bfe230cb3fd66f1c66da5a63a9a917d9cd25a0839524d3d1a88b40e \ + --hash=sha256:d225096687fc3bac0ebe3357e95b2dd8b0a49d191f016db0771d537ccdd6f47e \ + --hash=sha256:d76f8fdcb6936f5e1045a0c9dd721a4bf11112e60d1e243bfa1d39f06a8b3104 \ + --hash=sha256:d8d5674de2b614575f0751671727056af042ac1d61beacb59a298d74282fa492 \ + --hash=sha256:e00bfc6fc0158f156d34f923829e6f62ca00df2e0ea42ba3b0db4089b6d921c2 \ + --hash=sha256:e3ecdb0b248cd0bf43100a8b3cb40f7b45d52ea4be8616edea5dea8fefe90229 \ + --hash=sha256:e80ac66627a01698675ce6e98d90ea9817d1e06644129ec8b0093f66ff1cbeac \ + --hash=sha256:f0b39924698a85bee107184a3c2ee9ae27248144977160534f7d558831db50cf \ + --hash=sha256:f15de48b82a816c72f358e772792801bd3788a156caa76e1806cb0aa8148cd61 \ + --hash=sha256:f265c85432c398d86f26add143423924a4747879b2dce001a3ffe0a5fed30638 \ + --hash=sha256:fde43b9785c7f105aa563b6b5481edabea4ab6be7d9ef14ff4d76225950923e8 \ + --hash=sha256:fe80d05dd85e6ac58d0cd4fa10ddb96252a6f1046ee0fd00cd1d48f0c25921ac \ + --hash=sha256:fedc183bdbc3fdbfbdca26e0e04566d089cbb404712509a4e824608e9304cc77 + # via matplotlib +kiwisolver==1.5.1 \ + --hash=sha256:007a5553dfc4f4e8d184f588a0200e2cd4b63a59cc8796df3c39909e679dc7a0 \ + --hash=sha256:0324cd2567259b7a095f6cf18a52b0ffc6f3de9e69528ff1bc0e7a37bd43ff1a \ + --hash=sha256:0627b9bceb9c3cdcf12b8a18655eedfed2692b038df27423383c120d0b7dc2d6 \ + --hash=sha256:06a6917674de9e0fe3f66f5430787f59a9f2ddb64af9b714eaec547e29ef5c19 \ + --hash=sha256:072bdb15a3c19a5b5dbc8f8fb1f4e1884bf4f3507eeb4cc6334401274d37a5c0 \ + --hash=sha256:0a4faea5c6db201c6a21391d2ac926ea97acf7dacdbc3c417189e1adb1a00837 \ + --hash=sha256:0ba9527afc80ae3d7814ed98b6572d02bf85eaf48065678342c5f0c6dab7a8c7 \ + --hash=sha256:0d8924877ce22e17326a99a418c3c82037da078df3c6a260b13eca677444e6e7 \ + --hash=sha256:0ebdef3eae5336568147c39a55be6a2036ffde53faa9ca2d978989ae7c2da12c \ + --hash=sha256:1209042a623ddfda5497e4066c7b77651dde8e1d3a9dd97599dc7e97f3b9b78c \ + --hash=sha256:16895f553ee6620a827d2da56b871f835fb70b9216cca5d188e885caf6e3bd23 \ + --hash=sha256:17851e5dad4484be0cbccbde3b15331deae036de9aebd45eed964487802b172f \ + --hash=sha256:1798e83840c3f627246104c4d8a9639c60fa068adf9ce92b61791781fa8a68c1 \ + --hash=sha256:18170a77ddfecf40ec60d0928268dc95880c881864e015a8f34094ed18b9b9ad \ + --hash=sha256:186884a58486651e3c217b6acea0a53eaa9498fdd472057c46f2f0fb5c25aad5 \ + --hash=sha256:18a0cfb124546a4c2e6087c5f3029c7f44b37c85b142e0ced71f73a7599ac208 \ + --hash=sha256:1983f0974a750a6f6556f368ba11105d1d8369c735b944747c9f12ae5aea7aae \ + --hash=sha256:1a7587dc335f2c0f5bd577fd0540bd16c66006bdb60f759a1059f025e6c4f071 \ + --hash=sha256:1acc7e5b7ef05e9da8bb70cd6c7c4513090213d2e1ad9720f599f0bf6c52aec5 \ + --hash=sha256:1d852545c4d0e35a72728d072cbaa59e2fa7dd84bdf01e068d670dd0ceb58eb6 \ + --hash=sha256:1ed0f5e49d0ceff8b72190824d9e59c062fbbc02c231b853112c78474b3f5ec2 \ + --hash=sha256:1fff05e239575b1481b6ed1a782f6fad616efbf1f0b1f44e6e85c4dfe426e483 \ + --hash=sha256:21e46b23a2da695c364124817bc01d970effd5483147f8d66a6a7167e3f6b851 \ + --hash=sha256:22d5e5aaad6be121f2515765e3b1c444352cb8eb4c86510801db8f2e50757316 \ + --hash=sha256:2551cf9917af48ee7c4b29cc82320489508cf96fd26a51f6fc124de661cd44c7 \ + --hash=sha256:255605693a483db7bd5c79f60437f7bf658f7f520d61aa42722e32257c941951 \ + --hash=sha256:26e8268480be5061d509e29669d59103c067a26377a56491630ece11762e3858 \ + --hash=sha256:27add358abe374ebaa3b8763ef380bc99051b5a4b18d94878366a9e4f59efef0 \ + --hash=sha256:2ae70bc59790d2af72a3f76f24b272403e135070340281108b447cb77ea70819 \ + --hash=sha256:2e10ae1bba1899188b33557c10d73affcc12033edd18adddb57d209039976a4c \ + --hash=sha256:3221f78211074f561c44ca42eac0619828171bec15a2c4cf6f7747d07df76e8e \ + --hash=sha256:34633ecf50d16187ab8e5528b7a2530f2feb4e23f300db4672538b51cfc5cd38 \ + --hash=sha256:34ec467940442c9943016fb2d4c81d1ba84351eeca2f1a78f8bc87f1ba0d414c \ + --hash=sha256:37f801b5d7cc0e5a548921308e059fd2b057bb42972b591cfa3049f95423c4ed \ + --hash=sha256:38f6e0deb4d0a4615efe0c4efc5990b06ae450ab50a0b321c0b078b6d238c083 \ + --hash=sha256:3c24cd69455e1b00ddf770c13b6e2c33e07d6dc3f2d34add0bf9277c5c6bbd46 \ + --hash=sha256:3cc210010fd2f438a3ed430b45f1b501fd13a8618bf984dc2c5ce5b69b78752e \ + --hash=sha256:3fa5855898f6d3d01b72ccd48a2d65cbdee301251603fefe34e2025bddba219c \ + --hash=sha256:416ba7ff9f233b7036689bb5a3783537e838ad483f63558d2a800f75afe738b1 \ + --hash=sha256:431dc224a1a92a5c8f582d96e505196a3b5997a7271076678da2dfde67b77e9a \ + --hash=sha256:43844c1a7ad6d723d5b5b4c4fc7f5bd399c40e288120d16257c7c9e8765c6e85 \ + --hash=sha256:44b8faef94f1857e77fa0238f3390ff1ac51d2ea20a487e2e452a59fd2b5f5ca \ + --hash=sha256:470d420f98d368d6f010633a20659b544c5fdfa5329e6b70219f2ef08fd4a7ef \ + --hash=sha256:482676e5bd48d70ac99d9fc78863469845421e01184fa83f1f9366dc49f7e974 \ + --hash=sha256:4d4ca09bf13cff792b1884f64b98ee6c2467930d632233be25c56b442d99f10e \ + --hash=sha256:5025e36fb4fb275cef0a4e30dbb11cb4ae61d1c83deb90189cb5d7e4cafd6b55 \ + --hash=sha256:509735237ae0d849e8a843551d423d2500d2e0a9ac1611a145658b29c0fb9f85 \ + --hash=sha256:534f02c1abb31ed6dbd3515545285c330b2f12d00fdb1fdb71658b9ca5a13a6a \ + --hash=sha256:5978c3340f16a35c30f8ab2fa7bcf559973c55f1a5ef6970e1f621acf3c4db13 \ + --hash=sha256:5b973887ff782cfd6b67c9904ad8ca542e0bc5e4961503408b423b5a688b4d38 \ + --hash=sha256:5c490db2168a508088f59140dd392556a54b8bd1048fc6383c8baff13c359673 \ + --hash=sha256:5d142e352eb13facc7dd047489aebdff6ba78576c239f1ea04931979caaf0567 \ + --hash=sha256:5daa1f19e097050b9c4d9a78fcc9263cb96c9dfae08037ddc1b7c4ad1889f2a2 \ + --hash=sha256:61e9a64c7635095a6bfe483e2ff055d437c59bd45f3617a228b37277f0185d62 \ + --hash=sha256:63fb7294b768f444eb4b068965f2662f28c2fd4161e23bd60fcf3ff27b74c046 \ + --hash=sha256:685929988b208a911f1285e2f8ed54210b0d681a3dc0f03e00d599d291986e7e \ + --hash=sha256:6a797a1cefc8b9c93170db580337e1fe3d011ad18b1299943231279406342048 \ + --hash=sha256:6b92f60017dda7d877fdc546438b5e28f31c523264f49cf5a48c1d0ce1a0dfbc \ + --hash=sha256:70ed9a45c7484d2b30cdacf60d220f494a1763b9fec1ad03285c6553fa0889f2 \ + --hash=sha256:719a35fa1156db3640555f95ebb94f60a444e64d1c69626b0edef5df78eba225 \ + --hash=sha256:74ad5c3dad54a4641b4c28cd15ded70899d04459c6c7aeacafea716be97cce6d \ + --hash=sha256:74ea337e0ec3f6f342a36a4f1b5cd94dd9affddcd28ba9aae2905af932ee8c6b \ + --hash=sha256:75d9b1cf8258462dbdc1eeda718c96ea7f079324c09067f6daabfcf37712b7fe \ + --hash=sha256:77a4c8187a5948d7f8795adb765a3c7b553d07d86d88e43038fc32fc1fb9a3f3 \ + --hash=sha256:7824b5e8bdbf0bccb4ccd37bbb115849a1dc45437fb4de8351385ed07c437ee0 \ + --hash=sha256:7d38b0c279c3032e8c9cc013b405c6df8e1668dbf15465779aa7f15f61201812 \ + --hash=sha256:7e9c01d3dd7ceba4d1d436cc021d40d592466e40b9bc7f5d83dc4e98a5c9cd8c \ + --hash=sha256:7fd82debf43c6acd0a94359d232f6bb516ee13f269a7993736a9ac9f988bb5d9 \ + --hash=sha256:824c3d763a05ea9e9003610145186b0e9848c7584a5575c79bac5a8e7cd80bad \ + --hash=sha256:828f75af2b0080c8a972e75f649ab46af008e92c6104a57a759157200b835b75 \ + --hash=sha256:83f78128fa28705fa85d01c59771c72fe81c11bd0e6155edbb9f818983a7d761 \ + --hash=sha256:876bbfd276473d3daffe30e8c975df4ed9429967b41a6cb362dbb5155b6f13ad \ + --hash=sha256:886fc26012f0e8b5f69d1cfe6d711f6b11f194621539bf8e6bb1c25c5dc82724 \ + --hash=sha256:8a34616dc2521cc8dc1d7d081734da63539f021ac0450ce950908340c6e7aa2f \ + --hash=sha256:8a708a47ade1fe19e8371d5da076bac0dd4b0a5a7985ad6c637f7f7e361b6baa \ + --hash=sha256:8af9b142ad719ae3a911ebf616bc4b78b32bbab84d6a40d3ad2f129670509957 \ + --hash=sha256:8bf4df63592c2a66b4f8edc5df2544998c288aa02f96ce0acd880cd1de8c8127 \ + --hash=sha256:8de6f2a4ce7e7bd27d23dd94abf0ccafe0e0e5cc9c764b0577191f2c25f08f26 \ + --hash=sha256:8f8fddb8e323bd6eee4e54e69a39243beab22689070f4c66b472c4cc88bb89d8 \ + --hash=sha256:8fca690b00c4c48f6c2a547b0160ed511357093a4e4c9b47e0fadf3128066d89 \ + --hash=sha256:9506e892bcc3b409831d363c6f53e5985e1c8d1f6f6b0256d00358684ff85378 \ + --hash=sha256:958254518717542d02d0688d0d20cbf771da5e415e6f49543f92481c850a4540 \ + --hash=sha256:95a02752aa032eef4aed01cda6d9b687c669bd0396bf4519eef8bba22a286720 \ + --hash=sha256:96c30002424670b5e1e46495c2b8cbffef39cf77c1d79e76462029d50339785b \ + --hash=sha256:98b208a7cc42c803445ef551d6753cc42a5ea13e9cab1ee66cd8b9cb70195330 \ + --hash=sha256:9b3092d8992a1d69b7a59c3e39f35e1b9be327a17f68a7c35fc17329e337d6f2 \ + --hash=sha256:9e51c119992ea8820706871c30a4642ec76de20ae82f9b50b9a45517d8e9f810 \ + --hash=sha256:a5716a33bfabb2c6ce27b6cf03253467b3804f83e215f4d202685cf93c6c9874 \ + --hash=sha256:a5a00665d1a0e26763a7338d7e911d4598fbc1d50dd0d6b7919b7dc6c5d6569f \ + --hash=sha256:a5ca5aebae78a0bc13c1943af4af615d4966c5b650b05d5aa83b50e427196fee \ + --hash=sha256:a7b85b2cc6ea45e5f7e8c9a30bc9fabd47cda09106cbb4b967335c3e6c43b69d \ + --hash=sha256:a83ee7107df13abe42a54a6654670eef9bb39425cf2e27f65e0007465e1286ab \ + --hash=sha256:aa7d00b1700966d2917e54d278aba86897890ca9276dd8b76cf6446b6c181b92 \ + --hash=sha256:ab620eb663952455271ac37f9aaad86b73c969c02f11f53cea405b38e96a4300 \ + --hash=sha256:ad8b9671348d7c8716715652ae11f85ed0eb99e265a2df2ca490577d69860b2c \ + --hash=sha256:aefe930d113798330e9462f7874542977869c0613cba3262e2de3a8d5dee8f3a \ + --hash=sha256:b03af77d77e50edba2030fd5f7c352ff209314b09030a3cba7c14edf9a09a444 \ + --hash=sha256:b390aec180a7c054919c04898835e1c77bced23ea8383eb2c570213bf25d1a86 \ + --hash=sha256:b3d78f7bb2b9d9a30345be1474b9aaa8685430b54afb51ba3639b5c6c11e9ed6 \ + --hash=sha256:b5664603a253efd3a75716d793d1d3a6a82723b61dc6db767b2460bbbeec4c0f \ + --hash=sha256:b69602970994a2ed8bbfa78c2f0394a7435226c6040489702d9f0a0ad0c07052 \ + --hash=sha256:b6ae6a0328f0bc035741820fdeecdcd67bf4694eee03972e843663107122f450 \ + --hash=sha256:bad20d4c69c851c982a1e3606f4c293edfd5a87885786c50082412240c4b1ffd \ + --hash=sha256:bb7c99f0673c03017a3ee01e54a5c2617a05468b11eabe513b0080e063ed95b1 \ + --hash=sha256:bebb89489b279b2f5661bbbb2abcc87bcd4a46607bb4a5c966f04f1db6b8df9a \ + --hash=sha256:bfd1de989b3330420e29de39352f5c049905c9e3ee67233a50d550e3d652c148 \ + --hash=sha256:c2306e8bb53601979fcb3fa09cc65e031876d9ae01eff2fcbcd7a84ef94d5bc1 \ + --hash=sha256:c3a4e41e3096bf1f0f1b76e2ffd6d828d6547f574f702d59bdbef7acfa59db9c \ + --hash=sha256:c6834b92dd2428e2dd85ef3d85f723d3c12f20aaf43a2ddd4f944ca25d833408 \ + --hash=sha256:c90d3022d8a94778939cda8638c6c8da8fa757b8958dad7ec868ce29c87681b8 \ + --hash=sha256:ca307d6c259e5c98d3cb9ade55342b47a6839762caf2536f3d7b46ee660cc82e \ + --hash=sha256:ca7f6fe0f37ca978a1e5eb7a3a68e6413f417e78e838324947ffd420202b198b \ + --hash=sha256:cb6fae641357ed2f6e533c0d3c6504a4a5703621a50c89459e46051d56b61140 \ + --hash=sha256:cdaeeb6c350106df6bf9d873395973e5f066a9713200b72cd64f55d0a3eafab6 \ + --hash=sha256:cea20da04494e662b83c872683bf4ff2345206043d036315ed0e924b652e7294 \ + --hash=sha256:cea90547bfd93807e0013a004dc76552be44fad3bc1cc2b38610a9e889ed098f \ + --hash=sha256:d09037ca068d784ebc4aec290ef952ca27ac15dd9c0b5801a88c6e1096b83e6b \ + --hash=sha256:d27c2123977cb9269c30a49ba45f03a4323017ef693e19db4ec9dbe1299a3002 \ + --hash=sha256:d50de98e8d807dc31822fff96f50293163a62418eb65487a21b42713d72ed0b7 \ + --hash=sha256:d66a64dd5dec136040ec2ae94aa026a912ee60fdd45bc28d3db30037fd809e88 \ + --hash=sha256:d79308fa689fac89cbcfbd4dbfc80b5f95c54c5a7fd4d194be221f9d33d026e6 \ + --hash=sha256:da3275833be0edbaf4830fae08bae3dc7219f40ce0c37eaa6c25825957e06612 \ + --hash=sha256:dc1a26b8e53395a01c2c611e58602fa47461f136fba7cd5542e6db6d64be1839 \ + --hash=sha256:dc23390afe9f4ef9ac3bcc72a03a56eebbde03f4c571a32cb38f859cff9a6524 \ + --hash=sha256:e05c2f7925f1d88778e53cb44f14e0223204a3bdd09a41664750363acfb1f2ef \ + --hash=sha256:e12dfea7f5fc2a34a9080efbf79c4c44eb380ec5b9c6fea09407e08f0d1e941d \ + --hash=sha256:e4e4523d6f336708d732516e6cfca7796cf3d96c9474eb5aecf6165f2f1fefc3 \ + --hash=sha256:e4e49f7e1a4e7191bdf9dc67a974db714501b1fc52c24324103d06a86abd5c08 \ + --hash=sha256:e68e151428b5384f766cd25739bf77c7e4a3dc93b5ded7a12118d9fbfdf78ab6 \ + --hash=sha256:e8e4d953faaded9ec7ede36824e9814082d22d4c7b1eafbfa079ecba8cd0d076 \ + --hash=sha256:ee9df1f0d77b9c6e94f4ac0fec533fbddd5ea3a327807f18d7b069ae019ded80 \ + --hash=sha256:f0a887b6565bbfe80efde2b7f6e8890d7d9bbdb11bdb17028a3690c32fe0621f \ + --hash=sha256:f0f4a42db92d6ec7677ab9d12830a2a8ec145a9c6d15db2b593466bc875c78d7 \ + --hash=sha256:f1303ef2eec81262a4b708c3e858afe58d7c75ad91c1c05266eda7673369859a \ + --hash=sha256:f1d56ec54d257d05e0b50f5780d967540cd07beeaf9e5f645b26d50cce79f4d8 \ + --hash=sha256:f4167e87b397f273dc2356fcf1eaf50a6bac51e6105f45103ef7129c8efb0255 \ + --hash=sha256:f76fc85bd054c806960f917ec0f329e24e436f1712267d90588e4c39890caa63 \ + --hash=sha256:f942903fde7363d1d879057ec5de01310efda2597161784d752fa9953a01a71a \ + --hash=sha256:f9b1c4900736e489a812c529100de4b8fb617d4db075e931e213c57424b83d9b \ + --hash=sha256:fc271a6f0a2126958f4090e5507b9da5848927dae331f8f763bd4aa642b3d2cd \ + --hash=sha256:febcce10f2bcdbb80b4ea919238a6a4ac13dbc4c7cadbe8d5d75c3682f8b5404 + # via matplotlib +llvmlite==0.50.0 \ + --hash=sha256:0225351ad77ea30501fc5b4c09ff6868169fde50c5a576cdfda1645091157616 \ + --hash=sha256:1cb21c420a47dcfa56223228d013c6f9d234e05e06e6819a41638d78bbd78e6c \ + --hash=sha256:211da1b088d566aafa1e444d546f64fc7f13b1af56ff0207a1705d88607be6ab \ + --hash=sha256:266a6a29be71c3e3a22960ddcedf66b4e0388e5abb6cc4991cc093d6df402ad7 \ + --hash=sha256:33ddf12b1e12d7e551e1c1e6ca8087d0aacc931f480019eb33ef2ab77681da4d \ + --hash=sha256:3f490c0f4800c8ddeee6a607acd037497bf6508586804f4e2f11f53a1ee7fe2d \ + --hash=sha256:423c8d89d13f7eb4488933d5a86b0fa952927956298cfd0087f6753b5123b5df \ + --hash=sha256:425845f415a06dc50db08db033c6b568e0d85c4937e932c605a4d49e1514b2da \ + --hash=sha256:4b78a8b669eda09ca1ff4c1a75003023912092974d3e771d1da0777f1b383bdf \ + --hash=sha256:4da0e8c6e6f144b433672a632f75d6b4da7bd4fdb5c3e9981d6ea6741319aeae \ + --hash=sha256:51a4a716db98591f0a1bea34c6548cdb4017731ee5e678ded8cf842dca8af3c5 \ + --hash=sha256:55f50a6b7c0b8de88b05d6bc407d70a60486ce024013997dc97e202bd187c75b \ + --hash=sha256:6e8df54380110ea5e9127386e739d2b0829cc6dfa4a24a9195226336c91b06d5 \ + --hash=sha256:7ae211012c6849528a5f7cd17a78d8b2421a2813c7b4184d6c0b2ffa89a7d296 \ + --hash=sha256:7dde9836d144c446a303b57b2dd906c35308411eb07f1279c1db581d3d774048 \ + --hash=sha256:818b3d4845ac8e126e23cb500867570d0602a42a43e67b14acec31f046e03130 \ + --hash=sha256:944133e9621d1dfbfdaf0fed3234b99f85e6ba27c38f4045acc8f8a5e699a5c0 \ + --hash=sha256:987600ce6f7bd6d808f4bb0ea61a8eff2fd17cf32355691e801eb0a65a7304f0 \ + --hash=sha256:a1d5b6eac064f201b4aa091030282e6f240d8d322dddd7381840731455c3e664 \ + --hash=sha256:a32980e3d727b0e56974ad89d0764920048602a75805b8917cc0298e798b0ced \ + --hash=sha256:a6ffde00d4be8772a24e3e8b3af6bf86a79e7cf066d944ef56136b3957d707dc \ + --hash=sha256:accfc36951230e0e694b41bbfc96ba554284e72f0eab2dde0cf273e4109e51ba \ + --hash=sha256:afd7b438c60e0f60c4368ec603bb9f20d938a203b5f59b80bbe50c749b4b2f16 \ + --hash=sha256:c20595cc3a76e3c85140fdafbf9246c732ddf8e0e646ba2f4e4881f87567300d \ + --hash=sha256:c2b23236bd0d7ad56a94208263d791956f79c8c45f39458931df556206d4496a \ + --hash=sha256:c7d4e2bbb29a860a6e85e22afdb96696241263942a5b214cac3e4b704e1d3abf \ + --hash=sha256:cda14ab787e609c2c2c5d1386a6d5f8723e9d047d27341585f606c27dc5744ab \ + --hash=sha256:d501e5103076b9a14be885d2574dc2f6793171aa54a853d1244e011d476f1399 \ + --hash=sha256:d5447a6c39171368edfe28a71f605e6e3edd40a1dc31f5e5c9d50585718ae6d0 \ + --hash=sha256:d88c9b325f5fbefc79d95b1daa8fb96018c40bd2958103eea7334e6c8f17fb40 \ + --hash=sha256:e8cc203c1fd509131cd72b7554413d4a3e5527cc5558c5a7ebe19840018c57c1 \ + --hash=sha256:e94f9066f1257a9cef6c832e6c9de0f140e2bb150de2db39f657b2a5996e0f6b \ + --hash=sha256:ecdc9fae295da8ac793578a27020515e24d970513143efa227e696582aeb16e6 \ + --hash=sha256:f1ac2b9f699c46219fbbd66b304105f5e1b218f05ffac6fe03cd851f93718e58 \ + --hash=sha256:f2a2cd6ec9ffcc1b7147dea0d7a49efebf17a2b434e0c2844fe175999d571eb4 \ + --hash=sha256:ffe46ef508df226e54b5fe1f7bf11122e5297bcdbb3902cc5b670a429d56ff47 + # via numba +matplotlib==3.11.2 \ + --hash=sha256:01dc8eaaab5a9fce9ff615eca82345728f289e4715b186ee10c6d85272fc26bb \ + --hash=sha256:02329432ae5c6af87cf208ee575b701d698bdf0b1a3bb28cc6d53c36e967e575 \ + --hash=sha256:07d9b9fa60cd4c393692f50d0bb03123242ddf61c99bb0e95e75feb354e7c1a8 \ + --hash=sha256:116cdb0eb0eb5644fc98eb2975d4b4dd4ad35e5c8e6b851c22e6976f371f7ab5 \ + --hash=sha256:1944895967f87c84c9b4bad29a707b31f5b36df4a3a2339ea1f8ea3ce5105539 \ + --hash=sha256:1a3040b209f3968b4e84161df7b174f07a9fad33b0f2d7e48ea3bbd3075e2863 \ + --hash=sha256:1b9a7ad579856284135e401ecc918c5f8a017ee30539298862a109f51b971710 \ + --hash=sha256:254d4ddb2fa8df3b4c689c0c306063aee10521df82cfb438185e499c75fe37c1 \ + --hash=sha256:2a8285cea8ef4d92aa041d1c33788bcae82248503300f93f1ca2136b9049452f \ + --hash=sha256:30ec15d7eefee71de16b7c689b42ba49715a4644650b76a6c7c70d79daf24e91 \ + --hash=sha256:399fef672f7046ef7d6a57572b2a6f9845f3f5afcff04e7b2df7a363a9f42190 \ + --hash=sha256:3aa4b8516fd26659e4363abbf317c703d9116496c5db2e9d0609a2866dd39dd2 \ + --hash=sha256:3da3bc0cbf7245e7db72cc6d29d12c5abef72cb73059c73b945f14e3545f3eb2 \ + --hash=sha256:3e8576f7c47e02fd4f21f44171302d2d1d58d4471d46da3d71fe8899d19539d9 \ + --hash=sha256:57b9ea60a835937c2012861923cbb91f47db8565775d326d1c42fc926aa10351 \ + --hash=sha256:5e1e923a3fc3326b99ec0a6ff1ab1338ac6c6cc62ad9d8a9c944197c7f8c6221 \ + --hash=sha256:643ff850d8e0f5b8319337f87ed3cb59506afb3df3cc48de777d85871233be7b \ + --hash=sha256:75b6d88402770e181b5d06a67dda4129c31da7d05004d63a21c310ec78d1b83c \ + --hash=sha256:79a258f58253dfa025af80a9e9bb228d75fced007f0e93ae7423fefbde81a74d \ + --hash=sha256:7d43ff8cebb50840648cb6429b2228621dbd709010f3117b3740abb20abf21c0 \ + --hash=sha256:7e5a90f8a707ebb6004a713b1cff091a40cc5df4c7c1cb165e5a505ebc11c292 \ + --hash=sha256:7ef7a53b66780e5d942923724f08577fbc5be1f7322da0f0f3f9dcaa45dd803d \ + --hash=sha256:854df8d7dfe9fdffcbaa6f39e44a6c24b409cb4d7561fbc09213b157d833f6a6 \ + --hash=sha256:894a9cbbecbe30ae6787d464df2e8fc7a8d475cfc68f87c3029f7c11152899b3 \ + --hash=sha256:8c8255de28f986d935a64c9ca71c0ec2d2f41d355691f5ea684725dc91413f71 \ + --hash=sha256:930efb28f59fda124e39265d177bab302625297bb147d2910de725a2fc2aef54 \ + --hash=sha256:a24d5fd36e4f0e742c3851dcd20810e56a95633a342e4bf6cb591c678e8fe61f \ + --hash=sha256:a6939df7567114b6bac7f4c5e06c84a67f197c1b2f2e4b234d4eecb3bfec9482 \ + --hash=sha256:a8756cc73d9af9a7fe0deb54ea2e75ef73b01d9e575877e72acad5458e660943 \ + --hash=sha256:af2661f6ac6bbd1d081996f54fdd9385715c625ace8cec0869055c0cfbf38981 \ + --hash=sha256:bbf1062991d826ed27e2144f3afa4461afbb8ff56e8f703043e191a8163b1ee9 \ + --hash=sha256:bc067c462a86f0e57bf52fc6e058d90171a5420007dac00c46e90153050c69a7 \ + --hash=sha256:bf3fe71fbfb8ec0e310e0bc8537c3405a01f38f25f9394ed2135e6202fed542b \ + --hash=sha256:c0b83f044ce10a98027b105b3931548719a6e8c7ef986b4362651e0b5367c8dc \ + --hash=sha256:c27e577ece613ea12a0790e00b4eb80d901c59a3e16cad474f31d8b1529690b9 \ + --hash=sha256:c5c1c68ee401fc98271263410f0e5ce88285abacf7627132914e8adf3d70ff43 \ + --hash=sha256:c9721f81275499da1feeb36a2cf8192ea086283b3bd16b7dc4c9d7aedb7396d6 \ + --hash=sha256:cc82dde2a0d3e3ad472edce04897ad7146b8d8bfd1df8a32992eebb81af18fdc \ + --hash=sha256:cec596316640f2b394b8f0daa0ea61a8eae82d017b620b9f202befb972a59ea4 \ + --hash=sha256:cf41ecd1b0c0b6f7177ed965a54c2afbe888715c7cf6054dc12d53bc1494002c \ + --hash=sha256:d3304eb5a59442a8867f6920d484591c0fa09ffc29e9260be2feec3351e25869 \ + --hash=sha256:d480038c83691532ed52ff3147db51fa902fc78cb2d8349993a1cdb684435bff \ + --hash=sha256:df4f7784aca81a94f254c0a2767d592ee25f407e488f5fa7203e51093fb6ca27 \ + --hash=sha256:e43b188f0a5b75447bcc197728258166aa64365770ed1caa36595a5e1ca4bbba \ + --hash=sha256:e60cf3047a51edecdc4535a9196bbd6a732936b8e9f8184aabf4d16165884aaf \ + --hash=sha256:eac4b07d4e3743b172451e122ea964f72f152879d4f9adcf3f3d33e518f12ead \ + --hash=sha256:eb3712dc9b464793de0a4e42a7313d50293c751f94bddaf7332a1bc71bccdda9 \ + --hash=sha256:ecea603dd2fbf8242fd31a305a8b12a4ece2de28096870c65fdd0d1e35b8d9a6 \ + --hash=sha256:ef31985c4dedb5f1424e1aec6849a47dd37689cb7fa3c20b1b82187f26806261 \ + --hash=sha256:ef752769cd962f39ea0b6ffc82d1ea43a0012c5a6157c7a075212fa509cfcff2 \ + --hash=sha256:f25446b2981717dca9786bac841cb3fd7efb568e3e3c755dd980481c5cb9228d \ + --hash=sha256:f2ac30cf5eb5dff1b584627ae0b0e1186551a4f69ae3c75073911da497a29170 \ + --hash=sha256:fea03cf56568cc1cba08b470be6a0559e71c3a5b688d54b7179bb35ba23d0821 + # via cirq-core +mpmath==1.3.0 \ + --hash=sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f \ + --hash=sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c + # via sympy +mqt-core==3.11.0 \ + --hash=sha256:333b90201b8aa98df578904d512fa5fef5c604db9bcbd414562508dcec861b4d \ + --hash=sha256:444da8110863ca1d351c6ceda49c172dd8e47511f456a0b8556317bda0ef8999 \ + --hash=sha256:449a627799f80ce0ba9d8076958f246a7d8a4e9ddc2ca8770d74e0b295b32477 \ + --hash=sha256:4ad421da3fc1166ea9697910f88c2d199cd50faf7384338ed1b34b054458f0bc \ + --hash=sha256:4b81781eb63c3bf9367af1cdf1c8aa74e117f99811622e4f2d1386b3ea7d0f78 \ + --hash=sha256:66ba964830f40ac093a716a318948d1623d5d6a67b6d986a2d6870fa70da60f2 \ + --hash=sha256:9c1a236b17e97556619454d262ccdfd0c5fecbe383a6e44a74fdbc7474b92910 \ + --hash=sha256:a2a3ffee0155d5292e60c9034ce889aedda549312ec26a8f3dba4188fea2ad77 \ + --hash=sha256:a6b96fc29a1d02efc532c830a3c14e23cd000d2bd3210b4a6e6fa40aa8cb30a9 \ + --hash=sha256:a83c2a5e17f2da2c9f92670e2eae8433df453ae9b21b32f0333a744a71e2c00c \ + --hash=sha256:ca3d0f4a5330f8c1264b079bdc96a789c13bd3ed3944e054ef2ea55974b8b668 + # via mqt-ddsim +mqt-ddsim==2.7.0 \ + --hash=sha256:0e062aaaf5e16e162a4877fe659c8ff43172ff086c747aa01ec9961578e92dd0 \ + --hash=sha256:0f0f978c829bf42e229649057cc66b7cf80019a41e10fefd8771244fa2dfdd94 \ + --hash=sha256:7b7f326089fde58cdb07d1d792f33950f5c580d6675176196bf3d0ed498926d9 \ + --hash=sha256:7e6ded968c8aca5aa07af4300f1500b463d20d4801070a47351ee5b4b966fb2c \ + --hash=sha256:847bf0e94b06a926a0a425535cb4539e55c1e795f6580e7e26d5aa50d40051aa \ + --hash=sha256:a2622f0aa0d9d49c5d95e04072ebbe69ed80e2a966232574ff2f6bd57e1ed9f7 \ + --hash=sha256:a57c34fc7dfcb270c5b5cf507d575b2ef44d76ae1b86184ea2311ff9626c0d9f \ + --hash=sha256:c34776020670d4b969b1cc615b552862cfa95cd563729569e2189e6e94af4a5e \ + --hash=sha256:c7f8d13d81f9ec52c60a44b453f2185c161630d7f0d91123e089ce31ca888fcb \ + --hash=sha256:d405d9fb8e2afca070b4be3e1bdb4c51e57cdd21784a01c817a46418c9168053 \ + --hash=sha256:edf50f0cf984012f0eb7d138ec38ebc8bf770183c85d4cf15efa14070970f85e + # via -r requirements.in +nanobind-backend==1.0.0 \ + --hash=sha256:00dadccfa92d0f9eac0b1877fdc3fd99d2ebb1a651fbe44daff365a173bd2faa \ + --hash=sha256:04a35c7395daeb9a33f6801ca3d1e11e0384702ae22b8e3e251ef9f6a4a54c10 \ + --hash=sha256:17a9ddc6cc096d713151fbbaabe41d960d1d596c0e046abcd2b17c6d6565c443 \ + --hash=sha256:1e5f8217887d1d83ccbe1e61c37d1502ab951fef466a06df2abb1161e246ef79 \ + --hash=sha256:28a4c397d6d36dfb712acbab817c02ad2f8658a85fb1dbbae7385689d28d20e9 \ + --hash=sha256:2946667fb8cc7bbb52d0151c090540576a528e48dcd7d1bebe007688e70f8a5d \ + --hash=sha256:2a42cd509c1889cbccdcf8a23dc3733c4b7e2388973ac4292db094576e3e27d0 \ + --hash=sha256:2cc095faf04db1b8c05e4685b6b6ed1155d67a148cb892ead6b7b64574184b0e \ + --hash=sha256:33bdec0da2f78669d5c95bd546ff2bb7744dafa43a16bb72b2eecdf83d8c3b3a \ + --hash=sha256:36a116471c3ca0b6cd3af1e1fa2e38c52086a2d2daf00b86f90a99da5efdde53 \ + --hash=sha256:4816cf6f998b0c2435aa643df7a5c59492202778c96e575e55da802e51c75461 \ + --hash=sha256:4a42503f65cd595f97a31f24d21c6ddbd017ffcb808626d0134e475e0db25f3d \ + --hash=sha256:4ae0214ad6708b8001d82f1dd6c302aaba9627d81aa0573efc896a3b90f95bce \ + --hash=sha256:574d104bf6322711e5db55ed49409289df9582e8c1fd2a2f2d643d2136428e13 \ + --hash=sha256:691be892dcd6b4b1317d628b49bf3e688470f4f927ac316dca233ee19fab7ecd \ + --hash=sha256:6aa9864050cc5fd1ff59d1f9b79740efa278515eed27af848efae07125c029b8 \ + --hash=sha256:6b7c31403e6f39fd704359ce4a0687d894a9ffa67813da6a54c6d0eb6fde93aa \ + --hash=sha256:6ea3fe04341040b09444cc946f5cd39145290b2de3b90ca9868b1b59cc75c23e \ + --hash=sha256:7a7c76fc958eb7bf4b5454d9c036f1e92f8b406343c7b7b7f4e53302718ffee6 \ + --hash=sha256:8975422479b145ce46d4d79b4fc03dbfab40254470468a99ea417090bb1ce460 \ + --hash=sha256:89c582f83d491ba01aa1a5ad39ed6c59bdead67ec3b8c88b288b7e4b6bac18df \ + --hash=sha256:8ddf018fc62a2bd51e9d7cc6477af7ae13ccc0db69b775d67d837ba7e0bc41b4 \ + --hash=sha256:915c6ff4ce92584cdde18a24cc5d730f04a70c2f26bc0bc4db903ca54043eb86 \ + --hash=sha256:926ba1e7e12bbf3f701f7a200e8801c5f9bd05ba2244962692fcafbd32b8a0d2 \ + --hash=sha256:9574cc624b9fff2e8f5946211422476977e43f6b796b83e143b289ecb70df4cf \ + --hash=sha256:983aaeaf65e61ddff125a3eea463675d322d9981510f6f6e462e6bcfc915dca6 \ + --hash=sha256:9b1502e3f160358feff92f60a634e198c76754f50a60fdacd9a8b5dccbe5d9d0 \ + --hash=sha256:9fd9145b1aa8e9b78029308a73e1ade94369d7250c826783655210d1800f1493 \ + --hash=sha256:a1f6e6320aee495e5cad933d671e9d60ee42f4bf460930ef7afed191243aa733 \ + --hash=sha256:a42a2d594f22e689f15cbdbdf4bf1468ef7a8287da41842515c1cc836a1f2dec \ + --hash=sha256:a6d17ca7457000f848556a31f5884b2286a70db1b20aa0ccb090241f2dafd83d \ + --hash=sha256:a6dd7a66fb7416d62be577d41d64478a187d9f36d089759555698bb08addc2c3 \ + --hash=sha256:a7a97a1326fa2d70e013b7af769305796047a01dc4567f5f90d769c6a2e2344d \ + --hash=sha256:a83f1c86aa2c7da33ce4a8df4304d34d6364335b2c455a490983059471e21c4d \ + --hash=sha256:b0eabf671c91fdcd6a61d2177aa434731680442aa2317de54acfabeac4a4cc06 \ + --hash=sha256:b20b3e4bbb672987f9d65e52f1829299589c1ccf0502360879846a922e9cb1ed \ + --hash=sha256:b7ea25c4b69a337eae4377e0c53f0a000dfd996bfe61303bc03996e8b2bf5735 \ + --hash=sha256:ce93f26da63eaa24729d214fa6669525293d75e56f394f2980839cd65a75d2e5 \ + --hash=sha256:d77ecad0d4b8526865f6bec7cd77603c686ef65b57cc7ec81795b3a468dba0f1 \ + --hash=sha256:d8581ccc5f000a76b4304f9c8c4ee9e60499a9d9502e6e0e885c1606d6b29f60 \ + --hash=sha256:d9a15c8155c465066fdf43a2589223cd41f4a688f52046f59edcded0790a8ad3 \ + --hash=sha256:dc199056cbd534c5317899539a36245aa14bce6b8afd48c217e578b2463e0594 \ + --hash=sha256:dca8999e4e87a4e39e162c55b70f39fe1882913c4d7de1adab81cf82bb8cb9ad \ + --hash=sha256:de2c78ed4b88ef6c59a835eebe7f5e91ab6869f17f915a61c7d4eec24a1e2b85 \ + --hash=sha256:e096d976adfd4d2950095e40134832d9325e62b180c6548174996f20d44d0e82 \ + --hash=sha256:e27e34cb764d0dbb07319e3e956be3e08392e55f1e778c823f2f3951246bfd4c \ + --hash=sha256:fac95e67ba91c639c52298388d22595c1d912a09a671d4793c8d16711a0dd1be \ + --hash=sha256:fdf41e97cfb9f149c89b323b7850bd9dc6316d1d79adf99081511b9a1d0858b1 + # via + # mqt-core + # mqt-ddsim +networkx==3.7 \ + --hash=sha256:e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0 \ + --hash=sha256:fd77a511bd90f39f3d016351345b52cf5319b813bdca01de3f755d3cca62e96a + # via cirq-core +numba==0.68.1 \ + --hash=sha256:0b8c2cdf8d52373814d9fe0fdd91a654b4607527657488487c58ac897c2596a3 \ + --hash=sha256:10967c80d943d32fec1a28bad89b404c820778c5d472844661900399879cbe95 \ + --hash=sha256:26064885ae0ffcd365e1801beacc524ac4a9bd306b7552749dcca42e0ef2fed3 \ + --hash=sha256:44f56e7c1e77d3380986f42e187ff13516aeac1f1771fe3826e65f003053d308 \ + --hash=sha256:4d1b544f37fc237d16698a4266bb3d5b3c40ec8aa4c925a191ff09ec6d115310 \ + --hash=sha256:58fe7a3810261cf13797d8aa94c018cfe91e1e8adf634df60eb60ef834f9367b \ + --hash=sha256:5d4bd6ff1923d0b32a2208eaf3e1940f4548a13fdba8bd1ee7893b8f4b8f55f8 \ + --hash=sha256:674d9c19e591e4e706c85ed9c7129dfea02086096250cb957dbffb64ebf3dba4 \ + --hash=sha256:6d115039768cc2eb3cc99b32355ca507e1bbc653eca5492c83ab6399f218df27 \ + --hash=sha256:7abaf69f64cbbeecf0c2384d55d1249ede6206de06d905da48f943c065e51490 \ + --hash=sha256:7de5e5d00e6c8967fc861be2a015eb8ad701ab3cf65d7f4a2c4d950990cf65d3 \ + --hash=sha256:8b33fee239194b9b6cb9b176f3c2563b94e5882fd846748ad0cf960daeee5406 \ + --hash=sha256:8b89ed029ec79d017af9101afd8f832b1f7eb1a366227a439437c17f38be6122 \ + --hash=sha256:9550e3f84ddca05d3cad1f2f780beed004a9b6c62fa12e995fb5bcb871d0cd6c \ + --hash=sha256:9de461812470173a14eeb7e0bbd27c897dffe835402a33861166842fc5f6ea57 \ + --hash=sha256:a4bdbff6ac4ea52a647c758e78403489a1b01a7ee9c2977c92f931c10802c078 \ + --hash=sha256:b206741270692578112600767ef5e4935b38484a9edbc8dd925389ac67d0e828 \ + --hash=sha256:b4d210701b32d1d4ffe26d5fc4e96c6b47e2c5d6c4c1a0f76dc48c156ef295ea \ + --hash=sha256:bd238734c5bd4a7db5dd2e935d60dd9d485a5fa15b37396a2dd690b8b1d51742 \ + --hash=sha256:c6f43dbbdcaac98a75a539b7c79ba490bd7265f24f454ac203de37bc5710ee71 \ + --hash=sha256:c8882360f6bf7c6ff59308dc0fe79508a613a6e92329d4064ddd3258462cef4d \ + --hash=sha256:c9cc5e30f0ec71d1d6e706cd3f9f98218a0221ee8cf25bb2079bdc1a9c4ae65a \ + --hash=sha256:d372139235fcf11e3d81d1f145584e38c75a839b4d02f1f999cda1b134965eba \ + --hash=sha256:dc3f29d540be5fc60699dbac53fc04f246cbf503a4e2e8315f04b70fcd9f1ec7 \ + --hash=sha256:dc54a2cb3ccd2ae30dbae56311bb397bbd1428d9cd8ccb82a70da3439360bb30 \ + --hash=sha256:de5fbbd0bec5496dc0408bf1eeaad4ff64a2b1e3c66b4065e4c42523550ee3e1 \ + --hash=sha256:e5a2d544d8a2da45f9cc5856ed794c31f133ada51ef7a734a9b7cd4596e1887f \ + --hash=sha256:e8069ec8807764fdd355a578e3943132a0b8e053e5d61e7b3639ed371ceaa80c \ + --hash=sha256:ed9e36c95b79b675ec2332951118c3b264921a5cc49e0e934be2663ddece1b69 \ + --hash=sha256:f2170303a731542b5c16501a08b2b1cbb4596e5bb9ba6a661b65ed953e59b8a6 \ + --hash=sha256:fb83f1043e53753503d303036065990ff48fe0ef901e897153f57b2aec12c38d \ + --hash=sha256:fc764aa37deab88718de20151af0f53aa72d1c5cb3b54c6eb648473323f80a5c + # via quimb +numpy==2.5.4 \ + --hash=sha256:067374eb538c34c745436365cf7b0112595c1d326f21ce4ff340f61230239fbb \ + --hash=sha256:0b4724a19de67bea8cfc4970798efa78bcbbe2ac2613cfac16721a42d44de2a5 \ + --hash=sha256:0f02a46e49cfb6c73bdb7aea1c0d3461dbae9aba613542b65f657cd3d17b9fab \ + --hash=sha256:1c2e71b04c6cad90026e544501bbe0ab9290fa8a4d845e7e8c0d124fb429c988 \ + --hash=sha256:1ef3aa6d7e29bb13677323114280b05acc57607fa2300e66432d665d5418a162 \ + --hash=sha256:2132418bf8dd124a427ca9e6a1daf9ee1a87185344c95119ceae868b99466da1 \ + --hash=sha256:2199ed071f460487c8db2c0e5c0b564494190edb4772fe80f9aad88b2604def5 \ + --hash=sha256:2377da2dd3ba2c1200956acbab2a358c83b8e1f8531191672d1cd6ad83250d53 \ + --hash=sha256:298eca75243f2cbbfdb460560b9fb2a1792a33cf2ab4286efd43d92e8d3df508 \ + --hash=sha256:2c2c4afffdeb7920e445028dd71eb932cac3e704792e964bc2a232426d4f1255 \ + --hash=sha256:2ca144f15135b6212a5c47b1e2aeca6e412f102f95a2d5d88d8aec77eb255de3 \ + --hash=sha256:2fa3328f784fc8277fc48026f6cad516f5c561c5d8e2e39b3c9e0c8f23223b34 \ + --hash=sha256:325518d4245b9e331387702aa58c2ce1dc4cdcbb41dfb4ccd5dcbc7e08db1266 \ + --hash=sha256:332f3378fe077dd850e677ec01bdcc4f22368fb5d50ef10b2c79230b1bf5a592 \ + --hash=sha256:3573cd22564692a5b899ec344e5d5b9cc4576f2985b96f22af3564ed54f2710f \ + --hash=sha256:381a7a3d2e65e64c0ec302795ab9dc12bb1e73f150904699c153716177eebdaf \ + --hash=sha256:38f47be9f74ab870d2633b5456ae519c43758a8d1fd05342f0ce4ecc034396ee \ + --hash=sha256:4054173604cd8658796053f1f3bc0befb68ec1c0762c57fdad61e199256a8617 \ + --hash=sha256:468397ba3c64427474706e5c9123fe266395496714dc684294eac75cd4930d1e \ + --hash=sha256:4e263278bfb5ee6409db8aedbc4cc32973b1b82bc1e8d3c668551d04d83a7e37 \ + --hash=sha256:5258bc06526964be5face2fc6f756857a3f24f21ec3e72ca131337a75b165d6c \ + --hash=sha256:56733449d2544178beaa4545cee357370440cf056c197f9c7bfb19dbfdd0e86d \ + --hash=sha256:5ec3753760c1a6d8bb91200666e545c3a9728e6269dfb5d6ce02340996698aa3 \ + --hash=sha256:5fbf7141bbfd63aea22f435c9062a032b9ea0082fe9845dad7f021d3f1234e71 \ + --hash=sha256:64d1c8ac28a4077cf987e0a71a7a0ef7e2df70722f07f0baa42dbb7eb6938647 \ + --hash=sha256:64f9c9878c1938476365e11ccfb6b770f3b9e5f045ccddc514235041e6959365 \ + --hash=sha256:6c109eac9cd439193678f69d70733c1108487546ca8eafc107b510ae10c1aecd \ + --hash=sha256:6d6a71b9d9a97c03633aa12565ef2825ffa036cc1d99cfd50dacf0f128af4fe2 \ + --hash=sha256:6ffa07666f8da0eef81d149934a626d0d95fbd6838432a33e66245423a9062c0 \ + --hash=sha256:7415db95818b39ec475a5eea54d9e3b6bc83e3912158e46da3438cdce399804d \ + --hash=sha256:77045a4b175bbf5316ec08003880804336c78f92281a1b72222b274ea85ec5ac \ + --hash=sha256:7a14a461d9340f1b46b8648578aed9cdb8b3b018a8fac6c1dde2c9192a01a87f \ + --hash=sha256:80d6ef6e8620eb2c2b4c4caad50b5935d6db3cde2d51581b55dcc79e14016d1d \ + --hash=sha256:81e3420b27048b65eb14c3acf0c174a8cb0e023277716110347d2dcb26026dad \ + --hash=sha256:823874a507a84af050493b622affde94b6f7c3a0dc22cb2801381bc03b871c00 \ + --hash=sha256:8b4d2fd2d34e5f8c9235ee787de5631a37a28402b15cb80814df973d2be54129 \ + --hash=sha256:8dddfbee2e68d26d0d7d7d9cb247b1fd4409241cce32d815a11d97ec2cfde179 \ + --hash=sha256:950ea81d57ef070665581b6e1b5f6a029306423cd1739c5b95fe78aa30db6b9d \ + --hash=sha256:956555e0603a4d38019ae6925711cb9dc43195c076a928accf7ea5d50bddfe53 \ + --hash=sha256:98b053943e5a0474ec0da309d2cb9d3f18ea57f8a2067c2ab7b5f763d1068380 \ + --hash=sha256:9968ab7e49b93ac6e1c3b2239732183152c9150f16308d30b66a372cffe3483c \ + --hash=sha256:9a94cf751c9ad8ebaa835bcd3d40dacf8534ad086b88c38029b65123c7999d2a \ + --hash=sha256:9cb18a327b49c5c337f972b03682f6a49855525faaf3c0d3e9c96cd0fd8880a8 \ + --hash=sha256:a7b1b6353e36a7e50de2973a38d705c88ee93adcf120673cee7f45a4a3fa223a \ + --hash=sha256:a813ed7719bf45463c51779e6a98d0385fe905e48447526938a4b8337333d551 \ + --hash=sha256:aa1cce2ff3f8d953de38b76bf44602caeb69f101430208f64a10067f7cb4b1d3 \ + --hash=sha256:ad62a416ddcf863bf44bba76fbf6b53366ab0692e294f51cae4b5fbe0d246788 \ + --hash=sha256:aec3fc4b32ff82421274f5d205c559c51c840c8df66a78efd7f3612dd005a26a \ + --hash=sha256:b1185012870173de7ae33d370bd45b1cf5baee747ea4b97036b65f4e93016877 \ + --hash=sha256:b11e8fda06a7d69f15ebf542660b74466c2e51094800c1fb794f47ad4faeef17 \ + --hash=sha256:b64a85f40e154983960a4167d4c1d57a50c7f109b3d3264a3a984154e90a8454 \ + --hash=sha256:b86966fbe4ad7de710422175572bcdc75fdedadfb54bc6fab7deabccddd7780b \ + --hash=sha256:b89d0aaae2fe498c648f4c4795c084db535af5bd98ef942b2a3681fb74ce8645 \ + --hash=sha256:bc39ac66a7a9a3fbd6134fda43136b60ffde99c8f4501e64e0d2b24da137babf \ + --hash=sha256:c05ede731b03fb1b7591faca9389ade3267d2bddf1ad8882bb3f2cc5e101694f \ + --hash=sha256:c6342f54c67093cae5c0227eb0eb772fdb79f2a2c37a6eb278b9909ee06aa356 \ + --hash=sha256:c668b2f0d651605b58892644b0e302c7157f7159544227758c896982ef384b18 \ + --hash=sha256:c9b80cdf5cedba0e90d93fa5f9a333c4d65bd545cd669b71bb97ce2b703c9d73 \ + --hash=sha256:cfd73180400042a7c532d30c5e287bdd03c59ff9ee1b4c0316af0539e29dfe23 \ + --hash=sha256:d4cccbbc78717966f764cd3af4fb70276fa01fc7a2688af11c78901fa5c04f05 \ + --hash=sha256:d549420b8858885cea8838a727842249218b9c1da24dd517e25c9c7a948310a3 \ + --hash=sha256:d8200f16437b289a5bb927c6e184eccc3e8389bc0070fea4cd5b9e13c1757959 \ + --hash=sha256:e94aef2c639da4a960ad0db8e06471208d8589974953d78b61d345b4eb99e394 \ + --hash=sha256:fbde6962867ee75b48b0ee29b2b9372ec5d617799dbaf38e82dc0596f2f7738a \ + --hash=sha256:fe4d21ab149f15e4e6043dfb0de87e6e5f34ac176cde83060e9802981fca2ac2 \ + --hash=sha256:ffa6ce09a1c6a08e9667dd9c97aa0b14184e8d18f2a14b78b2a2328c9147f076 + # via + # cirq-core + # contourpy + # matplotlib + # numba + # pandas + # qiskit + # qiskit-aer + # qsimcirq + # quimb + # rustworkx + # scipy + # stim +openqasm3==1.0.1 \ + --hash=sha256:0d3a1ebe3465e3ea619bcaa369858bba8944cbb0c49604b24f94662d3ec41d41 \ + --hash=sha256:c589dc05d4ced50ca24167d14e0f2c916e717499ba0442e0ff2a3030ef312d0a + # via qiskit-qasm3-import +opt-einsum==3.4.0 \ + --hash=sha256:69bb92469f86a1565195ece4ac0323943e83477171b91d24c35afe028a90d7cd \ + --hash=sha256:96ca72f1b886d148241348783498194c577fa30a8faac108586b14f1ba4473ac + # via -r requirements.in +packaging==26.3 \ + --hash=sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79 \ + --hash=sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c + # via matplotlib +pandas==3.0.6 \ + --hash=sha256:0704044b676496b8350e023b09f174a26772456c974a2b11c36bebb558c9490d \ + --hash=sha256:085e3786ae6b2e82b406266bce36690f72b9dc1421903ba9296b2981a9fcf586 \ + --hash=sha256:097090508a1dd335013d39106fc10b20f4fd4a171638e47b77d55798ed9dab6c \ + --hash=sha256:1bcb3e9ed29e74a7439cedff9e2aefd3ea65de84d7de9ccb6c194192541bd60e \ + --hash=sha256:1e7c0afdcaf6661d795fcefc2f647ddd1136f62cdc153fba177c685d97a87808 \ + --hash=sha256:1e92d9fa834c7d877130027cddc0cad8dcff97c1f6cca26bd6310f847228b658 \ + --hash=sha256:22172a92e7ee678ec0140c7af4fc9366b55413834a1cd86af78b3caa0b0574de \ + --hash=sha256:253e12cb9081b0afbac607920f6142975966bc315135e09de275fdbaa415d2de \ + --hash=sha256:265f562fdd1079f69f3de96dd425c3405224038c0af4f920c54bd240ee2c4640 \ + --hash=sha256:2a8fc94be2ee5f1d86f97aacd8cc566f81680b6498e76f3007421bb5d98151bf \ + --hash=sha256:2e5fa32ff162dfdbc280157d664f44d23049ae414725af9676df339c501d82cd \ + --hash=sha256:3ef908d28590b3f42d7070e7ad8f9b34b442b260b7f3c1afb57e0040c58cdb1b \ + --hash=sha256:429d9df32731ab01383ed98f2baa7a60368090d1a94fc06019a12062510e8630 \ + --hash=sha256:47121f9571503f724c9b93e297ab6254ac99c77adf5e9ed085ea419fd585c258 \ + --hash=sha256:4e25e2e1adee99ddfada6f7206a79ae8e9c8a8861b0e3eaaba165006d3eef18e \ + --hash=sha256:4ff44b2cb51cbd691c91f92c4ea6c71e34003f239ebd67c2e857dc898466b49c \ + --hash=sha256:50c44cbf5820b6b91a5f74aae04972472aefadd3cd9fbd1010409d85528bd570 \ + --hash=sha256:569e114072b24fc4970c12e2b4bab252671668a40b324318903380cab0254c0c \ + --hash=sha256:583be68728a31d0d750d5b8d9e00f02b153df0d4655f858bde93cb84cfc4227c \ + --hash=sha256:5e75072773c1b2f7cb63faa3a6f562aede11f3976f68ed34cb538bc091a28171 \ + --hash=sha256:5edd0a7abb0986ecce1ac81f56d99b6763f86aa6946dceb6c661224f90af5a19 \ + --hash=sha256:60d81f9e1799b36f3739e7fff44d1fbb2e8fd5a271b3863e03de9715fccda0fa \ + --hash=sha256:62f51d7f651c8054c5e82a69265c98082e795d1442df7ca6edc3a545d61214b1 \ + --hash=sha256:654aae059295dbba6ecd2328ca12712a2cf1676214c8699f1c29213f7ccf9c34 \ + --hash=sha256:66b07ef7315a31bfe1089cd3d71a7de781c9dca986762d0b4fe7c0ef17465d10 \ + --hash=sha256:6ff482fa91fa2bafd92e8fe66ce3645c851824310f295c1f0a2f96e928fc4541 \ + --hash=sha256:77ccbe5057aece6fc172b9b77f19c04335af6882bc2e10c8f3ee4e6bfb3da553 \ + --hash=sha256:7dac2d65e9087e8e7b5a45fe15c4920911a221df061ab629943ce016489145c7 \ + --hash=sha256:83e91d15738d7783c050197cef2f2cf82fc6353dae9865aa87ed1fa16aa4d55a \ + --hash=sha256:86fa853a12e0b70927e2b1ee00d56d2224ec9cbb4b9d58348b5ad52d2f21150e \ + --hash=sha256:8fe77b408d82e2615674dfed62533b95e18a03610573877422aada4f625d4947 \ + --hash=sha256:963ca21199097a84c7827c4678b04e30833084fbf8ef44fde3fa7180a29f8fa0 \ + --hash=sha256:97274c9adf6255bb48c620cd6959805efa7f09ea2167f0e0ae006a448cd2fca7 \ + --hash=sha256:994a79608263fe1c14cc48ffa7300e2b834b7d1cb406ffe96a08828cb0cdd79b \ + --hash=sha256:9ae8073aed8e21d1a7fe263dcdc6840743549722a6738198a0a46000fa9476f2 \ + --hash=sha256:9dab635a549e58a053c7b0fa054dc0bd7be22f0ed9a720f4a85d5fb993276172 \ + --hash=sha256:9e492cd4bdba6778de4fe0df7f4590c012161ebcf9902dce01b01dc683105514 \ + --hash=sha256:a3a22e07fe75347eaacc75b0e85297947af4fba6b4aae23916bd8b6828d0bba3 \ + --hash=sha256:a4dbd4dc65cbe645b92b8785d0f96dd7311010dc6606cf620e51b07b8788a12a \ + --hash=sha256:a77a1a44e4d88f1c6a2a64d3eb12efec8420875722e14279800b173a7c7c2804 \ + --hash=sha256:b27c8d890e4aa2171437ae2a39de1d215e674158e4865c4023a8b31c932513b2 \ + --hash=sha256:bd75ed0c840f709fc2ae26ddd9534ac77ca1a48ac0cce521a74acaa85f3340a7 \ + --hash=sha256:c6e4aae3e9bea26c6c9a20d88d96c86ec4a99b4db5fd516bcb4e829ab2c0ee36 \ + --hash=sha256:c826e9babb7790142c399f58599d8de679bea059d7b39c5b6efa2096fac37266 \ + --hash=sha256:cc39303913e2ea129915670de5d1c9fbd647f543bb72e5543bac8baa94e9e42f \ + --hash=sha256:d7564d86a94c2eb8ab290b07f63ddaae5c032fa53897c29a2ff2197d43aee8af \ + --hash=sha256:d7dcd21238cbb4828ff148481ba01cac8946dc5121457b5aeba28636f8f99a60 \ + --hash=sha256:db7ec631f26223beee8e5c9e0b8f23c24d8197bbd1d982421d4e3188bea51965 \ + --hash=sha256:e3dccb584123b399c07562ac4d62543e90ede49ddf8ce3c13ffc64cbe828c281 \ + --hash=sha256:e7c1905ef02c3d6d43d9dbd5b6ccb4da4870a0b0c821bbc103fbdb6f3ad2707b \ + --hash=sha256:eb6900de08ac85f93ac4948aa6b80842eba555875337b8359035ac9c43e92d34 \ + --hash=sha256:ee913a91669056c1de1a6b733fbfeab711de9e54e3bee2dfa5fe79d9457247d1 \ + --hash=sha256:ef738d71d1059245b6bb03e312be06d8b3821326a83486c1ad03b9aba3710e44 \ + --hash=sha256:f3ce8a6968045481e91a3990e797e348ce13db45ee164a7095bbc824e26c09dd \ + --hash=sha256:f4e7c52eb108d752e7592268108fd3e98efd76d83a3125cdd06c621c2e44359b \ + --hash=sha256:f8029ec0f1f89e4f985929ce1f6626dabf3140d61a4e9c1215afdab34eaf9a5d \ + --hash=sha256:fb625f426b375bcc96e3a04c5d5d266cd7be6ae5d6866e0e703382ab5164068c \ + --hash=sha256:ff51a4459ed036e93d1eb1bb5e6e7b28685d3cb6b7c12b91c05b31024e234729 + # via cirq-core +pillow==13.0.0 \ + --hash=sha256:02464da86f561f410e13b061ec37c3068a9cb557a095494157742d07b3c24a27 \ + --hash=sha256:04a63720f79e22fd54d897c233a68314c50ca0603360f54ce2bd5db8f0f43782 \ + --hash=sha256:05cd2cd39055d0b9650060e4513ef4a9a0aea870083950bd046a0d6490f93a22 \ + --hash=sha256:06903aac074d00c988e77a1fc435286dc498506d4ca8d6f69df9babddf4ecc15 \ + --hash=sha256:08b826a9bf1265c76de04a42061d61ea6b109418b7826f28ff1ecdfaa26c5502 \ + --hash=sha256:0d1a9cf7bc6917538b20f8d06b9ab2147e542f68849e96fc58eb66bdf6acc692 \ + --hash=sha256:10b5019883c98f1dd819ca48ffc6f33a91cee04948fe637c605f4345c7cafd6f \ + --hash=sha256:12b0fa15879fe5a9d9eebe66e4e2d74128a773b1a4448010c9c714f45e04b9d8 \ + --hash=sha256:12fbb851cf323cc19aac3eea1df5ad17b57e91e9fe3cfd06100dba7bb8208c13 \ + --hash=sha256:149a1c323ba366f90b48e6f1a6db6582eb50512df374588de56fc909abc0f0f3 \ + --hash=sha256:19b66ca0a4d25cc0200b381ce824c7ea090db61427315e73cfb05dbf1b35c369 \ + --hash=sha256:1c774b9c0ba0d0b356f71530677b39028878a2cae5a93e0a13779cfd17120f88 \ + --hash=sha256:20722cd5375533ad754053363a80b8fb30c79d37930a6f7228030e237ce3bd5d \ + --hash=sha256:20822140c9a2ba9c5e42df342b0a892ab2e102fc0e3db967a133bb9ce3f898bb \ + --hash=sha256:21c32061a5512dc13f87cc7303e120e4d77c2f70df89a35af0e3ce246e5ac57f \ + --hash=sha256:2310e2adfc13c6d457d7d0f2ffdd5c56a74a317650cf765887df8d515a647ac0 \ + --hash=sha256:23edf4ec4b6f4f240e8df6e4985e9ee2ced86474632433e55fb1e2548744bf40 \ + --hash=sha256:2d50500a4a3bc6469adcdb319cf05d688b08ca3bf0f22a05339f3b25b433a599 \ + --hash=sha256:2e31c4e68cffd7b1f116127626813b82fcba19edf6b940a7b0c266d6484d0055 \ + --hash=sha256:34fb3db1149c879343861831728c243c432d4a5afc8f1878ca7612ef8de2a033 \ + --hash=sha256:37290fbef0c73e2d51d594eb78fded7dc7170d1c3ad0a890269e6fd8c8c4e061 \ + --hash=sha256:405be6058e206a86fedce2f715ecc2343f94072d7925251632dffa2c05f70dca \ + --hash=sha256:40a266371ece581e5de13b6635ef78d7487824af80561b6ca27694a88c19bc0f \ + --hash=sha256:42d63be3af4f9b951b199b0a9d23365d37ab14687e6d77b74940432c8515c4ca \ + --hash=sha256:44629d4498c9cb6b2051806155f22141df0d8a929c56134b166655232dfb2f8c \ + --hash=sha256:49c12af515073e9bf511e4ef736743bf70d531a643668722279314b937742ba4 \ + --hash=sha256:4a25756244bdcce3b50580baadf320fa48297f0eeb8e114ba64139a40d4d0fc8 \ + --hash=sha256:4bd024d567eca931b668978d672dba914d4b8e2628e2c3073a2ad178de8a2620 \ + --hash=sha256:4f8db54177035a2b5f717f94475b74907e12a96dc74f6d487f3966b0a4694071 \ + --hash=sha256:51ebb529fc5e8abdd55302f6c3f8943037348ec2384329a3e55677f69ae2fdfc \ + --hash=sha256:567f20f1c75897d7663830da6ea8af719e03d712b1d9ee7f813319f9ece42e5a \ + --hash=sha256:5933fcea5a5ba64c686f55c886a115cbfd92f2900460784a1e79909fdbafd7b6 \ + --hash=sha256:5bdb38ba220b61b4ec31dd1046dea6b016d3c6850a23f43ed8b58332b2fc668e \ + --hash=sha256:5f56499c1a74d2b862beb0c33b8016f99d095858455df9d21583bbbc1c15b582 \ + --hash=sha256:67871a13cf47275201553b536c025da777f997fa562a19eb798af4ad4b97c18f \ + --hash=sha256:67c8d44ad89fa7eb88de5d6ef6199b1e03dd24974f85a67639fc8badb801fe79 \ + --hash=sha256:6a0920cb55df5a4d3f6862964908078c0bd59332bdd1bcd20d14e8c70ef27cc5 \ + --hash=sha256:6bce6a29c3898191f4c9998e4d4e8f69790caeabde46e54da4bc235ce5bde683 \ + --hash=sha256:6f38f3f885a09cafc93fd667b1173a92f379e43785d635e7983c893f0da319fb \ + --hash=sha256:73ee25cf8cf8b75d5a5aeed7cb6588f5e5dbfbb0fde51707b630bbb23897645c \ + --hash=sha256:7b999816b5850a35ada08443e6e03945f1f6488144a83afe2d37b240a552aafa \ + --hash=sha256:7c88c10dd432f3b39ccdafc9ed81d0c21b8fd634502574da76d1bfa4fe2c76d0 \ + --hash=sha256:7d5e097eabd5d4915c27ac9f6e9325bb1e01a7c94d7348b5c4451d3fc30e8521 \ + --hash=sha256:7e91e97a929232cdb828889ee6ad0e48d7f40f4ec38818f4e4a8968b2b1af22e \ + --hash=sha256:7f6299e494e46253d40c34653cac369412f44ca53b5f85d848d3f95b1ed0546c \ + --hash=sha256:816752a5ef76a80484c8c441c85593b7ea9304f6231fc5776ad1fbff7e773058 \ + --hash=sha256:83b37abd87b590acd8f47ca8a61f70893322b11834d36e07c2298dacad4d14d2 \ + --hash=sha256:8619685cad8efc4c38c66d3b36aad854523297c43d748b3b6f0cc03c90ba3463 \ + --hash=sha256:8bf295fe459343bc6093c8e5e0df60bfa189e0fcb775a22e2c2488fdeccc6c0d \ + --hash=sha256:8e459b613cf31f8980f584387b4fe47bf08e076e288d61aa8eba1f7fd4ddbb81 \ + --hash=sha256:8f36aa77f74b14a2103622b196402c71330e4e7cf4122ee45c854e9a01e0eecf \ + --hash=sha256:93ff9c9c3663ce23aaa5d0b6b6abac55359e2a0c06c7e30f3771829af816be63 \ + --hash=sha256:9a635068d9793c7f0d929f39f18b58f1bd86c236e8e7b64167b86af9232ebca0 \ + --hash=sha256:9dda0788a9932776a75d8bcc020076edc308ce2508b51f6739a45e3158b3fc42 \ + --hash=sha256:a192360d512305fe92d3053e4f7627bbad1f7708f1f4ad38cccd9336acabe9ad \ + --hash=sha256:a2a14cd73d5e6c927f644b0110ee81f59c4ef506259ec9183904747f2caacc81 \ + --hash=sha256:a625df9a2a5597fa5e5266e01aefc82604bb85d291e3547981e863560d75da6c \ + --hash=sha256:a6aaa7871aebca081eb5c45f83e845bbd9712ae99fa9286dbfdcee835e63f4b4 \ + --hash=sha256:aa694c49787040943570d61c9b8fc01271bd2a2cfdd55f0d896f8aecdce1a981 \ + --hash=sha256:adb3c2124c68e480f4632d06cb7caa3b48a51678475f483b4edb1c6dee29ea43 \ + --hash=sha256:b84be41387fc00db28c13c02e30d42b02d8d8f6a4a741a1aee6012ca7f1f6039 \ + --hash=sha256:bf97ba1b5542050e9b0c74e632323b6d8136cc99d64e193abebee22fe6013c76 \ + --hash=sha256:c3bc8ee0271387e0b1e3ad0ff893645990a656e79bf9c42f4f734a3642b11d51 \ + --hash=sha256:c50c80e3591e5cf9a8dfa6007d4f10732f02e32263850999286e56ccd650cfb2 \ + --hash=sha256:c6fd031333dedcad7ce3e03d244093f43504f209e86925ebdb2b868fa4037630 \ + --hash=sha256:c87a04e7f152ee4db5dbe15f0bfa3fe628a1aeedbe66b81c43b87f52c813f9ac \ + --hash=sha256:cdcd1ba258178f7356d74170c9a81ba4eab6a5d55748bc402a5a2a6fe6be3510 \ + --hash=sha256:d4737f50d23ddd11d6685faacbb9252887dde0bc7997127757247983d74399d6 \ + --hash=sha256:d7710eb676e9bb68965cb045be0d333b4c0d7f9dfbaa7fbf121385b1588683d3 \ + --hash=sha256:d9b0a2bee3f3e03e9f29057aedb807dbf1e1d96ee1b9d0f422d9db6c8583271d \ + --hash=sha256:e65dd6e75de67b2362a4fa3e16aa627595f65054dc4ec73d64680c84d592fa61 \ + --hash=sha256:e892354a424b1e82a78ba16785822bdd40de06f19446a3d4a28047df1a4f8932 \ + --hash=sha256:e8ca8f69b7c77fa96dad99f8638c1fc4f1c0bed4acaa1baf7a3c31bdb80a0ab1 \ + --hash=sha256:e91c2b1cbeae768c98752e67e717e283d68dae45717b41f2d91eaee648e37b7d \ + --hash=sha256:e98b4f91f99b24b1da72e10621ba181f7281922384a7403094debb4199de6c00 \ + --hash=sha256:ef5fe6b7db3f501c56000ba8fe7c7e1a35ca1d45824fbeb95a67daa85cff4dbe \ + --hash=sha256:f11a3c1358bb3c68012a7b1f41b223c3db9f7bfde90b481df028cfe1c3363313 \ + --hash=sha256:f391dc92a015c478745192fe4f2e120c2af2aba18d9fe0616341cbf537599806 \ + --hash=sha256:f7cbb7a64e7ec664775195e4f81923bc8a93d9451b963f844e59118f63147a7a \ + --hash=sha256:f9bd7d260d986f3553518c5d723544346fa48031f8aef3265d786aeb59845bc0 \ + --hash=sha256:fc481f742ccda20e9ed760b8f978dff50f2a4e9bc253ac167fb0a05b0783ef52 \ + --hash=sha256:ff3fe9eb621fbb9db4c4be33ab946f6bac5f98ab50ca8d3260503653656c961b \ + --hash=sha256:ffea6b2986a797c84b6d1d27d4f43e0b83c73fc16281a930891cd237cf0d08fe + # via matplotlib +psutil==7.2.2 \ + --hash=sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372 \ + --hash=sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9 \ + --hash=sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841 \ + --hash=sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63 \ + --hash=sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979 \ + --hash=sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a \ + --hash=sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b \ + --hash=sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9 \ + --hash=sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee \ + --hash=sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312 \ + --hash=sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b \ + --hash=sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9 \ + --hash=sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e \ + --hash=sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc \ + --hash=sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1 \ + --hash=sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf \ + --hash=sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea \ + --hash=sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988 \ + --hash=sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486 \ + --hash=sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00 \ + --hash=sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8 + # via + # qiskit-aer + # quimb +pybind11==3.1.0 \ + --hash=sha256:a1cc06b524ab3edca51f8ad3895f9c4fa20b8b19283173dff4ae781449dc9639 \ + --hash=sha256:b8488090f8acffbcb6b5d6a85571a6827a0a2981ffb75e5a0b27b87c4a6b7dd0 + # via qsimcirq +pybind11-global==3.1.0 \ + --hash=sha256:ae4ce119e9f0d7a2ef2372a6bd70d7906073a67a7d7c759023601a629c4bbd36 \ + --hash=sha256:ba63ced81e1ae5c7b4f704d6adedec6ce1d80fbf9a2ab557a2ca380f29eb3320 + # via pybind11 +pyparsing==3.3.3 \ + --hash=sha256:928ae7e20211f3b6f3915a72f06a0cfd29ab9d24279dd6346b6b1a7146397d36 \ + --hash=sha256:ece8c00a69cf01b45d0b1dedabb469c90d8caf996d4fda40f147627a122849a4 + # via matplotlib +python-dateutil==4.0.0 \ + --hash=sha256:a5e246f79eb80475e691bf93862cead98decd8a498cf53ba0516fcdc0f50dc1c \ + --hash=sha256:d7295ff14fdc0f92f662100bfb6c551d160ca090f2939f1ec5b9794265c03f06 + # via + # matplotlib + # pandas + # qiskit-aer +qiskit==2.6.2 \ + --hash=sha256:4d775f072025039dac8269c1657970bb17b0965a41ce841bd6576b83d6ef2fd0 \ + --hash=sha256:7a6f2df167ed47b93cc3a72fbb4072ea873abff3f63941cbd884d0b227b83190 \ + --hash=sha256:9c3b47903705e6803df1087da75d744c8f7724847b074cf31b75362c98202bc5 \ + --hash=sha256:9e7214b8bab334a1532e1a71019fe3de7517388b349ee68697e7dd45348654a1 \ + --hash=sha256:9e99a5765aff4419463978437ebf9de15bccadbc663893d543d53de106da5535 \ + --hash=sha256:b85b5f7b56700b864cc06dbfb33f01453a42024cf5ab954a0e0a275127ebd255 \ + --hash=sha256:b8e20c86399c916e0e0b515c4cb5d22721a851b97c536b2f7e2afa1ee1931590 \ + --hash=sha256:e8578003e39facf72289fafae1542e38646e5cae7c93665f004046efa5797669 + # via + # -r requirements.in + # mqt-core + # mqt-ddsim + # qiskit-aer + # qiskit-qasm3-import +qiskit-aer==0.18.2 \ + --hash=sha256:014d05f6bb798d5717a5c938bc592b1ce0a7cd19ec10398ee2e761142406261a \ + --hash=sha256:0a39528b9583c0e902ef322d37cb0cdf0a3ccb8956b615258f47f3fba8e27ea4 \ + --hash=sha256:0b75628349dfc1eb745d392b63b9001248d045bc42a97112235c2194cd42c620 \ + --hash=sha256:0c010f3829b925e6cb77a1856d099b742b2dbfea517f9b0422eef9247f884b49 \ + --hash=sha256:120a0c495cb62cc8c9cf38a7d039c580e732e1bbb1cce6ad7aa5618f81b46523 \ + --hash=sha256:1ccaf87ab7f6bd956c4e96da0e84b3509ca31ad755727cd1538953b3cf0ebddb \ + --hash=sha256:2029706f823bf99bccb36a0e648053fb72a6f324f2f20574431b970e0542c16c \ + --hash=sha256:26713c8a65d9b4db5ab22e0e52898a7bed5ef2b04b1db012e432c2c011efc09a \ + --hash=sha256:2a27caeea887388eed4b14944577cbe74520c5ba332f0f7cf1e6012b272cc2d6 \ + --hash=sha256:40aa9bcbae38afaa8f01c4793eee771183f0f9f9349ec4ad796f1f032f254802 \ + --hash=sha256:54a8d60c416b10032c6f21f88051466f859c60adf0663fec7deef6f474807dbb \ + --hash=sha256:562d1fdfb89587491711c467b009d8f106a21d13caa40daae40d50d632266c4e \ + --hash=sha256:57201e4731c63a83af9164870dd1173b42da61bfa80cf7b4122821b4c81faea9 \ + --hash=sha256:5932c0c15fbb6ac2451d8773e1426e21f03d7c9b0086c3d49fb4f7b9d8903eb8 \ + --hash=sha256:617f8c35a06c86e12ebd85df261c34ec8f5265ebd622757486fbe390063f89b1 \ + --hash=sha256:6f6285f8214cdd53526fd0d33ff8f7855f7d87d98f57c3c6417cf87d29e542f9 \ + --hash=sha256:741b44d6b80a5806955221a524ea2ee1b6e23b6ce979a765a878a0dcf880cf51 \ + --hash=sha256:7b17daa83b0ab5e5d75660e0cd6007485bf28f8a88fd78d70a40dcbe208fa71a \ + --hash=sha256:8a0663ab93d7564165d6393c1e08291a9c68067481abd790492ced51e6897b6f \ + --hash=sha256:8df1171a0f3685d85a2e12425de7d907ee36d98e8cd749e9e853a7624037c060 \ + --hash=sha256:956d1b6bc307b7e7aaff1a61654303bd755ca737f6c6293f746fee73219638d2 \ + --hash=sha256:be5c5ad4d381653bdc4ab0f4e84c5347c4ee12683d7662dea612e4b04b32a710 \ + --hash=sha256:bfc0ce3ed51b00d9d7c2675e4a3021127ad57aab0836f72c2a5e4f9549db5084 \ + --hash=sha256:c8c2aef71c04f49377b3159d332d306a6d6e85b6a2dd7a4831e8cca01cfcd8c0 \ + --hash=sha256:cc5da3dc8f4f7a93f0caa5611317264c86fa42dbb74787286b81988a34917fb1 \ + --hash=sha256:d469ef2c7c5711b74b2d04b54c715350b76152f5623cc6036db3c91dc6ff420b \ + --hash=sha256:d471d1540f003382c0a9a6a81db3a0cec228c40fb425684d4c613e14d1238f0b \ + --hash=sha256:df3ef546a9c289d1ce33463c14dfad45af0a5a32d375a309c19cabc30e0447cc \ + --hash=sha256:e009515fbde3e163cadd76ba062ae9688f98593097d8c2560600e3e2a72d33d0 \ + --hash=sha256:eacd82b70dbad3963f44e50db2d9075d7c89b3ecb879626211413af4a261c496 \ + --hash=sha256:efaf9770252e33b9c993f400ec3407c645266e8248c6fa9fe679e787c87e587b \ + --hash=sha256:f21a15e7409c729bdcd79fe16e9d7e2e8f2460702bb8929de2a0b75657c14bac \ + --hash=sha256:f5628ab71b791a634a61fac4ec6d51347111ad6e45ffb174db25e2b9afe4080d \ + --hash=sha256:fac7088fe1067fd5d100bc61ea6a18b528a99926c49f70f6eb2fecd49d01839d \ + --hash=sha256:ff5919f174399dd296a18ae0ae43d545f894c714135c8a2f2ded887476b97162 \ + --hash=sha256:ffe3885a4d72083b79776d16695473f3e412115519991d5084b255d849c908a9 + # via -r requirements.in +qiskit-qasm3-import==0.6.0 \ + --hash=sha256:2109b65a6859bec4a51e7b61bd525365f298f67f19b3952bf602423c6d21d697 \ + --hash=sha256:6b763ee58538b33eaf5aaa8126b687f3c03f26c4d28e6a4f04f9be24a6b184ff + # via qiskit +qsimcirq==0.22.1 \ + --hash=sha256:0de15a2b8bebad4f8166922797e44f5da3d29aa14d71a8b4ce277774d3d498ea \ + --hash=sha256:16ece72681fc99b71c31c44a9464353e41edb2c10f9f8b381ae6cf7756d69c3e \ + --hash=sha256:18f4cd93b25caf3fcf824d9fb34d0067ac1b3078d6a3a8db7474b1805f8fe98d \ + --hash=sha256:1c2f5d8f38ba2cc2a808bb6e6ccb91701b11d810357eeb4d888a664ba45bb395 \ + --hash=sha256:1f694f445b3a156f740382c6a9a9e8d79343c389acc88ad52a819d024832cab8 \ + --hash=sha256:320dbd7ee61d34b135be8fba497e4fc0fabb0133f0067076aa85529121784f15 \ + --hash=sha256:3519287025c3ae876500b563a16e046c3f7ff4629f42307a499f7bd9377af221 \ + --hash=sha256:3c173dbc3dc458aa5c8e684cee7d2122fb982cd4dca4a927d0b82b7e2c00198d \ + --hash=sha256:642199384070041495131a08d52362cf9dda7804e02255a4619e2d1f74cd5738 \ + --hash=sha256:6563a0be721abc77a270b4218f6011e64c44b1bd89def11a7cce43654eee2c97 \ + --hash=sha256:718e76419ca4537594f036862eedab0300d922902f60f54a9a0688c48921a44e \ + --hash=sha256:7b18aada0372bf1ea1799c30edcae8411a51797aeb7becaa3bea775284070ca2 \ + --hash=sha256:82dc81fc1be7941abd77696dcd278a4aede785798b6d3ebd9291be686882e193 \ + --hash=sha256:86937420a97718415fef23bcbec0013fb3eb28f2d81a5113aab74e91bcf060a0 \ + --hash=sha256:97dd7c804a46f3b241b3932f9ee0e5a4f1fc342ba716cc116a730808b0332c82 \ + --hash=sha256:a7959f161b7ed1c165e5ff6c2069e8b5297507fc0c94a9db0a848b863e268780 \ + --hash=sha256:ae0a2e6a90cc39140684e8497683de791d593fc23921758d39a7c855f7c2b8ae \ + --hash=sha256:d3d2c6b6195ff4fe7b45b00bc2f38c32f8b1bc0fb85acc49289e334ed53ebcf5 \ + --hash=sha256:e4a97372ac4e9647d5fb5dce715a13a93ab21a7bd2056b9bbdcf30fccd6afc1d \ + --hash=sha256:f239d25fb0514fa236311872737fdbdac15ead9836d878f8d16c06761579eae1 + # via -r requirements.in +quimb==1.15.0 \ + --hash=sha256:5ebe1679fbdd53d951ef5f47817f1639635a2f58f4cfcbefd636802066bebe46 \ + --hash=sha256:a8b4a11df89f50a8dcea6722c58d6077fa4133c9caaafba7412310877e51d81a + # via -r requirements.in +rustworkx==0.18.1 \ + --hash=sha256:1ebd2441a51c68a784df8c62dc2e6f1a9f58c0eb1c2e21fd59776e08f55c0c0b \ + --hash=sha256:212d0a4b5ccec8cc8c3879dd1fd13b1e61894c708185f12eb63ae571349c4d95 \ + --hash=sha256:30affe6ee52a6257a01152418f9c1686ca114e7ab4a3bf87bb87fe35b7350f3e \ + --hash=sha256:48d42983e62412e3ffc1e58c2ec55222ec82fc0e4c6dac576ee203d71091038e \ + --hash=sha256:5ebcdd8c55d91583c94aa62ef332de3a724b69a57ae2b5c9fcf7051f3b41fc88 \ + --hash=sha256:63784612ccefb866ab1e07c48060a3f7ff5309629a263db6ba4a0d9a84581852 \ + --hash=sha256:67dcdfcc3dfc8262f7627d2b3ae85ac74de1b1dcababf637a1116444c4adb621 \ + --hash=sha256:685d4f69da6ecfd35110f4d7933c6fa392fb25c98f369b24032758d1c57d8055 \ + --hash=sha256:77103c119e71d816c04bcc60443184cae9550c1d49e5c28a046850252c0e9846 \ + --hash=sha256:80a397a164003d9ff91c11357f9c34120c39bc33a62d095dcef2b75dd4feec51 \ + --hash=sha256:8c771009dee311e207772ee17277887c3bd2fbd0de6a208e8019962ca4432008 \ + --hash=sha256:91feb30971df6ac53d51503970e4aac67e4d9bc7834535f2b7cd3674645003ac \ + --hash=sha256:aedc1b30330927810588b3dcf5e3032c5379cd19580fd01ec8e13f1cec55c30d \ + --hash=sha256:b23264fcd2feb254ce5a1bea641cad9f97e06202c5c0904d5fc6abd95c6113ef \ + --hash=sha256:ba997e8c22564bf17b110514fba530bfd0ee2868506c3e8e4b4bd3f388e87b3d \ + --hash=sha256:c42a0a52463ff78c0dd03426efa7b40b17b433689c2a5ab6aaaf14173c2a9e31 \ + --hash=sha256:c622843757ce6afd950b6f3c45b79f0078fb8d9a66f6783b5963594d1f9073bf \ + --hash=sha256:ebd6f2e28940eb983f254f7fe92b474651ac149e1bedfdaa4272dff22551cf4a \ + --hash=sha256:f8ad39453d65c85111ba887377899d568ded6ecfb5384f3182483a23426b8f58 + # via qiskit +scipy==1.18.1 \ + --hash=sha256:011413b7426b75012840e35649e00fe0a2c3bae89fed433876e3a99251572efc \ + --hash=sha256:0ac49ea97594532dd44b7136094d35f5440fa06e6d9c6384a74c01764df388c5 \ + --hash=sha256:0e82073ecc7acc6436fac4b31674109c7e1d3e596789767eda01258a8c9e8123 \ + --hash=sha256:0fcb3c93519f27bb4f0c4b0f7802cdcaca7fcf93267b75edda2e9f4e8a55cbd7 \ + --hash=sha256:10ac20c69d880f77f375db44c22e3e6a644f9fefa291d4cd2fb9790a89fc99fd \ + --hash=sha256:11c423f1049c5755ad4409af52a9ada1cff96fe9b50795d4af3619f292901239 \ + --hash=sha256:179ce34a8d0fe273d8883ba59e17e052247d08973dfcb743ca52bb1cce2d60b0 \ + --hash=sha256:1bca3b943fc2567ea49cd02c99abde49da4d5178ec46f624bd8255cda8755beb \ + --hash=sha256:1d73131e358976663dd969e1fb4ed1404b815cd977eaaedc3b3a133ba2d81c35 \ + --hash=sha256:2a0b02f9fc46f8520330c23d45e6560db7e3a0d927232139427637f98943e11d \ + --hash=sha256:2d3ab0e8c69a17dd3559eab8cbb88f258e285c94d572c2719033f90f83290c89 \ + --hash=sha256:30f464bee641fa8e282577c7dce027308403213c6ca8270bba73285c91024bc5 \ + --hash=sha256:33a834464fdabc0f26a45508df31b3cc5d028e04dbf6c5ed398541418e0a12fe \ + --hash=sha256:3ab3523da44749156e1f68b464dc56af11ae4cbc5c739a49d05f32b982eca9f3 \ + --hash=sha256:3c085faa2cfa879c5141df483f836f4d691045a078224a670fa570fa01612d89 \ + --hash=sha256:457fd7a2a8edeb044ab6ffbc0aa03ff6cd18491356e5e0c834d76ce621b916d1 \ + --hash=sha256:49023963c193dacee096301452f223ee24d86ec5807f8df93c0f7221d119e305 \ + --hash=sha256:52c4b7422442aba924d03ad4019852b08a92e64ea187b933135687bfe2747307 \ + --hash=sha256:559ed65f60c1af5a03f3912605a1b5114f522c7c32fb23c3376ae8f03219fe28 \ + --hash=sha256:5632e3ae3d09197c446310cd5187de63e28448ce22f0f67b2b93d97503c0c230 \ + --hash=sha256:5e4d44984abc0020154ea81b247adeddcc3ac5527b975ff798bd1ba0adc513c2 \ + --hash=sha256:75b00eb8fb802090aa903f4ea1c7f5a584779f967361e68b7e98e531cc2d7174 \ + --hash=sha256:78a0d7c918e74a232394117160e7e3db503377572a45bcef8826e4ab8a35feba \ + --hash=sha256:78c0665edead396b1abb4897c41a5c1d9bf090c8a637a4c20a61678e0a264e66 \ + --hash=sha256:7bbf207c4453ce1ad2e00b17313852b33310b83090c2311bdaf97f93c0380d12 \ + --hash=sha256:7f4b8bc363b6d65ee2152bec57568e3c52639bb34c46057b09857a307ed5e21d \ + --hash=sha256:82f201b4c878551d48558337aab270d3c6cca5507b8737c8d8a608d234cccde0 \ + --hash=sha256:83de5453a7799afc9048b4616bd085cef126e36412f0ea2f6370c36a2a3a51e7 \ + --hash=sha256:88f0e784020649f88ea48c9f5ddfa403bf9205820667c0914740b392035afb82 \ + --hash=sha256:8bcf3c1ba5d6456e2effd30fcbd3459b044d683fcdac79a2e6830f0bdf7de487 \ + --hash=sha256:911de823097db8b63f034299d12662db93344e6ffa0b881cbb57748974b70168 \ + --hash=sha256:92c14f5bdbfb6216315ce33e78080474082de8b3830122ba97809bfbe65f75c0 \ + --hash=sha256:95298364e251be3e60249facbeeca03631d3bb7584f85879516ec55ac717b81f \ + --hash=sha256:9554bcc6d715ee87a633a3cc8e7703c6628b100dd29cb8a2efc4c0533c7ff729 \ + --hash=sha256:9f2897bf7737392ad0d5213ea7b6add72a4edf5679b3153106aeb88b6507b3b9 \ + --hash=sha256:a1d33a7836f7ddc1993427966a0823468ec41bcbdb1a9f9942d1d7e57f803ba3 \ + --hash=sha256:ac0333bdf38309aa3dcbe7e3fa7ea29e7a2c37c6ea306a757b700ded8e4596ad \ + --hash=sha256:bff0b729edd992766136b34e39cc76bc2fad905aa58897ee72a9cd000a6d8443 \ + --hash=sha256:c24acac1e18912761c4700239bbc1fd32f615af690f1584d49b35859be51324d \ + --hash=sha256:c35d74ce0e193ff740c2f2be2ac913ddc232fe6c1ff40b26cfecb9c670c63314 \ + --hash=sha256:c825cef2f49e46753726a7181a8e199804a912b29519ada542c6ebc654951899 \ + --hash=sha256:c9d18a33309122074ea483dd92dd444189166b8b2ec429fe9ed5ac73c7a0aa23 \ + --hash=sha256:cbf38d043c1aa4ab306e1ada6ab6eddacc3322a20b7af1b30bc93254b366fe09 \ + --hash=sha256:cd479fc04dd9401e3b4f49e76518768ef99c4f517a98c284eb091fd725719adf \ + --hash=sha256:ceb30a00ce7c92d459819443d29ca486d882b83fb6738bdcbb2a1cce94ac5daa \ + --hash=sha256:cfbf154f2ba187f2ed6cce2639efff7d105f1140573642c0161615b6d91d6a87 \ + --hash=sha256:d2924a03db38dc2e848bca2fe9f077dafb891480b91a00a0963a8cf86dfc31c1 \ + --hash=sha256:d416b16cccfd70fbf62400e84d0bb2f4e6af519a45557f1692c749b37f14b315 \ + --hash=sha256:d65d448389b8436493abcf629cc94ad0cf32aecaf06e1acca1de53cc795f2f12 \ + --hash=sha256:d84a09d0dad90ba6525d8ac1c2334b33e64bf3ccfe9e841f02feb867a22681e4 \ + --hash=sha256:ddef79fb382df40104a19bb7151b3b23e57c1778fcf857c71ceecd9bd264513f \ + --hash=sha256:e3b417bf8c2c7c16e8f58ad91db17783ec911ac16e7b50eb6eab6e809b4f5b07 \ + --hash=sha256:e402cf31eb68f453dbb2d36fc6d722b33f24a55d68b2ae1d92fa6305ca71c298 \ + --hash=sha256:e6fb6a55cc0ba97b59a1f288fb86dc6fce8bdfc0fffcbfd015e3a954bf2a2d93 \ + --hash=sha256:e708533e8b2ae2497d65346538a7dcc92814410b25b81432eac66de0f2af8265 \ + --hash=sha256:ea324d9dd34c38bfb9bec8ca4d1b407db97dbb74029f566b8e322b1b6fe56fe6 \ + --hash=sha256:eb0dfcf4e28a99c12c999744a2ff67c9b06200e20401c7c88186e33552a46331 \ + --hash=sha256:eda632a7981f69730d6281f451db9c1c370993a2c0d7ddb43e2a809a2862b83a \ + --hash=sha256:f29633129f9fa7e88a3f0fca835de2d030bfc9643f7799e1a0c46cee24d38fc7 \ + --hash=sha256:f55fa87b6c612ecd6b058f167c53231b1d14e412efe361d3d6e38b3631c73218 \ + --hash=sha256:fdaf5ea890a6183d0565f51a61799d67081bd5b1cf03c5f4b3fd3732108625c9 + # via + # cirq-core + # qiskit + # qiskit-aer + # quimb +setuptools==84.2.1 \ + --hash=sha256:3ff8b3b5492a0aa66960f4419365a86b84e013070d4313e4d4a6894f5d64d6bc \ + --hash=sha256:ca140b45d5325a9478f880e351484f62fef15f336462e449ca0c03c873d589c2 + # via qsimcirq +stevedore==5.9.1 \ + --hash=sha256:5c8ff3a9f336cc1a06ac0f597bc79d11a2f950bfd32e290ca56b5a301fafafbf \ + --hash=sha256:e97a2667923efda926e8713fde6a73616df68210a3cbc6f02b48967b676fd8bf + # via qiskit +stim==1.16.0 \ + --hash=sha256:1822adb4920f4616b253792fe1893ad07a9bea8cbc45b2f4cdf7c75a8083cd00 \ + --hash=sha256:1890bda08adfd6daa875d1d5e41039c5ae8c58faabc7cd1813f8d8de9f1536a2 \ + --hash=sha256:1e78fe10ab4c28af9ceb57ac8ed895f3efcde9607d851ef931c53d1f6f80bc8e \ + --hash=sha256:1fa60a13ef921d6e6aea420e2fe7551d71a4a07b513d86da89e39259dd3739f9 \ + --hash=sha256:3e2883216fb4f57411531c99dfa1838c0d8201c619ccd01b197b9afd54d326cf \ + --hash=sha256:41c02d52af847e0ab886c35751e8f7e17e2e0d055e390ece93a50a12dcf87e56 \ + --hash=sha256:55231457b5897b0ef798059aae01d9e8247fc8b2089e8a27f9f4bb13b0342af2 \ + --hash=sha256:609666b77197d45705e1579a9840123a53cebe614e8bf1d496c0df24f797e653 \ + --hash=sha256:66dbc6532169df84d127ceede353b15445e845a94aa008c5d0a4062b51cc2b02 \ + --hash=sha256:84b777678cc12e808b3d6747d57e07eed951f8ec18047a936dfa25dbc950a2e2 \ + --hash=sha256:85b9c544c65377a42c6b5c9a57616a5ed5580e1cabb286a604800a045c7a12fb \ + --hash=sha256:883b24c3c95fa69818e931e8b60daf4fc8195d159d321e7548d8706dbac16558 \ + --hash=sha256:8d44f858f3d5d1107e674886facbb011ed85438f0888278d6aa3c1f42d9e5a5f \ + --hash=sha256:9092a996429dcf616d8d4ca01fec886b7b310caf9425a39fcfe499005636bd52 \ + --hash=sha256:b367f90826e796417932ea46c0e53d80e3c5bebac0c6633c0aa07a8fcaa4298b \ + --hash=sha256:b8580dfbe5ff27594dd15a83b24262630b82cf089d1463d29dbee90ffbc6898b \ + --hash=sha256:bd2d28093818f981f8dedb2be160b62d818279b81748d72dc4fca6cdd160291d \ + --hash=sha256:d467b5599de7e171651a1ff7fac353dd64d78df75d9c63e7d870d576eb0fd64b \ + --hash=sha256:ed3aa70f82690946ba6f70abb9dad448d49ab9499fa5161de5f286da87c30ab1 \ + --hash=sha256:f22a009bad1e7816aeb70bdeafb6789e4840710da070f69cde91e2ac6cf1e800 \ + --hash=sha256:f94040cbeeff786e7fb8860249e54d9ba3f777b5b098d21f1eccd072d3a3c32a + # via -r requirements.in +sympy==1.14.0 \ + --hash=sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517 \ + --hash=sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5 + # via cirq-core +toolz==1.2.0 \ + --hash=sha256:890f820b1cb8152785aaf9386d8707770110809035800985ca65cb24ce1120ef \ + --hash=sha256:9667a038e9d6ecba37995e26cb2f59ec6420b6ad8dd9677de59db9b956b08490 + # via cytoolz +tqdm==4.70.1 \ + --hash=sha256:c293e525e6fef9c20e8728fd4612df02a0aa31bb5fe91ecd93e123b1b7bffa73 \ + --hash=sha256:cefd0eca11b2a37a3aee776544d4f4ae913f02688135b5556b8788dfa474afc4 + # via + # cirq-core + # quimb +typing-extensions==4.16.0 \ + --hash=sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8 \ + --hash=sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5 + # via + # qiskit + # qsimcirq +tzdata==2026.6 \ + --hash=sha256:0a10eec6e13ef16b627fabed9a5f2ba61a62b1c67f327305f4e7e412a70b4aec \ + --hash=sha256:85d2cd9c09f81f0bb29db27759fc83af4f1e620efb814f8c5bf8b4cc4feece6d + # via + # pandas + # python-dateutil diff --git a/wai/quantum-cross-simulator/provider/seeded_statevector_provider.py b/wai/quantum-cross-simulator/provider/seeded_statevector_provider.py new file mode 100644 index 000000000..1cbf1d8f9 --- /dev/null +++ b/wai/quantum-cross-simulator/provider/seeded_statevector_provider.py @@ -0,0 +1,221 @@ +#!/usr/bin/env python3 +"""A provider of the open provider protocol (wai/extensions/quantum-providers.md) around a +third-party state-vector simulator, run as a local process: one JSON message a line on standard +input, one JSON answer a line on standard output (§2.2). + + wai-quantum providers add sim --kind process -- python3 -I seeded_statevector_provider.py + wai-quantum providers test sim + wai-quantum run bell.qasm --provider sim --shots 1000 --json > job.json + wai-quantum verify job.json + +It is the template to copy for a device of your own. Everything the protocol asks of a provider +is here, and the device is one class, `Device`: replace its `run` with a call to your device and +its `DESCRIPTION` with what your device is, and the rest stays as it is. + +The device here is the pinned simulator the corpus compares against (env/requirements.lock), +seeded, so the same job gives the same counts. A program arrives in the device's own gates with +every angle an exact fraction of a turn; each gate is built from the simulator's own gate of that +meaning, and nothing is transpiled, so the program the client compiled and checked is the one +that runs. Nothing here takes or needs a credential. +""" +import json +import math +import sys + +PROTOCOL = "wai.quantum.provider/1" +BASES = {"rzsxxcz": ["rz", "sx", "x", "cz"], "prxcz": ["prx", "cz"], "gpizz": ["gpi", "gpi2", "zz"]} +MAX_SHOTS = 1_000_000 + + +class Refusal(Exception): + def __init__(self, code, message): + super().__init__(message) + self.code, self.message = code, message + + +class Device: + """The simulator. Replace `run` (and DESCRIPTION) to bring another device.""" + + NAME = "seeded-statevector" + QUBITS = 24 + BASIS = "rzsxxcz" + DESCRIPTION = "a third-party state-vector simulator in double precision (Qiskit Aer, the version pinned in the corpus's lock), sampled with the job's seed" # allow-name: the simulator this template wraps, named as data + + def __init__(self): + import qiskit_aer + + self.version = qiskit_aer.__version__ + + def run(self, program, shots, seed): + """Counts keyed by the program's classical bits, the highest bit first.""" + from qiskit import QuantumCircuit + from qiskit_aer import AerSimulator + + used = sorted({q for g in program["gates"] for q in g["qubits"]} | {m["qubit"] for m in program["measure"]}) + at = {q: i for i, q in enumerate(used)} + qc = QuantumCircuit(len(used), program["bits"]) + for g in program["gates"]: + q = [at[x] for x in g["qubits"]] + t = [2 * math.pi * m / (1 << k) for m, k in g.get("turns", [])] + name = g["gate"] + # Each gate by its definition in the protocol (§4), from the simulator's gate of that meaning. + if name == "rz": + qc.rz(t[0], q[0]) # exp(-iπt·Z) is Rz(2πt) + elif name == "sx": + qc.sx(q[0]) + elif name == "x": + qc.x(q[0]) + elif name == "cz": + qc.cz(q[0], q[1]) + elif name in ("prx", "gpi", "gpi2"): + theta, phi = {"prx": (t[0] if t else 0, t[1] if len(t) > 1 else 0), "gpi": (math.pi, t[0]), "gpi2": (math.pi / 2, t[0])}[name] + qc.rz(-phi, q[0]) + qc.rx(theta, q[0]) + qc.rz(phi, q[0]) + elif name == "zz": + qc.rzz(t[0], q[0], q[1]) # exp(-iπt·Z⊗Z) is Rzz(2πt) + for m in program["measure"]: + qc.measure(at[m["qubit"]], m["bit"]) + sim = AerSimulator(method="statevector", seed_simulator=seed) + counts = sim.run(qc, shots=shots).result().get_counts() + return {k.replace(" ", ""): int(v) for k, v in counts.items()} + + +def check_program(m, device): + """The program and its shots, refused as the protocol says (§4) when they are not one this + device runs.""" + p = m.get("program") + if not isinstance(p, dict) or p.get("format") != "wai.native/1": + raise Refusal("invalid", "a program's format is wai.native/1") + basis = p.get("basis") + if basis not in BASES: + raise Refusal("invalid", "a program's basis is rzsxxcz, prxcz or gpizz") + bits = p.get("bits") + if not isinstance(bits, int) or isinstance(bits, bool) or not 1 <= bits <= 64: + raise Refusal("invalid", "a program's bits count its classical bits, 1 to 64") + shots = m.get("shots") + if not isinstance(shots, int) or isinstance(shots, bool) or not 1 <= shots <= MAX_SHOTS: + raise Refusal("invalid", "%r shots; this device takes 1 to %d" % (shots, MAX_SHOTS)) + arity = {"rz": (1, 1), "sx": (1, 0), "x": (1, 0), "cz": (2, 0), "prx": (1, 2), "gpi": (1, 1), "gpi2": (1, 1), "zz": (2, 1)} + gates = p.get("gates") + if not isinstance(gates, list): + raise Refusal("invalid", "a program's gates are a list") + for i, g in enumerate(gates): + name = g.get("gate") if isinstance(g, dict) else None + if name not in BASES[basis]: + raise Refusal("invalid", "gate %d: %r is not a gate of the basis %s" % (i, name, basis)) + qs, ts = g.get("qubits"), g.get("turns", []) + nq, nt = arity[name] + if not isinstance(qs, list) or len(qs) != nq or not all(isinstance(q, int) and q >= 0 for q in qs) or len(set(qs)) != nq: + raise Refusal("invalid", "gate %d: the wrong qubits for %s" % (i, name)) + if not isinstance(ts, list) or len(ts) != nt: + raise Refusal("invalid", "gate %d: the wrong turns for %s" % (i, name)) + for t in ts: + if not (isinstance(t, list) and len(t) == 2 and all(isinstance(x, int) and x >= 0 for x in t) and t[1] <= 32 and t[0] < (1 << t[1])): + raise Refusal("invalid", "gate %d: %r is not m/2^k of a turn with m < 2^k, k <= 32" % (i, t)) + measure = p.get("measure") + if not isinstance(measure, list): + raise Refusal("invalid", "a program's measurements are a list") + read = {} + for x in measure: + b, q = x.get("bit"), x.get("qubit") + if not isinstance(b, int) or not 0 <= b < bits or not isinstance(q, int) or q < 0: + raise Refusal("invalid", "%r: a measurement reads a qubit into one of the program's bits" % (x,)) + if b in read: + raise Refusal("invalid", "bit %d is measured twice" % b) + read[b] = q + if sorted(read) != list(range(bits)): + raise Refusal("invalid", "bit %d measures no qubit" % min(set(range(bits)) - set(read))) + if len(set(read.values())) != len(read): + raise Refusal("invalid", "a qubit is measured into two bits") + # Well formed; now, can this device run it? + if basis != device.BASIS: + raise Refusal("refused", "this device runs %s, not %s" % (" ".join(BASES[device.BASIS]), " ".join(BASES[basis]))) + if any(q >= device.QUBITS for g in gates for q in g["qubits"]) or any(q >= device.QUBITS for q in read.values()): + raise Refusal("refused", "a qubit this device does not have: it has %d" % device.QUBITS) + return p, shots + + +class Provider: + def __init__(self, device): + self.device = device + self.jobs = {} + self.next = 1 + + def describe(self): + d = self.device + return { + "ok": True, + "protocol": PROTOCOL, + "provider": d.NAME, + "device": "%s-%d" % (d.NAME, d.QUBITS), + "provenance": "simulator", + "simulator": "%s, version %s" % (d.DESCRIPTION, d.version), + "qubits": d.QUBITS, + "native_gates": BASES[d.BASIS], + "connectivity": "all", + "calibration": {"id": "%s-%s" % (d.NAME, d.version)}, + "billing": {"free": True}, + "max_shots": MAX_SHOTS, + "seeded": True, + } + + def handle(self, m): + if not isinstance(m, dict): + raise Refusal("invalid", "a message is a JSON object") + if "protocol" not in m: + raise Refusal("invalid", "a message names its protocol") + if m["protocol"] != PROTOCOL: + raise Refusal("unsupported_version", "this provider speaks %s, not %s" % (PROTOCOL, m["protocol"])) + op = m.get("op") + if op == "describe": + return self.describe() + if op == "estimate": + check_program(m, self.device) + return {"ok": True, "free": True, "seconds": 0} + if op == "submit": + p, shots = check_program(m, self.device) + seed = m.get("seed", 1) + if not isinstance(seed, int) or seed < 0: + raise Refusal("invalid", "a seed is a whole number") + try: + counts = self.device.run(p, shots, seed) + except Exception as e: # noqa: BLE001 - the device's failure, reported as the protocol's + raise Refusal("internal", "the simulator failed: %s" % type(e).__name__) + job = "sv-%d" % self.next + self.next += 1 + self.jobs[job] = {"counts": counts, "shots": shots} + return {"ok": True, "job": job} + if op in ("status", "result", "cancel"): + job = m.get("job") + if not isinstance(job, str): + raise Refusal("invalid", "name the `job`") + if job not in self.jobs: + raise Refusal("not_found", "no job %s" % job) + if op == "result": + j = self.jobs[job] + return {"ok": True, "counts": j["counts"], "shots": j["shots"]} + # A job here finishes when it is submitted, so it is always done. + return {"ok": True, "status": "done"} + if op is None: + raise Refusal("invalid", "a message names its op") + raise Refusal("unsupported", "no operation %r; the operations are describe, estimate, submit, status, result and cancel" % (op,)) + + +def main(): + provider = Provider(Device()) + for line in sys.stdin: + if not line.strip(): + continue + try: + answer = provider.handle(json.loads(line)) + except Refusal as r: + answer = {"ok": False, "error": {"code": r.code, "message": r.message}} + except ValueError: + answer = {"ok": False, "error": {"code": "invalid", "message": "not JSON"}} + sys.stdout.write(json.dumps(answer) + "\n") + sys.stdout.flush() + + +if __name__ == "__main__": + main() diff --git a/wai/quantum-cross-simulator/provider/test.sh b/wai/quantum-cross-simulator/provider/test.sh new file mode 100644 index 000000000..356408c47 --- /dev/null +++ b/wai/quantum-cross-simulator/provider/test.sh @@ -0,0 +1,61 @@ +#!/usr/bin/env bash +# provider/test.sh: the provider template through the command line, as a person uses it. +# +# bash provider/test.sh path/to/wai-quantum path/to/python +# +# It adds the template as a `process` provider, holds it to the protocol's conformance vectors +# (`providers test`), runs a program on it with `run --provider`, and verifies the receipt the +# command line seals. Everything is in a directory of its own, removed at the end: no key, no +# registry and no credential of the person's is touched. +set -euo pipefail +W="$1" +PY="$2" +case "$W" in */*) W="$(cd "$(dirname "$W")" && pwd)/$(basename "$W")" ;; esac +HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +tmp="$(mktemp -d)" +trap 'rm -rf "$tmp"' EXIT +export XDG_CONFIG_HOME="$tmp/config" WAI_QUANTUM_PROVIDERS="$tmp/providers.json" WAI_QUANTUM_CREDENTIALS=file +unset WAI_QUANTUM_KEY +fail() { echo "provider: $*" >&2; exit 1; } + +"$W" providers add sim --kind process -- "$PY" -I "$HERE/seeded_statevector_provider.py" > "$tmp/add.txt" +"$W" providers describe sim > "$tmp/describe.txt" || fail "describe failed: $(cat "$tmp/describe.txt")" +if ! "$W" providers test sim > "$tmp/test.txt" 2>&1; then + cat "$tmp/test.txt" >&2 + fail "the protocol's conformance vectors failed" +fi +grep -qE '^ *[1-9][0-9]* passed, 0 failed' "$tmp/test.txt" || { cat "$tmp/test.txt" >&2; fail "a vector failed, or none ran"; } +echo "provider: conformance vectors passed" +sed 's/^/ /' "$tmp/test.txt" | head -40 + +cat > "$tmp/ghz.qasm" <<'EOF' +OPENQASM 3.0; +include "stdgates.inc"; +qubit[3] q; +bit[3] c; +h q[0]; +cx q[0], q[1]; +cx q[1], q[2]; +t q[2]; +c = measure q; +EOF +"$W" run "$tmp/ghz.qasm" --provider sim --shots 4000 --json > "$tmp/job.json" || fail "run --provider failed: $(head -c 2000 "$tmp/job.json")" +"$W" verify "$tmp/job.json" > "$tmp/verify.txt" || fail "the receipt did not verify: $(cat "$tmp/verify.txt")" +grep -q VALID "$tmp/verify.txt" || fail "verify did not say VALID" +"$PY" -I - "$tmp/job.json" <<'EOF' +import json, sys +j = json.load(open(sys.argv[1])) +r = j["result"] +counts = r["counts"] +assert set(counts) <= {"000", "111"}, counts +assert sum(counts.values()) == 4000, counts +assert r["accuracy"]["class"] == "measured", r["accuracy"] +assert r["provider"]["provenance"].startswith("simulator"), r["provider"] +ideal = r.get("ideal") or {} +tvd = ideal.get("tvd", ideal.get("total_variation")) +print("provider: run --provider sealed %s; counts %s; ideal %s" % (r["method"], counts, json.dumps(ideal)[:200])) +EOF +# The same job twice gives the same counts: the device is seeded. +"$W" run "$tmp/ghz.qasm" --provider sim --shots 4000 --json > "$tmp/job2.json" +"$PY" -I -c 'import json,sys; a,b=(json.load(open(p))["result"]["counts"] for p in sys.argv[1:]); assert a == b, (a, b); print("provider: seeded, the same counts twice")' "$tmp/job.json" "$tmp/job2.json" +echo "provider: PASS" diff --git a/wai/quantum-cross-simulator/reproduce.sh b/wai/quantum-cross-simulator/reproduce.sh new file mode 100644 index 000000000..1f29d3e1a --- /dev/null +++ b/wai/quantum-cross-simulator/reproduce.sh @@ -0,0 +1,156 @@ +#!/usr/bin/env bash +# reproduce.sh: the cross-simulator corpus, regenerated and judged from nothing but this +# repository, a Rust toolchain and the network. +# +# bash wai/quantum-cross-simulator/reproduce.sh [--tier ci|full] [--out FILE] +# [--jobs N] [--inject FAULT] [--self-test] [--perf] [--no-provider] +# +# It needs macOS on arm64 or Linux on x86_64, curl, tar, a C compiler and rustup (or cargo at +# the version rust-toolchain.toml names). No account and no key: every download is pinned by +# version and SHA-256. +# +# 1. uv, the pinned release, unless that version is already on PATH; +# 2. CPython 3.12.16 and the engines of env/requirements.lock, every wheel checked against its +# hash, in a virtual environment of their own; +# 3. the engine under test, built from this checkout with its lockfile (--locked); +# 4. tools/compare.py: every circuit on every engine, each answer held to its reference within +# its stated tolerance; it prints each failure and PASS or FAIL; +# 5. provider/test.sh: the provider template, added, held to the protocol's conformance vectors, +# run and its receipt verified. +# +# --self-test runs the CI tier once for each fault compare.py can inject, and passes only if every +# one of those runs fails on the check the fault breaks. --perf runs tools/perf.py. +# Downloads and builds go to $QCORPUS_CACHE (default ~/.cache/wai-quantum-cross-simulator). +# Exit status: 0 every check passed, 1 a check failed, 2 the run could not be made. +set -euo pipefail + +HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO="$(cd "$HERE/../.." && pwd)" +TIER=ci +OUT="" +JOBS=2 +INJECT="" +SELFTEST=0 +PERF=0 +PROVIDER=1 +while [ $# -gt 0 ]; do + case "$1" in + --tier) TIER="$2"; shift 2 ;; + --out) OUT="$2"; shift 2 ;; + --jobs) JOBS="$2"; shift 2 ;; + --inject) INJECT="$2"; shift 2 ;; + --self-test) SELFTEST=1; shift ;; + --perf) PERF=1; shift ;; + --no-provider) PROVIDER=0; shift ;; + -h|--help) sed -n '2,25p' "$0"; exit 0 ;; + *) echo "reproduce.sh: unknown argument $1" >&2; exit 2 ;; + esac +done + +die() { echo "reproduce.sh: $*" >&2; exit 2; } +CACHE="${QCORPUS_CACHE:-${XDG_CACHE_HOME:-$HOME/.cache}/wai-quantum-cross-simulator}" +mkdir -p "$CACHE" +for t in curl tar; do command -v "$t" >/dev/null || die "needs $t"; done + +# 1. uv, pinned. +UV_VERSION=0.13.6 +# The two platforms every pinned engine publishes wheels for (env/requirements.in says which do not +# elsewhere). On another, the run stops here rather than build a third party's code from source. +case "$(uname -s)-$(uname -m)" in + Darwin-arm64) UV_TARGET=aarch64-apple-darwin; UV_SHA=60fbd5c8a1ed681845eea28d9d622fcde03c51e91a43465b64a1e17db1ed3472 ;; + Linux-x86_64) UV_TARGET=x86_64-unknown-linux-gnu; UV_SHA=f29c3e94ffabd7e6f3ba521dba169a9b7ec12100bf3257087f0f24f6123f3645 ;; + *) die "the pinned engines publish no wheels for $(uname -s) $(uname -m): run it on macOS on arm64 or Linux on x86_64" ;; +esac +UV="" +if command -v uv >/dev/null && [ "$(uv --version | awk '{print $2}')" = "$UV_VERSION" ]; then + UV="$(command -v uv)" +elif [ -x "$CACHE/uv-$UV_VERSION/uv" ]; then + UV="$CACHE/uv-$UV_VERSION/uv" +else + echo "== uv $UV_VERSION ($UV_TARGET)" >&2 + f="$CACHE/uv-$UV_TARGET.tar.gz" + curl --proto '=https' --tlsv1.2 -sSfL -o "$f" "https://github.com/astral-sh/uv/releases/download/$UV_VERSION/uv-$UV_TARGET.tar.gz" + got="$( (command -v sha256sum >/dev/null && sha256sum "$f" || shasum -a 256 "$f") | awk '{print $1}')" + [ "$got" = "$UV_SHA" ] || die "uv's archive has SHA-256 $got, not $UV_SHA" + mkdir -p "$CACHE/uv-$UV_VERSION" + tar -xzf "$f" -C "$CACHE/uv-$UV_VERSION" --strip-components 1 + UV="$CACHE/uv-$UV_VERSION/uv" +fi +export UV_CACHE_DIR="$CACHE/uv-cache" UV_PYTHON_INSTALL_DIR="$CACHE/python" + +# 2. The interpreter and the engines, every wheel against its hash. +PY_VERSION=3.12.16 +LOCK="$HERE/env/requirements.lock" +LOCK_ID="$( (command -v sha256sum >/dev/null && sha256sum "$LOCK" || shasum -a 256 "$LOCK") | cut -c1-16)" +VENV="$CACHE/venv-$PY_VERSION-$LOCK_ID" +if [ ! -x "$VENV/bin/python" ] || [ ! -f "$VENV/.complete" ]; then + echo "== CPython $PY_VERSION and the pinned engines" >&2 + rm -rf "$VENV" + "$UV" venv --quiet --python "$PY_VERSION" --python-preference only-managed "$VENV" + "$UV" pip install --quiet --python "$VENV/bin/python" --require-hashes --only-binary :all: -r "$LOCK" + touch "$VENV/.complete" +fi +PY="$VENV/bin/python" + +# 3. The engine under test, from this checkout. +command -v cargo >/dev/null || die "needs cargo: install rustup (https://rustup.rs); rust-toolchain.toml picks the version" +echo "== the engine under test (cargo build --locked --release)" >&2 +( cd "$REPO/wai/wai-quantum-cli" && cargo build --locked --release --quiet --bin wai-quantum --example cross_simulator ) || die "the build failed" +TARGET="${CARGO_TARGET_DIR:-$REPO/wai/wai-quantum-cli/target}" +export WAI_CROSS_SIMULATOR="$TARGET/release/examples/cross_simulator" WAI_QUANTUM="$TARGET/release/wai-quantum" +[ -x "$WAI_CROSS_SIMULATOR" ] || die "no driver at $WAI_CROSS_SIMULATOR" +# What was built and run, as git tree ids: `git rev-parse :wai/wai-quantum` gives the +# same id for any commit that holds the same engine, whatever else the commit holds. +tree() { (cd "$REPO" && git rev-parse "HEAD:$1" 2>/dev/null) || echo unknown; } +export WAI_BUILD_INFO="wai/wai-quantum $(tree wai/wai-quantum), wai/wai-quantum-qpu $(tree wai/wai-quantum-qpu), wai/wai-quantum-cli $(tree wai/wai-quantum-cli), wai/quantum-cross-simulator/tools $(tree wai/quantum-cross-simulator/tools), wai/quantum-cross-simulator/corpus $(tree wai/quantum-cross-simulator/corpus); $(rustc --version 2>/dev/null || true)" + +if [ $SELFTEST -eq 1 ]; then + # Each fault must fail the run, on the engine it was put into. + status=0 + for fault in amplitude bit_order counts dem stabilizer fixed_point; do + case $fault in + amplitude) eng=aer.statevector; only=qft_n5_x19 ;; + bit_order) eng=wai.statevector; only=bit_order_product ;; + counts) eng=stim.tableau; only=bit_order_named_bits ;; + dem) eng=wai.qec; only=surface_z_d3 ;; + stabilizer) eng=stim.tableau; only=clifford_random_n65 ;; + fixed_point) eng=wai.exact; only=ghz_n3 ;; + esac + log="$CACHE/selftest-$fault.log" + if "$PY" -I "$HERE/tools/compare.py" --tier ci --jobs "$JOBS" --inject "$fault" --only "$only" > "$log" 2>&1; then + echo "self-test: the fault '$fault' passed unnoticed" >&2; status=1 + elif grep -q "^FAIL .*$eng" "$log"; then + echo "self-test: the fault '$fault' was caught: $(grep -m1 "^FAIL .*$eng" "$log" | cut -c1-160)" + else + echo "self-test: the fault '$fault' failed the run, but not on $eng:" >&2; tail -5 "$log" >&2; status=1 + fi + done + [ $status -eq 0 ] && echo "self-test: every injected fault was caught" || echo "self-test: FAIL" >&2 + exit $status +fi + +if [ $PERF -eq 1 ]; then + # QCORPUS_PERF_ARGS passes options to tools/perf.py: --repeat N, --quick, --only PREFIX. + # shellcheck disable=SC2086 + exec "$PY" -I "$HERE/tools/perf.py" ${OUT:+--out "$OUT"} ${QCORPUS_PERF_ARGS:-} +fi + +# 4. The corpus. +[ -n "$OUT" ] || OUT="$CACHE/run-$TIER-$(uname -s)-$(uname -m).json" +echo "== the corpus, tier $TIER" >&2 +set +e +"$PY" -I "$HERE/tools/compare.py" --tier "$TIER" --jobs "$JOBS" --out "$OUT" ${INJECT:+--inject "$INJECT"} 2> "$CACHE/compare-progress.log" +corpus=$? +set -e +[ $corpus -le 1 ] || die "the comparison could not be made (see $CACHE/compare-progress.log)" +echo "results: $OUT" + +# 5. The provider template. +provider=0 +if [ $PROVIDER -eq 1 ]; then + echo "== the provider template" >&2 + bash "$HERE/provider/test.sh" "$WAI_QUANTUM" "$PY" || provider=1 +fi +[ $corpus -eq 0 ] && [ $provider -eq 0 ] && { echo "reproduce: PASS"; exit 0; } +echo "reproduce: FAIL" +exit 1 diff --git a/wai/quantum-cross-simulator/tools/compare.py b/wai/quantum-cross-simulator/tools/compare.py new file mode 100644 index 000000000..46c003202 --- /dev/null +++ b/wai/quantum-cross-simulator/tools/compare.py @@ -0,0 +1,909 @@ +#!/usr/bin/env python3 +"""Run every engine on the corpus, hold each answer to its reference within its tolerance, and +say what passed, what failed and by how much. + + compare.py --tier ci|full [--out RESULTS.json] [--jobs N] [--inject FAULT] [--only ID,...] + +Exit status 0 when every check passes, 1 when one fails, 2 when the run itself could not be +made. `--inject` corrupts one engine's answers after it gives them, the way a wrong engine would, +so that a run can be seen to fail; FAULTS lists what it can do. + +Every tolerance is derived, never fitted, and tolerance.py says from what. A check that cannot be +made (an engine without the gate, a method that does not take the circuit) is recorded as such, +with the engine's own words, and is not a pass. +""" +import argparse +import hashlib +import json +import math +import os +import platform +import shutil +import subprocess +import sys +import tempfile +import time +from concurrent.futures import ThreadPoolExecutor +from fractions import Fraction + +HERE = os.path.dirname(os.path.abspath(__file__)) +sys.path.insert(0, HERE) +import corpus # noqa: E402 +import exact # noqa: E402 +import tolerance as tol # noqa: E402 + +ROOT = os.path.dirname(HERE) +WAI = os.path.dirname(ROOT) + +STATE_ENGINES = ["wai.exact", "wai.statevector", "aer.statevector", "aer.qasm_import", "quimb.dense", "quimb.tensor_network", "ddsim.statevector", "qsim.statevector"] +COUNT_ENGINES = ["wai.auto", "wai.statevector", "aer.statevector", "ddsim.statevector", "qsim.statevector"] +CLIFFORD = {"id", "x", "y", "z", "h", "s", "sdg", "sx", "sxdg", "cx", "cy", "cz", "swap"} +FAMILY_WISE_ALPHA = 1e-6 + +FAULTS = { + "amplitude": "aer.statevector: one amplitude of every state moved by 1e-9", + "bit_order": "wai.statevector: every state read with its qubits in reverse order", + "counts": "stim.tableau: 2% of the shots of the most frequent outcome moved to another", + "dem": "wai.qec: the most likely mechanism's probability raised by one part in 10^6", + "stabilizer": "stim.tableau: the sign of the last stabilizer flipped", + "fixed_point": "wai.exact: the lowest bit of one fixed-point amplitude flipped", +} + + +def is_clifford(e): + for s in e["steps"]: + for x in s.get("then", [s]): + if "g" in x and x["g"] not in CLIFFORD: + return False + return True + + +def all_dyadic(e): + for s in e["steps"]: + for x in s.get("then", [s]): + for a in x.get("a", []): + if not exact.is_dyadic(a): + return False + if x.get("g") == "gphase": + return False + return True + + +def has_dynamic(e): + k = len(e["steps"]) + while k and "measure" in e["steps"][k - 1]: + k -= 1 + return any("g" not in s for s in e["steps"][:k]) or k < len(e["steps"]) and e["expect"] != "distribution" + + +class Runner: + def __init__(self, work, python, timeout, inject): + self.work = work + self.python = python + self.timeout = timeout + self.inject = inject + self.counter = 0 + + def run(self, engine, job): + """One engine on one job in a process of its own: its answer, its wall time, its peak + memory (bytes, as the OS counts it).""" + self.counter += 1 + tag = "%s-%s-%d" % (job.get("id", "job"), engine, self.counter) + jp = os.path.join(self.work, tag + ".job.json") + ap = os.path.join(self.work, tag + ".answer.json") + if job["kind"] == "state" and "state_out" not in job: + job = dict(job, state_out=os.path.join(self.work, tag + ".state")) + with open(jp, "w") as f: + json.dump(job, f) + t0 = time.perf_counter() + p = subprocess.Popen([self.python, "-I", os.path.join(HERE, "engines.py"), engine, jp, ap], stdout=subprocess.PIPE, stderr=subprocess.PIPE) + try: + _, err = p.communicate(timeout=self.timeout) + rusage = None + except subprocess.TimeoutExpired: + p.kill() + p.communicate() + return {"ok": False, "timeout": self.timeout} + wall = time.perf_counter() - t0 + try: + ans = json.load(open(ap)) + except Exception: # noqa: BLE001 + return {"ok": False, "error": "no answer; exit %d: %s" % (p.returncode, err.decode(errors="replace")[-1500:])} + ans["wall_seconds"] = wall + ans["job"] = job + _ = rusage + return self.corrupt(engine, ans) + + def corrupt(self, engine, ans): + """The injected fault, applied as the engine's own answer.""" + f = self.inject + if not f or not ans.get("ok"): + return ans + import numpy as np + + job = ans["job"] + if f == "amplitude" and engine == "aer.statevector" and job["kind"] == "state": + v = np.fromfile(job["state_out"], dtype=np.complex128) + v[len(v) // 2] += 1e-9 + v.tofile(job["state_out"]) + elif f == "bit_order" and engine == "wai.statevector" and job["kind"] == "state" and job["n"] > 1: + import engines + + v = np.fromfile(job["state_out"], dtype=np.complex128) + engines.reverse_qubits(v, job["n"]).tofile(job["state_out"]) + elif f == "counts" and engine == "stim.tableau" and job["kind"] == "counts": + c = ans["counts"] + top = max(c, key=c.get) + other = sorted(k for k in c if k != top) + moved = c[top] // 50 + c[top] -= moved + dest = other[0] if other else ("1" if top[-1] == "0" else "0").rjust(len(top), "0") + c[dest] = c.get(dest, 0) + moved + elif f == "dem" and engine == "wai.qec" and job["kind"] == "qec_model" and ans["mechanisms"]: + m = max(ans["mechanisms"], key=lambda x: x[0]) + m[0] *= 1 + 1e-6 + elif f == "stabilizer" and engine == "stim.tableau" and job["kind"] == "stabilizers": + last = ans["stabilizers"][-1] + ans["stabilizers"][-1] = ("-" if last[0] == "+" else "+") + last[1:] + elif f == "fixed_point" and engine == "wai.exact" and job["kind"] == "state": + fx = ans["settings"]["fixed"] + a = np.load(fx) + a[0, 0] ^= 1 + np.save(fx, a) + return ans + + +class Report: + def __init__(self): + self.checks = [] + + def add(self, entry, engine, quantity, measured, tolerance, ok, note=None, status=None): + c = {"entry": entry, "engine": engine, "quantity": quantity, "measured": measured, "tolerance": tolerance, "status": status or ("pass" if ok else "fail")} + if note: + c["note"] = note + self.checks.append(c) + return c + + def not_run(self, entry, engine, quantity, why): + self.add(entry, engine, quantity, None, None, True, note=why, status="not run") + + +# ------------------------------------------------------------------ states + + +def load_state(path): + import numpy as np + + return np.fromfile(path, dtype=np.complex128) + + +def exact_distance(ref, vec): + """(strict, modulo a global phase, the phase) between the integer reference and a state.""" + re = exact.ints_from_floats([float(x) for x in vec.real]) + im = exact.ints_from_floats([float(x) for x in vec.imag]) + d, dm, phase, _, _ = exact.distance(ref.re, ref.im, re, im) + return d, dm, phase + + +def float_distance(a, b): + """(strict, modulo a global phase) between two double states, the sums taken exactly enough: + math.fsum over the squares.""" + import numpy as np + + def norm(v): + return math.sqrt(math.fsum((v.real**2).tolist()) + math.fsum((v.imag**2).tolist())) + + d = norm(a - b) + # Turn b by the phase that best aligns it with a, then measure the difference itself: + # sqrt(|a|^2 + |b|^2 - 2||) would lose half its digits to cancellation. + ip = np.vdot(b, a) + turn = ip / abs(ip) if abs(ip) > 0 else 1.0 + dm = norm(a - turn * b) + return d, dm + + +def state_tolerance(engine, ans, e): + gates = tol.gate_count(e["steps"]) + n = e["n"] + if engine == "wai.exact": + return tol.fixed_point_bound(n, ans["ops"]), "the extension's published bound (quantum-sim.md section 5), summed over the op-log the engine ran" + if engine in ("wai.statevector",): + return tol.double_state(gates, n, width=3), "double precision, fusion width 3" + if engine in ("aer.statevector", "aer.qasm_import"): + g = max(gates, ans.get("settings", {}).get("gates", gates)) + width = 5 if n >= 14 else 2 + return tol.double_state(g, n, width=width), "double precision, fusion up to %d qubits from 14 qubits" % 5 + if engine == "quimb.dense": + return tol.double_state(max(gates, ans.get("gates", gates)), n, width=3), "double precision, gate by gate" + if engine == "quimb.tensor_network": + w = ans.get("settings", {}).get("contraction_width") or n + return tol.contraction(ans.get("gates", gates) + n, min(float(w), 40.0)), "double precision, a contraction of width %.1f" % float(w) + if engine == "ddsim.statevector": + return tol.decision_diagram(gates, n), "decision-diagram edge weights merged within 2^-42" + if engine == "qsim.statevector": + return tol.single_state(gates, n, width=2), "single precision, fusion width 2" + raise KeyError(engine) + + +def check_state_entry(e, runner, rep, engines): + import numpy as np + + n = e["n"] + ref = exact.run_unitary(n, e["steps"]) + # A closed form, where there is one, holds the reference itself. + if "qft_x" in e: + worst = max(abs(exact.qft_amplitude(n, e["qft_x"], y)[0] - ref.re[y]) + abs(exact.qft_amplitude(n, e["qft_x"], y)[1] - ref.im[y]) for y in range(1 << n)) + rep.add(e["id"], "exact", "integer reference against the closed form, units of 2^-256", worst, 2 ** 40, worst <= 2 ** 40) + if e["family"] == "ghz": + r = exact.rsqrt2() + worst = max(abs(ref.re[i] - (r if i in (0, (1 << n) - 1) else 0)) + abs(ref.im[i]) for i in range(1 << n)) + rep.add(e["id"], "exact", "integer reference against the closed form, units of 2^-256", worst, 2 ** 40, worst <= 2 ** 40) + if "grover" in e: + m, k = e["grover"] + p = float(Fraction(ref.re[m] ** 2 + ref.im[m] ** 2, 1 << (2 * exact.PREC))) + theta = math.asin(2 ** (-n / 2)) + cf = math.sin((2 * k + 1) * theta) ** 2 + rep.add(e["id"], "exact", "P(marked) against sin^2((2k+1)θ), in double", abs(p - cf), 1e-14, abs(p - cf) <= 1e-14) + dyadic = all_dyadic(e) + exact_ops = None + exact_phase = 0.0 + jobs = {} + for eng in engines: + if eng == "aer.qasm_import" and n > 14: + continue + if eng == "quimb.tensor_network" and n > 12: + continue + jobs[eng] = {"id": e["id"], "kind": "state", "n": n, "steps": e["steps"], "qasm": e["qasm"]} + answers = run_all(runner, jobs) + for eng, ans in answers.items(): + if not ans.get("ok"): + refused = ans.get("refused") or ans.get("unsupported") or ans.get("error") or ("did not finish within %s s" % ans.get("timeout")) + if eng == "wai.exact" and not dyadic and ans.get("refused"): + rep.add(e["id"], eng, "refuses an angle that is not dyadic", refused, None, "Q" in refused, status="pass") + elif ans.get("error"): + rep.add(e["id"], eng, "state", None, None, False, note=refused) + else: + rep.not_run(e["id"], eng, "state", refused) + continue + vec = load_state(ans["job"]["state_out"]) + if len(vec) != 1 << n: + rep.add(e["id"], eng, "state length", len(vec), 1 << n, False) + continue + if eng == "wai.exact": + fixed = np.load(ans["settings"]["fixed"]) + re = exact.ints_from_fixed([int(x) for x in fixed[:, 0]]) + im = exact.ints_from_fixed([int(x) for x in fixed[:, 1]]) + d, dm, phase, _, _ = exact.distance(ref.re, ref.im, re, im) + bound, why = state_tolerance(eng, ans, e) + c = rep.add(e["id"], eng, "distance from the exact state, modulo a global phase", dm, bound, dm <= bound, note=why) + c["strict"] = d + c["global_phase"] = phase + exact_ops, exact_phase = ans["ops"], phase + if not dyadic: + c["note"] = (c.get("note") or "") + "; read every angle as dyadic within the reader's tolerance" + # Bit for bit: an independent integer implementation of section 3.0 reruns the op-log. + if n <= 14: + h = referee_hash(n, ans["ops"], fixed, ans["state_hash"]) + rep.add(e["id"], eng, "state hash, recomputed by the referee from the op-log and from the integers written", h["match"], True, h["match"], note=h.get("note")) + continue + bound, why = state_tolerance(eng, ans, e) + d, dm, phase = exact_distance(ref, vec) + c = rep.add(e["id"], eng, "distance from the exact state, modulo a global phase", dm, bound, dm <= bound, note=why) + c["strict"] = d + c["global_phase"] = phase + c["seconds"] = ans.get("seconds") + if ans.get("notes"): + c["adapter"] = ans["notes"] + if is_clifford(e) and e["expect"] == "exact_state": + check_stabilizer_entry(e, runner, rep) + # Through the engine's whole path, as a user asks: chosen amplitudes, method auto. + picks = sorted({0, (1 << n) - 1, 1 % (1 << n)} | {max(range(1 << n), key=lambda i: ref.re[i] ** 2 + ref.im[i] ** 2)}) + bits = [format(i, "0%db" % n) for i in picks] + ans = runner.run("wai.auto", {"id": e["id"], "kind": "amplitudes", "n": n, "steps": e["steps"], "bitstrings": bits}) + if ans.get("ok"): + planned = ans.get("planned") + # The bit-exact method keeps no global phase (it lowers rz to a phase gate, and so on): + # its amplitudes are held up to one phase, the one that aligns the largest of them. + turn = 1 + if planned == "exact": + top = max(picks, key=lambda i: ref.re[i] ** 2 + ref.im[i] ** 2) + got = complex(*ans["amplitudes"][format(top, "0%db" % n)]) + want = complex(ref.re[top] / 2.0**exact.PREC, ref.im[top] / 2.0**exact.PREC) + if abs(got) > 0: + turn = (want / got) / abs(want / got) + worst = 0.0 + for b in bits: + a = complex(*ans["amplitudes"][b]) * turn + worst = max(worst, exact.amplitude_error((ref.re[int(b, 2)], ref.im[int(b, 2)]), a.real, a.imag)) + if planned == "exact" and exact_ops is None: + # The bound is the op-log's; the bit-exact method gives it. + a2 = runner.run("wai.exact", {"id": e["id"], "kind": "state", "n": n, "steps": e["steps"]}) + exact_ops = a2.get("ops") if a2.get("ok") else None + if planned == "exact" and exact_ops is not None: + bound = tol.fixed_point_bound(n, exact_ops) + 4 * tol.U_DOUBLE + else: + bound = tol.double_state(tol.gate_count(e["steps"]), n, width=3) + rep.add(e["id"], "wai.auto", "chosen amplitudes through the job path, worst error" + (", modulo a global phase" if planned == "exact" else ""), worst, bound, worst <= bound, note="planned %s" % planned) + else: + rep.not_run(e["id"], "wai.auto", "chosen amplitudes through the job path", ans.get("refused") or ans.get("error")) + + +def referee_hash(n, ops, fixed, engine_hash): + """The referee's integer simulator run on the engine's op-log must give the integers the + engine wrote, and the referee's BLAKE3 of them the hash the engine reported.""" + import importlib.util + + spec = importlib.util.spec_from_file_location("referee", os.path.join(WAI, "quantum-conformance", "tools", "referee.py")) + ref = importlib.util.module_from_spec(spec) + spec.loader.exec_module(ref) + table = ref.derive_v2()[0] + oplist = [ref.gate(op, t, tuple(c), p) for op, c, t, p in ops] + amps = ref.simulate(n, oplist, table) + mine = [(int(a), int(b)) for a, b in fixed] + same = [tuple(x) for x in amps] == mine + digest = ref.statevector_hash(n, amps) + digest = digest.hex() if isinstance(digest, (bytes, bytearray)) else digest + if not same: + return {"match": False, "note": "the referee's state differs from the engine's"} + if digest != engine_hash: + return {"match": False, "note": "the referee's hash %s, the engine's %s" % (digest, engine_hash)} + return {"match": True} + + +# ------------------------------------------------------------------ stabilizers + + +def check_stabilizer_entry(e, runner, rep): + n = e["n"] + tb = exact.Tableau(n) + for s in e["steps"]: + if "g" in s: + tb.gate(s["g"], s["q"]) + rows, rank, x_rank = exact.reduced_group(tb.stabilizers(), n) + texts = [exact.pauli_text(r, n) for r in rows] + digest = hashlib.sha256("\n".join(texts).encode()).hexdigest() + rep.add(e["id"], "exact", "the integer tableau's group has full rank", rank, n, rank == n) + jobs = {"stim.tableau": {"id": e["id"], "kind": "stabilizers", "n": n, "steps": e["steps"]}, "wai.stabilizer": {"id": e["id"], "kind": "stabilizers", "n": n, "steps": e["steps"], "paulis": [t[1:] for t in texts]}} + if n <= 1000: + jobs["aer.stabilizer"] = {"id": e["id"], "kind": "stabilizers", "n": n, "steps": e["steps"]} + answers = run_all(runner, jobs) + for eng, ans in answers.items(): + if not ans.get("ok"): + if ans.get("error"): + rep.add(e["id"], eng, "stabilizer group", None, None, False, note=ans["error"]) + else: + rep.not_run(e["id"], eng, "stabilizer group", ans.get("unsupported") or ans.get("refused") or "did not finish within %s s" % ans.get("timeout")) + continue + if eng == "wai.stabilizer": + want = [-1 if t[0] == "-" else 1 for t in texts] + wrong = sum(1 for a, b in zip(ans["values"], want) if a != b) + c = rep.add(e["id"], eng, "generators of the reference group whose expectation is not their sign", wrong, 0, wrong == 0 and len(ans["values"]) == n) + c["seconds"] = ans.get("seconds") + rep.add(e["id"], eng, "outcome dimension against the rank of the group's X part", ans["outcome_dimension"], x_rank, ans["outcome_dimension"] == x_rank) + continue + theirs = [exact.row_from_text(s) for s in ans["stabilizers"]] + r2, rank2, _ = exact.reduced_group(theirs, n) + d2 = hashlib.sha256("\n".join(exact.pauli_text(r, n) for r in r2).encode()).hexdigest() + c = rep.add(e["id"], eng, "reduced stabilizer group equals the reference's", d2 == digest, True, d2 == digest and rank2 == n) + c["seconds"] = ans.get("seconds") + + +def check_stabilizer_counts(e, runner, rep, budget): + n = e["n"] + tb = exact.Tableau(n) + gates = [s for s in e["steps"] if "g" in s] + for s in gates: + tb.gate(s["g"], s["q"]) + rows, _, x_rank = exact.reduced_group(tb.stabilizers(), n) + z_rows = [r for r in rows if r[0] == 0] + jobs = {eng: {"id": e["id"], "kind": "counts", "n": n, "bits": e["bits"], "steps": e["steps"], "shots": e["shots"], "seed": 7} for eng in ("wai.stabilizer", "stim.tableau", "aer.stabilizer")} + for eng, ans in run_all(runner, jobs).items(): + if not ans.get("ok"): + rep.not_run(e["id"], eng, "outcomes inside the stabilizer's affine space", ans.get("unsupported") or ans.get("refused") or ans.get("error")) + continue + outside = 0 + for k, v in ans["counts"].items(): + x = int(k, 2) + for zr in z_rows: + if ((zr[1] & x).bit_count() + zr[2]) % 2: + outside += v + break + rep.add(e["id"], eng, "shots outside the affine space the stabilizers fix (dimension %d)" % x_rank, outside, 0, outside == 0) + distinct = len(ans["counts"]) + rep.add(e["id"], eng, "distinct outcomes, of %d shots over 2^%d" % (e["shots"], x_rank), distinct, None, True, status="info") + + +# ------------------------------------------------------------------ sampled distributions + + +def check_counts_entry(e, runner, rep, plan): + dist = exact.distribution(e["n"], e["bits"], e["steps"]) + engines = list(COUNT_ENGINES) + if is_clifford(e): + engines += ["wai.stabilizer", "stim.tableau"] + jobs = {eng: {"id": e["id"], "kind": "counts", "n": e["n"], "bits": e["bits"], "steps": e["steps"], "shots": e["shots"], "seed": 11} for eng in engines} + for eng, ans in run_all(runner, jobs).items(): + if not ans.get("ok"): + why = ans.get("unsupported") or ans.get("refused") or ans.get("error") or "did not finish within %s s" % ans.get("timeout") + if ans.get("error"): + rep.add(e["id"], eng, "counts", None, None, False, note=why) + else: + rep.not_run(e["id"], eng, "counts", why) + continue + plan.append((e, eng, ans, dist)) + + +def judge_counts(plan, rep): + """Every outcome's count against its exact probability, each by Bernstein's inequality at a + share of the run's family-wise error rate, so that a correct engine fails the whole run with + probability at most FAMILY_WISE_ALPHA.""" + tests = sum(len(set(d) | set(a["counts"])) for _, _, a, d in plan) + alpha = FAMILY_WISE_ALPHA / max(tests, 1) + for e, eng, ans, dist in plan: + shots = sum(ans["counts"].values()) + worst = 0.0 + bad = [] + for k in sorted(set(dist) | set(ans["counts"])): + p = float(dist.get(k, 0)) + x = ans["counts"].get(k, 0) + if p == 0: + if x: + bad.append("%s: %d shots, probability 0" % (k, x)) + continue + t = tol.bernstein(shots, p, alpha) + dev = abs(x - shots * p) + worst = max(worst, dev / t) + if dev > t: + bad.append("%s: %d shots, expected %.1f ± %.1f" % (k, x, shots * p, t)) + c = rep.add(e["id"], eng, "largest deviation of an outcome's count, in units of its Bernstein bound", worst, 1.0, not bad, note="; ".join(bad[:4]) if bad else None) + if ans.get("planned"): + c["planned"] = ans["planned"] + if shots != e["shots"]: + rep.add(e["id"], eng, "shots returned", shots, e["shots"], False) + + +# ------------------------------------------------------------------ wider circuits + + +def check_mirror_entry(e, runner, rep): + import numpy as np + + n = e["n"] + engines = ["wai.exact", "wai.statevector", "aer.statevector", "quimb.dense", "ddsim.statevector", "qsim.statevector"] + jobs = {eng: {"id": e["id"], "kind": "state", "n": n, "steps": e["steps"]} for eng in engines} + for eng, ans in run_all(runner, jobs).items(): + if not ans.get("ok"): + rep.not_run(e["id"], eng, "distance from |0…0>", ans.get("unsupported") or ans.get("refused") or ans.get("error") or "did not finish within %s s" % ans.get("timeout")) + continue + if eng == "wai.exact": + fixed = np.load(ans["settings"]["fixed"]) + v = fixed[:, 0].astype(np.float64) / (1 << 30) + 1j * fixed[:, 1].astype(np.float64) / (1 << 30) + else: + v = load_state(ans["job"]["state_out"]) + target = np.zeros_like(v) + target[0] = 1 + d, dm = float_distance(v, target) + bound, why = state_tolerance(eng, ans, e) + c = rep.add(e["id"], eng, "distance from |0…0>, modulo a global phase", dm, bound, dm <= bound, note=why) + c["strict"] = d + c["seconds"] = ans.get("seconds") + + +def check_pairwise_entry(e, runner, rep): + import numpy as np + + n = e["n"] + engines = ["wai.statevector", "aer.statevector", "quimb.dense", "ddsim.statevector", "qsim.statevector"] + if all_dyadic(e): + engines.insert(0, "wai.exact") + jobs = {eng: {"id": e["id"], "kind": "state", "n": n, "steps": e["steps"]} for eng in engines} + got = {} + for eng, ans in run_all(runner, jobs).items(): + if not ans.get("ok"): + rep.not_run(e["id"], eng, "state, against the other engines", ans.get("unsupported") or ans.get("refused") or ans.get("error") or "did not finish within %s s" % ans.get("timeout")) + continue + if eng == "wai.exact": + fixed = np.load(ans["settings"]["fixed"]) + v = fixed[:, 0].astype(np.float64) / (1 << 30) + 1j * fixed[:, 1].astype(np.float64) / (1 << 30) + else: + v = load_state(ans["job"]["state_out"]) + got[eng] = (v, state_tolerance(eng, ans, e)[0], ans) + names = sorted(got) + for i, a in enumerate(names): + for b in names[i + 1:]: + _, dm = float_distance(got[a][0], got[b][0]) + bound = got[a][1] + got[b][1] + rep.add(e["id"], "%s ~ %s" % (a, b), "distance between the two states, modulo a global phase", dm, bound, dm <= bound) + if "qft_x" in e: + r = corpus.Stream("pick/" + e["id"]) + ys = [r.below(1 << n) for _ in range(64)] + for eng in names: + v = got[eng][0] + worst = max(exact.amplitude_error(exact.qft_amplitude(n, e["qft_x"], y), float(v[y].real), float(v[y].imag)) for y in ys) + rep.add(e["id"], eng, "64 amplitudes against the closed form, worst error, modulo nothing", worst, got[eng][1], worst <= got[eng][1] or eng == "wai.exact") + + +def wide_amplitudes(e): + n = e["n"] + r = corpus.Stream("wide/" + e["id"]) + if e.get("wide_kind") == "ghz": + bits = ["0" * n, "1" * n, "".join(str(r.below(2)) for _ in range(n))] + ref = {bits[0]: (exact.rsqrt2(), 0), bits[1]: (exact.rsqrt2(), 0), bits[2]: (0, 0)} + return bits, ref + if e.get("wide_kind") == "qft": + ys = [r.below(1 << n) for _ in range(6)] + bits = [format(y, "0%db" % n) for y in ys] + return bits, {b: exact.qft_amplitude(n, e["qft_x"], int(b, 2)) for b in bits} + if e["expect"] == "wide_mirror": + b = "0" * n + return [b], {b: (exact.ONE, 0)} + bits = ["".join(str(r.below(2)) for _ in range(n)) for _ in range(8)] + return bits, None + + +def check_wide_entry(e, runner, rep): + n = e["n"] + bits, ref = wide_amplitudes(e) + engines = ["wai.mps", "wai.tensor_network", "aer.mps", "quimb.mps", "quimb.tensor_network"] + if n <= 26: + engines += ["wai.statevector", "aer.statevector"] + jobs = {eng: {"id": e["id"], "kind": "amplitudes", "n": n, "steps": e["steps"], "bitstrings": bits, "memory_gb": 24} for eng in engines} + got = {} + gates = tol.gate_count(e["steps"]) + for eng, ans in run_all(runner, jobs).items(): + if not ans.get("ok"): + rep.not_run(e["id"], eng, "amplitudes", ans.get("unsupported") or ans.get("refused") or ans.get("error") or "did not finish within %s s" % ans.get("timeout")) + continue + if eng in ("wai.mps", "aer.mps", "quimb.mps"): + acc = ans.get("accuracy") or {} + chi = acc.get("max_bond_used") or ans.get("settings", {}).get("max_bond_used") or 256 + if eng == "wai.mps": + discarded = acc.get("discarded_weight", 0.0) * max(acc.get("truncations", 1), 1) + elif eng == "aer.mps": + # Its threshold drops squared singular values below 1e-16, at most chi of them a gate. + discarded = gates * chi * 1e-16 + else: + # Its relative cutoff drops singular values below 1e-12 of the largest. + discarded = gates * chi * 1e-24 + bound = tol.mps(gates, chi, discarded) + why = "matrix product state: SVD rounding, and the weight the engine's truncation can discard" + elif eng in ("wai.tensor_network", "quimb.tensor_network"): + if "contraction_flops" in ans: + w = math.log2(max(ans["contraction_flops"], 2.0)) + else: + w = float(ans.get("settings", {}).get("contraction_width") or n) + bound = tol.contraction(gates + n, min(w, 40.0)) + why = "contraction of width %.1f" % w + else: + bound = tol.double_state(gates, n, width=5) + why = "double precision state vector" + got[eng] = (ans["amplitudes"], bound, ans) + if ref is not None: + worst = max(exact.amplitude_error(ref[b], *ans["amplitudes"][b]) for b in bits) + c = rep.add(e["id"], eng, "amplitudes against the closed form, worst error", worst, bound, worst <= bound, note=why) + c["seconds"] = ans.get("seconds") + if ans.get("accuracy"): + c["accuracy"] = ans["accuracy"] + if ref is None: + names = sorted(got) + for i, a in enumerate(names): + for b in names[i + 1:]: + worst = max(abs(complex(*got[a][0][x]) - complex(*got[b][0][x])) for x in bits) + bound = got[a][1] + got[b][1] + rep.add(e["id"], "%s ~ %s" % (a, b), "chosen amplitudes, worst difference", worst, bound, worst <= bound) + + +def check_expectation_entry(e, runner, rep): + kind, p, k = e["closed"] + p = Fraction(p) + if kind == "depol1": + ref = (-1) ** k * (1 - 4 * p / 3) ** k + else: + ref = (1 - 16 * p / 15) ** k + jobs = {eng: {"id": e["id"], "kind": "expectation", "n": e["n"], "steps": e["steps"], "noise": e["noise"], "observable": e["observable"]} for eng in ("wai.density_matrix", "aer.density_matrix")} + for eng, ans in run_all(runner, jobs).items(): + if not ans.get("ok"): + rep.not_run(e["id"], eng, "expectation under noise", ans.get("unsupported") or ans.get("refused") or ans.get("error")) + continue + d = abs(Fraction(ans["value"]) - ref) + bound = tol.density(k, e["n"]) + rep.add(e["id"], eng, "<%s> against the closed form" % e["observable"], float(d), bound, float(d) <= bound) + + +# ------------------------------------------------------------------ error correction + + +def qec_text(q, runner, rep): + """The committed circuit, which the pinned generator must still write byte for byte.""" + text = open(os.path.join(ROOT, "corpus", "qec", q["id"] + ".circuit")).read() + ans = runner.run("stim.generate", dict(q, kind="generate")) + same = ans.get("ok") and ans.get("text") == text + rep.add(q["id"], "stim.generate", "the pinned generator writes the committed circuit, byte for byte", bool(same), True, bool(same), note=None if same else (ans.get("error") or "the text differs")) + return text + + +def merged(mechs): + out = {} + for p, ds, ls in mechs: + key = (tuple(ds), tuple(ls)) + q = out.get(key, 0.0) + out[key] = q + p - 2 * q * p + return out + + +def check_qec_entry(q, text, runner, rep, qec_plan): + jobs = {eng: {"id": q["id"], "kind": "qec_model", "text": text} for eng in ("wai.qec", "stim.tableau")} + models = run_all(runner, jobs) + a, b = models["wai.qec"], models["stim.tableau"] + if not a.get("ok") or not b.get("ok"): + ra = a.get("refused") or a.get("error") + rb = b.get("error") or b.get("unsupported") + if not a.get("ok") and not b.get("ok"): + rep.add(q["id"], "wai.qec ~ stim.tableau", "both refuse the circuit", ra, rb, True, note="refused by both: %s | %s" % (str(ra)[:200], str(rb)[:200])) + elif not a.get("ok"): + line = "line" in str(ra) + rep.add(q["id"], "wai.qec", "refuses an instruction it does not implement, naming its line", ra, None, line, status="limit" if line else "fail", note="the other engine runs it") + else: + rep.add(q["id"], "stim.tableau", "detector error model", None, None, False, note="refused here, run by the engine under test: %s" % rb) + return + rep.add(q["id"], "wai.qec ~ stim.tableau", "detectors and observables", [a["detectors"], a["observables"]], [b["detectors"], b["observables"]], [a["detectors"], a["observables"]] == [b["detectors"], b["observables"]]) + ma, mb = merged(a["mechanisms"]), merged(b["mechanisms"]) + only_a = sorted(set(ma) - set(mb)) + only_b = sorted(set(mb) - set(ma)) + sites = text_noise_sites(text) + bound = tol.dem(sites) + worst = max([abs(ma[k] - mb[k]) for k in set(ma) & set(mb)] or [0.0]) + ok = not only_a and not only_b and worst <= bound + note = None + if only_a or only_b: + note = "symptom sets only in the engine under test: %d, only in the other: %d (first: %s / %s)" % (len(only_a), len(only_b), only_a[:1], only_b[:1]) + c = rep.add(q["id"], "wai.qec ~ stim.tableau", "mechanisms: same symptom sets, probabilities within the bound (largest difference)", worst, bound, ok, note=note) + c["mechanisms"] = [len(ma), len(mb)] + c["seconds"] = [a.get("seconds"), b.get("seconds")] + shots = 200000 if q["tier"] == "ci" else 1000000 + sj = {eng: {"id": q["id"], "kind": "qec_sample", "text": text, "shots": shots, "seed": 5} for eng in ("wai.qec", "stim.tableau")} + samples = run_all(runner, sj) + qec_plan.append((q, ma, a["detectors"], a["observables"], samples, shots)) + + +def text_noise_sites(text): + """How many noise channels a circuit applies, its blocks unrolled: an upper bound on how many + channels one mechanism can merge.""" + import re + + total = 0 + stack = [1] + for line in text.splitlines(): + s = line.strip() + if s.startswith("REPEAT"): + stack.append(stack[-1] * int(s.split()[1])) + continue + if s == "}": + stack.pop() + continue + m = re.match(r"([A-Z_0-9]+)(\[[^\]]*\])?\(([^)]*)\)\s*(.*)", s) + if m and (m.group(1).endswith("ERROR") or m.group(1).startswith("DEPOLARIZE") or m.group(1) in ("M", "MX", "MR", "MRX", "MY")): + total += stack[-1] * max(len(m.group(4).split()), 1) + return total + + +def judge_qec(qec_plan, rep): + """Each detector's and observable's firing count against the rate the model gives, + by Bernstein's inequality at a share of the family-wise rate.""" + tests = sum(d + o for _, _, d, o, _, _ in qec_plan) * 2 + alpha = FAMILY_WISE_ALPHA / max(tests, 1) + for q, model, nd, no, samples, shots in qec_plan: + # The rate at which a detector fires: an odd number of its mechanisms, each independent. + prod_d = [1.0] * nd + prod_o = [1.0] * no + for (ds, ls), p in model.items(): + for d in ds: + prod_d[d] *= 1 - 2 * p + for o in ls: + prod_o[o] *= 1 - 2 * p + rates = [(1 - x) / 2 for x in prod_d] + [(1 - x) / 2 for x in prod_o] + for eng, ans in samples.items(): + if not ans.get("ok"): + rep.not_run(q["id"], eng, "detection rates", ans.get("refused") or ans.get("error")) + continue + counts = ans["detectors"] + ans["observables"] + worst = 0.0 + bad = [] + for i, (x, r) in enumerate(zip(counts, rates)): + if r == 0: + if x: + bad.append("%d fired %d times at rate 0" % (i, x)) + continue + t = tol.bernstein(shots, r, alpha) + dev = abs(x - shots * r) + worst = max(worst, dev / t) + if dev > t: + bad.append("%s %d: %d, expected %.1f ± %.1f" % ("D" if i < nd else "L", i if i < nd else i - nd, x, shots * r, t)) + c = rep.add(q["id"], eng, "detection and flip rates against the model, largest deviation in units of its Bernstein bound", worst, 1.0, not bad, note="; ".join(bad[:3]) if bad else None) + c["seconds"] = ans.get("seconds") + + +# ------------------------------------------------------------------ the run + + +def run_all(runner, jobs): + with ThreadPoolExecutor(max_workers=runner.jobs) as ex: + futs = {eng: ex.submit(runner.run, eng, job) for eng, job in jobs.items()} + return {eng: f.result() for eng, f in futs.items()} + + +def host(): + info = {"system": platform.system(), "machine": platform.machine(), "release": platform.release()} + try: + if platform.system() == "Darwin": + info["cpu"] = subprocess.run(["sysctl", "-n", "machdep.cpu.brand_string"], capture_output=True, text=True).stdout.strip() + info["memory_bytes"] = int(subprocess.run(["sysctl", "-n", "hw.memsize"], capture_output=True, text=True).stdout) + info["os"] = "macOS " + platform.mac_ver()[0] + else: + for line in open("/proc/cpuinfo"): + if line.startswith("model name"): + info["cpu"] = line.split(":", 1)[1].strip() + break + for line in open("/proc/meminfo"): + if line.startswith("MemTotal"): + info["memory_bytes"] = int(line.split()[1]) * 1024 + try: + for line in open("/etc/os-release"): + if line.startswith("PRETTY_NAME="): + info["os"] = line.split("=", 1)[1].strip().strip('"') + except OSError: + pass + info["logical_cpus"] = os.cpu_count() + info["load_average"] = list(os.getloadavg()) + except Exception: # noqa: BLE001 + pass + return info + + +def apply_known(rep): + """A disagreement of another engine with the exact reference, found and examined before, is + listed in corpus/known-disagreements.json with what was found. A failing check that matches + one is reported as `known` rather than as a failure of this run; one listed that no longer + shows is reported too. Only other engines may be listed: a failure of the engine under test + is always a failure.""" + known = json.load(open(os.path.join(ROOT, "corpus", "known-disagreements.json")))["disagreements"] + seen = set() + for i, k in enumerate(known): + if k["engine"].startswith("wai."): + rep.add(k["entry"], k["engine"], "a known disagreement listed for the engine under test", True, False, False, note="only other engines may be listed") + seen.add(i) + for c in rep.checks: + if c["status"] != "fail": + continue + for i, k in enumerate(known): + if i not in seen and c["entry"] == k["entry"] and c["engine"] == k["engine"] and k["quantity"] in c["quantity"]: + c["status"] = "known" + c["note"] = ((c.get("note") or "") + " | known: " + k["finding"]).strip(" |") + c["right"] = k["right"] + k["_matched"] = True + entries = {c["entry"] for c in rep.checks} + for k in known: + if not k.get("_matched") and k["entry"] in entries and not k["engine"].startswith("wai."): + rep.add(k["entry"], k["engine"], "a listed disagreement no longer shows", False, True, True, status="info", note=k["finding"]) + + +def manifest_check(es, rep): + """The generator still gives the bytes the manifest pins.""" + m = json.load(open(os.path.join(ROOT, "corpus", "manifest.json"))) + pinned = {r["id"]: r.get("sha256") for r in m["circuits"]} + drift = [e["id"] for e in es if pinned.get(e["id"]) != hashlib.sha256(e["qasm"].encode()).hexdigest()] + for q in corpus.qec_entries(): + text = open(os.path.join(ROOT, "corpus", "qec", q["id"] + ".circuit")).read() + if pinned.get(q["id"]) != hashlib.sha256(text.encode()).hexdigest(): + drift.append(q["id"]) + rep.add("corpus", "corpus.py", "circuits whose text differs from the manifest", drift, [], not drift) + for e in es: + p = os.path.join(ROOT, "corpus", "qasm", e["id"] + ".qasm") + if os.path.exists(p) and open(p).read() != e["qasm"]: + rep.add(e["id"], "corpus.py", "the committed program equals the generator's", False, True, False) + + +def main(): + ap = argparse.ArgumentParser() + ap.add_argument("--tier", default="ci", choices=["ci", "full"]) + ap.add_argument("--out") + ap.add_argument("--jobs", type=int, default=2) + ap.add_argument("--timeout", type=float, default=900) + ap.add_argument("--inject", choices=sorted(FAULTS)) + ap.add_argument("--only") + ap.add_argument("--keep", action="store_true") + a = ap.parse_args() + if not os.environ.get("WAI_CROSS_SIMULATOR"): + print("compare.py: WAI_CROSS_SIMULATOR must name the engine's driver (reproduce.sh builds it)", file=sys.stderr) + sys.exit(2) + work = tempfile.mkdtemp(prefix="qcorpus-") + runner = Runner(work, sys.executable, a.timeout, a.inject) + runner.jobs = a.jobs + rep = Report() + started = time.time() + es = corpus.build() + manifest_check(es, rep) + if a.tier == "ci": + es = [e for e in es if e["tier"] == "ci"] + only = set(a.only.split(",")) if a.only else None + if only: + es = [e for e in es if e["id"] in only] + count_plan = [] + for e in es: + print("·", e["id"], file=sys.stderr, flush=True) + x = e["expect"] + if x in ("exact_state", "known_state"): + check_state_entry(e, runner, rep, e.get("engines") or STATE_ENGINES) + elif x == "distribution": + check_counts_entry(e, runner, rep, count_plan) + elif x == "stabilizer": + check_stabilizer_entry(e, runner, rep) + elif x == "stabilizer_counts": + check_stabilizer_counts(e, runner, rep, None) + elif x == "mirror": + check_mirror_entry(e, runner, rep) + elif x == "pairwise": + check_pairwise_entry(e, runner, rep) + elif x in ("amplitudes", "wide_pairwise", "wide_mirror"): + check_wide_entry(e, runner, rep) + elif x == "expectation": + check_expectation_entry(e, runner, rep) + judge_counts(count_plan, rep) + qplan = [] + qs = [q for q in corpus.qec_entries() if a.tier == "full" or q["tier"] == "ci"] + hand = json.load(open(os.path.join(ROOT, "corpus", "qec-hand-written.json"))) + if only: + qs = [q for q in qs if q["id"] in only] + hand = {k: v for k, v in hand.items() if k in only} + for q in qs: + print("·", q["id"], file=sys.stderr, flush=True) + text = qec_text(q, runner, rep) + check_qec_entry(q, text, runner, rep, qplan) + if q["code"] == "surface_code:rotated_memory_z" and os.environ.get("WAI_QUANTUM"): + mine = subprocess.run([os.environ["WAI_QUANTUM"], "lab", "qec", "--circuit", "-d", str(q["distance"]), "--rounds", str(q["rounds"]), "--p", repr(q["p"])], capture_output=True, text=True).stdout + rep.add(q["id"], "wai.qec", "the engine's own generator writes the same text, byte for byte", mine == text, True, mine == text) + if a.tier == "full" or not only: + for k, v in hand.items(): + if a.tier == "ci" and k not in ("qec_inverted_and_tagged", "qec_refused_correlated", "qec_refused_random_detector"): + continue + check_qec_entry({"id": k, "tier": a.tier}, v["text"], runner, rep, qplan) + judge_qec(qplan, rep) + apply_known(rep) + vers = json.loads(subprocess.run([sys.executable, "-I", os.path.join(HERE, "engines.py"), "--versions"], capture_output=True, text=True).stdout) + statuses = {} + for c in rep.checks: + statuses[c["status"]] = statuses.get(c["status"], 0) + 1 + out = { + "about": "One run of the cross-simulator corpus: every check, its measured value and its tolerance. tools/compare.py writes it.", + "tier": a.tier, + "inject": a.inject, + "host": host(), + "versions": vers, + "engine_under_test": {"driver": os.path.basename(os.environ["WAI_CROSS_SIMULATOR"]), "build": os.environ.get("WAI_BUILD_INFO", "")}, + "seconds": round(time.time() - started, 1), + "summary": statuses, + "checks": rep.checks, + } + if a.out: + with open(a.out, "w") as f: + json.dump(out, f, indent=1, sort_keys=False, default=str) + f.write("\n") + fails = [c for c in rep.checks if c["status"] == "fail"] + for c in rep.checks: + if c["status"] in ("fail", "limit", "not run", "known"): + print("%-8s %-34s %-34s %s | measured %s, tolerance %s%s" % (c["status"].upper(), c["entry"][:34], c["engine"][:34], c["quantity"][:90], fmt(c["measured"]), fmt(c["tolerance"]), (" — " + c["note"][:240]) if c.get("note") else "")) + print("summary: %s; %.0f s" % (", ".join("%s %d" % kv for kv in sorted(statuses.items())), time.time() - started)) + print("FAIL" if fails else "PASS") + if not a.keep: + shutil.rmtree(work, ignore_errors=True) + sys.exit(1 if fails else 0) + + +def fmt(x): + if isinstance(x, float): + return "%.3g" % x + return str(x)[:80] + + +if __name__ == "__main__": + main() diff --git a/wai/quantum-cross-simulator/tools/corpus.py b/wai/quantum-cross-simulator/tools/corpus.py new file mode 100644 index 000000000..be00800a5 --- /dev/null +++ b/wai/quantum-cross-simulator/tools/corpus.py @@ -0,0 +1,541 @@ +#!/usr/bin/env python3 +"""The corpus: every circuit, its parameters, why it is here and what it must give. + +Standard library only. Every circuit comes out of this file the same on every machine: random +circuits draw from SHA-256 in counter mode, not from a library's generator, and angles are +written exactly (see `exact.parse_angle`). `corpus/manifest.json` pins each circuit's digest, so +a change to any circuit shows as a change to the manifest. + +A step is a gate {"g": name, "q": [qubits], "a": [angles]}, or {"measure": q, "bit": c}, +{"reset": q}, or {"if": [c, v], "then": [gates]}. Gate names are those of OpenQASM 3's standard +library, and `exact.prims` says what each means. + +An entry's `expect` says what it is held to: + + exact_state the integer state vector (exact.py) of the circuit + known_state a state stated in closed form, which exact.py also reproduces + distribution the exact distribution of its classical bits (exact.py walks every branch) + stabilizer the stabilizer group, from the integer tableau (exact.py) and every engine + amplitudes chosen amplitudes in closed form, for circuits too wide for any state vector + pairwise no exact reference at this width: the engines against each other + expectation an expectation value under noise, in closed form + qec a noisy Clifford circuit's detector error model and detection rates +""" +import hashlib +import json +import os +import sys + +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) +import exact # noqa: E402 + + +class Stream: + """Integers from SHA-256 in counter mode: the same on every machine and every version.""" + + def __init__(self, label): + self.label = label.encode() + self.counter = 0 + self.pool = b"" + + def _more(self): + self.pool += hashlib.sha256(self.label + b"/" + str(self.counter).encode()).digest() + self.counter += 1 + + def below(self, n): + """Uniform in 0..n-1, by rejection.""" + bits = max(n - 1, 1).bit_length() + size = (bits + 7) // 8 + mask = (1 << bits) - 1 + while True: + while len(self.pool) < size: + self._more() + v = int.from_bytes(self.pool[:size], "big") & mask + self.pool = self.pool[size:] + if v < n: + return v + + def choice(self, xs): + return xs[self.below(len(xs))] + + +def g(name, *qubits, a=None): + s = {"g": name, "q": list(qubits)} + if a: + s["a"] = list(a) + return s + + +def t(m, k): + """m/2^k of a full turn.""" + return "t:%d/%d" % (m, k) + + +# ------------------------------------------------------------------ programs as text + + +def qasm_angle(a): + kind, v = exact.parse_angle(a) + if kind == "r": + return a[2:] + f = v * 2 + n, d = f.numerator, f.denominator + if n == 0: + return "0" + sign = "-" if n < 0 else "" + n = abs(n) + if n == 1 and d == 1: + return sign + "pi" + if d == 1: + return "%spi*%d" % (sign, n) + if n == 1: + return "%spi/%d" % (sign, d) + return "%spi*%d/%d" % (sign, n, d) + + +# The standard library's names, and the modifiers for the rest. +_PLAIN = {"id", "x", "y", "z", "h", "s", "sdg", "t", "tdg", "sx", "p", "rz", "rx", "ry", "cx", "cy", "cz", "ch", "cp", "crx", "cry", "crz", "cu", "swap", "cswap", "ccx"} +_DEFS = { + "rzz": "gate rzz(theta) a, b { cx a, b; rz(theta) b; cx a, b; }", + "rxx": "gate rxx(theta) a, b { h a; h b; cx a, b; rz(theta) b; cx a, b; h a; h b; }", + "ryy": "gate ryy(theta) a, b { rx(pi/2) a; rx(pi/2) b; cx a, b; rz(theta) b; cx a, b; rx(-pi/2) a; rx(-pi/2) b; }", +} + + +def _gate_text(s): + name, qs, args = s["g"], s["q"], s.get("a", []) + params = "(" + ", ".join(qasm_angle(x) for x in args) + ")" if args else "" + q = ", ".join("q[%d]" % x for x in qs) + if name in _PLAIN or name in _DEFS: + return "%s%s %s;" % (name, params, q) + if name == "u": + return "U%s %s;" % (params, q) + if name == "sxdg": + return "inv @ sx %s;" % q + if name == "gphase": + if qs: + return "ctrl(%d) @ gphase%s %s;" % (len(qs), params, q) + return "gphase%s;" % params + if name == "negcx": + return "negctrl @ x %s;" % q + form = exact.controlled_form(name) + if form: + base, k = form + return "ctrl(%d) @ %s%s %s;" % (k, base, params, q) + raise ValueError("no text for gate %s" % name) + + +def qasm_of(entry): + """The entry's program as OpenQASM 3: the text the engine reads and the text published.""" + out = ["OPENQASM 3.0;", 'include "stdgates.inc";'] + names = set() + for s in entry["steps"]: + for x in s.get("then", [s]): + if "g" in x: + names.add(x["g"]) + for name in sorted(names): + if name in _DEFS: + out.append(_DEFS[name]) + out.append("qubit[%d] q;" % entry["n"]) + if entry.get("bits"): + out.append("bit[%d] c;" % entry["bits"]) + for s in entry["steps"]: + if "g" in s: + out.append(_gate_text(s)) + elif "measure" in s: + out.append("c[%d] = measure q[%d];" % (s["bit"], s["measure"])) + elif "reset" in s: + out.append("reset q[%d];" % s["reset"]) + elif "if" in s: + body = " ".join(_gate_text(x) for x in s["then"]) + out.append("if (c[%d] == %d) { %s }" % (s["if"][0], s["if"][1], body)) + return "\n".join(out) + "\n" + + +# ------------------------------------------------------------------ circuit builders + + +def qft_steps(n): + """The QFT with qubit 0 the lowest bit of the index: |x> to 2^(-n/2) Σ e^{2πi xy/2^n} |y>.""" + steps = [] + for j in range(n - 1, -1, -1): + steps.append(g("h", j)) + for k in range(j - 1, -1, -1): + steps.append(g("cp", k, j, a=[t(1, j - k + 1)])) + for i in range(n // 2): + steps.append(g("swap", i, n - 1 - i)) + return steps + + +def inverse_steps(steps): + out = [] + dag = {"h": "h", "x": "x", "y": "y", "z": "z", "s": "sdg", "sdg": "s", "t": "tdg", "tdg": "t", "cx": "cx", "cy": "cy", "cz": "cz", "swap": "swap", "sx": "sxdg", "sxdg": "sx", "ccx": "ccx"} + for s in reversed(steps): + name = s["g"] + if name in dag: + out.append({"g": dag[name], "q": s["q"]}) + elif name in ("p", "rz", "rx", "ry", "cp", "crz", "crx", "cry", "rzz", "rxx", "ryy"): + out.append({"g": name, "q": s["q"], "a": [exact._neg(s["a"][0])]}) + else: + raise ValueError("no inverse for %s" % name) + return out + + +def basis_prep(n, x): + return [g("x", q) for q in range(n) if (x >> q) & 1] + + +def grover_steps(n, marked, iterations): + steps = [g("h", q) for q in range(n)] + all_q = list(range(n)) + cz = "c%dz" % (n - 1) if n > 3 else {2: "cz", 3: "ccz"}.get(n, "z") + for _ in range(iterations): + flip = [g("x", q) for q in range(n) if not (marked >> q) & 1] + steps += flip + [{"g": cz, "q": all_q}] + flip + steps += [g("h", q) for q in range(n)] + [g("x", q) for q in range(n)] + steps += [{"g": cz, "q": all_q}] + steps += [g("x", q) for q in range(n)] + [g("h", q) for q in range(n)] + return steps + + +def qpe_steps(bits, phase_turns): + """Phase estimation of the eigenvalue e^{2πi φ} of p(2πφ) on qubit `bits`, prepared in |1>. + Counting qubits 0..bits-1; the outcome y estimates φ = y/2^bits, read as an integer.""" + num, den = phase_turns + steps = [g("x", bits)] + [g("h", q) for q in range(bits)] + for j in range(bits): + # 2^j applications of the unitary, as one controlled phase. + m = (num * (1 << j)) % den + angle = "q:%d/%d" % (m, den) if den & (den - 1) else t(m, den.bit_length() - 1) + steps.append(g("cp", j, bits, a=[angle])) + steps += inverse_steps_qft(bits) + return steps + + +def inverse_steps_qft(n): + return inverse_steps(qft_steps(n)) + + +def random_clifford_t(n, depth, seed, gateset=("h", "s", "t", "sdg", "tdg", "x")): + r = Stream("clifford_t/%d/%d/%d" % (n, depth, seed)) + steps = [] + for _ in range(depth): + for q in range(n): + if r.below(3): + steps.append(g(r.choice(gateset), q)) + order = list(range(n)) + for i in range(n - 1, 0, -1): + j = r.below(i + 1) + order[i], order[j] = order[j], order[i] + for i in range(0, n - 1, 2): + steps.append(g(r.choice(("cx", "cz")), order[i], order[i + 1])) + return steps + + +def random_clifford(n, depth, seed): + return random_clifford_t(n, depth, seed, gateset=("h", "s", "sdg", "x", "y", "z", "sx")) + + +def random_dyadic(n, depth, seed, k): + r = Stream("dyadic/%d/%d/%d/%d" % (n, depth, seed, k)) + steps = [] + for layer in range(depth): + for q in range(n): + steps.append(g(r.choice(("rx", "ry", "rz")), q, a=[t(r.below(1 << k), k)])) + for q in range(layer % 2, n - 1, 2): + steps.append(g("cz", q, q + 1)) + return steps + + +def random_rotations(n, depth, seed): + """U gates whose angles are decimal radians, no dyadic among them, on a brickwork of cx.""" + r = Stream("rotations/%d/%d/%d" % (n, depth, seed)) + + def angle(): + return "r:%d.%017d" % (r.below(3), r.below(10**17)) + + steps = [] + for layer in range(depth): + for q in range(n): + steps.append(g("u", q, a=[angle(), angle(), angle()])) + for q in range(layer % 2, n - 1, 2): + steps.append(g("cx", q, q + 1)) + return steps + + +def ghz_steps(n): + return [g("h", 0)] + [g("cx", q, q + 1) for q in range(n - 1)] + + +def distinct_product(n): + """A product state whose every amplitude differs: any exchange of qubits shows.""" + steps = [] + for q in range(n): + steps.append(g("ry", q, a=[t(1, q + 4)])) + steps.append(g("rz", q, a=[t(3, q + 6)])) + return steps + + +def measure_all(n): + return [{"measure": q, "bit": q} for q in range(n)] + + +# ------------------------------------------------------------------ the entries + + +def entries(): + out = [] + + def add(id_, family, params, reason, n, steps, expect, tier="full", bits=0, engines=None, shots=0, **extra): + e = {"id": id_, "family": family, "params": params, "reason": reason, "n": n, "bits": bits, "steps": steps, "expect": expect, "tier": tier, "shots": shots} + if engines: + e["engines"] = engines + e.update(extra) + out.append(e) + + # Bit order. + add("bit_order_x_low", "bit_order", {"n": 5}, "An X on qubit 0 must read as index 1, the first thing that differs between engines' conventions.", 5, [g("x", 0)], "exact_state", tier="ci") + add("bit_order_x_high", "bit_order", {"n": 5}, "The other end of the same convention: an X on the highest qubit is index 16.", 5, [g("x", 4)], "exact_state") + add("bit_order_product", "bit_order", {"n": 6}, "Every amplitude differs, so any exchange of two qubits changes the state.", 6, distinct_product(6), "exact_state", tier="ci") + add("bit_order_control", "bit_order", {"n": 4}, "A cx from qubit 0 to qubit 3: the control and target must not swap roles.", 4, [g("x", 0), g("cx", 0, 3)], "exact_state") + add("bit_order_named_bits", "bit_order", {"n": 2}, "Classical bits named out of order: qubit 1 into bit 0. The counts must follow the bits, not the qubits.", 2, [g("x", 1), {"measure": 1, "bit": 0}, {"measure": 0, "bit": 1}], "distribution", bits=2, shots=4000, tier="ci") + add("empty_register", "bit_order", {"n": 3}, "A program of no gates: the state is |000>.", 3, [], "exact_state") + add("one_qubit", "bit_order", {"n": 1}, "The smallest register.", 1, [g("h", 0)], "exact_state") + add("top_index_n20", "bit_order", {"n": 20}, "An index at bit 19: index arithmetic past 16 bits, with no entanglement to hide it.", 20, [g("x", 19), g("h", 18)], "pairwise") + + # GHZ. + for n in (2, 3, 5, 8, 12): + add("ghz_n%d" % n, "ghz", {"n": n}, "Known answer: two amplitudes of 1/sqrt(2), every other zero. It exposes any leakage out of those two.", n, ghz_steps(n), "known_state", tier="ci" if n == 3 else "full") + add("ghz_counts_n8", "ghz", {"n": 8}, "Sampling: only the two outcomes may appear, equally often.", 8, ghz_steps(8) + measure_all(8), "distribution", bits=8, shots=100000) + + # QFT. + for n, x in ((3, 5), (5, 19), (8, 173), (12, 2741), (14, 10923)): + add("qft_n%d_x%d" % (n, x), "qft", {"n": n, "x": x}, "Closed form e^{2πi xy/2^n}/2^(n/2), and every controlled phase up to 2π/2^n: the rotations a fixed-point table holds least well.", n, basis_prep(n, x) + qft_steps(n), "known_state", tier="ci" if n == 5 else "full", qft_x=x) + add("qft_superposed_n10", "qft", {"n": 10, "seed": 11}, "A QFT over a random Clifford+T state: its phases act on every amplitude, where from a basis state most cancel.", 10, random_clifford_t(10, 4, 11) + qft_steps(10), "exact_state") + add("qft_counts_n8", "qft", {"n": 8, "x": 173}, "Sampling a uniform distribution of 256 outcomes.", 8, basis_prep(8, 173) + qft_steps(8) + measure_all(8), "distribution", bits=8, shots=200000) + add("qft_wide_n20", "qft", {"n": 20, "x": 699051}, "Past any integer reference here: engines against each other, and chosen amplitudes against the closed form.", 20, basis_prep(20, 699051) + qft_steps(20), "pairwise", qft_x=699051) + + # Grover. + for n, marked, it in ((3, 5, 2), (5, 19, 4), (8, 173, 12), (10, 683, 25)): + add("grover_n%d" % n, "grover", {"n": n, "marked": marked, "iterations": it}, "Closed form: the marked state's probability is sin²((2k+1)θ) with sin θ = 2^(-n/2). Multi-controlled gates, and interference that rounding drains.", n, grover_steps(n, marked, it), "exact_state", tier="ci" if n == 3 else "full", grover=[marked, it]) + add("grover_counts_n5", "grover", {"n": 5, "marked": 19, "iterations": 4}, "Sampling a peaked distribution.", 5, grover_steps(5, 19, 4) + measure_all(5), "distribution", bits=5, shots=100000) + + # Phase estimation. + for bits, m in ((4, 5), (8, 173), (12, 2741)): + add("qpe_t%d_m%d" % (bits, m), "qpe", {"bits": bits, "phase": "%d/2^%d" % (m, bits)}, "A phase of exactly m/2^t: the outcome is m with probability 1, so every other amplitude must cancel to zero.", bits + 1, qpe_steps(bits, (m, 1 << bits)), "exact_state", tier="ci" if bits == 4 else "full", qpe=[m, bits]) + for bits in (6, 10): + add("qpe_t%d_third" % bits, "qpe", {"bits": bits, "phase": "1/3"}, "A phase that is no dyadic: the outcome's law is the closed form sin²(π2^t δ)/(2^(2t) sin²(πδ)), and the bit-exact method must refuse it rather than round it.", bits + 1, qpe_steps(bits, (1, 3)), "exact_state", qpe_third=bits) + + # Random circuits. + for n, depth, seed in ((4, 20, 1), (8, 40, 2), (12, 40, 3)): + add("clifford_t_n%d_d%d" % (n, depth), "random_clifford_t", {"n": n, "depth": depth, "seed": seed}, "Universal, in the gates the bit-exact method holds as table constants.", n, random_clifford_t(n, depth, seed), "exact_state", tier="ci" if n == 4 else "full") + for n, depth, seed, k in ((6, 20, 4, 16), (10, 30, 5, 32)): + add("dyadic_n%d_k%d" % (n, depth), "random_dyadic", {"n": n, "depth": depth, "seed": seed, "k": k}, "Rotations by m/2^k of a turn: each is many table phases in fixed point, so its error is largest here.", n, random_dyadic(n, depth, seed, k), "exact_state") + for n, depth, seed in ((6, 20, 6), (10, 30, 7), (12, 40, 8)): + add("rotations_n%d" % n, "random_rotations", {"n": n, "depth": depth, "seed": seed}, "Arbitrary decimal angles: double-precision engines only, and the bit-exact method must refuse.", n, random_rotations(n, depth, seed), "exact_state", tier="ci" if n == 6 else "full") + add("rotations_counts_n6", "random_rotations", {"n": 6, "depth": 20, "seed": 6}, "Sampling a distribution with no structure.", 6, random_rotations(6, 20, 6) + measure_all(6), "distribution", bits=6, shots=200000) + add("rotations_wide_n20", "random_rotations", {"n": 20, "depth": 10, "seed": 9}, "No integer reference at this width: engines against each other, with fusion and threads in play.", 20, random_rotations(20, 10, 9), "pairwise") + + # Mirror circuits: known answer, any width. + for n, depth, seed in ((10, 40, 21), (16, 30, 22), (20, 20, 23)): + forward = random_dyadic(n, depth, seed, 16) + add("mirror_n%d" % n, "mirror", {"n": n, "depth": depth, "seed": seed}, "U then its inverse: the state is |0…0> exactly, at a width no integer reference reaches, and what remains is the engine's accumulated rounding.", n, forward + inverse_steps(forward), "mirror") + + # Small angles. + for k in (8, 16, 24, 26, 28, 30, 32): + add("small_angle_k%d" % k, "small_angle", {"k": k}, "h, p(2π/2^k), h: P(1) = sin²(π/2^k). Within the phase table, and at its resolution floor as k nears 32.", 1, [g("h", 0), g("p", 0, a=[t(1, k)]), g("h", 0)], "exact_state", tier="ci" if k == 32 else "full") + for k in (33, 40, 47, 48, 52, 60): + add("below_grid_k%d" % k, "small_angle", {"k": k}, "An angle below the table's last entry: the bit-exact method may refuse it, or read it as nothing when it is below the tolerance of its reader. Double-precision engines hold it.", 1, [g("h", 0), g("p", 0, a=[t(1, k)]), g("h", 0)], "exact_state", tier="ci" if k == 47 else "full") + add("tiny_radians", "small_angle", {"radians": "1e-12"}, "A small decimal angle, not on any dyadic grid.", 1, [g("h", 0), g("rz", 0, a=["r:1e-12"]), g("h", 0)], "exact_state") + add("controlled_small_angle_k30", "small_angle", {"k": 30}, "The same phase under a control.", 2, [g("h", 0), g("h", 1), g("cp", 0, 1, a=[t(1, 30)])], "exact_state") + add("repeated_phase_k19", "small_angle", {"k": 19, "count": 262144}, "p(2π/2^19) applied 2^18 times is a half turn. The extension's section 5 states what fixed point leaves of it: modulus 1.0000189, within 1e-5 rad of the half turn.", 1, [g("x", 0)] + [g("p", 0, a=[t(1, 19)])] * 262144, "exact_state", repeated_phase=True, engines=["wai.exact", "wai.statevector", "aer.statevector", "ddsim.statevector", "qsim.statevector"]) + add("h_squared_chain", "small_angle", {"count": 4096}, "2048 pairs of H on a superposition: the identity, where fixed point's rounding of 1/sqrt(2) adds up.", 1, [g("h", 0)] * 4096, "exact_state", engines=["wai.exact", "wai.statevector", "aer.statevector", "ddsim.statevector", "qsim.statevector", "quimb.dense"]) + + # Gate conventions: every gate of the library on a state that shows what it does. + gate_cases = [ + ("id", 1, []), ("x", 1, []), ("y", 1, []), ("z", 1, []), ("h", 1, []), ("s", 1, []), ("sdg", 1, []), ("t", 1, []), ("tdg", 1, []), ("sx", 1, []), ("sxdg", 1, []), + ("p", 1, [t(3, 7)]), ("rz", 1, [t(3, 7)]), ("rx", 1, [t(3, 7)]), ("ry", 1, [t(3, 7)]), ("u", 1, [t(3, 7), t(5, 8), t(7, 9)]), + ("cx", 2, []), ("cy", 2, []), ("cz", 2, []), ("ch", 2, []), ("csx", 2, []), ("swap", 2, []), + ("cp", 2, [t(3, 7)]), ("crx", 2, [t(3, 7)]), ("cry", 2, [t(3, 7)]), ("crz", 2, [t(3, 7)]), ("cu", 2, [t(3, 7), t(5, 8), t(7, 9), t(1, 5)]), + ("rzz", 2, [t(3, 7)]), ("rxx", 2, [t(3, 7)]), ("ryy", 2, [t(3, 7)]), ("negcx", 2, []), + ("ccx", 3, []), ("ccz", 3, []), ("cswap", 3, []), ("c2p", 3, [t(3, 7)]), ("c2rz", 3, [t(3, 7)]), ("c2ry", 3, [t(3, 7)]), ("c3x", 4, []), ("c3z", 4, []), + ] + for name, arity, args in gate_cases: + qs = list(range(arity)) + add("gate_%s" % name, "gate_conventions", {"gate": name}, "What this gate means, from OpenQASM 3's standard library, applied to a state with no symmetry; engines that define it otherwise show here.", arity, distinct_product(arity) + [{"g": name, "q": qs, **({"a": args} if args else {})}], "exact_state", tier="ci" if name in ("sx", "rz", "cu", "c2rz", "negcx") else "full") + for name, args in (("rz", [t(1, 0)]), ("rx", [t(1, 0)]), ("ry", [t(1, 0)]), ("p", [t(1, 0)]), ("rz", [t(2, 0)]), ("u", [t(1, 0), t(0, 0), t(0, 0)])): + add("full_turn_%s_%s" % (name, args[0].replace(":", "").replace("/", "_")), "gate_conventions", {"gate": name, "angle": args[0]}, "A rotation by whole turns: the identity up to a sign, and the sign is the convention. Engines that lower it through a phase gate lose the sign; a global phase changes no outcome, and under a control it would.", 1, distinct_product(1) + [{"g": name, "q": [0], "a": args}], "exact_state") + add("gate_gphase_controlled", "gate_conventions", {"gate": "ctrl @ gphase"}, "A global phase under a control is a relative phase, so no engine may drop it.", 2, distinct_product(2) + [g("gphase", 0, a=[t(3, 7)])], "exact_state", engines=["wai.statevector", "aer.statevector", "aer.qasm_import"]) + add("controlled_rz_full_turn", "gate_conventions", {"gate": "crz", "angle": "1 turn"}, "crz by a full turn is diag(1, 1, -1, -1): the sign rz loses globally is here relative.", 2, [g("h", 0), g("h", 1), g("crz", 0, 1, a=[t(1, 0)])], "exact_state", tier="ci") + + # Measurement in the middle, reset and feedback. + alpha = t(1, 5) + add("teleport", "dynamic", {"angle": alpha}, "Teleportation: Bell measurement, then corrections on classical bits. Qubit 2 must end as qubit 0 began, whatever the outcomes.", 3, [g("ry", 0, a=[alpha]), g("h", 1), g("cx", 1, 2), g("cx", 0, 1), g("h", 0), {"measure": 0, "bit": 0}, {"measure": 1, "bit": 1}, {"if": [1, 1], "then": [g("x", 2)]}, {"if": [0, 1], "then": [g("z", 2)]}, {"measure": 2, "bit": 2}], "distribution", bits=3, shots=200000, tier="ci") + add("reset_after_superposition", "dynamic", {}, "A reset of a qubit in superposition leaves |0> whatever it read, and leaves its Bell partner mixed.", 2, [g("h", 0), g("cx", 0, 1), {"reset": 0}, {"measure": 0, "bit": 0}, {"measure": 1, "bit": 1}], "distribution", bits=2, shots=100000, tier="ci") + add("measure_twice", "dynamic", {}, "A second measurement in the same basis repeats the first: 00 and 11 only.", 1, [g("h", 0), {"measure": 0, "bit": 0}, {"measure": 0, "bit": 1}], "distribution", bits=2, shots=100000) + add("feedback_flip", "dynamic", {}, "Flip a measured 1 back: the second reading is always 0.", 1, [g("h", 0), {"measure": 0, "bit": 0}, {"if": [0, 1], "then": [g("x", 0)]}, {"measure": 0, "bit": 1}], "distribution", bits=2, shots=100000) + add("ghz_by_fusion", "dynamic", {}, "A GHZ state made from two Bell pairs by a parity measurement and a correction: Clifford, with feedback, so a stabilizer engine must also get it.", 4, [g("h", 0), g("cx", 0, 1), g("h", 2), g("cx", 2, 3), g("cx", 1, 2), {"measure": 2, "bit": 0}, {"if": [0, 1], "then": [g("x", 3)]}, {"measure": 0, "bit": 1}, {"measure": 1, "bit": 2}, {"measure": 3, "bit": 3}], "distribution", bits=4, shots=100000) + add("repeat_until_success", "dynamic", {"rounds": 3}, "Three rounds of a non-Clifford trial with reset and a correction on what was read: the branches weigh differently, and the law is exact.", 2, _rus_steps(3), "distribution", bits=4, shots=200000) + + # Stabilizer circuits at width. + for n in (100, 1000, 5000): + add("clifford_ghz_n%d" % n, "clifford_large", {"n": n}, "A GHZ state across the whole register: sparse generators, past any state vector.", n, ghz_steps(n), "stabilizer", tier="ci" if n == 100 else "full") + for n in (65, 1000, 5000): + add("clifford_cluster_n%d" % n, "clifford_large", {"n": n}, "A line cluster state: every generator X Z neighbours, with its signs flipped by a layer of Z.", n, [g("h", q) for q in range(n)] + [g("cz", q, q + 1) for q in range(n - 1)] + [g("z", q) for q in range(0, n, 3)], "stabilizer") + for n, depth, seed in ((63, 12, 31), (64, 12, 32), (65, 12, 33), (127, 12, 34), (128, 12, 35), (129, 12, 36), (1000, 30, 37), (2000, 20, 38)): + add("clifford_random_n%d" % n, "clifford_large", {"n": n, "depth": depth, "seed": seed}, "Random Clifford layers, with widths on and either side of a machine word: packing bugs live at those edges.", n, random_clifford(n, depth, seed), "stabilizer", tier="ci" if n == 65 else "full") + add("clifford_random_n10_as_state", "clifford_large", {"n": 10, "depth": 30, "seed": 39}, "A Clifford circuit small enough for a state vector: the two formalisms must describe one state.", 10, random_clifford(10, 30, 39), "exact_state") + add("clifford_counts_n40", "clifford_large", {"n": 40, "depth": 8, "seed": 40}, "Sampling past the provider receipt's 22-qubit comparison: outcomes must lie in the affine space the stabilizers fix.", 40, random_clifford(40, 8, 40) + measure_all(40), "stabilizer_counts", bits=40, shots=20000) + + # Noise, in closed form. + for p, k in (("0.01", 20), ("0.1", 7)): + add("noise_depol1_x_chain_p%s_k%d" % (p.replace(".", "_"), k), "noise", {"channel": "depolarizing_1q", "p": p, "gates": k}, "k X gates, each followed by a depolarizing channel: = (-1)^k (1 - 4p/3)^k exactly.", 1, [g("x", 0)] * k, "expectation", noise={"depolarizing_1q": float(p)}, observable="Z0", closed=["depol1", p, k]) + add("noise_depol2_cx_chain", "noise", {"channel": "depolarizing_2q", "p": "0.02", "gates": 9}, "k cx gates, each followed by a two-qubit depolarizing channel: = (1 - 16p/15)^k exactly.", 2, [g("cx", 0, 1)] * 9, "expectation", noise={"depolarizing_2q": 0.02}, observable="Z0 Z1", closed=["depol2", "0.02", 9]) + + # Wide circuits, by methods that reach past a state vector. + for n in (30, 50, 100): + add("mps_ghz_n%d" % n, "wide_mps", {"n": n}, "Bond dimension 2 at any width: the amplitudes of the two outcomes, in closed form.", n, ghz_steps(n), "amplitudes", wide_kind="ghz", tier="ci" if n == 30 else "full") + for n, x in ((30, 715827883), (40, 366503875925)): + add("mps_qft_n%d" % n, "wide_mps", {"n": n, "x": x}, "The QFT of a basis state is a product state, reached through modest entanglement. Chosen amplitudes in closed form.", n, basis_prep(n, x) + qft_steps(n), "amplitudes", wide_kind="qft", qft_x=x) + add("tn_shallow_n26", "wide_tn", {"n": 26, "depth": 5, "seed": 41}, "A shallow rotation brickwork: amplitudes by contraction, against matrix product states and a state vector.", 26, random_rotations(26, 5, 41), "wide_pairwise") + add("tn_mirror_n40", "wide_tn", {"n": 40, "depth": 3, "seed": 42}, "A shallow mirror circuit, too wide for a state vector here: the amplitude of |0…0> is exactly 1.", 40, random_dyadic(40, 3, 42, 16) + inverse_steps(random_dyadic(40, 3, 42, 16)), "wide_mirror") + + return out + + +def _rus_steps(rounds): + steps = [] + for r in range(rounds): + steps += [g("h", 1), g("t", 1), g("cx", 0, 1), g("h", 1), g("t", 1), {"measure": 1, "bit": r}, {"if": [r, 1], "then": [g("x", 1)]}, g("h", 0), g("t", 0)] + steps.append({"measure": 0, "bit": rounds}) + return steps + + +# ------------------------------------------------------------------ the error-correction circuits + + +def qec_entries(): + """The noisy Clifford circuits: id, family, what generates it, why it is here, its tier.""" + out = [] + + def add(id_, code, d, r, p, reason, tier="full"): + out.append({"id": id_, "family": "qec", "code": code, "distance": d, "rounds": r, "p": p, "reason": reason, "tier": tier, "expect": "qec"}) + + for d in (3, 5, 7, 9, 11, 15): + add("surface_z_d%d" % d, "surface_code:rotated_memory_z", d, d, 0.001, "The rotated surface-code memory experiment in Z: the circuit decoders are measured on. The model must match mechanism by mechanism, and every detector's rate must follow it.", tier="ci" if d == 3 else "full") + for d in (3, 5, 7): + add("surface_x_d%d" % d, "surface_code:rotated_memory_x", d, d, 0.001, "The same in the X basis: resets and measurements in X.") + for d in (3, 5): + add("unrotated_z_d%d" % d, "surface_code:unrotated_memory_z", d, d, 0.002, "The unrotated layout: another gate order, and detectors with other coordinates.") + for d in (3, 9, 25): + add("repetition_d%d" % d, "repetition_code:memory", d, d, 0.005, "A line of data qubits: the simplest model, with long detector chains at d = 25.") + add("surface_z_d5_noiseless", "surface_code:rotated_memory_z", 5, 5, 0.0, "No noise at all: every detector and the observable are silent on every shot, and the model is empty.", tier="ci") + add("color_d3", "color_code:memory_xyz", 3, 3, 0.002, "A colour code with C_XYZ gates: an instruction the frame simulator does not implement must be refused with its line, never skipped.") + return out + + +HAND_WRITTEN_QEC = { + "qec_inverted_and_tagged": ("A measurement target inverted, which flips its value and no detection event, and a tag on noise.", """\ +R 0 1 +X_ERROR[leak](0.01) 0 +CX 0 1 +M !0 1 +DETECTOR rec[-1] rec[-2] +OBSERVABLE_INCLUDE(0) rec[-1] +"""), + "qec_measure_flip_noise": ("Measurement flip noise in both bases, and a reset in X.", """\ +R 0 +RX 1 +M(0.02) 0 +MX(0.03) 1 +DETECTOR rec[-2] +DETECTOR rec[-1] +"""), + "qec_depolarize_merge": ("Two channels whose mechanisms have the same symptoms merge by the XOR rule, p1 + p2 - 2 p1 p2.", """\ +R 0 1 +DEPOLARIZE1(0.01) 0 +X_ERROR(0.02) 0 +DEPOLARIZE2(0.03) 0 1 +M 0 1 +DETECTOR rec[-2] +DETECTOR rec[-1] +"""), + "qec_pauli_observable": ("An observable on Pauli targets rather than measurement records.", """\ +R 0 1 2 +H 0 +CX 0 1 1 2 +Z_ERROR(0.01) 1 +OBSERVABLE_INCLUDE(0) X0 X1 X2 +"""), + "qec_refused_correlated": ("A correlated error, which the frame simulator does not implement: it must be refused with its line.", """\ +R 0 1 +E(0.01) X0 X1 +M 0 1 +DETECTOR rec[-1] +"""), + "qec_refused_pauli_channel": ("A general Pauli channel, which it does not implement either.", """\ +R 0 +PAULI_CHANNEL_1(0.01, 0.02, 0.03) 0 +M 0 +DETECTOR rec[-1] +"""), + "qec_refused_random_detector": ("A detector that is random without noise is no detector: it must be refused.", """\ +RX 0 +M 0 +DETECTOR rec[-1] +"""), +} + + +def manifest_entry(e, text): + return { + "id": e["id"], + "family": e["family"], + "params": e.get("params", {"distance": e.get("distance"), "rounds": e.get("rounds"), "p": e.get("p"), "code": e.get("code")}), + "reason": e["reason"], + "expect": e["expect"], + "tier": e["tier"], + "qubits": e.get("n"), + "gates": sum(1 for s in e.get("steps", []) if "g" in s) if "steps" in e else None, + "sha256": hashlib.sha256(text.encode()).hexdigest(), + } + + +def build(tier=None): + """Every circuit entry in the tier (or all), with its text.""" + es = entries() + if tier == "ci": + es = [e for e in es if e["tier"] == "ci"] + for e in es: + e["qasm"] = qasm_of(e) + return es + + +COMMIT_LIMIT = 16 * 1024 # a program up to this many bytes is committed as a file + + +def main(): + root = os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "corpus") + os.makedirs(os.path.join(root, "qasm"), exist_ok=True) + rows = [] + for e in build(): + rows.append(manifest_entry(e, e["qasm"])) + if len(e["qasm"]) <= COMMIT_LIMIT: + with open(os.path.join(root, "qasm", e["id"] + ".qasm"), "w") as f: + f.write(e["qasm"]) + with open(os.path.join(root, "qec-hand-written.json"), "w") as f: + json.dump({k: {"reason": v[0], "text": v[1]} for k, v in HAND_WRITTEN_QEC.items()}, f, indent=1) + f.write("\n") + # The error-correction circuits are the pinned reference generator's, committed as text + # (corpus/qec/); a run checks that the generator still writes them. + for e in qec_entries(): + text = open(os.path.join(root, "qec", e["id"] + ".circuit")).read() + rows.append({"id": e["id"], "family": "qec", "params": {"code": e["code"], "distance": e["distance"], "rounds": e["rounds"], "p": e["p"]}, "reason": e["reason"], "expect": "qec", "tier": e["tier"], "sha256": hashlib.sha256(text.encode()).hexdigest()}) + with open(os.path.join(root, "manifest.json"), "w") as f: + json.dump({"about": "Every circuit of the corpus: parameters, reason, what it is held to, and the SHA-256 of its OpenQASM text. tools/corpus.py writes this file; the run fails if the generator no longer gives these bytes.", "circuits": rows}, f, indent=1, ensure_ascii=False) + f.write("\n") + print("%d circuits" % len(rows)) + + +if __name__ == "__main__": + main() diff --git a/wai/quantum-cross-simulator/tools/engines.py b/wai/quantum-cross-simulator/tools/engines.py new file mode 100644 index 000000000..3a8489dfa --- /dev/null +++ b/wai/quantum-cross-simulator/tools/engines.py @@ -0,0 +1,727 @@ +#!/usr/bin/env python3 +"""One engine, one job: the adapters that put a corpus circuit to each engine under test. + + python3 -I engines.py ENGINE JOB.json ANSWER.json + +ENGINE is one of ADAPTERS below, named `.`. Each runs in a process of its own, +so its peak memory is its own. A job carries the circuit's steps (corpus.py), its width and what +is asked: + + state the whole state, written to job["state_out"] as complex128 pairs, qubit 0 the + lowest bit of the index + counts job["shots"] samples of the classical bits at job["seed"]: {bits, bit 0 last: n} + amplitudes the amplitudes of job["bitstrings"] (qubit 0 last, as OpenQASM writes them) + stabilizers the stabilizer group, as signed strings of XYZ_ with qubit 0 first + expectation job["observable"] under job["noise"] + qec_model a circuit text's detector error model: [[p, [detectors], [observables]]] + qec_sample how often each detector and observable fired over job["shots"] + +The third-party engines take each gate by their own name for it, where they have one, so a +gate an engine defines differently shows as a difference. Where an engine has no such gate, the +adapter says so in `notes` and gives it the gate's matrix from exact.py instead. An answer also +names what the engine was set to (precision, fusion, threads), and the seconds its own call +took. A job an engine cannot run is answered {"ok": false, "unsupported": why}. +""" +import json +import os +import struct +import subprocess +import sys +import time + +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) +import exact # noqa: E402 + + +class Unsupported(Exception): + pass + + +def threads(job): + return int(job.get("threads") or 1) + + +def steps_of(job): + return job["steps"] + + +def gates_only(job): + for s in job["steps"]: + if "g" not in s: + raise Unsupported("this adapter runs programs with no measurement in the middle") + return job["steps"] + + +def matrix_np(name, args): + import numpy as np + + m = exact.one_qubit_matrix(name, args) + s = float(exact.ONE) + return np.array([[complex(m[0][0] / s, m[0][1] / s), complex(m[1][0] / s, m[1][1] / s)], [complex(m[2][0] / s, m[2][1] / s), complex(m[3][0] / s, m[3][1] / s)]]) + + +def write_state(path, amps_le): + """complex128 pairs, little-endian, qubit 0 the lowest index bit.""" + import numpy as np + + np.ascontiguousarray(amps_le, dtype=np.complex128).tofile(path) + + +def reverse_qubits(vec, n): + """A state with qubit 0 as the highest index bit, reordered to qubit 0 lowest.""" + import numpy as np + + return np.ascontiguousarray(np.asarray(vec).reshape([2] * n).transpose(list(range(n - 1, -1, -1))).reshape(-1)) if n > 1 else np.asarray(vec) + + +# ------------------------------------------------------------------ the engine under test + + +def wai_driver(job_kind, payload): + exe = os.environ.get("WAI_CROSS_SIMULATOR") + if not exe: + raise Unsupported("WAI_CROSS_SIMULATOR names no driver") + import tempfile + + payload = dict(payload, kind=job_kind) + with tempfile.NamedTemporaryFile("w", suffix=".json", delete=False) as f: + json.dump(payload, f) + path = f.name + try: + out = subprocess.run([exe, path], capture_output=True, text=True, check=False) + finally: + os.unlink(path) + if out.returncode != 0: + raise RuntimeError("the driver exited %d: %s" % (out.returncode, out.stderr[-2000:])) + v = json.loads(out.stdout) + if not v["ok"]: + return {"ok": False, "refused": v["refused"]} + return {"ok": True, **v["answer"]} + + +def wai_state(job, method): + from corpus import qasm_of + + q = qasm_of({"n": job["n"], "bits": 0, "steps": gates_only(job)}) + if job.get("perf"): + # Timed: the state is made and not written. + return wai_driver("state", {"qasm": q, "method": method, "fusion": job.get("fusion", 3), "ops": False}) + raw = job["state_out"] + ".raw" + a = wai_driver("state", {"qasm": q, "method": method, "state_out": raw, "fusion": job.get("fusion", 3), "ops": method == "exact"}) + if not a["ok"]: + return a + import numpy as np + + if method == "exact": + ints = np.fromfile(raw, dtype="