Skip to content

Instantly share code, notes, and snippets.

@dmitryhd
Created August 21, 2017 09:27
Show Gist options
  • Select an option

  • Save dmitryhd/61ac709dabce5a5ffa9a84f05582e0de to your computer and use it in GitHub Desktop.

Select an option

Save dmitryhd/61ac709dabce5a5ffa9a84f05582e0de to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 119,
"metadata": {
"ExecuteTime": {
"end_time": "2017-08-21T09:03:51.701483Z",
"start_time": "2017-08-21T09:03:51.690663Z"
},
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np\n",
"import pandas as sp"
]
},
{
"cell_type": "code",
"execution_count": 159,
"metadata": {
"ExecuteTime": {
"end_time": "2017-08-21T09:11:21.085614Z",
"start_time": "2017-08-21T09:11:21.047008Z"
},
"collapsed": true
},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import matplotlib\n",
"import seaborn as sns\n",
"\n",
"%matplotlib inline\n",
"\n",
"plt.rcParams[\"figure.figsize\"] = (10., 10.)\n",
"%config InlineBackend.figure_format = 'retina'\n",
"\n",
"sns.set_style('dark')\n",
"# in case of missing cyrillic fonts\n",
"matplotlib.rc('font', family='Arial')\n",
"\n",
"import pandas as pd\n",
"\n",
"pd.set_option('display.width', 1000)\n",
"pd.set_option('display.max_columns', 500)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Intersect series\n",
"\n",
"Find index in pd.Series which is in the other pd.Series"
]
},
{
"cell_type": "code",
"execution_count": 120,
"metadata": {
"ExecuteTime": {
"end_time": "2017-08-21T09:03:52.218867Z",
"start_time": "2017-08-21T09:03:52.212025Z"
},
"collapsed": true
},
"outputs": [],
"source": [
"timings = {}"
]
},
{
"cell_type": "code",
"execution_count": 162,
"metadata": {
"ExecuteTime": {
"end_time": "2017-08-21T09:11:51.050792Z",
"start_time": "2017-08-21T09:11:50.071404Z"
},
"collapsed": true
},
"outputs": [],
"source": [
"n_series1 = 10 ** 5\n",
"n_series2 = 5 * 10 ** 6\n",
"index1 = np.random.binomial(1000, 0.1, n_series1)\n",
"index2 = np.random.binomial(1000, 0.15, n_series2)\n",
"\n",
"df1 = pd.Series(index1)\n",
"df2 = pd.Series(index2)"
]
},
{
"cell_type": "code",
"execution_count": 163,
"metadata": {
"ExecuteTime": {
"end_time": "2017-08-21T09:12:04.364196Z",
"start_time": "2017-08-21T09:11:51.757179Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2.11 s ± 121 ms per loop (mean ± std. dev. of 5 runs, 1 loop each)\n"
]
},
{
"data": {
"text/plain": [
"<TimeitResult : 2.11 s ± 121 ms per loop (mean ± std. dev. of 5 runs, 1 loop each)>"
]
},
"execution_count": 163,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%%timeit -r 3 -o\n",
"active_users = set(df1)\n",
"index = df2.apply(lambda x: x in active_users) # Find in set"
]
},
{
"cell_type": "code",
"execution_count": 164,
"metadata": {
"ExecuteTime": {
"end_time": "2017-08-21T09:12:04.375375Z",
"start_time": "2017-08-21T09:12:04.370124Z"
},
"collapsed": true
},
"outputs": [],
"source": [
"timings['set'] = _.all_runs"
]
},
{
"cell_type": "code",
"execution_count": 165,
"metadata": {
"ExecuteTime": {
"end_time": "2017-08-21T09:13:44.922290Z",
"start_time": "2017-08-21T09:12:04.380540Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"16.9 s ± 819 ms per loop (mean ± std. dev. of 5 runs, 1 loop each)\n"
]
},
{
"data": {
"text/plain": [
"<TimeitResult : 16.9 s ± 819 ms per loop (mean ± std. dev. of 5 runs, 1 loop each)>"
]
},
"execution_count": 165,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%%timeit -r 3 -o\n",
"active_users = df1.unique()\n",
"index = df2.apply(lambda x: x in active_users) # Find in np.array where only unique elements"
]
},
{
"cell_type": "code",
"execution_count": 166,
"metadata": {
"ExecuteTime": {
"end_time": "2017-08-21T09:13:44.928076Z",
"start_time": "2017-08-21T09:13:44.924733Z"
},
"collapsed": true
},
"outputs": [],
"source": [
"timings['array'] = _.all_runs"
]
},
{
"cell_type": "code",
"execution_count": 167,
"metadata": {
"ExecuteTime": {
"end_time": "2017-08-21T09:14:46.018050Z",
"start_time": "2017-08-21T09:13:44.931032Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"10.3 s ± 330 ms per loop (mean ± std. dev. of 5 runs, 1 loop each)\n"
]
},
{
"data": {
"text/plain": [
"<TimeitResult : 10.3 s ± 330 ms per loop (mean ± std. dev. of 5 runs, 1 loop each)>"
]
},
"execution_count": 167,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%%timeit -r 3 -o\n",
"index = df2.apply(lambda x: x in df1) # Find in pd.Series (Why is quicker than unique np.array?)"
]
},
{
"cell_type": "code",
"execution_count": 168,
"metadata": {
"ExecuteTime": {
"end_time": "2017-08-21T09:14:46.026233Z",
"start_time": "2017-08-21T09:14:46.022191Z"
},
"collapsed": true
},
"outputs": [],
"source": [
"timings['series'] = _.all_runs"
]
},
{
"cell_type": "code",
"execution_count": 169,
"metadata": {
"ExecuteTime": {
"end_time": "2017-08-21T09:14:53.475799Z",
"start_time": "2017-08-21T09:14:46.030574Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1.24 s ± 15 ms per loop (mean ± std. dev. of 5 runs, 1 loop each)\n"
]
},
{
"data": {
"text/plain": [
"<TimeitResult : 1.24 s ± 15 ms per loop (mean ± std. dev. of 5 runs, 1 loop each)>"
]
},
"execution_count": 169,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%%timeit -r 3 -o\n",
"#---------- Best way #1 ---------\n",
"active_users = set(df1)\n",
"index = df2.isin(active_users) # Isin is set"
]
},
{
"cell_type": "code",
"execution_count": 170,
"metadata": {
"ExecuteTime": {
"end_time": "2017-08-21T09:14:53.484128Z",
"start_time": "2017-08-21T09:14:53.479895Z"
},
"collapsed": true
},
"outputs": [],
"source": [
"timings['isin'] = _.all_runs"
]
},
{
"cell_type": "code",
"execution_count": 171,
"metadata": {
"ExecuteTime": {
"end_time": "2017-08-21T09:15:01.539035Z",
"start_time": "2017-08-21T09:14:53.488495Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1.33 s ± 27.9 ms per loop (mean ± std. dev. of 5 runs, 1 loop each)\n"
]
},
{
"data": {
"text/plain": [
"<TimeitResult : 1.33 s ± 27.9 ms per loop (mean ± std. dev. of 5 runs, 1 loop each)>"
]
},
"execution_count": 171,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%%timeit -r 3 -o\n",
"#---------- Best way #2 ---------\n",
"active_users = df1.unique()\n",
"index = df2.isin(active_users) # Isin in np.array unique"
]
},
{
"cell_type": "code",
"execution_count": 172,
"metadata": {
"ExecuteTime": {
"end_time": "2017-08-21T09:15:01.548151Z",
"start_time": "2017-08-21T09:15:01.543337Z"
},
"collapsed": true
},
"outputs": [],
"source": [
"timings['isin_array'] = _.all_runs"
]
},
{
"cell_type": "code",
"execution_count": 173,
"metadata": {
"ExecuteTime": {
"end_time": "2017-08-21T09:15:16.551327Z",
"start_time": "2017-08-21T09:15:01.552563Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2.47 s ± 74.8 ms per loop (mean ± std. dev. of 5 runs, 1 loop each)\n"
]
},
{
"data": {
"text/plain": [
"<TimeitResult : 2.47 s ± 74.8 ms per loop (mean ± std. dev. of 5 runs, 1 loop each)>"
]
},
"execution_count": 173,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%%timeit -r 3 -o\n",
"index = df2.isin(df1) # Isin in pd.Series"
]
},
{
"cell_type": "code",
"execution_count": 174,
"metadata": {
"ExecuteTime": {
"end_time": "2017-08-21T09:15:16.563085Z",
"start_time": "2017-08-21T09:15:16.555943Z"
},
"collapsed": true
},
"outputs": [],
"source": [
"timings['isin_series'] = _.all_runs"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"https://docs.scipy.org/doc/numpy/reference/generated/numpy.intersect1d.html"
]
},
{
"cell_type": "code",
"execution_count": 175,
"metadata": {
"ExecuteTime": {
"end_time": "2017-08-21T09:15:18.260128Z",
"start_time": "2017-08-21T09:15:16.568363Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"283 ms ± 16.1 ms per loop (mean ± std. dev. of 5 runs, 1 loop each)\n"
]
},
{
"data": {
"text/plain": [
"<TimeitResult : 283 ms ± 16.1 ms per loop (mean ± std. dev. of 5 runs, 1 loop each)>"
]
},
"execution_count": 175,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%%timeit -r 3 -o\n",
"index = np.intersect1d(df1.values, df2.values)"
]
},
{
"cell_type": "code",
"execution_count": 176,
"metadata": {
"ExecuteTime": {
"end_time": "2017-08-21T09:15:18.266426Z",
"start_time": "2017-08-21T09:15:18.262938Z"
},
"collapsed": true
},
"outputs": [],
"source": [
"timings['intersect1d'] = _.all_runs"
]
},
{
"cell_type": "code",
"execution_count": 182,
"metadata": {
"ExecuteTime": {
"end_time": "2017-08-21T09:19:47.547066Z",
"start_time": "2017-08-21T09:19:47.531735Z"
},
"collapsed": true
},
"outputs": [],
"source": [
"def plot_comparison(timings: dict):\n",
" timings_df = pd.DataFrame.from_dict(timings)\n",
" timings_df.mean().sort_values(ascending=False).plot(kind='barh')\n",
" plt.xlabel('Seconds (lower is better)')\n",
" plt.ylabel('Method');"
]
},
{
"cell_type": "code",
"execution_count": 183,
"metadata": {
"ExecuteTime": {
"end_time": "2017-08-21T09:19:54.545600Z",
"start_time": "2017-08-21T09:19:53.954777Z"
}
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABSMAAAS3CAYAAAAdNm9dAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAWJQAAFiUBSVIk8AAAIABJREFUeJzs3WmUlvV9//HPjQMqDiriCC7FBZMMKirqxKUcZEmUqpiI\nqaIWaqqNtVLXY9V6emITG2s0TRWIVo1BKrivMVQrS9AoKoGq4BbFDaHQEYyiFUW5/w84zl8yYNj8\nDTCv16Phuu7r+n3vGR69z7VUqtVqNQAAAAAAX7I2LT0AAAAAANA6iJEAAAAAQBFiJAAAAABQhBgJ\nAAAAABQhRgIAAAAARYiRAAAAAEARYiQAAAAAUIQYCQAAAAAUIUYCAAAAAEWIkQAAAABAEWIkAAAA\nAFCEGAkAAAAAFCFGAgAAAABF1LT0ALA6GhsXtfQIAAAAABuVuroOxdZyZSQAAAAAUIQYCQAAAAAU\nIUYCAAAAAEWIkQAAAABAEWIkAAAAAFCEGAkAAAAAFCFGAgAAAABFiJEAAAAAQBFiJAAAAABQhBgJ\nAAAAABQhRgIAAAAARYiRAAAAAEARYiQAAAAAUIQYCQAAAAAUIUYCAAAAAEWIkQAAAABAEWIkAAAA\nAFCEGAkAAAAAFCFGAgAAAABFiJEAAAAAQBFiJAAAAABQhBgJAAAAABQhRgIAAAAARYiRAAAAAEAR\nYiQAAAAAUIQYCQAAAAAUIUYCAAAAAEWIkQAAAABAEWIkAAAAAFCEGAkAAAAAFCFGAgAAAABFiJEA\nAAAAQBFiJAAAAABQhBgJAAAAABQhRgIAAAAARYiRAAAAAEARYiQAAAAAUIQYCQAAAAAUUdPSA8Dq\nOOOsczKv8Z21Pk+Xuo4ZedVP18FEAAAAAKwqMZINyrzGd7LV3kPX/jzPjl4H0wAAAACwOtymDQAA\nAAAUIUYCAAAAAEWIkQAAAABAEWIkAAAAAFCEGAkAAAAAFCFGAgAAAABFiJEAAAAAQBFiJAAAAABQ\nhBgJAAAAABQhRgIAAAAARYiRAAAAAEARYiQAAAAAUIQYCQAAAAAUIUYCAAAAAEWIkQAAAABAEWIk\nAAAAAFCEGAkAAAAAFCFGAgAAAABFiJEAAAAAQBFiJAAAAABQhBgJAAAAABQhRgIAAAAARYiRAAAA\nAEARYiQAAAAAUIQYCQAAAAAUIUYCAAAAAEWIkQAAAABAEWIkAAAAAFCEGAkAAAAAFCFGAgAAAABF\nbLAxcs6cOamvr89FF13U0qOwCi688MLU19dn7ty5LT0KAAAAAC1kg42RSVKpVFKpVNbqHP369Uv/\n/v3X0UQbjuHDh6e+vj5Tp05d4f758+fnmmuuyVlnnZXDDjss3bt3T319fWbPnr1G662LvxUAAAAA\nG7aalh5gTXXu3Dnjxo1Lhw4dWnqUDdIfi4MzZszIVVddlTZt2mSnnXbKlltumffee6/ghAAAAABs\nbDbYKyNramqy6667Ztttt23pUTZI1Wr1C/f36NEjY8aMydSpU/Nf//Vf+epXv1poMgAAAAA2Vhvs\nlZFz5sxJ//79c8wxx+Syyy5Lsuy5hPfee28mTpyYRx55JGPGjMkbb7yRDh06pH///vn7v//71NbW\nJkmeeuqpDB06NJVKJdVqNfX19U3n/vw5k+TVV1/NddddlyeeeCILFizIlltumYMOOijDhg3Lrrvu\nutxcn80wfvz4TJo0KXfccUfeeOON7LPPPhk9enSS5J577sltt92WN954Ix988EG22WabdOvWLcce\ne2yOOOKI5c43f/78/Pu//3seeeSRzJ8/P+3bt89+++2Xv/3bv02PHj2a/V6WLl2a2267Lffff39e\nfvnlLFmyJJ07d87Xv/71fO9730vXrl3Tr1+/zJ07N5VKJUOGDGk6tlKp5IUXXkiy7MrTzp07r/bf\n5fHHH8+IESPywgsvpF27djnggANy3nnnrfZ5AAAAANj4bLAxckU+u/X4xz/+cR577LH07ds3vXr1\nypNPPpnbb789b775ZkaNGpUk2XHHHTNs2LDcdNNNqVQq+cu//MumqwW7d+/edM5HHnkkZ555Zj75\n5JP069cvXbt2zbx58/Lwww9n8uTJ+Y//+I/lPv/ZDJdeemmmT5+eQw89NH369EmbNssuQv3Xf/3X\nXHfddfmTP/mTHHHEEamtrU1jY2NmzJiRhx56aLkY+dxzz+Wv/uqvsmjRovTq1SuHHXZY3nnnnUyY\nMCEnnnhiRo4cmd69ezd9fsmSJfne976XKVOmZIcddsjAgQNTW1ubOXPmZPz48TnggAPStWvXnHzy\nyRk/fnymTp2aY445JjvuuGPT7GvjwQcfzLnnnpt27drliCOOSF1dXaZNm5bBgwfna1/72lqdGwAA\nAIAN30YVI5Nltx8/++yzeeCBB5qu7Fu6dGmGDh2aJ598MjNmzEiPHj2aYuTdd9+dSqWSM844o9m5\n3nvvvZx33nlp3759br755uy2225N+2bNmpXvfOc7ufjii3P33Xc3m+GFF17Ivffemx122GG5fbfd\ndlu6dOmSX/3qV2nXrt1y+37/+983/fzpp5/m7LPPzuLFizN69OgccMABTfsaGxtz7LHH5uKLL87E\niRPTtm3bJMteSjNlypT0798///Zv/9a0PVkWKt9///0kydChQ/Pee+9l6tSpGTRoUBoaGlbrd7wi\n//d//5fvf//7adOmTcaOHZs99tijad+//Mu/ZNSoUV5gAwAAANDKbbDPjFyZz8Li528xbtOmTQYN\nGtQUKlfVPffck/fffz/Dhg1bLkQmSbdu3XLcccflhRdeyKxZs5rN8Nd//dfNQuRnampW3IC33nrr\npp9//etfZ/bs2fmLv/iL5UJkktTV1eXUU0/N22+/nSlTpiRZFlxvueWWbL755rnkkkuWC5FJ0rZt\n23Ts2HHVvvgamDBhQt59990MHDhwuRCZJMOGDfOiIQAAAAA2visjk2TPPfdstm377bdPktV6I/Qz\nzzyTJHnxxRczYsSIZvtff/31JMueKdmtW7fl9q3oeY5JMnDgwIwZMyZHHXVUBgwYkIaGhvTs2bPp\nWZafefrpp5MsezbmytauVqt59dVX07t377z66qtZtGhR9t1339TV1a3yd1xXnn/++VQqlRVeZVlb\nW5v6+vr89re/LT4XAAAAAOuPjTJGbrnlls22bbLJJkmW3f68qn7/+9+nWq3mjjvu+MLPffDBB822\nrewt3xdffHF23nnn3HXXXbn++utz3XXXpaamJr17986FF16Yrl27Nq2dJA899FAeeuihFZ6rUqk0\nrf1ZZN1uu+1W7cutY4sWLUqSdOrUaYX7WyKQAgAAALB+2Shj5LpSW1ubSqWS+++/P1/5yldW69iV\nPR/xszdYDxkyJAsXLsz06dPzq1/9Kv/5n/+ZWbNm5YEHHkjbtm2b1r7mmmvSp0+fP7reZwH2f//3\nf1drznXls9uwFyxYsML9jY2NJccBAAAAYD200T0zcnVtsskmWbp06Qr37bvvvqlWq5k6deqXsvY2\n22yTb3zjG/npT3+agw46KG+++WZefvnlNVp7t912y5ZbbpmXXnpplcLfZ2/3Xp0rRb/IHnvssdJ5\n33///bz44ovrZB0AAAAANlytPkZuvfXWWbhwYT7++ONm+wYNGpQtt9wyI0eOXOGLb6rVap566qlV\nXuvjjz/O9OnTm21fsmRJ023Zm222WZKkf//+6dq1a8aOHZvJkyev8HxPP/10PvrooyTL4uIJJ5yQ\nDz/8MN///vebfZ8lS5Zk4cKFTf/eeuutU61W8z//8z+rPP8X6d+/f7baaqv88pe/zMyZM5fbd/XV\nVzfdxg0AAABA69Xqb9M++OCDM3PmzJxyyik54IAD0q5du9TX16dv377Zeuutc9VVV+Xv/u7vcvzx\nx+fggw/O7rvvnjZt2mTu3Ll5+umn8+677za96OaP+eijj3LiiSdm5513zp577pkddtghH330UR5/\n/PG8+uqr6d+/f9Nbu2tqajJ8+PCceuqpOe2009KzZ8907949m222WebNm5cZM2bkrbfeym9+85ts\nuummSZa9tXrGjBmZNGlSBgwYkD59+mSLLbbI3Llz8/jjj+eCCy7It7/97STJgQcemDZt2uQnP/lJ\nfve73zXd5n366ac3zXvhhRc23W7+2muvJUmuuOKKbLHFFkmSP//zP89+++2XJGnfvn1+8IMf5Nxz\nz81JJ52UI444InV1dZk2bVpeeeWVNDQ0eIENAAAAQCu3QcfISqXS7NmMK3tW48o+f/rpp2fRokWZ\nNGlS/vu//zuffvppvv3tb6dv375JlsXK+++/PzfeeGMeffTRTJs2LW3bts12222Xgw8+OIcffvgK\n11mRzTffPOeff36efPLJPP3005kwYUK22GKLdO3aNf/0T/+UQYMGLff5r33ta7nvvvsyatSoTJo0\nKffcc08qlUrq6uqyxx575KyzzkrHjh2bPt+2bdvccMMNueWWW3Lffffl3nvvTbVazXbbbZfDDjss\n+++/f9Nnu3Xrlssvvzw33nhjbrnllnz00UepVCrLxch777232Xd5+OGHm34+8MADm2Jkkhx++OG5\n4YYbMmLEiDz44INp165dGhoacuutt+a6667LtGnTVvq3AQAAAGDjV6lWq9WWHgJWVe9vHput9h66\n1ud599nRuWvsqLUfCAAAAGADV1fXodharf6ZkQAAAABAGWIkAAAAAFCEGAkAAAAAFCFGAgAAAABF\niJEAAAAAQBFiJAAAAABQhBgJAAAAABQhRgIAAAAARYiRAAAAAEARYiQAAAAAUIQYCQAAAAAUIUYC\nAAAAAEWIkQAAAABAEWIkAAAAAFCEGAkAAAAAFCFGAgAAAABFiJEAAAAAQBFiJAAAAABQhBgJAAAA\nABQhRgIAAAAARYiRAAAAAEARYiQAAAAAUIQYCQAAAAAUIUYCAAAAAEWIkQAAAABAEWIkAAAAAFCE\nGAkAAAAAFCFGAgAAAABFiJEAAAAAQBFiJAAAAABQhBgJAAAAABQhRgIAAAAARdS09ACwOrrUdcy8\nZ0evk/MAAAAAUFalWq1WW3oIWFWNjYtaegQAAACAjUpdXYdia7lNGwAAAAAoQowEAAAAAIoQIwEA\nAACAIsRIAAAAAKAIMRIAAAAAKEKMBAAAAACKECMBAAAAgCLESAAAAACgCDESAAAAAChCjAQAAAAA\nihAjAQAAAIAixEgAAAAAoAgxEgAAAAAoQowEAAAAAIoQIwEAAACAIsRIAAAAAKAIMRIAAAAAKEKM\nBAAAAACKECMBAAAAgCLESAAAAACgCDESAAAAAChCjAQAAAAAihAjAQAAAIAixEgAAAAAoAgxEgAA\nAAAoQowEAAAAAIoQIwEAAACAIsRIAAAAAKAIMRIAAAAAKEKMBAAAAACKECMBAAAAgCLESAAAAACg\nCDESAAAAAChCjAQAAAAAihAjAQAAAIAixEgAAAAAoAgxEgAAAAAoQowEAAAAAIoQIwEAAACAIsRI\nAAAAAKAIMRIAAAAAKEKMBAAAAACKECMBAAAAgCLESAAAAACgCDESAAAAAChCjAQAAAAAihAjAQAA\nAIAixEgAAAAAoAgxEgAAAAAoQowEAAAAAIoQIwEAAACAIsRIAAAAAKAIMRIAAAAAKEKMBAAAAACK\nECMBAAAAgCLESAAAAACgCDESAAAAAChCjAQAAAAAihAjAQAAAIAixEgAAAAAoAgxEgAAAAAoQowE\nAAAAAIoQIwEAAACAIsRIAAAAAKAIMRIAAAAAKEKMBAAAAACKECMBAAAAgCLESAAAAACgCDESAAAA\nAChCjAQAAAAAihAjAQAAAIAixEgAAAAAoAgxEgAAAAAoQowEAAAAAIoQIwEAAACAIsRIAAAAAKAI\nMRIAAAAAKEKMBAAAAACKqGnpAWB1nHHWOZnX+E5Lj7FB6VLXMSOv+mlLjwEAAAAgRrJhmdf4Trba\ne2hLj7FBmffs6JYeAQAAACCJ27QBAAAAgELESAAAAACgCDESAAAAAChCjAQAAAAAihAjAQAAAIAi\nxEgAAAAAoAgxEgAAAAAoQowEAAAAAIoQIwEAAACAIsRIAAAAAKAIMRIAAAAAKEKMBAAAAACKECMB\nAAAAgCLESAAAAACgCDESAAAAAChCjAQAAAAAihAjAQAAAIAixEgAAAAAoAgxEgAAAAAoQowEAAAA\nAIoQIwEAAACAIsRIAAAAAKAIMRIAAAAAKEKMBAAAAACKECMBAAAAgCLESAAAAACgCDESAAAAAChC\njAQAAAAAihAjAQAAAIAixMhWas6cOamvr89FF1202sc+9dRTqa+vz4gRI76EyQAAAADYWImRrVil\nUkmlUil+LAAAAACtU01LD0DL6Ny5c8aNG5cOHTqs9rH77LNPxo0bl44dO34JkwEAAACwsRIjW6ma\nmprsuuuua3TspptuusbHAgAAANB6uU27lVrRMyMXLFiQyy+/PAMGDEjPnj3T0NCQAQMG5KKLLspb\nb73V9LmVPTNyyJAh6d69e5YuXZprr702hx9+eHr06JE+ffrkyiuvzJIlS4p9PwAAAADWP66MJEmy\nePHiDB48OG+99VYOOeSQ9OvXL9VqNXPnzs3EiRMzYMCA7LTTTqt0rnPPPTfTpk1L7969U1tbm8mT\nJ+eGG27IwoUL86Mf/ehL/iYAAAAArK/ESJIkU6ZMyezZs/Pd7343F1xwwXL7Pvnkk3z88cerdJ5q\ntZrZs2cv9zzKc845J0cffXTuu+++nHfeeenUqdM6nx8AAACA9Z/btFlOu3btmm2rqalJ+/btV+n4\nSqWS888/f7kX42y22WYZOHBgli5dmpkzZ66zWQEAAADYsLgykiRJQ0NDOnfunOuvvz7PPfdcDj30\n0Oy3337p3r172rRZvWa91157NdvWpUuXJMm77767TuYFAAAAYMMjRpIkqa2tze23357hw4dn4sSJ\neeyxx1KtVtOxY8eceOKJOf3001NTs2r/XWpra5tt++zYpUuXrtO5AQAAANhwiJE06dy5cy699NIk\nyaxZs/LEE09kzJgxGTlyZKrVas4888wWnhAAAACADZlnRrJC3bp1y0knnZQbb7wxSTJ+/PgWnggA\nAACADZ0YSZLklVdeyYIFC5ptb2xsTJJVfoENAAAAAKyM27RJkjz22GO54oorsu+++2aXXXZJp06d\nMm/evEyYMCGbbLJJTjnllLVeo1qtroNJAQAAANhQiZGtWKVSSaVSSZL06tUr8+bNy9SpUzNx4sS8\n//77qaurS69evXLyySdn3333Xemxf7j9i9YDAAAAoPWqVF2uxgak9zePzVZ7D23pMTYo7z47OneN\nHdXSYwAAAADrqbq6DsXW8sxIAAAAAKAIMRIAAAAAKEKMBAAAAACKECMBAAAAgCLESAAAAACgCDES\nAAAAAChCjAQAAAAAihAjAQAAAIAixEgAAAAAoAgxEgAAAAAoQowEAAAAAIoQIwEAAACAIsRIAAAA\nAKAIMRIAAAAAKEKMBAAAAACKECMBAAAAgCLESAAAAACgCDESAAAAAChCjAQAAAAAihAjAQAAAIAi\nxEgAAAAAoAgxEgAAAAAoQowEAAAAAIoQIwEAAACAIsRIAAAAAKAIMRIAAAAAKEKMBAAAAACKECMB\nAAAAgCLESAAAAACgCDESAAAAAChCjAQAAAAAihAjAQAAAIAixEgAAAAAoIialh4AVkeXuo6Z9+zo\nlh5jg9KlrmNLjwAAAACQJKlUq9VqSw8Bq6qxcVFLjwAAAACwUamr61BsLbdpAwAAAABFiJEAAAAA\nQBFiJAAAAABQhBgJAAAAABQhRgIAAAAARYiRAAAAAEARYiQAAAAAUIQYCQAAAAAUIUYCAAAAAEWI\nkQAAAABAEWIkAAAAAFCEGAkAAAAAFCFGAgAAAABFiJEAAAAAQBFiJAAAAABQhBgJAAAAABQhRgIA\nAAAARYiRAAAAAEARYiQAAAAAUIQYCQAAAAAUIUYCAAAAAEWIkQAAAABAEWIkAAAAAFCEGAkAAAAA\nFCFGAgAAAABFiJEAAAAAQBFiJAAAAABQhBgJAAAAABQhRgIAAAAARYiRAAAAAEARYiQAAAAAUIQY\nCQAAAAAUIUYCAAAAAEWIkQAAAABAEWIkAAAAAFCEGAkAAAAAFCFGAgAAAABFiJEAAAAAQBFiJAAA\nAABQhBgJAAAAABQhRgIAAAAARYiRAAAAAEARYiQAAAAAUIQYCQAAAAAUIUYCAAAAAEWIkQAAAABA\nEWIkAAAAAFCEGAkAAAAAFCFGAgAAAABFiJEAAAAAQBFiJAAAAABQhBgJAAAAABQhRgIAAAAARYiR\nAAAAAEARYiQAAAAAUIQYCQAAAAAUIUYCAAAAAEWIkQAAAABAEWIkAAAAAFCEGAkAAAAAFCFGAgAA\nAABFiJEAAAAAQBFiJAAAAABQhBgJAAAAABQhRgIAAAAARYiRAAAAAEARYiQAAAAAUIQYCQAAAAAU\nIUYCAAAAAEWIkQAAAABAEWIkAAAAAFCEGAkAAAAAFCFGAgAAAABFiJEAAAAAQBFiJAAAAABQhBgJ\nAAAAABQhRgIAAAAARdS09ACwOs4465zMa3ynpcfYKHSp65iRV/20pccAAAAAWhExkg3KvMZ3stXe\nQ1t6jI3CvGdHt/QIAAAAQCvjNm0AAAAAoAgxEgAAAAAoQowEAAAAAIoQIwEAAACAIsRIAAAAAKAI\nMRIAAAAAKEKMBAAAAACKECMBAAAAgCLESAAAAACgCDESAAAAAChCjAQAAAAAihAjAQAAAIAixEgA\nAAAAoAgxEgAAAAAoQowEAAAAAIoQIwEAAACAIsRIAAAAAKAIMRIAAAAAKEKMBAAAAACKECMBAAAA\ngCLESAAAAACgCDESAAAAAChCjAQAAAAAihAjAQAAAIAixEgAAAAAoAgxEgAAAAAoQowEAAAAAIoQ\nIwEAAACAIsRIAAAAAKCIVh0j58yZk/r6+lx00UWrfexTTz2V+vr6jBgx4kuYDAAAAAA2Pq06RiZJ\npVJJpVIpfiwAAAAAtDY1LT1AS+rcuXPGjRuXDh06rPax++yzT8aNG5eOHTt+CZMBAAAAwManVcfI\nmpqa7Lrrrmt07KabbrrGxwIAAABAa9Sqb9Ne0TMjFyxYkMsvvzwDBgxIz54909DQkAEDBuSiiy7K\nW2+91fS5lT0zcsiQIenevXuWLl2aa6+9Nocffnh69OiRPn365Morr8ySJUvWeN4nn3wy//iP/5gj\njzwy+++/f/bZZ58MHDgwI0aMyMcff9zs88OHD099fX2mTp2aX/7ylznuuOPSs2fP9O/fv9n3f/31\n13P22WfnkEMOSffu3TN16tQkyXPPPZdLL7003/rWt3LggQdm7733zuGHH57LL78877333nLr3Xrr\nramvr8/PfvazFc7/9ttvZ88998zRRx+9xr8DAAAAADZcrfrKyD+0ePHiDB48OG+99VYOOeSQ9OvX\nL9VqNXPnzs3EiRMzYMCA7LTTTqt0rnPPPTfTpk1L7969U1tbm8mTJ+eGG27IwoUL86Mf/WiN5rv+\n+uvz2muvpWfPnunTp08++uijTJ8+PSNGjMjUqVMzatSo5Z5h+dkzLX/+859nypQp6du3bw466KAs\nWrRoufO++eabOe6447Lrrrvm6KOPzuLFi1NbW5skuf322zNhwoQ0NDTkkEMOydKlS/P888/nF7/4\nRR599NHcfvvtad++fZLk6KOPzpVXXpk777wzp59+erPnad55551ZunRpBg8evEbfHwAAAIANmxj5\nOVOmTMns2bPz3e9+NxdccMFy+z755JMVXn24ItVqNbNnz17ueZTnnHNOjj766Nx3330577zz0qlT\np9We75JLLllhDL366qtzzTXX5MEHH8yf/dmfNZvlySefzG233Zb6+voVnnf69Ok57bTTcvbZZzfb\n9zd/8ze55JJLmoXFu+66KxdffHHGjh2bU089NUnSvn37fOtb38rYsWPzyCOP5NBDD13umDvuuCOb\nbbaZKyMBAAAAWqlWfZv2yrRr167ZtpqamqYrAP+YSqWS888/f7kX42y22WYZOHBgli5dmpkzZ67R\nXCu7KnPIkCGpVqv5zW9+s8L9gwcPXmmITJJOnTrljDPOWOG+7bfffoVvDB80aFBqa2ubrXnCCSek\nWq3m1ltvXW77o48+mjlz5uTII49suuoSAAAAgNbFlZGf09DQkM6dO+f666/Pc889l0MPPTT77bdf\nunfvnjZtVq/b7rXXXs22denSJUny7rvvrtF8H374YW666aaMHz8+r7/+ej744INUq9UkywLo/Pnz\nmx1TqVTSo0ePLzxvfX192rZtu8J9n3zySW699daMGzcus2bNyqJFi7J06dKm/X+45u67756GhoY8\n+uijmT9/fjp37pxk2e3elUolxx9//Gp9ZwAAAAA2HmLk59TW1ub222/P8OHDM3HixDz22GOpVqvp\n2LFjTjzxxJx++umpqVm1X9mKrv777NjPx7xV9cknn2To0KGZMWNGvvrVr+aII47INtts03TOlb3E\nJkm23XbbLzx3XV3dSvedffbZGT9+fLp27Zr+/funrq6uKVzedNNNK1zzhBNOyNSpU3PHHXdk2LBh\nefvttzNp0qR07979j4ZRAAAAADZeYuQf6Ny5cy699NIkyaxZs/LEE09kzJgxGTlyZKrVas4888wW\nmWvChAmZMWNGBg0a1OwFOI2Njc3e6v15K7rNelXMnDkz48ePz5/+6Z/muuuuyyabbNK0r1qt5oYb\nbljhcYcddli23Xbb3HnnnTnjjDNy55135tNPP/XiGgAAAIBWzjMjv0C3bt1y0kkn5cYbb0ySjB8/\nvsVmeeONN1KpVHLYYYc12/fUU099KWu++eabSZJ+/fotFyKT5JlnnsnixYtXeFxNTU2+853vZP78\n+ZkwYULuvPPOtG/fPkcdddSXMicAAAAAGwYx8nNeeeWVLFiwoNn2xsbGJFnlF9h8GXbaaaemN2N/\n3uzZs/OTn/xkja9+/CI77rhjkjRbc8GCBfnBD37whccef/zxadOmTX74wx9mzpw5GThwYIv+/gAA\nAABoeW4Wc/QyAAAgAElEQVTT/pzHHnssV1xxRfbdd9/ssssu6dSpU+bNm5cJEyZkk002ySmnnLLW\na3z2wpnV1bdv3+y8884ZNWpUfve736V79+6ZO3dufv3rX6dv376ZO3fuWs/2h3r06JH99tsvDz/8\ncAYPHpz9998/CxYsyCOPPJLddtst22233UqP3X777XPooYdm4sSJXlwDAAAAQBJXRqZSqTRdVdir\nV68MGTIkixcvzsSJE/OLX/wiv/3tb9OrV6+MGTMm3/zmN1d67B9u/6L11sTmm2+e0aNH56ijjsor\nr7ySm2++OS+//HKGDRuWH//4xyud5Y/5ouPatGmTa6+9NieccEIaGxtz8803Z/r06TnuuOPy85//\nPDU1NV+45rHHHptkWdTs3r37as8GAAAAwMalUl3TS/Xgjxg+fHh+9rOf5Z//+Z8zaNCgdXLO3t88\nNlvtPXSdnKu1e/fZ0blr7KiWHgMAAABoYXV1HYqt1eqvjOTL8f777+fWW2/NVlttlSOPPLKlxwEA\nAABgPeCZkaxTkydPzsyZMzNp0qQsXLgwF1xwQTbddNOWHgsAAACA9YAY2YKGDx++Ss95/MY3vpH6\n+voCE629Bx98MPfee286deqU0047LSeffHJLjwQAAADAekKMbEEjR45cpRi50047bTAx8rLLLstl\nl13W0mMAAAAAsB4SI1vQiy++2NIjAAAAAEAxXmADAAAAABQhRgIAAAAARYiRAAAAAEARYiQAAAAA\nUIQYCQAAAAAUIUYCAAAAAEWIkQAAAABAEWIkAAAAAFCEGAkAAAAAFCFGAgAAAABFiJEAAAAAQBFi\nJAAAAABQhBgJAAAAABQhRgIAAAAARYiRAAAAAEARYiQAAAAAUIQYCQAAAAAUIUYCAAAAAEWIkQAA\nAABAEWIkAAAAAFCEGAkAAAAAFCFGAgAAAABFiJEAAAAAQBFiJAAAAABQhBgJAAAAABQhRgIAAAAA\nRYiRAAAAAEARYiQAAAAAUERNSw8Aq6NLXcfMe3Z0S4+xUehS17GlRwAAAABamUq1Wq229BCwqhob\nF7X0CAAAAAAblbq6DsXWcps2AAAAAFCEGAkAAAAAFCFGAgAAAABFiJEAAAAAQBFiJAAAAABQhBgJ\nAAAAABQhRgIAAAAARYiRAAAAAEARYiQAAAAAUIQYCQAAAAAUIUYCAAAAAEWIkQAAAABAEWIkAAAA\nAFCEGAkAAAAAFCFGAgAAAABFiJEAAAAAQBFiJAAAAABQhBgJAAAAABQhRgIAAAAARYiRAAAAAEAR\nYiQAAAAAUIQYCQAAAAAUIUYCAAAAAEWIkQAAAABAEWIkAAAAAFCEGAkAAAAAFCFGAgAAAABFiJEA\nAAAAQBFiJAAAAABQhBgJAAAAABQhRgIAAAAARYiRAAAAAEARYiQAAAAAUIQYCQAAAAAUIUYCAAAA\nAEWIkQAAAABAEWIkAAAAAFCEGAkAAAAAFCFGAgAAAABFiJEAAAAAQBFiJAAAAABQhBgJAAAAABQh\nRgIAAAAARYiRAAAAAEARYiQAAAAAUIQYCQAAAAAUIUYCAAAAAEWIkQAAAABAEWIkAAAAAFCEGAkA\nAAAAFCFGAgAAAABFiJEAAAAAQBFiJAAAAABQhBgJAAAAABQhRgIAAAAARYiRAAAAAEARYiQAAAAA\nUIQYCQAAAAAUIUYCAAAAAEWIkQAAAABAEWIkAAAAAFCEGAkAAAAAFCFGAgAAAABFiJEAAAAAQBFi\nJAAAAABQhBgJAAAAABQhRgIAAAAARYiRAAAAAEARYiQAAAAAUIQYCQAAAAAUIUYCAAAAAEWIkQAA\nAABAEWIkAAAAAFCEGAkAAAAAFCFGAgAAAABF1KzNwVOnTl2rxRsaGtbqeAAAAABgw1GpVqvVNT24\nvr4+lUplzRauVPL888+v6dK0Uo2Ni1p6BAAAAICNSl1dh2JrrdWVkZ9Zi54JAAAAALQSax0jVxQi\nP3+15Gf7V7QNVtcZZ52TeY3vtPQYrAe61HXMyKt+2tJjAAAAAKthrWLkMccc02zbwoULM3ny5CTJ\nLrvskq985SupVquZNWtWXnvttVQqlRx00EHZfvvt12ZpWql5je9kq72HtvQYrAfmPTu6pUcAAAAA\nVtNaxcjLLrtsuX9/8MEHOe6441KpVHLppZfm2GOPXW7/3XffnX/4h3/I7Nmzc/XVV6/N0gAAAADA\nBqbNujzZNddck1mzZmXPPfdsFiKTZNCgQdlrr70yd+7cjBw5cl0uDQAAAACs59ZpjHzwwQdTqVTS\nvn37lX6mffv2qVarefjhh9fl0gAAAADAem6dxsj58+cnSZ599tm89NJLzfa/9NJLeeaZZ5IkjY2N\n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\n5PTp0+s1By1szJgxGTNmTNavX59FixZl7ty5+fGPf5zzzjsvd999d7p06ZIk+fznP58JEya08LQA\nAAAA7Ivq8sxI9h+dO3fO8OHDc9VVV+VDH/pQ1q5dm8ceeyxHH310kuTRRx/d5XMdcMABqaoqW7Zs\n2VvjAgAAALAPqWuMPOmkk3LSSSflqquu2ukxd9xxR772ta/la1/7Wj2XZg88/PDDO9y+atWqJEnH\njh0zcODADB06ND/72c9y22237fD4Z599NqtXr276e9vLb1566aU6TwwAAADAvqiuL7BZunRparVa\nU8TakXnz5uWnP/1parVaLrvssnouz5v06U9/OoccckgGDx6cPn36JHnjCsgnn3wygwYNygknnJAk\nufbaa/Oxj30sV155ZaZPn57Bgwena9euWb58eRYvXpwlS5Zk5syZTS++OfbYY9OpU6d8//vfz5o1\na9KrV68kycSJE9O5c+eW+bIAAAAAtJi98jbtP2fr1q2ll+QvuPTSS3P//ffn6aefzoIFC9KhQ4f0\n6dMnl112WcaOHZt27dolSXr37p1Zs2bllltuyT333JO77rorW7duzVve8pYMGDAgkyZNyjvf+c6m\n83bt2jXXX399pkyZklmzZjW93GbMmDFiJAAAAEAbVDRGvv7661myZEnJJdkFZ599ds4+++xdOvbg\ngw/OBRdckAsuuGCXjj/xxBNz4okn7sl4AAAAAOwn9jhGnnTSSdttu++++3a4fc2aNdmwYUOSN55D\nCAAAAAC0HXscI7c9J7KqqiRJVVXZuHFjli5dutPP1Gq1HHHEEXu6NAAAAACwD6nbbdp/HCRrtdpO\nj9t2zFlnnVWvpQEAAACAfUBdYuSfRshtf/+pjh07pn///vnIRz6SsWPH1mNpAAAAAGAfsccx8pln\nnmn6vbGxMbVaLaNGjco3v/nNPT01AAAAALAfqevbtA877LAkSa9evep5WgAAAABgP1DXGDl//vx6\nng4AAAAA2I/UNUb+sfvvvz/33ntvXnzxxWzcuDHf//7388QTT2TTpk1p165dhgwZsreWBgAAAABa\nobrHyDVr1uTiiy/OQw89lOSNl9lse7HNzJkzM2vWrCTJnXfemQEDBtR7eQAAAACglTqgnifbvHlz\n/v7v/z4PPvjgDt+oPXr06Kbtc+fOrefSAAAAAEArV9cYeccdd+Txxx9vuhLyT4Pk0KFD06lTpyTJ\no48+Ws+lAQAAAIBWrq4x8q677mr6fezYsds9F7Jdu3Z5xzvekaqq8tvf/raeSwMAAAAArVxdY+TT\nTz+dJHn729+ef/mXf8lb3vKW7Y7p1atXkmT16tX1XBoAAAAAaOXqGiPXr1+fWq2W/v377/SYV199\nNckbz5cEAAAAANqOusbIQw45JEmyYsWKHe7fvHlznn322SRJt27d6rk0AAAAANDK1TVGHnnkkamq\nKr/+9a+zcOHC7fZff/31WbVqVWq1WgYMGFDPpQEAAACAVq59PU82fPjwLFq0KEly/vnnp2PHjk37\n3vve9za7YvK9731vPZcGAAAAAFq5ul4ZOXbs2PTs2TNJsnXr1mzYsCFJUlVV/vCHP6SqqiRvvMTm\nox/9aD2XBgAAAABaubrGyO7du+e6665Lp06dkiS1Wq3ZT5J06tQp1157bbp06VLPpQEAAACAVq6u\nMTJJjjvuuMyaNSunnXZaDjnkkFRVlaqqcvDBB+eDH/xgbrvttrz73e+u97IAAAAAQCtX12dGbtOv\nX79ce+21qaoqL7/8cpKkR48eTVdHAgAAAABtz16JkdvUarWmZ0gCAAAAAG1b3W/TBgAAAADYkT26\nMvKkk05605+t1WqZO3funiwPAAAAAOxD9ihGLl26NLVaLVVV7fZnPT8SAAAAANqWujwzcnfD4puJ\nlwAAAADAvq2uL7ARGQEAAACAnalrjDz00EMzbty4nHXWWenevXs9Tw0AAAAA7OP26G3a48aNS6dO\nnZquiPzDH/6Qb3zjG3nf+96XL3zhC/nNb35TlyEBAAAAgH3fHsXIL3zhC7nvvvty+eWXp0+fPqmq\nKlVV5dVXX82///u/Z/To0Tn33HMzf/78es0LAAAAAOyj9ihGJknnzp3z8Y9/PD/72c8yZcqUDBs2\nLEmawuTDDz+cT33qUzn55JMzY8aMPR4YAAAAANg37XGM3KZWq2XkyJGZPn16Zs+enTPPPDMHHXRQ\nkjfC5AsvvJApU6bUazkAAAAAYB9T1xfYbHPYYYelf//+6d69e1asWJFareZN29TFoQ09svyJaS09\nBq3AoQ09WnoEAAAAYDfVNUYuWbIk06ZNy5133plXX321aXtVVTn44INz5pln1nM52qCp3/xGS48A\nAAAAwJtUlxg5f/78TJ8+PQ899FCSNLsK8vDDD8/48ePzkY98JJ07d67HcgAAAADAPmiPYuT3vve9\nzJgxIy+++GKS5hHyuOOOy6RJk/L+978/tVptz6YEAAAAAPZ5tWoPHubY2NjY7HmQnTp1yumnn55J\nkyZlwIABdRsStlm5cl1LjwAAAACwX2lo6FJsrbrEyG26du26y7di12q1zJ07980uTRslRgIAAADU\nV8kYWZdnRm7rma+88kpeeeWVXXpztlu3AQAAAKBtqUuM/NOw+JdC4x5cjAkAAAAA7KP2OEYKiwAA\nAADArtijZ0ZCaZ4ZCQAAAFBfJZ8ZeUCxlQAAAACANk2MBAAAAACKECMBAAAAgCLESAAAAACgCDES\nAAAAAChCjAQAAAAAihAjAQAAAIAixEgAAAAAoAgxEgAAAAAoQowEAAAAAIoQIwEAAACAIsRIAAAA\nAKAIMRIAAAAAKEKMBAAAAACKECMBAAAAgCLESAAAAACgCDESAAAAAChCjAQAAAAAihAjAQAAAIAi\nxEgAAAAAoAgxEgAAAAAoQowEAAAAAIoQIwEAAACAIsRIAAAAAKAIMRIAAAAAKEKMBAAAAACKECMB\nAAAAgCLESAAAAACgCDESAAAAAChCjAQAAAAAihAjAQAAAIAixEgAAAAAoAgxEgAAAAAoQowEAAAA\nAIoQIwEAAACAIsRIAAAAAKAIMRIAAAAAKEKMBAAAAACKECMBAAAAgCLESAAAAACgCDESAAAAAChC\njAQAAAAAihAjAQAAAIAixEgAAAAAoAgxEgAAAAAoQowEAAAAAIoQIwEAAACAIsRIAAAAAKAIMRIA\nAAAAKEKMBAAAAACKECMBAAAAgCLESAAAAACgCDESAAAAAChCjAQAAAAAihAjAQAAAIAixEgAAAAA\noAgxEgAAAAAoQowEAAAAAIoQIwEAAACAIsRIAAAAAKAIMRIAAAAAKEKMBAAAAACKECMBAAAAgCLE\nSAAAAACgCDESAAAAAChCjAQAAAAAihAjAQAAAIAixEgAAAAAoAgxEgAAAAAoQowEAAAAAIpo39ID\nwO741D9enOUrX27pMdjPHdrQI1O/+Y2WHgMAAAD2O2Ik+5TlK19Ot8GTWnoM9nPLn5jW0iMAAADA\nfslt2gAAAABAEWIkAAAAAFCEGAkAAAAAFCFGAgAAAABFiJEAAAAAQBFiJAAAAABQhBgJAAAAABQh\nRgIAAAAARYiRAAAAAEARYiQAAAAAUIQYCQAAAAAUIUYCAAAAAEWIkQAAAABAEWIkAAAAAFCEGAkA\nAAAAFCFGAgAAAABFiJEAAAAAQBFiJAAAAABQhBgJAAAAABQhRgIAAAAARYiRAAAAAEARYiQAAAAA\nUIQYCQAAAAAUIUYCAAAAAEWIkQAAAABAEWIkAAAAAFCEGAkAAAAAFCFGAgAAAABFiJEAAAAAQBFt\nIkYuXbo0jY2NmTx58m5/9he/+EUaGxszZcqUvTBZ6zNx4sQ0Nja29BgAAAAA7IfaRIxMklqtllqt\nVvyz+6IDDmgz/1sAAAAAUFD7lh6ghN69e+fuu+9Oly5ddvuzRx99dO6+++706NFjL0zW+nz961/P\nxo0bW3oMAAAAAPZDbSJGtm/fPkccccSb+uxBBx30pj+7Lzr00ENbegQAAAAA9lNt4n7cHT0zctWq\nVbnmmmtyyimn5Nhjj82wYcNyyimnZPLkyXnxxRebjtvZMyMnTpyYo446Klu3bs23v/3tjBo1KoMG\nDcr73ve+/Ou//mtef/31Nz3v4sWLc8kll2TEiBEZNGhQjj/++Jx55pn5yle+ki1btjQ7dsuWLZkx\nY0bOPvvsvOtd78oxxxyTD33oQ5kxY0aqqtrpv8Pvf//7XHTRRTnhhBNy1FFH5ZFHHmn6Xjt7ZuSC\nBQty/vnn57jjjsugQYNy8skn52tf+1rWrVu3R98BAAAAgLahTVwZ+adeffXVjB07Ni+++GJOOOGE\njBgxIlVVZdmyZZk/f35OOeWU9O3bd5fOdckll+Sxxx7L8OHD07lz5/zXf/1Xbr755qxevTpf+cpX\ndnu2xYsX56yzzsoBBxyQESNGpG/fvlm/fn2ef/753Hrrrbn44ovTqVOnJMnmzZvziU98IgsXLkz/\n/v1z+umn56CDDsrDDz+cq6++Ok888USuueaa7db4n//5n5x11lk54ogjMnr06Lz66qvp3Llz0/4d\nPR9zypQpmTJlSrp37573v//96dmzZxYvXpzvfve7WbBgQX74wx/mkEMO2e3vAAAAAEDb0SZj5IMP\nPpgXXnghH//4x3P55Zc327d58+a89tpru3SeqqrywgsvNHse5cUXX5zRo0fnjjvuyD/90z+lV69e\nuzXb7Nmz89prr+WGG27I+9///mb71q1b1yzi3XjjjVm4cGEmTpyYz33uc00RsaqqXHnllZk1a1ZG\njRqVESNGNDvPokWL8olPfCIXXXTRLs300EMPZcqUKRkyZEi+853vNAuXs2fPzhVXXJHrr78+V1xx\nxW5/BwAAAADajjZxm/bOdOjQYbtt7du3z8EHH7xLn6/VavnsZz/b7MU4HTt2zOmnn56tW7fmqaee\netOzHXTQQdtt++N1qqrKjBkz0tDQkMmTJze7mrFWqzWFwTvvvHO78/Tq1Suf+tSndnmW6dOnp1ar\n5eqrr24WIpPkjDPOyFFHHbXDdf7SdwAAAACgbWmTV0YOGzYsvXv3zk033ZRf/epXee9735shQ4bk\nqKOOygEH7F6fHThw4Hbbtr0EZu3atbs926mnnppp06blk5/8ZEaNGpXjjz8+73rXu3L44Yc3O+53\nv/td1qxZk379+uWGG27Y7jxVVaVjx4557rnnttvX2NiYAw88cJdn+uUvf5n27dvnP//zP3e4//XX\nX8/q1auzdu3adOvWbZe/AwAAAABtS5uMkZ07d86PfvSjXH/99Zk/f34WLlyYqqrSo0ePjBs3Lv/w\nD/+Q9u137Z/mT68UTNL02a1bt+72bIMHD84PfvCD3HjjjfnpT3+aOXPmpKqqHHHEEfn0pz+d0047\nLUmyZs2aJMnzzz+fqVOn7vR8Gzdu3G5bQ0PDbs20Zs2abNmy5c+uU6vVsmHDhnTr1m2XvwMAAAAA\nbUubjJFJ0rt373zpS19Kkjz33HN56KGHMmPGjEydOjVVVeUzn/lMi8129NFH59vf/nZef/31/OpX\nv8qCBQtyyy235NJLL03Pnj1z/PHHN93ufPLJJ+db3/rWXp2nc+fOqaoqDz/88C5/Zle+AwAAAABt\nS5t+ZuQ2Rx55ZMaPH5/vfve7SZK5c+e28ERvOPDAA3PMMcfkwgsvzOc+97lUVZV58+YlSfr375+u\nXbvm8ccfz5YtW/bqHMccc0xeeeWVHd7y/Zf8ue8AAAAAQNvSJmPkkiVLsmrVqu22r1y5Mkl2+QU2\ne8N///d/Z9OmTdtt/9///d8kaXoTdbt27TJhwoSsWLEiV1999Q4/s3LlyjcVEP/Uxz72saY3dK9Y\nsWK7/Rs3bswvf/nL3f4OAAAAALQtbfI27YULF+brX/96jjnmmPTr1y+9evXK8uXLM2/evLRr1y5/\n93d/t8drVFX1pj53880356GHHsrQoUPTt2/fHHzwwfnNb36TBQsWpHv37jnrrLOajv3kJz+ZxYsX\nZ+bMmfn5z3+e4447Lr17986qVavy/PPPZ9GiRbn44otz5JFH7tF3Of7443PppZfmuuuuy6hRozJ8\n+PD07ds3GzZsyLJly/KLX/wiQ4cOzU033bTb3wEAAACAtqPNxMharZZarZYkOfHEE7N8+fI88sgj\nmf+bc2cAACAASURBVD9/ftavX5+GhoaceOKJOffcc3PMMcfs9LN/uv3PrfdmjB8/Pt26dcsTTzyR\nRYsWZfPmzTn00EMzfvz4fPzjH8/b3va2pmPbt2+fqVOnZs6cObn99ttz7733ZsOGDenZs2f69u2b\niy66KKNHj96l7/KXZj/vvPMyZMiQTJ8+PY899ljmz5+fLl26pHfv3hk7dmz+9m//9k19BwAAAADa\njlr1Zi/hgxYw/OQPp9vgSS09Bvu5tU9My20/+F5LjwEAAABFNDR0KbZWm3xmJAAAAABQnhgJAAAA\nABTRZp4Z2ZKuv/76XXqG5MiRI9PY2FhgIgAAAAAoT4wsYOrUqbsUI/v27StGAgAAALDfEiMLeOaZ\nZ1p6BAAAAABocZ4ZCQAAAAAUIUYCAAAAAEWIkQAAAABAEWIkAAAAAFCEGAkAAAAAFCFGAgAAAABF\niJEAAAAAQBFiJAAAAABQhBgJAAAAABQhRgIAAAAARYiRAAAAAEARYiQAAAAAUIQYCQAAAAAUIUYC\nAAAAAEWIkQAAAABAEWIkAAAAAFCEGAkAAAAAFCFGAgAAAABFiJEAAAAAQBFiJAAAAABQhBgJAAAA\nABQhRgIAAAAARYiRAAAAAEARYiQAAAAAUIQYCQAAAAAUIUYCAAAAAEWIkQAAAABAEWIkAAAAAFBE\n+5YeAHbHoQ09svyJaS09Bvu5Qxt6tPQIAAAAsF+qVVVVtfQQsKtWrlzX0iMAAAAA7FcaGroUW8tt\n2gAAAABAEWIkAAAAAFCEGAkAAAAAFCFGAgAAAABFiJEAAAAAQBFiJAAAAABQhBgJAAAAABQhRgIA\nAAAARYiRAAAAAEARYiQAAAAAUIQYCQAAAAAUIUYCAAAAAEWIkQAAAABAEWIkAAAAAFCEGAkAAAAA\nFCFGAgAAAABFiJEAAAAAQBFiJAAAAABQhBgJAAAAABQhRgIAAAAARYiRAAAAAEARYiQAAAAAUIQY\nCQAAAAAUIUYCAAAAAEWIkQAAAABAEWIkAAAAAFCEGAkAAAAAFCFGAgAAAABFiJEAAAAAQBFiJAAA\nAABQhBgJAAAAABQhRgIAAAAARYiRAAAAAEARYiQAAAAAUIQYCQAAAAAUIUYCAAAAAEWIkQAAAABA\nEWIkAAAAAFCEGAkAAAAAFCFGAgAAAABFiJEAAAAAQBFiJAAAAABQhBgJAAAAABQhRgIAAAAARYiR\nAAAAAEARYiQAAAAAUIQYCQAAAAAUIUYCAAAAAEWIkQAAAABAEWIkAAAAAFCEGAkAAAAAFCFGAgAA\nAABFiJEAAAAAQBFiJAAAAABQhBgJAAAAABQhRgIAAAAARYiRAAAAAEARYiQAAAAAUIQYCQAAAAAU\nIUYCAAAAAEWIkQAAAABAEWIkAAAAAFCEGAkAAAAAFCFGAgAAAABFiJEAAAAAQBFiJAAAAABQhBgJ\nAAAAABQhRgIAAAAARYiRAAAAAEARYiQAAAAAUIQYCQAAAAAUIUYCAAAAAEWIkQAAAABAEWIkAAAA\nAFCEGAkAAAAAFCFGAgAAAABFiJEAAAAAQBFiJAAAAABQRPuWHgB2x6f+8eIsX/lyS48BAMBedmhD\nj0z95jdaegwAoM7ESPYpy1e+nG6DJ7X0GAAA7GXLn5jW0iMAAHuB27QBAAAAgCLESAAAAACgCDES\nAAAAAChCjAQAAAAAihAjAQAAAIAixEgAAAAAoAgxEgAAAAAoQowEAAAAAIoQIwEAAACAIsRIAAAA\nAKAIMRIAAAAAKEKMBAAAAACKECMBAAAAgCLESAAAAACgCDESAAAAAChCjAQAAAAAihAjAQAAAIAi\nxEgAAAAAoAgxEgAAAAAoQowEAAAAAIoQIwEAAACAIsRIAAAAAKAIMRIAAAAAKEKMBAAAAACKECMB\nAAAAgCLESAAAAACgCDESAAAAAChCjAQAAAAAihAjAQAAAIAixEiaNDY2ZtKkSS09BgAAAAD7KTGS\nJrVaLbVaraXHAAAAAGA/1b6lB6D1uPvuu9OpU6eWHgMAAACA/ZQYSZMjjjiipUcAAAAAYD8mRrZC\n8+bNy7Rp0/Lcc89l7dq16d69e/r165dTTz0148aNazpu7dq1ufnmmzNv3rwsXbo0Bx54YAYOHJjz\nzz8/73nPe5qd8/bbb8/kyZPz1a9+NT179sxNN92Up59+Ov/3f/+Xp59+Oskbz4z8m7/5m0ybNq3Z\nZ7ds2ZIf/vCHmTNnTpYsWZItW7bkiCOOyEc+8pGMGzduu1u7d3V+AAAAANoWMbKVmTlzZr74xS+m\noaEhI0aMSI8ePbJ69eosXrw4t99+e1PMW7ZsWSZMmJCXXnopQ4cOzfDhw7Nhw4bce++9Oe+883LV\nVVflox/9aLNz12q1/OQnP8mCBQsyfPjwnHPOOVm2bNmfnWfz5s35xCc+kYULF6Z///45/fTTc9BB\nB+Xhhx/O1VdfnSeeeCLXXHPNbs8PAAAAQNsjRrYyM2fOTIcOHTJnzpz06NGj2b41a9Y0/X755Zdn\n+fLlue6663Lqqac2bV+/fn0mTJiQL3/5yznppJPSs2fPpn1VVeW+++7LTTfdtN2Vkztz4403ZuHC\nhZk4cWI+97nPNV0FWVVVrrzyysyaNSujRo3KiBEjdmt+AAAAANoeb9Nuhdq1a5d27dptt7179+5J\nkmeeeSaPPPJIPvCBDzQLkUnSuXPnXHjhhdm0aVPuueee7c4xcuTIXQ6RVVVlxowZaWhoyOTJk5vd\njl2r1XLFFVckSe68887dmh8AAACAtsmVka3M6NGjc8011+S0007LBz/4wQwbNixDhgxpdoXj448/\nniRZt25dpkyZst05Vq1alaqq8txzz223b+DAgbs8y+9+97usWbMm/fr1yw033LDd/qqq0rFjx2br\n7Mr8AAAAALRNYmQrc+6556ZHjx659dZbc8sttzS9TGbYsGG57LLLMnDgwKbbnR944IE88MADOzxP\nrVbLxo0bt9ve0NCwy7NsW+f555/P1KlTd3rcH6+zK/MDAAAA0DaJka3QmDFjMmbMmKxfvz6LFi3K\n3Llz8+Mf/zjnnXde7r777nTp0iVJ8vnPfz4TJkzY5fPWarXt3nz952xb5+STT863vvWtus3vKkkA\nAACAtskzI1uxzp07Z/jw4bnqqqvyoQ99KGvXrs1jjz2Wo48+Okny6KOP7tX1+/fvn65du+bxxx/P\nli1bdvvzO5sfAAAAgLZJjGxlHn744R1uX7VqVZKkY8eOGThwYIYOHZqf/exnue2223Z4/LPPPpvV\nq1fv0Szt2rXLhAkTsmLFilx99dXZtGnTdsesXLmy2TMjd2V+AAAAANomt2m3Mp/+9KdzyCGHZPDg\nwenTp0+SN66AfPLJJzNo0KCccMIJSZJrr702H/vYx3LllVdm+vTpGTx4cLp27Zrly5dn8eLFWbJk\nSWbOnNnsluiqqnZ7nk9+8pNZvHhxZs6cmZ///Oc57rjj0rt376xatSrPP/98Fi1alIsvvjhHHnnk\nbs0PAAAAQNsjRrYyl156ae6///48/fTTWbBgQTp06JA+ffrksssuy9ixY9OuXbskSe/evTNr1qzc\ncsstueeee3LXXXdl69atectb3pIBAwZk0qRJeec739ns3H/peZE7eqZk+/btM3Xq1MyZMye33357\n7r333mzYsCE9e/ZM3759c9FFF2X06NG7PT8AAAAAbU+tejOXy0ELGX7yh9Nt8KSWHgMAgL1s7RPT\nctsPvtfSYwBAm9DQ0KXYWp4ZCQAAAAAUIUYCAAAAAEWIkQAAAABAEWIkAAAAAFCEGAkAAAAAFCFG\nAgAAAABFiJEAAAAAQBFiJAAAAABQhBgJAAAAABQhRgIAAAAARYiRAAAAAEARYiQAAAAAUIQYCQAA\nAAAUIUYCAAAAAEWIkQAAAABAEWIkAAAAAFCEGAkAAAAAFCFGAgAAAABFiJEAAAAAQBFiJAAAAABQ\nhBgJAAAAABQhRgIAAAAARYiRAAAAAEARYiQAAAAAUIQYCQAAAAAUIUYCAAAAAEWIkQAAAABAEWIk\nAAAAAFCEGAkAAAAAFCFGAgAAAABFiJEAAAAAQBFiJAAAAABQRPuWHgB2x6ENPbL8iWktPQYAAHvZ\noQ09WnoEAGAvqFVVVbX0ELCrVq5c19IjAAAAAOxXGhq6FFvLbdoAAAAAQBFiJAAAAABQhBgJAAAA\nABQhRgIAAAAARYiRAAAAAEARYiQAAAAAUIQYCQAAAAAUIUYCAAAAAEWIkQAAAABAEWIkAAAAAFCE\nGAkAAAAAFCFGAgAAAABFiJEAAAAAQBFiJAAAAABQhBgJAAAAABQhRgIAAAAARYiRAAAAAEARYiQA\nAAAAUIQYCQAAAAAUIUYCAAAAAEWIkQAAAABAEWIkAAAAAFCEGAkAAAAAFCFGAgAAAABFiJEAAAAA\nQBFiJAAAAABQhBgJAAAAABQhRgIAAAAARYiRAAAAAEARYiQAAAAAUIQYCQAAAAAUIUYCAAAAAEWI\nkQAAAABAEWIkAAAAAFCEGAkAAAAAFCFGAgAAAABFiJEAAAAAQBFiJAAAAABQhBgJAAAAABQhRgIA\nAAAARYiRAAAAAEARYiQAAAAAUIQYCQAAAAAUIUYCAAAAAEWIkQAAAABAEWIkAAAAAFCEGAkAAAAA\nFCFGAgAAAABFiJEAAAAAQBFiJAAAAABQhBgJAAAAABQhRgIAAAAARYiRAAAAAEARYiQAAAAAUIQY\nCQAAAAAUIUYCAAAAAEWIkQAAAABAEWIkAAAAAFCEGAkAAAAAFCFGAgAAAABFiJEAAAAAQBFiJAAA\n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\nXIqYqyXzv3N2GXcdb++Slp2LnpHIdxEREQoPD9djjz2Wr0EkAAAAAAAA7m3MGYl8s2DBAsXGxmrp\n0qVycXExF7ABAAAAAAAAJMJI5KMZM2bo3Llzqlq1qj744AM1bNjQ2SUBAAAAAADgLkIYiXwTHBzs\n7BIAAAAAAABwF2POSAAAAAAAAACWIIwEAAAAAAAAYAnCSAAAAAAAAACWIIwEAAAAAAAAYAnCSAAA\nAAAAAACWIIwEAAAAAAAAYAnCSAAAAAAAAACWIIwEAAAAAAAAYAnCSAAAAAAAAACWIIwEAAAAAAAA\nYAnCSAAAAAAAAACWIIwEAAAAAAAAYAnCSAAAAAAAAACWIIwEAAAAAAAAYAnCSAAAAAAAAACWIIwE\nAAAAAAAAYAnCSAAAAAAAAACWIIwEAAAAAAAAYAnCSAAAAAAAAACWIIwEAAAAAAAAYAnCSAAAAAAA\nAACWIIwEAAAAAAAAYAnCSAAAAAAAAACWIIwEAAAAAAAAYAnCSAAAAAAAAACWIIwEAAAAAAAAYAnC\nSAAAAAAAAACWIIwEAAAAAAAAYAnCSAAAAAAAAACWKOrsAoDceNC7jM5GzHV2GQAAAAAA4B70oHcZ\nZ5dw37MZhmE4uwjgdp0/n+jsEgAAAAAAAAoVb++Slp2LYdoAAAAAAAAALEEYCQAAAAAAAMAShJEA\nAAAAAAAALEEYCQAAAAAAAMAShJEAAAAAAAAALEEYCQAAAAAAAMAShJEAAAAAAAAALEEYCQAAAAAA\nAMAShJEAAAAAAAAALEEYCQAAAAAAAMAShJEAAAAAAAAALEEYCQAAAAAAAMAShJEAAAAAAAAALEEY\nCQAAAAAAAMAShJEAAAAAAAAALEEYCQAAAAAAAMAShJEAAAAAAAAALEEYCQAAAAAAAMAShJEAAAAA\nAAAALEEYCQAAAAAAAMAShJEAAAAAAAAALEEYCQAAAAAAAMAShJEAAAAAAAAALEEYCQAAAAAAAMAS\nhJEAAAAAAAAALEEYCQAAAAAAAMAShJEAAAAAAAAALEEYCQAAAAAAAMAShJEAAAAAAAAALEEYCQAA\nAAAAAMAShJEAAAAAAAAALEEYCQAAAAAAAMAShJEAAAAAAAAALEEYCQAAAAAAAMAShJEAAAAAAAAA\nLEEYCQAAAAAAAMAShJEAAAAAAAAALEEYCQAAAAAAAMASNsMwDGcXAQAAAAAAAKDwo2ckAAAAAAAA\n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\nqLJlyzq5UuQHLy8vvf/++xo3bpy6du2qDh06qHTp0oqKilJISIgeffRRjRkzxtllooAdP35cxsLD\nVwAAIABJREFU0o3va1m5uLioSpUqOnLkiKKjo1WzZk2Lq4NVTp06pe3bt8vd3V2tWrVydjnIR6dO\nndIXX3yhZ599Vu3bt3d2OShAf/75p6Qb97xDhw66dOmSQ3ufPn304YcfstBoIdG2bVt16tRJ69ev\nV7du3eTv7y9XV1f9+eef2rVrl/r3759t5OqdIIzEXSspKUmSVKJEiRzb7c9fvnzZsprgHBMmTFBk\nZKTatm1Lb5pCZsqUKTp06JAWLFggNzc3Z5eDAhIXFyfDMDRz5kzVrl1bCxYskK+vr2JiYvT//t//\n05YtWzRs2DDNnTvX2aUin7z00kuqVKmSRo0apcWLF5vPV6tWTT169CB4vg8kJiZKkkqWLJlju/17\nnH07FD5paWl67733dO3aNQ0fPvym7wXcewzD0AcffCBPT0+NGjXK2eWggNm/x40bN04dO3bUsGHD\n9MADD2jv3r366KOPtGDBApUtW1ZDhgxxdqnIJ19//bWmTJmiadOm6ejRo+bz/v7+euaZZ/IleGaY\nNu55/AamcJs7d65mz56t2rVra/z48c4uB/koIiJCQUFBGjRokBo3buzsclCArl+/LunGUL1p06ap\nWbNm8vDwUJ06dTR16lQ9+OCDCg8P1969e51cKfLLjBkz9M477+i5557T+vXrtWfPHi1dulRVqlTR\nu+++qwkTJji7RDiZfegX3+MKp+vXr+v999/Xnj171KVLFw0cONDZJSEfzZ49Wzt37tRnn31GyHwf\nyMjIkCTVrFlTX331lapXry4PDw+1adNGgYGBstls+u6775Senu7kSpEf0tLS9M4772j27Nn66KOP\ntGXLFu3cuVNBQUE6deqU+vbtq+Dg4DyfhzASdy37b8ztPSSzsj/PX4CF1w8//KAvvvhCderU0Zw5\nc1SqVClnl4R8Yh+eXaNGDb399tsObVnnJsG9z/7ZrVevnipWrOjQVqxYMT366KOSbgTUuPeFhYXp\nyy+/1JNPPql//etfqlKliooVK6Z69epp6tSpeuCBBzR79mzFxMQ4u1QUIPv3s5v1fExOTpZ08xEw\nuHddv35d7733ntauXasuXbrov//9r7NLQj6KiorSpEmT9NxzzzF90n3Cy8tLNptN7du3z/YLJF9f\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fa03e82cc88>"
]
},
"metadata": {
"image/png": {
"height": 603,
"width": 657
}
},
"output_type": "display_data"
}
],
"source": [
"plot_comparison(timings)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Filter df by condition\n",
"\n",
"Find the index in pd.DataFrame that satisfied some condition"
]
},
{
"cell_type": "code",
"execution_count": 185,
"metadata": {
"ExecuteTime": {
"end_time": "2017-08-21T09:20:16.576426Z",
"start_time": "2017-08-21T09:20:10.745386Z"
},
"collapsed": true
},
"outputs": [],
"source": [
"n_rows = 10 ** 7\n",
"df = pd.DataFrame()\n",
"df['col1'] = np.random.binomial(20, 0.2, n_rows)\n",
"df['col2'] = np.random.binomial(20, 0.2, n_rows)\n",
"df['col3'] = np.random.binomial(20, 0.3, n_rows)\n",
"df['col4'] = np.random.binomial(20, 0.4, n_rows)"
]
},
{
"cell_type": "code",
"execution_count": 186,
"metadata": {
"ExecuteTime": {
"end_time": "2017-08-21T09:20:16.584796Z",
"start_time": "2017-08-21T09:20:16.580246Z"
},
"collapsed": true
},
"outputs": [],
"source": [
"# in1d works faster "
]
},
{
"cell_type": "code",
"execution_count": 187,
"metadata": {
"ExecuteTime": {
"end_time": "2017-08-21T09:20:16.592883Z",
"start_time": "2017-08-21T09:20:16.588797Z"
},
"collapsed": true
},
"outputs": [],
"source": [
"p2_timings = {}"
]
},
{
"cell_type": "code",
"execution_count": 188,
"metadata": {
"ExecuteTime": {
"end_time": "2017-08-21T09:20:22.294564Z",
"start_time": "2017-08-21T09:20:16.595098Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"359 ms ± 5.85 ms per loop (mean ± std. dev. of 3 runs, 1 loop each)\n",
"459 ms ± 33 ms per loop (mean ± std. dev. of 3 runs, 1 loop each)\n",
"334 ms ± 16 ms per loop (mean ± std. dev. of 3 runs, 1 loop each)\n"
]
}
],
"source": [
"t1 = %timeit -r 3 -o df_short = df[(df.col1 == 1) | (df.col2 == 1) & (df.col3 == 3) & (df.col4 != 5)]\n",
"t2 = %timeit -r 3 -o df_short = df.query('col1 == 1 | col2 == 1 & col3 == 3 & col4 != 5')\n",
"t3 = %timeit -r 3 -o df_short = df[np.in1d(df.col1, 1) | np.in1d(df.col2, 1) & np.in1d(df.col3, 3) & np.in1d(df.col4, 5, invert=True)]"
]
},
{
"cell_type": "code",
"execution_count": 191,
"metadata": {
"ExecuteTime": {
"end_time": "2017-08-21T09:21:11.310868Z",
"start_time": "2017-08-21T09:21:10.017550Z"
}
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABPsAAAS3CAYAAACQfn8gAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAWJQAAFiUBSVIk8AAAIABJREFUeJzs3XuQV/V9//HXwQ0RI4IoUfBusF3HSFqLxk4zRoVo6y2K\nqTFe1vQPM02l0+hMm5CJjlOdJHUiqSnUTPNHCQJprRAdiXXqZWxGJyptEiHFYL2kVVDBGFETAZXz\n+8MfW3AxQffg6nsfj5mdYb/nfM/7s/rfc845n6Zt2zYAAAAAwLveiKFeAAAAAADQDbEPAAAAAIoQ\n+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAA\nAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgiJ6hXgBDb+3aF4Z6CQAAAACljB8/ekjmurMPAAAAAIoQ\n+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAA\nAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEP\nAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACg\nCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAA\nAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ\n+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAA\nAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEP\nAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACg\nCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAA\nAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ\n+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\nAAAoQuwDAAAAgCLEPgAAAAAoQuwDAAAAgCLEPgAAAAAoQuwDAAAAgCLEPgAAAAAoQuwDAAAAgCLE\nPgAAAAAoQuwDAAAAgCLEPgAAAAAoQuwDAAAAgCLEPgAAAAAoQuwDAAAAgCLEPgAAAAAoQuwDAAAA\ngCLEPgAAAAAoQuwDAAAAgCLEPgAAAAAoQuwDAAAAgCLEPgAAAAAoQuwDAAAAgCLEPgAAAAAoQuwD\nAAAAgCLEPgAAAAAoQuwDAAAAgCLEPgAAAAAoQuwDAAAAgCLEPgAAAAAoQuwDAAAAgCLEPgAAAAAo\nQuwDAAAAgCLEPgAAAAAoQuwDAAAAgCLEPgAAAAAoQuwDAAAAgCLEPgAAAAAoQuwDAAAAgCLEPgAA\nAAAoQuwDAAAAgCLEPgAAAAAoQuwDAAAAgCLEPgAAAAAoQuwDAAAAgCLEPgAAAAAoQuwDAAAAgCLE\nPgAAAAAoQuwDAAAAgCLEPgAAAAAoQuwDAAAAgCLEPgAAAAAoQuwDAAAAgCLEPgAAAAAoQuwDAAAA\ngCLEPgAAAAAoQuwDAAAAgCLEPgAAAAAoQuwDAAAAgCLEPgAAAAAoQuwDAAAAgCLEPgAAAAAoQuwD\nAAAAgCLEPgAAAAAoQuwDAAAAgCLEPgAAAAAoQuwDAAAAgCJ6hnoBDL29x++ep5bNG+plAAAAW9h7\n/O5DvQQA3oWatm3boV4EQ2vt2heGegkAAAAApYwfP3pI5nqMFwAAAACKEPsAAAAAoAixDwAAAACK\nEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAA\nAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAix\nDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAA\noAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsA\nAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACK\nEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAA\nAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAix\nDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAA\noAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsA\nAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACK\nEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAA\nAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAix\nDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAA\noAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsA\nAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACK\nEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAA\nAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAix\nDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAA\noAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsA\nAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACK\nEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAA\nAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAixDwAAAACKEPsAAAAAoAix\n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\nbvucf/756e3tfdvmAQAAAPDu1umdfY899lh/5Js0aVI+/OEPZ/To0dlpp526HPO2+fGPf5y//Mu/\nzP77759zzjknO++8c37nd37nbV3D66Pp/fffn76+vsyYMSMzZsx4W9cCAAAAwDtbp7Fv5513zsaN\nGzNhwoTccMMNee9739vl5d92d911V5Lkqquuyoc+9KGhXQwAAAAA/AadPsa7OYgdeOCB7/rQlyRP\nP/10kmT8+PFDvJL/07btUC8BAAAAgHeoTmPfhRdemCRZvnx51qxZ0+Wl39D8+fNzyimnZPLkyTnm\nmGNyxRVX/NqdgJcsWZK+vr4cddRRmTx5ck466aRce+212bhxY/853/3ud9Pb25vvfve7ads2xx9/\nfHp7e3PooYdm9erVSZL77rsvl156aU4++eT83u/9Xj70oQ/l1FNPzezZs7e61mZf+MIX0tvb2//9\nLd1///3p7e3N7Nmzf+3fOnPmzFxwwQVpmiazZ89Ob29v/7qWLl26vf/JAAAAAChqUI/xvj5c7bPP\nPjn33HMzf/78nHvuufnMZz6Tww47LGPHjt3m9ydOnDiY8bnyyiszf/78vP/9788nP/nJ9PT05M47\n78wDDzyQl19+OSNHjtzq/C9+8YtZvHhxJkyYkBNOOCGjR4/OAw88kGuuuSb33ntv/vEf/zEjRozI\noYcemhkzZuT222/PypUr09fXl9GjRydJdttttyTJt771rTz22GP53d/93Rx77LHZsGFDfvjDH2b2\n7NlZunRp5s6du9X79rrYtGTatGlJXouRRx11VI466qj+Y/vss8+grg0AAADAu9+gYt/xxx//hgHr\n8ccfz2WXXfaG322aJitWrHjLs3/0ox9l/vz5OeCAA3LDDTf0x7iLL744fX19Wbt27VYBbPHixVm8\neHFOOOGEfO1rX9sqBM6ePTtz5szJggUL+nfA7e3tzapVq7Jy5cpccMEFA8Lk5Zdfnn333XfAur7x\njW/k2muvza233po/+qM/est/37ZMnTo1o0eP7o99NugAAAAAYEudPMbbtu1WP5vvYnv956//GYxF\nixalaZp89rOf7Q99STJy5MhccsklA86fN29eenp68uUvf3nAHX9/9md/ljFjxuTmm2/e7vnbCn1J\ncv7556dt29x9993bfS0AAAAA6EKnu/Fu9utC3uYIOFib7wqcMmXKgGNTpkxJT8///Wnr16/PypUr\nM27cuMydO3eb6x05cmQeeeSR7Z7/0ksv5dvf/nZuv/32/OxnP8svf/nL/r+raZr+zT0AAAAA4O0y\nqNh35JFHdrWON23zJhx77rnngGMjRozY6j2B69atS9u2efbZZzNnzpw3vOb2vlPvlVdeSV9fX5Yv\nX57f+q3fykknnZRx48b1B8Y32qQDAAAAAHakQcW+6667rqt1vGm77rprkuSZZ54Z8Ejtpk2b8txz\nz2WvvfZKkv7HfA899NAsXrx40LPvuOOOLF++PNOnT8+Xv/zlrY6tXbt2m7vqbg6Jr7766oBjzz//\n/KDXBAAAAACdvLNvKBx22GFJkqVLlw44tnTp0rzyyiv9v++yyy455JBD8vDDD3cS1v7nf/4nTdPk\nhBNOGHDs/vvv3+Z3xowZkyR58sknBxxbvnz5dt9VOGLEa//LNm3atL3LBQAAAGCY6DT2TZ06NVOn\nTs1f//Vfv+E5N910U6666qpcddVVg5p1xhlnpG3bfPOb38y6dev6P9+wYUNmzZo14PxPf/rT2bhx\nY2bOnJkXXnhhwPHnn39+u3cH3nfffdO2be67776tPn/88cdz9dVXbzPcHX744WnbNtdff/1Wn69c\nufJN3SG5++67J9l2NAQAAABgeOt0g45Vq1alaZr8/Oc/f8Nz7rjjjvzbv/1bmqbJX/3VX73lWUcc\ncUTOO++8LFiwIKecckpOPPHEvOc978kdd9yRMWPGZPz48Vudf+aZZ2bFihVZuHBhpk2blo985COZ\nOHFi1q1blyeeeCJLly7NmWeemcsvv/w3zj7uuONywAEHZO7cuXnooYdy6KGHZvXq1bnrrrty3HHH\nZfXq1QO+M23atBxwwAH53ve+l6eeeiqTJ0/Ok08+mTvuuCPTpk3LLbfcsl1/90EHHZS99tor3/ve\n99LT05MJEyakaZqcfvrpmTBhwnZdAwAAAICadshuvL9Ol4+ffulLX8pBBx2UhQsX5vrrr8/YsWNz\nwgkn5HOf+1xOO+20AXfYXXrppTnmmGPyne98J/fee2+ef/75jBkzJhMnTsyFF16YU089dcCMbd2l\nN2rUqMybNy9f+9rXcv/99+c///M/s99++2XGjBm54IILcssttwz43siRIzNv3rz8zd/8Te655578\n5Cc/ySGHHJJZs2Zlt912y7/+679uc9brPxsxYkTmzJmTq6++Orfeemv/LsBTpkwR+wAAAACGuaZt\n27ari/X29va/y+6aa64ZcPzll1/Oqaeemp/97GdpmiYPPvhgV6MZhGM+dmbGTO4b6mUAAADDyLpl\n87Jo4dwxj8njAAAgAElEQVShXgbADjN+/OghmTvoO/umTp064LPvf//72/z8ueeey69+9askyc47\n7zzY0QAAAADAFgYd+za/p2/zDYJt2+all17KqlWr3vA7TdPkoIMOGuxoAAAAAGALnb2zb8vgt613\nz222+Zyzzjqrq9EAAAAAQDqKfa+PfG/0GsCdd945Bx98cD7xiU/k7LPP7mI0AAAAAPD/DTr2/fSn\nP+3/9+YNOk488cRtbtABAAAAAOw4nT3GmyQTJ05Mkuyxxx5dXhYAAAAA2A6dxr4777yzy8sBAAAA\nAG9Cp7FvS3fffXfuuuuuPPHEE3nppZfy7W9/O8uWLcuGDRuy00475YgjjthRowEAAABgWOo89j33\n3HO5+OKLc++99yZ5bbOOzRt3/PM//3MWL16cJLn55pszadKkrscDAAAAwLA1osuLvfLKK/nTP/3T\n/OAHP9jmjrynnXZa/+e33357l6MBAAAAYNjrNPbddNNN+fGPf9x/J9/rg9+UKVMyatSoJMl//Md/\ndDkaAAAAAIa9TmPfkiVL+v999tlnD3gv30477ZRDDjkkbdvm0Ucf7XI0AAAAAAx7nca+Bx98MEmy\n//775/LLL8+ee+454Jw99tgjSfLss892ORoAAAAAhr1OY9+LL76Ypmly8MEHv+E569evT/La+/0A\nAAAAgO50Gvve9773JUnWrFmzzeOvvPJKHnrooSTJmDFjuhwNAAAAAMNep7HvAx/4QNq2zYoVK3LP\nPfcMOP53f/d3+fnPf56maTJp0qQuRwMAAADAsNfT5cWOOeaY/PCHP0ySXHjhhdl55537j330ox/d\n6o6/j370o12OBgAAAIBhr9M7+84+++yMGzcuSbJp06b86le/SpK0bZunn346bdsmeW2Tjj/+4z/u\ncjQAAAAADHudxr6xY8dm1qxZGTVqVJKkaZqtfpJk1KhRufrqqzN69OguRwMAAADAsNdp7EuSo48+\nOosXL87JJ5+c973vfWnbNm3bZpdddslJJ52URYsW5cMf/nDXYwEAAABg2Ov0nX2bHXjggbn66qvT\ntm1+8YtfJEl23333/rv7AAAAAIDu7ZDYt1nTNP3v8AMAAAAAdqzOH+MFAAAAAIbGoO7smzp16lv+\n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\nxD4AAAAASELsAwAAAIAkxD4AAAAASELsAwAAAIAkxD4AAAAASELsAwAAAIAkxD4AAAAASELsAwAA\nAIAkxD4AAAAASELsAwAAAIAkxD4AAAAASELsAwAAAIAkxD4AAAAASELsAwAAAIAkxD4AAAAASELs\nAwAAAIAkxD4AAAAASELsAwAAAIAkxD4AAAAASELsAwAAAIAkxD4AAAAASELsAwAAAIAkxD4AAAAA\nSELsAwAAAIAkxD4AAAAASELsAwAAAIAkxD4AAAAASELsAwAAAIAkxD4AAAAASELsAwAAAIAkxD4A\nAAAASELsAwAAAIAkxD4AAAAASELsAwAAAIAkxD4AAAAASELsAwAAAIAkxD4AAAAASELsAwAAAIAk\nxD4AAAAASELsAwAAAIAkxD4AAAAASELsAwAAAIAkxD4AAAAASELsAwAAAIAkxD4AAAAASELsAwAA\nAIAkxD4AAAAASELsAwAAAIAkxD4AAAAASELsAwAAAIAkxD4AAAAASELsAwAAAIAkxD4AAAAASELs\nAwAAAIAkxD4AAAAASELsAwAAAIAkxD4AAAAASELsAwAAAIAkxD4AAAAASELsAwAAAIAkxD4AAAAA\nSELsAwAAAIAkxD4AAAAASELsAwAAAIAkxD4AAAAASELsAwAAAIAkxD4AAAAASELsAwAAAIAkxD4A\nAAAASELsAwAAAIAkxD4AAAAASELsAwAAAIAkxD4AAAAASELsAwAAAIAkxD4AAAAASELsAwAAAIAk\nxD4AAAAASELsAwAAAIAkxD4AAAAASELsAwAAAIAkxD4AAAAASELsAwAAAIAkxD4AAAAASELsAwAA\nAIAkxD4AAAAASELsAwAAAIAkmjb2ADS+H151TSxcsryxxwAAAAC2gj3Ldo3/N/hXjT0GW4jYRyxc\nsjzadD+/sccAAAAAtoKFMx5o7BHYgpzGCwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAA\nAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITY\nBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAA\nkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0A\nAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJ\niH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAA\nAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITY\nBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAA\nkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0A\nAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJ\niH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAA\nAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkMR2F/tGjhwZffv2je7du0fv\n3r3jtttui6qqqujTp08cf/zxNde7++67o7y8PKZNm1ZnH/Pnz4/y8vK48cYb62xbt25dDB06NE47\n7bQ49NBD49BDD42zzjornnjiiTrXnTp1apSXl8eQIUNixowZcdlll0XPnj2ja9euMXfu3Dj22GPj\niCOOiLVr19b7WG699dYoLy+Pp59+ugHPCAAAAABZbFex7+c//3n8/Oc/j5UrV8aZZ54Z3/rWt+L5\n55+PCy+8MD788MNa1y0UClEoFDZr/6tWrYqzzz477rrrrthhhx3i9NNPj+985zuxfPnyuO6662Lw\n4MH13u7VV1+Nc845Jz788MM4/fTTo1+/ftGiRYv47ne/G6tXr44JEybUuc0HH3wQEyZMiPbt20ef\nPn02a04AAAAAcmra2ANsLa+++mqMHDky9tlnn3j00UejdevWERFxzTXXxPnnnx9LliyJjh07Nug+\nfvGLX8Sbb74Z//Zv/xYXX3xxzeV///vf4/LLL4+hQ4fGSSedFOXl5bVu96c//SluvfXWOOOMM2pd\n/t3vfjfuvffeGDNmTJ1tTzzxRKxcuTLOOeec2GGHHRo0NwAAAAA5bDdH9j322GNRKBRiwIABNaEv\nIqJ58+Zx7bXXNnj/lZWVMX78+Dj44INrhb7q+/jXf/3X2LhxY71H6XXt2rVOzIuIKCsri+OPPz5m\nzpwZs2bNqrVtzJgxscMOO9R7OwAAAAC2T9vNkX3VseyII46os+2II46Ipk0b9lS8/vrrsWHDhigU\nCjFkyJA626tPE37nnXfqbOvWrdsm99u/f/+YOHFijB49Om699daIiHjrrbfitddei+OOOy46dOjQ\noLkBAAAAyGO7iX1VVVUREdGuXbs625o0aRJt27Zt0P4rKysj4qPo9/rrr9d7nUKhUO+XbZSVlW1y\nvz179oz9998/nnjiibjhhhtip512itGjR0ehUIgzzzyzQTMDAAAAkMt2E/tatWoVERF/+9vfYq+9\n9qq1bePGjVFZWRl77LFHzWXVX86xfv36OvtatWpVncuqTw2+8MIL4/rrry/Z3BERZ511VvziF7+I\n8ePHx2mnnRYTJkyIPfbYI4477riS3g8AAAAA27bt5jP7DjrooIiImDZtWp1t06ZNqxP12rRpExER\nCxcurHP9+o7c6969ezRp0iRefvnlUoxbS79+/aJly5YxZsyYePLJJ2PlypXxL//yL5v9bcEAAAAA\n5LbdxL5+/fpFsViM++67L1asWFFz+QcffBB33nlnnet37949isVi/OY3v4kNGzbUXP7+++/HPffc\nUye07bbbbvHtb3873njjjbjnnntq3aba3LlzY968eZs9e6tWraJv374xa9asuOuuu6Jp06a+mAMA\nAACAOrab03gPO+ywOPfcc+Ohhx6Kvn37xkknnRTNmjWLyZMnR5s2bep8bl737t3jn/7pn+Lll1+O\nM844I3r27BlLly6NZ555Jnr16hVPPvlknfu45ZZb4i9/+Uvcfffd8dvf/jYOP/zwaNeuXSxevDje\neeedeOONN+KOO+6ocxrx59G/f/8YO3ZsLF68OPr06VPrlGMAAAAAiNiOjuyLiBg4cGAMHDgwdtll\nl3jkkUfiiSeeiN69e8fw4cOjWbNmda5/7733xhlnnBGLFi2Khx56KCoqKuLHP/5xXHfddVEoFOoc\n3deqVasYOXJkDBw4MHbbbbd4+umnY8SIETF16tRo1apV3HTTTXHMMcfUuk19+6lP165do2vXrhER\nvpgDAAAAgHoVisVisbGH+DLo06dPFAqFmDx5cmOPUq/Vq1dHr169om3btjFlypSS7rv3N06PNt3P\n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\n20+xWPRfWuEfSrX2gM2zNdbeo48+GoVCIXr37v2F9wHZbIm1N3bs2BgyZEj88pe/jO9973tx4403\nxkoRM18AAB38SURBVF577RXXXXddCSaGHEq99gYOHBjFYjF+9rOflWZASGxLvPZdd9118atf/Sp+\n+ctfxmWXXRZf//rXY+LEiSWY1rfxplJVVRUREa1atap3e/XlK1eu/Fz7ad26db3bqy//rP3A9qJU\naw/YPFt67Y0cOTKef/75OPDAA+M73/nOFxsSEtoSa+/RRx+NGTNm1PzcrVu3uOOOO6JTp04NmBRy\nKeXae/TRR+OZZ56Ju+66K3bbbbfSDQlJlXL9nXDCCXHJJZdE165do23btrFgwYIYN25cDB8+PK69\n9tq47777olevXg2a15F926GGfhZY8R/fFuMzxWDzWDPQOL7I2vv9738fgwYNivbt28fdd98dO+yw\nwxaYDHLbnLU3ZsyYqKioiBdffDGGDRsWxWIx+vXrF88///wWnBBy+qy1N2/evBg0aFCcfPLJcdJJ\nJ22lqWD78Hle+y644II49thjo3379tG8efPo3LlzXHPNNXH99dfHhg0b4le/+lWD5xD7EqkuydXF\n+ZM+64i9T+5n1apVDdoPbC9KtfaAzbOl1t6kSZPi2muvjXbt2sWDDz4YHTt2bNigkMyWfN1r06ZN\nHH300TFs2LBo0aJFXH/99SX9DCPYlpVq7d10003RsmXL+MlPflLr8uqDOoC6tsZ7vjPOOCOaNm0a\nFRUVsWbNmi+8nwixL5V99903isVivPvuu/Vurz53fFOfxVdtv/32q3X9+vZTKBQ+cz+wvSjV2gM2\nz5ZYe7/73e/i6quvjvbt28fIkSNjn332KcGkkMvWeN1r3bp19OjRI5YtWxazZ8/+wvuBTEq19ioq\nKmLp0qVx1FFHRXl5ec0/N910UxQKhbj33nujvLw8rrjiihI/Ath2bY3XvubNm8fOO+8cERFr1679\nwvuJ8Jl9qRx11FEREfHHP/6xzrbVq1fHK6+8Ei1atIgePXp86n4OOeSQaNGiRbzyyiuxZs2aWt/I\nWywWa/bfs2fPEk4P265SrT1g85R67Y0fPz5uuOGG2HPPPeOBBx5wRB9swtZ63Vu0aFFEhNPo4R9K\ntfZOO+20WLduXZ3L33vvvZg2bVoceOCBcdBBB0XXrl1LMzgksDVe++bMmRMrVqyIVq1axa677vqF\n9xPhyL5UOnXqFMccc0zMnz8/Ro4cWWvbr3/961i7dm2cdtpp0aJFi5rL58yZU/Ptu9V22mmnOOWU\nU2LNmjVx991319r24IMPxvz586NXr16x1157bbkHA9uQUq09YPOUcu2NGzcurr/++ujYsWOMHDlS\n6INPUaq19/7778fSpUvrvY/Ro0fH66+/Hl/5yleiS5cupX8QsA0q1dq7+eab47bbbqvzT/WXUR17\n7LFx2223Rf/+/bf8g4JtRKnW37x582LFihV19r9s2bKao2u/9a1vRZMmDct1haIT81OZO3dunH32\n2bF06dLo06dP7L///jF9+vSYOnVq7LfffvHwww9HmzZtaq5fXl4ehUIhKioqau2nsrIyzjrrrPjL\nX/4SPXv2jO7du8fbb78dU6ZMiXbt2sXDDz/s29HgY0q19v785z/H2LFjo1AoxOrVq+P3v/997L77\n7tG7d++a6wwaNGirPS74sivF2nvppZfioosuimKxGKeffnrsueeede6ndevWccEFF2yVxwTbglKs\nvUmTJsXVV18dPXr0iL333jvatWsXlZWVMX369HjrrbeiVatWcd9998URRxzRGA8RvpRK9TdnfcaN\nGxc33nhjDBgwIK666qot+TBgm1SK9Tdu3Lj46U9/Gocffnh06tQp2rRpEwsWLIhnn302qqqqolu3\nbjFs2LBNfuvv5yX2JbRo0aIYPHhwPPfcc1FZWRllZWXxjW98I374wx/GLrvsUuu65eXl0aRJk5g1\na1ad/axcuTKGDBkSkyZNiiVLlkTbtm3j2GOPjSuvvDL22GOPrfVwYJtRirU3bty4uOmmmzZ5H4VC\nod71Ctuzhq69z1p3EREdOnSIyZMnb5H5YVvV0LX3/vvvxwMPPBB//vOfY8GCBVFZWRk77rhjzdET\n559/vr85oR6ler/3SdWvhwMGDIgf/ehHW2p82KY1dP299dZbMXz48Jg5c2YsXrw4qqqqYuedd44D\nDjggTj755DjzzDOjadOGf+Ke2AcAAAAASfjMPgAAAABIQuwDAAAAgCTEPgAAAABIQuwDAAAAgCTE\nPgAAAABIQuwDAAAAgCTEPgAAAABIQuwDAAAAgCTEPgAAAABIQuwDAAAAgCTEPgAAAABIQuwDAAAA\ngCTEPgAAAABIomljDwAA5FBVVRWjRo2KZ555JubMmROrV6+Oli1bRps2baKsrCwOOOCA6NKlS5x6\n6qnRqlWrxh73S6u8vLzm3zt27BiTJ0/eKve7cePG+Pa3vx3vvPNORETcfvvtcdppp9VsP++882La\ntGk1P0+ZMiU6dOiwVWbbVm3t36Xf0eZbtWpV9OnTJ1atWhUREWPGjIlDDjmkkacCgIYR+wCABnv3\n3XfjoosuioULF9ZcVigUoqqqKqqqqmLevHnx6quvRqFQiB49esRBBx3UiNN++RUKha1+nw8//HC8\n8847USgUolOnTnHKKad8Keba1m3t56yxfkefNzROnTo1zj///Jqf+/XrF4MGDdoqM9andevWcd55\n58U999wThUIhBg0aFKNHj260eQCgFMQ+AKDBrrnmmli0aFFNaNh9992jS5cu0aJFi1i2bFm8/fbb\nUVVV1chTbluKxeJWu69169bFkCFDan7+3ve+F02a1P20l+qZRL/P56STTqr593bt2m2V+2zM39Hm\n3OeX6X9DF1xwQfzXf/1XfPDBB/Haa6/FxIkTa/3uAGBbI/YBAA0ya9asePPNN2vevH/jG9+IwYMH\n13kz/9prr8X48eOjRYsWjTEmn+Lxxx+P5cuXR0REs2bN4pvf/GYjT5TD4MGDG3uErerzhMatGbE/\nrzZt2sRxxx0XEydOjIiIBx54QOwDYJsm9gEADfLee+9FxEdv4guFQhx++OH1vtk/5JBDPvWzsCor\nK2P06NHx7LPPxjvvvBOrV6+OVq1aRdeuXaNv375x6qmnRtOm9f/psnr16njsscfif/7nf+Ktt96K\nFStWRIsWLaJdu3bRo0eP6N+/f3Tr1q3ObcaOHRtTpkyJ2bNnx6pVq6Jly5bRqVOnOProo6N///7R\nsWPHOvfVp0+fWLBgQUR8FDUqKiriySefjFGjRkVFRUVs2LAhysvL4/vf/358/etfr3feqVOnxn33\n3RczZsyIDRs2RJcuXeLCCy+Mf/7nf97k81PtmWeeicceeyxmzZoVS5cujWKxGG3bto2ysrI46KCD\n4tBDD41+/fp95n4+rvq0xUKhEMcdd1y0bt16s25f7Ys8p9/85jdjzpw5ERHRoUOHmDJlSs22SZMm\nxRVXXFHz81NPPRWdO3eOiI8+I/LII4+MjRs3RkTEiSeeGL/+9a9r7fvdd9+NUaNGxUsvvRTz58+P\nDz74IHbffffo0aNHnHXWWXH00UfXeQxDhgypdZTj7bffHgcccEDcc8898corr0RlZWXceOONtU5F\n3ZTP+sy+LfG7/KQXXnghhg4dGjNnzoz169dHeXl5XHTRRXHiiSfWe/3169fH+PHj46mnnoqZM2dG\nZWVltGjRIvbee+/o06dPnHfeedGmTZua699www3x3//937X2USwWo0+fPjU/FwqFmDRpUhx//PG1\nrhMRMW7cuBg3blzN5Z88rXdz56n2yef+qaeeimHDhsWECRNi7ty50bx585g6dWrNdU455ZSYOHFi\nFIvFeOWVV+Ktt96Kr371q5/5/ALAl5HYBwA0SLNmzSLiozf0xWIx7r///mjWrFn06tUrOnXq9Ln2\n8eKLL8a1114by5Ytq9lXxEcB8IUXXogXXnghxo4dG0OHDq3zxv6VV16pOY24WvXnBa5atSrefffd\n6NixY63YN3PmzLjiiivi/fffr3ObWbNmxaxZs+Khhx6Kf//3f49TTz21zrwfj5k//vGP4/HHH691\n2fTp0+Pyyy+PwYMH14kqv/nNb+Lmm2+uddn06dPj6quvjosvvvhTn6f7778/7rzzzjpzLFmyJBYv\nXhwzZ86MCRMmbFYgWrBgQcyaNatmX1/72tc+920/7os+p1/72tdizpw5USgU4v3334/58+fXBMGX\nX3651uOcNm1aTex7+eWXY+PGjZuce8SIEfEf//EfsX79+lr7WLRoUUycODEmTpwYZ511VvzsZz+r\n9/FUX/8Pf/hDDBw4MNavX/+FTj3d1G22xO/ykx588MEYMWJErcteffXVePXVV+NHP/pRXH755bW2\nLVy4MAYMGBAVFRW15lq9enXN7/CRRx6Je+65Jw4++OCa7dWzf/yovU8+7uqfq/9/YlPXa+g89d3n\nhx9+GJdcckm89NJLNZc1b9681nWPOuqoaNKkSc1sTz/9tNgHwDZL7AMAGqRHjx7RtGnT2LBhQxQK\nhVi2bFnceuutEfHR6XEHH3xw9OzZM04++eR64997770Xl19+eaxdu7bmjfiBBx4Y7du3jzlz5sRf\n//rXiPi/IDZ8+PCa286dOze+//3vR1VVVa038V/96lejrKws5s2bF7Nnz651f8uWLYtLL700li9f\nXnOb3XbbLbp27Rrz58+vOVJx3bp1cfPNN8dXvvKVOPLII+t97MViMR5//PGa2//v//5v/O1vf6vZ\n7x133FEr9r333nt14lL79u3jgAMOiNmzZ8ewYcM2GT8+/PDDuO+++2q2N2vWLA455JBo3bp1LFmy\n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\nUF1dDYPBgDt37sDLywsBAQGIiorCrFmzemS+hYeHIz8/H3l5eaiurkZbW5sIttne+5YtW/Doo4/i\n6NGjuHr1qsh0tT3Okf70Nfb2/PDDD+LYadOmITQ09K5tiIiI/q0kebB/miYiIiIip3D79m08++yz\nMBgMkCQJH3zwQa/ZfUTO5saNG3jmmWdE0DEnJweJiYn3uVdERESDxwIdRERERP/n3N3dsXLlSgDd\nUx/z8/PFlEYiZ7d7926YzWbIsowpU6Yw0EdERA88BvuIiIiICAsWLEBISAgkSUJjY6OY1kjkzNra\n2vD1119DkiS4uLhg/fr197tLREREDuM0XiIiIiIiIiIiIifBzD4iIiIiIiIiIiInwWAfERERERER\nERGRk2Cwj4iIiIiIiIiIyEkw2EdEREREREREROQkGOwjIiIiIiIiIiJyEgz2EREREREREREROQkG\n+4iIiIiIiIiIiJwEg31EREREREREREROgsE+IiIiIiIiIiIiJ8FgHxERERERERERkZNgsI+IiIiI\niIiIiMhJMNhHRERERERERETkJBjsIyIiIiIiIiIichIM9hERERERERERETmJ/wBB0ffOgI9IhwAA\nAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fa0b5667f98>"
]
},
"metadata": {
"image/png": {
"height": 603,
"width": 637
}
},
"output_type": "display_data"
}
],
"source": [
"p2_timings['default'] = t1.all_runs\n",
"p2_timings['query'] = t2.all_runs\n",
"p2_timings['in1d'] = t3.all_runs\n",
"plot_comparison(p2_timings)"
]
},
{
"cell_type": "code",
"execution_count": 196,
"metadata": {
"ExecuteTime": {
"end_time": "2017-08-18T13:30:24.919031Z",
"start_time": "2017-08-18T13:30:24.916844Z"
},
"collapsed": true
},
"outputs": [],
"source": [
"# but in some case operations on columns faster"
]
},
{
"cell_type": "code",
"execution_count": 192,
"metadata": {
"ExecuteTime": {
"end_time": "2017-08-21T09:21:42.123239Z",
"start_time": "2017-08-21T09:21:37.688593Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"288 ms ± 11.2 ms per loop (mean ± std. dev. of 3 runs, 1 loop each)\n",
"474 ms ± 34.5 ms per loop (mean ± std. dev. of 3 runs, 1 loop each)\n",
"303 ms ± 12.7 ms per loop (mean ± std. dev. of 3 runs, 1 loop each)\n"
]
}
],
"source": [
"t1 = %timeit -r 3 -o df_short = df[(df.col1 == 1) | (df.col2 == 1)]\n",
"t2 = %timeit -r 3 -o df_short = df.query('col1 == 1 | col2 == 1')\n",
"t3 = %timeit -r 3 -o df_short = df[np.in1d(df.col1, 1) | np.in1d(df.col2, 1)]"
]
},
{
"cell_type": "code",
"execution_count": 193,
"metadata": {
"ExecuteTime": {
"end_time": "2017-08-21T09:21:46.309967Z",
"start_time": "2017-08-21T09:21:45.929353Z"
}
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABPsAAAS3CAYAAACQfn8gAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAWJQAAFiUBSVIk8AAAIABJREFUeJzs3W2QVvV9//HPwQ0RI4IoUfAWg+06RpxaNHaaGhWCrYpR\nTI3xZk0fmGkqnUZn2oRMdJzqJKkTSU2hZpoHJdyltUJ0JNapN2NTnai0SYQUg/UmrYIKRkWNAirX\n/4F/Nq4LCckeXPnu6zWzM+x1znW+v9Vn7znn/JpOp9MJAAAAALDLGzbYCwAAAAAA2iH2AQAAAEAR\nYh8AAAAAFCH2AQAAAEARYh8AAAAAFCH2AQAAAEARYh8AAAAAFCH2AQAAAEARYh8AAAAAFCH2AQAA\nAEARYh8AAAAAFCH2AQAAAEARYh8AAAAAFNE12Atg8K1f/9JgLwEAAACglLFjRw7KXHf2AQAAAEAR\nYh8AAAAAFCH2AQAAAEARYh8AAAAAFCH2AQAAAEARYh8AAAAAFCH2AQAAAEARYh8AAAAAFCH2AQAA\nAEARYh8AAAAAFCH2AQAAAEARYh8AAAAAFCH2AQAAAEARYh8AAAAAFCH2AQAAAEARYh8AAAAAFCH2\nAQAAAEARYh8AAAAAFCH2AQAAAEARYh8AAAAAFCH2AQAAAEARYh8AAAAAFCH2AQAAAEARYh8AAAAA\nFCH2AQAAAEARYh8AAAAAFCH2AQAAAEARYh8AAAAAFCH2AQAAAEARYh8AAAAAFCH2AQAAAEARYh8A\nAAAAFCH2AQAAAEARYh8AAAAAFCH2AQAAAEARYh8AAAAAFCH2AQAAAEARYh8AAAAAFCH2AQAAAEAR\nYh8AAAAAFCH2AQAAAEARYh8AAAAAFCH2AQAAAEARYh8AAAAAFCH2AQAAAEARYh8AAAAAFCH2AQAA\nAEARYh8AAAAAFCH2AQAAAEARYh8AAAAAFCH2AQAAAEARYh8AAAAAFCH2AQAAAEARYh8AAAAAFCH2\nAQAAAEARYh8AAAAAFCH2AQAAAEARYh8AAAAAFCH2AQAAAEARYh8AAAAAFCH2AQAAAEARYh8AAAAA\nFCH2AQAAAEARYh8AAAAAFCH2AQAAAEARYh8AAAAAFCH2AQAAAEARYh8AAAAAFCH2AQAAAEARYh8A\nAAAAFCH2AQAAAEARYh8AAAAAFCH2AQAAAEARYh8AAAAAFCH2AQAAAEARYh8AAAAAFCH2AQAAAEAR\nYh8AAAAAFCH2AQAAAEARYh8AAAAAFCH2AQAAAEARYh8AAAAAFCH2AQAAAEARYh8AAAAAFCH2AQAA\nAEARYh8AAAAAFCH2AQAAAEARYh8AAAAAFCH2AQAAAEARYh8AAAAAFCH2AQAAAEARYh8AAAAAFNE1\n2Atg8F3yF5fm6fXPD/YyAAAYBPuP3Ttzr/vaYC8DAGiJ2EeeXv98Rk3qGexlAAAwCJ5eMX+wlwAA\ntMhjvAAAAABQhNgHAAAAAEWIfQAAAABQhNgHAAAAAEWIfQAAAABQhNgHAAAAAEWIfQAAAABQhNgH\nAAAAAEWIfQAAAABQhNgHAAAAAEWIfQAAAABQhNgHAAAAAEWIfQAAAABQhNgHAAAAAEWIfQAAAABQ\nhNgHAAAAAEWIfQAAAABQhNgHAAAAAEWIfQAAAABQhNgHAAAAAEWIfQAAAABQhNgHAAAAAEWIfQAA\nAABQhNgHAAAAAEWIfQAAAABQhNgHAAAAAEWIfQAAAABQhNgHAAAAAEWIfQAAAABQhNgHAAAAAEWI\nfQAAAABQhNgHAAAAAEWIfQAAAABQhNgHAAAAAEWIfQAAAABQhNgHAAAAAEWIfQAAAABQhNgHAAAA\nAEWIfQAAAABQhNgHAAAAAEWIfQAAAABQhNgHAAAAAEWIfQAAAABQhNgHAAAAAEWIfQAAAABQhNgH\nAAAAAEWIfQAAAABQhNgHAAAAAEWIfQAAAABQhNgHAAAAAEWIfQAAAABQhNgHAAAAAEWIfQAAAABQ\nhNgHAAAAAEWIfQAAAABQhNgHAAAAAEWIfQAAAABQhNgHAAAAAEWIfQAAAABQhNgHAAAAAEWIfQAA\nAABQhNgHAAAAAEWIfQAAAABQhNgHAAAAAEWIfQAAAABQhNgHAAAAAEWIfQAAAABQhNgHAAAAAEWI\nfQAAAABQhNgHAAAAAEWIfQAAAABQhNgHAAAAAEWIfQAAAABQhNgHAAAAAEWIfQAAAABQhNgHAAAA\nAEWIfQAAAABQhNgHAAAAAEWIfQAAAABQhNgHAAAAAEWIfQAAAABQhNgHAAAAAEWUjX0nn3xypkyZ\nMuDrLFu2LGeddVaOOeaYdHd358tf/nILq9sxF154Ybq7u9+xeQAAAADs2srGvjb86Ec/yl/+5V/m\nlVdeyXnnnZeZM2fmD/7gD97RNTRN0+f3Bx54IN3d3ZkzZ847ug4AAAAA3v26BnsB72Z33313kuSa\na67J0UcfPbiLAQAAAIBfwZ19v8QzzzyTJBk7duwgr+QXOp3OYC8BAAAAgHepXT72LVy4MKeffnom\nTZqUE044IVdddVVefvnl7Z6/bNmy9PT05LjjjsukSZNy6qmn5vrrr8/mzZt7z/nOd76T7u7ufOc7\n30mn08nJJ5+c7u7uHHHEEVm7dm2S5P7778/ll1+e0047Lb/7u7+bo48+OtOnT8+cOXP6XGurz3/+\n8+nu7u79/lvt6KO5s2bNykUXXZSmaTJnzpx0d3f3rmv58uU7+p8MAAAAgKJ26cd4r7766ixcuDDv\nf//784lPfCJdXV2566678uCDD+a1117L8OHD+5z/hS98IUuXLs24ceMybdq0jBw5Mg8++GCuu+66\n3HffffnHf/zHDBs2LEcccURmzpyZO+64I6tXr05PT09GjhyZJNlrr72SJN/85jfz+OOP53d+53dy\n4oknZtOmTfnBD36QOXPmZPny5Zk3b16f9+01TdPv/Xu/rqlTpyZ5M0Yed9xxOe6443qPHXDAAQO6\nNgAAAAC7vl029v3whz/MwoULc8ghh+TGG2/sjXGXXnppenp6sn79+j4BbOnSpVm6dGmmTZuWr371\nq31C4Jw5czJ37twsWrSodwfc7u7urFmzJqtXr85FF12U8ePH95l/5ZVX5sADD+y3rq9//eu5/vrr\nc9ttt+WP/uiPWv2bp0yZkpEjR/bGvpkzZ7Z6fQAAAAB2bbvsY7xLlixJ0zT5zGc+0xv6kmT48OG5\n7LLL+p0/f/78dHV15Utf+lK/O/7+7M/+LKNGjcott9yyw/O3FfqS5MILL0yn08k999yzw9cCAAAA\ngDbssnf2rVq1KkkyefLkfscmT56crq5f/GkbN27M6tWrM2bMmMybN6/f+Z1OJ8OHD8+jjz66w/Nf\nffXVfOtb38odd9yRn/70p/n5z3/eu3lG0zS9m3sAAAAAwDtll419Wzfh2HffffsdGzZsWEaPHt37\n+4YNG9LpdPLcc89l7ty5273mjr5T7/XXX09PT09WrlyZ3/qt38qpp56aMWPG9AbG7W3SAQAAAAA7\n0y4b+/bcc88kybPPPtvvkdotW7bkhRdeyH777ZckvY/5HnHEEVm6dOmAZ995551ZuXJlZsyYkS99\n6Ut9jq1fv36bu+puDYlvvPFGv2MvvvjigNcEAAAAALvsO/uOPPLIJMny5cv7HVu+fHlef/313t/3\n2GOPHH744XnkkUdaCWv/+7//m6ZpMm3atH7HHnjggW1+Z9SoUUmSp556qt+xlStX7vBdhcOGvfm/\nbMuWLTu6XAAAAACGiF029p111lnpdDr5xje+kQ0bNvR+vmnTpsyePbvf+Z/61KeyefPmzJo1Ky+9\n9FK/4y+++GLvewB/lQMPPDCdTif3339/n8+feOKJXHvttdsMd0cddVQ6nU5uuOGGPp+vXr06CxYs\n2KG5SbL33nsn2XY0BAAAAGBo22Uf4z3mmGNywQUXZNGiRTn99NNzyimn5D3veU/uvPPOjBo1KmPH\nju1z/tlnn51Vq1Zl8eLFmTp1aj784Q9n/Pjx2bBhQ5588sksX748Z599dq688spfOfukk07KIYcc\nknnz5uXhhx/OEUcckbVr1+buu+/OSSedlLVr1/b7ztSpU3PIIYfku9/9bp5++ulMmjQpTz31VO68\n885MnTo1t9566w793RMmTMh+++2X7373u+nq6sq4cePSNE3OPPPMjBs3boeuAQAAAEBNu2zsS5Iv\nfvGLmTBhQhYvXpwbbrgho0ePzrRp0/LZz342Z5xxRr877C6//PKccMIJ+fa3v5377rsvL774YkaN\nGpXx48fn4osvzvTp0/vN2NZdeiNGjMj8+fPz1a9+NQ888ED+67/+KwcddFBmzpyZiy66KLfeemu/\n7w0fPjzz58/P3/zN3+Tee+/Nj3/84xx++OGZPXt29tprr/zrv/7rNme9/bNhw4Zl7ty5ufbaa3Pb\nbbf17gI8efJksQ8AAABgiGs6nU5nsBfB4Drho2dn1KSewV4GAACDYMOK+VmyeN5gLwMAyhk7duSg\nzN1l39kHAAAAAPQl9gEAAABAEWIfAAAAABQh9gEAAABAEWIfAAAAABQh9gEAAABAEWIfAAAAABQh\n9gEAAABAEWIfAAAAABQh9gEAAABAEWIfAAAAABQh9gEAAABAEWIfAAAAABQh9gEAAABAEWIfAAAA\nABQh9gEAAABAEWIfAAAAABQh9gEAAABAEWIfAAAAABQh9gEAAABAEWIfAAAAABQh9gEAAABAEWIf\nAAAAABQh9gEAAABAEWIfAAAAABQh9gEAAABAEWIfAAAAABQh9gEAAABAEWIfAAAAABQh9gEAAABA\nEWIfAAAAABQh9gEAAABAEWIfAAAAABQh9gEAAABAEWIfAAAAABQh9gEAAABAEWIfAAAAABQh9gEA\nAABAEWIfAAAAABQh9gEAAABAEWIfAAAAABQh9gEAAABAEWIfAAAAABQh9gEAAABAEWIfAAAAABQh\n9gEAAABAEWIfAAAAABQh9gEAAABAEWIfAAAAABQh9gEAAABAEWIfAAAAABQh9gEAAABAEWIfAAAA\nABQh9gEAAABAEWIfAAAAABQh9gEAAABAEWIfAAAAABQh9gEAAABAEWIfAAAAABQh9gEAAABAEWIf\nAAAAABQh9gEAAABAEWIfAAAAABQh9gEAAABAEWIfAAAAABQh9gEAAABAEWIfAAAAABQh9gEAAABA\nEWIfAAAAABQh9gEAAABAEWIfAAAAABQh9gEAAABAEWIfAAAAABQh9gEAAABAEWIfAAAAABQh9gEA\nAABAEWIfAAAAABQh9gEAAABAEWIfAAAAABQh9gEAAABAEWIfAAAAABQh9gEAAABAEWIfAAAAABQh\n9gEAAABAEWIfAAAAABQh9gEAAABAEV2DvQAG3/5j987TK+YP9jIAABgE+4/de7CXAAC0qOl0Op3B\nXgSDa/36lwZ7CQAAAACljB07clDmeowXAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAA\nAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEP\nAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACg\nCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAA\nAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ\n+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAA\nAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEP\nAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACg\nCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAA\nAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ\n+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAA\nAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEP\nAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACg\nCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAA\nAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ\n+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAA\nAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEP\nAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACg\nCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAA\nAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ\n+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAA\nAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEP\nAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACg\nCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAA\nAACgCLEPAAAAAIoQ+wAAAACgCLEPAAAAAIoQ+wAAAACgiK7BXgCD75K/uDRPr39+sJcBAMAQtv/Y\nvTP3uq8N9jIAYJcn9pGn1z+fUZN6BnsZAAAMYU+vmD/YSwCAEjzGCwAAAABFiH0AAAAAUITYBwAA\nAABFiH0AAAAAUITYBwAAAABFiH0AAAAAUITYBwAAAABFiH0AAAAAUITYBwAAAABFiH0AAAAAUITY\nBwAAAABFiH0AAAAAUITYBwAAAABFiH0AAAAAUITYBwAAAABFiH0AAAAAUITYBwAAAABFiH0AAAAA\nUITYBwAAAABFiH0AAAAAUITYBwAAAABFiH0AAAAAUITYBwAAAABFiH0AAAAAUITYBwAAAABFiH0A\nAAAAUITYBwAAAABFiH0AAAAAUITYBwAAAABFiH0AAAAAUITYBwAAAABFiH0AAAAAUITYBwAAAABF\niH0AAAAAUITYBwAAAABFiH0AAAAAUITYBwAAAABFiH0AAAAAUITYBwAAAABFiH0AAAAAUITYBwAA\nAABFiH0AAAAAUITYBwAAAABFiH0AAAAAUITYBwAAAABFiH0AAAAAUITYBwAAAABFiH0AAAAAUETX\nQL68fPnyAQ0/9thjB/R9AAAAAOAXBhT7LrzwwjRN8xt9t2marFq1aiDjAQAAAIC3GFDs26rT6bRx\nGQAAAABgAAYc+7YV+t56t9/W49v6DAAAAABoz4Bi31lnndXvs+eeey7//u//niQ59NBDc/jhh6fT\n6eTRRx/N448/nqZpcvzxx2fcuHEDGQ0AAAAAvM2AYt+Xv/zlPr///Oc/zznnnJOmaXL11Vfn7LPP\n7nN86dKl+cIXvpAnnngiX//61wcyGgAAAAB4m2FtXuz666/Po48+miOPPLJf6EuSGTNm5IMf/GDW\nrl2buXPntjkaAAAAAIa8VmPfbbfdlqZpsscee2z3nD322COdTie33357m6MBAAAAYMhrNfY988wz\nSZIVK1Zk9erV/Y6vXr06Dz74YJJk/fr1bY4GAAAAgCFvwLvxvtU+++yTZ555Jhs3bsy5556b0047\nLRMnTkzTNHnkkUeybNmybN68OUkyZsyYNkcDAAAAwJDXauw7+eSTs3jx4jRNk1dffTVLlizpc7zT\n6SRJmqbJlClT2hwNAAAAAENeq4/xzpw5M+PHj0+n00nTNEneDHxvjXxJMm7cuMycObPN0QAAAAAw\n5LUa+8aMGZNFixbluOOO6xP5kl9Ev2OPPTYLFy70GC8AAAAAtKzVx3iTN+/amz9/flauXJnvf//7\nWbt2bTqdTsaPH5/f+73fy6RJk9oeCQAAAABkJ8S+rY466qgcddRRO+vyAAAAAMDb7LTYlyT//d//\nnSeffDJJcsABB+SDH/zgzhwHAAAAAEPaTol9N998c2bPnp1169b1+Xzs2LG57LLLcuaZZ+6MsQAA\nAAAwpLUe+775zW9m9uzZfTbn2GrdunWZNWtW1q1bl09/+tNtjwYAAACAIa3V3XgfeeSR/O3f/m06\nnU6apknTNL3Htv7e6XRy3XXX5eGHH25zNAAAAAAMea3GvsWLF+eNN97ojXoHH3xwpk6dmqlTp+bg\ngw/ujYBbtmzJt7/97TZHAwAAAMCQ1+pjvA888EDvvy+//PKcf/75fY4vWrQoV111VZqmyfLly9sc\nDQAAAABDXqt39j311FNpmia//du/3S/0Jcn555+f7u7udDqdrF27ts3RAAAAADDktRr7Nm3alCTZ\nZ599tnvOmDFjkiSbN29uczQAAAAADHmtxr7Ro0en0+lk5cqVee655/odf+655/LjH/+491wAAAAA\noD2txr7u7u4kyUsvvZQLLrggN910U1atWpWHHnooN910U3p6evLiiy/2PuoLAAAAALSn1Q06Tjnl\nlNxzzz1JksceeyyzZs3qc7zT6fT++w//8A/bHA0AAAAAQ16rd/Z97GMfy+GHH54kaZomnU6nz0/T\nNEmSiRMn5mMf+1ibowEAAABgyGs19g0fPjx///d/n0MPPbT3Lr6maXojX6fTyaGHHprrr78+w4cP\nb3M0AAAAAAx5rT7GmyQHHXRQbr755ixZsiR333131qxZk06nkwMPPDAnnnhizj77bKEPAAAAAHaC\n1mNf8uYdfp/85CfzyU9+cmdcHgAAAADYhlYf4wUAAAAABs9OubNv06ZNWblyZdatW5fNmzdv97wz\nzzxzZ4wHAAAAgCGp9dg3b968zJ07Ny+//PKvPFfsAwAAAID2tBr7lixZkq985Ss7dO7WHXoBAAAA\ngHa0+s6+BQsWJHkz5FWKeWvWrEl3d3dmzZo12Evp4+STT86UKVMGexkAAAAAvEu0emff448/3hv5\nJk6cmA996EMZOXJkdttttzbHDIo2AuaKFSty++235yc/+UkeeuihPPvss9l///1z9913t7NIAAAA\nAIa0VmPf7rvvns2bN2fcuHG58cYb8973vrfNyw+a/fbbL7feemtGjhw5oOssW7YsCxYsSFdXVz7w\n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\nBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAA\nkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0A\nAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJ\niH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAA\nAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITY\nBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAA\nkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0A\nAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJiH0AAAAAkITYBwAAAABJ\niH0AAAAAkITYBwAAAABJbHexb8SIEdG3b9/o1q1b9OrVK2677baoqqqK3r17xwknnFBzvbvvvjvK\ny8tj6tSpdfaxYMGCKC8vjxtvvLHOtnXr1sV9990Xp512Whx22GFx2GGHxVlnnRVPPvlknetOmTIl\nysvLY8iQITF9+vS47LLLokePHtGlS5eYN29eHHfccXHkkUfG2rVr630st956a5SXl8czzzzTgGcE\nAAAAgCy2q9j385//PH7+85/HypUr48wzz4xvfetb8cILL8SFF14YH330Ua3rFgqFKBQKm7X/VatW\nxdlnnx133XVX7LDDDnH66afHd77znVi+fHlcd911MXjw4Hpv9/rrr8c555wTH330UZx++unRr1+/\naNGiRXz3u9+N1atXx/jx4+vc5sMPP4zx48dH+/bto3fv3ps1JwAAAAA5NW3sAbaW119/PUaMGBH7\n7LNPPPbYY9G6deuIiLjmmmvi/PPPjyVLlkTHjh0bdB+/+MUv4u23345/+7d/i4svvrjm8r/97W9x\n+eWXx3333Rd9+vSJ8vLyWrf74x//GLfeemucccYZtS7/7ne/G/fcc0+MHj26zrYnn3wyVq5cGeec\nc07ssMMODZobAAAAgBy2myP7Hn/88SgUCjFgwICa0BcR0bx587j22msbvP/KysoYN25cHHLIIbVC\nX/V9/Ou//mts3Lix3qP0unTpUifmRUSUlZXFCSecEDNmzIiZM2fW2jZ69OjYYYcd6r0dAAAAANun\n7ebIvupYduSRR9bZduSRR0bTpg17Kt58883YsGFDFAqFGDJkSJ3t1acJv/fee3W2de3adZP77d+/\nf0yYMCFGjRoVt956a0REvPPOO/HGG2/E8ccfHx06dGjQ3AAAAADksd3EvqqqqoiIaNeuXZ1tTZo0\nibZt2zZo/5WVlRHxcfR78803671OoVCo98s2ysrKNrnfHj16xAEHHBBPPvlk3HDDDbHTTjvFqFGj\nolAoxJlnntmgmQEAAADIZbuJfa1atYqIiL/+9a+x11571dq2cePGqKysjD322KPmsuov51i/fn2d\nfa1atarOZdWnBl944YVx/fXXl2zuiIizzjorfvGLX8S4cePitNNOi/Hjx8cee+wRxx9/fEnvBwAA\nAIBt23bzmX0HH3xwRERMnTq1zrapU6fWiXpt2rSJiIhFixbVuX59R+5169YtmjRpEq+++mopxq2l\nX79+0bJlyxg9enQ89dRTsXLlyviXf/mXzf62YAAAAABy225iX79+/aJYLMa9994bK1asqLn8ww8/\njDvvvLPO9bt16xbFYjF+85vfxIYNG2ouf//992Po0KF1Qttuu+0W3/72t+Ott96KoUOH1rpNtXnz\n5sX8+fM3e/ZWrVpF3759Y+bMmXHXXXdF06ZNfTEHAAAAAHVsN6fxHn744XHuuefGww8/HH379o0+\nffpEs2bNYtKkSdGmTZs6n5vXrVu3+Kd/+qd49dVX44wzzogePXrE0qVL49lnn42ePXvGU089Vec+\nbrnllvjzn/8cd999d/z2t7+NI444Itq1axcffPBBvPfee/HWW2/FHXfcUec04s+jf//+MWbMmPjg\ngw+id+/etU45BgAAAICI7ejIvoiIgQMHxsCBA2OXXXaJRx99NJ588sno1atXDBs2LJo1a1bn+vfc\nc0+cccYZsXjx4nj44YejoqIifvzjH8d1110XhUKhztF9rVq1ihEjRsTAgQNjt912i2eeeSaGDx8e\nU6ZMiVatWsVNN90Uxx57bK3b1Lef+nTp0iW6dOkSEeGLOQAAAACoV6FYLBYbe4gvg969e0ehUIhJ\nkyY19ij1Wr16dfTs2TPatm0bkydPLum+e33j9GjT7fyS7hMAAABgU1ZMfzAeHzm8scfYosrKWjfK\n/W5XR/Zty0aOHBlr1qyJc845p7FHAQAAAOBLarv5zL5tUVVVVYwcOTIWL14cY8aMiT322CPOPvvs\nxh4LAAAAgC8pse8TPs9n521NK1asiDvvvDN23HHH6Nq1awwcODB22mmnxh4LAAAAgC8pse/vSv05\neKXQsWPHePvttxt7DAAAAAC2ET6zDwAAAACSEPsAAAAAIAmxDwAAAACSEPsAAAAAIAmxDwAAAACS\nEPsAAAAAIAmxDwAAAACSEPsAAAAAIAmxDwAAAACSEPsAAAAAIAmxDwAAAACSEPsAAAAAIAmxDwAA\nAACSEPsAAAAAIAmxDwAAAACSEPsAAAAAIAmxDwAAAACSEPsAAAAAIAmxDwAAAACSEPsAAAAAIAmx\nDwAAAACSEPsAAAAAIAmxDwAAAACSEPsAAAAAIAmxDwAAAACSEPsAAAAAIAmxDwAAAACSEPsAAAAA\nIAmxDwAAAACSEPsAAAAAIAmxDwAAAACSEPsAAAAAIAmxDwAAAACSEPsAAAAAIAmxDwAAAACSEPsA\nAAAAIAmxDwAAAACSEPsAAAAAIAmxDwAAAACSEPsAAAAAIAmxDwAAAACSEPsAAAAAIAmxDwAAAACS\nEPsAAAAAIAmxDwAAAACSEPsAAAAAIAmxDwAAAACSEPsAAAAAIAmxDwAAAACSEPsAAAAAIAmxDwAA\nAACSEPsAAAAAIAmxDwAAAACSEPsAAAAAIAmxDwAAAACSEPsAAAAAIAmxDwAAAACSEPsAAAAAIAmx\nDwAAAACSEPsAAAAAIAmxDwAAAACSEPsAAAAAIAmxDwAAAACSEPsAAAAAIAmxDwAAAACSEPsAAAAA\nIAmxDwAAAACSEPsAAAAAIAmxDwAAAACSEPsAAAAAIAmxDwAAAACSEPsAAAAAIAmxDwAAAACSEPsA\nAAAAIAmxDwAAAACSEPsAAAAAIAmxDwAAAACSEPsAAAAAIAmxDwAAAACSEPsAAAAAIAmxDwAAAACS\nEPsAAAAAIImmjT0AjW/Psl1j0fQHG3sMAAAAYDuxZ9mujT1CWoVisVhs7CFoXEuWrGrsEQAAAABS\nKStr3Sj36zReAAAAAEhC7AMAAACAJMQ+AAAAAEhC7AMAAACAJMQ+AAAAAEhC7AMAAACAJMQ+AAAA\n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\nbyWbV+xLZM6cOTUfKF6ffffdNyI++7+Qzp49u9b169tPsVj0X1rh70q19oDNszXW3mOPPRaFQiF6\n9aoraVAAAB4ZSURBVOr1hfcB2WyJtTdmzJgYMmRI/PKXv4zvfe97ceONN8Zee+0V1113XQkmhhxK\nvfYGDhwYxWIxfvazn5VmQEhsS7z2XXfddfGrX/0qfvnLX8Zll10WX//612PChAklmNa38aZSVVUV\nERGtWrWqd3v15StXrvxc+2ndunW926sv/6z9wPaiVGsP2Dxbeu2NGDEiXnjhhTjooIPiO9/5zhcb\nEhLaEmvvsccei+nTp9f83LVr17jjjjuiU6dODZgUcinl2nvsscfi2Wefjbvuuit222230g0JSZVy\n/Z144olxySWXRJcuXaJt27axcOHCGDt2bAwbNiyuvfbauPfee6Nnz54NmteRfduhhn4WWPHv3xbj\nM8Vg81gz0Di+yNr7/e9/H4MGDYr27dvH3XffHTvssMMWmAxy25y1N3r06KioqIiXX345HnjggSgW\ni9GvX7944YUXtuCEkNNnrb358+fHoEGD4uSTT44+ffpspalg+/B5XvsuuOCCOO6446J9+/bRvHnz\n2HfffeOaa66J66+/PjZs2BC/+tWvGjyH2JdIdUmuLs6f9llH7H16P6tWrWrQfmB7Uaq1B2yeLbX2\nJk6cGNdee220a9cuHnrooejYsWPDBoVktuTrXps2beKYY46JBx54IFq0aBHXX399ST/DCLZlpVp7\nN910U7Rs2TJ+8pOf1Lq8+qAOoK6t8Z7vjDPOiKZNm0ZFRUWsWbPmC+8nQuxLZb/99otisRhz5syp\nd3v1ueOb+iy+avvvv3+t69e3n0Kh8Jn7ge1FqdYesHm2xNr73e9+F1dffXW0b98+RowYEfvss08J\nJoVctsbrXuvWraN79+6xbNmymDVr1hfeD2RSqrVXUVERS5cujaOPPjrKy8tr/rnpppuiUCjEPffc\nE+Xl5XHFFVeU+BHAtmtrvPY1b948dt5554iIWLt27RfeT4TP7Evl6KOPjoiIF198sc621atXx2uv\nvRYtWrSI7t27/8P9HHroodGiRYt47bXXYs2aNbW+kbdYLNbsv0ePHiWcHrZdpVp7wOYp9dobN25c\n3HDDDbHnnnvGgw8+6Ig+2ISt9bq3ePHiiAin0cPflWrtnXbaabFu3bo6l8+dOzemTp0aBx10UBx8\n8MHRpUuX0gwOCWyN177Zs2fHihUrolWrVrHrrrt+4f1EOLIvlU6dOsWxxx4bCxYsiBEjRtTa9utf\n/zrWrl0bp512WrRo0aLm8tmzZ9d8+261nXbaKU455ZRYs2ZN3H333bW2PfTQQ7FgwYLo2bNn7LXX\nXlvuwcA2pFRrD9g8pVx7Y8eOjeuvvz46duwYI0aMEPrgHyjV2nv//fdj6dKl9d7HqFGj4s0334yv\nfOUr0blz59I/CNgGlWrt3XzzzXHbbbfV+af6y6iOO+64uO2226J///5b/kHBNqJU62/+/PmxYsWK\nOvtftmxZzdG13/rWt6JJk4blukLRifmpzJs3L84+++xYunRp9O7dOw444ICYNm1aTJkyJfbff/94\n5JFHok2bNjXXLy8vj0KhEBUVFbX2U1lZGWeddVb8+c9/jh49ekS3bt3i3XffjcmTJ0e7du3ikUce\n8e1o8AmlWnt/+tOfYsyYMVEoFGL16tXx+9//Pnbffffo1atXzXUGDRq01R4XfNmVYu298sorcdFF\nF0WxWIzTTz899txzzzr307p167jgggu2ymOCbUEp1t7EiRPj6quvju7du8fee+8d7dq1i8rKypg2\nbVq888470apVq7j33nvjyCOPbIyHCF9Kpfqbsz5jx46NG2+8MQYMGBBXXXXVlnwYsE0qxfobO3Zs\n/PSnP40jjjgiOnXqFG3atImFCxfGc889F1VVVdG1a9d44IEHNvmtv5+X2JfQ4sWLY/DgwfH8889H\nZWVllJWVxTe+8Y344Q9/GLvsskut65aXl0eTJk1i5syZdfazcuXKGDJkSEycODGWLFkSbdu2jeOO\nOy6uvPLK2GOPPbbWw4FtRinW3tixY+Omm27a5H0UCoV61ytszxq69j5r3UVEdOjQISZNmrRF5odt\nVUPX3vvvvx8PPvhg/OlPf4qFCxdGZWVl7LjjjjVHT5x//vn+5oR6lOr93qdVvx4OGDAgfvSjH22p\n8WGb1tD1984778SwYcNixowZ8cEHH0RVVVXsvPPOceCBB8bJJ58cZ555ZjRt2vBP3BP7AAAAACAJ\nn9kHAAAAAEmIfQAAAACQhNgHAAAAAEmIfQAAAACQhNgHAAAAAEmIfQAAAACQhNgHAAAAAEmIfQAA\nAACQhNgHAAAAAEmIfQAAAACQhNgHAAAAAEmIfQAAAACQhNgHAAAAAEk0bewBAIAcqqqqYuTIkfHs\ns8/G7NmzY/Xq1dGyZcto06ZNlJWVxYEHHhidO3eOU089NVq1atXY435plZeX1/x7x44dY9KkSVvl\nfjdu3Bjf/va347333ouIiNtvvz1OO+20mu3nnXdeTJ06tebnyZMnR4cOHbbKbNuqrf279DvafKtW\nrYrevXvHqlWrIiJi9OjRceihhzbyVADQMGIfANBgc+bMiYsuuigWLVpUc1mhUIiqqqqoqqqK+fPn\nx+uvvx6FQiG6d+8eBx98cCNO++VXKBS2+n0+8sgj8d5770WhUIhOnTrFKaec8qWYa1u3tZ+zxvod\nfd7QOGXKlDj//PNrfu7Xr18MGjRoq8xYn9atW8d5550XQ4cOjUKhEIMGDYpRo0Y12jwAUApiHwDQ\nYNdcc00sXry4JjTsvvvu0blz52jRokUsW7Ys3n333aiqqmrkKbctxWJxq93XunXrYsiQITU/f+97\n34smTep+2kv1TKLf59OnT5+af2/Xrt1Wuc/G/B1tzn1+mf43dMEFF8R//dd/xYcffhhvvPFGTJgw\nodbvDgC2NWIfANAgM2fOjLfffrvmzfs3vvGNGDx4cJ0382+88UaMGzcuWrRo0Rhj8g888cQTsXz5\n8oiIaNasWXzzm99s5IlyGDx4cGOPsFV9ntC4NSP259WmTZs4/vjjY8KECRER8eCDD4p9AGzTxD4A\noEHmzp0bER+/iS8UCnHEEUfU+2b/0EMP/YefhVVZWRmjRo2K5557Lt57771YvXp1tGrVKrp06RJ9\n+/aNU089NZo2rf9Pl9WrV8fjjz8e//M//xPvvPNOrFixIlq0aBHt2rWL7t27R//+/aNr1651bjNm\nzJiYPHlyzJo1K1atWhUtW7aMTp06xTHHHBP9+/ePjh071rmv3r17x8KFCyPi46hRUVERTz31VIwc\nOTIqKipiw4YNUV5eHt///vfj61//er3zTpkyJe69996YPn16bNiwITp37hwXXnhh/PM///Mmn59q\nzz77bDz++OMxc+bMWLp0aRSLxWjbtm2UlZXFwQcfHIcddlj069fvM/fzSdWnLRYKhTj++OOjdevW\nm3X7al/kOf3mN78Zs2fPjoiIDh06xOTJk2u2TZw4Ma644oqan59++unYd999I+Ljz4g86qijYuPG\njRERcdJJJ8Wvf/3rWvueM2dOjBw5Ml555ZVYsGBBfPjhh7H77rtH9+7d46yzzopjjjmmzmMYMmRI\nraMcb7/99jjwwANj6NCh8dprr0VlZWXceOONtU5F3ZTP+sy+LfG7/LSXXnop7rvvvpgxY0asX78+\nysvL46KLLoqTTjqp3uuvX78+xo0bF08//XTMmDEjKisro0WLFrH33ntH796947zzzos2bdrUXP+G\nG26I//7v/661j2KxGL179675uVAoxMSJE+OEE06odZ2IiLFjx8bYsWNrLv/0ab2bO0+1Tz/3Tz/9\ndDzwwAMxfvz4mDdvXjRv3jymTJlSc51TTjklJkyYEMViMV577bV455134qtf/epnPr8A8GUk9gEA\nDdKsWbOI+PgNfbFYjPvvvz+aNWsWPXv2jE6dOn2ufbz88stx7bXXxrJly2r2FfFxAHzppZfipZde\nijFjxsR9991X5439a6+9VnMacbXqzwtctWpVzJkzJzp27Fgr9s2YMSOuuOKKeP/99+vcZubMmTFz\n5sx4+OGH49///d/j1FNPrTPvJ2Pmj3/843jiiSdqXTZt2rS4/PLLY/DgwXWiym9+85u4+eaba102\nbdq0uPrqq+Piiy/+h8/T/fffH3feeWedOZYsWRIffPBBzJgxI8aPH79ZgWjhwoUxc+bMmn197Wtf\n+9y3/aQv+px+7Wtfi9mzZ0ehUIj3338/FixYUBMEX3311VqPc+rUqTWx79VXX42NGzducu7hw4fH\nf/zHf8T69etr7WPx4sUxYcKEmDBhQpx11lnxs5/9rN7HU339P/zhDzFw4MBYv379Fzr1dFO32RK/\ny0976KGHYvjw4bUue/311+P111+PH/3oR3H55ZfX2rZo0aIYMGBAVFRU1Jpr9erVNb/DRx99NIYO\nHRqHHHJIzfbq2T951N6nH3f1z9X/P7Gp6zV0nvru86OPPopLLrkkXnnllZrLmjdvXuu6Rx99dDRp\n0qRmtmeeeUbsA2CbJfYBAA3SvXv3aNq0aWzYsCEKhUIsW7Ysbr311oj4+PS4Qw45JHr06BEnn3xy\nvfFv7ty5cfnll8fatWtr3ogfdNBB0b59+5g9e3b85S9/iYj/C2LDhg2rue28efPi+9//flRVVdV6\nE//Vr341ysrKYv78+TFr1qxa97ds2bK49NJLY/ny5TW32W233aJLly6xYMGCmiMV161bFzfffHN8\n5StfiaOOOqrex14sFuOJJ56ouf3//u//xl//+tea/d5xxx21Yt/cuXPrxKX27dvHgQceGLNmzYoH\n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\nYrEgPDwcKSkpmDt3bo+2jzzyCL755hsUFBTgp59+QlVVFQwGA+7cuQNvb28EBgYiKioKs2bN6pH5\nFh4ejtzcXOTk5KCqqgptbW0i2GZ771u3bsWjjz6K48ePo7GxUWS62h7nSH/6Gnt7fvjhB3HstGnT\nEBoaetc2RERE/1aSPNg/TRMRERGRU7h9+zaeffZZGAwGSJKEDz74oNfsPiJn09LSgmeeeUYEHbOy\nsjB79uz73CsiIqLBY4EOIiIiov9z7u7uSE9PB9A99TE3N1dMaSRydnv37oXZbIYsy5gyZQoDfURE\n9MBjsI+IiIiIsGjRIoSEhECSJNTX14tpjUTOrK2tDV9//TUkSYKLiwvWr19/v7tERETkME7jJSIi\nIiIiIiIichLM7CMiIiIiIiIiInISDPYRERERERERERE5CQb7iIiIiIiIiIiInASDfURERERERERE\nRE6CwT4iIiIiIiIiIiInwWAfERERERERERGRk2Cwj4iIiIiIiIiIyEkw2EdEREREREREROQkGOwj\nIiIiIiIiIiJyEgz2EREREREREREROQkG+4iIiIiIiIiIiJwEg31EREREREREREROgsE+IiIiIiIi\nIiIiJ8FgHxERERERERERkZP4D4fs/R9JqAC1AAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fa0b5667b70>"
]
},
"metadata": {
"image/png": {
"height": 603,
"width": 637
}
},
"output_type": "display_data"
}
],
"source": [
"p2_timings['default'] = t1.all_runs\n",
"p2_timings['query'] = t2.all_runs\n",
"p2_timings['in1d'] = t3.all_runs\n",
"plot_comparison(p2_timings)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Most popular element\n",
"Find most popular element in col2 for every value in col1"
]
},
{
"cell_type": "code",
"execution_count": 199,
"metadata": {
"ExecuteTime": {
"end_time": "2017-08-21T09:25:23.748768Z",
"start_time": "2017-08-21T09:25:23.723187Z"
},
"collapsed": true
},
"outputs": [],
"source": [
"n_rows = 10 ** 4\n",
"df = pd.DataFrame()\n",
"df['col1'] = np.random.randint(0, n_rows, n_rows)\n",
"df['col2'] = np.random.randint(0, 5, n_rows)"
]
},
{
"cell_type": "code",
"execution_count": 200,
"metadata": {
"ExecuteTime": {
"end_time": "2017-08-21T09:25:23.894069Z",
"start_time": "2017-08-21T09:25:23.882775Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"0.6307"
]
},
"execution_count": 200,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.col1.nunique() / len(df)"
]
},
{
"cell_type": "code",
"execution_count": 201,
"metadata": {
"ExecuteTime": {
"end_time": "2017-08-21T09:25:24.016311Z",
"start_time": "2017-08-21T09:25:24.010254Z"
},
"collapsed": true
},
"outputs": [],
"source": [
"from collections import Counter\n",
"import scipy\n",
"from collections import defaultdict"
]
},
{
"cell_type": "code",
"execution_count": 202,
"metadata": {
"ExecuteTime": {
"end_time": "2017-08-21T09:25:26.718025Z",
"start_time": "2017-08-21T09:25:24.282714Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"614 ms ± 106 ms per loop (mean ± std. dev. of 3 runs, 1 loop each)\n"
]
}
],
"source": [
"t1 = %timeit -r 3 -o modes = df.groupby('col1').col2.apply(lambda x: Counter(x).most_common()[0][0])"
]
},
{
"cell_type": "code",
"execution_count": 204,
"metadata": {
"ExecuteTime": {
"end_time": "2017-08-21T09:25:38.761462Z",
"start_time": "2017-08-21T09:25:33.860189Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1.2 s ± 77.8 ms per loop (mean ± std. dev. of 3 runs, 1 loop each)\n"
]
}
],
"source": [
"t2 = %timeit -r 3 -o modes = df.groupby('col1').col2.apply(lambda x: scipy.stats.mode(x)[0])"
]
},
{
"cell_type": "code",
"execution_count": 205,
"metadata": {
"ExecuteTime": {
"end_time": "2017-08-21T09:25:40.854507Z",
"start_time": "2017-08-21T09:25:38.765358Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"49 ms ± 7.32 ms per loop (mean ± std. dev. of 3 runs, 10 loops each)\n"
]
},
{
"data": {
"text/plain": [
"<TimeitResult : 49 ms ± 7.32 ms per loop (mean ± std. dev. of 3 runs, 10 loops each)>"
]
},
"execution_count": 205,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%%timeit -r 3 -o\n",
"d = defaultdict(lambda: defaultdict(lambda: 0))\n",
"for x1, x2 in df.values:\n",
" d[x1][x2] += 1\n",
" \n",
"modes = {}\n",
"for x1 in d:\n",
" counts = d[x1]\n",
" best_x2 = 0\n",
" best_x2_count = 0\n",
" for x2 in counts:\n",
" if counts[x2] > best_x2_count:\n",
" best_x2_count = counts[x2]\n",
" best_x2 = x2\n",
" modes[x1] = best_x2"
]
},
{
"cell_type": "code",
"execution_count": 206,
"metadata": {
"ExecuteTime": {
"end_time": "2017-08-21T09:26:18.886934Z",
"start_time": "2017-08-21T09:26:18.346523Z"
}
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABSgAAAS3CAYAAADl1pSqAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAWJQAAFiUBSVIk8AAAIABJREFUeJzs3XuwVeV9//HPFmKEQVCYUxQQ8BI93lBbvLXGSUFLjUUx\nVBsHJRljTRUasbEZsZck6rQ20+EXrUCHlDFqwKmihjQhTlumSkzSQJMoUlMdqdHIfURU4oUA+/eH\nc049OWDUs/Eb4PWaOTOH9ay1nmcf/nvPs/ZqNJvNZgAAAAAACuxTvQAAAAAAYO8lUAIAAAAAZQRK\nAAAAAKCMQAkAAAAAlBEoAQAAAIAyAiUAAAAAUEagBAAAAADKCJQAAAAAQBmBEgAAAAAoI1ACAAAA\nAGUESgAAAACgjEAJAAAAAJQRKAEAAACAMr2rFwDvxYYNr1QvAQAAAGCP0ta2f8m8dlACAAAAAGUE\nSgAAAACgjEAJAAAAAJQRKAEAAACAMgIlAAAAAFBGoAQAAAAAygiUAAAAAEAZgRIAAAAAKCNQAgAA\nAABlBEoAAAAAoIxACQAAAACUESgBAAAAgDICJQAAAABQRqAEAAAAAMoIlAAAAABAGYESAAAAACgj\nUAIAAAAAZQRKAAAAAKCMQAkAAAAAlBEoAQAAAIAyAiUAAAAAUEagBAAAAADKCJQAAAAAQBmBEgAA\nAAAoI1ACAAAAAGUESgAAAACgjEAJAAAAAJQRKAEAAACAMgIlAAAAAFBGoAQAAAAAygiUAAAAAEAZ\ngRIAAAAAKCNQAgAAAABlBEoAAAAAoIxACQAAAACUESgBAAAAgDICJQAAAABQRqAEAAAAAMoIlAAA\nAABAGYESAAAAACgjUAIAAAAAZQRKAAAAAKCMQAkAAAAAlBEoAQAAAIAyAiUAAAAAUEagBAAAAADK\nCJQAAAAAQBmBEgAAAAAoI1ACAAAAAGUESgAAAACgjEAJAAAAAJQRKAEAAACAMgIlAAAAAFBGoAQA\nAAAAygiUAAAAAEAZgRIAAAAAKCNQAgAAAABlBEoAAAAAoIxACQAAAACUESgBAAAAgDICJQAAAABQ\nRqAEAAAAAMoIlAAAAABAGYESAAAAACgjUAIAAAAAZQRKAAAAAKCMQAkAAAAAlBEoAQAAAIAyAiUA\nAAAAUEagBAAAAADKCJQAAAAAQBmBEgAAAAAoI1ACAAAAAGUESgAAAACgjEAJAAAAAJQRKAEAAACA\nMgIlAAAAAFBGoAQAAAAAygiUAAAAAEAZgRIAAAAAKCNQAgAAAABlBEoAAAAAoIxACQAAAACUESgB\nAAAAgDICJQAAAABQRqAEAAAAAMoIlAAAAABAGYESAAAAACgjUAIAAAAAZQRKAAAAAKCMQAkAAAAA\nlBEoAQAAAIAyvasXAO/FlKuvydoNL1YvA9jDHdR2YGbe8v+qlwEAALBHEyjZLa3d8GIGjJpcvQxg\nD7d2+Z3VSwAAANjjecQbAAAAACgjUAIAAAAAZQRKAAAAAKCMQAkAAAAAlBEoAQAAAIAyAiUAAAAA\nUEagBAAAAADKCJQAAAAAQBmBEgAAAAAoI1ACAAAAAGUESgAAAACgjEAJAAAAAJQRKAEAAACAMgIl\nAAAAAFBGoAQAAAAAygiUAAAAAEAZgRIAAAAAKCNQAgAAAABlBEoAAAAAoIxACQAAAACUESgBAAAA\ngDICJQAAAABQRqAEAAAAAMoIlAAAAABAGYESAAAAACgjUAIAAAAAZQRKAAAAAKCMQAkAAAAAlBEo\nAQAAAIAyAiUAAAAAUEagBAAAAADKCJQAAAAAQBmBEgAAAAAoI1ACAAAAAGUESgAAAACgjEAJAAAA\nAJQRKAEAAACAMgIlAAAAAFBGoAQAAAAAygiUAAAAAEAZgRIAAAAAKCNQAgAAAABlBEoAAAAAoIxA\nCQAAAACUESgBAAAAgDICJQAAAABQRqAEAAAAAMoIlAAAAABAGYESAAAAACgjUAIAAAAAZQRKAAAA\nAKCMQAkAAAAAlBEoAQAAAIAyAiUAAAAAUEagBAAAAADKCJQAAAAAQBmBEgAAAAAoI1ACAAAAAGUE\nSgAAAACgjEAJAAAAAJQRKAEAAACAMgIlAAAAAFBGoAQAAAAAygiUAAAAAEAZgRIAAAAAKCNQAgAA\nAABlBEoAAAAAoIxACQAAAACUESgBAAAAgDICJQAAAABQRqAEAAAAAMoIlAAAAABAGYESAAAAACgj\nUAIAAAAAZQRKAAAAAKCMQAkAAAAAlBEoAQAAAIAyAiUAAAAAUEagBAAAAADKCJQAAAAAQBmBEgAA\nAAAoI1ACAAAAAGUESgAAAACgjEC5l2hvb8/kyZOrlwEAAAAAXQiUAAAAAEAZgRIAAAAAKCNQvk+W\nL1+eadOm5cwzz8zxxx+fM844I5/61Kfy7W9/O0mydOnStLe357bbbtvh9WPGjMnYsWO7HPvFL36R\n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\noAQAAAAAygiUAAAAAEAZgRIAAAAAKCNQAgAAAABlBEoAAAAAoIxACQAAAACUESgBAAAAgDICJQAA\nAABQRqAEAAAAAMoIlAAAAABAGYESAAAAACgjUAIAAAAAZQRKAAAAAKCMQAkAAAAAlBEoAQAAAIAy\nAiUAAAAAUEagBAAAAADKCJQAAAAAQBmBEgAAAAAoI1ACAAAAAGUESgAAAACgjEAJAAAAAJQRKAEA\nAACAMgIlAAAAAFBGoAQAAAAAygiUAAAAAEAZgRIAAAAAKCNQAgAAAABlBEoAAAAAoIxACQAAAACU\nESgBAAAAgDICJQAAAABQRqAEAAAAAMoIlAAAAABAGYESAAAAACgjUAIAAAAAZQRKAAAAAKCMQAkA\nAAAAlBEoAQAAAIAyAiUAAAAAUEagBAAAAADKCJQAAAAAQBmBEgAAAAAoI1ACAAAAAGUESgAAAACg\njEAJAAAAAJQRKAEAAACAMgIlAAAAAFBGoAQAAAAAygiUAAAAAEAZgRIAAAAAKCNQAgAAAABlBEoA\nAAAAoIxACQAAAACUESgBAAAAgDICJQAAAABQpnf1AuC9OKjtwKxdfmf1MoA93EFtB1YvAQAAYI/X\naDabzepFwLu1YcMr1UsAAAAA2KO0te1fMq9HvAEAAACAMgIlAAAAAFBGoAQAAAAAygiUAAAAAEAZ\ngRIAAAAAKCNQAgAAAABlBEoAAAAAoIxACQAAAACUESgBAAAAgDICJQAAAABQRqAEAAAAAMoIlAAA\nAABAGYESAAAAACgjUAIAAAAAZQRKAAAAAKCMQAkAAAAAlBEoAQAAAIAyAiUAAAAAUEagBAAAAADK\nCJQAAAAAQBmBEgAAAAAoI1ACAAAAAGUESgAAAACgjEAJAAAAAJQRKAEAAACAMgIlAAAAAFBGoAQA\nAAAAygiUAAAAAEAZgRIAAAAAKCNQAgAAAABlBEoAAAAAoIxACQAAAACUESgBAAAAgDICJQAAAABQ\nRqAEAAAAAMoIlAAAAABAGYESAAAAACgjUAIAAAAAZQRKAAAAAKCMQAkAAAAAlBEoAQAAAIAyAiUA\nAAAAUEagBAAAAADKCJQAAAAAQBmBEgAAAAAoI1ACAAAAAGUESgAAAACgjEAJAAAAAJQRKAEAAACA\nMgIlAAAAAFBGoAQAAAAAygiUAAAAAEAZgRIAAAAAKCNQAgAAAABlBEoAAAAAoIxACQAAAACUESgB\nAAAAgDICJQAAAABQRqAEAAAAAMoIlAAAAABAGYESAAAAACgjUAIAAAAAZQRKAAAAAKCMQAkAAAAA\nlBEoAQAAAIAyAiUAAAAAUEagBAAAAADKCJQAAAAAQBmBEgAAAAAoI1ACAAAAAGUESgAAAACgjEAJ\nAAAAAJQRKAEAAACAMgIlAAAAAFBGoAQAAAAAygiUAAAAAEAZgRIAAAAAKCNQAgAAAABlBEoAAAAA\noIxACQAAAACUESgBAAAAgDICJQAAAABQRqAEAAAAAMoIlAAAAABAGYESAAAAACgjUAIAAAAAZQRK\nAAAAAKCMQAkAAAAAlBEoAQAAAIAyAiUAAAAAUEagBAAAAADKCJQAAAAAQBmBEgAAAAAoI1ACAAAA\nAGUESgAAAACgjEAJAAAAAJQRKAEAAACAMgIlAAAAAFBGoAQAAAAAygiUAAAAAEAZgRIAAAAAKCNQ\nAgAAAABlBEoAAAAAoIxACQAAAACUESgBAAAAgDICJQAAAABQRqAEAAAAAMoIlAAAAABAGYESAAAA\nACgjUAIAAAAAZQRKAAAAAKCMQAkAAAAAlBEoAQAAAIAyAiUAAAAAUEagBAAAAADKCJQAAAAAQBmB\nEgAAAAAoI1ACAAAAAGUESgAAAACgjEAJAAAAAJQRKAEAAACAMgIlAAAAAFBGoAQAAAAAygiUAAAA\nAEAZgRIAAAAAKCNQAgAAAABlBEoAAAAAoIxACQAAAACUESgBAAAAgDICJQAAAABQRqAEAAAAAMoI\nlAAAAABAGYESAAAAACgjUAIAAAAAZQRKAAAAAKCMQAkAAAAAlBEoAQAAAIAyAiUAAAAAUEagBAAA\nAADKCJQAAAAAQBmBEgAAAAAoI1ACAAAAAGUESgAAAACgjEAJAAAAAJQRKAEAAACAMgIlAAAAAFBG\noAQAAAAAygiUAAAAAEAZgRIAAAAAKCNQAgAAAABlBEoAAAAAoIxACQAAAACUESgBAAAAgDICJQAA\nAABQRqAEAAAAAMoIlAAAAABAGYESAAAAACgjUAIAAAAAZQRKAAAAAKCMQAkAAAAAlBEoAQAAAIAy\nAiUAAAAAUEagBAAAAADKCJQAAAAAQBmBEgAAAAAoI1ACAAAAAGUESgAAAACgjEAJAAAAAJQRKAEA\nAACAMgIlAAAAAFBGoAQAAAAAygiUAAAAAEAZgRIAAAAAKCNQAgAAAABlBEoAAAAAoIxACQAAAACU\n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\nz8033+wRfAAAAAB2uZYGyv322y9btmzJwQcfnAULFuSDH/xgK2/P+8TuVwAAAADeLy19xPuEE05I\nkowcOVKc3E01m83qJQAAAACwF2lpoPzjP/7jJMnjjz+e9evXt/LWu53ly5dn2rRpOfPMM3P88cfn\njDPOyKc+9al8+9vf7nLeokWLMmnSpIwePTonnHBCxo8fnzlz5mTLli3d7tne3p7JkyfvcL7rrrsu\n7e3tWb16deexVatWpb29PdOnT8+qVatyzTXX5LTTTsuoUaMyceLEPPTQQ13ucemll+b666/vcr/2\n9vYcffTRXe67bdu2zJs3L3/0R3+U3/qt38qJJ56YCy64IPPmzesWON+6hp/+9KeZNm1afvu3fztH\nH310li1b9q7+pgAAAADseXr0iPdbo1WSDB06NJMmTcrXvva1TJo0KVdccUWOPfbYHHDAATu8fsiQ\nIT2Z/tfWPffcky9+8Yvp1atXxowZkxEjRmTjxo1ZsWJF7r777pxzzjlJkhkzZmTOnDkZOHBgxo8f\nn759+2bJkiWZMWNGHnnkkdx+++3v+Ps73+7FRKtWrcqFF16Y4cOHZ8KECXnppZeyaNGiTJkyJbff\nfntOOeWUJMnEiRMzYMCALF68OGeddVba29s7792/f/8kydatW/PpT3863/3ud3PYYYdl/Pjx+eAH\nP5gf/OAHufHGG7N8+fL83d/9Xbc1PPfcc7noooty6KGH5rzzzsvrr7+efv36veu/LQAAAAB7lh4F\nyjFjxuw0iv3sZz/LX//1X+/02kajkSeeeKIn0/9aWrlyZW644Yb069cv8+fPz+GHH95lfN26dUmS\nRx99NHPmzMmQIUOyYMGCDBw4MEny2c9+NldddVUefvjhzJ07N1dccUWP17Rs2bL86Z/+aa666qrO\nY+eee24uv/zyzJ07tzNQTpgwIc1mszNQ7uglObNnz853v/vdzt2WHf//zWYzf/mXf5n7778/48aN\ny5gxY7pc96Mf/Sif/vSnM23atB5/HgAAAAD2HC15xLvZbHb56djN98vHf/lnTzR//vxs27YtU6ZM\n6RYnk2Tw4MFJkgULFqTRaOTKK6/sjJNJss8+++S6665Lo9HIvffe25I1DRkyJFdeeWWXY2eccUaG\nDBmS5cuXv+P7NJvNzJs3L21tbZk+fXqXON1oNHLdddclSf7lX/6l27WDBg3KlClT3uMnAAAAAGBP\n1dK3eHd4u/jYES73VI899liS5MMf/vDbntexe/S0007rNjZy5MgcdNBBef7557N58+YePwp99NFH\n73Cn60EXq04BAAAgAElEQVQHHdS53nfimWeeyaZNmzJy5MjMmjWr23iz2cx+++2XlStXdhtrb2/P\nBz7wgXe3cAAAAAD2eD0KlCeffHKr1rHHeOWVV5L8307Jndm8eXOSpK2tbYfjbW1tWbNmTV555ZUe\nB8r9999/h8d79eqV7du3v+P7bNq0KUny7LPPZubMmTs977XXXut2bGefEwAAAIC9W48C5V133dWq\ndewxOmLgunXrcuihh+70vI7ouGHDhhxyyCHdxjds2NDlfsmbu0+3bdu2w/u9/PLL73nN71THWs4+\n++zceuutu3w+AAAAAPZ8LfkOSv7PiSeemCRZsmTJ2553zDHHJEmWLl3abey5557L2rVrM2zYsC67\nJ/v37581a9Z0O3/79u35yU9+0pNld9pnn33SbDZ3GEIPO+yw9O/fP48++uhOQykAAAAAvBstDZRj\nx47N2LFjc8MNN+z0nIULF+ZLX/pSvvSlL7Vy6l8bF198cXr16pVZs2bt8LsYO97iPXHixDSbzcye\nPTsbN27sHN++fXtuvvnmNJvNXHjhhV2uHTVqVNasWZPvfe97XY7PmjUrq1evbsn6DzjggCTZYQjt\n1atXLrnkkqxfvz433nhj3njjjW7nbNiwYYefGwAAAAB2pKUvyVm1alUajUZeeOGFnZ6zePHi/Ou/\n/msajUY+97nPtXL6XwuHH354Pv/5z+cLX/hCJkyYkLFjx2bEiBHZtGlTVqxYkX79+uWOO+7ISSed\nlMsvvzxz587N+PHjM27cuPTp0ydLlizJ008/ndGjR+eyyy7rcu/LLrssjzzySK688sp89KMfzYAB\nA/LjH/84q1atyimnnJJly5b1eP0nnXRS+vTpkzvuuCObNm3KoEGDkiSXXnpp+vXrl6uuuipPPvlk\n/vmf/zn/8R//kdNOOy2DBw/OCy+8kGeffTY/+tGPcs011+zwDeYAAAAA8Mt2yVu83867eSnL7urC\nCy/MkUcemblz52bZsmVZvHhxDjzwwBx11FFddkVee+21OeaYYzJv3rwsXLgwW7duzfDhw3PNNdfk\nk5/8ZHr37vrfc/rpp2fWrFmZOXNmFi1alD59+uR3fud38uUvfzm33npr/uu//qvbWhqNxg7f4P3W\n8bfq379//uEf/iG33XZb7r///s4X3px//vnp169fevfunZkzZ+Yb3/hGHnjggTz00EN59dVXM3Dg\nwAwbNizTpk3Leeed967WAAAAAMDeq9FsNputull7e3sajUZ+7/d+L7fccku38V/84hcZP358fvrT\nn6bRaLTsexPZ+5x59sQMGDW5ehkAALvES8vvzH3zv1q9DABgL9PWtv+vPmkX6PEOyrFjx3Y7tmTJ\nkh0e37RpU1599dUkyX777dfTqQEAAACA3VyPA2XH9052bMRsNpt57bXXsmrVqp1e02g0cuihh/Z0\nagAAAABgN9ey76B8a6R8u+8b7DjnoosuatXUAAAAAMBuqiWB8pfD5M6+1nK//fbLYYcdlj/8wz/M\nxz/+8VZMDQAAAADsxnocKP/nf/6n8/eOl+SMGzduhy/JAQAAAAB4q5Y94p0kQ4YMSZIMGjSolbcF\nAAAA+P/s3XmQl/V9wPHPD5CwgJxZZcQo4LW2xSgph6ki3o1yhPUIo0LRoolIYknr0U6CNMmkUUuM\nirHmMIgSNQcacazKCrbCCIEwDkxEUVDkEILigggo4NM/HLZuFpXjB58svl4zzsjz/Pb7/T6/eYZZ\n3vMcwH6qrIFy2rRp5RwOAAAAANjPlTVQftiMGTPi6aefjuXLl8emTZvinnvuifnz58e7774bTZs2\njR49euytqQEAAACARqLsgbK2tjZGjx4ds2bNiogPXpiz/eU5Dz74YEyePDkiIqZMmRJHHnlkuacH\nAAAAABqRJuUcbOvWrfG1r30tnn322R2+yXvgwIF122tqaso5NQAAAADQCJU1UP7ud7+L5557ru6K\nyT+PlH/7t38bFRUVERExd+7cck4NAAAAADRCZQ2Ujz76aN3/DxkypMFzJps2bRpHHXVUFEURS5Ys\nKefUAAAAAEAjVNZAuXDhwoiIOOyww2Ls2LHx2c9+tsFnOnbsGBERa9euLefUAAAAAEAjVNZAuWHD\nhiiVStGtW7eP/MzmzZsj4oPnVQIAAAAAn25lDZStWrWKiIg//elPO9y/devWWLRoUUREtG3btpxT\nAwAAAACNUFkD5RFHHBFFUcTzzz8fM2fObLD/9ttvjzfffDNKpVIceeSR5ZwaAAAAAGiEmpVzsL59\n+8a8efMiIuLyyy+PFi1a1O075ZRT6l1Zecopp5RzagAAAACgESrrFZRDhgyJDh06RETE+++/Hxs3\n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\n99wTNTU18eqrr8Y777xTF91KpVKsXr16p8fq2bNnHHzwwfHTn/40/vjHP8Ypp5wSPXr0iGOPPTaa\nNNmzDnzsscc2uFrxoIMOioiIrl27NoifTZo0iY4dO8aqVavqti1ZsiQ2bdoUX/jCF6JNmzYN5ujT\np0/ceeed9aLm888/H02aNIkePXo0+HyvXr0abHvllVeitrY2unTpEj/+8Y8b7C+KIlq0aBGLFy/+\nhCMGAAAA4NOiUQbK4cOHR/v27eP++++P++67r+6lNz179oxrr702/uZv/uYTx9i6dWsMGzYsFixY\nEEcffXScc8450aFDh2jW7IOvZPz48bt0W3br1q3jV7/6Vdx+++0xbdq0mDlzZhRFEe3bt4+LLroo\nrrzyyrqxd1Xr1q0bbNt+9eiO9m3fv3Xr1ro/v/322xERUVlZucPPb9++fv36um0bNmyItm3b7vBK\n1R2NU1tbGxERS5cujTvuuGOH80R8EIYBAAAAIKKRBsqIiEGDBsWgQYNiw4YNMW/evKipqYnf/OY3\nMWLEiHjsscc+8WrKp556KhYsWBDV1dXx/e9/v96+NWvWxPjx43d5TQcffHB873vfi4iIxYsXx6xZ\ns2LSpElxxx13RFEU8Y1vfGOXxyyXAw88MCIi3njjjR3uX7NmTb3PRXwQP9etWxfbtm1rECm3f35H\nc5x55plx2223lWXdAAAAAOzfGu0zKLdr3bp19O3bN77zne/E4MGDY926dfGHP/whIv7/KsM/f1Zi\nxAdX+ZVKpTjrrLMa7Pv973+/w7m236q9bdu2T1zXEUccERdffHHcfffdERFRU1Ozcwe0l3Tt2jUq\nKipi4cKFdVdTftisWbMiIuKv/uqv6rb99V//dbz//vt13+eHzZ49u8G2bt26RZs2beK5557bqe8I\nAAAAABploNxRHIuIePPNNyMiokWLFhHx/y/MWblyZYPPHnrooVEURYOxli1bFuPGjdvhG6rbtWsX\nRVHE66+/3mDfyy+/XDf/h22/0nBPXpJTDgcccEAMGDAg3nnnnbj11lvr7Xvttdfi3nvvjQMOOCAG\nDRpUt726ujqKoohbbrml3u3utbW18V//9V8NvqOmTZvGJZdcEn/605/iu9/9brz77rsN1rFmzRrP\noAQAAACgTqO8xXvUqFHRqlWrOO6446Jz584RETF37txYsGBBdO/ePb74xS9GRMSJJ54Yjz/+eIwa\n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\nAAAAAJBGoAQAAAAA0giUAAAAAEAagRIAAAAASCNQAgAAAABpBEoAAAAAII1ACQAAAACkESgBAAAA\ngDQCJQAAAACQRqAEAAAAANIIlAAAAABAGoESAAAAAEgjUAIAAAAAaQRKAAAAACCNQAkAAAAApBEo\nAQAAAIA0AiUAAAAAkEagBAAAAADSCJQAAAAAQBqBEgAAAABII1ACAAAAAGkESgAAAAAgjUAJAAAA\nAKQRKAEAAACANAIlAAAAAJBGoAQAAAAA0giUAAAAAEAagRIAAAAASCNQAgAAAABpBEoAAAAAII1A\nCQAAAACkESgBAAAAgDQCJQAAAACQRqAEAAAAANKUiqIoshcBAAAAAHw6uYISAAAAAEgjUAIAAAAA\naQRKAAAAACCNQAkAAAAApBEoAQAAAIA0AiUAAAAAkEagBAAAAADSCJQAAAAAQBqBEgAAAABII1AC\nAAAAAGkESgAAAAAgjUAJAAAAAKQRKAEAAACANAIlAAAAAJCmWfYCICJi9erV8aMf/ShmzJgRtbW1\nUVlZGWeccUaMGjUq2rRps9PjrFu3LsaPHx9PPfVUrFmzJtq1axcnn3xyXH311XHwwQfvxSOAT7an\n5/mmTZti6tSp8T//8z/x/PPPx6pVq6JUKkXXrl2jf//+cckll8QBBxywD44EPlq5/j7/sDlz5sSw\nYcOiKIq48sor4+qrry7zqmHXlPM8/+Mf/xh33313zJ07N9auXRtt2rSJbt26xXnnnRdf/vKX99IR\nwCcr13k+d+7c+PnPfx4vvvhivPHGG9GxY8c46qijYujQoXHyySfvxSOAj/fEE0/EnDlzYuHChfHC\nCy/EO++8EwMHDoybbrppl8faG7//QDmU4zyvra2t+3fookWLYvXq1XHAAQfE0UcfHdXV1XHeeedF\nqVTa47WWiqIo9ngU2APLli2Lr3zlK/HWW2/FGWecEV27do358+fHrFmzolu3bnH//fdH27ZtP3Gc\n2tra+MpXvhKvvfZa9OnTJ7p37x5LliyJmpqa+OxnPxsPPPBAHHroofvgiKChcpznzzzzTFx++eXR\nrl276N27dxx++OFRW1sb06dPjzVr1kSPHj1iwoQJ0bx58310VFBfuf4+/7Dtv0TV1tbGxo0b42tf\n+5pASapynuf33XdffP/734+2bdtGv3794qCDDop169bFSy+9FJ06dYpx48bt5aOBHSvXef7LX/4y\n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\nJqKwsBC2trbw8vLCmDFjMHTo0Lq6HSIDq1atwurVqyvc7+LigqNHjwIoD24GDhyo+kxXVX5eiOqS\nKdr5o8oAgJ49e2Lz5s01qisDSiIiIiIiIiIiIjIbzkFJREREREREREREZsOAkoiIiIiIiIiIiMyG\nASURERERERERERGZDQNKIiIiIiIiIiIiMhsGlERERERERERERGQ2DCiJiIiIiIiIiIjIbBhQEhER\nERERERERkdkwoCQiIiIiIiIiIiKzYUBJREREREREREREZsOAkoiIiIiIiIiIiMyGASURERERERER\nERGZDQNKIiIiIiIiIiIiMhsGlERERERERERERGQ2DcxdASIiIiJzKSgowLZt2xAZGYmUlBQUFhbC\nxsYGdnZ2cHJygpubG9zd3TFy5Eg0btzY3NWttzw8PMTfXVxccOzYsTq57oMHDzB8+HBcvXoVALBk\nyRIEBASI/RMnTkRsbKzYPn78OFq1alUndXtc1fW75Duquvz8fAwYMAD5+fkAgJ07d8LHx8fMtSIi\nIqoZBpRERET0RLp27RoCAwNx584d8ZkkSSgoKEBBQQHS0tJw7tw5SJIEX19feHl5mbG29Z8kSXV+\nze3bt+Pq1auQJAmurq4YMWJEvajX466un5m53lFlw9GYmBj84x//ENujRo3C4sWL66SOxjRp0gQT\nJ07EmjVrIEkSFi9ejB07dpitPkRERKbAgJKIiIieSPPmzUNGRoYIR5o1awZ3d3doNBpotVpcuXIF\nBQUFZq7l40WW5Tq71v3797Fq1SqxPXnyZFhYGM5epNSJQWXlDBkyRPzd0dGxTq5pzndUlWvWpzY0\nadIkfPfddyguLsaFCxcQERGhendERESPGwaURERE9MSJj4/H5cuXReAwaNAgBAcHGwQQFy5cwIED\nB6DRaMxRTXqI/fv3IycnBwBgZWWFYcOGmblG/xuCg4PNXYU6VZlwtC6D98qys7NDv379EBERAQDY\nvHkzA0oiInqsMaAkIiKiJ87169cBlAcPkiShe/fuRgMKHx+fh87tlpubix07duDXX3/F1atXUVhY\niMaNG6Nz58545ZVXMHLkSDRoYPzrVmFhIfbs2YMTJ04gKSkJd+/ehUajgaOjI3x9fTF+/Hh07drV\n4Jxdu3bh+PHjSE5ORn5+PmxsbODq6gp/f3+MHz8eLi4uBtcaMGAAbt26BaA8iElISMDBgwexbds2\n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\nvM+a0i2nrt6l7juaMWMGBg4ciA0bNiA+Ph5lZWXw8PBAYGAgBg8ebHBu8+bN8cMPP+DQoUM4fPgw\n4uLioNVq8eDBA9jZ2aFNmzbw8fFBv379DHoYenh4YP369QgNDUVcXBzy8/NFQKh/74sXL0arVq1w\n7Ngx3L59W/Qo1j+uJvV52LM3Zv/+/eLY7t27o1OnTo88h4iIqL6S5Or+czoRERERkZncv38fAwYM\ngFarhSRJ+OyzzyrsRUn0vyY3NxcvvPCCCEpXrlyJgQMHmrlWRERE1cdFcoiIiIjosaPRaDB79mwA\n5cNi169fL4a7Ev2vCwsLQ0lJCWRZhq+vL8NJIiJ67DGgJCIiIqLH0muvvQY3NzdIkoTU1FQx5JXo\nf1l+fj62bdsGSZJgYWGBBQsWmLtKRERENcYh3kRERERERERERGQ27EFJREREREREREREZsOAkoiI\niIiIiIiIiMyGASURERERERERERGZDQNKIiIiIiIiIiIiMhsGlERERERERERERGQ2DCiJiIiIiIiI\niIjIbBhQEhERERERERERkdkwoCQiIiIiIiIiIiKzYUBJREREREREREREZsOAkoiIiIiIiIiIiMyG\nASURERERERERERGZDQNKIiIiIiIiIiIiMhsGlERERERERERERGQ2DCiJiIiIiIiIiIjIbP4PQxOM\n/c7wpK8AAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fa0b573a1d0>"
]
},
"metadata": {
"image/png": {
"height": 603,
"width": 660
}
},
"output_type": "display_data"
}
],
"source": [
"p3_timings = {}\n",
"p3_timings['counter'] = t1.all_runs\n",
"p3_timings['stats_mode'] = t2.all_runs\n",
"p3_timings['custom'] = t3.all_runs\n",
"plot_comparison(p3_timings)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Dict insertion"
]
},
{
"cell_type": "code",
"execution_count": 83,
"metadata": {
"ExecuteTime": {
"end_time": "2017-08-21T08:56:06.353132Z",
"start_time": "2017-08-21T08:56:06.336613Z"
},
"collapsed": true
},
"outputs": [],
"source": [
"n_rows = 10 ** 4\n",
"df = pd.Series(np.random.randint(0, n_rows, n_rows))"
]
},
{
"cell_type": "code",
"execution_count": 84,
"metadata": {
"ExecuteTime": {
"end_time": "2017-08-21T08:56:07.880221Z",
"start_time": "2017-08-21T08:56:07.871501Z"
},
"collapsed": true
},
"outputs": [],
"source": [
"# Why the second works better?"
]
},
{
"cell_type": "code",
"execution_count": 85,
"metadata": {
"ExecuteTime": {
"end_time": "2017-08-21T08:56:08.281820Z",
"start_time": "2017-08-21T08:56:08.015348Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 248 ms, sys: 4 ms, total: 252 ms\n",
"Wall time: 257 ms\n"
]
}
],
"source": [
"%%time\n",
"cnt = {}\n",
"for x in df.unique():\n",
" cnt[x] = 0\n",
"for x in df:\n",
" cnt[x] += 1"
]
},
{
"cell_type": "code",
"execution_count": 86,
"metadata": {
"ExecuteTime": {
"end_time": "2017-08-21T08:56:08.305003Z",
"start_time": "2017-08-21T08:56:08.286194Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 8 ms, sys: 0 ns, total: 8 ms\n",
"Wall time: 6.48 ms\n"
]
}
],
"source": [
"%%time\n",
"cnt = {}\n",
"for x in df:\n",
" if x not in cnt:\n",
" cnt[x] = 0\n",
" else:\n",
" cnt[x] += 1"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"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.4.5"
},
"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": "84px",
"width": "252px"
},
"navigate_menu": true,
"number_sections": true,
"sideBar": true,
"skip_h1_title": false,
"threshold": 4,
"toc_cell": false,
"toc_position": {
"height": "1004px",
"left": "0px",
"right": "1758px",
"top": "106px",
"width": "162px"
},
"toc_section_display": "block",
"toc_window_display": true,
"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