{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "hide_input": true,
    "inputHidden": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<span style=\"color:red; font-family:Helvetica Neue, Helvetica, Arial, sans-serif; font-size:2em;\">An Exception was encountered at 'In [25]'.</span>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%%html\n",
    "<span style=\"color:red; font-family:Helvetica Neue, Helvetica, Arial, sans-serif; font-size:2em;\">An Exception was encountered at 'In [25]'.</span>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "papermill": {
     "duration": 0.200586,
     "end_time": "2019-05-24T04:40:52.908363",
     "exception": false,
     "start_time": "2019-05-24T04:40:52.707777",
     "status": "completed"
    },
    "tags": [
     "parameters"
    ]
   },
   "outputs": [],
   "source": [
    "# Example parameters\n",
    "#ddir= \"/users/avsec/workspace/basepair/data/\"\n",
    "#model_file = f\"{ddir}/processed/chipnexus/exp/models/oct-sox-nanog-klf/models/filters=128/model.h5\"\n",
    "#dataspec_file = f\"{ddir}/processed/chipnexus/exp/models/oct-sox-nanog-klf/models/filters=128/dataspec.yaml\"\n",
    "#history_file = f\"{ddir}/processed/chipnexus/exp/models/oct-sox-nanog-klf/models/filters=128/history.csv\"\n",
    "#peak_width = 1000\n",
    "#seq_width = peak_width\n",
    "#gpu = 0\n",
    "#num_workers = 10"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "papermill": {
     "duration": 0.076534,
     "end_time": "2019-05-24T04:40:53.066698",
     "exception": false,
     "start_time": "2019-05-24T04:40:52.990164",
     "status": "completed"
    },
    "tags": [
     "injected-parameters"
    ]
   },
   "outputs": [],
   "source": [
    "# Parameters\n",
    "model_file = \"/oak/stanford/groups/akundaje/marinovg/ENCODE4/Chromatin-nanopores/2019-05-23-Oct4-Sox2-BPNet-plasmids/mm10.BPNet.5p.ChIP-Seq_Sox2_V65-GSM1082341/model.h5\"\n",
    "dataspec_file = \"/oak/stanford/groups/akundaje/marinovg/ENCODE4/Chromatin-nanopores/2019-05-23-Oct4-Sox2-BPNet-plasmids/mm10.BPNet.5p.ChIP-Seq_Sox2_V65-GSM1082341/dataspec.yaml\"\n",
    "hparams_file = \"/oak/stanford/groups/akundaje/marinovg/ENCODE4/Chromatin-nanopores/2019-05-23-Oct4-Sox2-BPNet-plasmids/mm10.BPNet.5p.ChIP-Seq_Sox2_V65-GSM1082341/hparams.yaml\"\n",
    "history_file = \"/oak/stanford/groups/akundaje/marinovg/ENCODE4/Chromatin-nanopores/2019-05-23-Oct4-Sox2-BPNet-plasmids/mm10.BPNet.5p.ChIP-Seq_Sox2_V65-GSM1082341/history.csv\"\n",
    "peak_width = 1000\n",
    "seq_width = 1000\n",
    "gpu = 3\n",
    "num_workers = 10\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "papermill": {
     "duration": 6.72888,
     "end_time": "2019-05-24T04:40:59.972061",
     "exception": false,
     "start_time": "2019-05-24T04:40:53.243181",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using TensorFlow backend.\n"
     ]
    }
   ],
   "source": [
    "import basepair\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "from basepair.cli.schemas import DataSpec, TaskSpec\n",
    "from pathlib import Path\n",
    "from keras.models import load_model\n",
    "from basepair.config import create_tf_session, get_data_dir\n",
    "from basepair.datasets import StrandedProfile\n",
    "from basepair.preproc import AppendCounts\n",
    "from basepair.losses import MultichannelMultinomialNLL\n",
    "from basepair.config import valid_chr, test_chr\n",
    "from basepair.plots import regression_eval, plot_loss\n",
    "from basepair.cli.evaluate import eval_profile\n",
    "from basepair import samplers \n",
    "from basepair.math import softmax\n",
    "\n",
    "#ddir = get_data_dir()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "papermill": {
     "duration": 1.066736,
     "end_time": "2019-05-24T04:41:01.134866",
     "exception": false,
     "start_time": "2019-05-24T04:41:00.068130",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tensorflow.python.client.session.Session at 0x7fb394d5a5c0>"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "create_tf_session(\"\")  # don't use gpu"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "papermill": {
     "duration": 11.637771,
     "end_time": "2019-05-24T04:41:12.951267",
     "exception": false,
     "start_time": "2019-05-24T04:41:01.313496",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From /users/avsec/bin/anaconda3/envs/chipnexus/lib/python3.6/site-packages/tensorflow/python/util/deprecation.py:497: calling conv1d (from tensorflow.python.ops.nn_ops) with data_format=NHWC is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "`NHWC` for data_format is deprecated, use `NWC` instead\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2019-05-23 21:41:01,941 [WARNING] From /users/avsec/bin/anaconda3/envs/chipnexus/lib/python3.6/site-packages/tensorflow/python/util/deprecation.py:497: calling conv1d (from tensorflow.python.ops.nn_ops) with data_format=NHWC is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "`NHWC` for data_format is deprecated, use `NWC` instead\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From /users/avsec/bin/anaconda3/envs/chipnexus/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/base.py:198: retry (from tensorflow.contrib.learn.python.learn.datasets.base) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Use the retry module or similar alternatives.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2019-05-23 21:41:09,506 [WARNING] From /users/avsec/bin/anaconda3/envs/chipnexus/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/base.py:198: retry (from tensorflow.contrib.learn.python.learn.datasets.base) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Use the retry module or similar alternatives.\n"
     ]
    }
   ],
   "source": [
    "model = load_model(model_file)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "papermill": {
     "duration": 0.069886,
     "end_time": "2019-05-24T04:41:13.148528",
     "exception": false,
     "start_time": "2019-05-24T04:41:13.078642",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "## Learning curves"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "papermill": {
     "duration": 0.07684,
     "end_time": "2019-05-24T04:41:13.308968",
     "exception": false,
     "start_time": "2019-05-24T04:41:13.232128",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "ds = DataSpec.load(dataspec_file)\n",
    "tasks = list(ds.task_specs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "papermill": {
     "duration": 0.106948,
     "end_time": "2019-05-24T04:41:13.511185",
     "exception": false,
     "start_time": "2019-05-24T04:41:13.404237",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'epoch': 3.0,\n",
       " 'counts/task1_loss': 0.4650576959982463,\n",
       " 'loss': 519.0124593324002,\n",
       " 'profile/task1_loss': 514.3618830299997,\n",
       " 'val_counts/task1_loss': 0.4702314041764283,\n",
       " 'val_loss': 835.5703585033574,\n",
       " 'val_profile/task1_loss': 830.8680506682592}"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Best metrics\n",
    "dfh = pd.read_csv(history_file)\n",
    "dict(dfh.iloc[dfh.val_loss.idxmin()])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "papermill": {
     "duration": 0.341959,
     "end_time": "2019-05-24T04:41:13.932708",
     "exception": false,
     "start_time": "2019-05-24T04:41:13.590749",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_loss(dfh, [f\"{p}/{task}_loss\"\n",
    "                for task in tasks\n",
    "                for p in ['profile']\n",
    "               ], figsize=(len(tasks)*4, 4))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "papermill": {
     "duration": 0.346174,
     "end_time": "2019-05-24T04:41:14.386395",
     "exception": false,
     "start_time": "2019-05-24T04:41:14.040221",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_loss(dfh, [f\"{p}/{task}_loss\"\n",
    "                for task in tasks\n",
    "                for p in ['counts']\n",
    "               ], figsize=(len(tasks)*4, 4))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "papermill": {
     "duration": 0.125265,
     "end_time": "2019-05-24T04:41:14.643384",
     "exception": false,
     "start_time": "2019-05-24T04:41:14.518119",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "## Evaluation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "papermill": {
     "duration": 0.335384,
     "end_time": "2019-05-24T04:41:15.045551",
     "exception": false,
     "start_time": "2019-05-24T04:41:14.710167",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "dl_valid = StrandedProfile(ds, \n",
    "                          incl_chromosomes=valid_chr, \n",
    "                          peak_width=peak_width,\n",
    "                          seq_width=seq_width,\n",
    "                          shuffle=False,\n",
    "                          target_transformer=AppendCounts())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "papermill": {
     "duration": 0.690943,
     "end_time": "2019-05-24T04:41:15.863241",
     "exception": false,
     "start_time": "2019-05-24T04:41:15.172298",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      "  0%|          | 0/103 [00:00<?, ?it/s]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      " 15%|█▍        | 15/103 [00:00<00:00, 149.43it/s]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      " 48%|████▊     | 49/103 [00:00<00:00, 179.60it/s]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      " 81%|████████  | 83/103 [00:00<00:00, 201.49it/s]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      "100%|██████████| 103/103 [00:00<00:00, 273.84it/s]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "valid = dl_valid.load_all(num_workers=num_workers)\n",
    "y_true = valid[\"targets\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "papermill": {
     "duration": 0.538912,
     "end_time": "2019-05-24T04:41:16.528791",
     "exception": false,
     "start_time": "2019-05-24T04:41:15.989879",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "from basepair.BPNet import BiasModel"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "papermill": {
     "duration": 0.143528,
     "end_time": "2019-05-24T04:41:16.850388",
     "exception": false,
     "start_time": "2019-05-24T04:41:16.706860",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "# if [task for task, task_spec in ds.task_specs.items() if task_spec.bias_model]:\n",
    "#     bm = BiasModel(ds)\n",
    "#     valid['inputs'] = bm.predict([valid[\"inputs\"]])[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "papermill": {
     "duration": 21.207108,
     "end_time": "2019-05-24T04:41:38.156643",
     "exception": false,
     "start_time": "2019-05-24T04:41:16.949535",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\r",
      "  32/3281 [..............................] - ETA: 37s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "  64/3281 [..............................] - ETA: 28s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "  96/3281 [..............................] - ETA: 26s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      " 128/3281 [>.............................] - ETA: 25s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      " 160/3281 [>.............................] - ETA: 24s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      " 192/3281 [>.............................] - ETA: 23s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      " 224/3281 [=>............................] - ETA: 22s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      " 256/3281 [=>............................] - ETA: 21s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      " 288/3281 [=>............................] - ETA: 20s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      " 320/3281 [=>............................] - ETA: 20s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      " 352/3281 [==>...........................] - ETA: 20s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      " 384/3281 [==>...........................] - ETA: 19s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      " 416/3281 [==>...........................] - ETA: 19s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      " 448/3281 [===>..........................] - ETA: 18s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      " 480/3281 [===>..........................] - ETA: 18s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      " 512/3281 [===>..........................] - ETA: 18s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      " 544/3281 [===>..........................] - ETA: 18s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      " 576/3281 [====>.........................] - ETA: 17s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      " 608/3281 [====>.........................] - ETA: 17s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      " 640/3281 [====>.........................] - ETA: 16s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      " 672/3281 [=====>........................] - ETA: 16s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      " 704/3281 [=====>........................] - ETA: 16s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      " 736/3281 [=====>........................] - ETA: 16s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      " 768/3281 [======>.......................] - ETA: 16s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      " 800/3281 [======>.......................] - ETA: 15s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      " 832/3281 [======>.......................] - ETA: 15s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      " 864/3281 [======>.......................] - ETA: 15s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      " 896/3281 [=======>......................] - ETA: 15s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      " 928/3281 [=======>......................] - ETA: 15s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      " 960/3281 [=======>......................] - ETA: 14s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      " 992/3281 [========>.....................] - ETA: 14s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "1024/3281 [========>.....................] - ETA: 14s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "1056/3281 [========>.....................] - ETA: 14s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "1088/3281 [========>.....................] - ETA: 14s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "1120/3281 [=========>....................] - ETA: 13s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "1152/3281 [=========>....................] - ETA: 13s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "1184/3281 [=========>....................] - ETA: 13s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "1216/3281 [==========>...................] - ETA: 13s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "1248/3281 [==========>...................] - ETA: 13s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "1280/3281 [==========>...................] - ETA: 12s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "1312/3281 [==========>...................] - ETA: 12s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "1344/3281 [===========>..................] - ETA: 12s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "1376/3281 [===========>..................] - ETA: 12s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "1408/3281 [===========>..................] - ETA: 11s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "1440/3281 [============>.................] - ETA: 11s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "1472/3281 [============>.................] - ETA: 11s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "1504/3281 [============>.................] - ETA: 11s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "1536/3281 [=============>................] - ETA: 11s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "1568/3281 [=============>................] - ETA: 10s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "1600/3281 [=============>................] - ETA: 10s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "1632/3281 [=============>................] - ETA: 10s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "1664/3281 [==============>...............] - ETA: 10s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "1696/3281 [==============>...............] - ETA: 10s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "1728/3281 [==============>...............] - ETA: 10s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "1760/3281 [===============>..............] - ETA: 9s "
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "1792/3281 [===============>..............] - ETA: 9s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "1824/3281 [===============>..............] - ETA: 9s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "1856/3281 [===============>..............] - ETA: 9s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "1888/3281 [================>.............] - ETA: 9s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "1920/3281 [================>.............] - ETA: 8s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "1952/3281 [================>.............] - ETA: 8s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "1984/3281 [=================>............] - ETA: 8s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "2016/3281 [=================>............] - ETA: 8s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "2048/3281 [=================>............] - ETA: 8s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "2080/3281 [==================>...........] - ETA: 7s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "2112/3281 [==================>...........] - ETA: 7s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "2144/3281 [==================>...........] - ETA: 7s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "2176/3281 [==================>...........] - ETA: 7s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "2208/3281 [===================>..........] - ETA: 6s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "2240/3281 [===================>..........] - ETA: 6s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "2272/3281 [===================>..........] - ETA: 6s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "2304/3281 [====================>.........] - ETA: 6s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "2336/3281 [====================>.........] - ETA: 6s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "2368/3281 [====================>.........] - ETA: 5s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "2400/3281 [====================>.........] - ETA: 5s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "2432/3281 [=====================>........] - ETA: 5s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "2464/3281 [=====================>........] - ETA: 5s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "2496/3281 [=====================>........] - ETA: 5s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "2528/3281 [======================>.......] - ETA: 4s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "2560/3281 [======================>.......] - ETA: 4s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "2592/3281 [======================>.......] - ETA: 4s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "2624/3281 [======================>.......] - ETA: 4s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "2656/3281 [=======================>......] - ETA: 3s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "2688/3281 [=======================>......] - ETA: 3s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "2720/3281 [=======================>......] - ETA: 3s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "2752/3281 [========================>.....] - ETA: 3s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "2784/3281 [========================>.....] - ETA: 3s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "2816/3281 [========================>.....] - ETA: 2s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "2848/3281 [=========================>....] - ETA: 2s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "2880/3281 [=========================>....] - ETA: 2s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "2912/3281 [=========================>....] - ETA: 2s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "2944/3281 [=========================>....] - ETA: 2s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "2976/3281 [==========================>...] - ETA: 1s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "3008/3281 [==========================>...] - ETA: 1s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "3040/3281 [==========================>...] - ETA: 1s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "3072/3281 [===========================>..] - ETA: 1s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "3104/3281 [===========================>..] - ETA: 1s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "3136/3281 [===========================>..] - ETA: 0s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "3168/3281 [===========================>..] - ETA: 0s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "3200/3281 [============================>.] - ETA: 0s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "3232/3281 [============================>.] - ETA: 0s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "3264/3281 [============================>.] - ETA: 0s"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r",
      "3281/3281 [==============================] - 21s 6ms/step\n"
     ]
    }
   ],
   "source": [
    "y_pred = model.predict(valid['inputs'], verbose=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "papermill": {
     "duration": 0.21723,
     "end_time": "2019-05-24T04:42:06.453603",
     "exception": false,
     "start_time": "2019-05-24T04:42:06.236373",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "papermill": {
     "duration": 0.430928,
     "end_time": "2019-05-24T04:42:07.045918",
     "exception": false,
     "start_time": "2019-05-24T04:42:06.614990",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Figure size 432x288 with 0 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "for task in tasks:\n",
    "    plt.figure()\n",
    "    yt = y_true[f'counts/{task}'].mean(-1)\n",
    "    yp = y_pred[ds.task2idx(task, 'counts')].mean(-1)\n",
    "    regression_eval(yt, \n",
    "                    yp, alpha=0.1, task=task)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "papermill": {
     "duration": 0.136477,
     "end_time": "2019-05-24T04:42:07.341320",
     "exception": false,
     "start_time": "2019-05-24T04:42:07.204843",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "## Profile evaluation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "papermill": {
     "duration": 0.168731,
     "end_time": "2019-05-24T04:42:07.652303",
     "exception": false,
     "start_time": "2019-05-24T04:42:07.483572",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "from joblib import Parallel, delayed\n",
    "import basepair"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "papermill": {
     "duration": 0.127281,
     "end_time": "2019-05-24T04:42:07.929594",
     "exception": false,
     "start_time": "2019-05-24T04:42:07.802313",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "task=tasks[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "papermill": {
     "duration": 0.783528,
     "end_time": "2019-05-24T04:42:08.858570",
     "exception": false,
     "start_time": "2019-05-24T04:42:08.075042",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "yp = softmax(y_pred[ds.task2idx(task, \"profile\")])\n",
    "yt = y_true[\"profile/\" + task]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "papermill": {
     "duration": 0.214531,
     "end_time": "2019-05-24T04:42:09.185562",
     "exception": false,
     "start_time": "2019-05-24T04:42:08.971031",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "x = np.ravel(yt / (1+yt.sum(axis=-2, keepdims=True)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "papermill": {
     "duration": 0.840295,
     "end_time": "2019-05-24T04:42:10.169821",
     "exception": false,
     "start_time": "2019-05-24T04:42:09.329526",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x216 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(12,3))\n",
    "plt.subplot(121)\n",
    "plt.hist(x[(x<0.04) ], bins=100);\n",
    "plt.subplot(122)\n",
    "plt.hist(x[(x<0.04) & (x>0.0001)], bins=100);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "papermill": {
     "duration": 0.153007,
     "end_time": "2019-05-24T04:42:10.511905",
     "exception": false,
     "start_time": "2019-05-24T04:42:10.358898",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.02411139896373057"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.mean(x>0.0001)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "papermill": {
     "duration": 1.380466,
     "end_time": "2019-05-24T04:42:12.030386",
     "exception": false,
     "start_time": "2019-05-24T04:42:10.649920",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "out_df = Parallel(n_jobs=len(tasks))(delayed(basepair.cli.evaluate.eval_profile)(y_true[\"profile/\" + task], \n",
    "                                                                                 softmax(y_pred[ds.task2idx(task, \"profile\")]), \n",
    "                                                                                 binsizes=[1,10],\n",
    "                                                                                 pos_min_threshold=0.015,\n",
    "                                                                                 neg_max_threshold=0.005,)\n",
    "                 for task in tasks)\n",
    "df = pd.concat([out_df[i].assign(task=task) for i,task in enumerate(tasks)])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "papermill": {
     "duration": 0.133428,
     "end_time": "2019-05-24T04:42:12.375182",
     "exception": false,
     "start_time": "2019-05-24T04:42:12.241754",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "      auprc  binsize  frac_ambigous  imbalance  n_positives  random_auprc   task\n",
      "0  0.125988        1       0.035757   0.025277        11553      0.024782  task1\n",
      "1  0.670492       10       0.133017   0.188539         7748      0.182591  task1\n"
     ]
    }
   ],
   "source": [
    "# make sure to print all the rows\n",
    "print(df.to_string())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "papermill": {
     "duration": 0.541893,
     "end_time": "2019-05-24T04:42:13.051754",
     "exception": true,
     "start_time": "2019-05-24T04:42:12.509861",
     "status": "failed"
    },
    "tags": []
   },
   "outputs": [
    {
     "ename": "FileNotFoundError",
     "evalue": "[Errno 2] No such file or directory: 'model/auprc.metrics.csv'",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mFileNotFoundError\u001b[0m                         Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-25-e3f3f832ab2e>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto_csv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"model/auprc.metrics.csv\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;32m/users/avsec/bin/anaconda3/envs/chipnexus/lib/python3.6/site-packages/pandas/core/generic.py\u001b[0m in \u001b[0;36mto_csv\u001b[0;34m(self, path_or_buf, sep, na_rep, float_format, columns, header, index, index_label, mode, encoding, compression, quoting, quotechar, line_terminator, chunksize, tupleize_cols, date_format, doublequote, escapechar, decimal)\u001b[0m\n\u001b[1;32m   3018\u001b[0m                                  \u001b[0mdoublequote\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdoublequote\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   3019\u001b[0m                                  escapechar=escapechar, decimal=decimal)\n\u001b[0;32m-> 3020\u001b[0;31m         \u001b[0mformatter\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msave\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   3021\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   3022\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mpath_or_buf\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/users/avsec/bin/anaconda3/envs/chipnexus/lib/python3.6/site-packages/pandas/io/formats/csvs.py\u001b[0m in \u001b[0;36msave\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m    155\u001b[0m             f, handles = _get_handle(self.path_or_buf, self.mode,\n\u001b[1;32m    156\u001b[0m                                      \u001b[0mencoding\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mencoding\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 157\u001b[0;31m                                      compression=self.compression)\n\u001b[0m\u001b[1;32m    158\u001b[0m             \u001b[0mclose\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    159\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/users/avsec/bin/anaconda3/envs/chipnexus/lib/python3.6/site-packages/pandas/io/common.py\u001b[0m in \u001b[0;36m_get_handle\u001b[0;34m(path_or_buf, mode, encoding, compression, memory_map, is_text)\u001b[0m\n\u001b[1;32m    422\u001b[0m         \u001b[0;32melif\u001b[0m \u001b[0mencoding\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    423\u001b[0m             \u001b[0;31m# Python 3 and encoding\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 424\u001b[0;31m             \u001b[0mf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpath_or_buf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmode\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mencoding\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mencoding\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnewline\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    425\u001b[0m         \u001b[0;32melif\u001b[0m \u001b[0mis_text\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    426\u001b[0m             \u001b[0;31m# Python 3 and no explicit encoding\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'model/auprc.metrics.csv'"
     ]
    }
   ],
   "source": [
    "df.to_csv(\"model/auprc.metrics.csv\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "papermill": {
     "duration": null,
     "end_time": null,
     "exception": null,
     "start_time": null,
     "status": "pending"
    },
    "tags": []
   },
   "source": [
    "## Profile plots"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "papermill": {
     "duration": null,
     "end_time": null,
     "exception": null,
     "start_time": null,
     "status": "pending"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "from basepair.plots import plot_profiles\n",
    "from basepair import samplers"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "papermill": {
     "duration": null,
     "end_time": null,
     "exception": null,
     "start_time": null,
     "status": "pending"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "tasks = list(ds.task_specs)\n",
    "task = tasks[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "papermill": {
     "duration": null,
     "end_time": null,
     "exception": null,
     "start_time": null,
     "status": "pending"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "#idx_list = samplers.top_sum_count(y_true['profile/Nanog'], 10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "papermill": {
     "duration": null,
     "end_time": null,
     "exception": null,
     "start_time": null,
     "status": "pending"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "#idx_list = samplers.top_sum_count(y_true['profile/Oct4'], 10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "papermill": {
     "duration": null,
     "end_time": null,
     "exception": null,
     "start_time": null,
     "status": "pending"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "# Total sum\n",
    "#idx_list = samplers.top_sum_count(sum([y_true[f'profile/{task}'].mean(-1) for task in tasks])[:,:,np.newaxis], 10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "papermill": {
     "duration": null,
     "end_time": null,
     "exception": null,
     "start_time": null,
     "status": "pending"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "#idx_list = samplers.top_max_count(y_true['profile/Oct4'], 10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "papermill": {
     "duration": null,
     "end_time": null,
     "exception": null,
     "start_time": null,
     "status": "pending"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "np.random.seed(42)\n",
    "idx_list = samplers.random(y_true[f'profile/{task}'], 20, )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "papermill": {
     "duration": null,
     "end_time": null,
     "exception": null,
     "start_time": null,
     "status": "pending"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "idx_list[:4]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "papermill": {
     "duration": null,
     "end_time": null,
     "exception": null,
     "start_time": null,
     "status": "pending"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "plot_profiles(y_true, y_pred, tasks, idx_list, preproc=None, figsize=(24, 8), tic_freq=50, \n",
    "              xlim=[int(np.floor(peak_width/5)),int(np.floor(peak_width/5*4))])"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:basepair-gpu] *",
   "language": "python",
   "name": "conda-env-basepair-gpu-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  },
  "papermill": {
   "duration": 84.0069,
   "end_time": "2019-05-24T04:42:14.830792",
   "environment_variables": {},
   "exception": true,
   "input_path": "/users/avsec/workspace/basepair/basepair/exp/chipnexus/template_eval.ipynb",
   "output_path": "/oak/stanford/groups/akundaje/marinovg/ENCODE4/Chromatin-nanopores/2019-05-23-Oct4-Sox2-BPNet-plasmids/mm10.BPNet.5p.ChIP-Seq_Sox2_V65-GSM1082341/results.ipynb",
   "parameters": {
    "dataspec_file": "/oak/stanford/groups/akundaje/marinovg/ENCODE4/Chromatin-nanopores/2019-05-23-Oct4-Sox2-BPNet-plasmids/mm10.BPNet.5p.ChIP-Seq_Sox2_V65-GSM1082341/dataspec.yaml",
    "gpu": 3,
    "history_file": "/oak/stanford/groups/akundaje/marinovg/ENCODE4/Chromatin-nanopores/2019-05-23-Oct4-Sox2-BPNet-plasmids/mm10.BPNet.5p.ChIP-Seq_Sox2_V65-GSM1082341/history.csv",
    "hparams_file": "/oak/stanford/groups/akundaje/marinovg/ENCODE4/Chromatin-nanopores/2019-05-23-Oct4-Sox2-BPNet-plasmids/mm10.BPNet.5p.ChIP-Seq_Sox2_V65-GSM1082341/hparams.yaml",
    "model_file": "/oak/stanford/groups/akundaje/marinovg/ENCODE4/Chromatin-nanopores/2019-05-23-Oct4-Sox2-BPNet-plasmids/mm10.BPNet.5p.ChIP-Seq_Sox2_V65-GSM1082341/model.h5",
    "num_workers": 10,
    "peak_width": 1000,
    "seq_width": 1000
   },
   "start_time": "2019-05-24T04:40:50.823892",
   "version": "0.18.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}