{ "cells": [ { "cell_type": "markdown", "id": "39d5d0bd", "metadata": {}, "source": [ "# Qubitized phase estimation with unary-iteration SELECT\n", "\n", "**Download Notebook** - {nb-download}`qubitized_phase_estimation.ipynb`\n", "\n", "This notebook estimates the ground-state eigenvalue of a four-term, three-qubit Hermitian Hamiltonian. It combines an LCU block encoding with unary-iteration SELECT, controlled qubitization, and canonical QPE, then compares the eigenvalue inferred from sampled phases with the result of exact diagonalization." ] }, { "cell_type": "code", "execution_count": 1, "id": "627ddd9b", "metadata": {}, "outputs": [], "source": [ "from typing import no_type_check\n", "\n", "import numpy as np\n", "import zixy.qubit.pauli as zqp\n", "from guppylang import guppy\n", "from guppylang.std.builtins import array, output\n", "from guppylang.std.quantum import (\n", " collect_measurements,\n", " discard_array,\n", " h,\n", " measure_array,\n", " qubit,\n", ")\n", "\n", "from guppyalgos.primitives.gate_decompositions.cnx.cnx import cnx\n", "from guppyalgos.algorithms.block_encoding.lcu import (\n", " LCUCntrl,\n", " LCUData,\n", " build_cntrl_unary_iteration_select,\n", ")\n", "from guppyalgos.algorithms.phase_estimation import (\n", " QubitizationRegs,\n", " qubitized_power_oracle,\n", " qpe,\n", ")\n", "from guppyalgos.algorithms.block_encoding.qubitization import QubitizationCntrl\n", "from guppyalgos.primitives.subroutines.reflection import ReflectionCntrl\n", "from guppyalgos.algorithms.state_preparation import multiplexor_prep\n", "from guppyalgos.utils import (\n", " binary_fraction,\n", " phase_distance_mod_2,\n", " qarray,\n", " phase_to_energy_qubitized_qpe,\n", " transversal,\n", ")" ] }, { "cell_type": "markdown", "id": "1af99369", "metadata": {}, "source": [ "## Construct the Hamiltonian and LCU data\n", "\n", "We use the Hermitian Hamiltonian\n", "\n", "$$\n", "H = 0.5 Z_0X_1Y_2 + 0.1 X_0Z_1Z_2 + 0.2 Y_0Y_1X_2 + 0.3 X_0X_1Y_2.\n", "$$\n", "\n", "`LCUData` extracts the Pauli strings, coefficient amplitudes, normalization $\\lambda=\\sum_j |\\alpha_j|$, and register sizes. Four terms require a two-qubit PREPARE index, which makes `build_cntrl_unary_iteration_select` use unary iteration rather than the one-control SELECT fallback.\n", "\n", "For a direct accuracy comparison, we diagonalize $H$ classically and use `multiplexor_prep` to prepare its exact ground-state eigenvector on the (little-endian) target register." ] }, { "cell_type": "code", "execution_count": 2, "id": "341309bb", "metadata": {}, "outputs": [], "source": [ "hamiltonian = zqp.RealTermSum.from_str(\n", " \"(0.5, Z0 X1 Y2), (0.1, X0 Z1 Z2), \"\n", " \"(0.2, Y0 Y1 X2), (0.3, X0 X1 Y2)\"\n", ")\n", "data = LCUData.from_hamiltonian(hamiltonian)\n", "lcu_prepare = multiplexor_prep(data.amplitudes)\n", "cntrl_select = build_cntrl_unary_iteration_select(data)\n", "n_phase_qubits = 5\n", "n_prep_qubits = data.n_prep_qubits\n", "n_state_qubits = data.n_state_qubits\n", "\n", "matrix = hamiltonian.to_sparse_matrix(False).toarray()\n", "eigenvalues, eigenvectors = np.linalg.eigh(matrix)\n", "exact_eigenvalue = float(eigenvalues[0])\n", "initial_state = eigenvectors[:, 0]\n", "state_prepare = multiplexor_prep(initial_state)\n", "\n", "assert data.n_terms == 4\n", "assert n_prep_qubits == 2\n", "assert np.allclose(\n", " matrix @ initial_state,\n", " exact_eigenvalue * initial_state,\n", ")" ] }, { "cell_type": "markdown", "id": "c23d710b", "metadata": {}, "source": [ "## Build the powered controlled qubitization oracle\n", "\n", "The LCU block applies `PREPARE`, externally controlled unary-iteration `SELECT`, and `PREPARE`$^\\dagger$. Combining this block with a controlled reflection about the all-zero PREPARE state gives one controlled qubitization-walk step.\n", "\n", "Canonical `qpe` requests runtime powers of that walk. The shared Guppy function `qubitized_power_oracle` repeats the controlled step for the requested power and infers the PREPARE and target register sizes from its arguments. A local three-argument `power_oracle` binds `cntrl_walk` to match the QPE callback signature. The measured program prepares the exact target eigenstate, runs QPE, and emits the little-endian phase-register bitstring." ] }, { "cell_type": "code", "execution_count": 3, "id": "5bf6bc05", "metadata": {}, "outputs": [], "source": [ "dagger = object()\n", "\n", "\n", "@guppy\n", "@no_type_check\n", "def unprepare(prep: array[qubit, n_prep_qubits]) -> None:\n", " with dagger:\n", " lcu_prepare(prep)\n", "\n", "\n", "@guppy\n", "@no_type_check\n", "def cntrl_walk(\n", " control: qubit,\n", " prep: array[qubit, n_prep_qubits],\n", " target: array[qubit, n_state_qubits],\n", ") -> None:\n", " cntrl_lcu = LCUCntrl(\n", " lcu_prepare,\n", " cntrl_select,\n", " unprepare,\n", " )\n", " reflection = ReflectionCntrl[n_prep_qubits](cnx)\n", " QubitizationCntrl(cntrl_lcu, reflection).compose(\n", " control, prep, target\n", " )\n", "\n", "\n", "@guppy\n", "@no_type_check\n", "def power_oracle(\n", " control: qubit,\n", " regs: QubitizationRegs[\n", " n_prep_qubits,\n", " array[qubit, n_state_qubits],\n", " ],\n", " power: int,\n", ") -> None:\n", " qubitized_power_oracle(control, regs, power, cntrl_walk)\n", "\n", "\n", "@guppy\n", "@no_type_check\n", "def main() -> None:\n", " phase = qarray(n_phase_qubits)\n", " prep = qarray(n_prep_qubits)\n", " target = qarray(n_state_qubits)\n", "\n", " state_prepare(target)\n", " transversal(h, phase)\n", " regs = QubitizationRegs(prep, target)\n", " qpe(phase, regs, power_oracle)\n", "\n", " output(\"qpe_bitstring\", collect_measurements(measure_array(phase)))\n", " discard_array(regs.prep)\n", " discard_array(regs.target)" ] }, { "cell_type": "markdown", "id": "7cb747f6", "metadata": {}, "source": [ "## Sample phases and recover the eigenvalue\n", "\n", "For a Hamiltonian eigenvalue $E$, the qubitization walk has a conjugate pair of phases satisfying\n", "\n", "$$\n", "E = -\\lambda\\cos(\\pi\\phi), \\qquad \\{\\phi, 2-\\phi\\}.\n", "$$\n", "\n", "These phases need not lie exactly on the five-qubit QPE grid. Five phase qubits give a grid spacing $\\Delta\\phi=2/2^5=0.0625$ and a half-bin resolution of $0.03125$. The histograms show both raw counts and normalized probabilities, with dashed lines at the analytical phases. We convert the dominant measured phase back to an eigenvalue and verify that its absolute error from exact diagonalization is less than $0.1$." ] }, { "cell_type": "code", "execution_count": 4, "id": "a56e0498", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'dominant_measured_phase': 0.3125,\n", " 'estimated_eigenvalue': -0.6111272563215626,\n", " 'exact_eigenvalue': -0.6708203932499369,\n", " 'absolute_error': 0.0596931369283743}" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "n_shots = 200\n", "total_qubits = (\n", " n_phase_qubits\n", " + n_prep_qubits\n", " + n_state_qubits\n", " + n_prep_qubits\n", ")\n", "\n", "# Run finite-shot emulation and extract the measured QPE register counts.\n", "raw_counts = (\n", " main.emulator(n_qubits=total_qubits)\n", " .with_seed(5)\n", " .with_shots(n_shots)\n", " .run()\n", " .register_counts()[\"qpe_bitstring\"]\n", ")\n", "\n", "# Decode the little-endian QPE bitstrings into phases measured in half-turns.\n", "phase_counts = {\n", " binary_fraction([bit == \"1\" for bit in bitstring]): count\n", " for bitstring, count in raw_counts.items()\n", "}\n", "\n", "# Recover the eigenvalue from the dominant phase and compare it with the exact value.\n", "ideal_phase = float(\n", " np.arccos(-exact_eigenvalue / data.l1_norm) / np.pi\n", ")\n", "ideal_phases = {ideal_phase, 2 - ideal_phase}\n", "dominant_phase = max(phase_counts, key=phase_counts.__getitem__)\n", "estimated_eigenvalue = phase_to_energy_qubitized_qpe(\n", " dominant_phase, data.l1_norm\n", ")\n", "phase_resolution = 1 / (2**n_phase_qubits)\n", "eigenvalue_error = abs(estimated_eigenvalue - exact_eigenvalue)\n", "\n", "assert sum(phase_counts.values()) == n_shots\n", "assert min(\n", " phase_distance_mod_2(dominant_phase, phase)\n", " for phase in ideal_phases\n", ") <= phase_resolution\n", "assert eigenvalue_error < 0.1\n", "\n", "{\n", " \"dominant_measured_phase\": dominant_phase,\n", " \"estimated_eigenvalue\": estimated_eigenvalue,\n", " \"exact_eigenvalue\": exact_eigenvalue,\n", " \"absolute_error\": eigenvalue_error,\n", "}" ] }, { "cell_type": "code", "execution_count": 5, "id": "12c8e3b2", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA94AAAMcCAYAAACmTX2UAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjExLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvctoD+AAAAAlwSFlzAAAPYQAAD2EBqD+naQAAnHBJREFUeJzs3Qd4FNX38PGTTigJnVBFepWmKB1FFAQUpUlRVOyIIqiAiggWUFFQsSEWFKUIghQFFUFEQBBRqggK0iT0hBpS9n3O/b27/90km77Z2cn38zz7THZ2ZvbuzCa5Z84tQQ6HwyEAAAAAAMAngn1zWAAAAAAAQOANAAAAAICPkfEGAAAAAMCHCLwBAAAAAPAhAm8AAAAAAHyIwBsAAAAAAB8i8AYAAAAAwIcIvAEAAAAA8CECbwAAAAAAfIjAGwByafHixRIUFCSrV6/OdFvdRrddunRplo6d3e3zyt69e837vvvuu1LQZPecZ+f6FzSPPfaYFCpUSAJNoJYbAGBdBN4ACoz//vtPhg0bJrVr15bIyEiJjo6WFi1ayJQpUyQxMdFv5fr+++9N4KbLgnBut27daj6v8xEcHCwlS5aUjh07epyD1Nulftx666359vnscI2s4qGHHpKiRYv6uxiWKUd6vvnmG/P7UKFCBSlSpIjUr19fBg8eLFu2bPHY7vnnn8/wd2TWrFlptv3999+9vm92jue0adMmueOOO+TSSy81NytKly4tzZo1kyeffNLcwPv1118zPKb7I79vMAJAfiLwBlAgrF+/Xi677DKTlXzvvffkxIkTsmfPHrn33nvl2WeflWuuuUbi4+N9Xo7WrVuLw+GQTp06+WT7QDq3Y8aMMZ9NA/OffvpJLly4YD7n8uXL090u9SO9ICAvBMI5DxQTJ0401zXQ+LPcr7/+utxwww1Sq1Yt8zt17NgxmTZtmmzfvl3atGmT7j4a/Kb3O5LTm1NZPd4bb7whV1xxhVy8eFHmzJkjJ0+elF27dsno0aNNS5CePXvK5ZdfnuY4jRo1kksuuSTNen7nANgZgTcA24uLi5Pu3btLuXLlZMWKFdK+fXuTldUs65133mmyLOvWrZMHH3zQ30UtkOc2JCTEZPSmT58uycnJpjIPFFQvvPCCCUzfeustqVatmvl90tYjekNKs/RW8e2338rQoUNNmT7//HMTgGtZS5QoYf4maKb75ptv9ncxAcAyCLwB2N77779vmkJrM0pttpmaZmT69etnKo+7d+8267RvszZ91KaS7vR1Xa8ZqPSMHz9eKlasaCqg7dq1M5XPjPoP63G0SanSpbPJpTbRTm97lZCQIE899ZTUrFlTChcuLFWrVjVNPVOXVYNi7auqlffw8HApX768PPDAAyYr5e7PP/80GTY9N2XLlpXHH39ckpKSfHZuvXGWc//+/ZJbeo703GhzV6eUlBTTDFbP519//eVaP2/ePLNuw4YNObpG7vSmgWbytMmtZs4zatbrlJ3vmnt/8szey7m/86Hb6Q2Ol156yZyL9I756quvmibDejNEAz3tBqDXNrV///3XbPPMM89kq690165dTUB59uxZj7IdOHDAtY02p+7Ro4e5VhEREVK3bt005/ruu+82r+t3+fbbbzc3eho2bOjKVrsfW7s96A2hZcuWZbkc3vp4f/fdd+ZY2kRdv18aEC9YsCDdsp0+fdr8Xur7Fy9eXAYOHChnzpzJ8HzpddHfW/0bkpq3a+Ev48aNM+fBW5n0d1n/TgEA/ofAG4DtaQClQcJ1113ndRsNPLWpo2ZxcmrSpEmm8v7HH3/I5s2bTfCtlfQdO3Z43Ucr6VqZV7p0NrnMKLM1cuRI06R76tSpcvz4cfn555/l2muv9cgUa6Vfm6V+9dVXZjtt/v3111+b7LNuq01DlQbNup2+rq/t3LlTatSokeUKc16eW22eruWqXLmy5JYGbPq53IMtbT6r50uvi3tZtN+2Zum0X2purtE777xjmidv3LjR9E8/f/68yfj5YvyArLyXXkf3Zrx6rUeMGGECppdffjnNMSdPnmzO/y+//CJLliwx++t11e+PtkRIfbNAj6mtGrJDg3ztq6w3adzLVqlSJfP62rVr5corrzTrnM2sx44da26gPP300x7H0m3uu+8+0/z577//NmMMOINm53G13Pq7qEH5jTfeaH43s1KO9GiArU2hq1evbpp963u2atXKnPcPPvggTdn0+6Fl02B+5syZ8uWXX5rf3YxocK3B/A8//JCrv0W+pjcH9Frp75hV+8kDgNUQeAOwvX379kmZMmVMhsobzRw6M3k5FRYWZirWmu3SbPTs2bMlNDTU9HPOSytXrpS2bdvK1VdfbYJIzY4NGDBAXnvtNY+bABqQaTZXA22tHDdp0sQEABqAagZa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ZZddJsuWLXNtt3r1avNeSt/PeT0eeugh1zavv/66KXvRokVN14Hu3bvLpk2bsnTeAADICIE3AADZ1Lp1a7N88cUXJT4+PtPtk5KSxOFwmIc2U3/rrbfks88+k8GDB6fZ9uuvv5Y//vhDfvrpJ9m8ebMcPnxYevbsKbNnz5bffvvNBKU7duww/ch79+5tjpna4sWLZd26dWZbDUyvuOIKufHGG9MNZN2lpKTIzTffLK+99pqMGTPGvPf69evl9OnT0rJlSzly5IjXfZOTk6Vbt24yYcIEExjv27dPNmzYIG3atJH333/fbJOQkCDXXHONfPHFFyZQ1gHePv74Y5k/f760a9fONNfPqW+//VZWrVol3333nblJcOmll5rPon3xndds//795uc333zTdT2c/b3fe+89czPk6aeflv/++0+2bNkid999t0ycODHHZQIAwMUBAACybfTo0Y7w8HBHRESE4+qrr3YMHTrUsXDhQsf58+eztP+UKVMcwcHBjnPnzpnnu3bt0gjacdVVV3lsN2fOHLO+ffv2HuvnzZtn1v/888+udc5jNG7c2GPblJQUR7169RyXXXaZa93Ro0fNtpMmTXKtmz17tln3xRdfeOx/6tQpR/HixR0jRozw+nlmzJhh9v3888+9bjN16lSzjZ4nd998841Z/+abb5rnK1asMM91fWohISGO4cOHp/nMzZs399ju33//NetfffVV17r9+/d7vI+7W2+91VG3bl2vZQcAIDfIeAMAkAPjxo2TQ4cOmYytZpQ3btxomiZrE+1ff/01TTb2uuuuk1KlSklwcLCribNmmP/55x+PbTt37uzxvE6dOmapmWN32qRapd5faebZnb6fZrw1g65ZZm8WLVpkmn/rtu6io6PNYHI//vij1301U6/NwHv16uV1m+XLl5vjd+nSxWN9p06dTPNufT2nUh9Tm7IXK1Ys3fOTnkaNGpmWBEOHDjXXUjP4AADkFQJvAABySAPpW2+91fRr1mbOv/zyixw9etT0iXbS9RpMV61a1TT/1ubU2sRZA3Znv2h35cuX93iuwWNG6937RjuVK1fO6zpt6u6NNi2/ePGiFC5c2ATRISEhrhsF33//fYb7ajN0fQ/dzxvdv2zZsuaY6ZUvo5sCTuk1rVepz49zwLv0zk96hg8fLs8++6x89dVX5iaDXltt4q/N+wEAyC0C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yKuvvmqacAMAAOQXMt4AANvRDHeZMmVcQbe74cOHS6lSpVzPFyxYYAJx56NIkSLSvHlzmTFjRppgXl+PjY2VIUOGmGPo44knnpCUlBSTTX/ooYfM+0ZFRcldd91l1qV3jMOHD8vgwYPN/sWKFZNbbrlF/v333yx9tn379smdd94pFSpUkPDwcLn00ktlzJgxkpiYmOF+2Xlv9886bNgwKVeunGmu7/Tee+9Jo0aNpFChQlK8eHHT73rTpk3pvu+WLVukXbt2UrhwYalcubI8++yzkpyc7LFNz549Xec/JCTEnEMt159//pnjY2a1L3bq7UqXLi0bN26U5cuXu8pUqVKlTI+rLSt0vV57PVctWrSQpUuXemzz448/SocOHcx76I2hq666Sj777DNxOByZlhMAENgIvAEAtqPB0V9//SUfffRRpkFN9+7dzTb60AD677//Nn3DtT/4okWL0mw/cuRIadu2rezZs0emT58ub7zxhrz22msmmNVm7Lr/7NmzZebMmfLCCy+k+56PPfaYaQr/zz//mGbLu3btMoHkqVOnMiyrvqf2P9bttWx6g+H999+XadOmyW233Zalc5Od99ZtmzRpYgJg/ZzqySefNJ9Vz8/Bgwdl/fr1Juht1aqVCVjdafn0xsTkyZPl0KFDMm7cOBPUP/zwwx7bzZ0713UNzp8/b4Les2fPyvXXXy9xcXE5OmZOaTeEZs2amQDZWabMBrjTgfD05oOeg23btpntb7zxRunSpYvp9qD27t0rnTt3lrp165obB//995+89dZbsmzZMnMNAAA25wAAwGaOHz/u6NChg0bcjrJlyzpuvvlmx3PPPefYsGFDlo/Rvn17R9euXV3Px48fb443ceJEj+169+7tKFq0qGPChAke6/v27esoX768xzrnMbQs7rZs2eIICgpyjBs3zrXunXfeMdvu37/fta5Xr16OkiVLOo4dO+ax/9y5c822GX2+7Ly3c9uxY8d6bHvw4EFHaGio46677vJYf/r0aUepUqXMOXeqX7++IyQkxLF7926PbUeOHGne7++//3Zk5MCBA6YMs2bNytExW7Vq5WjXrp3Hdlld16xZM4/PktH2+l0rUqSIo3///mm27d69u6N27drmZ/0c+nl27tyZ4ecGANgTGW8AgO2ULFlSvv/+e9m+fbtphq1NpT/++GO54oorpFu3bnLu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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from matplotlib import pyplot as plt\n", "\n", "phase_spacing = 2 / (2**n_phase_qubits)\n", "phase_grid = [\n", " index * phase_spacing\n", " for index in range(2**n_phase_qubits)\n", "]\n", "counts = [phase_counts.get(phase, 0) for phase in phase_grid]\n", "probabilities = [count / n_shots for count in counts]\n", "\n", "fig, (counts_axis, probability_axis) = plt.subplots(\n", " 2, 1, figsize=(10, 8), sharex=True\n", ")\n", "bar_width = 0.8 * phase_spacing\n", "counts_axis.bar(phase_grid, counts, width=bar_width)\n", "probability_axis.bar(phase_grid, probabilities, width=bar_width)\n", "for axis in (counts_axis, probability_axis):\n", " for index, phase in enumerate(sorted(ideal_phases)):\n", " axis.axvline(\n", " phase,\n", " color=\"black\",\n", " linestyle=\"--\",\n", " linewidth=1,\n", " label=\"exact eigenphases\" if index == 0 else None,\n", " )\n", " axis.set_xticks(phase_grid[::4])\n", " axis.legend(loc=\"upper center\")\n", "counts_axis.set_ylabel(\"Counts\")\n", "probability_axis.set_ylabel(\"Probability\")\n", "counts_axis.set_title(\"Sample counts\")\n", "probability_axis.set_title(\"Sample probabilities\")\n", "fig.suptitle(\"Qubitized QPE with unary-iteration SELECT\")\n", "fig.supxlabel(\"Measured phase\")\n", "fig.tight_layout()\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": ".venv (3.13.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.13.3" } }, "nbformat": 4, "nbformat_minor": 5 }