diff --git a/test_files/guppy_optimization/1q_squash/qsystem_chain.hugr b/test_files/guppy_optimization/1q_squash/qsystem_chain.hugr new file mode 100644 index 000000000..ad965603c Binary files /dev/null and b/test_files/guppy_optimization/1q_squash/qsystem_chain.hugr differ diff --git a/test_files/guppy_optimization/1q_squash/qsystem_chain.opt.hugr b/test_files/guppy_optimization/1q_squash/qsystem_chain.opt.hugr new file mode 100644 index 000000000..c52fd647e Binary files /dev/null and b/test_files/guppy_optimization/1q_squash/qsystem_chain.opt.hugr differ diff --git a/test_files/guppy_optimization/1q_squash/qsystem_chain.opt.py b/test_files/guppy_optimization/1q_squash/qsystem_chain.opt.py new file mode 100644 index 000000000..dd0985859 --- /dev/null +++ b/test_files/guppy_optimization/1q_squash/qsystem_chain.opt.py @@ -0,0 +1,24 @@ +# /// script +# requires-python = ">=3.13" +# dependencies = [ +# "guppylang >=0.21.6", +# ] +# /// + +from pathlib import Path +from sys import argv + +from guppylang import guppy +from guppylang.std.quantum import qubit +from guppylang.std.qsystem import rz, phased_x +from guppylang.std.angles import angle + + +@guppy +def qsystem_chain(q: qubit) -> None: + phased_x(q, angle(0.368713), angle(1.66415)) + rz(q, angle(0.870616)) + + +program = qsystem_chain.compile_function() +Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/guppy_optimization/1q_squash/qsystem_chain.py b/test_files/guppy_optimization/1q_squash/qsystem_chain.py new file mode 100644 index 000000000..8bc3590d4 --- /dev/null +++ b/test_files/guppy_optimization/1q_squash/qsystem_chain.py @@ -0,0 +1,46 @@ +# /// script +# requires-python = ">=3.13" +# dependencies = [ +# "guppylang >=0.21.6", +# ] +# /// + +from pathlib import Path +from sys import argv + +from guppylang import guppy +from guppylang.std.quantum import qubit +from guppylang.std.qsystem import rz, phased_x +from guppylang.std.angles import angle + + +@guppy +def qsystem_chain(q: qubit) -> None: + phased_x(q, angle(0.91), angle(0.5)) + phased_x(q, angle(0.53), angle(0)) + phased_x(q, angle(3.29), angle(0.5)) + phased_x(q, angle(0.81), angle(0)) + rz(q, angle(0.62)) + + +program = qsystem_chain.compile_function() +Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) + +# pytket code to generate this example. +# For the optimised version replace the call to AutoRebase with AutoSquash. + +# from pytket import Circuit, OpType +# from pytket.passes import AutoSquash, AutoRebase +# +# circ = Circuit(1) +# +# circ.Ry(0.91, 0) +# circ.Rx(0.53, 0) +# circ.Ry(-0.71, 0) +# circ.Rx(0.81, 0) +# circ.Rz(0.62, 0) +# +# When you switch to AutoSquash, remove ZZPhase from the set +# AutoRebase({OpType.Rz, OpType.PhasedX, OpType.ZZPhase}).apply(circ) +# +# print(circ.get_commands()) diff --git a/test_files/guppy_optimization/1q_squash/rz_chain.hugr b/test_files/guppy_optimization/1q_squash/rz_chain.hugr new file mode 100644 index 000000000..e9751bbcf Binary files /dev/null and b/test_files/guppy_optimization/1q_squash/rz_chain.hugr differ diff --git a/test_files/guppy_optimization/1q_squash/rz_chain.opt.hugr b/test_files/guppy_optimization/1q_squash/rz_chain.opt.hugr new file mode 100644 index 000000000..2dec1d42e Binary files /dev/null and b/test_files/guppy_optimization/1q_squash/rz_chain.opt.hugr differ diff --git a/test_files/guppy_optimization/1q_squash/rz_chain.opt.py b/test_files/guppy_optimization/1q_squash/rz_chain.opt.py new file mode 100644 index 000000000..0135f8049 --- /dev/null +++ b/test_files/guppy_optimization/1q_squash/rz_chain.opt.py @@ -0,0 +1,22 @@ +# /// script +# requires-python = ">=3.13" +# dependencies = [ +# "guppylang >=0.21.6", +# ] +# /// + +from pathlib import Path +from sys import argv + +from guppylang import guppy +from guppylang.std.quantum import rz, qubit +from guppylang.std.angles import angle + + +@guppy +def rz_chain(q: qubit) -> None: + rz(q, angle(3 / 2)) + + +program = rz_chain.compile_function() +Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/guppy_optimization/1q_squash/rz_chain.py b/test_files/guppy_optimization/1q_squash/rz_chain.py new file mode 100644 index 000000000..ba6c7e8fa --- /dev/null +++ b/test_files/guppy_optimization/1q_squash/rz_chain.py @@ -0,0 +1,24 @@ +# /// script +# requires-python = ">=3.13" +# dependencies = [ +# "guppylang >=0.21.6", +# ] +# /// + +from pathlib import Path +from sys import argv + +from guppylang import guppy +from guppylang.std.quantum import rz, qubit +from guppylang.std.angles import angle + + +@guppy +def rz_chain(q: qubit) -> None: + rz(q, angle(1 / 2)) + rz(q, angle(1 / 2)) + rz(q, angle(1 / 2)) + + +program = rz_chain.compile_function() +Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/guppy_optimization/angles/angles.flat.py b/test_files/guppy_optimization/angles/angles.flat.py index 701cfbc72..70a618a1c 100644 --- a/test_files/guppy_optimization/angles/angles.flat.py +++ b/test_files/guppy_optimization/angles/angles.flat.py @@ -40,5 +40,5 @@ def f(q: qubit @ owned) -> qubit: return q -program = main.compile() +program = main.compile_function() Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/guppy_optimization/angles/angles.opt.py b/test_files/guppy_optimization/angles/angles.opt.py index 65f27cac0..57d158b93 100644 --- a/test_files/guppy_optimization/angles/angles.opt.py +++ b/test_files/guppy_optimization/angles/angles.opt.py @@ -17,5 +17,5 @@ def main() -> None: result("b", 0) -program = main.compile() +program = main.compile_function() Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/guppy_optimization/angles/angles.py b/test_files/guppy_optimization/angles/angles.py index 0a8824423..bf6fe251d 100644 --- a/test_files/guppy_optimization/angles/angles.py +++ b/test_files/guppy_optimization/angles/angles.py @@ -46,5 +46,5 @@ def f(q: qubit @ owned) -> qubit: return q -program = main.compile() +program = main.compile_function() Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/guppy_optimization/false_branch/false_branch.opt.py b/test_files/guppy_optimization/false_branch/false_branch.opt.py index 65f27cac0..57d158b93 100644 --- a/test_files/guppy_optimization/false_branch/false_branch.opt.py +++ b/test_files/guppy_optimization/false_branch/false_branch.opt.py @@ -17,5 +17,5 @@ def main() -> None: result("b", 0) -program = main.compile() +program = main.compile_function() Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/guppy_optimization/false_branch/false_branch.py b/test_files/guppy_optimization/false_branch/false_branch.py index c1b4bac85..6fe35eb4d 100644 --- a/test_files/guppy_optimization/false_branch/false_branch.py +++ b/test_files/guppy_optimization/false_branch/false_branch.py @@ -26,5 +26,5 @@ def main() -> None: result("b", b) -program = main.compile() +program = main.compile_function() Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/guppy_optimization/nested/nested.flat.py b/test_files/guppy_optimization/nested/nested.flat.py index 81bccc182..d8b337333 100644 --- a/test_files/guppy_optimization/nested/nested.flat.py +++ b/test_files/guppy_optimization/nested/nested.flat.py @@ -38,5 +38,5 @@ def f(qs: array[qubit, 3] @ owned) -> array[qubit, 3]: return qs -program = main.compile() +program = main.compile_function() Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/guppy_optimization/nested/nested.opt.py b/test_files/guppy_optimization/nested/nested.opt.py index 337f797b7..1436d9c58 100644 --- a/test_files/guppy_optimization/nested/nested.opt.py +++ b/test_files/guppy_optimization/nested/nested.opt.py @@ -25,5 +25,5 @@ def main() -> None: result("b3", b3) -program = main.compile() +program = main.compile_function() Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/guppy_optimization/nested/nested.py b/test_files/guppy_optimization/nested/nested.py index b937f292b..a59deddbc 100644 --- a/test_files/guppy_optimization/nested/nested.py +++ b/test_files/guppy_optimization/nested/nested.py @@ -38,5 +38,5 @@ def f(qs: array[qubit, 3] @ owned) -> array[qubit, 3]: return qs -program = main.compile() +program = main.compile_function() Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/guppy_optimization/ranges/ranges.flat.py b/test_files/guppy_optimization/ranges/ranges.flat.py index 16bfd960a..0209a362b 100644 --- a/test_files/guppy_optimization/ranges/ranges.flat.py +++ b/test_files/guppy_optimization/ranges/ranges.flat.py @@ -41,5 +41,5 @@ def f(qs: array[qubit, 4] @ owned) -> array[qubit, 4]: return qs -program = main.compile() +program = main.compile_function() Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/guppy_optimization/ranges/ranges.opt.py b/test_files/guppy_optimization/ranges/ranges.opt.py index 1f3a5cdd4..1e5010418 100644 --- a/test_files/guppy_optimization/ranges/ranges.opt.py +++ b/test_files/guppy_optimization/ranges/ranges.opt.py @@ -27,5 +27,5 @@ def main() -> None: result("b4", b4) -program = main.compile() +program = main.compile_function() Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/guppy_optimization/ranges/ranges.py b/test_files/guppy_optimization/ranges/ranges.py index 8cfa2183c..09dfbbf83 100644 --- a/test_files/guppy_optimization/ranges/ranges.py +++ b/test_files/guppy_optimization/ranges/ranges.py @@ -41,5 +41,5 @@ def f(qs: array[qubit, 4] @ owned) -> array[qubit, 4]: return qs -program = main.compile() +program = main.compile_function() Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/guppy_optimization/simple_cx/simple_cx.opt.py b/test_files/guppy_optimization/simple_cx/simple_cx.opt.py index bdad0cb28..de7ed6ecf 100644 --- a/test_files/guppy_optimization/simple_cx/simple_cx.opt.py +++ b/test_files/guppy_optimization/simple_cx/simple_cx.opt.py @@ -18,5 +18,5 @@ def main() -> None: result("b2", 0) -program = main.compile() +program = main.compile_function() Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/guppy_optimization/simple_cx/simple_cx.py b/test_files/guppy_optimization/simple_cx/simple_cx.py index 0bd517bbe..f00458919 100644 --- a/test_files/guppy_optimization/simple_cx/simple_cx.py +++ b/test_files/guppy_optimization/simple_cx/simple_cx.py @@ -25,5 +25,5 @@ def main() -> None: result("b2", b2) -program = main.compile() +program = main.compile_function() Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/tket-qsystem/tests/guppy_opt.rs b/tket-qsystem/tests/guppy_opt.rs index 65957e1a0..42b8676d6 100644 --- a/tket-qsystem/tests/guppy_opt.rs +++ b/tket-qsystem/tests/guppy_opt.rs @@ -21,7 +21,8 @@ use tket_qsystem::QSystemPass; const GUPPY_EXAMPLES_DIR: &str = "../test_files/guppy_optimization"; /// JSON encoding of the clifford simp pytket pass. -const CLIFFORD_SIMP_STR: &str = r#"{"StandardPass": {"allow_swaps": true, "name": "CliffordSimp", "target_2qb_gate": "CX"}, "pass_class": "StandardPass"}"#; +// const CLIFFORD_SIMP_STR: &str = r#"{"StandardPass": {"allow_swaps": true, "name": "CliffordSimp", "target_2qb_gate": "CX"}, "pass_class": "StandardPass"}"#; +const SQUASH_STR: &str = r#"{"StandardPass": {"name": "SquashRzPhasedX"}, "pass_class": "StandardPass"}"#; enum HugrFileType { Original, @@ -54,7 +55,7 @@ fn run_pytket(h: &mut Hugr) { .par_iter_mut() .for_each(|(_region, serial_circuit)| { let mut circuit_ptr = Tket1Circuit::from_serial_circuit(serial_circuit).unwrap(); - Tket1Pass::run_from_json(CLIFFORD_SIMP_STR, &mut circuit_ptr).unwrap(); + Tket1Pass::run_from_json(SQUASH_STR, &mut circuit_ptr).unwrap(); *serial_circuit = circuit_ptr.to_serial_circuit().unwrap(); });