{ "cells": [ { "cell_type": "markdown", "id": "4454f460", "metadata": {}, "source": [ "# Parametric and Interval Models\n", "In this notebook, we will show how to create and work with parametric and\n", "interval models.\n", "## Parametric Models\n", "\n", "Stormvogel represents parametric transition values as **sympy expressions**.\n", "Any polynomial or rational function over `sympy.Symbol` parameters is a valid\n", "transition value, which means you can write them using ordinary Python\n", "arithmetic." ] }, { "cell_type": "code", "execution_count": 1, "id": "765f814d", "metadata": { "execution": { "iopub.execute_input": "2026-07-01T08:29:48.890832Z", "iopub.status.busy": "2026-07-01T08:29:48.890621Z", "iopub.status.idle": "2026-07-01T08:29:49.127275Z", "shell.execute_reply": "2026-07-01T08:29:49.126559Z" } }, "outputs": [], "source": [ "import sympy as sp" ] }, { "cell_type": "markdown", "id": "433bc69e", "metadata": {}, "source": [ "For example, a polynomial in two variables:" ] }, { "cell_type": "code", "execution_count": 2, "id": "b9d9b0f1", "metadata": { "execution": { "iopub.execute_input": "2026-07-01T08:29:49.129688Z", "iopub.status.busy": "2026-07-01T08:29:49.129465Z", "iopub.status.idle": "2026-07-01T08:29:49.159881Z", "shell.execute_reply": "2026-07-01T08:29:49.159240Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "x**2 + y**2\n", "6*z**3 + z + 2\n", "(x**2 + y**2)/(6*z**3 + z + 2)\n" ] } ], "source": [ "x, y, z = sp.symbols(\"x y z\")\n", "\n", "polynomial1 = x**2 + y**2\n", "print(polynomial1)\n", "\n", "polynomial2 = 6 * z**3 + z + 2\n", "print(polynomial2)\n", "\n", "rational_function = polynomial1 / polynomial2\n", "print(rational_function)" ] }, { "cell_type": "markdown", "id": "da94b095", "metadata": {}, "source": [ "To create a parametric model (e.g. pMC or pMDP) we simply use these sympy\n", "expressions as transition probabilities. As an example, we build a\n", "parametric Knuth–Yao dice: a coin with success probability `x` is flipped\n", "repeatedly to simulate a six-sided die." ] }, { "cell_type": "code", "execution_count": 3, "id": "ad92adcb", "metadata": { "execution": { "iopub.execute_input": "2026-07-01T08:29:49.161858Z", "iopub.status.busy": "2026-07-01T08:29:49.161685Z", "iopub.status.idle": "2026-07-01T08:29:49.758020Z", "shell.execute_reply": "2026-07-01T08:29:49.757365Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_1255/1846297749.py:10: DeprecationWarning: bird.State is deprecated, use bird.BirdState instead.\n", " s: bird.State,\n", "/tmp/ipykernel_1255/1846297749.py:11: DeprecationWarning: bird.State is deprecated, use bird.BirdState instead.\n", " ) -> list[tuple[float | sp.Expr, bird.State]] | None:\n", "/tmp/ipykernel_1255/1846297749.py:37: DeprecationWarning: bird.State is deprecated, use bird.BirdState instead.\n", " def labels(s: bird.State):\n", "/tmp/ipykernel_1255/1846297749.py:44: DeprecationWarning: bird.State is deprecated, use bird.BirdState instead.\n", " init=bird.State(s=0),\n", "/tmp/ipykernel_1255/1846297749.py:14: DeprecationWarning: bird.State is deprecated, use bird.BirdState instead.\n", " return [(x, bird.State(s=1)), (1 - x, bird.State(s=2))]\n", "/tmp/ipykernel_1255/1846297749.py:16: DeprecationWarning: bird.State is deprecated, use bird.BirdState instead.\n", " return [(x, bird.State(s=3)), (1 - x, bird.State(s=4))]\n", "/tmp/ipykernel_1255/1846297749.py:18: DeprecationWarning: bird.State is deprecated, use bird.BirdState instead.\n", " return [(x, bird.State(s=5)), (1 - x, bird.State(s=6))]\n", "/tmp/ipykernel_1255/1846297749.py:20: DeprecationWarning: bird.State is deprecated, use bird.BirdState instead.\n", " return [(x, bird.State(s=1)), (1 - x, bird.State(s=7, d=1))]\n", "/tmp/ipykernel_1255/1846297749.py:23: DeprecationWarning: bird.State is deprecated, use bird.BirdState instead.\n", " (x, bird.State(s=7, d=2)),\n", "/tmp/ipykernel_1255/1846297749.py:24: DeprecationWarning: bird.State is deprecated, use bird.BirdState instead.\n", " (1 - x, bird.State(s=7, d=3)),\n", "/tmp/ipykernel_1255/1846297749.py:28: DeprecationWarning: bird.State is deprecated, use bird.BirdState instead.\n", " (x, bird.State(s=7, d=4)),\n", "/tmp/ipykernel_1255/1846297749.py:29: DeprecationWarning: bird.State is deprecated, use bird.BirdState instead.\n", " (1 - x, bird.State(s=7, d=5)),\n", "/tmp/ipykernel_1255/1846297749.py:32: DeprecationWarning: bird.State is deprecated, use bird.BirdState instead.\n", " return [(x, bird.State(s=2)), (1 - x, bird.State(s=7, d=6))]\n" ] }, { "data": { "text/html": [ "\n", "\n", "\n", " \n", " Network\n", " \n", " \n", " \n", " \n", " \n", "
\n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from stormvogel import model, bird\n", "from stormvogel.show import show\n", "\n", "# A single symbolic parameter for the coin bias.\n", "x = sp.Symbol(\"x\")\n", "\n", "\n", "# we build the Knuth–Yao dice using the bird model builder\n", "def delta(\n", " s: bird.State,\n", ") -> list[tuple[float | sp.Expr, bird.State]] | None:\n", " match s.s:\n", " case 0:\n", " return [(x, bird.State(s=1)), (1 - x, bird.State(s=2))]\n", " case 1:\n", " return [(x, bird.State(s=3)), (1 - x, bird.State(s=4))]\n", " case 2:\n", " return [(x, bird.State(s=5)), (1 - x, bird.State(s=6))]\n", " case 3:\n", " return [(x, bird.State(s=1)), (1 - x, bird.State(s=7, d=1))]\n", " case 4:\n", " return [\n", " (x, bird.State(s=7, d=2)),\n", " (1 - x, bird.State(s=7, d=3)),\n", " ]\n", " case 5:\n", " return [\n", " (x, bird.State(s=7, d=4)),\n", " (1 - x, bird.State(s=7, d=5)),\n", " ]\n", " case 6:\n", " return [(x, bird.State(s=2)), (1 - x, bird.State(s=7, d=6))]\n", " case 7:\n", " return [(1, s)]\n", "\n", "\n", "def labels(s: bird.State):\n", " if s.s == 7:\n", " return f\"rolled{str(s.d)}\"\n", "\n", "\n", "knuth_yao_pmc = bird.build_bird(\n", " delta=delta,\n", " init=bird.State(s=0),\n", " labels=labels,\n", " modeltype=model.ModelType.DTMC,\n", ")\n", "\n", "show(knuth_yao_pmc)" ] }, { "cell_type": "markdown", "id": "078bf74f", "metadata": {}, "source": [ "The symbol `x` was auto-declared on the model as soon as it appeared in a\n", "transition. You can inspect the parameters any time:" ] }, { "cell_type": "code", "execution_count": 4, "id": "869f7c2a", "metadata": { "execution": { "iopub.execute_input": "2026-07-01T08:29:49.766074Z", "iopub.status.busy": "2026-07-01T08:29:49.765689Z", "iopub.status.idle": "2026-07-01T08:29:49.769639Z", "shell.execute_reply": "2026-07-01T08:29:49.769119Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Parameters: ('x',)\n" ] } ], "source": [ "print(\"Parameters:\", knuth_yao_pmc.parameters)" ] }, { "cell_type": "markdown", "id": "67323b60", "metadata": {}, "source": [ "We can now evaluate the model by assigning the parameter `x` to any concrete\n", "value. This induces a regular DTMC with fixed probabilities." ] }, { "cell_type": "code", "execution_count": 5, "id": "316609d8", "metadata": { "execution": { "iopub.execute_input": "2026-07-01T08:29:49.771381Z", "iopub.status.busy": "2026-07-01T08:29:49.771210Z", "iopub.status.idle": "2026-07-01T08:29:49.802574Z", "shell.execute_reply": "2026-07-01T08:29:49.801923Z" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", " \n", " Network\n", " \n", " \n", " \n", " \n", " \n", "
\n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p = 1 / 2\n", "\n", "eval_knuth_yao_pmc = knuth_yao_pmc.get_instantiated_model({\"x\": p})\n", "show(eval_knuth_yao_pmc)" ] }, { "cell_type": "markdown", "id": "370ac4d5", "metadata": {}, "source": [ "## Interval Models\n", "We can also set an interval between two values x and y as transition value,\n", "meaning that we don't know the probability precisely, but we know it is\n", "between x and y. We represent intervals using `model.Interval`, where we\n", "have two attributes: `lower` and `upper`. Both of these should be an\n", "element of type `Number`, i.e., `int`, `float` or `Fraction`." ] }, { "cell_type": "code", "execution_count": 6, "id": "14bb49df", "metadata": { "execution": { "iopub.execute_input": "2026-07-01T08:29:49.810759Z", "iopub.status.busy": "2026-07-01T08:29:49.810526Z", "iopub.status.idle": "2026-07-01T08:29:49.814139Z", "shell.execute_reply": "2026-07-01T08:29:49.813639Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0.3333333333333333,0.6666666666666666]\n" ] } ], "source": [ "interval = model.Interval(1 / 3, 2 / 3)\n", "print(interval)" ] }, { "cell_type": "markdown", "id": "6c8cf991", "metadata": {}, "source": [ "Similar to parametric models, creating an interval model is as\n", "straightforward as just setting some interval objects as transition values." ] }, { "cell_type": "code", "execution_count": 7, "id": "e41debcb", "metadata": { "execution": { "iopub.execute_input": "2026-07-01T08:29:49.816047Z", "iopub.status.busy": "2026-07-01T08:29:49.815884Z", "iopub.status.idle": "2026-07-01T08:29:49.851400Z", "shell.execute_reply": "2026-07-01T08:29:49.850735Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_1255/1271625296.py:10: DeprecationWarning: bird.State is deprecated, use bird.BirdState instead.\n", " def delta(s: bird.State) -> list[tuple[float | model.Interval, bird.State]] | None:\n", "/tmp/ipykernel_1255/1271625296.py:36: DeprecationWarning: bird.State is deprecated, use bird.BirdState instead.\n", " def labels(s: bird.State):\n", "/tmp/ipykernel_1255/1271625296.py:43: DeprecationWarning: bird.State is deprecated, use bird.BirdState instead.\n", " init=bird.State(s=0),\n", "/tmp/ipykernel_1255/1271625296.py:13: DeprecationWarning: bird.State is deprecated, use bird.BirdState instead.\n", " return [(interval, bird.State(s=1)), (inv_interval, bird.State(s=2))]\n", "/tmp/ipykernel_1255/1271625296.py:15: DeprecationWarning: bird.State is deprecated, use bird.BirdState instead.\n", " return [(interval, bird.State(s=3)), (inv_interval, bird.State(s=4))]\n", "/tmp/ipykernel_1255/1271625296.py:17: DeprecationWarning: bird.State is deprecated, use bird.BirdState instead.\n", " return [(interval, bird.State(s=5)), (inv_interval, bird.State(s=6))]\n", "/tmp/ipykernel_1255/1271625296.py:19: DeprecationWarning: bird.State is deprecated, use bird.BirdState instead.\n", " return [(interval, bird.State(s=1)), (inv_interval, bird.State(s=7, d=1))]\n", "/tmp/ipykernel_1255/1271625296.py:22: DeprecationWarning: bird.State is deprecated, use bird.BirdState instead.\n", " (interval, bird.State(s=7, d=2)),\n", "/tmp/ipykernel_1255/1271625296.py:23: DeprecationWarning: bird.State is deprecated, use bird.BirdState instead.\n", " (inv_interval, bird.State(s=7, d=3)),\n", "/tmp/ipykernel_1255/1271625296.py:27: DeprecationWarning: bird.State is deprecated, use bird.BirdState instead.\n", " (interval, bird.State(s=7, d=4)),\n", "/tmp/ipykernel_1255/1271625296.py:28: DeprecationWarning: bird.State is deprecated, use bird.BirdState instead.\n", " (inv_interval, bird.State(s=7, d=5)),\n", "/tmp/ipykernel_1255/1271625296.py:31: DeprecationWarning: bird.State is deprecated, use bird.BirdState instead.\n", " return [(interval, bird.State(s=2)), (inv_interval, bird.State(s=7, d=6))]\n" ] }, { "data": { "text/html": [ "\n", "\n", "\n", " \n", " Network\n", " \n", " \n", " \n", " \n", " \n", "
\n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from stormvogel import bird\n", "from stormvogel.show import show\n", "\n", "# We create our interval values\n", "interval = model.Interval(2 / 7, 6 / 7)\n", "inv_interval = model.Interval(1 / 7, 5 / 7)\n", "\n", "\n", "# we build the knuth yao dice using the bird model builder\n", "def delta(s: bird.State) -> list[tuple[float | model.Interval, bird.State]] | None:\n", " match s.s:\n", " case 0:\n", " return [(interval, bird.State(s=1)), (inv_interval, bird.State(s=2))]\n", " case 1:\n", " return [(interval, bird.State(s=3)), (inv_interval, bird.State(s=4))]\n", " case 2:\n", " return [(interval, bird.State(s=5)), (inv_interval, bird.State(s=6))]\n", " case 3:\n", " return [(interval, bird.State(s=1)), (inv_interval, bird.State(s=7, d=1))]\n", " case 4:\n", " return [\n", " (interval, bird.State(s=7, d=2)),\n", " (inv_interval, bird.State(s=7, d=3)),\n", " ]\n", " case 5:\n", " return [\n", " (interval, bird.State(s=7, d=4)),\n", " (inv_interval, bird.State(s=7, d=5)),\n", " ]\n", " case 6:\n", " return [(interval, bird.State(s=2)), (inv_interval, bird.State(s=7, d=6))]\n", " case 7:\n", " return [(1, s)]\n", "\n", "\n", "def labels(s: bird.State):\n", " if s.s == 7:\n", " return f\"rolled{str(s.d)}\"\n", "\n", "\n", "knuth_yao_imc = bird.build_bird(\n", " delta=delta,\n", " init=bird.State(s=0),\n", " labels=labels,\n", " modeltype=model.ModelType.DTMC,\n", ")\n", "\n", "show(knuth_yao_imc)" ] }, { "cell_type": "code", "execution_count": null, "id": "f7a20df4", "metadata": {}, "outputs": [], "source": [] } ], "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.14" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": { "0401cf736c1d46118c4b0bce5e7f3d41": { "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 } }, "0527c010056b4d1c8bf399aad3039a49": { "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_fc3278e4c0664ac3b09b860df1ad305e", "msg_id": "", "outputs": [], "tabbable": null, "tooltip": null } }, "2abe57ebb8d94a1e9f934033fd7c04b3": { "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 } }, "38c35f59eb424bbc970317e0853ed67e": { "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_0401cf736c1d46118c4b0bce5e7f3d41", "msg_id": "", "outputs": [], "tabbable": null, "tooltip": null } }, "49f5885d35e84f2eb3d468a9d47f9534": { "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_a9c6b2496a2b402892f3898604f69336", "msg_id": "", "outputs": [], "tabbable": null, "tooltip": null } }, "5c1111cf3fba43cd9809ecb2bd149520": { "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 } }, "91c8e1de40da4ea7ac0337cec22ad788": { "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_5c1111cf3fba43cd9809ecb2bd149520", "msg_id": "", "outputs": [], "tabbable": null, "tooltip": null } }, "a9c6b2496a2b402892f3898604f69336": { "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 } }, "ac7ec3d5140948e48dc4b03f290b72e5": { "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_2abe57ebb8d94a1e9f934033fd7c04b3", "msg_id": "", "outputs": [], "tabbable": null, "tooltip": null } }, "d1bdeea238e54593a3f58951947270e1": { "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 } }, "ee9aa25f7c2c492595e55f4bacf66305": { "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_d1bdeea238e54593a3f58951947270e1", "msg_id": "", "outputs": [], "tabbable": null, "tooltip": null } }, "fc3278e4c0664ac3b09b860df1ad305e": { "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 }