Skip to content

Instantly share code, notes, and snippets.

@IvanIsCoding
Last active December 31, 2019 01:44
Show Gist options
  • Save IvanIsCoding/8fa8bbaa6c9d3dad16b3bf60e69d5087 to your computer and use it in GitHub Desktop.
Save IvanIsCoding/8fa8bbaa6c9d3dad16b3bf60e69d5087 to your computer and use it in GitHub Desktop.
Deutsch's Algorithm
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"# Deutsch's Algorithm\n",
"%matplotlib inline\n",
"from qiskit import *"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 337.12x204.68 with 1 Axes>"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Step 0: prepare the superposition\n",
"prep_circuit = QuantumCircuit(2, 1)\n",
"prep_circuit.x(1)\n",
"prep_circuit.h([0, 1])\n",
"prep_circuit.barrier()\n",
"prep_circuit.draw(output=\"mpl\")"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAALIAAACoCAYAAABEx7SVAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAHfUlEQVR4nO3dX0jTexjH8Y9mWtAfkmFRQ2vWyo0UkiKMMu9mBF30RwoiS0j8E1Q359yohCDnVLSICjkQdKWQsvCmCAJdxrpQIjCxBrGSRZRFXRglVJ6LlaVmTu3b1z3P53U5tZ7izZfftt98koaHh4dBlOCSbQ9A9DswZBKBIZMIDJlEYMgkAkMmERgyicCQSQSGTCIwZBKBIZMIDJlEYMgkAkMmERgyicCQSQSGTCIwZBKBIZMIKbYHoJl59OjRpN9z8eJFVFdX//J71q1b97tGsoInsgKXLl2yPYJxDJlEYMgkAkNWoLW11fYIxjFkEoEhK7Bnzx7bIxjHkEkEhkwiMGQFqqqqbI9gXBJ/G2dii+edvXjwnT2a9bZt22Z7BOMYsgIDAwO2RzCOIZMIDFkBj8djewTj+GQvwfHJXgxPZAVqa2ttj2AcQ1agpaXF9gjGqQv5y5cvOHv2LNasWYN58+YhLy8PwWAQa9euxdGjR22PR9Ok7qNOZWVlCAQCqKmpQX5+PkKhEPbv34+BgQGcPHnS9ng0TapCbm5uxtWrV9HR0YHCwkIAQFFREe7fv49AIIANGzZYntCMYDBoewTjVF1aNDQ0wOfzjUT8zerVqzF37lzk5uYCAJ4+fYrCwkK43W6sX78enZ2dNsb9bXp7e22PYJyaEzkajeLhw4c4ceLEuK/19/fD6/UiLS0NAFBeXo6SkhJUVlYiFAph7969iEQiSE1NNTJbUlLStH/2Z/+esfx+/6Tf5/f7pz2DKVN5ZVjNiRyNRgEAy5YtG/X4hw8fEAwGRy4rXr9+jbt376KsrAwAUFBQgOXLl6O9vf3PDkxTouZEdjgcAIBwOIwdO3aMPH769Gm8ePEC+fn5AGKn89KlS0dOZwBYtWoVnj17Zmy2mbwnFc8bIn6/f9JXZM6dOzftGWYDNSG7XC7k5uaioaEB6enpWLFiBVpbW3Hjxg0AGAlZolOnTtkewTg1lxbJycloaWmB1+tFRUUFDh8+DIfDgaqqKsyZM2fkiV5mZiZevnyJoaGhkZ+NRCLIysqyNfqM7du3z/YIxqkJGQDcbjfa29vx/v179Pf3o76+Hj09PfB4PJg/fz6A2CXIli1bcOXKFQBAKBTC8+fPUVRUZHP0GcnJybE9gnFqLi0m0t3djc2bN496rLGxEaWlpTh//jxSU1PR3Nxs7BUL+j1Uhzw4OIhwOIzKyspRj7tcLty5c8fSVDQdqkNesGABPn/+bHsM47Zv3257BON4P3KC4/3IMaqe7GlVUVFhewTjGLICHR0dtkcwjiGTCAyZRGDICvT19dkewTiGrMC1a9dsj2AcQ1agrq7O9gjGMWQSgSGTCAxZgcuXL9sewTiGrIDX67U9gnEMWYGxnxqXiCGTCAxZgY0bN9oewTiGrEBXV5ftEYxjyCQCQyYRGLICXKpOlCAYsgJcqk6UIBgyicCQFeBSdZr1+HstYngiK8Cl6iQCl6oTJQiGrACXqtOsxyd7MTyRFeBSdRKBS9UF4lJ1mdT9xnouVZdJVchcqi6XqkuLeJeq19bWwu12Izk5WcRN6VyqLshUlqr7fD6UlpbiyJEjf2Q2LlX/uam8MqwqZGDiperFxcUjjxUUFPzR2Wjm1IQc71J1G7hUfebUhMyl6rKpebIX71J1iTQsVVdzIgPfl6r/6ODBg6OWqkuUk5Mjfo+ImhN5It3d3eMuK2pqauB0OnHv3j2Ul5fD6XTiyZMnliakeKgO+dtS9bFvhNTX1yMajWJoaAhv3rxBNBpFdna2pSkpHqouLcbiUnU5eD9yguP9yDGqLy204FJ1EoFL1YkSBEMmERiyAtLfDAEYsgpcqk4icKk6UYJgyCQCQ1aAS9VJBC5VJxG4VJ0oQTBkEkH1/cgSxHP7ZV1dXcLfpjkZ3o9MIvDSgkRgyCQCQyYRGDKJwJBJBIZMIjBkEoEhkwgMmURgyCQCQyYRGDKJwJBJBIZMIjBkEoEhkwgMeYy2tjbs3LkTGRkZSEtLQ1ZWFg4cOICenh7bo9Ev8BMiX3369AmHDh1CU1MTMjMzUVxcjEWLFiEcDuPmzZtoa2uDz+ezPSZNgJ/Z++rYsWNoampCdXU1/H4/UlK+/9dEo1EsXrzY2N/997//GfuzE9k/f/16W+uPGDKAzs5ONDY2wufz4cKFC+OWnDudTkuTUbx4aQFg9+7dCAQCePDgAfLy8myPQ9PAkAEsXLgQDocDkUjEyt/PS4ufm8qlhfpXLd69e4fBwUGsXLnS9ig0A+pP5Ldv3yI9PR0ejwe9vb22x6FpUn8iL1myBC6XC319fbh9+/a4rz9+/NjCVDRV6k9kILZjo6SkBCkpKdi1axeys7Px6tUrhEIheDweXL9+3faINAmG/NWtW7dw5swZdHV14ePHj8jIyMCmTZtw/PhxbN261fZ4NAmGTCKov0YmGRgyicCQSQSGTCIwZBKBIZMIDJlEYMgkAkMmERgyicCQSQSGTCIwZBKBIZMIDJlEYMgkAkMmERgyicCQSQSGTCIwZBKBIZMIDJlEYMgkAkMmERgyicCQSYT/AVNJSxWNpeTxAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 216.72x204.68 with 1 Axes>"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Step 1: send input to blackbox. There are four possible black boxes\n",
"# f0: f(0) = 0 and f(1) = 0, f is constant\n",
"f0_circuit = QuantumCircuit(2, 1)\n",
"f0_circuit.barrier()\n",
"f0_circuit.draw(output=\"mpl\")"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 276.92x204.68 with 1 Axes>"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# f1: f(0) = 0 and f(1) = 1, f is balanced\n",
"f1_circuit = QuantumCircuit(2, 1)\n",
"f1_circuit.cx(0, 1) # the second bit only becomes 1 when input is 1, hence CNOT gate\n",
"f1_circuit.barrier()\n",
"f1_circuit.draw(output=\"mpl\")"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 337.12x204.68 with 1 Axes>"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# f2: f(0) = 1 and f(1) = 0, f is balanced\n",
"f2_circuit = QuantumCircuit(2, 1)\n",
"f2_circuit.x(1)\n",
"f2_circuit.cx(0, 1) # the second bit only becomes 1 when input is 0, hence NOT with CNOT gate\n",
"f2_circuit.barrier()\n",
"f2_circuit.draw(output=\"mpl\")"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 276.92x204.68 with 1 Axes>"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# f3: f(0) = 1 and f(1) = 1, f is constant\n",
"f3_circuit = QuantumCircuit(2, 1)\n",
"f3_circuit.x(1) # f is 1 regardless\n",
"f3_circuit.barrier()\n",
"f3_circuit.draw(output=\"mpl\")"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 276.92x204.68 with 1 Axes>"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Step 2: apply Hadamard and measure it\n",
"measure_circuit = QuantumCircuit(2, 1)\n",
"measure_circuit.h(0)\n",
"measure_circuit.measure(0, 0)\n",
"measure_circuit.draw(output=\"mpl\")"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAfAAAACoCAYAAAAfBrzIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAV40lEQVR4nO3deXAUdd7H8c/M5CJyGIgJC4QjgUASCSuH4kWC6xEpXSnEsOijJcLKRqgV9lC36lnUh0e8Dc8qh/tgwVOFS0kSXLVKVsUlAR7cfYIohshhSDBEYwjIlQCBJPP8kSUwQO6edP8y71dVqkxPz+RD+a3+TPf0dLu8Xq9XAADAKG67AwAAgLajwAEAMBAFDgCAgShwAAAMRIEDAGAgChwAAANR4AAAGIgCBwDAQBQ4AAAGosABADAQBQ4AgIEocAAADESBAwBgIAocAAADUeAAABiIAgcAwEAUOAAABqLAAQAwEAUOAICBguwOAJhi9+7dLa7zxhtvaO7cuc2uM2LECKsiwUGYD3Q29sABCy1ZssTuCHAw5gNWosABADAQBQ4AgIEocMBC2dnZdkeAgzEfsBIFDgCAgShwwEJTp061OwIcjPmAlShwAAAMxPfADTHvbXv+7uIH7Pm7AKxlxzako9sPl8tlTZA28nq9tvzdtmIPHLDQnDlz7I4AB2M+YCUKHLBQS1fZQmBjPmAlChyw0IQJE+yOAAdjPmAlChywUGVlpd0R4GDMB6xEgQMAYCAKHLBQYmKi3RHgYMwHrMTXyAAL5eTk2B0BDsZ8+JfH41FCQoL69u0rr9er8vJy7dmzR3V1dZddPyIiQtOnT9fSpUs7Oak12AMHLLRgwQK7I8DBmA/rBQUFacqUKfr444914sQJFRQU6JNPPtGGDRtUWFio48ePa/369brnnnvk8XganxcREaENGzZoyZIlmjdvno3/gvajwAELZWVl2R2hS6uukTbvkd7fLn28U6o4bneitmE+rDV+/HgVFBQoJydHt912m7p166Z9+/bp008/1aeffqqSkhKFh4crLS1Nf/3rX7Vjxw6NHTu2sbxHjx6tb775RmvXrrX7n9IuAVfg9fX1euWVVzRs2DCFhYVp1KhRysvL0/Dhw/Xoo4/aHc8yK+b2086NK3yWeb1eLZvVU0X579qUCmgfr1f621fSgnVSzjbp77ukD3dIz38gvZUnnT5rd8Kux+nbkN/97nfasmWLRowYoaKiIv36179WZGSkhg4dqltvvVW33nqrYmNjFRUVpfnz56ukpERJSUn67LPPtGPHjsbyTk1N1ffff2/3P6ddAq7AZ86cqYULF2r27Nlav3690tPTNX36dBUXF2vMmDF2x7NE1Y/fqfpoua4a9FOf5ccOFuvM6ROKjh1rUzKgfT7aKf2tQKqrv/SxgjLpv3Ol+ss8hvZx+jbkiSee0MsvvyyXy6Xnn39eV199tV5//XUdPnz4knUrKyu1ePFiJSUlacmSJQoKClJMTIwqKyuNLm8pwE5iW7NmjVatWqXc3FylpKRIkiZOnKjt27dr3bp1Gj16tM0JrVFRnC+X26M+A672WX6odIfCe0WrR58Ym5J1fXl5eXZH6HKqa6RPdja/zr6D0q7vpaQBnZOpvUyZDydvQ26++Wa9+OKLqq+v10MPPaS3327dRd7DwsJ0/fXXN/7eu3dvDRgwwOgCD6g98EWLFiktLa2xvM8ZOnSogoODlZycLEnav3+/UlJSFB8fr5EjR2rz5s12xG23iuJ8RfSNV1BImM/yytIdihrC3rc/FRYW2h2hy9m+//J73hdyuaR/7OuUOB1iynw4dRsSGhqqlStXSpIWLlzY6vK++DPvpUuXyuPxaNWqVQoKMnc/1tzkbVRWVqadO3dq/vz5lzxWWlqqpKQkhYaGSpJmz56tadOm6bHHHtPWrVt13333qaSkRCEhIX7J1po77jy+uvV3x6koztfRiiK9+atIn+Vna6o09u4/WJ4tUFxudi6WmZnZ4nqZmZlWRQoIN057QWPu+r1crqb3N7xe6dMtX2hWqn1H0Zw+H3ZsQ6zefqSnpysuLk6FhYV67rnnWvWci8s7NTVVhw8f1m233aaEhARNnjxZ2dnZfs3dFm25E1pAFbgk9e3b12f5qVOnlJeXpzvvvFOSdOjQIW3ZskXvv/++JOmGG25Qv379tHHjRt1xxx2dG7qdKkq26bopzyjhpod8lr/9h5GKZg8chjlz6liz5S1J9fV1qjl5pJMSdX1O3YZkZGRIkl599VWdPdvymYuXK+9zh8wXL16sJUuWKCMj45ICN0XAFHhkZMM7yb1792rSpEmNy1966SWVl5c3nsBWWlqq6Ojoxr1xSRoyZIi+/fZbv2VrzTuu1t7L9+gPRaqpPqJByXeoR58BvstPHlV07DjLswWK3bt3t7hOZmZmi99meO2116yKFBAOHpcWfdD8Om63R795+BblPGffvDp9PuzYhnR0+3HhnnD37t113XXX6ezZs3rnnXdafG5z5S1Jq1ev1uuvv66bbrpJISEhOnPmjGW5O0vAFHhsbKySk5O1aNEi9e7dW/3791d2drY+/PBDSeoyZ6BXFOcrKDRcVw0c5bO8/Jut6t4nRuG9omxKFhieffZZuyN0OVE9peQY6asDl3/cJalHN2ns4M5M1T4mzIdTtyGjRo2S2+3Wl19+qZMnTza7bkvlLUnHjx/Xnj17lJCQoJEjR+rzzz/3Z3y/CJiT2Nxut7KyspSUlKSMjAzNmDFDkZGRmjNnjjweT+MJbAMHDlRFRYVqamoan1tSUqJBgwbZFb1NKorzFT1knNwe3/dm5UWfcfi8E6Snp9sdoUu6/3ppaHTDf1/86WSPbtJjP5NCgzs9VpuZMB9O3Yb0799fkrRvX/NnK7amvM8pKiqSJPXr18/asJ3E5TXlWIGfPPjgg9qxY4e++uqrxmW33367Jk+e3HgS29SpU7V//36/ncTWGq09/GW1xQ/Y83edqDWHSBMSErRr165m1xkxYoRVkQJKfb20q1z6577ze+Pp10pjBjujvJ0+H3ZsQzq6/bjwELrH41F4eLgk6cSJE00+JyYmRnl5eaqtrW3xe949e/aU1+tVdXW16i+4kIAptRgwh9Cbsm3bNo0fP95n2fLly/Xwww9r8eLFCgkJ0Zo1a2wtbwCS2y0l9W/4OVdGNwyzNxM6T11dXbPFfc6BAweUmpqq2traFr/jffy4YdfivUhAF3hVVZX27t2rxx57zGd5bGysNm3aZFMqAEBHlJaW2h2hUwR0gXfv3r3J28wB7ZGammp3BDgY8wErBcxJbEBnWLZsmd0R4GDMB6xEgQMWOnehCeBymA9YiQIHLJSbm2t3BDgY8wErUeAAABiIAgcAwEAUOGChli7SgcDGfMBKAf01MpNwRTQzrF271ojLZcIeds6HiduQ9lwR7akX/+zz+wtPNn/zGJOxBw5Y6Omnn7Y7AhyM+YCVKHAAAAxEgQMAYCAKHLDQ0qVL7Y4AB2M+YCUKHLBQUlKS3RHgYMwHrESBAxZKSUmxOwIcjPmAlShwAAAMRIEDFho3bpzdEeBgzAesRIEDFsrPz7c7AhyM+YCVKHAAAAxEgQMAYCAKHLBQdna23RHgYMwHrESBAwBgIAocsNDUqVPtjgAHYz5gJQocAAADcT9wQ4R8st6Wv3vmtjs79Px5b1sUpA1MvO9xR5k6HwDajz1wwEJz5syxOwIcjPmAlShwwEJz5861OwIcjPmAlShwwEITJkywO0KXVlMrlR4+/3vVafuytAfzASvxGThgocrKSrsjdDnVNdI/90n5JdIPxySv9/xj/54jXRkuJcdIN8ZL0T3ty9kazAesRIEDcKR6r7Rlr/TBF9LZuqbXO3pS2rSn4ef6odI9o6Ww4M7LCdiFAgcslJiYaHeELuH0WWnlJmnPD2173mdF0u5yafZEqW8v/2TrCOYDVuIzcMBCOTk5dkcw3pla6c2NbS/vc45US298IlUctzaXFZgPWIkCByy0YMECuyMY74MvpJIWPipe/EDz3/evqpH+Z7NU28yhdzswH7ASBQ5YKCsry+4IRtt3UNq815rX+v6otKHQmteyCvMBKwVcgdfX1+uVV17RsGHDFBYWplGjRikvL0/Dhw/Xo48+anc8IKBZXbi5uxu+egZ0RQFX4DNnztTChQs1e/ZsrV+/Xunp6Zo+fbqKi4s1ZswYu+NZwnvqlM7e9wvVb9pyfllNjWrn/Va1//GcvPX1NqZr3oq5/bRz4wqfZV6vV8tm9VRR/rs2pepanDofh6uk3d9b+5qnz0pffGvtawJOEVBnoa9Zs0arVq1Sbm6uUlJSJEkTJ07U9u3btW7dOo0ePdrmhNZwdesm99R7Vff2X+S6+Uapvl51//m8FBwsz1NPyOV25vu2qh+/U/XRcl016Kc+y48dLNaZ0ycUHTvWpmStl5eXZ3eEFjl1Pr75QfK2vFq7Xnd8nB9euB1MmA+Yw5lbcj9ZtGiR0tLSGsv7nKFDhyo4OFjJycmSGk40iY+Pl9vtVnZ2th1RO8z987ulH4/Iu/l/Vbf4dXkPHZLnmQVyhTj3C7IVxflyuT3qM+Bqn+WHSncovFe0evSJsSlZ6xUWOuxD1yY4cT4O/Oif173wym12M2U+YIaA2QMvKyvTzp07NX/+/EseKy0tVVJSkkJDQyVJaWlpevjhh/XII490SjaXy9XiOsEff9i21+wWJvd996ruldekiCsVtPhVua4I90u25jy+uvX7VBXF+YroG6+gkDCf5ZWlOxQ1pPV73x3N3JTLzc7FMjMzW1wvMzPTqkiNTJ2PC939m/cUO/rnPstaurNcU49feBe87yqr5HL16GC6ljl5PgLJky+86fO7v7YH/uL1tn6bGVAFLkl9+/b1WX7q1Cnl5eXpzjvP3xbxhhtu6NRsfnX6tDzT0uWKiLA7SYsqivN1tKJIb/4q0mf52Zoqjb37Dzal6uIcNR/+2dC6/PS6gN0CpsAjIxtKYe/evZo0aVLj8pdeeknl5eW2nsDWmndcbb3fc/2Gv6v+nbVy3XG76t59T64772jXO9G2vBu8nLbcD7yiZJuum/KMEm56yGf5238Yqeg27IF3NHNTdu/e3eI6mZmZLX6b4bXXXrMqUiNT5+NCa/7RcM3zCzU1P+f2vFszX1F9rvDbTFzIyfMRSJ568c8+v3fG/3u7BEyBx8bGKjk5WYsWLVLv3r3Vv39/ZWdn68MPGw49dpUz0CWp/v/yVffGEnn+4xm5hg1T7UMz5N20Wa4U594J6egPRaqpPqJByXeoR58BvstPHlV07Dgb07Xes88+a3eEFjl1PgZESP/0w+vG9PbDi7aTCfMBcwTMSWxut1tZWVlKSkpSRkaGZsyYocjISM2ZM0cej6fxBDbT1Rd+rbpFL8jz+9/KnTzy/Gedq9c4+utjFcX5CgoN11UDR/ksL/9mq7r3iVF4ryibkrVNenq63RGa5eT5iPPT/+JYB42O0+cDZgmYApek+Ph4bdy4UdXV1SotLdXChQtVUFCgxMREdevWze54HeYt2a+6Bc/IM/uXct94/nN898/vko4dk3fTZhvTNa+iOF/RQ8bJ7fE9KFRe9FmbDp/bLSEhwe4ITXL6fPSLkAZFtrxeWwS5pXFDrH3NjnDyfMA8AXMIvSnbtm3T+PHjfZb98Y9/1MqVK1VZWamCggLNmzdPeXl5iotzyJdJm+AaMljBOWsvXR4WpuC1f+n0PG0x4d8u/7nfLTOWdXKSrss1xPnzcUuCtNLC9xHXxUlXhFr3eoCTBNQe+MWqqqq0d+/eSy7gsnDhQpWVlammpkaHDx9WWVmZ48sb6AqSYxp+rHBluHTXT1teDzBVQO+Bd+/eXXV1DrtdEYyWmppqdwSjuVzSfdc23Ijk0Imm12vp7PMgj/TgjVK3EGvzdRTzASsF9B44YLVlyzjk31E9wqQ5P5Oierbv+SFB0i9T/HdSXEcwH7ASBQ5YKCMjw+4IXULEFdJv06SbhrXteXFR0hOTpOE/8U+ujmI+YKWAPoQOWC03N9fuCF1GaLA09Vpp/FBpy15p+37pzGU+8XKpobBvipcS+0tuB194jfmAlShwAI42oLf0i/ENn43/cEz6/kjDPb6D3NJVPRsuABPq3Hv0AH5DgQMwgsct9Y9o+AHAZ+CApXbt2mV3BDgY8wErUeCAhdauvfRCKcA5zAes5PJ25Vu1ABZqzd2mEhISWtzLGjFihFWR4CDMhzNcfDeyF55s/u5vJmMPHAAAA1HgAAAYiAIHLLR06VK7I8DBmA9YiQIHLJSUlGR3BDgY8wErUeCAhVJSUuyOAAdjPmAlChwAAANR4AAAGIhLqQKt1Jrv5z799NN8jzdAMR/obFzIBQDQZXAhFwAA4GgUOAAABqLAAQAwEAUOAICBKHAAAAxEgQMAYCAKHAAAA1HgAABIys3NVVJSkoYOHapZs2aprq7O7kjNosABAAGvvr5es2bNUlZWloqKinT8+HGtXr3a7ljNosABAAEvPz9f/fr1U2JioiRp5syZysnJsTlV87gWOgDAWO9v2KqSA+VNPv5fK8+X8LDB/TVp4vjLrldWVqaYmJjG3wcOHKgDBw5YF9QPKHAAgLHGjIzXZ5/vVFM39Sg/eFiS5Ha59Iu7b2nydUy8LQiH0AEAxuofHamxyS3f4W386ERFR0Y0+XhMTIzPHndpaakGDBhgSUZ/ocABAEa7fcJYhYYEN/l4t7BQ/ezGMc2+xtixY1VWVqavv/5akvTWW29pypQplua0GgUOADBajyvCNfH6a5p8/NYbx+iKbmHNvobH49GKFSs0depUxcXFqXv37nrwwQetjmop7gcOADDe2dpaZa7I0o/HTvgsv6r3lZr3yFR5PF1vf7Xr/Ys66L333tNdd92lqKgohYaGatCgQbr//vtVUFBgdzQAQBOCg4Iue4b5XbeM75LlLVHgjWpra/XAAw9o8uTJKigo0JQpU/T444/rmmuuUU5Ojr777ju7IwIAmpEUP1hDYn7S+Hv8kBgNjxtoYyL/4hD6v2RkZGj58uWaO3euMjMzFRR0/ht2ZWVl6tWrl3r06OGXv/3Ui3/2y+sCAMzywpOPtnpdvgcuafPmzVq+fLnS0tL0pz/9SS6Xy+dxp3+VAAAQeNgDl3Tvvfdq3bp1+vLLLzVq1Ci74wAAOuBE9Um53e4Wzzw3HQUuqUePHoqMjFRJSYktf59D6AAAqW2H0AP+JLajR4+qqqpKgwcPtjsKAACtFvB74EeOHFHv3r2VmJiowsJCu+MAANAqAb8HHhERodjYWO3atUsbNmy45PE9e/bYkAoAgOYF/B64JK1du1bTpk1TUFCQ7rnnHsXFxengwYPaunWrEhMT9e6779odEQAAHxT4v3z00Ud6+eWXlZ+fr9OnTysqKkrXXnut5s2bp5tvvtnueAAA+KDAAQAwUMB/Bg4AgIkocAAADESBAwBgIAocAAADUeAAABiIAgcAwEAUOAAABqLAAQAwEAUOAICBKHAAAAxEgQMAYCAKHAAAA1HgAAAYiAIHAMBAFDgAAAaiwAEAMBAFDgCAgShwAAAMRIEDAGAgChwAAANR4AAAGIgCBwDAQBQ4AAAGosABADAQBQ4AgIEocAAADESBAwBgoP8HWB32pi9LTS0AAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 638.12x204.68 with 1 Axes>"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# An example of what the assembled circuit looks like\n",
"(prep_circuit + f2_circuit + measure_circuit).draw(output=\"mpl\")"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"# Now we simulate for each function, to do so we create an auxiliary function that runs it\n",
"def simulate_circuit(prep, blackbox, measuring):\n",
" \"\"\"Returns the counts of the circuit that is combination of the three circuits\"\"\"\n",
" circuit = prep + blackbox + measuring\n",
" simulator = Aer.get_backend(\"qasm_simulator\")\n",
" job = execute(circuit, simulator, shots = 2**16)\n",
" result = job.result()\n",
" count = result.get_counts()\n",
" return count"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"# Recall that the measurement is 1 if f is balanced, and 0 if f is constant"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 504x360 with 1 Axes>"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# For f0, we expect only 0s in measurement because it is constant\n",
"count_f0 = simulate_circuit(prep_circuit, f0_circuit, measure_circuit)\n",
"visualization.plot_histogram(count_f0)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 504x360 with 1 Axes>"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# For f1, we expect only 1s in measurement because it is balanced\n",
"count_f1 = simulate_circuit(prep_circuit, f1_circuit, measure_circuit)\n",
"visualization.plot_histogram(count_f1)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 504x360 with 1 Axes>"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# For f2, we expect only 1s in measurement because it is balanced\n",
"count_f2 = simulate_circuit(prep_circuit, f2_circuit, measure_circuit)\n",
"visualization.plot_histogram(count_f2)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 504x360 with 1 Axes>"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# For f3, we expect only 0s in measurement because it is constant\n",
"count_f3 = simulate_circuit(prep_circuit, f3_circuit, measure_circuit)\n",
"visualization.plot_histogram(count_f3)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'qiskit-terra': '0.11.0',\n",
" 'qiskit-aer': '0.3.4',\n",
" 'qiskit-ignis': '0.2.0',\n",
" 'qiskit-ibmq-provider': '0.4.4',\n",
" 'qiskit-aqua': '0.6.1',\n",
" 'qiskit': '0.14.0'}"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# The results match our predictions!\n",
"# For purposes of reproducibility, the Qiskit version is\n",
"qiskit.__qiskit_version__"
]
}
],
"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