Skip to main content

Library for quantum circuit rewriting and optimisation using the ZX-calculus

Project description

PyZX

Unitary Foundation Quantinuum Support PyPI version

PyZX (pronounce as Pisics) is a Python tool implementing the theory of ZX-calculus for the creation, visualisation, and automated rewriting of large-scale quantum circuits. Please watch this 2-minute video for a short introduction.

PyZX currently allows you to:

  • Read in quantum circuits in the file format of QASM, Quipper or Quantomatic.
  • Rewrite circuits into a pseudo-normal form using the ZX-calculus.
  • Extract new simplified circuits from these reduced graphs.
  • Visualise the ZX-graphs and rewrites using either Matplotlib, Quantomatic or as a TikZ file for use in LaTeX documents.
  • Output the optimised circuits in QASM, QC or QUIPPER format.

You can try out the in-browser demo which shows some of these features here.

About the ZX-calculus

ZX-diagrams are a type of tensor network built out of combinations of linear maps known as spiders. There are 2 types of spiders: the Z-spiders (represented as green dots in PyZX) and the X-spiders (represented as red dots). Every linear map between some set of qubits can be represented by a ZX-diagram. The ZX-calculus is a set of rewrite rules for ZX-diagrams. There are various extensive set of rewrite rules. PyZX however, uses only rewrite rules concerning the Clifford fragment of the ZX-calculus. Importantly, this set of rewrite rules is complete for Clifford diagrams, meaning that two representations of a Clifford map can be rewritten into one another if and only if the two linear maps they represent are equal.

Here is a website with resources and information about the ZX-calculus. For a short introduction to the ZX-calculus see this paper while for a complete overview we recommend this book. PyZX extensively uses two derived rewrite rules known as local complementation and pivoting. More information about these operations can be found in this paper.

Installation

If you wish to use PyZX as a Python module for use in other projects, we recommend installing via pip:

    pip install pyzx

If you want to use the demos or the benchmark circuits you should install PyZX from source by cloning the git repository.

PyZX has no strict dependencies, although some functionality requires numpy. PyZX is built to interact well with Jupyter, so we additionally recommend you have Jupyter and matplotlib installed.

Usage

See the Documentation for a full overview of the features of PyZX.

If you have Jupyter installed you can use one of the demonstration notebooks in the demos folder for an illustration of what PyZX can do.

This is some example Python code for generating a random circuit, optimizing it, and finally displaying it:

import pyzx as zx
qubit_amount = 5
gate_count = 80
#Generate random circuit of Clifford gates
circuit = zx.generate.cliffordT(qubit_amount, gate_count)
#If running in Jupyter, draw the circuit
zx.draw(circuit)
#Use one of the built-in rewriting strategies to simplify the circuit
zx.simplify.full_reduce(circuit)
#See the result
zx.draw(circuit)

PyZX can also be run from the commandline. To optimise a circuit you can for instance run

python -m pyzx opt input_circuit.qasm

Attribution

If you wish to cite PyZX in an academic work, please cite the accompanying paper:

  @inproceedings{kissinger2020Pyzx,
    author = {Kissinger, Aleks and van de Wetering, John},
    title = {{PyZX: Large Scale Automated Diagrammatic Reasoning}},
    year = {2020},
    booktitle = {{\rm Proceedings 16th International Conference on} Quantum Physics and Logic, {\rm Chapman University, Orange, CA, USA., 10-14 June 2019}},
    editor = {Coecke, Bob and Leifer, Matthew},
    series = {Electronic Proceedings in Theoretical Computer Science},
    volume = {318},
    pages = {229-241},
    publisher = {Open Publishing Association},
    doi = {10.4204/EPTCS.318.14}
}

We gratefully acknowledge support from the Unitary Foundation, Quantinuum, and the Engineering and Physical Sciences Research Council grant number EP/Z002230/1, (De)constructing quantum software (DeQS) and a Veni grant from the Dutch Research Council (NWO).

Here's a plane that says PYZX: PYZX

Project details


Download files

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

Source Distribution

pyzx-0.10.1.tar.gz (507.4 kB view details)

Uploaded Source

Built Distribution

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

pyzx-0.10.1-py3-none-any.whl (543.8 kB view details)

Uploaded Python 3

File details

Details for the file pyzx-0.10.1.tar.gz.

File metadata

  • Download URL: pyzx-0.10.1.tar.gz
  • Upload date:
  • Size: 507.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pyzx-0.10.1.tar.gz
Algorithm Hash digest
SHA256 7fabd3ad5d0e1362550416e597036de8aadcf5782f9ae87237f024869d6685c7
MD5 a120e4a7a062fa9ab7cb211d294cf050
BLAKE2b-256 6af1a7b32dcc7406ac5491a480c959b4efaab7af6ccf8fccb4ae61eabceecc1b

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyzx-0.10.1.tar.gz:

Publisher: release.yml on zxcalc/pyzx

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

File details

Details for the file pyzx-0.10.1-py3-none-any.whl.

File metadata

  • Download URL: pyzx-0.10.1-py3-none-any.whl
  • Upload date:
  • Size: 543.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pyzx-0.10.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ff150ef151e1567f1b39e042e5994113154070e7e83d4ebf30539687de0898bb
MD5 ceb2d9301953314ca893828349a28a2b
BLAKE2b-256 ace5ec7d66be5c1e2a3d0c2fd3527076205b77120033085e82355c8ad560c8c6

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyzx-0.10.1-py3-none-any.whl:

Publisher: release.yml on zxcalc/pyzx

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