Skip to content

Compilers and languages

pyzx

Maintained by Quantomatic

PyZX is a specialized but influential tool for circuit rewriting and ZX-calculus-inspired optimization, making it a useful example of deeper compiler and simplification tooling.

OpenQASMApache-2.0v0.10.2Flagship
pyzx illustration

Resource snapshot

Category

Compilers and languages

Stars

524

Last pushed

May 25, 2026Updated 3mo ago

Open issues

31

Quickstart

Get running in a few lines.

Quickstart
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)

What it is

PyZX is valuable in an educational library because it shows what the ecosystem looks like once you move past surface-level circuit authoring and start caring about structural rewrites, simplification, and representation theory.

It is not the universal starting point, but it is exactly the kind of specialized tool that helps advanced readers understand how rich the compiler side of the ecosystem has become.

Who it's for

Advanced developers, compiler-minded readers, and researchers interested in circuit simplification and formal rewriting techniques.

What you can build or learn

  • Study circuit rewriting and optimization beyond standard transpiler passes.
  • Understand how formal methods show up in practical tooling.
  • Compare specialized optimizer tooling with general-purpose compiler stacks.

Plays well with

License

Apache-2.0

SPDX identifier detected from the repository metadata or license files.

Repository README

Preview from the project README.

Rendered as Markdown inside a scrollable preview. Long READMEs stay contained; expand or open on GitHub for the full document.

~633 words · about 3 min readOpen on GitHub

PyZX

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:

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

Read on GitHub

Activity

Latest release

—

Watchers

20

Python support

>=3.10

Key dependencies

typing_extensions, numpy, pyperclip, tqdm, ipywidgets, lark

Learn digest

Get monthly updates when library entries change.

Monthly digest: new library entries, updated flagships, and one editorial pick.

Related resources

Keep exploring nearby tools.

quantumlib

Cirq

Python framework for creating, editing, and running Noisy Intermediate-Scale Quantum (NISQ) circuits.

PythonApache-2.0Flagship

4,971 stars · Updated 3mo ago

NVIDIA

cuda-quantum

C++ and Python support for the CUDA Quantum programming model for heterogeneous quantum-classical workflows

C++Apache-2.0Flagship

1,048 stars · Updated 3mo ago

QISKit

openqasm

Quantum assembly language for extended quantum circuits

PythonApache-2.0

1,468 stars · Updated 3mo ago

QISKit

qiskit

Qiskit is an open-source SDK for working with quantum computers at the level of extended quantum circuits, operators, and primitives.

PythonApache-2.0FlagshipQtangl relevant

7,412 stars · Updated 3mo ago

Microsoft

QuantumKatas

Tutorials and programming exercises for learning Q# and quantum computing

Jupyter NotebookMITFlagshipArchive

4,862 stars · Updated 2y ago

CQCL

tket

Source code for the TKET quantum compiler, Python bindings and utilities

C++Apache-2.0FlagshipQtangl relevant

308 stars · Updated 3mo ago