diff --git a/.buildinfo b/.buildinfo new file mode 100644 index 0000000..307f85d --- /dev/null +++ b/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 3f8eccb0f4f653ac806a39692c1d1bf0 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/.doctrees/environment.pickle b/.doctrees/environment.pickle new file mode 100644 index 0000000..de61c71 Binary files /dev/null and b/.doctrees/environment.pickle differ diff --git a/.doctrees/examples/chap_02.doctree b/.doctrees/examples/chap_02.doctree new file mode 100644 index 0000000..c7eb392 Binary files /dev/null and b/.doctrees/examples/chap_02.doctree differ diff --git a/.doctrees/examples/chap_03.doctree b/.doctrees/examples/chap_03.doctree new file mode 100644 index 0000000..6cbd951 Binary files /dev/null and b/.doctrees/examples/chap_03.doctree differ diff --git a/.doctrees/examples/chap_04.doctree b/.doctrees/examples/chap_04.doctree new file mode 100644 index 0000000..d841e0b Binary files /dev/null and b/.doctrees/examples/chap_04.doctree differ diff --git a/.doctrees/examples/quick_guide_igraph.doctree b/.doctrees/examples/quick_guide_igraph.doctree new file mode 100644 index 0000000..231c774 Binary files /dev/null and b/.doctrees/examples/quick_guide_igraph.doctree differ diff --git a/.doctrees/examples/quick_guide_networkx.doctree b/.doctrees/examples/quick_guide_networkx.doctree new file mode 100644 index 0000000..980ad12 Binary files /dev/null and b/.doctrees/examples/quick_guide_networkx.doctree differ diff --git a/.doctrees/index.doctree b/.doctrees/index.doctree new file mode 100644 index 0000000..9b1faa8 Binary files /dev/null and b/.doctrees/index.doctree differ diff --git a/.doctrees/nbsphinx/examples/chap_02.ipynb b/.doctrees/nbsphinx/examples/chap_02.ipynb new file mode 100644 index 0000000..bd2facf --- /dev/null +++ b/.doctrees/nbsphinx/examples/chap_02.ipynb @@ -0,0 +1,848 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# [Chapter 2](https://github.com/Ziaeemehr/netsci/blob/main/docs/examples/chap_02.ipynb)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### **Graph Theory**\n", + "\n", + "Code by : Abolfazl Ziaeemehr \n", + "- https://github.com/Ziaeemehr\n", + "\n", + "\"Open" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# uncomment and run this line to install the package on colab\n", + "# !pip install \"git+https://github.com/Ziaeemehr/netsci.git\" -q" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import netsci\n", + "import numpy as np\n", + "import networkx as nx\n", + "from tqdm import tqdm\n", + "import matplotlib.pyplot as plt\n", + "from netsci.plot import plot_graph\n", + "from netsci.analysis import find_sap, find_hamiltonian_path" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "np.random.seed(0)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Degrees: {0: 2, 1: 2, 2: 2, 3: 5, 4: 3, 5: 1, 6: 3, 7: 2}\n", + "Average degree: 2.5\n", + "Adjacency matrix:\n", + " [[0 0 0 1 1 0 0 0]\n", + " [0 0 1 0 0 0 1 0]\n", + " [0 1 0 1 0 0 0 0]\n", + " [1 0 1 0 0 1 1 1]\n", + " [1 0 0 0 0 0 1 1]\n", + " [0 0 0 1 0 0 0 0]\n", + " [0 1 0 1 1 0 0 0]\n", + " [0 0 0 1 1 0 0 0]]\n", + "Edges: [(0, 3), (0, 4), (1, 2), (1, 6), (2, 3), (3, 5), (3, 6), (3, 7), (4, 6), (4, 7)]\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# make a random graph with n nodes and p% probability of edge connection\n", + "num_nodes = 8\n", + "probability = .4\n", + "seed = 2\n", + "graph = nx.gnp_random_graph(num_nodes, probability, seed=2, directed=False)\n", + "\n", + "# degree distribution\n", + "degrees = dict(graph.degree())\n", + "print(\"Degrees:\", degrees)\n", + "\n", + "# calculate the average degree\n", + "average_degree = np.mean(list(degrees.values()))\n", + "print(\"Average degree:\", average_degree)\n", + "\n", + "# adjacency matrix\n", + "adjacency_matrix = nx.to_numpy_array(graph).astype(int)\n", + "print(\"Adjacency matrix:\\n\", adjacency_matrix)\n", + "\n", + "# edges\n", + "edges = list(graph.edges())\n", + "print(\"Edges:\", edges)\n", + "\n", + "# plot the graph\n", + "plot_graph(graph, node_size=1000,\n", + " node_color='darkred',\n", + " edge_color='gray',\n", + " figsize=(5, 5),\n", + " title=\"Random Graph with {} nodes and {}% edge connection\".format(num_nodes, probability*100))\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Shortest path from 3 to 0 : [3, 0]\n", + "Diameter: 3\n", + "Average shortest path length: 1.82\n" + ] + } + ], + "source": [ + "# shortest path, find distance between two nodes\n", + "source = np.random.randint(0, len(graph)) # random source node\n", + "target = np.random.randint(0, len(graph)) # random target node\n", + "shortest_path = nx.shortest_path(graph, source, target)\n", + "print(\"Shortest path from\", source, \"to\", target, \":\", shortest_path)\n", + "\n", + "# diameter : maximal shortest path length\n", + "if nx.is_connected(graph):\n", + " diameter = nx.diameter(graph)\n", + " print(\"Diameter:\", diameter)\n", + " \n", + "# average shortest path length\n", + "avg_shortest_path_length = nx.average_shortest_path_length(graph)\n", + "print(f\"Average shortest path length: {avg_shortest_path_length:.2f}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfwAAAGpCAYAAABoEYRXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB34klEQVR4nO3deXxU1dnA8d+dTPZ9I4Q1yJKwhC1AQEBZRFCQxYoCraLFreLSvvZVwa1WAbW+2paitRVbtaDgliBSlU0EJGyyI4EgWyAJWUlC1smc948wIyELgdzJncw8388nH8idO+c+M5mZZ+655zxHU0ophBBCCOHSTEYHIIQQQgjHk4QvhBBCuAFJ+EIIIYQbkIQvhBBCuAFJ+EIIIYQbkIQvhBBCuAFJ+EIIIYQbkIQvhBBCuAFJ+EIIIYQbuKKE/+9//xtN0+w/ZrOZ6Ohopk2bxpEjRxwV42X94Q9/QNM0w45/qW+//bbG8+Tl5UVkZCRDhw7l6aef5sSJE/Xed+/evcyaNYvOnTvj6+uLr68vXbt25YEHHmDHjh3N+Chqi4mJYcKECc16TNtr7vjx4/ZtS5cu5c9//nOtfY8fP46mabz22mtXfby0tDTuvPNOOnTogK+vL507d+Z//ud/yM3Nveo2HSEmJoa7777b6DAcoq6/eWM888wzaJpGr1696rx9zZo1DBkyBD8/PyIiIrj77rs5e/Zso9v/6KOP6Nu3Lz4+PrRp04bf/va3FBcX19jn1KlT3HzzzQQFBdG9e3eSk5NrtfPxxx8THh5Odnb2FT2+q2X7PPr222+b5XjuqqSkhD/84Q91Ps9X+5rW21Wd4f/rX/9iy5YtrFmzhocffpgVK1YwbNgw8vPz9Y6vRZs/fz5btmxh/fr1LF68mBEjRvDuu+/SvXt3lixZUmv/t99+m4SEBLZu3cpjjz3GypUr+fLLL/ntb3/LgQMHGDhwIEePHjXgkRhn/PjxbNmyhejoaPu2+hJ+U2VnZzN48GA2b97Miy++yKpVq5g9ezb//Oc/ueGGG7BarbofU+hj9+7dvPbaa0RFRdV5+4YNG7jpppuIiooiOTmZv/zlL6xZs4bRo0dTXl5+2faXLFnC9OnTGThwIP/97395/vnn+fe//82tt95aY7+ZM2dy7tw5PvnkE6ZMmcLtt99e4z177tw5HnvsMV577TUiIyOb9qCFUykpKeGFF16oM+HX9TlmCHUF/vWvfylAbd++vcb2F154QQHq3XffvZLmdPP888+rK3woDrV+/XoFqI8//rjWbbm5uapfv37KbDarvXv32rdv2rRJmUwmdcstt6jy8vI6212+fLk6ffp0g8c+f/5804JvQMeOHdX48eMd1n5jjR8/XnXs2LHW9mPHjilA/elPf7qqdv/5z38qQK1Zs6bG9vnz5ytA/fDDD1fVriN07NhRzZw50+gwHML2OXPs2LFG7V9ZWan69u2rHn30UXX99dernj171tpn4MCBqkePHqqystK+bfPmzQpQb775ZoPtWywWFR0drW688cYa25csWaIAtWrVKqVU9XtP0zT1/fff2/fp2rWreuutt+y/P/DAA2rEiBGNelx6sX0erV+/vlmP626ys7MVoJ5//nmjQ6mXLtfwBwwYAEBWVpZ9W1lZGY8//jh9+/YlODiYsLAwhgwZUmcXl6ZpPPzww3zwwQd0794dPz8/+vTpw8qVK2vt++WXX9K3b1+8vb3p1KlTvd23ZWVlzJkzh06dOuHl5UXbtm2ZPXs2BQUFNfazdVOvXLmSfv364evrS/fu3e3H/ve//0337t3x9/dn0KBBTe5WDwsL4+2338ZisfDGG2/Yt8+fPx8PDw/efvttvLy86rzv1KlTadOmjf33u+++m4CAAPbt28eNN95IYGAgo0ePBmD16tVMmjSJdu3a4ePjQ5cuXXjggQfIycmp0abtcsiuXbu49dZbCQoKIjg4mF/96lf1djl+9dVX9O/fH19fX+Li4nj33Xcv+7gHDhzI+PHja2yLj49H0zS2b99u3/bZZ5+haRr79u0DaneFjRgxgi+//JITJ07UuGxyqddff51OnToREBDAkCFDSElJuWyMnp6eAAQHB9fYHhISAoCPj0+D97c9lwcOHGD69OkEBwcTFRXFr3/9a86dO1dj38a+PisrK3niiSdo3bo1fn5+DBs2jG3bttV5/MzMTB544AHatWuHl5cXnTp14oUXXsBisdTY76233qJPnz4EBAQQGBhIXFwcc+fOvdzTwwsvvEBiYiJhYWEEBQXRv39/Fi9ejLpk/S3be6oxr5OUlBSGDh1q7yafM2cOlZWVl43lYi+//DJ5eXnMmzevzttPnz7N9u3bufPOOzGbzfbt1157Ld26dePzzz9vsP2UlBQyMjK45557amyfOnUqAQEB9vtXVFSglMLf39++T0BAAGVlZQB8//33vP/++7z99ttX9PgAjhw5wowZM2jVqhXe3t50796dRYsW1drv0KFDjBs3zn7Z4sEHH6SoqKjWfkop5s+fT8eOHfHx8WHAgAGsXr2aESNGMGLEiBr7FhYW8vvf/77Ga/W3v/0t58+fb1TsX331FaNHjyY4OBg/Pz+6d+/OggULauyzYsUK++WWwMBAxowZw5YtW2rscyXvryvJKY19bgsKCnj88ce55ppr8Pb2plWrVtx8880cOnSI48eP23tsXnjhBfvnku2yW31d+u+++y59+vTBx8eHsLAwpkyZwo8//lhjH9vnfFpaGjfffDMBAQG0b9+exx9/vFG9UzVcybeD+s7w//a3vylAffrpp/ZtBQUF6u6771YffPCBWrdunfrqq6/U73//e2UymdR7771X4/6AiomJUYMGDVLLly9Xq1atUiNGjFBms1kdPXrUvt+aNWuUh4eHGjZsmPrss8/Uxx9/rAYOHKg6dOhQ4wzfarWqsWPHKrPZrJ599ln1zTffqNdee035+/urfv36qbKyMvu+HTt2VO3atVO9evVSH374oVq1apVKTExUnp6e6rnnnlNDhw5Vn332mfr8889Vt27dVFRUlCopKWnweWroDN8mOjpade7cWSlVfQbh6+urhgwZ0mC7l5o5c6by9PRUMTExasGCBWrt2rXq66+/Vkop9dZbb6kFCxaoFStWqA0bNqj33ntP9enTR8XGxqqKigp7G7bekY4dO6r//d//VV9//bV6/fXX7c/VxfvanqsePXqo999/X3399ddq6tSpClAbNmxoMNannnpKBQQE2NvLzMxUgPL19VXz5s2z7/eb3/xGRUVF2X+/9GzvwIEDaujQoap169Zqy5Yt9h+lfj7Dj4mJUePGjVNJSUkqKSlJxcfHq9DQUFVQUNBgjAUFBapDhw7quuuuU/v371dFRUVqw4YNqkOHDuqWW2657N/D9lzGxsaq5557Tq1evVq9/vrrytvbW91zzz32/a7k9Tlz5kylaZr63//9X/XNN9+o119/XbVt21YFBQXVOMPPyMhQ7du3Vx07dlRvv/22WrNmjXrxxReVt7e3uvvuu+37ffjhhwpQjzzyiPrmm2/UmjVr1N///nf16KOPXvbx3X333Wrx4sVq9erVavXq1erFF19Uvr6+6oUXXqixX2NfJwcOHFB+fn6qR48e6sMPP1TJyclq7Nix9vdzY87wDxw4oLy9vdWXX36plFJ1nuF/9dVXCrDvc7HbbrtNRUdHN3iMv//97wpQBw4cqHXbgAEDarxv4+Li1F133aXy8vLU559/rkwmk9q6dauqqKhQPXv2VH/84x8v+5jqeozBwcEqPj5evf/+++qbb75Rjz/+uDKZTOoPf/iDfb/MzEzVqlUr1bZtW/Wvf/1LrVq1Sv3yl7+0P58Xn+HPmTNHAer+++9XX331lfrnP/+pOnTooKKjo9X1119v3+/8+fOqb9++KiIiQr3++utqzZo16i9/+YsKDg5Wo0aNUlartcHY33nnHaVpmhoxYoRaunSpWrNmjXrzzTfVQw89ZN/H1lNy4403qqSkJLVs2TKVkJCgvLy81MaNG+37Nfb9pVTjc0pjn9vCwkLVs2dP5e/vr/74xz+qr7/+Wn366afqscceU+vWrVNlZWX219msWbPsn0tpaWlKqbp7rWw9h9OnT1dffvmlev/999U111yjgoOD1eHDh+37zZw5U3l5eanu3bur1157Ta1Zs0Y999xzStO0Wu+9y7mqhJ+SkqIqKytVUVGR+uqrr1Tr1q3VddddV6O77FIWi0VVVlaqWbNmqX79+tUMAlRUVJQqLCy0b8vMzFQmk0ktWLDAvi0xMVG1adNGlZaW2rcVFhaqsLCwGgnf9sS/+uqrNY6zbNkyBah//OMf9m0dO3ZUvr6+Kj093b5t9+7dClDR0dE1usiTkpIUoFasWNHg89SYhJ+YmKh8fX3tjxVQ06ZNq7Wf7Xmz/Vz8Bps5c2ajLqVYrVZVWVmpTpw4oQCVnJxsv832Jvrd735X4z62N+F//vMf+7aOHTsqHx8fdeLECfu20tJSFRYWph544IEGY1izZo0C1HfffaeUUuo///mPCgwMVA899JAaOXKkfb+uXbuqGTNm2H+v641yuS79+Ph4ZbFY7Nu3bdumAPXhhx82GKNSSp05c0YNGTJEAfafqVOn1kjC9bE9l5e+7h566CHl4+Nj/9s19vX5448/Nvi3uTjhP/DAAyogIKDG30YppV577bUayerhhx9WISEhl30sl1NVVaUqKyvVH//4RxUeHl7jddnY18kdd9yhfH19VWZmpn2bxWJRcXFxjUr4VVVVKjExUU2fPt2+ra6Eb3u+bF8ML3b//fcrLy+vBo8zb948BaiMjIxat914442qW7du9t83b96sWrdurQBlMpnUc889p5RS6sUXX1Q9evSo93JdQ8aOHavatWunzp07V2P7ww8/rHx8fFReXp5SSqknn3xSaZqmdu/eXWO/MWPG1Ej4eXl5ytvbW91xxx019tuyZYsCaiT8BQsWKJPJVOsk75NPPqlxOaMuRUVFKigoSA0bNqzeLwZVVVWqTZs2Kj4+XlVVVdW4b6tWrdS1115r39bY95dSjc8pjX1u//jHPypArV69ut7H21CX/qWfY/n5+crX11fdfPPNNfY7efKk8vb2rvEZaPucX758eY19b775ZhUbG1tvPHW5qi79wYMH4+npSWBgIOPGjSM0NJTk5OQa3WVQPRp16NChBAQEYDab8fT0ZPHixbW6LABGjhxJYGCg/feoqChatWplH9F+/vx5tm/fzq233lqjazUwMJBbbrmlRlvr1q0DqDWKeerUqfj7+7N27doa2/v27Uvbtm3tv3fv3h2o7j728/Ortb2hUfaNpS7pBq1PQkICnp6e9p//+7//q7XPL37xi1rbzp49y4MPPkj79u3tz33Hjh0B6nz+f/nLX9b4/fbbb8dsNrN+/foa2/v27UuHDh3sv/v4+NCtW7fLPie2bts1a9YA2LsPx40bx/fff09JSQmnTp3iyJEj3HDDDQ22dTnjx4/Hw8PD/nvv3r2By//d8vPzmTRpEoWFhSxZsoTvvvuON998k02bNjFx4sRaXeP1mThxYo3fe/fuTVlZmX1EeGNfn7bnvr6/zcVWrlzJyJEjadOmDRaLxf5z0003AdWD1gAGDRpEQUEB06dPJzk5udYlnoasW7eOG264geDgYDw8PPD09OS5554jNze31mj3xrxO1q9fz+jRo2sMtPPw8OCOO+5oVDyvv/46R44cafQAzvpm8jR2hk9j7n/ttddy8uRJDh06RF5eHi+88AJHjhxh/vz5vP3225jNZp5//nk6dOhA69atefjhh+1d/nUpKytj7dq1TJkyBT8/vxp/25tvvpmysjL75ar169fTs2dP+vTpU6ONGTNm1Pg9JSWF8vJybr/99hrbBw8eTExMTI1tK1eupFevXvTt27fGsceOHXvZkf/ff/89hYWFPPTQQ/U+d6mpqZw5c4Y777wTk+nndBQQEMAvfvELUlJSKCkpqXGf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8eLFFBYW8v7779u7W6H6GveiRYt45JFH6N+/P/fffz89e/bEZDKRkZFhP0O4tPu+LnFxcXTu3JmnnnoKpRRhYWF88cUXDXbbfvbZZ5jNZsaMGcOBAwd49tln6dOnT63rfE2RkJBAaGgo33zzTY0pTjfccAMvvvii/f+XEx8fz2effcZbb71FQkICJpPJ3uPUFLNnz2bJkiWMGTOGp556ivbt27N//35eeukloqKial1Lv1qNfX12796dX/3qV/z5z3/G09OTG264gf379/Paa6/Veh388Y9/ZPXq1Vx77bU8+uijxMbGUlZWxvHjx1m1ahV///vfadeuHffddx++vr4MHTqU6OhoMjMzWbBgAcHBwQ32fI0fP57XX3+dGTNmcP/995Obm8trr71W60vllXjmmWdYsWIFo0aN4rnnnsPPz49FixY1arpXSEhInV9GQ0JC6vyi+sorrzBmzBimTp3KQw89xNmzZ3nqqafo1atXjdfiiRMn6Ny5MzNnzmTx4sVAdQ/cq6++yp133skDDzzA9OnTOXLkCE888QRjxoxh3Lhxdcb4P//zPyQmJtZ4D40dO5bHH3+cIUOGEBAQwF//+lfuvffeBh/rX/7yF4YNG2a/xBQTE0NRURFpaWl88cUX9iT029/+lnfffZfx48fbX7NLlizh0KFDNdoLCwvjf/7nf1iwYAGhoaFMmTKF9PR0XnjhBaKjo2tcS//tb3/Lp59+ynXXXcfvfvc7evfujdVq5eTJk3zzzTc8/vjjJCYm1hl3QEAA//d//8e9997LDTfcwH333UdUVBRpaWns2bOHv/3tb5hMJl599VV++ctfMmHCBB544AHKy8v505/+REFBAS+//HKDz01TXclzu2zZMiZNmsRTTz3FoEGDKC0tZcOGDUyYMME+XqBjx44kJyczevRowsLCiIiIqPNLUUhICM8++yxz587lrrvuYvr06eTm5vLCCy/g4+PD888/75gHfCUj/OqblqdU9SjcDh06qK5du9pHSL/88ssqJiZGeXt7q+7du6t//vOfdRbJAdTs2bNrtVlXcZEVK1ao3r17Ky8vL9WhQwf18ssv19lmaWmpevLJJ1XHjh2Vp6enio6OVr/5zW9Ufn5+rWPUVUymrpgaW9jFNkrf9mM2m1V4eLgaMmSImjt3rjp+/Hi99929e7e65557VKdOnZS3t7fy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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# directed graph\n", + "graph_dir = nx.to_directed(graph)\n", + "plot_graph(graph_dir, \n", + " node_size=1000,\n", + " node_color='darkred',\n", + " edge_color='gray',\n", + " figsize=(5, 5),\n", + " seed=1,\n", + " title=\"Random DGraph with {} nodes and {}% edge connection\".format(num_nodes, probability*100));" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Weighted adjacency matrix:\n", + " [[0 9 4 9 9]\n", + " [9 0 1 6 4]\n", + " [4 1 0 0 6]\n", + " [9 6 0 0 8]\n", + " [9 4 6 8 0]]\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# weighted graph\n", + "seed = 3\n", + "np.random.seed(seed) # to fix the plot\n", + "\n", + "num_nodes = 5\n", + "probability = 0.8\n", + "graph_w = nx.erdos_renyi_graph(num_nodes, probability, seed=seed)\n", + "\n", + "for (u,v) in graph_w.edges():\n", + " graph_w[u][v]['weight'] = np.random.randint(1, 10)\n", + "\n", + "# plot the weighted graph\n", + "edge_labels = nx.get_edge_attributes(graph_w, 'weight')\n", + "\n", + "plot_graph(graph_w, \n", + " with_labels=True, \n", + " node_color='lightblue', \n", + " node_size=700, \n", + " font_size=12,\n", + " edge_labels=edge_labels, \n", + " figsize=(5, 5), \n", + " title=\"Weighted Random Network\")\n", + "\n", + "weighted_adjacency_matrix = nx.to_numpy_array(graph_w, weight='weight').astype(int)\n", + "print(\"Weighted adjacency matrix:\\n\", weighted_adjacency_matrix)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "self avoiding path" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "A->B->E->F\n", + "A->C->F\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Create a graph\n", + "G = nx.Graph()\n", + "edges = [('A', 'B'), ('A', 'C'), ('B', 'D'), ('B', 'E'), ('C', 'F'), ('E', 'F')]\n", + "G.add_edges_from(edges)\n", + "\n", + "# Find all self-avoiding paths from 'A' to 'F'\n", + "start_node = 'A'\n", + "target_node = 'F'\n", + "all_saps = list(find_sap(G, start_node, target_node))\n", + "\n", + "for path in all_saps:\n", + " print(\"->\".join(path))\n", + "\n", + "plot_graph(G, seed=2, figsize=(3, 3))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A Hamiltonian path is a path in a graph that visits each vertex exactly once." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hamiltonian Path found: (1, 2, 3, 4, 5, 6)\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Example usage\n", + "G = nx.Graph()\n", + "G.add_edges_from([(1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 1)])\n", + "\n", + "plot_graph(G, seed=2, figsize=(3, 3))\n", + "\n", + "path = find_hamiltonian_path(G)\n", + "if path:\n", + " print(\"Hamiltonian Path found:\", path)\n", + "else:\n", + " print(\"No Hamiltonian Path found\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hamiltonian Path found: (0, 1, 2, 4, 3)\n" + ] + } + ], + "source": [ + "# hamiltonian path of weighted graph:\n", + "path = find_hamiltonian_path(graph_w)\n", + "if path:\n", + " print(\"Hamiltonian Path found:\", path)\n", + "else:\n", + " print(\"No Hamiltonian Path found\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- Adjacency List" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "adjacency matrix\n", + " [[0 1 1 0 0 0]\n", + " [1 0 0 1 1 0]\n", + " [1 0 0 0 0 1]\n", + " [0 1 0 0 0 0]\n", + " [0 1 0 0 0 1]\n", + " [0 0 1 0 1 0]]\n", + "adjacency list\n", + " {1: [2, 3], 2: [1, 4, 5], 3: [1, 6], 4: [2], 5: [2, 6], 6: [3, 5]}\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "G = nx.Graph()\n", + "edges = [(1, 2), (1, 3), (2, 4), (2, 5), (3, 6), (5, 6)]\n", + "G.add_edges_from(edges)\n", + "\n", + "plot_graph(G, seed=2, figsize=(3, 3))\n", + "\n", + "adjacency_matrix = nx.to_numpy_array(G).astype(int)\n", + "print(f\"adjacency matrix\\n {adjacency_matrix}\")\n", + "\n", + "\n", + "adjacency_list = {n: list(neighbors) for n, neighbors in G.adj.items()}\n", + "print(f\"adjacency list\\n {adjacency_list}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- Adjaceccy list of directed graph:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "adjacency matrix\n", + " [[0 1 1 0 0 0]\n", + " [0 0 0 1 1 0]\n", + " [0 0 0 0 0 1]\n", + " [0 0 0 0 0 0]\n", + " [0 0 0 0 0 1]\n", + " [0 0 0 0 0 0]]\n", + "adjacency list\n", + " {1: [2, 3], 2: [4, 5], 3: [6], 4: [], 5: [6], 6: []}\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "G = nx.DiGraph()\n", + "edges = [(1, 2), (1, 3), (2, 4), (2, 5), (3, 6), (5, 6)]\n", + "G.add_edges_from(edges)\n", + "plot_graph(G, seed=2, figsize=(3, 3))\n", + "\n", + "adjacency_matrix = nx.to_numpy_array(G).astype(int)\n", + "print(f\"adjacency matrix\\n {adjacency_matrix}\")\n", + "\n", + "adjacency_list = {n: list(neighbors) for n, neighbors in G.adj.items()}\n", + "print(f\"adjacency list\\n {adjacency_list}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[Implementation of BFS for Graph using Adjacency List:](https://www.geeksforgeeks.org/breadth-first-search-or-bfs-for-a-graph/)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Breadth First Traversal starting from vertex 0: 0 1 2 3 4 " + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPwAAAD7CAYAAABOrvnfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAhWElEQVR4nO3deUBU5f4/8PcZYMAZNmV1BylRJBClzfWndNOblqXlUteb6XUr0zRt0URtUdGbpmFhudzSzDItl7ySkmamln1FssAtcakEBBmQGZztfH5/oN5SlkHOzJk55/P6c86c53zw+J7nzHOeeY5ARATGmCpo5C6AMeY6HHjGVIQDz5iKcOAZUxEOPGMqwoFnTEU48IypCAeeMRXhwDOmIhx4xlSEA8+YinDgGVMRDjxjKsKBZ0xFOPCMqQgHnjEV8Za7AOZ6NlFEhcUOkQgaQYC/1gveGv7sVwMOvEqUm63IN5hQYDTDaLXftF3v44VIvS+ig3UI9PWRoULmCgIvcaVsRosN2YVlKDJZIACo7WRf2x6u0yIpIgh6LfcHSsOBV7B8gwk5RWUgqj3oNxIACAKQGB6E6GCds8pjMuDAK9SxksvILa5ocDtxof5oFxIgQUXMHfBIjQLlG0yShB0AcosrcMZgkqQtJj/+kqYwRosNOUVl1W7Lz/sZ695Kw7kTeSi/dAlaPz80i4pB3ydGoOdDg2ps80hRGcJ0Wv5OrwB8BhUmu7DqO3t1jOXlCI1shm79HkaT8EiYK03Yu3UTlr7wLC7+fh6Pjn+u2v2Iqtrt1jLEeYUzl+Dv8ApSbrZi15nieu/30pD+KC0qwPLdP9b6vvuiQvmWnYfj7/AKkm8wQbiF/QKDm0DjVfvFnnC1febZOPAKUmA0O3T7TRRF2G02lF0qwY51/8GR7/bgkX89U+s+dLV95tn4O7xCWEWx2hl01Xl/zsv46pM1AABvHy1GzngN9w8dXud+RqsdNlHkabgejAOvEEaLY2EHgIFjn0XKo4+j7FIxfty9EytfmwGzyYQBo8bXuW+FxY5gPw68p+LAK4RYj7HXsGYtENasBQCgc88UAMBHi+fh/z0yGEFNah+Jr89xmPvhj2qF0Ai3MlxX5fY7OsJus6Hw/FmnHofJjwOvEP5ar1ve9+cf9kOj0SCiZWunHofJjy/pFcJbo4Hex6vWgbt3Z06Dzt8ftyUkITgkDOWll3Agcyu+274FA0aNr/NyXu/Dv5v3dBx4BYnU++K0wVTjrbnYjp3x9eefYM8XG2C8XA4/nR5RsXGYuODtWqfWAlX34SP1vpLXzFyLZ9opyK3OtHMUz7TzfHx9piCBvj4I12lvabZdbQRULYrBYfd8HHiFSYoIgtQD6YJQ1S7zfBx4hdFrvZEYLm04O4bzcldKwYFXoOhgHeJC/SVpKy40AFG8zJVi8KCdgjV0TbuO4UEcdoXhwCscr1rL/owDrxK8Lj0DOPCqZBNFzF+0BDt37cLmL77gJ8+oCF+zqZC3RgPTpYv47eQxBPtxb64m/LGuUqIoQuBfvqkOB16liIgDr0IceJUSRREa/t6uOnzGVYp7eHXiwKsUEXEPr0J8xlWKB+3UiQOvUnxJr04ceJXiQTt14jOuUtzDqxMHXqW4h1cnPuMqxT28OnHgVYoDr04ceJXiS3p14jOuUtzDqxMHXqW4h1cnPuMqxT28OnHgVYp7eHXiM65S3MOrEwdepTjw6sSBVym+pFcnPuMqxT28OnHgVYp7eHXiM65S3MOrEwdepXjFG3XiwKsUr2mnTnzGVYov6dWJA69SPGinTnzGVYp7eHXiwKsUD9qpEwdepXjQTp34jKsUX9KrEwdepXjQTp34jKsU9/DqxIFXKe7h1YnPuEpxD69OHHiV4tty6sSBVym+LadOfMZVii/p1YkDr1I8aKdOfMZVint4deLAqxQP2qkTB16leNBOnfiMqxT38OrEgVcp7uHVic+4SvGgnTpx4FWKL+nViQOvUnxJr058xlWKe3h14sCrFPfw6sRnXIVsoojwVlEIatoChitW2ERR7pKYiwhERHIXwZyv3GxFvsGEAqMZRqv9pu16Hy9E6n0RHaxDoK+PDBUyV+DAK5zRYkN2YRmKTBYIAGo72de2h+u0SIoIgl7r7Zoimctw4BUs32BCTlEZiGoP+o0EAIIAJIYHITpY56zymAw48Ap1rOQycosrGtxOXKg/2oUESFARcwd8zaZA+QZTtWGvrKjAhncX40zeL8jP+xnlpZcw+JkpGPLs1Brbyi2ugJ+XF6K4p1cEHqVXGKPFhpyismq3XTaUYuenH8FqseCu+/o63OaRojIYLTapSmQy4h5eYbILq76zVyeseQt8+EMeBEFAeWkJdm1Y51CbRFXtdmsZImGlTA7cwytIudmKIpOlxgE6QRBuaXYdASgyWVButjaoPiY/DryC5BtMcNZkWeFq+8yzceAVpMBortftt/qgq+0zz8aBVwirKFY7g05KRqudp+F6OA68Qhgtzg37NRUuOg5zDg68Qogumj/lquMw5+DAK4TGRb9td9VxmHPwfXiF8Nd6OfS+w3u/htlkQqWxaibe+V9P4sCObQCATj17w7dR7TPqHD0Oc088l15BMk8X1TlwN673Xbj4x2/Vbnt31/cIb9Gyxn31Pl7o0ya8QTUyeXHgFSSnsAynDSan3JoTALQJ1iExIsgJrTNX4e/wChLmTU69D88/lfV8HHiF2Lp1K+7ueAeOHvgWJPG9crvNhpJzpyFYrkjaLnM9DryHKygowJAhQ/DQQw8hPj4eQ3veBS8vaU+rIABvPD0S8fHxyMzMlLRt5loceA9FRFi1ahXat2+Pr7/+Gh999BG2b9+O2OgoJIZL+z07uVkIdn+1A23btkXfvn3x5JNP4tKlS5Ieg7kGB94DnTx5EikpKRg1ahQeeugh5OXl4fHHH7/+S7joYB3iQv0lOVZcaACignWIjo7GV199hZUrV2Lz5s1o3749PvvsM0mOwVyHA+9BrFYr5s+fj4SEBJw5cwaZmZn44IMPEBoaetN724UEICkiCBoB9f4FnQBAIwCdIoLQLuR/HxyCIGDkyJHIzc1Fly5d8Nhjj2HQoEG4cOFCw/4w5jJ8W85DHDp0CKNHj8bRo0cxefJkzJkzB3q9vs79nLVqLRHhs88+w4QJE2CxWLB48WI8+eST/DQbN8eBd3NGoxEzZ87EkiVLkJCQgBUrVqBz5871bsdZ69KXlJRg8uTJWLNmDe6//34sX74cUVFR9a6PuQgxt7Vjxw6KiooiPz8/SktLI4vFIkm7VrudSistVGIyU2mlhax2e4Pb3L59O7Vs2ZL0ej0tXbqU7BK0yaTHgXdDRUVF9MQTTxAA6t27N508eVLukhxSVlZG48ePJwDUtWtXysvLk7skdgMetHMjRIQ1a9agffv22L59O1avXo1du3bhtttuk7s0hwQGBuKdd97BN998g6KiInTs2BHz5s2D1cpr4bkNuT9xWJXTp0/T/fffTwBo6NChVFBQIHdJDWIymeiFF14gjUZDSUlJdPjwYblLYsQ9vOxsNhsWLVqE+Ph45OXlYdu2bfj4448REREhd2kN0qhRI6SlpeH777+H3W7HnXfeienTp+PKFZ6eKyu5P3HULDs7mzp37kyCINDEiROpvLxc7pKcwmw202uvvUZarZZiY2Np3759cpekWtzDy6CyshIvvfQSkpOTYTabsX//fixZsgQBAcp8hptWq8Urr7yC7OxsBAcHo3v37pg4cSIqKhr+7DtWT3J/4qhNVlYWxcTEkFarpddee43MZrPcJbmUzWajxYsXk06no9atW1NmZqbcJakKB95FSkpK6KmnniIA1KNHDzp27JjcJcnq119/pZSUFAJAI0aMoEuXLsldkipw4J1MFEVav349hYeHU1BQEC1fvpwnpVwliiK9//77FBgYSJGRkbRx40a5S1I8DrwTnT17lvr160cAaODAgfT777/LXZJb+u233+ihhx4iAPToo4/ShQsX5C5JsTjwTmCz2Wjp0qXk7+9PTZs2pU2bNsldktu7diUUFhZGjRs3pg8++IBEUZS7LMXhwEvs6NGjdM899xAAGjduHBkMBrlL8igXL168Pq24b9++dPbsWblLUhS+LSeRK1euIDU1FZ06dYLBYMDevXvx7rvvIiiIV3mtj9DQUKxduxbbtm3Dzz//jA4dOmDZsmUQ+Zl20pD7E0cJ9u7dS7GxseTj40Opqal05coVuUtShLKyMho7diwBoG7dutHx48flLsnjcQ/fAGVlZRg3bhx69OiBJk2aIDs7G3PmzIGvr6/cpSlCYGAgMjIysHv3bly4cAEJCQlIS0uDzWaTuzTPJfcnjqfatGkTNW3alPz9/Sk9PZ1vtTmZ0WikqVOnkkajoU6dOtGRI0fkLskjcQ9fT3/88QcGDhyIgQMHIjk5Gbm5uXjmmWeg0fA/pTPpdDosXLgQBw8ehMViQXJyMl555RWYzWa5S/Mscn/ieAq73U4ZGRkUGBhIERER9Omnn/JtI5mYzWaaM2cO+fj4UPv27Wn//v1yl+QxOPAOyMvLo+7duxMAGjVqFE8DdRNHjx6lu+66iwRBoEmTJtHly5flLsntceBrYTab6dVXXyWtVku33XYbff3113KXxG5gs9nozTffpEaNGlFUVBTt3LlT7pLcGge+BgcOHKAOHTqQl5cXvfzyy2QymeQuidXi1KlT1KtXLwJAI0eOpNLSUrlLcksc+BuUl5fTs88+S4IgUHJyMo8GexBRFOm9996jwMBAatq0KX3++edyl+R2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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from collections import deque\n", + "\n", + "# Function to perform Breadth First Search on a graph\n", + "# represented using adjacency list\n", + "def bfs(adjList, startNode, visited):\n", + " # Create a queue for BFS\n", + " q = deque()\n", + "\n", + " # Mark the current node as visited and enqueue it\n", + " visited[startNode] = True\n", + " q.append(startNode)\n", + "\n", + " # Iterate over the queue\n", + " while q:\n", + " # Dequeue a vertex from queue and print it\n", + " currentNode = q.popleft()\n", + " print(currentNode, end=\" \")\n", + "\n", + " # Get all adjacent vertices of the dequeued vertex\n", + " # If an adjacent has not been visited, then mark it visited and enqueue it\n", + " for neighbor in adjList[currentNode]:\n", + " if not visited[neighbor]:\n", + " visited[neighbor] = True\n", + " q.append(neighbor)\n", + "\n", + "# Function to add an edge to the graph\n", + "def addEdge(adjList, u, v):\n", + " adjList[u].append(v)\n", + "\n", + "def main():\n", + " # Number of vertices in the graph\n", + " vertices = 5\n", + "\n", + " # Adjacency list representation of the graph\n", + " adjList = [[] for _ in range(vertices)]\n", + "\n", + " # Add edges to the graph\n", + " addEdge(adjList, 0, 1)\n", + " addEdge(adjList, 0, 2)\n", + " addEdge(adjList, 1, 3)\n", + " addEdge(adjList, 1, 4)\n", + " addEdge(adjList, 2, 4)\n", + "\n", + " # Mark all the vertices as not visited\n", + " visited = [False] * vertices\n", + "\n", + " # Perform BFS traversal starting from vertex 0\n", + " print(\"Breadth First Traversal starting from vertex 0:\", end=\" \")\n", + " bfs(adjList, 0, visited)\n", + " \n", + " #plot the graph\n", + " G = nx.Graph()\n", + " G.add_edges_from([(0, 1), (0, 2), (1, 3), (1, 4), (2, 4)])\n", + " plot_graph(G, seed=2, figsize=(3, 3))\n", + "\n", + "if __name__ == \"__main__\":\n", + " main()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Graph information\n", + "Directed : False\n", + "Number of nodes : 5\n", + "Number of edges : 9\n", + "Average degree : 3.6000\n", + "Connectivity : connected\n" + ] + } + ], + "source": [ + "from netsci.analysis import graph_info\n", + "graph_info(graph_w)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Table 2.1" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "import networkx as nx\n", + "import pandas as pd\n", + "from netsci.analysis import average_degree\n", + "from netsci.utils import list_sample_graphs, load_sample_graph" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "nets = list(list_sample_graphs().keys())" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "G = load_sample_graph(\"Internet\")" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Graph information\n", + "Directed : False\n", + "Number of nodes : 192244\n", + "Number of edges : 609066\n", + "Average degree : 6.3364\n", + "Connectivity : disconnected\n" + ] + } + ], + "source": [ + "graph_info(G)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing sample graphs: 100%|██████████| 10/10 [00:00<00:00, 19463.13it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Collaboration\n", + "Internet\n", + "PowerGrid\n", + "Protein\n", + "PhoneCalls\n", + "Citation\n", + "Metabolic\n", + "Email\n", + "WWW\n", + "Actor\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "for net in tqdm(nets, desc=\"Processing sample graphs\"):\n", + " print(net)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing sample graphs: 100%|██████████| 9/9 [00:33<00:00, 3.72s/it]\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
num_nodesnum_edgesavg_degreedirectedname
023133934398.078416FalseCollaboration
11922446090666.336385FalseInternet
2494165942.669095FalsePowerGrid
3201829302.903865FalseProtein
436595918265.018500TruePhoneCalls
5449673468947920.857285TrueCitation
61039580211.168431TrueMetabolic
7571941037313.627339TrueEmail
832572914971349.192513TrueWWW
\n", + "
" + ], + "text/plain": [ + " num_nodes num_edges avg_degree directed name\n", + "0 23133 93439 8.078416 False Collaboration\n", + "1 192244 609066 6.336385 False Internet\n", + "2 4941 6594 2.669095 False PowerGrid\n", + "3 2018 2930 2.903865 False Protein\n", + "4 36595 91826 5.018500 True PhoneCalls\n", + "5 449673 4689479 20.857285 True Citation\n", + "6 1039 5802 11.168431 True Metabolic\n", + "7 57194 103731 3.627339 True Email\n", + "8 325729 1497134 9.192513 True WWW" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_list = []\n", + "\n", + "for net in tqdm(nets[:-1], desc=\"Processing sample graphs\"):\n", + " G = load_sample_graph(net)\n", + " num_nodes = G.number_of_nodes()\n", + " num_edges = G.number_of_edges()\n", + " avg_degree = average_degree(G)\n", + " directed = nx.is_directed(G)\n", + " \n", + " # Append a dictionary of data for this network to the list\n", + " data_list.append({\n", + " 'num_nodes': num_nodes,\n", + " 'num_edges': num_edges,\n", + " 'avg_degree': avg_degree,\n", + " \"directed\": directed,\n", + " \"name\": net\n", + " })\n", + "\n", + "# Create the DataFrame from the list of dictionaries\n", + "df = pd.DataFrame(data_list)\n", + "\n", + "# Display the DataFrame\n", + "df" + ] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/.doctrees/nbsphinx/examples/chap_03.ipynb b/.doctrees/nbsphinx/examples/chap_03.ipynb new file mode 100644 index 0000000..ccf8348 --- /dev/null +++ b/.doctrees/nbsphinx/examples/chap_03.ipynb @@ -0,0 +1,530 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# [Chapter 3](https://github.com/Ziaeemehr/netsci/blob/main/docs/examples/chap_03.ipynb)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### **Random Networks**\n", + "\n", + "Code by : Abolfazl Ziaeemehr \n", + "- https://github.com/Ziaeemehr\n", + "\n", + "\"Open" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# uncomment and run this line to install the package on colab\n", + "# !pip install \"git+https://github.com/Ziaeemehr/netsci.git\" -q" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A random network consists of N nodes where each node pair is connected with probability p.\n", + "To construct a random network we follow these steps:\n", + "1) Start with N isolated nodes.\n", + "2) Select a node pair and generate a random number between 0 and 1. If the number exceeds p, connect the selected node pair with a link, otherwise leave them disconnected.\n", + "3) Repeat step (2) for each of the N(N-1)/2 node pairs.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import random\n", + "import numpy as np\n", + "import networkx as nx\n", + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "from netsci.plot import plot_graph" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "LABELSIZE = 13\n", + "plt.rc('axes', labelsize=LABELSIZE)\n", + "plt.rc('axes', titlesize=LABELSIZE)\n", + "plt.rc('figure', titlesize=LABELSIZE)\n", + "plt.rc('legend', fontsize=LABELSIZE)\n", + "plt.rc('xtick', labelsize=LABELSIZE)\n", + "plt.rc('ytick', labelsize=LABELSIZE)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "def create_random_network(N, p):\n", + " G = nx.Graph() # Initialize an empty graph\n", + " G.add_nodes_from(range(N)) # Add N isolated nodes\n", + "\n", + " # Iterate through each possible node pair\n", + " for i in range(N):\n", + " for j in range(i + 1, N):\n", + " if random.random() <= p: # Generate a random number and compare it with p\n", + " G.add_edge(i, j) # Connect the nodes if the condition is met\n", + "\n", + " return G\n", + "\n", + "# Example usage:\n", + "N = 10 # Number of nodes\n", + "p = 0.3 # Probability of edge creation\n", + "\n", + "seed=2\n", + "random.seed(seed)\n", + "np.random.seed(seed)\n", + "\n", + "random_network = create_random_network(N, p)\n", + "plot_graph(random_network, seed=2, figsize=(5, 3), title=\"Random Network\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Other option would be to use the `nx.gnp_random_graph` function from NetworkX, which generates random graphs with a given number of nodes and a given probability of edge creation.\n", + "\n", + "```python\n", + "G = nx.gnp_random_graph(N, p)\n", + "```\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Binimial distribution\n", + "\n", + "Degree distribution in a random network follows a binomial distribution." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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2PMrHqke5SHbtm3TSik9ePDgAsdnzJihAT1v3jyPnW+z2XRISIju2LGjdjgcBdqPHDlSA/r3338vduxS3FII73Mc2mkUnzzwh1ev48zNOlNA027z6rW8oSoXt3zllVcKvTd58mQNFCpuecstt2hAr1692n3MVdyyQ4cOOjIyUj/55JN65syZuk+fPhrQN910U4G+n3322UJFIos65tKgQQPds2fPAseGDh2qAX3llVfqmTNn6qeeekpXq1ZNh4aG6s2bN5fq+1GUH374QU+ePFlPnjxZX3jhhRrQDz/8sPvYP6WkpOgGDRrosLAw/cwzz+i3335b9+rVSwP6f//7X6G++/fvrwF9xx136P/973/6jjvu0IAeNWpUobavvvqqBnSvXr3022+/rZ955hkdGhqqW7RoUaBopid4urilXyVNTz31lAb02rVrCxzPzs7WISEh+uqrr/bY+VlZWVoppfv161eoH1cl1N27dxc7dkmahPA+x57fjETmyH7vX2vrauNap497/VqeJklTQZmZmTo6OrpESdOzzz6r58+fr9u2bauDgoJ0vXr19IQJE3ReXsEq9J5Immw2m37ppZd0ixYtdFBQkK5evboeOHCg/uMPz/5x4IrrbI9/O3z4sB41apSuWbOmtlgsukOHDnrhwoVF9p2dna2feuop3aBBAx0UFKTj4+P1pEmTCn2/XGbPnq3btWunLRaLrlWrlr7tttv0sWPHPPp5XXF5MmlSWvvPHNSVV17Jt99+W+Tti5dccgm7d+8+54Z+JT2/V69erFu3jhdffJHrr7+egIAA1qxZw3333cegQYP46KOPznqt3NzcAncLpKWlERcXR2pqKhERHtx5XQjh5ty2FrIzUE07o6rV9u619m+FE4kQ3RhTveZevZan5eTkcODAAeLj4923cQtRFRXn30JaWhqRkZHF+v3tV2uakpKSiIqKKrJ+Q2xsLCkpKeTlnb2SbUnPnzdvHr179+bxxx+nadOmxMfHc/vtt/PQQw+dt67HlClTiIyMdD/+XQlVCOFZWmvIyV974qU75/5JheeXHsg47fVrCSEqBr9Kms5XIMvVxlPnWywW4uPjufnmm1mwYAELFizg+uuv5/nnn+fFF188Z6xPPPEEqamp7se/7xoQQniYLRe0E1AQVPLbqEssND9pyjyN1ue/CUUIUfn5VZ2mkJAQjh8/XuR7xSl6VZLzs7KyuPjii+nYsSMLFy50t7vxxhu58cYbeeaZZ7jhhhto3rzoYXmLxVKqPX2EEKWUk3/nnCUYZSqHv/eCw8AcAA67UYU8RKbdhajq/GqkKSYmhpSUlCIriyYmJhIVFUVQ0Nkrxpbk/MWLF7Nnzx6GDBlSqO2QIUNwOp38+OOPZfg0QgiPys0fJbaUT7VgpRSEVjNeZEjpASGEnyVNXbp0wel0snHjxgLHc3Jy2LJlS4ECWWU931W9tKjKqna7vcBXIYTv6XJOmgAIq2ZcW5ImIQR+ljQNGzYMpVShAlnvvvsuWVlZBYpe7du3j507d5b6fNceQh9++GGhOFzHXJVLhRB+IH8RuLKWX9KkwmQxuBDiDL9a09S2bVvGjBnDrFmzGDx4MP369WPHjh3MmDGDnj17MmLECHfbyy+/nISEhAIVVEtyfv/+/enatSsrV67k0ksvZfDgwQB89tlnrFu3jiFDhhTY4VoI4WO5rjVN3r9zzs01PZebhbblogJlHaMQVZlfJU1glF1v2LAh77zzDitWrCAqKoqxY8cyadIkTMVY/Fnc881mM99++y1Tpkzhs88+47HHHkMpRdOmTZk6dSrjxo3z5scUQpSUD6bnVEAgOjjMWAiecRqq1ym3awsh/I9fFbesyEpSHEsIUTLanof+/VsAVMcrUWfZPd4bnAf+hJRDULcRprgW5XbdspDilkIYKnVxSyGEKJKrqGWgpVwTJgCVvxiczNPlel0hhP+RpEkI4f98ceecS9g/ilw6pcilEFWZJE1CCP+XW37bpxRiDQVzIDidkJ1W/tcXQvgNSZqEEH5P51cDVz4YaVJKues1SemByu/gwYMopZg4cWKx2k+cOBGlFAcPHvRqXMI/SNIkhPB/vpye40y9Jily6b/WrFmDUgqlFO+++26RbZRS9O/fv5wj8x+ffPIJt912G+3btycwMPC8yV5SUhI333wztWrVIjg4mM6dO7No0aIi2+bm5vLMM88QHx+PxWKhcePGPP/889hstiLbz5kzhw4dOhAcHEydOnW48847SU5OLrLtL7/8Qp8+fQgPDyciIoKrrrqKLVu2lPTje4QkTUII/+eenvNN0iQjTRXLxIkTyc7OLpdrPf3002RnZ9OgQYNyuV5ZvPXWWyxcuJDg4GAaN258zrYnT56ke/fufPbZZ4wePZrp06cTFhbG0KFDmT17dqH2w4YNY/LkyfTu3Zs333yTXr16MWHCBO66665Cbd944w1uueUWIiMjmT59Ovfccw8LFy6kV69eZGZmFmj7888/07NnTw4cOMCkSZN47rnn2LNnDz169ODPP/8s2zekNLTwiNTUVA3o1NRUX4ciRKXitNu0Y+MK7di4Qjtteb6PITfbJzGURHZ2tt6+fbvOzvb/WD1l9erVGtCdO3fWgH7xxRcLtQH0Nddcc85+Dhw4oAH97LPPeilS30lISNA2m01rrfWYMWM0oA8cOFBk20ceeUQDetmyZe5jdrtdd+nSRdeoUUOnp6e7j69YsUIDety4cQX6GDdunAb0Tz/95D6WnJysQ0JCdJcuXbTdbncfX7ZsmQb0Cy+8UKCPLl266PDwcH348GH3scOHD+vw8HDdt2/f837m4vxbKMnvbxlpEkL4N9cokzkQFRDokxCUOQCCw40XUnrArw0dOpROnToxdepUTpw4Uaa+FixYQLt27bBardSvX5+JEycW2pO0qDVNrmO7du3iySefpF69elgsFtq3b8/KlSsLXcdutzN16lRatWqF1WqlZs2aDBo0yOMjKfXr1ycgoHg1refPn0/jxo0ZMGCA+5jZbGbs2LGcPHmywOeYP38+AA8++GCBPlyv586d6z62dOlSsrKyGDt2LOZ/lA8ZMGAAjRo1KtB27969bNq0iSFDhhAbG+s+Hhsby5AhQ/j22285evRosT6Pp0jSJITwb76emnMJjQRAZ6b6No4y0lqjs7P98+GBWstKKV566SVSU1N54YUXSt3PsmXLGD16NAMGDOCVV16hefPmPPfcc0VON53NLbfcwrp16xg/fjyTJ08mOTmZ6667rtA6opEjR/L4449Tr149XnnlFe69915Wr15Nt27d+P333wu0PXXqFCkpKcV65ObmluqzHzlyhMTERC666KJC77mObdq0yX1s06ZNxMbGEhcXV6BtXFwcMTExhdoCdOvWrci+d+7cSUZGRrHaaq357bffSvrxysTvtlERQogCcvPXpgT5NmlSoZHolMNQwZMmcnJIv7a7r6MoUviyHyE4uMz99OnTh759+/LWW2/xwAMPlGq90datW9m0aZN7D9L77ruPwYMH88EHH3DPPfcUmVD8W1RUFMuXLzfuwAQuu+wyunbtyttvv82UKVMAWLVqFZ988glDhw5l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17M//vGPbNu2jRkzZjBv3jxCQ0M5cOAATz/9NO+88w55eXlEREQAnuUWxowZg9Fo5Le//S0xMTHs2LGDKVOm8Pe//5177rknyO/m+iorK6OyspLMzEwSEhIwGo0cP36c7du38/bbb1NQUEBcXBygv9hcafXq1Zw/f97vPj3GJj09nSVLlrQqu/KDT49xKS0tZfz48VitVh555BGSk5Opra2lsLCw1YK/eXl5jB8/nn79+rFu3ToAtm7dSnp6Orm5uaSkpATrLbSL+++/nyFDhviUFxYW8vvf/5777vvuZuZ6Gzdut5upU6eSm5vLggULyMrKwmaz8dZbb7Fw4UJOnDjBhg0bgC4+bpToFI4ePaouXrzoU75q1SoFqC1btnjLZs+erQwGg/r888+9ZfX19SoxMVElJycrt9vdEV0OunfeeUcBasOGDd4yPccmPz9fhYSEqJdeekkB6vHHH2+1X2+xAdSCBQu+t57e4qKUUnfffbdKSEhQFRUVV62XmpqqLBaLKisr85aVlZUpi8WiMjIy2rubncaSJUsUoPbs2eMt09u4yc3NVYBavnx5q3Kn06kGDRqkYmJivGVdedxI0tTJFRYWKkAtXbpUKaWU1WpVJpNJTZw40afuunXrFKCOHDnS0d0MiiNHjihAPfXUU0opfcemublZjRgxQk2fPl2dOXPGJ2nSY2xakian06nq6+v91tFjXD7++GMFqM2bNyullGpsbFQNDQ0+9b788ksFqEWLFvnsW7RokdI0TVVWVrZ7f4PNarWq6OholZCQoJqbm71lehs3//jHPxSgXnzxRZ99qampKj4+XinV9ceNzGnq5MrKygDo3bs34DlM7HQ6ueuuu3zqjh49GoCjR492XAc7kMPhoKqqirKyMj744AOWLl0KwLRp0wB9x2bjxo2cPHmSrVu3+t2v19j85S9/wWw2Y7FYiIuLIysri9raWu9+PcZl3759ACQmJnLfffcRERFBZGQkycnJ7Nq1y1uv5X23FRulFPn5+R3T6SDKycmhrq6Ohx9+mJCQEECf4yYtLY1u3brx4osvkpOTw9dff83JkydZuXIl+fn5rFmzBuj640bmNHViLpeL9evXYzQamTt3LgAVFRWA/5sJt5T5uwlxV7Bz506ysrK8zwcOHMiuXbtIT08H9BubM2fO8Oyzz7J69WoGDhxISUmJTx09xiYt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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# make a random graph with N nodes and average degree of k\n", + "np.random.seed(2)\n", + "\n", + "num_nodes = [100, 1000, 10000]\n", + "average_degree = 50\n", + "lambd = 50\n", + "colors1 = plt.cm.Reds(np.linspace(0.2, 0.6, len(num_nodes)))\n", + "\n", + "for i in range(len(num_nodes)):\n", + " probability = average_degree / num_nodes[i]\n", + " graph_b = nx.gnp_random_graph(num_nodes[i], probability)\n", + " degrees = [d for n, d in graph_b.degree()]\n", + " sns.kdeplot(degrees, fill=False, label=f\"N.bino={num_nodes[i]}\", color=colors1[i])\n", + "\n", + "s = np.random.poisson(lambd, num_nodes[-1])\n", + "sns.kdeplot(s, fill=False, label=f\"N.pois={num_nodes[i]}\", color='b')\n", + "\n", + "plt.xlabel(\"k\")\n", + "plt.ylabel(\"P(k)\")\n", + "plt.legend();" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### The evolution of a random network" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Connected Components:\n", + "Component 1: Size 19\n", + "Component 2: Size 1\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import networkx as nx\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Step 1: Generate a random graph (Erdős-Rényi model)\n", + "n = 20 # number of nodes\n", + "p = 0.12 # probability of edge creation\n", + "G = nx.erdos_renyi_graph(n, p)\n", + "\n", + "# Step 2: Find all connected components\n", + "connected_components = list(nx.connected_components(G))\n", + "\n", + "# Step 3: Calculate the size of each connected component\n", + "component_sizes = [len(component) for component in connected_components]\n", + "\n", + "# Display the graph and component sizes\n", + "print(\"Connected Components:\")\n", + "for i, component in enumerate(connected_components):\n", + " print(f\"Component {i + 1}: Size {len(component)}\")\n", + "\n", + "# Optionally, visualize the graph\n", + "plot_graph(G, seed=2, figsize=(5, 3));" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plotting the size of giant connected component vs average degree" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "N=10000, Ln(N)= 9.210340371976182\n", + "average k = 0.100, giant_component_size= 4\n", + "average k = 0.500, giant_component_size= 11\n", + "average k = 0.900, giant_component_size= 164\n", + "average k = 1.000, giant_component_size= 480\n", + "average k = 1.100, giant_component_size= 1682\n", + "average k = 2.001, giant_component_size= 8028\n", + "average k = 2.902, giant_component_size= 9363\n", + "average k = 3.803, giant_component_size= 9755\n", + "average k = 4.705, giant_component_size= 9909\n", + "average k = 5.606, giant_component_size= 9967\n", + "average k = 6.507, giant_component_size= 9989\n", + "average k = 7.408, giant_component_size= 9999\n", + "average k = 8.309, giant_component_size= 9997\n", + "average k = 9.210, giant_component_size= 9998\n" + ] + }, + { + "data": { + "image/png": "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bW2tVWtyNjIhhLB1EY6qsLAQXbt2RUREBHbv3m2cer9v3z7ExsZi6tSpWLFihY2rdB6LFi3CggULMH78eKxevRqurq62Lskp1dTU4Pvvv2+wvaCgAE888QTuuece/OMf/0CfPn3Qs2dPG1ToPIqLi9G1a1eoVCpkZWVBrVYDqGuli4iIQEVFBXJycti1bwVPP/003nrrLbz22mt47rnnjNtLSkrQt29fFBUVobCw0Dj+lMyPgcjC3n77bcyePRvx8fGYOHEiCgsLkZaWBnd3d+zbt8/YrUaW9d577+Gpp55Cly5dsGjRogZhKDAwEImJiTaqjgAgOzsb4eHheOKJJ/D+++/buhynsXLlSvz9739Hr169MH36dMhkMqxYsQInTpzAxx9/zNlNVnL27FlERUXhypUrGDduHG677TZcuXIFK1aswJ9//ok333wTzzzzjK3LdGy2XRfSOaxZs0YMHDhQKBQK4efnJx599FFx+vRpW5flVCZPniwANPk1bNgwW5fo9M6cOcOVqm3km2++EfHx8cLT01OoVCpx++23i40bN9q6LKdz/vx58eSTT4revXsLpVIpvLy8xG233SY+//xzW5fmFNhCRERERE6PI0qJiIjI6TEQERERkdNjICIiIiKnx0BERERETo+BiIiIiJweAxERERE5PQYiIiIicnoMREREROT0GIiIiIjI6TEQERERkdNjICJyMhqNBiqVCjKZDB9//LGty7EL2dnZkMlkxi8XFxf4+PigR48eePjhh/HJJ5+gsrLS1mUS0Q3gvcyInMyyZcvwz3/+E927d0dwcDB++eUXW5ckednZ2QgPD8fw4cMxdepUAEBZWRmys7Pxww8/4MCBA+jZsye++OIL3HLLLTaulojag4GIyMnExMTAy8sLjz76KJ588klkZWWhd+/eNqunrKwMnp6eNnv+1jAEoieeeALvv/9+g/1r1qzBlClTEBgYiN9//x2+vr7WLxJAVVUVXF1d4ebmZpPnJ7Jn7DIjciKHDx/G/v37MWXKFIwdOxZyuRwrV6407tfpdAgJCUG/fv0aPX/FihWQyWTYsGGDcVtVVRVeffVV9OnTBwqFAr6+vhg5ciQOHDhgcu62bduM3XTvvfceIiMjIZfL8e9//xsAsGfPHkyZMgW9evWCSqWCt7c34uPj8dVXXzVay6+//orbb78dSqUS/v7+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Pn/5y18AAG+++abJMQcPHjQZ89MSFxcXjB8/HpmZmfj8888bPab+azbXe0hk79hCROTgtmzZgnPnzmH+/PlNHvPwww/j+eefx4oVK3DbbbcBAO6//3507NgRycnJ0Gq1JoOpDWbNmoUtW7bg+eefx7Zt23DnnXfCx8cH586dw08//QSFQtHoejvXu/nmm9GnTx+88cYbKC8vR+/evXHy5EksX74cffv2RWZmpsnxixcvxp133on4+Hj885//RKdOnfDNN9/gypUrAOoGWBsMGjQIKSkpWLBgAQYMGIAxY8agc+fOyM/Px/79+7Fx40ZUV1e36md56tQprFmzBkDdwO/s7Gxs3rwZBw4cQK9evfDll1+atAT99a9/xdSpU7Fs2TIcPHgQI0eOhL+/P3JycrBz50788ccfxnWB7r33Xtx333349NNPcfnyZdx7773Iy8vD0qVLMXDgQOzfv9/kdTXnlVdewW+//YZx48bhq6++wpAhQ+Dh4YGzZ89i48aNiI6ONt62xVzvIZHds/q8NiKyqkceeUQAEIcPH272uH79+glPT0+TKehPPfWUACC8vLwanRYvRN0U8rffflvExMQIlUolVCqV6NGjhxg3bpz44YcfjMcZpt2vWrWq0etkZ2eLv/71r8Lf318olUoxaNAg8eWXX4oFCxY0mHIuhBDbt28X8fHxQqFQiI4dO4opU6YYp8fXXxrA4LvvvhN333236NChg/Dw8BChoaFixIgRYunSpc3+XIS4Nu3e8CWTyYSXl5fo3r27GD16tFi9erWoqKho8vxPPvlE3HbbbcLb21vI5XLRtWtX8dBDD4nPP//c5Ljy8nLxzDPPiODgYCGXy0X//v3F+vXrxZw5cwQAcfHiReOxhmn3TSkrKxOLFi0Sffv2FQqFQnh5eYmIiAgxffp0sWvXLpNjW/seEjky3rqDiBzGvn37MGjQIKSmpuL555+3dTlm88ADD2Dr1q3QarXG7kUiMi+OISIiuyOEaHB3eSEEXnvtNQBodt0eKWtsvZ8DBw5g8+bNuPPOOxmGiCyIY4iIyO5UVVWha9eumDBhAnr16oXi4mKkp6dj586dGDduHKKiomxdYrssWrQIBw4cwPDhw+Hr64tjx47hww8/hFwux0svvWTr8ogcGrvMiMju6HQ6PPbYY9ixYwfy8/Oh0+nQo0cPTJw4Ec8884zd3u1906ZNeO2113Ds2DEUFxfD19cXt99+OxYsWID+/fvbujwih8ZARERERE6PY4iIiIjI6TEQERERkdNjICIiIiKnx0BERERETo+BiIiIiJweAxERERE5PQYiIiIicnoMREREROT0/h9Ib2NCtc3yMAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "N = int(1e4)\n", + "print(f\"N={N}, Ln(N)= {np.log(N)}\")\n", + "k_avg = [.1, 0.5, 0.9, 1.0] + np.linspace(1.1, np.log(N), 10).tolist()\n", + "giant_component_sizes = []\n", + "for i in range(len(k_avg)):\n", + " p = k_avg[i] / N \n", + " G = nx.erdos_renyi_graph(N, p)\n", + " connected_components = list(nx.connected_components(G))\n", + " component_sizes = [len(component) for component in connected_components]\n", + " giant_component_size = max(component_sizes)\n", + " giant_component_sizes.append(giant_component_size)\n", + " \n", + " print(f\"average k = {k_avg[i]:10.3f}, giant_component_size={giant_component_size:10d}\")\n", + " \n", + "giant_component_sizes = np.array(giant_component_sizes)/N\n", + "plt.plot(k_avg, giant_component_sizes, marker='o', label='Giant Component Size')\n", + "plt.xlabel(r'Average Degree')\n", + "plt.ylabel(r'$N_G / N$');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Degree distribution of real networks" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dict_keys(['Collaboration', 'Internet', 'PowerGrid', 'Protein', 'PhoneCalls', 'Citation', 'Metabolic', 'Email', 'WWW', 'Actor'])" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from netsci.utils import load_sample_graph, list_sample_graphs\n", + "from netsci.analysis import graph_info\n", + "\n", + "graphs = list_sample_graphs()\n", + "graphs.keys()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Successfully loaded Collaboration\n", + "================================\n", + "Scientific collaboration network based on the arXiv preprint archive's \n", + " Condense Matter Physics category covering the period from January 1993 to April 2003. \n", + " Each node represents an author, and two nodes are connected if they co-authored at \n", + " least one paper in the dataset. Ref: Leskovec, J., Kleinberg, J., & Faloutsos, C. (2007). \n", + " Graph evolution: Densification and shrinking diameters. \n", + " ACM Transactions on Knowledge Discovery from Data (TKDD), 1(1), 2.\n", + "Graph information\n", + "Directed : False\n", + "Number of nodes : 23133\n", + "Number of edges : 93439\n", + "Average degree : 8.0784\n", + "Connectivity : disconnected\n" + ] + } + ], + "source": [ + "G_collab = load_sample_graph('Collaboration', verbose=True)\n", + "graph_info(G_collab)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Figure 3.6" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from scipy.stats import poisson\n", + "from collections import Counter\n", + "\n", + "fig, ax = plt.subplots(1,3, figsize=(15,4))\n", + "\n", + "c = 0\n", + "for net in [\"Internet\", \"Collaboration\", \"Protein\"]:\n", + " G = load_sample_graph(net)\n", + " degrees = [G.degree(n) for n in G.nodes()]\n", + " degree_count = Counter(degrees)\n", + " k, pk = zip(*degree_count.items())\n", + " k = np.array(k)\n", + " pk = np.array(pk)/sum(pk)\n", + "\n", + "\n", + " ax[c].loglog(k, pk, 'k.', label='real')\n", + " ax[c].set_xlabel(\"k\")\n", + " ax[c].set_ylabel(\"pk\");\n", + " ymin, ymax = np.min(pk)*0.9, np.max(pk)*1.1\n", + "\n", + " # add poisson distribution to graph\n", + "\n", + " k = np.arange(0, max(degrees)+1)\n", + " pk_poisson = poisson.pmf(k, np.mean(degrees))\n", + " ax[c].loglog(k, pk_poisson, 'r', label='poisson')\n", + " # plt.ylim([1e-5, 1])\n", + " ax[c].legend(frameon=False);\n", + " ax[c].set_ylim([ymin, ymax])\n", + " ax[c].set_title(net)\n", + " c += 1\n", + "\n", + "plt.tight_layout()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Clustering coefficient\n", + "\n", + "The local clustering coefficient of a random network is\n", + "\n", + "$$\n", + "C_i = p= \\frac{⟨k⟩}{N}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To analyze the dependence of the average path length $d(p)$ and the clustering coefficient $\\langle C(p) \\rangle$ on the rewiring parameter $p$ for a small-world network, you can use the Watts-Strogatz model. This model begins with a regular lattice and introduces randomness by rewiring each edge with probability $p$. Here's a step-by-step guide on how to perform this analysis:\n", + "\n", + "1. **Generate a regular lattice**: Create a regular ring lattice with $N$ nodes where each node is connected to its $k$ nearest neighbors.\n", + "\n", + "2. **Rewire edges**: For each edge in the lattice, rewire it with probability $p$. This involves replacing the existing edge with a new edge that connects the node to a randomly chosen node in the network.\n", + "\n", + "3. **Compute $d(p)$ and $\\langle C(p) \\rangle$**:\n", + " - $d(p)$ is the average shortest path length between all pairs of nodes in the network.\n", + " - $\\langle C(p) \\rangle$ is the average clustering coefficient of all nodes in the network.\n", + "\n", + "4. **Normalize by $d(0)$ and $\\langle C(0) \\rangle$**:\n", + " - $d(0)$ is the average path length of the regular lattice (when $p=0$).\n", + " - $\\langle C(0) \\rangle$ is the average clustering coefficient of the regular lattice (when $p=0$).\n", + "\n", + "5. **Plot the results**: Plot $d(p)/d(0)$ and $\\langle C(p) \\rangle / \\langle C(0) \\rangle$ as functions of $p$ on a log scale to observe the small-world phenomenon." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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x44ds2rfvn27MBqN4qWXXjK3DRgwQFxxxRXm9U8++UQYDAZx7733ilatWpnblyxZIgCIzZs3m9tGjx4tbL82ctuoUaNUrwWAGD16tF2bwWAQW7ZssWq/9dZbRXBwsCgqKjK3de/eXYSEhIicnBxzW3V1tRgyZIjqudVYunSpACBatGghLly4YG6/cOGCaNGihYiJiRHFxcXm9uTkZAFAfPjhh1bnqaysFMnJySIqKsrqb11ZWSkGDhwoAIgff/zR7m8zePBgUV1dbW7fsWOHMBgMol+/flbnV/ZBZsOGDQKAeP31163aAQgA4vPPP7dqnzBhggAgPv74Y7vrz8rKMrfJ/2NLly41tx06dEgAsPp/kT9L7e/8zTffCABi3rx5Vu2ffvqpACD+9a9/2R1jS+/evQUAMXHiRKv2zMxMAUA8+OCDLs9B6jd0fRO/5pVXXkHjxo3RpEkTdOrUCQsWLMCgQYPw5Zdfmve5cOEC/vvf/+L2229HeHg4zpw5Y361bNkSbdu2xTfffGPev0+fPsjLy8PevXsBAN9++y06duyIESNG4NChQzh06JC53WQyoXv37pr6+uSTT+q6th49euDGG2+0auvTpw8qKyvNrt5Tp05h69atuOOOO9C+fXvzfgaDAU8//bSuzwOAhx9+GDExMeb1mJgY/OMf/0BBQQGysrKs9o2Li8Po0aOt2nbu3IkjR45gzJgxSExMNLcbjUY899xzAIDMzEy7z3366aethgw6d+6MW265Bd9++y0KCwvN7Q0aNAAAVFdXo6CgAGfOnMF1112HmJgYbN261e687du3twvwevbZZwEAn3/+udO/hTfo168fWrdujSVLlli1L1myBDExMbjrrrs0n0vut8zgwYPRvn17RpsTjlET/2bcuHFYv349vvrqK7z55puIi4vDqVOnEBERYd7nzz//RHV1NZYtW4bGjRvbvfbt24dTp06Z9+/Tpw8ASYjlZZ8+fdCrVy8EBweb27OyspCWluYyUlimXbt2uq6tdevWdm2ya/fs2bMAYH5oUIq0zFVXXaXr8wDJlWtLhw4dAMBuzL9169Z2ruODBw8CAK655hq788hj2PI+Wj63urrafI2AdC/S09PRoEEDNGzY0HwPCwoKcP78eU3nveKKK9CwYUO76/EFBoMB48ePx65du7Bz504A0pDJxo0bce+991r9nzqjYcOGaNq0qV371VdfjTNnzqCgoMCr/SZ1C45RE7+mbdu26NevHwBpnPOmm25Cz5498fDDD5uDoMTlAKYRI0Zg7NixqudR/mCmpKSgUaNG2LhxI2677TYcOnQIffv2RVRUFLp06YKNGzeiZ8+eOHHiBCZOnKi5ryaTSde1OYtClq9JOAjOche14iPyZ9huU7seb/bH9nO3bduG/v37o23btnjttdfQqlUrREREwGAw4J577kF1dbXdORwVUxFC+KzQii0PPPAApkyZgsWLF2PBggVYunQpqqur8eCDD2o+h7PrcLadBAYUalKnuPHGG3HffffhX//6FyZMmIAbb7wRbdu2hcFgQFlZmVnUnREUFIRevXph06ZNWL9+PYKDg9G7d28AQN++fbF48WL07NkTgMX6ri1kqzsnJ8dum1qbK/bs2YM777zTqk0eAlCz8G1p06YNAOCPP/6w2/b7779b7WP7GbZufjmAr2XLlgCAlStXoqqqCl999RVatWpl3u/ixYuq1rR8Pbbk5eWhoKBA0/V4g4SEBNx5551YsWIF3nzzTSxbtgwpKSm44YYbNJ/j/PnzOHnypJ1VnZOTg/j4eERHR3u726QOQdc3qXO8+OKLMBqNePHFFwFI7uJbb70Va9euxY8//mi3vxAC+fn5Vm19+vTB+fPnMWfOHHTt2hVRUVHm9lOnTmHBggVo2LAhUlJSfH9BTkhISEC3bt3w//7f/8O+ffvM7UIIvPnmm7rP995771m5UQsKCvD++++jYcOGuPnmm10en5KSguTkZHz00UfIzc01t1dXV2PmzJkApLFVW9544w0ra3znzp3YsGED+vTpYxYh2cNga7XPmDFD1ZoGgH379tmN4b7++usO++EukZGRDh8WAOChhx5CQUEB/vGPf+DIkSO6rGmZ1157zWr9888/x759+1hkhdCiJnWPtm3b4p577sEnn3yC77//HmlpaXjvvfdw00034eabb8b999+PlJQUVFdX4+DBg1i7di1GjRplVb9ZtpT37NmDF154wdyempqK8PBw7NmzB4MGDfI4vccbzJo1C3379kXPnj3x6KOPonHjxvjyyy/NwqHHLRofH4/u3btj7NixEEJg6dKlOHr0KBYvXmwO5HKG0WjEggULkJGRga5du+Lvf/87GjVqhMzMTHz33XcYP348UlNT7Y47cuQIBgwYgDvvvBN5eXmYP38+IiIiMGvWLPM+gwcPxuzZs3HrrbfioYceQmhoKNavX4/ffvsN8fHxqv3p2LEj7rvvPowfPx7t2rVDVlYWVq9ejd69e2PEiBGa/y6u6N69OzZs2IA333wTSUlJaNCgAe644w7z9ltuuQWtW7fGxx9/jIiICIwcOVLX+ePj45GZmYkTJ04gPT3dnJ6VkJCAadOmee06SB2lVmLNCXGBnDozc+ZM1e179uwRQUFBIj093dyWn58v/vnPf4p27dqJsLAwERMTI6699loxYcIE8ccff9idIyEhQQAQ3377rVV7nz59BAAxd+5cu2OcpWc5Ag7Ss9TSfdTSiIQQ4rvvvhM9e/YU4eHhIi4uTowZM8acSvTwww87/Gzb865fv15MmTJFJCUlidDQUHHNNdeITz75xG7/5ORk0bt3b4fn+/7770X//v1FdHS0CAsLE9dee6145513rFKwhLD8bU6fPi3uu+8+ERsbKyIiIsTNN98sduzYYXfezz//XKSkpAiTySTi4uLE8OHDxZEjR1T7I/8N169fL7p16ybCw8NFkyZNxGOPPSYKCwtVr9/d9KycnBzRp08fERkZKQCI5ORku77PmDHDaZqeI3r37i2Sk5PFgQMHxJ133imioqJEZGSkuPPOO8X+/ft1nYvUTwxCeDlahRBSI+zYsQNdu3bFzJkz7VJ7bFm2bBkeeOABZGVlIT09vWY6GGC89dZb+L//+z9s3rwZaWlpmo9LT0/H4cOHnVZfI4FN7fv1CCFOEULg0qVLdm3ymGb//v1ro1tEQWVlJd577z106NBBl0gTogWOURPi55SVlSE5ORn33XcfrrzySly4cAFr167Fli1bMHLkyFoPeAtkDh06hC1btmDt2rU4ePCgat10QjyFQk2InxMSEoLbbrsNa9euRV5eHqqqqsy5xk899VRtdy+g+e677/DAAw8gPj4eU6ZM8WoAGyEyHKMmhBBC/BiOURNCCCF+DIWaEEII8WMo1IQQQogfQ6EmhBBC/BgKNSGEEOLHUKgJIYQQP4ZCTQghhPgxFGpCCCHEj6FQE0IIIX7M/wexj9vQDqJ9+QAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import numpy as np\n", + "import networkx as nx\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Parameters\n", + "N = 1000 # Number of nodes\n", + "k = 10 # Each node is connected to k nearest neighbors in ring topology\n", + "p_values = np.logspace(-4, 0, num=100) # Rewiring probabilities\n", + "\n", + "# Initialize lists to store results\n", + "average_path_lengths = []\n", + "clustering_coefficients = []\n", + "\n", + "# Generate the initial regular lattice\n", + "G0 = nx.watts_strogatz_graph(N, k, 0)\n", + "d0 = nx.average_shortest_path_length(G0)\n", + "C0 = nx.average_clustering(G0)\n", + "\n", + "for p in p_values:\n", + " G = nx.watts_strogatz_graph(N, k, p)\n", + " d = nx.average_shortest_path_length(G)\n", + " C = nx.average_clustering(G)\n", + " average_path_lengths.append(d / d0)\n", + " clustering_coefficients.append(C / C0)\n", + "\n", + "# Plotting\n", + "plt.figure(figsize=(5, 4))\n", + "\n", + "# Average path length plot\n", + "plt.plot(p_values, average_path_lengths, marker='o', linestyle='-', color='blue', label=r\"$d(p)/d(0)$\")\n", + "\n", + "# Clustering coefficient plot\n", + "plt.plot(p_values, clustering_coefficients, marker='o', linestyle='-', color='red', label=r\"$\\langle C(p) \\rangle / \\langle C(0) \\rangle$\")\n", + "plt.xscale('log')\n", + "plt.xlabel('Rewiring probability p')\n", + "plt.legend(frameon=False)\n", + "plt.tight_layout()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/.doctrees/nbsphinx/examples/chap_04.ipynb b/.doctrees/nbsphinx/examples/chap_04.ipynb new file mode 100644 index 0000000..b7f5012 --- /dev/null +++ b/.doctrees/nbsphinx/examples/chap_04.ipynb @@ -0,0 +1,561 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# [Chapter 4](https://github.com/Ziaeemehr/netsci/blob/main/docs/examples/chap_04.ipynb)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### **THE SCALE-FREE PROPERTY**\n", + "\n", + "Code by : Abolfazl Ziaeemehr \n", + "- https://github.com/Ziaeemehr\n", + "\n", + "\"Open" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# uncomment and run this line to install the package on colab\n", + "# !pip install \"git+https://github.com/Ziaeemehr/netsci.git\" -q" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from netsci.utils import generate_power_law_dist, generate_power_law_dist_bounded" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "LABELSIZE = 13\n", + "plt.rc('axes', labelsize=LABELSIZE)\n", + "plt.rc('axes', titlesize=LABELSIZE)\n", + "plt.rc('figure', titlesize=LABELSIZE)\n", + "plt.rc('legend', fontsize=LABELSIZE)\n", + "plt.rc('xtick', labelsize=LABELSIZE)\n", + "plt.rc('ytick', labelsize=LABELSIZE)\n", + "# set legend font size \n", + "plt.rc('legend', fontsize=10)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Comparing Poisson and Powe-law Distributions" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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27aNzp074+rqyujRo3F2dub3339n5MiRnD17Nt3uAe3bt8fHx4fJkydz7do1Zs+eTefOnenWrRsLFy5k0KBBWFlZMXv2bHr06MGlS5coV66c3jb+/PNPZs2axbBhw/Dw8GDLli18/fXXhIaGsmLFCl25oKAg/v33X7p06YK3tzfx8fFs2LCBd999l8jISMaPH58mvj59+mBra8tHH32ESqXC09Mz3fd+6dIl2rRpg4eHh+5C9/79+xw6dIj//vuPpk2bAhAeHk79+vV5+PAh77//PpUrV+bQoUPMnDmTPXv2cOjQIaytrfW2PX78eJ4+fcr777+PhYUFP/30EwMHDqRChQo0adIk0+8kJSWFDh06sG/fPrp27cro0aMJCwtj3rx57Nixg0OHDlGlShWaNWvGypUr+fDDD3F1deXzzz8HoEaNGpluPyNXrlwB0DX5z8lv43ndu3dn3759vPfeewQEBJCQkMDly5cJCgrSxbpq1Sr69+9P06ZNmTRpEjY2NoSHh7Njxw4iIiJ0311Of6fu7u5MmDCByMhIfvjhBzp27EhoaCj29vaZxn7mzBk2bdrEG2+8QdmyZUlKSmL79u18+umnXL9+nZ9//jnNOln9zseMGcOsWbNo1KgRI0aMIDo6mqlTp1KqVKlMY8qKF7/DrP52S5cujZ+fH7t379YlcykpKezfvx8TExN2797Np59+CmhaGB06dIiePXvq9nvz5k0aNWpEUlIS77zzDuXLl+fatWvMnz+fvXv3cvz4cRwdHfVizerfaXYkJSXx/fff0717d7p27YqNjQ1Hjx5l8eLF/Pvvv5w4cULX7adly5YsX76cJ0+eYGNjA8CePXswMTFh//79JCUl6cru2bMHHx+fNMex7LK0tKR///5MnjyZv//+O9Nj9cv+fqpUqcLKlSvp168fTZs25d133wU0Nxmet2nTJubMmcMHH3zA+++/j4ODw0vj7N+/P6ampnzyySfExcXx888/06FDB7Zt20bbtm2z/b4///xzXFxc+OOPP5g5c6bu99m4ceMM18mv425wcDCdOnWievXqfPrppzg5OXHnzh327t3L5cuXqVq1arbfnxCiiFCEEKIQcXFxUezt7bNcPiUlRfHx8VHs7e2V8PBwveXt27dXAOXAgQO65QMGDFAAZcSIEXrb+eijjxRA8fb2VuLi4nTLT58+rQDK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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from scipy.stats import poisson\n", + "\n", + "# Parameters\n", + "mean_poisson = 11\n", + "alpha_power_law = 2.1\n", + "x_values = np.arange(1, 1000)\n", + "\n", + "# Poisson Distribution\n", + "poisson_pmf = poisson.pmf(x_values, mean_poisson)\n", + "\n", + "# Power Law Distribution\n", + "power_law_pdf = x_values ** (-alpha_power_law)\n", + "# Normalize power-law PDF to make it a valid probability distribution\n", + "power_law_pdf /= np.sum(power_law_pdf)\n", + "\n", + "# Plotting\n", + "\n", + "fig, ax = plt.subplots(1,2, figsize=(12,4))\n", + "\n", + "ax[0].plot(x_values, poisson_pmf, label='Poisson Distribution (mean=11)')\n", + "ax[0].plot(x_values, power_law_pdf, label='Power Law Distribution (α=-2.1)')\n", + "ax[0].set_xlim([0,50])\n", + "ax[0].set_ylim([0,0.15])\n", + "ax[0].set_xlabel('x')\n", + "ax[0].set_ylabel(r'$p_k$')\n", + "fig.suptitle('Comparison of Poisson and Power Law Distributions')\n", + "ax[0].legend(frameon=False)\n", + "ax[1].loglog(x_values, poisson_pmf, label=\"poisson\")\n", + "ax[1].loglog(x_values, power_law_pdf, label=\"powerlaw\")\n", + "ax[1].set_ylim([1e-6, 1])\n", + "ax[1].set_xlabel('x')\n", + "ax[1].set_ylabel(r'$p_k$')\n", + "ax[1].legend(frameon=False);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### load sample graphs of the book" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['Actor', 'Collaboration', 'Internet', 'PowerGrid', 'Protein', 'PhoneCalls', 'Citation', 'Metabolic', 'Email', 'WWW']\n" + ] + } + ], + "source": [ + "from netsci.utils import list_sample_graphs, load_sample_graph\n", + "from netsci.analysis import graph_info\n", + "\n", + "nets = list(list_sample_graphs().keys())\n", + "print(nets)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Graph information\n", + "Directed : True\n", + "Number of nodes : 23133\n", + "Number of edges : 93439\n", + "Average degree : 8.0784\n", + "Connectivity : disconnected\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from collections import Counter\n", + "from scipy.stats import poisson\n", + "G_collab = load_sample_graph(\"Collaboration\")\n", + "graph_info(G_collab, quick=True)\n", + "in_degrees = list(dict(G_collab.in_degree()).values())\n", + "out_degrees = list(dict(G_collab.out_degree()).values())\n", + "in_degree_count = Counter(in_degrees)\n", + "out_degree_count = Counter(out_degrees)\n", + "\n", + "k_in, pk_in = zip(*in_degree_count.items())\n", + "k_out, pk_out = zip(*out_degree_count.items())\n", + "\n", + "plt.figure(figsize=(6,4))\n", + "plt.loglog(k_in, pk_in, 'r.', label=r\"$k_{in}$\")\n", + "plt.loglog(k_out, pk_out, 'b.', label=r\"$k_{out}$\")\n", + "plt.legend(frameon=1)\n", + "plt.xlabel(r\"$k_{in}, k_{out}$\")\n", + "plt.ylabel(\"pk\");" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Calculating best minimal value for power law fit\n", + " α = 3.042, σ = ± 0.327\n", + "Calculating best minimal value for power law fit\n", + " α = 5.496, σ = ± 0.937\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Values less than or equal to 0 in data. Throwing out 0 or negative values\n", + "Values less than or equal to 0 in data. Throwing out 0 or negative values\n" + ] + } + ], + "source": [ + "# find the exponent by fitting a power law by powerlaw package\n", + "import powerlaw\n", + "\n", + "for x in [k_in, k_out]:\n", + " fit = powerlaw.Fit(x) # xmax=50 we can constrain the max value for fitting\n", + " print(f\" α = {fit.power_law.alpha:6.3f}, σ = ± {fit.power_law.sigma:6.3f}\") # the exponent" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Generate the powerlaw distribution (bounded)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[0;31mSignature:\u001b[0m \u001b[0mgenerate_power_law_dist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mN\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mfloat\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mxmin\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mfloat\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mDocstring:\u001b[0m\n", + "generate power law random numbers p(k) ~ x^(-a) for a>1\n", + "\n", + "Parameters\n", + "-----------\n", + "N:\n", + " is the number of random numbers\n", + "a:\n", + " is the exponent\n", + "xmin:\n", + " is the minimum value of distribution\n", + "\n", + "Returns\n", + "-----------\n", + "value: np.array\n", + " powerlaw distribution\n", + "\u001b[0;31mFile:\u001b[0m ~/git/workshops/netsci/netsci/utils.py\n", + "\u001b[0;31mType:\u001b[0m function" + ] + } + ], + "source": [ + "generate_power_law_dist?" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[0;31mSignature:\u001b[0m\n", + "\u001b[0mgenerate_power_law_dist_bounded\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mN\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mfloat\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mxmin\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mfloat\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mxmax\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mfloat\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mseed\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mint\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\n", + "\u001b[0;34m\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mDocstring:\u001b[0m\n", + "Generate a power law distribution of floats p(k) ~ x^(-a) for a>1\n", + "which is bounded by xmin and xmax\n", + "\n", + "parameters :\n", + " N: int\n", + " number of samples in powerlaw distribution (pwd).\n", + " a: \n", + " exponent of the pwd.\n", + " xmin: \n", + " min value in pwd.\n", + " xmax: \n", + " max value in pwd.\n", + "\u001b[0;31mFile:\u001b[0m ~/git/workshops/netsci/netsci/utils.py\n", + "\u001b[0;31mType:\u001b[0m function" + ] + } + ], + "source": [ + "generate_power_law_dist_bounded?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "plotting the powerlaw distributions" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "def plot_distribution(vrs, N, a, xmin, ax, labelsize=10):\n", + "\n", + " # plotting the PDF estimated from variates\n", + " bin_min, bin_max = np.min(vrs), np.max(vrs)\n", + " bins = 10**(np.linspace(np.log10(bin_min), np.log10(bin_max), 100))\n", + " counts, edges = np.histogram(vrs, bins, density=True)\n", + " centers = (edges[1:] + edges[:-1])/2.\n", + "\n", + " # plotting the expected PDF\n", + " xs = np.linspace(bin_min, bin_max, N)\n", + " expected_pdf = [(a-1) * xmin**(a-1) * x**(-a) for x in xs] # according to eq. 4.12 network science barabasi 2016\n", + " ax.loglog(xs, expected_pdf, color='red', ls='--', label=r\"$x^{-\\gamma}$,\"+ r\"${\\gamma}$=\"+f\"{-a:.2f}\")\n", + " ax.loglog(centers, counts, 'k.', label='data')\n", + " ax.legend(fontsize=labelsize)\n", + " ax.set_xlabel(\"values\")\n", + " ax.set_ylabel(\"PDF\")\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1.000035809608483 74.39513593875918\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "np.random.seed(2)\n", + "\n", + "N = 10000\n", + "a = 3.0\n", + "xmin = 1\n", + "xmax = 100\n", + "\n", + "fig, ax = plt.subplots(1, figsize=(5,3))\n", + "x = generate_power_law_dist_bounded(N, a, xmin, xmax)\n", + "print (np.min(x), np.max(x))\n", + "plot_distribution(x, N, a, xmin, ax)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Calculating best minimal value for power law fit\n", + "fit.power_law.alpha=2.995340848455978\n", + "fit.power_law.sigma=0.02600579145725683\n" + ] + } + ], + "source": [ + "# find the exponent by fitting a power law by powerlaw package\n", + "\n", + "import powerlaw\n", + "fit = powerlaw.Fit(x) # xmax=50 we can constrain the max value for fitting\n", + "print(f\"{fit.power_law.alpha=}\") # the exponent\n", + "print(f\"{fit.power_law.sigma=}\") # standard error" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Generate descereted power law distribution" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAF9CAYAAAD4A0k5AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAABL6ElEQVR4nO3deVxVdf7H8de91w0EVMIyvYYiuORSqbSYGTmVY4s2/dLUyXRi1CbNyNTSHJcsyTZzadFkstLSmhknKy1NUafUXFKzkgQV5aaTO4soCJzfHzeuIDvcy114Px+P+/jBOd97zvc258f9+F0+H5NhGAYiIiIiPsLs7g6IiIiIOJOCGxEREfEpCm5ERETEpyi4EREREZ+i4EZERER8ioIbERER8SkKbkRERMSnKLgRERERn1LL3R3wRXl5eRw5coTAwEBMJpO7uyMiIuI1DMMgPT2dpk2bYjZXbgxGwY0LHDlyhObNm7u7GyIiIl4rJSUFq9VaqfcquHGBwMBAwP4/TFBQkJt7IyIi4j3S0tJo3ry547u0MhTcuED+VFRQUJCCGxERkUqoyrIOLSgWERERn6LgRkRERHyKghsRERHxKVpzIyIiLpebm8uFCxfc3Q3xELVr18Zisbjs+gpuRETEpTIyMrDZbBiG4e6uiIcwmUxYrVYCAgJccn0FNyIi4jK5ubnYbDb8/f1p3LixEpsKhmFw/PhxbDYbERERLhnBUXAjIiIuc+HCBQzDoHHjxvj5+bm7O+IhGjduTHJyMhcuXHBJcKMFxSIi4nIasZGCXP08KLjxQjabjfj4eGw2m7u7IiIi4nEU3HiZuLg4QkND6dmzJ6GhocTFxbm7SyIiIh5FwY0XsdlsDB8+nLy8PMBefXzEiBEawRERESlAwY0XSUxMdAQ2+XJzc0lKSnJTj0REpCQ//vgjrVq14n//+x8AJ06c4NprryU7O9vNPfN9Cm68SEREBGZz4f/JLBYL4eHhbuqRiIiUpEOHDgwYMIB169YBMG3aNJ5++mnq1Knjlv7ExsYSGRlJYGAgl19+Offddx+//PJLme+bOnUqJpOp0KtJkyaF2rz55pu0bNmSevXq0aVLF/773/+66mOUi4IbL2K1WlmwYIFj25zFYmH+/PlYrVY390xEpGbq0qULHTp0KPI6cuQIAO3bt2ffvn0kJSWxY8cOBgwY4La+btiwgZEjR7JlyxbWrFlDTk4Od955J2fPni3zve3bt+fo0aOO1549exznli1bRkxMDM8++yw7d+7klltuoXfv3hw+fNiVH6d0hjhdamqqARipqakuuX5KSooRHx9vpKSkuOT6IiLOcu7cOePnn382zp075+6uVNiHH35o1K1b17DZbI5j0dHRRseOHY0zZ86U6xpbt241Bg4caPTr189Yt25die0iIiKMG2+80cjMzHQcy8vLM2644QZj3Lhxlf8QpTh27JgBGBs2bCi13ZQpU4xrrrmmxPPXX3+98eijjxY61rZtW+OZZ54p8T2lPRfO+A7VyI0XslqtREVFacRGRMSFBgwYQJs2bYiNjQXs00pfffUVq1atokGDBuW6RkREBGvWrCEzM5PbbrutxHbLli1j586dfPvtt45jS5Ys4eDBg0yaNAmAGTNmEBAQUOqrItNBqampAAQHB5fZNjExkaZNm9KyZUsGDBjAgQMHAMjOzmbHjh3ceeedhdrfeeedbNq0qdx9cTZlKBYRkepX2lSIxQL16pWvrdkMBTMfl9S2fv2K9Q97orkXXniBBx54gKZNmzJ79mz++9//0qxZs3Jfo2HDhgC8+OKLpba77rrruOaaa0hISOD2228nMzOTCRMmMH36dIKCggB49NFH6d+/f6nXKW/fDMNgzJgxdO/enQ4dOpTa9oYbbuD999+ndevW/Pbbbzz//PN069aNn376iaysLHJzc7niiisKveeKK65wLKR2BwU3IiJS/UormHjXXfDFFxd/v/xyyMwsvu2tt8L69Rd/b9ECTpwo2q6SRTvvuecerr76aqZNm8bq1atp3759hd5/4cIFgoODywwgAFq3bu1Y4PvSSy8RHBxMdHS043xwcHC5RlmWLFnCiBEjHL+vWrWKW265pVCbUaNG8cMPP/DNN9+Ueb3evXs7fu7YsSM33XQTrVq14r333nOsIbo047BhGG7NSq3gRkREpARfffUVCQkJxY5OlEdCQgJt2rQpV9s2bdqwceNGbDYbL7/8Mp999lmhukszZsxgxowZpV5j1apV9OnThxtuuMFx7NLRnMcff5wVK1awcePGSi1vqF+/Ph07diQxMZGQkBAsFkuRUZpjx45V6r+Xsyi4ERGR6peRUfK5SwspHjtWcttL0mOQnFzpLl3q+++/p1+/fsyfP5+lS5fy97//nU8++aRC1+jYsSMrVqwoV9vWrVvzzjvv8Mwzz3DHHXfQs2fPQufLOy3l5+dHYGBgkXOGYfD444+zfPly1q9fT8uWLcv/QQrIyspi79693HLLLdSpU4cuXbqwZs0a/vSnPznarFmzhr59+1bq+s6g4EZERKpfRdbAuKptKZKTk7n77rt55plnGDx4MFdffTWRkZHs2LGDLl26OOUel2rdujUpKSn885//5McffyxyvrzTUiUZOXIkH374IZ9++imBgYGO0ZYGDRo4KrbPmzeP5cuXs3btWsf7xo4dy7333stVV13FsWPHeP7550lLS2PIkCEAjBkzhsGDB9O1a1duuukmFixYwOHDh3n00Ucr3deq0m4pERGRAk6dOkXv3r3p06cPEydOBOz5bO69916effZZp9xj0aJFRdaktG7dGrCvh3FFcta33nqL1NRUoqKiuPLKKx2vZcuWOdqcOHGC/fv3F3qfzWZj4MCBtGnThvvvv586deqwZcsWQkNDAXjwwQd5/fXXee6557j22mvZuHEjK1eudJx3B5NhVHKVlZQoLS2NBg0akJqa6ljlLiJSE50/f56DBw86steK3dSpU1m/fj3rCyyGPnXqFJdddhm7d++mU6dO7utcNSjtuXDGd6impURERKrZV199xezZswsd2717N3Xq1KFdu3Zu6pXvUHAjIiJSzTZv3lzk2O7du7n66qupXbu2G3rkW7TmRlzGZrMRHx+PzWZzd1dERDxeTEwMO3fudHc3fIKCG3GJuLg4QkND6dmzJ6GhocTFxbm7SyIiUkMouBGns9lsDB8+nLy8PADy8vIYMWKERnBERKRaKLgRp0tMTHQENvlyc3NJSkpyU49ERKQmUXAjThcREYH5kqyhFovFJXkbRERELqXgRpzOarWyYMECR00Ui8XC/PnzK1XDREREpKIU3BQjJyeHJ554guDgYBo2bEh0dDTnz593d7e8SnR0NMnJycTHx5OcnFyosq2IiIgrKbgpxowZM4iPj2fPnj0kJiby888/M378eHd3CzZsgClT4Nw5d/ekXKxWK1FRURqxERGRaqXgphgLFy5k4sSJNGvWjMaNGzN16lTee+89cnNz3depCxfgscfgueegQwdYtcp9fREREfFgXh3cxMbG0q9fP8LCwjCZTLRo0aLU9h999BFdunTBz8+PkJAQBg4cyKFDhwq1OXPmDCkp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1q188803rFmzho0bN/LUU08xefJkPv30U6Kiosr7n0FEqkjBjYh4jEGDBjFu3Djef/99brvtNj7++GN69uyJ1WoFYM+ePfzwww9MnjyZadOmFXrvwoULy3WP4OBgAE6dOuX4GeDAgQNF2rZu3Zovv/wSq9VKx44dy7y22WymR48e9OjRA7CP/HTp0oUpU6awYcOGcvVPRKpO01Ii4jEaN25M7969+c9//sOSJUs4c+ZMoSkpi8UCXBxRyffjjz+Weyt469atAfj6668LHX/11VeLtM0fMZo4cWKxIzvHjh1z/HzixIli7xUYGMipU6fK1TcRcQ6N3IiIRxkyZAgrVqzgySefJCAggPvvv99xrl27drRv356XXnqJzMxM2rRpw759+5g/fz4dOnTg+++/L/P6AwcOZOLEiQwfPpyEhAQuu+wyVq1aVWxwEhkZybRp05gyZQrXXnst/fv3p2nTphw9epQdO3awcuVKsrOzARg2bBg2m40777yT0NBQsrKy+OSTTzh27Bjjxo1z3n8gESmTghsR8Sj33HMPwcHBnDp1iqFDh+Lv7+84Z7FY+OKLLxg7dizvvfceZ8+epUOHDrz33nvs3r27XMFNUFAQK1euZMyYMcyYMcMRQC1evJhGjRoVaT958mS6dOnCnDlzeP311zl79iyXX345HTp0YPbs2Y52gwcPZtGiRbz33nscP36coKAg2rZty4cffsjAgQOd8x9HRMrFZFw6visiIiLixbTmRkRERHyKghsRERHxKQpuRERExKcouBERERGfouBGREREfIqCGxEREfEpCm5ERETEpyi4EREREZ+i4EZERER8ioIbERER8SkKbkRERMSnKLgRERERn6LgRkRERHzK/wPRJZt/vcgAhgAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from netsci.utils import generate_power_law_discrete\n", + "# Example usage\n", + "gamma = 2.5 # Power-law exponent\n", + "k_min = 1 # Minimum value of k\n", + "k_max = 1000 # Maximum value of k\n", + "size = 100000 # Number of samples\n", + "\n", + "samples = generate_power_law_discrete(size, gamma, k_min, k_max, seed=1)\n", + "fig, ax = plt.subplots(1, figsize=(6,4))\n", + "plot_distribution(samples, size, gamma, k_min, ax)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Powerlaw package\n", + "\n", + "- Alstott, J., Bullmore, E. and Plenz, D., 2014. powerlaw: a Python package for analysis of heavy-tailed distributions. PloS one, 9(1), p.e85777.\n", + "\n", + " - probability density function (PDF), \n", + " - cumulative distribution function (CDF)\n", + " - complementary cumulative distribution (CCDF)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Calculating best minimal value for power law fit\n", + "xmin progress: 00%\r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "fit.power_law.alpha=2.995340848455978\n", + "fit.power_law.sigma=0.02600579145725683\n", + "----------------------------------------------------------------------\n", + "(894.9727455051284, 5.263968413468816e-22)\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import powerlaw\n", + "fig, ax = plt.subplots(1, figsize=(6,4))\n", + "fit = powerlaw.Fit(x) # xmax=50\n", + "print(f\"{fit.power_law.alpha=}\")\n", + "print(f\"{fit.power_law.sigma=}\")\n", + "print(\"-\"*70)\n", + "print(fit.distribution_compare(\"power_law\", \"exponential\"))\n", + "\n", + "powerlaw.plot_pdf(x, linear_bins=0, color='k', marker='o', lw=1, ax=ax);" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots(1, figsize=(6,4))\n", + "fit.plot_pdf(c='b', lw=2, marker=\"*\", label='pdf', ax=ax)\n", + "fit.power_law.plot_pdf(c='b', ax=ax, ls='--', label='fit pdf')\n", + "fit.plot_ccdf(c='r', ax=ax, ls=\"-\", label='ccdf')\n", + "fit.power_law.plot_ccdf(c='r', ax=ax, ls='--', label='fit ccdf')\n", + "ax.legend(frameon=False);\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/.doctrees/nbsphinx/examples/quick_guide_igraph.ipynb b/.doctrees/nbsphinx/examples/quick_guide_igraph.ipynb new file mode 100644 index 0000000..3d250aa --- /dev/null +++ b/.doctrees/nbsphinx/examples/quick_guide_igraph.ipynb @@ -0,0 +1,375 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# [igraph](https://github.com/Ziaeemehr/netsci/blob/main/docs/examples/quick_guide_igraph.ipynb)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### **Quick Guide for igraph**\n", + "\n", + "Code by : Abolfazl Ziaeemehr \n", + "- https://github.com/Ziaeemehr\n", + "\n", + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First, ensure that python-igraph is installed. You can install it using pip:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.11.6\n" + ] + } + ], + "source": [ + "try:\n", + " import igraph\n", + " print(igraph.__version__)\n", + "except ImportError:\n", + " print(\"igraph is not installed.\")\n", + " \n", + "# If `igraph` is not installed, you can install it using the following command (uncomment the following line):\n", + "# !pip install python-igraph" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Creating Graphs\n", + "- Empty Graph\n", + "\n", + "To create an empty graph:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import igraph as ig\n", + "g = ig.Graph()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Graph with Nodes and Edges\n", + "To create a graph with 10 nodes and specific edges, also get summary of the graph with `print(g)`:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "IGRAPH U--- 10 2 --\n", + "+ edges:\n", + "0--1 0--5\n" + ] + } + ], + "source": [ + "g = ig.Graph(n=10, edges=[[0, 1], [0, 5]])\n", + "print(g)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This will display the number of vertices and edges, and list the edges if the graph is small." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Assigning Attributes\n", + "You can set and retrieve attributes for graphs, vertices, and edges." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "import igraph as ig\n", + "\n", + "# Create a graph with 3 nodes\n", + "g = ig.Graph(n=3)\n", + "\n", + "# Assign a 'color' attribute to all nodes\n", + "g.vs[\"color\"] = [\"red\", \"green\", \"blue\"]\n", + "\n", + "# Assign a 'label' attribute to the first node\n", + "g.vs[0][\"label\"] = \"Node 1\"\n", + "\n", + "# Assign a 'label' attribute to the second node\n", + "g.vs[1][\"label\"] = \"Node 2\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# Create a graph with edges\n", + "g.add_edges([(0, 1), (1, 2)])\n", + "\n", + "# Assign a 'weight' attribute to all edges\n", + "g.es[\"weight\"] = [1.5, 2.5]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Retrieving Attributes" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'color': 'red', 'label': 'Node 1'}\n" + ] + } + ], + "source": [ + "# Get all attributes for the first node\n", + "node_attributes = g.vs[0].attributes()\n", + "print(node_attributes)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['red', 'green', 'blue']\n" + ] + } + ], + "source": [ + "# Get the 'color' attribute for all nodes\n", + "colors = g.vs[\"color\"]\n", + "print(colors)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'weight': 1.5}\n" + ] + } + ], + "source": [ + "# Get all attributes for the first edge\n", + "edge_attributes = g.es[0].attributes()\n", + "print(edge_attributes)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1.5, 2.5]\n" + ] + } + ], + "source": [ + "# Get the 'weight' attribute for all edges\n", + "weights = g.es[\"weight\"]\n", + "print(weights)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Load graph from adjacency list" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "File /Users/tng/git/workshops/netsci/netsci/datasets/networks.zip already exists.\n", + "path='/Users/tng/git/workshops/netsci/netsci/datasets/'\n", + "Number of vertices: 23133\n", + "Number of edges: 93439\n", + "Is directed: False\n", + "Density: 0.000349\n", + "Average clustering coefficient: 0.264317\n" + ] + } + ], + "source": [ + "import os\n", + "from netsci.utils import list_sample_graphs\n", + "from netsci.utils import get_sample_dataset_path\n", + "from netsci.utils import download_sample_dataset\n", + "\n", + "def load_edges(filepath):\n", + " edges = []\n", + " with open(filepath, 'r') as file:\n", + " for line in file:\n", + " if line.startswith('#'):\n", + " continue # Skip comments\n", + " A, B = map(int, line.split())\n", + " edges.append((A, B))\n", + " return edges\n", + "\n", + "def load_graphi(filepath:str, directed:bool=False):\n", + " edges = load_edges(filepath)\n", + " G = ig.Graph(edges=edges, directed=directed)\n", + "\n", + " return G\n", + "\n", + "path = get_sample_dataset_path()\n", + "\n", + "# make sure you have downloaded the sample dataset\n", + "download_sample_dataset()\n", + "\n", + "file_name = os.path.join(path, \"collaboration.edgelist.txt\")\n", + "print(f\"{path=}\")\n", + "\n", + "G = load_graphi(file_name, directed=False)\n", + "\n", + "print(f\"{'Number of vertices:':<30s} {G.vcount():20d}\")\n", + "print(f\"{'Number of edges:':<30s} {G.ecount():20d}\")\n", + "print(f\"{'Is directed:':<30s} {str(G.is_directed()):>20s}\")\n", + "print(f\"{'Density:':<30s} {G.density():20.6f}\")\n", + "print(f\"{'Average clustering coefficient:':30s}{G.transitivity_undirected():20.6f}\")\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Visualizing Graphs" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "# need to install matplotlib and pycairo\n", + "# !pip install pycairo -q " + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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GZDftW/fPtxuN99//705e/jhh3n00UdxOp0WJhMRkaKgMiC/KTMzk2nTppGXlwdA6dKlSUxMpE2bNhYnExGRoqIyIJdUUFDAvHnzWLFihTmrV68eLpeLG2+80cJkIiJS1FQG5FdOnDhBWloa27dvN2edO3fmqaeeIioqysJkIiJSHFQG5Ge2bNnC+PHjOX36NAAREREMHTqU+++/X8sGRURClMqAAIXLBpctW8aCBQvMZYM33HADLpeLRo0aWZxORESKk8qAcP78eaZOncqnn35qzlq0aEFSUhLly5e3MJmIiJQElQGb27NnD263m4MHD5qzvn370rdvXy0bFBGxCZUBG/vwww+ZOXMmFy5cAKBs2bIkJibSunVri5OJiEhJUhmwofz8fObOncuqVavMWYMGDXC5XFSrVs3CZCIiYgWVAZs5duwYaWlp7Nixw5x16dKF4cOHExkZaWEyERGxisqAjXz++edMmDCBs2fPAoXLBocPH07Xrl0tTiYiIlZSGbABv9/P0qVLWbRoEYZhAFC1alVSU1Np0KCBxelERMRqKgMh7ty5c0yZMoWNGzeas9atW5OYmEjZsmUtTCYiIoFCZSCE7dq1C7fbzZEjRwBwOBz8+c9/5pFHHiEsLMzidCIiEihUBkLUmjVreOGFF8jPzwegXLlyJCUl0bJlS4uTiYhIoFEZCDH5+fnMnj2b1atXm7NGjRrhcrm44YYbLEwmIiKBSmUghBw5cgSPx8O3335rzv7rv/6LwYMHa9mgiIhclspAiPjss8+YNGkS586dA6BUqVKMGDGCzp07W5xMREQCncpAkPP5fLz66qssWbLEXDZYvXp1UlNTqVevnsXpREQkGKgMBLGzZ88yceJENm3aZM7atm3LM888Q5kyZSxMJiIiwURlIEh98803eDwejh07BkBYWBh/+ctf6NmzJw6Hw+J0IiISTFQGgoxhGKxevZrZs2dTUFAAQIUKFRg7dizNmze3NpyIiAQllYEgkpeXx/PPP88HH3xgzpo0aUJKSgqVK1e2MJmIiAQzlYEgcejQIdxuN99995056969O4MGDSIiIsLCZCIiEuxUBoLAhg0bmDx5MufPnwcgKiqKUaNG8cc//tHiZCIiEgpUBgKYz+dj4cKFvP766+asZs2auFwu6tSpY10wEREJKSoDAerUqVNMmDCBLVu2mLN27dox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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "fig, ax = plt.subplots()\n", + "\n", + "# Compute a layout\n", + "layout = g.layout(\"kk\") # Kamada-Kawai layout\n", + "\n", + "# Define visual style\n", + "visual_style = {}\n", + "visual_style[\"vertex_size\"] = 20\n", + "visual_style[\"vertex_label\"] = range(g.vcount())\n", + "visual_style[\"layout\"] = layout\n", + "visual_style[\"bbox\"] = (300, 300) # Bounding box size\n", + "visual_style[\"margin\"] = 20\n", + "\n", + "# Plot the graph\n", + "ig.plot(g, **visual_style)\n", + "\n", + "# Plot the graph in the axes\n", + "ig.plot(g, target=ax, **visual_style)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/.doctrees/nbsphinx/examples/quick_guide_networkx.ipynb b/.doctrees/nbsphinx/examples/quick_guide_networkx.ipynb new file mode 100644 index 0000000..60bf575 --- /dev/null +++ b/.doctrees/nbsphinx/examples/quick_guide_networkx.ipynb @@ -0,0 +1,212 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# [Networkx](https://github.com/Ziaeemehr/netsci/blob/main/docs/examples/quick_guide_networkx.ipynb)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "#### **Quick Guide for Networkx**\n", + "\n", + "Code by : Abolfazl Ziaeemehr \n", + "- https://github.com/Ziaeemehr\n", + "\n", + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Creating Graphs\n", + "\n", + "#### Basic Graph Types\n", + "\n", + "NetworkX provides several types of graphs:\n", + "- **Graph**: An undirected graph.\n", + "- **DiGraph**: A directed graph.\n", + "- **MultiGraph**: An undirected graph that can have multiple edges between nodes.\n", + "- **MultiDiGraph**: A directed graph with multiple edges." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can create an empty graph as follows:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import networkx as nx\n", + "\n", + "G = nx.Graph() # or nx.DiGraph(), nx.MultiGraph(), nx.MultiDiGraph()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Adding Nodes and Edges\n", + "You can add nodes and edges to a graph using the following methods:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{1: 1, 2: 2, 3: 2, 4: 1}" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Add a single node\n", + "G.add_node(1)\n", + "\n", + "# Add multiple nodes\n", + "G.add_nodes_from([2, 3])\n", + "\n", + "# Add an edge between two nodes\n", + "G.add_edge(1, 2)\n", + "\n", + "# Add multiple edges\n", + "G.add_edges_from([(2, 3), (3, 4)])\n", + "\n", + "# get degree distribution\n", + "degrees = dict(G.degree())\n", + "degrees" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Nodes can be any hashable Python object except None." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Node and Edge Attributes\n", + "You can also add attributes to nodes and edges:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "# Add node with attributes\n", + "G.add_node(4, color='red')\n", + "\n", + "# Add edge with attributes\n", + "G.add_edge(1, 3, weight=4.2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Graph Algorithms\n", + "NetworkX provides a wide range of graph algorithms, such as shortest path, clustering, and many others. For example, to find the shortest path using Dijkstra's algorithm:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['a', 'c', 'd']\n" + ] + } + ], + "source": [ + "# Create a weighted graph\n", + "G = nx.Graph()\n", + "edges = [('a', 'b', 0.3), ('b', 'c', 0.9), ('a', 'c', 0.5), ('c', 'd', 1.2)]\n", + "G.add_weighted_edges_from(edges)\n", + "\n", + "# Find shortest path\n", + "path = nx.dijkstra_path(G, 'a', 'd')\n", + "print(path) # Output: ['a', 'c', 'd']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Visualization\n", + "NetworkX includes basic functionality for visualizing graphs, although it is primarily designed for graph analysis. You can use Matplotlib to draw graphs:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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JZGJefXthbGefR75LG8AcFn6ZYvGffAsb4ZJIiIyNZ6hJBLB1lmDYSEx7vUcC4kZts4abNQxiYiIngQDJZEIBthbY8NDz9s2ho3BMgxo4ws/RERETWGgJBJJZIArVk7xNspY70zxQUSAq1HGIiIiaileyiES2Q8phVifmAGNTnjsze+HmUvMYCExw8ZgGcMkERGJioGSqB0oqlBh7aGrOJNTBnOJ2SOD5YPXx3r2wdZZg7nNTUREomOgJGpHlCV3sSe5ECezS1FYrsLD35xmuN+0fLy3E+aOdOVtbiIiajcYKInaqRq1BvnlNajX6NDNQoKBDjZ8Ag4REbVLDJREREREZBDe8iYiIiIigzBQEhEREZFBGCiJiIiIyCAMlERERERkEAZKIiIiIjIIAyURERERGYSBkoiIiIgMwkBJRERERAZhoCQiIiIigzBQEhEREZFBGCiJiIiIyCAMlERERERkEAZKIiIiIjIIAyURERERGYSBkoiIiIgMwkBJRERERAZhoCQiIiIigzBQEhEREZFBGCiJiIiIyCAMlERERERkEAZKIiIiIjIIAyURERERGYSBkoiIiIgMwkBJRERERAZhoCQiIiIigzBQEhEREZFBGCiJiIiIyCAMlERERERkEAZKIiIiIjIIAyURERERGYSBkoiIiIgMwkBJRERERAZhoCQiIiIigzBQEhEREZFBGCiJiIiIyCAMlERERERkEAZKIiIiIjLI/wMVJ4BQPoQRMQAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "G = nx.complete_graph(5)\n", + "nx.draw(G, with_labels=True)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/.doctrees/nbsphinx/examples_chap_02_10_2.png b/.doctrees/nbsphinx/examples_chap_02_10_2.png new file mode 100644 index 0000000..05eb9d5 Binary files /dev/null and b/.doctrees/nbsphinx/examples_chap_02_10_2.png differ diff --git a/.doctrees/nbsphinx/examples_chap_02_12_1.png b/.doctrees/nbsphinx/examples_chap_02_12_1.png new file mode 100644 index 0000000..ce326cd Binary files /dev/null and b/.doctrees/nbsphinx/examples_chap_02_12_1.png differ diff --git a/.doctrees/nbsphinx/examples_chap_02_15_1.png b/.doctrees/nbsphinx/examples_chap_02_15_1.png new file mode 100644 index 0000000..69322d6 Binary files /dev/null and b/.doctrees/nbsphinx/examples_chap_02_15_1.png differ diff --git a/.doctrees/nbsphinx/examples_chap_02_17_1.png b/.doctrees/nbsphinx/examples_chap_02_17_1.png new file mode 100644 index 0000000..8cbb4fa Binary files /dev/null and b/.doctrees/nbsphinx/examples_chap_02_17_1.png differ diff --git a/.doctrees/nbsphinx/examples_chap_02_19_1.png b/.doctrees/nbsphinx/examples_chap_02_19_1.png new file mode 100644 index 0000000..989443f Binary files /dev/null and b/.doctrees/nbsphinx/examples_chap_02_19_1.png differ diff --git a/.doctrees/nbsphinx/examples_chap_02_5_1.png b/.doctrees/nbsphinx/examples_chap_02_5_1.png new file mode 100644 index 0000000..5610452 Binary files /dev/null and b/.doctrees/nbsphinx/examples_chap_02_5_1.png differ diff --git a/.doctrees/nbsphinx/examples_chap_02_7_0.png b/.doctrees/nbsphinx/examples_chap_02_7_0.png new file mode 100644 index 0000000..ba27eaf Binary files /dev/null and b/.doctrees/nbsphinx/examples_chap_02_7_0.png differ diff --git a/.doctrees/nbsphinx/examples_chap_02_8_1.png b/.doctrees/nbsphinx/examples_chap_02_8_1.png new file mode 100644 index 0000000..d4ef189 Binary files /dev/null and b/.doctrees/nbsphinx/examples_chap_02_8_1.png differ diff --git a/.doctrees/nbsphinx/examples_chap_03_11_1.png b/.doctrees/nbsphinx/examples_chap_03_11_1.png new file mode 100644 index 0000000..e52ef24 Binary files /dev/null and b/.doctrees/nbsphinx/examples_chap_03_11_1.png differ diff --git a/.doctrees/nbsphinx/examples_chap_03_13_1.png b/.doctrees/nbsphinx/examples_chap_03_13_1.png new file mode 100644 index 0000000..010396f Binary files /dev/null and b/.doctrees/nbsphinx/examples_chap_03_13_1.png differ diff --git a/.doctrees/nbsphinx/examples_chap_03_18_0.png b/.doctrees/nbsphinx/examples_chap_03_18_0.png new file mode 100644 index 0000000..6994359 Binary files /dev/null and b/.doctrees/nbsphinx/examples_chap_03_18_0.png differ diff --git a/.doctrees/nbsphinx/examples_chap_03_21_0.png b/.doctrees/nbsphinx/examples_chap_03_21_0.png new file mode 100644 index 0000000..1e8a6ab Binary files /dev/null and b/.doctrees/nbsphinx/examples_chap_03_21_0.png differ diff --git a/.doctrees/nbsphinx/examples_chap_03_6_1.png b/.doctrees/nbsphinx/examples_chap_03_6_1.png new file mode 100644 index 0000000..132e61b Binary files /dev/null and b/.doctrees/nbsphinx/examples_chap_03_6_1.png differ diff --git a/.doctrees/nbsphinx/examples_chap_03_9_0.png b/.doctrees/nbsphinx/examples_chap_03_9_0.png new file mode 100644 index 0000000..d36f636 Binary files /dev/null and b/.doctrees/nbsphinx/examples_chap_03_9_0.png differ diff --git a/.doctrees/nbsphinx/examples_chap_04_16_1.png b/.doctrees/nbsphinx/examples_chap_04_16_1.png new file mode 100644 index 0000000..7c11ac4 Binary files /dev/null and b/.doctrees/nbsphinx/examples_chap_04_16_1.png differ diff --git a/.doctrees/nbsphinx/examples_chap_04_19_0.png b/.doctrees/nbsphinx/examples_chap_04_19_0.png new file mode 100644 index 0000000..c4d20d3 Binary files /dev/null and b/.doctrees/nbsphinx/examples_chap_04_19_0.png differ diff --git a/.doctrees/nbsphinx/examples_chap_04_24_1.png b/.doctrees/nbsphinx/examples_chap_04_24_1.png new file mode 100644 index 0000000..004dfbe Binary files /dev/null and b/.doctrees/nbsphinx/examples_chap_04_24_1.png differ diff --git a/.doctrees/nbsphinx/examples_chap_04_25_0.png b/.doctrees/nbsphinx/examples_chap_04_25_0.png new file mode 100644 index 0000000..8d42e74 Binary files /dev/null and b/.doctrees/nbsphinx/examples_chap_04_25_0.png differ diff --git a/.doctrees/nbsphinx/examples_chap_04_6_0.png b/.doctrees/nbsphinx/examples_chap_04_6_0.png new file mode 100644 index 0000000..c3213ac Binary files /dev/null and b/.doctrees/nbsphinx/examples_chap_04_6_0.png differ diff --git a/.doctrees/nbsphinx/examples_chap_04_9_1.png b/.doctrees/nbsphinx/examples_chap_04_9_1.png new file mode 100644 index 0000000..aee42ac Binary files /dev/null and b/.doctrees/nbsphinx/examples_chap_04_9_1.png differ diff --git a/.doctrees/nbsphinx/examples_quick_guide_igraph_22_0.png b/.doctrees/nbsphinx/examples_quick_guide_igraph_22_0.png new file mode 100644 index 0000000..a452893 Binary files /dev/null and b/.doctrees/nbsphinx/examples_quick_guide_igraph_22_0.png differ diff --git a/.doctrees/nbsphinx/examples_quick_guide_networkx_13_0.png b/.doctrees/nbsphinx/examples_quick_guide_networkx_13_0.png new file mode 100644 index 0000000..27ff4ae Binary files /dev/null and b/.doctrees/nbsphinx/examples_quick_guide_networkx_13_0.png differ diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/_images/examples_chap_02_10_2.png b/_images/examples_chap_02_10_2.png new file mode 100644 index 0000000..05eb9d5 Binary files /dev/null and b/_images/examples_chap_02_10_2.png differ diff --git a/_images/examples_chap_02_12_1.png b/_images/examples_chap_02_12_1.png new file mode 100644 index 0000000..ce326cd Binary files /dev/null and b/_images/examples_chap_02_12_1.png differ diff --git a/_images/examples_chap_02_15_1.png b/_images/examples_chap_02_15_1.png new file mode 100644 index 0000000..69322d6 Binary files /dev/null and b/_images/examples_chap_02_15_1.png differ diff --git a/_images/examples_chap_02_17_1.png b/_images/examples_chap_02_17_1.png new file mode 100644 index 0000000..8cbb4fa Binary files /dev/null and b/_images/examples_chap_02_17_1.png differ diff --git a/_images/examples_chap_02_19_1.png b/_images/examples_chap_02_19_1.png new file mode 100644 index 0000000..989443f Binary files /dev/null and b/_images/examples_chap_02_19_1.png differ diff --git a/_images/examples_chap_02_5_1.png b/_images/examples_chap_02_5_1.png new file mode 100644 index 0000000..5610452 Binary files /dev/null and b/_images/examples_chap_02_5_1.png differ diff --git a/_images/examples_chap_02_7_0.png b/_images/examples_chap_02_7_0.png new file mode 100644 index 0000000..ba27eaf Binary files /dev/null and b/_images/examples_chap_02_7_0.png differ diff --git a/_images/examples_chap_02_8_1.png b/_images/examples_chap_02_8_1.png new file mode 100644 index 0000000..d4ef189 Binary files /dev/null and b/_images/examples_chap_02_8_1.png differ diff --git a/_images/examples_chap_03_11_1.png b/_images/examples_chap_03_11_1.png new file mode 100644 index 0000000..e52ef24 Binary files /dev/null and b/_images/examples_chap_03_11_1.png differ diff --git a/_images/examples_chap_03_13_1.png b/_images/examples_chap_03_13_1.png new file mode 100644 index 0000000..010396f Binary files /dev/null and b/_images/examples_chap_03_13_1.png differ diff --git a/_images/examples_chap_03_18_0.png b/_images/examples_chap_03_18_0.png new file mode 100644 index 0000000..6994359 Binary files /dev/null and b/_images/examples_chap_03_18_0.png differ diff --git a/_images/examples_chap_03_21_0.png b/_images/examples_chap_03_21_0.png new file mode 100644 index 0000000..1e8a6ab Binary files /dev/null and b/_images/examples_chap_03_21_0.png differ diff --git a/_images/examples_chap_03_6_1.png b/_images/examples_chap_03_6_1.png new file mode 100644 index 0000000..132e61b Binary files /dev/null and b/_images/examples_chap_03_6_1.png differ diff --git a/_images/examples_chap_03_9_0.png b/_images/examples_chap_03_9_0.png new file mode 100644 index 0000000..d36f636 Binary files /dev/null and b/_images/examples_chap_03_9_0.png differ diff --git a/_images/examples_chap_04_16_1.png b/_images/examples_chap_04_16_1.png new file mode 100644 index 0000000..7c11ac4 Binary files /dev/null and b/_images/examples_chap_04_16_1.png differ diff --git a/_images/examples_chap_04_19_0.png b/_images/examples_chap_04_19_0.png new file mode 100644 index 0000000..c4d20d3 Binary files /dev/null and b/_images/examples_chap_04_19_0.png differ diff --git a/_images/examples_chap_04_24_1.png b/_images/examples_chap_04_24_1.png new file mode 100644 index 0000000..004dfbe Binary files /dev/null and b/_images/examples_chap_04_24_1.png differ diff --git a/_images/examples_chap_04_25_0.png b/_images/examples_chap_04_25_0.png new file mode 100644 index 0000000..8d42e74 Binary files /dev/null and b/_images/examples_chap_04_25_0.png differ diff --git a/_images/examples_chap_04_6_0.png b/_images/examples_chap_04_6_0.png new file mode 100644 index 0000000..c3213ac Binary files /dev/null and b/_images/examples_chap_04_6_0.png differ diff --git a/_images/examples_chap_04_9_1.png b/_images/examples_chap_04_9_1.png new file mode 100644 index 0000000..aee42ac Binary files /dev/null and b/_images/examples_chap_04_9_1.png differ diff --git a/_images/examples_quick_guide_igraph_22_0.png b/_images/examples_quick_guide_igraph_22_0.png new file mode 100644 index 0000000..a452893 Binary files /dev/null and b/_images/examples_quick_guide_igraph_22_0.png differ diff --git a/_images/examples_quick_guide_networkx_13_0.png b/_images/examples_quick_guide_networkx_13_0.png new file mode 100644 index 0000000..27ff4ae Binary files /dev/null and b/_images/examples_quick_guide_networkx_13_0.png differ diff --git a/_modules/index.html b/_modules/index.html new file mode 100644 index 0000000..4314be9 --- /dev/null +++ b/_modules/index.html @@ -0,0 +1,81 @@ + + + + + + + Overview: module code — netsci 0.1.dev1+g157bd64 documentation + + + + + + + + + + + + +
+
+
+
+ +

All modules for which code is available

+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/_modules/netsci/analysis.html b/_modules/netsci/analysis.html new file mode 100644 index 0000000..55e139d --- /dev/null +++ b/_modules/netsci/analysis.html @@ -0,0 +1,320 @@ + + + + + + + netsci.analysis — netsci 0.1.dev1+g157bd64 documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for netsci.analysis

+import itertools
+import numpy as np
+import networkx as nx
+
+
+
+[docs] +def find_sap(G, start, target, path=None): + + """ + Finds all self-avoiding paths (SAPs) in a given graph from a start node to a target node. + A self-avoiding path is a path that does not revisit any node. + + Parameters + ---------- + graph : NetworkX graph + The input graph where SAPs will be found. + start : str or int + The node where the search for SAPs starts. + target : str or int + The node where the search for SAPs ends. + path : list, optional + Internal parameter used to keep track of the current path during the search. + + Yields + ------ + list + A self-avoiding path from the start node to the target node. + + Examples + -------- + >>> import networkx as nx + >>> G = nx.Graph() + >>> edges = [('A', 'B'), ('A', 'C'), ('B', 'D'), ('B', 'E'), ('C', 'F'), ('E', 'F')] + >>> G.add_edges_from(edges) + >>> start_node = 'A' + >>> target_node = 'F' + >>> all_saps = list(find_sap(G, start_node, target_node)) + >>> for path in all_saps: + >>> print("->".join(path)) + """ + + if path is None: + path = [] + + if len(G.nodes()) == 0: + return [] + + path.append(start) + + if start == target: + yield path[:] + else: + for neighbor in G.neighbors(start): + if neighbor not in path: + yield from find_sap(G, neighbor, target, path) + + path.pop()
+ + + +
+[docs] +def is_hamiltonian_path(G, path): + ''' + Check if a given path is a Hamiltonian path in a graph. + + Parameters: + ----------- + G : networkx.Graph, networkx.DiGraph) + The input graph. + path : list of str or int + list of nodes in the path. + + Returns: + ----------- + bool : + True if the path is a Hamiltonian path, otherwise False + + ''' + return all(G.has_edge(path[i], path[i + 1]) for i in range(len(path) - 1))
+ + + +
+[docs] +def find_hamiltonian_path(G): + ''' + find the Hamiltonian path in given graph. + + Parameters + ----------- + G: nx.Graph or nx.DiGraph + input graph. + + Returns + value : list of nodes in Hamiltonian path if exists, otherwise None. + + ''' + nodes = list(G.nodes()) + for perm in itertools.permutations(nodes): + if is_hamiltonian_path(G, perm): + return perm + return None
+ + + +
+[docs] +def check_connectivity(G): + ''' + Check if the graph is connected. + + Parameters + -------------- + G : networkx.Graph, networkx.DiGraph + The input graph. + + Returns + ------------ + + connectivity: (str) + for directed graphs, it returns + - "weakly connected" + - "strongly connected" + - "disconnected". + for undirected graphs, + - "connected" + - "disconnected". + ''' + + is_directed = isinstance(G, nx.DiGraph) + + if is_directed: + if nx.is_weakly_connected(G): + return "weakly connected" + elif nx.is_strongly_connected(G): + return "strongly connected" + else: + return "disconnected" + else: + if nx.is_connected(G): + return "connected" + else: + return "disconnected"
+ + +
+[docs] +def graph_info(G, quick=True): + """ + Generate various graph information. + + Parameters + ------------- + G : (networkx.Graph, networkx.DiGraph) + The input graph for which the information is to be generated. + + + """ + is_directed = isinstance(G, nx.DiGraph) + + # number_of_triangles = #TODO + + connectivity = check_connectivity(G) + + if not quick: + if connectivity == "strongly connected" or connectivity == "connected": + diameter = nx.diameter(G) + else: + diameter = -1 + + print("Graph information") + print(f"{'Directed':40s}: {str(is_directed):>20s}") + print(f"{'Number of nodes':40s}: {len(G.nodes()):20d}") + print(f"{'Number of edges':40s}: {len(G.edges()):20d}") + print(f"{'Average degree':40s}: {sum(dict(G.degree).values()) / len(G.nodes):20.4f}") + print(f"{'Connectivity':40s}: {connectivity:>20s}") + if not quick: + print(f"{'Diameter':40s}: {diameter:20d}") + print(f"{'Average clustering coefficient':40s}: {nx.average_clustering(G):20.6f}")
+ + + # return { + # "Directed": is_directed, + # "Number of nodes": len(G.nodes()), + # "Number of edges": len(G.edges()), + # "average_degree": sum(dict(G.degree).values()) / len(G.nodes), + # "diameter": diameter, + # "average clustering coefficient": nx.average_clustering(G), + + # } + +
+[docs] +def longest_shortest_path(G): + """ + Calculate the longest shortest path (diameter) in a given graph. + + Parameters + ------------- + G (networkx.Graph or networkx.DiGraph): + The input graph, which can be directed or undirected. + The graph should be connected, otherwise the diameter will not be defined. + + Returns + --------- + value : int, float + The longest shortest path (diameter) in the graph. + If the graph is empty, returns 0. + If the graph is not connected, returns float('inf'). + """ + path_lengths = dict(nx.all_pairs_shortest_path_length(G)) + diameter = max(max(lengths.values()) for lengths in path_lengths.values()) + + return diameter
+ + + +
+[docs] +def average_degree(G): + """ + Calculate the average degree of a graph. + + Parameters + ------------- + G (networkx.Graph or networkx.DiGraph): + The input graph, which can be directed or undirected. + + Returns + ----------- + vlaue: float + The average degree of the graph. + """ + + degrees = [d for n, d in G.degree()] + average_degree = sum(degrees) / len(degrees) + return average_degree
+ +
+ +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/_modules/netsci/plot.html b/_modules/netsci/plot.html new file mode 100644 index 0000000..c6988a5 --- /dev/null +++ b/_modules/netsci/plot.html @@ -0,0 +1,181 @@ + + + + + + + netsci.plot — netsci 0.1.dev1+g157bd64 documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for netsci.plot

+import itertools
+import numpy as np
+import networkx as nx
+import matplotlib.pyplot as plt
+
+
+
+
+[docs] +def plot_graph(G, **kwargs): + """ + Plots a NetworkX graph with customizable options. + + Parameters + ---------- + G : NetworkX graph + A NetworkX graph object (e.g., nx.Graph, nx.DiGraph). + **kwargs : keyword arguments + Additional keyword arguments to customize the plot. These can include: + + node_color : str or list, optional + Color of the nodes (can be a single color or a list of colors). + node_size : int or list, optional + Size of the nodes (single value or list of sizes). + edge_color : str or list, optional + Color of the edges (can be a single color or a list of colors). + width : float, optional + Width of the edges. + with_labels : bool, optional + Whether to draw node labels or not. + font_size : int, optional + Size of the font for node labels. + font_color : str, optional + Color of the font for node labels. + title : str, optional + Title of the plot. + seed : int, optional + Seed for the random layout algorithm. + figsize : tuple, optional + Size of the figure. + ax: axes object + Axes object to draw the plot on. Defaults to None, which will create a new figure. + pos: object, optional + Graph layout (e.g., nx.spring_layout, nx.circular_layout), nx.kamada_kaway_layout(G). + Defaults to nx.spring_layout(G). + + """ + + # Extracting optional arguments + node_color = kwargs.get("node_color", "lightblue") + node_size = kwargs.get("node_size", 300) + edge_color = kwargs.get("edge_color", "black") + width = kwargs.get("width", 1.0) + with_labels = kwargs.get("with_labels", True) + font_size = kwargs.get("font_size", 12) + font_color = kwargs.get("font_color", "black") + title = kwargs.get("title", None) + seed = kwargs.get("seed", None) + edge_labels = kwargs.get("edge_labels", None) + figsize = kwargs.get("figsize", (4, 4)) + ax = kwargs.get("ax", None) + pos = kwargs.get("pos", None) + + if ax is None: + fig, ax = plt.subplots(1, figsize=figsize) + ax.axis("off") + + if seed is not None: + np.random.seed(seed) + + if pos is None: + pos = nx.spring_layout( + G, seed=seed + ) + + # Draw the network + nx.draw( + G, + pos, + node_color=node_color, + node_size=node_size, + edge_color=edge_color, + width=width, + with_labels=with_labels, + font_size=font_size, + font_color=font_color, + ax=ax + ) + + if edge_labels is not None: + nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels) + + # Set the plot title + if title is not None: + plt.title(title) + + return ax
+ + + # Show the plot + # plt.show() +
+ +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/_modules/netsci/utils.html b/_modules/netsci/utils.html new file mode 100644 index 0000000..94fcd69 --- /dev/null +++ b/_modules/netsci/utils.html @@ -0,0 +1,534 @@ + + + + + + + netsci.utils — netsci 0.1.dev1+g157bd64 documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for netsci.utils

+import os
+import gzip
+import json
+import numpy as np
+import networkx as nx
+from numpy import power
+from os.path import join
+from cycler import cycler
+from scipy.special import zeta
+from scipy.optimize import bisect
+
+
+try:
+    import powerlaw
+except:
+    pass
+
+
+
+[docs] +def get_adjacency_list(G): + """ + Generate an adjacency list representation of a given graph. + + Parameters + ------------- + G (networkx.Graph, networkx.DiGraph): + The input graph for which the adjacency list is to be generated. + + Returns + --------- + value: dict + A dictionary where each key is a node in the graph and the corresponding value is a list of neighboring nodes. + """ + return {n: list(neighbors) for n, neighbors in G.adj.items()}
+ + + +# def _load_graph(file_path, kind, url): + +# path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +# path = os.path.join(path, 'netsci/datasets') + +# if not os.path.isfile(file_path): +# os.system(f"wget -P {path} {url}") + +# if os.path.isfile(file_path): +# os.system(f"gunzip -k {file_path}") + +# with gzip.open(file_path, 'rt') as f: +# G = nx.read_adjlist(file_path, create_using=kind) + +# os.remove(file_path[:-3]) +# return G + + +
+[docs] +def download_sample_dataset(): + url = "https://networksciencebook.com/translations/en/resources/networks.zip" + path = get_sample_dataset_path() + path_zip = join(path, "networks.zip") + file_path = join(path, "collaboration.edgelist.txt") + if not os.path.isfile(path_zip): + os.system(f"wget -P {path} {url}") + else: + print(f"File {path_zip} already exists.") + + if not os.path.isfile(file_path): + if os.path.isfile(path_zip): + os.system(f"unzip {path_zip} -d {path}") + print(f"Extracted {path_zip} to {path}")
+ + + + +def _load_graph(file_path, url, directed, verbose=False): + + path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + path = join(path, "netsci/datasets") + path_zip = join(path, "networks.zip") + + if not os.path.isfile(file_path): + if not os.path.isfile(path_zip): + os.system(f"wget -P {path} {url}") + + if not os.path.isfile(file_path): + if os.path.isfile(path_zip): + os.system(f"unzip {path_zip} -d {path}") + + # Step 1: Read the adjacency list from the file + edges = [] + with open(file_path, "r") as file: + for line in file: + if line.startswith("#"): + continue # Skip comments + A, B = map(int, line.split()) + edges.append((A, B)) + + # Step 2: Create the graph + G = nx.DiGraph() + G.add_edges_from(edges) + + # Step 3: Determine if the graph is directed + # is_directed = False + # for A, B in edges: + # if not G.has_edge(B, A): + # is_directed = True + # break + + if not directed: + G = G.to_undirected() + return G + + +
+[docs] +def load_sample_graph(name, verbose=False): + """ + Load a graph and return it as a NetworkX graph. + + Parameters + -------------- + name: str + The name of the graph. Get names from `netsci.utils.show_sample_graphs()`. + verbose: bool, optional + If True, print information about the loaded graph. Default is True. + + Returns + ----------- + value: networkx.Graph + Loaded graph. + """ + + path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + path = os.path.join(path, "netsci/datasets/") + + with open(os.path.join(path, "sample_graphs.json"), "r") as f: + data = json.load(f) + if name in list(data.keys()): + filename = data[name]["filename"] + file_path = os.path.join(path, f"{filename}") + directed = data[name]["directed"] + G = _load_graph( + file_path, url=data[name]["url"], directed=directed, verbose=verbose + ) + if verbose: + print(f"Successfully loaded {name}") + print("================================") + print(data[name]["description"]) + return G
+ + + +
+[docs] +def list_sample_graphs(): + """ + make a list of available real world graphs on datasets + """ + + path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + path = os.path.join(path, "netsci/datasets") + # names = [f[:-7] for f in os.listdir(path) if f.endswith('.txt.gz')] + # read json file sample_graphs.json + + with open(os.path.join(path, "sample_graphs.json"), "r") as f: + data = json.load(f) + + return data
+ + + +
+[docs] +def generate_power_law_dist(N: int, a: float, xmin: float): + """ + generate power law random numbers p(k) ~ x^(-a) for a>1 + + Parameters + ----------- + N: + is the number of random numbers + a: + is the exponent + xmin: + is the minimum value of distribution + + Returns + ----------- + value: np.array + powerlaw distribution + """ + + # generates random variates of power law distribution + vrs = powerlaw.Power_Law(xmin=xmin, parameters=[a]).generate_random(N) + + return vrs
+ + + +
+[docs] +def generate_power_law_dist_bounded( + N: int, a: float, xmin: float, xmax: float, seed: int = -1 +): + """ + Generate a power law distribution of floats p(k) ~ x^(-a) for a>1 + which is bounded by xmin and xmax + + parameters : + N: int + number of samples in powerlaw distribution (pwd). + a: + exponent of the pwd. + xmin: + min value in pwd. + xmax: + max value in pwd. + """ + + from numpy.random import rand, randint + from numpy import power + + data = np.zeros(N) + x0p = power(xmin, (-a + 1.0)) + x1p = power(xmax, (-a + 1.0)) + alpha = 1.0 / (-a + 1.0) + + for i in range(N): + r = rand() + data[i] = power((x1p - x0p) * r + x0p, alpha) + return data
+ + + +
+[docs] +def generate_power_law_discrete( + N: int, a: float, xmin: float, xmax: float, seed: int = -1 +): + """ + Generate a power law distribution of p(k) ~ x^(-a) for a>1, + with discrete values. + + Parameters: + ----------- + N: int + Number of samples in the distribution. + a: float + Exponent of the power law distribution. + xmin: float + Minimum value in the power law distribution. + xmax: float + Maximum value in the power law distribution. + seed :int, optional + Seed for reproducibility. Defaults to -1. + + Returns: + ------- + np.array + Power law distribution with discrete values. + """ + + if seed != -1: + np.random.seed(seed) + + if seed != None: + np.random.seed(seed) + + X = np.zeros(N, dtype=int) + x1p = power(xmax, (-a + 1.0)) + x0p = power(xmin, (-a + 1.0)) + alpha = 1.0 / (-a + 1.0) + + for i in range(N): + r = np.random.rand() + X[i] = int(np.round(power(((x1p - x0p) * r + x0p), alpha))) + + # sum of degrees should be positive + from random import randint + + if (np.sum(X) % 2) != 0: + i = randint(0, N - 1) + X[i] = X[i] + 1 + + return X
+ + + +
+[docs] +def tune_min_degree(N: int, a: float, xmin: int, xmax: int, max_iteration: int = 100): + """ + Find the minimum degree value of a power law graph that results in a connected graph + """ + + for i in range(max_iteration): + seq = generate_power_law_discrete(N, a, xmin, xmax, seed=i) + if np.sum(seq) % 2 != 0: + raise ValueError("The sum of degrees should be even") + G = nx.configuration_model(seq) + G.remove_edges_from(G.selfloop_edges()) + G = nx.Graph(G) + seq1 = np.asarray([deg for (node, deg) in G.degree_iter()]) + avg_degree = np.mean(seq1) + + if nx.is_connected(G): + break + if i == (max_iteration - 1): + raise ValueError("Unable to find a connected graph with the given parameters") + return avg_degree, G
+ + + +
+[docs] +def make_powerlaw_graph( + N: int, + a: float, + avg_degree: int, + xmin: int = 1, + xmax: int = 10000, + seed: int = -1, + xtol=0.01, + degree_interval=5.0, + plot=False, + **kwargs, +): + """ + make a powerlaw graph with the given parameters + + Parameters + ---------- + N: + number of nodes + a: float + exponent of the power law distribution + avg_degree: + expected average degree + xmin: int, optional + minimum value in the power law distribution. Default is 1. + xmax: int, optional + maximum value in the power law distribution. Default is 10000. + seed: int, optional + Seed for reproducibility. Default is -1. + xtol: float, optional + tolerance for bisection method. Default is 0.01. + degree_interval: float, optional + interval for bisection method. Default is 5.0. + plot: bool, optional + If True, plot the power law distribution. Default is False. + kwargs: obtional + additional keyword arguments for plot_pdf function. + + """ + + color = kwargs.get("color", "k") + linestyle = kwargs.get("linestyle", "-") + lw = kwargs.get("lw", 2) + + xmin_tuned, G = bisect( + lambda x: tune_min_degree(N, a, x, xmax) - avg_degree, + xmin, + xmin + degree_interval, + xtol=xtol, + ) + sample_seq = np.asarray([deg for (node, deg) in G.degree_iter()]) + avg_degree = np.mean(sample_seq) + + fit = powerlaw.Fit(sample_seq, discrete=True) + if plot: + ax = fit.plot_pdf(linewidth=2, label=str("pdf, %.2f" % a)) + fit.power_law.plot_pdf(c=color, linestyle=linestyle, lw=lw, ax=ax) + + return { + "G": G, + "avg_degree": avg_degree, + "xmin_tuned": xmin_tuned, + "fit": fit, + "ax": ax, + }
+ + + +
+[docs] +def generate_power_law_discrete_its( + alpha: float, k_min: int, k_max: int, size: int = 1 +): + """ + Generates the power law discrete distributions using the inverse transform sampling method. + + References + ----------- + + Devroye, L. (1986). "Non-Uniform Random Variate Generation." Springer-Verlag, New York. + + Parameters + ---------- + alpha : + Power law exponent. + k_min : + Minimum degree. + k_max : + Maximum degree. + size : + Number of samples to generate. Defaults to 1. + + Returns + ------- + np.array: + Array of generated power law discrete distributions. + + + Examples + --------- + + >>> gamma = 2.5 # Power-law exponent + >>> k_min = 1 # Minimum value of k + >>> k_max = 1000 # Maximum value of k + >>> size = 10000 # Number of samples + >>> samples = power_law_discrete(gamma, k_min, k_max, size) + """ + + # Calculate the normalization constant + norm = zeta(alpha, k_min) - zeta(alpha, k_max + 1) + + # Generate uniform random numbers + u = np.random.random(size=size) + + # Initialize the result array + result = np.zeros(size, dtype=int) + + # Inverse transform sampling + for i in range(size): + cdf = 0 + for k in range(k_min, k_max + 1): + cdf += (k**-alpha) / norm + if u[i] <= cdf: + result[i] = k + break + + return result
+ + + +
+[docs] +def get_sample_dataset_path(): + path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + path = os.path.join(path, "netsci/datasets/") + return path
+ +
+ +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/_sources/examples/chap_02.ipynb.txt b/_sources/examples/chap_02.ipynb.txt new file mode 100644 index 0000000..bd2facf --- /dev/null +++ b/_sources/examples/chap_02.ipynb.txt @@ -0,0 +1,848 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# [Chapter 2](https://github.com/Ziaeemehr/netsci/blob/main/docs/examples/chap_02.ipynb)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### **Graph Theory**\n", + "\n", + "Code by : Abolfazl Ziaeemehr \n", + "- https://github.com/Ziaeemehr\n", + "\n", + "\"Open" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# uncomment and run this line to install the package on colab\n", + "# !pip install \"git+https://github.com/Ziaeemehr/netsci.git\" -q" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import netsci\n", + "import numpy as np\n", + "import networkx as nx\n", + "from tqdm import tqdm\n", + "import matplotlib.pyplot as plt\n", + "from netsci.plot import plot_graph\n", + "from netsci.analysis import find_sap, find_hamiltonian_path" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "np.random.seed(0)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Degrees: {0: 2, 1: 2, 2: 2, 3: 5, 4: 3, 5: 1, 6: 3, 7: 2}\n", + "Average degree: 2.5\n", + "Adjacency matrix:\n", + " [[0 0 0 1 1 0 0 0]\n", + " [0 0 1 0 0 0 1 0]\n", + " [0 1 0 1 0 0 0 0]\n", + " [1 0 1 0 0 1 1 1]\n", + " [1 0 0 0 0 0 1 1]\n", + " [0 0 0 1 0 0 0 0]\n", + " [0 1 0 1 1 0 0 0]\n", + " [0 0 0 1 1 0 0 0]]\n", + "Edges: [(0, 3), (0, 4), (1, 2), (1, 6), (2, 3), (3, 5), (3, 6), (3, 7), (4, 6), (4, 7)]\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# make a random graph with n nodes and p% probability of edge connection\n", + "num_nodes = 8\n", + "probability = .4\n", + "seed = 2\n", + "graph = nx.gnp_random_graph(num_nodes, probability, seed=2, directed=False)\n", + "\n", + "# degree distribution\n", + "degrees = dict(graph.degree())\n", + "print(\"Degrees:\", degrees)\n", + "\n", + "# calculate the average degree\n", + "average_degree = np.mean(list(degrees.values()))\n", + "print(\"Average degree:\", average_degree)\n", + "\n", + "# adjacency matrix\n", + "adjacency_matrix = nx.to_numpy_array(graph).astype(int)\n", + "print(\"Adjacency matrix:\\n\", adjacency_matrix)\n", + "\n", + "# edges\n", + "edges = list(graph.edges())\n", + "print(\"Edges:\", edges)\n", + "\n", + "# plot the graph\n", + "plot_graph(graph, node_size=1000,\n", + " node_color='darkred',\n", + " edge_color='gray',\n", + " figsize=(5, 5),\n", + " title=\"Random Graph with {} nodes and {}% edge connection\".format(num_nodes, probability*100))\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Shortest path from 3 to 0 : [3, 0]\n", + "Diameter: 3\n", + "Average shortest path length: 1.82\n" + ] + } + ], + "source": [ + "# shortest path, find distance between two nodes\n", + "source = np.random.randint(0, len(graph)) # random source node\n", + "target = np.random.randint(0, len(graph)) # random target node\n", + "shortest_path = nx.shortest_path(graph, source, target)\n", + "print(\"Shortest path from\", source, \"to\", target, \":\", shortest_path)\n", + "\n", + "# diameter : maximal shortest path length\n", + "if nx.is_connected(graph):\n", + " diameter = nx.diameter(graph)\n", + " print(\"Diameter:\", diameter)\n", + " \n", + "# average shortest path length\n", + "avg_shortest_path_length = nx.average_shortest_path_length(graph)\n", + "print(f\"Average shortest path length: {avg_shortest_path_length:.2f}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfwAAAGpCAYAAABoEYRXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB34klEQVR4nO3deXxU1dnA8d+dTPZ9I4Q1yJKwhC1AQEBZRFCQxYoCraLFreLSvvZVwa1WAbW+2paitRVbtaDgliBSlU0EJGyyI4EgWyAJWUlC1smc948wIyELgdzJncw8388nH8idO+c+M5mZZ+655zxHU0ophBBCCOHSTEYHIIQQQgjHk4QvhBBCuAFJ+EIIIYQbkIQvhBBCuAFJ+EIIIYQbkIQvhBBCuAFJ+EIIIYQbkIQvhBBCuAFJ+EIIIYQbuKKE/+9//xtN0+w/ZrOZ6Ohopk2bxpEjRxwV42X94Q9/QNM0w45/qW+//bbG8+Tl5UVkZCRDhw7l6aef5sSJE/Xed+/evcyaNYvOnTvj6+uLr68vXbt25YEHHmDHjh3N+Chqi4mJYcKECc16TNtr7vjx4/ZtS5cu5c9//nOtfY8fP46mabz22mtXfby0tDTuvPNOOnTogK+vL507d+Z//ud/yM3Nveo2HSEmJoa7777b6DAcoq6/eWM888wzaJpGr1696rx9zZo1DBkyBD8/PyIiIrj77rs5e/Zso9v/6KOP6Nu3Lz4+PrRp04bf/va3FBcX19jn1KlT3HzzzQQFBdG9e3eSk5NrtfPxxx8THh5Odnb2FT2+q2X7PPr222+b5XjuqqSkhD/84Q91Ps9X+5rW21Wd4f/rX/9iy5YtrFmzhocffpgVK1YwbNgw8vPz9Y6vRZs/fz5btmxh/fr1LF68mBEjRvDuu+/SvXt3lixZUmv/t99+m4SEBLZu3cpjjz3GypUr+fLLL/ntb3/LgQMHGDhwIEePHjXgkRhn/PjxbNmyhejoaPu2+hJ+U2VnZzN48GA2b97Miy++yKpVq5g9ezb//Oc/ueGGG7BarbofU+hj9+7dvPbaa0RFRdV5+4YNG7jpppuIiooiOTmZv/zlL6xZs4bRo0dTXl5+2faXLFnC9OnTGThwIP/97395/vnn+fe//82tt95aY7+ZM2dy7tw5PvnkE6ZMmcLtt99e4z177tw5HnvsMV577TUiIyOb9qCFUykpKeGFF16oM+HX9TlmCHUF/vWvfylAbd++vcb2F154QQHq3XffvZLmdPP888+rK3woDrV+/XoFqI8//rjWbbm5uapfv37KbDarvXv32rdv2rRJmUwmdcstt6jy8vI6212+fLk6ffp0g8c+f/5804JvQMeOHdX48eMd1n5jjR8/XnXs2LHW9mPHjilA/elPf7qqdv/5z38qQK1Zs6bG9vnz5ytA/fDDD1fVriN07NhRzZw50+gwHML2OXPs2LFG7V9ZWan69u2rHn30UXX99dernj171tpn4MCBqkePHqqystK+bfPmzQpQb775ZoPtWywWFR0drW688cYa25csWaIAtWrVKqVU9XtP0zT1/fff2/fp2rWreuutt+y/P/DAA2rEiBGNelx6sX0erV+/vlmP626ys7MVoJ5//nmjQ6mXLtfwBwwYAEBWVpZ9W1lZGY8//jh9+/YlODiYsLAwhgwZUmcXl6ZpPPzww3zwwQd0794dPz8/+vTpw8qVK2vt++WXX9K3b1+8vb3p1KlTvd23ZWVlzJkzh06dOuHl5UXbtm2ZPXs2BQUFNfazdVOvXLmSfv364evrS/fu3e3H/ve//0337t3x9/dn0KBBTe5WDwsL4+2338ZisfDGG2/Yt8+fPx8PDw/efvttvLy86rzv1KlTadOmjf33u+++m4CAAPbt28eNN95IYGAgo0ePBmD16tVMmjSJdu3a4ePjQ5cuXXjggQfIycmp0abtcsiuXbu49dZbCQoKIjg4mF/96lf1djl+9dVX9O/fH19fX+Li4nj33Xcv+7gHDhzI+PHja2yLj49H0zS2b99u3/bZZ5+haRr79u0DaneFjRgxgi+//JITJ07UuGxyqddff51OnToREBDAkCFDSElJuWyMnp6eAAQHB9fYHhISAoCPj0+D97c9lwcOHGD69OkEBwcTFRXFr3/9a86dO1dj38a+PisrK3niiSdo3bo1fn5+DBs2jG3bttV5/MzMTB544AHatWuHl5cXnTp14oUXXsBisdTY76233qJPnz4EBAQQGBhIXFwcc+fOvdzTwwsvvEBiYiJhYWEEBQXRv39/Fi9ejLpk/S3be6oxr5OUlBSGDh1q7yafM2cOlZWVl43lYi+//DJ5eXnMmzevzttPnz7N9u3bufPOOzGbzfbt1157Ld26dePzzz9vsP2UlBQyMjK45557amyfOnUqAQEB9vtXVFSglMLf39++T0BAAGVlZQB8//33vP/++7z99ttX9PgAjhw5wowZM2jVqhXe3t50796dRYsW1drv0KFDjBs3zn7Z4sEHH6SoqKjWfkop5s+fT8eOHfHx8WHAgAGsXr2aESNGMGLEiBr7FhYW8vvf/77Ga/W3v/0t58+fb1TsX331FaNHjyY4OBg/Pz+6d+/OggULauyzYsUK++WWwMBAxowZw5YtW2rscyXvryvJKY19bgsKCnj88ce55ppr8Pb2plWrVtx8880cOnSI48eP23tsXnjhBfvnku2yW31d+u+++y59+vTBx8eHsLAwpkyZwo8//lhjH9vnfFpaGjfffDMBAQG0b9+exx9/vFG9UzVcybeD+s7w//a3vylAffrpp/ZtBQUF6u6771YffPCBWrdunfrqq6/U73//e2UymdR7771X4/6AiomJUYMGDVLLly9Xq1atUiNGjFBms1kdPXrUvt+aNWuUh4eHGjZsmPrss8/Uxx9/rAYOHKg6dOhQ4wzfarWqsWPHKrPZrJ599ln1zTffqNdee035+/urfv36qbKyMvu+HTt2VO3atVO9evVSH374oVq1apVKTExUnp6e6rnnnlNDhw5Vn332mfr8889Vt27dVFRUlCopKWnweWroDN8mOjpade7cWSlVfQbh6+urhgwZ0mC7l5o5c6by9PRUMTExasGCBWrt2rXq66+/Vkop9dZbb6kFCxaoFStWqA0bNqj33ntP9enTR8XGxqqKigp7G7bekY4dO6r//d//VV9//bV6/fXX7c/VxfvanqsePXqo999/X3399ddq6tSpClAbNmxoMNannnpKBQQE2NvLzMxUgPL19VXz5s2z7/eb3/xGRUVF2X+/9GzvwIEDaujQoap169Zqy5Yt9h+lfj7Dj4mJUePGjVNJSUkqKSlJxcfHq9DQUFVQUNBgjAUFBapDhw7quuuuU/v371dFRUVqw4YNqkOHDuqWW2657N/D9lzGxsaq5557Tq1evVq9/vrrytvbW91zzz32/a7k9Tlz5kylaZr63//9X/XNN9+o119/XbVt21YFBQXVOMPPyMhQ7du3Vx07dlRvv/22WrNmjXrxxReVt7e3uvvuu+37ffjhhwpQjzzyiPrmm2/UmjVr1N///nf16KOPXvbx3X333Wrx4sVq9erVavXq1erFF19Uvr6+6oUXXqixX2NfJwcOHFB+fn6qR48e6sMPP1TJyclq7Nix9vdzY87wDxw4oLy9vdWXX36plFJ1nuF/9dVXCrDvc7HbbrtNRUdHN3iMv//97wpQBw4cqHXbgAEDarxv4+Li1F133aXy8vLU559/rkwmk9q6dauqqKhQPXv2VH/84x8v+5jqeozBwcEqPj5evf/+++qbb75Rjz/+uDKZTOoPf/iDfb/MzEzVqlUr1bZtW/Wvf/1LrVq1Sv3yl7+0P58Xn+HPmTNHAer+++9XX331lfrnP/+pOnTooKKjo9X1119v3+/8+fOqb9++KiIiQr3++utqzZo16i9/+YsKDg5Wo0aNUlartcHY33nnHaVpmhoxYoRaunSpWrNmjXrzzTfVQw89ZN/H1lNy4403qqSkJLVs2TKVkJCgvLy81MaNG+37Nfb9pVTjc0pjn9vCwkLVs2dP5e/vr/74xz+qr7/+Wn366afqscceU+vWrVNlZWX219msWbPsn0tpaWlKqbp7rWw9h9OnT1dffvmlev/999U111yjgoOD1eHDh+37zZw5U3l5eanu3bur1157Ta1Zs0Y999xzStO0Wu+9y7mqhJ+SkqIqKytVUVGR+uqrr1Tr1q3VddddV6O77FIWi0VVVlaqWbNmqX79+tUMAlRUVJQqLCy0b8vMzFQmk0ktWLDAvi0xMVG1adNGlZaW2rcVFhaqsLCwGgnf9sS/+uqrNY6zbNkyBah//OMf9m0dO3ZUvr6+Kj093b5t9+7dClDR0dE1usiTkpIUoFasWNHg89SYhJ+YmKh8fX3tjxVQ06ZNq7Wf7Xmz/Vz8Bps5c2ajLqVYrVZVWVmpTpw4oQCVnJxsv832Jvrd735X4z62N+F//vMf+7aOHTsqHx8fdeLECfu20tJSFRYWph544IEGY1izZo0C1HfffaeUUuo///mPCgwMVA899JAaOXKkfb+uXbuqGTNm2H+v641yuS79+Ph4ZbFY7Nu3bdumAPXhhx82GKNSSp05c0YNGTJEAfafqVOn1kjC9bE9l5e+7h566CHl4+Nj/9s19vX5448/Nvi3uTjhP/DAAyogIKDG30YppV577bUayerhhx9WISEhl30sl1NVVaUqKyvVH//4RxUeHl7jddnY18kdd9yhfH19VWZmpn2bxWJRcXFxjUr4VVVVKjExUU2fPt2+ra6Eb3u+bF8ML3b//fcrLy+vBo8zb948BaiMjIxat914442qW7du9t83b96sWrdurQBlMpnUc889p5RS6sUXX1Q9evSo93JdQ8aOHavatWunzp07V2P7ww8/rHx8fFReXp5SSqknn3xSaZqmdu/eXWO/MWPG1Ej4eXl5ytvbW91xxx019tuyZYsCaiT8BQsWKJPJVOsk75NPPqlxOaMuRUVFKigoSA0bNqzeLwZVVVWqTZs2Kj4+XlVVVdW4b6tWrdS1115r39bY95dSjc8pjX1u//jHPypArV69ut7H21CX/qWfY/n5+crX11fdfPPNNfY7efKk8vb2rvEZaPucX758eY19b775ZhUbG1tvPHW5qi79wYMH4+npSWBgIOPGjSM0NJTk5OQa3WVQPRp16NChBAQEYDab8fT0ZPHixbW6LABGjhxJYGCg/feoqChatWplH9F+/vx5tm/fzq233lqjazUwMJBbbrmlRlvr1q0DqDWKeerUqfj7+7N27doa2/v27Uvbtm3tv3fv3h2o7j728/Ortb2hUfaNpS7pBq1PQkICnp6e9p//+7//q7XPL37xi1rbzp49y4MPPkj79u3tz33Hjh0B6nz+f/nLX9b4/fbbb8dsNrN+/foa2/v27UuHDh3sv/v4+NCtW7fLPie2bts1a9YA2LsPx40bx/fff09JSQmnTp3iyJEj3HDDDQ22dTnjx4/Hw8PD/nvv3r2By//d8vPzmTRpEoWFhSxZsoTvvvuON998k02bNjFx4sRaXeP1mThxYo3fe/fuTVlZmX1EeGNfn7bnvr6/zcVWrlzJyJEjadOmDRaLxf5z0003AdWD1gAGDRpEQUEB06dPJzk5udYlnoasW7eOG264geDgYDw8PPD09OS5554jNze31mj3xrxO1q9fz+jRo2sMtPPw8OCOO+5oVDyvv/46R44cafQAzvpm8jR2hk9j7n/ttddy8uRJDh06RF5eHi+88AJHjhxh/vz5vP3225jNZp5//nk6dOhA69atefjhh+1d/nUpKytj7dq1TJkyBT8/vxp/25tvvpmysjL75ar169fTs2dP+vTpU6ONGTNm1Pg9JSWF8vJybr/99hrbBw8eTExMTI1tK1eupFevXvTt27fGsceOHXvZkf/ff/89hYWFPPTQQ/U+d6mpqZw5c4Y777wTk+nndBQQEMAvfvELUlJSKCkpqXGfy72/bC6XU67kuf3vf/9Lt27dmvzZZLNlyxZKS0trfQa0b9+eUaNG1cpRmqbVynO9e/e+4lx0VQn//fffZ/v27axbt44HHniAH3/8kenTp9fY57PPPuP222+nbdu2/Oc//2HLli1s376dX//613W+wMPDw2tt8/b2prS0FKj+MLZarbRu3brWfpduy83NxWw21xoFq2karVu3rjXFKiwsrMbvtmvo9W1v6A3aWCdPnrRfj4+IiMDX17fOP97SpUvZvn07K1asqLMdPz8/goKCamyzWq3ceOONfPbZZzzxxBOsXbuWbdu22V+8tuf0Ypc+h2azmfDw8FrP1eX+TvXx8fFh6NCh9oS/du1axowZw4gRI6iqqmLjxo2sXr0aoMlvqktj9Pb2Bup+3Bd75ZVX2L17N6tXr2bGjBkMHz6c3/zmNyxZsoRvvvmmzpkVV3P8xr4+bf/W97e5WFZWFl988UWNL4eenp707NkTwJ7Y77zzTt59911OnDjBL37xC1q1akViYqL9ua/Ptm3buPHGGwH45z//yebNm9m+fTtPP/10jcdW33Ngex4u3i83N7dR7+e6nDx5kueee47nn38eLy8vCgoKKCgowGKxYLVaKSgosB/LFktdUyvz8vJqvc8vdaX39/T0JDY21j4W5MEHH+TOO+9k2LBh/Otf/+Jf//oXa9euZdeuXWzcuLHW9eyL5ebmYrFYWLhwYa2/7c033wz8/Ldt7PNpexx1zWi4dFtWVhZ79+6tdezAwECUUg1+YbSNAWrXrl2Djw+oc/R6mzZtsFqttWZ/Nfb9fbnX4JU8t9nZ2Q0+jit1ucd96WvNz8+v1hgib2/vK85F5svvUlv37t3tA/VGjhxJVVUV77zzDp988gm33XYbAP/5z3/o1KkTy5Ytq/Ht7ooHGVwQGhqKpmlkZmbWuu3SbeHh4VgsFrKzs2t8qCqlyMzMZODAgVcVg162bdtGZmYms2bNAqrPakaNGsU333xDRkZGjRdBjx49AOqdv1nXN+f9+/ezZ88e/v3vfzNz5kz79rS0tHpjyszMrNHLYbFYyM3NrfNNc7VGjx7Nc889x7Zt20hPT2fMmDEEBgYycOBAVq9ezZkzZ+jWrRvt27fX7ZhXYvfu3bRt27bWm9D2etm/f78ux2ns69P23Nf3t7lYREQEvXv3rnfg2sWDPe+55x7uuecezp8/z3fffcfzzz/PhAkTOHz4sL0X6FIfffQRnp6erFy5ssYHT1JS0pU9+IuEh4c36v1cl59++onS0lIee+wxHnvssVq3h4aG8thjj/HnP//ZPi9/37599g9ym3379tU7b98mPj7evq/t/QjVf4dDhw7VOtm52L///W8OHjzIp59+ClSfKU6dOpWuXbsCMGvWLD744ANeeOGFOu8fGhqKh4cHd955J7Nnz65zn06dOgGNfz5tr6uLB1lfvO/FZ/m2k5H6BuZGRETUuR2wv7bT09Pr3ccWS0ZGRq3bzpw5g8lkIjQ0tN77N8WVPLeRkZENPo4rdbnH3dDz2hS6jNJ/9dVXCQ0N5bnnnrPPVbYVnLk4IWVmZtY5Sr8xbKPkP/vssxrfaoqKivjiiy9q7Gsbqf6f//ynxvZPP/2U8+fP2283Ql5eHg8++CCenp787ne/s2+fM2cOVVVVPPjgg1c8SvlStufc9s3XpqHRwZeevS5fvhyLxVJrxG5T3HDDDVgsFp599lnatWtHXFycffuaNWvsXcaX05gehavRpk0b0tPTOX36dI3tttHCen3Db+zr0/bc1/e3udiECRPYv38/nTt3ZsCAAbV+Lk74Nv7+/tx00008/fTTVFRUcODAgXpjthXauvhSSWlpKR988EHjH/glRo4cydq1a2sknqqqKpYtW3bZ+/bt25f169fX+unTpw8xMTGsX7+ehx9+GIC2bdsyaNAg/vOf/1BVVWVvIyUlhdTU1Fpz6S+VmJhIdHQ0//73v2ts/+STTyguLq73/jk5Ofz+97/nL3/5i32mh1Kqxuj24uLiBi/v+fn5MXLkSHbt2kXv3r3r/NvaksfIkSM5cOAAe/bsqdHG0qVLaz0eb2/vWs9zSkpKrV7GCRMmcPToUcLDw+s89qWXAC527bXXEhwczN///vd6H2NsbCxt27Zl6dKlNfY5f/48n376qX3kviNcyXN70003cfjwYfvluLo0ticRYMiQIfj6+tb6DEhPT2fdunUOy1FXdYZ/qdDQUObMmcMTTzzB0qVL+dWvfsWECRP47LPPeOihh7jttts4deoUL774ItHR0Vddle/FF19k3LhxjBkzhscff5yqqipeeeUV/P39ycvLs+83ZswYxo4dy5NPPklhYSFDhw5l7969PP/88/Tr148777xTj4d9WUeOHCElJQWr1Upubi5bt25l8eLFFBYW8v7779u7W6H6GveiRYt45JFH6N+/P/fffz89e/bEZDKRkZFhP0O4tPu+LnFxcXTu3JmnnnoKpRRhYWF88cUXDXbbfvbZZ5jNZsaMGcOBAwd49tln6dOnT63rfE2RkJBAaGgo33zzTY0pTjfccAMvvvii/f+XEx8fz2effcZbb71FQkICJpPJ3uPUFLNnz2bJkiWMGTOGp556ivbt27N//35eeukloqKial1Lv1qNfX12796dX/3qV/z5z3/G09OTG264gf379/Paa6/Veh388Y9/ZPXq1Vx77bU8+uijxMbGUlZWxvHjx1m1ahV///vfadeuHffddx++vr4MHTqU6OhoMjMzWbBgAcHBwQ32fI0fP57XX3+dGTNmcP/995Obm8trr71W60vllXjmmWdYsWIFo0aN4rnnnsPPz49FixY1arpXSEhInV9GQ0JC6vyi+sorrzBmzBimTp3KQw89xNmzZ3nqqafo1atXjdfiiRMn6Ny5MzNnzmTx4sVAdQ/cq6++yp133skDDzzA9OnTOXLkCE888QRjxoxh3Lhxdcb4P//zPyQmJtZ4D40dO5bHH3+cIUOGEBAQwF//+lfuvffeBh/rX/7yF4YNG2a/xBQTE0NRURFpaWl88cUX9iT029/+lnfffZfx48fbX7NLlizh0KFDNdoLCwvjf/7nf1iwYAGhoaFMmTKF9PR0XnjhBaKjo2tcS//tb3/Lp59+ynXXXcfvfvc7evfujdVq5eTJk3zzzTc8/vjjJCYm1hl3QEAA//d//8e9997LDTfcwH333UdUVBRpaWns2bOHv/3tb5hMJl599VV++ctfMmHCBB544AHKy8v505/+REFBAS+//HKDz01TXclzu2zZMiZNmsRTTz3FoEGDKC0tZcOGDUyYMME+XqBjx44kJyczevRowsLCiIiIqPNLUUhICM8++yxz587lrrvuYvr06eTm5vLCCy/g4+PD888/75gHfCUj/OqblqdU9SjcDh06qK5du9pHSL/88ssqJiZGeXt7q+7du6t//vOfdRbJAdTs2bNrtVlXcZEVK1ao3r17Ky8vL9WhQwf18ssv19lmaWmpevLJJ1XHjh2Vp6enio6OVr/5zW9Ufn5+rWPUVUymrpgaW9jFNkrf9mM2m1V4eLgaMmSImjt3rjp+/Hi99929e7e65557VKdOnZS3t7fy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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# directed graph\n", + "graph_dir = nx.to_directed(graph)\n", + "plot_graph(graph_dir, \n", + " node_size=1000,\n", + " node_color='darkred',\n", + " edge_color='gray',\n", + " figsize=(5, 5),\n", + " seed=1,\n", + " title=\"Random DGraph with {} nodes and {}% edge connection\".format(num_nodes, probability*100));" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Weighted adjacency matrix:\n", + " [[0 9 4 9 9]\n", + " [9 0 1 6 4]\n", + " [4 1 0 0 6]\n", + " [9 6 0 0 8]\n", + " [9 4 6 8 0]]\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# weighted graph\n", + "seed = 3\n", + "np.random.seed(seed) # to fix the plot\n", + "\n", + "num_nodes = 5\n", + "probability = 0.8\n", + "graph_w = nx.erdos_renyi_graph(num_nodes, probability, seed=seed)\n", + "\n", + "for (u,v) in graph_w.edges():\n", + " graph_w[u][v]['weight'] = np.random.randint(1, 10)\n", + "\n", + "# plot the weighted graph\n", + "edge_labels = nx.get_edge_attributes(graph_w, 'weight')\n", + "\n", + "plot_graph(graph_w, \n", + " with_labels=True, \n", + " node_color='lightblue', \n", + " node_size=700, \n", + " font_size=12,\n", + " edge_labels=edge_labels, \n", + " figsize=(5, 5), \n", + " title=\"Weighted Random Network\")\n", + "\n", + "weighted_adjacency_matrix = nx.to_numpy_array(graph_w, weight='weight').astype(int)\n", + "print(\"Weighted adjacency matrix:\\n\", weighted_adjacency_matrix)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "self avoiding path" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "A->B->E->F\n", + "A->C->F\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Create a graph\n", + "G = nx.Graph()\n", + "edges = [('A', 'B'), ('A', 'C'), ('B', 'D'), ('B', 'E'), ('C', 'F'), ('E', 'F')]\n", + "G.add_edges_from(edges)\n", + "\n", + "# Find all self-avoiding paths from 'A' to 'F'\n", + "start_node = 'A'\n", + "target_node = 'F'\n", + "all_saps = list(find_sap(G, start_node, target_node))\n", + "\n", + "for path in all_saps:\n", + " print(\"->\".join(path))\n", + "\n", + "plot_graph(G, seed=2, figsize=(3, 3))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A Hamiltonian path is a path in a graph that visits each vertex exactly once." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hamiltonian Path found: (1, 2, 3, 4, 5, 6)\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Example usage\n", + "G = nx.Graph()\n", + "G.add_edges_from([(1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 1)])\n", + "\n", + "plot_graph(G, seed=2, figsize=(3, 3))\n", + "\n", + "path = find_hamiltonian_path(G)\n", + "if path:\n", + " print(\"Hamiltonian Path found:\", path)\n", + "else:\n", + " print(\"No Hamiltonian Path found\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hamiltonian Path found: (0, 1, 2, 4, 3)\n" + ] + } + ], + "source": [ + "# hamiltonian path of weighted graph:\n", + "path = find_hamiltonian_path(graph_w)\n", + "if path:\n", + " print(\"Hamiltonian Path found:\", path)\n", + "else:\n", + " print(\"No Hamiltonian Path found\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- Adjacency List" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "adjacency matrix\n", + " [[0 1 1 0 0 0]\n", + " [1 0 0 1 1 0]\n", + " [1 0 0 0 0 1]\n", + " [0 1 0 0 0 0]\n", + " [0 1 0 0 0 1]\n", + " [0 0 1 0 1 0]]\n", + "adjacency list\n", + " {1: [2, 3], 2: [1, 4, 5], 3: [1, 6], 4: [2], 5: [2, 6], 6: [3, 5]}\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "G = nx.Graph()\n", + "edges = [(1, 2), (1, 3), (2, 4), (2, 5), (3, 6), (5, 6)]\n", + "G.add_edges_from(edges)\n", + "\n", + "plot_graph(G, seed=2, figsize=(3, 3))\n", + "\n", + "adjacency_matrix = nx.to_numpy_array(G).astype(int)\n", + "print(f\"adjacency matrix\\n {adjacency_matrix}\")\n", + "\n", + "\n", + "adjacency_list = {n: list(neighbors) for n, neighbors in G.adj.items()}\n", + "print(f\"adjacency list\\n {adjacency_list}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- Adjaceccy list of directed graph:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "adjacency matrix\n", + " [[0 1 1 0 0 0]\n", + " [0 0 0 1 1 0]\n", + " [0 0 0 0 0 1]\n", + " [0 0 0 0 0 0]\n", + " [0 0 0 0 0 1]\n", + " [0 0 0 0 0 0]]\n", + "adjacency list\n", + " {1: [2, 3], 2: [4, 5], 3: [6], 4: [], 5: [6], 6: []}\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "G = nx.DiGraph()\n", + "edges = [(1, 2), (1, 3), (2, 4), (2, 5), (3, 6), (5, 6)]\n", + "G.add_edges_from(edges)\n", + "plot_graph(G, seed=2, figsize=(3, 3))\n", + "\n", + "adjacency_matrix = nx.to_numpy_array(G).astype(int)\n", + "print(f\"adjacency matrix\\n {adjacency_matrix}\")\n", + "\n", + "adjacency_list = {n: list(neighbors) for n, neighbors in G.adj.items()}\n", + "print(f\"adjacency list\\n {adjacency_list}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[Implementation of BFS for Graph using Adjacency List:](https://www.geeksforgeeks.org/breadth-first-search-or-bfs-for-a-graph/)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Breadth First Traversal starting from vertex 0: 0 1 2 3 4 " + ] + }, + { + "data": { + "image/png": "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peH777+H3W7HnXfeienTp+PKFZ6eKyu5P3HULDs7mzp37kyCINDEiROpvLxc7pKcwmw202uvvUZarZZiY2Np3759cpekWtzDy6CyshIvvfQSkpOTYTabsX//fixZsgQBAcp8hptWq8Urr7yC7OxsBAcHo3v37pg4cSIqKhr+7DtWT3J/4qhNVlYWxcTEkFarpddee43MZrPcJbmUzWajxYsXk06no9atW1NmZqbcJakKB95FSkpK6KmnniIA1KNHDzp27JjcJcnq119/pZSUFAJAI0aMoEuXLsldkipw4J1MFEVav349hYeHU1BQEC1fvpwnpVwliiK9//77FBgYSJGRkbRx40a5S1I8DrwTnT17lvr160cAaODAgfT777/LXZJb+u233+ihhx4iAPToo4/ShQsX5C5JsTjwTmCz2Wjp0qXk7+9PTZs2pU2bNsldktu7diUUFhZGjRs3pg8++IBEUZS7LMXhwEvs6NGjdM899xAAGjduHBkMBrlL8igXL168Pq24b9++dPbsWblLUhS+LSeRK1euIDU1FZ06dYLBYMDevXvx7rvvIiiIV3mtj9DQUKxduxbbtm3Dzz//jA4dOmDZsmUQ+Zl20pD7E0cJ9u7dS7GxseTj40Opqal05coVuUtShLKyMho7diwBoG7dutHx48flLsnjcQ/fAGVlZRg3bhx69OiBJk2aIDs7G3PmzIGvr6/cpSlCYGAgMjIysHv3bly4cAEJCQlIS0uDzWaTuzTPJfcnjqfatGkTNW3alPz9/Sk9PZ1vtTmZ0WikqVOnkkajoU6dOtGRI0fkLskjcQ9fT3/88QcGDhyIgQMHIjk5Gbm5uXjmmWeg0fA/pTPpdDosXLgQBw8ehMViQXJyMl555RWYzWa5S/Mscn/ieAq73U4ZGRkUGBhIERER9Omnn/JtI5mYzWaaM2cO+fj4UPv27Wn//v1yl+QxOPAOyMvLo+7duxMAGjVqFE8DdRNHjx6lu+66iwRBoEmTJtHly5flLsntceBrYTab6dVXXyWtVku33XYbff3113KXxG5gs9nozTffpEaNGlFUVBTt3LlT7pLcGge+BgcOHKAOHTqQl5cXvfzyy2QymeQuidXi1KlT1KtXLwJAI0eOpNLSUrlLcksc+BuUl5fTs88+S4IgUHJyMo8GexBRFOm9996jwMBAatq0KX3++edyl+R2OPB/snXrVmrZsiXpdDpatGgR2Ww2uUtit+D8+fPUv39/AkCDBw/2+PUBpcSBJ6KCggIaMmQIAaA+ffpQfn6+3CWxBhJFkdatW0ehoaHUpEkTWrNmDd9VIZUHXhRFWrVqFTVu3JhCQ0Np7dq1/J9CYYqKimjYsGEEgP7+97/TuXPn5C5JVqoN/MmTJ6l3794EgIYPH04XL16UuyTmRFu2bKHmzZtTQEAAvfPOO6qdGam6wFssFpo/fz75+flRVFQUr6mmIgaDgUaPHn19mbETJ07IXZLLqSrwP/74I3Xs2JE0Gg09//zzVFFRIXdJTAZZWVnUpk0b8vPzowULFpDVapW7JJdRReArKipoypQppNFoqGPHjnTo0CG5S2IyMxqN1/9PJCcnU05OjtwluYTiA5+ZmXn9Cazz58+X7AmsTBkOHjxIcXFx5O3tTTNnzlT8WgaKDfzFixdp+PDhHvcEVuZ6V65coVmzZpG3tzfFxcXRgQMH5C7JaRQXeFEUae3atRQaGkqNGzemVatW8a025pCffvqJkpOTSRAEmjx5siLHeBQV+Pz8fOrTpw8BoCFDhvAMK1ZvVquVFi5cSH5+ftSmTRvKysqSuyRJKWLVBrvdjsWLF6NDhw745ZdfsHXrVqxfv97jn8DKXM/b2xtTp07F0aNH0bJlS6SkpGD06NEwGAxylyYNV3/CWO12Kq20UInJTKWVFrI2cALEkSNHrl+GPfvss4p9AitzvWuLngQEBFCzZs1o8+bNcpfUYAIRkbM/VMrNVuQbTCgwmmG02m/arvfxQqTeF9HBOgT6+jjUZmVlJV599VUsXLgQ7dq1w4oVK3DPPfdIXTpjOH/+PMaNG4ft27dj6NChWLp0KcLCwm6pLZsoosJih0gEjSDAX+sFbxcuj+bUwBstNmQXlqHIZIEAoLYDXdsertMiKSIIeq13je/dvXs3xowZg3PnzmHmzJl44YUXoNVqJa6esf8hIqxbtw6TJk0CACxduhTDhg2DIAh17uuMDu9WOS3w+QYTcorKQFR70G8qCIAgAInhQYgO1v1lW2lpKaZOnYpVq1ahe/fueO+999CuXTtJ62asNkVFRZg4cSI++eQT9OvXDxkZGWjRokW173VWh9cQTgn8sZLLyC2uaHA7caH+aBcSACLChg0bMHHiRFRWVmLBggUYPXo0rxTLZLN582aMHz8eFRUVWLhw4U3/H53R4UlB8sTkG0yShB0AcosrcDj/NwwYMABDhgxB165dkZeXh7Fjx3LYmawGDBiA3NxcDB48GOPGjUNKSgpOnToFoKrDyy4sg1jPsANV7xcJyC4sw7GSy5LXLWlqjBYbcorKHH7/rg0fYVC7Znii023VbicinCi3Iv+3P7Bp0yZs3LgRzZo1k6pcxhokODgYK1aswK5du3D27FkkJCRg+adf1NjhVRqNWDU3Ff/qnoShCdF4/uH7sO/LL2psP7e4AmcMJklrlvSSft/5Elw0WRz6VCspvIDn+veCXyMdTBXl+OjwqWrfJ4p2hPj5oFc031Nn7stoNOK1tIVIHPRPaH39qh3Me3XkUJz6OQf/mDIdTaPaYN+Xn2PXhnV4bmE6uj84sNp2NQLwt6gwyb7TSxb4crMVu84UO/z+ueP+CUEQ4B/UGAe/2lZj4K+5LyrU6SOYjDXEvvMlKDKaq76E3+D/vsnC3LHD8dy/l6F7/0euv/7qyKE4f+oEMnYfgpeX1037CQDCdFp0axkiSY2SXdLnG0yo+wZFlW+2bETuoYMYM2ueQ+8XrrbPmLsqN1tRZLJUG3YA+GHXf+Gn06NL3wf/8nqvgUNwqagAJ3MOV7sfASgyWVButkpSp2SBLzCaHbqULyspxuq5qfjH89MREunY93G62j5j7qquDu/cieNoEXM7vLz/emneOjauavvJ4zXuK2WHJ0ngraJY7YSC6rw352U0i45Bn2FP1usYRqsdNlG8lfIYc7q6OrzLhlL4BwXf9HrA1dcqDKU17itlhyfJSIDR4ljYD2R+iR9378S/P//KoRlKN6qw2BHsx7fjmHtxtMOr9f98HXG41uE1dBquJIEXHRj3qzQaseK16XjgH0+hSXgEjOVVt+9sVgsAwFheBi9vH/jpap5s4MhxGHM1Rzq8gODGuFxNL365zAAA8A9qXGcbUnR4kgRe40Bvfbn0EgzFF7Fl9XJsWb38pu3/vKs97kzpg5eWrW7QcRhzNUc6olZt22Hfl1/AbrP95Xv8uRN5Vdtvj5XkOHWRJPD+2ptvJ9woOCwMcz747KbXP38/HbmHDmLGe2sR2LhJg4/DmKs50hHd/be/Y9eGj3Dwqy/R9YEB11/f88UGNAmPxO2JnSQ5Tl0kCby3RgO9j1et32O0vn6Iv7vLTa/v/vxTaLw01W77M72Pa39GyJijHOmIOvXojcQuPfDenJdhqqhAZKso7PvyC2R/uxuTFqZXew/+Vo5TF8l+khOp98Vpg6nec4cdIVxtnzF35EiHBwDT3l6JdW/Nx/q3F6LCYEDzNrdh8pvvoFu/h+s8hlQdnmwz7eqLZ9oxd5ZTWIZfS401TrxpCAFAm2AdEiOCGtyWZNfIgb4+CNdpHZ5t5yi73YYj+77BuKeexJkzZyRunbGGO3PmDDLmzXFK2IGq+/BS/VRW0i/FSRFBkv/NPt7eiNLasWfPHsTGxmLq1KkoLa15kgJjrlJcXIzJkycjNjYWX3zyMSyXiiTv8ARULYoh1dWtpIHXa72RGN7wy44/6xgehJHDn8DJkycxY8YMZGRkICYmBosWLYLZzNNtmesZjUa88cYbiImJwcqVK5GamopTp07hwc4dJO/wBKGqI5WsPfde8SYA7UL8//JaQUEBZs+ejRUrVqBVq1aYO3cuhgwZcksz9xirD5vNhlWrVmH27NkoLi7G008/jRkzZvxlQct8gwnZhY6vCVGXThFBiJJw5Run3OdqFxKApIggaIQ6ZwzeREDVb4A7RQTdFHYAiIyMREZGBo4ePYr4+HgMGzYMd999N/bu3StJ7YzdiIiwadMmxMfHY+zYsejduzeOHz+Ot95666bVa6ODdYgLvfn/7a2ICw2QNOyAkwIPVP3hf4sKQ5iuajXZuoJ/bXuYTou/RYXV+Ye2b98eW7ZswZ49e0BE6NmzJwYMGIBjx441vHjGrvr222/RpUsXDBo0CFFRUTh8+DDWrl2L6OjoGvdxZofXUE6dyaLXeqNbyxDcFxWKNsE66H2qnzig9/FCm2Ad7osKRbeWIfVa3aNnz574/vvvsW7dOvz000+Ij4/H+PHjUVhYKNWfwVTo559/xoMPPogePXrAarVi165d2LFjB5KSkhza39kd3q1yyYMo/syZC/GbzWYsW7YMr7/+OqxWK1544QVMmTIFer1ekvaZ8p0/fx6zZs3CBx98gKioKMydOxePPfZYgxZNdad16RX1MMlrSkpKaMqUKaTVaqlZs2a0YsUKstlscpfF3NilS5do2rRp5OvrS2FhYfT222+T2WyW/DhSP2qtvhQZ+GtOnz5NQ4cOJQAUHx9P27dv50dHs78wmUy0YMECCg4OJr1eT7NmzVL08wkVHfhrfvjhB+rRowcBoJSUFDp8+LDcJTGZ2Ww2WrVqFbVo0YK8vb3p6aefVsXjxVUReCIiURRp8+bN1K5dOxIEgYYPH05nz56VuyzmYqIo0pYtW6hDhw4EgAYPHkwnTpyQuyyXUU3gr7FarZSRkUERERHk6+tLL774IhkMBrnLYi6wf/9+6t69OwGgXr160Q8//CB3SS6nusBfU15eTqmpqaTT6SgkJITeeustpwzSMPnl5eXRI488QgAoISGB/vvf/6p2LEe1gb/m999/p3/961+k0WgoJiaGNmzYoNr/DErz+++/05gxY8jLy4tatWpFH374IdldPCrublQf+GuOHj1KDzzwAAGge++9l7777ju5S2K3yGAw0PTp06lRo0bUpEkTWrRoEVVWVspdllvgwN8gKyuLkpKSCAANHDhQVQM6nu7KlSu0ePFiCgkJoUaNGtHLL7/M4zM34MBXw26305o1a6hVq1bk7e1NEyZMoKKiIrnLYjW4dr5at25NGo2GRo8eTb/99pvcZbklDnwtKisrKS0tjYKCgiggIIDeeOMNMhqNcpfFrhJFkXbs2EGJiYkEgB5++GHKzc2Vuyy3xoF3wMWLF2nSpEnk4+NDLVq0oNWrV/NUXZkdOnSIevfuTQCoa9euPObiIA58PZw6dYoee+wxAkCJiYmUmZkpd0mqc/LkSRo8eDABoLi4ONqyZQvfVakHDvwtOHDgAHXt2pUA0P333085OTlyl6R4BQUF9Mwzz5C3tzc1b96cVq5cSVarVe6yPA4H/haJokibNm2i22+/nQRBoBEjRtD58+flLktxysvLadasWaTX6yk4OJjS0tLIZDLJXZbH4sA3kMViofT0dAoLC6NGjRrR9OnTqaysTO6yPJ7ZbKb09HQKDw8nX19fmjZtGpWUlMhdlsfjwEukrKyMpk+fTn5+fhQWFkbp6elksVjkLsvj2O12Wr9+PcXExFy/cuIfOUmHAy+x8+fP04gRI0gQBGrbti1t2rSJB5UclJWVRcnJyQSA+vfvTz/99JPcJSkOP51RYi1atMDq1auRnZ2NqKgoDBw4ED169MDBgwflLs1t5eTkoG/fvkhJSYGXlxf27NmDrVu34o477pC7NMXhwDtJYmIiMjMzkZmZifLyctx7770YPHgwfv31V7lLcxtnzpzB8OHDkZSUhPz8fGzcuBEHDhxAz5495S5NueS+xFADm81Gq1evpubNm5OPjw9NmjSJiouL5S5LNhcvXqTnnnuOtFotRUZGUkZGBo93uAgH3oWMRiO98cYbFBAQQEFBQZSWlqaqX3FVVFTQ66+/ToGBgRQQEECvv/46VVRUyF2WqnDgZVBYWHh9EkmrVq1ozZo1iv6dttVqpeXLl1PTpk2vX+Hwj5HkwYGX0fHjx2ngwIEEgDp16kRZWVlylyQpURRp48aNFBsbSwDoiSeeoNOnT8tdlqrxoJ2M2rZti40bN2Lfvn3QarVISUlBv3798Msvv8hdWoP9+RFNrVu3dugRTcz5OPBuoGvXrti/fz82bNiA48ePIyEhAaNHj8aFCxfkLq3e/vyIJovFgp07dyIzM9PhRzQxJ5P7EoP9ldlspiVLllBISAjpdDpKTU2ly5cvS9a+s558cu7cOXrqqadIo9FQmzZt6OOPP1b0uISncvmz5ZhjDAYD5s2bhyVLliA4OBhz5szBqFGj4O3t+IM2r3Hms81KS0sxb948LF26FIGBgUhNTcWYMWOg1WrrXSdzPg68mzt37hxeeeUVrFmzBu3bt0daWhr69+8PQaj7QcRGiw3ZhWUoMlkgAKjtRF/bHq7TIikiqM4n+FZWViI9PR1z586F1WrF888/j6lTpyIgIKA+fx5zMQ68h8jOzsa0adOQlZWFnj17YuHChbjzzjtrfH++wYScojIQ1R70GwkABAFIDA9CdDWPLLbb7fjwww+RmpqKgoICjBkzBjNnzkRkZGT9/yjmcjxo5yGSkpKwc+dObN++HSUlJbjrrrswbNgw5Ofn3/TeYyWXkV1YBrGeYQeq3i8SkF1YhmMll//3OhG2bduGxMREjBw5El26dEFubi6WLVvGYfcg3MN7ILvdjv/85z+YOXMmSkpKMGHCBMyYMQNNmjRBvsGE7MKym/Y5enAf9m7ZiGPZP6Kk4A/oA4IQE5+Ax56egpj4hBqP1SkiCBfycvDiiy/i22+/Ra9evZCWllbr1QVzXxx4D2Y0GrFo0SIsWLAAPj4+mPX6XLS+bwDEas7ovyeNwWVDKe7t2x8tY9qi/FIJtqxejl9/ycHMFetwxz3dqjkCwWa14tm+3REZ0hhpaWno06ePQ+MHzD1x4BWgsLAQs2fPRvidPRF/d1d4VTOSX1ZSjKCQ0L+8Vmk0YkKfLmh5eyxmr/602rbtNhvIWIZHk+Og0fA3QE9X/3s8zO1EREQg7a2l2HWmuMb33Bh2AGik16NFTFuUXPijxv28vL2BoBBUWO0I9OXAezo+gwqRbzChvhfaxsvlOJ17FC1vj631fcLV9pnn48ArRIHRXO8R+RWvToe50oRBYyfV+j662j7zfBx4BbCKYrUz6Grz8ZIF2Lt1E0a8NLvWUfprjFY7bKJ4qyUyN8GBVwCjpX5h/zT9TXz27lt4/LmX8MA/Rjq8X0U9j8PcDwdeAcR63Gj5NP1NfJL+JoZMeB6Dxk102nGYe+LAK4DGwfviG95ZjE/S38Sj45/D4AnPO+04zH3xbTkF8Nd61fmeLasysH7pQiR174XOPVNw4sj//WV7246dJTkOc28ceAXw1mig9/GqdeDux907AQDZ3+5G9re7b9q+8VjN9+KBqp/QevPEG4/HM+0UIqewDKcNpnrfmnOEAKBNsA6JEUFOaJ25En9kK0R0sM4pYQeq7sNX91NZ5nk48AoR6OuDcJ223rPt6iKgalGM+q6Ew9wTB15BkiKCIPVAuiBUtcuUgQOvIHqtNxLDpQ1nx/C6l7tinoMDrzDRwTrEhfpL0lZcaACi+Lu7ovAovUI1dE27juFBHHYF4sArmDNXrWWeiQOvAs5cl555Fg68ythEERUWO0QiaAQB/lqeQacmHHjGVIQ/2hlTEQ48YyrCgWdMRTjwjKkIB54xFeHAM6YiHHjGVIQDz5iKcOAZUxEOPGMqwoFnTEU48IypCAeeMRXhwDOmIhx4xlTk/wOVe7HvVXL3CAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from collections import deque\n", + "\n", + "# Function to perform Breadth First Search on a graph\n", + "# represented using adjacency list\n", + "def bfs(adjList, startNode, visited):\n", + " # Create a queue for BFS\n", + " q = deque()\n", + "\n", + " # Mark the current node as visited and enqueue it\n", + " visited[startNode] = True\n", + " q.append(startNode)\n", + "\n", + " # Iterate over the queue\n", + " while q:\n", + " # Dequeue a vertex from queue and print it\n", + " currentNode = q.popleft()\n", + " print(currentNode, end=\" \")\n", + "\n", + " # Get all adjacent vertices of the dequeued vertex\n", + " # If an adjacent has not been visited, then mark it visited and enqueue it\n", + " for neighbor in adjList[currentNode]:\n", + " if not visited[neighbor]:\n", + " visited[neighbor] = True\n", + " q.append(neighbor)\n", + "\n", + "# Function to add an edge to the graph\n", + "def addEdge(adjList, u, v):\n", + " adjList[u].append(v)\n", + "\n", + "def main():\n", + " # Number of vertices in the graph\n", + " vertices = 5\n", + "\n", + " # Adjacency list representation of the graph\n", + " adjList = [[] for _ in range(vertices)]\n", + "\n", + " # Add edges to the graph\n", + " addEdge(adjList, 0, 1)\n", + " addEdge(adjList, 0, 2)\n", + " addEdge(adjList, 1, 3)\n", + " addEdge(adjList, 1, 4)\n", + " addEdge(adjList, 2, 4)\n", + "\n", + " # Mark all the vertices as not visited\n", + " visited = [False] * vertices\n", + "\n", + " # Perform BFS traversal starting from vertex 0\n", + " print(\"Breadth First Traversal starting from vertex 0:\", end=\" \")\n", + " bfs(adjList, 0, visited)\n", + " \n", + " #plot the graph\n", + " G = nx.Graph()\n", + " G.add_edges_from([(0, 1), (0, 2), (1, 3), (1, 4), (2, 4)])\n", + " plot_graph(G, seed=2, figsize=(3, 3))\n", + "\n", + "if __name__ == \"__main__\":\n", + " main()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Graph information\n", + "Directed : False\n", + "Number of nodes : 5\n", + "Number of edges : 9\n", + "Average degree : 3.6000\n", + "Connectivity : connected\n" + ] + } + ], + "source": [ + "from netsci.analysis import graph_info\n", + "graph_info(graph_w)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Table 2.1" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "import networkx as nx\n", + "import pandas as pd\n", + "from netsci.analysis import average_degree\n", + "from netsci.utils import list_sample_graphs, load_sample_graph" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "nets = list(list_sample_graphs().keys())" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "G = load_sample_graph(\"Internet\")" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Graph information\n", + "Directed : False\n", + "Number of nodes : 192244\n", + "Number of edges : 609066\n", + "Average degree : 6.3364\n", + "Connectivity : disconnected\n" + ] + } + ], + "source": [ + "graph_info(G)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing sample graphs: 100%|██████████| 10/10 [00:00<00:00, 19463.13it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Collaboration\n", + "Internet\n", + "PowerGrid\n", + "Protein\n", + "PhoneCalls\n", + "Citation\n", + "Metabolic\n", + "Email\n", + "WWW\n", + "Actor\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "for net in tqdm(nets, desc=\"Processing sample graphs\"):\n", + " print(net)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing sample graphs: 100%|██████████| 9/9 [00:33<00:00, 3.72s/it]\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
num_nodesnum_edgesavg_degreedirectedname
023133934398.078416FalseCollaboration
11922446090666.336385FalseInternet
2494165942.669095FalsePowerGrid
3201829302.903865FalseProtein
436595918265.018500TruePhoneCalls
5449673468947920.857285TrueCitation
61039580211.168431TrueMetabolic
7571941037313.627339TrueEmail
832572914971349.192513TrueWWW
\n", + "
" + ], + "text/plain": [ + " num_nodes num_edges avg_degree directed name\n", + "0 23133 93439 8.078416 False Collaboration\n", + "1 192244 609066 6.336385 False Internet\n", + "2 4941 6594 2.669095 False PowerGrid\n", + "3 2018 2930 2.903865 False Protein\n", + "4 36595 91826 5.018500 True PhoneCalls\n", + "5 449673 4689479 20.857285 True Citation\n", + "6 1039 5802 11.168431 True Metabolic\n", + "7 57194 103731 3.627339 True Email\n", + "8 325729 1497134 9.192513 True WWW" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_list = []\n", + "\n", + "for net in tqdm(nets[:-1], desc=\"Processing sample graphs\"):\n", + " G = load_sample_graph(net)\n", + " num_nodes = G.number_of_nodes()\n", + " num_edges = G.number_of_edges()\n", + " avg_degree = average_degree(G)\n", + " directed = nx.is_directed(G)\n", + " \n", + " # Append a dictionary of data for this network to the list\n", + " data_list.append({\n", + " 'num_nodes': num_nodes,\n", + " 'num_edges': num_edges,\n", + " 'avg_degree': avg_degree,\n", + " \"directed\": directed,\n", + " \"name\": net\n", + " })\n", + "\n", + "# Create the DataFrame from the list of dictionaries\n", + "df = pd.DataFrame(data_list)\n", + "\n", + "# Display the DataFrame\n", + "df" + ] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_sources/examples/chap_03.ipynb.txt b/_sources/examples/chap_03.ipynb.txt new file mode 100644 index 0000000..ccf8348 --- /dev/null +++ b/_sources/examples/chap_03.ipynb.txt @@ -0,0 +1,530 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# [Chapter 3](https://github.com/Ziaeemehr/netsci/blob/main/docs/examples/chap_03.ipynb)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### **Random Networks**\n", + "\n", + "Code by : Abolfazl Ziaeemehr \n", + "- https://github.com/Ziaeemehr\n", + "\n", + "\"Open" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# uncomment and run this line to install the package on colab\n", + "# !pip install \"git+https://github.com/Ziaeemehr/netsci.git\" -q" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A random network consists of N nodes where each node pair is connected with probability p.\n", + "To construct a random network we follow these steps:\n", + "1) Start with N isolated nodes.\n", + "2) Select a node pair and generate a random number between 0 and 1. If the number exceeds p, connect the selected node pair with a link, otherwise leave them disconnected.\n", + "3) Repeat step (2) for each of the N(N-1)/2 node pairs.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import random\n", + "import numpy as np\n", + "import networkx as nx\n", + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "from netsci.plot import plot_graph" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "LABELSIZE = 13\n", + "plt.rc('axes', labelsize=LABELSIZE)\n", + "plt.rc('axes', titlesize=LABELSIZE)\n", + "plt.rc('figure', titlesize=LABELSIZE)\n", + "plt.rc('legend', fontsize=LABELSIZE)\n", + "plt.rc('xtick', labelsize=LABELSIZE)\n", + "plt.rc('ytick', labelsize=LABELSIZE)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "def create_random_network(N, p):\n", + " G = nx.Graph() # Initialize an empty graph\n", + " G.add_nodes_from(range(N)) # Add N isolated nodes\n", + "\n", + " # Iterate through each possible node pair\n", + " for i in range(N):\n", + " for j in range(i + 1, N):\n", + " if random.random() <= p: # Generate a random number and compare it with p\n", + " G.add_edge(i, j) # Connect the nodes if the condition is met\n", + "\n", + " return G\n", + "\n", + "# Example usage:\n", + "N = 10 # Number of nodes\n", + "p = 0.3 # Probability of edge creation\n", + "\n", + "seed=2\n", + "random.seed(seed)\n", + "np.random.seed(seed)\n", + "\n", + "random_network = create_random_network(N, p)\n", + "plot_graph(random_network, seed=2, figsize=(5, 3), title=\"Random Network\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Other option would be to use the `nx.gnp_random_graph` function from NetworkX, which generates random graphs with a given number of nodes and a given probability of edge creation.\n", + "\n", + "```python\n", + "G = nx.gnp_random_graph(N, p)\n", + "```\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Binimial distribution\n", + "\n", + "Degree distribution in a random network follows a binomial distribution." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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2PMrHqke5SHbtm3TSik9ePDgAsdnzJihAT1v3jyPnW+z2XRISIju2LGjdjgcBdqPHDlSA/r3338vduxS3FII73Mc2mkUnzzwh1ev48zNOlNA027z6rW8oSoXt3zllVcKvTd58mQNFCpuecstt2hAr1692n3MVdyyQ4cOOjIyUj/55JN65syZuk+fPhrQN910U4G+n3322UJFIos65tKgQQPds2fPAseGDh2qAX3llVfqmTNn6qeeekpXq1ZNh4aG6s2bN5fq+1GUH374QU+ePFlPnjxZX3jhhRrQDz/8sPvYP6WkpOgGDRrosLAw/cwzz+i3335b9+rVSwP6f//7X6G++/fvrwF9xx136P/973/6jjvu0IAeNWpUobavvvqqBnSvXr3022+/rZ955hkdGhqqW7RoUaBopid4urilXyVNTz31lAb02rVrCxzPzs7WISEh+uqrr/bY+VlZWVoppfv161eoH1cl1N27dxc7dkmahPA+x57fjETmyH7vX2vrauNap497/VqeJklTQZmZmTo6OrpESdOzzz6r58+fr9u2bauDgoJ0vXr19IQJE3ReXsEq9J5Immw2m37ppZd0ixYtdFBQkK5evboeOHCg/uMPz/5x4IrrbI9/O3z4sB41apSuWbOmtlgsukOHDnrhwoVF9p2dna2feuop3aBBAx0UFKTj4+P1pEmTCn2/XGbPnq3btWunLRaLrlWrlr7tttv0sWPHPPp5XXF5MmlSWvvPHNSVV17Jt99+W+Tti5dccgm7d+8+54Z+JT2/V69erFu3jhdffJHrr7+egIAA1qxZw3333cegQYP46KOPznqt3NzcAncLpKWlERcXR2pqKhERHtx5XQjh5ty2FrIzUE07o6rV9u619m+FE4kQ3RhTveZevZan5eTkcODAAeLj4923cQtRFRXn30JaWhqRkZHF+v3tV2uakpKSiIqKKrJ+Q2xsLCkpKeTlnb2SbUnPnzdvHr179+bxxx+nadOmxMfHc/vtt/PQQw+dt67HlClTiIyMdD/+XQlVCOFZWmvIyV974qU75/5JheeXHsg47fVrCSEqBr9Kms5XIMvVxlPnWywW4uPjufnmm1mwYAELFizg+uuv5/nnn+fFF188Z6xPPPEEqamp7se/7xoQQniYLRe0E1AQVPLbqEssND9pyjyN1ue/CUUIUfn5VZ2mkJAQjh8/XuR7xSl6VZLzs7KyuPjii+nYsSMLFy50t7vxxhu58cYbeeaZZ7jhhhto3rzoYXmLxVKqPX2EEKWUk3/nnCUYZSqHv/eCw8AcAA67UYU8RKbdhajq/GqkKSYmhpSUlCIriyYmJhIVFUVQ0Nkrxpbk/MWLF7Nnzx6GDBlSqO2QIUNwOp38+OOPZfg0QgiPys0fJbaUT7VgpRSEVjNeZEjpASGEnyVNXbp0wel0snHjxgLHc3Jy2LJlS4ECWWU931W9tKjKqna7vcBXIYTv6XJOmgAIq2ZcW5ImIQR+ljQNGzYMpVShAlnvvvsuWVlZBYpe7du3j507d5b6fNceQh9++GGhOFzHXJVLhRB+IH8RuLKWX9KkwmQxuBDiDL9a09S2bVvGjBnDrFmzGDx4MP369WPHjh3MmDGDnj17MmLECHfbyy+/nISEhAIVVEtyfv/+/enatSsrV67k0ksvZfDgwQB89tlnrFu3jiFDhhTY4VoI4WO5rjVN3r9zzs01PZebhbblogJlHaMQVZlfJU1glF1v2LAh77zzDitWrCAqKoqxY8cyadIkTMVY/Fnc881mM99++y1Tpkzhs88+47HHHkMpRdOmTZk6dSrjxo3z5scUQpSUD6bnVEAgOjjMWAiecRqq1ym3awsh/I9fFbesyEpSHEsIUTLanof+/VsAVMcrUWfZPd4bnAf+hJRDULcRprgW5XbdspDilkIYKnVxSyGEKJKrqGWgpVwTJgCVvxiczNPlel0hhP+RpEkI4f98ceecS9g/ilw6pcilEFWZJE1CCP+XW37bpxRiDQVzIDidkJ1W/tcXQvgNSZqEEH5P51cDVz4YaVJKues1SemByu/gwYMopZg4cWKx2k+cOBGlFAcPHvRqXMI/SNIkhPB/vpye40y9Jily6b/WrFmDUgqlFO+++26RbZRS9O/fv5wj8x+ffPIJt912G+3btycwMPC8yV5SUhI333wztWrVIjg4mM6dO7No0aIi2+bm5vLMM88QHx+PxWKhcePGPP/889hstiLbz5kzhw4dOhAcHEydOnW48847SU5OLrLtL7/8Qp8+fQgPDyciIoKrrrqKLVu2lPTje4QkTUII/+eenvNN0iQjTRXLxIkTyc7OLpdrPf3002RnZ9OgQYNyuV5ZvPXWWyxcuJDg4GAaN258zrYnT56ke/fufPbZZ4wePZrp06cTFhbG0KFDmT17dqH2w4YNY/LkyfTu3Zs333yTXr16MWHCBO66665Cbd944w1uueUWIiMjmT59Ovfccw8LFy6kV69eZGZmFmj7888/07NnTw4cOMCkSZN47rnn2LNnDz169ODPP/8s2zekNLTwiNTUVA3o1NRUX4ciRKXitNu0Y+MK7di4Qjtteb6PITfbJzGURHZ2tt6+fbvOzvb/WD1l9erVGtCdO3fWgH7xxRcLtQH0Nddcc85+Dhw4oAH97LPPeilS30lISNA2m01rrfWYMWM0oA8cOFBk20ceeUQDetmyZe5jdrtdd+nSRdeoUUOnp6e7j69YsUIDety4cQX6GDdunAb0Tz/95D6WnJysQ0JCdJcuXbTdbncfX7ZsmQb0Cy+8UKCPLl266PDwcH348GH3scOHD+vw8HDdt2/f837m4vxbKMnvbxlpEkL4N9cokzkQFRDokxCUOQCCw40XUnrArw0dOpROnToxdepUTpw4Uaa+FixYQLt27bBardSvX5+JEycW2pO0qDVNrmO7du3iySefpF69elgsFtq3b8/KlSsLXcdutzN16lRatWqF1WqlZs2aDBo0yOMjKfXr1ycgoHg1refPn0/jxo0ZMGCA+5jZbGbs2LGcPHmywOeYP38+AA8++GCBPlyv586d6z62dOlSsrKyGDt2LOZ/lA8ZMGAAjRo1KtB27969bNq0iSFDhhAbG+s+Hhsby5AhQ/j22285evRosT6Pp0jSJITwb76emnMJjQRAZ6b6No4y0lqjs7P98+GBWstKKV566SVSU1N54YUXSt3PsmXLGD16NAMGDOCVV16hefPmPPfcc0VON53NLbfcwrp16xg/fjyTJ08mOTmZ6667rtA6opEjR/L4449Tr149XnnlFe69915Wr15Nt27d+P333wu0PXXqFCkpKcV65ObmluqzHzlyhMTERC666KJC77mObdq0yX1s06ZNxMbGEhcXV6BtXFwcMTExhdoCdOvWrci+d+7cSUZGRrHaaq357bffSvrxysTvtlERQogCcvPXpgT5NmlSoZHolMNQwZMmcnJIv7a7r6MoUviyHyE4uMz99OnTh759+/LWW2/xwAMPlGq90datW9m0aZN7D9L77ruPwYMH88EHH3DPPfcUmVD8W1RUFMuXLzfuwAQuu+wyunbtyttvv82UKVMAWLVqFZ988glDhw5l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17M//vGPbNu2jRkzZjBv3jxCQ0M5cOAATz/9NO+88w55eXlEREQAnuUWxowZg9Fo5Le//S0xMTHs2LGDKVOm8Pe//5177rknyO/m+iorK6OyspLMzEwSEhIwGo0cP36c7du38/bbb1NQUEBcXBygv9hcafXq1Zw/f97vPj3GJj09nSVLlrQqu/KDT49xKS0tZfz48VitVh555BGSk5Opra2lsLCw1YK/eXl5jB8/nn79+rFu3ToAtm7dSnp6Orm5uaSkpATrLbSL+++/nyFDhviUFxYW8vvf/5777vvuZuZ6Gzdut5upU6eSm5vLggULyMrKwmaz8dZbb7Fw4UJOnDjBhg0bgC4+bpToFI4ePaouXrzoU75q1SoFqC1btnjLZs+erQwGg/r888+9ZfX19SoxMVElJycrt9vdEV0OunfeeUcBasOGDd4yPccmPz9fhYSEqJdeekkB6vHHH2+1X2+xAdSCBQu+t57e4qKUUnfffbdKSEhQFRUVV62XmpqqLBaLKisr85aVlZUpi8WiMjIy2rubncaSJUsUoPbs2eMt09u4yc3NVYBavnx5q3Kn06kGDRqkYmJivGVdedxI0tTJFRYWKkAtXbpUKaWU1WpVJpNJTZw40afuunXrFKCOHDnS0d0MiiNHjihAPfXUU0opfcemublZjRgxQk2fPl2dOXPGJ2nSY2xakian06nq6+v91tFjXD7++GMFqM2bNyullGpsbFQNDQ0+9b788ksFqEWLFvnsW7RokdI0TVVWVrZ7f4PNarWq6OholZCQoJqbm71lehs3//jHPxSgXnzxRZ99qampKj4+XinV9ceNzGnq5MrKygDo3bs34DlM7HQ6ueuuu3zqjh49GoCjR492XAc7kMPhoKqqirKyMj744AOWLl0KwLRp0wB9x2bjxo2cPHmSrVu3+t2v19j85S9/wWw2Y7FYiIuLIysri9raWu9+PcZl3759ACQmJnLfffcRERFBZGQkycnJ7Nq1y1uv5X23FRulFPn5+R3T6SDKycmhrq6Ohx9+mJCQEECf4yYtLY1u3brx4osvkpOTw9dff83JkydZuXIl+fn5rFmzBuj640bmNHViLpeL9evXYzQamTt3LgAVFRWA/5sJt5T5uwlxV7Bz506ysrK8zwcOHMiuXbtIT08H9BubM2fO8Oyzz7J69WoGDhxISUmJTx09xiYt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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# make a random graph with N nodes and average degree of k\n", + "np.random.seed(2)\n", + "\n", + "num_nodes = [100, 1000, 10000]\n", + "average_degree = 50\n", + "lambd = 50\n", + "colors1 = plt.cm.Reds(np.linspace(0.2, 0.6, len(num_nodes)))\n", + "\n", + "for i in range(len(num_nodes)):\n", + " probability = average_degree / num_nodes[i]\n", + " graph_b = nx.gnp_random_graph(num_nodes[i], probability)\n", + " degrees = [d for n, d in graph_b.degree()]\n", + " sns.kdeplot(degrees, fill=False, label=f\"N.bino={num_nodes[i]}\", color=colors1[i])\n", + "\n", + "s = np.random.poisson(lambd, num_nodes[-1])\n", + "sns.kdeplot(s, fill=False, label=f\"N.pois={num_nodes[i]}\", color='b')\n", + "\n", + "plt.xlabel(\"k\")\n", + "plt.ylabel(\"P(k)\")\n", + "plt.legend();" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### The evolution of a random network" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Connected Components:\n", + "Component 1: Size 19\n", + "Component 2: Size 1\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import networkx as nx\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Step 1: Generate a random graph (Erdős-Rényi model)\n", + "n = 20 # number of nodes\n", + "p = 0.12 # probability of edge creation\n", + "G = nx.erdos_renyi_graph(n, p)\n", + "\n", + "# Step 2: Find all connected components\n", + "connected_components = list(nx.connected_components(G))\n", + "\n", + "# Step 3: Calculate the size of each connected component\n", + "component_sizes = [len(component) for component in connected_components]\n", + "\n", + "# Display the graph and component sizes\n", + "print(\"Connected Components:\")\n", + "for i, component in enumerate(connected_components):\n", + " print(f\"Component {i + 1}: Size {len(component)}\")\n", + "\n", + "# Optionally, visualize the graph\n", + "plot_graph(G, seed=2, figsize=(5, 3));" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plotting the size of giant connected component vs average degree" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "N=10000, Ln(N)= 9.210340371976182\n", + "average k = 0.100, giant_component_size= 4\n", + "average k = 0.500, giant_component_size= 11\n", + "average k = 0.900, giant_component_size= 164\n", + "average k = 1.000, giant_component_size= 480\n", + "average k = 1.100, giant_component_size= 1682\n", + "average k = 2.001, giant_component_size= 8028\n", + "average k = 2.902, giant_component_size= 9363\n", + "average k = 3.803, giant_component_size= 9755\n", + "average k = 4.705, giant_component_size= 9909\n", + "average k = 5.606, giant_component_size= 9967\n", + "average k = 6.507, giant_component_size= 9989\n", + "average k = 7.408, giant_component_size= 9999\n", + "average k = 8.309, giant_component_size= 9997\n", + "average k = 9.210, giant_component_size= 9998\n" + ] + }, + { + "data": { + "image/png": "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bW2tVWtyNjIhhLB1EY6qsLAQXbt2RUREBHbv3m2cer9v3z7ExsZi6tSpWLFihY2rdB6LFi3CggULMH78eKxevRqurq62Lskp1dTU4Pvvv2+wvaCgAE888QTuuece/OMf/0CfPn3Qs2dPG1ToPIqLi9G1a1eoVCpkZWVBrVYDqGuli4iIQEVFBXJycti1bwVPP/003nrrLbz22mt47rnnjNtLSkrQt29fFBUVobCw0Dj+lMyPgcjC3n77bcyePRvx8fGYOHEiCgsLkZaWBnd3d+zbt8/YrUaW9d577+Gpp55Cly5dsGjRogZhKDAwEImJiTaqjgAgOzsb4eHheOKJJ/D+++/buhynsXLlSvz9739Hr169MH36dMhkMqxYsQInTpzAxx9/zNlNVnL27FlERUXhypUrGDduHG677TZcuXIFK1aswJ9//ok333wTzzzzjK3LdGy2XRfSOaxZs0YMHDhQKBQK4efnJx599FFx+vRpW5flVCZPniwANPk1bNgwW5fo9M6cOcOVqm3km2++EfHx8cLT01OoVCpx++23i40bN9q6LKdz/vx58eSTT4revXsLpVIpvLy8xG233SY+//xzW5fmFNhCRERERE6PI0qJiIjI6TEQERERkdNjICIiIiKnx0BERERETo+BiIiIiJweAxERERE5PQYiIiIicnoMREREROT0GIiIiIjI6TEQERERkdNjICJyMhqNBiqVCjKZDB9//LGty7EL2dnZkMlkxi8XFxf4+PigR48eePjhh/HJJ5+gsrLS1mUS0Q3gvcyInMyyZcvwz3/+E927d0dwcDB++eUXW5ckednZ2QgPD8fw4cMxdepUAEBZWRmys7Pxww8/4MCBA+jZsye++OIL3HLLLTaulojag4GIyMnExMTAy8sLjz76KJ588klkZWWhd+/eNqunrKwMnp6eNnv+1jAEoieeeALvv/9+g/1r1qzBlClTEBgYiN9//x2+vr7WLxJAVVUVXF1d4ebmZpPnJ7Jn7DIjciKHDx/G/v37MWXKFIwdOxZyuRwrV6407tfpdAgJCUG/fv0aPX/FihWQyWTYsGGDcVtVVRVeffVV9OnTBwqFAr6+vhg5ciQOHDhgcu62bduM3XTvvfceIiMjIZfL8e9//xsAsGfPHkyZMgW9evWCSqWCt7c34uPj8dVXXzVay6+//orbb78dSqUS/v7+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Pn/5y18AAG+++abJMQcPHjQZ89MSFxcXjB8/HpmZmfj8888bPab+azbXe0hk79hCROTgtmzZgnPnzmH+/PlNHvPwww/j+eefx4oVK3DbbbcBAO6//3507NgRycnJ0Gq1JoOpDWbNmoUtW7bg+eefx7Zt23DnnXfCx8cH586dw08//QSFQtHoejvXu/nmm9GnTx+88cYbKC8vR+/evXHy5EksX74cffv2RWZmpsnxixcvxp133on4+Hj885//RKdOnfDNN9/gypUrAOoGWBsMGjQIKSkpWLBgAQYMGIAxY8agc+fOyM/Px/79+7Fx40ZUV1e36md56tQprFmzBkDdwO/s7Gxs3rwZBw4cQK9evfDll1+atAT99a9/xdSpU7Fs2TIcPHgQI0eOhL+/P3JycrBz50788ccfxnWB7r33Xtx333349NNPcfnyZdx7773Iy8vD0qVLMXDgQOzfv9/kdTXnlVdewW+//YZx48bhq6++wpAhQ+Dh4YGzZ89i48aNiI6ONt62xVzvIZHds/q8NiKyqkceeUQAEIcPH272uH79+glPT0+TKehPPfWUACC8vLwanRYvRN0U8rffflvExMQIlUolVCqV6NGjhxg3bpz44YcfjMcZpt2vWrWq0etkZ2eLv/71r8Lf318olUoxaNAg8eWXX4oFCxY0mHIuhBDbt28X8fHxQqFQiI4dO4opU6YYp8fXXxrA4LvvvhN333236NChg/Dw8BChoaFixIgRYunSpc3+XIS4Nu3e8CWTyYSXl5fo3r27GD16tFi9erWoqKho8vxPPvlE3HbbbcLb21vI5XLRtWtX8dBDD4nPP//c5Ljy8nLxzDPPiODgYCGXy0X//v3F+vXrxZw5cwQAcfHiReOxhmn3TSkrKxOLFi0Sffv2FQqFQnh5eYmIiAgxffp0sWvXLpNjW/seEjky3rqDiBzGvn37MGjQIKSmpuL555+3dTlm88ADD2Dr1q3QarXG7kUiMi+OISIiuyOEaHB3eSEEXnvtNQBodt0eKWtsvZ8DBw5g8+bNuPPOOxmGiCyIY4iIyO5UVVWha9eumDBhAnr16oXi4mKkp6dj586dGDduHKKiomxdYrssWrQIBw4cwPDhw+Hr64tjx47hww8/hFwux0svvWTr8ogcGrvMiMju6HQ6PPbYY9ixYwfy8/Oh0+nQo0cPTJw4Ec8884zd3u1906ZNeO2113Ds2DEUFxfD19cXt99+OxYsWID+/fvbujwih8ZARERERE6PY4iIiIjI6TEQERERkdNjICIiIiKnx0BERERETo+BiIiIiJweAxERERE5PQYiIiIicnoMREREROT0/h9Ib2NCtc3yMAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "N = int(1e4)\n", + "print(f\"N={N}, Ln(N)= {np.log(N)}\")\n", + "k_avg = [.1, 0.5, 0.9, 1.0] + np.linspace(1.1, np.log(N), 10).tolist()\n", + "giant_component_sizes = []\n", + "for i in range(len(k_avg)):\n", + " p = k_avg[i] / N \n", + " G = nx.erdos_renyi_graph(N, p)\n", + " connected_components = list(nx.connected_components(G))\n", + " component_sizes = [len(component) for component in connected_components]\n", + " giant_component_size = max(component_sizes)\n", + " giant_component_sizes.append(giant_component_size)\n", + " \n", + " print(f\"average k = {k_avg[i]:10.3f}, giant_component_size={giant_component_size:10d}\")\n", + " \n", + "giant_component_sizes = np.array(giant_component_sizes)/N\n", + "plt.plot(k_avg, giant_component_sizes, marker='o', label='Giant Component Size')\n", + "plt.xlabel(r'Average Degree')\n", + "plt.ylabel(r'$N_G / N$');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Degree distribution of real networks" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dict_keys(['Collaboration', 'Internet', 'PowerGrid', 'Protein', 'PhoneCalls', 'Citation', 'Metabolic', 'Email', 'WWW', 'Actor'])" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from netsci.utils import load_sample_graph, list_sample_graphs\n", + "from netsci.analysis import graph_info\n", + "\n", + "graphs = list_sample_graphs()\n", + "graphs.keys()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Successfully loaded Collaboration\n", + "================================\n", + "Scientific collaboration network based on the arXiv preprint archive's \n", + " Condense Matter Physics category covering the period from January 1993 to April 2003. \n", + " Each node represents an author, and two nodes are connected if they co-authored at \n", + " least one paper in the dataset. Ref: Leskovec, J., Kleinberg, J., & Faloutsos, C. (2007). \n", + " Graph evolution: Densification and shrinking diameters. \n", + " ACM Transactions on Knowledge Discovery from Data (TKDD), 1(1), 2.\n", + "Graph information\n", + "Directed : False\n", + "Number of nodes : 23133\n", + "Number of edges : 93439\n", + "Average degree : 8.0784\n", + "Connectivity : disconnected\n" + ] + } + ], + "source": [ + "G_collab = load_sample_graph('Collaboration', verbose=True)\n", + "graph_info(G_collab)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Figure 3.6" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from scipy.stats import poisson\n", + "from collections import Counter\n", + "\n", + "fig, ax = plt.subplots(1,3, figsize=(15,4))\n", + "\n", + "c = 0\n", + "for net in [\"Internet\", \"Collaboration\", \"Protein\"]:\n", + " G = load_sample_graph(net)\n", + " degrees = [G.degree(n) for n in G.nodes()]\n", + " degree_count = Counter(degrees)\n", + " k, pk = zip(*degree_count.items())\n", + " k = np.array(k)\n", + " pk = np.array(pk)/sum(pk)\n", + "\n", + "\n", + " ax[c].loglog(k, pk, 'k.', label='real')\n", + " ax[c].set_xlabel(\"k\")\n", + " ax[c].set_ylabel(\"pk\");\n", + " ymin, ymax = np.min(pk)*0.9, np.max(pk)*1.1\n", + "\n", + " # add poisson distribution to graph\n", + "\n", + " k = np.arange(0, max(degrees)+1)\n", + " pk_poisson = poisson.pmf(k, np.mean(degrees))\n", + " ax[c].loglog(k, pk_poisson, 'r', label='poisson')\n", + " # plt.ylim([1e-5, 1])\n", + " ax[c].legend(frameon=False);\n", + " ax[c].set_ylim([ymin, ymax])\n", + " ax[c].set_title(net)\n", + " c += 1\n", + "\n", + "plt.tight_layout()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Clustering coefficient\n", + "\n", + "The local clustering coefficient of a random network is\n", + "\n", + "$$\n", + "C_i = p= \\frac{⟨k⟩}{N}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To analyze the dependence of the average path length $d(p)$ and the clustering coefficient $\\langle C(p) \\rangle$ on the rewiring parameter $p$ for a small-world network, you can use the Watts-Strogatz model. This model begins with a regular lattice and introduces randomness by rewiring each edge with probability $p$. Here's a step-by-step guide on how to perform this analysis:\n", + "\n", + "1. **Generate a regular lattice**: Create a regular ring lattice with $N$ nodes where each node is connected to its $k$ nearest neighbors.\n", + "\n", + "2. **Rewire edges**: For each edge in the lattice, rewire it with probability $p$. This involves replacing the existing edge with a new edge that connects the node to a randomly chosen node in the network.\n", + "\n", + "3. **Compute $d(p)$ and $\\langle C(p) \\rangle$**:\n", + " - $d(p)$ is the average shortest path length between all pairs of nodes in the network.\n", + " - $\\langle C(p) \\rangle$ is the average clustering coefficient of all nodes in the network.\n", + "\n", + "4. **Normalize by $d(0)$ and $\\langle C(0) \\rangle$**:\n", + " - $d(0)$ is the average path length of the regular lattice (when $p=0$).\n", + " - $\\langle C(0) \\rangle$ is the average clustering coefficient of the regular lattice (when $p=0$).\n", + "\n", + "5. **Plot the results**: Plot $d(p)/d(0)$ and $\\langle C(p) \\rangle / \\langle C(0) \\rangle$ as functions of $p$ on a log scale to observe the small-world phenomenon." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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x44ds2rfvn27MBqN4qWXXjK3DRgwQFxxxRXm9U8++UQYDAZx7733ilatWpnblyxZIgCIzZs3m9tGjx4tbL82ctuoUaNUrwWAGD16tF2bwWAQW7ZssWq/9dZbRXBwsCgqKjK3de/eXYSEhIicnBxzW3V1tRgyZIjqudVYunSpACBatGghLly4YG6/cOGCaNGihYiJiRHFxcXm9uTkZAFAfPjhh1bnqaysFMnJySIqKsrqb11ZWSkGDhwoAIgff/zR7m8zePBgUV1dbW7fsWOHMBgMol+/flbnV/ZBZsOGDQKAeP31163aAQgA4vPPP7dqnzBhggAgPv74Y7vrz8rKMrfJ/2NLly41tx06dEgAsPp/kT9L7e/8zTffCABi3rx5Vu2ffvqpACD+9a9/2R1jS+/evQUAMXHiRKv2zMxMAUA8+OCDLs9B6jd0fRO/5pVXXkHjxo3RpEkTdOrUCQsWLMCgQYPw5Zdfmve5cOEC/vvf/+L2229HeHg4zpw5Y361bNkSbdu2xTfffGPev0+fPsjLy8PevXsBAN9++y06duyIESNG4NChQzh06JC53WQyoXv37pr6+uSTT+q6th49euDGG2+0auvTpw8qKyvNrt5Tp05h69atuOOOO9C+fXvzfgaDAU8//bSuzwOAhx9+GDExMeb1mJgY/OMf/0BBQQGysrKs9o2Li8Po0aOt2nbu3IkjR45gzJgxSExMNLcbjUY899xzAIDMzEy7z3366aethgw6d+6MW265Bd9++y0KCwvN7Q0aNAAAVFdXo6CgAGfOnMF1112HmJgYbN261e687du3twvwevbZZwEAn3/+udO/hTfo168fWrdujSVLlli1L1myBDExMbjrrrs0n0vut8zgwYPRvn17RpsTjlET/2bcuHFYv349vvrqK7z55puIi4vDqVOnEBERYd7nzz//RHV1NZYtW4bGjRvbvfbt24dTp06Z9+/Tpw8ASYjlZZ8+fdCrVy8EBweb27OyspCWluYyUlimXbt2uq6tdevWdm2ya/fs2bMAYH5oUIq0zFVXXaXr8wDJlWtLhw4dAMBuzL9169Z2ruODBw8CAK655hq788hj2PI+Wj63urrafI2AdC/S09PRoEEDNGzY0HwPCwoKcP78eU3nveKKK9CwYUO76/EFBoMB48ePx65du7Bz504A0pDJxo0bce+991r9nzqjYcOGaNq0qV371VdfjTNnzqCgoMCr/SZ1C45RE7+mbdu26NevHwBpnPOmm25Cz5498fDDD5uDoMTlAKYRI0Zg7NixqudR/mCmpKSgUaNG2LhxI2677TYcOnQIffv2RVRUFLp06YKNGzeiZ8+eOHHiBCZOnKi5ryaTSde1OYtClq9JOAjOche14iPyZ9huU7seb/bH9nO3bduG/v37o23btnjttdfQqlUrREREwGAw4J577kF1dbXdORwVUxFC+KzQii0PPPAApkyZgsWLF2PBggVYunQpqqur8eCDD2o+h7PrcLadBAYUalKnuPHGG3HffffhX//6FyZMmIAbb7wRbdu2hcFgQFlZmVnUnREUFIRevXph06ZNWL9+PYKDg9G7d28AQN++fbF48WL07NkTgMX6ri1kqzsnJ8dum1qbK/bs2YM777zTqk0eAlCz8G1p06YNAOCPP/6w2/b7779b7WP7GbZufjmAr2XLlgCAlStXoqqqCl999RVatWpl3u/ixYuq1rR8Pbbk5eWhoKBA0/V4g4SEBNx5551YsWIF3nzzTSxbtgwpKSm44YYbNJ/j/PnzOHnypJ1VnZOTg/j4eERHR3u726QOQdc3qXO8+OKLMBqNePHFFwFI7uJbb70Va9euxY8//mi3vxAC+fn5Vm19+vTB+fPnMWfOHHTt2hVRUVHm9lOnTmHBggVo2LAhUlJSfH9BTkhISEC3bt3w//7f/8O+ffvM7UIIvPnmm7rP995771m5UQsKCvD++++jYcOGuPnmm10en5KSguTkZHz00UfIzc01t1dXV2PmzJkApLFVW9544w0ra3znzp3YsGED+vTpYxYh2cNga7XPmDFD1ZoGgH379tmN4b7++usO++EukZGRDh8WAOChhx5CQUEB/vGPf+DIkSO6rGmZ1157zWr9888/x759+1hkhdCiJnWPtm3b4p577sEnn3yC77//HmlpaXjvvfdw00034eabb8b999+PlJQUVFdX4+DBg1i7di1GjRplVb9ZtpT37NmDF154wdyempqK8PBw7NmzB4MGDfI4vccbzJo1C3379kXPnj3x6KOPonHjxvjyyy/NwqHHLRofH4/u3btj7NixEEJg6dKlOHr0KBYvXmwO5HKG0WjEggULkJGRga5du+Lvf/87GjVqhMzMTHz33XcYP348UlNT7Y47cuQIBgwYgDvvvBN5eXmYP38+IiIiMGvWLPM+gwcPxuzZs3HrrbfioYceQmhoKNavX4/ffvsN8fHxqv3p2LEj7rvvPowfPx7t2rVDVlYWVq9ejd69e2PEiBGa/y6u6N69OzZs2IA333wTSUlJaNCgAe644w7z9ltuuQWtW7fGxx9/jIiICIwcOVLX+ePj45GZmYkTJ04gPT3dnJ6VkJCAadOmee06SB2lVmLNCXGBnDozc+ZM1e179uwRQUFBIj093dyWn58v/vnPf4p27dqJsLAwERMTI6699loxYcIE8ccff9idIyEhQQAQ3377rVV7nz59BAAxd+5cu2OcpWc5Ag7Ss9TSfdTSiIQQ4rvvvhM9e/YU4eHhIi4uTowZM8acSvTwww87/Gzb865fv15MmTJFJCUlidDQUHHNNdeITz75xG7/5ORk0bt3b4fn+/7770X//v1FdHS0CAsLE9dee6145513rFKwhLD8bU6fPi3uu+8+ERsbKyIiIsTNN98sduzYYXfezz//XKSkpAiTySTi4uLE8OHDxZEjR1T7I/8N169fL7p16ybCw8NFkyZNxGOPPSYKCwtVr9/d9KycnBzRp08fERkZKQCI5ORku77PmDHDaZqeI3r37i2Sk5PFgQMHxJ133imioqJEZGSkuPPOO8X+/ft1nYvUTwxCeDlahRBSI+zYsQNdu3bFzJkz7VJ7bFm2bBkeeOABZGVlIT09vWY6GGC89dZb+L//+z9s3rwZaWlpmo9LT0/H4cOHnVZfI4FN7fv1CCFOEULg0qVLdm3ymGb//v1ro1tEQWVlJd577z106NBBl0gTogWOURPi55SVlSE5ORn33XcfrrzySly4cAFr167Fli1bMHLkyFoPeAtkDh06hC1btmDt2rU4ePCgat10QjyFQk2InxMSEoLbbrsNa9euRV5eHqqqqsy5xk899VRtdy+g+e677/DAAw8gPj4eU6ZM8WoAGyEyHKMmhBBC/BiOURNCCCF+DIWaEEII8WMo1IQQQogfQ6EmhBBC/BgKNSGEEOLHUKgJIYQQP4ZCTQghhPgxFGpCCCHEj6FQE0IIIX7M/wexj9vQDqJ9+QAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import numpy as np\n", + "import networkx as nx\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Parameters\n", + "N = 1000 # Number of nodes\n", + "k = 10 # Each node is connected to k nearest neighbors in ring topology\n", + "p_values = np.logspace(-4, 0, num=100) # Rewiring probabilities\n", + "\n", + "# Initialize lists to store results\n", + "average_path_lengths = []\n", + "clustering_coefficients = []\n", + "\n", + "# Generate the initial regular lattice\n", + "G0 = nx.watts_strogatz_graph(N, k, 0)\n", + "d0 = nx.average_shortest_path_length(G0)\n", + "C0 = nx.average_clustering(G0)\n", + "\n", + "for p in p_values:\n", + " G = nx.watts_strogatz_graph(N, k, p)\n", + " d = nx.average_shortest_path_length(G)\n", + " C = nx.average_clustering(G)\n", + " average_path_lengths.append(d / d0)\n", + " clustering_coefficients.append(C / C0)\n", + "\n", + "# Plotting\n", + "plt.figure(figsize=(5, 4))\n", + "\n", + "# Average path length plot\n", + "plt.plot(p_values, average_path_lengths, marker='o', linestyle='-', color='blue', label=r\"$d(p)/d(0)$\")\n", + "\n", + "# Clustering coefficient plot\n", + "plt.plot(p_values, clustering_coefficients, marker='o', linestyle='-', color='red', label=r\"$\\langle C(p) \\rangle / \\langle C(0) \\rangle$\")\n", + "plt.xscale('log')\n", + "plt.xlabel('Rewiring probability p')\n", + "plt.legend(frameon=False)\n", + "plt.tight_layout()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_sources/examples/chap_04.ipynb.txt b/_sources/examples/chap_04.ipynb.txt new file mode 100644 index 0000000..b7f5012 --- /dev/null +++ b/_sources/examples/chap_04.ipynb.txt @@ -0,0 +1,561 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# [Chapter 4](https://github.com/Ziaeemehr/netsci/blob/main/docs/examples/chap_04.ipynb)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### **THE SCALE-FREE PROPERTY**\n", + "\n", + "Code by : Abolfazl Ziaeemehr \n", + "- https://github.com/Ziaeemehr\n", + "\n", + "\"Open" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# uncomment and run this line to install the package on colab\n", + "# !pip install \"git+https://github.com/Ziaeemehr/netsci.git\" -q" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from netsci.utils import generate_power_law_dist, generate_power_law_dist_bounded" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "LABELSIZE = 13\n", + "plt.rc('axes', labelsize=LABELSIZE)\n", + "plt.rc('axes', titlesize=LABELSIZE)\n", + "plt.rc('figure', titlesize=LABELSIZE)\n", + "plt.rc('legend', fontsize=LABELSIZE)\n", + "plt.rc('xtick', labelsize=LABELSIZE)\n", + "plt.rc('ytick', labelsize=LABELSIZE)\n", + "# set legend font size \n", + "plt.rc('legend', fontsize=10)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Comparing Poisson and Powe-law Distributions" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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27aNzp074+rqyujRo3F2dub3339n5MiRnD17Nt3uAe3bt8fHx4fJkydz7do1Zs+eTefOnenWrRsLFy5k0KBBWFlZMXv2bHr06MGlS5coV66c3jb+/PNPZs2axbBhw/Dw8GDLli18/fXXhIaGsmLFCl25oKAg/v33X7p06YK3tzfx8fFs2LCBd999l8jISMaPH58mvj59+mBra8tHH32ESqXC09Mz3fd+6dIl2rRpg4eHh+5C9/79+xw6dIj//vuPpk2bAhAeHk79+vV5+PAh77//PpUrV+bQoUPMnDmTPXv2cOjQIaytrfW2PX78eJ4+fcr777+PhYUFP/30EwMHDqRChQo0adIk0+8kJSWFDh06sG/fPrp27cro0aMJCwtj3rx57Nixg0OHDlGlShWaNWvGypUr+fDDD3F1deXzzz8HoEaNGpluPyNXrlwB0DX5z8lv43ndu3dn3759vPfeewQEBJCQkMDly5cJCgrSxbpq1Sr69+9P06ZNmTRpEjY2NoSHh7Njxw4iIiJ0311Of6fu7u5MmDCByMhIfvjhBzp27EhoaCj29vaZxn7mzBk2bdrEG2+8QdmyZUlKSmL79u18+umnXL9+nZ9//jnNOln9zseMGcOsWbNo1KgRI0aMIDo6mqlTp1KqVKlMY8qKF7/DrP52S5cujZ+fH7t379YlcykpKezfvx8TExN2797Np59+CmhaGB06dIiePXvq9nvz5k0aNWpEUlIS77zzDuXLl+fatWvMnz+fvXv3cvz4cRwdHfVizerfaXYkJSXx/fff0717d7p27YqNjQ1Hjx5l8eLF/Pvvv5w4cULX7adly5YsX76cJ0+eYGNjA8CePXswMTFh//79JCUl6cru2bMHHx+fNMex7LK0tKR///5MnjyZv//+O9Nj9cv+fqpUqcLKlSvp168fTZs25d133wU0Nxmet2nTJubMmcMHH3zA+++/j4ODw0vj7N+/P6ampnzyySfExcXx888/06FDB7Zt20bbtm2z/b4///xzXFxc+OOPP5g5c6bu99m4ceMM18mv425wcDCdOnWievXqfPrppzg5OXHnzh327t3L5cuXqVq1arbfnxCiiFCEEKIQcXFxUezt7bNcPiUlRfHx8VHs7e2V8PBwveXt27dXAOXAgQO65QMGDFAAZcSIEXrb+eijjxRA8fb2VuLi4nTLT58+rQDK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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from scipy.stats import poisson\n", + "\n", + "# Parameters\n", + "mean_poisson = 11\n", + "alpha_power_law = 2.1\n", + "x_values = np.arange(1, 1000)\n", + "\n", + "# Poisson Distribution\n", + "poisson_pmf = poisson.pmf(x_values, mean_poisson)\n", + "\n", + "# Power Law Distribution\n", + "power_law_pdf = x_values ** (-alpha_power_law)\n", + "# Normalize power-law PDF to make it a valid probability distribution\n", + "power_law_pdf /= np.sum(power_law_pdf)\n", + "\n", + "# Plotting\n", + "\n", + "fig, ax = plt.subplots(1,2, figsize=(12,4))\n", + "\n", + "ax[0].plot(x_values, poisson_pmf, label='Poisson Distribution (mean=11)')\n", + "ax[0].plot(x_values, power_law_pdf, label='Power Law Distribution (α=-2.1)')\n", + "ax[0].set_xlim([0,50])\n", + "ax[0].set_ylim([0,0.15])\n", + "ax[0].set_xlabel('x')\n", + "ax[0].set_ylabel(r'$p_k$')\n", + "fig.suptitle('Comparison of Poisson and Power Law Distributions')\n", + "ax[0].legend(frameon=False)\n", + "ax[1].loglog(x_values, poisson_pmf, label=\"poisson\")\n", + "ax[1].loglog(x_values, power_law_pdf, label=\"powerlaw\")\n", + "ax[1].set_ylim([1e-6, 1])\n", + "ax[1].set_xlabel('x')\n", + "ax[1].set_ylabel(r'$p_k$')\n", + "ax[1].legend(frameon=False);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### load sample graphs of the book" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['Actor', 'Collaboration', 'Internet', 'PowerGrid', 'Protein', 'PhoneCalls', 'Citation', 'Metabolic', 'Email', 'WWW']\n" + ] + } + ], + "source": [ + "from netsci.utils import list_sample_graphs, load_sample_graph\n", + "from netsci.analysis import graph_info\n", + "\n", + "nets = list(list_sample_graphs().keys())\n", + "print(nets)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Graph information\n", + "Directed : True\n", + "Number of nodes : 23133\n", + "Number of edges : 93439\n", + "Average degree : 8.0784\n", + "Connectivity : disconnected\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from collections import Counter\n", + "from scipy.stats import poisson\n", + "G_collab = load_sample_graph(\"Collaboration\")\n", + "graph_info(G_collab, quick=True)\n", + "in_degrees = list(dict(G_collab.in_degree()).values())\n", + "out_degrees = list(dict(G_collab.out_degree()).values())\n", + "in_degree_count = Counter(in_degrees)\n", + "out_degree_count = Counter(out_degrees)\n", + "\n", + "k_in, pk_in = zip(*in_degree_count.items())\n", + "k_out, pk_out = zip(*out_degree_count.items())\n", + "\n", + "plt.figure(figsize=(6,4))\n", + "plt.loglog(k_in, pk_in, 'r.', label=r\"$k_{in}$\")\n", + "plt.loglog(k_out, pk_out, 'b.', label=r\"$k_{out}$\")\n", + "plt.legend(frameon=1)\n", + "plt.xlabel(r\"$k_{in}, k_{out}$\")\n", + "plt.ylabel(\"pk\");" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Calculating best minimal value for power law fit\n", + " α = 3.042, σ = ± 0.327\n", + "Calculating best minimal value for power law fit\n", + " α = 5.496, σ = ± 0.937\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Values less than or equal to 0 in data. Throwing out 0 or negative values\n", + "Values less than or equal to 0 in data. Throwing out 0 or negative values\n" + ] + } + ], + "source": [ + "# find the exponent by fitting a power law by powerlaw package\n", + "import powerlaw\n", + "\n", + "for x in [k_in, k_out]:\n", + " fit = powerlaw.Fit(x) # xmax=50 we can constrain the max value for fitting\n", + " print(f\" α = {fit.power_law.alpha:6.3f}, σ = ± {fit.power_law.sigma:6.3f}\") # the exponent" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Generate the powerlaw distribution (bounded)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[0;31mSignature:\u001b[0m \u001b[0mgenerate_power_law_dist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mN\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mfloat\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mxmin\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mfloat\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mDocstring:\u001b[0m\n", + "generate power law random numbers p(k) ~ x^(-a) for a>1\n", + "\n", + "Parameters\n", + "-----------\n", + "N:\n", + " is the number of random numbers\n", + "a:\n", + " is the exponent\n", + "xmin:\n", + " is the minimum value of distribution\n", + "\n", + "Returns\n", + "-----------\n", + "value: np.array\n", + " powerlaw distribution\n", + "\u001b[0;31mFile:\u001b[0m ~/git/workshops/netsci/netsci/utils.py\n", + "\u001b[0;31mType:\u001b[0m function" + ] + } + ], + "source": [ + "generate_power_law_dist?" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[0;31mSignature:\u001b[0m\n", + "\u001b[0mgenerate_power_law_dist_bounded\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mN\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mfloat\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mxmin\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mfloat\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mxmax\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mfloat\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mseed\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mint\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\n", + "\u001b[0;34m\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mDocstring:\u001b[0m\n", + "Generate a power law distribution of floats p(k) ~ x^(-a) for a>1\n", + "which is bounded by xmin and xmax\n", + "\n", + "parameters :\n", + " N: int\n", + " number of samples in powerlaw distribution (pwd).\n", + " a: \n", + " exponent of the pwd.\n", + " xmin: \n", + " min value in pwd.\n", + " xmax: \n", + " max value in pwd.\n", + "\u001b[0;31mFile:\u001b[0m ~/git/workshops/netsci/netsci/utils.py\n", + "\u001b[0;31mType:\u001b[0m function" + ] + } + ], + "source": [ + "generate_power_law_dist_bounded?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "plotting the powerlaw distributions" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "def plot_distribution(vrs, N, a, xmin, ax, labelsize=10):\n", + "\n", + " # plotting the PDF estimated from variates\n", + " bin_min, bin_max = np.min(vrs), np.max(vrs)\n", + " bins = 10**(np.linspace(np.log10(bin_min), np.log10(bin_max), 100))\n", + " counts, edges = np.histogram(vrs, bins, density=True)\n", + " centers = (edges[1:] + edges[:-1])/2.\n", + "\n", + " # plotting the expected PDF\n", + " xs = np.linspace(bin_min, bin_max, N)\n", + " expected_pdf = [(a-1) * xmin**(a-1) * x**(-a) for x in xs] # according to eq. 4.12 network science barabasi 2016\n", + " ax.loglog(xs, expected_pdf, color='red', ls='--', label=r\"$x^{-\\gamma}$,\"+ r\"${\\gamma}$=\"+f\"{-a:.2f}\")\n", + " ax.loglog(centers, counts, 'k.', label='data')\n", + " ax.legend(fontsize=labelsize)\n", + " ax.set_xlabel(\"values\")\n", + " ax.set_ylabel(\"PDF\")\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1.000035809608483 74.39513593875918\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "np.random.seed(2)\n", + "\n", + "N = 10000\n", + "a = 3.0\n", + "xmin = 1\n", + "xmax = 100\n", + "\n", + "fig, ax = plt.subplots(1, figsize=(5,3))\n", + "x = generate_power_law_dist_bounded(N, a, xmin, xmax)\n", + "print (np.min(x), np.max(x))\n", + "plot_distribution(x, N, a, xmin, ax)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Calculating best minimal value for power law fit\n", + "fit.power_law.alpha=2.995340848455978\n", + "fit.power_law.sigma=0.02600579145725683\n" + ] + } + ], + "source": [ + "# find the exponent by fitting a power law by powerlaw package\n", + "\n", + "import powerlaw\n", + "fit = powerlaw.Fit(x) # xmax=50 we can constrain the max value for fitting\n", + "print(f\"{fit.power_law.alpha=}\") # the exponent\n", + "print(f\"{fit.power_law.sigma=}\") # standard error" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Generate descereted power law distribution" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAF9CAYAAAD4A0k5AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAABL6ElEQVR4nO3deVxVdf7H8de91w0EVMIyvYYiuORSqbSYGTmVY4s2/dLUyXRi1CbNyNTSHJcsyTZzadFkstLSmhknKy1NUafUXFKzkgQV5aaTO4soCJzfHzeuIDvcy114Px+P+/jBOd97zvc258f9+F0+H5NhGAYiIiIiPsLs7g6IiIiIOJOCGxEREfEpCm5ERETEpyi4EREREZ+i4EZERER8ioIbERER8SkKbkRERMSnKLgRERERn1LL3R3wRXl5eRw5coTAwEBMJpO7uyMiIuI1DMMgPT2dpk2bYjZXbgxGwY0LHDlyhObNm7u7GyIiIl4rJSUFq9VaqfcquHGBwMBAwP4/TFBQkJt7IyIi4j3S0tJo3ry547u0MhTcuED+VFRQUJCCGxERkUqoyrIOLSgWERERn6LgRkRERHyKghsRERHxKVpzIyIiLpebm8uFCxfc3Q3xELVr18Zisbjs+gpuRETEpTIyMrDZbBiG4e6uiIcwmUxYrVYCAgJccn0FNyIi4jK5ubnYbDb8/f1p3LixEpsKhmFw/PhxbDYbERERLhnBUXAjIiIuc+HCBQzDoHHjxvj5+bm7O+IhGjduTHJyMhcuXHBJcKMFxSIi4nIasZGCXP08KLjxQjabjfj4eGw2m7u7IiIi4nEU3HiZuLg4QkND6dmzJ6GhocTFxbm7SyIiIh5FwY0XsdlsDB8+nLy8PMBefXzEiBEawRERESlAwY0XSUxMdAQ2+XJzc0lKSnJTj0REpCQ//vgjrVq14n//+x8AJ06c4NprryU7O9vNPfN9Cm68SEREBGZz4f/JLBYL4eHhbuqRiIiUpEOHDgwYMIB169YBMG3aNJ5++mnq1Knjlv7ExsYSGRlJYGAgl19+Offddx+//PJLme+bOnUqJpOp0KtJkyaF2rz55pu0bNmSevXq0aVLF/773/+66mOUi4IbL2K1WlmwYIFj25zFYmH+/PlYrVY390xEpGbq0qULHTp0KPI6cuQIAO3bt2ffvn0kJSWxY8cOBgwY4La+btiwgZEjR7JlyxbWrFlDTk4Od955J2fPni3zve3bt+fo0aOO1549exznli1bRkxMDM8++yw7d+7klltuoXfv3hw+fNiVH6d0hjhdamqqARipqakuuX5KSooRHx9vpKSkuOT6IiLOcu7cOePnn382zp075+6uVNiHH35o1K1b17DZbI5j0dHRRseOHY0zZ86U6xpbt241Bg4caPTr189Yt25die0iIiKMG2+80cjMzHQcy8vLM2644QZj3Lhxlf8QpTh27JgBGBs2bCi13ZQpU4xrrrmmxPPXX3+98eijjxY61rZtW+OZZ54p8T2lPRfO+A7VyI0XslqtREVFacRGRMSFBgwYQJs2bYiNjQXs00pfffUVq1atokGDBuW6RkREBGvWrCEzM5PbbrutxHbLli1j586dfPvtt45jS5Ys4eDBg0yaNAmAGTNmEBAQUOqrItNBqampAAQHB5fZNjExkaZNm9KyZUsGDBjAgQMHAMjOzmbHjh3ceeedhdrfeeedbNq0qdx9cTZlKBYRkepX2lSIxQL16pWvrdkMBTMfl9S2fv2K9Q97orkXXniBBx54gKZNmzJ79mz++9//0qxZs3Jfo2HDhgC8+OKLpba77rrruOaaa0hISOD2228nMzOTCRMmMH36dIKCggB49NFH6d+/f6nXKW/fDMNgzJgxdO/enQ4dOpTa9oYbbuD999+ndevW/Pbbbzz//PN069aNn376iaysLHJzc7niiisKveeKK65wLKR2BwU3IiJS/UormHjXXfDFFxd/v/xyyMwsvu2tt8L69Rd/b9ECTpwo2q6SRTvvuecerr76aqZNm8bq1atp3759hd5/4cIFgoODywwgAFq3bu1Y4PvSSy8RHBxMdHS043xwcHC5RlmWLFnCiBEjHL+vWrWKW265pVCbUaNG8cMPP/DNN9+Ueb3evXs7fu7YsSM33XQTrVq14r333nOsIbo047BhGG7NSq3gRkREpARfffUVCQkJxY5OlEdCQgJt2rQpV9s2bdqwceNGbDYbL7/8Mp999lmhukszZsxgxowZpV5j1apV9OnThxtuuMFx7NLRnMcff5wVK1awcePGSi1vqF+/Ph07diQxMZGQkBAsFkuRUZpjx45V6r+Xsyi4ERGR6peRUfK5SwspHjtWcttL0mOQnFzpLl3q+++/p1+/fsyfP5+lS5fy97//nU8++aRC1+jYsSMrVqwoV9vWrVvzzjvv8Mwzz3DHHXfQs2fPQufLOy3l5+dHYGBgkXOGYfD444+zfPly1q9fT8uWLcv/QQrIyspi79693HLLLdSpU4cuXbqwZs0a/vSnPznarFmzhr59+1bq+s6g4EZERKpfRdbAuKptKZKTk7n77rt55plnGDx4MFdffTWRkZHs2LGDLl26OOUel2rdujUpKSn885//5McffyxyvrzTUiUZOXIkH374IZ9++imBgYGO0ZYGDRo4KrbPmzeP5cuXs3btWsf7xo4dy7333stVV13FsWPHeP7550lLS2PIkCEAjBkzhsGDB9O1a1duuukmFixYwOHDh3n00Ucr3deq0m4pERGRAk6dOkXv3r3p06cPEydOBOz5bO69916effZZp9xj0aJFRdaktG7dGrCvh3FFcta33nqL1NRUoqKiuPLKKx2vZcuWOdqcOHGC/fv3F3qfzWZj4MCBtGnThvvvv586deqwZcsWQkNDAXjwwQd5/fXXee6557j22mvZuHEjK1eudJx3B5NhVHKVlZQoLS2NBg0akJqa6ljlLiJSE50/f56DBw86steK3dSpU1m/fj3rCyyGPnXqFJdddhm7d++mU6dO7utcNSjtuXDGd6impURERKrZV199xezZswsd2717N3Xq1KFdu3Zu6pXvUHAjIiJSzTZv3lzk2O7du7n66qupXbu2G3rkW7TmRlzGZrMRHx+PzWZzd1dERDxeTEwMO3fudHc3fIKCG3GJuLg4QkND6dmzJ6GhocTFxbm7SyIiUkMouBGns9lsDB8+nLy8PADy8vIYMWKERnBERKRaKLgRp0tMTHQENvlyc3NJSkpyU49ERKQmUXAjThcREYH5kqyhFovFJXkbRERELqXgRpzOarWyYMECR00Ui8XC/PnzK1XDREREpKIU3BQjJyeHJ554guDgYBo2bEh0dDTnz593d7e8SnR0NMnJycTHx5OcnFyosq2IiIgrKbgpxowZM4iPj2fPnj0kJiby888/M378eHd3CzZsgClT4Nw5d/ekXKxWK1FRURqxERGRaqXgphgLFy5k4sSJNGvWjMaNGzN16lTee+89cnNz3depCxfgscfgueegQwdYtcp9fREREfFgXh3cxMbG0q9fP8LCwjCZTLRo0aLU9h999BFdunTBz8+PkJAQBg4cyKFDhwq1OXPmDCkp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1q188803rFmzho0bN/LUU08xefJkPv30U6Kiosr7n0FEqkjBjYh4jEGDBjFu3Djef/99brvtNj7++GN69uyJ1WoFYM+ePfzwww9MnjyZadOmFXrvwoULy3WP4OBgAE6dOuX4GeDAgQNF2rZu3Zovv/wSq9VKx44dy7y22WymR48e9OjRA7CP/HTp0oUpU6awYcOGcvVPRKpO01Ii4jEaN25M7969+c9//sOSJUs4c+ZMoSkpi8UCXBxRyffjjz+Weyt469atAfj6668LHX/11VeLtM0fMZo4cWKxIzvHjh1z/HzixIli7xUYGMipU6fK1TcRcQ6N3IiIRxkyZAgrVqzgySefJCAggPvvv99xrl27drRv356XXnqJzMxM2rRpw759+5g/fz4dOnTg+++/L/P6AwcOZOLEiQwfPpyEhAQuu+wyVq1aVWxwEhkZybRp05gyZQrXXnst/fv3p2nTphw9epQdO3awcuVKsrOzARg2bBg2m40777yT0NBQsrKy+OSTTzh27Bjjxo1z3n8gESmTghsR8Sj33HMPwcHBnDp1iqFDh+Lv7+84Z7FY+OKLLxg7dizvvfceZ8+epUOHDrz33nvs3r27XMFNUFAQK1euZMyYMcyYMcMRQC1evJhGjRoVaT958mS6dOnCnDlzeP311zl79iyXX345HTp0YPbs2Y52gwcPZtGiRbz33nscP36coKAg2rZty4cffsjAgQOd8x9HRMrFZFw6visiIiLixbTmRkRERHyKghsRERHxKQpuRERExKcouBERERGfouBGREREfIqCGxEREfEpCm5ERETEpyi4EREREZ+i4EZERER8ioIbERER8SkKbkRERMSnKLgRERERn6LgRkRERHzK/wPRJZt/vcgAhgAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from netsci.utils import generate_power_law_discrete\n", + "# Example usage\n", + "gamma = 2.5 # Power-law exponent\n", + "k_min = 1 # Minimum value of k\n", + "k_max = 1000 # Maximum value of k\n", + "size = 100000 # Number of samples\n", + "\n", + "samples = generate_power_law_discrete(size, gamma, k_min, k_max, seed=1)\n", + "fig, ax = plt.subplots(1, figsize=(6,4))\n", + "plot_distribution(samples, size, gamma, k_min, ax)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Powerlaw package\n", + "\n", + "- Alstott, J., Bullmore, E. and Plenz, D., 2014. powerlaw: a Python package for analysis of heavy-tailed distributions. PloS one, 9(1), p.e85777.\n", + "\n", + " - probability density function (PDF), \n", + " - cumulative distribution function (CDF)\n", + " - complementary cumulative distribution (CCDF)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Calculating best minimal value for power law fit\n", + "xmin progress: 00%\r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "fit.power_law.alpha=2.995340848455978\n", + "fit.power_law.sigma=0.02600579145725683\n", + "----------------------------------------------------------------------\n", + "(894.9727455051284, 5.263968413468816e-22)\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import powerlaw\n", + "fig, ax = plt.subplots(1, figsize=(6,4))\n", + "fit = powerlaw.Fit(x) # xmax=50\n", + "print(f\"{fit.power_law.alpha=}\")\n", + "print(f\"{fit.power_law.sigma=}\")\n", + "print(\"-\"*70)\n", + "print(fit.distribution_compare(\"power_law\", \"exponential\"))\n", + "\n", + "powerlaw.plot_pdf(x, linear_bins=0, color='k', marker='o', lw=1, ax=ax);" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots(1, figsize=(6,4))\n", + "fit.plot_pdf(c='b', lw=2, marker=\"*\", label='pdf', ax=ax)\n", + "fit.power_law.plot_pdf(c='b', ax=ax, ls='--', label='fit pdf')\n", + "fit.plot_ccdf(c='r', ax=ax, ls=\"-\", label='ccdf')\n", + "fit.power_law.plot_ccdf(c='r', ax=ax, ls='--', label='fit ccdf')\n", + "ax.legend(frameon=False);\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_sources/examples/quick_guide_igraph.ipynb.txt b/_sources/examples/quick_guide_igraph.ipynb.txt new file mode 100644 index 0000000..3d250aa --- /dev/null +++ b/_sources/examples/quick_guide_igraph.ipynb.txt @@ -0,0 +1,375 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# [igraph](https://github.com/Ziaeemehr/netsci/blob/main/docs/examples/quick_guide_igraph.ipynb)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### **Quick Guide for igraph**\n", + "\n", + "Code by : Abolfazl Ziaeemehr \n", + "- https://github.com/Ziaeemehr\n", + "\n", + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First, ensure that python-igraph is installed. You can install it using pip:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.11.6\n" + ] + } + ], + "source": [ + "try:\n", + " import igraph\n", + " print(igraph.__version__)\n", + "except ImportError:\n", + " print(\"igraph is not installed.\")\n", + " \n", + "# If `igraph` is not installed, you can install it using the following command (uncomment the following line):\n", + "# !pip install python-igraph" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Creating Graphs\n", + "- Empty Graph\n", + "\n", + "To create an empty graph:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import igraph as ig\n", + "g = ig.Graph()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Graph with Nodes and Edges\n", + "To create a graph with 10 nodes and specific edges, also get summary of the graph with `print(g)`:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "IGRAPH U--- 10 2 --\n", + "+ edges:\n", + "0--1 0--5\n" + ] + } + ], + "source": [ + "g = ig.Graph(n=10, edges=[[0, 1], [0, 5]])\n", + "print(g)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This will display the number of vertices and edges, and list the edges if the graph is small." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Assigning Attributes\n", + "You can set and retrieve attributes for graphs, vertices, and edges." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "import igraph as ig\n", + "\n", + "# Create a graph with 3 nodes\n", + "g = ig.Graph(n=3)\n", + "\n", + "# Assign a 'color' attribute to all nodes\n", + "g.vs[\"color\"] = [\"red\", \"green\", \"blue\"]\n", + "\n", + "# Assign a 'label' attribute to the first node\n", + "g.vs[0][\"label\"] = \"Node 1\"\n", + "\n", + "# Assign a 'label' attribute to the second node\n", + "g.vs[1][\"label\"] = \"Node 2\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# Create a graph with edges\n", + "g.add_edges([(0, 1), (1, 2)])\n", + "\n", + "# Assign a 'weight' attribute to all edges\n", + "g.es[\"weight\"] = [1.5, 2.5]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Retrieving Attributes" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'color': 'red', 'label': 'Node 1'}\n" + ] + } + ], + "source": [ + "# Get all attributes for the first node\n", + "node_attributes = g.vs[0].attributes()\n", + "print(node_attributes)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['red', 'green', 'blue']\n" + ] + } + ], + "source": [ + "# Get the 'color' attribute for all nodes\n", + "colors = g.vs[\"color\"]\n", + "print(colors)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'weight': 1.5}\n" + ] + } + ], + "source": [ + "# Get all attributes for the first edge\n", + "edge_attributes = g.es[0].attributes()\n", + "print(edge_attributes)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1.5, 2.5]\n" + ] + } + ], + "source": [ + "# Get the 'weight' attribute for all edges\n", + "weights = g.es[\"weight\"]\n", + "print(weights)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Load graph from adjacency list" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "File /Users/tng/git/workshops/netsci/netsci/datasets/networks.zip already exists.\n", + "path='/Users/tng/git/workshops/netsci/netsci/datasets/'\n", + "Number of vertices: 23133\n", + "Number of edges: 93439\n", + "Is directed: False\n", + "Density: 0.000349\n", + "Average clustering coefficient: 0.264317\n" + ] + } + ], + "source": [ + "import os\n", + "from netsci.utils import list_sample_graphs\n", + "from netsci.utils import get_sample_dataset_path\n", + "from netsci.utils import download_sample_dataset\n", + "\n", + "def load_edges(filepath):\n", + " edges = []\n", + " with open(filepath, 'r') as file:\n", + " for line in file:\n", + " if line.startswith('#'):\n", + " continue # Skip comments\n", + " A, B = map(int, line.split())\n", + " edges.append((A, B))\n", + " return edges\n", + "\n", + "def load_graphi(filepath:str, directed:bool=False):\n", + " edges = load_edges(filepath)\n", + " G = ig.Graph(edges=edges, directed=directed)\n", + "\n", + " return G\n", + "\n", + "path = get_sample_dataset_path()\n", + "\n", + "# make sure you have downloaded the sample dataset\n", + "download_sample_dataset()\n", + "\n", + "file_name = os.path.join(path, \"collaboration.edgelist.txt\")\n", + "print(f\"{path=}\")\n", + "\n", + "G = load_graphi(file_name, directed=False)\n", + "\n", + "print(f\"{'Number of vertices:':<30s} {G.vcount():20d}\")\n", + "print(f\"{'Number of edges:':<30s} {G.ecount():20d}\")\n", + "print(f\"{'Is directed:':<30s} {str(G.is_directed()):>20s}\")\n", + "print(f\"{'Density:':<30s} {G.density():20.6f}\")\n", + "print(f\"{'Average clustering coefficient:':30s}{G.transitivity_undirected():20.6f}\")\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Visualizing Graphs" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "# need to install matplotlib and pycairo\n", + "# !pip install pycairo -q " + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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GZDftW/fPtxuN99//705e/jhh3n00UdxOp0WJhMRkaKgMiC/KTMzk2nTppGXlwdA6dKlSUxMpE2bNhYnExGRoqIyIJdUUFDAvHnzWLFihTmrV68eLpeLG2+80cJkIiJS1FQG5FdOnDhBWloa27dvN2edO3fmqaeeIioqysJkIiJSHFQG5Ge2bNnC+PHjOX36NAAREREMHTqU+++/X8sGRURClMqAAIXLBpctW8aCBQvMZYM33HADLpeLRo0aWZxORESKk8qAcP78eaZOncqnn35qzlq0aEFSUhLly5e3MJmIiJQElQGb27NnD263m4MHD5qzvn370rdvXy0bFBGxCZUBG/vwww+ZOXMmFy5cAKBs2bIkJibSunVri5OJiEhJUhmwofz8fObOncuqVavMWYMGDXC5XFSrVs3CZCIiYgWVAZs5duwYaWlp7Nixw5x16dKF4cOHExkZaWEyERGxisqAjXz++edMmDCBs2fPAoXLBocPH07Xrl0tTiYiIlZSGbABv9/P0qVLWbRoEYZhAFC1alVSU1Np0KCBxelERMRqKgMh7ty5c0yZMoWNGzeas9atW5OYmEjZsmUtTCYiIoFCZSCE7dq1C7fbzZEjRwBwOBz8+c9/5pFHHiEsLMzidCIiEihUBkLUmjVreOGFF8jPzwegXLlyJCUl0bJlS4uTiYhIoFEZCDH5+fnMnj2b1atXm7NGjRrhcrm44YYbLEwmIiKBSmUghBw5cgSPx8O3335rzv7rv/6LwYMHa9mgiIhclspAiPjss8+YNGkS586dA6BUqVKMGDGCzp07W5xMREQCncpAkPP5fLz66qssWbLEXDZYvXp1UlNTqVevnsXpREQkGKgMBLGzZ88yceJENm3aZM7atm3LM888Q5kyZSxMJiIiwURlIEh98803eDwejh07BkBYWBh/+ctf6NmzJw6Hw+J0IiISTFQGgoxhGKxevZrZs2dTUFAAQIUKFRg7dizNmze3NpyIiAQllYEgkpeXx/PPP88HH3xgzpo0aUJKSgqVK1e2MJmIiAQzlYEgcejQIdxuN99995056969O4MGDSIiIsLCZCIiEuxUBoLAhg0bmDx5MufPnwcgKiqKUaNG8cc//tHiZCIiEgpUBgKYz+dj4cKFvP766+asZs2auFwu6tSpY10wEREJKSoDAerUqVNMmDCBLVu2mLN27dox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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "fig, ax = plt.subplots()\n", + "\n", + "# Compute a layout\n", + "layout = g.layout(\"kk\") # Kamada-Kawai layout\n", + "\n", + "# Define visual style\n", + "visual_style = {}\n", + "visual_style[\"vertex_size\"] = 20\n", + "visual_style[\"vertex_label\"] = range(g.vcount())\n", + "visual_style[\"layout\"] = layout\n", + "visual_style[\"bbox\"] = (300, 300) # Bounding box size\n", + "visual_style[\"margin\"] = 20\n", + "\n", + "# Plot the graph\n", + "ig.plot(g, **visual_style)\n", + "\n", + "# Plot the graph in the axes\n", + "ig.plot(g, target=ax, **visual_style)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_sources/examples/quick_guide_networkx.ipynb.txt b/_sources/examples/quick_guide_networkx.ipynb.txt new file mode 100644 index 0000000..60bf575 --- /dev/null +++ b/_sources/examples/quick_guide_networkx.ipynb.txt @@ -0,0 +1,212 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# [Networkx](https://github.com/Ziaeemehr/netsci/blob/main/docs/examples/quick_guide_networkx.ipynb)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "#### **Quick Guide for Networkx**\n", + "\n", + "Code by : Abolfazl Ziaeemehr \n", + "- https://github.com/Ziaeemehr\n", + "\n", + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Creating Graphs\n", + "\n", + "#### Basic Graph Types\n", + "\n", + "NetworkX provides several types of graphs:\n", + "- **Graph**: An undirected graph.\n", + "- **DiGraph**: A directed graph.\n", + "- **MultiGraph**: An undirected graph that can have multiple edges between nodes.\n", + "- **MultiDiGraph**: A directed graph with multiple edges." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can create an empty graph as follows:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import networkx as nx\n", + "\n", + "G = nx.Graph() # or nx.DiGraph(), nx.MultiGraph(), nx.MultiDiGraph()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Adding Nodes and Edges\n", + "You can add nodes and edges to a graph using the following methods:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{1: 1, 2: 2, 3: 2, 4: 1}" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Add a single node\n", + "G.add_node(1)\n", + "\n", + "# Add multiple nodes\n", + "G.add_nodes_from([2, 3])\n", + "\n", + "# Add an edge between two nodes\n", + "G.add_edge(1, 2)\n", + "\n", + "# Add multiple edges\n", + "G.add_edges_from([(2, 3), (3, 4)])\n", + "\n", + "# get degree distribution\n", + "degrees = dict(G.degree())\n", + "degrees" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Nodes can be any hashable Python object except None." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Node and Edge Attributes\n", + "You can also add attributes to nodes and edges:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "# Add node with attributes\n", + "G.add_node(4, color='red')\n", + "\n", + "# Add edge with attributes\n", + "G.add_edge(1, 3, weight=4.2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Graph Algorithms\n", + "NetworkX provides a wide range of graph algorithms, such as shortest path, clustering, and many others. For example, to find the shortest path using Dijkstra's algorithm:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['a', 'c', 'd']\n" + ] + } + ], + "source": [ + "# Create a weighted graph\n", + "G = nx.Graph()\n", + "edges = [('a', 'b', 0.3), ('b', 'c', 0.9), ('a', 'c', 0.5), ('c', 'd', 1.2)]\n", + "G.add_weighted_edges_from(edges)\n", + "\n", + "# Find shortest path\n", + "path = nx.dijkstra_path(G, 'a', 'd')\n", + "print(path) # Output: ['a', 'c', 'd']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Visualization\n", + "NetworkX includes basic functionality for visualizing graphs, although it is primarily designed for graph analysis. You can use Matplotlib to draw graphs:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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JZGJefXthbGefR75LG8AcFn6ZYvGffAsb4ZJIiIyNZ6hJBLB1lmDYSEx7vUcC4kZts4abNQxiYiIngQDJZEIBthbY8NDz9s2ho3BMgxo4ws/RERETWGgJBJJZIArVk7xNspY70zxQUSAq1HGIiIiaileyiES2Q8phVifmAGNTnjsze+HmUvMYCExw8ZgGcMkERGJioGSqB0oqlBh7aGrOJNTBnOJ2SOD5YPXx3r2wdZZg7nNTUREomOgJGpHlCV3sSe5ECezS1FYrsLD35xmuN+0fLy3E+aOdOVtbiIiajcYKInaqRq1BvnlNajX6NDNQoKBDjZ8Ag4REbVLDJREREREZBDe8iYiIiIigzBQEhEREZFBGCiJiIiIyCAMlERERERkEAZKIiIiIjIIAyURERERGYSBkoiIiIgMwkBJRERERAZhoCQiIiIigzBQEhEREZFBGCiJiIiIyCAMlERERERkEAZKIiIiIjIIAyURERERGYSBkoiIiIgMwkBJRERERAZhoCQiIiIigzBQEhEREZFBGCiJiIiIyCAMlERERERkEAZKIiIiIjIIAyURERERGYSBkoiIiIgMwkBJRERERAZhoCQiIiIigzBQEhEREZFBGCiJiIiIyCAMlERERERkEAZKIiIiIjIIAyURERERGYSBkoiIiIgMwkBJRERERAZhoCQiIiIigzBQEhEREZFBGCiJiIiIyCAMlERERERkEAZKIiIiIjLI/wMVJ4BQPoQRMQAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "G = nx.complete_graph(5)\n", + "nx.draw(G, with_labels=True)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt new file mode 100644 index 0000000..df38886 --- /dev/null +++ b/_sources/index.rst.txt @@ -0,0 +1,102 @@ +Python codes for Network Science, Barabási, 2013. +################################################## + +- Barabási, A.L., 2013. Network science. Philosophical Transactions of the Royal Society A: Mathematical, Physical and Engineering Sciences, 371(1987), p.20120375. + + +Installation, How to use +============================= + +- using on Colab (Recommended) + + - Go to examples + - Open a notebook and click on "open on colab" + - Uncomment the cell with pip install command to install the netsci package. + +- using on local machines + +.. code-block:: bash + + pip3 install -e . + # or + pip install "git+https://github.com/Ziaeemehr/netsci.git" + + +Indices and tables +------------------- + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + +Table of Chapters +============================= + +.. list-table:: + :header-rows: 1 + + * - View Notebook + - Open in Colab + * - `Networkx quick guide `_ + - `Networkx quick guide [C] `_ + * - `Igraph quick guide `_ + - `Igraph quick guide [C] `_ + * - `Chapter 2 `_ + - `Chapter 2 [C] `_ + * - `Chapter 3 `_ + - `Chapter 3 [C] `_ + * - `Chapter 4 `_ + - `Chapter 4 [C] `_ + + +Chapters +=========================== + +.. toctree:: + :maxdepth: 3 + :caption: Contents: + + examples/quick_guide_networkx + examples/quick_guide_igraph + examples/chap_02 + examples/chap_03 + examples/chap_04 + +API and documentation +=========================== + + +.. automodule:: netsci + :members: + :undoc-members: + + + +netsci.analysis +--------------------------- + + +.. automodule:: netsci.analysis + :members: + :undoc-members: + :show-inheritance: + :inherited-members: + +netsci.utils +------------------------------ + +.. automodule:: netsci.utils + :members: + :undoc-members: + :show-inheritance: + :inherited-members: + + +netsci.plot +--------------------------- + +.. automodule:: netsci.plot + :members: + :undoc-members: + :show-inheritance: + :inherited-members: diff --git a/_static/basic.css b/_static/basic.css new file mode 100644 index 0000000..f316efc --- /dev/null +++ b/_static/basic.css @@ -0,0 +1,925 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/_static/doctools.js b/_static/doctools.js new file mode 100644 index 0000000..4d67807 --- /dev/null +++ b/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/_static/documentation_options.js b/_static/documentation_options.js new file mode 100644 index 0000000..6a26c0f --- /dev/null +++ b/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: '0.1.dev1+g157bd64', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/_static/file.png b/_static/file.png new file mode 100644 index 0000000..a858a41 Binary files /dev/null and b/_static/file.png differ diff --git a/_static/graphviz.css b/_static/graphviz.css new file mode 100644 index 0000000..027576e --- /dev/null +++ b/_static/graphviz.css @@ -0,0 +1,19 @@ +/* + * graphviz.css + * ~~~~~~~~~~~~ + * + * Sphinx stylesheet -- graphviz extension. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +img.graphviz { + border: 0; + max-width: 100%; +} + +object.graphviz { + max-width: 100%; +} diff --git a/_static/language_data.js b/_static/language_data.js new file mode 100644 index 0000000..367b8ed --- /dev/null +++ b/_static/language_data.js @@ -0,0 +1,199 @@ +/* + * language_data.js + * ~~~~~~~~~~~~~~~~ + * + * This script contains the language-specific data used by searchtools.js, + * namely the list of stopwords, stemmer, scorer and splitter. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; + + +/* Non-minified version is copied as a separate JS file, if available */ + +/** + * Porter Stemmer + */ +var Stemmer = function() { + + var step2list = { + ational: 'ate', + tional: 'tion', + enci: 'ence', + anci: 'ance', + izer: 'ize', + bli: 'ble', + alli: 'al', + entli: 'ent', + eli: 'e', + ousli: 'ous', + ization: 'ize', + ation: 'ate', + ator: 'ate', + alism: 'al', + iveness: 'ive', + fulness: 'ful', + ousness: 'ous', + aliti: 'al', + iviti: 'ive', + biliti: 'ble', + logi: 'log' + }; + + var step3list = { + icate: 'ic', + ative: '', + alize: 'al', + iciti: 'ic', + ical: 'ic', + ful: '', + ness: '' + }; + + var c = "[^aeiou]"; // consonant + var v = "[aeiouy]"; // vowel + var C = c + "[^aeiouy]*"; // consonant sequence + var V = v + "[aeiou]*"; // vowel sequence + + var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/_static/minus.png b/_static/minus.png new file mode 100644 index 0000000..d96755f Binary files /dev/null and b/_static/minus.png differ diff --git a/_static/nature.css b/_static/nature.css new file mode 100644 index 0000000..ba033b0 --- /dev/null +++ b/_static/nature.css @@ -0,0 +1,252 @@ +/* + * nature.css_t + * ~~~~~~~~~~~~ + * + * Sphinx stylesheet -- nature theme. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +@import url("basic.css"); + +/* -- page layout ----------------------------------------------------------- */ + +body { + font-family: Arial, sans-serif; + font-size: 100%; + background-color: #fff; + color: #555; + margin: 0; + padding: 0; +} + +div.documentwrapper { + float: left; + width: 100%; +} + +div.bodywrapper { + margin: 0 0 0 230px; +} + +hr { + border: 1px solid #B1B4B6; +} + +div.document { + background-color: #eee; +} + +div.body { + background-color: #ffffff; + color: #3E4349; + padding: 0 30px 30px 30px; + font-size: 0.9em; +} + +div.footer { + color: #555; + width: 100%; + padding: 13px 0; + text-align: center; + font-size: 75%; +} + +div.footer a { + color: #444; + text-decoration: underline; +} + +div.related { + background-color: #6BA81E; + line-height: 32px; + color: #fff; + text-shadow: 0px 1px 0 #444; + font-size: 0.9em; +} + +div.related a { + color: #E2F3CC; +} + +div.sphinxsidebar { + font-size: 0.75em; + line-height: 1.5em; +} + +div.sphinxsidebarwrapper{ + padding: 20px 0; +} + +div.sphinxsidebar h3, +div.sphinxsidebar h4 { + font-family: Arial, sans-serif; + color: #222; + font-size: 1.2em; + font-weight: normal; + margin: 0; + padding: 5px 10px; + background-color: #ddd; + text-shadow: 1px 1px 0 white +} + +div.sphinxsidebar h4{ + font-size: 1.1em; +} + +div.sphinxsidebar h3 a { + color: #444; +} + + +div.sphinxsidebar p { + color: #888; + padding: 5px 20px; +} + +div.sphinxsidebar p.topless { +} + +div.sphinxsidebar ul { + margin: 10px 20px; + padding: 0; + color: #000; +} + +div.sphinxsidebar a { + color: #444; +} + +div.sphinxsidebar input { + border: 1px solid #ccc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar .searchformwrapper { + margin-left: 20px; + margin-right: 20px; +} + +/* -- body styles ----------------------------------------------------------- */ + +a { + color: #005B81; + text-decoration: none; +} + +a:hover { + color: #E32E00; + text-decoration: underline; +} + +a:visited { + color: #551A8B; +} + +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { + font-family: Arial, sans-serif; + background-color: #BED4EB; + font-weight: normal; + color: #212224; + margin: 30px 0px 10px 0px; + padding: 5px 0 5px 10px; + text-shadow: 0px 1px 0 white +} + +div.body h1 { border-top: 20px solid white; margin-top: 0; font-size: 200%; } +div.body h2 { font-size: 150%; background-color: #C8D5E3; } +div.body h3 { font-size: 120%; background-color: #D8DEE3; } +div.body h4 { font-size: 110%; background-color: #D8DEE3; } +div.body h5 { font-size: 100%; background-color: #D8DEE3; } +div.body h6 { font-size: 100%; background-color: #D8DEE3; } + +a.headerlink { + color: #c60f0f; + font-size: 0.8em; + padding: 0 4px 0 4px; + text-decoration: none; +} + +a.headerlink:hover { + background-color: #c60f0f; + color: white; +} + +div.body p, div.body dd, div.body li { + line-height: 1.5em; +} + +div.admonition p.admonition-title + p { + display: inline; +} + +div.note { + background-color: #eee; + border: 1px solid #ccc; +} + +div.seealso { + background-color: #ffc; + border: 1px solid #ff6; +} + +nav.contents, +aside.topic, +div.topic { + background-color: #eee; +} + +div.warning { + background-color: #ffe4e4; + border: 1px solid #f66; +} + +p.admonition-title { + display: inline; +} + +p.admonition-title:after { + content: ":"; +} + +pre { + padding: 10px; + line-height: 1.2em; + border: 1px solid #C6C9CB; + font-size: 1.1em; + margin: 1.5em 0 1.5em 0; + -webkit-box-shadow: 1px 1px 1px #d8d8d8; + -moz-box-shadow: 1px 1px 1px #d8d8d8; +} + +code { + background-color: #ecf0f3; + color: #222; + /* padding: 1px 2px; */ + font-size: 1.1em; + font-family: monospace; +} + +.viewcode-back { + font-family: Arial, sans-serif; +} + +div.viewcode-block:target { + background-color: #f4debf; + border-top: 1px solid #ac9; + border-bottom: 1px solid #ac9; +} + +div.code-block-caption { + background-color: #ddd; + color: #222; + border: 1px solid #C6C9CB; +} \ No newline at end of file diff --git a/_static/nbsphinx-broken-thumbnail.svg b/_static/nbsphinx-broken-thumbnail.svg new file mode 100644 index 0000000..4919ca8 --- /dev/null +++ b/_static/nbsphinx-broken-thumbnail.svg @@ -0,0 +1,9 @@ + + + + diff --git a/_static/nbsphinx-code-cells.css b/_static/nbsphinx-code-cells.css new file mode 100644 index 0000000..a3fb27c --- /dev/null +++ b/_static/nbsphinx-code-cells.css @@ -0,0 +1,259 @@ +/* remove conflicting styling from Sphinx themes */ +div.nbinput.container div.prompt *, +div.nboutput.container div.prompt *, +div.nbinput.container div.input_area pre, +div.nboutput.container div.output_area pre, +div.nbinput.container div.input_area .highlight, +div.nboutput.container div.output_area .highlight { + border: none; + padding: 0; + margin: 0; + box-shadow: none; +} + +div.nbinput.container > div[class*=highlight], +div.nboutput.container > div[class*=highlight] { + margin: 0; +} + +div.nbinput.container div.prompt *, +div.nboutput.container div.prompt * { + background: none; +} + +div.nboutput.container div.output_area .highlight, +div.nboutput.container div.output_area pre { + background: unset; +} + +div.nboutput.container div.output_area div.highlight { + color: unset; /* override Pygments text color */ +} + +/* avoid gaps between output lines */ +div.nboutput.container div[class*=highlight] pre { + line-height: normal; +} + +/* input/output containers */ +div.nbinput.container, +div.nboutput.container { + display: -webkit-flex; + display: flex; + align-items: flex-start; + margin: 0; + width: 100%; +} +@media (max-width: 540px) { + div.nbinput.container, + div.nboutput.container { + flex-direction: column; + } +} + +/* input container */ +div.nbinput.container { + padding-top: 5px; +} + +/* last container */ +div.nblast.container { + padding-bottom: 5px; +} + +/* input prompt */ +div.nbinput.container div.prompt pre, +/* for sphinx_immaterial theme: */ +div.nbinput.container div.prompt pre > code { + color: #307FC1; +} + +/* output prompt */ +div.nboutput.container div.prompt pre, +/* for sphinx_immaterial theme: */ +div.nboutput.container div.prompt pre > code { + color: #BF5B3D; +} + +/* all prompts */ +div.nbinput.container div.prompt, +div.nboutput.container div.prompt { + width: 4.5ex; + padding-top: 5px; + position: relative; + user-select: none; +} + +div.nbinput.container div.prompt > div, +div.nboutput.container div.prompt > div { + position: absolute; + right: 0; + margin-right: 0.3ex; +} + +@media (max-width: 540px) { + div.nbinput.container div.prompt, + div.nboutput.container div.prompt { + width: unset; + text-align: left; + padding: 0.4em; + } + div.nboutput.container div.prompt.empty { + padding: 0; + } + + div.nbinput.container div.prompt > div, + div.nboutput.container div.prompt > div { + position: unset; + } +} + +/* disable scrollbars and line breaks on prompts */ +div.nbinput.container div.prompt pre, +div.nboutput.container div.prompt pre { + overflow: hidden; + white-space: pre; +} + +/* input/output area */ +div.nbinput.container div.input_area, +div.nboutput.container div.output_area { + -webkit-flex: 1; + flex: 1; + overflow: auto; +} +@media (max-width: 540px) { + div.nbinput.container div.input_area, + div.nboutput.container div.output_area { + width: 100%; + } +} + +/* input area */ +div.nbinput.container div.input_area { + border: 1px solid #e0e0e0; + border-radius: 2px; + /*background: #f5f5f5;*/ +} + +/* override MathJax center alignment in output cells */ +div.nboutput.container div[class*=MathJax] { + text-align: left !important; +} + +/* override sphinx.ext.imgmath center alignment in output cells */ +div.nboutput.container div.math p { + text-align: left; +} + +/* standard error */ +div.nboutput.container div.output_area.stderr { + background: #fdd; +} + +/* ANSI colors */ +.ansi-black-fg { color: #3E424D; } +.ansi-black-bg { background-color: #3E424D; } +.ansi-black-intense-fg { color: #282C36; } +.ansi-black-intense-bg { background-color: #282C36; } +.ansi-red-fg { color: #E75C58; } +.ansi-red-bg { background-color: #E75C58; } +.ansi-red-intense-fg { color: #B22B31; } +.ansi-red-intense-bg { background-color: #B22B31; } +.ansi-green-fg { color: #00A250; } +.ansi-green-bg { background-color: #00A250; } +.ansi-green-intense-fg { color: #007427; } +.ansi-green-intense-bg { background-color: #007427; } +.ansi-yellow-fg { color: #DDB62B; } +.ansi-yellow-bg { background-color: #DDB62B; } +.ansi-yellow-intense-fg { color: #B27D12; } +.ansi-yellow-intense-bg { background-color: #B27D12; } +.ansi-blue-fg { color: #208FFB; } +.ansi-blue-bg { background-color: #208FFB; } +.ansi-blue-intense-fg { color: #0065CA; } +.ansi-blue-intense-bg { background-color: #0065CA; } +.ansi-magenta-fg { color: #D160C4; } +.ansi-magenta-bg { background-color: #D160C4; } +.ansi-magenta-intense-fg { color: #A03196; } +.ansi-magenta-intense-bg { background-color: #A03196; } +.ansi-cyan-fg { color: #60C6C8; } +.ansi-cyan-bg { background-color: #60C6C8; } +.ansi-cyan-intense-fg { color: #258F8F; } +.ansi-cyan-intense-bg { background-color: #258F8F; } +.ansi-white-fg { color: #C5C1B4; } +.ansi-white-bg { background-color: #C5C1B4; } +.ansi-white-intense-fg { color: #A1A6B2; } +.ansi-white-intense-bg { background-color: #A1A6B2; } + +.ansi-default-inverse-fg { color: #FFFFFF; } +.ansi-default-inverse-bg { background-color: #000000; } + +.ansi-bold { font-weight: bold; } +.ansi-underline { text-decoration: underline; } + + +div.nbinput.container div.input_area div[class*=highlight] > pre, +div.nboutput.container div.output_area div[class*=highlight] > pre, +div.nboutput.container div.output_area div[class*=highlight].math, +div.nboutput.container div.output_area.rendered_html, +div.nboutput.container div.output_area > div.output_javascript, +div.nboutput.container div.output_area:not(.rendered_html) > img{ + padding: 5px; + margin: 0; +} + +/* fix copybtn overflow problem in chromium (needed for 'sphinx_copybutton') */ +div.nbinput.container div.input_area > div[class^='highlight'], +div.nboutput.container div.output_area > div[class^='highlight']{ + overflow-y: hidden; +} + +/* hide copy button on prompts for 'sphinx_copybutton' extension ... */ +.prompt .copybtn, +/* ... and 'sphinx_immaterial' theme */ +.prompt .md-clipboard.md-icon { + display: none; +} + +/* Some additional styling taken form the Jupyter notebook CSS */ +.jp-RenderedHTMLCommon table, +div.rendered_html table { + border: none; + border-collapse: collapse; + border-spacing: 0; + color: black; + font-size: 12px; + table-layout: fixed; +} +.jp-RenderedHTMLCommon thead, +div.rendered_html thead { + border-bottom: 1px solid black; + vertical-align: bottom; +} +.jp-RenderedHTMLCommon tr, +.jp-RenderedHTMLCommon th, +.jp-RenderedHTMLCommon td, +div.rendered_html tr, +div.rendered_html th, +div.rendered_html td { + text-align: right; + vertical-align: middle; + padding: 0.5em 0.5em; + line-height: normal; + white-space: normal; + max-width: none; + border: none; +} +.jp-RenderedHTMLCommon th, +div.rendered_html th { + font-weight: bold; +} +.jp-RenderedHTMLCommon tbody tr:nth-child(odd), +div.rendered_html tbody tr:nth-child(odd) { + background: #f5f5f5; +} +.jp-RenderedHTMLCommon tbody tr:hover, +div.rendered_html tbody tr:hover { + background: rgba(66, 165, 245, 0.2); +} + diff --git a/_static/nbsphinx-gallery.css b/_static/nbsphinx-gallery.css new file mode 100644 index 0000000..365c27a --- /dev/null +++ b/_static/nbsphinx-gallery.css @@ -0,0 +1,31 @@ +.nbsphinx-gallery { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); + gap: 5px; + margin-top: 1em; + margin-bottom: 1em; +} + +.nbsphinx-gallery > a { + padding: 5px; + border: 1px dotted currentColor; + border-radius: 2px; + text-align: center; +} + +.nbsphinx-gallery > a:hover { + border-style: solid; +} + +.nbsphinx-gallery img { + max-width: 100%; + max-height: 100%; +} + +.nbsphinx-gallery > a > div:first-child { + display: flex; + align-items: start; + justify-content: center; + height: 120px; + margin-bottom: 5px; +} diff --git a/_static/nbsphinx-no-thumbnail.svg b/_static/nbsphinx-no-thumbnail.svg new file mode 100644 index 0000000..9dca758 --- /dev/null +++ b/_static/nbsphinx-no-thumbnail.svg @@ -0,0 +1,9 @@ + + + + diff --git a/_static/plus.png b/_static/plus.png new file mode 100644 index 0000000..7107cec Binary files /dev/null and b/_static/plus.png differ diff --git a/_static/pygments.css b/_static/pygments.css new file mode 100644 index 0000000..9c2afde --- /dev/null +++ b/_static/pygments.css @@ -0,0 +1,75 @@ +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #ffffcc } +.highlight { background: #ffffff; } +.highlight .c { color: #888888 } /* Comment */ +.highlight .err { color: #FF0000; background-color: #FFAAAA } /* Error */ +.highlight .k { color: #008800; font-weight: bold } /* Keyword */ +.highlight .o { color: #333333 } /* Operator */ +.highlight .ch { color: #888888 } /* Comment.Hashbang */ +.highlight .cm { color: #888888 } /* Comment.Multiline */ +.highlight .cp { color: #557799 } /* Comment.Preproc */ +.highlight .cpf { color: #888888 } /* Comment.PreprocFile */ +.highlight .c1 { color: #888888 } /* Comment.Single */ +.highlight .cs { color: #cc0000; font-weight: bold } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +.highlight .gr { color: #FF0000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #888888 } /* Generic.Output */ +.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0044DD } /* Generic.Traceback */ +.highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #003388; font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #333399; font-weight: bold } /* Keyword.Type */ +.highlight .m { color: #6600EE; font-weight: bold } /* Literal.Number */ +.highlight .s { background-color: #fff0f0 } /* Literal.String */ +.highlight .na { color: #0000CC } /* Name.Attribute */ +.highlight .nb { color: #007020 } /* Name.Builtin */ +.highlight .nc { color: #BB0066; font-weight: bold } /* Name.Class */ +.highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ +.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #880000; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #FF0000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #0066BB; font-weight: bold } /* Name.Function */ +.highlight .nl { color: #997700; font-weight: bold } /* Name.Label */ +.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #007700 } /* Name.Tag */ +.highlight .nv { color: #996633 } /* Name.Variable */ +.highlight .ow { color: #000000; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mb { color: #6600EE; font-weight: bold } /* Literal.Number.Bin */ +.highlight .mf { color: #6600EE; font-weight: bold } /* Literal.Number.Float */ +.highlight .mh { color: #005588; font-weight: bold } /* Literal.Number.Hex */ +.highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ +.highlight .mo { color: #4400EE; font-weight: bold } /* Literal.Number.Oct */ +.highlight .sa { background-color: #fff0f0 } /* Literal.String.Affix */ +.highlight .sb { background-color: #fff0f0 } /* Literal.String.Backtick */ +.highlight .sc { color: #0044DD } /* Literal.String.Char */ +.highlight .dl { background-color: #fff0f0 } /* Literal.String.Delimiter */ +.highlight .sd { color: #DD4422 } /* Literal.String.Doc */ +.highlight .s2 { background-color: #fff0f0 } /* Literal.String.Double */ +.highlight .se { color: #666666; font-weight: bold; background-color: #fff0f0 } /* Literal.String.Escape */ +.highlight .sh { background-color: #fff0f0 } /* Literal.String.Heredoc */ +.highlight .si { background-color: #eeeeee } /* Literal.String.Interpol */ +.highlight .sx { color: #DD2200; background-color: #fff0f0 } /* Literal.String.Other */ +.highlight .sr { color: #000000; background-color: #fff0ff } /* Literal.String.Regex */ +.highlight .s1 { background-color: #fff0f0 } /* Literal.String.Single */ +.highlight .ss { color: #AA6600 } /* Literal.String.Symbol */ +.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #0066BB; font-weight: bold } /* Name.Function.Magic */ +.highlight .vc { color: #336699 } /* Name.Variable.Class */ +.highlight .vg { color: #dd7700; font-weight: bold } /* Name.Variable.Global */ +.highlight .vi { color: #3333BB } /* Name.Variable.Instance */ +.highlight .vm { color: #996633 } /* Name.Variable.Magic */ +.highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/_static/searchtools.js b/_static/searchtools.js new file mode 100644 index 0000000..b08d58c --- /dev/null +++ b/_static/searchtools.js @@ -0,0 +1,620 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms, highlightTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + const contentRoot = document.documentElement.dataset.content_root; + + const [docName, title, anchor, descr, score, _filename] = item; + + let listItem = document.createElement("li"); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = contentRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = contentRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) { + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + // highlight search terms in the description + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + } + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms, anchor) + ); + // highlight search terms in the summary + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = _( + "Search finished, found ${resultCount} page(s) matching the search query." + ).replace('${resultCount}', resultCount); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms, + highlightTerms, +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms, highlightTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; +// Helper function used by query() to order search results. +// Each input is an array of [docname, title, anchor, descr, score, filename]. +// Order the results by score (in opposite order of appearance, since the +// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically. +const _orderResultsByScoreThenName = (a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString, anchor) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + for (const removalQuery of [".headerlink", "script", "style"]) { + htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() }); + } + if (anchor) { + const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`); + if (anchorContent) return anchorContent.textContent; + + console.warn( + `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.` + ); + } + + // if anchor not specified or not found, fall back to main content + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent) return docContent.textContent; + + console.warn( + "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + _parseQuery: (query) => { + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + return [query, searchTerms, excludedTerms, highlightTerms, objectTerms]; + }, + + /** + * execute search (requires search index to be loaded) + */ + _performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // Collect multiple result groups to be sorted separately and then ordered. + // Each is an array of [docname, title, anchor, descr, score, filename]. + const normalResults = []; + const nonMainIndexResults = []; + + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase().trim(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + const score = Math.round(Scorer.title * queryLower.length / title.length); + const boost = titles[file] === title ? 1 : 0; // add a boost for document titles + normalResults.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score + boost, + filenames[file], + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id, isMain] of foundEntries) { + const score = Math.round(100 * queryLower.length / entry.length); + const result = [ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + ]; + if (isMain) { + normalResults.push(result); + } else { + nonMainIndexResults.push(result); + } + } + } + } + + // lookup as object + objectTerms.forEach((term) => + normalResults.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) { + normalResults.forEach((item) => (item[4] = Scorer.score(item))); + nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item))); + } + + // Sort each group of results by score and then alphabetically by name. + normalResults.sort(_orderResultsByScoreThenName); + nonMainIndexResults.sort(_orderResultsByScoreThenName); + + // Combine the result groups in (reverse) order. + // Non-main index entries are typically arbitrary cross-references, + // so display them after other results. + let results = [...nonMainIndexResults, ...normalResults]; + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + return results.reverse(); + }, + + query: (query) => { + const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query); + const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms, highlightTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + if (!terms.hasOwnProperty(word)) { + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + } + if (!titleTerms.hasOwnProperty(word)) { + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: titleTerms[term], score: Scorer.partialTitle }); + }); + } + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); + }); + + // create the mapping + files.forEach((file) => { + if (!fileMap.has(file)) fileMap.set(file, [word]); + else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords, anchor) => { + const text = Search.htmlToText(htmlText, anchor); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/_static/sphinx_highlight.js b/_static/sphinx_highlight.js new file mode 100644 index 0000000..8a96c69 --- /dev/null +++ b/_static/sphinx_highlight.js @@ -0,0 +1,154 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + const rest = document.createTextNode(val.substr(pos + text.length)); + parent.insertBefore( + span, + parent.insertBefore( + rest, + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + /* There may be more occurrences of search term in this node. So call this + * function recursively on the remaining fragment. + */ + _highlight(rest, addItems, text, className); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/examples/chap_02.html b/examples/chap_02.html new file mode 100644 index 0000000..ed9a2ef --- /dev/null +++ b/examples/chap_02.html @@ -0,0 +1,862 @@ + + + + + + + + Chapter 2 — netsci 0.1.dev1+g157bd64 documentation + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+

Chapter 2

+
+

Graph Theory

+

Code by : Abolfazl Ziaeemehr - https://github.com/Ziaeemehr

+

Open In Colab

+
+
[1]:
+
+
+
# uncomment and run this line to install the package on colab
+# !pip install "git+https://github.com/Ziaeemehr/netsci.git" -q
+
+
+
+
+
[2]:
+
+
+
import netsci
+import numpy as np
+import networkx as nx
+from tqdm import tqdm
+import matplotlib.pyplot as plt
+from netsci.plot import plot_graph
+from netsci.analysis import find_sap, find_hamiltonian_path
+
+
+
+
+
[3]:
+
+
+
np.random.seed(0)
+
+
+
+
+
[4]:
+
+
+
# make a random graph with n nodes and p% probability of edge connection
+num_nodes = 8
+probability = .4
+seed = 2
+graph = nx.gnp_random_graph(num_nodes, probability, seed=2, directed=False)
+
+# degree distribution
+degrees = dict(graph.degree())
+print("Degrees:", degrees)
+
+# calculate the average degree
+average_degree = np.mean(list(degrees.values()))
+print("Average degree:", average_degree)
+
+# adjacency matrix
+adjacency_matrix = nx.to_numpy_array(graph).astype(int)
+print("Adjacency matrix:\n", adjacency_matrix)
+
+# edges
+edges = list(graph.edges())
+print("Edges:", edges)
+
+# plot the graph
+plot_graph(graph, node_size=1000,
+           node_color='darkred',
+           edge_color='gray',
+           figsize=(5, 5),
+           title="Random Graph with {} nodes and {}% edge connection".format(num_nodes, probability*100))
+plt.show()
+
+
+
+
+
+
+
+
+Degrees: {0: 2, 1: 2, 2: 2, 3: 5, 4: 3, 5: 1, 6: 3, 7: 2}
+Average degree: 2.5
+Adjacency matrix:
+ [[0 0 0 1 1 0 0 0]
+ [0 0 1 0 0 0 1 0]
+ [0 1 0 1 0 0 0 0]
+ [1 0 1 0 0 1 1 1]
+ [1 0 0 0 0 0 1 1]
+ [0 0 0 1 0 0 0 0]
+ [0 1 0 1 1 0 0 0]
+ [0 0 0 1 1 0 0 0]]
+Edges: [(0, 3), (0, 4), (1, 2), (1, 6), (2, 3), (3, 5), (3, 6), (3, 7), (4, 6), (4, 7)]
+
+
+
+
+
+
+../_images/examples_chap_02_5_1.png +
+
+
+
[5]:
+
+
+
# shortest path, find distance between two nodes
+source = np.random.randint(0, len(graph)) # random source node
+target = np.random.randint(0, len(graph)) # random target node
+shortest_path = nx.shortest_path(graph, source, target)
+print("Shortest path from", source, "to", target, ":", shortest_path)
+
+# diameter : maximal shortest path length
+if nx.is_connected(graph):
+    diameter = nx.diameter(graph)
+    print("Diameter:", diameter)
+
+# average shortest path length
+avg_shortest_path_length = nx.average_shortest_path_length(graph)
+print(f"Average shortest path length: {avg_shortest_path_length:.2f}")
+
+
+
+
+
+
+
+
+Shortest path from 3 to 0 : [3, 0]
+Diameter: 3
+Average shortest path length: 1.82
+
+
+
+
[6]:
+
+
+
# directed graph
+graph_dir = nx.to_directed(graph)
+plot_graph(graph_dir,
+           node_size=1000,
+           node_color='darkred',
+           edge_color='gray',
+           figsize=(5, 5),
+           seed=1,
+           title="Random DGraph with {} nodes and {}% edge connection".format(num_nodes, probability*100));
+
+
+
+
+
+
+
+../_images/examples_chap_02_7_0.png +
+
+
+
[7]:
+
+
+
# weighted graph
+seed = 3
+np.random.seed(seed) # to fix the plot
+
+num_nodes = 5
+probability = 0.8
+graph_w = nx.erdos_renyi_graph(num_nodes, probability, seed=seed)
+
+for (u,v) in graph_w.edges():
+    graph_w[u][v]['weight'] = np.random.randint(1, 10)
+
+# plot the weighted graph
+edge_labels = nx.get_edge_attributes(graph_w, 'weight')
+
+plot_graph(graph_w,
+           with_labels=True,
+           node_color='lightblue',
+           node_size=700,
+           font_size=12,
+           edge_labels=edge_labels,
+           figsize=(5, 5),
+           title="Weighted Random Network")
+
+weighted_adjacency_matrix = nx.to_numpy_array(graph_w, weight='weight').astype(int)
+print("Weighted adjacency matrix:\n", weighted_adjacency_matrix)
+
+
+
+
+
+
+
+
+Weighted adjacency matrix:
+ [[0 9 4 9 9]
+ [9 0 1 6 4]
+ [4 1 0 0 6]
+ [9 6 0 0 8]
+ [9 4 6 8 0]]
+
+
+
+
+
+
+../_images/examples_chap_02_8_1.png +
+
+

self avoiding path

+
+
[8]:
+
+
+
# Create a graph
+G = nx.Graph()
+edges = [('A', 'B'), ('A', 'C'), ('B', 'D'), ('B', 'E'), ('C', 'F'), ('E', 'F')]
+G.add_edges_from(edges)
+
+# Find all self-avoiding paths from 'A' to 'F'
+start_node = 'A'
+target_node = 'F'
+all_saps = list(find_sap(G, start_node, target_node))
+
+for path in all_saps:
+    print("->".join(path))
+
+plot_graph(G, seed=2, figsize=(3, 3))
+
+
+
+
+
+
+
+
+A->B->E->F
+A->C->F
+
+
+
+
[8]:
+
+
+
+
+<AxesSubplot:>
+
+
+
+
+
+
+../_images/examples_chap_02_10_2.png +
+
+

A Hamiltonian path is a path in a graph that visits each vertex exactly once.

+
+
[9]:
+
+
+
# Example usage
+G = nx.Graph()
+G.add_edges_from([(1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 1)])
+
+plot_graph(G, seed=2, figsize=(3, 3))
+
+path = find_hamiltonian_path(G)
+if path:
+    print("Hamiltonian Path found:", path)
+else:
+    print("No Hamiltonian Path found")
+
+
+
+
+
+
+
+
+Hamiltonian Path found: (1, 2, 3, 4, 5, 6)
+
+
+
+
+
+
+../_images/examples_chap_02_12_1.png +
+
+
+
[10]:
+
+
+
# hamiltonian path of weighted graph:
+path = find_hamiltonian_path(graph_w)
+if path:
+    print("Hamiltonian Path found:", path)
+else:
+    print("No Hamiltonian Path found")
+
+
+
+
+
+
+
+
+Hamiltonian Path found: (0, 1, 2, 4, 3)
+
+
+
    +
  • Adjacency List

  • +
+
+
[11]:
+
+
+
G = nx.Graph()
+edges = [(1, 2), (1, 3), (2, 4), (2, 5), (3, 6), (5, 6)]
+G.add_edges_from(edges)
+
+plot_graph(G, seed=2, figsize=(3, 3))
+
+adjacency_matrix = nx.to_numpy_array(G).astype(int)
+print(f"adjacency matrix\n {adjacency_matrix}")
+
+
+adjacency_list = {n: list(neighbors) for n, neighbors in G.adj.items()}
+print(f"adjacency list\n {adjacency_list}")
+
+
+
+
+
+
+
+
+adjacency matrix
+ [[0 1 1 0 0 0]
+ [1 0 0 1 1 0]
+ [1 0 0 0 0 1]
+ [0 1 0 0 0 0]
+ [0 1 0 0 0 1]
+ [0 0 1 0 1 0]]
+adjacency list
+ {1: [2, 3], 2: [1, 4, 5], 3: [1, 6], 4: [2], 5: [2, 6], 6: [3, 5]}
+
+
+
+
+
+
+../_images/examples_chap_02_15_1.png +
+
+
    +
  • Adjaceccy list of directed graph:

  • +
+
+
[12]:
+
+
+
G = nx.DiGraph()
+edges = [(1, 2), (1, 3), (2, 4), (2, 5), (3, 6), (5, 6)]
+G.add_edges_from(edges)
+plot_graph(G, seed=2, figsize=(3, 3))
+
+adjacency_matrix = nx.to_numpy_array(G).astype(int)
+print(f"adjacency matrix\n {adjacency_matrix}")
+
+adjacency_list = {n: list(neighbors) for n, neighbors in G.adj.items()}
+print(f"adjacency list\n {adjacency_list}")
+
+
+
+
+
+
+
+
+adjacency matrix
+ [[0 1 1 0 0 0]
+ [0 0 0 1 1 0]
+ [0 0 0 0 0 1]
+ [0 0 0 0 0 0]
+ [0 0 0 0 0 1]
+ [0 0 0 0 0 0]]
+adjacency list
+ {1: [2, 3], 2: [4, 5], 3: [6], 4: [], 5: [6], 6: []}
+
+
+
+
+
+
+../_images/examples_chap_02_17_1.png +
+
+

Implementation of BFS for Graph using Adjacency List:

+
+
[13]:
+
+
+
from collections import deque
+
+# Function to perform Breadth First Search on a graph
+# represented using adjacency list
+def bfs(adjList, startNode, visited):
+    # Create a queue for BFS
+    q = deque()
+
+    # Mark the current node as visited and enqueue it
+    visited[startNode] = True
+    q.append(startNode)
+
+    # Iterate over the queue
+    while q:
+        # Dequeue a vertex from queue and print it
+        currentNode = q.popleft()
+        print(currentNode, end=" ")
+
+        # Get all adjacent vertices of the dequeued vertex
+        # If an adjacent has not been visited, then mark it visited and enqueue it
+        for neighbor in adjList[currentNode]:
+            if not visited[neighbor]:
+                visited[neighbor] = True
+                q.append(neighbor)
+
+# Function to add an edge to the graph
+def addEdge(adjList, u, v):
+    adjList[u].append(v)
+
+def main():
+    # Number of vertices in the graph
+    vertices = 5
+
+    # Adjacency list representation of the graph
+    adjList = [[] for _ in range(vertices)]
+
+    # Add edges to the graph
+    addEdge(adjList, 0, 1)
+    addEdge(adjList, 0, 2)
+    addEdge(adjList, 1, 3)
+    addEdge(adjList, 1, 4)
+    addEdge(adjList, 2, 4)
+
+    # Mark all the vertices as not visited
+    visited = [False] * vertices
+
+    # Perform BFS traversal starting from vertex 0
+    print("Breadth First Traversal starting from vertex 0:", end=" ")
+    bfs(adjList, 0, visited)
+
+    #plot the graph
+    G = nx.Graph()
+    G.add_edges_from([(0, 1), (0, 2), (1, 3), (1, 4), (2, 4)])
+    plot_graph(G, seed=2, figsize=(3, 3))
+
+if __name__ == "__main__":
+    main()
+
+
+
+
+
+
+
+
+Breadth First Traversal starting from vertex 0: 0 1 2 3 4
+
+
+
+
+
+
+../_images/examples_chap_02_19_1.png +
+
+
+
[14]:
+
+
+
from netsci.analysis import graph_info
+graph_info(graph_w)
+
+
+
+
+
+
+
+
+Graph information
+Directed                                :                False
+Number of nodes                         :                    5
+Number of edges                         :                    9
+Average degree                          :               3.6000
+Connectivity                            :            connected
+
+
+
+

Table 2.1

+
+
[15]:
+
+
+
import networkx as nx
+import pandas as pd
+from netsci.analysis import average_degree
+from netsci.utils import list_sample_graphs, load_sample_graph
+
+
+
+
+
[21]:
+
+
+
nets = list(list_sample_graphs().keys())
+
+
+
+
+
[17]:
+
+
+
G = load_sample_graph("Internet")
+
+
+
+
+
[18]:
+
+
+
graph_info(G)
+
+
+
+
+
+
+
+
+Graph information
+Directed                                :                False
+Number of nodes                         :               192244
+Number of edges                         :               609066
+Average degree                          :               6.3364
+Connectivity                            :         disconnected
+
+
+
+
[19]:
+
+
+
for net in tqdm(nets, desc="Processing sample graphs"):
+    print(net)
+
+
+
+
+
+
+
+
+Processing sample graphs: 100%|██████████| 10/10 [00:00<00:00, 19463.13it/s]
+
+
+
+
+
+
+
+Collaboration
+Internet
+PowerGrid
+Protein
+PhoneCalls
+Citation
+Metabolic
+Email
+WWW
+Actor
+
+
+
+
+
+
+
+
+
+
+
+
[20]:
+
+
+
data_list = []
+
+for net in tqdm(nets[:-1], desc="Processing sample graphs"):
+    G = load_sample_graph(net)
+    num_nodes = G.number_of_nodes()
+    num_edges = G.number_of_edges()
+    avg_degree = average_degree(G)
+    directed = nx.is_directed(G)
+
+    # Append a dictionary of data for this network to the list
+    data_list.append({
+        'num_nodes': num_nodes,
+        'num_edges': num_edges,
+        'avg_degree': avg_degree,
+        "directed": directed,
+        "name": net
+    })
+
+# Create the DataFrame from the list of dictionaries
+df = pd.DataFrame(data_list)
+
+# Display the DataFrame
+df
+
+
+
+
+
+
+
+
+Processing sample graphs: 100%|██████████| 9/9 [00:33<00:00,  3.72s/it]
+
+
+
+
[20]:
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
num_nodesnum_edgesavg_degreedirectedname
023133934398.078416FalseCollaboration
11922446090666.336385FalseInternet
2494165942.669095FalsePowerGrid
3201829302.903865FalseProtein
436595918265.018500TruePhoneCalls
5449673468947920.857285TrueCitation
61039580211.168431TrueMetabolic
7571941037313.627339TrueEmail
832572914971349.192513TrueWWW
+
+
+
+
+
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/examples/chap_02.ipynb b/examples/chap_02.ipynb new file mode 100644 index 0000000..bd2facf --- /dev/null +++ b/examples/chap_02.ipynb @@ -0,0 +1,848 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# [Chapter 2](https://github.com/Ziaeemehr/netsci/blob/main/docs/examples/chap_02.ipynb)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### **Graph Theory**\n", + "\n", + "Code by : Abolfazl Ziaeemehr \n", + "- https://github.com/Ziaeemehr\n", + "\n", + "\"Open" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# uncomment and run this line to install the package on colab\n", + "# !pip install \"git+https://github.com/Ziaeemehr/netsci.git\" -q" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import netsci\n", + "import numpy as np\n", + "import networkx as nx\n", + "from tqdm import tqdm\n", + "import matplotlib.pyplot as plt\n", + "from netsci.plot import plot_graph\n", + "from netsci.analysis import find_sap, find_hamiltonian_path" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "np.random.seed(0)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Degrees: {0: 2, 1: 2, 2: 2, 3: 5, 4: 3, 5: 1, 6: 3, 7: 2}\n", + "Average degree: 2.5\n", + "Adjacency matrix:\n", + " [[0 0 0 1 1 0 0 0]\n", + " [0 0 1 0 0 0 1 0]\n", + " [0 1 0 1 0 0 0 0]\n", + " [1 0 1 0 0 1 1 1]\n", + " [1 0 0 0 0 0 1 1]\n", + " [0 0 0 1 0 0 0 0]\n", + " [0 1 0 1 1 0 0 0]\n", + " [0 0 0 1 1 0 0 0]]\n", + "Edges: [(0, 3), (0, 4), (1, 2), (1, 6), (2, 3), (3, 5), (3, 6), (3, 7), (4, 6), (4, 7)]\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# make a random graph with n nodes and p% probability of edge connection\n", + "num_nodes = 8\n", + "probability = .4\n", + "seed = 2\n", + "graph = nx.gnp_random_graph(num_nodes, probability, seed=2, directed=False)\n", + "\n", + "# degree distribution\n", + "degrees = dict(graph.degree())\n", + "print(\"Degrees:\", degrees)\n", + "\n", + "# calculate the average degree\n", + "average_degree = np.mean(list(degrees.values()))\n", + "print(\"Average degree:\", average_degree)\n", + "\n", + "# adjacency matrix\n", + "adjacency_matrix = nx.to_numpy_array(graph).astype(int)\n", + "print(\"Adjacency matrix:\\n\", adjacency_matrix)\n", + "\n", + "# edges\n", + "edges = list(graph.edges())\n", + "print(\"Edges:\", edges)\n", + "\n", + "# plot the graph\n", + "plot_graph(graph, node_size=1000,\n", + " node_color='darkred',\n", + " edge_color='gray',\n", + " figsize=(5, 5),\n", + " title=\"Random Graph with {} nodes and {}% edge connection\".format(num_nodes, probability*100))\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Shortest path from 3 to 0 : [3, 0]\n", + "Diameter: 3\n", + "Average shortest path length: 1.82\n" + ] + } + ], + "source": [ + "# shortest path, find distance between two nodes\n", + "source = np.random.randint(0, len(graph)) # random source node\n", + "target = np.random.randint(0, len(graph)) # random target node\n", + "shortest_path = nx.shortest_path(graph, source, target)\n", + "print(\"Shortest path from\", source, \"to\", target, \":\", shortest_path)\n", + "\n", + "# diameter : maximal shortest path length\n", + "if nx.is_connected(graph):\n", + " diameter = nx.diameter(graph)\n", + " print(\"Diameter:\", diameter)\n", + " \n", + "# average shortest path length\n", + "avg_shortest_path_length = nx.average_shortest_path_length(graph)\n", + "print(f\"Average shortest path length: {avg_shortest_path_length:.2f}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfwAAAGpCAYAAABoEYRXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB34klEQVR4nO3deXxU1dnA8d+dTPZ9I4Q1yJKwhC1AQEBZRFCQxYoCraLFreLSvvZVwa1WAbW+2paitRVbtaDgliBSlU0EJGyyI4EgWyAJWUlC1smc948wIyELgdzJncw8388nH8idO+c+M5mZZ+655zxHU0ophBBCCOHSTEYHIIQQQgjHk4QvhBBCuAFJ+EIIIYQbkIQvhBBCuAFJ+EIIIYQbkIQvhBBCuAFJ+EIIIYQbkIQvhBBCuAFJ+EIIIYQbuKKE/+9//xtN0+w/ZrOZ6Ohopk2bxpEjRxwV42X94Q9/QNM0w45/qW+//bbG8+Tl5UVkZCRDhw7l6aef5sSJE/Xed+/evcyaNYvOnTvj6+uLr68vXbt25YEHHmDHjh3N+Chqi4mJYcKECc16TNtr7vjx4/ZtS5cu5c9//nOtfY8fP46mabz22mtXfby0tDTuvPNOOnTogK+vL507d+Z//ud/yM3Nveo2HSEmJoa7777b6DAcoq6/eWM888wzaJpGr1696rx9zZo1DBkyBD8/PyIiIrj77rs5e/Zso9v/6KOP6Nu3Lz4+PrRp04bf/va3FBcX19jn1KlT3HzzzQQFBdG9e3eSk5NrtfPxxx8THh5Odnb2FT2+q2X7PPr222+b5XjuqqSkhD/84Q91Ps9X+5rW21Wd4f/rX/9iy5YtrFmzhocffpgVK1YwbNgw8vPz9Y6vRZs/fz5btmxh/fr1LF68mBEjRvDuu+/SvXt3lixZUmv/t99+m4SEBLZu3cpjjz3GypUr+fLLL/ntb3/LgQMHGDhwIEePHjXgkRhn/PjxbNmyhejoaPu2+hJ+U2VnZzN48GA2b97Miy++yKpVq5g9ezb//Oc/ueGGG7BarbofU+hj9+7dvPbaa0RFRdV5+4YNG7jpppuIiooiOTmZv/zlL6xZs4bRo0dTXl5+2faXLFnC9OnTGThwIP/97395/vnn+fe//82tt95aY7+ZM2dy7tw5PvnkE6ZMmcLtt99e4z177tw5HnvsMV577TUiIyOb9qCFUykpKeGFF16oM+HX9TlmCHUF/vWvfylAbd++vcb2F154QQHq3XffvZLmdPP888+rK3woDrV+/XoFqI8//rjWbbm5uapfv37KbDarvXv32rdv2rRJmUwmdcstt6jy8vI6212+fLk6ffp0g8c+f/5804JvQMeOHdX48eMd1n5jjR8/XnXs2LHW9mPHjilA/elPf7qqdv/5z38qQK1Zs6bG9vnz5ytA/fDDD1fVriN07NhRzZw50+gwHML2OXPs2LFG7V9ZWan69u2rHn30UXX99dernj171tpn4MCBqkePHqqystK+bfPmzQpQb775ZoPtWywWFR0drW688cYa25csWaIAtWrVKqVU9XtP0zT1/fff2/fp2rWreuutt+y/P/DAA2rEiBGNelx6sX0erV+/vlmP626ys7MVoJ5//nmjQ6mXLtfwBwwYAEBWVpZ9W1lZGY8//jh9+/YlODiYsLAwhgwZUmcXl6ZpPPzww3zwwQd0794dPz8/+vTpw8qVK2vt++WXX9K3b1+8vb3p1KlTvd23ZWVlzJkzh06dOuHl5UXbtm2ZPXs2BQUFNfazdVOvXLmSfv364evrS/fu3e3H/ve//0337t3x9/dn0KBBTe5WDwsL4+2338ZisfDGG2/Yt8+fPx8PDw/efvttvLy86rzv1KlTadOmjf33u+++m4CAAPbt28eNN95IYGAgo0ePBmD16tVMmjSJdu3a4ePjQ5cuXXjggQfIycmp0abtcsiuXbu49dZbCQoKIjg4mF/96lf1djl+9dVX9O/fH19fX+Li4nj33Xcv+7gHDhzI+PHja2yLj49H0zS2b99u3/bZZ5+haRr79u0DaneFjRgxgi+//JITJ07UuGxyqddff51OnToREBDAkCFDSElJuWyMnp6eAAQHB9fYHhISAoCPj0+D97c9lwcOHGD69OkEBwcTFRXFr3/9a86dO1dj38a+PisrK3niiSdo3bo1fn5+DBs2jG3bttV5/MzMTB544AHatWuHl5cXnTp14oUXXsBisdTY76233qJPnz4EBAQQGBhIXFwcc+fOvdzTwwsvvEBiYiJhYWEEBQXRv39/Fi9ejLpk/S3be6oxr5OUlBSGDh1q7yafM2cOlZWVl43lYi+//DJ5eXnMmzevzttPnz7N9u3bufPOOzGbzfbt1157Ld26dePzzz9vsP2UlBQyMjK45557amyfOnUqAQEB9vtXVFSglMLf39++T0BAAGVlZQB8//33vP/++7z99ttX9PgAjhw5wowZM2jVqhXe3t50796dRYsW1drv0KFDjBs3zn7Z4sEHH6SoqKjWfkop5s+fT8eOHfHx8WHAgAGsXr2aESNGMGLEiBr7FhYW8vvf/77Ga/W3v/0t58+fb1TsX331FaNHjyY4OBg/Pz+6d+/OggULauyzYsUK++WWwMBAxowZw5YtW2rscyXvryvJKY19bgsKCnj88ce55ppr8Pb2plWrVtx8880cOnSI48eP23tsXnjhBfvnku2yW31d+u+++y59+vTBx8eHsLAwpkyZwo8//lhjH9vnfFpaGjfffDMBAQG0b9+exx9/vFG9UzVcybeD+s7w//a3vylAffrpp/ZtBQUF6u6771YffPCBWrdunfrqq6/U73//e2UymdR7771X4/6AiomJUYMGDVLLly9Xq1atUiNGjFBms1kdPXrUvt+aNWuUh4eHGjZsmPrss8/Uxx9/rAYOHKg6dOhQ4wzfarWqsWPHKrPZrJ599ln1zTffqNdee035+/urfv36qbKyMvu+HTt2VO3atVO9evVSH374oVq1apVKTExUnp6e6rnnnlNDhw5Vn332mfr8889Vt27dVFRUlCopKWnweWroDN8mOjpade7cWSlVfQbh6+urhgwZ0mC7l5o5c6by9PRUMTExasGCBWrt2rXq66+/Vkop9dZbb6kFCxaoFStWqA0bNqj33ntP9enTR8XGxqqKigp7G7bekY4dO6r//d//VV9//bV6/fXX7c/VxfvanqsePXqo999/X3399ddq6tSpClAbNmxoMNannnpKBQQE2NvLzMxUgPL19VXz5s2z7/eb3/xGRUVF2X+/9GzvwIEDaujQoap169Zqy5Yt9h+lfj7Dj4mJUePGjVNJSUkqKSlJxcfHq9DQUFVQUNBgjAUFBapDhw7quuuuU/v371dFRUVqw4YNqkOHDuqWW2657N/D9lzGxsaq5557Tq1evVq9/vrrytvbW91zzz32/a7k9Tlz5kylaZr63//9X/XNN9+o119/XbVt21YFBQXVOMPPyMhQ7du3Vx07dlRvv/22WrNmjXrxxReVt7e3uvvuu+37ffjhhwpQjzzyiPrmm2/UmjVr1N///nf16KOPXvbx3X333Wrx4sVq9erVavXq1erFF19Uvr6+6oUXXqixX2NfJwcOHFB+fn6qR48e6sMPP1TJyclq7Nix9vdzY87wDxw4oLy9vdWXX36plFJ1nuF/9dVXCrDvc7HbbrtNRUdHN3iMv//97wpQBw4cqHXbgAEDarxv4+Li1F133aXy8vLU559/rkwmk9q6dauqqKhQPXv2VH/84x8v+5jqeozBwcEqPj5evf/+++qbb75Rjz/+uDKZTOoPf/iDfb/MzEzVqlUr1bZtW/Wvf/1LrVq1Sv3yl7+0P58Xn+HPmTNHAer+++9XX331lfrnP/+pOnTooKKjo9X1119v3+/8+fOqb9++KiIiQr3++utqzZo16i9/+YsKDg5Wo0aNUlartcHY33nnHaVpmhoxYoRaunSpWrNmjXrzzTfVQw89ZN/H1lNy4403qqSkJLVs2TKVkJCgvLy81MaNG+37Nfb9pVTjc0pjn9vCwkLVs2dP5e/vr/74xz+qr7/+Wn366afqscceU+vWrVNlZWX219msWbPsn0tpaWlKqbp7rWw9h9OnT1dffvmlev/999U111yjgoOD1eHDh+37zZw5U3l5eanu3bur1157Ta1Zs0Y999xzStO0Wu+9y7mqhJ+SkqIqKytVUVGR+uqrr1Tr1q3VddddV6O77FIWi0VVVlaqWbNmqX79+tUMAlRUVJQqLCy0b8vMzFQmk0ktWLDAvi0xMVG1adNGlZaW2rcVFhaqsLCwGgnf9sS/+uqrNY6zbNkyBah//OMf9m0dO3ZUvr6+Kj093b5t9+7dClDR0dE1usiTkpIUoFasWNHg89SYhJ+YmKh8fX3tjxVQ06ZNq7Wf7Xmz/Vz8Bps5c2ajLqVYrVZVWVmpTpw4oQCVnJxsv832Jvrd735X4z62N+F//vMf+7aOHTsqHx8fdeLECfu20tJSFRYWph544IEGY1izZo0C1HfffaeUUuo///mPCgwMVA899JAaOXKkfb+uXbuqGTNm2H+v641yuS79+Ph4ZbFY7Nu3bdumAPXhhx82GKNSSp05c0YNGTJEAfafqVOn1kjC9bE9l5e+7h566CHl4+Nj/9s19vX5448/Nvi3uTjhP/DAAyogIKDG30YppV577bUayerhhx9WISEhl30sl1NVVaUqKyvVH//4RxUeHl7jddnY18kdd9yhfH19VWZmpn2bxWJRcXFxjUr4VVVVKjExUU2fPt2+ra6Eb3u+bF8ML3b//fcrLy+vBo8zb948BaiMjIxat914442qW7du9t83b96sWrdurQBlMpnUc889p5RS6sUXX1Q9evSo93JdQ8aOHavatWunzp07V2P7ww8/rHx8fFReXp5SSqknn3xSaZqmdu/eXWO/MWPG1Ej4eXl5ytvbW91xxx019tuyZYsCaiT8BQsWKJPJVOsk75NPPqlxOaMuRUVFKigoSA0bNqzeLwZVVVWqTZs2Kj4+XlVVVdW4b6tWrdS1115r39bY95dSjc8pjX1u//jHPypArV69ut7H21CX/qWfY/n5+crX11fdfPPNNfY7efKk8vb2rvEZaPucX758eY19b775ZhUbG1tvPHW5qi79wYMH4+npSWBgIOPGjSM0NJTk5OQa3WVQPRp16NChBAQEYDab8fT0ZPHixbW6LABGjhxJYGCg/feoqChatWplH9F+/vx5tm/fzq233lqjazUwMJBbbrmlRlvr1q0DqDWKeerUqfj7+7N27doa2/v27Uvbtm3tv3fv3h2o7j728/Ortb2hUfaNpS7pBq1PQkICnp6e9p//+7//q7XPL37xi1rbzp49y4MPPkj79u3tz33Hjh0B6nz+f/nLX9b4/fbbb8dsNrN+/foa2/v27UuHDh3sv/v4+NCtW7fLPie2bts1a9YA2LsPx40bx/fff09JSQmnTp3iyJEj3HDDDQ22dTnjx4/Hw8PD/nvv3r2By//d8vPzmTRpEoWFhSxZsoTvvvuON998k02bNjFx4sRaXeP1mThxYo3fe/fuTVlZmX1EeGNfn7bnvr6/zcVWrlzJyJEjadOmDRaLxf5z0003AdWD1gAGDRpEQUEB06dPJzk5udYlnoasW7eOG264geDgYDw8PPD09OS5554jNze31mj3xrxO1q9fz+jRo2sMtPPw8OCOO+5oVDyvv/46R44cafQAzvpm8jR2hk9j7n/ttddy8uRJDh06RF5eHi+88AJHjhxh/vz5vP3225jNZp5//nk6dOhA69atefjhh+1d/nUpKytj7dq1TJkyBT8/vxp/25tvvpmysjL75ar169fTs2dP+vTpU6ONGTNm1Pg9JSWF8vJybr/99hrbBw8eTExMTI1tK1eupFevXvTt27fGsceOHXvZkf/ff/89hYWFPPTQQ/U+d6mpqZw5c4Y777wTk+nndBQQEMAvfvELUlJSKCkpqXGfy72/bC6XU67kuf3vf/9Lt27dmvzZZLNlyxZKS0trfQa0b9+eUaNG1cpRmqbVynO9e/e+4lx0VQn//fffZ/v27axbt44HHniAH3/8kenTp9fY57PPPuP222+nbdu2/Oc//2HLli1s376dX//613W+wMPDw2tt8/b2prS0FKj+MLZarbRu3brWfpduy83NxWw21xoFq2karVu3rjXFKiwsrMbvtmvo9W1v6A3aWCdPnrRfj4+IiMDX17fOP97SpUvZvn07K1asqLMdPz8/goKCamyzWq3ceOONfPbZZzzxxBOsXbuWbdu22V+8tuf0Ypc+h2azmfDw8FrP1eX+TvXx8fFh6NCh9oS/du1axowZw4gRI6iqqmLjxo2sXr0aoMlvqktj9Pb2Bup+3Bd75ZVX2L17N6tXr2bGjBkMHz6c3/zmNyxZsoRvvvmmzpkVV3P8xr4+bf/W97e5WFZWFl988UWNL4eenp707NkTwJ7Y77zzTt59911OnDjBL37xC1q1akViYqL9ua/Ptm3buPHGGwH45z//yebNm9m+fTtPP/10jcdW33Ngex4u3i83N7dR7+e6nDx5kueee47nn38eLy8vCgoKKCgowGKxYLVaKSgosB/LFktdUyvz8vJqvc8vdaX39/T0JDY21j4W5MEHH+TOO+9k2LBh/Otf/+Jf//oXa9euZdeuXWzcuLHW9eyL5ebmYrFYWLhwYa2/7c033wz8/Ldt7PNpexx1zWi4dFtWVhZ79+6tdezAwECUUg1+YbSNAWrXrl2Djw+oc/R6mzZtsFqttWZ/Nfb9fbnX4JU8t9nZ2Q0+jit1ucd96WvNz8+v1hgib2/vK85F5svvUlv37t3tA/VGjhxJVVUV77zzDp988gm33XYbAP/5z3/o1KkTy5Ytq/Ht7ooHGVwQGhqKpmlkZmbWuu3SbeHh4VgsFrKzs2t8qCqlyMzMZODAgVcVg162bdtGZmYms2bNAqrPakaNGsU333xDRkZGjRdBjx49AOqdv1nXN+f9+/ezZ88e/v3vfzNz5kz79rS0tHpjyszMrNHLYbFYyM3NrfNNc7VGjx7Nc889x7Zt20hPT2fMmDEEBgYycOBAVq9ezZkzZ+jWrRvt27fX7ZhXYvfu3bRt27bWm9D2etm/f78ux2ns69P23Nf3t7lYREQEvXv3rnfg2sWDPe+55x7uuecezp8/z3fffcfzzz/PhAkTOHz4sL0X6FIfffQRnp6erFy5ssYHT1JS0pU9+IuEh4c36v1cl59++onS0lIee+wxHnvssVq3h4aG8thjj/HnP//ZPi9/37599g9ym3379tU7b98mPj7evq/t/QjVf4dDhw7VOtm52L///W8OHjzIp59+ClSfKU6dOpWuXbsCMGvWLD744ANeeOGFOu8fGhqKh4cHd955J7Nnz65zn06dOgGNfz5tr6uLB1lfvO/FZ/m2k5H6BuZGRETUuR2wv7bT09Pr3ccWS0ZGRq3bzpw5g8lkIjQ0tN77N8WVPLeRkZENPo4rdbnH3dDz2hS6jNJ/9dVXCQ0N5bnnnrPPVbYVnLk4IWVmZtY5Sr8xbKPkP/vssxrfaoqKivjiiy9q7Gsbqf6f//ynxvZPP/2U8+fP2283Ql5eHg8++CCenp787ne/s2+fM2cOVVVVPPjgg1c8SvlStufc9s3XpqHRwZeevS5fvhyLxVJrxG5T3HDDDVgsFp599lnatWtHXFycffuaNWvsXcaX05gehavRpk0b0tPTOX36dI3tttHCen3Db+zr0/bc1/e3udiECRPYv38/nTt3ZsCAAbV+Lk74Nv7+/tx00008/fTTVFRUcODAgXpjthXauvhSSWlpKR988EHjH/glRo4cydq1a2sknqqqKpYtW3bZ+/bt25f169fX+unTpw8xMTGsX7+ehx9+GIC2bdsyaNAg/vOf/1BVVWVvIyUlhdTU1Fpz6S+VmJhIdHQ0//73v2ts/+STTyguLq73/jk5Ofz+97/nL3/5i32mh1Kqxuj24uLiBi/v+fn5MXLkSHbt2kXv3r3r/NvaksfIkSM5cOAAe/bsqdHG0qVLaz0eb2/vWs9zSkpKrV7GCRMmcPToUcLDw+s89qWXAC527bXXEhwczN///vd6H2NsbCxt27Zl6dKlNfY5f/48n376qX3kviNcyXN70003cfjwYfvluLo0ticRYMiQIfj6+tb6DEhPT2fdunUOy1FXdYZ/qdDQUObMmcMTTzzB0qVL+dWvfsWECRP47LPPeOihh7jttts4deoUL774ItHR0Vddle/FF19k3LhxjBkzhscff5yqqipeeeUV/P39ycvLs+83ZswYxo4dy5NPPklhYSFDhw5l7969PP/88/Tr148777xTj4d9WUeOHCElJQWr1Upubi5bt25l8eLFFBYW8v7779u7W6H6GveiRYt45JFH6N+/P/fffz89e/bEZDKRkZFhP0O4tPu+LnFxcXTu3JmnnnoKpRRhYWF88cUXDXbbfvbZZ5jNZsaMGcOBAwd49tln6dOnT63rfE2RkJBAaGgo33zzTY0pTjfccAMvvvii/f+XEx8fz2effcZbb71FQkICJpPJ3uPUFLNnz2bJkiWMGTOGp556ivbt27N//35eeukloqKial1Lv1qNfX12796dX/3qV/z5z3/G09OTG264gf379/Paa6/Veh388Y9/ZPXq1Vx77bU8+uijxMbGUlZWxvHjx1m1ahV///vfadeuHffddx++vr4MHTqU6OhoMjMzWbBgAcHBwQ32fI0fP57XX3+dGTNmcP/995Obm8trr71W60vllXjmmWdYsWIFo0aN4rnnnsPPz49FixY1arpXSEhInV9GQ0JC6vyi+sorrzBmzBimTp3KQw89xNmzZ3nqqafo1atXjdfiiRMn6Ny5MzNnzmTx4sVAdQ/cq6++yp133skDDzzA9OnTOXLkCE888QRjxoxh3Lhxdcb4P//zPyQmJtZ4D40dO5bHH3+cIUOGEBAQwF//+lfuvffeBh/rX/7yF4YNG2a/xBQTE0NRURFpaWl88cUX9iT029/+lnfffZfx48fbX7NLlizh0KFDNdoLCwvjf/7nf1iwYAGhoaFMmTKF9PR0XnjhBaKjo2tcS//tb3/Lp59+ynXXXcfvfvc7evfujdVq5eTJk3zzzTc8/vjjJCYm1hl3QEAA//d//8e9997LDTfcwH333UdUVBRpaWns2bOHv/3tb5hMJl599VV++ctfMmHCBB544AHKy8v505/+REFBAS+//HKDz01TXclzu2zZMiZNmsRTTz3FoEGDKC0tZcOGDUyYMME+XqBjx44kJyczevRowsLCiIiIqPNLUUhICM8++yxz587lrrvuYvr06eTm5vLCCy/g4+PD888/75gHfCUj/OqblqdU9SjcDh06qK5du9pHSL/88ssqJiZGeXt7q+7du6t//vOfdRbJAdTs2bNrtVlXcZEVK1ao3r17Ky8vL9WhQwf18ssv19lmaWmpevLJJ1XHjh2Vp6enio6OVr/5zW9Ufn5+rWPUVUymrpgaW9jFNkrf9mM2m1V4eLgaMmSImjt3rjp+/Hi99929e7e65557VKdOnZS3t7fy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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# directed graph\n", + "graph_dir = nx.to_directed(graph)\n", + "plot_graph(graph_dir, \n", + " node_size=1000,\n", + " node_color='darkred',\n", + " edge_color='gray',\n", + " figsize=(5, 5),\n", + " seed=1,\n", + " title=\"Random DGraph with {} nodes and {}% edge connection\".format(num_nodes, probability*100));" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Weighted adjacency matrix:\n", + " [[0 9 4 9 9]\n", + " [9 0 1 6 4]\n", + " [4 1 0 0 6]\n", + " [9 6 0 0 8]\n", + " [9 4 6 8 0]]\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# weighted graph\n", + "seed = 3\n", + "np.random.seed(seed) # to fix the plot\n", + "\n", + "num_nodes = 5\n", + "probability = 0.8\n", + "graph_w = nx.erdos_renyi_graph(num_nodes, probability, seed=seed)\n", + "\n", + "for (u,v) in graph_w.edges():\n", + " graph_w[u][v]['weight'] = np.random.randint(1, 10)\n", + "\n", + "# plot the weighted graph\n", + "edge_labels = nx.get_edge_attributes(graph_w, 'weight')\n", + "\n", + "plot_graph(graph_w, \n", + " with_labels=True, \n", + " node_color='lightblue', \n", + " node_size=700, \n", + " font_size=12,\n", + " edge_labels=edge_labels, \n", + " figsize=(5, 5), \n", + " title=\"Weighted Random Network\")\n", + "\n", + "weighted_adjacency_matrix = nx.to_numpy_array(graph_w, weight='weight').astype(int)\n", + "print(\"Weighted adjacency matrix:\\n\", weighted_adjacency_matrix)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "self avoiding path" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "A->B->E->F\n", + "A->C->F\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Create a graph\n", + "G = nx.Graph()\n", + "edges = [('A', 'B'), ('A', 'C'), ('B', 'D'), ('B', 'E'), ('C', 'F'), ('E', 'F')]\n", + "G.add_edges_from(edges)\n", + "\n", + "# Find all self-avoiding paths from 'A' to 'F'\n", + "start_node = 'A'\n", + "target_node = 'F'\n", + "all_saps = list(find_sap(G, start_node, target_node))\n", + "\n", + "for path in all_saps:\n", + " print(\"->\".join(path))\n", + "\n", + "plot_graph(G, seed=2, figsize=(3, 3))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A Hamiltonian path is a path in a graph that visits each vertex exactly once." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hamiltonian Path found: (1, 2, 3, 4, 5, 6)\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Example usage\n", + "G = nx.Graph()\n", + "G.add_edges_from([(1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 1)])\n", + "\n", + "plot_graph(G, seed=2, figsize=(3, 3))\n", + "\n", + "path = find_hamiltonian_path(G)\n", + "if path:\n", + " print(\"Hamiltonian Path found:\", path)\n", + "else:\n", + " print(\"No Hamiltonian Path found\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hamiltonian Path found: (0, 1, 2, 4, 3)\n" + ] + } + ], + "source": [ + "# hamiltonian path of weighted graph:\n", + "path = find_hamiltonian_path(graph_w)\n", + "if path:\n", + " print(\"Hamiltonian Path found:\", path)\n", + "else:\n", + " print(\"No Hamiltonian Path found\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- Adjacency List" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "adjacency matrix\n", + " [[0 1 1 0 0 0]\n", + " [1 0 0 1 1 0]\n", + " [1 0 0 0 0 1]\n", + " [0 1 0 0 0 0]\n", + " [0 1 0 0 0 1]\n", + " [0 0 1 0 1 0]]\n", + "adjacency list\n", + " {1: [2, 3], 2: [1, 4, 5], 3: [1, 6], 4: [2], 5: [2, 6], 6: [3, 5]}\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "G = nx.Graph()\n", + "edges = [(1, 2), (1, 3), (2, 4), (2, 5), (3, 6), (5, 6)]\n", + "G.add_edges_from(edges)\n", + "\n", + "plot_graph(G, seed=2, figsize=(3, 3))\n", + "\n", + "adjacency_matrix = nx.to_numpy_array(G).astype(int)\n", + "print(f\"adjacency matrix\\n {adjacency_matrix}\")\n", + "\n", + "\n", + "adjacency_list = {n: list(neighbors) for n, neighbors in G.adj.items()}\n", + "print(f\"adjacency list\\n {adjacency_list}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- Adjaceccy list of directed graph:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "adjacency matrix\n", + " [[0 1 1 0 0 0]\n", + " [0 0 0 1 1 0]\n", + " [0 0 0 0 0 1]\n", + " [0 0 0 0 0 0]\n", + " [0 0 0 0 0 1]\n", + " [0 0 0 0 0 0]]\n", + "adjacency list\n", + " {1: [2, 3], 2: [4, 5], 3: [6], 4: [], 5: [6], 6: []}\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "G = nx.DiGraph()\n", + "edges = [(1, 2), (1, 3), (2, 4), (2, 5), (3, 6), (5, 6)]\n", + "G.add_edges_from(edges)\n", + "plot_graph(G, seed=2, figsize=(3, 3))\n", + "\n", + "adjacency_matrix = nx.to_numpy_array(G).astype(int)\n", + "print(f\"adjacency matrix\\n {adjacency_matrix}\")\n", + "\n", + "adjacency_list = {n: list(neighbors) for n, neighbors in G.adj.items()}\n", + "print(f\"adjacency list\\n {adjacency_list}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[Implementation of BFS for Graph using Adjacency List:](https://www.geeksforgeeks.org/breadth-first-search-or-bfs-for-a-graph/)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Breadth First Traversal starting from vertex 0: 0 1 2 3 4 " + ] + }, + { + "data": { + "image/png": "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peH777+H3W7HnXfeienTp+PKFZ6eKyu5P3HULDs7mzp37kyCINDEiROpvLxc7pKcwmw202uvvUZarZZiY2Np3759cpekWtzDy6CyshIvvfQSkpOTYTabsX//fixZsgQBAcp8hptWq8Urr7yC7OxsBAcHo3v37pg4cSIqKhr+7DtWT3J/4qhNVlYWxcTEkFarpddee43MZrPcJbmUzWajxYsXk06no9atW1NmZqbcJakKB95FSkpK6KmnniIA1KNHDzp27JjcJcnq119/pZSUFAJAI0aMoEuXLsldkipw4J1MFEVav349hYeHU1BQEC1fvpwnpVwliiK9//77FBgYSJGRkbRx40a5S1I8DrwTnT17lvr160cAaODAgfT777/LXZJb+u233+ihhx4iAPToo4/ShQsX5C5JsTjwTmCz2Wjp0qXk7+9PTZs2pU2bNsldktu7diUUFhZGjRs3pg8++IBEUZS7LMXhwEvs6NGjdM899xAAGjduHBkMBrlL8igXL168Pq24b9++dPbsWblLUhS+LSeRK1euIDU1FZ06dYLBYMDevXvx7rvvIiiIV3mtj9DQUKxduxbbtm3Dzz//jA4dOmDZsmUQ+Zl20pD7E0cJ9u7dS7GxseTj40Opqal05coVuUtShLKyMho7diwBoG7dutHx48flLsnjcQ/fAGVlZRg3bhx69OiBJk2aIDs7G3PmzIGvr6/cpSlCYGAgMjIysHv3bly4cAEJCQlIS0uDzWaTuzTPJfcnjqfatGkTNW3alPz9/Sk9PZ1vtTmZ0WikqVOnkkajoU6dOtGRI0fkLskjcQ9fT3/88QcGDhyIgQMHIjk5Gbm5uXjmmWeg0fA/pTPpdDosXLgQBw8ehMViQXJyMl555RWYzWa5S/Mscn/ieAq73U4ZGRkUGBhIERER9Omnn/JtI5mYzWaaM2cO+fj4UPv27Wn//v1yl+QxOPAOyMvLo+7duxMAGjVqFE8DdRNHjx6lu+66iwRBoEmTJtHly5flLsntceBrYTab6dVXXyWtVku33XYbff3113KXxG5gs9nozTffpEaNGlFUVBTt3LlT7pLcGge+BgcOHKAOHTqQl5cXvfzyy2QymeQuidXi1KlT1KtXLwJAI0eOpNLSUrlLcksc+BuUl5fTs88+S4IgUHJyMo8GexBRFOm9996jwMBAatq0KX3++edyl+R2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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from collections import deque\n", + "\n", + "# Function to perform Breadth First Search on a graph\n", + "# represented using adjacency list\n", + "def bfs(adjList, startNode, visited):\n", + " # Create a queue for BFS\n", + " q = deque()\n", + "\n", + " # Mark the current node as visited and enqueue it\n", + " visited[startNode] = True\n", + " q.append(startNode)\n", + "\n", + " # Iterate over the queue\n", + " while q:\n", + " # Dequeue a vertex from queue and print it\n", + " currentNode = q.popleft()\n", + " print(currentNode, end=\" \")\n", + "\n", + " # Get all adjacent vertices of the dequeued vertex\n", + " # If an adjacent has not been visited, then mark it visited and enqueue it\n", + " for neighbor in adjList[currentNode]:\n", + " if not visited[neighbor]:\n", + " visited[neighbor] = True\n", + " q.append(neighbor)\n", + "\n", + "# Function to add an edge to the graph\n", + "def addEdge(adjList, u, v):\n", + " adjList[u].append(v)\n", + "\n", + "def main():\n", + " # Number of vertices in the graph\n", + " vertices = 5\n", + "\n", + " # Adjacency list representation of the graph\n", + " adjList = [[] for _ in range(vertices)]\n", + "\n", + " # Add edges to the graph\n", + " addEdge(adjList, 0, 1)\n", + " addEdge(adjList, 0, 2)\n", + " addEdge(adjList, 1, 3)\n", + " addEdge(adjList, 1, 4)\n", + " addEdge(adjList, 2, 4)\n", + "\n", + " # Mark all the vertices as not visited\n", + " visited = [False] * vertices\n", + "\n", + " # Perform BFS traversal starting from vertex 0\n", + " print(\"Breadth First Traversal starting from vertex 0:\", end=\" \")\n", + " bfs(adjList, 0, visited)\n", + " \n", + " #plot the graph\n", + " G = nx.Graph()\n", + " G.add_edges_from([(0, 1), (0, 2), (1, 3), (1, 4), (2, 4)])\n", + " plot_graph(G, seed=2, figsize=(3, 3))\n", + "\n", + "if __name__ == \"__main__\":\n", + " main()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Graph information\n", + "Directed : False\n", + "Number of nodes : 5\n", + "Number of edges : 9\n", + "Average degree : 3.6000\n", + "Connectivity : connected\n" + ] + } + ], + "source": [ + "from netsci.analysis import graph_info\n", + "graph_info(graph_w)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Table 2.1" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "import networkx as nx\n", + "import pandas as pd\n", + "from netsci.analysis import average_degree\n", + "from netsci.utils import list_sample_graphs, load_sample_graph" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "nets = list(list_sample_graphs().keys())" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "G = load_sample_graph(\"Internet\")" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Graph information\n", + "Directed : False\n", + "Number of nodes : 192244\n", + "Number of edges : 609066\n", + "Average degree : 6.3364\n", + "Connectivity : disconnected\n" + ] + } + ], + "source": [ + "graph_info(G)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing sample graphs: 100%|██████████| 10/10 [00:00<00:00, 19463.13it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Collaboration\n", + "Internet\n", + "PowerGrid\n", + "Protein\n", + "PhoneCalls\n", + "Citation\n", + "Metabolic\n", + "Email\n", + "WWW\n", + "Actor\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "for net in tqdm(nets, desc=\"Processing sample graphs\"):\n", + " print(net)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing sample graphs: 100%|██████████| 9/9 [00:33<00:00, 3.72s/it]\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
num_nodesnum_edgesavg_degreedirectedname
023133934398.078416FalseCollaboration
11922446090666.336385FalseInternet
2494165942.669095FalsePowerGrid
3201829302.903865FalseProtein
436595918265.018500TruePhoneCalls
5449673468947920.857285TrueCitation
61039580211.168431TrueMetabolic
7571941037313.627339TrueEmail
832572914971349.192513TrueWWW
\n", + "
" + ], + "text/plain": [ + " num_nodes num_edges avg_degree directed name\n", + "0 23133 93439 8.078416 False Collaboration\n", + "1 192244 609066 6.336385 False Internet\n", + "2 4941 6594 2.669095 False PowerGrid\n", + "3 2018 2930 2.903865 False Protein\n", + "4 36595 91826 5.018500 True PhoneCalls\n", + "5 449673 4689479 20.857285 True Citation\n", + "6 1039 5802 11.168431 True Metabolic\n", + "7 57194 103731 3.627339 True Email\n", + "8 325729 1497134 9.192513 True WWW" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_list = []\n", + "\n", + "for net in tqdm(nets[:-1], desc=\"Processing sample graphs\"):\n", + " G = load_sample_graph(net)\n", + " num_nodes = G.number_of_nodes()\n", + " num_edges = G.number_of_edges()\n", + " avg_degree = average_degree(G)\n", + " directed = nx.is_directed(G)\n", + " \n", + " # Append a dictionary of data for this network to the list\n", + " data_list.append({\n", + " 'num_nodes': num_nodes,\n", + " 'num_edges': num_edges,\n", + " 'avg_degree': avg_degree,\n", + " \"directed\": directed,\n", + " \"name\": net\n", + " })\n", + "\n", + "# Create the DataFrame from the list of dictionaries\n", + "df = pd.DataFrame(data_list)\n", + "\n", + "# Display the DataFrame\n", + "df" + ] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/chap_03.html b/examples/chap_03.html new file mode 100644 index 0000000..6a3532d --- /dev/null +++ b/examples/chap_03.html @@ -0,0 +1,546 @@ + + + + + + + + Chapter 3 — netsci 0.1.dev1+g157bd64 documentation + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+

Chapter 3

+
+

Random Networks

+

Code by : Abolfazl Ziaeemehr - https://github.com/Ziaeemehr

+

Open In Colab

+
+
[1]:
+
+
+
# uncomment and run this line to install the package on colab
+# !pip install "git+https://github.com/Ziaeemehr/netsci.git" -q
+
+
+
+

A random network consists of N nodes where each node pair is connected with probability p. To construct a random network we follow these steps: 1) Start with N isolated nodes. 2) Select a node pair and generate a random number between 0 and 1. If the number exceeds p, connect the selected node pair with a link, otherwise leave them disconnected. 3) Repeat step (2) for each of the N(N-1)/2 node pairs.

+
+
[1]:
+
+
+
import random
+import numpy as np
+import networkx as nx
+import seaborn as sns
+import matplotlib.pyplot as plt
+from netsci.plot import plot_graph
+
+
+
+
+
[2]:
+
+
+
LABELSIZE = 13
+plt.rc('axes', labelsize=LABELSIZE)
+plt.rc('axes', titlesize=LABELSIZE)
+plt.rc('figure', titlesize=LABELSIZE)
+plt.rc('legend', fontsize=LABELSIZE)
+plt.rc('xtick', labelsize=LABELSIZE)
+plt.rc('ytick', labelsize=LABELSIZE)
+
+
+
+
+
[3]:
+
+
+

def create_random_network(N, p): + G = nx.Graph() # Initialize an empty graph + G.add_nodes_from(range(N)) # Add N isolated nodes + + # Iterate through each possible node pair + for i in range(N): + for j in range(i + 1, N): + if random.random() <= p: # Generate a random number and compare it with p + G.add_edge(i, j) # Connect the nodes if the condition is met + + return G + +# Example usage: +N = 10 # Number of nodes +p = 0.3 # Probability of edge creation + +seed=2 +random.seed(seed) +np.random.seed(seed) + +random_network = create_random_network(N, p) +plot_graph(random_network, seed=2, figsize=(5, 3), title="Random Network") +
+
+
+
+
[3]:
+
+
+
+
+<AxesSubplot:title={'center':'Random Network'}>
+
+
+
+
+
+
+../_images/examples_chap_03_6_1.png +
+
+

Other option would be to use the nx.gnp_random_graph function from NetworkX, which generates random graphs with a given number of nodes and a given probability of edge creation.

+
G = nx.gnp_random_graph(N, p)
+
+
+
+
+

Binimial distribution

+

Degree distribution in a random network follows a binomial distribution.

+
+
[4]:
+
+
+
# make a random graph with N nodes and average degree of k
+np.random.seed(2)
+
+num_nodes = [100, 1000, 10000]
+average_degree = 50
+lambd = 50
+colors1 = plt.cm.Reds(np.linspace(0.2, 0.6, len(num_nodes)))
+
+for i in range(len(num_nodes)):
+    probability = average_degree / num_nodes[i]
+    graph_b = nx.gnp_random_graph(num_nodes[i], probability)
+    degrees = [d for n, d in graph_b.degree()]
+    sns.kdeplot(degrees, fill=False, label=f"N.bino={num_nodes[i]}", color=colors1[i])
+
+s = np.random.poisson(lambd, num_nodes[-1])
+sns.kdeplot(s, fill=False, label=f"N.pois={num_nodes[i]}", color='b')
+
+plt.xlabel("k")
+plt.ylabel("P(k)")
+plt.legend();
+
+
+
+
+
+
+
+../_images/examples_chap_03_9_0.png +
+
+
+
+

The evolution of a random network

+
+
[5]:
+
+
+
import networkx as nx
+import matplotlib.pyplot as plt
+
+# Step 1: Generate a random graph (Erdős-Rényi model)
+n = 20  # number of nodes
+p = 0.12  # probability of edge creation
+G = nx.erdos_renyi_graph(n, p)
+
+# Step 2: Find all connected components
+connected_components = list(nx.connected_components(G))
+
+# Step 3: Calculate the size of each connected component
+component_sizes = [len(component) for component in connected_components]
+
+# Display the graph and component sizes
+print("Connected Components:")
+for i, component in enumerate(connected_components):
+    print(f"Component {i + 1}: Size {len(component)}")
+
+# Optionally, visualize the graph
+plot_graph(G, seed=2, figsize=(5, 3));
+
+
+
+
+
+
+
+
+Connected Components:
+Component 1: Size 19
+Component 2: Size 1
+
+
+
+
+
+
+../_images/examples_chap_03_11_1.png +
+
+

Plotting the size of giant connected component vs average degree

+
+
[6]:
+
+
+
N = int(1e4)
+print(f"N={N}, Ln(N)= {np.log(N)}")
+k_avg = [.1, 0.5, 0.9, 1.0] + np.linspace(1.1, np.log(N), 10).tolist()
+giant_component_sizes = []
+for i in range(len(k_avg)):
+    p = k_avg[i] / N
+    G = nx.erdos_renyi_graph(N, p)
+    connected_components = list(nx.connected_components(G))
+    component_sizes = [len(component) for component in connected_components]
+    giant_component_size = max(component_sizes)
+    giant_component_sizes.append(giant_component_size)
+
+    print(f"average k = {k_avg[i]:10.3f}, giant_component_size={giant_component_size:10d}")
+
+giant_component_sizes = np.array(giant_component_sizes)/N
+plt.plot(k_avg, giant_component_sizes, marker='o', label='Giant Component Size')
+plt.xlabel(r'Average Degree')
+plt.ylabel(r'$N_G / N$');
+
+
+
+
+
+
+
+
+N=10000, Ln(N)= 9.210340371976182
+average k =      0.100, giant_component_size=         4
+average k =      0.500, giant_component_size=        11
+average k =      0.900, giant_component_size=       164
+average k =      1.000, giant_component_size=       480
+average k =      1.100, giant_component_size=      1682
+average k =      2.001, giant_component_size=      8028
+average k =      2.902, giant_component_size=      9363
+average k =      3.803, giant_component_size=      9755
+average k =      4.705, giant_component_size=      9909
+average k =      5.606, giant_component_size=      9967
+average k =      6.507, giant_component_size=      9989
+average k =      7.408, giant_component_size=      9999
+average k =      8.309, giant_component_size=      9997
+average k =      9.210, giant_component_size=      9998
+
+
+
+
+
+
+../_images/examples_chap_03_13_1.png +
+
+
+
+

Degree distribution of real networks

+
+
[4]:
+
+
+
from netsci.utils import load_sample_graph, list_sample_graphs
+from netsci.analysis import graph_info
+
+graphs = list_sample_graphs()
+graphs.keys()
+
+
+
+
+
[4]:
+
+
+
+
+dict_keys(['Collaboration', 'Internet', 'PowerGrid', 'Protein', 'PhoneCalls', 'Citation', 'Metabolic', 'Email', 'WWW', 'Actor'])
+
+
+
+
[5]:
+
+
+
G_collab = load_sample_graph('Collaboration', verbose=True)
+graph_info(G_collab)
+
+
+
+
+
+
+
+
+Successfully loaded Collaboration
+================================
+Scientific collaboration network based on the arXiv preprint archive's
+ Condense Matter Physics category covering the period from January 1993 to April 2003.
+ Each node represents an author, and two nodes are connected if they co-authored at
+ least one paper in the dataset. Ref: Leskovec, J., Kleinberg, J., & Faloutsos, C. (2007).
+ Graph evolution: Densification and shrinking diameters.
+ ACM Transactions on Knowledge Discovery from Data (TKDD), 1(1), 2.
+Graph information
+Directed                                :                False
+Number of nodes                         :                23133
+Number of edges                         :                93439
+Average degree                          :               8.0784
+Connectivity                            :         disconnected
+
+
+

Figure 3.6

+
+
[10]:
+
+
+
from scipy.stats import poisson
+from collections import Counter
+
+fig, ax = plt.subplots(1,3, figsize=(15,4))
+
+c = 0
+for net in ["Internet", "Collaboration", "Protein"]:
+    G = load_sample_graph(net)
+    degrees = [G.degree(n) for n in G.nodes()]
+    degree_count = Counter(degrees)
+    k, pk = zip(*degree_count.items())
+    k = np.array(k)
+    pk = np.array(pk)/sum(pk)
+
+
+    ax[c].loglog(k, pk, 'k.', label='real')
+    ax[c].set_xlabel("k")
+    ax[c].set_ylabel("pk");
+    ymin, ymax = np.min(pk)*0.9, np.max(pk)*1.1
+
+    # add poisson distribution to graph
+
+    k = np.arange(0, max(degrees)+1)
+    pk_poisson = poisson.pmf(k, np.mean(degrees))
+    ax[c].loglog(k, pk_poisson, 'r', label='poisson')
+    # plt.ylim([1e-5, 1])
+    ax[c].legend(frameon=False);
+    ax[c].set_ylim([ymin, ymax])
+    ax[c].set_title(net)
+    c += 1
+
+plt.tight_layout()
+
+
+
+
+
+
+
+../_images/examples_chap_03_18_0.png +
+
+
+
+

Clustering coefficient

+

The local clustering coefficient of a random network is

+
+\[C_i = p= \frac{⟨k⟩}{N}\]
+

To analyze the dependence of the average path length \(d(p)\) and the clustering coefficient \(\langle C(p) \rangle\) on the rewiring parameter \(p\) for a small-world network, you can use the Watts-Strogatz model. This model begins with a regular lattice and introduces randomness by rewiring each edge with probability \(p\). Here’s a step-by-step guide on how to perform this analysis:

+
    +
  1. Generate a regular lattice: Create a regular ring lattice with \(N\) nodes where each node is connected to its \(k\) nearest neighbors.

  2. +
  3. Rewire edges: For each edge in the lattice, rewire it with probability \(p\). This involves replacing the existing edge with a new edge that connects the node to a randomly chosen node in the network.

  4. +
  5. Compute :math:`d(p)` and :math:`langle C(p) rangle`:

    +
      +
    • \(d(p)\) is the average shortest path length between all pairs of nodes in the network.

    • +
    • \(\langle C(p) \rangle\) is the average clustering coefficient of all nodes in the network.

    • +
    +
  6. +
  7. Normalize by :math:`d(0)` and :math:`langle C(0) rangle`:

    +
      +
    • \(d(0)\) is the average path length of the regular lattice (when \(p=0\)).

    • +
    • \(\langle C(0) \rangle\) is the average clustering coefficient of the regular lattice (when \(p=0\)).

    • +
    +
  8. +
  9. Plot the results: Plot \(d(p)/d(0)\) and \(\langle C(p) \rangle / \langle C(0) \rangle\) as functions of \(p\) on a log scale to observe the small-world phenomenon.

  10. +
+
+
[10]:
+
+
+
import numpy as np
+import networkx as nx
+import matplotlib.pyplot as plt
+
+# Parameters
+N = 1000  # Number of nodes
+k = 10    # Each node is connected to k nearest neighbors in ring topology
+p_values = np.logspace(-4, 0, num=100)  # Rewiring probabilities
+
+# Initialize lists to store results
+average_path_lengths = []
+clustering_coefficients = []
+
+# Generate the initial regular lattice
+G0 = nx.watts_strogatz_graph(N, k, 0)
+d0 = nx.average_shortest_path_length(G0)
+C0 = nx.average_clustering(G0)
+
+for p in p_values:
+    G = nx.watts_strogatz_graph(N, k, p)
+    d = nx.average_shortest_path_length(G)
+    C = nx.average_clustering(G)
+    average_path_lengths.append(d / d0)
+    clustering_coefficients.append(C / C0)
+
+# Plotting
+plt.figure(figsize=(5, 4))
+
+# Average path length plot
+plt.plot(p_values, average_path_lengths, marker='o', linestyle='-', color='blue', label=r"$d(p)/d(0)$")
+
+# Clustering coefficient plot
+plt.plot(p_values, clustering_coefficients, marker='o', linestyle='-', color='red', label=r"$\langle C(p) \rangle / \langle C(0) \rangle$")
+plt.xscale('log')
+plt.xlabel('Rewiring probability p')
+plt.legend(frameon=False)
+plt.tight_layout()
+plt.show()
+
+
+
+
+
+
+
+../_images/examples_chap_03_21_0.png +
+
+
+
[ ]:
+
+
+

+
+
+
+
+
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/examples/chap_03.ipynb b/examples/chap_03.ipynb new file mode 100644 index 0000000..ccf8348 --- /dev/null +++ b/examples/chap_03.ipynb @@ -0,0 +1,530 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# [Chapter 3](https://github.com/Ziaeemehr/netsci/blob/main/docs/examples/chap_03.ipynb)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### **Random Networks**\n", + "\n", + "Code by : Abolfazl Ziaeemehr \n", + "- https://github.com/Ziaeemehr\n", + "\n", + "\"Open" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# uncomment and run this line to install the package on colab\n", + "# !pip install \"git+https://github.com/Ziaeemehr/netsci.git\" -q" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A random network consists of N nodes where each node pair is connected with probability p.\n", + "To construct a random network we follow these steps:\n", + "1) Start with N isolated nodes.\n", + "2) Select a node pair and generate a random number between 0 and 1. If the number exceeds p, connect the selected node pair with a link, otherwise leave them disconnected.\n", + "3) Repeat step (2) for each of the N(N-1)/2 node pairs.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import random\n", + "import numpy as np\n", + "import networkx as nx\n", + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "from netsci.plot import plot_graph" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "LABELSIZE = 13\n", + "plt.rc('axes', labelsize=LABELSIZE)\n", + "plt.rc('axes', titlesize=LABELSIZE)\n", + "plt.rc('figure', titlesize=LABELSIZE)\n", + "plt.rc('legend', fontsize=LABELSIZE)\n", + "plt.rc('xtick', labelsize=LABELSIZE)\n", + "plt.rc('ytick', labelsize=LABELSIZE)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "def create_random_network(N, p):\n", + " G = nx.Graph() # Initialize an empty graph\n", + " G.add_nodes_from(range(N)) # Add N isolated nodes\n", + "\n", + " # Iterate through each possible node pair\n", + " for i in range(N):\n", + " for j in range(i + 1, N):\n", + " if random.random() <= p: # Generate a random number and compare it with p\n", + " G.add_edge(i, j) # Connect the nodes if the condition is met\n", + "\n", + " return G\n", + "\n", + "# Example usage:\n", + "N = 10 # Number of nodes\n", + "p = 0.3 # Probability of edge creation\n", + "\n", + "seed=2\n", + "random.seed(seed)\n", + "np.random.seed(seed)\n", + "\n", + "random_network = create_random_network(N, p)\n", + "plot_graph(random_network, seed=2, figsize=(5, 3), title=\"Random Network\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Other option would be to use the `nx.gnp_random_graph` function from NetworkX, which generates random graphs with a given number of nodes and a given probability of edge creation.\n", + "\n", + "```python\n", + "G = nx.gnp_random_graph(N, p)\n", + "```\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Binimial distribution\n", + "\n", + "Degree distribution in a random network follows a binomial distribution." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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2PMrHqke5SHbtm3TSik9ePDgAsdnzJihAT1v3jyPnW+z2XRISIju2LGjdjgcBdqPHDlSA/r3338vduxS3FII73Mc2mkUnzzwh1ev48zNOlNA027z6rW8oSoXt3zllVcKvTd58mQNFCpuecstt2hAr1692n3MVdyyQ4cOOjIyUj/55JN65syZuk+fPhrQN910U4G+n3322UJFIos65tKgQQPds2fPAseGDh2qAX3llVfqmTNn6qeeekpXq1ZNh4aG6s2bN5fq+1GUH374QU+ePFlPnjxZX3jhhRrQDz/8sPvYP6WkpOgGDRrosLAw/cwzz+i3335b9+rVSwP6f//7X6G++/fvrwF9xx136P/973/6jjvu0IAeNWpUobavvvqqBnSvXr3022+/rZ955hkdGhqqW7RoUaBopid4urilXyVNTz31lAb02rVrCxzPzs7WISEh+uqrr/bY+VlZWVoppfv161eoH1cl1N27dxc7dkmahPA+x57fjETmyH7vX2vrauNap497/VqeJklTQZmZmTo6OrpESdOzzz6r58+fr9u2bauDgoJ0vXr19IQJE3ReXsEq9J5Immw2m37ppZd0ixYtdFBQkK5evboeOHCg/uMPz/5x4IrrbI9/O3z4sB41apSuWbOmtlgsukOHDnrhwoVF9p2dna2feuop3aBBAx0UFKTj4+P1pEmTCn2/XGbPnq3btWunLRaLrlWrlr7tttv0sWPHPPp5XXF5MmlSWvvPHNSVV17Jt99+W+Tti5dccgm7d+8+54Z+JT2/V69erFu3jhdffJHrr7+egIAA1qxZw3333cegQYP46KOPznqt3NzcAncLpKWlERcXR2pqKhERHtx5XQjh5ty2FrIzUE07o6rV9u619m+FE4kQ3RhTveZevZan5eTkcODAAeLj4923cQtRFRXn30JaWhqRkZHF+v3tV2uakpKSiIqKKrJ+Q2xsLCkpKeTlnb2SbUnPnzdvHr179+bxxx+nadOmxMfHc/vtt/PQQw+dt67HlClTiIyMdD/+XQlVCOFZWmvIyV974qU75/5JheeXHsg47fVrCSEqBr9Kms5XIMvVxlPnWywW4uPjufnmm1mwYAELFizg+uuv5/nnn+fFF188Z6xPPPEEqamp7se/7xoQQniYLRe0E1AQVPLbqEssND9pyjyN1ue/CUUIUfn5VZ2mkJAQjh8/XuR7xSl6VZLzs7KyuPjii+nYsSMLFy50t7vxxhu58cYbeeaZZ7jhhhto3rzoYXmLxVKqPX2EEKWUk3/nnCUYZSqHv/eCw8AcAA67UYU8RKbdhajq/GqkKSYmhpSUlCIriyYmJhIVFUVQ0Nkrxpbk/MWLF7Nnzx6GDBlSqO2QIUNwOp38+OOPZfg0QgiPys0fJbaUT7VgpRSEVjNeZEjpASGEnyVNXbp0wel0snHjxgLHc3Jy2LJlS4ECWWU931W9tKjKqna7vcBXIYTv6XJOmgAIq2ZcW5ImIQR+ljQNGzYMpVShAlnvvvsuWVlZBYpe7du3j507d5b6fNceQh9++GGhOFzHXJVLhRB+IH8RuLKWX9KkwmQxuBDiDL9a09S2bVvGjBnDrFmzGDx4MP369WPHjh3MmDGDnj17MmLECHfbyy+/nISEhAIVVEtyfv/+/enatSsrV67k0ksvZfDgwQB89tlnrFu3jiFDhhTY4VoI4WO5rjVN3r9zzs01PZebhbblogJlHaMQVZlfJU1glF1v2LAh77zzDitWrCAqKoqxY8cyadIkTMVY/Fnc881mM99++y1Tpkzhs88+47HHHkMpRdOmTZk6dSrjxo3z5scUQpSUD6bnVEAgOjjMWAiecRqq1ym3awsh/I9fFbesyEpSHEsIUTLanof+/VsAVMcrUWfZPd4bnAf+hJRDULcRprgW5XbdspDilkIYKnVxSyGEKJKrqGWgpVwTJgCVvxiczNPlel0hhP+RpEkI4f98ceecS9g/ilw6pcilEFWZJE1CCP+XW37bpxRiDQVzIDidkJ1W/tcXQvgNSZqEEH5P51cDVz4YaVJKues1SemByu/gwYMopZg4cWKx2k+cOBGlFAcPHvRqXMI/SNIkhPB/vpye40y9Jily6b/WrFmDUgqlFO+++26RbZRS9O/fv5wj8x+ffPIJt912G+3btycwMPC8yV5SUhI333wztWrVIjg4mM6dO7No0aIi2+bm5vLMM88QHx+PxWKhcePGPP/889hstiLbz5kzhw4dOhAcHEydOnW48847SU5OLrLtL7/8Qp8+fQgPDyciIoKrrrqKLVu2lPTje4QkTUII/+eenvNN0iQjTRXLxIkTyc7OLpdrPf3002RnZ9OgQYNyuV5ZvPXWWyxcuJDg4GAaN258zrYnT56ke/fufPbZZ4wePZrp06cTFhbG0KFDmT17dqH2w4YNY/LkyfTu3Zs333yTXr16MWHCBO66665Cbd944w1uueUWIiMjmT59Ovfccw8LFy6kV69eZGZmFmj7888/07NnTw4cOMCkSZN47rnn2LNnDz169ODPP/8s2zekNLTwiNTUVA3o1NRUX4ciRKXitNu0Y+MK7di4Qjtteb6PITfbJzGURHZ2tt6+fbvOzvb/WD1l9erVGtCdO3fWgH7xxRcLtQH0Nddcc85+Dhw4oAH97LPPeilS30lISNA2m01rrfWYMWM0oA8cOFBk20ceeUQDetmyZe5jdrtdd+nSRdeoUUOnp6e7j69YsUIDety4cQX6GDdunAb0Tz/95D6WnJysQ0JCdJcuXbTdbncfX7ZsmQb0Cy+8UKCPLl266PDwcH348GH3scOHD+vw8HDdt2/f837m4vxbKMnvbxlpEkL4N9cokzkQFRDokxCUOQCCw40XUnrArw0dOpROnToxdepUTpw4Uaa+FixYQLt27bBardSvX5+JEycW2pO0qDVNrmO7du3iySefpF69elgsFtq3b8/KlSsLXcdutzN16lRatWqF1WqlZs2aDBo0yOMjKfXr1ycgoHg1refPn0/jxo0ZMGCA+5jZbGbs2LGcPHmywOeYP38+AA8++GCBPlyv586d6z62dOlSsrKyGDt2LOZ/lA8ZMGAAjRo1KtB27969bNq0iSFDhhAbG+s+Hhsby5AhQ/j22285evRosT6Pp0jSJITwb76emnMJjQRAZ6b6No4y0lqjs7P98+GBWstKKV566SVSU1N54YUXSt3PsmXLGD16NAMGDOCVV16hefPmPPfcc0VON53NLbfcwrp16xg/fjyTJ08mOTmZ6667rtA6opEjR/L4449Tr149XnnlFe69915Wr15Nt27d+P333wu0PXXqFCkpKcV65ObmluqzHzlyhMTERC666KJC77mObdq0yX1s06ZNxMbGEhcXV6BtXFwcMTExhdoCdOvWrci+d+7cSUZGRrHaaq357bffSvrxysTvtlERQogCcvPXpgT5NmlSoZHolMNQwZMmcnJIv7a7r6MoUviyHyE4uMz99OnTh759+/LWW2/xwAMPlGq90datW9m0aZN7D9L77ruPwYMH88EHH3DPPfcUmVD8W1RUFMuXLzfuwAQuu+wyunbtyttvv82UKVMAWLVqFZ988glDhw5l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17M//vGPbNu2jRkzZjBv3jxCQ0M5cOAATz/9NO+88w55eXlEREQAnuUWxowZg9Fo5Le//S0xMTHs2LGDKVOm8Pe//5177rknyO/m+iorK6OyspLMzEwSEhIwGo0cP36c7du38/bbb1NQUEBcXBygv9hcafXq1Zw/f97vPj3GJj09nSVLlrQqu/KDT49xKS0tZfz48VitVh555BGSk5Opra2lsLCw1YK/eXl5jB8/nn79+rFu3ToAtm7dSnp6Orm5uaSkpATrLbSL+++/nyFDhviUFxYW8vvf/5777vvuZuZ6Gzdut5upU6eSm5vLggULyMrKwmaz8dZbb7Fw4UJOnDjBhg0bgC4+bpToFI4ePaouXrzoU75q1SoFqC1btnjLZs+erQwGg/r888+9ZfX19SoxMVElJycrt9vdEV0OunfeeUcBasOGDd4yPccmPz9fhYSEqJdeekkB6vHHH2+1X2+xAdSCBQu+t57e4qKUUnfffbdKSEhQFRUVV62XmpqqLBaLKisr85aVlZUpi8WiMjIy2rubncaSJUsUoPbs2eMt09u4yc3NVYBavnx5q3Kn06kGDRqkYmJivGVdedxI0tTJFRYWKkAtXbpUKaWU1WpVJpNJTZw40afuunXrFKCOHDnS0d0MiiNHjihAPfXUU0opfcemublZjRgxQk2fPl2dOXPGJ2nSY2xakian06nq6+v91tFjXD7++GMFqM2bNyullGpsbFQNDQ0+9b788ksFqEWLFvnsW7RokdI0TVVWVrZ7f4PNarWq6OholZCQoJqbm71lehs3//jHPxSgXnzxRZ99qampKj4+XinV9ceNzGnq5MrKygDo3bs34DlM7HQ6ueuuu3zqjh49GoCjR492XAc7kMPhoKqqirKyMj744AOWLl0KwLRp0wB9x2bjxo2cPHmSrVu3+t2v19j85S9/wWw2Y7FYiIuLIysri9raWu9+PcZl3759ACQmJnLfffcRERFBZGQkycnJ7Nq1y1uv5X23FRulFPn5+R3T6SDKycmhrq6Ohx9+mJCQEECf4yYtLY1u3brx4osvkpOTw9dff83JkydZuXIl+fn5rFmzBuj640bmNHViLpeL9evXYzQamTt3LgAVFRWA/5sJt5T5uwlxV7Bz506ysrK8zwcOHMiuXbtIT08H9BubM2fO8Oyzz7J69WoGDhxISUmJTx09xiYt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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# make a random graph with N nodes and average degree of k\n", + "np.random.seed(2)\n", + "\n", + "num_nodes = [100, 1000, 10000]\n", + "average_degree = 50\n", + "lambd = 50\n", + "colors1 = plt.cm.Reds(np.linspace(0.2, 0.6, len(num_nodes)))\n", + "\n", + "for i in range(len(num_nodes)):\n", + " probability = average_degree / num_nodes[i]\n", + " graph_b = nx.gnp_random_graph(num_nodes[i], probability)\n", + " degrees = [d for n, d in graph_b.degree()]\n", + " sns.kdeplot(degrees, fill=False, label=f\"N.bino={num_nodes[i]}\", color=colors1[i])\n", + "\n", + "s = np.random.poisson(lambd, num_nodes[-1])\n", + "sns.kdeplot(s, fill=False, label=f\"N.pois={num_nodes[i]}\", color='b')\n", + "\n", + "plt.xlabel(\"k\")\n", + "plt.ylabel(\"P(k)\")\n", + "plt.legend();" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### The evolution of a random network" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Connected Components:\n", + "Component 1: Size 19\n", + "Component 2: Size 1\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZcAAAD7CAYAAACmJ9mYAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAABA7UlEQVR4nO3dd1xV9f8H8Ne5Fy5wL+OycYMTJ4q5NSfp16a5SrNyRJkjy3JlZpoj09T05wBz5UpypFkaiKaWaSZSKigKKA6GwGXcC9z5++NykXH3PXcA7+fj0eP79dxzzzkqnvdnvt+MSqVSgRBCCGERx94PQAghpO6h4EIIIYR1FFwIIYSwjoILIYQQ1lFwIYQQwjoKLoQQQlhHwYUQQgjrKLgQQghhHQUXQgghrKPgQgghhHUUXAghhLCOggshhBDWUXAhhBDCOgouhBBCWEfBhRBCCOsouBBCCGGdk70fgOgmVypRLFVAqVKBwzBw53HhxKH2ACHE8VFwcTCFZTKkiSTIFJdBLFPU+FzgzEWQwAUhQj48XZzt8ISEEGIYQ2WOdbNlz0EslSMhqwDZEikYAPr+UjSfB/B56BLoBQGP2giEEMdCwaUae/Qc0kQSJGYXQKXSH1SqYwAwDBAW4IUQIZ+VZyGEEDZQcClnr55Dcm4Rbj4pNvv7Gu383BHq62HxdQghhA0UXGC/nkOaSIKErAKTv6dLeKAXgqkHQwhxAPV+sN6SnoMKgEoFJGQVoEyhMKnnIJbKkZitDiwlxcWI2bwW6Uk3kJZ0HYX5eRgz7SOMnfFx1fupVIiL2YffDuzG43tp4Do5o2mrNnhlyvvoOmAIrmUXwJ/PozkYQojd1et1rWkiCStDUgBw80kx0kUSo89PyFL3lACgSJSP2IN7IZNK0X3IMJ3fObDha2xZ9AladuqCT76NxvQVa+HM42H5e2/ir99+qQh0hBBib/W2iVu556BL0j+XcGjrBty+9g9kZWXwCWqAAS+Pwuj3P9R6vrE9h8IyGbIl0opf+zdqjN2Xk8AwDArzcxEXs0/r9+IP/YC2Xbvj3cUrK46F9XkWk/t2xtmjB9HzueHIlkhRWCajZcqEELuqt8Glcs9Bm/PHD+PbuTPRa9iLmLFyPVz5AmRlpCMvO0vndzQ9h75NfPXeO00kqbJogGEYo57ZyckJfHfPKsd4Lq7gubjA2cVFfa3y64cFehl1TUIIsYZ6GVyq9xyqy816jC2fz0HE2AmI/HxFxfGOPfvova4KMKrnkCkuM2nhgMbzb07BrlVLEPfjPvSMGA5ZWRmOfrcZkqIiPD9hcsUzZIrLEGbG9QkhhC31MrhU7zlUdzpmH0olErwyZZrJ1zbUc5AplVr3zxjjhbfeAc/FFduWfIrNC9WT/e5e3pi3eSdCw7tXnCeWKSBXKilVDCHEburl28dQz+HmlUtw9/LGw9Q7mP3KEIxu3wQTe3fE1s/nQlJcpPfamp6DLmKpeYEFAOIPHcD25Yvwv/Fv4/MdP+DTqD0I6/Msvpo2EQnnz1Y5t9iC+xBCiKXqXc/FmJ5DbtZjSEtLsGZWJF6NnIGJ87vizvVr+GHDatxPScaXe4/qnScplsqx+pu1yM99ApFIVPFffn4+3P2D8N6q/zP5uYsLRIheugCDR72Ot+Z+XnE8/NlBWDRhJKIWz8Xm05cqjitp+xIhxI7qXXAxpuegUqogLSvF+Gnz8WrkDABAhx694eTMw47li/DvxfMI6/2szu8zDINd+39AUU4mhEIhvL29IRQK0aZNGzRq0dqs536UdhfS0lK07Ni5xmctOnTCjb8vokQshptAAADgGLlIgBBCrKHeBRdjWvQeQm88vgd07jugyvHwfgOxA0Dazf/0BhcA+P3cOfi48WoclyuVOJaie8WZLt4BgQCA24lXMXDEmIrjKpUKtxOvwt1LCFf+09357jyuyfcghBC21LvgYkyLvlmbtrid+E+N45pMOQxjeKpK132cOBwInLk1huaunotHmUSCErF6U2fG3RRcPPkzACC8/yD4N2yMHhHDEXdwD5x5PIQ/OwgyqRRnj8Yg+erfeP2DORVDdQJnqvtCCLGvehdcjGnR93xuOGIP7kHCuTNo3q5jxfGr5+IBAK07h1t0nyCBC1JFkiqLCqIWz0POowcVv7548jgunjwOANgcdwkBjfmYtXojft2zA78fO4T4QwfAdXJGw+Dm+ODrjej3wggA6tVqQQIXg89HCCHWVC8TV55KzTY4qb9i6ltI/OMcRk39AK3CwnH3eiJi/m8tOvbqiwVbduv9rsCZi6HNA3R+XlgmQ1z6E7Oe3RhDgv1ohz4hxK7qZXBJzCqo0XOorqy0BAf/7xtc+PkI8nOy4R0QiGdfeBVjpn8EZ57ungEDoLmQb3CH/IWMXORIpGZtptR3b38+z2CGAEIIsbZ6GVwcoecglsoRm54DJYt/+hwGiAj2p6zIhBC7q5ezvp4uzgjg88D2Yl0G6gJixgxJCXhOCAtgN/9X54DaX/JYrlRCVCpDXokUolIZ5EqlvR+JEGKG2v0mskCXQC/EpufoTV5pKoZRX9dYIUI+yhQKi9L+q1QqMAyDdn4etbZQmD1KSxNCrKte9lwAx+k5hPp6oEugFzgMTO5JMQBUCgU2LZyNh9cuGTzf0YilclzIyEVc+hOkiiQ6F1mIZQqkiiSIS3+CCxm5EEvlNn5SQoip6uWcS2Xs1bD3QKivu9nfF0vlSMgqQLZEqjepJoCKzwP4PHTy98DIF5/Hv//+i4SEBDRs2NDsZ7Ale5WWJoTYRr0PLoDlL7rOAezVrjdniCg7OxtdunRBixYtEB8fDycnxx7tZC+gu5tUWpoQYjsUXMqZ23PoEmi9SXS5UoliqQJKlQochoE7T/fO+wsXLmDAgAGYPXs2vvrqK6s8DxvSRBJWSzGHB7IX2Akh7KHgUk1tnlxevXo1PvnkE/z000946aWXtJ5jSsBim6nLr+Ni9mLzZ5/Alc/H3qt3tJ5Dy68JcUwUXPTQvIhfePFFPD98OD75YLpD5+xSqVQYMWIEfv/9d1y9ehUhISEAHCdgmrJxNDfrMWa9MBCubnxIigt1BhfaOEqIY3LcN6UDcOJwIHR1RkHmQzxOu+PQgQVQp/rfuXMnvL29MXr0aOQViR1mNZamtLSxLZmtn89Fu2d6oJOB7NOVS0sTQhyHY78tHYS3tzfy8/Pt/RhGEQqFiImJgV+rdjh9X91TAAwvVNB8niORIjY9B2kiCavPpSktbYzfjx3Czb//QuTnK4w6X1NamhDiOCi4GME/MAiMm3ut2TUuCG6NyMVfgcN1Mjl3mQqAUgUkZBUgOVd/SWdTGCotrVGQ+wQ7li/CG7MXwDfIuGXVhkpLE0Jsj2ZBdag8TzFu6TowDIOz93MrPnfUif00kQT/pGciZvNapCfdQFrSdRTm52HMtI8wdsbHNc6Xy2T4Zc92nDn8AzLvp8OJx0OTFq3w5pxFQHg3uHK5Fq/GMqa0tEbUF/PRMKQFhr7+lkn3EMsUkCuVDj90SUh9QcGlGm1Lkhkthb808xR3RRKrL0k2llgqR2J2AYpE+Yg9uBfBbdqh+5BhiIvZp/V8hUKBVdMnI+nqZbwy+X206fIMykokuHvjX5SVqIeZrmUXwJ/Ps+j3ZkxpaQC4eOoErpyJxeojv2n9MzekWKqA0JWCCyGOgIJLJZU3UwKmz1PYe9d4Qpb62f0bNcbuy0lgGAaF+bk6g8uve7Yj4Xw8lu37Ca07d6043nXAkIr/ryofIrNkNZYxpaVLxGJsW7oAw9+YCJ+AQIgL1Xth5DL1nJG4sABcJ+cqpZzNuQ8hxDYouJSzZNe4Ck9fwmUKhV12jWtWYwHae1ranNi9DW2f6VklsFRXeTWWoeE/pVKJzMxMpKWlVfyXmpqKIpkS4z5bqfe7Rfl5ED3JwbEdW3Fsx9Yan7/ZvS26DR6Kef+3Q+c1jClhTQixDQouMG2eYmSo7knmhiEtsOHX86zMU5hKsxrL2Lb7k8cPkf0wA88MjMDeb1bg9KH9KBLlo2FIC7wy+X0MHDGm4lzNaqywQC+IRCKkpqZWCSCa/9LT01FaWlrxPX9/f4SEhKBVaGhF9mZdhP7++GLXjzWOH4neiJt//4VPo/bA09tH7+/JmBLWhBDbqPfBxdR5ihUHjtc4dvvfBOxYvgg9hvwPADvzFKYydjWWRl5WJgDg7NEY+AQ1wJTPloHv7oG4mH3YOH8W5DIZIsaMB6AOWH8npWBAaAREIlHFNdzd3RESEoKQkBAMHToUISEhaN68OUJCQhAcHAx396eJPA2Vlua5uKJDj941jp85chAcLkfrZ5UJnG2XaYAQYli9Dy6mzlNoG0L67YfvwTAMBo96HQA78xSmMGU1loayfDm1tKwMn27dg4BGjQEAYX36Y87IYYjZ9E1FcAEA76CGmLfgUwQ3bVIRUPz8/IweggsSuBgsLW0upvz6hBDHUa+bepV3jTMMY9YKpZLiYlw89TPadeuFBs3U6VZsvWvc2NVYlXkIvQEAjZq3rAgsgPrPoXPfAcjNfIyC3CdVjr874wOMHTsW3bt3h7+/v0l/XiFCvlmBZcbKdTpTv2ioyq9PCHEc9Tq4mLJrXJcLv/yEUokEQ0aPq3LclrvGzVklFdQ0GC5ublo/06SbYzhV/3QsWY3lCKWlCSG2U6+Di6nzFNqcPrQfAk8v9HxueJXjttw1bs4qKa6TE7oNGoqHqSnIfpBRcVylUuHahTMIahoMT++qw3qWrsbqEugFthd0mVpamhBiG/V2zsWceYrq7qfcQkriVQwb9zZ4Lq41PrfVrnFtq6SunotHmUSCErF6eXXG3RRcPPkzACC8/yC4uPHx+gdzkHD+DJa+Mw5jp8+Gm7sHTv+4D+nJNzF7bc3lwJauxtKUlmaznos5paUJIdZXb/9VmjNPUd3pH/cDQI0hscpssWvcicOBwJlbJVhGLZ6HnEcPKn598eRxXDypXum2Oe4SAhrzEdQ0GF/uOYI9a5Zjy6I5UMjlCA5tj3mbduKZgRFV7sHWaqwQIR9lCgVrpaWpUBghjqneBhdLd3PLpFKcO/YjWrTvhJC2Hax2H2NVX421Jf6yUd9r2joUC7bu1nsO26uxQn094MLlOkxpaUII++rtnIul8wdX4n9DYX4eBpUvP7bWfYxl7mosY1hjNVaIkI+IYH/483kAYHCiX/O5P5+HiGB/CiyEOLh623Mxd55C4/Sh/eC5uqLfCyNMvo81aFZjGVvp0ViaSo/WWI0l4DmhbxNfh6mUSQhhT70uc1x91/h7g7pXmaeoTD1P0QSAOnXK1ME98OyLIzHjq/U6ry9w5mJo8wB2H1oPU2vUG8PWNeo1paWVKhU4DAN3Hu28J6Q2qtfBJTGrwKq7xpsL+Qiz8TLZNJGE1dVY4YE0t0EIMV29bhLWtnkKY4QI+Wjjrd4caWm7gVZjEULMVa+DS13dNR6zaR22fj4HHBieKK+OgXooLDzQC6G+7gbPJ4QQbep1cAHq3q7xa9euYdmyZejZpjmeax5Aq7EIIXZRr+dcNOrKPIVUKkX37t2hUqnw999/g8dTBxZajUUIsbV6uxS5MlZ2jatUAMPgr2MH8fzM99h7OBMsX74c169frxJYAPXwX1igF8JAq7EIIbZBPZdK0kQSi3aNu4ky8fKzvfDiiy/iwIED4HJtVxnx2rVr6NatG+bPn48lS5bY7L6EEKINBZdqxFI5ErIKkC2RGiwbrPk8gM9Dl0B1AsWjR49i5MiRiIyMxKZNm8yqEWMqXcNhhBBiLzQsVo2lu8ZfeeUVREVFYcqUKQgMDMTixYut/swrVqzQOhxGCCH2QsFFB0vmKSZPnoycnBzMnz8f/v7+mDZtmtWe89q1a/jyyy+xYMECdOnSxWr3IYQQU9CwmJWoVCrMnj0b69atw/79+zF27FjW76EZDlMqlbhy5Qr1WgghDoN6LlbCMAxWr16NnJwcTJgwAT4+PoiIiDD8RRNohsMuX75MgYUQ4lCo52JlMpkML7/8Ms6dO4czZ86gW7durFyXVocRQhwZBRcbEIvFiIiIwO3bt3HhwgWEhobqPd/QHI9MJkO3bt1oOIwQ4rAouNhIXl4e+vXrh+LiYvzxxx9o3Lhxlc9NWZ22duVyLF26FJcvX0Z4eLitfguEEGI0Ci429ODBA/Tp0wfu7u44f/48fHx8zNpXk/jHOTjn3MfCuZ/Y5sEJIcREFFxs7NatW+jbty9atWqFHUdPIElUanJGAIVCDmcnJ4QFeNklrT8hhBhCSaVsrE2bNvjll1/Q7Jk+uJFfCqWJgQUAuFwnKFVAQlYBknOLrPKchBBiCeq52EFdycJMCCG60D4XGxNL5UjM1h5YNsybhbNHD+r87ooDx9G6c9cax69lF8Cfz7NZnXtC6jrKHm456rnY2IWMXORIpFqHwjLvp6MwL7fG8RVT34ITzwVb4i9rzbTMQF3kq28TX/YfmJB6guoesYuaujZUWCZDtkSq8/OgpsEIahpc5diNyxdRmJ+HUVNn6UzhrwKQLZGisExGP/SEmMjYFZtimQKpIgnuiiRVMqET7aifZ0NpIonJNe1PH9oPhmEwaORres9jyq9PCDFemkiC2PQc5JQ3+gwN42g+z5FIEZueQ//m9KDgYkOZ4jKTVoaJiwpx8dTP6NirLwIbN9V7rqr8+oQQ4yTnFiEhq8CsFZsqgFZsGkB9OhuRKZVax3H1uXDiKKSlpRg88nWjzhfLFJArlTTxSIgBaSKJ1rLmaUnXsW/dV7h/OwmFeXngubqiYXALDBv/Nvq/NFLrtW4+KYYrl0srNquh4GIjYqlpgQUATv+4Hx5Cb/SI+J/R3ymWKiB0peBCiC76VmyKCwvhF9QQfZ9/BT4BQSgrkeDc8cP4ds4M5DzMwKips7R+j1Zs1kR/EjaiNHFRXvqtm7h7PRHPvzkFzjwXq92HkPomIasAuv6ZdOjRGx169K5y7JmBEch+mIHYg3t0BhdV+RAZrdh8ipq4NsJhTJvKP/3jfgDAkFHjrHofQuoTzYpNU5tgnkIfcLi62+KVV2wSNQouNuLO076MWBuZtAznjh1Gq05d0LS1/vT8ltyHkPrG2BWbSqUSCrkcBXm5OLlvJ679cRYjpugvV04rNquiYTEbceJwIHDmGjWpfznuJIoL8jF41AKT7iFwpl3EhOhj7IrN6C/m47cfvgcAODnzMOnTpXjutQl6v6NZsRlm+WPWCRRcbChI4IJUkcTgD/fpH/fDlc9H3+Evm3B1FYIExs/NEFLfmLJi89V3Z2DwqHEoyHuCK2di8d3ST1EmkeDlyVP1fo9WbD5F6V9sqLBMhrj0J1a7/oWdGzFtyiS0aNHCavcgpLYSlcoQf8+8f39bF8/D6R/3IfpcArx89E/aD2rmB6ErZcqg8GpDni7OCODzTN6lbwgDQJz9CPt2fIfWrVvj9ddfR2JiIst3UZMrlRCVypBXIoWoVAa5UmmV+xDCNktWUrbq2BkKuRxZGfesep+6hIbFbKxLoBdi03N0LoU0B8MAr/YIw6i0NOzcuROrVq1C586dMXz4cMyfPx99+/a16PqU0I/UBZaspLx++U9wOBwENmlm1fvUJTQsZgfWrucil8tx4MABrFy5Ejdu3EC/fv0wf/58DBs2DIwJP/jmlGCmhH7EUcmVShxLydJ7zubPPgHf3R0tO3WB0Ncfhfl5uHjqOP745RhenjwVb37ymcH7vNQqkOZcQMHFbpJzi7SmnzBVOz8PhPq6a/1MqVTi559/xvLly3Hp0iV07twZ8+bNw6hRo3RmWNZIE0mQmF1gcglmBuqeFJVgJo7oVGq23kn9+EMHEH/kBzy8mwJxUSFc+QIEt2mHwaPH6Uz/UpnAmYuhzQPYfORai4KLHWle4EqlSv1GNpLmBd45wLgKlCqVCmfPnsWKFSsQGxuLVq1aYc6cOZgwYQJcXGquMGMv8Lkj1NfD4usQwpbErAKjVmyagwHQXMhHWKCXFa5e+1BwsTOxVI6dv51Dg1ZtbTL0dOXKFaxcuRKHDx9GgwYNMHv2bERGRsLdXd370TVk999fF3Du2CEkJ1xBbuYjCDy80KJDJ4x+/yO06NBJ5/2oBDNxJNZesTkk2I/mHctRcLGzzMxMNGnSBBuitqHX8FdsNmmenJyMr776Cnv27IGnpydmzpyJKe9Px9/5Uii1/ESs/iASRaJ89Br2Apq0aI3CvFwc27EVd28k4rNt+9Cxp/ZFAxwGiAj2pzkY4jB+vZmOYhUXXCf2fiapGmxNFFzsbOXKlfjiiy/w+PFjCIVCALat333//n2sWbMG0dHRmLtpF9r36A2OlnsV5D6Bl69flWMlYjGmD+2NJq3aYPGOg1qvT//oiCPZvn07Fi9bga+PxsKZxwNY2hhAjaiaaEmDHSmVSkRHR2Ps2LEVgQVQp4oRujrDx40HoauzVVeeNG3aFOvXr8fN1HR07NVXa2ABUCOwAICbQIDGLVoj9/EjndenhH7EEUgkEkyaNAmTJ0/G0EED0CVICLYCC6Ce/6TAUhX9adhRfHw8UlNT8f3339v7UVDAuICBaROd4qJCpN78Dx179tF7niahH010EnNY2pNPSUnBqFGjkJKSgp07d+Ktt94CACg5XNZWbNK8Yk0UXOwoKioK7du3R69evez9KCaXYAaAbUsWoKxEgpHvfqD3PEroR0zF1sbdH3/8EZMmTUJQUBAuXbqEjh07VnwW6usBFy7XoiX3xq7YrI8ouNhJVlYWjhw5gjVr1pi0sdEazCnBvH/9Kpw7fhiTF36pd7WYBiX0I8YwduOuWKZAqkiCuyKJ1tWTUqkUc+fOxbp16zB69Ghs27YNnp6eNa4TIuQjgM8zebOwP20WNoj+ZOxk165dcHJywhtvvGHvRzG5BPPBjWvw4+Z1GDdrHoa/Mcno71EJZqJP5Y27gOGehObzHIkUsek5FRt3MzIyMHbsWFy5cgXr16/HjBkz9DbgBDwn9G3iS2mOWEbBxQ40E/mjR4+Gj4+PvR/HpER7BzeuwQ8b12Ds9NkY+d5Mq92H1C+WbNxV4WmZ4evJtzDxhQjw+XycO3cOPXv2NPo6ni7OCAv0Qhhsu2KzrqLgYgdnz57FnTt3sGPHDns/CgDjE+3FbFqLHzauwaipszBm+myr3YfUL2kiic7AknrzPxz8v29w599rEBcVwK9BI/R7YQRenvQeXNxqznXIvIMwfvqH+Gz6u/Dzq7nC0VjqFZsUTCxBwcUOoqKi0LZtW/Tpo3+Vla0YUxr52PYtOPDt1+jSbyC69h+M29f+qfJ5685dWbkPqV/EUjkSs7Uncc24cxufvv4yGoY0x8QFX8DT2wc3//4LMZvWIvXGv5i3aWeN76hUKgwcNwlunkLrPjgxiIKLjeXk5ODw4cNYtWqV3SfyNYwpwXzlTCwAIOH8GSScP1Pj80PJuve6AFSCmWiXkFWgs/zE+Z+PQFpWik++3YagpsEAgI49+yI/JxuxB/eguEAEdy9hle8wDFMxREYbd+2LgouN7dq1CxwOBxMm6K/HbWuGSjAv+f6Q2ddmyq9PSGWFZTJkS6Q6P3cqT8/C96ia/FTg6QkOhwMnZ57W71XeuEsT7/ZDTUkbUqlUiIqKwqhRo+Dr61itqhAh3yqZYgH1P3ZKv0+qSxNJ9O6RH/DKGAg8vRC1eD4yM+6hpLgYV87E4rcf9mDYuLfhytf9M6XZuEvsh3ouNvT7778jJSUF27Zts/ej1KApwZwjkbIaZBRyOR6mJOGJc0t4Nm/O4pVJbWdo425A4yZYfuAYVk2fjGkRTzcaD58wGZMWLNF7bdq4a3/Uc7GhqKgotGnTBv369bP3o2jVJdDLlLIyRuFyONi1YhE6duyItWvXQqEwbU8NqZuM2bib/SADK6a+DQ+hNz5eH40l3x/GhE8W4uyRg9i00PBqRc3GXWIfFFxs5MmTJzh06BAiIyMdZiK/OgHPCWEB7Ob/Cm/gjfOn4zBlyhTMnj0bffr0wfXr11m9B6l9jNm4u+ebZSgpLsJn2/aj19Dn0b5bT7wy+X1MnP8F4g8dwI3LFw1eo9jEDcKEPRRcbGT37t0AgDfffNPOT6JfiJCPdn7ayyabSpPQz93dHevXr8eFCxdQUFCA8PBwLF68GFKp7slcUrcZs6E2LekGGrdoXWNupWXHzgCA+ynJrNyHWAcFFxvQTOSPHDnSoo1dthLq64EugV7gMKYnJWegrm0RHuiFUN+qQap3795ISEjA3LlzsWzZMoSHh+PSpUsWPatcqYSoVIa8EilEpTIaBqkljNlQ6xMQhIw7t1AiFlc5fqt8j5VvUANW7kOsg4qFsUxb2og/L1xA//79cebMGQwYMMDej2g0Y5MIAqaXYP73338xadIkXL16FbNmzcLSpUshEAiMei7KAVX7yZVKHEvJ0nvO3/Gn8NW0SWjVKRwvvP0OPL19cPvaVRyO2gC/ho2w+vBv5QW/dHupVSDtr7ITCi4sMPSyK857gsQ/fsei6e/Cy7X2veys9TKXy+VYt24dPvvsMzRo0ADR0dEYPHiwzvOtGeyI7Z1KzTY4qf/fX3/gSPRG3LudBElRIfyCGuKZgRF4NXIGPLz15+UTOHMxtHkAm49MTODwwcWRE8iZ8rJTKZVgOJxa/7Kzxt/HnTt38M477+Ds2bOYNGkSVq9eDW9v7yrnVM6Ya07dDU3GXOI44m+mIg88cLjspwViADQX8qlAnR05ZHCpDcMe9LJjl1KpxHfffYePP/4YfD4fmzZtwogRIwBYljG3snZ+7gj19TB8IrGqmzdv4osvvsDFq9ew7uezVrvPkGA/Gha1I4cKLrVl2INedtbz8OFDTJ06FcePH8eoUaOwcM23uJ5TjJjNa5GedANpSddRmJ+HMdM+wtgZH1f5btI/l3DmyEGk3byO+ym3IJdJsTnuEgIaN6k4JzyQKgfaS3JyMpYsWYIDBw6gSZMmWLhwIdo8NwK5pTJWN+4yUBfzotxi9uUY40tQ9wRi03OQU55ryNRCQbZK9aArPXhJcTF2f70USya9hom9OmBkaEP8sGG13mvdfFKMdEpRUUWjRo3w008/4cCBA7h++w6S8ktRKMpD7MG9kEml6D5kmM7v/nfxAv798zz8GjZCmy7PaD3nWnYBxFK5tR6faJGSkoIJEyagffv2OH/+PDZt2oSUlBS888476NpAyPrGXYZRbwgm9uUQwSU5twgJWQVQmjjEBKjPV5ZnQU3OLbLG41XQlx68SJRv1AuwOnrZ1cQwDMaOHYv/O/IrnJydEdCoCXZfTsLSPYcx/qP5Or836v0PsSX+MuZu3I6u/bUvDNBkzK3vbLGE++7du3j77bfRtm1bxMfHY8OGDbhz5w7ee+898MpXeVlj427ngNo7p1mX2P1vIE0kwT/pmQaHPRQKBU7s3obEP37H/ZRbKC7Ih3/Dxug2eChefWc6BJ5euPmkGK5crtWGPfSlB/dv1Bi7LyeBYRgU5uciLmafUdek9ODaFZbJIJKpTJrs5RixsKA+Z8y11VxmWloavvzyS+zatQv+/v745ptvEBkZCVdXV63nhwj5KFMoWBpq9qBhTwdh156LpidgTKtfWlqKgxvXwL9hY0ya/wU+3boHQ0aPR9zBvVgw7mWUlZYAsF5PQJMeXFfPimEYs9K6VH7ZkacMZcy1RH3LmCuWynEhIxdx6U+QKpLoXP4rlimQKpIgLv0JLmTkmvzv6N69e4iMjETr1q1x4sQJrF69GqmpqZg5c6bOwKJhrY27xH7s2nPR9ASMafXzXF2xOe6vKmvbO/ToDf8GjbB6ViT++u0X9H9ppNV6ApqXnTVWP2hedrRs8ilDGXMtUZ8y5lZe1QiYPpdpzKrGjIwMLF++HN999x2EQiFWrlyJqVOngq8nJb42IUI+Avg8kxf1+Nfy5f11ld3+NioXCjKmxc/lcrVummrZqTMAIPexuhKitYY96GVnO8ZkzLWUJmOuo+yZsgZLVjWq8HTItkyh0Lqq8eHDh1ixYgWio6Ph4eGBL7/8EtOmTTM604I2Ap4T+jbxrRXbEYh+dgsubPUE/vvrDwBAk1atK46x3ROgl51tGZMxlw3FUgWErnXzz1vXqkZzVJ/LfPz4MVauXImtW7dCIBBg8eLFmD59Ojw82FtW7+nijLBAL4TBsTdSE93sFlzY6AnkZj3G3m+Wo0WHMHQdEFFx3NSegFKpRGlpKUpKSiCRSGr8r1gBoFk7C5/WsLr8sjOFrTLZ1tWMufpWNV6/9Cc+f2uU1s9WHDiO1p27av3sWnYBGEkh1q9ehc2bN8PV1RULFy7EzJkz4enpydqza+PE4dC/i1rILsGFjZ5AkSgfyyInQKVS4aO1W2qsFCqWyjFx8hQUFxZUBApdwaO0tFTvvVp16oKVB09Y9LzGqKsvO1PZKpNtXc2Yq29Vo8b4D+ejQ4/eVY41aRWq83yFQomdv/2B7du3Y968eZg1axa8vGiOkOhml+Bi6bBHcYEISya9hrysx1i8KwZBTZrVOIdhGBSUlEJcWAg3Nzd4eXnBzc0NfD4fbm5uVf5/9f+tfkzJc8O/Yi0PwrK6+rIzlTuv5vLjq+fiUSaRoESsHurJuJuCiyd/BgCE9x8EFzc+CvJycbO8gNT92+paH1fPx8PL2xeePr5o371XlWtqu09tV3kuU58GzUJ09lK0YTgcdOzVDzfupKKRn/6EkYQAdgoulrTQiwtE+GLiWGQ/zMDnO35AcBvdw1XbvtsOHzf9KbmNIVcq8a+B9OCAcS9Aferiy84cThwOBM7cKr3bqMXzkPPoQcWvL548josnjwNAeYoXPjJSbmH1rMgq14r+Qr3psn23Xljy/aGK4wLnujlub+1VjU8UXDSywrVJ3WOX4GJuC10TWLIe3Mei7w6gebuOVrlPddpedtoY8wLUpa6+7MwVJHBBqkhS8ZLcEn/Z4Hc69OiNQ8mPDJ7HlF+/LjJ2LjN66QJ8M3sqXFzd0LpzV4x+fxbadu2h9zu0qpGYwi7BxZxhDzAMlk4Zh7Sk65g4/wsoFXLcLq9IBwCePr4Iahps8D7mqv6y08aYF6A2Crkc16/8Ca/sRujRo4dZmzHrmhAhH3ettNFRVX79usaYuUy+hweef3MK2nfvBQ+hDzLvpeGn7Zux6M1RWLDle3TpN0Dv92lVIzGW3bIiVy8U9N6g7lVa/ZVtjlOXwp06RHfLasArYzBj5bqKX7NdKKiwTIa49CesXa+6lVNew98XzqFTp06IjIzE+PHjIRQKrXa/2uBCRi5y9GRFMEddzpgrKpUh/p7pP6PiwgJ8+NIguHt545uf4gyeP6iZH4S1sOgdsS27BZfErAKDPQFzWaNQ0N27d3H02m00De0ArhN7HT7Ny653I2/ExsYiKioKP/30E3g8HsaOHYvIyEj07NmzXvZmxFI5YtNzoGTxh4TDABHB/nVyN3deiRRn7+ea9d2ti+fhtwO7se/aXbi4uuk9d0BTX1bmMkndZre+bYiQb9Ud72wNe6hUKuzYsQOdO3fG/jXLwOWy+0emSQ/O4XAwdOhQHDp0CBkZGVi4cCHOnj2L3r17IywsDBs3boRIJGL13o6OMuaaxqI5xvI2pjGNGFrVSIxht+Di6eKMAD6P9eSEDNQFxNhICZGbm4vRo0dj0qRJGD16NM6c+hVdgrwNf9EE2l52DRo0wIIFC3D37l2cOnUKrVq1wocffoiGDRvi7bffxsWLF2GrDqctUrPrEyLko52fpckI1X9Wcfu2w0NRYvlDOShz5xiLC0S4cjYOIW3bg+eiP8GkJfch9YtdK1E68rBHXFwc3nrrLZSUlCA6OhojR46s+Iy9SpQeRmdxffz4MXbu3Ino6GikpaWhQ4cOiIyMxBtvvFGj3rylHDGvk6VlpQMVErz0bE+EhIQgLi7O6rvK7SErKwu/PyqEE1/3z9Ta2e/Dr2EjtGwfBg9vHzy+l4ZjO7YgK+MePo3ag7Dez+q9B9tzmaTusnuZ4zSRhNXiTaE+7ghydzE7B1FZWRkWLFiAb775BoMHD8auXbvQqFHNlf2Wvuw6B5hXblepVCIuLq5ibsbJyalibqZXr14Wzc04eplpS58vISEBAwcORFhYGH799VeTs/Y6oqysLBw+fBgHDx7EuXPnMGnBEgx9/S2ddXAOR23An78eQ9aDDJRKxHD3EqJt1+54NXIGWnbsrPde1pjLJHWX3YMLwF5PQBtTWtk3btzAuHHjkJycjBUrVmDWrFl6C1DZ+2WcmZlZ0ZtJTU1F+/btERkZiQkTJpjcm7E0WBqTmp0tlvSs/vzzT0RERODZZ5+tWDihjyMmTczMzMThw4cRExODc+fOgWEYDB48GGPGjEHECy/jish6tYGGBPtRFmJiFIcILoD5LzdjGHqxq1QqbNiwAXPmzEHLli2xd+9ehIUZv1XM3sNISqUSp0+fRlRUFI4ePQonJyeMGTMGkZGR6N27t8HeDHvDfO5aU7Nbkzkv/7i4ODz//PN48cUXceDAAThVW/1n779PbfQFlFdeeQW+vk+XVtMSbuIIHCa4AKb1BMyhrZX9+PFjTJw4EadOncLMmTOxcuVKuLnpX4qpj71bullZWdi5cyeioqKM6s2wPSwZHmjecJ+tHTt2DK+++ireeOMNbN++HRwOx+490eq0BZQhQ4Zg9OjRNQJKZY48l0nqD4cKLhqGWo5saOfnjlsX4jFlyhQ4OTlh586dGDp0qFXuZQ9KpRLx8fGIiorCkSNH4OTkhNGjRyMyMhJ9+vQBwzBVXkIlxcWI2bwW6Uk3kJZ0HYX5eRgz7SOMnfFxleue2L0N508cRea9NJSIxRD6+aFNl2cwauqHaNqqTa16Ce3fvx/jx4/H+++/j9lffoXE7EK7DwtWDii///47OByOUQGluvraaCCOwyGDS2WVewKPi8twK0/78E2JWIz967/Cn78eR3GBCI2at8CId6aj7/Ov6Lz2pk9nw10uQXR0NPz9/a30O7A/TW8mOjoad+/eRdu2bREZGYmwl16DSKZSV+98kIHZIyIQ3KYdGoY0R1zMPq3B5cC3X4PD4aBZaDu4ewqRlXEPR6I3Ii87E6t+PInGzVvWquGT6OhonPrnOsZ9OM/ia5k7LMhWQKnOHqsaCdFw+OCiYairv2TSa7hzPRFvfLQADYKb48KJI4iL2YdZX29EvxdfrXG+SqUClEoMbRkId179mKBUKpU4c+YMoqKicDnxOtZUSvWhqrSJrjA/FxN7ddQaXLR5cDcFHzzfH6Pen4XXZ84BUHsmfu3VwrdWQKnOXqsaCXH8sYty+gog/fP7aST+eQ6zVv8f+r0wAgDQsWcf5Dx8gN1ff4new18Gt9rSTIZhwHC5uJZVWGta2ZbicDgYPHgwBg8ejIvpmXhUogBTPh9kyRJmTx91fQ8uV/3jxHaZaWvRVGw0dkiwMpVKhc8mvIqkK5cwbNzbeGfRcgDqio3+fJ7WYUFNQNEsG9YElOjoaFYDSmUhQj4C+DyT55L8bbjEnNRNtSK1qaYAkq5/FJfjfoUrX4Dew16scnzgq2ORl52JlMSrWr+nApAtkaKwzHpLNx1VoZJTEVjMoVAoIJOW4UFqCjYt/Bhevn4Y9OpYAE9Tszs6TYOlSJSP2IN7IZNK0X3IMKO+++veHci8l17juEqFKj2hzMxMbNq0CQMGDEDDhg0xc+ZMuLq6Ijo6GllZWTh58iQmT55slcCiIeA5oW8TXwwJ9kNzIR8CZ+17YATOXDQX8jEk2A99m/hSYCEWqRU/PYYKIN2/fQuNW7SqkVCyWXkhsfsptxAa3k3rd2tLK5tNbJSZHt+lJWRSdQBpGNwcS3Yfgl+Dp5tNHT01e+WKjf6NGmP35aSKIcG4mH16v5v9IAN7v1mBmV99i1UzJlf5TNNg2brze+zf+R3OnTsHLpeLwYMHW7WHYgxPF2eEBXohDPZf1UjqvloRXAwVQCoS5SOwSdMaxz28hACAYlG+zu/WxgJIlr4YLC0zDQDL9/8EuUyGzIx7+HlnFD5/axQ+33EQTVu1qTinWKqA0NUxX1iVGyymDgluWfQJwvo8ix4R/9P6uUIux5XUjIoeij0Dii5OHI7D/t2QusHhg4uxrWy9LwgD7w5Hb2UD7G7ss6TMtEbz9p0AAK07d0W3gc9h2tDe2Ld2BeZt2llxTp9+/ZBzLxWenp7w9PSEh4dHxf+v/J+h4wKBQG+mBHMYW7GxuriYvUj57xrW/3xW5zlcJyeMmDARw5csMPv5CKntHD64GNPK9hB6o0hL76SoQAQAcPcynArFUVvZxm7sE8sUSBVJcFckMbixj+2U6W7u7mgU0hKP0lOrHJ8xbRryHmWgsLCw4r+ioiI8evQIycnJVY6XlpbqvD7DMDUCkLmBisfjmT0smJv1GLtWLcWEjxfCJzBI77mlSjh8g4UQa3L44GJMK7tp61BcOHEUCrm8yrzL/dtJ6s8rDdVYch9bq7yMFDC8lFTzeY5Eitj0HJ0b+9hOmV6Yn4v7Kclo0+WZKsenvDne6JerTCZDUVFRlYBTOSDpOv7o0aMax/WtrndxcUG78G5YuOOgyb/PrZ/PRXCbdogYM96o8x21wUKILTh8cDGmld0j4n+Ii9mLv347gT7DX644fvZoDHwCgtAqLJyV+9iSJRvgVHi6aqlMoaixsc+Jw4HAmVuj9X71XDzKJBKUiNX3zbibgosnfwYAhPcfBLlcjiWTXkO/F0agQbMQ8Fxd8Sg9FSd2b4NMWoYx02ZXXEvgbNo8kLOzM3x8fOBTvqzZXCqVChKJRGsw0gQkKdf0KooXT/6MaxfO4su9RyEpKqzymVwmg7iwAC5ufDg5Px2SdMQGCyG24vDBxZhWdvizgxDW+1lEfTEfkuJiBDUNxoUTR5Fw/gw++HpjjT0u5t7HVtJEEtayRN98UgxXLrfKRrjCwkI8vn0TgiYtqvT0ohbPQ86jBxW/vnjyOC6ePA4A2Bx3Cd4BAQgObYfYg3vw5PEjyKRlEPr5o3333vjk221o0rI1APUUV5DAhZXnNxXDMBAIBBAIBGjQoIHWc8ypNX8/JRkKuRzzx75Q47O4mL2Ii9mLORu/Q48hTyf5Ha3BQogtOXxw0dXKru6TDd9h37qVOLDhaxSLRGjUvCU+XLNJb/oXDVNb2dZk6sY+lUqFX77/Dif370L2gwy4C4XoPngYxn84D+7lq+U0G/vysh7j22+/RVRUFLyDGuGbY6erXGtL/GWDzzd16WqD57BZZtoazGlIDBwxFu27965x/PO3RqH7kGF4fsIUNG1ddfjVkRoshNiawwcXQN0KThVJ9M45uAkEmPzpUkz+dKlJ17ZnK1ub6hv7gtu0Q/chw3Tuvdj11RKc2B2Nlya9h069+iHjbgp++PZr3P3vGpYfOA4nZ2colSrsjruAmS9HQCAQYOrUqZgxYwbSlDyrpWZ35NQv2hoshoYEAxo3QUDjJlqv5xMQhA49qgYeR2qwEGIPtSK4hAj5uCuSWOXajtTKNnVjX27WY5z4fhuGjXsbEz5eCAAI69MfXj6+WPfxNJw5clA9+cwwCGzRBus2b8WbY0fDw0M9ByMsz9fG5tQAwwBdasGG1OoNFkNDggGNjf8ZcbQGCyH2UCuCi6eLMwL4db+VberGvtvXrkKpUCC8/+Aqx58ZEAEA+Ou3ExUrmxgAfV8cWRFYAHVakLAAL1YTN3YOqB35qKo3WIwZEtTmUPKjGsccqcFCiL3Umn57l0AvsD0/6mitbFM39sll6l6Ok3PV1U9cZycwDIN7t5IqjunK9xUi5KOdHzvp1Nv5edSaDLqaBgvbU+4M1AXEHKXBQoi91Jrgomlls8mRWtnmbOzTrM66lfB3leO3Eq5ApVLV2FiqyURQXaivB7oEeoHDGExmUAMDdZXC8ECvWlfzoz40WAixl1oTXIC63co2J99XcGh7tHumJ376bjP+PHkc4sICJF/9G1s/nwcOl6s1ZUqxjvuECPmICPaHP1/dCzL0ztV87s/nISLY36H+LI1V1xsshNhTrftXEOrrARcut84VQDJ3w93H66OwYf4srJn1LgD1ENkLb7+D//48D3G1zX6G7qNJzc5mHjNHFyLko0yhYK1io6P9XBFiL7UuuAB1swCSuRvuvHz9sDBqDwpynyD/STb8GzYGz8UVp/btQq+hz5t1n/qWmt2SBotCLgeXw0F4A28KLIRU4nhvWSPVtVa2pRvuvHz94OXrBwA4sXsbykok+N/4iRbfp76kZje3wfL4TjK++3Ihzp+Otc2DElJL1NrgolFXWtnmbOxzceMj9uBeAEBQ02YQFxYi4Xw8Tv+4H+M+nFeRFl+DNvbpZ06DJd+1NRYk3cCCBQuwceNGOzw1IY6JUelLIUtsKjGroMrGvvcGda+ysa8y9ca+Jvjthz04sTsaOY8egGE4CGnXAS9NfBfdB1ct18sAaC7k16uKm2wwpsGyfv16fPjhh7hw4QJ6966ZIoaQ+oiCiwMpLJMhLt20hIqmGBLs59BDg7WVQqFA7969UVRUhISEBLi40O58QmiMxIHQxr7aicvlIjo6GikpKVi5cqW9H4cQh0DBxcHQxr7aqVOnTpg7dy6WLVuGmzdv2vtxCLE7GhZzQGkiCav5vsIDHW9fT11UWlqKsLAw+Pn54fz581o3sRJSX9BPvwOqy5kI6jJXV1dERUXhzz//xJYtW+z9OITYFfVcHFiaSFLnMhHUB5GRkThw4ABu3ryJxo0b2/txCLELCi4OTiyVm7yxL8CBMxHUByKRCG3btkX37t1x9OhRo8onEFLXUHCpJepKJoL64vDhwxg5ciRiYmIwatQoez8OITZHwaUWqs2ZCOqTESNG4OLFi0hKSoK3t7e9H4cQm6LgQoiVPHz4EO3atcPo0aOxbdu2Gp9TI4HUZRRcCLGiLVu2YOrUqYiPj8fAgQNpeJPUGxRcCLEipVKJ/v37o0zF4Os9h5BbJqeFGaReoOBCiJVdTL6Le2UcOPN4YEwY9tIsKQ8L8EIILSkntQwN8BJiRcm5RXjM8OHs4mJSYAHUvRelCkjIKkBybpF1HpAQK6H+NiFWkiaS4J/0TMRsXov0pBtIS7qOwvw8jJn2EcbO+LjG+ak3/sXu1V8iJfEqOFwndOzZB2/OWYSgJs1w80kxXLlc2hRLag3quRBiBWKpHInZBSgS5SP24F7IpFJ0HzJM5/kPUlOw6M1RkMtk+GjtVkxb9g0epafis/EjUJCXCwC4ll0AsVRuq98CIRahngshVpCQpU7b49+oMXZfTgLDMCjMz0VczD6t5x/4djWceTws2LIbfHcPAEDz9p0wY1gfHNu+GRM+XghV+RBZ3ya+tvytEGIW6rkQwrLCMhmyJVKoADAMYzD9i0Iuxz9nY9HzuecrAgsABDRqjPbde+NS7EkA6jmYbIkUhWUyKz49Ieyg4EIIy9JEEpMKvmXeT4e0tBTN2rSt8VmzNm2ReT8N0rJSAOoVZGkiCTsPSogVUXAhhGWZ4jKTslgXifIBAO5ewhqfeXh5Q6VSQVygru+jKr8+IY6OggshLJIplVp33htD7/BZpc/EMgXkSqVZ9yDEVii4EMIisdT0wOIhVCe11PRgKisqyAfDMBB4elY5XmzGfQixJQouhLBIaUbCi6CmweC5uuLe7eQan92/nYygpiHgubhafB9CbImCCyEs4phRGIzr5IRnBkbgUuwvKCkurjie8+gBrl/6Ez2e+x8r9yHElmifCyEscudxaxy7ei4eZRIJSsTqwJFxNwUXT/4MAAjvPwgubnyMnfEx5o4ajuXvvYkRkdMhKyvDgW+/hqe3D16a+J5R9yHEkVDiSkJYdio1u8qk/nuDuiPn0QOt526Ou4SAxk0AAHev/4vv13yJ29f+AZfrhA49++CtOYsQ1DS4yncEzlwMbR5gtecnhA0UXAhhWWJWAVJFEpOWIxuLAdBcyEdYoJcVrk4Ie2jOhRCWhQj5VgksgHqfC6XfJ6aSK5UQlcqQVyKFqFRmk6XsNOdCCMs8XZwRwOchpzwFDFsYAP58HlWoJEaxd9VTGhYjxArEUjli03OgZPFfF4cBIoL9qTIl0UsslSMhqwDZEqldq55ScCHEStJEEiRkFbB2vfBAL6rnQvRKE0mQmK3OyG3Ki90aVU8puBBiRcm5Rbj5pNjwiQa08/NAqK87C09E6ir2ftbcEerrYfhEA2hCnxArCvX1QJdAL3AYmJQpGVCn4megQnigFwUWoleaSMJKYAGAm0+Kkc5C5m3quRBiA+aMgyf9fREp505hZ9RW2zwkqZU083viomKjSmpvmDcLZ48erHGdhiEtsOHX8wDYmd+jmUFCbEDAc0LfJr4mreApu1qGhdFRGPPKyxg+fLgdnprUBpqqp5qS2sFt2qH7kGE6q54CAM/VFV/sjKlxTIONqqcUXAixIU8XZ4QFeiEM6r0HxVIFlCoVOAwDdx4XTpynI9WvvfYatm/fjunTp+P69evg82kyn1SlqXoKGF9SGwA4HA5ad+6q8/PKVU/NXaZMcy6E2IkThwOhqzN83HgQujpXCSyAur7Lpk2b8OjRIyxfvrzG9+2xMY44lspVT40pqW0KS6ueUs+FEAfWqlUrzJ8/H8uWLcP48ePRqHlLu26MI47F1KqnGtLSUkzuG4bCvFwI/QPRffBQvDbzk4raQsDTqqdhZj4bBRdCHNzcuXNxIvY0TibdRzOOUO+CALFMgVSRBHdFEqtsjCOOw9yqp8Gh7RAcughNW7UBANz4+y/8vCsK//11AV/F/Ao3gaDiXE3V0+q9amPQTx0hDu5xqRLzovdDUT7sZailqvk8RyJFbHoOqxvjiOMwp+opALz4dmSVX4f16Y+Qth2w+oN3EBezt8bnxVIFhK4UXAipUyo2xnE44JrYelTh6aqfMoWClY1xxHGwWY20R8T/4Mrn43biP6zdh4ILIQ5K38a4lH8TsH/9KtxKuAJAhRYdOmPcrDkIDe+u9fybT4rhyuVS+pg6hO1qpCqVCgxTswFj7n1otRghDkgslSMxW3tesjv/XcNnb7wKaVkpZq76FjO/2gBZWRkWvz22PNhody27AGKp3FqPTGyMzWqkF0/9jLKSEq3Lk829D/VcCHFAmo1x2uxfvwoCT098Fr0XLm7qnkinXv3wfkRP7Fq1BMv3H9P6PTY2xhHH4cThQODMrTKpb6ikdkFeHtZ9/D76Dn8ZQc1CwDAMbly+iBO7t6FJqzYYMmpclXsInLlmTeYDFFwIcTiVN8Zpk3z1b3QdMLgisACAm7s72j7TE5dif0F+dha8AwJrfI+NjXHEsQQJXKpUPY1aPK9KSe2LJ4/j4snjANQltfkeHhD6+eP4ziiIcnOgVCjh37Axhk+YhFffnQnXSht1mfLrm4uCCyEORrMxTtc0qlwmg7NzzX/0zjweAODe7SStwQV4ujGOyiTXDSFCPu5W2ui4Jf6ywe/M2fCdUde2tOopzbkQ4mAMbYxr0rIVbif+A2WlHfkKuRwp/yYAUOeY0kWzMY7UDZqqp+xO7asbIQEWVj2l4EKIAzFmY9z/3piER+mp2Lb0U+RmPcaTxw+xdfHciuEQjoExcs3GOFI3dAn0AssLx8Aw6utagoILIQ7EmI1xg0e+jjdmL8DvP/2IyP5d8e7Abnhw5zZemvQeAMAnMMjgNYrN3IBHHI+A54SwAHaHOTsHWJ7ZgeZcCHEgxm5YG/HOdLzw1jt4nJ4GV4E7Aho1xpZFc+DK56N5+06s3YfUDiFCPsoUCtaqnrKxH4qCCyEOxJQNa848FzRtHQoAyHn0AH/8egxDRo+Hi6sbq/chtUOorwdcuFwkZquXsZvSfGCgHgrrHODF2kZbCi6EOBBjNqzdv52Mv347gRYdwuDE4+Fe8k0cid6IBs1C8NrMOazdh9Q+IUI+Avg8k6ue+lshySkFF0IciLaNcTXOcXbGf3/9gRPfb0epRAy/ho3w3GtvYsQ706vsU9DFko1xxPGZU/XUGvueGJWKBl8JcSSJWQVVNsaxiQHQXMinfS71jKGqp9ZAPRdCHEz1jXFssnRjHKmd1FVPbdtbpb4xIQ7GkTfGEWIsCi6EOCBH3RhHiLEouBDigBx1YxwhxqLgQoiDChHy0c7PnZVrsbUxjhBj0WoxQhxcmkjiMBvjCDEWBRdCagGxVG7yxrgAK2yMI8RYFFwIqUXsvTGOEGNRcCGklrLHxjhCjEXBhRBCCOuomUMIIYR1FFwIIYSwjoILIYQQ1lFwIYQQwjoKLoQQQlhHwYUQQgjrKLgQQghhHQUXQgghrKPgQgghhHUUXAghhLCOggshhBDWUXAhhBDCOgouhBBCWEfBhRBCCOsouBBCCGHd/wNcuYVx7q69vgAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import networkx as nx\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Step 1: Generate a random graph (Erdős-Rényi model)\n", + "n = 20 # number of nodes\n", + "p = 0.12 # probability of edge creation\n", + "G = nx.erdos_renyi_graph(n, p)\n", + "\n", + "# Step 2: Find all connected components\n", + "connected_components = list(nx.connected_components(G))\n", + "\n", + "# Step 3: Calculate the size of each connected component\n", + "component_sizes = [len(component) for component in connected_components]\n", + "\n", + "# Display the graph and component sizes\n", + "print(\"Connected Components:\")\n", + "for i, component in enumerate(connected_components):\n", + " print(f\"Component {i + 1}: Size {len(component)}\")\n", + "\n", + "# Optionally, visualize the graph\n", + "plot_graph(G, seed=2, figsize=(5, 3));" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plotting the size of giant connected component vs average degree" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "N=10000, Ln(N)= 9.210340371976182\n", + "average k = 0.100, giant_component_size= 4\n", + "average k = 0.500, giant_component_size= 11\n", + "average k = 0.900, giant_component_size= 164\n", + "average k = 1.000, giant_component_size= 480\n", + "average k = 1.100, giant_component_size= 1682\n", + "average k = 2.001, giant_component_size= 8028\n", + "average k = 2.902, giant_component_size= 9363\n", + "average k = 3.803, giant_component_size= 9755\n", + "average k = 4.705, giant_component_size= 9909\n", + "average k = 5.606, giant_component_size= 9967\n", + "average k = 6.507, giant_component_size= 9989\n", + "average k = 7.408, giant_component_size= 9999\n", + "average k = 8.309, giant_component_size= 9997\n", + "average k = 9.210, giant_component_size= 9998\n" + ] + }, + { + "data": { + "image/png": "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bW2tVWtyNjIhhLB1EY6qsLAQXbt2RUREBHbv3m2cer9v3z7ExsZi6tSpWLFihY2rdB6LFi3CggULMH78eKxevRqurq62Lskp1dTU4Pvvv2+wvaCgAE888QTuuece/OMf/0CfPn3Qs2dPG1ToPIqLi9G1a1eoVCpkZWVBrVYDqGuli4iIQEVFBXJycti1bwVPP/003nrrLbz22mt47rnnjNtLSkrQt29fFBUVobCw0Dj+lMyPgcjC3n77bcyePRvx8fGYOHEiCgsLkZaWBnd3d+zbt8/YrUaW9d577+Gpp55Cly5dsGjRogZhKDAwEImJiTaqjgAgOzsb4eHheOKJJ/D+++/buhynsXLlSvz9739Hr169MH36dMhkMqxYsQInTpzAxx9/zNlNVnL27FlERUXhypUrGDduHG677TZcuXIFK1aswJ9//ok333wTzzzzjK3LdGy2XRfSOaxZs0YMHDhQKBQK4efnJx599FFx+vRpW5flVCZPniwANPk1bNgwW5fo9M6cOcOVqm3km2++EfHx8cLT01OoVCpx++23i40bN9q6LKdz/vx58eSTT4revXsLpVIpvLy8xG233SY+//xzW5fmFNhCRERERE6PI0qJiIjI6TEQERERkdNjICIiIiKnx0BERERETo+BiIiIiJweAxERERE5PQYiIiIicnoMREREROT0GIiIiIjI6TEQERERkdNjICJyMhqNBiqVCjKZDB9//LGty7EL2dnZkMlkxi8XFxf4+PigR48eePjhh/HJJ5+gsrLS1mUS0Q3gvcyInMyyZcvwz3/+E927d0dwcDB++eUXW5ckednZ2QgPD8fw4cMxdepUAEBZWRmys7Pxww8/4MCBA+jZsye++OIL3HLLLTaulojag4GIyMnExMTAy8sLjz76KJ588klkZWWhd+/eNqunrKwMnp6eNnv+1jAEoieeeALvv/9+g/1r1qzBlClTEBgYiN9//x2+vr7WLxJAVVUVXF1d4ebmZpPnJ7Jn7DIjciKHDx/G/v37MWXKFIwdOxZyuRwrV6407tfpdAgJCUG/fv0aPX/FihWQyWTYsGGDcVtVVRVeffVV9OnTBwqFAr6+vhg5ciQOHDhgcu62bduM3XTvvfceIiMjIZfL8e9//xsAsGfPHkyZMgW9evWCSqWCt7c34uPj8dVXXzVay6+//orbb78dSqUS/v7+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Pn/5y18AAG+++abJMQcPHjQZ89MSFxcXjB8/HpmZmfj8888bPab+azbXe0hk79hCROTgtmzZgnPnzmH+/PlNHvPwww/j+eefx4oVK3DbbbcBAO6//3507NgRycnJ0Gq1JoOpDWbNmoUtW7bg+eefx7Zt23DnnXfCx8cH586dw08//QSFQtHoejvXu/nmm9GnTx+88cYbKC8vR+/evXHy5EksX74cffv2RWZmpsnxixcvxp133on4+Hj885//RKdOnfDNN9/gypUrAOoGWBsMGjQIKSkpWLBgAQYMGIAxY8agc+fOyM/Px/79+7Fx40ZUV1e36md56tQprFmzBkDdwO/s7Gxs3rwZBw4cQK9evfDll1+atAT99a9/xdSpU7Fs2TIcPHgQI0eOhL+/P3JycrBz50788ccfxnWB7r33Xtx333349NNPcfnyZdx7773Iy8vD0qVLMXDgQOzfv9/kdTXnlVdewW+//YZx48bhq6++wpAhQ+Dh4YGzZ89i48aNiI6ONt62xVzvIZHds/q8NiKyqkceeUQAEIcPH272uH79+glPT0+TKehPPfWUACC8vLwanRYvRN0U8rffflvExMQIlUolVCqV6NGjhxg3bpz44YcfjMcZpt2vWrWq0etkZ2eLv/71r8Lf318olUoxaNAg8eWXX4oFCxY0mHIuhBDbt28X8fHxQqFQiI4dO4opU6YYp8fXXxrA4LvvvhN333236NChg/Dw8BChoaFixIgRYunSpc3+XIS4Nu3e8CWTyYSXl5fo3r27GD16tFi9erWoqKho8vxPPvlE3HbbbcLb21vI5XLRtWtX8dBDD4nPP//c5Ljy8nLxzDPPiODgYCGXy0X//v3F+vXrxZw5cwQAcfHiReOxhmn3TSkrKxOLFi0Sffv2FQqFQnh5eYmIiAgxffp0sWvXLpNjW/seEjky3rqDiBzGvn37MGjQIKSmpuL555+3dTlm88ADD2Dr1q3QarXG7kUiMi+OISIiuyOEaHB3eSEEXnvtNQBodt0eKWtsvZ8DBw5g8+bNuPPOOxmGiCyIY4iIyO5UVVWha9eumDBhAnr16oXi4mKkp6dj586dGDduHKKiomxdYrssWrQIBw4cwPDhw+Hr64tjx47hww8/hFwux0svvWTr8ogcGrvMiMju6HQ6PPbYY9ixYwfy8/Oh0+nQo0cPTJw4Ec8884zd3u1906ZNeO2113Ds2DEUFxfD19cXt99+OxYsWID+/fvbujwih8ZARERERE6PY4iIiIjI6TEQERERkdNjICIiIiKnx0BERERETo+BiIiIiJweAxERERE5PQYiIiIicnoMREREROT0/h9Ib2NCtc3yMAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "N = int(1e4)\n", + "print(f\"N={N}, Ln(N)= {np.log(N)}\")\n", + "k_avg = [.1, 0.5, 0.9, 1.0] + np.linspace(1.1, np.log(N), 10).tolist()\n", + "giant_component_sizes = []\n", + "for i in range(len(k_avg)):\n", + " p = k_avg[i] / N \n", + " G = nx.erdos_renyi_graph(N, p)\n", + " connected_components = list(nx.connected_components(G))\n", + " component_sizes = [len(component) for component in connected_components]\n", + " giant_component_size = max(component_sizes)\n", + " giant_component_sizes.append(giant_component_size)\n", + " \n", + " print(f\"average k = {k_avg[i]:10.3f}, giant_component_size={giant_component_size:10d}\")\n", + " \n", + "giant_component_sizes = np.array(giant_component_sizes)/N\n", + "plt.plot(k_avg, giant_component_sizes, marker='o', label='Giant Component Size')\n", + "plt.xlabel(r'Average Degree')\n", + "plt.ylabel(r'$N_G / N$');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Degree distribution of real networks" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dict_keys(['Collaboration', 'Internet', 'PowerGrid', 'Protein', 'PhoneCalls', 'Citation', 'Metabolic', 'Email', 'WWW', 'Actor'])" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from netsci.utils import load_sample_graph, list_sample_graphs\n", + "from netsci.analysis import graph_info\n", + "\n", + "graphs = list_sample_graphs()\n", + "graphs.keys()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Successfully loaded Collaboration\n", + "================================\n", + "Scientific collaboration network based on the arXiv preprint archive's \n", + " Condense Matter Physics category covering the period from January 1993 to April 2003. \n", + " Each node represents an author, and two nodes are connected if they co-authored at \n", + " least one paper in the dataset. Ref: Leskovec, J., Kleinberg, J., & Faloutsos, C. (2007). \n", + " Graph evolution: Densification and shrinking diameters. \n", + " ACM Transactions on Knowledge Discovery from Data (TKDD), 1(1), 2.\n", + "Graph information\n", + "Directed : False\n", + "Number of nodes : 23133\n", + "Number of edges : 93439\n", + "Average degree : 8.0784\n", + "Connectivity : disconnected\n" + ] + } + ], + "source": [ + "G_collab = load_sample_graph('Collaboration', verbose=True)\n", + "graph_info(G_collab)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Figure 3.6" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from scipy.stats import poisson\n", + "from collections import Counter\n", + "\n", + "fig, ax = plt.subplots(1,3, figsize=(15,4))\n", + "\n", + "c = 0\n", + "for net in [\"Internet\", \"Collaboration\", \"Protein\"]:\n", + " G = load_sample_graph(net)\n", + " degrees = [G.degree(n) for n in G.nodes()]\n", + " degree_count = Counter(degrees)\n", + " k, pk = zip(*degree_count.items())\n", + " k = np.array(k)\n", + " pk = np.array(pk)/sum(pk)\n", + "\n", + "\n", + " ax[c].loglog(k, pk, 'k.', label='real')\n", + " ax[c].set_xlabel(\"k\")\n", + " ax[c].set_ylabel(\"pk\");\n", + " ymin, ymax = np.min(pk)*0.9, np.max(pk)*1.1\n", + "\n", + " # add poisson distribution to graph\n", + "\n", + " k = np.arange(0, max(degrees)+1)\n", + " pk_poisson = poisson.pmf(k, np.mean(degrees))\n", + " ax[c].loglog(k, pk_poisson, 'r', label='poisson')\n", + " # plt.ylim([1e-5, 1])\n", + " ax[c].legend(frameon=False);\n", + " ax[c].set_ylim([ymin, ymax])\n", + " ax[c].set_title(net)\n", + " c += 1\n", + "\n", + "plt.tight_layout()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Clustering coefficient\n", + "\n", + "The local clustering coefficient of a random network is\n", + "\n", + "$$\n", + "C_i = p= \\frac{⟨k⟩}{N}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To analyze the dependence of the average path length $d(p)$ and the clustering coefficient $\\langle C(p) \\rangle$ on the rewiring parameter $p$ for a small-world network, you can use the Watts-Strogatz model. This model begins with a regular lattice and introduces randomness by rewiring each edge with probability $p$. Here's a step-by-step guide on how to perform this analysis:\n", + "\n", + "1. **Generate a regular lattice**: Create a regular ring lattice with $N$ nodes where each node is connected to its $k$ nearest neighbors.\n", + "\n", + "2. **Rewire edges**: For each edge in the lattice, rewire it with probability $p$. This involves replacing the existing edge with a new edge that connects the node to a randomly chosen node in the network.\n", + "\n", + "3. **Compute $d(p)$ and $\\langle C(p) \\rangle$**:\n", + " - $d(p)$ is the average shortest path length between all pairs of nodes in the network.\n", + " - $\\langle C(p) \\rangle$ is the average clustering coefficient of all nodes in the network.\n", + "\n", + "4. **Normalize by $d(0)$ and $\\langle C(0) \\rangle$**:\n", + " - $d(0)$ is the average path length of the regular lattice (when $p=0$).\n", + " - $\\langle C(0) \\rangle$ is the average clustering coefficient of the regular lattice (when $p=0$).\n", + "\n", + "5. **Plot the results**: Plot $d(p)/d(0)$ and $\\langle C(p) \\rangle / \\langle C(0) \\rangle$ as functions of $p$ on a log scale to observe the small-world phenomenon." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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x44ds2rfvn27MBqN4qWXXjK3DRgwQFxxxRXm9U8++UQYDAZx7733ilatWpnblyxZIgCIzZs3m9tGjx4tbL82ctuoUaNUrwWAGD16tF2bwWAQW7ZssWq/9dZbRXBwsCgqKjK3de/eXYSEhIicnBxzW3V1tRgyZIjqudVYunSpACBatGghLly4YG6/cOGCaNGihYiJiRHFxcXm9uTkZAFAfPjhh1bnqaysFMnJySIqKsrqb11ZWSkGDhwoAIgff/zR7m8zePBgUV1dbW7fsWOHMBgMol+/flbnV/ZBZsOGDQKAeP31163aAQgA4vPPP7dqnzBhggAgPv74Y7vrz8rKMrfJ/2NLly41tx06dEgAsPp/kT9L7e/8zTffCABi3rx5Vu2ffvqpACD+9a9/2R1jS+/evQUAMXHiRKv2zMxMAUA8+OCDLs9B6jd0fRO/5pVXXkHjxo3RpEkTdOrUCQsWLMCgQYPw5Zdfmve5cOEC/vvf/+L2229HeHg4zpw5Y361bNkSbdu2xTfffGPev0+fPsjLy8PevXsBAN9++y06duyIESNG4NChQzh06JC53WQyoXv37pr6+uSTT+q6th49euDGG2+0auvTpw8qKyvNrt5Tp05h69atuOOOO9C+fXvzfgaDAU8//bSuzwOAhx9+GDExMeb1mJgY/OMf/0BBQQGysrKs9o2Li8Po0aOt2nbu3IkjR45gzJgxSExMNLcbjUY899xzAIDMzEy7z3366aethgw6d+6MW265Bd9++y0KCwvN7Q0aNAAAVFdXo6CgAGfOnMF1112HmJgYbN261e687du3twvwevbZZwEAn3/+udO/hTfo168fWrdujSVLlli1L1myBDExMbjrrrs0n0vut8zgwYPRvn17RpsTjlET/2bcuHFYv349vvrqK7z55puIi4vDqVOnEBERYd7nzz//RHV1NZYtW4bGjRvbvfbt24dTp06Z9+/Tpw8ASYjlZZ8+fdCrVy8EBweb27OyspCWluYyUlimXbt2uq6tdevWdm2ya/fs2bMAYH5oUIq0zFVXXaXr8wDJlWtLhw4dAMBuzL9169Z2ruODBw8CAK655hq788hj2PI+Wj63urrafI2AdC/S09PRoEEDNGzY0HwPCwoKcP78eU3nveKKK9CwYUO76/EFBoMB48ePx65du7Bz504A0pDJxo0bce+991r9nzqjYcOGaNq0qV371VdfjTNnzqCgoMCr/SZ1C45RE7+mbdu26NevHwBpnPOmm25Cz5498fDDD5uDoMTlAKYRI0Zg7NixqudR/mCmpKSgUaNG2LhxI2677TYcOnQIffv2RVRUFLp06YKNGzeiZ8+eOHHiBCZOnKi5ryaTSde1OYtClq9JOAjOche14iPyZ9huU7seb/bH9nO3bduG/v37o23btnjttdfQqlUrREREwGAw4J577kF1dbXdORwVUxFC+KzQii0PPPAApkyZgsWLF2PBggVYunQpqqur8eCDD2o+h7PrcLadBAYUalKnuPHGG3HffffhX//6FyZMmIAbb7wRbdu2hcFgQFlZmVnUnREUFIRevXph06ZNWL9+PYKDg9G7d28AQN++fbF48WL07NkTgMX6ri1kqzsnJ8dum1qbK/bs2YM777zTqk0eAlCz8G1p06YNAOCPP/6w2/b7779b7WP7GbZufjmAr2XLlgCAlStXoqqqCl999RVatWpl3u/ixYuq1rR8Pbbk5eWhoKBA0/V4g4SEBNx5551YsWIF3nzzTSxbtgwpKSm44YYbNJ/j/PnzOHnypJ1VnZOTg/j4eERHR3u726QOQdc3qXO8+OKLMBqNePHFFwFI7uJbb70Va9euxY8//mi3vxAC+fn5Vm19+vTB+fPnMWfOHHTt2hVRUVHm9lOnTmHBggVo2LAhUlJSfH9BTkhISEC3bt3w//7f/8O+ffvM7UIIvPnmm7rP995771m5UQsKCvD++++jYcOGuPnmm10en5KSguTkZHz00UfIzc01t1dXV2PmzJkApLFVW9544w0ra3znzp3YsGED+vTpYxYh2cNga7XPmDFD1ZoGgH379tmN4b7++usO++EukZGRDh8WAOChhx5CQUEB/vGPf+DIkSO6rGmZ1157zWr9888/x759+1hkhdCiJnWPtm3b4p577sEnn3yC77//HmlpaXjvvfdw00034eabb8b999+PlJQUVFdX4+DBg1i7di1GjRplVb9ZtpT37NmDF154wdyempqK8PBw7NmzB4MGDfI4vccbzJo1C3379kXPnj3x6KOPonHjxvjyyy/NwqHHLRofH4/u3btj7NixEEJg6dKlOHr0KBYvXmwO5HKG0WjEggULkJGRga5du+Lvf/87GjVqhMzMTHz33XcYP348UlNT7Y47cuQIBgwYgDvvvBN5eXmYP38+IiIiMGvWLPM+gwcPxuzZs3HrrbfioYceQmhoKNavX4/ffvsN8fHxqv3p2LEj7rvvPowfPx7t2rVDVlYWVq9ejd69e2PEiBGa/y6u6N69OzZs2IA333wTSUlJaNCgAe644w7z9ltuuQWtW7fGxx9/jIiICIwcOVLX+ePj45GZmYkTJ04gPT3dnJ6VkJCAadOmee06SB2lVmLNCXGBnDozc+ZM1e179uwRQUFBIj093dyWn58v/vnPf4p27dqJsLAwERMTI6699loxYcIE8ccff9idIyEhQQAQ3377rVV7nz59BAAxd+5cu2OcpWc5Ag7Ss9TSfdTSiIQQ4rvvvhM9e/YU4eHhIi4uTowZM8acSvTwww87/Gzb865fv15MmTJFJCUlidDQUHHNNdeITz75xG7/5ORk0bt3b4fn+/7770X//v1FdHS0CAsLE9dee6145513rFKwhLD8bU6fPi3uu+8+ERsbKyIiIsTNN98sduzYYXfezz//XKSkpAiTySTi4uLE8OHDxZEjR1T7I/8N169fL7p16ybCw8NFkyZNxGOPPSYKCwtVr9/d9KycnBzRp08fERkZKQCI5ORku77PmDHDaZqeI3r37i2Sk5PFgQMHxJ133imioqJEZGSkuPPOO8X+/ft1nYvUTwxCeDlahRBSI+zYsQNdu3bFzJkz7VJ7bFm2bBkeeOABZGVlIT09vWY6GGC89dZb+L//+z9s3rwZaWlpmo9LT0/H4cOHnVZfI4FN7fv1CCFOEULg0qVLdm3ymGb//v1ro1tEQWVlJd577z106NBBl0gTogWOURPi55SVlSE5ORn33XcfrrzySly4cAFr167Fli1bMHLkyFoPeAtkDh06hC1btmDt2rU4ePCgat10QjyFQk2InxMSEoLbbrsNa9euRV5eHqqqqsy5xk899VRtdy+g+e677/DAAw8gPj4eU6ZM8WoAGyEyHKMmhBBC/BiOURNCCCF+DIWaEEII8WMo1IQQQogfQ6EmhBBC/BgKNSGEEOLHUKgJIYQQP4ZCTQghhPgxFGpCCCHEj6FQE0IIIX7M/wexj9vQDqJ9+QAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import numpy as np\n", + "import networkx as nx\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Parameters\n", + "N = 1000 # Number of nodes\n", + "k = 10 # Each node is connected to k nearest neighbors in ring topology\n", + "p_values = np.logspace(-4, 0, num=100) # Rewiring probabilities\n", + "\n", + "# Initialize lists to store results\n", + "average_path_lengths = []\n", + "clustering_coefficients = []\n", + "\n", + "# Generate the initial regular lattice\n", + "G0 = nx.watts_strogatz_graph(N, k, 0)\n", + "d0 = nx.average_shortest_path_length(G0)\n", + "C0 = nx.average_clustering(G0)\n", + "\n", + "for p in p_values:\n", + " G = nx.watts_strogatz_graph(N, k, p)\n", + " d = nx.average_shortest_path_length(G)\n", + " C = nx.average_clustering(G)\n", + " average_path_lengths.append(d / d0)\n", + " clustering_coefficients.append(C / C0)\n", + "\n", + "# Plotting\n", + "plt.figure(figsize=(5, 4))\n", + "\n", + "# Average path length plot\n", + "plt.plot(p_values, average_path_lengths, marker='o', linestyle='-', color='blue', label=r\"$d(p)/d(0)$\")\n", + "\n", + "# Clustering coefficient plot\n", + "plt.plot(p_values, clustering_coefficients, marker='o', linestyle='-', color='red', label=r\"$\\langle C(p) \\rangle / \\langle C(0) \\rangle$\")\n", + "plt.xscale('log')\n", + "plt.xlabel('Rewiring probability p')\n", + "plt.legend(frameon=False)\n", + "plt.tight_layout()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/chap_04.html b/examples/chap_04.html new file mode 100644 index 0000000..498a1fc --- /dev/null +++ b/examples/chap_04.html @@ -0,0 +1,588 @@ + + + + + + + + Chapter 4 — netsci 0.1.dev1+g157bd64 documentation + + + + + + + + + + + + + + + + +
+
+
+
+ +
+

Chapter 4

+
+

THE SCALE-FREE PROPERTY

+

Code by : Abolfazl Ziaeemehr - https://github.com/Ziaeemehr

+

Open In Colab

+
+
[1]:
+
+
+
# uncomment and run this line to install the package on colab
+# !pip install "git+https://github.com/Ziaeemehr/netsci.git" -q
+
+
+
+
+
[5]:
+
+
+
import numpy as np
+import matplotlib.pyplot as plt
+from netsci.utils import generate_power_law_dist, generate_power_law_dist_bounded
+
+
+
+
+
[6]:
+
+
+
LABELSIZE = 13
+plt.rc('axes', labelsize=LABELSIZE)
+plt.rc('axes', titlesize=LABELSIZE)
+plt.rc('figure', titlesize=LABELSIZE)
+plt.rc('legend', fontsize=LABELSIZE)
+plt.rc('xtick', labelsize=LABELSIZE)
+plt.rc('ytick', labelsize=LABELSIZE)
+# set legend font size
+plt.rc('legend', fontsize=10)
+
+
+
+

Comparing Poisson and Powe-law Distributions

+
+
[7]:
+
+
+
import numpy as np
+import matplotlib.pyplot as plt
+from scipy.stats import poisson
+
+# Parameters
+mean_poisson = 11
+alpha_power_law = 2.1
+x_values = np.arange(1, 1000)
+
+# Poisson Distribution
+poisson_pmf = poisson.pmf(x_values, mean_poisson)
+
+# Power Law Distribution
+power_law_pdf = x_values ** (-alpha_power_law)
+# Normalize power-law PDF to make it a valid probability distribution
+power_law_pdf /= np.sum(power_law_pdf)
+
+# Plotting
+
+fig, ax = plt.subplots(1,2, figsize=(12,4))
+
+ax[0].plot(x_values, poisson_pmf, label='Poisson Distribution (mean=11)')
+ax[0].plot(x_values, power_law_pdf, label='Power Law Distribution (α=-2.1)')
+ax[0].set_xlim([0,50])
+ax[0].set_ylim([0,0.15])
+ax[0].set_xlabel('x')
+ax[0].set_ylabel(r'$p_k$')
+fig.suptitle('Comparison of Poisson and Power Law Distributions')
+ax[0].legend(frameon=False)
+ax[1].loglog(x_values, poisson_pmf, label="poisson")
+ax[1].loglog(x_values, power_law_pdf, label="powerlaw")
+ax[1].set_ylim([1e-6, 1])
+ax[1].set_xlabel('x')
+ax[1].set_ylabel(r'$p_k$')
+ax[1].legend(frameon=False);
+
+
+
+
+
+
+
+../_images/examples_chap_04_6_0.png +
+
+
+
+

load sample graphs of the book

+
+
[10]:
+
+
+
from netsci.utils import list_sample_graphs, load_sample_graph
+from netsci.analysis import graph_info
+
+nets = list(list_sample_graphs().keys())
+print(nets)
+
+
+
+
+
+
+
+
+['Actor', 'Collaboration', 'Internet', 'PowerGrid', 'Protein', 'PhoneCalls', 'Citation', 'Metabolic', 'Email', 'WWW']
+
+
+
+
[11]:
+
+
+
from collections import Counter
+from scipy.stats import poisson
+G_collab = load_sample_graph("Collaboration")
+graph_info(G_collab, quick=True)
+in_degrees = list(dict(G_collab.in_degree()).values())
+out_degrees = list(dict(G_collab.out_degree()).values())
+in_degree_count = Counter(in_degrees)
+out_degree_count = Counter(out_degrees)
+
+k_in, pk_in = zip(*in_degree_count.items())
+k_out, pk_out = zip(*out_degree_count.items())
+
+plt.figure(figsize=(6,4))
+plt.loglog(k_in, pk_in, 'r.', label=r"$k_{in}$")
+plt.loglog(k_out, pk_out, 'b.', label=r"$k_{out}$")
+plt.legend(frameon=1)
+plt.xlabel(r"$k_{in}, k_{out}$")
+plt.ylabel("pk");
+
+
+
+
+
+
+
+
+Graph information
+Directed                                :                 True
+Number of nodes                         :                23133
+Number of edges                         :                93439
+Average degree                          :               8.0784
+Connectivity                            :         disconnected
+
+
+
+
+
+
+../_images/examples_chap_04_9_1.png +
+
+
+
[12]:
+
+
+
# find the exponent by fitting a power law by powerlaw package
+import powerlaw
+
+for x in [k_in, k_out]:
+    fit = powerlaw.Fit(x) # xmax=50 we can constrain the max value for fitting
+    print(f" α = {fit.power_law.alpha:6.3f}, σ = ± {fit.power_law.sigma:6.3f}") # the exponent
+
+
+
+
+
+
+
+
+Calculating best minimal value for power law fit
+ α =  3.042, σ = ±  0.327
+Calculating best minimal value for power law fit
+ α =  5.496, σ = ±  0.937
+
+
+
+
+
+
+
+Values less than or equal to 0 in data. Throwing out 0 or negative values
+Values less than or equal to 0 in data. Throwing out 0 or negative values
+
+
+
+
+

Generate the powerlaw distribution (bounded)

+
+
[7]:
+
+
+
generate_power_law_dist?
+
+
+
+
+
+
+
+
+Signature: generate_power_law_dist(N: int, a: float, xmin: float)
+Docstring:
+generate power law random numbers p(k) ~ x^(-a) for a>1
+
+Parameters
+-----------
+N:
+    is the number of random numbers
+a:
+    is the exponent
+xmin:
+    is the minimum value of distribution
+
+Returns
+-----------
+value: np.array
+    powerlaw distribution
+File:      ~/git/workshops/netsci/netsci/utils.py
+Type:      function
+
+
+
+
[8]:
+
+
+
generate_power_law_dist_bounded?
+
+
+
+
+
+
+
+
+Signature:
+generate_power_law_dist_bounded(
+    N: int,
+    a: float,
+    xmin: float,
+    xmax: float,
+    seed: int = -1,
+)
+Docstring:
+Generate a power law distribution of floats p(k) ~ x^(-a) for a>1
+which is bounded by xmin and xmax
+
+parameters :
+    N: int
+        number of samples in powerlaw distribution (pwd).
+    a:
+        exponent of the pwd.
+    xmin:
+        min value in pwd.
+    xmax:
+        max value in pwd.
+File:      ~/git/workshops/netsci/netsci/utils.py
+Type:      function
+
+
+

plotting the powerlaw distributions

+
+
[9]:
+
+
+
def plot_distribution(vrs, N, a, xmin, ax, labelsize=10):
+
+    # plotting the PDF estimated from variates
+    bin_min, bin_max = np.min(vrs), np.max(vrs)
+    bins = 10**(np.linspace(np.log10(bin_min), np.log10(bin_max), 100))
+    counts, edges = np.histogram(vrs, bins, density=True)
+    centers = (edges[1:] + edges[:-1])/2.
+
+    # plotting the expected PDF
+    xs = np.linspace(bin_min, bin_max, N)
+    expected_pdf = [(a-1) * xmin**(a-1) * x**(-a) for x in xs] # according to eq. 4.12 network science barabasi 2016
+    ax.loglog(xs, expected_pdf, color='red', ls='--', label=r"$x^{-\gamma}$,"+ r"${\gamma}$="+f"{-a:.2f}")
+    ax.loglog(centers, counts, 'k.', label='data')
+    ax.legend(fontsize=labelsize)
+    ax.set_xlabel("values")
+    ax.set_ylabel("PDF")
+
+
+
+
+
[10]:
+
+
+
np.random.seed(2)
+
+N = 10000
+a = 3.0
+xmin = 1
+xmax = 100
+
+fig, ax = plt.subplots(1, figsize=(5,3))
+x = generate_power_law_dist_bounded(N, a, xmin, xmax)
+print (np.min(x), np.max(x))
+plot_distribution(x, N, a, xmin, ax)
+
+
+
+
+
+
+
+
+1.000035809608483 74.39513593875918
+
+
+
+
+
+
+../_images/examples_chap_04_16_1.png +
+
+
+
[11]:
+
+
+
# find the exponent by fitting a power law by powerlaw package
+
+import powerlaw
+fit = powerlaw.Fit(x) # xmax=50 we can constrain the max value for fitting
+print(f"{fit.power_law.alpha=}") # the exponent
+print(f"{fit.power_law.sigma=}") # standard error
+
+
+
+
+
+
+
+
+Calculating best minimal value for power law fit
+fit.power_law.alpha=2.995340848455978
+fit.power_law.sigma=0.02600579145725683
+
+
+

Generate descereted power law distribution

+
+
[12]:
+
+
+
from netsci.utils import generate_power_law_discrete
+# Example usage
+gamma = 2.5  # Power-law exponent
+k_min = 1    # Minimum value of k
+k_max = 1000 # Maximum value of k
+size = 100000 # Number of samples
+
+samples = generate_power_law_discrete(size, gamma, k_min, k_max, seed=1)
+fig, ax = plt.subplots(1, figsize=(6,4))
+plot_distribution(samples, size, gamma, k_min, ax)
+
+
+
+
+
+
+
+../_images/examples_chap_04_19_0.png +
+
+
+
[ ]:
+
+
+

+
+
+
+
+
[ ]:
+
+
+

+
+
+
+
+
[ ]:
+
+
+

+
+
+
+
+

Powerlaw package

+
    +
  • Alstott, J., Bullmore, E. and Plenz, D., 2014. powerlaw: a Python package for analysis of heavy-tailed distributions. PloS one, 9(1), p.e85777.

    +
      +
    • probability density function (PDF),

    • +
    • cumulative distribution function (CDF)

    • +
    • complementary cumulative distribution (CCDF)

    • +
    +
  • +
+
+
[13]:
+
+
+
import powerlaw
+fig, ax = plt.subplots(1, figsize=(6,4))
+fit = powerlaw.Fit(x) # xmax=50
+print(f"{fit.power_law.alpha=}")
+print(f"{fit.power_law.sigma=}")
+print("-"*70)
+print(fit.distribution_compare("power_law", "exponential"))
+
+powerlaw.plot_pdf(x, linear_bins=0, color='k', marker='o', lw=1, ax=ax);
+
+
+
+
+
+
+
+
+Calculating best minimal value for power law fit
+fit.power_law.alpha=2.995340848455978
+fit.power_law.sigma=0.02600579145725683
+----------------------------------------------------------------------
+(894.9727455051284, 5.263968413468816e-22)
+
+
+
+
+
+
+../_images/examples_chap_04_24_1.png +
+
+
+
[14]:
+
+
+
fig, ax = plt.subplots(1, figsize=(6,4))
+fit.plot_pdf(c='b', lw=2, marker="*", label='pdf', ax=ax)
+fit.power_law.plot_pdf(c='b', ax=ax, ls='--', label='fit pdf')
+fit.plot_ccdf(c='r', ax=ax, ls="-", label='ccdf')
+fit.power_law.plot_ccdf(c='r', ax=ax, ls='--', label='fit ccdf')
+ax.legend(frameon=False);
+
+
+
+
+
+
+
+../_images/examples_chap_04_25_0.png +
+
+
+
[ ]:
+
+
+

+
+
+
+
+
+
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/examples/chap_04.ipynb b/examples/chap_04.ipynb new file mode 100644 index 0000000..b7f5012 --- /dev/null +++ b/examples/chap_04.ipynb @@ -0,0 +1,561 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# [Chapter 4](https://github.com/Ziaeemehr/netsci/blob/main/docs/examples/chap_04.ipynb)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### **THE SCALE-FREE PROPERTY**\n", + "\n", + "Code by : Abolfazl Ziaeemehr \n", + "- https://github.com/Ziaeemehr\n", + "\n", + "\"Open" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# uncomment and run this line to install the package on colab\n", + "# !pip install \"git+https://github.com/Ziaeemehr/netsci.git\" -q" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from netsci.utils import generate_power_law_dist, generate_power_law_dist_bounded" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "LABELSIZE = 13\n", + "plt.rc('axes', labelsize=LABELSIZE)\n", + "plt.rc('axes', titlesize=LABELSIZE)\n", + "plt.rc('figure', titlesize=LABELSIZE)\n", + "plt.rc('legend', fontsize=LABELSIZE)\n", + "plt.rc('xtick', labelsize=LABELSIZE)\n", + "plt.rc('ytick', labelsize=LABELSIZE)\n", + "# set legend font size \n", + "plt.rc('legend', fontsize=10)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Comparing Poisson and Powe-law Distributions" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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27aNzp074+rqyujRo3F2dub3339n5MiRnD17Nt3uAe3bt8fHx4fJkydz7do1Zs+eTefOnenWrRsLFy5k0KBBWFlZMXv2bHr06MGlS5coV66c3jb+/PNPZs2axbBhw/Dw8GDLli18/fXXhIaGsmLFCl25oKAg/v33X7p06YK3tzfx8fFs2LCBd999l8jISMaPH58mvj59+mBra8tHH32ESqXC09Mz3fd+6dIl2rRpg4eHh+5C9/79+xw6dIj//vuPpk2bAhAeHk79+vV5+PAh77//PpUrV+bQoUPMnDmTPXv2cOjQIaytrfW2PX78eJ4+fcr777+PhYUFP/30EwMHDqRChQo0adIk0+8kJSWFDh06sG/fPrp27cro0aMJCwtj3rx57Nixg0OHDlGlShWaNWvGypUr+fDDD3F1deXzzz8HoEaNGpluPyNXrlwB0DX5z8lv43ndu3dn3759vPfeewQEBJCQkMDly5cJCgrSxbpq1Sr69+9P06ZNmTRpEjY2NoSHh7Njxw4iIiJ0311Of6fu7u5MmDCByMhIfvjhBzp27EhoaCj29vaZxn7mzBk2bdrEG2+8QdmyZUlKSmL79u18+umnXL9+nZ9//jnNOln9zseMGcOsWbNo1KgRI0aMIDo6mqlTp1KqVKlMY8qKF7/DrP52S5cujZ+fH7t379YlcykpKezfvx8TExN2797Np59+CmhaGB06dIiePXvq9nvz5k0aNWpEUlIS77zzDuXLl+fatWvMnz+fvXv3cvz4cRwdHfVizerfaXYkJSXx/fff0717d7p27YqNjQ1Hjx5l8eLF/Pvvv5w4cULX7adly5YsX76cJ0+eYGNjA8CePXswMTFh//79JCUl6cru2bMHHx+fNMex7LK0tKR///5MnjyZv//+O9Nj9cv+fqpUqcLKlSvp168fTZs25d133wU0Nxmet2nTJubMmcMHH3zA+++/j4ODw0vj7N+/P6ampnzyySfExcXx888/06FDB7Zt20bbtm2z/b4///xzXFxc+OOPP5g5c6bu99m4ceMM18mv425wcDCdOnWievXqfPrppzg5OXHnzh327t3L5cuXqVq1arbfnxCiiFCEEKIQcXFxUezt7bNcPiUlRfHx8VHs7e2V8PBwveXt27dXAOXAgQO65QMGDFAAZcSIEXrb+eijjxRA8fb2VuLi4nTLT58+rQDKJ598olt248YNBVBMTEyUEydO6Jar1WqlS5cuCqD8+++/uuWPHz9OE3dqaqrSvHlzxcHBQUlKStItnzBhggIoLVq0UFJSUtKs5+PjozRv3lz3/Mcff1QA5ejRo5l+Tn369FEAZdOmTXrLp0yZogDKN998o1u2dOlSBVBq1qypJCYm6pbfunVLsbCwUN56661M96UoirJw4UIFUEaPHq23/N9//1UApU2bNpm+r5fx8fFRKlSooDx48EB58OCBcv36dWXJkiWKo6OjYmpqqpw+fTrbvw3tZ3/jxg1FURQlOjpaAZShQ4dmGkvXrl0VBwcHJTk5OcMyOf2dfvDBB3rbWb9+vQIoP/3000s/oydPnihqtTrN8r59+yomJiZKRESEbll2vvOLFy8qKpVKeeWVV/R+u6GhoYqNjY0CKHv37n1pfNr3eP78eeXBgwfK7du3le3btyv+/v4KoMybN09RlOz9dt977z3F3NxciY+PVxRFUQ4cOKAASr9+/RRra2vl6dOniqIoyu7duxVAWbFihW7d119/XXF1ddX7fhRFUY4dO6aYmpoqEyZM0C172d9perTHjffeey/Tcmq1Wnny5Ema5YsWLVIA5ddff9UtW7t2rQIoO3bsUBRFUZKSkhRbW1ulX79+CqAEBwcriqL5LVhaWiqDBg16aZza93bo0KEMy/z+++8KoIwZMybNetn9+1EURQGUAQMGpFmu/czMzc2VixcvZhirdp/PL6tfv77ebzk8PFyxtbVV/Pz8dH8X2u0//91mZdvPL8vstfw67n744YcKoNy/fz9NHEKI4k2a/QshCpXY2Ngs1eponTx5krCwMAYOHEiZMmV0y01NTfnss88A2LhxY5r1Ro4cqfdcW6PSv39/vVqnGjVq4ODgwNWrV9Nso02bNtSuXVv3XKVS6fqZP99VQFsjB5oax6ioKB4+fEjbtm2JjY3l4sWLabY9atQoTE1NM3/zoJsSb9OmTTx9+jTdMmq1mi1btlC9enU6d+6s99qYMWOws7NL9zMaOnSo3sCCpUuXpmLFirqa2cz88ccfqFQqvvjiC73lTZo0oWXLluzevZvY2NiXbiczV69exc3NDTc3N8qVK8egQYN0tek1atTI8W9Dy9raGisrKw4fPpzp9F1OTk48fvyYrVu3pmm+r5XTWD788EO95y1btgTI0ndgbW2ta1KdlJTEw4cPiYyMpF27dqjVao4fP55mnax851u2bEFRFD766CO9Ad98fHzo06fPS+N6UdWqVXFzc6N06dJ06NCB27dvM3nyZIYOHZrt327Lli1JTk5m3759gKa228nJibFjx5KQkKCbRWDPnj268gDR0dH89ddfvPbaa1hZWREZGal7+Pr6UqFChXTHGcnq32l2qFQqXW1wamoq0dHRREZG6mJ9vtuHdtnu3bt1rz1+/JjRo0fj5uamW37gwAESExN15XNLe4zO7G84q38/WfHqq69SqVKlbK3z4Ycf6v2Wy5QpQ58+fbhy5UqBNI3Pz+Ou9ri/YcMGUlJS8ucNCCEKJUn+hRCFioODA3FxcVkur+2/ml4zx+rVq+uVeV7ZsmX1njs7OwOkOzq0s7Nzmr62AFWqVEmzzN/fH9DvrxwfH8/YsWPx9vbG2toaV1dX3NzcdM3GHz16lGY7fn5+aZal56233qJdu3ZMnToVZ2dnWrRowbRp07hx44auzIMHD4iLi0v3M7K2tqZ8+fLpfkbpNQ8uUaJEup/Fi65fv07JkiUpUaJEmteqV6+OWq3OdULg5eXFzp072blzJ8HBwVy+fJnr16/rLrRz+tvQsrCw4Mcff+T8+fOULVsWf39/hg8fnqbf8Oeff07ZsmXp2rUrbm5udO3alV9++UUvMcppLC9+B9rPMyvfQUpKClOmTKFixYpYWVlRokQJ3Nzc6NevH5D+7y4r37n2t53Z7z871q9fz86dO9mzZw+nT5/m/v37fPnll0D2f7stW7bU9ZsGTZIfGBhIjRo1KFmypN7ySpUqUbp0aQAuX76MWq1m2bJluhtKzz8uXbrEvXv30sSQ1b/T7Fq/fj0NGjTA2toaZ2dn3Q0u0P/e3N3dqVq1qt77cnFxoWbNmrRo0UJvufbzyQva33ZmN2qz+veTFTn5nLN6fM4v+XncHT58OHXq1GHYsGG4uLjQoUMHfvzxx3R/o0KI4kWSfyFEoVK9enViY2OzfHGWUU3ry2RUW5fR8vT2k9l0Ts+/1qtXL11f7dWrV7N9+3Z27typq9VVq9Vp1n++tUBmLCws+Pvvvzl27BhffPEFFhYWTJo0iSpVqrB27doMY3/Ze4PsfRbZKZPT7+xFNjY2tG7dmtatW9OsWTP8/Pz0Pve82M+7775LaGgoixYtol69evzxxx+0bduWrl276r638uXLc/78ef7++2/efvttbt++zXvvvUelSpUICQnJVSy5+Q4+/PBDvvzyS2rXrs3SpUvZtm0bO3fu5LvvvgPS/93l1e8/O5o2bUrr1q1p0aIFNWrU0Kv1zO5v19XVlWrVqrF7925dv/5WrVoB0KJFC3bv3k18fDzHjh3TS4S12+nVq5fuhtKLj+fH8dDK6t9pdvz++++6sQh+/PFH/vzzT3bu3Mnff/8NpP3eWrZsycmTJ3n06BF79uyhRYsWmJiY0LJlS44cOUJ8fDx79uyhSpUqeTImAcCpU6cAqFy5cqblsvL3kxU5+ZzT+31qv2fta5n9hnNbo56fx10XFxeOHj1KcHAwo0aN4smTJ3z00UdUrFiRoKCgHMcshCj8ZMA/IUSh0q1bN4KDg1m4cGGa0bnTU758eYB0m3GeO3dOr0xe0yZ26S3T1t5omxP369cvzdzeu3btyrNY6tatS926dfn888+5c+cOderU4dNPP6VXr164u7tjb2+f7mf09OlTrl+//tKL+OwqX74827dvJyoqKk3t//nz5zExMcnzObjTi0G7vxdl57fh4eHBO++8wzvvvINarWbIkCEsWbKE4OBgWrRoAWhuwrRr1043Un1QUBAtWrTgu+++Y/ny5Qb5na5atYpmzZqxbt06veXpdWHJDm2cISEhVKxYUe+19P4mciMnv92WLVsye/ZstmzZwtOnT3XJf6tWrfjggw/YunUrKSkpesl/hQoVUKlUJCYm0rp16zx9D9m1atUqrKys2Lt3r17Sm173INC83zlz5rB9+3YOHz7MzJkzAc37TU5O5q+//uL48eO8//77eRJfYmIiK1aswMzMTPd7z0xW/n7yQ0hISJqBQy9cuAD8//HZxcUF0MxK8KL0auWzc8Mrv4+7JiYmNGvWjGbNmgGa91anTh0mTJhAcHBwjrcrhCjcpOZfCFGovPPOO1SpUoUZM2Zk2B/77NmzzJgxA4DatWvj4+PD8uXLuX37tq6MWq1m2rRpAHTt2jVfYt25cycnT57UPVcUhenTp+vtU1uL82Itz507d1i0aFGuY4iMjEyzzNPTE09PT90FrYmJCZ06deLs2bNs3bpVr+ysWbOIj4/njTfeyHUsz+vatSuKoui+A61Dhw6xZ88eWrduna2xHXIit7+NJ0+e8OTJE71lJiYm1KxZE/j/hCG976BWrVqYmJjoyhjid2pqaprmd/f48WNdcphTnTp1QqVSMWPGDL1pLcPCwli9enWutv2inPx2W7ZsiaIoTJo0CU9PT13z75YtW5KSksLXX3+NSqXSSzxLlChBx44d2bx5MwcOHEgTh6IoPHjwIE/fW0ZMTU1RqVR6NeOKojBlypR0ywcGBmJiYsI333xDYmKi7mZHhQoV8Pb2ZvLkyaSmpuqW58bjx4/p06cPYWFhuikRM5LVvx/QjO6fXjeU3Jg5cyZJSUm657du3WLNmjVUrFhR1xTf3t4eDw8P9uzZo/e3cv36dTZt2pRmm9rxYLISa34ed9M75lSsWBF7e/t0b2QIIYoPqfkXQhQq1tbWbN26lVdffZU333yT1q1b07ZtW1xdXYmKiiI4OJht27YxZMgQQHOhPH/+fDp37ky9evV47733cHZ2ZuPGjQQHBzNkyJBMp2LKjYCAAFq2bMmwYcPw9PRk8+bN7Nq1i379+ukGELS3t6dt27asWrUKa2tr6tWrR1hYGD///DNly5bNUt/tzEyZMoV//vmH1157TTeOwfbt2zl58qRuLmyAadOmsWvXLt58803dlFOHDx9mxYoVBAQEMGrUqFzF8aKBAweycuVKZsyYQWhoKC1bttRN9efg4MCsWbPydH/pye1v4/LlyzRv3pyuXbtStWpVSpQowcWLF1mwYAGlSpXS1RC3bdsWR0dHmjVrhpeXFzExMaxYsQK1Wk3//v3zJJac6NatGz///DM9e/akdevW3Lt3jyVLlqQ7DkN2VKpUidGjRzNz5kyaN29Oz549iYmJYcGCBVSuXFnvhlheyO5vt3nz5piamhISEkLfvn11y8uVK4evry8hISHUrFkzzeewYMECXnnlFVq0aEG/fv2oXbs2arWa69evs3nzZvr375/ufPDZdfLkyQwT+S+++IJu3brx+++/07JlS/r3709ycjKbNm1Kk0hrOTk5UatWLU6cOEGZMmX0WmO0aNGC5cuXY2JiQmBgYLbi3LFjB1evXkWtVhMTE8OZM2fYuHEjDx8+ZODAgfzwww+Zrp/Vvx+ABg0asGvXLv73v//h5eWFra0tr7/+erbifVFKSgpNmzalV69exMXF8dNPP5GQkMCcOXP0avCHDx/OF198QYcOHejSpQsRERH89NNPVKtWjWPHjults0GDBoBmOr5evXphaWlJgwYN0owho5Vfx90hQ4Zw69Yt2rZti4+PD4mJiWzYsIH79+8zbty4HG1TCFFEFMykAkIIkbceP36szJo1S3nllVcUZ2dnxczMTHFzc1PatWunLF68WG8qJEVRlP379ytt27ZVHBwcFEtLS6VatWrKjz/+mGaqM+30Yi/au3evAihLly5N89qL09A9Pz3UmjVrlOrVqysWFhZKmTJllC+//FJv+jNFUZQHDx4o77zzjuLp6amL7ZdfftFN7fT8tGiZTSWVXix79+5VevToofj4+ChWVlaKk5OTUrduXWX+/PlppiALDQ1V+vfvr5QsWVIxNzdXvL29lQ8//FCJjo7WK5deXFrNmzdXfHx80o3tRY8fP1Y+++wzpXz58oq5ublSokQJpUePHulO2ZWTqf4qVaqUpbJZ/W28+NlHRkYqo0ePVgICAhQnJyfFyspKKVeunDJ06FDl5s2buvUWLlyotGnTRvHw8FAsLCyUkiVLKm3btlX+/vvvHMeS0e9UUTKeFu1Fjx8/VsaOHat4e3srlpaWSoUKFZRp06Ypu3btSvNbz+53rlarlenTpytly5ZVLCwsFD8/P+XHH3/MdDsv0r7HO3fuvLRsVn+7WvXr11cAZcmSJXrLBw0alGaKuuc9ePBAGTt2rOLn56dYWloqjo6OSrVq1ZSRI0cq58+f15V72d9perTHjcweWr/88otSpUoVxdLSUvHw8FCGDBmiREVFZfjdf/zxxwqg9O/fX2/5ihUrFECpXbt2luPUvjftw8zMTHFxcVFq166tDB06VDl8+HCm62X370dRNNNHtmzZUrGzs1MA3e8ts6n40tvn88vOnTunDB8+XClZsqRiaWmp1KtXT/nnn3/SbCM5OVkZN26c4uHhoVhaWiq1atVStmzZkuF3/M033yje3t6Kqamp3t9RRuXz47j7+++/K6+//rpSunRpxcLCQnF1dVVeeeUVZc2aNel+TkKI4kOlKHk0spIQQggAQkNDKVu2LBMmTMiTmkAhhBBCCCFyS/r8CyGEEEIIIYQQRZwk/0IIIYQQQgghRBEnyb8QQgghhBBCCFHESZ9/IYQQQgghhBCiiJOafyGEEEIIIYQQooiT5F8IIYQQQgghhCjiJPkXQgghhBBCCCGKOEn+hRBCCCGEEEKIIk6SfyGEEEIIIYQQooiT5F8IIYQQQgghhCjiJPkXQgghhBBCCCGKOEn+hRBCCCGEEEKIIk6SfyGEEEIIIYQQooiT5F8IIYQQQgghhCjiJPkXQgghhBBCCCGKOEn+hRBCCCGEEEKIIk6SfyGEEEIUGykpKYwaNQoXFxecnJx45513ePr0qaHDEkIIIfKdJP9CCCGEKDamTp3K3r17OXv2LFeuXCEkJISPP/7Y0GEJIYQQ+U6lKIpi6CCEEEIIIQqCt7c306dP56233gJgx44d9OjRg4cPH2Jqamrg6IQQQoj8IzX/QgghhDA606ZNo3v37pQrVw6VSoWvr2+m5deuXUudOnWwtrbG1dWVXr16ERYWplcmOjqa8PBwatasqVtWu3ZtYmNjCQ0Nzfs3IYQQQhgRSf6FEEIIYXQ+++wz9uzZQ/ny5XF2ds607Ny5c+nduzfW1tbMnDmT0aNHs3PnTho3bkxERISuXFxcHABOTk66Zdr/a18TQgghiiozQwcghBBCCPGia9euUa5cOQCqVatGfHx8uuWioqIYP348tWvXJigoCDMzzaVN+/btqV+/Pl999RWLFi0CwN7eHoCYmBg8PDwATWuA518TQgghiiqp+RdCCCGE0dEm/i+zefNm4uPjGTlypC7xB6hbty7NmjVj/fr1JCUlAZpafi8vL06dOqUr999//2Fvb//SbgVCCCFEYSfJvxBCCCEKraNHjwLQuHHjNK81btyYuLg4Ll68qFs2ePBgpk6dSkREBA8ePGDixIkMHDhQBvsTQghR5Emz/zykVquJiIjA3t4elUpl6HCEEEIUc4qiEBcXR6lSpTAxKZr3+2/fvg1AmTJl0rymXXbr1i1q1KgBaMYSiIyMpGrVqqjVarp168Z3332X4fYTExNJTEzUPVer1Tx8+JASJUrIuV4IIYRRyOr5XpL/PBQREYGXl5ehwxBCCCH0hIeHp5scFwVPnjwBwNLSMs1rVlZWemUAzMzMmD17NrNnz87S9qdNm8akSZPyIFIhhBAif73sfC/Jfx7SDhYUHh6Og4ND9jewcwIcXwwNh0GL8XkcnRBCiOImNjYWLy+vIj2YnY2NDaCpobe2ttZ7LSEhQa9MTowfP54xY8bonsfExODt7Z3zc70QQgiRx7J6vpfkPw9pm/85ODjk7ILAyQUsVWCeCnJBIYQQIo8U5ebppUuXBjRN+/38/PRey6xLQFZZWlpiaWnJvHnzmDdvHqmpqUAuzvVCCCFEPnnZ+b5odgAsrCxsNf8mPTZsHEIIIUQhUa9ePQAOHjyY5rWDBw9iZ2dH5cqVc72fYcOGERISwrFjx3K9LSGEEMIQJPk3JpbPmmkkxRk2DiGEEKKQ6Ny5MzY2NsyePZuUlBTd8uPHj7Nv3z569OiBhYWFASMUQgghjIM0+zcmUvMvhBBCALBy5UrCwsIAePDgAUlJSUyZMgUAJycnhg8fDoCrqytTp05l9OjRBAYG0q9fPyIjI5k5cyYlS5Zk8uTJeRLPi83+hRBCiMJGpSiKYuggiorY2FgcHR2JiYnJWT/AkM2wvj94N4JBf+d9gEIIIYqVXJ+XDCgwMJDg4OB0X/Px8SE0NFRv2erVq5kxYwYXLlzAxsaGNm3aMG3aNMqWLZuncRXmz1QIIUTRlNVzk9T8GxNdzX+8YeMQQgghDCwoKChb5fv06UOfPn3yJxghhBCiCJA+/8bE4lmf/0RJ/oUQQghjMm/ePPz9/XUDDOaJ/T/AkV/ybntCCCFEJqTm35hIn38hhBDCKA0bNoxhw4bpmlbm2q0TsHuS5v+Rl6D9d2Aql2VCCCHyj9T8GxNJ/oUQQojioXRtaD0JUMGxRbCmOyREGzoqIYQQRZgk/8ZEO9Vf8mNQqw0bixBCCCF08rzZv0oFr4yGnivB3Aau7YHFbeDh9bzZvhBCCPECSf6NibbmHzQ3AIQQQghhFIYNG0ZISAjHjh3L2w1XeV0zw499KYi8DAtbQeiBvN2HEEIUE8uWLcPJycnQYRgtSf6NiZkVqJ59JdL0XxQDQUFBqFQqoqOjDR1KrgUGBjJ69Og83+7EiROpWbOm7vnAgQPp0qVLnu8nvX3lpz179lC5cmXU0sopQ2PHjmXkyJGGDkMUBM8AGLIHStWChIewojP8t9rQUQkhRKHTs2dPLl++bOgwjJYk/8ZEpZIR/0WhMnDgQFQqFSqVCnNzc8qVK8fYsWN5/DhrN68aN27MnTt38mbwrHywbNky3fszNTXF2dmZBg0aMHnyZGJiYvTKbty4ka+//jpL283OjYKxY8eye/fu7Ib+UiqVik2bNhXIvtLz8ccf8/nnn2NiUvROQ0+fPmXgwIFUr14dMzOzdG/W3Llzh969e1OpUiVMTEzS/T18/PHHLF26lBs3buR/0MLwHDxh4Dbw7wzqZNg8FHZOkG6AQgiRDdbW1ri7uxs6DKNllFdda9eupU6dOlhbW+Pq6kqvXr0ICwvL0rrr16/n7bffpkaNGpiZmaFSqQgNDc3SumfOnMHc3ByVSsW6dety8Q5yQTfonyT/onBo3749d+7c4fr160yZMoX58+czduzYLK1rYWGBh4cHKpUqn6PMOQcHB+7cucOtW7c4ePAg7777LitWrKBmzZpEREToyrm4uGBvb59n+1UUhZSUFOzs7ChRokSebTczBbWvgwcPcuXKFbp3757v+zKE1NRUrK2tGTlyJK1bt063TGJiIm5ubnz++ecEBASkW8bd3Z22bdvy008/5We4IovyZaq/F1nYQLdl0Gyc5vmBWbC+n7QGFEIUG4GBgQwfPpzhw4fj5OREiRIl+OKLL1AUBYBHjx7Rv39/nJ2dsbGxoUOHDly5ckW3/ovN/k+fPk2LFi2wt7fHwcGBOnXqcPz4cQDCwsJ4/fXXcXZ2xtbWlqpVq7Jt2zbdusHBwdSvXx9LS0s8PT359NNPSUlJ0Yt15MiRfPzxx7i4uODh4cHEiRPz9wPKJaNL/ufOnUvv3r2xtrZm5syZjB49mp07d9K4cWO9C+2MzJ8/n3Xr1mFjY0OFChWyvF+1Ws2QIUOwsrLKTfi5JyP+CzSJ35OkFIM8tAfXrLK0tMTDwwMvLy969+5Nnz59dDXKiYmJjBw5End3d6ysrHjllVf0+su+2Ow/s4Pwo0eP6NOnD25ublhbW+Pn58fSpUt12zp79iwtW7bE2tqaEiVK8O677xIf//830bTN5b///ns8PT0pUaIEw4YNIzk5OdP3p1Kp8PDwwNPTkypVqvDOO+9w8OBB4uPj+fjjj3XlXqzNnz9/Pn5+flhZWVGyZEm6deumiyM4OJgff/xR16ogNDRU91ns2LGDunXrYmlpyf79+zNsij9p0iTc3d1xcHDgvffeIykpSfear68vs2bN0itfs2ZN3QnJ19cXgK5du6JSqXTPX9yXWq1m8uTJlClTBktLS2rWrMnff/+tez00NBSVSsXGjRtp0aIFNjY2BAQEcOjQoUw/03Xr1tG2bVu9461230uWLMHb2xs7Ozs++OADUlNTmT59Oh4eHri7u/PNN9/obSsmJoZ3331X91m0bNmS06dP616/du0anTt3pmTJktjZ2VGvXj127dqltw1fX1+mTp3KoEGDsLe3x9vbm19+yfnc67a2tixYsIAhQ4bg4eGRbhlfX19+/PFH+vfvn2nLl06dOrF27docxyLyTr71+X+RiQm0/AK6/gKmFnBxKyxpBzG383e/QogirTBdWy5fvhwzMzOOHDnC7NmzmTlzJosWLQI011HHjx9ny5YtHDp0CEVR6NixY4bXc3369KFMmTIcO3aMEydO8Omnn2Jubg5ojuuJiYns27ePs2fP8t1332FnZwfA7du36dixI/Xq1eP06dMsWLCAxYsXM2XKlDSx2tracuTIEaZPn87kyZPZuXNndr+eAmNUE8pGRUUxfvx4ateuTVBQEGZmmvDat29P/fr1+eqrr3RffEZWrFhBqVKlMDMzY/jw4Vy6dClL+547dy7nz5/n448/ZsKECbl+Lzkmyb8AEpJT8f9qh0H2HTK5HTYWOT80WFtb6w7AH3/8Mb///jvLly/Hx8eH6dOn065dO65evYqLi0uadYcNG0ZSUhL79u3D1taWkJAQ3UH4yy+/JCQkhO3bt+Pq6srVq1dJSEgA4MmTJ7Rv356GDRty7Ngx7t+/z+DBgxk+fDjLli3TbX/v3r14enqyd+9erl69Ss+ePalZsyZDhgzJ1nt0d3enT58+LFmyhNTUVExNTfVeP378OCNHjmTlypU0btyYhw8fsn//fgB+/PFHLl++TLVq1Zg8eTIAbm5uuhZKH3/8Md9//z3lypXDycmJ4ODgNPvfvXs3VlZW7N27l9DQUN5++21cXV3TJMYZOXbsGO7u7ixdupT27duniV/rxx9/ZMaMGfz888/UqlWLJUuW0KlTJ86fP4+fn5+u3Oeff87333+Pn58fn3/+Ob169eLq1au6Y/iL9u3bR69evdIsv3btGtu3b+fvv//m2rVrdOvWjRs3blCxYkWCg4M5ePAggwYNolWrVjRs2BBFUXj11VdxcXFh27ZtODo68vPPP9OqVSsuX76Mi4sL8fHxdOzYkSlTpmBlZcXy5ct5/fXXuXTpEt7e3rp9z5gxg6+//prPPvuM3377jQ8++IBmzZpRuXJlAKpWrZppCzQfHx/Onz+fpc8/O+rXr094eDhhYWH4+Pjk+faFEQvoCc6+sK433D0LC1tCrzVQuo6hIxNCFEKF6drSy8uLmTNnolKpqFSpEmfPnmXmzJkEBgayZcsWDhw4QOPGjQFYvXo1Xl5ebNq0Kd0WhTdv3mTcuHG68/nz1y83b97kzTffpHr16gCUK1dO99r8+fPx8vJi7ty5qFQqKleuTEREBJ988glfffWVrttijRo1dLmjn58fc+fOZffu3bRp0yabn1LBMKrkf/PmzcTHxzNy5Ei9i8a6devSrFkz1q9fz/z587GwsMhwG89fzGVVeHg4X3zxBRMmTMDNzS1HsecZ7XR/SXGGjUOIHDh69Chr1qyhVatWPH78mAULFrBs2TI6dOgAwMKFC9m5cyeLFy9m3LhxadbP7CB88+ZNatWqRd26dYH/r70GzYE/ISGBFStWYGuruYE2d+5cXn/9db777jtKliwJgLOzM3PnzsXU1JTKlSvz6quvsnv37mwn/wCVK1cmLi6OqKioNH3Lbt68ia2tLa+99hr29vb4+PhQq1YtABwdHbGwsMDGxibdWuHJkye/9IRhYWHBkiVLsLGxoWrVqkyePJlx48bx9ddfZ6kPvfY45+TklGHNNMD333/PJ598wltvvQXAd999x969e5k1axbz5s3TlRs7diyvvvoqoGmRULVqVa5evao70b4oNDSUUqVKpVmuVqtZsmQJ9vb2+Pv706JFCy5dusS2bdswMTGhUqVKfPfddwQFBdGwYUP27t3L2bNnuX//PpaWlrqYN23axG+//ca7775LQECAXrP6KVOm8Mcff7BlyxaGDx+uW96xY0eGDh0KwCeffMLMmTMJCgrSvYdt27Zl2kpEW4uQ10qXLg1oPjNJ/osh7waagQDX9IQHF2BpR+j6E1TtaujIhBAi3zRs2FCvS2ijRo2YMWMGISEhmJmZ0aBBA91rJUqUoFKlSly4cCHdbY0ZM4bBgwezcuVKWrduTffu3SlfvjwAI0eO5IMPPuCff/6hdevWvPnmm9SoUQOACxcu0KhRI704mjRpQnx8PLdu3dLlnNryWp6enty/fz9vPoh8YFTJ/9GjRwF0d3Ke17hxY4KDg7l48WKaDzm3hg0bhq+vLx9++CGrVq3K8nqJiYkkJibqnsfGxuY+GKn5F4C1uSkhk9sZbN/ZsXXrVuzs7EhJSSE5OZnOnTszZ84crl27RnJyMk2aNNGVNTc3p379+hkeoDM7CH/wwQe8+eabnDx5krZt29KlSxfdseLChQsEBAToEn/QHKDVajWXLl3SJf9Vq1bVq+X29PTk7Nmz2Xq/WtombOmNV9CmTRt8fHwoV64c7du3p3379nTt2hUbG5uXbld7cyMzAQEBettq1KgR8fHxhIeH51mCGBsbS0REhN73B5rP9flm9aB/4vP09ATg/v37GSb/CQkJ6Xax8vX11Rs3oWTJkpiamurd0ChZsqTupHrixAni4+PTjFOQkJDAtWvXAHj8+DGTJk1i69atREREkJKSQkJCAjdv3szwPWi7ejx/8jZU4m1tbQ1oWreIYsrZB975B34bBFd3woaBEHkVmo3VDBQshBBZUJiuLbNLUZQMx4+aOHEivXv35q+//mL79u1MmDCBdevW0bVrVwYPHky7du3466+/+Oeff5g2bRozZsxgxIgR6W4zvWu/F2/+q1Qqo57JyKj6/N++renPVqZMmTSvaZfdunUrT/e5YcMGtm7dyk8//ZRhE9WMTJs2DUdHR93Dy8sr9wFJ8i/QHDhsLMwM8sju4HstWrTg1KlTXLp0iadPn7Jx40bc3d0zTI4zO0APHjyY69ev069fP86ePUvdunWZM2cOAB06dCAsLIzRo0cTERFBq1atdAMLZrbN/DpAX7hwAQcHh3QHyLO3t+fkyZOsXbsWT09PvvrqKwICArI0peHzNzCyS/teTUxM0vSve9nYBi/bplZ6n/Xzn6v2tcw+V1dXVx49epRmeXrfT2bfmVqtxtPTk1OnTuk9Ll26pGtZMm7cOH7//Xe++eYb9u/fz6lTp6hevbreGAkZ7fv591C1alXs7OwyfFStWjXD95sbDx8+BDB8qzRRMAP+ZcTKAXqtg4aa1insnQIb34XkpwUfixCiUCpM15aHDx9O89zPzw9/f39SUlI4cuSI7rWoqCguX75MlSpVMtxexYoV+fDDD/nnn39444039MaM8vLy4v3332fjxo189NFHLFy4EAB/f38OHjyodz118OBB7O3tda3yCiOjSv61NRva5pvP09YS5WXtR3R0NKNGjeKdd95Jt7XBy4wfP56YmBjdIzw8PPdBWWj6N8tUf6KwsLW1pUKFCvj4+OglUBUqVMDCwoJ///1Xtyw5OZnjx49neoDO6CAMmgRo4MCBrFq1ilmzZukGZfP39+fUqVN6UwweOHAAExMTKlasmJdvF9DUaq9Zs4YuXbpk2MzezMyM1q1bM336dM6cOUNoaCh79uwBNM32U1NTc7z/06dP68Y7AM1J0c7OTneT1M3NjTt37uhej42NTTNdnLm5eaYxODg4UKpUKb3vDzQnvsy+v6yoVasWISEhudoGQO3atbl79y5mZmZUqFBB7+Hq6grA/v37GThwIF27dqV69ep4eHhkeQaY523bti3NTYbnH8+PDpyXzp07h7m5eb7dXBBZV2AD/mXE1AzaT4PXZoLKFM6uh+WvQ/wDw8QjhBD5JDw8nDFjxnDp0iXWrl3LnDlzGDVqFH5+fnTu3JkhQ4bw77//cvr0afr27Uvp0qXp3Llzmu0kJCQwfPhwgoKCCAsL48CBAxw7dkx3HTN69Gh27NjBjRs3OHnyJHv27NG9NnToUMLDwxkxYgQXL15k8+bNTJgwgTFjxhTqaYqNqtm/thlrYmKirqmjlvZCNyvNZrPq448/JiUlhe+++y5H61taWqZ7oyJXtMm/TPUnCjlbW1s++OADxo0bh4uLC97e3kyfPp0nT57wzjvvpLvO6NGj6dChAxUrVuTRo0d6B+GvvvqKOnXqULVqVRITE9m6davutT59+jBhwgQGDBjAxIkTefDgASNGjKBfv366Jv85pSgKd+/eRVEUoqOjOXToEFOnTsXR0ZFvv/023XW2bt3K9evXadasGc7Ozmzbtg21Wk2lSpUATfP2I0eOEBoaip2dXbqDH2YmKSmJd955hy+++IKwsDAmTJjA8OHDdSejli1bsmzZMt3MCV9++WWaQf18fX3ZvXs3TZo0wdLSEmdn5zT7GTduHBMmTKB8+fLUrFmTpUuXcurUKVavXp2teF/Url07li9fnqttALRu3ZpGjRrRpUsXvvvuOypVqkRERATbtm2jS5cu1K1blwoVKrBx40Zef/11VCoVX375ZY5ae2S32X9ISAhJSUk8fPiQuLg4Tp06BaA3m4J2WXx8PA8ePODUqVNYWFjg7++vK7N//36aNm2a5pwoirG6g8C5LGwYALeOagYC7P0rlPR/+bpCCFEI9O/fn4SEBOrXr4+pqSkjRozg3XffBWDp0qWMGjWK1157jaSkJJo1a8a2bdvSHXvH1NSUqKgo+vfvz71793B1deWNN95g0qRJgGZq3mHDhnHr1i0cHBxo3749M2fOBDRj7mzbto1x48YREBCAi4uL7tqrMDOq5F/bhOLWrVt6IzFC5l0CcuK///5j0aJFfP3118TGxur660dGRgLw4MEDQkND8fT0zPsEPzPS7F8UId9++y1qtZp+/foRFxdH3bp12bFjR7qJJmR+ELawsGD8+PGEhoZibW1N06ZNWbduHaC5Kbhjxw5GjRpFvXr1sLGx4c033+SHH37I9XuIjY3F09MTlUqFg4MDlSpVYsCAAYwaNQoHB4d013FycmLjxo1MnDiRp0+f4ufnx9q1a3W1t2PHjmXAgAH4+/uTkJCQplb+ZVq1aoWfnx/NmjUjMTGRt956S29e2fHjx3P9+nVee+01HB0d+frrr9PsY8aMGYwZM4aFCxdSunTpdGvDR44cSWxsLB999BH379/H39+fLVu2pDk+Z1ffvn355JNPuHTpku6GSE6oVCq2bdvG559/zqBBg3jw4AEeHh40a9ZMd9Nn5syZDBo0iMaNG+Pq6sonn3ySN+OzvETHjh31ZgfQDvj4fPNB7TLQjF+wZs0afHx89L6LtWvX6i5ShNAp3wIG74Y1PeDhdVjcFrotgYptDR2ZEELkmrm5ObNmzWLBggVpXnN2dmbFihUZrjtw4EAGDhwIaK4dM5suV9u1NCPNmzfXjUmXnqCgoDTLtNNdGyuVkt2JF/PR4sWLGTx4MMuWLWPAgAF6rwUGBnLixAmioqIyHe3/ecOHD2fevHncuHFDb2Rw0HwxXbu+fLTcQ4cO0bBhwyztLzY2FkdHR2JiYjJMCl7qwI+w8ysI6KUZ0VcIIYqgjz/+mJiYGH7++WdDh2K0/vrrL8aNG8eZM2eyPSaNVp6cl4Qeo/pMnzyE9f0hdD+oTKDtN9DwAxkIUAhRaAUGBlKzZk1mzZpl6FAKlayem4yqw0Lnzp2xsbFh9uzZpKSk6JYfP36cffv20aNHD13if+fOHS5evJjjMQAaNGjAH3/8keYxYsQIAD766CP++OOPXNVK5Yiu5l+a/Qshiq7PP/8cHx+fXI19UNQ9fvyYpUuX5jjxF8WAjQv03Qi1+oGihh3jYeuHkJqzAT6FEEIUbUZ1ReHq6srUqVMZPXo0gYGB9OvXj8jISGbOnEnJkiWZPHmyruz48eNZvnw5e/fuJTAwULd837597Nu3D9DcNADNfN9OTk4AjBgxAkdHRzw9PenSpUuaGLSjcdetWzfd1/Odrs+/NPsXQhRdjo6OfPbZZ4YOw6j16NHD0CGI58ybN4958+YZ3w0rMwvoNAfcKsE/X8KJpZquAD2Wg3X6XayEEMJYpdeUXuQdo0r+AUaNGoWrqyszZsxg9OjR2NjY0KZNG6ZNm5alaRX27NmTpn/kjBkzdP/v27cvjo6OeR53npE+/0IIIYTRGTZsGMOGDdM1rTQqKhU0HgEu5eH3wXAjGBa1ht7roUR5Q0cnhBDCSBhVn//CLk/6AV7bCyu7gHtVGHowT+MTQghRvBhV//Qiwug/07tnYc1bEHsLrJyg5yoo29TQUQkhhMhHhbLPv0Cm+hNCCCFEznlUhyF7oHQdeBqtqVA4kfupNYUQQhR+kvwbG2n2L4QQQojcsC8JA/+Cqm+AOgX+HAk7Pge1kY1XIIQQokBJ8m9sLKXmXwghhBC5ZG4N3ZZA8081zw/NhXV9IFGuL4QQoriS5N/YaJv9pzyF1JTMywohhBBCZESlghbj4c3FYGoJl7fDknYQHW7oyIQQQhiAJP/GRtvsHyBZmv4LIYQQIpeqd9N0A7B1h3vnYGFLuHXc0FEJIUShFRgYyOjRow0dRrZJ8m9sTC3A5NkMjNI0T4hib9myZTg5OeX5dkNDQ1GpVJw6dQrQzKurUqmIjo7O933lp6SkJCpUqMCBAwfyfV8F4ezZs5QpU4bHj+VmsMglr3qagQBLVoPH92FpRzj7m6GjEkIIUYAk+Tc2KtVzI/7LxZ4wbgMHDkSlUqFSqTA3N6dcuXKMHTvW6BOVgkxGM6L93FQqFba2tvj5+TFw4EBOnDihV65nz55cvnw5S9vMzo0CLy8v7ty5Q7Vq1bIbeqYGDhxIly5dCmRf6fnll1/w8fGhSZMm+b6v5wUFBdG5c2c8PT2xtbWlZs2arF69+qXrffPNNzRu3BgbG5t0v7vq1atTv359Zs6cmQ9Ri2LHyQsG/Q0V20NqIvz+DgR9CzLrsxBCZElycrKhQ8gVSf6NkUz3JwqR9u3bc+fOHa5fv86UKVOYP38+Y8eONXRYAKSmpqJWqw0dRoaWLl3KnTt3OH/+PPPmzSM+Pp4GDRqwYsUKXRlra2vc3d3zdL9JSUmYmpri4eGBmZlZnm47PQW5rzlz5jB48OB838+LDh48SI0aNfj99985c+YMgwYNon///vz555+ZrpeUlET37t354IMPMizz9ttvs2DBAlJTZaR2Q5o3bx7+/v7Uq1fP0KHkjqU9vLUGGg3XPA+aprkJkJxg2LiEEAJNc/rhw4czfPhwnJycKFGiBF988QXKs5uUjx49on///jg7O2NjY0OHDh24cuUKAIqi4Obmxu+//67bXs2aNfWuow4dOoS5uTnx8Zo8KyYmhnfffRd3d3ccHBxo2bIlp0+f1pWfOHEiNWvWZMmSJZQrVw5LS0tdLM9btWoVdevWxd7eHg8PD3r37s39+/d1r9epU4cZM2bonnfp0gUzMzNiY2MBuHv3LiqVikuXLuXFx5ghSf6NkUz3JxRF8/0b4pHNGiBLS0s8PDzw8vKid+/e9OnTh02bNgGQmJjIyJEjcXd3x8rKildeeYVjx47p1s3ugTApKYmPP/6Y0qVLY2trS4MGDQgKCtKtr6353rp1K/7+/lhaWhIWFpbtj//atWt07tyZkiVLYmdnR7169di1a5fu9Tlz5lC9enXd802bNqFSqZg3b55uWbt27Rg/fnym+3FycsLDwwNfX1/atm3Lb7/9Rp8+fRg+fDiPHj3Se09ap0+fpkWLFtjb2+Pg4ECdOnU4fvw4QUFBvP3228TExOhaFEycOBEAX19fpkyZwsCBA3F0dGTIkCEZtn44cOAAAQEBWFlZ0aBBA86ePat7TXsCfN6sWbPw9fXVvb58+XI2b96siyEoKCjdfQUHB1O/fn0sLS3x9PTk008/JSXl/wc5DQwMZOTIkXz88ce4uLjg4eGhez8ZOXnyJFevXuXVV1/VW3706FEaNGiAlZUVAQEBHD58mB9//JFOnTplur3s+Oyzz/j6669p3Lgx5cuXZ+TIkbRv354//vgj0/UmTZrEhx9+qPd7elG7du2IiooiODg4z+IV2Tds2DBCQkL0jmGFlokptPsGXp+t6Wp47ndY9hrE3TN0ZEKI/FKIri2XL1+OmZkZR44cYfbs2cycOZNFixYBmhaGx48fZ8uWLRw6dAhFUejYsSPJycmoVCqaNWumuzZ89OgRISEhJCcnExISAmha6tWpUwc7OzsUReHVV1/l7t27bNu2jRMnTlC7dm1atWrFw4cPdfFcvXqV9evX8/vvv2fYajQpKYmvv/6a06dPs2nTJm7cuMHAgQN1rwcGBuriUhSF/fv34+zszL///gvA3r178fDwoFKlStn6rLIr/6thRPbJdH8i+QlMLWWYfX8WoT/wZDZZW1vrmkR9/PHH/P777yxfvhwfHx+mT59Ou3btuHr1Ki4uLroD4UcffZTmQNixY8c0B8K3336b0NBQ1q1bR6lSpfjjjz9o3749Z8+exc/PD4AnT54wbdo0Fi1aRIkSJXJUax4fH0/Hjh2ZMmUKVlZWLF++nNdff51Lly7h7e1NYGAgo0aNIjIyEldXV4KDg3X/Dhs2jJSUFA4ePMiHH36Y7X1/+OGHrFixgp07d9KjR480r/fp04datWqxYMECTE1NOXXqFObm5jRu3JhZs2bx1Vdf6W6W2NnZ6db73//+x5dffskXX3yR6f7HjRvHjz/+iIeHB5999hmdOnXi8uXLmJubvzT2sWPHcuHCBWJjY1m6dCkALi4uRERE6JW7ffs2HTt2ZODAgaxYsYKLFy8yZMgQrKys9BL85cuXM2bMGI4cOcKhQ4cYOHAgTZo0oU2bNunuf9++fVSsWBEHBwfdsoiICNq0aUPfvn1ZuXIlc+bMoW/fvnh6ejJo0CBduQ4dOrB///5M35+2liCrYmJiqFKlSrbWSY+FhQUBAQHs37+fli1b5np7QujUGQAuZeHXfnD7uGYgwN6/gkf+d9ERQhSwQnRt6eXlxcyZM1GpVFSqVImzZ88yc+ZMAgMD2bJlCwcOHKBx48YArF69Gi8vLzZt2kT37t0JDAzkl19+ATTXBQEBAXh7exMUFIS/vz9BQUEEBgYCmoT77Nmz3L9/H0tLSwC+//57Nm3axG+//ca7774LaBL7lStX4ubmlmHMz19TlCtXjtmzZ1O/fn3i4+Oxs7MjMDCQxYsXo1arOXv2LKampvTt25egoCA6duxIUFAQzZs3z9bHmhNS82+MpOZfFFJHjx5lzZo1tGrVisePH7NgwQL+97//0aFDB/z9/Vm4cCHW1tYsXrwY0NwF3b9/P2q1mjNnzmBqakq/fv10d0afPxBeu3aNtWvXsmHDBpo2bUr58uUZO3Ysr7zyii7RBE1frPnz59O4cWMqVaqErW32b2QEBATw3nvvUb16dfz8/JgyZQrlypVjy5YtAFSrVo0SJUroamK1NzC0z48dO8bTp0955ZVXsr3vypUrA5pxCdJz8+ZNWrduTeXKlfHz86N79+4EBARgYWGBo6MjKpUKDw8PPDw89JL/li1bMnbsWCpUqECFChUy3P+ECRNo06YN1atXZ/ny5dy7d++ltddadnZ2WFtb61qDeHh4YGFhkabc/Pnz8fLyYu7cuVSuXJkuXbowadIkZsyYoddNo0aNGkyYMAE/Pz/69+9P3bp12b17d4b7Dw0NpVQp/QubtWvXolKp+P7776lYsSLTpk3j5s2bHDp0iNdff11XbtGiRZw6dSrTR3b89ttvHDt2jLfffjtb62WkdOnSGf4mhMiVss00AwGWqACxt2BxW7i03dBRCSGKsYYNG6JSqXTPGzVqxJUrVwgJCcHMzIwGDRroXitRogSVKlXiwoULgOba8vz580RGRhIcHExgYCCBgYEEBwfrKme015YnTpwgPj6eEiVKYGdnp3vcuHGDa9eu6fbh4+OTaeIP8N9//9G5c2d8fHywt7fX3WC4efMmAM2aNSMuLo7//vuP4OBgmjdvTosWLfSuJQsi+Zeaf2Mkff6FuY3mLqmh9p0NW7duxc7OjpSUFJKTk+ncuTNz5szh2rVrJCcn6w28Zm5uTv369XUH6OcPhAcOHNAdCKdMmQJoDoTaaVROnjyJoihUrFhRb/+JiYmUKFFC99zCwoIaNWrk5J3rPH78mEmTJrF161YiIiJISUkhISFBdwB/vllZq1atOH/+PO+//z7ff/89Fy5cICgoiNq1a+sl31ml7Uf2/EnveWPGjGHw4MGsXLmS1q1b0717d8qXL//S7datWzdL+2/UqJHu/y4uLnon1Lxy4cIFGjVqpPcemzRpQnx8PLdu3cLb2xsgzffo6emp13/uRQkJCVhZWektu3LlCjVr1sTa2hrQ3KDw9/fHxcUFV1dXXbnSpUtnOf6qVavqupM0bdqU7dv1E6WgoCAGDhzIwoULqVq1apa3mxlra2uePHmSJ9sSIo0S5WHwLljfH27sg7W9oO3XmnEBMjgWCSEKmUJ0bZldiqLorimer6AJDg5m8uTJeHl58c0333Ds2DESEhJ0lTNqtRpPT0+9LqRaz3e5fFlF0uPHj2nbti1t27Zl1apVuLm5cfPmTdq1a0dSUhIAjo6O1KxZk6CgIA4ePEjLli1p2rQpp06d4sqVK1y+fFl3wyA/SfJvjLTJv0z1V3ypVLlqel+QWrRowYIFCzA3N6dUqVK65uF37twB0iaxzx+gs3MgVKvVmJqacuLECUxNTfW2+XySbW1tnWHinFXjxo1jx44dfP/991SoUAFra2u6deumO4ADumZl+/fvJyAgACcnJ5o1a0ZwcLBek7Ls0ibaZcuWTff1iRMn0rt3b/766y+2b9/OhAkTWLduHV27ds10uzlpAaGl/TxNTEzSDHKTk1Fvn/8NPL/s+X0BaboaqFSqTAdwdHV11RujADRjUrzY+sDV1VXXXFArO83+t23bpnvf2psKWsHBwbz++uv88MMP9O/fP9PtZcfDhw+zdJNHiByzdoa+G2HbWDixDP75Ah5cgld/ALO0LXiEEIVMIbq2PHz4cJrnfn5++Pv7k5KSwpEjR3Tn8aioKC5fvqzrZqetoNm8eTPnzp2jadOm2Nvbk5yczE8//UTt2rWxt7cHoHbt2ty9exczMzPd+EU5cfHiRSIjI/n222/x8vIC4Pjx42nKBQYGsnfvXo4cOcLkyZNxcnLC39+fKVOm4O7uniddBV9Gmv0bI2n2LwoRW1tbKlSogI+Pj16yVqFCBSwsLHQDmYAmUTx+/LjewU17INy3bx+BgYEZHghr1apFamoq9+/f1zVd1z48PDzy9D3t37+fgQMH0rVrV6pXr46Hh0eaJtfaZmW//fabLtFv3rw5u3bt0mtSll2zZs3CwcGB1q1bZ1imYsWKfPjhh/zzzz+88cYbum4PFhYWuR4R/vkT7qNHj7h8+bKuK4Kbmxt3797VuwHwYnP4rMTg7+/PwYMH9bZz8OBB7O3ts1UD/6JatWpx8eJFve2WL1+eq1ev6p7HxMTw77//pvk+s9Ps38fHR/fbez7eoKAgXn31Vb799ltdP8G8cu7cOWrVqpWn2yyO1q9fzyuvvIKdnV2uLvSKLFNzeG0WtJsGKhP4byWsegOePHzpqkIIkVfCw8MZM2YMly5dYu3atcyZM4dRo0bh5+dH586dGTJkCP/++y+nT5+mb9++lC5dms6dO+vWDwwMZM2aNdSoUQMHBwfdDYHVq1frVc60bt2aRo0a0aVLF3bs2EFoaCgHDx7kiy++SDd5z4i3tzcWFhbMmTOH69evs2XLFr7++us05QIDA/n7779RqVT4+/vrlq1evbpAmvyDJP/GSZf8S82/KLxsbW354IMPGDduHH///TchISEMGTKEJ0+e8M477+jKZfVAWLFiRfr06UP//v3ZuHEjN27c4NixY3z33Xds27YtRzFeunQpTYKXlJREhQoV2LhxI6dOneL06dP07t07TY2ztlnZ8yeSwMBANm3apNekLDPR0dHcvXuXsLAwdu7cSbdu3VizZg0LFixId873hIQEhg8fTlBQEGFhYRw4cIBjx47pbpD4+voSHx/P7t27iYyMzFEz8cmTJ7N7927OnTvHwIEDcXV1pUuXLrr39+DBA6ZPn861a9eYN29emibvvr6+nDlzhkuXLhEZGZluy4ChQ4cSHh7OiBEjuHjxIps3b2bChAmMGTMGE5Ocn5ZatGjB48ePOX/+vG5Zr169uHfvnm6cienTp+Pm5sauXbv0Pp/SpUunuan04iMz2sR/5MiRvPnmm9y9e5e7d+/qjRZ89OhRKleuzO3bt3XLbt68yalTp7h58yapqam63+HzgwuGhoZy+/btTG8IiaxxdnZmxIgRTJ482dChGC+VChoNhV7rNC0RQ/fDotYQefXl6wohRB7o378/CQkJ1K9fn2HDhjFixAjdTfWlS5dSp04dXnvtNRo1aoSiKGzbtk2vAqpFixakpqbqJfrNmzcnNTVV79pSpVKxbds2mjVrxqBBg6hYsSJvvfUWoaGhlCxZMsvxurm5sWzZMjZs2IC/vz/ffvst33//fZpyzZo108WibemYXlz5ShF5JiYmRgGUmJiY3G1oz1RFmeCgKH+OzpvAhMgnAwYMUDp37pzh6wkJCcqIESMUV1dXxdLSUmnSpIly9OhRvTLR0dGKqamp0q1bN92yP/74QwGUuXPn6pVNSkpSvvrqK8XX11cxNzdXPDw8lK5duypnzpxRFEVRli5dqjg6Or407hs3bihAuo8bN24oN27cUFq0aKFYW1srXl5eyty5c5XmzZsro0aN0tvOm2++qZiamur+5tVqteLi4qLUrVv3pTE8v08rKyulfPnyyoABA5QTJ07olXv+PSUmJipvvfWW4uXlpVhYWCilSpVShg8friQkJOjKv//++0qJEiUUQJkwYYKiKIri4+OjzJw5M93P4L///lMURVH27t2rAMqff/6pVK1aVbGwsFDq1aunnDp1Sm+9BQsWKF5eXoqtra3Sv39/5ZtvvlF8fHx0r9+/f19p06aNYmdnpwDK3r170+xLURQlKChIqVevnmJhYaF4eHgon3zyiZKcnKx7Pb3Pu3PnzsqAAQMy/Vzfeust5dNPP9Vbtm3bNqVKlSqKi4uLUqlSJeXy5ctK3759FTc3NyU8PDzT7WXVgAED0v09NW/eXFdG+xnfuHHjpevt3btXV2bq1KlKu3btchRXnp2XipgNGzbo/W6zo1h9pnfPKcoP1TTXJNO8FOXaXkNHJIQo4tI7/4uXy+q5SaUo2Zx4UWQoNjYWR0dHYmJi9KaayraDczR97Wr0hDd+ybsAhRCiiDt79iytW7fm6tWruj59hVliYiJ+fn6sXbtWb/DMrMqz81IemTZtGidPnuTEiRPcuHEDHx+fTGcxWLt2Ld9//z0hISHY2trSpk0bvv32W3x8fHIVx2+//cbYsWNzNIOCsX2m+S7+AazrDbeOgsoUXv0e6g56+XripRRFITEl7TgmpiYqzE2lca4ongIDA6lZsyazZs0ydCiFSlbPTTLgnzGSPv9CCJEj1atXZ/r06YSGhlK9enVDh5NrYWFhfP755zlK/I3RZ599houLC7Vr1yY6OjrTsnPnzmXEiBE0adKEmTNnEhkZyaxZs9i3bx/Hjh3Tm9YxMTEx08Enra2t0wwUKrLIzg0G/AlbhsPZDbD1Q4i8Am2ngIl8pjlx7UE8m/67zR//3ebWo4Q0r5uaqGhRyZ3eDbxoXtEdUxOZcUEIkTck+TdGMtWfEELk2IABAwwdQp6pWLFimuktC7Nr165Rrlw5QDNuxvNjGzwvKiqK8ePHU7t2bYKCgjAz01yutG/fnvr16/PVV1+xaNEiXfkBAwbw66+/ZrjfvXv3FsgUSkWWuRW8sRBcK8HeKXB4PkRdgzcXgVUxaP2QByLjE9l6OoI//rvN6VsxmZZNVSvsunCPXRfuUdrJmp71vOhR1wsPR6tM1xOiKEhv2j2RdyT5N0Yy1Z8QQogiSJv4v8zmzZuJj49n5MiRusQfoG7dujRr1oz169czf/583TSO69atY926dfkSs3hGpYLm46BEedj0AVzZAUvaaQYGdM5dN4yiLO5pMlO3XWT98XBS1ZqetqYmKppXdKNLrdI093PDzFS/Zj8iOoF1x8L5/eQtbkcn8MPOy8zdc5XJnavyVn1vQ7wNIUQRIcm/MZJm/0IIIYqxo0ePAujmcX5e48aNCQ4O5uLFi9SoUSNb201NTSU5OZnk5GQUReHp06eoVCosLS3zJO5iodobmmR/bS+4HwILW8Jba8C7gaEjMzqHrkUxdsNpbkdrmvbXKONI11qleT2gFK52Gf/m/Era8+Vr/oxrV4m/z91l5eEwToQ94tONZ7lyP57POlaRrgBCiByR0USMka7ZvyT/Qgghih/tdIhlypRJ85p22a1bt7K93ZUrV2JtbU3v3r25efMm1tbWVKpUKdN1EhMTiY2N1XsUe6XrwJA94FEdnkTC8tfgzHpDR2U0nianMunP8/RaeJjb0QmUcbZm7ZCGbBn+Cm83KZtp4v88K3NTutQqzW/vN2JMG033n8X/3mDw8mPEPc14jAshhMiIJP/GyFKb/McZNg4hhBDCAJ48eQKQbo28lZWVXpnsGDhwIIqi6D1eNuL/tGnTcHR01D28vLyyvd8iybEMvP03VHoVUpNg4xDY8w2o045eX5ycCo+m4+z9LD0QCkCv+t78PboZjcqXyPE2VSoVI1v5Ma93bazMTdh76QFvLjhI+MPs/w0IIYo3Sf6NkTT7F0IIUYzZ2NgAmlr3FyUkJOiVyW/jx48nJiZG9wgPDy+Q/RYKlnbQcxU0GaV5vm86/PY2JBW/pDQlVc0P/1zizQUHuf7gMe72lix9ux7T3qiOnWXe9LJ9tYYn699rREkHSy7fi6fv4iPESgsAIUQ2SPJvjLTJf2oSpCQZNhYhhBCigJUuXRpIv2l/Zl0C8oOlpSUODg6sXLmShg0b0qpVqwLZb6FhYgJtJkPn+WBiDiGbYFlHiLtr6MgKTFKKmlHrTjF7z1VS1QqdAkrxz4fNaFHJPc/3VaOME5uHvUJpJ2vCop4wbsNpFEXJ8/0IIYomSf6NkbbPP8h0f0IIIYqdevXqAXDw4ME0rx08eBA7OzsqV65coDENGzaMkJAQjh07VqD7LTRq9YH+m8HaGSL+0wwEeOe0oaPKd0+TU3l/1Qn+OnsHc1MVP75Vk9m9auFkY5Fv+/RwtGJ+n9qYm6rYcf4ei/+9kW/7EkIULZL8GyNTczB91s9Rmv4LIYQoZjp37oyNjQ2zZ88mJSVFt/z48ePs27ePHj166Kb5E0bEt4lmIEDXihB7G5a0hwtbDR1VvnmcmMKgZcfYc/E+lmYmLOxfl841SxfIvgO8nPjqNX8Apm2/yLHQhwWyXyFE4WaUyf/atWupU6cO1tbWuLq60qtXL8LCwrK07vr163n77bepUaMGZmZmqFSqDAfzCQ4OZtiwYVSvXh17e3vc3Nxo0qQJa9euNXwTKun3L4QQoohZuXIlU6ZMYcqUKTx48ICYmBjd87lz5+rKubq6MnXqVE6ePElgYCA///wz33zzDe3bt6dkyZJMnjy5wGOfN28e/v7+ulYJIgMu5eCdnVCuBSQ/gV/7wr+zwNDXVXks9mky/Zcc5eC1KGwtTFk+qD6B+dDMPzN9G/rQKaAUqWqF4WtOEhmfdowMIYR4nkoxeJarb+7cuYwYMYImTZrQt29fIiMjmTVrFpaWlhw7doxSpUplun5gYCBHjhwhICCA6OhoLl26xI0bN/D19U1TtmHDhty8eZOuXbsSEBDA48eP+fXXXzly5AiDBw9m4cKF2Yo9NjYWR0dHYmJicHBwyNa6acysDjE3YfAeKFMnd9sSQghRLOXpeSkPBAYGEhwcnO5rPj4+aW7Wr169mhkzZnDhwgVsbGxo06YN06ZNo2zZsgUQbfqM7TM1Wqkp8PcncGyR5nnNPvDaLDAr/C02Hj1Oov+So5y9HYODlRnLBtWntrezQWJ5nJhC53kHuHo/nmYV3Vj+dj1UKpVBYhFCGE5Wz01GlfxHRUXh6+tLxYoVOXLkCGZmmtFRjx8/Tv369Rk0aBCLFi3KdBs3b96kVKlSmJmZMXz4cObNm5dh8h8UFMQrr7yi2w+AWq0mMDCQ/fv3c+7cOapWrZrl+PP0gmB+I7gfouk/Vy4wd9sSQghRLEmimvfkM82mI79obgIoavBpAj1Wgm3Op70ztPtxT+m36CiX7sXhYmvBynfqU7WUo0FjunIvjlfn/EtSiprFA+rSqkpJg8YjhCh4WT03GVWz/82bNxMfH8/IkSP1EvK6devSrFkz1q9fT1JS5qPfe3t7662bmcDAwDRlTUxM6NatGwBnz57N5jvIQ9LsXwghhDAa0uw/hxq8C703gIU9hB2ARS3hwSVDR5UjEdEJ9Pz5MJfuxeFub8n69xoaPPEH8Ctpz9tNfAGYuu0CKalqwwYkhDBaRpX8Hz16FIDGjRunea1x48bExcVx8eLFfI9DO42Qu3vmfbcSExOJjY3Ve+QZSf6FEEIIoyGj/eeCX2sYvBOcfOBRKCxqA1d3GzqqbIl5kkzfxUe4EfmY0k7WbHi/ERXc7Q0dls6wFhVwtjHn2oPHrDsWbuhwhBBGKmtV5AUks7l7tctu3bpFjRo18jWGn3/+mXLlytG0adNMy06bNo1JkyblTyDa6f4S4/Jn+4VA0KX7HLwWlWkZSzMT+jX0wd3BqoCiEkIIIUS2uVfRzASwrg+EH4bV3aHDd1B/iKEje6mkFDXvrzrB9QeP8XS0Yv37jSjtZG3osPQ4WJkzunVFJmw5z6xdl+lcsxT2VuaGDksIYWSMKvl/8uQJAJaWlmles7Ky0iuTX/vv2rUr8fHxbN68GXPzzA+a48ePZ8yYMbrnsbGxeHl55U0w2uS/mNb8P3qcxLsrT5CU8vKmazciHzO3d+0CiEoIIURxNW/ePObNm0dqaqqhQym8bF1hwBb4cxScXgvbxkLkFWg3FUyN6pJUR1EUvtx0jkPXNaP6Lx5Qz+gSf63eDbxZdjCUG5GP+Tn4OmPbVTJ0SEIII2NUR1obGxtA05ze2lr/wJqQkKBXJq89ffqUzp07c/z4cZYtW0bz5s1fuo6lpWW6NyryRDFv9r/51G2SUtR4uVjTsZpnumWeJqey/FAYf5+7y/24p7jbS+2/EEKI/DFs2DCGDRumG1RJ5JCZJXRZAK5+sHsyHP0Zoq5C96VgZXyf68/7rvPr8XBMVDCndy38SxnvII/mpiZ82qEy7608wcL91+ndwJtSRnqjQghhGEaV/JcuXRrQNO338/PTey2zLgG59fTpU7p06cLu3bv5+eef6d+/f57vI9t0yX+8YeMwkA0nbgEwqElZ3m6S8ZROZ2/HcPJmNL8eDWdEK78MywkhhBDCSKhU0PQjKFEBNr4H13bD4rbQax24GG4axxf9fe4O327XjDX11Wv+tKxs/KPot/UvSX1fF46GPmTmzsv8r3uAoUMSQhgRoxrwTzuC7sGDB9O8dvDgQezs7KhcuXKe7jMxMZGuXbvyzz//sGDBAoYMMZK+Z5bPBpEphsl/SEQs5yNisTA1oUvN0pmW7dfIB4A1R2/K6LZCCCFEYeLfGQZtB3tPeHARFrWCsEOGjgqA0+HRjP71FAADGvkwMJOKCGOiUqn4pIPmWnnzqQgexCUaOCIhhDExquS/c+fO2NjYMHv2bFJSUnTLjx8/zr59++jRowcWFhYA3Llzh4sXL+ZqDIDExES6dOnCjh07mD9/Pu+9916u30OeKcbN/jec0IxS29rfHWdbi0zLdqjmiYutBXdinrL74v2CCE8IIUQxJFP95ZNStTQDAXoGwJMoWNEJTq01aEi3oxMYvOI4T5PVBFZy48vX/A0aT3bV8XGmppcTSalq1h69aehwhBBGxKia/bu6ujJ16lRGjx5NYGAg/fr1IzIykpkzZ1KyZEkmT56sKzt+/HiWL1/O3r17CQwM1C3ft28f+/btAzQ3DQDmzp2Lk5MTACNGjND11evTpw9///03rVu3xs7OjlWrVunFU6NGjXydWSBTxTT5T0pRs+k/TReP7nVePniilbkpPep68VPwNVYdDqNdVY/8DlEIIUQxJH3+85FDKXh7O/zxHlz4Eza9D5GXoeWXYFKw9VRxT5N5Z9kxHsQlUtnDnjm9amFmalR1ZVnydhNfRq07xarDYbzfvDwWZoXvPQgh8p5RJf8Ao0aNwtXVlRkzZjB69GhsbGxo06YN06ZN040JkJk9e/akmX5vxowZuv/37dtXd9LW3hzYtWsXu3btSrOtCRMmGDD5L55T/e2+cI9HT5Jxt7ekqZ9rltbp08Cbn/ddY/+VSG5EPqasq20+RymEEEKIPGVhC91XwN4psH8G/PsDRF2Brj//f4VIPktJVTNi7X9cvBuHq50liwfWK7TT5XWo5skU+wvcj0tk+7k7dH5JN0ohRPFglLcB+/Tpw8mTJ0lISCAqKop169ZRtqx+X6tly5ahKIperT/AxIkTURQlw4evr6+ubGhoaKZlJ06cmP9vNiPFdKo/7UB/b9Quk+U77V4uNrSo5A7A6sNh+RabEEIIIfKRiQm0+kqT8JtaaFoBLO0AsREFsvspf10g6NIDrMxNWDygrtFO6ZcVFmYm9G2gGRdp2cFQwwYjhDAaRpn8C4pls//7sU8JuqTpt9+9bvZmdejXUHOC23DiFglJMgezEEIIUWgFvAX9t4BNCbhzGha2hIj/8nWXvx67qUuSZ/aoSYCXU77uryD0buCNuamK/25Gcyo82tDhCCGMgCT/xspSW/NffEb73/jfbdQK1PZ2orybXbbWbVbRDS8Xa2ISkvnzTMHUEAghhCg+ZMC/AubTCAbvBrfKEHcHlnSAkC35squLd2P5avN5AD5qU5EO1T3zZT8Fzc3ektdrlAJgudT+CyGQ5N94WRSv5F9RFDYc14zy36Puywf6e5GpiYo+z5q3rZKm/0IIIfLYsGHDCAkJ4dixY4YOpfhwKQvv/AMVWkNKAqzvB/u+B0XJs108Tkxh6OqTJKaoaV7RjWEtKuTZto3BgMa+AGw9E8H92KeGDUYIYXCS/Bur55v95+FJzlj9Fx7NtQePsTI34dUaObvj3qOuFxZmJpy5FcNpad4mhBBCFH5WjtDrV2jwvub5nq/hj/chJffz1yuKwhebznH9wWM8HKz4oUcAJiaqXG/XmAR4OVHL24nkVIVNp24bOhwhhIFJ8m+stMm/OiVPTnDGbsNxzUB/Hat55nhkXRdbC1571lRvpdT+CyGEEEWDqRl0+A46fg8qUzizDpZ3gseRudrsr8fC+eO/25iaqJjTuxYl7CzzKGDj8kZtzThKW05Lt0ghijtJ/o2VxXN93ov4oH8JSalsfXZC6pbNgf5e1LeRpun/n6cjePQ4KdexCSGEEMJI1B8CfX8DS0cIP6wZCPD+hRxt6sKdWCZsedbPv21F6vm65GWkRqVjNQ9MTVScux3L9QfFozupECJ9kvwbKxNTMHs2xUwR7/e/4/xd4hJTKONsTcOyJXK1rVpeTvh7OpCYoua3Z9MGCiGEEKKIKN8SBu8E57IQHQaL28KVXdnaRHxiCsOe9fMPrOTG+83K51OwxqGEnSWvVHAFpPZfiOJOkn9jVkym+1v/bKC/bnXK5LqvnUqlot+z2v9VR8JQq4v+eAlCCCFEseJWCYbsAZ8mkBgLa7rDkZ+zNEaSoih8/sdZrkdq+/nXLHL9/NPTKUAz6v+W0xEoxWAsKSFE+iT5N2bFYLq/8IdPOHgtCoA3a+euyb9W55qlsLc0IyzqCfuv5q4/oBBCCAEy1Z/RsXGBfpugZl9Q1LD9Y/jrI0hNznS1X4+Fs/lUhK6fv4utRcHEa2Btq5bE0syE6w8ecz4i1tDhCCEMRJJ/Y1YMpvv7/aSmaX6TCiXwcrHJk23aWJjxZh3NjYSVh2TgPyGEELknU/0ZITML6DwXWk8CVHB8MazuDgnR6RZ/vp//2LaVinQ//xfZW5nTsrI7oBkXSQhRPEnyb8yKeLN/tVrR9cvvXscrT7fdt6Gm6f+ei/e49ehJnm5bCCGEEEZCpYJXRkPPVWBuA9f3wuI2EHVNr9jz/fxbVHLjvWblDBOvAWmb/v95OkK6RQpRTEnyb8y0Nf+JRbPm//CNKG49SsDe0ox2VT3ydNsV3O1oXL4EagXWHr2Zp9sWQgghhJGp8hoM+hscSkPkZVjUCkL/BTT9/D/bqOnn7+loxYxi0s//RS0qu2NnaUZEzFNO3Hxk6HCEEAYgyb8x09X8F83k/7fjmlr/1wJKYW1hmufb7/es9v/XY+Gkyh1uIYQQomjzDNAMBFiqNiQ8ghVd4L9VrDsWzpbTz/r59yo+/fxfZGVuStuqJQFp+i9EcSXJvzHT9fkves3+454ms+3cHQC6182bgf5e1Nq/JPaWZkTGJ3HhjgxuI4QQQhR59h4w8C/w7wLqZNg8jLitn6FCzbh2lahbjPr5p+e1Gp4A7Aq5J6P+C1EMSfJvzIpwzf8/5+/xNFlNeTdbank55cs+zE1NqOPrDMDh61H5sg8hhBBCGBkLG+i2lJRXxgLwrsmf/O48n3cbuBs4MMNrVM4VSzMTImKecvle0bu+FEJkTpJ/Y2ZZdGv+j4dp+pq19i+JSpV//e4alC0BwNEbD/NtH0IIIYQwMiYmTHnyBqOShpKIObUTDmKytAPE3DJ0ZAZlbWFKo/Kaa6O9l+4bOBohREGT5N+YFeGa/9Ph0QDULOOUr/tpUE7TvO9o6EMZ2VYIIYQoJoIu3WfZwVA2q1/hfJvVYOsG987CwpZw+4ShwzOoFpU0LSD2XpTkX4jiRpJ/Y1ZE+/w/TU7l0r04AALyqcm/VvXSjlibmxL9JJnL9+PydV9CCCGKrnnz5uHv70+9evUMHYp4iaj4RMZuOAPAwMa+1G7SDgbvBnd/iL8HSzvCuY0GjtJwtMn/8bBHxD5NNnA0QoiCJMm/MSuiU/2dj4ghVa3gameJp6NVvu7L3NSEOj6afv/S9F8IIURODRs2jJCQEI4dO2boUEQmFEXhk9/PEBmfSMWSdnzaobLmBWcfGLQD/NpBylP47W0Ing7FcNA77xI2lHOzJVWt8O+VSEOHI4QoQJL8GzNds/+iVfN/OjwGgJpejvna31+rQVlN0/8j1yX5F0IIIYqyNUdvsuvCfSxMTfjxrVpYmT83lbCVA/RaCw2HaZ7v/QY2DoHkp4YJ1oBaStN/IYolSf6Nma7Zf9Gq+T99KxqAGvnc31+rvjb5v/FQprURQgghiqir9+P5emsIAB+3r0QVT4e0hUxMof1UeG0WmJjB2Q2w/HWIL15JcIvKmuQ/6PIDGRNJiGJEkn9jVkQH/DtzS1PzX6OMY4HsL8DLCQszEyLjE7keWbRaUQghhBACklLUjP71P54mq3mlgiuDmpTNfIW6b0Pf38HKEW4d1QwEeO98wQRrBOr6OmNrYcqDuERC7sQaOhwhRAGR5N+YFcGp/mKeJHPjWQIeUEA1/1bmptR6NrCgNP0XQgghip6Zuy5z7nYsTjbmzOgRgIlJFroVlgvUDAToUh5iwmFxW7i8I99jNQaWZqY0qeAKSNN/IYoTSf6NWREc7f/M7WgAvF1scLa1KLD9avv9H70RVWD7FEIIIUT+O3w9ip+CrwHw7RvVKemQjcGEXf1g8C7wbappabn2LTg0r1gMBKht+r/nkiT/QhQXkvwbs+eb/ReRk5C2yX9+T/H3ogblSgDS718IIYqzxMREhgwZQrly5bCzs8PPz49Zs2YZOiyRCzEJyYz59RSKAj3qlqF9Nc/sb8TGBfpuhNr9QVHDjs9g62hILdrT4DWv6AZors3iE1MMHI0QoiBI8m/MtDX/ihqSEwwbSx45FR4NQEAB9ffXquXthJmJijsxT7n1qGh8lkIIIbInJSUFDw8P/vnnH+Li4vj111/55ptv+PXXXw0dmsgBRVH4YtM5ImKe4lvChgmvV835xsws4PXZ0PYbQAUnlsGqNyDhUV6Fa3RKOVnj5WJNqlrheKh0ixSiOJDk35iZ2/z//4tI0/8zz0b6L+iafxsLM90Ag4evS9N/IYQojmxtbfn666+pUKECKpWK2rVr06FDBw4cOGDo0EQObDp1mz9PR2BqomJmz5rYWprlboMqFTQerpkO0MIObuyDRa0h6lreBGyEGpT9/5aRQoiizyiT/7Vr11KnTh2sra1xdXWlV69ehIWFZWnd9evX8/bbb1OjRg3MzMxQqVSEhoZmWD4pKYnJkydTvnx5LC0t8fHx4ZNPPuHJkyd59G5ywcQEzIvOiP93Y55yLzYRExVULZXO9Dv57Pmm/0IIIQxj2rRpdO/enXLlyqFSqfD19c20fG6uCV4mJSWFQ4cOUaNGjTzZnig44Q+f8NUmzej8o1r5UcvbOe82XqkDDNoBjl4QdVUzE8CNfXm3fSOiHRPpiFSMCFEsGF3yP3fuXHr37o21tTUzZ85k9OjR7Ny5k8aNGxMREfHS9efPn8+6deuwsbGhQoUKLy3fu3dvJkyYQJMmTZg3bx6dOnVixowZvP7666jV6rx4S7mjG/G/8Cf/p5/V+lcsaY+NRS7vzudAfd2gf5L8CyGEoXz22Wfs2bOH8uXL4+ycecKWnWuCxMRE4uPjM3ykpqam2f7w4cNxcnKif//+efoeRf5KSVXz4a+niEtMoa6PM0MDy+f9TjyqaWYCKF0XnkbDyq5wYnne78fAGj6rGDlzK4YnSdLvX4iiruAzsExERUUxfvx4ateuTVBQEGZmmvDat29P/fr1+eqrr1i0aFGm21ixYgWlSpXCzMyM4cOHc+nSpQzL7tixg99//50RI0Ywe/Zs3XJfX1/Gjh3LmjVr6Nu3b968uZzSDfpX+Jv965r8F9AUfy+q6+OMiQpuPnzCnZgEPB2tDRKHEEIUZ9euXaNcuXIAVKtWjfj49G9uZ/eaYMCAAZn23d+7dy+BgYG652PGjOHgwYPs2bMHC4uCm31G5N6CoGscD3uEnaUZM3vWxMw0n+qy7EvCwK2weRic+x3+HAmRl6HNZDAxzZ99FjAvFxtKO1lzOzqBE2GPaOrnZuiQhBD5yKhq/jdv3kx8fDwjR47UneQB6tatS7NmzVi/fj1JSUmZbsPb21tv3cysXr0agI8++khv+dChQ7G2tmbVqlXZfAf5wKLoNPs/Ha4Z6b+GV8EO9qdlb2VOtdKafUvtvxBCGIY28X+Z7F4TrFu3DkVRMnw8n/iPHj2af/75h927d+Pq6ppn703kv1Ph0czafQWAyZ2r4uVi85I1csncGt5cDIHjNc8PzYV1vSExLn/3W4D+v+m/XBsJUdQZVfJ/9OhRABo3bpzmtcaNGxMXF8fFixfzdH+lSpXCx8dHb7m1tTU1a9bUxZORxMREYmNj9R55Tjvif2LhTv4VRTF4zT9AfV/NCe6wnOCEEMKo5dc1wciRI9m1axd79uzBze3ltZwFcq4XWfI4MYXR6/4jVa3wWg1PutYqXTA7Vqkg8FPotgTMrODy37C4HUTfLJj957MG5Z4l/zek378QRZ1RJf+3b98GoEyZMmle0y67detWnu4vvX1p9/fo0aNMB/6bNm0ajo6OuoeXl1eexaajTf4LebP/0KgnxD5NwdLMhEoe9gaL4/8H/ZMTnBBCGLP8uCYICwtjzpw5XL16lXLlymFnZ4ednR0dOnTIcJ0COdeLLJn8ZwihUU8o5WjFN12qo1KpCjaAam/CwL/A1h3un9cMBBh+rGBjyAfaEf9PhUeTkJR2bAwhRNFhVMm/NtG2tLRM85qVlZVembzaX3r7yur+xo8fT0xMjO4RHh6eZ7HpFJE+/6fDowHwL+WAeX71zcuCer7OqFRw/cFjHsQlGiwOIYQQmcuPawIfHx8UReHp06d6gwFu3749w3UK5FwvXurvc3f59Xg4KhX80LMmjjbmhgmkTF0YsgdKVoPHD2DZq3D2N8PEkkd8Stjg4WBFcqrCfzcfGTocIUQ+Mqrk38ZG028rMTFtUpaQkKBXJq/2l96+sro/S0tLHBwc9B55zqJojPZ/2gia/AM42VhQqaSm5YH0+xdCCONV0NcEGSmQc73I1L3Yp3y68QwA7zUrrxuh3mCcvGDQ31CxA6Qmwu/vwN6poCiGjSuHVCqVrun/Ybk2EqJIM6rkv3RpTd+t9JrxZdb8Lzf7y6jJ4O3bt3F2di6QC4tMFZGp/rQ1/wEGGuzvedqLhqPS9F8IIYxWQV8TvMy8efPw9/enXr16BbZPAWq1wkfrTxP9JJlqpR0Y06aioUPSsLSHt1ZD4xGa58HfwW+DIDnBsHHlkLbp/+Hrcm0kRFFmVMm/9oR68ODBNK8dPHgQOzs7KleunKf7i4iIICwsTG95QkICp06dMo4TfBFo9p+cquZ8hGaAJEPX/APU145qK3e3hRDCaBX0NcHLDBs2jJCQEI4dK/x9vAuTJQdu8O/VSKzMTZjVsxYWZkZ06WpiCm2nQKc5YGIG5zdqugHE3TN0ZNmmvTY6HR5NcqrawNEIIfKLER1BoXPnztjY2DB79mxSUlJ0y48fP86+ffvo0aOHbi7eO3fucPHixVyNAdC7d28AZsyYobd8wYIFJCQk0Ldv3xxvO88Ugan+Lt+LIzFFjb2VGb4lbA0dju4Ed/FuHNFPMp86UgghhGFk55qgIEjNf8G7cCeW6X9fAuCLV/2p4G5n4IgyULs/9NsE1s5w+4RmIMC7Zw0dVbaUc7XF3sqMxBQ1l+4WnWkMhRD6zF5epOC4uroydepURo8eTWBgIP369SMyMpKZM2dSsmRJJk+erCs7fvx4li9fzt69e/Xm7t23bx/79u0DNBcIAHPnzsXJyQmAESNG4OioaXreoUMHunTpwpw5c4iJiaFZs2acPn2a+fPnExgYSJ8+fQrmjWfG4tnI+IV4qr/T4TGAptbfxKSAR+ZNh6udJRXc7bh6P56jNx7StqqHoUMSQohiY+XKlboWdw8ePCApKYkpU6YA4OTkxPDhw4HsXRMUhGHDhjFs2DBiY2N11xEi/zxNTmX0ulMkpappXcWdPg28DR1S5so2hcG7YU0PiLqqmQrwzUVQuaOhI8sSExMVNb2c2H8lkv/Co6lWWn7jQhRFRpX8A4waNQpXV1dmzJjB6NGjsbGxoU2bNkybNk3X/y8ze/bsYdKkSXrLnq/Z79u3r95Je926dUybNo0VK1awbt06SpYsyZgxY5gwYQImJkbQMKIINPs/82ywvxpljOdEUr+sC1fvx3NEkn8hhChQixcvJjg4WG/Zl19+CWhG49cm/5D7awJReH27/SKX7sXhamfJt2/WKPhp/XKiRHkYvAvWD4AbwbCuN7SZrBkXoBDEr03+T92Mpl9DH0OHI4TIBypFKaRDkxohbW1ATExM3o0GfH4TbBgA3o1hUMZTERmz9rP2cfFuHD/1rUP7asaRaG8+dZtR605RvbQjf454xdDhCCFEvsiX81IxNW/ePObNm0dqaiqXL1+WzzQfBV9+wIAlRwFY+nY9WlRyN3BE2ZSaDNvGwYmlmue1+sGrP4BZwXVTyYndF+7xzvLjVHC3Y9eY5oYORwiRDVk93xtB1bbIlG6qv8LZ/+pJUgpX7mu6LNT0cjJsMM/Rjmp7PiKG2KfJBo5GCCGEsZMB/wpGVHwiYzecBmBAI5/Cl/gDmJrDazOh/begMoH/VsLKrvDEuAcaDnh2nXbtQbxcGwlRREnyb+x0U/0Vzmb/5yNiSVUruNtb4uFoZehwdDwcrfApYYNagRNhjwwdjhBCCFHsKYrCJ7+f5UFcIn7udozvWMXQIeWcSgUNP4Bev2rGbwr7Fxa1ggeXDR1ZhlztLCnjbI2iwJln4zUJIYoWSf6NXSHv8386PBr4/7vJxqSBdsq/68Z9J14IIYQoDtYeDWfXhXtYmJrw41u1sDI3NXRIuVexLbzzDzh6w8PrsKg1XNtr6KgypG2leSpcKkaEKIok+Td2hTz5P3NLO9K/8Qz2p1X/WdP/IzeiDByJEEIIYydT/eWv6w/i+XprCADj2lXCv1QRGk+hpD8M2QNeDSAxBla9CccWGzqqdP1/8h9t0DiEEPlDkn9jp53qLyke1GrDxpIDp3Uj/TsZNI70aGv+z96K4UlSyktKCyGEKM6kz3/+SUpRM2rdKRKSU2lSoQTvvFLW0CHlPTs36L8FqvcAJRX+GgPbPwV1qqEj01PL2wmAU+ExyJjgQhQ9kvwbO23NP0DyE8PFkQPRT5IIi9LEbEzT/Gl5udhQ2smaFLXCybBoQ4cjhBBCFEuzdl3m7O0YHK3NmdG9JiYmxj8tXo6YW8Ebv0DLLzTPjyyANT3haaxh43pO1VKOmJmoiIxP5HZ0gqHDEULkMUn+jZ25tWakWCh0Tf9PP2vy71vCBicb45zepv6z2v+jodLvXwghhChoR65HsSD4GgDfvlHdqAYHzhcqFTQbB92Xg5k1XN0Ji9vCo1BDRwaAlbkplT01rU6l6b8QRY8k/8ZOpXpuur94w8aSTWeMeLA/LW3ftjPPuicIIYQQ6ZE+/3kvJiGZMetPoyjQvU4ZOlT3NHRIBadqF3h7G9h5wIMLsLAV3Dxi6KiA5/r934w2aBxCiLwnyX9hoBv0r3Al/9qaf2Ps76+l7Y5w5pb0bRNCCJEx6fOf977afI7b0Qn4lLBhQqeqhg6n4JWurRkI0KM6PImE5a/BmfWGjoqaXs7A/w/aLIQoOiT5LwwK4Yj/iqLoBvur6WV8/f21qng6YG6q4uHjJG49kr5tQgghREHY9N9tNp+KwNRExayeNbGzNDN0SIbhWBoG7YDKr0FqEmwcAru/Nuggz9VKa2ZaCLkTi1otFSNCFCWS/BcG2uQ/sfDU/N+NfcqDuERMTVT4expv8m9lbkplD81JTu5wCyGEEPkv/OETvtx0DoCRLf2o5e1s4IgMzMIWeqyEVz7UPN//Pfw2EJIMM9BzeTc7LMxMiE9MkYoRIYoYSf4Lg+en+yskTj/r71+xpD3WFqaGDeYl/r/pf7RhAxFCCCGKuFS1wpj1p4hLTKGOjzPDWpQ3dEjGwcQEWk+EzvPBxBxCNsOyjhB7p8BDMTc1oVJJzbXn+QipGBGiKJHkvzAohM3+tf39jbnJv1bAszEJTkvyL4QQIgMy4F/eWBB0lWOhj7CzNGNmj5qYmcqlqJ5afaD/ZrB2gYj/YGFLuHO6wMPw9/z/pv9CiKJDjriFQSFM/rW16MY82J9WjWc3KM7dlr5tQggh0icD/uXewWuR/LDzMgCTOlXFu4SNgSMyUr5NYMhucK0EcRGwpD1c+LNAQ/Av9Sz5j5DkX4iiRJL/wsBSO9VfnGHjyCJFUTh3W3OyqF7a+Gv+K7jZYW1uSnxiCtcjC0/XCiGEEKKwuBvzlJFr/0OtwBu1S/NG7dKGDsm4uZSDwTuhfEtIfgK/9oV/Z0IBzUykS/6l5l+IIkWS/8LAQpv8F46a/wdxicQkJGOiggrudoYO56XMTE10I9ueDpe+bUIIIUReSkpRM3T1CSLjk6ji6cA3XaqjUqkMHZbxs3KE3hug3hDN810TYdNQSEnM911X9tD0+b8T85SHj5PyfX9CiIIhyX9hUMia/V+6p2mh4Otqi5W5cQ/2p1VD+v0LIYQQ+eKbv0I4eTMaeyszfupb2+gHAjYqpmbw6vfQ4X+gMoHTa2BFF3gcla+7tbcyx/dZtwxp+i9E0SHJf2GgrfkvJFP9Xb6nibOiu72BI8k67Yj/p2W6PyGEECLPbPrvNssPhQEwq2dNfErYGjiiQqrBu9BnA1g6wM2DsKgl3L+Yr7v8/6b/cm0kRFEhyX9hoKv5LyTJ/11NzX9Fj8KT/Nf0cgLgQkQsSSlqwwYjhBDC6Mho/9l38W4s4zeeBWBEywq0qlLSwBEVchVawzs7wckHHoXC4jZwdVe+7U434r/U/AtRZEjyXxgUsj7/2mb/FUsaf39/LW8XG5xszElKVXPpbuEYWFEIIUTBkdH+syf2aTLvrzxBQnIqTf1cGd26oqFDKhrcK8OQPeDdCBJjYXUPOLowX3Ylg/4JUfRI8l8YFKKaf0VRuPIs+a9UsvDU/KtUKt3MBNLvXwghhMg5tVrho/WnCY16Qmkna358qxamJjLAX56xdYX+myGgFyipsG0sbBsHqSl5upuqpTTXRdcePOZpcmqeblsIYRiS/BcGloWn5v92dAKPk1IxN1Xh61q4+vUFPBv074wk/0IIIUSO/bTvGjtD7mFhasL8PrVxsbUwdEhFj5kldFkArSZonh/9Bdb0gKd51z/f3d6SErYWpKoVaRUpRBEhyX9hoGv2b/w1/1eeDfZXztUOc9PC9fPSDvp3Rgb9E0IIIXLkwNVIvt9xCYBJnasS8GxMHZEPVCpoOgZ6rgJzG7i2Gxa1gYc38mjzKmn6L0QRU7iys+KqEE31p+3v71eI+vtraS9QLt+L40lS3jadE0IIIYq6iOgERqz9D7UC3euU4a16XoYOqXio8jq8vR3sPSHyEixsCWEH82TTlZ8N3iw1/0IUDZL8FwaFaKq/y4Wwv79WSQcrSjpYolbg3G25wy2EEEJkVWJKKkNXn+Th4ySqlnLg6y7VUKmkn3+BKVVTMxCgZ01IeAjLO8GpNbnerN+z67kr9yX5F6IokOS/MNAm/ykJoDbuAVcu62r+C1/yD1BD+v0LIYQQ2TZl6wVOhUfjaG3Ogj51sDI3NXRIxY9DKU0LgCqdQJ0Mmz6AXRNBnfMpjCs+u567fM/4K6CEEC8nyX9hYPHcwHlG3PQ/Va1w9b7m5FDJo3Am/wFltCP+S79/IYQQIis2nrzFysNhqFQwq2dNvEvYGDqk4svCBrovh6ZjNc//nQnr++X4+rGCu6YC6kFcItFPkvIqSiGEgRhl8r927Vrq1KmDtbU1rq6u9OrVi7CwsCyvf+LECdq3b4+joyP29vYEBgayb9++dMuGhoYyZMgQypcvj7W1NWXKlKFLly4cPJg3faXyhJklmJhp/m/Eg/6FP3zC02Q1lmYmeLsUzhO/tt+/1PwLIYR43rx58/D396devXqGDsWohETE8tkfZwEY2dKPFpXdDRyRwMQEWn0JXX8GUwu4uBWWtIfYiGxvys7SjNJO1oDU/gtRFBhd8j937lx69+6NtbU1M2fOZPTo0ezcuZPGjRsTEfHyg9axY8do2rQpFy9e5Msvv2Tq1KlERUXRqlUrdu3apVf29u3b1K1bl99++40ePXowd+5chgwZwtGjR2nWrBk7d+7Mr7eZPSpVoRj0T9vkv4K7XaGdz7dGaScAwqKeyB1uIYQQOsOGDSMkJIRjx44ZOhSjEZOQzAerT/A0WU3zim6MauVn6JDE8wLeggF/gk0JuHsGfmkBt09mezPaQZyl378QhZ+ZoQN4XlRUFOPHj6d27doEBQVhZqYJr3379tSvX5+vvvqKRYsWZbqNkSNHYmJiwr59+/D29gagf//+VK1alaFDh3Lp0iXdADQrVqwgKiqKTZs20blzZ902OnfuTK1atVi8eDFt2rTJp3ebTRZ2mrlbjbjmvzAP9qflaGOObwkbQqOecOZWDM0quhk6JCGEEMLoqNUKH60/RVjUE0o7WTOrZ01MCumN/yLNu6FmIMA1b8GDC7C0I3T9Cap2yfImKpa0J+jSA910zkKIwsuoav43b95MfHw8I0eO1CX+AHXr1qVZs2asX7+epKSMa2OvX7/O4cOH6d69uy7xB3B0dGTw4MFcuXKFI0eO6JbHxGj6dZcqVUpvO9rnNjZG1HRdW/NvxCP+a5uDFdbB/rRk0D8hhBAicwuCr7Hrwn0szEz4qW8dnG0tDB2SyIizL7zzD1Rooxk8esMA2Pc/UJQsre73rN+/tpJHCFF4GVXyf/ToUQAaN26c5rXGjRsTFxfHxYsXc7z+82UAWrduDWia8gUHB3P79m2OHDlC3759cXZ25sMPP8w03sTERGJjY/Ue+UY74n8haPZfycPOwJHkTg0Z9E8IIYTI0P4rD/j+n0sAfN25KtWfnTeFEbNygF7roMH7mud7psAf70FK4ktXlRH/hSg6jCr5v337NgBlypRJ85p22a1bt/Js/datWzNr1iyuXr1KYGAgZcqUoWHDhty+fZvDhw9TvXr1TOOdNm0ajo6OuoeXl9dL3mEu6Pr8G+eBNzlVzfUHmhsTfu6Fu+ZfBv0TQggh0nc7OoGRa/9DUaBnXS961vN++UrCOJiaQYfv4NUZoDKFM7/C8tch/kGmq2lH/I+MT+TRYxkPSYjCzKiS/ydPngBgaWmZ5jUrKyu9Mnm1vjbh/9///sfmzZv54YcfePToEe3atePGjRuZxjt+/HhiYmJ0j/Dw8EzL54qR1/yHRT0mKVWNrYWpblTYwqpqKQdMVHAvNpG7MU8NHY4QQghhFBJTUhm66gSPniRTvbQjkzpXNXRIIifqDYa+v4GlI4QfgUUt4V5IhsVtLc0o46wd8V+a/gtRmBlV8q/tY5+YmLYJUkJCgl6ZvFh/4cKFvPXWW0yfPp2xY8fSqVMnPvzwQ4KCgrhz5w4fffRRpvFaWlri4OCg98g3ltrk3zhr/rVNwSqUtC/0A/7YWJjpmridltp/IYQoMoYOHYqXlxcODg6ULl2a0aNHZzqWkNA36c8QTt+KwcnGnPl9amNlbmrokEROlW8Jg3eBc1mIvgmL28KVjGe50jX9v2+c16FCiKzJk+T/5MnsTxuSntKlSwPpN+3PrEl/TtefNm0aVapUoVq1anplK1asSK1atdi7d28230E+MvKp/i7d1Y70X7j7+2tp+/1L038hRHGXV+d4YzB8+HAuXrxIbGwsp06d4vTp00ydOtXQYRUKG46Hs+bITVQqmNWzJl4uRjQossgZt4qamQB8mkBSHKzpAYd/SncgQO10f1el5l+IQi1Pkv/evXvrRs5/3rlz57K1nXr16gFw8ODBNK8dPHgQOzs7KleunOP1ny8DmhsCycnJ6W4rOTmZlJSUrAef3yyMu+ZfO/drxUI+0r/W//f7l0H/hBDFW16d442Bv78/traam+kmJiaYmZlx5coVA0dl/M5HxPDFJs33PbpVRQIruRs4IpFnbFyg3yao1RcUNfz9Cfw1BlL1r4+14znJoH9CFG55kvwPHTqUPn366C3buXMnLVu2zNZ2OnfujI2NDbNnz9ZLvI8fP86+ffvo0aMHFhaaqWTu3LnDxYsX9frwly9fnvr167Nhwwa9/vexsbEsXryY8uXL07BhQ91yf39/Ll++zKFDh/TiOHnyJKdPn6Z+/frZij9faZN/I53qT1vzX2SSf910fzEoWZwKRwghiqK8OseDpsVd9+7dKVeuHCqVCl9f30zLr127ljp16mBtbY2rqyu9evUiLCws2/t93rfffou9vT2urq6cPHmSkSNH5mp7RV3Mk2TeX3WCxBQ1LSq5MaJlBUOHJPKamQV0mgttJgMqOL4EVneDhEe6IhWf1fxrK3uEEIVTniT/I0eOxMrKStd0bvHixfTt25d169Zlazuurq5MnTqVkydPEhgYyM8//8w333xD+/btKVmyJJMnT9aVHT9+PFWqVNGbug9g9uzZpKam0rRpU3744Qfmzp1LkyZNuHPnDvPnz0el+v/+6JMmTQKgbdu2jBs3joULF/LJJ58QGBiIiYkJX3/9dU4/krxnxM3+E1NSCY3S3IQpKsl/JQ97LMxMiElIJiwq40EmhRCiqMurczzAZ599xp49eyhfvjzOzs6Zlp07dy69e/fG2tqamTNnMnr0aHbu3Enjxo2JiIjQK5uYmEh8fHyGj9TUVF3ZTz/9lLi4OEJCQnj//fd1XQZFWmq1wuhf/yP8YQJeLtbM7Fmz0I/rIzKgUkGTUfDWGjC3hetBsKgNRF0Dnh/xP0lG/BeiEDPLzcobNmygUaNGlClThiVLllCvXj3Onz/PwYMH2bt3L/7+/tne5qhRo3B1dWXGjBmMHj0aGxsb2rRpw7Rp07J0gm7QoAH79u3j888/Z+LEiaSmplK3bl127dpFYGCgXtlOnTpx+PBhpk6dyoYNG4iIiMDR0ZFWrVrxxRdfUKdOnWzHn2+MeKq/6w8ek6pWcLAyo6RD2pkWCiNzUxP8PR04FR7N6VvR+LraGjokIYQoUPlxjr927RrlypUDoFq1asTHp39Oi4qKYvz48dSuXZugoCDMzDSXK+3bt6d+/fp89dVXLFq0SFd+wIAB/Prrrxnud+/evWmuAapUqUJAQAD9+vUzrjF+jMjcvVfZe+kBlmYmLOhTBycbC0OHJPJb5Y4w6G9Y+xZEXYFFraDnKmx8X6GUoxURMU+5HvmYOrbyWxCiMMpV8v+///2PM2fO4ObmRsOGDalbty5BQUEEBQXh5+eX4+326dMnTRPDFy1btoxly5al+1q9evX4559/srSvevXq8ccff2Q3xIJnxH3+tdO+VPKw12tZUdgFlHHkVHg0Z27F0Lmm1AwJIYqX/DjHaxP/l9m8eTPx8fGMHDlSl/gD1K1bl2bNmrF+/Xrmz5+v6wq4bt26HLVESE1N5fLly9lerzgIvvyAmbs0n82ULtWoVtrRwBGJAuNZQzMQ4NpeEHESVnSB12ZSzq2iJvl/EE8dn8xb7gghjFOumv0fPXqUuLg4Nm7cSIsWLbCwsMDJyYmqVavi5+dHjx498ipOoZvqz/ia/WuTf78i0uRfq8azfv+nw6MNGocQQhiCIc/x2i59jRs3TvNa48aNiYuL4+LFi9naZkxMDMuWLSM6OhpFUTh79ixff/01HTp0yJOYi5KbUU8Yte4/FAV61feme10vQ4ckCpq9B7y9Dap2BXUybBnO+4lLMUHNjUjjuxYVQmRNrmr+AczNzalXr57eKPrx8fEcP36c48eP53bzQsuI+/xfuqtpjVCpiCX/AV6aWo5zETGkpKoxM82TITKEEKLQMNQ5PrPpfbXLbt26RY0aNbK8TZVKxapVqxgzZgxJSUm4u7vTrVs3Jk6cmOl6iYmJJCYm6p7HxsZmeZ+FUVjUY3r9cpjoJ8nUKOPIhNez371DFBHm1vDmEnCtCMHf8cqDtfxsfpmt9ya/fF0hhFHKdvJ/+/Zt1qxZQ2hoKHZ2dtSqVYuOHTvi4OCgK2NnZ0dgYGCa/nUiF4y42b925FftHLBFRTlXO+wszYhPTOHK/XiqeDq8fCUhhCjEjOUcr53Jx9Iy7TgyVlZWemWyysHBgV27dmU7lmnTpukGCC7qbkQ+pvfCw9yJeUp5N1sW9a+LlbmpocMShmRiAi0+gxJ+qDcNpQ0nKBc2HGK2gmPam3NCCOOWreQ/ODiYjh07kpCQoLfc0dGRzz77jHHjxuVpcOI5RjrVX0JSKjcfai7AilrNv4mJimqlHTh8/SFnbkVL8i+EKNKM6RxvY2MDaGrdra2t9V7Txqctk9/Gjx/PmDFjdM9jY2Px8ip6zeCvPYin98LD3ItNxM/djtVDGuBub2XosISxqNGd+yYlMd3Qh/LqGygLW6J6ay2UMaLBsYUQL5Wtdsxjx47F1NSUlStX/l979x0eVZn2cfw76QlphEDoVamCdDAIRgVEVxdURAVBRCwritjWFxQUFdBdRUVAUbCBC4JlraCgFNdI70IApYaeQBrpyXn/OJmRAAkpkzmTye9zXXMlc9rccw5k5j7P89wPR44cIT4+ns8++4y2bdvy9NNPM2jQIM2JXlHctNv/HyfSMAyoUc2PGsGeUen/bJc3CAdgS3yytYGIiFQwd/qMt8/uEx8ff9664oYEVAR/f39CQ0OZO3cu3bt359prr3XJ67rSHydSueNdM/FvERXC/Pu7K/GX89Rs3ZPbciexM78BtrTj8OENsP1zq8MSkVIoVfK/Y8cOHnvsMYYMGULt2rWpW7cut9xyC6tWreLjjz/m888/580336yoWKs2e/KflwV5OdbGcpZdBcX+mntYq7/d5QVF/7bGJ1kah4hIRXOnz3h7jYHY2Njz1sXGxhIcHEzLli1dEovdqFGj2LFjB+vWrXPp61a03cfNxP9kahYta4fwn/u6EemBN/Ol/Ly9bPjWaMTA7OdJrHs15GbCZyNgxSugxj+RSqFUyX9ISEiRXd3uuusu7rrrLt59912nBCbn8DtrPL0bjfvf40j+PWu8v127+mbRv7ijqWTm5FkcjYhIxXGnz/j+/fsTFBTEtGnTyM3NdSxfv349q1atYtCgQY5p/qTs4o6lcMe7q0lIy6Z1nVDm39fdI3vxifM0rVmNMwTybetX4YqHzYUrJsPnIyEn09rgROSiSpX8X3XVVSxevLjI9b169WLfvn3lDkouwMcPvAu+6LhR139Hy39tz2z5rxceSGSwH7n5Br8f8ewKzyJStbniM37u3Lm89NJLvPTSS5w8eZLk5GTH8+nTpzu2i4yMZPLkyWzcuJGYmBhmzZrFpEmT6NevH1FRUbzwguurjc+YMYPWrVsXmvmgMttxJIU7313NqTPZtK0Xxn/u60b1arqhIsVrEmk29vyZmAnXTYKb3gQvH9j+GXx0I6SdsDhCESlOqZL/+++/n19//bXIbn9//vkndevWdUpgcgFuOO5/z3GzF4Kndvu32Wy0t4/7P5RkaSwiIhXJFZ/xc+bMYfz48YwfP54TJ06QlJTkeP7qq68W2vbRRx9l3rx5pKenM2bMGKZOnUrv3r2JjY111ARwJU/q9r/9cDKDZ6/mdHoOlzcIZ97IboQHKfGXi2ta0/wuui+h4Ltop+Fw1xcQEA7x6+C9a+DYdsviE5Hilaraf58+ffD29ubxxx/ns88+495776VTp074+PiwcuVKpk2bxr/+9a+KilX8giHjtNtU/E/NzOFwkll1uXktz0z+wRz3v2znCTYr+RcRD+aKz/gVK1aUavshQ4YwZMiQcr2mFLY1Pom7Zq8hJTOXDg3D+WhEV0IDfK0OSyqJppFm8r/35FkNUU2vgpE/wX8Gwak/4f3r4NY50KKfRVGKSFFKlfxPnDiRLVu2sGnTJmJjY/n111+x2WyO9R07diQ8PJzt27fTsmVLfHxKdXi5GPu4fzcZ87/nhBlHVKg/YUGe+8Xhr4r/SZbGISJSkfQZX7wZM2YwY8YM8vIqb/2XTQdPM+z9taRm5tKpUXU+vKcLIUr8pRSa1jS/ix5OyiAzJ48AX29zReQlMHIZLBwG+3+B+XdA35fgilFw1t8REbFWqT65x48f7/g9JSWFzZs3s3nzZjZt2sSmTZvYunUrd911FzabDV9fX1q0aEG7du2YO3eu0wOvktys2//uY55d6d/OXvH/QGI6p89ka0ykiHgkfcYXb9SoUYwaNYqUlBTCwsKsDqfUNhw4zfD315KalUvXxhG8f08Xgv2r1g0cKb/qQb6EBfqSnJHDvoQztKoT+tfKoAgY+iV89wRs/Ah+fAYSdsPfXgNv3WQScQdl/qsfGhpKr1696NWrl2NZTk4O27dvL/Rl4ZtvvnFKoIL7Jf8ePt7fLizIl6aR1dibcIbN8Ulc3aKW1SGJiFQofcZ7lnX7TzH8/bWcyc6je9MI3h/ehSA/Jf5SejabjaY1q7HpYNL5yT+YSf5Nb0LNFvDDM+ZNgFN7YdDH5s0BEbGUU//y+/r60qFDBzp06MA999zjzEMLgH9Bkp2dam0cBXYXVPpv4eHJP0D7BuHsTTjDlkNK/kWkaqrqn/GVtdv/mr2J3PPhOtKz8+hxSQ1mD+tCoJ+31WFJJdYk0kz+954sYhiqzWZ2949oBp/faw4DmN0bBi80hweIiGVKVe1fLOZ2Lf+ePc3f2S5XxX8RkSqtMlb7/+3PRIZ/YCb+PS+NZM7dSvyl/BrXML+P7k9ML37DFv1gxA8Q1sAsBDj7Wti70gURikhRlPxXJm6U/CelZ3MiNQuAS2sFWxxNxbMn/5sPJWEYhrXBiIiIXMSvfyRwz4drycjJ46rmNXlvWOe/irOJlEOjGkEAHLxY8g9Q+zK472eo3wUyk2DeLbDhwwqNT0SKpuS/MrEn/1nWd/u3j/evXz2QalWgYFCrOiH4eXtxOj2HQ6cyrA5HRESkSKt2n2TEh+vIzMnnmpa1mDW0kxJ/cZqGEQXJ/6kSJP8AwbXg7m/hsoGQnwvfPApLxkF+5RpCI+IJlPxXJn72Mf/Wt/zvOl41Kv3b+ft406quWdRms6b8ExGpcmbMmEHr1q3p0qWL1aEUa/muE4z8eD1Zufn0bhXF23d1VOIvTtWooNv/sZRMMnNKmMD7BsCts+HqZ8znq2fA/DvdokFLpCpR8l+ZuFG3/6oyzd/Z2tc3p3bafDDJ2kBERMTlKsOY/592HueBjzeQnZvPdW2imDmkI/4+SvzFuaoH+RJS0OvzUElb/8EsBHjVP2HgB+ATAHt+gDnXQdLBCopURM6l5L8ycST/RVRXdSFHsb8ozx/vb9e+YTgAW9TyLyIibubH34/x4LwNZOflc0Pb2kwf3BE/H33NE+ez2Ww0LBj3f6Ak4/7PddktMPx7qFYLTvwO710Dh9z3ppqIJ9GnQmXimOrP2uTfMIyzkv+q0/J/ef1wALYfTiYnL9/aYERERAos2X6Mhz7ZSE6ewY3t6vDmHR3w9dZXPKk49qJ/B0rT8n+2+p3g/uUQ1RbOnIQP/wZbFzkxQhG5EH0yVCZu0u0/IS2b0+k5eNngkipQ6d+ucY1qhAb4kJWbz65jGqMmIiLW+27rUUb9ZyO5+Qb929fljdvbK/GXCtcwwvxOejCxHN9Jw+rDiCXQ4gbIy4IvRsLPkyBfDSwiFUWfDpWJmyT/9lb/RjWqVakiQl5etkJT/omISNXhjgX/vt5yhNELNpGXb3BLh3pMHdQeHyX+4gL2iv9lbvm38w+G2+dB9Gjz+ap/wecjIEczK4lUBH1CVCZ+Ba3sWdZ2+7e3el9ahVr97dor+RcRqZLcreDffzcdZkxB4j+wU33+fdvleHvZrA5Lqgh7t/+DZRnzfy4vb+j7Ivx9Onj5wO9fmsMAUo+V/9giUoiS/8rEPuY/MxkMw7Iw7Ml/y9pVZ7y/nX3c/xYl/yIiYpHPN8Tz+MLN5BtwR5cG/OvWdkr8xaXsLf/xpzPIy3fSd9KOQ2HYVxBYHQ5vMAsBHt3qnGOLCKDkv3IJrWf+zE6FjNOWhRFX0O2/Re1Qy2Kwir3b/x8n00jNzLE2GBERqXIWrj/Ek59tId+Awd0aMvnmtngp8RcXqxseiK+3jey8fI6lZDrvwI2vhJE/QY1LIeUwvN8P4r5z3vFFqjgl/5WJXxCE1DV/T/zTkhDy8w32OJL/qtfyXzPEn3rhgRgGbItPtjocERGpQuavPcg/P9uKYcCwKxoxacBlSvzFEt5eNupXt0/35+RaVDWawcil0DQGcs7AgiHw65uW9noV8RRumfzPnz+fTp06ERgYSGRkJHfeeScHDhwo8f4bNmygX79+hIWFERISQkxMDKtWrSpy+z179nD33XdTv359/P39qVOnDjfccAM7d+50xttxrhrNzJ+n9lry8odOp5OenYefjxeNC8Z7VTWOcf/xSZbGISIiVce81QcY+8U2AO7p0ZiJf2+DzabEX6xj7/rvlHH/5wqsDkM+g84jAAOWToCvH4bcbOe/lkgV4nbJ//Tp0xk8eDCBgYG8/vrrjBkzhqVLlxIdHc2RI0cuuv+6devo2bMncXFxjB8/nsmTJ5OYmMi1117LsmXLztv+p59+on379qxevZoHHniAd955h6eeeorw8HBOnDhREW+xfCKamD8tSv7jzir2V1UrCtuTf437FxGpOqys9v/xb/t59r/bARh5ZRMm3Nhaib9Yzl70r9wV/4vi7Qt/mwr9XgGbF2yaB3NvhvRTFfN6IlWAj9UBnC0xMZGxY8fSsWNHVqxYgY+PGV6/fv3o2rUrEyZMYPbs2cUeY/To0Xh5ebFq1SoaNmwIwLBhw2jTpg0PPfQQu3btcnxgnjx5kttvv53u3bvz3XffERAQULFv0Bki7C3/1nT7txf7q4pd/u003Z+ISNUzatQoRo0aRUpKCmFhYS573ff/t48Xvt0BwAO9mvJ/17dU4i9uoUJb/u1sNuj+oNnzddE9cOB/ZiHAwQuhZvOKe10RD+VWTbdfffUVaWlpjB492pH4A3Tu3JlevXqxcOFCsrOL7u6zd+9eVq9ezW233eZI/AHCwsIYOXIke/bsYc2aNY7l77zzDomJibz22msEBASQkZFR7PHdQkRT86dFLf+7jlfdSv92l9ULxdvLxvGULI4lO7HIjYiIyFlm/7LXkfg/FNNMib+4FXvyf+CUk8f8X8ilfeDeHyG8IZzeB7N7w5/LK/51RTyMWyX/a9euBSA6Ovq8ddHR0aSmphIXF1fm/c/eBuD7778nJCSE9PR0unTpQlBQEAEBAXTt2pWffvrpovFmZWWRkpJS6FHh7Mm/RQX//mr5r3qV/u2C/HxoHmXe/FDrv4iIVIR3Vv7JS9+ZtYdGX3MJT13XQom/uJVGNaoBFdzyf7ao1jDyZ2jQDbKSYd6tsG6Oa15bxEO4VfJ/+PBhAOrXr3/eOvuy+Ph4p+0fFxdHXl4effv2pXnz5ixatIi33nqL+Ph4rrvuOpYvL/6O4pQpUwgLC3M8GjRocJF36AT2Mf+ZSS4f85SVm8e+BPPubouoqtvyD9C+gdnlU8m/iIg424zlf/DyYrOx47HezXm8rxJ/cT/1qgcCkJKZ67rpj4NrwrCvod3tYOTBd4/D4qchL9c1ry9SyblV8p+ebt459Pf3P2+dfTy+fRtn7J+amkp6ejo33XQTn3zyCQMHDmTUqFEsX74cm83GuHHjio137NixJCcnOx6HDh26yDt0Ar9qEFLH/N3FXf//OJFGXr5BWKAvUaHnn+Oq5PL64YCK/omIiHNN+2kP//5hFwBP9m3Oo70vtTgikQsL9vehepAvAIeTMlz3wr4BcPMsuGa8+XzNOzD/dsjUFMwiF+NWyX9QkDl2KCsr67x1GRkZhbZxxv6BgeYdyxEjRhTatkWLFkRHR7N27dpibzb4+/sTGhpa6OESEdZM93d2sb+q3gLRvmE4ANsOJ5OXr3lnRUSkfAzDYOrS3UxduhuAf/ZrwcPXKPEX92Zv/Y8/5cLkH8xCgL2ehNs+Ap9A+GMZzLkOTu93bRwilYxbJf/16tUDLty1v7gu/WXd3/57nTp1ztu+Tp065Ofnk5SUVMLoXcii6f7syX9VLvZnd2mtEIL8vEnLyuXPk2lWhyMiIpWYYRi89uNupv20B4BxN7TkoZhLLI5K5OLqh5uNavGnXTTu/1xtBsA930NwbTi505wJ4OBqa2IRqQTcKvm3z50bGxt73rrY2FiCg4Np2bJlmfc/exuA7t27A1ywu/7Bgwfx8fEhIiKiFO/ARWoUtPy7uOhfnKb5c/D2snFZPY37FxGR8jEMg1eW7GL68j8AGH9ja+7v1cziqERKpr695f+0i1v+z1avI9z3M9RuB+mJ8NFNsGWBdfGIuDG3Sv779+9PUFAQ06ZNIzf3r8Id69evZ9WqVQwaNAg/Pz8Ajh49SlxcXKFu+c2aNaNr164sWrSoUEKfkpLCnDlzaNasmSPhBxg2bBgA06dPxzD+6rq9fv16Vq9ezbXXXuuoFeBWLJruTy3/hXVoEA5o3L+IiJSNYRhMWRzHOyvNm/kT/96Ge69sYnFUIiXnFsk/QFg9GLEEWt4Iednw5QPw0wuQn29tXCJuxq2S/8jISCZPnszGjRuJiYlh1qxZTJo0iX79+hEVFcULL7zg2Hbs2LG0atWq0NR9ANOmTSMvL4+ePXsydepUpk+fTo8ePTh69CgzZ84sNFb96quvZtiwYXz//ff07duXGTNmMGHCBHr37k1ISAivvfaay957qTjG/Luu5T85PYdjKeac9s2reKV/u8sLkn+1/IuIeL4ZM2bQunXrQj0Iy8MwDF78difvrjJv5L844DLujm7slGOLuEq96ma3f5cW/CuKXzUYNBeufNx8/strsOhuyLZoSIKIG3Kr5B/g0UcfZd68eaSnpzNmzBimTp1K7969iY2NdYzpL063bt1YtWoVzZs35/nnn+fpp58mIiKCZcuW0bdv3/O2f//993n11Vc5fPgwjz/+ODNmzKBPnz6sWbOGNm3aVMRbLD/7mP+M0y6b7m/XcbPVv154ICEBvi55TXfXviD5jzuWSmZOnrXBiIhIhRo1ahQ7duxg3bp1TjnelvhkPojdB8Dkm9sytHsjpxxXxJX+avl3kwTbywt6PwcD3gYvX9j5NXxwPaQctToyEbdgM87u7y7lkpKSQlhYGMnJyRVf+f/VFpB2zBzjVK9Txb4WMPe3/Yz/6neuaVmL94c7p9WjsjMMg66Tf+Jkahaf/+MKOjVyw/oQIlKlufRzqYpw5jn9bEM8efn53N6loZOiE3GtlMwc2j3/IwDbJ15HsL+PxRGd5UAsLBgCGafMabLvXAB121sdlUiFKOlnk9u1/EsJOYr+uWbcv4r9nc9ms3F5/XAANh1MsjQWERGpfAZ2qq/EXyq10ABfwgLNHqGHrR73f65G0WYjWWQLSD1q9gDY8bXVUYlYSsl/ZeXi6f5U7O/COjQMB8zumyIiIiJVTb1ws+v/4SQ36fp/togmMHIpNLsGctJh4VD4ZSqo47NUUUr+KysXFv0zDMMx5l8t/4XZW/43HzptbSAiIiIiFnCbiv9FCQiDwYug6/3m858mwn//AblZ1sYlYgEl/5WVC6f7O5KcSWpmLj5eNppGBlf461UmbeuHAXDoVAaJafoQERGpDDIyMrjkkksIDtZnmkh51S+o+O+2yT+Atw/c8G+44VWwecOW+fBxfziTYHVkIi6l5L+yso/5d0Hyv+tYCgDNagbj56N/MmcLC/SlWc1qAGyJT7I2GBERKZEJEybQqJGq64s4g9tV/C9O1/tgyCLwD4WDv8F718CJOKujEnEZZXKVVfWCMf/piZCRVKEvpWJ/xevQsDoA6/ar67+IiLvbsGEDixcv5umnn7Y6FBGP4Pbd/s91ybVw71Ko3hiSDsCcPvDHMqujEnEJJf+VlX8wBEeZv1dw6/9uJf/F6tbEnOJvzd5EiyMREXFvU6ZM4bbbbqNp06bYbDYaN25c7Pbz58+nU6dOBAYGEhkZyZ133smBAwfK/Pq5ubncd999zJw5Ez8/vzIfR0T+Uq8g+Xe7av/FqdUSRv4MDaMhKwU+uQ3WvGt1VCIVTsl/ZRbhmq7/jpb/KCX/F9K9aQ0AtsYnk56da3E0IiLua9y4cfz88880a9aM6tWrF7vt9OnTGTx4MIGBgbz++uuMGTOGpUuXEh0dzZEjRwptm5WVRVpaWpGPvLw8AP7973/ToUMHevXqVWHvUaSqsY/5TzyTXbm+B1WrAcP+C5cPBiMfFj8F3z0BeZXoPYiUko/VAUg5RDSFg7EVmvzn5OXz58k0QC3/RalfPZC6YQEcSc5k44Ekrrw00uqQRETc0p9//knTpmbB2ssuu4y0tLQLbpeYmMjYsWPp2LEjK1aswMfH/LrSr18/unbtyoQJE5g9e7Zj+7vvvptPP/20yNddvnw59evX55133mHTpk1OfEciEhboS0iAD6mZuRw+ncGllamxyMcfBsyEmi1g2fOwbrb5vXrgBxAYbnV0Ik6nlv/KrEZBxf/Eipvub1/CGXLyDIL9fRxjuqQwm81Gt4LW/zX71PVfRKQo9sT/Yr766ivS0tIYPXq0I/EH6Ny5M7169WLhwoVkZ2c7li9YsADDMIp8xMTE8L///Y/jx4/TvHlzIiMj6d+/P2fOnCEyMpJVq1Y5/b2KVCV1w8zviEeSMy2OpAxsNrhyDNw+F3yD4M+fzToALiiqLeJqSv4rMxdM92fv8t88KhibzVZhr1PZ2cf9r9a4fxGRclu7di0A0dHR562Ljo4mNTWVuLjSVegeNGgQf/zxB5s3b2bz5s3Mnj2boKAgNm/eTLdu3ZwSt0hVVSc8AICjSZVo3P+5Wt0EI5ZASF1I2A3vXQsHYq2OSsSplPxXZi4Y82+f5q9F7dAKew1PYB/3v+VQMpk5eRZHIyJSuR0+fBiA+vXrn7fOviw+Pr5UxwwKCqJ+/fqOR82aNbHZbNSvXx9/f/8i98vKyiIlJaXQQ0QKq1OZW/7PVudyuO9nqNsBMk7BR3+HTZ9YHZWI0yj5r8wi7NP9JUBmcoW8xK6Clv+WGu9frEY1gogK9Sc7L5+NBzXln4hIeaSnm/OFXygpDwgIKLRNWcXExBRZc+BsU6ZMISwszPFo0KBBuV5XxBPVDfOAln+70Dow/Hto3R/yc+Crh2Dpc5Cfb3VkIuWm5L8y8w+BarXM3yuo9T9O0/yViM1mo1uTgnH/e09ZHI2ISOUWFGRWD8/KyjpvXUZGRqFtKtrYsWNJTk52PA4dOuSS1xWpTOqE21v+PSD5B/ALgoEfQq+nzOe/vgELh0L2GSujEik3Jf+VXY2Crv8VUPQvLSuX+II5WzXN38V1a6px/yIizlCvXj3gwl37ixsSUBH8/f0JDQ1l7ty5dO/enWuvvdYlrytSmdR1jPmv5N3+z+blBdc8Cze/C95+EPctvN8Pkg9bHZlImSn5r+wcRf/2Of3Qu4+brf61QvypXs3P6cf3NPaW/02HkjTuX0SkHLp06QJAbOz5xbZiY2MJDg6mZcuWLo1p1KhR7Nixg3Xr1rn0dUUqg7+q/WdgGIbF0TjZ5bfD3d9CUCQc2wrvXQOHN1gdlUiZKPmv7Cqw4v8udfkvlWY1qxEZ7E92bj5bDiVZHY6ISKXVv39/goKCmDZtGrm5uY7l69evZ9WqVQwaNAg/P92UFnEXtQvG/Gfm5JOUnmNxNBWgYTezEGDNVpB2DD64AX7/0uqoRErN5+KbiFtzJP/O7/avYn+lY7PZ6NY0gu+2HmXNvlN0K5gBQERETHPnzuXAgQMAnDx5kuzsbF566SUAwsPDefjhhwGIjIxk8uTJjBkzhpiYGIYOHUpCQgKvv/46UVFRvPDCCy6PfcaMGcyYMYO8PPXsEjlXgK83Nar5kXgmmyPJGZ7ZY7R6I7j3R/hsBPyxFBYNh4Q/oNeToOmwpZJQ8l/Z1ai46f7iNM1fqXVvYk/+E4FLrQ5HRMStzJkzh5UrVxZaNn78eAAaNWrkSP4BHn30USIjI3nttdcYM2YMQUFB9OnThylTpjhqArjSqFGjGDVqFCkpKYSFhbn89UXcXZ3wABLPZHM0KZM2dT30/0hAKNy5AH58Fta8DctfgoTd8Pe3wDfA6uhELkrJf2VXvWC6vzMnITPF/KPkBIZhqOW/DOyt/RsOnCY7Nx8/H42sERGxW7FiRam2HzJkCEOGDKmYYETEqeqEBbL9cApHPaXif1G8feD6l6Fmc/juSdi2EJIOwO2fQHBNq6MTKZYyk8ouIBSqFfyhcWLr/8nULE6n5+Blg0tqBTvtuJ7u0lrBRFTzIzMnn63xSVaHIyIiTjJjxgxat27tKEYoIoXVLRj3f9iTKv4Xp/MIuOtzCAiDQ2vMQoDHd1gdlUixlPx7ggjnd/2PK2j1bxxZjQBfb6cd19PZbDa6NTGn/Fuz75TF0YiIiLOo2r9I8eqEmxX/Pb7l/2zNroaRP5k1uJIPwpy+sPtHq6MSKZKSf09QAUX/1OW/7OzJ/+q9iRZHIiIiIuIadQpa/o9WlZZ/u8hLzRsAja6E7FSYfzusfhs8bcpD8QhK/j1BDXvyv89ph9x13Ez+m0cp+S+ts8f95+TlWxyNiIg4g7r9ixSvXkHL/5Gq1PJvFxQBQ7+EDkPByIcl/wffPgZ5HjjtoVRqSv49gb3lP1Et/+6gRVQI4UG+pGfnse1wstXhiIiIE6jbv0jx7N3+j6dkkp9fBVu9ffzMqv99XwJssOEDmHcrZJy2OjIRByX/nsDJY/7z8g12F7T8a5q/0vPystG1ccG4/70a9y8iIiKeLyrEHy8b5OQZJKRlWR2ONWw2iH4E7vgP+FaDfSthdm+nNtCJlIeSf08QYZ/u7wRkpZb7cAcSz5CVm0+ArxcNI4LKfbyqyN71f80+jfsXERERz+fj7UWtEHPc/5HkKjbu/1wtb4B7f4DQ+pD4hzkTwL5frI5KxD2T//nz59OpUycCAwOJjIzkzjvv5MCBAyXef8OGDfTr14+wsDBCQkKIiYlh1apVF91v69at+Pr6YrPZWLBgQXnegmsFhEFQpPm7E1r/7V3+m0eF4O1lK/fxqiJ70b/1+0+Tq3H/IiKVnsb8i1xcnfCC5D+pCo77P1fttnDfz1CvE2QmwdwBsPFjq6OSKs7tkv/p06czePBgAgMDef311xkzZgxLly4lOjqaI0eOXHT/devW0bNnT+Li4hg/fjyTJ08mMTGRa6+9lmXLlhW5X35+Pvfddx8BAQHOfDuuU8N5Xf/t0/y1ULG/MmtVJ5SQAB/SsnL5/UiK1eGIiEg5acy/yMXZK/4fq+ot/3YhUTD8O2hzC+TnwtePwA/PQH6e1ZFJFeVWyX9iYiJjx46lY8eOrFixggcffJBnn32WJUuWcPToUSZMmHDRY4wePRovLy9WrVrFk08+ySOPPML//vc/oqKieOihhzCKmHZj+vTp/P777zz11FPOfluu4cSif/aW/xYq9ldm3meP+1fXfxEREakCokLN5P94qpJ/B99AGPg+XPV/5vPfpsOCIZCVZm1cUiW5VfL/1VdfkZaWxujRo/Hx8XEs79y5M7169WLhwoVkZ2cXuf/evXtZvXo1t912Gw0bNnQsDwsLY+TIkezZs4c1a9act9+hQ4d49tlnee655wrtV6k4iv6Vf7q/7UfMCvWt6qjYX3l0t4/7V9E/ERERqQIcyb9a/guz2eDqsXDrHPD2h92L4f1+kHTI6sikinGr5H/t2rUAREdHn7cuOjqa1NRU4uLiyrz/2ducbdSoUTRu3JjHHnusVPFmZWWRkpJS6GEZe9G/U+Vr+T+Rmkn86QxsNmhXP8wJgVVd3ZqaLf9r958irypOeSMiIiJVSu2C5P9YipL/C2o70BwGUK0WHN9mFgKMX291VFKFuFXyf/jwYQDq169/3jr7svj4eKfuv2jRIr799lveeeedQr0NSmLKlCmEhYU5Hg0aNCjV/k7lpDH/mw4mAdC8VgghAb7lDKpqa10nlGB/H1Izc9l5VOP+RUQqMxX8E7k4R8t/ShWd6q8kGnQxCwFGXWbO1PXBDbDtM6ujkirCrZL/9PR0APz9/c9bZy/EZ9/GGfsnJSXx6KOPcu+9916wt8DFjB07luTkZMfj0CELu+5UL2j5TzterjFE9uS/Y6Pw8sdUxfl4e9G5cXUAVu/VuH8RkcpMBf9ELq72WQX/iqqzJUB4AxixBJr3g7ws+PxeWPEy6JxJBXOr5D8oyJxTPivr/LuFGRkZhbZxxv7//Oc/yc3N5ZVXXilTvP7+/oSGhhZ6WCYwHILMMeblaf3fdPA0AB0aVHdCUNKtScG4/30a9y8iIiKezd7tPyMnj9SsXIujcXP+IXDHf+CKh83nK6bA5yMhR9MkSsVxq+S/Xr16wIW79hfXpb8s+2/atInZs2fz6KOPkpKSwv79+9m/fz8JCQkAnDx5kv3791/wRoLbiihf1//cvHy2xpvF/tTy7xzdC8b9r9t/inyN+xcREREPFujnTWiAOYxWRf9KwMsbrpsEN00DLx/Y/hl8eCOkHrc6MvFQbpX828fRxcbGnrcuNjaW4OBgWrZsWeb9z97mwIEDGIbBs88+S5MmTRwP+1R/o0ePpkmTJmzatKl8b8qV7NP9lbHoX9yxVDJy8ggJ8KFpZLATA6u6LqsXRpCfN0npOew6nmp1OCIiIiIVytH1X0X/Sq7T3TD0SwgIh8PrzUKAx7ZbHZV4ILdK/vv3709QUBDTpk0jN/evrkLr169n1apVDBo0CD8/PwCOHj1KXFxcoTH8zZo1o2vXrixatKjQ+PuUlBTmzJlDs2bN6N69OwDdunXjyy+/PO/xyCOPAPDEE0/w5Zdf0qJFC1e8decoZ9E/e5f/9g3C8fKyOSuqKs3X24tOjTTuX0RERKoGe9G/Y2r5L50mvcxCgDUugZR4mNMXdi22OirxMKUrb1/BIiMjmTx5MmPGjCEmJoahQ4eSkJDA66+/TlRUFC+88IJj27Fjx/LRRx+xfPlyYmJiHMunTZtGTEwMPXv2ZPTo0fj5+TFr1iyOHj3K999/j81mJrV16tRhwIAB58WQlJQEQOfOnS+43q05Wv73lWl3R7G/hhrv70zdm9bglz0JrNl7int6NLE6HBEREZEK81fFfyX/pVajGYxcBguHwb5VMP9O6PsSXDEKbGqYk/Jzq5Z/gEcffZR58+aRnp7OmDFjmDp1Kr179yY2NtYxpr843bp1Y9WqVTRv3pznn3+ep59+moiICJYtW0bfvn1d8A4sZE/+E8vW7X+jvdhfw3AnBSRgJv8Av/6ZQHZuvsXRiIhIWWiqP5GSqa3p/sonsDrc9QV0Gg4Y8OMz8M1oyM22OjLxADZD83A4TUpKCmFhYSQnJ1tT+T8jCV5pZP4+7gj4VSvxrqfOZNPxxaUAbJnQl7Ag3woIsGrKyzfoNnkZCWnZfDyiK72a17Q6JBGpIiz/XPJAOqcixZu7+gDj/7udPq2jeG9YZ6vDqbwMA1a/bSb/Rj407gmDPoagCKsjEzdU0s8mt2v5l3Iox3R/mw+Zrf7NalZT4u9k3l42+rSuDcAPvx+zOBoRERGRilNb3f6dw2aDKx6COxeAXzDs/wVm94aEP6yOTCoxJf+extH1v3R/GDYeSAI03r+iXNcmCoAfdxzXlH8iIiLisWqr4J9zNb8O7v0RwhqaM3rNvgb2rrA6KqmklPx7mtrtzJ97V5Zqt02H7OP9lfxXhOhmkYT4+3AyNctxrkVEREQ8TVSYPwAJaVnk5qnWkVNEtYH7foL6XSEzGebdCus/sDoqqYSU/HualjeYP3d9D/kl+4Obl2+w2V7pv1F4xcRVxfn5eHFNq1oALNmurv8iIiLimSKr+ePjZSPfgJNpKvrnNMG14O5voO1tkJ8L346BJWMhP8/qyKQSUfLvaRr3Av8wSDsO8etKtMueE6mcyc6jmp83l9YKqeAAq67r2tjH/R9HdTZFRETEE3l52agVYrb+q+K/k/kGwC3vwdXPms9XzzSnA8xMsTYuqTSU/HsaHz9oXjClYdw3JdrFPt7/8gbheHtpDtGKclXzmvj7eHHwVDo7j6ZaHY6IiIhIhYgK07j/CmOzwVVPwcAPwCcA9vwA718Hpw9YHZlUAkr+PVHLG82fO781pwm5iE0HzTHoKvZXsar5+9DzUnOaP1X9FxEREU8VFaKK/xXusltg+PcQHAUndsDsa+HgGqujEjen5N8TXdIbvP3h9D44sfOim286lARAh4bhFRuX0O8yTfknIlIZzZgxg9atW9OlSxerQxFxe1GhZrf/E6lK/itU/U5w389Quy2cOQkf3QhbF1odlbgxJf+eyD8Yml1t/h73bbGbJqfn8MeJNECV/l2hd6taeHvZiDuWyoHEM1aHIyIiJTRq1Ch27NjBunUlq6cjUpXVKpju74TG/Fe8sPpwzxJo8TfIy4Yv7oOfJ5W48LdULUr+PZWj63/x4/43xycB0LhGEBHV/Co4KAkP8qN70whArf8iIiLimWqG2Fv+lfy7hH8w3D4PejxqPl/1L/jsHshOtzYucTtK/j1Vi+vB5gXHthZbAGTjAY33dzV71X9N+SciIiKeqJaSf9fz8oI+L0D/GeDlCzv+Cx/+DVL1fVP+ouTfU1WLhIbR5u+7vi9yM433d72+rc3kf+PBJE6oEI6IiIh4GHvL/0mN+Xe9DnfBsK8gsDoc2QjvXQNHt1gdlbgJJf+erOXfzJ87LzzuPz/fcFT613h/16kdFkD7BuEA/LjjuLXBiIiIiDhZrYJq/4lnssnN09hzl2vcwywEGNkcUg7D+/2KzAekalHy78nsyf/BWDiTcN7qvQlppGbmEuDrRcvaIS4Ormqzd/3XuH8RERHxNDWq+eHtZcMwICEt2+pwqqaIpnDvUmh6NeSkw6d3wf/eKNE04OK5lPx7suqNoHY7MPJh1+LzVm88mARAu/rh+Hjrn4IrXdcmCoDf/kwkOT3H4mhERKqG4cOH4+fnR3BwsOOxZMkSq8MS8TheXjYig81C0ic17t86geEwZBF0GQkYsOw5+OphyNUNmapKGZ+na3WT+fMCU/7Zu/yr2J/rNa0ZTPOoYHLzDX6KU9d/ERFXuf/++0lLS3M8+vXrZ3VIIh7J3vX/hMb9W8vbF/72Glz/b7MY+OZ5MHcAnEm0OjKxgJJ/T2ef8u/P5ZCVVmjVpoKWfxX7s0Y/df0XERERD6WK/26m2/0weBH4hcCBX2H2NXByl9VRiYsp+fd0tVpB9SaQlwV/LHMsTs3MYdfxVEDJv1X6FiT/K3efJCM7z+JoREQq3pQpU7jtttto2rQpNpuNxo0bF7v9/Pnz6dSpE4GBgURGRnLnnXdy4EDR09eWxCeffEJERAStWrVi0qRJ5Obmlut4InJhtUILkv8UJf9u49LeMHIphDeE0/thdh/482eroxIXUvLv6Ww2aFXQ+n9W1/+t8ckYBtSvHujoliWu1aZuKPXCA8nMyWfl7pNWhyMiUuHGjRvHzz//TLNmzahevfghZ9OnT2fw4MEEBgby+uuvM2bMGJYuXUp0dDRHjhwptG1WVlahrvznPvLyzBuso0ePZteuXSQkJDB37lw+/PBDJk6cWGHvV6Qqq6lu/+6pViu4bzk06A5ZyTBvIKx9z+qoxEWU/FcFLQvG/e/+0VHgY+MBjfe3ms1mo99lZuv/j+r6LyJVwJ9//kliYiJLly6lbt26RW6XmJjI2LFj6dixIytWrODBBx/k2WefZcmSJRw9epQJEyYU2v7uu+8mJCSkyMcvv/wCQMeOHalVqxZeXl507tyZiRMnsmDBggp9zyJVlbr9u7FqkXD313D5nWDkwfdPwvf/hDz1hPJ0Sv6rgvpdIDjKvLu3fxUAmw4lAerybzX7lH/Ldh4nR/PgioiHa9q0aYm2++qrr0hLS2P06NH4+Pg4lnfu3JlevXqxcOFCsrP/qla9YMECDMMo8hETE3PB1/Hy8sLQtFciFaKmkn/35uMPA96Gawtupq6dBf8ZBJnJ1sYlFUrJf1Xg5QUtbjB/j/sOwzBU6d9NdGpUnchgP1Iyc1m9V1VXRUQA1q5dC0B0dPR566Kjo0lNTSUuLq7Ux/30009JTk7GMAy2bt3KxIkTufXWW4vdJysri5SUlEIPEbk4e8v/yRR1+3dbNhv0fAIGfQw+gfDnTzCnr1kPQDySkv+qwl71P+579iekcTo9Bz8fL1rVCbU2rirO28tGn9ZRACzZrq7/IiIAhw8fBqB+/frnrbMvi4+PL/VxZ86cSePGjQkJCeHWW2/l9ttv58UXXyx2nylTphAWFuZ4NGjQoNSvK1IV1Qo1x/yfTMtSDxt317o/jFgMIXXgZBy8dw0c+M3qqKQCKPmvKpr0Av9QSDvGgS0rAWhbLww/H/0TsJq96/+PO46Tn68PRxGR9PR0APz9/c9bFxAQUGib0li5ciWnT58mLS2NPXv28Pzzz+Pn51fsPmPHjiU5OdnxOHToUKlfV6Qqqhls/v/NyTM4nZ5jcTRyUXU7wH0/Q53LIT0RPv47bJ5vdVTiZMr8qgofP7i0LwDeu78DoKPG+7uF6GaRhPj7cDI1i3X7T1kdjoiI5YKCggCzy/25MjIyCm1T0fz9/QkNDS30EJGL8/PxonqQL6CK/5VGaF24ZzG0ugnysuG/D8KyiZCvulSeQsl/VVIw5V/ThOWAQQeN93cLfj5e3NC2DgAf/bbf2mBERNxAvXr1gAt37S9uSEBFmjFjBq1bt6ZLly4ufV2Rysw+nfRJFf2rPPyqwW0fw5WPm8//NxUWDYPsM9bGJU6h5L8quaQ3hrc/9fKPcqntsIr9uZERVzYBzHH/h06VviuriIgnsSfYsbGx562LjY0lODiYli1bujSmUaNGsWPHDtatW+fS1xWpzGqFFlT8T1HyX6l4eUHv52DAO+DtBzu/gQ+uh5QjVkcm5eSWyf/8+fPp1KkTgYGBREZGcuedd3LgwIES779hwwb69etHWFgYISEhxMTEsGrVqvO2W7lyJaNGjaJt27aEhIRQs2ZNevTowfz58z2zMIl/CKeizMrJA4M2UTsswOKAxK5F7RB6XhpJvgEf/Lrf6nBERCzVv39/goKCmDZtGrm5f807vX79elatWsWgQYMuOlbf2dTyL1J6mu6vkmt/Jwz7GoJqwNEtZiHAI5usjkrKwe2S/+nTpzN48GACAwN5/fXXGTNmDEuXLiU6OpojRy5+t2ndunX07NmTuLg4xo8fz+TJk0lMTOTaa69l2bJlhbZ9+umn+fLLL+nVqxevvfYa48aNIy8vj8GDB3P//fdX1Fu01HJbVwBu8fkV8nIvsrW40sie5vzXn647SHKGCuOIiOeZO3cuL730Ei+99BInT54kOTnZ8Xz69OmO7SIjI5k8eTIbN24kJiaGWbNmMWnSJPr160dUVBQvvPCCy2NXy79I6dmL/iWkKfmvtBpdASN/gpotIfUovH897Pja6qikjGyGGzVxJyYm0rhxY5o3b86aNWvw8fEBzDv9Xbt2ZcSIEcyePbvYY1xxxRVs27aNHTt20LBhQwCSk5Np06YNQUFB7Nq1C5vNBsCKFSu48sorHa8DkJ+fT0xMDL/88gvbt2+nTZs2JY4/JSWFsLAwkpOT3bIgUE5ePte89BVf5T9MhC0N+r0C3R+0OiwpYBgG172xit3H0xh3Q0vu79XM6pBEpJJzt8+lmJgYVq5cecF1jRo1Yv/+/YWWffLJJ7z22mvs3LmToKAg+vTpw5QpU2jSpIkLor0wdzunIu7svVV7mfT9Tvq3r8ubd3SwOhwpj8xkWHQP/PmT+fzaCWZdgIK8SqxV0s8mt2r5/+qrr0hLS2P06NGFEvLOnTvTq1cvFi5cSHZ2dpH77927l9WrV3Pbbbc5En+AsLAwRo4cyZ49e1izZo1jeUxMTKHXAfDy8mLgwIEAbNu2zVlvzS3E/pnIoQw/3vYeYi5YPgnSTlgblDjYbDZGXmm2/n/4635y8lRZVUQ8y4oVKzAM44KPcxN/gCFDhrBx40YyMjJITExkwYIFliX+6vYvUnqRIebwHLX8e4CAMBi8ELo+YD7/6QX47z8gV9e2MnGr5H/t2rUAREdHn7cuOjqa1NRU4uLiyrz/2dsUx15JuFatWhcPuhL5bqs5bCKz7WCo0x6yUszpO8Rt/L19XSKD/TiSnMni7cesDkdERAqo279I6UUWdPtXtX8P4e0DN/wLbngVbN6wZT589Hc4k2B1ZFJCbpX8Fzd9j33Zhab9cdb+9mPMmjWLpk2b0rNnz2K3zcrKIiUlpdDDXWXn5rOkIJn82+UNzP+0AJvnQfx6CyOTswX4ejO0e2MAZv+y1zMLT4qIiEiVEOkY8190z12phLreB3d9Bv5hcGi1WQjwxE6ro5IScKvkPz3dnOLM39//vHUBAQGFtqmo/W+++WbS0tJ4//338fX1LTbeKVOmEBYW5ng0aNCg2O2t9OsfCaRk5lIzxJ8ujSOgQRdoX9D9/7snID/P2gDF4a7uDfHz8WJrfDLr9p+2OhwRERGRMrEn/6fTs8nVcEbP0uwaGLkUqjeGpAMwpy/sWXbR3cRabpX8BwUFAWaL+rkyMjIKbePs/TMzM+nfvz/r16/n/fff56qrrrpovGPHjiU5OdnxOHTo0EX3scq3W48CcMNltfH2KijM0ft58A+Fo5th01zLYpPCagT7c2vHeoDZ+i8iItbTmH+R0ouo5oeXDQwDTp1R67/HqdkCRv4MjXqYw4n/cxusmWVecHFLbpX816tnJjwX6ppfXJf+8u6fmZnJgAED+Omnn5g1axbDhg0rUbz+/v6EhoYWerijrNw8ftxR0OW/Xd2/VgTXgpix5u/LJkL6KQuikwu590qzoNXSncfZn3DG4mhERERj/kVKz9vLRkS1gnH/KvrnmarVgKH/hfZ3gZEPi/9p9irO07TV7sitkn/73fTY2Njz1sXGxhIcHEzLli3LvP/Z29hlZWVx88038+OPP/L2229z3333lTl+d/XL7gRSM3OJCvWnc6PqhVd2vQ9qtoKMU2b1f3ELl9QK4eoWNTEM+ODXfVaHIyIiIlImkcH2iv9q+fdYPn7Qfzr0ngjYYP0c+OQ2yEiyOjI5h1sl//379ycoKIhp06aRm5vrWL5+/XpWrVrFoEGD8PMz/4AcPXqUuLi4QmP4mzVrRteuXVm0aFGhLvgpKSnMmTOHZs2a0b17d8fyrKwsBgwYwA8//MDMmTN54IEHXPAuXe+7bQVd/tvWwcvrnLk4vX3Nqp0A69+Ho1tdHJ0UZWRPc9q/hevjSUrXB6aIiIhUPjVDCor+qeK/Z7PZ4MoxcPs88A2CvcthTh84pSGs7sStkv/IyEgmT57Mxo0biYmJYdasWUyaNIl+/foRFRXFCy+84Nh27NixtGrV6ryp+6ZNm0ZeXh49e/Zk6tSpTJ8+nR49enD06FFmzpyJzfZX8jtkyBCWLFnCtddeS3BwMPPmzSv02Lq18ifCmTl5LN1xHIAb29W58EZNekGbW8yuOt8/pXE6biK6WQ1a1g4hIyeP/6w9aHU4IiJVmsb8i5SNY7o/dfuvGlrdCCOWQGg9SNgN710L+3+1Oiop4FbJP8Cjjz7KvHnzSE9PZ8yYMUydOpXevXsTGxvrGNNfnG7durFq1SqaN2/O888/z9NPP01ERATLli2jb9++hbZdv96c4m7ZsmUMHTr0vMcXX3xRIe/RlVbtPklaVi51wgLo0KB60Rv2fcm8S3doNWxd6LoApUg2m83R+v9R7H6yc1UlV0TEKhrzL1I2jm7/avmvOupcDvf9DHU7mkOLP+4Pm+ZZHZUANkMTiTtNSkoKYWFhJCcnu03xv0cXbOKrzUe498omjL+xdfEb//Ia/PQCBEfBw+shwD3eQ1WWlZvHla8s52RqFq/ffjk3dyi64KWIyLnc8XOpstM5FSmdWSv/ZMriOAa0r8sbd3SwOhxxpex0+O8/YMd/zec9HoVrnwcvt2t/rvRK+tmkM+/BMnPyWHaxLv9nu+JhiGgKacdh1b8qODopCX8fb4ZHNwZg9i/70L06ERERqUzs3f5V8K8K8guCgR9Ar3+az399Ez69C7LSrI2rClPy78FW7DrBmew86oUH0r5B+MV38PGH6wuS/tVvw4HfKjQ+KZnBXRsS4OvF70dS+G1votXhiIiIiJRYpL3gn8b8V01eXnDNM3DLe+DtD7u+gw/6QfL5U7NLxVPy78G+3WpW+f9buzqFCh0W69I+0OrvkJ8LnwyEg6srMEIpierV/BjYyezu/+ayPeTnq/VfRMTVVPBPpGz+mupPyX+V1m4QDP8WqtWEY9vgvWvg8Aaro6pylPx7qIzsPH7aeQKAv7UtQZf/s908C5pcBdlpMO9W3QBwAw/0akaArxdr9p3iE1X+FxFxORX8EymbmgXd/k+dySZPDRhVW4OuMPInqNXaHGb8wQ2wvfIXWK9MlPx7qJ/jTpCRk0eDiEDa1Q8r3c5+QXDnAt0AcCMNIoJ4ul9LAKZ8v5ODiekWRyQiIiJycRHV/LDZIN8wbwBIFVe9EYz4AS7tC7mZ8Nk9sPLfmmrcRZT8e6jvth0B4G9t65a8y//ZdAPA7dx9RWO6NYkgPTuPJz/bou7/IiIi4vZ8vL2ICDK7/p/UdH8C5oxidy6A7g+Zz5e/BF/cBzmZ1sZVBSj590BnsnL5Oc7s8l+iKv9F0Q0At+LlZePfAy8nyM+btftO8WHsfqtDEhEREbmovyr+K/mXAl7e0G8K3PgGePnAtkXw0U2QdsLqyDyakn8P9HPcCTJz8mlUI4g2dcs5B7FuALiVhjWCGHdDKwD+9UMce09qqhQRERFxb5EhKvonReh8D9z1OQSEQfxasxDg8d+tjspjKfn3QN8VVPm/sTRV/oujGwBuZUi3hlx5SSSZOfk8uWiLiueIiLiAqv2LlJ1a/qVYTWPMQoARTSH5EMzpC7t/sDoqj6Tk38OkZeWyfJe9yn9d5x34QjcA9q503vGlxGw2G68MbEeIvw8bDyYx+5e9VockIuLxVO1fpOwiqpkt/4kq+CdFibzUvAHQuKeZa8y/A36boUKATqbk38P8tPM4Wbn5NI2sRqs6Ic49+Lk3AD7+O3z7OGSmOPd15KLqhQcy/sbWALy2dDd7jqdaHJGIiIjIhdlb/k+lKfmXYgRFwF1fQMdhYOTDD+Pg2zGQl2N1ZB5Dyb8Hyc83mPvbAQD+5qwu/+ey3wDoMNR8vn4OzOgGcd85/7WkWLd1rs/VLWqSnZvPE4u2kJuXb3VIIiIiIuepoZZ/KSkfP7hpGvSdBNhgw4cw7xbIOG11ZB5Byb8HWbDuEOsPnCbIz5s7ujasuBfyC4L+0+Hub8yxOalHYMFgWDgMUo9X3OtKITabjSm3tCM0wIet8cm8s/JPq0MSEREROY+6/Uup2GwQ/TDcOR98q8G+VTC7NyTqu255Kfn3ECdSMpmyeCcAT/RtQb3wwIp/0Sa94B+xcOVjYPOGHV/BjC6w8WONz3GR2mEBPP/3NgC8+dMedh7VEAwRERFxLzUKuv0nquCflEaL6+HeHyC0PiT+Yc4EsG+V1VFVakr+PcTz3/xOamYu7eqHMTy6sete2DcQej8P96+AOu0hMxm+fsScp1N351zi5g716NM6ipw8gycWbiEjO8/qkEREREQcHN3+NeZfSqt2W7jvZ6jXGTKTYO7NsOEjq6OqtJT8e4ClO47z/bZjeHvZmHJLW7y9KmCs/8XUaWdW6Oz7EvgEwv5fYEZX+HwkxG9wfTxViM1mY/LNbake5MuOoyncNWcNSen6cBURERH3UCPYTP4zcvJIz861OBqpdEKiYPi3cNmtkJ8L34yGH56BfDV4lZaS/0ouNTOH8f/dDsDInk1oUzfMumC8fSD6EXjoN2h2rfmfc9simH2NOU5n22eq1llBaob4M/vuLoQG+LDhwGlun7WaY8mZVoclIiIiQrC/D34+Ztqh1n8pE99AuHUOxIw1n/823aw5lqUZr0pDyX8l9+oPuziWkknDiCDGXNvc6nBMEU1g6BfmUIDL7wRvP4hfB5/fC2+0hVX/hjMJVkfpcTo1qs7CB6+gVog/u46ncuvbsexLOGN1WCIiHmHGjBm0bt2aLl26WB2KSKVjs9kcXf9PqeiflJXNBjH/Z94E8AmA3Uvg/X6QdNDqyCoNJf+V2MaDp/l4tTm13+Sb2xLo521xROeo2wFufgce+928S1etFqQehZ9fgqmt4atRsP9/kKfuX87SsnYon/8jmsY1gjiclMHAt2PZfjjZ6rBERCq9UaNGsWPHDtatW2d1KCKVkr3rf+IZFf2Tcmo7EIZ/Z+YWx7ebhQAP6W9zSSj5r6Syc/MZ+/k2DANu6ViPKy+NtDqkogXXMu/SPbYdbp5lFgbMy4JN8+DDv8Grl8AXD8Dv/1XXHSdoEBHEZ/+Ipk3dUBLPZHPHu6uJ/VM9LURERMQ6EdXMiv8J6vYvzlC/s1kIMOoyOHPSzCm2fWZ1VG5PyX8l9e6qP9l1PJWIan48+7fWVodTMj7+cPkd5nCAET/C5YMhMAIyTsPWBbDobvhXU5h3K6ybDSlHrI640ooM9mfB/d3p3jSCtKxchr+/jiXbj1kdloiIiFRRker2L84W3gBGLIHm15sNi5/fC8unaMrxYij5r4T2nkxj2s9/ADDhxtZEFPwxrTRsNmjYDW5+G57cA/cshisehoimkJcNfyyD756Aqa3g7R7w7eOwZQGc2qv/zKUQEuDLh/d05bo2UWTn5fPQJxtYsFZjokRERMT1HN3+09TtX5zIPwTu+MQsOg6w8mX4bATkZFgbl5vysToAKR3DMBj35Tayc/Pp1bwm/dvXtTqk8vH2gUbR5qPvS5CwG3Z9D3Hfm0UCj283H+vnmNtXqwn1u0KDLtCgm1lXwDfQ2vfgxgJ8vZkxuCPPfLmdT9cf4v++2Mb2I8k8em1zaob4Wx2eiIiIVBH2bv+JavkXZ/PyNvOIyObw7WPw+xeQdADumG9OEygOSv4rmUXr41m99xQBvl5MGnAZNpvN6pCcx2aDmi3Mx5WPQdoJOBBr3gQ4tAaObjHH9Oz6znwAePlARDOo1cp81GwJtVqbvQi89c8bwMfbi5dvbUtEsB9vr/iTeasP8sXGw4y8sgn39WpKSICv1SGKiIiIh/ur5V/Jv1SQjsOgehNYOBQObzALAQ5eALXbWh2Z21B2VIks3naUF7/bAcDjfZrTICLI4ogqWHAtaDPAfADkZJo3AOLXmjcDDq2FtOOQsMt87PjvX/t6+0GNS80bApGXQvXGEN7I/BkcBV5Va8SLzWbj6X4t6XlJJK8siWNLfDLTfv6DeWsOMurqS7ire0P8fdxstggRkQrwzTff8Nxzz7F7925CQkJ4/PHHeeqpp6wOS8Tj2af6U7V/qVBNesLIn+A/gyDxD5hzHQycAy2utzoyt2AzDA2idpaUlBTCwsJITk4mNDTUacc9mZrFhK+2s7igYFunRtX59P7u+HhXrQT2PIYBKYfhxE7zcTIOTuyAk7sgJ73o/bz9IbyheSOgeiPzpkBoXQipDSF1zIef595YMQyDJduP8e8fdrE34QwA9cIDebxPcwZ0qIe3lwf1JhGp4irqc6myWrJkCffeey8ff/wxV111Fenp6Rw8eJDLLrusxMfQORUpm82Hkhgw41fqhgUQO/Zaq8MRT5dxGhbeDftWAjbo84JZF8CTek2fpaSfTUr+ncjZXwgMw+C/mw8z8ZsdJKXn4O1l46GYZjx8zSVqpS1Ofj4kH4QTBTcDTu2F0/vNsT/Jh8HIu/gxAsIKbgQU3BAIrgVBkVAtsuBnjYKfNSvtjYLcvHwWbYjnjWW7OZ5i3oVvERXC6Gsv5eqWNQnyU8cgkcpOiWphXbp0YcSIEfzjH/8o8zF0TkXK5tCpdHr+azl+Pl7serGfZw1dFfeUlwPfPwUbPjCfdxgKf5sKPpWsWHoJlPSzyS2/3c+fP59XX32VHTt2UK1aNfr06cPLL79Mo0aNSrT/hg0beOaZZ/jtt9/Iz8+nU6dOvPDCC/Tq1eu8bbOzs3n55Zf56KOPiI+Pp3bt2txxxx0899xzBAVZl9QdTc5g3BfbWL7rJACt64Tyr4HtuKxemGUxVRpeXgWt+o2hRb/C6/JyIDnevBFw+kDBTYGDkHoMUo+aj5x0yEw2HyfjLv56vkEQVMO8YRAQBv6hf/0eEFrE8rOWWfQHyMfbizu7NmRA+3p8GLuft1f8wa7jqYz6z0b8fLzo3rQG17SoyTUto2hYo3Le4BAR9zJlyhQ2btzIhg0b2LdvH40aNWL//v1Fbl/e7wNnO3PmDBs2bGDQoEG0bNmS06dP061bN958802aNGlSjnclIiVhH/OfnZvPmew8gv3dMg0RT+LtCze+btYT+2EcbJoLp/bB7XMhKMLq6Czhdi3/06dP55FHHqFHjx7cddddJCQk8MYbb+Dv78+6deuoW7f46vbr1q3jqquuolatWjz88MP4+/vz7rvvEhcXx+LFi+ndu3eh7QcOHMjnn3/O0KFD6dWrF1u2bOHtt9/mqquuYunSpXiVYmy4M1oDDMNg/tpDTPl+J6lZufh5e/Fo70u5v1dTfKt6N39XMAzISvnrZkDKUUg9AmcSzEe6/Wei+TPPCePWfAILbgSEmL0IfKuZMxjYf/cLMm8w+AadsyzwrN/PWuYTYNY88AkAH3+zAmoJJKfn8O4vf/L1liMcOlV4epRLagVzTctaXN2iFp0bV9e/RZFKwt1aqW02GxEREXTs2JENGzYQGhpaZPJfmu8DWVlZ5OTkFPm6gYGBHD16lAYNGnDZZZfxzTffUKtWLcaMGcO6devYuHFjiVsh3e2cilQmrcYvISMnj5VPxdCoRjWrw5GqZPeP5hSA2almYfDBC826YB6iUnb7T0xMpHHjxjRv3pw1a9bg42PeEVy/fj1du3ZlxIgRzJ49u9hjXHHFFWzbto0dO3bQsGFDAJKTk2nTpg1BQUHs2rXL8QH/ww8/0K9fPx555BGmTZvmOMZrr73Gk08+ydy5c7nrrrtKHH9ZvxAYhkH86Qy2HU5m3uoDxP6ZCECHhuH8e2A7LqkVUuJjiQsZBmSlmjcE0k+ZPQWyUv7qNZCZUvyyrBTXxOnlW3Aj4KwbAvaf3v6Fn/sEYHj7kpJt41BKDvtP5xCfkkuW4U2u4U0uPnj5+FE9NIjqIdWICK1GZGgwNcOCiQwPwcfHz5xlwdvPfF3vc58XPLx8zZsSXt7mjA22gp9e3h47FkvECu6WqO7du5emTZsCcNlll5GWlnbB5L+03wfuuOMOPv300yJfd/ny5XTo0IHw8HDee+89Ro4cCUBCQgI1a9bkwIEDju8MF+Nu51SkMunx8s8cTsrgi4ei6diwutXhSFVzfAf853ZzeHBAGNz2ETS72uqonKJSdvv/6quvSEtLY/To0Y4PeoDOnTvTq1cvFi5cyMyZM/Hzu3A36b1797J69WqGDx9e6EM8LCyMkSNHMnHiRNasWUP37t0B+OSTTwB44oknCh3noYceYvz48cybN69UyX9J2BP97YeT2Xo4me2Hk9l2OJmk9L9aLAJ8vXjqupYMj26s4mvuzGYr6NYfat5BLK38vIIbA/YbAqnmkIPsM+bPnHTITj9nWcZfv2enQ86Zgp8Z5u85GZCbCUb+Wa+TA9k5UMKZdWxAWMHjMoALdRxILXgcKf3bvngAXoVvBnh5n/Pcx9ym0HPvC9xMuNDNBa8L32yweV3kUZJtyru/M7axmVfQVnAlHc8v8NPmVcw2lGGfCx3Dq4Tbnv3T/j71t88T2RP/iynt94EFCxawYMGCix63UaNGhVr4NeZYxLUig/04nJSh6f7EGlGt4b6f4dMh5sxh826FG/4NXe61OjKXcavkf+3atQBER0efty46OpqVK1cSFxdHu3btyrS/fRt78r927Vrq1q173tjBwMBA2rdv7zieMxxJyuDpz7ey/XAyp9PP75ro622jZe1QLm8Qxn09m6orVFXg5Q2B1c2Hs+XlmjcBcrPMn3lZf/3u+Jl9zvNMyCtYlpdr3jTIyy70u5GXQ3JaOmcyMsjIyCQzK5Ps7CxysrPwMnLxJRdf8vAlFx/y8LOZP33Iw69gmS+5+NqKKbpo5JuP/KK78ErVYWDDOOvmgNlVzXxuYMOw3zS44HYF24LjZoJhf17w07Cdsx1nbXdOYmicc6xC25b0mIX2P3/ZucdybGc7d3nRxzx7eWpWCQqcuqHyfh8oyoMPPsibb75J3759qVmzJs8++yydOnUqcau/iJRP9YLp/k6fUfIvFgmuCcO+hq8fgW0L4bvHIWEPXDepxENlKzO3Sv4PHz4MQP369c9bZ18WHx9f5Id9Sfc/e/vWrVtf8Fj169fnt99+Iz09vcjCf1lZWWRl/TXmOzk5GTC7XZzLKzeXX34/SL5hJvqX1AqmTd1QWtcNo02dUC6JCj6rgn/eBY8hUnq+YPMFnxCn/W/3AkIKHnaGYXAiJYv9CWfYl5jGiZRsTmdkk5yezen0HJIzcjh9JpukjFxy8vIBA2/y8SIfb/Icv/uQf9byfLxtBT8Ltjl7O8dP29nr8/AuOLa5bV6h4/iQh9dZr+1DXkHamI8Xhvmw5RekkQZe5GO2dResK9jOvs6bs7ctWG87+7lRsP3Z+xmFX6/gGH+9vgFFvN5fxzt7v3y8/0qRsdns6fFZy8753X58LrD+QsvM1+Ks456z3laRo8fcZmRahTi33dnZ7dA+Web5c6MRfiVS3u8DRfnnP//J6dOn6dixI/n5+Vx55ZV88cUXxe5Tms96ESleNbLJz0rn8MlEUlJUxFos1PtVCGoIq/4Nq2ZC/E7oP8Ps0VsJ2T+TLvZ571bJf3q6OTe7v7//eesCAgIKbeOM/dPT0y+47bnbF5X8T5kyhYkTJ563vEGDBkXGaLcX+PGiW4mIiJRfYmIiYWGV54t2eb8PFMXLy4tXXnmFV155pcT7lOezXkQu7PE34HGrgxAp5Gu4/2urgyi31NTUYj/v3Sr5tyfZWVlZBAYGFlqXkZFRaJuL7X+uC+0fFBR0wW1L+npjx47l8cf/+tOVlJREo0aNOHjwYKX6kuWuUlJSaNCgAYcOHVJRJSfROXUunU/n0zl1ruTkZBo2bEhEROWa0qi83wec6dzP+vz8fE6dOkWNGjUuWDOgS5curFu3rkTL3f3fe1HvxerjlmX/ku5zse3Kul7X33nH1fV3DV3/0m9TmnXOvv6GYZCamnrRmfHcKvmvV68eYHblu/TSwlMvFNcF8EL7n+tC+9erV++C29q3r169erFfLvz9/S/YKhEWFuaW/4krq9DQUJ1PJ9M5dS6dT+fTOXWu0kxb6w7K+33AmS70WR8eHl7k9t7e3hf8t1vUcnDff+/FxWzlccuyf0n3udh2ZV2v6++84+r6u4auf+m3Kcs6Z17/kjQ+u9W3gS5dugAQGxt73rrY2FiCg4Np2bJlmfc/exv770eOHOHAgQOFts3IyGDz5s2FthURERHXKO/3ASuNGjWqVMvdWUXFXN7jlmX/ku5zse3Kul7X33nH1fV3DV3/0m9T1nWuZDPcqApQQkICjRo1omXLlhec1/eee+5hzpw5ABw9etTRnfHs1vlu3brx+++/s3PnTsd4vJSUFNq0aYO/vz979uxxdNNbvHgxN9xwA4888gjTpk1zHGPq1Kk88cQTfPzxxwwdOrTE8WvuX+fS+XQ+nVPn0vl0Pp1T53Ln83nZZZeRlpbG/v37z1tXmu8DlZk7Xx+peLr+VZuuf9Vm1fV3q27/kZGRTJ48mTFjxhATE8PQoUNJSEjg9ddfJyoqihdeeMGx7dixY/noo49Yvnw5MTExjuXTpk0jJiaGnj17Mnr0aPz8/Jg1axZHjx7l+++/LzQ+7/rrr2fAgAG89dZbJCcn06tXL7Zs2cLMmTOJiYlhyJAhpYrf39+f5557rsgiglI6Op/Op3PqXDqfzqdz6lzudj7nzp3r6G138uRJsrOzeemllwCzK/3DDz8MlO77QGXmbtdHXEvXv2rT9a/arLr+btXyb/fJJ5/w2muvsXPnToKCgujTpw9TpkyhSZMmjm2GDx9+weQfYN26dTzzzDOsXr2avLw8OnfuzMSJE8/bDsxiQlOmTOHjjz/m8OHDREVFcccdd/Dcc89RrVq1Cn6nIiIiVUdMTAwrV6684LpGjRqd1wugJN8HREREpGTcMvkXEREREREREedxq4J/IiIiIiIiIuJ8Sv5FRERE3Fhubi6PPvooERERhIeHc++995KZmWl1WOIiCxcu5MorryQ4OJjGjRtbHY64UFZWFvfddx9NmzYlODiYSy+9lDfeeMPqsMSFHnroIRo0aEBoaCj16tVjzJgxZGdnl/l4Sv5FRERE3NjkyZNZvnw527ZtY8+ePezYsYN//vOfVoclLlK9enUeeeQRjyl0KSWXm5tL7dq1+fHHH0lNTeXTTz9l0qRJfPrpp1aHJi7y8MMPExcXR0pKCps3b2bLli1Mnjy5zMdT8u8E8+fPp1OnTgQGBhIZGcmdd97pqGYsRZsyZQq33XYbTZs2xWazXfRu9vHjxxkxYgRRUVEEBATQrl073nvvPdcE6+Z2797NhAkT6N69OzVr1iQkJIT27dszadIkzpw5c972OpcXt2vXLoYMGUKrVq0ICwujWrVqtGrViieeeIJjx46dt73Oaemlp6c7/v8/+OCD563XOb04m81W5CMpKanQtjqfldfs2bMZN24c9erVo2bNmjz//PN89NFH5OXlWR2auECfPn24/fbbadiwodWhiItVq1aNF198kUsuuQSbzUbHjh25/vrr+fXXX60OTVykdevWjiL0Xl5e+Pj4sGfPnjIfT8l/OU2fPp3BgwcTGBjI66+/zpgxY1i6dCnR0dEcOXLE6vDc2rhx4/j5559p1qwZ1atXL3bbpKQkrrzyShYsWMC9997LW2+9RcOGDbn//vuZOHGiiyJ2X++//z5Tp06lSZMmjB8/nn//+9+0aNGCZ599lujoaDIyMhzb6lyWTHx8PMeOHePmm29mypQpvP766/Tu3ZtZs2bRsWNHjh8/7thW57RsJkyYwMmTJy+4Tue05Hr27MncuXPPe5w9Y43Op2uU9qZ2SRoPkpKSOHToEO3bt3cs69ixIykpKefNjiDWqojrL5WHK65/bm4uv/32G+3atXNi5OIMFXn9X375ZUJCQoiMjGTjxo2MHj267IEaUmYJCQlGcHCw0bFjRyMnJ8exfN26dYbNZjPuvfdeC6Nzf3/++afj9zZt2hiNGjUqctv/+7//MwDj888/L7T8pptuMnx9fY29e/dWVJiVwrp164zTp0+ft/yZZ54xAGP69OmOZTqX5fPpp58agDFp0iTHMp3T0tu4caPh7e1tvPrqqwZgPPDAA4XW65yWDGDcfffdF91O59M1ACMiIsLo3bu3Ub169WI/19566y0DMHr06GG8/fbbxosvvmjUqFHDqFu3rnH48GHHdgcPHjQA4+jRo45l2dnZBmBs2rSpAt+NlFZFXP+zLVq0qNhjirUq+vobhmE88MADRufOnY2srKwKeAdSHq64/jt27DDGjRtnHDp0qOxxlnlPMebMmWMAxocffnjeuquuusoICQnRf84Suljy36BBA6NJkybnLV++fLkBGFOmTKnA6CqvLVu2nJdY6VyWz9q1aw3AePLJJx3LdE5LJzc31+jUqZNxww03GPv27btg8q9zWjL25D8rK8tISUkpcjudT9co6U3t0jQenD592gCMuLg4x7ITJ04YgPHHH384/01ImVXE9T+bkn/3VtHX/7HHHjPatm1rnDx50qlxi3NU9PW3+/TTT42YmJgyx6lu/+Wwdu1aAKKjo89bFx0dTWpqKnFxca4Oy+McO3aMQ4cOccUVV5y37oorrsBmszmuhRR2+PBhAGrVqgXoXJZFZmYmCQkJxMfHs2zZMv7xj38AcMMNNwA6p2XxxhtvsGPHDqZPn37B9TqnpfPZZ58RFBREaGgoNWrUYOTIkYXqUuh8uk7Tpk1LtN1XX31FWloao0ePxsfHx7G8c+fO9OrVi4ULFzqqOYeHh9OgQQM2b97s2G7Tpk2EhISo8rubqYjrL5VHRV7/MWPG8OOPP/LTTz8RGRnp1LjFOVz1/z8vL4/du3eXOU4l/+VgT6zq169/3jr7svj4eJfG5ImKO8/+/v5ERkbqPF9AXl4eL7zwAj4+PgwZMgTQuSyL2bNnU7NmTRo0aECfPn04ceIEH330EVdffTWgc1paBw4c4LnnnmP8+PE0adLkgtvonJZcly5dmDBhAosWLWLevHncfPPNfPDBB3Tt2pWjR48COp/uqLSNByNHjmTy5MkcOXKEkydP8vzzzzN8+HC8vb1dFrM4T2mvf15eHpmZmeTk5GAYBpmZmWRlZbksXnGu0l7/0aNHs2zZMn7++Wdq1qzpsjilYpTm+icnJ/Phhx+SlJSEYRhs27aNF198keuvv77Mr+9z8U2kKOnp6YD55elcAQEBhbaRsivuPIN5rnWezzd69GhWr17NSy+9RIsWLQCdy7IYMGAALVu2JC0tjU2bNvHNN99w+vRpx3qd09L5xz/+QaNGjXjyySeL3EbntOTObbEfMmQIV111FcOGDeO5557j3Xff1fl0QyVtPLAX9Ro3bhwJCQm0adOG/Px8Bg4cyCuvvOK6gMWpSnv9586dyz333OPYJjAwkEaNGqngYyVVmut/4MAB3nrrLfz9/Qu1LPfs2ZPFixe7JmBxqtJcf5vNxrx583j88cfJzs6mVq1aDBw4kOeff77Mr6/kvxyCgoIAyMrKIjAwsNA6e3V1+zZSdmef5wvJyMigdu3argzJ7T377LPMnDmTkSNHMm7cOMdyncvSq1+/vuOP8YABA7j11lvp0qUL6enpjB07Vue0FP7zn/+wePFiVq5cia+vb5Hb6ZyWz9ChQ5kwYQLfffcdoPPpjkrbeODj48O0adOYNm2aawKUClXa6z98+HCGDx/uktik4pXm+jdq1AjDMFwXnFS40lz/0NBQli1b5tTXV7f/cqhXrx5w4a79xd3VkdIp7jxnZmaSmJio83yW559/nkmTJjFs2DBmzZqFzWZzrNO5LL927drRoUMHZs6cCeicllR2djaPPfYYN954Iw0bNmT//v3s37/fcd5SU1PZv38/ycnJOqdO0LhxY8c0ijqf7qe4GzJqPPB8uv5Vm65/1Wb19VfyXw5dunQBIDY29rx1sbGxBAcH07JlS1eH5XFq165N/fr1+e23385bt3r1agzDcFyLqm7ixIlMnDiRu+66iw8++AAvr8L/xXUunSMjI4NTp04BOqcllZ6ezokTJ/j2229p0qSJ49GzZ0/A7BXQpEkT3n77bZ3TcjIMgz/++MPRmq/z6X7UeFC16fpXbbr+VZvV11/Jfzn079+foKAgpk2bRm5urmP5+vXrWbVqFYMGDcLPz8/CCD3H4MGD2bdvH1988UWh5VOnTsXHx4fbb7/dosjcxwsvvMDzzz/PkCFD+PDDD89L/O10Lkvm7GrpZ1u+fDnbt2+ne/fujmU6pxdXrVo1vvzyy/Mes2bNAuC6667jyy+/5NZbbwV0Tkvi+PHjF1z+1ltvER8fz9///nfHMp1P96LGg6pN179q0/Wv2iy//mWeJFAMwzCMN954wwCMHj16GO+8847x0ksvGTVq1DBq165txMfHWx2eW/v444+NF1980XjxxReNWrVqGeHh4Y7nb731VqFtT506ZTRt2tQICgoyxo0bZ7z33nvGjTfeaADG+PHjLXoH7mP69OkGYDRs2ND48MMPjblz5xZ6/Pjjj45tdS5LZsCAAUa3bt2MsWPHGu+8847xxhtvGEOHDjV8fX2NsLAwY9OmTY5tdU7Lbt++fQZgPPDAA4WW65xe3KOPPmq0adPGePrpp42ZM2car732mnHTTTcZgHHppZcWmgta59P1ipvn+eTJk0ZQUFCR8zyPGDHCRVFKRdH1r9p0/as2d77+NsNQFYny+uSTT3jttdfYuXMnQUFB9OnThylTphQ5jZWYYmJiWLly5QXXXaiK7dGjRxk3bhzfffcdKSkpXHLJJTz88MM8+OCDLojWvQ0fPpyPPvqoyPVXXXUVK1ascDzXuby4hQsX8tFHH7F161ZOnjyJzWajUaNG9OnTh6eeeoqGDRsW2l7ntGz2799PkyZNeOCBB3jnnXcKrdM5Ld7XX3/NzJkz2b59OwkJCdhsNpo1a8aAAQN46qmnCAsLK7S9zmfFmzt3LgcOHADMHhjZ2dk88cQTAISHh/Pwww87tn3zzTcZM2YMPXr0YOjQoSQkJPD666/j6+vL+vXrHV1DpfLQ9a/adP2rtspy/ZX8i4iIiDhBaW9qq/HAs+j6V226/lVbZbn+Sv5FREREREREPJwK/omIiIiIiIh4OCX/IiIiIiIiIh5Oyb+IiIiIiIiIh1PyLyIiIiIiIuLhlPyLiIiIiIiIeDgl/yIiIiIiIiIeTsm/iIiIiIiIiIdT8i8iIiIiIiLi4ZT8i4iIiIiIiHg4Jf8iIiIiIiIiHk7Jv4iIiIiIiIiHU/IvIpbLzc2lR48eBAUF8fvvvxda9/HHH2Oz2Xj66actik5EREREpPKzGYZhWB2EiMjBgwdp37499erVY+3atQQGBrJr1y46d+5M69at+d///oevr6/VYYqIiIiIVEpq+RcRt9CwYUPmzJnD9u3beeyxx8jKyuL222/H29ubBQsWKPEXERGpxNTLT8R6avkXEbfyyCOPMH36dHr06MGvv/7Kp59+yqBBg6wOS0RERMpJvfxErKXkX0TcSlZWFu3atWP37t0MHz6cDz74wOqQRERExEm+/PJLbrnlFh544AHefPNNunXrxv79+9m0aRNNmjSxOjwRj+ZjdQAiImfbtm0b+/fvB2DHjh3k5OSoFUBERMRD3HzzzTz88MNMnz6d7du3s2XLFj799FMl/iIuoDH/IuI2UlNTueOOO6hevTovv/wya9eu5ZlnnrE6LBEREXGiV199lebNm/Prr78yfPhwDe8TcRG1/IuI23jggQfYu3cvS5YsoW/fvmzdupVXX32V3r1707dvX6vDExERESdQLz8Ra6jlX0Tcwpw5c5g/fz5PPfWUI9F/5513aNq0KcOGDeP48eMWRygiIiLlpV5+ItZRwT8RsVxcXBydOnWibdu2/PLLL4Xu/q9fv54ePXpw9dVXs3jxYmw2m4WRioiISHkMHjyYBQsWOHr5DRkyhPnz5zuei0jFUfIvIiIiIiIVbs6cOYwcOZJ//vOfvPLKK4DZE6BDhw6kpaWxZcsWoqKiLI5SxHMp+RcRERERkQqlXn4i1lPyLyIiIiIiIuLhVPBPRERERERExMMp+RcRERERERHxcEr+RURERERERDyckn8RERERERERD6fkX0RERERERMTDKfkXERERERER8XBK/kVEREREREQ8nJJ/EREREREREQ+n5F9ERERERETEwyn5FxEREREREfFwSv5FREREREREPJySfxEREREREREPp+RfRERERERExMP9P4ztF5yonvKzAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from scipy.stats import poisson\n", + "\n", + "# Parameters\n", + "mean_poisson = 11\n", + "alpha_power_law = 2.1\n", + "x_values = np.arange(1, 1000)\n", + "\n", + "# Poisson Distribution\n", + "poisson_pmf = poisson.pmf(x_values, mean_poisson)\n", + "\n", + "# Power Law Distribution\n", + "power_law_pdf = x_values ** (-alpha_power_law)\n", + "# Normalize power-law PDF to make it a valid probability distribution\n", + "power_law_pdf /= np.sum(power_law_pdf)\n", + "\n", + "# Plotting\n", + "\n", + "fig, ax = plt.subplots(1,2, figsize=(12,4))\n", + "\n", + "ax[0].plot(x_values, poisson_pmf, label='Poisson Distribution (mean=11)')\n", + "ax[0].plot(x_values, power_law_pdf, label='Power Law Distribution (α=-2.1)')\n", + "ax[0].set_xlim([0,50])\n", + "ax[0].set_ylim([0,0.15])\n", + "ax[0].set_xlabel('x')\n", + "ax[0].set_ylabel(r'$p_k$')\n", + "fig.suptitle('Comparison of Poisson and Power Law Distributions')\n", + "ax[0].legend(frameon=False)\n", + "ax[1].loglog(x_values, poisson_pmf, label=\"poisson\")\n", + "ax[1].loglog(x_values, power_law_pdf, label=\"powerlaw\")\n", + "ax[1].set_ylim([1e-6, 1])\n", + "ax[1].set_xlabel('x')\n", + "ax[1].set_ylabel(r'$p_k$')\n", + "ax[1].legend(frameon=False);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### load sample graphs of the book" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['Actor', 'Collaboration', 'Internet', 'PowerGrid', 'Protein', 'PhoneCalls', 'Citation', 'Metabolic', 'Email', 'WWW']\n" + ] + } + ], + "source": [ + "from netsci.utils import list_sample_graphs, load_sample_graph\n", + "from netsci.analysis import graph_info\n", + "\n", + "nets = list(list_sample_graphs().keys())\n", + "print(nets)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Graph information\n", + "Directed : True\n", + "Number of nodes : 23133\n", + "Number of edges : 93439\n", + "Average degree : 8.0784\n", + "Connectivity : disconnected\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from collections import Counter\n", + "from scipy.stats import poisson\n", + "G_collab = load_sample_graph(\"Collaboration\")\n", + "graph_info(G_collab, quick=True)\n", + "in_degrees = list(dict(G_collab.in_degree()).values())\n", + "out_degrees = list(dict(G_collab.out_degree()).values())\n", + "in_degree_count = Counter(in_degrees)\n", + "out_degree_count = Counter(out_degrees)\n", + "\n", + "k_in, pk_in = zip(*in_degree_count.items())\n", + "k_out, pk_out = zip(*out_degree_count.items())\n", + "\n", + "plt.figure(figsize=(6,4))\n", + "plt.loglog(k_in, pk_in, 'r.', label=r\"$k_{in}$\")\n", + "plt.loglog(k_out, pk_out, 'b.', label=r\"$k_{out}$\")\n", + "plt.legend(frameon=1)\n", + "plt.xlabel(r\"$k_{in}, k_{out}$\")\n", + "plt.ylabel(\"pk\");" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Calculating best minimal value for power law fit\n", + " α = 3.042, σ = ± 0.327\n", + "Calculating best minimal value for power law fit\n", + " α = 5.496, σ = ± 0.937\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Values less than or equal to 0 in data. Throwing out 0 or negative values\n", + "Values less than or equal to 0 in data. Throwing out 0 or negative values\n" + ] + } + ], + "source": [ + "# find the exponent by fitting a power law by powerlaw package\n", + "import powerlaw\n", + "\n", + "for x in [k_in, k_out]:\n", + " fit = powerlaw.Fit(x) # xmax=50 we can constrain the max value for fitting\n", + " print(f\" α = {fit.power_law.alpha:6.3f}, σ = ± {fit.power_law.sigma:6.3f}\") # the exponent" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Generate the powerlaw distribution (bounded)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[0;31mSignature:\u001b[0m \u001b[0mgenerate_power_law_dist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mN\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mfloat\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mxmin\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mfloat\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mDocstring:\u001b[0m\n", + "generate power law random numbers p(k) ~ x^(-a) for a>1\n", + "\n", + "Parameters\n", + "-----------\n", + "N:\n", + " is the number of random numbers\n", + "a:\n", + " is the exponent\n", + "xmin:\n", + " is the minimum value of distribution\n", + "\n", + "Returns\n", + "-----------\n", + "value: np.array\n", + " powerlaw distribution\n", + "\u001b[0;31mFile:\u001b[0m ~/git/workshops/netsci/netsci/utils.py\n", + "\u001b[0;31mType:\u001b[0m function" + ] + } + ], + "source": [ + "generate_power_law_dist?" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[0;31mSignature:\u001b[0m\n", + "\u001b[0mgenerate_power_law_dist_bounded\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mN\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mfloat\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mxmin\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mfloat\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mxmax\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mfloat\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mseed\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mint\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\n", + "\u001b[0;34m\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mDocstring:\u001b[0m\n", + "Generate a power law distribution of floats p(k) ~ x^(-a) for a>1\n", + "which is bounded by xmin and xmax\n", + "\n", + "parameters :\n", + " N: int\n", + " number of samples in powerlaw distribution (pwd).\n", + " a: \n", + " exponent of the pwd.\n", + " xmin: \n", + " min value in pwd.\n", + " xmax: \n", + " max value in pwd.\n", + "\u001b[0;31mFile:\u001b[0m ~/git/workshops/netsci/netsci/utils.py\n", + "\u001b[0;31mType:\u001b[0m function" + ] + } + ], + "source": [ + "generate_power_law_dist_bounded?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "plotting the powerlaw distributions" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "def plot_distribution(vrs, N, a, xmin, ax, labelsize=10):\n", + "\n", + " # plotting the PDF estimated from variates\n", + " bin_min, bin_max = np.min(vrs), np.max(vrs)\n", + " bins = 10**(np.linspace(np.log10(bin_min), np.log10(bin_max), 100))\n", + " counts, edges = np.histogram(vrs, bins, density=True)\n", + " centers = (edges[1:] + edges[:-1])/2.\n", + "\n", + " # plotting the expected PDF\n", + " xs = np.linspace(bin_min, bin_max, N)\n", + " expected_pdf = [(a-1) * xmin**(a-1) * x**(-a) for x in xs] # according to eq. 4.12 network science barabasi 2016\n", + " ax.loglog(xs, expected_pdf, color='red', ls='--', label=r\"$x^{-\\gamma}$,\"+ r\"${\\gamma}$=\"+f\"{-a:.2f}\")\n", + " ax.loglog(centers, counts, 'k.', label='data')\n", + " ax.legend(fontsize=labelsize)\n", + " ax.set_xlabel(\"values\")\n", + " ax.set_ylabel(\"PDF\")\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1.000035809608483 74.39513593875918\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "np.random.seed(2)\n", + "\n", + "N = 10000\n", + "a = 3.0\n", + "xmin = 1\n", + "xmax = 100\n", + "\n", + "fig, ax = plt.subplots(1, figsize=(5,3))\n", + "x = generate_power_law_dist_bounded(N, a, xmin, xmax)\n", + "print (np.min(x), np.max(x))\n", + "plot_distribution(x, N, a, xmin, ax)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Calculating best minimal value for power law fit\n", + "fit.power_law.alpha=2.995340848455978\n", + "fit.power_law.sigma=0.02600579145725683\n" + ] + } + ], + "source": [ + "# find the exponent by fitting a power law by powerlaw package\n", + "\n", + "import powerlaw\n", + "fit = powerlaw.Fit(x) # xmax=50 we can constrain the max value for fitting\n", + "print(f\"{fit.power_law.alpha=}\") # the exponent\n", + "print(f\"{fit.power_law.sigma=}\") # standard error" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Generate descereted power law distribution" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAF9CAYAAAD4A0k5AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAABL6ElEQVR4nO3deVxVdf7H8de91w0EVMIyvYYiuORSqbSYGTmVY4s2/dLUyXRi1CbNyNTSHJcsyTZzadFkstLSmhknKy1NUafUXFKzkgQV5aaTO4soCJzfHzeuIDvcy114Px+P+/jBOd97zvc258f9+F0+H5NhGAYiIiIiPsLs7g6IiIiIOJOCGxEREfEpCm5ERETEpyi4EREREZ+i4EZERER8ioIbERER8SkKbkRERMSnKLgRERERn1LL3R3wRXl5eRw5coTAwEBMJpO7uyMiIuI1DMMgPT2dpk2bYjZXbgxGwY0LHDlyhObNm7u7GyIiIl4rJSUFq9VaqfcquHGBwMBAwP4/TFBQkJt7IyIi4j3S0tJo3ry547u0MhTcuED+VFRQUJCCGxERkUqoyrIOLSgWERERn6LgRkRERHyKghsRERHxKVpzIyIiLpebm8uFCxfc3Q3xELVr18Zisbjs+gpuRETEpTIyMrDZbBiG4e6uiIcwmUxYrVYCAgJccn0FNyIi4jK5ubnYbDb8/f1p3LixEpsKhmFw/PhxbDYbERERLhnBUXAjIiIuc+HCBQzDoHHjxvj5+bm7O+IhGjduTHJyMhcuXHBJcKMFxSIi4nIasZGCXP08KLjxQjabjfj4eGw2m7u7IiIi4nEU3HiZuLg4QkND6dmzJ6GhocTFxbm7SyIiIh5FwY0XsdlsDB8+nLy8PMBefXzEiBEawRERESlAwY0XSUxMdAQ2+XJzc0lKSnJTj0REpCQ//vgjrVq14n//+x8AJ06c4NprryU7O9vNPfN9Cm68SEREBGZz4f/JLBYL4eHhbuqRiIiUpEOHDgwYMIB169YBMG3aNJ5++mnq1Knjlv7ExsYSGRlJYGAgl19+Offddx+//PJLme+bOnUqJpOp0KtJkyaF2rz55pu0bNmSevXq0aVLF/773/+66mOUi4IbL2K1WlmwYIFj25zFYmH+/PlYrVY390xEpGbq0qULHTp0KPI6cuQIAO3bt2ffvn0kJSWxY8cOBgwY4La+btiwgZEjR7JlyxbWrFlDTk4Od955J2fPni3zve3bt+fo0aOO1549exznli1bRkxMDM8++yw7d+7klltuoXfv3hw+fNiVH6d0hjhdamqqARipqakuuX5KSooRHx9vpKSkuOT6IiLOcu7cOePnn382zp075+6uVNiHH35o1K1b17DZbI5j0dHRRseOHY0zZ86U6xpbt241Bg4caPTr189Yt25die0iIiKMG2+80cjMzHQcy8vLM2644QZj3Lhxlf8QpTh27JgBGBs2bCi13ZQpU4xrrrmmxPPXX3+98eijjxY61rZtW+OZZ54p8T2lPRfO+A7VyI0XslqtREVFacRGRMSFBgwYQJs2bYiNjQXs00pfffUVq1atokGDBuW6RkREBGvWrCEzM5PbbrutxHbLli1j586dfPvtt45jS5Ys4eDBg0yaNAmAGTNmEBAQUOqrItNBqampAAQHB5fZNjExkaZNm9KyZUsGDBjAgQMHAMjOzmbHjh3ceeedhdrfeeedbNq0qdx9cTZlKBYRkepX2lSIxQL16pWvrdkMBTMfl9S2fv2K9Q97orkXXniBBx54gKZNmzJ79mz++9//0qxZs3Jfo2HDhgC8+OKLpba77rrruOaaa0hISOD2228nMzOTCRMmMH36dIKCggB49NFH6d+/f6nXKW/fDMNgzJgxdO/enQ4dOpTa9oYbbuD999+ndevW/Pbbbzz//PN069aNn376iaysLHJzc7niiisKveeKK65wLKR2BwU3IiJS/UormHjXXfDFFxd/v/xyyMwsvu2tt8L69Rd/b9ECTpwo2q6SRTvvuecerr76aqZNm8bq1atp3759hd5/4cIFgoODywwgAFq3bu1Y4PvSSy8RHBxMdHS043xwcHC5RlmWLFnCiBEjHL+vWrWKW265pVCbUaNG8cMPP/DNN9+Ueb3evXs7fu7YsSM33XQTrVq14r333nOsIbo047BhGG7NSq3gRkREpARfffUVCQkJxY5OlEdCQgJt2rQpV9s2bdqwceNGbDYbL7/8Mp999lmhukszZsxgxowZpV5j1apV9OnThxtuuMFx7NLRnMcff5wVK1awcePGSi1vqF+/Ph07diQxMZGQkBAsFkuRUZpjx45V6r+Xsyi4ERGR6peRUfK5SwspHjtWcttL0mOQnFzpLl3q+++/p1+/fsyfP5+lS5fy97//nU8++aRC1+jYsSMrVqwoV9vWrVvzzjvv8Mwzz3DHHXfQs2fPQufLOy3l5+dHYGBgkXOGYfD444+zfPly1q9fT8uWLcv/QQrIyspi79693HLLLdSpU4cuXbqwZs0a/vSnPznarFmzhr59+1bq+s6g4EZERKpfRdbAuKptKZKTk7n77rt55plnGDx4MFdffTWRkZHs2LGDLl26OOUel2rdujUpKSn885//5McffyxyvrzTUiUZOXIkH374IZ9++imBgYGO0ZYGDRo4KrbPmzeP5cuXs3btWsf7xo4dy7333stVV13FsWPHeP7550lLS2PIkCEAjBkzhsGDB9O1a1duuukmFixYwOHDh3n00Ucr3deq0m4pERGRAk6dOkXv3r3p06cPEydOBOz5bO69916effZZp9xj0aJFRdaktG7dGrCvh3FFcta33nqL1NRUoqKiuPLKKx2vZcuWOdqcOHGC/fv3F3qfzWZj4MCBtGnThvvvv586deqwZcsWQkNDAXjwwQd5/fXXee6557j22mvZuHEjK1eudJx3B5NhVHKVlZQoLS2NBg0akJqa6ljlLiJSE50/f56DBw86steK3dSpU1m/fj3rCyyGPnXqFJdddhm7d++mU6dO7utcNSjtuXDGd6impURERKrZV199xezZswsd2717N3Xq1KFdu3Zu6pXvUHAjIiJSzTZv3lzk2O7du7n66qupXbu2G3rkW7TmRlzGZrMRHx+PzWZzd1dERDxeTEwMO3fudHc3fIKCG3GJuLg4QkND6dmzJ6GhocTFxbm7SyIiUkMouBGns9lsDB8+nLy8PADy8vIYMWKERnBERKRaKLgRp0tMTHQENvlyc3NJSkpyU49ERKQmUXAjThcREYH5kqyhFovFJXkbRERELqXgRpzOarWyYMECR00Ui8XC/PnzK1XDREREpKIU3BQjJyeHJ554guDgYBo2bEh0dDTnz593d7e8SnR0NMnJycTHx5OcnFyosq2IiIgrKbgpxowZM4iPj2fPnj0kJiby888/M378eHd3CzZsgClT4Nw5d/ekXKxWK1FRURqxERGRaqXgphgLFy5k4sSJNGvWjMaNGzN16lTee+89cnNz3depCxfgscfgueegQwdYtcp9fREREfFgXh3cxMbG0q9fP8LCwjCZTLRo0aLU9h999BFdunTBz8+PkJAQBg4cyKFDhwq1OXPmDCkp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1q188803rFmzho0bN/LUU08xefJkPv30U6Kiosr7n0FEqkjBjYh4jEGDBjFu3Djef/99brvtNj7++GN69uyJ1WoFYM+ePfzwww9MnjyZadOmFXrvwoULy3WP4OBgAE6dOuX4GeDAgQNF2rZu3Zovv/wSq9VKx44dy7y22WymR48e9OjRA7CP/HTp0oUpU6awYcOGcvVPRKpO01Ii4jEaN25M7969+c9//sOSJUs4c+ZMoSkpi8UCXBxRyffjjz+Weyt469atAfj6668LHX/11VeLtM0fMZo4cWKxIzvHjh1z/HzixIli7xUYGMipU6fK1TcRcQ6N3IiIRxkyZAgrVqzgySefJCAggPvvv99xrl27drRv356XXnqJzMxM2rRpw759+5g/fz4dOnTg+++/L/P6AwcOZOLEiQwfPpyEhAQuu+wyVq1aVWxwEhkZybRp05gyZQrXXnst/fv3p2nTphw9epQdO3awcuVKsrOzARg2bBg2m40777yT0NBQsrKy+OSTTzh27Bjjxo1z3n8gESmTghsR8Sj33HMPwcHBnDp1iqFDh+Lv7+84Z7FY+OKLLxg7dizvvfceZ8+epUOHDrz33nvs3r27XMFNUFAQK1euZMyYMcyYMcMRQC1evJhGjRoVaT958mS6dOnCnDlzeP311zl79iyXX345HTp0YPbs2Y52gwcPZtGiRbz33nscP36coKAg2rZty4cffsjAgQOd8x9HRMrFZFw6visiIiLixbTmRkRERHyKghsRERHxKQpuRERExKcouBERERGfouBGREREfIqCGxEREfEpCm5ERETEpyi4EREREZ+i4EZERER8ioIbERER8SkKbkRERMSnKLgRERERn6LgRkRERHzK/wPRJZt/vcgAhgAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from netsci.utils import generate_power_law_discrete\n", + "# Example usage\n", + "gamma = 2.5 # Power-law exponent\n", + "k_min = 1 # Minimum value of k\n", + "k_max = 1000 # Maximum value of k\n", + "size = 100000 # Number of samples\n", + "\n", + "samples = generate_power_law_discrete(size, gamma, k_min, k_max, seed=1)\n", + "fig, ax = plt.subplots(1, figsize=(6,4))\n", + "plot_distribution(samples, size, gamma, k_min, ax)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Powerlaw package\n", + "\n", + "- Alstott, J., Bullmore, E. and Plenz, D., 2014. powerlaw: a Python package for analysis of heavy-tailed distributions. PloS one, 9(1), p.e85777.\n", + "\n", + " - probability density function (PDF), \n", + " - cumulative distribution function (CDF)\n", + " - complementary cumulative distribution (CCDF)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Calculating best minimal value for power law fit\n", + "xmin progress: 00%\r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "fit.power_law.alpha=2.995340848455978\n", + "fit.power_law.sigma=0.02600579145725683\n", + "----------------------------------------------------------------------\n", + "(894.9727455051284, 5.263968413468816e-22)\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import powerlaw\n", + "fig, ax = plt.subplots(1, figsize=(6,4))\n", + "fit = powerlaw.Fit(x) # xmax=50\n", + "print(f\"{fit.power_law.alpha=}\")\n", + "print(f\"{fit.power_law.sigma=}\")\n", + "print(\"-\"*70)\n", + "print(fit.distribution_compare(\"power_law\", \"exponential\"))\n", + "\n", + "powerlaw.plot_pdf(x, linear_bins=0, color='k', marker='o', lw=1, ax=ax);" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots(1, figsize=(6,4))\n", + "fit.plot_pdf(c='b', lw=2, marker=\"*\", label='pdf', ax=ax)\n", + "fit.power_law.plot_pdf(c='b', ax=ax, ls='--', label='fit pdf')\n", + "fit.plot_ccdf(c='r', ax=ax, ls=\"-\", label='ccdf')\n", + "fit.power_law.plot_ccdf(c='r', ax=ax, ls='--', label='fit ccdf')\n", + "ax.legend(frameon=False);\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/quick_guide_igraph.html b/examples/quick_guide_igraph.html new file mode 100644 index 0000000..3430c8a --- /dev/null +++ b/examples/quick_guide_igraph.html @@ -0,0 +1,426 @@ + + + + + + + + igraph — netsci 0.1.dev1+g157bd64 documentation + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+

igraph

+
+

Quick Guide for igraph

+

Code by : Abolfazl Ziaeemehr - https://github.com/Ziaeemehr

+

Open In Colab

+

First, ensure that python-igraph is installed. You can install it using pip:

+
+
[2]:
+
+
+
try:
+    import igraph
+    print(igraph.__version__)
+except ImportError:
+    print("igraph is not installed.")
+
+# If `igraph` is not installed, you can install it using the following command (uncomment the following line):
+# !pip install python-igraph
+
+
+
+
+
+
+
+
+0.11.6
+
+
+
+
+

Creating Graphs

+
    +
  • Empty Graph

  • +
+

To create an empty graph:

+
+
[2]:
+
+
+
import igraph as ig
+g = ig.Graph()
+
+
+
+
+
+

Graph with Nodes and Edges

+

To create a graph with 10 nodes and specific edges, also get summary of the graph with print(g):

+
+
[3]:
+
+
+
g = ig.Graph(n=10, edges=[[0, 1], [0, 5]])
+print(g)
+
+
+
+
+
+
+
+
+IGRAPH U--- 10 2 --
++ edges:
+0--1 0--5
+
+
+

This will display the number of vertices and edges, and list the edges if the graph is small.

+
+
+

Assigning Attributes

+

You can set and retrieve attributes for graphs, vertices, and edges.

+
+
[4]:
+
+
+
import igraph as ig
+
+# Create a graph with 3 nodes
+g = ig.Graph(n=3)
+
+# Assign a 'color' attribute to all nodes
+g.vs["color"] = ["red", "green", "blue"]
+
+# Assign a 'label' attribute to the first node
+g.vs[0]["label"] = "Node 1"
+
+# Assign a 'label' attribute to the second node
+g.vs[1]["label"] = "Node 2"
+
+
+
+
+
[5]:
+
+
+
# Create a graph with edges
+g.add_edges([(0, 1), (1, 2)])
+
+# Assign a 'weight' attribute to all edges
+g.es["weight"] = [1.5, 2.5]
+
+
+
+
+
+

Retrieving Attributes

+
+
[6]:
+
+
+
# Get all attributes for the first node
+node_attributes = g.vs[0].attributes()
+print(node_attributes)
+
+
+
+
+
+
+
+
+{'color': 'red', 'label': 'Node 1'}
+
+
+
+
[7]:
+
+
+
# Get the 'color' attribute for all nodes
+colors = g.vs["color"]
+print(colors)
+
+
+
+
+
+
+
+
+['red', 'green', 'blue']
+
+
+
+
[8]:
+
+
+
# Get all attributes for the first edge
+edge_attributes = g.es[0].attributes()
+print(edge_attributes)
+
+
+
+
+
+
+
+
+{'weight': 1.5}
+
+
+
+
[9]:
+
+
+
# Get the 'weight' attribute for all edges
+weights = g.es["weight"]
+print(weights)
+
+
+
+
+
+
+
+
+[1.5, 2.5]
+
+
+
+
+

Load graph from adjacency list

+
+
[10]:
+
+
+
import os
+from netsci.utils import list_sample_graphs
+from netsci.utils import get_sample_dataset_path
+from netsci.utils import download_sample_dataset
+
+def load_edges(filepath):
+    edges = []
+    with open(filepath, 'r') as file:
+        for line in file:
+            if line.startswith('#'):
+                continue  # Skip comments
+            A, B = map(int, line.split())
+            edges.append((A, B))
+    return edges
+
+def load_graphi(filepath:str, directed:bool=False):
+    edges = load_edges(filepath)
+    G = ig.Graph(edges=edges, directed=directed)
+
+    return G
+
+path = get_sample_dataset_path()
+
+# make sure you have downloaded the sample dataset
+download_sample_dataset()
+
+file_name = os.path.join(path, "collaboration.edgelist.txt")
+print(f"{path=}")
+
+G = load_graphi(file_name, directed=False)
+
+print(f"{'Number of vertices:':<30s} {G.vcount():20d}")
+print(f"{'Number of edges:':<30s} {G.ecount():20d}")
+print(f"{'Is directed:':<30s} {str(G.is_directed()):>20s}")
+print(f"{'Density:':<30s} {G.density():20.6f}")
+print(f"{'Average clustering coefficient:':30s}{G.transitivity_undirected():20.6f}")
+
+
+
+
+
+
+
+
+File /Users/tng/git/workshops/netsci/netsci/datasets/networks.zip already exists.
+path='/Users/tng/git/workshops/netsci/netsci/datasets/'
+Number of vertices:                           23133
+Number of edges:                              93439
+Is directed:                                  False
+Density:                                   0.000349
+Average clustering coefficient:            0.264317
+
+
+
+
+

Visualizing Graphs

+
+
[11]:
+
+
+
# need to install matplotlib and pycairo
+# !pip install pycairo -q
+
+
+
+
+
[12]:
+
+
+
import matplotlib.pyplot as plt
+
+fig, ax = plt.subplots()
+
+# Compute a layout
+layout = g.layout("kk")  # Kamada-Kawai layout
+
+# Define visual style
+visual_style = {}
+visual_style["vertex_size"] = 20
+visual_style["vertex_label"] = range(g.vcount())
+visual_style["layout"] = layout
+visual_style["bbox"] = (300, 300)  # Bounding box size
+visual_style["margin"] = 20
+
+# Plot the graph
+ig.plot(g, **visual_style)
+
+# Plot the graph in the axes
+ig.plot(g, target=ax, **visual_style)
+plt.show()
+
+
+
+
+
+
+
+../_images/examples_quick_guide_igraph_22_0.png +
+
+
+
[ ]:
+
+
+

+
+
+
+
+
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/examples/quick_guide_igraph.ipynb b/examples/quick_guide_igraph.ipynb new file mode 100644 index 0000000..3d250aa --- /dev/null +++ b/examples/quick_guide_igraph.ipynb @@ -0,0 +1,375 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# [igraph](https://github.com/Ziaeemehr/netsci/blob/main/docs/examples/quick_guide_igraph.ipynb)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### **Quick Guide for igraph**\n", + "\n", + "Code by : Abolfazl Ziaeemehr \n", + "- https://github.com/Ziaeemehr\n", + "\n", + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First, ensure that python-igraph is installed. You can install it using pip:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.11.6\n" + ] + } + ], + "source": [ + "try:\n", + " import igraph\n", + " print(igraph.__version__)\n", + "except ImportError:\n", + " print(\"igraph is not installed.\")\n", + " \n", + "# If `igraph` is not installed, you can install it using the following command (uncomment the following line):\n", + "# !pip install python-igraph" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Creating Graphs\n", + "- Empty Graph\n", + "\n", + "To create an empty graph:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import igraph as ig\n", + "g = ig.Graph()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Graph with Nodes and Edges\n", + "To create a graph with 10 nodes and specific edges, also get summary of the graph with `print(g)`:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "IGRAPH U--- 10 2 --\n", + "+ edges:\n", + "0--1 0--5\n" + ] + } + ], + "source": [ + "g = ig.Graph(n=10, edges=[[0, 1], [0, 5]])\n", + "print(g)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This will display the number of vertices and edges, and list the edges if the graph is small." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Assigning Attributes\n", + "You can set and retrieve attributes for graphs, vertices, and edges." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "import igraph as ig\n", + "\n", + "# Create a graph with 3 nodes\n", + "g = ig.Graph(n=3)\n", + "\n", + "# Assign a 'color' attribute to all nodes\n", + "g.vs[\"color\"] = [\"red\", \"green\", \"blue\"]\n", + "\n", + "# Assign a 'label' attribute to the first node\n", + "g.vs[0][\"label\"] = \"Node 1\"\n", + "\n", + "# Assign a 'label' attribute to the second node\n", + "g.vs[1][\"label\"] = \"Node 2\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# Create a graph with edges\n", + "g.add_edges([(0, 1), (1, 2)])\n", + "\n", + "# Assign a 'weight' attribute to all edges\n", + "g.es[\"weight\"] = [1.5, 2.5]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Retrieving Attributes" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'color': 'red', 'label': 'Node 1'}\n" + ] + } + ], + "source": [ + "# Get all attributes for the first node\n", + "node_attributes = g.vs[0].attributes()\n", + "print(node_attributes)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['red', 'green', 'blue']\n" + ] + } + ], + "source": [ + "# Get the 'color' attribute for all nodes\n", + "colors = g.vs[\"color\"]\n", + "print(colors)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'weight': 1.5}\n" + ] + } + ], + "source": [ + "# Get all attributes for the first edge\n", + "edge_attributes = g.es[0].attributes()\n", + "print(edge_attributes)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1.5, 2.5]\n" + ] + } + ], + "source": [ + "# Get the 'weight' attribute for all edges\n", + "weights = g.es[\"weight\"]\n", + "print(weights)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Load graph from adjacency list" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "File /Users/tng/git/workshops/netsci/netsci/datasets/networks.zip already exists.\n", + "path='/Users/tng/git/workshops/netsci/netsci/datasets/'\n", + "Number of vertices: 23133\n", + "Number of edges: 93439\n", + "Is directed: False\n", + "Density: 0.000349\n", + "Average clustering coefficient: 0.264317\n" + ] + } + ], + "source": [ + "import os\n", + "from netsci.utils import list_sample_graphs\n", + "from netsci.utils import get_sample_dataset_path\n", + "from netsci.utils import download_sample_dataset\n", + "\n", + "def load_edges(filepath):\n", + " edges = []\n", + " with open(filepath, 'r') as file:\n", + " for line in file:\n", + " if line.startswith('#'):\n", + " continue # Skip comments\n", + " A, B = map(int, line.split())\n", + " edges.append((A, B))\n", + " return edges\n", + "\n", + "def load_graphi(filepath:str, directed:bool=False):\n", + " edges = load_edges(filepath)\n", + " G = ig.Graph(edges=edges, directed=directed)\n", + "\n", + " return G\n", + "\n", + "path = get_sample_dataset_path()\n", + "\n", + "# make sure you have downloaded the sample dataset\n", + "download_sample_dataset()\n", + "\n", + "file_name = os.path.join(path, \"collaboration.edgelist.txt\")\n", + "print(f\"{path=}\")\n", + "\n", + "G = load_graphi(file_name, directed=False)\n", + "\n", + "print(f\"{'Number of vertices:':<30s} {G.vcount():20d}\")\n", + "print(f\"{'Number of edges:':<30s} {G.ecount():20d}\")\n", + "print(f\"{'Is directed:':<30s} {str(G.is_directed()):>20s}\")\n", + "print(f\"{'Density:':<30s} {G.density():20.6f}\")\n", + "print(f\"{'Average clustering coefficient:':30s}{G.transitivity_undirected():20.6f}\")\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Visualizing Graphs" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "# need to install matplotlib and pycairo\n", + "# !pip install pycairo -q " + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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GZDftW/fPtxuN99//705e/jhh3n00UdxOp0WJhMRkaKgMiC/KTMzk2nTppGXlwdA6dKlSUxMpE2bNhYnExGRoqIyIJdUUFDAvHnzWLFihTmrV68eLpeLG2+80cJkIiJS1FQG5FdOnDhBWloa27dvN2edO3fmqaeeIioqysJkIiJSHFQG5Ge2bNnC+PHjOX36NAAREREMHTqU+++/X8sGRURClMqAAIXLBpctW8aCBQvMZYM33HADLpeLRo0aWZxORESKk8qAcP78eaZOncqnn35qzlq0aEFSUhLly5e3MJmIiJQElQGb27NnD263m4MHD5qzvn370rdvXy0bFBGxCZUBG/vwww+ZOXMmFy5cAKBs2bIkJibSunVri5OJiEhJUhmwofz8fObOncuqVavMWYMGDXC5XFSrVs3CZCIiYgWVAZs5duwYaWlp7Nixw5x16dKF4cOHExkZaWEyERGxisqAjXz++edMmDCBs2fPAoXLBocPH07Xrl0tTiYiIlZSGbABv9/P0qVLWbRoEYZhAFC1alVSU1Np0KCBxelERMRqKgMh7ty5c0yZMoWNGzeas9atW5OYmEjZsmUtTCYiIoFCZSCE7dq1C7fbzZEjRwBwOBz8+c9/5pFHHiEsLMzidCIiEihUBkLUmjVreOGFF8jPzwegXLlyJCUl0bJlS4uTiYhIoFEZCDH5+fnMnj2b1atXm7NGjRrhcrm44YYbLEwmIiKBSmUghBw5cgSPx8O3335rzv7rv/6LwYMHa9mgiIhclspAiPjss8+YNGkS586dA6BUqVKMGDGCzp07W5xMREQCncpAkPP5fLz66qssWbLEXDZYvXp1UlNTqVevnsXpREQkGKgMBLGzZ88yceJENm3aZM7atm3LM888Q5kyZSxMJiIiwURlIEh98803eDwejh07BkBYWBh/+ctf6NmzJw6Hw+J0IiISTFQGgoxhGKxevZrZs2dTUFAAQIUKFRg7dizNmze3NpyIiAQllYEgkpeXx/PPP88HH3xgzpo0aUJKSgqVK1e2MJmIiAQzlYEgcejQIdxuN99995056969O4MGDSIiIsLCZCIiEuxUBoLAhg0bmDx5MufPnwcgKiqKUaNG8cc//tHiZCIiEgpUBgKYz+dj4cKFvP766+asZs2auFwu6tSpY10wEREJKSoDAerUqVNMmDCBLVu2mLN27dox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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "fig, ax = plt.subplots()\n", + "\n", + "# Compute a layout\n", + "layout = g.layout(\"kk\") # Kamada-Kawai layout\n", + "\n", + "# Define visual style\n", + "visual_style = {}\n", + "visual_style[\"vertex_size\"] = 20\n", + "visual_style[\"vertex_label\"] = range(g.vcount())\n", + "visual_style[\"layout\"] = layout\n", + "visual_style[\"bbox\"] = (300, 300) # Bounding box size\n", + "visual_style[\"margin\"] = 20\n", + "\n", + "# Plot the graph\n", + "ig.plot(g, **visual_style)\n", + "\n", + "# Plot the graph in the axes\n", + "ig.plot(g, target=ax, **visual_style)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/quick_guide_networkx.html b/examples/quick_guide_networkx.html new file mode 100644 index 0000000..22fdeac --- /dev/null +++ b/examples/quick_guide_networkx.html @@ -0,0 +1,267 @@ + + + + + + + + Networkx — netsci 0.1.dev1+g157bd64 documentation + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+

Networkx

+
+

Quick Guide for Networkx

+

Code by : Abolfazl Ziaeemehr - https://github.com/Ziaeemehr

+

Open In Colab

+
+

Creating Graphs

+
+
+
+

Basic Graph Types

+

NetworkX provides several types of graphs: - Graph: An undirected graph. - DiGraph: A directed graph. - MultiGraph: An undirected graph that can have multiple edges between nodes. - MultiDiGraph: A directed graph with multiple edges.

+

You can create an empty graph as follows:

+
+
[8]:
+
+
+
import numpy as np
+import networkx as nx
+
+G = nx.Graph()  # or nx.DiGraph(), nx.MultiGraph(), nx.MultiDiGraph()
+
+
+
+
+
+

Adding Nodes and Edges

+

You can add nodes and edges to a graph using the following methods:

+
+
[13]:
+
+
+
# Add a single node
+G.add_node(1)
+
+# Add multiple nodes
+G.add_nodes_from([2, 3])
+
+# Add an edge between two nodes
+G.add_edge(1, 2)
+
+# Add multiple edges
+G.add_edges_from([(2, 3), (3, 4)])
+
+# get degree distribution
+degrees = dict(G.degree())
+degrees
+
+
+
+
+
[13]:
+
+
+
+
+{1: 1, 2: 2, 3: 2, 4: 1}
+
+
+

Nodes can be any hashable Python object except None.

+
+
+

Node and Edge Attributes

+

You can also add attributes to nodes and edges:

+
+
[4]:
+
+
+
# Add node with attributes
+G.add_node(4, color='red')
+
+# Add edge with attributes
+G.add_edge(1, 3, weight=4.2)
+
+
+
+
+
+

Graph Algorithms

+

NetworkX provides a wide range of graph algorithms, such as shortest path, clustering, and many others. For example, to find the shortest path using Dijkstra’s algorithm:

+
+
[5]:
+
+
+
# Create a weighted graph
+G = nx.Graph()
+edges = [('a', 'b', 0.3), ('b', 'c', 0.9), ('a', 'c', 0.5), ('c', 'd', 1.2)]
+G.add_weighted_edges_from(edges)
+
+# Find shortest path
+path = nx.dijkstra_path(G, 'a', 'd')
+print(path)  # Output: ['a', 'c', 'd']
+
+
+
+
+
+
+
+
+['a', 'c', 'd']
+
+
+
+
+

Visualization

+

NetworkX includes basic functionality for visualizing graphs, although it is primarily designed for graph analysis. You can use Matplotlib to draw graphs:

+
+
[6]:
+
+
+
import matplotlib.pyplot as plt
+
+G = nx.complete_graph(5)
+nx.draw(G, with_labels=True)
+plt.show()
+
+
+
+
+
+
+
+../_images/examples_quick_guide_networkx_13_0.png +
+
+
+
[ ]:
+
+
+

+
+
+
+
+
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/examples/quick_guide_networkx.ipynb b/examples/quick_guide_networkx.ipynb new file mode 100644 index 0000000..60bf575 --- /dev/null +++ b/examples/quick_guide_networkx.ipynb @@ -0,0 +1,212 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# [Networkx](https://github.com/Ziaeemehr/netsci/blob/main/docs/examples/quick_guide_networkx.ipynb)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "#### **Quick Guide for Networkx**\n", + "\n", + "Code by : Abolfazl Ziaeemehr \n", + "- https://github.com/Ziaeemehr\n", + "\n", + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Creating Graphs\n", + "\n", + "#### Basic Graph Types\n", + "\n", + "NetworkX provides several types of graphs:\n", + "- **Graph**: An undirected graph.\n", + "- **DiGraph**: A directed graph.\n", + "- **MultiGraph**: An undirected graph that can have multiple edges between nodes.\n", + "- **MultiDiGraph**: A directed graph with multiple edges." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can create an empty graph as follows:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import networkx as nx\n", + "\n", + "G = nx.Graph() # or nx.DiGraph(), nx.MultiGraph(), nx.MultiDiGraph()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Adding Nodes and Edges\n", + "You can add nodes and edges to a graph using the following methods:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{1: 1, 2: 2, 3: 2, 4: 1}" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Add a single node\n", + "G.add_node(1)\n", + "\n", + "# Add multiple nodes\n", + "G.add_nodes_from([2, 3])\n", + "\n", + "# Add an edge between two nodes\n", + "G.add_edge(1, 2)\n", + "\n", + "# Add multiple edges\n", + "G.add_edges_from([(2, 3), (3, 4)])\n", + "\n", + "# get degree distribution\n", + "degrees = dict(G.degree())\n", + "degrees" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Nodes can be any hashable Python object except None." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Node and Edge Attributes\n", + "You can also add attributes to nodes and edges:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "# Add node with attributes\n", + "G.add_node(4, color='red')\n", + "\n", + "# Add edge with attributes\n", + "G.add_edge(1, 3, weight=4.2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Graph Algorithms\n", + "NetworkX provides a wide range of graph algorithms, such as shortest path, clustering, and many others. For example, to find the shortest path using Dijkstra's algorithm:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['a', 'c', 'd']\n" + ] + } + ], + "source": [ + "# Create a weighted graph\n", + "G = nx.Graph()\n", + "edges = [('a', 'b', 0.3), ('b', 'c', 0.9), ('a', 'c', 0.5), ('c', 'd', 1.2)]\n", + "G.add_weighted_edges_from(edges)\n", + "\n", + "# Find shortest path\n", + "path = nx.dijkstra_path(G, 'a', 'd')\n", + "print(path) # Output: ['a', 'c', 'd']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Visualization\n", + "NetworkX includes basic functionality for visualizing graphs, although it is primarily designed for graph analysis. You can use Matplotlib to draw graphs:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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JZGJefXthbGefR75LG8AcFn6ZYvGffAsb4ZJIiIyNZ6hJBLB1lmDYSEx7vUcC4kZts4abNQxiYiIngQDJZEIBthbY8NDz9s2ho3BMgxo4ws/RERETWGgJBJJZIArVk7xNspY70zxQUSAq1HGIiIiaileyiES2Q8phVifmAGNTnjsze+HmUvMYCExw8ZgGcMkERGJioGSqB0oqlBh7aGrOJNTBnOJ2SOD5YPXx3r2wdZZg7nNTUREomOgJGpHlCV3sSe5ECezS1FYrsLD35xmuN+0fLy3E+aOdOVtbiIiajcYKInaqRq1BvnlNajX6NDNQoKBDjZ8Ag4REbVLDJREREREZBDe8iYiIiIigzBQEhEREZFBGCiJiIiIyCAMlERERERkEAZKIiIiIjIIAyURERERGYSBkoiIiIgMwkBJRERERAZhoCQiIiIigzBQEhEREZFBGCiJiIiIyCAMlERERERkEAZKIiIiIjIIAyURERERGYSBkoiIiIgMwkBJRERERAZhoCQiIiIigzBQEhEREZFBGCiJiIiIyCAMlERERERkEAZKIiIiIjIIAyURERERGYSBkoiIiIgMwkBJRERERAZhoCQiIiIigzBQEhEREZFBGCiJiIiIyCAMlERERERkEAZKIiIiIjIIAyURERERGYSBkoiIiIgMwkBJRERERAZhoCQiIiIigzBQEhEREZFBGCiJiIiIyCAMlERERERkEAZKIiIiIjLI/wMVJ4BQPoQRMQAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "G = nx.complete_graph(5)\n", + "nx.draw(G, with_labels=True)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/genindex.html b/genindex.html new file mode 100644 index 0000000..0747d20 --- /dev/null +++ b/genindex.html @@ -0,0 +1,247 @@ + + + + + + + Index — netsci 0.1.dev1+g157bd64 documentation + + + + + + + + + + + + +
+ + +
+
+ + + + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..648e92e --- /dev/null +++ b/index.html @@ -0,0 +1,640 @@ + + + + + + + + Python codes for Network Science, Barabási, 2013. — netsci 0.1.dev1+g157bd64 documentation + + + + + + + + + + + + + + + +
+
+
+
+ +
+

Python codes for Network Science, Barabási, 2013.

+
    +
  • Barabási, A.L., 2013. Network science. Philosophical Transactions of the Royal Society A: Mathematical, Physical and Engineering Sciences, 371(1987), p.20120375.

  • +
+
+

Installation, How to use

+
    +
  • using on Colab (Recommended)

    +
      +
    • Go to examples

    • +
    • Open a notebook and click on “open on colab”

    • +
    • Uncomment the cell with pip install command to install the netsci package.

    • +
    +
  • +
  • using on local machines

  • +
+
pip3 install -e .
+# or
+pip install "git+https://github.com/Ziaeemehr/netsci.git"
+
+
+
+

Indices and tables

+ +
+
+
+

Table of Chapters

+ + + + + + + + + + + + + + + + + + + + + + + +

View Notebook

Open in Colab

Networkx quick guide

Networkx quick guide [C]

Igraph quick guide

Igraph quick guide [C]

Chapter 2

Chapter 2 [C]

Chapter 3

Chapter 3 [C]

Chapter 4

Chapter 4 [C]

+
+
+

Chapters

+ +
+
+

API and documentation

+
+

netsci.analysis

+
+
+find_sap(G, start, target, path=None)[source]
+

Finds all self-avoiding paths (SAPs) in a given graph from a start node to a target node. +A self-avoiding path is a path that does not revisit any node.

+
+
Parameters:
+
+
graphNetworkX graph

The input graph where SAPs will be found.

+
+
startstr or int

The node where the search for SAPs starts.

+
+
targetstr or int

The node where the search for SAPs ends.

+
+
pathlist, optional

Internal parameter used to keep track of the current path during the search.

+
+
+
+
Yields:
+
+
list

A self-avoiding path from the start node to the target node.

+
+
+
+
+

Examples

+
>>> import networkx as nx
+>>> G = nx.Graph()
+>>> edges = [('A', 'B'), ('A', 'C'), ('B', 'D'), ('B', 'E'), ('C', 'F'), ('E', 'F')]
+>>> G.add_edges_from(edges)
+>>> start_node = 'A'
+>>> target_node = 'F'
+>>> all_saps = list(find_sap(G, start_node, target_node))
+>>> for path in all_saps:
+>>>     print("->".join(path))
+
+
+
+ +
+
+is_hamiltonian_path(G, path)[source]
+

Check if a given path is a Hamiltonian path in a graph.

+
+ +
+
+find_hamiltonian_path(G)[source]
+

find the Hamiltonian path in given graph.

+
+
Parameters:
+
+
G: nx.Graph or nx.DiGraph

input graph.

+
+
Returns
+
valuelist of nodes in Hamiltonian path if exists, otherwise None.
+
+
+
+
+ +
+
+check_connectivity(G)[source]
+

Check if the graph is connected.

+
+
Parameters:
+
+
Gnetworkx.Graph, networkx.DiGraph

The input graph.

+
+
+
+
Returns:
+
+
connectivity: (str)

for directed graphs, it returns +- “weakly connected” +- “strongly connected” +- “disconnected”. +for undirected graphs, +- “connected” +- “disconnected”.

+
+
+
+
+
+ +
+
+graph_info(G, quick=True)[source]
+

Generate various graph information.

+
+
Parameters:
+
+
G(networkx.Graph, networkx.DiGraph)

The input graph for which the information is to be generated.

+
+
+
+
+
+ +
+
+longest_shortest_path(G)[source]
+

Calculate the longest shortest path (diameter) in a given graph.

+
+
Parameters:
+
+
G (networkx.Graph or networkx.DiGraph):

The input graph, which can be directed or undirected. +The graph should be connected, otherwise the diameter will not be defined.

+
+
+
+
Returns:
+
+
valueint, float

The longest shortest path (diameter) in the graph. +If the graph is empty, returns 0. +If the graph is not connected, returns float(‘inf’).

+
+
+
+
+
+ +
+
+average_degree(G)[source]
+

Calculate the average degree of a graph.

+
+
Parameters:
+
+
G (networkx.Graph or networkx.DiGraph):

The input graph, which can be directed or undirected.

+
+
+
+
Returns:
+
+
vlaue: float

The average degree of the graph.

+
+
+
+
+
+ +
+
+

netsci.utils

+
+
+get_adjacency_list(G)[source]
+

Generate an adjacency list representation of a given graph.

+
+
Parameters:
+
+
G (networkx.Graph, networkx.DiGraph):

The input graph for which the adjacency list is to be generated.

+
+
+
+
Returns:
+
+
value: dict

A dictionary where each key is a node in the graph and the corresponding value is a list of neighboring nodes.

+
+
+
+
+
+ +
+
+download_sample_dataset()[source]
+
+ +
+
+load_sample_graph(name, verbose=False)[source]
+

Load a graph and return it as a NetworkX graph.

+
+
Parameters:
+
+
name: str

The name of the graph. Get names from netsci.utils.show_sample_graphs().

+
+
verbose: bool, optional

If True, print information about the loaded graph. Default is True.

+
+
+
+
Returns:
+
+
value: networkx.Graph

Loaded graph.

+
+
+
+
+
+ +
+
+list_sample_graphs()[source]
+

make a list of available real world graphs on datasets

+
+ +
+
+generate_power_law_dist(N: int, a: float, xmin: float)[source]
+

generate power law random numbers p(k) ~ x^(-a) for a>1

+
+
Parameters:
+
+
N:

is the number of random numbers

+
+
a:

is the exponent

+
+
xmin:

is the minimum value of distribution

+
+
+
+
Returns:
+
+
value: np.array

powerlaw distribution

+
+
+
+
+
+ +
+
+generate_power_law_dist_bounded(N: int, a: float, xmin: float, xmax: float, seed: int = -1)[source]
+

Generate a power law distribution of floats p(k) ~ x^(-a) for a>1 +which is bounded by xmin and xmax

+
+
parameters :
+
N: int

number of samples in powerlaw distribution (pwd).

+
+
a:

exponent of the pwd.

+
+
xmin:

min value in pwd.

+
+
xmax:

max value in pwd.

+
+
+
+
+
+ +
+
+generate_power_law_discrete(N: int, a: float, xmin: float, xmax: float, seed: int = -1)[source]
+

Generate a power law distribution of p(k) ~ x^(-a) for a>1, +with discrete values.

+
+ +
+
+tune_min_degree(N: int, a: float, xmin: int, xmax: int, max_iteration: int = 100)[source]
+

Find the minimum degree value of a power law graph that results in a connected graph

+
+ +
+
+make_powerlaw_graph(N: int, a: float, avg_degree: int, xmin: int = 1, xmax: int = 10000, seed: int = -1, xtol=0.01, degree_interval=5.0, plot=False, **kwargs)[source]
+

make a powerlaw graph with the given parameters

+
+
Parameters:
+
+
N:

number of nodes

+
+
a: float

exponent of the power law distribution

+
+
avg_degree:

expected average degree

+
+
xmin: int, optional

minimum value in the power law distribution. Default is 1.

+
+
xmax: int, optional

maximum value in the power law distribution. Default is 10000.

+
+
seed: int, optional

Seed for reproducibility. Default is -1.

+
+
xtol: float, optional

tolerance for bisection method. Default is 0.01.

+
+
degree_interval: float, optional

interval for bisection method. Default is 5.0.

+
+
plot: bool, optional

If True, plot the power law distribution. Default is False.

+
+
kwargs: obtional

additional keyword arguments for plot_pdf function.

+
+
+
+
+
+ +
+
+generate_power_law_discrete_its(alpha: float, k_min: int, k_max: int, size: int = 1)[source]
+

Generates the power law discrete distributions using the inverse transform sampling method.

+
+
Parameters:
+
+
alpha

Power law exponent.

+
+
k_min

Minimum degree.

+
+
k_max

Maximum degree.

+
+
size

Number of samples to generate. Defaults to 1.

+
+
+
+
Returns:
+
+
np.array:

Array of generated power law discrete distributions.

+
+
+
+
+

References

+

Devroye, L. (1986). “Non-Uniform Random Variate Generation.” Springer-Verlag, New York.

+

Examples

+
>>> gamma = 2.5  # Power-law exponent
+>>> k_min = 1    # Minimum value of k
+>>> k_max = 1000 # Maximum value of k
+>>> size = 10000 # Number of samples
+>>> samples = power_law_discrete(gamma, k_min, k_max, size)
+
+
+
+ +
+
+get_sample_dataset_path()[source]
+
+ +
+
+

netsci.plot

+
+
+plot_graph(G, **kwargs)[source]
+

Plots a NetworkX graph with customizable options.

+
+
Parameters:
+
+
GNetworkX graph

A NetworkX graph object (e.g., nx.Graph, nx.DiGraph).

+
+
**kwargskeyword arguments

Additional keyword arguments to customize the plot. These can include:

+
+
node_colorstr or list, optional

Color of the nodes (can be a single color or a list of colors).

+
+
node_sizeint or list, optional

Size of the nodes (single value or list of sizes).

+
+
edge_colorstr or list, optional

Color of the edges (can be a single color or a list of colors).

+
+
widthfloat, optional

Width of the edges.

+
+
with_labelsbool, optional

Whether to draw node labels or not.

+
+
font_sizeint, optional

Size of the font for node labels.

+
+
font_colorstr, optional

Color of the font for node labels.

+
+
titlestr, optional

Title of the plot.

+
+
seedint, optional

Seed for the random layout algorithm.

+
+
figsizetuple, optional

Size of the figure.

+
+
ax: axes object

Axes object to draw the plot on. Defaults to None, which will create a new figure.

+
+
pos: object, optional

Graph layout (e.g., nx.spring_layout, nx.circular_layout), nx.kamada_kaway_layout(G). +Defaults to nx.spring_layout(G).

+
+
+
+
+
+
+
+ +
+
+
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/objects.inv b/objects.inv new file mode 100644 index 0000000..2155f6b Binary files /dev/null and b/objects.inv differ diff --git a/py-modindex.html b/py-modindex.html new file mode 100644 index 0000000..8c88906 --- /dev/null +++ b/py-modindex.html @@ -0,0 +1,113 @@ + + + + + + + Python Module Index — netsci 0.1.dev1+g157bd64 documentation + + + + + + + + + + + + + + + +
+
+
+
+ + +

Python Module Index

+ +
+ n +
+ + + + + + + + + + + + + + + + +
 
+ n
+ netsci +
    + netsci.analysis +
    + netsci.plot +
    + netsci.utils +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/search.html b/search.html new file mode 100644 index 0000000..d71ace6 --- /dev/null +++ b/search.html @@ -0,0 +1,100 @@ + + + + + + + Search — netsci 0.1.dev1+g157bd64 documentation + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +

Search

+ + + + +

+ Searching for multiple words only shows matches that contain + all words. +

+ + +
+ + + +
+ + +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/searchindex.js b/searchindex.js new file mode 100644 index 0000000..99e19cc --- /dev/null +++ b/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"alltitles": {"API and documentation": [[5, "module-netsci"]], "Adding Nodes and Edges": [[4, "Adding-Nodes-and-Edges"]], "Assigning Attributes": [[3, "Assigning-Attributes"]], "Basic Graph Types": [[4, "Basic-Graph-Types"]], "Binimial distribution": [[1, "Binimial-distribution"]], "Chapter 2": [[0, null]], "Chapter 3": [[1, null]], "Chapter 4": [[2, null]], "Chapters": [[5, "chapters"]], "Clustering coefficient": [[1, "Clustering-coefficient"]], "Contents:": [[5, null]], "Creating Graphs": [[3, "Creating-Graphs"], [4, "Creating-Graphs"]], "Degree distribution of real networks": [[1, "Degree-distribution-of-real-networks"]], "Generate the powerlaw distribution (bounded)": [[2, "Generate-the-powerlaw-distribution-(bounded)"]], "Graph Algorithms": [[4, "Graph-Algorithms"]], "Graph Theory": [[0, "Graph-Theory"]], "Graph with Nodes and Edges": [[3, "Graph-with-Nodes-and-Edges"]], "Indices and tables": [[5, "indices-and-tables"]], "Installation, How to use": [[5, "installation-how-to-use"]], "Load graph from adjacency list": [[3, "Load-graph-from-adjacency-list"]], "Networkx": [[4, null]], "Node and Edge Attributes": [[4, "Node-and-Edge-Attributes"]], "Powerlaw package": [[2, "Powerlaw-package"]], "Python codes for Network Science, Barab\u00e1si, 2013.": [[5, null]], "Quick Guide for Networkx": [[4, "Quick-Guide-for-Networkx"]], "Quick Guide for igraph": [[3, "Quick-Guide-for-igraph"]], "Random Networks": [[1, "Random-Networks"]], "Retrieving Attributes": [[3, "Retrieving-Attributes"]], "THE SCALE-FREE PROPERTY": [[2, "THE-SCALE-FREE-PROPERTY"]], "Table 2.1": [[0, "Table-2.1"]], "Table of Chapters": [[5, "table-of-chapters"]], "The evolution of a random network": [[1, "The-evolution-of-a-random-network"]], "Visualization": [[4, "Visualization"]], "Visualizing Graphs": [[3, "Visualizing-Graphs"]], "igraph": [[3, null]], "load sample graphs of the book": [[2, "load-sample-graphs-of-the-book"]], "netsci.analysis": [[5, "module-netsci.analysis"]], "netsci.plot": [[5, "module-netsci.plot"]], "netsci.utils": [[5, "module-netsci.utils"]]}, "docnames": ["examples/chap_02", "examples/chap_03", "examples/chap_04", "examples/quick_guide_igraph", "examples/quick_guide_networkx", "index"], "envversion": {"nbsphinx": 4, "sphinx": 62, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1}, "filenames": ["examples/chap_02.ipynb", "examples/chap_03.ipynb", "examples/chap_04.ipynb", "examples/quick_guide_igraph.ipynb", "examples/quick_guide_networkx.ipynb", "index.rst"], "indexentries": {"average_degree() (in module netsci.analysis)": [[5, "netsci.analysis.average_degree", false]], "check_connectivity() (in module netsci.analysis)": [[5, "netsci.analysis.check_connectivity", false]], "download_sample_dataset() (in module netsci.utils)": [[5, "netsci.utils.download_sample_dataset", false]], "find_hamiltonian_path() (in module netsci.analysis)": [[5, "netsci.analysis.find_hamiltonian_path", false]], "find_sap() (in module netsci.analysis)": [[5, "netsci.analysis.find_sap", false]], "generate_power_law_discrete() (in module netsci.utils)": [[5, "netsci.utils.generate_power_law_discrete", false]], "generate_power_law_discrete_its() (in module netsci.utils)": [[5, "netsci.utils.generate_power_law_discrete_its", false]], "generate_power_law_dist() (in module netsci.utils)": [[5, "netsci.utils.generate_power_law_dist", false]], "generate_power_law_dist_bounded() (in module netsci.utils)": [[5, "netsci.utils.generate_power_law_dist_bounded", false]], "get_adjacency_list() (in module netsci.utils)": [[5, "netsci.utils.get_adjacency_list", false]], "get_sample_dataset_path() (in module netsci.utils)": [[5, "netsci.utils.get_sample_dataset_path", false]], "graph_info() (in module netsci.analysis)": [[5, "netsci.analysis.graph_info", false]], "is_hamiltonian_path() (in module netsci.analysis)": [[5, "netsci.analysis.is_hamiltonian_path", false]], "list_sample_graphs() (in module netsci.utils)": [[5, "netsci.utils.list_sample_graphs", false]], "load_sample_graph() (in module netsci.utils)": [[5, "netsci.utils.load_sample_graph", false]], "longest_shortest_path() (in module netsci.analysis)": [[5, "netsci.analysis.longest_shortest_path", false]], "make_powerlaw_graph() (in module netsci.utils)": [[5, "netsci.utils.make_powerlaw_graph", false]], "module": [[5, "module-netsci", false], [5, "module-netsci.analysis", false], [5, "module-netsci.plot", false], [5, "module-netsci.utils", false]], "netsci": [[5, "module-netsci", false]], "netsci.analysis": [[5, "module-netsci.analysis", false]], "netsci.plot": [[5, "module-netsci.plot", false]], "netsci.utils": [[5, "module-netsci.utils", false]], "plot_graph() (in module netsci.plot)": [[5, "netsci.plot.plot_graph", false]], "tune_min_degree() (in module netsci.utils)": [[5, "netsci.utils.tune_min_degree", false]]}, "objects": {"": [[5, 0, 0, "-", "netsci"]], "netsci": [[5, 0, 0, "-", "analysis"], [5, 0, 0, "-", "plot"], [5, 0, 0, "-", "utils"]], "netsci.analysis": [[5, 1, 1, "", "average_degree"], [5, 1, 1, "", "check_connectivity"], [5, 1, 1, "", "find_hamiltonian_path"], [5, 1, 1, "", "find_sap"], [5, 1, 1, "", "graph_info"], [5, 1, 1, "", "is_hamiltonian_path"], [5, 1, 1, "", "longest_shortest_path"]], "netsci.plot": [[5, 1, 1, "", "plot_graph"]], "netsci.utils": [[5, 1, 1, "", "download_sample_dataset"], [5, 1, 1, "", "generate_power_law_discrete"], [5, 1, 1, "", "generate_power_law_discrete_its"], [5, 1, 1, "", "generate_power_law_dist"], [5, 1, 1, "", "generate_power_law_dist_bounded"], [5, 1, 1, "", "get_adjacency_list"], [5, 1, 1, "", "get_sample_dataset_path"], [5, 1, 1, "", "list_sample_graphs"], [5, 1, 1, "", "load_sample_graph"], [5, 1, 1, "", "make_powerlaw_graph"], [5, 1, 1, "", "tune_min_degree"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "function", "Python function"]}, "objtypes": {"0": "py:module", "1": "py:function"}, "terms": {"": [0, 1, 4], "0": [0, 1, 2, 3, 4, 5], "00": 0, "000": 1, "000035809608483": 2, "000349": 3, "001": 1, "01": 5, "018500": 0, "02600579145725683": 2, "042": 2, "0784": [1, 2], "078416": 0, "1": [1, 2, 3, 4, 5], "10": [0, 1, 2, 3], "100": [0, 1, 2, 5], "1000": [0, 1, 2, 5], "10000": [1, 2, 5], "100000": 2, "103731": 0, "1039": 0, "10d": 1, "11": [0, 1, 2, 3], "12": [0, 1, 2, 3], "13": [0, 1, 2, 4], "13it": 0, "14": [0, 2], "1497134": 0, "15": [0, 1, 2], "164": 1, "1682": 1, "168431": 0, "17": 0, "18": 0, "19": [0, 1], "192244": 0, "192513": 0, "19463": 0, "1986": 5, "1987": 5, "1993": 1, "1e": [1, 2], "1e4": 1, "2": [1, 2, 3, 4, 5], "20": [0, 1, 3], "2003": 1, "2007": 1, "20120375": 5, "2014": 2, "2016": 2, "2018": 0, "20d": 3, "21": 0, "210": 1, "210340371976182": 1, "22": 2, "23133": [0, 1, 2, 3], "263968413468816e": 2, "264317": 3, "2930": 0, "2f": [0, 2], "3": [0, 2, 3, 4, 5], "30": 3, "300": 3, "309": 1, "325729": 0, "327": 2, "33": 0, "336385": 0, "3364": 0, "36595": 0, "371": 5, "39": [1, 2, 3, 4], "39513593875918": 2, "3f": [1, 2], "4": [0, 1, 3, 4, 5], "408": 1, "449673": 0, "4689479": 0, "480": 1, "4941": 0, "496": 2, "5": [0, 1, 2, 3, 4, 5], "50": [1, 2], "500": 1, "507": 1, "57194": 0, "5802": 0, "6": [0, 1, 2, 3, 4], "6000": 0, "606": 1, "609066": 0, "627339": 0, "6594": 0, "669095": 0, "6f": 3, "7": [0, 1, 2, 3], "70": 2, "700": 0, "705": 1, "72": 0, "74": 2, "8": [0, 1, 2, 3, 4], "8028": 1, "803": 1, "82": 0, "857285": 0, "894": 2, "9": [0, 1, 2, 3, 4], "900": 1, "902": 1, "903865": 0, "91826": 0, "93439": [0, 1, 2, 3], "9363": 1, "937": 2, "9727455051284": 2, "9755": 1, "9909": 1, "995340848455978": 2, "9967": 1, "9989": 1, "9997": 1, "9998": 1, "9999": 1, "A": [0, 1, 3, 4, 5], "For": [1, 4], "If": [0, 1, 3, 5], "No": 0, "THE": 5, "The": 5, "These": 5, "To": [1, 3], "_": 0, "__main__": 0, "__name__": 0, "__version__": 3, "abolfazl": [0, 1, 2, 3, 4], "about": 5, "accord": 2, "acm": 1, "actor": [0, 1, 2], "ad": 5, "add": [0, 1, 4], "add_edg": [1, 3, 4], "add_edges_from": [0, 4, 5], "add_nod": 4, "add_nodes_from": [1, 4], "add_weighted_edges_from": 4, "addedg": 0, "addit": 5, "adj": 0, "adjac": [0, 5], "adjacecci": 0, "adjacency_list": 0, "adjacency_matrix": 0, "adjlist": 0, "algorithm": 5, "all": [0, 1, 3, 5], "all_sap": [0, 5], "alpha": [2, 5], "alpha_power_law": 2, "alreadi": 3, "also": [3, 4], "alstott": 2, "although": 4, "amp": 1, "an": [0, 1, 3, 4, 5], "analysi": [0, 1, 2, 4], "analyz": 1, "ani": [4, 5], "append": [0, 1, 3], "april": 1, "ar": 1, "arang": [1, 2], "archiv": 1, "argument": 5, "arrai": [1, 2, 5], "arxiv": 1, "assign": 5, "astyp": 0, "attribut": 5, "author": 1, "avail": 5, "averag": [0, 1, 2, 3, 5], "average_clust": 1, "average_degre": [0, 1, 5], "average_path_length": 1, "average_shortest_path_length": [0, 1], "avg_degre": [0, 5], "avg_shortest_path_length": 0, "avoid": [0, 5], "ax": [1, 2, 3, 5], "axessubplot": [0, 1], "b": [0, 1, 2, 3, 4, 5], "barabasi": 2, "base": 1, "basic": 5, "bbox": 3, "been": 0, "begin": 1, "best": 2, "between": [0, 1, 4], "bf": 0, "bin": 2, "bin_max": 2, "bin_min": 2, "binimi": 5, "bino": 1, "binomi": 1, "bisect": 5, "blue": [1, 3], "book": 5, "bool": [3, 5], "bound": [3, 5], "box": 3, "breadth": 0, "bullmor": 2, "c": [0, 1, 2, 4, 5], "c0": 1, "c_i": 1, "calcul": [0, 1, 2, 5], "can": [1, 2, 3, 4, 5], "categori": 1, "ccdf": 2, "cdf": 2, "cell": 5, "center": [1, 2], "check": 5, "check_connect": 5, "chosen": 1, "circular_layout": 5, "citat": [0, 1, 2], "click": 5, "cluster": [3, 4, 5], "clustering_coeffici": 1, "cm": 1, "co": 1, "code": [0, 1, 2, 3, 4], "coeffici": [3, 5], "colab": [0, 1, 2, 5], "collabor": [0, 1, 2, 3], "collect": [0, 1, 2], "color": [1, 2, 3, 4, 5], "colors1": 1, "com": [0, 1, 2, 3, 4, 5], "command": [3, 5], "comment": 3, "compar": [1, 2], "comparison": 2, "complementari": 2, "complete_graph": 4, "compon": 1, "component_s": 1, "comput": [1, 3], "condens": 1, "condit": 1, "connect": [0, 1, 2, 5], "connected_compon": 1, "consist": 1, "constrain": 2, "construct": 1, "continu": 3, "correspond": 5, "count": 2, "counter": [1, 2], "cover": 1, "creat": [0, 1, 5], "create_random_network": 1, "creation": 1, "cumul": 2, "current": [0, 5], "currentnod": 0, "custom": 5, "customiz": 5, "d": [0, 1, 2, 4, 5], "d0": 1, "darkr": 0, "data": [0, 1, 2], "data_list": 0, "datafram": 0, "dataset": [1, 3, 5], "def": [0, 1, 2, 3], "default": 5, "defin": [3, 5], "degre": [0, 2, 4, 5], "degree_count": 1, "degree_interv": 5, "densif": 1, "densiti": [2, 3], "depend": 1, "dequ": 0, "dequeu": 0, "desc": 0, "desceret": 2, "design": 4, "devroy": 5, "df": 0, "dgraph": 0, "diamet": [0, 1, 5], "dict": [0, 2, 4, 5], "dict_kei": 1, "dictionari": [0, 5], "digraph": [0, 4, 5], "dijkstra": 4, "dijkstra_path": 4, "direct": [0, 1, 2, 3, 4, 5], "disconnect": [0, 1, 2, 5], "discoveri": 1, "discret": 5, "displai": [0, 1, 3], "distanc": 0, "distribut": [0, 4, 5], "distribution_compar": 2, "docstr": 2, "doe": 5, "download": 3, "download_sample_dataset": [3, 5], "draw": [4, 5], "dure": 5, "e": [0, 2, 3, 5], "e85777": 2, "each": [0, 1, 5], "ecount": 3, "edg": [0, 1, 2, 5], "edge_attribut": 3, "edge_color": [0, 5], "edge_label": 0, "edgelist": 3, "els": 0, "email": [0, 1, 2], "empti": [1, 3, 4, 5], "end": [0, 5], "engin": 5, "enqueu": 0, "ensur": 3, "enumer": 1, "eq": 2, "equal": 2, "erdos_renyi_graph": [0, 1], "erd\u0151": 1, "error": 2, "estim": 2, "evolut": 5, "exactli": 0, "exampl": [0, 1, 2, 4, 5], "exce": 1, "except": [3, 4], "exist": [1, 3, 5], "expect": [2, 5], "expected_pdf": 2, "expon": [2, 5], "exponenti": 2, "f": [0, 1, 2, 3, 5], "faloutso": 1, "fals": [0, 1, 2, 3, 5], "fig": [1, 2, 3], "figsiz": [0, 1, 2, 5], "figur": [1, 2, 5], "file": [2, 3], "file_nam": 3, "filepath": 3, "fill": 1, "find": [0, 1, 2, 4, 5], "find_hamiltonian_path": [0, 5], "find_sap": [0, 5], "first": [0, 3], "fit": 2, "fix": 0, "float": [2, 5], "follow": [1, 3, 4], "font": [2, 5], "font_color": 5, "font_siz": [0, 5], "fontsiz": [1, 2], "format": 0, "found": [0, 5], "frac": 1, "frameon": [1, 2], "free": 5, "from": [0, 1, 2, 5], "function": [0, 1, 2, 4, 5], "g": [0, 1, 3, 4, 5], "g0": 1, "g_collab": [1, 2], "gamma": [2, 5], "gener": [1, 5], "generate_power_law_discret": [2, 5], "generate_power_law_discrete_it": 5, "generate_power_law_dist": [2, 5], "generate_power_law_dist_bound": [2, 5], "get": [0, 3, 4, 5], "get_adjacency_list": 5, "get_edge_attribut": 0, "get_sample_dataset_path": [3, 5], "giant": 1, "giant_component_s": 1, "git": [0, 1, 2, 3, 5], "github": [0, 1, 2, 3, 4, 5], "given": [1, 5], "gnp_random_graph": [0, 1], "go": 5, "grai": 0, "graph": [1, 5], "graph_b": 1, "graph_dir": 0, "graph_info": [0, 1, 2, 5], "graph_w": 0, "green": 3, "gt": [0, 1, 2], "guid": [1, 5], "ha": 0, "hamiltonian": [0, 5], "hashabl": 4, "have": [3, 4], "heavi": 2, "here": 1, "histogram": 2, "how": 1, "http": [0, 1, 2, 3, 4, 5], "i": [0, 1, 2, 3, 4, 5], "ig": 3, "igraph": 5, "implement": 0, "import": [0, 1, 2, 3, 4, 5], "importerror": 3, "in_degre": 2, "in_degree_count": 2, "includ": [4, 5], "index": 5, "inf": 5, "inform": [0, 1, 2, 5], "initi": 1, "input": 5, "instal": [0, 1, 2, 3], "int": [0, 1, 2, 3, 5], "intern": 5, "internet": [0, 1, 2], "interv": 5, "introduc": 1, "invers": 5, "involv": 1, "is_connect": 0, "is_direct": [0, 3], "is_hamiltonian_path": 5, "isol": 1, "item": [0, 1, 2], "iter": [0, 1], "its": 1, "j": [1, 2], "januari": 1, "join": [0, 3, 5], "k": [1, 2, 5], "k_": 2, "k_avg": 1, "k_in": 2, "k_max": [2, 5], "k_min": [2, 5], "k_out": 2, "kamada": 3, "kamada_kaway_layout": 5, "kawai": 3, "kdeplot": 1, "keep": 5, "kei": [0, 1, 2, 5], "keyword": 5, "kk": 3, "kleinberg": 1, "knowledg": 1, "kwarg": 5, "l": [2, 5], "label": [1, 2, 3, 5], "labels": [1, 2], "lambd": 1, "langl": 1, "lattic": 1, "law": [2, 5], "layout": [3, 5], "least": 1, "leav": 1, "legend": [1, 2], "len": [0, 1], "length": [0, 1], "leskovec": 1, "less": 2, "lightblu": 0, "line": [0, 1, 2, 3], "linear_bin": 2, "linestyl": 1, "link": 1, "linspac": [1, 2], "list": [0, 1, 2, 5], "list_sample_graph": [0, 1, 2, 3, 5], "ln": 1, "load": [1, 5], "load_edg": 3, "load_graphi": 3, "load_sample_graph": [0, 1, 2, 5], "local": [1, 5], "log": 1, "log10": 2, "loglog": [1, 2], "logspac": 1, "longest": 5, "longest_shortest_path": 5, "lt": [0, 1], "lw": 2, "machin": 5, "main": 0, "make": [0, 1, 2, 3, 5], "make_powerlaw_graph": 5, "mani": 4, "map": 3, "margin": 3, "mark": 0, "marker": [1, 2], "math": 1, "mathemat": 5, "matplotlib": [0, 1, 2, 3, 4], "matrix": 0, "matter": 1, "max": [1, 2, 5], "max_iter": 5, "maxim": 0, "maximum": [2, 5], "mean": [0, 1, 2], "mean_poisson": 2, "met": 1, "metabol": [0, 1, 2], "method": [4, 5], "min": [1, 2, 5], "minim": 2, "minimum": [2, 5], "model": 1, "modul": 5, "multidigraph": 4, "multigraph": 4, "multipl": 4, "n": [0, 1, 2, 3, 5], "n_g": 1, "name": [0, 5], "nearest": 1, "need": 3, "neg": 2, "neighbor": [0, 1, 5], "net": [0, 1, 2], "netsci": [0, 1, 2, 3], "network": [0, 2, 3], "networkx": [0, 1, 5], "new": [1, 5], "node": [0, 1, 2, 5], "node_attribut": 3, "node_color": [0, 5], "node_s": [0, 5], "non": 5, "none": [4, 5], "normal": [1, 2], "notebook": 5, "np": [0, 1, 2, 4, 5], "num": 1, "num_edg": 0, "num_nod": [0, 1], "number": [0, 1, 2, 3, 5], "number_of_edg": 0, "number_of_nod": 0, "numpi": [0, 1, 2, 4], "nx": [0, 1, 4, 5], "o": [1, 2, 3], "object": [4, 5], "observ": 1, "obtion": 5, "onc": 0, "one": [1, 2], "open": [3, 5], "option": [1, 5], "other": [1, 4], "otherwis": [1, 5], "out": 2, "out_degre": 2, "out_degree_count": 2, "output": 4, "over": 0, "p": [0, 1, 2, 5], "p_k": 2, "p_valu": 1, "packag": [0, 1, 5], "page": 5, "pair": 1, "panda": 0, "paper": 1, "paramet": [1, 2, 5], "path": [0, 1, 3, 4, 5], "pd": 0, "pdf": 2, "perform": [0, 1], "period": 1, "phenomenon": 1, "philosoph": 5, "phonecal": [0, 1, 2], "physic": [1, 5], "pip": [0, 1, 2, 3, 5], "pip3": 5, "pk": [1, 2], "pk_in": 2, "pk_out": 2, "pk_poisson": 1, "plenz": 2, "plo": 2, "plot": [0, 1, 2, 3], "plot_ccdf": 2, "plot_distribut": 2, "plot_graph": [0, 1, 5], "plot_pdf": [2, 5], "plt": [0, 1, 2, 3, 4], "pmf": [1, 2], "po": 5, "poi": 1, "poisson": [1, 2], "poisson_pmf": 2, "popleft": 0, "possibl": 1, "pow": 2, "power": [2, 5], "power_law": 2, "power_law_discret": 5, "power_law_pdf": 2, "powergrid": [0, 1, 2], "powerlaw": 5, "preprint": 1, "primarili": 4, "print": [0, 1, 2, 3, 4, 5], "probabl": [0, 1, 2], "process": 0, "properti": 5, "protein": [0, 1, 2], "provid": 4, "pwd": [2, 5], "py": 2, "pycairo": 3, "pyplot": [0, 1, 2, 3, 4], "python": [2, 3, 4], "q": [0, 1, 2, 3], "queue": 0, "quick": [2, 5], "r": [1, 2, 3], "randint": 0, "random": [0, 2, 5], "random_network": 1, "randomli": 1, "rang": [0, 1, 3, 4], "rangl": 1, "rc": [1, 2], "real": 5, "recommend": 5, "red": [1, 2, 3, 4], "ref": 1, "refer": 5, "regular": 1, "repeat": 1, "replac": 1, "repres": [0, 1], "represent": [0, 5], "reproduc": 5, "result": [1, 5], "retriev": 5, "return": [1, 2, 3, 5], "revisit": 5, "rewir": 1, "ring": 1, "royal": 5, "run": [0, 1, 2], "r\u00e9nyi": 1, "sampl": [0, 3, 5], "sap": 5, "scale": [1, 5], "scienc": 2, "scientif": 1, "scipi": [1, 2], "seaborn": 1, "search": [0, 5], "second": 3, "seed": [0, 1, 2, 5], "select": 1, "self": [0, 5], "set": [2, 3], "set_titl": 1, "set_xlabel": [1, 2], "set_xlim": 2, "set_ylabel": [1, 2], "set_ylim": [1, 2], "sever": 4, "shortest": [0, 1, 4, 5], "shortest_path": 0, "should": 5, "show": [0, 1, 3, 4], "show_sample_graph": 5, "shrink": 1, "sigma": 2, "signatur": 2, "singl": [4, 5], "size": [1, 2, 3, 5], "skip": 3, "small": [1, 3], "sn": 1, "societi": 5, "sourc": [0, 5], "specif": 3, "split": 3, "spring_layout": 5, "springer": 5, "standard": 2, "start": [0, 1, 5], "start_nod": [0, 5], "startnod": 0, "startswith": 3, "stat": [1, 2], "step": 1, "store": 1, "str": [3, 5], "strogatz": 1, "strongli": 5, "style": 3, "subplot": [1, 2, 3], "successfulli": 1, "sum": [1, 2], "summari": 3, "suptitl": 2, "sure": 3, "tail": 2, "target": [0, 3, 5], "target_nod": [0, 5], "than": 2, "thei": 1, "them": 1, "theori": 5, "thi": [0, 1, 2, 3], "through": 1, "throw": 2, "tight_layout": 1, "titl": [0, 1, 5], "titles": [1, 2], "tkdd": 1, "tng": 3, "to_direct": 0, "to_numpy_arrai": 0, "toler": 5, "tolist": 1, "topologi": 1, "tqdm": 0, "track": 5, "transact": [1, 5], "transform": 5, "transitivity_undirect": 3, "travers": 0, "true": [0, 1, 2, 4, 5], "try": 3, "tune_min_degre": 5, "tupl": 5, "two": [0, 1, 4], "txt": 3, "type": [2, 5], "u": [0, 3], "uncom": [0, 1, 2, 3, 5], "undirect": [4, 5], "uniform": 5, "us": [0, 1, 3, 4], "usag": [0, 1, 2], "user": 3, "util": [0, 1, 2, 3], "v": [0, 1, 3], "valid": 2, "valu": [0, 2, 5], "variat": [2, 5], "variou": 5, "vcount": 3, "verbos": [1, 5], "verlag": 5, "vertex": 0, "vertex_label": 3, "vertex_s": 3, "vertic": [0, 3], "view": 5, "visit": 0, "visual": [1, 5], "visual_styl": 3, "vlaue": 5, "vr": 2, "watt": 1, "watts_strogatz_graph": 1, "we": [1, 2], "weakli": 5, "weight": [0, 3, 4], "weighted_adjacency_matrix": 0, "when": 1, "where": [1, 5], "whether": 5, "which": [1, 2, 5], "while": 0, "wide": 4, "width": 5, "with_label": [0, 4, 5], "workshop": [2, 3], "world": [1, 5], "would": 1, "www": [0, 1, 2], "x": [2, 5], "x_valu": 2, "xlabel": [1, 2], "xmax": [2, 5], "xmin": [2, 5], "xscale": 1, "xtick": [1, 2], "xtol": 5, "yield": 5, "ylabel": [1, 2], "ylim": 1, "ymax": 1, "ymin": 1, "york": 5, "you": [1, 3, 4], "ytick": [1, 2], "ziaeemehr": [0, 1, 2, 3, 4, 5], "zip": [1, 2, 3], "\u03b1": 2, "\u03c3": 2}, "titles": ["Chapter 2", "Chapter 3", "Chapter 4", "igraph", "Networkx", "Python codes for Network Science, Barab\u00e1si, 2013."], "titleterms": {"1": 0, "2": 0, "2013": 5, "3": 1, "4": 2, "THE": 2, "The": 1, "ad": 4, "adjac": 3, "algorithm": 4, "analysi": 5, "api": 5, "assign": 3, "attribut": [3, 4], "barab\u00e1si": 5, "basic": 4, "binimi": 1, "book": 2, "bound": 2, "chapter": [0, 1, 2, 5], "cluster": 1, "code": 5, "coeffici": 1, "content": 5, "creat": [3, 4], "degre": 1, "distribut": [1, 2], "document": 5, "edg": [3, 4], "evolut": 1, "free": 2, "from": 3, "gener": 2, "graph": [0, 2, 3, 4], "guid": [3, 4], "how": 5, "igraph": 3, "indic": 5, "instal": 5, "list": 3, "load": [2, 3], "netsci": 5, "network": [1, 5], "networkx": 4, "node": [3, 4], "packag": 2, "plot": 5, "powerlaw": 2, "properti": 2, "python": 5, "quick": [3, 4], "random": 1, "real": 1, "retriev": 3, "sampl": 2, "scale": 2, "scienc": 5, "tabl": [0, 5], "theori": 0, "type": 4, "us": 5, "util": 5, "visual": [3, 4]}}) \ No newline at end of file