{ "cells": [ { "cell_type": "code", "execution_count": 7, "id": "db6fabe6", "metadata": { "papermill": { "duration": null, "end_time": null, "exception": null, "start_time": null, "status": "completed" }, "tags": [ "remove_cell" ] }, "outputs": [ { "data": { "text/plain": "", "text/html": "" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "import warnings\n", "\n", "warnings.filterwarnings(\"ignore\")\n", "# setup disply parameters\n", "from matplotlib import pylab as plt\n", "import seaborn as sns\n", "from matplotlib.ticker import StrMethodFormatter\n", "\n", "float_formatter = StrMethodFormatter(\"{x:0.03f}\")\n", "from IPython.core.display import display, HTML\n", "\n", "display(HTML(\"\"))\n", "SMALL_SIZE = 14\n", "MEDIUM_SIZE = 16\n", "BIGGER_SIZE = 20\n", "\n", "plt.rc(\"font\", size=SMALL_SIZE) # controls default text sizes\n", "plt.rc(\"axes\", titlesize=SMALL_SIZE) # fontsize of the axes title\n", "plt.rc(\"axes\", labelsize=MEDIUM_SIZE) # fontsize of the x and y labels\n", "plt.rc(\"xtick\", labelsize=SMALL_SIZE) # fontsize of the tick labels\n", "plt.rc(\"ytick\", labelsize=SMALL_SIZE) # fontsize of the tick labels\n", "plt.rc(\"legend\", fontsize=SMALL_SIZE) # legend fontsize\n", "plt.rc(\"figure\", titlesize=BIGGER_SIZE) # fontsize of the figure title\n", "plt.rc(\"figure\", figsize=(18, 6)) # set figure size\n", "plt.rc(\"animation\", html=\"html5\")\n", "import random\n", "\n", "random.seed(203)\n", "import numpy as np\n", "\n", "np.random.seed(345)\n", "from rich import print" ] }, { "cell_type": "code", "execution_count": 8, "id": "moving-telephone", "metadata": { "papermill": { "duration": null, "end_time": null, "exception": null, "start_time": null, "status": "completed" }, "tags": [ "remove_cell" ] }, "outputs": [], "source": [ "from pathlib import Path" ] }, { "cell_type": "markdown", "id": "c5954837-fea7-45b9-ba16-7f404f51415b", "metadata": {}, "source": [ "*The corresponding code for the tutorials can be found in the [ANL2025 Drive](https://drive.google.com/drive/folders/1xc5qt7XlZQQv6q1NVnu2vP6Ou-YOQUms?usp=drive_link) or at the ANL2025 Github repository.*\n", "\n", "## Running a Multi-deal negotiation\n", "\n", "ANL 2025's challenge is to develop agents capable of negotiating sequentially a set of interrelated deals (multi-deal negotiation). You can create and run a multi-deal negotiation using special tools provided by the anl2025 package. If you haven't read the call for participation yet, do it first [here](https://drive.google.com/drive/folders/1xc5qt7XlZQQv6q1NVnu2vP6Ou-YOQUms?usp=drive_link).\n", "\n", "### An example multi-deal session: Target Quantity\n", "We provide a set of test scenarios that you can download from the [ANL 2025 Google Drive](https://drive.google.com/drive/folders/1xc5qt7XlZQQv6q1NVnu2vP6Ou-YOQUms?usp=drive_link).\n", "\n", "The following code shows how to load a scenario from a folder. The scenario is called target quantity scenario, where a buyer wants to acquire a total of 10 from 4 different sellers.\n", "\n", "```python\n", "from anl2025.scenario import MultidealScenario\n", "import pathlib\n", "\n", "path = pathlib.Path(\n", " \"../../official_test_scenarios/TargetQuantity_example\" # replace with the actual path.\n", ") # You can also use a absolute path to the scenario here.\n", "scenario = MultidealScenario.from_folder(path)\n", "```\n", "\n", "Some builtin scenarios are distributed with ANL2025. You can get a list of their names usine `get_example_scenario_names()`. You can load these using the following code snippet\n" ] }, { "cell_type": "code", "execution_count": 9, "id": "b86f2e2b-cac5-4f06-94be-b25b0432174b", "metadata": {}, "outputs": [], "source": [ "from anl2025 import load_example_scenario\n", "\n", "scenario = load_example_scenario(\"TargetQuantity\")" ] }, { "cell_type": "markdown", "id": "b86f2e2b-cac5-4f06-94be-1", "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "source": [ "For running a negotiation, we don't just need a scenario: we also need negotiators! Therefore, we add some standard negotiators such as a `Random` .agent, a `Boulware` and a `Linear` conceder. We add a *center* agent that negotiates with multiple opponents, and add the *edge agents*, the center agent's opponents.\n", "\n" ] }, { "cell_type": "code", "execution_count": 10, "id": "b86f2e2b-cac5-4f06-94be-2", "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [], "source": [ "from anl2025.negotiator import Boulware2025, Random2025, Linear2025\n", "\n", "centeragent = Boulware2025\n", "edgeagents = [\n", " Random2025,\n", " Random2025,\n", " Linear2025,\n", " Boulware2025,\n", "]" ] }, { "cell_type": "markdown", "id": "b86f2e2b-cac5-4f06-94be-b25b0432174b-4", "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "source": [ "Now the only thing we need to do to run a negotiation, is add this all together. The function `run_session` runs one sequential multi-deal negotiation. In ANL 2025, the center agent negotiates with the side agents sequentially. It completes a negotiation with one edge agent before starting the next negotiation with the next edge agent. At no time does the center agent have multiple negotiation threads running at the same time.\n", "\n", "Behind the scenes, a lot of things happen in this small function. There are many parameters that you can change yourself, such as the center agent, edge agents and maximum number of rounds (`nsteps`). The function `run_session` automatically outputs logs of each thread, specifying what bid happened at what round. Moreover, it outputs a graph of the utilities of the center agent and the edge agents. By default, you can find this folder here **...\\negmas\\anl2025\\session**.\n" ] }, { "cell_type": "code", "execution_count": 11, "id": "b86f2e2b-cac5-4f06-94be-b25b0432174b-5", "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [], "source": [ "from anl2025 import run_session\n", "\n", "results = run_session(\n", " scenario=scenario, center_type=centeragent, edge_types=edgeagents, nsteps=10\n", ")" ] }, { "cell_type": "markdown", "id": "98628c2d-1648-4b58-abcde", "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "source": [ "### Test the agent in a single session\n", "The function `run_session` returns a `SessionResults` object, which allows you to access the following values after the session is completed:\n", "\n", "1. `mechanisms` pointing to one [SAOMechanism](https://negmas.readthedocs.io/en/latest/api/negmas.sao.SAOMechanism.html#saomechanism) for each negotiation thread.\n", "2. `center_negotiator` pointing to a [ANL2025Negotiator](https://autoneg.github.io/anl2025/reference/#anl2025.negotiator.ANL2025Negotiator) for the center negotiator.\n", "3. `edge_negotiators` pointing to a list of [SAONegotiators](https://negmas.readthedocs.io/en/latest/api/negmas.sao.SAONegotiator.html#saonegotiator) for the edge negotiators.\n", "4. `center_utility` giving the utility value received by the center negotiator\n", "5. `edge_utility` giving the utility value received by each edge negotiator.You can also ask for specific types of output, by looking into `results`, e.g.:" ] }, { "cell_type": "code", "execution_count": 6, "id": "98628c2d-1648-tamm-b46c-76c0fc2b290b", "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/html": [ "
Center utility: 0.5\n",
       "
\n" ], "text/plain": [ "Center utility: \u001B[1;36m0.5\u001B[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
Edge Utilities: [0.25, 0.25, 0.5, 0.75]\n",
       "
\n" ], "text/plain": [ "Edge Utilities: \u001B[1m[\u001B[0m\u001B[1;36m0.25\u001B[0m, \u001B[1;36m0.25\u001B[0m, \u001B[1;36m0.5\u001B[0m, \u001B[1;36m0.75\u001B[0m\u001B[1m]\u001B[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
Agreement: [('5',), ('5',), ('2',), ('3',)]\n",
       "
\n" ], "text/plain": [ "Agreement: \u001B[1m[\u001B[0m\u001B[1m(\u001B[0m\u001B[32m'5'\u001B[0m,\u001B[1m)\u001B[0m, \u001B[1m(\u001B[0m\u001B[32m'5'\u001B[0m,\u001B[1m)\u001B[0m, \u001B[1m(\u001B[0m\u001B[32m'2'\u001B[0m,\u001B[1m)\u001B[0m, \u001B[1m(\u001B[0m\u001B[32m'3'\u001B[0m,\u001B[1m)\u001B[0m\u001B[1m]\u001B[0m\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "print(f\"Center utility: {results.center_utility}\")\n", "print(f\"Edge Utilities: {results.edge_utilities}\")\n", "print(f\"Agreement: {results.agreements}\")" ] }, { "cell_type": "markdown", "id": "tamm-1648-4b58-b46c-76c0fc2b290b", "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "source": [ "These output possibilities also apply to the function `run_generated_session`, which runs a randomly generated session with some control over the types of negotiators for the center and edges as well as the utility functions used.\n" ] }, { "cell_type": "markdown", "id": "7b8ed824-2", "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "source": [ "### Running a tournament\n", "If you want to test the performance of multiple agents, you want to run more than one session, just like this competition will do. In the function `anl2025_tournament`, one can run a tournament that has similar parameters as the final competition.\n", "\n", "We use a test scenario that we loaded before and a generated scenario. We log the final_scores, which is sum of the acquired utilities, and the weighted_average, which weighs the negotiations as center agent and as edge agent equally.\n", "\n" ] }, { "cell_type": "code", "execution_count": 7, "id": "7b8ed824-3", "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "f8af8253fb664217b084f8655b424dbf", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Output()" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "f6a2e268bb96416aaf9e431b2bba7632",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
{'Linear2025': 13.418470633502105, 'Random2025': 9.6111552791708, 'Boulware2025': 16.971885649951343}\n",
       "
\n" ], "text/plain": [ "\u001B[1m{\u001B[0m\u001B[32m'Linear2025'\u001B[0m: \u001B[1;36m13.418470633502105\u001B[0m, \u001B[32m'Random2025'\u001B[0m: \u001B[1;36m9.6111552791708\u001B[0m, \u001B[32m'Boulware2025'\u001B[0m: \u001B[1;36m16.971885649951343\u001B[0m\u001B[1m}\u001B[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
{'Linear2025': 0.6855899343714223, 'Random2025': 0.5164347909558907, 'Boulware2025': 1.0861602907401176}\n",
       "
\n" ], "text/plain": [ "\u001B[1m{\u001B[0m\u001B[32m'Linear2025'\u001B[0m: \u001B[1;36m0.6855899343714223\u001B[0m, \u001B[32m'Random2025'\u001B[0m: \u001B[1;36m0.5164347909558907\u001B[0m, \u001B[32m'Boulware2025'\u001B[0m: \u001B[1;36m1.0861602907401176\u001B[0m\u001B[1m}\u001B[0m\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from anl2025 import anl2025_tournament, make_multideal_scenario\n", "\n", "generated_scenario = make_multideal_scenario(nedges=3)\n", "scenario = load_example_scenario(\"Dinners\")\n", "results = anl2025_tournament(\n", " scenarios=[scenario, generated_scenario],\n", " n_jobs=-1,\n", " competitors=(Random2025, Boulware2025, Linear2025),\n", " verbose=False,\n", " # no_double_scores=False,\n", ")\n", "\n", "print(results.final_scores)\n", "print(results.weighted_average)" ] }, { "cell_type": "markdown", "id": "fced6e4e-560a-4720-867e-9e553719106c", "metadata": {}, "source": [ "### A dinners' scheduling session\n", "\n", "In the previous example, the center utility function was defined in terms of individual side utility functions (one per negotiation threads). A more general case is when the center utility function is defined directly in terms of the outcomes of negotiation threads without locally defined utility functions.\n", "\n", "The `anl2025` package allows you to create such scenarios using the `LambdaCenterUFun` class (See Reference). One class of these scenarios is the **Dinners** scenarios in which one person (center agent) is negotiating with her friends (edge agents) about the day to go out for dinner. Each friend has her own utility function for different days. The center agent has a utility for each combination of agreements (i.e. she may prefer to go out once every night except in Tuesdays," ] }, { "cell_type": "code", "execution_count": 8, "id": "eaf64a79-8403-4fb2-a2e4-a19cf1301cec", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'center': 0.0,\n", " 'edges': [0.5539177369974574,\n", " 0.46565694525214724,\n", " 0.2853091911355803,\n", " 0.24968181622168845,\n", " 0.48262211553620915]}" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from anl2025 import make_dinners_scenario\n", "\n", "results = run_session(make_dinners_scenario(n_friends=5))\n", "dict(center=results.center_utility, edges=results.edge_utilities)" ] }, { "cell_type": "code", "execution_count": null, "id": "72f73059-e8e3-4fd4-b6a4-0760288cf09c", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "celltoolbar": "Tags", "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.1" }, "latex_envs": { "LaTeX_envs_menu_present": true, "autoclose": false, "autocomplete": true, "bibliofile": "biblio.bib", "cite_by": "apalike", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 1, "hotkeys": { "equation": "Ctrl-E", "itemize": "Ctrl-I" }, "labels_anchors": false, "latex_user_defs": false, "report_style_numbering": false, "user_envs_cfg": false }, "papermill": { "default_parameters": {}, "duration": 540.812939, "end_time": "2022-02-16T09:26:02.642361", "environment_variables": {}, "exception": null, "input_path": "/Users/yasser/code/projects/anl/notebooks/tutorials/01.run_anl2020.ipynb", "output_path": "/Users/yasser/code/projects/anl/notebooks/tutorials/01.run_anl2020.ipynb", "parameters": {}, "start_time": "2022-02-16T09:17:01.829422", "version": "2.3.4" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": false }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": { "2cadc33b26404616ae0a695fd33d2ca8": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": 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, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "4368ae6360eb453aaf61f264839b0ddb": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": 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, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": "20px" } }, "485a093637284ec28170f816ecd1fa92": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "75d848742bcd4d8cb56a5457a57698c7": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": 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, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "83b5f1069c86434ba8abb01460027b86": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_2cadc33b26404616ae0a695fd33d2ca8", "placeholder": "​", "style": "IPY_MODEL_e9a077f7f68245d5b476e84fe61b2518", "value": "" } }, "ad16d5ccfae94a6bab53b1e4f0d3b2fd": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": 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, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "ae6ea78135ea49e79f65ded1eb5873f5": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "d8c3b6c0996640e8aa5ff137cf69e906": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_83b5f1069c86434ba8abb01460027b86", "IPY_MODEL_f0bfa51dd65f45e89d271167128606e3", "IPY_MODEL_f3955f11b376489287a5e30e241fcee1" ], "layout": "IPY_MODEL_75d848742bcd4d8cb56a5457a57698c7" } }, "e9a077f7f68245d5b476e84fe61b2518": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "f0bfa51dd65f45e89d271167128606e3": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "info", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_4368ae6360eb453aaf61f264839b0ddb", "max": 1, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_485a093637284ec28170f816ecd1fa92", "value": 0 } }, "f3955f11b376489287a5e30e241fcee1": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_ad16d5ccfae94a6bab53b1e4f0d3b2fd", "placeholder": "​", "style": "IPY_MODEL_ae6ea78135ea49e79f65ded1eb5873f5", "value": " 0/? [00:00<?, ?it/s]" } } }, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 5 }