From 30501afcb4a80e80c3f1b7c370ddc83d5cb6e2f4 Mon Sep 17 00:00:00 2001 From: Hartorn Date: Tue, 15 Sep 2020 09:10:44 +0200 Subject: [PATCH] chore: clean up and update deps --- classifier_example.ipynb | 1544 ++--------- conv1d-generic-clean.ipynb | 2460 ++--------------- prepare-tfa-build.sh | 2 +- thc-net/build.sh | 19 - thc-net/poetry.lock | 492 ++-- thc-net/prepare-tf-build.sh | 38 - thc-net/pyproject.toml | 2 +- ...ile-generic-clean-pixel-custom-model.ipynb | 162 +- 8 files changed, 851 insertions(+), 3868 deletions(-) delete mode 100755 thc-net/build.sh delete mode 100755 thc-net/prepare-tf-build.sh diff --git a/classifier_example.ipynb b/classifier_example.ipynb index a047fcd..55f703c 100644 --- a/classifier_example.ipynb +++ b/classifier_example.ipynb @@ -2,37 +2,14 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 1;\n", - " var nbb_unformatted_code = \"%load_ext nb_black\\n%load_ext autoreload\\n\\n%autoreload 2\";\n", - " var nbb_formatted_code = \"%load_ext nb_black\\n%load_ext autoreload\\n\\n%autoreload 2\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2020-09-15T00:59:26.355129Z", + "start_time": "2020-09-15T00:59:26.262217Z" } - ], + }, + "outputs": [], "source": [ "%load_ext nb_black\n", "%load_ext autoreload\n", @@ -42,37 +19,14 @@ }, { "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 2;\n", - " var nbb_unformatted_code = \"from sklearn.preprocessing import LabelEncoder\\nfrom sklearn.metrics import roc_auc_score\\n\\nimport pandas as pd\\nimport numpy as np\\n\\nnp.random.seed(0)\\n\\n\\nimport os\\nfrom requests import get\\nfrom pathlib import Path\\nimport gc\\n\\nfrom matplotlib import pyplot as plt\\nfrom zipfile import ZipFile\\n\\n%matplotlib inline\";\n", - " var nbb_formatted_code = \"from sklearn.preprocessing import LabelEncoder\\nfrom sklearn.metrics import roc_auc_score\\n\\nimport pandas as pd\\nimport numpy as np\\n\\nnp.random.seed(0)\\n\\n\\nimport os\\nfrom requests import get\\nfrom pathlib import Path\\nimport gc\\n\\nfrom matplotlib import pyplot as plt\\nfrom zipfile import ZipFile\\n\\n%matplotlib inline\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2020-09-15T00:59:26.860713Z", + "start_time": "2020-09-15T00:59:26.356211Z" } - ], + }, + "outputs": [], "source": [ "from sklearn.preprocessing import LabelEncoder\n", "from sklearn.metrics import roc_auc_score\n", @@ -96,74 +50,28 @@ }, { "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 3;\n", - " var nbb_unformatted_code = \"from tensorflow.keras.utils import plot_model\";\n", - " var nbb_formatted_code = \"from tensorflow.keras.utils import plot_model\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2020-09-15T00:59:27.766098Z", + "start_time": "2020-09-15T00:59:26.861936Z" } - ], + }, + "outputs": [], "source": [ "from tensorflow.keras.utils import plot_model" ] }, { "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 25;\n", - " var nbb_unformatted_code = \"from thc_net.classifier import ThcNetClassifier\\nfrom thc_net.utils import download, plot_history\\nfrom thc_net.input_utils import prepare_input_data\";\n", - " var nbb_formatted_code = \"from thc_net.classifier import ThcNetClassifier\\nfrom thc_net.utils import download, plot_history\\nfrom thc_net.input_utils import prepare_input_data\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2020-09-15T00:59:27.891616Z", + "start_time": "2020-09-15T00:59:27.767821Z" } - ], + }, + "outputs": [], "source": [ "from thc_net.classifier import ThcNetClassifier\n", "from thc_net.utils import download, plot_history\n", @@ -178,8 +86,15 @@ ] }, { - "cell_type": "raw", - "metadata": {}, + "cell_type": "code", + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2020-09-15T00:59:28.004274Z", + "start_time": "2020-09-15T00:59:27.892699Z" + } + }, + "outputs": [], "source": [ "url = \"https://archive.ics.uci.edu/ml/machine-learning-databases/00222/bank-additional.zip\"\n", "dataset_name = \"bank-additional-full\"\n", @@ -205,8 +120,15 @@ ] }, { - "cell_type": "raw", - "metadata": {}, + "cell_type": "code", + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2020-09-15T00:59:28.071907Z", + "start_time": "2020-09-15T00:59:28.005422Z" + } + }, + "outputs": [], "source": [ "url = \"https://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data\"\n", "dataset_name = \"census-income\"\n", @@ -216,7 +138,7 @@ "download(url, out)\n", "target = \" <=50K\"\n", "to_remove = []\n", - "train = pd.read_csv(out, sep=\";\", low_memory=False)" + "train = pd.read_csv(out, sep=\",\", low_memory=False)" ] }, { @@ -228,37 +150,14 @@ }, { "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 7;\n", - " var nbb_unformatted_code = \"if \\\"Set\\\" not in train.columns:\\n train[\\\"Set\\\"] = np.random.choice(\\n [\\\"train\\\", \\\"valid\\\", \\\"test\\\"], p=[0.8, 0.1, 0.1], size=(train.shape[0],)\\n )\\n\\ntrain_indices = train[train.Set == \\\"train\\\"].index\\nvalid_indices = train[train.Set == \\\"valid\\\"].index\\ntest_indices = train[train.Set == \\\"test\\\"].index\";\n", - " var nbb_formatted_code = \"if \\\"Set\\\" not in train.columns:\\n train[\\\"Set\\\"] = np.random.choice(\\n [\\\"train\\\", \\\"valid\\\", \\\"test\\\"], p=[0.8, 0.1, 0.1], size=(train.shape[0],)\\n )\\n\\ntrain_indices = train[train.Set == \\\"train\\\"].index\\nvalid_indices = train[train.Set == \\\"valid\\\"].index\\ntest_indices = train[train.Set == \\\"test\\\"].index\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2020-09-15T00:59:28.119480Z", + "start_time": "2020-09-15T00:59:28.073089Z" } - ], + }, + "outputs": [], "source": [ "if \"Set\" not in train.columns:\n", " train[\"Set\"] = np.random.choice(\n", @@ -272,37 +171,14 @@ }, { "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 8;\n", - " var nbb_unformatted_code = \"Y = train[target].values\\nX = train.drop(columns=[\\\"Set\\\"] + [target])\";\n", - " var nbb_formatted_code = \"Y = train[target].values\\nX = train.drop(columns=[\\\"Set\\\"] + [target])\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2020-09-15T00:59:28.147175Z", + "start_time": "2020-09-15T00:59:28.121111Z" } - ], + }, + "outputs": [], "source": [ "Y = train[target].values\n", "X = train.drop(columns=[\"Set\"] + [target])" @@ -310,74 +186,28 @@ }, { "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 9;\n", - " var nbb_unformatted_code = \"ratio = 0.005\";\n", - " var nbb_formatted_code = \"ratio = 0.005\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2020-09-15T00:59:28.171365Z", + "start_time": "2020-09-15T00:59:28.148556Z" } - ], + }, + "outputs": [], "source": [ "ratio = 0.005" ] }, { "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 10;\n", - " var nbb_unformatted_code = \"n_unique = X.nunique()\\nratios = (n_unique / X.shape[0]) < ratio\\ncat_idxs = np.argwhere(\\n X.columns.isin(X.columns[ratios | (X.dtypes == \\\"object\\\")])\\n).ravel()\\ncat_dims = n_unique[cat_idxs].values + X.isnull().sum()[cat_idxs].values + 1\\ndel n_unique, ratios, train\";\n", - " var nbb_formatted_code = \"n_unique = X.nunique()\\nratios = (n_unique / X.shape[0]) < ratio\\ncat_idxs = np.argwhere(\\n X.columns.isin(X.columns[ratios | (X.dtypes == \\\"object\\\")])\\n).ravel()\\ncat_dims = n_unique[cat_idxs].values + X.isnull().sum()[cat_idxs].values + 1\\ndel n_unique, ratios, train\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2020-09-15T00:59:28.231213Z", + "start_time": "2020-09-15T00:59:28.172466Z" } - ], + }, + "outputs": [], "source": [ "n_unique = X.nunique()\n", "ratios = (n_unique / X.shape[0]) < ratio\n", @@ -390,47 +220,14 @@ }, { "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "635" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 11;\n", - " var nbb_unformatted_code = \"gc.collect()\";\n", - " var nbb_formatted_code = \"gc.collect()\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2020-09-15T00:59:28.304280Z", + "start_time": "2020-09-15T00:59:28.232178Z" } - ], + }, + "outputs": [], "source": [ "gc.collect()" ] @@ -444,37 +241,14 @@ }, { "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 12;\n", - " var nbb_unformatted_code = \"tg_enc = LabelEncoder()\\nY = tg_enc.fit_transform(Y)\";\n", - " var nbb_formatted_code = \"tg_enc = LabelEncoder()\\nY = tg_enc.fit_transform(Y)\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2020-09-15T00:59:28.334367Z", + "start_time": "2020-09-15T00:59:28.305189Z" } - ], + }, + "outputs": [], "source": [ "tg_enc = LabelEncoder()\n", "Y = tg_enc.fit_transform(Y)" @@ -482,37 +256,14 @@ }, { "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 13;\n", - " var nbb_unformatted_code = \"X_train = X.values[train_indices]\\ny_train = Y[train_indices]\\n\\nX_valid = X.values[valid_indices]\\ny_valid = Y[valid_indices]\\n\\nX_test = X.values[test_indices]\\ny_test = Y[test_indices]\";\n", - " var nbb_formatted_code = \"X_train = X.values[train_indices]\\ny_train = Y[train_indices]\\n\\nX_valid = X.values[valid_indices]\\ny_valid = Y[valid_indices]\\n\\nX_test = X.values[test_indices]\\ny_test = Y[test_indices]\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2020-09-15T00:59:28.382875Z", + "start_time": "2020-09-15T00:59:28.335440Z" } - ], + }, + "outputs": [], "source": [ "X_train = X.values[train_indices]\n", "y_train = Y[train_indices]\n", @@ -526,84 +277,28 @@ }, { "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(32976, 20)" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 14;\n", - " var nbb_unformatted_code = \"X_train.shape\";\n", - " var nbb_formatted_code = \"X_train.shape\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2020-09-15T00:59:28.407041Z", + "start_time": "2020-09-15T00:59:28.383991Z" } - ], + }, + "outputs": [], "source": [ "X_train.shape" ] }, { "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 15;\n", - " var nbb_unformatted_code = \"X_train_prep, encoders = prepare_input_data(X_train, cat_idxs)\\nX_valid_prep, _ = prepare_input_data(X_valid, cat_idxs, encoders=encoders, fit=False)\\nX_test_prep, _ = prepare_input_data(X_test, cat_idxs, encoders=encoders, fit=False)\";\n", - " var nbb_formatted_code = \"X_train_prep, encoders = prepare_input_data(X_train, cat_idxs)\\nX_valid_prep, _ = prepare_input_data(X_valid, cat_idxs, encoders=encoders, fit=False)\\nX_test_prep, _ = prepare_input_data(X_test, cat_idxs, encoders=encoders, fit=False)\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2020-09-15T00:59:28.708027Z", + "start_time": "2020-09-15T00:59:28.408031Z" } - ], + }, + "outputs": [], "source": [ "X_train_prep, encoders = prepare_input_data(X_train, cat_idxs)\n", "X_valid_prep, _ = prepare_input_data(X_valid, cat_idxs, encoders=encoders, fit=False)\n", @@ -620,152 +315,27 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2020-09-15T00:59:28.731489Z", + "start_time": "2020-09-15T00:59:28.708977Z" + } + }, "outputs": [], "source": [ - "metrics = ['AUC']" + "metrics = [\"AUC\"]" ] }, { "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 1/10000\n", - "WARNING:tensorflow:From /work/.cache/poetry/thc-net-KQLMmzPP-py3.7/lib/python3.7/site-packages/tensorflow/python/ops/resource_variable_ops.py:1817: calling BaseResourceVariable.__init__ (from tensorflow.python.ops.resource_variable_ops) with constraint is deprecated and will be removed in a future version.\n", - "Instructions for updating:\n", - "If using Keras pass *_constraint arguments to layers.\n", - "33/33 - 1s - loss: 0.3369 - val_loss: 0.2303\n", - "Epoch 2/10000\n", - "33/33 - 0s - loss: 0.2115 - val_loss: 0.2100\n", - "Epoch 3/10000\n", - "33/33 - 0s - loss: 0.1989 - val_loss: 0.1983\n", - "Epoch 4/10000\n", - "33/33 - 0s - loss: 0.1914 - val_loss: 0.1933\n", - "Epoch 5/10000\n", - "33/33 - 0s - loss: 0.1875 - val_loss: 0.1929\n", - "Epoch 6/10000\n", - "33/33 - 0s - loss: 0.1841 - val_loss: 0.1881\n", - "Epoch 7/10000\n", - "33/33 - 0s - loss: 0.1805 - val_loss: 0.1890\n", - "Epoch 8/10000\n", - "33/33 - 0s - loss: 0.1793 - val_loss: 0.1859\n", - "Epoch 9/10000\n", - "33/33 - 0s - loss: 0.1768 - val_loss: 0.1843\n", - "Epoch 10/10000\n", - "33/33 - 0s - loss: 0.1756 - val_loss: 0.1840\n", - "Epoch 11/10000\n", - "33/33 - 0s - loss: 0.1744 - val_loss: 0.1856\n", - "Epoch 12/10000\n", - "33/33 - 0s - loss: 0.1734 - val_loss: 0.1841\n", - "Epoch 13/10000\n", - "33/33 - 0s - loss: 0.1727 - val_loss: 0.1837\n", - "Epoch 14/10000\n", - "33/33 - 0s - loss: 0.1716 - val_loss: 0.1838\n", - "Epoch 15/10000\n", - "33/33 - 0s - loss: 0.1705 - val_loss: 0.1867\n", - "Epoch 16/10000\n", - "33/33 - 0s - loss: 0.1702 - val_loss: 0.1825\n", - "Epoch 17/10000\n", - "33/33 - 0s - loss: 0.1695 - val_loss: 0.1822\n", - "Epoch 18/10000\n", - "33/33 - 0s - loss: 0.1684 - val_loss: 0.1847\n", - "Epoch 19/10000\n", - "33/33 - 0s - loss: 0.1670 - val_loss: 0.1871\n", - "Epoch 20/10000\n", - "33/33 - 0s - loss: 0.1660 - val_loss: 0.1835\n", - "Epoch 21/10000\n", - "33/33 - 0s - loss: 0.1645 - val_loss: 0.1854\n", - "Epoch 22/10000\n", - "33/33 - 0s - loss: 0.1624 - val_loss: 0.1903\n", - "Epoch 23/10000\n", - "33/33 - 0s - loss: 0.1622 - val_loss: 0.1854\n", - "Epoch 24/10000\n", - "33/33 - 0s - loss: 0.1603 - val_loss: 0.1849\n", - "Epoch 25/10000\n", - "33/33 - 0s - loss: 0.1596 - val_loss: 0.1946\n", - "Epoch 26/10000\n", - "33/33 - 0s - loss: 0.1590 - val_loss: 0.1874\n", - "Epoch 27/10000\n", - "33/33 - 0s - loss: 0.1591 - val_loss: 0.1914\n", - "Epoch 28/10000\n", - "33/33 - 0s - loss: 0.1549 - val_loss: 0.1898\n", - "Epoch 29/10000\n", - "33/33 - 0s - loss: 0.1561 - val_loss: 0.1911\n", - "Epoch 30/10000\n", - "33/33 - 0s - loss: 0.1537 - val_loss: 0.1895\n", - "Epoch 31/10000\n", - "33/33 - 0s - loss: 0.1514 - val_loss: 0.1971\n", - "Epoch 32/10000\n", - "33/33 - 0s - loss: 0.1506 - val_loss: 0.1928\n", - "Epoch 33/10000\n", - "33/33 - 0s - loss: 0.1480 - val_loss: 0.1972\n", - "Epoch 34/10000\n", - "33/33 - 0s - loss: 0.1470 - val_loss: 0.1951\n", - "Epoch 35/10000\n", - "33/33 - 0s - loss: 0.1450 - val_loss: 0.1993\n", - "Epoch 36/10000\n", - "33/33 - 0s - loss: 0.1434 - val_loss: 0.1957\n", - "Epoch 37/10000\n", - "33/33 - 0s - loss: 0.1428 - val_loss: 0.2027\n", - "Epoch 38/10000\n", - "33/33 - 0s - loss: 0.1390 - val_loss: 0.2024\n", - "Epoch 39/10000\n", - "33/33 - 0s - loss: 0.1384 - val_loss: 0.2067\n", - "Epoch 40/10000\n", - "33/33 - 0s - loss: 0.1356 - val_loss: 0.2036\n", - "Epoch 41/10000\n", - "33/33 - 0s - loss: 0.1328 - val_loss: 0.2078\n", - "Epoch 42/10000\n", - "33/33 - 0s - loss: 0.1306 - val_loss: 0.2139\n", - "Epoch 43/10000\n", - "33/33 - 0s - loss: 0.1264 - val_loss: 0.2142\n", - "Epoch 44/10000\n", - "33/33 - 0s - loss: 0.1255 - val_loss: 0.2157\n", - "Epoch 45/10000\n", - "33/33 - 0s - loss: 0.1221 - val_loss: 0.2260\n", - "Epoch 46/10000\n", - "33/33 - 0s - loss: 0.1206 - val_loss: 0.2211\n", - "Epoch 47/10000\n", - "Restoring model weights from the end of the best epoch.\n", - "33/33 - 0s - loss: 0.1179 - val_loss: 0.2275\n", - "Epoch 00047: early stopping\n", - "CPU times: user 27.5 s, sys: 2.07 s, total: 29.6 s\n", - "Wall time: 21.7 s\n" - ] - }, - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 16;\n", - " var nbb_unformatted_code = \"%%time\\n\\nmodel = ThcNetClassifier(\\n n_layer=3,\\n mul_input=8, \\n metrics=[],\\n cat_idxs=cat_idxs,\\n cat_emb_dims=cat_dims,\\n dropout=0.05,\\n normalize=False,\\n max_emb=20,\\n patience=30\\n)\\n\\nhistory = model.fit(\\n X=X_train_prep, \\n y=y_train,\\n X_valid=X_valid_prep,\\n y_valid=y_valid,\\n batch_size=1024,\\n epochs=10000,\\n verbose=2,\\n)\";\n", - " var nbb_formatted_code = \"%%time\\n\\nmodel = ThcNetClassifier(\\n n_layer=3,\\n mul_input=8, \\n metrics=[],\\n cat_idxs=cat_idxs,\\n cat_emb_dims=cat_dims,\\n dropout=0.05,\\n normalize=False,\\n max_emb=20,\\n patience=30\\n)\\n\\nhistory = model.fit(\\n X=X_train_prep, \\n y=y_train,\\n X_valid=X_valid_prep,\\n y_valid=y_valid,\\n batch_size=1024,\\n epochs=10000,\\n verbose=2,\\n)\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2020-09-15T00:59:57.058405Z", + "start_time": "2020-09-15T00:59:28.732715Z" } - ], + }, + "outputs": [], "source": [ "%%time\n", "\n", @@ -794,295 +364,14 @@ }, { "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 1/10000\n", - "33/33 - 1s - loss: 0.5395 - auc: 0.8415 - val_loss: 0.3399 - val_auc: 0.9622\n", - "Epoch 2/10000\n", - "33/33 - 0s - loss: 0.2872 - auc: 0.9541 - val_loss: 0.2945 - val_auc: 0.9692\n", - "Epoch 3/10000\n", - "33/33 - 0s - loss: 0.2692 - auc: 0.9576 - val_loss: 0.2844 - val_auc: 0.9707\n", - "Epoch 4/10000\n", - "33/33 - 0s - loss: 0.2598 - auc: 0.9603 - val_loss: 0.2542 - val_auc: 0.9733\n", - "Epoch 5/10000\n", - "33/33 - 0s - loss: 0.2477 - auc: 0.9640 - val_loss: 0.2239 - val_auc: 0.9747\n", - "Epoch 6/10000\n", - "33/33 - 0s - loss: 0.2392 - auc: 0.9661 - val_loss: 0.2309 - val_auc: 0.9741\n", - "Epoch 7/10000\n", - "33/33 - 0s - loss: 0.2334 - auc: 0.9677 - val_loss: 0.2134 - val_auc: 0.9752\n", - "Epoch 8/10000\n", - "33/33 - 0s - loss: 0.2241 - auc: 0.9702 - val_loss: 0.2109 - val_auc: 0.9751\n", - "Epoch 9/10000\n", - "33/33 - 0s - loss: 0.2217 - auc: 0.9704 - val_loss: 0.2018 - val_auc: 0.9754\n", - "Epoch 10/10000\n", - "33/33 - 0s - loss: 0.2169 - auc: 0.9715 - val_loss: 0.2013 - val_auc: 0.9752\n", - "Epoch 11/10000\n", - "33/33 - 0s - loss: 0.2176 - auc: 0.9712 - val_loss: 0.1980 - val_auc: 0.9756\n", - "Epoch 12/10000\n", - "33/33 - 0s - loss: 0.2152 - auc: 0.9717 - val_loss: 0.1989 - val_auc: 0.9756\n", - "Epoch 13/10000\n", - "33/33 - 0s - loss: 0.2123 - auc: 0.9725 - val_loss: 0.2037 - val_auc: 0.9754\n", - "Epoch 14/10000\n", - "33/33 - 0s - loss: 0.2089 - auc: 0.9733 - val_loss: 0.1974 - val_auc: 0.9753\n", - "Epoch 15/10000\n", - "33/33 - 0s - loss: 0.2083 - auc: 0.9733 - val_loss: 0.1985 - val_auc: 0.9757\n", - "Epoch 16/10000\n", - "33/33 - 0s - loss: 0.2048 - auc: 0.9741 - val_loss: 0.1943 - val_auc: 0.9764\n", - "Epoch 17/10000\n", - "33/33 - 0s - loss: 0.2040 - auc: 0.9743 - val_loss: 0.2171 - val_auc: 0.9695\n", - "Epoch 18/10000\n", - "33/33 - 0s - loss: 0.2032 - auc: 0.9743 - val_loss: 0.1958 - val_auc: 0.9757\n", - "Epoch 19/10000\n", - "33/33 - 0s - loss: 0.1999 - auc: 0.9752 - val_loss: 0.2035 - val_auc: 0.9735\n", - "Epoch 20/10000\n", - "33/33 - 0s - loss: 0.2009 - auc: 0.9748 - val_loss: 0.1940 - val_auc: 0.9758\n", - "Epoch 21/10000\n", - "33/33 - 0s - loss: 0.1985 - auc: 0.9755 - val_loss: 0.1936 - val_auc: 0.9760\n", - "Epoch 22/10000\n", - "33/33 - 0s - loss: 0.1994 - auc: 0.9752 - val_loss: 0.1924 - val_auc: 0.9763\n", - "Epoch 23/10000\n", - "33/33 - 0s - loss: 0.1970 - auc: 0.9758 - val_loss: 0.1951 - val_auc: 0.9755\n", - "Epoch 24/10000\n", - "33/33 - 0s - loss: 0.1952 - auc: 0.9762 - val_loss: 0.1951 - val_auc: 0.9756\n", - "Epoch 25/10000\n", - "33/33 - 0s - loss: 0.1945 - auc: 0.9765 - val_loss: 0.1907 - val_auc: 0.9771\n", - "Epoch 26/10000\n", - "33/33 - 0s - loss: 0.1949 - auc: 0.9764 - val_loss: 0.1895 - val_auc: 0.9771\n", - "Epoch 27/10000\n", - "33/33 - 0s - loss: 0.1941 - auc: 0.9764 - val_loss: 0.1931 - val_auc: 0.9760\n", - "Epoch 28/10000\n", - "33/33 - 0s - loss: 0.1950 - auc: 0.9762 - val_loss: 0.1913 - val_auc: 0.9766\n", - "Epoch 29/10000\n", - "33/33 - 0s - loss: 0.1931 - auc: 0.9767 - val_loss: 0.2022 - val_auc: 0.9733\n", - "Epoch 30/10000\n", - "33/33 - 0s - loss: 0.1920 - auc: 0.9768 - val_loss: 0.1904 - val_auc: 0.9767\n", - "Epoch 31/10000\n", - "33/33 - 0s - loss: 0.1911 - auc: 0.9771 - val_loss: 0.1885 - val_auc: 0.9773\n", - "Epoch 32/10000\n", - "33/33 - 0s - loss: 0.1896 - auc: 0.9774 - val_loss: 0.1912 - val_auc: 0.9767\n", - "Epoch 33/10000\n", - "33/33 - 0s - loss: 0.1894 - auc: 0.9774 - val_loss: 0.1854 - val_auc: 0.9780\n", - "Epoch 34/10000\n", - "33/33 - 0s - loss: 0.1894 - auc: 0.9775 - val_loss: 0.1881 - val_auc: 0.9774\n", - "Epoch 35/10000\n", - "33/33 - 0s - loss: 0.1893 - auc: 0.9774 - val_loss: 0.1981 - val_auc: 0.9744\n", - "Epoch 36/10000\n", - "33/33 - 0s - loss: 0.1878 - auc: 0.9778 - val_loss: 0.1950 - val_auc: 0.9758\n", - "Epoch 37/10000\n", - "33/33 - 0s - loss: 0.1890 - auc: 0.9775 - val_loss: 0.2016 - val_auc: 0.9736\n", - "Epoch 38/10000\n", - "33/33 - 0s - loss: 0.1885 - auc: 0.9776 - val_loss: 0.1912 - val_auc: 0.9768\n", - "Epoch 39/10000\n", - "33/33 - 0s - loss: 0.1873 - auc: 0.9780 - val_loss: 0.2018 - val_auc: 0.9734\n", - "Epoch 40/10000\n", - "33/33 - 0s - loss: 0.1875 - auc: 0.9779 - val_loss: 0.1912 - val_auc: 0.9767\n", - "Epoch 41/10000\n", - "33/33 - 0s - loss: 0.1871 - auc: 0.9780 - val_loss: 0.1906 - val_auc: 0.9771\n", - "Epoch 42/10000\n", - "33/33 - 0s - loss: 0.1870 - auc: 0.9781 - val_loss: 0.1877 - val_auc: 0.9776\n", - "Epoch 43/10000\n", - "33/33 - 0s - loss: 0.1871 - auc: 0.9780 - val_loss: 0.1887 - val_auc: 0.9771\n", - "Epoch 44/10000\n", - "33/33 - 0s - loss: 0.1849 - auc: 0.9785 - val_loss: 0.1970 - val_auc: 0.9750\n", - "Epoch 45/10000\n", - "33/33 - 0s - loss: 0.1864 - auc: 0.9782 - val_loss: 0.1999 - val_auc: 0.9744\n", - "Epoch 46/10000\n", - "33/33 - 0s - loss: 0.1861 - auc: 0.9782 - val_loss: 0.1857 - val_auc: 0.9780\n", - "Epoch 47/10000\n", - "33/33 - 0s - loss: 0.1844 - auc: 0.9786 - val_loss: 0.2001 - val_auc: 0.9739\n", - "Epoch 48/10000\n", - "33/33 - 0s - loss: 0.1852 - auc: 0.9784 - val_loss: 0.1915 - val_auc: 0.9763\n", - "Epoch 49/10000\n", - "33/33 - 0s - loss: 0.1859 - auc: 0.9783 - val_loss: 0.1875 - val_auc: 0.9776\n", - "Epoch 50/10000\n", - "33/33 - 0s - loss: 0.1834 - auc: 0.9788 - val_loss: 0.1898 - val_auc: 0.9769\n", - "Epoch 51/10000\n", - "33/33 - 0s - loss: 0.1832 - auc: 0.9788 - val_loss: 0.1944 - val_auc: 0.9757\n", - "Epoch 52/10000\n", - "33/33 - 0s - loss: 0.1833 - auc: 0.9788 - val_loss: 0.1853 - val_auc: 0.9781\n", - "Epoch 53/10000\n", - "33/33 - 0s - loss: 0.1851 - auc: 0.9785 - val_loss: 0.1863 - val_auc: 0.9780\n", - "Epoch 54/10000\n", - "33/33 - 0s - loss: 0.1835 - auc: 0.9787 - val_loss: 0.1922 - val_auc: 0.9762\n", - "Epoch 55/10000\n", - "33/33 - 0s - loss: 0.1844 - auc: 0.9786 - val_loss: 0.1884 - val_auc: 0.9776\n", - "Epoch 56/10000\n", - "33/33 - 0s - loss: 0.1833 - auc: 0.9789 - val_loss: 0.1840 - val_auc: 0.9785\n", - "Epoch 57/10000\n", - "33/33 - 0s - loss: 0.1828 - auc: 0.9790 - val_loss: 0.1903 - val_auc: 0.9768\n", - "Epoch 58/10000\n", - "33/33 - 0s - loss: 0.1831 - auc: 0.9789 - val_loss: 0.1856 - val_auc: 0.9782\n", - "Epoch 59/10000\n", - "33/33 - 0s - loss: 0.1825 - auc: 0.9790 - val_loss: 0.1894 - val_auc: 0.9773\n", - "Epoch 60/10000\n", - "33/33 - 0s - loss: 0.1820 - auc: 0.9791 - val_loss: 0.1853 - val_auc: 0.9781\n", - "Epoch 61/10000\n", - "33/33 - 0s - loss: 0.1818 - auc: 0.9792 - val_loss: 0.1868 - val_auc: 0.9778\n", - "Epoch 62/10000\n", - "33/33 - 0s - loss: 0.1832 - auc: 0.9790 - val_loss: 0.1869 - val_auc: 0.9777\n", - "Epoch 63/10000\n", - "33/33 - 0s - loss: 0.1810 - auc: 0.9794 - val_loss: 0.1888 - val_auc: 0.9772\n", - "Epoch 64/10000\n", - "33/33 - 0s - loss: 0.1811 - auc: 0.9793 - val_loss: 0.1865 - val_auc: 0.9778\n", - "Epoch 65/10000\n", - "33/33 - 0s - loss: 0.1816 - auc: 0.9792 - val_loss: 0.1852 - val_auc: 0.9780\n", - "Epoch 66/10000\n", - "33/33 - 0s - loss: 0.1813 - auc: 0.9793 - val_loss: 0.1845 - val_auc: 0.9784\n", - "Epoch 67/10000\n", - "33/33 - 0s - loss: 0.1800 - auc: 0.9796 - val_loss: 0.1853 - val_auc: 0.9784\n", - "Epoch 68/10000\n", - "33/33 - 0s - loss: 0.1817 - auc: 0.9791 - val_loss: 0.1872 - val_auc: 0.9777\n", - "Epoch 69/10000\n", - "33/33 - 0s - loss: 0.1804 - auc: 0.9795 - val_loss: 0.1845 - val_auc: 0.9787\n", - "Epoch 70/10000\n", - "33/33 - 0s - loss: 0.1796 - auc: 0.9797 - val_loss: 0.1893 - val_auc: 0.9772\n", - "Epoch 71/10000\n", - "33/33 - 0s - loss: 0.1788 - auc: 0.9798 - val_loss: 0.1851 - val_auc: 0.9785\n", - "Epoch 72/10000\n", - "33/33 - 0s - loss: 0.1792 - auc: 0.9798 - val_loss: 0.1853 - val_auc: 0.9783\n", - "Epoch 73/10000\n", - "33/33 - 0s - loss: 0.1788 - auc: 0.9798 - val_loss: 0.2008 - val_auc: 0.9742\n", - "Epoch 74/10000\n", - "33/33 - 0s - loss: 0.1783 - auc: 0.9799 - val_loss: 0.1855 - val_auc: 0.9784\n", - "Epoch 75/10000\n", - "33/33 - 0s - loss: 0.1791 - auc: 0.9797 - val_loss: 0.1863 - val_auc: 0.9781\n", - "Epoch 76/10000\n", - "33/33 - 0s - loss: 0.1800 - auc: 0.9796 - val_loss: 0.1859 - val_auc: 0.9780\n", - "Epoch 77/10000\n", - "33/33 - 0s - loss: 0.1792 - auc: 0.9798 - val_loss: 0.1997 - val_auc: 0.9747\n", - "Epoch 78/10000\n", - "33/33 - 0s - loss: 0.1795 - auc: 0.9797 - val_loss: 0.1835 - val_auc: 0.9785\n", - "Epoch 79/10000\n", - "33/33 - 0s - loss: 0.1790 - auc: 0.9798 - val_loss: 0.1921 - val_auc: 0.9773\n", - "Epoch 80/10000\n", - "33/33 - 0s - loss: 0.1785 - auc: 0.9798 - val_loss: 0.1826 - val_auc: 0.9789\n", - "Epoch 81/10000\n", - "33/33 - 0s - loss: 0.1771 - auc: 0.9802 - val_loss: 0.1890 - val_auc: 0.9779\n", - "Epoch 82/10000\n", - "33/33 - 0s - loss: 0.1772 - auc: 0.9801 - val_loss: 0.1885 - val_auc: 0.9770\n", - "Epoch 83/10000\n", - "33/33 - 0s - loss: 0.1789 - auc: 0.9798 - val_loss: 0.1831 - val_auc: 0.9786\n", - "Epoch 84/10000\n", - "33/33 - 0s - loss: 0.1766 - auc: 0.9802 - val_loss: 0.1854 - val_auc: 0.9779\n", - "Epoch 85/10000\n", - "33/33 - 0s - loss: 0.1784 - auc: 0.9799 - val_loss: 0.1865 - val_auc: 0.9783\n", - "Epoch 86/10000\n", - "33/33 - 0s - loss: 0.1773 - auc: 0.9802 - val_loss: 0.1859 - val_auc: 0.9782\n", - "Epoch 87/10000\n", - "33/33 - 0s - loss: 0.1779 - auc: 0.9800 - val_loss: 0.1885 - val_auc: 0.9770\n", - "Epoch 88/10000\n", - "33/33 - 0s - loss: 0.1784 - auc: 0.9799 - val_loss: 0.1814 - val_auc: 0.9790\n", - "Epoch 89/10000\n", - "33/33 - 0s - loss: 0.1769 - auc: 0.9802 - val_loss: 0.1818 - val_auc: 0.9790\n", - "Epoch 90/10000\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "33/33 - 0s - loss: 0.1761 - auc: 0.9804 - val_loss: 0.1836 - val_auc: 0.9785\n", - "Epoch 91/10000\n", - "33/33 - 0s - loss: 0.1765 - auc: 0.9803 - val_loss: 0.1800 - val_auc: 0.9793\n", - "Epoch 92/10000\n", - "33/33 - 0s - loss: 0.1758 - auc: 0.9804 - val_loss: 0.1860 - val_auc: 0.9778\n", - "Epoch 93/10000\n", - "33/33 - 0s - loss: 0.1767 - auc: 0.9802 - val_loss: 0.1861 - val_auc: 0.9777\n", - "Epoch 94/10000\n", - "33/33 - 0s - loss: 0.1749 - auc: 0.9807 - val_loss: 0.1807 - val_auc: 0.9790\n", - "Epoch 95/10000\n", - "33/33 - 0s - loss: 0.1749 - auc: 0.9806 - val_loss: 0.1829 - val_auc: 0.9787\n", - "Epoch 96/10000\n", - "33/33 - 0s - loss: 0.1764 - auc: 0.9804 - val_loss: 0.1835 - val_auc: 0.9784\n", - "Epoch 97/10000\n", - "33/33 - 0s - loss: 0.1765 - auc: 0.9802 - val_loss: 0.1845 - val_auc: 0.9783\n", - "Epoch 98/10000\n", - "33/33 - 0s - loss: 0.1750 - auc: 0.9807 - val_loss: 0.1835 - val_auc: 0.9785\n", - "Epoch 99/10000\n", - "33/33 - 0s - loss: 0.1734 - auc: 0.9810 - val_loss: 0.1846 - val_auc: 0.9783\n", - "Epoch 100/10000\n", - "33/33 - 0s - loss: 0.1747 - auc: 0.9807 - val_loss: 0.1828 - val_auc: 0.9788\n", - "Epoch 101/10000\n", - "33/33 - 0s - loss: 0.1746 - auc: 0.9809 - val_loss: 0.1850 - val_auc: 0.9782\n", - "Epoch 102/10000\n", - "33/33 - 0s - loss: 0.1736 - auc: 0.9809 - val_loss: 0.1845 - val_auc: 0.9784\n", - "Epoch 103/10000\n", - "33/33 - 0s - loss: 0.1745 - auc: 0.9807 - val_loss: 0.1898 - val_auc: 0.9771\n", - "Epoch 104/10000\n", - "33/33 - 0s - loss: 0.1731 - auc: 0.9811 - val_loss: 0.1872 - val_auc: 0.9777\n", - "Epoch 105/10000\n", - "33/33 - 0s - loss: 0.1745 - auc: 0.9807 - val_loss: 0.1814 - val_auc: 0.9787\n", - "Epoch 106/10000\n", - "33/33 - 0s - loss: 0.1742 - auc: 0.9808 - val_loss: 0.1869 - val_auc: 0.9778\n", - "Epoch 107/10000\n", - "33/33 - 0s - loss: 0.1743 - auc: 0.9808 - val_loss: 0.1824 - val_auc: 0.9788\n", - "Epoch 108/10000\n", - "33/33 - 0s - loss: 0.1733 - auc: 0.9810 - val_loss: 0.1843 - val_auc: 0.9787\n", - "Epoch 109/10000\n", - "33/33 - 0s - loss: 0.1724 - auc: 0.9812 - val_loss: 0.1836 - val_auc: 0.9785\n", - "Epoch 110/10000\n", - "33/33 - 0s - loss: 0.1725 - auc: 0.9811 - val_loss: 0.1835 - val_auc: 0.9790\n", - "Epoch 111/10000\n", - "33/33 - 0s - loss: 0.1740 - auc: 0.9808 - val_loss: 0.1855 - val_auc: 0.9785\n", - "Epoch 112/10000\n", - "33/33 - 0s - loss: 0.1717 - auc: 0.9814 - val_loss: 0.1830 - val_auc: 0.9787\n", - "Epoch 113/10000\n", - "33/33 - 0s - loss: 0.1734 - auc: 0.9810 - val_loss: 0.1838 - val_auc: 0.9786\n", - "Epoch 114/10000\n", - "33/33 - 0s - loss: 0.1738 - auc: 0.9809 - val_loss: 0.1829 - val_auc: 0.9788\n", - "Epoch 115/10000\n", - "33/33 - 0s - loss: 0.1732 - auc: 0.9810 - val_loss: 0.1812 - val_auc: 0.9788\n", - "Epoch 116/10000\n", - "33/33 - 0s - loss: 0.1725 - auc: 0.9813 - val_loss: 0.1840 - val_auc: 0.9788\n", - "Epoch 117/10000\n", - "33/33 - 0s - loss: 0.1725 - auc: 0.9812 - val_loss: 0.1802 - val_auc: 0.9789\n", - "Epoch 118/10000\n", - "33/33 - 0s - loss: 0.1710 - auc: 0.9814 - val_loss: 0.1837 - val_auc: 0.9788\n", - "Epoch 119/10000\n", - "33/33 - 0s - loss: 0.1707 - auc: 0.9815 - val_loss: 0.1818 - val_auc: 0.9790\n", - "Epoch 120/10000\n", - "33/33 - 0s - loss: 0.1704 - auc: 0.9815 - val_loss: 0.1819 - val_auc: 0.9790\n", - "Epoch 121/10000\n", - "Restoring model weights from the end of the best epoch.\n", - "33/33 - 0s - loss: 0.1715 - auc: 0.9815 - val_loss: 0.1900 - val_auc: 0.9781\n", - "Epoch 00121: early stopping\n", - "CPU times: user 1min 6s, sys: 5.01 s, total: 1min 11s\n", - "Wall time: 49.2 s\n" - ] - }, - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 17;\n", - " var nbb_unformatted_code = \"%%time\\n\\nmodel_snn = ThcNetClassifier(\\n n_layer=3,\\n mul_input=8, \\n metrics=['AUC'],\\n cat_idxs=cat_idxs,\\n cat_emb_dims=cat_dims,\\n dropout=0.05,\\n normalize=False,\\n max_emb=20,\\n patience=30,\\n use_snn=True,\\n noise=None\\n)\\n\\nhistory_snn = model_snn.fit(\\n X=X_train_prep, \\n y=y_train,\\n X_valid=X_valid_prep,\\n y_valid=y_valid,\\n batch_size=1024,\\n epochs=10000,\\n verbose=2,\\n)\";\n", - " var nbb_formatted_code = \"%%time\\n\\nmodel_snn = ThcNetClassifier(\\n n_layer=3,\\n mul_input=8, \\n metrics=['AUC'],\\n cat_idxs=cat_idxs,\\n cat_emb_dims=cat_dims,\\n dropout=0.05,\\n normalize=False,\\n max_emb=20,\\n patience=30,\\n use_snn=True,\\n noise=None\\n)\\n\\nhistory_snn = model_snn.fit(\\n X=X_train_prep, \\n y=y_train,\\n X_valid=X_valid_prep,\\n y_valid=y_valid,\\n batch_size=1024,\\n epochs=10000,\\n verbose=2,\\n)\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2020-09-15T01:03:36.155919Z", + "start_time": "2020-09-15T01:02:36.071253Z" } - ], + }, + "outputs": [], "source": [ "%%time\n", "\n", @@ -1113,211 +402,28 @@ }, { "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Model: \"model\"\n", - "__________________________________________________________________________________________________\n", - "Layer (type) Output Shape Param # Connected to \n", - "==================================================================================================\n", - "input_1 (InputLayer) [(None, 1)] 0 \n", - "__________________________________________________________________________________________________\n", - "input_2 (InputLayer) [(None, 1)] 0 \n", - "__________________________________________________________________________________________________\n", - "input_3 (InputLayer) [(None, 1)] 0 \n", - "__________________________________________________________________________________________________\n", - "input_4 (InputLayer) [(None, 1)] 0 \n", - "__________________________________________________________________________________________________\n", - "input_5 (InputLayer) [(None, 1)] 0 \n", - "__________________________________________________________________________________________________\n", - "input_6 (InputLayer) [(None, 1)] 0 \n", - "__________________________________________________________________________________________________\n", - "input_7 (InputLayer) [(None, 1)] 0 \n", - "__________________________________________________________________________________________________\n", - "input_8 (InputLayer) [(None, 1)] 0 \n", - "__________________________________________________________________________________________________\n", - "input_9 (InputLayer) [(None, 1)] 0 \n", - "__________________________________________________________________________________________________\n", - "input_10 (InputLayer) [(None, 1)] 0 \n", - "__________________________________________________________________________________________________\n", - "input_11 (InputLayer) [(None, 1)] 0 \n", - "__________________________________________________________________________________________________\n", - "input_12 (InputLayer) [(None, 1)] 0 \n", - "__________________________________________________________________________________________________\n", - "input_13 (InputLayer) [(None, 1)] 0 \n", - "__________________________________________________________________________________________________\n", - "input_14 (InputLayer) [(None, 1)] 0 \n", - "__________________________________________________________________________________________________\n", - "input_15 (InputLayer) [(None, 1)] 0 \n", - "__________________________________________________________________________________________________\n", - "input_16 (InputLayer) [(None, 1)] 0 \n", - "__________________________________________________________________________________________________\n", - "input_17 (InputLayer) [(None, 1)] 0 \n", - "__________________________________________________________________________________________________\n", - "input_18 (InputLayer) [(None, 1)] 0 \n", - "__________________________________________________________________________________________________\n", - "embedding (Embedding) (None, 1, 20) 1580 input_1[0][0] \n", - "__________________________________________________________________________________________________\n", - "embedding_1 (Embedding) (None, 1, 7) 91 input_2[0][0] \n", - "__________________________________________________________________________________________________\n", - "embedding_2 (Embedding) (None, 1, 3) 15 input_3[0][0] \n", - "__________________________________________________________________________________________________\n", - "embedding_3 (Embedding) (None, 1, 5) 45 input_4[0][0] \n", - "__________________________________________________________________________________________________\n", - "embedding_4 (Embedding) (None, 1, 2) 8 input_5[0][0] \n", - "__________________________________________________________________________________________________\n", - "embedding_5 (Embedding) (None, 1, 2) 8 input_6[0][0] \n", - "__________________________________________________________________________________________________\n", - "embedding_6 (Embedding) (None, 1, 2) 8 input_7[0][0] \n", - "__________________________________________________________________________________________________\n", - "embedding_7 (Embedding) (None, 1, 2) 6 input_8[0][0] \n", - "__________________________________________________________________________________________________\n", - "embedding_8 (Embedding) (None, 1, 6) 66 input_9[0][0] \n", - "__________________________________________________________________________________________________\n", - "embedding_9 (Embedding) (None, 1, 3) 18 input_10[0][0] \n", - "__________________________________________________________________________________________________\n", - "embedding_10 (Embedding) (None, 1, 20) 860 input_11[0][0] \n", - "__________________________________________________________________________________________________\n", - "embedding_11 (Embedding) (None, 1, 14) 392 input_12[0][0] \n", - "__________________________________________________________________________________________________\n", - "embedding_12 (Embedding) (None, 1, 5) 45 input_13[0][0] \n", - "__________________________________________________________________________________________________\n", - "embedding_13 (Embedding) (None, 1, 2) 8 input_14[0][0] \n", - "__________________________________________________________________________________________________\n", - "embedding_14 (Embedding) (None, 1, 6) 66 input_15[0][0] \n", - "__________________________________________________________________________________________________\n", - "embedding_15 (Embedding) (None, 1, 14) 378 input_16[0][0] \n", - "__________________________________________________________________________________________________\n", - "embedding_16 (Embedding) (None, 1, 14) 378 input_17[0][0] \n", - "__________________________________________________________________________________________________\n", - "embedding_17 (Embedding) (None, 1, 6) 72 input_18[0][0] \n", - "__________________________________________________________________________________________________\n", - "concatenate (Concatenate) (None, 1, 133) 0 embedding[0][0] \n", - " embedding_1[0][0] \n", - " embedding_2[0][0] \n", - " embedding_3[0][0] \n", - " embedding_4[0][0] \n", - " embedding_5[0][0] \n", - " embedding_6[0][0] \n", - " embedding_7[0][0] \n", - " embedding_8[0][0] \n", - " embedding_9[0][0] \n", - " embedding_10[0][0] \n", - " embedding_11[0][0] \n", - " embedding_12[0][0] \n", - " embedding_13[0][0] \n", - " embedding_14[0][0] \n", - " embedding_15[0][0] \n", - " embedding_16[0][0] \n", - " embedding_17[0][0] \n", - "__________________________________________________________________________________________________\n", - "spatial_dropout1d (SpatialDropo (None, 1, 133) 0 concatenate[0][0] \n", - "__________________________________________________________________________________________________\n", - "input_19 (InputLayer) [(None, 2)] 0 \n", - "__________________________________________________________________________________________________\n", - "reshape (Reshape) (None, 133) 0 spatial_dropout1d[0][0] \n", - "__________________________________________________________________________________________________\n", - "gaussian_noise (GaussianNoise) (None, 2) 0 input_19[0][0] \n", - "__________________________________________________________________________________________________\n", - "concatenate_1 (Concatenate) (None, 135) 0 reshape[0][0] \n", - " gaussian_noise[0][0] \n", - "__________________________________________________________________________________________________\n", - "dense (Dense) (None, 1080) 146880 concatenate_1[0][0] \n", - "__________________________________________________________________________________________________\n", - "dropout (Dropout) (None, 1080) 0 dense[0][0] \n", - "__________________________________________________________________________________________________\n", - "dense_1 (Dense) (None, 720) 778320 dropout[0][0] \n", - "__________________________________________________________________________________________________\n", - "dropout_1 (Dropout) (None, 720) 0 dense_1[0][0] \n", - "__________________________________________________________________________________________________\n", - "dense_2 (Dense) (None, 361) 260281 dropout_1[0][0] \n", - "__________________________________________________________________________________________________\n", - "dropout_2 (Dropout) (None, 361) 0 dense_2[0][0] \n", - "__________________________________________________________________________________________________\n", - "dense_3 (Dense) (None, 2) 724 dropout_2[0][0] \n", - "==================================================================================================\n", - "Total params: 1,190,249\n", - "Trainable params: 1,190,249\n", - "Non-trainable params: 0\n", - "__________________________________________________________________________________________________\n" - ] - }, - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 18;\n", - " var nbb_unformatted_code = \"model.network.summary()\";\n", - " var nbb_formatted_code = \"model.network.summary()\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2020-09-15T01:03:36.187579Z", + "start_time": "2020-09-15T01:03:36.157073Z" } - ], + }, + "outputs": [], "source": [ "model.network.summary()" ] }, { "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Failed to import pydot. You must install pydot and graphviz for `pydotprint` to work.\n" - ] - }, - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 19;\n", - " var nbb_unformatted_code = \"plot_model(\\n model,\\n # to_file=\\\"model.png\\\",\\n show_shapes=True,\\n show_layer_names=True,\\n rankdir=\\\"TB\\\",\\n expand_nested=False,\\n dpi=96,\\n)\";\n", - " var nbb_formatted_code = \"plot_model(\\n model,\\n # to_file=\\\"model.png\\\",\\n show_shapes=True,\\n show_layer_names=True,\\n rankdir=\\\"TB\\\",\\n expand_nested=False,\\n dpi=96,\\n)\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2020-09-15T01:03:36.215380Z", + "start_time": "2020-09-15T01:03:36.188617Z" } - ], + }, + "outputs": [], "source": [ "plot_model(\n", " model,\n", @@ -1332,165 +438,14 @@ }, { "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Model: \"model_1\"\n", - "__________________________________________________________________________________________________\n", - "Layer (type) Output Shape Param # Connected to \n", - "==================================================================================================\n", - "input_20 (InputLayer) [(None, 1)] 0 \n", - "__________________________________________________________________________________________________\n", - "input_21 (InputLayer) [(None, 1)] 0 \n", - "__________________________________________________________________________________________________\n", - "input_22 (InputLayer) [(None, 1)] 0 \n", - "__________________________________________________________________________________________________\n", - "input_23 (InputLayer) [(None, 1)] 0 \n", - "__________________________________________________________________________________________________\n", - "input_24 (InputLayer) [(None, 1)] 0 \n", - "__________________________________________________________________________________________________\n", - "input_25 (InputLayer) [(None, 1)] 0 \n", - "__________________________________________________________________________________________________\n", - "input_26 (InputLayer) [(None, 1)] 0 \n", - "__________________________________________________________________________________________________\n", - "input_27 (InputLayer) [(None, 1)] 0 \n", - "__________________________________________________________________________________________________\n", - "input_28 (InputLayer) [(None, 1)] 0 \n", - "__________________________________________________________________________________________________\n", - "input_29 (InputLayer) [(None, 1)] 0 \n", - "__________________________________________________________________________________________________\n", - "input_30 (InputLayer) [(None, 1)] 0 \n", - "__________________________________________________________________________________________________\n", - "input_31 (InputLayer) [(None, 1)] 0 \n", - "__________________________________________________________________________________________________\n", - "input_32 (InputLayer) [(None, 1)] 0 \n", - "__________________________________________________________________________________________________\n", - "input_33 (InputLayer) [(None, 1)] 0 \n", - "__________________________________________________________________________________________________\n", - "input_34 (InputLayer) [(None, 1)] 0 \n", - "__________________________________________________________________________________________________\n", - "input_35 (InputLayer) [(None, 1)] 0 \n", - "__________________________________________________________________________________________________\n", - "input_36 (InputLayer) [(None, 1)] 0 \n", - "__________________________________________________________________________________________________\n", - "input_37 (InputLayer) [(None, 1)] 0 \n", - "__________________________________________________________________________________________________\n", - "embedding_18 (Embedding) (None, 1, 20) 1580 input_20[0][0] \n", - "__________________________________________________________________________________________________\n", - "embedding_19 (Embedding) (None, 1, 7) 91 input_21[0][0] \n", - "__________________________________________________________________________________________________\n", - "embedding_20 (Embedding) (None, 1, 3) 15 input_22[0][0] \n", - "__________________________________________________________________________________________________\n", - "embedding_21 (Embedding) (None, 1, 5) 45 input_23[0][0] \n", - "__________________________________________________________________________________________________\n", - "embedding_22 (Embedding) (None, 1, 2) 8 input_24[0][0] \n", - "__________________________________________________________________________________________________\n", - "embedding_23 (Embedding) (None, 1, 2) 8 input_25[0][0] \n", - "__________________________________________________________________________________________________\n", - "embedding_24 (Embedding) (None, 1, 2) 8 input_26[0][0] \n", - "__________________________________________________________________________________________________\n", - "embedding_25 (Embedding) (None, 1, 2) 6 input_27[0][0] \n", - "__________________________________________________________________________________________________\n", - "embedding_26 (Embedding) (None, 1, 6) 66 input_28[0][0] \n", - "__________________________________________________________________________________________________\n", - "embedding_27 (Embedding) (None, 1, 3) 18 input_29[0][0] \n", - "__________________________________________________________________________________________________\n", - "embedding_28 (Embedding) (None, 1, 20) 860 input_30[0][0] \n", - "__________________________________________________________________________________________________\n", - "embedding_29 (Embedding) (None, 1, 14) 392 input_31[0][0] \n", - "__________________________________________________________________________________________________\n", - "embedding_30 (Embedding) (None, 1, 5) 45 input_32[0][0] \n", - "__________________________________________________________________________________________________\n", - "embedding_31 (Embedding) (None, 1, 2) 8 input_33[0][0] \n", - "__________________________________________________________________________________________________\n", - "embedding_32 (Embedding) (None, 1, 6) 66 input_34[0][0] \n", - "__________________________________________________________________________________________________\n", - "embedding_33 (Embedding) (None, 1, 14) 378 input_35[0][0] \n", - "__________________________________________________________________________________________________\n", - "embedding_34 (Embedding) (None, 1, 14) 378 input_36[0][0] \n", - "__________________________________________________________________________________________________\n", - "embedding_35 (Embedding) (None, 1, 6) 72 input_37[0][0] \n", - "__________________________________________________________________________________________________\n", - "concatenate_2 (Concatenate) (None, 1, 133) 0 embedding_18[0][0] \n", - " embedding_19[0][0] \n", - " embedding_20[0][0] \n", - " embedding_21[0][0] \n", - " embedding_22[0][0] \n", - " embedding_23[0][0] \n", - " embedding_24[0][0] \n", - " embedding_25[0][0] \n", - " embedding_26[0][0] \n", - " embedding_27[0][0] \n", - " embedding_28[0][0] \n", - " embedding_29[0][0] \n", - " embedding_30[0][0] \n", - " embedding_31[0][0] \n", - " embedding_32[0][0] \n", - " embedding_33[0][0] \n", - " embedding_34[0][0] \n", - " embedding_35[0][0] \n", - "__________________________________________________________________________________________________\n", - "reshape_1 (Reshape) (None, 133) 0 concatenate_2[0][0] \n", - "__________________________________________________________________________________________________\n", - "alpha_dropout (AlphaDropout) (None, 133) 0 reshape_1[0][0] \n", - "__________________________________________________________________________________________________\n", - "input_38 (InputLayer) [(None, 2)] 0 \n", - "__________________________________________________________________________________________________\n", - "concatenate_3 (Concatenate) (None, 135) 0 alpha_dropout[0][0] \n", - " input_38[0][0] \n", - "__________________________________________________________________________________________________\n", - "dense_4 (Dense) (None, 1080) 146880 concatenate_3[0][0] \n", - "__________________________________________________________________________________________________\n", - "alpha_dropout_1 (AlphaDropout) (None, 1080) 0 dense_4[0][0] \n", - "__________________________________________________________________________________________________\n", - "dense_5 (Dense) (None, 720) 778320 alpha_dropout_1[0][0] \n", - "__________________________________________________________________________________________________\n", - "alpha_dropout_2 (AlphaDropout) (None, 720) 0 dense_5[0][0] \n", - "__________________________________________________________________________________________________\n", - "dense_6 (Dense) (None, 361) 260281 alpha_dropout_2[0][0] \n", - "__________________________________________________________________________________________________\n", - "alpha_dropout_3 (AlphaDropout) (None, 361) 0 dense_6[0][0] \n", - "__________________________________________________________________________________________________\n", - "dense_7 (Dense) (None, 2) 724 alpha_dropout_3[0][0] \n", - "==================================================================================================\n", - "Total params: 1,190,249\n", - "Trainable params: 1,190,249\n", - "Non-trainable params: 0\n", - "__________________________________________________________________________________________________\n" - ] - }, - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 20;\n", - " var nbb_unformatted_code = \"model_snn.network.summary()\";\n", - " var nbb_formatted_code = \"model_snn.network.summary()\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2020-09-15T01:03:36.246732Z", + "start_time": "2020-09-15T01:03:36.216328Z" } - ], + }, + "outputs": [], "source": [ "model_snn.network.summary()" ] @@ -1504,142 +459,42 @@ }, { "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 21;\n", - " var nbb_unformatted_code = \"plot_history(history)\";\n", - " var nbb_formatted_code = \"plot_history(history)\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2020-09-15T01:03:36.410872Z", + "start_time": "2020-09-15T01:03:36.247630Z" } - ], + }, + "outputs": [], "source": [ "plot_history(history)" ] }, { "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEWCAYAAAB8LwAVAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdeXxN1/rH8c+TyGCIORES8zw2iKmqRSmqlw7a0lF1wK0q2tvqnNLe2+pwtb+qlk60WnRSSuuiamqVIGjMYgqhEUMMiUzP7499ciRxRAxHqOf9ep2X7HntYH/PWmvvvURVMcYYY/LyKewCGGOMuTRZQBhjjPHIAsIYY4xHFhDGGGM8soAwxhjjkQWEMcYYjywgjDHGeGQBYcw5EJHtItKpsMthjDdZQBhjjPHIAsKYC0REAkRktIjscX1Gi0iAa1l5EflRRA6JyAERWSQiPq5lT4vIbhE5IiIbReT6wj0TYxxFCrsAxvyNPAe0BiIABX4AngdeAJ4A4oFg17qtARWRusAgoIWq7hGRaoDvxS22MZ5ZDcKYC+duYISq/qWqicDLwL2uZelARaCqqqar6iJ1XoSWCQQADUTET1W3q+rWQim9MXlYQBhz4VQCduSY3uGaB/AGsAX4n4jEichwAFXdAgwBooC/RGSyiFTCmEuABYQxF84eoGqO6SqueajqEVV9QlVrAD2AYdl9Dar6pape49pWgdcvbrGN8cwCwphz5ycigdkf4CvgeREJFpHywIvAFwAicpOI1BIRAQ7jNC1liUhdEeno6sxOBVKArMI5HWNys4Aw5tzNwrmgZ38CgWhgDbAWWAm84lq3NjAXOAr8DryvqvNx+h9eA/YDe4EQ4JmLdwrGnJ7YgEHGGGM8sRqEMcYYjywgjDHGeGQBYYwxxiMLCGOMMR79bV61Ub58ea1WrVphF8MYYy4rK1as2K+qwZ6WeTUgRKQr8A7Ou2U+UtXX8izvi/OE6W7XrPdU9SPXskycWwUBdqpqj/yOVa1aNaKjoy9g6Y0x5u9PRHacbpnXAkJEfIExQGecl5QtF5Hpqrouz6pTVHWQh12kqGqEt8pnjDEmf97sg2gJbFHVOFVNAyYDPb14PGOMMReQNwMiDNiVYzreNS+v20RkjYh8IyKVc8wPFJFoEVkqIjd7sZzGGGM8KOxO6hnAV6p6QkT6AxOAjq5lVVV1t4jUAH4RkbV5X4MsIo8AjwBUqVLlYpbbmHOSnp5OfHw8qamphV0Uc4UJDAwkPDwcPz+/Am/jzYDYDeSsEYRzsjMaAFVNyjH5ETAqx7Ldrj/jRORXoCmwNc/244BxAJGRkfbOEHPJi4+PJygoiGrVquG8t88Y71NVkpKSiI+Pp3r16gXezptNTMuB2iJSXUT8gd7A9JwriEjFHJM9gPWu+WVyDtUItAXydm4bc9lJTU2lXLlyFg7mohIRypUrd9Y1V6/VIFQ1Q0QGAbNxbnP9RFVjRWQEEK2q04HBItIDyAAOAH1dm9cHPhSRLJwQe83D3U/GXJYsHExhOJd/d17tg1DVWTivRM4578UcPz+Dh1cbq+pvQGNvli3b0aMwahTcdBO0bHkxjmiMMZeHK/5VGykpMHIkLFtW2CUxxvuSkpKIiIggIiKC0NBQwsLC3NNpaWn5bhsdHc3gwYPPeIyrr776gpT1119/5aabbrog+/KkV69exMXFAbBixQoaN25MrVq1GDx4MJ6GQdiwYQNt2rQhICCAN9980z1/48aN7t9hREQEJUuWZPTo0QB8/fXXNGzYEB8fH48P8u7cuZMSJUq495ffvp588kl++eWXC/57yE9h38VU6LI79NPTC7ccxlwM5cqVIyYmBoCoqChKlCjBk08+6V6ekZFBkSKeLwuRkZFERkae8Ri//fbbhSmsF8XGxpKZmUmNGjUAGDhwIOPHj6dVq1bceOON/Pzzz3Tr1i3XNmXLluXdd99l2rRpuebXrVvX/TvNzMwkLCyMW265BYBGjRrx3Xff0b9/f4/lGDZsWK7j5Levxx57jIcffpiOHTt63Jc3XPE1iOz/CxkZhVsOYwpL3759GTBgAK1ateKpp55i2bJltGnThqZNm3L11VezceNGIPc3+qioKPr160f79u2pUaMG7777rnt/JUqUcK/fvn17evXqRb169bj77rvd38xnzZpFvXr1aN68OYMHDz5jTeHAgQPcfPPNNGnShNatW7NmzRoAFixY4P623bRpU44cOUJCQgLXXnstERERNGrUiEWLFp2yv0mTJtGzp/PcbkJCAsnJybRu3RoR4b777jslBABCQkJo0aJFvreJzps3j5o1a1K1qjM0ef369albt67HdadNm0b16tVp2LBhgfZVtWpVkpKS2Lt3bz6/qQvLahBWgzCFZMgQcH1ZvGAiIsDVInFW4uPj+e233/D19SU5OZlFixZRpEgR5s6dy7PPPsu33357yjYbNmxg/vz5HDlyhLp16zJw4MBTLp6rVq0iNjaWSpUq0bZtW5YsWUJkZCT9+/dn4cKFVK9enT59+pyxfC+99BJNmzZl2rRp/PLLL9x3333ExMTw5ptvMmbMGNq2bcvRo0cJDAxk3LhxdOnSheeee47MzEyOHz9+yv6WLFniPu7u3bsJDw93LwsPD2f37t2nbFMQkydPLtD5HD16lNdff505c+bkaq46076aNWvGkiVLuO22286pfGfriq9BWEAYA7fffju+vr4AHD58mNtvv51GjRoxdOhQYmNjPW7TvXt3AgICKF++PCEhIezbt++UdVq2bEl4eDg+Pj5ERESwfft2NmzYQI0aNdz34xfkgrp48WLuvfdeADp27EhSUhLJycm0bduWYcOG8e6773Lo0CGKFClCixYt+PTTT4mKimLt2rUEBQWdsr+EhASCgz2+wPScpaWlMX36dG6//fYzrhsVFcXQoUPdta2C7iskJIQ9e/ZckPIWxBVfg/DxcT4WEOZiO5dv+t5SvHhx988vvPACHTp04Pvvv2f79u20b9/e4zYBAQHun319fcnw0E5bkHXOx/Dhw+nevTuzZs2ibdu2zJ49m2uvvZaFCxcyc+ZM+vbty7Bhw7jvvvtybVe0aFH3MwFhYWHEx8e7l8XHxxMW5umtQPn76aefaNasGRUqVDjjun/88QfffPMNTz31FIcOHcLHx4fAwEAGDRqU775SU1MpWrToWZftXF3xNQhwahEWEMY4Dh8+7L5AfvbZZxd8/3Xr1iUuLo7t27cDMGXKlDNu065dOyZNmgQ4fRvly5enZMmSbN26lcaNG/P000/TokULNmzYwI4dO6hQoQIPP/wwDz30ECtXrjxlf/Xr12fLli0AVKxYkZIlS7J06VJUlYkTJ7r7J87GV199VaDaEMCiRYvYvn0727dvZ8iQITz77LPucMhvX5s2baJRo0ZnXbZzZQGBExDWSW2M46mnnuKZZ56hadOmF/wbPzjf3t9//326du1K8+bNCQoKolSpUvluExUVxYoVK2jSpAnDhw9nwoQJAIwePZpGjRrRpEkT/Pz86NatG7/++itXXXUVTZs2ZcqUKTz++OOn7K979+78+uuv7un333+fhx56iFq1alGzZk33nUUffPABH3zwAQB79+4lPDyct99+m1deeYXw8HCSk5MBOHbsGHPmzOHWW2/NdZzvv/+e8PBwfv/9d7p3706XLl3O+Ps53b7S09PZsmVLge4ku1DE0/2+l6PIyEg91wGDypSBe++FHDdiGOMV69evp379+oVdjEJ39OhRSpQogary6KOPUrt2bYYOHXrRjp+SkkKHDh1YsmSJu+/lUvf999+zcuVKRo4cec778PTvT0RWqKrH1LEaBNbEZMzFNn78eCIiImjYsCGHDx8+7XMC3lK0aFFefvnlc75bqTBkZGTwxBNPXNRjXvGd1GABYczFNnTo0ItaY/CkIM09l5KC3B11oVkNAgsIY4zxxAICCwhjjPHEAgLndRt2F5MxxuRmAYHVIIwxxhMLCCwgjDHGEwsILCDMlaNDhw7Mnj0717zRo0czcODA027Tvn1791gGN954I4cOHTplnaioqNO+dC7btGnTWLfu5MCQL774InPnzj2b4nt0uYwbAfDOO+/QqFEjGjZs6B7nAZy31Xbu3JnatWvTuXNnDh48CDhjSQ8ePJhatWrRpEmTXE+F+/r6ut9k26NHD/f83r17s3nz5gty7hYQWECYK0efPn2YPHlyrnkFfQMpOK/pLl269DkdO29AjBgxgk6dOp3Tvi6W040bsXnzZjZv3szPP/98yjbZ40bkHGcD4M8//2T8+PEsW7aM1atX8+OPP7pf9/Haa69x/fXXs3nzZq6//npee+01wHknU/axxo0blyvIixYtSkxMDDExMUyfPt09f+DAgYwaNeqCnL9Xn4MQka7AOzhjUn+kqq/lWd4XeAPIflrlPVX9yLXsfuB51/xXVHWCt8ppndSmMAz5eQgxey/s+74jQiMY3fX0bwHs1asXzz//PGlpafj7+7N9+3b27NlDu3btGDhwIMuXLyclJYVevXrx8ssvn7J9tWrViI6Opnz58rz66qtMmDCBkJAQKleuTPPmzQHnIbhx48aRlpZGrVq1+Pzzz90XsQULFvDKK6/w7bffMnLkSG666SZ69erFvHnzePLJJ8nIyKBFixaMHTuWgIAAqlWrxv3338+MGTNIT0/n66+/pl69eqc9vwMHDtCvXz/i4uIoVqwY48aNo0mTJixYsMD9yg0RYeHChRw9epQ777yT5ORkMjIyGDt2LO3atcu1v9ON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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 22;\n", - " var nbb_unformatted_code = \"plot_history(history_snn)\";\n", - " var nbb_formatted_code = \"plot_history(history_snn)\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2020-09-15T01:03:36.562386Z", + "start_time": "2020-09-15T01:03:36.412073Z" } - ], + }, + "outputs": [], "source": [ "plot_history(history_snn)" ] }, { "cell_type": "code", - "execution_count": 23, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "FINAL TEST SCORE FOR bank-additional-full : 0.9458906993511176\n" - ] - }, - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 23;\n", - " var nbb_unformatted_code = \"y_pred = model.predict_proba(X_test_prep)\\ntest_auc = roc_auc_score(y_score=y_pred[:, 1], y_true=y_test)\\nprint(f\\\"FINAL TEST SCORE FOR {dataset_name} : {test_auc}\\\")\";\n", - " var nbb_formatted_code = \"y_pred = model.predict_proba(X_test_prep)\\ntest_auc = roc_auc_score(y_score=y_pred[:, 1], y_true=y_test)\\nprint(f\\\"FINAL TEST SCORE FOR {dataset_name} : {test_auc}\\\")\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2020-09-15T01:03:36.727379Z", + "start_time": "2020-09-15T01:03:36.563270Z" } - ], + }, + "outputs": [], "source": [ "y_pred = model.predict_proba(X_test_prep)\n", "test_auc = roc_auc_score(y_score=y_pred[:, 1], y_true=y_test)\n", @@ -1648,50 +503,27 @@ }, { "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "FINAL TEST SCORE FOR bank-additional-full : 0.9495036770007209\n" - ] - }, - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 24;\n", - " var nbb_unformatted_code = \"y_pred = model_snn.predict_proba(X_test_prep)\\ntest_auc = roc_auc_score(y_score=y_pred[:, 1], y_true=y_test)\\nprint(f\\\"FINAL TEST SCORE FOR {dataset_name} : {test_auc}\\\")\";\n", - " var nbb_formatted_code = \"y_pred = model_snn.predict_proba(X_test_prep)\\ntest_auc = roc_auc_score(y_score=y_pred[:, 1], y_true=y_test)\\nprint(f\\\"FINAL TEST SCORE FOR {dataset_name} : {test_auc}\\\")\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2020-09-15T01:03:37.018598Z", + "start_time": "2020-09-15T01:03:36.728866Z" } - ], + }, + "outputs": [], "source": [ "y_pred = model_snn.predict_proba(X_test_prep)\n", "test_auc = roc_auc_score(y_score=y_pred[:, 1], y_true=y_test)\n", "print(f\"FINAL TEST SCORE FOR {dataset_name} : {test_auc}\")" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, { "cell_type": "code", "execution_count": null, @@ -1716,7 +548,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.7" + "version": "3.7.9" } }, "nbformat": 4, diff --git a/conv1d-generic-clean.ipynb b/conv1d-generic-clean.ipynb index ae8f29c..a88d815 100644 --- a/conv1d-generic-clean.ipynb +++ b/conv1d-generic-clean.ipynb @@ -2,42 +2,14 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, - "metadata": { - "ExecuteTime": { - "end_time": "2020-07-14T11:08:57.176592Z", - "start_time": "2020-07-14T11:08:57.099867Z" - } - }, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 1;\n", - " var nbb_unformatted_code = \"%load_ext nb_black\\n%load_ext autoreload\\n\\n%autoreload 2\";\n", - " var nbb_formatted_code = \"%load_ext nb_black\\n%load_ext autoreload\\n\\n%autoreload 2\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2020-09-15T00:49:48.292829Z", + "start_time": "2020-09-15T00:49:48.201726Z" + } + }, + "outputs": [], "source": [ "%load_ext nb_black\n", "%load_ext autoreload\n", @@ -47,42 +19,14 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-07-14T11:08:58.386561Z", - "start_time": "2020-07-14T11:08:57.177611Z" + "end_time": "2020-09-15T00:49:49.574964Z", + "start_time": "2020-09-15T00:49:48.293969Z" } }, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 2;\n", - " var nbb_unformatted_code = \"import os\\nfrom pathlib import Path\\n\\nfrom requests import get\\nimport pandas as pd\\nimport numpy as np\\n\\nfrom sklearn.metrics import roc_auc_score, log_loss\\nfrom sklearn.preprocessing import LabelEncoder\\nfrom tensorflow.keras.utils import plot_model\\nfrom tensorflow.keras.callbacks import EarlyStopping\\n\\nimport logging\\n\\nlogging.basicConfig(level=logging.WARN)\";\n", - " var nbb_formatted_code = \"import os\\nfrom pathlib import Path\\n\\nfrom requests import get\\nimport pandas as pd\\nimport numpy as np\\n\\nfrom sklearn.metrics import roc_auc_score, log_loss\\nfrom sklearn.preprocessing import LabelEncoder\\nfrom tensorflow.keras.utils import plot_model\\nfrom tensorflow.keras.callbacks import EarlyStopping\\n\\nimport logging\\n\\nlogging.basicConfig(level=logging.WARN)\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "import os\n", "from pathlib import Path\n", @@ -103,42 +47,14 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-07-14T11:08:58.555667Z", - "start_time": "2020-07-14T11:08:58.387789Z" + "end_time": "2020-09-15T00:49:49.766392Z", + "start_time": "2020-09-15T00:49:49.576238Z" } }, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 3;\n", - " var nbb_unformatted_code = \"from thc_net.explainable_model.input_utils import preproc_dataset\\nfrom thc_net.explainable_model.model import build_model\\nfrom thc_net.explainable_model.random_utils import setup_seed, SEED\\nfrom sklearn.model_selection import StratifiedShuffleSplit\\n\\nimport matplotlib.pyplot as plt\\nfrom matplotlib.pyplot import imshow\\n\\n%matplotlib inline\";\n", - " var nbb_formatted_code = \"from thc_net.explainable_model.input_utils import preproc_dataset\\nfrom thc_net.explainable_model.model import build_model\\nfrom thc_net.explainable_model.random_utils import setup_seed, SEED\\nfrom sklearn.model_selection import StratifiedShuffleSplit\\n\\nimport matplotlib.pyplot as plt\\nfrom matplotlib.pyplot import imshow\\n\\n%matplotlib inline\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "from thc_net.explainable_model.input_utils import preproc_dataset\n", "from thc_net.explainable_model.model import build_model\n", @@ -153,84 +69,28 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-07-14T11:08:58.577649Z", - "start_time": "2020-07-14T11:08:58.556721Z" + "end_time": "2020-09-15T00:49:49.789555Z", + "start_time": "2020-09-15T00:49:49.767586Z" } }, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 4;\n", - " var nbb_unformatted_code = \"setup_seed()\";\n", - " var nbb_formatted_code = \"setup_seed()\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "setup_seed()" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-07-14T11:08:58.609807Z", - "start_time": "2020-07-14T11:08:58.578610Z" + "end_time": "2020-09-15T00:49:49.821952Z", + "start_time": "2020-09-15T00:49:49.790598Z" } }, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 5;\n", - " var nbb_unformatted_code = \"def download(url, out, force=False, verify=True):\\n out.parent.mkdir(parents=True, exist_ok=True)\\n if force and out.exists():\\n print(f\\\"Removing file at {str(out)}\\\")\\n out.unlink()\\n\\n if out.exists():\\n print(\\\"File already exists.\\\")\\n return\\n print(f\\\"Downloading {url} at {str(out)} ...\\\")\\n # open in binary mode\\n with out.open(mode=\\\"wb\\\") as file:\\n # get request\\n response = get(url, verify=verify)\\n for chunk in response.iter_content(100000):\\n # write to file\\n file.write(chunk)\";\n", - " var nbb_formatted_code = \"def download(url, out, force=False, verify=True):\\n out.parent.mkdir(parents=True, exist_ok=True)\\n if force and out.exists():\\n print(f\\\"Removing file at {str(out)}\\\")\\n out.unlink()\\n\\n if out.exists():\\n print(\\\"File already exists.\\\")\\n return\\n print(f\\\"Downloading {url} at {str(out)} ...\\\")\\n # open in binary mode\\n with out.open(mode=\\\"wb\\\") as file:\\n # get request\\n response = get(url, verify=verify)\\n for chunk in response.iter_content(100000):\\n # write to file\\n file.write(chunk)\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "def download(url, out, force=False, verify=True):\n", " out.parent.mkdir(parents=True, exist_ok=True)\n", @@ -253,42 +113,14 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-07-14T11:08:58.654060Z", - "start_time": "2020-07-14T11:08:58.610783Z" + "end_time": "2020-09-15T00:49:49.866842Z", + "start_time": "2020-09-15T00:49:49.823008Z" } }, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 6;\n", - " var nbb_unformatted_code = \"def plot_history(history):\\n loss_list = [s for s in history.history.keys() if \\\"loss\\\" in s and \\\"val\\\" not in s]\\n val_loss_list = [s for s in history.history.keys() if \\\"loss\\\" in s and \\\"val\\\" in s]\\n acc_list = [s for s in history.history.keys() if \\\"AUC\\\" in s and \\\"val\\\" not in s]\\n val_acc_list = [s for s in history.history.keys() if \\\"AUC\\\" in s and \\\"val\\\" in s]\\n\\n if len(loss_list) == 0:\\n print(\\\"Loss is missing in history\\\")\\n return\\n\\n ## As loss always exists\\n epochs = range(1, len(history.history[loss_list[0]]) + 1)\\n\\n ## Loss\\n plt.figure(1)\\n for l in loss_list:\\n plt.plot(\\n epochs,\\n history.history[l],\\n \\\"b\\\",\\n label=\\\"Training loss (\\\"\\n + str(str(format(history.history[l][-1], \\\".5f\\\")) + \\\")\\\"),\\n )\\n for l in val_loss_list:\\n plt.plot(\\n epochs,\\n history.history[l],\\n \\\"g\\\",\\n label=\\\"Validation loss (\\\"\\n + str(str(format(history.history[l][-1], \\\".5f\\\")) + \\\")\\\"),\\n )\\n\\n plt.title(\\\"Loss\\\")\\n plt.xlabel(\\\"Epochs\\\")\\n plt.ylabel(\\\"Loss\\\")\\n plt.legend()\\n\\n plt.show()\";\n", - " var nbb_formatted_code = \"def plot_history(history):\\n loss_list = [s for s in history.history.keys() if \\\"loss\\\" in s and \\\"val\\\" not in s]\\n val_loss_list = [s for s in history.history.keys() if \\\"loss\\\" in s and \\\"val\\\" in s]\\n acc_list = [s for s in history.history.keys() if \\\"AUC\\\" in s and \\\"val\\\" not in s]\\n val_acc_list = [s for s in history.history.keys() if \\\"AUC\\\" in s and \\\"val\\\" in s]\\n\\n if len(loss_list) == 0:\\n print(\\\"Loss is missing in history\\\")\\n return\\n\\n ## As loss always exists\\n epochs = range(1, len(history.history[loss_list[0]]) + 1)\\n\\n ## Loss\\n plt.figure(1)\\n for l in loss_list:\\n plt.plot(\\n epochs,\\n history.history[l],\\n \\\"b\\\",\\n label=\\\"Training loss (\\\"\\n + str(str(format(history.history[l][-1], \\\".5f\\\")) + \\\")\\\"),\\n )\\n for l in val_loss_list:\\n plt.plot(\\n epochs,\\n history.history[l],\\n \\\"g\\\",\\n label=\\\"Validation loss (\\\"\\n + str(str(format(history.history[l][-1], \\\".5f\\\")) + \\\")\\\"),\\n )\\n\\n plt.title(\\\"Loss\\\")\\n plt.xlabel(\\\"Epochs\\\")\\n plt.ylabel(\\\"Loss\\\")\\n plt.legend()\\n\\n plt.show()\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "def plot_history(history):\n", " loss_list = [s for s in history.history.keys() if \"loss\" in s and \"val\" not in s]\n", @@ -332,42 +164,14 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-07-14T11:08:58.677242Z", - "start_time": "2020-07-14T11:08:58.654995Z" + "end_time": "2020-09-15T00:49:49.891028Z", + "start_time": "2020-09-15T00:49:49.867842Z" } }, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 7;\n", - " var nbb_unformatted_code = \"dataset_name = \\\"portoseguro\\\"\\nfilename = \\\"train_bench.csv\\\"\\ntarget = \\\"target\\\"\\nids = []\";\n", - " var nbb_formatted_code = \"dataset_name = \\\"portoseguro\\\"\\nfilename = \\\"train_bench.csv\\\"\\ntarget = \\\"target\\\"\\nids = []\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "dataset_name = \"portoseguro\"\n", "filename = \"train_bench.csv\"\n", @@ -407,42 +211,14 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-07-14T11:08:58.702007Z", - "start_time": "2020-07-14T11:08:58.678970Z" + "end_time": "2020-09-15T00:49:49.916377Z", + "start_time": "2020-09-15T00:49:49.892757Z" } }, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 8;\n", - " var nbb_unformatted_code = \"dataset_name = \\\"road-safety\\\"\\nfilename = \\\"train_bench.csv\\\"\\ntarget = \\\"Sex_of_Driver_df_res\\\"\\nids = []\";\n", - " var nbb_formatted_code = \"dataset_name = \\\"road-safety\\\"\\nfilename = \\\"train_bench.csv\\\"\\ntarget = \\\"Sex_of_Driver_df_res\\\"\\nids = []\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "dataset_name = \"road-safety\"\n", "filename = \"train_bench.csv\"\n", @@ -452,42 +228,14 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-07-14T11:08:58.725468Z", - "start_time": "2020-07-14T11:08:58.703289Z" + "end_time": "2020-09-15T00:49:49.941359Z", + "start_time": "2020-09-15T00:49:49.917642Z" } }, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 9;\n", - " var nbb_unformatted_code = \"dataset_name = \\\"open-payments\\\"\\nfilename = \\\"train_bench.csv\\\"\\ntarget = \\\"status\\\"\\nids = []\";\n", - " var nbb_formatted_code = \"dataset_name = \\\"open-payments\\\"\\nfilename = \\\"train_bench.csv\\\"\\ntarget = \\\"status\\\"\\nids = []\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "dataset_name = \"open-payments\"\n", "filename = \"train_bench.csv\"\n", @@ -497,179 +245,67 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-07-14T11:08:58.749486Z", - "start_time": "2020-07-14T11:08:58.726450Z" + "end_time": "2020-09-15T00:49:49.966021Z", + "start_time": "2020-09-15T00:49:49.942327Z" } }, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 10;\n", - " var nbb_unformatted_code = \"dataset_name = \\\"give-me-some-credit\\\"\\nfilename = \\\"train_bench.csv\\\"\\ntarget = \\\"SeriousDlqin2yrs\\\"\\nids = [\\\"Unamed\\\", \\\"age\\\"]\";\n", - " var nbb_formatted_code = \"dataset_name = \\\"give-me-some-credit\\\"\\nfilename = \\\"train_bench.csv\\\"\\ntarget = \\\"SeriousDlqin2yrs\\\"\\nids = [\\\"Unamed\\\", \\\"age\\\"]\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ - "dataset_name = \"give-me-some-credit\"\n", + "dataset_name = \"census-income\"\n", "filename = \"train_bench.csv\"\n", - "target = \"SeriousDlqin2yrs\"\n", - "ids = [\"Unamed\", \"age\"]" + "target = \"taxable income amount\"\n", + "ids = []" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-07-14T11:08:58.772661Z", - "start_time": "2020-07-14T11:08:58.750443Z" + "end_time": "2020-09-15T00:49:49.989980Z", + "start_time": "2020-09-15T00:49:49.967110Z" } }, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 11;\n", - " var nbb_unformatted_code = \"dataset_name = \\\"census-income\\\"\\nfilename = \\\"train_bench.csv\\\"\\ntarget = \\\"taxable income amount\\\"\\nids = []\";\n", - " var nbb_formatted_code = \"dataset_name = \\\"census-income\\\"\\nfilename = \\\"train_bench.csv\\\"\\ntarget = \\\"taxable income amount\\\"\\nids = []\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ - "dataset_name = \"census-income\"\n", + "dataset_name = \"albert\"\n", "filename = \"train_bench.csv\"\n", - "target = \"taxable income amount\"\n", + "target = \"target\"\n", "ids = []" ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-07-14T11:08:58.796127Z", - "start_time": "2020-07-14T11:08:58.773631Z" + "end_time": "2020-09-15T00:49:50.014738Z", + "start_time": "2020-09-15T00:49:49.990961Z" } }, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 12;\n", - " var nbb_unformatted_code = \"dataset_name = \\\"bank-marketing\\\"\\nfilename = \\\"train_bench.csv\\\"\\ntarget = \\\"y\\\"\\nids = []\";\n", - " var nbb_formatted_code = \"dataset_name = \\\"bank-marketing\\\"\\nfilename = \\\"train_bench.csv\\\"\\ntarget = \\\"y\\\"\\nids = []\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ - "dataset_name = \"bank-marketing\"\n", + "dataset_name = \"cat-in-the-dat-ii\"\n", "filename = \"train_bench.csv\"\n", - "target = \"y\"\n", - "ids = []" + "target = \"target\"\n", + "ids = [\"id\"]" ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-07-14T11:08:58.820695Z", - "start_time": "2020-07-14T11:08:58.797204Z" + "end_time": "2020-09-15T00:49:50.041756Z", + "start_time": "2020-09-15T00:49:50.015975Z" } }, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 13;\n", - " var nbb_unformatted_code = \"dataset_name = \\\"albert\\\"\\nfilename = \\\"train_bench.csv\\\"\\ntarget = \\\"target\\\"\\nids = []\";\n", - " var nbb_formatted_code = \"dataset_name = \\\"albert\\\"\\nfilename = \\\"train_bench.csv\\\"\\ntarget = \\\"target\\\"\\nids = []\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ - "dataset_name = \"albert\"\n", + "dataset_name = \"bnp-cardif\"\n", "filename = \"train_bench.csv\"\n", "target = \"target\"\n", "ids = []" @@ -677,136 +313,52 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-07-14T11:08:58.843873Z", - "start_time": "2020-07-14T11:08:58.821678Z" + "end_time": "2020-09-15T00:49:50.066868Z", + "start_time": "2020-09-15T00:49:50.042850Z" } }, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 14;\n", - " var nbb_unformatted_code = \"dataset_name = \\\"cat-in-the-dat-ii\\\"\\nfilename = \\\"train_bench.csv\\\"\\ntarget = \\\"target\\\"\\nids = [\\\"id\\\"]\";\n", - " var nbb_formatted_code = \"dataset_name = \\\"cat-in-the-dat-ii\\\"\\nfilename = \\\"train_bench.csv\\\"\\ntarget = \\\"target\\\"\\nids = [\\\"id\\\"]\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ - "dataset_name = \"cat-in-the-dat-ii\"\n", + "dataset_name = \"homesite-quote-conversion\"\n", "filename = \"train_bench.csv\"\n", - "target = \"target\"\n", - "ids = [\"id\"]" + "target = \"QuoteConversion_Flag\"\n", + "ids = []" ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-07-14T11:08:58.867631Z", - "start_time": "2020-07-14T11:08:58.844859Z" + "end_time": "2020-09-15T00:49:50.091094Z", + "start_time": "2020-09-15T00:49:50.067915Z" } }, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 15;\n", - " var nbb_unformatted_code = \"dataset_name = \\\"bnp-cardif\\\"\\nfilename = \\\"train_bench.csv\\\"\\ntarget = \\\"target\\\"\\nids = []\";\n", - " var nbb_formatted_code = \"dataset_name = \\\"bnp-cardif\\\"\\nfilename = \\\"train_bench.csv\\\"\\ntarget = \\\"target\\\"\\nids = []\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ - "dataset_name = \"bnp-cardif\"\n", + "dataset_name = \"give-me-some-credit\"\n", "filename = \"train_bench.csv\"\n", - "target = \"target\"\n", - "ids = []" + "target = \"SeriousDlqin2yrs\"\n", + "ids = [\"Unamed\", \"age\"]" ] }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-07-14T11:08:58.890717Z", - "start_time": "2020-07-14T11:08:58.868540Z" + "end_time": "2020-09-15T00:49:50.114994Z", + "start_time": "2020-09-15T00:49:50.091926Z" } }, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 16;\n", - " var nbb_unformatted_code = \"dataset_name = \\\"homesite-quote-conversion\\\"\\nfilename = \\\"train_bench.csv\\\"\\ntarget = \\\"QuoteConversion_Flag\\\"\\nids = []\";\n", - " var nbb_formatted_code = \"dataset_name = \\\"homesite-quote-conversion\\\"\\nfilename = \\\"train_bench.csv\\\"\\ntarget = \\\"QuoteConversion_Flag\\\"\\nids = []\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ - "dataset_name = \"homesite-quote-conversion\"\n", + "dataset_name = \"bank-marketing\"\n", "filename = \"train_bench.csv\"\n", - "target = \"QuoteConversion_Flag\"\n", + "target = \"y\"\n", "ids = []" ] }, @@ -831,94 +383,28 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-07-14T11:08:58.913781Z", - "start_time": "2020-07-14T11:08:58.891615Z" + "end_time": "2020-09-15T00:49:50.138553Z", + "start_time": "2020-09-15T00:49:50.115999Z" } }, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 17;\n", - " var nbb_unformatted_code = \"out = Path(os.getcwd()) / \\\"data\\\" / dataset_name / filename\";\n", - " var nbb_formatted_code = \"out = Path(os.getcwd()) / \\\"data\\\" / dataset_name / filename\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "out = Path(os.getcwd()) / \"data\" / dataset_name / filename" ] }, { "cell_type": "code", - "execution_count": 18, - "metadata": { - "ExecuteTime": { - "end_time": "2020-07-14T11:09:03.082700Z", - "start_time": "2020-07-14T11:08:58.914816Z" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(260753, 300)" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 18;\n", - " var nbb_unformatted_code = \"train = pd.read_csv(out)\\ntrain.shape\";\n", - " var nbb_formatted_code = \"train = pd.read_csv(out)\\ntrain.shape\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2020-09-15T00:49:50.236384Z", + "start_time": "2020-09-15T00:49:50.139509Z" + } + }, + "outputs": [], "source": [ "train = pd.read_csv(out)\n", "train.shape" @@ -926,100 +412,28 @@ }, { "cell_type": "code", - "execution_count": 19, - "metadata": { - "ExecuteTime": { - "end_time": "2020-07-14T11:09:03.106230Z", - "start_time": "2020-07-14T11:09:03.083561Z" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['QuoteNumber', 'Original_Quote_Date', 'QuoteConversion_Flag', 'Field6',\n", - " 'Field7', 'Field8', 'Field9', 'Field10', 'Field11', 'Field12',\n", - " ...\n", - " 'GeographicField59B', 'GeographicField60A', 'GeographicField60B',\n", - " 'GeographicField61A', 'GeographicField61B', 'GeographicField62A',\n", - " 'GeographicField62B', 'GeographicField63', 'GeographicField64', 'Set'],\n", - " dtype='object', length=300)" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 19;\n", - " var nbb_unformatted_code = \"train.columns\";\n", - " var nbb_formatted_code = \"train.columns\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2020-09-15T00:49:50.259734Z", + "start_time": "2020-09-15T00:49:50.237216Z" + } + }, + "outputs": [], "source": [ "train.columns" ] }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-07-14T11:09:03.139235Z", - "start_time": "2020-07-14T11:09:03.107444Z" + "end_time": "2020-09-15T00:49:50.292726Z", + "start_time": "2020-09-15T00:49:50.260690Z" } }, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 20;\n", - " var nbb_unformatted_code = \"if \\\"Set\\\" not in train.columns:\\n print(\\\"Building tailored column\\\")\\n train_valid_index, test_index = next(\\n StratifiedShuffleSplit(n_splits=1, test_size=0.1, random_state=SEED).split(\\n range(train[target].shape[0]), train[target].values\\n )\\n )\\n train_index, valid_index = next(\\n StratifiedShuffleSplit(n_splits=1, test_size=0.1, random_state=SEED).split(\\n train_valid_index, train[target].values[train_valid_index]\\n )\\n )\\n train[\\\"Set\\\"] = \\\"train\\\"\\n train[\\\"Set\\\"][valid_index] = \\\"valid\\\"\\n train[\\\"Set\\\"][test_index] = \\\"test\\\"\\n # train.to_csv((out.parent / \\\"train_bench.csv\\\").as_posix(), index=False)\";\n", - " var nbb_formatted_code = \"if \\\"Set\\\" not in train.columns:\\n print(\\\"Building tailored column\\\")\\n train_valid_index, test_index = next(\\n StratifiedShuffleSplit(n_splits=1, test_size=0.1, random_state=SEED).split(\\n range(train[target].shape[0]), train[target].values\\n )\\n )\\n train_index, valid_index = next(\\n StratifiedShuffleSplit(n_splits=1, test_size=0.1, random_state=SEED).split(\\n train_valid_index, train[target].values[train_valid_index]\\n )\\n )\\n train[\\\"Set\\\"] = \\\"train\\\"\\n train[\\\"Set\\\"][valid_index] = \\\"valid\\\"\\n train[\\\"Set\\\"][test_index] = \\\"test\\\"\\n # train.to_csv((out.parent / \\\"train_bench.csv\\\").as_posix(), index=False)\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "if \"Set\" not in train.columns:\n", " print(\"Building tailored column\")\n", @@ -1041,42 +455,14 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-07-14T11:09:03.356036Z", - "start_time": "2020-07-14T11:09:03.140130Z" + "end_time": "2020-09-15T00:49:50.329479Z", + "start_time": "2020-09-15T00:49:50.293669Z" } }, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 21;\n", - " var nbb_unformatted_code = \"train_indices = train[train.Set == \\\"train\\\"].index\\nvalid_indices = train[train.Set == \\\"valid\\\"].index\\ntest_indices = train[train.Set == \\\"test\\\"].index\";\n", - " var nbb_formatted_code = \"train_indices = train[train.Set == \\\"train\\\"].index\\nvalid_indices = train[train.Set == \\\"valid\\\"].index\\ntest_indices = train[train.Set == \\\"test\\\"].index\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "train_indices = train[train.Set == \"train\"].index\n", "valid_indices = train[train.Set == \"valid\"].index\n", @@ -1085,84 +471,28 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-07-14T11:09:03.377275Z", - "start_time": "2020-07-14T11:09:03.356944Z" + "end_time": "2020-09-15T00:49:50.351570Z", + "start_time": "2020-09-15T00:49:50.330628Z" } }, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 22;\n", - " var nbb_unformatted_code = \"# train[\\\"comment\\\"] = train[\\\"comment\\\"].fillna(\\\"unknown\\\")\";\n", - " var nbb_formatted_code = \"# train[\\\"comment\\\"] = train[\\\"comment\\\"].fillna(\\\"unknown\\\")\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# train[\"comment\"] = train[\"comment\"].fillna(\"unknown\")" ] }, { "cell_type": "code", - "execution_count": 23, + "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-07-14T11:09:03.401561Z", - "start_time": "2020-07-14T11:09:03.379950Z" + "end_time": "2020-09-15T00:49:50.375478Z", + "start_time": "2020-09-15T00:49:50.354397Z" } }, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 23;\n", - " var nbb_unformatted_code = \"# max_len = np.percentile(np.vectorize(len)(train[\\\"comment\\\"].values), 90)\\n# max_len\";\n", - " var nbb_formatted_code = \"# max_len = np.percentile(np.vectorize(len)(train[\\\"comment\\\"].values), 90)\\n# max_len\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# max_len = np.percentile(np.vectorize(len)(train[\"comment\"].values), 90)\n", "# max_len" @@ -1170,126 +500,42 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-07-14T11:09:03.424691Z", - "start_time": "2020-07-14T11:09:03.403267Z" + "end_time": "2020-09-15T00:49:50.398025Z", + "start_time": "2020-09-15T00:49:50.376866Z" } }, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 24;\n", - " var nbb_unformatted_code = \"# train[\\\"comment\\\"] = train[\\\"comment\\\"].str.slice(0, int(max_len))\";\n", - " var nbb_formatted_code = \"# train[\\\"comment\\\"] = train[\\\"comment\\\"].str.slice(0, int(max_len))\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# train[\"comment\"] = train[\"comment\"].str.slice(0, int(max_len))" ] }, { "cell_type": "code", - "execution_count": 25, + "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-07-14T11:09:03.446064Z", - "start_time": "2020-07-14T11:09:03.425542Z" + "end_time": "2020-09-15T00:49:50.419520Z", + "start_time": "2020-09-15T00:49:50.399057Z" } }, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 25;\n", - " var nbb_unformatted_code = \"# train[\\\"parent_comment\\\"] = train[\\\"parent_comment\\\"].fillna(\\\"unknown\\\")\";\n", - " var nbb_formatted_code = \"# train[\\\"parent_comment\\\"] = train[\\\"parent_comment\\\"].fillna(\\\"unknown\\\")\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# train[\"parent_comment\"] = train[\"parent_comment\"].fillna(\"unknown\")" ] }, { "cell_type": "code", - "execution_count": 26, + "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-07-14T11:09:03.467552Z", - "start_time": "2020-07-14T11:09:03.446987Z" + "end_time": "2020-09-15T00:49:50.442449Z", + "start_time": "2020-09-15T00:49:50.420502Z" } }, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 26;\n", - " var nbb_unformatted_code = \"# max_len = np.percentile(np.vectorize(len)(train[\\\"parent_comment\\\"].values), 90)\\n# max_len\";\n", - " var nbb_formatted_code = \"# max_len = np.percentile(np.vectorize(len)(train[\\\"parent_comment\\\"].values), 90)\\n# max_len\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# max_len = np.percentile(np.vectorize(len)(train[\"parent_comment\"].values), 90)\n", "# max_len" @@ -1297,704 +543,28 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-07-14T11:09:03.489215Z", - "start_time": "2020-07-14T11:09:03.468437Z" + "end_time": "2020-09-15T00:49:50.464562Z", + "start_time": "2020-09-15T00:49:50.443378Z" } }, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 27;\n", - " var nbb_unformatted_code = \"# train[\\\"parent_comment\\\"] = train[\\\"parent_comment\\\"].str.slice(0, int(max_len))\";\n", - " var nbb_formatted_code = \"# train[\\\"parent_comment\\\"] = train[\\\"parent_comment\\\"].str.slice(0, int(max_len))\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# train[\"parent_comment\"] = train[\"parent_comment\"].str.slice(0, int(max_len))" ] }, { "cell_type": "code", - "execution_count": 28, - "metadata": { - "ExecuteTime": { - "end_time": "2020-07-14T11:09:44.797099Z", - "start_time": "2020-07-14T11:09:03.490044Z" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "{'constant_cols': ['PropertyField6', 'GeographicField10A'],\n", - " 'bool_cols': ['PersonalField6',\n", - " 'GeographicField56A',\n", - " 'PropertyField37',\n", - " 'GeographicField23A',\n", - " 'GeographicField14A',\n", - " 'PropertyField8',\n", - " 'PropertyField36',\n", - " 'PropertyField11A',\n", - " 'GeographicField21A',\n", - " 'PropertyField32',\n", - " 'PropertyField34',\n", - " 'PersonalField7',\n", - " 'GeographicField62A',\n", - " 'Field12',\n", - " 'GeographicField18A',\n", - " 'GeographicField5A',\n", - " 'PropertyField38',\n", - " 'PersonalField2',\n", - " 'GeographicField22A',\n", - " 'PersonalField8',\n", - " 'GeographicField61A',\n", - " 'PropertyField3',\n", - " 'PropertyField2A',\n", - " 'GeographicField60A',\n", - " 'PropertyField4',\n", - " 'GeographicField10B',\n", - " 'SalesField9',\n", - " 'PropertyField5',\n", - " 'SalesField3',\n", - " 'PropertyField30',\n", - " 'PersonalField1',\n", - " 'PropertyField29'],\n", - " 'num_cols': ['SalesField8', 'QuoteNumber'],\n", - " 'cat_cols': ['SalesField4',\n", - " 'PersonalField56',\n", - " 'GeographicField11B',\n", - " 'PropertyField16B',\n", - " 'GeographicField35A',\n", - " 'GeographicField19B',\n", - " 'CoverageField3A',\n", - " 'PersonalField11',\n", - " 'GeographicField33A',\n", - " 'GeographicField33B',\n", - " 'GeographicField53A',\n", - " 'PersonalField10A',\n", - " 'GeographicField31A',\n", - " 'GeographicField16B',\n", - " 'GeographicField62B',\n", - " 'PersonalField13',\n", - " 'GeographicField52B',\n", - " 'Original_Quote_Date',\n", - " 'PersonalField42',\n", - " 'GeographicField13B',\n", - " 'CoverageField2B',\n", - " 'PropertyField13',\n", - " 'GeographicField4A',\n", - " 'GeographicField7A',\n", - " 'PersonalField55',\n", - " 'GeographicField44A',\n", - " 'GeographicField31B',\n", - " 'GeographicField58B',\n", - " 'PersonalField75',\n", - " 'SalesField13',\n", - " 'Field11',\n", - " 'SalesField11',\n", - " 'GeographicField21B',\n", - " 'GeographicField48B',\n", - " 'PersonalField65',\n", - " 'PropertyField18',\n", - " 'GeographicField53B',\n", - " 'PersonalField62',\n", - " 'Field10',\n", - " 'PersonalField45',\n", - " 'GeographicField14B',\n", - " 'GeographicField49B',\n", - " 'GeographicField34B',\n", - " 'GeographicField51A',\n", - " 'CoverageField2A',\n", - " 'PropertyField11B',\n", - " 'PersonalField58',\n", - " 'PersonalField61',\n", - " 'GeographicField5B',\n", - " 'SalesField2B',\n", - " 'GeographicField42A',\n", - " 'GeographicField48A',\n", - " 'GeographicField46B',\n", - " 'PersonalField27',\n", - " 'PersonalField4B',\n", - " 'GeographicField56B',\n", - " 'GeographicField19A',\n", - " 'GeographicField35B',\n", - " 'PersonalField64',\n", - " 'PersonalField60',\n", - " 'GeographicField1A',\n", - " 'SalesField10',\n", - " 'GeographicField28A',\n", - " 'PersonalField72',\n", - " 'PersonalField51',\n", - " 'PersonalField22',\n", - " 'PropertyField14',\n", - " 'GeographicField38A',\n", - " 'GeographicField36A',\n", - " 'CoverageField6A',\n", - " 'SalesField15',\n", - " 'GeographicField6B',\n", - " 'PersonalField41',\n", - " 'CoverageField8',\n", - " 'GeographicField49A',\n", - " 'PropertyField26A',\n", - " 'PersonalField39',\n", - " 'CoverageField11B',\n", - " 'PersonalField31',\n", - " 'GeographicField8A',\n", - " 'GeographicField50B',\n", - " 'PersonalField23',\n", - " 'PropertyField24B',\n", - " 'PropertyField10',\n", - " 'PersonalField63',\n", - " 'PropertyField21B',\n", - " 'GeographicField26B',\n", - " 'GeographicField3A',\n", - " 'PersonalField76',\n", - " 'GeographicField61B',\n", - " 'PropertyField22',\n", - " 'GeographicField12B',\n", - " 'PersonalField71',\n", - " 'PropertyField33',\n", - " 'PersonalField14',\n", - " 'GeographicField22B',\n", - " 'GeographicField23B',\n", - " 'GeographicField42B',\n", - " 'GeographicField57A',\n", - " 'PropertyField1B',\n", - " 'SalesField1B',\n", - " 'PersonalField79',\n", - " 'Field6',\n", - " 'PersonalField4A',\n", - " 'PersonalField47',\n", - " 'PropertyField19',\n", - " 'GeographicField30A',\n", - " 'GeographicField43B',\n", - " 'PersonalField17',\n", - " 'CoverageField1B',\n", - " 'GeographicField57B',\n", - " 'GeographicField64',\n", - " 'PersonalField26',\n", - " 'CoverageField4B',\n", - " 'GeographicField58A',\n", - " 'GeographicField37B',\n", - " 'PersonalField50',\n", - " 'CoverageField4A',\n", - " 'GeographicField39B',\n", - " 'PersonalField54',\n", - " 'GeographicField47B',\n", - " 'Field9',\n", - " 'PropertyField2B',\n", - " 'GeographicField37A',\n", - " 'PersonalField84',\n", - " 'GeographicField46A',\n", - " 'GeographicField28B',\n", - " 'GeographicField16A',\n", - " 'PersonalField78',\n", - " 'GeographicField6A',\n", - " 'PersonalField28',\n", - " 'GeographicField17A',\n", - " 'GeographicField26A',\n", - " 'GeographicField20B',\n", - " 'PersonalField29',\n", - " 'PersonalField9',\n", - " 'SalesField6',\n", - " 'PersonalField53',\n", - " 'GeographicField25B',\n", - " 'GeographicField51B',\n", - " 'GeographicField52A',\n", - " 'CoverageField11A',\n", - " 'PersonalField32',\n", - " 'GeographicField40A',\n", - " 'GeographicField59B',\n", - " 'GeographicField27A',\n", - " 'GeographicField8B',\n", - " 'GeographicField32A',\n", - " 'PersonalField24',\n", - " 'PersonalField69',\n", - " 'PersonalField40',\n", - " 'GeographicField34A',\n", - " 'PropertyField20',\n", - " 'GeographicField29A',\n", - " 'GeographicField29B',\n", - " 'GeographicField12A',\n", - " 'PersonalField15',\n", - " 'PropertyField17',\n", - " 'GeographicField17B',\n", - " 'GeographicField54B',\n", - " 'Field7',\n", - " 'PersonalField37',\n", - " 'PersonalField70',\n", - " 'GeographicField9A',\n", - " 'PersonalField67',\n", - " 'PropertyField28',\n", - " 'PersonalField16',\n", - " 'GeographicField55A',\n", - " 'GeographicField54A',\n", - " 'PersonalField68',\n", - " 'Field8',\n", - " 'CoverageField3B',\n", - " 'GeographicField50A',\n", - " 'GeographicField40B',\n", - " 'PersonalField49',\n", - " 'PropertyField31',\n", - " 'GeographicField2A',\n", - " 'GeographicField15A',\n", - " 'GeographicField11A',\n", - " 'GeographicField13A',\n", - " 'SalesField2A',\n", - " 'PersonalField59',\n", - " 'PersonalField83',\n", - " 'GeographicField41B',\n", - " 'CoverageField1A',\n", - " 'PersonalField38',\n", - " 'PropertyField25',\n", - " 'GeographicField30B',\n", - " 'GeographicField1B',\n", - " 'PropertyField12',\n", - " 'PersonalField12',\n", - " 'GeographicField2B',\n", - " 'CoverageField5A',\n", - " 'PropertyField15',\n", - " 'GeographicField41A',\n", - " 'PersonalField74',\n", - " 'GeographicField3B',\n", - " 'CoverageField5B',\n", - " 'PersonalField25',\n", - " 'GeographicField9B',\n", - " 'PersonalField82',\n", - " 'PropertyField39A',\n", - " 'GeographicField25A',\n", - " 'CoverageField9',\n", - " 'SalesField12',\n", - " 'GeographicField36B',\n", - " 'PersonalField36',\n", - " 'SalesField5',\n", - " 'GeographicField45A',\n", - " 'PropertyField9',\n", - " 'PropertyField26B',\n", - " 'CoverageField6B',\n", - " 'PersonalField30',\n", - " 'PersonalField43',\n", - " 'PersonalField48',\n", - " 'GeographicField60B',\n", - " 'PersonalField19',\n", - " 'GeographicField44B',\n", - " 'GeographicField47A',\n", - " 'SalesField1A',\n", - " 'PersonalField57',\n", - " 'PropertyField7',\n", - " 'GeographicField18B',\n", - " 'GeographicField24A',\n", - " 'PersonalField10B',\n", - " 'PersonalField35',\n", - " 'SalesField14',\n", - " 'PropertyField35',\n", - " 'GeographicField20A',\n", - " 'GeographicField39A',\n", - " 'GeographicField59A',\n", - " 'PropertyField23',\n", - " 'PersonalField33',\n", - " 'PersonalField81',\n", - " 'PropertyField16A',\n", - " 'GeographicField4B',\n", - " 'PersonalField5',\n", - " 'GeographicField24B',\n", - " 'GeographicField43A',\n", - " 'GeographicField15B',\n", - " 'PersonalField34',\n", - " 'GeographicField7B',\n", - " 'PersonalField66',\n", - " 'PropertyField21A',\n", - " 'GeographicField45B',\n", - " 'GeographicField63',\n", - " 'GeographicField32B',\n", - " 'PersonalField18',\n", - " 'GeographicField55B',\n", - " 'PersonalField46',\n", - " 'PersonalField73',\n", - " 'PersonalField77',\n", - " 'GeographicField27B',\n", - " 'SalesField7',\n", - " 'PropertyField24A',\n", - " 'PropertyField27',\n", - " 'GeographicField38B',\n", - " 'PersonalField80',\n", - " 'PropertyField39B',\n", - " 'PersonalField44',\n", - " 'PersonalField52',\n", - " 'PropertyField1A'],\n", - " 'num_encoder': [FeatureUnion(transformer_list=[('fillna',\n", - " Pipeline(steps=[('fillna',\n", - " SimpleImputer(fill_value=-1943.8167468120896,\n", - " strategy='constant'))])),\n", - " ('indicator', MissingIndicator(features='all')),\n", - " ('quantile',\n", - " Pipeline(steps=[('fillna',\n", - " SimpleImputer(strategy='median')),\n", - " ('quantile',\n", - " QuantileTransformer())]))]),\n", - " FeatureUnion(transformer_list=[('fillna',\n", - " Pipeline(steps=[('fillna',\n", - " SimpleImputer(fill_value=-12549.359436650007,\n", - " strategy='constant'))])),\n", - " ('indicator', MissingIndicator(features='all')),\n", - " ('quantile',\n", - " Pipeline(steps=[('fillna',\n", - " SimpleImputer(strategy='median')),\n", - " ('quantile',\n", - " QuantileTransformer())]))])],\n", - " 'bool_encoder': [SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder()],\n", - " 'max_nb': 869,\n", - " 'cat_encoder': [SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder(),\n", - " SafeLabelEncoder()]}" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 28;\n", - " var nbb_unformatted_code = \"input_train, params = preproc_dataset(train.loc[train_indices], target, ids + [\\\"Set\\\"])\\nparams\";\n", - " var nbb_formatted_code = \"input_train, params = preproc_dataset(train.loc[train_indices], target, ids + [\\\"Set\\\"])\\nparams\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2020-09-15T00:49:51.038468Z", + "start_time": "2020-09-15T00:49:50.465697Z" + } + }, + "outputs": [], "source": [ "input_train, params = preproc_dataset(train.loc[train_indices], target, ids + [\"Set\"])\n", "params" @@ -2002,94 +572,28 @@ }, { "cell_type": "code", - "execution_count": 29, - "metadata": { - "ExecuteTime": { - "end_time": "2020-07-14T11:09:44.820330Z", - "start_time": "2020-07-14T11:09:44.798087Z" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "208603" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 29;\n", - " var nbb_unformatted_code = \"len(train_indices)\";\n", - " var nbb_formatted_code = \"len(train_indices)\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2020-09-15T00:49:51.061166Z", + "start_time": "2020-09-15T00:49:51.039320Z" + } + }, + "outputs": [], "source": [ "len(train_indices)" ] }, { "cell_type": "code", - "execution_count": 30, + "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-07-14T11:09:51.805210Z", - "start_time": "2020-07-14T11:09:44.821685Z" + "end_time": "2020-09-15T00:49:51.173047Z", + "start_time": "2020-09-15T00:49:51.062100Z" } }, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 30;\n", - " var nbb_unformatted_code = \"input_valid, _ = preproc_dataset(\\n train.loc[valid_indices], target, ids + [\\\"Set\\\"], params\\n)\\ninput_test, _ = preproc_dataset(train.loc[test_indices], target, ids + [\\\"Set\\\"], params)\";\n", - " var nbb_formatted_code = \"input_valid, _ = preproc_dataset(\\n train.loc[valid_indices], target, ids + [\\\"Set\\\"], params\\n)\\ninput_test, _ = preproc_dataset(train.loc[test_indices], target, ids + [\\\"Set\\\"], params)\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "input_valid, _ = preproc_dataset(\n", " train.loc[valid_indices], target, ids + [\"Set\"], params\n", @@ -2099,84 +603,28 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-07-14T11:09:51.827874Z", - "start_time": "2020-07-14T11:09:51.806175Z" + "end_time": "2020-09-15T00:49:51.196057Z", + "start_time": "2020-09-15T00:49:51.173890Z" } }, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 31;\n", - " var nbb_unformatted_code = \"target_encoder = LabelEncoder()\";\n", - " var nbb_formatted_code = \"target_encoder = LabelEncoder()\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "target_encoder = LabelEncoder()" ] }, { "cell_type": "code", - "execution_count": 32, + "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-07-14T11:09:51.860844Z", - "start_time": "2020-07-14T11:09:51.828717Z" + "end_time": "2020-09-15T00:49:51.229573Z", + "start_time": "2020-09-15T00:49:51.197038Z" } }, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 32;\n", - " var nbb_unformatted_code = \"train[target] = target_encoder.fit_transform(train[target].values.reshape(-1))\\ny_train = train[target].values[train_indices]\\ny_valid = train[target].values[valid_indices]\\ny_test = train[target].values[test_indices]\";\n", - " var nbb_formatted_code = \"train[target] = target_encoder.fit_transform(train[target].values.reshape(-1))\\ny_train = train[target].values[train_indices]\\ny_valid = train[target].values[valid_indices]\\ny_test = train[target].values[test_indices]\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "train[target] = target_encoder.fit_transform(train[target].values.reshape(-1))\n", "y_train = train[target].values[train_indices]\n", @@ -2186,277 +634,84 @@ }, { "cell_type": "code", - "execution_count": 33, - "metadata": { - "ExecuteTime": { - "end_time": "2020-07-14T11:09:53.207832Z", - "start_time": "2020-07-14T11:09:51.861690Z" - } - }, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 33;\n", - " var nbb_unformatted_code = \"model = build_model(params, lconv_dim=[32, 16], lconv_num_dim=[16],)\";\n", - " var nbb_formatted_code = \"model = build_model(params, lconv_dim=[32, 16], lconv_num_dim=[16],)\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "model = build_model(params, lconv_dim=[32, 16], lconv_num_dim=[16],)" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": { - "ExecuteTime": { - "end_time": "2020-07-14T11:09:53.231150Z", - "start_time": "2020-07-14T11:09:53.208756Z" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "TensorShape([None, 4256])" - ] - }, - "execution_count": 34, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 34;\n", - " var nbb_unformatted_code = \"model.get_layer(\\\"output\\\")._build_input_shape\";\n", - " var nbb_formatted_code = \"model.get_layer(\\\"output\\\")._build_input_shape\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2020-09-15T00:49:51.258671Z", + "start_time": "2020-09-15T00:49:51.230532Z" + } + }, + "outputs": [], + "source": [ + "params" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2020-09-15T00:49:51.879658Z", + "start_time": "2020-09-15T00:49:51.259616Z" + } + }, + "outputs": [], + "source": [ + "model = build_model(params, lconv_dim=[16], lconv_num_dim=[16],)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2020-09-15T00:49:51.903426Z", + "start_time": "2020-09-15T00:49:51.880654Z" + } + }, + "outputs": [], "source": [ "model.get_layer(\"output\")._build_input_shape" ] }, { "cell_type": "code", - "execution_count": 35, - "metadata": { - "ExecuteTime": { - "end_time": "2020-07-14T11:09:53.257786Z", - "start_time": "2020-07-14T11:09:53.232158Z" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Model: \"explainable_model\"\n", - "__________________________________________________________________________________________________\n", - "Layer (type) Output Shape Param # Connected to \n", - "==================================================================================================\n", - "input_cat (InputLayer) [(None, 262)] 0 \n", - "__________________________________________________________________________________________________\n", - "large_emb (Embedding) (None, 262, 16) 13920 input_cat[0][0] \n", - "__________________________________________________________________________________________________\n", - "input_num (InputLayer) [(None, 6)] 0 \n", - "__________________________________________________________________________________________________\n", - "block_cat_0_conv (LocallyConnec (None, 262, 32) 134144 large_emb[0][0] \n", - "__________________________________________________________________________________________________\n", - "reshape_num_input (Reshape) (None, 2, 3) 0 input_num[0][0] \n", - "__________________________________________________________________________________________________\n", - "block_cat_0_activation (Activat (None, 262, 32) 0 block_cat_0_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "block_num_0_conv (LocallyConnec (None, 2, 16) 96 reshape_num_input[0][0] \n", - "__________________________________________________________________________________________________\n", - "block_cat_1_conv (LocallyConnec (None, 262, 16) 134144 block_cat_0_activation[0][0] \n", - "__________________________________________________________________________________________________\n", - "block_num_0_activation (Activat (None, 2, 16) 0 block_num_0_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "block_cat_1_activation (Activat (None, 262, 16) 0 block_cat_1_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "input_bool (InputLayer) [(None, 32)] 0 \n", - "__________________________________________________________________________________________________\n", - "reshape_num_output (Reshape) (None, 32) 0 block_num_0_activation[0][0] \n", - "__________________________________________________________________________________________________\n", - "reshape_cat_output (Reshape) (None, 4192) 0 block_cat_1_activation[0][0] \n", - "__________________________________________________________________________________________________\n", - "concatenate (Concatenate) (None, 4256) 0 input_bool[0][0] \n", - " reshape_num_output[0][0] \n", - " reshape_cat_output[0][0] \n", - "__________________________________________________________________________________________________\n", - "output (Dense) (None, 1) 4257 concatenate[0][0] \n", - "==================================================================================================\n", - "Total params: 286,561\n", - "Trainable params: 286,561\n", - "Non-trainable params: 0\n", - "__________________________________________________________________________________________________\n" - ] - }, - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 35;\n", - " var nbb_unformatted_code = \"model.summary()\";\n", - " var nbb_formatted_code = \"model.summary()\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2020-09-15T00:49:51.928804Z", + "start_time": "2020-09-15T00:49:51.904292Z" + } + }, + "outputs": [], "source": [ "model.summary()" ] }, { "cell_type": "code", - "execution_count": 36, + "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-07-14T11:09:53.279764Z", - "start_time": "2020-07-14T11:09:53.258669Z" + "end_time": "2020-09-15T00:49:51.951551Z", + "start_time": "2020-09-15T00:49:51.929739Z" } }, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 36;\n", - " var nbb_unformatted_code = \"# !pip install pydot graphviz\";\n", - " var nbb_formatted_code = \"# !pip install pydot graphviz\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# !pip install pydot graphviz" ] }, { "cell_type": "code", - "execution_count": 37, - "metadata": { - "ExecuteTime": { - "end_time": "2020-07-14T11:09:53.466441Z", - "start_time": "2020-07-14T11:09:53.280649Z" - } - }, - "outputs": [ - { - "data": { - "image/png": "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e7c0RHV1te6++2716dNHb731ltq2besUY1thNHr0aKdXsk2YMEHShV/x1ZD+z9WuXTvV1NS4cikAAAAAAAA4B0UWALhKnb/qwsPDQ9K/Vo6cr2PHjvX2ERQUJEkqKytr4uyuLR06dJAknTlz5oqPXVtbqylTpig0NFRvvvnmBQsg3bt3lyQFBgY6HbPdxyNHjrjc//nneHl5NeIqAAAAAAAAUB+KLADQApSXl9f7ui5bccX2Jb0ktWnTRqdPn3aKraysrLfvptyTxF1CQkIk6ZJ7mjSHRx55RD/99JMyMjIcVqjcdNNNDvvYDB06VJLqXXVku49dunRxuX+bEydOyBhjnxMAAAAAAAC4jiILALQAp06dUm5urkPbV199paKiIoWHhzt8oR4SEqLDhw87xJaUlOiHH36ot29vb2+HoszNN9+stWvXNmH2ze+2226TJBUWFl40rra2VrfcckuTjfvMM89o3759euedd+Tp6XnR2HvuuUehoaHatm2b/fVmNps3b5YkTZ482eX+bWz33jYnAAAAAAAAcB1FFgBoAfz9/fXEE08oOztb1dXVysvL04wZM+Th4aGUlBSH2DFjxqioqEgvvviiqqqqVFBQoMTERIfVLue6/fbbdeDAAf3444/Kzs7WwYMHNWzYMPvxqKgoBQYG1rtq4moRHh6uoKAg5efnXzDmtddek9Vq1cKFCy8YM2PGDFksFn333XeXHDMtLU2LFy/W7t275evrK4vF4vApKChwiPf09NS6detUXl6uadOm6dtvv1VlZaX+/Oc/a8WKFRoyZIgSEhJc7t9mz549kv71HAAAAAAAAODyUGQBgCts06ZNslgseueddyRJXl5emjFjhnJycpzaFy1aJOlfr+x67rnnJEkDBw5UdHS0Q58+Pj7605/+pMWLFyskJER33XWXAgICtH37dg0fPtwhdunSpYqPj9fy5csVFBSkhx56SAsWLFBwcLDKy8tlsViUlJRkj1+zZo369++vW2+9VXFxcUpJSdGtt95qP15bWytjTL2vK7taWCwWxcfHa/fu3SoqKqo3pq6u7pLXUVxcLB8fH11//fWXHHPjxo2NznPs2LH65JNPdOrUKQ0ePFhdunTR8uXLtWDBAu3YscNhHxVX+pekrKwshYaGavz48S6dDwAAAAAAgJ+1u3QIAKApTZ48+YJf5De2/Vy33nqrtm3bdsk4f39/vfbaa07teXl59cbffPPN+uSTTy7Y38WOXU0WLlyoN998U7///e+VmprqdPyRRx7RI488csHzKysrlZ2drenTpzdoc/ktW7a4lGdkZGSD7qMr/efn52vjxo3asGGD2rdv70p6AAAAAAAAOAcrWQAArYK/v782b96sjRs36qWXXmrUucYYJSQkyM/PT0uWLGmmDJvXwYMHFRMTo+TkZE2bNs3d6QAAAAAAALQIFFmAZuTj4+O0T8LKlSvdnZbLWtr1oGX67W9/K4vFIh8fH6djAwcOVF5ent577z2dOHGiwX2Wlpbq4MGD+uijjxQcHNyU6V4xr776qpYtW6Zly5Y5HUtKSrL/mT579qwbsgMAAAAAALg2UWRpIaqqqtSrVy+nfRrgXlVVVfriiy8kSZMmTZIxRvPnz3dzVq5raddzrVu5cqUsFovy8/N1+PBhWSwW+x4urdGMGTPse6oYY1RVVVVvXPfu3bVlyxb5+fk1uO/g4GB9+umn6tu3b1Ole8U999xzF1zB8uyzzzrMXU5OzhXODgAAAAAA4NpEkaWFMMaorq5OdXV17k7lknx8fDR06FB3p3FBV3t+za21X/+1ZP78+Q5fjBtjtHTpUnenBQAAAAAAALQabHzfQvj6+qqgoMDdaQAAAAAAAAAA0GqwkgUAAAAAAAAAAMAFFFlagE2bNjlsRH7q1Kl627///nvFxcWpY8eOCgwMVHR0tMPqF9v+DhaLRWFhYcrNzdWoUaPk6+srb29vjRw5Urt27bLHL1261B5/7uultm3bZm+/7rrrnPqvrq7Wrl277DHt2rm2oKq8vFxz585Vz5495enpqbCwMI0ePVppaWmqqamxx9XW1io9PV2//OUvFRwcLC8vL/Xr108pKSkOr1dr6vwupaXfH5uGzH9lZaXDXFgsFvtrr2prax3aY2Nj7X0fOXJECQkJ6t69uzw8PNS5c2fFxMRoz549F5znb775RlOnTlVgYKC97ejRo5d1jQAAAAAAAABaKYOrkiSTnp7eqHMmTZpkJJmampp62ydNmmQ+++wzU1VVZT788EPj5eVlBg8e7NRPeHi4sVqtJjIy0h6fm5tr+vfvbzw8PMzHH3/sEG+1Ws2dd97p1E9ERIQJDAx0ar9QfGMUFxebG2+80QQHB5vNmzebEydOmJKSErNkyRIjyaxevdoeu3nzZiPJLF++3FRUVJgjR46YP/7xj6ZNmzZm/vz5jc5v5MiRplOnTiY7O7tBuX7xxRf2+a/PtXZ/LnU952vM/N99992mTZs25v/+7/+c+omMjDRvvfWW/eeioiJzww03mC5dupitW7eakydPmr1795rhw4ebDh06mM8++8zhfNs8Dx8+3OzYscNUV1ebnJwc07ZtW3PkyJEGXUt6errhr80rIzY21sTGxro7DTQQ9wsAAAAAALRSGaxkaUXi4+MVGRkpq9Wq0aNHa/z48crNza33f/FXV1fr5ZdftscPGjRI69ev1+nTp5WYmOiG7B0lJyfru+++U0pKiqKjo+Xr66suXbpo0aJFGjt2rFP8iBEjlJycrICAAF133XV67LHHdP/99yslJUUnTpxo1Nh1dXX2TcabUku6P+dr6PzPnTtXdXV1+sMf/uBw/q5du/TDDz9oypQp9rbk5GQdOnRIf/jDH3TPPffIx8dHffv21dtvvy1jjB577LF6c/nd736nESNGyNvbW0OGDFFtba3Dih4AAAAAAAAAaCiKLK3I4MGDHX7u1q2bJKmoqMgp1mq1asCAAQ5t/fr1U9euXZWfn6/i4uLmS7QBsrKyJEnjxo1zOvbee+9pzpw59p+jo6O1Y8cOp7jw8HCdOXNG+/bta9TYH3/8sSoqKhQZGdnIrC+uJd2fczVm/seMGaN+/fopLS1N5eXl9vYXXnhBjz32mNq3b29v27Rpk9q0aaPo6GiHfoODg9W3b1/94x//UGFhodO4d9xxx2Vf0/mvNuPT9J+NGzdq48aNbs+DT8PvFwAAAAAAQGvUPJtN4Krk7+/v8LOHh4ckOexLYtOxY8d6+wgKClJRUZHKysoUEhLS9Ek2wE8//aTjx4+rQ4cO8vX1vWT88ePHtWrVKmVlZamwsFCVlZUOx//5z382V6qN0lLuz/kaO/9z5szRb37zG7388st66qmndODAAW3fvl1vvPGGPcb2DEjO83aub7/9VmFhYQ5tVqv1ci9J6enpl90HLm716tWSpMcff9zNmaAhbPcLAAAAAACgtaHIgnqVl5fLGCOLxeLQXlZWJulfX+bbtGnTRqdPn3bq4/wv023O77OxPD095e/vr+PHj+vkyZOXLLRMmDBBf/vb35SSkqL77rtP1113nSwWi9asWaPHH3/c6bVfl5vflXA135/zNXb+p0+frieeeEIvvviiFi5cqFWrVunBBx9UQECAPcbT01MdO3ZUVVWVampq1K7dlf2rbOrUqVd0vNYoMzNTEnN9rbDdLwAAAAAAgNaG14WhXqdOnVJubq5D21dffaWioiKFh4c7rJIICQnR4cOHHWJLSkr0ww8/1Nu3t7e3w5f+N998s9auXduo/O69915J0l/+8henYwMHDrT/7/ezZ89q165dCg4OVkJCgjp37mwvItTU1DRbfs3tar8/7dq109dff+3S/Ht6eurRRx9VWVmZVq1apbfeeqvefWZiYmJUW1urXbt2OR177rnndP3116u2trZReQMAAAAAAABAY1BkQb38/f31xBNPKDs7W9XV1crLy9OMGTPk4eGhlJQUh9gxY8aoqKhIL774oqqqqlRQUKDExESH1RTnuv3223XgwAH9+OOPys7O1sGDBzVs2LBG5bdixQrdeOONevzxx7V161adPHlShYWFevTRR1VcXGwvsrRt21YjRoxQSUmJXnjhBR09elQ1NTXasWOHUlNTXcovKipKgYGBysnJaVTOTelqvz82rsy/JD366KPy8vLSokWLNHr0aN10001OMStWrFDPnj01c+ZMvffeezp+/LgqKir06quv6ve//71Wrlx5xVe4AAAAAAAAAGhlDK5Kkkx6enqDYrOysowkh8/06dNNdna2U/uTTz5p7//cz/jx4+39hYeHm9DQULN//35z9913G19fX+Pl5WWGDx9uPv30U6fxKysrTXx8vAkJCTFeXl5m6NChJjc310RERNj7/93vfmeP//rrr82wYcOM1Wo13bp1My+99JJLc3T06FEzZ84cc+ONN5r27dubkJAQM23aNHPgwAGHuCNHjphHHnnEdOvWzbRv39506dLFPPTQQyYpKcmeX0RERIPzGzZsmAkICDCfffbZJXO0Wq1Oc/3CCy8YY8w1eX/qu54Lff73f//Xpfm3mTVrlpFkdu7cecH5LS8vN3PnzjU9evQw7du3N507dzZjxowxH374oT2mvnl29a++9PR0l89F48TGxprY2Fh3p4EG4n4BAAAAAIBWKsNizHkbIuCqYLFYlJ6e7pb9CAYMGKCjR4+qsLDwio+NS2st9+eNN97QSy+9pLy8PHenYpeRkaG4uDinfWTQ9KZMmSKJvT6uFdwvAAAAAADQSmXyujAAV6XU1FTNnTvX3WngGrJ+/XpZ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HDt2TI888oh+/PFH/fOf/9Tf//53xcXFyc/PT0899ZS70wNcxrPdOh06dEgTJ07UiRMnJEnFxcVatmyZBg0aJD8/PwUHB2v48OHKysq6rHGOHTum1NRURUVFqVOnTvLy8lKvXr00ffp05efnX/C8M2fOaPXq1YqIiJCvr6+CgoI0btw4bd682WHFhqv9u+Ivf/mLevfu3aD9rxqaf1JSktLT05s0TwAAAAAAgGsBRZZWJDg4WH/9619VWVmpu+66SwEBAZo4caJ69eqlv//97+rRo4dL/Voslkt+nnnmmaa9GOAczfVs4+q2Z88eDRo0SGPGjJGfn58kadasWVqzZo0WL16s4uJi5eTkKCwsTDExMUpKSnJ5rAULFuixxx7TpEmTtH//fpWXl+v111/Xnj17FBERoU2bNjmdU11draioKKWlpWn16tUqKytTXl6efHx8NHHiRO3bt++y+m+sgoICTZw4UcnJySotLb1kfGPynzVrlpKTkyloAgAAAACAVoc9WZoY75QHWoarcU8WHx8fDRgwQJ9++mmLGt+VPVlOnDihvn37avz48UpNTbW3R0dHa8qUKXrwwQftbadPn1aPHj1UUlKioqIiBQUFNTrH+Ph4tW3bVq+++qpDe35+vgYMGKBevXrpwIEDDsceffRRvfXWWzpw4IC6dOlib6+urlZgYKDy8vJ02223udx/Y91///3q37+/5s+fr+7du6ukpES1tbUXjG9M/rZcBw4cqLffftul/XX4/QkAAAAAAK5BmZd+VwgAAFeZ559/XiUlJXr66acd2rds2eIU6+HhoT59+ujw4cP65ptvXCqyrFu3rt728PBweXl5qaCgQMYYWSwWSVJpaanWrl2rhx9+2KFAIUlWq1WnTp26rP5d8V//9V/y8vJqUGxj87flGhsbq3nz5ikmJqZBryMDAAAAAAC41vG6MADANcUYo3Xr1mnIkCHq2rVrg845ePCgJKlTp05Nmkt1dbVqamp02223ORRA3n33XZ09e1ZDhw5tlv5d0dACi+R6/vfee68KCwu1devWxqYHAAAAAABwTaLIAgBNqLy8XHPnzlXPnj3l4eGhgIAAjRs3Tjt27LDHLF261L5f0blfYm/bts3eft1119nbV65cKYvFourqau3atcseY1spYDtusVgUFham3NxcjRo1Sr6+vvL29tbIkSO1a9euZhv/SsvPz1dpaanCw8MbFP/mm2+qoKBAvXv3Vp8+fZo0F9vr5J588kmH9s8//1ySFBAQoHnz5qlbt27y8PDQDTfcoISEBFVUVFxW/83N1fwHDBggSXr//fevWK4AAAAAAADuRJEFAJpISUmJBg8erA0bNiglJUVHjx7V7t275e3trVGjRtlfCbVo0SIZY2S1Wh3OHzt2rIwxioiIcGifP3++Pf7OO++UMUbGGPt+Grbj4eHhqqysVGJiopYuXaqSkhJ98sknqqioUFRUlHbu3Nks49tERUUpMDBQOTk5lz+ZF7F3715JUlhY2EXj9u/fr8TERM2cOVMBAQFav379Za8GOVdpaamSkpIUHx/vtAdJcXGxJGnmzJkqLS3Vzp07VVZWpiVLluj1119XZGSkjh8/7nL/zc3V/ENDQyX9fI8AAAAAAABaOoosANBEkpOT9d1332nNmjWKjo6Wn5+fevfurQ0bNigkJEQJCQkqLS1t1hyqq6v18ssvKzIyUlarVYMGDdL69et1+vRpJSYmNuvYdXV19gJMc7IVAPz9/S8a179/f2VmZmr27Nnau3evBg8e3GQ5lJeXa+zYsRoxYoRSU1Odjtv2LPHy8lJaWpp69Oihjh076oEHHlBycrIOHDigVatWudx/c3M1fz8/P1ksFvs9AgAAAAAAaOkosgBAE8nKypIkjR8/3qHd09NTo0aNUk1NTbO/Rslqtdpf2WTTr18/de3aVfn5+c365ffHH3+siooKRUZGNtsY0s8FgPbt218ydvv27UpJSWnw3i3/j717j4uqzv84/h5BELmpFBdR0ywzS8nUzFYz0bysd/KaWG2rtdtFrMTF1trMWxdbZbfS1Io2cxN8PLTUtDat3ExMK6k0xR92EwEVBYUEQc7vjx4z2zggM4cZBuH1fDz4g+98z/f7OXPOwPmcz5xznFFcXKxBgwapU6dOeuutt+Tj4+PQx3qV0IABAxxuqzZ8+HBJVd9Sy5nxPa0m8fv6+urs2bOeDRAAAAAAAKCOoMgCAG5QWlqqwsJCNWnSRMHBwQ6vR0RESPr1lmKe1KxZs0rbw8PDJUnHjh3z6Py1oUmTJpKksrKyWp+7vLxcY8eOVXR0tN54440qCyBt27aVJIWFhTm8Zt0Wx48fNz2+p5mNX/p1HQICAjwWGwAAAAAAQF1CkQUA3MDf31+hoaEqKSnRmTNnHF633iYsMjLS1taoUSOdO3fOoW9BQUGlczjzPJH8/PxKb9dlLa5YT5B7av7aEBUVJUnVPtPEE+6//36VlpYqNTXV7gqPq666yu5ZNL1795akSq8csm4La+HNzPieZjb+06dPyzAM2zYCAAAAAACo7yiyAICbjB49WpK0adMmu/bS0lJt3bpVAQEBGjRokK09KipK2dnZdn1zc3P1008/VTp+06ZN7Yoi11xzjZYvX27Xp6SkRLt377Zr++abb3T06FHFxMTYnfz2xPy14frrr5ckHTly5KL9ysvL1bFjR7fN+9RTT2nfvn1655135O/vf9G+v//97xUdHa0tPzez4AAAIABJREFUW7bYbm9mtWHDBknSqFGjTI/vaWbil2Tbn6zbCAAAAAAAoL6jyAIAbrJw4UK1a9dO06dP18aNG3XmzBllZmbqzjvvVE5OjpKTk+2+/T9w4EAdPXpUL774ooqKipSVlaWEhAS7q01+68Ybb1RmZqZ+/vln7dy5U4cPH1afPn3s+oSGhurxxx/Xzp07VVxcrD179ig+Pl5+fn5KTk626+vu+WNjYxUWFubxKy5iYmIUHh6ujIyMKvusWLFCgYGBmjlzZpV94uPjZbFY9P3331c7Z0pKiubMmaNdu3YpODhYFovF7icrK8uuv7+/v1auXKn8/HxNmDBBhw4dUkFBgd58800tXLhQPXv21LRp00yP72r8rnI1fqu9e/dK+nXfAgAAAAAAaAgosgCAm0RGRmr37t2aOHGipk2bprCwMN10000qLi7Whx9+qKlTp9r1nzdvnqZMmaIFCxYoPDxc99xzjxITExUZGan8/HxZLBYlJSXZ+i9ZskRdunTRtddeq/Hjxys5OVnXXnut3ZhBQUH65z//qTlz5igqKkq33nqrmjdvrm3btqlv374enb+8vFyGYVR6uzJ3slgsmjJlinbt2qWjR49W2qeioqLaWHJychQUFKQ2bdpUO+fatWtdjnPw4MHavn27SkpK1KNHD0VERGjBggVKTEzURx99ZPfcEjPjuxK/JG3cuNFWtMnOztb58+dtv69cubJG8VutW7dO0dHRGjp0qMvrAwAAAAAAcCmyGJ4+G9bApKamavz48R4/yQjAs8aOHStJSktL83Ikzrvhhht04sSJam+jVddYLBatWbNG48aNc3qZwsJCXXfddRo2bJiWLVvm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w3yLFy82du7c6dA+adIkp9fblRgMwzCOHz9u3H///Ubr1q2Nxo0bGxEREcY999xjJCUl2ebv1q2brf+BAweMPn36GIGBgUbr1q2Nl156yeXYrL788ktjyJAhRkhIiBEUFGTExsbabRMznF3vyvpWtk0r2x7W/eLC9qFDhzrMkZiYaEgyMjIyqoy5T58+RvPmzY3PPvus2vULDAx0mLeqn++++86ldXX1PXR236nqs1XdZ85q6tSphiTjk08+qfb9+fzzz43JkyfbYgoODjZuvvlmIzk52SgtLa10GU/sB2b3m/z8fOPRRx81rrzySqNx48bG5ZdfbgwcOND4z3/+Y3o7GUb1n1tX5j148KAxatQoIyQkxAgICDB69OhhbNy40ejfv79tnf74xz/a+m/YsKHKfXTFihV2Y1e2f1ssFiM0NNTo3Lmz8ec//9n44osvKt2OzhozZowxZsyYGo0B50gy1qxZ4+0w4GWuHr8BAADXuXLctW7dukrPOZjNYWJiYozo6Ghj//79xqBBg4zg4OBKz7lYFRQUGFOmTDGioqKMgIAAo3fv3sbu3buNbt262cb/y1/+Yutf03MQZtfL2TirGn/37t0O7QsXLjT++9//OrT/7W9/s81b0/MDzz//fI3W25vb08z5DlfPaVk5c57BmTy5svfZ7LEvx821h/MC7sX7WaelWgzD/saJ1nt6GzV8zgOAS8vrr7+ul156SXv27PF2KKgHuPdq7bFYLFqzZg3PZGngOH4DAMDzvHncdcMNN+jEiRM6cuRIrc8N92so27MunmfguLn2cF7AvXg/67Q0t94uDMCla9myZXr00Ue9HQaAWvTjjz9qxIgROn36tCQpJydH8+fPV/fu3RUSEqLIyEj17dtX69atq9E8p06d0rJlyxQbG6sWLVooICBAV199tSZNmuTwLLffKisr0+LFi9WtWzcFBwcrPDxcQ4YM0YYNG+ySIrPjO8swDO3YsUMPPvigOnToIH9/f4WHh6t3795atWqVQ4LmajxJSUlas2ZNjeMEAAAA6hLOM8BVq1atksVisf1Udcv02splrZzNTS+W2yUlJdmt28033+yW2FA3UGQBGqiVK1dq9OjRKioq0rJly3Tq1Cm+CQ80IHv37lX37t01cOBAhYSESJKmTp2qJUuWaM6cOcrJyVF6erpatWqluLg4JSUlmZ4rMTFR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N/NuXduXmhcrMM81LJkw9tnbgLS0NERFRRn9w0NERP81depUAMDOnTvNHIn2+vbtizt37jR5O6+lkclkSE1NxbRp07Rep6KiAj179sT48eOxceNGyX2Wl5fDz88PL730EjZv3ix5fXOzxPhzc3MRHByMHTt2YPr06ZLX53iHiIhId/weJaLmiHm36bTEvNsUeTHzXIPbyTtZiIiILISbmxvS09Oxa9cufPTRR5LWFUIgNjYWrq6uWLlypZEiNB5LjP/q1auIiIjA0qVLdRp4EhERERERkWWx5LzbFHkx81zj4CQLERGRBQkODsaZM2dw4MABVFZWar1eSUkJrl69isOHD8PHx8eIERqHJcb/6aefYtWqVVi1apW5QyEiIiIiIiIDsdS82xR5MfNc42hj7gCIiIg0Wbt2LRISEpT/lslkeOutt5CYmGjGqEyjY8eO2Ldvn6R1fHx8cPLkSSNFZHyWGP+7775r7hCIiIiIiIiMhnm3ZeXdpsiLmecaBydZiIjIIsXHxyM+Pt7cYRARERERERG1SMy7iQyDjwsjIiIiIiIiIiIiIiLSASdZiIiIiIiIiIiIiIiIdMBJFiIiIiIiIiIiIiIiIh1wkoWIiIiIiIiIiIiIiEgHZn/xfVpamrlDICJqNQoKCgDw/15TyczMNHcIZGY8B4iIiPTHsSsRNSfMu02LOZfpcZ+rkwkhhDk6TktLQ1RUlDm6JiIiIjIpMw23iIiImjX+bkBERGS5mOcq7TTbJAsRkakpkjT+t0dERERERERkOszHiagF28l3shAREREREREREREREemAkyxEREREREREREREREQ64CQLERERERERERERERGRDjjJQkREREREREREREREpANOshAREREREREREREREemAkyxEREREREREREREREQ64CQLERERERERERERERGRDjjJQkREREREREREREREpANOshAREREREREREREREemAkyxEREREREREREREREQ64CQLERERERERERERERGRDjjJQkREREREREREREREpANOshAREREREREREREREemAkyxEREREREREREREREQ64CQLERERERERERERERGRDjjJQkREREREREREREREpANOshAREREREREREREREemAkyxEREREREREREREREQ64CQLERERERERERERERGRDjjJQkREREREREREREREpANOshAREREREREREREREemAkyxEREREREREREREREQ64CQLERERERERERERERGRDjjJQkREREREREREREREpANOshAREREREREREREREemAkyxEREREREREREREREQ64CQLERERERERERERERGRDjjJQkREREREREREREREpANOshAREREREREREREREemAkyxEREREREREREREREQ64CQLERERERERERERERGRDjjJQkREREREREREREREpANOshAREREREREREREREemgjbkDICIyhoKCArz88st4+PChsuzu3btwcXHBsGHDVOp269YNn376qYkjJCIiIiIiImp5mI8TUWvDSRYiapECAgLw66+/Ij8/X23Z8ePHVf79wgsvmCosIiIiIiIiohaN+TgRtTZ8XBgRtVizZs2CjY1Nk/WmT59ugmiIiIiIiIiIWgfm40TUmsiEEMLcQRARGUN+fj6effZZNPbfXM+ePXHu3DkTRkVERERERETUsjEfJ6JWZCfvZCGiFqtLly7o06cPZDKZxuU2NjZ4+eWXTRwVERERERERUcvGfJyIWhNOshBRizZr1ixYW1trXCaXyzF16lQTR0RERERERETU8jEfJ6LWgpMsRNSizZgxA/X19WrlVlZWeO6559CxY0fTB0VERERERETUwjEfJ6LWgpMsRNSi+fr6YtCgQbCyUv3vzsrKCrNmzTJTVEREREREREQtG/NxImotOMlCRC3ezJkz1cqEEIiIiDBDNEREREREREStA/NxImoNOMlCRC1eZGSkynNgra2tMWLECHh5eZkxKiIiIiIiIqKWjfk4EbUGnGQhohbPw8MDI0eOVA7shBCIjo42c1RERERERERELRvzcSJqDTjJQkStQnR0tPKFezY2Npg8ebKZIyIiIiIiIiJq+ZiPE1FLx0kWImoVJk6cCDs7OwDAhAkT4OzsbOaIiIiIiIiIiFo+5uNE1NJxkoWIWgUnJyfl1TK8NZmIiIiIiIjINJiPE1FLJxNCiMcL0tLSEBUVZa54iIiIiEhHTwzriIiohWCeTkRERGQZNOTdO9s0VDk1NdW40RARmdjDhw+RmpqKF1980dyhtHjr168HACxcuNDMkbR8UVFRWLBgAUJDQ80dCplRZmYmNmzYYO4wiIjIyJinE1FzxXy8+WFebzrM65uHxvLuBidZ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IyPDnD592hw4cMDEx8cbm81mFi9e7FQ3KirKZGRkmMLCQpObm2tmzZplJJn58+dX2V9ZWZl57LHHzO23325Onjzp8v66GkNGRoaRZJ577jlz8uRJc/z4cfN///d/plmzZmb69OlObQcGBpqbb77ZUlyViYmJMc2bN691O67si6vjVN1+33nnnUaSOXv2rL1syJAhplmzZua7775zqt+nTx+zcuVKS7FbjceV4/jiNu68807z6aefmqKiIvPPf/7T+Pv7m169ejn1OXDgQNO6dWuzY8eOSuO61EsvvWQGDhxo//v48eOmRYsWxsfHx+Tl5TnVZ9zqftyqM3r0aDN69GiXt4PrJJm0tDRPhwEPszrfAQDAE8jTXePqXL2y/KFHjx4mPDy80vbj4+PN7t27TVFRkfnHP/5hJJmhQ4eaO++803zxxRfmzJkzZuHChUaSefTRRy3ty+23324kmZ07dzq99+233xpJ5oYbbnC5XfL6quMhr6/Z59TUxq065PX1h7y+YfCCvHtVg1xkkeT0A/Hll18aSSY2Ntap/qWTt/vuu89IMm+//bZDeUlJiWnTpo3x9/c3ubm5DnUr+gc1ZMiQKidvp06dMoMHDzZJSUmmrKzM5X29NN6axJCRkWFuvfVWp3oTJ040LVq0MKdPn3Yo9/ZFlprui6vjZOVH9KOPPjKSzH/913851P3kk09M+/btzblz5yzFbjUeV47ji9vIyMhwqD969GgjyRw/ftyhfMCAASYsLMx8+umnlcZ1qRtuuMH84x//cCgbNWqUkWTmzZvnVJ9x+01djVt1mIzVHyZjMMYrJnsAANQYebprXJ2rW11kWb9+vUP5tddeaySZrVu3OpR37NjRXHXVVZb2papFloMHDxpJpkePHi63S15fdTzk9c4Yt+qR19cf8vqGwQvy7lXec28oF7Rs2VK9e/d2KOvatavatGmjrKws5eTkKDo6utLt16xZI0kaNmyYQ7mfn58GDRqkN998Ux988IHuvfdee92hQ4c6tfP+++9X2seBAwc0cuRIderUSQsWLKjxvlUVb01iGD58uIYPH+5ULzY2VitWrNC+ffvUp0+fWsVTX1zZF6vj5IpBgwape/fuWr58uf7nf/5H4eHhkqS//e1vmjp1qsOt1upjHFw5ji/Wq1cvh7/btWsnSTp69KjDJepbtmxxKZ4vv/xS3377rdODEP/85z9rzZo1WrZsmaZNm1bhPjBudTduNbFz506NGTPG1dBhwfz585Wenu7pMOBBhw8f9nQIAADUi6aWp1+sLufqFbn0OSlt2rTRvn37nMpjYmKUlZVlqY9WrVpJkoqLi53eKy8rr+MK8vqqkdfXTFMbt5ogr68/5PXezxvy7gb5TJbw8HDZbDan8oiICEnSsWPHKt22tLRUp0+fVsuWLRUcHOz0fmRkpCQpNze32rqVOXXqlO666y61bdtW77//vlasWFHjbV2N91KnT5/WM888o65duyosLMx+38fk5GRJ0s8//2w5lvpW032xOk5WTJs2TT///LNeffVVSb/ek3bbtm2aNGmSpditcuU4vlRoaKjD376+vpJU4f1wXbF06VKdOXNGgYGBDvccHTlypCRp3759+uyzz2q8D3WJcQMAAADcqynl6Zdy91w9JCTE4e9mzZqpefPmCggIcChv3ry55T6vvvpqSRX/R9WRI0ckSZ07d3a5XfL6ynljfkheXz1vHDcAntcgr2Q5ffp0heXlk7bySVxF/Pz8FBoaqtOnT+vMmTNOX4h5eXmSpKioqGrrVsbHx0cfffSRQkND1bdvX02ePFlXXXWV04p1Tbgaw4gRI/Svf/1LqampGj9+vC677DLZbDYtWLBAjz76qIwxDvUrmgR7i5rui5VxsrrfCQkJSklJ0csvv6zHH39cL774oiZPnuzUp7vHwZXjuD6cO3dOb731lrZv366+ffs6vf/oo49qwYIFWrZsmW688UZJjJsnx+2mm27iLIx6YLPZ9Oijj2rs2LGeDgUetGrVKiUkJHg6DAAA3K4p5elWNWvWTL/88otTeUFBQb3FUJmBAwdq1qxZ2rNnj9PZ93v27JH069UEriKvr5y35IflyOtrxlvGjby+fpDXNwzekHc3yCtZioqKnC6B/eqrr3T06FHFxsZWeQmyJI0aNUqStH79eofy0tJSbdq0Sf7+/ho8eLBD3Q0bNji10717dz366KNO5cHBwYqJiVFQUJDee+89BQUF6a677lJOTk7Nd7KCeKuL4fz589q+fbuioqKUmJioyy+/3P5jcfbs2QrbDggIcJjkXXXVVVq0aJGlOOuSq/vi6jhZ3W8fHx8lJSXp2LFjevHFF/XOO+8oMTGxVrFbjceV49jdMjIydNlll1U4EZOkBx54QJL09ttvO3wG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b99ur1N+xkL5+zabTW3btlVmZqYGDRqk4OBgBQQEaODAgdq+fbvb+q9vWVlZysvLU2xsbI3qv/HGG8rOzlbnzp3VpUuXOo0lPT1dkvTkk086lH/++eeSpLCwME2bNk3t2rWTr6+vfve73ykxMVEnT56sVfvuZjX+66+/XpL0wQcf1FusAAAAAFCXyOvdryHk9e7WVPNuFlkAAFXKzc1Vr169tHLlSqWmpurEiRPatWuXAgICNGjQIPulqU899ZSMMQoMDHTYfsiQITLGqEePHg7l06dPt9e/+eabZYyRMUZlZWUO78fGxqqgoEBJSUmaPXu2cnNztW3bNp08eVJxcXHaunWrW/ovFxcXp/DwcO3cubP2H2YVvv76a0lS27Ztq6y3f/9+JSUl6f7771dYWJhWrFhR67NSLpaXl6cZM2Zo0qRJGjt2rMN7OTk5kn6932teXp62bt2qY8eOadasWVq6dKn69Omj06dPW27f3azGHxMTI+m3MQIAAACAhoS8nry+vjTVvJtFFgBAlVJSUvT9999rwYIFGj58uEJCQtS5c2etXLlS0dHRSkxMVF5enltjKC4u1quvvqo+ffooMDBQPXv21IoVK/TLL78oKSnJrX1fuHDBPlFzp/KJSGhoaJX1unXrpvT0dD388MP6+uuv1atXrzqLIT8/X0OGDNGtt96qhQsXOr1ffu9Uf39/LV++XFdccYVatWqle++9VykpKTp48KBefPFFy+27m9X4Q0JCZLPZ7GMEAAAAAA0JeT15fX1pqnk3iywAgCqtWbNGkjRs2DCHcj8/Pw0aNEhnz551++WcgYGB9ktHy3Xt2lVt2rRRVlaWW3+Et2zZopMnT6pPnz5u60P6bSLSokWLautu3rxZqampNb7Ha00UFxdr8ODB6tKli9566y01b97cqU752US33Xab0+XXI0aMkFT5pb01ad/dahO/j4+Pzp49694AAQAAAMANyOvJ6+tLU827WWQBAFSqtLRUp0+fVsuWLRUcHOz0fmRkpKRfLz12p1atWlVYHhERIUk6duyYW/uvDy1btpQknTt3rt77Lisr05gxYxQTE6M33nij0olYhw4dJEnh4eFO75WPxfHjxy23725W45d+3QdXHvYHAAAAAN6AvL7+NIS83t2aat7NIgsAoFJ+fn4KDQ1VSUmJzpw54/R++eXEUVFR9rJmzZrp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sMDH0wEAgDscP35ca9ascSjbvXu3JGnRokUO5cHBwRo/fny9xQYAAAAAQGNFPg6gqbEZY4yngwCAulZaWqqIiAgVFRWpefPmkqTyrzubzWavd+7/sXfvcVHV+f/AX8NwG4aLiHIRNK9kpiKBGQKhWGprYfrFS6nVFuZW5qW0sKzvtmpW2kP9bqabrqtptaiPh7WoXc1LICS4glteg0y5KiggxJ3P7w9/c9ZhBpgZZubMDK/n48FjtzOfOed9Zpzz/nzO+5zPaWzEk08+ie3bt8sRJhEREREREZFD4XiciLqYPZwujIgckpubGxITE+Hs7IzGxkY0NjaiqakJTU1N0n83NjYCAB5//HGZoyUiIiIiIiJyDByPE1FXwyILETmsxx9/HA0NDe226datG+Lj460UEREREREREZHj43iciLoSFlmIyGGNHTsWPXv2bPN1FxcXzJ49G87OfDwVERERERERkblwPE5EXQmLLETksJycnDBr1iy4uLjofb2xsZEP2CMiIiIiIiIyM47HiagrYZGFiBzaY489Js312lqvXr0QFRVl5YiIiIiIiIiIHB/H40TUVbDIQkQO7d5778Udd9yhs9zV1RVPPvkkFAqFDFEREREREREROTaOx4moq2CRhYgc3pw5c3RuUW5oaOCtyUREREREREQWxPE4EXUFCiGEkDsIIiJLOnfuHO666y6tZQMHDsTFixdlioiIiIiIiIjI8XE8TkRdwB7eyUJEDm/w4MEYMmSIdCuyi4sL/vjHP8ocFREREREREZFj43iciLoCFlmIqEt44oknoFQqAQBNTU28NZmIiIiIiIjICjgeJyJHxyILEXUJjz32GJqbmwEA99xzD/r16ydzRERERERERESOj+NxInJ0LLIQUZfQp08fjBo1CgDw5JNPyhwNERERERERUdfA8TgROTpnuQOwlGnTpskdAhHZmPr6eigUCnzzzTc4duyY3OEQkQ2JiorCSy+9ZLH1s19CRET24qWXXkJUVJRF1s18SNR1cTxORJYed8vJYe9k2bt3LwoKCuQOg4hsSEhICAICAuDu7i53KO3i8cs6CgoKsHfvXrnDIBuQmZmJjIwMi26Dv2si+5aZmYnMzEy5w+gSeLyU1969e3HlyhWLrp/fL1HXZC/jcXPh8c46OK63H9YYd8vJYe9kAYDFixdj+vTpcodBRDbkl19+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ePTRR/HKK68gKSkJV65cQU5ODvr27Yvx48fjn//8p1Z7c37+77zzDoQQEEJAqVQa+AkQERGRXRJERETkcFJSUgTTPBGZwpzHj6qqKtG/f3/x0EMPmWV9lqRWq0V0dLRVt5mYmCgSExONes/OnTsFALFp0ya9r1dWVoqQkBAxb948reWTJk0S27dv11pWX18vgoODhVKpFKWlpcYF//+dPXtWODs7i+vXr+us28/PT7i5uYm6ujpp+TPPPCOeffZZnfXk5OQIAGLQoEF6X1MoFCIlJcWkGG/Hz6d91v58bldYWCh8fX3FnDlzBACxYsUKve0ee+wxsXr1atHY2Chtvy3bt28XAMSLL76otbylpUUMHjxY+Pr6ihs3bkjLLfX5K5VKMWrUqDZf18eU4wMRERHJYnf799USERERERGZyMvLC3l5eXKH0aW89957KCkpwZtvvqm1fP/+/TptXV1dMWTIEBQWFuL8+fPw9/c3enuDBw9GY2Oj3nX37t0bOTk5qKurg5ubGwBg69atetcTFhYGlUqFvLw8CCGgUCi0XktMTMTLL7+MqVOndjg9VHv4+bTP2p/P7ebOnYtp06YhNjYWO3fubLPd3//+d6hUKoPWqZnO7JFHHtFarlAoMHnyZLz77rvYu3cvkpKSAMj/+RMREZF94nRhREREREREDkAIga1bt2LUqFHo1auXQe/Jz88HAHTv3t2ssVRUVODixYsIDw+Hj49Ph+1rampQW1uLoUOHap3A1pgyZQoKCgpw4MABk2Pi59M+OT+fbdu24eeff8batWs7bGtogQWANJ2YvgJQUFAQACAtLa3D9Vjj8yciIiL7xSILERERERGZ3eeff6710Oe6ujq9yy9duoQZM2agW7du8PPzw8MPP6x198vatWultiEhIcjKysK4cePg5eUFDw8PjB07Funp6VL7lStXSu1jYmKk5V999ZW0vEePHjrrr6mpQXp6utTGHq9Gz83NRWlpKcLCwgxqv2PHDuTl5SE0NBRDhgwxSwxVVVVIT09HQkICAgMD8fHHHxv0vj179gAAXn/9db2vjxgxAgDw9ddfmxwbP5/2yfX5FBQU4OWXX8a2bdvg5eVl8nr00fzW9T275dq1awCAS5cudbgea3z+REREZL9YZCEiIiIiIrN79NFHIYTA5MmT212+aNEiLFq0CIWFhUhJScH333+P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\n", - "text/plain": [ - "" - ] - }, - "execution_count": 37, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 37;\n", - " var nbb_unformatted_code = \"plot_model(\\n model,\\n # to_file=\\\"model.png\\\",\\n show_shapes=True,\\n show_layer_names=True,\\n rankdir=\\\"TB\\\",\\n expand_nested=False,\\n dpi=96,\\n)\";\n", - " var nbb_formatted_code = \"plot_model(\\n model,\\n # to_file=\\\"model.png\\\",\\n show_shapes=True,\\n show_layer_names=True,\\n rankdir=\\\"TB\\\",\\n expand_nested=False,\\n dpi=96,\\n)\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2020-09-15T00:49:51.975849Z", + "start_time": "2020-09-15T00:49:51.952398Z" + } + }, + "outputs": [], "source": [ "plot_model(\n", " model,\n", @@ -2471,136 +726,42 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-07-14T11:09:53.491528Z", - "start_time": "2020-07-14T11:09:53.467873Z" + "end_time": "2020-09-15T00:49:51.997916Z", + "start_time": "2020-09-15T00:49:51.976823Z" } }, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 38;\n", - " var nbb_unformatted_code = \"#!pip install pydot graphviz\";\n", - " var nbb_formatted_code = \"#!pip install pydot graphviz\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "#!pip install pydot graphviz" ] }, { "cell_type": "code", - "execution_count": 39, - "metadata": { - "ExecuteTime": { - "end_time": "2020-07-14T11:09:53.515258Z", - "start_time": "2020-07-14T11:09:53.492447Z" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(208603,)" - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 39;\n", - " var nbb_unformatted_code = \"y_train.shape\";\n", - " var nbb_formatted_code = \"y_train.shape\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2020-09-15T00:49:52.021057Z", + "start_time": "2020-09-15T00:49:51.998901Z" + } + }, + "outputs": [], "source": [ "y_train.shape" ] }, { "cell_type": "code", - "execution_count": 40, + "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-07-14T11:09:53.543333Z", - "start_time": "2020-07-14T11:09:53.516305Z" + "end_time": "2020-09-15T00:49:52.045667Z", + "start_time": "2020-09-15T00:49:52.021910Z" } }, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 40;\n", - " var nbb_unformatted_code = \"counts = np.unique(y_train, return_counts=True)[1]\\ncounts = counts.sum() / counts\";\n", - " var nbb_formatted_code = \"counts = np.unique(y_train, return_counts=True)[1]\\ncounts = counts.sum() / counts\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "counts = np.unique(y_train, return_counts=True)[1]\n", "counts = counts.sum() / counts" @@ -2608,52 +769,14 @@ }, { "cell_type": "code", - "execution_count": 41, - "metadata": { - "ExecuteTime": { - "end_time": "2020-07-14T11:09:53.568976Z", - "start_time": "2020-07-14T11:09:53.544293Z" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "{0: 1.2308196102263944, 1: 5.332387525562372}" - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 41;\n", - " var nbb_unformatted_code = \"class_weight = {\\n 0: counts[0],\\n 1: counts[1],\\n}\\nclass_weight\";\n", - " var nbb_formatted_code = \"class_weight = {\\n 0: counts[0],\\n 1: counts[1],\\n}\\nclass_weight\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2020-09-15T00:49:52.070689Z", + "start_time": "2020-09-15T00:49:52.046630Z" + } + }, + "outputs": [], "source": [ "class_weight = {\n", " 0: counts[0],\n", @@ -2683,30 +806,11 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "start_time": "2020-07-14T11:08:57.220Z" + "end_time": "2020-09-15T00:50:05.792688Z", + "start_time": "2020-09-15T00:49:52.071499Z" } }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 1/2000\n", - "WARNING:tensorflow:From /work/.cache/poetry/thc-net-KQLMmzPP-py3.7/lib/python3.7/site-packages/tensorflow/python/ops/resource_variable_ops.py:1817: calling BaseResourceVariable.__init__ (from tensorflow.python.ops.resource_variable_ops) with constraint is deprecated and will be removed in a future version.\n", - "Instructions for updating:\n", - "If using Keras pass *_constraint arguments to layers.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING:tensorflow:From /work/.cache/poetry/thc-net-KQLMmzPP-py3.7/lib/python3.7/site-packages/tensorflow/python/ops/resource_variable_ops.py:1817: calling BaseResourceVariable.__init__ (from tensorflow.python.ops.resource_variable_ops) with constraint is deprecated and will be removed in a future version.\n", - "Instructions for updating:\n", - "If using Keras pass *_constraint arguments to layers.\n" - ] - } - ], + "outputs": [], "source": [ "%%time\n", "history = model.fit(\n", @@ -2726,7 +830,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "start_time": "2020-07-14T11:08:57.222Z" + "end_time": "2020-09-15T00:50:05.918003Z", + "start_time": "2020-09-15T00:50:05.793647Z" } }, "outputs": [], @@ -2739,7 +844,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "start_time": "2020-07-14T11:08:57.223Z" + "end_time": "2020-09-15T00:50:06.214247Z", + "start_time": "2020-09-15T00:50:05.918889Z" } }, "outputs": [], @@ -2755,7 +861,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "start_time": "2020-07-14T11:08:57.235Z" + "end_time": "2020-09-15T00:50:06.236400Z", + "start_time": "2020-09-15T00:50:06.215177Z" } }, "outputs": [], @@ -2770,7 +877,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "start_time": "2020-07-14T11:08:57.237Z" + "end_time": "2020-09-15T00:50:06.259648Z", + "start_time": "2020-09-15T00:50:06.237311Z" } }, "outputs": [], @@ -2790,7 +898,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "start_time": "2020-07-14T11:08:57.238Z" + "end_time": "2020-09-15T00:50:06.376527Z", + "start_time": "2020-09-15T00:50:06.260604Z" } }, "outputs": [], @@ -2804,7 +913,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "start_time": "2020-07-14T11:08:57.240Z" + "end_time": "2020-09-15T00:50:06.399891Z", + "start_time": "2020-09-15T00:50:06.377665Z" } }, "outputs": [], @@ -2819,7 +929,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "start_time": "2020-07-14T11:08:57.241Z" + "end_time": "2020-09-15T00:50:06.423122Z", + "start_time": "2020-09-15T00:50:06.400794Z" } }, "outputs": [], @@ -2839,7 +950,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "start_time": "2020-07-14T11:08:57.242Z" + "end_time": "2020-09-15T00:50:06.446660Z", + "start_time": "2020-09-15T00:50:06.424050Z" } }, "outputs": [], @@ -2852,7 +964,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "start_time": "2020-07-14T11:08:57.244Z" + "end_time": "2020-09-15T00:50:06.704952Z", + "start_time": "2020-09-15T00:50:06.447569Z" } }, "outputs": [], @@ -2865,7 +978,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "start_time": "2020-07-14T11:08:57.245Z" + "end_time": "2020-09-15T00:50:06.957454Z", + "start_time": "2020-09-15T00:50:06.705883Z" } }, "outputs": [], @@ -2878,7 +992,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "start_time": "2020-07-14T11:08:57.246Z" + "end_time": "2020-09-15T00:50:06.980809Z", + "start_time": "2020-09-15T00:50:06.958427Z" } }, "outputs": [], @@ -2891,7 +1006,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "start_time": "2020-07-14T11:08:57.247Z" + "end_time": "2020-09-15T00:50:07.004097Z", + "start_time": "2020-09-15T00:50:06.981722Z" } }, "outputs": [], @@ -2904,7 +1020,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "start_time": "2020-07-14T11:08:57.249Z" + "end_time": "2020-09-15T00:50:07.027975Z", + "start_time": "2020-09-15T00:50:07.005060Z" } }, "outputs": [], @@ -2917,7 +1034,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "start_time": "2020-07-14T11:08:57.250Z" + "end_time": "2020-09-15T00:50:07.057974Z", + "start_time": "2020-09-15T00:50:07.028890Z" } }, "outputs": [], @@ -2949,7 +1067,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "start_time": "2020-07-14T11:08:57.251Z" + "end_time": "2020-09-15T00:50:07.083133Z", + "start_time": "2020-09-15T00:50:07.058855Z" } }, "outputs": [], @@ -2963,7 +1082,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "start_time": "2020-07-14T11:08:57.253Z" + "end_time": "2020-09-15T00:50:07.209814Z", + "start_time": "2020-09-15T00:50:07.084058Z" } }, "outputs": [], @@ -2977,7 +1097,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "start_time": "2020-07-14T11:08:57.255Z" + "end_time": "2020-09-15T00:50:09.309472Z", + "start_time": "2020-09-15T00:50:07.210679Z" } }, "outputs": [], @@ -2992,7 +1113,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "start_time": "2020-07-14T11:08:57.257Z" + "end_time": "2020-09-15T00:50:09.333289Z", + "start_time": "2020-09-15T00:50:09.310387Z" } }, "outputs": [], @@ -3005,7 +1127,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "start_time": "2020-07-14T11:08:57.258Z" + "end_time": "2020-09-15T00:50:09.357827Z", + "start_time": "2020-09-15T00:50:09.334361Z" } }, "outputs": [], @@ -3018,7 +1141,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "start_time": "2020-07-14T11:08:57.259Z" + "end_time": "2020-09-15T00:50:09.380938Z", + "start_time": "2020-09-15T00:50:09.358684Z" } }, "outputs": [], @@ -3031,7 +1155,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "start_time": "2020-07-14T11:08:57.260Z" + "end_time": "2020-09-15T00:50:09.404429Z", + "start_time": "2020-09-15T00:50:09.381906Z" } }, "outputs": [], @@ -3044,7 +1169,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "start_time": "2020-07-14T11:08:57.262Z" + "end_time": "2020-09-15T00:50:09.530187Z", + "start_time": "2020-09-15T00:50:09.405362Z" } }, "outputs": [], @@ -3073,7 +1199,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.7" + "version": "3.7.9" } }, "nbformat": 4, diff --git a/prepare-tfa-build.sh b/prepare-tfa-build.sh index 8eee31d..3301f4d 100755 --- a/prepare-tfa-build.sh +++ b/prepare-tfa-build.sh @@ -1,7 +1,7 @@ #!/bin/bash set -e -TENSORFLOW_ADDONS_VERSION="v0.10.0" +TENSORFLOW_ADDONS_VERSION="v0.11.2" # This is already done in docker image # # Install Go (for TF build) # RUN curl https://dl.google.com/go/go1.13.10.linux-amd64.tar.gz -o go.tar.gz \ diff --git a/thc-net/build.sh b/thc-net/build.sh deleted file mode 100755 index e36f13e..0000000 --- a/thc-net/build.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -set -e - -cd tensorflow/ - -TMP=/tmp \ -bazel build \ ---local_ram_resources=HOST_RAM*0.5 \ ---local_cpu_resources=HOST_CPUS-2 \ -//tensorflow/tools/pip_package:build_pip_package \ ---config=noaws \ ---config=nogcp \ ---config=v2 \ ---config=mkl \ ---config=opt - - -mkdir -p /work/result_tf -./bazel-bin/tensorflow/tools/pip_package/build_pip_package /work/result_tf \ No newline at end of file diff --git a/thc-net/poetry.lock b/thc-net/poetry.lock index 8f6420b..662c82c 100644 --- a/thc-net/poetry.lock +++ b/thc-net/poetry.lock @@ -4,7 +4,7 @@ description = "Abseil Python Common Libraries, see https://github.com/abseil/abs name = "absl-py" optional = false python-versions = "*" -version = "0.9.0" +version = "0.10.0" [package.dependencies] six = "*" @@ -38,6 +38,14 @@ version = "1.6.3" six = ">=1.6.1,<2.0" wheel = ">=0.23.0,<1.0" +[[package]] +category = "dev" +description = "Async generators and context managers for Python 3.5+" +name = "async-generator" +optional = false +python-versions = ">=3.5" +version = "1.10" + [[package]] category = "dev" description = "Atomic file writes." @@ -53,13 +61,13 @@ description = "Classes Without Boilerplate" name = "attrs" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "19.3.0" +version = "20.2.0" [package.extras] -azure-pipelines = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "pytest-azurepipelines"] -dev = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "sphinx", "pre-commit"] -docs = ["sphinx", "zope.interface"] -tests = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"] +dev = ["coverage (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "sphinx", "sphinx-rtd-theme", "pre-commit"] +docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] +tests = ["coverage (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"] +tests_no_zope = ["coverage (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six"] [[package]] category = "dev" @@ -192,7 +200,7 @@ description = "Google Authentication Library" name = "google-auth" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" -version = "1.18.0" +version = "1.21.1" [package.dependencies] cachetools = ">=2.0.0,<5.0" @@ -201,7 +209,7 @@ setuptools = ">=40.3.0" six = ">=1.9.0" [package.dependencies.rsa] -python = ">=3" +python = ">=3.5" version = ">=3.1.4,<5" [[package]] @@ -236,11 +244,14 @@ description = "HTTP/2-based RPC framework" name = "grpcio" optional = false python-versions = "*" -version = "1.30.0" +version = "1.32.0" [package.dependencies] six = ">=1.5.2" +[package.extras] +protobuf = ["grpcio-tools (>=1.32.0)"] + [[package]] category = "main" description = "Read and write HDF5 files from Python" @@ -283,7 +294,7 @@ description = "IPython Kernel for Jupyter" name = "ipykernel" optional = false python-versions = ">=3.5" -version = "5.3.0" +version = "5.3.4" [package.dependencies] appnope = "*" @@ -362,7 +373,7 @@ description = "An autocompletion tool for Python that can be used for text edito name = "jedi" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "0.17.1" +version = "0.17.2" [package.dependencies] parso = ">=0.7.0,<0.8.0" @@ -391,7 +402,7 @@ description = "Lightweight pipelining: using Python functions as pipeline jobs." name = "joblib" optional = false python-versions = ">=3.6" -version = "0.15.1" +version = "0.16.0" [[package]] category = "dev" @@ -421,7 +432,7 @@ description = "Jupyter protocol implementation and client libraries" name = "jupyter-client" optional = false python-versions = ">=3.5" -version = "6.1.3" +version = "6.1.7" [package.dependencies] jupyter-core = ">=4.6.0" @@ -431,7 +442,7 @@ tornado = ">=4.1" traitlets = "*" [package.extras] -test = ["ipykernel", "ipython", "mock", "pytest"] +test = ["ipykernel", "ipython", "mock", "pytest", "pytest-asyncio", "async-generator", "pytest-timeout"] [[package]] category = "dev" @@ -530,6 +541,17 @@ traitlets = "*" [package.extras] test = ["jupyter-contrib-core", "nose", "requests", "selenium", "mock"] +[[package]] +category = "dev" +description = "Pygments theme using JupyterLab CSS variables" +name = "jupyterlab-pygments" +optional = false +python-versions = "*" +version = "0.1.1" + +[package.dependencies] +pygments = ">=2.4.1,<3" + [[package]] category = "main" description = "Easy data preprocessing and data augmentation for deep learning models" @@ -561,7 +583,7 @@ description = "Powerful and Pythonic XML processing library combining libxml2/li name = "lxml" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" -version = "4.5.1" +version = "4.5.2" [package.extras] cssselect = ["cssselect (>=0.7)"] @@ -622,7 +644,7 @@ description = "More routines for operating on iterables, beyond itertools" name = "more-itertools" optional = false python-versions = ">=3.5" -version = "8.4.0" +version = "8.5.0" [[package]] category = "dev" @@ -635,13 +657,33 @@ version = "1.0.7" [package.dependencies] ipython = "*" +[[package]] +category = "dev" +description = "A client library for executing notebooks. Formally nbconvert's ExecutePreprocessor." +name = "nbclient" +optional = false +python-versions = ">=3.6" +version = "0.5.0" + +[package.dependencies] +async-generator = "*" +jupyter-client = ">=6.1.5" +nbformat = ">=5.0" +nest-asyncio = "*" +traitlets = ">=4.2" + +[package.extras] +dev = ["codecov", "coverage", "ipython", "ipykernel", "ipywidgets", "pytest (>=4.1)", "pytest-cov (>=2.6.1)", "check-manifest", "flake8", "mypy", "tox", "bumpversion", "xmltodict", "pip (>=18.1)", "wheel (>=0.31.0)", "setuptools (>=38.6.0)", "twine (>=1.11.0)", "black"] +sphinx = ["Sphinx (>=1.7)", "sphinx-book-theme", "mock", "moto", "myst-parser"] +test = ["codecov", "coverage", "ipython", "ipykernel", "ipywidgets", "pytest (>=4.1)", "pytest-cov (>=2.6.1)", "check-manifest", "flake8", "mypy", "tox", "bumpversion", "xmltodict", "pip (>=18.1)", "wheel (>=0.31.0)", "setuptools (>=38.6.0)", "twine (>=1.11.0)", "black"] + [[package]] category = "dev" description = "Converting Jupyter Notebooks" name = "nbconvert" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "5.6.1" +python-versions = ">=3.6" +version = "6.0.2" [package.dependencies] bleach = "*" @@ -649,19 +691,21 @@ defusedxml = "*" entrypoints = ">=0.2.2" jinja2 = ">=2.4" jupyter-core = "*" +jupyterlab-pygments = "*" mistune = ">=0.8.1,<2" +nbclient = ">=0.5.0,<0.6.0" nbformat = ">=4.4" pandocfilters = ">=1.4.1" -pygments = "*" +pygments = ">=2.4.1" testpath = "*" traitlets = ">=4.2" [package.extras] -all = ["pytest", "pytest-cov", "ipykernel", "jupyter-client (>=5.3.1)", "ipywidgets (>=7)", "pebble", "tornado (>=4.0)", "sphinx (>=1.5.1)", "sphinx-rtd-theme", "nbsphinx (>=0.2.12)", "sphinxcontrib-github-alt", "ipython", "mock"] -docs = ["sphinx (>=1.5.1)", "sphinx-rtd-theme", "nbsphinx (>=0.2.12)", "sphinxcontrib-github-alt", "ipython", "jupyter-client (>=5.3.1)"] -execute = ["jupyter-client (>=5.3.1)"] +all = ["pytest", "pytest-cov", "pytest-dependency", "ipykernel", "ipywidgets (>=7)", "pyppeteer (0.2.2)", "tornado (>=4.0)", "sphinx (>=1.5.1)", "sphinx-rtd-theme", "nbsphinx (>=0.2.12)", "ipython"] +docs = ["sphinx (>=1.5.1)", "sphinx-rtd-theme", "nbsphinx (>=0.2.12)", "ipython"] serve = ["tornado (>=4.0)"] -test = ["pytest", "pytest-cov", "ipykernel", "jupyter-client (>=5.3.1)", "ipywidgets (>=7)", "pebble", "mock"] +test = ["pytest", "pytest-cov", "pytest-dependency", "ipykernel", "ipywidgets (>=7)", "pyppeteer (0.2.2)"] +webpdf = ["pyppeteer (0.2.2)"] [[package]] category = "dev" @@ -680,6 +724,14 @@ traitlets = ">=4.1" [package.extras] test = ["pytest", "pytest-cov", "testpath"] +[[package]] +category = "dev" +description = "Patch asyncio to allow nested event loops" +name = "nest-asyncio" +optional = false +python-versions = ">=3.5" +version = "1.4.0" + [[package]] category = "dev" description = "A web-based notebook environment for interactive computing" @@ -733,7 +785,7 @@ description = "Optimizing numpys einsum function" name = "opt-einsum" optional = false python-versions = ">=3.5" -version = "3.2.1" +version = "3.3.0" [package.dependencies] numpy = ">=1.7" @@ -784,7 +836,7 @@ description = "A Python Parser" name = "parso" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "0.7.0" +version = "0.7.1" [package.extras] testing = ["docopt", "pytest (>=3.0.7)"] @@ -850,7 +902,7 @@ description = "Library for building powerful interactive command lines in Python name = "prompt-toolkit" optional = false python-versions = ">=3.6.1" -version = "3.0.5" +version = "3.0.7" [package.dependencies] wcwidth = "*" @@ -861,7 +913,7 @@ description = "Protocol Buffers" name = "protobuf" optional = false python-versions = "*" -version = "3.12.2" +version = "3.13.0" [package.dependencies] setuptools = "*" @@ -909,7 +961,7 @@ description = "Pygments is a syntax highlighting package written in Python." name = "pygments" optional = false python-versions = ">=3.5" -version = "2.6.1" +version = "2.7.0" [[package]] category = "dev" @@ -924,11 +976,8 @@ category = "dev" description = "Persistent/Functional/Immutable data structures" name = "pyrsistent" optional = false -python-versions = "*" -version = "0.16.0" - -[package.dependencies] -six = "*" +python-versions = ">=3.5" +version = "0.17.3" [[package]] category = "dev" @@ -1007,7 +1056,7 @@ description = "Python bindings for 0MQ" name = "pyzmq" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*" -version = "19.0.1" +version = "19.0.2" [[package]] category = "dev" @@ -1015,7 +1064,7 @@ description = "Alternative regular expression module, to replace re." name = "regex" optional = false python-versions = "*" -version = "2020.6.8" +version = "2020.7.14" [[package]] category = "main" @@ -1053,7 +1102,7 @@ rsa = ["oauthlib (>=3.0.0)"] [[package]] category = "main" description = "Pure-Python RSA implementation" -marker = "python_version >= \"3\"" +marker = "python_version >= \"3.5\"" name = "rsa" optional = false python-versions = "*" @@ -1179,7 +1228,7 @@ description = "TensorFlow Addons." name = "tensorflow-addons" optional = false python-versions = "*" -version = "0.10.0" +version = "0.11.2" [package.dependencies] typeguard = ">=2.7" @@ -1329,8 +1378,8 @@ category = "main" description = "A built-package format for Python" name = "wheel" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "0.34.2" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +version = "0.35.1" [package.extras] test = ["pytest (>=3.0.0)", "pytest-cov"] @@ -1368,12 +1417,14 @@ docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"] testing = ["jaraco.itertools", "func-timeout"] [metadata] -content-hash = "c5c5090bd6059bdb67008e825476dcb6a942bc1a3c2a14b5c4b702beb3e05861" +content-hash = "23b7706af893a2dabd921f5aa795f30ab74beda965a97b185611b78129fcb595" +lock-version = "1.0" python-versions = ">=3.6.1" [metadata.files] absl-py = [ - {file = "absl-py-0.9.0.tar.gz", hash = "sha256:75e737d6ce7723d9ff9b7aa1ba3233c34be62ef18d5859e706b8fdc828989830"}, + {file = "absl-py-0.10.0.tar.gz", hash = "sha256:b20f504a7871a580be5268a18fbad48af4203df5d33dbc9272426cb806245a45"}, + {file = "absl_py-0.10.0-py3-none-any.whl", hash = "sha256:ea07d7d437798bffc14f39fccec3909d251a1e76e233205ded72b71c267e0178"}, ] appdirs = [ {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"}, @@ -1387,13 +1438,17 @@ astunparse = [ {file = "astunparse-1.6.3-py2.py3-none-any.whl", hash = "sha256:c2652417f2c8b5bb325c885ae329bdf3f86424075c4fd1a128674bc6fba4b8e8"}, {file = "astunparse-1.6.3.tar.gz", hash = "sha256:5ad93a8456f0d084c3456d059fd9a92cce667963232cbf763eac3bc5b7940872"}, ] +async-generator = [ + {file = "async_generator-1.10-py3-none-any.whl", hash = "sha256:01c7bf666359b4967d2cda0000cc2e4af16a0ae098cbffcb8472fb9e8ad6585b"}, + {file = "async_generator-1.10.tar.gz", hash = "sha256:6ebb3d106c12920aaae42ccb6f787ef5eefdcdd166ea3d628fa8476abe712144"}, +] atomicwrites = [ {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, ] attrs = [ - {file = "attrs-19.3.0-py2.py3-none-any.whl", hash = "sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c"}, - {file = "attrs-19.3.0.tar.gz", hash = "sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72"}, + {file = "attrs-20.2.0-py2.py3-none-any.whl", hash = "sha256:fce7fc47dfc976152e82d53ff92fa0407700c21acd20886a13777a0d20e655dc"}, + {file = "attrs-20.2.0.tar.gz", hash = "sha256:26b54ddbbb9ee1d34d5d3668dd37d6cf74990ab23c828c2888dccdceee395594"}, ] backcall = [ {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, @@ -1448,8 +1503,8 @@ gast = [ {file = "gast-0.3.3.tar.gz", hash = "sha256:b881ef288a49aa81440d2c5eb8aeefd4c2bb8993d5f50edae7413a85bfdb3b57"}, ] google-auth = [ - {file = "google-auth-1.18.0.tar.gz", hash = "sha256:d6b390d3bb0969061ffec7e5766c45c1b39e13c302691e35029f1ad1ccd8ca3b"}, - {file = "google_auth-1.18.0-py2.py3-none-any.whl", hash = "sha256:5e3f540b7b0b892000d542cea6b818b837c230e9a4db9337bb2973bcae0fc078"}, + {file = "google-auth-1.21.1.tar.gz", hash = "sha256:bcbd9f970e7144fe933908aa286d7a12c44b7deb6d78a76871f0377a29d09789"}, + {file = "google_auth-1.21.1-py2.py3-none-any.whl", hash = "sha256:f4d5093f13b1b1c0a434ab1dc851cd26a983f86a4d75c95239974e33ed406a87"}, ] google-auth-oauthlib = [ {file = "google-auth-oauthlib-0.4.1.tar.gz", hash = "sha256:88d2cd115e3391eb85e1243ac6902e76e77c5fe438b7276b297fbe68015458dd"}, @@ -1461,37 +1516,45 @@ google-pasta = [ {file = "google_pasta-0.2.0-py3-none-any.whl", hash = "sha256:b32482794a366b5366a32c92a9a9201b107821889935a02b3e51f6b432ea84ed"}, ] grpcio = [ - {file = "grpcio-1.30.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:d5eee9d205518ee4feb9c424475ddad18a44fea97ff405780e7cd1d6df8ee96a"}, - {file = "grpcio-1.30.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:3cb78f8078ae583810c2eb47e536b0803a039656685144db43897e8beca4e203"}, - {file = "grpcio-1.30.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:d18e7fb5c5c336cc349d06cde24582e0bfa5e067fdd6268bf1519c4eb4af0199"}, - {file = "grpcio-1.30.0-cp27-cp27m-win32.whl", hash = "sha256:0c334d6cbe27ebaa9e7211236dc99f3a9ca2ea4b3bf89b0d2544df2924343cc5"}, - {file = "grpcio-1.30.0-cp27-cp27m-win_amd64.whl", hash = "sha256:7b47ec90cab0827679b511f7f9ef4fb0077cb5d7bb3d7b917154e718bb4d983b"}, - {file = "grpcio-1.30.0-cp27-cp27mu-linux_armv7l.whl", hash = "sha256:872d45a2e01f47db095bec032470a8c5c0a5ebd00fc930b5ae35c756b20d2cff"}, - {file = "grpcio-1.30.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:9ae898c15d122a046f04ea99327e3e0bd10593eb413c4810b931103da6311a21"}, - {file = "grpcio-1.30.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:474bb992355b4a3cb8d7cb783b2d81f628c16ea921cec54ff492420e11c896f5"}, - {file = "grpcio-1.30.0-cp35-cp35m-linux_armv7l.whl", hash = "sha256:37da010e209289085d3362f371d9feefc152790859470f5e413d84a95a8d3998"}, - {file = "grpcio-1.30.0-cp35-cp35m-macosx_10_7_intel.whl", hash = "sha256:74e8b6bd0f7ae64a7eecfe9bf10bc7a905d3b3eb2775cd3a9fdcdafd277469dd"}, - {file = "grpcio-1.30.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:b8e5194fb20f4365eacfc3c33d61662651e12e166978186faf378ee972eb0bab"}, - {file = "grpcio-1.30.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:09bea7902adc33620d68462671942e163ab12214073ffb613d2fef3df94254f6"}, - {file = "grpcio-1.30.0-cp35-cp35m-win32.whl", hash = "sha256:2522f1808fe41bd8807feb5330025378553745b727eacb07562319205d1fd405"}, - {file = "grpcio-1.30.0-cp35-cp35m-win_amd64.whl", hash = "sha256:afe1f9173b51945e66c72002995eb6d4217384aaaee53215ae85d8543251fec2"}, - {file = "grpcio-1.30.0-cp36-cp36m-linux_armv7l.whl", hash = "sha256:b934542dd61746651f7907d2d7878f62ef42fdb46935088fc6a1d8266a406ba5"}, - {file = "grpcio-1.30.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:ac97beab4a749c7faf6f267f7b149f6dff4f3ad64f6f6ac1d94d04019785d6a4"}, - {file = "grpcio-1.30.0-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:795f351ef70a931f8f7be6a10a509714ec0a6e36c674a071abe5da8eb6b8bb35"}, - {file = "grpcio-1.30.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:8d3249566b2d8b97925fbb2ae6c5b63c5ebdb919828230eae06a25e9614e051b"}, - {file = "grpcio-1.30.0-cp36-cp36m-win32.whl", hash = "sha256:32fe6369143c262d096995ebdd55eeb77f0e1dbe8343a956462ef0607527c7bc"}, - {file = "grpcio-1.30.0-cp36-cp36m-win_amd64.whl", hash = "sha256:08362b8b09562179b14db6ffce4b88e1a6a6edac8bccb85dd35f7b214fa5a0f5"}, - {file = "grpcio-1.30.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8ad75925e87ed68d5f7d5e3ec4b9f2ed209fae67c0abbcbd17481cc474421ba"}, - {file = "grpcio-1.30.0-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:14743e8fdfdabbab1a2075ffafd25e0a8b1a864505e3cccdf19793766cdc4624"}, - {file = "grpcio-1.30.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:0c4e316e02fc227c6fba858707baee46f30d890754fc4acdf2cfec2ea0bf0aa1"}, - {file = "grpcio-1.30.0-cp37-cp37m-win32.whl", hash = "sha256:b0f7bfba0ae7a97b802348aba4e08b1e84988103cc1eb887241e7b069010058a"}, - {file = "grpcio-1.30.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2121afee4e3ebea7df1137bfb4dc396b1856aff4c517780108d9ce82f57bf2f8"}, - {file = "grpcio-1.30.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b022cedea66b7d6774bbd7d32d5a8a374947fb572da1a6915210b09a6f51cbdf"}, - {file = "grpcio-1.30.0-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:38ab75168a9024d393bf43343960da425736038d249920955f223bc762587697"}, - {file = "grpcio-1.30.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:1f45ec5003101f16673436b150bac73c2355cd9ae78cb14f3707be01a39b5450"}, - {file = "grpcio-1.30.0-cp38-cp38-win32.whl", hash = "sha256:7f264d740906655a147448d57e4422723639d2d3f891734b8d5eb1675cb47192"}, - {file = "grpcio-1.30.0-cp38-cp38-win_amd64.whl", hash = "sha256:31e9891ac742e6866aec0cf67f1892618982cfbaf08bdcf3bb2e0f0828530c38"}, - {file = "grpcio-1.30.0.tar.gz", hash = "sha256:e8f2f5d16e0164c415f1b31a8d9a81f2e4645a43d1b261375d6bab7b0adf511f"}, + {file = "grpcio-1.32.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3afb058b6929eba07dba9ae6c5b555aa1d88cb140187d78cc510bd72d0329f28"}, + {file = "grpcio-1.32.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:a8004b34f600a8a51785e46859cd88f3386ef67cccd1cfc7598e3d317608c643"}, + {file = "grpcio-1.32.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:e6786f6f7be0937614577edcab886ddce91b7c1ea972a07ef9972e9f9ecbbb78"}, + {file = "grpcio-1.32.0-cp27-cp27m-win32.whl", hash = "sha256:e467af6bb8f5843f5a441e124b43474715cfb3981264e7cd227343e826dcc3ce"}, + {file = "grpcio-1.32.0-cp27-cp27m-win_amd64.whl", hash = "sha256:1376a60f9bfce781b39973f100b5f67e657b5be479f2fd8a7d2a408fc61c085c"}, + {file = "grpcio-1.32.0-cp27-cp27mu-linux_armv7l.whl", hash = "sha256:ce617e1c4a39131f8527964ac9e700eb199484937d7a0b3e52655a3ba50d5fb9"}, + {file = "grpcio-1.32.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:99bac0e2c820bf446662365df65841f0c2a55b0e2c419db86eaf5d162ddae73e"}, + {file = "grpcio-1.32.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:6d869a3e8e62562b48214de95e9231c97c53caa7172802236cd5d60140d7cddd"}, + {file = "grpcio-1.32.0-cp35-cp35m-linux_armv7l.whl", hash = "sha256:182c64ade34c341398bf71ec0975613970feb175090760ab4f51d1e9a5424f05"}, + {file = "grpcio-1.32.0-cp35-cp35m-macosx_10_7_intel.whl", hash = "sha256:9c0d8f2346c842088b8cbe3e14985b36e5191a34bf79279ba321a4bf69bd88b7"}, + {file = "grpcio-1.32.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:4775bc35af9cd3b5033700388deac2e1d611fa45f4a8dcb93667d94cb25f0444"}, + {file = "grpcio-1.32.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:be98e3198ec765d0a1e27f69d760f69374ded8a33b953dcfe790127731f7e690"}, + {file = "grpcio-1.32.0-cp35-cp35m-manylinux2014_i686.whl", hash = "sha256:378fe80ec5d9353548eb2a8a43ea03747a80f2e387c4f177f2b3ff6c7d898753"}, + {file = "grpcio-1.32.0-cp35-cp35m-manylinux2014_x86_64.whl", hash = "sha256:f7d508691301027033215d3662dab7e178f54d5cca2329f26a71ae175d94b83f"}, + {file = "grpcio-1.32.0-cp35-cp35m-win32.whl", hash = "sha256:25959a651420dd4a6fd7d3e8dee53f4f5fd8c56336a64963428e78b276389a59"}, + {file = "grpcio-1.32.0-cp35-cp35m-win_amd64.whl", hash = "sha256:ac7028d363d2395f3d755166d0161556a3f99500a5b44890421ccfaaf2aaeb08"}, + {file = "grpcio-1.32.0-cp36-cp36m-linux_armv7l.whl", hash = "sha256:c31e8a219650ddae1cd02f5a169e1bffe66a429a8255d3ab29e9363c73003b62"}, + {file = "grpcio-1.32.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e28e4c0d4231beda5dee94808e3a224d85cbaba3cfad05f2192e6f4ec5318053"}, + {file = "grpcio-1.32.0-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f03dfefa9075dd1c6c5cc27b1285c521434643b09338d8b29e1d6a27b386aa82"}, + {file = "grpcio-1.32.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:c4966d746dccb639ef93f13560acbe9630681c07f2b320b7ec03fe2c8f0a1f15"}, + {file = "grpcio-1.32.0-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:ec10d5f680b8e95a06f1367d73c5ddcc0ed04a3f38d6e4c9346988fb0cea2ffa"}, + {file = "grpcio-1.32.0-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:28677f057e2ef11501860a7bc15de12091d40b95dd0fddab3c37ff1542e6b216"}, + {file = "grpcio-1.32.0-cp36-cp36m-win32.whl", hash = "sha256:0f3f09269ffd3fded430cd89ba2397eabbf7e47be93983b25c187cdfebb302a7"}, + {file = "grpcio-1.32.0-cp36-cp36m-win_amd64.whl", hash = "sha256:4396b1d0f388ae875eaf6dc05cdcb612c950fd9355bc34d38b90aaa0665a0d4b"}, + {file = "grpcio-1.32.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:1ada89326a364a299527c7962e5c362dbae58c67b283fe8383c4d952b26565d5"}, + {file = "grpcio-1.32.0-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:1d384a61f96a1fc6d5d3e0b62b0a859abc8d4c3f6d16daba51ebf253a3e7df5d"}, + {file = "grpcio-1.32.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:e811ce5c387256609d56559d944a974cc6934a8eea8c76e7c86ec388dc06192d"}, + {file = "grpcio-1.32.0-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:07b430fa68e5eecd78e2ad529ab80f6a234b55fc1b675fe47335ccbf64c6c6c8"}, + {file = "grpcio-1.32.0-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:0e3edd8cdb71809d2455b9dbff66b4dd3d36c321e64bfa047da5afdfb0db332b"}, + {file = "grpcio-1.32.0-cp37-cp37m-win32.whl", hash = "sha256:6f7947dad606c509d067e5b91a92b250aa0530162ab99e4737090f6b17eb12c4"}, + {file = "grpcio-1.32.0-cp37-cp37m-win_amd64.whl", hash = "sha256:7cda998b7b551503beefc38db9be18c878cfb1596e1418647687575cdefa9273"}, + {file = "grpcio-1.32.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c58825a3d8634cd634d8f869afddd4d5742bdb59d594aea4cea17b8f39269a55"}, + {file = "grpcio-1.32.0-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:ef9bd7fdfc0a063b4ed0efcab7906df5cae9bbcf79d05c583daa2eba56752b00"}, + {file = "grpcio-1.32.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:1ce6f5ff4f4a548c502d5237a071fa617115df58ea4b7bd41dac77c1ab126e9c"}, + {file = "grpcio-1.32.0-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:f12900be4c3fd2145ba94ab0d80b7c3d71c9e6414cfee2f31b1c20188b5c281f"}, + {file = "grpcio-1.32.0-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:f53f2dfc8ff9a58a993e414a016c8b21af333955ae83960454ad91798d467c7b"}, + {file = "grpcio-1.32.0-cp38-cp38-win32.whl", hash = "sha256:5bddf9d53c8df70061916c3bfd2f468ccf26c348bb0fb6211531d895ed5e4c72"}, + {file = "grpcio-1.32.0-cp38-cp38-win_amd64.whl", hash = "sha256:14c0f017bfebbc18139551111ac58ecbde11f4bc375b73a53af38927d60308b6"}, + {file = "grpcio-1.32.0.tar.gz", hash = "sha256:01d3046fe980be25796d368f8fc5ff34b7cf5e1444f3789a017a7fe794465639"}, ] h5py = [ {file = "h5py-2.10.0-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:ecf4d0b56ee394a0984de15bceeb97cbe1fe485f1ac205121293fc44dcf3f31f"}, @@ -1533,8 +1596,8 @@ importlib-metadata = [ {file = "importlib_metadata-1.7.0.tar.gz", hash = "sha256:90bb658cdbbf6d1735b6341ce708fc7024a3e14e99ffdc5783edea9f9b077f83"}, ] ipykernel = [ - {file = "ipykernel-5.3.0-py3-none-any.whl", hash = "sha256:a8362e3ae365023ca458effe93b026b8cdadc0b73ff3031472128dd8a2cf0289"}, - {file = "ipykernel-5.3.0.tar.gz", hash = "sha256:731adb3f2c4ebcaff52e10a855ddc87670359a89c9c784d711e62d66fccdafae"}, + {file = "ipykernel-5.3.4-py3-none-any.whl", hash = "sha256:d6fbba26dba3cebd411382bc484f7bc2caa98427ae0ddb4ab37fe8bfeb5c7dd3"}, + {file = "ipykernel-5.3.4.tar.gz", hash = "sha256:9b2652af1607986a1b231c62302d070bc0534f564c393a5d9d130db9abbbe89d"}, ] ipython = [ {file = "ipython-7.16.1-py3-none-any.whl", hash = "sha256:2dbcc8c27ca7d3cfe4fcdff7f45b27f9a8d3edfa70ff8024a71c7a8eb5f09d64"}, @@ -1549,24 +1612,24 @@ ipywidgets = [ {file = "ipywidgets-7.5.1.tar.gz", hash = "sha256:e945f6e02854a74994c596d9db83444a1850c01648f1574adf144fbbabe05c97"}, ] jedi = [ - {file = "jedi-0.17.1-py2.py3-none-any.whl", hash = "sha256:1ddb0ec78059e8e27ec9eb5098360b4ea0a3dd840bedf21415ea820c21b40a22"}, - {file = "jedi-0.17.1.tar.gz", hash = "sha256:807d5d4f96711a2bcfdd5dfa3b1ae6d09aa53832b182090b222b5efb81f52f63"}, + {file = "jedi-0.17.2-py2.py3-none-any.whl", hash = "sha256:98cc583fa0f2f8304968199b01b6b4b94f469a1f4a74c1560506ca2a211378b5"}, + {file = "jedi-0.17.2.tar.gz", hash = "sha256:86ed7d9b750603e4ba582ea8edc678657fb4007894a12bcf6f4bb97892f31d20"}, ] jinja2 = [ {file = "Jinja2-2.11.2-py2.py3-none-any.whl", hash = "sha256:f0a4641d3cf955324a89c04f3d94663aa4d638abe8f733ecd3582848e1c37035"}, {file = "Jinja2-2.11.2.tar.gz", hash = "sha256:89aab215427ef59c34ad58735269eb58b1a5808103067f7bb9d5836c651b3bb0"}, ] joblib = [ - {file = "joblib-0.15.1-py3-none-any.whl", hash = "sha256:6825784ffda353cc8a1be573118085789e5b5d29401856b35b756645ab5aecb5"}, - {file = "joblib-0.15.1.tar.gz", hash = "sha256:61e49189c84b3c5d99a969d314853f4d1d263316cc694bec17548ebaa9c47b6e"}, + {file = "joblib-0.16.0-py3-none-any.whl", hash = "sha256:d348c5d4ae31496b2aa060d6d9b787864dd204f9480baaa52d18850cb43e9f49"}, + {file = "joblib-0.16.0.tar.gz", hash = "sha256:8f52bf24c64b608bf0b2563e0e47d6fcf516abc8cfafe10cfd98ad66d94f92d6"}, ] jsonschema = [ {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"}, {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"}, ] jupyter-client = [ - {file = "jupyter_client-6.1.3-py3-none-any.whl", hash = "sha256:cde8e83aab3ec1c614f221ae54713a9a46d3bf28292609d2db1b439bef5a8c8e"}, - {file = "jupyter_client-6.1.3.tar.gz", hash = "sha256:3a32fa4d0b16d1c626b30c3002a62dfd86d6863ed39eaba3f537fade197bb756"}, + {file = "jupyter_client-6.1.7-py3-none-any.whl", hash = "sha256:c958d24d6eacb975c1acebb68ac9077da61b5f5c040f22f6849928ad7393b950"}, + {file = "jupyter_client-6.1.7.tar.gz", hash = "sha256:49e390b36fe4b4226724704ea28d9fb903f1a3601b6882ce3105221cd09377a1"}, ] jupyter-contrib-core = [ {file = "jupyter_contrib_core-0.3.3-py2.py3-none-any.whl", hash = "sha256:1ec81e275a8f5858d56b0c4c6cd85335aa8e915001b8657fe51c620c3cdde50f"}, @@ -1590,6 +1653,10 @@ jupyter-latex-envs = [ jupyter-nbextensions-configurator = [ {file = "jupyter_nbextensions_configurator-0.4.1.tar.gz", hash = "sha256:e5e86b5d9d898e1ffb30ebb08e4ad8696999f798fef3ff3262d7b999076e4e83"}, ] +jupyterlab-pygments = [ + {file = "jupyterlab_pygments-0.1.1-py2.py3-none-any.whl", hash = "sha256:c9535e5999f29bff90bd0fa423717dcaf247b71fad505d66b17d3217e9021fc5"}, + {file = "jupyterlab_pygments-0.1.1.tar.gz", hash = "sha256:19a0ccde7daddec638363cd3d60b63a4f6544c9181d65253317b2fb492a797b9"}, +] keras-preprocessing = [ {file = "Keras_Preprocessing-1.1.2-py2.py3-none-any.whl", hash = "sha256:7b82029b130ff61cc99b55f3bd27427df4838576838c5b2f65940e4fcec99a7b"}, {file = "Keras_Preprocessing-1.1.2.tar.gz", hash = "sha256:add82567c50c8bc648c14195bf544a5ce7c1f76761536956c3d2978970179ef3"}, @@ -1598,48 +1665,55 @@ kiwisolver = [ {file = "kiwisolver-1.2.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:443c2320520eda0a5b930b2725b26f6175ca4453c61f739fef7a5847bd262f74"}, {file = "kiwisolver-1.2.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:efcf3397ae1e3c3a4a0a0636542bcad5adad3b1dd3e8e629d0b6e201347176c8"}, {file = "kiwisolver-1.2.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:fccefc0d36a38c57b7bd233a9b485e2f1eb71903ca7ad7adacad6c28a56d62d2"}, + {file = "kiwisolver-1.2.0-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:be046da49fbc3aa9491cc7296db7e8d27bcf0c3d5d1a40259c10471b014e4e0c"}, {file = "kiwisolver-1.2.0-cp36-none-win32.whl", hash = "sha256:60a78858580761fe611d22127868f3dc9f98871e6fdf0a15cc4203ed9ba6179b"}, {file = "kiwisolver-1.2.0-cp36-none-win_amd64.whl", hash = "sha256:556da0a5f60f6486ec4969abbc1dd83cf9b5c2deadc8288508e55c0f5f87d29c"}, {file = "kiwisolver-1.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7cc095a4661bdd8a5742aaf7c10ea9fac142d76ff1770a0f84394038126d8fc7"}, {file = "kiwisolver-1.2.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:c955791d80e464da3b471ab41eb65cf5a40c15ce9b001fdc5bbc241170de58ec"}, {file = "kiwisolver-1.2.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:603162139684ee56bcd57acc74035fceed7dd8d732f38c0959c8bd157f913fec"}, + {file = "kiwisolver-1.2.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:63f55f490b958b6299e4e5bdac66ac988c3d11b7fafa522800359075d4fa56d1"}, {file = "kiwisolver-1.2.0-cp37-none-win32.whl", hash = "sha256:03662cbd3e6729f341a97dd2690b271e51a67a68322affab12a5b011344b973c"}, {file = "kiwisolver-1.2.0-cp37-none-win_amd64.whl", hash = "sha256:4eadb361baf3069f278b055e3bb53fa189cea2fd02cb2c353b7a99ebb4477ef1"}, {file = "kiwisolver-1.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c31bc3c8e903d60a1ea31a754c72559398d91b5929fcb329b1c3a3d3f6e72113"}, {file = "kiwisolver-1.2.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:d52b989dc23cdaa92582ceb4af8d5bcc94d74b2c3e64cd6785558ec6a879793e"}, {file = "kiwisolver-1.2.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:e586b28354d7b6584d8973656a7954b1c69c93f708c0c07b77884f91640b7657"}, + {file = "kiwisolver-1.2.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:38d05c9ecb24eee1246391820ed7137ac42a50209c203c908154782fced90e44"}, {file = "kiwisolver-1.2.0-cp38-none-win32.whl", hash = "sha256:d069ef4b20b1e6b19f790d00097a5d5d2c50871b66d10075dab78938dc2ee2cf"}, {file = "kiwisolver-1.2.0-cp38-none-win_amd64.whl", hash = "sha256:18d749f3e56c0480dccd1714230da0f328e6e4accf188dd4e6884bdd06bf02dd"}, {file = "kiwisolver-1.2.0.tar.gz", hash = "sha256:247800260cd38160c362d211dcaf4ed0f7816afb5efe56544748b21d6ad6d17f"}, ] lxml = [ - {file = "lxml-4.5.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ee2be8b8f72a2772e72ab926a3bccebf47bb727bda41ae070dc91d1fb759b726"}, - {file = "lxml-4.5.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:fadd2a63a2bfd7fb604508e553d1cf68eca250b2fbdbd81213b5f6f2fbf23529"}, - {file = "lxml-4.5.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:4f282737d187ae723b2633856085c31ae5d4d432968b7f3f478a48a54835f5c4"}, - {file = "lxml-4.5.1-cp27-cp27m-win32.whl", hash = "sha256:7fd88cb91a470b383aafad554c3fe1ccf6dfb2456ff0e84b95335d582a799804"}, - {file = "lxml-4.5.1-cp27-cp27m-win_amd64.whl", hash = "sha256:0790ddca3f825dd914978c94c2545dbea5f56f008b050e835403714babe62a5f"}, - {file = "lxml-4.5.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:9144ce36ca0824b29ebc2e02ca186e54040ebb224292072250467190fb613b96"}, - {file = "lxml-4.5.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:a636346c6c0e1092ffc202d97ec1843a75937d8c98aaf6771348ad6422e44bb0"}, - {file = "lxml-4.5.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:f95d28193c3863132b1f55c1056036bf580b5a488d908f7d22a04ace8935a3a9"}, - {file = "lxml-4.5.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:b26719890c79a1dae7d53acac5f089d66fd8cc68a81f4e4bd355e45470dc25e1"}, - {file = "lxml-4.5.1-cp35-cp35m-win32.whl", hash = "sha256:a9e3b8011388e7e373565daa5e92f6c9cb844790dc18e43073212bb3e76f7007"}, - {file = "lxml-4.5.1-cp35-cp35m-win_amd64.whl", hash = "sha256:2754d4406438c83144f9ffd3628bbe2dcc6d62b20dbc5c1ec4bc4385e5d44b42"}, - {file = "lxml-4.5.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:925baf6ff1ef2c45169f548cc85204433e061360bfa7d01e1be7ae38bef73194"}, - {file = "lxml-4.5.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:a87dbee7ad9dce3aaefada2081843caf08a44a8f52e03e0a4cc5819f8398f2f4"}, - {file = "lxml-4.5.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:51bb4edeb36d24ec97eb3e6a6007be128b720114f9a875d6b370317d62ac80b9"}, - {file = "lxml-4.5.1-cp36-cp36m-win32.whl", hash = "sha256:c79e5debbe092e3c93ca4aee44c9a7631bdd407b2871cb541b979fd350bbbc29"}, - {file = "lxml-4.5.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b7462cdab6fffcda853338e1741ce99706cdf880d921b5a769202ea7b94e8528"}, - {file = "lxml-4.5.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:06748c7192eab0f48e3d35a7adae609a329c6257495d5e53878003660dc0fec6"}, - {file = "lxml-4.5.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:1aa7a6197c1cdd65d974f3e4953764eee3d9c7b67e3966616b41fab7f8f516b7"}, - {file = "lxml-4.5.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:afb53edf1046599991fb4a7d03e601ab5f5422a5435c47ee6ba91ec3b61416a6"}, - {file = "lxml-4.5.1-cp37-cp37m-win32.whl", hash = "sha256:2d1ddce96cf15f1254a68dba6935e6e0f1fe39247de631c115e84dd404a6f031"}, - {file = "lxml-4.5.1-cp37-cp37m-win_amd64.whl", hash = "sha256:22c6d34fdb0e65d5f782a4d1a1edb52e0a8365858dafb1c08cb1d16546cf0786"}, - {file = "lxml-4.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c47a8a5d00060122ca5908909478abce7bbf62d812e3fc35c6c802df8fb01fe7"}, - {file = "lxml-4.5.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:b77975465234ff49fdad871c08aa747aae06f5e5be62866595057c43f8d2f62c"}, - {file = "lxml-4.5.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:2b02c106709466a93ed424454ce4c970791c486d5fcdf52b0d822a7e29789626"}, - {file = "lxml-4.5.1-cp38-cp38-win32.whl", hash = "sha256:7eee37c1b9815e6505847aa5e68f192e8a1b730c5c7ead39ff317fde9ce29448"}, - {file = "lxml-4.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:d8d40e0121ca1606aa9e78c28a3a7d88a05c06b3ca61630242cded87d8ce55fa"}, - {file = "lxml-4.5.1.tar.gz", hash = "sha256:27ee0faf8077c7c1a589573b1450743011117f1aa1a91d5ae776bbc5ca6070f2"}, + {file = "lxml-4.5.2-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:74f48ec98430e06c1fa8949b49ebdd8d27ceb9df8d3d1c92e1fdc2773f003f20"}, + {file = "lxml-4.5.2-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e70d4e467e243455492f5de463b72151cc400710ac03a0678206a5f27e79ddef"}, + {file = "lxml-4.5.2-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:7ad7906e098ccd30d8f7068030a0b16668ab8aa5cda6fcd5146d8d20cbaa71b5"}, + {file = "lxml-4.5.2-cp27-cp27m-win32.whl", hash = "sha256:92282c83547a9add85ad658143c76a64a8d339028926d7dc1998ca029c88ea6a"}, + {file = "lxml-4.5.2-cp27-cp27m-win_amd64.whl", hash = "sha256:05a444b207901a68a6526948c7cc8f9fe6d6f24c70781488e32fd74ff5996e3f"}, + {file = "lxml-4.5.2-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:94150231f1e90c9595ccc80d7d2006c61f90a5995db82bccbca7944fd457f0f6"}, + {file = "lxml-4.5.2-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bea760a63ce9bba566c23f726d72b3c0250e2fa2569909e2d83cda1534c79443"}, + {file = "lxml-4.5.2-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:c3f511a3c58676147c277eff0224c061dd5a6a8e1373572ac817ac6324f1b1e0"}, + {file = "lxml-4.5.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:59daa84aef650b11bccd18f99f64bfe44b9f14a08a28259959d33676554065a1"}, + {file = "lxml-4.5.2-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:c9d317efde4bafbc1561509bfa8a23c5cab66c44d49ab5b63ff690f5159b2304"}, + {file = "lxml-4.5.2-cp35-cp35m-win32.whl", hash = "sha256:9dc9006dcc47e00a8a6a029eb035c8f696ad38e40a27d073a003d7d1443f5d88"}, + {file = "lxml-4.5.2-cp35-cp35m-win_amd64.whl", hash = "sha256:08fc93257dcfe9542c0a6883a25ba4971d78297f63d7a5a26ffa34861ca78730"}, + {file = "lxml-4.5.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:121b665b04083a1e85ff1f5243d4a93aa1aaba281bc12ea334d5a187278ceaf1"}, + {file = "lxml-4.5.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:5591c4164755778e29e69b86e425880f852464a21c7bb53c7ea453bbe2633bbe"}, + {file = "lxml-4.5.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:cc411ad324a4486b142c41d9b2b6a722c534096963688d879ea6fa8a35028258"}, + {file = "lxml-4.5.2-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:1fa21263c3aba2b76fd7c45713d4428dbcc7644d73dcf0650e9d344e433741b3"}, + {file = "lxml-4.5.2-cp36-cp36m-win32.whl", hash = "sha256:786aad2aa20de3dbff21aab86b2fb6a7be68064cbbc0219bde414d3a30aa47ae"}, + {file = "lxml-4.5.2-cp36-cp36m-win_amd64.whl", hash = "sha256:e1cacf4796b20865789083252186ce9dc6cc59eca0c2e79cca332bdff24ac481"}, + {file = "lxml-4.5.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:80a38b188d20c0524fe8959c8ce770a8fdf0e617c6912d23fc97c68301bb9aba"}, + {file = "lxml-4.5.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:ecc930ae559ea8a43377e8b60ca6f8d61ac532fc57efb915d899de4a67928efd"}, + {file = "lxml-4.5.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:a76979f728dd845655026ab991df25d26379a1a8fc1e9e68e25c7eda43004bed"}, + {file = "lxml-4.5.2-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cfd7c5dd3c35c19cec59c63df9571c67c6d6e5c92e0fe63517920e97f61106d1"}, + {file = "lxml-4.5.2-cp37-cp37m-win32.whl", hash = "sha256:5a9c8d11aa2c8f8b6043d845927a51eb9102eb558e3f936df494e96393f5fd3e"}, + {file = "lxml-4.5.2-cp37-cp37m-win_amd64.whl", hash = "sha256:4b4a111bcf4b9c948e020fd207f915c24a6de3f1adc7682a2d92660eb4e84f1a"}, + {file = "lxml-4.5.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5dd20538a60c4cc9a077d3b715bb42307239fcd25ef1ca7286775f95e9e9a46d"}, + {file = "lxml-4.5.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:2b30aa2bcff8e958cd85d907d5109820b01ac511eae5b460803430a7404e34d7"}, + {file = "lxml-4.5.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:aa8eba3db3d8761db161003e2d0586608092e217151d7458206e243be5a43843"}, + {file = "lxml-4.5.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:8f0ec6b9b3832e0bd1d57af41f9238ea7709bbd7271f639024f2fc9d3bb01293"}, + {file = "lxml-4.5.2-cp38-cp38-win32.whl", hash = "sha256:107781b213cf7201ec3806555657ccda67b1fccc4261fb889ef7fc56976db81f"}, + {file = "lxml-4.5.2-cp38-cp38-win_amd64.whl", hash = "sha256:f161af26f596131b63b236372e4ce40f3167c1b5b5d459b29d2514bd8c9dc9ee"}, + {file = "lxml-4.5.2.tar.gz", hash = "sha256:cdc13a1682b2a6241080745b1953719e7fe0850b40a5c71ca574f090a1391df6"}, ] markdown = [ {file = "Markdown-3.2.2-py3-none-any.whl", hash = "sha256:c467cd6233885534bf0fe96e62e3cf46cfc1605112356c4f9981512b8174de59"}, @@ -1701,20 +1775,28 @@ mistune = [ {file = "mistune-0.8.4.tar.gz", hash = "sha256:59a3429db53c50b5c6bcc8a07f8848cb00d7dc8bdb431a4ab41920d201d4756e"}, ] more-itertools = [ - {file = "more-itertools-8.4.0.tar.gz", hash = "sha256:68c70cc7167bdf5c7c9d8f6954a7837089c6a36bf565383919bb595efb8a17e5"}, - {file = "more_itertools-8.4.0-py3-none-any.whl", hash = "sha256:b78134b2063dd214000685165d81c154522c3ee0a1c0d4d113c80361c234c5a2"}, + {file = "more-itertools-8.5.0.tar.gz", hash = "sha256:6f83822ae94818eae2612063a5101a7311e68ae8002005b5e05f03fd74a86a20"}, + {file = "more_itertools-8.5.0-py3-none-any.whl", hash = "sha256:9b30f12df9393f0d28af9210ff8efe48d10c94f73e5daf886f10c4b0b0b4f03c"}, ] nb-black = [ {file = "nb_black-1.0.7.tar.gz", hash = "sha256:1ca52e3a46675f6a0a6d79ac73a1f8f951bef60f919eced56173e76ab1b6d62b"}, ] +nbclient = [ + {file = "nbclient-0.5.0-py3-none-any.whl", hash = "sha256:8a6e27ff581cee50895f44c41936ce02369674e85e2ad58643d8d4a6c36771b0"}, + {file = "nbclient-0.5.0.tar.gz", hash = "sha256:8ad52d27ba144fca1402db014857e53c5a864a2f407be66ca9d74c3a56d6591d"}, +] nbconvert = [ - {file = "nbconvert-5.6.1-py2.py3-none-any.whl", hash = "sha256:f0d6ec03875f96df45aa13e21fd9b8450c42d7e1830418cccc008c0df725fcee"}, - {file = "nbconvert-5.6.1.tar.gz", hash = "sha256:21fb48e700b43e82ba0e3142421a659d7739b65568cc832a13976a77be16b523"}, + {file = "nbconvert-6.0.2-py3-none-any.whl", hash = "sha256:e3994dbcb8029c91425d945797135573b9efbd52278908685c7ae81f84280a2e"}, + {file = "nbconvert-6.0.2.tar.gz", hash = "sha256:4cb5c66d04737a42076536fa64fa951e97cddbf4c517c418591314a3d14013dc"}, ] nbformat = [ {file = "nbformat-5.0.7-py3-none-any.whl", hash = "sha256:ea55c9b817855e2dfcd3f66d74857342612a60b1f09653440f4a5845e6e3523f"}, {file = "nbformat-5.0.7.tar.gz", hash = "sha256:54d4d6354835a936bad7e8182dcd003ca3dc0cedfee5a306090e04854343b340"}, ] +nest-asyncio = [ + {file = "nest_asyncio-1.4.0-py3-none-any.whl", hash = "sha256:ea51120725212ef02e5870dd77fc67ba7343fc945e3b9a7ff93384436e043b6a"}, + {file = "nest_asyncio-1.4.0.tar.gz", hash = "sha256:5773054bbc14579b000236f85bc01ecced7ffd045ec8ca4a9809371ec65a59c8"}, +] notebook = [ {file = "notebook-6.0.3-py3-none-any.whl", hash = "sha256:3edc616c684214292994a3af05eaea4cc043f6b4247d830f3a2f209fa7639a80"}, {file = "notebook-6.0.3.tar.gz", hash = "sha256:47a9092975c9e7965ada00b9a20f0cf637d001db60d241d479f53c0be117ad48"}, @@ -1747,8 +1829,8 @@ oauthlib = [ {file = "oauthlib-3.1.0.tar.gz", hash = "sha256:bee41cc35fcca6e988463cacc3bcb8a96224f470ca547e697b604cc697b2f889"}, ] opt-einsum = [ - {file = "opt_einsum-3.2.1-py3-none-any.whl", hash = "sha256:96f819d46da2f937eaf326336a114aaeccbcbdb9de460d42e8b5f480a69adca7"}, - {file = "opt_einsum-3.2.1.tar.gz", hash = "sha256:83b76a98d18ae6a5cc7a0d88955a7f74881f0e567a0f4c949d24c942753eb998"}, + {file = "opt_einsum-3.3.0-py3-none-any.whl", hash = "sha256:2455e59e3947d3c275477df7f5205b30635e266fe6dc300e3d9f9646bfcea147"}, + {file = "opt_einsum-3.3.0.tar.gz", hash = "sha256:59f6475f77bbc37dcf7cd748519c0ec60722e91e63ca114e68821c0c54a46549"}, ] packaging = [ {file = "packaging-20.4-py2.py3-none-any.whl", hash = "sha256:998416ba6962ae7fbd6596850b80e17859a5753ba17c32284f67bfff33784181"}, @@ -1776,8 +1858,8 @@ pandocfilters = [ {file = "pandocfilters-1.4.2.tar.gz", hash = "sha256:b3dd70e169bb5449e6bc6ff96aea89c5eea8c5f6ab5e207fc2f521a2cf4a0da9"}, ] parso = [ - {file = "parso-0.7.0-py2.py3-none-any.whl", hash = "sha256:158c140fc04112dc45bca311633ae5033c2c2a7b732fa33d0955bad8152a8dd0"}, - {file = "parso-0.7.0.tar.gz", hash = "sha256:908e9fae2144a076d72ae4e25539143d40b8e3eafbaeae03c1bfe226f4cdf12c"}, + {file = "parso-0.7.1-py2.py3-none-any.whl", hash = "sha256:97218d9159b2520ff45eb78028ba8b50d2bc61dcc062a9682666f2dc4bd331ea"}, + {file = "parso-0.7.1.tar.gz", hash = "sha256:caba44724b994a8a5e086460bb212abc5a8bc46951bf4a9a1210745953622eb9"}, ] pathspec = [ {file = "pathspec-0.8.0-py2.py3-none-any.whl", hash = "sha256:7d91249d21749788d07a2d0f94147accd8f845507400749ea19c1ec9054a12b0"}, @@ -1800,28 +1882,28 @@ prometheus-client = [ {file = "prometheus_client-0.8.0.tar.gz", hash = "sha256:c6e6b706833a6bd1fd51711299edee907857be10ece535126a158f911ee80915"}, ] prompt-toolkit = [ - {file = "prompt_toolkit-3.0.5-py3-none-any.whl", hash = "sha256:df7e9e63aea609b1da3a65641ceaf5bc7d05e0a04de5bd45d05dbeffbabf9e04"}, - {file = "prompt_toolkit-3.0.5.tar.gz", hash = "sha256:563d1a4140b63ff9dd587bda9557cffb2fe73650205ab6f4383092fb882e7dc8"}, + {file = "prompt_toolkit-3.0.7-py3-none-any.whl", hash = "sha256:83074ee28ad4ba6af190593d4d4c607ff525272a504eb159199b6dd9f950c950"}, + {file = "prompt_toolkit-3.0.7.tar.gz", hash = "sha256:822f4605f28f7d2ba6b0b09a31e25e140871e96364d1d377667b547bb3bf4489"}, ] protobuf = [ - {file = "protobuf-3.12.2-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:e1464a4a2cf12f58f662c8e6421772c07947266293fb701cb39cd9c1e183f63c"}, - {file = "protobuf-3.12.2-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:6f349adabf1c004aba53f7b4633459f8ca8a09654bf7e69b509c95a454755776"}, - {file = "protobuf-3.12.2-cp35-cp35m-macosx_10_9_intel.whl", hash = "sha256:be04fe14ceed7f8641e30f36077c1a654ff6f17d0c7a5283b699d057d150d82a"}, - {file = "protobuf-3.12.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f4b73736108a416c76c17a8a09bc73af3d91edaa26c682aaa460ef91a47168d3"}, - {file = "protobuf-3.12.2-cp35-cp35m-win32.whl", hash = "sha256:5524c7020eb1fb7319472cb75c4c3206ef18b34d6034d2ee420a60f99cddeb07"}, - {file = "protobuf-3.12.2-cp35-cp35m-win_amd64.whl", hash = "sha256:bff02030bab8b969f4de597543e55bd05e968567acb25c0a87495a31eb09e925"}, - {file = "protobuf-3.12.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:c9ca9f76805e5a637605f171f6c4772fc4a81eced4e2f708f79c75166a2c99ea"}, - {file = "protobuf-3.12.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:304e08440c4a41a0f3592d2a38934aad6919d692bb0edfb355548786728f9a5e"}, - {file = "protobuf-3.12.2-cp36-cp36m-win32.whl", hash = "sha256:b5a114ea9b7fc90c2cc4867a866512672a47f66b154c6d7ee7e48ddb68b68122"}, - {file = "protobuf-3.12.2-cp36-cp36m-win_amd64.whl", hash = "sha256:85b94d2653b0fdf6d879e39d51018bf5ccd86c81c04e18a98e9888694b98226f"}, - {file = "protobuf-3.12.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a7ab28a8f1f043c58d157bceb64f80e4d2f7f1b934bc7ff5e7f7a55a337ea8b0"}, - {file = "protobuf-3.12.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:eafe9fa19fcefef424ee089fb01ac7177ff3691af7cc2ae8791ae523eb6ca907"}, - {file = "protobuf-3.12.2-cp37-cp37m-win32.whl", hash = "sha256:612bc97e42b22af10ba25e4140963fbaa4c5181487d163f4eb55b0b15b3dfcd2"}, - {file = "protobuf-3.12.2-cp37-cp37m-win_amd64.whl", hash = "sha256:e72736dd822748b0721f41f9aaaf6a5b6d5cfc78f6c8690263aef8bba4457f0e"}, - {file = "protobuf-3.12.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:87535dc2d2ef007b9d44e309d2b8ea27a03d2fa09556a72364d706fcb7090828"}, - {file = "protobuf-3.12.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:50b5fee674878b14baea73b4568dc478c46a31dd50157a5b5d2f71138243b1a9"}, - {file = "protobuf-3.12.2-py2.py3-none-any.whl", hash = "sha256:a96f8fc625e9ff568838e556f6f6ae8eca8b4837cdfb3f90efcb7c00e342a2eb"}, - {file = "protobuf-3.12.2.tar.gz", hash = "sha256:49ef8ab4c27812a89a76fa894fe7a08f42f2147078392c0dee51d4a444ef6df5"}, + {file = "protobuf-3.13.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:9c2e63c1743cba12737169c447374fab3dfeb18111a460a8c1a000e35836b18c"}, + {file = "protobuf-3.13.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:1e834076dfef9e585815757a2c7e4560c7ccc5962b9d09f831214c693a91b463"}, + {file = "protobuf-3.13.0-cp35-cp35m-macosx_10_9_intel.whl", hash = "sha256:df3932e1834a64b46ebc262e951cd82c3cf0fa936a154f0a42231140d8237060"}, + {file = "protobuf-3.13.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:8c35bcbed1c0d29b127c886790e9d37e845ffc2725cc1db4bd06d70f4e8359f4"}, + {file = "protobuf-3.13.0-cp35-cp35m-win32.whl", hash = "sha256:339c3a003e3c797bc84499fa32e0aac83c768e67b3de4a5d7a5a9aa3b0da634c"}, + {file = "protobuf-3.13.0-cp35-cp35m-win_amd64.whl", hash = "sha256:361acd76f0ad38c6e38f14d08775514fbd241316cce08deb2ce914c7dfa1184a"}, + {file = "protobuf-3.13.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9edfdc679a3669988ec55a989ff62449f670dfa7018df6ad7f04e8dbacb10630"}, + {file = "protobuf-3.13.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5db9d3e12b6ede5e601b8d8684a7f9d90581882925c96acf8495957b4f1b204b"}, + {file = "protobuf-3.13.0-cp36-cp36m-win32.whl", hash = "sha256:c8abd7605185836f6f11f97b21200f8a864f9cb078a193fe3c9e235711d3ff1e"}, + {file = "protobuf-3.13.0-cp36-cp36m-win_amd64.whl", hash = "sha256:4d1174c9ed303070ad59553f435846a2f877598f59f9afc1b89757bdf846f2a7"}, + {file = "protobuf-3.13.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0bba42f439bf45c0f600c3c5993666fcb88e8441d011fad80a11df6f324eef33"}, + {file = "protobuf-3.13.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:c0c5ab9c4b1eac0a9b838f1e46038c3175a95b0f2d944385884af72876bd6bc7"}, + {file = "protobuf-3.13.0-cp37-cp37m-win32.whl", hash = "sha256:f68eb9d03c7d84bd01c790948320b768de8559761897763731294e3bc316decb"}, + {file = "protobuf-3.13.0-cp37-cp37m-win_amd64.whl", hash = "sha256:91c2d897da84c62816e2f473ece60ebfeab024a16c1751aaf31100127ccd93ec"}, + {file = "protobuf-3.13.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3dee442884a18c16d023e52e32dd34a8930a889e511af493f6dc7d4d9bf12e4f"}, + {file = "protobuf-3.13.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:e7662437ca1e0c51b93cadb988f9b353fa6b8013c0385d63a70c8a77d84da5f9"}, + {file = "protobuf-3.13.0-py2.py3-none-any.whl", hash = "sha256:d69697acac76d9f250ab745b46c725edf3e98ac24763990b24d58c16c642947a"}, + {file = "protobuf-3.13.0.tar.gz", hash = "sha256:6a82e0c8bb2bf58f606040cc5814e07715b2094caeba281e2e7d0b0e2e397db5"}, ] ptyprocess = [ {file = "ptyprocess-0.6.0-py2.py3-none-any.whl", hash = "sha256:d7cc528d76e76342423ca640335bd3633420dc1366f258cb31d05e865ef5ca1f"}, @@ -1862,15 +1944,15 @@ pyasn1-modules = [ {file = "pyasn1_modules-0.2.8-py3.7.egg", hash = "sha256:c29a5e5cc7a3f05926aff34e097e84f8589cd790ce0ed41b67aed6857b26aafd"}, ] pygments = [ - {file = "Pygments-2.6.1-py3-none-any.whl", hash = "sha256:ff7a40b4860b727ab48fad6360eb351cc1b33cbf9b15a0f689ca5353e9463324"}, - {file = "Pygments-2.6.1.tar.gz", hash = "sha256:647344a061c249a3b74e230c739f434d7ea4d8b1d5f3721bc0f3558049b38f44"}, + {file = "Pygments-2.7.0-py3-none-any.whl", hash = "sha256:2df50d16b45b977217e02cba6c8422aaddb859f3d0570a88e09b00eafae89c6e"}, + {file = "Pygments-2.7.0.tar.gz", hash = "sha256:2594e8fdb06fef91552f86f4fd3a244d148ab24b66042036e64f29a291515048"}, ] pyparsing = [ {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"}, ] pyrsistent = [ - {file = "pyrsistent-0.16.0.tar.gz", hash = "sha256:28669905fe725965daa16184933676547c5bb40a5153055a8dee2a4bd7933ad3"}, + {file = "pyrsistent-0.17.3.tar.gz", hash = "sha256:2e636185d9eb976a18a8a8e96efce62f2905fea90041958d8cc2a189756ebf3e"}, ] pytest = [ {file = "pytest-5.4.3-py3-none-any.whl", hash = "sha256:5c0db86b698e8f170ba4582a492248919255fcd4c79b1ee64ace34301fb589a1"}, @@ -1924,57 +2006,57 @@ pyyaml = [ {file = "PyYAML-5.3.1.tar.gz", hash = "sha256:b8eac752c5e14d3eca0e6dd9199cd627518cb5ec06add0de9d32baeee6fe645d"}, ] pyzmq = [ - {file = "pyzmq-19.0.1-cp27-cp27m-macosx_10_9_intel.whl", hash = "sha256:58688a2dfa044fad608a8e70ba8d019d0b872ec2acd75b7b5e37da8905605891"}, - {file = "pyzmq-19.0.1-cp27-cp27m-win32.whl", hash = "sha256:87c78f6936e2654397ca2979c1d323ee4a889eef536cc77a938c6b5be33351a7"}, - {file = "pyzmq-19.0.1-cp27-cp27m-win_amd64.whl", hash = "sha256:97b6255ae77328d0e80593681826a0479cb7bac0ba8251b4dd882f5145a2293a"}, - {file = "pyzmq-19.0.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:15b4cb21118f4589c4db8be4ac12b21c8b4d0d42b3ee435d47f686c32fe2e91f"}, - {file = "pyzmq-19.0.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:931339ac2000d12fe212e64f98ce291e81a7ec6c73b125f17cf08415b753c087"}, - {file = "pyzmq-19.0.1-cp35-cp35m-macosx_10_9_intel.whl", hash = "sha256:2a88b8fabd9cc35bd59194a7723f3122166811ece8b74018147a4ed8489e6421"}, - {file = "pyzmq-19.0.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:bafd651b557dd81d89bd5f9c678872f3e7b7255c1c751b78d520df2caac80230"}, - {file = "pyzmq-19.0.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:8952f6ba6ae598e792703f3134af5a01af8f5c7cf07e9a148f05a12b02412cea"}, - {file = "pyzmq-19.0.1-cp35-cp35m-win32.whl", hash = "sha256:54aa24fd60c4262286fc64ca632f9e747c7cc3a3a1144827490e1dc9b8a3a960"}, - {file = "pyzmq-19.0.1-cp35-cp35m-win_amd64.whl", hash = "sha256:dcbc3f30c11c60d709c30a213dc56e88ac016fe76ac6768e64717bd976072566"}, - {file = "pyzmq-19.0.1-cp36-cp36m-macosx_10_9_intel.whl", hash = "sha256:6ca519309703e95d55965735a667809bbb65f52beda2fdb6312385d3e7a6d234"}, - {file = "pyzmq-19.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:4ee0bfd82077a3ff11c985369529b12853a4064320523f8e5079b630f9551448"}, - {file = "pyzmq-19.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:ba6f24431b569aec674ede49cad197cad59571c12deed6ad8e3c596da8288217"}, - {file = "pyzmq-19.0.1-cp36-cp36m-win32.whl", hash = "sha256:956775444d01331c7eb412c5fb9bb62130dfaac77e09f32764ea1865234e2ca9"}, - {file = "pyzmq-19.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b08780e3a55215873b3b8e6e7ca8987f14c902a24b6ac081b344fd430d6ca7cd"}, - {file = "pyzmq-19.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:21f7d91f3536f480cb2c10d0756bfa717927090b7fb863e6323f766e5461ee1c"}, - {file = "pyzmq-19.0.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:bfff5ffff051f5aa47ba3b379d87bd051c3196b0c8a603e8b7ed68a6b4f217ec"}, - {file = "pyzmq-19.0.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:07fb8fe6826a229dada876956590135871de60dbc7de5a18c3bcce2ed1f03c98"}, - {file = "pyzmq-19.0.1-cp37-cp37m-win32.whl", hash = "sha256:342fb8a1dddc569bc361387782e8088071593e7eaf3e3ecf7d6bd4976edff112"}, - {file = "pyzmq-19.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:faee2604f279d31312bc455f3d024f160b6168b9c1dde22bf62d8c88a4deca8e"}, - {file = "pyzmq-19.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5b9d21fc56c8aacd2e6d14738021a9d64f3f69b30578a99325a728e38a349f85"}, - {file = "pyzmq-19.0.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:af0c02cf49f4f9eedf38edb4f3b6bb621d83026e7e5d76eb5526cc5333782fd6"}, - {file = "pyzmq-19.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:5f1f2eb22aab606f808163eb1d537ac9a0ba4283fbeb7a62eb48d9103cf015c2"}, - {file = "pyzmq-19.0.1-cp38-cp38-win32.whl", hash = "sha256:f9d7e742fb0196992477415bb34366c12e9bb9a0699b8b3f221ff93b213d7bec"}, - {file = "pyzmq-19.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:5b99c2ae8089ef50223c28bac57510c163bfdff158c9e90764f812b94e69a0e6"}, - {file = "pyzmq-19.0.1-pp27-pypy_73-macosx_10_9_x86_64.whl", hash = "sha256:cf5d689ba9513b9753959164cf500079383bc18859f58bf8ce06d8d4bef2b054"}, - {file = "pyzmq-19.0.1-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:aaa8b40b676576fd7806839a5de8e6d5d1b74981e6376d862af6c117af2a3c10"}, - {file = "pyzmq-19.0.1.tar.gz", hash = "sha256:13a5638ab24d628a6ade8f794195e1a1acd573496c3b85af2f1183603b7bf5e0"}, + {file = "pyzmq-19.0.2-cp27-cp27m-macosx_10_9_intel.whl", hash = "sha256:59f1e54627483dcf61c663941d94c4af9bf4163aec334171686cdaee67974fe5"}, + {file = "pyzmq-19.0.2-cp27-cp27m-win32.whl", hash = "sha256:c36ffe1e5aa35a1af6a96640d723d0d211c5f48841735c2aa8d034204e87eb87"}, + {file = "pyzmq-19.0.2-cp27-cp27m-win_amd64.whl", hash = "sha256:0a422fc290d03958899743db091f8154958410fc76ce7ee0ceb66150f72c2c97"}, + {file = "pyzmq-19.0.2-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:c20dd60b9428f532bc59f2ef6d3b1029a28fc790d408af82f871a7db03e722ff"}, + {file = "pyzmq-19.0.2-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:d46fb17f5693244de83e434648b3dbb4f4b0fec88415d6cbab1c1452b6f2ae17"}, + {file = "pyzmq-19.0.2-cp35-cp35m-macosx_10_9_intel.whl", hash = "sha256:f1a25a61495b6f7bb986accc5b597a3541d9bd3ef0016f50be16dbb32025b302"}, + {file = "pyzmq-19.0.2-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:ab0d01148d13854de716786ca73701012e07dff4dfbbd68c4e06d8888743526e"}, + {file = "pyzmq-19.0.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:720d2b6083498a9281eaee3f2927486e9fe02cd16d13a844f2e95217f243efea"}, + {file = "pyzmq-19.0.2-cp35-cp35m-win32.whl", hash = "sha256:29d51279060d0a70f551663bc592418bcad7f4be4eea7b324f6dd81de05cb4c1"}, + {file = "pyzmq-19.0.2-cp35-cp35m-win_amd64.whl", hash = "sha256:5120c64646e75f6db20cc16b9a94203926ead5d633de9feba4f137004241221d"}, + {file = "pyzmq-19.0.2-cp36-cp36m-macosx_10_9_intel.whl", hash = "sha256:8a6ada5a3f719bf46a04ba38595073df8d6b067316c011180102ba2a1925f5b5"}, + {file = "pyzmq-19.0.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:fa411b1d8f371d3a49d31b0789eb6da2537dadbb2aef74a43aa99a78195c3f76"}, + {file = "pyzmq-19.0.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:00dca814469436455399660247d74045172955459c0bd49b54a540ce4d652185"}, + {file = "pyzmq-19.0.2-cp36-cp36m-win32.whl", hash = "sha256:046b92e860914e39612e84fa760fc3f16054d268c11e0e25dcb011fb1bc6a075"}, + {file = "pyzmq-19.0.2-cp36-cp36m-win_amd64.whl", hash = "sha256:99cc0e339a731c6a34109e5c4072aaa06d8e32c0b93dc2c2d90345dd45fa196c"}, + {file = "pyzmq-19.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e36f12f503511d72d9bdfae11cadbadca22ff632ff67c1b5459f69756a029c19"}, + {file = "pyzmq-19.0.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:c40fbb2b9933369e994b837ee72193d6a4c35dfb9a7c573257ef7ff28961272c"}, + {file = "pyzmq-19.0.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5d9fc809aa8d636e757e4ced2302569d6e60e9b9c26114a83f0d9d6519c40493"}, + {file = "pyzmq-19.0.2-cp37-cp37m-win32.whl", hash = "sha256:3fa6debf4bf9412e59353defad1f8035a1e68b66095a94ead8f7a61ae90b2675"}, + {file = "pyzmq-19.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:73483a2caaa0264ac717af33d6fb3f143d8379e60a422730ee8d010526ce1913"}, + {file = "pyzmq-19.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:36ab114021c0cab1a423fe6689355e8f813979f2c750968833b318c1fa10a0fd"}, + {file = "pyzmq-19.0.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:8b66b94fe6243d2d1d89bca336b2424399aac57932858b9a30309803ffc28112"}, + {file = "pyzmq-19.0.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:654d3e06a4edc566b416c10293064732516cf8871a4522e0a2ba00cc2a2e600c"}, + {file = "pyzmq-19.0.2-cp38-cp38-win32.whl", hash = "sha256:276ad604bffd70992a386a84bea34883e696a6b22e7378053e5d3227321d9702"}, + {file = "pyzmq-19.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:09d24a80ccb8cbda1af6ed8eb26b005b6743e58e9290566d2a6841f4e31fa8e0"}, + {file = "pyzmq-19.0.2-pp27-pypy_73-macosx_10_9_x86_64.whl", hash = "sha256:c1a31cd42905b405530e92bdb70a8a56f048c8a371728b8acf9d746ecd4482c0"}, + {file = "pyzmq-19.0.2-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a7e7f930039ee0c4c26e4dfee015f20bd6919cd8b97c9cd7afbde2923a5167b6"}, + {file = "pyzmq-19.0.2.tar.gz", hash = "sha256:296540a065c8c21b26d63e3cea2d1d57902373b16e4256afe46422691903a438"}, ] regex = [ - {file = "regex-2020.6.8-cp27-cp27m-win32.whl", hash = "sha256:fbff901c54c22425a5b809b914a3bfaf4b9570eee0e5ce8186ac71eb2025191c"}, - {file = "regex-2020.6.8-cp27-cp27m-win_amd64.whl", hash = "sha256:112e34adf95e45158c597feea65d06a8124898bdeac975c9087fe71b572bd938"}, - {file = "regex-2020.6.8-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:92d8a043a4241a710c1cf7593f5577fbb832cf6c3a00ff3fc1ff2052aff5dd89"}, - {file = "regex-2020.6.8-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:bae83f2a56ab30d5353b47f9b2a33e4aac4de9401fb582b55c42b132a8ac3868"}, - {file = "regex-2020.6.8-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:b2ba0f78b3ef375114856cbdaa30559914d081c416b431f2437f83ce4f8b7f2f"}, - {file = "regex-2020.6.8-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:95fa7726d073c87141f7bbfb04c284901f8328e2d430eeb71b8ffdd5742a5ded"}, - {file = "regex-2020.6.8-cp36-cp36m-win32.whl", hash = "sha256:e3cdc9423808f7e1bb9c2e0bdb1c9dc37b0607b30d646ff6faf0d4e41ee8fee3"}, - {file = "regex-2020.6.8-cp36-cp36m-win_amd64.whl", hash = "sha256:c78e66a922de1c95a208e4ec02e2e5cf0bb83a36ceececc10a72841e53fbf2bd"}, - {file = "regex-2020.6.8-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:08997a37b221a3e27d68ffb601e45abfb0093d39ee770e4257bd2f5115e8cb0a"}, - {file = "regex-2020.6.8-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:2f6f211633ee8d3f7706953e9d3edc7ce63a1d6aad0be5dcee1ece127eea13ae"}, - {file = "regex-2020.6.8-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:55b4c25cbb3b29f8d5e63aeed27b49fa0f8476b0d4e1b3171d85db891938cc3a"}, - {file = "regex-2020.6.8-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:89cda1a5d3e33ec9e231ece7307afc101b5217523d55ef4dc7fb2abd6de71ba3"}, - {file = "regex-2020.6.8-cp37-cp37m-win32.whl", hash = "sha256:690f858d9a94d903cf5cada62ce069b5d93b313d7d05456dbcd99420856562d9"}, - {file = "regex-2020.6.8-cp37-cp37m-win_amd64.whl", hash = "sha256:1700419d8a18c26ff396b3b06ace315b5f2a6e780dad387e4c48717a12a22c29"}, - {file = "regex-2020.6.8-cp38-cp38-manylinux1_i686.whl", hash = "sha256:654cb773b2792e50151f0e22be0f2b6e1c3a04c5328ff1d9d59c0398d37ef610"}, - {file = "regex-2020.6.8-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:52e1b4bef02f4040b2fd547357a170fc1146e60ab310cdbdd098db86e929b387"}, - {file = "regex-2020.6.8-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:cf59bbf282b627130f5ba68b7fa3abdb96372b24b66bdf72a4920e8153fc7910"}, - {file = "regex-2020.6.8-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:5aaa5928b039ae440d775acea11d01e42ff26e1561c0ffcd3d805750973c6baf"}, - {file = "regex-2020.6.8-cp38-cp38-win32.whl", hash = "sha256:97712e0d0af05febd8ab63d2ef0ab2d0cd9deddf4476f7aa153f76feef4b2754"}, - {file = "regex-2020.6.8-cp38-cp38-win_amd64.whl", hash = "sha256:6ad8663c17db4c5ef438141f99e291c4d4edfeaacc0ce28b5bba2b0bf273d9b5"}, - {file = "regex-2020.6.8.tar.gz", hash = "sha256:e9b64e609d37438f7d6e68c2546d2cb8062f3adb27e6336bc129b51be20773ac"}, + {file = "regex-2020.7.14-cp27-cp27m-win32.whl", hash = "sha256:e46d13f38cfcbb79bfdb2964b0fe12561fe633caf964a77a5f8d4e45fe5d2ef7"}, + {file = "regex-2020.7.14-cp27-cp27m-win_amd64.whl", hash = "sha256:6961548bba529cac7c07af2fd4d527c5b91bb8fe18995fed6044ac22b3d14644"}, + {file = "regex-2020.7.14-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:c50a724d136ec10d920661f1442e4a8b010a4fe5aebd65e0c2241ea41dbe93dc"}, + {file = "regex-2020.7.14-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:8a51f2c6d1f884e98846a0a9021ff6861bdb98457879f412fdc2b42d14494067"}, + {file = "regex-2020.7.14-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:9c568495e35599625f7b999774e29e8d6b01a6fb684d77dee1f56d41b11b40cd"}, + {file = "regex-2020.7.14-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:51178c738d559a2d1071ce0b0f56e57eb315bcf8f7d4cf127674b533e3101f88"}, + {file = "regex-2020.7.14-cp36-cp36m-win32.whl", hash = "sha256:9eddaafb3c48e0900690c1727fba226c4804b8e6127ea409689c3bb492d06de4"}, + {file = "regex-2020.7.14-cp36-cp36m-win_amd64.whl", hash = "sha256:14a53646369157baa0499513f96091eb70382eb50b2c82393d17d7ec81b7b85f"}, + {file = "regex-2020.7.14-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:1269fef3167bb52631ad4fa7dd27bf635d5a0790b8e6222065d42e91bede4162"}, + {file = "regex-2020.7.14-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:d0a5095d52b90ff38592bbdc2644f17c6d495762edf47d876049cfd2968fbccf"}, + {file = "regex-2020.7.14-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:4c037fd14c5f4e308b8370b447b469ca10e69427966527edcab07f52d88388f7"}, + {file = "regex-2020.7.14-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:bc3d98f621898b4a9bc7fecc00513eec8f40b5b83913d74ccb445f037d58cd89"}, + {file = "regex-2020.7.14-cp37-cp37m-win32.whl", hash = "sha256:46bac5ca10fb748d6c55843a931855e2727a7a22584f302dd9bb1506e69f83f6"}, + {file = "regex-2020.7.14-cp37-cp37m-win_amd64.whl", hash = "sha256:0dc64ee3f33cd7899f79a8d788abfbec168410be356ed9bd30bbd3f0a23a7204"}, + {file = "regex-2020.7.14-cp38-cp38-manylinux1_i686.whl", hash = "sha256:5ea81ea3dbd6767873c611687141ec7b06ed8bab43f68fad5b7be184a920dc99"}, + {file = "regex-2020.7.14-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:bbb332d45b32df41200380fff14712cb6093b61bd142272a10b16778c418e98e"}, + {file = "regex-2020.7.14-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:c11d6033115dc4887c456565303f540c44197f4fc1a2bfb192224a301534888e"}, + {file = "regex-2020.7.14-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:75aaa27aa521a182824d89e5ab0a1d16ca207318a6b65042b046053cfc8ed07a"}, + {file = "regex-2020.7.14-cp38-cp38-win32.whl", hash = "sha256:d6cff2276e502b86a25fd10c2a96973fdb45c7a977dca2138d661417f3728341"}, + {file = "regex-2020.7.14-cp38-cp38-win_amd64.whl", hash = "sha256:7a2dd66d2d4df34fa82c9dc85657c5e019b87932019947faece7983f2089a840"}, + {file = "regex-2020.7.14.tar.gz", hash = "sha256:3a3af27a8d23143c49a3420efe5b3f8cf1a48c6fc8bc6856b03f638abc1833bb"}, ] requests = [ {file = "requests-2.23.0-py2.7.egg", hash = "sha256:5d2d0ffbb515f39417009a46c14256291061ac01ba8f875b90cad137de83beb4"}, @@ -2060,18 +2142,18 @@ tensorflow = [ {file = "tensorflow-2.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:784ab8217e4b0eb4d121c28430c6cdc2ce56c02634a9720d84fb30598b338b8c"}, ] tensorflow-addons = [ - {file = "tensorflow_addons-0.10.0-cp35-cp35m-macosx_10_13_x86_64.whl", hash = "sha256:8dae39a84dcd5eeb0889ebaed86158bd2904c7dde9d5873598712fa12993095c"}, - {file = "tensorflow_addons-0.10.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:8a607414f54248d6bfbfdd2afdc8d1ac2619d5caa37013c0302775b170024524"}, - {file = "tensorflow_addons-0.10.0-cp35-cp35m-win_amd64.whl", hash = "sha256:0353c10ab3dd332d3c4f9474b0102bc9f277fc0748d9c7a249a77dca8680b881"}, - {file = "tensorflow_addons-0.10.0-cp36-cp36m-macosx_10_13_x86_64.whl", hash = "sha256:91a3fd625c4550e08c952ca03cc0181362a66a916f8f55631c07a10e8c1d5076"}, - {file = "tensorflow_addons-0.10.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:48e58343daa94f62b31bf5f418b5f1f3f7123c7b373ddc085e1574ea1299263e"}, - {file = "tensorflow_addons-0.10.0-cp36-cp36m-win_amd64.whl", hash = "sha256:83c452a0ab8a91695837a9380218eca7de0cda0e700ca3c48b5c39b16841f61b"}, - {file = "tensorflow_addons-0.10.0-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:c1379b7eacd2ab254b3e5c5041d6e10caa2e373b86451de800c7dab77595e8b7"}, - {file = "tensorflow_addons-0.10.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:c070d28a45ca09d323f2052d83bfab97f9186b6e59191016a8dd5f2547d486a3"}, - {file = "tensorflow_addons-0.10.0-cp37-cp37m-win_amd64.whl", hash = "sha256:16a4184f42399843ffcad23ca96b9d256a3e0a5f2d3e76c7ceecff5bad6e1c1c"}, - {file = "tensorflow_addons-0.10.0-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:e185716992fe0d2af6d5826042834b85feda4e4887ad1e29fddf5c9640c38da0"}, - {file = "tensorflow_addons-0.10.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:08034ad2c177038990afc6aef9e7a90546f2872f3a39c4f966d2561346a749ab"}, - {file = "tensorflow_addons-0.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:d5df84bcd4fbd7006cb2602c96b4a736a46a8667b4179e82a843a159d5802eab"}, + {file = "tensorflow_addons-0.11.2-cp35-cp35m-macosx_10_13_x86_64.whl", hash = "sha256:c3dcf5fd56aeacf13fd41b198eb6c11567b9cf86f516673b9766a1f97061bde2"}, + {file = "tensorflow_addons-0.11.2-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:adcfcddc62f879880f0e164344612198ea3b6de0f54978b9379cad5c350af5ff"}, + {file = "tensorflow_addons-0.11.2-cp35-cp35m-win_amd64.whl", hash = "sha256:16b3fc4258a0251401bb0ced75742c6c02d7c5dee0531df976499da8208b5bb4"}, + {file = "tensorflow_addons-0.11.2-cp36-cp36m-macosx_10_13_x86_64.whl", hash = "sha256:677bbe0714eb8286667d7ecf3a41e53234de72d93e67d23f63b6e55345da91b6"}, + {file = "tensorflow_addons-0.11.2-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:cfbd34c93327de78ef0dee14956fed19bac9ef039670869000b0a4405f539c4e"}, + {file = "tensorflow_addons-0.11.2-cp36-cp36m-win_amd64.whl", hash = "sha256:35ae042544b6f3334c2d05f111db7bc9692ac2a001078c20f4414d270c481832"}, + {file = "tensorflow_addons-0.11.2-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:22177e036e17d057afeeea0327f045d2aeb84539db31c4d81dbb5e7942692ce5"}, + {file = "tensorflow_addons-0.11.2-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:76d7a1b99ddb69c3990581147fe751c9767f3b2555836f170c4a580525decdf9"}, + {file = "tensorflow_addons-0.11.2-cp37-cp37m-win_amd64.whl", hash = "sha256:8663048652b8b5f7fb09c58b1c166c001fdf6e704e4a132307daef08f1b7beab"}, + {file = "tensorflow_addons-0.11.2-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:e6b9acec0a8353b52854d7c7e422a1e96459c58c3307ee4c7ba7bf3afb035fb6"}, + {file = "tensorflow_addons-0.11.2-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:e36dd53520989dbd2c6850ea92a23739bd90fb481d7076777d8d521dce47fcc8"}, + {file = "tensorflow_addons-0.11.2-cp38-cp38-win_amd64.whl", hash = "sha256:551b0097f28075c31dfebc3d8e717bc23bd8521ba03f2d69e2141c2bd687cd29"}, ] tensorflow-estimator = [ {file = "tensorflow_estimator-2.2.0-py2.py3-none-any.whl", hash = "sha256:d09dacdd127f2579cea8d5af21f4a918036b8ae246adc82f26b61f91cc247dc2"}, @@ -2154,8 +2236,8 @@ werkzeug = [ {file = "Werkzeug-1.0.1.tar.gz", hash = "sha256:6c80b1e5ad3665290ea39320b91e1be1e0d5f60652b964a3070216de83d2e47c"}, ] wheel = [ - {file = "wheel-0.34.2-py2.py3-none-any.whl", hash = "sha256:df277cb51e61359aba502208d680f90c0493adec6f0e848af94948778aed386e"}, - {file = "wheel-0.34.2.tar.gz", hash = "sha256:8788e9155fe14f54164c1b9eb0a319d98ef02c160725587ad60f14ddc57b6f96"}, + {file = "wheel-0.35.1-py2.py3-none-any.whl", hash = "sha256:497add53525d16c173c2c1c733b8f655510e909ea78cc0e29d374243544b77a2"}, + {file = "wheel-0.35.1.tar.gz", hash = "sha256:99a22d87add3f634ff917310a3d87e499f19e663413a52eb9232c447aa646c9f"}, ] widgetsnbextension = [ {file = "widgetsnbextension-3.5.1-py2.py3-none-any.whl", hash = "sha256:bd314f8ceb488571a5ffea6cc5b9fc6cba0adaf88a9d2386b93a489751938bcd"}, diff --git a/thc-net/prepare-tf-build.sh b/thc-net/prepare-tf-build.sh deleted file mode 100755 index 0a62c16..0000000 --- a/thc-net/prepare-tf-build.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/bash -set -e - -TENSORFLOW_VERSION="v2.1.0" -# This is already done in docker image -# # Install Go (for TF build) -# RUN curl https://dl.google.com/go/go1.13.10.linux-amd64.tar.gz -o go.tar.gz \ -# && tar -xvf go.tar.gz \ -# && rm -rf go.tar.gz \ -# && mv go /usr/local - -# ENV GOROOT /usr/local/go -# ENV PATH $GOPATH/bin:$GOROOT/bin:$PATH - -# # Install Bazelisk as Bazel -# RUN go get github.com/bazelbuild/bazelisk && ln -s /root/go/bin/bazelisk /usr/local/bin/bazel - -poetry run pip install six numpy wheel setuptools mock -poetry run pip install keras_applications keras_preprocessing --no-deps - -git clone https://github.com/tensorflow/tensorflow.git -b ${TENSORFLOW_VERSION} --depth 1 -cd tensorflow/ - -# Run the configure -# TODO: change CC_OPT_FLAGS to precise build, instead of native -TF_ENABLE_XLA=true \ -TF_NEED_CUDA=true \ -TF_NEED_TENSORRT=true \ -TF_NEED_OPENCL_SYCL=false \ -TF_NEED_ROCM=false \ -TF_SET_ANDROID_WORKSPACE=false \ -TF_CUDA_COMPUTE_CAPABILITIES=6.1 \ -TF_CUDA_CLANG=false \ -CC_OPT_FLAGS="-march=native -Wno-sign-compare" \ -PYTHON_BIN_PATH=/work/.cache/poetry/thc-net-KQLMmzPP-py3.7/bin/python \ -USE_DEFAULT_PYTHON_LIB_PATH=1 \ -GCC_HOST_COMPILER_PATH=/usr/bin/gcc \ -./configure diff --git a/thc-net/pyproject.toml b/thc-net/pyproject.toml index 905073b..eb98b9f 100755 --- a/thc-net/pyproject.toml +++ b/thc-net/pyproject.toml @@ -7,7 +7,7 @@ authors = ["Hartorn "] [tool.poetry.dependencies] python = ">=3.6.1" tensorflow = "2.2.0" -tensorflow-addons = "0.10.0" +tensorflow-addons = "0.11.2" scikit-learn = "0.23.1" [tool.poetry.dev-dependencies] diff --git a/train-from-file-generic-clean-pixel-custom-model.ipynb b/train-from-file-generic-clean-pixel-custom-model.ipynb index 43ea8ee..292be0b 100644 --- a/train-from-file-generic-clean-pixel-custom-model.ipynb +++ b/train-from-file-generic-clean-pixel-custom-model.ipynb @@ -5,8 +5,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-05-12T13:17:30.598027Z", - "start_time": "2020-05-12T13:17:28.376000Z" + "end_time": "2020-09-15T07:10:05.274350Z", + "start_time": "2020-09-15T07:10:05.162843Z" } }, "outputs": [], @@ -26,8 +26,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-05-12T13:17:30.626868Z", - "start_time": "2020-05-12T13:17:30.600534Z" + "end_time": "2020-09-15T07:10:05.276296Z", + "start_time": "2020-09-15T07:10:05.164Z" } }, "outputs": [], @@ -124,8 +124,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-05-12T13:17:30.910991Z", - "start_time": "2020-05-12T13:17:30.629569Z" + "end_time": "2020-09-15T07:10:05.276897Z", + "start_time": "2020-09-15T07:10:05.167Z" } }, "outputs": [], @@ -152,8 +152,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-05-12T13:17:30.933954Z", - "start_time": "2020-05-12T13:17:30.914869Z" + "end_time": "2020-09-15T07:10:05.277478Z", + "start_time": "2020-09-15T07:10:05.168Z" } }, "outputs": [], @@ -174,8 +174,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-05-12T13:17:31.587603Z", - "start_time": "2020-05-12T13:17:30.935788Z" + "end_time": "2020-09-15T07:10:05.278074Z", + "start_time": "2020-09-15T07:10:05.170Z" } }, "outputs": [], @@ -200,8 +200,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-05-12T13:17:31.621639Z", - "start_time": "2020-05-12T13:17:31.592061Z" + "end_time": "2020-09-15T07:10:05.278604Z", + "start_time": "2020-09-15T07:10:05.173Z" } }, "outputs": [], @@ -222,8 +222,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-05-12T13:17:31.768328Z", - "start_time": "2020-05-12T13:17:31.623411Z" + "end_time": "2020-09-15T07:10:05.279095Z", + "start_time": "2020-09-15T07:10:05.174Z" } }, "outputs": [], @@ -251,8 +251,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-05-12T13:17:31.781255Z", - "start_time": "2020-05-12T13:17:31.771499Z" + "end_time": "2020-09-15T07:10:05.279558Z", + "start_time": "2020-09-15T07:10:05.176Z" } }, "outputs": [], @@ -266,8 +266,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-05-12T13:17:31.965766Z", - "start_time": "2020-05-12T13:17:31.783370Z" + "end_time": "2020-09-15T07:10:05.280008Z", + "start_time": "2020-09-15T07:10:05.177Z" } }, "outputs": [], @@ -280,8 +280,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-05-12T13:17:31.995575Z", - "start_time": "2020-05-12T13:17:31.967357Z" + "end_time": "2020-09-15T07:10:05.280668Z", + "start_time": "2020-09-15T07:10:05.178Z" } }, "outputs": [], @@ -300,8 +300,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-05-12T13:17:32.046739Z", - "start_time": "2020-05-12T13:17:31.997186Z" + "end_time": "2020-09-15T07:10:05.281133Z", + "start_time": "2020-09-15T07:10:05.181Z" } }, "outputs": [], @@ -314,8 +314,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-05-12T13:18:46.527566Z", - "start_time": "2020-05-12T13:17:32.048614Z" + "end_time": "2020-09-15T07:10:05.281647Z", + "start_time": "2020-09-15T07:10:05.182Z" } }, "outputs": [], @@ -331,8 +331,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-05-12T13:18:46.536510Z", - "start_time": "2020-05-12T13:18:46.529481Z" + "end_time": "2020-09-15T07:10:05.282116Z", + "start_time": "2020-09-15T07:10:05.184Z" } }, "outputs": [], @@ -345,8 +345,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-05-12T13:18:46.548664Z", - "start_time": "2020-05-12T13:18:46.539143Z" + "end_time": "2020-09-15T07:10:05.282631Z", + "start_time": "2020-09-15T07:10:05.185Z" } }, "outputs": [], @@ -359,8 +359,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-05-12T13:18:46.561857Z", - "start_time": "2020-05-12T13:18:46.550249Z" + "end_time": "2020-09-15T07:10:05.283097Z", + "start_time": "2020-09-15T07:10:05.187Z" } }, "outputs": [], @@ -376,8 +376,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-05-12T13:18:46.573736Z", - "start_time": "2020-05-12T13:18:46.563538Z" + "end_time": "2020-09-15T07:10:05.283541Z", + "start_time": "2020-09-15T07:10:05.187Z" } }, "outputs": [], @@ -391,8 +391,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-05-12T13:18:46.591429Z", - "start_time": "2020-05-12T13:18:46.575521Z" + "end_time": "2020-09-15T07:10:05.284002Z", + "start_time": "2020-09-15T07:10:05.188Z" } }, "outputs": [], @@ -406,8 +406,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-05-12T13:18:46.605640Z", - "start_time": "2020-05-12T13:18:46.595020Z" + "end_time": "2020-09-15T07:10:05.284471Z", + "start_time": "2020-09-15T07:10:05.190Z" } }, "outputs": [], @@ -420,8 +420,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-05-12T13:18:46.615125Z", - "start_time": "2020-05-12T13:18:46.607559Z" + "end_time": "2020-09-15T07:10:05.284994Z", + "start_time": "2020-09-15T07:10:05.191Z" } }, "outputs": [], @@ -434,8 +434,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-05-12T13:18:46.630192Z", - "start_time": "2020-05-12T13:18:46.617249Z" + "end_time": "2020-09-15T07:10:05.285508Z", + "start_time": "2020-09-15T07:10:05.191Z" } }, "outputs": [], @@ -451,8 +451,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-05-12T13:18:46.944703Z", - "start_time": "2020-05-12T13:18:46.632029Z" + "end_time": "2020-09-15T07:10:05.285970Z", + "start_time": "2020-09-15T07:10:05.193Z" } }, "outputs": [], @@ -481,8 +481,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-05-12T13:18:47.005582Z", - "start_time": "2020-05-12T13:18:46.947084Z" + "end_time": "2020-09-15T07:10:05.286434Z", + "start_time": "2020-09-15T07:10:05.194Z" } }, "outputs": [], @@ -505,8 +505,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-05-12T13:18:47.027026Z", - "start_time": "2020-05-12T13:18:47.014142Z" + "end_time": "2020-09-15T07:10:05.286910Z", + "start_time": "2020-09-15T07:10:05.195Z" } }, "outputs": [], @@ -523,8 +523,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-05-12T13:18:47.757917Z", - "start_time": "2020-05-12T13:18:47.029162Z" + "end_time": "2020-09-15T07:10:05.287514Z", + "start_time": "2020-09-15T07:10:05.195Z" } }, "outputs": [], @@ -540,8 +540,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-05-12T13:36:12.806336Z", - "start_time": "2020-05-12T13:36:12.772007Z" + "end_time": "2020-09-15T07:10:05.288121Z", + "start_time": "2020-09-15T07:10:05.197Z" } }, "outputs": [], @@ -574,8 +574,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-05-12T13:57:42.711518Z", - "start_time": "2020-05-12T13:57:42.513949Z" + "end_time": "2020-09-15T07:10:05.288695Z", + "start_time": "2020-09-15T07:10:05.198Z" } }, "outputs": [], @@ -737,8 +737,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-05-12T13:57:42.764912Z", - "start_time": "2020-05-12T13:57:42.745066Z" + "end_time": "2020-09-15T07:10:05.289208Z", + "start_time": "2020-09-15T07:10:05.198Z" } }, "outputs": [], @@ -751,8 +751,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-05-12T13:57:42.939399Z", - "start_time": "2020-05-12T13:57:42.931903Z" + "end_time": "2020-09-15T07:10:05.289732Z", + "start_time": "2020-09-15T07:10:05.199Z" } }, "outputs": [], @@ -765,8 +765,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-05-12T13:57:43.138665Z", - "start_time": "2020-05-12T13:57:43.126535Z" + "end_time": "2020-09-15T07:10:05.290178Z", + "start_time": "2020-09-15T07:10:05.200Z" } }, "outputs": [], @@ -802,8 +802,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-05-12T13:57:43.869747Z", - "start_time": "2020-05-12T13:57:43.503072Z" + "end_time": "2020-09-15T07:10:05.290686Z", + "start_time": "2020-09-15T07:10:05.223Z" } }, "outputs": [], @@ -826,8 +826,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-05-12T13:57:43.932301Z", - "start_time": "2020-05-12T13:57:43.894886Z" + "end_time": "2020-09-15T07:10:05.291214Z", + "start_time": "2020-09-15T07:10:05.224Z" } }, "outputs": [], @@ -891,8 +891,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-05-12T13:57:45.758313Z", - "start_time": "2020-05-12T13:57:45.651669Z" + "end_time": "2020-09-15T07:10:05.291734Z", + "start_time": "2020-09-15T07:10:05.257Z" } }, "outputs": [], @@ -924,8 +924,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-05-12T13:58:10.739418Z", - "start_time": "2020-05-12T13:57:46.227716Z" + "end_time": "2020-09-15T07:10:05.292221Z", + "start_time": "2020-09-15T07:10:05.259Z" }, "scrolled": false }, @@ -948,8 +948,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-05-12T13:58:10.949755Z", - "start_time": "2020-05-12T13:58:10.743422Z" + "end_time": "2020-09-15T07:10:05.292716Z", + "start_time": "2020-09-15T07:10:05.260Z" } }, "outputs": [], @@ -974,8 +974,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-05-12T13:58:11.194133Z", - "start_time": "2020-05-12T13:58:10.952046Z" + "end_time": "2020-09-15T07:10:05.293348Z", + "start_time": "2020-09-15T07:10:05.261Z" } }, "outputs": [], @@ -1014,8 +1014,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-05-12T13:21:20.657248Z", - "start_time": "2020-05-12T13:21:20.652299Z" + "end_time": "2020-09-15T07:10:05.293906Z", + "start_time": "2020-09-15T07:10:05.275Z" } }, "outputs": [], @@ -1032,8 +1032,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-05-12T13:21:20.665927Z", - "start_time": "2020-05-12T13:21:20.658990Z" + "end_time": "2020-09-15T07:10:05.397650Z", + "start_time": "2020-09-15T07:10:05.394917Z" } }, "outputs": [], @@ -1048,8 +1048,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-05-12T13:21:20.673928Z", - "start_time": "2020-05-12T13:21:20.668310Z" + "end_time": "2020-09-15T07:10:05.401574Z", + "start_time": "2020-09-15T07:10:05.398474Z" } }, "outputs": [], @@ -1063,8 +1063,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-05-12T13:21:20.685445Z", - "start_time": "2020-05-12T13:21:20.676908Z" + "end_time": "2020-09-15T07:10:05.406288Z", + "start_time": "2020-09-15T07:10:05.402491Z" } }, "outputs": [], @@ -1110,8 +1110,8 @@ "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-05-12T13:21:20.694272Z", - "start_time": "2020-05-12T13:21:20.687226Z" + "end_time": "2020-09-15T07:10:05.411737Z", + "start_time": "2020-09-15T07:10:05.407119Z" } }, "outputs": [], @@ -1181,7 +1181,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.7" + "version": "3.7.9" }, "notify_time": "5" },