{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "17e57ad4",
   "metadata": {},
   "source": [
    "# Adjoint Optimization: High-Dimensional Gradient-Based Refinement\n",
    "\n",
    "> In the previous notebook, we used Bayesian Optimization to find a good starting design. The strength of that global optimization approach was its ability to efficiently search a low-dimensional parameter space. However, it was limited: we assumed the grating was uniform, with every tooth and gap being identical.\n",
    "\n",
    "> To push the performance further, we need to apodize the grating, which means varying the dimensions of each tooth individually to better match the profile of the incoming Gaussian beam. This drastically increases the number of design parameters. For our 15-element dual-layer grating, the design space just expanded from 5 global parameters to over 60 individual feature dimensions!\n",
    "\n",
    "> For such a high-dimensional problem, a global search is no longer efficient. In this notebook, we switch to a powerful local, gradient-based optimization technique, enabled by the adjoint method, to refine our design."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "85439f3a",
   "metadata": {},
   "source": [
    "## The Power of the Adjoint Method\n",
    "\n",
    "The key challenge in gradient-based optimization is computing the gradient itself. A naive approach like finite differences would require N+1 simulations to find the gradient with respect to N parameters. For our ~60 parameters, this is far too slow.\n",
    "\n",
    "This is where the adjoint method comes in. Tidy3D's automatic differentiation capability uses this method under the hood. It allows us to compute the gradient of our objective function (the coupling efficiency) with respect to all design parameters simultaneously in just two simulations per iteration, regardless of how many parameters there are. This efficiency is what makes it possible to locally optimize structures with thousands of free parameters. We start from the global design found earlier and use these gradients to walk toward a nearby, higher-performance solution."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a9e277fa",
   "metadata": {},
   "outputs": [],
   "source": [
    "import json\n",
    "from copy import deepcopy\n",
    "from pathlib import Path\n",
    "\n",
    "import autograd.numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import tidy3d as td\n",
    "from autograd import value_and_grad\n",
    "from optim import adam_update, apply_updates, clip_params, init_adam\n",
    "from setup import (\n",
    "    center_wavelength,\n",
    "    first_gap_sin,\n",
    "    get_mode_monitor_power,\n",
    "    make_simulation,\n",
    "    max_gap_si,\n",
    "    max_gap_sin,\n",
    "    max_width_si,\n",
    "    max_width_sin,\n",
    "    min_gap_si,\n",
    "    min_gap_sin,\n",
    "    min_width_si,\n",
    "    min_width_sin,\n",
    "    num_elements,\n",
    ")\n",
    "from tidy3d import web"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "6e59e2e5",
   "metadata": {},
   "outputs": [],
   "source": [
    "def objective(params):\n",
    "    \"\"\"Objective function for adjoint optimization.\n",
    "\n",
    "    Takes a dictionary of geometry parameters and returns a scalar loss.\n",
    "    The function is differentiable via autograd so the adjoint method can\n",
    "    supply gradients for every parameter in one shot.\n",
    "\n",
    "    Parameters\n",
    "    ----------\n",
    "    params:\n",
    "        Dictionary holding the current grating geometry arrays.\n",
    "\n",
    "    Returns\n",
    "    -------\n",
    "    float\n",
    "        Negative of the coupling efficiency so gradient descent maximizes power.\n",
    "    \"\"\"\n",
    "    # Build the tidy3d simulation with the current parameters. Autograd traces\n",
    "    # everything through the power extraction so the adjoint gradient can be\n",
    "    # computed efficiently.\n",
    "    sim = make_simulation(\n",
    "        params[\"widths_si\"],\n",
    "        params[\"gaps_si\"],\n",
    "        params[\"widths_sin\"],\n",
    "        params[\"gaps_sin\"],\n",
    "        first_gap_si=params[\"first_gap_si\"],\n",
    "        first_gap_sin=params[\"first_gap_sin\"],\n",
    "    )\n",
    "\n",
    "    sim_data = web.run(sim, task_name=\"gc_adjoint\", verbose=False)\n",
    "\n",
    "    # Convert the mode monitor result into a scalar objective (negative power)\n",
    "    # so minimization increases the coupled power at the target wavelength.\n",
    "    power_da = get_mode_monitor_power(sim_data)\n",
    "    freq0 = td.C_0 / center_wavelength\n",
    "    target_power = power_da.sel(f=freq0, method=\"nearest\")\n",
    "    return -target_power.item()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "53f5b7e5",
   "metadata": {},
   "source": [
    "## High-Dimensional Parameterization\n",
    "\n",
    "We load the best uniform design from the Bayesian search and expand those scalars into per-tooth arrays. Each layer now has individual widths and gaps, and `first_gap_si` remains a crucial phase-matching variable."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "e668aef6",
   "metadata": {},
   "outputs": [],
   "source": [
    "scalars = {}\n",
    "with Path(\"./results/gc_bayes_opt_best.json\").open(\"r\", encoding=\"utf-8\") as f:\n",
    "    data = json.load(f)\n",
    "    for key in data:\n",
    "        scalars[key] = float(data[key])\n",
    "\n",
    "num_iters = 80\n",
    "\n",
    "params0 = {\n",
    "    \"widths_si\": np.full(num_elements, scalars[\"width_si\"]),\n",
    "    \"gaps_si\": np.full(num_elements, scalars[\"gap_si\"]),\n",
    "    \"widths_sin\": np.full(num_elements, scalars[\"width_sin\"]),\n",
    "    \"gaps_sin\": np.full(num_elements, scalars[\"gap_sin\"]),\n",
    "    \"first_gap_si\": scalars[\"first_gap_si\"],\n",
    "    \"first_gap_sin\": first_gap_sin,\n",
    "}\n",
    "\n",
    "bounds = {\n",
    "    \"widths_si\": (min_width_si, max_width_si),\n",
    "    \"gaps_si\": (min_gap_si, max_gap_si),\n",
    "    \"widths_sin\": (min_width_sin, max_width_sin),\n",
    "    \"gaps_sin\": (min_gap_sin, max_gap_sin),\n",
    "    \"first_gap_si\": (None, None),\n",
    "    \"first_gap_sin\": (min_gap_sin, None),\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "9057369b",
   "metadata": {},
   "outputs": [],
   "source": [
    "vg_fun = value_and_grad(objective)\n",
    "params = deepcopy(params0)\n",
    "opt_state = init_adam(params, lr=1e-2)\n",
    "target_powers = []"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "58c4a412",
   "metadata": {},
   "source": [
    "## Running the Gradient Descent\n",
    "\n",
    "Each iteration proceeds as follows:\n",
    "1. Evaluate both the loss and gradient with `value_and_grad`.\n",
    "2. Use the Adam optimizer to compute a parameter update with momentum.\n",
    "3. Apply the update to the parameters.\n",
    "4. Clip the result to obey fabrication bounds."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "d4fbe647",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "iter 0: target_power=0.3426\n",
      "iter 1: target_power=0.3342\n",
      "iter 2: target_power=0.3857\n",
      "iter 3: target_power=0.4068\n",
      "iter 4: target_power=0.4014\n",
      "iter 5: target_power=0.4060\n",
      "iter 6: target_power=0.4225\n",
      "iter 7: target_power=0.4361\n",
      "iter 8: target_power=0.4367\n",
      "iter 9: target_power=0.4350\n",
      "iter 10: target_power=0.4383\n",
      "iter 11: target_power=0.4460\n",
      "iter 12: target_power=0.4502\n",
      "iter 13: target_power=0.4528\n",
      "iter 14: target_power=0.4527\n",
      "iter 15: target_power=0.4522\n",
      "iter 16: target_power=0.4579\n",
      "iter 17: target_power=0.4630\n",
      "iter 18: target_power=0.4638\n",
      "iter 19: target_power=0.4651\n",
      "iter 20: target_power=0.4674\n",
      "iter 21: target_power=0.4704\n",
      "iter 22: target_power=0.4720\n",
      "iter 23: target_power=0.4718\n",
      "iter 24: target_power=0.4754\n",
      "iter 25: target_power=0.4794\n",
      "iter 26: target_power=0.4783\n",
      "iter 27: target_power=0.4805\n",
      "iter 28: target_power=0.4838\n",
      "iter 29: target_power=0.4860\n",
      "iter 30: target_power=0.4885\n",
      "iter 31: target_power=0.4889\n",
      "iter 32: target_power=0.4911\n",
      "iter 33: target_power=0.4933\n",
      "iter 34: target_power=0.4945\n",
      "iter 35: target_power=0.4982\n",
      "iter 36: target_power=0.4977\n",
      "iter 37: target_power=0.4998\n",
      "iter 38: target_power=0.5021\n",
      "iter 39: target_power=0.5043\n",
      "iter 40: target_power=0.5069\n",
      "iter 41: target_power=0.5093\n",
      "iter 42: target_power=0.5109\n",
      "iter 43: target_power=0.5109\n",
      "iter 44: target_power=0.5135\n",
      "iter 45: target_power=0.5169\n",
      "iter 46: target_power=0.5192\n",
      "iter 47: target_power=0.5213\n",
      "iter 48: target_power=0.5230\n",
      "iter 49: target_power=0.5252\n",
      "iter 50: target_power=0.5280\n",
      "iter 51: target_power=0.5309\n",
      "iter 52: target_power=0.5341\n",
      "iter 53: target_power=0.5362\n",
      "iter 54: target_power=0.5384\n",
      "iter 55: target_power=0.5406\n",
      "iter 56: target_power=0.5440\n",
      "iter 57: target_power=0.5459\n",
      "iter 58: target_power=0.5498\n",
      "iter 59: target_power=0.5514\n",
      "iter 60: target_power=0.5528\n",
      "iter 61: target_power=0.5541\n",
      "iter 62: target_power=0.5543\n",
      "iter 63: target_power=0.5561\n",
      "iter 64: target_power=0.5567\n",
      "iter 65: target_power=0.5575\n",
      "iter 66: target_power=0.5591\n",
      "iter 67: target_power=0.5590\n",
      "iter 68: target_power=0.5606\n",
      "iter 69: target_power=0.5613\n",
      "iter 70: target_power=0.5619\n",
      "iter 71: target_power=0.5626\n",
      "iter 72: target_power=0.5636\n",
      "iter 73: target_power=0.5647\n",
      "iter 74: target_power=0.5638\n",
      "iter 75: target_power=0.5657\n",
      "iter 76: target_power=0.5663\n",
      "iter 77: target_power=0.5669\n",
      "iter 78: target_power=0.5676\n",
      "iter 79: target_power=0.5676\n"
     ]
    }
   ],
   "source": [
    "for n in range(num_iters):\n",
    "    value, grad = vg_fun(params)\n",
    "    target_power = -value\n",
    "\n",
    "    target_powers.append(target_power)\n",
    "    print(f\"iter {n}: target_power={target_power:.4f}\")\n",
    "\n",
    "    updates, opt_state = adam_update(grad, opt_state)\n",
    "    params = apply_updates(params, updates)\n",
    "    params = clip_params(params, bounds)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "e6abb0a4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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YxEdHY3i4mJ89tlnOHjwIF566SWMGDGixrXNmjXTXZOXl4fU1FS0bt0aSUlJerGkpaUhOTkZ3bt3h4eHB4YOHWqWPO9m6dKl+PHHH/Hcc89hx44desf8/Pxw//3344EHHoCzszOGDh2K8ePHo7y8HMuXL4dKpcLly5f1romKisJHH32EhQsXonXr1lCpVBgwYECN923cuDHeeOMNjB07FrGxsXjyySd1y3BDQkJ0wzv24Mcff8SkSZPw+OOPo23btrh58yY++eQTODk54bHHHtOdV9t3auHChdi+fTvuu+8+TJgwAY0aNcKyZctQWVmJN99806RYRo0aheHDhwMAFixYYPZcycHYehkOkaUNHTpUuLq6ioqKilrPGTNmjGjcuLEoLCwUQghx+PBhERsbK1xdXUVQUJBYsGCBWLly5V2X4QohRF5enhg7dqzw8fERzs7OonPnznpLUbVqW4ZbUFCgd56hLeCPHz8u+vbtK9zc3AQAo5bk5ufni+TkZNG6dWvh4uIilEqliIuL0y29rU67lPPzzz8X06dPFyqVSri5uYmEhARx7tw5vXPLy8vF//t//08olUoBQLckt7ZluO7u7jXer7btxlu2bCkSEhJqxKVdYqr9nRn6qf65fPvtt6JLly7C1dVVhISEiDfeeEOsWrWqxu81NzdXJCQkiKZNm+rdo7blv2lpaSIyMlK4uLiIZs2aiZEjR4qLFy/qnVNbztrY78bUrdhvj/X06dPi6aefFq1atRKurq6iWbNmon///uKHH37Qu9edvlMHDx4U8fHxwsPDQzRp0kT0799f/PLLL3rXa7+n+/btqzWXyspK4e3tLby8vPSWL1PDJIm6zmwjIvTp0wcuLi744YcfbB2KWWVkZKB///7YsGGD7l+sRPV18+ZNBAYGYujQoVi5cqWtwyEb4xwQonq4fPkyx7GJjLRx40YUFBTUuisvNSycA0JUB7/88gu+/vpr5OTk4F//+petwyGya7/++isOHz6MBQsWIDIy0myTscmxsQAhqoPly5fjf//7H6ZMmYKxY8faOhwiu/bRRx/h008/RUREhN7DCalh4xwQIiIisjrOASEiIiKrYwFCREREVsc5IAZoNBr8+eefaNq0qc23mSYiInIkQgiUlZUhMDCwxoM5q2MBYsCff/5p9PMNiIiIqKYLFy6gRYsWtR5nAWKAdrvsCxcuGP2cg7vRaDQoKCiAr6/vHStCRyPHvOSYE2SalxxzgkzzkmNOkGle9c2ptLQUwcHBd330BAsQA7TDLp6enmYtQG7cuAFPT0/ZfEkh07zkmBNkmpccc4JM85JjTpBpXubK6W5TGOTx2yIiIiKHwgKEiIiIrI4FCBEREVkdCxAiIiKyOhYgREREZHUsQIiIiMjquAyXiIhIxtQaNfacPIT80iKoPJujV5sIOCmcam23FhYgREREDshQAQFAr+1KeTHmbFiCy8X5uusClCo80v1+fLNve432hYkvYnDXWKvEzwKEiIjIjhkqNLb+9hNmpb2rV0Aom3hCkiRcrSi54/0uF+fjw+3rarTnFudj3LLpWJ70GqKDOlgkl+pYgBAREdmAMUMgm7N2GCw0iq+V1rifoTZTCAASgDlfpuK7f35Ur3sZgwUIERGRlRkqLAKUKsx/fDKaeSiRX1qE03kX8Pam5RC3XVvfQuNOBIA/r+bj4Lk/kOAfYLH3AQsQIiIiy7q9p+NKeTGeXT6zRmFxuTgfSctn2ihKfYXlVy3+HixAiIiIzMRQsXH7JFCFpKhRfNgbHw9vi78HCxAiIqI7uNMy1swTWTh54TTaBIfhakVJjWLDEI3QWC12U0kAArxV6NaSk1CJiIisxpgejNqWsTo66dZ/5w+fYpX9QFiAEBER1TIx1JDalrE6ikBvPwyLjqu5D4i3HxY8MQWDu8YiP9/yhRULECIikjVjdgKtbcWJPZJurVbxdvfS2/PD290LAPTaAr39MG/4C7qVNdXzn/nIBIO/F43GOkNELECIiEi2alvu6shDKNqeikFd+951J9Q7ba/upHDCve2irBz9/2EBQkREsmFMr4a9DKEoJMVdJ6RqezteGZqEMFVwjaLCUAFhy6LCFCxAiIjIIRkzYdQeaSd7Lhu3QG9oxOCE11u9HQmR/W0Wr6WwACEiIrtm7LNQHMWdioohkf1s+oRaa2IBQkREdsuUZ6HYoztNAjXE1vMyrIkFCBERWV19VqbYuviobRmrqcVGQ8cChIiIrMqRVqbcbRlr9Z1QY9pGstgwAQsQIiKyqOpblhdVluKdTSvscmXK3Vac3M5J4YTebbuhtbIFVCoVFAqF1WN2ZCxAiIjIbBxhZcrddgKV44oTe8QChIiIzMLYrcyt6U69GrXtBErWwQKEiIhMZqin49nlM+1uK/M79Wo0pBUn9sjmBcgHH3yAt956C7m5uejatSvef/999OjRw+C5a9aswdixY/XaXFxccOPGDd3rMWPGYO3atXrnxMfHY+vWrRbKgIioYTHU06GQFFYrPmp7FgpXoTgWmxYgaWlpSE5OxtKlS9GzZ0+kpqYiPj4e2dnZUKlUBq/x9PREdna27rUkSTXOGTRoEFavXq177eLiYqEMiIgals1ZOzBu2fQaxcbdthQ3pzs9C4XFhuOwaQGyePFiJCUl6Xo1li5dis2bN2PVqlWYNm2awWskSYK/v/8d7+vi4nLXc4iIyDRqjRqz0t616jBLXZ6FQo7BZgVIVVUVDhw4gOnTp+vaFAoF4uLikJmZWet15eXlaNmyJTQaDbp164bXXnsNHTt21DsnIyMDKpUK3t7eGDBgABYuXIjmzZvXes/KykpUVlbqXpeW/r3JjUajMdtjiTUaDYQQVnvMsbXIMS855gSZ5iXHnGDHeWWeyLLYBNNAbxUejorDxv0/3LYyRYX5w6dgSGQ/vfPt5Xdjr59VfdQ3J2Ovs1kBUlhYCLVaDT8/P712Pz8/HD9+3OA17dq1w6pVq9ClSxeUlJTg7bffRu/evfH777+jRYsWwK3hl0cffRShoaHIycnBjBkzMHjwYGRmZsLJyXDXXEpKCubNm1ejvaCgQG9+SX1oNBqUlJRACCGrteJyzEuOOUGmeckxJ9hhXmqNGgfP/YEfjtX+j0NTaHs1nu/3JO5pHgAfD290a9kBTgonjOv9GA6e+wOF5Vf12vPz7WdlTXX29lmZQ31zKisrM+o8m09CNUVMTAxiYmJ0r3v37o327dtj2bJlWLBgAQBgxIgRuuOdO3dGly5d0KpVK2RkZGDgwIEG7zt9+nQkJyfrXpeWliI4OBi+vr7w9PQ0S+wajQaSJMHX11c2X1LINC855gSZ5iXHnGBneW3JysDsDalm7fmorVdDK8E/wGzvZWn29FmZS31zcnV1Neo8mxUgPj4+cHJyQl5enl57Xl6e0fM3GjdujMjISJw6darWc8LCwuDj44NTp07VWoC4uLgYnKiqUCjM+oWSJMns97QHcsxLjjlBpnnJMSfYMC9jnsVyJwpJoTchVbsyxdvdS7ZblsvxO1ifnIy9xmYFiLOzM6KiopCeno5hw4YBt6qu9PR0TJo0yah7qNVqHDlyBEOGDKn1nIsXL6KoqAgBAY5TURMR2UJ9NhLTrkdcNm6BwWWwGo2GW5aTHpsOwSQnJ2P06NGIjo5Gjx49kJqaioqKCt2qmFGjRiEoKAgpKSkAgPnz56NXr15o3bo1iouL8dZbb+HcuXMYN24ccGuC6rx58/DYY4/B398fOTk5mDp1Klq3bo34+HhbpkpEZNdqW15rLG5jTqayaQGSmJiIgoICzJkzB7m5uYiIiMDWrVt1E1PPnz+vVylfvXoVSUlJyM3Nhbe3N6KiovDLL7+gQ4cOAAAnJyccPnwYa9euRXFxMQIDA/HAAw9gwYIF3AuEiKgW9Vle+3S/4UiI7M89OMhkNp+EOmnSpFqHXDIyMvRev/vuu3j33XdrvZebmxu2bdtm9hiJiOSm+lyP/JKiOk8yTYjsz704qE5sXoAQEZF1meOhcdKtYZdebSLMGhs1HCxAiIgakPrO9UC1CacLnpjCYReqMxYgREQypx1uyS0uwJwNqfXeSp0TTskcWIAQEclYfYdb7vYsFqK6YgFCRCQj9d1I7Hbs7SBLYQFCRCQT5phcCgDzhk+Gyqs5ezvIoliAEBHJgLkmlwZ4+2HcgCdYdJDFsQAhInJA1Ydamnt4Y1baYq5sIYfCAoSIyMGYa6ilOs71IGtjAUJE5EDMMdSi1dzDG/Mfnwx/pS/nepDVsQAhInIQ9XlmS3Xa4ZY3R05ljwfZDAsQIiI7p53vsSt7v1mGXTjcQvaABQgRkR3jRmIkVyxAiIjs1JasDCQtn8GNxEiWWIAQEdkRtUaNzBNZyD5/Cou/X2NS8SEB8Feq8N6Y2Sgsu8reDrJrLECIiOxEfYZbtBNLFya+iD7h3c0eG5G5sQAhIrID9V1ey6EWcjQsQIiIbKw+y2unDB6LPuHRHGohh8MChIjIBqpvpZ5fUmTysIv2uS2vDB3HwoMcEgsQIiIrM8fSWvC5LeTgWIAQEVlY9d6O03kX8Pam5VxaSw0eCxAiIgsy14Pj+NwWkhsWIEREZmTu3g4+t4XkigUIEZGZmKu3ozoOt5BcsQAhIjKD+u7jUd2rj70AFzRCm+AwxLSN5HALyRILECKiOqg+1NLcwxuz0hbXu/jQLq19pv/jKCosgkqlgkKhMFPERPaFBQgRkYksMdTCpbXU0LAAISIygTmHWqqrPtdDo9GY+e5E9ocFCBHRXWiHW3KLCzBnQ6pZhloEgFeGJiFMFcyn1lKDxAKEiOgOuLKFyDJYgBAR1cIcwy3s7SAyjAUIEZEB9XlCbXXs7SAyjAUIEdEt5nhCrb9ShffGzEZh2VX2dhDdAQsQIiIzPqF2YeKL6BPe3ayxEckRCxAiavDMMdeDQy1EpmEBQkSyV31oRTssAqDeS2v5hFqiumMBQkSyZmhoRdnEE5Ik4WpFSZ3uySfUEtUfCxAiko3bezqulBfj2eUza/RuFF8rrdf7cLiFqP5YgBCRLBjq6VBICrNtmT5v+GSovJpzZQuRmbAAISKHtyUrA0nLZ9QoNjSi/s9U0T6hdtyAJ1h0EJkRCxAickhqjRqZJ7KQff4UFn+/xuwPhwOfUEtkUSxAiMjhWOL5LIZwrgeR5bAAISKHYo49O+6ES2uJrIMFCBHZPe3qlvrs2XE3XFpLZF0sQIjIrpljuEUhKfQmpHq7ewGA3j4gHG4hsi4WIERkN4zdx8NY2l6NZeMWoJmH0uBOqNXbONxCZD0sQIjILlhiH4+79Wrc2y6qHncnovpgAUJENlfbxNK67OPBSaREjoEFCBHZhLknlnISKZFjUdg6gA8++AAhISFwdXVFz549sXfv3lrPXbNmDSRJ0vtxdXXVO0cIgTlz5iAgIABubm6Ii4vDyZMnrZAJERlrc9YORM94BI+9OxETV7+KovLiet8zwNsPK8ansPggchA27QFJS0tDcnIyli5dip49eyI1NRXx8fHIzs6GSqUyeI2npyeys7N1ryVJ0jv+5ptv4r333sPatWsRGhqK2bNnIz4+Hn/88UeNYoWIzMvQY+9vHwIx5z4ezT2USH5gDNrd0xoxbSM53ELkQGxagCxevBhJSUkYO3YsAGDp0qXYvHkzVq1ahWnTphm8RpIk+Pv7GzwmhEBqaipmzZqFhx9+GADw8ccfw8/PDxs3bsSIESMsmA1Rw2ZoEmmAUoWFiS9iUNe+FhlueePJqYgO6gCVSgWFwuYdukRkApsVIFVVVThw4ACmT5+ua1MoFIiLi0NmZmat15WXl6Nly5bQaDTo1q0bXnvtNXTs2BEAcObMGeTm5iIuLk53vpeXF3r27InMzMxaC5DKykpUVlbqXpeW/v2obo1GA42m/g+z0t5LCGG2+9kLOeYlx5xg4bxqexhcbnE+nlk2Hd7unrhaUVrn+9++j0eAtwrzh0/BoK59UVBQwM/KAcgxJ8g0r/rmZOx1NitACgsLoVar4efnp9fu5+eH48ePG7ymXbt2WLVqFbp06YKSkhK8/fbb6N27N37//Xe0aNECubm5unvcfk/tMUNSUlIwb968Gu0FBQW4ceNGHTPUp9FoUFJSAiGErP6lJse85JgTLJiXWqPGzLR3DPZqaNvqWnzoejoeewlKd08Ull+Fj4c3urXsACeFE/Lz8/lZOQg55gSZ5lXfnMrKyow6z6FWwcTExCAmJkb3unfv3mjfvj2WLVuGBQsW1Pm+06dPR3Jysu51aWkpgoOD4evrC09Pz3rHjVsfqCRJ8PX1lc2XFDLNS445wYJ5/XLiIPJKi8x2v+q0PR1DIvsZPM7PynHIMSfINK/65mTsfEubFSA+Pj5wcnJCXl6eXnteXl6tczxu17hxY0RGRuLUqVMAoLsuLy8PAQEBeveMiIio9T4uLi5wcXGp0a5QKMz6hZIkyez3tAdyzEuOOcHMeWknnG45lGGW2LRM3ceDn5XjkGNOkGle9cnJ2GtsVoA4OzsjKioK6enpGDZsGHCr6kpPT8ekSZOMuodarcaRI0cwZMgQAEBoaCj8/f2Rnp6uKzhKS0vx66+/4vnnn7dgNkTyZmiL9DkbltTr+Sy34z4eRA2LTYdgkpOTMXr0aERHR6NHjx5ITU1FRUWFblXMqFGjEBQUhJSUFADA/Pnz0atXL7Ru3RrFxcV46623cO7cOYwbNw64VbFNmTIFCxcuRJs2bXTLcAMDA3VFDhGZxhwPgzMGHwZH1LDYtABJTExEQUEB5syZg9zcXERERGDr1q26SaTnz5/X68q5evUqkpKSkJubC29vb0RFReGXX35Bhw4ddOdMnToVFRUVePbZZ1FcXIz77rsPW7du5R4gRHVgzj07DOG26UQNlySEsNTfLQ6rtLQUXl5eKCkpMesk1Pz8fNntVyDHvOSYE4zMq/pQS3MPb0xeOx+Xiwvq/J7e7l64WlECqdqKGFQbbqnvzqUN+bNyNHLMCTLNq745Gfv/UIdaBUNElmPOoZan+w1HQmR/9GoTga2//VRzgzIOtxA1eCxAiBqo6r0dp/Mu4O1Ny8021JIQ2V/3qPuEyP66nVDvtEU7ETUsLECIGgC1Ro3ME1k4eeE02gSH4WpFidlXseDW0EqAtx96tdFf9u6kcNIVJEREYAFCJH/WWsWindex4Ikp7N0gortiAUIkY5ZexVId53UQkSlYgBDJyO2rWGalLbZI8RHo7Yd5w19AMw8l53UQUZ2wACGSCUsNtUgA/JUqvDdmNgrLrrLYICKzYAFC5KAsuYpFSzuvY2Hii+gT3t3MdyeihsykAuSvv/7C+PHjMXv2bISGhlouKiK6I26PTkSOzqQCpHHjxvjqq68we/Zsy0VERHdkqYml2t1KXxmahDBVMIdaiMiiTB6CGTZsGDZu3IgXX3zRMhERUa3UGjVmpb1rkYml7O0gImsyuQBp06YN5s+fj927dyMqKgru7u56x1944QVzxkdE1eZ77Mreb5ZhF65iISJbM7kAWblyJZRKJQ4cOIADBw7oHZMkiQUIkZnVd76HdhXLklGzkHPpLNoEhyGmbSSLDSKyKZMLkDNnzlgmEqIGpvoqltp6IOo736P6Kpb7wqPRttk9snpqJxE5rjovw62qqsKZM2fQqlUrNGrE1bxEpjDUqxGgVGH+45N1wyLm2Eis+rwOjUZjltiJiMzB5Mrh2rVr+Oc//4m1a9cCAE6cOIGwsDD885//RFBQEKZNm2aJOIlko7ZejcvF+UhaPrPO9+UqFiJyJCb3w06fPh2//fYbMjIy4OrqqmuPi4tDWlqaueMjkhVLr2JZOT4FLyU8g0e6P4B720Wx+CAiu2VyD8jGjRuRlpaGXr16QZIkXXvHjh2Rk5Nj7viIHF71uR75JUVm3zxsyuCx6BMezd4OInIoJhcgBQUFUKlUNdorKir0ChIisuyOpdKtXo9Xho5j4UFEDsfkIZjo6Ghs3rxZ91pbdKxYsQIxMTHmjY7IgWnneliq+ACABU9MYfFBRA7J5B6Q1157DYMHD8Yff/yBmzdvYsmSJfjjjz/wyy+/YOfOnZaJksjBWHKuB7hrKRHJgMkFyH333YdDhw7h9ddfR+fOnfH999+jW7duyMzMROfOnS0TJZEdutM+HntOHjJbz4d2I7H3xsxGYdlVrm4hIlmo0wYerVq1wvLly80fDZGDuNs+HpuzdpjlfapvJNYnvLtZ7klEZA9MLkBGjRqF/v37IzY2FmFhYZaJisiO3N7TcaW8GM8un2mWfTzmDZ8MlVdz3X3nbFiiX9RwqIWIZMrkAsTZ2RkpKSl45plnEBQUhNjYWPTr1w+xsbFo06aNZaIkshFDPR0KSVHvuR3aFSzjBjyhN5QyJLLfXbdnJyKSA5MLkBUrVgAALl26hJ9++gk7d+7EO++8g/HjxyMgIAAXL160RJxEVrclKwNJy2fUKDY0on5bmt9pBYuTwgn3touq1/2JiBxBnR/i4u3tjebNm8Pb2xtKpRKNGjWCr6+veaMjshG1Ro3ZG1IttmMph1WIqKEzuQCZMWMGMjIykJWVhfbt2yM2NhbTpk1D37594e3tbZkoiaxErVEj80QWth3cafb9O57uNxwJkf05rEJEVJcC5PXXX4evry/mzp2LRx99FG3btrVMZERWZsldSwEgIbI/h1eIiG4xuQDJysrCzp07kZGRgXfeeQfOzs66iaj9+vVjQUIOqbYn1JqDdsJprzYRFrg7EZFjMrkA6dq1K7p27YoXXngBAPDbb7/h3XffxcSJE6HRaKBWqy0RJ5HZaZfX5hYXYE4d5nsoJMVdJ6Ryy3QiIsNMLkCEEMjKykJGRgYyMjKwa9culJaWokuXLoiNjbVMlET1YGjH0q2//VTn4RZtUbFs3AI081Dq7Q/CfTyIiIxjcgHSrFkzlJeXo2vXroiNjUVSUhL69OkDpVJpmQiJTGBo07DbiwJlE08UXyut83vcqajgPh5ERMYxuQD59NNP0adPH3h6elomIqI6MnYSaV2LjymDx6JPePQdiwru40FEZByTC5CEhATdn7WbjrVo0cK8URGZyBqTSF8ZOo69GUREZqIw9QKNRoP58+fDy8sLLVu2RMuWLaFUKrFgwQJoNPXbIZKoLtQaNWalvWux4gOcREpEZHYm94DMnDkTK1euxOuvv457770XALBr1y68+uqruHHjBhYtWmSJOIlqtefkIYvt3cFJpERElmFyAbJ27VqsWLECDz30kK6tS5cuCAoKwoQJE1iAkNXllxaZ9X7NPZRIfmAM2t3TGjFtI9nzQURkASYXIFeuXEF4eHiN9vDwcFy5csVccRHdlXbFy4nLZ8xyP+1wyxtPTkV0UAeoVCooFCaPUhIRkRHqtBHZv//9b7z33nt67f/+97/RtWtXc8ZGVKv6bJsuARAAvN29cLWiRNeuHW4Z3DUW+fmWGdIhIqK/mVyAvPnmm0hISMAPP/yAmJgYAEBmZiYuXLiALVu2WCJGIj31XfGiLTQGde1rcM8OTqYmIrI8kwuQ2NhYnDhxAh9++CGOHTsGAHj00UcxYcIEBAYGWiJGIh1TV7wEevth3vAX9HYsrb6PB/fsICKyDZMKkLNnz2L79u2oqqrCiBEj0KlTJ8tFRmSAsStejNk0jIiIbMfoAmTHjh148MEHcf369b8vbNQIq1atwj/+8Q9Lxkekx9gVL+0CQ9m7QURkx4ye4j979mzcf//9uHTpEoqKipCUlISpU6daNjqSNbVGjd3ZB/DNvu+xO/sA1Jq7P0lZ5dncqHsbex4REdmG0T0gR48exS+//IKAgAAAwFtvvYVly5ahqKgIzZvzL3syjaFVLAFKFeY/PrnGfA3cGnrJLy1Ccw9veDVpipJrZQbvq902XXsdERHZJ6MLkNLSUvj4+OheN2nSBG5ubigpKWEBQiapbRXL5eJ8JC2fqdembOIJSZL0lsvWhtumExE5DpMmoW7btg1eXl661xqNBunp6Th69KiurfoOqUS3M3UVy52eXOvt7omrFf93nNumExE5DpMKkNGjR9doGz9+vO7PkiRBrb77OD41LNodS/NLi5BfUmSW57ZIAFwbu2LDlEUoLLtaY3ktERHZN6MnoWo0mrv+1KX4+OCDDxASEgJXV1f07NkTe/fuNeq69evXQ5IkDBs2TK99zJgxkCRJ72fQoEEmx0XmsTlrB6JnPILH3p2I51fOwdwvl5jlvuLWkI1CUuCR7g/g3nZRLD6IiByITR90kZaWhuTkZMydOxcHDx5E165dER8ff9dtsM+ePYuXX34Zffr0MXh80KBBuHz5su7n888/t1AGdCfauR6WelItLPAgOiIisg6bFiCLFy9GUlISxo4diw4dOmDp0qVo0qQJVq1aVes1arUaI0eOxLx58xAWFmbwHBcXF/j7++t+vL29LZgFGWLqXI+64nJbIiLHZPJW7OZSVVWFAwcOYPr06bo2hUKBuLg4ZGZm1nrd/PnzoVKp8Mwzz+Dnn382eE5GRgZUKhW8vb0xYMAALFy48I4rdSorK1FZWal7XVr698RG7dCSOWg0GgghZPeckdryyjyRZdGej7+X26rQo1UXs/9OG9pn5cjkmBNkmpccc4JM86pvTsZeZ7MCpLCwEGq1Gn5+fnrtfn5+OH78uMFrdu3ahZUrV+LQoUO13nfQoEF49NFHERoaipycHMyYMQODBw9GZmYmnJwMzxFISUnBvHnzarQXFBTgxo0bJudmiEajQUlJCYQQsnrE++15qTVqHDz3B344VnsRWV/a5bYv3T8WRYXmH4JpKJ+VHMgxJ8g0LznmBJnmVd+cysoM79N0O5sVIKYqKyvDU089heXLl+vtR3K7ESNG6P7cuXNndOnSBa1atUJGRgYGDhxo8Jrp06cjOTlZ97q0tBTBwcHw9fWFp6enWeLXaDSQJAm+vr6y+ZLitry2/vYTZm9INann49XHXoCvZzP4efngSnkx5n75nt713u5///71l9uqMH/4FAyJ7GfmbP7WED4rueQlx5wg07zkmBNkmld9c3J1dTXqPJMLkLCwMOzbt6/GkEZxcTG6deuG06dPG3UfHx8fODk5IS8vT689Ly8P/v7+Nc7PycnB2bNnMXToUF2btpunUaNGyM7ORqtWrQzG6+Pjg1OnTtVagLi4uMDFxaVGu0KhMOsXSpIks9/THkiShK2//YSk5TOMnvOh3bE0aWCi3uqVhG79dUt2De2Eaq3ltnL+rOSWlxxzgkzzkmNOkGle9cnJ2GtMLkDOnj1rcLltZWUlLl26ZPR9nJ2dERUVhfT0dN1SWu3GZpMmTapxfnh4OI4cOaLXNmvWLJSVlWHJkiUIDg42+D4XL15EUVGRbgt5Mj+1Ro3ZG1JNKj5Qy46lTgongw+R44PliIjkxegC5Ntvv9X9+fYdUdVqNdLT0xESEmLSmycnJ2P06NGIjo5Gjx49kJqaioqKCowdOxYAMGrUKAQFBSElJQWurq7o1KmT3vVKpRIAdO3l5eWYN28eHnvsMfj7+yMnJwdTp05F69atER8fb1JsZLyD5/4wadiFO5YSEZHRBYi2l0KSpBo7ojZu3BghISF45513THrzxMREFBQUYM6cOcjNzUVERAS2bt2qm5h6/vx5k7p/nJyccPjwYaxduxbFxcUIDAzEAw88gAULFhgcYiHzKCy/atR5T/cbjoTI/tyxlIiIjC9AtPMtQkNDsW/fvjtOBDXFpEmTDA654NZy2jtZs2aN3ms3Nzds27bNLHGR8Xw8jNtnJSGyP4dSiIgIqMtGZGfOnNEVH+ZaokqOrVvLDvDzqr0glQAEevvpJpQSERGZXIBoNBosWLAAQUFB8PDw0K16mT17NlauXGmJGMnOOSmc0Dm4ncFjd5pwSkREDZfJBcjChQuxZs0avPnmm3B2dta1d+rUCStWrDB3fGTH1Bo1fjlxEB/v3ogff/9747FmHkq9cwK8/bBifAonnBIRkR6Tl+F+/PHH+M9//oOBAwfiueee07V37dq11h1MSX42Z+3ArLR39Va/uDR2xhtPvoJmHkqr7tlBRESOx+QC5NKlS2jdunWNdo1Gg7/++stccZGNqDXqu276pX3K7e37flT+VYVnl8/EivEpeKT7A1aNm4iIHIvJBUiHDh3w888/o2XLlnrtX375JSIjI80ZG1mQoUJj628/1ejVCFCqsDDxRd0QijFPuZ39RSoGde3Lng8iIqqVyQXInDlzMHr0aFy6dAkajQZff/01srOz8fHHH2PTpk2WiZLMytDwibKJJ4qvldY4N7c4H88sm45XhiYhTBWM/JKiO246JgD8eTUPe04e4pJbIiKqlckFyMMPP4zvvvsO8+fPh7u7O+bMmYNu3brhu+++w/3332+ZKMlsahs+MVR84FZBAQBvfbfcpPfJLzX/U2qJiEg+6vQ03D59+mD79u3mj4YsypjhE3NReTY34iwiImqo6lSAkGPac/KQSc9sqQvtU2656RgREd2JyQWIt7c3JEmq0S5JElxdXdG6dWuMGTNG90A5sh+WHhbhpmNERGSsOk1CXbRoEQYPHowePXoAAPbu3YutW7di4sSJOHPmDJ5//nncvHkTSUlJloiZ6sjSwyJ8yi0RERnL5AJk165dWLhwod4mZACwbNkyfP/99/jqq6/QpUsXvPfeeyxA7EyvNhEIUKqQW5xvtnkgrz72AlzQCG2CwxDTNpI9H0REZBSTt2Lftm0b4uLiarQPHDhQ9yTaIUOG6J4RQ/bDSeGEhYkvGjymHT7xdvcy6l7aB8w90/9xDO7cF73bdmPxQURERjO5AGnWrBm+++67Gu3fffcdmjVrBgCoqKhA06ZNzRMhmVVCZH/866HxNdoDvP2wcnwKjr61BV+9+AE+emY+XnkwCVK14kSLcz2IiKi+TB6CmT17Np5//nns2LFDNwdk37592LJlC5YuXQoA2L59O2JjY80fLZlFUXkxACC2fU+M6J1QY8v16huIhQeF1dwdtdpcD41GY4MMiIjI0ZlcgCQlJaFDhw7497//ja+//hoA0K5dO+zcuRO9e/cGALz00kvmj5TMQqPRYHPWDgDAM/2H44Eufe54fkJkfwzq2veuz4chIiIyhUkFyF9//YXx48dj9uzZ+Pzzzy0XFVlM1tk/8OfVfHi4NkHf9j2MusZJ4cRt1YmIyKxMmgPSuHFjfPXVV5aLhizuu4M/AgDu73wfXBu72DocIiJqoEyehDps2DBs3LjRMtGQRQkhsOlWAfJgN+7VQUREtmPyHJA2bdpg/vz52L17N6KiouDu7q53/IUXXjBnfGRGh89n4+KVXLg5u6J/xxhbh0NERA2YyQXIypUroVQqceDAARw4cEDvmCRJLEDskFqjxp6Th/Cf9PUAgIEde6OJs6utwyIiogbM5ALkzJkzlomELGJz1o4ay2h3n9iPzVk7uGU6ERHZjMlzQMhxbM7agXHLptd4Am5xRSnGLZuuW45LRERkbSb3gADAxYsX8e233+L8+fOoqqrSO7Z48WJzxUb1oNaoMSvtXYPPfBG3djOd/UUqBnXtyz09iIjI6kwuQNLT0/HQQw8hLCwMx48fR6dOnXD27FkIIdCtWzfLREkm23PyUI2ej+oEgD+v5mHPyUPc44OIiKzO5CGY6dOn4+WXX8aRI0fg6uqKr776ChcuXEBsbCwef/xxy0RJJssvLTLreUREROZkcgFy7NgxjBo1CgDQqFEjXL9+HR4eHpg/fz7eeOMNS8RIdaDybG7W84iIiMzJ5ALE3d1dN+8jICAAOTk5umOFhYXmjY7qrFebCAQoVTWeZKslAQj09kOvNhFWjoyIiMiEAmT+/PmoqKhAr169sGvXLgDAkCFD8NJLL2HRokV4+umn0atXL0vGSiZwUjhhYeKLBo9pi5IFT0zhBFQiIrIJowuQefPmoaKiAosXL0bPnj11bQMHDkRaWhpCQkKwcuVKS8ZKJkqI7I/Zj06q0R7g7YcV41O4DwgREdmM0atghPh7QWdYWJiuzd3dHUuXLrVMZGQWao0GABAd1gnP9H8CKs/m6NUmgj0fRERkUyYtw5Wk2mYUkL3aeWwvAOCR7vF4pPsDtg6HiIgIMLUAadu27V2LkCtXrtQ3JjKTa1U3sDfnNwBAbPsetg6HiIhIx6QCZN68efDy8rJcNGRWv548hKqbfyHI2w+t/O6xdThEREQ6JhUgI0aMgEqlslw0ZFYZx34FAPRt34PDZ0REZFeMXgXD/4E5np9uzf+I7cDhFyIisi9GFyDaVTDkGPJKCnHsUg4kSUKf8O62DoeIiEiP0UMwmlvLOckx/HRsHwCgc3BbNPdQ2jocIiIiPSZvxU6OQbv8ti9XvxARkR0yaRIq2YZao8aek4eQX1pk1EZiQgj8fPzvHpB+7XtaMVIiIiLjsACxc5uzdmBW2ru4XJyvawtQqrAw8UWDW6mrNWp8kbkFeSWFcHZqjG6hHa0cMRER0d1xCMaObc7agXHLpusVHwCQW5yPccumY3PWjhrnR894BC9+sggAUKX+C/fOTaxxHhERka2xALFTao0as9LehaG1R9q22V+kQq1RA3UoVoiIiGyJBYid2nPyUI1iojoB4M+redhz8pDJxQoREZGtsQCxU/mlRUafZ0qxQkREZA84CdVOqTybG3Ve9p9nkP3nGaPONbaoISIisjQWIHaqV5sIBChVyC3ONzi0opX6v9VG39PYooaIiMjSOARjp5wUTliY+KJZ7iUBCPT2Q682EWa5HxERUX3ZvAD54IMPEBISAldXV/Ts2RN79+416rr169dDkiQMGzZMr10IgTlz5iAgIABubm6Ii4vDyZMnLRS9ZSVE9sdHzyyo1z20jxBc8MSUO25eRkREZE02LUDS0tKQnJyMuXPn4uDBg+jatSvi4+ORn1/7hEoAOHv2LF5++WX06dOnxrE333wT7733HpYuXYpff/0V7u7uiI+Px40bNyyYieW09A0CADR1dceUwWNMvj7A2w8rxqcY3LSMiIjIVmw6B2Tx4sVISkrC2LFjAQBLly7F5s2bsWrVKkybNs3gNWq1GiNHjsS8efPw888/o7i4WHdMCIHU1FTMmjULDz/8MADg448/hp+fHzZu3IgRI0ZYKTPzyTr7BwCgR+uuaBcYZtQ1Lw4Zi7YBoUZt205ERGQLNitAqqqqcODAAUyfPl3XplAoEBcXh8zMzFqvmz9/PlQqFZ555hn8/PPPesfOnDmD3NxcxMXF6dq8vLzQs2dPZGZm1lqAVFZWorKyUve6tLQUuPUEYHM9BVij0UAIYfL9Dp4+CgCIaNkevk2bGXXNvW2j0LttN733tpS65mXP5JgTZJqXHHOCTPOSY06QaV71zcnY62xWgBQWFkKtVsPPz0+v3c/PD8ePHzd4za5du7By5UocOmR4P4vc3FzdPW6/p/aYISkpKZg3b16N9oKCArMN3Wg0GpSUlEAIAYXC+JGv/TlHAAChykCEegbAz7M58kuLDK6MkQCoPH0Q6hlw12Esc6lrXvZMjjlBpnnJMSfINC855gSZ5lXfnMrKyow6z2GW4ZaVleGpp57C8uXL4ePjY9Z7T58+HcnJybrXpaWlCA4Ohq+vLzw9Pc3yHhqNBpIkwdfX1+gPtORaGc4WXQIAxHaNQXMPJRYlvoSk5TMgVdvlFNUmmy5KTEaAf4BZYjZGXfKyd3LMCTLNS445QaZ5yTEnyDSv+ubk6upq1Hk2K0B8fHzg5OSEvLw8vfa8vDz4+/vXOD8nJwdnz57F0KFDdW3abp5GjRohOztbd11eXh4CAgL07hkRUfsSVBcXF7i4uNRoVygUZv1CSZJk0j2PXMgGALT0CYKv59/DLw9GDcAKRUrNJ+R6+2HBE1NsMtnU1LwcgRxzgkzzkmNOkGlecswJMs2rPjkZe43NChBnZ2dERUUhPT1dt5RWo9EgPT0dkyZNqnF+eHg4jhw5otc2a9YslJWVYcmSJQgODkbjxo3h7++P9PR0XcFRWlqKX3/9Fc8//7yVMjMf7QTUyJAOeu0Jkf0xqGtf7Dl5CPmlRZxsSkREDsemQzDJyckYPXo0oqOj0aNHD6SmpqKiokK3KmbUqFEICgpCSkoKXF1d0alTJ73rlUolAOi1T5kyBQsXLkSbNm0QGhqK2bNnIzAwsMZ+IY6gtgIEtzYqu7ddlA2iIiIiqj+bFiCJiYkoKCjAnDlzkJubi4iICGzdulU3ifT8+fMmd/9MnToVFRUVePbZZ1FcXIz77rsPW7duNXpMyl4IIXDwzO9ALQUIERGRI7P5JNRJkyYZHHIBgIyMjDteu2bNmhptkiRh/vz5mD9/vtlitIXLxQXILy2Ck8IJne5pZ+twiIiIzEo+M2ZkJuvs370f7YNaoYmzY/XeEBER3Q0LEDt1p/kfREREjo4FiJ1iAUJERHLGAsQOqTVq/HbuGMAChIiIZIoFiB06lXse5TeuoYmLG9oGhNo6HCIiIrNjAWJn1Bo1vtizGbi1AyoREZEcsQCxI5uzdiB6xiP44PtPAQDHLp1C9IxHsDlrh61DIyIiMisWIHZic9YOjFs2Xe/5LgCQW5yPccumswghIiJZYQFiB9QaNWalvav3dFstbdvsL1Kh1qitHBkREZFlsACxA3tOHqrR81GdAPDn1TzsOXnIqnERERFZCgsQO5BfWmTW84iIiOwdCxA7oPJsbtbziIiI7B0LEDvQq00EApQqSLUclwAEevuhV5sIK0dGRERkGSxA7ICTwgkLE180eExblCx4YgqcFE5WjYuIiMhSWIDYiYTI/lgxPgUujZ312gO8/bBifAoSIvvbLDYiIiJza2TrAOj/JET2R/vAj3Ho3DE8N/BJ3N/lPvRqE8GeDyIikh0WIHamqLwYAPBg1ABEh3W2dThEREQWwSEYO1NYdhUA4NPU29ahEBERWQwLEDtSUXkd16tuAAB8mzazdThEREQWwwLEjhSWXgEAuDV2QRMXN1uHQ0REZDEsQOyIdvileVNvSFJtu4IQERE5PhYgdqSw7O8eEB8OvxARkcyxALEjugmonpyASkRE8sYCxI5oCxBOQCUiIrljAWJHuASXiIgaChYgdqSgVDsHhAUIERHJGwsQO8IeECIiaihYgNgRFiBERNRQsACxI9pluL6enIRKRETyxgLETqg1alwpLwG4DwgRETUALEDsxJXyEmiEBgDQzMPL1uEQERFZFAsQO6Gd/9HM3QuNnBrZOhwiIiKLYgFiJ4qqPQeGiIhI7liA2AmugCEiooaEBYid4AoYIiJqSFiA2AnugkpERA0JCxA78X9DMOwBISIi+WMBYic4B4SIiBoSFiB2ggUIERE1JCxA7IS2AOEkVCIiaghYgNiJgjJOQiUiooaDBYgdqKi8jmuV1wFOQiUiogaCBYgd0O6C6tLIGR6uTWwdDhERkcWxALED1SegSpJk63CIiIgsjgWIHSjkc2CIiKiBYQFiB7gChoiIGhoWIHagkCtgiIiogWEBYgcKS7kJGRERNSwsQOwAe0CIiKihsXkB8sEHHyAkJASurq7o2bMn9u7dW+u5X3/9NaKjo6FUKuHu7o6IiAh88skneueMGTMGkiTp/QwaNMgKmdQdH0RHREQNTSNbvnlaWhqSk5OxdOlS9OzZE6mpqYiPj0d2djZUKlWN85s1a4aZM2ciPDwczs7O2LRpE8aOHQuVSoX4+HjdeYMGDcLq1at1r11cXKyWU11wEioRETU0Nu0BWbx4MZKSkjB27Fh06NABS5cuRZMmTbBq1SqD5/fr1w+PPPII2rdvj1atWmHy5Mno0qULdu3apXeei4sL/P39dT/e3vY9tMFt2ImIqKGxWQ9IVVUVDhw4gOnTp+vaFAoF4uLikJmZedfrhRD48ccfkZ2djTfeeEPvWEZGBlQqFby9vTFgwAAsXLgQzZs3r/VelZWVqKys1L0uLS0FAGg0Gmg0mjpmqE+j0UAIUeN+Go0GRWXFAIBm7l5mez9rqS0vRybHnCDTvOSYE2Salxxzgkzzqm9Oxl5nswKksLAQarUafn5+eu1+fn44fvx4rdeVlJQgKCgIlZWVcHJywocffoj7779fd3zQoEF49NFHERoaipycHMyYMQODBw9GZmYmnJycDN4zJSUF8+bNq9FeUFCAGzdu1CtPLY1Gg5KSEgghoFD8X8fT1YpSaMTfH5b6WhXyq/LN8n7WUltejkyOOUGmeckxJ8g0LznmBJnmVd+cysrKjDrPpnNA6qJp06Y4dOgQysvLkZ6ejuTkZISFhaFfv34AgBEjRujO7dy5M7p06YJWrVohIyMDAwcONHjP6dOnIzk5Wfe6tLQUwcHB8PX1haenp1ni1mg0kCQJvr6+eh9o8eUKAICySVMEBQaZ5b2sqba8HJkcc4JM85JjTpBpXnLMCTLNq745ubq6GnWezQoQHx8fODk5IS8vT689Ly8P/v7+tV6nUCjQunVrAEBERASOHTuGlJQUXQFyu7CwMPj4+ODUqVO1FiAuLi4GJ6oqFAqzfqEkSapxz6Lyv4dffD2bOeyX11Bejk6OOUGmeckxJ8g0LznmBJnmVZ+cjL3GZr8tZ2dnREVFIT09Xdem0WiQnp6OmJgYo++j0Wj05m/c7uLFiygqKkJAQEC9Y7YE7QTU5lyCS0REDYhNh2CSk5MxevRoREdHo0ePHkhNTUVFRQXGjh0LABg1ahSCgoKQkpIC3JqrER0djVatWqGyshJbtmzBJ598go8++ggAUF5ejnnz5uGxxx6Dv78/cnJyMHXqVLRu3Vpvma61qTVqZJ7IwskLp9EmOAwxbSPhpPh7Pkr1J+ESERE1FDYtQBITE1FQUIA5c+YgNzcXERER2Lp1q25i6vnz5/W6cioqKjBhwgRcvHgRbm5uCA8Px6efforExEQAgJOTEw4fPoy1a9eiuLgYgYGBeOCBB7BgwQKb7QWyOWsHZqW9i8vF/ze5NECpwsLEF5EQ2R9FLECIiKgBsvkk1EmTJmHSpEkGj2VkZOi9XrhwIRYuXFjrvdzc3LBt2zazx1hXm7N2YNyy6RC3tecW52PcsulYMT6FPSBERNQgyWfGjJ1Ra9SYlfZujeIDgK5t9hepKCjhJmRERNTw2LwHRK72nDykN+xyOwHgz6t58HBtAnAbdiIiamDYA2Ih+aVFRp13pbwEYA8IERE1MCxALETlWfvW79WV3/h7IzI+CZeIiBoSFiAW0qtNBAKUKki1HJdurYa58dffe5iwB4SIiBoSFiAW4qRwwsLEF4FbxcbtBIAXh/y934lzo8bwdPOwcoRERES2wwLEghIi+2PF+BT4K1U1joX4tkCn4LbArd4PSaqtr4SIiEh+uArGwhIi+2NQ1766nVB9m/ngn2vn42zBRby9aQUAwLWxC9QatW53VCIiIrljD4gVOCmc0LttNwzu3BdDIvthYKfeAIAff88EAJzOv4DoGY9gc9YOG0dKRERkHSxArGxLVgY2H/yxRrt2d1QWIURE1BCwALEitUaN2RtS77o7qlqjtnJkRERE1sUCxIoOnvvDqN1R95w8ZNW4iIiIrI0FiBUVll816jxjd1ElIiJyVCxArMjHw7jNxozdRZWIiMhRsQCxom4tO9x1d9RAbz/0ahNh5ciIiIisiwWIFTkpnLDg8SmAgd1Rta8XPDGF+4EQEZHssQCxsiGR/Qzujhrg7YcV41OQENnfZrERERFZC3dCtQHt7qh7Th5CfmkRVJ7N0atNBHs+iIiowWABYiNOCifc2y7K1mEQERHZBIdgiIiIyOpYgBAREZHVsQAhIiIiq2MBQkRERFbHAoSIiIisjgUIERERWR2X4RoghAAAlJaWmu2eGo0GZWVlcHV1hUIhn7pPjnnJMSfINC855gSZ5iXHnCDTvOqbk/b/ndr/l9aGBYgBZWVlAIDg4GBbh0JEROSQysrK4OXlVetxSdytRGmANBoN/vzzTzRt2hSSVNuj40xTWlqK4OBgXLhwAZ6enma5pz2QY15yzAkyzUuOOUGmeckxJ8g0r/rmJIRAWVkZAgMD79iDwh4QAxQKBVq0aGGRe3t6esrmS1qdHPOSY06QaV5yzAkyzUuOOUGmedUnpzv1fGjJY8CKiIiIHAoLECIiIrI6FiBW4uLigrlz58LFxcXWoZiVHPOSY06QaV5yzAkyzUuOOUGmeVkrJ05CJSIiIqtjDwgRERFZHQsQIiIisjoWIERERGR1LECIiIjI6liAWMkHH3yAkJAQuLq6omfPnti7d6+tQzLaTz/9hKFDhyIwMBCSJGHjxo16x4UQmDNnDgICAuDm5oa4uDicPHnSZvEaIyUlBd27d0fTpk2hUqkwbNgwZGdn651z48YNTJw4Ec2bN4eHhwcee+wx5OXl2SxmY3z00Ufo0qWLbgOhmJgY/O9//9Mdd8Scbvf6669DkiRMmTJF1+aIeb366quQJEnvJzw8XHfcEXMCgEuXLuEf//gHmjdvDjc3N3Tu3Bn79+/XHXfEvy9CQkJqfFaSJGHixImAg35WarUas2fPRmhoKNzc3NCqVSssWLBA7/ktFv+sBFnc+vXrhbOzs1i1apX4/fffRVJSklAqlSIvL8/WoRlly5YtYubMmeLrr78WAMQ333yjd/z1118XXl5eYuPGjeK3334TDz30kAgNDRXXr1+3Wcx3Ex8fL1avXi2OHj0qDh06JIYMGSLuueceUV5erjvnueeeE8HBwSI9PV3s379f9OrVS/Tu3dumcd/Nt99+KzZv3ixOnDghsrOzxYwZM0Tjxo3F0aNHhXDQnKrbu3evCAkJEV26dBGTJ0/WtTtiXnPnzhUdO3YUly9f1v0UFBTojjtiTleuXBEtW7YUY8aMEb/++qs4ffq02LZtmzh16pTuHEf8+yI/P1/vc9q+fbsAIHbs2CGEg35WixYtEs2bNxebNm0SZ86cERs2bBAeHh5iyZIlunMs/VmxALGCHj16iIkTJ+peq9VqERgYKFJSUmwaV13cXoBoNBrh7+8v3nrrLV1bcXGxcHFxEZ9//rmNojRdfn6+ACB27twpxK0cGjduLDZs2KA759ixYwKAyMzMtGGkpvP29hYrVqxw+JzKyspEmzZtxPbt20VsbKyuAHHUvObOnSu6du1q8Jij5vSvf/1L3HfffbUel8vfF5MnTxatWrUSGo3GYT+rhIQE8fTTT+u1Pfroo2LkyJFCWOmz4hCMhVVVVeHAgQOIi4vTtSkUCsTFxSEzM9OmsZnDmTNnkJubq5efl5cXevbs6VD5lZSUAACaNWsGADhw4AD++usvvbzCw8Nxzz33OExearUa69evR0VFBWJiYhw+p4kTJyIhIUEvfjj4Z3Xy5EkEBgYiLCwMI0eOxPnz5wEHzunbb79FdHQ0Hn/8cahUKkRGRmL58uW643L4+6Kqqgqffvopnn76aUiS5LCfVe/evZGeno4TJ04AAH777Tfs2rULgwcPBqz0WfFhdBZWWFgItVoNPz8/vXY/Pz8cP37cZnGZS25uLnArn+r8/Px0x+ydRqPBlClTcO+996JTp07ArbycnZ2hVCr1znWEvI4cOYKYmBjcuHEDHh4e+Oabb9ChQwccOnTIYXNav349Dh48iH379tU45qifVc+ePbFmzRq0a9cOly9fxrx589CnTx8cPXrUYXM6ffo0PvroIyQnJ2PGjBnYt28fXnjhBTg7O2P06NGy+Pti48aNKC4uxpgxYwAH/v5NmzYNpaWlCA8Ph5OTE9RqNRYtWoSRI0cCVvq7nQUINXgTJ07E0aNHsWvXLluHYhbt2rXDoUOHUFJSgi+//BKjR4/Gzp07bR1WnV24cAGTJ0/G9u3b4erqautwzEb7L00A6NKlC3r27ImWLVviiy++gJubm01jqyuNRoPo6Gi89tprAIDIyEgcPXoUS5cuxejRo20dnlmsXLkSgwcPRmBgoK1DqZcvvvgC69atw2effYaOHTvi0KFDmDJlCgIDA632WXEIxsJ8fHzg5ORUY0Z0Xl4e/P39bRaXuWhzcNT8Jk2ahE2bNmHHjh1o0aKFrt3f3x9VVVUoLi7WO98R8nJ2dkbr1q0RFRWFlJQUdO3aFUuWLHHYnA4cOID8/Hx069YNjRo1QqNGjbBz50689957aNSoEfz8/Bwyr9splUq0bdsWp06dctjPKiAgAB06dNBra9++vW5oydH/vjh37hx++OEHjBs3TtfmqJ/VK6+8gmnTpmHEiBHo3LkznnrqKbz44otISUkBrPRZsQCxMGdnZ0RFRSE9PV3XptFokJ6ejpiYGJvGZg6hoaHw9/fXy6+0tBS//vqrXecnhMCkSZPwzTff4Mcff0RoaKje8aioKDRu3Fgvr+zsbJw/f96u8zJEo9GgsrLSYXMaOHAgjhw5gkOHDul+oqOjMXLkSN2fHTGv25WXlyMnJwcBAQEO+1nde++9NZaznzhxAi1btgQc+O8LrdWrV0OlUiEhIUHX5qif1bVr16BQ6JcATk5O0Gg0gLU+K7NMZaU7Wr9+vXBxcRFr1qwRf/zxh3j22WeFUqkUubm5tg7NKGVlZSIrK0tkZWUJAGLx4sUiKytLnDt3TohbS7WUSqX473//Kw4fPiwefvhhu19W9/zzzwsvLy+RkZGht7zu2rVrunOee+45cc8994gff/xR7N+/X8TExIiYmBibxn0306ZNEzt37hRnzpwRhw8fFtOmTROSJInvv/9eCAfNyZDqq2CEg+b10ksviYyMDHHmzBmxe/duERcXJ3x8fER+fr4QDprT3r17RaNGjcSiRYvEyZMnxbp160STJk3Ep59+qjvHEf++ELdWL95zzz3iX//6V41jjvhZjR49WgQFBemW4X799dfCx8dHTJ06VXeOpT8rFiBW8v7774t77rlHODs7ix49eog9e/bYOiSj7dixQwCo8TN69Gghbi3Xmj17tvDz8xMuLi5i4MCBIjs729Zh35GhfACI1atX6865fv26mDBhgvD29hZNmjQRjzzyiLh8+bJN476bp59+WrRs2VI4OzsLX19fMXDgQF3xIRw0J0NuL0AcMa/ExEQREBAgnJ2dRVBQkEhMTNTbL8MRcxJCiO+++0506tRJuLi4iPDwcPGf//xH77gj/n0hhBDbtm0TAAzG6oifVWlpqZg8ebK45557hKurqwgLCxMzZ84UlZWVunMs/VlJovq2Z0RERERWwDkgREREZHUsQIiIiMjqWIAQERGR1bEAISIiIqtjAUJERERWxwKEiIiIrI4FCBEREVkdCxAiIiKyOhYgRCRLISEhSE1NtXUYRFQLFiBEVG9jxozBsGHDAAD9+vXDlClTrPbea9asgVKprNG+b98+PPvss1aLg4hM08jWARARGVJVVQVnZ+c6X+/r62vWeIjIvNgDQkRmM2bMGOzcuRNLliyBJEmQJAlnz54FABw9ehSDBw+Gh4cH/Pz88NRTT6GwsFB3bb9+/TBp0iRMmTIFPj4+iI+PBwAsXrwYnTt3hru7O4KDgzFhwgSUl5cDADIyMjB27FiUlJTo3u/VV18FDAzBnD9/Hg8//DA8PDzg6emJJ554Anl5ebrjr776KiIiIvDJJ58gJCQEXl5eGDFiBMrKyqz2+yNqSFiAEJHZLFmyBDExMUhKSsLly5dx+fJlBAcHo7i4GAMGDEBkZCT279+PrVu3Ii8vD0888YTe9WvXroWzszN2796NpUuXAgAUCgXee+89/P7771i7di1+/PFHTJ06FQDQu3dvpKamwtPTU/d+L7/8co24NBoNHn74YVy5cgU7d+7E9u3bcfr0aSQmJuqdl5OTg40bN2LTpk3YtGkTdu7ciddff92ivzOihopDMERkNl5eXnB2dkaTJk3g7++va//3v/+NyMhIvPbaa7q2VatWITg4GCdOnEDbtm0BAG3atMGbb76pd8/q80lCQkKwcOFCPPfcc/jwww/h7OwMLy8vSJKk9363S09Px5EjR3DmzBkEBwcDAD7++GN07NgR+/btQ/fu3YFbhcqaNWvQtGlTAMBTTz2F9PR0LFq0yGy/IyL6G3tAiMjifvvtN+zYsQMeHh66n/DwcOBWr4NWVFRUjWt/+OEHDBw4EEFBQWjatCmeeuopFBUV4dq1a0a//7FjxxAcHKwrPgCgQ4cOUCqVOHbsmK4tJCREV3wAQEBAAPLz8+uUMxHdGXtAiMjiysvLMXToULzxxhs1jgUEBOj+7O7urnfs7NmzePDBB/H8889j0aJFaNasGXbt2oVnnnkGVVVVaNKkiVnjbNy4sd5rSZKg0WjM+h5E9DcWIERkVs7OzlCr1Xpt3bp1w1dffYWQkBA0amT8XzsHDhyARqPBO++8A4Xi7w7bL7744q7vd7v27dvjwoULuHDhgq4X5I8//kBxcTE6dOhgQnZEZC4cgiEiswoJCcGvv/6Ks2fPorCwEBqNBhMnTsSVK1fw5JNPYt++fcjJycG2bdswduzYOxYPrVu3xl9//YX3338fp0+fxieffKKbnFr9/crLy5Geno7CwkKDQzNxcXHo3LkzRo4ciYMHD2Lv3r0YNWoUYmNjER0dbZHfAxHdGQsQIjKrl19+GU5OTujQoQN8fX1x/vx5BAYGYvfu3VCr1XjggQfQuXNnTJkyBUqlUtezYUjXrl2xePFivPHGG+jUqRPWrVuHlJQUvXN69+6N5557DomJifD19a0xiRW3hlL++9//wtvbG3379kVcXBzCwsKQlpZmkd8BEd2dJIQQtg6CiIiIGhb2gBAREZHVsQAhIiIiq2MBQkRERFbHAoSIiIisjgUIERERWR0LECIiIrI6FiBERERkdSxAiIiIyOpYgBAREZHVsQAhIiIiq2MBQkRERFb3/wGcnF9IGOMemwAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 600x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(figsize=(6, 4))\n",
    "ax.plot(np.arange(len(target_powers)), target_powers, marker=\"o\")\n",
    "ax.set_xlabel(\"Iteration\")\n",
    "ax.set_ylabel(\"Target Power\")\n",
    "ax.set_title(\"Adjoint Optimization History\")\n",
    "ax.grid(True, alpha=0.3)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "80a3947a",
   "metadata": {},
   "source": [
    "## Visualizing the Results\n",
    "\n",
    "The steadily rising power confirms the adjoint-driven search is homing in on a better design."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "5f269667",
   "metadata": {},
   "outputs": [],
   "source": [
    "def compute_spectrum(param_set, task_name):\n",
    "    sim = make_simulation(\n",
    "        param_set[\"widths_si\"],\n",
    "        param_set[\"gaps_si\"],\n",
    "        param_set[\"widths_sin\"],\n",
    "        param_set[\"gaps_sin\"],\n",
    "        first_gap_si=param_set[\"first_gap_si\"],\n",
    "        first_gap_sin=param_set[\"first_gap_sin\"],\n",
    "    )\n",
    "    sim_data = web.run(sim, task_name=task_name, verbose=False)\n",
    "    power_da = get_mode_monitor_power(sim_data)\n",
    "    freqs = power_da.coords[\"f\"].values\n",
    "    wavelengths = td.C_0 / freqs\n",
    "    power = np.squeeze(power_da.data)\n",
    "    sort_idx = np.argsort(wavelengths)\n",
    "    wavelengths = wavelengths[sort_idx]\n",
    "    power = np.array(power)[sort_idx]\n",
    "    return wavelengths, power"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6ef925dc",
   "metadata": {},
   "source": [
    "## Performance Payoff\n",
    "\n",
    "Comparing the spectra shows the apodized design significantly boosts coupling near 1.55 µm relative to the uniform baseline from Bayesian optimization."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "8e460c41",
   "metadata": {},
   "outputs": [],
   "source": [
    "w_before, p_before = compute_spectrum(params0, \"gc_adjoint_before\")\n",
    "w_after, p_after = compute_spectrum(params, \"gc_adjoint_after\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "23ee67d1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 600x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "before_db = 10 * np.log10(p_before)\n",
    "after_db = 10 * np.log10(p_after)\n",
    "\n",
    "fig, ax = plt.subplots(figsize=(6, 4))\n",
    "ax.plot(w_before, before_db, label=\"Before adjoint\")\n",
    "ax.plot(w_after, after_db, label=\"After adjoint\")\n",
    "ax.set_xlabel(\"Wavelength (µm)\")\n",
    "ax.set_ylabel(\"Transmission (dB)\")\n",
    "ax.set_title(\"Mode Monitor Spectrum (Before vs After)\")\n",
    "ax.grid(True, alpha=0.3)\n",
    "ax.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8fa2f7e0",
   "metadata": {},
   "source": [
    "## Final Apodized Geometry\n",
    "\n",
    "Visual inspection highlights the non-uniform duty cycle discovered by the optimizer to better mode-match the incident beam."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "bd465801",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnYAAAEYCAYAAADRQrtOAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAUYdJREFUeJzt3Xl4FFX6NuCnes0eQhKysISwyb4IEiOrkBGEAeIgooMEHAYdRAUZFVFW9ScIIzggguiMuLDJDKLjhygi4AKCCG6DOICACiSQkI2QpJd6vz+SrqTpTtKdtWme+7r6gpw6depUv6c6b6qrTikiIiAiIiKiq56uoTtARERERLWDiR0RERGRn2BiR0REROQnmNgRERER+QkmdkRERER+gokdERERkZ9gYkdERETkJ5jYEREREfkJJnZEREREfoKJHXls/vz5UBTFqaxly5aYOHFivfZj7dq1UBQFp06dqtftVpe7942uHW+++Sbat28Po9GIRo0aNXR3quXUqVNQFAVr167VymoyrgcOHIiBAwfWYg99Q13sV0N8xjbkdh0WL16M9u3bQ1XVButDRW688UY89thjDd2NCjGx83EvvfQSFEVBUlJSQ3eFKnH58mXMnz8fu3fvbuiuXHOOHDmC+fPn+2Sif/ToUUycOBGtW7fGK6+8gjVr1nCs1ND69evxwgsvNNj2fXm8eWvv3r2YP38+cnJyGrorTvLy8vDcc89h5syZ0OnqL01RVRWLFy9GYmIiAgIC0LVrV2zYsMGl3syZM7Fy5Uqkp6fXW9+8IuTTbrrpJmnZsqUAkGPHjjVoX+bNmydXDpmioiKxWCz12o/XXntNAMjJkyfrdbuVuXDhggCQefPmuSyzWq1SWFjYIP26FmzevFkAyK5duxq6Ky5WrVrlcuxWNlZ81cmTJwWAvPbaa1pZTcZ1cXGxFBcXV2vd4cOHS0JCQrXWrQ2Vjbea7FdF6vIzdsmSJRV+ljbEZ7vDsmXLJCwsrN4/Nx9//HEBIJMnT5Y1a9bI8OHDBYBs2LDBqZ7dbpfY2FiZM2dOvfbPUzxj58NOnjyJvXv3YunSpYiOjsa6desauksuzGYzjEZjQ3ej1tlsNlgsllppy2AwICAgoFbaopoRERQWFtbb9s6fPw8A9fIVbEFBQZ1vo7yajGuTyQSTyVTrfWpodbFfDfUZ25Cf7a+99hpGjhxZr5+bZ86cwfPPP4+pU6dizZo1mDx5Mv7zn/+gX79+ePTRR2G327W6Op0Ot99+O9544w2ISL310WMNnVlSxZ5++mmJiIiQ4uJimTJlirRt29aljuMv6SVLlsjSpUulRYsWEhAQIP3795fvv//epf7OnTulb9++EhQUJOHh4TJy5Eg5cuSIS73PPvtMevXqJWazWVq1aiWrV692e8YuISFBJkyYoP0MoMJX+b8Kf/zxRxk9erRERESI2WyWnj17yrvvvuvSjx9++EFuvvlmCQgIkKZNm8rTTz8t//jHPzw+Y/f2229Lhw4dxGw2S6dOnWTLli0yYcIEp7/4y7+Hy5Ytk1atWolOp5PDhw9LcXGxzJkzR66//noJCwuToKAg6du3r3zyyScu61/5cpyRcfe+AZCpU6fKO++8I506dRKTySQdO3aUDz74wGUfdu3aJT179qwyFhV58cUXJTExUQICAuSGG26QTz/9VAYMGCADBgxwqldUVCRz586V1q1bi8lkkmbNmsmjjz4qRUVFTvWsVqs89dRT0qpVKzGZTJKQkCCzZs1yqZeQkCDDhw/X+h8QECCdO3fWznT8+9//ls6dO4vZbJbrr79eDh065NL3qsaJ4+ztlS/HNhx92L59u/YeLlu2TPr37y9du3Z1+361a9dObrnllkrf061bt8qwYcMkLi5OTCaTtGrVSp566imx2WxO+39lvyZMmFDpWPFkn8vv9+7du2XKlCkSHR0tjRo1qrC/noxjh+zsbJkwYYKEhYVJeHi4pKWlyeHDh13O2Lkbg56OjSvH365duwSAbNq0SZ555hlp2rSpmM1mGTRokNPZzgEDBri8d1WdvfN2vH744YfSrVs3MZvN0qFDB/n3v//t8r5XNN4q26/58+dLfHy8hISEyOjRoyUnJ0eKiopk2rRpEh0dLcHBwTJx4kS3/fL2M/bbb7+VCRMmSGJiopjNZomJiZF77rlHMjMzXeJXURtXbldE5MSJE3L77bdLRESEBAYGSlJSkrz//vtOdTyNZUV+/vlnASBr167VylRVlYSEBBk5cqRL/cLCQgkLC5N77723yrYrs3LlSgEg//3vf53K169fLwDks88+cyp/9913BYDbz62GxsTOh7Vv314mTZokIiKffvqpAJADBw441XEkFV26dJGWLVvKc889JwsWLJDGjRtLdHS0pKen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Tp48ifT0dKSkpGjLw8PDkZSUhH379lWY2BUXFzt9p52XlweDwYDg4GCeqSMiIiKf5PUZu5tvvrnS5bt27appn4DSeVxGjhyJnJwcfP755xXWM5lMeP3113HXXXdpZS+99BIWLFiAjIwM7N27F3369MHZs2cRFxen1bnjjjugKAo2bdrktt358+djwYIFTmVTp05Fjx49nL7r9vczdkRERFQ/GuSMXW0lblWZOnUqfvjhh0qTuro0a9YspzOBeXl5eOaZZxqkL0RERESeqLU7IE6fPo0HHnigVtp64IEH8P7772PXrl1o1qxZpXVjY2ORkZHhVJaRkYHY2FhtuaOsojrumM1mhIWFOb2IiIiIfJnXZ+xuvvlmt7finjt3DufOncOLL75Y7c6ICB588EG888472L17NxITE6tcJzk5GTt37sT06dO1sh07diA5ORkAkJiYiNjYWOzcuRPdu3cHSs++7d+/H1OmTKl2X4mIiIh8jdeJnSM5crDb7fj5559x/PhxrF27tkadmTp1KtavX493330XoaGhSE9PB0pvdggMDAQApKWloWnTpli4cCEAYNq0aRgwYACef/55DB8+HBs3bsTBgwexZs0aoHQ+mOnTp+OZZ55B27ZtkZiYiDlz5iA+Ph6pqak16i8RERGRL/E6sVu2bJnb8ldffRUvvvgixo0bV+3OrFq1CgAwcOBAp/LXXnsNEydOBAD88ssvTnPo3XTTTVi/fj1mz56NJ554Am3btsXWrVvRuXNnrc5jjz2GgoIC3HvvvcjJyUHfvn2xfft2BAQEVLuvRERERL7G68SuIoMHD8aDDz5YozY8uUF39+7dLmVjxozBmDFjKlxHURQ89dRTeOqpp2rUPyIiIiJfVms3T3zyySdVToVCRERERHXH6zN2f/jDH1zKMjIysH//ftx8881Oy7ds2VLzHhIRERGRR7xO7MLDw92WtWvXrrb6RERERETV4HVi99prr9VNT4iIiIioRjy6xs7Lp44RERERUQPwKLHr1KkTNm7cCIvFUmm9Y8eOYcqUKVi0aFFt9Y+IiIiIPOTRV7ErVqzAzJkzcf/99+N3v/sdevXqhfj4eAQEBCA7OxtHjhzB559/jv/+97944IEH+EQHIiIiogbgUWI3ePBgHDx4EJ9//jk2bdqEdevW4fTp0ygsLERUVBR69OiBtLQ0jBs3DhER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S7t27cRkMkmnTp3k//2//+e0XFVVmTNnjsTExIjZbJbBgwfLTz/9VG/7QyJjx46VuLg4MZlM0rRpUxk7dqwcP35cW864Xj127dolAFxejvh5EpeEhASZN2+eU1llx72ISGFhodx///0SEREhQUFBctttt8m5c+fqYY+vDZXF9fLly3LLLbdIdHS0GI1GSUhIkMmTJzslaMK4XlMUKZkXh4iIiIiucrzGjoiIiMhPMLEjIiIi8hNM7IiIiIj8BBM7IiIiIj/BxI6IiIjITzCxIyIiIvITTOyIiIiI/AQTOyKiWvKPf/wDt9xyS51vZ/v27ejevTtUVa3zbRHR1YWJHRFRLSgqKsKcOXMwb968Ot/W0KFDYTQasW7dujrfFhFdXZjYERHVgn/9618ICwtDnz596mV7EydOxPLly+tlW0R09WBiR0RUzoULFxAbG4tnn31WK9u7dy9MJhN27txZ4XobN27EiBEjnMoGDhyI6dOnO5WlpqZi4sSJ2s8tW7bEM888g7S0NISEhCAhIQHvvfceLly4gFGjRiEkJARdu3bFwYMHndoZMWIEDh48iBMnTtTCXhORv2BiR0RUTnR0NP75z39i/vz5OHjwIPLz8zF+/Hg88MADGDx4cIXrff755+jVq1e1trls2TL06dMHhw8fxvDhwzF+/HikpaXh7rvvxqFDh9C6dWukpaWh/KO9W7RogZiYGHz22WfV2iYR+ScmdkREVxg2bBgmT56McePG4S9/+QuCg4OxcOHCCuvn5OQgNzcX8fHx1d7efffdh7Zt22Lu3LnIy8vDDTfcgDFjxqBdu3aYOXMmfvzxR2RkZDitFx8fj9OnT1drm0Tkn5jYERG58be//Q02mw2bN2/GunXrYDabK6xbWFgIAAgICKjWtrp27ar9PyYmBgDQpUsXl7Lz5887rRcYGIjLly9Xa5tE5J+Y2BERuXHixAmcPXsWqqri1KlTldaNjIyEoijIzs6usl273e5SZjQatf8rilJh2ZXTm1y8eBHR0dEe7A0RXSuY2BERXcFiseDuu+/G2LFj8fTTT+PPf/6zy9my8kwmEzp27IgjR464LLvy69Off/65VvpYVFSEEydOoEePHrXSHhH5ByZ2RERXePLJJ5Gbm4vly5dj5syZaNeuHf70pz9Vus6QIUPw+eefu5S/++672LJlC06cOIH/+7//w5EjR3D69GmcOXOmRn388ssvYTabkZycXKN2iMi/MLEjIipn9+7deOGFF/Dmm28iLCwMOp0Ob775Jj777DOsWrWqwvUmTZqEbdu2ITc316l8+PDhWLx4MTp27IhPP/0UL730Eg4cOIA333yzRv3csGEDxo0bh6CgoBq1Q0T+RZHy988TEVG1jRkzBtdffz1mzZoFlM5j1717d7zwwgu1up3MzExcd911OHjwIBITE2u1bSK6uvGMHRFRLVmyZAlCQkLqfDunTp3CSy+9xKSOiFzwjB0RUR2pqzN2REQVYWJHRERE5Cf4VSwRERGRn2BiR0REROQnmNgRERER+QkmdkRERER+gokdERERkZ9gYkdERETkJ5jYEREREfkJJnZEREREfoKJHREREZGf+P+xbjpQuKYXzgAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "final_sim = make_simulation(\n",
    "    params[\"widths_si\"],\n",
    "    params[\"gaps_si\"],\n",
    "    params[\"widths_sin\"],\n",
    "    params[\"gaps_sin\"],\n",
    "    first_gap_si=params[\"first_gap_si\"],\n",
    "    first_gap_sin=params[\"first_gap_sin\"],\n",
    ")\n",
    "ax = final_sim.plot(y=0)\n",
    "ax.set_title(\"Apodized grating geometry after adjoint optimization (y=0)\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "06007895",
   "metadata": {},
   "source": [
    "Lastly, we need to export the optimized grating geometry for further analysis."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "2d79fae8",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Saved adjoint design to /home/yannick/flexcompute/worktrees/seminar_notebooks/docs/notebooks/2025-10-09-invdes-seminar/results/gc_adjoint_best.json\n"
     ]
    }
   ],
   "source": [
    "def serialize_params(param_dict):\n",
    "    \"\"\"Detach autograd containers into JSON-serializable Python objects.\"\"\"\n",
    "    return {\n",
    "        \"widths_si\": [float(value) for value in param_dict[\"widths_si\"]],\n",
    "        \"gaps_si\": [float(value) for value in param_dict[\"gaps_si\"]],\n",
    "        \"widths_sin\": [float(value) for value in param_dict[\"widths_sin\"]],\n",
    "        \"gaps_sin\": [float(value) for value in param_dict[\"gaps_sin\"]],\n",
    "        \"first_gap_si\": float(param_dict[\"first_gap_si\"]),\n",
    "        \"first_gap_sin\": float(param_dict[\"first_gap_sin\"]),\n",
    "    }\n",
    "\n",
    "\n",
    "export_path = Path(\"./results/gc_adjoint_best.json\")\n",
    "export_path.parent.mkdir(parents=True, exist_ok=True)\n",
    "\n",
    "payload = serialize_params(params)\n",
    "payload[\"target_power\"] = float(target_powers[-1]) if target_powers else None\n",
    "\n",
    "with export_path.open(\"w\", encoding=\"utf-8\") as f:\n",
    "    json.dump(payload, f, indent=2)\n",
    "\n",
    "print(f\"Saved adjoint design to {export_path.resolve()}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "62c6a39d",
   "metadata": {},
   "source": [
    "## Conclusion and Next Steps\n",
    "\n",
    "Switching to a gradient-based approach unlocked high-dimensional refinements and reduced the coupling loss by more than a decibel. The resulting design is finely tuned for nominal fabrication, so the next notebook introduces robust optimization to preserve performance under realistic manufacturing variations."
   ]
  }
 ],
 "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.13.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
