Skip to content

Instantly share code, notes, and snippets.

@IvanIsCoding
Last active December 31, 2019 04:41
Show Gist options
  • Select an option

  • Save IvanIsCoding/0fd6cc6a2a892dd9d3b59e59cfa0f2a2 to your computer and use it in GitHub Desktop.

Select an option

Save IvanIsCoding/0fd6cc6a2a892dd9d3b59e59cfa0f2a2 to your computer and use it in GitHub Desktop.
Uncomputation using Qiskit
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Uncomputation"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"from qiskit import *"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To compute $a \\wedge b \\wedge c$, we need two working qubits. We need to split the computation into two parts: $a \\wedge b \\wedge c = (a \\wedge b) \\wedge c$\n",
"\n",
"Moreover, it is good practice to clean the working qubit that only contains an intermediate result: that is called uncomputation"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"circuit = QuantumCircuit(5, 2)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"# Steps to change qubits to 1 for test purposes\n",
"_ = circuit.x(0)\n",
"_ = circuit.x(1)\n",
"_ = circuit.x(2)\n",
"_ = circuit.barrier()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Firstly, we calculate $a \\wedge b$ in the first working qubit."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 337.12x385.28 with 1 Axes>"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"_ = circuit.ccx(0, 1, 3)\n",
"circuit.draw(output=\"mpl\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Secondly, we calculate $(a \\wedge b) \\wedge c$ using both the third qubit and the first working qubit. The second working qubit is the target."
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 397.32x385.28 with 1 Axes>"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"_ = circuit.ccx(2, 3, 4)\n",
"circuit.draw(output=\"mpl\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We now uncompute $a \\wedge b$ in the first working qubit. That way, we can reuse it later if needed.\n",
"\n",
"To do so, we remember that the Toffoli gate is the inverse of itself: $(a \\wedge b) \\oplus (a \\wedge b) = 0$"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 457.52x385.28 with 1 Axes>"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"_ = circuit.ccx(0, 1, 3)\n",
"circuit.draw(output=\"mpl\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Lastly, we measure both working qubits: one should contain the AND and the other should always be zero"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"# Measure (x^y^z) and working qubuit in classical bit\n",
"_ = circuit.barrier()\n",
"_ = circuit.measure(4, 0)\n",
"_ = circuit.measure(3, 1)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAfAAAAExCAYAAACDGPD3AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3de1xUdf4/8NfMcFW8QJgoqCkCwiQoaJKm4KqlfS3dBF1rbTNLF2G3tLbavuttTVKjcGvTtq2N33fd3JVLt/1ZX7VktNRN1xuSiLoojpLhJRREkJn5/jGKIsgM8GE+58x5PR8PHxtnDsdXs+94cS5zjs5ms9lAREREqqKXHYCIiIhajgVORESkQixwIiIiFWKBExERqRALnIiISIVY4ERERCrEAiciIlIhFjgREZEKscCJiIhUiAVORESkQixwIiIiFWKBExERqRALnIiISIVY4ERERCrEAiciIlIhFjgREZEKscCJiIhUiAVORESkQixwIiIiFWKBExERqZCH7ACkPUVFRQ7X+eMf/4i0tLRm1xkwYICoSERtxrkmV+MeOCnS22+/LTsCkXCcaxKJBU5ERKRCLHAiIiIVYoGTIuXk5MiOQCQc55pEYoETERGpEAucFCkpKUl2BCLhONckEguciIhIhfg5cJXw2vS5lL+3dtwEKX8vERE1j3vgpEipqamyIxAJx7kmkVjgpEiO7lZFpEacaxKJBU6KNGrUKNkRiITjXJNILHBSpPLyctkRiITjXJNILHAiIiIVYoGTIkVFRcmOQCQc55pEYoGTIuXm5sqOQCQc55pEYoGTIi1cuFB2BCLhONckkuYK3Gq1IiMjA2FhYfDx8UFMTAxMJhMiIiIwe/Zs2fGEsFVX42ryz2Dd+vWNZTU1qHv2OdT9fhlsVqvEdM7Jzs6WHcEpVgvw/SFg99+BrauBb/4MHMkHLv8oO5n7sVwFTh0Avl1rf6+3vw8c+waoqZSdzHlqmWtSB83diW3WrFnIy8vDggULEBcXh+3bt2P69OkoLy/H/PnzZccTQufrC33SFFj+9iF0I0cAVissr7wKeHrC8NIL0Ok193tbu6irBfblAT+aAegA2OzLT+wGTu4Foh8GAkNlJnQftZeBf68Hqs6i/r2uvQyU7ABK/w0MTgK69pSdksi1NFXg69atQ1ZWFvLz85GQkAAAGD16NPbs2YO8vDzExsZKTiiO/uGHYM3Jg23bN7Du2g3b2bPwyFgJnZen7Ghuo2jTtfIG6sv7OqsFOPApED8T6NDV5dHcTsFn18obaPReW64C+3KBEU8Bnr4uj0YkjaZ2xdLT0zF+/Pj68r6uf//+8PT0RHR0NADg+PHjSEhIQHh4OAYOHIht27bJiNsmOl8f6JOnwJLxBmwHDsAjfSl0HTvIjuU0k8kkO0KzrlwCvi9qfh2rBTi13zV53NmlH4ALJ5tZwQbU1QCnC10WqdWUPtekLprZAzebzTh48CDmzZvX6LXS0lIYjUZ4e3sDAObMmYNp06Zh7ty52L59O5KTk1FSUgIvL692yabT6Ryu47lxQ+s2fuUKDNOmQufv36pvdyZbSzX1/8Gtjh07htDQ5o8/Z2ZmiorUYhPueQrzk//c7Do2mw07vyhBeCKPo7fFz8cuwC8e+H2z61itVuT95WvMH5rQ7HrtyR3mmuSz2WyOV7pGM3vgZrP9WGdQUFCD5dXV1TCZTPWHz8+ePYuvv/4as2bNAgAMHz4cPXv2xJYtW1wbuI2sm7+C9R/roXvgflg++qRFQ6EEn376qewIzfLx6uhwHZ1OB28v9Rz1UCofr46w2Zq/8FKv18PHy89FiVpP6XNN6qKZPfDAwEAAQHFxMR588MH65StXrkRZWRni4uIA2PfGu3fvXr83DgB9+/bFiRMn2i2bM+XakseJWr/dBcsf34bh94uhCwtD3eMzYdu6DbqElt+HuT2Kv6jIwbFn2PdCHH0q4I033hAVqcXOHgP2feRgJR3Qb0CQ6n55UppTB4BDGx2spAPuGxML2yp577U7zDWpi2YKvF+/foiOjkZ6ejoCAgIQHByMnJwcbNhgPzR9vcDVzlr4HSzpy2H4zXPQRw8EAPu58LXroBt5H69AFySgL+DVEaitamYlGxAc47JIbqv7AODwV4C1rpmV+F6TBmnmp7ler0d2djaMRiNSUlIwc+ZMBAYGIjU1FQaDof4Ctt69e+PMmTOoqamp/96SkhL06dNHVnSn2UqOw7JwMQxznoZ+xPD65fqHJwIVFbBtVc/FeEuWLJEdoVl6PRAxpvl1ugYD3SNck8edeXgBYQ5ObXcLA/x7uSZPWyh9rklddDaNH9+bMWMG9u/fjwMHDtQvu//++zF58uT6i9iSkpJw/PjxdruIzRktOYQuUu24CcK36cyhRmcMGDBAyHba4kwxcPjLW/bEdUDQAGDAOHv5kBinDgBHtgJ1V24s0+mB4GggfDSgN8jLBrjXXJM6aOYQ+u3s3r0b8fHxDZa98847eOKJJ7Bq1Sp4eXlh3bp1UstbiyIjI3Ho0CHZMRzqHg506w+cKwH2Xzsnft9swKeT3FzuKDga6BEFlP8HKLh2LdjIXwJquk5QLXNN6qDpAq+srERxcTHmzp3bYHm/fv2wdetWSalIbfR6oNtNnwxiebcfvYf9l6aCa1+rqbyJRNN0gfv5+cFisciOQURE1GKauYiN1CUxMVF2BCLhONckEgucFGnNmjWyIxAJx7kmkVjgpEgpKSmyIxAJx7kmkVjgpEj5+fmyIxAJx7kmkVjgREREKsQCJyIiUiEWOCkSb3ZB7ohzTSJp+nPgatIetzRVsvXr12Pq1KmyYxAJxbkmkbgHToq0aNEi2RGIhONck0gscCIiIhVigRMREakQC5wUafXq1bIjEAnHuSaRWOCkSEajUXYEIuE41yQSC5wUKSEhQXYEIuE41yQSC5yIiEiFWOCkSEOHDpUdgUg4zjWJxAInRdq1a5fsCETCca5JJBY4ERGRCrHAiYiIVIgFToqUk5MjOwKRcJxrEokFTkREpEIscFKkpKQk2RGIhONck0gscCIiIhXi88BVwmvT51L+Xq09h5yISC24B06KlJqaKjsCkXCcaxKJBU6KlJaWJjsCkXCcaxKJBU6KNGrUKNkRiITjXJNILHBSpPLyctkRiITjXJNILHAiIiIVYoGTIkVFRcmOQCQc55pEYoGTIuXm5sqOQCQc55pEYoGTIi1cuFB2BCLhONckkuYK3Gq1IiMjA2FhYfDx8UFMTAxMJhMiIiIwe/Zs2fHomuzsbNkRnGa1AuXHbnx95ZK8LO7OWgecKb7xde1leVlaQ01zTcqnuTuxzZo1C3l5eViwYAHi4uKwfft2TJ8+HeXl5Zg/f77seELYqqtR9/hMGH6VBv2o++zLampgefFlICAAht/9Fjq95n53axdnDgOHvwJqq24s+/pdoHsEEHk/4OElL5u7Me8Hjm4D6q7cWLbtHSA4GggfDegN8rIRyaCpAl+3bh2ysrKQn5+PhIQEAMDo0aOxZ88e5OXlITY2VnJCMXS+vtAnTYHlbx9CN3IEYLXC8sqrgKcnDC+9wPIW5EwxUPBZEy/YgDNFQM0lIHYqi0WEk3uBw182Xm6zAuZ9QE0VEP0woNO5PhuRLJr6SZ6eno7x48fXl/d1/fv3h6enJ6KjowHYz1OFh4dDr9er9vm9+ocfAs5fgG3bN7Csegu2s2dhWLwQOi9P2dGcYjKZZEdoltXadKHc7MdT9j10apu6WuCIg3EoPwJcOOmaPG2h9LkmddFMgZvNZhw8eBDJycmNXistLYXRaIS3tzcAYPz48fjiiy9Ufdckna8P9MlTYMl4A7YDB+CRvhS6jh1kx3JaYWGh7AjNOl/S8LB5k3TAqf0uiePWzhTZz303SyXvtdLnmtRFM4fQzWYzACAoKKjB8urqaphMJkyYcOOpW8OHD3dpNp0Tx/08N25o3cavXIFh2lTo/P1b9e3OZGupefPmOVwnMzPT4XqZmZmiIrXYT+97BnMnrWp+JRvwn6LvMVTXwzWh3NRTDy7H1MTfQKdrZn/DBnz95R5EPxznumC3cIe5JvlsNpvT62pmDzwwMBAAUFxc3GD5ypUrUVZWhrg4ef/htwfr5q9g/cd66B64H5aPPmnRUJBjVxzuftv/Q6xR22XSCnSltqr58ob90yVXaitdlIhIGXQ2jfxkt1qtGDx4MMrKypCRkYHg4GDk5ORgw4YNKC0txc6dOzFs2LAG35OYmIi0tDQkJSVJSn1DS54Hbv12Fyzpy2H4/WLowsLsV6SnpUCf0PJTAu3xPPCioiKH60RGRuLQoUPNrjNgwABRkVrsyiX71eZw8F9Pn6FAWELz61DzLv0A/Ot/HK8Xlgj0GdLucW7LHeaa1EUze+B6vR7Z2dkwGo1ISUnBzJkzERgYiNTUVBgMhvoL2NTOWvidvbx/8xz00QNvnAtfuw42q1V2PKctWbJEdoRm+XQCghz8nNUbgOAY1+RxZ53uBPx7NbOCDvDwBnoaXRap1ZQ+16QumilwAAgPD8eWLVtQVVWF0tJSLF26FAUFBYiKioKvr6/seG1mKzkOy8LFMMx5GvoRN87j6x+eCFRUwLZ1m8R0LTN16lTZERwaMA7oGnLti1suFdAbgOhJQIeuLo/llgY+BPgFXvvilvfa4AkMmgJ4quA/YTXMNamHpgq8Kbt37250/nvBggUICQnBjh07MGfOHISEhODYsWO32YJy6PreBc/c9dBPGN9wuY8PPNd/CH2ieo7lRkZGyo7gkIcXEJsM3P1fQNfgG8v7DAXiZwKB/eRlczdeHYChj9lvjtO5+43l/YYDw58EuvaUl60l1DDXpB6aLvDKykoUFxc3uoHL0qVLYTabUVNTg3PnzsFsNiM0NFRSSlIyvQEIigSG/OzGsrAE7nm3B4On/a5r9/z8xrJ+wwFvP3mZiGTSzMfImuLn5weLxSI7BhERUYtpeg+clCsxMVF2BCLhONckEgucFGnNmjWyIxAJx7kmkVjgpEgpKSmyIxAJx7kmkVjgpEj5+fmyIxAJx7kmkVjgREREKsQCJyIiUiEWOCmSo/tFE6kR55pE0vTnwNWkPR4qomTr16/nbSfJ7XCuSSTugZMiLVq0SHYEIuE41yQSC5yIiEiFWOBEREQqxAInRVq9erXsCETCca5JJBY4KZLRaJQdgUg4zjWJxAInRUpIUM+zy4mcxbkmkVjgREREKsQCJ0UaOnSo7AhEwnGuSSQWOCnSrl27ZEcgEo5zTSKxwImIiFSIBU5ERKRCLHBSpJycHNkRiITjXJNILHAiIiIVYoGTIiUlJcmOQCQc55pEYoETERGpEJ8HrhJemz6X8vdq7TnkRERqwT1wUqTU1FTZEYiE41yTSCxwUqS0tDTZEYiE41yTSCxwUqRRo0bJjkAkHOeaRGKBkyKVl5fLjkAkHOeaRGKBExERqRALnBQpKipKdgQi4TjXJBILnBQpNzdXdgQi4TjXJBILnBRp4cKFsiMQCce5JpE0V+BWqxUZGRkICwuDj48PYmJiYDKZEBERgdmzZ8uOR9dkZ2fLjqAZNpvsBNrBuSaRNHcntlmzZiEvLw8LFixAXFwctm/fjunTp6O8vBzz58+XHU8IW3U16h6fCcOv0qAfdZ99WU0NLC++DAQEwPC730Kn19zvbnSTCyeB0j3Auf8AVivQMQAIGQT0HAgYNPdTgUidNPWf6rp165CVlYX8/HwkJCQAAEaPHo09e/YgLy8PsbGxkhOKofP1hT5pCix/+xC6kSMAqxWWV14FPD1heOkFlrfGndgFHDEB0AG4tvdddQ44/CXwfREQOwUweMlMSETO0NRP8vT0dIwfP76+vK/r378/PD09ER0djQsXLmDixIkIDw9HTEwM7r//fhw9elRS4tbTP/wQcP4CbNu+gWXVW7CdPQvD4oXQeXnKjuYUk8kkO4JbunDyWnkD9eV9s4pTQHG+KxNpC+eaRNJMgZvNZhw8eBDJycmNXistLYXRaIS3tzd0Oh2effZZFBcXY//+/Zg4cSJmzpwpIXHb6Hx9oE+eAkvGG7AdOACP9KXQdewgO5bTCgsLZUdwS6V7YN/zbsbpQuBqtUviaA7nmkTSzCF0s9kMAAgKCmqwvLq6GiaTCRMm2J+61bVrV4wdO7b+9eHDh2PlypXtmk2nc/ATFYDnxg2t2/iVKzBMmwqdv3+rvt2ZbC01b948h+tkZmY6XC8zM1NUJCE2vWbfpW2P90yUf6Zfhrenb7Pr2CzA6Ht+im8OfuyiVC2nxPfaXeeaXMvWgqtKNbMHHhgYCAAoLi5usHzlypUoKytDXFxck9+3atUqTJ48ud3ziWbd/BWs/1gP3QP3w/LRJy0aCnJfHnrnTqF48CQ4keLpbBr5yW61WjF48GCUlZUhIyMDwcHByMnJwYYNG1BaWoqdO3di2LBhDb5nyZIl+Pzzz/HVV1+hQwe5h59b8jxw67e7YElfDsPvF0MXFma/Ij0tBfqElj9IoT2eB15UVORwncjISBw6dKjZdQYMGCAqkhCbM+z/O/Z5uTmasyMLqDrreL34XwB+3do9Tqsp8b1217km5dLMHrher0d2djaMRiNSUlIwc+ZMBAYGIjU1FQaDAdHR0Q3Wf+WVV/DPf/4TX3zxhfTybglr4Xf28v7Nc9BHD7xxLnztOtisVtnxnLZkyRLZEdxSr0EOVtABXXoqu7zVjHNNImnmHDgAhIeHY8uWLQ2WzZgxA1FRUfD1vXFecMmSJdiwYQM2bdqErl27ujpmq9lKjsOycDEMc56GfsTw+uX6hyfCmpMH29Zt0CUmNLMF5Zg6darsCG6p593A94eAH0818aIO0BuAiDEuj6UZnGsSSVMF3pTdu3cjPj6+/uvCwkIsXrwYoaGhSExMrF++b98+CelaRtf3Lnjmrm+83McHnus/dHmetnDmUCO1nN4DGDwFKDYBpw/aL1i7rksPe3l37i4vn7vjXJNImi7wyspKFBcXY+7cufXLjEYjL/git2bwAiLHAf3vA0xv25cp/Zw3ETWm6QL38/ODxWJxvCKRG7r502QsbyL10cxFbKQuN5++IHIXnGsSiQVOirRmzRrZEYiE41yTSCxwUqSUlBTZEYiE41yTSCxwUqT8/HzZEYiE41yTSCxwIiIiFWKBExERqRALnBSJN7sgd8S5JpFY4KRI69c3vqMckdpxrkkkTd/IRU3a46lgSrZo0SLeN5rcDueaROIeOBERkQqxwImIiFSIBU6KtHr1atkRiITjXJNILHBSJKPRKDsCkXCcaxKJBU6KlJCQIDsCkXCcaxKJBU5ERKRCLHAiIiIVYoGTIg0dOlR2BCLhONckEgucFGnXrl2yIxAJx7kmkVjgREREKsQCJyIiUiEWOClSTk6O7AhEwnGuSSQWOBERkQqxwEmRkpKSZEcgEo5zTSKxwImIiFSIzwMnIiJF0ul0Uv5em80m5e9tKe6BkyKlpqbKjkAkHOeaRGKBkyKlpaXJjkAkHOeaRGKBkyKNGjVKdgSHbDbgwkng+LfAwf9/Y3nxFuD7Q0DtZXnZ3I3VCpw7DpTsBAo+u7H8iAk4cxioq5EWrUXUMNekHjwHTopUXl4uO8JtWa2AeR9wcg9Q/WPj10v/bf9fnQHoHgH0jQc6Brg2o7uwXLW/n+Z9QE1l49dPXLszqcETCIoE+t4L+HRybcaWUPJck/qwwIlaoPIsUPg5cOmM43VtFuD774AfDgOh9wG9hwCSrslRpYoy+3t9+bzjdS1XgVMHgO+LgIjRQM+B7Z+PSDYWOClSVFSU7AiN/HgK2JsLWGpb9n1Wi/1Qb+U5IOoBlrgzyo8BBz61/xLUEpZa4Lv/BS5fAEJHKu+9VuJck3rxHDgpUm5uruwIDVSdb11536zsIHDUJC6Tu6ooa1153+z4tzdOZSiJ0uba3RgMBtx9990YO3YsxowZg6ioKBgMhtuu7+/vj7lz57owoVgscFKkhQsXyo5Qz2YFvvvCcXmPfd7+pzkndtsvfKOmWa7aD5s7Km9n3uujW+2nPJRESXPtLjw8PPDII49g48aNuHTpEgoKCrBp0yZs3rwZhYWFuHjxIj7//HNMmjSpQZn7+/tj8+bNePvtt/Hss89K/DdoPc0VuNVqRUZGBsLCwuDj44OYmBiYTCZERERg9uzZsuPRNdnZ2bIj1CsrBCpOi9te0Sb7Fewy2Wz2UwLXnS60l6dspf927py3M2xW4PBXYrYlipLm2h3Ex8ejoKAAubm5GDduHHx9fXHs2DF8+eWX+PLLL1FSUoIOHTpg/Pjx+Pjjj7F//34MGTKkvrxjY2Nx5MgRrF+/Xva/Sqto7hz4rFmzkJeXhwULFiAuLg7bt2/H9OnTUV5ejvnz58uORwpjswEn94rdZtV5+154QG+x23VWdQVw4BPg0g83ln33OVD8JTBgnP1qbhmsVsC8X+w2L5Ta98L9AsVul+R7/vnnsXz5chgMBhw9ehRvvvkmPvzwQ5w7d67Bet26dcNjjz2GX//61zAajdixYwfKysrQq1cvHDlyBImJiTh9WuBv6C6kqT3wdevWISsrC59++imef/55jB49Gv/93/+Ne++9F3V1dYiNjZUdkRSm6lzDohOlrFD8Np1RWw3s/jtwqYlPM9XV2j/P/sMR1+cC7L/U1FwSv93vD4nfJsn1wgsv4LXXXoNOp8Orr76Ku+++G2+99Vaj8gbsH91btWoVjEYj3n77bXh4eKBXr14oLy9XdXkDGivw9PR0jB8/HgkJCQ2W9+/fH56enoiOjgYATJ48GdHR0Rg8eDDuuecebN68WUZcTTOZlHG118UydW3XEfO+ayXZzCH8IyY5h/jd7b1uilLmWs1GjhyJFStWwGq14vHHH8fLL7+MmhrHd/Lx8fHBvffeW/91QEAAQkJC2jNqu9NMgZvNZhw8eBDJycmNXistLYXRaIS3tzcAICsrCwcOHMDevXvxpz/9CVOmTIHF0oZLYqnFCgsl7aLe4lI7XQRVdd7+8TJXO3XA8TrVP4o95++syna6x0lTRxtkUcpcq5W3tzc++OADAMDSpUvxt7/9zanvu/Wc9+rVq2EwGJCVlQUPD/WeSVZv8hYym80AgKCgoAbLq6urYTKZMGHChPplXbt2rf/niooK6HS6dn06jawn7sgyb948h+tkZmY6XC8zM1NUpNual/QuHhz2dINljq5+vt3rmzMaft3ZryuqrlS0IV3L/e+KOuj1t/9YzXWPTJyOLfv+7oJENyyd+RnioyY2WCbiva68WA2drkMb0zmmprlWq6lTpyI0NBSFhYVYtmyZU99za3knJibi3LlzGDduHCIjIzF58mTk5OQ0+B6ZP5Nb0jWa2QMPDLRfxVJcXNxg+cqVK1FWVoa4uLgGy1NTU9GvXz9MmTIFubm5qv4tjVqvri0f/Ja47du57ORJZlf/YgG03/txVS03SieHUlJSAACvv/46rl51/LGJpsr79OnTqKmpwapVqxpsU410NrU8+LSNrFYrBg8ejLKyMmRkZCA4OBg5OTnYsGEDSktLsXPnTgwbNqzR95lMJsybNw9bt26Fn5+fhOTup6ioyOE6kZGROHSo+auPBgwYICrSbZXuAYqd/CjS9b3BW/e0m+LdCRg5p/W5WuvQJuCUgyu9PbyBkSmAwcW/sx7dar8BizNa8l53DgLu+XnrczlLTXOtFjfvCfv5+aGiogIWiwVdu3bF5cvNPy3oduV9XefOnXHhwgXU1dWhU6dOqK298QukWmpRM3vger0e2dnZMBqNSElJwcyZMxEYGIjU1FQYDIb6C9hulZCQAL1ej2+++cbFibVtyZIlsiMAADp3V9d2Hekda3/ISnP6DHV9eQNAJzd7r5uilLlWo5iYGOj1ehQUFLS5vAHg4sWLOHz4MLy8vDBwoDpvnq+ZAgeA8PBwbNmyBVVVVSgtLcXSpUtRUFCAqKgo+Pr6AgAqKytx4sSJ+u/Zu3cvjh07hshISR+O1aipU6fKjgAA6NwD8G6HAy93honfpjM63gHETAL0txb0tR2d4BjgrsYHolzijrvsTxUTrVu4+G22llLmWo2Cg4MBAMeOHWt2PWfK+7qjR48CAHr27Ck2rIto/sTu7t27ER8fX/91VVUVpk2bhsrKSnh4eMDHxwdr165F796S7rqhUc4canQFvR4Ijgb+s13cNj19gDsjxG2vpQL7ASOeBk4XAMe+ti/rEQWEDLIfbpZ1/Y6HNxAU5fgQf0t08Jd3w5ymKGWu1Sg3NxedO3d2uJ6fnx/8/f2duknLz3/+c9hsNlRVVYmM6jKaLvDKykoUFxc3uJl99+7dsXPnTompSGl6xdo/ftXU86hbI3SknEPUN/PuaH9O+fUCN05ofn1X6RsPnCkCRF13FpagvCeSUetYLBZcuuT4IsyTJ08iMTERdXV1Dm/ScvHiRVHxpNB0gfv5+fHz3eSQpw8Q+QCwT8CDpAL62PfoqWk+nYDw0faHx7RVUBTQrX/bt0PqU1paKjuCS2i6wEm5EhMTZUdoILAvEPGT5h+O4eiKaL9uwMCHuEfoSM+7gcs/AsebORDm6L327wVEjhObSwSlzTWpGwucFGnNmjWyIzTSK9Z+nrZoc8uf3BXYDzA+aN+bJ8dCRwBevsCRrS1/LnhQlL282+OCuLZS4lyTemnqKnRSD6XeXKGHEYh/Aujm5FXkPp2AqAlAzE9Z3i2h0wG944BhM+ynHZzRwR+ImQzc/aAyyxtQ7lyTOnEPnBQpPz9fdoTb8u1i/yhWdcW1Z4WX2Z9YVlcD6PRAh672q7kD+9n/6Phrcqv5BQKxyfanwpV9B1z83n7P9LpaQG+wl3bn7sCd4YB/b+WfnlDyXJP6sMCJWsm3C9BvuOwU2tDxDqD/SNkpiJSF+wZEREQqxAInReLNLsgdca5JJB5CJ0Vav349bztJbodz3TKteajISyvebfD18hdni4qjONwDJ0VatGiR7AhEwnGuSSQWOBERkQqxwImIiFSIBU6KtHr1atkRiITjXJNILHBSJKPRKDsCkXCcaxKJBU6KlJCQIDsCkXCcaxKJBU5ERKRCLHBSpKFDh8qOQCQc55pEYoGTIu3atUt2BFnwMyMAAA4fSURBVCLhONckEguciIhIhVjgREREKsQCJ0XKycmRHYFIOM41icQCJyIiUiEWOClSUlKS7AhEwnGuSSQWOBERkQrxeeBERBqg0+lc/ne25nne5DzugZMipaamyo5AJBznmkRigZMipaWlyY5AJBznmkRigZMijRo1SnYEt2azAdUVN76+VA5YLfLyaAXnmkTiOXBSpPLyctkR3I7NBlScBsz7gHPHgavVN1771/8DdAagcxAQPBDoHgEYPKVFdVucaxKJBU6kAVcuAt9tBM4fv/06NgtQccr+5+g2IPJ+oFuoyyISUQvxEDopUlRUlOwIbuNsCbAjq/nyvlVtFbD/I6BoM2Cztlcy7eFck0gscFKk3Nxc2RHcwrkSexFbalv3/eZ9wKGN9sPv1HbuPNedOnWS8lE1LWOBkyItXLhQdgTVq6kECv7Z/B702Oftf5pz+qD9D7WdGua6W7du+OUvf4n3338fO3fuxIEDB/Dtt98iKysLaWlp6NmzZ6Pv8ff3R35+Pt577z2WuAtprsCtVisyMjIQFhYGHx8fxMTEwGQyISIiArNnz5Ydj67Jzs6WHUH1ijYDdTVitlW8xf4LAbWNkue6V69e+Otf/wqz2Yw1a9bgySefxLBhwzBw4EAMHToUv/jFL/DWW2/hxIkTyM7ORmio/QIJf39/bN68GbGxsRg5ciQCAgIk/5toh+YuYps1axby8vKwYMECxMXFYfv27Zg+fTrKy8sxf/582fGIhKg8C5QfFbc9Sy1wci/Qf6S4bZJyPPHEE/jDH/6Azp07w2Kx4NNPP8WmTZuwb98+VFRUwM/PDzExMRgzZgwmTZqEpKQkPPjgg1iyZAmmTZuG2NhYHDlyBImJiTh37pzsfx3N0FSBr1u3DllZWcjPz0dCQgIAYPTo0dizZw/y8vIQGxsrOSGRGOb94rd56gDQbzigN4jfNsnz8ssvY9myZQCAvLw8zJ8/HydOnGi03o4dO/DOO++gR48eWLFiBWbMmIEVK1YAQH15nz592qXZtU5Th9DT09Mxfvz4+vK+rn///vD09ER0dHSD5e+++y50Oh2f4SuByWSSHUHVzjf++dtmV6vte/bUekqb68cffxzLli2DxWLB008/jSlTpjRZ3jcrKyvDM888g5KSkvpla9euZXlLoJkCN5vNOHjwIJKTkxu9VlpaCqPRCG9v7/plR44cwQcffID4+HhXxqRrCgsLZUdQrbpa4PL59tn2xe/bZ7taoaS5DgkJwZtvvgkASElJwXvvvefU910/5923b1+UlZUBAF566SWEh4e3W1ZqmmYOoZvNZgBAUFBQg+XV1dUwmUyYMGFC/bK6ujo8+eSTWLNmDZ599tl2z6a1qzbnzZvncJ3MzEyH62VmZoqK5FaCA/sj68UjDZY5utL8dq9vzmj49cu/WYy/blrShnTuS21z/corr6BLly74+OOP8ec//9mp77n5grXrh82XLVuGJ554Aq+99homTZrUYH0ZP9teXP4n6RnaoiVPcNPMHnhgYCAAoLi4uMHylStXoqysDHFxcfXLli5digkTJmDQoEEuzUgkRvv9wNLrNPMjw63dcccd+NnPfgar1er0xbtNlffp06fxwgsvoKamBhMnTkSfPn3aOTndTDN74P369UN0dDTS09MREBCA4OBg5OTkYMOGDQBQX+D/+te/8NVXXyE/P99l2bT2zNyioiKH62RmZjr8WN8bb7whKpJbuXoFMP2x4bJb96Svu77nfbvXb/X7Vxci63+V/1lmGZQ+1zfvif70pz+Ft7c3NmzY0OBc9u3crrwB+/3dc3Nz8eijjyI5ORkZGTeGScbPtpdWvNvga3f++aqZX6f1ej2ys7NhNBqRkpKCmTNnIjAwEKmpqTAYDPUXsG3ZsgXHjh1DaGgo7rrrLuzcuRNz587F66+/LvnfQFuWLOFh2tby9AF8OrfPtjt3b5/taoVS5nrIkCEAgE2bNjlct7nyvu76dq5vl1xDM3vgABAeHo4tW7Y0WDZjxgxERUXB19cXgP1ijJdeeqn+9cTERKSlpSEpKcmlWbVu6tSpsiOomn8IUPad2G0aPIFOd4rdptYoZa6NRiMAYP/+5j9v6Ex5A8C+ffsabJdcQ1MF3pTdu3fzSnMFioyMxKFDh2THUK3gGPEF3iOKjxhtK6XMdVZWFkwmU6Nrgm61atUqh+UN2D/Js2zZMnz/PT+m4EqaLvDKykoUFxdj7ty5t13HlefCiUTp0hPo0gOoKBOzPZ0e6MX7HLmN999/36n15s+fj44dO+LXv/51s5/zPn/+PH73u9+JikdO0nSB+/n5wWKxyI5BJJxOB0Q+APzrf8Q8DrTvvUDHO9q+HVKXc+fO8fShgmm6wEm5EhMTZUdQPb9AYMBY++NAb8eZq88DegN33SMul5ZxrkkkzVyFTuqyZs0a2RHcQnA0EDGm9d8fcBcQM5n3PxeFc00iscBJkVJSUmRHcBu9BgNDpgMd/J3/Hp0BCEsABj8CGLzaL5vWcK5JJB5CJ0XixYNidQ0Ghv0COHMIMO8DLp5pej1PXyB4oP0qdt8urs2oBZxrEokFTqQRBg+g50D7n9rLwKUfgOoKADbAw8d+kxbfrvYL4IhI+VjgRBrk1QG44y7ZKYioLXgOnBRJCTe7IBKNc00iscBJkdavXy87ApFwnGsSiQVOirRo0SLZEYiEkznXNputRX9eXP4nvLj8T43+uSV/qH2xwImIiFSIBU5ERKRCLHBSpNWrV8uOQCQc55pEYoGTIvG5wuSOONckEgucFCkhIUF2BCLhONckEguciIhIhVjgREREKsRbqZLLDRgwwOE6ixYtcmo9IqXgXJOrcQ+cFGnx4sWyIxAJx7kmkVjgREREKsQCJyIiUiEWOBERkQqxwImIiFSIBU5ERKRCLHAiIiIVYoFrxMmTJzFmzBhERkbCaDTit7/9rexIROTG8vPzYTQa0b9/fzz11FOwWCyyIzn0zDPPICQkBB4e6rhFCgtcIzw8PLBixQocOnQIe/fuxddff41PPvlEdiwickNWqxVPPfUUsrOzcfToUVy8eBFr166VHcuh5ORk7N69W3YMp7HANaJHjx4YMmQIAMDLywuDBw9GaWmp5FRE5I527dqFnj17IioqCgAwa9Ys5ObmSk7l2H333YegoCDZMZzGAteg8+fP4+OPP8a4ceNkRyEiN2Q2m9GrV6/6r3v37o2TJ09KTOSe1HGgn4Spra1FUlISnnnmGd6TmYjqna+4hL/mbWy0/A8f5Db5z9MmjkZQt4Amt2Wz2cQHvI1PN29Hycmy275+c+awu4Lx4Oh4V8RyCRa4hlgsFjz66KMYNGgQnnvuOdlxiEhBArp0Qo87A7Dn4JEGy8t+ONfonyP797lteQNAr169Guxxl5aWIiQkRHBiu7iB4djx74O43a8M1zPrdTr87KGftEsGWXgIXUNmz56NTp064fXXX5cdhYgUaPyoe+Dp2fx+nUGvx3852IsdMmQIzGYzvvvuOwDA+++/j0ceeURYzpsFdw/EkGjHRxPjY6PQPdC/XTLIwgLXiG+++QZ/+ctfsHv3bgwePBiDBg3Cm2++KTsWESlI504dkRg/qNl1hsfdjcCALs2uYzAY8N577yEpKQmhoaHw8/PDjBkzREZt4P5RQ+Dt5Xnb1319vDFmRJzD7cyZMwchISGwWCwICQlBamqqyJjC6WyuPFlBimSz2aDT6WTHICIFuHq1Dhl//gcqLlU1eq2jrw+enz0Nvj7eEpI1L3/nPnxh+rbJ1x4aMxwjhtzt4kTtj3vgt/jkk08wceJE3HnnnfD29kafPn3w6KOPoqCgQHa0dvP3z77Cxq27ZMcgIgXw9PTAg4nDmnxt3MghiixvABgx5G4EdOnUaHm3gK6IHxwlIVH7Y4FfU1dXh8ceewyTJ09GQUEBHnnkETzzzDMYPHgwcnNzcerUKdkR28XpM2ex/9Ax6PUcBSKyi44MRZ/g7g2WdQ/0x9AY5X5yxdPDo8krzCf+JB4Gg3v+fONV6Nf86le/wocffoi0tDRkZmY2uJWe2WxGly7Nn/NRqy+374GPt5dbHl4iotbR6XSYOOZevP0/H9cvm/iTe2FQ+C/6xvC70LdXj/qPlYX37YWI0N6SU7UfngMHsG3bNowaNQrjx4/Hhg0bXH4++KUV77r07yMiImVa/uJsp9dV9q9TLrJq1SoAwPLly3kxFxERqQL3wAF06tQJgYGBKCkpkR3FZU6fOYs3s/IwdkQcxt7n+OMVRKRNZ85eUN3npy9VXYZer0dHXx/ZUdqV5gv8xx9/hL+/PxITE7FlyxYpGXgInYiIAB5Cb5Hrv7/88MMPkpMQERE5T/N74AAQGhqKkpISbNy4EWPHjm3w2uHDhxERESEpWfv460cbcezEabz4y+mK/UwnERE1jx8jA/Dqq69i2rRpmDBhAiZNmoTQ0FD88MMP2L59O6KiovDRRx/JjijM6TNnUVh8HGNHxLG8iYhUjAUOYOrUqejSpQtee+01bNq0CZ999hnuvPNO3HPPPXj22WdlxxPq/I+XENC1Ez/3TUSkcjyErkFWq5V3XiMiUjkWOBERkQpxN4yIiEiFWOBEREQqxAInIiJSIRY4ERGRCrHAiYiIVIgFTkREpEIscCIiIhVigRMREakQC5yIiEiFWOBEREQqxAInIiJSIRY4ERGRCrHAiYiIVIgFTkREpEIscCIiIhVigRMREakQC5yIiEiFWOBEREQqxAInIiJSIRY4ERGRCrHAiYiIVIgFTkREpEIscCIiIhVigRMREakQC5yIiEiFWOBEREQqxAInIiJSof8D3mDEOaJs4cIAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 638.12x385.28 with 1 Axes>"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"circuit.draw(output=\"mpl\")"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"# Simulate\n",
"simulator = Aer.get_backend(\"qasm_simulator\")\n",
"job = execute(circuit, backend=simulator, shots=1024)\n",
"result = job.result()\n",
"counts = result.get_counts()"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 504x360 with 1 Axes>"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Plot results\n",
"visualization.plot_histogram(counts)"
]
}
],
"metadata": {
"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.7.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment