Skip to content

Instantly share code, notes, and snippets.

@IvanIsCoding
Last active December 28, 2019 10:23
Show Gist options
  • Save IvanIsCoding/e73a21c814f4288e188d4eec502c87e6 to your computer and use it in GitHub Desktop.
Save IvanIsCoding/e73a21c814f4288e188d4eec502c87e6 to your computer and use it in GitHub Desktop.
Deutsch-Jozsa's Algorithm
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"#Deutsch-Jozsa algorithm\n",
"%matplotlib inline\n",
"from qiskit import *"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"N = 4 # defining how many qubits will be used"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 337.12x385.28 with 1 Axes>"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Step 0: Prepare superposition state\n",
"prep_circuit = QuantumCircuit(N + 1, N)\n",
"prep_circuit.x(N) # working qubit starts with |1>\n",
"prep_circuit.h(range(N+1)) # Generate all superpositions\n",
"prep_circuit.barrier()\n",
"prep_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.92x385.28 with 1 Axes>"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Step 1: Send input to blackbox \n",
"# Here, we will experiment with 3 blackboxes\n",
"# The first is the constant function f(x) = 1\n",
"constant_circuit = QuantumCircuit(N+1, N)\n",
"constant_circuit.x(N)\n",
"constant_circuit.barrier()\n",
"constant_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.92x385.28 with 1 Axes>"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# The second is blackbox implements f(x) = x mod 2, which is a balanced function\n",
"mod2_circuit = QuantumCircuit(N+1, N)\n",
"mod2_circuit.cx(0, N)\n",
"mod2_circuit.barrier()\n",
"mod2_circuit.draw(output=\"mpl\")"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"# The third circuit implements a function that has period 4 and has values {1, 0, 0, 1}\n",
"# Before, we code the circuit, here is the representation\n",
"def blackbox_3(x):\n",
" if x % 4 == 0 or x % 4 == 3:\n",
" return 1\n",
" else:\n",
" return 0"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 397.32x385.28 with 1 Axes>"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"periodic_circuit = QuantumCircuit(N+1, N)\n",
"periodic_circuit.cx(0, N)\n",
"periodic_circuit.cx(1, N)\n",
"periodic_circuit.x(N)\n",
"periodic_circuit.barrier()\n",
"periodic_circuit.draw(output=\"mpl\")"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 457.52x385.28 with 1 Axes>"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Step 2: Apply Hadamard to all qubits and measure\n",
"measure_circuit = QuantumCircuit(N+1, N)\n",
"measure_circuit.h(range(N))\n",
"measure_circuit.measure(range(N), range(N))\n",
"measure_circuit.draw(output=\"mpl\")"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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XnsyVxhKBQDew3YPF0tJSdGWLVv0i1/8QqGhofrwww/1/PPP68EHH1Tfvn01bNgwzZgxQzt37lR0dLR+97vfadOmTbr//vu1bt06tWnTRllZWerfv79KSkpMfzsBIaDeZnTx4sWaP3++0tPTlZSUJEnq1auXNm7cqOXLl6tz586GE1qj8OgBFR3PV+OWndyWn/ghR+fOnFRkTFdDyQDAO9ju4WKvvfaannzySUnSokWL9Pzzz2vfvn2Xrbdo0SL9+te/Vp8+ffSHP/xB8fHxeu+99+R0OpWVlaV77rlHx48ftzt+wAqoPaVTp05Vv379ygtpmTZt2igkJESJiYk6duyY7r//fsXGxqpjx4669957tWfPHkOJr05BTqYcziA1im7vtvxw7mbVqRepuo2aG0pW82VkZJiOAFjOH+aa7R7KTJw4UU8++aTOnDmjIUOGaNiwYVcspBf76KOPNGDAAJ04cUJOp1MlJSX69a9/TSG1WcCU0ry8PG3btk2DBg267Gu5ublKSEhQrVq15HA4NG7cOGVnZ2vz5s26//77NWLECAOJr15BTqYaRMUqODTMbfmh3M1q0oq9Bd60fft20xEAy/nDXLPdgyR16dJFkyZNUklJiQYOHKglS5Z49Ljo6Gi9//77qlevng4dOiSn06nXX39doaGhXk6MiwXM4fu8vDxJUlRUlNvy06dPKyMjQ/3795ck1a9fX3369Cn/+u23367p06d7NZvD4ahynacWuDx+voKcTB0v2KM3n4hwW37+bKG6PvCc5dkCxfjx46tcJzU1tcr1UlNTrYp0zcrmyt9+zv6a2xdZMdfemulA2e49+8qb5a978ce+zFczv/766woODtbMmTP1f//3fx49puyiprJzSAcMGKD09HS1b99eTz75pF599VW39X3h+/Q3Lpdnv8sBU0ojIko3VNnZ2brvvvvKl0+fPl35+fkVXuQ0a9YsPfjgg7ZktErBvizd+tCLirvz527LFz7XQZHsMQBQA7HdQ5cuXXTbbbfp6NGjmjhxokePubSQlp1D+swzz2jVqlUaM2aMZs6c6XGpwrUJmFIaExOjxMRETZ06VQ0bNlSzZs2Ulpam1atXS9IVS+nkyZO1Z88effzxx17N5smwj1vo2XMd/36PzhYdU8vEvqrbKNp9+anjiozpZnm2QLFz584q10lNTa3y1mIzZ860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LDJC4XXClP/DkfKSIemyj/N/OKLoGxpfsZBKUvPmzd32jObm5io6OtormR0OhzontPUo85HjP+rmhFiv5KiuNjc2k8vl8ih3bKvoSgtpcXGxHn30UXXq1MmrexuDnE51uCnGo8yFRafU4aYYj543NDRUjzzyiFasWGF5ZqtQSgNAcnKyDh48qP3792v//v0KCgrS/v37df3115uOBgABx+Fw6Cd331bluX21QkN0z11dK/x6165dlZeXp2+++UaS9NZbb+mhhx6yNOvFYmOa66bWLapcr1f3Tro+vI7XclSH0+nUA71vr3K9enWvU49bO1a6zqhRo1S3bl29+uqrVsWrUOf2sWoWFVHlen2TblGt0JAKv37y5Enl5+dLKj2ndOXKlUpISLAsp9UopQAA2CyqcUPd2imu0nV639FF4XVqV/j1oKAgzZs3TwMHDlTr1q0VHh6u4cOHWx3VzX29usvprLhM178+XHd261Dpc4wePVrR0dEqLi5WdHS0UlJSrI7ppnXLpkqIvbHSdfr3vFWhIRXfouqzzz7T22+/raysLN18883q1KmTXnvtNYuT/ofT4aiyTDeLilDn9pXvkT558qQGDBigxMREJSYm6sKFC3r++eetjGopzimFXC6XT1+NBwA1UdGpM/r93L/rzNlzl32tUYPrNX7kIAUHBRlIVrlVH23QZ//edsWvPfrTPkr08HCynY4c+1Ez5y1RcUnJZV9r0bSJkn/2U5/8d3DRex9py86cK37tiWEDdGO0f93FoCrsKb3Ee++9p/vvv19NmjRRrVq11LJlSz366KPaunWr6Whe8/dVH+vDTzJNxwCAgHJdnTD1vqPzFb92X6/uPllIJan3HZ1VJ6zWZctvjI5Sh3atDCSqWqMG1+uOru2v+LX7e9/uk4VUkvr1vPWKc5B4U0yNK6QSpbTchQsXNGzYMD344IPaunWrHnroIT311FO6+eabtWzZMh04cMB0RK84WHBYm3fsldPJKACA3W7rnKCIBvXclrVp2UzxbVoaSlS1OrXDLjvX1SHp/t5Vnydr0t23d9Z1dcLclt2c0EYtmjYxlKhqDevV1V23JLotCw4KUr+etxpK5F3+8x5fXvbkk09q0aJFGjt2rFJTU93e/iwvL6/85rM1zb82bFRYrdAK/4IEAHhPcFCQ7ru7u/667ANJZRdBdffpcidJt3SK0+cbv9EPR0pvEdW5Q6yio3z7PthhtUJ1713dtOKDTyVJIcFB6tfjFsOpqtazeydlbdmpk0WnJUl33dJBDevVNZzKOzinVKVvv9mjRw/169dPq1evtn1jMGHaXFtfDwAAwC6vPDvKo/U4Zitp1qxZkqRXXnnF5/86BQAAqInYUyqpbt26ioiI0L59+0xHsc3BgsN6bf5y9bmji/rc2cV0HAAIeAWHjykyooHpGNVy5PiPuj68jkKC/etsQH/8//qHI8cV0bCenDV451nAl9Ljx4+rQYMG6tmzp9atW2ckA4fvAQBATcXhew+VdfIffvjBcBIAAIDAFfB7SiWpdevW2rdvnz788EP16dPH7Wu7du1Su3btDCXzjr+t+FB7vz2oZ58YqtpXuNccAACA3fzrJBAvefnllzVkyBD1799fP/3pT9W6dWv98MMP2rBhg+Lj47VixQrTES1zsOCwtmfvV587ulBIAQCAz6CUSho8eLDq1aun3//+91q7dq1WrVqlJk2a6JZbbtG4ceNMx7PU0eMn1bB+Xe5LCgAAfAqH7wNQSUkJ7+AEAAB8CqUUAAAAxrG7DAAAAMZRSgEAAGAcpRQAAADGUUoBAABgHKUUAAAAxlFKAQAAYBylFAAAAMZRSgEAAGAcpRQAAADGUUoBAABgHKUUAAAAxlFKAQAAYBylFAAAAMZRSgEAAGAcpRQAAADGUUoBAABgHKUUAAAAxlFKAQAAYBylFAAAAMZRSgEAAGAcpRQAAADGUUoBAABgHKUUAAAAxlFKAQAAYBylFAAAAMZRSgEAAGAcpRQAAADG/X/D8V/agCmxdQAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 878.92x385.28 with 1 Axes>"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# An example of what the assembled circuit looks like\n",
"(prep_circuit + periodic_circuit + measure_circuit).draw(output=\"mpl\")"
]
},
{
"cell_type": "code",
"execution_count": 13,
"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": 14,
"metadata": {},
"outputs": [],
"source": [
"# Recall that all the measurements are 0 if f is constant, and at least one measurement is 1 if f is balanced"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAc0AAAFKCAYAAAB/8AR9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAbXElEQVR4nO3dfbiVdZ3v8fc3d2oeMAMnZLNlDDE7gaa5KrXtU0UmzjHTjubRGHLUwSbNnOmanKNOeNKaHkynGadkKsU6Zyx7sAdUTjMSpoABHcpqwCa1UIQYMXpQSPueP+4FrjZ7b34L9sNir/fruta11/27f/dvfe8/4HPdT787MhNJkrR9zxvuAiRJ2lUYmpIkFTI0JUkqZGhKklTI0JQkqVDHcBcwnPbdd9884IADhrsMSVILWbZs2frM/KPe1rV1aB5wwAEsXbp0uMuQJLWQiHikr3WenpUkqZChKUlSIUNTkqRChqYkSYUMTUmSChmakiQVMjQlSSpkaEqSVMjQlCSpkKEpSVIhQ1OSpEKGpiRJhQxNSZIKGZqSJBUyNCVJKmRoSpJUyNCUJKmQoSlJUiFDU5KkQoamJEmFDE1JkgoZmpIkFTI0JUkqZGhKI9C5557Li1/8YqZOndrr+szk4osvZvLkyRx66KEsX75867qbb76Zgw46iIMOOoibb755a/uyZcs45JBDmDx5MhdffDGZOej7IbUaQ1MagWbOnMmdd97Z5/o77riDBx98kAcffJAbb7yRCy+8EIAnnniC2bNns2TJEu6//35mz57Nhg0bALjwwguZM2fO1u36G18aqQxNaQQ69thjGTNmTJ/rb7/9dmbMmEFEcOSRR/Lkk0+yZs0a7rrrLqZNm8aYMWN40YtexLRp07jzzjtZs2YNGzdu5MgjjyQimDFjBl/96leHcI+k1mBoSm3o0UcfZf/999+63NXVxaOPPtpve1dX1zbtUrsxNCVJKmRoSm1owoQJ/PznP9+6vHr1aiZMmNBv++rVq7dpl9qNoSm1oVNOOYW5c+eSmSxevJgXvvCFjB8/nhNPPJH58+ezYcMGNmzYwPz58znxxBMZP348e++9N4sXLyYzmTt3Lm9+85uHezekIdcx3AVIGnhnnXUWCxYsYP369XR1dTF79mx+97vfATBr1iymT5/OvHnzmDx5MnvttRef/exnARgzZgxXXHEFr3rVqwC48sort95QdMMNNzBz5kyeeuopTjrpJE466aTh2TlpGEU7P2tVq9Vy6dKlw12GJKmFRMSyzKz1ts7Ts5IkFTI0JUkqZGhKklTI0JQkqZChKUlSIUNTkqRChqYkSYUMTUmSCg1paEbEsRHxtYh4NCIyImYWbHNIRHw7Ip6qb3dlRESPPqdHxI8iYlP971sGbSckSW1rqI80RwEPAO8Gntpe54jYG/i/wFrgVfXt3gtc2tDnKOBW4PPAYfW/X4yI1wx08ZKk9jakc89m5jxgHkBE3FSwydnAXsCfZuZTwAMR8TLg0oi4Nqs5AC8B7s7Mq+vbXB0RJ9TbzxrofZAkta9Wv6Z5FHBPPTC3uAvoBA5o6DO/x3Z3AUcPenWSpLbS6m852Q9Y3aNtbcO6h+p/1/bSZ7/eBoyIC4ALADo7O1mwYAEAkyZNYvTo0axYsQKAsWPHMmXKFBYuXAhAR0cH3d3dLF++nI0bNwJQq9VYu3YtH/r6gTuzj5KkAXDVmWtYuXIlUL0ztquriyVLlgAwatQoarUaixYtYtOmTQB0d3ezatUq1q1bB8DUqVO3ruvLsL3lJCJ+DbwrM2/qp898YHVmntvQNhF4BDg6MxdFxGbgvMyc29BnBjAnM/for4aBesvJ+dft9BCSpJ0055KBGWdXfsvJ48C4Hm3jGtb11+dxJEkaQK0emouAYyJiz4a2acBjwMMNfab12G4acN+gVydJaitD/ZzmqIg4LCIOq//2xPryxPr6D0bEvzZs8r+B3wI3RcTUiDgNeB+w5c5ZgOuB10XE+yLiZRFxGXAC4ElTSdKAGuojzRrwvfrnBcDs+ver6uvHA1vvqsnMX1IdNXYCS4F/BD4GXNvQ5z7gbcBM4PvADODMzFwyuLsiSWo3Q/2c5gIg+lk/s5e2HwDHbmfc24DbdrI8SZL61erXNCVJahmGpiRJhQxNSZIKGZqSJBUyNCVJKmRoSpJUyNCUJKmQoSlJUiFDU5KkQoamJEmFDE1JkgoZmpIkFTI0JUkqZGhKklTI0JQkqZChKUlSIUNTkqRChqYkSYUMTUmSChmakiQVMjQlSSpkaEqSVMjQlCSpkKEpSVIhQ1OSpEKGpiRJhQxNSZIKGZqSJBUyNCVJKmRoSpJUyNCUJKmQoSlJUiFDU5KkQoamJEmFDE1JkgoZmpIkFTI0JUkqZGhKklTI0JQkqZChKUlSIUNTkqRChqYkSYUMTUmSChmakiQVaio0I+KMiHhjw/KVEbE6Iu6KiPEDX54kSa2j2SPN92/5EhGvBP4G+Hvg+cDHBq4sSZJaT7Oh+cfAyvr3twBfzcwPA5cCry8ZICLeGREPRcTTEbEsIo7pp+9NEZG9fH7T0Of4Pvq8rMl9kySpX82G5tPA6Pr31wPfqn//ZUN7nyLiTOB64BrgcOA+4I6ImNjHJu8Gxvf4/BT4Qi99p/To9+D2d0eSpHIdTfa/B/hYRHwHqAFvrbe/FPh5wfaXAjdl5pz68kUR8SbgQuCynp0z85dUgQxARLwWmAS8vZex12Xm+tIdkSSpWc2G5ruAf6IKy1mZ+Vi9/STgrv42jIjdgSOAj/ZYNR84uvD3zwd+mJn39bJuaUTsAfwI+EBm3t1HHRcAFwB0dnayYMECACZNmsTo0aNZsWIFAGPHjmXKlCksXLgQgI6ODrq7u1m+fDkbN24EoFarsXbtWuDAwvIlSYNlzZo1rFxZXUGcMGECXV1dLFmyBIBRo0ZRq9VYtGgRmzZtAqC7u5tVq1axbt06AKZOnbp1XV8iMwdxFxp+KKITeBQ4LjMXNrRfCZydmQdvZ/sXAmuAyzLz+ob2g4ETgO8Cu1Mdhc6q/849/Y1Zq9Vy6dKlO7hHzzn/up0eQpK0k+ZcMjDjRMSyzKz1tq7ZI00iYk/gT6gOrz6VmU9GxIHAhsx8YudK7dc5VNdgb2lszMyVPHdzEsCiiDgAeC/V6WRJkgZEU6EZEZOpbv4ZBewDfBF4kuqa5D7Aef1svh54FhjXo30c8HjBz58PfKkwmJcAbyvoJ0lSsWbvnr2O6hrkOOCphvavUZ0i7VNmbgaWAdN6rJpGdRdtnyLi1cArgDn99WtwGNWpXEmSBkyzp2ePBo7MzGcjorH9Z0BnwfbXArdExP3AvVTXHjuBTwJExFyAzJzRY7sLgAczc0HPASPiEuBh4IdU1zTPAU4FTi/dKUmSSjR9TZNq9p+eJtLwaEhfMvPWiBgLXE71LOUDwPTMfKRhnD8QEaOpTrVe1cewuwMfAbqojn5/CJycmfO2V48kSc1oNjTnUz1r+Wf15YyIvYHZwDdLBsjMG4Ab+lh3fC9tv6K6htrXeB8GPlzy25Ik7YxmQ/NS4O6IWAnsCdwKTAbWAmcMcG2SJLWUpkIzMx+LiMOAs4BXUt1IdCPw+cx8qt+NJUnaxTV9TbMejp+pfyRJahvbDc2IOA34emb+rv69T5n55QGrTJKkFlNypHkbsB+wrv69LwnsNhBFSZLUirYbmpn5vN6+S5LUbpoKwYg4NiK2CdqI2C0ijh24siRJaj3NHjneDYzppX2f+jpJkkasZkMzqK5d9jQW+M3OlyNJUusqeuQkIr5W/5rA5yKi8S2duwFT2c6k65Ik7epKn9P8z/rfADbwh2842Qx8h/I3kEiStEsqCs3MfAdARDwMfDQzPRUrSWo7zU6jN3uwCpEkqdWVzAj0feC4zNwQET+g9xuBAMjMQweyOEmSWknJkeaXgC03/vQ3I5AkSSNayYxAs3v7LklSu3FaPEmSCpVc0+z3OmYjr2lKkkay0recSJLU9pq6pilJUjvzmqYkSYV8TlOSpEI+pylJUiGf05QkqVBTc89uEREHAv+1vvjjzPyPgStJkqTW1FRoRsRY4NPAKcDvn2uObwDnZuZ/9rmxJEm7uGbvnv1nYDJwDLBn/XMs8BJ8n6YkaYRr9vTsicDrM3NRQ9u9EfHnwLcGrixJklpPs0eavwB6ewH1bwFPzUqSRrRmQ/Mq4LqImLClof79Y/V1kiSNWDsyYftLgIcj4tH68gTgaeDFVNc8JUkakZywXZKkQk7YLklSISdslySpUFOhGRG7R8TsiFgVEU9HxLONn8EqUpKkVtDskeb/Av6U6m7Z3wPvBf6R6nGTdw5saZIktZZmQ/MMYFZmfgp4Frg9My8G/haYNtDFSZLUSpoNzXHAj+rffw3sU/9+J/DGgSpKkqRW1Gxo/gzorH//CdW0egBHAU8NVFGSJLWiZkPzK8Dr69+vB2ZHxEPATTixgSRphGtqwvbMvKzh+20RsRo4GliVmd8Y6OIkSWolO/QS6i0yczGweIBqkSSppTU9uUFEvDIi5kbE0vrnloh45WAUJ0lSK2l2coOzge8C44F59c844P6IOGfgy5MkqXU0e3r2auCKzLymsTEiLgM+AHxuoAqTJKnVNHt69o+AL/TS/kWqV4NtV0S8MyIeqk/Dtywijumn7/ERkb18Xtaj3+kR8aOI2FT/+5am9kqSpALNhubdwPG9tB8PfHt7G0fEmVSPqlwDHA7cB9wRERO3s+kUqlPCWz4PNox5FHAr8HngsPrfL0bEa7ZXjyRJzSh5CfVpDYt3AB+MiBrP3TV7JHAa8P6C37sUuCkz59SXL4qINwEXApf1vRnrMnN9H+suAe7OzKvry1dHxAn19rMKapIkqciOvoT6gvqn0SeAG/oaJCJ2B44APtpj1XyqZz37szQi9qCawu8DmXl3w7qj6r/d6C7gXdsZU5KkppS8hHqg3rm5L7AbsLZH+1rgDX1ss4bqKPS7wO7A24F/jYjjMvOeep/9+hhzv94GjIitgd/Z2cmCBQsAmDRpEqNHj2bFihUAjB07lilTprBw4UIAOjo66O7uZvny5WzcuBGAWq3G2rVrgQO3u/OSpMG1Zs0aVq5cCcCECRPo6upiyZIlAIwaNYparcaiRYvYtGkTAN3d3axatYp169YBMHXq1K3r+hKZOYi70PBDEZ3Ao8Bxmbmwof1K4OzMPLhwnHnAM5l5Sn15M3BeZs5t6DMDmJOZe/Q3Vq1Wy6VLlza/Mz2cf91ODyFJ2klzLhmYcSJiWWbWelu3I5MbnBwRCyNifUT8IiK+HRHTCzZdT/U6sXE92scBjzdRwhLgoIblxwdgTEmStqvZyQ3Oo5q0/T+AvwbeBzwEfCUizu1v28zcDCxj2/duTqO6i7bUYVSnbbdYNABjSpK0Xc1ObvDXwKWZ+Q8NbZ+OiGVUAfqZ7Wx/LXBLRNwP3AvMonrV2CcBImIuQGbOqC9fAjwM/JDqmuY5wKnA6Q1jXg8sjIj3AV8F3gKcAHQ3uW+SJPWr2dCcSPXC6Z7uYNu7YreRmbdGxFjgcqrnLR8ApmfmIw3jN9od+AjQRfW+zh8CJ2fmvIYx74uIt1HNSHQV1VHwmZm5pJkdkyRpe5oNzZ9Rnfr8SY/2NwKPbNt9W5l5A308mpKZx/dY/jDw4YIxb6P3R2MkSRowzYbmR4FP1N9qsuWa4WupHgW5aCALkySp1TT7EupPRcQ64C+pZgEC+DFwRmbePtDFSZLUSopDMyI6qE7DLszMrwxeSZIktabiR04y8xngy8DowStHkqTW1ezkBiuAyYNRiCRJra7Z0Hw/8LGIODUi9o+IMY2fQahPkqSW0ezds9+s//0y0DhpbdSXdxuIoiRJakXNhuYJg1KFJEm7gKLQjIi9qGbmORV4PvAt4OJ+XgwtSdKIU3pNczYwk+r07P+hmhXonwapJkmSWlLp6dnTgD/LzH8BiIjPA/dGxG6Z+eygVSdJUgspPdLcH7hny0Jm3g88Q/WGEkmS2kJpaO4GbO7R9gzN30gkSdIuqzT0AvhcRGxqaNsTmBMRv93SkJmnDGRxkiS1ktLQvLmXts8NZCGSJLW6otDMzHcMdiGSJLW6ZqfRkySpbRmakiQVMjQlSSpkaEqSVMjQlCSpkKEpSVIhQ1OSpEKGpiRJhQxNSZIKGZqSJBUyNCVJKmRoSpJUyNCUJKmQoSlJUiFDU5KkQoamJEmFDE1JkgoZmpIkFTI0JUkqZGhKklTI0JQkqZChKUlSIUNTkqRChqYkSYUMTUmSChmakiQVMjQlSSpkaEqSVMjQlCSpkKEpSVKhIQ/NiHhnRDwUEU9HxLKIOKafvqdFxPyI+EVE/CoilkTEKT36zIyI7OWz5+DvjSSpnQxpaEbEmcD1wDXA4cB9wB0RMbGPTY4D/g04ud5/HvCVXoL2t8D4xk9mPj3weyBJamcdQ/x7lwI3Zeac+vJFEfEm4ELgsp6dM/PdPZpmR8TJwKnAPX/YNR8fjIIlSdpiyEIzInYHjgA+2mPVfODoJoYaDWzo0faCiHgE2A34f8AVmfm9Puq4ALgAoLOzkwULFgAwadIkRo8ezYoVKwAYO3YsU6ZMYeHChQB0dHTQ3d3N8uXL2bhxIwC1Wo21a9cCBzZRviRpMKxZs4aVK1cCMGHCBLq6uliyZAkAo0aNolarsWjRIjZt2gRAd3c3q1atYt26dQBMnTp167q+RGYO4i40/FBEJ/AocFxmLmxovxI4OzMPLhjjL4APAVMz85F621HAS4EVVIH6bmA68IrMfLC/8Wq1Wi5dunQH9+g551+300NIknbSnEsGZpyIWJaZtd7WDfXp2R0WEacDHwHO3BKYAJm5CFjU0O8+qqPNi4CLh7pOSdLINZQ3Aq0HngXG9WgfB/R7PTIi3grcAszIzK/31zcznwWWAgfteKmSJG1ryEIzMzcDy4BpPVZNo7qLtlcRcQZVYM7MzNu29zsREcChwJodr1aSpG0N9enZa4FbIuJ+4F5gFtAJfBIgIuYCZOaM+vLbqALzr4CFEbFffZzNmflEvc/fAouBB4G9qU7JHkp1R64kSQNmSEMzM2+NiLHA5VTPUz4ATG+4Rtnzec1ZVDVeV/9s8W3g+Pr3fYAbgf2AXwLfA47NzPsHYx8kSe1ryG8EyswbgBv6WHd8f8t9bPMe4D0DUZskSf1x7llJkgoZmpIkFTI0JUkqZGhKklTI0JQkqZChKUlSIUNTkqRChqYkSYUMTUmSChmakiQVMjQlSSpkaEqSVMjQlCSpkKEpSVIhQ1OSpEKGpiRJhQxNSZIKGZqSJBUyNCVJKmRoSpJUyNCUJKmQoSlJUiFDU5KkQoamJEmFDE1JkgoZmpIkFTI0JUkqZGhKklTI0JQkqZChKUlSIUNTkqRChqYkSYUMTUmSChmakiQVMjQlSSpkaEqSVMjQlCSpkKEpSVIhQ1OSpEKGpiRJhQxNSZIKGZqSJBUyNCVJKmRoSpJUyNCUJKnQkIdmRLwzIh6KiKcjYllEHLOd/sfV+z0dET+NiFk7O6YkSTtiSEMzIs4ErgeuAQ4H7gPuiIiJffR/CTCv3u9w4IPAJyLi9B0dU5KkHTXUR5qXAjdl5pzM/HFmXgSsAS7so/8s4LHMvKjefw5wM/BXOzGmJEk7ZMhCMyJ2B44A5vdYNR84uo/Njuql/11ALSKev4NjSpK0QzqG8Lf2BXYD1vZoXwu8oY9t9gO+1Uv/jvp40eyYEXEBcEF98dcRsbKkeKkN7AusH+4ipB31z+8ZsKH+uK8VQxmaLSEzbwRuHO46pFYTEUszszbcdUitbChDcz3wLDCuR/s44PE+tnm8j/7P1MeLHRhTkqQdMmTXNDNzM7AMmNZj1TSqO157s6iP/ksz83c7OKYkSTtkqE/PXgvcEhH3A/dS3R3bCXwSICLmAmTmjHr/TwLviojrgE8BrwVmAmeVjimpmJctpO0Y0tDMzFsjYixwOTAeeACYnpmP1LtM7NH/oYiYDnyc6hGSx4CLM/NLTYwpqUD9er+kfkRmDncNkiTtEpx7VpKkQoamJEmFDE1JkgoZmpKIiGj47v8LUh/8xyGJzMz6XM5k5u+3tDeGqSTvnpXaXkTsB7wVeCVwMLAYuC0zFw1rYVILMjSlNhcR3wQmAz+mehb6aGAq8BPgQ8Atmfns8FUotY62m7Bd0nMi4nXAq4HDM3N1ROwJ7AFMAd4BXAmMoZp5S2p7hqbU3o4FfpCZqwEy82ngaeC+iHgAuAi4KiIWZObyYaxTagneCCS1t28Bh0TEm3quyMyNwN9RvfzguKEuTGpFhqbU3pYBdwD/EBHvi4gjIuK/NKwfBbwccC5nCW8EktpeROwPXAa8AdgAfJfqfbTPAkcBB2fmwcNXodQ6DE1JAETEocA5VHfPdgAvojo1e21m/mA4a5NahaEptaGI2AM4FDgN+BXwfaqXuz9eX38w8DCwOf1PQtrK0JTaUET8PVVgrqF6pOQAqlOytwN/5/topd55I5DUZiLi5cBM4FzgTZl5ILAf8AngJODfI+LPnUJP2pZHmlKbiYi/oQrLY+vLHZn5TMP6a6iOQl+XmY8NU5lSS/JIU2o/PwbGR8RkgMx8JiI66rMBAcwBfks1H62kBoam1H4WAs8A34iIMyJij8x8pj4bEJn5ELAbsGk4i5RakadnpTYUEZ3Ax4FDgNXA/cC/1b//BfA/gAMy8zfDVqTUggxNqU1FxFjgT4BpwCSq14K9CPg28KnM/JdhLE9qSYam1EYioovqNWAAvwF+BDxFFZqjqK5lrs/MJ4anQqm1GZpSm4iIC6keM3kFVTj+lOp07N1UL53++TCWJ+0SvBFIagP1U7HXUE1eMB44EvgMsBk4H/hs/flNfD5T6ptHmlIbiIiLgHMy8zW9rOsGPghMAF6dmeuHuj5pV+GRptQeNgOjI2IqVHPPRsTuAJn5HeBsqpdPv3H4SpRan6EptYfbgN8Dl0TE6MzclJmbI+J5AJn5M+BJoGs4i5RanaEpjXD1a5RPAJdTPV7yWER8OiKOqK+fGBHnUD2z+YXhq1RqfV7TlNpEROwDTKR6X+ZbgNfWVz0OBHBLZr5/eKqTdg2GpjSCRcSLgbcDfwmsp3om80ngO8Bi4PlUz23emZmrhqtOaVdhaEojWETcBEwBvk51inYM1WnYlwLrgMszc8mwFSjtYgxNaYSqX8v8FTA9Mxc2tE0EXgOcRzUT0BmZuXzYCpV2Id4IJI1cLwceonrcBICsPJKZXwD+G9Wp2v8+TPVJuxxDUxq5fkp1CvbjEXHQlsdLtsjMTcDNwEnDUZy0KzI0pREqM58C/ifwAmAuMCMi9o+IUQARsRdwHPDA8FUp7Vq8pimNcPVZgK4ATqF6s8ki4BfAG4A1wHmZ+YPhq1DadRiaUpuoP35yMnAq1ZR5DwBfzMx/H9bCpF2IoSm1oYh4Xmb+frjrkHY1hqYkSYW8EUiSpEKGpiRJhQxNSZIKGZqSJBUyNCVJKmRoSpJU6P8Dd2JnfHdMIJcAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 504x360 with 1 Axes>"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# For a constant function, we expect it to be all 0s\n",
"count_constant = simulate_circuit(prep_circuit, constant_circuit, measure_circuit)\n",
"visualization.plot_histogram(count_constant)"
]
},
{
"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 balanced, we expect at least one measurement to be 1\n",
"count_mod2 = simulate_circuit(prep_circuit, mod2_circuit, measure_circuit)\n",
"visualization.plot_histogram(count_mod2)"
]
},
{
"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": [
"# We try again with a balanced function to verify that at least one is zero\n",
"count_periodic = simulate_circuit(prep_circuit, periodic_circuit, measure_circuit)\n",
"visualization.plot_histogram(count_periodic)"
]
},
{
"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