{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# StackOverflow" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "autoscroll": false, "collapsed": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "autoscroll": false, "collapsed": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "import igraph as ig\n", "import dionysus as d" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "plt.style.use(\"fivethirtyeight\")\n", "plt.rcParams[\"figure.figsize\"] = 10, 6" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Data import" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "autoscroll": false, "collapsed": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "G = ig.read(\"data/stackoverflow/stackoverflow.graphml\")" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "autoscroll": false, "collapsed": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "G.to_undirected(combine_edges=\"first\")" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'IGRAPH U--- 6024271 29637833 -- \\n+ attr: id (v), id (e), time (e)'" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "G.summary()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Normalize the time scale" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1217567877.0, 1457273428.0)" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "time_min = min(G.es[\"time\"])\n", "time_max = max(G.es[\"time\"])\n", "time_min, time_max" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "G.es[\"time\"] = (np.array(G.es[\"time\"]) - time_min) / (time_max - time_min)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsEAAAGCCAYAAAABlR4rAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3X9Y1WWe//HXWcqGtKSO5xwgRU1J0X5qctSsVpl+oFfrUtGPbbbEMTS1USdErC5tygRkVnHUaEbA2l1nJyNNnRq7amATjTy66eJoKtXmla4ekDopBKl4vn908fl2VlLQw69zPx/X1R9+7jefz1tupVd397k/Np/P5xcAAABgkL9r7wYAAACAtkYIBgAAgHEIwQAAADAOIRgAAADGIQQDAADAOIRgAAAAGIcQDAAAAOM0KwRv3bpVjzzyiOLi4hQREaHVq1dbY6dOndL8+fM1cuRIRUdHa8CAAZo0aZK++uqrgHt8//33mj17tq699lpFR0frkUce0eHDhwNqvvrqKz388MOKjo7Wtddeq/T0dJ08eTKgZsuWLbrzzjvlcrl00003qbCw8Kx+8/PzdeONN8rlcunOO+/URx991OJeAAAAELqaFYJra2s1aNAgZWVlKTw8PGDsu+++03//938rLS1NH374of74xz/q8OHDevDBB3X69Gmrbu7cudq4caMKCgr07rvv6sSJE3r44YfV0NAgSWpoaNDDDz+smpoavfvuuyooKNCGDRv03HPPWff48ssv9dBDDyk+Pl6bN2/Wr3/9a6Wnp2v9+vVWzdq1a5WRkaFnnnlGmzdvVnx8vJKTkwNC+fl6AQAAQGiztfSNcddcc40WLVqkxx577Cdr9u3bp+HDh2vr1q0aPHiwvv32W/Xv318rVqzQQw89JEk6dOiQbrjhBhUVFSkhIUHvv/++HnroIe3evVs9e/aUJL3xxhv61a9+pYqKCl155ZWaP3++Nm7cqE8++cR61tNPP619+/bp/ffflyQlJCRo8ODB+t3vfmfVDBkyROPHj9f8+fOb1QsAAABCW6vsCT5x4oQkKSIiQpK0a9cunTp1SmPGjLFqevbsqQEDBmjbtm2SJI/HowEDBlgBWPoh0H7//ffatWuXVfPjezTW7Ny5U6dOndLJkye1a9eus2rGjBljPac5vQAAACC0BT0Enzx5Us8//7zuvfdeXXPNNZKkyspKhYWFyW63B9Q6HA5VVlZaNQ6HI2DcbrcrLCzsnDUOh0OnT59WdXW1qqur1dDQ0GTNj+9xvl4AAAAQ2oIagk+fPq3U1FR9++23euWVV4J5a6NUVFS0dwsIAuax82MOQwPzGBqYx9DQkeYxaCH49OnT+uUvf6k9e/Zo/fr1uvrqq60xp9OphoYGVVdXB3xNVVWVnE6nVVNVVRUw3riye66aqqoqXXLJJbLb7dbKcVM1P77H+XoBAABAaAtKCD516pRSUlK0Z88ebdy4US6XK2D85ptv1qWXXqqSkhLr2uHDh7V//3653W5JUnx8vPbv3x9wVFlJSYkuu+wy3XzzzVbNj+/RWHPLLbfo0ksvVZcuXXTzzTc3WdP4nOb0AgAAgNB2SXOKampq9MUXX0iSzpw5o0OHDqm8vFxXXXWVoqKi9MQTT2jnzp36j//4D9lsNnm9XknSlVdeqfDwcHXv3l3//M//rPnz58vhcOiqq67Sc889p8GDB+vv//7vJf3w4bW4uDhNmTJFCxYs0DfffKN58+bp8ccf15VXXilJSklJ0cqVK5WRkaGUlBRt27ZNf/zjH5Wfn2/1Om3aNE2ePFlDhw6V2+1WYWGhjh49qpSUFElqVi8AAAAIbc0KwTt37tR9991n/TozM1OZmZl69NFHlZGRoXfffVeSzgqRK1assI5Sy8zMVFhYmFJSUlRfX6877rhDr776qsLCwiRJYWFheuONN5SWlqZ7771XP/vZz5ScnKyXXnrJul+fPn20Zs0aPfvssyosLFRkZKSys7M1fvx4q+b+++/X119/rZycHHm9XsXFxWnNmjWKiYkJ6P9cvQAAACC0tficYLS+iooKxcbGtncbuEjMY+fHHIYG5jE0MI+hoSPNY6ucEwwAAAB0ZIRgAAAAGIcQDAAAAOMQggEAAGAcQjAAAACMQwgGAACAcQjBAAAAMA4hGAAAAMYhBAMAAMA4zXptMgAAANCUiFWHm127fVQrNtJCrAQDAADAOIRgAAAAGIcQDAAAAOMQggEAAGAcQjAAAACMQwgGAACAcQjBAAAAMA4hGAAAAMYhBAMAAMA4hGAAAAAYhxAMAAAA4xCCAQAAYBxCMAAAAIxDCAYAAIBxCMEAAAAwDiEYAAAAxiEEAwAAwDiEYAAAABiHEAwAAADjEIIBAABgHEIwAAAAjEMIBgAAgHEIwQAAADAOIRgAAADGIQQDAADAOIRgAAAAGIcQDAAAAOMQggEAAGAcQjAAAACMQwgGAACAcQjBAAAAMA4hGAAAAMYhBAMAAMA4hGAAAAAY55L2bgAAALStiFWHm13rS7mmFTsB2g8rwQAAADAOIRgAAADGaVYI3rp1qx555BHFxcUpIiJCq1evDhj3+/3KzMzUwIEDFRkZqXHjxunTTz8NqPH5fEpNTVVMTIxiYmKUmpoqn88XULNnzx6NHTtWkZGRiouLU3Z2tvx+f0DN+vXr5Xa75XQ65Xa7tXHjxlbpBQAAAKGrWSG4trZWgwYNUlZWlsLDw88aX7p0qVasWKHs7GwVFxfL4XAoKSlJJ06csGomTZqk8vJyFRUVqaioSOXl5Zo8ebI1fvz4cSUlJcnpdKq4uFhZWVlatmyZli9fbtV4PB5NnDhRycnJKi0tVXJysiZMmKAdO3YEtRcAAACEtmZ9MO7uu+/W3XffLUmaOnVqwJjf71deXp5mzpyp8ePHS5Ly8vIUGxuroqIipaSkaP/+/frggw+0adMmxcfHS5KWLFmixMREVVRUKDY2Vm+++abq6uqUl5en8PBwDRo0SAcOHNArr7yi6dOny2azKS8vT7fffrvS0tIkSQMGDFBpaany8vJUUFAQtF4AAAAQ2i56T/DBgwfl9Xo1ZswY61p4eLhGjhypbdu2SfphBbdbt25yu91WzfDhw9W1a9eAmhEjRgSsNCckJOjIkSM6ePCgJGn79u0Bz2msabxHsHoBAABAaLvoI9K8Xq8kyeFwBFx3OBw6cuSIJKmyslJ2u102m80at9ls6tGjhyorK62a6Ojos+7RONanTx95vd4mn9N4j2D10pSKiopzfRuCrq2fh9bBPHZ+zGFoYB7/r8ubXdmRvncdqRf8WPP/PEltO4/n+j/8nBPcTG25TYJtGaGBeez8mMPQwDw2YUvzzwnuKN875rEDa8GfJ6nj/Jm66BDscrkkSVVVVerVq5d1vaqqSk6nU5LkdDpVXV0tv99vrcD6/X4dO3YsoKaqqirg3o2/bqxxuVxN1vx4PBi9AAAABAMvJum4LnpPcO/eveVyuVRSUmJdq6+vV1lZmbXvNj4+XjU1NfJ4PFaNx+NRbW1tQE1ZWZnq6+utmpKSEkVFRal3796SpGHDhgU8p7Gm8R7B6gUAAAChrVkhuKamRuXl5SovL9eZM2d06NAhlZeX66uvvpLNZtNTTz2lpUuXasOGDdq7d6+mTp2qrl276sEHH5T0wykOP//5zzVr1ix5PB55PB7NmjVL99xzj7Uk/uCDDyo8PFxTp07V3r17tWHDBuXm5mrq1KnWiu2UKVO0efNmLVmyRAcOHNDixYtVWlqqp556SpKC1gsAAABCW7O2Q+zcuVP33Xef9evMzExlZmbq0UcfVV5enmbMmKG6ujrNnj1bPp9PQ4cO1dq1a3XFFVdYX5Ofn6/09HQ98MADkqTExEQtWrTIGu/evbvWrVuntLQ0jR49WhEREZo2bZqmT59u1bjdbhUWFmrBggVauHCh+vbtq8LCQt16661WTTB6AQAAQGiz+Xw+//nL0JbY/B8amMfOjzkMDczj2TrjPtXOOo+d8XvdUi35PW4f9V2HmceL3hMMAAAAdDaEYAAAABiHEAwAAADjEIIBAABgHEIwAAAAjEMIBgAAgHEu+rXJAAAgdJlwxFdH0ZLvtcT3+2KxEgwAAADjsBIMAAAQ4ljRPxsrwQAAADAOK8EAAACdUEv3ECMQK8EAAAAwDiEYAAAAxmE7BAAAACymbLNgJRgAAADGIQQDAADAOIRgAAAAGIcQDAAAAOMQggEAAGAcQjAAAACMQwgGAACAcTgnGACADqglZ7X6Uq5pxU6A0MRKMAAAAIzDSjAAAEAzmfI2NROwEgwAAADjEIIBAABgHEIwAAAAjEMIBgAAgHEIwQAAADAOIRgAAADG4Yg0AEBIG7blcmkLL54AEIgQDABAJ8fZtUDLsR0CAAAAxiEEAwAAwDiEYAAAABiHPcEAALQR9u4CHQcrwQAAADAOIRgAAADGYTsEAAAXiO0NQOfFSjAAAACMw0owAAAIipaujLfm2/la0gtvCTQTIRgAALSLlgTV7aNasREYie0QAAAAMA4hGAAAAMYhBAMAAMA47AkGAOBHOPYMMAMhGAAAdHjDtlwubeE/UBA8bIcAAACAcYISghsaGrRgwQLdeOONcrlcuvHGG7VgwQKdPn3aqvH7/crMzNTAgQMVGRmpcePG6dNPPw24j8/nU2pqqmJiYhQTE6PU1FT5fL6Amj179mjs2LGKjIxUXFycsrOz5ff7A2rWr18vt9stp9Mpt9utjRs3Bow3pxcAAACErqCE4NzcXOXn5ys7O1sej0dZWVlauXKlFi9ebNUsXbpUK1asUHZ2toqLi+VwOJSUlKQTJ05YNZMmTVJ5ebmKiopUVFSk8vJyTZ482Ro/fvy4kpKS5HQ6VVxcrKysLC1btkzLly+3ajwejyZOnKjk5GSVlpYqOTlZEyZM0I4dO1rUCwAAAEJXUPYEezwe3XvvvUpMTJQk9e7dW4mJifqv//ovST+svObl5WnmzJkaP368JCkvL0+xsbEqKipSSkqK9u/frw8++ECbNm1SfHy8JGnJkiVKTExURUWFYmNj9eabb6qurk55eXkKDw/XoEGDdODAAb3yyiuaPn26bDab8vLydPvttystLU2SNGDAAJWWliovL08FBQXN6gUAAAChLSgrwcOHD9eWLVt04MABSdK+fftUWlqqu+66S5J08OBBeb1ejRkzxvqa8PBwjRw5Utu2bZP0Q5Du1q2b3G53wH27du0aUDNixAiFh4dbNQkJCTpy5IgOHjwoSdq+fXvAcxprGu/RnF4AAAAQ2oKyEjxz5kzV1NTI7XYrLCxMp0+fVlpamiZNmiRJ8nq9kiSHwxHwdQ6HQ0eOHJEkVVZWym63y2azWeM2m009evRQZWWlVRMdHX3WPRrH+vTpI6/X2+RzGu/RnF6aUlFR0YzvRPC09fPQOpjHzo85DAWXt3cD6OBa9vecP08Xqy1/rsbGxv7kWFBC8Nq1a/WnP/1J+fn5GjhwoHbv3q2MjAzFxMTo8ccfD8Yj2t25vonB1rj9A50b89j5MYchgmO1cB4t+nvOn6eL1lF+rgYlBM+bN0/Tp0/XAw88IEkaPHiwvvrqKy1ZskSPP/64XC6XJKmqqkq9evWyvq6qqkpOp1OS5HQ6VV1dLb/fb60G+/1+HTt2LKCmqqoq4NmNv26scblcTdb8ePx8vQAAAHPwghQzBWVP8HfffaewsLCAa2FhYTpz5oykHz4o53K5VFJSYo3X19errKzM2gMcHx+vmpoaeTweq8bj8ai2tjagpqysTPX19VZNSUmJoqKi1Lt3b0nSsGHDAp7TWNN4j+b0AgAAgNAWlpGR8cLF3mT//v1644031L9/f1166aUqLS3VSy+9pPvvv18JCQmy2WxqaGhQbm6u+vXrp4aGBj333HPyer3Kzc3VZZddph49emjHjh0qKirSDTfcoMOHD2vWrFkaMmSIdUxav379tGrVKu3evVuxsbEqKyvTvHnzNHPmTCvARkVFaeHCherSpYvsdrtef/11rV69WkuXLlV0dHSzemlvX3/9tex2e3u3gYvEPHZ+zGFoyNrF8ZdAR5Eac6rD/FwNynaIRYsW6eWXX9YzzzyjY8eOyeVy6YknnlB6erpVM2PGDNXV1Wn27Nny+XwaOnSo1q5dqyuuuMKqyc/PV3p6urWtIjExUYsWLbLGu3fvrnXr1iktLU2jR49WRESEpk2bpunTp1s1brdbhYWFWrBggRYuXKi+ffuqsLBQt956a4t6AQAAQOiy+Xw+//nL0Jb4ME5oYB47P+YwNLDfE+g4to/6rsP8XA3KnmAAAACgMyEEAwAAwDiEYAAAABgnKB+MAwCgLbHPF8DFYiUYAAAAxiEEAwAAwDiEYAAAABiHEAwAAADjEIIBAABgHEIwAAAAjEMIBgAAgHEIwQAAADAOIRgAAADGIQQDAADAOIRgAAAAGIcQDAAAAOMQggEAAGAcQjAAAACMc0l7NwAAgCRFrDrc3i0AMAgrwQAAADAOIRgAAADGIQQDAADAOOwJBgC0Cvb4AujIWAkGAACAcQjBAAAAMA4hGAAAAMYhBAMAAMA4hGAAAAAYh9MhAADNxokPAEIFK8EAAAAwDiEYAAAAxiEEAwAAwDiEYAAAABiHEAwAAADjEIIBAABgHI5IAwCDceQZAFMRggEgxBBsAeD82A4BAAAA4xCCAQAAYBy2QwBAJ8AWBwAILlaCAQAAYBxCMAAAAIxDCAYAAIBxCMEAAAAwDiEYAAAAxiEEAwAAwDiEYAAAABgnaCH46NGjmjJlivr16yeXyyW3260tW7ZY436/X5mZmRo4cKAiIyM1btw4ffrppwH38Pl8Sk1NVUxMjGJiYpSamiqfzxdQs2fPHo0dO1aRkZGKi4tTdna2/H5/QM369evldrvldDrldru1cePGgPHm9AIAAIDQFZQQ7PP5dM8998jv92vNmjXatm2bFi1aJIfDYdUsXbpUK1asUHZ2toqLi+VwOJSUlKQTJ05YNZMmTVJ5ebmKiopUVFSk8vJyTZ482Ro/fvy4kpKS5HQ6VVxcrKysLC1btkzLly+3ajwejyZOnKjk5GSVlpYqOTlZEyZM0I4dO1rUCwAAAEKXzefz+c9fdm4vvviitm7dqvfee6/Jcb/fr4EDB+rJJ59UWlqaJKmurk6xsbF66aWXlJKSov3798vtdmvTpk0aPny4JKmsrEyJiYnavn27YmNjVVBQoBdeeEEHDhxQeHi4JCknJ0eFhYXau3evbDabUlJS9M033+jtt9+2nj9+/Hj16NFDBQUFzeqlvVVUVCg2Nra928BFYh47v440h7wxDkAo2D7quw7zczUoK8HvvPOOhg4dqpSUFPXv31+jRo3SH/7wB2ubwsGDB+X1ejVmzBjra8LDwzVy5Eht27ZN0g8ruN26dZPb7bZqhg8frq5duwbUjBgxwgrAkpSQkKAjR47o4MGDkqTt27cHPKexpvEezekFAAAAoe2SYNzkyy+/VEFBgaZOnaqZM2dq9+7dmjNnjiQpNTVVXq9XkgK2RzT++siRI5KkyspK2e122Ww2a9xms6lHjx6qrKy0aqKjo8+6R+NYnz595PV6m3xO4z2a00tTKioqmvGdCJ62fh5aB/PY+XWcOby8vRsAgKBoy5+r51p1DkoIPnPmjG655RbNnz9fknTTTTfpiy++UH5+vlJTU4PxiHbXlkv3Hel/weLCMY+dX4eawy1shwAQGjrKz9WgbIdwuVwaMGBAwLXrrrtOhw4dssYlqaqqKqCmqqpKTqdTkuR0OlVdXR1w0oPf79exY8cCapq6R+NY47PO9Zzm9AIAAIDQFpQQPHz4cH322WcB1z777DP16tVLktS7d2+5XC6VlJRY4/X19SorK7P2AMfHx6umpkYej8eq8Xg8qq2tDagpKytTfX29VVNSUqKoqCj17t1bkjRs2LCA5zTWNN6jOb0AAAAgtIVlZGS8cLE36dmzp7Kzs/V3f/d3ioyM1IcffqgFCxZo1qxZGjp0qGw2mxoaGpSbm6t+/fqpoaFBzz33nLxer3Jzc3XZZZepR48e2rFjh4qKinTDDTfo8OHDmjVrloYMGWIdk9avXz+tWrVKu3fvVmxsrMrKyjRv3jzNnDnTCrBRUVFauHChunTpIrvdrtdff12rV6/W0qVLFR0d3axe2tvXX38tu93e3m3gIjGPnV9HmsOsXRzhCKDzS4051WF+rgZlT/CQIUO0evVqvfjii8rJyVHPnj317LPPatKkSVbNjBkzVFdXp9mzZ8vn82no0KFau3atrrjiCqsmPz9f6enpeuCBByRJiYmJWrRokTXevXt3rVu3TmlpaRo9erQiIiI0bdo0TZ8+3apxu90qLCzUggULtHDhQvXt21eFhYW69dZbW9QLAAAAQldQzglGcHWoD+PggjGPnV9HmkPOCQYQCkLunGAAAACgMyEEAwAAwDiEYAAAABiHEAwAAADjEIIBAABgHEIwAAAAjEMIBgAAgHEIwQAAADAOIRgAAADGCcprkwEALcMb4ACgfbESDAAAAOMQggEAAGAcQjAAAACMQwgGAACAcQjBAAAAMA6nQwBAkHDiAwB0HqwEAwAAwDiEYAAAABiHEAwAAADjsCcYgFFasm93+6hWbAQA0K5YCQYAAIBxWAkGgJ8wbMvl0hZOfACAUMRKMAAAAIxDCAYAAIBx2A4BoNPjJRUAgJYiBAPocAi1AIDWxnYIAAAAGIcQDAAAAOMQggEAAGAcQjAAAACMQwgGAACAcQjBAAAAMA4hGAAAAMYhBAMAAMA4hGAAAAAYhxAMAAAA4xCCAQAAYBxCMAAAAIxDCAYAAIBxCMEAAAAwDiEYAAAAxrmkvRsAYIaIVYfbuwUAACysBAMAAMA4hGAAAAAYhxAMAAAA4xCCAQAAYBxCMAAAAIzTKiF48eLFioiI0OzZs61rfr9fmZmZGjhwoCIjIzVu3Dh9+umnAV/n8/mUmpqqmJgYxcTEKDU1VT6fL6Bmz549Gjt2rCIjIxUXF6fs7Gz5/f6AmvXr18vtdsvpdMrtdmvjxo0B483pBQAAAKEr6CF4+/bteu211zR48OCA60uXLtWKFSuUnZ2t4uJiORwOJSUl6cSJE1bNpEmTVF5erqKiIhUVFam8vFyTJ0+2xo8fP66kpCQ5nU4VFxcrKytLy5Yt0/Lly60aj8ejiRMnKjk5WaWlpUpOTtaECRO0Y8eOFvUCAACA0BXUEPztt9/qySef1PLlyxUREWFd9/v9ysvL08yZMzV+/HgNGjRIeXl5qqmpUVFRkSRp//79+uCDD5Sbm6v4+HjFx8dryZIleu+991RRUSFJevPNN1VXV6e8vDwNGjRI48eP14wZM/TKK69Yq8F5eXm6/fbblZaWpgEDBigtLU2jRo1SXl5es3sBAABAaAtqCG4MlnfccUfA9YMHD8rr9WrMmDHWtfDwcI0cOVLbtm2T9MMKbrdu3eR2u62a4cOHq2vXrgE1I0aMUHh4uFWTkJCgI0eO6ODBg5J+WIn+8XMaaxrv0ZxeAAAAENqC9sa4119/XV988YX+8Ic/nDXm9XolSQ6HI+C6w+HQkSNHJEmVlZWy2+2y2WzWuM1mU48ePVRZWWnVREdHn3WPxrE+ffrI6/U2+ZzGezSnl6Y0rka3lbZ+HloH8/hjl7d3AwCADqAt/90YGxv7k2NBCcEVFRV68cUXtWnTJl166aXBuGWHc65vYrBVVFS06fPQOpjH/2MLr00GALRtpjqXoGyH8Hg8qq6u1vDhw2W322W327V161bl5+fLbrfr6quvliRVVVUFfF1VVZWcTqckyel0qrq6OuCkB7/fr2PHjgXUNHWPxjFJcrlc53yOy+U6by8AAAAIbUEJwePGjdNHH32k0tJS659bbrlFDzzwgEpLS9W/f3+5XC6VlJRYX1NfX6+ysjJrD3B8fLxqamrk8XisGo/Ho9ra2oCasrIy1dfXWzUlJSWKiopS7969JUnDhg0LeE5jTeM9evfufd5eAAAAENqCsh0iIiIi4DQISbr88st11VVXadCgQZKkp556SosXL1ZsbKz69++v3/72t+ratasefPBBSdKAAQP085//XLNmzVJubq4kadasWbrnnnusZfMHH3xQ2dnZmjp1qtLS0vTZZ58pNzdX6enp1l7iKVOmaOzYsVqyZInGjRunP//5zyotLdWmTZsk/bDP+Hy9AAAAILQF7YNx5zNjxgzV1dVp9uzZ8vl8Gjp0qNauXasrrrjCqsnPz1d6eroeeOABSVJiYqIWLVpkjXfv3l3r1q1TWlqaRo8erYiICE2bNk3Tp0+3atxutwoLC7VgwQItXLhQffv2VWFhoW699dYW9QIAAIDQZfP5fP7zl6Et8YGq0MA8BopYxQfjAMB020d912H+3dgqr00GAAAAOjJCMAAAAIxDCAYAAIBxCMEAAAAwDiEYAAAAxiEEAwAAwDiEYAAAABiHEAwAAADjEIIBAABgnDZ7bTKA0MNb4AAAnRUrwQAAADAOIRgAAADGIQQDAADAOIRgAAAAGIcQDAAAAOMQggEAAGAcQjAAAACMwznBACyc+wsAMAUrwQAAADAOK8FAiGN1FwCAs7ESDAAAAOMQggEAAGAcQjAAAACMQwgGAACAcQjBAAAAMA4hGAAAAMbhiDSgk+HIMwAALh4rwQAAADAOIRgAAADGIQQDAADAOIRgAAAAGIcQDAAAAOMQggEAAGAcjkgDOgCOPQMAoG0RgoFWMmzL5dIWwi0AAB0R2yEAAABgHEIwAAAAjEMIBgAAgHEIwQAAADAOIRgAAADG4XQIoJk4xgwAgNDBSjAAAACMw0owjMbqLgAAZmIlGAAAAMYhBAMAAMA4hGAAAAAYhxAMAAAA4wQlBC9evFijR49Wr1691K9fPz388MPau3dvQI3f71dmZqYGDhyoyMhIjRs3Tp9++mlAjc/nU2pqqmJiYhQTE6PU1FT5fL6Amj179mjs2LGKjIxUXFycsrOz5ff7A2rWr18vt9stp9Mpt9utjRs3trgXAAAAhK6ghOAtW7bol7/8pd577z1t2LBBl1xyif7xH/9R33zzjVWzdOlSrVixQtnZ2SouLpbD4VAsm/wLAAAN80lEQVRSUpJOnDhh1UyaNEnl5eUqKipSUVGRysvLNXnyZGv8+PHjSkpKktPpVHFxsbKysrRs2TItX77cqvF4PJo4caKSk5NVWlqq5ORkTZgwQTt27GhRLwAAAAhdNp/P5z9/WcvU1NQoJiZGq1evVmJiovx+vwYOHKgnn3xSaWlpkqS6ujrFxsbqpZdeUkpKivbv3y+3261NmzZp+PDhkqSysjIlJiZq+/btio2NVUFBgV544QUdOHBA4eHhkqScnBwVFhZq7969stlsSklJ0TfffKO3337b6mf8+PHq0aOHCgoKmtVLe6uoqFBsbGx7t2EEjkgDAKDtbB/1XYfJOK2yJ7impkZnzpxRRESEJOngwYPyer0aM2aMVRMeHq6RI0dq27Ztkn5Ywe3WrZvcbrdVM3z4cHXt2jWgZsSIEVYAlqSEhAQdOXJEBw8elCRt37494DmNNY33aE4vAAAACG2t8rKMjIwM3XDDDYqPj5ckeb1eSZLD4QioczgcOnLkiCSpsrJSdrtdNpvNGrfZbOrRo4cqKyutmujo6LPu0TjWp08feb3eJp/TeI/m9NKUioqKZvzOg6etn2euy9u7AQAAjNKWGedcq85BD8HPPvusPv74Y23atElhYWHBvn27acule7ZDtKEtbIcAAKAtdZSME9TtEHPnztVbb72lDRs2qE+fPtZ1l8slSaqqqgqor6qqktPplCQ5nU5VV1cHnPTg9/t17NixgJqm7tE41viscz2nOb0AAAAgtAUtBM+ZM8cKwNddd13AWO/eveVyuVRSUmJdq6+vV1lZmbUHOD4+XjU1NfJ4PFaNx+NRbW1tQE1ZWZnq6+utmpKSEkVFRal3796SpGHDhgU8p7Gm8R7N6QUAAAChLSwjI+OFi71JWlqa/vSnP+m1115Tz549VVtbq9raWklSly5dZLPZ1NDQoNzcXPXr108NDQ167rnn5PV6lZubq8suu0w9evTQjh07VFRUpBtuuEGHDx/WrFmzNGTIEOuYtH79+mnVqlXavXu3YmNjVVZWpnnz5mnmzJlWgI2KitLChQvVpUsX2e12vf7661q9erWWLl2q6OjoZvXS3r7++mvZ7fb2bsMIWbs4Fg8AgLaSGnOqw2ScoByR1ngKxP81Z84czZ07V9IPWxuysrL02muvyefzaejQofrtb3+rQYMGWfU+n0/p6en6y1/+IklKTEzUokWLAu6/Z88epaWl6ZNPPlFERIRSUlI0Z86cgA/UrV+/XgsWLNCXX36pvn376vnnn9c//MM/WOPN6aU9sSe47XBEGgAAbacjHZHWKucE4+IQgtsOIRgAgLbTkUJwqxyRBrQXQi0AAGiOVnlZBgAAANCRsRKMDo/VXQAAEGysBAMAAMA4hGAAAAAYhxAMAAAA47AnGO2Cfb4AAKA9sRIMAAAA4xCCAQAAYBxCMAAAAIxDCAYAAIBxCMEAAAAwDiEYAAAAxiEEAwAAwDiEYAAAABiHEAwAAADj8MY4BAVvgAMAAJ0JIRg/iWALAABCFdshAAAAYBxCMAAAAIxDCAYAAIBxCMEAAAAwDiEYAAAAxuF0iE6uJSc4+FKuacVOAAAAOg9WggEAAGAcQjAAAACMQwgGAACAcQjBAAAAMA4fjDMIr0EGAAD4ASvBAAAAMA4hGAAAAMYhBAMAAMA4hGAAAAAYhxAMAAAA43A6RAc0bMvl0hZOcgAAAGgtrAQDAADAOIRgAAAAGIcQDAAAAOMQggEAAGAcQjAAAACMQwgGAACAcQjBAAAAMA4hGAAAAMYhBAMAAMA4hGAAAAAYhxAMAAAA4xCCAQAAYByjQ3B+fr5uvPFGuVwu3Xnnnfroo4/auyUAAAC0AWND8Nq1a5WRkaFnnnlGmzdvVnx8vJKTk/XVV1+1d2sAAABoZcaG4BUrVuif/umf9MQTT2jAgAHKycmRy+VSYWFhe7cGAACAVnZJezfQHk6ePKldu3bp6aefDrg+ZswYbdu2rZ26+v98Kde0dwsAAAAhzciV4OrqajU0NMjhcARcdzgcqqysbKeuAAAA0FaMDMEAAAAwm5Eh2G63KywsTFVVVQHXq6qq5HQ626krAAAAtBUjQ3CXLl108803q6SkJOB6SUmJ3G53O3UFAACAtmLkB+Mkadq0aZo8ebKGDh0qt9utwsJCHT16VCkpKe3dGgAAAFqZkSvBknT//fcrMzNTOTk5uv322/Xxxx9rzZo1iomJafVnt/QlHVu2bNGdd94pl8ulm266iWPcOoCWzOGGDRuUlJSkfv36qWfPnkpISNC7777bht3ip1zoC3PKyspkt9s1YsSIVu4QzdHSeTx58qRefvll3XjjjXI6nbr++uv16quvtlG3+Cktncc333xTo0aNUlRUlK677jqlpqbK6/W2UbdoytatW/XII48oLi5OERERWr169Xm/Zs+ePRo7dqwiIyMVFxen7Oxs+f3+NujW4BAsSZMmTdLu3btVWVmpDz/8ULfddlurP7OlL+n48ssv9dBDDyk+Pl6bN2/Wr3/9a6Wnp2v9+vWt3iua1tI53Lp1q+644w6tWbNGmzdv1l133aVf/OIXvKGwnV3oC3N8Pp+mTJmiO++8s406xblcyDxOnDhRf/3rX7V06VJt375dr732mgYPHtyGXeP/auk8fvzxx5o8ebIeffRRlZWVafXq1dq3b5+efPLJNu4cP1ZbW6tBgwYpKytL4eHh560/fvy4kpKS5HQ6VVxcrKysLC1btkzLly9vg24lm8/na5u4DUlSQkKCBg8erN/97nfWtSFDhmj8+PGaP3/+WfXz58/Xxo0b9cknn1jXnn76ae3bt0/vv/9+m/SMQC2dw6aMGTNGI0aM0Msvv9xabeI8LnQef/GLX+j666+X3+/Xhg0bVFZW1hbt4ie0dB6Li4s1YcIE7dy5U3a7vS1bxTm0dB6XLVum3//+9/rb3/5mXfv3f/93zZkzR4cPH26TnnFu11xzjRYtWqTHHnvsJ2sKCgr0wgsv6MCBA1ZozsnJUWFhofbu3SubzdaqPRq9EtzWGl/SMWbMmIDr53pJh8fjOas+ISFBO3fu1KlTp1qtVzTtQuawKTU1NYqIiAh2e2imC53H/Px8VVVVafbs2a3dIprhQubxnXfe0S233KIVK1Zo0KBBGjJkiNLT01VTU9MWLaMJFzKPbrdbXq9Xf/nLX+T3+1VdXa21a9fqrrvuaouWESQej0cjRowIWDVOSEjQkSNHdPDgwVZ/PiG4DV3ISzoqKyubrD99+rSqq6tbrVc0LRgvWlm5cqX+93//Vw8//HBrtIhmuJB53LNnj7Kzs/X73/9eYWFhbdEmzuNC5vHLL7/Uxx9/rL/97W/613/9V+Xk5Oivf/2rpk6d2hYtowkXMo/x8fEqKChQamqqHA6H+vXrJ7/fr7y8vLZoGUHyUxmncay1EYKBNrR+/XrNmzdPK1eubJMPYSI4vv/+e02cOFEvvfSS+vTp097t4CKcOXNGNptNK1eu1K233qqEhATl5ORow4YNvDG0E9m3b5/mzJmj2bNn6z//8z/11ltvyev1aubMme3dGjoRY49Iaw8X8pIOp9PZZP0ll1zCfrZ2cDEvWlm/fr2mTJmiV199VYmJia3ZJs6jpfN49OhR7d+/X9OmTdO0adMk/RCm/H6/7Ha73nzzzbP+Vy5a34X8fXS5XIqKilL37t2ta9ddd50k6dChQ7wwqR1cyDwuXrxYQ4YM0a9+9StJ0vXXX6/LL79ciYmJmjdvnq655ppW7xsX76cyTuNYa2MluA1dyEs64uPjm6y/5ZZbdOmll7Zar2jahb5oZd26dZo8ebJeeeUVjR8/vrXbxHm0dB6jo6P10UcfqbS01Ppn4sSJuvbaa1VaWqr4+Pi2ah0/ciF/H4cPH66jR48G7AH+/PPPJUm9evVqvWbxky5kHuvq6s7altT46zNnzrROowi6+Ph4lZWVqb6+3rpWUlKiqKgo9e7du9WfH5aRkfFCqz8FliuuuEKZmZmKjIzUz372M+Xk5Oijjz7S8uXL1b17d02ePFl//vOfdd9990mS+vbtq6VLl6qqqkq9evXSu+++q3/5l3/RggULNHDgwHb+3ZippXP41ltvKTU1Vb/5zW909913q7a2VrW1tTp16lSzjpBB62jJPIaFhcnhcAT888knn+jzzz/X3Llz1aVLl/b+7RirpX8f+/fvr9WrV2vXrl0aOHCgPv/8c82ePVu33XbbOT/FjtbV0nmsq6vTsmXLZLfbdfXVV2vfvn3KyMiQy+XSjBkz2vl3Y66amhrt27dPXq9X//Zv/6ZBgwbpyiuv1MmTJ9W9e3f95je/0eLFi/Xoo49Kkvr166dVq1Zp9+7dio2NVVlZmebNm6eZM2e2yRt82Q7Rxu6//359/fXXysnJkdfrVVxcXMBLOg4dOhRQ36dPH61Zs0bPPvusCgsLFRkZqezsbFYT21FL57CwsFCnT5/W3LlzNXfuXOv6bbfdpnfeeadNe8f/19J5RMfU0nns1q2b3n77baWnp2vMmDGKiIjQuHHjmn28IVpHS+fxscceU01NjVauXKnnn39eV155pe644w698MIL7dA9Gu3cudP6DxVJyszMVGZmph599FHl5eXp6NGj+p//+R9rvHv37lq3bp3S0tI0evRoRUREaNq0aZo+fXqb9Ms5wQAAADAOe4IBAABgHEIwAAAAjEMIBgAAgHEIwQAAADAOIRgAAADGIQQDAADAOIRgAAAAGIcQDAAAAOMQggEAAGCc/wfBFHP5piWzjAAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.hist(G.es[\"time\"], bins=50);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Discretize the time scale using non-overlapping windows" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "N = 16 # Number of windows" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "subgs = list(range(N))\n", "for i in range(N):\n", " subgs[i] = G.subgraph_edges(G.es(lambda e: (e[\"time\"] < (i+1)/N) & (e[\"time\"] > i/N)))" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "IGRAPH U--- 20980 250823 -- \n", "+ attr: id (v), id (e), time (e)\n", "IGRAPH U--- 37230 422690 -- \n", "+ attr: id (v), id (e), time (e)\n", "IGRAPH U--- 71040 613317 -- \n", "+ attr: id (v), id (e), time (e)\n", "IGRAPH U--- 118686 820759 -- \n", "+ attr: id (v), id (e), time (e)\n", "IGRAPH U--- 158286 1005142 -- \n", "+ attr: id (v), id (e), time (e)\n", "IGRAPH U--- 230278 1406586 -- \n", "+ attr: id (v), id (e), time (e)\n", "IGRAPH U--- 275189 1590592 -- \n", "+ attr: id (v), id (e), time (e)\n", "IGRAPH U--- 337108 1906255 -- \n", "+ attr: id (v), id (e), time (e)\n", "IGRAPH U--- 404867 2123235 -- \n", "+ attr: id (v), id (e), time (e)\n", "IGRAPH U--- 495492 2476938 -- \n", "+ attr: id (v), id (e), time (e)\n", "IGRAPH U--- 554112 2644770 -- \n", "+ attr: id (v), id (e), time (e)\n", "IGRAPH U--- 634124 2971624 -- \n", "+ attr: id (v), id (e), time (e)\n", "IGRAPH U--- 635831 2644386 -- \n", "+ attr: id (v), id (e), time (e)\n", "IGRAPH U--- 678741 2620435 -- \n", "+ attr: id (v), id (e), time (e)\n", "IGRAPH U--- 743367 2993869 -- \n", "+ attr: id (v), id (e), time (e)\n", "IGRAPH U--- 772225 3146410 -- \n", "+ attr: id (v), id (e), time (e)\n" ] } ], "source": [ "for g in subgs:\n", " print(g.summary())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Weight rank clique filtration and persistent homology" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "from filtration import wrcf" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "def get_diagram(graph, weight=\"weight\"):\n", " filt = wrcf(graph, weight=weight)\n", " pers = d.homology_persistence(filt)\n", " return(d.init_diagrams(pers, filt))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Apply persistent homology to each window" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "from dask.distributed import Client" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [], "source": [ "client = Client(processes=True)" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "dgms = client.map(get_diagram, subgs)" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ]" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dgms" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "distributed.comm.inproc - WARNING - Closing dangling queue in \n", "distributed.comm.inproc - WARNING - Closing dangling queue in \n" ] }, { "ename": "KeyError", "evalue": "'Attribute does not exist'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mdgms\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mclient\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgather\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdgms\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mdgms\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/site-packages/distributed/client.py\u001b[0m in \u001b[0;36mgather\u001b[0;34m(self, futures, errors, maxsize, direct, asynchronous)\u001b[0m\n\u001b[1;32m 1506\u001b[0m return self.sync(self._gather, futures, errors=errors,\n\u001b[1;32m 1507\u001b[0m \u001b[0mdirect\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdirect\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlocal_worker\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mlocal_worker\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1508\u001b[0;31m asynchronous=asynchronous)\n\u001b[0m\u001b[1;32m 1509\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1510\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcoroutine\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/site-packages/distributed/client.py\u001b[0m in \u001b[0;36msync\u001b[0;34m(self, func, *args, **kwargs)\u001b[0m\n\u001b[1;32m 613\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mfuture\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 614\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 615\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0msync\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mloop\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 616\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 617\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__repr__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/site-packages/distributed/utils.py\u001b[0m in \u001b[0;36msync\u001b[0;34m(loop, func, *args, **kwargs)\u001b[0m\n\u001b[1;32m 251\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwait\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 252\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0merror\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 253\u001b[0;31m \u001b[0msix\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreraise\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0merror\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 254\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 255\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mresult\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/site-packages/six.py\u001b[0m in \u001b[0;36mreraise\u001b[0;34m(tp, value, tb)\u001b[0m\n\u001b[1;32m 691\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__traceback__\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mtb\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 692\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwith_traceback\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtb\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 693\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 694\u001b[0m \u001b[0;32mfinally\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 695\u001b[0m \u001b[0mvalue\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/site-packages/distributed/utils.py\u001b[0m in \u001b[0;36mf\u001b[0;34m()\u001b[0m\n\u001b[1;32m 236\u001b[0m \u001b[0;32myield\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmoment\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 237\u001b[0m \u001b[0mthread_state\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0masynchronous\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 238\u001b[0;31m \u001b[0mresult\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32myield\u001b[0m \u001b[0mmake_coro\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 239\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mException\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mexc\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 240\u001b[0m \u001b[0merror\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msys\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexc_info\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/site-packages/tornado/gen.py\u001b[0m in \u001b[0;36mrun\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1097\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1098\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1099\u001b[0;31m \u001b[0mvalue\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfuture\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mresult\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1100\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mException\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1101\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhad_exception\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/lib/python3.5/asyncio/futures.py\u001b[0m in \u001b[0;36mresult\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 272\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_tb_logger\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 273\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_exception\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 274\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_exception\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 275\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_result\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 276\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/site-packages/tornado/gen.py\u001b[0m in \u001b[0;36mrun\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1105\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mexc_info\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1106\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1107\u001b[0;31m \u001b[0myielded\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mthrow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mexc_info\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1108\u001b[0m \u001b[0;32mfinally\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1109\u001b[0m \u001b[0;31m# Break up a reference to itself\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/site-packages/distributed/client.py\u001b[0m in \u001b[0;36m_gather\u001b[0;34m(self, futures, errors, direct, local_worker)\u001b[0m\n\u001b[1;32m 1383\u001b[0m six.reraise(type(exception),\n\u001b[1;32m 1384\u001b[0m \u001b[0mexception\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1385\u001b[0;31m traceback)\n\u001b[0m\u001b[1;32m 1386\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0merrors\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'skip'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1387\u001b[0m \u001b[0mbad_keys\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0madd\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/site-packages/six.py\u001b[0m in \u001b[0;36mreraise\u001b[0;34m(tp, value, tb)\u001b[0m\n\u001b[1;32m 690\u001b[0m \u001b[0mvalue\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtp\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 691\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__traceback__\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mtb\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 692\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwith_traceback\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtb\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 693\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 694\u001b[0m \u001b[0;32mfinally\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m\u001b[0m in \u001b[0;36mget_diagram\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mget_diagram\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mgraph\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mweight\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"weight\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mfilt\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mwrcf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mgraph\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mweight\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mweight\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mpers\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0md\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhomology_persistence\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilt\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mreturn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0md\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minit_diagrams\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpers\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfilt\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/tda-networks/filtration.py\u001b[0m in \u001b[0;36mwrcf\u001b[0;34m()\u001b[0m\n\u001b[1;32m 10\u001b[0m \u001b[0mfilt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0md\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mSimplex\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mv\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 11\u001b[0m \u001b[0;31m# Rank all edge weights\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 12\u001b[0;31m \u001b[0mdistinct_weights\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0munique\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mG\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mes\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mweight\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 13\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mw\u001b[0m \u001b[0;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdistinct_weights\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 14\u001b[0m \u001b[0;31m# At filtration step t, threshold the graph at weight[t]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mKeyError\u001b[0m: 'Attribute does not exist'" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Future exception was never retrieved\n", "future: \n", "Traceback (most recent call last):\n", " File \"/home/lozeve/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/site-packages/tornado/gen.py\", line 1113, in run\n", " yielded = self.gen.send(value)\n", " File \"/home/lozeve/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/site-packages/distributed/client.py\", line 1357, in wait\n", " raise AllExit()\n", "distributed.client.AllExit\n", "Future exception was never retrieved\n", "future: \n", "Traceback (most recent call last):\n", " File \"/home/lozeve/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/site-packages/tornado/gen.py\", line 1113, in run\n", " yielded = self.gen.send(value)\n", " File \"/home/lozeve/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/site-packages/distributed/client.py\", line 1357, in wait\n", " raise AllExit()\n", "distributed.client.AllExit\n", "Future exception was never retrieved\n", "future: \n", "Traceback (most recent call last):\n", " File \"/home/lozeve/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/site-packages/tornado/gen.py\", line 1113, in run\n", " yielded = self.gen.send(value)\n", " File \"/home/lozeve/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/site-packages/distributed/client.py\", line 1357, in wait\n", " raise AllExit()\n", "distributed.client.AllExit\n", "Future exception was never retrieved\n", "future: \n", "Traceback (most recent call last):\n", " File \"/home/lozeve/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/site-packages/tornado/gen.py\", line 1113, in run\n", " yielded = self.gen.send(value)\n", " File \"/home/lozeve/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/site-packages/distributed/client.py\", line 1357, in wait\n", " raise AllExit()\n", "distributed.client.AllExit\n", "Future exception was never retrieved\n", "future: \n", "Traceback (most recent call last):\n", " File \"/home/lozeve/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/site-packages/tornado/gen.py\", line 1113, in run\n", " yielded = self.gen.send(value)\n", " File \"/home/lozeve/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/site-packages/distributed/client.py\", line 1357, in wait\n", " raise AllExit()\n", "distributed.client.AllExit\n", "Future exception was never retrieved\n", "future: \n", "Traceback (most recent call last):\n", " File \"/home/lozeve/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/site-packages/tornado/gen.py\", line 1113, in run\n", " yielded = self.gen.send(value)\n", " File \"/home/lozeve/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/site-packages/distributed/client.py\", line 1357, in wait\n", " raise AllExit()\n", "distributed.client.AllExit\n", "Future exception was never retrieved\n", "future: \n", "Traceback (most recent call last):\n", " File \"/home/lozeve/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/site-packages/tornado/gen.py\", line 1113, in run\n", " yielded = self.gen.send(value)\n", " File \"/home/lozeve/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/site-packages/distributed/client.py\", line 1357, in wait\n", " raise AllExit()\n", "distributed.client.AllExit\n", "Future exception was never retrieved\n", "future: \n", "Traceback (most recent call last):\n", " File \"/home/lozeve/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/site-packages/tornado/gen.py\", line 1113, in run\n", " yielded = self.gen.send(value)\n", " File \"/home/lozeve/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/site-packages/distributed/client.py\", line 1357, in wait\n", " raise AllExit()\n", "distributed.client.AllExit\n", "Future exception was never retrieved\n", "future: \n", "Traceback (most recent call last):\n", " File \"/home/lozeve/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/site-packages/tornado/gen.py\", line 1113, in run\n", " yielded = self.gen.send(value)\n", " File \"/home/lozeve/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/site-packages/distributed/client.py\", line 1357, in wait\n", " raise AllExit()\n", "distributed.client.AllExit\n", "Future exception was never retrieved\n", "future: \n", "Traceback (most recent call last):\n", " File \"/home/lozeve/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/site-packages/tornado/gen.py\", line 1113, in run\n", " yielded = self.gen.send(value)\n", " File \"/home/lozeve/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/site-packages/distributed/client.py\", line 1357, in wait\n", " raise AllExit()\n", "distributed.client.AllExit\n", "Future exception was never retrieved\n", "future: \n", "Traceback (most recent call last):\n", " File \"/home/lozeve/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/site-packages/tornado/gen.py\", line 1113, in run\n", " yielded = self.gen.send(value)\n", " File \"/home/lozeve/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/site-packages/distributed/client.py\", line 1357, in wait\n", " raise AllExit()\n", "distributed.client.AllExit\n", "Future exception was never retrieved\n", "future: \n", "Traceback (most recent call last):\n", " File \"/home/lozeve/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/site-packages/tornado/gen.py\", line 1113, in run\n", " yielded = self.gen.send(value)\n", " File \"/home/lozeve/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/site-packages/distributed/client.py\", line 1357, in wait\n", " raise AllExit()\n", "distributed.client.AllExit\n", "Future exception was never retrieved\n", "future: \n", "Traceback (most recent call last):\n", " File \"/home/lozeve/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/site-packages/tornado/gen.py\", line 1113, in run\n", " yielded = self.gen.send(value)\n", " File \"/home/lozeve/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/site-packages/distributed/client.py\", line 1357, in wait\n", " raise AllExit()\n", "distributed.client.AllExit\n", "Future exception was never retrieved\n", "future: \n", "Traceback (most recent call last):\n", " File \"/home/lozeve/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/site-packages/tornado/gen.py\", line 1113, in run\n", " yielded = self.gen.send(value)\n", " File \"/home/lozeve/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/site-packages/distributed/client.py\", line 1357, in wait\n", " raise AllExit()\n", "distributed.client.AllExit\n", "Future exception was never retrieved\n", "future: \n", "Traceback (most recent call last):\n", " File \"/home/lozeve/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/site-packages/tornado/gen.py\", line 1113, in run\n", " yielded = self.gen.send(value)\n", " File \"/home/lozeve/.local/share/virtualenvs/tda-networks--KypeAmE/lib/python3.5/site-packages/distributed/client.py\", line 1357, in wait\n", " raise AllExit()\n", "distributed.client.AllExit\n" ] } ], "source": [ "dgms = client.gather(dgms)\n", "dgms" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "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.5.2" } }, "nbformat": 4, "nbformat_minor": 2 }