{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# How to optimize controls with time symmetrization\n",
    "**Incorporate time symmetry into optimized waveforms**\n",
    "\n",
    "Boulder Opal exposes a highly-flexible [optimization engine](https://docs.q-ctrl.com/references/boulder-opal/boulderopal/graph/run_optimization) for general-purpose gradient-based optimization.  It can be directly applied to model-based control optimization for arbitrary-dimensional quantum systems.  \n",
    "\n",
    "In some cases, forcing control solutions to exhibit time symmetry can yield natural noise robustness while simplifying the optimization problem (by halving the dimensionality of the search space).\n",
    "In this user guide we will show an easy method to build time-symmetrized pulses.\n",
    "To learn the basics about control optimization, you can follow our [robust optimization tutorial](https://docs.q-ctrl.com/boulder-opal/toolkit/design/design-error-robust-quantum-logic-gates/learn-to-design-robust-single-qubit-gates-using-computational-graphs).\n",
    "\n",
    "\n",
    "## Summary workflow\n",
    "### 1. Define time-symmetry constraint in computational graph\n",
    "The flexible Boulder Opal optimization engine expresses all optimization problems as data flow graphs, which describe how optimization variables (variables that can be tuned by the optimizer) are transformed into the cost function (the objective that the optimizer attempts to minimize).  \n",
    "\n",
    "To enforce time symmetry, we create the control signals in two steps: we first create a standard signal for the first half of the gate duration, and then we create a copy (depending on the same underlying control parameters) that is reflected and concatenated with the original signal using the `graph.symmetrize_pwc` graph operation.\n",
    "```python\n",
    "pwc_signal = graph.symmetrize_pwc(half_pwc_signal, name=\"pwc_signal\")\n",
    "```\n",
    "\n",
    "### 2. Run graph-based optimization\n",
    "\n",
    "With the graph object created, an optimization can be run using the `boulderopal.run_optimization` function. The function returns the results of the optimization and should include the symmetrized PWC as an output node of the graph using `output_node_names`."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example: Time-symmetrized robust pulses for a single qubit\n",
    "\n",
    "In this example, we perform a robust optimization of a single qubit using symmetric pulses. The single-qubit system is represented by the following Hamiltonian:\n",
    "$$\n",
    "H(t) = \\frac{\\nu}{2} \\sigma_{z} + \\frac{1}{2}\\left(\\gamma(t)\\sigma_{-} + \\gamma^*(t)\\sigma_{+}\\right) + \\frac{\\alpha(t)}{2} \\sigma_{z} + \\beta(t) \\sigma_{z}  ,\n",
    "$$\n",
    "where $\\nu$ is the qubit detuning, $\\gamma(t)$ and $\\alpha(t)$ are, respectively, complex and real time-dependent pulses, and $\\beta(t)$ is a small, slowly-varying stochastic dephasing noise process.  Here $\\gamma(t)$ and $\\alpha(t)$ will be optimized subject to a time-symmetry constraint."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import qctrlvisualizer as qv\n",
    "import boulderopal as bo"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Your task (action_id=\"1828727\") has started.\n",
      "Your task (action_id=\"1828727\") has completed.\n",
      "\n",
      "Optimized cost:\t5.305e-09\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 720x540 with 3 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Define physical constraints\n",
    "gamma_max = 2 * np.pi * 8.5e6  # Hz\n",
    "alpha_max = 2 * np.pi * 8.5e6  # Hz\n",
    "nu = 2 * np.pi * 6e6  # Hz\n",
    "segment_count = 50\n",
    "duration = 154e-9  # s\n",
    "\n",
    "graph = bo.Graph()\n",
    "\n",
    "# Create detuning term.\n",
    "detuning = nu * graph.pauli_matrix(\"Z\") / 2\n",
    "\n",
    "# Create a complex PWC signal describing the first half of gamma(t)\n",
    "half_gamma = graph.complex_optimizable_pwc_signal(\n",
    "    segment_count=segment_count, maximum=gamma_max, duration=duration / 2\n",
    ")\n",
    "# Define gamma(t) by symmetrizing half_gamma\n",
    "gamma = graph.symmetrize_pwc(half_gamma, name=\"gamma\")\n",
    "# Create drive term\n",
    "drive = graph.hermitian_part(gamma * graph.pauli_matrix(\"M\"))\n",
    "\n",
    "# Create alpha(t) similarly\n",
    "alpha = graph.symmetrize_pwc(\n",
    "    graph.real_optimizable_pwc_signal(\n",
    "        segment_count=segment_count,\n",
    "        minimum=-alpha_max,\n",
    "        maximum=alpha_max,\n",
    "        duration=duration / 2,\n",
    "    ),\n",
    "    name=\"alpha\",\n",
    ")\n",
    "# Create clock shift term\n",
    "shift = alpha * graph.pauli_matrix(\"Z\") / 2\n",
    "\n",
    "# Create dephasing noise term\n",
    "dephasing = graph.pauli_matrix(\"Z\") / duration\n",
    "\n",
    "# Create target\n",
    "target_operator = graph.target(operator=graph.pauli_matrix(\"Y\"))\n",
    "\n",
    "# Create infidelity\n",
    "infidelity = graph.infidelity_pwc(\n",
    "    hamiltonian=detuning + drive + shift,\n",
    "    target=target_operator,\n",
    "    noise_operators=[dephasing],\n",
    "    name=\"infidelity\",\n",
    ")\n",
    "\n",
    "# Run the optimization\n",
    "optimization_result = bo.run_optimization(\n",
    "    cost_node_name=\"infidelity\",\n",
    "    output_node_names=[\"alpha\", \"gamma\"],\n",
    "    graph=graph,\n",
    "    optimization_count=4,\n",
    ")\n",
    "\n",
    "print(f\"\\nOptimized cost:\\t{optimization_result['cost']:.3e}\")\n",
    "\n",
    "# Plot the optimized controls\n",
    "qv.plot_controls(\n",
    "    {\n",
    "        \"$\\\\alpha$\": optimization_result[\"output\"][\"alpha\"],\n",
    "        \"$\\\\gamma$\": optimization_result[\"output\"][\"gamma\"],\n",
    "    }\n",
    ")"
   ]
  }
 ],
 "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.11.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
