{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# [NTDS'18] tutorial 6: linear algebra for graphs and networkx\n", "[ntds'18]: https://github.com/mdeff/ntds_2018\n", "\n", "[Benjamin Ricaud](https://people.epfl.ch/benjamin.ricaud), [EPFL LTS2](https://lts2.epfl.ch)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import networkx as nx\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1 The gradient, incidence and Laplacian matrices" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1.1 Simple unweighted, undirected graph: the path graph\n", "\n", "A first simple example to understand the definition of these matrices and their relationships." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/michael/.conda/envs/ntds_2018/lib/python3.6/site-packages/networkx/drawing/nx_pylab.py:611: MatplotlibDeprecationWarning: isinstance(..., numbers.Number)\n", " if cb.is_numlike(alpha):\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAd0AAAE/CAYAAAADsRnnAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4wLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvqOYd8AAAHOBJREFUeJzt3Xl0VPUB9vFn0GKS14pREUUxalvcmCFAAioii4IStKdqa9u3tc4kAkZlUSJKRSRtbaylb1WwEde4UVqrbJrIKqABJAGSGdfWjYggCRASliRkue8fl0AIIYQwc+/Mne/nHA4w2/n995zv5GbGZRiGIQAAEHId7D4AAADRgtEFAMAijC4AABZhdAEAsAijCwCARRhdAAAswugCAGARRhcAAIswugAAWITRBQDAIowuAAAWYXQBALAIowsAgEUYXQAALHKi3QcAACCkSkulnBzJ75cqKqROnSSPR/L5pM6dLT2Ki+/TBQA4UkGBlJUl5eWZ/6+uPnhfbKxkGNLw4dKkSVJysiVHYnQBAM6TnS1lZEhVVea4HonLZQ7wtGlSenrIj8XbywAAZ2kc3L17j/5YwzAfl5Fh/j/Ew0vpAgCco6BAGjTosMHdISlN0iJJZ0jKkvR/mz83Lk5asUJKSgrZ8bh6GQDgHFlZ5lvKzdwtqaOkrZJel5Qu6ePmD6qqMp8fQpQuAMAZSkulhIRDL5iStEdSvKSPJHXff9ttks6R9Fjz14iJkUpKQnZVM6ULAHCGnJwWb/6vpBN0cHAlqadaKF3JvLDqCK8TDIwuAMAZ/P7DKleSdkvq1Oy2TpJ2tfQaVVVSIBD8s+3H6AIAnKGiosWbT5ZU2ey2Skk/PNLrlJcH70zNMLoAAGfo1LxnTd0l1Un6X5PbiiVddqTXiY8P6rGaYnQBAM7g8ZgXQjXzfyTdLGmKzIuq8iXNk3kx1WFiYyW3O2RH5OplAIAzlJbKSEiQq4Wf6+6QlCppsaTTZV61fNjv6Uohv3qZT6QCADjCVsPQ1/HxSt6yRSc0u+80SXOP9gIul5SSEtIvQeDtZQBARDMMQ7Nnz1bPnj21btgwdYiLa98LxcaaX34QQpQuACBibd26VXfddZc+/fRTzZ8/X3379pX69Wv7Zy83ioszv/QghB8BKVG6AIAI1LRuu3fvrvXr15uDK5lfWjBtmjmkLlfrL+RyHRxcC75liAupAAARZevWrUpPT9fnn3+unJwcJR/pu3ALC83PUs7NNce16WcyN36fbkqK+ZZyiAu3EaMLAIgIjXU7fvx4paWlacqUKYpp4VeEDlNWZn60YyBgfvBFfLz5a0Feb0gvmmoJowsACHvff/+90tPT9d///rf1ug1z/EwXABC2DMPQrFmz1LNnT1166aVav359xA6uxNXLAIAw1Vi3//vf//TOO+8oyaKfu4YSpQsACCvN63bdunWOGFyJ0gUAhJHvv/9ed955p7744gvH1G1TlC4AwHaGYej1119Xz5491aNHD0fVbVOULgDAVlu2bNGdd96pr776ypF12xSlCwCwhWEYeu2115SYmCiPx6PCwkJHD65E6QIAbNC0bnNzc9WnTx+7j2QJShcAYJmW6jZaBleidAEAFtmyZYtGjx6tb775Rnl5eerdu7fdR7IcpQsACCnDMPTqq6+qZ8+eSkxMVGFhYVQOrkTpAgBCaPPmzRo9erQ2btyod999N2rHthGlCwAIOsMw9MorrygxMVG9e/eO6rptitIFAARVY92WlJRo4cKF6tWrl91HChuULgAgKJrXbUFBAYPbDKULADhumzdv1qhRo/Ttt99St62gdAEA7WYYhl5++WUlJiYqKSmJuj0KShcA0C7fffedRo8erU2bNmnRokVKTEy0+0hhj9IFABwTwzCUk5OjXr16KTk5WWvXrmVw24jSBQC02XfffadRo0bpu+++o27bgdIFABxV07rt27cvddtOlC4AoFWNdbt582YtXrxYPXv2tPtIEYvSBQC0yDAMvfTSS+rVq5f69euntWvXMrjHidIFABxm06ZNGjVqlLZs2ULdBhGlCwA4wDAMvfjii+rVq5euuOIK6jbIKF0AgCSzbkeOHKmtW7dq6dKl8ng8dh/JcShdAIhyTev2yiuv1IcffsjghgilCwBR7Ntvv9WoUaOoW4tQugAQhQzD0AsvvKDevXurf//+1K1FKF0AiDLffvutRo4cqbKyMurWYpQuAEQJwzD0/PPPq3fv3howYIDWrFnD4FqM0gWAKFBSUqKRI0dq27ZtWrZsmdxut91HikqULgA4WGPd9unTR1dffbXWrFnD4NqI0gUAh2qs2+3bt+u9995Tjx497D5S1KN0AcBhDMPQc889pz59+mjgwIFavXo1gxsmKF0AcJCSkhLdcccd2rFjB3UbhihdAHAAwzD07LPPqk+fPho8eLDWrFnD4IYhShcAItzGjRt1xx13aOfOndRtmKN0ASBCNdZtUlKShgwZws9uIwClCwARqGndLl++XJdddpndR0IbULoAEEEMw9DMmTOVlJSka665RqtXr2ZwIwilCwARYuPGjUpLS1NlZSV1G6EoXQAIc4Zh6JlnnlFSUpKGDh2qVatWMbgRitIFgDD2zTffKC0tTbt27dKKFSt06aWX2n0kHAdKFwDCUENDg5555hklJydr2LBhWrVqFYPrAJQuAISZxrrdvXs3deswlC4AhImGhgZlZ2crOTlZ1113nfLz8xlch6F0ASAMfP3110pLS9OePXu0cuVKXXLJJXYfCSFA6QKAjRoaGvSPf/xDffv21fDhw5Wfn8/gOhilCwA2aazbvXv3UrdRgtIFAIs11m1ycjJ1G2UoXQCw0Ndff63U1FRVV1frgw8+0MUXX2z3kWAhShcALNDQ0KCnn35aycnJGjFiBIMbpShdAAixr776SmlpadQtKF0ACJWGhgbNmDFDffv21Q033MDggtIFgFD46quvlJqaqn379ik/P18XXXSR3UdCGKB0ASCImtbtjTfeqPfff5/BxQGULgAEyZdffqm0tDTqFkdE6QLAcWpoaND06dPVr18//fSnP6VucUSULgAchy+//FKpqamqq6ujbnFUlC4AtENDQ4Oeeuop9evXTz/72c+0cuVKBhdHRekCwDH64osvlJqaqvr6eq1atUrdu3e3+0iIEJQugOhUWio9/rj0299KN95o/v3441JZ2RGf0li3l19+uW666SatXLmSwcUxcRmGYdh9CACwTEGBlJUl5eWZ/6+uPnhfbKxkGNLw4dKkSVJy8oG7Guu2oaFBL730kn7yk59YfHA4AaULIHpkZ0uDBklz55pj23RwJamqyrxt7lzzcdnZamho0JNPPqnLL79cN998s1asWMHgot0oXQDRITtbysiQ9u5t81MaYmL0/845R3PPOou6RVAwugCcr6DALNdmgztDUo6kgKRf7/93c7U/+IE6vP++TujXL8SHRDTg7WUAzpeVZb513ExXSZMlpbby1B/U1emExx8P1ckQZShdAM5WWiolJBz+89smJkvapJZLV5IUEyOVlEidOwf/fIgqlC4AZ8vJOf7XcLmC8zqIeowuAGfz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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Gl = nx.path_graph(4)\n", "nx.draw(Gl, with_labels=True)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "matrix([[0, 1, 0, 0],\n", " [1, 0, 1, 0],\n", " [0, 1, 0, 1],\n", " [0, 0, 1, 0]], dtype=int64)" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = nx.adjacency_matrix(Gl)\n", "A.todense() # numpy matrix" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "matrix([[-1., 0., 0.],\n", " [ 1., -1., 0.],\n", " [ 0., 1., -1.],\n", " [ 0., 0., 1.]])" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "S = nx.incidence_matrix(Gl, oriented=True)\n", "S.todense()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "matrix([[ 1., -1., 0., 0.],\n", " [-1., 2., -1., 0.],\n", " [ 0., -1., 2., -1.],\n", " [ 0., 0., -1., 1.]])" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "S.dot(S.T).todense()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "matrix([[ 1, -1, 0, 0],\n", " [-1, 2, -1, 0],\n", " [ 0, -1, 2, -1],\n", " [ 0, 0, -1, 1]], dtype=int64)" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "L = nx.laplacian_matrix(Gl)\n", "L.todense()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$ SS^\\top=L$\n", "and here $\\nabla = S^\\top$.\n", "\n", "$S$ is defined only for the case of unweighted graphs." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1.2 General definition of the gradient\n", "\n", "Let $\\cal{V}$ be the vertex set and $\\cal{E}$ the edge set.\n", "The gradient $\\nabla: \\cal{V}\\to \\cal{E}$ is defined as follows:\n", "$$(\\nabla f)[i,j] = \\sqrt{w_{ij}}(f[j]-f[i]),\n", "$$\n", "where $f\\in\\cal{V}$ and $w_{ij}$ is the edge weight between nodes $i$ and $j$.\n", "\n", "Let us justify this definition." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1.3 Connection with the standard discrete setting\n", "\n", "A one-dimensional regularly sampled signal can be seen as a signal on a path graph." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/michael/.conda/envs/ntds_2018/lib/python3.6/site-packages/networkx/drawing/nx_pylab.py:611: MatplotlibDeprecationWarning: isinstance(..., numbers.Number)\n", " if cb.is_numlike(alpha):\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeMAAAE/CAYAAAB1i6tsAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4wLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvqOYd8AAACdlJREFUeJzt3UuoXAcdx/HfWB/NdRFabfGBxIUWQRI3zb64SwguVBS1pQ8VSQVXRQgWe0UwLropSIq7UCi6tBVafBGKuEoVTBRREbS4aQrWVm2ibT0uTmJu587c3tBMfnfufD5woDlzZnq487/nO48zcyfDMAwBAGre1N4BAFh1YgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGViDABlYgwAZWIMAGVvbu9A3blzycmTyZkzyQsvJHv3JgcOJHffndx0U3vvuBbMAGaA8gxMhmEYFv5/2YlOn06OH0+efHL894ULly/bsycZhuTQoeTYseTgwc4+slhmADPATpmBYRWdODEMa2vDMJkMw/ijnr1MJuN2J06095irzQxgBthBM3Dd+vr6+uJSvwM9/HBy333JSy9tb/uXX05OnUpuvNEj493CDGAG2GEzsFovU58+ndx226Yf/t+SfD7Jj5O8M8nxJJ+dvu7aWvLUU8mtt16DHWVh5szAd5KcTHI2yWcu/vcmZmB3mDED/05yb5KfZjwefCDJt5Icmr6uGdgd5hwHkuT2JD9L8q8k70ry1SRf2LjBgmZgtc6mPn48OX9+0+ovJ3lrkmeTPJrkaJLfTm90/vx4fZbbnBl4T5L7k9yz1XXNwO4wYwZeSfK+JE8leSHJN5N8Ksmfp69rBnaHOceBJDmW8X5/McnjGY8Lv9y4wYJmYHWeGZ87l+zb99o35zM++rkhyW+S3HJx3R1J3pvk29O3cf31yTPPOLtyWc2ZgY3uT/LXzHlmnJiBZbeNGbjkQJIHknxi+gIzsNyuYAZ+n+S2JA9lfHD2fwuYgdV5Znzy5MzVf0hyXS6HOEk+khnPjJNkMpl7OyyBq3HfmYHlts377tmMx4YPz7rQDCy3bdx39yZZS/KhJO9Ocnh6gwXMwOrE+MyZmY+E/plk79S6vUn+Mes2zp9Pzp69+vvGtTFnBq6IGVhu25iBl5N8LsmdGQ/Gm5iB5baNGTiRsQE/T/LxJG+b3mARM7Cw87R3miNHZp6y/qtk2DO17sFkODLnFPfHkiGWpVwen3Ofbly+lgx3vs42ZmB5l9ebgVeT4dPJcCgZ/rPFdmZgeZftHAc2Ll9KhodmXXbkyFVN1Op8A9fe6ee/o1synrzxxyQfvLju15nz8lSSj91xR4ZHHrnqu8c1cPvtyaOPvuGbMQNLbIsZGDJ+quLZJE8kecsWN2MGltgVHgdeSfKnWRfccMPV2qMkq/Qy9YED45vuU96e8WWIr2c8mesXSR7LeBLXJnv2JPv3L3AnWag5M5CMv3AXkrx6cblwcd0mZmC5bTEDR5P8LskPk+zZ6jbMwHLbYgbOJfl+xrcvX03yoyTfS/LR6Q0XMAMrfzZ1Mn6u8J4kP0nyjoxnUW/6nHHiLMplt8UMrCf5xtS6By6ufw0zsNzmzMBfkrw/43uDG18u/G7G949fwwwsty2OA88l+WTGV0f/m2Rfkq8k+eL0hs6mfgNuvnn8ftHJZNNFNyb5QcZnxs9kTognk+TwYb+Ay2yLGVjP5jeX1qc3MgPLb84M7Mt4n1/I+Kzo0rIpxGZg+W1xHLgp42fN/57xc8ZnMyPEC5qB1XlmnGz5rSuvyzfv7A5mADPADpyB1XlmnIzfJ/rgg+MP80qsrY3X8wu4/MwAZoAdOAOr94ciDh4cv+j71KnklZmn6Fw2mVz+4R89em32j8UzA5gBdtgMrNbL1Bs9/fT4/aJPPDH+oDd+T+mlv2F5+PD4Nyw9Et6dzABmgB0yA6sb40uee278WrOzZ5Pnnx8/O7Z/f3LXXU7SWBVmADNAeQbEGADKVusELgDYgcQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAysQYAMrEGADKxBgAyv4H3q1NgRo3rfMAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Let us build the path graph again\n", "Gl = nx.path_graph(4)\n", "pos = dict((n,(n,0)) for n in Gl.nodes())\n", "nx.draw(Gl, pos, with_labels=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "An example of a function and its gradient." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "[]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Example of a function on the nodes\n", "f = [1, 1, 2, 1]\n", "# Plot the function\n", "plt.plot(f)\n", "# plot the path graph\n", "plt.plot([0, 1, 2, 3], [0, 0, 0, 0], 'k') # black line\n", "plt.scatter(*zip(*pos.values()), c='r', s=300) # red dots\n", "plt.grid()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The standard gradient is:\n", "$$f'[1]=\\nabla f[1] = \\frac{f[2]-f[1]}{\\delta x}.\n", "$$\n", "Let $w=1/\\delta x^2$. We have in matrix form:\n", "$$\\nabla =\\left(\\begin{matrix} -1& 1&0&0\\\\0 &-1&1&0\\\\0&0&-1&1\\\\0&0&0&-1 \\end{matrix}\\right)\\times \\frac{1}{dx} = \n", "\\left(\\begin{matrix} -\\sqrt{w}& \\sqrt{w}&0&0\\\\0 &-\\sqrt{w}&\\sqrt{w}&0\\\\0&0&-\\sqrt{w}&\\sqrt{w}\\\\0&0&0&-\\sqrt{w} \\end{matrix}\\right).\n", "$$\n", "Here, it is a $4\\times 4$ matrix (4 nodes).\n", "\n", "$$\\nabla f = \n", "\\left(\\begin{matrix} -\\sqrt{w}& \\sqrt{w}&0&0\\\\0 &-\\sqrt{w}&\\sqrt{w}&0\\\\0&0&-\\sqrt{w}&\\sqrt{w}\\\\0&0&0&-\\sqrt{w} \\end{matrix}\\right)\\left(\\begin{matrix}f[0]\\\\f[1]\\\\f[2]\\\\f[3] \\end{matrix}\\right)=\\left(\\begin{matrix}f[1]-f[0]\\\\f[2]-f[1]\\\\f[3]-f[2]\\\\-f[3] \\end{matrix}\\right)\\times \\sqrt{w}.\n", "$$\n", "The transpose gives:\n", "$$\\nabla^\\top f[1] = \\frac{f[0]-f[1]}{\\delta x}\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Problem:\n", "\n", "* You have to define boundary conditions (periodic, infinite line,...), or have the same number of edges and nodes.\n", "\n", "This is solved if the gradient is defined on the edges.\n", "\n", "**Remark:** we could have $f'[1] = \\frac{f[1]-f[0]}{\\delta x}$, depending on the convention." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "What about the Laplacian (seen as the second derivative)?\n", "$$ L f[1]= \\nabla^\\top(\\nabla f)[1] = \\frac{f'[0]-f'[1]}{\\delta x}=\\frac{f[1]-f[0] - (f[2]-f[1])}{\\delta x^2} = w(f[1]-f[0])+w(f[1]-f[2])\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1.4 A graph with weights" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "# Let us change the weights of the path graph\n", "Aw = A.copy()\n", "Aw[0, 1] = 2\n", "Aw[1, 0] = 2\n", "Aw[1, 2] = 10\n", "Aw[2, 1] = 10" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/michael/.conda/envs/ntds_2018/lib/python3.6/site-packages/networkx/drawing/nx_pylab.py:611: MatplotlibDeprecationWarning: isinstance(..., numbers.Number)\n", " if cb.is_numlike(alpha):\n" ] }, { "data": { "image/png": "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MjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgDIxBoAyMQaAMjEGgLL/B+ezkCAc58z/AAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Gw = nx.from_numpy_array(Aw.todense())\n", "nx.draw(Gw, with_labels=True)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "matrix([[ -2., 0., 0.],\n", " [ 2., -10., 0.],\n", " [ 0., 10., -1.],\n", " [ 0., 0., 1.]])" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "S = nx.incidence_matrix(Gw, oriented=True, weight='weight')\n", "S.todense()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "matrix([[ 4., -4., 0., 0.],\n", " [ -4., 104., -100., 0.],\n", " [ 0., -100., 101., -1.],\n", " [ 0., 0., -1., 1.]])" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "S.dot(S.T).todense()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "matrix([[ 2, -2, 0, 0],\n", " [ -2, 12, -10, 0],\n", " [ 0, -10, 11, -1],\n", " [ 0, 0, -1, 1]], dtype=int64)" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "L = nx.laplacian_matrix(Gw)\n", "L.todense()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The definitions do not match any more in this case." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1.5 A directed graph example" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "Gld = nx.path_graph(4, create_using=nx.DiGraph())" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "nx.draw(Gld, with_labels=True)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "matrix([[-1., 0., 0.],\n", " [ 1., -1., 0.],\n", " [ 0., 1., -1.],\n", " [ 0., 0., 1.]])" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nx.incidence_matrix(Gld, oriented=True).todense()" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "matrix([[0, 1, 0, 0],\n", " [0, 0, 1, 0],\n", " [0, 0, 0, 1],\n", " [0, 0, 0, 0]], dtype=int64)" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nx.adjacency_matrix(Gld).todense()" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "ename": "NetworkXNotImplemented", "evalue": "not implemented for directed type", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNetworkXNotImplemented\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[0mnx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlaplacian_matrix\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mGld\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0;31m# Not implemented!\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m\u001b[0m in \u001b[0;36mlaplacian_matrix\u001b[0;34m(G, nodelist, weight)\u001b[0m\n", "\u001b[0;32m~/.conda/envs/ntds_2018/lib/python3.6/site-packages/networkx/utils/decorators.py\u001b[0m in \u001b[0;36m_not_implemented_for\u001b[0;34m(not_implement_for_func, *args, **kwargs)\u001b[0m\n\u001b[1;32m 78\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mmatch\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 79\u001b[0m \u001b[0mmsg\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'not implemented for %s type'\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0;34m' '\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjoin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mgraph_types\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 80\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mnx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mNetworkXNotImplemented\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmsg\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 81\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 82\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mnot_implement_for_func\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[0;31mNetworkXNotImplemented\u001b[0m: not implemented for directed type" ] } ], "source": [ "nx.laplacian_matrix(Gld)\n", "# Not implemented!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1.6 How to compute the gradient?\n", "\n", "Let $N$ be the number of nodes and $E$ the number of edges.\n", "\n", "Remarks:\n", "* The weight matrix is a $N\\times N$ matrix where the entries are edge weights.\n", "* For each edge the gradient is $\\nabla f [i,j] = \\sqrt{w_{ij}}(f(j)-f(i))$.\n", "* The gradient matrix is of size $E\\times N$.\n", "\n", "Construct the Gradient matrix by iterating over the row and columns of the adjacency matrix." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "
" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" }, { "name": "stderr", "output_type": "stream", "text": [ "/home/michael/.conda/envs/ntds_2018/lib/python3.6/site-packages/networkx/drawing/nx_pylab.py:611: MatplotlibDeprecationWarning: isinstance(..., numbers.Number)\n", " if cb.is_numlike(alpha):\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Let us load the path graph again\n", "Gl = nx.path_graph(4)\n", "A = nx.adj_matrix(Gl)\n", "A = A.todense()\n", "plt.figure(figsize=(2, 2))\n", "nx.draw(Gl, with_labels=True)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Weight matrix\n", "[[0 1 0 0]\n", " [1 0 1 0]\n", " [0 1 0 1]\n", " [0 0 1 0]]\n" ] } ], "source": [ "print('Weight matrix')\n", "print(A)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Exercice: compute the gradient of this graph." ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Edge (0,1) has index 0 and weight 1.\n", "Edge (1,0) has index 1 and weight 1.\n", "Edge (1,2) has index 2 and weight 1.\n", "Edge (2,1) has index 3 and weight 1.\n", "Edge (2,3) has index 4 and weight 1.\n", "Edge (3,2) has index 5 and weight 1.\n" ] } ], "source": [ "# Let us compute the gradient\n", "N = A.shape[0] # number of nodes\n", "E = np.sum(A>0) # number of edges (non-zero entries of A)\n", "gradient = np.zeros((E, N))\n", "eij = 0 # edge index\n", "for i in range(N):\n", " for j in range(N):\n", " wij = A[i, j]\n", " if wij > 0:\n", " print('Edge ({},{}) has index {} and weight {}.'.format(i, j, eij, wij))\n", " eij = eij + 1 # increment the edge index" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Remark:** it is twice the number of edges expected!\n", "\n", "2 points of view:\n", "\n", "* You discard half of the edges (choose a direction for each edge) or,\n", "\n", "* You can see an undirected edge as a sum of 2 directed edges in opposite directions, but you have to divide by 2 for the Laplacian:\n", "$$L = \\frac{1}{2} \\nabla^\\top \\nabla.$$" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "L = nx.laplacian_matrix(Gl)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Compare the laplacian obtained from your gradient and the laplacian given by networkx." ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "# Exercise" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3 Eigenvectors and their visualization" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.1 The grid graph" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/michael/.conda/envs/ntds_2018/lib/python3.6/site-packages/networkx/drawing/nx_pylab.py:611: MatplotlibDeprecationWarning: isinstance(..., numbers.Number)\n", " if cb.is_numlike(alpha):\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Let us build a 2d grid graph\n", "nb_rows, nb_cols = 5, 7\n", "Gd = nx.grid_2d_graph(nb_cols, nb_rows, periodic=False)#True)\n", "Ad = nx.adjacency_matrix(Gd)\n", "# Choose regular positions\n", "pos = dict((n, n) for n in Gd.nodes())\n", "#nx.draw_networkx(Gd)\n", "nx.draw(Gd, pos, with_labels=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Remark: networkx function `grid_2d_graph` label nodes with their 2d coordinates (i,j)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.2 Function on a graph\n", "\n", "A \"Dirac delta\" function is a function that is zero everywhere except at one point." ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "nb_nodes = nb_rows * nb_cols\n", "f = np.zeros((nb_nodes, 1))\n", "peak_position = 5\n", "f[peak_position] = 1" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/michael/.conda/envs/ntds_2018/lib/python3.6/site-packages/networkx/drawing/nx_pylab.py:611: MatplotlibDeprecationWarning: isinstance(..., numbers.Number)\n", " if cb.is_numlike(alpha):\n" ] }, { "data": { "text/plain": [ "Text(0.5, 1.0, 'Dirac delta at position 5')" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "nx.draw(Gd, pos,node_color=f.flatten())\n", "plt.title('Dirac delta at position ' + str(peak_position))" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "L = nx.laplacian_matrix(Gd)\n", "eigval, eigvect = np.linalg.eigh(L.todense())" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/michael/.conda/envs/ntds_2018/lib/python3.6/site-packages/networkx/drawing/nx_pylab.py:611: MatplotlibDeprecationWarning: isinstance(..., numbers.Number)\n", " if cb.is_numlike(alpha):\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdUAAAE/CAYAAAAQZlkTAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4wLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvqOYd8AAAIABJREFUeJzt3Wd4FOe9NvB7ZrZLWnUkIQkQ1fSOjQGbgHvFBYNrbMclOTknyUl5cxKnOD1OOUlOEidxie3EFWywwQZTTTE2xlRRTO9CCNXdlbbPPO8HWUmMwZZ2np1llPt3XfOJ3dV/bnb33ik7qwghBIiIiMg0NdMDEBERdRcsVSIiIklYqkRERJKwVImIiCRhqRIREUnCUiUiIpKEpUpERCQJS5WIiEgSlioREZEkLFUiIiJJWKpERESSODI9gFm6rmP/5kNoORWAnjSQnZ+FAWOq4M32Zno0yxiGgf07a9DS2Nqegd+LfkN6wpftyfRoljEMgb1HTqEp0IZk0kB2lhuDevdAls+d6dEsYwiBXfWnUB9uQ0LXkev2YHBxD/jd/z4ZCCFwqO04muNBJEQSWZoXVdkVyHb4Mj2aZYQQaI3vRlw/BUMk4FBzkO06D04tN9OjWUYIASR3A8YpQMQBJQdwDoKi5qf9b9u2VAMNQSx+YgVe+e0biEViUFUFQgCKoiAZT2La7VNw01euRu8hlZkeNW2CzW1YMncD5j21FrFIAoqqAEIAUJBM6ph6zUjccM9F6DOwNNOjpk2wLYqFq7bj+UWbEI7GoSrKP/4tmTQw/YKBuO2qcejfqziDU6ZXMBbFnJ078OSWjQjF49AUBe3PAgVxPYkr+w/EfWPGYUhxj0yPmjZtyQhW1K3HqzUr0JaMfPR5IHRcUDgSM8qno192930/SBqtqG2dj6OBJ5E0AgA04MNngkAcRd7p6JV7L/zu4RmeNH2E0QoReQ1oewIQzfjnzlgFEDEI93QoWfdCcY1M2wyKHX+l5o3Hl+HRLz8FKArikfgZb6M5VGhOBybNGI9vPPVFOF1Oi6dMr6WvvI8/fn8+FEVBLJo4421UTYHT6cD4qefhG7+6FS63bT9DndGitTvxyF+XAwBi8eQZb6OpChwODReM6IMffvFquF3dK4OFe3bjmyuWQAEQSZ4lA0WBS9MwsaIX/nDVNfA4utdrYV39Fvxu398BADHjzO8HKlQ4VQeG+PvhW4Pvh1tzWTli2tWHl2Nn/dcBAIaInOVWKlTFjVz3aAzv8Qc41CzrBrSAiL4FEfhK++cInD0DwA04R0DJ/xMUNVv6HLYr1Rd+Ng/P/eQVxMJnfvGczu1zYeDYfvjF8u/B4eweb6gvP7Eaz/5u6VnL9HRujxN9B/fEz//+YLcp1pfe3IxHX1p71jI9ndvlQL+KIvzpu7O6TbE+W70VP317NaJnKdPTeTQH+hUUYO7M2d2mWJeeXIfHD76MuNG514JLcaKntwceGflVeLTusVu8NjQPe5p+AENEO3V7BW74nL0wtuylblOsRngBEPwOgM5lALgArRxK4SvSi9VWJyqtmrOuS4UKALFwHHs3HsAv73k0jZNZZ92S7V0qVACIRRM4+MEJ/OobL6ZxMuu8vflAlwoVaN+SPXC8Ad/74xtpnMw6qw8f6lKhAkBUT2J/UyO+uGhhGiezztaW3V0qVACIiwRqInX42QePw2bbE2fUHHmvS4UKAAIxhBNHUV33hW6RgYhv6mKhAkAc0Gsgmu+XnoFtStUwDDz65ae7VKgdYpE43p63Hsf3nkjDZNYRQuBPP3qtS4XaIRZN4L2VH+DIvro0TGYdIQR+9czKLhVqh1g8ifeqD2PfkVNpmMw6Qgh8f/XKLhVqh5iuY/3xY6iuO5mGyaz1+IG5XSrUDgmRxAfBg9gbOix/KIvtbfpJlwq1g0AMwfh2BGKb0jCVtUTwJ+haoXaIA8kPgPi7UuexTaluWlaNaFsqwbXTdQPz/2+RxImst239AbSFTGSQ1PHq02slTmS9bXtqEAid7XjJp0skdbyw2N5vJFtP1qK+rS3l+8d0HU9usXcG+0JHUB9rTvn+cSOB+TUrJE5kvVB8NyLJIynf3xARHAk8IXEi64nkfiC538QDhCHa5GZgm1Kd84vXEGk1USgJHUufWYVoOCZxKmu9/PgqRFPYUu+g6wbeWrAFkTb7ZvDs6xsRjXV966SDbgisWL8HrTZ+Hjy+eSOiydQzMITA0gP70BJN/cNJpi2oWYlEClupHQQENjbtQCARkjiVtY4FnoIQqWcACDRH1iGWrJc2k9VE2zMAzGQAIL4BQpe358Y2pbpr/V7Tj6FqKg5tPyphmszYuemw6cfQHBoOfGDf3eBb9xyH2SMgDoeGPYfsuxv8vZpjpjNwaRq219k3g+rAXhgmU3CqDuwLpb6ll2nN0XchoJt6DEVxIRjbJmmiDIi9DZjMAIoTSGyRMg5gk1I1DAOJFI4jnk5RFLQ2t0qYKDNSOZb6MQrQGrDvFoqZrdR/FbTxlmo4YT4DIYBALPU9P5kW1VPfY9NBCIHWZFjCNJmRNMzPLqAjYQQkTJMhIvXDIP98DB2QmIEtSlVRlPYLG5jU0tKCy6+8vP3xbLjoetdPTDldoKUF1153dcbXJdUlHjdfhoFAADfOuD7j65LqEgmbfzMNBAOYNXNmxtcl1SUUDJrOIBgK4fbZt2d8XVJdmppaTGfQGmrFXXfek/F1SXWpO9VgOgMoKgB531u2Tan6/OYvO5iTnYPNOzZBCGHLJb/Qbz6DHD/Wv78u4+uS6lJcmGc6A7/fj7fXrMj4uqS6lBcWScggF6sXv5nxdUl1qSgql/I8eHPeGxlfl1SXsuL+pjPIycnFnBcWZ3xdUl1KSgebzgBQAa1AwuP849HsYdptU6A5NVOP4S/MQe8hFZImst6068fAYTKDrBwP+g4ukzSR9a6aMgROh7mnrcflxOAq+1668abBQ+HSzD0PXJqK0aX2fR5c0uMCuBRzF7DQFBVDcvtJmsh6pdk3QVXMX987zzNewjQZ4psJwOwGlwBcE2VMA8BGpXrDl66CpqU+rifLjVu+cR0Uxfxu5Ey57s5JpnaDu71O3Pi5i2ydwc2XjjI1v9vlwOyrxkKVcDghU24fbu66pW5Nw92jxkBTbfPy/5jLSidBmDhRyak4cHXZRdAUcx9OMqk852ZAGCnfX4EL5Tm3QlXse8lGxXsjgNQzAJyAdyYURd7VtWzzqqoYUIb+Y6pSLhUhBC6582LJU1mrtLIA543slXIhCEPgspts/KkUQEmhHyMHlUMz8Ty4fqq9Lyhekp2NCyt6QTPx4eLWYem7oLgV8lw5GJM/BFqKb2GKouDy0smSp7KWU8tHkW8alBR/F0VRFFT4b5c8lbUU1Q94rkDqvw2jQvHdIXMk+5QqAHzzmf+CL6frm/ourwvf+OsXkeW3/88/fe2RW1L6STeXx4kv//RmZEs4Np1p33ngcmR5u/7J0u1y4Jv3XorcFJ5D55qfTr8UfrcbXa1Vj8OB7188DUU++78WvtB/NrKdWV3OwK26cE/VDSh0mz8+n2kDC78Hp5oHdDEFVfGib95X4XHY9xBAB8X/LUAtRNfrzAtkfwmKo5fUeWxVqj37leKXK76PrFxfp7fW3F4XPv/ru3DxLRemeTprlFQU4JFnH0S239v5DDxO3Pv1KzHtujFpns4aJYV+/Om7s+DP9nQ+A5cDD86chKsvGprm6axRmp2DF2+ajTyPB5rSuZexx+HAlyZMxOxhI9I8nTXyXX78dPhX4HdmQ+3kW5lbdeKmiktxVdlFaZ7OGi6tEGPKnodLLUBnt9ZUxYNe/nvQK/futM5mFUUtgFLwPKAWAejscXYP4LsTStZ98ucRQtjuisq1B+vwq889it3v7YNhCCRPuw6soihw+9zIK/bjv/54HyZcOTpDk6ZP3fEm/OZbc/HBliPtGSQ++gVoRWn/QOHP8+EL35uBC6YPydCk6XOyIYifPL4E2/bUQIj2SxD+KwWAx+OEP8uD/77zM5g6fkBmBk2jk60hfHP5UrxXcwwAENc//kX4LKcTOS43vnvRVFw5YJDVI6ZdUzyA3+97Dttb2i8QkxAf/+qZR3XD5/Dg3qobMKV4nNUjpl1cb8AHDd9BU2QdFAAGPv49Xk3Jgqb60D///6E0+zrrh0wzYTRBBB4CYmvR/uo/w9fvlCxA8QLZX4fquzEtc9iyVDvUHqrDa39YjBXPrkVbMIxYNI6cvGyMuGgIbvnGdRg66Txbn5TTGXXHm7Dw2Xew4tXNaAtFEYvFkZ3jw7DxVbj5vosxbHxVt8/gZEMQLy/bikVrd6I1HGvPIMuLEQPLccc14zFmcEW3z6A2FMKz27fi5V07EIjFEIvHkeP1YnRpTzw4djwmVlR2+wwaYy1YXLsWy+veRWsyjFgijiy3DwNz+uDGikswIncg1E5u1dtVLHkKNaEXcaJ1LpJ6APFkFG5nDvzuYeiVez8KPBdC6eYZCL0eIvwiEJkDGC1IJqNwOLMBx1Ao2fcDrilpzcDWpXo6RVHQjVYnJcyAGQDMAGAGADMArM+ge39kISIishBLlYiISBKWKhERkSQsVSIiIklYqkRERJKwVImIiCRhqRIREUnCUiUiIpKEpUpERCQJS5WIiEgSlioREZEkLFUiIiJJWKpERESSsFSJiIgkYakSERFJwlIlIiKShKVKREQkCUuViIhIEpYqERGRJCxVIiIiSViqREREkrBUiYiIJGGpEhERScJSJSIikoSlSkREJAlLlYiISBKWKhERkSQsVSIiIklYqkRERJKwVImIiCRhqRIREUnCUiUiIpKEpUpERCQJS5WIiEgSlioREZEkLFUiIiJJWKpERESSsFSJiIgkYakSERFJwlIlIiKShKVKREQkCUuViIhIEpYqERGRJCxVIiIiSViqREREkihCCJHpIVIVjSawcsUuLFq0Fc3NYRw6dAhDhwzEBRP747rrx6C42J/pEdMuGktgxbrdWLCsGs2BMA4eOoyhgwdg4ui+uOHKUSgp+jfIIJ7E0q178PI729EYas9gyKD+mDS4D26dMgpl+d0/g1gyiUX79uL5HdtQ39aGg0cOY2j/AZjcqzc+O3I0Kvy5mR4x7eJ6Ektrd2Hu4fdRHw3hwJHDGNJ3ACYW98WtVeejMqsg0yOmXdJI4v2mTVhxahWa4y04dOQQBlUNxBD/YFxWOh0lnh6ZHjHtdCOB3aH12Ni4GMFkAw4dOYQBfQahd9YwnF94LQrd5Wn9+7Ys1VAogiefWI1lS3dAUYBIJPGRf3c6NUABRo7shQc/Pw19+3a/J1JrWwyPvbAWi1bubM8g+vEMFAAjBlfgi3ddjAFV3TCDaAx/XPQO5q/fCQVAOH5aBpoGVQFGVvXEV6+bgsGVJZkZNI3a4nH8Zv06vLRzOwSAcOK0DFQVqqJgVGkZ/mfyxRhZUpqZQdMonIzj0T1v4eUjGyEEENbjH/l3p6JBVRQMzeuJrw65DCMLKjM0afrEjTjmHV+AladWQQiBqBH7yL9r0KAqKvpk9cLsXjMxMKd/hiZNn6QRx+pTL2Jj0yIICMSNyEf+XYUGVdFQ4qnCJaV3o3fW0LTMYbtSrasL4CtffhZNjW1IJvVPvb3H48T3f3ADJkzoZ8F01jjVGMIXv/MiGppakehMBm4HfvDVazFpXDfKINCKe38/F3UtIcQ7k4HTgZ/fdRU+M7z7ZFDf1oZb572E48Eg4nonMnA48OtLr8CVAwZZMJ01GmOt+Nw7T+NYWzPiRvJTb+9RHfjhqBm4smK4BdNZI5QI4Wcf/Aono3VIiE/PwKW6cE+fOzG5eKIF01kjkgzhb4e/g8ZYDZIi/qm3dyguXNnzQYzOv1T6LNrDDz/8sPRHTZNAIIz/+PwzaGxsha4bnbpPMmng7bV7MHJkb/Qosf9uwGBrFPd/8znUN4aQ7GwGuoG1G/ZjxOBylPWw/27AUCSGO/73BdQ2BzufgWFg1Y4DGNGnDBWF9s+gNR7HjXOex7FAAEmj8xmsPHwQw3uUondeXponTL9wMoY73n4Sx9qakBCf/qECAJLCwNq6vTgvtwy9swvTPGH6xfQYfrjr56iN1CGJzmWgCx3bAztQ4S1HT29ZmidMv4QRw9OHvoWG6DHoSHz6HQAY0HGwdSsKXD3Rw9NL6jy2OlHpl4+8gZaWNhhG1zauY7Ekvv3tOYjHP/1T3LnukT8tQVNLG/SuZhBP4n9+Nh+xWOeedOeyH89ZjlPB1i5nEE0k8ZUnFyDcDTL4/qoVqG0NQe/ijqZoMon/WLQAoVjs0298jvvFjjdxItyCpOjch4oOUSOJr2+cg2Ai8uk3Pse9cHQuTkXroXeyUDvEjQQePfA4QonWNE1mnZV1f0dj7Dh0dO39PSnieK3mt2hNNkudxzal2tAQwsaNh5BMdu0F1MHQDaxZvVvyVNZqDrTh3U0HO7XL90wMIbBi3R7JU1mrpS2CldsPIJHi80AIYNGmDyRPZa1gLIpF+/Z0apfvmQgh8OruXZKnslZrIorXj1d3apfvmQgArx3dIncoi0X1GNY2vIOESPFDohBYXb9W7lAWSxgxbG5eimSqGQDY3LRE4kQ2KtWFC7ZAUVK/fySSwIsvrJc3UAYsWFptLoNoAs++ukHeQBkw790dUE2EEIkn8PTKjbDZqQQf8fKuneYySCbx2GZ7Z7Dw+DZTGUT1BJ4+8I6tM3i38T0oSD2DuEhg8cllMLq4pX8u2RV420QC7Vur7zUuhNHJwwedYZtSfeP1rYjHza34iRPNqKlpkjSR9V5dug0xkxmcagji8PFGSRNZb+471YgmzO3GbwiGsa+2QdJE1vt79VZEkuYyaI5GsKP+lKSJrPfioQ2I6OZ247cmY6huPi5pIustO7kSMcPcbvy4Hse+0H5JE1lvQ+MbiBtRU4+hiySOtO2QNJFNSlUIgUAgbPpxHA4NDfX2PYbQEpSQgaahvtG+GTSFzGegqQrqWuybQUNYQgaKgpOhkIRpMqMhZv7/T4GCumhQwjSZ0ZJokfI4TXG5xxStFEpK2EAQAsGEvA0Nm5Qqunxy0pm0tLRg2vRLoSiKLZe4yS20jgyuuPKqjK9Lqkskav4Em0AggGuun5HxdUl1CYXbzD8PAkHcMHNmxtcl1aU5aL4Mg8EgZt1+a8bXJdWlscX8XrdQawh33nNnxtcl1eVUQ53pDAyITn0Np7NsUaqqqrRf0MGkvLw8rFmzAkIIWy5ej8t0Brl5eVix7M2Mr0uqS7bPaz6D3FwsfWNhxtcl1SU/O9t0Bnm5frwxb17G1yXVpTg33/zzwO/H/BfmZnxdUl165BebzsCfk4MXnnkh4+uS6lJabP7qSKqiwqNlmX6cfzyetEdKsz59ikw/RjyRRK9e9v1uWt9e5l9E8UQSfSrtm8HAcgnPg6SO/mX2zWBIsfmrY8V1HYOKzGeZKYNzzX+/Mm7oGOS371W2qrL6mH6MpKGjl8++V5gq9w4wdbIWABhCR4mnStJENirVWbMvgM+X+paaqiqYPHkgcnLMb+lkyu0zxsPndaZ8f0VRcOGYvsjz+yROZa27p42Dz20iAwAXDOqFwhx5n0yt9sCY8fA5U88AACaUV6I0O0fSRNa7u/8k+DRze25GFVSizGffi2BcVXY53Krb1GNUZfW29fWAJxbNgEMx9zzo4emNIneFpIlsVKqTpwyCoqT+icTpdGDmLedLnMh6k8b3h6am/l/mdjlw6/XjJU5kvSlDquBypH4owONy4u5p4yROZL0pvfuYKtUspxMPjLV3BucXVSHb6Un5/j7NhXv6T5I4kfUG5QxAjiP1QwEe1Y2re14hcSLrlXsHIduZ+g8luFQvJhXdJHEiG5Wq06nhzrsmwePp+puJ06lh0KBSDBpk70tyOTQVn5s1CZ4UttScDg39exdj6EB7Z6CpKv7zqknwuBxdvq9TU1FVUoAxfdP7KxXppioKvjFxMryOFDJQVfTOzcOFFXIvzWY1RVHwlcHT4dG6/lpwKCp6+vJwYbG9rwOtKApmVd4El9r1LTVN0ZDvyseovBFpmMw6iqLg0tJ74FC6vsWuQkOWIw8D/ROkzmSra/8OGVKOmppm1Bxv7vSVlZxODcXFfvz6N7fBlcIb8blm8IBS1DUEcaSmsdPXvXU6VBQVZOMPP5qdUiGfa4b2KkF9SxsO1HU+A4emosifhae/dAu8rm6QQY8SNEUi2NNQ3+lr/zpUFYVeH+bOvBU+l/mT3jJtUG4pWhNR7A6e7PSlCh2KinyXD3+ffB+ynOZ2nZ4LKnzliBsxHGo7Ar2TFzBQoSLbkY2Hh34LXod9D4d1KHJXwICBE+G9MDp5uUYFKrxaNj7X75fwauZP/PtXtipVRVEw8cIBCAYjOHjg1IdngJ399l6vE32qivHb391u62Op/0pRFFw4ti/CkTj2HjwFfFoGHid6lxfi0Z/citxukgEATB7SB7FEEruO1UHgkzPwuZ3oXZyPZ748G/nZ3SeDi3r1gS4MbK072f5a+ITb+pxO9MrNw8u33IYin32PqZ/uguK+UKFga9MxAMAnpeDTXOjpy8OzU+5Dkce+x5NPNzR3MJyKA3tb9wFC+cQMPKobhe5CfH/ot5Hvsu/x5NP1yRoGp+rGkbadABQInP1Dlkv1wO8oxL19f4Fcl/mTP09nu59+67Bv30m8PHcD1qzeA01TkUzqiMVi8Pm8MAyBAQNLMHv2RJx/QT9omm32cnfJvsOn8NLCjVj5zl44NBWJpI5YNAafz9OeQVUP3D5jAi4c1w+O7prBiQb8fdUmvLllLxyqgoRuIBqLwefxQAAYUFaEe6aPw9Rh3TeDvY0N+OuWTViwdzc0RUXC+PC10JFBQSEeHDsBl/btB6dm/qtp56KDoXr8/cC7eL1m2z8yiMbi7RkIgb45xbi3/2RMLzsPTtX+e6zO5ESkFktOLsfbDe9ChQpd6IjGo/C6vQAESj2luKbsCowrGAOnav+9NWfSGKvBe40Lsa15BRRFhS6SiMVj8Li8UADku0oxqfgmDPZPgiNdGQibC4UiYvmyHeLluRtEZcVkseiNreLYscZMj2WpUGtULF2zS8x5fZPoOeBisXBZtThS82+WQSQqFm3aLZ5dtVkUjZkqXnl3uzh48t8sg1hMLNzzgXhqyybh/8zF4sXt28TehoZMj2WptkRULD6+XTx74F1ROGOiePnwRrEvUJfpsSwVSUbF+ob3xZLa5WLwbcPEW3WrxdG2Y5key1JxPSp2trwt3mtYKCbd3U9sanxT1IYPWvK3bbuleiaKoqAbrU5KmAEzAJgBwAwAZgBYn0H33B9GRESUASxVIiIiSViqREREkrBUiYiIJGGpEhERScJSJSIikoSlSkREJAlLlYiISBKWKhERkSQsVSIiIklYqkRERJKwVImIiCRhqRIREUnCUiUiIpKEpUpERCQJS5WIiEgSlioREZEkLFUiIiJJWKpERESSsFSJiIgkYakSERFJwlIlIiKShKVKREQkCUuViIhIEpYqERGRJCxVIiIiSViqREREkrBUiYiIJGGpEhERScJSJSIikoSlSkREJAlLlYiISBKWKhERkSQsVSIiIklYqkRERJKwVImIiCRhqRIREUnCUiUiIpKEpUpERCQJS5WIiEgSlioREZEkLFUiIiJJWKpERESSsFSJiIgkcWR6ALOShoHNtSfQGAkja/RIrD1yGCNLS+F3ezI9mmWShoEttbUfZjAKa48cxoiSUuR6/n0y0A0DW07WoiHcnsGaI4cxoqQEeR5vpkezjG4Y2FpXi/q2f2YwvEcJ8r3/PhkYQmDryVrUh9uQNXoUVh8+hGE9SlDo82V6NMsYQmDbyVqc+pcMhvYoQdG/WQbVdSdR19qKrNGjsOrwIQwt7oHirKy0/21FCCHS/lfS4FRbK56t3oa/V2+BbghAAYKBIHJz/YjrOq7oPxD3jR6LoT1KMj1q2tS3teGFHdV4eusWJA0DwEczuKxff9w3ZhyGl3TfDBrCYbywvRpPb92MuK5DURQEAgHk5eYiruu4pG8/3DdmHEaWlmZ61LRpDIfx4s5qPLV1M2JJHYoCBAJB5H34PJhW1Rf3jxmPkSWlUBQl0+OmRVMkjDk7d+CvWzYhkkx8+Dz4ZwZT+1Th/jHjMbq0rNtm0BKNYM7OHXhyy0aEEwmoioKWf8ngot59cP+Y8Rhb1rPbZhCIRjF35w48sWUT2uLx9udBMIg8vx8xXceUXr1x/9hxGN+zPG0Z2LJUn966GY+sWwMAiOn6GW+jKQqcmoaLevXB7664Gm6H7TfKP+LZ6m34yZpVAM6egaoocGsaJlb2wh+uuhoeh9PCCdPvxR3b8YNVbwEQn5rBhPIKPHr1tfA6u1cGr3ywE99duRwAENWTZ7xNewYOjCkrw1+umQFfN8vgtT0f4FsrlgIAoskzZ6AA8DqcGFFSiseunYFsl8vCCdPvjb178I3lbwL4lAycTgwt7oEnrr0BOW63hROm35v79+FrSxZD4NMzGFRYhKdm3JCWPZq2K9XfrF+HJzZvROQsoZ3OozkwuLgYz994S7cp1j9sWI8/vb+h0xm4NQ0DC4swZ+asbpPBXzZuwO/eW3/WF8/p3JqGfgUFmDtzdrcp1ie3bMKv3327Sxn0ycvHK7fc1m2K9Zltm/HIurVdyqDSn4t5s27vNsX6/PZt+PHaVZ3OwKVpKM/xY/6s2+HvJsU6d+cOfH/Vyi5lUJqdjddm3y79MJmtTlSa/8EuPN6FQgXaP71/0FCPry5dnMbJrLNwz2482oVCBdq3ZPc1NeJLi99I42TWeXP/vi4VKtCewYGmJnxx0etpnMw6yw/u71KhAu0ZHG5pxoOvvwqbfZY+o1WHD3WpUIH2DI4FA7h/4fxukcHbR490qVABIK7rqAkF8bkF87pFBuuPH+tSoQLtGZxsbcVnX30FhuQMbFOqumHgp2+v7lJwHaLJJFYeOoj9TY1pmMw6hhD4ydrUM1h79Ah2N9SnYTLrCCHwo9VdexPpENN1vHf8GHacqkvDZNYRQuBHa1LPYHNtLarrTqZhMusIIfDDNV17I+0Q03VsP1WHTbUn0jCZtX605q2UMoihX0NGAAAgAElEQVTrOj5oqMf648fSMJW1fpziayH+4QftdUePSJ3HNqW65uhhRJOJlO+fNHQ8tXWzxImst+7oUbTF4ynfP6Hr+OsWe2fwXs1xBGLRlO8f13U8uXmTxImst+nDs91TFdOTeHzzRokTWa/9zM62lO8fSSTw+Ob3JU5kvR2n6nA8GEj5/pFEAo/ZPIM9DQ042Nyc8v3bEgn8ZZPc14JtSvUvG99HWyL1UtWFwKu7dyFs4jEy7bFN5jNYuGcPQrGYxKms9dim9xExmcGb+/chaKKYM+3xzeYyMITAikMH0ByJSJzKWo9v2YjYWU7M6gwBYM2Rw2gIp/7hJNOe3LIJ8bOcoNcZAu27Tk+2huQNZbG/btmEhIkMAGDTiRrUBIOSJrJRqW6TsLtKU1XsbWyQME1mbDlZa/oxnJqK3Q32zWBzbS3MHgFxaRp2nDolZZ5M2HiiRkoG2228G3xDzXHTx8KcmoZtdeZfU5ny3vFj0M1moGpS3lsz5d1jEjLQNGyV8N7awRalagiBuIlPpR0UtH+Pya7MbJ10UABbb6XJ2NMgAARtvLUuJQNh7+dBW1xGBsLWe21aE6kfCupgQNj6tSAjg6RhSM3AFqWqAFK+qNvSEsAVl14KRVFsuRhJc7s5OjK49qqrMr4uqS7xqPknfyAQwI3XX5/xdUl1iUjYZRkIBjBr5syMr0uqS2vI/O66UDCEO269LePrkuoSMHEs8R8ZhEK45667Mr4uqS4Np8yfeKkq7dc0kMUepaooyHGZ/z5Vtj8H1evfgxDClktRTrbpDHJy/di09u2Mr0uqS1l+nukM/H4/1q9cmfF1SXWpKCqSkEEu1r65JOPrkupSJeEKWX6/Hytffz3j65LqMqCiwnQGuX4/3pw3P+PrkuoytKrKdAaqoki9hKMtShUAbjhvCJyquXGLfFnoX1AgaSLr3TR4KJyquU9UuW4PzpPwppwpNw8ZCpfJT5VZLheG2fjylbcMGQ63yQw8DgdGltj30o2zhg6Hx+SFTByaijFlPSVNZL3ZQ0eYzkCBgvPLzZdzpsweNhxek1eKEwKYWFEpaSIblepnR46GqqS+C9jrcOKBseOhmHiMTLtz5CioJsb3Ohy4f+w4W2dw+4iRpu7vcThw3+ixpp5LmXbrsBGmTlTyOBy4Z9QYaCY/pGbSrKHDTZ2o5NY03D1yDBw2zmDmkGEQJjJwaRruHDFS6q5Pq904eAgMYaR8f6eq4bbhw6Veac42z6jeeXkYWVIGLeU3Q4EZgwZLnclq5X4/xvYsTzkDgfYnoZ2VZudgYkWliecBMHPoMIkTWa84KwsX9e4DR6rPAyEwe9hwyVNZq8Drw/SqfiZKUcGtw0ZInclquR4PLu83IOU9eAqAO0aMkjuUxXLcblw76LyUM1CV9o0VmWxTqgDw68uuRHYKx1Y9Dgd+e/nVyOoG1/r85aWXp3QhbI/DgV9fdkW3uNbnzy+5DLkeD7paKR6H4x/3tbuffOZS5Hm9KWXwk2mXosBr/58B++HU6SjweLu818HjcODhi6dZ8jNg6fb9i6eh0OfrcgZehwMPTZmK0uycNE1mnYemXIzirKwuf9D2Ohz45qQpqPDnSp3HVqVa7vfj+ZtuQa7b0+kAO15Al/brn+bprFGWk4MXb74F+R5Pp19IHocD37loKq4cMDDN01mjJDsbL908C/leb5eeB/8zeQquG3RemqezRnFWFl68aRYKfb5Ob7F6HA58feJk3Dh4aJqns0ahz4eXbp6NIq+v01usHocDXz5/ImbZfEu9Q77Xi5dumo1iX1ant9Y8Dge+OP4C22+ldsj1ePDSzbNQkpXdpQzuHzsOd48eI30e2/1KDQDUhIL49opl2FBzDAL42FVFOn7uq2eOHw9PnYZJlb0zM2ga1YZCeGjlcrxz7CiAs2dQkp2NH0ydhim9+2RgyvSqa23FQyuX4e2jR6Hg4z+BpwDwOJwozvLh4anTMLWP+TMFzzX14TY8tHIZ1hw5fNYMvE4nCr0+fO/iz2B6Vb+MzJlOjeEwvvPWMrx1+NAnZpDv8eI7U6bi8v4DMjJnOjVFwvjuW8ux4tBBqIrysWvhdmSQ5/HgockX48oBgzIzaBq1RCP47soVWHbwwCdm4He78a3JF+HaNH3AtmWpdqgNhfDc9q2Yt3sXgrEYWtvCKPL7MbGyEvd9+KPM3V1dayue274Nr+zahUAsita2MAr9flxQUYEHxo7DiG78w9Qd6tva8Nz2bXh5104EolGEwmEU5uRgQnl7BqO68Q9Td6gPt+GF7dWYs2v7RzIY17McD4wdjzGl3feHqTs0hMN4aUc1Xty5HS3RyD8yGFNWjgfGjsO4svT9MPW5ojEcxks7t+PFndVojkQRCrehICcHo0vL8ODYCWn9ce5zRXOk/cfan99ejaZIGKFwGAU5ORhZUooHxo7DBRWVac3A1qV6OkVRTJ0N1x0wA2YAMAOAGQDMALA+A1sdUyUiIjqXsVSJiIgkYakSERFJwlIlIiKShKVKREQkCUuViIhIEpYqERGRJCxVIiIiSViqREREkrBUiYiIJGGpEhERScJSJSIikoSlSkREJAlLlYiISBKWKhERkSQsVSIiIklYqkRERJKwVImIiCRhqRIREUnCUiUiIpKEpUpERCQJS5WIiEgSlioREZEkLFUiIiJJWKpERESSsFSJiIgkYakSERFJwlIlIiKShKVKREQkCUuViIhIEpYqERGRJCxVIiIiSViqREREkrBUiYiIJGGpEhERScJSJSIikoSlSkREJAlLlYiISBKWKhERkSQsVSIiIklYqkRERJKwVImIiCRhqRIREUnCUiUiIpKEpUpERCSJIoQQmR4iVVG9DdXNK7GlZTnCyQBOnDyB3j37YkDOOEwovAb5rtJMj5h2ET2KdfXvYlX9GgQTrThxsgZV5VUYkTsMl5VOR4mnR6ZHTLtwMobXj1Xj5aOb0BhrQ03tCfSr6IVJxf1xe98L0Du7MNMjpl04kcBruz/ACzuq0RAO4/iJWvTvVYlJlb1xz+jR6JtfkOkR0y4ST2Dx5j2Yu24bGkNhHK+pRd/elTh/QCXumDoGVSXdP4NoLIEV63Zj/pJtaGpuw/GaE+jbpxKjh1XilmvGoqqyKNMjpl0slsCqtz7Agtc2o7GxFcdrTqCqTyWGj6jEzFvOR1VVcVr/vi1LNZwMYtnJv2Jn4G0oUJAQsY/8uwYHFEVBT+9AXFb2OfT09s/QpOnTmmzFC0dexvqm96BAQcyIf+TfNWhQFRVVWb1xW+9b0C+7b4YmTZ9APILf7FqKN45XQ1EURPTER/7doajQFBXn5ZbhG0Mvx8iCygxNmj7BWAy/WLcW8z/YBQUKwsnTMlBVOFQV5xUV4dtTLsa4nuUZmjR92qJx/G7h21jw/s72DOIfzUBTFTg0Df1LC/G1GRdhbL+KDE2aPuFIHH95bi3eWLkDigJEomfIwKGhd0UB/vOzUzFmWK8MTZo+0WgCf31iFd5YtA0KFEQip70naiocDhUVFQX4/BemY8zYPmmZw3al2hw/iacP/g/akgEY0D/19k7FjRsrv45B/vMtmM4a9bEG/HjXIwgkgtDFp2fgUl14sO/nMKFwrAXTWaM23IK71z2F+lgICePTM/CoDvxo9AxcUT7cgumscbI1hNkvz8HJ1lbE9U5k4HDgZ9MvxfXnDbZgOmvUB1px7x/m4mRzCPHkp2fgdjrw0M3TcP35Qy2YzhpNLW34z++9hNpTASQSncjA5cCX752G6y4dYcF01mhpCeNr//0camqaO5eB24HPf2E6rrt+jPRZtIcffvhh6Y+aJm3JFjx+4GtoS7ZAwOjUfQzo2BN8DxW+85DvKknzhOkXSoTw/R0/QUsiAKOTGehCx9aWbeiX3Rc9POnd9WGFQDyMW9c+jrpoELroXAZJYWBN3V4MyeuJXln23x0cjEVxw0sv4EQohKTRyQwMA6uPHMZ5RcXom5+f5gnTrzUaw52/fRG1TSEk9E6+FgwD7+w5gn6lhd1id3A4EseD334eJ+pakEx2MgPdwMbqI6gsy0NVL/vvDo5E4vjyf/0dNTVNXcpg65YjKCnNRd++cg+R2epEpdeO/xaRZBACXdu4Too45hz9KRJG7NNvfI574uAzCCZCXc4gbiTwu71/RFS3fwY/2LYQjdFWGF3cyRIzkvjq+y+hLWn/DL63ciXqWluhdzGDaDKJLy1+HcGY/TN4ZN4q1LW0dvpDRYdYIolv/X0xAm3RNE1mnT88swon64PQ9S6+FuJJ/OQPb6I5EE7TZNZ54vFVqK1t7nShdojFkvj1LxejsbFV6jy2KdVgogGH2rZ3apfvmQhhYFdgneSprNUSD2B7YAf0VDMAsL5xg9yhLNYUa8Pquj1IdGK399m8fmybxIms1xKNYMmBfUh0sUz+1bwPdkqcyHqhSAxLtuzp1C7fs3n1vR0SJ7JeOBLHktW7OrW782wWLq+WOJH1otEE3lxcjXjcRAYLNkucyEal+n7jIlP3j4so1jW8ImmazFh5ahUAJeX7x4wYXj+xGDY7jP4RrxzZBMVEBhE9gacOrLN1BnN27oSimMggmcRjmzbaOoMFG3aZyiCaSOJvb22CYdg3gyWrzWUQiycx5/VN0Du56/xc9NbKXabuH48n8ep8uRnYplS3NC+DLhKffsNP0BI/hcbYCUkTWe+tU2uQMJlBc6IFJyK1kiay3twjGxEzkqYeoykWxp7gSUkTWe/57dsQTZrLIBiLobquTtJE1puzbhuicXMZhOMJVB+x72th/ptbEI2Zez+IJ3RU766RNJH1Xn11E6JRcxnouoGtW49ImsgmpSqEQEQPmX4cTdEQSjRKmCgzWpPm9/1rioamRLOEaTKjKdZm+jE0RcGpqPnnU6Y0hs0fB9MUBafa5B5LslJjyHwGiqKgPmDjDGQcDxVAQ5N9M2iScDxUCIHGBnkZ2KJUAdHps30/SUsggEuvvASKothySejmPpkDQKClBVdde1XG1yXVJRo3f4JNIBDAtTdcn/F1SXUJSSjVlkAAN8ycmfF1SXVpCQRNZxAMBnHLrbdlfF1SXRobm0xnEAqFcMedn834uqS61NXVm87AMARiMfPvrR1sUaqKokJTnKYfJy83F28tWQ0hhC0Xt8NtOoPcvDwsf31Zxtcl1SXH4zOfQW4ulrz2RsbXJdUlPzvHdAZ5ubl4Y968jK9LqktxQZ7554Hfj/lzX8r4uqS6lPYw/3UYvz8Hc158NuPrkupSXm7+qnmqpiI72/x76z8eT9ojpVmJp4/px9BFEkVu+15Vp7fP/OxJI4lyX08J02TG4Nwy048RN3QM9Nv3O8vDS8x/ry6u6xhcbN/vLA/tVWridLV28aSOwRX2vYznkIFlUEyGkEjqGFBl4wyGlkNVzYWgJw0MGCjvkra2KdVJRTfBpXpTvr8CFYP9F8KjZUmcylrX9LwSHtWT8v0VKBiTPxLZjmyJU1nrnv6T4dNcKd9fgYIpPfqjwG3f58EDY8fD50x9z40C4MLKXuiRZd/nwd3TxsHjMrf3aky/cpTkmd/qz5RbrxtvOoMhA8rQs8T8Vn+m3DLrfLhcDlOP0X9ACSoq5F0IxDalOtA/AaqJcR2KExOLZkicyHqj8kbAoab+BHKpTlxVdrnEiaw3qUc/eLTU30g8mhN3958kcSLrXVjZCzmu1D9YeJ1OPDB2nMSJrDe2Xzlys1L/gOlzO3HPNHtnMGxQT+TnpX44xOtx4vYZEyROZL1Bg8pQ3CP1D0ZerwuzZ18gcSIblaqmODC1x21wKl3f960pTlT4zkOp194XlVcVFTMrboBL7fobqkNxoCqrD/pmV6VhMuuoioqvDLkkpWJ1qhoG+UswMt++hwAAQFUUfHPyRfA4uv4By6lq6F9QgAnl9r6ovKIo+O9rp8DjTCEDTUVlUR4mDLD3ReUVRcEX77oY7hS21ByairIeuTh/tL3fDwDgwc9Pg9udQgYOFcXFObhgotwfXLHVtX97egcimGhAQ+xYp6+spClO5DtLcFfVj6Gp5k92yrSq7D4IJAKoidR06mL6QHuhFrkL8e3B34CzG2QwOLcMwUQEe4InkezktX+dioYSrx9PTb7H1JbuueK8omK0JeLYeepUpy/T51RV9MjKxpyZs+A1sfv4XNG/rAgJ3cDOoyc7nYFDU1GY48MzX54Nn9v+GfSpKISAwM69tZ2+gIGmKcj3+/Dnn90Gnzf1PR7nisrKQmiaip07jnchAxV+vxe//+NdyMqSd5ISYLNSVRQFA3LGIWHEcCKy/8Pr3579iihOxYMybz98tuqncGvmzxo9V4zIHQZd6DjQeggAPvE6wG7VjV5ZFXho8P+Dz9F9MphY3A8AsK3pGBQAxidk4NNc6J/TA89M/hxyXakflz/XXFjZCw5Vw8YTJ6Aq+MRrIfucTvQvKMScmbOQ7+0+GYwfUAmPy4FN+49DUZRPzsDtRK+iPDzzldkoyO4+r4VRQyqRneXG5u1HoajKJ14lyutxomdJHv78s9tQkGff8wpON2x4Jfx+LzZvPtL+PPikDLxOlJTk4vd//CwKC+WfV2C7n37rUB89ivWNC7C9ZRU0RYMuDEQiYWT5sqGLJHr5BuPCopvQN3skFMU2e7m75ESkFktOLsfbDe9ChQpD6AhHIsj2ZUEXOvpn98M1Pa/EsNwhULtpBodbG/DswfV47dhWaIoC3RAIR8LI9mUhKQyMyC/HPf0nY1KP/tC6awYtzXh66xbM3bkTmqpANwy0hcPIzsqCbhgYXlKKB8eOx9Q+faCp3TODYw0teGHNVsxbvwOq0p5Bx/NANwycV9kD90wbjylDquDQumcGJ+pa8MqiLViwvPrDYjHQFo4gO8sH3RAY0KcYt82YgEnj+nXbDE6ebMGr8zfhjde3AgB0XSAcDiM72wddF6iqKsbsWy/AhZMGwOHQ0jOEsLlYMix2tawT7zcuEhNu7SOqm98SLbFTmR7LUpFkVLzfuEmsOLlKDJo5RLxd/444Fa3P9FiWCidiYvmJXeKlQxtEwdXjxYKjW8Wx1qZMj2WpSCIulu7fJ56r3ib8UyaLebt2isPNzZkey1KRWEK8tX2/mLtumygcOVks2LBTHD717/U8iMYSYu2G/eLVJVtFWd9JYvFbO8SRmsZMj2WpWCwh3nlnr1i4YLOoKJ8olrxZLY4cabDkb9t2S/VMFEVBN1qdlDADZgAwA4AZAMwAsD6D7rkPgIiIKANYqkRERJKwVImIiCRhqRIREUnCUiUiIpKEpUpERCQJS5WIiEgSlioREZEkLFUiIiJJWKpERESSsFSJiIgkYakSERFJwlIlIiKShKVKREQkCUuViIhIEpYqERGRJCxVIiIiSViqREREkrBUiYiIJGGpEhERScJSJSIikoSlSkREJAlLlYiISBKWKhERkSQsVSIiIklYqkRERJKwVImIiCRhqRIREUnCUiUiIpKEpUpERCQJS5WIiEgSlioREZEkLFUiIiJJWKpERESSsFSJiIgkYakSERFJwlIlIiKShKVKREQkCUuViIhIEpYqERGRJCxVIiIiSViqREREkrBUiYiIJGGpEhERSeLI9ABmCREH4u8DRhPumpkDEV0JuEZBUQsyPZplDBFHS3QT4noDLrvRj4bwSvjdI+HSCjM9mmWSho5dwf1oSYRQecUgvNdYjUE5fZDn8md6NMskdB0bT9SgPhxG9vhxWH7wAEaUlKBHVnamR7NMUjewbU8NGltaUVQ1Dms27sfgfqUozv/3yUBP6ti56TCa6kMozxmKd5fvxIBhFSgqzc30aJbRdR071+1B44lmlKE31r26AQPG9kWPyqK0/21FCCHS/lfSQOg1EG3PApEXASgABEKhIHJycgERB9xToWR9DnCOgqIomR43LaLJWhwPPoea0AsA2v8bOzIwRByF3ovQK/de5LrHdNsMGmLNWFy7Fotr18KAgIBAaygEf44fCSOJUfmDcUP5dAzx9+u2GdS1tuK56m34W/VWGEJACIFQqBV+fw7iuo5Jlb3wwNhxmFBe0W0zaGhuxfwV2zBn6RboukD7+0F7BomEjrFDK3HH1eMxZkhlt82guSGERS+sx2t/W4dkQgcAhEKh9gziOoZP6Iub77sYoy7s330zOBXAoseXYf7vFiEeSwBQEAoG4c/1IxFLYtjk83DLN67HmEuGQ1XTs6PWdqUqhIBoewJo/T8ABoDEWW6pAPAArvFQ8v8ARfFYN6QFjgaewsHm33xYI/Gz3EqBqniQ6x6FET0ehab6LJ0x3V4/sQpPH3oVAJAQyTPeRgHgVl0YkNMbDw35PLya27oBLfB89Tb8aM0qCABxXT/jbRQAXqcTQ4p74MnrZiDH3b0yWLBqO3799Ir2DBJnzgAAvG4n+vUqwm//303I9nWvDJbP34Tff/cVAEA8dubXAgB4fC706t8DP/7rfcjJ7V7vByufX4tf3/9nQAjEo2frBcCb7UH5wDI8suS78BfmSJ/DdqVqBH8BhJ8DEOnkPdyAoz+Uwhe6TbEeaP4NjgWfhiGinbq9Ajd8zj4YV/YSNNWb5ums8eLRRZh3fDlixtk+UHyUU3Gg1FuMX478ercp1j+9vwG/37Ae0eTZ30T/lUvTUOH349XZtyPb5UrzdNZ47o338fjL7yAa71wGToeGksIcPP3jO7pNsb72zNt46leLEfuEIvlXDqeGotJc/N/8L3WbYl345yX4y9f+hlikc+8HDpcDBaV5eHTjI8gtknuIyFYnKhnhl4Hws+h8oQJADEjuh2j5SrrGslRt6NUuFSoACMQQSRzG9lP/lcbJrLO2fiNeOb6s04UKtG/JnozU42cfPJbGyazz5r69XSpUoH1L9ngwiPsWzIfNPkuf0drNB/BYFwoVABJJHXWNIfz3L+Z1iwzeX70bf+1CoQJAMqGj4WQA37n3CRiGkcbprLF5eXWXChUAkvEkmk624JuX/Uh6BrYpVSF0IPRLAJ0vk3+KAbF3IBL7ZI9lKSEM7G/+RZcKtYOBGFpi7yMU+yANk1lHCIG/HpqPuNH5N5EOCZHE7uAh7AsdScNk1hFC4MdrV3epUDvEdR07Tp3ClpO1aZjMOkII/PbZVYh1oVA7JJI69h+tx9bdNWmYzFqP/XThJ+7qPJtkQsfR/aew7d0DaZjKWn/+2jNdKtQOyXgSJ/afxMYl26TOY5tSRWwVcNZjh52RgAg/JWmYzGiKrE2pUDsYIo6jQXtnsC2wB+Fk6hkkjARerVkhcSLrbag5jpZo6hlEEgk8tmmjxImst33fCTS1tKV8/2gsgb+/vkHiRNbbU30M9bUtKd8/Go7j5SdWyRsoAw5sO4wTB06mfP9IaxQv/eJViRPZqFRF2+OASP1FBOhAZCGE0SptJqsdCTwB3VQGBurDbyJphKTNZLX5x5cjasRSvr8BgfcaqxFKmMkxsx7btBGRRNe3TjoIAKsPH0JjOCxvKIs998ZGROPmMti48ygamu37fjDvyTVIfMJJSZ2xfcMhU8WcaS//70LTGex+bx9qD9VJmshGpYrETvOPoTiB5H7zj5Mhwfh204+hwIXW+B4J02TGXgm7bp2qA4fajkuYJjO2nKyF2aOBLk3DzvpTUubJhO17T8DsIVGnQ8NuiW+mVtu56RAMw1wITpeGvdvt+1qoXrMLhm7umKjD6cDe9+XtBrdFqQphwNyu3w4KIIISHiczzOz6/SeBpGHfDGImtlL/VVuyKye7nVvCJrZSOwgAwZicLDMhEjOfgSEEQmEbZ9BmfnbDEGgL2ve1EAmZf0/UkzpaTRxKOJ0tSrX9m3bmv6zc0tKCadOugKIotlwScfNnqQUCAVxxxbUZX5dUl3jU/IerQEsAM66bkfF1SXWJSthtGwgEMOvmmzO+LqkuoVDAdAahYAh33HZrxtcl1aUl0Gw6g9ZQCHff89mMr0uqS0Njg+kMFE2F0+00/TgdbFGqiqIAivnvEuXlZmPl6u3tF5Cw4ZLlKTadgT83G6uWb874uqS69Mgxf5mxnFw/1i1dk/F1SXWpLJLwPPD78faSJRlfl1SXPpU9pWSwYukbGV+XVJd+A/uYzyDXj0VLF2R8XVJdBo8cZDoDVVWQX5pn+nH+8XjSHindvDcCMPlpQusBaH2ljJMJpdk3QoG5L+271AJkOQdKmsh6l5RMhEs1d8nqLIcX/bIqJU1kvdnDhsGjmcvA53RiZGmZpImsN2PaCLhd5jJwOTUMH2i+nDPlqtnnw+01956oaiqGj6+SNJH1rnnwUniyzF3EQ1EUjPrMUEkT2ahUFd8dMDeuD0rW/e1bvTZV4b/d1E5wVfGiV+59ts7girLJECbOzXCrLswon27rDGYNGwHDxKlKHocDnxs9FqqNM7j24mEQJp4IbpcDs64YAy1N13+1wiU3joMwcaKSy+3AdXdOgubQJE5lrel3XGQqA6fbiWs+fymcrn+z3b8AoDgqANdoACk+ARQAnmtkjmQ5j6MUeZ4JSDkDAKXZ18kbKAMKXLkYlXcetBSfugIC00rOlzyVtYp8PnymTxUcJgph5tBhEieyXm6OFxeP7Q+HlnoG139mhMSJrJft92LKlSPgcKb+fnD1rRdInMh6vhwvpt0+BU53anstFAW47j+ukDqTbUoVAJTcXwBKDrp+0pIHSt5voXSDC8oPLvoZnGouupqBqngwtPjXcKj2/wms/xxwG3KcWVC6mIFLdeKrAz+LbIf9nwc/nnYJCrzeLm9tehwOPHLJZcj32v8a0F+/ezoKcrO6nIHb5cD/3HspCrrBdW8f/M51KOjhh6p2MQOPE//x8AwU9LD/TyM++Ms7UVReCM3RtTpz+9z4wm/ulv5zcPYqVa0USuHzgJKHzm+teQD/j6G4p6ZxMuu4HT0wpuw5ONUCdPbncFXFg0EFD6PYNz29w1kkz+XHz0d8FbnOnH4kuQ0AAAM4SURBVE5vsbpUJ+7vOxMTi0aleTprFPp8mDNzFop9Pjg7ucXqcTjw0JSLce2g89I8nTVyc7z4y/dmoyg/u9NbrG6XA1+cPQVXThmS5umskZPrw69e+AKKyvI6vcXq9jhx139fjstvnpDm6ayRlZuF/13zQ/ToVQxnJ4+zu30u3PHdm3HNg5dJn8d2v1IDAEKvgwj+AIitQfsW2+nf19IAOAFHFRT/d6C4xls/ZJrFkvXY2/QjNIZXAYryse+wKtCgKE54Hb0xsOAh5HvtvcvzTFriITx2YA42NG2Hoigfux6wChVO1YESTyHu63szRuaZP1PwXNMUieDhVSuw7MABKIrysesBq4oCt6ah3O/Hdy+aiim9+2Rm0DQKtEbwv39bibc27IOqKB+7wL6qKHC5HCgpyMGX75iKC0fZ98Scs2kNRvDnH72GtYuroagKYpGPvhYUVYHb7URBiR8PfOsanD+te3yo+FdtgTY8+pWnseqld6CqCqKnfQdZURS4fS4UlObhgV/ehUkz0vOhwpal2kHojRCRl4DIPMBoAWAAShbgngTFdw8UZ/d7Ez1dXG/CidBc1La+jIQRgBBJaGoWCjwTUZl7L3Jc3WOr5JMEE61YVvculp18B6FkG3Shw6t5MDx3IGaUT0PfbPue6dtZLdEI5uzciZd2VKMpEkHSEMhyOXF+eQXuGzMOw0tKMj1i2gXbonh99Q68urIaLcEIkroBr8eJ0YPKcdvV4zGkX2mmR0y71mAEy+dtxBsvrEegsQ3JpA6vz4UhY/vg5vsuxsAR3fdH2ju0Bdqw9G+r8fqflqL5VADJeBLebA+GTByEmV+/FoMvGJjWDGxdqkREROcSWx1TJSIiOpexVImIiCRhqRIREUnCUiUiIpKEpUpERCQJS5WIiEgSlioREZEkLFUiIiJJWKpERESSsFSJiIgkYakSERFJwlIlIiKShKVKREQkCUuViIhIEpYqERGRJCxVIiIiSViqREREkrBUiYiIJGGpEhERScJSJSIikoSlSkREJAlLlYiISBKWKhERkSQsVSIiIklYqkRERJKwVImIiCRhqRIREUnCUiUiIpKEpUpERCTJ/wdnWGqqlyx08wAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "u_k = np.array(eigvect[:, 3]).flatten()\n", "nx.draw(Gd, pos, node_color=u_k)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 3.13454713e-01, 1.93725666e-01, 5.55111512e-17, -1.93725666e-01,\n", " -3.13454713e-01, 2.51371162e-01, 1.55355922e-01, -1.38777878e-16,\n", " -1.55355922e-01, -2.51371162e-01, 1.39500471e-01, 8.62160324e-02,\n", " -7.20321680e-17, -8.62160324e-02, -1.39500471e-01, -2.98372438e-16,\n", " -5.81816545e-17, 3.32152112e-16, 3.61191787e-16, 3.87400344e-16,\n", " -1.39500471e-01, -8.62160324e-02, 2.77555756e-17, 8.62160324e-02,\n", " 1.39500471e-01, -2.51371162e-01, -1.55355922e-01, 9.02056208e-17,\n", " 1.55355922e-01, 2.51371162e-01, -3.13454713e-01, -1.93725666e-01,\n", " -4.29344060e-17, 1.93725666e-01, 3.13454713e-01])" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "u_k" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.3 An irregular graph\n", "\n", "Let us see what are the eigenvectors of the Barbell graph.\n", "You can try other graphs in the [networkx list](https://networkx.github.io/documentation/stable/reference/generators.html).\n", "\n", "For drawing the graph you can use [networkx graph layouts](https://networkx.github.io/documentation/stable/reference/drawing.html#module-networkx.drawing.layout). For example, `spectral_layout` gives the Laplacian eigenmaps." ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/michael/.conda/envs/ntds_2018/lib/python3.6/site-packages/networkx/drawing/nx_pylab.py:611: MatplotlibDeprecationWarning: isinstance(..., numbers.Number)\n", " if cb.is_numlike(alpha):\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Gb = nx.barbell_graph(5, 3)\n", "#nx.draw(Gb, pos=posGb, with_labels=True)\n", "posGb = nx.spring_layout(Gb)\n", "nx.draw(Gb, pos=posGb, with_labels=True)" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "Lb = nx.laplacian_matrix(Gb)\n", "eigval, eigvect = np.linalg.eigh(Lb.todense())" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/michael/.conda/envs/ntds_2018/lib/python3.6/site-packages/networkx/drawing/nx_pylab.py:611: MatplotlibDeprecationWarning: isinstance(..., numbers.Number)\n", " if cb.is_numlike(alpha):\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAd0AAAE/CAYAAAADsRnnAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4wLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvqOYd8AAAIABJREFUeJzt3XlYlOX+BvD7nZVhE3FBcWUpF3ANzS0X1MwdNdI0zaxzOgV6sjpaamW/o2bmlktp2jFzySUVl7QSIUVAxX0lRdxYBBVlZ9b390dHjgsoszAzzNyf65ortnnnCxU33+d53ucRRFEUQURERJVOYusCiIiInAVDl4iIyEoYukRERFbC0CUiIrIShi4REZGVMHSJiIishKFLRERkJQxdIiIiK2HoEhERWQlDl4iIyEoYukRERFbC0CUiIrIShi4REZGVyGxdABERGS/l1h2cy8xGgVoNhUyGOp7u6OjXEDIJeyl7xtAlIqoiNHo9opNTsCLhKFJv50AiEaA3GCARBEgECaQSAa+1a41Xn2uJ2h7uti6XyiDwPF0iIvuXmZuP0Ws2405hEYo02nK/TimTQoCAmQN7Y0BwUytWSBXB0CUisnMZuXkYumId8krU0FfwV7aLTIYpfbpheNuWlVyd/SnSaJFTVASNTg9PFyW83VwhEQRblwWAoUtEZNc0Oh36frsaGbn5MBj569pFJsN3r4bh+cYNKqk6+yGKIo5cS8PKxKNITL0OmVQKiQDoDAa4KxR4vUNbhLdpAW9XlU3rZOgSEdmxHWcu4LPd+544pPwkLX19sPnNkRauyr4kZ93Cuxt34G5xMYo1WpQVakqZDICI4W1b4KPe3SC10YIzLnMjIrJjKxKSTA5cAPgz+w4u386xYEX25ej1NLy6aiPSc/NQVE7gAoBap4Nap8fmE2fxjw3boTMYrFrnfQxdIiI7lXzzFq7fzTXrGnqDHj8eOW6hiuzL5ds5+PtPUSjSVvyPkmKtDkeup2Hazr2VWFn5GLpERHbqdMZNmLv8R2cQcfRaukXqsTczfo01aRSgRKvDnvMXcT4zuxKqejLep0tEZKfy1Wpo9eYPg2bdvYctW7bA3d39sYebmxtcXV0hqWKbamTm5uPYjfRyh5OfRqPXY9XhY/gqrK9F63oahi4RkZ1SymSQSgTozMxdTXEx1q1bh4KCgtJHYWFh6dvFxcVwdXUtM5DLC+qyPv7o5xQKBYRKulVn3dGTMGcZsEEU8duFS/jkpR7wdHGxXGFPwdAlIrJTtd3dIJNIoIberOs0a9wQG//9Ubmf1+v1KCoqKjOQywrqnJyccj93/5Gfnw8AFg3x++9LpVL8euESNHrzfi5yiRRHrqahV9NAs65jDIYuEZGd6tioPrRanVnXEPQ6/LF8CXqsXYHBgwdj8ODB8PPze+hrpFIpPDw84OHhYdZrPUqj0VQoxAsKCpCbm4v09PSnBn9RURGUSiXqvTcVEpWrWfXpRQPulZRY6LutGIYuEZGdycrKwvLly7F8+XLU7jcEuoYBMHWE2c3VFUdifsf+2Fhs374ds2bNgq+vLwYPHoywsDC0bt260oaAFQoFvL294e3tbfI19Ho9srKykJGRgYyMDKSlpeH69evYIZeb2f8DgtnL1IzH0CUiMtKVO3exN/kSbuYVQGcwoJa7Gzo0boCQhvXMCrDDhw9j8eLF+OWXXxAeHo49e/bAq35DDFy+BiU64ztepUyKUSGt4OnujoEDB2LgwIHQ6/VITEzE9u3bER4eDq1WWxrAL7zwAuRyucn1G0MUReTk5CA9Pb00UDMyMh57/9atW6hRowZ8fX3h6+uLevXqwdfXFx4yBe7pzdvbSRAEeKmsu0MVd6QiIqoAgygi5s/LWJFwFBeysqE3iKUbLAgAVHI5vFxd8FbHEAxpFQRXRcXCS61WY9OmTVi8eDFu3bqFiIgIjBs37qHucF3SSXy1Lw7FRgw1yyUSPFO7Jja+MRwKWdn9lSiKOH/+PLZv346oqChcvnwZ/fr1Q1hYGPr06QN3d9NOKsrPzy83SO+/nZmZCVdX14eC9NFg9fX1RZ06dSAro/75MQex6tBxs+Z1lTIp4ie+DQ8XpcnXMBZDl4joKdQ6Hd7b8gsOXbnx1I0YVHIZarm7Yc2YcNTxLH+ONC0tDcuWLcOKFSvQqlUrjB8/Hv369YNUKi3z67+LP4KlBw5XqONVyqQIqFkDP7w2DNVUFV+Zm56ejh07diAqKgqJiYno2rUrwsLCMHDgQPj4+ECtViMzM/Op3aler38oOMsK1bp160JlRpd5My8fvZesMjl0pYKAgS2a4svBL5lcgykYukRET6AzGDBu7RacTM+EWlexX/BSiYDqKhW2//011HR3K/24KIo4ePAgFi9ejOjoaIwaNQoRERFo2rRiR/DFXLyMufsOIiM3D2qd/rEDEJQSAWq1BuNe6ID3enT6737DT/fovGl6ejpSU1Nx9OhRJCcnIzs7GxKJBKIowsfHBw0bNnxid+rp6Vlp88TAXz/HTZs2Yeq+BEjrNwJMeC0XmQwb3xiBpnVqVUKF5eOcLhHRE8yNjsOpjJsVDlwA0BtE3CsuxpvrtyHqb6NQXFyM9evXY8mSJSguLkZkZCRWrlwJT09Po2oJfTYAoc8G4EzGTaw6dByn02+iQKOBUipFbQ93jG7XGtNeH4lWnVpCKZMZNW/q7e39WJCOGjUKvr6+qFmzJq5cuYLY2Fjs3LkTubm56NGjBwYPHox27dpV2sYaoijiZHomUm/fRaFG89eQfV4uvvn8U9y+dQtffDUPX5y8iEKNxqjrushlGBDU1OqBC7DTJSIqV4Fag87zl5u0iAkAXGRShORlYcfK79ChQwdERkaid+/eFgmp8uZNExMTkZycDG9v74fmTZ80d+rj41PhBVQGgwFHjx5FVFQUtm/fjrt372LQoEEICwtDjx49oFSaPz9aoNZgx5nzWJFwDPeKiiHirz2k9TodtFotPJRKRIR2QXjbFog7fRYTd+6DoFBU6NoquQwd/RpiSfhAm5w0xNAlIirHT0dPYU50nFEb6j9INBhQR6fGqrHDERAQUKHnVHTeVKfToV69eo8FqY+PD95//30sW7YMffr0gaurefeyPs3Fixexfft2bN++HWfPnkWfPn0QFhaGfv36oVq1akZf70zGTYxbtxVavf6JC8dUchkkEFC8ewteGRKGBLkHbhcUoVhb9klDLvK/Ov9RIa3wr15dbXaoPUOXiKgcvZb8BzfMPOVHIZXiwHt/g6dS8di8aVmhmpeXh7p165Y7X3r/7SfNmy5cuBAJCQnYtGmTWbUbKysrCzt37sT27duxf/9+dOjQAWFhYRg0aBDq16//1OefTMvE2LU/G7VKWyIa8J/R4ejQuAGOp2Xg+8Rj2H/pCmQSCSSCAK1BDy+VCuM6tMWw1sFGLSyrDAxdIqIyiKKIoJlfQ2/ur0itBkU7N+Hm2dNl3m/66Ns1a9Y0e/i5oKAAfn5+SExMRGCg9bY4fLSG33//HVFRUfjll1/g7++PsLAwDB48GEFBQY/9wZCVV4B+y1ajQG3c/CwAuMrl2P7319DQ2wvAX6vN7xWVQKPXwcPFBdVclJW6sMsYDF0iojJodDq0mr3ksRXCxpLqdWhbeAfBNbxQrVq1cvcTvv+2SqWyyJzvtGnTkJOTg2+++cbsa5lLq9Xi4MGDiIqKQlRUFORyOcLCwhAWFoaOHTtCKpXiy+gDWHPkhEmnKkkFAUNbB2HGgN6VUL1lMXSJiMogiiKaz/za7NCVQ0R3fSFcCnLL3FP40fdLSkoeO/HnwVB+UmA/+H5JSQkGDRqEQ4cOwc/PDy4uLnbR7YmiiFOnTpUuxEpPT0f/gYOQ1DgIps2c/8VFJkP8+2/DXVmxBVW2wtAlIipHlwXf4VZBoVnXUMqk2Bs5Dj4eFdvd6Wkn/jzp/Uc/d/36dej1ehgMBmi1WqNCu6LvKyq4arg8586dw1szvsTtgGaQKE2fb1XJ5Zjc6wW8GtLKrHoqG+/TJSIqx2vtWuHbuCMm3zIEAI3cXFH7gQ0ynsaSJ/5cunQJnTp1wpUrV+Di4mJUgN+6deupX19QUADgycf3lfe+m5sbTp06hZUrV6LRy6PMClwAKNZqkXQ93e5Dl50uEVE5cgqL0H3RSqM2xniQHIB63y5UL8rHBx98gGHDhpW5j3Blevnll9G1a1dMmDChUq5///g+Y7ry9PR0xMfHo6ioCP7+/tB26AZ9fb+nv9hTdPZviP+MGmaB76ryMHSJiJ7g/a27Ef1nitHBKwDw8XTH3nfHYs/u3Zg/fz6uXr2KCRMm4K233jLpHlZTHD58GMOHD8elS5esdoJQeQoLCzFjxgysWLECU6dORWRkJORyOT7e8Ru2njpv9vV7NQnA0lcGWaDSymP97TiIiKqQfw/ohXrVqkFm5IpiV4UCq0YNg0Iux+DBg7F//35s2bIFx44dg7+/P95//31cu3atkqr+n+effx6NGzfG5s2bK/21yiOKIn7++Wc0a9YMN27cwJkzZzBx4sTSPwLqe1WDXGpeHEkFAfW9rPOHjDkYukRET+CmUGD92FcQWMsbLhUYGpZJJKimcsG618PhX/Phw9tDQkKwfv16nDx5ElKpFG3btsXw4cNx+PDhyiofADBp0iTMmTMHthjY/PPPP9GnTx9Mnz4da9aswdq1a1G3bt2HvqbPM34wmHCr0IPkUimGtgoy6xrWwNAlInqK6q4qbHzjVUR264Cabq5wK+OsXFe5HCq5HMPbtsDOt0ejWZ3a5V6vQYMG+Oqrr3D16lV06tQJI0aMQJcuXbB161bozTgftjx9+/aFXq9HdHS0xa9dnsLCQkyZMgWdO3dG3759ceLECXTr1u2hr7lx4wamTJmCTq1aQJ6bY9br+dWojiY+Nc26hjVwTpeIyAgGUcTBy9ew/cx5ZOcXQqc3oLqrC0KbBKB/UBOoTJg31el0iIqKwvz585GVlYX33nsPb7zxhsmHyJdl9erVWLt2Lfbu3Wuxa5ZFFEVs3boVEydOxAsvvICvvvoKvr6+D30+Pj4eixYtQnR0NEaPHo2IiAjclCgw4eddKDZhn2uVXIZZA19Ev6AmlvxWKgVDl4jIjiQmJmL+/PmIjY3Fm2++ifHjx1do3+Kn0Wg08Pf3x44dO9C2bVsLVPq4ixcvYvz48UhPT8fSpUsf6mxLSkqwYcMGLFq0CAUFBRg/fjxef/31h443/Gx3NLafvmDU3ssuMhl6NQnA3CF97WLzj6fh8DIRkR3p2LEjNm/ejKSkJKjVarRs2RKvvfYajh8/btZ1FQoFJk6ciK+++spClf5PYWEhpk6dik6dOqFPnz4PDSWnpaVh6tSpaNSoETZu3IiZM2ciOTkZ48ePf+w84U9fCsVLzZ+FSl6x26pUchm6BjbG7MF9qkTgAux0iYjs2r1797By5UosWrQIAQEBeP/999G/f3+T9mfOy8uDv78/kpKS4Odn/n2xoihi27ZtmDhxIrp06VI6lCyKIhISErBo0SLs3bsXr732GiIiItCkydOHf0VRxKbjZ7A07jDy1WoUaR4fbnZV/DV//nbn9hjTvnWVCVyAoUtEVCVotVr8/PPPmDdvHvLz8zFx4kSMGTPG6PNyP/74Y+TnF+Af//wYe+IvIPtOPrR6Pbw8VOjY0g892j8DRQU6zYsXL2LChAm4ceMGli5diu7du6OkpAQbN27EokWLkJeXh/Hjx2Ps2LGPdbQVIYoiDl29gVWHjiHldg6KNVqo5HI0rlEdY59viy4BjWx2Jq45GLpERFWIKIqIi4vD/PnzkZCQgLfffhsRERGoU6fOU5+r0xuwfmc8Fv7wKzyr14Zaq3/oNiJXFzkAAUN6tsTIfiGo4fX49pWFhYWYNWsWli9fjilTpmD8+PHIzs7GsmXL8N1336FNmzaYMGECXnrpJYucluRo+BMhIqpCBEFA165dERUVhYMHDyInJwfNmzfHuHHjcObMmXKfV1SiwYQvNuM/O05A4eaNEo3usft2i0q0KCrRYNNvx/Hq5B9w6Vp26efuDyU3b94cV65cwalTp9CxY0eMGTMGLVq0wN27d7F//378+uuv6NevHwO3HOx0iYiquDt37mD58uVYsmQJgoOD8cEHH+DFF18snevU6vT4x7834tK1bGi0Fb8P2NVFgVX/HgVN4R2MHz8eN27cKL2tafHixbh79y4iIyPxxhtvWG1by6qOoUtE5CDUajU2btyIefPmQa/XY+LEiRg1ahSWbozHjj/OQq0x7rQkQQAUEgPO7ZmDd995B3q9Ht9//z1atWqFCRMmoG/fvuxojcTQJSJyMKIoIiYmBvPmzcOJU2fg1+OfMIgmLjoy6OCl+ROHY7Zh5MiRiIyMRLNmzSxbsBNh6BIRObCla/Zg7a9nIZqxhKeGG7Buzpvw8vKyYGXOieMCREQO7I+TmWYFLgAUaGQo0la923PsEUOXiMiBZd/JN/sacrkEGdm5FqiGGLpERA5MozNu8VRZRBEoKtZYoBpi6BIRObCK7C71NIIAuKkUFqiGGLpERA6sbk3jt2B8lEarR/06XERlCQxdIiIHNrJ/CFRK48/4fVBQQF341DA/vImhS0Tk0F7s2PSx7R6N4eoix+iB7SxYkXNj6BIROTAXpRzDereGi8L4uV2JIKCahwrPt2xs+cKcFEOXiMjBvTP8BQQF1oXSiEVVggC4qhRYOuUVSLnVo8XwJ0lE5OBkUgnm/WsIQoIaVmh+VyGXorqnK77/fCR8a/MgA0viNpBERE7CYBCx7/CfWLbhD6Rl50Iqk8NgePg8XblMiuEvtcWw3q1RzV1lw2odE0OXiMjJjB8/HqpqPvBv2R1Zd/Kh0ergXc0N7YIbonMbfw4nVyKGLhGRE9HpdKhXrx7i4+MRGBho63KcDv+cISJyItHR0fDz82Pg2ghDl4jIiaxbtw6jRo2ydRlOi8PLREROorCwEPXq1cPFixdRu3ZtW5fjlNjpEhE5iR07dqBjx44MXBti6BIROQkOLdseh5eJiJzA7du3ERgYiLS0NLi7u9u6HKfFTpeIyAls3rwZffv2ZeDaGEOXiMgJcGjZPnB4mYjIwV29ehXt2rVDRkYG5HLzztYl87DTJSJycOvXr0d4eDgD1w4wdImIHJgoihxatiMMXSIiB3bq1CkUFRWhU6dOti6FwNAlInJo69atw8iRIyEIgq1LIXAhFRGRwzIYDGjYsCF+++03BAUF2bocAjtdIiKHdeDAAdSsWZOBa0cYukREDooLqOwPh5eJiByQWq2Gr68vTp06hfr169u6HPovdrpERA5o9+7daNmyJQPXzjB0iYgcEIeW7ROHl4mIHExubi4aNmyIq1evonr16rYuhx7ATpeIyMFs3boVoaGhDFw7xNAlInIwHFq2XxxeJiJyIBkZGQgODkZGRgZcXFxsXQ49gp0uEZED2bBhA8LCwhi4doqhS0TkQDi0bN8YukREDiI5ORmZmZno3r27rUuhcjB0iYgcxPr16zFixAhIpVJbl0Ll4EIqIiIHIIoiAgMDsWnTJjz33HO2LofKwU6XiMgBHD58GHK5HG3btrV1KfQEMlsXQERExsm8koUrp6+jMLcISlcFajWoibVr12LUqFE8rN7OMXSJiKoAvV6PpD0nsXFOFC4evQyZQgaDQYREEGAQReQV5aLFRyEouFcIdy83W5dL5eCcLhGRnbudkYNJvf4Pt9PvoDi/pNyvU7oqIQjAp5s/QLuX2lixQqoohi4RkR27lXYH74ZMRn5OAfQ6fYWeo1QpMGl1JLq+3LGSqyNjMXSJiOyUpkSDv7X8AFlXs6HXGYx6rtJVgXl//B+ahARUUnVkCq5eJiKyU/s3J+LuzXtGBy4AqIs0+P7jdZVQFZmDoUtEZKc2zolCcUH5c7hPcy4+GdnXb1mwIjIXQ5eIyA6lnLiCm1eyzbqGaBCxfelvFqqILIGhS0Rkh84nXoRoMG/JjVajw/Ho0xaqiCyBoUtEZIcK7hVCp9GZfZ3C3CILVEOWwtAlIrJDcqUcgtT8X9EyBfdAsicMXSIiO+RdxwsKpdzs69Ss522BashSGLpERHaow4C2Jt0q9CCVhwv6/723hSoiS2DoEhHZIbdqbuj2SkdIzBhilkgk6BzWzoJVkbkYukREdurl9wdCbuKcrMJFjsERL0Em55yuPWHoEhHZKf+WjTB88mC4uCmNep5MLkX9Jr4YOXVoJVVGpmLoEhHZsdc+CUfI4JbQo2KHHShc5KjfxBdfRX8Gpcq4sKbKx9AlIrJjd+/exQ/x36Lnux1Rw7c6VO4uZX6di5sSSlclXhzbA4sPfQHPGh5WrpQqgqcMERHZKYPBgIEDB6JJkyaYP38+RFHEiZiz2Dx3O1JOXEFJoRpypRw16lZH2Pi+CB3ZBSp3la3Lpidg6BIR2akZM2bg119/RWxsLORy8+/ZJdvjsjYiIju0d+9efPPNNzh69CgD14EwdImI7Mz169cxevRobNiwAb6+vrYuhyyIC6mIiOyIWq1GeHg4Jk6ciO7du9u6HLIwzukSEdmRyMhIpKWlYdu2bRAEwdblkIVxeJmIyE6sX78ev/76K44ePcrAdVDsdImI7MC5c+fQvXt3REdHo1WrVrYuhyoJ53SJiGwsLy8PQ4cOxdy5cxm4Do6dLhGRDYmiiFdeeQXe3t5Yvny5rcuhSsY5XSIiG1q4cCGuXLmCNWvW2LoUsgJ2ukRENhIXF4eXX34Zhw8fRuPGjW1dDlkB53SJiGzg5s2bePXVV/HDDz8wcJ0IO10iIivT6XTo1asXunXrhs8//9zW5ZAVMXSJiKxs8uTJOHnyJHbv3g2pVGrrcsiKuJCKiMiKoqKisGHDBhw7doyB64TY6RIRWUlKSgo6deqEXbt2oX379rYuh2yAC6mIiKygqKgIw4YNw/Tp0xm4ToydLhFRJRNFEWPHjoVer8eaNWu4r7IT45wuEVElW7FiBY4dO4bDhw8zcJ0cO10iokp09OhR9O3bFwcPHkSTJk1sXQ7ZGOd0iYgqyZ07d/Dyyy9j2bJlDFwCwE6XiKhSGAwG9O/fH0FBQZg7d66tyyE7wU6XiKgSzJgxA4WFhfjiiy9sXQrZES6kIiKysN9++w3Lly/H0aNHIZfLbV0O2REOLxMRWdD169fRvn17bNq0CV27drV1OWRnOLxMRGQharUa4eHh+PDDDxm4VCZ2ukREFhIREYGbN2/i559/5v24VCbO6RIRWcDatWuxd+9eJCUlMXCpXOx0iYieQDQUAerfIOquAYZcQFINgiwAcHkRgqAEAJw5cwahoaHYt28fWrZsaeOKyZ4xdImIyiDqrkIs/AEo3gYIAiAW/e+Tgutf/1SFo9AwDM+1H4RPPvkEo0ePtkmtVHUwdImIHmEo/gXI/RiA7r+P8shRotZh1ZaWiHh/s5Wqo6qMoUtE9ABD0U4gbyqAkgo/R4QLJF4LILj0rLzCyCEwdImI/kvUXoB4ZziMCdz/UUGoGQVB5mfpssiB8D5dIqL/Egu+BaAx8dkaiIUrLVkOOSCGLhERANFwF1DHAjCYeAU9ULwToqHQkmWRg2HoEhEBEIu2AjD3/loBKNlliXLIQTF0iYgAQHcGps3lPqgYova8JaohB8XQJSIC/tr4wiLXuWuZ65BDYugSEQGA4GaZ60g8LHMdckgMXSIiAJAFADD37FsFIOUtQ1Q+hi4REQBB9TIs8StRUA02vxhyWAxdIiIAgqwB8koam3MFQNkFgrSWpUoiB8TQJSKnl52djXHjxuEf75+ETm/qELMSgtvfLVoXOR6GLhE5Lb1ej6VLlyI4OBjVq1fHdz+cg8zjDQAq4y4kqAD3CAiKtpVSJzkOHmJPRE4pMTERERER8PT0RExMDIKDgwEAovgBRIhA0VoAxRW4kgpw+zu7XKoQHnhARE4lOzsbH330EX777TfMnTsXI0aMgCA8vhOVWBILsWAxoLuEv4730z/wWTkACSAPguAeCUHZxUrVU1XHTpeInIJer8eyZcswffp0vP7667hw4QI8PT3L/XrBpQcElx4QdSkQC9f/Fb5iASB4APKmEFxHQpA1tt43QA6BnS4RObyEhARERETAy8sLS5YsQVBQkK1LIifFTpeIHFZ2djYmT56MvXv3Yu7cuRg+fHiZQ8lE1sLVy0TkcHQ6HRYvXoygoCDUrFkTFy5cKHfulsia2OkSkUOJj49HREQEvL29sX//fjRv3tzWJRGVYugSkUPIysrC5MmTER0djXnz5uGVV15hZ0t2h8PLRFSl3R9KDg4ORu3atXHhwgXO3ZLdYqdLRFXWwYMHERERgZo1a3IomaoEhi4RVTlZWVmYNGkSYmJiMG/ePISHh7OzpSqBw8tEVGXodDosWrQIwcHBqFOnDi5cuMC5W6pS2OkSUZUQFxeHyMhI1KpVCwcOHECzZs1sXRKR0Ri6RGTXbt68iUmTJiE2Nhbz58/Hyy+/zM6WqiwOLxORXdLpdFi4cCFatGgBX19fXLhwgXO3VOWx0yUiu3PgwAFERkbCx8cHcXFxaNq0qa1LIrIIhi4R2Y3MzExMmjQJ+/fvx/z58zFs2DB2tuRQOLxMRDZ3fyi5ZcuWqF+/Ps6fP8+5W3JI7HSJyKYOHDiAiIgI1K1bFwcPHkSTJk1sXRJRpWHoEpFNZGZm4l//+hcOHDjAoWRyGhxeJiKr0mq1WLBgAVq0aIGGDRviwoULHEomp8FOl4isZv/+/YiIiEC9evUQHx/PoWRyOgxdIqp0GRkZ+Ne//oWDBw9iwYIFGDJkCDtbckocXiaiSqPVajF//ny0atUKjRs3xvnz5zF06FAGLjktdrpEVCn++OMPREZGon79+oiPj8ezzz5r65KIbI6hS0QWlZGRgQ8//BDx8fFYuHAhwsLC2NkS/ReHl4nIIrRaLebNm4eWLVvC398fFy5c4Nwt0SPY6RKR2WJjYxEZGYkGDRogMTERzzzzjK1LIrJLDF0iJ3Y9OR0J25Nw9+Zd6PUiqvtUQ8iLrdCkXWCFnp+eno4PP/wQiYmJWLBgAYeSiZ5CEEVRtHURRGQ9er0eCVFJ2DhnO66cvQ6DTg+dVg8AkEglkCu+YDbJAAAasElEQVTlqNWgBkZMDkOPV7tAoZQ/dg2tVouvv/4as2fPxjvvvIOPP/4Yrq6u1v5WiKochi6REykpUmP60K9wLj4ZJYXqJ36ti5sSvgF1MCf6U1Sr6Vn68ZiYGERGRqJx48b4+uuvOZRMZASGLpGT0Gq0+KD7Z7h88io0JdoKPUcml6JmvRr49vgc5BbewwcffIBDhw7h66+/xqBBgziUTGQkrl4mchKLI79H6qlrFQ5cANBp9biTmYNxIePRqlUrPPvsszh//jwGDx7MwCUyARdSETmB3Nt52Lf2gFGBe59WrcPdq3nYsiMK3fp1qYTqiJwHO10iJ7Dn+xizOlOJIMXRractWBGRc+KcLpETeMX3b7h7855Z11CqFNic/T1Ubi4WqorI+bDTJXJwGrUWudm5Zl9HIpPgdtodC1RE5LwYukQOriivCFK5+cs3BEFAUV6xBSoicl4MXSIH5+LmAoNeb/6FxL/u3SUi0zF0iRycUqWA0tX8sNRqtKjh622BioicF0OXyMEJgoC+b4ZCIjP9f3dBAEJebA13LzcLVkbkfBi6RA5Mr9djw4YNWLZrEfR6ncnXUboqEf7hIAtWRuScGLpEDkir1eKHH35As2bNsGjRInyxcCbavdgWMoXxC6okEgE169dAcJemlVApkXPhfbpEDqSkpAQ//PADZs+ejYCAAEybNg3du3eHIAjIy8nHP9pMQk5mDvQ6Q4WuJwiAazVXfHtsDur6+VRy9USOj50ukQMoLCzEwoULERAQgJ07d2L9+vXYt28fevToUboTlae3BxYlzIBP49qQl3Fc36Nkcik8a3piYdwMBi6RhbDTJarC8vLy8M0332DhwoXo0qULpkyZgrZt2z7xOUX5xdg0dwe2L9kDvU6P4vyShz6vcneBCOClN3rg1Y+HwLtO9Ur8DoicC0OXqArKycnBokWLsHTpUvTp0wcff/wxgoKCjLqGXqdH4s6j2LcuDnez7sGgF1GtpgdeGNYB3V7pCKWK9+QSWRpDl6gKycrKwvz587Fy5UoMGTIEH330EQIDA21dFhFVEOd0iaqAtLQ0/POf/0SzZs1QWFiI48ePY+XKlQxcoiqGoUtkx1JTU/H222+jZcuWkMvlOHfuHJYsWYJGjRrZujQiMgFDl8gOJScn4/XXX0e7du1Qq1YtXLx4EXPnzkXdunVtXRoRmcH8o0eIyGJOnz6NmTNnIjY2FhMmTMDly5fh5eVl67KIyELY6RLZgSNHjmDw4MHo06cP2rVrh9TUVEybNo2BS+Rg2OkS2VBcXBxmzJiBCxcuYNKkSdiwYQNUKpWtyyKiSsLQJbIyURQRHR2NGTNmIC0tDR9//DHGjBkDhUJh69KIqJIxdImsRBRF7Nq1CzNmzEB+fj6mTJmCESNGQCbj/4ZEzoL/txNVMr1ej61bt2LmzJkQBAHTpk3DkCFDIJFwSQWRs2HoElUSnU6Hn376CbNmzUK1atUwY8YM9O/fv/QAAiJyPgxdIgtTq9X48ccfMXv2bDRs2BBLlixBaGgow5aIGLpEllJcXIyVK1dizpw5CA4OxurVq9GlSxdbl0VEdoShS2Sm/Px8LFu2DPPnz0eHDh2wbds2hISE2LosIrJDDF0iE927dw+LFy/G4sWL0bNnT/z+++9o0aKFrcsiIjvG5ZNERrp16xamTJmCgIAApKamIi4uDj/99BMDl4ieiqFLVEEZGRl4//330aRJE9y9exfHjh3DqlWr0KRJE1uXRkRVBEOX6CmuXbuGd999F8HBwRBFEWfOnMG3336Lxo0b27o0IqpiGLpE5bh06RLGjRuHtm3bolq1akhOTsaCBQtQr149W5dGRFUUF1IRPeLs2bOYNWsW9u7di/HjxyMlJQXVq1e3dVlE5ADY6RL917FjxzB06FD06tULrVu3RmpqKj799FMGLhFZDEOXnF5CQgL69euHwYMHo3v37khNTcWkSZPg4eFh69KIyMFweJmckiiKiI2NxYwZM3D16lV89NFH2LZtG5RKpa1LIyIHxtAlpyKKIvbs2YMZM2YgJycHU6ZMwauvvgq5XG7r0ojICTB0ySkYDAZERUVhxowZ0Ol0mDZtGoYNGwapVGrr0ojIiQiiKIq2LoLoQbfuFuDw6avILSgGAFRzV+H5lo1Rq7q70dfS6XTYtGkTZs6cCTc3N0ybNg0DBgzgWbZEZBPsdMkuiKKI4+dvYM2uJBy/cANSiQRanR4AIJdJoTcY8FzzBnitfzu0bd7gqcfkaTQarF27Fl988QXq1q2LBQsWoHfv3jxej4hsip0u2ZxGq8PURbtw9Nx1FKu15X6dAMBFKUe74IaYMX4AFPLH/2YsKSnB999/jzlz5qBJkyaYNm0aunbtWonVExFVHEOXbEqn0yNi1mYkp96EWquv0HOUChma+vlg6ZRwyGR/zckWFhZi+fLlmDt3LkJCQjB16lQ8//zzlVk6EZHROLFFNvXlqmj8eSWrwoELAGqNDn9eycKcVdHIzc3FzJkz4e/vj8OHD2PPnj3YsWMHA5eI7BI7XbKZO/cKMeS9FdAYEbgPkggiLscsQp9e3TFlyhQ0bdrUwhUSEVkWF1KRzWzbd8qs54uiiH/9exk+fLOfhSoiIqpcHF4mm9AbDNj02wmTu1wAECHB3iNXYDBwsIaIqgaGLtnEvfxilGjKX6lcUcVqben9vERE9o6hSzZRWKSGVGr+f35SiQQFRWoLVEREVPk4p0tWIYoicnJykJKSgpSUFJy5cBklJSqY+3efQRShVPA/YyKqGvjbqhKIogiNXg+FVOpUOyCJooisrKzSYL18+XLp2ykpKRBFEYGBgahbty4MogDRs8tfO16YwWAQUc1dZZlvgIiokjF0LSS3uARbTp7F6iMnkJ1fWPpxHw93jO3QFkNbNYeni4sNK7QMg8GAjIyMh8L0wYdKpUJgYGDpY8CAAahevTpu3LiBpKQkxMbG4saNGwgNDYVHLSWu3dHB1JvWBEFA1+cC2OkSUZXB+3TNpNbp8PnuGOw6lwxBEFCi1T32NSq5DAZRxOAWzfDJSz2gkNl3SOj1ely/fv2hML3ftaampsLLywsBAQEPhWtgYCACAgLg5eWFe/fuYf/+/di3bx9iYmKQnp6Obt26ITQ0FKGhoQgKCoIgCDh7KQORX/yMkids/fgkLko5lk4NR1BAXQv/BIiIKgdD1wwFajVG/7gZl2/fhVr3eNg+ykUmwzO1a2D16JfhplBYocLyabVaXL16tcxu9dq1a6hdu/ZjoRoYGAh/f3+4uz982k9hYSHi4+NLQzY5ORkdO3ZEz549ERoaijZt2kBWxh8aoiji1Uk/4FpGDoz9j1AQBDTyrY6fvhzrVEP4RFS1MXRNpNXrMfrHzTiXmQ2NvuL3miqkUrSuXxerXhsGWSUfL1dSUoLU1NTHQvXy5ctIS0tD/fr1H+tUAwMD4efnB5Wq/HlSjUaDw4cPIyYmBvv27cPx48fRpk0bhIaGomfPnnj++eehVCqfWp8oivi/WfPxy2k1JLKnf/2D3FQKrJ45GvV9vIx6HhGRLTF0TbTh2GnM3rsfxWUMJz+NSi7Dp31DMbRVkNl1FBYWPrZg6f4jOzsbjRo1KrNjbdSoERQV7Lb1ej1OnDhRGrIJCQlo0qRJach27tz5se63Itd87733EBsbi29WrseM/8ShoFj91I0uJBIB7iollkwJx7ONaxv1mkREtsbQNYEoiui1ZBXS7uWafA3/mt7Y887rFfra3Nzcchcu5ebmwt/fv8xgbdCgAaRSqdG1iaKI8+fPl4bs/v374evrWxqy3bp1Q/Xq1Y2+7n2FhYUYOXIkCgoKsGXLFnh5eeHm7Tx8szEOfyRdgkQQUKJ5+I8ZF8Vf8+Ld2z2DiBEvwKeGp8mvT0RkKwxdExy/kYFx67aiWGv6jkoquQxrxoSjhW8diKKIO3fulHmbTUpKCkpKSh4a/n3w4evrC4kFhqlTU1MRExNT+nB1dS0N2R49eqBOnTpmvwYAZGVlYeDAgWjWrBlWrFjxWLedV1iCXfvPYm9CMnILSiCKIlIunsekd0dgcGgreLpV/RXgROS8GLom+L89MVh/9JTRi38eIoqofScTxfGxSElJAQA888wzZXastWvXtvhioYyMDMTGxpaGbElJSenq4tDQUPj5+Vn09QAgOTkZ/fr1w5gxY/DZZ59V+Htq2rQpfv75ZwQHB1u8JiIia7Lve1fsVFZ+gXmBCwCCgNqN/TBp5MsIDAyEt7d3pa7CzcnJwR9//FEasjdv3kT37t0RGhqKDz74AM2aNavU1z9w4ADCw8Mxe/ZsvPHGG0Y9NygoCOfOnWPoElGVx9A1gc5gsMh1PKp5oXXr1hVa6WusgoICxMXFlYbspUuX0LlzZ4SGhmLNmjVo3bq1SfO9ptiwYQMmTJiAdevWoXfv3kY/Pzg4GGfPnsXw4cMroToiIuth6JqghqurRa6TsC8anu+8AR8fHwQEBJT58PKq2C0xarUaiYmJpSF78uRJhISEIDQ0FF9//TXat29f4dXKliKKIubMmYOlS5ciOjoaLVu2NOk6QUFB2LBhg4WrIyKyPoauCbo944dfL1xEoRlH07kp5Jj72VR0Xf0drl+/jsuXL5c+kpKSSt9WKpWli6gefDRq1AiZmZmlIXvo0CE0b94coaGh+Oyzz9C5c2e4WuiPA1PodDpERkYiMTERCQkJqF+/vsnXCmzSFGez72BvcgoEQYC3qwotfH0gt1KnTkRkKVxIZQKtXo9O85cjr8T0I+U8FXIc+te7kD5h5bEoisjOzsbly5dx6dIlHDp0CElJSUhNTcW9e/cAAN7e3ggICEBISAiaN29eGsqNGzeGXC43uT5zFBQUYPjw4dDpdNi8eTM8PU27vSf1dg5+PHICUafPozC/AB6eHqXzzhJBwKiQVng1pBV8PIy7R5iIyFYYuib6+o8ErExIgkZv/PyuFCLyE/ajT71amD59epldoCiKuHz5cunWirGxsfD09CzdWrF79+5wdXV9qEN+8JGRkQFfX9/S24we7ZSN3cyiojIzMzFgwAC0adMG3377rUnBrzMYMH33Puw4cwF6gwG6cjbM+OsUJ2B81w54q1M7bgdJRHaPoQvgZl4+fjp6GifSMpCnVkMlk6NRDS+MfK4VWvj6lPnLPP7oMbyxZQ8ElStgxC97iSCglrsb1r06CN8sXIjvvvsOf/vb3zB58mQUFRWVbkgRExMDvV5fGrI9evRAo0aNKvw6Go0G165dKzOQU1NT4eHhUe48sqm3KJ07dw79+/fHW2+9halTp5p0Db3BgHc2bsfha2llHh5RFpVchuFtW+DjF7sb/XpERNbk1KF7Mi0Ti/5IQNL1dADiQ12rRBCglElR28Md73Rpj7CWzUtDZNOmTYiIiMAnX83DmlsFKFBrYKjAj1EqCPBwUWLzuFfR0NsLt2/fxpYtW7Bw4UJcunQJCoUCffr0wYsvvojQ0FA8++yzldK9GQwGZGZmltslazQa+Pv7l9klN2jQoMzDC2JjYzFixAjMmzcPr732msm1fb4nBttOnTN6e02VXIZJvbpiZEgrk1+biKiyOW3obj15Dp/viUFJBU4HUsll6PGsP74Y0BvTP/0UGzZswLZt29CmTRuk3cvFuHVbcaugEEXlLKwSAKjkctR2d8Xoet44cTAO+/btw5UrV9ClSxf07NkTjRs3xpo1a3D06FF8/vnnGDNmTJnhZg337t0rN5Czs7PRoEGDh4L4xo0bWL16NdatW4e+ffua/LpZ+QXotfg/Rh0g8SB3pQKJH/wDCi6wIiI75ZShu/PMBUz7JbrCw5cAoJRKIbuZBq9zx7Bp40bUrFmz9HOiKOLQ1RtYmXAUR66lQSGTQgAgikCJVouaOjUKk+KRvD8G7du3Lx0yDgkJeWzOMzExEZMnT8adO3cwa9YsDBo0yK7mKktKSnDlypXS7So3btyIU6dOoU6dOsjIyChd2HX/8WCn/LQNQBbGxuP7xGMmh66rQo4Z/Xujf3ATU789IqJK5XShe+NuLgYs+7FCHe6jpKIBn/brhRHlDGFqtVrEJCTi17h4HD5xAhdOncKz9eqiV5fO6NmzJzp27PjEI/PuE0URu3fvxkcffQRPT098+eWX6NKli9H1ViatVot33nkHJ06cwK5du1C3bl3o9Xqkp6eX2yUDKHce2aduXXRZuMKsFeEA0NSnJrb/fbQlvkUiIotzutCd9fsfWH/0FLQmrDoGgHrVPLFv/DgIggCDwYDTp0+X3isbFxcHPz+/0oMCXnjhBZNvlwH+Ov5u3bp1+OSTT9CqVSt88cUXCAoy/zhAc+Xl5SE8PBwymQwbN26s0EpoURSRk5NTeqjDo488SFDvrfGA3LwNPAQA56e9B4kdjQ4QEd3nVKGr1unQYd6ycudeK8JFJsVANyn+jPsDsbGxqFGjRukhAT169Hho2NlSSkpK8M0332D27NkYMGAAPv/8czRo0MDir1MRaWlp6N+/Pzp27IglS5ZAKpVCq9VCo9FAo9FArVY/9M+KfuxKXiF+1Uqhk5g3HyuXShA/8W1UU/E0IiKyP04VunvOX8TUnb+btZOUaDCgRmEu3gkORGhoqFk7LVXo9USxNNRu376NBQsW4Mcff8TQoUMxbtw4qFQqk4PO2I8VFBTg5s2bcHFxgUQiKf2cTCaDQqGAUql86J/GfKzE1R2HPGpDJ5h3TKFUEHBscgRUNtoYhIjoSZxqG8j0e3lQ60xbpHOfIJFAWas25HI59u3bV+lBV1aoubq64ueff8bq1atRu3Zt1KtXD66urhUOOjc3N3h4VUehTAG9TAYXhQJeSgXquqng4uJS5nOTkpIwefJkLF68GOHh4Q993tzzfAsKCrArJhYJJy+ZdR0AkEgEuNho1TcR0dM41W+nYq3WIicE3bmXi+3HDj4x1KpXr25W51eRUPvzzz8xdepUHDp0CNOnT8fYsWOfepvR1Tt38eORE9h86jykWgGCDkCJBjpDCWq56/FWx6bo1aIZXBX/6xRXrVqFKVOmYOvWrejatavZP7/i4mIkJiaWnud76tQpPPfcc/DsORD3YPrwskQQ0KfZM3a12puI6EFONby86tAxzIs5aPIiqvvE29nw//PEY4fN+/n5VcoxfU9z+PBhTJ48GVlZWZg1axbCwsIeCx6NXo8pO37H78mXoDeI5f7xcX9Ydu6Qvuj5rD+mT5+ONWvWYPfu3WjatKlJ9Wk0GiQlJZVuZ3nkyBG0aNGidB68U6dOcHV1xa6zyfj0l2iTh/9dZDKsH/sKgur6mPR8IqLK5lShe/DyNUz4eadZc7pSQUBvvwZ40csFKSkpDz2uX78OX1/fx8I4MDAQ/v7+FbpdyFSiKOLXX3/FRx99BFdXV3z55ZelXalGr8cba7fgbEZWhW+VcpHJ4JueijtH4rFz5074+FQ8yPR6PU6cOFG6qjshIQGBgYGlC866dOlS5qpujU6HTvOXI1+tqfBr3ScACKjljV/+8brRzyUishanCl2DKKLLgu9wp7DI5Gu4yGTY+tZIBNSq8djntFotrl279lgYp6Sk4OrVq6hVq1aZgWzJAwgMBgPWr1+PTz75BEFBQfjiiy/wn4vXEXMx1eh7kwW9Ht+8MhChzZ+82YTBYMDZs2dLh4sPHDiAevXqoUePHggNDUW3bt3g7e1dodc8ePkaIjbtMLpWV7kcm8aNwDO1Lb96nIjIUpwqdAHgu/gkLD1wyKTNMQAguK4Ptrw10ujn6fV63Lhxo8xAvnz5Mry8vMoM5MDAQFSrVs3o11Or1Vi2bBlmL18Br+FvwGDiYqdG3l747d2xDw1Xi6KIixcvlnayf/zxB7y8vEo72e7duxvVGT9q19lkTN25t0L/jgT8tRPVipFD8FyDeia/JhGRNThd6N4tKkbvJauQrzZ+5yMXmQxLXhmIFwIaW7Qmg8GAjIyMMgM5JSUFrq6u5Qby0zrID7fswq5zFyGauLhIJZdh9eiX4akpKe1kY2JiIJPJHro/2dL3DSddS8Nnu/chPTcPGp3+sQMlZBIJpBIBzevUxsyBLyKgZsU6aSIiW3K60AWA0+k3MWbNZqNOslHJZXj3hefx987tK7Gyx4miiJs3b5YZxpcuXYJMJis3kFWenuiyYIXJXf1/C4D+6iUU7N5WGrChoaHw9/e3yirhs5lZWHXoGOIuX0ORRgOJIMBdoUDfoGcxpn1bNPL2qvQaiIgsxSlDFwBOpWfizXVbodHrn3jvrkQQoJBKMbFHZ4zt0NaKFT6dKIq4fft2uR2yULc+agwdafbWiu4KOY5OiuCtOEREZnLa0AWAO4VF+OnYaaw5cgJavR5FGi3u/zBUchkMoog+zZ7Bmx1C0LROLZvWaootSSfw7+g4FJu5IYhCKsWZKRMsVBURkfNyqs0xHlXDzRWRXTvgH13aY/+lK/gz+zZyCovg4aKEbzUPvNTsWXi4WP++W0up5ukJqVQKmBm6PDyAiMgynDp075NJJOjZJAA9mwTYuhSL8nZVwRLjGFX5Dw8iInti3qa5ZNda1qsDudS8f8VyqRQDW5i2ExURET2MoevAZBIJRrdvA6XM9P2MBQCvhbS2XFFERE6MoevgRrRtYfJzJYKANg18Uc/r8S0biYjIeAxdB1fT3Q2TenWFSm789L2bQoGZA3pVQlVERM6JoesEXmvXGuM6PFfhc2YlggAPpQI/jB6GBtW5+QQRkaU49X26zibq9HnM3nsAap0ORWWctHR/a8VmPrUxd8hLDFwiIgtj6DoZvcGAAylXsSIhCWcysqDV/3UPr7tSgYHBzTDm+Tbwq1HdxlUSETkmhq6T0+r1kEok3ACDiMgKGLpERERWwoVUREREVsLQJSIishKGLhERkZUwdImIiKyEoUtERGQlDF0iIiIrYegSERFZCUOXiIjIShi6REREVsLQJSIishKGLhERkZUwdImIiKyEoUtERGQlDF0iIiIrYegSERFZCUOXiIjIShi6REREVsLQJSIishKGLhERkZUwdImIiKyEoUtERGQlDF0iIiIrYegSERFZCUOXiIjIShi6REREVsLQJSIishKGLhERkZUwdImIiKyEoUtERGQlDF0iIiIr+X/cc7xArth5bAAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "u_k = np.array(eigvect[:, 4]).flatten()\n", "nx.draw(Gb, pos=posGb, node_color=u_k)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Some eigenvectors are peaky!" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(u_k)" ] } ], "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.6.6" } }, "nbformat": 4, "nbformat_minor": 2 }