{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Defining self-intersecting polygons\n",
    "\n",
    "This tutorial shows how to use the [ComplexPolySlab](https://docs.flexcompute.com/projects/tidy3d/en/latest/api/_autosummary/tidy3d.plugins.polyslab.ComplexPolySlab.html) plugin in `Tidy3D` to deal with self-intersecting polygon that occurs during extrusion in a slanted polyslab.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-08-18T23:43:53.640701Z",
     "iopub.status.busy": "2023-08-18T23:43:53.640071Z",
     "iopub.status.idle": "2023-08-18T23:43:54.944444Z",
     "shell.execute_reply": "2023-08-18T23:43:54.943747Z"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "import gdstk\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import tidy3d as td\n",
    "from tidy3d.plugins.polyslab import ComplexPolySlab"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example 1: concave polygon on the top with positive sidewall angle\n",
    "\n",
    "Let's consider a concave polygon as shown in the following figure. As we dilate the polygon, the length of the edge in the middle will approach 0, and the two vertices at the end of the edge can be degenerate. Further dilation will result in a self-intersecting polygon. The collapsing of the two neighboring vertices is known as one type of edge events. There are other types of edge events as well, while our plugin at the moment will focus on this type of edge event."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-08-18T23:43:54.947109Z",
     "iopub.status.busy": "2023-08-18T23:43:54.946738Z",
     "iopub.status.idle": "2023-08-18T23:43:55.186160Z",
     "shell.execute_reply": "2023-08-18T23:43:55.185652Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdMAAAHWCAYAAAAsM2MeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA4w0lEQVR4nO3deVzVZd7/8TegHDAF9FZAlMKl3LdAGSzHFhLLsZxpRjNz4Zc6ubRxt0g64jJJi5lNuTxqMrubXLvT3HJDyVzSQp2xXMrUVBTUHDmIBsq5fn90e6YTO1/hcOD1fDzO49G5znV9z+cc87y9Puf7BS9jjBEAACg3b3cXAACApyNMAQCwiDAFAMAiwhQAAIsIUwAALCJMAQCwiDAFAMAiwhQAAIsIUwAALCJMgRokNTVVXl5eSk1NdXcpQLVCmALV0OzZszV//nx3l1EuCxYs0MyZM91dhiTJ4XDolVdeUbNmzeTn56eOHTtq4cKFpVo7f/58eXl5FXrLyMgoMH/FihW69dZb5efnpxtvvFFJSUm6evXq9X5JqCC13F0AgOtv9uzZatiwoYYNG+Yy/tvf/laXL1+Wr6+veworhQULFujrr7/WU0895e5SNH78eL300ksaMWKEunbtqk8++UQPP/ywvLy89NBDD5XqGFOmTFGzZs1cxoKCglzuf/rpp+rXr5/uuOMOvfnmm9q3b5/++te/6syZM5ozZ871ejmoQIQpqq2cnBzdcMMN7i6jSvH29pafn5+7y/AI6enpeu211zRmzBi99dZbkqThw4erZ8+eevbZZ/WnP/1JPj4+JR7n3nvvVVRUVLFznnnmGXXs2FHr169XrVo/fywHBARo2rRpevLJJ9W6dWvrLwgVijYvPEJ6eroeffRRhYWFyWazqVmzZho1apTy8vIk/ael9tlnn2n06NEKDg5W06ZNnetnz56tdu3ayWazKSwsTGPGjNGFCxdcnuO7777Tgw8+qNDQUPn5+alp06Z66KGHlJWV5ZyzYcMG3X777QoKClLdunXVqlUrvfDCCyXWX5p1ubm5SkpKUsuWLWWz2RQeHq7nnntOubm5BY73j3/8Q926dVOdOnVUv359/fa3v9X69eslSREREfrmm2/02WefOduKd9xxh6SivzNdunSpIiMj5e/vr4YNG+qRRx5Renq6y5xhw4apbt26Sk9PV79+/VS3bl01atRIzzzzjPLz80t8Dz755BP16dPH+WfYokULTZ061WXtHXfcodWrV+uHH35w1h4REVHkMYcNG1ZkK3XSpEkl1lRSvVeuXNHo0aOdY15eXho1apROnjypHTt2lPpY2dnZRb5H+/fv1/79+zVy5EhnkErS6NGjZYzRRx99VP4XgUrDzhRV3qlTp9StWzdduHBBI0eOVOvWrZWenq6PPvpIly5dcmlZjh49Wo0aNdLEiROVk5MjSZo0aZImT56s2NhYjRo1SocOHdKcOXP05Zdfatu2bapdu7by8vIUFxen3NxcPf744woNDVV6erpWrVqlCxcuKDAwUN98841+97vfqWPHjpoyZYpsNpsOHz6sbdu2FVt/adY5HA7df//92rp1q0aOHKk2bdpo3759ev311/Xtt99q+fLlzrmTJ0/WpEmT1L17d02ZMkW+vr7auXOnNm3apF69emnmzJl6/PHHVbduXY0fP16SFBISUmR98+fPV3x8vLp27ark5GRlZmbqjTfe0LZt27Rnzx6XlmR+fr7i4uIUHR2t6dOna+PGjXrttdfUokULjRo1qtj3Yf78+apbt64SEhJUt25dbdq0SRMnTpTdbterr74q6ee2alZWlk6ePKnXX39dklS3bt0ij/nnP/9ZsbGxLmNr167Vhx9+qODgYOfYuXPniq3tmnr16slms0mS9uzZoxtuuEFt2rRxmdOtWzfn47fffnuJx7zzzjt18eJF+fr6Ki4uTq+99ppuvvlm5+N79uyRpAK717CwMDVt2tT5OKo4A1RxQ4YMMd7e3ubLL78s8JjD4TDGGPPee+8ZSeb22283V69edT5+5swZ4+vra3r16mXy8/Od42+99ZaRZObNm2eMMWbPnj1Gklm6dGmRdbz++utGkjl79myZ6i/Nug8++MB4e3ubzz//3GV87ty5RpLZtm2bMcaY7777znh7e5vf//73Lq/HmP+8F8YY065dO9OzZ88Cz7N582YjyWzevNkYY0xeXp4JDg427du3N5cvX3bOW7VqlZFkJk6c6BwbOnSokWSmTJnicswuXbqYyMjI4t8EY8ylS5cKjP35z382derUMT/99JNzrE+fPuamm24q8XiF+e6770xgYKC55557XP4/kFSq23vvvedSR/PmzQs8R05OjpFkxo0bV2wtixcvNsOGDTPvv/++WbZsmZkwYYKpU6eOadiwoTl+/Lhz3quvvmokuYxd07VrV/Ob3/ymHO8EKhttXlRpDodDy5cvV9++fQv93snLy8vl/ogRI1y+x9q4caPy8vL01FNPydvb22VeQECAVq9eLUkKDAyUJK1bt06XLl0qtJZrO7RPPvlEDoej1K+hNOuWLl2qNm3aqHXr1jp37pzzdtddd0mSNm/eLElavny5HA6HJk6c6PJ6pILvRWl89dVXOnPmjEaPHu3yXWqfPn3UunVr5/vzS4899pjL/R49eujIkSMlPpe/v7/zv7Ozs3Xu3Dn16NFDly5d0sGDB8tc+6/l5OTo97//verXr6+FCxe6/H+wYcOGUt3i4uKcay5fvuzcpf7Stffp8uXLxdbTv39/vffeexoyZIj69eunqVOnat26dfrxxx/14osvujyPpCKfq6TnQdVAmxdV2tmzZ2W329W+fftSzf/1WZM//PCDJKlVq1Yu476+vmrevLnz8WbNmikhIUEzZszQhx9+qB49euj+++/XI4884gzaAQMG6O9//7uGDx+ucePG6e6779Yf/vAH/fGPfywQbL9UmnXfffedDhw4oEaNGhV6jDNnzkiSvv/+e3l7e6tt27alej9KUtT7I0mtW7fW1q1bXcb8/PwK1Fi/fn39+9//LvG5vvnmG02YMEGbNm2S3W53eeyX30uX14gRI/T9999r+/bt+q//+i+Xx37dCi4Nf3//Qr+v/umnn5yPl9Xtt9+u6Ohobdy40eV5JBX5XOV5HlQ+whTVipUPntdee03Dhg3TJ598ovXr1+uJJ55QcnKyvvjiCzVt2lT+/v7asmWLNm/erNWrV2vt2rVavHix7rrrLq1fv77IMztLs87hcKhDhw6aMWNGoccIDw8v9+u6nkpz9mphLly4oJ49eyogIEBTpkxRixYt5Ofnp927d+v5558v006/MG+88YYWLlyof/zjH+rcuXOBxwu7rrMwgYGBzv+HGjdurM2bN8sY47LrP336tKSfv9Msj/DwcB06dMh5v3Hjxs7j/vrP+fTp087vaFG10eZFldaoUSMFBATo66+/Ltf6m266SZJcPrwkKS8vT0ePHnU+fk2HDh00YcIEbdmyRZ9//rnS09M1d+5c5+Pe3t66++67NWPGDO3fv18vvviiNm3a5GzDFqWkdS1atND58+d19913KzY2tsDt2s6xRYsWcjgc2r9/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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "vertices = (\n",
    "    (0, 0),\n",
    "    (1, 0),\n",
    "    (1, 1),\n",
    "    (0, 1),\n",
    "    (0, 0.8),\n",
    "    (0.5, 0.65),\n",
    "    (0.5, 0.35),\n",
    "    (0, 0.2),\n",
    ")\n",
    "s = td.PolySlab(\n",
    "    vertices=vertices,\n",
    "    slab_bounds=(0, 1),\n",
    "    axis=2,\n",
    "    sidewall_angle=0,\n",
    "    reference_plane=\"top\",\n",
    ")\n",
    "s.plot(z=0.5)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For a slanted polyslab where this polygon is at the top, self-intersection can occur as the polygon is extruded to the base when the sidewall angle is large. Since `td.PolySlab` only deals with simple polyslab, an error message will be displayed in this case."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-08-18T23:43:55.188405Z",
     "iopub.status.busy": "2023-08-18T23:43:55.188234Z",
     "iopub.status.idle": "2023-08-18T23:43:55.351040Z",
     "shell.execute_reply": "2023-08-18T23:43:55.350541Z"
    }
   },
   "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\">[16:43:55] </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">ERROR: Sidewall angle or structure thickness is so   </span> <a href=\"file:///home/momchil/Drive/flexcompute/tidy3d-docs/tidy3d/tidy3d/components/geometry/polyslab.py\" target=\"_blank\"><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">polyslab.py</span></a><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">:</span><a href=\"file:///home/momchil/Drive/flexcompute/tidy3d-docs/tidy3d/tidy3d/components/geometry/polyslab.py#199\" target=\"_blank\"><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">199</span></a>\n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">           </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">large that the polygon is self-intersecting during   </span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">               </span>\n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">           </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">extrusion. Please either reduce structure thickness  </span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">               </span>\n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">           </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">to be &lt; </span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">2.016e-01</span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">, or use our plugin                 </span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">               </span>\n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">           </span><span style=\"color: #008000; text-decoration-color: #008000\">'ComplexPolySlab'</span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\"> to divide the complex polyslab into</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">               </span>\n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">           </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">a list of simple polyslabs.                          </span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">               </span>\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m[16:43:55]\u001b[0m\u001b[2;36m \u001b[0m\u001b[1;31mERROR: Sidewall angle or structure thickness is so   \u001b[0m \u001b]8;id=732268;file:///home/momchil/Drive/flexcompute/tidy3d-docs/tidy3d/tidy3d/components/geometry/polyslab.py\u001b\\\u001b[2mpolyslab.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=940906;file:///home/momchil/Drive/flexcompute/tidy3d-docs/tidy3d/tidy3d/components/geometry/polyslab.py#199\u001b\\\u001b[2m199\u001b[0m\u001b]8;;\u001b\\\n",
       "\u001b[2;36m           \u001b[0m\u001b[1;31mlarge that the polygon is self-intersecting during   \u001b[0m \u001b[2m               \u001b[0m\n",
       "\u001b[2;36m           \u001b[0m\u001b[1;31mextrusion. Please either reduce structure thickness  \u001b[0m \u001b[2m               \u001b[0m\n",
       "\u001b[2;36m           \u001b[0m\u001b[1;31mto be < \u001b[0m\u001b[1;36m2.016e-01\u001b[0m\u001b[1;31m, or use our plugin                 \u001b[0m \u001b[2m               \u001b[0m\n",
       "\u001b[2;36m           \u001b[0m\u001b[32m'ComplexPolySlab'\u001b[0m\u001b[1;31m to divide the complex polyslab into\u001b[0m \u001b[2m               \u001b[0m\n",
       "\u001b[2;36m           \u001b[0m\u001b[1;31ma list of simple polyslabs.                          \u001b[0m \u001b[2m               \u001b[0m\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sidewall_angle = np.pi / 4\n",
    "try:\n",
    "    s = td.PolySlab(\n",
    "        vertices=vertices,\n",
    "        slab_bounds=(0, 1),\n",
    "        axis=2,\n",
    "        sidewall_angle=sidewall_angle,\n",
    "        reference_plane=\"top\",\n",
    "    )\n",
    "except Exception:\n",
    "    pass"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Dividing a complex polyslab into sub-polyslabs\n",
    "\n",
    "The plugin `ComplexPolySlab` can divide such a complex polyslab into a list of simple polyslabs. The procedure of setting up the object is the same as in `td.PolySlab`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-08-18T23:43:55.353221Z",
     "iopub.status.busy": "2023-08-18T23:43:55.353052Z",
     "iopub.status.idle": "2023-08-18T23:43:55.369716Z",
     "shell.execute_reply": "2023-08-18T23:43:55.369243Z"
    }
   },
   "outputs": [],
   "source": [
    "s = ComplexPolySlab(\n",
    "    vertices=vertices,\n",
    "    slab_bounds=(0, 1),\n",
    "    axis=2,\n",
    "    sidewall_angle=sidewall_angle,\n",
    "    reference_plane=\"top\",\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can obtain the division result in the form of a list of simple polyslabs, or combined into a `GeometryGroup`. As shown below, the entire polyslab will be divided into 3 simple polyslabs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-08-18T23:43:55.371799Z",
     "iopub.status.busy": "2023-08-18T23:43:55.371633Z",
     "iopub.status.idle": "2023-08-18T23:43:55.416703Z",
     "shell.execute_reply": "2023-08-18T23:43:55.416220Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The number of sub-polyslabs in the list is 3.\n",
      "The number of sub-polyslabs in geometry group is 3.\n"
     ]
    }
   ],
   "source": [
    "# To obtain the divided polyslabs, there are two approaches:\n",
    "# 1) a list of divided polyslabs\n",
    "sub_polyslabs = s.sub_polyslabs\n",
    "\n",
    "# 2) geometry group containing the divided polyslabs\n",
    "polyslabs_group = s.geometry_group\n",
    "\n",
    "print(f\"The number of sub-polyslabs in the list is {len(sub_polyslabs)}.\")\n",
    "print(f\"The number of sub-polyslabs in geometry group is {len(polyslabs_group.geometries)}.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Define a simulation\n",
    "Now let's make a simple simulation with a `ComplexPolySlab` object."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-08-18T23:43:55.418863Z",
     "iopub.status.busy": "2023-08-18T23:43:55.418682Z",
     "iopub.status.idle": "2023-08-18T23:43:55.479082Z",
     "shell.execute_reply": "2023-08-18T23:43:55.478587Z"
    }
   },
   "outputs": [],
   "source": [
    "mat = td.Medium(permittivity=2)\n",
    "\n",
    "# Three equivalent approaches\n",
    "# 1) from sub-polyslabs\n",
    "struct_list = [td.Structure(geometry=poly, medium=mat) for poly in s.sub_polyslabs]\n",
    "\n",
    "# 2) from geometry group\n",
    "struct_list = [td.Structure(geometry=s.geometry_group, medium=mat)]\n",
    "\n",
    "# 3) directly obtain the structure with a user-specified medium\n",
    "struct_list = [s.to_structure(mat)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-08-18T23:43:55.481110Z",
     "iopub.status.busy": "2023-08-18T23:43:55.480970Z",
     "iopub.status.idle": "2023-08-18T23:43:55.501686Z",
     "shell.execute_reply": "2023-08-18T23:43:55.501199Z"
    }
   },
   "outputs": [],
   "source": [
    "sim = td.Simulation(\n",
    "    run_time=1e-12,\n",
    "    size=(4, 4, 2),\n",
    "    center=(0.5, 0.5, 0.5),\n",
    "    grid_spec=td.GridSpec.auto(wavelength=1.0),\n",
    "    structures=struct_list,\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Note: `Tidy3D` is warning us that our Simulation does not contain sources. In this case, since we are using the simulation as a demonstration and are not running any simulations, we may safely ignore this warning throughout this notebook."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Visualization\n",
    "\n",
    "Three characteristic normal cross sections are illustrated below. The polygon near the top looks similar to the supplied polygon. Somewhere between $z=0.75$ $\\mu$m and $z=0.95$ $\\mu$m, a vertex-vertex crossing event happens, and the shape of the polygon changes. Between $z=0.75$ $\\mu$m and $z=0.5$ $\\mu$m, another event occurs, and the shape evolves to a simple box."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-08-18T23:43:55.503902Z",
     "iopub.status.busy": "2023-08-18T23:43:55.503726Z",
     "iopub.status.idle": "2023-08-18T23:43:55.894098Z",
     "shell.execute_reply": "2023-08-18T23:43:55.893597Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxYAAAEaCAYAAACM48H1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABgd0lEQVR4nO3deZRcZZ0//ndV19Kd6qWKTjckJEAA2WUxBJRFQCMgyDIOiOAgiyJg0C+EI0PEAwMOBAUBRyGMMwL+EBBwDuAgCmGNgiCrExhWBQlZSFdT1Z2uTtd2n98fPU9tXctdnrtU3ffrnD6Q7qqu2/dz7+d+Pnd5noAQQoCIiIiIiMiCoNsLQERERERE7Y+NBRERERERWcbGgoiIiIiILGNjQURERERElrGxICIiIiIiy9hYEBERERGRZWwsiIiIiIjIMjYWRERERERkGRsLIiIiIiKyjI0FWfbkk08iEAjgySefdHtRiMgjmBeIqBJzgj+wsSDdbrrpJtx2221uL4Ypd955J2644Qa3FwMAoGkafvjDH2LBggXo7u7Gnnvuibvuukv3+1euXImDDjoIs2bNQiKRwAknnID33ntvxuu22247BAKBGV/nnHOOwr+G/I55QQ0reeHQQw+tu68HAgGEw+Gq1zIvkN2YE9SwkhNuu+22hjlhw4YNM17/m9/8Bp/4xCfQ3d2NbbbZBpdddhkKhYKp5Q4IIYSpd5Lv7LHHHpg9e/aMsw2apiGXyyESiSAY9Gav+oUvfAGvvvpq3QLcacuWLcPVV1+Ns846C4sWLcIDDzyA3/72t7jrrrvw5S9/uel7H3zwQRx33HH4xCc+gVNPPRXj4+P48Y9/jGg0ipdffhlDQ0Ol12633XZIJBK48MILq37HTjvthP3228+Wv438h3lBDSt5YeXKlfjwww+rvpfJZHDOOefgqKOOwm9/+9vS95kXyG7MCWpYyQm33XYbzjjjDFxxxRVYsGBB1c9OOOEEdHd3l/79u9/9DkcffTQOPfRQnHzyyVi9ejVuvPFGfOMb38CKFSuML7ggQyYmJtxeBNfsvvvu4pBDDnF7MUw5+uijxbbbbuv2YogPPvhAhMNhsWTJktL3NE0TBx98sJg3b54oFApN37/bbruJHXfcUWSz2dL3XnnlFREMBsXSpUurXrvtttuKo48+Wu0fQHUxLxzi9mKY0il5oZ7bb79dABB33HFH1feZF5zBnHCI24thSqfkhFtvvVUAEM8//3zLz9ptt93EXnvtJfL5fOl7l1xyiQgEAuL11183vOy+biw++OADceaZZ4o5c+aISCQitttuO3HOOeeUijYZmCeffFKce+65YmhoSMTj8dL7b7zxRrHbbruJSCQi5syZI775zW+KVCpV9RlvvfWW+OIXvyi23HJLEY1GxdZbby1OOukkkU6nS6955JFHxIEHHigGBgZELBYTO+20k1i2bFnL5dfzvqmpKXHppZeKHXbYQUQiETFv3jzxne98R0xNTc34fbfffrtYtGiR6OnpEfF4XBx88MHi4YcfFkJMH4wAVH3JxPHEE08IAOKJJ56o+n333HOP+MQnPiG6u7vF4OCg+MpXviI++OCDqtecdtppIhaLiQ8++EAcd9xxIhaLidmzZ4sLL7xQ18H0/vvvF0cddVQphttvv7244oorqt57yCGHzFj2ZonjtNNOm/F6+XXZZZe1XKZmbrzxRgFAvPbaa1Xfv/POOwUA8Yc//KHhe0dHRwUA8Z3vfGfGz3bffXcxd+7cqu/JAiKbzfr6IGcU80I15oXyMnkxLzTy+c9/XsRisRn7PvOCccwJ1ZgTysvk1ZxQ2ViMj483XEevvfaaACBuvPHGqu+vXbtWABDf//73DS97yPg1js6wbt067Lfffkin0/jGN76BXXbZBWvXrsWvf/1rTE5OIhKJlF77zW9+E0NDQ7j00kuRyWQAAP/yL/+Cyy+/HIsXL8a5556LN998EytWrMDzzz+Pp59+GuFwGLlcDkcccQSy2Sy+9a1vYauttsLatWvx4IMPIp1OY2BgAK+99hq+8IUvYM8998QVV1yBaDSKd955B08//XTT5dfzPk3TcOyxx+KPf/wjvvGNb2DXXXfF6tWrcf311+Ott97C/fffX3rt5Zdfjn/5l3/BAQccgCuuuAKRSATPPfccHn/8cRx++OG44YYb8K1vfQu9vb245JJLAABbbrllw+WTl+EWLVqE5cuX48MPP8SPf/xjPP3003j55ZcRj8dLry0WizjiiCOw//7749prr8Wjjz6KH/3oR9hhhx1w7rnnNl0Pt912G3p7e7F06VL09vbi8ccfx6WXXorx8XFcc801AIBLLrkEY2Nj+OCDD3D99dcDAHp7exv+zrPPPhuLFy+u+t7vf/973HHHHRgeHi59L5lMNl02qa+vD9FoFADw8ssvIxaLYdddd616jbwF4eWXX8ZBBx1U9/dks1kAQE9Pz4yfzZo1C6+99ho2bNiArbbaqvT9xx9/HLNmzUKxWMS2226LCy64AP/v//0/XcvtR8wLzAuNeDUv1DMyMoKVK1fipJNOQiwWm/Fz5gX9mBOYExpph5xw2GGHYWJiApFIBEcccQR+9KMf4WMf+1jp5y+//DIAYN99961639y5czFv3rzSzw0x3Ip0iK9+9asiGAzWvUykaZoQotzxHXTQQVXd3saNG0UkEhGHH364KBaLpe//9Kc/FQDELbfcIoQQ4uWXXxYAxL333ttwOa6//noBQIyMjBhafj3vu/3220UwGJzR2d58880CgHj66aeFEEK8/fbbIhgMin/4h3+o+nuEKK8LIRpf3qw9C5HL5cTw8LDYY489xObNm0uve/DBBwUAcemll5a+Jzv+K664oup37rPPPmLhwoXNV4IQYnJycsb3zj77bDFr1qyqMy1WLm++/fbbYmBgQHzuc5+r2g7Q4ExF7dett95atRzbb7/9jM/IZDICgLj44osbLkexWBTxeFx89rOfrfp+MpkUsVhMABAvvPBC6fvHHHOM+MEPfiDuv/9+8fOf/1wcfPDBAoC46KKLTK0HP2BeYF7Qyyt5oZ6f/OQnAoB46KGHZvyMecEY5gTmBL28lBPuvvtucfrpp4tf/OIX4r777hPf+973xKxZs8Ts2bPF+++/X3rdNddcIwBUfU9atGiR+OQnP2l4PXjz6RmbaZqG+++/H8ccc8yMLg0AAoFA1b/POussdHV1lf796KOPIpfL4fzzz696AOmss85Cf39/6UG5gYEBAMDDDz+MycnJussiu/EHHngAmqbp/hv0vO/ee+/Frrvuil122QXJZLL09ZnPfAYA8MQTTwAA7r//fmiahksvvXTGA1W160KPF154ARs3bsQ3v/nNqgeEjj76aOyyyy5VDxJKtSOSHHzwwfjb3/7W8rMqz95v2rQJyWQSBx98MCYnJ/HGG28YXvZamUwG//AP/4BEIoG77rqrajtYuXKlrq8jjjii9J7NmzeXzkhUkutp8+bNDZclGAzi7LPPxmOPPYZly5bh7bffxosvvogvfelLyOVyM97/m9/8BhdddBGOO+44nHnmmXjqqadwxBFH4LrrrsMHH3xged10GuYF5gW9vJQX6rnzzjsxNDSEz33uczN+xrygH3MCc4JeXssJX/rSl3Drrbfiq1/9Ko4//nh8//vfx8MPP4zR0VFceeWVVZ8DoOFnGc09AODLW6FGRkYwPj6OPfbYQ9fra5+o//vf/w4A2Hnnnau+H4lEsP3225d+vmDBAixduhTXXXcd7rjjDhx88ME49thj8U//9E+lRHLSSSfhP//zP/H1r38dF198MT772c/ii1/8Ik444YSmoyboed/bb7+N119/vWqkoEobN24EAPz1r39FMBjEbrvtpmt9tNJo/QDALrvsgj/+8Y9V3+vu7p6xjIlEAqlUquVnvfbaa/je976Hxx9/HOPj41U/GxsbM7roM5x11ln461//imeeeQaDg4NVP6u9BKpHT09P6ZamSlNTU6WfN3PFFVcgmUzihz/8Ia6++moAwOGHH46vfe1ruPnmm5tetg0EArjgggvw8MMP48knn8Q//dM/GV7+Tsa8MI15oTWv5YVKf/vb3/CnP/0J5513HkKh1od45oXGmBOmMSe05uWcIB100EHYf//98eijj1Z9DoCGn2Xmc3zZWBhlZsVKP/rRj3D66afjgQcewCOPPIJvf/vbWL58OZ599lnMmzcPPT09WLVqFZ544gn89re/xe9//3vcfffd+MxnPoNHHnmkquutXaZW79M0DR//+Mdx3XXX1f0d8+fPN/13qdTob2wlnU7jkEMOQX9/P6644grssMMO6O7uxksvvYR//ud/NnRWp54f//jHuOuuu/DLX/4Se++994yf1xsLup6BgYHSNjRnzhw88cQTEEJUneFZv349gOn7GpuJRCL4z//8T1x55ZV46623sOWWW2KnnXbCKaecgmAwiB133LHp+2XMP/roI13LTo0xL9iLeUF/Xqh05513AgC+8pWv6H4P84IazAn2Yk4wlxMqzZ8/H2+++Wbp33PmzCn93to4r1+/3twQ1IZvnuoAxWJR9Pf3i+OOO67p6xoN1yWfyq+9fzWbzYqBgQHxj//4jw1/59NPPy0AiEsuuaTha6688koBQKxcubL1H9PkfUcddZTYeuutq+59rEfeY/fyyy83fd0ee+yh677JZ555RgAQN91004zX7rrrrlX3Q8qRHmpddtllotXmed999wkA4qmnnqr6/s9+9rMZI0984QtfMHTf5KpVq0QoFBLnn39+w9fAxH2T8t7a2pEe7rjjDgFArFq1SvcySoVCQcyZM0d86lOfavna//7v/xYAxJ133mn4czod80I15oWZ2iEv7LrrrmKHHXbQ/XohmBcaYU6oxpwwUzvkhEoLFy4UO+20U+nfr776qgAajwpV+0yLHr58xiIYDOL444/Hf//3f+OFF16Y8XPRYs7AxYsXIxKJ4N/+7d+qXvvzn/8cY2NjOProowEA4+PjM2Yu/PjHP45gMFi67FTvDJHseOtdmpL0vO9LX/oS1q5di//4j/+Y8drNmzeXRq04/vjjEQwGccUVV8zo3Cv/vlgshnQ63XCZpH333RfDw8O4+eabq/6G3/3ud3j99ddL68cqefaichlzuRxuuummGa+NxWK6L3euX78eX/rSl3DQQQeVRouox8x9k8cddxzC4XDVMgohcPPNN2PrrbfGAQccULUcb7zxBvL5fNPlvfbaa7F+/fqqCa8++ugjFIvFqtfl83lcffXViEQiOOyww3StCz9hXmBeaKYd8sLLL7+M119/HaecckrdZWNeMIY5gTmhGS/nhJGRkRnL8dBDD+HFF1/EkUceWfre7rvvjl122QU/+9nPqnLDihUrEAgEcMIJJ+haF5V8eyvUVVddhUceeQSHHHJIaXi19evX495778Uf//jHqiHOag0NDWHZsmW4/PLLceSRR+LYY4/Fm2++iZtuugmLFi0q3aP6+OOP47zzzsOJJ56InXbaCYVCAbfffju6urrwj//4jwCm75lftWoVjj76aGy77bbYuHEjbrrpJsybN6/pUGJ63nfqqafinnvuwTnnnIMnnngCBx54IIrFIt544w3cc889ePjhh7Hvvvtixx13xCWXXILvf//7OPjgg/HFL34R0WgUzz//PObOnYvly5cDABYuXIgVK1bgX//1X7HjjjtieHi49HBXpXA4jB/84Ac444wzcMghh+Dkk08uDSG33Xbb4YILLjAbtioHHHAAEokETjvtNHz7299GIBDA7bffXjfZL1y4EHfffTeWLl2KRYsWobe3F8ccc0zd3/vtb38bIyMjuOiii/CrX/2q6md77rkn9txzTwDm7pucN28ezj//fFxzzTXI5/NYtGgR7r//fvzhD3/AHXfcUXWpd9myZfjFL36Bd999F9tttx0A4Je//CX+67/+C5/+9KfR29uLRx99FPfccw++/vWvl7YpYPoBzX/9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IiIiIiKyjI0FERERERFZxsaCiIiIiIgsY2NBRERERESWsbEgIiIiIiLL2FgQEREREZFlbCyIiIiIiMgyNhZERERERGQZGwtyzMjICLbaaitcddVVpe8988wziEQieOyxx1xcMiJyA3MCEdViXmhvASGEcHshyD8eeughHH/88XjmmWew8847Y++998Zxxx2H6667zu1FIyIXMCcQUS3mhfbFxoIct2TJEjz66KPYd999sXr1ajz//POIRqNuLxYRuYQ5gYhqMS+0JzYW5LjNmzdjjz32wJo1a/Diiy/i4x//uNuLREQuYk4golrMC+2Jz1iQ4/76179i3bp10DQN7733ntuLQ0QuY04golrMC+2JVyzIUblcDvvttx/23ntv7LzzzrjhhhuwevVqDA8Pu71oROQC5gQiqsW80L7YWJCjvvOd7+DXv/41/vKXv6C3txeHHHIIBgYG8OCDD7q9aETkAuYEIqrFvNC+eCsUOebJJ5/EDTfcgNtvvx39/f0IBoO4/fbb8Yc//AErVqxwe/GIyGHMCURUi3mhvfGKBRERERERWcYrFkREREREZBkbCyIiIiIisoyNBRERERERWcbGgoiIiIiILGNjQURERERElrGxICIiIiIiy9hYEBERERGRZWwsiIiIiIjIMjYWRERERERkGRsLIiIiIiKyjI0FERERERFZ9v8Dbnd/CehFYxkAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 800x400 with 3 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(1, 3, figsize=(8, 4), layout=\"tight\")\n",
    "sim.plot(z=0.95, ax=ax[0])\n",
    "sim.plot(z=0.75, ax=ax[1])\n",
    "sim.plot(z=0.5, ax=ax[2])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example 2: GDS import\n",
    "\n",
    "Both `PolySlab` and `ComplexPolySlab` can be constructed from a `gdstk.Cell`. To illustrate this, let's make a GDS cell with the aforementioned concave polygon, and load it with `.from_gds` classmethod."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-08-18T23:43:55.896177Z",
     "iopub.status.busy": "2023-08-18T23:43:55.896031Z",
     "iopub.status.idle": "2023-08-18T23:43:55.913154Z",
     "shell.execute_reply": "2023-08-18T23:43:55.912590Z"
    }
   },
   "outputs": [],
   "source": [
    "# add the concave polygon to the gds cell\n",
    "\n",
    "lib = gdstk.Library()\n",
    "cell = lib.new_cell(\"SI\")\n",
    "poly = gdstk.Polygon(vertices, layer=0)\n",
    "_ = cell.add(poly)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Loading a GDS cell into `ComplexPolySlab`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-08-18T23:43:55.915229Z",
     "iopub.status.busy": "2023-08-18T23:43:55.915091Z",
     "iopub.status.idle": "2023-08-18T23:43:55.947438Z",
     "shell.execute_reply": "2023-08-18T23:43:55.946945Z"
    }
   },
   "outputs": [],
   "source": [
    "# obtain a list of polyslabs\n",
    "geo_list = ComplexPolySlab.from_gds(\n",
    "    cell,\n",
    "    gds_layer=0,\n",
    "    axis=2,\n",
    "    slab_bounds=(0, 1),\n",
    "    sidewall_angle=np.pi / 4,\n",
    "    reference_plane=\"top\",\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-08-18T23:43:55.949567Z",
     "iopub.status.busy": "2023-08-18T23:43:55.949426Z",
     "iopub.status.idle": "2023-08-18T23:43:55.970895Z",
     "shell.execute_reply": "2023-08-18T23:43:55.970358Z"
    }
   },
   "outputs": [],
   "source": [
    "structure = td.Structure(\n",
    "    geometry=td.GeometryGroup(geometries=geo_list),\n",
    "    medium=mat,\n",
    ")\n",
    "\n",
    "sim = td.Simulation(\n",
    "    run_time=1e-12,\n",
    "    size=(4, 4, 2),\n",
    "    center=(0.5, 0.5, 0.5),\n",
    "    grid_spec=td.GridSpec.auto(wavelength=1.0),\n",
    "    structures=[structure],\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-08-18T23:43:55.972911Z",
     "iopub.status.busy": "2023-08-18T23:43:55.972771Z",
     "iopub.status.idle": "2023-08-18T23:43:56.344157Z",
     "shell.execute_reply": "2023-08-18T23:43:56.343653Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxYAAAEaCAYAAACM48H1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABgd0lEQVR4nO3deZRcZZ0//ndV19Kd6qWKTjckJEAA2WUxBJRFQCMgyDIOiOAgiyJg0C+EI0PEAwMOBAUBRyGMMwL+EBBwDuAgCmGNgiCrExhWBQlZSFdT1Z2uTtd2n98fPU9tXctdnrtU3ffrnD6Q7qqu2/dz7+d+Pnd5noAQQoCIiIiIiMiCoNsLQERERERE7Y+NBRERERERWcbGgoiIiIiILGNjQURERERElrGxICIiIiIiy9hYEBERERGRZWwsiIiIiIjIMjYWRERERERkGRsLIiIiIiKyjI0FWfbkk08iEAjgySefdHtRiMgjmBeIqBJzgj+wsSDdbrrpJtx2221uL4Ypd955J2644Qa3FwMAoGkafvjDH2LBggXo7u7Gnnvuibvuukv3+1euXImDDjoIs2bNQiKRwAknnID33ntvxuu22247BAKBGV/nnHOOwr+G/I55QQ0reeHQQw+tu68HAgGEw+Gq1zIvkN2YE9SwkhNuu+22hjlhw4YNM17/m9/8Bp/4xCfQ3d2NbbbZBpdddhkKhYKp5Q4IIYSpd5Lv7LHHHpg9e/aMsw2apiGXyyESiSAY9Gav+oUvfAGvvvpq3QLcacuWLcPVV1+Ns846C4sWLcIDDzyA3/72t7jrrrvw5S9/uel7H3zwQRx33HH4xCc+gVNPPRXj4+P48Y9/jGg0ipdffhlDQ0Ol12633XZIJBK48MILq37HTjvthP3228+Wv438h3lBDSt5YeXKlfjwww+rvpfJZHDOOefgqKOOwm9/+9vS95kXyG7MCWpYyQm33XYbzjjjDFxxxRVYsGBB1c9OOOEEdHd3l/79u9/9DkcffTQOPfRQnHzyyVi9ejVuvPFGfOMb38CKFSuML7ggQyYmJtxeBNfsvvvu4pBDDnF7MUw5+uijxbbbbuv2YogPPvhAhMNhsWTJktL3NE0TBx98sJg3b54oFApN37/bbruJHXfcUWSz2dL3XnnlFREMBsXSpUurXrvtttuKo48+Wu0fQHUxLxzi9mKY0il5oZ7bb79dABB33HFH1feZF5zBnHCI24thSqfkhFtvvVUAEM8//3zLz9ptt93EXnvtJfL5fOl7l1xyiQgEAuL11183vOy+biw++OADceaZZ4o5c+aISCQitttuO3HOOeeUijYZmCeffFKce+65YmhoSMTj8dL7b7zxRrHbbruJSCQi5syZI775zW+KVCpV9RlvvfWW+OIXvyi23HJLEY1GxdZbby1OOukkkU6nS6955JFHxIEHHigGBgZELBYTO+20k1i2bFnL5dfzvqmpKXHppZeKHXbYQUQiETFv3jzxne98R0xNTc34fbfffrtYtGiR6OnpEfF4XBx88MHi4YcfFkJMH4wAVH3JxPHEE08IAOKJJ56o+n333HOP+MQnPiG6u7vF4OCg+MpXviI++OCDqtecdtppIhaLiQ8++EAcd9xxIhaLidmzZ4sLL7xQ18H0/vvvF0cddVQphttvv7244oorqt57yCGHzFj2ZonjtNNOm/F6+XXZZZe1XKZmbrzxRgFAvPbaa1Xfv/POOwUA8Yc//KHhe0dHRwUA8Z3vfGfGz3bffXcxd+7cqu/JAiKbzfr6IGcU80I15oXyMnkxLzTy+c9/XsRisRn7PvOCccwJ1ZgTysvk1ZxQ2ViMj483XEevvfaaACBuvPHGqu+vXbtWABDf//73DS97yPg1js6wbt067Lfffkin0/jGN76BXXbZBWvXrsWvf/1rTE5OIhKJlF77zW9+E0NDQ7j00kuRyWQAAP/yL/+Cyy+/HIsXL8a5556LN998EytWrMDzzz+Pp59+GuFwGLlcDkcccQSy2Sy+9a1vYauttsLatWvx4IMPIp1OY2BgAK+99hq+8IUvYM8998QVV1yBaDSKd955B08//XTT5dfzPk3TcOyxx+KPf/wjvvGNb2DXXXfF6tWrcf311+Ott97C/fffX3rt5Zdfjn/5l3/BAQccgCuuuAKRSATPPfccHn/8cRx++OG44YYb8K1vfQu9vb245JJLAABbbrllw+WTl+EWLVqE5cuX48MPP8SPf/xjPP3003j55ZcRj8dLry0WizjiiCOw//7749prr8Wjjz6KH/3oR9hhhx1w7rnnNl0Pt912G3p7e7F06VL09vbi8ccfx6WXXorx8XFcc801AIBLLrkEY2Nj+OCDD3D99dcDAHp7exv+zrPPPhuLFy+u+t7vf/973HHHHRgeHi59L5lMNl02qa+vD9FoFADw8ssvIxaLYdddd616jbwF4eWXX8ZBBx1U9/dks1kAQE9Pz4yfzZo1C6+99ho2bNiArbbaqvT9xx9/HLNmzUKxWMS2226LCy64AP/v//0/XcvtR8wLzAuNeDUv1DMyMoKVK1fipJNOQiwWm/Fz5gX9mBOYExpph5xw2GGHYWJiApFIBEcccQR+9KMf4WMf+1jp5y+//DIAYN99961639y5czFv3rzSzw0x3Ip0iK9+9asiGAzWvUykaZoQotzxHXTQQVXd3saNG0UkEhGHH364KBaLpe//9Kc/FQDELbfcIoQQ4uWXXxYAxL333ttwOa6//noBQIyMjBhafj3vu/3220UwGJzR2d58880CgHj66aeFEEK8/fbbIhgMin/4h3+o+nuEKK8LIRpf3qw9C5HL5cTw8LDYY489xObNm0uve/DBBwUAcemll5a+Jzv+K664oup37rPPPmLhwoXNV4IQYnJycsb3zj77bDFr1qyqMy1WLm++/fbbYmBgQHzuc5+r2g7Q4ExF7dett95atRzbb7/9jM/IZDICgLj44osbLkexWBTxeFx89rOfrfp+MpkUsVhMABAvvPBC6fvHHHOM+MEPfiDuv/9+8fOf/1wcfPDBAoC46KKLTK0HP2BeYF7Qyyt5oZ6f/OQnAoB46KGHZvyMecEY5gTmBL28lBPuvvtucfrpp4tf/OIX4r777hPf+973xKxZs8Ts2bPF+++/X3rdNddcIwBUfU9atGiR+OQnP2l4PXjz6RmbaZqG+++/H8ccc8yMLg0AAoFA1b/POussdHV1lf796KOPIpfL4fzzz696AOmss85Cf39/6UG5gYEBAMDDDz+MycnJussiu/EHHngAmqbp/hv0vO/ee+/Frrvuil122QXJZLL09ZnPfAYA8MQTTwAA7r//fmiahksvvXTGA1W160KPF154ARs3bsQ3v/nNqgeEjj76aOyyyy5VDxJKtSOSHHzwwfjb3/7W8rMqz95v2rQJyWQSBx98MCYnJ/HGG28YXvZamUwG//AP/4BEIoG77rqrajtYuXKlrq8jjjii9J7NmzeXzkhUkutp8+bNDZclGAzi7LPPxmOPPYZly5bh7bffxosvvogvfelLyOVyM97/m9/8BhdddBGOO+44nHnmmXjqqadwxBFH4LrrrsMHH3xged10GuYF5gW9vJQX6rnzzjsxNDSEz33uczN+xrygH3MCc4JeXssJX/rSl3Drrbfiq1/9Ko4//nh8//vfx8MPP4zR0VFceeWVVZ8DoOFnGc09AODLW6FGRkYwPj6OPfbYQ9fra5+o//vf/w4A2Hnnnau+H4lEsP3225d+vmDBAixduhTXXXcd7rjjDhx88ME49thj8U//9E+lRHLSSSfhP//zP/H1r38dF198MT772c/ii1/8Ik444YSmoyboed/bb7+N119/vWqkoEobN24EAPz1r39FMBjEbrvtpmt9tNJo/QDALrvsgj/+8Y9V3+vu7p6xjIlEAqlUquVnvfbaa/je976Hxx9/HOPj41U/GxsbM7roM5x11ln461//imeeeQaDg4NVP6u9BKpHT09P6ZamSlNTU6WfN3PFFVcgmUzihz/8Ia6++moAwOGHH46vfe1ruPnmm5tetg0EArjgggvw8MMP48knn8Q//dM/GV7+Tsa8MI15oTWv5YVKf/vb3/CnP/0J5513HkKh1od45oXGmBOmMSe05uWcIB100EHYf//98eijj1Z9DoCGn2Xmc3zZWBhlZsVKP/rRj3D66afjgQcewCOPPIJvf/vbWL58OZ599lnMmzcPPT09WLVqFZ544gn89re/xe9//3vcfffd+MxnPoNHHnmkquutXaZW79M0DR//+Mdx3XXX1f0d8+fPN/13qdTob2wlnU7jkEMOQX9/P6644grssMMO6O7uxksvvYR//ud/NnRWp54f//jHuOuuu/DLX/4Se++994yf1xsLup6BgYHSNjRnzhw88cQTEEJUneFZv349gOn7GpuJRCL4z//8T1x55ZV46623sOWWW2KnnXbCKaecgmAwiB133LHp+2XMP/roI13LTo0xL9iLeUF/Xqh05513AgC+8pWv6H4P84IazAn2Yk4wlxMqzZ8/H2+++Wbp33PmzCn93to4r1+/3twQ1IZvnuoAxWJR9Pf3i+OOO67p6xoN1yWfyq+9fzWbzYqBgQHxj//4jw1/59NPPy0AiEsuuaTha6688koBQKxcubL1H9PkfUcddZTYeuutq+59rEfeY/fyyy83fd0ee+yh677JZ555RgAQN91004zX7rrrrlX3Q8qRHmpddtllotXmed999wkA4qmnnqr6/s9+9rMZI0984QtfMHTf5KpVq0QoFBLnn39+w9fAxH2T8t7a2pEe7rjjDgFArFq1SvcySoVCQcyZM0d86lOfavna//7v/xYAxJ133mn4czod80I15oWZ2iEv7LrrrmKHHXbQ/XohmBcaYU6oxpwwUzvkhEoLFy4UO+20U+nfr776qgAajwpV+0yLHr58xiIYDOL444/Hf//3f+OFF16Y8XPRYs7AxYsXIxKJ4N/+7d+qXvvzn/8cY2NjOProowEA4+PjM2Yu/PjHP45gMFi67FTvDJHseOtdmpL0vO9LX/oS1q5di//4j/+Y8drNmzeXRq04/vjjEQwGccUVV8zo3Cv/vlgshnQ63XCZpH333RfDw8O4+eabq/6G3/3ud3j99ddL68cqefaichlzuRxuuummGa+NxWK6L3euX78eX/rSl3DQQQeVRouox8x9k8cddxzC4XDVMgohcPPNN2PrrbfGAQccULUcb7zxBvL5fNPlvfbaa7F+/fqqCa8++ugjFIvFqtfl83lcffXViEQiOOyww3StCz9hXmBeaKYd8sLLL7+M119/HaecckrdZWNeMIY5gTmhGS/nhJGRkRnL8dBDD+HFF1/EkUceWfre7rvvjl122QU/+9nPqnLDihUrEAgEcMIJJ+haF5V8eyvUVVddhUceeQSHHHJIaXi19evX495778Uf//jHqiHOag0NDWHZsmW4/PLLceSRR+LYY4/Fm2++iZtuugmLFi0q3aP6+OOP47zzzsOJJ56InXbaCYVCAbfffju6urrwj//4jwCm75lftWoVjj76aGy77bbYuHEjbrrpJsybN6/pUGJ63nfqqafinnvuwTnnnIMnnngCBx54IIrFIt544w3cc889ePjhh7Hvvvtixx13xCWXXILvf//7OPjgg/HFL34R0WgUzz//PObOnYvly5cDABYuXIgVK1bgX//1X7HjjjtieHi49HBXpXA4jB/84Ac444wzcMghh+Dkk08uDSG33Xbb4YILLjAbtioHHHAAEokETjvtNHz7299GIBDA7bffXjfZL1y4EHfffTeWLl2KRYsWobe3F8ccc0zd3/vtb38bIyMjuOiii/CrX/2q6md77rkn9txzTwDm7pucN28ezj//fFxzzTXI5/NYtGgR7r//fvzhD3/AHXfcUXWpd9myZfjFL36Bd999F9tttx0A4Je//CX+67/+C5/+9KfR29uLRx99FPfccw++/vWvl7YpYPoBzX/9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IiIiIiKyjI0FERERERFZxsaCiIiIiIgsY2NBRERERESWsbEgIiIiIiLL2FgQEREREZFlbCyIiIiIiMgyNhZERERERGQZGwtyzMjICLbaaitcddVVpe8988wziEQieOyxx1xcMiJyA3MCEdViXmhvASGEcHshyD8eeughHH/88XjmmWew8847Y++998Zxxx2H6667zu1FIyIXMCcQUS3mhfbFxoIct2TJEjz66KPYd999sXr1ajz//POIRqNuLxYRuYQ5gYhqMS+0JzYW5LjNmzdjjz32wJo1a/Diiy/i4x//uNuLREQuYk4golrMC+2Jz1iQ4/76179i3bp10DQN7733ntuLQ0QuY04golrMC+2JVyzIUblcDvvttx/23ntv7LzzzrjhhhuwevVqDA8Pu71oROQC5gQiqsW80L7YWJCjvvOd7+DXv/41/vKXv6C3txeHHHIIBgYG8OCDD7q9aETkAuYEIqrFvNC+eCsUOebJJ5/EDTfcgNtvvx39/f0IBoO4/fbb8Yc//AErVqxwe/GIyGHMCURUi3mhvfGKBRERERERWcYrFkREREREZBkbCyIiIiIisoyNBRERERERWcbGgoiIiIiILGNjQURERERElrGxICIiIiIiy9hYEBERERGRZWwsiIiIiIjIMjYWRERERERkGRsLIiIiIiKyjI0FERERERFZ9v8Dbnd/CehFYxkAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 800x400 with 3 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(1, 3, figsize=(8, 4), layout=\"tight\")\n",
    "sim.plot(z=0.95, ax=ax[0])\n",
    "sim.plot(z=0.75, ax=ax[1])\n",
    "sim.plot(z=0.5, ax=ax[2])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Note, however, that loading a GDS cell can be more generally done with `Geometry.from_gds`, which will support not only self-intersections like in `ComplexPolySlab`, but also polygons with holes. The interface is almost identical, except it returns a geometry subclass, instead of a list, that can be used directly in a `Structure`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-08-18T23:43:56.346234Z",
     "iopub.status.busy": "2023-08-18T23:43:56.346056Z",
     "iopub.status.idle": "2023-08-18T23:43:56.758779Z",
     "shell.execute_reply": "2023-08-18T23:43:56.758262Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxYAAAEaCAYAAACM48H1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABgd0lEQVR4nO3deZRcZZ0//ndV19Kd6qWKTjckJEAA2WUxBJRFQCMgyDIOiOAgiyJg0C+EI0PEAwMOBAUBRyGMMwL+EBBwDuAgCmGNgiCrExhWBQlZSFdT1Z2uTtd2n98fPU9tXctdnrtU3ffrnD6Q7qqu2/dz7+d+Pnd5noAQQoCIiIiIiMiCoNsLQERERERE7Y+NBRERERERWcbGgoiIiIiILGNjQURERERElrGxICIiIiIiy9hYEBERERGRZWwsiIiIiIjIMjYWRERERERkGRsLIiIiIiKyjI0FWfbkk08iEAjgySefdHtRiMgjmBeIqBJzgj+wsSDdbrrpJtx2221uL4Ypd955J2644Qa3FwMAoGkafvjDH2LBggXo7u7Gnnvuibvuukv3+1euXImDDjoIs2bNQiKRwAknnID33ntvxuu22247BAKBGV/nnHOOwr+G/I55QQ0reeHQQw+tu68HAgGEw+Gq1zIvkN2YE9SwkhNuu+22hjlhw4YNM17/m9/8Bp/4xCfQ3d2NbbbZBpdddhkKhYKp5Q4IIYSpd5Lv7LHHHpg9e/aMsw2apiGXyyESiSAY9Gav+oUvfAGvvvpq3QLcacuWLcPVV1+Ns846C4sWLcIDDzyA3/72t7jrrrvw5S9/uel7H3zwQRx33HH4xCc+gVNPPRXj4+P48Y9/jGg0ipdffhlDQ0Ol12633XZIJBK48MILq37HTjvthP3228+Wv438h3lBDSt5YeXKlfjwww+rvpfJZHDOOefgqKOOwm9/+9vS95kXyG7MCWpYyQm33XYbzjjjDFxxxRVYsGBB1c9OOOEEdHd3l/79u9/9DkcffTQOPfRQnHzyyVi9ejVuvPFGfOMb38CKFSuML7ggQyYmJtxeBNfsvvvu4pBDDnF7MUw5+uijxbbbbuv2YogPPvhAhMNhsWTJktL3NE0TBx98sJg3b54oFApN37/bbruJHXfcUWSz2dL3XnnlFREMBsXSpUurXrvtttuKo48+Wu0fQHUxLxzi9mKY0il5oZ7bb79dABB33HFH1feZF5zBnHCI24thSqfkhFtvvVUAEM8//3zLz9ptt93EXnvtJfL5fOl7l1xyiQgEAuL11183vOy+biw++OADceaZZ4o5c+aISCQitttuO3HOOeeUijYZmCeffFKce+65YmhoSMTj8dL7b7zxRrHbbruJSCQi5syZI775zW+KVCpV9RlvvfWW+OIXvyi23HJLEY1GxdZbby1OOukkkU6nS6955JFHxIEHHigGBgZELBYTO+20k1i2bFnL5dfzvqmpKXHppZeKHXbYQUQiETFv3jzxne98R0xNTc34fbfffrtYtGiR6OnpEfF4XBx88MHi4YcfFkJMH4wAVH3JxPHEE08IAOKJJ56o+n333HOP+MQnPiG6u7vF4OCg+MpXviI++OCDqtecdtppIhaLiQ8++EAcd9xxIhaLidmzZ4sLL7xQ18H0/vvvF0cddVQphttvv7244oorqt57yCGHzFj2ZonjtNNOm/F6+XXZZZe1XKZmbrzxRgFAvPbaa1Xfv/POOwUA8Yc//KHhe0dHRwUA8Z3vfGfGz3bffXcxd+7cqu/JAiKbzfr6IGcU80I15oXyMnkxLzTy+c9/XsRisRn7PvOCccwJ1ZgTysvk1ZxQ2ViMj483XEevvfaaACBuvPHGqu+vXbtWABDf//73DS97yPg1js6wbt067Lfffkin0/jGN76BXXbZBWvXrsWvf/1rTE5OIhKJlF77zW9+E0NDQ7j00kuRyWQAAP/yL/+Cyy+/HIsXL8a5556LN998EytWrMDzzz+Pp59+GuFwGLlcDkcccQSy2Sy+9a1vYauttsLatWvx4IMPIp1OY2BgAK+99hq+8IUvYM8998QVV1yBaDSKd955B08//XTT5dfzPk3TcOyxx+KPf/wjvvGNb2DXXXfF6tWrcf311+Ott97C/fffX3rt5Zdfjn/5l3/BAQccgCuuuAKRSATPPfccHn/8cRx++OG44YYb8K1vfQu9vb245JJLAABbbrllw+WTl+EWLVqE5cuX48MPP8SPf/xjPP3003j55ZcRj8dLry0WizjiiCOw//7749prr8Wjjz6KH/3oR9hhhx1w7rnnNl0Pt912G3p7e7F06VL09vbi8ccfx6WXXorx8XFcc801AIBLLrkEY2Nj+OCDD3D99dcDAHp7exv+zrPPPhuLFy+u+t7vf/973HHHHRgeHi59L5lMNl02qa+vD9FoFADw8ssvIxaLYdddd616jbwF4eWXX8ZBBx1U9/dks1kAQE9Pz4yfzZo1C6+99ho2bNiArbbaqvT9xx9/HLNmzUKxWMS2226LCy64AP/v//0/XcvtR8wLzAuNeDUv1DMyMoKVK1fipJNOQiwWm/Fz5gX9mBOYExpph5xw2GGHYWJiApFIBEcccQR+9KMf4WMf+1jp5y+//DIAYN99961639y5czFv3rzSzw0x3Ip0iK9+9asiGAzWvUykaZoQotzxHXTQQVXd3saNG0UkEhGHH364KBaLpe//9Kc/FQDELbfcIoQQ4uWXXxYAxL333ttwOa6//noBQIyMjBhafj3vu/3220UwGJzR2d58880CgHj66aeFEEK8/fbbIhgMin/4h3+o+nuEKK8LIRpf3qw9C5HL5cTw8LDYY489xObNm0uve/DBBwUAcemll5a+Jzv+K664oup37rPPPmLhwoXNV4IQYnJycsb3zj77bDFr1qyqMy1WLm++/fbbYmBgQHzuc5+r2g7Q4ExF7dett95atRzbb7/9jM/IZDICgLj44osbLkexWBTxeFx89rOfrfp+MpkUsVhMABAvvPBC6fvHHHOM+MEPfiDuv/9+8fOf/1wcfPDBAoC46KKLTK0HP2BeYF7Qyyt5oZ6f/OQnAoB46KGHZvyMecEY5gTmBL28lBPuvvtucfrpp4tf/OIX4r777hPf+973xKxZs8Ts2bPF+++/X3rdNddcIwBUfU9atGiR+OQnP2l4PXjz6RmbaZqG+++/H8ccc8yMLg0AAoFA1b/POussdHV1lf796KOPIpfL4fzzz696AOmss85Cf39/6UG5gYEBAMDDDz+MycnJussiu/EHHngAmqbp/hv0vO/ee+/Frrvuil122QXJZLL09ZnPfAYA8MQTTwAA7r//fmiahksvvXTGA1W160KPF154ARs3bsQ3v/nNqgeEjj76aOyyyy5VDxJKtSOSHHzwwfjb3/7W8rMqz95v2rQJyWQSBx98MCYnJ/HGG28YXvZamUwG//AP/4BEIoG77rqrajtYuXKlrq8jjjii9J7NmzeXzkhUkutp8+bNDZclGAzi7LPPxmOPPYZly5bh7bffxosvvogvfelLyOVyM97/m9/8BhdddBGOO+44nHnmmXjqqadwxBFH4LrrrsMHH3xged10GuYF5gW9vJQX6rnzzjsxNDSEz33uczN+xrygH3MCc4JeXssJX/rSl3Drrbfiq1/9Ko4//nh8//vfx8MPP4zR0VFceeWVVZ8DoOFnGc09AODLW6FGRkYwPj6OPfbYQ9fra5+o//vf/w4A2Hnnnau+H4lEsP3225d+vmDBAixduhTXXXcd7rjjDhx88ME49thj8U//9E+lRHLSSSfhP//zP/H1r38dF198MT772c/ii1/8Ik444YSmoyboed/bb7+N119/vWqkoEobN24EAPz1r39FMBjEbrvtpmt9tNJo/QDALrvsgj/+8Y9V3+vu7p6xjIlEAqlUquVnvfbaa/je976Hxx9/HOPj41U/GxsbM7roM5x11ln461//imeeeQaDg4NVP6u9BKpHT09P6ZamSlNTU6WfN3PFFVcgmUzihz/8Ia6++moAwOGHH46vfe1ruPnmm5tetg0EArjgggvw8MMP48knn8Q//dM/GV7+Tsa8MI15oTWv5YVKf/vb3/CnP/0J5513HkKh1od45oXGmBOmMSe05uWcIB100EHYf//98eijj1Z9DoCGn2Xmc3zZWBhlZsVKP/rRj3D66afjgQcewCOPPIJvf/vbWL58OZ599lnMmzcPPT09WLVqFZ544gn89re/xe9//3vcfffd+MxnPoNHHnmkquutXaZW79M0DR//+Mdx3XXX1f0d8+fPN/13qdTob2wlnU7jkEMOQX9/P6644grssMMO6O7uxksvvYR//ud/NnRWp54f//jHuOuuu/DLX/4Se++994yf1xsLup6BgYHSNjRnzhw88cQTEEJUneFZv349gOn7GpuJRCL4z//8T1x55ZV46623sOWWW2KnnXbCKaecgmAwiB133LHp+2XMP/roI13LTo0xL9iLeUF/Xqh05513AgC+8pWv6H4P84IazAn2Yk4wlxMqzZ8/H2+++Wbp33PmzCn93to4r1+/3twQ1IZvnuoAxWJR9Pf3i+OOO67p6xoN1yWfyq+9fzWbzYqBgQHxj//4jw1/59NPPy0AiEsuuaTha6688koBQKxcubL1H9PkfUcddZTYeuutq+59rEfeY/fyyy83fd0ee+yh677JZ555RgAQN91004zX7rrrrlX3Q8qRHmpddtllotXmed999wkA4qmnnqr6/s9+9rMZI0984QtfMHTf5KpVq0QoFBLnn39+w9fAxH2T8t7a2pEe7rjjDgFArFq1SvcySoVCQcyZM0d86lOfavna//7v/xYAxJ133mn4czod80I15oWZ2iEv7LrrrmKHHXbQ/XohmBcaYU6oxpwwUzvkhEoLFy4UO+20U+nfr776qgAajwpV+0yLHr58xiIYDOL444/Hf//3f+OFF16Y8XPRYs7AxYsXIxKJ4N/+7d+qXvvzn/8cY2NjOProowEA4+PjM2Yu/PjHP45gMFi67FTvDJHseOtdmpL0vO9LX/oS1q5di//4j/+Y8drNmzeXRq04/vjjEQwGccUVV8zo3Cv/vlgshnQ63XCZpH333RfDw8O4+eabq/6G3/3ud3j99ddL68cqefaichlzuRxuuummGa+NxWK6L3euX78eX/rSl3DQQQeVRouox8x9k8cddxzC4XDVMgohcPPNN2PrrbfGAQccULUcb7zxBvL5fNPlvfbaa7F+/fqqCa8++ugjFIvFqtfl83lcffXViEQiOOyww3StCz9hXmBeaKYd8sLLL7+M119/HaecckrdZWNeMIY5gTmhGS/nhJGRkRnL8dBDD+HFF1/EkUceWfre7rvvjl122QU/+9nPqnLDihUrEAgEcMIJJ+haF5V8eyvUVVddhUceeQSHHHJIaXi19evX495778Uf//jHqiHOag0NDWHZsmW4/PLLceSRR+LYY4/Fm2++iZtuugmLFi0q3aP6+OOP47zzzsOJJ56InXbaCYVCAbfffju6urrwj//4jwCm75lftWoVjj76aGy77bbYuHEjbrrpJsybN6/pUGJ63nfqqafinnvuwTnnnIMnnngCBx54IIrFIt544w3cc889ePjhh7Hvvvtixx13xCWXXILvf//7OPjgg/HFL34R0WgUzz//PObOnYvly5cDABYuXIgVK1bgX//1X7HjjjtieHi49HBXpXA4jB/84Ac444wzcMghh+Dkk08uDSG33Xbb4YILLjAbtioHHHAAEokETjvtNHz7299GIBDA7bffXjfZL1y4EHfffTeWLl2KRYsWobe3F8ccc0zd3/vtb38bIyMjuOiii/CrX/2q6md77rkn9txzTwDm7pucN28ezj//fFxzzTXI5/NYtGgR7r//fvzhD3/AHXfcUXWpd9myZfjFL36Bd999F9tttx0A4Je//CX+67/+C5/+9KfR29uLRx99FPfccw++/vWvl7YpYPoBzX/9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IiIiIiKyjI0FERERERFZxsaCiIiIiIgsY2NBRERERESWsbEgIiIiIiLL2FgQEREREZFlbCyIiIiIiMgyNhZERERERGQZGwtyzMjICLbaaitcddVVpe8988wziEQieOyxx1xcMiJyA3MCEdViXmhvASGEcHshyD8eeughHH/88XjmmWew8847Y++998Zxxx2H6667zu1FIyIXMCcQUS3mhfbFxoIct2TJEjz66KPYd999sXr1ajz//POIRqNuLxYRuYQ5gYhqMS+0JzYW5LjNmzdjjz32wJo1a/Diiy/i4x//uNuLREQuYk4golrMC+2Jz1iQ4/76179i3bp10DQN7733ntuLQ0QuY04golrMC+2JVyzIUblcDvvttx/23ntv7LzzzrjhhhuwevVqDA8Pu71oROQC5gQiqsW80L7YWJCjvvOd7+DXv/41/vKXv6C3txeHHHIIBgYG8OCDD7q9aETkAuYEIqrFvNC+eCsUOebJJ5/EDTfcgNtvvx39/f0IBoO4/fbb8Yc//AErVqxwe/GIyGHMCURUi3mhvfGKBRERERERWcYrFkREREREZBkbCyIiIiIisoyNBRERERERWcbGgoiIiIiILGNjQURERERElrGxICIiIiIiy9hYEBERERGRZWwsiIiIiIjIMjYWRERERERkGRsLIiIiIiKyjI0FERERERFZ9v8Dbnd/CehFYxkAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 800x400 with 3 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# obtain a list of polyslabs\n",
    "geo = td.Geometry.from_gds(\n",
    "    cell,\n",
    "    gds_layer=0,\n",
    "    axis=2,\n",
    "    slab_bounds=(0, 1),\n",
    "    sidewall_angle=np.pi / 4,\n",
    "    reference_plane=\"top\",\n",
    ")\n",
    "\n",
    "structure = td.Structure(geometry=geo, medium=mat)\n",
    "\n",
    "sim = td.Simulation(\n",
    "    run_time=1e-12,\n",
    "    size=(4, 4, 2),\n",
    "    center=(0.5, 0.5, 0.5),\n",
    "    grid_spec=td.GridSpec.auto(wavelength=1.0),\n",
    "    structures=[structure],\n",
    ")\n",
    "\n",
    "fig, ax = plt.subplots(1, 3, figsize=(8, 4), layout=\"tight\")\n",
    "sim.plot(z=0.95, ax=ax[0])\n",
    "sim.plot(z=0.75, ax=ax[1])\n",
    "sim.plot(z=0.5, ax=ax[2])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "After going through this tutorial, you have learned how to define a self-intersecting polyslab. If you are new to `Tidy3D` or the finite-difference time-domain (FDTD) method, we highly recommend going through our [FDTD101](https://www.flexcompute.com/fdtd101/) tutorials and [example library](https://www.flexcompute.com/tidy3d/examples/) before starting your own simulation adventure. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "description": "This notebook demonstrates how to model complex polygon geometries in Tidy3D for FDTD simulations.",
  "feature_imag": "",
  "feature_image": "N/A",
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "keywords": "polygon, 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.0"
  },
  "title": "Modeling Complex Polygon Geometries in Tidy3D | Flexcompute"
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
