In [1]:
!pip install mthree
Requirement already satisfied: mthree in /home/lpawela/anaconda3/envs/parrondo-old/lib/python3.12/site-packages (3.0.0) Requirement already satisfied: numpy>=1.23 in /home/lpawela/anaconda3/envs/parrondo-old/lib/python3.12/site-packages (from mthree) (2.2.5) Requirement already satisfied: scipy>=1.11.1 in /home/lpawela/anaconda3/envs/parrondo-old/lib/python3.12/site-packages (from mthree) (1.15.2) Requirement already satisfied: cython>=3.0.10 in /home/lpawela/anaconda3/envs/parrondo-old/lib/python3.12/site-packages (from mthree) (3.1.1) Requirement already satisfied: qiskit>=1.0 in /home/lpawela/anaconda3/envs/parrondo-old/lib/python3.12/site-packages (from mthree) (1.4.2) Requirement already satisfied: psutil in /home/lpawela/anaconda3/envs/parrondo-old/lib/python3.12/site-packages (from mthree) (7.0.0) Requirement already satisfied: orjson>=3.0.0 in /home/lpawela/anaconda3/envs/parrondo-old/lib/python3.12/site-packages (from mthree) (3.10.18) Requirement already satisfied: runningman>=2.1 in /home/lpawela/anaconda3/envs/parrondo-old/lib/python3.12/site-packages (from mthree) (2.3.0) Requirement already satisfied: rustworkx>=0.15.0 in /home/lpawela/anaconda3/envs/parrondo-old/lib/python3.12/site-packages (from qiskit>=1.0->mthree) (0.16.0) Requirement already satisfied: sympy>=1.3 in /home/lpawela/anaconda3/envs/parrondo-old/lib/python3.12/site-packages (from qiskit>=1.0->mthree) (1.13.3) Requirement already satisfied: dill>=0.3 in /home/lpawela/anaconda3/envs/parrondo-old/lib/python3.12/site-packages (from qiskit>=1.0->mthree) (0.4.0) Requirement already satisfied: python-dateutil>=2.8.0 in /home/lpawela/anaconda3/envs/parrondo-old/lib/python3.12/site-packages (from qiskit>=1.0->mthree) (2.9.0.post0) Requirement already satisfied: stevedore>=3.0.0 in /home/lpawela/anaconda3/envs/parrondo-old/lib/python3.12/site-packages (from qiskit>=1.0->mthree) (5.4.1) Requirement already satisfied: typing-extensions in /home/lpawela/anaconda3/envs/parrondo-old/lib/python3.12/site-packages (from qiskit>=1.0->mthree) (4.13.2) Requirement already satisfied: symengine<0.14,>=0.11 in /home/lpawela/anaconda3/envs/parrondo-old/lib/python3.12/site-packages (from qiskit>=1.0->mthree) (0.13.0) Requirement already satisfied: qiskit_ibm_runtime>=0.22 in /home/lpawela/anaconda3/envs/parrondo-old/lib/python3.12/site-packages (from runningman>=2.1->mthree) (0.38.0) Requirement already satisfied: six>=1.5 in /home/lpawela/anaconda3/envs/parrondo-old/lib/python3.12/site-packages (from python-dateutil>=2.8.0->qiskit>=1.0->mthree) (1.17.0) Requirement already satisfied: requests>=2.19 in /home/lpawela/anaconda3/envs/parrondo-old/lib/python3.12/site-packages (from qiskit_ibm_runtime>=0.22->runningman>=2.1->mthree) (2.32.3) Requirement already satisfied: requests-ntlm>=1.1.0 in /home/lpawela/anaconda3/envs/parrondo-old/lib/python3.12/site-packages (from qiskit_ibm_runtime>=0.22->runningman>=2.1->mthree) (1.3.0) Requirement already satisfied: urllib3>=1.21.1 in /home/lpawela/anaconda3/envs/parrondo-old/lib/python3.12/site-packages (from qiskit_ibm_runtime>=0.22->runningman>=2.1->mthree) (2.4.0) Requirement already satisfied: ibm-platform-services>=0.22.6 in /home/lpawela/anaconda3/envs/parrondo-old/lib/python3.12/site-packages (from qiskit_ibm_runtime>=0.22->runningman>=2.1->mthree) (0.63.0) Requirement already satisfied: pydantic<2.10,>=2.5.0 in /home/lpawela/anaconda3/envs/parrondo-old/lib/python3.12/site-packages (from qiskit_ibm_runtime>=0.22->runningman>=2.1->mthree) (2.9.2) Requirement already satisfied: packaging in /home/lpawela/anaconda3/envs/parrondo-old/lib/python3.12/site-packages (from qiskit_ibm_runtime>=0.22->runningman>=2.1->mthree) (25.0) Requirement already satisfied: pbr>=2.0.0 in /home/lpawela/anaconda3/envs/parrondo-old/lib/python3.12/site-packages (from stevedore>=3.0.0->qiskit>=1.0->mthree) (6.1.1) Requirement already satisfied: mpmath<1.4,>=1.1.0 in /home/lpawela/anaconda3/envs/parrondo-old/lib/python3.12/site-packages (from sympy>=1.3->qiskit>=1.0->mthree) (1.3.0) Requirement already satisfied: ibm_cloud_sdk_core<4.0.0,>=3.22.1 in /home/lpawela/anaconda3/envs/parrondo-old/lib/python3.12/site-packages (from ibm-platform-services>=0.22.6->qiskit_ibm_runtime>=0.22->runningman>=2.1->mthree) (3.23.0) Requirement already satisfied: setuptools in /home/lpawela/anaconda3/envs/parrondo-old/lib/python3.12/site-packages (from pbr>=2.0.0->stevedore>=3.0.0->qiskit>=1.0->mthree) (75.8.0) Requirement already satisfied: annotated-types>=0.6.0 in /home/lpawela/anaconda3/envs/parrondo-old/lib/python3.12/site-packages (from pydantic<2.10,>=2.5.0->qiskit_ibm_runtime>=0.22->runningman>=2.1->mthree) (0.7.0) Requirement already satisfied: pydantic-core==2.23.4 in /home/lpawela/anaconda3/envs/parrondo-old/lib/python3.12/site-packages (from pydantic<2.10,>=2.5.0->qiskit_ibm_runtime>=0.22->runningman>=2.1->mthree) (2.23.4) Requirement already satisfied: charset-normalizer<4,>=2 in /home/lpawela/anaconda3/envs/parrondo-old/lib/python3.12/site-packages (from requests>=2.19->qiskit_ibm_runtime>=0.22->runningman>=2.1->mthree) (3.4.1) Requirement already satisfied: idna<4,>=2.5 in /home/lpawela/anaconda3/envs/parrondo-old/lib/python3.12/site-packages (from requests>=2.19->qiskit_ibm_runtime>=0.22->runningman>=2.1->mthree) (3.10) Requirement already satisfied: certifi>=2017.4.17 in /home/lpawela/anaconda3/envs/parrondo-old/lib/python3.12/site-packages (from requests>=2.19->qiskit_ibm_runtime>=0.22->runningman>=2.1->mthree) (2025.1.31) Requirement already satisfied: cryptography>=1.3 in /home/lpawela/anaconda3/envs/parrondo-old/lib/python3.12/site-packages (from requests-ntlm>=1.1.0->qiskit_ibm_runtime>=0.22->runningman>=2.1->mthree) (44.0.2) Requirement already satisfied: pyspnego>=0.4.0 in /home/lpawela/anaconda3/envs/parrondo-old/lib/python3.12/site-packages (from requests-ntlm>=1.1.0->qiskit_ibm_runtime>=0.22->runningman>=2.1->mthree) (0.11.2) Requirement already satisfied: cffi>=1.12 in /home/lpawela/anaconda3/envs/parrondo-old/lib/python3.12/site-packages (from cryptography>=1.3->requests-ntlm>=1.1.0->qiskit_ibm_runtime>=0.22->runningman>=2.1->mthree) (1.17.1) Requirement already satisfied: PyJWT<3.0.0,>=2.8.0 in /home/lpawela/anaconda3/envs/parrondo-old/lib/python3.12/site-packages (from ibm_cloud_sdk_core<4.0.0,>=3.22.1->ibm-platform-services>=0.22.6->qiskit_ibm_runtime>=0.22->runningman>=2.1->mthree) (2.10.1) Requirement already satisfied: pycparser in /home/lpawela/anaconda3/envs/parrondo-old/lib/python3.12/site-packages (from cffi>=1.12->cryptography>=1.3->requests-ntlm>=1.1.0->qiskit_ibm_runtime>=0.22->runningman>=2.1->mthree) (2.22)
In [2]:
!pip freeze
annotated-types==0.7.0 asttokens==3.0.0 black==25.1.0 certifi==2025.1.31 cffi==1.17.1 charset-normalizer==3.4.1 click==8.1.8 comm==0.2.2 contourpy==1.3.2 cryptography==44.0.2 cudensitymat-cu12==0.1.0 cuquantum-cu12==25.3.0 custatevec-cu12==1.8.0 cutensor-cu12==2.2.0 cutensornet-cu12==2.7.0 cycler==0.12.1 Cython==3.1.1 debugpy==1.8.14 decorator==5.2.1 dill==0.4.0 dotenv==0.9.9 executing==2.2.0 fonttools==4.57.0 ibm-cloud-sdk-core==3.23.0 ibm-platform-services==0.63.0 idna==3.10 ipykernel==6.29.5 ipython==9.1.0 ipython_pygments_lexers==1.1.1 isort==6.0.1 jedi==0.19.2 joblib==1.5.0 jupyter_client==8.6.3 jupyter_core==5.7.2 kiwisolver==1.4.8 matplotlib==3.10.1 matplotlib-inline==0.1.7 mpmath==1.3.0 mthree==3.0.0 mypy_extensions==1.1.0 nest-asyncio==1.6.0 numpy==2.2.5 nvidia-cublas-cu12==12.8.4.1 nvidia-cuda-runtime-cu12==12.8.90 nvidia-cusolver-cu12==11.7.3.90 nvidia-cusparse-cu12==12.5.8.93 nvidia-nvjitlink-cu12==12.8.93 orjson==3.10.18 packaging==25.0 parso==0.8.4 pathspec==0.12.1 pbr==6.1.1 pexpect==4.9.0 pillow==11.2.1 platformdirs==4.3.7 prompt_toolkit==3.0.51 psutil==7.0.0 ptyprocess==0.7.0 pure_eval==0.2.3 pycparser==2.22 pydantic==2.9.2 pydantic_core==2.23.4 Pygments==2.19.1 PyJWT==2.10.1 pylatexenc==2.10 pyparsing==3.2.3 pyspnego==0.11.2 python-dateutil==2.9.0.post0 python-dotenv==1.1.0 pyzmq==26.4.0 qiskit==1.4.2 qiskit-aer==0.16.0 qiskit-aer-gpu==0.15.1 qiskit-ibm-runtime==0.38.0 qiskit-machine-learning==0.8.2 requests==2.32.3 requests_ntlm==1.3.0 runningman==2.3.0 rustworkx==0.16.0 scikit-learn==1.6.1 scipy==1.15.2 setuptools==75.8.0 six==1.17.0 stack-data==0.6.3 stevedore==5.4.1 symengine==0.13.0 sympy==1.13.3 threadpoolctl==3.6.0 tornado==6.4.2 tqdm==4.67.1 traitlets==5.14.3 typing_extensions==4.13.2 urllib3==2.4.0 wcwidth==0.2.13 wheel==0.45.1
In [3]:
import numpy as np
from qiskit import *
from qiskit_ibm_runtime.fake_provider import FakeVigoV2
import mthree
qc = QuantumCircuit(3)
qc.reset(range(3))
qc.h(0)
qc.cx(0,1)
qc.cx(1,2)
qc.measure_all()
qc.draw('mpl')
Out[3]:
In [4]:
backend = FakeVigoV2()
mit = mthree.M3Mitigation(backend)
mit.cals_from_system(range(3))
Out[4]:
[<qiskit_aer.jobs.aerjob.AerJob at 0x77339f3f51c0>]
In [5]:
trans_qc = transpile(qc, backend)
raw_counts = backend.run(trans_qc, shots=8192).result().get_counts()
In [6]:
raw_counts
Out[6]:
{'001': 39,
'110': 117,
'101': 145,
'100': 79,
'011': 121,
'111': 3665,
'010': 52,
'000': 3974}
In [7]:
prob_counts = {k: v/sum(raw_counts.values()) for k,v in raw_counts.items()}
prob_counts
Out[7]:
{'100': 0.009521484375,
'110': 0.0113525390625,
'001': 0.0052490234375,
'010': 0.0054931640625,
'000': 0.4776611328125,
'011': 0.0164794921875,
'111': 0.457275390625,
'101': 0.0169677734375}
In [7]:
quasis = mit.apply_correction(raw_counts, range(3))
print('Expectation value:',quasis.expval("ZZZ"))
Expectation value: 0.034488022327423096
In [8]:
quasis
Out[8]:
{'000': np.float32(0.5340166),
'001': np.float32(-0.03803007),
'010': np.float32(0.0021706226),
'011': np.float32(0.0038574233),
'100': np.float32(0.006740882),
'101': np.float32(0.00052801555),
'110': np.float32(-0.021158068),
'111': np.float32(0.5118746)}
In [10]:
all_zeros_proj = {'000': 1}
all_ones_proj = {'111': 1}
quasis.expval([all_zeros_proj, all_ones_proj])
Out[10]:
array([0.5295377 , 0.52403015], dtype=float32)
In [9]:
sum(quasis.values())
Out[9]:
np.float32(1.0)
In [10]:
quasis.nearest_probability_distribution()
Out[10]:
{'111': np.float32(0.48892903), '000': np.float32(0.511071)}
In [ ]: