{ "cells": [ { "cell_type": "markdown", "id": "c4e97d94-9f03-4956-bb03-2f1753d8afa5", "metadata": {}, "source": [ "# Adaptive QPE\n", "\n", "**Download this notebook - {nb-download}`adaptive-qpe.ipynb`**\n", "\n", "Implementation of the adaptive random walk phase estimation algorithm from\n", "https://arxiv.org/abs/2208.04526.\n", "\n", "The example Hamiltonian and numbers are taken from https://arxiv.org/abs/2206.12950." ] }, { "cell_type": "code", "execution_count": 1, "id": "8462b05b-5e24-46c7-9021-0bdaf9e90029", "metadata": {}, "outputs": [], "source": [ "import math\n", "from guppylang import guppy\n", "from guppylang.std.angles import angle\n", "from guppylang.std.builtins import comptime, result\n", "from guppylang.std.quantum import discard, measure, qubit, h, rz, x, crz" ] }, { "cell_type": "code", "execution_count": 2, "id": "d77268ee-b737-41cf-86a8-6abfb10b9b89", "metadata": {}, "outputs": [], "source": [ "@guppy\n", "def oracle(ctrl: qubit, q: qubit, t: float) -> None:\n", " \"\"\"Applies a controlled e^-iπHt/2 gate for the example Hamiltonian H = 0.5 * Z.\"\"\"\n", " crz(ctrl, q, angle(0.5 * t))\n", "\n", "\n", "@guppy\n", "def eigenstate() -> qubit:\n", " \"\"\"Prepares eigenstate of the example Hamiltonian H = 0.5 * Z.\"\"\"\n", " q = qubit()\n", " x(q)\n", " return q" ] }, { "cell_type": "code", "execution_count": 3, "id": "f4b1a3fe-5586-44a4-b891-7af85c28013e", "metadata": {}, "outputs": [], "source": [ "sqrt_e = math.sqrt(math.e)\n", "sqrt_e_div = math.sqrt((math.e - 1) / math.e)\n", "\n", "\n", "@guppy\n", "def main() -> None:\n", " # Pick initial estimate of phase mean and stdv\n", " # and prepare eigenstate\n", " mu, sigma = comptime(sqrt_e_div), 1 / comptime(sqrt_e)\n", " tgt = eigenstate()\n", " for _ in range(24):\n", " t = 1 / sigma\n", "\n", " aux = qubit()\n", " h(aux)\n", " rz(aux, angle((sigma - mu) * t))\n", " oracle(aux, tgt, t)\n", " h(aux)\n", "\n", " if measure(aux):\n", " mu += sigma / comptime(sqrt_e)\n", " else:\n", " mu -= sigma / comptime(sqrt_e)\n", " sigma *= comptime(sqrt_e_div)\n", "\n", " discard(tgt)\n", " result(\"eigenvalue\", 2 * mu)" ] }, { "cell_type": "code", "execution_count": 4, "id": "4a51f004-53aa-41d0-884b-cdfd7c6efab5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "EmulatorResult(results=[QsysShot(entries=[('eigenvalue', 2.3679925580437398)])])" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "emulator = main.emulator(n_qubits=2).with_seed(2)\n", "emulator.run()" ] }, { "cell_type": "code", "execution_count": 5, "id": "526d9fad-1a5a-4adb-bf11-41729e03c3cf", "metadata": {}, "outputs": [ { "data": { "image/png": "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I5EaQsDnn38eeI1IMk8//bQ5ePCgOXHihDHGmPz8fDN79uxA/z/+8Y/ma1/7mlm6dKk5evSoKSoqMj169DAlJSWRGsIlOjqmZ555xuzYscMcO3bMHD582Dz88MMmJibG/O53v4vUEAIeeugh43a7zZ49e8xnn30WWL744otAn2h7DXVmTDa/hvLz801ZWZmpqakx7733nsnPzzcOh8P89re/NcZE3/G5gIASBnPmzDGSLlneeuutQB9JZtOmTYHHra2tZvny5SYpKck4nU4zceJEU11d3fXFX8b//d//mQceeMD06dPHuFwu8+CDDwYFrpqamqAxnjx50tx1110mMTHROJ1Oc/PNN5ulS5can88Xkfo3bNhg0tLSTFxcnBkzZozZu3dvYN3dd99t5syZE9T/17/+tfn6179u4uLizC233GJef/31Lq746joypsWLFwf6JiUlmSlTppgDBw5EoOpLXfiI7cXLhfrnzJlj7r777ku2GT58uImLizM33nhj0GvJBh0d0+rVq81NN91k4uPjTWJiohk/frzZvXt3ZIq/SFvjuPjvV7S9hjozJptfQ9/5znfMDTfcYOLi4sx1111nJk6cGAgnxkTf8bnAYYwxXTBRAwAA0G5cgwIAAKxDQAEAANYhoAAAAOsQUAAAgHUIKAAAwDoEFAAAYB0CCgAAsA4BBQAAWIeAAgAArENAAQAA1iGgAAAA6xBQAACAdf4fALHsQjsb5A4AAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "import matplotlib.ticker as ticker\n", "\n", "# run more shots\n", "shots = emulator.with_shots(500).run()\n", "fig, ax = plt.subplots(1, 1)\n", "ax.hist([shot.as_dict()[\"eigenvalue\"] for shot in shots], bins=100)\n", "ax.xaxis.set_major_locator(ticker.MultipleLocator(0.5))\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "venv", "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.11.2" } }, "nbformat": 4, "nbformat_minor": 5 }