{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "23bc2ee3-b625-4b4c-9c87-23dc715ad733",
   "metadata": {},
   "source": [
    "# Session 5 Challenge - Inverse Design in Photonics\n",
    "\n",
    "\"Inverse design\" is a technique used for the automated design of photonic devices. The process involves mathematically defining a figure of merit for one's device and then using gradient-based optimization to maximize this function efficiently for a large number of design parameters. Using the \"adjoint method,\" you can compute gradients of a figure-of-merit with respect to the design parameters using only two simulations (forward and adjoint), no matter how many design parameters are present. This gradient is then used for a high-dimensional, gradient-based system optimization.\n",
    "\n",
    "## Challenge Description\n",
    "\n",
    "In this challenge, we propose you build a topology optimization-based adjoint inverse design to create a waveguide s-bend. The image below shows the optimization setup you will build, including the input and output waveguides, the design region, the source, and monitor position. To reduce the total optimization time, you will run 2D FDTD simulations, however, you can easily adapt this exercise to build 3D optimization models. \n",
    "\n",
    "<center><img src=\"optimization_setup.png\" width=600 alt=\"Inverse Design Optimization Setup\"></center>\n",
    "\n",
    "Follow the next steps to build the adjoint optimization setup and run the inverse design optimization.\n",
    "\n",
    "## Notes\n",
    "\n",
    "> You can develop this example using the Tidy3D [Python notebook](https://tidy3d.simulation.cloud/notebook). \n",
    "\n",
    ">To install the `jax` module required for this challenge, we recommend running `pip install \"tidy3d[jax]\"`."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "944cf93f",
   "metadata": {},
   "source": [
    "## Step 1: Import Python Packages"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7257472c-5db1-4b93-8cdb-24b3cc32775d",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "# Standard python imports.\n",
    "from typing import List\n",
    "import numpy as np\n",
    "import scipy as sp\n",
    "import matplotlib.pylab as plt\n",
    "import optax\n",
    "\n",
    "# Import jax to be able to use automatic differentiation.\n",
    "import jax.numpy as jnp\n",
    "from jax import value_and_grad\n",
    "\n",
    "# Import regular tidy3d.\n",
    "import tidy3d as td\n",
    "import tidy3d.web as web\n",
    "import tidy3d.plugins.adjoint as tda\n",
    "from tidy3d.plugins.mode import ModeSolver\n",
    "from tidy3d.plugins.mode.web import run as run_mode_solver"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "718337a6-e356-4810-8836-48ada41f31d2",
   "metadata": {},
   "source": [
    "## Step 2: Parameter Definition\n",
    "\n",
    "Below, you have the definition of all the parameters you will need throughout the optimization. The design region is a 3 $\\mu m$ x 3 $\\mu m$ rectangle. Within the design region, the refractive index is allowed to vary between 1.0 and 2.0. The input and output waveguides are 1 $\\mu m$ long, 0.65 $\\mu m$ wide, and have a refractive index of 2.\n",
    "\n",
    "You do not need to change the parameters below!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b2c592b4-c210-46e3-94c2-d6a9bfb3ca73",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "# Geometric parameters.\n",
    "w_width = 0.65  # Input/Output waveguide width (um).\n",
    "w_length = 1.0  # Input/Output waveguide length (um).\n",
    "w_thick = td.inf  # Structure dimension in z-direction (infinity in 2D simulation).\n",
    "\n",
    "# Material.\n",
    "n = 2.00  # Material refractive index.\n",
    "\n",
    "# Design region parameters.\n",
    "dr_width = 3.0  # Design region width (um).\n",
    "dr_length = 3.0  # Design region length (um).\n",
    "dr_grid_size = 0.02  # Grid size within the design region (um).\n",
    "\n",
    "# Inverse design set up parameters.\n",
    "eta = 0.50  # Threshold value for the projection filter.\n",
    "min_feature_size = 0.080\n",
    "beta_min = 1  # Minimum projection slope parameter.\n",
    "beta_step = 1  # Increments to the projection slope parameter throughout the optimization.\n",
    "num_steps = 20  # Number of optimization steps.\n",
    "learning_rate = 1.0  # Optimizer hyperparameter.\n",
    "\n",
    "# Simulation wavelength.\n",
    "wl = 1.55  # Central simulation wavelength (um).\n",
    "bw = 0.10  # Simulation bandwidth (um).\n",
    "n_wl = 101  # Number of wavelength points within the bandwidth (to monitor setup)."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ac035f60-95f7-4f99-989d-67855acd5b15",
   "metadata": {},
   "source": [
    "Next, calculated parameters are defined. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "32e05dbb",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Minimum and maximum values for the permittivities.\n",
    "eps_max = n ** 2\n",
    "eps_min = 1.0\n",
    "\n",
    "# Material definitions.\n",
    "mat = td.Medium(permittivity=eps_max)  # Waveguide material.\n",
    "\n",
    "# Wavelengths and frequencies.\n",
    "wl_max = wl + bw / 2\n",
    "wl_min = wl - bw / 2\n",
    "wl_range = np.linspace(wl_min, wl_max, n_wl)\n",
    "freq = td.C_0 / wl\n",
    "freqs = td.C_0 / wl_range\n",
    "freqw = 0.5 * (freqs[0] - freqs[-1])\n",
    "run_time = 2e-12\n",
    "\n",
    "# Computational domain size.\n",
    "pml_spacing = 0.6 * wl\n",
    "size_x = 2 * w_length + dr_length\n",
    "size_y = dr_width + 2 * pml_spacing\n",
    "size_z = 0\n",
    "eff_inf = 10\n",
    "\n",
    "# Inverse design variables.\n",
    "nx = int(dr_length / dr_grid_size)\n",
    "ny = int(dr_width / dr_grid_size)\n",
    "npar = int(nx * ny)\n",
    "dr_size_x = nx * dr_grid_size\n",
    "dr_size_y = ny * dr_grid_size\n",
    "\n",
    "# Initial design region parameters.\n",
    "init_par = np.random.uniform(0, 1, int(npar))\n",
    "init_par = sp.ndimage.gaussian_filter(init_par, 1)\n",
    "init_par = init_par.reshape((nx, ny))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f9c67488",
   "metadata": {},
   "source": [
    "## Step 3: Static Geometry\n",
    "\n",
    "Define the static structures. In this case, they are the input and output s-bend waveguides. So, create the `input_waveguide` and `output_waveguide` structure objects using the `from_bounds` method. Remember to extend the waveguides beyond the simulation domain to make the invariant within the PML layers."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "66c65893",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "ac442ff4",
   "metadata": {},
   "source": [
    "## Step 4: Mode Analysis\n",
    "\n",
    "(a) Create a `Simulation` object including only the input waveguide, define a source plane perpendicular to the waveguide propagation direction, and run a `ModeSolver` to calculate the first 4 waveguide modes."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6e62e7f4",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "3eee8ce9",
   "metadata": {},
   "source": [
    "(b) Plot the mode field components `Ex`, `Ey`, and `Ez` for all the calculated modes. Then, identify the fundamental TE waveguide mode."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a834c19d",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "2f972bd1",
   "metadata": {},
   "source": [
    "## Step 5: Create the Input Source and the Output Monitor\n",
    "\n",
    "(a) Create a `ModeSource` object to inject the fundamental TE waveguide mode at the input waveguide. Use the `freq` and `freqw` parameters to set a `GaussianPulse` and assign it to `source_time`. In addition to adequately setting `mode_index` to the fundamental TE value, the `num_modes` parameter of `ModeSpec` must be calculated as `mode_index + 1`. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7ead0922",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "37e93c45",
   "metadata": {},
   "source": [
    "(b) Define a `ModeMonitor` at the output waveguide. You will use this monitor to calculate the optimization figure of merit. You can use the same `ModeSpec` object previously defined for the source. Set the monitor's `freqs` parameter to the central simulation frequency `freq`, and the `name` parameter to \"fom\". Additionally, create a second `ModeMonitor` similar to the latter one, but set its `freqs` parameter to the whole simulation frequency range (`freqs`). You will obtain the final s-bend spectral response using this monitor."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "366b0c58",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "d1a43c43",
   "metadata": {},
   "source": [
    "(c) Create a `FieldMonitor` to record the electromagnetic fields at the `xy` plane. Set the monitor parameter `freqs` to the central simulation frequency (`freq`)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "0eb0f3c0",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "afe16823-2271-4773-b0e3-a5ce3788ecae",
   "metadata": {},
   "source": [
    "## Step 6: Update Design Region\n",
    "\n",
    "Next, we have defined filter and projection functions to include fabrication constraints over the optimization process."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "175dd042",
   "metadata": {},
   "outputs": [],
   "source": [
    "from tidy3d.plugins.adjoint.utils.filter import ConicFilter, BinaryProjector\n",
    "\n",
    "conic_filter = ConicFilter(radius=min_feature_size, design_region_dl=dr_grid_size)\n",
    "\n",
    "def filter_project(params, beta, eta=0.5):\n",
    "    \"\"\"Apply conic filter and binarization to the raw params.\"\"\"\n",
    "    params_smooth = conic_filter.evaluate(params)\n",
    "    binary_projector = BinaryProjector(vmin=0, vmax=1, beta=beta, eta=eta)\n",
    "    params_smooth_binarized = binary_projector.evaluate(params_smooth)\n",
    "    return params_smooth_binarized\n",
    "\n",
    "def get_eps(params, beta):\n",
    "    \"\"\"Get the permittivity values (eps_min, eps_max) array as a funciton of the parameters (0, 1)\"\"\"\n",
    "    processed_params = filter_project(params, beta)\n",
    "    return eps_min + processed_params * (eps_max - eps_min)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2a00ac02",
   "metadata": {},
   "source": [
    " Here, you must implement the `update_design_region` function to create a `JaxCustomMedium` based on the design parameters (`params`) and then return a `JaxStructure`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2d3e00d9-35f1-4e83-807c-66102b96ed5a",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "def update_design_region(params, beta) -> List[tda.JaxStructure]:\n",
    "    \"\"\"Create the design region based on the design parameters.\"\"\"\n",
    "\n",
    "    # Your code goes here!!\n",
    "    # design_structure must be a tda.JaxStructure object!\n",
    "\n",
    "    return [design_structure]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "75983c02-ca0f-4dcb-9c51-04ce9b5ac7ed",
   "metadata": {},
   "source": [
    "## Step 7: Jax Simulation\n",
    "\n",
    "(a) Now, implement the `build_adjoint_sim` function to return a `JaxSimulation` object. This function will receive the design parameters (`params`) and the projection slope parameter (`beta`). You need to call the `update_design_parameter` function and arrange all the simulation objects defined before into the `JaxSimulation` object. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "3b09827b-a607-4631-977d-466f732e1d90",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "def build_adjoint_sim(params, beta) -> tda.JaxSimulation:\n",
    "    \"\"\"Create the adjoint simulation based on the design parameters.\"\"\"\n",
    "\n",
    "    # Your code goes here!!\n",
    "\n",
    "    return tda.JaxSimulation(\n",
    "        size=[size_x, size_y, size_z],\n",
    "        grid_spec=,  # Fill in the grid_spec.\n",
    "        structures=[],  # Fill in the structures.\n",
    "        input_structures=,  # Fill in the input_structures.\n",
    "        sources=[],   # Fill in the sources.\n",
    "        monitors=[],   # Fill in the monitors.\n",
    "        output_monitors=[],   # Fill in the output_monitors.\n",
    "        run_time=run_time,\n",
    "        boundary_spec=td.BoundarySpec.pml(x=True, y=True, z=False),\n",
    "    )"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2e7cd9e9-a41a-4353-a0ee-cec464bc2f2d",
   "metadata": {},
   "source": [
    "(b) Call `build_adjoint_sim` to create an initial simulation object and plot it to verify the setup."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a0c3f174",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "61522716-a26f-400b-a005-5d9493ef7264",
   "metadata": {},
   "source": [
    "## Step 8: Objective Function\n",
    "\n",
    "The optimization setup is almost ready! \n",
    "\n",
    "(a) Implement the objective function (`objective_function`) used within the optimization process. This function must receive the design parameters and the projection slope parameter and return a single `float` value. So, here you need to create and run the simulation, get the mode amplitude from the `fom` monitor, and calculate and return the modal power."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "71c5b2ed-a036-4578-ad44-89aa70f59e28",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "def objective_function(params, beta: float, step_num: int = None, verbose: bool = False) -> float:\n",
    "    \"\"\"Create and run the adjoint simulation, then calculate and return the coupling efficiency.\"\"\"\n",
    "\n",
    "    # Your code goes here!!\n",
    "\n",
    "    return jnp.sum(jnp.abs(amp) ** 2)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "075f3d66-c98f-4410-829a-b178464de0b8",
   "metadata": {},
   "source": [
    "(b) Use the `Jax.value_and_grad` function to get the gradient of `objective_function` with respect to the permittivity while also returning the coupling efficiency associated with the current iteration so you can record this value for later. If everything is correct in your setup, you will successfully run the forward and adjoint optimizations. Then, print the objective function value and gradients."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "9ee539ec-11a2-4107-8270-9d58c7607562",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "df_dn = value_and_grad(objective_function)\n",
    "coup_eff, grad = df_dn(init_par, beta=beta_min, verbose=False)\n",
    "print(f\"Coupling Efficiency: {coup_eff:.3f}\")\n",
    "print(\"Gradient values:\")\n",
    "print(grad)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "529fad9d-3692-464b-9a45-bea3e084c1b5",
   "metadata": {},
   "source": [
    "## Step 9: Run the Optimization\n",
    "\n",
    "After successfully executing the previous steps, run the code below to start the optimization. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "3eedf09a-9265-43ec-a557-3d0ec5b774bb",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "# Initialize Adam optimizer with starting parameters.\n",
    "params = np.array(init_par)\n",
    "optimizer = optax.adam(learning_rate=learning_rate)\n",
    "opt_state = optimizer.init(params)\n",
    "\n",
    "# Store history.\n",
    "obj_history = []\n",
    "params_history = [params]\n",
    "beta_history = []\n",
    "\n",
    "for i in range(num_steps):\n",
    "    \n",
    "    # Compute the gradient and the objective function value.\n",
    "    beta = beta_min + i * beta_step\n",
    "    value, gradient = df_dn(params, step_num=i+1, beta=beta)\n",
    "\n",
    "    # Print the values to the output.\n",
    "    print(f\"Iteration = {i + 1}\")\n",
    "    print(f\"\\tCoupling Efficiency = {value:.4e}\")\n",
    "    print(f\"\\tGrad_norm = {np.linalg.norm(gradient):.4e}\")    \n",
    "    print(f\"\\tBeta = {beta:.4e}\")\n",
    "\n",
    "    # Compute and apply updates to the optimizer based on gradient (-1 sign to maximize the objective function).\n",
    "    updates, opt_state = optimizer.update(-gradient, opt_state, params)\n",
    "    params = optax.apply_updates(params, updates)\n",
    "\n",
    "    # Cap the parameters.\n",
    "    params = jnp.minimum(params, 1.0)\n",
    "    params = jnp.maximum(params, 0.0)\n",
    "\n",
    "    # save history\n",
    "    obj_history.append(value)\n",
    "    params_history.append(params)   \n",
    "    beta_history.append(beta)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e0b44fda-bf57-42cf-8370-05bf20de96df",
   "metadata": {},
   "source": [
    "## Step 10: Results\n",
    "\n",
    "In this last step, build and run a simulation using the optimization results. Then, plot the following charts: \n",
    "\n",
    "- Coupling Efficiency x Iterations.\n",
    "- Final structure (use `plot_eps`).\n",
    "- Coupling Efficiency x Wavelength.\n",
    "- Electric field intensity distribution.\n",
    "\n",
    "> To build the the final simulation you can use `sim_final = build_adjoint_sim(params_history[-1], beta=beta_history[-1])` using the final optimization parameters and so, use `sim_final.to_simulation()[0]`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "deb99569",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "98527f97",
   "metadata": {},
   "source": [
    "Run the final simulation."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e030fa8f",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "59cadbbe",
   "metadata": {},
   "source": [
    "Plot the results and upload the chart to earn the FlexCredits!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1431a4f1",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "eb6d530a",
   "metadata": {},
   "source": [
    "## Optional Step: Export to GDS\n",
    "\n",
    "As an optional step, you can also export the inverse design structure to GDS!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "624da82a",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "description": "This notebook demonstrates how to perform inverse design optimization of an optical mode converter in Tidy3D FDTD.",
  "feature_image": "",
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "keywords": "inverse design, adjoint optimization, optical mode converter, 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.12.1"
  },
  "nbdime-conflicts": {
   "local_diff": [
    {
     "diff": [
      {
       "diff": [
        {
         "key": 0,
         "length": 1,
         "op": "removerange"
        }
       ],
       "key": "version",
       "op": "patch"
      }
     ],
     "key": "language_info",
     "op": "patch"
    }
   ],
   "remote_diff": [
    {
     "diff": [
      {
       "diff": [
        {
         "diff": [
          {
           "key": 5,
           "op": "addrange",
           "valuelist": "9"
          },
          {
           "key": 5,
           "length": 1,
           "op": "removerange"
          }
         ],
         "key": 0,
         "op": "patch"
        }
       ],
       "key": "version",
       "op": "patch"
      }
     ],
     "key": "language_info",
     "op": "patch"
    }
   ]
  },
  "title": "Inverse Design of a Mode Converter | Flexcompute",
  "widgets": {
   "application/vnd.jupyter.widget-state+json": {
    "state": {
     "02bd58b8f27b49079c8cfaae08e484ed": {
      "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
      }
     },
     "0cc59d91e6884de8878637d06f69298f": {
      "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
      }
     },
     "131b81dce4714ce69a7ed086788d1178": {
      "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_346b3ff743f84696a2a3eb47172865a6",
       "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\">43.0/43.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;31m↑\u001b[0m \u001b[1;34msimulation.hdf5.gz\u001b[0m \u001b[38;2;114;156;31m━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m100.0%\u001b[0m • \u001b[32m43.0/43.0 kB\u001b[0m • \u001b[31m?\u001b[0m • \u001b[36m0:00:00\u001b[0m\n"
         },
         "metadata": {},
         "output_type": "display_data"
        }
       ],
       "tabbable": null,
       "tooltip": null
      }
     },
     "1c3c5d9b9f8c4762af46440e2f9de9b0": {
      "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_0cc59d91e6884de8878637d06f69298f",
       "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 'inv_des'...</span>\n</pre>\n",
          "text/plain": "\u001b[32m🚶 \u001b[0m \u001b[1;32mStarting 'inv_des'...\u001b[0m\n"
         },
         "metadata": {},
         "output_type": "display_data"
        }
       ],
       "tabbable": null,
       "tooltip": null
      }
     },
     "28d2d187d50744619ffd15c7ae3d46ab": {
      "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
      }
     },
     "2cf4637d47444cb89788003100a96e1c": {
      "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
      }
     },
     "2d8b8f7952de4429a454df590618cd63": {
      "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_97b116cecc8d4eba90ff6f1899098767",
       "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
      }
     },
     "346b3ff743f84696a2a3eb47172865a6": {
      "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
      }
     },
     "3b97302e734846f68dc34be2e1e9f622": {
      "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_477714e92f7845838dcca8908b862048",
       "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 'inv_des_final'...</span>\n</pre>\n",
          "text/plain": "\u001b[32m🏃 \u001b[0m \u001b[1;32mFinishing 'inv_des_final'...\u001b[0m\n"
         },
         "metadata": {},
         "output_type": "display_data"
        }
       ],
       "tabbable": null,
       "tooltip": null
      }
     },
     "3f3ecee4ff984da1ab6af8cde74aa4d6": {
      "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_2cf4637d47444cb89788003100a96e1c",
       "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\">148.6/148.6 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[32m148.6/148.6 kB\u001b[0m • \u001b[31m?\u001b[0m • \u001b[36m0:00:00\u001b[0m\n"
         },
         "metadata": {},
         "output_type": "display_data"
        }
       ],
       "tabbable": null,
       "tooltip": null
      }
     },
     "43ee1faf5c0f4bd7952b4c9f3901f58d": {
      "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_28d2d187d50744619ffd15c7ae3d46ab",
       "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 'inv_des_adj'...</span>\n</pre>\n",
          "text/plain": "\u001b[32m🏃 \u001b[0m \u001b[1;32mFinishing 'inv_des_adj'...\u001b[0m\n"
         },
         "metadata": {},
         "output_type": "display_data"
        }
       ],
       "tabbable": null,
       "tooltip": null
      }
     },
     "477714e92f7845838dcca8908b862048": {
      "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
      }
     },
     "4d65e6b885674bc8bff06e62f0b089f6": {
      "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_a1c5f0dfa271458dad9e5ded066f966f",
       "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 'inv_des'...</span>\n</pre>\n",
          "text/plain": "\u001b[32m🏃 \u001b[0m \u001b[1;32mFinishing 'inv_des'...\u001b[0m\n"
         },
         "metadata": {},
         "output_type": "display_data"
        }
       ],
       "tabbable": null,
       "tooltip": null
      }
     },
     "51efd5e7d641461d9392377e4dc80027": {
      "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
      }
     },
     "5bb49f9b044f49518c9c2c21dffed65b": {
      "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_02bd58b8f27b49079c8cfaae08e484ed",
       "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
      }
     },
     "616294d7d1c243feb07bfcc5ab642cc5": {
      "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
      }
     },
     "6f6853ea5883400bbff752f3c60139c9": {
      "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
      }
     },
     "6fe1bfb2d1a14e339a1b711d8b1d89a1": {
      "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
      }
     },
     "706c91a16eb347379d86f710b83d7e6b": {
      "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_8078dc74436c47b093bd481bb6624578",
       "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\">237.1/237.1 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[32m237.1/237.1 kB\u001b[0m • \u001b[31m?\u001b[0m • \u001b[36m0:00:00\u001b[0m\n"
         },
         "metadata": {},
         "output_type": "display_data"
        }
       ],
       "tabbable": null,
       "tooltip": null
      }
     },
     "7417aa6cc0bb4350b3f28e1826298b03": {
      "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
      }
     },
     "756ecdb25ec94e52907adfd2ecb443f3": {
      "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_f52a00c4ea904dccb1418ba1a118d6be",
       "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 'inv_des_adj'...</span>\n</pre>\n",
          "text/plain": "\u001b[32m🚶 \u001b[0m \u001b[1;32mStarting 'inv_des_adj'...\u001b[0m\n"
         },
         "metadata": {},
         "output_type": "display_data"
        }
       ],
       "tabbable": null,
       "tooltip": null
      }
     },
     "8078dc74436c47b093bd481bb6624578": {
      "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
      }
     },
     "8a006d803a9341ba81fc1cddec63f4cf": {
      "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_d61f53cb0349458ab366bebcc42a6028",
       "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\">110.6/110.6 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[32m110.6/110.6 kB\u001b[0m • \u001b[31m?\u001b[0m • \u001b[36m0:00:00\u001b[0m\n"
         },
         "metadata": {},
         "output_type": "display_data"
        }
       ],
       "tabbable": null,
       "tooltip": null
      }
     },
     "97916d3681e24426a9724844691f7038": {
      "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_7417aa6cc0bb4350b3f28e1826298b03",
       "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 'inv_des_final'...</span>\n</pre>\n",
          "text/plain": "\u001b[32m🚶 \u001b[0m \u001b[1;32mStarting 'inv_des_final'...\u001b[0m\n"
         },
         "metadata": {},
         "output_type": "display_data"
        }
       ],
       "tabbable": null,
       "tooltip": null
      }
     },
     "97b116cecc8d4eba90ff6f1899098767": {
      "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
      }
     },
     "9ac6fa173f624d24a2fce05e6f1327d0": {
      "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
      }
     },
     "a1c5f0dfa271458dad9e5ded066f966f": {
      "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
      }
     },
     "a992634b68574d25a4c65061ebdad55f": {
      "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_6fe1bfb2d1a14e339a1b711d8b1d89a1",
       "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\">13.3/13.3 MB</span> • <span style=\"color: #800000; text-decoration-color: #800000\">22.4 MB/s</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[32m13.3/13.3 MB\u001b[0m • \u001b[31m22.4 MB/s\u001b[0m • \u001b[36m0:00:00\u001b[0m\n"
         },
         "metadata": {},
         "output_type": "display_data"
        }
       ],
       "tabbable": null,
       "tooltip": null
      }
     },
     "b17032aa2dca423080814069bd0548cb": {
      "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_9ac6fa173f624d24a2fce05e6f1327d0",
       "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\">100.1/100.1 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[32m100.1/100.1 kB\u001b[0m • \u001b[31m?\u001b[0m • \u001b[36m0:00:00\u001b[0m\n"
         },
         "metadata": {},
         "output_type": "display_data"
        }
       ],
       "tabbable": null,
       "tooltip": null
      }
     },
     "d61f53cb0349458ab366bebcc42a6028": {
      "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
      }
     },
     "e84d3af0debd414ba94b938d3a285d75": {
      "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_6f6853ea5883400bbff752f3c60139c9",
       "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
      }
     },
     "f2fb4fc3f8be4eb7acfb42679d70a73c": {
      "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_51efd5e7d641461d9392377e4dc80027",
       "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
      }
     },
     "f3e34e693eff477797f8c8517fbf1a82": {
      "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_616294d7d1c243feb07bfcc5ab642cc5",
       "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
      }
     },
     "f52a00c4ea904dccb1418ba1a118d6be": {
      "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
}
