Shortcuts

Using distribution collections¶

When you mitigate over multiple circuits the return object is a mthree.classes.QuasiCollection

from qiskit import *
from qiskit.providers.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]*10, backend)
raw_counts = backend.run(trans_qc, shots=4000).result().get_counts()

quasis = mit.apply_correction(raw_counts, range(6), return_mitigation_overhead=True)
type(quasis)
mthree.classes.QuasiCollection

QuasiCollection objects allow one to work with multiple distributions in the same manner as a single one. E.g. we can get the mitigation overhead of the whole collection

quasis.mitigation_overhead
array([1.78872845, 1.80421398, 1.8167111 , 1.82026064, 1.81389583,
       1.81689823, 1.81450149, 1.82627146, 1.80886387, 1.81231676])

or compute expectation values and standard deviations over the full set:

quasis.expval_and_stddev('IZIZIZ')
[(-0.0013012634928961098, 0.021146680872250453),
 (0.018948444856296487, 0.02123802004384095),
 (0.03185407726564804, 0.02131144704704281),
 (0.036005961315545676, 0.021332256312803523),
 (0.019416790614104174, 0.02129492800130386),
 (0.03603218159191246, 0.021312544578018424),
 (0.04702688269391586, 0.021298482862806743),
 (0.03339299331023904, 0.02136744874777537),
 (0.022345216101795407, 0.021265370157043762),
 (0.023590010438609255, 0.021285656908199543)]