Python based QIR generator library.
Project description
pyqir-generator
The pyqir-generator
package provides the ability to generate
QIR using a Python API.
It 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-generator
Examples
There are generator examples in the repository.
Let's look at a short example. 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.generator 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.m(module.qubits[0], module.results[0])
qis.m(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*))
%result0 = call %Result* @__quantum__qis__m__body(%Qubit* null)
%result1 = call %Result* @__quantum__qis__m__body(%Qubit* inttoptr (i64 1 to %Qubit*))
ret void
}
declare void @__quantum__qis__h__body(%Qubit*)
declare void @__quantum__qis__cnot__body(%Qubit*, %Qubit*)
declare %Result* @__quantum__qis__m__body(%Qubit*)
attributes #0 = { "EntryPoint" "requiredQubits"="2" }
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.
Building and Testing
See Building.
Current Limitations
- Classical computation and control flow are not yet fully supported.
- Only branching based on measurement results is currently possible.
- See issue #2: Support control flow and classical computation in PyQIR Generator.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Hashes for pyqir_generator-0.3.2a1-cp36-abi3-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 191729686919a8985f4c4233733df59cc09425f7b1dbd6cc72fb8cc7029596bf |
|
MD5 | 71b798be973a55aa4bbef6af97678ff2 |
|
BLAKE2b-256 | c20c61c58ab9bbe9cf329396e75c27d0e179d8ea8f7f872636383ab73de1d8c0 |
Hashes for pyqir_generator-0.3.2a1-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6e91a95c3513bbff405b42e9e7dfddef4aa1d2bf1b4a6f27a7641d3d9a4cc651 |
|
MD5 | a7e4e4b1447c3329389f8563ab3c902b |
|
BLAKE2b-256 | 022299036f530269d275677081e5e07fcb08ead0ec90db6f91b87731aa18710b |
Hashes for pyqir_generator-0.3.2a1-cp36-abi3-macosx_10_7_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 93e517d9e39b8ed7e29c70af1f49ffd2e449c3a03548e487e8ad3c9a0e3b01c7 |
|
MD5 | 2a2ffd6b39c78f09aea5c183fc11454a |
|
BLAKE2b-256 | 0357632cd6a0c4900c369361e4a39596543329bfe62a72b2a5c7ed7f36bb89f7 |