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

Uploaded CPython 3.10+Windows x86-64

hugr_qir-0.0.25rc1-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.25rc1-cp310-abi3-macosx_13_0_x86_64.whl (32.3 MB view details)

Uploaded CPython 3.10+macOS 13.0+ x86-64

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

File metadata

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

File hashes

Hashes for hugr_qir-0.0.25rc1.tar.gz
Algorithm Hash digest
SHA256 211c96673c23acee6d0d1457e3d36eedf3a5f19ae3e92da76574bfe0f70ab3a5
MD5 345b702e45dd500ee686117a14eb517f
BLAKE2b-256 8e5a72ac6809d753637df5329a8d47c6eabbefbec9b1f8677db41faa88bae4bd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for hugr_qir-0.0.25rc1-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 509b53738d5c5d5d725310d0189a32c7bf6023b06308f3ab9684b40b416a2942
MD5 1f6cf9323913eaf6f28483fbf4c01873
BLAKE2b-256 d0a61968d6961aadb8a0ccccaaf2cfaf88c74186f4e0e287c607f68d82979856

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for hugr_qir-0.0.25rc1-cp310-abi3-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 8114c0542f3b129d02f676d0f00e200d43ef4e5f431768d5fc4d4d399e89144d
MD5 b9fda15e3522be74a1366ddad093de5f
BLAKE2b-256 7e37f02a528a4656a73e269fdc8287c0a973c275c097621e29c740e06445c23f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for hugr_qir-0.0.25rc1-cp310-abi3-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 61fda84f0c18509198a17cd6d813f50e1eaad623a0e33d0fda3f1e7138265bb9
MD5 5b66d75db505a377c0398e8ab5f111dd
BLAKE2b-256 39c6b174910f09e13047fa3980e96caa8cbda53b09253e7e8bc62baebb042642

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for hugr_qir-0.0.25rc1-cp310-abi3-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 1b705cfdd6347b024aab2b95c1fb4064bdd2dbd3c468a2ec55d521fa17b09519
MD5 380e85ea407a8a13ce49c0feffa89487
BLAKE2b-256 6a51b41a5360ee435113d84fcbdc79fc2e13a5af108eeb975a5f12068aa160b6

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