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! bit.ly/mitiq-survey

Quickstart

Installation

pip install mitiq

Example

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 mybinder.org.

Quick Tour

Error mitigation techniques

Technique

Documentation

Mitiq module

Paper Reference(s)

Zero-noise extrapolation

ZNE

mitiq.zne

1611.09301
1612.02058
1805.04492

Probabilistic error cancellation

PEC

mitiq.pec

1612.02058
1712.09271
1905.10135

(Variable-noise) Clifford data regression

CDR

mitiq.cdr

2005.10189
2011.01157

Dynamical decoupling

(In progress)

(In progress)

9803057
1807.08768

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

Interface

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.

Citing Mitiq

If you use Mitiq in your research, please reference the Mitiq preprint (bibtex). A list of papers citing Mitiq can be found on Google Scholar / Semantic Scholar.

Contributing

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.