{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "*First compiled: March 18, 2018.*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Benchmarking nearest-neighbor computations" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import time\n", "import pandas as pd\n", "import random as rd\n", "import matplotlib.pyplot as pl\n", "import numpy as np\n", "from collections import OrderedDict\n", "from scanpy.neighbors import compute_neighbors_numpy\n", "from utils import scanpy0, scanpy1\n", "\n", "functions = [scanpy1, scanpy0]\n", "\n", "n_observations = [5000, 10000, 20000, 40000]\n", "n_dimensions = 50\n", "n_neighbors = 20" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "X shape: (5000, 50)\n", " scanpy1 : 1.3 s\n", " scanpy0 : 1.4 s\n", "X shape: (10000, 50)\n", " scanpy1 : 6.7 s\n", " scanpy0 : 3.8 s\n", "X shape: (20000, 50)\n", " scanpy1 : 9.0 s\n", " scanpy0 : 16.1 s\n", "X shape: (40000, 50)\n", " scanpy1 : 19.9 s\n", " scanpy0 : 138.7 s\n" ] } ], "source": [ "total_times = OrderedDict([(f.__name__, []) for f in functions])\n", "for n in n_observations:\n", " times = {}\n", " X = np.random.rand(n, n_dimensions)\n", " print('X shape:', (n, n_dimensions)) \n", " for func in functions:\n", " name = func.__name__\n", " t0 = time.time()\n", " func(X, n_neighbors=n_neighbors)\n", " diff = time.time() - t0\n", " print(' {:40} : {:5.1f} s'.format(name, diff))\n", " total_times[name].append(diff)\n", "pd.DataFrame(total_times).to_csv('total_times.csv')" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfgAAAEbCAYAAAA2+JZTAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3Xd8VuX9//HXJzuBEPYMCA5QZIs4\n0Gql7vnTqlWs1g5bt22/uGqHnbbWqrVqa2utA1GcOKvWam1tHQxliqAiBJFNCJCQ9fn9cU7gTkjI\nnXHn3Lnzfj4e9+M+5zrrc27I/bmv61znXObuiIiISGpJizoAERERaX1K8CIiIilICV5ERCQFKcGL\niIikICV4ERGRFKQELyIikoKU4EUSxMy2mNmebXSsY83s6bY4VgPHn2xmL8e57tfM7D+7Wf66mX2z\n9aJLXmZ2i5ldHHUckpqU4EVaQX1Jyd07u/vHbRTCL4Cb2uhYu3D3qe5+TFTHj5KZ/dbMlphZiZl9\nYGbn11k+xsxmmdm28H1MzOLfAtebWVbbRi0dgRK8dDhmlhF1DK3JzA4ECtz9rahjSSZt+O+8FTgZ\nKAAuAG43s0PDGLKAGcBDQDfgfmBGTUJ391XAB8ApbRSrdCBK8NIhmNkyM7vGzOYCW80sw8zczPaO\nWedvZvbzcPpIMysys++b2RozW2VmFzaw718AhwN/CJvl/xCW79h/uO+7zOzFcJ03zayvmd1mZhvD\nmt/YmH32N7MnzGytmX1iZlfs5vSOB/5VJyY3s++ENctNZnanmVkjn9HXzOw/YY10Y3jc42OWF5jZ\nveFnsdLMfm5m6bHbxqx7jJktNrPi8Lz/VbeFo6HjhPYys3fMbLOZzTCz7jHbnWJmC8Lzet3M9otZ\nVt+/8zVhvCVhTJN29zk0lbv/2N0/cPdqd38b+DdwSLj4SCADuM3dt7v77wEDjorZxevAia0Zkwgo\nwUvHcg7BF2lXd6+MY/2+BLWyAcA3gDvNrFvdldz9BwRf6peFzfKXNbC/s4AbgJ7AduB/wOxw/nHg\ndwBmlgY8C7wfHnsScJWZHdvAfkcCi+spPwk4EBgVHruh7WMdFO6rJ/Ab4N6YHwZ/AyqBvYGxwDHA\nLtfKzazmfK4DeoT7O7QJxwE4H/g60C885u/DfQ8FpgFXAb2AF4Bn6zRx7/h3BvYCLgMOdPf88DNY\nVt+Jm9m14Y+Gel8NfWB19pFL8JkvCIv2B+Z67WeCzw3LaywCRsezf5GmUIKXjuT37r7C3UvjXL8C\n+Km7V7j7C8AWYFgLjv+Uu89y9zLgKaDM3R9w9yrgUYKkCUGC6OXuP3X38vA6/p+BrzSw365AST3l\nN7n7JndfDrwGjKlnnbo+dfc/hzHdT5Bg+5hZH+AE4Cp33+rua4BbG4jpBGCBuz8Z/pD6PfB5PMeJ\nWf6gu893963AD4GzwtaCs4Hn3f0Vd68guIadS+0fELH/zlVANjDczDLdfZm7f1Tfibv7Te7etaFX\nHJ8dwB8Jfpi9FM53BorrrFMM5MfMlxD8G4q0qpS6FinSiBVNXH99nZr+NoIv7OZaHTNdWs98zb73\nAPrXqTWmE7QS1GcjtRNGjdikGm/sO7Zx921hpboz0B3IBFbFVLTTqP8z7R9b7u5uZkVxHqdG7H4/\nDY/dM9z3pzHbVpvZCoKWjl22dfelZnYV8BNgfzN7Cfieu39WT9wtYmY3AyOAL8bU2LcAXeqs2oXa\nP8jygbhaCESaQjV46UjqDp24DciLme/bivtuiRXAJ3VqkPnufkID688Fhrbi8RuKaTvQMyamLu6+\nfz3rrgIKa2bCpvfCetbbnYEx04MIWlPWAZ8R/ACK3fdAYGXM+rX+Ldz9YXc/LNzOgV/Xd0Azuz7s\nH1Hva3fBmtmNBH0hjnH3zTGLFgCj6lx+GMXOJnyA/Qhq/SKtSgleOrL3gHPNLN3MjgOOaMG+VgOt\ndc/7O0BJ2DksN4xvhAW95evzAi2LvVFhb++XgVvMrIuZpZnZXmZW33GfB0aa2WkW9GS/lKb/eDrP\nzIabWR7wU+DxsDl/OnCimU0ys0zg+wQ/PP5b307MbJiZHWVm2UAZQUtJdQPn+MuwD0W9r4YCNbPr\ngHOBL7n7+jqLXye4THCFmWWbWU3/jH/GrHME8OJuPw2RZlCCl47sSoLbmzYBk4GWPCjmduDLYa/w\n37ckqDCRnURwzfwTgprrXwg6/NW3/myg2MwOaslx43A+kAUsJLgs8DjBtfO68awDziToPLceGA7M\nJEjE8XqQoFPf50AOcEW478XAecAdBJ/LycDJ7l7ewH6yCZ4PsC7cV2+Czn+t6ZcErQxLY2r814fx\nlgOnEXx2mwg6Dp5WE6+Z9SP4fCJ7SJGkLqvduVNE2iMzOwa4xN1PizqWusK7AoqAye7+WtTxJBMz\nuwX4yN3vijoWST1K8CLS6sJb+t4maBKfQtBMv2cT7mAQkRZSE71IB2Jmf2ygE9kfW/lQhwAfsbMZ\n/TQld5G2pRq8iIhIClINXkREJAUpwYuIiKSgdv0ku549e/rgwYOjDkNERKTNzJo1a52792psvXad\n4AcPHszMmTOjDkNERKTNmNmnja+lJnoREZGUpAQvIiKSghKW4M3sr2a2xszm17Ps+2bm4bjRWOD3\nZrbUzOaa2bhExSUiItIRJPIa/N+APwAPxBaa2UDgGGB5TPHxwD7h6yDg7vC9ySoqKigqKqKsrKw5\nm3dIOTk5FBYWkpmZGXUoIiLSShKW4N39DTMbXM+iW4GrgRkxZacCD4RjKL9lZl3NrF84glWTFBUV\nkZ+fz+DBg6k9QqPUx91Zv349RUVFDBkyJOpwRESklbRpL3ozOxVY6e7v10m+AwjGm65RFJY1OcGX\nlZUpuTeBmdGjRw/Wrl0bdSgiIinj6TkrufmlxXy2qZT+XXOZcuwwThs7oE1jaLMEH47rfD1B83xL\n9nMRcBHAoEGDGlqnJYfocPR5iYi0nqfnrOS6J+dRWlEFwMpNpVz35DyANk3ybdmLfi9gCPC+mS0D\nCoHZZtYXWAkMjFm3MCzbhbvf4+7j3X18r16N3uff4W3YsIGjjz6affbZh6OPPpqNGzdGHZKISEq7\n+aXFO5J7jdKKKm5+aXGbxtFmCd7d57l7b3cf7O6DCZrhx7n758AzwPlhb/qDgeLmXH9vjqfnrGTi\nTf9kyLXPM/Gmf/L0nHp/V7RbN910E5MmTWLJkiVMmjSJm266KeqQRERS2meb6h84saHyREnkbXLT\ngP8Bw8ysyMy+sZvVXwA+BpYCfwYuSVRcsWqaUVZuKsXZ2YzS0iS/detWTjzxREaPHs2IESN49NFH\neffddzn00EMZPXo0EyZMoKSkhGXLlnH44Yczbtw4xo0bx3//+18AXn/9dY488ki+/OUvs++++zJ5\n8mRqRv0bPHgwV199NSNHjmTChAksXbqUkpIShgwZQkVFBQCbN2/eMT9jxgwuuOACAC644AKefvrp\nFp2biIjsXq/87HrL+3fNbdM4EtmL/pxGlg+OmXbg0taO4cZnF7Dws80NLp+zfBPlVdW1ykorqrj6\n8blMe2d5vdsM79+FH5+8/26P+/e//53+/fvz/PPPA1BcXMzYsWN59NFHOfDAA9m8eTO5ubn07t2b\nV155hZycHJYsWcI555yz49G7c+bMYcGCBfTv35+JEyfy5ptvcthhhwFQUFDAvHnzeOCBB7jqqqt4\n7rnnOPLII3n++ec57bTTeOSRRzj99NPJzMxk9erV9OvXD4C+ffuyevXq+D48ERFpss1lFVRXV+9S\nnpuZzpRjh7VpLB36SXZ1k3tj5fEaOXIkr7zyCtdccw3//ve/Wb58Of369ePAAw8EoEuXLmRkZFBR\nUcG3vvUtRo4cyZlnnsnChQt37GPChAkUFhaSlpbGmDFjWLZs2Y5l55xzzo73//3vfwB885vf5L77\n7gPgvvvu48ILL9wlLjNThzoRkQRxd65+bC4bSyu5YtLeDOiaiwEDuubyq9NHpm4v+ig0VtOeeNM/\nWVnPNZEBXXN59NuHNPu4Q4cOZfbs2bzwwgvccMMNHHXUUfWud+utt9KnTx/ef/99qqurycnJ2bEs\nO3tnE096ejqVlZU75mOTdM30xIkTWbZsGa+//jpVVVWMGDECgD59+rBq1Sr69evHqlWr6N27d7PP\nS0REGnbvfz7h7ws+54YT9+Obh+/J945u2xp7XR26Bj/l2GHkZqbXKmuNZpTPPvuMvLw8zjvvPKZM\nmcLbb7/NqlWrePfddwEoKSmhsrKS4uJi+vXrR1paGg8++CBVVVWN7Dnw6KOP7ng/5JCdP0TOP/98\nzj333Fq191NOOYX7778fgPvvv59TTz21RecmIiK7enfZBn714gcct39fvnFYcjw0LKVr8I2paS5p\n7YcRzJs3jylTppCWlkZmZiZ333037s7ll19OaWkpubm5/OMf/+CSSy7hjDPO4IEHHuC4446jU6dO\nce1/48aNjBo1iuzsbKZNm7ajfPLkydxwww07mvABrr32Ws466yzuvfde9thjD6ZPn96icxMRkdrW\nbdnOZQ/PZmC3XH5z5qikuRRqNb2z26Px48d73fHgFy1axH777RdRRIk3ePBgZs6cSc+ePXdZ9vjj\njzNjxgwefPDBJu831T83EZFEqKp2vnrv28z6dCNPXTKR4f27JPyYZjbL3cc3tl6HrsGnkssvv5wX\nX3yRF154IepQREQ6jNv+8SH//Wg9v/nyqDZJ7k2hBN/OxPamj3XHHXe0bSAiIh3cax+s4Y5/LuXs\n8QM5a/zAxjdoYx26k52IiEhzFG3cxlWPvsd+/bpw46m7v2MrKkrwIiIiTbC9sopLp86mutq5e/I4\ncurcjZUs1EQvIiLSBD9/bhHvFxXzp68ewOCe8d39FAXV4EVEROI0472VPPjWp1z0hT05dv++UYez\nW0rwKe6xxx5j//33Jy0tjbq3FIqISPyWrC7h2ifmMWFw9zZ/rnxzKMHPnQ63joCfdA3e56bWg2BG\njBjBk08+yRe+8IWoQxERabe2bq/kOw/NolN2OnecO5bM9ORPn8kfYSLNnQ7PXgHFKwAP3p+9osVJ\nPpmGi91vv/0YNiz5f2mKiCQrd+faJ+fxybqt/P6csfTpktP4RkkgtTvZvXgtfD6v4eVF70LV9tpl\nFaUw4zKYdX/92/QdCcfftNvDJtNwsSIi0jIPvvUpz77/GVOOHcahe+36FNFk1bFr8HWTe2PlcUrW\n4WJFRKRp3luxiZ89t5Cj9u3NxUfsFXU4TZLaNfhGatrcOiJsnq+jYCBc+HyzD5tMw8WKiEjzbNxa\nzqVTZ9OnSw6/O2s0aWnJMYhMvDp2DX7SjyAzt3ZZZm5Q3gLJNFysiIg0XXW1893p77G2ZDt3TR5H\n17ysqENqstSuwTdm1FnB+6s/heIiKCgMkntNeTMl03CxTz31FJdffjlr167lxBNPZMyYMbz00kst\nOj8RkVR352tLeX3xWn5+2ghGFXaNOpxm0XCx7YyGixURSaz/LFnHV//6NqeO7s+tZ49JmvHda0Q+\nXKyZ/RU4CVjj7iPCspuBk4Fy4CPgQnffFC67DvgGUAVc4e6qZjaBhosVEWm5z4vLuPKROezTuzO/\nPH1k0iX3pkjkNfi/AcfVKXsFGOHuo4APgesAzGw48BVg/3Cbu8wsOZ/eH7Fly5bVW3u/4447WLp0\nKUOHDo0gKhGR9q+iqppLH55NaUUVd00+gLys9n0VO2EJ3t3fADbUKXvZ3Wu6g78FFIbTpwKPuPt2\nd/8EWApMSFRsIiIidf36xQ+Y9elGfn3GKPbu3TnqcFosyl70XwdeDKcHALH3qxWFZbsws4vMbKaZ\nzVy7dm29O27P/QqioM9LRDq6F+et4i//+YSvHTqYk0f3jzqcVhFJgjezHwCVwNSmbuvu97j7eHcf\n36tXr12W5+TksH79eiWtOLk769evr3UPvohIR/LJuq1MeXwuYwZ25foTUqezcZtfYDCzrxF0vpvk\nO7PwSmBgzGqFYVmTFRYWUlRUREO1e9lVTk4OhYWFja8oIpJiSsuruPihWWSmG3dOHkdWRuo8HqZN\nE7yZHQdcDRzh7ttiFj0DPGxmvwP6A/sA7zTnGJmZmQwZMqTFsYqISGpzd254ej6LV5dw39cOZEDX\n3MY3akcSeZvcNOBIoKeZFQE/Jug1nw28Et568Ja7f8fdF5jZdGAhQdP9pe4e32PdREREmmH6zBU8\nMbuIKybtw5HDekcdTqtLWIJ393PqKb53N+v/AvhFouIRERGpMX9lMT+csYDD9+nJlZP2iTqchEid\niw0iIiJxKC6t4JKps+mel8VtZ48hvZ0NIhOv9n0Xv4iISBO4O//32Pt8tqmUR799CD06Zze+UTul\nGryIiHQY97zxMa8sXM31J+zHAXt0izqchFKCFxGRDuHtj9fzm5cWc8LIvlw4cXDU4SScEryIiKS8\nNSVlXDZtDnt0z+PXZ4xq14PIxEvX4EVEJKVVVlVzxbQ5lJRV8OA3JpCfkxl1SG1CCV5ERFLa7175\nkLc+3sAtZ45m375dog6nzaiJXkREUtY/Fq7mrtc/4pwJAznjgI71SG4leBERSUkrNmzje9PfY//+\nXfjxyftHHU6bU4IXEZGUU1ZRxcVTZ+HA3ZMPICczPeqQ2pyuwYuISMr56XMLmb9yM38+fzyDeuRF\nHU4kVIMXEZGU8uTsIh5+eznfOWIvjh7eJ+pwIqMELyIiKWPx5yX84Kn5TBjSnf87ZmjU4URKCV5E\nRFLClu2VXDx1Fp2yM/jDOWPJSO/YKa5jn72IiKQEd+eaJ+aybN1W/nDuWHp3yYk6pMgpwYuISLt3\n/3+X8fzcVUw5dl8O3rNH1OEkBSV4ERFp12Yv38gvXljEl/brw7e/sGfU4SQNJXgREWm3Nmwt59Kp\ns+lbkMMtZ44mLS31B5GJl+6DFxGRdqmq2rnykTms31rOkxcfSkFexxhEJl6qwYuISLt0xz+X8O8l\n67jxlP0ZMaAg6nCSTsISvJn91czWmNn8mLLuZvaKmS0J37uF5WZmvzezpWY218zGJSouERFp/974\ncC23v7qE08cN4CsHDow6nKSUyBr834Dj6pRdC7zq7vsAr4bzAMcD+4Svi4C7ExiXiIi0Y59tKuXK\nR+YwtHc+vzhtJGa67l6fhCV4d38D2FCn+FTg/nD6fuC0mPIHPPAW0NXM+iUqNhERaZ/KK6u59OHZ\nVFQ5d583jtysjjeITLza+hp8H3dfFU5/DtQ8JHgAsCJmvaKwbBdmdpGZzTSzmWvXrk1cpCIiknR+\n9eIi5izfxK/PGMWevTpHHU5Si6yTnbs74M3Y7h53H+/u43v16pWAyEREJBk9N/cz7ntzGRdOHMyJ\no9TI25i2TvCra5rew/c1YflKILaXRGFYJiIiwkdrt3DN43MZN6gr1x2/X9ThtAttneCfAS4Ipy8A\nZsSUnx/2pj8YKI5pyhcRkQ5sW3klFz80i+zMdP5w7jiyMnSHdzwS9qAbM5sGHAn0NLMi4MfATcB0\nM/sG8ClwVrj6C8AJwFJgG3BhouISEZH2w9254an5LFmzhQe+PoH+XXOjDqndSFiCd/dzGlg0qZ51\nHbg0UbGIiEj7NO2dFTw5ZyXf/dJQDt9H/a6aQu0cIiKSlOYVFfOTZxbwhaG9uPyovaMOp91RghcR\nkaRTvK2Ci6fOomfnLG47e4wGkWmGuJrozaw3MBHoD5QC84GZ7l6dwNhERKQDqq52vjf9PVZvLuPR\nbx9C905ZUYfULu02wZvZFwkeJ9sdmENwW1sOwRPo9jKzx4Fb3H1zogMVEZGO4Y9vfMSrH6zhJycP\nZ9ygblGH0241VoM/AfiWuy+vu8DMMoCTgKOBJxIQm4iIdDD/+2g9v31pMSeN6scFhw6OOpx2bbcJ\n3t2n7GZZJfB0q0ckIiId0prNZVw+bQ6De3bipjNGaRCZFoqrk52ZXWlmXcIH0dxrZrPN7JhEByci\nIh1DZVU1l02bw9btlfzxvAPonJ2wu7g7jHh70X89vM5+DNAN+CrBQ2tERERa7OaXF/POJxv41ekj\nGdonP+pwUkK8Cb6mneQE4EF3XxBTJiIi0mwvL/icP/3rYyYfNIjTxtY7kKg0Q7wJfpaZvUyQ4F8y\ns3xAt8iJiEiLfLp+K99/7H1GDijghycNjzqclBLvRY5vAGOAj919m5n1QM+LFxGRFiirqOLih2aT\nZsZdk8eRk5kedUgppbH74MfVKdpTvRpFRKQ13PjsAhau2sy9F4xnYPe8qMNJOY3V4G8J33OAA4C5\nBNfeRwEzgUMSF5qIiKSqx2cVMe2dFVxy5F5M2q9P1OGkpN1eg3f3L7r7F4FVwAHuPt7dDwDGAivb\nIkAREUkti1Zt5oan53HInj343tFDow4nZcXbyW6Yu8+rmXH3+cB+iQlJRERSVUlZBZdMnU2XnExu\nP2cMGeka8yxR4u1kN9fM/gI8FM5PJmiuFxERiYu7c/Xjc1m+YRvTvnUwvfNzog4ppcWb4C8ELgau\nDOffAO5OSEQiIpKS/vrmMl6c/znXn7AvE4Z0jzqclBdXgnf3MuDW8CUiItIkM5dt4FcvLOKY4X34\n1uF7Rh1OhxDvePATgZ8Ae8Ru4+76VxIRkd1at2U7lz08hwHdcrn5zNEaRKaNxNtEfy/wXWAWUJW4\ncEREJJVUVTtXPfIeG7aV89Qlh1KQmxl1SB1GvN0Xi939RXdf4+7ra17NPaiZfdfMFpjZfDObZmY5\nZjbEzN42s6Vm9qiZZTV3/yIikhxu/8eH/GfpOn526v7s378g6nA6lHgT/GtmdrOZHWJm42pezTmg\nmQ0ArgDGu/sIIB34CvBr4FZ33xvYSPB4XBERaadeW7yG3/9zKWceUMjZBw6KOpwOJ94m+oPC9/Ex\nZQ4c1YLj5ppZBZBH8CCdo4Bzw+X3E1zzV099EZF2aOWmUr776Hvs2zefn546IupwOqR4e9F/sbUO\n6O4rzey3wHKgFHiZ4Nr+JnevDFcrAuodM9DMLgIuAhg0SL8IRUSSzfbKKi6ZOpuqKufu8w4gN0uD\nyEQhriZ6Mysws9+Z2czwdYuZNetiipl1A04FhgD9gU7AcfFu7+73hI/MHd+rV6/mhCAiIgn0y+cX\n8f6KTdx85iiG9OwUdTgdVrzX4P8KlABnha/NwH3NPOaXgE/cfa27VwBPAhOBrmZW06JQiJ51LyLS\n7jzz/mfc/79P+eZhQzhuRL+ow+nQ4r0Gv5e7nxEzf6OZvdfMYy4HDjazPIIm+kkEI9O9BnwZeAS4\nAJjRzP2LiEgElq4p4don5jJ+j25cc/y+UYfT4cVbgy81s8NqZsIH35Q254Du/jbwODAbmBfGcA9w\nDfA9M1sK9CC4915ERNqBrdsr+c5Ds8nNTOcP544jU4PIRC7eGvzFwP0x1903Al9r7kHd/cfAj+sU\nfwxMaO4+RUQkGu7O9U/N46O1W3joGwfRt0CDyCSDeHvRvweMNrMu4fzmhEYlIiLtxkNvL2fGe5/x\n/aOHMnHvnlGHI6F4e9H/0sy6uvtmd99sZt3M7OeJDk5ERJLb+ys28bNnF3LksF5c+sW9ow5HYsR7\nkeR4d99UM+PuG4ETEhOSiIi0Bxu3lnPJ1Nn0ys/m1rPGkJamQWSSSbwJPt3MsmtmzCwXyN7N+iIi\nksKqq53vTX+PNSVl3Dl5HN06afiQZBNvJ7upwKtmVnPv+4UEj5MVEZEO6O5/fcRri9fys1P3Z8zA\nrlGHI/WIt5Pdr83sfYKH1AD8zN1fSlxYIiKSrN5cuo5bXl7MKaP7c97Be0QdjjQg3ho8wCKg0t3/\nYWZ5Zpbv7iWJCkxERJLP58VlXPnIHPbs1ZlfnT4SM113T1bx9qL/FsHDaf4UFg0Ank5UUCIiknwq\nqqq5fNpstpVX8cfzxtEpuyl1RGlr8Xayu5TgefGbAdx9CdA7UUGJiEjy+c3fP+DdZRv51ekj2bt3\nftThSCPiTfDb3b28ZiYcFMYTE5KIiCSbv89fxZ///QnnH7IHp46pdzRvSTLxJvh/mdn1QK6ZHQ08\nBjybuLBERCRZLFu3lSmPzWV0YQE/OHG/qMOROMWb4K8F1hIMDvNt4AXghkQFJSIiyaGsooqLp84m\nPd24c/I4sjPSow5J4hTvbXLVwJ+BP5tZd6DQ3dVELyKS4n40Yz6LVm3mvgsPpLBbXtThSBPE24v+\ndTPrEib3WQSJ/tbEhiYiIlGa/u4Kps8s4vKj9uaLw9Svur2Jt4m+IBxB7nTgAXc/CJiUuLBERCRK\nCz4r5ocz5jNx7x5c9aWhUYcjzRBvgs8ws37AWcBzCYxHREQitrmsgkumzqZrXia3f2Us6RpEpl2K\nN8H/FHgJWOru75rZnsCSxIUlIiJRcHf+b/r7FG0s5c5zx9Gzs8YVa6/i7WT3GMGtcTXzHwNnJCoo\nERGJxl/+/QkvL1zNDSfux/jB3aMOR1pgtzV4M7sh7FjX0PKjzOyk1g9LRETa2rvLNnDT3z/guP37\n8o3DhkQdjrRQYzX4ecCzZlYGzCa4Fz4H2AcYA/wD+GVTD2pmXYG/ACMInoj3dWAx8CgwGFgGnOXu\nG5u6bxERabq1Jdu5dOpsBnbL5TdnjtIgMilgtzV4d5/h7hOB7wALgHSC59E/BExw9++6+9pmHPd2\n4O/uvi8wmmCkumuBV919H+DVcF5ERBKsqtq5YtociksruGvyAXTJyYw6JGkF8V6DX0IrdaozswLg\nC8DXwn2XA+VmdipwZLja/cDrwDWtcUwREWnYra98yP8+Xs/NXx7F8P5dog5HWkm8vehb0xCCpv77\nzGyOmf3FzDoBfdx9VbjO50CfCGITEelQ/vnBav7w2lLOHj+QM8cPjDocaUVRJPgMYBxwt7uPBbZS\npzk+fAxuvY/CNbOLzGymmc1cu7Y5VwdERARgxYZtfPfR9xnerws3nrp/1OFIK4siwRcBRe7+djj/\nOEHCXx0+TIfwfU19G7v7Pe4+3t3H9+rVq00CFhFJNdsrq7j04dlUu3P3eePIydQgMqkm3mfRDzWz\nV81sfjg/ysyaNZqcu38OrDCzYWHRJGAh8AxwQVh2ATCjOfsXEZHG/ey5hcwtKua3Z45mjx6dog5H\nEiDeGvyfgeuACgB3nwt8pQXn3vmBAAAdL0lEQVTHvRyYamZzCW63+yVwE3C0mS0BvhTOi4hIK3t6\nzkoeems53/7Cnhy7f9+ow5EEiasXPZDn7u/UuS+ysrkHdff3gPH1LNIANiIiCfTh6hKue3IeEwZ3\n5/+OHdb4BtJuxVuDX2dmexF2fDOzLwOrdr+JiIgkky3bK/nOQ7PolJ3BHeeOJTM9im5Y0lbircFf\nCtwD7GtmK4FPgPMSFpWIiLQqd+e6J+exbN1WHvrmQfTpkhN1SJJg8T7o5mPgS+H96mnuXpLYsERE\npDU98L9Pefb9z5hy7DAO3atn1OFIG4grwYfPjj+f4DnxGTXX4t39ioRFJiIirWLO8o38/PmFTNq3\nNxcfsVfU4UgbibeJ/gXgLYLBZ6oTF46IiLSmjVvLuXTqbPp0yeGWs0aTlqZBZDqKeBN8jrt/L6GR\niIhIq6qudq569D3WbSnn8YsPoWteVtQhSRuKtwvlg2b2LTPrZ2bda14JjUxERFrkD68t5V8fruVH\nJw9nVGHXqMORNhZvDb4cuBn4ATufEe/AnokISkREWuY/S9Zx6z8+5P+NHcDkgwZFHY5EIN4E/31g\nb3dfl8hgRESk5VYVl3LFI3PYp3dnfvH/RlDnIWXSQcTbRL8U2JbIQEREpOUqqqq5dOpstldUcdfk\nA8jLirceJ6km3n/5rcB7ZvYasL2mULfJiYgkl1+98AGzl2/ijnPGsnfvzlGHIxGKN8E/Hb5ERCRJ\nvTBvFX998xO+duhgTh7dP+pwJGLxPsnu/kQHIiIizffx2i1c/fhcxgzsyvUn7Bd1OJIEdpvgzWy6\nu59lZvPY2Xt+B3cflbDIREQkLqXlVVwydTaZ6cadk8eRlaFBZKTxGvyV4ftJiQ5ERESazt35wdPz\nWLy6hL9dOIEBXXOjDkmSxG5/5rl7zZCwl7j7p7Ev4JLEhyciIrvz6LsreHL2Sq44ah+OGNor6nAk\nicTbjnN0PWXHt2YgIiLSNPNXFvOjZxZw+D49uWLSPlGHI0mmsWvwFxPU1Pc0s7kxi/KBNxMZmIiI\nNKx4WwUXT51Fj05Z3Hb2GNI1iIzU0dg1+IeBF4FfAdfGlJe4+4aERSUiIg1yd77/2Pus2lTGo98+\nhB6ds6MOSZLQbhO8uxcDxcA5bROOiIg05k9vfMw/Fq3mRycN54A9ukUdjiSpyO6lMLN0M5tjZs+F\n80PM7G0zW2pmj5qZxjUUEanjrY/Xc/NLizlxZD8unDg46nAkiUV5s+SVwKKY+V8Dt7r73sBG4BuR\nRCUikqTWbC7j8mlz2KN7HjedMVKDyMhuRZLgzawQOBH4SzhvwFHA4+Eq9wOnRRGbiEgyqqyq5vJp\ncygpq+Cu88aRn5MZdUiS5KKqwd8GXA1Uh/M9gE3uXhnOFwEDoghMRCQZ3fLKh7z9yQZ+cdpI9u3b\nJepwpB1o8wRvZicBa9x9VjO3v8jMZprZzLVr17ZydCIiyeeVhau5+/WPOGfCIM44oDDqcKSdiKIG\nPxE4xcyWAY8QNM3fDnQ1s5pe/YXAyvo2dvd73H28u4/v1UtPbRKR1LZ8/Ta+P/099u/fhR+fPDzq\ncKQdafME7+7XuXuhuw8GvgL8090nA68BXw5XuwCY0daxiYgkk7KKKi55OGjsvHvyAeRkpkcckbQn\nyTTk0DXA98xsKcE1+XsjjkdEJFI3PruQ+Ss3c8tZYxjUIy/qcKSdiWs8+ERx99eB18Ppj4EJUcYj\nIpIsnphVxLR3lvOdI/bi6OF9og5H2qFkqsGLiAjwweeb+cHT8zhoSHf+75ihUYcj7ZQSvIhIEikp\nq+CSh2aTn5PJHeeOJSNdX9PSPJE20YuIyE7uzrVPzOPTDduY+s2D6J2fE3VI0o7pp6GISJK4781l\nPD9vFVOOHcbBe/aIOhxp55TgRUSSwKxPN/LLFxbxpf36cNHhe0YdjqQAJXgRkYit37Kdyx6eTb+u\nOdxy5mjS0jSIjLScrsGLiESoqtq56tH3WL+1nCcvPpSCPA0iI61DNXgRkQj9/tUl/HvJOm48ZX9G\nDCiIOhxJIUrwIiIR+deHa/n9P5dw+rgBfOXAgVGHIylGCV5EJAIrN5Vy1SNzGNYnn1+cNhIzXXeX\n1qUELyLSxsorq7l06mwqqpy7Jo8jN0uDyEjrUyc7EZE29ssXFvHeik3cNXkce/bqHHU4kqJUgxcR\naUPPvv8Zf/vvMr4+cQgnjOwXdTiSwpTgRUTayNI1W7j2ibmMG9SVa4/fN+pwJMUpwYuItIFt5ZVc\nMnUW2Znp3Dl5HFkZ+vqVxNI1eBGRBHN3fvDUfJas2cIDX59Av4LcqEOSDkA/IUVEEuzhd5bz1JyV\nXDVpKIfv0yvqcKSDUIIXEUmguUWbuPGZhXxhaC8uP2rvqMORDkQJXkQkQTZtK+fih2bTs3MWt509\nRoPISJvSNXgRkQSorna+P/191pSUMf3bh9C9U1bUIUkH0+Y1eDMbaGavmdlCM1tgZleG5d3N7BUz\nWxK+d2vr2EREWsvd//qIVz9Yww0nDmfsIH2ddThzp8OtI+AnXYP3udPbPIQomugrge+7+3DgYOBS\nMxsOXAu86u77AK+G8yIi7c5/P1rHLS8v5qRR/Tj/kD2iDkfa2tzp8OwVULwC8OD92SvaPMm3eYJ3\n91XuPjucLgEWAQOAU4H7w9XuB05r69hERFpq9eYyrpg2hyE9O3HTGaM0iExH9OqNUFFau6yiFF79\naZuGEek1eDMbDIwF3gb6uPuqcNHnQJ8GtrkIuAhg0KBBiQ9SRCROFVXVXP7wHLZur+Lhbx1M52x1\nc0pJZZuhuCh4bS7aOV28MqitFxfVv11D5QkS2f8+M+sMPAFc5e6bY3/lurubmde3nbvfA9wDMH78\n+HrXERGJwm9fWsw7yzZw29ljGNonP+pwpDkqy6HkszBZFwUJe/PKmCReBNs3194mLQPy+0NBIQw8\nCEo3wPaSXfddUNg25xCKJMGbWSZBcp/q7k+GxavNrJ+7rzKzfsCaKGITEWmOlxZ8zp/e+JjJBw3i\ntLEDog5H6uMOW9fVqXXHvDavhJLPgTp1x7weQXLuNgQGHx5MFwyAgoHBdOc+kBYz5G/NNfjYZvrM\nXJj0ozY5zRptnuAtqKrfCyxy99/FLHoGuAC4KXyf0daxiYg0xdNzVnLzS4v5bFPwRT6wWy4/Onl4\nxFF1YOVbdzaT16111yTwyrLa22Tkhsm6EPaeFCTtLuF8wUDo0h+y8poWx6izgvdXfxoct6AwSO41\n5W3E3Nu2ldvMDgP+DcwDqsPi6wmuw08HBgGfAme5+4bd7Wv8+PE+c+bMBEYrIlK/p+es5Lon51Fa\nUbWjLDsjjV+fMUo1+ESoqoQtn9eftGuue5durLORQX6/MFnXqXV3CafzukM76whpZrPcfXxj67V5\nDd7d/wM09GlOastYRETiVV5ZzWebSlmxcRsrNpTyyxcW1UruANsrq7n5pcVK8E3lHiTn+mrdNUl8\n82fgtT9vcgp21rgLJ8Qk8vCV3w/SM6M5pySgLp4iIgQjvq3dsp0VG4IEvmLDNpZv2LYjoa8qLqU6\njgbPmuZ6iVFRVjt5x9a6azqzVWytvU16VtA8XjAQBh9Wu9m8pjaerY6Mu6MELyIdxpbtlTsTd81r\nY2n4vo2yiupa6/fOz2ZQ9zwmDOnOwO55DOyWy6DueQzsnseX//hfPttUtssx+nftYEPBVlfD1jX1\n1Lpjpreu3XW7Tr2DRN1rWHjtO6x1dwnfO/WCNA2X0hJK8CKSMiqqgmb05TW18I1BMi8Kk/rGbRW1\n1s/PzmBg9zz27NWJI4b2YlCPPAZ2CxJ4YbdccjLTGzgSXH3svrtcg8/NTGfKscMSdn6RqLnnu75a\nd/GKoOm8uvbnSmYn6Bo2nfcdFda6B8Qk8QGQkR3N+XQgSvAi0m7sbEYv3VED310zema6MaBrLgO7\n53H8yH5B7btbHgO7BzXxgtzMZj9pruY6e00v+v5dc5ly7LD2df29qiJI0A0+tKUIthfX3sbSw6bz\nQhg4oU7TeTid07XddVxLRUrwIpJU6jajF20s3dmk3lgzercgmQ/snseg7nn06ZJDegKHaD1t7IDk\nTejusG19nVr3ipjaeFH993zndg/v+d4DBk/ctek8v2/te74laSnBi0ibqmlGX7GhdEftu6YZfcXG\nUjZsLa+1fn52BoX1NqPnUtgtb7fN6Cmt5p7vhh6VWu893zk7m8j3mrSzs1qte747RXM+0uqU4EWk\nVcU2oxdt3Mby9TuTeGPN6McNKGBgt7ywI1suA7vl0TWv+c3o7VZ1VVC7rrnOHVvrLl4RJPLSuo8J\nsaB2XVAI/UbBsONr9zgvGBg8ka2jfZYdmBK8iDRZTTN6TVN60cbSWtN17w/vnZ/NwJhm9MLueTt6\no/dNcDN6Qs2d3vSnlblD2aaG7/cuLqr/nu/sgp3JuvDA2s3mNfd8Z2Ql7lyl3VGCF5FdxDaj76x9\n77ytrG4zeuewN/qQnkEz+sDuO2vhKduMXvd54zVjfldVwKCD6zy0ZUVMz/N67vlOy9x5z/ceE6n3\nqWs5Xdr+HKVdU4IX6YDcnXVbysMa985m9Jrr4nWb0TPSjMJutZvRa3qiJ3UzunvQ3F21HarKg+Rb\nVQ6V23dOV1U0srzOqzJ8f/cv9Y/5PeOSXePo1Cu853so7HXUrk9c69Rb93xLq1OCF2lMc5phk0Bs\nM/qOh7nsphm9V9gb/cDB3RjUfUB8zehVlUGyK9vWQKKMTY6NJdI6SbeyzrpNWR573Lq9xFtDela4\n7wacelfte74zc1o/BpFGKMGL7E5DzbCQ+CRfXbVrrTEmUVZWbGfdpi2s3VTC+s0lrC/ewsaSrRRv\n2UrJlq2Ul28nk0qyqCCTSnpnVLNvrtE92+naDwqynC6ZTueMKvLSq0mvrknW5bCiHJY1lEhjXl7d\n+Hk0VVpm8BCU9MwgkdZ6hWUZ2cEIX+ldd12ekV173fTYfTWyPJ7jpmUEHdVuHRH8f6irYCCMndz6\nn4tIEynBi9RVXQXbN8P2Enj5hvqbYV+8Gko31a6R7i4Rxr08pjbaSPLMAPqGr3rVN8ZGeSZUZcH2\n+hJaZpjssoLbqXIK6iTCxhLp7pZn75ooG9ouGZv66zPpR0kx5rdIQ5TgJbVUlAXJuWxzmKRrpkvi\nLC+B8i2NH6d0I7w4pXZZWsZuElpMEsvIDgbJSM+i0jLYWpVOSYVRUpFGcTls3G5s3A7rS51tVemU\nk0E5GVSQQU5ODl06d6Jr5050y+9E94J8ehbk07trPt27dCY9czeJNC1T13lbU5KM+S3SECV4SQ7V\n1UFi3SXxFu9MvLFJeJdEHZbv7rpojcw8yO4SJNmcLsF0fr9wuqB2+T9+HDwNrK78/vCd/9SuhdaT\nPCuqqlm1qaxWT/Tl4TXxog3bWF9Pb/TCbrkMGpC3c3CT8MEuhd3yyM1Kwd7o7dmos5TQJWkpwUvL\nVZbXn2wbSsJl9dSgt5fQaGcoSwuSb3ZBmIDzoXNf6Dk0LO+yMzHvmK5bnt+08aEzsqmccTkZVTuf\nCFaZnkPG0TdCpx47eqOv2Fi8s0NbzBPaVhWXURXTHT0jzRjQLXiAyzH7963VE31g9zy6JWtvdBFp\nd5TgOzL34HGXtRJvcT1N17G16XrK6z4Osz4ZObsm2x69guu8dWvTO6br1KazOiXs+qy7U1XtlFdV\nU1HpbK+qoryymhc3jeeD8m/yXXuE/raez7wHv608mw9f60vlq/9ixYb6e6MP7JbL+D26hbXwsDbe\nPZe+XXLISFczuYgknhJ8e1VV2fxrzDWJfHtJHL2gbWdirkm2eT2h25CdibfRWnOXHU/Yqqp2Kqqq\n2V5ZTUVVNeWVwaumLEiw4fvWasqLa9bdRHnlhp3bxLxX1Jkvj933joRde7369uMNNiAcyhMcWqsk\nY/UWvrhvbw7fp5ea0UUkKSnBA+8+8ycGzr6Z3r6WNdaLFeOmcOAp307MwdyDXrcNJuR6knB9zdsV\n2xo/VFomnt2F6qx8qrPyqczsTGVOfyrzh1GR0YnyjM5sT+/M9vROlKV3otQ6U5reiVLLZat1Yovl\nsdVzqKgmTIoeJOHKMFluChNlnYQdvG+kvHI95VVOeWUVFVVB7Ti2ubo1ZKYbmelpZGWkBe/paWTX\nTGfUlBsFWZlkpVtQlp5Wa5vsjJjtY96z09O4+om59R63qtr58/njW/VcRERaU4dP8O8+8ydGzLqB\nXCsHg76spWDWDbwLuyb56qodidnLNlO5rZjK0mKqSjdTXVpMdWkxHi6z7TWvLaSVbya9ooSMii1k\nVGwhzSsbjassLZeytE6UpnVim+Wx1TqxlT5sYQhb0vMoSctls+dRXJ1LseewqTqXjVU5bKjMobg6\nlxJy2U4WNP47oB7l4WsjAOlpFiZFIysjPUygVisZZqWn0Tk7g6y8usk1rdb6WenpZGYE+6vZru5+\nYrcN5o2s9PQdyTp2WVqCn2F++6tLWLmpdJfy/l1zE3pcEZGWSroEb2bHAbcD6cBf3P2mRB5v4Oyb\ng+QeI9fKGTnrByx8/6/k+VbyqrfRiW10YucXvRHcZly3u1alp1FCHiWeyxbyKCFIxCX0YIsHibfE\n89iyozyPLZ7LFsujLK0T5RmdqEjvRHpGZp0kF5sMw2SZkU5mupGdkUbf9DQGNZYsM9JiarHptZJl\nfbXYmppwux0IpBVMOXYY1z05r9Z19tzMdKYcOyzCqEREGpdUCd7M0oE7gaOBIuBdM3vG3Rcm6pi9\nfW2QrevIpgKy8tiY3pvV6Z2DxJuRT0VmZ6oy86nKyqc6qzPV2V0gK5/q7C5YThfSs/LIykivlSy7\np6fRb5cEamTH1ErV8So5nTZ2AAA3v7SYzzaV0r9rLlOOHbajXEQkWSVVggcmAEvd/WMAM3sEOBVI\nWIJfY73oy9pdyldbL4Zf81qiDivtyGljByihi0i7k2zVxgFA7MOdi8KyHczsIjObaWYz167dNTE3\n1YpxUyj12mMol3oWK8ZNaWALERGR5JdsCb5R7n6Pu4939/G9evVq8f4OPOXbzD/g53xOL6rd+Jxe\nzD/g54nrRS8iItIGkq2JfiUwMGa+MCxLqANP+TaECX23g3eIiIi0E8lWg38X2MfMhphZFvAV4JmI\nYxIREWl3kqoG7+6VZnYZ8BLBbXJ/dfcFEYclIiLS7iRVggdw9xeAF6KOQ0REpD1LtiZ6ERERaQVK\n8CIiIinIvOEhtJKema0FPm3FXRYAxa24v5aKKp62Om4ij5OIffcE1rXyPiU1JNt3R3uS6p9dIs5v\nD3dv9D7xdp3gW5uZ3ePuF0UdR42o4mmr4ybyOInYt5nNdHcNISe7SLbvjvYk1T+7KM9PTfS1PRt1\nAHVEFU9bHTeRx0m2f0tJbfr/1nyp/tlFdn6qwYvESTV4EWlPVIMXid89UQcgIhIv1eBFRERSkGrw\nIiIiKUgJXkREJAUpwacYM9vPzP5oZo+b2cVRxyMiDTOzTmY208xOijqW9qYjfHYtPUcl+AQxs65h\nkv3AzBaZ2SHN3M9fzWyNmc2vZ9lxZrbYzJaa2bUA7r7I3b8DnAVMbNlZyO50hC+YVGdmA83sNTNb\naGYLzOzKFuyrSX+roWuA6c09ZpTMLMfM3jGz98PP7sYW7CupPzszSzezOWb2XAv20ebnqASfOLcD\nf3f3fYHRwKLYhWbW28zy65TtXc9+/gYcV7fQzNKBO4HjgeHAOWY2PFx2CvA8GrSnSRr6A0yGLxhJ\nmErg++4+HDgYuLTm76hGov5WzexoYCGwpjVOJALbgaPcfTQwBjjOzA6OXSGFPrsrqfMdHhNj0p6j\nEnwCmFkB8AXgXgB3L3f3TXVWOwJ42syyw22+BdxRd1/u/gawoZ7DTACWuvvH7l4OPAKcGm7zjLsf\nD0xupVPqKP5GnT/AJPqCkQRw91XuPjucLiH4Eh9QZ7VE/a0eSfCj4lzgW2bWrr6PPbAlnM0MX3Vv\ny2r3n52ZFQInAn9pYJWkPcekGy42RQwB1gL3mdloYBZwpbtvrVnB3R8zsyHAo2b2GPB14OgmHGMA\nsCJmvgg4yMyOBE4HslENvknc/Q0zG1yneMcfH4CZ1fzxdQY6EST9UjN7wd2r2zBcaWXhv/1Y4O3Y\n8kT9rbr7ZeFxvwasa4//f8IfwLOAvYE73T0VP7vbgKuB/PoWJvM5KsEnRgYwDrjc3d82s9uBa4Ef\nxq7k7r8JE8bdwF4xv4abzd1fB15v6X5kh2T4gpEEM7POwBPAVe6+ue7yRPytxuz7b621r7bm7lXA\nGDPrCjxlZiPcfX6dddrtZxf2r1nj7rPCylNDcSTlObarJqF2pAgoivk1+zhBwq/FzA4HRgBPAT9u\n4jFWAgNj5gvDMmlD7v43d292xxuJnpllEiT3qe7+ZAPr6G91N8JLkK9R/zXm9vzZTQROMbNlBE3n\nR5nZQ3VXStZzVIJPAHf/HFhhZsPCokkE12t3MLOxBI8+PRW4EOhhZj9vwmHeBfYxsyFmlgV8BXim\nxcFLXVF/wUgCmZkR9JVZ5O6/a2Ad/a3Ww8x6hTV3zCyXoFn6gzrrtOvPzt2vc/dCdx8cHvuf7n5e\n7DrJfI5K8IlzOTDVzOYS9DD9ZZ3lecBZ7v5R2Lx7PvWMbW9m04D/AcPMrMjMvgHg7pXAZcBLBB2D\nprv7goSdTceVkl/OssNE4KsENbP3wtcJddbR32r9+gGvhd9x7wKv1NOa1RE+u6Q9Rz2LXiQU/gEe\nCfQEVgM/dvd7wy/824B04K/u/ovoohQRiY8SvIiISApSE72IiEgKUoIXERFJQUrwIiIiKUgJXkRE\nJAUpwYuIiKQgJXgREZEUpAQvIiKSgpTgRToIM3vdzMYnQRzX15n/b1SxiKQyJXgRaRYLNOc7pFaC\nd/dDWykkEYmhBC/SDpjZYDNbZGZ/NrMFZvZyOMBHfeuOMbO3zGyumT1lZt1iFn81fN76fDObEK5/\nRMxz2OeYWX5YPsXM3g33c2NMHIvN7AFgPvBDM7s55thfM7M/hNNPm9msMN6LwrKbgNzwWFPDsi3h\nu5nZzWFs88zs7LD8yLD14XEz+8DMpoaDxGBmN5nZwjDG37bmZy7S7rm7XnrpleQvYDBQCYwJ56cD\n5zWw7lzgiHD6p8Bt4fTrwJ/D6S8A88PpZ4GJ4XRnIAM4hmCELCOoCDwXbjMYqAYODtfvBSyNOfaL\nwGHhdPfwPZfgx0CPcH5LnXi3hO9nAK8QPPO/D7CcYECTI4FigpH80ggG7DgM6AEsZucjt7tG/e+k\nl17J9FINXqT9+MTd3wunZxEk21rMrIAg0f0rLLqfIDHXmAbg7m8AXcLhPt8EfmdmV4TbVhIk+GOA\nOcBsYF9gn3Afn7r7W+F+1gIfm9nBZtYjXO/NcL0rzOx94C2CIXdrtm/IYcA0d69y99XAv4ADw2Xv\nuHuRB6N1vReeezFQBtxrZqcD2xrZv0iHogQv0n5sj5muIqhpN1Xd0aXc3W8CvklQ037TzPYlqLn/\nyt3HhK+93f3ecJutdfbxCHAWQQ38KXd3MzsS+BJwiLuPJvihkNOMeGvscu7hD5EJwOPAScDfW7B/\nkZSjBC+SQty9GNhoZoeHRV8lqAnXqLmufRhQ7O7FZraXu89z918TjOu9L8HY1F83s87h+gPMrHcD\nh30KOBU4hyDZAxQAG919W/iD4eCY9SvMLLOe/fwbONvM0s2sF0HLwzsNnWsYW4G7vwB8Fxjd0Loi\nHVFzagAiktwuAP5oZnnAx8CFMcvKzGwOkAl8PSy7ysy+SHBtfQHwortvN7P9gP+F/dm2AOcR1J5r\ncfeNZrYIGO7uNQn578B3wvLFBM30Ne4B5prZbHefHFP+FHAI8D5BS8PV7v55+AOhPvnADDPLIWhx\n+F6jn4xIB6Lx4EVERFKQmuhFRERSkJroRdopM7sTmFin+HZ3vy+KeEQkuaiJXkREJAWpiV5ERCQF\nKcGLiIikICV4ERGRFKQELyIikoKU4EVERFLQ/weWsvuZs0gQ4AAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "total_times = pd.read_csv('total_times.csv')\n", "pl.figure(figsize=(8, 4))\n", "for name, values in total_times[['scanpy0', 'scanpy1']].items():\n", " pl.semilogx(n_observations, values, marker='o', label=name)\n", "pl.title('run time (n_neighbors = {})'.format(n_neighbors))\n", "pl.xlabel('n_observations')\n", "pl.ylabel('time (seconds)')\n", "pl.legend()\n", "pl.savefig('./figures/time-n_neighbors{}.svg'.format(n_neighbors))\n", "pl.show()" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [default]", "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.5.2" } }, "nbformat": 4, "nbformat_minor": 2 }