Skip to main content

Quantinuum's tool for converting HUGR to QIR

Project description

hugr-qir

build_status codecov

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:

  1. 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())
    
  2. 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 @guppy or @guppy.comptime decorated 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hugr_qir-0.0.27.tar.gz (935.7 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

hugr_qir-0.0.27-cp310-abi3-win_amd64.whl (29.5 MB view details)

Uploaded CPython 3.10+Windows x86-64

hugr_qir-0.0.27-cp310-abi3-manylinux_2_34_x86_64.whl (34.5 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.34+ x86-64

hugr_qir-0.0.27-cp310-abi3-macosx_13_0_x86_64.whl (32.5 MB view details)

Uploaded CPython 3.10+macOS 13.0+ x86-64

hugr_qir-0.0.27-cp310-abi3-macosx_13_0_arm64.whl (29.7 MB view details)

Uploaded CPython 3.10+macOS 13.0+ ARM64

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

Hashes for hugr_qir-0.0.27.tar.gz
Algorithm Hash digest
SHA256 3d3248de4fd47f74cb64923c462760570aa17ae77db809b62c16a6d42cbfb83f
MD5 91a45e06d76b23b181f1393f929563e7
BLAKE2b-256 3b455343dd30f4cf996578ce9b7d7e49ffef2b2faaeb51ea8a608845537c1a13

See more details on using hashes here.

File details

Details for the file hugr_qir-0.0.27-cp310-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for hugr_qir-0.0.27-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 6a8b28ec65f00e3b7f18967cdd9c1a0c35d70dde6b611fe47889223688453d2f
MD5 b2c57a396d28b53f5bbb694452bb0e25
BLAKE2b-256 acb7cfa4fd22dd3400153c9f0e0965b8b448773d46216b9a6178c1bb7b1e3923

See more details on using hashes here.

File details

Details for the file hugr_qir-0.0.27-cp310-abi3-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for hugr_qir-0.0.27-cp310-abi3-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 00fcefcf7efa14b4f5cc85b0464fa963e71ea72e50fa119890a8127bd0d1306e
MD5 15c33db81b1ddb1b543fe586bd362262
BLAKE2b-256 0dbfbc2492143936856c1d7dab16f19702d96b782c762ff7abb2892fb91b3a36

See more details on using hashes here.

File details

Details for the file hugr_qir-0.0.27-cp310-abi3-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for hugr_qir-0.0.27-cp310-abi3-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 43c6a2cf5df35e7f6020a137b2a827eecb7da64cb602569a15bbfd96572ef956
MD5 2f9a355aaefe988f488b0e824ddd467f
BLAKE2b-256 a9e621b3a90c7288e3be3aec30bb3263cc817dec8dcbea93c80fe66ed3586848

See more details on using hashes here.

File details

Details for the file hugr_qir-0.0.27-cp310-abi3-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for hugr_qir-0.0.27-cp310-abi3-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 e3013baabd36b82cd3fd85021ba1f63aeba098063ba1d65a2292037a31c4a821
MD5 02819f750921c6edbef4fc54419ef252
BLAKE2b-256 b6a97ea616618c8957c80d9dc4839a38da7908b7bd2aae3169ef2360e746412c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page