• Stars
    star
    1,322
  • Rank 35,559 (Top 0.8 %)
  • Language
    Python
  • License
    Apache License 2.0
  • Created almost 8 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A Python library for quantum programming using Quil.

PyQuil: Quantum programming in Python

binder docs coverage docker pepy pypi slack

PyQuil is a Python library for quantum programming using Quil, the quantum instruction language developed at Rigetti Computing. PyQuil serves three main functions:

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!

Quickstart with interactive tutorial notebooks

Without installing anything, you can quickly get started with quantum programming by exploring our interactive Jupyter notebook tutorials and examples. To run them in a preconfigured execution environment on Binder, click the "launch binder" badge at the top of the README or the link here! To learn more about the tutorials and how you can add your own, visit the rigetti/forest-tutorials repository. If you'd rather set everything up locally, or are interested in contributing to pyQuil, continue onto the next section for instructions on installing pyQuil and the Forest SDK.

Installing pyQuil and the Forest SDK

pypi conda-forge conda-rigetti

PyQuil can be installed using conda, pip, or from source. To install it from PyPI (via pip), do the following:

pip install pyquil

To instead install pyQuil 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.

PyQuil, along with quilc, the QVM, and other libraries, make up what is called the Forest SDK. To make full use of pyQuil, you will need to additionally have installed quilc and the QVM. For more information, check out the docs!

Running your first quantum program

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).readout_data['ro'].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 (QPU). 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 (QCS)!

Joining the Forest community

If you'd like to get involved with pyQuil and Forest, joining the Rigetti Forest Slack Workspace is a great place to start! You can do so by clicking the invite link in the previous sentence, or in the badge at the top of this README. The Slack Workspace is a great place to ask general questions, join high-level design discussions, and hear about updates to pyQuil and the Forest SDK.

To go a step further and start contributing to the development of pyQuil, good first steps are reporting a bug, requesting a feature, or picking up one of the issues with the good first issue or help wanted labels. Once you find an issue to work on, make sure to fork this repository and then open a pull request once your changes are ready. For more information on all the ways you can contribute to pyQuil (along with some helpful tips for developers and maintainers) check out our Contributing Guide!

To see what people have contributed in the past, check out the Changelog for a detailed list of all announcements, improvements, changes, and bugfixes. The Releases page for pyQuil contains similar information, but with links to the pull request for each change and its corresponding author. Thanks for contributing to pyQuil! 🙂

Citing pyQuil, Forest, and Quantum Cloud Services

zenodo

If you use pyQuil, Grove, or other parts of the Forest SDK in your research, please cite the Quil specification using the following BibTeX snippet:

@misc{smith2016practical,
    title={A Practical Quantum Instruction Set Architecture},
    author={Robert S. Smith and Michael J. Curtis and William J. Zeng},
    year={2016},
    eprint={1608.03355},
    archivePrefix={arXiv},
    primaryClass={quant-ph}
}

Additionally, if your research involves taking data on Rigetti quantum processors (QPUs) via the Quantum Cloud Services (QCS) platform, please reference the QCS paper using the following BibTeX snippet:

@article{Karalekas_2020,
    title = {A quantum-classical cloud platform optimized for variational hybrid algorithms},
    author = {Peter J Karalekas and Nikolas A Tezak and Eric C Peterson
              and Colm A Ryan and Marcus P da Silva and Robert S Smith},
    year = 2020,
    month = {apr},
    publisher = {{IOP} Publishing},
    journal = {Quantum Science and Technology},
    volume = {5},
    number = {2},
    pages = {024003},
    doi = {10.1088/2058-9565/ab7559},
    url = {https://doi.org/10.1088%2F2058-9565%2Fab7559},
}

The preprint of the QCS paper is available on arXiv, and the supplementary interactive notebooks and datasets for the paper can be found in the rigetti/qcs-paper repository.

License

PyQuil is licensed under the Apache License 2.0.

More Repositories

1

grove

Quantum algorithms built using pyQuil.
Python
363
star
2

quantumflow

QuantumFlow: A Quantum Algorithms Development Toolkit
Python
94
star
3

rpcq

The RPC framework and message specification for @rigetti Quantum Cloud Services.
Common Lisp
70
star
4

forest-openfermion

OpenFermion quantum chemistry plugin for @rigetti Forest.
Python
69
star
5

forest-benchmarking

A library for quantum characterization, verification, validation (QCVV), and benchmarking using pyQuil.
Python
45
star
6

reference-qvm

A reference implementation for a quantum virtual machine in Python
Python
44
star
7

forest-software

A curated list of projects developed using the Forest quantum programming environment.
42
star
8

oqaml

An OCaml based implementation of a Quil QVM
OCaml
37
star
9

gym-forest

Reinforcement learning environment for the classical synthesis of quantum programs.
Python
28
star
10

quantumflow-qaoa

Optimize QAOA circuits for graph maxcut using tensorflow
Python
25
star
11

DiscreteExteriorCalculus.jl

Discrete differential geometry on simplicial complexes
Julia
23
star
12

forest-tutorials

Binder repository of interactive tutorial notebooks for pyQuil and Forest.
Jupyter Notebook
23
star
13

docker-lisp

Docker image that contains SBCL, Quicklisp, and some QL libraries.
Dockerfile
20
star
14

qcs-paper

Binder repository of supplementary interactive notebooks for the QCS paper.
Jupyter Notebook
19
star
15

quil-rs

Quil Parser & Program Builder
Rust
18
star
16

AdmittanceModels.jl

Analysis of linear systems using admittance models
Julia
17
star
17

pyquil-quantum-dice

Getting started with PyQuil: Quantum dice example
Jupyter Notebook
12
star
18

DiscretePDEs.jl

Partial differential equations using Discrete Exterior Calculus
Julia
12
star
19

forest-notebook

Interactive quantum programming with Forest & Jupyter.
Dockerfile
12
star
20

qcs-sdk-rust

Rust SDK for Rigetti Quantum Cloud Services (QCS)
Rust
9
star
21

qcs-cli

The Rigetti Quantum Cloud Services Command Line Interface (CLI)
TypeScript
8
star
22

representability

Representability is a library to work with linearly constrained mathematical programs over tensors.
Python
8
star
23

qiskit-rigetti

Qiskit provider serving Rigetti hardware & simulator backends.
Python
7
star
24

qcs-sdk-qir

Compile & Run Quantum Intermediate Representation (QIR) Programs on Rigetti Quantum Cloud Services (QCS)
Rust
7
star
25

qcs-api-client-python

Python client for the QCS API
Python
3
star
26

gitlab-pipelines

GitLab CI YAML files containing useful template pipelines.
3
star
27

demo-notebooks

Jupyter Notebook
3
star
28

rigetti-pyo3

Utilities to support common patterns in pyo3-generated bindings
Rust
2
star
29

quil-qir

Utilities for Integrating QIR with Quil
LLVM
2
star
30

qcs-api-client-rust

Rust clients for Rigetti APIs
Rust
2
star
31

qcs-sdk-c

C SDK for Rigetti Quantum Cloud Services (QCS)
Rust
2
star
32

pyquil-for-azure-quantum

Microsoft Azure cloud integration for pyQuil
Python
1
star