` by your own token:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "797cf94f-512c-4260-a8de-16246d468467",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "#set up service by using open plan instance. you can delete or modify to use another instance\n",
+ "\n",
+ "from qiskit_ibm_runtime import QiskitRuntimeService\n",
+ " \n",
+ "service = QiskitRuntimeService(channel=\"ibm_quantum\", instance=\"ibm-q/open/main\", token=\"\")\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "79d463c4-81c6-49b2-9817-1bed7cb98517",
+ "metadata": {},
+ "source": [
+ "To view the backends you have access to, you can use the `QiskitRuntimeService.backends()` method. Let's check your backend list:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "6fc011cc-77df-461a-bc99-93ffd22eb672",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "service.backends()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "0f8ba878-89b0-458e-8854-034cb7c7b433",
+ "metadata": {},
+ "source": [
+ "The `QiskitRuntimeService.backend()` method (note that this is singular: backend) takes the name of the backend as the input parameter and returns an IBMBackend instance representing that particular backend. The following code will select `ibmq_qasm_simulator` and save it as a `backend_sim`"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "f6bf1f98-b992-47fc-85ea-ff534b7977eb",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "backend_sim = service.backend(\"ibmq_qasm_simulator\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "231e0279-e1bf-43c0-b77b-01a77b5dbd5e",
+ "metadata": {},
+ "source": [
+ "You can also filter the available backends by their properties. For more general filters, you can make advanced functions using a lambda function. Refer to the [API documentation](https://docs.quantum.ibm.com/api/qiskit-ibm-runtime/qiskit_ibm_runtime.QiskitRuntimeService#backends) for more details.\n",
+ "\n",
+ "As shown here, we will filter least busy real backend and save it to `backend`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "67109b11-1157-4356-9e24-5a63bb513795",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "backend = service.least_busy(simulator=False, operational=True)\n",
+ "backend"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "0155d3e0-93f0-4950-bbe7-dfd64a99e26a",
+ "metadata": {},
+ "source": [
+ "### Create a toy circuit\n",
+ "\n",
+ "Now, let's create a random circuit by using `qiskit.circuit.random.random_circuit` with 5 qubits with depth=3 with measurement. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "e7610fbe-d2b0-4475-9c7c-e6e0ec751d66",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "from qiskit.circuit.random import random_circuit\n",
+ " \n",
+ "circ = random_circuit(5, 3, measure=True)\n",
+ "circ.draw(output='mpl', style='iqp')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "bc4dae59-a927-4efb-b030-510505418763",
+ "metadata": {},
+ "source": [
+ "### Execute using a quantum primitive function\n",
+ "\n",
+ "Quantum computers can produce random results, so you'll often want to collect a sample of the outputs by running the circuit many times. You can use the `Sampler` class to get measured data from a quantum Computer.. `Sampler` is one of our two [primitives](https://docs.quantum.ibm.com/run/primitives-get-started); the other is `Estimator`, which estimates the value of observable."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "a72b8e00-89e1-492c-860c-775f2e72d68d",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "from qiskit_ibm_runtime import Sampler, Options\n",
+ " \n",
+ "options = Options()\n",
+ "options.resilience_level = 1\n",
+ "options.optimization_level = 3\n",
+ " \n",
+ "# Create an Estimator object\n",
+ "sampler = Sampler(backend_sim, options=options)\n",
+ " \n",
+ "# Submit the circuit to Estimator\n",
+ "job = sampler.run(circ, shots = 10000)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "5c2996ff-e30b-4e55-82f9-5fe6a7411508",
+ "metadata": {},
+ "source": [
+ "You can print the job's id and status by using the job instance. Run below cell to check both."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "7e873269-7312-4f7c-a4af-cf87c8def5eb",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "jobid = job.job_id()\n",
+ "print(f\">>> Job ID: {job.job_id()}\")\n",
+ "print(f\">>> Job Status: {job.status()}\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "db17081f-a469-4a38-bdec-5500e968a642",
+ "metadata": {},
+ "source": [
+ "\n",
+ "Note: \n",
+ " Jobs submitted by using the qiskit_ibm_runtime provider are not visible in the right side panel of qBraid Lab
\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "23e66477-79dc-4e24-a964-07a486203348",
+ "metadata": {},
+ "source": [
+ "### Retrieve job results at a later time\n",
+ "\n",
+ "You can call service.job(\\) to retrieve a job you previously submitted. If you don’t have the job ID, or if you want to retrieve multiple jobs at once; including jobs from retired systems, call service.jobs() with optional filters instead. See [QiskitRuntimeService.jobs](https://docs.quantum.ibm.com/api/qiskit-ibm-runtime/qiskit_ibm_runtime.QiskitRuntimeService#jobs) for details.\n",
+ "\n",
+ "As shown here, we will retrieve the job result and save it as a `retrieve_job` to see the result."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "7c477078-67be-46d8-8378-962f6a9b9dea",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "retrieve_job = service.job(jobid)\n",
+ "result = retrieve_job.result()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "945f9635-a576-47cd-94b4-78fd7fadea0f",
+ "metadata": {},
+ "source": [
+ "Now we will plot the results. \n",
+ "\n",
+ "As sampler returns quasi probability of measurement, let's use `plot_distribution` with a binary expression. See [SamplerResult document](https://docs.quantum.ibm.com/api/qiskit/qiskit.primitives.SamplerResult) for more information."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "d0590e58-9eea-4589-a774-6652c37d2e9f",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "from qiskit.visualization import plot_distribution\n",
+ "\n",
+ "plot_distribution(result.quasi_dists[0].binary_probabilities())"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "03ec980a-f294-4498-82cf-cb4c35a1f3b6",
+ "metadata": {},
+ "source": [
+ "## 2. Using qBraid SDK"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "de67207f-3dd5-499e-bb72-0ad0100b3228",
+ "metadata": {},
+ "source": [
+ "By following [this lab demo](https://github.com/qBraid/qbraid-lab-demo/blob/045c7a8fbdcae66a7e64533dd9fe0e981dc02cf4/qbraid_sdk/ibm_batch_jobs_grovers.ipynb#L4) provided by qBraid, you can also use qbraid sdk to submit your ibm job and check job status. The following show how to do that.\n",
+ "\n",
+ "First, check the qbraid version."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "5854118c-2d37-497e-934f-784bdc431b21",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "import qbraid\n",
+ "\n",
+ "qbraid.__version__"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7d67c858-1ab0-4e46-bf47-f77ccd8f3e87",
+ "metadata": {},
+ "source": [
+ "Now import essential libraries and save your ibm api token as an environment variable. Then, set-up your `QiskitProvider` with that token."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "1029c085-6e9f-4f56-b525-8d0b294d6dd4",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "\n",
+ "from qbraid import device_wrapper, job_wrapper, get_jobs\n",
+ "from qbraid.providers import QuantumJob\n",
+ "from qbraid.providers.exceptions import JobStateError\n",
+ "from qbraid.providers.ibm import QiskitBackend, QiskitJob, QiskitProvider\n",
+ "import os\n",
+ "\n",
+ "os.environ['QISKIT_IBM_TOKEN'] = ''\n",
+ "ibmq_token = os.getenv(\"QISKIT_IBM_TOKEN\")\n",
+ "provider = QiskitProvider(qiskit_ibm_token=ibmq_token)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "aee25386-eb1c-4f11-ab63-38be584e73bc",
+ "metadata": {},
+ "source": [
+ "You can also see the device list, accessible with your token."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "a79c8520-01f7-4146-860f-996b60cf914c",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "provider.get_devices()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a1fb6069-3a00-4250-ad6f-11851ef9089f",
+ "metadata": {},
+ "source": [
+ "`qbraid.providers.ibm` also supports useful filtering by `get_devices()`. You can quickly find the least busy backend by using `ibm_least_busy_gpu()`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "6f562ceb-72d9-4be4-8e8b-15690286c558",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "#ibm_device = provider.ibm_least_busy_qpu() #return least busy backend of provider\n",
+ "#ibm_device = provider.get_devices(operational=True, simulator=False) #return backend list which is now operate and not a simulator\n",
+ "ibm_device = provider.get_device(\"ibm_kyoto\") #return backend by name\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "545c1b43-9679-4dd6-ad6c-3dc7a48833df",
+ "metadata": {},
+ "source": [
+ "To send the quantum circuit to the backend and check the job status in the right sidebar of qBraid Quantum lab, wrap the ibm backend with `device_wrapper`. If you insert the backend, which does not appear in the right sidebar panel's \"device\" section, this code will return an error."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "086710ef-5cac-4fe3-95f0-d071c8321cea",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "#qbraid_ibm_device = device_wrapper(ibm_device) #you and add device called by provider as well\n",
+ "qbraid_ibm_device = device_wrapper(\"ibm_kyoto\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "953be90a-d983-444d-8d1f-4ebe9cd9f0e8",
+ "metadata": {},
+ "source": [
+ "To send a quantum circuit, you can simply call `wrapped_device.run(circuit, options)`. See [API document](https://docs.qbraid.com/en/stable/sdk/devices.html#device-wrapper) for more information."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "5c92dd6f-c82f-46a5-bf80-07bdfc2f254d",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "qbraid_ibm_job = qbraid_ibm_device.run(circ, shots=20000)#works if backend is at Devices list. Error if I try to use premium backend"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "52c2510a-2a69-4624-aede-56237b76fe53",
+ "metadata": {},
+ "source": [
+ "Shortly afterwards you should see your submitted job in the right side panel. If you cannot see your job, click the circulation icon at the top to refresh or select `All` for Provider.\n",
+ "\n",
+ "Also, you can check your job status by using `job_wrapper(job_id).` Please note that the `job_id` for `job_wrapper` must be a qBraidID, which you can get by adding `.id` to your job."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "0bb09636-cfbf-480d-aa53-734cd5a11c07",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "job = job_wrapper(qbraid_ibm_job.id)\n",
+ "job.status()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "2c65961f-540e-43dc-b318-c57d86e31751",
+ "metadata": {},
+ "source": [
+ "You can use the `get_jobs` function to a return a list of your previously submitted quantum jobs, along with the status of each."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "3523429e-3341-4a57-80e3-2ad2fb9d3871",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "get_jobs()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "4dedeb3d-a03c-4b70-b9f9-a7a7000eb045",
+ "metadata": {},
+ "source": [
+ "This `qBraidID` can be used to reinstantiate a qBraid QuantumJob object at any time, and even in a separate program, with no loss of information."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "848add3e-1059-4726-be73-855fb8a7adad",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "job = job_wrapper(\"\")\n",
+ "job.status()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "2ceac5e2-6738-473a-b993-cd3cf6da2e19",
+ "metadata": {},
+ "source": [
+ "After the job has completed, we’ll gather the result, print the measurement counts, and plot a histogram of the count by using `qbraid.visualization.plot_histogram`"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "3d39b177-e2a5-41d4-8752-a946cb475f7a",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "ibm_result = job.result()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "bc1bfa7a-b16e-4b71-b949-662f54a6c141",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "from qbraid.visualization import plot_histogram, plot_distribution\n",
+ "\n",
+ "plot_histogram(ibm_result.measurement_counts())"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b1cb7df6-d68d-4273-b243-98b79f759f11",
+ "metadata": {},
+ "source": [
+ "Also, you can plot a histogram of a probability with `plot_distribution`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "50af7aa6-bd20-4224-9a94-e447768d869d",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "plot_distribution(ibm_result.measurement_counts())"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "6a0395af-a533-41e8-9852-d7af847def13",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.9.0"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/qbraid_sdk/img/ibm_api_token.png b/qbraid_sdk/img/ibm_api_token.png
new file mode 100644
index 0000000000000000000000000000000000000000..b040d931d2b16319f0fd1f6edfe357832691598b
GIT binary patch
literal 462405
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