{
"cells": [
{
"cell_type": "markdown",
"id": "5bdd672d",
"metadata": {},
"source": [
"# Gymnasium integration\n",
"[Gymnasium](https://gymnasium.farama.org/) is an API standard for reinforcement learning with a diverse collection of reference environments. Stormvogel supports some integration with gymnasium. In particular, you can construct explicit models from the gymnasium environmnents under Gymnasium's [ToyText](https://gymnasium.farama.org/environments/toy_text/) (except Blackjack)."
]
},
{
"cell_type": "markdown",
"id": "c88c5695",
"metadata": {},
"source": [
"## FrozenLake\n",
"Let us create one of these environments, called FrozenLake.\n",
"Our agent wants to get to the present. Currently, it just chooses a random action."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "a454ea03",
"metadata": {
"execution": {
"iopub.execute_input": "2025-08-27T16:23:26.725915Z",
"iopub.status.busy": "2025-08-27T16:23:26.725681Z",
"iopub.status.idle": "2025-08-27T16:23:28.180129Z",
"shell.execute_reply": "2025-08-27T16:23:28.179621Z"
}
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/opt/venv/lib/python3.13/site-packages/pygame/pkgdata.py:25: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81.\n",
" from pkg_resources import resource_stream, resource_exists\n"
]
},
{
"data": {
"text/html": [
"
"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import gymnasium as gym\n",
"from stormvogel.extensions.gym_grid import *\n",
"from stormvogel import *\n",
"import IPython.display as ipd\n",
"\n",
"env = gym.make(\"FrozenLake-v1\", render_mode=\"rgb_array\", is_slippery=False) # Set `is_slippery=True` for stochastic behavior\n",
"filename = gymnasium_render_model_gif(env, filename=\"ice1\")\n",
"extensions.embed_gif(filename)"
]
},
{
"cell_type": "markdown",
"id": "3b98708f",
"metadata": {},
"source": [
"We can convert it into an explicit MDP as follows. Each state has a label that relates to the coordinates of the tile."
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "071d263c",
"metadata": {
"execution": {
"iopub.execute_input": "2025-08-27T16:23:28.181899Z",
"iopub.status.busy": "2025-08-27T16:23:28.181562Z",
"iopub.status.idle": "2025-08-27T16:23:30.226727Z",
"shell.execute_reply": "2025-08-27T16:23:30.226244Z"
}
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "da4e44a88a104dd9b8166b174e96a708",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Output()"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/javascript": [
"\n",
"function return_id_result(url, id, data) {\n",
" fetch(url, {\n",
" method: 'POST',\n",
" body: JSON.stringify({\n",
" 'id': id,\n",
" 'data': data\n",
" })\n",
" })\n",
" }\n"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/javascript": [
"return_id_result('http://127.0.0.1:8889', 'fkkWzJCVPgFTAbkXPqBd', 'test message')"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Test request failed. See 'Implementation details' in docs. Disable warning by use_server=False.\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
"\n",
" \n",
" Network\n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
"\n"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sv_model = gymnasium_grid_to_stormvogel(env, GRID_ACTION_LABEL_MAP)\n",
"# GRID_ACTION_LABEL_MAP = {0: \"←\", 1: \"↓\", 2: \"→\", 3: \"↑\", 4: \"pickup\", 5: \"dropoff\"} (map between gymnasium action ids and labels)\n",
"vis = show(sv_model, layout=Layout(\"layouts/frozenlake.json\"))"
]
},
{
"cell_type": "markdown",
"id": "c6342f69",
"metadata": {},
"source": [
"Now, let's do some model checking to calculate a strategy to solve the puzzle. We will tell the model checker to maximize the probability of getting to the target state (the present)."
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "dceaef55",
"metadata": {
"execution": {
"iopub.execute_input": "2025-08-27T16:23:30.234475Z",
"iopub.status.busy": "2025-08-27T16:23:30.234329Z",
"iopub.status.idle": "2025-08-27T16:23:30.286072Z",
"shell.execute_reply": "2025-08-27T16:23:30.285506Z"
}
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "dc0e7ab0e549403c8f2599a1047b4618",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Output()"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"\n",
" \n",
" Network\n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
"\n"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"res = model_checking(sv_model, f'Pmax=? [F \"target\"]')\n",
"vis2 = show(sv_model, result=res, layout=Layout(\"layouts/frozenlake.json\"))"
]
},
{
"cell_type": "markdown",
"id": "605382e8",
"metadata": {},
"source": [
"Let's highlight the path to see what the scheduler is doing."
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "d7c6b95d",
"metadata": {
"execution": {
"iopub.execute_input": "2025-08-27T16:23:30.294703Z",
"iopub.status.busy": "2025-08-27T16:23:30.294487Z",
"iopub.status.idle": "2025-08-27T16:23:43.339091Z",
"shell.execute_reply": "2025-08-27T16:23:43.338642Z"
}
},
"outputs": [],
"source": [
"path = simulate_path(sv_model, scheduler=res.scheduler, steps=20)\n",
"vis2.highlight_path(path, color=\"orange\")"
]
},
{
"cell_type": "markdown",
"id": "4dcfa7ba",
"metadata": {},
"source": [
"Alternatively, we can show what our scheduler does in the frozen lake environment itself."
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "fd82cf75",
"metadata": {
"execution": {
"iopub.execute_input": "2025-08-27T16:23:43.340708Z",
"iopub.status.busy": "2025-08-27T16:23:43.340546Z",
"iopub.status.idle": "2025-08-27T16:23:43.385977Z",
"shell.execute_reply": "2025-08-27T16:23:43.385452Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"
"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from stormvogel.extensions.gym_grid import *\n",
"gs = to_gymnasium_scheduler(sv_model, res.scheduler, GRID_ACTION_LABEL_MAP)\n",
"filename = gymnasium_render_model_gif(env, gs, filename=\"ice2\")\n",
"extensions.embed_gif(filename)"
]
},
{
"cell_type": "markdown",
"id": "efc625ce",
"metadata": {},
"source": [
"We can also define a function to act as the scheduler on the model and convert it to a gymnasium scheduler. This one just keeps going in a loop..."
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "5c84f0ba",
"metadata": {
"execution": {
"iopub.execute_input": "2025-08-27T16:23:43.387614Z",
"iopub.status.busy": "2025-08-27T16:23:43.387437Z",
"iopub.status.idle": "2025-08-27T16:23:43.694698Z",
"shell.execute_reply": "2025-08-27T16:23:43.694221Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"
"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from stormvogel.model import Action\n",
"\n",
"def my_scheduler(s: stormvogel.model.State):\n",
" # \"←\" \"↓\" \"→\" \"↑\"\n",
" if s.is_initial():\n",
" return Action.create(\"→\")\n",
" env_id = int(s.labels[0])\n",
" x,y = to_coordinate(env_id,env)\n",
" if x < 2 and y == 0:\n",
" return Action.create(\"→\")\n",
" elif x == 2 and y < 2:\n",
" return Action.create(\"↓\")\n",
" elif x > 0 and y == 2:\n",
" return Action.create(\"←\")\n",
" else:\n",
" return Action.create(\"↑\")\n",
"\n",
"gs = to_gymnasium_scheduler(sv_model, my_scheduler, GRID_ACTION_LABEL_MAP)\n",
"filename = gymnasium_render_model_gif(env, gs, filename=\"ice3\")\n",
"extensions.embed_gif(filename)"
]
},
{
"cell_type": "markdown",
"id": "c5318652",
"metadata": {},
"source": [
"## CliffWalking\n",
"CliffWalking is a slightly more boring version of FrozenLake. You can apply the same principles that we just applied to FrozenLake."
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "0c4e3613",
"metadata": {
"execution": {
"iopub.execute_input": "2025-08-27T16:23:43.696497Z",
"iopub.status.busy": "2025-08-27T16:23:43.696302Z",
"iopub.status.idle": "2025-08-27T16:23:43.702170Z",
"shell.execute_reply": "2025-08-27T16:23:43.701634Z"
}
},
"outputs": [],
"source": [
"import gymnasium as gym\n",
"from stormvogel.extensions.gym_grid import *\n",
"\n",
"env = gym.make(\"CliffWalking-v1\", render_mode=\"rgb_array\")"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "27b4b160",
"metadata": {
"execution": {
"iopub.execute_input": "2025-08-27T16:23:43.703814Z",
"iopub.status.busy": "2025-08-27T16:23:43.703625Z",
"iopub.status.idle": "2025-08-27T16:23:43.748560Z",
"shell.execute_reply": "2025-08-27T16:23:43.747999Z"
}
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "aeeca409cc3e4e599499c26858365d51",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Output()"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"\n",
" \n",
" Network\n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
"\n"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sv_model = gymnasium_grid_to_stormvogel(env, GRID_ACTION_LABEL_MAP)\n",
"vis = show(sv_model, layout=Layout(\"layouts/cliffwalking.json\"))"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "366964a3",
"metadata": {
"execution": {
"iopub.execute_input": "2025-08-27T16:23:43.756124Z",
"iopub.status.busy": "2025-08-27T16:23:43.755895Z",
"iopub.status.idle": "2025-08-27T16:23:43.986555Z",
"shell.execute_reply": "2025-08-27T16:23:43.986054Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"
"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from stormvogel.stormpy_utils.model_checking import model_checking\n",
"res = model_checking(sv_model, f'Pmax=? [F \"target\"]')\n",
"gs = to_gymnasium_scheduler(sv_model, res.scheduler, GRID_ACTION_LABEL_MAP)\n",
"filename = gymnasium_render_model_gif(env, gs, filename=\"cliff\")\n",
"extensions.embed_gif(filename)"
]
},
{
"cell_type": "markdown",
"id": "6baca787",
"metadata": {},
"source": [
"## Taxi\n",
"In the Taxi scenario, a taxi has to pick up passengers and transport them to the hotel. The position of the target, passenger and taxi are chosen at random."
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "3c1da284",
"metadata": {
"execution": {
"iopub.execute_input": "2025-08-27T16:23:43.988394Z",
"iopub.status.busy": "2025-08-27T16:23:43.988225Z",
"iopub.status.idle": "2025-08-27T16:23:44.057145Z",
"shell.execute_reply": "2025-08-27T16:23:44.056646Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"'ModelType.MDP model with 505 states, 7 actions, and 1005 distinct labels.'"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import gymnasium as gym\n",
"from stormvogel.extensions.gym_grid import *\n",
"env = gym.make(\"Taxi-v3\", render_mode=\"rgb_array\") # Set `is_slippery=True` for stochastic behavior\n",
"sv_model = gymnasium_grid_to_stormvogel(env)\n",
"# This model is so big that it is better not to display it.\n",
"sv_model.summary()"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "c319270d",
"metadata": {
"execution": {
"iopub.execute_input": "2025-08-27T16:23:44.058812Z",
"iopub.status.busy": "2025-08-27T16:23:44.058618Z",
"iopub.status.idle": "2025-08-27T16:23:48.714517Z",
"shell.execute_reply": "2025-08-27T16:23:48.714073Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"
"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"target = get_target_state(env)\n",
"res = model_checking(sv_model, f'Rmax=? [S]')\n",
"gs = to_gymnasium_scheduler(sv_model, res.scheduler, GRID_ACTION_LABEL_MAP)\n",
"filename = gymnasium_render_model_gif(env, gs, filename=\"taxi\")\n",
"extensions.embed_gif(filename)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.13.3"
},
"widgets": {
"application/vnd.jupyter.widget-state+json": {
"state": {
"1f744b5a58be4c49b53b913b7c4f4564": {
"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
}
},
"37c46279f41c4c208d51aa2a291e57a8": {
"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
}
},
"435ac0cf73c7444da2d04af3b4968b39": {
"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_6d938ad18d7d49669afb6baa0f3226ee",
"msg_id": "",
"outputs": [],
"tabbable": null,
"tooltip": null
}
},
"4b9a4dc50aeb4308929e27e51f39fc38": {
"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_6dd63d36f8774948bde88a255edd15f0",
"msg_id": "",
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "5a975138058c4d8e98467393162f0e65",
"version_major": 2,
"version_minor": 0
},
"text/plain": "Output()"
},
"metadata": {},
"output_type": "display_data"
}
],
"tabbable": null,
"tooltip": null
}
},
"5594f08141684b95b8451cf677da41c4": {
"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_c17db8f44e7e42a3a2db1a2731eff614",
"msg_id": "",
"outputs": [],
"tabbable": null,
"tooltip": null
}
},
"5a975138058c4d8e98467393162f0e65": {
"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_7d35ed08c84f4eb5ae469d865ba5baf9",
"msg_id": "",
"outputs": [],
"tabbable": null,
"tooltip": null
}
},
"6d938ad18d7d49669afb6baa0f3226ee": {
"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
}
},
"6dd63d36f8774948bde88a255edd15f0": {
"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
}
},
"7a9775592a45450482ae62b1a570fa54": {
"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_a969d586f4b842ddb4051418c68af0a7",
"msg_id": "",
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "5a975138058c4d8e98467393162f0e65",
"version_major": 2,
"version_minor": 0
},
"text/plain": "Output()"
},
"metadata": {},
"output_type": "display_data"
}
],
"tabbable": null,
"tooltip": null
}
},
"7d35ed08c84f4eb5ae469d865ba5baf9": {
"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
}
},
"962a2dd6e7ce43f4ae5e13e083053778": {
"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_e75bfaac95f4415c8cc89ce7f57429f3",
"msg_id": "",
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "5a975138058c4d8e98467393162f0e65",
"version_major": 2,
"version_minor": 0
},
"text/plain": "Output()"
},
"metadata": {},
"output_type": "display_data"
}
],
"tabbable": null,
"tooltip": null
}
},
"a893da12bcb245868913472d89c20099": {
"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
}
},
"a969d586f4b842ddb4051418c68af0a7": {
"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
}
},
"aa727c4f42a042bfaf13fc80e576c892": {
"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_dc9a518801c448c1a790cdcb432c4355",
"msg_id": "",
"outputs": [],
"tabbable": null,
"tooltip": null
}
},
"ae18a8c2a70246bb96d93d8b44ddb676": {
"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_c421a3cc415b45e9821b08364239a17e",
"msg_id": "",
"outputs": [],
"tabbable": null,
"tooltip": null
}
},
"aeeca409cc3e4e599499c26858365d51": {
"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_baddbc721681428db69a128c7c13bc22",
"msg_id": "",
"outputs": [],
"tabbable": null,
"tooltip": null
}
},
"baddbc721681428db69a128c7c13bc22": {
"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
}
},
"bc1aae3f9d1a4592b7645931d02ab9dc": {
"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
}
},
"c099feeb97f442e68abac3e7e60c7f20": {
"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_1f744b5a58be4c49b53b913b7c4f4564",
"msg_id": "",
"outputs": [],
"tabbable": null,
"tooltip": null
}
},
"c17db8f44e7e42a3a2db1a2731eff614": {
"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
}
},
"c421a3cc415b45e9821b08364239a17e": {
"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
}
},
"da4e44a88a104dd9b8166b174e96a708": {
"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_37c46279f41c4c208d51aa2a291e57a8",
"msg_id": "",
"outputs": [],
"tabbable": null,
"tooltip": null
}
},
"dc0e7ab0e549403c8f2599a1047b4618": {
"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_a893da12bcb245868913472d89c20099",
"msg_id": "",
"outputs": [],
"tabbable": null,
"tooltip": null
}
},
"dc9a518801c448c1a790cdcb432c4355": {
"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
}
},
"e75bfaac95f4415c8cc89ce7f57429f3": {
"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
}
},
"f884e781720a4748ae5c5264a3f1c360": {
"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_bc1aae3f9d1a4592b7645931d02ab9dc",
"msg_id": "",
"outputs": [],
"tabbable": null,
"tooltip": null
}
}
},
"version_major": 2,
"version_minor": 0
}
}
},
"nbformat": 4,
"nbformat_minor": 5
}