Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
115e151
initial todo changes
nicolaassolini-qntm Apr 10, 2026
6ffafa6
bugg found (maybe?)
nicolaassolini-qntm Apr 13, 2026
021b6c5
added test_notebook, potential bug fix
nicolaassolini-qntm Apr 16, 2026
f05df04
Merge remote-tracking branch 'origin/main' into na/fix-modifier
nicolaassolini-qntm Apr 16, 2026
49c2cd9
Enhance modifier examples and update test notebook with clearer TODOs
nicolaassolini-qntm Apr 17, 2026
6c73931
Enhance rendering of control gate examples by adding cleanup option t…
nicolaassolini-qntm Apr 17, 2026
d7d0d0d
added full testing pipeline
nicolaassolini-qntm Apr 17, 2026
6bf7d2f
improved dir
nicolaassolini-qntm Apr 17, 2026
97a87bb
Refactor modifier example scripts to improve import structure and enh…
nicolaassolini-qntm Apr 17, 2026
9a03d6d
Add modifier compilation and testing scripts; update hugr processing
nicolaassolini-qntm Apr 17, 2026
40d1f3a
Refactor modifier example scripts to streamline hugr processing and e…
nicolaassolini-qntm Apr 20, 2026
741ca1c
Update .gitignore to include hugr results and add double_call.py exam…
nicolaassolini-qntm Apr 20, 2026
e4f8b59
Remove obsolete hugr files and update .gitignore for modifier testing
nicolaassolini-qntm Apr 20, 2026
1bed229
Uncomment hugr result paths in .gitignore for modifier testing
nicolaassolini-qntm Apr 20, 2026
e876ce2
LAST COMMIT PRE BRANCHING: Enhance modifier examples and testing: add…
nicolaassolini-qntm Apr 21, 2026
521ddc8
Merge remote-tracking branch 'origin/main' into na/fix-modifier
nicolaassolini-qntm Apr 21, 2026
8325e07
feat: Add processing output for modifier examples in apply_passes.py …
nicolaassolini-qntm Apr 21, 2026
eb1c93d
test: Pin guppy version in example files, fix test
aborgna-q Apr 21, 2026
0a770df
Merge remote-tracking branch 'origin/ab/pin-guppy-in-test-files' into…
nicolaassolini-qntm Apr 21, 2026
319ffad
solved nested modifier big (WIP), added new tests, new bug found
nicolaassolini-qntm Apr 23, 2026
6f34df9
clean up modifier example scripts by removing unused imports and comm…
nicolaassolini-qntm Apr 24, 2026
5bbb444
update modifier example scripts by cleaning up code and adjusting de…
nicolaassolini-qntm Apr 24, 2026
b6bed01
fixed nested modifier bug
nicolaassolini-qntm Apr 24, 2026
154fc22
add classical_function3 example and update tests for modifier resolver
nicolaassolini-qntm Apr 24, 2026
31c81ca
restored wrap_fn call
nicolaassolini-qntm Apr 27, 2026
6e0093f
clean warning and unsed imports
nicolaassolini-qntm Apr 27, 2026
4e6dc89
fix modifier nubers and clean up commented code
nicolaassolini-qntm Apr 27, 2026
6eb5222
add new example script for controlled gate using modifiers
nicolaassolini-qntm Apr 27, 2026
b5dc13f
cleaned code
nicolaassolini-qntm Apr 27, 2026
699a7a5
Merge remote-tracking branch 'origin/main' into na/fix-nested-modifier
nicolaassolini-qntm Apr 27, 2026
08d61c4
post merge fixes
nicolaassolini-qntm Apr 27, 2026
04e6e9d
remove utility.py
nicolaassolini-qntm Apr 27, 2026
84284d9
remove utility.py as it is no longer needed
nicolaassolini-qntm Apr 27, 2026
1c8bc20
remove run_modifier_examples.sh script
nicolaassolini-qntm Apr 27, 2026
ea2bd76
Remove unused old_signature variable and update test case to ctrl_arr…
nicolaassolini-qntm Apr 27, 2026
8a9b2e2
Refactor resolve_modifier_with_entrypoints function and simplify test…
nicolaassolini-qntm Apr 27, 2026
4b5b41b
updated gitignore
nicolaassolini-qntm Apr 27, 2026
8aed7d9
Remove playground notebook due to missing guppylang module
nicolaassolini-qntm Apr 27, 2026
ae1d01d
Remove unused imports from classical_function3.py
nicolaassolini-qntm Apr 27, 2026
0b727b7
Update modifiers and clean up test cases; remove unused solved hugr f…
nicolaassolini-qntm Apr 27, 2026
52d10e1
Refactor apply_passes function and update run_hugrs.py to utilize it …
nicolaassolini-qntm Apr 27, 2026
21b27c1
update guppylang dependency references and remove unused imports in m…
nicolaassolini-qntm Apr 27, 2026
8df3487
aligned the modifier to the main
nicolaassolini-qntm Apr 27, 2026
5a1ea79
Add parameter documentation for test_modifier_resolver function
nicolaassolini-qntm Apr 27, 2026
bfd4823
refactor: clean up imports and add debugging output in modifier resolver
nicolaassolini-qntm Apr 28, 2026
497a0b2
Update dependencies in run_hugrs.py to include selene-sim
nicolaassolini-qntm Apr 28, 2026
8fadf52
Remove unused check_hugr call from apply_passes and add it in run_hug…
nicolaassolini-qntm Apr 28, 2026
b74884b
Merge remote-tracking branch 'origin/main' into na/fix-modifier
nicolaassolini-qntm Apr 28, 2026
a1dad1b
solved error with nested controllers
nicolaassolini-qntm Apr 28, 2026
c8897e7
fix: enable nested control flow by uncommenting relevant operations
nicolaassolini-qntm Apr 28, 2026
9cf957b
fix: replace rx with h for consistent gate application in main function
nicolaassolini-qntm Apr 28, 2026
a8ab08e
Refactor visibility of constructor and signature methods in modifier …
nicolaassolini-qntm Apr 28, 2026
480a909
Update documentation for connect_all and change visibility of resolve…
nicolaassolini-qntm Apr 28, 2026
7c372e4
Merge remote-tracking branch 'origin/na/fix-nested-modifier' into na/…
nicolaassolini-qntm Apr 28, 2026
fcd069b
add nested_multiple_ctrl1 example and results
nicolaassolini-qntm Apr 28, 2026
07a0fdb
refactor: remove unused mod commands and streamline hugr file generation
nicolaassolini-qntm Apr 28, 2026
d24a692
added an extre test
nicolaassolini-qntm Apr 29, 2026
4abe351
add modify_array example and update hugr results
nicolaassolini-qntm Apr 29, 2026
7df220a
Update guppylang dependency version to 0.21.14 in modifier examples a…
nicolaassolini-qntm May 1, 2026
0404d8a
Merge branch 'na/fix-nested-modifier' into na/fix-multiple-controller…
nicolaassolini-qntm May 1, 2026
d2844df
fix: update guppylang dependency version in modifier example scripts
nicolaassolini-qntm May 1, 2026
5da701f
fix: improve documentation for modify_signature function
nicolaassolini-qntm May 1, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 1 addition & 4 deletions justfile
Original file line number Diff line number Diff line change
Expand Up @@ -92,10 +92,7 @@ recompile-test-hugrs:
just test_files/guppy_examples/recompile
@echo "---- Recompiling optimization-target guppy programs ----"
just test_files/guppy_optimization/recompile
@echo "---- Recompiling modifier examples ----"
uv run maturin develop --uv
just test_files/modifier_examples/r
just test_files/run_modifier_examples/r
just recompile-modifiers

recompile-modifiers:
@echo "---- Recompiling modifier examples ----"
Expand Down
Binary file modified test_files/guppy_examples/modifiers.hugr
Binary file not shown.
2 changes: 1 addition & 1 deletion test_files/guppy_examples/modifiers.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# /// script
# requires-python = ">=3.13"
# dependencies = [
# "guppylang ==0.21.13",
# "guppylang ==0.21.14",
# ]
# ///
"""A simple controlled gate using modifiers"""
Expand Down
Binary file not shown.
Binary file removed test_files/modified_hugrs/ctrl_on_call_solved.hugr
Binary file not shown.
Binary file removed test_files/modified_hugrs/ctrl_on_x_solved.hugr
Binary file not shown.
Binary file not shown.
Binary file not shown.
42 changes: 42 additions & 0 deletions test_files/modifier_examples/classical_function1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# /// script
# requires-python = ">=3.13"
# dependencies = [
# "guppylang ==0.21.14",
# ]
# ///
"""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 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())
Binary file not shown.
51 changes: 51 additions & 0 deletions test_files/modifier_examples/classical_function2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# /// script
# requires-python = ">=3.13"
# dependencies = [
# "guppylang ==0.21.14",
# ]
# ///
"""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, 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())
Binary file not shown.
55 changes: 55 additions & 0 deletions test_files/modifier_examples/classical_function3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# /// script
# requires-python = ">=3.13"
# dependencies = [
# "guppylang ==0.21.14",
# ]
# ///
"""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, 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()
c2 = qubit()
h(c1)
h(c2)
with control(c1):
d = fuu(2)
with control(c2):
with dagger:
rx(t, angle(1 / d))

state_result("r", c1, c2, t)
discard(c1)
discard(c2)
discard(t)


program = main.compile()
Path(argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes())
Binary file not shown.
133 changes: 133 additions & 0 deletions test_files/modifier_examples/complex_modifier_stress.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
# /// script
# requires-python = ">=3.13"
# dependencies = [
# "guppylang ==0.21.14",
# ]
# ///
"""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
from guppylang.std.quantum import 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())
Binary file not shown.
49 changes: 49 additions & 0 deletions test_files/modifier_examples/ctrl_array_controller.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# /// script
# requires-python = ">=3.13"
# dependencies = [
# "guppylang ==0.21.14",
# ]
# ///
"""A controlled gate where the controller is an array of qubits"""

from pathlib import Path
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(sys.argv[0]).with_suffix(".hugr").write_bytes(program.to_bytes())
Binary file modified test_files/modifier_examples/ctrl_on_call.hugr
Binary file not shown.
2 changes: 1 addition & 1 deletion test_files/modifier_examples/ctrl_on_call.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# /// script
# requires-python = ">=3.13"
# dependencies = [
# "guppylang ==0.21.13",
# "guppylang ==0.21.14",
# ]
# ///
"""A simple controlled gate using modifiers"""
Expand Down
Binary file not shown.
Loading
Loading