Skip to content

Instantly share code, notes, and snippets.

@wassname
Last active September 19, 2018 02:07
Show Gist options
  • Save wassname/9f760641a17fc86dcea6edef1b00c810 to your computer and use it in GitHub Desktop.
Save wassname/9f760641a17fc86dcea6edef1b00c810 to your computer and use it in GitHub Desktop.
comparing inference time vs parameters & memory usage for pytorch pretrained models
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"ExecuteTime": {
"end_time": "2018-09-19T02:03:27.421059Z",
"start_time": "2018-09-19T02:03:26.255858Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Populating the interactive namespace from numpy and matplotlib\n"
]
}
],
"source": [
"import torch\n",
"import torchvision\n",
"import time\n",
"%pylab inline"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"ExecuteTime": {
"end_time": "2018-09-19T02:03:27.451750Z",
"start_time": "2018-09-19T02:03:27.435793Z"
}
},
"outputs": [],
"source": [
"import torchvision.models as models\n",
"model_class=[\n",
" 'alexnet',\n",
"# 'densenet',\n",
" 'densenet121',\n",
" 'densenet161',\n",
"# 'densenet169',\n",
"# 'densenet201',\n",
"# 'inception',\n",
" 'inception_v3',\n",
"# 'resnet',\n",
"\n",
" 'resnet18',\n",
" 'resnet34',\n",
" 'resnet50',\n",
"# 'resnet101',\n",
"# 'resnet152',\n",
"# 'squeezenet',\n",
" 'squeezenet1_0',\n",
" 'squeezenet1_1',\n",
"# 'vgg',\n",
"# 'vgg11',\n",
" 'vgg11_bn',\n",
" 'vgg13',\n",
" 'vgg13_bn',\n",
"# 'vgg16',\n",
"# 'vgg16_bn',\n",
"# 'vgg19',\n",
"# 'vgg19_bn'\n",
"]"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"ExecuteTime": {
"end_time": "2018-09-19T02:05:47.029686Z",
"start_time": "2018-09-19T02:03:27.453956Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"model_cls {'time_cuda': 0.0031632184982299805, 'cuda_memory_cached': 188.350464, 'cuda_memory_allocated': 123.18848, 'freed': 1.75, 'time_cpu': 0.2662928104400635, 'nb_param_m': 15.27521}\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/wassname/.pyenv/versions/3.5.3/envs/jupyter3/lib/python3.5/site-packages/torchvision/models/densenet.py:212: UserWarning: nn.init.kaiming_normal is now deprecated in favor of nn.init.kaiming_normal_.\n",
" nn.init.kaiming_normal(m.weight.data)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"model_cls {'time_cuda': 0.03703659772872925, 'cuda_memory_cached': 163.84, 'cuda_memory_allocated': 16.749952, 'freed': 0.0, 'time_cpu': 1.3702900409698486, 'nb_param_m': 1.9947139999999999}\n",
"model_cls {'time_cuda': 0.048209309577941895, 'cuda_memory_cached': 336.134144, 'cuda_memory_allocated': 59.38624, 'freed': 0.0, 'time_cpu': 3.0856032371520996, 'nb_param_m': 7.170249999999999}\n",
"model_cls {'time_cuda': 0.029480159282684326, 'cuda_memory_cached': 202.047488, 'cuda_memory_allocated': 52.752128, 'freed': 219.75, 'time_cpu': 1.9106799364089966, 'nb_param_m': 6.790316}\n",
"model_cls {'time_cuda': 0.006705105304718018, 'cuda_memory_cached': 55.246848, 'cuda_memory_allocated': 24.044544, 'freed': 0.0, 'time_cpu': 0.6015251874923706, 'nb_param_m': 2.9223779999999997}\n",
"model_cls {'time_cuda': 0.010190963745117188, 'cuda_memory_cached': 87.09734399999999, 'cuda_memory_allocated': 44.271104, 'freed': 0.0, 'time_cpu': 1.1210960149765015, 'nb_param_m': 5.449418}\n",
"model_cls {'time_cuda': 0.01515960693359375, 'cuda_memory_cached': 152.305664, 'cuda_memory_allocated': 51.836287999999996, 'freed': 0.0, 'time_cpu': 1.4252945184707642, 'nb_param_m': 6.389258}\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/wassname/.pyenv/versions/3.5.3/envs/jupyter3/lib/python3.5/site-packages/torchvision/models/squeezenet.py:94: UserWarning: nn.init.kaiming_uniform is now deprecated in favor of nn.init.kaiming_uniform_.\n",
" init.kaiming_uniform(m.weight.data)\n",
"/home/wassname/.pyenv/versions/3.5.3/envs/jupyter3/lib/python3.5/site-packages/torchvision/models/squeezenet.py:92: UserWarning: nn.init.normal is now deprecated in favor of nn.init.normal_.\n",
" init.normal(m.weight.data, mean=0.0, std=0.01)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"model_cls {'time_cuda': 0.0073087215423583984, 'cuda_memory_cached': 55.181312, 'cuda_memory_allocated': 3.5112959999999998, 'freed': 0.0, 'time_cpu': 0.2922327518463135, 'nb_param_m': 0.312106}\n",
"model_cls {'time_cuda': 0.0058065056800842285, 'cuda_memory_cached': 34.996224, 'cuda_memory_allocated': 3.4854399999999996, 'freed': 0.0, 'time_cpu': 0.1544785499572754, 'nb_param_m': 0.308874}\n",
"model_cls {'time_cuda': 0.007930457592010498, 'cuda_memory_cached': 468.94284799999997, 'cuda_memory_allocated': 266.40435199999996, 'freed': 0.0, 'time_cpu': 1.939236581325531, 'nb_param_m': 33.21721}\n",
"model_cls {'time_cuda': 0.008024513721466064, 'cuda_memory_cached': 461.43897599999997, 'cuda_memory_allocated': 266.755584, 'freed': 0.0, 'time_cpu': 2.7004956007003784, 'nb_param_m': 33.261962}\n",
"model_cls {'time_cuda': 0.008574604988098145, 'cuda_memory_cached': 508.002304, 'cuda_memory_allocated': 266.77529599999997, 'freed': 0.0, 'time_cpu': 2.790863335132599, 'nb_param_m': 33.263434}\n"
]
}
],
"source": [
"import gc\n",
"data = {}\n",
"batch_size = 4\n",
"for model_cls in model_class:\n",
" \n",
" \n",
"# with torch.no_grad():\n",
" net = getattr(models, model_cls)()\n",
" nb_params = [np.prod(p.shape) for p in net.parameters()]\n",
" nb_param = sum(nb_params)\n",
"\n",
" if model_cls in ['inception_v3']:\n",
" x = torch.rand((batch_size, 3, 300, 300))\n",
" else:\n",
" x = torch.rand((batch_size, 3, 224, 224))\n",
" \n",
" # cpu\n",
" t0 = time.time()\n",
" y = net(x)\n",
" if model_cls in ['inception_v3']:\n",
" y=y[0]\n",
" y.sum().backward()\n",
" t_cpu = time.time()-t0\n",
" \n",
" # cuda\n",
" torch.cuda.empty_cache()\n",
" memory_cached0, memory_allocated0 = torch.cuda.memory_cached(), torch.cuda.memory_allocated()\n",
" net = net.cuda()\n",
" x = x.cuda()\n",
"\n",
" t0 = time.time()\n",
" y = net(x)\n",
" if model_cls in ['inception_v3']:\n",
" y=y[0]\n",
" y.sum().backward()\n",
" t = time.time()-t0\n",
" \n",
" memory_cached1, memory_allocated1 = torch.cuda.memory_cached(), torch.cuda.memory_allocated()\n",
" memory_cached = memory_cached1 - memory_cached0\n",
" memory_allocated = memory_allocated1 - memory_allocated0\n",
"\n",
" # clear memory\n",
" net.zero_grad()\n",
" del net, x, y\n",
" freed = gc.collect()\n",
" torch.cuda.empty_cache()\n",
" time.sleep(2)\n",
"\n",
" # Record\n",
" data[model_cls]=dict(\n",
" time_cuda=t/batch_size, \n",
" time_cpu=t_cpu/batch_size, \n",
" nb_param_m=nb_param*1e-6/batch_size, \n",
" cuda_memory_allocated=memory_allocated*1e-6/batch_size, \n",
" cuda_memory_cached=memory_cached * 1e-6/batch_size,\n",
" freed=freed/batch_size)\n",
" \n",
" print(model_cls, data[model_cls])"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"ExecuteTime": {
"end_time": "2018-09-19T02:05:47.366000Z",
"start_time": "2018-09-19T02:05:47.034554Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>cuda_memory_allocated</th>\n",
" <th>cuda_memory_cached</th>\n",
" <th>freed</th>\n",
" <th>nb_param_m</th>\n",
" <th>time_cpu</th>\n",
" <th>time_cuda</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>alexnet</th>\n",
" <td>123.188480</td>\n",
" <td>188.350464</td>\n",
" <td>1.75</td>\n",
" <td>15.275210</td>\n",
" <td>0.266293</td>\n",
" <td>0.003163</td>\n",
" </tr>\n",
" <tr>\n",
" <th>densenet121</th>\n",
" <td>16.749952</td>\n",
" <td>163.840000</td>\n",
" <td>0.00</td>\n",
" <td>1.994714</td>\n",
" <td>1.370290</td>\n",
" <td>0.037037</td>\n",
" </tr>\n",
" <tr>\n",
" <th>densenet161</th>\n",
" <td>59.386240</td>\n",
" <td>336.134144</td>\n",
" <td>0.00</td>\n",
" <td>7.170250</td>\n",
" <td>3.085603</td>\n",
" <td>0.048209</td>\n",
" </tr>\n",
" <tr>\n",
" <th>inception_v3</th>\n",
" <td>52.752128</td>\n",
" <td>202.047488</td>\n",
" <td>219.75</td>\n",
" <td>6.790316</td>\n",
" <td>1.910680</td>\n",
" <td>0.029480</td>\n",
" </tr>\n",
" <tr>\n",
" <th>resnet18</th>\n",
" <td>24.044544</td>\n",
" <td>55.246848</td>\n",
" <td>0.00</td>\n",
" <td>2.922378</td>\n",
" <td>0.601525</td>\n",
" <td>0.006705</td>\n",
" </tr>\n",
" <tr>\n",
" <th>resnet34</th>\n",
" <td>44.271104</td>\n",
" <td>87.097344</td>\n",
" <td>0.00</td>\n",
" <td>5.449418</td>\n",
" <td>1.121096</td>\n",
" <td>0.010191</td>\n",
" </tr>\n",
" <tr>\n",
" <th>resnet50</th>\n",
" <td>51.836288</td>\n",
" <td>152.305664</td>\n",
" <td>0.00</td>\n",
" <td>6.389258</td>\n",
" <td>1.425295</td>\n",
" <td>0.015160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>squeezenet1_0</th>\n",
" <td>3.511296</td>\n",
" <td>55.181312</td>\n",
" <td>0.00</td>\n",
" <td>0.312106</td>\n",
" <td>0.292233</td>\n",
" <td>0.007309</td>\n",
" </tr>\n",
" <tr>\n",
" <th>squeezenet1_1</th>\n",
" <td>3.485440</td>\n",
" <td>34.996224</td>\n",
" <td>0.00</td>\n",
" <td>0.308874</td>\n",
" <td>0.154479</td>\n",
" <td>0.005807</td>\n",
" </tr>\n",
" <tr>\n",
" <th>vgg11_bn</th>\n",
" <td>266.404352</td>\n",
" <td>468.942848</td>\n",
" <td>0.00</td>\n",
" <td>33.217210</td>\n",
" <td>1.939237</td>\n",
" <td>0.007930</td>\n",
" </tr>\n",
" <tr>\n",
" <th>vgg13</th>\n",
" <td>266.755584</td>\n",
" <td>461.438976</td>\n",
" <td>0.00</td>\n",
" <td>33.261962</td>\n",
" <td>2.700496</td>\n",
" <td>0.008025</td>\n",
" </tr>\n",
" <tr>\n",
" <th>vgg13_bn</th>\n",
" <td>266.775296</td>\n",
" <td>508.002304</td>\n",
" <td>0.00</td>\n",
" <td>33.263434</td>\n",
" <td>2.790863</td>\n",
" <td>0.008575</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" cuda_memory_allocated cuda_memory_cached freed nb_param_m \\\n",
"alexnet 123.188480 188.350464 1.75 15.275210 \n",
"densenet121 16.749952 163.840000 0.00 1.994714 \n",
"densenet161 59.386240 336.134144 0.00 7.170250 \n",
"inception_v3 52.752128 202.047488 219.75 6.790316 \n",
"resnet18 24.044544 55.246848 0.00 2.922378 \n",
"resnet34 44.271104 87.097344 0.00 5.449418 \n",
"resnet50 51.836288 152.305664 0.00 6.389258 \n",
"squeezenet1_0 3.511296 55.181312 0.00 0.312106 \n",
"squeezenet1_1 3.485440 34.996224 0.00 0.308874 \n",
"vgg11_bn 266.404352 468.942848 0.00 33.217210 \n",
"vgg13 266.755584 461.438976 0.00 33.261962 \n",
"vgg13_bn 266.775296 508.002304 0.00 33.263434 \n",
"\n",
" time_cpu time_cuda \n",
"alexnet 0.266293 0.003163 \n",
"densenet121 1.370290 0.037037 \n",
"densenet161 3.085603 0.048209 \n",
"inception_v3 1.910680 0.029480 \n",
"resnet18 0.601525 0.006705 \n",
"resnet34 1.121096 0.010191 \n",
"resnet50 1.425295 0.015160 \n",
"squeezenet1_0 0.292233 0.007309 \n",
"squeezenet1_1 0.154479 0.005807 \n",
"vgg11_bn 1.939237 0.007930 \n",
"vgg13 2.700496 0.008025 \n",
"vgg13_bn 2.790863 0.008575 "
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"df = pd.DataFrame(data).T\n",
"df"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"ExecuteTime": {
"end_time": "2018-09-19T02:05:47.375287Z",
"start_time": "2018-09-19T02:05:47.368726Z"
}
},
"outputs": [],
"source": [
"import matplotlib as mpl\n",
"mpl.rcParams['axes.prop_cycle'] = mpl.cycler(color=[plt.cm.tab20(i) for i in range(20)])"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"ExecuteTime": {
"end_time": "2018-09-19T02:05:47.708315Z",
"start_time": "2018-09-19T02:05:47.377496Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f7017180ac8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# https://stackoverflow.com/questions/4700614/how-to-put-the-legend-out-of-the-plot\n",
"ax = plt.subplot(111)\n",
"for name, row in df.iterrows():\n",
" plt.scatter(row.time_cpu, row.nb_param_m, label=name)\n",
" \n",
"# Shrink current axis by 20%\n",
"box = ax.get_position()\n",
"ax.set_position([box.x0, box.y0, box.width * 0.8, box.height])\n",
"\n",
"# Put a legend to the right of the current axis\n",
"ax.legend(loc='center left', bbox_to_anchor=(1, 0.5))\n",
"plt.xlabel('seconds cpu')\n",
"plt.ylabel('parameters (million)')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"ExecuteTime": {
"end_time": "2018-09-19T02:05:47.985404Z",
"start_time": "2018-09-19T02:05:47.710480Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f70149c19b0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# https://stackoverflow.com/questions/4700614/how-to-put-the-legend-out-of-the-plot\n",
"ax = plt.subplot(111)\n",
"for name, row in df.iterrows():\n",
" plt.scatter(row.time_cuda, row.nb_param_m, label=name)\n",
" \n",
"# Shrink current axis by 20%\n",
"box = ax.get_position()\n",
"ax.set_position([box.x0, box.y0, box.width * 0.8, box.height])\n",
"\n",
"# Put a legend to the right of the current axis\n",
"ax.legend(loc='center left', bbox_to_anchor=(1, 0.5))\n",
"plt.xlabel('seconds cuda')\n",
"plt.ylabel('parameters (million)')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2018-09-19T02:02:00.215361Z",
"start_time": "2018-09-19T02:02:00.208215Z"
}
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"ExecuteTime": {
"end_time": "2018-09-19T02:06:45.597239Z",
"start_time": "2018-09-19T02:06:45.312099Z"
}
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAbAAAAELCAYAAAC4Q9OcAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzt3Xl8U2XWB/DfSbpRWkrDUkpLW6B7KVvLosIgILygCMMmCuI2I6jjiKKOOi7ooA6OosKMCDigoLyAL6AIoojKLgKFQte0FCiU0o22tHRvkvP+kRsMtUu6pGnK+X4+99PcJ3c5t/DJ6XPvk+cQM0MIIYSwNypbByCEEEI0hSQwIYQQdkkSmBBCCLskCUwIIYRdkgQmhBDCLkkCE0IIYZckgQkhhLBLksCEEELYJaslMCJyIaJjRHSaiBKJ6A2l/TMiOk9Ep5RloLViEEII0X45WPHYlQDGMHMJETkCOERE3ynvPc/MWyw9UNeuXTkgIMAaMQoh2pkTJ05cYeZuto5DWJ/VEhgb56gqUVYdlaVJ81YFBAQgJiampUITQrRjRHTB1jGI1mHVZ2BEpCaiUwByAexh5qPKW28RURwRfUBEztaMQQghRPtk1QTGzHpmHgjAF8BQIuoH4CUAoQCGANAAeKG2fYloHhHFEFFMXl6eNcMUQghhh1plFCIzXwWwF8AEZs5io0oAnwIYWsc+q5k5mpmju3WT29lCCCFuZM1RiN2IqLPyugOAcQC0ROSttBGAPwJIsFYMQggh2i9rjkL0BrCOiNQwJsovmXknEf1MRN0AEIBTAB6zYgxCCCHaKWuOQowDMKiW9jHWOqcQQoibh8zEIYQQwi5JAhNCCGGXrPkMTAjRDiUf3IuDm9bjWv4VuHfpipH3PoCwkaNb5Ni5aam4GHMElaUlcO7oBr/oW9A9MLhFji3aH0lgQgiLJR/cix9W/we6qkoAwLUredi96t84H5+Nzj4D4NzBAX5h3dGtV+dGHzs3LRVnD+2FQa8DAFSWluDsob0AIElM1EpuIQohLHZw0/rryctEX12Fs8e/BQBUlutw9nQW8jKuNvrYF2OOXE9eJga9DhdjjjQ9YNGuSQITQljsWv6VWturyn5LWAY942JybqOPXVla0qh2ISSBCSEs5t6la63tTq433jKsLNfVul19nDu6NapdCHkGJoSw2Mh7H7jhGRgAqNSO8Bsw4YbtnDs0/qPFL/qWG56BGY/tAL/oW5oesOLEiRPdHRwc/gugH+QPd3thAJCg0+n+HBUVVWuXXhKYEMJiptGGplGIHT006BkxHl39f5uzQKUm+IV1b/SxTQM1rDEK0cHB4b89evQI69atW6FKpWpSWSfRugwGA+Xl5YVnZ2f/F8Dk2raRBCaEaJSwkaNvGDafl3EVF5NzUVmua9YoRMCYxKw04rCfJC/7olKpuFu3bkXZ2dn96tpGEpgQolm69erc5ITVilSSvOyP8m9W5y1fuRcshBDCLkkCE0IIG/Hx8YnMyspqlTthn3/+eecTJ064tMa5WoskMCGEuAl8/fXXnePi4jrYOo6WJAlMCCFq+OLXC5qhb/0Y2fvFb6OGvvVj5Be/XtA095h33HFH34iIiLDAwMCI995773dfqFuxYoUmMjIyLDQ0NHz27Nn+Op0OqampTv7+/v2ysrIc9Ho9oqKiQrZt29YpJSXFqU+fPhH33nuvf2BgYMRtt90WVFJSQgCQmJjoPHLkyKCIiIiwqKiokNjYWJc9e/Z0/PHHHzu/8sorvqGhoeGJiYnOzb2etkASmBBCmPni1wuaxTuT/HOvVToxgNxrlU6Ldyb5NzeJbdiwIT0xMTH51KlTSatWrfLKzs5Wm947efKky5YtWzQxMTFarVabpFKpeOXKlV2Cg4OrFixYkP3II4/4vf76614hISEV06ZNKwaAixcvujz11FO5aWlpiR4eHvr169d7AsCf//xn/xUrVlxMTExMfvfddy89/vjjfuPGjSu94447rr755puXtFptUkRERGVdcdoTGYUohBBmlv90xqdSZ7jhj/tKnUG1/KczPvcP9y9o6nHfeecdr2+//bYzAGRnZzsmJiZefx71/fffuyckJLgOGDAgDAAqKipU3bt31wHAwoULr2zbts3zs88+6xYXF5dk2sfHx6fy1ltvLQeAQYMGlaWnpzsXFRWpYmNj3WbOnNnXtF1VVRU1Nea2ThKYEEKYybtW6dSYdkvs3LnTff/+/e4xMTFad3d3w9ChQ0PKy8uvJ0lmppkzZ+Z/9NFHmTX3vXbtmio7O9sJAIqLi9Wenp4GAHBycrr+tQC1Ws3l5eUqvV4Pd3d3nVarTap5nPZIbiEKIYSZbu7OVY1pt8TVq1fVHh4eend3d0NsbKzL6dOnO5q/P2HChOKdO3d6ZmZmOgBATk6OOjU11QkAnnzySZ8ZM2bk//3vf7/80EMP+dd3Ho1GY/D19a1au3atJwAYDAYcOXKkAwC4ubnpi4uL29Vnfru6GCGEaK6nxgZlOjuoDOZtzg4qw1Njg37XO7LU9OnTi3Q6HfXp0yfi+eef9xkwYECp+ftRUVEVr7zySubYsWODg4ODw8eMGROckZHh+O2337qdOnWq45tvvpn9+OOPFzg6OvKyZcu61HeujRs3nvv000+7hoSEhAcFBUVs3bq1MwDMmTOnYPny5T3CwsLazSAOYm77X06Pjo7mmJgYW4chhLADRHSCmaPN206fPp0+YMCA2mvB1OKLXy9olv90xifvWqVTN3fnqqfGBmU25/mXaLrTp093HTBgQEBt71ntGRgRuQA4AMBZOc8WZl5ERL0BbALQBcAJAHOZucldcyGEaGn3D/cvkITV9lnzFmIlgDHMPADAQAATiGg4gHcAfMDMgQAKAfzJijEIIYRop6yWwNjIVErVUVkYwBgAW5T2dQD+aK0YhBBCtF9WHcRBRGoiOgUgF8AeAGcBXGVmU8W6SwB86th3HhHFEFFMXl6eNcMUQghhh6yawJhZz8wDAfgCGAogtBH7rmbmaGaO7tatm9ViFEIIYZ9aZRg9M18FsBfALQA6E5Fp8IgvgCYPTRVCCHHzsloCI6JuRNRZed0BwDgAyTAmshnKZg8C2G6tGIQQoi1auHBhz9dee83L1nHU9Msvv3TYvHmzh2k9NjbWZeDAgaFOTk6DzeNNS0tzHDZsWHDfvn0jAgMDIxYvXtzd9N7atWs9AwMDI1QqVdSBAwdcrRmvNXtg3gD2ElEcgOMA9jDzTgAvAFhIRGkwDqVfY8UYhBBCWCgmJsb122+/vZ7Aunfvrlu2bNnF+fPn55hv5+joiKVLl146e/Zs4vHjx5PXrFnT3VRrbODAgeVbt25Ni46OLql5/JZmzVGIccw8iJn7M3M/Zv6H0n6OmYcycyAzz2TmdjErshCi/TiXXabZdSIv8qtfc6J2nciLPJdd1uxyKi+88EKPgICAflFRUSFnzpxxBmovfQIA06dPD3jooYd6DRo0KNTX1zfy008/9QSACxcuOEZHR4eEhoaGBwUFRXz//fduALBt27ZOAwcODA0PDw+bOHFin6KiIhVgLJj5zDPP9AwPDw8LDg4ONx2/uLhYNXPmzIDIyMiwsLCw8C+++KJzRUUF/fOf/+y5Y8cOz9DQ0PBPPvnE08fHRzdq1KgyR0fHG2a88Pf3rx4xYkQZAHh6ehr69u1bfvHiRScAGDx4cMWAAQNa5XNdppISQggz57LLNPEXrvlXVhucAKCy2uAUf+Gaf3OS2MGDB12/+uorTXx8fNKePXvOmOZCrK30iWmfnJwcx5iYGO327dvPLFq0yAcA1q5dqxk7dmyRVqtNSk5OThw2bFhZVlaWw9tvv+194MCB1KSkpOTBgweXLV68+Prtvq5du+qSkpKSH3nkkbwlS5Z4AcDf//5379GjRxfHx8cnHzx4MOWVV17xraqqopdeeuny3XffXajVapMeffTRQkuuLSUlxSkpKcl11KhRVu9x1SSz0QshhBltZqmPgW/8497AUGkzS3369HBt0uwce/fudbvzzjuvuru7GwBg/PjxVysqKuotfTJ58uSrarUaUVFRFfn5+Y4AMHz48NL58+cHVFdXq2bMmFF46623lm/cuNH97NmzLkOHDg0FgOrqaoqKirqeTGbPnl0IAEOHDi375ptvPAFg3759nXbv3t15+fLlPQCgsrKS0tLSGj3bflFRkWratGl9lyxZkqHRaAwN79GyJIEJIYQZU8/L0vamMhgM9ZY+cXFxuX7bzjRn7cSJE0sOHDiQsnXrVo9HHnmk95NPPpmj0Wh0I0aMKN6xY8f5+o7j4ODAOp2OTMfbsmVLWs1bfYcOHepY2zFqU1lZSXfddVffmTNnFjz44INXLd2vJcktRCGEMOPsqKp1bta62i0xZsyYkl27dnUuKSmhwsJC1Z49ezq7urrWWfqkLqmpqU6+vr7Vzz777JUHHngg7+TJk6633357aUxMjFtCQoIzYHy+FRcXV+9s86NHjy5eunSpl8Fg7DQdPny4AwB06tRJX1JS0mBeMBgMuPfee/2Dg4MrXn/99ZyGtrcWSWBCCGEm1Kdjpopww+0wFcEQ6tOxyd9ZHTFiRNnUqVML+vXrF3HHHXcE9e/fvxSou/RJXXbv3u0eFhYWERYWFr5161bN3/72t5yePXvqVq1alX7vvff2CQ4ODo+Ojg6Nj493qe84S5YsuazT6Sg0NDQ8MDAw4pVXXvEBgIkTJ15LTU3tYBrEcfHiRQcvL6/+q1ev9vrggw+8vby8+hcUFKj27Nnj9vXXX3c5dOiQe2hoaHhoaGi4afj9+vXrO3t5efU/depUx6lTpwaNGDEiqKm/t4ZIORUhRLvSEuVUzmWXabSZpT6V1QYnZ0dVVahPx8ymPv8SzWOTcipCCGGv+vRwLZCE1fbJLUQhhBB2SRKYEEIIuyQJTAghhF2SBCaEEMIuSQITQghhlySBCSFEK7P3cioAcOXKFfWECRP69O7dO6JPnz4RP/74Y0eg/ZRTEUIIYUcsLacCAPPmzes1fvz44vPnzycmJSUlDRw4sAJoJ+VUhBDCbh1fo8F7wZF4vXMU3guOxPE1Uk7FTH5+vvro0aPuTz/99BXAON9i165d9YCUUxFCCNs5vkaD3S/5oyTHCWCgJMcJu1/yb04Sa2/lVFJSUpw0Go1u5syZAWFhYeGzZs3yLy4ubvV8IjNxCCGEuf3v+EBXeeOHsa5Shf3v+GDIn6ScCgCdTkfJycmuy5YtuzhmzJjShx9+uNerr77aY9myZZeb8vtpKklgQghhriS39g/yutqbyJ7LqQQEBFR5eXlVjRkzphQAZs2aVbhkyZIeluzbkuQWohBCmHPrXnvZlLraLdDeyqn4+fnpevToUXX69GlnAPjhhx86hYSEVFj0y2hBksCEEMLcqBcy4eB8Y3VhB2cDRr0g5VSUcioA8O9///vinDlz+gQHB4fHxcV1ePPNN7OAdlJOhYh6AVgPwAsAA1jNzMuI6HUAjwLIUzb9OzPvqu9YUk5FCGGpliinguNrNNj/jg9Kcp3g1r0Ko17IbOrzL9E8zSqnQkQqAAMA9ARQDiCBmXMtOK8OwLPMfJKI3AGcIKI9ynsfMPN7FkUvhBCtbcifCiRhtX11JjAi6gvgBQB3ADgDY4/JBUAwEZUBWAVgHTMbatufmbMAZCmvrxFRMgCflg1fCCHEzaq+Z2BvAvgCQF9m/h9mvp+ZZzBzfwCTAXgAmGvJSYgoAMAgAEeVpieJKI6I1hKRZ5OjF0IIcdOqM4Ex833MfIBreUjGzLnM/CEzr2voBETkBmArgKeZuRjAxwD6AhgIYw9taR37zSOiGCKKycvLq20TIYQQNzGLvgdGRLcCCDDfnpnXW7CfI4zJawMzb1P2yzF7/xMAO2vbl5lXA1gNGAdxWBKnEEKIm4clgzg+h7HHdAqAXmlmGEcY1rcfAVgDIJmZ3zdr91aejwHAVAAJTYhbCCHETc6SHlg0gPDabiU24DYYn5HFE9Eppe3vAO4jooEwJsF0APMbeVwhhBDCoi8yJwBo9BQhzHyImYmZ+zPzQGXZxcxzmTlSaZ9s1hsTQoh2a9CgQaGtda4XX3zxhs/s1jr3yJEjg0JCQsIDAwMjZs+e7afT6ax6PksSWFcASUS0m4i+MS1WjUoIIWzp0q8aHHg7Ej++FIUDb0fi0q/NLqcSGxurbYnQLLF8+XJvW5x7+/btZ1NSUpJSU1MT8/PzHU3TZFmLJQnsdQB/BPA2jCMGTYsQQrQ/l37VIPVbf1RdM07eW3XNCanf+jc3ibm6ug4CgJ07d7oPHTo0xFTNePLkyb1NcxLu37/fddCgQaEhISHhkZGRYYWFhSqdTof58+f79uvXLyw4ODj83Xff7Wo6TnR0dMjtt98eGBAQ0G/27Nl+er0eTzzxhE9lZaUqNDQ0fPLkyb3Nz20wGDB//nzfoKCgiODg4PBPPvnEs6GYatqyZUuniRMn9jGt79y503306NGBAKDRaAyAcUb86upqZSiE9TSYwJh5PwAtAHdlSVbahBCi/Tn3sw8Muhs/Gw06Fc793GITMSQnJ3f46KOPMtLS0hIvXrzovGfPHreKigqaM2dO3w8//PBiSkpK0v79+1Pc3NwMH374YVcPDw99QkJC8unTp5PXrVvXTavVOgFAfHx8xxUrVlxMS0tLSE9Pd16/fr3nihUrMp2dnQ1arTbpm2++uWGG+vXr13eOj4/vkJycnPjTTz+lvvbaa74XLlxwrCum2mKfMmVK8alTpzqa6n9t3LjRc+bMmddnLRkxYkRQt27dBnTs2FH/8MMP11lTrCU0mMCI6B4AxwDMBHAPgKNENMOaQQkhhM2Yel6WtjdBZGRkad++favVajUiIiLKzp496xQXF+fSvXv36lGjRpUBxt6Mo6Mjfvzxx05ffvlll9DQ0PBBgwaFFRYWOiQlJbmYjhMeHl7l4OCAe+65p+DgwYO1Jh2TgwcPut9zzz0FDg4O6NWrl27YsGElhw4dcq0rptqO4ejoiNtvv71406ZNHtXV1fj555897rvvvqum9w8dOnQmOzv7dFVVlWrHjh2dWup3VhtLRiG+DGCIaf5DIuoG4EcAW6wZmBBC2ISTe1WtycrJvcnlVGpydna+PqpbrVbDVKerNsxMS5cuvTh9+vRi8/adO3e617xF15xbdo2J6b777iv4z3/+071r1676yMjIMk9PzxvuN7q6uvLdd9999auvvuo8derU4rqO01yWPANT1Zi8N9/C/YQQwv70GZMJlcOND4BUDgb0GdPkciqW6N+/f0Vubq7j/v37XQGgsLBQVV1djXHjxhV9/PHH3SorKwkA4uLinE237+Lj4ztqtVonvV6PLVu2aEaOHHkNMBavNG1v7g9/+MO1LVu2aHQ6HS5fvuxw7Ngxt5EjR5Y2NtY777zzWmJiousnn3zS9Z577ikAgKKiIpXpdmR1dTW+++47j9DQ0PKm/0YaZkkP7Hsi2g1go7I+C0C95U+EEMJu+Q43Ps8597MPqq45wcm9Cn3GZF5vtxIXFxfesGHD2aeeesqvoqJC5eLiYjhw4EDqM888cyU9Pd05MjIyjJlJo9FU79q16ywA9OvXr/Sxxx7zS09Pd7n11luL586dexUA5syZkxcWFhber1+/MvPnYHPnzr36yy+/uIWFhUUQEb/xxhuX/Pz8dHFxcY2K1cHBAWPHji3asmVLly+//DIdMBbSvOuuuwKrqqqImenWW28tfv755606D6BF9cCIaDqMX0wGgIPM/JU1g6pJ6oEJISzVIvXA7MDOnTvdly5d6rV37940W8diTc2qBwYAzLwVxjkNhRBCiDahvnpgh5h5BBFdg3Hap+tvAWBmturoEiGEEHWbNGnStUmTJl2z5jnGjRvXNyMjw9m87a233rpUc0CJrdSZwJh5hPLTvfXCEUII0Vbs2bPnrK1jqE99PbB6v3XOzFJuWwghhM3U9wzsBIy3Dmv7LgAD6FNLuxBCCNEq6ruF2Ls1AxFCCCEao84vJBPR4PqW1gxSCCGE5a5cuaJesmRJN/O2kSNHBrm7uw80Tbxrsn37dvfw8PCw0NDQ8KioqJCEhARn2In6ZtRYWs/ynvVDE0KI9slgMECv1ze8YRPl5+er16xZ09287bnnnstetWrV+ZrbLliwwP+LL744r9Vqk2bOnFmwaNEi75rbtFV1JjBmHl3PMqY1gxRCiNa0OWWzZvSXoyP7r+sfNfrL0ZGbUzY3ux5YSkqKU0BAQL+pU6cGBAcHR6xYsaLLwIEDQ8PDw8MmTpzYp6ioSAUATzzxhE/fvn0jgoODw+fNm+cLANOnTw946KGHeg0aNCjU19c38tNPP71eZ+vVV1/1MpVaeeaZZ3oCwLPPPuubkZHhHBoaGj5//nxfAJgyZcq1Tp061Voj5erVq2oAKCoqUnt7e1c391pbS32jEMcw889ENK2295l5m/XCEkII29icslnzr+P/8q/SV6kA4Er5Fad/Hf+XPwDMCpnVrNHXFy9edF6zZs358PDwS3fffXffAwcOpHbq1Mnw8ssv91i8eLHXc889l7tr1y7Pc+fOJahUKly5ckVt2jcnJ8cxJiZGe+rUKZepU6cGPvzww4Xbtm3rlJaW5hIXF5fMzLjjjjsCv/vuO7elS5demjRpUgetVpvUUEwrV65MnzZtWpCzs7PBzc1Nf/z48eTmXGNrqu8W4ijl5921LJOsHJcQQtjEytMrfUzJy6RKX6VaeXpls+uBeXt7V40dO7Z03759Hc+ePesydOjQ0NDQ0PBNmzZ1uXjxolOXLl30zs7OhlmzZgWsW7eus5ub2/Ue0+TJk6+q1WpERUVV5OfnOwLA999/3+nAgQOdwsPDwyMiIsLPnj3rotVqXRoT0/vvv++1bdu2Mzk5OXGzZ8++8vjjj/dq7nW2lvpGIS5Sfj7ceuEIIYRt5Zfn11oHq672xnB1dTUAADNjxIgRxTt27PjdM6lTp04lf/PNN522bNni+fHHH3f/9ddfUwHjZL+mbUxz2DIznn766aznn3/+hnkeU1JSLIr18uXLDsnJyR3GjBlTCgAPPPBA4YQJE4KafIGtzJKClp2J6Ckiep+IlpsWC/brRUR7iSiJiBKJaIHSriGiPUR0Rvnp2dCxhBCitXTp0KXWul91tTfF7bffXhoTE+NmGvFXXFysiouLcy4qKlIVFBSoZ82aVbRy5coMrVbrWt9xJk6cWPz55593NT0/O3/+vGNmZqaDh4eHvrS0tMHP927duulKSkrUcXFxzgCwc+fOToGBgRUtcY2twZLJfHcB+BVAPIBaHwDWQQfgWWY+SUTuAE4Q0R4ADwH4iZmXENGLAF4E8ELjwhZCCOt4bMBjmebPwADASe1keGzAYy1WD6xnz566VatWpd977719qqqqCAAWLVqU6eHhYZg0aVKgqZbX4sWLM+o7zrRp04oTExNdhgwZEgoYe3gbNmw4HxERURkVFVUSFBQUMWbMmKJVq1ZdioqKCjl37pxLeXm52svLq/+KFSvSp0+fXrxs2bILM2bM6EtE8PDw0H/22We/6xW2VQ2WUyGik8zc7O99EdF2AP9RltuZOYuIvAHsY+aQ+vaVcipCCEu1RDmVzSmbNStPr/TJL8936tKhS9VjAx7LbO4ADtE0zS2n8jkRPQpgJ4BKU2Nj5kIkogAAgwAcBeDFzFnKW9kAvCw9jhBCtIZZIbMKJGG1fZYksCoA7wJ4Gb+VVbF4LkQicoOxltjTzFxM9NvUiszMRFRrF5CI5gGYBwB+fn6WnEoIIcRNxJIE9iyAQGZudDVTInKEMXltMPveWA4ReZvdQsytbV9mXg1gNWC8hdjYcwshhGjfGhylAiANQFljD0zGrtYaAMnM/L7ZW98AeFB5/SCA7Y09thBCCGFJD6wUwCki2osbn4E91cB+twGYCyCeiE4pbX8HsATAl0T0JwAXANzT6KiFEELc9CxJYF8rS6Mw8yHUXksMAMY29nhCCCGEuQZvITLzutqW1ghOCCFE49Usp5KamupkKpkSGBgY8a9//atbzX3GjBkTGBQUFNG6kTZPffXAdhDR3cpAjJrv9SGifxDRI9YNTwgh2p/WLqfi5+dXfeLECa1Wq006ceJE8rJly3qkp6df/2xft25d544dO1ovICuprwf2KICRALREdJyIdhHRz0R0HsAqACeYeW2rRCmEEK0osThW83nGishV6e9GfZ6xIjKxONauy6m4uLhwhw4dGADKy8vJYPhtUqWioiLV8uXLvV5//fUs2Jn6JvPNBvA3AH9TvojsDaAcQCozN3pUohBC2IPE4ljNkcK9/nrWqwCgTF/qdKRwrz8ARHQaZLflVNLS0hzvvPPOoIyMDOfXXnvtUkBAQDUALFy40GfBggU55jPf2wtLBnGAmdMBpFs1EiGEaANOFh3xMSUvEz3rVSeLjvg0N4GZyqls3LjRw1ROBQCqq6spKiqqxLycyqRJk67OmjWryLRvQ+VUAKCsrEyl1Wpd+vTp87uJhwMDA6tTU1OT0tPTHe++++7A+++/vzAjI8Px/PnzzmvWrMmwdAb7tsSiBCaEEDeLMn1prR/kdbU3RlsopxIQEFAdGhpa/uOPP7rn5uY6JCQkuPr4+ETqdDoqKChwGDp0aMixY8dSmnutrcGSLzILIcRNw1XdsdayKXW1N0Vrl1M5e/asY0lJCQFAXl6e+vjx424REREVL7zwQl5ubm5cZmZm/IEDB7QBAQGV9pK8gEb2wJTaXb2YOc5K8QghhE0N9rgl0/wZGACoSW0Y7HGL3ZZTmTBhQvELL7zgS0RgZjz55JPZQ4cOLW+p67EVS8qp7AMwGcZkdwLGuQsPM/NCq0enkHIqQghLtUQ5lcTiWM3JoiM+ZfpSJ1d1x6rBHrdkNvf5l2ia5pZT8VBmkf8zgPXMvIiIpAcmhGi3IjoNKpCE1fZZ8gzMQZk1/h4Ya4IJIYQQNmdJAnsDwG4Aacx8nIj6ADhj3bCEEEKI+tV7C5GI1DAO2uhvamPmcwCmWzswIYQQoj719sCYWQ/gvlaKRQghhLCYJYM4DhPRfwBshrE2GACAmU9aLSohhBCiAZY8AxsPIy+GAAAgAElEQVQIIALAPwAsVZb3rBmUEEKIpqtZTgUA1Gp1VGhoaHhoaGj4mDFjAk3tWq3WqX///qF+fn797rrrrj4VFRV11XFscyypBza6lmVMawQnhBDtUWuXUwEAZ2dng1arTdJqtUk///xzmql94cKFvk8++WTOxYsXEzw8PHTLli3rarXAWliDCYyIvIhoDRF9p6yHE9GfrB+aEELYRsHGTZozI/8QmRwWHnVm5B8iCzZusutyKnXFZDAYcOTIEfeHH364EAAeeeSR/B07dnRu7rW2FkuegX0G4FMALyvrqTA+D1tjpZiEEMJmCjZu0uQuWeLPlZUqANDl5TnlLlniDwCa++6123IqVVVVqn79+oWp1Wp+7rnnsufOnXs1JyfHwd3dXe/oaKxtGRAQUJWTk2M3s9JbksC6MvOXRPQSADCzjojsrnKnEEJYIn/FCh9T8jLhykpV/ooVPs1NYLYsp3LmzJm43r17VyclJTmNGzcuZPDgweUajcauP8stSWClRNQFAAMAEQ0HUFT/LsLefB2biXd3p+Dy1XL07NwBz/9PCP44yMfWYQnR6nRXrtTaA6mrvTFsWU6ld+/e1QAQHh5eNXz48GvHjh1zffDBBwuvXbumrq6uhqOjI9LT0528vLxabNZ9a7NkFOJCAN8A6EtEhwGsB/BUQzsR0VoiyiWiBLO214kok4hOKcudTY5ctJivYzPx0rZ4ZF4tBwPIvFqOl7bF4+vYFpt8Wwi74dC1a60f4HW1N0Vrl1PJy8tTl5eXEwBkZWU5xMTEuPXv379cpVJh+PDh10zP1NauXdtl0qRJV1vqOq3Nkh5YIoBRAEIAEIAUWJb4PgPwHxgTnrkPmFmG4bch7+5OQXn1jXcSyqv1eHd3ivTCxE2nyxNPZJo/AwMAcnY2dHniCbstpzJjxozCv/zlL/6mcipPP/10dlRUVAUALF269NKsWbP6vvnmmz4RERFlCxYssHjWfluzpJzKSWYe3FBbHfsGANjJzP2U9dcBlDQ2gUk5Fevq/eK3qO1/AQE4v+Su1g5HiGZpiXIqBRs3afJXrPDRXbni5NC1a1WXJ57IbO7zL9E0TSqnQkQ9APgA6EBEg2D8PAOATgDq7dY24EkiegBADIBnmbmwjvPPAzAPAPz8/JpxOtGQnp07IPPq72vb9ezcwQbRCGF7mvvuLZCE1fbVdyvwf2CcccMXwPv4bRaOZwD8vYnn+xhAXxhn98hSjlcrZl7NzNHMHN2tW7e6NhMt4Pn/CUEHR/UNbR0c1Xj+f0JsFJEQQjSszh4YM68DsI6IpjPz1pY4GTPnmF4T0SeQ+mJtguk5l4xCFELYE0sn810DoCczTySicAC3MHOjv8hMRN7MnKWsTgWQUN/2ovX8cZCPJCwhhF2xZDThpzAWtOyprKcCeLqhnYhoI4AjAEKI6JIy/dS/iCieiOIAjIbxdqQQQgjRaFabiYOZa6sjJtNPCSGEaBGW9MBkJg4hhBA3qK1ky8iRI4Pc3d0Hjh49OrCu/UxaooxLU2fi+GtjTySEEKL9qK1ky3PPPZe9atWq302PVZuWKONiST2wkzDOxHErgPkAIpg5rrEnEkIIu5GYoMHn6yKx6uMofL4uEokJzSqnUlxcrLr99tsDQ0JCwoOCgiI++eQTzy1btnTq3bt3RHh4eNhDDz3Uy9RrWbhwYc/XXnvNy7RvUFBQhGluwxUrVmgiIyPDQkNDw2fPnu2v0+kAANu2betUszTLgQMHXE0FLIODg8OJKAoAEhMTnUeOHBkUERERFhUVFRIbG+sCtEzJlilTplzr1KmToaHfR0uVcWnwGRgRqQHcCSBA2X68Mh3J+409mRBCtHmJCRoc+cUfer3xD/yyMicc+cUfABDRr0lfbt62bVunHj16VO/bty8NMPZeIiIiIvbs2ZMSERFROWnSpD4NHePkyZMuW7Zs0cTExGidnZ35/vvv91u5cmWX6dOnF7399tveNUuzvPfee1mmcirz58/3HT16dDEA/PnPf/ZfvXr1hcjIyMqff/654+OPP+5nmjC4uSVbLNVSZVwsGcSxA0AFgHgADWZWIYSwaydP+FxPXiZ6vQonT/g0NYENHjy4/OWXX+71+OOP+0yZMqWoU6dOel9f38rIyMhKAJgzZ07+f//733pnbPj+++/dExISXAcMGBAGABUVFaru3bvr9u3b17G20iym/T755BPPuLg414MHD6YWFRWpYmNj3WbOnNnX9L5pLkag+SVbWpslCcyXmftbPRIhhGgLyspq7wnU1W6B/v37V548eTJp69atHq+++qrPqFGjiuva1sHBgQ2G3/oKpol9mZlmzpyZ/9FHH90wqfD//u//etRVmuX48eMu//znP3seOnQoxcHBAXq9Hu7u7rq6ek3NLdliKS8vL11LlHGxZBDHd0Q0vgkxCiGE/XF1rf2DtK52C6Snpzu6u7sbnnjiiYKFCxdmHz161C0zM9MpMTHRGQA2bdp0/RlbQEBA5alTpzoCwKFDh1wzMzOdAWDChAnFO3fu9MzMzHQAgJycHHVqaqpTXaVZrly5op4zZ06fTz/99HzPnj11AKDRaAy+vr5Va9eu9QSuP4uqd9JTS0u2NEZLlXGxpAf2K4CviEgFoBrGSX2ZmTs19mRCCNHmDY7KvOEZGACo1QYMjmpyOZUTJ050eOmll3xVKhUcHBx4xYoVF3Jzcx0mTZoU2KFDB8OwYcNKSkpK1ADwwAMPFG7YsKFLYGBgxKBBg0r9/f0rACAqKqrilVdeyRw7dmywwWCAo6MjL1++/OLYsWNLayvNsn//fofLly87z58/P8AUh1arTdq4ceO5Rx991P+dd97x1ul0NHXq1IJbbrnl97N5Kywt2bJq1apLUVFRIefOnXMpLy9Xe3l59V+xYkX69OnTa+1ttkQZF0vKqZwHMAVAPDe0sZVIORUhhKVaopwKEhM0OHnCB2VlTnB1rcLgqMymPv+yxM6dO92XLl3qtXfv3jRrncNeNamcipkMAAm2Sl5CCNHqIvoVWDNhiZZhSQI7B2AfEX0HoNLUKMPohRCiZUyaNOnapEmTrtk6DmsYN25c34yMDGfztrfeeutSXbcWG8OSBHZeWZyURQghhLDInj17zlrr2A0mMGZ+w1onF0IIIZrKkpk4ugH4G4AIAC6mdmYeY8W4hBBCiHpZMoZ/AwAtgN4A3gCQDuC4FWMSQgghGmRJAuuiVF+uZub9zPwIAOl9CSGEsClLEli18jOLiO4iokEAmjUzsxBCCPvW3Hpgb7/9djc/P79+RBSVlZVlyYDC37Ekgb1JRB4AngXwHID/AnimKScTQgjRPjS3HtioUaNK9uzZk9qzZ88mT9FVbwJTSqkEMXMRMycw82hmjmLmb5p6QiGEaOvi91/SfPrCociPHvs56tMXDkXG778k9cBasB4YANx2223lISEhzZrRvt4Exsx6APc15wRCCGFP4vdf0hz+vzT/sqIqJwAoK6pyOvx/af7NSWKmemApKSlJZ86cSZw2bVrxk08+GfDNN9+kJSQkJOfm5jo2dAzzemBarTZJpVLxypUru2RlZTmY6oElJSUlDx48uGzx4sVef/jDH8q0Wm2SVqtNGj16dPG8efNyAGM9sBUrVlxMTExMfvfddy89/vjjfqZzmOqBbd++/cyiRYt8TLGb6oElJycnnTp1ytVUD6xXr16VWq02adWqVZea+rtpDkvuOx4mov8A2Ayg1NSoVGquExGtBTAJQC4z91PaNMpxAmAczXgPMxc2KXIhhLCCmF3pPnqd4YY/7vU6gypmV7pP5ChfqQdmZ/XABio//2HWxmh4JOJnAP4DYL1Z24sAfmLmJUT0orL+gmWhCiGE9Zl6Xpa2W0LqgVlHg4M4lOdeNZcGh9Ez8wEANf9amQJgnfJ6HYA/NjpiIYSwIlcPp1p7FnW1W0LqgVmHRUMXiegu/H4mjn/UvUedvJg5S3mdDcCrvo2FEKK1Rd8ZkHn4/9L8zW8jqh1Uhug7A6QeGFquHtibb77Z/d///neP/Px8xwEDBoSPHj26aPPmzRca83u1pB7YSgCuAEbDOIR+BoBjzPynBg9OFABgp9kzsKvM3Nns/UJm9qxj33kA5gGAn59f1IULjbouIcRNqiXqgcXvv6SJ2ZXuU1ZU5eTq4VQVfWdAZlOff1lC6oHVrbn1wG5l5v5EFMfMbxDRUgDfNTGWHCLyZuYsIvIGkFvXhsy8GsBqwFjQsonnE0KIRosc5VtgzYQlWoYlCczUtSwjop4A8gF4N/F83wB4EMAS5ef2Jh5HCCHaDakH1jSWJLCdRNQZwLsATsI4AvGThnYioo0AbgfQlYguAVgEY+L6koj+BOACgHuaGLcQQgg7YOt6YIuVl1uJaCcAF2YusmC/ur4APbYR8QkhhBC1sqQemAuAJwCMgLH3dYiIPmbmCmsHJ4QQQtTFkluI6wFcA/BvZX02gM8BzLRWUEIIIURDLElg/Zg53Gx9LxHV+i1uIYQQorVY8i3qk0Q03LRCRMMAxFgvJCGEELWJjY11GThwYKiTk9Ng8xnrAWDmzJkBGo1mQFBQUERDxxk6dGjIgQMHXK0XaeuwJIFFAfiFiNKJKB3AEQBDiCieiOKsGp0QQojrunfvrlu2bNnF+fPn59R875FHHrnyzTffnLFFXLZiyS3ECVaPQggh2pDs8wWajJQrPtWVOidHZ4eqXiFdM3v01jT5i81PPPGET69evapeeumlPMBY88vV1VWfnp7ufPjwYXdvb+8qR0dHfuihh/Iffvjhws2bN3u8+OKLvq6uroYhQ4aUXLhwwXnv3r1pPj4+Oh8fH9327ds71zzHxIkTSxozwe6nn37aZd68eQF6vZ5Wr159fvTo0WULFy7smZGR4XThwgXny5cvOz322GM5r7zySp0TTtiaJZP5XqhvaY0ghRCitWSfL9CcT8jxr67UOQFAdaXO6XxCjn/2+YIm1wObM2dOwbZt267vv337dk9vb+/qjIwMp7S0tMRNmzadj42NdQOAsrIyWrBggf933313JjExMTk/P9+iOWsbq7y8XKXVapOWL19+Yd68eb1N7WlpaS779+9PPX78ePJ7773X0zQbfltk05mEhRCirclIueLDBr7hs5ENrMpIueLT1GPedttt5fn5+Q7p6emOR44c6eDh4aE/ceJEx2nTphWq1Wr4+fnphg8ffg0ATp065dKrV6/K0NDQKgC49957rTKl1ezZswsAY8+tpKREdeXKFTUAjB8//mqHDh3Y29tbp9Foqi9dumSVBNoS2mxgQrRZcV8CP/0DKLoEePgCY18D+sukMu2FqedlabulJk+eXPjFF194ZmdnO06bNq3g3Llzzg3vZT1EVOu6s7Pz9bln1Wo1dDqd9MCEaBfivgR2PAUUZQBg488dTxnbRbvg6OxQa92vutotdf/99xds3bpVs3PnTs+5c+cWjhgxouTrr7/21Ov1yMjIcDh69Kg7APTv378iIyPD2fQ8a/PmzU2+dVmfjRs3egLA7t273dzd3fVdunTRW+M81iQ9MCEa46d/ANU1SidVlxvbpRfWLvQK6Zp5PiHH3/w2IqnI0Cuka5PrgQFAdHR0RWlpqcrLy6vK39+/+sEHHyz88ccf3QMDAyO8vb2rIiIiyjp37qx3c3Pj999//8KECROCXF1dDQMGDCg1HePixYsOQ4YMCS8tLVUTEa9atcorOTk5QaPRGO6+++7ev/76q3thYaGDl5dX/xdffPHyM888U2cJGRcXFw4LCwvX6XS0evXq31VztgcN1gNrC6KjozkmRr56ZjNZscDZH4CKq4BLZ6DveMB7kK2jso3XO8M4o1pNBLx+tbWjEbVoiXpgLT0KsS5FRUUqDw8PQ3Z2tnrIkCFhhw8f1vr5+elM7QaDAQ888IBfUFBQxaJFi9rsaEBram49MHEzy4oFkr8CDNXG9YqrxnXg5kxiHr7K7cNa2kW70aO3psAaCaumcePGBRUXF6urq6vp+eefz/Lz89MBwIcffth148aNXaurqykiIqJs4cKFFiffm4kkMDtXtGMHcj/4ELqsLDh4e6P7M0/D4+67W+4EZ3/4LXmZGKqN7TdjAhv7mvGZl/ltRMcOxnYhGunYsWMptbUvWrQotyV6XHPnzvU7fvy4m3nb448/nrNgwYL85h67LZAEZseKduxA1quvgSuMhQF0ly8j61XjB2mLJbGKOm6L1dXe3pmec8koRGEHPv/884u2jsGaJIHZsdwPPryevEy4ogK5H3zYcgnMpXPtycrldxMB3Dz63yMJS4g2QIbR2zFdVlaj2puk73hA5Xhjm8rR2C6EEDYkCcyOOXh7N6q9SbwHAWFTf+txuXQ2rt+Mz7+EEG2KJDA71v2Zp0EuLje0kYsLuj/zdMueyHsQMOIF4I5/Gn9K8hLCJuoqp1JWVkaRkZFhISEh4YGBgRHPPPNMT1vG2VrkGVgznClJwrHCgyjRF8NN3QlDPUciyC284R1biOk5l1VHIQoh2gxTOZUtW7Z4mre7uLjwoUOHUjw8PAyVlZU0ZMiQkJ9++qlo7NixpXUdqz2wSQJT6opdA6AHoKv5pUN7cKYkCQfyd0PHOgBAib4YB/J3A0CrJzFJWEK0rFN7dml+3bLRp/RqoVPHzp5Vw2fclzlw3J1ttpyKSqWCh4eHAQCqqqpIp9NRzbkO2yNb3kIczcwD7TF5AcCxwoPXk5eJjnU4VnjQRhEJIVrCqT27NPvWfeJferXQCQBKrxY67Vv3if+pPbvadDkVnU6H0NDQcC8vrwGjRo0qHjNmTLvufQHyDKzJSvTFjWoXQtiHX7ds9NFXV9/w2aivrlb9umVjmy6n4uDgAK1Wm3Tx4sW4kydPdjx+/LhLw3vZN1slMAbwAxGdIKJ5NoqhWdzUnRrVLoSwD6ael6XtljKVU9mwYYNm2rRpVpumqmvXrvqRI0de27Fjh4e1ztFW2CqBjWDmwQAmAvgLEf2h5gZENI+IYogoJi8vr/UjbMBQz5FwoBt79g7kgKGeI20UkRCiJXTs7Flr2ZS62i1lzXIqly9fdjAVpCwpKaG9e/d2CgsLq2hoP3tnk0EczJyp/Mwloq8ADAVwoMY2qwGsBoyz0bd6kA0wDdSw5ShEIUTLGz7jvsx96z7xN7+NqHZ0NAyfcV+bLaeSkZHh+NBDD/XW6/VgZpoyZUrBfffdV9SceO1BqycwIuoIQMXM15TX4wH8o7XjaAlBbuGSsIRoZ0yjDVtyFKJJampqkum1Wq3Gxx9/fMm8nEpUVFQZANx1113XZs+enWgqpxIVFVUKAH5+frqcnJy4mscdNmxYeXJyclLN9vbOFj0wLwBfKUM8HQD8LzN/b4M4hBCiVgPH3VnQEgmrIVJOpXlaPYEx8zkAA1r7vEII0dZYu5xKeyfD6IUQQtglSWBCCCHskiQwIYQQdkkSmBBCCLt0Uyewb899i/FbxqP/uv4Yv2U8vj33ra1DEkIIYaGbNoF9e+5bvP7L68gqzQKDkVWahdd/eV2SmBCizWqpemA+Pj6RWVlZdl9Oy+4voKmWnVyGCv2NM61U6Cuw7OQy3NXnLhtFJYRoC7KS4zUZsTE+1eVlTo4dXKt6DYrO9A6LtPr3whoi9cBudNMmsOzS7Ea1CyFuDlnJ8ZrzRw/7s16vAoDq8jKn80cP+wNAU5NYW6wH9sYbb/T4+eefOzk7O/PGjRvP9evXr3L69OkB7u7u+tOnT3fMy8tzXLx48aWHH364sCnX3Bpu2luIPTr2aFS7EOLmkBEb42NKXias16syYmOaXE6lLdYD8/Dw0KWmpibNnz8/969//WsvU3tOTo5jTEyMdvv27WcWLVrU5GtuDTdtAlsweAFc1DeWy3FRu2DB4AU2ikgI0RZUl5fVWjalrnZLtMV6YA8++GABADz66KMFpuQJAJMnT76qVqsRFRVVkZ+f79jUa24NN+0tRNNzrmUnlyG7NBs9OvbAgsEL2s3zr4y8ciRmlKC8yoAOTipE9HJDr24dbB2WEG2eYwfXqtqSlWMH12aVUzHVA8vOznacNm1awblz55ybc7y6mNcDGzJkSJ0lVVSq3/ovRHS94oeLi8v118xtrhDIDW7aHhhgTGI/zPgBcQ/G4YcZP7Sr5BV7vhjlVQYAQHmVAbHni5GRV27jyIRo+3oNis4ktdpg3kZqtaHXoOhmlVNpa/XA1q9frwGANWvWeA4aNMguB3vctD2w9iwxowR6w41teoOxXXphQtTPNFCjpUchtrV6YIWFherg4OBwJycn3rRp07nmXJutUFvvIgLGgpYxMTG2DsNufPVrTp3vTR3uVed7QrQHRHSCmaPN206fPp0+YMCANleSpKioSGVeD+zw4cNaPz8/nandVA8sKCio4madnf706dNdBwwYEFDbe9IDa4c6OKmu3z6s2S6EaDukHljzSAJrhyJ6uSH2fPENtxHVKmO7EKLtsHY9sHHjxvXNyMi4YbDIW2+9dWn69OnFzT12WyAJrB0yPeeSUYhC3Nz27Nlz1tYxWJMksHaqV7cOkrCE+I3BYDCQSqVq+w/9xXUGg4EA/P55iEIeigghbgYJeXl5HsoHorADBoOB8vLyPAAk1LWN9MCEEO2eTqf7c3Z29n+zs7P7Qf5wtxcGAAk6ne7PdW3QLhNY6tFsHNl+FiUFlXDTOOOWKX0RPKyWOQ7PpALHjgIlJYCbGzB0GBAU3PoBCyGsKioqKhfAZFvHIVqWTf4SIaIJRJRCRGlE9GJLHjv1aDb2btCipKASAFBSUIm9G7RIPVpjlvkzqcCB/cbkBRh/HthvbBdCCNHmtXoCIyI1gI8ATAQQDuA+IgpvqeMf2X4WuhrfgdJVGXBke43BOMeOAjrdjW06nbFdCCFEm2eLHthQAGnMfI6ZqwBsAjClpQ5u6nk12G7qef1uwzrahRBCtCm2SGA+ADLM1i8pbTcgonlEFENEMXl5eRYf3E1T+wTPv2t3q+NLvXW1CyGEaFPa7GgcZl7NzNHMHN2tWzeL97tlSl841JgyycFJhVum9L1xw6HDAIcaY1gcHIztQggh2jxbjELMBNDLbN1XaWsRptGGDY5CNI02lFGIQghhl2yRwI4DCCKi3jAmrnsBzG7JEwQP61H7sPmagoIlYQkhhJ1q9QTGzDoiehLAbgBqAGuZObG14xBCCGHfbPJFZmbeBWCXLc4thBCifWizgziEEEKI+kgCE0IIYZckgQkhhLBLksCEEELYJWJu+/XdiCgPwAVbx9FEXQFcsXUQLaC9XAcg19IWteR1+DOz5bMfCLtlFwnMnhFRDDNH2zqO5mov1wHItbRF7eU6ROuSW4hCCCHskiQwIYQQdkkSmPWttnUALaS9XAcg19IWtZfrEK1InoEJIYSwS9IDE0IIYZckgTUDEa0lolwiSjBr0xDRHiI6o/z0VNqJiJYTURoRxRHRYNtF/ntE1IuI9hJREhElEtECpd2uroeIXIjoGBGdVq7jDaW9NxEdVeLdTEROSruzsp6mvB9gy/hrQ0RqIoolop3Kul1eCxGlE1E8EZ0iohilza7+f4m2RRJY83wGYEKNthcB/MTMQQB+UtYBYCKAIGWZB+DjVorRUjoAzzJzOIDhAP5CROGwv+upBDCGmQcAGAhgAhENB/AOgA+YORBAIYA/Kdv/CUCh0v6Bsl1bswBAstm6PV/LaGYeaDZk3t7+f4m2hJllacYCIABAgtl6CgBv5bU3gBTl9SoA99W2XVtcAGwHMM6erweAK4CTAIbB+CVZB6X9FgC7lde7AdyivHZQtiNbx252Db4wfrCPAbATANnxtaQD6FqjzW7/f8li+0V6YC3Pi5mzlNfZALyU1z4AMsy2u6S0tTnKradBAI7CDq9HueV2CkAugD0AzgK4ysw6ZRPzWK9fh/J+EYAurRtxvT4E8DcABmW9C+z3WhjAD0R0gojmKW129/9LtB02qQd2s2BmJiK7GuZJRG4AtgJ4mpmLiej6e/ZyPcysBzCQiDoD+ApAqI1DahIimgQgl5lPENHtto6nBYxg5kwi6g5gDxFpzd+0l/9fou2QHljLyyEibwBQfuYq7ZkAeplt56u0tRlE5Ahj8trAzNuUZru9Hma+CmAvjLfZOhOR6Q8281ivX4fyvgeA/FYOtS63AZhMROkANsF4G3EZ7PNawMyZys9cGP+wGAo7/v8lbE8SWMv7BsCDyusHYXyWZGp/QBldNRxAkdmtE5sjY1drDYBkZn7f7C27uh4i6qb0vEBEHWB8jpcMYyKboWxW8zpM1zcDwM/M3CZ6Acz8EjP7MnMAgHthjG0O7PBaiKgjEbmbXgMYDyABdvb/S7Qxtn4IZ88LgI0AsgBUw3iP/k8wPnP4CcAZAD8C0CjbEoCPYHweEw8g2tbx17iWETA+o4gDcEpZ7rS36wHQH0Csch0JAF5T2vsAOAYgDcD/AXBW2l2U9TTl/T62voY6rut2ADvt9VqUmE8rSyKAl5V2u/r/JUvbWmQmDiGEEHZJbiEKIYSwS5LAhBBC2CVJYEIIIeySJDAhhBB2SRKYEEIIuyQJTAghhF2SBCbaNSL6jIhmNLxlnfu/TkTP1fHe00T0QCOOFUBmpXdqvLeJiIKaGqcQNyNJYKLVmE1/ZPeUa3kEwP+20CE/hnHSXiGEhSSBtXPKX/1apSeSSkQbiOgOIjqsFBEcqmzXkYwFOo8pxROnKO0PEdHXSrHBdCJ6kogWKtv8SkQaZbuBynocEX1lVphwHxF9qBQwfJmIzitzLoKIOpmv1xJ7IBH9SMbilCeJqC8RuRHRT8p6vClOZfsHlPOfJqLPzQ71ByL6hYjOmffGiOh5Ijqu7POGWfvLyu/qEICQOn61YwCcZGVWeOU6PyCiGCJKJqIhRLRN+R2/abafg/JvkExEW4jIVWk/COCO9pTkhbA6W08FIot1FxjrlekARKEmYxwAAAN2SURBVML4B8sJAGthnKpnCoCvle3eBnC/8rozgFQAHQE8BOPURO4AusFYouMxZbsPYJy1HjBO3TRKef0PAB8qr/cBWGEWz6cA/qi8ngdgaT2xHwUwVXntAmN9LwcAnZS2rkpsBCBCibmr8p5pSqLPYJxeSQUgHECa0j4ewGplXxWMtbb+ACAKxqmLXAF0Uo7/XC2xvQHgr2br+wC8o7xeAOAyjPWtnGGcZqyL8m/BAG5TtltrfmwYS79E2fr/jCyy2MsiPbCbw3lmjmdmA4zz0P3EzAzjB3WAss14AC+SsY7WPhgThp/y3l5mvsbMeTAmsB1KezyAACLyANCZmfcr7etgTAYmm81e/xfAw8rrh2FMaL+jTPzqw8xfAQAzVzBzGYwJ520iioNx7jwfGGtIjQHwf8x8Rdm+wOxwXzOzgZmT8Fu9qfHKEgtj0ctQGKv/jgTwFTOXMXMxjJPK1sYbQF6NNtO28QASmTmLmSsBnMNvM6tnMPNh5fUXMM5BaZILoGcd5xNC1CC3K24OlWavDWbrBvz2f4AATGfmFPMdiWiYhfvXp9T0gpkPK7c1bwegZuZaBzXUYw6MPcEoZq5WSo24NLCPefxk9vOfzLzKfEMietrCOMprOa/576Xm78z0e6o5+aj5uotyXCGEBaQHJkx2A/irUlYFRDTI0h2ZuQhAIRGNVJrmAthfzy7rYRz8UGvvSznmNQCXiOiPSjzOyvMiDxiLPFYT0WgA/souPwOYSURdlO01DYS9G8AjZCzgCSLyIWOhxQMA/khEHZRe4N117J8MILCBc9TGj4huUV7PBnDI7L1gGGfQF0JYQBKYMFkMwBFAHBElKuuN8SCAd5VbewNhfA5Wlw0APGEsR1OfuQCeUo75C4Aeyr7RRBQP4AEAWgBg5kQAbwHYT0SnAbxf+yGNmPkHGJPoEeVYWwC4M/NJGG95ngbwHYDjdRziO9x4m9RSKQD+QkTJMP4OPgYAIvICUM7M2U04phA3JSmnIlqdMhJwCjPPtXUszUFEXwH4GzOfaYFjPQOgmJnXND8yIW4O8gxMtCoi+jeAiTAWy7R3L8I4mKPZCQzAVQCfN7iVEOI66YEJmyOijwDcVqN5GTPX+YxMCCEkgQkhhLBLMohDCCGEXZIEJoQQwi5JAhNCCGGXJIEJIYSwS5LAhBBC2KX/BxzXiRd/rQj3AAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6ffa2cd128>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# https://stackoverflow.com/questions/4700614/how-to-put-the-legend-out-of-the-plot\n",
"ax = plt.subplot(111)\n",
"for name, row in df.iterrows():\n",
" plt.scatter(row.cuda_memory_cached, row.nb_param_m, label=name)\n",
" \n",
"# Shrink current axis by 20%\n",
"box = ax.get_position()\n",
"ax.set_position([box.x0, box.y0, box.width * 0.8, box.height])\n",
"\n",
"# Put a legend to the right of the current axis\n",
"ax.legend(loc='center left', bbox_to_anchor=(1, 0.5))\n",
"plt.xlabel('memory_cached (mb)')\n",
"plt.ylabel('parameters (million)')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"ExecuteTime": {
"end_time": "2018-09-19T02:06:50.988572Z",
"start_time": "2018-09-19T02:06:50.629796Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f7014083198>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# https://stackoverflow.com/questions/4700614/how-to-put-the-legend-out-of-the-plot\n",
"ax = plt.subplot(111)\n",
"for name, row in df.iterrows():\n",
" plt.scatter(row.cuda_memory_allocated, row.nb_param_m, label=name)\n",
" \n",
"# Shrink current axis by 20%\n",
"box = ax.get_position()\n",
"ax.set_position([box.x0, box.y0, box.width * 0.8, box.height])\n",
"\n",
"# Put a legend to the right of the current axis\n",
"ax.legend(loc='center left', bbox_to_anchor=(1, 0.5))\n",
"plt.xlabel('memory_cached (mb)')\n",
"plt.ylabel('parameters (million)')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "jupyter3",
"language": "python",
"name": "jupyter3"
},
"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.5.3"
},
"toc": {
"colors": {
"hover_highlight": "#DAA520",
"navigate_num": "#000000",
"navigate_text": "#333333",
"running_highlight": "#FF0000",
"selected_highlight": "#FFD700",
"sidebar_border": "#EEEEEE",
"wrapper_background": "#FFFFFF"
},
"moveMenuLeft": true,
"nav_menu": {
"height": "12px",
"width": "252px"
},
"navigate_menu": true,
"number_sections": true,
"sideBar": false,
"threshold": 4,
"toc_cell": false,
"toc_section_display": "block",
"toc_window_display": false,
"widenNotebook": false
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment