Skip to main content

PyQIR parses, generates and evaluates the Quantum Intermediate Representation.

Project description

PyQIR

The pyqir package provides the ability to generate QIR as well as an easy way to parse and analyze QIR.

QIR generation is intended to be used by code automating translation processes enabling the conversion in some format to QIR via Python; i.e., this is a low-level API intended to be used as a bridge to existing Python frameworks enabling the generation of QIR rather than directly consumed by an end-user. It is not intended to be used as a framework for algorithm and application development.

Installation

The package is released on PyPI and can be installed via pip:

pip install pyqir

Examples

PyQIR examples can be found in this repository's examples folder.

Generation

The following code creates QIR for a Bell pair before measuring each qubit and returning the result. The unoptimized QIR is displayed in the terminal when executed:

from pyqir import BasicQisBuilder, SimpleModule

module = SimpleModule("Bell", num_qubits=2, num_results=2)
qis = BasicQisBuilder(module.builder)

qis.h(module.qubits[0])
qis.cx(module.qubits[0], module.qubits[1])

qis.mz(module.qubits[0], module.results[0])
qis.mz(module.qubits[1], module.results[1])

print(module.ir())

The QIR output will look like:

; ModuleID = 'Bell'
source_filename = "Bell"

%Qubit = type opaque
%Result = type opaque

define void @main() #0 {
entry:
  call void @__quantum__qis__h__body(%Qubit* null)
  call void @__quantum__qis__cnot__body(%Qubit* null, %Qubit* inttoptr (i64 1 to %Qubit*))
  call void @__quantum__qis__mz__body(%Qubit* null, %Result* null)
  call void @__quantum__qis__mz__body(%Qubit* inttoptr (i64 1 to %Qubit*), %Result* inttoptr (i64 1 to %Result*))
  ret void
}

declare void @__quantum__qis__h__body(%Qubit*)

declare void @__quantum__qis__cnot__body(%Qubit*, %Qubit*)

declare void @__quantum__qis__mz__body(%Qubit*, %Result* writeonly) #1

attributes #0 = { "entry_point" "num_required_qubits"="2" "num_required_results"="2" "output_labeling_schema" "qir_profiles"="custom" }
attributes #1 = { "irreversible" }

!llvm.module.flags = !{!0, !1, !2, !3}

!0 = !{i32 1, !"qir_major_version", i32 1}
!1 = !{i32 7, !"qir_minor_version", i32 0}
!2 = !{i32 1, !"dynamic_qubit_management", i1 false}
!3 = !{i32 1, !"dynamic_result_management", i1 false}

Contributing

There are many ways in which you can contribute to PyQIR, whether by contributing a feature or by engaging in discussions; we value contributions in all shapes and sizes! We refer to this document for guidelines and ideas for how you can get involved.

Contributing a pull request to this repo requires to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. A CLA-bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately. Simply follow the instructions provided by the bot. You will only need to do this once.

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

pyqir-0.9.0-cp37-abi3-win_amd64.whl (1.4 MB view details)

Uploaded CPython 3.7+ Windows x86-64

pyqir-0.9.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.7+ manylinux: glibc 2.17+ x86-64

pyqir-0.9.0-cp37-abi3-macosx_11_0_arm64.whl (1.6 MB view details)

Uploaded CPython 3.7+ macOS 11.0+ ARM64

pyqir-0.9.0-cp37-abi3-macosx_10_9_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.7+ macOS 10.9+ x86-64

File details

Details for the file pyqir-0.9.0-cp37-abi3-win_amd64.whl.

File metadata

  • Download URL: pyqir-0.9.0-cp37-abi3-win_amd64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.7+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.0

File hashes

Hashes for pyqir-0.9.0-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 ff92a1d0525923528b541bc81997dd70bcb18ba516ebe0f87f3b1940aaeb3537
MD5 ec911f99c838b3b952664ed7576a8392
BLAKE2b-256 b467efc3a8071988406567c48a8a449fccfffe21052fa5d3f2e0e37af5460f13

See more details on using hashes here.

File details

Details for the file pyqir-0.9.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyqir-0.9.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 579038a9e694cad262a0e171a64af12d3117a657860493de43d6625fcb33b39e
MD5 718ee620e1b009af9ba42e4a67708efc
BLAKE2b-256 a275c05ac470f4b76a632d6f2a378a191598d8f0b537b10d679ac74a60d52581

See more details on using hashes here.

File details

Details for the file pyqir-0.9.0-cp37-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyqir-0.9.0-cp37-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 712e1d3509b912219ebd464186a082a3be1635406ef2d91753af50f12917ce41
MD5 12a12f0f9d45a09ad7f4e5728021764f
BLAKE2b-256 de5c7979fa9ebc386afbc44bde6c0ed3ed125cde0decacfcf6d855e926c4e393

See more details on using hashes here.

File details

Details for the file pyqir-0.9.0-cp37-abi3-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pyqir-0.9.0-cp37-abi3-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 02a61b48965469697d85ff0480be7f84b390151cbc3523d5781700909a28398f
MD5 c856b6a25c8fdcf8c4e409aa2a8c5142
BLAKE2b-256 2fe73f9a94e36377c32669e5dca63d26d632b46ecae1262849cf505b886cbd7f

See more details on using hashes here.

Supported by

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