From 1359472f72f775a48c8021f0876f01e1868743a5 Mon Sep 17 00:00:00 2001 From: "Davide Gessa (dakk)" Date: Sun, 16 Jun 2024 15:19:29 +0200 Subject: [PATCH] update bv notebook --- docs/source/example_bernstein_vazirani.ipynb | 149 ++++++------------- docs/source/index.rst | 1 + 2 files changed, 48 insertions(+), 102 deletions(-) diff --git a/docs/source/example_bernstein_vazirani.ipynb b/docs/source/example_bernstein_vazirani.ipynb index a7c4fee8..49beaeae 100644 --- a/docs/source/example_bernstein_vazirani.ipynb +++ b/docs/source/example_bernstein_vazirani.ipynb @@ -4,144 +4,117 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Bernstein Vazirani algorithm\n", - "Bernstein-Vazirani algorithm, first introduced in [Quantum Complexity Theory by Ethan Bernstein and Umesh Vazirani](https://epubs.siam.org/doi/10.1137/S0097539796300921), can be seen as an extension of the Deutsch-Jozsa algorithm. It showed that there can be advantages in using a quantum computer as a computational tool for more complex problems than the Deutsch-Jozsa problem." + "# Bernstein Vazirani algorithm" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### The Bernstein-Vazirani Problem \n", - "\n", - "We are given a black-box function $f$, which takes as input a string of bits ($x$), and returns either $0$ or $1$, that is:\n", - "$$f(\\{x_0,x_1,x_2,...\\}) \\rightarrow 0 \\textrm{ or } 1 \\textrm{ where } x_n \\textrm{ is }0 \\textrm{ or } 1 $$ \n", - "\n", - "The function is guaranteed to return the bitwise product of the input with some string, $s$. In other words, given an input $x$, $f(x) = s \\cdot x \\, \\text{(mod 2)}$. We are expected to find $s$. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### The Qlasskit implementation of Bernstein Vazirani Algorithm" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Defining Oracle with secret string =`14` which binary equivalent is `1110`" + "We first create an oracle embedding the secret number 14; we can do this in two equivalent ways:\n", + "- using `secret_oracle()` function\n", + "- writing the oracle from scratch in python" ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 3, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "from qlasskit import qlassf, Qint, Qint2,Qint4\n", + "from qlasskit import qlassf, Qint\n", "\n", "@qlassf\n", "def oracle(x: Qint[4]) -> bool:\n", - " s=Qint4(14)\n", - " return ((x[0]&s[0])^(x[1]&s[1])^(x[2]&s[2])^(x[3]&s[3]))\n", - " " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Printing the circuit formed in Qiskit draw format" + " s = Qint4(14)\n", + " return (x[0] & s[0]) ^ (x[1] & s[1]) ^ (x[2] & s[2]) ^ (x[3] & s[3])\n", + "\n", + "oracle.export(\"qiskit\").draw(\"mpl\")\n" ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 4, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] }, - "execution_count": 2, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "oracle.export(\"qiskit\").draw(\"mpl\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Using the predefined `BernsteinVazirani` algorithm function and passing the oracle in the function" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "from qlasskit.algorithms import BernsteinVazirani\n", + "from qlasskit.algorithms import secret_oracle\n", "\n", - "q_algo = BernsteinVazirani(oracle)" + "oracle = secret_oracle(4, 14)\n", + "oracle.export(\"qiskit\").draw(\"mpl\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Final Circuit with oracle and `BernsteinVazirani` applied to it" + "Now we can use `BernsteinVazirani` to discover the secret embedded in the oracle." ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 6, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] }, - "execution_count": 4, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ + "from qlasskit.algorithms import BernsteinVazirani\n", + "\n", + "q_algo = BernsteinVazirani(oracle)\n", "qc = q_algo.export(\"qiskit\")\n", "qc.draw(\"mpl\")" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Measuring and checking the results by giving `1024` shots the circuit formed. " - ] - }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 8, "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'0111': 1024}\n" - ] + "data": { + "image/png": "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PqiOHTtq/PjxGjhwoLp27aqgoCC5XC7OHAKoEqIQALzQmDFjtHjxYgUGBmrKlCnavn27Vq5cqc8//1zLly9Xx44dFRkZqR9//FHh4eEKCgqSxKVkAFXH5WMA8FLr16/XU089pQkTJmj69Ok6e/assrOztXbtWq1fv17ffvutzGazOnTooKFDh6pjx47q37+/goOD63rpAOohohAAvFhKSoreeOMNrVixQr/85S/ldDplMpl0+PBhdejQQVFRUbpy5YrOnj0rSdq1a5e6du1ax6sGUB9x+RgAvNiMGTO0f/9+TZ06Vffee6/atGkjSdqyZYtcLpcmTZqkRx99VGvXrtWmTZsIQgBVxplCAPBSTqdTZrNZx44dU1JSkjp37qzPPvtMknT//ffrwoULWrNmjdq3by+Hw6GioiL5+/vX8aoB1Fd8fwEAeCmz2SyXy6XY2FhNnTpVK1as0DvvvKMff/xRu3btUr9+/XT33XdLknx9fQlCALeFy8cA4MXcTxOPHj1ae/fu1bx585SVlSWz2ax+/frJYrEYZxQB4Hbwf0UAwMu57/KZOXOm2rRpo3/+85/q3bu37rvvPkl8DQ2A6sE9hQDghW7+Emr366+//lorVqxQTEyMXnjhhTpcIYCGhigEAC9w5coVnThxQq1atarQvYGFhYXy8/OTVDIgAaAquHwMAF7gvffe08iRIzV37lxt3LhRp06dUnFxscccl8uloqIiuVwu+fn56ezZsyoqKiIIAVQLzhQCgBeIjIzUqVOnZLFYFBISop49eyopKUn333+/WrdurdDQUI/5BQUFeu2113Tu3DktXLiQB00A3DaePgaAOnb48GHZbDb16NFDTz/9tL788ktt27ZNa9euVatWrZSYmKgBAwaoc+fOuuuuu9S4cWMdOHBACxYsUGJiIkEIoFoQhQBQxw4fPqyrV68qKSlJL7/8sh555BEdOnRI27Zt04YNG/T5559r6dKl6tChg/r166fBgwcrMzNTdrtdycnJdb18AA0El48BoI6tWLFCw4YN06effqphw4YZ4w6HQz/88IP27t2rf/3rX8rKytK3334rX19f477C8+fP1+HKATQkRCEA1DGXy6XvvvtOd9xxh2JjY0t9mrigoECHDx/WoUOHlJqaqi+//FLjx4/XX//61zpaNYCGhigEAC9WWiBOmDBB8+fP1+7du9W5c+c6WhmAhoYoBIB6wP1TdsePH9djjz2mCxcu6MSJE3W9LAANCI+sAUA94H7C+OTJk3I4HHrppZfqeEUAGhrOFAJAPeJyuZSbm6umTZsqICCgrpcDoAEhCgEAAMDlYwAAABCFAAAAEFEIAAAAEYUAAAAQUQgAAAARhQAAABBRCAAAABGFAAAAEFEIAAAASf8PSUulZO9VulMAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ @@ -155,34 +128,6 @@ "counts = result.get_counts(qc)\n", "\n", "counts_readable = q_algo.decode_counts(counts)\n", - "print(counts_readable)\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Plotting the histogram from results `counts_readable`" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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AABQhar16uObb75ZGzdurM6vAAAAQBWo1ig8dOgQF5kAAAB4gUqfU1gah8OhEydOKCEhQZ9//rn69+9f1V8BAACAKlbpKHQ9+7g0TqdTjRo10muvvVbZrwAAAEANqXQU9unTp8QoNJvNatSokbp3767x48eradOm17RAAAAAVL9KR2FycnIVLgMAAACexLOPAQAAUDUXmmzdulW7d+9Wdna2AgMDFR0drd69e1fFRwMAAKAGXFMUfvfddxo/frzS0tIkXbq4xHWeYWRkpOLj49WzZ89rXyUAAACqVaWjcP/+/YqLi9OFCxc0cOBAxcbGqkWLFsrMzNSmTZuUlJSkQYMGafv27erQoUNVrhkAAABVrNJR+MILL6igoEDr1q3T4MGD3bbNmDFDX3/9tYYMGaIXXnhBH3zwwTUvFAAAANWn0heaJCcna/jw4cWC0GXw4MEaPny4Nm3aVOnFAQAAoGZUOgptNpsiIiLKnBMRESGbzVbZrwAAAEANqXQUhoaGavv27WXO2bFjh0JDQyv7FQAAAKghlY7CIUOGKDk5WTNnztTFixfdtl28eFGzZ8/Wpk2bdM8991zzIgEAAFC9TE6n01mZN545c0a33HKLjhw5ouDgYPXo0UPNmjXTqVOn9P333+v06dNq06aNUlJS1Lhx46pet9fKzs5WUFCQbDabAgMDq+17JrxRbR8NAACq0NJp1fv55W2PSu8pDA4O1vbt2zV27Fjl5uZq3bp1io+P17p165STk6Px48dr+/btNRKErVu3lslkKvFP3759i83Pz8/XCy+8oMjISNWvX1+hoaGaOHGi/v3vf5f6HatWrVKPHj3k7++vRo0a6e6779auXbuq8VcBAADUnGu6eXVISIjeeecdLVmyRD///LPxRJOoqCj5+PhU1RrLJSgoSNOmTSs23rp1a7fXDodD99xzjxITE3Xrrbdq2LBhSk1N1bJly7RhwwZt375dTZo0cXvPSy+9pOeee07h4eH605/+pJycHH3wwQfq1auXNmzYwNNbAACA16vw4eOXXnpJeXl5mjNnTqnhV1BQoDlz5iggIED/8R//USULLYsr/I4ePXrVufHx8XrooYc0evRorVq1yngCy1tvvaXJkydr4sSJWrJkiTE/NTVVHTp0MA6FBwUFSZJ2796tW2+9VW3atNFPP/0ks7l8O105fAwAAC7nlYeP169fr1mzZik4OLjMPYH16tVTcHCwnn322Vp3n8KlS5dKkubNm2cEoSRNmjRJbdq00apVq/Trr78a4/Hx8SosLNSzzz5rBKEkRUdHa/To0frXv/6lb7/9tuZ+AAAAQDWoUBS+++67atSokaZOnXrVuX/+85/VuHFjxcfHV3pxFZGfn6+EhAS9/PLLWrx4sXbs2FFszsWLF7Vjxw61a9dO4eHhbttMJpMGDhyovLw8/fDDD8Z4cnKyJCkuLq7Y5w0aNEiStHnz5jLXlZ2d7fZHkux2u/GnqKhIklRUVFTieGFhodu4w+Eoc9xut5fr7wwAAHiew+Fw+//zwsLCMsdL64WyOqI8KnRO4XfffacBAwbI19f3qnN9fX01YMAAbd26tSJfUWmZmZkaP36821j37t31/vvvq23btpKkQ4cOyeFwKDIyssTPcI2npqbq9ttvN/65QYMGat68eZnzSzNv3jzNmTOn2HhSUpKuu+46SVKrVq3UpUsX7d27V8ePHzfmtGvXTlFRUUpJSdHp06eN8ejoaIWHh2vLli3Kyckxxnv27KmmTZsqKSlJ0l2lrgkAANQeWVlZ2rZtm/E6ICBA/fr1U3p6unbv3m2MN2nSRL169VJqaqoOHDhgjF+tI3bu3FmudVQoCk+ePKk2bdqUe35ERIQ+//zzinxFpYwfP1633367OnbsqAYNGujgwYP629/+phUrVqh///7at2+fAgICjKerXH4Y+HKu4+yXP4XFZrOpadOm5Z5/pWeeeUbTp083XmdnZyssLExxcXHG+13nI3bu3FkdO3Y05rrGe/TooctP/bRYLJKkPn36lDgeFxenNaV3KgAAqEVCQkJ05513Gq9dp7eFhYW5PQTENR4ZGWns8JKu3hHdunUr1zoqFIVms7lChybtdnu5L8C4FrNnz3Z7HR0drXfffVeStGLFCi1dutQtzGqSr69viXtWfXx8ip2XabFYjLC7nNVa8r+m0sZr+spvAABQeWazucReKm28tF6oaEcU+75yzfo/oaGh+umnn8o9/6efftLvfve7inxFlZo0aZIkGYewXXsIS9uz5zrf7/I9ia6rdco7HwAAwBtVKApvv/12bdy4sVy3fjl69Kg2btyoPn36VHZt1ywkJESSlJeXJ0lq06aNzGZzqecAusYvP+cwMjJSubm5yszMLNd8AAAAb1ShKPzzn/8su92u4cOHKysrq9R5Z86c0YgRI1RYWKjJkydf8yIry3UFsus+hn5+furRo4cOHDigY8eOuc11Op365z//KX9/f918883GeExMjCT938Ub7hITE93mAAAAeKsKRWHXrl01bdo07dq1Sx06dNCsWbO0adMmpaamKjU1VcnJyZo5c6Y6dOignTt36i9/+Yu6du1aXWuXJP3888+6cOFCieMzZsyQJN13333G+MSJEyVdugDk8os0lixZosOHD+v++++Xn5+fMT5+/HhZrVa99NJLboeRd+/erffff1/t27fXbbfdVuW/CwAAoCZV+IkmTqdTzz77rBYsWGDcF+/K7RaLRU8//bRefPFFtxtEV4fnn39ef/vb39SnTx+Fh4fL399fBw8e1Lp162S32/XMM8/o5ZdfNuY7HA7deeedxmPuYmJilJaWpk8//VStW7fWjh07ynzM3bBhw4zH3BUUFFT4MXc80QQAAFyutjzRpMJR6HLo0CHFx8fru+++M863a968uXr37q1x48a5XSpdnTZv3qz/+q//0o8//qhTp07pwoULCgkJ0S233KIpU6aUeNPp/Px8vfLKK1qxYoXS09PVuHFj3X333XrxxRfVrFmzEr9n1apVeuONN7R//37Vq1dPvXv31ty5cyu8J5QoBAAAl/P6KETlEIUAAOBytSUKq/8mggAAAKj1iEIAAAAQhQAAACAKAQAAIKIQAAAAIgoBAAAgohAAAAAiCgEAACCiEAAAACIKAQAAIKIQAAAAIgoBAAAgohAAAAAiCgEAACCiEAAAACIKAQAAIKIQAAAAIgoBAAAgohAAAAAiCgEAACCiEAAAACIKAQAAIKIQAAAAIgoBAAAgohAAAAAiCgEAACCiEAAAACIKAQAAIKIQAAAAIgoBAAAgohAAAAAiCgEAACCiEAAAACIKAQAAIKIQAAAAIgoBAAAgohAAAAAiCgEAACCiEAAAACIKAQAAIKIQAAAAIgoBAAAgohAAAAAiCgEAACCiEAAAACIKAQAAIKIQAAAAIgoBAAAgohAAAAAiCgEAACCiEAAAACIKAQAAIKIQAAAAIgoBAAAgohAAAAAiCgEAACCiEAAAACIKAQAAIKIQAAAAIgoBAAAgohAAAAAiCgEAACCiEAAAACIKAQAAIKIQAAAAIgoBAAAgohAAAAAiCgEAACCiEAAAACIKAQAAoDoQ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", - "text/plain": [ - "
" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ "plot_histogram(counts_readable)" ] } @@ -203,7 +148,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.3" + "version": "3.10.13" } }, "nbformat": 4, diff --git a/docs/source/index.rst b/docs/source/index.rst index 38d98af7..710f56b9 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -59,6 +59,7 @@ quantum annealers, ising machines, simulators, etc. example_grover_factors.ipynb example_simon.ipynb example_deutsch_jozsa.ipynb + example_bernstein_vazirani.ipynb example_unitary_of_f.ipynb example_big_circuit.ipynb