From b26e66e6c792c0ab5a617f588ef7d480df2a3004 Mon Sep 17 00:00:00 2001 From: nicolaassolini-qntm Date: Wed, 17 Jun 2026 12:30:42 +0100 Subject: [PATCH 01/15] deleted subscript tests --- test_files/guppy_examples/modifiers.hugr | Bin 4038 -> 0 bytes test_files/guppy_examples/modifiers.py | 31 ----------- .../modifier_examples/nested_ctrl_dagger1.py | 2 + .../subscript_as_controller.hugr | Bin 12176 -> 0 bytes .../subscript_as_controller.py | 51 ------------------ .../modifier_examples/subscript_in_ctrl.hugr | Bin 9087 -> 0 bytes .../modifier_examples/subscript_in_ctrl.py | 43 --------------- .../subscript_in_dagger.hugr | Bin 8316 -> 0 bytes .../modifier_examples/subscript_in_dagger.py | 39 -------------- .../subscript_in_dagger_ctrl.hugr | Bin 12904 -> 15905 bytes .../subscript_in_dagger_ctrl.py | 20 +++++-- .../subscript_in_dagger_ctrl_solved.npy | Bin 256 -> 384 bytes tket-py/test/test_pass.py | 5 +- tket/src/modifier/modifier_resolver.rs | 1 - 14 files changed, 21 insertions(+), 171 deletions(-) delete mode 100644 test_files/guppy_examples/modifiers.hugr delete mode 100644 test_files/guppy_examples/modifiers.py delete mode 100644 test_files/modifier_examples/subscript_as_controller.hugr delete mode 100644 test_files/modifier_examples/subscript_as_controller.py delete mode 100644 test_files/modifier_examples/subscript_in_ctrl.hugr delete mode 100644 test_files/modifier_examples/subscript_in_ctrl.py delete mode 100644 test_files/modifier_examples/subscript_in_dagger.hugr delete mode 100644 test_files/modifier_examples/subscript_in_dagger.py diff --git a/test_files/guppy_examples/modifiers.hugr b/test_files/guppy_examples/modifiers.hugr deleted file mode 100644 index 549f687a6bdf8032abb6f230680ef0efb6be5beb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4038 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 None: - with control(q0): - with dagger: - s(q1) - - -program = control_sdg.compile_function() -Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/modifier_examples/nested_ctrl_dagger1.py b/test_files/modifier_examples/nested_ctrl_dagger1.py index ec7196da3..c85a65a25 100644 --- a/test_files/modifier_examples/nested_ctrl_dagger1.py +++ b/test_files/modifier_examples/nested_ctrl_dagger1.py @@ -60,3 +60,5 @@ def main() -> None: program = main.compile() Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) + +# NICOLA: DELETE THIS diff --git a/test_files/modifier_examples/subscript_as_controller.hugr b/test_files/modifier_examples/subscript_as_controller.hugr deleted file mode 100644 index 133ed9be0d5e863a986565eb08e582eb2a540f39..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12176 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 Sg;ZYV;I&BVcP~CGhMO+tU1Zq+ diff --git a/test_files/modifier_examples/subscript_as_controller.py b/test_files/modifier_examples/subscript_as_controller.py deleted file mode 100644 index c4d779a9a..000000000 --- a/test_files/modifier_examples/subscript_as_controller.py +++ /dev/null @@ -1,51 +0,0 @@ -# /// script -# requires-python = ">=3.13" -# dependencies = [ -# "guppylang==1.0.0a4", -# ] -# /// -"""A simple controlled gate using modifiers""" - -from pathlib import Path -from sys import argv -import sys - -from guppylang import array, guppy -from guppylang.std.builtins import control -from guppylang.std.debug import state_result -from guppylang.std.quantum import discard, discard_array, qubit, angle -from guppylang.std.quantum import h, x, rx - -sys.path.append(str(Path(__file__).resolve().parents[1])) - -from guppylang.experimental import enable_experimental_features - -enable_experimental_features() - - -@guppy -def f(array_controllers: array[qubit, 3], c: qubit) -> None: - a = angle(1 / 3) - with control(array_controllers[0], c): - h(array_controllers[1]) - with control(array_controllers[1]): - rx(array_controllers[2], a) - - -@guppy -def main() -> None: - q = qubit() - array_controllers: array[qubit, 3] = array(qubit(), qubit(), qubit()) - x(array_controllers[0]) - h(q) - f(array_controllers, q) - - state_result( - "r", q, array_controllers[0], array_controllers[1], array_controllers[2] - ) - discard_array(array_controllers) - discard(q) - - -program = main.compile() -Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/modifier_examples/subscript_in_ctrl.hugr b/test_files/modifier_examples/subscript_in_ctrl.hugr deleted file mode 100644 index 03f5ba54a86e61912c753903c4e4eedf98648344..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9087 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 xzUve$2(i@Fxz0+a None: - q = qubit() - array_qubits: array[qubit, 2] = array(qubit(), qubit()) - - h(q) - with control(q): - h(array_qubits[1]) - h(array_qubits[0]) - s(array_qubits[0]) - - state_result("r", array_qubits[0], array_qubits[1], q) - discard_array(array_qubits) - discard(q) - - -program = main.compile() -Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/modifier_examples/subscript_in_dagger.hugr b/test_files/modifier_examples/subscript_in_dagger.hugr deleted file mode 100644 index d0c8c6eaeca1d3ca0f9cbf7e71bb3d5496a2716d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8316 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 Gl)3?B0Mx+% diff --git a/test_files/modifier_examples/subscript_in_dagger.py b/test_files/modifier_examples/subscript_in_dagger.py deleted file mode 100644 index 492706fe3..000000000 --- a/test_files/modifier_examples/subscript_in_dagger.py +++ /dev/null @@ -1,39 +0,0 @@ -# /// script -# requires-python = ">=3.13" -# dependencies = [ -# "guppylang==1.0.0a4", -# ] -# /// -"""Subscript indexing in dagger context""" - -from pathlib import Path -from sys import argv -import sys - -from guppylang import array, guppy -from guppylang.std.builtins import dagger -from guppylang.std.debug import state_result -from guppylang.std.quantum import qubit, discard_array -from guppylang.std.quantum import h, s - -sys.path.append(str(Path(__file__).resolve().parents[1])) - -from guppylang.experimental import enable_experimental_features - -enable_experimental_features() - - -@guppy -def main() -> None: - array_qubits: array[qubit, 2] = array(qubit(), qubit()) - - with dagger: - s(array_qubits[1]) - h(array_qubits[1]) - - state_result("r", array_qubits[0], array_qubits[1]) - discard_array(array_qubits) - - -program = main.compile() -Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/modifier_examples/subscript_in_dagger_ctrl.hugr b/test_files/modifier_examples/subscript_in_dagger_ctrl.hugr index a2ebd639167de7b9a146af38395bae44cdb603eb..78ad473a41c285e534a27c64aefd667b0a2b79ed 100644 GIT binary patch literal 15905 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 D)~KB4 literal 12904 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 SL)7v(h1OL0xu(dUM}9HQPuj%* diff --git a/test_files/modifier_examples/subscript_in_dagger_ctrl.py b/test_files/modifier_examples/subscript_in_dagger_ctrl.py index e62ad78ed..f055e2703 100644 --- a/test_files/modifier_examples/subscript_in_dagger_ctrl.py +++ b/test_files/modifier_examples/subscript_in_dagger_ctrl.py @@ -10,11 +10,12 @@ from sys import argv import sys + from guppylang import array, guppy from guppylang.std.builtins import control, dagger from guppylang.std.debug import state_result -from guppylang.std.quantum import qubit, discard_array -from guppylang.std.quantum import h, s +from guppylang.std.quantum import qubit, discard_array, angle +from guppylang.std.quantum import h, s, rx, x sys.path.append(str(Path(__file__).resolve().parents[1])) @@ -23,17 +24,26 @@ enable_experimental_features() +@guppy(unitary=True) +def f(controller: qubit, target: qubit) -> None: + a = angle(1 / 3) + with control(controller): + rx(target, a) + + @guppy def main() -> None: controller = array(qubit()) - array_qubits: array[qubit, 2] = array(qubit(), qubit()) + array_qubits = array(qubit(), qubit(), qubit()) h(controller[0]) + x(array_qubits[0]) with dagger: - with control(controller[0]): + with control(controller[0], array_qubits[0]): + f(array_qubits[1], array_qubits[2]) s(array_qubits[1]) h(array_qubits[1]) - state_result("r", controller[0], array_qubits[0], array_qubits[1]) + state_result("r", controller[0], array_qubits[0], array_qubits[1], array_qubits[2]) discard_array(array_qubits) discard_array(controller) diff --git a/test_files/run_modifier_examples/hugr_results/subscript_in_dagger_ctrl_solved.npy b/test_files/run_modifier_examples/hugr_results/subscript_in_dagger_ctrl_solved.npy index 03152b116568c1635537b59ec23a181a234f60dd..1928d1096ad02b43251d1edf523c1d73576f90d6 100644 GIT binary patch delta 68 zcmZo*YG9sV$7E)gbHu2K)|8PLGr{~&OG|HMWG06RPnumAu6 diff --git a/tket-py/test/test_pass.py b/tket-py/test/test_pass.py index 6b57fdb74..9423777f9 100644 --- a/tket-py/test/test_pass.py +++ b/tket-py/test/test_pass.py @@ -246,7 +246,10 @@ def test_normalize_guppy(): def test_modifier_resolver() -> None: normalize = NormalizeGuppy() mr_pass = ModifierResolverPass() - modifier_hugr: Hugr = _hugr_from_path("test_files/guppy_examples/modifiers.hugr") + # We consider a simple hugr for this test + modifier_hugr: Hugr = _hugr_from_path( + "test_files/modifier_examples/double_modifier.hugr" + ) modifier_hugr = normalize(modifier_hugr) diff --git a/tket/src/modifier/modifier_resolver.rs b/tket/src/modifier/modifier_resolver.rs index 2737357f1..248cd20a9 100644 --- a/tket/src/modifier/modifier_resolver.rs +++ b/tket/src/modifier/modifier_resolver.rs @@ -2418,7 +2418,6 @@ mod tests { #[case::multiple_functions_in_ctrl_dagger( "../test_files/modifier_examples/multiple_functions_in_ctrl_dagger.hugr" )] - #[case::guppy_modifiers("../test_files/guppy_examples/modifiers.hugr")] #[case::assign_in_dagger("../test_files/modifier_examples/assign_in_dagger.hugr")] #[case::classical_array_op("../test_files/modifier_examples/classical_array_op.hugr")] #[case::classical_function1("../test_files/modifier_examples/classical_function1.hugr")] From 41d149edd6a5916cbb57b8af353a88447caee355 Mon Sep 17 00:00:00 2001 From: nicolaassolini-qntm Date: Wed, 17 Jun 2026 15:42:52 +0100 Subject: [PATCH 02/15] deleted npy --- .../hugr_results/assign_in_dagger_solved.npy | Bin 192 -> 0 bytes .../hugr_results/call1_in_ctrl_solved.npy | Bin 192 -> 0 bytes .../hugr_results/call2_in_ctrl_solved.npy | Bin 384 -> 0 bytes .../hugr_results/call_in_dagger_solved.npy | Bin 160 -> 0 bytes .../hugr_results/classical_array_op_solved.npy | Bin 160 -> 0 bytes .../hugr_results/classical_function1_solved.npy | Bin 160 -> 0 bytes .../hugr_results/classical_function2_solved.npy | Bin 192 -> 0 bytes .../hugr_results/classical_function3_solved.npy | Bin 256 -> 0 bytes .../complex_modifier_stress_solved.npy | Bin 4224 -> 0 bytes .../ctrl_array_controller_solved.npy | Bin 384 -> 0 bytes .../hugr_results/ctrl_on_cfg_solved.npy | Bin 192 -> 0 bytes .../hugr_results/double_modifier_solved.npy | Bin 192 -> 0 bytes .../hugr_results/even_dagger_solved.npy | Bin 192 -> 0 bytes .../hugr_results/gate_in_ctrl_solved.npy | Bin 192 -> 0 bytes .../higher_order_classical_solved.npy | Bin 192 -> 0 bytes .../higher_order_function_w_arrays_solved.npy | Bin 256 -> 0 bytes .../higher_order_function_w_loops_solved.npy | Bin 192 -> 0 bytes .../higher_order_recursive_solved.npy | Bin 192 -> 0 bytes .../hugr_results/modify_array_solved.npy | Bin 256 -> 0 bytes .../hugr_results/multiple_dagger_solved.npy | Bin 160 -> 0 bytes .../multiple_functions_in_ctrl_dagger_solved.npy | Bin 192 -> 0 bytes .../multiple_functions_in_dagger_solved.npy | Bin 160 -> 0 bytes .../multiple_gates1_in_ctrl_solved.npy | Bin 192 -> 0 bytes .../multiple_gates1_in_dagger_solved.npy | Bin 160 -> 0 bytes .../multiple_gates2_in_ctrl_solved.npy | Bin 192 -> 0 bytes .../multiple_gates2_in_dagger_solved.npy | Bin 160 -> 0 bytes .../multiple_gates3_in_dagger_solved.npy | Bin 160 -> 0 bytes .../hugr_results/nested_ctrl_dagger1_solved.npy | Bin 384 -> 0 bytes .../nested_multiple_ctrl1_solved.npy | Bin 384 -> 0 bytes .../subscript_as_controller_solved.npy | Bin 384 -> 0 bytes .../hugr_results/subscript_in_ctrl_solved.npy | Bin 256 -> 0 bytes .../subscript_in_dagger_ctrl_solved.npy | Bin 384 -> 0 bytes .../hugr_results/swap_in_dagger_solved.npy | Bin 160 -> 0 bytes 33 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 test_files/run_modifier_examples/hugr_results/assign_in_dagger_solved.npy delete mode 100644 test_files/run_modifier_examples/hugr_results/call1_in_ctrl_solved.npy delete mode 100644 test_files/run_modifier_examples/hugr_results/call2_in_ctrl_solved.npy delete mode 100644 test_files/run_modifier_examples/hugr_results/call_in_dagger_solved.npy delete mode 100644 test_files/run_modifier_examples/hugr_results/classical_array_op_solved.npy delete mode 100644 test_files/run_modifier_examples/hugr_results/classical_function1_solved.npy delete mode 100644 test_files/run_modifier_examples/hugr_results/classical_function2_solved.npy delete mode 100644 test_files/run_modifier_examples/hugr_results/classical_function3_solved.npy delete mode 100644 test_files/run_modifier_examples/hugr_results/complex_modifier_stress_solved.npy delete mode 100644 test_files/run_modifier_examples/hugr_results/ctrl_array_controller_solved.npy delete mode 100644 test_files/run_modifier_examples/hugr_results/ctrl_on_cfg_solved.npy delete mode 100644 test_files/run_modifier_examples/hugr_results/double_modifier_solved.npy delete mode 100644 test_files/run_modifier_examples/hugr_results/even_dagger_solved.npy delete mode 100644 test_files/run_modifier_examples/hugr_results/gate_in_ctrl_solved.npy delete mode 100644 test_files/run_modifier_examples/hugr_results/higher_order_classical_solved.npy delete mode 100644 test_files/run_modifier_examples/hugr_results/higher_order_function_w_arrays_solved.npy delete mode 100644 test_files/run_modifier_examples/hugr_results/higher_order_function_w_loops_solved.npy delete mode 100644 test_files/run_modifier_examples/hugr_results/higher_order_recursive_solved.npy delete mode 100644 test_files/run_modifier_examples/hugr_results/modify_array_solved.npy delete mode 100644 test_files/run_modifier_examples/hugr_results/multiple_dagger_solved.npy delete mode 100644 test_files/run_modifier_examples/hugr_results/multiple_functions_in_ctrl_dagger_solved.npy delete mode 100644 test_files/run_modifier_examples/hugr_results/multiple_functions_in_dagger_solved.npy delete mode 100644 test_files/run_modifier_examples/hugr_results/multiple_gates1_in_ctrl_solved.npy delete mode 100644 test_files/run_modifier_examples/hugr_results/multiple_gates1_in_dagger_solved.npy delete mode 100644 test_files/run_modifier_examples/hugr_results/multiple_gates2_in_ctrl_solved.npy delete mode 100644 test_files/run_modifier_examples/hugr_results/multiple_gates2_in_dagger_solved.npy delete mode 100644 test_files/run_modifier_examples/hugr_results/multiple_gates3_in_dagger_solved.npy delete mode 100644 test_files/run_modifier_examples/hugr_results/nested_ctrl_dagger1_solved.npy delete mode 100644 test_files/run_modifier_examples/hugr_results/nested_multiple_ctrl1_solved.npy delete mode 100644 test_files/run_modifier_examples/hugr_results/subscript_as_controller_solved.npy delete mode 100644 test_files/run_modifier_examples/hugr_results/subscript_in_ctrl_solved.npy delete mode 100644 test_files/run_modifier_examples/hugr_results/subscript_in_dagger_ctrl_solved.npy delete mode 100644 test_files/run_modifier_examples/hugr_results/swap_in_dagger_solved.npy diff --git a/test_files/run_modifier_examples/hugr_results/assign_in_dagger_solved.npy b/test_files/run_modifier_examples/hugr_results/assign_in_dagger_solved.npy deleted file mode 100644 index aceda8cdfde27714426ce60d751d6dc878bff064..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 192 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlWb_FuA`uymS0p-l$aNvUzCyxl5k7RDNY57 w7iT0EqyqUGCOVor3bhL41FkdH^=b1KJhNxO0dy5PMfzqu#*jY?)_2Vw0FJ~atpET3 diff --git a/test_files/run_modifier_examples/hugr_results/call1_in_ctrl_solved.npy b/test_files/run_modifier_examples/hugr_results/call1_in_ctrl_solved.npy deleted file mode 100644 index 1b4e6678200aeaabf9a1cba31855ef70b7f534b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 192 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlWb_FuA`uymS0p-l$aNvUzCyxl5k7RDNY57 l7iT0EqyqUGCOVor3bhL41Fo~y^=b1KJhNvY5}Za;4*+M*Bnbcj diff --git a/test_files/run_modifier_examples/hugr_results/call2_in_ctrl_solved.npy b/test_files/run_modifier_examples/hugr_results/call2_in_ctrl_solved.npy deleted file mode 100644 index 995bcca393714b1c23c6faf6dfcca3e27fd1d092..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 384 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlWb_FuA`uymS0p-l$aNvUzCyxl5k7RDNY57 z7iT0EqyqUGhGsgNItsN4WCJb+8iRAz^=b1KJhP{R(6+|r}8l#{-z@P@Jb%7{U z6A(cji%NY85JP(9=&dxc0=T=ARv5eOyrM$ zkNF^cd*qLHaDC5X_RQIK33mVQ$EsxH)u&i?IOM$Yfu)0C-k4XP64`p-jS0(^6-igg z&1Rfx>33KmHQ<2{q62J}T^hAh$kmx!=AJNglE<~rTJYIxc~T8d3H`9b|6Hn}7MHaK zc}z(@^b7&UWgxg ztIrqLCon#heE5Il;{HC2FJk;ER)X(J% z`{CMi6=#(ETOGMgjwP~h_2WnD+H#clm(JX3n^-9SKGC|b-dwBvI#zbC(G|+QUNHlY zqn639z1X7d$vY`~wk+^*cz#|9e0pq7N2N~QG;DU$EJLqk(HHkiZnLJ1y(v{^NkzEJb%rjp^DAi&HZPqzFceWM z>2a;=>c3w*UN2q116>FFf-f4SZ?U@EbVxdUeaf}OzWW{09sJKs&y!K{ZBiQE-BBYLgfC$yd;{0u{n!;} z;ySz+|HdS*$6|hqev0`zi(EYaQ~D#GKh5NRpOK4xyO95h=l|KHe>2GS8? zhpn+#FGb&y$k&jI_mPJa$yeY6+=6f82e=B0{#N2b@=}xQoA4m{6+D8)`>Vxb{ke-@ z(C2vi+>MvxK^%lz@oYSeK5vd!`)rLL?ow@u3(3b~U-BUOpGN;P>A#--Yw7=D`d?1} z_uf$Z??eAb4y*m2O8=95)c)Jj|0(o8mj1iZ|EKg}O?ueRI`WShzQO4g9V<4LB}jL% zF7Ke@_1=R9u|KCfPq*?q9cJhwZ_&h^ugcOJ+Hv#w{N26VjvB;%>^|#)?el5+QBPW4 zaG)nT$1ueB%Ql0hw=Q)`&v3%2e;v);(Jl4jF`-dr)Bk9cdhmbxzse{L;P~!a@Ahjt zr6+ie&DU=%)pU=pClgPN^IkmCC4EosV&ifBm%=a4hV=eP11dBc^IE6eM$Kn>e z7>D6F+=|0Z@~2p#kM&rbH@?S(@rR#--yNjTfq9DBd^Bd z{E>;p^}V=(@lUXLpAT_0c|8{E(d#_l{GodO8r_c>|0d&ya3_5g-**TqCW8Gyz5JqMR?zc?)BX9O1K+r?PSZx4Ji ztnq@O?V>!sa7W;cx-2CXcNeHG#}mj8;cD`Icm!|2Mw5IB*DodSBp<@@xCaN}CwK|2 z#!mP?-iI4-D87SNVm+RZ7p+l$|N0B+?|nhO5YHj^!{hOKTNAuW4?M1S6bVqUhcW31dP6gRs z_e$k0?%C4g^;$W3iA%%ni6!#9yF-&A8gmtI#+_8JQ&#^lE^Bj6p=`hPR?W{lBzgGG qMbBZ2^Rh1QK`um2!$9?oY6OCaPwqscR&$^S)@=RlMH oi6+m2CXa4Dx_i*|v!dxoSHIu7K5gEDWA;~|^a&_^1VZlz0Gz~YD*ylh diff --git a/test_files/run_modifier_examples/hugr_results/subscript_as_controller_solved.npy b/test_files/run_modifier_examples/hugr_results/subscript_as_controller_solved.npy deleted file mode 100644 index 7e9d004123d9ffbbc3d3a29a2be29815c036b9a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 384 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlWb_FuA`uymS0p-l$aNvUzCyxl5k7RDNY57 z7iT0EqyqUGhGsgNItsN4WCJb+3c(rc`m}iqp4n4q4B6T_z&an`w11&b#EYtJw=v|u J{Re^b`vK<9Eb0IN diff --git a/test_files/run_modifier_examples/hugr_results/subscript_in_ctrl_solved.npy b/test_files/run_modifier_examples/hugr_results/subscript_in_ctrl_solved.npy deleted file mode 100644 index 0ef6214a1b4db135832a95be0a4d7864887828f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 256 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlWb_FuA`uymS0p-l$aNvUzCyxl5k7RDNY57 y7iT0EqyqUG7CM?b3bhL41Fmz{^=b1KJhNwjf-_+LH8>w84xHq)$ diff --git a/test_files/run_modifier_examples/hugr_results/swap_in_dagger_solved.npy b/test_files/run_modifier_examples/hugr_results/swap_in_dagger_solved.npy deleted file mode 100644 index 538eff5b6256f797baa8c705b4cf50d6617d3d59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 160 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlWb_FuA`uymS0p-l$aNvUzCyxl5k7RDNY57 k7iT0EqyqUGMmm~03bhL41Fo~y^=b1KJhNwjg41Yx0B>$22LJ#7 From 660635e6ad1b7c746641a3b11bdfb11dd3cae388 Mon Sep 17 00:00:00 2001 From: nicolaassolini-qntm Date: Wed, 17 Jun 2026 16:34:13 +0100 Subject: [PATCH 03/15] deleted all hugrs and repeted tests --- .../modifier_examples/assign_in_dagger.hugr | Bin 5584 -> 0 bytes .../modifier_examples/call1_in_ctrl.hugr | Bin 4425 -> 0 bytes .../modifier_examples/call2_in_ctrl.hugr | Bin 5793 -> 0 bytes .../modifier_examples/call_in_dagger.hugr | Bin 4171 -> 0 bytes .../modifier_examples/classical_array_op.hugr | Bin 7039 -> 0 bytes .../classical_function1.hugr | Bin 4953 -> 0 bytes .../classical_function2.hugr | Bin 6996 -> 0 bytes .../classical_function3.hugr | Bin 7847 -> 0 bytes .../complex_modifier_stress.hugr | Bin 23117 -> 0 bytes .../ctrl_array_controller.hugr | Bin 9702 -> 0 bytes test_files/modifier_examples/ctrl_on_cfg.hugr | Bin 10959 -> 0 bytes test_files/modifier_examples/ctrl_on_cfg.py | 67 ------------------ .../modifier_examples/double_modifier.hugr | Bin 5421 -> 0 bytes test_files/modifier_examples/even_dagger.hugr | Bin 5931 -> 0 bytes test_files/modifier_examples/even_dagger.py | 40 ----------- .../modifier_examples/gate_in_ctrl.hugr | Bin 4160 -> 0 bytes test_files/modifier_examples/gate_in_ctrl.py | 39 ---------- .../higher_order_classical.hugr | Bin 6804 -> 0 bytes .../higher_order_function_w_arrays.hugr | Bin 10615 -> 0 bytes .../higher_order_recursive.hugr | Bin 5479 -> 0 bytes .../modifier_examples/modify_array.hugr | Bin 8456 -> 0 bytes .../modifier_examples/multiple_dagger.hugr | Bin 5704 -> 0 bytes .../modifier_examples/multiple_dagger.py | 47 ------------ .../multiple_functions_in_ctrl_dagger.hugr | Bin 6883 -> 0 bytes .../multiple_functions_in_ctrl_dagger.py | 61 ---------------- .../multiple_functions_in_dagger.hugr | Bin 6206 -> 0 bytes .../multiple_functions_in_dagger.py | 62 ---------------- .../multiple_gates1_in_ctrl.hugr | Bin 5067 -> 0 bytes .../multiple_gates1_in_ctrl.py | 43 ----------- .../multiple_gates1_in_dagger.hugr | Bin 3977 -> 0 bytes .../multiple_gates1_in_dagger.py | 40 ----------- .../multiple_gates2_in_ctrl.hugr | Bin 5429 -> 0 bytes .../multiple_gates2_in_ctrl.py | 48 ------------- .../multiple_gates2_in_dagger.hugr | Bin 4201 -> 0 bytes .../multiple_gates2_in_dagger.py | 45 ------------ .../multiple_gates3_in_dagger.hugr | Bin 5224 -> 0 bytes .../multiple_gates3_in_dagger.py | 46 ------------ .../nested_ctrl_dagger1.hugr | Bin 7181 -> 0 bytes .../modifier_examples/nested_ctrl_dagger1.py | 64 ----------------- .../nested_multiple_ctrl1.hugr | Bin 6595 -> 0 bytes .../nested_multiple_ctrl1.py | 50 ------------- .../subscript_in_dagger_ctrl.hugr | Bin 15905 -> 0 bytes .../modifier_examples/swap_in_dagger.hugr | Bin 6026 -> 0 bytes .../subscript_in_dagger_solved.npy | Bin 192 -> 0 bytes 44 files changed, 652 deletions(-) delete mode 100644 test_files/modifier_examples/assign_in_dagger.hugr delete mode 100644 test_files/modifier_examples/call1_in_ctrl.hugr delete mode 100644 test_files/modifier_examples/call2_in_ctrl.hugr delete mode 100644 test_files/modifier_examples/call_in_dagger.hugr delete mode 100644 test_files/modifier_examples/classical_array_op.hugr delete mode 100644 test_files/modifier_examples/classical_function1.hugr delete mode 100644 test_files/modifier_examples/classical_function2.hugr delete mode 100644 test_files/modifier_examples/classical_function3.hugr delete mode 100644 test_files/modifier_examples/complex_modifier_stress.hugr delete mode 100644 test_files/modifier_examples/ctrl_array_controller.hugr delete mode 100644 test_files/modifier_examples/ctrl_on_cfg.hugr delete mode 100644 test_files/modifier_examples/ctrl_on_cfg.py delete mode 100644 test_files/modifier_examples/double_modifier.hugr delete mode 100644 test_files/modifier_examples/even_dagger.hugr delete mode 100644 test_files/modifier_examples/even_dagger.py delete mode 100644 test_files/modifier_examples/gate_in_ctrl.hugr delete mode 100644 test_files/modifier_examples/gate_in_ctrl.py delete mode 100644 test_files/modifier_examples/higher_order_classical.hugr delete mode 100644 test_files/modifier_examples/higher_order_function_w_arrays.hugr delete mode 100644 test_files/modifier_examples/higher_order_recursive.hugr delete mode 100644 test_files/modifier_examples/modify_array.hugr delete mode 100644 test_files/modifier_examples/multiple_dagger.hugr delete mode 100644 test_files/modifier_examples/multiple_dagger.py delete mode 100644 test_files/modifier_examples/multiple_functions_in_ctrl_dagger.hugr delete mode 100644 test_files/modifier_examples/multiple_functions_in_ctrl_dagger.py delete mode 100644 test_files/modifier_examples/multiple_functions_in_dagger.hugr delete mode 100644 test_files/modifier_examples/multiple_functions_in_dagger.py delete mode 100644 test_files/modifier_examples/multiple_gates1_in_ctrl.hugr delete mode 100644 test_files/modifier_examples/multiple_gates1_in_ctrl.py delete mode 100644 test_files/modifier_examples/multiple_gates1_in_dagger.hugr delete mode 100644 test_files/modifier_examples/multiple_gates1_in_dagger.py delete mode 100644 test_files/modifier_examples/multiple_gates2_in_ctrl.hugr delete mode 100644 test_files/modifier_examples/multiple_gates2_in_ctrl.py delete mode 100644 test_files/modifier_examples/multiple_gates2_in_dagger.hugr delete mode 100644 test_files/modifier_examples/multiple_gates2_in_dagger.py delete mode 100644 test_files/modifier_examples/multiple_gates3_in_dagger.hugr delete mode 100644 test_files/modifier_examples/multiple_gates3_in_dagger.py delete mode 100644 test_files/modifier_examples/nested_ctrl_dagger1.hugr delete mode 100644 test_files/modifier_examples/nested_ctrl_dagger1.py delete mode 100644 test_files/modifier_examples/nested_multiple_ctrl1.hugr delete mode 100644 test_files/modifier_examples/nested_multiple_ctrl1.py delete mode 100644 test_files/modifier_examples/subscript_in_dagger_ctrl.hugr delete mode 100644 test_files/modifier_examples/swap_in_dagger.hugr delete mode 100644 test_files/run_modifier_examples/hugr_results/subscript_in_dagger_solved.npy diff --git a/test_files/modifier_examples/assign_in_dagger.hugr b/test_files/modifier_examples/assign_in_dagger.hugr deleted file mode 100644 index a04ee45a5c9e94851b0a5a3c4879212d2ef7bb51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5584 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 diff --git a/test_files/modifier_examples/call1_in_ctrl.hugr b/test_files/modifier_examples/call1_in_ctrl.hugr deleted file mode 100644 index b598b75f1466d7ff9674dcca6982aab4692bda29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4425 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 P9=#HHog0Kg`UchpaUrgW diff --git a/test_files/modifier_examples/call2_in_ctrl.hugr b/test_files/modifier_examples/call2_in_ctrl.hugr deleted file mode 100644 index 90367c182399890900d5a684c1b2f3919d7c2503..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5793 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 diff --git a/test_files/modifier_examples/call_in_dagger.hugr b/test_files/modifier_examples/call_in_dagger.hugr deleted file mode 100644 index da15dce480af91df7d0a84f96be89da59fc74af9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4171 zcmV-R5VY?|RYy{3NJ@4BK`6B^{Qy|SfdGoRYKCLaRN(zRtA2E@%~M$%UX1`|ChhEd2dxlMX$gRkXQ( zpjc#;xBi!DXV?p5RdFAIR?+sgOgaQv8@M+>t7v0+&ALJT1U~A25Y%bK;yz(23rxi@ z^=TtbEFWYR6A1 zf}I*|lEBXrv;$tFO-it%5LBq2v;;dfiUJ8L(@%~P%=y-RfY+wWoGq-o%#Wr_%$!kU z-C=$-Pos%L`XM977+FMcak5f_br*fijG|2*tozH4rW9=sVclDP8%-swJIim{oWi=V zyu19lO$uY(>5pg&>pq_am1%(1u+K;ZN@W6@fp%03A6n zAX0~1P*H!nsVlV3FCeC+?&#DCepFM87XU_e(W2T~W4r(XR2VO+3jk`1QMD{;-D=E= zDqs75cbTnfqUyp@UEUphudCVHwA4%M4Vua_K$W3US4y>JrpmBUXN?Mj>&uLaLsW4{ zl>k}a#m0DQN7~nsoitv?#&{TZ^f0XUFzjk`pFLmyX)F!xYuK61U4frrHF#>Zr*^)J zy_@^gwy*y$ERAnrwQphP!?5#Ztla*ujqx&;3MJ}XqE08OeEKvxs@A)-NH0^C{3}2I zJ%eBQ?B%~_8-11Bw3qqrwhxzAT80bdSEzLsLZE^WE5kk+qZF}!fnkdUJ&87VxovM0 z_0A5x^H!N$;{$0sH=-nWe&Sq3&8S9S8mhwab+qFon8nb&>;LTYW|Y@4-eMEtG$})T#+Rc6duwLaS)o9nfe*hMP1udOCzvaSyYN1$rzV4;|BM+~4QX zh-qt~T}5j3J%W#MAm>-W1X#&Vj*^`myyT{^7-|@ZZ)s@BP2JKGBHybH;T$=pCP%ip zG2NI>M{Gndf1%!AXG3#cU-n`!*yzHyrAi3y9O@nZX_ruu`ZI)YVlwEp_NQMu9L20( zs1NLR-e7nVH7vGG`|C`sZtGXj?!t_6jX;_^olK|`%7nr8U->!&6EBvjX`bKx&W&LP4eACHR^e90Ou-EWmX%oR5}v zfM&H4Vu8|YAZT|NtX5Te$clOhe#MhMfG6p|sTfspaO#UkB~Zi1(NPi5L8>|aXT_+B zQI&L4@!R-ssQ^5QRBzmTGPLaKJC*Vh!OSSGd zew4wOVclzfl+|e23CFtAJd2D+=HrJ2)_vwj*^hO%@uN(4Myz{{A7wG?PUGGG=Qhfk zxX7AhC}d8oJLyLm45JK+b;m!-qU12je6a2_er7{h_kS&$Vm&`YLnjXefo{Iw{<^!n z>-sv@Es6RyiXWJh_0G+=1>Vs0b^Fsg)E-cd!9dpKaRPU!k9=SbxNE$;KmF=L4NIbF zZm5H{c7gkfAd-DKjt7@Rd`lv$`*ILY3$b(%>l;@kR1O1n_jN6s5B#p!-Bx$?2Licz z=bCE7FLzuH@7G-)L2e7YqV{0j_Qu!MK$r7I5DCq-d4XZ;Zq^uX@dI;OUJmM5od-+u zz!LEb$9-E~4!SMyh8pNKepk$w(;61r_jLNYE8b5Z>0Gx3UcK`cuMXOGhagPvpmt6X z7;sbg>uz##kbpr>H#eu75Uk*$PCDCTX>P^oAXaAKTe`U^oP_HKi+ub6oA)gic5p6kmiR_B30ubAlL zZY(((uv(?0lq0Ls($q7(Zk2b$7jfpAwO6M zzNHh9Tl&F1_?B*n2oaKlZ)u42jjdIvk$@h)B`tcnbyGMN=C1?7w=^{LgKz0)2G%#4VLCP~r(0ty(05JMsn5fLg8ZS!V#$039`d4qJxM^UaTJDe6xQfUcky4052a*M3t*{mgiO#Cux zMw^)EIs!qn74t4IRZ>;#TC^t@DO+6XOcz^uGl7|Skl=EIM2naxrPFJ1&mYxhtq+L3 z;JW}oR#C?7;KX#LoB|u|#N;R0 zMT0wv%QN(PFN7I-PfqbsHh+AB-lkZw1&?akAJ$PI%^LxFeH{p3@4Sgcg#ov`d3axCpT*d=>iFVgw5d~ zVjdh70dLz1jD*~)cGDv^T6A&bns7alkrT?5YW_SUgf>Hh1Q5XmK}L$(TuC!UPEf21 zMHis~a7=8}>S>@a!n1{pJpTr$VX%k%Cmxk-3+Q77IR5aVO5!~56P zW4OWyXnl}x>$6R z>Prl&9EOnlNg)PZShBe2*iX3Ke?OJZbyl)g}8Ei|<+6P5(Tsa@JQ>TPYn*w;9{uw3Z3 zgLp|g_+fv)ivzhUKL}P_&hu8+^Ahd}nS@mO&vj>=2r`dR^#Y_BUONVRI@Z`^ zRge!(-4=jqoxxp%`dOZKt4F0Np!L9f$cJRTdwG`;c{^0~7x!VY3dkCvnE_npQ#i1$ zL_JW6HsCBvmN~meEEv74v$DnLnrVU6V+Wt~(LPwY-KyWx zfPIU~lpqjbKVfuVR1@2=%5+8yH(vpn`GSU`VCE&69K5Z1y{EP(t zW|DNC1>yly%Zt1wk%M3s<7Q_y@CyUvp+%QGeeTJH8A5S>>hn@W38LTfc`3*2I6o!) zI-6W15YQl@Z8cFh#4r$QqEnN09_Cm+(AHX-^F_2LNo&Z+z_Z2iStCH6Jd$AFy}tjy z&>dwOprKOUVLRBifnI3QFxvo&i@_&Q?hOjbC>md-VQ;)*Id&0>9{C8HFKhT|Qh8NV zk|d?XcIcww$7w(RFdv)^Rri%NyS~=lkWT67yW72>ORTIp;?oQzXHQ61$t+{M!2^u5 zl+yNyHsU**X_+wMomm-t>MRl&KBbCC9HCqLb<$yds4$aua_B%jh)bzIVH?6}bqf(c zi2kyAm<j@TP@E3DK%hR=x2FF&)ZA)80jiB8zmdaD7eN(;kN8ql8+ zN8);NoX}?r`3fe7L*i7;h`PT}sv+=j{GP)U&kTNYWmY`cycYfFDT}7GT{*KF7DMz& ziw#><5sQSGcZ#ochP1bYM68XBi;`9)d0-&Dm0_Go5p@Q_*3-vQisqI4TV;qLnv0D_HP2`6kZr4ULtJUVA&zxDs32{R;)>1Z3Lvg z!SP)1GD|*CAu*v>$5!9K!MCpHnE5u^;|@#2 VYqV8NHKPk>Dwm}Y0=P0i8`|oh0lokL diff --git a/test_files/modifier_examples/classical_array_op.hugr b/test_files/modifier_examples/classical_array_op.hugr deleted file mode 100644 index c8def8f88158becfbe8b11e399000c5af1fc0e33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7039 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 X(*nAD&r9;^RlFaNDiKeGa|(P2)yjiq diff --git a/test_files/modifier_examples/classical_function2.hugr b/test_files/modifier_examples/classical_function2.hugr deleted file mode 100644 index 76e4b7558d5e841f7ab424dbf7738b33a001bff6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6996 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 diff --git a/test_files/modifier_examples/classical_function3.hugr b/test_files/modifier_examples/classical_function3.hugr deleted file mode 100644 index 55a0deec5a0d3a9e15cb15a63e17596c3ce899d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7847 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 F6djhQI_>}f diff --git a/test_files/modifier_examples/complex_modifier_stress.hugr b/test_files/modifier_examples/complex_modifier_stress.hugr deleted file mode 100644 index bf7ef7d6f76e1516751593fd7dc60784064b99be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23117 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 W!d_bdx~-x-RM_QRd8bWtn2H@{4`q=6 diff --git a/test_files/modifier_examples/ctrl_array_controller.hugr b/test_files/modifier_examples/ctrl_array_controller.hugr deleted file mode 100644 index 458574ca95ac0aff61a6a7f41d510823432a790f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9702 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 diff --git a/test_files/modifier_examples/ctrl_on_cfg.py b/test_files/modifier_examples/ctrl_on_cfg.py deleted file mode 100644 index 73a27594c..000000000 --- a/test_files/modifier_examples/ctrl_on_cfg.py +++ /dev/null @@ -1,67 +0,0 @@ -# /// script -# requires-python = ">=3.13" -# dependencies = [ -# "guppylang==1.0.0a4", -# ] -# /// -"""Controlling a function with internal control flow""" - -from pathlib import Path -from sys import argv -import sys - -from guppylang import guppy -from guppylang.std.builtins import control -from guppylang.std.debug import state_result -from guppylang.std.quantum import discard, h, qubit, rx, x, rz -from guppylang.std.angles import angle - -sys.path.append(str(Path(__file__).resolve().parents[1])) - -from guppylang.experimental import enable_experimental_features - -enable_experimental_features() - - -@guppy(controllable=True) -def funz(t: qubit, a: angle) -> None: - rz(t, a) - - -@guppy(controllable=True) -def branchy(q: qubit, flag: bool) -> None: - if flag: - x(q) - else: - h(q) - - -@guppy -def main() -> None: - c = qubit() - t = qubit() - flag = True - h(c) - with control(c): - inner_flag = False - branchy(t, flag) - branchy(t, inner_flag) - a = angle(1 / 4) - if flag: - for _ in range(2): - funz(t, a) - if inner_flag: - x(t) - else: - rot = 1 / 2 - while rot >= 1 / 4: - rx(t, angle(rot)) - rot = rot / 2 - - state_result("r", c, t) - discard(c) - discard(t) - - -program = main.compile() -Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/modifier_examples/double_modifier.hugr b/test_files/modifier_examples/double_modifier.hugr deleted file mode 100644 index 936dbd9520a29bb79e9c3d930d76248923391f5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5421 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 X*=MPg@KYL<$oVl{N+`j?c|Fqx+XiP` diff --git a/test_files/modifier_examples/even_dagger.hugr b/test_files/modifier_examples/even_dagger.hugr deleted file mode 100644 index 0aaa49ce1be9749406fc9737745f507faf0f0463..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5931 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 N&6=WoJ$uh7{2{&VXA1xT diff --git a/test_files/modifier_examples/even_dagger.py b/test_files/modifier_examples/even_dagger.py deleted file mode 100644 index 7d6326542..000000000 --- a/test_files/modifier_examples/even_dagger.py +++ /dev/null @@ -1,40 +0,0 @@ -# /// script -# requires-python = ">=3.13" -# dependencies = [ -# "guppylang==1.0.0a4", -# ] -# /// -"""A stress test for nested control and dagger modifiers.""" - -from pathlib import Path -from sys import argv - -from guppylang import guppy -from guppylang.std.builtins import control, dagger -from guppylang.std.debug import state_result -from guppylang.std.quantum import angle, discard, qubit, rx, h - - -from guppylang.experimental import enable_experimental_features - -enable_experimental_features() - - -@guppy -def main() -> None: - c = qubit() - q = qubit() - h(c) - with dagger: - with control(c): - with dagger: - rx(q, angle(1 / 3)) - - state_result("r", c, q) - - discard(q) - discard(c) - - -program = main.compile() -Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/modifier_examples/gate_in_ctrl.hugr b/test_files/modifier_examples/gate_in_ctrl.hugr deleted file mode 100644 index 4ffff7cc166e5a772653ae3792fd279ac2039b96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4160 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 K0(Rj%&>aGeE!ETj diff --git a/test_files/modifier_examples/gate_in_ctrl.py b/test_files/modifier_examples/gate_in_ctrl.py deleted file mode 100644 index 97c5ef122..000000000 --- a/test_files/modifier_examples/gate_in_ctrl.py +++ /dev/null @@ -1,39 +0,0 @@ -# /// script -# requires-python = ">=3.13" -# dependencies = [ -# "guppylang==1.0.0a4", -# ] -# /// -"""A simple controlled gate using modifiers""" - -from pathlib import Path -from sys import argv -import sys - -from guppylang import guppy -from guppylang.std.builtins import control -from guppylang.std.debug import state_result -from guppylang.std.quantum import qubit, discard -from guppylang.std.quantum import h, x - -sys.path.append(str(Path(__file__).resolve().parents[1])) -from guppylang.experimental import enable_experimental_features - -enable_experimental_features() - - -@guppy -def main() -> None: - q1 = qubit() - q2 = qubit() - h(q1) - with control(q1): - x(q2) - - state_result("r", q1, q2) - discard(q1) - discard(q2) - - -program = main.compile() -Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/modifier_examples/higher_order_classical.hugr b/test_files/modifier_examples/higher_order_classical.hugr deleted file mode 100644 index 6bffb7720c0551c03108a5e6e57a3633d76e05bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6804 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 CTqCUj diff --git a/test_files/modifier_examples/higher_order_function_w_arrays.hugr b/test_files/modifier_examples/higher_order_function_w_arrays.hugr deleted file mode 100644 index 3b7a5e31fd6be3e173450b0245dbfd88feaaa592..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10615 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 diff --git a/test_files/modifier_examples/higher_order_recursive.hugr b/test_files/modifier_examples/higher_order_recursive.hugr deleted file mode 100644 index f512c3a5f0ca0a28495ea548e3a56dd330640d23..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5479 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 diff --git a/test_files/modifier_examples/modify_array.hugr b/test_files/modifier_examples/modify_array.hugr deleted file mode 100644 index 36e7971d2d0694256e33b71ae99858cddf8c2c92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8456 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 diff --git a/test_files/modifier_examples/multiple_dagger.hugr b/test_files/modifier_examples/multiple_dagger.hugr deleted file mode 100644 index 3a44f506568a5b5fcc55d5e77093b3ab6e02dfa2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5704 zcmV-O7Psk0RYy{3NJ@4BK`6B^{Qy|4u>jf%u{K^nkRfe4D6KP*UR&FW)&Lc0K*25! zguFwmTg&bZ*kzyA$M#-ulL%tbYKCCd&h8nb(-^h7JB@y$w?P0-?L%}hTs9YXDlBB- zy4SNx1WJR&bd#ub38i6Clcgms$sPkT17ibbdAefgQ~2I%kB*uzkueDi9}D80(Nz5`~rf1L1m#v6`23PV?)M?7eT3!!=0$Ma2j~{7lLz2 zak~|UIT#jU_%Qyh@-M_J$Ck;(rc!1(wo<7syOo(^MqxNR@7C9z3RVtBS8k^(*P|=< zqrYWDx^h2VxuCAx*snkIZsl5Cxh4Htr7IWf*C#E$a#6Z+HuP(feg*1Rou1#TD zZAI_!$~DoodtW=zwe$L!mKI+-nXVlQ{VWJwyBGazh!+3shpyeJpH=B+H}tb4J^C3? zKLgUwbo$wf2Kujres-dNE&X+5|2XKH*KSGI4%W4cb?u7!zoB<)XG7OcO4sfJUArm$ z>*yZ3b|C25S?SsV(bpnG?TYC8z`M2MLG6&}`|wxrZuQ=~RjeY(;|^uzRptwU53eo0 z4*YvT@>=Zh`T~bn?*@lg&*lc`HUGp{@!w9(D-IkpX!K{JKO9ueKk=W3qw7wSyq%o) z=TRF*&fX;f zrQ_9m*U#Hrc=bM=f8ORb$@9s1^}Md12UB6XdfcDKU0J3{o=j)=K2*-DC)4%wQ0VL) zh%&u;D16=tsM0^LMb{TyJsK7$7_S~pSI>s#^K8I>9!-DVO?IyamA!hW>fs1&dIq&y zy_>GysdUpHjjo=J&hC*=yChGhzZPA+7fWcOzpbn15g|)|OLXnF=)j2ne$cf$qO*4@ zK<$#cAo?SsYlo$?cN#$LZodoluS$Od(j0?#+SOirZj+*6Y@EHY(P;HA0wuF>fD{KE z;Tkk}h72BUT%VJ|<03>D)x#$MwBQs_U==dl%%KYgKnrG(0-*G+2a4nT=75kK*2yXyj9jRJ`z1c`Vox<+^yfUGz`vv5xRamY-tujzC@G0M1No6T>ASGdS>QL zG>da-(z*0^F0I=7>w0D;^Li%Rnv`w*Wm~Jj-3oMmM(UX_2FB!d$pZ^M$JYMgrX^s>95E-~4m8eK0IaDSr^)gXdI>Z{0m}i-eT6&^7+ll4k zU_*$^sF98*E631yvW85mGRr_#Li#e#7}a-w5VCtP1HY+RnqH(UmYPztG^xrgC0j_+ z5*@odV;sPY{#E{lz=sa(a2@WwnfC1Z^n7yHP`z3%5me)PKf=-RV? zHE=rtGLU3xo0ciiYD|$XR>{~RNezXeN(Pc=xnM&`B_q#qP@)=LrVH2+VsD-3P>SvJ z0`6vD%7VQ}pB!X5rYI8;>_X&f2ynBHW3cg=g8VEtqMW#$Ucf&CcVi=Inox91H91lA z6f(WcQ!7&y$zq+VE*Xh`VmrNnsY)Z!a%Gk&)>)&f%0ZMYhhoar$%B$aL?aIqN|r-q zwmMrNYk8TcDz*A}veHrrw#3Dn$Q6u5qOLBxs0OM|7RTD@F|}Z+`4P6nl#)u)F4@Ol z84mh5ihpBx%)c-k1&_o0`&Y+b`1hB8bNuBe{?+-3d;iw>jC&t--8t@G8DHU}Ya4$} z-%79l+FXTe|BBz;bTtCm_yyGdXRCp%FPf@+NG05T*!Ts^4)bpY#z-xNommhzegRQ( zg`O_HLQfQI`~t>KDoLdRlO5s!^&9^#U<}!d++)HXXJeHY?i|7F!U#d*gM((!1J8+YL4zoUmnSv2jrWBh!L(k{R{r(a(s; zHwqe&qb0qYoivK67{x{mumK$LAdarYjEWfDV8nyb5#K0@Z^Q%)=e@M(U7Ty-P#{&lfD_45g z<|Iyt-mN)_!@?E88PU5iPU3#hy8-y_U%`)4g4@!&D(u#ix=ls5bugVw@6w#qwV>(U znUlJk6RES&yDIGdq>hKw5&5Yd*}LMuu2s8O@4h&xV?az7rIXUT;7Q#SQpdvpuCP$V zjP8g4yn779*y3GImyG(yC-&E4wAf|-aT>f^IE;@eK&grs~4qr zyOTUAy~{m?HzkRuL+@%J$?KtaN9Q~%y_T{CfBG@P1SrBC$D@sjyk5HrFFfSg z4+_x&UV#c2b)Oy~S5CksAOX`b0ST}T5a1XNLl5S$gLUli3prd!0R=mt0n7jeFb*a# zel6hvT*pQWF&&#NRuVx)MJLvI3WZ~Mre+zYWmtNVE!fLEcZ{S@IEF)Kh!UA)YLX;M zvV_K%>r{n1r!(DgrZ%iGHOW?qk}fA?O^A|6Qj+LQ!`Im)4Ogq3)rg8=>7^>oQHaWf zrAj$7YT%@$Sq|Npry0J=aHtGP^PC|heL|DX%N)zqh=yhv{tyxlo#BgQxyqCUYlWmx zxMIQ1CN<$r>qLjbFjc|O^ktqqN>#~nIq3l<9Ab?~!l5%nNud_Z3}0ioB1u;)4NoVt z3}2y1GAW6|p)(}YF@1$3k~B=w(?$B^_?%*>5$cF$dD^j~$tmQ7gLA?`Pa49UQ%}lL zk*m~-M4}p1Vpzfnbwnqtk|i{j=vYJyb;L22icoS)r&G=;)DeA(#2qoz5rs%sY{;t& z!eYV9afTJSGGV8VP!;yHcvvTzn&+vA$SlzmC5AepD;1%bLURnyG+dGC2xE;*$dD8Y z%~2JmBa$>U&+_#mQI``kjJaB|S2%_wdZs8AkvXPRCF>Mw#a=)_KtMk~KR-r_6e(h) zNRc8zrJy5CPE-s_B5OoRlZ+vT4k=mZ(9k(#$dDmJfQVK^D-;k4g?jSjNh}u2apEK; zU!+e@kLqNxc6xYDBnm@Ls3Ve3%2#O;5knpEh2rty!v_!$5YW%hPmpLt3`?gYVJS!i z62lVC5hF%+h+(NnWx|G1DB0v>iD8L+vBsfLM~tDPSqh0^si-JO3`;>p;tmr=gpOjU zBd*Gv6l}@pqM_$Vs3VGDNsK`Zb;LBbI)%ir^lFXh=ps>AI+{e~OAJdzK}SLzSgUoa zRIjp?x=K{_B3EKq5})|&5TS%R;uD`8B1*bWF)S5933bG<1m(!?&lzZh4!B61F~-=; z7;kV)IHnVmn-^;|Q8G2lo0^bF47)DqnT{x#V@;9>2RGoL946T!QP^uFTc?~;4iQX< zT%As)oKub|M+|ksQjv&bl3~ITLmg2JOJWO_nqsK)LnK?HDMC5Y{FSMkN)8->XW&$F;3EUchBupm6VyL0gxY;?N796kghOp(9|1wR~#rO z)W7Jbp6~)jTv`f8z8h&7@D|%Lb3`lHQQ~W_Rg5%M%jQ1x$QN8g?Fu+}kn+Ho%pJ-e zZ+``$$qDTgVCKB2fnG4n-YkGaIK^|gX(P0i=7u|Ac?1qm_e7o8ut-9XlpJT>ZN!B+ z&D0s`;UVcLLnMr-0he%%S0uN3OS{>{$elJUyX*ojT)Kl<%$Yf$wIHL#vhRHbqE8~o zqFNS7%?8B$BkF0u1t%p2mbIw(Wy;6w+D(F$xdElkIr zU0}J>)AFZX|2JV~#gl^|TB~131`v>s`8AI|+UgqWKNnpByy*q<(+R3KGj0Gg}F30_2dwayNovn8kEHO@c#>*Pk&=uUFf`h8%rk-?J|tpB1aySsQslr{ zj45Ibanf3J{To1zTRLr&B6ub#E(r?oJ9kdLOC%4rU{WCUn^;j4h^E&wgrI^mAM6vd z*#|)9M}U^qCL4y{#_K{}Y(p+enydzA=VH<$KEvc18f0830>V00^jMbQQUVEEEU@Fn z4`CM8qGJD=ub5#W#G9U3i@Y`N)bC^8!qde#v0IXMjzW)j#~itbwp9p^j_Npi`C1Z3 zx$Qn}2Cs zdhQc27T-9PV>$RWVdK#$su+7XT@J6Ya^qyhdoVxn^-l`-92z*PBq@7#^_|b09Mzl9 zAB?w=BO7>igEzz>b^vXuR}sLyHj6m1GB`jz8FDNq3p0yxuI=cme7Xjb&+TE+0Wokj zFc8)opk=bxyJ7o_r`sd}$nQmcUj5a2i6s*?oVv6V5O`h*f_}uiyeLZ zmvF*jJCZdK;+Nn?OcH=~P1IAn(MrdTK-IBcIug1UJ<+G$9(JAxn4_?Lh}@PlsmG+; zp4e|9%iXKJ03%tr-sUGeyrqMQhPVVyWCc{!Cr?E#reQ*XDB6|{t;`-@F}|0vk`qLu zkh@E*JO1E?GLcJ=08aCUM>C_;!YN(YT8RYPqpX9#1drV%T0XfVx%R+HM zIqaA_fNEOWqByDDqP@<>9Nn?G!xshZFmT0>TPsp5Q(y{1*@nY!K2$6M7Fm2HK{(LH zeHrS#z*hkvOJ3Tc-hO|EAjHM9tunjf;vje5hT6P*Y=3z-oLsK z(IYfGcgP`a7`^(a(f2pgjPF>h@IR+E15+VLR>^6`XoJ%F$`QB-rbnqKkgD{rMp`QU z;rcK#dF;}jD$+i?hzUI?fSLu|zz3Fljg|EQ8Q9JRfG_Z3ib4XKl&QqqQZ`((Am^yp zT8PhLgh1^0LL1x#7GS;JCFYhT!>h#cqgmP{irwz)@gw1!9RHFJk^aR1Kr8~%2QUC# zNnhA*@A`dCXxT2HyApmQ8(aMCOf)LB{KUEdREKx6=9LU2+>&`<;6yfjIX5{5O(LDd z`P_7zLZ%fsf1sl1YlOm9IXg)iS}o2kmbUiSl0UpXmW<;)N?YJ(yXrz*)VjUHe-7rr zjLfX+5y2dYl5ORS6w`FMy?_n3~>@7as;tj)2a36 z*P`Cu5*>T#yGo8nX_h?woY;zR?6dU)JA&eBB!P6g%8)#>BXm%h)(z8oBdWdY1_~)y z%E5Vopw+A+`Cj9qv86Nc^#CB3tQ?v{=s`$S!V*^%7E+PH)y_x`uRF0Rn?2C@yM~Y- zR}mZm@Vs<|ov^VTK?ZbCRWbaOSI}v1Z;?H+zCs4jVNU*tEwds-eLoVS`vi` z6mp*qj#)gdN$}$r6ZvJaox@3>oDuO*wHYz|5#t)YQn@H;)hT-QvdH-JS(t=jT?X24 uW5u#5Yow%)Wg8vGW3YyQ6XQb7+K;*-_;lIr10-Fv?F6X)K&r|-C}{)maLIiD diff --git a/test_files/modifier_examples/multiple_dagger.py b/test_files/modifier_examples/multiple_dagger.py deleted file mode 100644 index bc2e2b4b3..000000000 --- a/test_files/modifier_examples/multiple_dagger.py +++ /dev/null @@ -1,47 +0,0 @@ -# /// script -# requires-python = ">=3.13" -# dependencies = [ -# "guppylang==1.0.0a4", -# ] -# /// -"""An example with an even number of daggers, which should cancel out""" - -from pathlib import Path -from sys import argv -import sys - -from guppylang import guppy -from guppylang.std.builtins import dagger -from guppylang.std.debug import state_result -from guppylang.std.quantum import discard, qubit, angle -from guppylang.std.quantum import rx - -sys.path.append(str(Path(__file__).resolve().parents[1])) - -from guppylang.experimental import enable_experimental_features - -enable_experimental_features() - - -@guppy(unitary=True) -def rotation(q: qubit) -> None: - rx(q, angle(1 / 4)) - - -@guppy -def main() -> None: - t = qubit() - - with dagger: - with dagger: - rotation(t) - - with dagger, dagger, dagger: - rotation(t) - - state_result("r", t) - discard(t) - - -program = main.compile() -Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/modifier_examples/multiple_functions_in_ctrl_dagger.hugr b/test_files/modifier_examples/multiple_functions_in_ctrl_dagger.hugr deleted file mode 100644 index 757e577c05ad83f6a56f15e9d3604c8712241b54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6883 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 float: - return 1 / 3 - - -@guppy(unitary=True) -def foo1(q: qubit) -> None: - rx(q, angle(1 / 2)) - - -@guppy(unitary=True) -def foo2(q: qubit, f: float) -> None: - s(q) - rx(q, angle(f)) - - -@guppy -def main() -> None: - t = qubit() - c = qubit() - h(c) - - with dagger: - with control(c): - foo1(t) - f = get_f() - foo2(t, f) - - state_result("r", c, t) - discard(t) - discard(c) - - -program = main.compile() -Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/modifier_examples/multiple_functions_in_dagger.hugr b/test_files/modifier_examples/multiple_functions_in_dagger.hugr deleted file mode 100644 index cb807a9a02f39e2a1c2bd1e393a7e15f4a493eb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6206 zcmV-E7{TXARYy{3NJ@4BK`6B^{Qy{9!2tR*Jw9Pjj$Lg!5S%pxxT|}@At3Dv&Kke< z&_e>eIp?Py`snbLpL(d}nAvx{4ynbEKq@fyvC+vxWM8-$vZeLnKX~*}CaMp(dOp_} z?69o);-|>f;4#ZA%rcf-`>BZtNxRbyZv&?T?*pt+>33H89TNSnO25;LXx5JCcTk$O zAM`sV+7itg6a5Zt-rnzeSem!n?{NAZO}}$#DCZ5Pd6UuaY@f5z=c;rL=gp>hyXkXN z`ka(LS3}=$-h7(3pFXFg&!K&;r=OfRSD(Y_b2NQU>~pqbaNd^mH!J-OiT+llze#D> zdBdT3>p=6SL-V#nf7^O!-hAk9Ld_cx{S8Nm=52`nM$^0%(cfG;Ja0)fZ$Id7wy#;~ zYgHP?d26DtP3db=`WlqJrlft&9E!e%_BElt*3;K$8pfHEY35LUO>E|F^flYzpIK?< za{3t({j5qqlhQVvxu9ll>}OD#xw4-rfi-ineug%4N%~n&GdXii`Wa3?qv>a2KeHX> zXC(S;rO#EGIUf2frCn$4hh`3lW{yfT7et>?BAU4(nmHqyxg+{)0;fbXCxm8hiDr(8 zKB-F9+;z=o`)*mF6yp{;TvqrGF^>Dd)kKoIL+Ss7n{j{mu62z-^yij_F(!* z+*i4uau4PD{7UX?xJU2j>FD=d7-x^?_I|BYc=lk;UaUVa)*L%(lXukiUYdga^O7`& zpSJ|YKQGB=?=>LhI*0$9z&JN);`7g&p+B$5=P`kC_L#H`P1@e0K&n>uaA@{A(DvQ~ zQnj+@q}h9-fF;e|49y;sX0M4+tl2wi_L4MvOKRQu=~`c;YFz=-wX#=Z1Q%bJ3eTR5 zW>2P3ZSTcMh5tO6t`U>carSC7dpG*?ZZvx~;Xm(Y0I8d^4jliyo6pnH_Fe%}HfK*q z^XKIpAa&!c^VRt0<><7@(`kDzh1AU1(`o)Zp0@XTq+-q<&$p8@;h*Qz{L}0O`AET> zy`W}q4Enqg{O1Mr=aKea3@Ll|U_i!(Ayq4TWV2VY$o^c--Vhda`txb_erVL_&!*YC zS;3+|m}XB#+k2d<)#PRUu{3)(2uk#~M03YP+jl%j)oSX9=+B7e?ufSUSdgkU`#F%h z$)#UHqB{Z|s#emO=O~;mA-nbf+6g4Si*2$w%~q#X5QS|}yTDps*s)o#JZ-W({aK!7 z1@#w0zxZs>Pp4pY+Qb5DWuM<$82ZI$e;Ni@YXPiJx2#Qn)~4CsbO_eUANYH_(=V(} ze^#g2@-$nYw%{$0USWOuFxbyvn>E|6?Xv^n;S!Ge4-zR^L#Gy(@*k}ArAlAsS-wz` zh#m6g+6=N8pfGJaZc5oT<#59j8(f%l?LkutM?JE!3tC9_#7R3?z*?rQ zAp7h~B&d}HRwF&!Rg&U3(WfVBK^7@wMHb;$nK0GML}BSrYb-L)G95|jiPmJOmeB_D z;j@#z%(G?nT1SxGQmv_3nq>{L9k<_Mxw-w0_V4%OYs%p(-B9wLcsAUAr-pyO-M?RM zyQbgQCb!?=DscOqO#-*y=}49Y+V5};`1kv257Iy(9nThyq0@^rilwJ?JX=GjRcTYw zRg{+Kc*TNu2s^d5URz`Ky{^6U?koDzdC$C%1e_cCMqWGV_OB!`dyfUl7OAFX3d9;! zWQ!_fbde+p-Jt;sl5ZKoe2_v$o!1~_H5!>MU{+#xo#>EDhAM%zS}<+FUStmrG9A;@ zi3oNflGOsR+V4)u?wNx3Ha4Q0n4wDGZ^2q)BWa#cbW{~NQS=l#z08wTrYo}5I#*Y$ z>E6pwB`{r)NVH^`rK&;8| z{)*$?yT96;0PoKIwdUNnzt;G6?XRfITstYduQAU|IRCYTyEy5u;cKlaYg8e-C6M&r zRub5HMblLeDP%j8?3O@#mcLpsMv_w4X?u{}5{Qy4^lWh!dP>P|35=Z-qDo;#W_e1@ zvPgxJmW7^GQnNgbV(3$oJdvo9?3Tb<&GVH2)tHiZozl_Bb*`?|DuL{lKy&CsqUVYM zwc=#A1oo#e4I38#{{zj8l;tfTVgtsz2Y3ceYr7F51Gox3?!PmGQf;*|%iUP6$Z`+! zXMF!1vm9Ng7FDG(%h9D$U8$At-R?zMuKlf*&pZsW#-dqs(X7EVYcl#J4b*7XZZvB) z&Du@BgwwUMrqitP^h-3&+E2gaLN;qf z{KQ{Q!fSn*VdIK3*M^Nd!e?$=^fqQ(6lT0!nxC&YbH$naa=PMSe(s9!mzNtO#(jAV z5a#C#1LnTG+!s*%`MNv+Ad8>xiJM5cB#dxJ5aEj8a!q#uFZdHDZms9b-Q%uzPP^Jk z_Rc(pj%jJa7*Oj$6XReLz)6nq5@yl@l50k-Bya>I7YPPLikU!4(lewW%|LR}wG!P# z!hxhi*E)0)DM}AM0C5+R4>L$Wkb)oyK_a3ECMD6ezVMHv1W5=ViHUQ^_p%BXJ-7xB z=kVa5k4bhhOa;%NgK-#vc{sv7@DC~YhakGv6>j1om2nRk_lnTj({OsqO}gySWsvzG#D9_P1l+|g=VAa$noh~`6ew$BTHDy5L9L)U6=(sW3n>7Yf?dU(--2!Lh;37QbVEkm)XXxU^o)OKUL*>b)u zh-Dj6I)mS~q-#AL2wReEhONnp%}LiP^H&B<+YUTzKXk1z|28UJ>j^h)LJ-llnsC!* z#Fj+YD&wY2iEmqCYocq7aThM*Sgwk$wS=2E7hNlin>ZOVHM&-qn>d@U^~GyFPYRBQ z`{Bl}_2nk69MZLlH*v8e6St&mb#dmJbgjRMdt%}`paXL}bgkh(&IjhGbgeCJ;)H17 zhTw|mTJKHV5hm^j0^piB;l_a3Zge`@*tNF2r6a%2)wQ0use^spQP=t%G<8k7*3!YR z)1hniUaLKW-2KqCb~klYx>oKkoe(%35nU?@G<8OFt=qRQiLTXxx1^m^``{>&byq^8 z2&Ef?3IR6=h8qOva@*Ci`*S|&Dp)R%+aLUKA0Md}?)IQS$~{2|F3-+&p@qw&t8@GR z#CAup!wrEBmxb3F0SMd&D7iYGLXL}ba}R*y8o;Ii061|Ouz;(8BbNZwiTjmqw_TRkx`XRLh}+{i-#wwbJa*g{Cft+ERiT6nb8ijNz45}0*={Mk zEn-}cyE0(h6XJET!fhG4FWSxclI(rfFHH751F%;9EK5`Qy#<>;i=s^yMcd$_X_%~v z1_G>=KMT___`QwM{8^bcS(%32=oPj`n{18#Y>m&}q|p4?oQ9#(FKkXhM@OjEc?yMN zc&266lJPRfk~N~CS%x_~;m{er$d*x=wqUN16be}_*jXe-DC0WOp)gEWFf@IcXO41J zwv3GEKoSnM#-ecO3{g_Z1vA6f7_vyxD3*pOlv#$a&?JeJMB&gGlIfVfLb50gQ}i?< zduV!4JWvR0M6;a9k)z1DgPNH^&7h|XAq|QrZLLU_ibWQ!#+4Yx%!DL7)wPYG$#~_1{KzbJxAh=7}khFq*2Vrt7M_of|+9rERtoyPMmNR^0;(bCz_fk z>WIiJ(KIE7HKI`}A~}WT7@ld!BGVDp8i|l0DHNLHDon?sG&Ilh^&(LtBV-sea>ZWZ z7?S9jrdmYis9Ke+Q^*y20RaI4{rvp=0QvFb2aq2>egwq?1u1f(Vi+T~MwB#39x>EM z**b@YP9Hve`0xQl#3Ev)fKsW{kt0W9u^5dJBPsbJdw6(OXRCF?qk|&R9W-H$NFFI) zrRgJvHR3C!)1yZZARr*1pP!!~5r`PZpn`-kK_ZYC#>@l(0wjkR#vH9o*pLb(i<~Vn zj3HmGaVV@2W9Vp>LSh(mbQC0pF+oRS4iiR%j$&9NvPv2iY{+Qj0#A^zMij#sk%t)8 zh-r*<3W;IN%Qd2-5sAXm(IhHgViavut^pWNL&|u};2VH?YAKRir9jAzh={QWV4` zI?>PFq6u8^DWKsxk-??m=L^JDR}m>$Bn(YeDi_Q=vC`Lxh-8kfn2`~T=!%fhO~K$A z{d`~W89tomJcmv#OmG#*a6Ry*03_nU1eb@KAj*w$CnqilE&>o-5gY^`xF0x_52;d; z=!D~i19t;B6x|JE;1)dtMHd4O=lwbcrth+zq-yRM3gN%%ji0ICHIg{cEInbI}1?oh)isHvf#sA zEd7ny!};ruiqRaL=s+4@}28v2U|Hhi4tcvqq{L?!TOj9ke$D=k{chP?3QO4#NJm&p;^{7m(28$B?r2?up?& z5P1_u(J(7U#xjY8Bpb>vfa!2#p?47R26q*SexCljqBn(?B-lb8eSEIpG(St5QfQ5@gUc$ zhzZ?Ta9!KkCC()5Qn=$2IfOl|6_)+WDKT>)#4mI*75OdPLAT@H!l;TkW#5_lxQ962 zjXn5_+qSNyj#_E-4Q5Fib=ysv45ASheIE2>fmM0_kT+Q&C|=m}P7#C5%$;zMYa3#h zsO^i5*G3U9?Ul7Emi6YjtQ?6BqfbWRN^szpFQnlSva94d1`=iKHyeC&4}YkU#Ax^x z_TmP63R(NOx+IV^b1N+w>VZ69u(ok>$K^uqufz|esv7olx;PMH<-);=M|$uaaQj}JqRyDM>g!`4b&V5+5u>*rlNr9jakYaE8`1l$RNjZ*sHS? z=d}T?%B9mlzJxc1Qt7}VB z;?(2oA-pQ<3hYfY0_Bbz{RJGb*c{0khWJHr^HUYRuJ-lPK3XrexzO#b{{X?_mYsLD zFiZ`I0UmF8-%vn&sAhslZ<(lr*;;!3M}?H4@b@S_nOKtl`M0Iw1*ry|5TScVMmX5c6F&5u;7%#-jXPL50goOs*d8OKEaVLYwJHKQxQWDb(2{n=iZsVr zI!9jCWSDy;i27#9UyNMS?+K!0u1-XTOtD~0v6CJlOpxh zMniR#l3^E{u-D70Y1r2Z0Po9fgW}tjq3ntlMic&nVh+qOmZ||}Z5TFvm1vnJGl~e# z7RP6XoF*B~oW@rKd&8~JeXx425zeKtXEK|Jky_bDZ@$^q@&Z*)#KuHGK|p)M4*K_j zZ49xGmzSSg8~@)fh+T7Q3t`y0;u0H$DYXmYmi7sRe<+4I|HIfRc;1v`-C7933R+Xt z<~d#1oS1V*_{~8}nzQ|`TRSOr8=2ci&XZ!1K+^9gG8ZXl;kL1{BFDzchfF)0bWL-d zloh`V5suQ!Mk%Xbah@sE7@DpHNXErkAE(YXE+Y{@{$=|#2-r1;E?x^>b=w5u*rbZ( zjQg^VyNN+~?ZtrPNFSl^fe=422%=cQ+5}YOrDJOhrwbKjLmT0>i|=O@V1@Jglr^z{ z!XFD`9OMAU9OxoBM{fIn9DSg}}`IRHTzHi7YH<;zh{&BG%lRJWFMDedk(w_Q# c_R(u}rWy3I9$_`DP3}9?cT^z)g) float: - return 1 / 3 - - -@guppy(unitary=True) -def foo1(q: qubit) -> None: - rx(q, angle(1 / 2)) - - -@guppy(unitary=True) -def foo2(q: qubit) -> None: - s(q) - - -@guppy(unitary=True) -def foo3(q: qubit, f: float) -> None: - rx(q, angle(f)) - - -@guppy -def main() -> None: - t = qubit() - - with dagger: - foo1(t) - f = get_f() - foo2(t) - foo3(t, f) - - state_result("r", t) - discard(t) - - -program = main.compile() -Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/modifier_examples/multiple_gates1_in_ctrl.hugr b/test_files/modifier_examples/multiple_gates1_in_ctrl.hugr deleted file mode 100644 index 5bc5afed7a84f6f6d6a3d061678c8c73decffd7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5067 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 diff --git a/test_files/modifier_examples/multiple_gates1_in_ctrl.py b/test_files/modifier_examples/multiple_gates1_in_ctrl.py deleted file mode 100644 index 12d96d9f7..000000000 --- a/test_files/modifier_examples/multiple_gates1_in_ctrl.py +++ /dev/null @@ -1,43 +0,0 @@ -# /// script -# requires-python = ">=3.13" -# dependencies = [ -# "guppylang==1.0.0a4", -# ] -# /// -"""Testing a control modifier on multiple gates""" - -from pathlib import Path -from sys import argv -import sys - -from guppylang import guppy -from guppylang.std.builtins import control -from guppylang.std.debug import state_result -from guppylang.std.quantum import discard, qubit -from guppylang.std.quantum import rz, h, angle - -sys.path.append(str(Path(__file__).resolve().parents[1])) - -from guppylang.experimental import enable_experimental_features - -enable_experimental_features() - - -@guppy -def main() -> None: - c = qubit() - t = qubit() - h(c) - - with control(c): - h(t) - rz(t, angle(1 / 3)) - h(t) - - state_result("r", c, t) - discard(t) - discard(c) - - -program = main.compile() -Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/modifier_examples/multiple_gates1_in_dagger.hugr b/test_files/modifier_examples/multiple_gates1_in_dagger.hugr deleted file mode 100644 index 64caf160ceb740b0857df19506f37bbd90f40df6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3977 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 diff --git a/test_files/modifier_examples/multiple_gates1_in_dagger.py b/test_files/modifier_examples/multiple_gates1_in_dagger.py deleted file mode 100644 index 633965e7f..000000000 --- a/test_files/modifier_examples/multiple_gates1_in_dagger.py +++ /dev/null @@ -1,40 +0,0 @@ -# /// script -# requires-python = ">=3.13" -# dependencies = [ -# "guppylang==1.0.0a4", -# ] -# /// -"""Testing a dagger modifier on multiple gates""" - -from pathlib import Path -from sys import argv -import sys - -from guppylang import guppy -from guppylang.std.builtins import dagger -from guppylang.std.debug import state_result -from guppylang.std.quantum import discard, qubit -from guppylang.std.quantum import sdg, h - -sys.path.append(str(Path(__file__).resolve().parents[1])) - -from guppylang.experimental import enable_experimental_features - -enable_experimental_features() - - -@guppy -def main() -> None: - t = qubit() - - with dagger: - h(t) - sdg(t) - h(t) - - state_result("r", t) - discard(t) - - -program = main.compile() -Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/modifier_examples/multiple_gates2_in_ctrl.hugr b/test_files/modifier_examples/multiple_gates2_in_ctrl.hugr deleted file mode 100644 index dd7c2ae22558a66575d869a15cb722dae65725ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5429 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 diff --git a/test_files/modifier_examples/multiple_gates2_in_ctrl.py b/test_files/modifier_examples/multiple_gates2_in_ctrl.py deleted file mode 100644 index 7185b0959..000000000 --- a/test_files/modifier_examples/multiple_gates2_in_ctrl.py +++ /dev/null @@ -1,48 +0,0 @@ -# /// script -# requires-python = ">=3.13" -# dependencies = [ -# "guppylang==1.0.0a4", -# ] -# /// -"""Testing a control modifier on multiple gates""" - -from pathlib import Path -from sys import argv -import sys - -from guppylang import guppy -from guppylang.std.builtins import control -from guppylang.std.debug import state_result -from guppylang.std.quantum import discard, qubit -from guppylang.std.quantum import rz, h, angle - -sys.path.append(str(Path(__file__).resolve().parents[1])) - -from guppylang.experimental import enable_experimental_features - -enable_experimental_features() - - -@guppy(unitary=True) -def bar(q: qubit) -> None: - h(q) - rz(q, angle(1 / 3)) - h(q) - - -@guppy -def main() -> None: - t = qubit() - c = qubit() - h(c) - - with control(c): - bar(t) - - state_result("r", c, t) - discard(t) - discard(c) - - -program = main.compile() -Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/modifier_examples/multiple_gates2_in_dagger.hugr b/test_files/modifier_examples/multiple_gates2_in_dagger.hugr deleted file mode 100644 index 2602bb72c5b48e599f4bf2f5b097b81d473b9b30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4201 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 diff --git a/test_files/modifier_examples/multiple_gates2_in_dagger.py b/test_files/modifier_examples/multiple_gates2_in_dagger.py deleted file mode 100644 index b546fe45f..000000000 --- a/test_files/modifier_examples/multiple_gates2_in_dagger.py +++ /dev/null @@ -1,45 +0,0 @@ -# /// script -# requires-python = ">=3.13" -# dependencies = [ -# "guppylang==1.0.0a4", -# ] -# /// -"""Testing a dagger modifier on multiple gates""" - -from pathlib import Path -from sys import argv -import sys - -from guppylang import guppy -from guppylang.std.builtins import dagger -from guppylang.std.debug import state_result -from guppylang.std.quantum import discard, qubit -from guppylang.std.quantum import s, h - -sys.path.append(str(Path(__file__).resolve().parents[1])) - -from guppylang.experimental import enable_experimental_features - -enable_experimental_features() - - -@guppy(unitary=True) -def bar(q: qubit) -> None: - h(q) - s(q) - h(q) - - -@guppy -def main() -> None: - t = qubit() - - with dagger: - bar(t) - - state_result("r", t) - discard(t) - - -program = main.compile() -Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/modifier_examples/multiple_gates3_in_dagger.hugr b/test_files/modifier_examples/multiple_gates3_in_dagger.hugr deleted file mode 100644 index a3869d05af02a4b38a82e59f9a8e028d4eb9d2a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5224 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 diff --git a/test_files/modifier_examples/multiple_gates3_in_dagger.py b/test_files/modifier_examples/multiple_gates3_in_dagger.py deleted file mode 100644 index 41e5703dc..000000000 --- a/test_files/modifier_examples/multiple_gates3_in_dagger.py +++ /dev/null @@ -1,46 +0,0 @@ -# /// script -# requires-python = ">=3.13" -# dependencies = [ -# "guppylang==1.0.0a4", -# ] -# /// -"""Testing a dagger modifier on multiple gates""" - -from pathlib import Path -from sys import argv -import sys - -from guppylang import guppy -from guppylang.std.builtins import dagger -from guppylang.std.debug import state_result -from guppylang.std.quantum import discard, qubit -from guppylang.std.quantum import s, rx -from guppylang.std.angles import angle - -sys.path.append(str(Path(__file__).resolve().parents[1])) - -from guppylang.experimental import enable_experimental_features - -enable_experimental_features() - - -@guppy(unitary=True) -def bar(q: qubit) -> None: - rx(q, angle(1 / 2)) - s(q) - rx(q, angle(1 / 3)) - - -@guppy -def main() -> None: - t = qubit() - - with dagger: - bar(t) - - state_result("r", t) - discard(t) - - -program = main.compile() -Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/modifier_examples/nested_ctrl_dagger1.hugr b/test_files/modifier_examples/nested_ctrl_dagger1.hugr deleted file mode 100644 index a01633f4b48e801d1937456f1211cb0ed3def6ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7181 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 PUvWwi`W^c%vz}9QkVoX9 diff --git a/test_files/modifier_examples/nested_ctrl_dagger1.py b/test_files/modifier_examples/nested_ctrl_dagger1.py deleted file mode 100644 index c85a65a25..000000000 --- a/test_files/modifier_examples/nested_ctrl_dagger1.py +++ /dev/null @@ -1,64 +0,0 @@ -# /// script -# requires-python = ">=3.13" -# dependencies = [ -# "guppylang==1.0.0a4", -# ] -# /// -"""Nested control and dagger modifiers in various combinations""" - -from pathlib import Path -from sys import argv -import sys - -from guppylang import guppy -from guppylang.std.builtins import control, dagger -from guppylang.std.debug import state_result -from guppylang.std.quantum import discard, qubit, angle -from guppylang.std.quantum import h, rx, x - -sys.path.append(str(Path(__file__).resolve().parents[1])) - -from guppylang.experimental import enable_experimental_features - -enable_experimental_features() - - -@guppy(unitary=True) -def rotation(q: qubit) -> None: - rx(q, angle(-1 / 3)) - - -@guppy(unitary=True) -def flip(q: qubit) -> None: - x(q) - - -@guppy -def main() -> None: - c1 = qubit() - c2 = qubit() - t1 = qubit() - t2 = qubit() - - h(c1) - h(c2) - - with control(c1): - with dagger: - rotation(t2) - - with dagger: - with control(c2): - rotation(t1) - - state_result("r", c1, c2, t1, t2) - discard(c1) - discard(c2) - discard(t1) - discard(t2) - - -program = main.compile() -Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) - -# NICOLA: DELETE THIS diff --git a/test_files/modifier_examples/nested_multiple_ctrl1.hugr b/test_files/modifier_examples/nested_multiple_ctrl1.hugr deleted file mode 100644 index d8fceb5fd243c496f02caa889a6bb80e366a8ade..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6595 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 B(BA+6 diff --git a/test_files/modifier_examples/nested_multiple_ctrl1.py b/test_files/modifier_examples/nested_multiple_ctrl1.py deleted file mode 100644 index 013f5b13e..000000000 --- a/test_files/modifier_examples/nested_multiple_ctrl1.py +++ /dev/null @@ -1,50 +0,0 @@ -# /// script -# requires-python = ">=3.13" -# dependencies = [ -# "guppylang==1.0.0a4", -# ] -# /// -"""Nested modifiers with multiple control qubits""" - -from pathlib import Path -from sys import argv -import sys - -from guppylang import guppy -from guppylang.std.builtins import control, dagger -from guppylang.std.debug import state_result -from guppylang.std.quantum import discard, qubit, angle -from guppylang.std.quantum import h, rz - -sys.path.append(str(Path(__file__).resolve().parents[1])) - - -from guppylang.experimental import enable_experimental_features - -enable_experimental_features() - - -@guppy -def main() -> None: - t = qubit() - c1 = qubit() - c2 = qubit() - c3 = qubit() - h(c1) - h(c2) - h(c3) - h(t) - with control(c1, c2): - with control(c3): - with dagger: - rz(t, angle(1 / 2)) - - state_result("r", c1, c2, c3, t) - discard(c1) - discard(c2) - discard(c3) - discard(t) - - -program = main.compile() -Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/modifier_examples/subscript_in_dagger_ctrl.hugr b/test_files/modifier_examples/subscript_in_dagger_ctrl.hugr deleted file mode 100644 index 78ad473a41c285e534a27c64aefd667b0a2b79ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15905 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 D)~KB4 diff --git a/test_files/modifier_examples/swap_in_dagger.hugr b/test_files/modifier_examples/swap_in_dagger.hugr deleted file mode 100644 index 0e9c5e746af37fb7fa802d3a616afb801a1c45f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6026 zcmV;57j@`JRYy{3NJ@4BK`6B^{Qy|Ky8s#|wL4%ykRfe4C|A)MQ1G*o7tNSYn_?Og zTi23boKF$I?9y3?))_cmn~A#x?Jt|xG5^!nr!i`EcN+ahZ^M-I-2%|rLd+wXMLg|e z72P-tnPU^iVbR~A3<;%0r6x;jTiO9^1BU~r0~JkKK_n9H8rT>H)E@I!4V;mrRCa1O z*cb*x$rgIPcndv$*cb+!okX%qWiYcmrDkblg_2qeJ!_Dfxr^pIN)Mq3W2Etk`l zL-n^**J?SQwp>qtlhKy*>2EJ>-f}_Oazy%;iMHI>w>W6?w?Opm5Pi!--#+PECLP2r zXG2@=hQ2-0w?Tco(>>gBP}*`)`c~}QnLY^!RoZe^`lKE7Nj2z`e&`*y91(4~BKjl^ zwB>HlC)IF7TMmgn32n`C9YeIc3HPp5n`c&+9?^GJS!vK|jkk$*#OJsVxCcF#sttF5(GTdS?r+CT@L168fIJECoeMB8pl zf8CbW-tj=yy6v{K?UZOGT6@<6713>{L|Yr5a_jMgUQd5sPtiY*r$3K}b`OV2 zyY+mm7bJzA27szo>+xvo`Rw4)-;cH)P;2*0s#-%Yr#~BQJr!EJ2dZk_egvrg)u3O( zp=VI=P_>e7fj(oVOW0V$v5_SEn!G~=cmfh&7yj2e`;r+rMOnvl^e~PUH~>5hfE#@O z;;FkBfnEHB+c1GeV8Jv`@e~L8VHjTEQx1n`LBlFga5LBZzTgpDa0?Nb1r4uI!6{I1 z*gV6$Sw0cN9}NGs!f?YM40{}RueFHF00vy++zd{^vJDMx0S5aZfmPtaF=SXr2KLdo z1Tqc_y!Budb}(s&Q6;b^vPlNN-0-8c{VrunhcxVWD^24{hu^PU=>j}ThmX?VqqGOW zS}m0G-$UDcr_waQT1}_YFMNm6O{VnseM*&XaUVLo5B=STF0Zuxj-_P)Yqfcn4xgpJ zXK8yOItEy)2^XRl@F^XBO50QE3)X6H1w8*IXq#8*?^W8~O50y)4g7=X7QfO5z?0Ol zm$m(@wQt7(MBv$0|5e(k)>Dhw)bhJO+&0{Pl+0oP@t7;5M9u zi+@GH#n=3mhS&VXUz>b{v^B2C7Zu6)I*}+!-UX8ZA(4zf{xJkL_OU`8Wl5N93i}t29TL`7?H8mB!5TEC^^IdZH+) zbxh>pkfZo(kpCK(k|ZMyW{SS9J&hJpcWC4sEd#kqQb zPA^$%ev~EoIAxJYv}~E>%5~SsdV-Q=kxbb-f1sq1(YWJ;l4Vh;wa(WmC6T0EG?0_n zcs8P(xS?RcUju8Mjih-((Q&2ZMA4Jz6f;j!nX*Wi>tuD&LjKE!f&tT*dCIU}D-Q>2 zP0jKYBVn`j#45Fvd>KhgbnK#mJVeYqS*zB^(>3!~qT8!zejUJ7Y?fPipa1#-&M<=~ z_;trY9GCg)3Qv9es|r8iCk_+CuQnc2?qjz$|1~|IG1^6wys9_g1?7G1+C9EXIvd5BelAkBv_$~AN#9d&~Z@JbRH`wR~ zyLi#x@rk!i@QvU2J2rjB39#Z8zvYg>+sME@e#luec8$JmWq7j#+reJ)iM+d~Z014fp((18|uK4_3A;U8~Q-jR+&URv!;HE!z=YYmbN9mW|8SMAyo~ zXG&WshH1K19uG@3UF(jAC7e=D$wpY>2}?XmKT1K$Qb|-gB1<`pB`KvTV2cu!u2qGH zr7AKdD_FYL6dsm@=#mj#D+&)wT1r|2M!7cg_FWb z0ab8PI4WJM=^mPPQVMmrpy4Dz{(UGsN6~=4boZJw0ImmQ6KucE_ZJ0iMP@Sn_8bVh`omasd*r(0sjE%f zmvRnhfHQCbE^;9vJVXF2BnSghaS#yy#K188;L^tSFPwDkC$tDdM@O#nB)a20Q?tBj zc}+3$C5xG-j*$$y<1IQbYGjtFNybPNMxvL5&1SHZb$d`}s^d&?Tw`jIuM#C;OURpx zl15U}=uB_yRFd9StEV-h;x)xsr8)kzNF*%M2+NeMOgI6RmS$O$W1i-XmA9z8qB8qsT(*XQRJoi|3hU}fr(y)H>~TQ1qDW%*J$JxofjpEUNZB>#@ix$bcD=Y=6Nq^mPJM5y=Qt!7tzQn zT`*YBJ&|ashsXvfGb(NuN1=6KKa zw#ampxyBjDOA=jkWZiT$l3w#HV=)qiEg|m=_L{}+cuDk3RW2iQT(L^mN%We1Ui80j=A3l5t2?+@i zAwpzG93oy5s>n4Bi9+Hv=@c0jH^41uIcjjBJV5BsRIJAFdNk%~OYnlCV>}rlTe|C0>)Lb3!#KQtQte zNP`*hk!ZpwgJZ&&qjSovgZ_?1aFdCx1hEN%_~=N)X}uuttTmFTYrN=rVlT0TYOj+@mA3G38cIgF&G09LCm4$ye# zCr%E7&Zy$@8bk=0nGq2Y5owa715yeQ282l#Cn_@!5&!{-oW&rFB1REo3^4=|B9IXg z5fPCoNs=~pHHT&hJu=zSGsu+AEA|QFBgbCm!Bm05u-M8g6bjtRckB&1u?6E09Z{ zdoDc-4fc+WSH@wmTnnkD#k5uI9J3V#JKlp+Hsa}8h;`gPZZRp1v1w*k_*F#}!Lrqw_zscC3dW zqCy^9)Hp2Xc{4X2f_}l-7jms}ZRPjEil@e$?(07a_Z=HKR*5jJ`?^zNp2>8Qq8<#_ z%CQYca03E$_ED}a9b^&YxP+-Vp(`V;u#j*Hs3zfIM$R-y)JAOwM z&21WapkaZ(%4}2nqwbqN>UXUz5FrpmD4{bFg*%^w1WE)?$yli81y+VIDwE^-PSTvtE4+$@YlP=yWf@FcXp0>!`WG888ey}|I z08ndfN_FNJqD4n$OMBhH@Vbe_ttUo{!N`7y=2e)vl$O}Hp@R!BTaL^$2NB#cMUg_- z=)}nBH&fFdLC(d~j@674h72@QblNSBXM{c|B(6gYBGHBvj&QKd6jbpDD#i_P5kL;K zICW4lgd01TnnKY#Pdn^S9%z|Tj@5U+r|9(kS|EF@0S6TYMaDMZ%BHi|DY^AHuobfN zx%chD$_EJM!>+6eb(hQWj(CDwG{^F9j&2d{cHL7&Y_ufWGbXeEK@mV*ew#@>yc`v| z3bv8Ar!F7%dpk*m(eS)1M(3wCC!*kUk6*{e%p~jkeL&!Er} zo4PM?c=8GA9r^mHp4bl6B!@vr4i@I&koIVw3a>bnv4=IStL3MeE!<JYHvrkEh@%Hm`#W*MbA+{&`OHaoc zsYQevsGNKiF_noWk-c5vh4NzK?OD`^ILE&qg0){p(1{pYJR6)i@XiIz2aL``=ess~ zkQIc>{HwWFV?xvt;{q-}PcIyj?h6)55FE^C_q>rhI8|Yn49n%oL+8BPq#T{G#A>`7 z%68E+)L<2KNu8j}G3#a|O}^{%>(Up&ou^y{eSRix4Pqn6hXk^%(o#9RE@3RsI8BAcTtopDr;UYm&@4FWnjF-N+W%@`=3rESlpGCYdtJ;m z|2Q(rf9yh})IPrS1}XoxvDzbcYqFj*#zNw!!oO_Qm97`%FBO(=iFp3wm(OwnxZ8X= zSO5YNQq}`InG7F>ghZ^2tATLpur-?yNcAO*`u*NRCAoYeYmkAtX!2rCNkd|Rq;H(; zpqb)`ZDI*`ob<7BlQK3dqRNsMV`>yIio%gma0#MHmubDR;OK^JKw5NZ5{*d{LX63B zMIsfe|0h4Ad&7!)QI5*pso=CIs8CqeS>?WIC{zGcvuUJC2#5*jl%#$o8A?bqn!Bsh zNUQ#HS$-%zeQKA$HL3)?tRIjQPmqSRpITUzQR#mXF9DZEh*LZm#A)3+Qh&JHf#v!k z+iS{J!w}yxD;#ROOfYNsVtlYr&|;Z_H#Uw-9luWf$KyxwpPd{>79CJ8K-{!=e`zqG z)H{cV@ebcafxU_80&1*}sRW(OO1m>JQc*I+&Y5i@1eUjRO< zf>c6OzpVYLC#+_e5*;bIyWdD+N)oKevp577;Gnr|($qKUaY0Km%+&)QpFD@wq0@E} z-Q;*mQ0&|)at?qKi8_5%dLedQGVd0E?uI;RJ3x`qzHm15@<%N;RuR4vQ%j{FXI`^t E0lg(z-2eap diff --git a/test_files/run_modifier_examples/hugr_results/subscript_in_dagger_solved.npy b/test_files/run_modifier_examples/hugr_results/subscript_in_dagger_solved.npy deleted file mode 100644 index 2b9e39f075f8b7941fc172e246d7c1446677b402..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 192 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlWb_FuA`uymS0p-l$aNvUzCyxl5k7RDNY57 p7iT0EqyqUGCOVor3bhL41Fo~y^=b1KJhNv&17{%O`_Y6kxB%bAB#Hn4 From 53f046389ab3aa90ad9593efbe45a899a84c7e56 Mon Sep 17 00:00:00 2001 From: nicolaassolini-qntm Date: Wed, 17 Jun 2026 16:35:48 +0100 Subject: [PATCH 04/15] new modifier examples --- test_files/modifier_examples/cfg_in_ctrl.py | 67 +++++++++++++++++++ test_files/modifier_examples/even_dagger1.py | 40 +++++++++++ test_files/modifier_examples/even_dagger2.py | 47 +++++++++++++ .../higher_order_function_w_loops.py | 32 ++++++--- .../modifier_examples/multiple_functions.py | 65 ++++++++++++++++++ .../modifier_examples/nested_multiple.py | 52 ++++++++++++++ 6 files changed, 295 insertions(+), 8 deletions(-) create mode 100644 test_files/modifier_examples/cfg_in_ctrl.py create mode 100644 test_files/modifier_examples/even_dagger1.py create mode 100644 test_files/modifier_examples/even_dagger2.py create mode 100644 test_files/modifier_examples/multiple_functions.py create mode 100644 test_files/modifier_examples/nested_multiple.py diff --git a/test_files/modifier_examples/cfg_in_ctrl.py b/test_files/modifier_examples/cfg_in_ctrl.py new file mode 100644 index 000000000..73a27594c --- /dev/null +++ b/test_files/modifier_examples/cfg_in_ctrl.py @@ -0,0 +1,67 @@ +# /// script +# requires-python = ">=3.13" +# dependencies = [ +# "guppylang==1.0.0a4", +# ] +# /// +"""Controlling a function with internal control flow""" + +from pathlib import Path +from sys import argv +import sys + +from guppylang import guppy +from guppylang.std.builtins import control +from guppylang.std.debug import state_result +from guppylang.std.quantum import discard, h, qubit, rx, x, rz +from guppylang.std.angles import angle + +sys.path.append(str(Path(__file__).resolve().parents[1])) + +from guppylang.experimental import enable_experimental_features + +enable_experimental_features() + + +@guppy(controllable=True) +def funz(t: qubit, a: angle) -> None: + rz(t, a) + + +@guppy(controllable=True) +def branchy(q: qubit, flag: bool) -> None: + if flag: + x(q) + else: + h(q) + + +@guppy +def main() -> None: + c = qubit() + t = qubit() + flag = True + h(c) + with control(c): + inner_flag = False + branchy(t, flag) + branchy(t, inner_flag) + a = angle(1 / 4) + if flag: + for _ in range(2): + funz(t, a) + if inner_flag: + x(t) + else: + rot = 1 / 2 + while rot >= 1 / 4: + rx(t, angle(rot)) + rot = rot / 2 + + state_result("r", c, t) + discard(c) + discard(t) + + +program = main.compile() +Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/modifier_examples/even_dagger1.py b/test_files/modifier_examples/even_dagger1.py new file mode 100644 index 000000000..7d6326542 --- /dev/null +++ b/test_files/modifier_examples/even_dagger1.py @@ -0,0 +1,40 @@ +# /// script +# requires-python = ">=3.13" +# dependencies = [ +# "guppylang==1.0.0a4", +# ] +# /// +"""A stress test for nested control and dagger modifiers.""" + +from pathlib import Path +from sys import argv + +from guppylang import guppy +from guppylang.std.builtins import control, dagger +from guppylang.std.debug import state_result +from guppylang.std.quantum import angle, discard, qubit, rx, h + + +from guppylang.experimental import enable_experimental_features + +enable_experimental_features() + + +@guppy +def main() -> None: + c = qubit() + q = qubit() + h(c) + with dagger: + with control(c): + with dagger: + rx(q, angle(1 / 3)) + + state_result("r", c, q) + + discard(q) + discard(c) + + +program = main.compile() +Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/modifier_examples/even_dagger2.py b/test_files/modifier_examples/even_dagger2.py new file mode 100644 index 000000000..bc2e2b4b3 --- /dev/null +++ b/test_files/modifier_examples/even_dagger2.py @@ -0,0 +1,47 @@ +# /// script +# requires-python = ">=3.13" +# dependencies = [ +# "guppylang==1.0.0a4", +# ] +# /// +"""An example with an even number of daggers, which should cancel out""" + +from pathlib import Path +from sys import argv +import sys + +from guppylang import guppy +from guppylang.std.builtins import dagger +from guppylang.std.debug import state_result +from guppylang.std.quantum import discard, qubit, angle +from guppylang.std.quantum import rx + +sys.path.append(str(Path(__file__).resolve().parents[1])) + +from guppylang.experimental import enable_experimental_features + +enable_experimental_features() + + +@guppy(unitary=True) +def rotation(q: qubit) -> None: + rx(q, angle(1 / 4)) + + +@guppy +def main() -> None: + t = qubit() + + with dagger: + with dagger: + rotation(t) + + with dagger, dagger, dagger: + rotation(t) + + state_result("r", t) + discard(t) + + +program = main.compile() +Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/modifier_examples/higher_order_function_w_loops.py b/test_files/modifier_examples/higher_order_function_w_loops.py index 3e73b0d0d..f217122bb 100644 --- a/test_files/modifier_examples/higher_order_function_w_loops.py +++ b/test_files/modifier_examples/higher_order_function_w_loops.py @@ -8,6 +8,7 @@ from pathlib import Path from sys import argv +from typing import Callable from guppylang import guppy from guppylang.std.builtins import ( @@ -25,14 +26,28 @@ enable_experimental_features() +@guppy +def get_angle(f: float) -> angle: + return angle(f) + + @guppy(unitary=True) -def apply_r(f: Unitary[[qubit, angle], None], q: array[qubit, 2], angle: angle) -> None: - f(q[1], angle) +def apply_r( + f: Unitary[[qubit, angle], None], + q: array[qubit, 2], + fun_angle: Callable[[float], angle], + radiant: float, +) -> None: + f(q[1], fun_angle(radiant)) @guppy(controllable=True) def apply_c( - f: Controllable[[qubit], None], g: Unitary[[qubit, angle], None], q: qubit, b: bool + f: Controllable[[qubit], None], + g: Unitary[[qubit, angle], None], + classic_fun: Callable[[float], angle], + q: qubit, + b: bool, ) -> None: n = 3 if b: @@ -40,8 +55,9 @@ def apply_c( f(q) n -= 1 else: + a = classic_fun(0.5) for _ in range(2): - g(q, angle(0.5)) + g(q, a) @guppy @@ -50,12 +66,12 @@ def main() -> None: h(qs[0]) flag = 2 > 10 with control(qs[0]): - apply_c(h, rx, qs[1], True) - apply_c(h, rx, qs[1], flag) + apply_c(h, rx, get_angle, qs[1], True) + apply_c(h, rx, get_angle, qs[1], flag) with control(qs[0]), dagger: - apply_r(rz, qs, angle(0.25)) - apply_r(rz, qs, angle(0.5)) + apply_r(rz, qs, get_angle, 0.25) + apply_r(rz, qs, get_angle, 0.5) state_result("r", qs[0], qs[1]) discard_array(qs) diff --git a/test_files/modifier_examples/multiple_functions.py b/test_files/modifier_examples/multiple_functions.py new file mode 100644 index 000000000..265787d33 --- /dev/null +++ b/test_files/modifier_examples/multiple_functions.py @@ -0,0 +1,65 @@ +# /// script +# requires-python = ">=3.13" +# dependencies = [ +# "guppylang==1.0.0a4", +# ] +# /// +"""Testing a dagger modifier on multiple functions""" + +from pathlib import Path +from sys import argv +import sys + +from guppylang import guppy +from guppylang.std.builtins import dagger, control +from guppylang.std.debug import state_result +from guppylang.std.quantum import discard, qubit +from guppylang.std.quantum import s, rx +from guppylang.std.angles import angle + +sys.path.append(str(Path(__file__).resolve().parents[1])) + +from guppylang.experimental import enable_experimental_features + +enable_experimental_features() + + +@guppy +def get_f() -> float: + return 1 / 3 + + +@guppy(unitary=True) +def foo1(q: qubit) -> None: + rx(q, angle(1 / 2)) + + +@guppy(unitary=True) +def foo2(q: qubit) -> None: + s(q) + + +@guppy(unitary=True) +def foo3(q: qubit, f: float) -> None: + rx(q, angle(f)) + + +@guppy +def main() -> None: + c = qubit() + t = qubit() + + with dagger: + with control(c): + f = get_f() + foo2(t) + foo3(t, f) + foo1(c) + + state_result("r", c, t) + discard(t) + discard(c) + + +program = main.compile() +Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/modifier_examples/nested_multiple.py b/test_files/modifier_examples/nested_multiple.py new file mode 100644 index 000000000..0a6d7c7a4 --- /dev/null +++ b/test_files/modifier_examples/nested_multiple.py @@ -0,0 +1,52 @@ +# /// script +# requires-python = ">=3.13" +# dependencies = [ +# "guppylang==1.0.0a4", +# ] +# /// +"""Nested modifiers with multiple control qubits""" + +from pathlib import Path +from sys import argv +import sys + +from guppylang import guppy +from guppylang.std.builtins import control, dagger +from guppylang.std.debug import state_result +from guppylang.std.quantum import discard, qubit, angle +from guppylang.std.quantum import h, rz, x + +sys.path.append(str(Path(__file__).resolve().parents[1])) + + +from guppylang.experimental import enable_experimental_features + +enable_experimental_features() + + +@guppy +def main() -> None: + t = qubit() + c1 = qubit() + c2 = qubit() + c3 = qubit() + h(c1) + x(c2) + h(c3) + x(t) + with control(c1, c2): + with dagger: + with control(c3): + x(t) + rz(t, angle(-1 / 3)) + h(t) + + state_result("r", c1, c2, c3, t) + discard(c1) + discard(c2) + discard(c3) + discard(t) + + +program = main.compile() +Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) From a69b487d04e6e06b6a14fdf40adc92c138f01a82 Mon Sep 17 00:00:00 2001 From: nicolaassolini-qntm Date: Thu, 18 Jun 2026 13:25:12 +0100 Subject: [PATCH 05/15] solve bug --- .../higher_order_function_w_loops.hugr | Bin 16095 -> 16487 bytes .../higher_order_function_w_loops.py | 32 +- tket/src/modifier/modifier_resolver.rs | 366 ++++++++++++++++-- 3 files changed, 348 insertions(+), 50 deletions(-) diff --git a/test_files/modifier_examples/higher_order_function_w_loops.hugr b/test_files/modifier_examples/higher_order_function_w_loops.hugr index b166d27e30820a342f2ffde9aec5e9b283df6807..d7005cdf5eb52c2110f2d0aaeaac1faa8c110a9e 100644 GIT binary patch literal 16487 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 diff --git a/test_files/modifier_examples/higher_order_function_w_loops.py b/test_files/modifier_examples/higher_order_function_w_loops.py index 3e73b0d0d..f217122bb 100644 --- a/test_files/modifier_examples/higher_order_function_w_loops.py +++ b/test_files/modifier_examples/higher_order_function_w_loops.py @@ -8,6 +8,7 @@ from pathlib import Path from sys import argv +from typing import Callable from guppylang import guppy from guppylang.std.builtins import ( @@ -25,14 +26,28 @@ enable_experimental_features() +@guppy +def get_angle(f: float) -> angle: + return angle(f) + + @guppy(unitary=True) -def apply_r(f: Unitary[[qubit, angle], None], q: array[qubit, 2], angle: angle) -> None: - f(q[1], angle) +def apply_r( + f: Unitary[[qubit, angle], None], + q: array[qubit, 2], + fun_angle: Callable[[float], angle], + radiant: float, +) -> None: + f(q[1], fun_angle(radiant)) @guppy(controllable=True) def apply_c( - f: Controllable[[qubit], None], g: Unitary[[qubit, angle], None], q: qubit, b: bool + f: Controllable[[qubit], None], + g: Unitary[[qubit, angle], None], + classic_fun: Callable[[float], angle], + q: qubit, + b: bool, ) -> None: n = 3 if b: @@ -40,8 +55,9 @@ def apply_c( f(q) n -= 1 else: + a = classic_fun(0.5) for _ in range(2): - g(q, angle(0.5)) + g(q, a) @guppy @@ -50,12 +66,12 @@ def main() -> None: h(qs[0]) flag = 2 > 10 with control(qs[0]): - apply_c(h, rx, qs[1], True) - apply_c(h, rx, qs[1], flag) + apply_c(h, rx, get_angle, qs[1], True) + apply_c(h, rx, get_angle, qs[1], flag) with control(qs[0]), dagger: - apply_r(rz, qs, angle(0.25)) - apply_r(rz, qs, angle(0.5)) + apply_r(rz, qs, get_angle, 0.25) + apply_r(rz, qs, get_angle, 0.5) state_result("r", qs[0], qs[1]) discard_array(qs) diff --git a/tket/src/modifier/modifier_resolver.rs b/tket/src/modifier/modifier_resolver.rs index 2737357f1..3fef833d2 100644 --- a/tket/src/modifier/modifier_resolver.rs +++ b/tket/src/modifier/modifier_resolver.rs @@ -133,7 +133,7 @@ use hugr::{ types::{EdgeKind, FuncTypeBase, Signature, Term, Type, TypeRow}, }; -/// A wire of eigher direction. +/// A wire of either direction. #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] struct DirWire(N, Port); @@ -281,7 +281,7 @@ impl PortVector { outputs: impl Iterator, iter: impl Iterator, ) -> Self { - let iter = iter.collect::>(); + let iter = iter.collect::>(); let incoming = inputs .map(|p| { if iter.contains(&p) { @@ -457,6 +457,23 @@ impl ModifierResolverErrors { } } +/// Shared traversal context for the recursive function-input-requirement search. +/// +/// Bundles the parameters that are constant across recursive calls to +/// [`ModifierResolver::function_input_requirements_for_value`], +/// [`ModifierResolver::function_input_requirements_for_sum_field`], and +/// [`ModifierResolver::function_input_requirements_from_input`]. +struct FunctionInputContext<'a, N> { + /// Indices of function-typed inputs in the top-level function signature. + function_input_indices: &'a HashSet, + /// The top-level function node whose inputs are being analysed. + func: N, + /// Visited (node, port) pairs to prevent infinite recursion through values. + visited_values: &'a mut HashSet<(N, OutgoingPort)>, + /// Visited (node, port, variant, field) tuples to prevent infinite recursion through sum fields. + visited_sum_fields: &'a mut HashSet<(N, OutgoingPort, usize, usize)>, +} + // Utility functions for ModifierResolver impl ModifierResolver { fn modifiers_mut(&mut self) -> &mut CombinedModifier { @@ -471,7 +488,7 @@ impl ModifierResolver { fn controls(&mut self) -> &mut Vec { &mut self.controls } - fn controls_ref(&self) -> &Vec { + fn controls_ref(&self) -> &[Wire] { &self.controls } fn worklist(&mut self) -> &mut VecDeque { @@ -503,6 +520,11 @@ impl ModifierResolver { .unwrap_or_default() } + /// Follow a value through consecutive modifier nodes. + /// + /// This only consumes nodes such as `Control` and `Dagger`, accumulating + /// them into `modifiers`. It stops at the first non-modifier node, which is + /// often an `Input` node local to a nested container. fn trace_modifier_chain_with( &self, h: &impl HugrMut, @@ -546,6 +568,269 @@ impl ModifierResolver { self.higher_order_input_modifiers_inner(h, func, &mut visiting) } + /// Trace a plain value back to the top-level function input that provides it. + /// + /// Higher-order modifier requirements are stored against `func`'s original + /// input indices. A value used by a nested indirect call may have crossed + /// DFG, CFG, loop, or conditional boundaries before reaching the call, so a + /// local `Input` port number is not enough. This helper first strips any + /// modifier chain from `source`, then delegates to + /// [`Self::function_input_requirements_from_input`] when the remaining value + /// is a container input. + fn function_input_requirements_for_value( + &self, + h: &impl HugrMut, + ctx: &mut FunctionInputContext<'_, N>, + source: Wire, + modifiers: CombinedModifier, + ) -> Result, ModifierResolverErrors> { + let (target, target_port, modifiers) = + self.trace_modifier_chain_with(h, source.node(), source.source(), modifiers)?; + if !ctx.visited_values.insert((target, target_port)) { + return Ok(Vec::new()); + } + + if matches!(h.get_optype(target), OpType::Input(_)) { + self.function_input_requirements_from_input( + h, + ctx, + Wire::new(target, target_port), + modifiers, + ) + } else { + Ok(Vec::new()) + } + } + + /// Trace one field of a sum value back to the top-level function input that + /// provides it. + /// + /// Conditionals and CFG branches pass values through sum rows. When a local + /// input comes from variant `variant`, field `field`, this helper follows + /// the sum-producing operation (`Tag`, or a nested `Conditional`) until it + /// reaches the ordinary value that supplied that field. + fn function_input_requirements_for_sum_field( + &self, + h: &impl HugrMut, + ctx: &mut FunctionInputContext<'_, N>, + source: Wire, + variant: usize, + field: usize, + modifiers: CombinedModifier, + ) -> Result, ModifierResolverErrors> { + if !ctx + .visited_sum_fields + .insert((source.node(), source.source(), variant, field)) + { + return Ok(Vec::new()); + } + + match h.get_optype(source.node()) { + OpType::Tag(tag) if source.source().index() == 0 && tag.tag == variant => { + if h.num_inputs(source.node()) <= field { + return Ok(Vec::new()); + } + let Some((field_source, field_source_port)) = + h.single_linked_output(source.node(), field) + else { + return Ok(Vec::new()); + }; + self.function_input_requirements_for_value( + h, + ctx, + Wire::new(field_source, field_source_port), + modifiers, + ) + } + OpType::Conditional(_) => { + let Some(case) = h.children(source.node()).nth(variant) else { + return Ok(Vec::new()); + }; + let Some([_, case_output]) = h.get_io(case) else { + return Ok(Vec::new()); + }; + let Some((case_source, case_source_port)) = + h.single_linked_output(case_output, source.source().index()) + else { + return Ok(Vec::new()); + }; + self.function_input_requirements_for_sum_field( + h, + ctx, + Wire::new(case_source, case_source_port), + variant, + field, + modifiers, + ) + } + _ => Ok(Vec::new()), + } + } + + /// Lift a local container input back to an input of `func`. + /// + /// `input_node` may be the `Input` of `func` itself, or it may belong to a + /// nested `Case`, `DFG`, `TailLoop`, `CFG`, or `DataflowBlock`. The function + /// walks outward through those container boundaries, following the actual + /// incoming edge or carried branch payload instead of reusing the local port + /// number as a top-level function input index. + fn function_input_requirements_from_input( + &self, + h: &impl HugrMut, + ctx: &mut FunctionInputContext<'_, N>, + input: Wire, + modifiers: CombinedModifier, + ) -> Result, ModifierResolverErrors> { + let Some(parent) = h.get_parent(input.node()) else { + return Ok(Vec::new()); + }; + let input_index = input.source().index(); + if parent == ctx.func { + return Ok(ctx + .function_input_indices + .contains(&input_index) + .then_some((input_index, modifiers)) + .into_iter() + .collect()); + } + + match h.get_optype(parent) { + OpType::Case(_) => { + let Some(conditional) = h.get_parent(parent) else { + return Ok(Vec::new()); + }; + let OpType::Conditional(conditional_op) = h.get_optype(conditional) else { + return Ok(Vec::new()); + }; + let Some(case_index) = h.children(conditional).position(|case| case == parent) + else { + return Ok(Vec::new()); + }; + let tag_inputs = conditional_op + .sum_rows + .get(case_index) + .map(TypeRow::len) + .unwrap_or_default(); + if input_index < tag_inputs { + let Some((sum_source, sum_source_port)) = + h.single_linked_output(conditional, 0) + else { + return Ok(Vec::new()); + }; + self.function_input_requirements_for_sum_field( + h, + ctx, + Wire::new(sum_source, sum_source_port), + case_index, + input_index, + modifiers, + ) + } else { + let Some((source, source_port)) = + h.single_linked_output(conditional, input_index - tag_inputs + 1) + else { + return Ok(Vec::new()); + }; + self.function_input_requirements_for_value( + h, + ctx, + Wire::new(source, source_port), + modifiers, + ) + } + } + OpType::DFG(_) | OpType::TailLoop(_) | OpType::CFG(_) => { + if h.num_inputs(parent) <= input_index { + return Ok(Vec::new()); + } + let Some((source, source_port)) = h.single_linked_output(parent, input_index) + else { + return Ok(Vec::new()); + }; + self.function_input_requirements_for_value( + h, + ctx, + Wire::new(source, source_port), + modifiers, + ) + } + OpType::DataflowBlock(_) => { + let predecessors = if h.num_inputs(parent) > 0 { + h.linked_outputs(parent, IncomingPort::from(0)) + .collect::>() + } else { + Vec::new() + }; + if predecessors.is_empty() { + let Some(cfg) = h.get_parent(parent) else { + return Ok(Vec::new()); + }; + if h.num_inputs(cfg) <= input_index { + return Ok(Vec::new()); + } + let Some((source, source_port)) = h.single_linked_output(cfg, input_index) + else { + return Ok(Vec::new()); + }; + return self.function_input_requirements_for_value( + h, + ctx, + Wire::new(source, source_port), + modifiers, + ); + } + + let mut requirements = Vec::new(); + for (predecessor, branch_port) in predecessors { + let OpType::DataflowBlock(predecessor_block) = h.get_optype(predecessor) else { + continue; + }; + let Some([_, predecessor_output]) = h.get_io(predecessor) else { + continue; + }; + let Some((sum_source, sum_source_port)) = + h.single_linked_output(predecessor_output, 0) + else { + continue; + }; + // CFG blocks carry branch data in two equivalent shapes: + // the first output is the branch sum value, while following + // output ports flatten every variant payload. Trace both so + // provenance is recovered for HUGRs using either encoding. + requirements.extend(self.function_input_requirements_for_sum_field( + h, + ctx, + Wire::new(sum_source, sum_source_port), + branch_port.index(), + input_index, + modifiers.clone(), + )?); + let field_input = 1 + + predecessor_block + .sum_rows + .iter() + .take(branch_port.index()) + .map(TypeRow::len) + .sum::() + + input_index; + if h.num_inputs(predecessor_output) > field_input + && let Some((field_source, field_source_port)) = + h.single_linked_output(predecessor_output, field_input) + { + requirements.extend(self.function_input_requirements_for_value( + h, + ctx, + Wire::new(field_source, field_source_port), + modifiers.clone(), + )?); + } + } + Ok(requirements) + } + _ => Ok(Vec::new()), + } + } + fn higher_order_input_modifiers_inner( &self, h: &impl HugrMut, @@ -568,12 +853,6 @@ impl ModifierResolver { .enumerate() .filter_map(|(index, ty)| matches!(**ty, Term::FunctionType(_)).then_some(index)) .collect::>(); - let mut quantum_function_input_indices = HashSet::new(); - for (index, ty) in function_inputs.iter().enumerate() { - if self.function_type_has_quantum_data(ty)? { - quantum_function_input_indices.insert(index); - } - } let mut requirements = Vec::new(); for node in h.descendants(func) { @@ -598,7 +877,17 @@ impl ModifierResolver { self.modifiers().clone(), )?; if matches!(h.get_optype(target), OpType::Input(_)) { - requirements.push((target_port.index(), modifiers)); + requirements.extend(self.function_input_requirements_from_input( + h, + &mut FunctionInputContext { + function_input_indices: &function_input_indices, + func, + visited_values: &mut HashSet::new(), + visited_sum_fields: &mut HashSet::new(), + }, + Wire::new(target, target_port), + modifiers, + )?); } } OpType::Call(call) => { @@ -625,7 +914,17 @@ impl ModifierResolver { let (target, target_port, modifiers) = self.trace_modifier_chain_with(h, source.0, source.1, modifiers)?; if matches!(h.get_optype(target), OpType::Input(_)) { - requirements.push((target_port.index(), modifiers)); + requirements.extend(self.function_input_requirements_from_input( + h, + &mut FunctionInputContext { + function_input_indices: &function_input_indices, + func, + visited_values: &mut HashSet::new(), + visited_sum_fields: &mut HashSet::new(), + }, + Wire::new(target, target_port), + modifiers, + )?); } } } @@ -635,14 +934,6 @@ impl ModifierResolver { visiting.remove(&func); requirements.retain(|(input, _)| function_input_indices.contains(input)); - if !requirements.is_empty() { - requirements.extend( - quantum_function_input_indices - .iter() - .copied() - .map(|input| (input, self.modifiers().clone())), - ); - } Ok(requirements.into_iter().unique().collect()) } @@ -815,24 +1106,15 @@ impl ModifierResolver { old: DirWire, new: DirWire, ) -> Result<(), ModifierResolverErrors> { - match self.corresp_map().entry(old) { - std::collections::hash_map::Entry::Vacant(entry) => { - entry.insert(vec![new]); - Ok(()) - } - // Empty entry means that the old wire has no correspondence, so we can insert the new wire. - std::collections::hash_map::Entry::Occupied(mut entry) if entry.get().is_empty() => { - entry.insert(vec![new]); - Ok(()) - } - // If the old wire is already registered, raise an error. - std::collections::hash_map::Entry::Occupied(entry) => { - let former = entry.get(); - Err(ModifierResolverErrors::unreachable(format!( - "Wire already registered for node {}. Former [{},...], Latter {}.", - old.0, former[0], new - ))) - } + let vec = self.corresp_map().entry(old).or_default(); + if vec.is_empty() { + vec.push(new); + Ok(()) + } else { + Err(ModifierResolverErrors::unreachable(format!( + "Wire already registered for node {}. Former [{},...], Latter {}.", + old.0, vec[0], new + ))) } } @@ -866,7 +1148,7 @@ impl ModifierResolver { Ok(()) } - /// This function adds a node to the builder, that does not affected by the modifiers. + /// This function adds a node to the builder that is not affected by the modifiers. fn add_node_no_modification( &mut self, h: &impl HugrMut, @@ -978,9 +1260,9 @@ impl ModifierResolver { Ok(()) } - /// Apply the resolver the current node `n`. + /// Apply the resolver to the current node `n`. /// It first checks if the node is a modifier and can be applied. - /// If not, it returns an [`ModifierError`]. + /// If not, it returns a [`ModifierError`]. /// If yes, it applies the modifier to the loaded function, fn try_rewrite( &mut self, @@ -1047,7 +1329,7 @@ impl ModifierResolver { } } - // We take arbitral topological order of the circuit so that we can plug the control qubits + // We take an arbitrary topological order of the circuit so that we can plug the control qubits // and pass around them in that order. This might not be ideal, as it may produce an inefficient order. fn modify_op( &mut self, @@ -1155,7 +1437,7 @@ impl ModifierResolver { /// * `new_offset`: the offset of the ports of the new node, especially the number of control qubits. /// /// The order of the resulting ports is determined as follows: - /// - Every ports are devided into quantum ports and non-quantum ports. + /// - Every port is divided into quantum ports and non-quantum ports. /// - Until the first quantum port is reached, the non-quantum ports are wired in order. /// - When a quantum port is reached for both inputs and outputs, /// if the dagger is applied, the quantum input is wired to the output, From 3269cd78810ae47b1ebc442e89e652a9c9afd820 Mon Sep 17 00:00:00 2001 From: nicolaassolini-qntm Date: Thu, 18 Jun 2026 13:34:29 +0100 Subject: [PATCH 06/15] refactor --- tket/src/modifier/modifier_resolver.rs | 214 ++++++++++++------------- 1 file changed, 107 insertions(+), 107 deletions(-) diff --git a/tket/src/modifier/modifier_resolver.rs b/tket/src/modifier/modifier_resolver.rs index 3fef833d2..17f07f3c0 100644 --- a/tket/src/modifier/modifier_resolver.rs +++ b/tket/src/modifier/modifier_resolver.rs @@ -568,6 +568,113 @@ impl ModifierResolver { self.higher_order_input_modifiers_inner(h, func, &mut visiting) } + fn higher_order_input_modifiers_inner( + &self, + h: &impl HugrMut, + func: N, + visiting: &mut HashSet, + ) -> Result, ModifierResolverErrors> { + if !visiting.insert(func) { + return Ok(Vec::new()); + } + + let OpType::FuncDefn(func_defn) = h.get_optype(func) else { + return Err(ModifierResolverErrors::unreachable(format!( + "Cannot inspect higher-order input modifiers for non-function node: {}", + h.get_optype(func) + ))); + }; + let function_inputs = func_defn.signature().body().input.clone(); + let function_input_indices = function_inputs + .iter() + .enumerate() + .filter_map(|(index, ty)| matches!(**ty, Term::FunctionType(_)).then_some(index)) + .collect::>(); + + let mut requirements = Vec::new(); + for node in h.descendants(func) { + match h.get_optype(node) { + OpType::CallIndirect(call) => { + if !self.signature_has_quantum_data(&call.signature) { + continue; + } + // A modified indirect call through a function input cannot + // be solved inside this function body. The generated + // function must instead require that input to already have + // the corresponding modified function type. + let source = h.single_linked_output(node, 0).ok_or_else(|| { + ModifierResolverErrors::unreachable( + "CallIndirect function input has no source.".to_string(), + ) + })?; + let (target, target_port, modifiers) = self.trace_modifier_chain_with( + h, + source.0, + source.1, + self.modifiers().clone(), + )?; + if matches!(h.get_optype(target), OpType::Input(_)) { + requirements.extend(self.function_input_requirements_from_input( + h, + &mut FunctionInputContext { + function_input_indices: &function_input_indices, + func, + visited_values: &mut HashSet::new(), + visited_sum_fields: &mut HashSet::new(), + }, + Wire::new(target, target_port), + modifiers, + )?); + } + } + OpType::Call(call) => { + let Some((callee, _)) = + h.single_linked_output(node, call.called_function_port()) + else { + continue; + }; + if !matches!(h.get_optype(callee), OpType::FuncDefn(_)) { + continue; + } + + // A direct call to a higher-order function can force one of + // this function's own inputs to be pre-modified. This is the + // recursive case for wrappers such as f -> g(f) -> h(f). + for (callee_input, modifiers) in + self.higher_order_input_modifiers_inner(h, callee, visiting)? + { + let source = h.single_linked_output(node, callee_input).ok_or_else(|| { + ModifierResolverErrors::unreachable(format!( + "Call input {callee_input} has no source while propagating higher-order modifiers." + )) + })?; + let (target, target_port, modifiers) = + self.trace_modifier_chain_with(h, source.0, source.1, modifiers)?; + if matches!(h.get_optype(target), OpType::Input(_)) { + requirements.extend(self.function_input_requirements_from_input( + h, + &mut FunctionInputContext { + function_input_indices: &function_input_indices, + func, + visited_values: &mut HashSet::new(), + visited_sum_fields: &mut HashSet::new(), + }, + Wire::new(target, target_port), + modifiers, + )?); + } + } + } + _ => {} + } + } + visiting.remove(&func); + + requirements.retain(|(input, _)| function_input_indices.contains(input)); + + Ok(requirements.into_iter().unique().collect()) + } + /// Trace a plain value back to the top-level function input that provides it. /// /// Higher-order modifier requirements are stored against `func`'s original @@ -831,113 +938,6 @@ impl ModifierResolver { } } - fn higher_order_input_modifiers_inner( - &self, - h: &impl HugrMut, - func: N, - visiting: &mut HashSet, - ) -> Result, ModifierResolverErrors> { - if !visiting.insert(func) { - return Ok(Vec::new()); - } - - let OpType::FuncDefn(func_defn) = h.get_optype(func) else { - return Err(ModifierResolverErrors::unreachable(format!( - "Cannot inspect higher-order input modifiers for non-function node: {}", - h.get_optype(func) - ))); - }; - let function_inputs = func_defn.signature().body().input.clone(); - let function_input_indices = function_inputs - .iter() - .enumerate() - .filter_map(|(index, ty)| matches!(**ty, Term::FunctionType(_)).then_some(index)) - .collect::>(); - - let mut requirements = Vec::new(); - for node in h.descendants(func) { - match h.get_optype(node) { - OpType::CallIndirect(call) => { - if !self.signature_has_quantum_data(&call.signature) { - continue; - } - // A modified indirect call through a function input cannot - // be solved inside this function body. The generated - // function must instead require that input to already have - // the corresponding modified function type. - let source = h.single_linked_output(node, 0).ok_or_else(|| { - ModifierResolverErrors::unreachable( - "CallIndirect function input has no source.".to_string(), - ) - })?; - let (target, target_port, modifiers) = self.trace_modifier_chain_with( - h, - source.0, - source.1, - self.modifiers().clone(), - )?; - if matches!(h.get_optype(target), OpType::Input(_)) { - requirements.extend(self.function_input_requirements_from_input( - h, - &mut FunctionInputContext { - function_input_indices: &function_input_indices, - func, - visited_values: &mut HashSet::new(), - visited_sum_fields: &mut HashSet::new(), - }, - Wire::new(target, target_port), - modifiers, - )?); - } - } - OpType::Call(call) => { - let Some((callee, _)) = - h.single_linked_output(node, call.called_function_port()) - else { - continue; - }; - if !matches!(h.get_optype(callee), OpType::FuncDefn(_)) { - continue; - } - - // A direct call to a higher-order function can force one of - // this function's own inputs to be pre-modified. This is the - // recursive case for wrappers such as f -> g(f) -> h(f). - for (callee_input, modifiers) in - self.higher_order_input_modifiers_inner(h, callee, visiting)? - { - let source = h.single_linked_output(node, callee_input).ok_or_else(|| { - ModifierResolverErrors::unreachable(format!( - "Call input {callee_input} has no source while propagating higher-order modifiers." - )) - })?; - let (target, target_port, modifiers) = - self.trace_modifier_chain_with(h, source.0, source.1, modifiers)?; - if matches!(h.get_optype(target), OpType::Input(_)) { - requirements.extend(self.function_input_requirements_from_input( - h, - &mut FunctionInputContext { - function_input_indices: &function_input_indices, - func, - visited_values: &mut HashSet::new(), - visited_sum_fields: &mut HashSet::new(), - }, - Wire::new(target, target_port), - modifiers, - )?); - } - } - } - _ => {} - } - } - visiting.remove(&func); - - requirements.retain(|(input, _)| function_input_indices.contains(input)); - - Ok(requirements.into_iter().unique().collect()) - } - fn modified_function_input_type(&self, ty: &Type) -> Result> { let Term::FunctionType(func_ty) = &**ty else { return Err(ModifierResolverErrors::unreachable(format!( From bf47c1bf1af4f54375e97847a213f2701894e573 Mon Sep 17 00:00:00 2001 From: nicolaassolini-qntm Date: Thu, 18 Jun 2026 16:45:11 +0100 Subject: [PATCH 07/15] fixed 2nd bug --- .../higher_order_function_w_loops.hugr | Bin 16487 -> 16791 bytes .../higher_order_function_w_loops.py | 15 +++-- tket/src/modifier/modifier_resolver.rs | 54 ++---------------- .../modifier/modifier_resolver/call_modify.rs | 23 ++++++-- 4 files changed, 33 insertions(+), 59 deletions(-) diff --git a/test_files/modifier_examples/higher_order_function_w_loops.hugr b/test_files/modifier_examples/higher_order_function_w_loops.hugr index d7005cdf5eb52c2110f2d0aaeaac1faa8c110a9e..67199738597acdc8ce1d9f4c21d20a5405de3e19 100644 GIT binary patch literal 16791 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 angle: return angle(f) +@guppy +def get_get_angle() -> Callable[[float], angle]: + return get_angle + + @guppy(unitary=True) def apply_r( f: Unitary[[qubit, angle], None], @@ -45,7 +50,7 @@ def apply_r( def apply_c( f: Controllable[[qubit], None], g: Unitary[[qubit, angle], None], - classic_fun: Callable[[float], angle], + classic_fun: Callable[[], Callable[[float], angle]], q: qubit, b: bool, ) -> None: @@ -55,9 +60,9 @@ def apply_c( f(q) n -= 1 else: - a = classic_fun(0.5) + get_a = classic_fun() for _ in range(2): - g(q, a) + g(q, get_a(0.5)) @guppy @@ -66,8 +71,8 @@ def main() -> None: h(qs[0]) flag = 2 > 10 with control(qs[0]): - apply_c(h, rx, get_angle, qs[1], True) - apply_c(h, rx, get_angle, qs[1], flag) + apply_c(h, rx, get_get_angle, qs[1], True) + apply_c(h, rx, get_get_angle, qs[1], flag) with control(qs[0]), dagger: apply_r(rz, qs, get_angle, 0.25) diff --git a/tket/src/modifier/modifier_resolver.rs b/tket/src/modifier/modifier_resolver.rs index 17f07f3c0..9c9429982 100644 --- a/tket/src/modifier/modifier_resolver.rs +++ b/tket/src/modifier/modifier_resolver.rs @@ -676,14 +676,6 @@ impl ModifierResolver { } /// Trace a plain value back to the top-level function input that provides it. - /// - /// Higher-order modifier requirements are stored against `func`'s original - /// input indices. A value used by a nested indirect call may have crossed - /// DFG, CFG, loop, or conditional boundaries before reaching the call, so a - /// local `Input` port number is not enough. This helper first strips any - /// modifier chain from `source`, then delegates to - /// [`Self::function_input_requirements_from_input`] when the remaining value - /// is a container input. fn function_input_requirements_for_value( &self, h: &impl HugrMut, @@ -711,11 +703,6 @@ impl ModifierResolver { /// Trace one field of a sum value back to the top-level function input that /// provides it. - /// - /// Conditionals and CFG branches pass values through sum rows. When a local - /// input comes from variant `variant`, field `field`, this helper follows - /// the sum-producing operation (`Tag`, or a nested `Conditional`) until it - /// reaches the ordinary value that supplied that field. fn function_input_requirements_for_sum_field( &self, h: &impl HugrMut, @@ -818,39 +805,8 @@ impl ModifierResolver { .get(case_index) .map(TypeRow::len) .unwrap_or_default(); - if input_index < tag_inputs { - let Some((sum_source, sum_source_port)) = - h.single_linked_output(conditional, 0) - else { - return Ok(Vec::new()); - }; - self.function_input_requirements_for_sum_field( - h, - ctx, - Wire::new(sum_source, sum_source_port), - case_index, - input_index, - modifiers, - ) - } else { - let Some((source, source_port)) = - h.single_linked_output(conditional, input_index - tag_inputs + 1) - else { - return Ok(Vec::new()); - }; - self.function_input_requirements_for_value( - h, - ctx, - Wire::new(source, source_port), - modifiers, - ) - } - } - OpType::DFG(_) | OpType::TailLoop(_) | OpType::CFG(_) => { - if h.num_inputs(parent) <= input_index { - return Ok(Vec::new()); - } - let Some((source, source_port)) = h.single_linked_output(parent, input_index) + let Some((source, source_port)) = + h.single_linked_output(conditional, input_index - tag_inputs + 1) else { return Ok(Vec::new()); }; @@ -2688,12 +2644,12 @@ mod tests { /// Run the pass on hugrs generated by guppy and modifier examples. #[rstest::rstest] - #[case::even_dagger("../test_files/modifier_examples/even_dagger.hugr")] - #[case::higher_order_recursive("../test_files/modifier_examples/higher_order_recursive.hugr")] - #[case::higher_order_classical("../test_files/modifier_examples/higher_order_classical.hugr")] #[case::higher_order_function_w_loops( "../test_files/modifier_examples/higher_order_function_w_loops.hugr" )] + #[case::even_dagger("../test_files/modifier_examples/even_dagger.hugr")] + #[case::higher_order_recursive("../test_files/modifier_examples/higher_order_recursive.hugr")] + #[case::higher_order_classical("../test_files/modifier_examples/higher_order_classical.hugr")] #[case::higher_order_function_w_arrays( "../test_files/modifier_examples/higher_order_function_w_arrays.hugr" )] diff --git a/tket/src/modifier/modifier_resolver/call_modify.rs b/tket/src/modifier/modifier_resolver/call_modify.rs index de3241b53..aa21849bd 100644 --- a/tket/src/modifier/modifier_resolver/call_modify.rs +++ b/tket/src/modifier/modifier_resolver/call_modify.rs @@ -306,24 +306,37 @@ impl ModifierResolver { // Instead, we record the modifiers to be applied to that input and propagate // the requirement to callers. if matches!(h.get_optype(targ), OpType::Input(_)) { - // If no quantum data is involved, we can skip modifying the call + // If no quantum data is involved, we can skip modifying the call. if !self.signature_has_quantum_data(&indir_call.signature) { + *self.modifiers_mut() = modifiers; self.add_node_no_modification(h, n, indir_call.clone(), new_dfg)?; return Ok(()); } *self.modifiers_mut() = modifiers; return self.modify_input_indirect_call(n, chain_tail.1.index(), indir_call, new_dfg); } + if let OpType::CallIndirect(source_indir_call) = h.get_optype(targ) { + *self.modifiers_mut() = modifiers; + if self.signature_has_quantum_data(&source_indir_call.signature) { + return Err(ModifierResolverErrors::unresolvable( + n, + "Cannot modify consecutive indirect calls with a quantum signature: + the produced callable consumes or allocates qubits, so this pattern is not allowed + in a modifier context.", + indir_call.clone().into(), + )); + } + self.add_node_no_modification(h, n, indir_call.clone(), new_dfg)?; + return Ok(()); + } // If the target is not a input, we expect it to be a LoadFunction node loading the function to call. let (func, load) = Self::get_loaded_function(h, n, targ, h.get_optype(targ)).map_err(wrap_modifier_err)?; - // Modify the function (if needed) let Some(modified_fn) = self.modify_fn_if_needed(h, func)? else { // The loaded function does not satisfy the active modifier, so keep - // it unchanged. - // If same modifier are present, we raise an error instead of silently skipping modification, - // since that likely indicates a mistake in the input graph + // it unchanged. If same modifier are present, we raise an error instead + // of silently skipping modification. *self.modifiers_mut() = modifiers; if trace.len() > 1 { return Err(ModifierResolverErrors::unresolvable( From ae571b387041bdbbb4bbd7db2e0b460a67206176 Mon Sep 17 00:00:00 2001 From: nicolaassolini-qntm Date: Fri, 19 Jun 2026 09:43:19 +0100 Subject: [PATCH 08/15] add proper dependecy --- test_files/modifier_examples/even_dagger2.py | 1 + test_files/modifier_examples/multiple_functions.py | 1 + 2 files changed, 2 insertions(+) diff --git a/test_files/modifier_examples/even_dagger2.py b/test_files/modifier_examples/even_dagger2.py index bc2e2b4b3..3099c74d3 100644 --- a/test_files/modifier_examples/even_dagger2.py +++ b/test_files/modifier_examples/even_dagger2.py @@ -2,6 +2,7 @@ # requires-python = ">=3.13" # dependencies = [ # "guppylang==1.0.0a4", +# "guppylang-internals==1.0.0a4", # ] # /// """An example with an even number of daggers, which should cancel out""" diff --git a/test_files/modifier_examples/multiple_functions.py b/test_files/modifier_examples/multiple_functions.py index 265787d33..650c4877f 100644 --- a/test_files/modifier_examples/multiple_functions.py +++ b/test_files/modifier_examples/multiple_functions.py @@ -2,6 +2,7 @@ # requires-python = ">=3.13" # dependencies = [ # "guppylang==1.0.0a4", +# "guppylang-internals==1.0.0a4", # ] # /// """Testing a dagger modifier on multiple functions""" From 12f2a1b6503f85f2a815bdc46a4c9d50d3889482 Mon Sep 17 00:00:00 2001 From: nicolaassolini-qntm Date: Fri, 19 Jun 2026 13:50:23 +0100 Subject: [PATCH 09/15] other deletes --- ...dagger.py => array_swap_in_dagger_ctrl.py} | 18 +-- .../modifier_examples/assign_in_dagger.py | 43 ------ test_files/modifier_examples/call1_in_ctrl.py | 46 ------ test_files/modifier_examples/call2_in_ctrl.py | 52 ------- .../modifier_examples/call_in_dagger.py | 45 ------ test_files/modifier_examples/cfg_in_ctrl.py | 12 +- .../modifier_examples/classical_array_op.py | 45 ------ ...cal_function3.py => classical_function.py} | 26 +++- .../modifier_examples/classical_function1.py | 43 ------ .../modifier_examples/classical_function2.py | 52 ------- .../complex_modifier_stress.py | 143 ------------------ .../ctrl_array_controller.py | 51 ------- .../modifier_examples/double_modifier.py | 5 +- .../{even_dagger2.py => even_dagger.py} | 27 ++-- test_files/modifier_examples/even_dagger1.py | 41 ----- .../higher_order_classical.py | 65 -------- .../higher_order_function_w_loops.hugr | Bin 16791 -> 0 bytes ...ction_w_loops.py => higher_order_loops.py} | 0 .../higher_order_recursive.py | 15 +- test_files/modifier_examples/modify_array.py | 46 ------ .../modifier_examples/nested_multiple.py | 4 +- .../simple_higher_order.hugr | Bin 10609 -> 0 bytes .../subscript_in_dagger_ctrl.py | 14 +- 23 files changed, 72 insertions(+), 721 deletions(-) rename test_files/modifier_examples/{swap_in_dagger.py => array_swap_in_dagger_ctrl.py} (70%) delete mode 100644 test_files/modifier_examples/assign_in_dagger.py delete mode 100644 test_files/modifier_examples/call1_in_ctrl.py delete mode 100644 test_files/modifier_examples/call2_in_ctrl.py delete mode 100644 test_files/modifier_examples/call_in_dagger.py delete mode 100644 test_files/modifier_examples/classical_array_op.py rename test_files/modifier_examples/{classical_function3.py => classical_function.py} (68%) delete mode 100644 test_files/modifier_examples/classical_function1.py delete mode 100644 test_files/modifier_examples/classical_function2.py delete mode 100644 test_files/modifier_examples/complex_modifier_stress.py delete mode 100644 test_files/modifier_examples/ctrl_array_controller.py rename test_files/modifier_examples/{even_dagger2.py => even_dagger.py} (69%) delete mode 100644 test_files/modifier_examples/even_dagger1.py delete mode 100644 test_files/modifier_examples/higher_order_classical.py delete mode 100644 test_files/modifier_examples/higher_order_function_w_loops.hugr rename test_files/modifier_examples/{higher_order_function_w_loops.py => higher_order_loops.py} (100%) delete mode 100644 test_files/modifier_examples/modify_array.py delete mode 100644 test_files/modifier_examples/simple_higher_order.hugr diff --git a/test_files/modifier_examples/swap_in_dagger.py b/test_files/modifier_examples/array_swap_in_dagger_ctrl.py similarity index 70% rename from test_files/modifier_examples/swap_in_dagger.py rename to test_files/modifier_examples/array_swap_in_dagger_ctrl.py index 4dd4fb1de..c547e2024 100644 --- a/test_files/modifier_examples/swap_in_dagger.py +++ b/test_files/modifier_examples/array_swap_in_dagger_ctrl.py @@ -5,22 +5,17 @@ # "guppylang-internals==1.0.0a5", # ] # /// -"""Dagger of a swap on an array""" +"""Test that array swap in a dagger and control context works correctly""" from pathlib import Path from sys import argv -import sys +import guppylang from guppylang import guppy from guppylang.std.array import array_swap -from guppylang.std.quantum import discard, qubit, h -from guppylang.std.builtins import array -import guppylang -from guppylang.std.builtins import dagger +from guppylang.std.builtins import array, control, dagger from guppylang.std.debug import state_result - -sys.path.append(str(Path(__file__).resolve().parents[1])) - +from guppylang.std.quantum import discard, h, qubit guppylang.enable_experimental_features() @@ -28,10 +23,11 @@ @guppy def main() -> None: arr = array(1, 1, 2, 1, 1) + q = qubit() with dagger: array_swap(arr, 2, 4) - array_swap(arr, 0, 4) - q = qubit() + with control(q): + array_swap(arr, 0, 4) if arr[0] == 2: h(q) state_result("r", q) diff --git a/test_files/modifier_examples/assign_in_dagger.py b/test_files/modifier_examples/assign_in_dagger.py deleted file mode 100644 index 838f11c94..000000000 --- a/test_files/modifier_examples/assign_in_dagger.py +++ /dev/null @@ -1,43 +0,0 @@ -# /// script -# requires-python = ">=3.13" -# dependencies = [ -# "guppylang==1.0.0a5", -# "guppylang-internals==1.0.0a5", -# ] -# /// -"""Testing assignment in dagger context""" - -from pathlib import Path -from sys import argv -import sys - -from guppylang import guppy -from guppylang.std.builtins import control, dagger -from guppylang.std.debug import state_result -from guppylang.std.quantum import discard, qubit, angle -from guppylang.std.quantum import h, rx - -sys.path.append(str(Path(__file__).resolve().parents[1])) - -from guppylang.experimental import enable_experimental_features - -enable_experimental_features() - - -@guppy -def main() -> None: - c1 = qubit() - t = qubit() - h(c1) - with dagger: - a = angle(1 / 3) - with control(c1): - rx(t, a) - - state_result("r", c1, t) - discard(c1) - discard(t) - - -program = main.compile() -Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/modifier_examples/call1_in_ctrl.py b/test_files/modifier_examples/call1_in_ctrl.py deleted file mode 100644 index 87d669e9a..000000000 --- a/test_files/modifier_examples/call1_in_ctrl.py +++ /dev/null @@ -1,46 +0,0 @@ -# /// script -# requires-python = ">=3.13" -# dependencies = [ -# "guppylang==1.0.0a5", -# "guppylang-internals==1.0.0a5", -# ] -# /// -"""Controlling a quantum function""" - -from pathlib import Path -from sys import argv -import sys - -from guppylang import guppy -from guppylang.std.builtins import control -from guppylang.std.debug import state_result -from guppylang.std.quantum import discard, qubit -from guppylang.std.quantum import h, x - -sys.path.append(str(Path(__file__).resolve().parents[1])) - -from guppylang.experimental import enable_experimental_features - -enable_experimental_features() - - -@guppy(unitary=True) -def bar(q: qubit) -> None: - x(q) - - -@guppy -def main() -> None: - q1 = qubit() - q2 = qubit() - h(q1) - with control(q1): - bar(q2) - - state_result("r", q1, q2) - discard(q1) - discard(q2) - - -program = main.compile() -Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/modifier_examples/call2_in_ctrl.py b/test_files/modifier_examples/call2_in_ctrl.py deleted file mode 100644 index 3e7e4281c..000000000 --- a/test_files/modifier_examples/call2_in_ctrl.py +++ /dev/null @@ -1,52 +0,0 @@ -# /// script -# requires-python = ">=3.13" -# dependencies = [ -# "guppylang==1.0.0a5", -# "guppylang-internals==1.0.0a5", -# ] -# /// -"""Controlling a quantum function""" - -from pathlib import Path -from sys import argv -import sys - -from guppylang import guppy -from guppylang.std.builtins import control -from guppylang.std.debug import state_result -from guppylang.std.quantum import discard, qubit, angle -from guppylang.std.quantum import h, rx, x - -sys.path.append(str(Path(__file__).resolve().parents[1])) - -from guppylang.experimental import enable_experimental_features - -enable_experimental_features() - - -@guppy(unitary=True) -def bar(q: qubit) -> None: - rx(q, angle(1 / 3)) - - -@guppy -def main() -> None: - c1 = qubit() - t = qubit() - c2 = qubit() - c3 = qubit() - h(c1) - x(c2) - x(c3) - with control(c1, c2, c3): - bar(t) - - state_result("r", c1, c2, c3, t) - discard(c1) - discard(t) - discard(c3) - discard(c2) - - -program = main.compile() -Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/modifier_examples/call_in_dagger.py b/test_files/modifier_examples/call_in_dagger.py deleted file mode 100644 index d9880db56..000000000 --- a/test_files/modifier_examples/call_in_dagger.py +++ /dev/null @@ -1,45 +0,0 @@ -# /// script -# requires-python = ">=3.13" -# dependencies = [ -# "guppylang==1.0.0a5", -# "guppylang-internals==1.0.0a5", -# ] -# /// -"""Dagger modifier on a function call""" - -from pathlib import Path -from sys import argv -import sys - -from guppylang import guppy -from guppylang.std.builtins import dagger -from guppylang.std.debug import state_result -from guppylang.std.quantum import discard, qubit -from guppylang.std.quantum import s, h - -sys.path.append(str(Path(__file__).resolve().parents[1])) - -from guppylang.experimental import enable_experimental_features - -enable_experimental_features() - - -@guppy(unitary=True) -def bar(q: qubit) -> None: - s(q) - - -@guppy -def main() -> None: - t = qubit() - h(t) - - with dagger: - bar(t) - - state_result("r", t) - discard(t) - - -program = main.compile() -Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/modifier_examples/cfg_in_ctrl.py b/test_files/modifier_examples/cfg_in_ctrl.py index 6444a9c05..4d047688e 100644 --- a/test_files/modifier_examples/cfg_in_ctrl.py +++ b/test_files/modifier_examples/cfg_in_ctrl.py @@ -5,21 +5,17 @@ # "guppylang-internals==1.0.0a5", # ] # /// -"""Controlling a function with internal control flow""" +"""Test control modifier on functions with internal control flow""" from pathlib import Path from sys import argv -import sys from guppylang import guppy +from guppylang.experimental import enable_experimental_features +from guppylang.std.angles import angle from guppylang.std.builtins import control from guppylang.std.debug import state_result -from guppylang.std.quantum import discard, h, qubit, rx, x, rz -from guppylang.std.angles import angle - -sys.path.append(str(Path(__file__).resolve().parents[1])) - -from guppylang.experimental import enable_experimental_features +from guppylang.std.quantum import discard, h, qubit, rx, rz, x enable_experimental_features() diff --git a/test_files/modifier_examples/classical_array_op.py b/test_files/modifier_examples/classical_array_op.py deleted file mode 100644 index 51838dba5..000000000 --- a/test_files/modifier_examples/classical_array_op.py +++ /dev/null @@ -1,45 +0,0 @@ -# /// script -# requires-python = ">=3.13" -# dependencies = [ -# "guppylang==1.0.0a5", -# "guppylang-internals==1.0.0a5", -# ] -# /// -"""Testing classical array operations in modifiers""" - -from pathlib import Path -from sys import argv -import sys - -from guppylang import guppy -from guppylang.std.debug import state_result -from guppylang.std.quantum import discard, qubit, h, x -from guppylang.std.builtins import array -import guppylang -from guppylang.std.builtins import control, dagger - -sys.path.append(str(Path(__file__).resolve().parents[1])) - - -guppylang.enable_experimental_features() - - -@guppy -def main() -> None: - arr = array(1, 1, 1, 1, 1) - q = qubit() - x(q) - with control(q), dagger: - arr[0] += 1 - arr[0] *= 2 - - if arr[0] == 4: - h(q) - - state_result("r", q) - discard(q) - - -program = main.compile_function() -program_bytes = program.to_bytes() -Path(argv[0]).with_suffix(".hugr").write_bytes(program_bytes) diff --git a/test_files/modifier_examples/classical_function3.py b/test_files/modifier_examples/classical_function.py similarity index 68% rename from test_files/modifier_examples/classical_function3.py rename to test_files/modifier_examples/classical_function.py index 28acbe044..6116fdd3b 100644 --- a/test_files/modifier_examples/classical_function3.py +++ b/test_files/modifier_examples/classical_function.py @@ -9,16 +9,13 @@ from pathlib import Path from sys import argv -import sys from guppylang import guppy -from guppylang.std.builtins import control, dagger +from guppylang.std.builtins import array, control, dagger from guppylang.std.debug import state_result from guppylang.std.quantum import discard, qubit, angle, measure from guppylang.std.quantum import h, rx, x -sys.path.append(str(Path(__file__).resolve().parents[1])) - from guppylang.experimental import enable_experimental_features enable_experimental_features() @@ -38,12 +35,25 @@ def main() -> None: t = qubit() c1 = qubit() c2 = qubit() - h(c1) + arr = array(1, 1, 1, 1, 1) + + with control(t), dagger: + arr[0] += 1 + arr[0] *= 2 + + # testing that array operations are happening in the correct order + if arr[0] == 4: + h(c1) h(c2) + with control(c1): - with control(c2): - with dagger: - d = fuu(2) + d1 = fuu(2) + with dagger: + i = 2 + d2 = fuu(i) + d3 = fuu(i) + with control(c2): + d = (d1 + d2 + d3) / (i + 1) rx(t, angle(1 / d)) state_result("r", c1, c2, t) diff --git a/test_files/modifier_examples/classical_function1.py b/test_files/modifier_examples/classical_function1.py deleted file mode 100644 index 0cce49faf..000000000 --- a/test_files/modifier_examples/classical_function1.py +++ /dev/null @@ -1,43 +0,0 @@ -# /// script -# requires-python = ">=3.13" -# dependencies = [ -# "guppylang==1.0.0a5", -# "guppylang-internals==1.0.0a5", -# ] -# /// -"""Test the use of a classical function inside modifiers""" - -from pathlib import Path -from sys import argv -import sys - -from guppylang import guppy -from guppylang.std.builtins import dagger -from guppylang.std.debug import state_result -from guppylang.std.quantum import discard, qubit, angle -from guppylang.std.quantum import rx - -sys.path.append(str(Path(__file__).resolve().parents[1])) - -from guppylang.experimental import enable_experimental_features - -enable_experimental_features() - - -@guppy -def fuu(i: int) -> int: - return i + 1 - - -@guppy -def main() -> None: - q = qubit() - with dagger: - rx(q, angle(1 / fuu(2))) - - state_result("r", q) - discard(q) - - -program = main.compile() -Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/modifier_examples/classical_function2.py b/test_files/modifier_examples/classical_function2.py deleted file mode 100644 index 3a2b849ba..000000000 --- a/test_files/modifier_examples/classical_function2.py +++ /dev/null @@ -1,52 +0,0 @@ -# /// script -# requires-python = ">=3.13" -# dependencies = [ -# "guppylang==1.0.0a5", -# "guppylang-internals==1.0.0a5", -# ] -# /// -"""Test the use of a classical function inside modifiers""" - -from pathlib import Path -from sys import argv -import sys - -from guppylang import guppy -from guppylang.std.builtins import control, dagger -from guppylang.std.debug import state_result -from guppylang.std.quantum import discard, qubit, angle, measure -from guppylang.std.quantum import h, rx, x - -sys.path.append(str(Path(__file__).resolve().parents[1])) - -from guppylang.experimental import enable_experimental_features - -enable_experimental_features() - - -@guppy -def fuu(i: int) -> int: - q = qubit() - x(q) - if measure(q): - i = i + 1 - return i - - -@guppy -def main() -> None: - t = qubit() - c1 = qubit() - h(c1) - with control(c1): - d = fuu(2) - with dagger: - rx(t, angle(1 / d)) - - state_result("r", c1, t) - discard(c1) - discard(t) - - -program = main.compile() -Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/modifier_examples/complex_modifier_stress.py b/test_files/modifier_examples/complex_modifier_stress.py deleted file mode 100644 index a337d904b..000000000 --- a/test_files/modifier_examples/complex_modifier_stress.py +++ /dev/null @@ -1,143 +0,0 @@ -# /// script -# requires-python = ">=3.13" -# dependencies = [ -# "guppylang==1.0.0a5", -# "guppylang-internals==1.0.0a5", -# ] -# /// -"""A stress test for nested control and dagger modifiers.""" - -from pathlib import Path -from sys import argv -import sys - -from guppylang import guppy -from guppylang.std.builtins import array, control, dagger -from guppylang.std.debug import state_result -from guppylang.std.quantum import ( - angle, - discard, - discard_array, - measure, - qubit, - h, - rx, - rz, - x, -) - -sys.path.append(str(Path(__file__).resolve().parents[1])) - -from guppylang.experimental import enable_experimental_features - -enable_experimental_features() - - -@guppy -def measured_offset(i: int) -> int: - q = qubit() - x(q) - if measure(q): - i = i + 1 - return i - - -@guppy(unitary=True) -def rotation(q: qubit) -> None: - rx(q, angle(-1 / 7)) - - -@guppy(unitary=True) -def flip(q: qubit) -> None: - x(q) - - -@guppy(unitary=True) -def phase_ladder(q: qubit) -> None: - with dagger: - rotation(q) - x(q) - rz(q, angle(1 / 5)) - - -@guppy -def main() -> None: - array_controllers: array[qubit, 2] = array(qubit(), qubit()) - control_a = qubit() - control_b = qubit() - control_c = qubit() - target_a = qubit() - target_b = qubit() - target_c = qubit() - - h(array_controllers[0]) - h(array_controllers[1]) - h(control_a) - h(control_b) - h(control_c) - h(target_a) - h(target_b) - h(target_c) - - with control(control_a): - with dagger: - rotation(target_a) - - with control(control_a, control_b): - with dagger: - phase_ladder(target_a) - - with dagger: - with control(control_b): - rotation(target_b) - - with control(array_controllers): - with dagger: - rotation(target_b) - - with control(control_a): - denominator = measured_offset(4) - with control(control_b, control_c): - with dagger: - rz(target_c, angle(1 / denominator)) - - with dagger: - with dagger: - with control(control_c): - flip(target_c) - - with control(control_a, control_b, control_c): - with dagger: - rz(target_c, angle(1 / 6)) - - with control(control_a, control_b, control_c): - a = 3 - x(target_a) - with dagger: - rz(target_b, angle(1 / a)) - with control(array_controllers): - rz(target_c, angle(1 / (a + 2))) - - state_result( - "r", - array_controllers[0], - array_controllers[1], - control_a, - control_b, - control_c, - target_a, - target_b, - target_c, - ) - - discard_array(array_controllers) - discard(control_a) - discard(control_b) - discard(control_c) - discard(target_a) - discard(target_b) - discard(target_c) - - -program = main.compile() -Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/modifier_examples/ctrl_array_controller.py b/test_files/modifier_examples/ctrl_array_controller.py deleted file mode 100644 index 8219097c0..000000000 --- a/test_files/modifier_examples/ctrl_array_controller.py +++ /dev/null @@ -1,51 +0,0 @@ -# /// script -# requires-python = ">=3.13" -# dependencies = [ -# "guppylang==1.0.0a5", -# "guppylang-internals==1.0.0a5", -# ] -# /// -"""A controlled gate where the controller is an array of qubits""" - -from pathlib import Path -from sys import argv -import sys - -from guppylang import guppy -from guppylang.std.builtins import array, control -from guppylang.std.debug import state_result -from guppylang.std.quantum import discard, discard_array, qubit -from guppylang.std.quantum import h, x - -sys.path.append(str(Path(__file__).resolve().parents[1])) - -from guppylang.experimental import enable_experimental_features - -enable_experimental_features() - - -@guppy(unitary=True) -def bar(q: qubit) -> None: - x(q) - - -@guppy -def main() -> None: - controllers: array[qubit, 3] = array(qubit(), qubit(), qubit()) - t = qubit() - - h(controllers[0]) - h(controllers[1]) - h(controllers[2]) - - with control(controllers): - bar(t) - - state_result("r", controllers[0], controllers[1], controllers[2], t) - - discard_array(controllers) - discard(t) - - -program = main.compile() -Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/modifier_examples/double_modifier.py b/test_files/modifier_examples/double_modifier.py index 36921e21d..22913ebab 100644 --- a/test_files/modifier_examples/double_modifier.py +++ b/test_files/modifier_examples/double_modifier.py @@ -5,7 +5,10 @@ # "guppylang-internals==1.0.0a5", # ] # /// -"""Testing nested modifiers""" +"""Testing nested modifiers + +The hugr generated from this script is also used to benchmark the performance of modifier passes resolver +""" from pathlib import Path from sys import argv diff --git a/test_files/modifier_examples/even_dagger2.py b/test_files/modifier_examples/even_dagger.py similarity index 69% rename from test_files/modifier_examples/even_dagger2.py rename to test_files/modifier_examples/even_dagger.py index bb28769a3..bece7caec 100644 --- a/test_files/modifier_examples/even_dagger2.py +++ b/test_files/modifier_examples/even_dagger.py @@ -9,16 +9,12 @@ from pathlib import Path from sys import argv -import sys from guppylang import guppy -from guppylang.std.builtins import dagger +from guppylang.std.builtins import dagger, control from guppylang.std.debug import state_result from guppylang.std.quantum import discard, qubit, angle -from guppylang.std.quantum import rx - -sys.path.append(str(Path(__file__).resolve().parents[1])) - +from guppylang.std.quantum import rx, h from guppylang.experimental import enable_experimental_features enable_experimental_features() @@ -31,17 +27,26 @@ def rotation(q: qubit) -> None: @guppy def main() -> None: - t = qubit() + c = qubit() + q = qubit() with dagger: with dagger: - rotation(t) + rotation(c) with dagger, dagger, dagger: - rotation(t) + rotation(c) + + h(c) + with dagger: + with control(c): + with dagger: + rx(q, angle(1 / 3)) + + state_result("r", c, q) - state_result("r", t) - discard(t) + discard(q) + discard(c) program = main.compile() diff --git a/test_files/modifier_examples/even_dagger1.py b/test_files/modifier_examples/even_dagger1.py deleted file mode 100644 index c45226c20..000000000 --- a/test_files/modifier_examples/even_dagger1.py +++ /dev/null @@ -1,41 +0,0 @@ -# /// script -# requires-python = ">=3.13" -# dependencies = [ -# "guppylang==1.0.0a5", -# "guppylang-internals==1.0.0a5", -# ] -# /// -"""A stress test for nested control and dagger modifiers.""" - -from pathlib import Path -from sys import argv - -from guppylang import guppy -from guppylang.std.builtins import control, dagger -from guppylang.std.debug import state_result -from guppylang.std.quantum import angle, discard, qubit, rx, h - - -from guppylang.experimental import enable_experimental_features - -enable_experimental_features() - - -@guppy -def main() -> None: - c = qubit() - q = qubit() - h(c) - with dagger: - with control(c): - with dagger: - rx(q, angle(1 / 3)) - - state_result("r", c, q) - - discard(q) - discard(c) - - -program = main.compile() -Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/modifier_examples/higher_order_classical.py b/test_files/modifier_examples/higher_order_classical.py deleted file mode 100644 index 9e1b0d064..000000000 --- a/test_files/modifier_examples/higher_order_classical.py +++ /dev/null @@ -1,65 +0,0 @@ -# /// script -# requires-python = ">=3.13" -# dependencies = [ -# "guppylang==1.0.0a5", -# "guppylang-internals==1.0.0a5", -# ] -# /// -"""Test the use of a higher-order classical function inside modifiers""" - -from pathlib import Path -from sys import argv -from typing import Callable - -from guppylang import guppy -from guppylang.std.builtins import ( - Unitary, - control, - dagger, -) -from guppylang.std.debug import state_result -from guppylang.std.quantum import discard, qubit, angle, ry, rz, rx -from guppylang.experimental import enable_experimental_features - -enable_experimental_features() - - -@guppy(unitary=True) -def apply_c( - g: Unitary[[qubit, angle], None], - fun: Callable[[float], angle], - q: qubit, -) -> None: - a = fun(0.5) - g(q, a) - - -@guppy -def fun(f: float) -> angle: - return angle(f) - - -@guppy -def gun(f: float) -> angle: - return angle(-f) - - -@guppy -def main() -> None: - q = qubit() - c = qubit() - - with dagger: - apply_c(ry, gun, c) - - with control(c), dagger(): - apply_c(rz, fun, q) - apply_c(rx, fun, q) - - state_result("r", c, q) - discard(q) - discard(c) - - -program = main.compile() -Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/modifier_examples/higher_order_function_w_loops.hugr b/test_files/modifier_examples/higher_order_function_w_loops.hugr deleted file mode 100644 index 67199738597acdc8ce1d9f4c21d20a5405de3e19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16791 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 None: f(q) +@guppy(controllable=True) +def apply_if(f: Unitary[[qubit], None], q: qubit, b: bool) -> None: + if b: + apply(f, q) + + @guppy def main() -> None: q = qubit() c = qubit() - h(c) + x(c) + flag = True + with control(c): + apply_if(x, q, flag) + apply_if(h, q, not flag) + h(c) with control(c), dagger: apply(s, q) apply(h, q) diff --git a/test_files/modifier_examples/modify_array.py b/test_files/modifier_examples/modify_array.py deleted file mode 100644 index ce714b43f..000000000 --- a/test_files/modifier_examples/modify_array.py +++ /dev/null @@ -1,46 +0,0 @@ -# /// script -# requires-python = ">=3.13" -# dependencies = [ -# "guppylang==1.0.0a5", -# "guppylang-internals==1.0.0a5", -# ] -# /// -"""Test control modifiers on an array element""" - -from pathlib import Path -from sys import argv -import sys - -from guppylang import guppy -from guppylang.std.builtins import control -from guppylang.std.debug import state_result -from guppylang.std.quantum import discard, qubit, array, discard_array -from guppylang.std.quantum import h - -sys.path.append(str(Path(__file__).resolve().parents[1])) - - -from guppylang.experimental import enable_experimental_features - -enable_experimental_features() - -hugr_pdf_directory = Path(__file__).resolve().parents[1] / "0_hugr_pdf" -hugr_pdf_directory.mkdir(exist_ok=True) - - -@guppy -def main() -> None: - q = qubit() - h(q) - array_controllers: array[qubit, 2] = array(qubit(), qubit()) - - with control(q): - h(array_controllers[1]) - - state_result("r", q, array_controllers[0], array_controllers[1]) - discard_array(array_controllers) - discard(q) - - -program = main.compile() -Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/modifier_examples/nested_multiple.py b/test_files/modifier_examples/nested_multiple.py index d9e9e075d..dfbf96625 100644 --- a/test_files/modifier_examples/nested_multiple.py +++ b/test_files/modifier_examples/nested_multiple.py @@ -36,10 +36,12 @@ def main() -> None: h(c3) x(t) with control(c1, c2): + f = 1 / 3 with dagger: + a = angle(-f) with control(c3): x(t) - rz(t, angle(-1 / 3)) + rz(t, a) h(t) state_result("r", c1, c2, c3, t) diff --git a/test_files/modifier_examples/simple_higher_order.hugr b/test_files/modifier_examples/simple_higher_order.hugr deleted file mode 100644 index b9b524c8bbb52b6423dc3db73133f7d1ce6fb0b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10609 zcmV-%DUQ}iRYy{3NJ@4BK`6B^{Qy|?N&#vsa&cH7(m|qheXgcn=*=^}a3PPID_w){ zPms9INOF~Z|7~`Sn&bTCZ_(S6+`0ZcwIZmti20|vOr@8rG|S6m`7l{e zCJJBP(#u?$MZ;trnXIFE^yM+VOr}{fCTli%^wCkGZoIy|bU*ku!JZqIZm#;d;l++zB&xuFM_Z zypg%HAH6dny~8wjlID)leA3*Ru6H)}j&1JD=1R^y`p%|$XH>mHVy=joD=#yN@61Z? z3`?(kn5!P7CK(oz>|D(&}wkZ*yPgro*Hu2Nl;-}L3opl{RZ?K-{neI@42 z%-*+hZ>9Ca%&kBDD^sYq67{9b`{tA8S#zt7twQ>?DdkoppUtgf%lTJxD-$KYm8#AB z;Z`ag=0N<)egA7ReJhtv`i?_!pZevAOSwV!N#bwfJtwY7V-MnT!JcbI;M9i zX(f}wY4|z22u_7K4PRrR6m(kK^alAVP3 zsF#LYn$Vq?(^3{u)ly3N0WvM6loaUFVx*K(N+(fTN}!UITd8_$l%_RGZ=C{VN^hmo zRf0|{mELNFRx3Ox^}f|gZ^hEIV(G0}7N8XL)w1NYX6db4T1$to4N%&BtCn6`w{-Xl z0j2R5KJ=0s!bogolr5fLgrZ-K8uP9JT`qnhP zw5sXwbp=X6zEur#T%M zX{WR#p;Owbx7AC7t&-4}2J59UjM7;A(zq$CDUBAMCMtzrnhO>;Rg!XPv|ic@T2+#g z(r8V8dTBsV)M>ivrL~rD)AUVmjZ;LLrd7Rl%?HFZCDU8WNI*+dF1@u&hp##)NlELJ zrd4{Y6{x7D!QMJWq)1aFy;axY>j_Fy){3KPkKX#D!`GUUl&enxD8-23I4OUYa*9$0 z9xRp;a^=7bkHphc(R0dU_7s(UQb$FDewv$K#lb*wi)yYZ614ICZPR}IlkZ_A}y9^@snL{KLV*xKzTe-7jzYLdR{Hpa|nR&;%})3Tngsc-GIE^t!a1Q7^MWb^XZ}pDGxDw%R0|$&ch?I zH1P09Jg4U!CNn(Jj?^mm@JK-66r~Ks@JKVjAmtRtar#yma*GNAdDjJ*+<@Z}U=$%` zA66`6$j3>~NT*ISJQ9)%FSKy<@JKHNS>g1o!g=gqpCU6nl8)1J3ON`B92`Vs&L+Rz ztb7(LoR3M*MW<)n=?XJE60Qdeu4kefM_j@QJaod1>)C{%7iM@Q6Hd=HYCJsB(QlN% zK4%+j9v;a?4X$Szr$K0(o@eB^3Yp=NX5_dAnc!egT6kj2RvYM$in8TB2dBI833{1j{HK zLWm1L?Xz0ZK68GWu6}xGMeCpy_YFiTgI2WmS#b|liBj&0)-9}7O^Y~x#pTH70=%qbkMG8x@&ruP4BkpQ2Z{@KHH{W#4^e4277m^!>?|F zAuXQcF6msw`*kLRlHv&xDZ+Es4!3^E<}^U!BYfV+&wX5m&wX5|=Q4zt>swsxhi@UC zMRv*V`iy=4uoLl6hA3P~lHfc_ck_;So=zx=>ilpXfiE4G2dPFH;S<@CiaR}Brk z_5Eah0uO)jG89*@27Ko%7hfuX0dFnftS=8=Dxin&d_Mf;6j!$)6i28jfji)l6~9EF zlWu8jA(!Z)pmd=KgbMz~q#Pqq2UNN}1yqwm_m`|toS8fl;e}#FW3X_Za-dc_w$W4@On+R zrrmt_xEhIOPu<+WC<9Q;wf43jiHmTX9SS9 z>q$-d4&;qeR{RpBNHt~{ zEy-lS_#&|VK->)>wD@UQ+>ca(jT+FKu~CEfx(PlbhwEhiBjs}N+yO;7EB`U!AIZpQ ziATzXF%OJwFun@^YWYXv?Q~JM7IJBcx6?%}Ekz;aGV?I|U>u&M-0zST_ob%yRn_}i z)B9r6JwQw;_r*l->rMAunLScw57YF(m%f*-x+iHag>{e7ieCEDJ+`^jMfZfbUP_}= z$eBxVbP6MW^im<6!puzJWv1vs*GtDv@noi;VWt2wkG^!Omr`|#qq%fSr(iLIzSK%D z#nLHUlO|`#Wv`a7j(lj%Z7G~0}%%jt!%%x|V=9{!5lXf)!WiDOQOW8C{#-y>B zH3&3LFP+o1iCK}Db%<6k4A#}lTo|ou4?w*z7hRvsO2e!`CJJBJjb0dzu1B-VnAJ6p zzOW&^up-?-mlj2n;SdRVmO1oF*Uuhs+P%_G9{+WOpJ-%*qfGxnH!tavMV#_ zD|@eO)iNnl=9{vl6}_^bUKvoY%tgywQ_7X$dSx^^7K9mVV#bJ=hcZ|8qgN)RV?)f9 z73r7{v&L7Z>y?cilQLtz8B3Z;d}UJ|+c9HCGiIByaGn8kWmXy{XTp@2Fe4@`%)A2T z%DOZRhzYwgVNxcHX&wP{Wn~(cG+{d?%xJ=9YZ?|#DrZt9CN(oJWv(nv(=d|)G3k{_ zee*ZW65?=5n=5AN6}7ZWiMb+|c9{Xw zD~f4Xn7JaEc3qh@z9O1-NtrI+bTLiWj`^s$Vw-juO_y!1_@-UqWb+m2^on)5C1)nNlw6=;a>W0y39{bW6qz`m&K;M$#=7b9ro5 zEIt-vDZk9Ri^Z<9c6jGANh@q$ubtgSa84J|cKT2*Yku*i5}kzt)V!a^g1 zrKVYIT1pw5vfLQ4-mvDhV8vn4X}#5Iacc#T(0Ag94f&ia*4EhCwV1S~T2X-T6>AGi zOBtIh(pHxzz9MarL83LLTV>F+)U=c*cx|m|wPB*gL@Q3K<#M%H=AyZNTt6;a$`HJ| zh;TQEXt-$Lz|o_n^uVi22n<&bAw!JJTtkfLT1pJOx^^xmt|`}4lqs$%GF($!Ra{oG zxVE^yw3J$2U1D5hTxTfYS`&op%@2Q_1lJr_9akI|9akNn*IzB!3r3^;w3Jw0UoKum zFB&f#uO32*ypX)cSJW$b44Q9Qh&B;bW*hgX*um=~DWnAeyWnAezB8693# zQ(jEu@D=N;4to~-oWO- z=)i!*fzf$O8GMbkVjQEzfLh9(%VI8KM6wvJMU04qm{1INqlK7|Au(N$Sdhl3VpC#O zdc?N;h>20*d!tyHTnvqxjj?Gdlbpuf*kW&Db7FO5m%&;})_Y_y8BMlA1|%bDDO;~H z8ZsI(96d4|vK}%avLZ4hRW{0^WWgcGsO&(dC5{YC6S6ZhG%_`^HL^A}*&H2+trp@> z81aXSE{JZll=~{`5Pyh5L?bO__#V-SP8`K3ajK=9uVR!QF^Wh|*uBBYPGLxw& zOvOq|3FI@*!dtlTm&#(8%$b(*$1A7ds+N+4S7y_K*KiwVqNVil%5iuO*J&wNc%7|g ztr^$ZiaG;wLDVxNqR~?JxX1bw)*JQ(DR$ zud^yGW>l=SlsaB#S$f8$rA*;<_N8a`MNCVX<8?-6R%Vu_r9|O7ThmhFc%8MGxtYCb zDUV)fb6Uz1ez_v;R!eEZYcuVqrM&SLy`nZyOIgBc3(>~)4IJA)T1p$IJ!Bh6OIhQ! zM_KQhNlRH@d#ZMn6|khxU8>Vj6HmXcp94O(%ul(LJp z4rwW47ik?^O4y|gzv5P^mXf~KDJ|vevs#6QYNe%|Vy#(PO4oVnmX2joy-=4DL4 zB_P3tVlbHzFpL*0g1dOo0bt`H4)ihqxey@e8H@Psm<1u+!h-TJC+$O}P#^a8Q)vPyhyc?Ke>I z2tVv|8=kNTEVv0KI0tTc>Q0(4?L8@&R=HTcv%LN}mV1SlVZ;^m)+IG-!vqTzY7= zw9jVg<50wQ?oSilnS`+4O;mq}*kqci;4GoZg+&p(th0(rKT%bNVXYK6LB!WkphM{Z5gT zTUWH+)ruZMNT{fAP`w^gO;_sydAk~LR~!0`QNbUt$3r(J)pWHay_)Zdw*&IV(KkXd z>87N5O*I|39*{>5CiO@K8gCml{YpRG3ZYufR2 zNKWIDrcp@~FSs;hG@}M^$J-?#;`Mm7->#NqR~vaf7izzx+D+)k)9svez8Y^=`+-zT z(yRSOD5)I~Di~E8nQBf@!CsRXHKM4VFG&s96!ZaqydIAvP&y^MrX7@&lO8twc)lR8 zmIO+tq?V*t^NmbVL0;{rt2vFM)D*CW!|`^tUyV1`uzRW{>D5M{4*08$N`N(>uO~Go z871L-)TkZVctyM&4<1c=NVuXRT#>K$Ld^&_1PIkMIxRVkN}6;{w%Slp?a1cDX$Qrm z+xc`b*lI^M-4xJfgV7C#Gs4x5Y)Mo$9k$w$jcJscBJ$g{00kA~>0EFcop{0Cj#^U< zNA<+p`G88c+L28PXtUu~Vi>B*BPQ&Uq$PMiS8-gasB@ICA935hF&7AhF3{s}131s0|^p9kJDh zie`{O1|GKB5LFW|m}JQ}Ht9jxYD41>N|&T|WSjEocsnLrZHS5riLEw-gv!Q)7ku*R zY_%hs)6Qrq$V4ag!jKtiM>b$kinp`XhHO4;wIdsF%Bja>s}234bUvNb=nDdCLsUp+ zs2v5PqIykDzg^VM*Yq2mY_%cVlO!HC8)`?kCrLbPzEP@Ys|``vP&=~KhHRMOLL3A+ zDjN-*Oo)b#sOVO7!_`3agVOPQBapWvicx#A)mTyZdO)3T%prN>(+BQ>91<#9k!*|_ zeZik@j56Z&c0e7l=PT0npppQ2JENzdQIS(G3WviP-HdFtquLOat>~7!71?S>Hd}4T z78L~YY_+2wwlPY_v)M316hB^XC;Rb6pp$XQ>EkbWFz-Olwlt+JiZM#Zll{xAVRUoS z)B?;i&@cYtVSdWrGQoi1U!VxLBk~SH@Pqi4+=H0k@*i^lVM4i<7UBW(S^j|Bv&=u> zSaQcQ&wx1sr|xOVD11-`xEX)a;*WqT+=DUP5l|%OKsg+T+@}-;`E!`KS3QURlq%e( zyh-jlv?zai$L;ctM@)N(%?73+X4$~J^MvO(#1PrIMZh9g@IwjrCZ=kxUd{&=h&58IKg$!0?oaQ>f*ko(WP2w#!= ziuu{x;je!EEcZG;yO_H;U%1$I<5L^p{+fTyv(92Dp5U{bz&!}i4*moj4stkg7z#N2 zS>(jO{5yd=4rm9z_=JdioI@e9_=zJJ2M5BRID+N;%STjk)qRiz6J5@o_$kLZoJ)BY z_uyaV!QcGLGkDR@;vM|*EY<-ISO>?!61>E1U;~Ch5^Mt~oW#Eux#|e6`VnFazUD`W zGx(Qf@Tz~g=#*h_W1^x1{gq$P0)D|;Py`q87!*Ep6`Wxe{LBgX1TXVk(3H;C!lw%| zxj6xUx2MU|K}|_X1)riQ!Drl*@QmO#Za8%N_{BV8Aeo zVQ_$71aTNJI0Ho-MC2W+FqaGP1%hBM4`K^%Ig}r`%D+mZ%_*R8+cmjT_!bH#Uv-kjFj(?d-4&LF$L z5x(TN-EIW)aUvKn_yiO9g^d&aEPmnQ5@xWC ze|d&j^e-C~F-~Ohw;?9_mtVN}#b5lzPx*z5RXoLEh%f%-*=-`wzZ`oVfk*IR9~R6) z1*=HGDP~+h69a}hsB;7~Q3ZmSaZZt;nGu;y+and=P>4__lPtT^dJ{l}O^XC6#bOLa z8G{f(1Q|kzArgp)h)_w=wgF~$SCk=C@#M*B=dKWylffmG_88WzN9(yJXNfIjy=68F z17Lo8*#eC=5kc3@R?s~4yaNd(CN-b>wCa<&|nz#Q+JJY0krqIChH)GS^r z&qGMH%D)de^Me27b`|q@kakf_{xZre1vfPTP21MbOtD-Mv;2GufG(V(mfiHGX)CH2 z?zu1#I6k>2V$w#JeA!d7bL&oLTo{eQI-~0tk~n%J#!`2UV1SC6H;Uw7Z@;CP$jG(K zfNY?sWQK9)-ZE!12U<%k+9w;mo8?0)7!j9kA+zBZ%li)za#?qb+l3;)w7zQVZ!iYs zBg_3J86t)_YaHa-Qd^Scr;v_7y?fY*Ws0RX9Yk2=wJ!~ zkC1H_m`yJgR{6P>gI#oScG2h=D4bg$NWMWP7%o(}jdm?cjB^2DQTFk` z+@8E)SZqXo$hD9#tBuqKOXWsQMQJxQx&U~SlPS7`2+9$HB9`628Y9dv?4f5KX^ti5 zj-%!yC^96RinL{s?-_v?4~hFk1U5oJdz1-J&`k0CR~hsi(Y4$Ga<eF{-HtmRw(a%wTRzYv#nj&wZYrYz!E z;B(tlzg0cEdM{AyAC^1MGrEU&yhxt21>Cl)4eh8+_A_p~9-TqC%A$p8U%Iu* z{}@u)3Sn&)YH~-=L1y5V=)xQEYpaBd+{!PuQpDkf%9{RIRw?DO#i5Syk=B|CR(>OjJqB(|Qj)U`k%&RA|aY ze?MP*Dt&Tdk42a3K&l*bS#i6VlzoP^i4EasBCdPn@=ZW4f8PMYI zwOC_QK|61fyvQw|I`cqP>!GbHsl&*_*J>!z^yljn`yp#3>vk?a%?N`XwDy;935ySn zto<@)7LISKZq`+My(ybKR_h)gE?A{Nsm z!XdpO&|aZ;yyh8fH=L-FWY3d1N0US=e&`WNUIPNYmW0Bztepx~PJ30K+j3HK-!^o$ z8xR5^rJbOc9IK7c$?F#lFR|$}ZGk^g1rP4oa3m*@2ODJvrZw!5moI%RpvKC}gL)dk zUtwPik)1Q<87+VUZy2aiE^%Gc*1e0GB2t6DwMnK%1Z69XXR55)l|LyOx|) ztYhuG5S_RdwU%!Ipp>|*!@8yUbZ*$ZG^2|&3TMzoS3#MI)r1dr1V2&?l75COiAkyy zvzx^X%iD0nXsSK{@@`lJ;=6)z&jpZ5M-t5CzG$KNXe)9sV0??BT(D6tZ|P_|I&BKP z+H`y9CD#Pe1EmxTfhE&ECPIP5}+X-%} zyS>7lLAQi(x5f)A8OG_o-i14_+Fs05BgHWQ3@2!Uiv4^M2ts{CB-{Qx6v_CrMhvw{ z{niF9dqD_)b%l#|D}rL*t}Q+8fZI%RXsSS3j29DoEe9QFPB5kAWPL^lUT;4}#mQ2( zB#w9H)zGuOA;^jdQlg*NOB#0;(du3bE_y4U9deI4GmL9!gbW&N*cygw0z)ELDYOV? z@UO(fiEZomYlS2L)L?wr%}bCAO+%J(h0t^Y-*6qNANM<|dxJ*iVAEn_SMiC|3i{Cy z#`=QFr-WKN-SlJM5XM}k|M?n&ldf)Twl?Y*q8?V92!+H92GEWWTm01M3~HM|0?M@I zLs-JM&6}((I5$(eQ#l}#IpJ<-Qio}erPMF9M{V5MZKXM_Un9E1lbQN`IWgH-VRFW4 z8?N}O#Vc@b!K69E_&V)wPCUPt;z9-g{KDJNM{H4*y|c-e6KBNpoT2N9KXEz_4a3}7 zUjoe!fack8Km{9(rlN4Ya*E7EaUt-^Xo#*U8%vCul8ZfeQohZyA00Re;Y#reB(#Ef z@3CAN`k9q+z2y+EJG)!Dv8{Rw;h9c}`T<)vDHzo(rgcF(y`*8BRN7bYNvzU-=c>^L zjqN@ahaB@dSn(30|Am(S|F5a~c*|KzF5bULuKQNR|4|V0cj{PqntWcLe2?&7&>P|8 z7;qn-;3}0Mod$8`+7P0rTpkXCPQ3=6M?+@*98N`k#{E4rNra$a>R>uNjFkYOTN@pP z>)*Sp%r9Ubm1I)STnukWsvWPrc2S?n56A~{BJwBH5}!yIT*12wH?j!g-&vB+0VEQ) zgq|H7Q#Wl#no^7h!{Wuk#3&B8oL%uOC3*n#j=k_~L(iokzIo!r3FLr=Ai4Aqy zBDRl{mO3Q*GHgMiz9~Oa4EW9wBPzXZgzu(WP(Rq^{f`l1-Ur`o5VRRLH}sk*^IlL~ zP0sxSQ2=0zEqh7g03){580P=dZ~P(f$k-#`D{;$H_I-o%N>mT|Om^qzzaxZPngXLnzV zgw`GV+{#XuGYBrrx-YQYY9hjAnS=|TO&8GK!eRuux^{{C)vik+Gh~UPc*wv^ORb?H zIU`A0It3f=7UDCtsKMiIv1aH3X{kQufDeP%*86iI>Wv2v4{f765 z^g_&rd#ast2-=c=$4}3O4;+g@u%(;!6Qj^l^r`E6fAh;s>ZfqytOHg`H4=046>2N(p*pX~gpMV5Y{Aj_8KghpATstwaJ1=_ z>hSPKY8GbKp_7~z=kwUWojLE0p1e^z^Xp-w1u>Ppa>`XT@omyq^MeuZ#2W^ntGv>W!%h14{fCkb1u= zZ`o7IY6h9L3WuC%XV{!|z8KI|s}1T?)R9=CJ}w(Qd&ULe9U**FZ@&yVDNP_7$uz(> z>G7jssBlc5o9u7|j7%QK1Ip_;B|*NT+J@l4`9*^;l^RH)HlQ&_bMjOA9Ln>qt;p+S z(fqNyL+DJ<=VyW)tOb@rRDZ`7PALxHm8B%HXbyN%Gy3sUw~CncRct8^AY>uUS!xtA L_$G-*uL*Pkl|xeJ diff --git a/test_files/modifier_examples/subscript_in_dagger_ctrl.py b/test_files/modifier_examples/subscript_in_dagger_ctrl.py index 74a94afe3..4c1601e90 100644 --- a/test_files/modifier_examples/subscript_in_dagger_ctrl.py +++ b/test_files/modifier_examples/subscript_in_dagger_ctrl.py @@ -34,17 +34,17 @@ def f(controller: qubit, target: qubit) -> None: @guppy def main() -> None: - controller = array(qubit()) - array_qubits = array(qubit(), qubit(), qubit()) + controller = array(qubit(), qubit()) + array_qubits = array(qubit(), qubit()) h(controller[0]) x(array_qubits[0]) with dagger: - with control(controller[0], array_qubits[0]): - f(array_qubits[1], array_qubits[2]) - s(array_qubits[1]) - h(array_qubits[1]) + with control(controller): + f(array_qubits[0], array_qubits[1]) + s(array_qubits[0]) + h(array_qubits[0]) - state_result("r", controller[0], array_qubits[0], array_qubits[1], array_qubits[2]) + state_result("r", controller[0], controller[1], array_qubits[0], array_qubits[1]) discard_array(array_qubits) discard_array(controller) From 22df1445816e79f284f703e8cd3d161d16067fac Mon Sep 17 00:00:00 2001 From: nicolaassolini-qntm Date: Fri, 19 Jun 2026 14:20:06 +0100 Subject: [PATCH 10/15] nice refactor --- test_files/guppy_examples/use_of_power.py | 3 +- .../array_swap_in_dagger_ctrl.py | 38 ------------------- test_files/modifier_examples/cfg_in_ctrl.py | 3 +- .../modifier_examples/classical_function.py | 29 ++++++++------ ...r_loops.py => complex_cfg_higher_order.py} | 20 +++------- .../modifier_examples/double_modifier.py | 10 +---- test_files/modifier_examples/even_dagger.py | 33 ++++++++-------- .../higher_order_recursive.py | 6 +-- test_files/modifier_examples/justfile | 3 -- .../modifier_examples/multiple_functions.py | 20 ++++------ .../modifier_examples/nested_multiple.py | 13 ++----- .../modifier_examples/simple_higher_order.py | 12 ++---- .../subscript_in_dagger_ctrl.py | 11 +----- test_files/run_modifier_examples/justfile | 3 -- test_files/run_modifier_examples/run_hugrs.py | 5 ++- 15 files changed, 66 insertions(+), 143 deletions(-) delete mode 100644 test_files/modifier_examples/array_swap_in_dagger_ctrl.py rename test_files/modifier_examples/{higher_order_loops.py => complex_cfg_higher_order.py} (78%) diff --git a/test_files/guppy_examples/use_of_power.py b/test_files/guppy_examples/use_of_power.py index 376510ce9..291cafb6c 100644 --- a/test_files/guppy_examples/use_of_power.py +++ b/test_files/guppy_examples/use_of_power.py @@ -11,8 +11,7 @@ from pathlib import Path from sys import argv -from guppylang import guppy -from guppylang.experimental import enable_experimental_features +from guppylang import guppy, enable_experimental_features from guppylang.std.builtins import control, power from guppylang.std.quantum import angle, discard, qubit from guppylang.std.quantum import h, rx diff --git a/test_files/modifier_examples/array_swap_in_dagger_ctrl.py b/test_files/modifier_examples/array_swap_in_dagger_ctrl.py deleted file mode 100644 index c547e2024..000000000 --- a/test_files/modifier_examples/array_swap_in_dagger_ctrl.py +++ /dev/null @@ -1,38 +0,0 @@ -# /// script -# requires-python = ">=3.13" -# dependencies = [ -# "guppylang==1.0.0a5", -# "guppylang-internals==1.0.0a5", -# ] -# /// -"""Test that array swap in a dagger and control context works correctly""" - -from pathlib import Path -from sys import argv - -import guppylang -from guppylang import guppy -from guppylang.std.array import array_swap -from guppylang.std.builtins import array, control, dagger -from guppylang.std.debug import state_result -from guppylang.std.quantum import discard, h, qubit - -guppylang.enable_experimental_features() - - -@guppy -def main() -> None: - arr = array(1, 1, 2, 1, 1) - q = qubit() - with dagger: - array_swap(arr, 2, 4) - with control(q): - array_swap(arr, 0, 4) - if arr[0] == 2: - h(q) - state_result("r", q) - discard(q) - - -program = main.compile_function() -Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/modifier_examples/cfg_in_ctrl.py b/test_files/modifier_examples/cfg_in_ctrl.py index 4d047688e..2e50286a9 100644 --- a/test_files/modifier_examples/cfg_in_ctrl.py +++ b/test_files/modifier_examples/cfg_in_ctrl.py @@ -10,8 +10,7 @@ from pathlib import Path from sys import argv -from guppylang import guppy -from guppylang.experimental import enable_experimental_features +from guppylang import enable_experimental_features, guppy from guppylang.std.angles import angle from guppylang.std.builtins import control from guppylang.std.debug import state_result diff --git a/test_files/modifier_examples/classical_function.py b/test_files/modifier_examples/classical_function.py index 6116fdd3b..3f1d41d51 100644 --- a/test_files/modifier_examples/classical_function.py +++ b/test_files/modifier_examples/classical_function.py @@ -10,13 +10,11 @@ from pathlib import Path from sys import argv -from guppylang import guppy +from guppylang import enable_experimental_features, guppy +from guppylang.std.array import array_swap from guppylang.std.builtins import array, control, dagger from guppylang.std.debug import state_result -from guppylang.std.quantum import discard, qubit, angle, measure -from guppylang.std.quantum import h, rx, x - -from guppylang.experimental import enable_experimental_features +from guppylang.std.quantum import angle, discard, h, measure, qubit, rx, x enable_experimental_features() @@ -35,17 +33,24 @@ def main() -> None: t = qubit() c1 = qubit() c2 = qubit() - arr = array(1, 1, 1, 1, 1) + arr = array(1, 1, 2, 1, 1) + # Testing that array operations are happening in the correct order with control(t), dagger: - arr[0] += 1 - arr[0] *= 2 - - # testing that array operations are happening in the correct order - if arr[0] == 4: + arr[1] += 1 + arr[1] *= 2 + if arr[1] == 4: h(c1) - h(c2) + # Test that array swap in a dagger and control context works correctly + with dagger: + array_swap(arr, 2, 4) + with control(c2): + array_swap(arr, 0, 4) + if arr[0] == 2: + h(c2) + + # Test that dagger and control does not affect the classical function with control(c1): d1 = fuu(2) with dagger: diff --git a/test_files/modifier_examples/higher_order_loops.py b/test_files/modifier_examples/complex_cfg_higher_order.py similarity index 78% rename from test_files/modifier_examples/higher_order_loops.py rename to test_files/modifier_examples/complex_cfg_higher_order.py index 3f7cf1797..2f5e7697c 100644 --- a/test_files/modifier_examples/higher_order_loops.py +++ b/test_files/modifier_examples/complex_cfg_higher_order.py @@ -5,24 +5,16 @@ # "guppylang-internals==1.0.0a5", # ] # /// -"""Test the use of a higher-order function with loops inside modifiers""" +"""Test the use of a higher-order function with complex control flow inside modifiers""" +from collections.abc import Callable from pathlib import Path from sys import argv -from typing import Callable - -from guppylang import guppy -from guppylang.std.builtins import ( - Controllable, - Unitary, - array, - control, - dagger, -) + +from guppylang import enable_experimental_features, guppy +from guppylang.std.builtins import Controllable, Unitary, array, control, dagger from guppylang.std.debug import state_result -from guppylang.std.quantum import discard_array, qubit, angle, rz -from guppylang.std.quantum import h, rx -from guppylang.experimental import enable_experimental_features +from guppylang.std.quantum import angle, discard_array, h, qubit, rx, rz enable_experimental_features() diff --git a/test_files/modifier_examples/double_modifier.py b/test_files/modifier_examples/double_modifier.py index 22913ebab..a653c3c6f 100644 --- a/test_files/modifier_examples/double_modifier.py +++ b/test_files/modifier_examples/double_modifier.py @@ -12,17 +12,11 @@ from pathlib import Path from sys import argv -import sys -from guppylang import guppy +from guppylang import enable_experimental_features, guppy from guppylang.std.builtins import control, dagger from guppylang.std.debug import state_result -from guppylang.std.quantum import discard, qubit, angle -from guppylang.std.quantum import h, rx - -sys.path.append(str(Path(__file__).resolve().parents[1])) - -from guppylang.experimental import enable_experimental_features +from guppylang.std.quantum import angle, discard, h, qubit, rx enable_experimental_features() diff --git a/test_files/modifier_examples/even_dagger.py b/test_files/modifier_examples/even_dagger.py index bece7caec..316ab6066 100644 --- a/test_files/modifier_examples/even_dagger.py +++ b/test_files/modifier_examples/even_dagger.py @@ -5,43 +5,46 @@ # "guppylang-internals==1.0.0a5", # ] # /// -"""An example with an even number of daggers, which should cancel out""" +"""Test that an even number of daggers is equivalent to no dagger at all""" from pathlib import Path from sys import argv -from guppylang import guppy -from guppylang.std.builtins import dagger, control +from guppylang import enable_experimental_features, guppy +from guppylang.std.builtins import control, dagger from guppylang.std.debug import state_result -from guppylang.std.quantum import discard, qubit, angle -from guppylang.std.quantum import rx, h -from guppylang.experimental import enable_experimental_features +from guppylang.std.quantum import angle, discard, h, qubit, rx enable_experimental_features() -@guppy(unitary=True) -def rotation(q: qubit) -> None: - rx(q, angle(1 / 4)) +@guppy(controllable=True) +def rotation(q: qubit, f: float) -> None: + rx(q, angle(f)) @guppy def main() -> None: c = qubit() q = qubit() + flag = True - with dagger: - with dagger: - rotation(c) + with dagger, dagger: + # cfg is normally forbidden in a dagger context + if flag: + rotation(c, 1 / 4) - with dagger, dagger, dagger: - rotation(c) + with dagger, dagger: + f = 1 / 4 + with dagger: + rotation(c, f) h(c) with dagger: with control(c): with dagger: - rx(q, angle(1 / 3)) + # rotation is only `controllable`: fine since we have 2 daggers + rotation(q, 1 / 3) state_result("r", c, q) diff --git a/test_files/modifier_examples/higher_order_recursive.py b/test_files/modifier_examples/higher_order_recursive.py index b35cb0550..e65d53a69 100644 --- a/test_files/modifier_examples/higher_order_recursive.py +++ b/test_files/modifier_examples/higher_order_recursive.py @@ -10,16 +10,14 @@ from pathlib import Path from sys import argv -from guppylang import guppy +from guppylang import enable_experimental_features, guppy from guppylang.std.builtins import ( Unitary, control, dagger, ) from guppylang.std.debug import state_result -from guppylang.std.quantum import discard, qubit -from guppylang.std.quantum import h, s, x -from guppylang.experimental import enable_experimental_features +from guppylang.std.quantum import discard, h, qubit, s, x enable_experimental_features() diff --git a/test_files/modifier_examples/justfile b/test_files/modifier_examples/justfile index ed80d92ba..37deb9165 100644 --- a/test_files/modifier_examples/justfile +++ b/test_files/modifier_examples/justfile @@ -2,9 +2,6 @@ help: @just --list --justfile {{justfile()}} -# Re-generate all hugr files -r: recompile-hugrs - # Re-generate all hugr files. recompile-hugrs: #!/usr/bin/env sh diff --git a/test_files/modifier_examples/multiple_functions.py b/test_files/modifier_examples/multiple_functions.py index a0afb3b15..4da997552 100644 --- a/test_files/modifier_examples/multiple_functions.py +++ b/test_files/modifier_examples/multiple_functions.py @@ -5,22 +5,17 @@ # "guppylang-internals==1.0.0a5", # ] # /// -"""Testing a dagger modifier on multiple functions""" +"""Testing a dagger modifier on multiple functions, to ensure that the dagger is +reversing the order of quantum operations""" from pathlib import Path from sys import argv -import sys -from guppylang import guppy -from guppylang.std.builtins import dagger, control -from guppylang.std.debug import state_result -from guppylang.std.quantum import discard, qubit -from guppylang.std.quantum import s, rx +from guppylang import enable_experimental_features, guppy from guppylang.std.angles import angle - -sys.path.append(str(Path(__file__).resolve().parents[1])) - -from guppylang.experimental import enable_experimental_features +from guppylang.std.builtins import control, dagger +from guppylang.std.debug import state_result +from guppylang.std.quantum import discard, qubit, rx, s enable_experimental_features() @@ -38,11 +33,12 @@ def foo1(q: qubit) -> None: @guppy(unitary=True) def foo2(q: qubit) -> None: s(q) + rx(q, angle(1 / 6)) @guppy(unitary=True) def foo3(q: qubit, f: float) -> None: - rx(q, angle(f)) + rx(q, angle(f / 2)) @guppy diff --git a/test_files/modifier_examples/nested_multiple.py b/test_files/modifier_examples/nested_multiple.py index dfbf96625..4b1b74a08 100644 --- a/test_files/modifier_examples/nested_multiple.py +++ b/test_files/modifier_examples/nested_multiple.py @@ -5,22 +5,15 @@ # "guppylang-internals==1.0.0a5", # ] # /// -"""Nested modifiers with multiple control qubits""" +"""Multiple modifiers nested""" from pathlib import Path from sys import argv -import sys -from guppylang import guppy +from guppylang import enable_experimental_features, guppy from guppylang.std.builtins import control, dagger from guppylang.std.debug import state_result -from guppylang.std.quantum import discard, qubit, angle -from guppylang.std.quantum import h, rz, x - -sys.path.append(str(Path(__file__).resolve().parents[1])) - - -from guppylang.experimental import enable_experimental_features +from guppylang.std.quantum import angle, discard, h, qubit, rz, x enable_experimental_features() diff --git a/test_files/modifier_examples/simple_higher_order.py b/test_files/modifier_examples/simple_higher_order.py index 55df74416..33f77deeb 100644 --- a/test_files/modifier_examples/simple_higher_order.py +++ b/test_files/modifier_examples/simple_higher_order.py @@ -13,16 +13,10 @@ from pathlib import Path from sys import argv -from guppylang import array, guppy -from guppylang.std.builtins import ( - Unitary, - control, - dagger, -) +from guppylang import array, enable_experimental_features, guppy +from guppylang.std.builtins import Unitary, control, dagger from guppylang.std.debug import state_result -from guppylang.std.quantum import cx, discard_array, qubit -from guppylang.std.quantum import h, s -from guppylang.experimental import enable_experimental_features +from guppylang.std.quantum import cx, discard_array, h, qubit, s enable_experimental_features() diff --git a/test_files/modifier_examples/subscript_in_dagger_ctrl.py b/test_files/modifier_examples/subscript_in_dagger_ctrl.py index 4c1601e90..f505cddce 100644 --- a/test_files/modifier_examples/subscript_in_dagger_ctrl.py +++ b/test_files/modifier_examples/subscript_in_dagger_ctrl.py @@ -9,18 +9,11 @@ from pathlib import Path from sys import argv -import sys - -from guppylang import array, guppy +from guppylang import array, enable_experimental_features, guppy from guppylang.std.builtins import control, dagger from guppylang.std.debug import state_result -from guppylang.std.quantum import qubit, discard_array, angle -from guppylang.std.quantum import h, s, rx, x - -sys.path.append(str(Path(__file__).resolve().parents[1])) - -from guppylang.experimental import enable_experimental_features +from guppylang.std.quantum import angle, discard_array, h, qubit, rx, s, x enable_experimental_features() diff --git a/test_files/run_modifier_examples/justfile b/test_files/run_modifier_examples/justfile index d55bd1405..dd187045c 100644 --- a/test_files/run_modifier_examples/justfile +++ b/test_files/run_modifier_examples/justfile @@ -2,9 +2,6 @@ help: @just --list --justfile {{justfile()}} -# Re-generate all hugr files and their mermaid diagrams. -r: run-hugrs - # Re-generate all hugr files. run-hugrs: just apply-passes diff --git a/test_files/run_modifier_examples/run_hugrs.py b/test_files/run_modifier_examples/run_hugrs.py index 96e2069c7..d16a78007 100644 --- a/test_files/run_modifier_examples/run_hugrs.py +++ b/test_files/run_modifier_examples/run_hugrs.py @@ -7,13 +7,14 @@ # /// """Run on selene the passed hugrs""" -from pathlib import Path import shutil import sys +from pathlib import Path + import numpy as np import numpy.typing as npt -from hugr import Hugr from guppylang.emulator import EmulatorBuilder +from hugr import Hugr def format_statevector( From 28bfb4f1e7aa2ac2c9cb5101221fb05aa2c09e39 Mon Sep 17 00:00:00 2001 From: nicolaassolini-qntm Date: Fri, 19 Jun 2026 14:22:36 +0100 Subject: [PATCH 11/15] fixed test --- test_files/modifier_examples/even_dagger.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test_files/modifier_examples/even_dagger.py b/test_files/modifier_examples/even_dagger.py index 316ab6066..6acb5dda9 100644 --- a/test_files/modifier_examples/even_dagger.py +++ b/test_files/modifier_examples/even_dagger.py @@ -37,7 +37,7 @@ def main() -> None: with dagger, dagger: f = 1 / 4 with dagger: - rotation(c, f) + rx(c, angle(f)) h(c) with dagger: From baec37835bb292410056353d7dd27e5644e7079b Mon Sep 17 00:00:00 2001 From: nicolaassolini-qntm Date: Fri, 19 Jun 2026 14:23:24 +0100 Subject: [PATCH 12/15] uploaded hugr and npy files --- test_files/modifier_examples/cfg_in_ctrl.hugr | Bin 0 -> 10956 bytes .../modifier_examples/classical_function.hugr | Bin 0 -> 13238 bytes .../complex_cfg_higher_order.hugr | Bin 0 -> 16789 bytes .../modifier_examples/double_modifier.hugr | Bin 0 -> 5425 bytes test_files/modifier_examples/even_dagger.hugr | Bin 0 -> 8200 bytes .../higher_order_recursive.hugr | Bin 0 -> 7637 bytes .../modifier_examples/multiple_functions.hugr | Bin 0 -> 7621 bytes .../modifier_examples/nested_multiple.hugr | Bin 0 -> 7023 bytes .../modifier_examples/simple_higher_order.hugr | Bin 0 -> 10609 bytes .../subscript_in_dagger_ctrl.hugr | Bin 0 -> 13138 bytes .../hugr_results/cfg_in_ctrl_solved.npy | Bin 0 -> 192 bytes .../hugr_results/classical_function_solved.npy | Bin 0 -> 256 bytes .../complex_cfg_higher_order_solved.npy | Bin 0 -> 192 bytes .../hugr_results/double_modifier_solved.npy | Bin 0 -> 192 bytes .../hugr_results/even_dagger_solved.npy | Bin 0 -> 192 bytes .../higher_order_recursive_solved.npy | Bin 0 -> 192 bytes .../hugr_results/multiple_functions_solved.npy | Bin 0 -> 192 bytes .../hugr_results/nested_multiple_solved.npy | Bin 0 -> 384 bytes .../hugr_results/simple_higher_order_solved.npy | Bin 0 -> 256 bytes .../subscript_in_dagger_ctrl_solved.npy | Bin 0 -> 384 bytes 20 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 test_files/modifier_examples/cfg_in_ctrl.hugr create mode 100644 test_files/modifier_examples/classical_function.hugr create mode 100644 test_files/modifier_examples/complex_cfg_higher_order.hugr create mode 100644 test_files/modifier_examples/double_modifier.hugr create mode 100644 test_files/modifier_examples/even_dagger.hugr create mode 100644 test_files/modifier_examples/higher_order_recursive.hugr create mode 100644 test_files/modifier_examples/multiple_functions.hugr create mode 100644 test_files/modifier_examples/nested_multiple.hugr create mode 100644 test_files/modifier_examples/simple_higher_order.hugr create mode 100644 test_files/modifier_examples/subscript_in_dagger_ctrl.hugr create mode 100644 test_files/run_modifier_examples/hugr_results/cfg_in_ctrl_solved.npy create mode 100644 test_files/run_modifier_examples/hugr_results/classical_function_solved.npy create mode 100644 test_files/run_modifier_examples/hugr_results/complex_cfg_higher_order_solved.npy create mode 100644 test_files/run_modifier_examples/hugr_results/double_modifier_solved.npy create mode 100644 test_files/run_modifier_examples/hugr_results/even_dagger_solved.npy create mode 100644 test_files/run_modifier_examples/hugr_results/higher_order_recursive_solved.npy create mode 100644 test_files/run_modifier_examples/hugr_results/multiple_functions_solved.npy create mode 100644 test_files/run_modifier_examples/hugr_results/nested_multiple_solved.npy create mode 100644 test_files/run_modifier_examples/hugr_results/simple_higher_order_solved.npy create mode 100644 test_files/run_modifier_examples/hugr_results/subscript_in_dagger_ctrl_solved.npy diff --git a/test_files/modifier_examples/cfg_in_ctrl.hugr b/test_files/modifier_examples/cfg_in_ctrl.hugr new file mode 100644 index 0000000000000000000000000000000000000000..acbf8030eb34e2d59ab936f9c5a4d0ec00e063c8 GIT binary patch literal 10956 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 literal 0 HcmV?d00001 diff --git a/test_files/modifier_examples/complex_cfg_higher_order.hugr b/test_files/modifier_examples/complex_cfg_higher_order.hugr new file mode 100644 index 0000000000000000000000000000000000000000..172fbf8407eb4ca0e207267c726aa9c108bc8ca5 GIT binary patch literal 16789 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 literal 0 HcmV?d00001 diff --git a/test_files/modifier_examples/double_modifier.hugr b/test_files/modifier_examples/double_modifier.hugr new file mode 100644 index 0000000000000000000000000000000000000000..70f12fdfaf8eff3ef53e7540ea4cedcd20dc50df GIT binary patch literal 5425 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%0DrJr}nKvNe0t9mb3Jg}6G);ke7+l`jPojBNT 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 literal 0 HcmV?d00001 diff --git a/test_files/modifier_examples/higher_order_recursive.hugr b/test_files/modifier_examples/higher_order_recursive.hugr new file mode 100644 index 0000000000000000000000000000000000000000..40d4fbd70a1242cbd505982a698df4883435415c GIT binary patch literal 7637 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 DZ@kfq literal 0 HcmV?d00001 diff --git a/test_files/modifier_examples/multiple_functions.hugr b/test_files/modifier_examples/multiple_functions.hugr new file mode 100644 index 0000000000000000000000000000000000000000..69415fc729da40a837e24d792a20e980de23e22a GIT binary patch literal 7621 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 literal 0 HcmV?d00001 diff --git a/test_files/modifier_examples/nested_multiple.hugr b/test_files/modifier_examples/nested_multiple.hugr new file mode 100644 index 0000000000000000000000000000000000000000..8cd266909f796ece9cbf96e485e9b80ed9d3306f GIT binary patch literal 7023 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 N14K1HcCEP@!6o*^TL}OF literal 0 HcmV?d00001 diff --git a/test_files/modifier_examples/simple_higher_order.hugr b/test_files/modifier_examples/simple_higher_order.hugr new file mode 100644 index 0000000000000000000000000000000000000000..b9b524c8bbb52b6423dc3db73133f7d1ce6fb0b5 GIT binary patch literal 10609 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 L_$G-*uL*Pkl|xeJ literal 0 HcmV?d00001 diff --git a/test_files/modifier_examples/subscript_in_dagger_ctrl.hugr b/test_files/modifier_examples/subscript_in_dagger_ctrl.hugr new file mode 100644 index 0000000000000000000000000000000000000000..8484da6517e4669fb0a2d43cf76c4a4b365894a5 GIT binary patch literal 13138 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 literal 0 HcmV?d00001 diff --git a/test_files/run_modifier_examples/hugr_results/cfg_in_ctrl_solved.npy b/test_files/run_modifier_examples/hugr_results/cfg_in_ctrl_solved.npy new file mode 100644 index 0000000000000000000000000000000000000000..363df19a00df746eb3af067b49ff47cd15c743f9 GIT binary patch literal 192 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlWb_FuA`uymS0p-l$aNvUzCyxl5k7RDNY57 z7iT0EqyqUGCOVor3bhL41Fmz{^=b1KJhNxO0TNfPTlT2-#QqovZST@+bUu5+-TfX= F8UStyGL--T literal 0 HcmV?d00001 diff --git a/test_files/run_modifier_examples/hugr_results/classical_function_solved.npy b/test_files/run_modifier_examples/hugr_results/classical_function_solved.npy new file mode 100644 index 0000000000000000000000000000000000000000..88939d9124ffb94d48dd0b7ab4135cb97a563e25 GIT binary patch literal 256 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlWb_FuA`uymS0p-l$aNvUzCyxl5k7RDNY57 w7iT0EqyqUG7CM?b3bhL41FrvIaNnK*2Veq=KOkFvrBB3*s%^J%=)YhO0ICowR{#J2 literal 0 HcmV?d00001 diff --git a/test_files/run_modifier_examples/hugr_results/complex_cfg_higher_order_solved.npy b/test_files/run_modifier_examples/hugr_results/complex_cfg_higher_order_solved.npy new file mode 100644 index 0000000000000000000000000000000000000000..73574c94845e5638bddd1208a926db7508c52895 GIT binary patch literal 192 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlWb_FuA`uymS0p-l$aNvUzCyxl5k7RDNY57 z7iT0EqyqUGCOVor3bhL41Fmz{^=b1KJhNxO0X%w*&Sy`!Yag|8-LgluC-yr+`1|9a Fd;nExGK~NL literal 0 HcmV?d00001 diff --git a/test_files/run_modifier_examples/hugr_results/double_modifier_solved.npy b/test_files/run_modifier_examples/hugr_results/double_modifier_solved.npy new file mode 100644 index 0000000000000000000000000000000000000000..aceda8cdfde27714426ce60d751d6dc878bff064 GIT binary patch literal 192 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlWb_FuA`uymS0p-l$aNvUzCyxl5k7RDNY57 w7iT0EqyqUGCOVor3bhL41FkdH^=b1KJhNxO0dy5PMfzqu#*jY?)_2Vw0FJ~atpET3 literal 0 HcmV?d00001 diff --git a/test_files/run_modifier_examples/hugr_results/even_dagger_solved.npy b/test_files/run_modifier_examples/hugr_results/even_dagger_solved.npy new file mode 100644 index 0000000000000000000000000000000000000000..2f29c4a566be88879ea173915f7b4fe3777c6708 GIT binary patch literal 192 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlWb_FuA`uymS0p-l$aNvUzCyxl5k7RDNY57 w7iT0EqyqUGCOVor3bhL41Fo~y^=b1KJhNxO0dy5PMfzqu#*jY))^}|`0FQhpEdT%j literal 0 HcmV?d00001 diff --git a/test_files/run_modifier_examples/hugr_results/higher_order_recursive_solved.npy b/test_files/run_modifier_examples/hugr_results/higher_order_recursive_solved.npy new file mode 100644 index 0000000000000000000000000000000000000000..7dd1cfba93b67c6579712aeb963c7a7d6faa57e2 GIT binary patch literal 192 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlWb_FuA`uymS0p-l$aNvUzCyxl5k7RDNY57 w7iT0EqyqUGCOVor3bhL411<(MaMrp$ZQg=s_AueU|3TpXei$D{|AUGH0O`Ii=l}o! literal 0 HcmV?d00001 diff --git a/test_files/run_modifier_examples/hugr_results/multiple_functions_solved.npy b/test_files/run_modifier_examples/hugr_results/multiple_functions_solved.npy new file mode 100644 index 0000000000000000000000000000000000000000..8866bb46e0a1b762137fc6c668863b672f07cc17 GIT binary patch literal 192 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlWb_FuA`uymS0p-l$aNvUzCyxl5k7RDNY57 w7iT0EqyqUGCOVor3bhL41Fmz{^=b1KJhNvY0CW{OMfzquhO0XR)_2Vw0C}V)t^fc4 literal 0 HcmV?d00001 diff --git a/test_files/run_modifier_examples/hugr_results/nested_multiple_solved.npy b/test_files/run_modifier_examples/hugr_results/nested_multiple_solved.npy new file mode 100644 index 0000000000000000000000000000000000000000..4ccc144d048c4b46ab61433f35efcf2e0c18d4c5 GIT binary patch literal 384 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlWb_FuA`uymS0p-l$aNvUzCyxl5k7RDNY57 z7iT0EqyqUGhGsgNItsN4WCJb+DuaLjLEyeUE@OWYkjJHuSaBAx!Uu5seX})$4*-PCIP(Ai literal 0 HcmV?d00001 diff --git a/test_files/run_modifier_examples/hugr_results/simple_higher_order_solved.npy b/test_files/run_modifier_examples/hugr_results/simple_higher_order_solved.npy new file mode 100644 index 0000000000000000000000000000000000000000..5e58011ace4988baeadfdfcbb0da80f8b847302e GIT binary patch literal 256 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlWb_FuA`uymS0p-l$aNvUzCyxl5k7RDNY57 r7iT0EqyqUG7CM?b3bhL41Fmz{^=b1KJhNw@2s|KJ|KI;0aDP7lh~X%8 literal 0 HcmV?d00001 diff --git a/test_files/run_modifier_examples/hugr_results/subscript_in_dagger_ctrl_solved.npy b/test_files/run_modifier_examples/hugr_results/subscript_in_dagger_ctrl_solved.npy new file mode 100644 index 0000000000000000000000000000000000000000..f99457f8aa2711871f295153e1997af2f909ac8f GIT binary patch literal 384 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlWb_FuA`uymS0p-l$aNvUzCyxl5k7RDNY57 r7iT0EqyqUGhGsgNItsN4WCJb+0^qE5ecHSQ&+G{(qnY#>8ru&58 Date: Fri, 19 Jun 2026 14:38:40 +0100 Subject: [PATCH 13/15] updated file in tests --- tket-py/test/test_pass.py | 2 +- tket/src/modifier/modifier_resolver.rs | 51 ++++---------------------- 2 files changed, 8 insertions(+), 45 deletions(-) diff --git a/tket-py/test/test_pass.py b/tket-py/test/test_pass.py index 8ea0595e9..578a5dde8 100644 --- a/tket-py/test/test_pass.py +++ b/tket-py/test/test_pass.py @@ -256,7 +256,7 @@ def test_modifier_resolver() -> None: assert _count_ops(normalized_and_resolved, "tket.modifier.ControlModifier") == 0 assert _count_ops(normalized_and_resolved, "tket.modifier.DaggerModifier") == 0 - modifier_hugr = _hugr_from_path("test_files/guppy_examples/modifiers.hugr") + modifier_hugr = _hugr_from_path("test_files/modifier_examples/double_modifier.hugr") modifier_hugr = normalize(modifier_hugr) assert _count_ops(modifier_hugr, "tket.modifier.ControlModifier") == 1 diff --git a/tket/src/modifier/modifier_resolver.rs b/tket/src/modifier/modifier_resolver.rs index 09eb7ea9e..62b1011c7 100644 --- a/tket/src/modifier/modifier_resolver.rs +++ b/tket/src/modifier/modifier_resolver.rs @@ -2644,54 +2644,17 @@ mod tests { /// Run the pass on hugrs generated by guppy and modifier examples. #[rstest::rstest] - #[case::higher_order_function_w_loops( - "../test_files/modifier_examples/higher_order_function_w_loops.hugr" + #[case::cfg_in_ctrl("../test_files/modifier_examples/cfg_in_ctrl.hugr")] + #[case::classical_function("../test_files/modifier_examples/classical_function.hugr")] + #[case::complex_cfg_higher_order( + "../test_files/modifier_examples/complex_cfg_higher_order.hugr" )] + #[case::double_modifier("../test_files/modifier_examples/double_modifier.hugr")] #[case::even_dagger("../test_files/modifier_examples/even_dagger.hugr")] #[case::higher_order_recursive("../test_files/modifier_examples/higher_order_recursive.hugr")] - #[case::higher_order_classical("../test_files/modifier_examples/higher_order_classical.hugr")] - #[case::higher_order_function_w_arrays( - "../test_files/modifier_examples/higher_order_function_w_arrays.hugr" - )] + #[case::multiple_functions("../test_files/modifier_examples/multiple_functions.hugr")] + #[case::nested_multiple("../test_files/modifier_examples/nested_multiple.hugr")] #[case::simple_higher_order("../test_files/modifier_examples/simple_higher_order.hugr")] - #[case::multiple_functions_in_ctrl_dagger( - "../test_files/modifier_examples/multiple_functions_in_ctrl_dagger.hugr" - )] - #[case::assign_in_dagger("../test_files/modifier_examples/assign_in_dagger.hugr")] - #[case::classical_array_op("../test_files/modifier_examples/classical_array_op.hugr")] - #[case::classical_function1("../test_files/modifier_examples/classical_function1.hugr")] - #[case::classical_function2("../test_files/modifier_examples/classical_function2.hugr")] - #[case::classical_function3("../test_files/modifier_examples/classical_function3.hugr")] - #[case::ctrl_on_cfg("../test_files/modifier_examples/ctrl_on_cfg.hugr")] - #[case::multiple_gates2_in_ctrl("../test_files/modifier_examples/multiple_gates2_in_ctrl.hugr")] - #[case::subscript_in_ctrl("../test_files/modifier_examples/subscript_in_ctrl.hugr")] - #[case::subscript_in_dagger("../test_files/modifier_examples/subscript_in_dagger.hugr")] - #[case::subscript_as_controller("../test_files/modifier_examples/subscript_as_controller.hugr")] - #[case::complex_modifier_stress("../test_files/modifier_examples/complex_modifier_stress.hugr")] - #[case::ctrl_array_controller("../test_files/modifier_examples/ctrl_array_controller.hugr")] - #[case::call1_in_ctrl("../test_files/modifier_examples/call1_in_ctrl.hugr")] - #[case::call2_in_ctrl("../test_files/modifier_examples/call2_in_ctrl.hugr")] - #[case::multiple_gates1_in_ctrl("../test_files/modifier_examples/multiple_gates1_in_ctrl.hugr")] - #[case::gate_in_ctrl("../test_files/modifier_examples/gate_in_ctrl.hugr")] - #[case::call_in_dagger("../test_files/modifier_examples/call_in_dagger.hugr")] - #[case::multiple_functions_in_dagger( - "../test_files/modifier_examples/multiple_functions_in_dagger.hugr" - )] - #[case::multiple_gates1_in_dagger( - "../test_files/modifier_examples/multiple_gates1_in_dagger.hugr" - )] - #[case::multiple_gates2_in_dagger( - "../test_files/modifier_examples/multiple_gates2_in_dagger.hugr" - )] - #[case::multiple_gates3_in_dagger( - "../test_files/modifier_examples/multiple_gates3_in_dagger.hugr" - )] - #[case::double_modifier("../test_files/modifier_examples/double_modifier.hugr")] - #[case::modify_array("../test_files/modifier_examples/modify_array.hugr")] - #[case::multiple_dagger("../test_files/modifier_examples/multiple_dagger.hugr")] - #[case::nested_ctrl_dagger1("../test_files/modifier_examples/nested_ctrl_dagger1.hugr")] - #[case::nested_multiple_ctrl1("../test_files/modifier_examples/nested_multiple_ctrl1.hugr")] - #[case::swap_in_dagger("../test_files/modifier_examples/swap_in_dagger.hugr")] #[case::subscript_in_dagger_ctrl( "../test_files/modifier_examples/subscript_in_dagger_ctrl.hugr" )] From c0bd1a3743d0c0f731ea24ad3a673622c2a67aee Mon Sep 17 00:00:00 2001 From: nicolaassolini-qntm Date: Fri, 19 Jun 2026 15:38:39 +0100 Subject: [PATCH 14/15] final upgrade --- .../modifier_examples/double_modifier.hugr | Bin 5425 -> 5425 bytes .../modifier_examples/double_modifier.py | 4 +- .../subscript_in_dagger_ctrl.hugr | Bin 13138 -> 13133 bytes .../subscript_in_dagger_ctrl.py | 2 +- .../run_modifier_examples/hugr_results.txt | 428 +----------------- .../hugr_results/double_modifier_solved.npy | Bin 192 -> 192 bytes .../subscript_in_dagger_ctrl_solved.npy | Bin 384 -> 384 bytes 7 files changed, 25 insertions(+), 409 deletions(-) diff --git a/test_files/modifier_examples/double_modifier.hugr b/test_files/modifier_examples/double_modifier.hugr index 70f12fdfaf8eff3ef53e7540ea4cedcd20dc50df..cd03c3d4bf9a1e26e7ee0e926fc6bddae6e61d4b 100644 GIT binary patch delta 466 zcmV;@0WJQqDzPfC_X8vj^eWXniu8^oog=4RG|)#LXr9|RaN88nJ6_*(t)prgAdT~r z8w9m~HK7Zv-N02ys(wvXAXxe2RVoR2p)}VFRcR~INh+bKxsu$Ps%L%m4g7Y>JlYVE z3p;wOWO@ogBGVHIi>_r(a-E^+%%nQ9-h2N8Crw3 zRZ)8^Rgq}Al?=GPxKcG?sOdU?k}njxPFJwM)kxJFyOj+1Z=kg`vP4y?O1h$?s+t~u zabZ8ETYukt+87ZC?*z|x;HRaZ3iQK_YgWNxrD26h!QG<~^XC)0BS z%bzmZQ2B)X`S!I4MTA(~Q@WM`SM!LrRKu!D80{=o*%xb74t%AjclHFSVzd=KNn28_ z<&*Wx_VumNVKjO8g30r5mmGjFH_dMxm7M1N+o21+5B@gj;Aeh|J32{@&T-KV9O(ym`r>G8(*^9bchj9tt7IAoPCM|E z8w9m~QiLwBb^})-sroflfnep6SE(fAh0fRY z+vOjZ%RJ_{FRXAC4s-1FZ3@S~EkT6C;Bzp4W5UuOwMA{gl^YuG1bOf5@JWdMZ@Tu<7p6cSRdZxR7IlcRx;rF;!4$op{DEnNxo3%I$gp3RwGq!>{c@1zk$})$P!hlD(Q-ns%m None: h(c1) with control(c1): with dagger: - rx(t, angle(1 / 3)) + ry(t, angle(1 / 3)) state_result("r", c1, t) discard(c1) diff --git a/test_files/modifier_examples/subscript_in_dagger_ctrl.hugr b/test_files/modifier_examples/subscript_in_dagger_ctrl.hugr index 8484da6517e4669fb0a2d43cf76c4a4b365894a5..cfe71e4bf01ee477ade719355cacec8a89868974 100644 GIT binary patch literal 13133 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 diff --git a/test_files/modifier_examples/subscript_in_dagger_ctrl.py b/test_files/modifier_examples/subscript_in_dagger_ctrl.py index f505cddce..ef9dffbfe 100644 --- a/test_files/modifier_examples/subscript_in_dagger_ctrl.py +++ b/test_files/modifier_examples/subscript_in_dagger_ctrl.py @@ -30,7 +30,7 @@ def main() -> None: controller = array(qubit(), qubit()) array_qubits = array(qubit(), qubit()) h(controller[0]) - x(array_qubits[0]) + x(controller[1]) with dagger: with control(controller): f(array_qubits[0], array_qubits[1]) diff --git a/test_files/run_modifier_examples/hugr_results.txt b/test_files/run_modifier_examples/hugr_results.txt index 8426355a4..69ce24cd1 100644 --- a/test_files/run_modifier_examples/hugr_results.txt +++ b/test_files/run_modifier_examples/hugr_results.txt @@ -1,438 +1,54 @@ -assign_in_dagger_solved: +cfg_in_ctrl_solved: 00 -> 0.7071+0j - 10 -> 0.6124+0j - 11 -> 0+0.3536j ------ -call1_in_ctrl_solved: - 00 -> 0.7071+0j - 11 -> 0.7071+0j ------ -call2_in_ctrl_solved: - 0110 -> 0.7071+0j - 1110 -> 0.6124+0j - 1111 -> 0-0.3536j ------ -call_in_dagger_solved: - 0 -> 0.7071+0j - 1 -> 0-0.7071j ------ -classical_array_op_solved: - 0 -> 0.7071+0j - 1 -> -0.7071-0j ------ -classical_function1_solved: - 0 -> 0.866+0j - 1 -> 0+0.5j ------ -classical_function2_solved: - 00 -> 0.7071+0j - 10 -> 0.6124+0j - 11 -> 0+0.3536j + 10 -> -0.1913+0.1913j + 11 -> -0.4619-0.4619j ----- -classical_function3_solved: +classical_function_solved: 000 -> 0.5+0j 010 -> 0.5+0j 100 -> 0.5+0j 110 -> 0.433+0j 111 -> 0+0.25j ----- -complex_modifier_stress_solved: - 00000000 -> 0.0625-6.516e-19j - 00000001 -> 0.0625+2.035e-16j - 00000010 -> 0.0625+4.805e-18j - 00000011 -> 0.0625+2.544e-16j - 00000100 -> 0.0625-7.362e-17j - 00000101 -> 0.0625+1.113e-16j - 00000110 -> 0.0625-6.817e-17j - 00000111 -> 0.0625+2.037e-16j - 00001000 -> 0.0625+1.441e-15j - 00001001 -> 0.0625+1.534e-15j - 00001010 -> 0.0625+1.398e-15j - 00001011 -> 0.0625+1.489e-15j - 00001100 -> 0.0625+1.412e-15j - 00001101 -> 0.0625+1.472e-15j - 00001110 -> 0.0625+1.367e-15j - 00001111 -> 0.0625+1.422e-15j - 00010000 -> 0.06093-0.01391j - 00010001 -> 0.06093-0.01391j - 00010010 -> 0.06093-0.01391j - 00010011 -> 0.06093-0.01391j - 00010100 -> 0.06093-0.01391j - 00010101 -> 0.06093-0.01391j - 00010110 -> 0.06093-0.01391j - 00010111 -> 0.06093-0.01391j - 00011000 -> 0.06093-0.01391j - 00011001 -> 0.06093-0.01391j - 00011010 -> 0.06093-0.01391j - 00011011 -> 0.06093-0.01391j - 00011100 -> 0.06093-0.01391j - 00011101 -> 0.06093-0.01391j - 00011110 -> 0.06093-0.01391j - 00011111 -> 0.06093-0.01391j - 00100000 -> 0.06093-0.01391j - 00100001 -> 0.06093-0.01391j - 00100010 -> 0.06093-0.01391j - 00100011 -> 0.06093-0.01391j - 00100100 -> 0.06093-0.01391j - 00100101 -> 0.06093-0.01391j - 00100110 -> 0.06093-0.01391j - 00100111 -> 0.06093-0.01391j - 00101000 -> 0.06093-0.01391j - 00101001 -> 0.06093-0.01391j - 00101010 -> 0.06093-0.01391j - 00101011 -> 0.06093-0.01391j - 00101100 -> 0.06093-0.01391j - 00101101 -> 0.06093-0.01391j - 00101110 -> 0.06093-0.01391j - 00101111 -> 0.06093-0.01391j - 00110000 -> 0.04591-0.02833j - 00110001 -> 0.04591-0.02833j - 00110010 -> 0.04591-0.02833j - 00110011 -> 0.04591-0.02833j - 00110100 -> 0.06999+0.001873j - 00110101 -> 0.06999+0.001873j - 00110110 -> 0.06999+0.001873j - 00110111 -> 0.06999+0.001873j - 00111000 -> 0.06151+0.03344j - 00111001 -> 0.05768+0.03969j - 00111010 -> 0.05972-0.03655j - 00111011 -> 0.06321-0.03011j - 00111100 -> 0.05377-0.004397j - 00111101 -> 0.05393+0.001247j - 00111110 -> 0.02307-0.04876j - 00111111 -> 0.02805-0.04608j - 01000000 -> 0.0625+6.388e-16j - 01000001 -> 0.0625+7.844e-16j - 01000010 -> 0.0625+6.223e-16j - 01000011 -> 0.0625+6.784e-16j - 01000100 -> 0.0625+5.669e-16j - 01000101 -> 0.0625+7.45e-16j - 01000110 -> 0.0625+5.382e-16j - 01000111 -> 0.0625+5.986e-16j - 01001000 -> 0.0625+1.425e-15j - 01001001 -> 0.0625+1.24e-15j - 01001010 -> 0.0625+1.271e-15j - 01001011 -> 0.0625+1.136e-15j - 01001100 -> 0.0625+1.407e-15j - 01001101 -> 0.0625+1.214e-15j - 01001110 -> 0.0625+1.296e-15j - 01001111 -> 0.0625+1.15e-15j - 01010000 -> 0.06093-0.01391j - 01010001 -> 0.06093-0.01391j - 01010010 -> 0.06093-0.01391j - 01010011 -> 0.06093-0.01391j - 01010100 -> 0.06093-0.01391j - 01010101 -> 0.06093-0.01391j - 01010110 -> 0.06093-0.01391j - 01010111 -> 0.06093-0.01391j - 01011000 -> 0.06093-0.01391j - 01011001 -> 0.06093-0.01391j - 01011010 -> 0.06093-0.01391j - 01011011 -> 0.06093-0.01391j - 01011100 -> 0.06093-0.01391j - 01011101 -> 0.06093-0.01391j - 01011110 -> 0.06093-0.01391j - 01011111 -> 0.06093-0.01391j - 01100000 -> 0.06093-0.01391j - 01100001 -> 0.06093-0.01391j - 01100010 -> 0.06093-0.01391j - 01100011 -> 0.06093-0.01391j - 01100100 -> 0.06093-0.01391j - 01100101 -> 0.06093-0.01391j - 01100110 -> 0.06093-0.01391j - 01100111 -> 0.06093-0.01391j - 01101000 -> 0.06093-0.01391j - 01101001 -> 0.06093-0.01391j - 01101010 -> 0.06093-0.01391j - 01101011 -> 0.06093-0.01391j - 01101100 -> 0.06093-0.01391j - 01101101 -> 0.06093-0.01391j - 01101110 -> 0.06093-0.01391j - 01101111 -> 0.06093-0.01391j - 01110000 -> 0.04591-0.02833j - 01110001 -> 0.04591-0.02833j - 01110010 -> 0.04591-0.02833j - 01110011 -> 0.04591-0.02833j - 01110100 -> 0.06999+0.001873j - 01110101 -> 0.06999+0.001873j - 01110110 -> 0.06999+0.001873j - 01110111 -> 0.06999+0.001873j - 01111000 -> 0.06151+0.03344j - 01111001 -> 0.05768+0.03969j - 01111010 -> 0.05972-0.03655j - 01111011 -> 0.06321-0.03011j - 01111100 -> 0.05377-0.004397j - 01111101 -> 0.05393+0.001247j - 01111110 -> 0.02307-0.04876j - 01111111 -> 0.02805-0.04608j - 10000000 -> 0.0625-5.489e-17j - 10000001 -> 0.0625+2.576e-17j - 10000010 -> 0.0625-3.619e-17j - 10000011 -> 0.0625-6.208e-18j - 10000100 -> 0.0625-1.638e-16j - 10000101 -> 0.0625-4.76e-17j - 10000110 -> 0.0625-1.604e-16j - 10000111 -> 0.0625-1.056e-16j - 10001000 -> 0.0625+1.316e-15j - 10001001 -> 0.0625+1.468e-15j - 10001010 -> 0.0625+1.416e-15j - 10001011 -> 0.0625+1.407e-15j - 10001100 -> 0.0625+1.285e-15j - 10001101 -> 0.0625+1.452e-15j - 10001110 -> 0.0625+1.388e-15j - 10001111 -> 0.0625+1.395e-15j - 10010000 -> 0.06093-0.01391j - 10010001 -> 0.06093-0.01391j - 10010010 -> 0.06093-0.01391j - 10010011 -> 0.06093-0.01391j - 10010100 -> 0.06093-0.01391j - 10010101 -> 0.06093-0.01391j - 10010110 -> 0.06093-0.01391j - 10010111 -> 0.06093-0.01391j - 10011000 -> 0.06093-0.01391j - 10011001 -> 0.06093-0.01391j - 10011010 -> 0.06093-0.01391j - 10011011 -> 0.06093-0.01391j - 10011100 -> 0.06093-0.01391j - 10011101 -> 0.06093-0.01391j - 10011110 -> 0.06093-0.01391j - 10011111 -> 0.06093-0.01391j - 10100000 -> 0.06093-0.01391j - 10100001 -> 0.06093-0.01391j - 10100010 -> 0.06093-0.01391j - 10100011 -> 0.06093-0.01391j - 10100100 -> 0.06093-0.01391j - 10100101 -> 0.06093-0.01391j - 10100110 -> 0.06093-0.01391j - 10100111 -> 0.06093-0.01391j - 10101000 -> 0.06093-0.01391j - 10101001 -> 0.06093-0.01391j - 10101010 -> 0.06093-0.01391j - 10101011 -> 0.06093-0.01391j - 10101100 -> 0.06093-0.01391j - 10101101 -> 0.06093-0.01391j - 10101110 -> 0.06093-0.01391j - 10101111 -> 0.06093-0.01391j - 10110000 -> 0.04591-0.02833j - 10110001 -> 0.04591-0.02833j - 10110010 -> 0.04591-0.02833j - 10110011 -> 0.04591-0.02833j - 10110100 -> 0.06999+0.001873j - 10110101 -> 0.06999+0.001873j - 10110110 -> 0.06999+0.001873j - 10110111 -> 0.06999+0.001873j - 10111000 -> 0.06151+0.03344j - 10111001 -> 0.05768+0.03969j - 10111010 -> 0.05972-0.03655j - 10111011 -> 0.06321-0.03011j - 10111100 -> 0.05377-0.004397j - 10111101 -> 0.05393+0.001247j - 10111110 -> 0.02307-0.04876j - 10111111 -> 0.02805-0.04608j - 11000000 -> 0.06093-0.01391j - 11000001 -> 0.06093-0.01391j - 11000010 -> 0.06093-0.01391j - 11000011 -> 0.06093-0.01391j - 11000100 -> 0.06093-0.01391j - 11000101 -> 0.06093-0.01391j - 11000110 -> 0.06093-0.01391j - 11000111 -> 0.06093-0.01391j - 11001000 -> 0.06093-0.01391j - 11001001 -> 0.06093-0.01391j - 11001010 -> 0.06093-0.01391j - 11001011 -> 0.06093-0.01391j - 11001100 -> 0.06093-0.01391j - 11001101 -> 0.06093-0.01391j - 11001110 -> 0.06093-0.01391j - 11001111 -> 0.06093-0.01391j - 11010000 -> 0.05631-0.02712j - 11010001 -> 0.05631-0.02712j - 11010010 -> 0.05631-0.02712j - 11010011 -> 0.05631-0.02712j - 11010100 -> 0.05631-0.02712j - 11010101 -> 0.05631-0.02712j - 11010110 -> 0.05631-0.02712j - 11010111 -> 0.05631-0.02712j - 11011000 -> 0.05631-0.02712j - 11011001 -> 0.05631-0.02712j - 11011010 -> 0.05631-0.02712j - 11011011 -> 0.05631-0.02712j - 11011100 -> 0.05631-0.02712j - 11011101 -> 0.05631-0.02712j - 11011110 -> 0.05631-0.02712j - 11011111 -> 0.05631-0.02712j - 11100000 -> 0.05631-0.02712j - 11100001 -> 0.05631-0.02712j - 11100010 -> 0.05631-0.02712j - 11100011 -> 0.05631-0.02712j - 11100100 -> 0.05631-0.02712j - 11100101 -> 0.05631-0.02712j - 11100110 -> 0.05631-0.02712j - 11100111 -> 0.05631-0.02712j - 11101000 -> 0.05631-0.02712j - 11101001 -> 0.05631-0.02712j - 11101010 -> 0.05631-0.02712j - 11101011 -> 0.05631-0.02712j - 11101100 -> 0.05631-0.02712j - 11101101 -> 0.05631-0.02712j - 11101110 -> 0.05631-0.02712j - 11101111 -> 0.05631-0.02712j - 11110000 -> 0.03845-0.03783j - 11110001 -> 0.03845-0.03783j - 11110010 -> 0.03845-0.03783j - 11110011 -> 0.03845-0.03783j - 11110100 -> 0.06865-0.01375j - 11110101 -> 0.06865-0.01375j - 11110110 -> 0.06865-0.01375j - 11110111 -> 0.06865-0.01375j - 11111000 -> 0.05827+0.03882j - 11111001 -> 0.06987+0.004489j - 11111010 -> 0.06276-0.03105j - 11111011 -> 0.03882-0.05827j - 11111100 -> 0.05394+0.00044j - 11111101 -> 0.04694-0.02659j - 11111110 -> 0.02735-0.0465j - 11111111 -> 0.00044-0.05394j ------ -ctrl_array_controller_solved: - 0000 -> 0.3536+0j - 0010 -> 0.3536+0j - 0100 -> 0.3536+0j - 0110 -> 0.3536+0j - 1000 -> 0.3536+0j - 1010 -> 0.3536+0j - 1100 -> 0.3536+0j - 1111 -> 0.3536+0j ------ -ctrl_on_cfg_solved: +complex_cfg_higher_order_solved: 00 -> 0.7071+0j - 10 -> -0.1913+0.1913j - 11 -> -0.4619-0.4619j + 10 -> 0.4619-0.1913j + 11 -> -0.4619-0.1913j ----- double_modifier_solved: 00 -> 0.7071+0j 10 -> 0.6124+0j - 11 -> 0+0.3536j + 11 -> -0.3536+0j ----- even_dagger_solved: 00 -> 0.7071+0j 10 -> 0.6124+0j 11 -> 0-0.3536j ----- -gate_in_ctrl_solved: - 00 -> 0.7071+0j - 11 -> 0.7071+0j ------ -higher_order_classical_solved: - 00 -> 0.7071+0j - 10 -> 0.3536+0.3536j - 11 -> 0.3536+0.3536j ------ -higher_order_function_w_loops_solved: - 00 -> 0.7071+0j - 10 -> 0.4619-0.1913j - 11 -> -0.4619-0.1913j ------ higher_order_recursive_solved: - 00 -> 0.7071+0j - 10 -> 0.5+0j + 01 -> 0.7071+0j + 10 -> -0.5+0j 11 -> 0-0.5j ----- -modify_array_solved: - 000 -> 0.7071+0j - 100 -> 0.5+0j - 101 -> 0.5+0j ------ -multiple_dagger_solved: - 0 -> 1+0j ------ -multiple_functions_in_ctrl_dagger_solved: - 00 -> 0.7071+0j - 10 -> 0.433+0.25j - 11 -> 0.25+0.433j ------ -multiple_functions_in_dagger_solved: - 0 -> 0.7071-4.304e-17j - 1 -> 0.6124+0.3536j ------ -multiple_gates1_in_ctrl_solved: +multiple_functions_solved: 00 -> 0.7071+0j - 10 -> 0.6124+0j - 11 -> 0-0.3536j ------ -multiple_gates1_in_dagger_solved: - 0 -> 0.7071+0j - 1 -> 0-0.7071j ------ -multiple_gates2_in_ctrl_solved: - 00 -> 0.7071+0j - 10 -> 0.6124+0j - 11 -> 0-0.3536j ------ -multiple_gates2_in_dagger_solved: - 0 -> 0.7071+0j - 1 -> 0+0.7071j ------ -multiple_gates3_in_dagger_solved: - 0 -> 0.7071-4.304e-17j - 1 -> 0.6124+0.3536j ------ -nested_ctrl_dagger1_solved: - 0000 -> 0.5+0j - 0100 -> 0.433+0j - 0110 -> 0-0.25j - 1000 -> 0.433+0j - 1001 -> 0-0.25j - 1100 -> 0.375+0j - 1101 -> 0-0.2165j - 1110 -> 0-0.2165j - 1111 -> -0.125+0j + 10 -> 0+0.6124j + 11 -> 0+0.3536j ----- -nested_multiple_ctrl1_solved: - 0000 -> 0.25+0j - 0001 -> 0.25+0j - 0010 -> 0.25+0j - 0011 -> 0.25+0j - 0100 -> 0.25+0j - 0101 -> 0.25+0j - 0110 -> 0.25+0j - 0111 -> 0.25+0j - 1000 -> 0.25+0j - 1001 -> 0.25+0j - 1010 -> 0.25+0j - 1011 -> 0.25+0j - 1100 -> 0.25+0j - 1101 -> 0.25+0j - 1110 -> 0.1768+0.1768j - 1111 -> 0.1768-0.1768j +nested_multiple_solved: + 0101 -> 0.5+0j + 0111 -> 0.5+0j + 1101 -> 0.5+0j + 1110 -> -0.3062-0.1768j + 1111 -> 0.3062-0.1768j ----- simple_higher_order_solved: 000 -> 0.7071+0j 100 -> 0.5+0j 111 -> 0-0.5j ----- -subscript_as_controller_solved: +subscript_in_dagger_ctrl_solved: 0100 -> 0.7071+0j 1100 -> 0.5+0j - 1110 -> 0.433+0j - 1111 -> 0-0.25j ------ -subscript_in_ctrl_solved: - 000 -> 0.7071+0j - 001 -> 0.3536+0j - 011 -> 0.3536+0j - 101 -> 0+0.3536j - 111 -> 0+0.3536j ------ -subscript_in_dagger_ctrl_solved: - 000 -> 0.7071+0j - 100 -> 0.5+0j - 101 -> 0-0.5j ------ -subscript_in_dagger_solved: - 00 -> 0.7071+0j - 01 -> 0-0.7071j ------ -swap_in_dagger_solved: - 0 -> 0.7071+0j - 1 -> 0.7071+0j + 1110 -> 0-0.433j + 1111 -> 0.25+0j diff --git a/test_files/run_modifier_examples/hugr_results/double_modifier_solved.npy b/test_files/run_modifier_examples/hugr_results/double_modifier_solved.npy index aceda8cdfde27714426ce60d751d6dc878bff064..3606cf2fe4255d9ecb881eb78d7704b727c29658 100644 GIT binary patch delta 28 ecmX@Wcz|(21LOILjrsy7t?Sd~Ex5Ly0SW-6rU`HW delta 28 ecmX@Wcz|(21LK*Ajrsx%P;l0|K5gEDYxV$tCkXKX diff --git a/test_files/run_modifier_examples/hugr_results/subscript_in_dagger_ctrl_solved.npy b/test_files/run_modifier_examples/hugr_results/subscript_in_dagger_ctrl_solved.npy index f99457f8aa2711871f295153e1997af2f909ac8f..1928d1096ad02b43251d1edf523c1d73576f90d6 100644 GIT binary patch delta 51 wcmZo*ZeX6UVB!G<#`6;w)^q&(4+8h?CvH@bSmqP)qH5di{SdM9_6$$}0N;cf#Q*>R delta 16 YcmZo*ZeX6Ufbs0agY}GOCLW9j05{bKQ~&?~ From 0f75b37a5431eae812b5d404efb7b4332500c8e8 Mon Sep 17 00:00:00 2001 From: nicolaassolini-qntm Date: Mon, 22 Jun 2026 16:51:42 +0100 Subject: [PATCH 15/15] added new test --- .../modifier_examples/loaded_pytket.hugr | Bin 0 -> 5003 bytes test_files/modifier_examples/loaded_pytket.py | 47 ++++++++++++++++++ .../run_modifier_examples/hugr_results.txt | 7 +++ .../hugr_results/loaded_pytket_solved.npy | Bin 0 -> 256 bytes tket/src/modifier/modifier_resolver.rs | 1 + 5 files changed, 55 insertions(+) create mode 100644 test_files/modifier_examples/loaded_pytket.hugr create mode 100644 test_files/modifier_examples/loaded_pytket.py create mode 100644 test_files/run_modifier_examples/hugr_results/loaded_pytket_solved.npy diff --git a/test_files/modifier_examples/loaded_pytket.hugr b/test_files/modifier_examples/loaded_pytket.hugr new file mode 100644 index 0000000000000000000000000000000000000000..ed4b92edf40bdb94b1988869f68be1f996485220 GIT binary patch literal 5003 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 None: + q1 = qubit() + q2 = qubit() + c = qubit() + h(c) + with control(c), dagger: + guppy_circ(q1, q2) + + state_result("r", c, q1, q2) + discard(q1) + discard(q2) + discard(c) + + +program = main.compile() +Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes()) diff --git a/test_files/run_modifier_examples/hugr_results.txt b/test_files/run_modifier_examples/hugr_results.txt index 69ce24cd1..288fc15a2 100644 --- a/test_files/run_modifier_examples/hugr_results.txt +++ b/test_files/run_modifier_examples/hugr_results.txt @@ -30,6 +30,13 @@ higher_order_recursive_solved: 10 -> -0.5+0j 11 -> 0-0.5j ----- +loaded_pytket_solved: + 000 -> 0.7071+0j + 100 -> 0.25-0.25j + 101 -> 0.25-0.25j + 110 -> 0.25+0.25j + 111 -> 0.25+0.25j +----- multiple_functions_solved: 00 -> 0.7071+0j 10 -> 0+0.6124j diff --git a/test_files/run_modifier_examples/hugr_results/loaded_pytket_solved.npy b/test_files/run_modifier_examples/hugr_results/loaded_pytket_solved.npy new file mode 100644 index 0000000000000000000000000000000000000000..4ca4cdbaaee1ce0eef4dfeacd8cb2e3d10a0cc36 GIT binary patch literal 256 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlWb_FuA`uymS0p-l$aNvUzCyxl5k7RDNY57 z7iT0EqyqUG7CM?b3bhL41Fo~y^=b1KJhNvY6a4)T0_W}jLFoMuV=mY;ff*O}!{mQL J)xqRp;s8j>M+pD` literal 0 HcmV?d00001 diff --git a/tket/src/modifier/modifier_resolver.rs b/tket/src/modifier/modifier_resolver.rs index 62b1011c7..81a3a4aa7 100644 --- a/tket/src/modifier/modifier_resolver.rs +++ b/tket/src/modifier/modifier_resolver.rs @@ -2652,6 +2652,7 @@ mod tests { #[case::double_modifier("../test_files/modifier_examples/double_modifier.hugr")] #[case::even_dagger("../test_files/modifier_examples/even_dagger.hugr")] #[case::higher_order_recursive("../test_files/modifier_examples/higher_order_recursive.hugr")] + #[case::loaded_pytket("../test_files/modifier_examples/loaded_pytket.hugr")] #[case::multiple_functions("../test_files/modifier_examples/multiple_functions.hugr")] #[case::nested_multiple("../test_files/modifier_examples/nested_multiple.hugr")] #[case::simple_higher_order("../test_files/modifier_examples/simple_higher_order.hugr")]