From 1d2746f25b8d61d1ac560176e06e8658e4070ad2 Mon Sep 17 00:00:00 2001 From: PvtKaefsky Date: Mon, 27 Jan 2025 17:10:45 +0300 Subject: [PATCH] update notebook example of economic data forecasting --- ...al_reserve_economic_data_forecasting.ipynb | 3620 ++++++++--------- 1 file changed, 1606 insertions(+), 2014 deletions(-) diff --git a/examples/real_world_examples/industrial_examples/economic_analysis/ts_forecasting/federal_reserve_economic_data_forecasting.ipynb b/examples/real_world_examples/industrial_examples/economic_analysis/ts_forecasting/federal_reserve_economic_data_forecasting.ipynb index 5e249e462..7369d0835 100644 --- a/examples/real_world_examples/industrial_examples/economic_analysis/ts_forecasting/federal_reserve_economic_data_forecasting.ipynb +++ b/examples/real_world_examples/industrial_examples/economic_analysis/ts_forecasting/federal_reserve_economic_data_forecasting.ipynb @@ -2,2032 +2,1613 @@ "cells": [ { "cell_type": "markdown", - "source": [ - "## Predict historical prices of Brent Oil, Crude Oil WTI, Natural Gas, Heating Oil from 2000-2022 with Fedot.Industrial" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - } - }, - { - "cell_type": "markdown", - "source": [ - "Dataset published on Kaggle3 consists of historical prices of Brent Oil, CrudeOil WTI, Natural Gas, and Heating Oil from 2000 to 2022. This sample of DailyOilGasPrices was created by using 30 consecutive business days of **Crude Oil WTI close prices** and **traded volumes** as **predictors** and the **average natural gas close** price during each 30-day time frame as the **target** variable. The final dataset has 191 2-dimensional time series of length 30, of which 70% were randomly sampled as training data and the remaining 30% as testing data. This type of model could help companies and governments to better analyse and predict economic situations and correlations regarding oil and natural gas.\n", - "Link to the dataset - https://www.kaggl.com/datasets/prasertk/historical-daily-oil-and-natural-gas-prices" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - } - }, - { - "cell_type": "code", - "execution_count": 1, - "outputs": [], - "source": [ - "import pandas as pd\n", - "from fedot_ind.api.main import FedotIndustrial" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": 2, - "outputs": [], - "source": [ - "def evaluate_loop(train_data, api_params, finetune: bool = False):\n", - " industrial = FedotIndustrial(**api_params)\n", - " if finetune:\n", - " industrial.finetune(train_data)\n", - " else:\n", - " industrial.fit(train_data)\n", - " return industrial" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": 3, - "outputs": [], - "source": [ - "from fedot_ind.api.utils.path_lib import PROJECT_PATH\n", - "\n", - "dataset_name = PROJECT_PATH +'/examples/data/forecasting\\monash_benchmark\\MonashFredMd_12.csv'\n", - "horizon = 12\n", - "metric_names = ('smape', 'rmse', 'median_absolute_error')\n", - "train_data = pd.read_csv(dataset_name)\n", - "params = dict(problem='ts_forecasting',\n", - " metric='rmse',\n", - " timeout=15,\n", - " pop_size = 10,\n", - " with_tuning = False,\n", - " task_params={'forecast_length': horizon},\n", - " industrial_strategy='forecasting_assumptions',\n", - " n_jobs=2,\n", - " logging_level=50)" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": 4, - "outputs": [ - { - "data": { - "text/plain": " datetime value label\n0 1959-01-01 2437.295898 T1\n1 1959-02-01 2446.902100 T1\n2 1959-03-01 2462.688965 T1\n3 1959-04-01 2478.743896 T1\n4 1959-05-01 2493.228027 T1\n... ... ... ...\n77891 2019-04-01 3608.839111 T107\n77892 2019-05-01 3622.253174 T107\n77893 2019-06-01 3651.351318 T107\n77894 2019-07-01 3673.951416 T107\n77895 2019-08-01 3725.410400 T107\n\n[77896 rows x 3 columns]", - "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
datetimevaluelabel
01959-01-012437.295898T1
11959-02-012446.902100T1
21959-03-012462.688965T1
31959-04-012478.743896T1
41959-05-012493.228027T1
............
778912019-04-013608.839111T107
778922019-05-013622.253174T107
778932019-06-013651.351318T107
778942019-07-013673.951416T107
778952019-08-013725.410400T107
\n

77896 rows × 3 columns

\n
" - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "train_data" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "markdown", - "source": [ - "Now we must download the dataset. It could be done by using `DataReader` class that implemented as attribute of `FedotIndustrial` class. This class firstly tries to read the data from local project folder `data_path` and then if it is not possible, it downloads the data from the UCR/UEA archive. The data will be saved in the `data` folder." - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - } - }, - { - "cell_type": "code", - "execution_count": 5, - "outputs": [], - "source": [ - "id_list = train_data['label'].unique().tolist()\n", - "data_split = {id:train_data[train_data['label']==id]['value'].values for id in id_list}" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "markdown", - "source": [ - "Lets check our data." - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - } - }, - { - "cell_type": "markdown", - "source": [ - "Lets visualise our predictors." - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "from matplotlib import pyplot as plt\n", - "pd.DataFrame(train_data).plot(title='Example of FRED time series')\n", - "plt.show()" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "markdown", - "source": [ - "Next steps are quite straightforward. We need to fit the model and then predict the values for the test data just like for any other model in sklearn.\n", - "\n", - "At the `fit` stage FedotIndustrial will transform initial time series data into features dataframe and will train regression model." - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "industrial_model = evaluate_loop(train_data = input_data, api_params=params, finetune=True)" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "labels = industrial_model.predict(train_data)\n", - "metrics = industrial_model.get_metrics(target=target,\n", - " metric_names=metric_names)" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "metrics" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "markdown", - "source": [ - "## AutoML approach" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - } - }, - { - "cell_type": "code", - "execution_count": 8, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Creating Dask Server\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Generations: 0%| | 11/10000 [04:41<71:07:00, 25.63s/gen]\n", - "Generations: 0%| | 5/10000 [04:55<164:02:45, 59.09s/gen]\n", - "Generations: 0%| | 10/10000 [04:44<78:53:15, 28.43s/gen]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Creating Dask Server\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Generations: 0%| | 11/10000 [04:42<71:08:22, 25.64s/gen]\n", - "Generations: 0%| | 5/10000 [08:55<297:23:38, 107.12s/gen]\n", - "Generations: 0%| | 11/10000 [04:52<73:47:17, 26.59s/gen]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Creating Dask Server\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Generations: 0%| | 11/10000 [05:11<78:30:50, 28.30s/gen]\n", - "Generations: 0%| | 4/10000 [10:02<418:25:21, 150.69s/gen]\n", - "Generations: 0%| | 10/10000 [04:39<77:39:27, 27.98s/gen]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Creating Dask Server\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Generations: 0%| | 9/10000 [04:41<86:46:34, 31.27s/gen]\n", - "Generations: 0%| | 4/10000 [05:02<210:15:10, 75.72s/gen]\n", - "Generations: 0%| | 5/10000 [04:34<152:32:31, 54.94s/gen]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Creating Dask Server\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Generations: 0%| | 10/10000 [05:00<83:26:03, 30.07s/gen]\n", - "Generations: 0%| | 4/10000 [04:58<206:55:05, 74.52s/gen]\n", - "Generations: 0%| | 20/10000 [05:14<43:39:40, 15.75s/gen]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Creating Dask Server\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Generations: 0%| | 11/10000 [05:35<84:37:10, 30.50s/gen] \n", - "Generations: 0%| | 4/10000 [04:42<196:26:43, 70.75s/gen]\n", - "Generations: 0%| | 14/10000 [04:41<55:47:50, 20.12s/gen]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Creating Dask Server\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Generations: 0%| | 12/10000 [04:53<67:51:11, 24.46s/gen]\n", - "Generations: 0%| | 4/10000 [04:59<207:42:55, 74.81s/gen]\n", - "Generations: 0%| | 18/10000 [04:50<44:43:07, 16.13s/gen]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Creating Dask Server\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Generations: 0%| | 9/10000 [04:40<86:28:21, 31.16s/gen] \n", - "Generations: 0%| | 3/10000 [04:20<241:15:13, 86.88s/gen]\n", - "Generations: 0%| | 18/10000 [04:49<44:38:28, 16.10s/gen]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Creating Dask Server\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Generations: 0%| | 9/10000 [04:48<88:55:04, 32.04s/gen] \n", - "Generations: 0%| | 3/10000 [06:14<346:21:15, 124.72s/gen]\n", - "Generations: 0%| | 3/10000 [05:33<308:25:57, 111.07s/gen]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Creating Dask Server\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Generations: 0%| | 10/10000 [04:52<81:12:36, 29.26s/gen] \n", - "Generations: 0%| | 4/10000 [05:00<208:38:41, 75.14s/gen]\n", - "Generations: 0%| | 5/10000 [04:29<149:25:12, 53.82s/gen]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Creating Dask Server\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Generations: 0%| | 10/10000 [04:51<80:46:51, 29.11s/gen] \n", - "Generations: 0%| | 4/10000 [08:34<357:23:38, 128.71s/gen]\n", - "Generations: 0%| | 4/10000 [04:50<201:45:30, 72.66s/gen]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Creating Dask Server\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Generations: 0%| | 8/10000 [04:52<101:30:52, 36.57s/gen]\n", - "Generations: 0%| | 3/10000 [04:05<227:36:39, 81.96s/gen]\n", - "Generations: 0%| | 12/10000 [04:47<66:23:41, 23.93s/gen]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Creating Dask Server\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Generations: 0%| | 10/10000 [04:55<82:05:14, 29.58s/gen] \n", - "Generations: 0%| | 2/10000 [04:50<404:02:47, 145.49s/gen]\n", - "Generations: 0%| | 4/10000 [04:26<184:58:03, 66.61s/gen]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Creating Dask Server\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Generations: 0%| | 8/10000 [04:57<103:14:39, 37.20s/gen]\n", - "Generations: 0%| | 3/10000 [04:40<259:17:53, 93.38s/gen]\n", - "Generations: 0%| | 2/10000 [06:46<564:34:08, 203.29s/gen]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Creating Dask Server\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Generations: 0%| | 7/10000 [04:42<111:54:29, 40.32s/gen]\n", - "Generations: 0%| | 3/10000 [04:54<272:49:03, 98.24s/gen] \n", - "Generations: 0%| | 4/10000 [05:09<214:42:12, 77.32s/gen]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Creating Dask Server\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Generations: 0%| | 7/10000 [04:48<114:16:13, 41.17s/gen]\n", - "Generations: 0%| | 2/10000 [03:51<322:09:03, 116.00s/gen]\n", - "Generations: 0%| | 5/10000 [04:30<150:02:41, 54.04s/gen] \n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Creating Dask Server\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Generations: 0%| | 9/10000 [04:55<91:02:50, 32.81s/gen] \n", - "Generations: 0%| | 2/10000 [04:13<351:27:23, 126.55s/gen]\n", - "Generations: 0%| | 3/10000 [08:22<465:29:36, 167.63s/gen]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Creating Dask Server\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Generations: 0%| | 5/10000 [05:32<184:37:54, 66.50s/gen]\n", - "Generations: 0%| | 2/10000 [04:55<410:52:11, 147.94s/gen]\n", - "Generations: 0%| | 5/10000 [05:00<166:55:22, 60.12s/gen]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Creating Dask Server\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Generations: 0%| | 4/10000 [05:11<216:25:39, 77.95s/gen]\n", - "Generations: 0%| | 2/10000 [03:49<319:04:24, 114.89s/gen]\n", - "Generations: 0%| | 4/10000 [04:23<182:34:53, 65.76s/gen] \n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Creating Dask Server\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Generations: 0%| | 5/10000 [04:28<149:13:30, 53.75s/gen]\n", - "Generations: 0%| | 2/10000 [04:24<367:08:36, 132.20s/gen]\n", - "Generations: 0%| | 4/10000 [04:33<189:51:16, 68.37s/gen] \n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Creating Dask Server\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Generations: 0%| | 6/10000 [06:57<193:19:32, 69.64s/gen]\n", - "Generations: 0%| | 2/10000 [05:29<457:02:20, 164.57s/gen]\n", - "Generations: 0%| | 3/10000 [04:16<237:01:23, 85.35s/gen] \n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Creating Dask Server\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Generations: 0%| | 6/10000 [07:56<220:30:45, 79.43s/gen] \n", - "Generations: 0%| | 2/10000 [04:41<391:12:17, 140.86s/gen]\n", - "Generations: 0%| | 2/10000 [06:24<534:20:15, 192.40s/gen]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Creating Dask Server\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Generations: 0%| | 5/10000 [04:45<158:31:04, 57.09s/gen]\n", - "Generations: 0%| | 1/10000 [04:00<668:49:03, 240.80s/gen]\n", - "Generations: 0%| | 0/10000 [02:37\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
datetimelabelvalue
01959-01-01T12437.295898
11959-02-01T12446.902100
21959-03-01T12462.688965
31959-04-01T12478.743896
41959-05-01T12493.228027
............
778912019-04-01T1073608.839111
778922019-05-01T1073622.253174
778932019-06-01T1073651.351318
778942019-07-01T1073673.951416
778952019-08-01T1073725.410400
\n", + "

77896 rows × 3 columns

\n", + "" + ], + "text/plain": [ + " datetime label value\n", + "0 1959-01-01 T1 2437.295898\n", + "1 1959-02-01 T1 2446.902100\n", + "2 1959-03-01 T1 2462.688965\n", + "3 1959-04-01 T1 2478.743896\n", + "4 1959-05-01 T1 2493.228027\n", + "... ... ... ...\n", + "77891 2019-04-01 T107 3608.839111\n", + "77892 2019-05-01 T107 3622.253174\n", + "77893 2019-06-01 T107 3651.351318\n", + "77894 2019-07-01 T107 3673.951416\n", + "77895 2019-08-01 T107 3725.410400\n", + "\n", + "[77896 rows x 3 columns]" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from examples.example_utils import load_monash_dataset\n", + "import pandas as pd\n", + "\n", + "def fred_preprocessing(fred_df: pd.DataFrame) -> pd.DataFrame:\n", + " fred_df.index = pd.date_range(start='1959-01-01', periods=len(fred_df['T1']), freq='MS')\n", + " fred_df = fred_df.reset_index().melt(id_vars='index', var_name='label', value_name='value')\n", + " fred_df.rename(columns={'index': 'datetime'}, inplace=True)\n", + " fred_df['label_num'] = fred_df['label'].str.extract('(\\d+)').astype(int)\n", + " fred_df = fred_df.sort_values(by=['label_num', 'datetime']).reset_index(drop=True)\n", + " return fred_df.drop('label_num', axis=1)\n", + "\n", + "economic_df = fred_preprocessing(load_monash_dataset('fred_md'))\n", + "economic_df" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "id_list = economic_df['label'].unique().tolist()\n", + "data_split = {id:economic_df[economic_df['label']==id]['value'].values for id in id_list}" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "# from matplotlib import pyplot as plt\n", + "# for column in economic_df.columns:\n", + "# pd.DataFrame(economic_df[column]).plot(title=f'FRED-MD - {column}')\n", + "# plt.tight_layout()\n", + "# plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### API-based approach using AutoML" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Creating Dask Server\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Generations: 0%| | 1/10000 [03:41<616:17:44, 221.89s/gen]\n", - "Generations: 0%| | 0/10000 [03:15\n", + "2025-01-24 14:53:11,907 - Starting worker compute stream, inproc://192.168.232.141/16892/4\n", + "2025-01-24 14:53:11,908 - Starting established connection to inproc://192.168.232.141/16892/5\n", + "2025-01-24 14:53:11,909 - Starting Worker plugin shuffle\n", + "2025-01-24 14:53:11,912 - Registered to: inproc://192.168.232.141/16892/1\n", + "2025-01-24 14:53:11,913 - -------------------------------------------------\n", + "2025-01-24 14:53:11,915 - Starting established connection to inproc://192.168.232.141/16892/1\n", + "2025-01-24 14:53:11,922 - Receive client connection: Client-c975b560-da49-11ef-81fc-00090faa0001\n", + "2025-01-24 14:53:11,924 - Starting established connection to inproc://192.168.232.141/16892/6\n", + "ApiComposer - Initial pipeline was fitted in 0.9 sec.\n", + "AssumptionsHandler - Preset was changed to best_quality due to fit time estimation for initial model.\n", + " 10000\n", + " 0:10:00\n", + " 10\n", + " 10\n", + " 1\n", + " None\n", + " 1\n", + " True\n", + " False\n", + " populational\n", + " use_input_preprocessing\n", + " True\n", + " True\n", + " C:\\Users\\1\\AppData\\Local\\Temp\\FEDOT\n", + " C:\\Users\\1\\AppData\\Local\\Temp\\GOLEM\n", + " 3\n", + " 6\n", + " 2\n", + " 3\n", + " ar\n", + " gaussian_filter\n", + " glm\n", + " lagged\n", + " smoothing\n", + " ar\n", + " glm\n", + " eigen_forecaster\n", + " deepar_model\n", + " lagged\n", + " smoothing\n", + " gaussian_filter\n", + " ridge\n", + " lasso\n", + " catboostreg\n", + " bagging\n", + " 3\n", + "ApiComposer - AutoML configured. Parameters tuning: False. Time limit: 10 min. Set of candidate models: ['ar', 'glm', 'eigen_forecaster', 'deepar_model', 'lagged', 'smoothing', 'gaussian_filter', 'ridge', 'lasso', 'catboostreg', 'bagging'].\n", + "ApiComposer - Pipeline composition started.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Generations: 0%| | 0/10000 [00:00}, {'family': 'gamma', 'link': }, {'family': 'inverse_gaussian', 'link': }]]\n", + "window_size [2, 20]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [deepar_model, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "alpha [0.01, 10.0]\n", + "window_size [2, 20]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, eigen_forecaster, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "alpha [0.01, 10.0]\n", + "lag_1 [2, 200]\n", + "lag_2 [2, 800]\n", + "trend [['n', 'c', 't', 'ct']]\n", + "period [[5, 7, 14, 21, 30, 365]]\n", + "seasonal [[True, False]]\n", + "deterministic [[True, False]]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "OptunaTuner - Initial graph: {'depth': 1, 'length': 1, 'nodes': [ar]}\n", + "ar - {'lag_1': 7, 'lag_2': 12} \n", + "Initial metric: [219.848]\n", + "OptunaTuner - Final graph: {'depth': 1, 'length': 1, 'nodes': [ar]}\n", + "ar - {'lag_1': 65.01645245770644, 'lag_2': 321.958794378568, 'trend': 'ct', 'period': 14, 'seasonal': False, 'deterministic': True}\n", + "OptunaTuner - Final metric: 60.564\n", + "IndustrialDispatcher - 9 individuals out of 10 in previous population were evaluated successfully.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Generations: 0%| | 2/10000 [02:16<178:22:34, 64.23s/gen]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "window_size [2, 20]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, smoothing, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "alpha [0.01, 10.0]\n", + "lag_1 [2, 200]\n", + "lag_2 [2, 800]\n", + "trend [['n', 'c', 't', 'ct']]\n", + "period [[5, 7, 14, 21, 30, 365]]\n", + "seasonal [[True, False]]\n", + "deterministic [[True, False]]\n", + "window_size [2, 20]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "alpha [0.01, 10.0]\n", + "lag_1 [2, 200]\n", + "lag_2 [2, 800]\n", + "trend [['n', 'c', 't', 'ct']]\n", + "period [[5, 7, 14, 21, 30, 365]]\n", + "seasonal [[True, False]]\n", + "deterministic [[True, False]]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, smoothing, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "IndustrialDispatcher - 3 individuals out of 3 in previous population were evaluated successfully.\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "alpha [0.01, 10.0]\n", + "lag_1 [2, 200]\n", + "lag_2 [2, 800]\n", + "trend [['n', 'c', 't', 'ct']]\n", + "period [[5, 7, 14, 21, 30, 365]]\n", + "seasonal [[True, False]]\n", + "deterministic [[True, False]]\n", + "window_size [2, 20]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "alpha [0.01, 10.0]\n", + "lag_1 [2, 200]\n", + "lag_2 [2, 800]\n", + "trend [['n', 'c', 't', 'ct']]\n", + "period [[5, 7, 14, 21, 30, 365]]\n", + "seasonal [[True, False]]\n", + "deterministic [[True, False]]\n", + "window_size [2, 20]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, smoothing, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, gaussian_filter, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "OptunaTuner - Initial graph: {'depth': 1, 'length': 1, 'nodes': [ar]}\n", + "ar - {'lag_1': 7, 'lag_2': 12} \n", + "Initial metric: [468.223]\n", + "OptunaTuner - Final graph: {'depth': 1, 'length': 1, 'nodes': [ar]}\n", + "ar - {'lag_1': 62.461598960546034, 'lag_2': 23.396319529701373, 'trend': 't', 'period': 14, 'seasonal': True, 'deterministic': False}\n", + "OptunaTuner - Final metric: 35.020\n", + "IndustrialDispatcher - 3 individuals out of 3 in previous population were evaluated successfully.\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, deepar_model, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, catboostreg, smoothing]}\n", + "{'depth': 3, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, smoothing, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "alpha [0.01, 10.0]\n", + "window_size [2, 20]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, eigen_forecaster, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "alpha [0.01, 10.0]\n", + "window_size [2, 20]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, smoothing, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "OptunaTuner - Initial graph: {'depth': 1, 'length': 1, 'nodes': [ar]}\n", + "ar - {'lag_1': 7, 'lag_2': 12} \n", + "Initial metric: [400.766]\n", + "OptunaTuner - Final graph: {'depth': 1, 'length': 1, 'nodes': [ar]}\n", + "ar - {'lag_1': 137.51206089990478, 'lag_2': 298.56565534529267, 'trend': 'ct', 'period': 7, 'seasonal': True, 'deterministic': False}\n", + "OptunaTuner - Final metric: 41.699\n", + "IndustrialDispatcher - 2 individuals out of 2 in previous population were evaluated successfully.\n", + "IndustrialEvoOptimizer - Successful reproduction\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Generations: 0%| | 3/10000 [02:48<137:56:38, 49.67s/gen]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "window_size [2, 20]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 6, 'nodes': [bagging, ridge, lagged, glm, gaussian_filter, smoothing]}\n", + "alpha [0.01, 10.0]\n", + "nested_label [[{'family': 'gaussian', 'link': }, {'family': 'gamma', 'link': }, {'family': 'inverse_gaussian', 'link': }]]\n", + "window_size [2, 20]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "alpha [0.01, 10.0]\n", + "window_size [2, 20]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, glm, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "OptunaTuner - Initial graph: {'depth': 1, 'length': 1, 'nodes': [ar]}\n", + "ar - {'lag_1': 7, 'lag_2': 12} \n", + "Initial metric: [1412.43]\n", + "OptunaTuner - Final graph: {'depth': 1, 'length': 1, 'nodes': [ar]}\n", + "ar - {'lag_1': 52.52281394256205, 'lag_2': 188.098766316914, 'trend': 'c', 'period': 7, 'seasonal': False, 'deterministic': False}\n", + "OptunaTuner - Final metric: 116.567\n", + "IndustrialDispatcher - 3 individuals out of 3 in previous population were evaluated successfully.\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, smoothing, catboostreg]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 6, 'nodes': [bagging, ridge, lagged, glm, gaussian_filter, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Generations: 0%| | 4/10000 [03:03<99:25:46, 35.81s/gen] " + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "nested_label [[{'family': 'gaussian', 'link': }, {'family': 'gamma', 'link': }, {'family': 'inverse_gaussian', 'link': }]]\n", + "window_size [2, 20]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, gaussian_filter, smoothing]}\n", + "alpha [0.01, 10.0]\n", + "lag_1 [2, 200]\n", + "lag_2 [2, 800]\n", + "trend [['n', 'c', 't', 'ct']]\n", + "period [[5, 7, 14, 21, 30, 365]]\n", + "seasonal [[True, False]]\n", + "deterministic [[True, False]]\n", + "window_size [2, 20]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ar, smoothing, catboostreg, ridge, lagged]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "OptunaTuner - Initial graph: {'depth': 1, 'length': 1, 'nodes': [ar]}\n", + "ar - {'lag_1': 7, 'lag_2': 12} \n", + "Initial metric: [468.223]\n", + "OptunaTuner - Final graph: {'depth': 1, 'length': 1, 'nodes': [ar]}\n", + "ar - {'lag_1': 79.04402186664369, 'lag_2': 320.7017422224528, 'trend': 'n', 'period': 21, 'seasonal': True, 'deterministic': False}\n", + "OptunaTuner - Final metric: 31.449\n", + "IndustrialDispatcher - 2 individuals out of 3 in previous population were evaluated successfully.\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, gaussian_filter, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 6, 'nodes': [bagging, ridge, lagged, glm, gaussian_filter, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, gaussian_filter, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, smoothing, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 6, 'nodes': [bagging, ridge, lagged, glm, smoothing, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "IndustrialDispatcher - 1 individuals out of 1 in previous population were evaluated successfully.\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, eigen_forecaster, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, glm, lagged, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, gaussian_filter, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, lagged, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [eigen_forecaster, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "alpha [0.01, 10.0]\n", + "window_size [2, 20]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "OptunaTuner - Initial graph: {'depth': 1, 'length': 1, 'nodes': [ar]}\n", + "ar - {'lag_1': 7, 'lag_2': 12} \n", + "Initial metric: [1710.581]\n", + "OptunaTuner - Final graph: {'depth': 1, 'length': 1, 'nodes': [ar]}\n", + "ar - {'lag_1': 3.0422961770258787, 'lag_2': 107.6027604348685, 'trend': 'c', 'period': 7, 'seasonal': False, 'deterministic': True}\n", + "OptunaTuner - Final metric: 62.524\n", + "IndustrialDispatcher - 1 individuals out of 1 in previous population were evaluated successfully.\n", + "IndustrialEvoOptimizer - Successful reproduction\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Generations: 0%| | 5/10000 [03:40<100:29:51, 36.20s/gen]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "alpha [0.01, 10.0]\n", + "nested_label [[{'family': 'gaussian', 'link': }, {'family': 'gamma', 'link': }, {'family': 'inverse_gaussian', 'link': }]]\n", + "window_size [2, 20]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ar, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "alpha [0.01, 10.0]\n", + "lag_1 [2, 200]\n", + "lag_2 [2, 800]\n", + "trend [['n', 'c', 't', 'ct']]\n", + "period [[5, 7, 14, 21, 30, 365]]\n", + "seasonal [[True, False]]\n", + "deterministic [[True, False]]\n", + "window_size [2, 20]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, eigen_forecaster, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, smoothing, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [glm, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [ar, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "alpha [0.01, 10.0]\n", + "lag_1 [2, 200]\n", + "lag_2 [2, 800]\n", + "trend [['n', 'c', 't', 'ct']]\n", + "period [[5, 7, 14, 21, 30, 365]]\n", + "seasonal [[True, False]]\n", + "deterministic [[True, False]]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "alpha [0.01, 10.0]\n", + "window_size [2, 20]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "OptunaTuner - Initial graph: {'depth': 1, 'length': 1, 'nodes': [ar]}\n", + "ar - {'lag_1': 7, 'lag_2': 12} \n", + "Initial metric: [1287.103]\n", + "OptunaTuner - Final graph: {'depth': 1, 'length': 1, 'nodes': [ar]}\n", + "ar - {'lag_1': 86.35354188457579, 'lag_2': 175.54447526162036, 'trend': 'n', 'period': 5, 'seasonal': True, 'deterministic': True}\n", + "OptunaTuner - Final metric: 51.595\n", + "IndustrialDispatcher - 4 individuals out of 4 in previous population were evaluated successfully.\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, gaussian_filter, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "alpha [0.01, 10.0]\n", + "nested_label [[{'family': 'gaussian', 'link': }, {'family': 'gamma', 'link': }, {'family': 'inverse_gaussian', 'link': }]]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, smoothing, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, glm, smoothing, lasso]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [glm, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, smoothing, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "alpha [0.01, 10.0]\n", + "lag_1 [2, 200]\n", + "lag_2 [2, 800]\n", + "trend [['n', 'c', 't', 'ct']]\n", + "period [[5, 7, 14, 21, 30, 365]]\n", + "seasonal [[True, False]]\n", + "deterministic [[True, False]]\n", + "window_size [2, 20]\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, smoothing, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, smoothing, smoothing]}\n", + "alpha [0.01, 10.0]\n", + "lag_1 [2, 200]\n", + "lag_2 [2, 800]\n", + "trend [['n', 'c', 't', 'ct']]\n", + "period [[5, 7, 14, 21, 30, 365]]\n", + "seasonal [[True, False]]\n", + "deterministic [[True, False]]\n", + "window_size [2, 20]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "alpha [0.01, 10.0]\n", + "window_size [2, 20]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, smoothing, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "lag_1 [2, 200]\n", + "lag_2 [2, 800]\n", + "trend [['n', 'c', 't', 'ct']]\n", + "period [[5, 7, 14, 21, 30, 365]]\n", + "seasonal [[True, False]]\n", + "deterministic [[True, False]]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "OptunaTuner - Initial graph: {'depth': 1, 'length': 1, 'nodes': [ar]}\n", + "ar - {'lag_1': 7, 'lag_2': 12} \n", + "Initial metric: [1570.207]\n", + "OptunaTuner - Initial graph: {'depth': 1, 'length': 1, 'nodes': [ar]}\n", + "ar - {'lag_1': 7, 'lag_2': 12} \n", + "Initial metric: [400.766]\n", + "OptunaTuner - Final graph: {'depth': 1, 'length': 1, 'nodes': [ar]}\n", + "ar - {'lag_1': 119.282653192664, 'lag_2': 12.045394873630496, 'trend': 't', 'period': 7, 'seasonal': False, 'deterministic': False}\n", + "OptunaTuner - Final metric: 48.108\n", + "MetricsObjective - Objective evaluation error for graph {'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, glm, smoothing, lasso]} on metric rmse: Metric can not be evaluated because of: Found input variables with inconsistent numbers of samples: [12, 1]\n", + "OptunaTuner - Final graph: {'depth': 1, 'length': 1, 'nodes': [ar]}\n", + "ar - {'lag_1': 157.88615848253178, 'lag_2': 296.3657624830267, 'trend': 't', 'period': 21, 'seasonal': False, 'deterministic': True}\n", + "OptunaTuner - Final metric: 50.725\n", + "IndustrialDispatcher - 5 individuals out of 6 in previous population were evaluated successfully.\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "alpha [0.01, 10.0]\n", + "lag_1 [2, 200]\n", + "lag_2 [2, 800]\n", + "trend [['n', 'c', 't', 'ct']]\n", + "period [[5, 7, 14, 21, 30, 365]]\n", + "seasonal [[True, False]]\n", + "deterministic [[True, False]]\n", + "window_size [2, 20]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, lagged, ar, smoothing]}\n", + "alpha [0.01, 10.0]\n", + "window_size [2, 20]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 6, 'nodes': [bagging, ridge, lagged, glm, gaussian_filter, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 4, 'length': 7, 'nodes': [bagging, ridge, lagged, ar, smoothing, smoothing, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, smoothing, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [glm, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ar, lagged, ar, smoothing]}\n", + "alpha [0.01, 10.0]\n", + "window_size [2, 20]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, smoothing, smoothing]}\n", + "alpha [0.01, 10.0]\n", + "lag_1 [2, 200]\n", + "lag_2 [2, 800]\n", + "trend [['n', 'c', 't', 'ct']]\n", + "period [[5, 7, 14, 21, 30, 365]]\n", + "seasonal [[True, False]]\n", + "deterministic [[True, False]]\n", + "window_size [2, 20]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 5, 'length': 7, 'nodes': [bagging, ridge, lagged, ar, gaussian_filter, smoothing, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lasso, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, smoothing, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, smoothing, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, lagged, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "IndustrialDispatcher - 5 individuals out of 7 in previous population were evaluated successfully.\n", + "IndustrialEvoOptimizer - Successful reproduction\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Generations: 0%| | 6/10000 [04:46<128:38:22, 46.34s/gen]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, smoothing, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [eigen_forecaster, ridge, lagged, ar, smoothing, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, smoothing, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "nested_label [[{'family': 'gaussian', 'link': }, {'family': 'gamma', 'link': }, {'family': 'inverse_gaussian', 'link': }]]\n", + "window_size [2, 20]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 6, 'nodes': [bagging, ridge, lagged, glm, smoothing, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, smoothing, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, glm, lagged, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, smoothing, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [glm, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 5, 'length': 7, 'nodes': [bagging, ridge, lagged, ar, smoothing, smoothing, bagging]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "OptunaTuner - Initial graph: {'depth': 1, 'length': 1, 'nodes': [ar]}\n", + "ar - {'lag_1': 7, 'lag_2': 12} \n", + "Initial metric: [1412.43]\n", + "OptunaTuner - Final graph: {'depth': 1, 'length': 1, 'nodes': [ar]}\n", + "ar - {'lag_1': 129.06856330301568, 'lag_2': 24.0870351824266, 'trend': 'n', 'period': 5, 'seasonal': False, 'deterministic': True}\n", + "OptunaTuner - Final metric: 51.221\n", + "IndustrialDispatcher - 2 individuals out of 2 in previous population were evaluated successfully.\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, smoothing, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, glm, smoothing, smoothing, ridge, lagged]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, glm, smoothing, lagged, ridge, lagged]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, deepar_model, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "alpha [0.01, 10.0]\n", + "window_size [2, 20]\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, smoothing, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 5, 'length': 7, 'nodes': [bagging, ridge, lagged, ar, lagged, smoothing, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, smoothing, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, smoothing, smoothing]}\n", + "alpha [0.01, 10.0]\n", + "lag_1 [2, 200]\n", + "lag_2 [2, 800]\n", + "trend [['n', 'c', 't', 'ct']]\n", + "period [[5, 7, 14, 21, 30, 365]]\n", + "seasonal [[True, False]]\n", + "deterministic [[True, False]]\n", + "window_size [2, 20]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, bagging, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "IndustrialDispatcher - 2 individuals out of 3 in previous population were evaluated successfully.\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, smoothing, smoothing]}\n", + "alpha [0.01, 10.0]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [eigen_forecaster, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [ar, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, smoothing, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, glm, lagged, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [ar, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, smoothing, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ar, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "lag_1 [2, 200]\n", + "lag_2 [2, 800]\n", + "trend [['n', 'c', 't', 'ct']]\n", + "period [[5, 7, 14, 21, 30, 365]]\n", + "seasonal [[True, False]]\n", + "deterministic [[True, False]]\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, smoothing, smoothing]}\n", + "lag_1 [2, 200]\n", + "lag_2 [2, 800]\n", + "trend [['n', 'c', 't', 'ct']]\n", + "period [[5, 7, 14, 21, 30, 365]]\n", + "seasonal [[True, False]]\n", + "deterministic [[True, False]]\n", + "window_size [2, 20]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "alpha [0.01, 10.0]\n", + "window_size [2, 20]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "IndustrialDispatcher - 4 individuals out of 4 in previous population were evaluated successfully.\n", + "IndustrialEvoOptimizer - Successful reproduction\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Generations: 0%| | 7/10000 [05:31<127:45:05, 46.02s/gen]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'depth': 5, 'length': 7, 'nodes': [bagging, ridge, lagged, ar, smoothing, smoothing, bagging]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "alpha [0.01, 10.0]\n", + "window_size [2, 20]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, smoothing, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, smoothing, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [glm, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, glm, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "alpha [0.01, 10.0]\n", + "nested_label [[{'family': 'gaussian', 'link': }, {'family': 'gamma', 'link': }, {'family': 'inverse_gaussian', 'link': }]]\n", + "window_size [2, 20]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "alpha [0.01, 10.0]\n", + "lag_1 [2, 200]\n", + "lag_2 [2, 800]\n", + "trend [['n', 'c', 't', 'ct']]\n", + "period [[5, 7, 14, 21, 30, 365]]\n", + "seasonal [[True, False]]\n", + "deterministic [[True, False]]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, glm, lagged, ar, smoothing, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, smoothing, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, glm, gaussian_filter, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, smoothing, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, smoothing, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, lagged, ar, smoothing]}\n", + "lag_1 [2, 200]\n", + "lag_2 [2, 800]\n", + "trend [['n', 'c', 't', 'ct']]\n", + "period [[5, 7, 14, 21, 30, 365]]\n", + "seasonal [[True, False]]\n", + "deterministic [[True, False]]\n", + "window_size [2, 20]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, smoothing, smoothing]}\n", + "{'depth': 5, 'length': 7, 'nodes': [bagging, ridge, lagged, ar, smoothing, smoothing, bagging]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "OptunaTuner - Initial graph: {'depth': 1, 'length': 1, 'nodes': [ar]}\n", + "ar - {'lag_1': 7, 'lag_2': 12} \n", + "Initial metric: [1570.207]\n", + "OptunaTuner - Initial graph: {'depth': 1, 'length': 1, 'nodes': [ar]}\n", + "ar - {'lag_1': 7, 'lag_2': 12} \n", + "Initial metric: [1677.636]\n", + "OptunaTuner - Final graph: {'depth': 1, 'length': 1, 'nodes': [ar]}\n", + "ar - {'lag_1': 164.74987685236732, 'lag_2': 42.71691287373983, 'trend': 'c', 'period': 5, 'seasonal': True, 'deterministic': True}\n", + "OptunaTuner - Final metric: 51.234\n", + "OptunaTuner - Final graph: {'depth': 1, 'length': 1, 'nodes': [ar]}\n", + "ar - {'lag_1': 42.173478093698556, 'lag_2': 269.61449861445874, 'trend': 'n', 'period': 21, 'seasonal': False, 'deterministic': False}\n", + "OptunaTuner - Final metric: 34.559\n", + "IndustrialDispatcher - 5 individuals out of 6 in previous population were evaluated successfully.\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 5, 'length': 8, 'nodes': [bagging, ridge, catboostreg, lagged, ar, smoothing, smoothing, bagging]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, smoothing, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "nested_label [[{'family': 'gaussian', 'link': }, {'family': 'gamma', 'link': }, {'family': 'inverse_gaussian', 'link': }]]\n", + "window_size [2, 20]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "nested_label [[{'family': 'gaussian', 'link': }, {'family': 'gamma', 'link': }, {'family': 'inverse_gaussian', 'link': }]]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "alpha [0.01, 10.0]\n", + "window_size [2, 20]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, deepar_model, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, smoothing, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, smoothing, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "alpha [0.01, 10.0]\n", + "lag_1 [2, 200]\n", + "lag_2 [2, 800]\n", + "trend [['n', 'c', 't', 'ct']]\n", + "period [[5, 7, 14, 21, 30, 365]]\n", + "seasonal [[True, False]]\n", + "deterministic [[True, False]]\n", + "window_size [2, 20]\n", + "window_size [2, 20]\n", + "{'depth': 4, 'length': 6, 'nodes': [bagging, ridge, lagged, ar, smoothing, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "alpha [0.01, 10.0]\n", + "lag_1 [2, 200]\n", + "lag_2 [2, 800]\n", + "trend [['n', 'c', 't', 'ct']]\n", + "period [[5, 7, 14, 21, 30, 365]]\n", + "seasonal [[True, False]]\n", + "deterministic [[True, False]]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, ar, smoothing]}\n", + "alpha [0.01, 10.0]\n", + "nested_label [[{'family': 'gaussian', 'link': }, {'family': 'gamma', 'link': }, {'family': 'inverse_gaussian', 'link': }]]\n", + "{'depth': 3, 'length': 5, 'nodes': [bagging, ridge, lagged, glm, smoothing]}\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "OptunaTuner - Initial graph: {'depth': 1, 'length': 1, 'nodes': [ar]}\n", + "ar - {'lag_1': 7, 'lag_2': 12} \n", + "Initial metric: [1412.43]\n", + "OptunaTuner - Initial graph: {'depth': 1, 'length': 1, 'nodes': [ar]}\n", + "ar - {'lag_1': 7, 'lag_2': 12} \n", + "Initial metric: [1088.13]\n" ] } ], "source": [ + "from fedot_ind.core.architecture.pipelines.abstract_pipeline import ApiTemplate\n", + "api_client = ApiTemplate(api_config=API_CONFIG,\n", + " metric_list=METRIC_NAMES)\n", + "\n", "fred_results = {}\n", "for index, ts in data_split.items():\n", - " input_data = (ts,ts[-horizon:].flatten())\n", - " industrial_auto_model = evaluate_loop(train_data=input_data, api_params=params, finetune=False)\n", - " auto_labels = industrial_auto_model.predict(input_data)\n", - " auto_metrics = {}\n", - " for forecat_model, predict in auto_labels.items():\n", - " industrial_auto_model.predicted_labels = predict\n", + " input_data = (ts, ts[-horizon:].flatten())\n", "\n", - " current_metric = industrial_auto_model.get_metrics(target=ts[-horizon:].flatten(),\n", - " metric_names=metric_names)\n", - " auto_metrics.update({forecat_model:current_metric})\n", - " fred_results.update({index:(industrial_auto_model,auto_metrics)})" - ], + " dataset_dict = dict(train_data=input_data,\n", + " test_data=input_data)\n", + "\n", + " result_dict = api_client.eval(dataset=dataset_dict, finetune=False)\n", + " fred_results.update({index: result_dict})" + ] + }, + { + "cell_type": "code", + "execution_count": 11, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } - } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
rmsemaesmape
0465.758462.4782.783
\n", + "
" + ], + "text/plain": [ + " rmse mae smape\n", + "0 465.758 462.478 2.783" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "result_dict['metrics']" + ] }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 12, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", - "border = 100\n", - "baseline = labels\n", - "ridge = auto_labels['lagged_ridge']\n", - "eigen = auto_labels['eigen_ar']\n", - "cgru = auto_labels['cgru']\n", + "from matplotlib import pyplot as plt\n", + "border = 200\n", + "eigen = result_dict['labels']\n", "plt.close()\n", - "real_values = train_data\n", + "real_values = features\n", "if len(real_values) > border:\n", " real_values = real_values[-border:]\n", "indicies = np.arange(real_values.shape[0])" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } + ] }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, + "metadata": {}, "outputs": [ { "data": { - "text/plain": "" + "text/plain": [ + "" + ] }, - "execution_count": 21, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, { "data": { - "text/plain": "
", - "image/png": "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l17Se/3rr7+i1Wrp378/iYmJui8vLy/q1KnDtm3bADhy5AixsbGMGzeuwMBtlUql+7+tra3u/1lZWSQmJtK6dWsADh8+XKJ6GD16tN61OnTogEaj4fLlywBs3bqV3NxcXnnlFb3jXnvttWJdp2/fvnotRS1btqRVq1Z69fn8889z48YNXf1AXiuTra0tTz/9dLGud6//vj8dOnTg4sWLutcbN27EwsJC1/IEYG5uXux7vJeLiwvp6em676tH4e/vT1hY2EPLWVtb6waGazQabt++jYODA4GBgSX+/hCitEj3nBDlSMuWLQsdCJ6fLBTWFVKvXj02b95cYLD3f5/CO3/+PIqiUKdOnUKvbWlpCUBMTAzw8Kf2kpKSmDp1KmvWrCEhIUFv3927dx947MP4+fnpvXZ1dQXgzp07wL/1ERAQoFfOzc1NV7YoCquLunXr8tNPP+le9+jRA29vb1atWkW3bt3QarX8+OOPPPHEEzg6Ohb5WveysbEp0EXp6uqquz/Iu0dvb28cHBz0yt2vO6woXnnlFX766SfCw8OpVq0aoaGh9O/fn549exb5HP/9vrofrVbLggUL+PLLL4mNjdUbr1WlSpVixy6EMUjSJEQldW9LEOT9ElOpVPz555+Ym5sXKP/fX84P079/fyIjI5k4cSJNmjTBwcEBrVZLz5490Wq1JYq9sPgA3dgsYzI3N2fQoEEsXbqUL7/8kj179nDjxg2ee+65Ep3TkFQqVaF189+B5R4eHkRHR7N582b+/PNP/vzzT1asWMHzzz/Pt99+W6Rr/ff76n4+/vhjPvjgA0aMGMG0adNwc3PDzMyMcePGlfj7Q4jSIkmTEBVAjRo1gLxBuP915swZ3N3dHzqlQO3atVEUBX9/f+rWrfvAcgAnTpyge/fuhZa5c+cOW7duZerUqUyePFm3/fz58wXK3tvNZij59XHhwgW9lo/bt2/rtdY8TGHxnjt3rsCg+ueff5558+bx+++/8+eff1K1atUidVGVRI0aNdi6dStpaWl6CW1h3wOurq56XXv58lvk7mVlZUWfPn3o06cPWq2WV155ha+//poPPviAgIAAg71fP//8M126dGHZsmV625OTk3UPBAhR1siYJiEqAG9vb5o0acK3336r98j5iRMn2LJlC7169XroOZ566inMzc2ZOnVqgVYJRVF0UwU0bdoUf39/PvvsswKPt+cfl99S8t/zfPbZZwWum5/MGXJG8G7dumFhYcFXX32lt33hwoXFOs/69ev1pgzYv38/+/btIzw8XK9ccHAwwcHBfPPNN/zyyy8MGDAAC4vS/Zu0V69e5Obm6t2jRqPhiy++KFC2du3anDlzRm9ahqNHj7Jnzx69cvdOBwFgZmZGcHAwANnZ2YDh3i9zc/MC3x/r1q0r9hQNQhiTtDQJUUHMmTOH8PBw2rRpw8iRI3VTDjg7OzNlypSHHl+7dm2mT5/OpEmTuHTpEn379sXR0ZHY2Fh+++03Ro8ezZtvvomZmRlfffUVffr0oUmTJgwfPhxvb2/OnDnDyZMn2bx5M05OTnTs2JHZs2ejVqupVq0aW7ZsITY2tsB1mzVrBsB7773HgAEDsLS0pE+fPiWabNPT05OxY8cyb948Hn/8cXr27MnRo0f5888/cXd3L3JrSUBAAO3bt+fll18mOzubzz77jCpVqvDWW28VKPv888/z5ptvApSoa66o+vTpQ7t27XjnnXe4dOkS9evX59dffy10vNiIESOYP38+YWFhjBw5koSEBBYvXkyDBg1ISUnRlXvhhRdISkqia9euVK9encuXL/PFF1/QpEkT3bQCTZo0wdzcnFmzZnH37l2sra3p2rUrHh4exYr/scce46OPPmL48OG0bduW48ePs2rVKmrVqlWyihGiNJnsuT0hRJEV9mh6Yf766y+lXbt2iq2treLk5KT06dNHOXXqlF6Z/CkHbt26Veg5fvnlF6V9+/aKvb29Ym9vrwQFBSljxoxRzp49q1du9+7dSo8ePRRHR0fF3t5eCQ4OVr744gvd/mvXrilPPvmk4uLiojg7Oyv9+vVTbty4oQDKhx9+qHeuadOmKdWqVVPMzMz0ph+435QD/62Hbdu2FXgMPjc3V/nggw8ULy8vxdbWVunataty+vRppUqVKspLL730wHrMf8x9zpw5yrx58xRfX1/F2tpa6dChg3L06NFCj7l586Zibm6u1K1b94Hnvtf9phywt7cvUDb/fbvX7du3lSFDhihOTk6Ks7OzMmTIEOXIkSOFPqL/ww8/KLVq1VKsrKyUJk2aKJs3by4w5cDPP/+shIaGKh4eHoqVlZXi5+envPjii8rNmzf1zrV06VKlVq1airm5uV6916hRQ+ndu3eh91rYlANvvPGG4u3trdja2irt2rVToqKiCkyPIFMOiLJEpSgmGDkphBAmkJycjKurK9OnT+e9994z6LkTExPx9vZm8uTJfPDBBwY9txCibJAxTUKICikzM7PAtvwxVYUtKVJSK1euRKPRMGTIEIOfWwhRNsiYJiFEhbR27VpWrlxJr169cHBwYPfu3fz444+EhobSrl07g13n77//5tSpU8yYMYO+ffsWeLJOCFFxSPecEKJCOnz4MG+99RbR0dGkpKTg6enJ008/zfTp04s959SDdO7cmcjISNq1a8cPP/zwSGvNCSHKB0mahBBCCCGKQMY0CSGEEEIUgSRNQgghhBBFIAPBDUSr1XLjxg0cHR1LZVkIIYQQQhieoiikpqbi4+ODmdmD25IkaTKQGzdu4Ovra+owhBBCCPEIrl69SvXq1R9YRpImA3F0dATyKt3Jycmg51ar1WzZsoXQ0FAsLS0Nem6hT+raeKSujUfq2nikro3HUHWdkpKCr6+v7vf4g0jSZCD5XXJOTk6lkjTZ2dnh5OQkP4SlTOraeKSujUfq2nikro3H0HVdlKE1MhBcCCGEEKIIJGkSQgghhCgCSZqEEEIIIYpAxjQZmUajQa1WF+sYtVqNhYUFWVlZaDSaUopMwIPr2tLSEnNzcxNFJoQQwtQkaTISRVGIi4sjOTn5kY718vLi6tWrMgdUKXtYXbu4uODl5SXvgxBCVEKSNBlJfsLk4eGBnZ1dsX7parVa0tLScHBweOjEW6Jk7lfXiqKQkZFBQkICAN7e3qYKUQghhImY9Dfwzp076dOnDz4+PqhUKtavX1+gzOnTp3n88cdxdnbG3t6eFi1acOXKFd3+rKwsxowZQ5UqVXBwcODpp58mPj5e7xxXrlyhd+/e2NnZ4eHhwcSJE8nNzdUrs337dpo2bYq1tTUBAQGsXLnSYPep0Wh0CVOVKlWwtbXFxsamWF9WVlbFPka+Hu2rsLq2tbWlSpUqeHh4kJycLN2kQghRCZk0aUpPT6dx48YsWrSo0P0xMTG0b9+eoKAgtm/fzrFjx/jggw+wsbHRlRk/fjy///4769atY8eOHdy4cYOnnnpKt1+j0dC7d29ycnKIjIzk22+/ZeXKlUyePFlXJjY2lt69e9OlSxeio6MZN24cL7zwAps3bzbIfeaPYbKzszPI+YTp5L+HxR2XJoQQovwzafdceHg44eHh993/3nvv0atXL2bPnq3bVrt2bd3/7969y7Jly1i9ejVdu3YFYMWKFdSrV4+9e/fSunVrtmzZwqlTp/jrr7/w9PSkSZMmTJs2jbfffpspU6ZgZWXF4sWL8ff3Z968eQDUq1eP3bt38+mnnxIWFmaw+5VxMOWfvIdCCFF5ldkxTVqtlj/++IO33nqLsLAwjhw5gr+/P5MmTaJv374AHDp0CLVaTffu3XXHBQUF4efnR1RUFK1btyYqKopGjRrh6empKxMWFsbLL7/MyZMnCQkJISoqSu8c+WXGjRt33/iys7PJzs7WvU5JSQHyWiD+2wqhVqtRFAWtVotWqy12XSiKovv3UY4XRfewutZqtSiKglqtlifpSij/50Ra7Uqf1LXxSF0bj6HqujjHl9mkKSEhgbS0ND755BOmT5/OrFmz2LRpE0899RTbtm2jU6dOxMXFYWVlhYuLi96xnp6exMXFAXkDsO9NmPL35+97UJmUlBQyMzOxtbUtEN/MmTOZOnVqge1btmwp0A1nYWGBl5cXaWlp5OTkFK8i7pGamvrIxxraY489RqNGjZg5c6apQykV96vrnJwcMjMz2blzZ4FxceLRREREmDqESkPq2nikro2npHWdkZFR5LJlNmnK/yv/iSeeYPz48QA0adKEyMhIFi9eTKdOnUwZHpMmTWLChAm61/kL/oWGhhZYey4rK4urV6/i4OCgNx6rqBRFITU1FUdHR6N3Dw0fPpzvvvuuwPaoqCjq1atXpAUOi3Ot5ORkfvvtN4Ods7geVtdZWVnY2trSsWPHR3ovxb/UajURERH06NFD1ugqZVLXxiN1bTyGquv8nqKiKLNJk7u7OxYWFtSvX19ve/54IwAvLy9ycnJITk7Wa22Kj4/Hy8tLV2b//v1658h/uu7eMv994i4+Ph4nJ6dCW5kArK2tsba2LrDd0tKywJun0WhQqVSYmZk90pQB+Qlk/jmMSaVS0bNnT1asWKG3vWrVqgbvnlKpVCa5x3s9rK7NzMxQqVSFvs/i0UhdGo/UtfFIXRvewUtJBHg44GJnpbe9pHVdnGPL7KQ/VlZWtGjRgrNnz+ptP3fuHDVq1ACgWbNmWFpasnXrVt3+s2fPcuXKFdq0aQNAmzZtOH78uG5+HchrynNyctIlZG3atNE7R36Z/HNUdtbW1nh5eel9devWTW/MV82aNfn4448ZMWIEjo6O+Pn5sWTJEr3zXL16lf79++Pi4oKbmxtPPPEEly5dAmDKlCl8++23/O9//9MlT9u3b2f79u2oVCq9SUGjo6NRqVS6Y1euXImLiwubN2+mXr16ODg40LNnT27evKl3/W+++YZ69ephY2NDUFAQX375ZWlUlxBCCANSFIVlu2N5dsleXl8TjUarmCwWk7Y0paWlceHCBd3r2NhYoqOjcXNzw8/Pj4kTJ/Lss8/SsWNHunTpwqZNm/j999/Zvn07AM7OzowcOZIJEybg5uaGk5MTr732Gm3atKF169YAhIaGUr9+fYYMGcLs2bOJi4vj/fffZ8yYMbqWopdeeomFCxfy1ltvMWLECP7++29++ukn/vjjj9K7eUUBdRH7UbXavLI55mCIVhhLOyiFbr558+Yxbdo03n33XX7++WdefvllOnXqRGBgIGq1mrCwMNq0acOuXbuwsLBg+vTp9OzZk2PHjvHmm29y+vRpUlJSdK1abm5uREZGFunaGRkZzJ07l++//x4zMzOee+453nzzTVatWgXAqlWrmDx5MgsXLiQkJIQjR44watQo7O3tGTp0qMHrQgghRMll5OTy9i/H+f3oDQBc7SxRa7SYm5nmQRyTJk0HDx6kS5cuutf5Y4SGDh3KypUrefLJJ1m8eDEzZ87k9ddfJzAwkF9++YX27dvrjvn0008xMzPj6aefJjs7m7CwML0WBHNzczZs2MDLL79MmzZtdL8kP/roI10Zf39//vjjD8aPH8+CBQuoXr0633zzjUGnGyhAnQEf+xSpqBngYshrv3sDrOyLXHzDhg04ODjoXt9vmohevXrxyiuvAPD222/z6aefsm3bNgIDA1m7di1arZZvvvlGN1ZoxYoVuLi4sH37dkJDQ7G1tSU7O1vXbVocarWaxYsX66akePXVV/Xe4w8//JB58+bp5vDy9/fn1KlTfP3115I0CSFEGRSbmM5L3x/ibHwqFmYqRne35cV2tbCxNN2TyyZNmjp37qx7xPt+RowYwYgRI+6738bGhkWLFt13gkyAGjVqsHHjxofGcuTIkQcHXEl16dKFr776Svfa3t6egQMHFigXHBys+79KpcLLy0vXLXr06FEuXLhQYOB4VlYWMTExJY7Rzs5Obw4vb29v3bXT09OJiYlh5MiRjBo1SlcmNzcXZ2fnEl9bCCGEYW07m8DrPx4hNSsXd0cr+ne5xtqYhcRFdWJep3kmmzOvzA4Er/As7fJafIpAq9WSkpqKk6OjYQZJWxZvZnJ7e3sCAgIeftr/DKZTqVS6gdVpaWk0a9ZM1112r6pVq973nPn3e29yXdicGoVdO/+YtLQ0AJYuXUqrVq30yslcS0IIUbbsOn+L0d8dRK1RCKlhjXfA73x//m8AsnKzyNJkYWtR+ENapU2SJlNRqYreRabVgqUmr3w5XbC3adOmrF27Fg8PjwJTMuSzsrIqsKZbfkJ18+ZNXF1dgbyB4MXh6emJj48PFy9eZPDgwcUPXgghhFFEX03mxe8PodYotG+YRoLN5+y6cQMLMwvGNR3HkPpDMFOZ7vdg+fwNLMqdwYMH4+7uzhNPPMGuXbuIjY1l+/btvP7661y7dg3IewLv2LFjnD17lsTERNRqNQEBAfj6+jJlyhTOnz/PH3/8oVvupjimTp3KzJkz+fzzzzl37hzHjx9nxYoVzJ8/39C3KoQQ4hFcSEhl2Ir9ZOSoqVN3Pye0M7mZfoPqDtX5Pvx7hjYYatKECSRpEkZiZ2fHzp078fPz46mnnqJevXqMHDmSrKwsXcvTqFGjCAwMpHnz5lStWpU9e/ZgaWnJjz/+yJkzZwgODmbWrFlMnz692Nd/4YUX+Oabb1ixYgWNGjWiU6dOrFy5En9/f0PfqhBCiAdIzsjhbFwqGTn/rqpwPTmTIcv2czfnFlXrriDO/Fc0iobwmuGs67OOhu4NTRjxv1TKw0ZiiyJJSUnB2dmZu3fvFjojeGxsLP7+/o80i7RWqyUlJQUnJyeTTvxYGTysrkv6Xop/qdVqNm7cSK9evWQSwFImdW08UtcPdjstm16f7yI+JW/t1qqO1tRws+Pm3SziNXux81mPYpaJrYUtk1pOom9A3/sO+jZUXT/o9/d/yZgmIYQQQpQ6RVF459fjxKdkY26mQqNVuJWaza30u9h4/h+2LodRgEbujfikwyf4Ofn9e7BGDRe3g7kV1DLdMmqSNAkhhBCi1P108CoRp+KxNFfxvzHtqeZiy6aYPSw8/inJ6njMMOOF4Bd4qfFLWJpZ5k0CfXU/HP8JTv4GGbehRjtJmoQQQghRcV2+nc7U308B8EZoIAGeNiyM/oKVJ1aioFDNoRoz2s+gmWezvAMOLofdn0LylX9PYl8VvBrlPVFuoqEqkjQJIYQQotTkarSMXxtNRo6Glv5udGqYy8A/BnLuzjkAngx4krdavIWDlUNeQhTxAUQtzDvYygHq9YFGz4B/ZzA3bdoiSZMQQgghDGLLyTiu3ckk0MuRQC9H3B2s+Wp7DIevJONoDU2D9zNo40pytbm42bjxYZsP6erXNe/g3Bz435i87jiAru9D6zFgVbwJmUuTJE1CCCGEKLH9sUmM/v6Q3rYq9lYkZ6oxs7mCR9AfrDp3GYAuvl2Y3GYy7rbueQWz0+CnIRDzN5hZwBOLoPEAY9/CQ0nSJIQQQogS0WgVPvy/kwDU8XBArdFyOSmD2xlpWFfdglWVPSRkK7jZuDGp1STCaoTlTSWg1cDlPbDlA7gZnbfMV//voU53097QfUjSJIQQQogSWb3vMqdvpuBsa8naF9vgZm/F1ks7mL5vOolZcQA8XvtxJjafiIu1M8Qdg2M/wYlfIPVm3knsqsCgdVC9mQnv5MEkaRJCCCHEI0tKz2HulrxB3W+E1kVrlsJbO2fzZ+yfAPjY+/BBmw9oX609pCXA6l5wJfLfE9g4Q/0noP14cKtlilsoMkmaRImoVCp+++03+vbta+pQhBBCmMCczWe5m6km0MsWK5d9PLH+c1JyUjBTmTGk3hBeafIKdpZ2cOscrHoGki+DhQ3U7QmN+kGdHmBhberbKBJZk0M80LBhw1CpVAW+evbsCcDNmzcJDw83cZSFmzlzJubm5syZM6fAvpUrV+ruxczMDG9vb5599lmuXLlSyJmEEEIU5vi1u6w5dA5Lt51kek5nxv7ppOSkUM+tHqt7r+bNFm/mJUyXdsOy7nkJk6s/vLQH+n8L9R4rNwkTSEuTKIKePXuyYsUKvW3W1nnf5F5eXqYIqUiWL1/OW2+9xfLly5k4cWKB/U5OTpw9exZFUYiNjeWVV17h2WefZfPmzSaIVgghypfkzLuM+XM69rW3ozLP4k4OVLWtyoiGIxgQNAALs39SjKNr86YS0KqheksY+CPYu5s09kclLU3ioaytrfHy8tL7cnV1BfK659avX68rGxkZSZMmTbCxsaF58+asX78elUpFdHS0rsyJEycIDw/HwcEBT09PhgwZQmJiom5/586def3113nrrbdwc3PDy8uLKVOmFCvmHTt2kJmZyUcffURKSgqRkZEFyqhUKry8vPD29qZt27aMHDmS/fv3k5KSUqxrCSFEZXMt9Rp91z/LHatNqMyz8HWowdS2U9n09Caeq/8cFuosOLoGvusLv43OS5jq94Wh/1duEyaQliaTURSFzNzMIpXVarVk5mZiobbAzABTx9ta2N531eiSSElJoU+fPvTq1YvVq1dz+fJlxo0bp1cmOTmZrl278sILL/Dpp5+SmZnJ22+/Tf/+/fn777915b799lsmTJjAvn37iIqKYtiwYbRr144ePXoUKZZly5YxcOBALC0tGThwIMuWLaNt27b3LZ+QkMBvv/2Gubk55ubmj3T/QghRGZy6fYoXI14mOScJrdqZXj4vMyt8IGYqs7y14g4sg9O/gzr934PajYNuH5ps+RNDkaTJRDJzM2m1upVJrr1v0L68PuYi2rBhAw4ODnrb3n33Xd599129batXr0alUrF06VJsbGyoX78+169fZ9SoUboyCxcuJCQkhI8//li3bfny5fj6+nLu3Dnq1q0LQHBwMB9++CEAderUYeHChWzdurVISVNKSgo///wzUVFRADz33HN06NCBBQsW6N3H3bt3cXBwQFEUMjIyAHjttdewt7cvct0IIURlEnk9kvHbx5ORm4Emy4tAZQIzw8LyEqYDy+CPNwAlr7BbLQgeAMH9wc3fpHEbiiRN4qG6dOnCV199pbfNzc2tQLmzZ88SHByMjY2NblvLli31yhw9epRt27YVSMIAYmJi9JKme3l7e5OQkFCkeH/88Udq165N48aNAWjSpAk1atRg7dq1jBw5UlfO0dGRw4cPo1ar+fPPP1m1ahXTp09Hq9UW6TpCCFFZaLQa/hfzP6ZFTSNXySU3vTbWt4fz5eudsTBTwfZZsP2fP4YbPAmtX4HqLaAUejVMSZImE7G1sGXfoH1FKqvVaklNTcXR0dFg3XPFYW9vT0BAQImvC5CWlkafPn2YNWtWgX3e3t66/1taWurtU6lURU5mli1bxsmTJ7Gw+PfbW6vVsnz5cr2kyczMTHdf9erVIyYmhldeeYWFCxcW656EEKIi0mg1HE44zOZLm4m4HEFSVhIA6rtNyLrxDIuGtcbb0Qo2ToQDS/MO6vQOdH6nwiVL+SRpMhGVSlXkLjKtVkuuRS52lnYGSZpKS2BgID/88APZ2dm6p+sOHDigV6Zp06b88ssv1KxZUy+pMZTjx49z8OBBtm/frtcalpSUROfOnTlz5gxBQUGFHvvOO+9Qu3ZtRo0aRYcOHQwemxBClBe/nf+Nz498TmLmvw/pOFo6kZrQmqy4zozqUJuuAS7wy0g4+Ruggl5zoOWo+56zIii7v4FFmZGdnU1cXJze171Pu+UbNGgQWq2W0aNHc/r0aTZv3szcuXMBdAPPx4wZQ1JSEgMHDuTAgQPExMSwefNmhg8fjkajKXGsy5Yto2XLlnTs2JGGDRvqvjp27EiLFi1YtmzZfY/19fWlb9++euOthBCisvnt/G9MjpxMYmYiTlZOPBnwJIu6foln8kxS47rSoZo5b9tvgAWN8xImM0t4ZnmFT5hAkiZRBJs2bcLb21vvq3379gXKOTk58fvvvxMdHU2TJk147733mDx5MoBunJOPjw979uxBo9EQGhpKo0aNGDduHC4uLiVuRcvJyeGHH37g6aefLnT/008/zXfffYdarb7vOcaNG8eWLVvYv39/iWIRQojyaOPFjXwYmfcQzpD6Q9jefzsftfuIi1eqk371FPOtl/Jd8jAsts/IWzPOwRMGr4OGT5k4cuOQ7jnxQCtXrmTlypX33a8oit7rtm3bcvToUd3rVatWYWlpiZ+fn25bnTp1+PXXX+97zu3btxfYdu9cUPdjZWVVaAtYvrfeeou33noLyJvpfNiwYQXKtG7dmjt37uDk5PTQ6wkhREXy95W/eXf3uygo9K/bn4nNJ6JSqUhKz+F8xFI2Wn2FhUoLGsAnBFq9nDfo28LK1KEbjSRNwqC+++47atWqRbVq1Th69KhuDiZb2+INPhdCCGE8kdcjeXPHm2gUDX1q9eG91u/phlXsXv0xM1gEKlDqhKHq+GaFfDKuKCRpEgYVFxfH5MmTiYuLw9vbm379+jFjxgyDnX/VqlW8+OKLhe6rUaMGJ0+eNNi1hBCiotIqWs7fOc/em3uJuhHF/rj9qLVqetTowUftPsqbd0lRSNj4MY9f/xSAm/WG4d3v03I/QWVJSNIkDOreLrDS8Pjjj9OqVeGTgv53mgIhhBAFfX/qe745/o1uCoF8XXy7MKvDrLw14xQFJeJDPA4sAGCj2/P06v9ZpWxdupckTaJccXR0xNHR0dRhCCFEubT18lZmH5gN5M3Z19yzOW182tDauzUBLgGoAC5uhz2fo4rZCsAn2iE8N2RWpU+YQJImo/rvoGlR/sh7KIQor66mXuWDPR8AMLjeYN5o9gaW5v+00Kuz4MgPsPcrSMgb5qDBjPfUI/Dq8iLVXYu+9FZFJkmTEeR3G2VkZMiA6HIuf4066QoUQpQnOZoc3tzxJqnqVBpXbcwbzd/A0uyfz7HYXXmTVKbFA6BY2hHpGMb7N9uT41yLvzrWNmHkZYskTUZgbm6Oi4uLbu00Ozs73VMJRaHVasnJySErK6tMzwheEdyvrvMX9U1ISMDFxQVzc3MTRimEEMUz58AcTt0+hYu1C3M7zf03YTr8PWwYB9pcFKfqHPPpz7jzjYm9kbd/8WP1sLWSz7t8kjQZiZeXF0CRF529l6IoZGZmYmtrW6xkSxTfw+raxcVF914KIUR5sCl2E2vOrgHg4/Yf42XvBVot/PUhRH4OQFLNxxiVMoJD0VkA+Lvb88Fj9ega5GmyuMsiSZqMRKVS4e3tjYeHxwNnpC6MWq1m586ddOzYUbqFStmD6trS0lJamIQQ5crVlKu6Gb5faPQCHap3gJx0+HU0nNkAwE7vEQw90xWFLBytLXi9Wx2Gtq2JlYX0bPyXJE1GZm5uXuxfvObm5uTm5mJjYyNJUymTuhZCVCRLji8hIzeDph5NGVNvaN5A76hFcPcqWnNr5tm+xqLYpgD0b16dt3oG4e5gbeKoyy5JmoQQQogKKDEzkT8u/gHAeMUFiwWNISsZgEzrqozMfI3I9ABc7CyZ80xjetSXrriHkaRJCCGEqIB+PPMjaq2a4Gw1TfavBEDtUoufrPry0ZVgsrGilb8bnw1ogrezPNldFJI0CSGEEBVMZm4mP51dC8DQ5GQ0Xo35P6dBTDrlS1YumKngje51eaVLAOZm8oBRUUnSJIQQQlQwv8f8TnL2Xaqpc2mrcaDrrTe5fClvPG2bWlV4/7F6NPBxNnGU5Y9Jh8bv3LmTPn364OPjg0qlYv369Xr7hw0bhkql0vvq2bOnXpmaNWsWKPPJJ5/olTl27BgdOnTAxsYGX19fZs+eXSCWdevWERQUhI2NDY0aNWLjxo0Gv18hhBCitGkVLd8fXwbAcympvJ06kMvp5tSsYseSIc1YPaqVJEyPyKQtTenp6TRu3JgRI0bw1FNPFVqmZ8+erFixQvfa2rrgqP6PPvqIUaNG6V7fuzZZSkoKoaGhdO/encWLF3P8+HFGjBiBi4sLo0ePBiAyMpKBAwcyc+ZMHnvsMVavXk3fvn05fPgwDRs2NNTtCiGEEKVu59UdXEq/gaNGi0dyDTYqrXgnPIgR7fxlGoESMmnSFB4eTnh4+APLWFtbP3QyQUdHx/uWWbVqFTk5OSxfvhwrKysaNGhAdHQ08+fP1yVNCxYsoGfPnkycOBGAadOmERERwcKFC1m8ePEj3JkQQghhGt8emAfAk6kZzFBPYNZTjenfwtfEUVUMZT7l3L59Ox4eHgQGBvLyyy9z+/btAmU++eQTqlSpQkhICHPmzCE3N1e3Lyoqio4dO2JlZaXbFhYWxtmzZ7lz546uTPfu3fXOGRYWRlRUVCndlRBCCGF4J2/s42DaZSwUhayk9rzwRHdJmAyoTA8E79mzJ0899RT+/v7ExMTw7rvvEh4eTlRUlG6CyNdff52mTZvi5uZGZGQkkyZN4ubNm8yfPx+AuLg4/P399c7r6emp2+fq6kpcXJxu271l4uLi7htbdnY22dnZutcpKSlA3ozSxZ3x+2Hyz2fo84qCpK6NR+raeKSujceUdX31TgafbnwbLKFdmhbvzpMY0Mynwr7vhqrr4hxfppOmAQMG6P7fqFEjgoODqV27Ntu3b6dbt24ATJgwQVcmODgYKysrXnzxRWbOnFno+CdDmTlzJlOnTi2wfcuWLdjZ2ZXKNSMiIkrlvKIgqWvjkbo2Hqlr4zFWXSdlQ/RtFUcSzVByzpNaOxFQUUXpRdWU82zceN4ocZhSSes6IyOjyGXLdNL0X7Vq1cLd3Z0LFy7okqb/atWqFbm5uVy6dInAwEC8vLyIj4/XK5P/On8c1P3KPGgs1aRJk/QStpSUFHx9fQkNDcXJyemR7u9+1Go1ERER9OjRQ5b2KGVS18YjdW08UtfGY8y6XrbnErM2n0NR8l6bqWrRO6ML9vbnef+lmaV67bLAUHWd31NUFOUqabp27Rq3b9/G29v7vmWio6MxMzPDw8MDgDZt2vDee++hVqt1lRoREUFgYCCurq66Mlu3bmXcuHG680RERNCmTZv7Xsfa2rrQlixLS8tS+0EpzXMLfVLXxiN1bTxS18ZT2nX9fdQlPtl0DoCWNd3o09ibng29qer4RKlds6wqaV0X51iTJk1paWlcuHBB9zo2Npbo6Gjc3Nxwc3Nj6tSpPP3003h5eRETE8Nbb71FQEAAYWFhQN4A7n379tGlSxccHR2Jiopi/PjxPPfcc7qEaNCgQUydOpWRI0fy9ttvc+LECRYsWMCnn36qu+7YsWPp1KkT8+bNo3fv3qxZs4aDBw+yZMkS41aIEEII8RC/Hr7GB/87CcCYLrWZGBZk4ogqD5MmTQcPHqRLly661/ndXUOHDuWrr77i2LFjfPvttyQnJ+Pj40NoaCjTpk3TtfBYW1uzZs0apkyZQnZ2Nv7+/owfP16v28zZ2ZktW7YwZswYmjVrhru7O5MnT9ZNNwDQtm1bVq9ezfvvv8+7775LnTp1WL9+vczRJIQQwuDOx6cSm5hOi5puuNpbPfyAe2w6cZM31x0FYFjbmrwZGlgaIYr7MGnS1LlzZ5T8zthCbN68+YHHN23alL179z70OsHBwezateuBZfr160e/fv0eei4hhBCiuC4lprPh2A02HLvJmbhUIG/9txY13Qht4EVofU983e7/EJGiKPx1OoHXfjyCVoFnmlVn8mP1Ualk3ThjKldjmoQQQoiyTKNViM+ELafiuZSURUxCGqdupugSJQBLcxW+rnZcTExnX2wS+2KTmLbhFL5uttT3dqKBjzP1vZ3wcrbhyJU7RF28zb6LSdxOzwGgVyMvPnmqEWay0K7RSdIkhBBClNCt1Gx+OniVVXsvc+OuBUQf1dtvbqaibe0q9GnsQ1h9L5ztLLmalEHEqXi2nIrjwKU7XE3K5GpSJptPxhd6DRtLM/oE+zDjyUZYmJf5uakrJEmahBBCiEd06HIS30Ze5s8TN1Fr8oabWJkp1PVyJsDDgQAPB2pXdaCFvxvuDvpPXPu62TGivT8j2vtzN1PNyRt3OXUjJe/rZgo3kjNpVN2Z1v5VaF27CsHVnbG2MDfFbYp/SNIkhBBCPIJF2y4wZ/NZ3esQPxcGtaiO6lo0TzzWuliPsjvbWtK2tjtta7uXRqjCQCRpEkIIIYrp+72XdQnT002rM7xdTRpWc0atVrPxRrRpgxOlRpImIYQQ4j/upOdw+Modgqu7UNVRv1vtf9HXmfy/EwC83jWACfLYf6UhSZMQQgjxjwsJqSzbfYlfD18jO1eLlYUZTzetxsj2tQjwcGDr6Xgm/HQURcmbJ2l8j7qmDlkYkSRNQgghKr29F2/z1fYYdpy7pdvm7mBNYlo2P+6/yo/7r9KxblX2XbyNRqvwVEg1mSepEpKkSQghRKWlKApLd11k5p9nUBRQqaBHPU9Gtvenpb8bBy/fYcnOi/x1Op6d/yRU3et5MuuZYJknqRKSpEkIIUSllKvRMvn/TrJ63xUAnmpajbHd6lCjir2uTIuabrSo6cbFW2l8F3UZjVbhvd71sJR5kiolSZqEEEJUOqlZasasPsLOc7dQqeC9XvUY2d7/vt1ttao6MOXxBkaOUpQ1kjQJIYSoVK4mZTDqu4OciUvFxtKMBQNCCGvgZeqwRDkgSZMQQohKQaNVWBl5ibmbz5Kp1lDV0ZplQ5sTXN3F1KGJckKSJiGEEBXembgU3v7lOEevJgPQsqYb859tTHVXO9MGJsoVSZqEEEJUWNm5Ghb9fYEvt8eQq1VwtLZgUq96DGjhK0+/iWKTpEkIIUSFdOBSEu/8coyYW+kA9KjvybQnGuLlbGPiyER5JUmTEEKICiUlS83sTWf4YW/eVALuDtZ89EQDwht6yWSUokQkaRJCCFFh/H0mnnd/PUFcShYAzzb35d1e9XC2szRxZKIikKRJCCFEuZeWncv0DadYc+AqADWr2PHxU41oW9vdxJGJikSSJiGEEOXagUtJvPHTUa4kZaBSwch2/rwZFoiNpbmpQxMVjCRNQgghyiWNVmHulrMs3hGDokA1F1vm9mtMm9pVTB2aqKAkaRJCCFEuzY84y1fbYwB4pll1Jvepj5ONjF0SpUeSJiGEEOXOphNxLNqWlzDNfjqY/i18TRyRqAxkmWYhhBDlyoWENN74KRqAF9r7S8IkjEaSJiGEEOVGapaa0d8fJD1HQ+tabrwTHmTqkEQlIkmTEEKIckGrVXjjp6NcvJWOl5MNCwc1xcJcfo0J45HvNiGEEOXC1zsvsuVUPFbmZiwe0gx3B2tThyQqGUmahBBClHkJKVl89tc5AKY+0YAmvi6mDUhUSpI0CSGEKPO+3B5Ddq6WZjVcGSADv4WJSNIkhBCiTLuenMnqfXmL777Ro64suitMRpImIYQQZdrCvy+Qo9HSplYV2gbIWnLCdCRpEkIIYXKpWWpupWYX2H7ldgbrDuYtwvtGaF1jhyWEHkmahBBCmNSFhFS6zttB20+2smx3LIqi6PYt2HqeXK1Cx7pVaV7TzYRRCiFJkxBCCBO6kJDGgCX7uJWajVqjMG3DKUZ9d4jkjBwuJKTx25FrQN5YJiFMTdaeE0IIYRIxt9IYuHQviWnZBHk58lTTaszdfI6/TsfTa8EufN3s0CrQvZ4njWWKAVEGSNIkhBDC6GIT0xm4ZC+3UvMSptWjWuNmb0Xb2u68uvowl25ncONuFgATpJVJlBHSPSeEEMKort3JYOCSvSSkZhPo6ciqF1rhZm8FQMNqzmx4vQOPN/YB4Omm1anv42TKcIXQkZYmIYQQRvXF1gvEpWRRx8OBVaNaUeU/y6E4WFuwYEAT3gwNpJqrrYmiFKIgSZqEEEIYTUZOLn8cvwnAjCcb3Xf9OJVKhV8VO2OGJsRDSfecEEIIo9l0Io607Fz83OxoUdPV1OEIUSySNAkhhDCanw/lTSHwTLPqshyKKHdMmjTt3LmTPn364OPjg0qlYv369Xr7hw0bhkql0vvq2bOnXpmkpCQGDx6Mk5MTLi4ujBw5krS0NL0yx44do0OHDtjY2ODr68vs2bMLxLJu3TqCgoKwsbGhUaNGbNy40eD3K4QQldm1OxlExtwG4Kmm1UwcjRDFZ9KkKT09ncaNG7No0aL7lunZsyc3b97Uff344496+wcPHszJkyeJiIhgw4YN7Ny5k9GjR+v2p6SkEBoaSo0aNTh06BBz5sxhypQpLFmyRFcmMjKSgQMHMnLkSI4cOULfvn3p27cvJ06cMPxNCyFEJfXr4esAtK1dhequMl5JlD8mHQgeHh5OeHj4A8tYW1vj5eVV6L7Tp0+zadMmDhw4QPPmzQH44osv6NWrF3PnzsXHx4dVq1aRk5PD8uXLsbKyokGDBkRHRzN//nxdcrVgwQJ69uzJxIkTAZg2bRoREREsXLiQxYsXG/COhRCiclIURdc11695dRNHI8SjKfNPz23fvh0PDw9cXV3p2rUr06dPp0qVKgBERUXh4uKiS5gAunfvjpmZGfv27ePJJ58kKiqKjh07YmVlpSsTFhbGrFmzuHPnDq6urkRFRTFhwgS964aFhRXoLrxXdnY22dn/Li6ZkpICgFqtRq1WG+LWdfLPZ+jzioKkro1H6tp4ykJdH7h0hytJGdhbm9O1bpUK+76XhbquLAxV18U5vkwnTT179uSpp57C39+fmJgY3n33XcLDw4mKisLc3Jy4uDg8PDz0jrGwsMDNzY24uDgA4uLi8Pf31yvj6emp2+fq6kpcXJxu271l8s9RmJkzZzJ16tQC27ds2YKdXek0O0dERJTKeUVBUtfGI3VtPKas69UXzAAzGjmr2f7XFpPFYSzyfW08Ja3rjIyMIpct00nTgAEDdP9v1KgRwcHB1K5dm+3bt9OtWzcTRgaTJk3Sa51KSUnB19eX0NBQnJwMO3utWq0mIiKCHj16YGlpadBzC31S18YjdW08pq7r9OxcJh3aAWgY+3grmteouFMNmLquKxND1XV+T1FRlOmk6b9q1aqFu7s7Fy5coFu3bnh5eZGQkKBXJjc3l6SkJN04KC8vL+Lj4/XK5L9+WJn7jaWCvLFW1tYFJ2WztLQstR+U0jy30Cd1bTxS18ZjqrreeiyejBwNNarY0bp21Uox1YB8XxtPSeu6OMeWq3marl27xu3bt/H29gagTZs2JCcnc+jQIV2Zv//+G61WS6tWrXRldu7cqddnGRERQWBgIK6urroyW7du1btWREQEbdq0Ke1bEkKICk83N1NTmZtJlG8mTZrS0tKIjo4mOjoagNjYWKKjo7ly5QppaWlMnDiRvXv3cunSJbZu3coTTzxBQEAAYWFhANSrV4+ePXsyatQo9u/fz549e3j11VcZMGAAPj55iz0OGjQIKysrRo4cycmTJ1m7di0LFizQ61obO3YsmzZtYt68eZw5c4YpU6Zw8OBBXn31VaPXiRBCVCTn41OJungblQqeaiZPzYnyzaRJ08GDBwkJCSEkJASACRMmEBISwuTJkzE3N+fYsWM8/vjj1K1bl5EjR9KsWTN27dql1y22atUqgoKC6NatG7169aJ9+/Z6czA5OzuzZcsWYmNjadasGW+88QaTJ0/Wm8upbdu2rF69miVLltC4cWN+/vln1q9fT8OGDY1XGUIIUQF9uT0GgLD6XlRzkcV3Rflm0jFNnTt3RlGU++7fvHnzQ8/h5ubG6tWrH1gmODiYXbt2PbBMv3796Nev30OvJ4QQomiu3M7g/47eAGBMlwATRyNEyZWrMU1CCCHKj8U7Y9BoFTrWrUqj6s6mDkeIEpOkSQghhMHFp2Tx88G8AeCvSiuTqCAkaRJCCGFwS3deJEejpUVNV1r6u5k6HCEMQpImIYQQBnUnPYdV+64AMpZJVCySNAkhhDCoFXtiyVRraFjNiU51q5o6HCEMRpImIYQQBpOapWZl5CUAxnQOkMksRYUiSZMQQgiD+S7qMilZudSuak9Yg/svRSVEeSRJkxBCCIO4lZrNV/9MZvlq1wDMzKSVSVQskjQJIYQwiLmbz5KWnUvj6s480biaqcMRwuAkaRJCCFFix6/d5adDVwGY3KeBtDKJCkmSJiGEECWiKApTfz+JokDfJj40q+Fq6pCEKBWSNAkhhCiR34/d5ODlO9hamvN2eJCpwxGi1EjSJIQQ4pFl5miYufE0AK90ro23s62JIxKi9EjSJIQQ4pEt3hHDzbtZVHOxZVTHWqYOR4hSJUmTEEKIR3I1KYPFO/KmGHivdz1sLM1NHJEQpUuSJiGEEMWmKArv/HqM7FwtbWpVIbyhTGQpKj5JmoQQQhTb2gNX2XPhNjaWZnzydCNZLkVUCiVOmlJSUli/fj2nT582RDxCCCHKuLi7Wcz4I+8z/83QQGpUsTdxREIYR7GTpv79+7Nw4UIAMjMzad68Of379yc4OJhffvnF4AEKIYQoOxRF4f31x0nNzqWJrwvD2/mbOiQhjKbYSdPOnTvp0KEDAL/99huKopCcnMznn3/O9OnTDR6gEEKIsuP/jt7gr9MJWJqrmP1MMOYy87eoRIqdNN29exc3NzcANm3axNNPP42dnR29e/fm/PnzBg9QCCFE2XA7LZupv58C4LWudajr6WjiiIQwrmInTb6+vkRFRZGens6mTZsIDQ0F4M6dO9jY2Bg8QCGEEKan1Sq8/ctxktJzCPJy5OXOtU0dkhBGZ1HcA8aNG8fgwYNxcHDAz8+Pzp07A3nddo0aNTJ0fEIIIcqA2ZvP8tfpeKwszJjbrzGW5vLwtah8ip00vfLKK7Rs2ZKrV6/So0cPzMzyfnBq1aolY5qEEKIC+ungVd0klnOeCaZhNWcTRySEaRQ7aQJo3rw5wcHBxMbGUrt2bSwsLOjdu7ehYxNCCGFiey/e5r3fjgPwerc6PNGkmokjEsJ0it2+mpGRwciRI7Gzs6NBgwZcuXIFgNdee41PPvnE4AEKIYQwjUuJ6bz0wyHUGoXHgr0Z372OqUMSwqSKnTRNmjSJo0ePsn37dr2B3927d2ft2rUGDU4IIYRppGapGfHtAZIz1DT2dWFuv8Yy67eo9IrdPbd+/XrWrl1L69at9X6AGjRoQExMjEGDE0IIYRoL/77AxVvpeDvbsHRIM1mMVwgeoaXp1q1beHh4FNienp4uf4UIIUQFcOV2Biv2XAJgxpMN8XCS6WSEgEdImpo3b84ff/yhe52fKH3zzTe0adPGcJEJIYQwiZl/niZHo6VDHXe6BBb8I1mIyqrY3XMff/wx4eHhnDp1itzcXBYsWMCpU6eIjIxkx44dpRGjEEIII9l38TZ/nojDTAXv964vPQhC3KPYLU3t27cnOjqa3NxcGjVqxJYtW/Dw8CAqKopmzZqVRoxCCCGMQKtVmPZH3jIpA1r6Eegly6QIca9Hmqepdu3aLF261NCxCCHEA11PzuTlHw4xop0/fUNkviBD++XwNU5cT8HR2oIJPeqaOhwhypxiJ0358zLdj5+f3yMHI4QQDxJxMo5j1+7y08GrkjQZWHp2LnM2nwVgTNcA3B2sTRyREGVPsZOmmjVrPrCPW6PRlCggIYS4n+vJmQCkZuWaOJKK56vtMSSkZuPnZsfwdjVNHY4QZVKxk6YjR47ovVar1Rw5coT58+czY8YMgwUmhBD/dSM5C4CULLWJI6lYdpy7xZfbLwAwKTwIawuZk0mIwhQ7aWrcuHGBbc2bN8fHx4c5c+bw1FNPGSQwIYT4r2vS0mRwMbfSeHX1YbQKPNOsOj0bepk6JCHKrGI/PXc/gYGBHDhwwFCnE0KIAq7fyUuaUjLVKIpi4mjKv7sZakZ9e5DUrFya1XBlxpMNZYoBIR6g2C1NKSkpeq8VReHmzZtMmTKFOnVkMUchROnIUmtITMsGIFerkKnWYGf1SA8ACyBXo+XVHw9zMTEdH2cbFj/XTLrlhHiIYn/iuLi4FPhLRFEUfH19WbNmjcECE0KIe934p2suX2pWriRNJfDxxjPsOp+IraU5S55vTlVHeVpOiIcp9ifOtm3b9F6bmZlRtWpVAgICsLCQDzAhROm4/p+kKSVTjaesifZINhy7wfI9sQDM69+YhtWcTRyREOVDscc0derUSe+rQ4cOBAUFPVLCtHPnTvr06YOPjw8qlYr169fft+xLL72ESqXis88+09uePwXCvV+ffPKJXpljx47RoUMHbGxs8PX1Zfbs2QXOv27dOoKCgrCxsaFRo0Zs3Lix2PcjhCg9+eOZ8skTdI/mdlo2k/93EoAxXWrTq5G3iSMSovwoUqbzf//3f0U+4eOPP17ksunp6TRu3JgRI0Y88Km73377jb179+Lj41Po/o8++ohRo0bpXjs6/jv1f0pKCqGhoXTv3p3Fixdz/PhxRowYgYuLC6NHjwYgMjKSgQMHMnPmTB577DFWr15N3759OXz4MA0bNizy/QghSk+BliZ5gu6RTPn9FEnpOQR5OTK2m8z6LURxFClp6tu3b5FOplKpijW5ZXh4OOHh4Q8sc/36dV577TU2b95M7969Cy3j6OiIl1fhj8muWrWKnJwcli9fjpWVFQ0aNCA6Opr58+frkqYFCxbQs2dPJk6cCMC0adOIiIhg4cKFLF68uMj3I4QoPQVamjKlpam4/jqdwO9Hb2BupmLOM42xsjDYA9RCVApFSpq0Wm1px3Hf6w4ZMoSJEyfSoEGD+5b75JNPmDZtGn5+fgwaNIjx48frugujoqLo2LEjVlZWuvJhYWHMmjWLO3fu4OrqSlRUFBMmTNA7Z1hY2AO7C7Ozs8nOzta9zn+qUK1Wo1Yb9sM8/3yGPq8oSOraeIpb11fvZACgUoGiwJ30bHmfikitVpORC9P/L28x3pHtahDkaSf1VwrkM8R4DFXXxTm+TI/cnjVrFhYWFrz++uv3LfP666/TtGlT3NzciIyMZNKkSdy8eZP58+cDEBcXh7+/v94xnp6eun2urq7ExcXptt1bJi4u7r7XnTlzJlOnTi2wfcuWLdjZ2RX5HosjIiKiVM4rCpK6Np6i1nXMTXNARVVrhYQsFQePnsA18XjpBleBrL9kxq20HDxsFOpkX2DjxgumDqlCk88Q4ylpXWdkZBS57CMlTenp6ezYsYMrV66Qk5Ojt+9BCU5xHDp0iAULFnD48OEHTrZ2bwtRcHAwVlZWvPjii8ycORNr69J7hHbSpEl6105JScHX15fQ0FCcnJwMei21Wk1ERAQ9evTA0tLSoOcW+qSujac4da3RKkzY9xeg0Ky2F3+ejMenRm16hcqYnKLYdjqOfVHHUAGfP9eSZjVcTR1ShSWfIcZjqLr+7/yTD/JIa8/16tWLjIwM0tPTcXNzIzExETs7Ozw8PAyWNO3atYuEhAT8/Px02zQaDW+88QafffYZly5dKvS4Vq1akZuby6VLlwgMDMTLy4v4+Hi9Mvmv88dB3a/M/cZJAVhbWxealFlaWpbaD0ppnlvok7o2nqLU9a3kTDRaBQszFXU8HfnzZDxpOVp5j4rgalIG7/9+FoDn2/jROsDDxBFVDvIZYjwlreviHFvsUYDjx4+nT58+3LlzB1tbW/bu3cvly5dp1qwZc+fOLe7p7mvIkCEcO3aM6Oho3ZePjw8TJ05k8+bN9z0uOjoaMzMzPDzyPhjatGnDzp079fosIyIiCAwMxNXVVVdm69ateueJiIigTZs2BrsfIcSjy39yztvFBhe7vPGJMhD84W6lZjNk2T4SUrPxslWY0D3A1CEJUa4Vu6UpOjqar7/+GjMzM8zNzcnOzqZWrVrMnj2boUOHFmvB3rS0NC5c+LdfPTY2lujoaNzc3PDz86NKlSp65S0tLfHy8iIwMBDIG+S9b98+unTpgqOjI1FRUYwfP57nnntOlxANGjSIqVOnMnLkSN5++21OnDjBggUL+PTTT3XnHTt2LJ06dWLevHn07t2bNWvWcPDgQZYsWVLc6hFClIL8J+equdjiZJv3V6Es2vtgKVlqhi7fz6XbGVRzsWF0rTSZQV2IEip2S5OlpSVmZnmHeXh4cOXKFQCcnZ25evVqsc518OBBQkJCCAkJAfLGJ4WEhDB58uQiHW9tbc2aNWvo1KkTDRo0YMaMGYwfP14v2XF2dmbLli3ExsbSrFkz3njjDSZPnqybbgCgbdu2rF69miVLltC4cWN+/vln1q9fL3M0CVFG5Lc0VXOxw9Em7xe/TG55f1lqDS+sPMipmym4O1ixclgzXGSVFCFKrNh/doSEhHDgwAHq1KlDp06dmDx5MomJiXz//ffFTjI6d+5crJXK/zuOqWnTpuzdu/ehxwUHB7Nr164HlunXrx/9+vUrcixCCOO5lt/S5GqLk01eS5N0zxVOrdHy6urD7L+UhKO1BSuHt6RmFTtOmTowISqAYrc0ffzxx3h75027P2PGDFxdXXn55Ze5deuWdGcJIUpFfktTdRdbnGzz/taT7rmC1BotY9cc4a/TCVhbmPHN0OayrpwQBlTslqbmzZvr/u/h4cGmTZsMGpAQQvzX9X8mttRraZLuOT3ZuRrGrDrCX6fjsTI348vBTWlVq8rDDxRCFFmxW5qmT59ObGxsacQihBAFKIpyz5imf5OmLLWW7NyiL9tUkWWpNYz67hB/nY7H2sKMJc83o1s9z4cfKIQolmInTevWrSMgIIC2bdvy5ZdfkpiYWBpxCSEEAEnpOWSp85Zy8naxwcHm3wZy6aKDjJxchq84wM5zt7C1NGf5sBZ0DpS5mIQoDcVOmo4ePcqxY8fo3Lkzc+fOxcfHh969e7N69epiTUUuhBBFcSM5C4CqjtZYW5hjbqbCwVrGNQHkarQMX3GAqIu3cbC24NsRLWkX4G7qsISosB5piesGDRrw8ccfc/HiRbZt20bNmjUZN27cA2fQFkKIR3E9+Z/xTC62um1O+dMOVPIn6Fbtu8K+2CQcrC34fmRLWvq7mTokISq0R0qa7mVvb4+trS1WVlayqrMQwuDunW4gX/4El5V5MHhiWjbztuQtj/J2z0BC/GQ9OSFK2yMlTbGxscyYMYMGDRrQvHlzjhw5wtSpU4mLizN0fEKISu7e6Qby5U9wWZm752ZvOkNKVi4NfJwY1KqGqcMRolIo9pQDrVu35sCBAwQHBzN8+HAGDhxItWrVSiM2IYT4dwmVe1uaKvkEl4ev3OGng9cA+OiJhpibqUwckRCVQ7GTpm7durF8+XLq169fGvEIIYSee6cbyFeZu+c0WoUP/3cSgGeaVadZDemWE8JYip00zZgxozTiEEKIQumSJlfpngNYc+AKx6/fxdHGgrd7Bpk6HCEqlRIPBBdCiNKSnp1LckZea5L+03OVs3vuTnoOczbnDf6e0KMuVR1lFV4hjEmSJiFEmZXfyuRkY4HjP4kSoFt/LqWStTQt2Hqe5Aw1QV6ODGktg7+FMDZJmoQQZda/g8Dt9LbntzSlVqIxTQmpWazefwWA93vXx8JcPr6FMDb5qRNClFnXdIPAbfS2O+q65ypPS9M3u2LJydXS1M+FdgGyEK8QplDspGnTpk3s3r1b93rRokU0adKEQYMGcefOHYMGJ4So3G4U8uQc3Ns9VzlampLSc/hh72UAXutaB5VKphgQwhSKnTRNnDiRlJQUAI4fP84bb7xBr169iI2NZcKECQYPUAhReRU2RxNUvoHgK/bEkpGjoWE1JzoHVjV1OEJUWsWeciA2NlY3R9Mvv/zCY489xscff8zhw4fp1auXwQMUQlRe/87RpD+mqTJNOXA3U83KPZcAeLWLtDIJYUrFbmmysrIiIyNvAc2//vqL0NBQANzc3HQtUEIIYQjX7vyzWO9/W5r+mdwyNTsXjVYxelzG9F3kJVKzc6nr6UBofU9ThyNEpVbslqb27dszYcIE2rVrx/79+1m7di0A586do3r16gYPUAhROSWkZhGfko1KBbWr2uvty29pAkjLysXZzvK/h1cI6dm5LNsTC8CYLgGYyXIpQphUsVuaFi5ciIWFBT///DNfffWVbt25P//8k549exo8QCFE5RR9JRmAuh6OenM0AVhbmGNtkffxVZEHg6/ad5nkDDX+7vY8Fuxj6nCEqPSK3dLk5+fHhg0bCmz/9NNPDRKQEEIAHLmaDEATX5dC9zvZWnIrNbvCJk2ZORqW7MxrZXq5c21ZlFeIMuCR5mmKiYnh/fffZ+DAgSQkJAB5LU0nT540aHBCiMorv6UpxM+l0P1O/3TRVdS5mr7afoHEtGyqu9ryZEg1U4cjhOARkqYdO3bQqFEj9u3bx6+//kpaWhoAR48e5cMPPzR4gEKIykejVTh6LRmAED/XQss4VuBZwS/fTmfxzosAvN+7HpYy+7cQZUKxfxLfeecdpk+fTkREBFZWVrrtXbt2Ze/evQYNTghROZ2LTyUjR4ODtQUBHg6Flsl/gq4irj83bcMpcnK1dKjjTlgDL1OHI4T4R7GTpuPHj/Pkk08W2O7h4UFiYqJBghJCVG5H/umaC67ufN+xPP92z1WslqZtZxL463QCFmYqPuzTQOZlEqIMKXbS5OLiws2bNwtsP3LkiO5JOiGEKIkjV/KWZLrfeCa4Z66mCtTSlJ2rYerveWNDR7T3v28rmxDCNIqdNA0YMIC3336buLg4VCoVWq2WPXv28Oabb/L888+XRoxCiEom+p8n50J8Cx/PBP/O1VSRnp77Zlcsl25n4OFozWtdA0wdjhDiP4qdNH388ccEBQXh6+tLWloa9evXp2PHjrRt25b333+/NGIUQlQidzPVnE/Ie8CkyYNamirY+nM3kjNZ+PcFAN7tVa/A3FRCCNMr9jxNVlZWLF26lA8++IATJ06QlpZGSEgIderUKY34hBCVzLF/nprzc7PD3cH6vuX+HQhe/pOmXI2Wd349TqZaQ4uarjzRRCayFKIsKnbSlM/Pzw8/Pz9DxiKEELpB4Peb1DKfUwVZtFdRFKb8fpKd525hY2nGtL4NZfC3EGVUkZKmCRMmMG3aNOzt7ZkwYcIDy86fP98ggQkhKqeiDAKHe7rnynlL07Ldsfyw9woqFXz2bAhBXk6mDkkIcR9FSpqOHDmCWp33wXT48OH7/hUkfx0JIUpCUZR/B4HfZ1LLfE625X9G8E0n4pix8TQA7/WqR8+GMieTEGVZkZKmbdu26f6/ffv20opFCFHJXb6dwZ0MNVYWZtT3fnCLS3mfETz6ajLj1h5BUWBI6xqMbO9v6pCEEA9RrKfn1Go1FhYWnDhxorTiEUJUYkeu5nXNNfRxwsriwR9P/3bP5aIoSqnHZkhXkzJ44dsDZKm1dAmsyod96ktLvRDlQLGSJktLS/z8/NBoNKUVjxCiEvt3EPiDu+bg3+45jVYhI6f8fCalZql54duDJKblUM/biS8GNcVC1pYTolwo9k/qe++9x7vvvktSUlJpxCOEqMTyk6aHDQIHsLU01y2xUpaeoEtKz2HmxtNsO5tQYF+uRsurq49wNj4VD0drlg9rjoP1Iz/ELIQwsmL/tC5cuJALFy7g4+NDjRo1sLe319t/+PBhgwUnhKg8stQaTt9MAYqWNKlUKpxsLLiToSYlS42Xs00pR/hw2bkaXvz+IAcu3eHrnRd5trkvH/Spr0uMpm04xY5/phZYNrQF3s62Jo5YCFEcxU6a+vbtWwphCCEquxPX75KrVajqaE01l6IlE062lnlJUxmYFVxRFN777QQHLt3BxtKM7Fwtaw9eJfJiIvP7N+HUjRS+jboMwGfPNqFRdWcTRyyEKK5iJ00ffvhhacQhhKjkomJuA3mTWhZ1UHRZWn9uyc6L/HzoGmYqWDKkOVYWZrzx01GuJmXS/+so8u/orZ6B9GzobdJYhRCP5pFGHyYnJ/PNN98wadIk3dimw4cPc/369WKdZ+fOnfTp0wcfHx9UKhXr16+/b9mXXnoJlUrFZ599prc9KSmJwYMH4+TkhIuLCyNHjiQtLU2vzLFjx+jQoQM2Njb4+voye/bsAudft24dQUFB2NjY0KhRIzZu3FisexFCPLpcjZY1B64CEFrfs8jHOemmHTDtmKaIU/F8sukMAJMfq0/HulVpXasKm8Z14Jlm1VEU0CrQr1l1Xu5U26SxCiEeXbGTpmPHjlG3bl1mzZrF3LlzSU5OBuDXX39l0qRJxTpXeno6jRs3ZtGiRQ8s99tvv7F37158fAquxzR48GBOnjxJREQEGzZsYOfOnYwePVq3PyUlhdDQUGrUqMGhQ4eYM2cOU6ZMYcmSJboykZGRDBw4kJEjR3LkyBH69u1L3759ZWoFIYzkr9PxXE/OxM3eij6Ni77uWmkt2puZo2HX+VvM3XyWbyMvkZOrvW/Z0zdTGLsmb76lwa38GNq2pm6fo40lc/s1ZsXwFrzXqx4znmwkUwsIUY4Vu3tuwoQJDBs2jNmzZ+Po6Kjb3qtXLwYNGlSsc4WHhxMeHv7AMtevX+e1115j8+bN9O7dW2/f6dOn2bRpEwcOHKB58+YAfPHFF/Tq1Yu5c+fi4+PDqlWryMnJYfny5VhZWdGgQQOio6OZP3++LrlasGABPXv2ZOLEiQBMmzaNiIgIFi5cyOLFi4t1T0KI4lsZeQmAgS19sbE0L/JxulnBDdDSlJ6dy4o9sew6n8iRK8nkaP5NlH7cf4W5/RrTsNq/45BycrV8F3WJBVvPk5GjoW3tKkx5vEGhSVGXQA+6BHqUOEYhhGkVu6XpwIEDvPjiiwW2V6tWjbi4OIMElU+r1TJkyBAmTpxIgwYNCuyPiorCxcVFlzABdO/eHTMzM/bt26cr07FjR6ysrHRlwsLCOHv2LHfu3NGV6d69u965w8LCiIqKMuj9CCEKOhOXyt6LSZibqXiudY1iHetowPXnxq+NZu6Wc+yLTSJHo8Xb2Ya+TXxws7fiTFwqTyzaw7wtZ8nO1fDXqXjCPtvJ9D9Ok5qVS+Pqznw5uCmWMt+SEBVasVuarK2tSUlJKbD93LlzVK1a1SBB5Zs1axYWFha8/vrrhe6Pi4vDw0P/rzcLCwvc3Nx0CVxcXBz+/vrLE3h6eur2ubq6EhcXp9t2b5kHJYHZ2dlkZ2frXufXiVqt1q3TZyj55zP0eUVBUtfFc/z6XVZGXuF8Qhrz+jWijodDkY/Nr+Pvoi4BEFrPA3c7i2LVvb1VXpKSnJ5TovdsX2wSW07FY26m4r3wQDrUqUINNztUKhW303P4aMNpNp6I54u/L/DD3svcyci7VhV7K97oEcBTIdUwN1OV2e8b+b42Hqlr4zFUXRfn+GInTY8//jgfffQRP/30E5A3V8qVK1d4++23efrpp4t7uvs6dOgQCxYseOACwaY0c+ZMpk6dWmD7li1bsLOzK5VrRkRElMp5RUFS1/enUeB4kortN82ITf33Z/ON73fzUr37j/0pTLoa1kffAFTU4TobNxbvYZJrN1WAOedir7Bx46ViHZtPq8D84+aAitZVNVRJOsGpfXDqnjJhjuBZV8W6i2bcyVBjrlLo4q3Qo1oGNvHH2Lzp2CNd29jk+9p4pK6Np6R1nZGRUeSyxU6a5s2bxzPPPIOHhweZmZl06tSJuLg42rRpw4wZM4p7uvvatWsXCQkJ+Pn56bZpNBreeOMNPvvsMy5duoSXlxcJCfqz7ubm5pKUlISXV95q4V5eXsTHx+uVyX/9sDL5+wszadIkJkyYoHudkpKCr68voaGhODk9eKHR4lKr1URERNCjRw8sLS0Nem6hT+q6cHcz1UTG3GZPzG22n0skPiWvldXSXEVoPU82nYrndLIZ3g1bF2liSsir63dW/oVaq6KelyOvPtu62H8gZR25zq+XTuLgWpVevZoV97YA+L+jN7m69zj21ubMG9aJKg7WhZbrBbyYnsOmk/F0CKiCn1vp/HFUGuT72nikro3HUHVdWO/Z/RQ7aXJ2diYiIoI9e/Zw9OhR0tLSaNq0aYExQSU1ZMiQQscZDRkyhOHDhwPQpk0bkpOTOXToEM2a5X1g/v3332i1Wlq1aqUr895776FWq3WVGhERQWBgIK6urroyW7duZdy4cbprRURE0KZNm/vGZ21tjbV1wQ9XS0vLUvtBKc1zC31S13n+OhXPl9svEH01Ge09a+K62VvxXCs/nmtdAw8nG97++RhrD15lwbYYVr3Qukjn1mgVdsfnda8Nb+evN+6wqFzt82YBT83WPNL7laXWMP+vCwC80jkAL9cHdy96uVgyrF2tYl+nrJDva+ORujaektZ1cY595EWP2rVrR7t27R71cADS0tK4cOGC7nVsbCzR0dG4ubnh5+dHlSpV9MpbWlri5eVFYGAgAPXq1aNnz56MGjWKxYsXo1arefXVVxkwYIBueoJBgwYxdepURo4cydtvv82JEydYsGABn376qe68Y8eOpVOnTsybN4/evXuzZs0aDh48qDctgRCVTeSFRF764RC5/2RLAR4OdKxTlQ513WlTq4reU26vdQvg1yPX2HPhNlExt2lTu8r9Tqvz95lbJGWrcLWz5PEmRZ9m4F5OtiUbCP5t5CWuJ2fi7WzDiHb+Dz9ACFGpFflRj6ioKDZs2KC37bvvvsPf3x8PDw9Gjx6tNzC6KA4ePEhISAghISFA3nQGISEhTJ48ucjnWLVqFUFBQXTr1o1evXrRvn17vWTH2dmZLVu2EBsbS7NmzXjjjTeYPHmy3lxObdu2ZfXq1SxZsoTGjRvz888/s379eho2bFis+xGiooi5laZLmHo18mLPO135a0InJvepT5dAjwLTAlR3tePZFr4AzI84i6IohZ1Wz/f7rgDQv1n1Yk0zcK/8GcEfZXLLpPQcFm7L+6PtzdBAbK0eLQYhROVR5Jamjz76iM6dO/PYY48BcPz4cUaOHMmwYcOoV68ec+bMwcfHhylTphT54p07dy7Sh2u+S5cuFdjm5ubG6tWrH3hccHAwu3btemCZfv360a9fvyLHIkRFdSc9hxErD5CSlUuInwvz+zcpUlLzapc6/HTwGgcu3WHX+UQ61r3/07RRMbeJupiEGQqDWlZ/5FhLMrnl51vPk5qVS31vJ54MqfbIMQghKo8itzRFR0fTrVs33es1a9bQqlUrli5dyoQJE/j88891T9QJIcqn7FwNL/5wiMu3M6jmYsuSIc2L3Ark5WzDc63y5lmaF3Huvn8QabQKU38/CUA7TwWfIi7OW5j87rnsXC1Zak2RjzsTl8IPe/MWz32vdz3MzMreE7pCiLKnyEnTnTt39OYy2rFjh95s3i1atODq1auGjU4IYTSKovDuryfYH5uEg7UFy4e1oKpj4U+S3c/LnWtja2nO0avJbD2dUGiZNQeucCYuFWdbC8J9izdFwX85WP/bWF7ULrqcXC0T1h4lV6vQo74n7QLcSxSDEKLyKHLS5OnpSWxsLAA5OTkcPnyY1q3/fUomNTVVnhQQohxbtO0Cvxy+hrmZikWDmxLo5fjwg/6jqqM1z7fNa236+M/T3E7TH+d4N1PNvC3nAHitS23sS/iRYW6mwtE6f1xT0broFv59nlM3U3C1s2TGkzJuUQhRdEVOmnr16sU777zDrl27mDRpEnZ2dnTo0EG3/9ixY9SuLat3C1Ee/XbkGnP/SWamPN6ATg8Yj/QwL3WsjbuDNRdvpfPskr3Ep2Tp9n2x9TxJ6TkEeDgwqKVvieOGe5+ge3hL09GrySzaHgPA9L6N8HC0MUgMQojKochJ07Rp07CwsKBTp04sXbqUpUuX6s2rsnz5ckJDQ0slSCFE6Ym8kMhbP+fNaP1ip1oMKeb6b//lam/F2hdb4+1sw4WENPotjuJqUgYxt9J0C/N+8Fh9g63T5u6Q9zn05/GbDyyXpdYw4adoNFqFPo196B3sbZDrCyEqjyI/Pefu7s7OnTu5e/cuDg4OmJvrDw5dt24dDg5FX3dKCGF6Z+NSefGHQ6g1Co8Fe/N2WJBBzlu7qgM/vdiG55bt4/LtDPotjsLXzZZcrULXIA861a1qsLW5Xu5cm5d+OMzXOy/SNsD9vq1kczefJeZWOlUdrZn2RMEFwIUQ4mGK/aees7NzgYQJ8h79f5QZfYUQphGfksXwFftJzcqlZU035vZrbNCnyHzd7Fj3YhvqejoQl5LFgUt3sDBT8V7vega7BkDPht481zpvuaUJa6NJuKc7MN+eC4ks25M3JnPW041wsZPPKiFE8RmmfVwIUa5otQov/XCIG3ezqFXVniXPN3vkCSYfxMPJhjWj29CwWt56jCPa+1O7quFbpN/vXZ8gL0dup+cwbm1eFxxArkbLF1vPM3T5fhQFnm3uS9cgz4ecTQghCvfIy6gIIcqvTSfjOHIlGQdrC74d3rJUW17c7K34+aW2RF9NpmVNt1K5ho2lOQsHNaXPF7uJjLnNl9su0CvYmwk/HeXo1WQAejXyYnKf+qVyfSFE5SAtTUJUMhqtwvyIvCflRrb3x9fNrtSvaWNpTutaVUp1EskADwem982bQuDTv87R+/NdHL2ajJONBQsGNGHRoKbYW8vfiUKIRydJkxCVzPoj17mQkIaLnSUjO1SsRWqfbladp5pWQ6tAllpL+wB3No/vyBNNqqFSyazfQoiSkT+7hKhEcnK1fLY1r5XpxY61dWu3VSTTnmiIm50VAR4O9G/uK0ukCCEMRpImISqRdYeucjUpE3cHa4a2Ldl8TGWVvbUF7z8mY5eEEIYn3XNCVBJZag1fbL0AwKtdamNnJX8zCSFEcUjSJEQl8cPey8SlZOHjbMPAVn6mDkcIIcodSZqEqATSs3P56p81117vVgdrC8PPySSEEBWdJE1CVAKfbz3P7fQcalax4+lm1U0djhBClEuSNAlRwUVeSGTJrosAvNfbcAvlCiFEZSOfnkJUYHfScxj/UzSKAgNb+tGjviwhIoQQj0qSJiEqKEVReOfXY8SnZFOrqj0fPGbYhXKFEKKykaRJiApq7YGrbD4Zj6W5is8HhMgUA0IIUUKSNAlRAcXcSmPq76cAeDM0kIbVnE0ckRBClH+SNAlRwSiKwoS10WSqNbStXYVRHWqZOiQhhKgQJGkSooI5fOUOR6/dxc7KnPn9m8jaa0IIYSCSNAlRwfx25DoAPRt44eVsY+JohBCi4pCkSYgKJCdXyx/HbgLQN6SaiaMRQoiKRZImISqQneducSdDTVVHa9rWrmLqcIQQokKRpEmICmR9dF7X3OONfbCQmb+FEMKg5FNViAoiNUtNxKl4APo2ka45IYQwNEmahKggNp2IIztXS+2q9jSs5mTqcIQQosKRpEmICuJ/0TcAeDKkGiqVTDMghBCGJkmTECaSnavhalIGiqKU+FzxKVnsiUkE4AnpmhNCiFIhi1EJYQJ3M9UMWrqXkzdSqF3Vnt7BPvQJ9qaOp+Mjne//om+gKNC8hiu+bnYGjlYIIQRI0iSE0WXmaHjh2wOcvJECQMytdD7fep7Pt56nrqcDA1r4MaiVHzaW5oUen98ydW8XXP5TczI3kxBClB5JmoQwIrVGyyurDnHg0h0cbSxYNrQF15Mz+OPYTXacu8W5+DQ+2nCKJTsv8lq3APo188XKwgxFUTh+/S4/H7rG/x29Qa5GIcjLkfo+Tng723LyRgqW5ip6N/I29S0KIUSFJUmTEEai1Sq8ue4o287ewsbSjOXDWtCiphvgxpMh1bmbqeb3ozf4ctsFbtzN4r3fTrB4Rwx9gn3YejqBs/Gpeuc7ePkOBy/f0b3uHOiBq72Vke9KCCEqD0mahHiAM3EprD9yg2db+OLvbv/I51EUhSm/n+R/0TewMFPx1eBm/yRM/3K2teS51jXo17w6P+67wsJtMVxNyuTL7TEAWFuYEdbAi37Nq1PV0ZrTN1M4fTOV0zdTuJWazZguASW6VyGEEA8mSZMQ9/G/6Ou8/csxstRaVu+7zBeDmtKpbtVHOteaA1f5LuoyKhXM69+YLkEe9y1rbWHOsHb+PNvCj++iLhF9NZl2Ae70aeyDs62lrlyQlxNPhjxSOEIIIR6BJE1C/IdGC9M3nuHbqCtAXgvQ3Uw1w1fs591e9RjZ3r9Y8yDdvJvJx3+cBuCtsKAiTwlga2XOi51qF/8GhBBClAqZp0mIeySmZbPolLkuYXq1SwD73u1G/+bV0Sow/Y/TvLHuKFlqTZHOpygK7/92gtTsXJr4ujC6Y63SDF8IIUQpkqRJiH9k5mjov2Q/Makq7K3NWfxcM94MC8TG0pxZTwczpU99zM1U/Hr4Ok9/FUlUzO2HnvP3YzfZeiYBS3MVs58JxtxMZuoWQojyyqRJ086dO+nTpw8+Pj6oVCrWr1+vt3/KlCkEBQVhb2+Pq6sr3bt3Z9++fXplatasiUql0vv65JNP9MocO3aMDh06YGNjg6+vL7Nnzy4Qy7p16wgKCsLGxoZGjRqxceNGg9+vKNv2XrzN1TuZOFgq/PJia3o29NLtU6lUDGvnz3cjWuJsa8nJGykMXLqXocv3c+qf+Zb+Kyk9hyn/dxKAV7vUoe4jTlwphBCibDBp0pSenk7jxo1ZtGhRofvr1q3LwoULOX78OLt376ZmzZqEhoZy69YtvXIfffQRN2/e1H299tprun0pKSmEhoZSo0YNDh06xJw5c5gyZQpLlizRlYmMjGTgwIGMHDmSI0eO0LdvX/r27cuJEydK58ZFmbTnQt4yJI1cFWpXLfxJuXYB7kRM6MiQ1jWwMFOx49wten+xi3FrjhAZk6jXbffR7ydJSs8h0NORlzvL2CQhhCjvTDoQPDw8nPDw8PvuHzRokN7r+fPns2zZMo4dO0a3bt102x0dHfHy8vrv4QCsWrWKnJwcli9fjpWVFQ0aNCA6Opr58+czevRoABYsWEDPnj2ZOHEiANOmTSMiIoKFCxeyePHikt6mKCd2/5M01XV+8FpwHo42TOvbkJHt/Zm75Swbjt1kffQN1kffwMrCjOY1XAnwcGB99A3MVDDrmWCsLKQnXAghyrty8/RcTk4OS5YswdnZmcaNG+vt++STT5g2bRp+fn4MGjSI8ePHY2GRd2tRUVF07NgRK6t/J/0LCwtj1qxZ3LlzB1dXV6KiopgwYYLeOcPCwgp0F94rOzub7Oxs3euUlLwuGrVajVqtLunt6sk/n6HPK/51Oy2bM3F5k0fWdVaKVNfVnK34tF8jRratwcqoy0RdTCIhNZvImNtE/jPeaXjbGjTwspf3rhDyfW08UtfGI3VtPIaq6+IcX+aTpg0bNjBgwAAyMjLw9vYmIiICd3d33f7XX3+dpk2b4ubmRmRkJJMmTeLmzZvMnz8fgLi4OPz9/fXO6enpqdvn6upKXFycbtu9ZeLi4u4b18yZM5k6dWqB7Vu2bMHOrnQWTI2IiCiV8wo4nKgCzKlmp+BgWfy67moHXRpAQhacu6vi3F0VFioIUsewcWNM6QRdQcj3tfFIXRuP1LXxlLSuMzIyily2zCdNXbp0ITo6msTERJYuXUr//v3Zt28fHh55kwPe20IUHByMlZUVL774IjNnzsTa2rrU4po0aZLetVNSUvD19SU0NBQnJyeDXkutVhMREUGPHj2wtLR8+AGi2HavPwlcp0ewHxArdW0E8n1tPFLXxiN1bTyGquv8nqKiKPNJk729PQEBAQQEBNC6dWvq1KnDsmXLmDRpUqHlW7VqRW5uLpcuXSIwMBAvLy/i4+P1yuS/zh8Hdb8y9xsnBWBtbV1oUmZpaVlqPyilee7KTFEUImOSAGhfx530C7FS10YkdW08UtfGI3VtPCWt6+IcW+5Gp2q1Wr2xRP8VHR2NmZmZriWqTZs27Ny5U6/PMiIigsDAQFxdXXVltm7dqneeiIgI2rRpUwp3IMqaK0kZXE/OxNJcRfMarqYORwghRBll0pamtLQ0Lly4oHsdGxtLdHQ0bm5uVKlShRkzZvD444/j7e1NYmIiixYt4vr16/Tr1w/IG+S9b98+unTpgqOjI1FRUYwfP57nnntOlxANGjSIqVOnMnLkSN5++21OnDjBggUL+PTTT3XXHTt2LJ06dWLevHn07t2bNWvWcPDgQb1pCUTFtedC3qDtED9X7K3LfOOrEEIIEzHpb4iDBw/SpUsX3ev8MUJDhw5l8eLFnDlzhm+//ZbExESqVKlCixYt2LVrFw0aNADyusjWrFnDlClTyM7Oxt/fn/Hjx+uNNXJ2dmbLli2MGTOGZs2a4e7uzuTJk3XTDQC0bduW1atX8/777/Puu+9Sp04d1q9fT8OGDY1UE8KU8udnalfb/SElhRBCVGYmTZo6d+6Motx/Tpxff/31gcc3bdqUvXv3PvQ6wcHB7Nq164Fl+vXrp2vBEpWHVqsQGZOXNLWvU8XE0QghhCjLyt2YJiEM6dTNFO5kqLG3Mie4uoupwxFCCFGGSdIkKrX8VqbWtapgaS4/DkIIIe5PfkuISm33P4PA2wXIeCYhhBAPJkmTqLSyczXsj5WkSQghRNFI0iQqrSNXkslSa3F3sKaup4OpwxFCCFHGSdIkKi3dVAMBVVCpVCaORgghRFknSZOolNQaLb8evg5AxzpVTRyNEEKI8kCSJlEp/XHsJteTM3F3sKJ3sLepwxFCCFEOSNIkKh1FUVi8IwaA4e38sbE0N3FEQgghygNJmkSls/3sLc7EpWJvZc5zrWqYOhwhhBDlhCRNotL56p9WpkGt/HC2szRxNEIIIcoLSZpEpXLo8h32xyZhaa5iZPtapg5HCCFEOSJJk6hU8scyPRlSDS9nGxNHI4QQojyRpElUGhcSUok4FY9KBaM71jZ1OEIIIcoZSZpEpbF4x0UAQut7EuAhM4ALIYQoHkmaRKXw95l4/hedN5nlS52klUkIIUTxWZg6ACFKU5Zawyd/nmFl5CUAugZ5EOLnatqghBBClEuSNIkK61x8Kq//eIQzcakAjGjnz1s9A00clRBCiPJKkiZR4eTkavku6hJzNp8lO1eLu4MVc/o1pkugh6lDE0IIUY5J0iQqDEVR2HY2gekbTnMxMR2ATnWrMrdfY6o6Wps4OiGEEOWdJE2i3EnNUnP06l2sLc2wtTTH1sqctKxc5m45y67ziQC4O1jxZmgg/Zv7YmamMnHEQgghKgJJmkS5cuV2Bk8vjuRWanah+63MzRjeviavdgnA0UaWSBFCCGE4kjSJciMhNYshy/dxKzWbKvZWONlakpGTS0aOBrVGS+e6HkzqFUSNKvamDlUIIUQFJEmTKBdSstQMW36Ay7cz8HWz5ZeX2uLhJMugCCGEMB6Z3FKUeVlqDaO/O8ipmym4O1jx/YhWkjAJIYQwOkmaRJmm0SqMWxPN3otJOFhbsHJ4S2q6S/ebEEII45OkSZRZWWoNY1YdZtPJOKzMzVgypBkNqzmbOiwhhBCVlIxpEmVSUnoOo747yKHLd7AyN+PzgSG0DXA3dVhCCCEqMUmaRJlz5XYGQ1fsJzYxHScbC5Y+35xWtaqYOiwhhBCVnCRNokw5ejWZkd8eIDEth2outqwc3oI6no6mDksIIYSQpEmUDRqtwtJdF5m/5Rw5Gi0NfJxYMayFPCUnhBCizJCkSZjcpcR03lx3lIOX7wDQvZ4nnw1ogoO1fHsKIYQoO+S3kjAZRVH4Yd8VPv7jNJlqDQ7WFkx+rD79mldHpZL14oQQQpQtkjQJk1m66yIfbzwDQOtabsx5pjG+bnYmjkoIIYQonCRNwiRyNVqW774EwOtdAxjXvS5mZtK6JIQQouySyS2FSfx9JoG4lCzc7K0Y0zVAEiYhhBBlniRNwiRW778CQL9m1bG2MDdxNEIIIcTDSdIkjO5qUgY7zt0CYGBLPxNHI4QQQhSNJE3C6NYcuIKiQPsAd1l8VwghRLkhSZMwKrVGy9oD1wAY3EpamYQQQpQfkjSVA1qtQrra1FEYRsSpeBLTsqnqaE33+p6mDkcIIYQoMpMmTTt37qRPnz74+PigUqlYv3693v4pU6YQFBSEvb09rq6udO/enX379umVSUpKYvDgwTg5OeHi4sLIkSNJS0vTK3Ps2DE6dOiAjY0Nvr6+zJ49u0As69atIygoCBsbGxo1asTGjRsNfr+PYtf5W7SYuY2lZyvGYOlV+y4D8GxzXyzNJWcXQghRfpj0t1Z6ejqNGzdm0aJFhe6vW7cuCxcu5Pjx4+zevZuaNWsSGhrKrVu3dGUGDx7MyZMniYiIYMOGDezcuZPRo0fr9qekpBAaGkqNGjU4dOgQc+bMYcqUKSxZskRXJjIykoEDBzJy5EiOHDlC37596du3LydOnCi9my+iai62pGTlci0NcnK1pg6nRGIT09lz4TYqFQxo6WvqcIQQQohiMenkluHh4YSHh993/6BBg/Rez58/n2XLlnHs2DG6devG6dOn2bRpEwcOHKB58+YAfPHFF/Tq1Yu5c+fi4+PDqlWryMnJYfny5VhZWdGgQQOio6OZP3++LrlasGABPXv2ZOLEiQBMmzaNiIgIFi5cyOLFi0vp7ovG390eZ1sL7mbmcjY+laY1rU0aT0n8+M80A53rVqW6q8z8LYQQonwpNzOC5+TksGTJEpydnWncuDEAUVFRuLi46BImgO7du2NmZsa+fft48skniYqKomPHjlhZWenKhIWFMWvWLO7cuYOrqytRUVFMmDBB73phYWEFugvvlZ2dTXZ2tu51SkoKAGq1GrXasAOQGvk4sTsmicOXk2hUzdmg5zaW7Fwt6w5eBeDZ5tUMXkeGkh9XWY2vIpG6Nh6pa+ORujYeQ9V1cY4v80nThg0bGDBgABkZGXh7exMREYG7uzsAcXFxeHh46JW3sLDAzc2NuLg4XRl/f3+9Mp6enrp9rq6uxMXF6bbdWyb/HIWZOXMmU6dOLbB9y5Yt2NkZthXFIVsFmLPpwFmqJp826LmN5cAtFXcyzHGxUsiIOcjGi6aO6MEiIiJMHUKlIXVtPFLXxiN1bTwlreuMjIwily3zSVOXLl2Ijo4mMTGRpUuX0r9/f/bt21cgWTK2SZMm6bVOpaSk4OvrS2hoKE5OTga9ls3pODatPsYtrT29enUw6LmNZfnX+4C7DO9Qhz6da5k6nPtSq9VERETQo0cPLC0tTR1OhSZ1bTxS18YjdW08hqrr/J6ioijzSZO9vT0BAQEEBATQunVr6tSpw7Jly5g0aRJeXl4kJCTolc/NzSUpKQkvLy8AvLy8iI+P1yuT//phZfL3F8ba2hpr64LjiywtLQ3+g9K0RhUALidlkpaj4Gpv9ZAjypbj1+5y9NpdLM1VDGpds1x8kJTG+ygKJ3VtPFLXxiN1bTwlreviHFvunvnWarW6sURt2rQhOTmZQ4cO6fb//fffaLVaWrVqpSuzc+dOvT7LiIgIAgMDcXV11ZXZunWr3nUiIiJo06ZNad9OkbjYWeJhowAQfTXZtME8gu+iLgHQq5E3VR3L70B2IYQQlZtJk6a0tDSio6OJjo4GIDY2lujoaK5cuUJ6ejrvvvsue/fu5fLlyxw6dIgRI0Zw/fp1+vXrB0C9evXo2bMno0aNYv/+/ezZs4dXX32VAQMG4OPjA+Q9gWdlZcXIkSM5efIka9euZcGCBXpda2PHjmXTpk3MmzePM2fOMGXKFA4ePMirr75q9Dq5nxqOeUnTkXKWNN1Jz+H/jt4A4Pk2NUwcjRBCCPHoTJo0HTx4kJCQEEJCQgCYMGECISEhTJ48GXNzc86cOcPTTz9N3bp16dOnD7dv32bXrl00aNBAd45Vq1YRFBREt27d6NWrF+3bt9ebg8nZ2ZktW7YQGxtLs2bNeOONN5g8ebLeXE5t27Zl9erVLFmyhMaNG/Pzzz+zfv16GjZsaLzKeIiaDv8kTVfumDiS4vnp4FWyc7XU93aiqZ+rqcMRQgghHplJxzR17twZRVHuu//XX3996Dnc3NxYvXr1A8sEBweza9euB5bp16+frgWrLKrxT9J09GoyWq2CmZnKxBE9nEar8MM/M4A/36YGKlXZj1kIIYS4n3I3pqmy8rEDG0szUrJyuZiYbupwimTHuQSuJmXiZGPBE02qmTocIYQQokQkaSonzM2goU/eVAblpYvuu6i8Vqb+zX2xtaoYa+cJIYSovCRpKkcaV8+bDbw8PEF3+XY6O87lrRH4XGsZAC6EEKL8k6SpHGni6wLAkSvJJo3jYTRahTmbz6Io0KluVWq625s6JCGEEKLEJGkqR/Jbms7Gp5KRk2viaAqXnavh1dWH2XDsJmYqeLFT2Z39WwghhCgOSZrKEW9nG7ycbNBoFY5fu2vqcApIy85lxMoD/HkiDitzMxYNakrb2u6mDksIIYQwiDK/jIrQ18TXhU0n4zhyNZlWtaqYJIad526x5VQctdwdCPJyJNDLEZVKxbAV+zl27S72VuYsfb45bQMkYRJCCFFxSNJUzoT45SVN0SYa13TochIvfHeQnFyt3nYrczNyNFpc7SxZObwljf8ZfyWEEEJUFJI0lTO6weBXjT/twOXb6Yz67hA5uVqa13DF1d6Ks3GpXEnKIEejxdvZhu9HtiLAw8HosQkhhBClTZKmcqZRdWfMzVTEp2Rz824m3s62Rrnu3Qw1w1ceICk9h0bVnPluZEvsrPK+fdKzc7l8O4NaVe2xsZT5mIQQQlRMMhC8nLGzsiDIyxGAbWduGeWaOblaXvzhIBdvpePtbMM3Q5vrEiYAe2sL6vs4ScIkhBCiQpOkqRwKre8FwEcbTnK0lCe6VBSFd387zt6LSdhbmbN8WAs8nWxK9ZpCCCFEWSRJUzk0pkttOtWtSpZay8hvD3I1KaPUrrV6/xV+PnQNMxUsHNyUet5OpXYtIYQQoiyTpKkcsjA3Y+GgEIK8HElMy2b4ygPczVQb/DpXbmcw44/TALwTHkSXQA+DX0MIIYQoLyRpKqccbSxZMbwFnk7WXEhI4+UfDhWYBqAktFqFN38+SkaOhpb+brzQXmb2FkIIUblJ0lSOeTvbsnxYC+ytzImMuc0b644abHmVFZGX2B+bhJ2VOXOfaYyZmcog5xVCCCHKK0mayrkGPs4sHNwUczMVvx+9Qa8Fuzh0ueAcTjeSM5m7+SxfbD2PVqs88Jwxt9KYvekMAO/1rodfFbtSiV0IIYQoT2SepgqgS6AH3w5vyZvrjnLpdgb9FkfyUqfajOtel/MJqXyzK5bfj94g959kSa1VmNCjbqHnytVoeeOno2TnaulQx51BLf2MeStCCCFEmSVJUwXRvo47m8d1ZMrvJ/ntyHW+3B7DTwevkZiWrSvTwMeJkzdS+HzreYK8HOnVyLvAeRZuu0D01WQcbSyY9XQwKpV0ywkhhBAg3XMVirOdJZ8+24SvBjfF1c6SxLRszM1U9Gnsw/+92o4/Xu/AyPb+ALzx01FO3rirOzZLreHtn4/x2V/nAZjSpwE+LsaZbVwIIYQoD6SlqQIKb+RN85puRJyKp0Mdd3zd/h2TNCk8iHPxqew6n8jo7w7xv1fbkZaVy8urDnP6ZgoqFbzRoy5PNa1mwjsQQgghyh5Jmiqoqo7WDGpVcDyShbkZCwc25YlFu7l0O4Mhy/ZzLSmD1OxcqthbsWBACO3ruJsgYiGEEKJsk+65SsjZzpJvhjbHwdqC0zdTSM3OpUVNV/54vYMkTEIIIcR9SNJUSQV4OLJocFNqVLHjpU61WT2qNV7OsqacEEIIcT/SPVeJdapblR0Tu5g6DCGEEKJckJYmIYQQQogikKRJCCGEEKIIJGkSQgghhCgCSZqEEEIIIYpAkiYhhBBCiCKQpEkIIYQQoggkaRJCCCGEKAJJmoQQQgghikCSJiGEEEKIIpCkSQghhBCiCCRpEkIIIYQoAkmahBBCCCGKQJImIYQQQogikKRJCCGEEKIILEwdQEWhKAoAKSkpBj+3Wq0mIyODlJQULC0tDX5+8S+pa+ORujYeqWvjkbo2HkPVdf7v7fzf4w8iSZOBpKamAuDr62viSIQQQghRXKmpqTg7Oz+wjEopSmolHkqr1XLjxg0cHR1RqVQGPXdKSgq+vr5cvXoVJycng55b6JO6Nh6pa+ORujYeqWvjMVRdK4pCamoqPj4+mJk9eNSStDQZiJmZGdWrVy/Vazg5OckPoZFIXRuP1LXxSF0bj9S18Riirh/WwpRPBoILIYQQQhSBJE1CCCGEEEUgSVM5YG1tzYcffoi1tbWpQ6nwpK6NR+raeKSujUfq2nhMUdcyEFwIIYQQogikpUkIIYQQoggkaRJCCCGEKAJJmoQQQgghikCSJiGEEEKIIpCkqYxbtGgRNWvWxMbGhlatWrF//35Th1TuzZw5kxYtWuDo6IiHhwd9+/bl7NmzemWysrIYM2YMVapUwcHBgaeffpr4+HgTRVxxfPLJJ6hUKsaNG6fbJnVtONevX+e5556jSpUq2Nra0qhRIw4ePKjbrygKkydPxtvbG1tbW7p378758+dNGHH5pNFo+OCDD/D398fW1pbatWszbdo0vbXLpK4f3c6dO+nTpw8+Pj6oVCrWr1+vt78odZuUlMTgwYNxcnLCxcWFkSNHkpaWVuLYJGkqw9auXcuECRP48MMPOXz4MI0bNyYsLIyEhARTh1au7dixgzFjxrB3714iIiJQq9WEhoaSnp6uKzN+/Hh+//131q1bx44dO7hx4wZPPfWUCaMu/w4cOMDXX39NcHCw3napa8O4c+cO7dq1w9LSkj///JNTp04xb948XF1ddWVmz57N559/zuLFi9m3bx/29vaEhYWRlZVlwsjLn1mzZvHVV1+xcOFCTp8+zaxZs5g9ezZffPGFrozU9aNLT0+ncePGLFq0qND9RanbwYMHc/LkSSIiItiwYQM7d+5k9OjRJQ9OEWVWy5YtlTFjxuheazQaxcfHR5k5c6YJo6p4EhISFEDZsWOHoiiKkpycrFhaWirr1q3TlTl9+rQCKFFRUaYKs1xLTU1V6tSpo0RERCidOnVSxo4dqyiK1LUhvf3220r79u3vu1+r1SpeXl7KnDlzdNuSk5MVa2tr5ccffzRGiBVG7969lREjRuhte+qpp5TBgwcriiJ1bUiA8ttvv+leF6VuT506pQDKgQMHdGX+/PNPRaVSKdevXy9RPNLSVEbl5ORw6NAhunfvrttmZmZG9+7diYqKMmFkFc/du3cBcHNzA+DQoUOo1Wq9ug8KCsLPz0/q/hGNGTOG3r1769UpSF0b0v/93//RvHlz+vXrh4eHByEhISxdulS3PzY2lri4OL26dnZ2plWrVlLXxdS2bVu2bt3KuXPnADh69Ci7d+8mPDwckLouTUWp26ioKFxcXGjevLmuTPfu3TEzM2Pfvn0lur4s2FtGJSYmotFo8PT01Nvu6enJmTNnTBRVxaPVahk3bhzt2rWjYcOGAMTFxWFlZYWLi4teWU9PT+Li4kwQZfm2Zs0aDh8+zIEDBwrsk7o2nIsXL/LVV18xYcIE3n33XQ4cOMDrr7+OlZUVQ4cO1dVnYZ8pUtfF884775CSkkJQUBDm5uZoNBpmzJjB4MGDAaSuS1FR6jYuLg4PDw+9/RYWFri5uZW4/iVpEpXamDFjOHHiBLt37zZ1KBXS1atXGTt2LBEREdjY2Jg6nApNq9XSvHlzPv74YwBCQkI4ceIEixcvZujQoSaOrmL56aefWLVqFatXr6ZBgwZER0czbtw4fHx8pK4rOOmeK6Pc3d0xNzcv8BRRfHw8Xl5eJoqqYnn11VfZsGED27Zto3r16rrtXl5e5OTkkJycrFde6r74Dh06REJCAk2bNsXCwgILCwt27NjB559/joWFBZ6enlLXBuLt7U39+vX1ttWrV48rV64A6OpTPlNKbuLEibzzzjsMGDCARo0aMWTIEMaPH8/MmTMBqevSVJS69fLyKvDAVG5uLklJSSWuf0mayigrKyuaNWvG1q1bddu0Wi1bt26lTZs2Joys/FMUhVdffZXffvuNv//+G39/f739zZo1w9LSUq/uz549y5UrV6Tui6lbt24cP36c6Oho3Vfz5s0ZPHiw7v9S14bRrl27AlNnnDt3jho1agDg7++Pl5eXXl2npKSwb98+qetiysjIwMxM/9enubk5Wq0WkLouTUWp2zZt2pCcnMyhQ4d0Zf7++2+0Wi2tWrUqWQAlGkYuStWaNWsUa2trZeXKlcqpU6eU0aNHKy4uLkpcXJypQyvXXn75ZcXZ2VnZvn27cvPmTd1XRkaGrsxLL72k+Pn5KX///bdy8OBBpU2bNkqbNm1MGHXFce/Tc4oidW0o+/fvVywsLJQZM2Yo58+fV1atWqXY2dkpP/zwg67MJ598ori4uCj/+9//lGPHjilPPPGE4u/vr2RmZpow8vJn6NChSrVq1ZQNGzYosbGxyq+//qq4u7srb731lq6M1PWjS01NVY4cOaIcOXJEAZT58+crR44cUS5fvqwoStHqtmfPnkpISIiyb98+Zffu3UqdOnWUgQMHljg2SZrKuC+++ELx8/NTrKyslJYtWyp79+41dUjlHlDo14oVK3RlMjMzlVdeeUVxdXVV7OzslCeffFK5efOm6YKuQP6bNEldG87vv/+uNGzYULG2tlaCgoKUJUuW6O3XarXKBx98oHh6eirW1tZKt27dlLNnz5oo2vIrJSVFGTt2rOLn56fY2NgotWrVUt577z0lOztbV0bq+tFt27at0M/ooUOHKopStLq9ffu2MnDgQMXBwUFxcnJShg8frqSmppY4NpWi3DOFqRBCCCGEKJSMaRJCCCGEKAJJmoQQQgghikCSJiGEEEKIIpCkSQghhBCiCCRpEkIIIYQoAkmahBBCCCGKQJImIYQQQogikKRJCFHuDBs2jL59+xr9uitXrsTFxaXE5+ncuTPjxo0r8XmEEMZlYeoAhBDiXiqV6oH7P/zwQxYsWIAp5uV99tln6dWrl9GvK4QoGyRpEkKUKTdv3tT9f+3atUyePFlvIVoHBwccHBxMERq2trbY2tqa5NpCCNOT7jkhRJni5eWl+3J2dkalUultc3BwKNA917lzZ1577TXGjRuHq6srnp6eLF26lPT0dIYPH46joyMBAQH8+eefetc6ceIE4eHhODg44OnpyZAhQ0hMTLxvbP/tnpsyZQpNmjTh+++/p2bNmjg7OzNgwABSU1N1ZdLT03n++edxcHDA29ubefPmFThvdnY2b775JtWqVcPe3p5WrVqxfft2ALKysmjQoAGjR4/WlY+JicHR0ZHly5cXs3aFECUhSZMQokL49ttvcXd3Z//+/bz22mu8/PLL9OvXj7Zt23L48GFCQ0MZMmQIGRkZACQnJ9O1a1dCQkI4ePAgmzZtIj4+nv79+xfrujExMaxfv54NGzawYcMGdvx/e/cPktwaxwH823teX/pLkUEYJEKgNBhUQ4vikImL5NIQlpXSlFAgDg3R0NC/tVzFIYigyCGihv4MISUF/RlCkYiIQKygXJJOz53ec6+3Xu6B6l7u2/cznd/zyPN7cDh8OTx6dncxNTWlzIdCIezu7iIWi2FzcxM7Ozs4OjoqWCMQCCAej2NxcREnJyfo6uqC0+lEKpVCcXExFhYWEI1GEYvFIMsyenp60NHRAZ/P9/4vjojUe/crf4mIPkkkEhGVlZWvxvv6+kRnZ6dS22w2YbFYlPr5+VmUlZWJ3t5eZezm5kYAEPF4XAghxMTEhHA4HAXrXl1dCQC/fBv93/czPj4uSktLxcPDgzIWCoVEW1ubEEKIx8dH8ePHD7G0tKTM397eipKSEjE8PCyEEOLy8lJIkiSur68LerW3t4vR0VGlnpmZETU1NSIQCAidTiey2eybeySiz8MzTUT0W2hqalKuJUmCVquF2WxWxmprawEAmUwGAHB8fIzt7e03z0el02kYjUZVfQ0GAyoqKpRap9MpPdLpNPL5PNra2pT56upqmEwmpT49PYUsy6/6PT09QavVKnUwGMTq6irm5uawvr5eMEdE/w6GJiL6LWg0moK6qKioYOznr/JeXl4AALlcDi6XC9PT06/W0ul07+r7s4cauVwOkiTh8PAQkiQVzP010GUyGSSTSUiShFQqBafTqboHEX0MhiYi+pJaWlqwvLwMg8GA798/51bY0NAAjUaD/f196PV6AMD9/T2SySRsNhsAoLm5GbIsI5PJwGq1/nItn88Hs9kMv9+PwcFB2O12NDY2fsq+iehtPAhORF/S0NAQ7u7u0N3djUQigXQ6jY2NDQwMDECW5Q/pUV5eDr/fj1AohK2tLZydnaG/vx/fvv156zUajfB4PPB6vVhZWcHFxQUODg4wOTmJtbU1AMD8/Dzi8Tii0Sg8Hg/cbjc8Hg/y+fyH7JOI1GFoIqIvqa6uDnt7e5BlGQ6HA2azGSMjI6iqqioINe81OzsLq9UKl8sFu90Oi8WC1tbWgs9EIhF4vV4Eg0GYTCa43W4kEgno9Xqcn58jFAohHA6jvr4eABAOh5HNZjE2NvZh+ySif1YkxH/wt7pERERE/zN80kRERESkAkMTERERkQoMTUREREQqMDQRERERqcDQRERERKQCQxMRERGRCgxNRERERCowNBERERGpwNBEREREpAJDExEREZEKDE1EREREKjA0EREREanwB5TtAuzH7I5UAAAAAElFTkSuQmCC" + "image/png": "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", + "text/plain": [ + "
" + ] }, "metadata": {}, "output_type": "display_data" @@ -2039,78 +1620,89 @@ "plt.title('Forecating by Industrial')\n", "plt.plot(real_values)\n", "\n", - "real_last_value = real_values[-horizon- 1]\n", - "plt.plot(indicies[-horizon- 1:],\n", - " np.insert(baseline, 0, real_last_value), label='Finetune')\n", - "plt.plot(indicies[-horizon- 1:],\n", - " np.insert(eigen, 0, real_last_value), label='Eigen_AR')\n", + "real_last_value = real_values[-horizon - 1]\n", + "plt.plot(indicies[-horizon - 1:],\n", + " np.insert(eigen, 0, real_last_value), label='forecast')\n", "\n", "plt.grid()\n", "plt.legend()" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } + ] }, { "cell_type": "markdown", - "source": [ - "## Compare with State of Art (SOTA) models" - ], "metadata": { "collapsed": false, "pycharm": { "name": "#%% md\n" } - } + }, + "source": [ + "### Compare with State of Art (SOTA) models" + ] }, { "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "df_sota = pd.read_csv('./Monash_forecasting_SOTA_results.csv')" - ], + "execution_count": 9, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } - } + }, + "outputs": [ + { + "ename": "FileNotFoundError", + "evalue": "[Errno 2] No such file or directory: './Monash_forecasting_SOTA_results.csv'", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mFileNotFoundError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[1;32mIn[9], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m df_sota \u001b[38;5;241m=\u001b[39m \u001b[43mpd\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mread_csv\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43m./Monash_forecasting_SOTA_results.csv\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n", + "File \u001b[1;32mc:\\Users\\1\\fedot_ind\\.venv\\lib\\site-packages\\pandas\\util\\_decorators.py:211\u001b[0m, in \u001b[0;36mdeprecate_kwarg.._deprecate_kwarg..wrapper\u001b[1;34m(*args, **kwargs)\u001b[0m\n\u001b[0;32m 209\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 210\u001b[0m kwargs[new_arg_name] \u001b[38;5;241m=\u001b[39m new_arg_value\n\u001b[1;32m--> 211\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m func(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n", + "File \u001b[1;32mc:\\Users\\1\\fedot_ind\\.venv\\lib\\site-packages\\pandas\\util\\_decorators.py:331\u001b[0m, in \u001b[0;36mdeprecate_nonkeyword_arguments..decorate..wrapper\u001b[1;34m(*args, **kwargs)\u001b[0m\n\u001b[0;32m 325\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(args) \u001b[38;5;241m>\u001b[39m num_allow_args:\n\u001b[0;32m 326\u001b[0m warnings\u001b[38;5;241m.\u001b[39mwarn(\n\u001b[0;32m 327\u001b[0m msg\u001b[38;5;241m.\u001b[39mformat(arguments\u001b[38;5;241m=\u001b[39m_format_argument_list(allow_args)),\n\u001b[0;32m 328\u001b[0m \u001b[38;5;167;01mFutureWarning\u001b[39;00m,\n\u001b[0;32m 329\u001b[0m stacklevel\u001b[38;5;241m=\u001b[39mfind_stack_level(),\n\u001b[0;32m 330\u001b[0m )\n\u001b[1;32m--> 331\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m func(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n", + "File \u001b[1;32mc:\\Users\\1\\fedot_ind\\.venv\\lib\\site-packages\\pandas\\io\\parsers\\readers.py:950\u001b[0m, in \u001b[0;36mread_csv\u001b[1;34m(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, squeeze, prefix, mangle_dupe_cols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, skipfooter, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, dayfirst, cache_dates, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, doublequote, escapechar, comment, encoding, encoding_errors, dialect, error_bad_lines, warn_bad_lines, on_bad_lines, delim_whitespace, low_memory, memory_map, float_precision, storage_options)\u001b[0m\n\u001b[0;32m 935\u001b[0m kwds_defaults \u001b[38;5;241m=\u001b[39m _refine_defaults_read(\n\u001b[0;32m 936\u001b[0m dialect,\n\u001b[0;32m 937\u001b[0m delimiter,\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 946\u001b[0m defaults\u001b[38;5;241m=\u001b[39m{\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdelimiter\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m,\u001b[39m\u001b[38;5;124m\"\u001b[39m},\n\u001b[0;32m 947\u001b[0m )\n\u001b[0;32m 948\u001b[0m kwds\u001b[38;5;241m.\u001b[39mupdate(kwds_defaults)\n\u001b[1;32m--> 950\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_read\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfilepath_or_buffer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkwds\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[1;32mc:\\Users\\1\\fedot_ind\\.venv\\lib\\site-packages\\pandas\\io\\parsers\\readers.py:605\u001b[0m, in \u001b[0;36m_read\u001b[1;34m(filepath_or_buffer, kwds)\u001b[0m\n\u001b[0;32m 602\u001b[0m _validate_names(kwds\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mnames\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mNone\u001b[39;00m))\n\u001b[0;32m 604\u001b[0m \u001b[38;5;66;03m# Create the parser.\u001b[39;00m\n\u001b[1;32m--> 605\u001b[0m parser \u001b[38;5;241m=\u001b[39m TextFileReader(filepath_or_buffer, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwds)\n\u001b[0;32m 607\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m chunksize \u001b[38;5;129;01mor\u001b[39;00m iterator:\n\u001b[0;32m 608\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m parser\n", + "File \u001b[1;32mc:\\Users\\1\\fedot_ind\\.venv\\lib\\site-packages\\pandas\\io\\parsers\\readers.py:1442\u001b[0m, in \u001b[0;36mTextFileReader.__init__\u001b[1;34m(self, f, engine, **kwds)\u001b[0m\n\u001b[0;32m 1439\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39moptions[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhas_index_names\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;241m=\u001b[39m kwds[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhas_index_names\u001b[39m\u001b[38;5;124m\"\u001b[39m]\n\u001b[0;32m 1441\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhandles: IOHandles \u001b[38;5;241m|\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m-> 1442\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_engine \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_make_engine\u001b[49m\u001b[43m(\u001b[49m\u001b[43mf\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mengine\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[1;32mc:\\Users\\1\\fedot_ind\\.venv\\lib\\site-packages\\pandas\\io\\parsers\\readers.py:1735\u001b[0m, in \u001b[0;36mTextFileReader._make_engine\u001b[1;34m(self, f, engine)\u001b[0m\n\u001b[0;32m 1733\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mb\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m mode:\n\u001b[0;32m 1734\u001b[0m mode \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mb\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m-> 1735\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhandles \u001b[38;5;241m=\u001b[39m \u001b[43mget_handle\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 1736\u001b[0m \u001b[43m \u001b[49m\u001b[43mf\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 1737\u001b[0m \u001b[43m \u001b[49m\u001b[43mmode\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 1738\u001b[0m \u001b[43m \u001b[49m\u001b[43mencoding\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43moptions\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mencoding\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 1739\u001b[0m \u001b[43m \u001b[49m\u001b[43mcompression\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43moptions\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mcompression\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 1740\u001b[0m \u001b[43m \u001b[49m\u001b[43mmemory_map\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43moptions\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mmemory_map\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 1741\u001b[0m \u001b[43m \u001b[49m\u001b[43mis_text\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mis_text\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 1742\u001b[0m \u001b[43m \u001b[49m\u001b[43merrors\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43moptions\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mencoding_errors\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mstrict\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 1743\u001b[0m \u001b[43m \u001b[49m\u001b[43mstorage_options\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43moptions\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mstorage_options\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 1744\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 1745\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhandles \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m 1746\u001b[0m f \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhandles\u001b[38;5;241m.\u001b[39mhandle\n", + "File \u001b[1;32mc:\\Users\\1\\fedot_ind\\.venv\\lib\\site-packages\\pandas\\io\\common.py:856\u001b[0m, in \u001b[0;36mget_handle\u001b[1;34m(path_or_buf, mode, encoding, compression, memory_map, is_text, errors, storage_options)\u001b[0m\n\u001b[0;32m 851\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(handle, \u001b[38;5;28mstr\u001b[39m):\n\u001b[0;32m 852\u001b[0m \u001b[38;5;66;03m# Check whether the filename is to be opened in binary mode.\u001b[39;00m\n\u001b[0;32m 853\u001b[0m \u001b[38;5;66;03m# Binary mode does not support 'encoding' and 'newline'.\u001b[39;00m\n\u001b[0;32m 854\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m ioargs\u001b[38;5;241m.\u001b[39mencoding \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mb\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m ioargs\u001b[38;5;241m.\u001b[39mmode:\n\u001b[0;32m 855\u001b[0m \u001b[38;5;66;03m# Encoding\u001b[39;00m\n\u001b[1;32m--> 856\u001b[0m handle \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mopen\u001b[39;49m\u001b[43m(\u001b[49m\n\u001b[0;32m 857\u001b[0m \u001b[43m \u001b[49m\u001b[43mhandle\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 858\u001b[0m \u001b[43m \u001b[49m\u001b[43mioargs\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmode\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 859\u001b[0m \u001b[43m \u001b[49m\u001b[43mencoding\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mioargs\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mencoding\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 860\u001b[0m \u001b[43m \u001b[49m\u001b[43merrors\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43merrors\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 861\u001b[0m \u001b[43m \u001b[49m\u001b[43mnewline\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[0;32m 862\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 863\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 864\u001b[0m \u001b[38;5;66;03m# Binary mode\u001b[39;00m\n\u001b[0;32m 865\u001b[0m handle \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mopen\u001b[39m(handle, ioargs\u001b[38;5;241m.\u001b[39mmode)\n", + "\u001b[1;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: './Monash_forecasting_SOTA_results.csv'" + ] + } + ], + "source": [ + "df_sota = pd.read_excel('./Monash_benchmarks.xlsx')" + ] }, { "cell_type": "code", "execution_count": null, - "outputs": [], - "source": [ - "df_sota" - ], "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } - } + }, + "outputs": [], + "source": [ + "df_sota" + ] }, { "cell_type": "code", "execution_count": null, - "outputs": [], - "source": [], "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } - } + }, + "outputs": [], + "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": ".venv", "language": "python", "name": "python3" }, @@ -2124,9 +1716,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.1" + "version": "3.10.11" } }, "nbformat": 4, "nbformat_minor": 1 -} \ No newline at end of file +}