{ "metadata": { "name": "khmer-counting-compare" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Figure generation for\n", "A probabilistic approach to k-mer counting\n", "=============" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import numpy\n", "datadirs = ['../execublog1/data-athyra/',\n", " '../execublog1/data-ec2-i1/',\n", " '../execublog1/data-ec2-i2/',\n", " '../execublog1/data-ec2-i3/']\n", "names = ['our server', 'm2.2xlarge', 'm2.2xlarge/1TB EBS 100 IOPS', 'm2.4xlarge']\n", "order = ['a', 'b', 'd', 'c']\n", "# note: different zones!\n", "\n", "figsize(12,6)\n" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 13 }, { "cell_type": "code", "collapsed": false, "input": [ "pwd" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 14, "text": [ "u'/Users/t/Documents/papers/khmer-counting/notebook'" ] } ], "prompt_number": 14 }, { "cell_type": "code", "collapsed": false, "input": [ "def get_time_mem(filename):\n", " \"Extract the user time and max memory as generated by 'time' command\"\n", " for line in open(filename):\n", " line = line.rstrip()\n", " if 'system' in line:\n", " fields1 = line.split('user')\n", " time1 = float(fields1[0])\n", " fields1b = line.split('system')[0].split()[-1]\n", " time2 = float(fields1b)\n", " \n", " walltime = line.split('elapsed')[0].split()[-1].rsplit(':')\n", " assert len(walltime) <= 3\n", " hours = 0.\n", " minutes = 0.\n", " seconds = walltime[-1]\n", " if len(walltime) == 3:\n", " hours = float(walltime[0])\n", " minutes = float(walltime[1])\n", " elif len(walltime) == 2:\n", " minutes = float(walltime[0])\n", " \n", " wall_seconds = hours*60*60 + minutes*60 + float(walltime[1])\n", " \n", " time = wall_seconds\n", " fields2 = line.split('avgdata ')\n", " fields3 = fields2[1].split('max')\n", " mem = fields3[0]\n", " return float(time), float(mem)\n", " raise Exception(filename)\n" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 15 }, { "cell_type": "code", "collapsed": false, "input": [ "jelly = {}\n", "khmer = {}\n", "dsk = {}\n", "tally = {}\n", "\n", "for datadir in datadirs:\n", " tally[datadir] = get_time_mem(datadir + 'mkindex_5_part1_22.time')[0] + \\\n", " get_time_mem(datadir + 'suffix_5_part1.time')[0]\n", " jelly[datadir] = get_time_mem(datadir + 'jelly_5_22.time1')[0] + \\\n", " get_time_mem(datadir + 'jelly_5_22.time2')[0]\n", " khmer[datadir] = get_time_mem(datadir + 'bloom_5_1_22.time1')[0]\n", " dsk[datadir] = get_time_mem(datadir + 'dsk_5_22.time')[0]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 16 }, { "cell_type": "code", "collapsed": false, "input": [ "print jelly\n", "print khmer\n", "print dsk\n", "\n", "jelly_y = []\n", "dsk_y = []\n", "khmer_y = []\n", "tally_y = []\n", "labels = []\n", "\n", "for _, label, dirname in sorted(zip(order, names, datadirs)):\n", " print dirname\n", " labels.append(label)\n", " jelly_y.append(jelly[dirname])\n", " dsk_y.append(dsk[dirname])\n", " khmer_y.append(khmer[dirname])\n", " tally_y.append(tally[dirname])\n", " " ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "{'../execublog1/data-athyra/': 270.89, '../execublog1/data-ec2-i1/': 713.1400000000001, '../execublog1/data-ec2-i3/': 394.14, '../execublog1/data-ec2-i2/': 7661.01}\n", "{'../execublog1/data-athyra/': 803.74, '../execublog1/data-ec2-i1/': 1271.47, '../execublog1/data-ec2-i3/': 736.7, '../execublog1/data-ec2-i2/': 1890.36}\n", "{'../execublog1/data-athyra/': 315.41, '../execublog1/data-ec2-i1/': 1487.29, '../execublog1/data-ec2-i3/': 1668.58, '../execublog1/data-ec2-i2/': 9640.0}\n", "../execublog1/data-athyra/\n", "../execublog1/data-ec2-i1/\n", "../execublog1/data-ec2-i3/\n", "../execublog1/data-ec2-i2/\n" ] } ], "prompt_number": 17 }, { "cell_type": "code", "collapsed": false, "input": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "N = 5\n", "\n", "ind = np.arange(4) # the x locations for the groups\n", "width = 0.2 # the width of the bars\n", "\n", "fig = plt.figure()\n", "ax = fig.add_subplot(111)\n", "rects1 = ax.bar(ind, jelly_y, width, color='r')\n", "rects2 = ax.bar(ind+width, dsk_y, width, color='y')\n", "rects3 = ax.bar(ind+2*width, tally_y, width, color='g')\n", "rects4 = ax.bar(ind+3*width, khmer_y, width, color='b')\n", "\n", "\n", "# add some\n", "ax.set_ylabel('Time (s)')\n", "ax.set_title('Time to generate abundance histograms of 48.7m reads')\n", "ax.set_xticks(ind+2*width)\n", "ax.set_xticklabels(labels)\n", "ax.set_ylim(0, 20000)\n", "\n", "ax.legend( (rects1[0], rects2[0], rects3[0], rects4[0]), ('Jellyfish', 'DSK (no threads!)', 'Tallymer', 'khmer (1% fp)'),\n", " loc='upper left')\n", "\n", "def autolabel(rects):\n", " # attach some text labels\n", " for rect in rects:\n", " height = rect.get_height()\n", " ax.text(rect.get_x()+rect.get_width()/2., 1.05*height, '%d'%int(height),\n", " ha='center', va='bottom')\n", "\n", "autolabel(rects1)\n", "autolabel(rects2)\n", "autolabel(rects3)\n", "autolabel(rects4)\n", "\n", "#plt.show()\n", "savefig('../execublog1/time.png')" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAt0AAAF6CAYAAADFxuQ5AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XlcTenjB/DPTUKrW5FISGkVIhWDypYxWcc2yjohY+wz\nxlr5Gtug7xjLmBlL9sFgjBlFUY2tGLuEyFahlDak9Pz+6Ov8utqNW8nn/Xrd1+vec87znOc53cvn\nnvuc58iEEAJERERERKQ0KhXdACIiIiKiqo6hm4iIiIhIyRi6iYiIiIiUjKGbiIiIiEjJGLqJiIiI\niJSMoZuIiIiISMkYuokqGRsbG4SHh1d0M6iURowYgblz55bLvnx9feHp6Vku+yqN0NBQNGzYsMj1\n3t7eWLBgQTm26P3i4+ODJk2awNHRsaKbUmmV9B4jep8wdBOVM01NTWhpaUFLSwsqKipQV1eXXu/Y\nsQNXrlxBx44dld6OyhbglOXOnTtQUVFBbm6uUuqXyWSQyWRKqbuwfb1P1q5dizlz5pS4XePGjXH0\n6NFyaFHl8eDBA6xevRr//PMPTp8+Xey2o0aNgoqKCm7fvi0te/HiBWbNmgVra2tYW1tj9uzZePHi\nRaHlFy5cKP0bo6WlBXV1dVSrVg3JycnvtE9EVDyGbqJylpGRgfT0dKSnp6NRo0Y4ePCg9HrIkCEV\n3bz3TmnDNO8DVnnJZDKl/X1ycnKUUu+/dfz4cZibm0NXV7fE7W7fvl3gC9eWLVtw9OhRHDp0CH/9\n9ReOHDmCbdu2FVrHrFmzpH9j0tPTMWPGDLi4uJS477dRWY83UWXA0E1UyeQ/6+fr64shQ4Zg/Pjx\nqFu3Ljp27IiEhASsXr0apqamcHV1RWRkpFT2+fPnWL9+Pdq2bYuPPvoIu3fvLjTMBAYGYtGiRfj1\n11+hpaWFVq1aAQCSk5OxZMkSmJmZ4dNPP0VYWFiR7czIyMDChQthZGQEV1dXLF68GB06dJDWJyQk\n4D//+Q9MTU0xaNAgRERESOtGjBiBqVOnYtCgQTAwMMDnn3+OuLi4UpedMmUKBg4cCD09PRw7dgx/\n/vknWrVqBR0dHXTt2hWbN2+Wtn/9q0Ht2rWhpaUl1XX8+HEMHToUTZo0gZ+fH5KSkors64ABA2Bo\naIiGDRti6tSpCmccASA9PR39+vVDvXr1MGPGDDx58gRA4WfZnZ2dsX79egDApk2b8NFHH2H+/Plo\n0KAB3NzccOrUKWnbxMREfP3116hXrx769++PjIyMUrerpGN8//59+Pn5wdTUFPXq1cOiRYukdYcO\nHUKvXr1gbm4Of3//Avt9008//QQTExO0b98ehw4dUmjD66E3z549w+eff47GjRtDT08PnTp1ghAC\nnp6euHfvHtzd3aGlpYVly5YBAM6dO4cRI0agcePGmDt3LuLj46V67969izFjxqBevXr4/PPP4eHh\nIe0nNDQURkZG+PHHH9GsWTOMHj0aT58+xSeffIK6devCzMwM8+bNw+PHjxX+JosWLULXrl1Rp04d\nDB8+HNnZ2Rg3bhzq16+PkSNHIiEhQdp+8eLFaNmyJXR0dGBra4urV68WelyK+jytX78eI0eORERE\nBLS0tODn51do+ZycHEycOBE//PBDgc9xUFAQ+vXrB2NjYzRq1Ah9+/ZFYGBgsX8nIO/LZ0BAAIYP\nH/7W/c/v9Xt89+7dsLGxQdeuXQEU//maNGkSjI2NYWBggLFjx+LixYvSuuzsbKxZswYmJiZwcHDA\ntWvXFPa3fv16ODk5QUdHBxYWFh/cLyT0nhNEVGEaN24sQkJCilzm4+Mj1NTUxMaNG0VSUpLo1auX\nsLS0FJMnTxZJSUniP//5j3B1dZXKTpkyRQwePFjExsaKCxcuCBsbG3H48OFC9+3r6ys8PT0Vlg0b\nNkwMHDhQ3L9/X/z2229CV1dXxMbGFlp+2rRpokePHiI2Nlb88ccfwtDQUHTo0EFa36pVK7Fw4UKR\nkpIiDh48KORyucjIyBBCCDF8+HChra0t9u7dKxITE8Unn3wi5syZU+qyGhoaYvv27SI7O1u8ePFC\nhIaGiitXroicnBwRGBgotLS0xM2bN4UQQty5c0fIZDLx6tUrqf6LFy8KIyMjceTIEZGcnCy+/PJL\n8dlnnxX5d9q4caPIyMgQ8fHxwtPTUwwdOlRa97o9AQEBIi4uTgwePFgMHjxYCCFEbGxsgX07OzuL\n9evXS/WqqakJPz8/kZycLHx8fMRHH30kbdu/f3/h4eEhEhISxKZNm4SGhobC36ykdhV3jG1tbcXU\nqVNFXFycSE9PFxEREUIIIX7//Xdha2srTp06JeLj48XAgQPFrFmzCj0ux44dE9WrVxfe3t7i8ePH\n4ueffxZGRkbS+hEjRoi5c+cKIYRYtWqV+Oyzz0RqaqrIyckRx48fl7Z783OQmZkpNDU1xc8//ywe\nP34sJk6cKDp16iStb926tfjqq69EYmKiWLFihVBTU5P2c+zYMaGqqipGjRolEhISxPPnz8WTJ0/E\n3r17xfPnz0VMTIzo3r27mD17tlRfp06dRKNGjURoaKi4deuWaNKkibC2thYBAQHS527+/PlCCCGu\nXLkizM3NRVxcnBBCiOjoaJGQkFDo8Snu87Rp0yaFv3Vhli5dKiZPniyEEEImk4lbt25J6zZs2CDa\ntm0rbt26JWJiYkSbNm3E5s2bi61PCCHCwsKEpqamyMzMfKv+v+n1e7xPnz7i1q1b4sWLFyV+vrZu\n3SqSk5NFSkqK+Oqrr0T79u2ldT/88INo3bq1uHTpkggPDxfNmjUTDRs2FEIIkZiYKIyMjMSNGzeE\nEELcvXtX4ZgQVXYM3UQVqDSh29bWVlq3detWoaqqKlJSUoQQQjx48EDUrFlTvHjxQuTm5orGjRuL\ne/fuSdv7+/uL8ePHF7pvHx8f4eHhIb3OyckRenp64vr169KyoUOHihUrVhRa3srKSqHtnp6eUoi4\nceOGMDc3V9i+T58+YteuXUKIvEDo7u4urduxY4dwcHAoddn8XzQK4+HhIZYtWyaEKDz4zpo1S3z7\n7bfS66SkJKGvry+ys7OLrVcIIW7evCnkcrlU3/DhwxW+bFy/fl1aX5rQnb+u+Ph4Ub16dZGRkSGy\ns7OFjo6OQqjo0KFDgS9KxbWrqGMcFRUldHV1Fdr12meffSa2bdsmvT5//rywsrIqdJ/Hjh0T1apV\nE4mJiUIIIbKzs4WmpqaIjo4WQiiG7pUrV4pu3bqJqKioAvW8+TnYu3evcHJykl5nZmYKdXV1kZSU\nJB4+fChq1qwpnj9/Lq03NjZWCN0ymUzhc/CmI0eOCBsbG+m1s7OzmDhxovTay8tL2NnZSa+3bdsm\nhf6LFy9KAbWw4/daSZ+njRs3Fhu67927J0xNTUVaWpoQomDoFkKI0aNHC5lMJmQymRg7dmyRdeU3\natQoMXLkSIVlZen/m16/x8PDw6VlZfl8paWlCQ0NDek91KNHD+nzIYQQc+fOlb7IJSUlCT09PXHw\n4EHx8uXLUvWXqDLh8BKiSs7W1lZ6bmBgACMjI9SuXVt6nZWVhSdPniA6Ohr37t2Dra0t5HI55HI5\nfHx8cOLEiVLt59q1a8jKykKzZs2kZa1bt8bff/9dYNu0tDRcu3ZNGpYCAHZ2dtLz4OBgxMbGSu2Q\ny+UICQmR6pLJZGjZsqW0fb169aShD6Up6+DgoNCeq1evYuTIkTA3N4eOjg727NmDS5cuFdnX4OBg\nLFq0SKrf1NQUz549w/nz5wvdftmyZejSpQt0dXVhb2+Pp0+f4u7du1J7WrRoIW3brFkzZGdnF/hZ\nvCjW1tZQUcn7p9jQ0BA5OTl49OgRrl27htzcXJiYmEjb2tnZKQwzKKldRR3jY8eOwcHBQdrvm8fG\n29tbOjYuLi64c+eOwnCM/AwNDaGvrw8AUFVVhb6+vsIwltftHT16NJydnfHJJ5+gefPm0hCbwpw8\neVLh/aSurg4zMzOcPHkSkZGRMDMzQ82aNRWOS34GBgYKM14IITBr1ix06NABtWvXRv/+/REVFaVw\nLPP/DQ0MDBQ+d3Xr1pX6ZGtri2+//RbffPMNGjRogHnz5uHZs2cF+lCWz1NhJk+ejHnz5kFLS0tq\nZ/72jh07FpmZmbh37x7u3r2L5ORkTJgwodg6nz17hj179igMLSlr/4uS/zNZ0udr06ZN6NmzJ+rU\nqQNjY2M8f/4cly9fBgBERkYqvG/z/xujp6eHLVu2wN/fH4aGhpg8eTISExOLbRdRZcLQTVRFmJub\nw8jICFFRUUhJSUFKSgpSU1Nx4cKFQrdXVVVV+E/cwsICNWrUwPXr16VlZ8+eLXQmFW1tbVhYWCiE\n1HPnzknPXV1d0bRpU6kdKSkpSEtLw8qVK6VtRBEXzrm4uJRYtlq1agplpk+fDiMjI4SFhSE1NRX9\n+/eX6n+9bf79ubq6Ys6cOQr7yMzMhL29fYH2REREYMWKFfD390dCQgLOnDmjUJ8QQuEYX79+HdWr\nV4elpSXq1KmD6tWr4+HDhwDyxui+DhclsbCwgIqKCm7duiUt++eff6QL6kpq15vP83NxcUFkZCRe\nvXpVYJ2rqyt+/vnnAsembt26pWp3UdTV1TFz5kzcunULGzZswNSpUxEVFQUg72+Uv63t27fHP//8\nI73OzMzEzZs30a5dO9jb2+PmzZsKM3Xkf+8Bee/t/Hbt2oU///wTGzduRFJSEn777TeIvF9636ov\nQ4cOxalTp3D69GkcPnwYGzduLLBNWT5PhTl69Ci++uorGBoaon79+gAAJycn7Ny5EwDwxx9/YPz4\n8TAyMkLDhg0xfvx47Nu3r9g69+3bJ42nf9fyH/PiPl/379/H1KlTMWvWLNy9exf37t1DrVq1pL9F\n27Zti/x3BQB69OiB4OBgREVFITY2FkuXLn3nfSFSFoZuoipCRUUFgwYNwowZM6SzpLdu3Spyzu/W\nrVsjKioKWVlZAPL+0+zZsyd8fHwQFxeH/fv3IzAwEH369Cm0/Mcff4zly5fj7t27+OuvvxASEiIF\nQnNzc2hqamLZsmV4+PAhsrOzcebMGURHRwMofiYRCwuLMpeNj4+Hvr4+dHR0cODAARw4cEBaZ2Rk\nhLp16+Ls2bPSMk9PT6xbtw6HDx/Gy5cvkZqait27dxfanri4OGhoaKBu3bpISEjAvHnzCmxz/vx5\nbNu2DfHx8Zg/fz7c3NygoqICDQ0NODo64qeffkJycjIWLVqE9PT0IvueX/Xq1dGlSxf4+fnh4cOH\n2Lp1q0K4L6ldxR1jS0tLGBkZ4ZtvvkF8fDzS09OlC3I9PT2xdOlSHD9+HK9evUJiYqLC8SyL/G04\nePAgYmJikJubCw0NDaipqUlnq1u3bq0Qsrt27YqrV69iw4YNePz4MebMmQN7e3vo6emhXr16sLa2\nhq+vL5KSkvD9999LX2qKEh8fj9q1a0NfXx83btzAkiVLim1rccfu7NmziIiIQHZ2NmrVqgVVVVVo\naWkV2K6sn6c33bx5E5cuXcLFixelv/vBgwel8r169cKPP/6IhIQExMXFYe3atejbt2+xdQYEBGDY\nsGGFritt/0ujuM9XYmIihBCoV68e0tPTMWvWLOnfICDv35Uff/wRV65cwfHjxxU+lzdu3MDRo0eR\nlZUFNTU11KhRo9BjT1RZMXQTVWKFzQFd3GtfX1+4uLjA29sburq6GDBgQJGBpFOnTmjWrBmaNGmC\nNm3aAABWrFiBFi1aoFOnTti8eTN2796Nxo0bF1rex8cHTk5OaNeuHZYtW4ZRo0ZBW1tbWr9//35k\nZ2ejc+fOMDQ0xMyZM/Hy5ctS9ausZZcvX45du3bB2NgYO3bswLhx4xTqnTt3LkaPHg25XI7IyEhY\nWVkhICAAu3btgpGREZo3b46goKBC+9mnTx+4urqiZcuWcHd3x6BBgxT2L5PJMGbMGPz222+ws7ND\ngwYNFM7KL168GKdOnULz5s2Rm5uL9u3bK5Qt7jisWbMGdevWRcuWLbFv3z54e3uXqV3F1f3HH3+g\nVq1aaNeuHZo1a4bQ0FAAeWcS58+fj1WrVqFOnTpwcnJSmCHnTcXNHZ6/DTExMejatSt0dHTg5eWF\nBQsWSENnxo0bh4MHD0JXVxcrVqyAhoYGjh49irCwMNjb26NWrVoK0+Ht3r0bSUlJsLa2xuXLl9Gz\nZ0/o6OgU2aZRo0ahQYMGaNasGTw9PTFq1Khij01xxy4tLQ1jxoyBrq4uXFxc0LZtW3h4eBTa/+I+\nTyXN766vr4+6deuibt26MDAwgEwmg76+vvRFZdasWZDL5ejUqRNcXFxgYGCAb775RiqvpaWlMLQs\nLi4OoaGhRYbusrx3iisLoNjPl52dHcaPHw9XV1d07NgRNjY2CkOBxowZg+HDh8Pd3R3Tp0/H5MmT\npfqzsrIwc+ZM1KlTB23atEHt2rUxZcqUIttFVNnIxL/9SktEhLzp65ycnDB16tSKbgp9QIQQMDQ0\nxF9//VVgbDcRUWWitDPd9+/fh4uLC6ytreHs7Izt27cDyJvPtnfv3jA2NkafPn0U5n9duXIlzMzM\nYGVlhePHj0vLr127Bjs7O5iYmGD27NnS8uzsbIwePRqNGjWCs7NziT8xEtG7c/36dVy6dAlZWVnY\ntm0bjhw5gm7dulV0s+gDEB4ejocPH+LJkyeYP38+cnNzGbiJqNJTWuiuXr06/P39cfXqVezZswdz\n5sxBeno61q5dC2NjY9y8eVO6gQEAPH78GGvWrEFISAjWrl2LiRMnSnVNmzYNM2bMwJkzZxAWFiaN\nzdy3bx9SU1Nx7do1uLm5YcGCBcrqDhG9IT09Hf3794eenh5+/fVXbN68GTY2NhXdLPoAXL9+HS1b\ntkSzZs0QHx9f5NAgIqLKRLXkTd5OvXr1UK9ePQB5Y9Osra1x5swZREZGYs6cOahRowZGjRol3QUt\nIiICbm5uMDY2hrGxMYQQyMjIgKamJq5fv45BgwYBAPr164eIiAi0adMGERER8PDwgLq6OsaMGYPu\n3bsrqztE9IY2bdrg5s2bFd0M+gB5eXnBy8uroptBRFQm5XIhZUxMDK5evYq2bdvizJkzsLCwAJA3\nS8HrC3QiIiJgaWkplTE3N0dERARiYmIUpqqysrLC6dOnAUC6IAoAdHV18ejRI4WroImIiIiIKgOl\nnel+LT09HYMGDYK/vz80NTXLNBVRYVdLCyGk5W/Os1pU3cVddU1ERERE9K4UlUeVGrqzs7PRv39/\neHp6onfv3gAAe3t76U52165dk25G4eDggODgYKlsdHQ07O3toaWlhUePHknLo6KipDtfOTg4ICoq\nCubm5khOToaBgQFq1KhRaFs4SUseX19f+Pr6VnQziArge5MqK743qTLj+7NyKe5Er9KGlwghMHr0\naNjY2GDy5MnScgcHB2zYsAHPnz/Hhg0b4OjoCCDvLlRBQUG4d+8eQkNDoaKiIk16b2FhgZ07dyIp\nKQn79u1TCN1bt25FZmYmfvrpJ6kuIiIiIqLKRGmh+8SJE9i6dSuOHj2KVq1aoVWrVggMDIS3tzfu\n3bsHc3NzxMXFSTexMDAwgLe3N1xdXTF+/Hh8//33Ul3Lli3D0qVLYW9vjw4dOkg38ujbty90dHRg\naWmJwMBAzJkzR1ndISIiIiJ6ax/EzXFkMhmHl/xPaGgonJ2dK7oZRAXwvUmVFd+bVJnx/Vm5FJc5\nGbqJiIiIiN6B4jKn0mcvqcx0dXWRkpJS0c2gKkQulyM5Obmim0FERESVzAd9pptnwOld43uKiIjo\nw1VcDiiXm+MQEREREX3IGLqJiIiIiJSMofs917hxYxw9ehRA3gT5np6epSp3/vx59OjRAzo6Ovj9\n99/x8ccfY/PmzSWWU1FRwe3bt/9Vm4mIiOjdGTVqFAwMDNC8eXNp2eDBg6Upm5s0aYJWrVoByLuP\nio+PD9q0aYOWLVvizJkzUpmgoCB0794dlpaW+M9//iMtT0hIwNixY2FjY4Nu3bohKSmp/DpXhTB0\nV1LOzs5Yv359idvlv/NRWW53v3r1ajg6OiI1NRW9e/fGX3/9hWHDhr1VW4mIiKjijBw5EoGBgQrL\ndu7cifPnz+P8+fPo378/+vfvDwA4cuQILl26hFOnTmH//v2YNGkSACA3NxdffvklfvnlF1y8eBFn\nz57F5cuXAQA//PADzMzMcOXKFYwcORKLFi0q3w5WEQzd+ehqa0MmkyntoautXeq2vC5TFmW5gO/E\niRNo165dmeonIiKiyqdDhw6Qy+WFrhNCYNeuXRgyZAgA4OjRo3Bzc0P16tXRuHFjyGQyZGZm4vr1\n69DT00PDhg2hpqYGNzc3nDhxQirTq1cvAECvXr1w6tSp8ulYFcPQnU9KejoEoLRHSnr6W7Xr0qVL\nGDduHIyNjTFt2jTcu3evyG1fB/WePXti1apVCutsbW2xf/9+mJqa4saNG+jduze0tbXx8uVLhTPr\nCQkJGDp0KOrXr486depg8ODBCvWcOnUKLVu2hKmpKfz9/d+qT0RERKR8f//9NwwMDNC0aVMAQPfu\n3bF37148ffoU//zzD86cOYPIyEhYWlriyZMnuHDhAlJSUrBnzx4pXHfv3h0BAQF4+fIlNm7ciH/+\n+QcvX76syG69lxi6K7knT57A2dkZPXr0wJUrV6Cvry99Wy3M67PdI0aMwNatW6XlFy9eRHx8PD75\n5BPExMTA2NgYBw8eRFpaGtTU1BTOrK9YsQINGjTArVu3EBcXh4kTJyrsY8OGDdi5cyd27doFHx8f\n3Lp1Swk9JyIion9rx44d+Oyzz6TXzs7OcHNzQ8+ePeHn5wd7e3vUqFEDALB+/XosWLAA3bt3R5Mm\nTaTlX375JXJycuDo6IgbN25AT0+vzL/GE0N3pSaEwN69e/Hpp59KZ6W//vprxMTE4PHjx8WWdXd3\nx40bN6RAvGXLFgwePBiqqiXfDyk3NxcJCQl4/Pgx1NTUCgxD+eKLL2BhYQE7Ozu0a9cOR44ceftO\nEhERkVLk5ORg3759GDRokLRMJpNhypQpOHHiBA4cOIAnT57A0dERQN4wlT179iAyMhL6+vpwc3MD\nAOjr62PJkiU4d+4cvL290bp1a1SvXr1C+vQ+Y+iu5EJCQrBt2zbI5XLI5XLo6+sjMzMT4eHhxZar\nWbMmBg4ciC1btkAIgZ07d5Z6ZpNZs2bByMgITk5OaNeuHfbv36+wvmXLltJzQ0NDxMXFlb1jRERE\npFTBwcGwtLRE/fr1pWXPnz9HZmYmcnJysGbNGjRv3hwqKnlx8PUJvbNnz+LAgQPo3LkzgLxf3XNz\nc5GSkoLvvvtOCuNUNh/0beDfBy4uLpDL5Vi7dm2Zyw4fPhzDhg1D+/btoa6uDgcHh1KV09PTw6JF\ni7Bo0SIEBgaif//+ePDgQZEXafAnJiIiooozZMgQhIWF4cmTJ2jYsCHmz5+PkSNH4tdffy0wJPXx\n48fo3r07Xr16BUtLS4WZ0iZPnozz58+jWrVq+O6776CjowMACA0NxcyZMyGEwCeffIJx48aVa/+q\nCobuSkwmk2HQoEGYN28eunfvjq5duwLIe/N36tQJmpqaxZZ3cnKCTCbD9OnTyzQd4O7du+Hk5IT6\n9etDQ0MDGhoaqFatWqHbCiF423MiIqIKtGPHjkKXb9y4scCyRo0aITo6utDtt2/fXujy/FMO0tvj\n8JJKTEVFBbVr10ZQUBCOHTuGZs2awczMDJs3by707HJh0wwOGzYMly9fhoeHR6n3e/bsWTg6OkIu\nl8PX1xdr166F9v+mO3yz/reZ2pCIiIjoQyMTH8BpSplMVujZ2DeXy2QyKPNgyFD6ubSbNGmCPXv2\noHXr1v9qn5s3b8Yvv/xS4hhwejeKeq8RERFR1VdcDuCZ7nzkWlqQAUp7yLW0StWO4OBgJCcnS7ds\nfVvPnj2Dv78/vvrqq39VDxERERH9OxzTnU9yWlpFNwFff/01IiMjERAQIF1N/DaCgoIwaNAg9O/f\nH+7u7u+whURERERUVhxeUvW7T+WI7ykiIqIPF4eXEBERERFVIIZuIiIiIiIlY+gmIiIiIlIyhm4i\nIiIiIiVj6CYiIiIiUjKGbgIAxMbGwtbWtlz2tWnTJnTo0KFc9lWYxo0bIyQkpMzldu3ahZEjRyqh\nRURERFTVMXRXQo0bN4a6ujq0tbXRqFEjuLq6Ys+ePQrbPHr0CN988w1sbGygo6OD5s2bIyAgAABw\n584dqKioIDc3F0DeXTC//PJLWFpaIiEhodB9Ll26FN7e3u+8L2+2pTIo7a3rfX194enpKb3u168f\nQkND8eDBA2U2j4iIiKoghu585HJtKZAp4yGXa5eqHTKZDAcPHkRaWhp+++03ODo6YvLkyZg+fbq0\nzeLFixEfH4/AwECkpKRgy5YtMDAwKFBXbm4uxo4di/DwcISHh8PQ0LDANo8fP8aePXswbNiwtz94\nJXjbuauFEBU27/WbwVxVVRXDhw+Hv79/hbSHiIiI3l+8I2U+T5+m49gx5dXv4pJe5jJt2rRBmzZt\n0LRpU4wdOxbjxo2Dqakpdu3ahZ07d8LIyAgA0LJlywJlc3Jy4OXlhatXryI0NBRyubzQfZw4cQJN\nmzaFhoaGtKxx48b45ptvEBAQgLi4OIwaNQqzZ89G9erVAQChoaH44YcfcOnSJXh5ecHLy6vQ+jt2\n7AgAqF27NmQyGQ4fPiyF2fnz52PdunVo3rw5fHx84OTkBABwdnZGt27dEBoaitOnT+PChQuoVasW\nfvnlFwQEBKB169aYOnUqHBwcAAB//vkn5syZg9u3b6Nt27bw9PRU+AJx6tQp+Pj44MaNG5g2bZpC\n+6KiojBnzhwcP34cKioqGDp0KJYvXw6g8C8Kjo6OmDlzZqHHkYiIiKgoPNP9nujduzdkMhn++ecf\nAED37t0xZcoUBAQEFDnc4bPPPsPNmzdx9OjRIgM3AERHR8PU1FRhmUwmw48//oiVK1ciJCQEAQEB\nCA8PB5A3/rtv374YMmQIQkNDce7cOUyZMqXQuv/++28AQGpqKtLS0uDo6AghBCIjIwEAV65cgaOj\nI77++mt4uTmcAAAgAElEQVSFcqtXr8akSZOQnJyMhg0bomfPnlBVVcXZs2cxbNgw9OjRA5mZmQAA\nTU1NbN26FcnJyZg+fTomTJiAmJgYAMDTp0/RpUsXeHh44OTJk4iIiEBcXJy0Hx8fH7i4uCAuLg63\nb9/GwIEDFY7Bm5o2bYrr168XeSyJiIjKk3Zt5f5KX5qHdu3S/ZL/oeOZ7veEvr4+LCwscP/+fQDA\nypUrsWnTJqxYsQJeXl5wd3eHn58fbGxspDLBwcGYN28etLWL/zA8ePCg0GEnw4YNg729PYC8kH/k\nyBF07twZ+/fvR48ePfDpp58CABYsWABHR0fk5uZCRUXxe1xRQ0M0NDQwZ84cqKioYOzYsVi4cCEy\nMzOhoaEBmUwGNzc39OzZEwBw8+ZNPHv2TDrD3LNnT3Tq1Al//fUXBgwYgE6dOkn1du/eHb1798bv\nv/+OadOm4fDhw2jdurV05nv+/PnYvn27tH1ubi7u3buH5ORkGBgYSGfPi2q7kZERXrx4gUePHhU6\nnIeIiKg8paemA74V3Abfsv+S/yHime73RGJiIqKjo9GwYUMAeWd3J0yYgIsXL0pndcePH69Q5uDB\ng/Dz88PGjRuLrbtRo0aIj48vsDz/kJV69epJZ4hPnjyJ1q1bS+tMTU2Rk5ODq1evlro/1tbWUkA3\nNDRETk4OHj16JK3PH36Dg4MRGxsLuVwuPUJCQqSz6FevXsXIkSNhbm4OHR0d7NmzB5cuXQIARERE\noEWLFlJdJiYm0NHRkV77+/vj2bNnsLGxgZubG8LCwqR1hV1w+eDBA9SsWZOBm4iIiMqEofs9ceDA\nAQghYGdnV2CdsbExpkyZgoiICGRlZUnL27Vrhz/++AOTJk3Cjh07iqzb0tISt27dKnVb2rdvj7Nn\nz0qvb968iWrVqsHa2rrAttWqVQNQ9gspVVX//0cYV1dXNG3aFCkpKdIjLS0NK1euBABMnz4dRkZG\nCAsLQ2pqKvr37y/tz8HBARcuXJDqunXrFlJTU6XXxsbGWL16NR4+fIiBAwdiyJAh0kwrPj4+2Lx5\ns0K7YmJi0KxZszL1hYiIiIihu5J6HRrPnTuHuXPnws/PDxMnToSZmRkAYMaMGbh69SpycnJw+/Zt\nrFy5EgMGDECNGjUU6unYsSP27t2LMWPGYO/evYXuy9HREbGxsdIY6ZL06tULQUFB2Lt3L+Li4uDj\n4wN3d/cCQ0uAvOEYdevWVQjppZE/pJubm0NTUxPLli3Dw4cPkZ2djTNnziA6OhoAEB8fD319fejo\n6ODAgQM4cOCAVLZbt244d+4ctm3bhvj4ePj5+SkE+q1btyIxMRFCCGhoaEBTU7PYdkVERKBz585l\n6gsRERERQ3cl5e7uDm1tbfTp0wfHjx/HsmXLsGLFCmn98+fP0bdvX8jlcvTt2xcNGzbEggULpPX5\nh0V06dIFv/76K4YPH44///yzwL7q1KmDAQMGSPN8Fyb/UAsTExPs3r0bW7ZsQadOnWBra6vQtjfL\nzZ07F6NHj4ZcLkdEREShwzZKer1//35kZ2ejc+fOMDQ0xMyZM/Hy5UsAwPLly7Fr1y4YGxtjx44d\nGDdunFSudu3aCAoKwsaNG+Hk5IS2bdtKM74AQFBQEGxsbGBgYICtW7fip59+kr48LFq0CF5eXtK2\nOTk52Lx5M6ZOnVrkcSIiIiIqjExU1CTI5UgmkxU6vOHN5TKZTMlTBr79fNXKdvfuXbi7u0tjoamg\n3bt349ChQ9iwYUOR2xT1XiMiIlIGmUxW4RdSwrfy5pvyVlwOYOjOt1wu18bTp8q7Ard2bS2kpKQp\nrX6qeAzdRERUnhi6K5ficgCnDMyHgZiIiIiIlIFjuomIiIiIlIyhm4iIiIhIyRi6iYiIiIiUjKGb\niIiIiEjJGLqJiIiIiJSMoZuIiIiISMkYuqsIFRUV3L59GwAwYsQIzJ07t4JbRERERESvMXRXMpqa\nmtDS0oKWlhZUVFSgrq4uvd6xY0ep6ijsNutEREREVHF4c5x8tGtrIz1VeXek1NLRQtrT4m/Ak5GR\nIT1v0qQJ1q9fD1dX1zLvq6LvDJWTkwNVVb69iIiIiACGbgXpqelKvZVquu/bB/rIyEhMmjQJ0dHR\nsLCwwNChQzFu3Lgig+3rM902NjZYvHgxPvnkEwBAdnY2DA0NERISAh0dHZiYmGDXrl2YM2cOsrKy\nsHDhQrRs2RJeXl6Ii4vD5MmTMWnSJKne48ePY+3atTh58iRGjBiBL774Avr6+gDyhrhs2rQJ/v7+\nSE9PR0xMzFv3l4iIiKgq4fCS94Sqqiq+//57JCUlYfny5Vi2bBlCQ0NLLDd8+HBs3bpVev3XX3+h\nQYMGaNGihbRs3759OHr0KHx8fODl5YWvvvoKq1evxu+//4558+bh/v37AIBLly5hyJAhGDlyJM6d\nO4cnT54oBHIA+OWXX7Bp0yZcvXr13XSciIiIqApg6H5P2NnZoW3btqhWrRratWsHDw8P/P7770Vu\n/3p4ydChQ/Hnn39Kw1a2bNkCT09PhW2nT5+O+vXrw8PDA0IIdO/eHS1atICtrS0cHBwQEhICAPj1\n11/h7e2NLl26QC6Xw8fHB4cPH8arV6+kury8vNCiRQvUqFHjXR8CIiIiovcWQ/d7Ii4uDuPGjYOt\nrS20tbXh7++PS5culViufv36aN++Pfbs2YOnT58iMDAQQ4cOVdjm9VlvVVVV6OrqKpwFNzAwQHx8\nPAAgODgYixYtglwuh1wuh6mpKZ49e4Zz585J2zs4OLyL7hIRERFVKRzT/Z5YsGABsrOzpeEhc+fO\nRVhYWKnKDh8+HOvXr0d2djbatWsHQ0PDt2qDq6sr+vXrhxkzZhS5DS+eJCIiIiqIZ7rfE/Hx8dDV\n1YWenh5CQ0OxefPmIrd9c+aSvn374ty5c1i5ciWGDRtW5n2/rs/T0xPr1q3D4cOH8fLlS6SmpmL3\n7t1lro+IiIjoQ8PQ/Z7w9fXFhQsXYGRkhO+++w4TJkxQmIv7zef5X9esWRP9+vXDnTt30K9fP4V6\nSzOf9+ttrKysEBAQgF27dsHIyAjNmzdHUFBQmeoiIiIi+hDJREVP6FwOZDJZofNWv7lcJpMpdcpA\n+Fbc/Nnz589HTExMsWfI6d8r6r1GRESkDErPLqXhW/H3B6ksissBHICbj5aO1r+aS7s09VeEJ0+e\nYN26dTh06FCF7J+IiIjoQ8fhJfmkPU2DEEJpj5LuRqkMP//8M8zNzTFq1CjY2tqW+/6JiIiIiMNL\n+HMIvVN8TxERUXni8JLKpbgcwDPdRERERERKxtBNRERERKRkDN1ERERERErG0E1EREREpGQM3URE\nRERESsbQXQk1btwYISEhZV5XEXJzc2FlZYW4uDil7yslJQUjRoxAnTp18NVXX5W4fYsWLXD79m2l\nt4uIiIioJAzdldCbt3Ev7bqKsHv3bjRv3hwNGjQAABw7dgwuLi6oXbs2mjRpUmD7GTNmoFGjRhg/\nfjyeP38uLV+4cCH8/f2L3deff/6JhIQExMXF4bvvviuxbWPHji3VdkRERETKxtCdj7a2rhRqlfHQ\n1tat6C6+tZycnEKXL1myBOPHj5dea2pq4vPPPy807EZERODq1as4f/48YmNjpTtkxsbG4o8//sCk\nSZOKbcPx48fRpk0bqKmplarNnp6e2LNnD5KSkkq1PREREZGyMHTnk56eAkAo7ZFXf9lcu3YNJiYm\n+PXXX6VlN27cgJOTE4yNjeHr64vs7GwAQGhoKIyMjPDjjz+iSZMmsLKywtGjRxEeHg57e3tYWlpi\n+/btCvUfOnQIvXr1grm5Ofz9/ZGRkQEAuHPnDlRUVLB7927Y2Niga9euBdqWkpKCixcvwsHBQVpm\nb2+PoUOHFnqW++zZs+jatSt0dXXRrVs3nD59GgAwceJErFixAioqRb8dR4wYgQ0bNmDZsmXQ1tZG\nSEgIfH19MXjwYHh5eaFevXoYO3Ys7t+/L5XR0tJC06ZNceLEidIcaiIiIiKlYeiuxM6dOwc3Nzes\nWrUKgwYNApB3x6e1a9di5cqVCAkJQUBAAMLDw6Uyjx8/RlRUFM6ePYvPPvsMQ4cOxffff4+dO3di\nzZo1GDNmjBTSDxw4gG+++QazZs1CaGgoTp8+jUWLFim0Yfv27Thw4AACAwMLtC86Ohr16tVDzZo1\nS9WfTp06ISgoCI8ePcKRI0fg6uqKffv2oW7dunByciq27KZNmzB06FDMmDEDaWlp6Ny5MwBg7969\nsLCwwOXLl1GrVi0MHDhQoZypqSmioqJK1T4iIiIiZWHorqTCwsLQu3dvbNmyBR9//LG0XCaTYfjw\n4bC3t4eZmRm6d++OI0eOSOtzc3Ph4+MDPT09jBw5Eo8ePcKIESPQtGlTuLi4oH79+jh58iQA4Ndf\nf8WMGTPg6OgIQ0NDzJw5E/v371dox9SpU2FiYoIaNWoUaOP9+/dRv379UvfJxsYGvXr1woABA9Cx\nY0c4ODhg/vz5WLp0KdatW4du3bph+fLlRQ5lAQreZtbQ0BDTpk1DnTp18O233+LChQtITEyU1hsZ\nGeHu3bulbiMRERGRMjB0V0JCCKxbtw7t27dHx44dC6xv2bKl9NzQ0FBh5hBDQ0Po6ekBAAwMDADk\nzeLxmoGBgbR9cHAwvL29IZfLIZfL4eLigjt37uDx48fS9vmHjrypUaNGiI+PL1Pfxo0bh/DwcHzz\nzTdYuHAhvL298ejRI2zZsgUHDhzA6dOnERwcXOr6bG1tpecaGhpo2rQpIiMjpWX3799H48aNy9RG\nIiIioneNobsSkslkWLduHe7evYupU6cWu+2bZ37LwtXVFT///DNSUlKkR2ZmJurWrStto6qqWmR5\nS0tLPHz4EFlZWWXe9+XLl3Hq1CmMGTMGx44dQ9u2bVGzZk189NFHOHr0aKnruXjxovQ8IyMDt27d\nUviicOvWLVhaWpa5fURERETvEkN3JaWlpYXAwECEh4dj5syZStmHp6cnli5diuPHj+PVq1dITEzE\ngQMHSl1eW1sbdnZ20gWRQN6XgBcvXiA7OxtCCGRlZeHly5cK5YQQ+PLLL/HDDz8AyLv4Mjw8HI8e\nPUJwcHCR47sL+4Lx8OFD+Pv7IzExEfPmzUOrVq2gr68P4P9DeLt27UrdJyIiIiJlYOiuxHR0dHDk\nyBEcOnQIPj4+hW7z5rzdb87hXdyc3j169MD8+fOxatUq1KlTB05OTgpDM0ozH/iMGTOwevVq6XVY\nWBjU1dXRs2dP3L9/H7Vq1YKbm5tCmU2bNqF58+Zo1aoVAKBt27bo0qUL2rZtC2Nj4wLbF9fX/v37\nIyoqCjY2NsjIyMDOnTul9Zs3b8aAAQNQp06dEvtBREREpEwy8W/GJ7wnZDJZoWdJ31yeF+iUeTgK\nb8f7LDc3F7a2tggKCpJukFNe/Pz8EBMTgy1bthS6vkWLFti/f3+h0xcqS1HvNSIiImWQyWSAbwU3\nwvffDXetSorLAUUP2P0AaWnJkZ6uvLs9amnJlVZ3RVFRUcGVK1cqZN8lfcDzj/cmIiIiqkhKG14y\natQoGBgYoHnz5tIyX19fGBkZoVWrVmjVqpV0R0IAWLlyJczMzGBlZYXjx49Ly69duwY7OzuYmJhg\n9uzZ0vLs7GyMHj0ajRo1grOzMx4+fPiv25yWlgwhhNIeaWnJ/7qN9P/eHG5CREREVFkpLXSPHDmy\nwA1VZDIZpk6divPnz+P8+fPo0aMHgLwbuqxZswYhISFYu3YtJk6cKJWZNm0aZsyYgTNnziAsLAxn\nz54FAOzbtw+pqam4du0a3NzcsGDBAmV1hSopHx8fbN68uaKbQURERFQipYXuDh06QC4vOJyisCEB\nERERcHNzg7GxMTp16gQhhHQ78uvXr2PQoEHQ09NDv379EBERIZXx8PCAuro6xowZIy0nIiIiIqps\nyn32kh9++AGOjo5YsmQJ0tPTAQCRkZEKcymbm5sjIiICMTExCnNGW1lZSdPTRUZGwsrKCgCgq6uL\nR48evdV80UREREREylauodvb2xuxsbEICgrCrVu3sG7dOgCFn/0ubKyuEEJa/nqcdP51RERERESV\nUbnOXvL6rLWOjg6++OILjB8/HtOnT4eDg4PCrb+jo6Nhb28PLS0tPHr0SFoeFRUl3W3QwcEBUVFR\nMDc3R3JyMgwMDFCjRo0i9+3r6ys9d3Z2hrOz87vtHBERERF9UEJDQxEaGlqqbcs1dCckJMDQ0BA5\nOTnYvn07Pv74YwB5N0f56quvcO/ePdy+fRsqKirQ0tICAFhYWGDnzp3o0qUL9u3bh//+978A8kL3\n1q1b0a1bN/z0009wdHQsdt/5QzcRERER0b/15olcPz+/IrdVWugeMmQIwsLCkJSUhIYNG8LPzw+h\noaG4cOEC1NTU0LFjR3h7ewMADAwM4O3tDVdXV6ipqUnDTgBg2bJl8PDwwMyZMzF48GC0adMGANC3\nb18EBgbC0tISJiYmCnciLC25XM4p5+idKuziYSIiIqIP+o6URERERO8z3pGycikuc5b77CVERERE\nRB8ahm4iIiIiIiVj6CYiIiIiUjKGbiIiIiIiJWPoJiIiIiJSMoZuIiIiIiIlY+gmIiIiIlIyhm4i\nIiIiIiVj6CYiIiIiUjKGbiIiIiIiJWPoJiIiIiJSMoZuIiIiIiIlY+gmIiIiIlIyhm4iIiIiIiVj\n6CYiIiIiUjKGbiIiIiIiJWPoJiIiIiJSMoZuIiIiIiIlY+gmIiIiIlIyhm4iIiIiIiVj6CYiIiIi\nUjKGbiIiIiIiJWPoJiIiIiJSMoZuIiIiIiIlY+gmIiIiIlIyhm4iIiIiIiVj6CYiIiIiUjKGbiIi\nIiIiJWPoJiIiIiJSMoZuIiIiIiIlY+gmIiIiIlIyhm4iIiIiIiVj6CYiIiIiUjKGbiIiIiIiJWPo\nJiIiIiJSMoZuIiIiIiIlY+gmIiIiIlIyhm4iIiIiIiVj6CYiIiIiUjKGbiIiIiIiJWPoJiIiIiJS\nMoZuIiIiIiIlY+gmIiIiIlIyhm4iIiIiIiVj6CYiIiIiUjKGbiIiIiIiJWPoJiIiIiJSMoZuIiIi\nIiIlY+gmIiIiIlIyhm4iIiIiIiVj6CYiIiIiUjKGbiIiIiIiJWPoJiIiIiJSMoZuIiIiIiIlY+gm\nIiIiIlIyhm4iIiIiIiVj6CYiIiIiUjKGbiIiIiIiJWPoJiIiIiJSMoZuIiIiIiIlUy1upRACR44c\n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\nRERExMr+FyyQFOAib00xAAAAAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 18 }, { "cell_type": "code", "collapsed": false, "input": [ "def _get_time_all(filename):\n", " for line in open(filename):\n", " line = line.rstrip()\n", " if 'system' in line:\n", " fields1 = line.split('user')\n", " user = float(fields1[0])\n", " fields1b = line.split('system')[0].split()[-1]\n", " system = float(fields1b)\n", " \n", " walltime = line.split('elapsed')[0].split()[-1].rsplit(':')\n", " assert len(walltime) <= 3\n", " hours = 0.\n", " minutes = 0.\n", " seconds = walltime[-1]\n", " if len(walltime) == 3:\n", " hours = float(walltime[0])\n", " minutes = float(walltime[1])\n", " elif len(walltime) == 2:\n", " minutes = float(walltime[0])\n", " \n", " wall_seconds = hours*60*60 + minutes*60 + float(walltime[1])\n", " \n", " return float(system), float(user), float(wall_seconds)\n", " raise Exception(filename)\n", " \n", "def get_time_all(*filenames):\n", " aa, bb, cc = 0., 0., 0.\n", " for filename in filenames:\n", " a, b, c = _get_time_all(filename)\n", " aa += a\n", " bb += b\n", " cc += c\n", " return aa, bb, cc" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 19 }, { "cell_type": "code", "collapsed": false, "input": [ "jelly2 = {}\n", "khmer2 = {}\n", "dsk2 = {}\n", "tally2 = {}\n", "\n", "for datadir in datadirs:\n", " tally2[datadir] = get_time_all(datadir + 'mkindex_5_part1_22.time',\n", " datadir + 'suffix_5_part1.time')\n", " jelly2[datadir] = get_time_all(datadir + 'jelly_5_22.time1', datadir + 'jelly_5_22.time2')\n", " khmer2[datadir] = get_time_all(datadir + 'bloom_5_1_22.time1')\n", " dsk2[datadir] = get_time_all(datadir + 'dsk_5_22.time')\n", "\n", "def get_wall_ratio(triple):\n", " return triple[1] / triple[2]\n", "\n", "def get_sys_ratio(triple):\n", " return triple[0] / triple[2]\n", "\n", "jelly_sysr = {}\n", "khmer_sysr = {}\n", "dsk_sysr = {}\n", "tally_sysr = {}\n", "\n", "jelly_wallr = {}\n", "khmer_wallr = {}\n", "dsk_wallr = {}\n", "tally_wallr = {}\n", "\n", "for datadir in datadirs:\n", " jelly_sysr[datadir] = get_sys_ratio(jelly2[datadir])\n", " jelly_wallr[datadir] = get_wall_ratio(jelly2[datadir])\n", " \n", " khmer_sysr[datadir] = get_sys_ratio(khmer2[datadir])\n", " khmer_wallr[datadir] = get_wall_ratio(khmer2[datadir])\n", " \n", " dsk_sysr[datadir] = get_sys_ratio(dsk2[datadir])\n", " dsk_wallr[datadir] = get_wall_ratio(dsk2[datadir])\n", " \n", " tally_sysr[datadir] = get_sys_ratio(tally2[datadir])\n", " tally_wallr[datadir] = get_wall_ratio(tally2[datadir])\n", " \n", "print 'jelly', jelly_sysr\n", "print 'dsk', dsk_sysr\n", "print 'tally', tally_sysr\n", "print 'khmer', khmer_sysr\n", "\n", "print jelly2\n", "print khmer2\n", "print dsk2\n", "print tally2\n", "\n", "print jelly_wallr\n", "print dsk_wallr\n", "print tally_wallr\n", "print khmer_wallr" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "jelly {'../execublog1/data-athyra/': 0.09575842592934403, '../execublog1/data-ec2-i1/': 0.08374232268558766, '../execublog1/data-ec2-i3/': 0.17181712082001319, '../execublog1/data-ec2-i2/': 0.006756289314333227}\n", "dsk {'../execublog1/data-athyra/': 0.4910751085888208, '../execublog1/data-ec2-i1/': 0.21867961191159763, '../execublog1/data-ec2-i3/': 0.23135240743626317, '../execublog1/data-ec2-i2/': 0.036559128630705394}\n", "tally {'../execublog1/data-athyra/': 0.015849034493726512, '../execublog1/data-ec2-i1/': 0.05362553154531455, '../execublog1/data-ec2-i3/': 0.05306034072376927, '../execublog1/data-ec2-i2/': 0.014740818934385244}\n", "khmer {'../execublog1/data-athyra/': 0.07356856694951104, '../execublog1/data-ec2-i1/': 0.2201074347015659, '../execublog1/data-ec2-i3/': 0.4807248540790009, '../execublog1/data-ec2-i2/': 0.18518165852007026}\n", "{'../execublog1/data-athyra/': (25.94, 2085.48, 270.89), '../execublog1/data-ec2-i1/': (59.72, 1475.93, 713.1400000000001), '../execublog1/data-ec2-i3/': (67.72, 1921.76, 394.14), '../execublog1/data-ec2-i2/': (51.76, 1812.48, 7661.01)}\n", "{'../execublog1/data-athyra/': (59.13, 6267.23, 803.74), '../execublog1/data-ec2-i1/': (279.86, 4636.07, 1271.47), '../execublog1/data-ec2-i3/': (354.15, 5222.75, 736.7), '../execublog1/data-ec2-i2/': (350.06, 5783.4, 1890.36)}\n", "{'../execublog1/data-athyra/': (154.89, 1840.55, 315.41), '../execublog1/data-ec2-i1/': (325.24, 1099.45, 1487.29), '../execublog1/data-ec2-i3/': (386.03, 1265.75, 1668.58), '../execublog1/data-ec2-i2/': (352.43, 1356.46, 9640.0)}\n", "{'../execublog1/data-athyra/': (75.74000000000001, 4650.01, 4778.84), '../execublog1/data-ec2-i1/': (321.07, 5015.89, 5987.26), '../execublog1/data-ec2-i3/': (345.53, 5738.29, 6512.02), '../execublog1/data-ec2-i2/': (265.32, 6730.02, 17999.0)}\n", "{'../execublog1/data-athyra/': 7.698623057329544, '../execublog1/data-ec2-i1/': 2.0696216731637547, '../execublog1/data-ec2-i3/': 4.875830923022276, '../execublog1/data-ec2-i2/': 0.23658499336249397}\n", "{'../execublog1/data-athyra/': 5.835420563710725, '../execublog1/data-ec2-i1/': 0.7392304123607367, '../execublog1/data-ec2-i3/': 0.7585791511344976, '../execublog1/data-ec2-i2/': 0.14071161825726142}\n", "{'../execublog1/data-athyra/': 0.9730415749428731, '../execublog1/data-ec2-i1/': 0.8377605114860555, '../execublog1/data-ec2-i3/': 0.8811843329719503, '../execublog1/data-ec2-i2/': 0.3739107728207123}\n", "{'../execublog1/data-athyra/': 7.7975837957548455, '../execublog1/data-ec2-i1/': 3.646228381322406, '../execublog1/data-ec2-i3/': 7.089385095697027, '../execublog1/data-ec2-i2/': 3.059417253856408}\n" ] } ], "prompt_number": 20 }, { "cell_type": "code", "collapsed": false, "input": [ "jelly_w = []\n", "dsk_w = []\n", "khmer_w = []\n", "tally_w = []\n", "labels = []\n", "\n", "for _, label, dirname in sorted(zip(order, names, datadirs)):\n", " print dirname\n", " labels.append(label)\n", " jelly_w.append(jelly_wallr[dirname])\n", " dsk_w.append(dsk_wallr[dirname])\n", " khmer_w.append(khmer_wallr[dirname])\n", " tally_w.append(tally_wallr[dirname])\n", " " ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "../execublog1/data-athyra/\n", "../execublog1/data-ec2-i1/\n", "../execublog1/data-ec2-i3/\n", "../execublog1/data-ec2-i2/\n" ] } ], "prompt_number": 21 }, { "cell_type": "code", "collapsed": false, "input": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "N = 5\n", "\n", "ind = np.arange(4) # the x locations for the groups\n", "width = 0.2 # the width of the bars\n", "\n", "fig = plt.figure()\n", "ax = fig.add_subplot(111)\n", "rects1 = ax.bar(ind, jelly_w, width, color='r')\n", "rects2 = ax.bar(ind+width, dsk_w, width, color='y')\n", "rects3 = ax.bar(ind+2*width, tally_w, width, color='g')\n", "rects4 = ax.bar(ind+3*width, khmer_w, width, color='b')\n", "\n", "\n", "# add some\n", "ax.set_ylabel('Time (s)')\n", "ax.set_title('ratio of usertime to walltime')\n", "ax.set_xticks(ind+2*width)\n", "ax.set_xticklabels(labels)\n", "ax.set_ylim(0, 10)\n", "\n", "ax.legend( (rects1[0], rects2[0], rects3[0], rects4[0]), ('Jellyfish', 'DSK (no threads!)', 'Tallymer', 'khmer (1% fp)'),\n", " loc='upper right')\n", "\n", "def autolabel(rects):\n", " # attach some text labels\n", " for rect in rects:\n", " height = rect.get_height()\n", " ax.text(rect.get_x()+rect.get_width()/2., 1.05*height, '%1.2f'%(height + 0.005),\n", " ha='center', va='bottom')\n", "\n", "autolabel(rects1)\n", "autolabel(rects2)\n", "autolabel(rects3)\n", "autolabel(rects4)\n", "\n", "#plt.show()\n", "savefig('../execublog1/usertime_ratio.png')" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAskAAAF6CAYAAADrg8WrAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XlYlPX+//HXIKWggIOS4BYqprgjCriiZJkZmqkluWem\nlCeXbLFjoZ5+eUrTo2nG8bS4m5YprigqkhtkWppL5kK5b5Ag5Abz+8OvkzPsKjOjPR/XNdfF3Ov7\nvhlvX3zmc39ug8lkMgkAAACAmZO9CwAAAAAcDSEZAAAAsEJIBgAAAKwQkgEAAAArhGQAAADACiEZ\nAAAAsEJIBnDPioyM1HvvvXfXt5ucnKzu3bvLaDRq2rRpd337d6K4jtlROTk56ciRI5Kkfv366Z13\n3slz2fHjx2vgwIG2Kg3Afc7Z3gUAQGF8+eWX+uyzz/Tdd9+Zp82YMaNY9jV37lx5eHjowoULcnKy\nX1uCLY/ZWnx8vHr37q1jx47ZZH+FYTAYZDAYJOVe36hRo+xVGoD7EC3JAOzu+vXr9i7BwubNmxUc\nHGzXgOxo58RR8PwrALZCSAZgF76+vvrkk0/UvHlzlS1bVllZWfr3v/8tPz8/lStXTj179jS3oO7f\nv1+RkZHatm2b3Nzc5OnpKSnn1+/x8fHq2rWratasqQ8//FCpqal57n/nzp3q16+ffH199c477+jk\nyZOSpLCwMMXFxenVV1+Vu7u7Dh06lGvt69evN78fM2aMevfuLelGiBsxYoRq164to9GooKAgnT17\nVpL0559/6rPPPlNQUJBatmypxYsXm0Pfl19+qZYtWyoqKkoPP/ywevToUeAxx8fHq3Llyvr0009V\nrVo11alTRxs2bFBCQoKaNm0qf39/zZ8/36L21atXq1OnTqpVq5YmT56sS5cu5Ti+jIwMdejQQSdP\nnpSbm5vc3d11+vRpXb9+XXPnzlVISIiaNWumefPm5RnmH374Ye3cuVOSNG/ePDk5OWn//v2SpM8+\n+0xdunSRJCUlJalZs2YyGo1q1qyZpk2blu8fCAaDQZmZmTnqO3XqlMXvITk5WU5OTvr6669Vu3Zt\nVatWTQsWLND+/fvVsmVLVatWTVOmTLHY9ubNm9WzZ09Vq1ZNY8eO1fnz5/OsA8D9j5AMwC4MBoOm\nT5+uDz74QBcuXFCJEiXk5+enzZs36/jx42rSpImef/55SZK/v78+/fRTNWvWTOnp6UpJSTFv4+bX\n70ePHlWXLl0UERGh+Ph47dy5U8OHD89135mZmQoNDVXLli31/fffKy0tzbyvDRs2qFWrVpo+fbrS\n0tLk5+eXa+0392v9ftWqVdq1a5e2bNmilJQURUdHy8XFRZL0z3/+U3FxcVq0aJGmT5+ucePGKS4u\nzrydpKQkXbt2Tbt379bcuXMLPGZJOnv2rPbt26cdO3bo+eefV8+ePTVlyhQtXLhQn3zyiV566SVd\nu3ZNkhQTE6O33npLb7/9tuLj47V9+3aNHz8+x/GVLl1aa9asUcWKFZWenq60tDR5e3trzpw5mjBh\ngqZNm6bp06dr4sSJmjt3bq7nuE2bNoqPj5ckbdq0STVq1NCmTZvM79u0aSNJcnZ21pQpU3T+/Hl9\n9NFHmjhxonm93JhMJrm6uuaoz8fHx+K83PTtt99qw4YNioqK0sCBA/X6669r+vTpWrZsmd59911z\nd43du3crIiJC/fv3186dO3XhwgUNHTo0zzoA3P8IyQDspkePHmrVqpVKliwpSerWrZu8vb3l4uKi\nYcOGyWAw6IcffpBU8NfsS5cuVYcOHdStWzdVqlRJ7733nlasWKHs7Owcy8bGxqp+/fp68cUX5eXl\npfHjx+v777/XhQsXzMsU9Wv9m8tnZ2crLS1NR48elcFgUEBAgNzc3GQymfTtt9/qww8/lK+vrxo2\nbKgBAwZo6dKl5m04OztrzJgx8vDwUKlSpfKs4dbp2dnZioqKUrly5dS/f3+dOXNG/fr1U40aNdS2\nbVtVrFhRW7dulSR99dVXevPNNxUSEiIfHx+NGjXKYv957eOmpUuX6pVXXlGTJk3UuHFjvfLKK/r2\n229zXT80NNQcijdv3qxRo0aZ3yckJCg0NFSS1LhxYwUFBalEiRJq3ry5evXqpWXLluV7rvOqL7dp\nI0eOVMWKFdWrVy+ZTCa1b99eDRs2VIMGDRQcHGz+RuCrr75SZGSk2rVrJ6PRqKioKK1du5ZuL8Df\nGCEZgN0EBwdbvI+JidEzzzyjihUrytPTU6dOndLu3bsLta2tW7cqMDDQ/N7Pz0/Xr1/X3r17c122\ncePG5veurq6qWbOmOUxKyrVVMi+3hrMnn3xSL7zwgvr376/q1atrwoQJys7O1oEDB/T777+rQYMG\nMhqN5iC2ZcsW87oNGzbUgw8+WOj9SpKPj4/KlSsnSapQoYJ5OzdVqFBBJ06ckCTFxcUpMjLSvP+2\nbdsqOTnZ3B2kINbnODAw0OKmwlu1bt1a3333nU6fPq2srCx1795dW7Zs0W+//aaLFy+qUaNGkqQT\nJ05o8ODBatCggdzd3TV58uRC/84L4+a5cHZ2lqenZ45zc7ObTVxcnMaPH28+N35+fsrMzNSuXbvu\nWi0A7i2EZAB24+z81wA7GRkZGjhwoPr27asDBw4oJSVFlSpVMgfQEiVK5Nu626JFC+3YscP8/tdf\nf1WJEiVUt27dXJe92UJ9c9+//vqrmjdvXqi6K1WqpNOnT5vf79q1yxyqS5QooVdeeUV79uzRypUr\nNWPGDK1Zs0a1a9dW5cqVtW/fPqWmpio1NVUXL17Ujz/+mOv5yO+YixLgbxUWFqaZM2ea95+amqqM\njAw99NBDOZbNbd/W53jHjh1q3bp1rvvy8/OTq6urPv74Y4WGhsrNzU3e3t7673//q1atWpmXe++9\n93Tt2jWtWrVKFy9e1PDhw3Nt/b/p1vNsXd/tnhfpxrkZPXp0jnPTtGnT294mgHsbIRmAQ0hPT9el\nS5fk4+Oj7OxsjR8/3tzKJ91otfz1118tbjQzmUzmoNSpUyfFxsZqyZIlOnHihKKiohQeHp7rCBWP\nPfaY9u7dq88//1xnz57V6NGj1bRpU3OL7M1t5+XRRx/VggULdP78eS1dutTcjUC6cTPdnj17lJWV\npTJlysjJyUllypSRwWDQc889pzfffFP79+9Xdna2Dh8+rISEhDz3U9AxF1Xv3r314YcfavPmzcrK\nytK5c+cUExOT67INGzbU+fPnderUKfO0zp0769NPP9UPP/ygXbt26dNPP9XTTz+d5/5CQ0M1bdo0\nc9eKNm3aWLyXpJMnT8rT01PlypVTfHy8Zs+enef2bj323Oq7nfNyc53evXsrOjpaa9eu1dWrV3Xx\n4kUtXry4yNsDcP8gJANwCN7e3ho/frx69+6thg0b6urVq2rZsqV5fp06dfT000+rbt265pbPW29i\nq169uhYvXqw5c+YoNDRUDRo00KRJk3LdV+nSpbVhwwZt2rRJTZs2lYuLi+bNm2exTH6tkgMHDpSX\nl5fq1q2rhQsX6qWXXjLPO336tLp3766yZcuqc+fO6tevn7m1dcyYMWrbtq0iIyPl6emp7t27m1uk\nrW/IK8wx51ZnfnV36NBB48aN07Rp0+Tl5aVmzZopKSkp12Xd3d31xhtvqHXr1vL09NTp06fVq1cv\nDR8+XC+//LIiIyM1bNgw9ezZM8/9hYaG6tKlS+bjt35/85z8+OOPqly5siZMmKAhQ4bkeXy3Hrt1\nfadOnSrw3OTm5jJ16tTRrFmztGjRIlWuXFn169dXbGxsgesDuH8ZTAw6CQAAAFgotpbkF154QRUq\nVFD9+vXN09LT09W5c2dVrVpVTz/9dK7jcwIAAAD2VmwhuX///lqzZo3FtBkzZqhq1ar69ddfzQPg\nAwAAAI6m2EJyq1atZDQaLaYlJSVpwIABKlmypF544QUlJiYW1+4BAACA22bTG/e+//571a5dW5JU\nu3btPG8YAQAAAOzJueBF7p7C3iN4J2NdAgAAAEWRW0a1aUhu2rSp9u/fr4CAAO3fvz/fQdoZdOOG\nMWPGaMyYMfYuA8iBzyYcGZ9POCo+m44nr8ZZm3a3CA4O1ueff64///xTn3/+uUJCQmy5ewAAAKBQ\nii0kR0REqHnz5jp48KCqVKmiL774QpGRkfr9999Vq1YtnThxQoMHDy6u3QMAAAC3rdi6WyxYsCDX\n6cuWLSuuXd6X2rRpY+8SgFzx2YQj4/MJR8Vn897hkE/cMxgM9EkGAABAscsrd9r0xj0AAICCeHp6\nKjU11d5l4D5jNBqVkpJS6OVpSQYAAA6FHIDikNfnKq/pNh3dAgAAALgXEJIBAAAAK4RkAACAYuDr\n66sNGzZIuvEQkd69exdqvV27dqlDhw7y8PDQsmXL9OSTT2r27NkFrufk5KQjR47cUc34CzfuAQAA\nFEGbNm3Uu3dvDRgwIN/lbn2SW15PdcvN9OnTFRISotWrV0uSOnfufHuF4o7QkgwAAByep7u7DAZD\nsb083d0LXcvNdYqiKDcibtmyRc2bNy/S9nH3EZIBAIDDS01Pl0kqtldqevpt1bV7924NHjxYVatW\n1Wuvvabff/89z2VvBuuOHTtq2rRpFvMaNGigpUuXys/PTwcPHlTnzp3l7u6uq1evqk2bNvrss88k\nSadOnVLPnj1VsWJFeXl5qUePHhbb2bZtmxo1aiQ/Pz9Nnjz5to4JNxCSAQAAbsOFCxfUpk0bdejQ\nQT///LPKly+viIiIPJe/2Zrcr18/zZ071zz9p59+0smTJ/XUU0/p0KFDqlq1qlasWKG0tDQ9+OCD\nFi3XkyZNUqVKlXT48GGdOHFCr776qsU+Pv/8cy1cuFCLFi1SVFSUDh8+XAxH/vdASAYAACgik8mk\nJUuWqFu3buZW3zfeeEOHDh3S2bNn8103PDxcBw8eNAfYOXPmqEePHnJ2LvhWsezsbJ06dUpnz57V\ngw8+mKNbxiuvvKLatWurcePGat68udatW3f7B/k3R0gGAAC4DevXr9e8efNkNBplNBpVvnx5ZWRk\nKCEhId/1SpUqpWeffVZz5syRyWTSwoULCz3yxdtvv63KlSurWbNmat68uZYuXWoxv1GjRuaffXx8\ndOLEiaIfGCQxugUAAMBtadu2rYxGo2bMmFHkdfv27as+ffqoRYsWcnV1VXBwcKHWK1eunMaPH6/x\n48drzZo16tq1q44fPy6j0Zjr8kW9wRB/oSUZAACgiAwGg5577jktWbJES5cuVUZGhjIyMrRy5Upd\nunSpwPWbNWsmg8GgkSNHqk+fPoXe7+LFi3X8+HFlZ2erdOnSKl26tEqUKJHrsiaTicd73wFCMgAA\nQBE5OTmpbNmyio2N1caNG/XII4+oZs2amj17dq6tt7kNG9enTx/t2bNHvXr1KvR+d+zYoZCQEBmN\nRo0ZM0YzZsyQ+/8NX2e9/dsZqg5/MZgc8E8Mg8HAXz4AAPxN5ZYDDAaDijMZGFT4sYyrVaumr7/+\nWoGBgXe0z9mzZ+t///tfgX2YcXfklS/zmk5LMgAAcHhGNzcZpGJ7Gd3cClVHXFycUlJSFBAQcEfH\nk5mZqcmTJ+v111+/o+2g+HDjHgAAcHgpaWn2LkFvvPGGkpKSNGvWLDk53X47Y2xsrJ577jl17dpV\n4eHhd7FC3E10twAAAA6FHIDiQHcLAAAA4A4RkgEAAAArhGQAAADACiEZAAAAsEJIBgAAAKwQkgEA\nABzY0aNH1aBBA5vs68svv1SrVq1ssq/c+Pr6av369UVeb9GiRerfv/9drYWQDAAAUEi+vr5ydXWV\nu7u7Hn74YYWFhenrr7+2WObMmTN66623VK9ePXl4eKh+/fqaNWuWJCk5OVlOTk7Kzs6WdOMpf//4\nxz/k7++vU6dO5brPDz/8UJGRkXf9WKxrcQSFfZT2mDFj1Lt3b/P7Z555RvHx8Tp+/Phdq4WQDAAA\nHJ7R6G4OUMXxMhrdC1WHwWDQihUrlJaWpm+++UYhISEaNmyYRo4caV7m3//+t06ePKk1a9YoNTVV\nc+bMUYUKFXJsKzs7W4MGDVJCQoISEhLk4+OTY5mzZ8/q66+/Vp8+fW7/5BXgdsekNplMdhvP2jpI\nOzs7q2/fvpo8efJd2wdP3AMAAA7vjz/StXFj8W2/bdv0Iq/TpEkTNWnSRDVq1NCgQYM0ePBg+fn5\nadGiRVq4cKEqV64sSWrUqFGOda9fv66BAwdq7969io+Pl9FozHUfW7ZsUY0aNVS6dGnzNF9fX731\n1luaNWuWTpw4oRdeeEH//Oc/9cADD0iS4uPj9fHHH2v37t0aOHCgBg4cmOv2W7duLUkqW7asDAaD\n1q5daw6f48aNU3R0tOrXr6+oqCg1a9ZMktSmTRs9/vjjio+P1/bt2/Xjjz/KxcVF//vf/zRr1iwF\nBgZqxIgRCg4OliStXLlSo0eP1pEjRxQUFKTevXtbBP5t27YpKipKBw8e1GuvvWZR3759+zR69Ght\n3rxZTk5O6tmzpz766CNJuQf7kJAQjRo1KtfzeDtoSQYAALgDnTt3lsFg0A8//CBJat++vYYPH65Z\ns2bl+fX/888/r19//VUbNmzIMyBL0oEDB+Tn52cxzWAw6NNPP9XUqVO1fv16zZo1SwkJCZJu9F/u\n0qWLIiIiFB8fr507d2r48OG5bvu7776TJF28eFFpaWkKCQmRyWRSUlKSJOnnn39WSEiI3njjDYv1\npk+frqFDhyolJUVVqlRRx44d5ezsrB07dqhPnz7q0KGDMjIyJEllypTR3LlzlZKSopEjR2rIkCE6\ndOiQJOmPP/5Qu3bt1KtXL23dulWJiYk6ceKEeT9RUVFq27atTpw4oSNHjujZZ5+1OAfWatSooV9+\n+SXPc1lUhGQAAIA7UL58edWuXVvHjh2TJE2dOlX9+vXTpEmTVL16dXXt2lU///yzxTpxcXHq1q2b\n3N3z7+Zx/PjxXLth9OnTR02bNlXNmjXVvn17rVu3TpK0dOlSdejQQd26dVOlSpX03nvvacWKFbn2\nO86rq0Tp0qU1evRoGY1GDRo0SImJiebQazAY9MQTT5iDcXJysjIzMzVq1CiVLVtWHTt2VGhoqFat\nWiVJCg0NVd26dVWiRAm1b99enTt31rJlyyRJa9euVWBgoPr06aOKFStq3Lhxun79urmO7Oxs/f77\n70pJSZGrq6u5dTqv2itXrqzLly/rzJkz+Z7TwiIkAwAA3IFz587pwIEDqlKliqQbradDhgzRTz/9\nZG41ffnlly3WWbFihcaOHasvvvgi320//PDDOnnyZI7pt3bh8Pb2NrfAbt26VYGBgeZ5fn5+un79\nuvbu3Vvo46lbt66cnG5ERB8fH12/ft0ieN4aVuPi4nT06FEZjUbza/369eZW6r1796p///6qVauW\nPDw89PXXX2v37t2SpMTERDVs2NC8rerVq8vDw8P8fvLkycrMzFS9evX0xBNPaNOmTeZ5ud3gd/z4\ncZUqVSrX/t+3g5AMAABwB2JiYmQymdS4ceMc86pWrarhw4crMTFRV65cMU9v3ry5li9frqFDh2rB\nggV5btvf31+HDx8udC0tWrTQjh07zO9//fVXlShRQnXr1s2xbIkSJSQV/cY9Z+e/bmkLCwtTjRo1\nlJqaan6lpaVp6tSpkqSRI0eqcuXK2rRpky5evKiuXbua9xccHKwff/zRvK3Dhw/r4sWL5vdVq1bV\n9OnTdfr0aT377LOKiIgwt4hHRUVp9uzZFnUdOnRIjzzySJGOJT+EZAAAgCK4GfJ27typd955R2PH\njtWrr76qmjVrSpLefPNN7d27V9evX9eRI0c0depUde/eXSVLlrTYTuvWrbVkyRK99NJLWrJkSa77\nCgkJ0dGjR83dHQrSqVMnxcbGasmSJTpx4oSioqIUHh5ubhm+VeXKlfXQQw9ZhOrCuDVU16pVS2XK\nlNHEiRN1+vRpXbt2Td9//70OHDggSTp58qTKly8vDw8PxcTEKCYmxrzu448/rp07d2revHk6efKk\nxo4daxHA586dq3PnzslkMql06dIqU6ZMvnUlJibq0UcfLdKx5IeQDAAAUATh4eFyd3fX008/rc2b\nN2vixImaNGmSef6ff/6pLl26yGg0qkuXLqpSpYree+898/xbuwm0a9dOX331lfr27auVK1fm2JeX\nl5e6d+9uHmc5N7d2PahevboWL16sOXPmKDQ0VA0aNLCozXq9d955RwMGDJDRaFRiYmKu3RgKer90\n6VJdu3ZNjz76qHx8fDRq1ChdvXpVkvTRRx9p0aJFqlq1qhYsWKDBgweb1ytbtqxiY2P1xRdfqFmz\nZgoKCjKPCCJJsbGxqlevnipUqKC5c+fqv//9rznsjx8/XgMHDjQve/36dc2ePVsjRozI8zwVlcFk\nrwHu8mEwGOw27h4AALCv3HKAwWAo5iHgbn+84OL222+/KTw83NyXFzktXrxYq1ev1ueff57nMnnl\nyzynE5IBAIAjyS0HGI3u+uOPoo9lXFhly7opNTWt2LYP+yMkAwCAexo5AMWhqCGZPskAAACAFUIy\nAAAAYIWQDAAAAFghJAMAAABWCMkAAACAFUIyAAAAYIWQDAAAUIycnJx05MgRSVK/fv30zjvv2Lki\nFAYhGQAAoBDKlCkjNzc3ubm5ycnJSa6urub3CxYsKNQ2cnvsMxyTs70LAAAAKIh7WXelXyy+J+65\nebgp7Y/8n7h36dIl88/VqlXTZ599prCwsCLvy94PSrl+/bqcnYmABeEMAQAAh5d+MV0aU4zbH3P7\nATwpKUlDhw7VgQMHVLt2bfXs2VODBw/OM4jebEmuV6+e/v3vf+upp56SJF27dk0+Pj5av369PDw8\nVL16dS1atEijR4/WlStX9P7776tRo0YaOHCgTpw4oWHDhmno0KHm7W7evFkzZszQ1q1b1a9fP73y\nyisqX768pBtdPr788ktNnjxZ6enpOnTo0G0f798F3S1w23755RcFBASYXx4eHpo6darFMn/++af6\n9u2rgIAAhYaGatmyZeZ5CQkJ8vf3V82aNfXxxx/bunwAAO4KZ2dnTZkyRefPn9dHH32kiRMnKj4+\nvsD1+vbtq7lz55rfr1q1SpUqVVLDhg3N07799ltt2LBBUVFRGjhwoF5//XVNnz5dy5Yt07vvvqtj\nx45Jknbv3q2IiAj1799fO3fu1IULFywCtCT973//05dffqm9e/fenQO/zxGScdtq1aqlXbt2adeu\nXfrhhx/k6uqqLl26WCwza9YslS5dWrt27dLs2bM1YsQI89dMQ4cOVXR0tOLi4jR9+nSdP3/eHocB\nAMAdady4sYKCglSiRAk1b95cvXr1smgUsnbz/8GePXtq5cqV5m4cc+bMUe/evS2WHTlypCpWrKhe\nvXrJZDKpffv2atiwoRo0aKDg4GCtX79ekvTVV18pMjJS7dq1k9FoVFRUlNauXausrCzztgYOHKiG\nDRuqZMmSd/sU3JcIybgr4uLiVKNGDVWpUsViuoeHh9LT03Xt2jWlpKTI1dVVBoNBFy9elCS1bt1a\nDz/8sB5//HElJibao3QAAO7IiRMnNHjwYDVo0EDu7u6aPHmydu/eXeB6FStWVIsWLfT111/rjz/+\n0Jo1a9SzZ0+LZW62Kjs7O8vT09OilblChQo6efKkpBv/D48fP15Go1FGo1F+fn7KzMzUzp07zcsH\nBwffjcP92yAk465YuHChnn/++RzTIyIilJWVpfLly6tly5aaN2+eJOn7779X7dq1zcvVqVNH27dv\n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\nRK5CYII=\n", "text": [ "" ] } ], "prompt_number": 22 }, { "cell_type": "code", "collapsed": false, "input": [ "jelly_z = []\n", "dsk_z = []\n", "khmer_z = []\n", "tally_z = []\n", "labels = []\n", "\n", "for _, label, dirname in sorted(zip(order, names, datadirs)):\n", " print dirname\n", " labels.append(label)\n", " jelly_z.append(jelly2[dirname][0])\n", " dsk_z.append(dsk2[dirname][0])\n", " khmer_z.append(khmer2[dirname][0])\n", " tally_z.append(tally2[dirname][0])\n", " " ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "../execublog1/data-athyra/\n", "../execublog1/data-ec2-i1/\n", "../execublog1/data-ec2-i3/\n", "../execublog1/data-ec2-i2/\n" ] } ], "prompt_number": 23 }, { "cell_type": "code", "collapsed": false, "input": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "N = 5\n", "\n", "ind = np.arange(4) # the x locations for the groups\n", "width = 0.2 # the width of the bars\n", "\n", "fig = plt.figure()\n", "ax = fig.add_subplot(111)\n", "rects1 = ax.bar(ind, jelly_z, width, color='r')\n", "rects2 = ax.bar(ind+width, dsk_z, width, color='y')\n", "rects3 = ax.bar(ind+2*width, tally_z, width, color='g')\n", "rects4 = ax.bar(ind+3*width, khmer_z, width, color='b')\n", "\n", "\n", "# add some\n", "ax.set_ylabel('Time (s)')\n", "ax.set_title('system time')\n", "ax.set_xticks(ind+2*width)\n", "ax.set_xticklabels(labels)\n", "ax.set_ylim(0, 450)\n", "\n", "ax.legend( (rects1[0], rects2[0], rects3[0], rects4[0]), ('Jellyfish', 'DSK (no threads!)', 'Tallymer', 'khmer (1% fp)'),\n", " loc='upper left')\n", "\n", "def autolabel(rects):\n", " # attach some text labels\n", " for rect in rects:\n", " height = rect.get_height()\n", " ax.text(rect.get_x()+rect.get_width()/2., 1.05*height, '%.1f'%(height + 0.05),\n", " ha='center', va='bottom')\n", "\n", "autolabel(rects1)\n", "autolabel(rects2)\n", "autolabel(rects3)\n", "autolabel(rects4)\n", "\n", "#plt.show()\n", "savefig('../execublog1/system_time.png')" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "display_data", "png": "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\n42yKqqB27dr3FYDJZGLQoEG0bNmSESNGmLf7+/vz2WefcfnyZT777DMCAgIA8PPzIy4ujhMnThAf\nH69lr1YAACAASURBVI+NjY3GP4uIiIhIuWO1IRw7d+5k0aJFtG7dGh8fHwAmT55MZGQk/fv3p2nT\npvj6+vL+++8DUL9+fSIjI+nYsSN2dnbExsZaKzQRERERkXtmtQT66aefJj8/v9B9q1evLnT78OHD\nGT58uLVCEhERERG5b0UO4RARERERkTspgRYRERERsYASaBERERERCyiBFhERERGxgBJoEREREREL\nKIEWEREREbGAEmgREREREQsogRYRERERsYASaBER+X/t3XtYVNX+x/H3aJFYiJblpaA0kZsXJuWm\nqegx80Z46QKpRVomWlpm1nPsAtnRLpaZpZkds45JmWblMSRJKMMEUsxElDTJAiuV9CAqiuzfH/yY\nRAZllJkB/LyeZ56H2bPWnu/sWY7fWbP2d4uIiA2UQIuIiIiI2EAJtIiIiIiIDZRAi4iIiIjYQAm0\niIiIiIgNlECLiIiIiNhACfQFGj16NC1atKBjx46WbbGxsVx33XWYzWbMZjNr1qyp0Gfv3r1cccUV\nvPLKK1b3uXPnTkaMGIGfnx+RkZEcO3bMrq9BRERERKpPCfQFuu+++yolyCaTicmTJ5OZmUlmZib9\n+/ev8PjkyZMZNGhQlfuMi4tjyJAhbN++nYCAAN555x27xC4iIiIitlMCfYF69OhBs2bNKm03DMNq\n+08//ZS2bdvi5+dX5T5TUlIIDw8H4LbbbiM1NbVmghURERGRC6YE2k7mzp1LSEgIL774IoWFhQAc\nOXKEl156idjY2LP2veWWW1i8eDHFxcW89957bNiwwQERi4iIiEh1KIG2g5iYGPbs2UNiYiK7d+9m\nwYIFQNna6EcffZTGjRtXOUMNZUs4tm3bRkhICKdOncLV1dVRoYuIiIjIOVzi7ADqo2uuuQYAd3d3\nJkyYwPjx45kyZQrp6emsWLGCqVOncujQIRo0aICrqyvjx4+v0P+GG27gjTfeACAhIYETJ044/DWI\niIiIiHVKoO1g3759tGrVipKSEpYuXcrAgQMB+Oabbyxt4uLicHNzq5Q8A+zfv5+rr76avLw85s2b\nx7hx4xwWu4iIiIicnZZwXKCoqCi6devGzp078fDwYNGiRTzxxBN06tSJkJAQTp48SUxMzDn388AD\nD7B582YA4uPj8fb2pnfv3oSGhp61YoeIiIiIOJbJONti3FrIZDKddf2wyMXOZDKRnOzcGHr3BmKd\nGwPw/zE4+/NCn1nlasPYhFoyPmPB+WMTND7/VhvGZ60Ym1BLxmftGJtV5Z2agRYRERERsYESaBER\nERERGyiBFhERERGxgRJoEREREREbKIEWEREREbGB3RLo0aNH06JFCzp27GjZFhsby3XXXYfZbMZs\nNpOQkGB57PXXX8fLyws/Pz++/fZbe4UlIiIiInJB7JZA33fffaxZs6bCNpPJxOTJk8nMzCQzM5MB\nAwYA8OeffzJv3jy++uor5s+fz8SJE+0VVo1p1qwJJpPJqbdmzZo4+zCIiIiIXHTsdiXCHj16kJub\nW2m7tVp6aWlp9O/fH09PTzw9PTEMg8LCQtzc3OwV3gU7dKiwFtSLLHRuACIiIiIXIYevgZ47dy4h\nISG8+OKLFBaWJYDp6en4+vpa2nh7e5Oenu7o0EREREREzsluM9DWxMTE8Mwzz/C///2Pxx9/nAUL\nFjBlyhSrs9Imk6nK/cTGxlr+DgsLIywszA7RioiIiMjFJCUlhZSUlHO2c2gCfc011wDg7u7OhAkT\nGD9+PFOmTCE4OJikpCRLux07dhAYGFjlfk5PoEVEREREasKZE7NxcXFW2zl0Cce+ffsAKCkpYenS\npQwcOBCAoKAgEhMT2bt3LykpKTRo0KBWr38WERERkYuX3Wago6Ki+Prrrzlw4AAeHh7ExcWRkpLC\nli1bcHFxoWfPnsTExADQokULYmJi6NOnDy4uLixYsMBeYYmIiIiIXBC7JdDx8fGVto0ePbrK9pMm\nTWLSpEn2CkdEREREpEboSoQiIiIiIjZQAi0iIiIiYgMl0CIiIiIiNlACLSIiIiJiAyXQIiIiIiI2\nUAItIiIiImIDJdAiIiIiIjZQAi0iIiIiYgMl0CIiIiIiNlACLSIiIiJiAyXQIiIiIiI2UAItIiIi\nImIDJdAiIiIiIjZQAi0iIiIiYgMl0CIiIiIiNlACLSIiIiJiAyXQIiIiIiI2UAItIiIiImIDJdAi\nIiIiIjZQAi0iIiIiYgMl0CIiIiIiNlACLSIiIiJiAyXQIiIiIiI2UAItIiIiImIDJdAiIiIiIjZQ\nAi0iIiIiYgMl0CIiIiIiNlACLSIiIiJiA7sl0KNHj6ZFixZ07NjRsq2wsJCIiAg8PT0ZMmQIR44c\nsTz2+uuv4+XlhZ+fH99++629whIRERERuSB2S6Dvu+8+1qxZU2Hb/Pnz8fT05KeffuK6667jrbfe\nAuDPP/9k3rx5fPXVV8yfP5+JEyfaKywRERERkQtitwS6R48eNGvWrMK29PR0xowZw2WXXcbo0aNJ\nS0sDIC0tjf79++Pp6UmvXr0wDIPCwkJ7hSYiIiIict4cugY6IyMDHx8fAHx8fEhPTwfKEmhfX19L\nO29vb8tjIiIiIiK1ySWOfDLDMKrd1mQyVflYbGys5e+wsDDCwsIuICoREREREUhJSSElJeWc7Rya\nQAcGBpKdnY3ZbCY7O5vAwEAAgoODSUpKsrTbsWOH5TFrTk+gRURERERqwpkTs3FxcVbbOXQJR3Bw\nMIsWLeLYsWMsWrSIkJAQAIKCgkhMTGTv3r2kpKTQoEED3NzcHBmaiIiIiEi12C2BjoqKolu3buTk\n5ODh4cG7775LTEwMe/fuxdvbm7y8PMaNGwdAixYtiImJoU+fPowfP545c+bYKywRERERkQtityUc\n8fHxVrd/9tlnVrdPmjSJSZMm2SscEREREZEaoSsRioiIiIjYQAm0iIiIiIgNlEDXQzt37sRsNltu\n7u7uzJkzh9jYWK677jrL9jOvFFlu4cKFdOvWjS5duvDII484OHoRERGR2k0JdD3k7e1NZmYmmZmZ\nbNq0icaNGzNs2DBMJhOTJ0+2PNa/f/9KfQsKCpgxYwZr164lIyODnJwcEhMTnfAqRERERGonh9aB\nFsdLSkqiXbt2eHh4YBjGOS9m4+rqimEYHD58GICjR49WuiS7iIiIyMVMM9D13IcffkhUVBRQdnXH\nuXPnEhISwosvvkhhYWGl9q6ursyfP58bbriBli1b0r17d4KCghwdtoiIiEitpQS6Hjtx4gSrVq3i\njjvuACAmJoY9e/aQmJjI7t27WbBgQaU++/fvJyYmhu3bt5Obm8t3333H6tWrHR26iIiISK2lBLoe\nS0hIoEuXLlx99dUAXHPNNZhMJtzd3ZkwYQIrV66s1Cc9PZ2QkBDatWvHVVddxR133ME333zj6NBF\nREREai0l0PVYfHy8ZfkGwL59+wAoKSlh6dKlDBw4sFKfHj168P3331NQUEBxcTEJCQn069fPYTGL\niIiI1HZKoOupoqIikpKSGDZsmGXbE088QadOnQgJCeHkyZPExMQAkJ+fz6BBgwBo0qQJTz31FEOH\nDuXmm2+mc+fO9O7d2ymvQUQco6ioiHvvvZf27dvj5+fHxo0biYyMtJS8bNOmDWaz2Wpflb0UkYuR\nqnDUU5dffjkHDhyosO3999+32rZ169YV1jlHR0cTHR1tz/BEpBZ59tln8fT0ZMGCBVxyySUUFRXx\n4YcfWh6fMmUKTZs2rdSvvOzltm3bcHV1ZfDgwSQmJnLrrbc6MnwREYdTAi0icpFLSkriu+++o1Gj\nRgC4u7tbHjMMg2XLlpGcnFypn8peisjFSks4REQuYr/99hvHjx8nJiaG4OBgXnzxRY4fP255fP36\n9bRo0YIbb7yxUl+VvRSRi5US6LqsQVltZ2ffmjRt4uwjISLn6fjx4+Tk5DB8+HBSUlLIyspi2bJl\nlsfj4+O5++67rfZV2UsRuVhpCUddVgrEOjsIKIytfEEWEakb2rVrh7e3N+Hh4QBERUXx/vvvc889\n91BSUsLKlSvZvHmz1b6nl70ELGUvy09KFhGprzQDLXZ1ww030KlTJ8xms+Wn3Z07dzJixAj8/PyI\njIzk2LFjlfr9+uuv9O7dG39/f8LCwli6dKmjQ69R53scQFUOxP68vLxIS0ujtLSU1atX07dvX6Bs\nbbSvry+tW7e22k9lL0XkYqUEWuzKZDKRkpJCZmYm6enpAMTFxTFkyBC2b99OQEAA77zzTqV+l156\nKbNnzyYrK4vly5fz1FNPWb30eF1xvsehvMrB2rVrycjIICcnh8TEREeHL/XcrFmzmDRpEjfddBON\nGjUiMjISgI8++qhCLXlQ2UsREVACLQ5gGEaF+ykpKZafi2+77TZSU1Mr9WnZsiUBAQEANG/eHH9/\nf77//nv7B2tH53McTq9ycOzYMVU5ELto3749GzduZMuWLcyaNYvLL78cgHfffZexY8dWaGut7OXX\nX39NRkYG06dPp0ED/bciIvWfPunErkwmE3369GHIkCF8/vnnANxyyy0sXryY4uJi3nvvPTZs2HDW\nfezatYusrKw6fXb/+R4HVTkQERGpfZRAi12lpqbyww8/MHPmTCZPnszvv/9OXFwc27ZtIyQkhFOn\nTuHq6lpl/8LCQu666y5mz55tmRWri873OKjKgdSUK5s0cXrFHhGR+kJVOMSuWrVqBYCvry+33XYb\nq1at4oEHHuCNN94AICEhgRMnTljte/LkSYYPH86oUaOIiIhwWMz2cL7HQVUOpKb8VViIce5mdqUU\nWkTqC81Ai90cPXrUcuLf/v37SUxMpH///uzfvx+AvLw85s2bZ/Wyv4ZhMGbMGDp06FDnK09cyHFQ\nlQMRuZhZq2D08ccf4+/vT8OGDasssQiqYCT2pQRa7OaPP/6gR48eBAQEEBkZyWOPPYaHhwfx8fF4\ne3vTu3dvQkNDLbOpp5/dn5qaypIlS1i3bh1msxmz2cyaNWuc+XLO24UcB1U5EJGLmbUKRh07dmTl\nypX07Nmzyn6qYCT2piUcYjdt2rRhy5YtlbZPnDiRiRMnVtp++tn9N998M6WlpXaP0REu5DhAWZWD\n6Ohoe4YoIlJrnVnByMfH55x9Tq9gBKiCkdQ4zUCLiIhIrWStglF1qIKR2JtmoEVq0JVNmvBXHb7g\ni4hIbZKamkqrVq3Izs4mPDycoKAgWrZsec5+p1cwatasGXfccQerV6/WCdhSYzQDLTXgEqeXx2rS\n5EpnHwTg70oHzryJiNQX1ioYVcfpFYyuuuoqSwUjkZqiBFpqQAnOTRkNCgv/sv/LFBERh6mqgtHp\nzlwfXU4VjMTenJJAWytLU1hYSEREBJ6engwZMoQjR444IzQRERGpBaqqYLRy5Uo8PDzYuHEjgwYN\nYsCAAYAqGIljOWUNdHlZmiuv/Ptn9/nz5+Pp6cmyZct47LHHeOutt5gyZYozwhMREREnq6qC0dCh\nQxk6dGil7apgJI7ktCUcZ/7skp6ezpgxY7jssssYPXo0aWlpTopMRERERKRqTkmgrZWlycjIsNR2\n9PHxsRRMFxERkfrryiZNnH4iusmkC82LbZyyhMNaWZqqTgQQERGR+qu8epGzKYUWWzglgbZWliYw\nMJDs7GzMZjPZ2dkEBgZW2T82Ntbyd1hYGGFhYXaOWERERETqu5SUFFJSUs7ZzuEJ9NGjRzl16hRu\nbm6WsjSPPvoof/31F4sWLeKll15i0aJFhISEVLmP0xNoEREREZGacObEbFxcnNV2Dl8DXVVZmpiY\nGPbu3Yu3tzd5eXmMGzfO0aGJiIiIiJyTw2egqypL4+bmxmeffebocEREREREbKIrEYqIiIiI2EAJ\ntIiIiIiIDZRAi4iIiIjYQAm0iIiIiIgN6k0C/euvv9K7d2/8/f0JCwtj6dKllsfeffddfH198ff3\n54knnrDa/5tvvsHX1xcvLy/mzp3rqLBFREREpI5xyoVU7OHSSy9l9uzZBAQEcODAAYKCgggPD+eX\nX37h7bff5vPPP8fLy4v9+/db7T9p0iQWLFjA9ddfz6233kpUVBTNmzd38KsQERERkdqu3iTQLVu2\npGXLlgA0b94cf39/MjIy2LRpE2PGjMHLywuAq6++ulLfw4cPA9CzZ08A+vXrR1paGoMGDXJQ9CIi\nIiJSV9SbJRyn27VrF1lZWQQFBZGYmMi2bdvo2rUr999/P9u3b6/UPiMjAx8fH8t9Pz8/Nm7c6MiQ\nRURERKSOqHcJdGFhIXfddRezZ8/miiuuoLi4mIKCAtavX09ERAQPPfSQs0MUERERkTqsXiXQJ0+e\nZPjw4YwaNYqIiAgAQkJCuOuuu3B1dSU8PJwdO3Zw/PjxCv0CAwPZsWOH5X5WVhYhISEOjV1ERERE\n6oZ6k0AbhsGYMWPo0KEDjzzyiGV7aGgoCQkJGIZBWloaN954I40aNarQ193dHSirxJGbm8vatWsJ\nDg52aPwiIiIiUjfUmwQ6NTWVJUuWsG7dOsxmM2azmTVr1hAREUFJSQl+fn688MILvPrqqwDk5+dX\nOEnwtdde48EHH6Rv376MHz9eFThERERExKp6U4Xj5ptvprS01Opjb731VqVtrVu3ZvXq1Zb7vXr1\nIjs7227xiYiIiEj9UG9moEVEREREHKFOzkCbTCZnhyAiIiIiF6k6mUAbzg4AUAovIiIicnHSEg4R\nERERERsogRYRERERsYESaBERERERGyiBFhERERGxgRJoEREREREbKIEWEREREbGBEmgRERERERso\ngRYRERERsYESaBERERERGyiBFhERERGxgRJoEREREREbKIEWEREREbGBEmgRERERERvUugT6m2++\nwdfXFy8vL+bOnevscEREREREKqh1CfSkSZNYsGABSUlJvPnmmxw4cMDZIYmIiIiIWNSqBPrw4cMA\n9OzZk+uvv55+/fqRlpbm5KhERERERP5WqxLojIwMfHx8LPf9/PzYuHGjEyMSEREREanoEmcHcD5M\nzg7g//Xu7ewIgFhnB1DO+e+KyeT8GKA2HAmNzYqc/45obP6tVoxNqCXjsza8I7VjfDo/gjK1YnzG\nOjuAcs5/V2rD2KxKrUqgAwMDefzxxy33s7Ky6N+/f4U2hmE4OiwREREREYtatYTD3d0dKKvEkZub\ny9q1awkODnZyVCIiIiIif6tVM9AAr732Gg8++CAnT55k4sSJNG/e3NkhOdypU6do2LDhBe+nfLb+\nQn4CKS0tpUGDWvU9S0RERMSpal1m1KtXL7Kzs9m1axcTJ050djjnbfny5fTp04c+ffqwcuVKAHJz\nc+nYsaOlzaxZs4iLiwMgLCyMadOm0bVrV15//fUK+9qyZQv/+Mc/CAgI4KabbqKoqAiAjz/+mMGD\nB9OjRw/efvtty3P4+voyduxYOnXqxPTp05k6daplX4sXL+bhhx8GICkpiTvuuIPQ0FBmzJhhaXPF\nFVfw9NNPExAQoJM4LyIffPABnTt3pnPnztx9993k5ORYbTdixAh8fHwICgri6aefPud+Y2NjeeWV\nV2o6XLnIVHd8lps4cSJubm7n3K/GZ+1RHz6Dxo0bx4YNG1i+fDn+/v40bNiQzZs3A5CYmIjZbMZs\nNuPm5oaPjw9ms5l7772Xr7/+Gnd3d8xmM507d2bkyJEcPXq00v5TUlIs7cpv69atA6Bhw4aW/oMG\nDWLbtm1A2aTc448/TteuXenYsSM9evSw5BGnmzZtGp6enpX+3Zw8eZIxY8Zw/fXXExYWxu+//255\n7OOPP8bb2xtvb2+WL19u9ZhER0ezYsUKAEpKSpg2bRrt27enXbt2REVFcfDgQUvb8tfQpUsXHn/8\ncU6ePAnAwoUL6dWrF506dcJsNpOenl7t98RuDKlxBQUFhre3t5Gfn2/89ttvRvv27Y3Dhw8be/bs\nMTp06GBpN2vWLCMuLs4wDMMICwszoqKijOLi4kr7u/fee42kpCTDMAyjqKjIKCkpMfbs2WPceeed\nxsmTJ43i4mKjV69eRn5+vrFnzx7DZDIZn376qWEYhrF//36jXbt2ln0NGDDASE1NNYqKioy+ffsa\nx44dM06dOmVERkYaGzduNAzDMEwmkzFnzhy7HR+pnTZs2GAcOnTIMAzDWLx4sTFy5Eir7b744gvD\nMAyjuLjY6N+/v2VsViU2NtaYNWtWteMoKSmpdlu5eFR3fBqGYWRkZBijRo0y3Nzczrlfjc/aoz58\nBgUEBBilpaVGdna2sXPnTiMsLMzYtGlTpXZnbk9OTjYGDx5suT9+/Hhj3rx5lfolJycb4eHhVp/7\niiuusPy9bNky484777T8HR0dbZw6dcowDMPIycmxmmukpaUZ+/btq7AfwzCMjz76yBg+fLhRVFRk\nzJw505gwYYJhGIZx6tQpo23btsaPP/5o/PDDD8aNN95oNa7o6GhjxYoVhmEYxssvv2wMGTLE+Pnn\nn41Dhw4Z06ZNq/B6yp/7xIkTxsCBA41Vq1YZeXl5RseOHY2ioiLDMAzj4MGDRn5+vtXncqRaNwNd\nHyQkJNCvXz9atWrFtddeS9++fUlISLC6lMI47aTIu+++GxcXl0ptQkNDefLJJ3njjTcoKSmhYcOG\nrFixgvT0dAIDAwkODiY/P9/yLfSqq64iIiICgObNm9O2bVvS0tI4ePAgO3bsoFu3biQkJLB9+3ZC\nQ0Pp0qULW7ZsITk5GYAGDRoQHR1thyMjzpKbm4ufnx9jx47Fy8uLhx9+mA0bNtC9e3e6d+/Otm3b\nCA0NtZyHMGjQIL7++mur+xowYAAALi4u9O3b19LukUceYfr06UDZTEuvXr0qnfS7cOFCgoKC6NKl\nC1OnTuXEiRNA2QzF5MmTCQ4O5sknnyQvL4/Ro0fj6+vLjBkzKsyIWPvlReq2mhyfp06dYurUqbz0\n0ksVxp/Gp/NU5/0F6vxnUHZ2Nu3bt8dkMuHj40P79u3PelzOjK3ciRMnKCwspFGjRjb1O/3xAwcO\nWPpv376dNm3aWJZjenl5Wc01goKCaNmyZaXt6enpjBw5ksaNGzN27FjL9TmysrLo0KEDHTp0oFOn\nTvj5+ZGVlXXW2FauXMkLL7xAmzZtcHd35/nnn2fr1q2VZsQvvfRS+vTpw7fffstPP/3ENddcQ+PG\njQG48soradWq1VmfxxGUQNuByWSqMMANw8BkMtGoUSOKi4st2w8ePFghqW7durXV/T344IN89NFH\nFBQU0KlTJ/744w9KS0uJjo4mMzOTzMxMcnJyGDFiBEClfwCRkZEsW7aMTz75hGHDhgFla5v79etn\n6Z+dnc2TTz4JgKurK02aNKmZgyG1xo4dOxgxYgRZWVl8+eWXvPbaayQnJzN27FgWLFhQoe3bb79N\neHj4WfdXXFzM+++/z+DBgwGYOXMmH330EcnJyUyaNInFixdX+tI4fPhw0tPT+f777zl69KjlSxvA\n5s2bSUpK4uWXX2bGjBl07tyZ7OxsTpw4YdlPbm4uy5cv59NPP+Wrr75i6dKl7Nu3ryYOjzhZTY3P\nN954g4iIiEqfgxqfzmXL+wt18zMoISHBktxXx5mxrV+/HrPZTOvWrdm7dy/33HOP1X7l7cpve/bs\nAeDYsWOYzWbatGlDbGysZWnmyJEjef/99+nSpQszZszg0KFD1Y4RIC0tDT8/P6Asef3jjz84fvx4\nhe1w7mt37Nu3j/z8fLy9vSts79mzJ6tXr66w7dChQ/z3v//l1ltvpWfPnpSWlnL99dczceJEdu3a\nZVP89qIE2g4GDBhAUlISv//+u2VmeMCAAbRo0YLS0lLy8vIoKCjgs88+q9b+du/eTdu2bXnmmWfw\n8fFh9+7dREZGsmLFCvbu3QtAXl4e+/fvt9p/6NChfPrpp8THxxMZGQlAeHg469evJzs7G4CCggLL\nvqR+uvbaa+nVqxcuLi507dqV/v374+LiQmhoKN99952lXVJSEkuWLOFf//rXWfcXExND3759CQoK\nAsq+eC1cuJBbbrmFhx9+mDZt2lTq8/PPPzNy5Eg6dOjAF198QWJiIlD2H8ntt99umeVZu3Yto0aN\nAspmhsq/kJ7tlxep22pifObn57N8+XIeeuihSrN0Gp/OVd33F+ruZ9CXX35ZqfSuLXr06EFmZiZ5\neXl07dqVp5566qztym/lr9PV1ZXMzExyc3OZN28et99+OwA33ngjOTk5xMXFsXPnTtq1a1dlvmCN\nYRiVJgWrcraiBdV57OjRo5jNZiIiIggPD6dXr16YTCbWrVvH8uXLcXV1pXv37nzxxRfVjt9eal0V\njvqgadOmTJ8+naioKEwmEzNnzrT8o3z++ecZOHAgTZo0ISwsrFr7mzNnDsnJybi6utKtWze6desG\nlJ0YMW7cOH777Tfc3NxYsmQJJpOp0iBt2rQpfn5+ZGdn07VrVwAaNWrEwoULefrpp8nJycHFxYV5\n8+bh6elZqwuXy/lr2rSp5W8XFxfLT6UuLi6WX0a2bt3KuHHjWLNmTYX2Z4qLi+Pw4cMsWrSowvat\nW7dy9dVXk5eXV2F7+ZiaMmUK06ZNY8mSJcyZM4ctW7ZY2lTnJ7nyX16effbZc7aVuqUmxueWLVvY\ntWsX7dq1A8r+M27fvr3lZDSNT+epzvsLdfcz6OjRoxw6dMjqEghbXXbZZURGRjJhwoTz3sewYcMY\nM2YMR48epXHjxjRo0IDBgwczePBgoqOj+fzzzxkzZky19hUcHMz27dvx9vamoKCAFi1a0KhRI4KD\ng1m1apWl3fbt2y1fOqxp2bIlrVq1YufOnZZZaMMwWL9+PfPnzwegcePGZGZmWu0fGBhIYGAgvr6+\nxMfHM3DgwOoeDrvQDLSd3H777SQnJ7Nu3TqGDh1q2R4ZGckPP/zA+vXrefPNN3nmmWcASE5O5qab\nbrK6r9dff50ff/yR9PR0XnvtNcv2YcOG8cUXX7B161ZSU1Np06YNN9xwA1u3bq20j1WrVlX6TtaL\n4wAAAy1JREFU2aN3794sX76crVu38v3331u+xf/vf/+74Ncvdc/evXsZPnw4H3zwgSUBseadd95h\n7dq1fPDBBxW2//LLL7z66qtkZmaSkJBQ4Szp8hmL/Px8vLy8+Ouvv4iPj6/yy1q/fv1YsmQJpaWl\n/Oc//7Fst+WXF6lfqjM+Bw4cyL59+9izZw979uyhcePGluRZ47P2q8ufQcnJyfTp08fqvs61Ztla\n+8TERHr27GlTv9Olpqbi5eVF48aN2bBhA3/99RcAR44cYevWrZaJuOoIDg5myZIlFBUV8fbbbxMS\nEgKULdnYtm0bP/74I1u3biUrKwt/f/8qXxOU5S3//Oc/yc3N5fDhwzz77LN06NCByy+/vMrnz8nJ\n4aeffgLKqnhs3LjRpvjtRQm0yEXizP8ozrw/ffp0Dh48yLhx4zCbzZYvVFB2Qk956aKYmBj++OMP\nQkNDMZvNPP/88wDcf//9vPLKK7Rs2ZJ///vf3H///ZaZpfLnmj59OoMHD+bWW2+l9xnXzD09nief\nfJLNmzfj7+/PkSNHaNu2LQAeHh6WX146derEnXfeyZEjR2ri8IiT1dT4tLYPwzA0Pp3sbO9v+d/P\nPfccBQUFde4zqLCwkISEhArLN1auXImHhwcbN25k0KBB51wbbTKZLGubAwIC2L17t9VSvqe3K799\n8sknwN9roDt37sxLL73Eq6++CpQtAw0LC6Nz584MHjyYUaNG4evrW2nfU6dOxcPDg2PHjuHh4cFz\nzz0HlC0DdXd3x9fXlzVr1liWljRs2JCZM2cyfPhwbr/9dl544YWzvj6ARx99FG9vb2655RZuuukm\ncnJyWLx4sdX3oNyRI0eIjo7G39+f7t2706hRI+69996zHk9HMBm2fjUSEbGzY8eO4erqimEYzJ49\nm/379zNz5kxnhyUCaHxeDGx9j7t06UJ6enqNXARN6gbNQItIrbNp0yYCAgLo2LEju3fvvqC1gCI1\nTeOz/rP1Pd60aZOS54uMZqBFRERERGygGWgRERERERsogRYRERERsYESaBERERERGyiBFhERERGx\ngRJoEREREREbKIEWEREREbHB/wGoSPhWiB93RAAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 24 }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 24 }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 12 }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 12 } ], "metadata": {} } ] }