Skip to main content

QIR to Quantinuum QIS (Quantum Instruction Set) compiler

Project description

QIR-QIS

A compiler that validates and translates QIR (Quantum Intermediate Representation) to Quantinuum QIS (Quantum Instruction Set). This tool enables quantum programs written in QIR to run on Quantinuum's quantum computing systems.

Features

  • QIR Validation: Validates QIR bitcode for correctness and spec compliance
  • QIS Translation: Compiles QIR to Quantinuum's native QIS instruction set
  • Python & Rust API: Use as a Rust library or Python package
  • CLI Tool: Command-line interface for quick compilation

See qtm-qir-reference.md for details on supported QIR features and their mapping to Quantinuum QIS.

Installation

From Source (Rust)

Requirements:

  • Rust >= 1.91.0
  • LLVM 14
cargo build --release

The compiled binary will be available at target/release/qir-qis.

Python Package

Requirements:

  • Python >= 3.10, < 3.15
  • uv (recommended) or pip
# Using uv (recommended)
uv pip install qir-qis

# Using pip
pip install qir-qis

For development installation:

uv sync

Usage

Command Line

Compile a QIR LLVM IR file to QIS bitcode:

# Basic usage
qir-qis input.ll

# With custom optimization level
qir-qis -O 3 input.ll

# Specify target architecture
qir-qis -t x86-64 input.ll

# Or using cargo
cargo run -- input.ll

This generates input.qis.bc containing the compiled QIS bitcode.

Python API

See examples/python_api.py for a complete working example.

uv run examples/python_api.py

For a more comprehensive example with quantum simulation, see main.py.

Rust API

See examples/rust_api.rs for a complete working example.

cargo run --example rust_api

Development

Setting Up Development Environment

# Clone the repository
git clone https://github.com/quantinuum/qir-qis.git
cd qir-qis

# Install Rust dependencies and build
cargo build

# Install Python dependencies
uv sync

Building

# Build Rust binary
cargo build --release

# Build Python package
uv run maturin build --release

Testing

Running Tests

Tests require cargo-nextest:

# Run all tests
make test

# Or directly with cargo
cargo nextest run --all-targets --all-features

Testing Individual Files

# Compile a single QIR file
make compile FILE=tests/data/adaptive.ll

# Compile all test files
make allcompile

Simulation Testing with Selene

Test the compiled QIS using Selene quantum simulator:

# Simulate a single file (runs 5 shots by default)
make sim FILE=tests/data/adaptive.ll

# Simulate all test files
make allsim

This will:

  1. Compile the QIR to QIS
  2. Run it on the Selene/Quest simulator
  3. Display measurement results

Code Quality

# Run linters
make lint

# This runs:
# - prek (pre-commit checks)
# - typos checker
# - cargo clippy

Regenerating Python Stubs

After modifying the Python API:

make stubs

This updates qir_qis.pyi with the latest type signatures.

Project Structure

qir-qis/
├── src/
│   ├── main.rs          # CLI entry point
│   ├── lib.rs           # Library and Python bindings
│   ├── convert.rs       # QIR to QIS conversion logic
│   ├── decompose.rs     # Gate decomposition
│   ├── opt.rs           # LLVM optimization passes
│   └── utils.rs         # Helper utilities
├── tests/
│   ├── data/            # Test QIR files
│   └── snaps/           # Snapshot test results
├── main.py              # Example Python usage with simulation
├── Cargo.toml           # Rust package configuration
├── pyproject.toml       # Python package configuration
└── Makefile             # Common development tasks

Common Makefile Targets

Command Description
make test Run all unit and integration tests
make compile FILE=<path> Compile a single QIR file
make sim FILE=<path> Compile and simulate a QIR file
make lint Run code quality checks
make stubs Regenerate Python type stubs
make allcompile Compile all test files
make allsim Simulate all test files

Contributing

Contributions are welcome! Please read CONTRIBUTING.md for:

  • How to report issues and submit pull requests
  • Coding standards and commit message format
  • Development workflow and testing requirements

Quick checklist before submitting:

  • Tests pass: make test
  • Linters pass: make lint
  • Documentation updated
  • CHANGELOG.md updated

License

Apache-2.0

Copyright Quantinuum

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

qir_qis-0.1.0-cp310-abi3-win_amd64.whl (15.7 MB view details)

Uploaded CPython 3.10+Windows x86-64

qir_qis-0.1.0-cp310-abi3-manylinux_2_28_x86_64.whl (18.8 MB view details)

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

qir_qis-0.1.0-cp310-abi3-macosx_13_0_x86_64.whl (17.5 MB view details)

Uploaded CPython 3.10+macOS 13.0+ x86-64

qir_qis-0.1.0-cp310-abi3-macosx_13_0_arm64.whl (15.9 MB view details)

Uploaded CPython 3.10+macOS 13.0+ ARM64

File details

Details for the file qir_qis-0.1.0-cp310-abi3-win_amd64.whl.

File metadata

  • Download URL: qir_qis-0.1.0-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 15.7 MB
  • Tags: CPython 3.10+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for qir_qis-0.1.0-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 b77554f58fde4416a63c8095caf7a445b55bb8eac3e6eb2e4a55bb5e6c0d5494
MD5 437bc834468d188b12a977742c5aa982
BLAKE2b-256 bc35befdefc5c3553cfae1b9ec21fdde235678e4cf4bea6db89a611c96e04f3d

See more details on using hashes here.

Provenance

The following attestation bundles were made for qir_qis-0.1.0-cp310-abi3-win_amd64.whl:

Publisher: wheels-release.yml on Quantinuum/qir-qis

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file qir_qis-0.1.0-cp310-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for qir_qis-0.1.0-cp310-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3db2fb7dce52af882b80df824f553358ec58692acb2acecdea5c0955486814c4
MD5 6cd7a3618a3a0df2aea960b8280b7350
BLAKE2b-256 f4b60318064e976f4c9cd1c53ab7c24fb7e0ddcbd4d297f136496dafbfc72371

See more details on using hashes here.

Provenance

The following attestation bundles were made for qir_qis-0.1.0-cp310-abi3-manylinux_2_28_x86_64.whl:

Publisher: wheels-release.yml on Quantinuum/qir-qis

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file qir_qis-0.1.0-cp310-abi3-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for qir_qis-0.1.0-cp310-abi3-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 ab74537bb98904276e7d2668b80f1ff2c871399e13d4fa0b65b51268d7593fec
MD5 dffa862e4e24f19c1a7e3e47cb790b68
BLAKE2b-256 836159e2a4769f313854b62022cb370d82e823a9f152c3fd326706695ac1b831

See more details on using hashes here.

Provenance

The following attestation bundles were made for qir_qis-0.1.0-cp310-abi3-macosx_13_0_x86_64.whl:

Publisher: wheels-release.yml on Quantinuum/qir-qis

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file qir_qis-0.1.0-cp310-abi3-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for qir_qis-0.1.0-cp310-abi3-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 2f6fae4ffea9e1e806347667331cef6d2e14ba14a3bfad1f088dbe6ae17e2b65
MD5 f947382f0e4bb16d2eb75d5b0c162b84
BLAKE2b-256 d274988f8d51b17696ab97d71cb4c5250a3b7a0e6e25303ec16b5491b16c3523

See more details on using hashes here.

Provenance

The following attestation bundles were made for qir_qis-0.1.0-cp310-abi3-macosx_13_0_arm64.whl:

Publisher: wheels-release.yml on Quantinuum/qir-qis

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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