{ "cells": [ { "cell_type": "markdown", "id": "0845df09", "metadata": {}, "source": [ "# User-Defined Gate" ] }, { "cell_type": "markdown", "id": "93647bc0", "metadata": {}, "source": [ "The software comes with classes for various Rydberg gates with two, three, or four atoms. Although many geometries and setups are covered, not every conceivable gate is implemented. If you want to optimize a pulse for a gate that does not yet exist in the RydOpt software, you can define your own gate class. For the optimizer to work, the class must have three methods:\n", "\n", "* `initial_basis_states()`: return tuple of basis states\n", "\n", "* `hamiltonian_functions_for_basis_states()`: return tuple of Hamiltonians under which basis states evolve\n", "\n", "* `process_fidelity()`: return process fidelity calculated from the time-evolved basis states\n", "\n", "As an example, we implement a class that describes a Y gate." ] }, { "cell_type": "code", "execution_count": 1, "id": "36c600d2", "metadata": {}, "outputs": [], "source": [ "# %pip install -q --progress-bar off rydopt # Uncomment for installation on Colab\n", "\n", "import rydopt as ro\n", "from rydopt.types import HamiltonianFunction\n", "import jax.numpy as jnp # jax.numpy should be imported after rydopt\n", "\n", "\n", "class YGate:\n", " def initial_basis_states(self) -> tuple[jnp.ndarray, ...]:\n", " return jnp.array([1, 0], dtype=complex), jnp.array([0, 1], dtype=complex)\n", "\n", " def hamiltonian_functions_for_basis_states(self) -> tuple[HamiltonianFunction, ...]:\n", " def hamiltonian(\n", " Delta_1: float, Delta_r: float, Xi: float, Omega: float\n", " ) -> jnp.ndarray:\n", " Delta = Delta_r - Delta_1\n", " return jnp.array(\n", " [\n", " [0, 0.5 * Omega * jnp.exp(-1j * Xi)],\n", " [0.5 * Omega * jnp.exp(1j * Xi), -Delta],\n", " ]\n", " )\n", "\n", " return hamiltonian, hamiltonian\n", "\n", " def process_fidelity(\n", " self, final_basis_states: tuple[jnp.ndarray, ...]\n", " ) -> jnp.ndarray:\n", " obtained_gate = jnp.stack(final_basis_states, axis=1)\n", " targeted_gate = jnp.array([[0, -1j], [1j, 0]])\n", " return jnp.abs(jnp.trace(targeted_gate.conj().T @ obtained_gate)) ** 2 / 4\n", "\n", " def dim(self) -> int:\n", " return 2" ] }, { "cell_type": "markdown", "id": "4953e23a", "metadata": {}, "source": [ "An instance of the user-defined gate can be passed to RydOpt's optimization method to find a pulse that implements the gate. For our educational example of a Y gate, a simple pulse ansatz where only the gate duration and a constant laser phase can be optimized is sufficient. " ] }, { "cell_type": "code", "execution_count": 2, "id": "321cd5d1", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Started optimization using 1 process\n", "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "aea8dbcbd6e84bd9b227ac722da82580", "version_major": 2, "version_minor": 0 }, "text/plain": [ "proc00: 0%| | 0/1000 [00:00 infidelity <= tol\n", "> parameters = (3.1420389754087643, [], [1.57088436], [])\n", "> duration = 3.1420389754087643\n" ] } ], "source": [ "# Create an instance of our gate class\n", "gate = YGate()\n", "\n", "# Pulse ansatz: constant phase\n", "pulse_ansatz = ro.pulses.PulseAnsatz(phase_ansatz=ro.pulses.const)\n", "\n", "# Initial pulse parameter guess:\n", "# duration, detuning parameters, phase parameters, Rabi parameters\n", "initial_params = (1.0, [], [1.0], [])\n", "\n", "# Optimize the pulse parameters\n", "opt_result = ro.optimization.optimize(gate, pulse_ansatz, initial_params)\n", "optimized_params = opt_result.params" ] }, { "cell_type": "markdown", "id": "6647df83", "metadata": {}, "source": [ "We obtain a pi-pulse (duration = 3.142038975408764) that rotates about the y-axis (phase = 1.57088436). Finally, we plot the pulse." ] }, { "cell_type": "code", "execution_count": 3, "id": "1739f4e3", "metadata": {}, "outputs": [ { "data": { "image/png": "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oOC5K+zv2rw4f15LhOWn3N8DJyIiImXD4sWLSUlJYebMmYUal5CQwNy5cy33yDmCMnUJVURERMqv1q1bF/j1V/fy8vKyrP/mKHQGTkRERMTBqIATERERcTAq4EREREQcjAo4EREREQejAk5ERETEwaiAExEREXEwKuBEREREHIwKOBEREREHowJORERExMGogBMRERFxMCrgRERERByMCjgRERERB6MCTkRERMTBqIATERERcTAq4ERERKRUOH36NCaTKc+vZcuWZRkTHh6Os7Mzr7zySqG2lZCQQNWqVXnwwQcxDMOWu1EsVMCJiIhIqRAfH8+wYcNo0KCB5TM/Pz8eeugh+vbty+DBg3n88cezjHnllVeoXLky06ZNy3HOxMREXFxc8PDwICMjw/K5l5cXkydPJiwsjDVr1thnh+xIBZyIiIiUCoGBgZw5c4bLly8zZcoUTp8+zfXr19m/fz9ffPEFn332GfXr17f0Dw0NZf/+/YwaNYpq1arlOGdYWBgZGRm0b98eZ2fnLG2jR4/G39+fyZMnk5qaatd9szUVcCIiIlIqPP300/z000/s2bOHWbNm0ahRozz7L1iwAIAXXngh1z4HDx4EoGPHjtnaKlWqxODBg4mKiuLzzz8vQuTFTwWciIiIlLhz587xr3/9iy5duuRYbP2v8PBwDhw4QIcOHWjcuHG29rVr12IymZg6dSoA77zzTpZ76bZs2QLA8OHDAVi6dKnN9qU4uJR0ACIiIiKZmZkAHD16lG+//ZZHHnkEk8mUa39zAfboo4/m2F6lShWGDRvG559/zu3btxk0aBCVKlWytLdv3x6AVq1a4e/vT1hYGFFRUdSoUcNGe2RfKuBERERKStptuHHOvttIT7/7vy52+JPvUw8qVMq/XwEEBQUxYcIEFixYQLdu3fD396dp06ZUq1YNX19fli9fnqX/t99+C+R8aRSgf//+dO/enTVr1uDp6ck//vGPXAvCjh07snXrVvbs2cNzzz1nk/2xNxVwIiIiJeXGOfigg103UcGek4/6F1RrarPpxo4di5OTE3/729+4fv06169fByA4ODhb3/DwcACaNs19+0eOHMEwDNq0aZPn2bxmzZqxdetWjh49qgJOREREpKA+/vhjxo0bR0ZGBs8++yx/+MMfuP/++6lZsyaVK1fO0jcpKYmkpCQAqlatmuucR44c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SYficDIzMwFwctK/ZQpDebOecmc95c46ypv17JW7qKgonJ2duXPnjtVz6LdZBqSnp1sOMimcq1evcvXq1ZIOw+Eob9ZT7qyn3FlHebOevXLn7OxMhQoVijRHmXoXanlVs2ZNoGgrOpdXtlgNuzxS3qyn3FlPubOO8ma90pw7nYETERERcTAq4EREREQcjAo4EREREQejAk5ERETEwaiAExEREXEwKuBEREREHIwW8hURERFxMDoDJyIiIuJgVMCJiIiIOBgVcCIiIiIORgWciIiIiINRASciIiLiYFTAiYiIiDgYFXAiIiIiDkYFXCm0ceNGHn74YXx8fHBzc6Nly5bMmzePtLQ0q+Y7cuQIAwYMICAggEqVKlGvXj1eeeUVrl27ZuPIS56tcrdq1SpMJlOeX998842d9qL4nD59msWLFzN8+HBatGiBi4sLJpOJWbNmFWne3bt307NnT/z8/KhcuTJNmjRhypQpJCYm2ijykmfr3IWEhOR7zJ06dcrGe1G80tLS2LNnDxMnTqRdu3Z4e3tToUIFqlevTu/evfnqq6+snrusH3P2yF15OObMPvvsM4YOHUrLli2pVq0aFSpUwMvLi/bt2zNnzhyrj5OSPO5c7L4FKZSxY8eycOFCXFxc6Nq1K+7u7nz77be88cYbbNu2jZ07d1K5cuUCzxcaGsof//hH0tPTadeuHfXq1ePw4cMsWbKEjRs3sm/fPho0aGDHPSo+ts4dQFBQEJ06dcqx7b777rNF2CVq2bJlLFy40KZzLliwgPHjx2MymejcuTMBAQHs3buX2bNns2nTJvbt24efn59Nt1kS7JE7gJYtW9KqVasc27y8vGy+veL0ww8/0L17dwCqV69Op06dcHNz45dffmHbtm1s27aNl156iQ8//BCTyVTgecvDMWev3EHZPubMli1bxoEDB2jatClt2rTB19eXq1evcvDgQQ4dOsSnn37KDz/8QM2aNQs8Z4kfd4aUGps3bzYAw93d3Thy5Ijl8+vXrxstWrQwAGPChAkFnu/y5ctGlSpVDMBYvny55fP09HTjueeeMwCjXbt2RmZmpk33oyTYOncrV640AGPYsGF2iLb0+Pjjj43XXnvN+Oyzz4yTJ08aQ4YMMQBj5syZVs139OhRw2QyGc7OzsaOHTssnyclJRndunUzAKN///62Cr9E2Tp3b731lgEY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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ro.characterization.plot_pulse(pulse_ansatz, optimized_params);" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.10.12" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": { "0de0fd875ade4082bf216b5316ac60ea": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "display": "inline-flex", "flex_flow": "row wrap", "width": "100%" } }, "2f6e9a281f734e5c98ea34e6c3569328": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, "3adac9d769fb41c3ac014b3ff43f2343": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { "layout": "IPY_MODEL_d0cddbc7ab0c4cc9865b32ea30657214", "style": "IPY_MODEL_82342bd39c4f4dca8aa2f4789d299e2b", "value": " 1000/1000 [00:00<00:00, 6930.31it/s, infidelity=6.12e-08, converged=1/1]" } }, "6305a8d6b3af443983ecdf1788e5d367": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": { "description_width": "", "font_size": null, "text_color": null } }, "660509b694d44362827601a6e5b28ff7": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "FloatProgressModel", "state": { "bar_style": "success", "layout": "IPY_MODEL_fb074666d3e848ada132e798ea44bb18", "max": 1000, "style": "IPY_MODEL_a1376d8ad2ca4d1f9883d55d75707341", "value": 1000 } }, "82342bd39c4f4dca8aa2f4789d299e2b": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": { "description_width": "", "font_size": null, "text_color": null } }, "830f4dc0b1934d74b90be9a5bc2af42b": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { "layout": "IPY_MODEL_2f6e9a281f734e5c98ea34e6c3569328", "style": "IPY_MODEL_6305a8d6b3af443983ecdf1788e5d367", "value": "proc00: 100%" } }, "a1376d8ad2ca4d1f9883d55d75707341": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "ProgressStyleModel", "state": { "description_width": "" } }, "aea8dbcbd6e84bd9b227ac722da82580": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HBoxModel", "state": { "children": [ "IPY_MODEL_830f4dc0b1934d74b90be9a5bc2af42b", "IPY_MODEL_660509b694d44362827601a6e5b28ff7", "IPY_MODEL_3adac9d769fb41c3ac014b3ff43f2343" ], "layout": "IPY_MODEL_0de0fd875ade4082bf216b5316ac60ea" } }, "d0cddbc7ab0c4cc9865b32ea30657214": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, "fb074666d3e848ada132e798ea44bb18": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "flex": "2" } } }, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 5 }