The qBraid-SDK is a Python toolkit for cross-framework abstraction, transpilation, and execution of quantum programs.
- Unified quantum frontend interface. Transpile quantum circuits between supported packages. Leverage the capabilities of multiple frontends through simple, consistent protocols.
- Build once, target many. Create quantum programs using your preferred circuit-building package, and execute on any backend that interfaces with a supported frontend.
- Benchmark, compare, interpret results. Built-in compatible post-processing enables comparing results between runs and across backends.
![qbraid-sdk-env](https://private-user-images.githubusercontent.com/46977852/238787487-c82d61b4-2518-4c7e-8f48-05106afa708e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjQ5NzkyNDIsIm5iZiI6MTcyNDk3ODk0MiwicGF0aCI6Ii80Njk3Nzg1Mi8yMzg3ODc0ODctYzgyZDYxYjQtMjUxOC00YzdlLThmNDgtMDUxMDZhZmE3MDhlLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MzAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODMwVDAwNDkwMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWE4NWFlMzdiZDk5NGQ0YmJhOTZlNDk3Yzk5MTk4Y2FlOGRiOWZlOWZlMWY3YWExNmNmMDRiNzcxY2ZhMjk1YTgmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.SDsTquhR7KgmIQKk_z-l0xMoQDRGowOWF1ermxkHeIE)
For the best experience, install the qBraid-SDK environment on lab.qbraid.com. Login (or create an account) and follow the steps to install an environment.
Using the SDK on qBraid Lab means direct, pre-configured access to all Amazon Braket supported devices and IBM Quantum open systems with no additional access keys or API tokens required. See qBraid Quantum Jobs for more.
The qBraid-SDK, and all of its dependencies, can also be installed using pip:
pip install qbraid
If using locally, follow linked instructions to configure your qBraid, AWS, and IBMQ credentials.
qBraid documentation is available at docs.qbraid.com.
See also:
Construct a quantum program of any supported program type,
>>> from qbraid import QPROGRAM_LIBS
>>> QPROGRAM_LIBS
['braket', 'cirq', 'qiskit', 'pyquil', 'pytket', 'qasm']
and use the circuit_wrapper()
to convert to any other supported program type:
>>> from qbraid import circuit_wrapper
>>> from qbraid.interface import random_circuit
>>> qiskit_circuit = random_circuit("qiskit")
>>> cirq_circuit = circuit_wrapper(qiskit_circuit).transpile("cirq")
>>> print(qiskit_circuit)
┌────────────┐
q_0: ──■──┤ Rx(3.0353) ├
┌─┴─┐└───┬────┬───┘
q_1: ┤ H ├────┤ √X ├────
└───┘ └────┘
>>> print(cirq_circuit)
0: ───H───X^0.5────────
│
1: ───@───Rx(0.966π)───
Search for quantum backend(s) on which to execute your program.
>>> from qbraid import get_devices
>>> get_devices()
Device status updated 0 minutes ago
Device ID Status
--------- ------
aws_oqc_lucy ONLINE
aws_rigetti_aspen_m2 OFFLINE
aws_rigetti_aspen_m3 ONLINE
ibm_q_perth ONLINE
...
Apply the device_wrapper()
, and send quantum jobs to any supported backend,
from any supported program type:
>>> from qbraid import device_wrapper, get_jobs
>>> aws_device = device_wrapper("aws_oqc_lucy")
>>> ibm_device = device_wrapper("ibm_q_perth")
>>> aws_job = aws_device.run(qiskit_circuit, shots=1000)
>>> ibm_job = ibm_device.run(cirq_circuit, shots=1000)
>>> get_jobs()
Displaying 2 most recent jobs:
Job ID Submitted Status
------ --------- ------
aws_oqc_lucy-exampleuser-qjob-zzzzzzz... 2023-05-21T21:13:47.220Z QUEUED
ibm_q_perth-exampleuser-qjob-xxxxxxx... 2023-05-21T21:13:48.220Z RUNNING
...
Compare results in a consistent, unified format:
>>> aws_result = aws_job.result()
>>> ibm_result = ibm_job.result()
>>> aws_result.measurement_counts()
{'00': 483, '01': 14, '10': 486, '11': 17}
>>> ibm_result.measurement_counts()
{'00': 496, '01': 12, '10': 479, '11': 13}
![api_key](https://private-user-images.githubusercontent.com/46977852/238787611-86235d04-4b12-40e0-befe-1eeacaac9104.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjQ5NzkyNDIsIm5iZiI6MTcyNDk3ODk0MiwicGF0aCI6Ii80Njk3Nzg1Mi8yMzg3ODc2MTEtODYyMzVkMDQtNGIxMi00MGUwLWJlZmUtMWVlYWNhYWM5MTA0LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MzAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODMwVDAwNDkwMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTdlM2E0MzMzYTYxZTA4MzcxMzViYzQ2ZDRiYzIxYzQ2ZGQ2MTc4ZTRhNGZhMTBhYjUxNjMyMGFmOTU1MjhiNTYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.OL2qxmtKzfZHu38o0UWo9zETXoU4EGOBiXQAVII_ykM)
To use the qBraid-SDK locally (outside of qBraid Lab), you must add your account credentials:
-
Create a qBraid account or log in to your existing account by visiting account.qbraid.com
-
Copy your API Key token from the left side of your account page:
-
Save your API key from step 2 by calling
QbraidSession.save_config()
:
from qbraid.api import QbraidSession
session = QbraidSession(api_key='API_KEY')
session.save_config()
The command above stores your credentials locally in a configuration file ~/.qbraid/qbraidrc
,
where ~
corresponds to your home ($HOME
) directory. Once saved, you can then connect to the
qBraid API and leverage functions such as get_devices()
and get_jobs()
.
Alternatively, the qBraid-SDK can discover credentials from environment variables:
export JUPYTERHUB_USER='USER_EMAIL'
export QBRAID_API_KEY='QBRAID_API_KEY'
Then instantiate the session without any arguments
from qbraid.api import QbraidSession
session = QbraidSession()
The "Launch on qBraid" button (below) can be added to any public GitHub
repository. Clicking on it automaically opens qBraid Lab, and performs a
git clone
of the project repo into your account's home directory. Copy the
code below, and replace YOUR-USERNAME
and YOUR-REPOSITORY
with your GitHub
info.
Use the badge in your project's README.md
:
[<img src="https://qbraid-static.s3.amazonaws.com/logos/Launch_on_qBraid_white.png" width="150">](https://account.qbraid.com?gitHubUrl=https://github.com/YOUR-USERNAME/YOUR-REPOSITORY.git)
Use the badge in your project's README.rst
:
.. image:: https://qbraid-static.s3.amazonaws.com/logos/Launch_on_qBraid_white.png
:target: https://account.qbraid.com?gitHubUrl=https://github.com/YOUR-USERNAME/YOUR-REPOSITORY.git
:width: 150px
- Interested in contributing code, or making a PR? See CONTRIBUTING.md
- For feature requests and bug reports: Submit an issue
- For discussions, and specific questions about the qBraid SDK, qBraid Lab, or other topics, join our discord community
- For questions that are more suited for a forum, use the
qbraid
tag on Stack Exchange - Want your open-source project featured as its own runtime environment on qBraid Lab? Fill out our New Environment Request Form