PyQuil is a Python library for quantum programming using Quil, the quantum instruction language developed at Rigetti Computing. PyQuil serves three main functions:
- Easily generating Quil programs from quantum gates and classical operations
- Compiling and simulating Quil programs using the Quil Compiler (quilc) and the Quantum Virtual Machine (QVM)
- Executing Quil programs on real quantum processors (QPUs) using Quantum Cloud Services (QCS)
PyQuil has a ton of other features, which you can learn more about in the docs. However, you can also keep reading below to get started with running your first quantum program!
Please Note: PyQuil, along with quilc, the QVM, and other libraries, make up what is called the Forest SDK. To make full use of pyQuil's functionality, you will need to additionally have installed quilc and the QVM. This can be done by following their respective READMEs, or by downloading them as binaries from here.
PyQuil can be installed using conda
, pip
, or directly from source.
To install pyQuil as a conda
package from the conda-forge channel (recommended), do the following:
conda install -c conda-forge pyquil
To instead install pyQuil as a PyPI package, do the following:
pip install pyquil
Finally, if you would prefer to install pyQuil directly from source, do the following from within the repository after cloning it:
pip install -e .
If you choose to use pip
, we highly recommend installing pyQuil within a virtual environment.
In just a few lines, we can use pyQuil with the Forest SDK to simulate a Bell state!
from pyquil import get_qc, Program
from pyquil.gates import CNOT, H, MEASURE
qvm = get_qc('2q-qvm')
p = Program()
p += H(0)
p += CNOT(0, 1)
ro = p.declare('ro', 'BIT', 2)
p += MEASURE(0, ro[0])
p += MEASURE(1, ro[1])
p.wrap_in_numshots_loop(10)
qvm.run(p).tolist()
The output of the above program should look something like the following, the statistics of which are consistent with a two-qubit entangled state.
[[0, 0],
[1, 1],
[1, 1],
[1, 1],
[1, 1],
[0, 0],
[0, 0],
[1, 1],
[0, 0],
[0, 0]]
Using the Forest SDK, you can simulate the operation of a real quantum processor. If you would like to run on the real QPUs in our lab in Berkeley, you can sign up for an account on Quantum Cloud Services!
Join the public Forest Slack channel at http://slack.rigetti.com.
The following projects have been contributed by community members:
- Syntax Highlighting for Quil contributed by James Weaver
- Web Based Circuit Simulator contributed by Ravisankar A V
- Quil in Javascript contributed by Nick Doiron
- Quil in Java contributed by Victory Omole
To make changes to PyQuil itself see DEVELOPMENT.md for instructions on development and testing.
If you use pyQuil, Grove, or other parts of the Rigetti Forest stack in your research, please cite it as follows:
BibTeX:
@misc{1608.03355,
title={A Practical Quantum Instruction Set Architecture},
author={Smith, Robert S and Curtis, Michael J and Zeng, William J},
journal={arXiv preprint arXiv:1608.03355},
year={2016}
}
Text:
R. Smith, M. J. Curtis and W. J. Zeng, "A Practical Quantum Instruction Set Architecture," (2016),
arXiv:1608.03355 [quant-ph], https://arxiv.org/abs/1608.03355
PyQuil is licensed under the Apache License 2.0.