{ "cells": [ { "cell_type": "markdown", "id": "917bc42e", "metadata": { "id": "917bc42e" }, "source": [ "# Exercise 7\n", "\n", "I recommend to run this notebook on google colab or on some other computer with access to a GPU. Otherwise, the fine-tuning will take very long and you cannot compare the runtime of GPU and CPU versions. " ] }, { "cell_type": "code", "execution_count": null, "id": "Ty0lDyP2-Zgd", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "Ty0lDyP2-Zgd", "outputId": "a630cdab-ffbd-4e8f-c0b2-d97981e858b1" }, "outputs": [], "source": [ "import os\n", "\n", "IS_ON_COLAB = bool(os.getenv(\"COLAB_RELEASE_TAG\"))\n", "\n", "if IS_ON_COLAB:\n", " !pip install transformers==4.28.0\n", " !pip install tokenizers datasets sentencepiece huggingface_hub[cli] accelerate" ] }, { "cell_type": "code", "execution_count": null, "id": "a6f52733", "metadata": { "id": "a6f52733" }, "outputs": [], "source": [ "from transformers import pipeline\n", "from datasets import load_dataset\n", "from transformers import logging\n", "import torch\n", "import pandas as pd\n", "import numpy as np\n", "from sklearn.metrics import classification_report\n", "from time import time\n", "from transformers import AutoTokenizer\n", "import scipy\n", "\n", "logging.set_verbosity_error()" ] }, { "cell_type": "markdown", "id": "38eaf079", "metadata": { "id": "38eaf079" }, "source": [ "## Task 1: Create a text classification pipeline\n", "\n", "The following task uses concepts from lecture 3 (working with pipeline). Revisit the lecture slides if you get stuck.\n", "\n", "1. create a classifier using the `pipeline` function from transformers and the model `\"jsoutherland/distilbert-base-uncased-finetuned-emotion\"`.\n", "2. Use the model to classify the validation-split of the emotion dataset\n", "3. Write down how long it took to do the classification" ] }, { "cell_type": "code", "execution_count": null, "id": "e362919f", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 86, "referenced_widgets": [ "896ba3abac3442f2a3c43c52716cf273", "f0649a1f515d445d877fa28c520b1687", "feba5b540b364ce9b9ae892cb86a4376", "9c488e2d554b44618c73a4b1ad519028", "a185587cb6db45e7847f4d2d8e39f21e", "0a0bdce364364cae8070100a7bcadbfa", "955b546f87e04563b153bbab940184a8", "d87df6103e7447439c35ad434ba7571c", "fe87d48995c54504ac5ef924f729422d", "80393afe494444dba8b487bcdd03b929", "87aedb97dc5742a5a4538827ca31a48d" ] }, "id": "e362919f", "outputId": "5aa7cce5-a0f8-4b38-dbed-b6a7f4937d0c" }, "outputs": [], "source": [ "emotions = load_dataset(\"dair-ai/emotion\", name=\"split\")" ] }, { "cell_type": "code", "execution_count": null, "id": "f3d88feb", "metadata": { "id": "f3d88feb" }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "6hqtwb5hRqPT", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 206 }, "id": "6hqtwb5hRqPT", "outputId": "877f36a3-fd1c-4714-dc71-fee633912b9e" }, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "ZzxJjLM-RutK", "metadata": { "id": "ZzxJjLM-RutK" }, "source": [] }, { "cell_type": "markdown", "id": "VpytAWF4S8gr", "metadata": { "id": "VpytAWF4S8gr" }, "source": [ "## Task 2: Calculate sklearn scores for huggingface models\n", "\n", "1. Translate the predictions into numerical values, using the following encoding: \"sadness\": 0, \"joy\": 1, \"love\": 2, \"anger\": 3, \"fear\": 4,\"surprise\": 5.\n", "2. Create a classification report by comparing the predictions against the true labels from the validation dataset. \n", "3. If you have time left, create a confusion matrix or other scores" ] }, { "cell_type": "code", "execution_count": null, "id": "06a9734d", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "06a9734d", "outputId": "e89f6ef2-ffda-48c9-b10c-fc090b23aaad" }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "eeea8e2d", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "eeea8e2d", "outputId": "edd25c2c-08b4-45a4-a2e2-b993f280a7a1" }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "d3234efb", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "d3234efb", "outputId": "a5482f0e-d8ea-4865-e0c1-e658f84b500a" }, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "3f1bbeac", "metadata": { "id": "3f1bbeac" }, "source": [ "## Task 3: Compare CPU and GPU speed\n", "\n", "0. Go to Edit -> Notebook Settings and select a GPU accelerator\n", "1. Create another random matrix of the same shape as a that lives on the gpu (if you have one)\n", "2. Measure the runtime of multiplying a with itself\n", "3. Measure the runtime of multiplying the gpu version with itself\n", "4. Calculate how much faster the GPU version was\n", "5. If you have time left, try different matrix sizes, especially tiny matrices\n", "\n", "**Note:** For me, using `%timeit` did not work for the GPU version on google colab. Use `time` instead. " ] }, { "cell_type": "code", "execution_count": null, "id": "xcRDwAFMGgsc", "metadata": { "id": "xcRDwAFMGgsc" }, "outputs": [], "source": [ "a = torch.randn(5_000, 5_000)" ] }, { "cell_type": "code", "execution_count": null, "id": "6476db69", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "6476db69", "outputId": "569007be-16f7-457a-aa42-8684a5ba668d" }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "8a7c66f5", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "GrLZqOWUGg2E", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "GrLZqOWUGg2E", "outputId": "a5772a3a-f7a7-45ec-c1c0-589ebdd691b6" }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "e-63RXGLGg8j", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "e-63RXGLGg8j", "outputId": "831c0d9f-5beb-4bbd-b50f-488b0143040f" }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "iTvUIXb2OOqY", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "iTvUIXb2OOqY", "outputId": "d106ba42-a71d-40c2-dfcf-22ef828df8cb" }, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "IN8vMOFcRVhQ", "metadata": { "id": "IN8vMOFcRVhQ" }, "source": [ "## Task 4: Pipeline with GPU\n", "\n", "1. Create a new pipeline with `device=\"cuda:0\"` and re-run the classification\n", "2. Compare the runtimes" ] }, { "cell_type": "code", "execution_count": null, "id": "at3hnkHWSnDT", "metadata": { "id": "at3hnkHWSnDT" }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "Rt_YTbrwS4wo", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 206 }, "id": "Rt_YTbrwS4wo", "outputId": "fcb96006-190d-45b8-ead9-15c142b59c0d" }, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "yuz4Vt4aTXcO", "metadata": { "id": "yuz4Vt4aTXcO" }, "source": [] }, { "cell_type": "markdown", "id": "8b96f0b8", "metadata": { "id": "8b96f0b8" }, "source": [ "## Task 5: Loading a model\n", "\n", "1. Load a distilbert-base-uncased model for sequence classification that can be fine-tuned on the emotions dataset. Put it on the gpu. " ] }, { "cell_type": "code", "execution_count": null, "id": "IRbRUoAQXet1", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 315, "referenced_widgets": [ "4ef852afe69544ffa210d3875aa27ad2", "e17d8c260f384501a63d60dfc9e3fa02", "8436a65bb7864111b56dd2710e2a4d63", "17c53c4e2d624b748449c86e197aaba6", "ff6d9bb890484ec09a5574d58a5cc7db", "aef0efc1e0134cd793e6e46e52c4112c", "36d6fc58262145db8fa600559774449e", "e010b6c538ed427b828f09cdc5747a59", "1b8f9bc99ab44197ab618eff7ca944dc", "9eb6d12bedf54b148e8fee390b2d39aa", "ec64b386030c4ed1bc7d0a847978fa96" ] }, "id": "IRbRUoAQXet1", "outputId": "7226dc97-c669-446e-90a9-d509baaa7c18" }, "outputs": [], "source": [ "model_name = \"distilbert-base-uncased\"\n", "\n", "tokenizer = AutoTokenizer.from_pretrained(model_name)\n", "\n", "\n", "def tokenize(batch):\n", " return tokenizer(batch[\"text\"], padding=True, truncation=True)\n", "\n", "\n", "emotions_encoded = emotions.map(tokenize, batched=True, batch_size=None)\n", "emotions_encoded.set_format(\n", " \"torch\",\n", " columns=[\"input_ids\", \"attention_mask\", \"label\"],\n", ")\n", "emotions_encoded.set_format(\"torch\")\n", "emotions_encoded" ] }, { "cell_type": "code", "execution_count": null, "id": "4b7374d0", "metadata": { "id": "4b7374d0" }, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "d39a54ae", "metadata": { "id": "d39a54ae" }, "source": [ "## Task 6: Specifying the training options and training the model\n", "\n", "1. Write a compute_metrics function or copy paste it from the slides\n", "2. Specify training arguments. Choose the same values as in the slides but only 1 epoch to make it faster.\n", "3. Create a Trainer instance\n", "4. Train the model" ] }, { "cell_type": "code", "execution_count": null, "id": "c3edcd52", "metadata": { "id": "c3edcd52" }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "AY9U4BW9Ys5d", "metadata": { "id": "AY9U4BW9Ys5d" }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "eg7xwqNWY386", "metadata": { "id": "eg7xwqNWY386" }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "6N0_DpVqY7oV", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 159 }, "id": "6N0_DpVqY7oV", "outputId": "ecb959d0-0793-4643-b232-0410ebc71a4d" }, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "f2462738", "metadata": { "id": "f2462738" }, "source": [ "## Task 7: Use the fine tuned model\n", "\n", "1. Tokenize the text and run it through the model to get logits\n", "2. Use scipy.special.softmax to create probabilities\n", "3. Plot the probabilities of each class (optional)" ] }, { "cell_type": "code", "execution_count": null, "id": "a365b5ec", "metadata": {}, "outputs": [], "source": [ "custom_text = \"I am glad the class is almost over.\"" ] }, { "cell_type": "code", "execution_count": null, "id": "e30d3446", "metadata": { "id": "e30d3446" }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "9g91Sc1pju8p", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "9g91Sc1pju8p", "outputId": "503398ca-8506-4870-b804-5bb6a15e6086" }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "XSaFU6SpsM9p", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "XSaFU6SpsM9p", "outputId": "67362191-74ab-4292-e3a7-52d06c829968" }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "0qYPgvdJoT9_", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 447 }, "id": "0qYPgvdJoT9_", "outputId": "5c9d256b-b61d-4f64-cf06-ba5f77e43a92" }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "q73cm73-ukNx", "metadata": { "id": "q73cm73-ukNx" }, "outputs": [], "source": [] } ], "metadata": { "accelerator": "GPU", "colab": { "gpuType": "T4", "provenance": [], "toc_visible": true }, "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.11.3" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "0a0bdce364364cae8070100a7bcadbfa": { "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 } }, "17c53c4e2d624b748449c86e197aaba6": { "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_9eb6d12bedf54b148e8fee390b2d39aa", "placeholder": "​", "style": "IPY_MODEL_ec64b386030c4ed1bc7d0a847978fa96", "value": " 2000/2000 [00:00<00:00, 4738.03 examples/s]" } }, "1b8f9bc99ab44197ab618eff7ca944dc": { "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": "" } }, "36d6fc58262145db8fa600559774449e": { "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": "" } }, "4ef852afe69544ffa210d3875aa27ad2": { "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_e17d8c260f384501a63d60dfc9e3fa02", "IPY_MODEL_8436a65bb7864111b56dd2710e2a4d63", "IPY_MODEL_17c53c4e2d624b748449c86e197aaba6" ], "layout": "IPY_MODEL_ff6d9bb890484ec09a5574d58a5cc7db" } }, "80393afe494444dba8b487bcdd03b929": { "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 } }, "8436a65bb7864111b56dd2710e2a4d63": { "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": "", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_e010b6c538ed427b828f09cdc5747a59", "max": 2000, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_1b8f9bc99ab44197ab618eff7ca944dc", "value": 2000 } }, "87aedb97dc5742a5a4538827ca31a48d": { "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": "" } }, "896ba3abac3442f2a3c43c52716cf273": { "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_f0649a1f515d445d877fa28c520b1687", "IPY_MODEL_feba5b540b364ce9b9ae892cb86a4376", "IPY_MODEL_9c488e2d554b44618c73a4b1ad519028" ], "layout": "IPY_MODEL_a185587cb6db45e7847f4d2d8e39f21e" } }, "955b546f87e04563b153bbab940184a8": { "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": "" } }, "9c488e2d554b44618c73a4b1ad519028": { "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_80393afe494444dba8b487bcdd03b929", "placeholder": "​", "style": "IPY_MODEL_87aedb97dc5742a5a4538827ca31a48d", "value": " 3/3 [00:00<00:00, 66.36it/s]" } }, "9eb6d12bedf54b148e8fee390b2d39aa": { "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 } }, "a185587cb6db45e7847f4d2d8e39f21e": { "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 } }, "aef0efc1e0134cd793e6e46e52c4112c": { "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 } }, "d87df6103e7447439c35ad434ba7571c": { "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 } }, "e010b6c538ed427b828f09cdc5747a59": { "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 } }, "e17d8c260f384501a63d60dfc9e3fa02": { "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_aef0efc1e0134cd793e6e46e52c4112c", "placeholder": "​", "style": "IPY_MODEL_36d6fc58262145db8fa600559774449e", "value": "Map: 100%" } }, "ec64b386030c4ed1bc7d0a847978fa96": { "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": "" } }, "f0649a1f515d445d877fa28c520b1687": { "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_0a0bdce364364cae8070100a7bcadbfa", "placeholder": "​", "style": "IPY_MODEL_955b546f87e04563b153bbab940184a8", "value": "100%" } }, "fe87d48995c54504ac5ef924f729422d": { "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": "" } }, "feba5b540b364ce9b9ae892cb86a4376": { "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": "success", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_d87df6103e7447439c35ad434ba7571c", "max": 3, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_fe87d48995c54504ac5ef924f729422d", "value": 3 } }, "ff6d9bb890484ec09a5574d58a5cc7db": { "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": "hidden", "width": null } } } } }, "nbformat": 4, "nbformat_minor": 5 }