{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Building load forecasting: Hospital in SF\n",
    "\n",
    "We can train a forecaster on another commom energy problem. In this, case we are training a 1-step ahead forecaster to predict the electricity consumption of a building.\n",
    "\n",
    "The dataset contains one year of hourly observations.\n",
    "The training will occur on 11 months of the data, reserving the last month for evaluation."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "Ywzhdfn2uqLf",
    "outputId": "95decf15-d410-45c9-b703-91fd68891e7f"
   },
   "outputs": [],
   "source": [
    "if 'google.colab' in str(get_ipython()):\n",
    "    !pip install git+https://github.com/ourownstory/neural_prophet.git # may take a while\n",
    "    #!pip install neuralprophet # much faster, but may not have the latest upgrades/bugfixes\n",
    "    \n",
    "import pandas as pd\n",
    "from neuralprophet import NeuralProphet, set_log_level\n",
    "# set_log_level(\"ERROR\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# data_location = \"https://raw.githubusercontent.com/ourownstory/neuralprophet-data/main/datasets/\"\n",
    "data_location = '../../../neuralprophet-data/datasets/'\n",
    "\n",
    "sf_load_df = pd.read_csv(data_location +  'energy/SF_hospital_load.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 140
    },
    "id": "TvrgKVWIuxFJ",
    "outputId": "99908203-2022-456a-9d05-73c3d0e6731e"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ds</th>\n",
       "      <th>y</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2015-01-01 01:00:00</td>\n",
       "      <td>778.007969</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2015-01-01 02:00:00</td>\n",
       "      <td>776.241750</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2015-01-01 03:00:00</td>\n",
       "      <td>779.357338</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                    ds           y\n",
       "0  2015-01-01 01:00:00  778.007969\n",
       "1  2015-01-01 02:00:00  776.241750\n",
       "2  2015-01-01 03:00:00  779.357338"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sf_load_df.head(3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Generic forecast: Time-based features only\n",
    "In this first section, we will train a model with time-features only like we would do with Facebook Prophet."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 148,
     "referenced_widgets": [
      "4ac0917121f8498698e087259b787dcf",
      "94108fe9090f47c7ba2216479e0d3fac",
      "2d8235496ec642af8192f52d9f2692b1",
      "c94a8ae41b994c55a96ad44806b0f1c7",
      "24bf564f55644476911a6cf004a395e7",
      "87c170d1e00742a29e7f797e98c49cc2",
      "8a192ccc35e94e9f8be85898ed583e2c",
      "9467345334da47a8beadc770feef952a",
      "dc468cd35d2b4f0e8eb287689ac15412",
      "f35fc9cbd82c4187a4cdc08c3ac26998",
      "aab682cd3df24821a80331720f7c24e5"
     ]
    },
    "id": "s7faUgnrvGFN",
    "outputId": "50da2450-767f-4e3b-f03d-d03226d24ff8"
   },
   "outputs": [
    {
     "data": {
      "image/png": "[encoded data, 44632 characters]\n",
      "text/plain": [
       "<Figure size 864x576 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Epoch[108/108]: 100%|█| 108/108 [00:35<00:00,  3.00it/s, SmoothL1Loss=0.0059, MAE=45.7, MSE=4.22e+3, RegLoss=0.000465, MAE_val=54.7, MSE_val=6.32e+3, Sm\n"
     ]
    }
   ],
   "source": [
    "m = NeuralProphet(\n",
    "    weekly_seasonality=6,\n",
    "    daily_seasonality=10,\n",
    "    trend_reg=1,\n",
    "    learning_rate=0.03,\n",
    ")\n",
    "df_train, df_test = m.split_df(sf_load_df, freq='H', valid_p = 1.0/12)\n",
    "\n",
    "metrics = m.fit(df_train, freq='H', validation_df=df_test, plot_live_loss=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 111
    },
    "id": "OnEPYrkscVtf",
    "outputId": "fe0218f4-0fbe-4d74-86f3-0e74195681a7"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>SmoothL1Loss</th>\n",
       "      <th>MAE</th>\n",
       "      <th>MSE</th>\n",
       "      <th>RegLoss</th>\n",
       "      <th>SmoothL1Loss_val</th>\n",
       "      <th>MAE_val</th>\n",
       "      <th>MSE_val</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>107</th>\n",
       "      <td>0.005904</td>\n",
       "      <td>45.715567</td>\n",
       "      <td>4222.154892</td>\n",
       "      <td>0.000465</td>\n",
       "      <td>0.008836</td>\n",
       "      <td>54.702106</td>\n",
       "      <td>6318.568359</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     SmoothL1Loss        MAE          MSE   RegLoss  SmoothL1Loss_val  \\\n",
       "107      0.005904  45.715567  4222.154892  0.000465          0.008836   \n",
       "\n",
       "       MAE_val      MSE_val  \n",
       "107  54.702106  6318.568359  "
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "metrics.tail(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "[encoded data, 189520 characters]\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "forecast = m.predict(df_train)\n",
    "fig = m.plot(forecast)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 440
    },
    "id": "5v-4bpNUvELW",
    "outputId": "089e3649-a238-4ec1-9593-32c2844d0ee4"
   },
   "outputs": [
    {
     "data": {
      "image/png": "[encoded data, 64080 characters]\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "forecast = m.predict(df_test)\n",
    "m = m.highlight_nth_step_ahead_of_each_forecast(1)\n",
    "fig = m.plot(forecast[-7*24:])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 1000
    },
    "id": "G0E4dLGxcbsO",
    "outputId": "9590ed3b-6e76-4fdd-d4bf-c310c04ac7ec"
   },
   "outputs": [
    {
     "data": {
      "image/png": "[encoded data, 88916 characters]\n",
      "text/plain": [
       "<Figure size 720x864 with 4 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig_param = m.plot_parameters()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "eG80MrTSeM0r"
   },
   "source": [
    "## 1-step ahead forecast with Auto-Regression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "5KIVKB_teK-n",
    "outputId": "c8dc6c51-2257-4f1f-f394-b5b941fb34c0"
   },
   "outputs": [
    {
     "data": {
      "image/png": "[encoded data, 29108 characters]\n",
      "text/plain": [
       "<Figure size 864x576 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Epoch[108/108]: 100%|█| 108/108 [00:23<00:00,  4.50it/s, SmoothL1Loss=0.00157, MAE=22.1, MSE=1.12e+3, RegLoss=0.00105, MAE_val=22.5, MSE_val=1.15e+3, Sm\n"
     ]
    }
   ],
   "source": [
    "m = NeuralProphet(\n",
    "    growth='off',\n",
    "    yearly_seasonality=False,\n",
    "    weekly_seasonality=False,\n",
    "    daily_seasonality=False,\n",
    "    n_lags=3*24,\n",
    "    ar_sparsity=0.95,\n",
    "    learning_rate = 0.003,\n",
    ")\n",
    "df_train, df_test = m.split_df(sf_load_df, freq='H', valid_p = 1.0/12)\n",
    "\n",
    "metrics = m.fit(df_train, freq='H', validation_df=df_test, plot_live_loss=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 111
    },
    "id": "OnEPYrkscVtf",
    "outputId": "fe0218f4-0fbe-4d74-86f3-0e74195681a7"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>SmoothL1Loss</th>\n",
       "      <th>MAE</th>\n",
       "      <th>MSE</th>\n",
       "      <th>RegLoss</th>\n",
       "      <th>SmoothL1Loss_val</th>\n",
       "      <th>MAE_val</th>\n",
       "      <th>MSE_val</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>107</th>\n",
       "      <td>0.001572</td>\n",
       "      <td>22.054379</td>\n",
       "      <td>1124.66244</td>\n",
       "      <td>0.001046</td>\n",
       "      <td>0.001601</td>\n",
       "      <td>22.483446</td>\n",
       "      <td>1145.440063</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     SmoothL1Loss        MAE         MSE   RegLoss  SmoothL1Loss_val  \\\n",
       "107      0.001572  22.054379  1124.66244  0.001046          0.001601   \n",
       "\n",
       "       MAE_val      MSE_val  \n",
       "107  22.483446  1145.440063  "
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "metrics.tail(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "[encoded data, 188340 characters]\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "forecast = m.predict(df_train)\n",
    "fig = m.plot(forecast)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 440
    },
    "id": "5v-4bpNUvELW",
    "outputId": "089e3649-a238-4ec1-9593-32c2844d0ee4"
   },
   "outputs": [
    {
     "data": {
      "image/png": "[encoded data, 65444 characters]\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "forecast = m.predict(df_test)\n",
    "m = m.highlight_nth_step_ahead_of_each_forecast(1)\n",
    "fig = m.plot(forecast[-7*24:])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "[encoded data, 21368 characters]\n",
      "text/plain": [
       "<Figure size 720x432 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig_param = m.plot_parameters()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1 step ahead forecast with AR-Net: Using a Neural Network\n",
    "Here, we will use the power of a neural Network to fit non-linear patterns."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "-aqM32pCfjEG",
    "outputId": "86bc014e-1e90-48e0-ac25-c9597a0fbcfe"
   },
   "outputs": [
    {
     "data": {
      "image/png": "[encoded data, 34772 characters]\n",
      "text/plain": [
       "<Figure size 864x576 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Epoch[108/108]: 100%|█| 108/108 [00:36<00:00,  2.99it/s, SmoothL1Loss=0.000175, MAE=7.68, MSE=125, RegLoss=0, MAE_val=8.15, MSE_val=140, SmoothL1Loss_va\n"
     ]
    }
   ],
   "source": [
    "m = NeuralProphet(\n",
    "    growth='off',\n",
    "    yearly_seasonality=False,\n",
    "    weekly_seasonality=False,\n",
    "    daily_seasonality=False,\n",
    "    n_lags=3*24,\n",
    "    num_hidden_layers=4,\n",
    "    d_hidden=16,\n",
    "    learning_rate=0.003,\n",
    ")\n",
    "df_train, df_test = m.split_df(sf_load_df, freq='H', valid_p = 1.0/12)\n",
    "\n",
    "metrics = m.fit(df_train, freq='H', validation_df=df_test, plot_live_loss=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 111
    },
    "id": "OnEPYrkscVtf",
    "outputId": "fe0218f4-0fbe-4d74-86f3-0e74195681a7"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>SmoothL1Loss</th>\n",
       "      <th>MAE</th>\n",
       "      <th>MSE</th>\n",
       "      <th>RegLoss</th>\n",
       "      <th>SmoothL1Loss_val</th>\n",
       "      <th>MAE_val</th>\n",
       "      <th>MSE_val</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>107</th>\n",
       "      <td>0.000175</td>\n",
       "      <td>7.675793</td>\n",
       "      <td>125.486209</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000195</td>\n",
       "      <td>8.152453</td>\n",
       "      <td>139.636078</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     SmoothL1Loss       MAE         MSE  RegLoss  SmoothL1Loss_val   MAE_val  \\\n",
       "107      0.000175  7.675793  125.486209      0.0          0.000195  8.152453   \n",
       "\n",
       "        MSE_val  \n",
       "107  139.636078  "
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "metrics.tail(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "[encoded data, 189376 characters]\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "forecast = m.predict(df_train)\n",
    "fig = m.plot(forecast)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 440
    },
    "id": "5v-4bpNUvELW",
    "outputId": "089e3649-a238-4ec1-9593-32c2844d0ee4"
   },
   "outputs": [
    {
     "data": {
      "image/png": "[encoded data, 61292 characters]\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "forecast = m.predict(df_test)\n",
    "m = m.highlight_nth_step_ahead_of_each_forecast(1)\n",
    "fig = m.plot(forecast[-7*24:])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "[encoded data, 50368 characters]\n",
      "text/plain": [
       "<Figure size 720x432 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig_comp = m.plot_components(forecast[-7*24:])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "xp1y3gaBhCdo"
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "colab": {
   "collapsed_sections": [],
   "name": "energy_data_example.ipynb",
   "provenance": []
  },
  "kernelspec": {
   "display_name": "np-dev",
   "language": "python",
   "name": "np-dev"
  },
  "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.9.5"
  },
  "widgets": {
   "application/vnd.jupyter.widget-state+json": {
    "24bf564f55644476911a6cf004a395e7": {
     "model_module": "@jupyter-widgets/controls",
     "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_aab682cd3df24821a80331720f7c24e5",
      "placeholder": "​",
      "style": "IPY_MODEL_f35fc9cbd82c4187a4cdc08c3ac26998",
      "value": " 264/297 [00:04&lt;00:00, 59.93it/s]"
     }
    },
    "2d8235496ec642af8192f52d9f2692b1": {
     "model_module": "@jupyter-widgets/controls",
     "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_8a192ccc35e94e9f8be85898ed583e2c",
      "placeholder": "​",
      "style": "IPY_MODEL_87c170d1e00742a29e7f797e98c49cc2",
      "value": " 89%"
     }
    },
    "4ac0917121f8498698e087259b787dcf": {
     "model_module": "@jupyter-widgets/controls",
     "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_2d8235496ec642af8192f52d9f2692b1",
       "IPY_MODEL_c94a8ae41b994c55a96ad44806b0f1c7",
       "IPY_MODEL_24bf564f55644476911a6cf004a395e7"
      ],
      "layout": "IPY_MODEL_94108fe9090f47c7ba2216479e0d3fac"
     }
    },
    "87c170d1e00742a29e7f797e98c49cc2": {
     "model_module": "@jupyter-widgets/controls",
     "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": ""
     }
    },
    "8a192ccc35e94e9f8be85898ed583e2c": {
     "model_module": "@jupyter-widgets/base",
     "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
     }
    },
    "94108fe9090f47c7ba2216479e0d3fac": {
     "model_module": "@jupyter-widgets/base",
     "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
     }
    },
    "9467345334da47a8beadc770feef952a": {
     "model_module": "@jupyter-widgets/controls",
     "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": ""
     }
    },
    "aab682cd3df24821a80331720f7c24e5": {
     "model_module": "@jupyter-widgets/base",
     "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
     }
    },
    "c94a8ae41b994c55a96ad44806b0f1c7": {
     "model_module": "@jupyter-widgets/controls",
     "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": "danger",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_dc468cd35d2b4f0e8eb287689ac15412",
      "max": 297,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_9467345334da47a8beadc770feef952a",
      "value": 264
     }
    },
    "dc468cd35d2b4f0e8eb287689ac15412": {
     "model_module": "@jupyter-widgets/base",
     "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
     }
    },
    "f35fc9cbd82c4187a4cdc08c3ac26998": {
     "model_module": "@jupyter-widgets/controls",
     "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": ""
     }
    }
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
