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:

pytest -n auto

If you want to update the snapshots you can do that via:

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.25.tar.gz (907.9 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.25-cp310-abi3-win_amd64.whl (29.4 MB view details)

Uploaded CPython 3.10+Windows x86-64

hugr_qir-0.0.25-cp310-abi3-manylinux_2_34_x86_64.whl (34.4 MB view details)

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

hugr_qir-0.0.25-cp310-abi3-macosx_13_0_x86_64.whl (32.4 MB view details)

Uploaded CPython 3.10+macOS 13.0+ x86-64

hugr_qir-0.0.25-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.25.tar.gz.

File metadata

  • Download URL: hugr_qir-0.0.25.tar.gz
  • Upload date:
  • Size: 907.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.13.1

File hashes

Hashes for hugr_qir-0.0.25.tar.gz
Algorithm Hash digest
SHA256 5af1709f06057361ffb199a450d2f44235085a437210d84fe18077a1cdf3506c
MD5 a89a9f8588b0eebfd37422047100a061
BLAKE2b-256 b429e83d94a065ad3c46e2c5415a55ac3201d09cc2edd5860e697b39275dd6fc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for hugr_qir-0.0.25-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 a85f78c4d3ebb2edcc7f7c55b3b875e44d326ed9c34dcb22a1ce6aaf2d0116eb
MD5 be700435eb7c9647795ee72ba0d1d0c3
BLAKE2b-256 fb951b32f9a64bc2eac5e577a3af397232a3128bf5c92126b897b988b6902957

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for hugr_qir-0.0.25-cp310-abi3-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 09b5becdb4cb31f619d58d3ff3134d8b9709b61c879e42dabbb97f8dd8c30ee0
MD5 4393a030bca8dc4a78de53280a7549ba
BLAKE2b-256 101ed429f04f2d82465b5940884e7a9a57598a1ef55a4f358341b5ada5b28479

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for hugr_qir-0.0.25-cp310-abi3-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 84b67822a9e0ba8acab3e960648c2b4300fdebdbe80a320890d2d147c2984ef7
MD5 5165ef80ad81625624d1485e64594536
BLAKE2b-256 7ebadda7746f7146435b1167b13cb4b53467757dd925393ea43aa80bce093545

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for hugr_qir-0.0.25-cp310-abi3-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 61598777ab79ec9fffacf00070ceb30ceb4fa6f630b73a2aedcfce762b325732
MD5 c4f805a489bcaa78df4f1eaba3335dc6
BLAKE2b-256 73d6b8f1694ecc260620c51d53adba68a4603716cbe6ecf78c9cdc489ee28764

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