{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "0dff81f1-150e-4132-a41f-7d5b32dbae1d",
   "metadata": {},
   "source": [
    "# Autograd, automatic differentiation, and adjoint optimization: basics\n",
    "\n",
    "## Introduction\n",
    "\n",
    "In this notebook, we will introduce the automatic differentiation feature of Tidy3D.\n",
    "This feature allows users to take derivatives of arbitrary functions involving Tidy3D simulations through the use of the \"adjoint method\".\n",
    "The advantage of the adjoint method is that the gradients can be computed using only **two** FDTD simulations, independent of the number of parameters.\n",
    "This makes it possible to do gradient-based optimization or sensitivity analysis of devices with enormous numbers of parameters with minimal computational overhead.\n",
    "For more information on the technical details of the adjoint method and what it can be used for, we recommend these references (with links to their pre-print versions):\n",
    "\n",
    "* [Gradient-based \"inverse design\" optimization in photonics](https://arxiv.org/pdf/1801.06715.pdf).\n",
    "\n",
    "* [Adjoint method for electromagnetics](https://arxiv.org/abs/1908.10507)\n",
    "\n",
    "If you want to skip to some case studies of this technique being used for some applications, see the\n",
    "\n",
    "\n",
    "* [Gradient Checking Notebook](https://www.flexcompute.com/tidy3d/examples/notebooks/Autograd2GradientChecking/).\n",
    "\n",
    "* [Inverse Design Notebook](https://www.flexcompute.com/tidy3d/examples/notebooks/Autograd3InverseDesign/).\n",
    "\n",
    "* [Multi-Objective Gradient Notebook](https://www.flexcompute.com/tidy3d/examples/notebooks/Autograd4MultiObjective/).\n",
    "\n",
    "* [Boundary Gradients Notebook](https://www.flexcompute.com/tidy3d/examples/notebooks/Autograd5BoundaryGradients/).\n",
    "\n",
    "* [Grating Coupler Notebook](https://www.flexcompute.com/tidy3d/examples/notebooks/Autograd6GratingCoupler/).\n",
    "\n",
    "\n",
    "### Function differentiation\n",
    "\n",
    "The adjoint package enables users to take derivatives of functions that involve a Tidy3D simulation. For a bit of context, let's first talk about what we mean when we talk about differentiating functions in our programs.\n",
    "Say in our program we have programmatically defined a function of one variable $f(x)$. For example:\n",
    "```py\n",
    "def f(x):\n",
    "   return x**2\n",
    "```\n",
    "\n",
    "Now, we wish to evaluate $\\frac{df(x)}{dx}$.\n",
    "\n",
    "If we know $\\frac{df}{dx}$ analytically, this is just a matter of writing a new function to compute this derivative, for example:\n",
    "\n",
    "```py\n",
    "def df(x):\n",
    "    return 2*x\n",
    "```\n",
    "However, many of the more interesting and complex functions tend to compose several sub-functions together, for example\n",
    "$$f(x) = h(y) = h(g(x))$$\n",
    "might be written in a program as\n",
    "\n",
    "```py\n",
    "def f(x):\n",
    "    y = x**2\n",
    "    return 5 * y - y**3\n",
    "```\n",
    "\n",
    "As one can imagine, defining the derivative by hand can quickly become too daunting of a task as the complexity grows.\n",
    "\n",
    "However, we can simplify things greatly with knowledge of the derivatives of the simpler functions that make up $f$.\n",
    "Following the chain rule, we can write the derivative of $f$ above as\n",
    "$$\\frac{df}{dx}=\\frac{dh}{dy}\\frac{dg}{dx}(x)$$\n",
    "\n",
    "Thus, if we know the derivatives of the composite functions $h$ and $g$, we can construct the derivative of $f$ by multiplying all of the derivatives of the composite functions.\n",
    "This idea is straightforwardly generalized to functions of several inputs and outputs, and even functions that can be written more generally as a more complex \"computational graph\" rather than a sequence of operations.\n",
    "\n",
    "### Automatic differentiation\n",
    "\n",
    "The idea of a technique called \"automatic differentiation\" is to provide a way to compute these derivatives of composite functions in programming languages both efficiently and without the user needing to define anything by hand.\n",
    "\n",
    "Automatic differentiation works by defining \"derivative rules\" for each fundamental operation that the user might incorporate in his or her function. For example, derivative rules for `h` and `g`, in the example above may be used to help define the derivative for `f`. When the function is evaluated, all of the derivative information corresponding to each operation in the function are stitched together using the chain rule to construct a derivative for the entire function. Thus, functions of arbitrary complexity can be differentiated without deriving anything beyond just the derivative rules for the most basic operations contained within.\n",
    "\n",
    "This capability is provided by many programming packages, but we chose to utilize one from the `autograd` package as it provides the flexibility and extendibility we needed for integrating this functionality into Tidy3D.\n",
    "\n",
    "Using `autograd`, we may write a function $f$ using most of the fundamental operations in python and `numpy`. In `autograd` both the operations and their derivatives are tracked when the function is called. Thus, `autograd` gives the option to apply `autograd.grad` to this function, which uses all of the derivative information and the chain rule to construct a new function that gives the derivative of the function with respect to its input arguments.\n",
    "\n",
    "In `tidy3d`, we can track functions **that involve Tidy3D simulations** in their computational graph. In essence, we provide the \"derivative\" of the `tidy3d.web.run()` function, using the adjoint method, to tell `autograd` how to differentiate functions that might involve both the setting up and postprocessing of a tidy3d simulation and its data. The end result is a framework where users can set up modeling and optimizations and utilize `autograd` automatic differentiation for optimization and sensitivity analysis efficiently and without needing to derive a single derivative rule.\n",
    "\n",
    "In this notebook, we will give an overview of how `autograd` works for beginners and provide a simple example of the plugin. More complex case studies and examples will be provided in other notebooks, linked here:\n",
    "\n",
    "* [Gradient Checking Notebook](https://www.flexcompute.com/tidy3d/examples/notebooks/Autograd2GradientChecking/).\n",
    "\n",
    "* [Inverse Design Notebook](https://www.flexcompute.com/tidy3d/examples/notebooks/Autograd3InverseDesign/).\n",
    "\n",
    "* [Multi-Objective Gradient Notebook](https://www.flexcompute.com/tidy3d/examples/notebooks/Autograd4MultiObjective/).\n",
    "\n",
    "* [Boundary Gradients Notebook](https://www.flexcompute.com/tidy3d/examples/notebooks/Autograd5BoundaryGradients/).\n",
    "\n",
    "* [Grating Coupler Notebook](https://www.flexcompute.com/tidy3d/examples/notebooks/Autograd6GratingCoupler/).\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "87d26e12-3c03-432d-9cf4-61f0b03a8608",
   "metadata": {},
   "source": [
    "## Automatic Differentiation using `autograd`\n",
    "\n",
    "Before jumping into any Tidy3D simulations, we will give a bit of a primer on using `autograd` for automatic differentiation. \n",
    "\n",
    "First, we will import `autograd` and its `numpy` wrapper, which provides most of the same functionality, but allows derivative tracking.\n",
    "\n",
    "Tip 1: if you run into an obscure error using `autograd`, the first thing to check is whether you're using the `autograd.numpy` wrapper instead of regular `numpy` in your function, as otherwise you will get errors from `autograd` that are not super clear."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "d1ce429f-3183-4f7f-8b16-dda847239742",
   "metadata": {},
   "outputs": [],
   "source": [
    "import autograd as ag\n",
    "import autograd.numpy as anp\n",
    "import matplotlib.pylab as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b5d017ba-6dc9-4cc0-b226-2b3c3438e0d5",
   "metadata": {},
   "source": [
    "Say we have a function $f$ that performs several operations on a single variable.\n",
    "\n",
    "We can define this function `f` in python and also derive its derivative for this simple case, which we write as a function `df`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "c501ff19-8e46-4aaf-86dd-89a97732dfa0",
   "metadata": {},
   "outputs": [],
   "source": [
    "def f(x):\n",
    "    return 5 * anp.sin(x) - x**2 + x\n",
    "\n",
    "\n",
    "def df(x):\n",
    "    return 5 * anp.cos(x) - 2 * x + 1"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "434d1841-45e5-48a3-986c-56e630badd2d",
   "metadata": {},
   "source": [
    "Let's evaluate these functions at several points and plot them."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "237ede5f-0a7d-45cf-927b-dcb2a9b57d9c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "xs = anp.linspace(-1, 3, 1001)\n",
    "plt.plot(xs, f(xs), label=\"f(x)\")\n",
    "plt.plot(xs, df(xs), label=\"df/dx(x)\")\n",
    "plt.xlabel(\"x\")\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3e9915a8-59e9-4209-bf29-bd21dcda84a3",
   "metadata": {},
   "source": [
    "Now let's use autograd to compute the derivative for us and see how it compares to our analytical derivative.\n",
    "\n",
    "We first call `autograd.grad(f)`, which returns a new function that can be evaluated at `x` to give the derivative `df/dx(x)`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "f846ded9-26ac-4778-b637-56768b07dd6e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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2327/T3Skl+HD3P/LO01OHDgQKO/v7+Kt1ixYuoYZk5S9PL82ck/eTdeQ0RERPTwrL5GhYiIiCwXExUiIiLSLSYqREREpFtMVIiIiEi3mKgQERGRbjFRISIiIt1iokJERES6xUSFiIiIdIuJChEREekWExUiIiLSLSYqREREpFtMVIhIV65evYqSJUviyy+/zLhu27ZtcHZ2vmN7eSKyftyUkIh05++//0anTp1UglKpUiXUrl0bHTt2xLfffqt1aESUz5ioEJEuDR8+HGvXrkX9+vVx+PBh7N69Gy4uLlqHRUT5jIkKEelSYmIiqlevjgsXLmDv3r2oUaOG1iERkQZYo0JEunT69GlEREQgPT0dYWFhWodDRBrhiAoR6U5KSgoaNmyoalOkRmXChAlq+qd48eJah0ZE+YyJChHpzjvvvINFixbh4MGDKFSoEJo1awZPT08sX75c69CIKJ9x6oeIdGXjxo1qBGX27Nnw8PCAvb29Or9582b88ssvWodHRPmMIypERESkWxxRISIiIt1iokJERES6xUSFiIiIdIuJChEREekWExUiIiLSLSYqREREpFtMVIiIiEi3mKgQERGRbjFRISIiIt1iokJERES6xUSFiIiIoFf/ByrvBnqPHBxBAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# get the gradient as a function of x\n",
    "df_ag = ag.grad(f)\n",
    "\n",
    "# get a set of points to feed the derivative function one by one (for now)\n",
    "xs_ag = anp.linspace(-1, 3, 21)\n",
    "df_ag_eval = [df_ag(x) for x in xs_ag]\n",
    "\n",
    "plt.plot(xs, f(xs), label=\"f(x)\")\n",
    "plt.plot(xs, df(xs), label=\"df/dx(x) [analytical]\")\n",
    "plt.plot(xs_ag, df_ag_eval, \"k.\", label=\"df/dx(x) [using autograd]\")\n",
    "plt.xlabel(\"x\")\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "be79405a-621a-4170-9799-ef65efc68335",
   "metadata": {},
   "source": [
    "Note: `autograd` provides several other useful gradient wrappers, which can be used in different contexts. \n",
    "\n",
    "For example `autograd.value_and_grad` returns both the function return value and the gradient value, which is useful to avoid repetitive computation if you need the value as the `autograd.grad` call must evaluate `f`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "9d26f7d1-124b-4e0d-9f34-75cbf4030ad9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "f_and_df = ag.value_and_grad(f)\n",
    "vals_and_grads = [f_and_df(x) for x in xs_ag]\n",
    "fs, dfs = list(zip(*vals_and_grads))\n",
    "\n",
    "plt.plot(xs_ag, fs, label=\"f(x)\")\n",
    "plt.plot(xs, df(xs), label=\"df/dx(x) [analytical]\")\n",
    "plt.plot(xs_ag, df_ag_eval, \"k.\", label=\"df/dx(x) [using autograd]\")\n",
    "plt.xlabel(\"x\")\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "18a7936e-9919-4ace-85bf-d8c14d124649",
   "metadata": {},
   "source": [
    "Before we continue, there are a few things to watch out for when using autograd for gradient calculation:\n",
    "\n",
    "1.  `autograd.grad` doesn't automatically convert input arguments from `int` to `float`, so avoid passing `int` types to your functions."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "d648c131-b674-49a7-b441-ca6569e6540d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1.7015115293406988\n",
      "TypeError(\"Can't differentiate w.r.t. type <class 'int'>\")\n"
     ]
    }
   ],
   "source": [
    "# ok\n",
    "print(df_ag(1.0))\n",
    "\n",
    "# errors\n",
    "try:\n",
    "    df_ag(1)\n",
    "except TypeError as e:\n",
    "    print(repr(e))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "003ef198-e0a2-495f-844e-adeff0563c1d",
   "metadata": {},
   "source": [
    "2. When differentiating with respect to several arguments, you need to tell `autograd.grad` which arguments you want to take the derivative with respect to as a tuple in indices. Otherwise it will take the derivative with respect to only the first argument."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "b42164ce-41df-4bb2-8e23-eb11b2a45547",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "dgdx=1.0\n",
      "dgdx=1.0, dgdy=1.0, dgdz=2.0\n"
     ]
    }
   ],
   "source": [
    "def g(x, y, z):\n",
    "    return x * y + z**2\n",
    "\n",
    "\n",
    "# only gives dg/dx\n",
    "dg = ag.grad(g)\n",
    "dgdx = dg(1.0, 1.0, 1.0)\n",
    "print(f\"dgdx={dgdx}\")\n",
    "\n",
    "# gives derivative w.r.t. all three args\n",
    "dg_all = ag.grad(g, argnum=(0, 1, 2))\n",
    "dgdx, dgdy, dgdz = dg_all(1.0, 1.0, 1.0)\n",
    "print(f\"dgdx={dgdx}, dgdy={dgdy}, dgdz={dgdz}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cbb36cd5-fef1-47d1-b25f-1fb7cc0d882b",
   "metadata": {},
   "source": [
    "## Incorporating Automatic Differentiation in `Tidy3D`\n",
    "\n",
    "With that basic introduction to automatic differentiation using `autograd`, we can now show how `Tidy3D` lets us do the same thing but where our functions can now involve setting up, running, and postprocessing a `tidy3d.Simulation`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "f304ea94-34df-4741-ab99-87003884eee7",
   "metadata": {},
   "outputs": [],
   "source": [
    "import tidy3d as td\n",
    "\n",
    "td.config.logging.level = \"INFO\""
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e54cc9fa-b5f2-4f62-b31e-3a0e1fa7acac",
   "metadata": {},
   "source": [
    "### Simulation example\n",
    "\n",
    "In our example, we will set up a function that involves a simulation of transmission through a waveguide in the presence of a scatterer.\n",
    "\n",
    "This scatterer geometry and material properties will depend on the function input arguments.\n",
    "\n",
    "The output of the function will simply be the power transmitted into the 0th order mode.\n",
    "\n",
    "We will then take the gradient of the output of this function (power) with respect to the scatterer geometric and medium properties using `autograd`.\n",
    "\n",
    "To start, it can often be helpful to break our function up into a few parts for debugging.\n",
    "\n",
    "Therefore, we will introduce one function to make the `td.Simulation` given the input arguments and one function to postprocess the result."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "3cbe5188-a552-40db-a1e6-ddb4af0ead63",
   "metadata": {},
   "outputs": [],
   "source": [
    "def make_simulation(center: tuple, size: tuple, eps: float) -> td.Simulation:\n",
    "    \"\"\"Makes a simulation with a variable scatter width, height, and relative permittivity.\"\"\"\n",
    "\n",
    "    wavelength = 1.0\n",
    "    freq0 = td.C_0 / wavelength\n",
    "    dl = 0.02\n",
    "\n",
    "    # a \"static\" structure\n",
    "    waveguide = td.Structure(\n",
    "        geometry=td.Box(size=(td.inf, 0.3, 0.2)), medium=td.Medium(permittivity=2.0)\n",
    "    )\n",
    "\n",
    "    # our \"forward\" source\n",
    "    mode_src = td.ModeSource(\n",
    "        size=(0, 1.5, 1.5),\n",
    "        center=(-0.9, 0, 0),\n",
    "        mode_index=0,\n",
    "        source_time=td.GaussianPulse(freq0=freq0, fwidth=freq0 / 10),\n",
    "        direction=\"+\",\n",
    "    )\n",
    "\n",
    "    # a monitor to store data that our overall function will depend on\n",
    "    mode_mnt = td.ModeMonitor(\n",
    "        size=(0, 1.5, 1.5),\n",
    "        center=(+0.9, 0, 0),\n",
    "        mode_spec=mode_src.mode_spec,\n",
    "        freqs=[freq0],\n",
    "        name=\"mode\",\n",
    "    )\n",
    "\n",
    "    # the structure that depends on the input parameters, which we will differentiate our function w.r.t\n",
    "    scatterer = td.Structure(\n",
    "        geometry=td.Box(\n",
    "            center=center,\n",
    "            size=size,\n",
    "        ),\n",
    "        medium=td.Medium(permittivity=eps),\n",
    "    )\n",
    "\n",
    "    return td.Simulation(\n",
    "        size=(2, 2, 2),\n",
    "        run_time=1e-12,\n",
    "        structures=[waveguide, scatterer],\n",
    "        sources=[mode_src],\n",
    "        monitors=[mode_mnt],\n",
    "        boundary_spec=td.BoundarySpec.all_sides(td.PML()),\n",
    "        grid_spec=td.GridSpec.uniform(dl=dl),\n",
    "    )"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f4dcb88e-490f-4579-bb7d-4166bd6a3be5",
   "metadata": {},
   "source": [
    "\n",
    "Let's try setting up the simulation and plotting it for starters."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "f4da7dc4-b13b-4c62-8590-4877ed71422a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABSwAAAHCCAYAAADl6ocFAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAtFNJREFUeJzt3Ql8XHW9//9v9jRJmxYopWUt+74vgnq5CgrCFXDhAqK4IIsLClw3lEUURXEBURA34OcVFPHP5gWriLIomywiAiLIJtCWQtPQJE3SJPN/vE84mZPpLGc/3zPzej4egSZNZqbzyfl+5vuec77fpkKhUDAAAAAAAAAAYIHmrB8AAAAAAAAAALgILAEAAAAAAABYg8ASAAAAAAAAgDUILAEAAAAAAABYg8ASAAAAAAAAgDUILAEAAAAAAABYg8ASAAAAAAAAgDUILAEAAAAAAABYg8ASAAAAAAAAgDUILIGU3Xrrraapqcn5P+rPvffea9rb282zzz6b+n2/8sorpru729x0002p3zeAxkRPq2/0NACNiN5Wv375y1+atdZaywwMDKR+348++qhpbW01f//731O/77wisAQScvHFF5vLL7/c5NGVV15pLrjgAmOTn/zkJ2abbbYxnZ2dZosttjDf/e53ff/syMiI+exnP2sWLFhgZsyYYfbaay9z8803l/3eO++807zhDW8wXV1dZr311jOf+MQnAjW0L3zhC+aoo44yG2+8sUnb2muvbT784Q+bM844I/X7BlDf6GnxoqfVRk8DkDR6WzwmJibMeeedZxYuXOj0tR133NH8/Oc/9/3zK1asMMcff7yZO3eu80bVm970JvPAAw+U/d4bbrjB7Lrrrs79bLTRRuass84yY2Njvu5nfHzc+f6TTjrJ9PT0mLRtu+225uCDDzZnnnlm6vedWwUAidhuu+0K++677xpfHx8fL6xatcr5v60OPvjgwsYbb1ywxSWXXFLQcPWud72r8MMf/rDwvve9z/n8a1/7mq+fP/LIIwutra2FT33qU4Uf/OAHhb333tv5/I477pj2fQ8++GChs7OzsMsuuxS+//3vF77whS8UOjo6CgceeKCv+9HP63Hdeeedhaw8+uijzmO45ZZbMnsMAOoPPS0+9DT/6GkAkkRvi8fnPvc5Z6w+7rjjnL6mx6bPf/7zn9f8WT3H++yzT6G7u7vwxS9+sfC9732vsO222xZmzpxZ+Oc//znte2+66aZCU1NT4U1vepNzPyeddFKhubm5cOKJJ/p6nNdee63z888//3whK/o36Ll58sknM3sMeUJgiUQNDAwUGlWlBpgHNjXAoaGhwtprr+08Jq+jjz7aaWzLly+v+vP33HOP0xS+8Y1vTH1NL0A222wzZ5Ln9ba3va0wf/78Qn9//9TXfvSjHzk//9vf/rbmY/3EJz5R2GijjQoTExOFLG2//fbOBBhAvOhp9LSo6GnB0dOAZNHb6G1RKPxra2srfOxjH5v6mvrGG9/4xsIGG2xQGBsbq/rzV111ldOXrr766qmvvfTSS4XZs2cXjjrqqGnfqyBzp512KqxevXrqa3ozTiHkY489VvOxHnLIIYU3vOENhSyNjo4W5syZUzjjjDMyfRx5QWCJQIPRhz70IefFb3t7e2GTTTZx3s0YGRlx/v6yyy5zBptbb7218JGPfKQwd+5cZ6BxXXTRRc4go5/VbXz0ox8t9PX1TbsPvYvyzne+szBv3jznLID111+/cMQRRxRWrFgx9T2/+93vCq9//esLvb29zov7LbfcsnDaaafVfPx+fm54eLhw5plnOi/89Tg1yH760592vl7qf//3fwt77LFHYcaMGc6/U4OyOwFQ89Bz4f1wm+Ef//hH53P93+uXv/xlYdddd3XOhtBkRpOX0nd/3v/+9zuPXV8/9NBDnT+vs846hf/5n/+p2QzkuuuuKxx00EFTNdx0000LX/rSl6b9rB5n6WOv1gwvvfRS53t+8pOfTPv6V77yFefrN954YyEK/Xy529EZH/q66lCN6tfS0jJtwiZf/epXnZ9/7rnnnM/19zpDRd/vpd/vnp6ewrHHHlvzsWpi94EPfGCNr+t+zjrrrDW+rudVNXW5x5DOktE7hqqtfl+PP/5453HoeNGkTb9v+tBjLTeRPOWUU5y/z3qSCdiMnjYdPW3Sf/zHfxR23HHHsn+n5/itb31rIQp6Gj0NSBK9bTp6W/ExlX6/+1FuPA9CvzO6nUceeWTa16+88sqpHlDN4Ycf7vwulZ7Nql7R1dU1VVfdvm5P9+f1wgsvOF//8pe/XPV+9Oaenk+dxen19NNPOz+vY6NU6fOjP+trjz/+uFP7WbNmObU9/fTTnR6lHqxQVGeH6t/0zW9+s+xjecc73lHxtQama836knTkw4svvmj23HPPqfUltt56a/PCCy+YX/3qV2ZoaMhZkN310Y9+1Fl/QmszDA4OOl/74he/aM4++2yz//77m4985CPm8ccfN9///vfNX/7yF/PnP//ZtLW1mdHRUXPAAQc4azNpXQmttaT7+L//+z/nfnt7e80jjzxi/uu//stZF+NLX/qS6ejoME8++aRzG9X4+TmtvXHIIYeYP/3pT86/UWtLPfzww+b88883//znP81111039b36t+jftM8++zi3p3//PffcY/7whz+Yt771rc56Iu7aGFr/SebNm1fx8WntlA9+8INmjz32MOeee65ZunSp+c53vuM8vgcffNDMnj172tobep60ZtU3v/lN8/vf/95861vfMptttpnz3Faj+9FjOvXUU53/6/GqTq+++qr5xje+4XyPHm9/f795/vnnnX+7VFvjQ4/7mmuucW7zLW95i9lwww2d503P0bHHHmsOOuigqe/t6+tzHn8tWmtLH6J/v+y+++7Tvme33XYzzc3Nzt+/973vrXhb+vstt9zSzJo1a9rX9fssf/3rX6ces9Y/Kb0f1XbnnXeeehyV6Hf1ueeec9ZUicr9/ddzePfdd5sf/vCHzu+A1iLTWi1f/epXnU0IVLPtt9/eHHPMMWs8N6qdfu/19wCmo6fR0yp53/veZ4477jhnQXzv+Kna6nk7/fTTp75GT/OHngakg95Gb6vkhBNOcOrqtWjRInPFFVeYddddd+prL7/8svFj5syZTn1E/3atO6lalOtL+nutpVyJ/l69Rj2w9OfVL1TXHXbYoWL/1HrOG2ywQc2+dv/99zu/v3H0tSOOOML5937ta18zN954oznnnHOcjXx+8IMfmDe/+c3m61//uvPcfupTn3J+X/7jP/5jjb52/fXXOzUt7ecoURJgAmUdc8wxzvoQf/nLX9b4O/cdb/cdO51m7X0HSKd0690MnZXgfedE61Po+3WGnnetJO/p4KXOP/9853uWLVsW6PH7+Tm9A6d/Y+m7QO5aU3/+85+dz5944gnn+/TOSOk7Qd53/ytdYlD6jp1OC1933XWdS570zo/r//7v/5zv0zuIpe+O6V02L61Ptdtuu/m6FK3UCSecMO3dqzCXGCxevLiw1lprFd7ylrc47+Dq8ejMjNIzQMq9k1nrnT5dXqCzScrRu8Jay6sa1eHNb37zGl9336VTfUW/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97/f3H777bE83kYMLQkrAcB/aJlkWBnqkvBbb73VPPzww+bBBx80V1xxhenu7na+rqDttttui/XBNdrl4cuWLZt6MUNYCQC1Lw/Xh4LSKOEYfc2uegBAI4SWOkFh8eLFztfiPLOyv7/f7L///mbjjTc2H/zgB50Ac/3114/ltuv98vC21YPO1wgrAcDf5eGSVFgpoRKx3//+92bJkiXmda97nXnmmWdif1CNRsGkXqi49GfCSgCozA0VpaOjI3I4Rl+zqx4AUM80RmqsLDeGRnXdddeZF154wXzkIx8xV111ldlkk03M2972NvOrX/3KObMT5UPLCc96bBPNbZk+HgCwWlOT88aOy/lzQlfahUrF5s+f75x1ssMOO5g99tjDOTsF4eksHp1hqcvA9aE/V9s9HAAamXvZsc7k02YI2qyl2u7hftDX7KoHANQzjZEaKzVmauwsXdMyqrlz55pTTz3VPPTQQ+aee+4xm2++uXnf+95nFixYYE455RTzxBNPxHZf9UCXgTdPjE+FlrV2DweARtbkXAY+7JxZOXl5+HDV3cNTDSzdNcr0ruCVV15pPvnJT5oDDzzQXHzxxUk8vrrnXbNSl4foo9xGPACANTd00fIZ5TZ+CYK+Zlc9AKCeedes1JhZaSOeOOiS85tvvtn5aGlpMQcddJCzBMq2225rzj///FjvK6+8a1aOt86ouBEPAMCssWZlpY14MlvDslAycJ9++ulmm222cdZHQTCVNthx17TU37EOGIC8iHuiVe72y23o4l1D0fu5X/Q1u+oBAPWq3AY73jUtNaZGXcdeY/INN9xgLrvsMvO73/3O7Ljjjubkk08273nPe6aWoLr22mvNhz70Iedsy3qz+XqzTVdXV4B6jJpZs9aZ1quKc7SmUPXQz+sM2lPfvY9Za621fP3Mq2Ovmt+vmH7J/v6z9zWzWovLhiEdD933t6wfgvW+/6H9sn4IjWe0z5jnXpr2paM32teY9jm+b2L58uXm6qtfcM7uD5MxTY2N3T3Txsbpc4K1fN320NBQMoHl008/7Vxm4PWud73LbL311ua+++4LenMNq9pu4N6NeAgtAeRpXNOYlsR4VWv36dKQTGeS+EVfS74ehJYAGl213cDjDC21xInG6KOOOsrce++9Zuedd17je970pjeZ2bNnm0aWVj0AoB6MZpRfBQ4steNcOdtt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Emf22fJGnk19rVpPS6MefuaDyCf6GupZc4XX80nnV6XzQevXsLziiiuc9T3cj7DrfLztbW8zhx9+uNlxxx2d9VNuuukms2LFCvPLX/4y0uM77bTTnBcn7se///1v5+t6kv02p6SSal3vz7ooAOolrKyXMy3z2tfSrke1M5UAwCYa97TGrp/xKqkz+/QYvFd6pcnmvlarpyVZD8JKAPVoZkL5VZD5oDVnWB5yyCHOu23e0/pFu8Fp1zmXPt955519367emdtyyy3Nk08+6XyutVLUoNQUve/a6XYrraPibu+uDy81pPHxcefdPr/NKe6kWsUeGBjwfc0/AGQlTHPK85mWeexradeDsBJAnmjM0qW9fseruM/sc8MxzT+yYHNf89PTkqoHYSWAejUzgfwqbFgpmc0U9GA333zzqY9tt93WaUi33HLL1PfoH6bd5/bee2/ft6sw71//+tdUE91tt92ciZH3dh9//HFn3ZQgt+s2Pa3TErQ5xZVUu8XWO5ysiwLAZlGaU17PtMxjX0uzHoSVAPJGa+tqjd0g41VcZ/Z5wzHNP7JQD30tiXoQVgKoZzNjzq/ChpXSbNMLgpNPPtmcc8455oYbbjAPP/ywOeaYY5zFmQ877LCp79tvv/3M9773vanPP/WpT5nbbrvNPPPMM+bOO+8073jHO0xLS4s56qijnL9Xgz/22GPNqaeeav74xz86izp/8IMfdJpf0B3C9a5i2KAwatG9xebsSgA2i6M5RQ3JbFgTMQ99La16EFYCyCONfWE2BIsakpWGY7acqJDXvhZ3PQgrAdS7mTHmV1HO0rSj+73mM5/5jLM+4/HHH+9cEvCGN7zBLFq0yHR2dk59j96NU6NxPf/8806zUxOZO3eu8zN3332382fX+eef7zSqd73rXU7oqLVTLr744lBbwGdxem1pset590EA+aYxXIsoR21OUS5H1hip9axsYHtfS6sehJUA8ihMWBn1cuRy4ZgNb8Llva/FWQ8AaAQzY8qvomi17UXBl770JeejEr0z5/WLX/yi5u2qgV500UXOR96KHmexASBJmlBpEqP1p+Iar4KGZG44pjM3bFBvfS1sPQgrATSioCFZHsKxPPe1eqwHANRzfsXMweLTawkrAeSJXtBrjd24xyu/lyN7wzGNm0hGmHoQVgJoVH4vRyYcSwf1AID85FfMHiwtOmEl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tvXvW7p0qent7Z32XOg50CCks7b0d0ld6umGLMuXL3ee166urml/PzQ05AQy2pld36vPk0A9JlGP/NVjYGDAefGv741jjKz0OPTvW7VqldO4veuK6blw/+16jtxxMupSHvUsal8LUg/9juqj1mMJ2tfycnwwXlEP6pG/eui50fOk8ana+OWX2x/1POj2vI9B9+GOw24P847L7kSZnhZfT4tSD7+PpVZPy/PxETfGqyLqMYl6FMVVjyh9LUp+VY7fvtZUoPP58vzzz5sNN9ww64cBAAjg3//+t9lggw2yfhhWoq8BQL7Q0yqjpwFA/fU1AkuflAC/+OKLzqnGYXYLjJMSdDVkFVcpP8rjeaqN58gfnqf8PUdqbbpMZMGCBeyuWgF9LV94jvzheaqN5yh/zxM9rTZ6Wv7wPPnD81Qbz1H99jUuCfdJT6Jt72jqlyzrX7Q84HmqjefIH56nfD1HuiwCldHX8onnyB+ep9p4jvL1PNHTqqOn5RfPkz88T7XxHNVfX+MtOgAAAAAAAADWILAEAAAAAAAAYA0CyxzSbllnnXVWbFvF1yuep9p4jvzheaqN5whR8PtTG8+RPzxPtfEc+cPzhLD43fGH58kfnqfaeI7q93li0x0AAAAAAAAA1uAMSwAAAAAAAADWILAEAAAAAAAAYA0CSwAAAAAAAADWILAEAAAAAAAAYA0CS0tcc8015q1vfatZe+21TVNTk/nrX//q6+euvvpqs/XWW5vOzk6zww47mJtuumna32tPpTPPPNPMnz/fzJgxw+y///7miSeeMHkV5t/zxS9+0XlOvR96zryGh4fNxz72Mef57+npMe9617vM0qVLTR5ddNFFZpNNNnF+J/baay9z7733Vv3+RvsdCvocXX755Wv8/ujn6v05uv32283b3/52s2DBAufffN1119X8mVtvvdXsuuuuzs5zm2++ufPcRf39RH7R12qjp9VGT/OHvlYdPQ1R0dP8oa/VRl/zh75WXcP0Ne0Sjuz99Kc/LZx99tmFH/3oR9q1vfDggw/W/Jk///nPhZaWlsJ5551XePTRRwunn356oa2trfDwww9Pfc/Xvva1Qm9vb+G6664rPPTQQ4VDDjmksHDhwsKqVasKeRTm33PWWWcVtttuu8LixYunPpYtWzbte0488cTChhtuWLjlllsK9913X+F1r3tdYZ999inkzS9+8YtCe3t74dJLLy088sgjheOOO64we/bswtKlS8t+fyP+DgV9ji677LLCrFmzpv3+LFmyZNr31NtzJDfddFPhC1/4QuGaa65xxqRrr7226vc/9dRTha6ursKpp57q/C5997vfdX63Fi1aFPq5R77R12qjp1VHT/OHvlYbPQ1R0dP8oa9VR1/zh75W200N0tcILC3z9NNP+26C//3f/104+OCDp31tr732KpxwwgnOnycmJgrrrbde4Rvf+MbU369YsaLQ0dFR+PnPf17Im7D/HjXBnXbaqeLf6zY08F999dVTX3vsscecOtx1112FPNlzzz0LH/vYx6Y+Hx8fLyxYsKBw7rnnlv3+RvsdCvMcqQGquVVSj89RKT9N8DOf+YzzYtPriCOOKBxwwAGhn3vUB/paefS02uhp/tDXgqGnIQp6WmX0tdroa/7Q14IxddzXuCQ8x+666y7nVGavAw44wPm6PP3002bJkiXTvqe3t9c5tdf9njyJ8u/R6d46XXrTTTc1Rx99tHnuueem/u7+++83q1evnna7Ou1+o402ytXzNDo66vxbvP+O5uZm5/NK/45G+x0K8xzJwMCA2Xjjjc2GG25oDj30UPPII49M/V29PUdh1fpdCvvco7E00phET6uOnuYPfS0Z9DTEodHGJPpadfQ1f+hrybgrp32NwDLHdNDNmzdv2tf0ub7u/r37tUrfkydh/z0aiLQ+w6JFi8z3v/99Z8B64xvfaFauXDl1u+3t7Wb27NmBbtc2L7/8shkfHw/0/DTa71CY52irrbYyl156qbn++uvNz372MzMxMWH22Wcf8/zzz9flcxRWpd+lV1991axatSrUc4/G00hjEj2tOnqaP/S1ZNDTEIdGG5Poa9XR1/yhryVjSU77GoFlBq644gpnsWD344477sj6IeXiedI7a2G87W1vM4cffrjZcccdnXcRtFDxihUrzC9/+cvYHzPqz957722OOeYYs/POO5t9993XWXR97ty55gc/+EHWDw2wBn2tNnoabEFfA6qjp/lDX4Mt6Gv1qzXrB9CIDjnkEOedJNf6668f6nbWW2+9NXZH0+f6uvv37te0G5b3e3Qw5+15GhkZieXfo3fnttxyS/Pkk09OPU86BVqN0fvOnfe5zIN11lnHtLS0VP2daLTfoTieo1JtbW1ml112mfb7U0/PUViVfpdmzZrl7MSn5z3qcw970ddqo6cFQ0/zh76WDHpaY6On+UNfC4a+5g99LRnr5bSvcYZlBmbOnOlsI+9+6Bck7DsJt9xyy7Sv3Xzzzc7XZeHChc4vl/d7dMrvPffcM/U9eXqett1221j+PVrf4l//+tfUYLXbbrs5g5r3dh9//HFn7ZQ8PE8uXSqhf4v336HT4fV5pX9Hvf8OxfEcldKp8g8//PDU70+9PUdh1fpdiuO5h73oa7XR04Khp/lDX0sGPa2x0dP8oa8FQ1/zh76WjL3z2tcy2+4H07zyyivObnM33nijs8uTtpTX54sXL576nve9732Fz33uc1Of//nPfy60trYWvvnNbzo7pWmHNe2g9vDDD099z9e+9jVnK/rrr7++8Le//a1w6KGHFhYuXFhYtWpVIY/8/Hve/OY3F7773e9Off4///M/hVtvvdXZ1U/P2f77719YZ511Ci+99NLU95x44omFjTbaqPCHP/yhcN999xX23ntv5yNv9Huj3c4uv/zywqOPPlo4/vjjnedryZIlzt/zOxT8OTr77LMLv/3tbwv/+te/Cvfff3/hyCOPLHR2dhYeeeSRun2OZOXKlc4YpA+NSd/+9redPz/77LPO3+s50nPleuqppwpdXV2FT3/6087v0kUXXVRoaWkpLFq0yPdzj/pCX6uNnlYdPc0f+lpt9DRERU/zh75WHX3NH/pabSsbpK8RWFrisssuc37RSj80KLn23Xffwvvf//5pP/fLX/6ysOWWWxba29udberVRL0mJiYKZ5xxRmHevHnOL99+++1XePzxxwt55effs/HGG0973o444ojC/Pnznedo/fXXdz5/8sknp/2MBqqPfvSjhTlz5jgH8jve8Y5pL0DyRC8A1ND1791zzz0Ld99999Tf8TsU/Dk6+eSTp75Xz8FBBx1UeOCBB+r+OfrjH/9Ydkxynxv9X89V6c/svPPOznO16aabOuNakOce9YW+Vhs9rTZ6mj/0teroaYiKnuYPfa02+po/9LXqGqWvNek/2Z3fCQAAAAAAAABFrGEJAAAAAAAAwBoElgAAAAAAAACsQWAJAAAAAAAAwBoElgAAAAAAAACsQWAJAAAAAAAAwBoElgAAAAAAAACsQWAJAAAAAAAAwBoElkCd+8lPfmLe+ta3Jn4/ixYtMjvvvLOZmJhI/L4AAI2LvgYAqCf0NaA8Akugjg0PD5szzjjDnHXWWYnf14EHHmja2trMFVdckfh9AQAaE30NAFBP6GtAZQSWQB371a9+ZWbNmmVe//rXp3J/H/jAB8yFF16Yyn0BABoPfQ0AUE/oa0BlBJZADvz0pz81a6+9thkZGZn29cMOO8y8733vq/hzv/jFL8zb3/72aV/7z//8T3PyySevcTtqXq5NNtnEnHPOOeaYY44xPT09ZuONNzY33HCDWbZsmTn00EOdr+24447mvvvum3Y7ui997V//+lfEfzEAoJ6pn6y33nrmq1/96tTX7rzzTtPe3m5uueWWij9HXwMA2Ii+BsSPwBLIgcMPP9yMj487Tcj10ksvmRtvvNF86EMfqvhzf/rTn8zuu+8e6j7PP/98552+Bx980Bx88MFOMKqG+N73vtc88MADZrPNNnM+LxQKUz+z0UYbmXnz5pk77rgj1H0CABrD3LlzzaWXXmq++MUvOhOnlStXOn3m4x//uNlvv/0q/hx9DQBgI/oaED8CSyAHZsyYYd7znveYyy67bOprP/vZz5yGo3fgylmxYoXp7+83CxYsCHWfBx10kDnhhBPMFltsYc4880zz6quvmj322MMJT7fcckvz2c9+1jz22GNm6dKl035O9/fss8+Guk8AQONQnznuuOPM0UcfbU488UTT3d1tzj333IrfT18DANiMvgbEi8ASyAk1v9/97nfmhRdecD6//PLLncsCmpqayn7/qlWrnP93dnaGuj9dQuDSu3Cyww47rPE1nelZGq4ODQ2Fuk8AQGP55je/acbGxszVV1/tbALQ0dFR8XvpawAA29HXgPgQWAI5scsuu5iddtrJWc/y/vvvN4888si0dUxKac1LhZl9fX01b1uXm5fSDnIuNxQt97WJiYlpP7d8+XLnkggAAGrRGlovvvii00ueeeaZqt9LXwMA2I6+BsSHwBLIkQ9/+MPOmZW6NHz//fc3G264YcXv1QLP2267rXn00UfX+LvSywKeeuqpWB7f8PCw06QVrgIAUM3o6KizztYRRxxhvvzlLzs9rvQsEC/6GgDAZvQ1IF4ElkCOaB3L559/3vzoRz+qutmO64ADDnAWci51/fXXm2uuucZpVl/5ylecJql1TNzLzcO6++67ncse9t5770i3AwCof1/4whectbsuvPBCZ50trbdVq7fR1wAAtqKvAfEisARypLe317zrXe8yPT095rDDDqv5/ccee6y56aabnMbppV3kzjvvPOcdvdtvv91cfPHF5t577zX/+7//G+nx/fznP3cWme7q6op0OwCA+nbrrbeaCy64wOk7s2bNMs3Nzc6ftWvp97///Yo/R18DANiIvgbEr6ng3eMegPX2228/s9122znv3PmhXeJ23XVXc9pppzmfa1fxnXfe2WmocXr55ZfNVlttZe677z6zcOHCWG8bAAAXfQ0AUE/oa0B5nGEJ5IQWY7722mudd+8+9rGP+f65b3zjG84ZmUnTotJ654/mBwBIEn0NAFBP6GtAea0Vvg7AMloYWaHl17/+deedMb822WQTc9JJJ5mk7b777s4HAABJoq8BAOoJfQ0oj0vCAQAAAAAAAFiDS8IBAAAAAAAAWIPAEgAAAAAAAIA1CCwBAAAAAAAAWIPAEgAAAAAAAIA1CCwBAAAAAAAAWIPAEgAAAAAAAIA1CCwBAAAAAAAAWIPAEgAAAAAAAIA1CCwBAAAAAAAAGFv8/0BonXkLZHW2AAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 1600x500 with 3 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# starting set of input parameters\n",
    "center0 = (0.0, 0.0, 0.0)\n",
    "size0 = (0.5, 1.0, 1.0)\n",
    "eps0 = 3.0\n",
    "\n",
    "sim = make_simulation(center=center0, size=size0, eps=eps0)\n",
    "_, axes = plt.subplots(1, 3, figsize=(16, 5))\n",
    "\n",
    "for ax, dim in zip(axes, \"xyz\"):\n",
    "    sim.plot(**{dim: 0}, ax=ax)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a390df41-e293-4dbf-83e0-f5dff8e700cc",
   "metadata": {},
   "source": [
    "### Post-processing the output data\n",
    "\n",
    "After the simulation is run, it returns a `td.SimulationData` containing the data we want to post-process.\n",
    "\n",
    "Let's write a function that will process this `td.SimulationData` and return the power in the mode amplitude of our output mode monitor."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "5d5c14b9-cb22-4ced-aad8-834b29c5800b",
   "metadata": {},
   "outputs": [],
   "source": [
    "def compute_power(sim_data: td.SimulationData) -> float:\n",
    "    \"\"\"Post process the result of the Simulation run to return the power in the mode at index=0.\"\"\"\n",
    "\n",
    "    freq0 = sim_data.simulation.monitors[0].freqs[0]\n",
    "    mode_data = sim_data[\"mode\"]\n",
    "    mode_amps = mode_data.amps\n",
    "    amp = mode_amps.sel(direction=\"+\", f=freq0, mode_index=0).values\n",
    "    return anp.sum(abs(amp) ** 2)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a49d64c6-7591-4b8b-bfa3-d09c1501d4b0",
   "metadata": {},
   "source": [
    "### Defining the tidy3d simulation function for differentiation\n",
    "\n",
    "Next, we can import the `tidy3d..web.run` function and put all the pieces together into a single function to compute the 0th order transmitted power as a function of `center`, `size`, and `eps` (relative permittivity) of the scatterer."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "7257472c-5db1-4b93-8cdb-24b3cc32775d",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">10:49:07 CEST </span>INFO: env_key is <span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span>                                             \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m10:49:07 CEST\u001b[0m\u001b[2;36m \u001b[0mINFO: env_key is \u001b[3;35mNone\u001b[0m                                             \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import tidy3d.web as web"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c5e5e42e-dc9f-4e01-b39b-2f2f9f1bb680",
   "metadata": {},
   "outputs": [],
   "source": [
    "def power(center: tuple, size: tuple, eps: float) -> float:\n",
    "    \"\"\"Compute power transmitted into 0th order mode given a set of scatterer parameters.\"\"\"\n",
    "    sim = make_simulation(center=center, size=size, eps=eps)\n",
    "    sim_data = web.run(sim, task_name=\"autograd 1\")\n",
    "    return compute_power(sim_data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "a89d7ff4-19c4-484e-824c-504654a71a91",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">10:49:08 CEST </span>Created task <span style=\"color: #008000; text-decoration-color: #008000\">'autograd 1'</span> with task_id                            \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span><span style=\"color: #008000; text-decoration-color: #008000\">'fdve-7e7581c3-7428-4453-93d8-f8c319a586a5'</span> and task_type <span style=\"color: #008000; text-decoration-color: #008000\">'FDTD'</span>. \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m10:49:08 CEST\u001b[0m\u001b[2;36m \u001b[0mCreated task \u001b[32m'autograd 1'\u001b[0m with task_id                            \n",
       "\u001b[2;36m              \u001b[0m\u001b[32m'fdve-7e7581c3-7428-4453-93d8-f8c319a586a5'\u001b[0m and task_type \u001b[32m'FDTD'\u001b[0m. \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span>View task using web UI at                                         \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span><a href=\"https://tidy3d.simulation.cloud/workbench?taskId=fdve-7e7581c3-7428-4453-93d8-f8c319a586a5\" target=\"_blank\"><span style=\"color: #008000; text-decoration-color: #008000\">'https://tidy3d.simulation.cloud/workbench?taskId=fdve-7e7581c3-74</span></a>\n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span><a href=\"https://tidy3d.simulation.cloud/workbench?taskId=fdve-7e7581c3-7428-4453-93d8-f8c319a586a5\" target=\"_blank\"><span style=\"color: #008000; text-decoration-color: #008000\">28-4453-93d8-f8c319a586a5'</span></a>.                                       \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m             \u001b[0m\u001b[2;36m \u001b[0mView task using web UI at                                         \n",
       "\u001b[2;36m              \u001b[0m\u001b]8;id=513732;https://tidy3d.simulation.cloud/workbench?taskId=fdve-7e7581c3-7428-4453-93d8-f8c319a586a5\u001b\\\u001b[32m'https://tidy3d.simulation.cloud/workbench?\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=454718;https://tidy3d.simulation.cloud/workbench?taskId=fdve-7e7581c3-7428-4453-93d8-f8c319a586a5\u001b\\\u001b[32mtaskId\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=513732;https://tidy3d.simulation.cloud/workbench?taskId=fdve-7e7581c3-7428-4453-93d8-f8c319a586a5\u001b\\\u001b[32m=\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=575079;https://tidy3d.simulation.cloud/workbench?taskId=fdve-7e7581c3-7428-4453-93d8-f8c319a586a5\u001b\\\u001b[32mfdve\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=513732;https://tidy3d.simulation.cloud/workbench?taskId=fdve-7e7581c3-7428-4453-93d8-f8c319a586a5\u001b\\\u001b[32m-7e7581c3-74\u001b[0m\u001b]8;;\u001b\\\n",
       "\u001b[2;36m              \u001b[0m\u001b]8;id=513732;https://tidy3d.simulation.cloud/workbench?taskId=fdve-7e7581c3-7428-4453-93d8-f8c319a586a5\u001b\\\u001b[32m28-4453-93d8-f8c319a586a5'\u001b[0m\u001b]8;;\u001b\\.                                       \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span>Task folder: <a href=\"https://tidy3d.simulation.cloud/folders/folder-7a0ee478-ee62-43e0-9a9e-26a06b299b0a\" target=\"_blank\"><span style=\"color: #008000; text-decoration-color: #008000\">'default'</span></a>.                                           \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m             \u001b[0m\u001b[2;36m \u001b[0mTask folder: \u001b]8;id=687521;https://tidy3d.simulation.cloud/folders/folder-7a0ee478-ee62-43e0-9a9e-26a06b299b0a\u001b\\\u001b[32m'default'\u001b[0m\u001b]8;;\u001b\\.                                           \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "6722f852cca44b5585cf971267710f63",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">10:49:10 CEST </span>Maximum FlexCredit cost: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">0.025</span>. Minimum cost depends on task      \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span>execution details. Use <span style=\"color: #008000; text-decoration-color: #008000\">'web.real_cost(task_id)'</span> to get the billed \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span>FlexCredit cost after a simulation run.                           \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m10:49:10 CEST\u001b[0m\u001b[2;36m \u001b[0mMaximum FlexCredit cost: \u001b[1;36m0.025\u001b[0m. Minimum cost depends on task      \n",
       "\u001b[2;36m              \u001b[0mexecution details. Use \u001b[32m'web.real_cost\u001b[0m\u001b[32m(\u001b[0m\u001b[32mtask_id\u001b[0m\u001b[32m)\u001b[0m\u001b[32m'\u001b[0m to get the billed \n",
       "\u001b[2;36m              \u001b[0mFlexCredit cost after a simulation run.                           \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">10:49:11 CEST </span>status = queued                                                   \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m10:49:11 CEST\u001b[0m\u001b[2;36m \u001b[0mstatus = queued                                                   \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span>To cancel the simulation, use <span style=\"color: #008000; text-decoration-color: #008000\">'web.abort(task_id)'</span> or             \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span><span style=\"color: #008000; text-decoration-color: #008000\">'web.delete(task_id)'</span> or abort/delete the task in the web UI.     \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span>Terminating the Python script will not stop the job running on the\n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span>cloud.                                                            \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m             \u001b[0m\u001b[2;36m \u001b[0mTo cancel the simulation, use \u001b[32m'web.abort\u001b[0m\u001b[32m(\u001b[0m\u001b[32mtask_id\u001b[0m\u001b[32m)\u001b[0m\u001b[32m'\u001b[0m or             \n",
       "\u001b[2;36m              \u001b[0m\u001b[32m'web.delete\u001b[0m\u001b[32m(\u001b[0m\u001b[32mtask_id\u001b[0m\u001b[32m)\u001b[0m\u001b[32m'\u001b[0m or abort/delete the task in the web UI.     \n",
       "\u001b[2;36m              \u001b[0mTerminating the Python script will not stop the job running on the\n",
       "\u001b[2;36m              \u001b[0mcloud.                                                            \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "a5fd4e732e554db89ee934b38bfcb60e",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">10:49:18 CEST </span>status = preprocess                                               \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m10:49:18 CEST\u001b[0m\u001b[2;36m \u001b[0mstatus = preprocess                                               \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">10:49:22 CEST </span>starting up solver                                                \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m10:49:22 CEST\u001b[0m\u001b[2;36m \u001b[0mstarting up solver                                                \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">10:49:23 CEST </span>running solver                                                    \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m10:49:23 CEST\u001b[0m\u001b[2;36m \u001b[0mrunning solver                                                    \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "891d5d3642c144adba41ed7963246c28",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">10:49:25 CEST </span>early shutoff detected at <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">8</span>%, exiting.                            \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m10:49:25 CEST\u001b[0m\u001b[2;36m \u001b[0mearly shutoff detected at \u001b[1;36m8\u001b[0m%, exiting.                            \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span>status = success                                                  \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m             \u001b[0m\u001b[2;36m \u001b[0mstatus = success                                                  \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span>View simulation result at                                         \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span><a href=\"https://tidy3d.simulation.cloud/workbench?taskId=fdve-7e7581c3-7428-4453-93d8-f8c319a586a5\" target=\"_blank\"><span style=\"color: #000080; text-decoration-color: #000080; text-decoration: underline\">'https://tidy3d.simulation.cloud/workbench?taskId=fdve-7e7581c3-74</span></a>\n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span><a href=\"https://tidy3d.simulation.cloud/workbench?taskId=fdve-7e7581c3-7428-4453-93d8-f8c319a586a5\" target=\"_blank\"><span style=\"color: #000080; text-decoration-color: #000080; text-decoration: underline\">28-4453-93d8-f8c319a586a5'</span></a><span style=\"color: #000080; text-decoration-color: #000080; text-decoration: underline\">.</span>                                       \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m             \u001b[0m\u001b[2;36m \u001b[0mView simulation result at                                         \n",
       "\u001b[2;36m              \u001b[0m\u001b]8;id=111166;https://tidy3d.simulation.cloud/workbench?taskId=fdve-7e7581c3-7428-4453-93d8-f8c319a586a5\u001b\\\u001b[4;34m'https://tidy3d.simulation.cloud/workbench?\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=712658;https://tidy3d.simulation.cloud/workbench?taskId=fdve-7e7581c3-7428-4453-93d8-f8c319a586a5\u001b\\\u001b[4;34mtaskId\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=111166;https://tidy3d.simulation.cloud/workbench?taskId=fdve-7e7581c3-7428-4453-93d8-f8c319a586a5\u001b\\\u001b[4;34m=\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=567386;https://tidy3d.simulation.cloud/workbench?taskId=fdve-7e7581c3-7428-4453-93d8-f8c319a586a5\u001b\\\u001b[4;34mfdve\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=111166;https://tidy3d.simulation.cloud/workbench?taskId=fdve-7e7581c3-7428-4453-93d8-f8c319a586a5\u001b\\\u001b[4;34m-7e7581c3-74\u001b[0m\u001b]8;;\u001b\\\n",
       "\u001b[2;36m              \u001b[0m\u001b]8;id=111166;https://tidy3d.simulation.cloud/workbench?taskId=fdve-7e7581c3-7428-4453-93d8-f8c319a586a5\u001b\\\u001b[4;34m28-4453-93d8-f8c319a586a5'\u001b[0m\u001b]8;;\u001b\\\u001b[4;34m.\u001b[0m                                       \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "f0154641f417412bac1183897e747758",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">10:49:26 CEST </span>loading simulation from simulation_data.hdf5                      \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m10:49:26 CEST\u001b[0m\u001b[2;36m \u001b[0mloading simulation from simulation_data.hdf5                      \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "np.float64(0.5520316628920412)"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "power(center0, size0, eps0)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "90ee44c1-38a6-4dba-add5-9b36c43454cb",
   "metadata": {},
   "source": [
    "### Running and differentiating the simulation using `autograd`\n",
    "\n",
    "Finally, using the `autograd` tools described earlier, we can differentiate this `power` function. \n",
    "\n",
    "For demonstration, let's use `autograd.value_and_grad` to both compute the power **and** the gradient w.r.t. each of the 3 input parameters."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "8a6518dd-c5a9-4826-95f6-7a0ed90e2f9a",
   "metadata": {},
   "outputs": [],
   "source": [
    "d_power = ag.value_and_grad(power, argnum=(0, 1, 2))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6f787405-1c6e-40b1-81d2-1a64d667e009",
   "metadata": {},
   "source": [
    "We will run this function and assign variables to the power values and the gradients returned.\n",
    "\n",
    "Note that running this will set off **two** separate tasks, one after another, called, `\"adjoint_power_fwd\"` and `\"adjoint_power_adj\"`.\n",
    "\n",
    "The first is evaluating our simulation in \"forward mode\", computing the power and stashing information needed for gradient computation.\n",
    "\n",
    "The second step runs the \"adjoint\" simulation, in which the output monitor is converted to a source and the simulation is re-run.\n",
    "\n",
    "The results of both of these simulations runs are combined behind the scene to tell `autograd` how to compute the gradient for us."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "68f34dce-3504-4dba-8012-436c4ff21ecc",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span>INFO: running primitive <span style=\"color: #008000; text-decoration-color: #008000\">'_run_primitive()'</span>                        \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m             \u001b[0m\u001b[2;36m \u001b[0mINFO: running primitive \u001b[32m'_run_primitive\u001b[0m\u001b[32m(\u001b[0m\u001b[32m)\u001b[0m\u001b[32m'\u001b[0m                        \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span>INFO: running tidy3d_autograd simulation with <span style=\"color: #008000; text-decoration-color: #008000\">'_run_tidy3d()'</span>     \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m             \u001b[0m\u001b[2;36m \u001b[0mINFO: running tidy3d_autograd simulation with \u001b[32m'_run_tidy3d\u001b[0m\u001b[32m(\u001b[0m\u001b[32m)\u001b[0m\u001b[32m'\u001b[0m     \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">10:49:27 CEST </span>Created task <span style=\"color: #008000; text-decoration-color: #008000\">'autograd 1'</span> with task_id                            \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span><span style=\"color: #008000; text-decoration-color: #008000\">'fdve-39e72cfd-d765-4f94-ac08-c7e1968cdd87'</span> and task_type <span style=\"color: #008000; text-decoration-color: #008000\">'FDTD'</span>. \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m10:49:27 CEST\u001b[0m\u001b[2;36m \u001b[0mCreated task \u001b[32m'autograd 1'\u001b[0m with task_id                            \n",
       "\u001b[2;36m              \u001b[0m\u001b[32m'fdve-39e72cfd-d765-4f94-ac08-c7e1968cdd87'\u001b[0m and task_type \u001b[32m'FDTD'\u001b[0m. \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span>View task using web UI at                                         \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span><a href=\"https://tidy3d.simulation.cloud/workbench?taskId=fdve-39e72cfd-d765-4f94-ac08-c7e1968cdd87\" target=\"_blank\"><span style=\"color: #008000; text-decoration-color: #008000\">'https://tidy3d.simulation.cloud/workbench?taskId=fdve-39e72cfd-d7</span></a>\n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span><a href=\"https://tidy3d.simulation.cloud/workbench?taskId=fdve-39e72cfd-d765-4f94-ac08-c7e1968cdd87\" target=\"_blank\"><span style=\"color: #008000; text-decoration-color: #008000\">65-4f94-ac08-c7e1968cdd87'</span></a>.                                       \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m             \u001b[0m\u001b[2;36m \u001b[0mView task using web UI at                                         \n",
       "\u001b[2;36m              \u001b[0m\u001b]8;id=779377;https://tidy3d.simulation.cloud/workbench?taskId=fdve-39e72cfd-d765-4f94-ac08-c7e1968cdd87\u001b\\\u001b[32m'https://tidy3d.simulation.cloud/workbench?\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=447655;https://tidy3d.simulation.cloud/workbench?taskId=fdve-39e72cfd-d765-4f94-ac08-c7e1968cdd87\u001b\\\u001b[32mtaskId\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=779377;https://tidy3d.simulation.cloud/workbench?taskId=fdve-39e72cfd-d765-4f94-ac08-c7e1968cdd87\u001b\\\u001b[32m=\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=493664;https://tidy3d.simulation.cloud/workbench?taskId=fdve-39e72cfd-d765-4f94-ac08-c7e1968cdd87\u001b\\\u001b[32mfdve\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=779377;https://tidy3d.simulation.cloud/workbench?taskId=fdve-39e72cfd-d765-4f94-ac08-c7e1968cdd87\u001b\\\u001b[32m-39e72cfd-d7\u001b[0m\u001b]8;;\u001b\\\n",
       "\u001b[2;36m              \u001b[0m\u001b]8;id=779377;https://tidy3d.simulation.cloud/workbench?taskId=fdve-39e72cfd-d765-4f94-ac08-c7e1968cdd87\u001b\\\u001b[32m65-4f94-ac08-c7e1968cdd87'\u001b[0m\u001b]8;;\u001b\\.                                       \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span>Task folder: <a href=\"https://tidy3d.simulation.cloud/folders/folder-7a0ee478-ee62-43e0-9a9e-26a06b299b0a\" target=\"_blank\"><span style=\"color: #008000; text-decoration-color: #008000\">'default'</span></a>.                                           \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m             \u001b[0m\u001b[2;36m \u001b[0mTask folder: \u001b]8;id=647122;https://tidy3d.simulation.cloud/folders/folder-7a0ee478-ee62-43e0-9a9e-26a06b299b0a\u001b\\\u001b[32m'default'\u001b[0m\u001b]8;;\u001b\\.                                           \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "62fc5c2f575d4866b1514ab3678fa60a",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">10:49:29 CEST </span>Maximum FlexCredit cost: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">0.025</span>. Minimum cost depends on task      \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span>execution details. Use <span style=\"color: #008000; text-decoration-color: #008000\">'web.real_cost(task_id)'</span> to get the billed \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span>FlexCredit cost after a simulation run.                           \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m10:49:29 CEST\u001b[0m\u001b[2;36m \u001b[0mMaximum FlexCredit cost: \u001b[1;36m0.025\u001b[0m. Minimum cost depends on task      \n",
       "\u001b[2;36m              \u001b[0mexecution details. Use \u001b[32m'web.real_cost\u001b[0m\u001b[32m(\u001b[0m\u001b[32mtask_id\u001b[0m\u001b[32m)\u001b[0m\u001b[32m'\u001b[0m to get the billed \n",
       "\u001b[2;36m              \u001b[0mFlexCredit cost after a simulation run.                           \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">10:49:30 CEST </span>status = queued                                                   \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m10:49:30 CEST\u001b[0m\u001b[2;36m \u001b[0mstatus = queued                                                   \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span>To cancel the simulation, use <span style=\"color: #008000; text-decoration-color: #008000\">'web.abort(task_id)'</span> or             \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span><span style=\"color: #008000; text-decoration-color: #008000\">'web.delete(task_id)'</span> or abort/delete the task in the web UI.     \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span>Terminating the Python script will not stop the job running on the\n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span>cloud.                                                            \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m             \u001b[0m\u001b[2;36m \u001b[0mTo cancel the simulation, use \u001b[32m'web.abort\u001b[0m\u001b[32m(\u001b[0m\u001b[32mtask_id\u001b[0m\u001b[32m)\u001b[0m\u001b[32m'\u001b[0m or             \n",
       "\u001b[2;36m              \u001b[0m\u001b[32m'web.delete\u001b[0m\u001b[32m(\u001b[0m\u001b[32mtask_id\u001b[0m\u001b[32m)\u001b[0m\u001b[32m'\u001b[0m or abort/delete the task in the web UI.     \n",
       "\u001b[2;36m              \u001b[0mTerminating the Python script will not stop the job running on the\n",
       "\u001b[2;36m              \u001b[0mcloud.                                                            \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "ffcd91ac014e443eb564c9c49c743e4f",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">10:49:41 CEST </span>status = preprocess                                               \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m10:49:41 CEST\u001b[0m\u001b[2;36m \u001b[0mstatus = preprocess                                               \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">10:49:46 CEST </span>starting up solver                                                \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m10:49:46 CEST\u001b[0m\u001b[2;36m \u001b[0mstarting up solver                                                \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span>running solver                                                    \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m             \u001b[0m\u001b[2;36m \u001b[0mrunning solver                                                    \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "9fe7c01d995940cb9e3b0272cdd94d7f",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">10:49:47 CEST </span>early shutoff detected at <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">8</span>%, exiting.                            \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m10:49:47 CEST\u001b[0m\u001b[2;36m \u001b[0mearly shutoff detected at \u001b[1;36m8\u001b[0m%, exiting.                            \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span>status = postprocess                                              \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m             \u001b[0m\u001b[2;36m \u001b[0mstatus = postprocess                                              \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "69fcc32fef714bec9b9fd65d00a8c0f6",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">10:49:49 CEST </span>status = success                                                  \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m10:49:49 CEST\u001b[0m\u001b[2;36m \u001b[0mstatus = success                                                  \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">10:49:51 CEST </span>View simulation result at                                         \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span><a href=\"https://tidy3d.simulation.cloud/workbench?taskId=fdve-39e72cfd-d765-4f94-ac08-c7e1968cdd87\" target=\"_blank\"><span style=\"color: #000080; text-decoration-color: #000080; text-decoration: underline\">'https://tidy3d.simulation.cloud/workbench?taskId=fdve-39e72cfd-d7</span></a>\n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span><a href=\"https://tidy3d.simulation.cloud/workbench?taskId=fdve-39e72cfd-d765-4f94-ac08-c7e1968cdd87\" target=\"_blank\"><span style=\"color: #000080; text-decoration-color: #000080; text-decoration: underline\">65-4f94-ac08-c7e1968cdd87'</span></a><span style=\"color: #000080; text-decoration-color: #000080; text-decoration: underline\">.</span>                                       \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m10:49:51 CEST\u001b[0m\u001b[2;36m \u001b[0mView simulation result at                                         \n",
       "\u001b[2;36m              \u001b[0m\u001b]8;id=972814;https://tidy3d.simulation.cloud/workbench?taskId=fdve-39e72cfd-d765-4f94-ac08-c7e1968cdd87\u001b\\\u001b[4;34m'https://tidy3d.simulation.cloud/workbench?\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=718126;https://tidy3d.simulation.cloud/workbench?taskId=fdve-39e72cfd-d765-4f94-ac08-c7e1968cdd87\u001b\\\u001b[4;34mtaskId\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=972814;https://tidy3d.simulation.cloud/workbench?taskId=fdve-39e72cfd-d765-4f94-ac08-c7e1968cdd87\u001b\\\u001b[4;34m=\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=855655;https://tidy3d.simulation.cloud/workbench?taskId=fdve-39e72cfd-d765-4f94-ac08-c7e1968cdd87\u001b\\\u001b[4;34mfdve\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=972814;https://tidy3d.simulation.cloud/workbench?taskId=fdve-39e72cfd-d765-4f94-ac08-c7e1968cdd87\u001b\\\u001b[4;34m-39e72cfd-d7\u001b[0m\u001b]8;;\u001b\\\n",
       "\u001b[2;36m              \u001b[0m\u001b]8;id=972814;https://tidy3d.simulation.cloud/workbench?taskId=fdve-39e72cfd-d765-4f94-ac08-c7e1968cdd87\u001b\\\u001b[4;34m65-4f94-ac08-c7e1968cdd87'\u001b[0m\u001b]8;;\u001b\\\u001b[4;34m.\u001b[0m                                       \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "311c07f79f1f426bb2028df4cc3b37a5",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">10:49:54 CEST </span>loading simulation from simulation_data.hdf5                      \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m10:49:54 CEST\u001b[0m\u001b[2;36m \u001b[0mloading simulation from simulation_data.hdf5                      \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span>INFO:  -&gt; <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">1</span> monitors, <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">1</span> adjoint field monitors, <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">1</span> adjoint eps     \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span>monitors.                                                         \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m             \u001b[0m\u001b[2;36m \u001b[0mINFO:  -> \u001b[1;36m1\u001b[0m monitors, \u001b[1;36m1\u001b[0m adjoint field monitors, \u001b[1;36m1\u001b[0m adjoint eps     \n",
       "\u001b[2;36m              \u001b[0mmonitors.                                                         \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span>INFO: Number of fields to compute gradients for: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">3</span>                \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m             \u001b[0m\u001b[2;36m \u001b[0mINFO: Number of fields to compute gradients for: \u001b[1;36m3\u001b[0m                \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span>INFO: Using local gradient computation mode                       \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m             \u001b[0m\u001b[2;36m \u001b[0mINFO: Using local gradient computation mode                       \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span>INFO: Constructing custom VJP function for backwards pass.        \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m             \u001b[0m\u001b[2;36m \u001b[0mINFO: Constructing custom VJP function for backwards pass.        \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span>INFO: Running custom vjp <span style=\"font-weight: bold\">(</span>adjoint<span style=\"font-weight: bold\">)</span> pipeline.                      \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m             \u001b[0m\u001b[2;36m \u001b[0mINFO: Running custom vjp \u001b[1m(\u001b[0madjoint\u001b[1m)\u001b[0m pipeline.                      \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span>INFO: Created <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">1</span> adjoint sources for monitor <span style=\"color: #008000; text-decoration-color: #008000\">'mode'</span>.               \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m             \u001b[0m\u001b[2;36m \u001b[0mINFO: Created \u001b[1;36m1\u001b[0m adjoint sources for monitor \u001b[32m'mode'\u001b[0m.               \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span>INFO: Found <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">1</span> spatial ports and <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">1</span> unique frequencies.             \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m             \u001b[0m\u001b[2;36m \u001b[0mINFO: Found \u001b[1;36m1\u001b[0m spatial ports and \u001b[1;36m1\u001b[0m unique frequencies.             \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span>INFO: Grouping adjoint sources by frequency.                      \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m             \u001b[0m\u001b[2;36m \u001b[0mINFO: Grouping adjoint sources by frequency.                      \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span>INFO: Created <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">1</span> adjoint source groups.                            \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m             \u001b[0m\u001b[2;36m \u001b[0mINFO: Created \u001b[1;36m1\u001b[0m adjoint source groups.                            \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span>INFO: Created <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">1</span> adjoint simulations.                              \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m             \u001b[0m\u001b[2;36m \u001b[0mINFO: Created \u001b[1;36m1\u001b[0m adjoint simulations.                              \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span>INFO: Running <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">1</span> adjoint simulations                               \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m             \u001b[0m\u001b[2;36m \u001b[0mINFO: Running \u001b[1;36m1\u001b[0m adjoint simulations                               \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span>INFO: Starting local batch adjoint simulations                    \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m             \u001b[0m\u001b[2;36m \u001b[0mINFO: Starting local batch adjoint simulations                    \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span>INFO: running tidy3d_autograd batch with <span style=\"color: #008000; text-decoration-color: #008000\">'_run_async_tidy3d()'</span>    \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m             \u001b[0m\u001b[2;36m \u001b[0mINFO: running tidy3d_autograd batch with \u001b[32m'_run_async_tidy3d\u001b[0m\u001b[32m(\u001b[0m\u001b[32m)\u001b[0m\u001b[32m'\u001b[0m    \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "5590ec2dd45a4810987841fbc2e810ba",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">10:49:56 CEST </span>Started working on Batch containing <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">1</span> tasks.                      \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m10:49:56 CEST\u001b[0m\u001b[2;36m \u001b[0mStarted working on Batch containing \u001b[1;36m1\u001b[0m tasks.                      \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">10:49:57 CEST </span>Maximum FlexCredit cost: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">0.025</span> for the whole batch.               \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m10:49:57 CEST\u001b[0m\u001b[2;36m \u001b[0mMaximum FlexCredit cost: \u001b[1;36m0.025\u001b[0m for the whole batch.               \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span>Use <span style=\"color: #008000; text-decoration-color: #008000\">'Batch.real_cost()'</span> to get the billed FlexCredit cost after   \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span>the Batch has completed.                                          \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m             \u001b[0m\u001b[2;36m \u001b[0mUse \u001b[32m'Batch.real_cost\u001b[0m\u001b[32m(\u001b[0m\u001b[32m)\u001b[0m\u001b[32m'\u001b[0m to get the billed FlexCredit cost after   \n",
       "\u001b[2;36m              \u001b[0mthe Batch has completed.                                          \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "0d74ac492e7144fd925ea47f4cc95deb",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">10:50:10 CEST </span>Batch complete.                                                   \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m10:50:10 CEST\u001b[0m\u001b[2;36m \u001b[0mBatch complete.                                                   \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "5791c5dbd1d14675b18904a205290344",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">10:50:13 CEST </span>INFO: Completed local batch adjoint simulations                   \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m10:50:13 CEST\u001b[0m\u001b[2;36m \u001b[0mINFO: Completed local batch adjoint simulations                   \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">10:50:15 CEST </span>INFO: Processing VJP contribution from autograd 1_adjoint_0       \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m10:50:15 CEST\u001b[0m\u001b[2;36m \u001b[0mINFO: Processing VJP contribution from autograd 1_adjoint_0       \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">              </span>INFO: Processing VJP contribution from autograd 1_adjoint_0       \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m             \u001b[0m\u001b[2;36m \u001b[0mINFO: Processing VJP contribution from autograd 1_adjoint_0       \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "power_value, (dp_dcenter, dp_dsize, dp_deps) = d_power(center0, size0, eps0)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0ac63a75-89de-42c5-929d-f46da6f22864",
   "metadata": {},
   "source": [
    "> Note: the gradient evaluation functions returned by `autograd.grad()` do not accept keyword arguments (ie. `center=(0.,0.,0.)`) and instead accept positional arguments (without the argument name). You may run across this when trying to evaluate gradients so it's a good idea to keep in mind.\n",
    "\n",
    "We can take a look at our computed power and gradient information. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "f0a786d2-88c7-406a-a6cd-956e6cfb904c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "power = 0.552\n",
      "d_power/d_center = (array(0.00118873), array(4.52263923e-06), array(-0.0005651))\n",
      "d_power/d_size = (array(-0.01353028), array(0.12544327), array(-0.13223668))\n",
      "d_power/d_eps = -0.16138196406328512\n"
     ]
    }
   ],
   "source": [
    "print(f\"power = {power_value:.3f}\")\n",
    "print(f\"d_power/d_center = {dp_dcenter}\")\n",
    "print(f\"d_power/d_size = {dp_dsize}\")\n",
    "print(f\"d_power/d_eps = {dp_deps}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a20619d4-d14b-431f-b543-7f0f0bc2907a",
   "metadata": {},
   "source": [
    "From this, we can infer several things that fit our intuition, for example that:\n",
    "* the transmitted power should **decrease** if we increase the permittivity of our scatterer.\n",
    "* the transmitted power does not depend strongly on the position of the scatterer along the propagation direction.\n",
    "\n",
    "## Conclusion & Next Steps\n",
    "\n",
    "This gives the most basic introduction to the principles behind autograd and the adjoint method.\n",
    "\n",
    "In subsequent notebooks, we will show how to:\n",
    " * Check the gradients returned by this method against brute force computed gradients for accuracy.\n",
    " * Perform gradient-based optimization using autograd."
   ]
  }
 ],
 "metadata": {
  "description": "This notebook introduces the basics of automatic differentiation and the adjoint optimization in Tidy3D FDTD.",
  "feature_image": "",
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "keywords": "adjoint optimization, autograd, automatic differentiation, Tidy3D, FDTD",
  "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"
  },
  "title": "FDTD Adjoint Optimization Basics using Autograd | Flexcompute",
  "widgets": {
   "application/vnd.jupyter.widget-state+json": {
    "state": {
     "0c38b4d069434f9a8da8dab1582e8691": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "22263ab07b714e918b3f7631c2d1d235": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "3e4b0212997349e4b94f6258bab4bbff": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "40839ca026d94a15960f76567a908e3b": {
      "model_module": "@jupyter-widgets/output",
      "model_module_version": "1.0.0",
      "model_name": "OutputModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/output",
       "_model_module_version": "1.0.0",
       "_model_name": "OutputModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/output",
       "_view_module_version": "1.0.0",
       "_view_name": "OutputView",
       "layout": "IPY_MODEL_59dd7a78d761479f95a37d185520b758",
       "msg_id": "",
       "outputs": [
        {
         "data": {
          "text/html": "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">↑</span> <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">simulation.hdf5.gz</span> <span style=\"color: #729c1f; text-decoration-color: #729c1f\">━━━━━━━━━━━━━━━━━━━━━━━━━</span> <span style=\"color: #800080; text-decoration-color: #800080\">100.0%</span> • <span style=\"color: #008000; text-decoration-color: #008000\">1.3/1.3 kB</span> • <span style=\"color: #800000; text-decoration-color: #800000\">?</span> • <span style=\"color: #008080; text-decoration-color: #008080\">0:00:00</span>\n</pre>\n",
          "text/plain": "\u001b[1;31m↑\u001b[0m \u001b[1;34msimulation.hdf5.gz\u001b[0m \u001b[38;2;114;156;31m━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m100.0%\u001b[0m • \u001b[32m1.3/1.3 kB\u001b[0m • \u001b[31m?\u001b[0m • \u001b[36m0:00:00\u001b[0m\n"
         },
         "metadata": {},
         "output_type": "display_data"
        }
       ],
       "tabbable": null,
       "tooltip": null
      }
     },
     "442b09ebc99b4619a025f6ebf46eb4df": {
      "model_module": "@jupyter-widgets/output",
      "model_module_version": "1.0.0",
      "model_name": "OutputModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/output",
       "_model_module_version": "1.0.0",
       "_model_name": "OutputModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/output",
       "_view_module_version": "1.0.0",
       "_view_name": "OutputView",
       "layout": "IPY_MODEL_3e4b0212997349e4b94f6258bab4bbff",
       "msg_id": "",
       "outputs": [
        {
         "data": {
          "text/html": "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008000; text-decoration-color: #008000\">🚶 </span> <span style=\"color: #008000; text-decoration-color: #008000; font-weight: bold\">Finishing 'adjoint_power_adj'...</span>\n</pre>\n",
          "text/plain": "\u001b[32m🚶 \u001b[0m \u001b[1;32mFinishing 'adjoint_power_adj'...\u001b[0m\n"
         },
         "metadata": {},
         "output_type": "display_data"
        }
       ],
       "tabbable": null,
       "tooltip": null
      }
     },
     "447a8d8268d9466099cfe6df0d5e58cd": {
      "model_module": "@jupyter-widgets/output",
      "model_module_version": "1.0.0",
      "model_name": "OutputModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/output",
       "_model_module_version": "1.0.0",
       "_model_name": "OutputModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/output",
       "_view_module_version": "1.0.0",
       "_view_name": "OutputView",
       "layout": "IPY_MODEL_22263ab07b714e918b3f7631c2d1d235",
       "msg_id": "",
       "outputs": [
        {
         "data": {
          "text/html": "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008000; text-decoration-color: #008000; font-weight: bold\">↓</span> <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">monitor_data.hdf5</span> <span style=\"color: #729c1f; text-decoration-color: #729c1f\">━━━━━━━━━━━━━━━━━━━━━━━━</span> <span style=\"color: #800080; text-decoration-color: #800080\">100.0%</span> • <span style=\"color: #008000; text-decoration-color: #008000\">26.0/26.0 kB</span> • <span style=\"color: #800000; text-decoration-color: #800000\">?</span> • <span style=\"color: #008080; text-decoration-color: #008080\">0:00:00</span>\n</pre>\n",
          "text/plain": "\u001b[1;32m↓\u001b[0m \u001b[1;34mmonitor_data.hdf5\u001b[0m \u001b[38;2;114;156;31m━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m100.0%\u001b[0m • \u001b[32m26.0/26.0 kB\u001b[0m • \u001b[31m?\u001b[0m • \u001b[36m0:00:00\u001b[0m\n"
         },
         "metadata": {},
         "output_type": "display_data"
        }
       ],
       "tabbable": null,
       "tooltip": null
      }
     },
     "59dd7a78d761479f95a37d185520b758": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "5cfda64f2b63446fa44ee6b885e80d56": {
      "model_module": "@jupyter-widgets/output",
      "model_module_version": "1.0.0",
      "model_name": "OutputModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/output",
       "_model_module_version": "1.0.0",
       "_model_name": "OutputModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/output",
       "_view_module_version": "1.0.0",
       "_view_name": "OutputView",
       "layout": "IPY_MODEL_689be44a1feb4f15806ffd340363f7c6",
       "msg_id": "",
       "outputs": [
        {
         "data": {
          "text/html": "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008000; text-decoration-color: #008000\">🚶 </span> <span style=\"color: #008000; text-decoration-color: #008000; font-weight: bold\">Starting 'adjoint_power_adj'...</span>\n</pre>\n",
          "text/plain": "\u001b[32m🚶 \u001b[0m \u001b[1;32mStarting 'adjoint_power_adj'...\u001b[0m\n"
         },
         "metadata": {},
         "output_type": "display_data"
        }
       ],
       "tabbable": null,
       "tooltip": null
      }
     },
     "5fab5073d62b4cf1a4cdfc6262104037": {
      "model_module": "@jupyter-widgets/output",
      "model_module_version": "1.0.0",
      "model_name": "OutputModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/output",
       "_model_module_version": "1.0.0",
       "_model_name": "OutputModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/output",
       "_view_module_version": "1.0.0",
       "_view_name": "OutputView",
       "layout": "IPY_MODEL_73e9899282044647881f883f74bf4b62",
       "msg_id": "",
       "outputs": [
        {
         "data": {
          "text/html": "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">solver progress (field decay = 0.00e+00) <span style=\"color: #729c1f; text-decoration-color: #729c1f\">━━━━━━━━━━━━━━━━━━━━━━━━━━</span> <span style=\"color: #800080; text-decoration-color: #800080\">100%</span> <span style=\"color: #008080; text-decoration-color: #008080\">0:00:00</span>\n</pre>\n",
          "text/plain": "solver progress (field decay = 0.00e+00) \u001b[38;2;114;156;31m━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m0:00:00\u001b[0m\n"
         },
         "metadata": {},
         "output_type": "display_data"
        }
       ],
       "tabbable": null,
       "tooltip": null
      }
     },
     "61b34c9f786a417e85b5f36aa7579868": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "689be44a1feb4f15806ffd340363f7c6": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "6c01a97d1bd243b5989e53e99737620b": {
      "model_module": "@jupyter-widgets/output",
      "model_module_version": "1.0.0",
      "model_name": "OutputModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/output",
       "_model_module_version": "1.0.0",
       "_model_name": "OutputModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/output",
       "_view_module_version": "1.0.0",
       "_view_name": "OutputView",
       "layout": "IPY_MODEL_0c38b4d069434f9a8da8dab1582e8691",
       "msg_id": "",
       "outputs": [
        {
         "data": {
          "text/html": "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">solver progress (field decay = 0.00e+00) <span style=\"color: #729c1f; text-decoration-color: #729c1f\">━━━━━━━━━━━━━━━━━━━━━━━━━━</span> <span style=\"color: #800080; text-decoration-color: #800080\">100%</span> <span style=\"color: #008080; text-decoration-color: #008080\">0:00:00</span>\n</pre>\n",
          "text/plain": "solver progress (field decay = 0.00e+00) \u001b[38;2;114;156;31m━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m0:00:00\u001b[0m\n"
         },
         "metadata": {},
         "output_type": "display_data"
        }
       ],
       "tabbable": null,
       "tooltip": null
      }
     },
     "6e8b3310f1864aa38f0e887693333e66": {
      "model_module": "@jupyter-widgets/output",
      "model_module_version": "1.0.0",
      "model_name": "OutputModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/output",
       "_model_module_version": "1.0.0",
       "_model_name": "OutputModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/output",
       "_view_module_version": "1.0.0",
       "_view_name": "OutputView",
       "layout": "IPY_MODEL_c56924fa669d49bfa83333df3c73ca89",
       "msg_id": "",
       "outputs": [
        {
         "data": {
          "text/html": "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">↑</span> <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">jax_info.json</span> <span style=\"color: #729c1f; text-decoration-color: #729c1f\">━━━━━━━━━━━━━━━━━━━━━━━━━━━</span> <span style=\"color: #800080; text-decoration-color: #800080\">100.0%</span> • <span style=\"color: #008000; text-decoration-color: #008000\">174/174 bytes</span> • <span style=\"color: #800000; text-decoration-color: #800000\">?</span> • <span style=\"color: #008080; text-decoration-color: #008080\">0:00:00</span>\n</pre>\n",
          "text/plain": "\u001b[1;31m↑\u001b[0m \u001b[1;34mjax_info.json\u001b[0m \u001b[38;2;114;156;31m━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m100.0%\u001b[0m • \u001b[32m174/174 bytes\u001b[0m • \u001b[31m?\u001b[0m • \u001b[36m0:00:00\u001b[0m\n"
         },
         "metadata": {},
         "output_type": "display_data"
        }
       ],
       "tabbable": null,
       "tooltip": null
      }
     },
     "73e9899282044647881f883f74bf4b62": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "7a0191f382bb4f5d830dc50257de6041": {
      "model_module": "@jupyter-widgets/output",
      "model_module_version": "1.0.0",
      "model_name": "OutputModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/output",
       "_model_module_version": "1.0.0",
       "_model_name": "OutputModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/output",
       "_view_module_version": "1.0.0",
       "_view_name": "OutputView",
       "layout": "IPY_MODEL_db5f56f6df544ef4a0b1f92a78a4e656",
       "msg_id": "",
       "outputs": [
        {
         "data": {
          "text/html": "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">↑</span> <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">jax_info.json</span> <span style=\"color: #729c1f; text-decoration-color: #729c1f\">━━━━━━━━━━━━━━━━━━━━━━━━━━━</span> <span style=\"color: #800080; text-decoration-color: #800080\">100.0%</span> • <span style=\"color: #008000; text-decoration-color: #008000\">174/174 bytes</span> • <span style=\"color: #800000; text-decoration-color: #800000\">?</span> • <span style=\"color: #008080; text-decoration-color: #008080\">0:00:00</span>\n</pre>\n",
          "text/plain": "\u001b[1;31m↑\u001b[0m \u001b[1;34mjax_info.json\u001b[0m \u001b[38;2;114;156;31m━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m100.0%\u001b[0m • \u001b[32m174/174 bytes\u001b[0m • \u001b[31m?\u001b[0m • \u001b[36m0:00:00\u001b[0m\n"
         },
         "metadata": {},
         "output_type": "display_data"
        }
       ],
       "tabbable": null,
       "tooltip": null
      }
     },
     "b53c68ddd8fd4415ab2e76a8c41c917e": {
      "model_module": "@jupyter-widgets/output",
      "model_module_version": "1.0.0",
      "model_name": "OutputModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/output",
       "_model_module_version": "1.0.0",
       "_model_name": "OutputModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/output",
       "_view_module_version": "1.0.0",
       "_view_name": "OutputView",
       "layout": "IPY_MODEL_ffb1092616b54fbe9e86418b8843fb6d",
       "msg_id": "",
       "outputs": [
        {
         "data": {
          "text/html": "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008000; text-decoration-color: #008000; font-weight: bold\">↓</span> <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">jax_sim_vjp.hdf5</span> <span style=\"color: #729c1f; text-decoration-color: #729c1f\">━━━━━━━━━━━━━━━━━━━━━━━━━━━</span> <span style=\"color: #800080; text-decoration-color: #800080\">100.0%</span> • <span style=\"color: #008000; text-decoration-color: #008000\">6.2/6.2 kB</span> • <span style=\"color: #800000; text-decoration-color: #800000\">?</span> • <span style=\"color: #008080; text-decoration-color: #008080\">0:00:00</span>\n</pre>\n",
          "text/plain": "\u001b[1;32m↓\u001b[0m \u001b[1;34mjax_sim_vjp.hdf5\u001b[0m \u001b[38;2;114;156;31m━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m100.0%\u001b[0m • \u001b[32m6.2/6.2 kB\u001b[0m • \u001b[31m?\u001b[0m • \u001b[36m0:00:00\u001b[0m\n"
         },
         "metadata": {},
         "output_type": "display_data"
        }
       ],
       "tabbable": null,
       "tooltip": null
      }
     },
     "c56924fa669d49bfa83333df3c73ca89": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "c580b49c32bb430a834f30515c9339d6": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "db5f56f6df544ef4a0b1f92a78a4e656": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "f73f20b25e7641e1993293a18fa4ca62": {
      "model_module": "@jupyter-widgets/output",
      "model_module_version": "1.0.0",
      "model_name": "OutputModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/output",
       "_model_module_version": "1.0.0",
       "_model_name": "OutputModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/output",
       "_view_module_version": "1.0.0",
       "_view_name": "OutputView",
       "layout": "IPY_MODEL_c580b49c32bb430a834f30515c9339d6",
       "msg_id": "",
       "outputs": [
        {
         "data": {
          "text/html": "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008000; text-decoration-color: #008000\">🏃 </span> <span style=\"color: #008000; text-decoration-color: #008000; font-weight: bold\">Finishing 'adjoint_power'...</span>\n</pre>\n",
          "text/plain": "\u001b[32m🏃 \u001b[0m \u001b[1;32mFinishing 'adjoint_power'...\u001b[0m\n"
         },
         "metadata": {},
         "output_type": "display_data"
        }
       ],
       "tabbable": null,
       "tooltip": null
      }
     },
     "fb3c7358175547bab3a99f97cc568de2": {
      "model_module": "@jupyter-widgets/output",
      "model_module_version": "1.0.0",
      "model_name": "OutputModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/output",
       "_model_module_version": "1.0.0",
       "_model_name": "OutputModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/output",
       "_view_module_version": "1.0.0",
       "_view_name": "OutputView",
       "layout": "IPY_MODEL_fd940ff710d34afe9824c2ae7eb5038f",
       "msg_id": "",
       "outputs": [
        {
         "data": {
          "text/html": "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008000; text-decoration-color: #008000\">🏃 </span> <span style=\"color: #008000; text-decoration-color: #008000; font-weight: bold\">Starting 'adjoint_power'...</span>\n</pre>\n",
          "text/plain": "\u001b[32m🏃 \u001b[0m \u001b[1;32mStarting 'adjoint_power'...\u001b[0m\n"
         },
         "metadata": {},
         "output_type": "display_data"
        }
       ],
       "tabbable": null,
       "tooltip": null
      }
     },
     "fd940ff710d34afe9824c2ae7eb5038f": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "ff0c8bf3b2c048468d3f4dcf57b26435": {
      "model_module": "@jupyter-widgets/output",
      "model_module_version": "1.0.0",
      "model_name": "OutputModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/output",
       "_model_module_version": "1.0.0",
       "_model_name": "OutputModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/output",
       "_view_module_version": "1.0.0",
       "_view_name": "OutputView",
       "layout": "IPY_MODEL_61b34c9f786a417e85b5f36aa7579868",
       "msg_id": "",
       "outputs": [
        {
         "data": {
          "text/html": "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">↑</span> <span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">simulation.hdf5.gz</span> <span style=\"color: #729c1f; text-decoration-color: #729c1f\">━━━━━━━━━━━━━━━━━━━━━━━━━</span> <span style=\"color: #800080; text-decoration-color: #800080\">100.0%</span> • <span style=\"color: #008000; text-decoration-color: #008000\">1.4/1.4 kB</span> • <span style=\"color: #800000; text-decoration-color: #800000\">?</span> • <span style=\"color: #008080; text-decoration-color: #008080\">0:00:00</span>\n</pre>\n",
          "text/plain": "\u001b[1;31m↑\u001b[0m \u001b[1;34msimulation.hdf5.gz\u001b[0m \u001b[38;2;114;156;31m━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m100.0%\u001b[0m • \u001b[32m1.4/1.4 kB\u001b[0m • \u001b[31m?\u001b[0m • \u001b[36m0:00:00\u001b[0m\n"
         },
         "metadata": {},
         "output_type": "display_data"
        }
       ],
       "tabbable": null,
       "tooltip": null
      }
     },
     "ffb1092616b54fbe9e86418b8843fb6d": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     }
    },
    "version_major": 2,
    "version_minor": 0
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
