API Reference: qbraid.runtime.ibm

Installation & Setup

To interface with IBM Quantum backends, install the qiskit extra,

pip install 'qbraid[qiskit]'

and configure your IBM credentials.

Basic Usage

The QiskitRuntimeProvider allows you to easily submit jobs to IBM Quantum devices. There are several ways to initialize the provider:

  1. Direct authentication with IBM Cloud:
from qbraid.runtime import QiskitRuntimeProvider

provider = QiskitRuntimeProvider(
    channel="ibm_cloud",
    token="MY_IBM_CLOUD_API_KEY",
    instance="MY_IBM_CLOUD_CRN"
)
  1. Authentication with IBM Quantum:
provider = QiskitRuntimeProvider(
    channel="ibm_quantum",
    token="MY_IBM_QUANTUM_TOKEN"
)
  1. Using environment variables:
export QISKIT_IBM_TOKEN="MY_IBM_CLOUD_API_KEY"
export QISKIT_IBM_INSTANCE="MY_IBM_CLOUD_CRN"
export QISKIT_IBM_CHANNEL="ibm_cloud"
  1. Using credentials stored in $HOME/.qiskit/qiskit-ibm.json

When using environment variables or stored credentials, you can initialize the provider without any arguments:

provider = QiskitRuntimeProvider()

Once initialized, you can list available devices and access their information:

# Get list of available devices
provider.get_devices()
# [<qbraid.runtime.ibm.device.QiskitBackend('ibm_brisbane')>,
#  <qbraid.runtime.ibm.device.QiskitBackend('ibm_sherbrooke')>,
#  <qbraid.runtime.ibm.device.QiskitBackend('ibm_fez')>,
#  <qbraid.runtime.ibm.device.QiskitBackend('ibm_kyiv')>,
#  <qbraid.runtime.ibm.device.QiskitBackend('ibm_torino')>,
#  <qbraid.runtime.ibm.device.QiskitBackend('ibm_marrakesh')>]

# Select a specific device
device = provider.get_device('ibm_brisbane')

# View device metadata
device.metadata()
# {'device_id': 'ibm_brisbane',
#  'device_type': 'QPU',
#  'num_qubits': 127,
#  'instance': 'ibm-q/open/main',
#  'max_shots': 100000,
#  'status': 'ONLINE',
#  'queue_depth': 37}

Our chosen device is the IBM Osaka Backend, which we will now submit a Qiskit job to.

from qiskit import QuantumCircuit

circuit = QuantumCircuit(2)
circuit.h(0)
job = device.run(circuit, shots=10)

So now we have job which is of type QiskitJob, which inherits from QuantumJob. To see the results, we can do the following:

res = job.result()

res.data.get_counts()
# {'00': 6, '11': 4}

res.data.measurements
# array([[1, 1],
#        [0, 0],
#        [0, 0],
#        [1, 1],
#        [0, 0],
#        [1, 1],
#        [0, 0],
#        [1, 1],
#        [0, 0],
#        [0, 0]])

See how to visualize these results in the Visualization section.