Skip to main content

M3: Matrix-free measurement mitigation

Project description

mthree

License PyPI version pypi workflow

Matrix-free Measurement Mitigation (M3).

M3 is a measurement mitigation technique that solves for corrected measurement probabilities using a dimensionality reduction step followed by either direct LU factorization or a preconditioned iterative method that nominally converges in O(1) steps, and can be computed in parallel. For example, M3 can compute corrections on 42 qubit GHZ problems in under two seconds on a quad-core machine (depending on the number of unique bitstrings in the output).

Documentation

Online Documentation @ Qiskit.org

Installation

You can pip install M3 in serial mode using PyPi via:

pip install mthree

Alternatively, one can install from source:

python setup.py install

To enable openmp one must have an openmp 3.0+ enabled compiler and install with:

python setup.py install --openmp

OpenMP on OSX

On OSX one must install LLVM using homebrew (You cannot use GCC):

brew install llvm

after which the following (or the like) must be executed in the terminal:

export PATH="/usr/local/opt/llvm/bin:$PATH"

and

export LDFLAGS="-L/usr/local/opt/llvm/lib -Wl,-rpath,/usr/local/opt/llvm/lib"
export CPPFLAGS="-I/usr/local/opt/llvm/include"

Then installation with openmp can be accomplished using:

CC=clang CXX=clang python setup.py install --openmp

Usage

Basic usage

M3 is simple to use:

import mthree
# Specify a mitigator object targeting a given backend
mit = mthree.M3Mitigation(backend)

# Compute the 1Q calibration matrices for the given qubits and given number of shots
# By default it is over all backend qubits at 10000 shots.
mit.cals_from_system(qubits, shots)

# Apply mitigation to a given dict of raw counts over the specified qubits
m3_quasi = mit.apply_correction(raw_counts, qubits)

Note that here qubits is a list of which qubits are measured to yield the bits in the output. For example the list [4,3,1,2,0] indicates that a measurement on physical qubit 4 was written to classical bit zero in the output bit-strings, physical qubit 3 maps to classical bit 1, etc. The fact that the zeroth bit is right-most in the bitstring is handled internally.

Error bounds

It is possible to compute error bounds in a similarly efficient manner. This is not done by default, but rather turned on using:

m3_quasi = mit.apply_correction(raw_counts, qubits, return_mitigation_overhead=True)

Then the distribution itself can be called to return things like the expectation value and the standard deviation:

expval, stddev = quasi.expval_and_stddev()

Closest probability distribution

The results of M3 mitigation are quasi-probabilities that nominally contain small negative values. This is suitable for use in computing corrected expectation values or sampling problems where one is interested in the highest probability bit-string. However, if one needs a true probability distribution then it is possible to convert from quasi-probabilites to the closest true probability distribution in L2-norm using:

closest_probs = m3_quasi.nearest_probability_distribution()

License

License

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

mthree-2.6.1.tar.gz (973.6 kB view details)

Uploaded Source

File details

Details for the file mthree-2.6.1.tar.gz.

File metadata

  • Download URL: mthree-2.6.1.tar.gz
  • Upload date:
  • Size: 973.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for mthree-2.6.1.tar.gz
Algorithm Hash digest
SHA256 a372432d3db4527008daec87da3d615d7fe7924653db90129e7252ccf7ad1255
MD5 3856121168b2480b907a6bef35df2108
BLAKE2b-256 d62242e27dfa9a78d8c9dcea203676c697fa391df5826c0553d7be98b0adcde8

See more details on using hashes here.

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