Mirror Randomized Benchmarking (MRB)#
%load_ext autoreload
%autoreload 2
Set IQM Token if using Resonance#
# import os
# from iqm.qiskit_iqm import IQMProvider
#
# token = ""
# os.environ["IQM_TOKEN"] = token
# quantum_computer = "" # provide actual quantum computer name. i.e. "emerald", "garnet", "sirius"
# iqm_server_url = "https://resonance.iqm.tech/" # provide actual IQM server URL
# os.environ["IQM_SERVER_URL"] = iqm_server_url
#
# provider = IQMProvider(iqm_server_url, quantum_computer=quantum_computer)
# backend = provider.get_backend()
Alternatively choose (or define) a simulator backend#
#backend = "fakeadonis"
backend = "fakeapollo"
Mirror RB Configuration#
from iqm.benchmarks.randomized_benchmarking.mirror_rb.mirror_rb import *
EXAMPLE_MRB = MirrorRBConfiguration(
qubits_array=[[0,1],
[0,1,3,4]],
#[0,1,3,4,8,9],
#[0,1,3,4,8,9,13,14],
# [0,1,3,4,8,9,13,14,17,18],
# [0,1,3,4,8,9,13,14,17,18,2,7],
# [0,1,3,4,8,9,13,14,17,18,2,7,5,10],
# [0,1,3,4,8,9,13,14,17,18,2,7,5,10,6,11]],
# [0,1,3,4,8,9,13,14,17,18,2,7,5,10,6,11,15,16],
# [0,1,3,4,8,9,13,14,17,18,2,7,5,10,6,11,15,16,12,19]],
depths_array=[[2**m for m in range(9)],
[2**m for m in range(8)]],
# [2**m for m in range(7)],
# [2**m for m in range(6)],
# [2**(m+1)-1 for m in range(6)],
# [2**(m+1)-1 for m in range(6)],
# [2**(m+1)-1 for m in range(5)],
# [2**(m+1)-1 for m in range(5)],
# [2**(m+1)-1 for m in range(4)],
# [2**(m+1)-1 for m in range(4)]],
# If only one list of depths is specified, it applies to all qubit layouts
# If less depths than qubit layouts is specified, the first one is applied
num_circuit_samples=10,
num_pauli_samples=5,
shots=2**8,
two_qubit_gate_ensemble={"CZGate": 0.8, "iSwapGate": 0.2}, # {GATE: PROBABILITY}
density_2q_gates=0.25,
max_circuits_per_batch=100,
)
Run the experiment#
benchmark_mrb = MirrorRandomizedBenchmarking(backend, EXAMPLE_MRB)
run_mrb = benchmark_mrb.run()
Analyze the results#
result_mrb = benchmark_mrb.analyze()
List all the keys in the attributes of the dataset#
attr_keys = sorted([str(x) for x in list(run_mrb.dataset.attrs.keys())])
for k in attr_keys:
print(k)
run_mrb.dataset.attrs[0]
The observation object contains the benchmark results#
result_mrb.observations
Generate plots#
for k in result_mrb.plots.keys():
print(k)
key_mrb_plot = "all_qubit_layouts"
result_mrb.plot(key_mrb_plot)