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.26.tar.gz (934.8 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.26-cp310-abi3-win_amd64.whl (29.5 MB view details)

Uploaded CPython 3.10+Windows x86-64

hugr_qir-0.0.26-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.26-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.26-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.26.tar.gz.

File metadata

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

File hashes

Hashes for hugr_qir-0.0.26.tar.gz
Algorithm Hash digest
SHA256 4e9a41e9ea4f23291c287d2ef21fb525b51a147ed0d3c53caefff3222578d0d3
MD5 57364555bb9e3a2375bcf4984f42fb2c
BLAKE2b-256 35d78899037191e4db733756dbb9b923ee24c178b1a50b8acc328304dd72f0a4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for hugr_qir-0.0.26-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 27dd6ac91c304f049898f65e4f2782b0d602661c53fe730c6ad342245a6f83a3
MD5 c78c116d6bdd7683d4ecabb1a06ac0e4
BLAKE2b-256 171ccb8ae1d61a94a038d9ad93f33620fb36cb95e13c1d54eb8d23513a4d4259

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for hugr_qir-0.0.26-cp310-abi3-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 131300b51c0ba0dcb04d3cc34bdd7498a6dfa71fc0b3e4fd878cc4fd6bde20b2
MD5 184725211f7cedb8719bb6066cea57d5
BLAKE2b-256 9c41fdcd819fa527a021d7e2904bf4931035f32f5cd3465f812b25320fdaa07a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for hugr_qir-0.0.26-cp310-abi3-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 b59ae37aa8810bc0ccbfb90651bd21f4777c84ba64c7ec74fc458eb5499f6395
MD5 356d15ae2b459c4a711bd61fecde17e8
BLAKE2b-256 929b8e5c58f22948b334a3356c421a16ef0e383f54ee49c500b420c9a3312485

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for hugr_qir-0.0.26-cp310-abi3-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 124e544785f66ef81f244bf4bbcaff75be420f6a1af9883c2bf95b988c133774
MD5 73b0f158555d3e3bbca22f1208a7e189
BLAKE2b-256 4247e3d792c087481d9b1db512f7845170e92385dcd024ebe5ed181fc367cf8a

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