Example: Sampling with FiQCISampler#
For configuration options and mitigation levels, see the FiQCISampler guide.
Import everything needed#
from fiqci.ems import FiQCISampler
from iqm.qiskit_iqm import IQMProvider
from qiskit import QuantumCircuit, transpile
Initialise FiQCISampler#
url = None
quantum_computer = None
# Connect to an IQM quantum computer using the provider
if url is not None and quantum_computer is not None:
provider = IQMProvider(url=url, quantum_computer=quantum_computer)
backend = provider.get_backend()
else:
# Or using a noisy simulator
from iqm.qiskit_iqm import IQMFakeAdonis
backend = IQMFakeAdonis()
# Initialise FiQCI sampler with mitigation level 1 (readout error mitigation)
sampler = FiQCISampler(backend=backend, mitigation_level=1)
# We can view the default settings enabled for mitigation level 1
sampler.mitigator_options
{'rem': {'enabled': True,
'calibration_shots': 1000,
'calibration_file': None,
'mitigator': <fiqci.ems.mitigators.rem.M3IQM at 0x7f3e18c621e0>}}
Mitigated Bell State#
# Create a Bell state circuit
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()
# Transpile for backend
qc_transpiled = transpile(qc, backend=backend, optimization_level=3)
qc_transpiled.draw("mpl")
# Execute on FiQCI Sampler
job = sampler.run([qc_transpiled], shots=2**10)
# Retrieve mitigated counts
mitigated_counts = job.result().get_counts()
print("Mitigated counts:", mitigated_counts)
Mitigated counts: {'10': 19, '11': 498, '00': 505}
Manually configure mitigation options#
# Initialise FiQCI sampler
sampler = FiQCISampler(backend=backend, mitigation_level=0)
# Config rem
sampler.rem(enabled=True, calibration_shots=2**10)
# Print current mitigator options
sampler.mitigator_options
{'rem': {'enabled': True,
'calibration_shots': 1024,
'calibration_file': None,
'mitigator': <fiqci.ems.mitigators.rem.M3IQM at 0x7f3e137cccb0>}}
Get Job Information and Metadata#
# Get the raw counts for the first circuit in the first job
print(job.result().results[0].header)
raw_counts = job.result().results[0].header["fiqci_ems"]["raw_counts"]
print(raw_counts)
{'creg_sizes': [['meas', 2]], 'global_phase': 0.0, 'memory_slots': 2, 'n_qubits': 5, 'name': 'circuit-13855', 'qreg_sizes': [['ancilla', 3], ['q', 2]], 'metadata': {}, 'fiqci_ems': {'mitigation_level': 1, 'mitigation_method': 'M3', 'calibration_shots': 1000, 'raw_counts': {'01': 41, '10': 56, '00': 462, '11': 465}}}
{'01': 41, '10': 56, '00': 462, '11': 465}