Converting to probabilites¶
M3 natively works with quasi-probability distributions; distributions that contain negative values
but nonetheless sum to one. This is useful for mitigating expectation values, but there could
be situations where a true probability distribution is useful / needed. To this end, it is
possible to find the closest probability distribution to a quasi-probability distribution in
terms of \(L2\)-norm using:
mthree.classes.QuasiDistribution.nearest_probability_distribution()
. This conversion is
done in linear time.
from qiskit import *
from qiskit_ibm_runtime.fake_provider import FakeCasablanca
import mthree
qc = QuantumCircuit(6)
qc.reset(range(6))
qc.h(3)
qc.cx(3,1)
qc.cx(3,5)
qc.cx(1,0)
qc.cx(5,4)
qc.cx(1,2)
qc.measure_all()
backend = FakeCasablanca()
mit = mthree.M3Mitigation(backend)
mit.cals_from_system(range(6))
trans_qc = transpile(qc, backend)
raw_counts = backend.run(trans_qc, shots=8192).result().get_counts()
quasis = mit.apply_correction(raw_counts, range(6))
# Here is where the conversion happens
quasis.nearest_probability_distribution()
{'100010': 4.942751922535623e-06,
'010001': 2.212357862531214e-05,
'110110': 3.234357778742817e-05,
'010111': 3.3429367871775896e-05,
'100110': 3.500512448030686e-05,
'010011': 4.8992300683598606e-05,
'001101': 8.487034026767485e-05,
'110100': 0.00016995014798394946,
'000101': 0.0002886424038432914,
'000001': 0.00035245185677344043,
'101011': 0.00038661536233369287,
'001000': 0.00039479940623932754,
'100000': 0.0010206058909973184,
'010000': 0.0011482192946275062,
'000100': 0.0017117797656280266,
'110000': 0.0018628279205728166,
'011111': 0.00248829001490676,
'000010': 0.0030101558944293397,
'110111': 0.0030110862317502753,
'101111': 0.0034121443153116307,
'111011': 0.003419530802960282,
'111101': 0.003447720441488858,
'000110': 0.0038479378345108142,
'001111': 0.004216715278569294,
'000111': 0.005252550389471764,
'111001': 0.005316739119693713,
'111000': 0.005874980739342535,
'111110': 0.007876449433009218,
'111111': 0.4581202923517984,
'000000': 0.4831078080621193}