Quantinuum's tool for converting HUGR to QIR
Project description
hugr-qir
A tool for converting Hierarchical Unified Graph Representation (HUGR, pronounced hugger) formatted quantum programs into QIR format.
[!NOTE] Not all Guppy/HUGR programs can be converted to QIR.
Installation
You can install from pypi via pip install hugr-qir.
Usage
Python
Use the function hugr_to_qir from the hugr_to_qir module to convert hugr to qir. By default, some basic validity checks will be run on the generated QIR. These checks can be turned off by passing validate_qir = False.
You can find an example notebook at examples/submit-guppy-h2-via-qir.ipynb showing the conversion and the submission to Quantinuum System Model H2.
CLI
You can use the available CLI after installing the python package.
This will generate qir for a given hugr file:
hugr-qir test-file.hugr
Run hugr-qir --help to see the available options.
If you want to generate a hugr file from guppy, you can do this in two steps:
-
Add this to the end of your guppy file:
if __name__ == "__main__": sys.stdout.buffer.write(main.compile().to_bytes()) # Or to compile a non-main guppy function: sys.stdout.buffer.write(guppy_func.compile_function().to_bytes())
-
Generate the hugr file with:
python guppy_examples/general/quantum-classical-1.py > test-guppy.hugr
Guppy language support
✅ = full support, *️⃣ = partial support, ❌ = unsupported
Overview Data Types
| Data Types | Support | Caveats |
|---|---|---|
| int | ✅ | |
| bool | ✅ | |
| nat | ✅ | |
| struct | ✅ | Cannot contain arrays |
| float | *️⃣ | Must be runtime constant, arithmetic comptime only |
| array | *️⃣ | Comptime only |
| tuple | *️⃣ | Unpacking with * returns array, so only at comptime |
Arrays
- Only supported within comptime guppy
- Cannot use guppy builtins that use runtime arrays internally
- Cannot be used within structs
- Cannot be used as parameter to either
@guppyor@guppy.comptimedecorated functions
Array examples:
def py_function(arr: array[qubit]) -> None: # ✅ no need to fully qualify array type, will be treated as python list
"""This python function can be called from @guppy.comptime, but not @guppy
Can do anything here that is allowed within @guppy.comptime
"""
for q in arr:
h(q)
@guppy.comptime
def guppy_comptime_function(arr: array[qubit, 4]) -> None: # ❌ no support for passing in arrays (even to guppy.comptime functions)
for q in arr:
h(q)
@guppy
def guppy_function(arr: array[qubit, 4]) -> None: # ❌ no support for passing in arrays
for q in arr:
h(q)
@guppy.comptime
def main() -> None:
comptime_array = array(qubit() for _ in range(4)) # ✅: array initialization at comptime
py_function(comptime_array) # ✅: can call python function from comptime and pass in comptime array
guppy_comptime_function(comptime_array) # ❌: parameters to guppy comptime functions are NOT comptime
guppy_function(comptime_array) # ❌: parameters to guppy functions are NOT comptime
@guppy
def main_noncomptime() -> None:
array = array(qubit() for _ in range(4)) # ❌: non-comptime array initialization
Tuples
- Unpacking with * only supported at comptime (creates array)
Structs
- Cannot contain arrays
Overview Guppy Features
| Features | Support | Remarks |
|---|---|---|
| if elif else constructs | ✅ | |
| function overloading | ✅ | |
| Generics (type_var/nat_var) | ✅ | nat_vars not really useful without runtime array support |
| First class/ Higher order functions | ✅ | |
| Recursive functions/loops | *️⃣ | Only if unrollable/serializable |
| measure_array/discard_array | ❌ | Use non-comptime arrays internally |
Development
#️⃣ Setting up the development environment
The easiest way to set up the development environment is to use the provided
devenv.nix file. This will set up a development shell with all the
required dependencies.
To use this, you will need to install devenv. Once you have it running, open a shell with:
devenv shell
All the required dependencies should be available. You can automate loading the shell by setting up direnv.
Run tests
You can run the rust test with:
cargo test
You can run the Python test with:
uv run pytest -n auto
If you want to update the snapshots you can do that via:
uv run pytest --snapshot-update
License
This project is licensed under Apache License, Version 2.0 (LICENSE or http://www.apache.org/licenses/LICENSE-2.0).
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hugr_qir-0.0.27.tar.gz.
File metadata
- Download URL: hugr_qir-0.0.27.tar.gz
- Upload date:
- Size: 935.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3d3248de4fd47f74cb64923c462760570aa17ae77db809b62c16a6d42cbfb83f
|
|
| MD5 |
91a45e06d76b23b181f1393f929563e7
|
|
| BLAKE2b-256 |
3b455343dd30f4cf996578ce9b7d7e49ffef2b2faaeb51ea8a608845537c1a13
|
File details
Details for the file hugr_qir-0.0.27-cp310-abi3-win_amd64.whl.
File metadata
- Download URL: hugr_qir-0.0.27-cp310-abi3-win_amd64.whl
- Upload date:
- Size: 29.5 MB
- Tags: CPython 3.10+, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6a8b28ec65f00e3b7f18967cdd9c1a0c35d70dde6b611fe47889223688453d2f
|
|
| MD5 |
b2c57a396d28b53f5bbb694452bb0e25
|
|
| BLAKE2b-256 |
acb7cfa4fd22dd3400153c9f0e0965b8b448773d46216b9a6178c1bb7b1e3923
|
File details
Details for the file hugr_qir-0.0.27-cp310-abi3-manylinux_2_34_x86_64.whl.
File metadata
- Download URL: hugr_qir-0.0.27-cp310-abi3-manylinux_2_34_x86_64.whl
- Upload date:
- Size: 34.5 MB
- Tags: CPython 3.10+, manylinux: glibc 2.34+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
00fcefcf7efa14b4f5cc85b0464fa963e71ea72e50fa119890a8127bd0d1306e
|
|
| MD5 |
15c33db81b1ddb1b543fe586bd362262
|
|
| BLAKE2b-256 |
0dbfbc2492143936856c1d7dab16f19702d96b782c762ff7abb2892fb91b3a36
|
File details
Details for the file hugr_qir-0.0.27-cp310-abi3-macosx_13_0_x86_64.whl.
File metadata
- Download URL: hugr_qir-0.0.27-cp310-abi3-macosx_13_0_x86_64.whl
- Upload date:
- Size: 32.5 MB
- Tags: CPython 3.10+, macOS 13.0+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
43c6a2cf5df35e7f6020a137b2a827eecb7da64cb602569a15bbfd96572ef956
|
|
| MD5 |
2f9a355aaefe988f488b0e824ddd467f
|
|
| BLAKE2b-256 |
a9e621b3a90c7288e3be3aec30bb3263cc817dec8dcbea93c80fe66ed3586848
|
File details
Details for the file hugr_qir-0.0.27-cp310-abi3-macosx_13_0_arm64.whl.
File metadata
- Download URL: hugr_qir-0.0.27-cp310-abi3-macosx_13_0_arm64.whl
- Upload date:
- Size: 29.7 MB
- Tags: CPython 3.10+, macOS 13.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e3013baabd36b82cd3fd85021ba1f63aeba098063ba1d65a2292037a31c4a821
|
|
| MD5 |
02819f750921c6edbef4fc54419ef252
|
|
| BLAKE2b-256 |
b6a97ea616618c8957c80d9dc4839a38da7908b7bd2aae3169ef2360e746412c
|