{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Bernstein–Vazirani Algorithm\n", "\n", "This notebook runs the Bernstein–Vazirani algorithm on a local simulator and a QPU on Amazon Braket. The Bernstein-Vazirani algorithm can find a hidden binary string with certainty after only one call to the quantum circuit. The hidden string is releaved by querying the oracle that is a superposition of all possible binary strings.\n", "\n", "The Bernstein–Vazirani problem is to find a hidden binary string given a black-box function that is promised to be the dot product of the input bitstring with the hidden string. It is an extension of the Deutsch-Jozsa algorithm where the function is restricted to being constant or balanced.\n", "\n", "Typically, we would need to query the classical function $n$ times where $n$ is the length of the string. However, if the function is encoded into a quantum circuit, we need to only query the function once to reveal the hidden string. See Ref. [1] for full details." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# References \n", "[1] [Ethan Bernstein and Umesh Vazirani (1997) \"Quantum Complexity Theory\" SIAM Journal on Computing, Vol. 26, No. 5: 1411-1473, doi:10.1137/S0097539796300921.](https://epubs.siam.org/doi/10.1137/S0097539796300921)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Run on a local simulator" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "from notebook_plotting import plot_bitstrings\n", "\n", "%matplotlib inline\n", "\n", "from braket.devices import LocalSimulator\n", "from braket.tracking import Tracker\n", "\n", "from braket.experimental.algorithms.bernstein_vazirani import (\n", " bernstein_vazirani_circuit,\n", " get_bernstein_vazirani_results,\n", " run_bernstein_vazirani\n", ")\n", "\n", "tracker = Tracker().start() # to track Braket costs" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "T : |0|1| 2 |3|4|Result Types|\n", " \n", "q0 : -H---C---H---Probability--\n", " | | \n", "q1 : -H-I-|-H-----Probability--\n", " | | \n", "q2 : -H---|---C-H-Probability--\n", " | | | \n", "q3 : -H-I-|-H-|---Probability--\n", " | | \n", "q4 : -H-Z-X---X----------------\n", "\n", "T : |0|1| 2 |3|4|Result Types|\n" ] } ], "source": [ "bv_circuit = bernstein_vazirani_circuit(\"1010\")\n", "print(bv_circuit)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "LocalQuantumTask('id':60947711-ce67-4736-b5a3-fc83217f302b)\n" ] } ], "source": [ "local_simulator = LocalSimulator()\n", "task = run_bernstein_vazirani(bv_circuit, local_simulator, shots=1_000)\n", "print(task)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "bv_results = get_bernstein_vazirani_results(task)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAHcCAYAAAAqQ4tyAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA6jklEQVR4nO3deVyVZf7/8fcB5Lgki0OCGklpqWQuYZJLqROJuZRTTaYUZpnVuCVjBWOC1Ji2uFSalmvWmLZqpeMS6c/GMBXDNiVLDacEJQ0UDZBz//7o4fl2RkA43pwDN6/n43EeD7nu5XNdovL2uu/7um2GYRgCAACwCB9vdwAAAMBMhBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAVbJ06VLZbDaXT9OmTdWnTx/9+9//du7XoUMHXXrpparoDS89evRQaGiozpw544muV4vly5dr9uzZ3u4GgD8g3ABwy5NPPqnXX39dy5Yt02OPPaajR4+qf//++uijjyRJcXFxOnTokD799NMyjz948KDS09M1ZMgQ+fn5ebLrpiLcADUP4QaAW26++WbdfffduueeezRx4kR9+umnqlevnt58801J0rBhw2Sz2bR8+fIyj3/zzTdlGIbi4uI82W0AdQDhBoApgoKC1KBBA+csTHh4uG644Qa98847KikpOWf/5cuXq1WrVoqOjj7vud944w117dpVDRs2VHBwsG644QZt2LDBZZ+XX35ZV111lex2u5o3b67Ro0fr119/ddknIiJC99577znn7927t3r37u38evPmzbLZbHrrrbc0depUXXLJJapfv75uvPFGff/99y7HrVmzRj/++KPzEl1ERIRz+0svvaSrrrrK2e8uXbqUG/YAmIdwA8At+fn5ysvL09GjR/XNN9/o4Ycf1smTJ3X33Xc794mLi9Mvv/yi9evXuxz71Vdf6euvv67UrE1qaqruuece1atXT08++aRSU1MVHh6uTz75xLnPlClTNHr0aDVv3lwzZszQ7bffrldeeUV9+/YtM1hV1vTp0/X+++9r4sSJSkpK0rZt21z6PGnSJHXq1EkhISF6/fXX9frrrzsvUS1YsEDjxo1TZGSkZs+erdTUVHXq1Emff/652/0BUEkGAFTBkiVLDEnnfOx2u7F06VKXfY8dO2bY7XZj6NChLu2JiYmGJCMrK6vCWvv27TN8fHyMv/zlL0ZpaanLNofDYRiGYRw5csTw9/c3+vbt67LPnDlzDEnG4sWLnW0tW7Y0hg8ffk6dXr16Gb169XJ+vWnTJkOS0a5dO6OoqMjZ/sILLxiSjK+++srZNmDAAKNly5bnnPPWW281rrrqqgrHB6B6MHMDwC1z587Vxo0btXHjRr3xxhvq06ePRo4cqffee8+5T3BwsPr3768PPvhAhYWFkiTDMLRixQp16dJFV155ZYU1Vq1aJYfDoeTkZPn4uP5zZbPZJEkff/yxiouL9cgjj7js88ADDyggIEBr1qxxe4wjRoyQv7+/8+vrr79ekrR///7zHhsUFKT//ve/2rFjh9v1AbiHcAPALV27dlVMTIxiYmIUFxenNWvWKDIyUmPGjFFxcbFzv7i4OBUWFmr16tWSpM8++0wHDx6s1CWpH374QT4+PoqMjCx3nx9//FGS1KZNG5d2f39/XX755c7t7rj00ktdvg4ODpYkHT9+/LzHPv7447rooovUtWtXXXHFFRo9erS2bt3qdl8AVB7hBoApfHx81KdPHx0+fFj79u1ztg8cOFCBgYHOG2mXL18uX19f3XXXXR7v49nZnv9VWlpaZruvr2+Z7UYFa/ec1a5dO2VlZWnFihXq2bOn3n33XfXs2VMpKSmV7zAAtxBuAJjm7GJ8J0+edLbZ7Xbdcccd2rBhg3Jzc/X222/rz3/+s8LCws57vlatWsnhcOjbb78td5+WLVtKkrKyslzai4uLdeDAAed26feZl/99gkrSBc3ulBeYJKlRo0YaMmSIlixZouzsbA0YMEBTp07Vb7/95nY9AOdHuAFgipKSEm3YsEH+/v5q166dy7a4uDiVlJTowQcf1NGjRyu9ts3gwYPl4+OjJ598Ug6Hw2Xb2dmTmJgY+fv768UXX3SZUVm0aJHy8/M1YMAAZ1urVq20bds2l8tmH330kQ4dOlTl8Z7VqFEj5efnn9P+yy+/uHzt7++vyMhIGYZxQU9wATi/2rssKACv+ve//629e/dKko4cOaLly5dr3759SkxMVEBAgMu+vXr10iWXXKLVq1erQYMGuu222ypVo3Xr1po0aZKeeuopXX/99brttttkt9u1Y8cONW/eXNOmTdPFF1+spKQkpaamql+/frrllluUlZWll19+Wddee63Lo+kjR47UO++8o379+unOO+/UDz/8oDfeeEOtWrVy+/chKipKK1euVEJCgq699lpddNFFGjRokPr27auwsDDnKyb27NmjOXPmaMCAAWrcuLHb9QBUglef1QJQ65T1KHj9+vWNTp06GfPmzXM+ov2/Hn30UUOSceedd1a55uLFi43OnTsbdrvdCA4ONnr16mVs3LjRZZ85c+YYbdu2NerVq2eEhoYaDz/8sHH8+PFzzjVjxgyjRYsWht1uN3r06GHs3Lmz3EfB3377bZdjDxw4YEgylixZ4mw7efKkMWzYMCMoKMiQ5Hws/JVXXjFuuOEG409/+pNht9uNVq1aGY8++qiRn59f5fEDqBqbYVTizjgAAIBagntuAACApRBuAACApRBuAACApRBuAACApRBuAACApRBuAACApdS5RfwcDod+/vlnNW7cuMJl0wEAQM1hGIZOnDih5s2by8en4rmZOhdufv75Z4WHh3u7GwAAwA2HDh3SJZdcUuE+dS7cnF32/NChQ+csEQ8AAGqmgoIChYeHV+r1JXUu3Jy9FBUQEEC4AQCglqnMLSXcUAwAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACzFq+Fmy5YtGjRokJo3by6bzaZVq1ad95jNmzfrmmuukd1uV+vWrbV06dJq7ycAAKg9vBpuCgsL1bFjR82dO7dS+x84cEADBgxQnz59lJmZqUceeUQjR47U+vXrq7mnAACgtvDqizNvvvlm3XzzzZXef/78+brssss0Y8YMSVK7du30n//8R7NmzVJsbGx1dRMAANQiteqem/T0dMXExLi0xcbGKj09vdxjioqKVFBQ4PIBAADW5dWZm6rKyclRaGioS1toaKgKCgp0+vRpNWjQ4Jxjpk2bptTUVE91EQA8KiJxTbWd++D0AdV2bqA61aqZG3ckJSUpPz/f+Tl06JC3uwQAAKpRrZq5CQsLU25urktbbm6uAgICypy1kSS73S673e6J7gEAgBqgVs3cdOvWTWlpaS5tGzduVLdu3bzUIwAAUNN4NdycPHlSmZmZyszMlPT7o96ZmZnKzs6W9Pslpfj4eOf+Dz30kPbv36/HHntMe/fu1csvv6y33npLEyZM8Eb3AQBADeTVcLNz50517txZnTt3liQlJCSoc+fOSk5OliQdPnzYGXQk6bLLLtOaNWu0ceNGdezYUTNmzNDChQt5DBwAADjZDMMwvN0JTyooKFBgYKDy8/MVEBDg7e4AwAXhaSnUFVX5+V2r7rkBAAA4H8INAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFK+Hm7lz5yoiIkL169dXdHS0tm/fXuH+s2fPVps2bdSgQQOFh4drwoQJ+u233zzUWwAAUNN5NdysXLlSCQkJSklJ0a5du9SxY0fFxsbqyJEjZe6/fPlyJSYmKiUlRXv27NGiRYu0cuVK/eMf//BwzwEAQE3l1XAzc+ZMPfDAAxoxYoQiIyM1f/58NWzYUIsXLy5z/88++0w9evTQsGHDFBERob59+2ro0KHnne0BAAB1h9fCTXFxsTIyMhQTE/N/nfHxUUxMjNLT08s8pnv37srIyHCGmf3792vt2rXq379/uXWKiopUUFDg8gEAANbl563CeXl5Ki0tVWhoqEt7aGio9u7dW+Yxw4YNU15ennr27CnDMHTmzBk99NBDFV6WmjZtmlJTU03tOwAAqLm8fkNxVWzevFlPP/20Xn75Ze3atUvvvfee1qxZo6eeeqrcY5KSkpSfn+/8HDp0yIM9BgAAnua1mZuQkBD5+voqNzfXpT03N1dhYWFlHjN58mTdc889GjlypCTp6quvVmFhoUaNGqVJkybJx+fcrGa322W3280fAAAAqJG8NnPj7++vqKgopaWlOdscDofS0tLUrVu3Mo85derUOQHG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UkhIiEJCQvT111879zvf4+HFxcXKyMhQUlKSs83Hx0cxMTFKT08v97gnn3xSTZs21f33369PP/20whrTpk1TamrqeccEAACswa1ws2nTJlOK5+XlqbS0VKGhoS7toaGh2rt3b5nH/Oc//9GiRYuUmZlZqRpJSUkuM0kFBQUKDw93u88AAKBmc/uylDecOHFC99xzjxYsWKCQkJBKHWO322W326u5ZwAAoKbwargJCQmRr6+vcnNzXdpzc3MVFhZ2zv4//PCDDh48qEGDBjnbHA6HJMnPz09ZWVlq1apV9XYaAADUaG6vUGwGf39/RUVFKS0tzdnmcDiUlpbmXBzwj9q2bauvvvpKmZmZzs8tt9yiPn36KDMzk8tNAADA+5elEhISNHz4cHXp0kVdu3bV7NmzVVhY6Hx6Kj4+Xi1atNC0adOcr3n4o6CgIEk6px0AANRNXg83Q4YM0dGjR5WcnKycnBx16tRJ69atc95knJ2dLR8fr04wAQCAWsRmnH2tdx1RUFCgwMBA5efnKyAgwNvdAYALEpG4ptrOfXD6gGo7N1BVVfn5zZQIAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwlBoRbubOnauIiAjVr19f0dHR2r59e7n7LliwQNdff72Cg4MVHBysmJiYCvcHAAB1i9fDzcqVK5WQkKCUlBTt2rVLHTt2VGxsrI4cOVLm/ps3b9bQoUO1adMmpaenKzw8XH379tVPP/3k4Z4DAICayGYYhuHNDkRHR+vaa6/VnDlzJEkOh0Ph4eEaO3asEhMTz3t8aWmpgoODNWfOHMXHx593/4KCAgUGBio/P18BAQEX3H8A8KaIxDXVdu6D0wdU27mBqqrKz2+vztwUFxcrIyNDMTExzjYfHx/FxMQoPT29Uuc4deqUSkpK1KRJkzK3FxUVqaCgwOUDAACsy6vhJi8vT6WlpQoNDXVpDw0NVU5OTqXO8fjjj6t58+YuAemPpk2bpsDAQOcnPDz8gvsNAABqLq/fc3Mhpk+frhUrVuj9999X/fr1y9wnKSlJ+fn5zs+hQ4c83EsAAOBJft4sHhISIl9fX+Xm5rq05+bmKiwsrMJjn3/+eU2fPl0ff/yxOnToUO5+drtddrvdlP4CAICaz6szN/7+/oqKilJaWpqzzeFwKC0tTd26dSv3uGeffVZPPfWU1q1bpy5duniiqwAAoJbw6syNJCUkJGj48OHq0qWLunbtqtmzZ6uwsFAjRoyQJMXHx6tFixaaNm2aJOmZZ55RcnKyli9froiICOe9ORdddJEuuugir40DAADUDF4PN0OGDNHRo0eVnJysnJwcderUSevWrXPeZJydnS0fn/+bYJo3b56Ki4t1xx13uJwnJSVFU6ZM8WTXAQBADeT1dW48jXVuAFgJ69ygrqg169wAAACYjXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAspUaEm7lz5yoiIkL169dXdHS0tm/fXuH+b7/9ttq2bav69evr6quv1tq1az3UUwAAUNN5PdysXLlSCQkJ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2WfL3L548WJFRkaaWrN169aaMGGC7r777jK3Z2ZmKioqyrR61157raZPn65FixbJz8/1j1VpaameeeYZXXvttabVk36fMbn99tt1//33l7k9MzNTH330kWn16sIYe/furYkTJ+pf//qXQkJCXLbl5eXp8ccfV+/evU2rJ0nt27dXdHS0Hn744TK3Z2Zmmv6/0iNHjpQb4CTp6quvVl5enqk1P/zwwwqDqtk/KE6cOKHmzZuXu71Zs2YqLCw0tea333573qD63XffmVavLozR4XDI39+/3O3+/v6m3wdXVFSkhx9+uNy/Iz/++KNSU1NNrWk2wo0HzJgxQwMHDtS6desUExPjMnWalpam/fv3a82aNabW7NKlizIyMsoNNzabzdQp8Dlz5ig2NlZhYWG64YYbXMa4ZcsW+fv7a8OGDabVk6SoqCjt2rWr3B/8drvd1Cds6sIY58+fr/79+6tZs2a6+uqrXcb41VdfKTIy0tQwJUk9evRQVlZWudsbN26sG264wdSaBFVrBNW6MMaBAwdq1KhRWrRokTp37uyy7YsvvtDDDz+sQYMGmVZPkjp16qTw8HANHz68zO27d++u8eGGy1IecvDgQc2bN0/btm1zeby2W7dueuihhxQREWFqvZycHBUVFally5amnrciJ06c0BtvvFHmGIcNG1buJTJ3FRUVqbS0VA0bNjT1vBWpC2N0OBxav359mWPs27evfHxq/0OWX375pWJjY1VSUlJhUG3fvr1pNUeMGKGGDRtq7ty5ZW7fs2eP+vfvrwMHDphS79ChQ+rfv7/27t1bYVANDw83pZ70+/0hNptNs2fPLnP7Dz/8oJEjR2rTpk2m1KsLYzx+/LiGDRum9evXKzg4WE2bNpX0++zjr7/+qtjYWC1fvlxBQUGm1JOkp59+WiUlJUpJSSlz+6FDh5ScnKwlS5aYVtNshBsAdRJB1RpBtS6MUZL27t2r9PT0c8bYtm1bL/esZiLceND/LozWrFkztWvXrloXRqspi7GVlJTo8OHDHl2IrboWf8vJydHnn3/u8n3s2rWrwsLCTK1TUc2wsDBFR0dXa82yFBYWKiMjw/TLRDWtJoDajXtuPMDhcCg5OVlz5849Z5GwwMBAjRkzRqmpqab+D8MbNSvy7bff6pprrvHo3fXffPONqTULCwv14IMPasWKFbLZbM4nCo4dOybD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PW/UrAtjrBbemzSqO+bMmWPY7XZj3LhxxurVq41t27YZ27ZtM1avXm2MGzfOaNCggTF37txaXZMxMsbaVLN58+bGqlWryt3+xRdfmD7t7umajJEx1qaaZiPceMiKFSuM6Ohow8/Pz7DZbIbNZjP8/PyM6OhoY+XKlZaoyRgZY22pOWjQIGPy5Mnlbs/MzDRsNlutrskYGWNtqmk2npbysJKSEuXl5UmSQkJCVK9ePcvVZIzWqGnlMX766acqLCxUv379ytxeWFionTt3lrtqcm2oyRgZY22qaTbCDQAAsBQfb3cAAADATIQbAABgKYQbAABgKYQbAABgKYQbAKbr3bu3HnnkkXK3R0REaPbs2R7py8GDB2Wz2ZSZmemRegC8j3ADwON27NihUaNGOb+22WxatWpVpY9funSpgoKCKrVveHi4Dh8+rPbt21exlwBqK16/AMDjLr74Yo/UKS4ulr+/v8LCwjxSD0DNwMwNgGpx5swZjRkzRoGBgQoJCdHkyZOd76r542WpiIgISdJf/vIX2Ww259e7d+9Wnz591LhxYwUEBCgqKko7d+7U5s2bNWLECOXn58tms8lms2nKlCnOcz311FOKj49XQECARo0adc5lqc2bN8tmsyktLU1dunRRw4YN1b17d2VlZbn0/5///KeaNm2qxo0ba+TIkUpMTFSnTp2c2zdv3qyuXbuqUaNGCgoKUo8ePfTjjz9W128ngCog3ACoFq+99pr8/Py0fft2vfDCC5o5c6YWLlx4zn47duyQJC1ZskSHDx92fh0XF6dLLrlEO3bsUEZGhhITE1WvXj11795ds2fPVkBAgA4fPqzDhw9r4sSJzvM9//zz6tixo7744gtNnjy53P5NmjRJM2bM0M6dO+Xn56f77rvPue1f//qXpk6dqmeeeUYZGRm69NJLNW/ePOf2M2fOaPDgwerVq5e+/PJLpaena9SoUTX/ZYJAHcFlKQDVIjw8XLNmzZLNZlObNm301VdfadasWXrggQdc9jt7iSooKMjl8lF2drYeffRR59vCr7jiCue2wMBA2Wy2Mi83/fnPf9bf//5359cHDx4ss39Tp051Lh+fmJioAQMG6LffflP9+vX10ksv6f7779eIESMkScnJydqwYYNOnjwpSSooKFB+fr4GDhyoVq1aSZLatWtXpd8fANWHmRsA1eK6665zmcno1q2b9u3bp9LS0kodn5CQoJEjRyomJkbTp0/XDz/8UKnjunTpUqn9OnTo4Px1s2bNJElHjhyRJGVlZalr164u+//x6yZNmujee+9VbGysBg0apBdeeEGHDx+uVF0A1Y9wA6BGmjJlir755hsNGDBAn3zyiSIjI/X++++f97hGjRpV6vx/fCnn2RDmcDgq3b8lS5YoPT1d3bt318qVK3XllVdq27ZtlT4eQPUh3ACoFp9//rnL19u2bdMVV1whX1/fc/atV69emTM6V155pSZMmKANGzbotttu05IlSyRJ/v7+lZ4BckebNm2c9/6c9b9fS1Lnzp2VlJSkzz77TO3bt9fy5currU8AKo9wA6BaZGdnKyEhQVlZWXrzzTf10ksvafz48WXuGxERobS0NOXk5Oj48eM6ffq0xowZo82bN+vHH3/U1q1btWPHDud9LRERETp58qTS0tKUl5enU6dOmdr3sWPHatGiRXrttde0b98+/fOf/9SXX37pnOE5cOCAkpKSlJ6erh9//FEbNmzQvn37uO8GqCG4oRhAtYiPj9fp06fVtWtX+fr6avz48S4L9/3RjBkzlJCQoAULFqhFixb67rvv9Msvvyg+Pl65ubkKCQnRbbfdptTUVElS9+7d9dBDD2nIkCH65ZdflJKS4nwc3AxxcXHav3+/Jk6cqN9++0133nmn7r33Xm3fvl2S1LBhQ+3du1evvfaafvnlFzVr1kyjR4/Wgw8+aFofALjPZpxdeAIAUK6bbrpJYWFhev31173dFQDnwcwNAPyPU6dOaf78+YqNjZWvr6/efPNNffzxx9q4caO3uwagEpi5AYD/cfr0aQ0aNEhffPGFfvvtN7Vp00ZPPPGEbrvtNm93DUAlEG4AAICl8LQUAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwlP8PwU22nkE2EYwAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_bitstrings(bv_results, title=\"BV counts\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Run on a noisy simulator\n", "\n", "Let's try a noisy simulator" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "T : | 0 | 1 | 2 | 3 |Result Types|\n", " \n", "q0 : -H-DEPO(0.01)-I-DEPO(0.01)-H-DEPO(0.01)-BF(0.1)--------------------Probability--\n", " | \n", "q1 : -H-DEPO(0.01)-I-DEPO(0.01)-H-DEPO(0.01)-BF(0.1)--------------------Probability--\n", " | \n", "q2 : -H-DEPO(0.01)--------------C-DEPO(0.01)-H-------DEPO(0.01)-BF(0.1)-Probability--\n", " | \n", "q3 : -H-DEPO(0.01)-Z-DEPO(0.01)-X-DEPO(0.01)-BF(0.1)---------------------------------\n", "\n", "T : | 0 | 1 | 2 | 3 |Result Types|\n" ] } ], "source": [ "from braket.circuits.noises import BitFlip, Depolarizing\n", "\n", "noisy_bv_circuit = (\n", " bernstein_vazirani_circuit(\"001\")\n", " .apply_gate_noise(Depolarizing(0.01))\n", " .apply_readout_noise(BitFlip(0.1))\n", ")\n", "print(noisy_bv_circuit)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "local_simulator = LocalSimulator(\"braket_dm\")\n", "\n", "task = run_bernstein_vazirani(noisy_bv_circuit, local_simulator, shots=1_000)\n", "\n", "noisy_bv_results = get_bernstein_vazirani_results(task)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/png": "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SYmJiercubMyMjJszlu4cKGGDx+uCy+80Bllu7ywKe86uwS77J7JfkgAYHZODzcJCQk6dOiQ0tLSVFhYqIiICK1bt866yHjv3r1yc7OdYCooKNB///tfvffee84oGQAAtGAWwzAMZxfRnEpLS+Xn56eSkhL5+vo6u5xWi5kbAEBzasjf71b9tBQAAMCvEW4AAICpEG4AAICpEG4AAICpEG4AAICpEG4AAICpEG4AAICpEG4AAICpEG4AAICpEG4AAICpEG4AAICpEG4AAICpEG4AAICpEG4AAICpEG4AAICpEG4AAICpEG4AAICpEG4AAICpEG4AAICpEG4AAICpEG4AAICpEG4AAICpEG4AAICpEG4AAICpEG4AAICpEG4AAICpEG4AAICpEG4AAICpEG4AAICpEG4AAICpEG4AAICpEG4AAICpEG4AAICpEG4AAICpEG4AAICpEG4AAICpEG4AAICpEG4AAICpEG4AAICpEG4AAICpOD3czJ8/X2FhYfL29lZMTIzy8vLO2f/o0aO677771LFjR3l5eenyyy/X2rVrm6laAADQ0nk488Ozs7OVkpKirKwsxcTEKDMzU/Hx8SooKFBQUFCN/hUVFbrxxhsVFBSkV199VZ07d9aePXvk7+/f/MUDAIAWyanhZvbs2Ro3bpySk5MlSVlZWXr33Xe1aNEiTZkypUb/RYsW6fDhw/r444/Vpk0bSVJYWNg5P6O8vFzl5eXW96WlpY4bAAAAaHGcdluqoqJC+fn5iouL+6UYNzfFxcUpNze31nPeeustxcbG6r777lNwcLB69+6tp556SlVVVXV+TkZGhvz8/Kyv0NBQh48FAAC0HE4LN8XFxaqqqlJwcLBNe3BwsAoLC2s95/vvv9err76qqqoqrV27Vo8//rieffZZPfnkk3V+TmpqqkpKSqyvffv2OXQcAACgZXHqbamGqq6uVlBQkF588UW5u7srMjJSP/74o5555hmlp6fXeo6Xl5e8vLyauVIAAOAsTgs3gYGBcnd3V1FRkU17UVGRQkJCaj2nY8eOatOmjdzd3a1tPXv2VGFhoSoqKuTp6dmkNQMAgJbPabelPD09FRkZqZycHGtbdXW1cnJyFBsbW+s5V199tb799ltVV1db277++mt17NiRYAMAACQ5eZ+blJQULViwQEuXLtXOnTt17733qqyszPr0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YmJiNGDAAM2bN0/S6b1yQkNDNXHixDq/hLOqqkrXXXedxowZo48++khHjx7VmjVrau1bXl6u8vJy6/vS0lKFhoaqpKREvr6+Dh+Pqwib8q6zS7DL7plDnV0CAMAOpaWl8vPzq9ffb7vW3Li7u+vgwYM12n/66SebHYvPp6KiQvn5+YqLi/ulIDc3xcXFKTc3t87znnjiCQUFBenuu+8+72dkZGTIz8/P+goNDa13fQAAoPWxK9zUNdlTXl5u811T51NcXKyqqioFBwfbtAcHB6uwsLDWc/773/9q4cKFWrBgQb0+IzU1VSUlJdbXvn376l0fAABofRr0KPjf//53SZLFYtFLL72kCy64wHqsqqpKH374ocLDwx1b4VmOHTumP/7xj1qwYIECAwPrdY6Xl5e8vLyarCYAANCyNCjczJkzR9LpmZusrCybW1Cenp4KCwtTVlZWva8XGBgod3d3FRUV2bQXFRUpJCSkRv/vvvtOu3fv1s0332xtq66uPj0QDw8VFBSoa9euDRkSAAAwmQaFm127dkmSrr/+er3++usKCAho1Id7enoqMjJSOTk51se5q6urlZOTowkTJtToHx4eri+++MKm7bHHHtOxY8f03HPPsZ4GAADYt0PxBx984LACUlJSlJSUpKioKEVHRyszM1NlZWVKTk6WJCUmJqpz587KyMiQt7e3evfubXO+v7+/JNVoBwAArqne4SYlJUXTp09X+/btlZKScs6+s2fPrncBCQkJOnTokNLS0lRYWKiIiAitW7fOush47969cnNjI2UAAFA/9Q43n376qU6dOmX9d13s2dxvwoQJtd6GkqSNGzee89wlS5Y0+PMAAIB51TvcnH0rypG3pQAAAByJ+z0AAMBU6j1zc9ttt9X7oq+//rpdxQAAADRWvcONn59fU9YBAADgEPUON4sXL27KOgAAAByCNTcAAMBU6j1z079/f+Xk5CggIED9+vU75yPf27Ztc0hxAAAADVXvcHPrrbdav4DyzFclAAAAtDT1Djfp6em1/hsAAKAlseu7pc7YunWrdu7cKUnq1auXIiMjHVIUAACAvewKNz/88INGjhypTZs2Wb+48ujRoxo4cKBWr16tiy++2JE1AgAA1JtdT0uNHTtWp06d0s6dO3X48GEdPnxYO3fuVHV1tcaOHevoGgEAAOrNrpmb//znP/r444/V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cAMAAEzF6fvcoG6VlZX68ssvrV8KGhISol69eqlNmzZOrqx5VFZWav/+/brkkkucXUqjFRYWavPmzTa/y5iYmDq/NsRsysrKlJ+fr+uuu87ZpQBwAYSbFqi6ulppaWmaP3++SkpKbI75+flpwoQJmjZtms3mhmb05Zdfqn///qqqqnJ2KXYrKyvT+PHjtXr1alksFnXo0EGSdPjwYRmGoZEjR+qFF15Qu3btnFxp0/r22291/fXXt+rf5a8RWM0TWPPy8pSbm2vzu4yNjVV0dLSTK2seR44c0dtvv63ExERnl+I4Blqchx9+2LjooouMrKwsY9euXcbx48eN48ePG7t27TJeeOEFIygoyPjLX/7i7DKb3Pbt2w03Nzdnl9Eod999t9G9e3dj3bp1RmVlpbW9srLSWL9+vXH55ZcbY8eOdWKFzcMMv8szfv75Z2PUqFGGu7u74eHhYQQFBRlBQUGGh4eH4e7ubowePdooKytzdplNzgy/06KiIuOaa64xLBaL0aVLFyM6OtqIjo42unTpYlgsFuOaa64xioqKnF1mkzPD7/LX2KG4BQoJCdHSpUsVHx9f6/H169crMTGxxrejtzb9+/c/5/ETJ07o66+/btX/bz8gIEDvvvuuBg4cWOvxTZs2adiwYTpy5EgzV+ZYZ2ak6lJVVaWff/65Vf8uzxg7dqw+/PBDzZ07V3FxcXJ3d5d0eow5OTmaOHGirrvuOi1YsMDJlTatzz77rNXPrN5+++3av3+/Fi9erB49etgcKygo0JgxY9SpUye98sorTqrQMUpLS895/PPPP9egQYNa9e/y17gt1QIdO3ZMnTp1qvN4x44dVVZW1owVNY3//e9/GjFihC699NJajx84cEBff/11M1flWNXV1fL09KzzuKenp6qrq5uxoqZRXl6ue++9V3369Kn1+J49ezRt2rRmrqppvPbaa7UGVnd3dw0ZMkSLFi3SsGHDWn24qU9gbe3Wr1+vDz/8sEawkaQePXro73//uwYPHtz8hTmYv7+/LBZLnccNwzjn8daIcNMCDR48WA899JBWrlypwMBAm2PFxcV65JFHTPFfuN69eysmJkb33ntvrce3b9/e6v9ADBs2TPfcc48WLlyofv362Rz79NNPde+99+rmm292UnWOExERodDQUCUlJdV6/LPPPjNNuCGwnmaGwOrl5XXOWY1j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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_bitstrings(noisy_bv_results, title=\"Noisy BV counts\")" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Task Summary\n", "{} \n", "\n", "Estimated cost to run this example: 0.00 USD\n" ] } ], "source": [ "print(\"Task Summary\")\n", "print(f\"{tracker.quantum_tasks_statistics()} \\n\")\n", "print(f\"Estimated cost to run this example: {tracker.qpu_tasks_cost() + tracker.simulator_tasks_cost():.2f} USD\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note: Charges shown are estimates based on your Amazon Braket simulator and quantum processing unit (QPU) task usage. Estimated charges shown may differ from your actual charges. Estimated charges do not factor in any discounts or credits, and you may experience additional charges based on your use of other services such as Amazon Elastic Compute Cloud (Amazon EC2)." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3.9.5 64-bit ('braket')", "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.5" }, "orig_nbformat": 4, "vscode": { "interpreter": { "hash": "5904cb9a2089448a2e1aeb5d493d227c9de33e591d7c07e4016fb81e71061a5d" } } }, "nbformat": 4, "nbformat_minor": 2 }