Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit

* prepare v0.21.0 release

Update `` and `VERSION.txt`

* Fix link

* Update

* Take out mention of PEC example

* Include identity insertion docs in the summary

Git stats


Failed to load latest commit information.
Latest commit message
Commit time

Mitiq logo

All Contributors

build Documentation Status codecov PyPI version arXiv Downloads Repository Unitary Fund Discord Chat Binder

Mitiq is a Python toolkit for implementing error mitigation techniques on quantum computers.

Current quantum computers are noisy due to interactions with the environment, imperfect gate applications, state preparation and measurement errors, etc. Error mitigation seeks to reduce these effects at the software level by compiling quantum programs in clever ways.

Want to know more? Check out our documentation and chat with us on Discord.

Do you use near-term quantum hardware? Have you tried Mitiq? Either way, take our survey and help make Mitiq better!



pip install mitiq


Define a function which inputs a circuit and returns an expectation value you want to compute, then use Mitiq to mitigate errors.

import cirq
from mitiq import zne, benchmarks

def execute(circuit: cirq.Circuit, noise_level: float = 0.001) -> float:
    """Returns Tr[ρ |0⟩⟨0|] where ρ is the state prepared by the circuit with depolarizing noise."""
    noisy_circuit = circuit.with_noise(cirq.depolarize(p=noise_level))
    return cirq.DensityMatrixSimulator().simulate(noisy_circuit).final_density_matrix[0, 0].real

circuit: cirq.Circuit = benchmarks.generate_rb_circuits(n_qubits=1, num_cliffords=50)[0]

true_value = execute(circuit, noise_level=0.0)       # Ideal quantum computer.
noisy_value = execute(circuit)                       # Noisy quantum computer.
zne_value = zne.execute_with_zne(circuit, execute)   # Noisy quantum computer + Mitiq.

print(f"Error (w/o  Mitiq): %0.4f" %abs((true_value - noisy_value) / true_value))
print(f"Error (with Mitiq): %0.4f" %abs((true_value - zne_value) / true_value))

Sample output:

Error (w/o  Mitiq): 0.0688
Error (with Mitiq): 0.0002

See our guides and examples for more explanation, techniques, and benchmarks. The examples and other notebooks can be run interactively on the cloud with

Quick Tour

Error mitigation techniques

Technique Documentation Mitiq module Paper Reference(s)
Zero-noise extrapolation ZNE mitiq.zne 1611.09301
Probabilistic error cancellation PEC mitiq.pec 1612.02058
(Variable-noise) Clifford data regression CDR mitiq.cdr 2005.10189
Dynamical decoupling DDD mitiq.cdd 9803057

See our roadmap for additional candidate techniques to implement. If there is a technique you are looking for, please file a feature request.


We refer to any programming language you can write quantum circuits in as a frontend, and any quantum computer / simulator you can simulate circuits in as a backend.

Supported frontends

Cirq Qiskit pyQuil Braket PennyLane
Cirq logo Qiskit logo Rigetti logo AWS logo    PennyLane logo

Note: Cirq is a core requirement of Mitiq and is installed when you pip install mitiq.

Supported backends

You can use Mitiq with any backend you have access to that can interface with supported frontends.


Mitiq uses asv to benchmark the core functionalities of the project. They are found in the benchmarks/ directory and their changes can be seen overtime at

Citing Mitiq

If you use Mitiq in your research, please reference the Mitiq whitepaper using the bibtex entry found in CITATION.bib.

A list of papers citing Mitiq can be found on Google Scholar / Semantic Scholar.


GNU GPL v.3.0.


We welcome contributions to Mitiq including bug fixes, feature requests, etc. To get started, check out our contribution guidelines and/or documentation guidelines. An up-to-date list of contributors can be found here and below.


Thanks goes to these wonderful people (emoji key):


⚠️ 💻

Laurent AJDNIK


Tianyi Hao

💻 🐛

Brian Lui

💻 🐛

Cole Kissane

💻 🐛

Michał Stęchły


Kunal Marwaha




Bobin Mathew



📖 🐛


💡 💻


💻 🐛

Yousef Hindy

💻 ⚠️ 📖

Mohamed El Mandouh

💻 ⚠️ 📖

Aaron Robertson

💡 ⚠️ 🐛 🤔 💻 📖

Ashish Panigrahi


Maxime Tremblay

💻 📖 🤔


📖 ⚠️

Purva Thakre

📖 🚇 💻 🤔

Peter Karalekas

🚧 💻 📖 🚇 🤔

Sarah Kaiser

🚧 💻 📖 🚇 🤔

Andrea Mari

🚧 💻 📖 🚇 🤔

Will Zeng

🚧 💻 📖 🚇 🤔

Nathan Shammah

🚧 💻 📖 🚇 🤔

Ryan LaRose

🚧 💻 📖 🚇 🤔




💻 💡

AkashNarayanan B



⚠️ 💻

Rahul Mistri

⚠️ 💻

Victory Omole

⚠️ 💻

nate stemen

🚇 📖 ⚠️ 💻

Luciano Bello

🚇 💻

Amir Ebrahimi

💻 ⚠️ 📖

This project follows the all-contributors specification. Contributions of any kind are welcome!