{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Qiskit 2 - 2020/2021" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### [Update](https://qiskit.org/documentation/release_notes.html) \n", "\n", "#### Qiskit 0.25.0¶\n", "\n", "This release officially deprecates the Qiskit Aqua project. Accordingly, in a future release the qiskit-aqua package will be removed from the Qiskit metapackage, which means in that future release pip install qiskit will no longer include qiskit-aqua. The application modules that are provided by qiskit-aqua have been split into several new packages: qiskit-optimization, qiskit-nature, qiskit-machine-learning, and qiskit-finance. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " \n", "\n", "## Contents\n", "\n", " \n", "\n", "1. [Working with the IBMQ backends](#ibmq)\n", " \n", " 1.1 [Experimental properties](#exp)\n", " \n", " 1.2 [Interactive tools](#ipywid)\n", " \n", " 1.3 [Quantum half-adder, revisited](#qha)\n", " \n", " \n", "2. [Quantum Teleportation protocol](#quantumteleport)\n", "\n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 1. Working with the IBMQ backends\n", "\n", " \n", "\n", "#### Loading the IBMQ account\n", "\n", "\n", "The `IBMQ` module of Qiskit provides the framework to work with the free-access quantum devices that are currently available.\n", "\n", "
\n", " \n", "**Managing your [access](https://quantum-computing.ibm.com/docs/manage/account/ibmq) token**\n", "\n", " \n", "\n", "\n", "Before working with the backends for the first time, a `TOKEN` from an [IBM Quantum Experience](https://quantum-computing.ibm.com/) account is necessary. After creating and logging into an account, the token string can be copied from:\n", "\n", " \n", "\n", "

https://quantum-computing.ibm.com/account

\n", "\n", " \n", "\n", "This string is used as a personal credential for handling communication with the quantum processors. There are several commands to manage credentials:\n", "\n", "- `enable_account('TOKEN')`: Enable account in the current session.\n", "- `save_account('TOKEN')`: Save account to disk for future use.\n", "- `load_account()`: Load account using stored credentials.\n", "- `disable_account()`: Disable account in the current session.\n", "- `stored_account()`: List the account stored to disk.\n", "- `active_account()`: List the account currently in the session.\n", "- `delete_account()`: Delete the saved account from disk.\n", "\n", "
\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Module imports" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from qiskit import (QuantumCircuit, ClassicalRegister, QuantumRegister, \n", " IBMQ, Aer, execute, transpile)\n", "\n", "from qiskit.tools.visualization import plot_histogram, plot_circuit_layout, plot_gate_map\n", "\n", "from qiskit.providers.ibmq import least_busy\n", "\n", "from math import pi\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Replace TOKEN with your string\n", "\n", "#IBMQ.save_account('TOKEN')\n", "\n", "# In subsequent sessios the Token can be loaded from disk\n", "\n", "IBMQ.load_account()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " \n", "\n", "By invoking `get_provider()` one can initiate a provider object to retrieve backend information or selecting a backend:\n", "\n", "- `backends()`: Returns all backend objects known to the provider.\n", "- `get_backend('NAME')`: Returns the named backend.\n", "\n", " " ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "provider = IBMQ.get_provider(hub='ibm-q')\n", "provider.backends()" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "ibmq_belem\n" ] } ], "source": [ "# Use least_busy() to find out which quantum device is the least busy\n", "\n", "physical_devices = provider.backends(simulator=False, operational=True, open_pulse=False)\n", "\n", "backend = least_busy(physical_devices)\n", "\n", "# Alternative: get backend directly by name\n", "\n", "#backend = provider.get_backend('ibmq_16_melbourne')\n", "\n", "print(backend)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1.1 Quantum devices - experimental properties\n", "\n", "#### [Basis Gates](https://qiskit.org/documentation/apidoc/transpiler.html)\n", "\n", "Although IBM's interface allows the user to program a quantum algorithm using a broad set of single and multi-qubit gates, these are compiled into a smaller set of compiler instruction:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['id', 'rz', 'sx', 'x', 'cx', 'reset']" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "backend.configuration().basis_gates" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### [Qubit map](https://qiskit.org/documentation/apidoc/transpiler.html)\n", "\n", "Besides the restriction regarding the available gates, there are further physical constraints given by the physical architecture of the chip. In fact, CNOT gates can be directly applied only to qubits that are connected." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAASUAAAEeCAYAAADM2gMZAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAaNUlEQVR4nO3deZRcRd3G8e9kI4GELQYlgbAGJAKyqYfdAAIBEQhiUFlELUFRLAQBZVEUVCRKKciLFAICsgbQIIjsiSAREURBEUFBXIBAJIRM1pl5/6gb6bk9vczM7e66t5/POTkkUzM1xUz307frVv2qo6enBxGRWAxp9QBEREoplEQkKgolEYmKQklEoqJQEpGoKJREJCoKJRGJikJJRKKiUBKRqCiURCQqCiURiYpCSUSiolASkagolEQkKgolEYmKQklEoqJQEpGoKJREJCoKJRGJikJJRKKiUBKRqCiURCQqCiURiYpCSUSiolASkagolEQkKgolEYmKQklEoqJQEpGoKJREJCoKJRGJikJJRKKiUBKRqCiURCQqCiURiYpCSUSiolASkagolEQkKgolEYmKQklEoqJQEpGoKJREJCoKJRGJikJJRKKiUBKRqCiURCQqCiURiYpCSUSiolASkagolEQkKgolEYmKQklEoqJQEpGoKJREJCoKJRGJikJJRKKiUBKRqCiURCQqCiURiYpCSUSiolASkagMa/UAJJ+MowOYCGwPbA2sCSwF/gY8AvzRW5a1bICSWx09PT2tHoPkiHGMAj4KnAJMAJYDo3nzqrsTWAEMBa4AnLc80/yRSl4plKRuxrErcD0whhBEtSwDuoDvAF/XlZPUQ6EkNSVv1b4KnASsOoAuFgHPA1O85eUMhyYFpIluqcc5wIkMLJAAVgMmAb8xjrGZjUoKSVdKUpVxHAxczcADqdQy4CHCFZMeeNInXSlJRclVzWVkE0gAI4AdgKMz6k8KSKEk1ZwGjMq4z9WA841jRMb9SkFonZL0yThGAp8EVqn2eXtuC7tMhvFjYcgQmDUXbp1bs/sOYBpwXSaDlULRlZJUsg/UnvfZYB1YtBTmv9GvvscAxw1wXFJwCiWpZEfqWIt02S9hxkx4YV6/+98mWWog0otCSSrZlcY+PoYC6zWwf8kphZJU8pYG978ctGZJyimUpJJmrCPqbsL3kJxRKEklLza4/xFA/2eipPC0JEAqmQPsQpj7qWiXd8CkCTBxXPj3tpvAW1aHx56F3z9btf+l3vKfjMYqBaJQkkp+TdhIu3q1T5o0AXaa/Oa/1x8X/rzyes1QejiDMUoBKZSkkrsJZUequvzO8KefFgIXDGBM0gY0pyR98pYVhOBY3IDulwC3N6BfKQCFklRzHtC/tdq1LQWMt7WvwqQ9KZSkmtGEeaUsjaDGfjppbwol6ZNxTADuBzbMuOsO4FrjODzjfqUgFEpSxjgmArOBzVNN3QxswePS1L+HAFcax8cH0JcUnEJJejGOjQiBtEmq6XZgO+DP1D/P1El4+3c8cDi9A60D+JFxHDOoAUvhKJTkf4xjEmHR5Iappp8B07zlccIZbx8C7iMcpfR6H10tAf5DOGxgA2+5xFt+AnyY8mUGFxvH57L6f5D8U41uAcA43g7cC6ybaroR+Ki3LO/ja1YlhNRDqaYJ3vLvCt/nIOAGYHiq6YveMmMAQ5eCUSgJxrElcA+wTqrpGuCoZM1Sta/v9SDytnqdJOPYH7iJ8rtwp3vLOXUNWgpLb9/anHFsQ7jLlg6kK4AjawXSQHjLbcAHCG/zSp1tHGep+Ft7Uyi1MePYgfCWLV3X6BLgE41c4OgtdwL7ESbDS50JfEPB1L4USm3KOHYkvGVbK9V0IXCst42vdeQt9wH7Un4371TgOwqm9qRQakPGsStwJ+UVAL4LHN/MgyK95VfA+4AFqaYTgAuM02O03egX3maMYw/gDsoPBfgmcFIrTq71lrnAnsB/U03HAT9UMLUX/bLbiHHsA9xG+Ym3XwVOa+VR2t7yO2AK8Eqq6ZPAZcZVLzYnxaFQahPG8X5gFjAy1fRlbzmrlYG0UrI4873AS6mmowjbUlT/qw0olNqAcRwM3AxlR2Wf6C3fbMGQKvKWJwnBlC6V+xHCRt70okspGIVSwRnHdMKq7PST+XPe8t0WDKkmb3kK2A14IdX0QWCmcSp9UmQKpQJLyoNcQ3nx/2O85cIWDKlu3vIMIZieSzV9ALjFOEY1fVDSFAqlgkrKglxJ799xD/Bxb7mkNaPqH295jhBMz6SapgKzkr13UjAKpQIyjmOBH0GvxYfdwBHecnlrRjUw3vICsDvwl1TTXsBtxpUtbZCcUygVjHEcD/xf6sNdwGFJ+ZDcSSoO7A48mWp6L3CHcdWPgZJ8USgViHGcBHwv9eHlwAe95cYWDCkz3vISYR3T46mmnYG7jCvbLiM5pVAqCOM4jXD6SKmlwMHe8tPmjyh73jIP2AN4JNX0buBu48o2FksOKZRyzjg6jOMs4OxU0xLgA0mZkMLwlvmE+aS5qabtgHuNKyvBIjmjUMqxZBf9NwnlPkp1Avsl5UEKx1sWAHsDD6SatgbuM66seqbkiEIpp5JAehg4JdX0BrBPUhaksLxlIaHsSfr/czLwF+PYvvmjkiwolHIo2Zz6OLBDqmkB8D5vy64gCslbFgHvh7IrwjHAXOPYqfmjksFSKOVMUsbjj8BWqaaFwJ5JGZC24S2dwIGEciylhgFzjGOX5o9KBkOhlCPJFdJlwBapph5C+drfNX9UrectSwj74tInqAwFrkuOjpKcUCjlRFK240pCGY9S3cBBeV+HNFjJW7lNKd/EO4FwxZQOcomUQikHknId1xLKd5RaAOzvLbOaP6r4eMtiYBLwh1TT24DZxpW95ZUIKZQil5TpuJHw9qTUC8AO3pbNpbQ1b1lKWLOU3uM3jrBcYNvmj0r6Q6EUMeMYSSjOdmCq6e/Abkl5D0lJjob6JHBxqmksYYHlu5o/KqmXQilSSVmOWwlno5V6Btg9KeshFSRHRH0G+H6qaU3ClhQtF4iUQilCSTmO2wjbKUo9RQik9GSu9CGpO26BGamm1YE7jWO3pg9KalIoRSYpw3EHoSxHqSeA9yZlPKROSTCdDJyTalqNUPZkz+aPSqpRKEXEONYE7iKU4yj1e2BKUr5D+slberzldMr3CI4Cfp4cPSWRUChFIim7cQ+hDEepRwgrtdPnoUk/ecvXCUeClxpJKK17QAuGJH1QKEUgKbdxL+FWdqm5wF5JuQ7JgLecC3wh9eERwM3GMa0FQ5IUhVKLJWU27iOU3Sj1K2DvpEyHZMhbzgc+m/rwMOCG5EgqaSGFUgsZxwTgfkK5jVL3AlOT8hzSAN7yA+BT0Otk4KHANcZxRGtGJaBQahnj2ACYA2yWavol8P5kL5c0kLd44GjC/sGVhgA/To6okhZQKLWAcWwMzAY2TjX9nLC5dnHzR9WevOXHwOGEE19W6gB+ZByfbs2o2ptCqcmSMhqzgQ1STbcAhyRlOKSJvOVaYDqwItV0kXF8vgVDamsKpSZKymfMAdZLNV0PTPeWZc0flQB4y03AIYQjqUo54/hiC4bUthRKTZKUzZhNKKNR6irgcG/LngzSZEkJmAMJR1OV+rZxnN6CIbUlhVITJOUy7iOUzyh1GXC0t2VvG6RFvOUXhLrf6Xm9rxvH15IDG6SBFEoNlpTJuBfKDkq8GDBJmQ2JiLfcDUyFsjugZwDfUjA1lkKpgZLyGHcTymWU+j7wmaS8hkTIW2YD+0DZWrGTge8qmBqno6enp/ZntTnjWB94F+FIo/GEdS0vEPal/dZbXuzja3YDbifsRi91HnBKsns9t5JTVSYD2wNXpJqnAI94yxvNHlfWjOPdhCOc1kg1XQR8Lv3CklQK3Y7wc3kH4ff/OuEEmt8Bj2v+sDqFUgXJySHTCBs4JwPLgNG8eXW5gnB5vwrhUMhzgV94S09SDuNWwi70UmcDZ+Y5kJLSKp8ATiI8UXsIP5dSCwj7yWYCM7wtq5mdK8axHaF6w9qppkuBY7yl2zg2JNRu+gThRWs4vX//nYS1UF3AD4AL+3oxE4VSn4xjc+AGwuLG9BOukjcIr4SXAp6w+7zUmcku9dwyjqmEu4WjgFXr+JIuQphfSrg6zO2iUOPYmvBWPH2z4irgSeArhG0qI+robgnhZ3M8cHmeX6QaQaGUkuwUv4oQKv2dc+siPDDTTk12p+dSMn/yHeAY6gujtE7gRUJd8X9lObZmMo7JhPIy6WUdlX7vtSxK+vtQcuCBoFDqxTgOBq5mYE+8Sr6Q7ErPpSSQvk/YI5aeH+uPFcA8YLs8v20xjs0Id1MnZNRlJ/AA4agsLQ1Bd9/+xzg2JftAOiXPgZQ4jMEHEoTSIOOAnyaT5LnkLU8Du1O+XGCgVgV2obwqZtvK7YMjS8mT5HrCpHVWVkC+z7E3jrcCP2TwgbTSMGBL4NiM+muVjcj2ubMqcJJxvDPDPnNLoRS8n1BCZCDzApUMA/Y0jh0y7LPZziDboIYQcOcmZ9rlTvJ29iLK76wO1kjgexn3mUvDWj2ASJxMjbtsw4bCobvCDpvByBHwj5fhhjnw9+qzI6sQSq+mj9uOXnLu3MeocTfpyL1g0/Gw1mhY0RV+HjMfgH+/WvNbHEq4oZA37yGsVavq6L1hi4kweiQsWQ7PvwQ3PwgvzKv4JR3Ae4xjw3Y/06/tr5SMYxzUvpo5bHfYYxt4vRN+/yxsvC6ccHB40FUxFJhmXC7DfyrU3gKz65bQuRQe/gssWQZbbQT2oBDiVYwmHBSZRx+njquksavD0/+EB/8EixbDlhvCcbWPJhhCDl/AspbHJ0vWtiesG6n4NmXMKNj5HdDdDd+9CRYuhq5u2HELmLIN3Dq3av/LCIsv87aAcEfqWKP19WvCVSOEJ+K3Pg5rjYHxa8M/Kl8VAGxtHB05XKOzK3W8mM+Y+ebfJ46DMz4ariaHDgmPnQpGEFbDf2Pww8wvhRJsQ42J3PFjwyv/KwtCIEG4HN9xC1g/vZSuXAewLfkLpZ2p48m3MpAAhiWf3dUNC+q7NzUReH4AY2uJ5IbIJvV+/pR3wrprwxbrh3/f+WjVQFqp7Se7FUqwDjV+DqsniwSWlOxYWpr8fY3aCwiGA2sNcGytlN5SUdUqw+Fje4e/3/UoLOis+SUrCD+X3IQSYTK67o2420+CzZNyfvMXwjP1nW1c7w6Cwmr7OSWovVP/9eQJNnL4mx9bJZn+rePJ11PP94hQ3W+rRo+Ckw4JE95z/gg3PVD398jbz6WHfoTSjJnw6Qvgwlmw5mpw7P6w9pi6vkdbUyjBPymvNNjLv+eHO0trj4ExyZXRRm9Nvrj6vAmEOaU8Hrdd1+v62mPglENhw7fB7Q/DVffU3f8q5O/nsgRqlywePhQ6kuha0QVPPh+usocNhXHpWgPl/jvYQead3r7Bo9SY6F7YCb/+E+y2FZw4Df71algasGQZ3Pt4zf6HEjbq5s0cwqRu1cfIqdPDBO6rr8OI4TB99/Dx3zwFz1WPnE5v8xVKSQWIP1N+knEvG60LZl94+l/hzuSk8bDqKuGKu3QOroLfZjXevFIohVCquZDvuvvDJOUOk2CdNeFv/4EbfwVv1N733g08O+hRNt+DhH1Zq1f7pLWSGZCxq8Ne27758Rfm1Qyl6vcs43U3sBVhrrBPC96Al16DyRPDmraFi+GRp+HW38Di6tdZnUn/bU0bcgHjmAkcTPZvZ5cR6uacmHG/DZfUk3oReEsDul9I2Bl/RwP6bqjkiKw/UMcL2QAsASZ4y/wG9J0bmlMKZlBeKD4L3cCFDei34ZLa4ecTXr2z9gahmmPueMtfCRVHs56kXw7c0u6BBAolALxlLnAbZHoQZCfwA2/5e4Z9Ntv5kPmTpJNwgkve7ryV+hTl58MN1lLI3xV1IyiU3nQsoRxFFu9nu4CXgdMy6KtlkkqR08nuKnIxcLO3/DKj/lplAtk+dzqBY73lPxn2mVsKpYS3/BfYkzDfMZhg6iLc1p1ShGqC3vJrwj61wb6NWww8BphBD6qFjGNf4OdUmejup0XABd7yk4z6yz2FUglveZxQA+llBnZ10Ak8B+xQpJ3e3nIFoSD+yuL3/bWIUHh/T28zfYvcVMZxAPAzypePDOStXA/hMXYO8KVBDq1QdPetD8YxmjCfcjhhnVGtV8WlhAeZA77ibe0FdnlkHBsB1xIKtY2i9ovaIkKIfQq4IYebb//HOA4BrqN8Gc0JwO8JP5fVgNprtsPV+DzgUG95NMNhFoJCqYqkRO7nCHWFhhNeEVcW5VhBeMVcRDjt9mJv+WcLhtlUSZGznQlHLE0lLHvoIQRUDyGEViXsaTsPuCbv578Zx4cJtZ/SBVmO85aLks8ZQVhWcjKwNeGqcghhW0o34WczirA+69uE47h0OnIfFEp1SJ6I6xNW8o4lPMjmAY96W992jCJK1jK9nbCYcDQhqJ8DHvOWBS0cWmaM40jgcnpfFfYAn/KWSyt8zSjCbv/NCOVIlgB/Bp4owjxjoymURCowjk8QzvAr3YTbTVjScGVrRlV8mugW6YNxfIZwiGZpIHUBH1UgNZZCSSTFOCzhaO1SK4Dp3nJd80fUXhRKIiWM42QoO6tvGXCIt9zUgiG1HYWSSMI4zoCy49WXAgd6y6wWDKktqXSJtL3k7urXgNNTTYuBA7yl/tJ1MmgKJWlrSSCdC3wx1bQI2N9bZjd/VO1NoSRtKwmk84HPp5oWAlO95cHmj0oUStKWkuOSLgQ+nWp6DdjHWx5u+qAEUChJG0pWov+QsMm41HzgfdqP1loKJWkryRHqlwFHpJrmAXt5m7tDQwtHoSRtwziGEzbWTk81vUgoq/Kn5o9K0hRK0haSXfzXAtNSTf8C9vCWp5s/KumLQkkKzzhWAW4EDkg1/YMQSHk8AquwFEpSaEkZkVuAfVJNfyME0vPNH5VUo1CSwjKO1YBZwB6ppr8SAqnwRfnySKEkhWQcYwjHZu2aavozYVJbJ4dESqEkhWMcawC/AHZMNf2RcNv/5eaPSuqlUJJCMY4NCUc5rZlqeoywMPLVZo9J+kelS6QwjGMz4E+UB9JvCW/ZFEg5oCslKQTjmAT8gfIz2R4hXCEV4iCDdqCDAyT3jGNd4F7CySqlFgBv95YXmz8qGShdKUmuGcd6hECalGqaD2zuLa80f1QyGJpTktxKJrXnUB5ITwGbKJDySaEkuWQcmwCzgY1STbOAbbzltaYPSjKhUJLcMY7NCVdIE1NNNwGH6hTafFMoSa4Yx2TCFdL4VNO1wGHesqz5o5IsKZQkN4xja+B+4K2ppiuBI7xlRdMHJZlTKEkuGMd2wH3AuFTTpcDR3tLV/FFJIyiUJHrG8R7Cbf+1U00XAcd4S3fzRyWNolCSqBnHLsBdwBqppvOBzyqQikehJNEyjvcCdwBjUk3nAid6i7YjFJBCSaJkHHsBtwOrpZq+BnxJgVRc2mYi0TGO/YCbKd9ce7q3nNOCIUkTKZQkKsZxIKHI//BU0xe9ZUYLhiRNplCSaBjHocA1lD8uP+8t32/BkKQFFEoSBeP4COGgyPQ856e95eIWDElaRKEkLWccRwGXAx0lH+4BPuktl7VmVNIquvsmLWUchvJA6gaOVCC1J4WStIxxHAdcQu9A6gI+4i1Xt2ZU0moKJWkJ4/gCcGHqw8uBD3nL9S0YkkRCoSRNZxynAt9JfXgZMM1bbm7BkCQimuiWATGOYcC7gO2T/65JCJangIeBh9LlaI2jAzgDOCvV3RLgIG/5ZYOHLTmg00ykX4zjLcBngeMJL2rDgFEln9IFLAJGAHcC3/KWh5JAOhv4cqrLxcAB3nJPo8cu+aBQkrolixsvJQTOyDq+pIcQOjcSjjs6PtX+BrC/t8zJcpySbwolqck4hhDukh1G+QbZenQBQ1Mfex3Y11seGuTwpGAUSlJV8rbrCuCDwKoZdfsasLe3/Daj/qRANNEttRwNHEJ2gdQF7OUtv8uoPykYLQmQipLTZ7/HwN6yVbIMmJJhf1IwCiWp5kzKaxoN1ijgLOMyu/KSgtHbN+mTcYwGDqe8rlGf3r05mKnh73c/BtfPrvrp3YRJc+1tkzK6UpJK9oP6zlFbazR8ZAqsqP+Qo9HAsQMclxScQkkq2ZE655KO3hsWLIJHn+lX/1smd/ZEelEoSSU7UcfjY69tYdPxcOkd/bpSgrCwcoMBjk0KTKEklaxV6xPGj4VpO8OsufDCvH73v4KwX06kF010SyU1r3u23xSGDoXNJsCk8bBecqD2OzeGZSvglgcH/z2k/SiUpJJ/Am+v+hkdMKQDttqo94fHrQGbrFuz/5HAiwMfnhSVQkkqmQ3sTpUlAbfODX9WOnpv2GlyXUsCABZ6S//f9EnhaU5JKnmQUOeoEXqAXzeob8k5XSlJJbOBTmBMvV9w+Z3hTx0WEbaviJTRlZL0yVu6gRmEYMrafODeBvQrBaBQkmouAF4ivN3KSidwlLeZ9ikFolCSirxlKXAooXpkFjqBq73l/oz6kwJSKElVSd2joxh8MHUSJrc/O+hBSaEplKQmb5kJfIhQU3v5ALroBG4B9vN2QF8vbUTlcKVuxrEucCVhX9wIat+9XUgo6naUt9zW4OFJQSiUpN+MYxvgBGAa4UCAZYSr7pUPplHAE8B5wM3J3JRIXRRKMmBJ6ZH1ga0I65mWA88BTyiIZKAUSiISFU10i0hUFEoiEhWFkohERaEkIlFRKIlIVBRKIhIVhZKIREWhJCJRUSiJSFQUSiISFYWSiERFoSQiUVEoiUhUFEoiEhWFkohERaEkIlFRKIlIVBRKIhIVhZKIREWhJCJRUSiJSFQUSiISFYWSiERFoSQiUVEoiUhUFEoiEhWFkohERaEkIlFRKIlIVBRKIhIVhZKIREWhJCJRUSiJSFQUSiISFYWSiERFoSQiUVEoiUhUFEoiEhWFkohERaEkIlFRKIlIVBRKIhIVhZKIREWhJCJRUSiJSFQUSiISFYWSiERFoSQiUVEoiUhUFEoiEhWFkohERaEkIlFRKIlIVBRKIhIVhZKIREWhJCJRUSiJSFQUSiISFYWSiERFoSQiUVEoiUhU/h/CJSBX5t33iAAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "plot_gate_map(backend)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are ways to circumvent the chip's architecture limitations (for example, by using SWAP operations to allow for a CNOT gate between otherwise physically uncoupled qubits). \n", "\n", "The study and development of efficient mapping algorithms between logical (software) and physical qubits, for a given quantum program, has only recently started receiving serious attention from the quantum information community. **As the size and complexity of quantum processor chips increase, efficient mapping algorithms will become crucial to successful demonstrations of the applications of quantum computers.**\n", "\n", "\n", "\n", "\n", "#### Coherence times\n", "\n", "Current quantum computations are “fragile”. A physical qubit does not hold its state indefinitely, but undergoes random bit-flips and loses its phase over time, i.e. undergoes decoherence. Decoherence is the loss of quantum \"properties\" of a quantum system. Quantum devices have associated decoherence times, which limit the number of quantum operations that can be performed before the results are \"drowned\" by noise. \n", "\n", "One can distinguish between two measures of decoherence:\n", "\n", "1. $T_1$ is the \"longitudinal coherence time\" (also known as \"amplitude damping\"), and it measures loss of energy from the system.\n", "2. $T_2$ is the \"transverse coherence time\" (also known as \"phase damping\").\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " \n", "**How are coherence times determined experimentally?**\n", "\n", " \n", "\n", "One way to estimate $T_1$ is to initialize a qubit to the ground state $| 0 \\rangle$ (for example, apply an $X$ gate to turn it into $| 1 \\rangle$, and measure it in the computational basis after a time $t$. \n", "\n", "The probability of the qubit staying in the $| 1 \\rangle$ state is expected to follow an exponential decay curve $e^{-t/T_1}$. \n", "\n", "To experimentally determine $T_2$, one can initialise a qubit to the ground state $| 0 \\rangle$, apply an Hadamard transform $H$ to change it into $\\frac{| 0 \\rangle + | 1 \\rangle}{\\sqrt{2}}$ and wait for a time $t$ before applying another transform $H$ and measuring the qubit on the computational basis.\n", "\n", "You can try [Relaxation and Decoherence](https://qiskit.org/documentation/tutorials/noise/2_relaxation_and_decoherence.html).\n", " \n", "**Note** T1 and T2 are not \"time from state x to state y\" but rather decay constants.\n", " \n", "
\n", "\n", " \n", "\n", "Information on a given `backend`, such as qubit configuration or noise properties, can be retrieved by calling on the instance \n", "properties." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Check backend status\n", "backend.status()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'backend_name': 'ibmq_belem',\n", " 'backend_version': '1.0.6',\n", " 'n_qubits': 5,\n", " 'basis_gates': ['id', 'rz', 'sx', 'x', 'cx', 'reset'],\n", " 'gates': [{'name': 'id',\n", " 'parameters': [],\n", " 'qasm_def': 'gate id q { U(0, 0, 0) q; }',\n", " 'coupling_map': [[0], [1], [2], [3], [4]]},\n", " {'name': 'rz',\n", " 'parameters': ['theta'],\n", " 'qasm_def': 'gate rz(theta) q { U(0, 0, theta) q; }',\n", " 'coupling_map': [[0], [1], [2], [3], [4]]},\n", " {'name': 'sx',\n", " 'parameters': [],\n", " 'qasm_def': 'gate sx q { U(pi/2, 3*pi/2, pi/2) q; }',\n", " 'coupling_map': [[0], [1], [2], [3], [4]]},\n", " {'name': 'x',\n", " 'parameters': [],\n", " 'qasm_def': 'gate x q { U(pi, 0, pi) q; }',\n", " 'coupling_map': [[0], [1], [2], [3], [4]]},\n", " {'name': 'cx',\n", " 'parameters': [],\n", " 'qasm_def': 'gate cx q0, q1 { CX q0, q1; }',\n", " 'coupling_map': [[0, 1],\n", " [1, 0],\n", " [1, 2],\n", " [1, 3],\n", " [2, 1],\n", " [3, 1],\n", " [3, 4],\n", " [4, 3]]},\n", " {'name': 'reset', 'parameters': None, 'qasm_def': None}],\n", " 'local': False,\n", " 'simulator': False,\n", " 'conditional': False,\n", " 'open_pulse': False,\n", " 'memory': True,\n", " 'max_shots': 8192,\n", " 'coupling_map': [[0, 1],\n", " [1, 0],\n", " [1, 2],\n", " [1, 3],\n", " [2, 1],\n", " [3, 1],\n", " [3, 4],\n", " [4, 3]],\n", " 'dynamic_reprate_enabled': True,\n", " 'supported_instructions': ['cx',\n", " 'reset',\n", " 'play',\n", " 'acquire',\n", " 'setf',\n", " 'id',\n", " 'x',\n", " 'measure',\n", " 'u2',\n", " 'shiftf',\n", " 'rz',\n", " 'sx',\n", " 'u3',\n", " 'delay',\n", " 'u1'],\n", " 'rep_delay_range': [0.0, 500.0],\n", " 'default_rep_delay': 250.0,\n", " 'max_experiments': 75,\n", " 'sample_name': 'family: Falcon, revision: 4, segment: T',\n", " 'n_registers': 1,\n", " 'credits_required': True,\n", " 'online_date': datetime.datetime(2021, 1, 8, 5, 0, tzinfo=tzutc()),\n", " 'description': '5 qubit device Belem',\n", " 'acquisition_latency': [],\n", " 'allow_q_object': True,\n", " 'channels': {'acquire0': {'operates': {'qubits': [0]},\n", " 'purpose': 'acquire',\n", " 'type': 'acquire'},\n", " 'acquire1': {'operates': {'qubits': [1]},\n", " 'purpose': 'acquire',\n", " 'type': 'acquire'},\n", " 'acquire2': {'operates': {'qubits': [2]},\n", " 'purpose': 'acquire',\n", " 'type': 'acquire'},\n", " 'acquire3': {'operates': {'qubits': [3]},\n", " 'purpose': 'acquire',\n", " 'type': 'acquire'},\n", " 'acquire4': {'operates': {'qubits': [4]},\n", " 'purpose': 'acquire',\n", " 'type': 'acquire'},\n", " 'd0': {'operates': {'qubits': [0]}, 'purpose': 'drive', 'type': 'drive'},\n", " 'd1': {'operates': {'qubits': [1]}, 'purpose': 'drive', 'type': 'drive'},\n", " 'd2': {'operates': {'qubits': [2]}, 'purpose': 'drive', 'type': 'drive'},\n", " 'd3': {'operates': {'qubits': [3]}, 'purpose': 'drive', 'type': 'drive'},\n", " 'd4': {'operates': {'qubits': [4]}, 'purpose': 'drive', 'type': 'drive'},\n", " 'm0': {'operates': {'qubits': [0]}, 'purpose': 'measure', 'type': 'measure'},\n", " 'm1': {'operates': {'qubits': [1]}, 'purpose': 'measure', 'type': 'measure'},\n", " 'm2': {'operates': {'qubits': [2]}, 'purpose': 'measure', 'type': 'measure'},\n", " 'm3': {'operates': {'qubits': [3]}, 'purpose': 'measure', 'type': 'measure'},\n", " 'm4': {'operates': {'qubits': [4]}, 'purpose': 'measure', 'type': 'measure'},\n", " 'u0': {'operates': {'qubits': [0, 1]},\n", " 'purpose': 'cross-resonance',\n", " 'type': 'control'},\n", " 'u1': {'operates': {'qubits': [1, 0]},\n", " 'purpose': 'cross-resonance',\n", " 'type': 'control'},\n", " 'u2': {'operates': {'qubits': [1, 2]},\n", " 'purpose': 'cross-resonance',\n", " 'type': 'control'},\n", " 'u3': {'operates': {'qubits': [1, 3]},\n", " 'purpose': 'cross-resonance',\n", " 'type': 'control'},\n", " 'u4': {'operates': {'qubits': [2, 1]},\n", " 'purpose': 'cross-resonance',\n", " 'type': 'control'},\n", " 'u5': {'operates': {'qubits': [3, 1]},\n", " 'purpose': 'cross-resonance',\n", " 'type': 'control'},\n", " 'u6': {'operates': {'qubits': [3, 4]},\n", " 'purpose': 'cross-resonance',\n", " 'type': 'control'},\n", " 'u7': {'operates': {'qubits': [4, 3]},\n", " 'purpose': 'cross-resonance',\n", " 'type': 'control'}},\n", " 'conditional_latency': [],\n", " 'discriminators': ['quadratic_discriminator',\n", " 'hw_centroid',\n", " 'linear_discriminator'],\n", " 'dt': 2.222222222222222e-19,\n", " 'dtm': 2.222222222222222e-19,\n", " 'hamiltonian': {'description': 'Qubits are modeled as Duffing oscillators. In this case, the system includes higher energy states, i.e. not just |0> and |1>. The Pauli operators are generalized via the following set of transformations:\\n\\n$(\\\\mathbb{I}-\\\\sigma_{i}^z)/2 \\\\rightarrow O_i \\\\equiv b^\\\\dagger_{i} b_{i}$,\\n\\n$\\\\sigma_{+} \\\\rightarrow b^\\\\dagger$,\\n\\n$\\\\sigma_{-} \\\\rightarrow b$,\\n\\n$\\\\sigma_{i}^X \\\\rightarrow b^\\\\dagger_{i} + b_{i}$.\\n\\nQubits are coupled through resonator buses. The provided Hamiltonian has been projected into the zero excitation subspace of the resonator buses leading to an effective qubit-qubit flip-flop interaction. The qubit resonance frequencies in the Hamiltonian are the cavity dressed frequencies and not exactly what is returned by the backend defaults, which also includes the dressing due to the qubit-qubit interactions.\\n\\nQuantities are returned in angular frequencies, with units 2*pi*GHz.\\n\\nWARNING: Currently not all system Hamiltonian information is available to the public, missing values have been replaced with 0.\\n',\n", " 'h_latex': '\\\\begin{align} \\\\mathcal{H}/\\\\hbar = & \\\\sum_{i=0}^{4}\\\\left(\\\\frac{\\\\omega_{q,i}}{2}(\\\\mathbb{I}-\\\\sigma_i^{z})+\\\\frac{\\\\Delta_{i}}{2}(O_i^2-O_i)+\\\\Omega_{d,i}D_i(t)\\\\sigma_i^{X}\\\\right) \\\\\\\\ & + J_{0,1}(\\\\sigma_{0}^{+}\\\\sigma_{1}^{-}+\\\\sigma_{0}^{-}\\\\sigma_{1}^{+}) + J_{1,3}(\\\\sigma_{1}^{+}\\\\sigma_{3}^{-}+\\\\sigma_{1}^{-}\\\\sigma_{3}^{+}) + J_{3,4}(\\\\sigma_{3}^{+}\\\\sigma_{4}^{-}+\\\\sigma_{3}^{-}\\\\sigma_{4}^{+}) + J_{1,2}(\\\\sigma_{1}^{+}\\\\sigma_{2}^{-}+\\\\sigma_{1}^{-}\\\\sigma_{2}^{+}) \\\\\\\\ & + \\\\Omega_{d,0}(U_{0}^{(0,1)}(t))\\\\sigma_{0}^{X} + \\\\Omega_{d,1}(U_{1}^{(1,0)}(t)+U_{3}^{(1,3)}(t)+U_{2}^{(1,2)}(t))\\\\sigma_{1}^{X} \\\\\\\\ & + \\\\Omega_{d,2}(U_{4}^{(2,1)}(t))\\\\sigma_{2}^{X} + \\\\Omega_{d,3}(U_{5}^{(3,1)}(t)+U_{6}^{(3,4)}(t))\\\\sigma_{3}^{X} \\\\\\\\ & + \\\\Omega_{d,4}(U_{7}^{(4,3)}(t))\\\\sigma_{4}^{X} \\\\\\\\ \\\\end{align}',\n", " 'h_str': ['_SUM[i,0,4,wq{i}/2*(I{i}-Z{i})]',\n", " '_SUM[i,0,4,delta{i}/2*O{i}*O{i}]',\n", " '_SUM[i,0,4,-delta{i}/2*O{i}]',\n", " '_SUM[i,0,4,omegad{i}*X{i}||D{i}]',\n", " 'jq0q1*Sp0*Sm1',\n", " 'jq0q1*Sm0*Sp1',\n", " 'jq1q3*Sp1*Sm3',\n", " 'jq1q3*Sm1*Sp3',\n", " 'jq3q4*Sp3*Sm4',\n", " 'jq3q4*Sm3*Sp4',\n", " 'jq1q2*Sp1*Sm2',\n", " 'jq1q2*Sm1*Sp2',\n", " 'omegad1*X0||U0',\n", " 'omegad0*X1||U1',\n", " 'omegad3*X1||U3',\n", " 'omegad2*X1||U2',\n", " 'omegad1*X2||U4',\n", " 'omegad1*X3||U5',\n", " 'omegad4*X3||U6',\n", " 'omegad3*X4||U7'],\n", " 'osc': {},\n", " 'qub': {'0': 3, '1': 3, '2': 3, '3': 3, '4': 3},\n", " 'vars': {'delta0': -2.1119231275656283,\n", " 'delta1': -1.989081364755034,\n", " 'delta2': -2.0773937776320905,\n", " 'delta3': -2.096945401946966,\n", " 'delta4': -2.0819029355928373,\n", " 'jq0q1': 0.011772262300160973,\n", " 'jq1q2': 0.012605700949390706,\n", " 'jq1q3': 0.012591488659137172,\n", " 'jq3q4': 0.01051661912410011,\n", " 'omegad0': 0.7987378495223795,\n", " 'omegad1': 0.7727422078570246,\n", " 'omegad2': 1.9987899794547583,\n", " 'omegad3': 0.7721297684452293,\n", " 'omegad4': 0.6431407516699509,\n", " 'wq0': 31.98272544558251,\n", " 'wq1': 32.95733271428017,\n", " 'wq2': 33.683992595377575,\n", " 'wq3': 32.48926612266211,\n", " 'wq4': 33.03888272639287}},\n", " 'meas_kernels': ['hw_boxcar'],\n", " 'meas_levels': [1, 2],\n", " 'meas_lo_range': [[6.801661824e+18, 7.801661824e+18],\n", " [6.893428047e+18, 7.893428047e+18],\n", " [6.860214726e+18, 7.860214726e+18],\n", " [6.803382327e+18, 7.803382327e+18],\n", " [6.926310916e+18, 7.926310916e+18]],\n", " 'meas_map': [[0, 1, 2, 3, 4]],\n", " 'multi_meas_enabled': True,\n", " 'n_uchannels': 8,\n", " 'parametric_pulses': ['gaussian', 'gaussian_square', 'drag', 'constant'],\n", " 'processor_type': {'family': 'Falcon', 'revision': 4, 'segment': 'T'},\n", " 'quantum_volume': 16,\n", " 'qubit_channel_mapping': [['u0', 'u1', 'm0', 'd0'],\n", " ['d1', 'u4', 'u3', 'u2', 'm1', 'u5', 'u0', 'u1'],\n", " ['u2', 'm2', 'u4', 'd2'],\n", " ['m3', 'u7', 'u6', 'u5', 'd3', 'u3'],\n", " ['d4', 'u6', 'u7', 'm4']],\n", " 'qubit_lo_range': [[4.590208848215397e+18, 5.590208848215397e+18],\n", " [4.745322412601922e+18, 5.745322412601922e+18],\n", " [4.860973924625142e+18, 5.860973924625142e+18],\n", " [4.670827300849732e+18, 5.670827300849732e+18],\n", " [4.758301500138861e+18, 5.758301500138861e+18]],\n", " 'rep_times': [0.001],\n", " 'u_channel_lo': [[{'q': 1, 'scale': (1+0j)}],\n", " [{'q': 0, 'scale': (1+0j)}],\n", " [{'q': 2, 'scale': (1+0j)}],\n", " [{'q': 3, 'scale': (1+0j)}],\n", " [{'q': 1, 'scale': (1+0j)}],\n", " [{'q': 1, 'scale': (1+0j)}],\n", " [{'q': 4, 'scale': (1+0j)}],\n", " [{'q': 3, 'scale': (1+0j)}]],\n", " 'uchannels_enabled': True,\n", " 'url': 'None',\n", " 'allow_object_storage': True}" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Check configuration\n", "config = backend.configuration()\n", "\n", "# to_dict() displays configuration in dict form - easier to read\n", "config.to_dict()" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'backend_name': 'ibmq_belem',\n", " 'backend_version': '1.0.6',\n", " 'last_update_date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'qubits': [[{'date': datetime.datetime(2021, 4, 8, 5, 11, 32, tzinfo=tzlocal()),\n", " 'name': 'T1',\n", " 'unit': 'us',\n", " 'value': 85.09239307376956},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 13, 40, tzinfo=tzlocal()),\n", " 'name': 'T2',\n", " 'unit': 'us',\n", " 'value': 133.5253127924614},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'frequency',\n", " 'unit': 'GHz',\n", " 'value': 5.090208848215397},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'anharmonicity',\n", " 'unit': 'GHz',\n", " 'value': -0.33612300518216515},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 11, 11, tzinfo=tzlocal()),\n", " 'name': 'readout_error',\n", " 'unit': '',\n", " 'value': 0.036599999999999966},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 11, 11, tzinfo=tzlocal()),\n", " 'name': 'prob_meas0_prep1',\n", " 'unit': '',\n", " 'value': 0.046599999999999975},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 11, 11, tzinfo=tzlocal()),\n", " 'name': 'prob_meas1_prep0',\n", " 'unit': '',\n", " 'value': 0.0266},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 11, 11, tzinfo=tzlocal()),\n", " 'name': 'readout_length',\n", " 'unit': 'ns',\n", " 'value': 5351.11111111111}],\n", " [{'date': datetime.datetime(2021, 4, 7, 5, 12, 11, tzinfo=tzlocal()),\n", " 'name': 'T1',\n", " 'unit': 'us',\n", " 'value': 89.47177758545004},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 15, 3, tzinfo=tzlocal()),\n", " 'name': 'T2',\n", " 'unit': 'us',\n", " 'value': 84.41495919470482},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'frequency',\n", " 'unit': 'GHz',\n", " 'value': 5.245322412601921},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'anharmonicity',\n", " 'unit': 'GHz',\n", " 'value': -0.316572131412737},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 11, 11, tzinfo=tzlocal()),\n", " 'name': 'readout_error',\n", " 'unit': '',\n", " 'value': 0.01629999999999998},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 11, 11, tzinfo=tzlocal()),\n", " 'name': 'prob_meas0_prep1',\n", " 'unit': '',\n", " 'value': 0.0254},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 11, 11, tzinfo=tzlocal()),\n", " 'name': 'prob_meas1_prep0',\n", " 'unit': '',\n", " 'value': 0.007199999999999984},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 11, 11, tzinfo=tzlocal()),\n", " 'name': 'readout_length',\n", " 'unit': 'ns',\n", " 'value': 5351.11111111111}],\n", " [{'date': datetime.datetime(2021, 4, 8, 5, 11, 32, tzinfo=tzlocal()),\n", " 'name': 'T1',\n", " 'unit': 'us',\n", " 'value': 70.65706447960295},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 13, 40, tzinfo=tzlocal()),\n", " 'name': 'T2',\n", " 'unit': 'us',\n", " 'value': 78.58633518747908},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'frequency',\n", " 'unit': 'GHz',\n", " 'value': 5.360973924625142},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'anharmonicity',\n", " 'unit': 'GHz',\n", " 'value': -0.3306274884584928},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 11, 11, tzinfo=tzlocal()),\n", " 'name': 'readout_error',\n", " 'unit': '',\n", " 'value': 0.029200000000000004},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 11, 11, tzinfo=tzlocal()),\n", " 'name': 'prob_meas0_prep1',\n", " 'unit': '',\n", " 'value': 0.04720000000000002},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 11, 11, tzinfo=tzlocal()),\n", " 'name': 'prob_meas1_prep0',\n", " 'unit': '',\n", " 'value': 0.0112},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 11, 11, tzinfo=tzlocal()),\n", " 'name': 'readout_length',\n", " 'unit': 'ns',\n", " 'value': 5351.11111111111}],\n", " [{'date': datetime.datetime(2021, 4, 8, 5, 11, 32, tzinfo=tzlocal()),\n", " 'name': 'T1',\n", " 'unit': 'us',\n", " 'value': 35.786497837218505},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 13, 40, tzinfo=tzlocal()),\n", " 'name': 'T2',\n", " 'unit': 'us',\n", " 'value': 57.36807071793101},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'frequency',\n", " 'unit': 'GHz',\n", " 'value': 5.170827300849732},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'anharmonicity',\n", " 'unit': 'GHz',\n", " 'value': -0.33373922611368106},\n", " {'date': datetime.datetime(2021, 4, 7, 5, 11, 20, tzinfo=tzlocal()),\n", " 'name': 'readout_error',\n", " 'unit': '',\n", " 'value': 0.0121},\n", " {'date': datetime.datetime(2021, 4, 7, 5, 11, 20, tzinfo=tzlocal()),\n", " 'name': 'prob_meas0_prep1',\n", " 'unit': '',\n", " 'value': 0.021599999999999953},\n", " {'date': datetime.datetime(2021, 4, 7, 5, 11, 20, tzinfo=tzlocal()),\n", " 'name': 'prob_meas1_prep0',\n", " 'unit': '',\n", " 'value': 0.0026},\n", " {'date': datetime.datetime(2021, 4, 7, 5, 11, 20, tzinfo=tzlocal()),\n", " 'name': 'readout_length',\n", " 'unit': 'ns',\n", " 'value': 5351.11111111111}],\n", " [{'date': datetime.datetime(2021, 4, 8, 5, 11, 32, tzinfo=tzlocal()),\n", " 'name': 'T1',\n", " 'unit': 'us',\n", " 'value': 91.26606772546042},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 15, 3, tzinfo=tzlocal()),\n", " 'name': 'T2',\n", " 'unit': 'us',\n", " 'value': 157.98004057515908},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'frequency',\n", " 'unit': 'GHz',\n", " 'value': 5.258301500138861},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'anharmonicity',\n", " 'unit': 'GHz',\n", " 'value': -0.3313451432371279},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 11, 11, tzinfo=tzlocal()),\n", " 'name': 'readout_error',\n", " 'unit': '',\n", " 'value': 0.023900000000000032},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 11, 11, tzinfo=tzlocal()),\n", " 'name': 'prob_meas0_prep1',\n", " 'unit': '',\n", " 'value': 0.040200000000000014},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 11, 11, tzinfo=tzlocal()),\n", " 'name': 'prob_meas1_prep0',\n", " 'unit': '',\n", " 'value': 0.0076},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 11, 11, tzinfo=tzlocal()),\n", " 'name': 'readout_length',\n", " 'unit': 'ns',\n", " 'value': 5351.11111111111}]],\n", " 'gates': [{'qubits': [0],\n", " 'gate': 'id',\n", " 'parameters': [{'date': datetime.datetime(2021, 4, 8, 5, 16, 4, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.00021316282523704128},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 35.55555555555556}],\n", " 'name': 'id0'},\n", " {'qubits': [1],\n", " 'gate': 'id',\n", " 'parameters': [{'date': datetime.datetime(2021, 4, 8, 5, 19, 5, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.00024751145331348826},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 35.55555555555556}],\n", " 'name': 'id1'},\n", " {'qubits': [2],\n", " 'gate': 'id',\n", " 'parameters': [{'date': datetime.datetime(2021, 4, 8, 5, 16, 4, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.0002794072800694968},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 35.55555555555556}],\n", " 'name': 'id2'},\n", " {'qubits': [3],\n", " 'gate': 'id',\n", " 'parameters': [{'date': datetime.datetime(2021, 4, 8, 5, 16, 4, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.0014014352990881524},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 35.55555555555556}],\n", " 'name': 'id3'},\n", " {'qubits': [4],\n", " 'gate': 'id',\n", " 'parameters': [{'date': datetime.datetime(2021, 4, 8, 5, 19, 5, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.00024401850777718676},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 35.55555555555556}],\n", " 'name': 'id4'},\n", " {'qubits': [0],\n", " 'gate': 'rz',\n", " 'parameters': [{'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 0}],\n", " 'name': 'rz0'},\n", " {'qubits': [1],\n", " 'gate': 'rz',\n", " 'parameters': [{'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 0}],\n", " 'name': 'rz1'},\n", " {'qubits': [2],\n", " 'gate': 'rz',\n", " 'parameters': [{'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 0}],\n", " 'name': 'rz2'},\n", " {'qubits': [3],\n", " 'gate': 'rz',\n", " 'parameters': [{'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 0}],\n", " 'name': 'rz3'},\n", " {'qubits': [4],\n", " 'gate': 'rz',\n", " 'parameters': [{'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 0}],\n", " 'name': 'rz4'},\n", " {'qubits': [0],\n", " 'gate': 'sx',\n", " 'parameters': [{'date': datetime.datetime(2021, 4, 8, 5, 16, 4, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.00021316282523704128},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 35.55555555555556}],\n", " 'name': 'sx0'},\n", " {'qubits': [1],\n", " 'gate': 'sx',\n", " 'parameters': [{'date': datetime.datetime(2021, 4, 8, 5, 19, 5, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.00024751145331348826},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 35.55555555555556}],\n", " 'name': 'sx1'},\n", " {'qubits': [2],\n", " 'gate': 'sx',\n", " 'parameters': [{'date': datetime.datetime(2021, 4, 8, 5, 16, 4, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.0002794072800694968},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 35.55555555555556}],\n", " 'name': 'sx2'},\n", " {'qubits': [3],\n", " 'gate': 'sx',\n", " 'parameters': [{'date': datetime.datetime(2021, 4, 8, 5, 16, 4, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.0014014352990881524},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 35.55555555555556}],\n", " 'name': 'sx3'},\n", " {'qubits': [4],\n", " 'gate': 'sx',\n", " 'parameters': [{'date': datetime.datetime(2021, 4, 8, 5, 19, 5, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.00024401850777718676},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 35.55555555555556}],\n", " 'name': 'sx4'},\n", " {'qubits': [0],\n", " 'gate': 'x',\n", " 'parameters': [{'date': datetime.datetime(2021, 4, 8, 5, 16, 4, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.00021316282523704128},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 35.55555555555556}],\n", " 'name': 'x0'},\n", " {'qubits': [1],\n", " 'gate': 'x',\n", " 'parameters': [{'date': datetime.datetime(2021, 4, 8, 5, 19, 5, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.00024751145331348826},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 35.55555555555556}],\n", " 'name': 'x1'},\n", " {'qubits': [2],\n", " 'gate': 'x',\n", " 'parameters': [{'date': datetime.datetime(2021, 4, 8, 5, 16, 4, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.0002794072800694968},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 35.55555555555556}],\n", " 'name': 'x2'},\n", " {'qubits': [3],\n", " 'gate': 'x',\n", " 'parameters': [{'date': datetime.datetime(2021, 4, 8, 5, 16, 4, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.0014014352990881524},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 35.55555555555556}],\n", " 'name': 'x3'},\n", " {'qubits': [4],\n", " 'gate': 'x',\n", " 'parameters': [{'date': datetime.datetime(2021, 4, 8, 5, 19, 5, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.00024401850777718676},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 35.55555555555556}],\n", " 'name': 'x4'},\n", " {'qubits': [4, 3],\n", " 'gate': 'cx',\n", " 'parameters': [{'date': datetime.datetime(2021, 4, 8, 5, 44, 31, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.011861078313086137},\n", " {'date': datetime.datetime(2021, 4, 5, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 554.6666666666666}],\n", " 'name': 'cx4_3'},\n", " {'qubits': [3, 4],\n", " 'gate': 'cx',\n", " 'parameters': [{'date': datetime.datetime(2021, 4, 8, 5, 44, 31, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.011861078313086137},\n", " {'date': datetime.datetime(2021, 4, 5, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 590.2222222222222}],\n", " 'name': 'cx3_4'},\n", " {'qubits': [3, 1],\n", " 'gate': 'cx',\n", " 'parameters': [{'date': datetime.datetime(2021, 4, 8, 5, 35, 52, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.010382215258371713},\n", " {'date': datetime.datetime(2021, 4, 5, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 398.2222222222222}],\n", " 'name': 'cx3_1'},\n", " {'qubits': [1, 3],\n", " 'gate': 'cx',\n", " 'parameters': [{'date': datetime.datetime(2021, 4, 8, 5, 35, 52, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.010382215258371713},\n", " {'date': datetime.datetime(2021, 4, 5, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 433.77777777777777}],\n", " 'name': 'cx1_3'},\n", " {'qubits': [2, 1],\n", " 'gate': 'cx',\n", " 'parameters': [{'date': datetime.datetime(2021, 4, 8, 5, 30, 17, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.006960948225156582},\n", " {'date': datetime.datetime(2021, 4, 5, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 412.4444444444444}],\n", " 'name': 'cx2_1'},\n", " {'qubits': [1, 2],\n", " 'gate': 'cx',\n", " 'parameters': [{'date': datetime.datetime(2021, 4, 8, 5, 30, 17, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.006960948225156582},\n", " {'date': datetime.datetime(2021, 4, 5, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 448}],\n", " 'name': 'cx1_2'},\n", " {'qubits': [1, 0],\n", " 'gate': 'cx',\n", " 'parameters': [{'date': datetime.datetime(2021, 4, 8, 5, 24, 50, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.013556101899107054},\n", " {'date': datetime.datetime(2021, 4, 5, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 775.1111111111111}],\n", " 'name': 'cx1_0'},\n", " {'qubits': [0, 1],\n", " 'gate': 'cx',\n", " 'parameters': [{'date': datetime.datetime(2021, 4, 8, 5, 24, 50, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.013556101899107054},\n", " {'date': datetime.datetime(2021, 4, 5, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 810.6666666666666}],\n", " 'name': 'cx0_1'},\n", " {'qubits': [0],\n", " 'gate': 'reset',\n", " 'parameters': [{'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 7342.222222222222}],\n", " 'name': 'reset0'},\n", " {'qubits': [1],\n", " 'gate': 'reset',\n", " 'parameters': [{'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 7342.222222222222}],\n", " 'name': 'reset1'},\n", " {'qubits': [2],\n", " 'gate': 'reset',\n", " 'parameters': [{'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 7342.222222222222}],\n", " 'name': 'reset2'},\n", " {'qubits': [3],\n", " 'gate': 'reset',\n", " 'parameters': [{'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 7342.222222222222}],\n", " 'name': 'reset3'},\n", " {'qubits': [4],\n", " 'gate': 'reset',\n", " 'parameters': [{'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 7342.222222222222}],\n", " 'name': 'reset4'}],\n", " 'general': [{'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'jq_01',\n", " 'unit': 'GHz',\n", " 'value': 0.0018736137364449847},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'zz_01',\n", " 'unit': 'GHz',\n", " 'value': -5.778719017046504e-05},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'jq_13',\n", " 'unit': 'GHz',\n", " 'value': 0.0020039976609872224},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'zz_13',\n", " 'unit': 'GHz',\n", " 'value': -5.2854062688980254e-05},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'jq_34',\n", " 'unit': 'GHz',\n", " 'value': 0.0016737719182152912},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'zz_34',\n", " 'unit': 'GHz',\n", " 'value': -3.628419642815204e-05},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'jq_12',\n", " 'unit': 'GHz',\n", " 'value': 0.0020062596172337292},\n", " {'date': datetime.datetime(2021, 4, 8, 5, 44, 32, tzinfo=tzlocal()),\n", " 'name': 'zz_12',\n", " 'unit': 'GHz',\n", " 'value': -5.607853601551941e-05}]}" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "properties = backend.properties()\n", "\n", "properties.to_dict()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " \n", "\n", "\n", "## 1.2 Interactive tools \n", "\n", "The large amount of information on different backends can better be visualized using the integrated interactive tools." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "# NOTE: if interactive tools don't work,\n", "# you may need to install ipywidgets.\n", "# If so, execute the line below:\n", "\n", "# !pip install ipywidgets\n", "\n", "# Interactive tools\n", "import qiskit.tools.jupyter\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/html": [ "

Version Information

Qiskit SoftwareVersion
Qiskit0.24.0
Terra0.16.4
Aer0.7.6
Ignis0.5.2
Aqua0.8.2
IBM Q Provider0.12.1
System information
Python3.9.2 (default, Mar 3 2021, 15:03:14) [MSC v.1916 64 bit (AMD64)]
OSWindows
CPUs4
Memory (Gb)15.885398864746094
Thu Apr 08 14:50:07 2021 Hora de Verão de GMT
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%qiskit_version_table" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "e58add12f86b4da6a2c6aa240cc73d1e", "version_major": 2, "version_minor": 0 }, "text/plain": [ "VBox(children=(HTML(value=\"

" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "backend" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " \n", "\n", "\n", "## 1.3 Quantum half-adder, revisited \n", "\n", " \n", "\n", "\n", "Recall the quantum half-adder circuit from the previous class, which adds the states of $q_0$ and $q_1$, and outputs the *sum* S to $q_1$ and the *carry* C to an additional qubit $q_2$:\n", "\n", " \n", "\n", "| $q_0$ (input) = A | $q_1$ (input) = B | $q_1$ (output) = S | $q_2$ (output) = C |\n", "|-----------------|-----------------|-------------------|------------------|\n", "| 0 | 0 | 0 | 0 |\n", "| 1 | 0 | 1 | 0 |\n", "| 0 | 1 | 1 | 0 |\n", "| 1 | 1 | 0 | 1 |\n", "\n", "\n", " \n", "\n", "\n", "We can now compare the results of the quantum half adder under ideal conditions (when using the simulator), vs. when executed on a physical quantum processor." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Create registers\n", "qr = QuantumRegister(3)\n", "cr = ClassicalRegister(3)\n", "\n", "# Quantum Circuit\n", "half_adder = QuantumCircuit(qr, cr)\n", "\n", "# We are adding q0 = |1> and q1 = |1>\n", "half_adder.x(qr[0])\n", "half_adder.x(qr[1])\n", "\n", "# Perform operation\n", "half_adder.ccx(qr[0], qr[1], qr[2])\n", "half_adder.cx(qr[0], qr[1])\n", "\n", "# Barriers make circuits prettier\n", "half_adder.barrier()\n", "\n", "# Measure\n", "half_adder.measure(qr, cr)\n", "\n", "# Draw\n", "half_adder.draw(output='mpl')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Recall that under noiseless settings and deterministic inputs (since inputs are not in superposition), the output is deterministic: $q_0 = 1$, $q_1 = 0$ (sum) and $q_2 = 1$ (carry). We therefore expect the measured outcome to be `101`." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sim_backend = Aer.get_backend(\"qasm_simulator\")\n", "\n", "shots = 1024\n", "job_half_adder_s = execute(half_adder, sim_backend, shots=shots)\n", "\n", "result_half_adder_s = job_half_adder_s.result()\n", "counts_half_adder_sim = result_half_adder_s.get_counts(half_adder)\n", "\n", "plot_histogram(counts_half_adder_sim)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Visualizing circuit decompositions\n", "\n", "Before being executed on a physical backend, the circuit is decomposed. This decomposition can be visualized using the `transpile` function." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# To visualize the decomposition, we have to specify the backend\n", "# get_backend() to define backend\n", "physical_backend = provider.get_backend('ibmq_belem')\n", "\n", " \n", "# With transpile we can see exactly what is running on the backend\n", "qc_real = transpile(half_adder, backend=physical_backend)\n", "\n", "qc_real.draw(output='mpl')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Comparing the number of layers\n", "\n", "We can compare the number of *layers* between the original and the compiled circuit. \n", "\n", "A *layer* is comprised of all quantum operations that can be executed concurrently, before the quantum device executes the next cycle of operations.\n", "\n", "" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Original circuit\n", "Depth: 4\n", "Gate counts: OrderedDict([('measure', 3), ('x', 2), ('ccx', 1), ('cx', 1), ('barrier', 1)])\n", "\n", "Optimization Level 0\n", "Depth: 53\n", "Gate counts: OrderedDict([('rz', 33), ('sx', 24), ('cx', 13), ('measure', 3), ('x', 2), ('barrier', 1)])\n", "\n", "Optimization Level 1\n", "Depth: 24\n", "Gate counts: OrderedDict([('cx', 17), ('rz', 10), ('measure', 3), ('x', 2), ('sx', 2), ('barrier', 1)])\n", "\n", "Optimization Level 2\n", "Depth: 22\n", "Gate counts: OrderedDict([('cx', 14), ('rz', 10), ('measure', 3), ('x', 2), ('sx', 2), ('barrier', 1)])\n", "\n", "Optimization Level 3\n", "Depth: 26\n", "Gate counts: OrderedDict([('rz', 19), ('sx', 11), ('cx', 9), ('measure', 3), ('x', 1), ('barrier', 1)])\n", "\n" ] } ], "source": [ "print('Original circuit')\n", "print('Depth:', half_adder.depth())\n", "print('Gate counts:', half_adder.count_ops())\n", "print()\n", "\n", "circlist=[]\n", "for kk in range(4):\n", " circ = transpile(half_adder, backend, optimization_level=kk)\n", " circlist.append(circ)\n", " print('Optimization Level {}'.format(kk))\n", " print('Depth:', circ.depth())\n", " print('Gate counts:', circ.count_ops())\n", " print()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also visually see which qubits are used for the circuit." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "plot_circuit_layout(circlist[0], physical_backend)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "plot_circuit_layout(circlist[3], physical_backend)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Comparing results" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Execute the DJ algorithm on physical backend\n", "\n", "# Enable job monitoring\n", "%qiskit_job_watcher\n", "\n", "# To disable: %qiskit_disable_job_watcher\n", "\n", "job_ha_real = execute(circlist[1], physical_backend, shots=shots)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# We can save the job ID to retrieve results even after closing the notebook\n", "#job_ha_real.job_id()\n", "\n", "# This can be achieved using the retrieve_job('ID') method\n", "#job_ha_real = physical_backend.retrieve_job('ID')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# We can also check the job status\n", "job_ha_real.status()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "result_ha_real = job_ha_real.result()\n", "counts_ha_real = result_ha_real.get_counts(half_adder)\n", "\n", "plot_histogram([counts_ha_real, counts_half_adder_sim], legend=[ 'real device', 'ideal'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " \n", "\n", "# 2. Quantum Teleportation protocol\n", "\n", " \n", "\n", "Quantum teleportation is a protocol to transmit quantum states from one location to another, assisted by a previously shared entangled state and a classical communication channel. It was devised by Charles H. Bennett (IBM), Gilles Brassard, Claude Crépeau, Richard Jozsa, Asher Peres, and William K. Wootters in [1993](https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.70.1895). It was first demonstrated with photons in [1997](http://www.nature.com/nature/journal/v390/n6660/abs/390575a0.html), and has since been realised in [atoms](http://www.nature.com/nphys/journal/v9/n7/abs/nphys2631.html), [ions](http://www.nature.com/nature/journal/v429/n6993/full/nature02570.html), [electrons](http://science.sciencemag.org/content/345/6196/532) and [superconducting circuits](http://www.nature.com/nature/journal/v500/n7462/full/nature12422.html). The [record](https://www.nature.com/articles/nature23675) distance for quantum teleportation is 1400 km via satellite.\n", "\n", "\n", "\n", "\n", "As illustrated above, the protocol starts out with a shared entangled state between the sender (Alice) and the receiver (Bob):\n", "$$|\\psi\\rangle_{AB} = \\frac{1}{\\sqrt{2}}(|0\\rangle_A \\otimes |0\\rangle_B + |1\\rangle_A \\otimes |1\\rangle_B)$$\n", "The first qubit, denoted by subscript $A$, belongs to Alice, and the second qubit, $B$, belongs to Bob.\n", "\n", "Alice has a quantum state that she wants to convey to Bob:\n", "$$|\\psi\\rangle_{C} = \\alpha|0\\rangle_C + \\beta|1\\rangle_C$$\n", "\n", "At this point, Alice has two quantum states ($C$, the one she wants to teleport, and $A$, one of the entangled pair), and Bob has one quantum state. The total state of the system is given by:\n", "$$|\\psi\\rangle_{AB} \\otimes |\\psi\\rangle_C = \\frac{1}{\\sqrt{2}}(|0\\rangle_A |0\\rangle_B + |1\\rangle_A |1\\rangle_B) \\otimes (\\alpha|0_C\\rangle + \\beta|1_C\\rangle)$$\n", "\n", "\n", "Alice now measures her two quantum states, $A$ and $C$, in the [Bell basis](https://www.quantiki.org/wiki/bell-basis). This will collapse the three state system into the one of the following four states with equal probability, with the corresponding measurement outcomes:\n", "- **00**: $|\\Phi^+\\rangle_{AC}\\otimes(\\alpha|0\\rangle_B + \\beta|1\\rangle_B)$\n", "- **01**: $|\\Phi^-\\rangle_{AC}\\otimes(\\alpha|0\\rangle_B - \\beta|1\\rangle_B)$\n", "- **10**: $|\\Psi^+\\rangle_{AC}\\otimes(\\alpha|1\\rangle_B + \\beta|0\\rangle_B)$ \n", "- **11**: $|\\Psi^-\\rangle_{AC}\\otimes(-\\alpha|1\\rangle_B + \\beta|0\\rangle_B)$\n", "\n", "Alice now sends the results of her measurements to Bob. Using this information, he performs one of the following transformations on his quantum state to transform it to the desired state $\\alpha|0\\rangle_B + \\beta|1\\rangle_B$:\n", "\n", "- If he receives **00**, he applies $I = \\begin{pmatrix} 1 & 0 \\\\ 0 & 1 \\end{pmatrix}$\n", "- If he receives **01**, he applies $Z = \\begin{pmatrix} 1 & 0 \\\\ 0 & -1 \\end{pmatrix}$\n", "- If he receives **10**, he applies $X = \\begin{pmatrix} 0 & 1 \\\\ 1 & 0 \\end{pmatrix}$ \n", "- If he receives **11**, he applies $XZ = \\begin{pmatrix} 0 & -1 \\\\ 1 & 0 \\end{pmatrix}$ \n", "\n", "Transmission (teleportation) of $|\\psi\\rangle = \\alpha|0\\rangle + \\beta|1\\rangle$ is thus achieved. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "**Exercise 2 - Implementing the quantum teleportation protocol**\n", "\n", " \n", "\n", "Implement the quantum teleportation protocol in the cell below. For this example, we can admit that the quantum state to teleport is $|qc \\rangle = \\frac{1}{2} |0\\rangle + \\frac{\\sqrt{3}}{2} |1\\rangle$.\n", "\n", " \n", "\n", "\n", "The protocol can be broken down into several steps:\n", "\n", "- Entangle qubits `qa` and `qb` so that $|qa \\; qb \\rangle = |00\\rangle + |11\\rangle$. This can be achieved with a Hadamard and a CNOT gate;\n", "\n", "\n", "- Prepare the state $|qc\\rangle$ as stated above; this can be achieved by a rotation around the y-axis of the qubit, which can be performed by the Ry gate: `ry(pi/3, qc)`;\n", "\n", "\n", "- To measure Alice's qubits in the [Bell basis](https://www.quantiki.org/wiki/bell-basis), she first has to apply the inverse of the entanglement operation on her two qubits - a `CNOT` followed by a Hadamard (this is already filled below);\n", "\n", "\n", "- Measure `qa` into bit $b_0$ and `qb` into bit $b_1$; as per the order above, $b_0 b_1 = A \\, C$;\n", "\n", "\n", "- Apply gate `Z` to `qb` if $b_0 = 1$, and apply `X` to `qb` if $b_1 = 1$;\n", "\n", "\n", "- To verify that the protocol worked correctly, reverse `qb` into $|0\\rangle$ by applying the inverse of the initial operation on `qc`: `ry(-pi/3, qc)`\n", "\n", "\n", "If the protocol was correctly applied, Bob should measure `0` independetly of Alice's results.\n", "
\n", "\n", "\n", "
\n", " \n", "**Quantum operations with classical controls**\n", "\n", "Qiskit allows for any quantum operation to be performed conditionally. For that, you need to append `c_if(bit, value)` to the original gate. \n", "\n", "E.g. to apply the Z gate to qubit `qb` if bit `b[0]` == 1: `qc.z(qb).c_if(b[0], 1)`\n", "\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Refs: \n", "* [Qiskit textbook teleportation](https://qiskit.org/textbook/ch-algorithms/teleportation.html)\n", "* [quantum teleportation](https://www.youtube.com/watch?v=DxQK1WDYI_k&list=PL0E2ABD1D84697428&index=15)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Qubits A, B and C as separate registers\n", "qc = QuantumRegister(1, 'qc')\n", "qa = QuantumRegister(1, 'qa')\n", "qb = QuantumRegister(1, 'qb')\n", "\n", "# Alice needs two bits; Bob needs one\n", "c_alice0 = ClassicalRegister(1)\n", "c_alice1 = ClassicalRegister(1)\n", "c_bob = ClassicalRegister(1)\n", "\n", "# Initialize circuit\n", "teleport = QuantumCircuit(qc, qa, qb, c_alice0, c_alice1, c_bob)\n", "\n", "# Entangle qa and qb\n", "\n", "\n", "# Prepare state |qc> on qubit qc\n", "teleport.barrier()\n", "\n", "# Project qc and qa into the Bell basis\n", "teleport.cx(qc, qa)\n", "teleport.h(qc)\n", "\n", "# Measure qc and qa into c_alice[0] and c_alice[1]\n", "\n", "teleport.barrier()\n", "\n", "# Perform conditional operations on qb\n", "# .().c_if(, 1)\n", "\n", "# Revert qb to |0>\n", "\n", "# Measure qb to c_bob\n", "\n", "# Draw circuit\n", "teleport.draw(output='mpl')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "anaconda-cloud": {}, "celltoolbar": "Hide code", "kernelspec": { "display_name": "Python 3", "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.2" } }, "nbformat": 4, "nbformat_minor": 2 }