{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.7" }, "colab": { "name": "kl_py_cycle_detect_01.ipynb", "provenance": [], "collapsed_sections": [], "include_colab_link": true } }, "cells": [ { "cell_type": "markdown", "metadata": { "id": "view-in-github", "colab_type": "text" }, "source": [ "\"Open" ] }, { "cell_type": "markdown", "metadata": { "id": "zW7XYGxrfCCv", "colab_type": "text" }, "source": [ "

\n", " \n", " \n", "

\n", "\n", "\n", "

\n", "\n", "\n", "\n", "# Python hurok detektállás \n", "\n", "## A networkx és pyvis csomag használata\n", "\n", "\n", "\n", "\n", "https://networkx.github.io/documentation/stable/auto_examples/index.html\n", "\n", "---\n", "\n", "\n" ] }, { "cell_type": "code", "metadata": { "id": "Xi__MvALfCCw", "colab_type": "code", "colab": {}, "outputId": "1fbd416a-eb61-41f1-d4f9-e2b521b45a98" }, "source": [ "### pyvis\n", "## ha szükséges installáljuk a csomagokat\n", "## !pip install pyvis --upgrade\n", "!pip install jsonpickle --upgrade\n" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ "Collecting jsonpickle\n", " Downloading jsonpickle-1.4.1-py2.py3-none-any.whl (36 kB)\n", "Requirement already satisfied, skipping upgrade: importlib-metadata in c:\\users\\user\\anaconda3\\lib\\site-packages (from jsonpickle) (1.6.1)\n", "Requirement already satisfied, skipping upgrade: zipp>=0.5 in c:\\users\\user\\anaconda3\\lib\\site-packages (from importlib-metadata->jsonpickle) (3.1.0)\n", "Installing collected packages: jsonpickle\n", "Successfully installed jsonpickle-1.4.1\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "j42KXc2VfCC1", "colab_type": "code", "colab": {}, "outputId": "912381e9-25c7-4aae-db4c-5536c68d3e59" }, "source": [ "def draw_graph(graph):\n", " # irányitott hálózat gráf megjelenítése networkx csomaggal\n", " G=nx.DiGraph()\n", "\n", " # élek hozzáadása\n", " G.add_edges_from(graph)\n", "\n", " graph_pos = nx.shell_layout(G)\n", "\n", " # nodok hozzáadása, élek és cimkék összekapcsolása\n", " nx.draw_networkx_nodes(G, graph_pos, node_size=1000, node_color='blue', alpha=0.3)\n", " # stilus, színezés\n", " nx.draw_networkx_edges(G, graph_pos, width=2, alpha=0.3, edge_color='green')\n", " nx.draw_networkx_labels(G, graph_pos, font_size=12, font_family='sans-serif')\n", "\n", " # megjelenítés\n", " plt.show()\n", "\n", "# we can add more edges here as the direction is a factor now,\n", "# edges are added as (from_node, to_node) tuples\n", "# hence (22, 25) and (25, 22) are different. In undirected graph,\n", "# we couldn't have told the difference.\n", "graph = graph = [\n", " (20, 21), (21, 22), (22, 23), (23, 24), (24, 25), (25, 20),\n", " (25, 21), (23, 20), (24, 22), (21, 24), (20, 21)\n", " ]\n", "draw_graph(graph)" ], "execution_count": null, "outputs": [ { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] } } ] }, { "cell_type": "code", "metadata": { "id": "xBW6iLfVfCC4", "colab_type": "code", "colab": {}, "outputId": "01ca23f1-cf8a-4c69-830d-1ce6af677aa0" }, "source": [ "## különböző megjelenítési módok \n", "import networkx as nx \n", "import matplotlib.pyplot as plt \n", " \n", "g = nx.Graph() \n", " \n", "g.add_edge(1, 2) \n", "g.add_edge(2, 3) \n", "g.add_edge(3, 4) \n", "g.add_edge(1, 4) \n", "g.add_edge(1, 5) \n", "g.add_edge(5, 6) \n", "g.add_edge(5, 7) \n", "g.add_edge(4, 8) \n", "g.add_edge(3, 8) \n", " \n", "print('drawing in circular layout') \n", "nx.draw_circular(g, with_labels = True) \n", "plt.savefig(\"filename1.png\") ## mentés\n", "plt.show()\n", " \n", "# törlése az aktuális vászonnak \n", "plt.clf() \n", " \n", "print('drawing in planar layout') \n", "nx.draw_planar(g, with_labels = True) \n", "plt.savefig(\"filename2.png\") ## mentés\n", "plt.show()\n", " \n", "# törlése az aktuális vászonnak \n", "plt.clf() \n", " \n", "print('drawing in random layout') \n", "nx.draw_random(g, with_labels = True) \n", "plt.savefig(\"filename3.png\") ## mentés\n", "plt.show()\n", "\n", "# törlése az aktuális vászonnak \n", "plt.clf() \n", " \n", "print('drawing in specrtal layout') \n", "nx.draw_spectral(g, with_labels = True) \n", "plt.savefig(\"filename4.png\") ## mentés\n", "plt.show()\n", " \n", "# törlése az aktuális vászonnak \n", "plt.clf() \n", " \n", "print('drawing in spring layout') \n", "nx.draw_spring(g, with_labels = True) \n", "plt.savefig(\"filename5.png\") ## mentés\n", "plt.show()\n", " \n", "# törlése az aktuális vászonnak \n", "plt.clf() \n", " \n", "print('drawing in shell layout') \n", "nx.draw_shell(g, with_labels = True) \n", "plt.savefig(\"filename6.png\") \n", " \n", "# törlése az aktuális vászonnak \n", "plt.clf() " ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ "drawing in circular layout\n" ], "name": "stdout" }, { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] } }, { "output_type": "stream", "text": [ "drawing in planar layout\n" ], "name": "stdout" }, { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] } }, { "output_type": "stream", "text": [ "drawing in random layout\n" ], "name": "stdout" }, { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] } }, { "output_type": "stream", "text": [ "drawing in specrtal layout\n" ], "name": "stdout" }, { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] } }, { "output_type": "stream", "text": [ "drawing in spring layout\n" ], "name": "stdout" }, { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] } }, { "output_type": "stream", "text": [ "drawing in shell layout\n" ], "name": "stdout" }, { "output_type": "display_data", "data": { "text/plain": [ "
" ] }, "metadata": { "tags": [] } } ] }, { "cell_type": "code", "metadata": { "id": "gOCYwxK4fCC7", "colab_type": "code", "colab": {} }, "source": [ "from pyvis.network import Network\n", "import pandas as pd\n", "\n", "got_net = Network(height=\"750px\", width=\"100%\", bgcolor=\"#222222\", font_color=\"white\")\n", "\n", "# set the physics layout of the network\n", "got_net.barnes_hut()\n", "got_data = pd.read_csv(\"https://www.macalester.edu/~abeverid/data/stormofswords.csv\")\n", "\n", "sources = got_data['Source']\n", "targets = got_data['Target']\n", "weights = got_data['Weight']\n", "\n", "edge_data = zip(sources, targets, weights)\n", "\n", "for e in edge_data:\n", " src = e[0]\n", " dst = e[1]\n", " w = e[2]\n", "\n", " got_net.add_node(src, src, title=src)\n", " got_net.add_node(dst, dst, title=dst)\n", " got_net.add_edge(src, dst, value=w)\n", "\n", "neighbor_map = got_net.get_adj_list()\n", "\n", "# add neighbor data to node hover data\n", "for node in got_net.nodes:\n", " node[\"title\"] += \" Neighbors:
\" + \"
\".join(neighbor_map[node[\"id\"]])\n", " node[\"value\"] = len(neighbor_map[node[\"id\"]])\n", "\n", "got_net.show(\"gameofthrones.html\")" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "SSzkELH8fCC9", "colab_type": "code", "colab": {}, "outputId": "78cae7c6-a9dd-48b0-8d7f-fe0f3340eebc" }, "source": [ "import networkx as nx \n", "import matplotlib.pyplot as plt \n", "g = nx.Graph()\n", "g.add_edge('a', 'b', weight=0.1)\n", "g.add_edge('b', 'c', weight=1.5)\n", "g.add_edge('a', 'c', weight=1.0)\n", "g.add_edge('c', 'd', weight=2.2)\n", "print (nx.shortest_path(g, 'b', 'd'))\n", "\n", "print (nx.shortest_path(g, 'b', 'd', weight='weight') )\n", "plt.show()" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ "['b', 'c', 'd']\n", "['b', 'a', 'c', 'd']\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "NW-ZT5kZfCC_", "colab_type": "code", "colab": {}, "outputId": "1664e57b-1d21-46a1-e448-8a3b2c4d4899" }, "source": [ "import networkx as nx\n", "import matplotlib.pyplot as plt\n", "\n", "def draw_graph(graph):\n", " # create networkx graph\n", " G=nx.Graph()\n", "\n", " # add edges\n", " for edge in graph:\n", " G.add_edge(edge[0], edge[1])\n", "\n", " # There are graph layouts like shell, spring, spectral and random.\n", " # Shell layout usually looks better, so we're choosing it.\n", " # I will show some examples later of other layouts\n", " graph_pos = nx.shell_layout(G)\n", "\n", " # draw nodes, edges and labels\n", " nx.draw_networkx_nodes(G, graph_pos, node_size=1000, node_color='blue', alpha=0.3)\n", " nx.draw_networkx_edges(G, graph_pos)\n", " nx.draw_networkx_labels(G, graph_pos, font_size=12, font_family='sans-serif')\n", "\n", " # show graph\n", " plt.show()\n", "\n", "# draw example\n", "# graph is a list of tuples of nodes. Each tuple defining the\n", "# connection between 2 nodes\n", "graph = [(20, 21), (21, 22), (22, 23), (23, 24), (24, 25), (25, 20)]\n", "\n", "draw_graph(graph)" ], "execution_count": null, "outputs": [ { "output_type": "display_data", "data": { "image/png": "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x1GN3d0cYU716tVJTk6mQ4cOtGrVilatWmkdSQhRDhkZGfTq1Yt169Zx//33ax1HVQ6zp3vDQw89xMqVKwkNDeWPP/7QOo4QooyKioqIjIykT58+vPLKK1rHUZ3DlS5ASEgIPXr0ICoqShbGEcLOvPnmmxQXFzNjxgyto1QIhyxdgISEBLKysoiPj9c6ihDCQvv372fDhg3s2LHD7haysZRj/lWAXq8nKSmJwMBA2rZtyzPPPKN1JCGEGadPn6Z///4kJydTr149reNUGIfd0wW499572bp1K3369OH333/XOo4QogQ3FrKZMGECHWPxfuYAAAzDSURBVDp00DpOhXLo0gV45plneO2112RhHCFs2JgxY2jUqBFjx47VOkqFc/jSBZg0aRJeXl5MmDBB6yhCiD/ZunUrH3/8MevXr7frhWwsVSVK18nJic2bN/Puu+9iMBi0jiOE+J8ffviBsWPHkpycTM2aNbWOUymqROkC1K5dm127djFs2DCOHz+udRwhqrwrV64QHBzMggULaNmypdZxKk2VKV2AwMBAZs2aRXBwMFevXtU6jhBVlslkYuDAgXTu3JmoqCit41SqKlW6ADExMTzxxBMMHTpUFsYRQiOLFy/m1KlTLFmyROsola7Kla5Op2PlypV89913rF69Wus4QlQ5X375JfHx8Q63kI2lHPbmCHM8PDwwGAx06NCBwMBAAgMDtY4kRJWQkZFBeHg469evp0mTJlrH0USV29O9oVmzZqxatYqQkBAyMzO1jiOEwysqKiIiIoKoqCheeuklreNopsqWLsCrr75KcHAwffv2lYVxhKhgU6dORafT8dZbb2kdRVNVunQB4uPjycnJYfbs2VpHEcJhvf/++2zevJnt27fj7OysdRxNVcljurfT6/Xs3LmTwMBAgoKC6Nq1q9aRhHAov/76KwMHDuTdd9/F19dX6ziaq/J7ugD169dn27Zt9O3bl99++03rOEI4jPz8fEJCQpg0aRJPPvmk1nFsgpTu/zz99NOMGjWKsLAwrl+/rnUcIRzC6NGjeeCBBxg9erTWUWyGlO5tJkyYgI+PD3FxcVpHEcLubd68mX/961+sXbu2SixkYykp3dvcWBhn3759JCUlaR1HCLt15MgRxo8fX6UWsrGUlO6feHt7YzAYGDFiBMeOHdM6jhB25/LlywQHB7No0SIeffRRrePYHCnduwgICGDOnDkEBweTm5urdRwh7IbJZGLAgAF07dqVPn36aB3HJknplmDgwIG0adOGIUOGyMI4Qlho4cKFpKWlsXjxYq2j2Cwp3RLodDpWrFjBDz/8wMqVK7WOI4TN+/zzz0lISGDXrl24urpqHcdmVfmbI8zx8PAgOTmZJ598ksDAQNq0aaN1JCFs0vnz54mIiGDjxo00btxY6zg2TfZ0S/Hggw+yevVqwsLCZGEcIe6isLCQiIgIBgwYwAsvvKB1HJsnpWuBnj17EhoaSp8+fWRhHCH+5I033kCv1zNt2jSto9gFKV0LzZkzh6tXrzJz5kytowhhM/bu3cu2bdvYtm1blV/IxlJyTNdCLi4udyyM061bN60jCaGpU6dOMWjQIN577z3q1q2rdRy7IXu6ZXDPPfewbds2oqKiOHv2rNZxhNDMjYVspkyZQrt27bSOY1ekdMuoc+fOjB07ltDQUFkYR1RZI0eOpGnTpowcOVLrKHZHSrcc4uLi8PPzIzY2VusoQlS6DRs28MUXX8hCNuUkpVsOOp2OjRs3sn//fhITE7WOI0Sl+fbbb4mLi8NgMODp6al1HLskpVtOXl5eGAwGRo4cydGjR7WOI0SFy87OJiQkhCVLlvDII49oHcduSela4fHHH2fu3LmEhITIwjjCoZlMJvr378/zzz9PZGSk1nHsmpSulQYMGEC7du2IiYmRhXGEw5o/fz7p6eksWLBA6yh2T0pXBcuXL+fYsWOsWLFC6yhCqO7gwYMsWLBAFrJRidwcoQJ3d3cMBgPt2rW7efOEEI7g3LlzREREsGnTJho2bKh1HIcge7oqeeCBB1izZg29evXi0qVLWscRwmqFhYWEh4cTExPDc889p3UchyGlq6IePXoQHh5O7969KSoq0jqOEFZ5/fXXcXNz44033tA6ikOR0lXZrFmzKCgoYMaMGVpHEaLc3nvvPRITE2Uhmwogx3RV5uLiQmJiIq1atSIoKIjnn3/+ru8zGiErC7KzIT0dcnKgsBBcXMDTE+rXBy8v8PYGvb6S/whh96yZXydPniQmJoZ9+/ZRp04dbf4AByalWwH8/PzYsWMHYWFhHDp0iEaNGt18LTsbjh+HI0eUDwGAmxu4uoJOB/n5kJkJNx5E7OIC/v7QrJnyIRHCHGvn17Vr1wgODmbq1Km0bdtWuz/EgenMXVsaGBhoOnz4cCXGcSzz588nKSmJzz//HJPJlZQUOHpU2bPw8bFsD9ZoVD4kRiO0aAFBQcqHSIjb5eejyvxav34wRmMO27dvl3UVrKDT6VJNJlPgXV+T0q04JpOJ4OBgatRoTpcuszAawdcXnMpxJL24GDIylA9Sly4gV++IG9LS4JNPsHp+JSd/zkcf7efjj6fQvHl19YNWIeZKV06kVSCdTkds7Cb+/nc9qalf4OdXvg8EKL/n5wfu7rB3r/L1UYgjR5T54O6OVfPr119PsmfPKsaPH8HHH1eX+VWBpHQr0JEj8J//eDJpUjSbNq0kLe2M1dv08FBOghw8CN9/r0JIYbeOHFHmQf36yrwor9zcXOLj4xk6dCjNmjWQ+VXBpHQrSFrarQ9E06ZNGDCgP3PmxHPtWp7V29brle1+9pkyjqh6bp9f1lzdUlxczOLFi2ndujVPPfUUIPOroknpVoD8fOUYW926tz4QzzzTlRYtWrBs2TJVFsbR65Xtf/KJMp6oOu42v8pr9+7dXL58mf79+9/xc5lfFUdKtwKkpCgnNf78lW/IkCGkp5/j/fffV2UcDw9lnJQUVTYn7ERJ86usvv/+e/bufY+4uDj0d2lvmV8VQ0pXZdnZymU7vr5/fa1atWpMnDiRnTt3cuzGhZJW8vVVxsvOVmVzwsaZm19l8ccffzB//nzGjh1n9km+Mr/UJ6Wrsp9/Vr6alXQW2c/Pj1GjRpGQkMDly5etHs/JSRnvxAmrNyXsQGnzyxKFhYUkJCTwwgsvEBAQYPa9Mr/UJ6WrIqNROePr42PuPQWkpKwmL28v0dG+jB4dQGrq3//yvh07ptO9u45vv/2o1HF9fJQz2UajNemFrbN0fi1dOpCBAxvRq5fnHfPrwoXTdO+uIzS0BseOLWT37kEkJpa+RojML3VJ6aooK0u59dLcyY2iokLq1LmPRYsO0aLFeBo0eIaEhDAuXDh98z3nzp3kq68M1K59j0Xj6vXKuFlZVv4BwqaVZX7Nnv0ZO3Zcpk+fGX+ZX97eEWzefImkpFzCw0tfQUzml7qkdFVkyXEvN7fqREa+yT33PEBc3N/48cdLeHr6cfJk6s33rF79GtHRc3FxqWbx2CaTHHdzdGWZX/XqNcbJyYnWrV/G17cJJ0+mcuHCBQD+9re/UbNmzTKNLfNLPVK6KkpPL9u6CF5e3gwbNoCMjFN4eNQD4IsvduHiUo3AwBfLNLabmzK+cFxlnV8AWVkXSE8/jp9fU1aufBuAuXOfpX//BixZ0p8rVyxbcF/ml3qkdFWUk6Os5mSpwkIj77//Fg891JUPP/ySa9dy2bJlMoMGLS7z2K6uyvjCcZVnfi1c2JsuXaL5z3+O06TJQ8yf/2/WrTvDwoWpXLuWw4IFvS3alswv9cjSjioqLFSWz7NEcXExixb1xcWlGrNn76GwsJCpU0M4d86JwYNH/e9dGUydOgVYYsEWPYB8YG+5sgt70ANwBSy5q9EE/Bcw8t13rsAmQkPDaNasNQDe3vUYMmQ50dH3kJd3BQ8P84cbdDqQh6GoQ0pXRS4ult29YzKZWLZsINnZF5g6dT96fTX0+mpcv56Op2cmzs7fAHDlSgEeHscJDu5JcPAEs9vMzYUaNeCVV9T4S4Qt2rfv1n9nc0wmE0uXDiAjoxlTp+7H1dW9hHfqbr6/NCYTyAMk1CGlqyJPT2Vt0tI+FCtXDuPs2Z+YMeOjOz4QM2Z8TFHRretyxo9vzYABC2nV6oVSxy4ogHssu9hB2Clr59fPPx+ienUv6tdvSm5uFmvWjKJly85Ur16r1LFlfqlHSldF9evfWpG/JBkZZzhwYDV6vSvR0X43fz58+Go6d77z+JqTkzM1anjj7l7KpwxlD7t+/XLFFnbC2vml0zmxZctkLl/OwMOjJo8//iyxsTssGlvml3qkdFVkyeN0fH0bsXevZQverF172uKxdTp5nI+jU2N+deoUUa6xZX6pR65eUJG3t3Jct7Lv3DEalXG9vSt3XFG5ZH45BildFen10LKlctytMmVmKg8XlKcGOzaZX45BSldlDz2k7BkUF1fOeMXFynjNmlXOeEJbMr/sn5Suyry8lKeqZmRUzngZGcp4tUo/AS0cgMwv+yelWwGCgpSvYnnWP5nHrLw8ZZygoIodR9gWmV/2zewj2HU63UXA+qcpVkmuevD2Ur6cqfB8nr/Q6ZSPRFY2FMiie1WOzC8b18hkMt11dXizpSuEEEJdcnhBCCEqkZSuEEJUIildIYSoRFK6QghRiaR0hRCiEv0/gggG3FePA/sAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] } } ] }, { "cell_type": "code", "metadata": { "id": "p3GQDsbXfCDD", "colab_type": "code", "colab": {}, "outputId": "9bc0b6c7-d2ae-4c2a-e990-695141b59e7c" }, "source": [ "import networkx as nx\n", "G = nx.DiGraph()\n", "G.add_node(\"A\")\n", "G.add_node(\"B\")\n", "G.add_node(\"C\")\n", "G.add_node(\"D\")\n", "G.add_node(\"E\")\n", "G.add_node(\"F\")\n", "G.add_node(\"G\")\n", "G.add_edge(\"A\",\"B\")\n", "G.add_edge(\"B\",\"C\")\n", "G.add_edge(\"C\",\"E\")\n", "G.add_edge(\"C\",\"F\")\n", "G.add_edge(\"D\",\"E\")\n", "G.add_edge(\"F\",\"G\")\n", "print(G.nodes())\n", "print(G.edges())\n", "pos = nx.spring_layout(G)\n", "nx.draw_networkx_nodes(G, pos)\n", "nx.draw_networkx_labels(G, pos)\n", "nx.draw_networkx_edges(G, pos, edge_color='r', arrows = True)\n", "plt.show()" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ "['A', 'B', 'C', 'D', 'E', 'F', 'G']\n", "[('A', 'B'), ('B', 'C'), ('C', 'E'), ('C', 'F'), ('D', 'E'), ('F', 'G')]\n" ], "name": "stdout" }, { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] } } ] }, { "cell_type": "code", "metadata": { "id": "SB5F7KbFfCDF", "colab_type": "code", "colab": {}, "outputId": "454a5dea-1824-44c5-b058-ae5f95cc97de" }, "source": [ "import networkx as nx\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import pylab\n", "\n", "G = nx.DiGraph()\n", "\n", "G.add_edges_from([('A', 'B'),('C','D'),('G','D')], weight=1)\n", "G.add_edges_from([('D','A'),('D','E'),('B','D'),('D','E')], weight=2)\n", "G.add_edges_from([('B','C'),('E','F')], weight=3)\n", "G.add_edges_from([('C','F')], weight=4)\n", "\n", "\n", "val_map = {'A': 1.0,\n", " 'D': 0.5714285714285714,\n", " 'H': 0.0}\n", "\n", "### nx.draw_networkx(G, arrows=True, **options) ## You can add options by initialising that ** variable like this:\n", "KL = '''\n", "options = {\n", " 'node_color': 'blue',\n", " 'node_size': 100,\n", " 'width': 3,\n", " 'arrowstyle': '-|>',\n", " 'arrowsize': 12,\n", "}\n", "'''\n", "\n", "values = [val_map.get(node, 0.45) for node in G.nodes()]\n", "edge_labels=dict([((u,v,),d['weight'])\n", " for u,v,d in G.edges(data=True)])\n", "red_edges = [('C','D'),('D','A')]\n", "edge_colors = ['black' if not edge in red_edges else 'red' for edge in G.edges()]\n", "\n", "pos=nx.spring_layout(G)\n", "nx.draw_networkx_edge_labels(G,pos,edge_labels=edge_labels)\n", "nx.draw(G,pos, node_color = values, node_size=1500,edge_color=edge_colors,edge_cmap=plt.cm.Reds)\n", "pylab.show()" ], "execution_count": null, "outputs": [ { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] } } ] }, { "cell_type": "code", "metadata": { "id": "jvFuj8s0fCDI", "colab_type": "code", "colab": {}, "outputId": "880ce781-e0c1-476d-d5a5-0df4418a2d2a" }, "source": [ "import networkx as nx\n", "import matplotlib.pyplot as plt\n", "G = nx.Graph()\n", "G.add_edge(1,2)\n", "G.add_edge(1,3)\n", "nx.draw(G, with_labels=True)\n", "plt.show()" ], "execution_count": null, "outputs": [ { "output_type": "display_data", "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAb4AAAEuCAYAAADx63eqAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAQU0lEQVR4nO3dbWxV933A8d+1r/ElAYeWUkCCFgVUvFQjUlKtXp9CWnXpUN9MC1rXoCJNWloRKaivug2pFS8ypVKnSZPIJvUN0rpNWNaktBVTt7WBTa3yhmQsyXAQqqJBBTWmpcYMG1/77gWB2Fw/33PuPQ+fzzvuefD/Dfrpe88951QajUYjAKAkujq9AABoJ4MPgFIx+AAoFYMPgFIx+AAoFYMPgFIx+AAoFYMPgFIx+AAoFYMPgFKpdnoBAJTX6PhkDJ25FMNXxmJsoh59tWr0b+mL/Y9vi43relP5mxXP6gSg3c5evB7HTl2I0+evRkTEZH3m3rZatSsaEbF396Y49MSueHT7hkT/tsEHQFt979V34oWTwzFRn47FJlClElGrdseRff1xYGBHYn/fV50AtM2doXcubk3NLLlvoxFxa2o6Xjh5LiIiseGn+ABoi7MXr8eXvvtq3JqavvdZoz4V1/71pZh4579iZmI8qhu2xvue+Eqs3fmxOceu7emOE88OxJ5trX/t6VedALTFsVMXYqI+Peezxsx0VNd/ILZ8+cXY/vUTseEzB+Lqy9+O+vVfztlvoj4dL526kMg6DD4AUjc6Phmnz19tuqbXtaYWGz79TFQ3bI5KpSse2PU7UX1oc0xemTvkGo2IV96+GtfGJ1tei8EHQOqGzlxa1n7TN38dU7/6RazZ9KGmbZWIGHpteedZjMEHQOqGr4zNuWVhPo3peox+/zux7rc/Fz0btzdtn6jPxPDlGy2vxeADIHVjE/VFtzcaMzH6w7+K6K7G+z//tUXOM9XyWgw+AFLXV1v47rlGoxHXTv5NTN+8Hpv+4C+i0r3wvn21npbXYvABkLr+LX3RW51/5PzqR8di6trF+ODT34yunoUfU1ardkX/1vUtr8V9fACkbnR8Mj7x4o/j9vTckVP/zUj84m//JKK7Jypd3fc+f/8Xnot1H31yzr691a742Tc+2/IzPD25BYDU/eTky3Hr58PR/aHH7jyL7F3Vhz4YH/6zHy55fKUS8eTuTYk8uNpXnQCkZmRkJPbv3x/f+ta34sWvfDbWrlldb9Wq3XFo765E1mTwAZCKwcHB2LNnTzz88MPx+uuvxzNf+FQc2dcfa3tWNnrW9nTFkX39iTyuLMJXnQAkbGRkJJ577rl488034+WXX46Pf/zj97bdfdB0J9/OoPgASMz9lTd76N11YGBHnHh2IJ56ZHP0Vruidt+vPWvVruitdsVTj2yOE88OJDr0IvyqE4AEzK6848ePzzvw5nNtfDKGXrsUw5dvxNjEVPTVeqJ/6/p4+jFvYAcgowYHB+P555+PgwcPxtGjR6NWq3V6SYtyjQ+AVVnsWl6WucYHwIot51peVik+AJYtr5U3m+IDYFnyXHmzKT4AFlWEyptN8QGwoKJU3myKD4AmRau82RQfAHMUsfJmU3wARESxK282xQdA4StvNsUHUGJlqbzZFB9ASZWp8mZTfAAlU8bKm03xAZRIWStvNsUHUAJlr7zZFB9Awam8uRQfQEGpvPkpPoACUnkLU3wABaLylqb4AApC5S2P4gPIOZW3MooPIMdU3sopPoAcUnmrp/gAckbltUbxAeSEykuG4gPIAZWXHMUHkGEqL3mKDyCjVF46FB9Axqi8dCk+gAxReelTfAAZoPLaR/EBdJjKay/FB9AhKq8zFB9AB6i8zlF8AG2k8jpP8QG0icrLBsUHkDKVly2KDyBFKi97FB9AClRedik+gISpvGxTfAAJUXn5oPgAEqDy8kPxAbRA5eWP4gNYJZWXT4oPYIVUXr4pPoAVUHn5p/gAlkHlFYfiA1iCyisWxQewAJVXTIoPYB4qr7gUH8AsKq/4FB/Au1ReOSg+oPRUXrkoPqDUVF75KD6glFReeSk+oHRUXrkpPqA0VB4Rig8oCZXHXYoPKDSVx/0UH1BYKo/5KD6gcFQei1F8QKGoPJai+IBCUHksl+IDck/lsRKKD8gtlcdqKD4gl1Qeq6X4gFxRebRK8QG5ofJIguIDMk/lkSTFB2SayiNpig/IJJVHWhQfkDkqjzQpPiAzVB7toPiATFB5tIviAzpK5dFuig/oGJVHJyg+oO1UHp2k+IC2Unl0muID2kLlkRWKD0idyiNLFB+QGpVHFik+IBUqj6xSfECiVB5Zp/iAxKg88kDxAS1TeeSJ4gNaovLIG8UHrIrKI68UH7BiKo88U3zAsqk8ikDxAcui8igKxQcsSuVRNIoPWJDKo4gUH9BE5VFkig+YQ+VRdIoPiAiVR3koPkDlUSqKD0pM5VFGig9KSuVRVooPSkblUXaKD0pE5YHig1JQefAexQcFp/JgLsUHBaXyYH6KDwpI5cHCFB8UiMqDpSk+KAiVB8uj+CDnVB6sjOKDHFN5sHKKD3JI5cHqKT7IGZUHrVF80Gaj45MxdOZSDF8Zi7GJevTVqtG/pS/2P74tNq7rXfA4lQfJqDQajUanFwFlcPbi9Th26kKcPn81IiIm6zP3ttWqXdGIiL27N8WhJ3bFo9s3zDl2cHAwnn/++Th48GAcPXo0arVaO5cOhWLwQRt879V34oWTwzFRn47F/sdVKhG1ancc2dcfBwZ2zKm848ePqzxIgGt8kLI7Q+9c3JpafOhFRDQaEbempuOFk+fi68f+2bU8SIHigxSdvXg9vvTdV+PW1PS9z8bO/CBuvvHjuH31nXjwt56ID3zx6/MfXL8df/m5TfHlL3yqTauFclB8kKJjpy7ERH16zmfVdRvjoU/8Uazb8/lFj61U18R/jLqWB0kz+CAlo+OTcfr81aavNx/Y/Yl44CO/G11r+xY9vhERr7x9Na6NT6a3SCghgw9SMnTmUsvnqETE0Gutnwd4j8EHKRm+MjbnloXVmKjPxPDlGwmtCIgw+CA1YxP1hM4zlch5gDsMPkhJXy2ZByP11XoSOQ9wh8EHKenf0he91eb/Yo2Z6WjUb0fMTEc0ZqJRvx2Nmel5znDniS79W9envVQoFffxQUpGxyfjk9/+SdN1vuv/+Q/xm5/+05zPHvrkH8eGTz/TdI7ealf87BufXfQZnsDKeEg1pGTjg2ti14O3481fd0Wl673y2/DpZ+YdcverVCKe3L3J0IOE+aoTUjAyMhL79++PCy8fi96e1f03q1W749DeXQmvDDD4IEGNRiNOnDgRe/bsiZ07d8bZV74f3/ziR2PtCoff2p6uOLKvP/Zs27D0zsCK+KoTEjIyMhKHDh2Kt956a8778g4M7IiIWNXbGYDkKT5o0f2VN9+bFA4M7IgTzw7EU49sjt5qV9Tu+7VnrdoVvdWueOqRzXHi2QFDD1LkV53QgtmVt9z35V0bn4yh1y7F8OUbMTYxFX21nujfuj6efmzxN7ADyTD4YBUajUYMDg7G4cOHvRUdcsY1Plihha7lAfngGh8s03Ku5QHZp/hgGVQeFIfig0WoPCgexQcLUHlQTIoP7qPyoNgUH8yi8qD4FB+EyoMyUXyUnsqDclF8lJbKg3JSfJSSyoPyUnyUisoDFB+lofKACMVHCag8YDbFR6GpPOB+io9CUnnAQhQfhaPygMUoPgpD5QHLofgoBJUHLJfiI9dUHrBSio/cUnnAaig+ckflAa1QfOSKygNapfjIBZUHJEXxkXkqD0iS4iOzVB6QBsVHJqk8IC2Kj0xReUDaFB+ZofKAdlB8dJzKA9pJ8dFRKg9oN8VHR6g8oFMUH22n8oBOUny0jcoDskDx0RYqD8gKxUeqVB6QNYqP1Kg8IIsUH4lTeUCWKT4SpfKArFN8JELlAXmh+GiZygPyRPGxaioPyCPFx6qoPCCvFB8rovKAvFN8LJvKA4pA8bEklQcUieJjUSoPKBrFx7xUHlBUio8mKg8oMsXHPSoPKAPFR0SoPKA8FF/JqTygbBRfiak8oIwUXwmpPKDMFF/JqDyg7BRfSag8gDsUXwmoPID3KL4CU3kAzRRfQak8gPkpvoJReQCLU3wFovIAlqb4CkDlASyf4ss5lQewMoovp1QewOoovhxSeQCrp/hyROUBtE7x5YTKA0iG4ss4lQeQLMWXYSoPIHmKL4NUHkB6FF/GqDyAdCm+jFB5AO2h+DJA5QG0j+LrIJUH0H6Kr0NUHkBnKL42U3kAnaX42kjlAXSe4msDlQeQHYovZSoPIFsUX0pUHkA2Kb4UqDyA7FJ8CVJ5ANmn+BKi8gDyQfG1SOUB5Ivia4HKA8gfxbcKKg8gvxTfCqk8gHxTfMuk8gCKQfEtg8oDKA7FtwiVB1A8im8BKg+gmBTffVQeQLEpvllUHkDxKb5QeQBlUvriU3kA5VLa4lN5AOVUyuJTeQDlVariU3kAlKb4VB4AESUoPpUHwGyFLj6VB8D9Cll8Kg+AhRSu+FQeAIspTPGpPACWoxDFp/IAWK5cF5/KA2Clclt8Kg+A1chd8ak8AFqRq+JTeQC0KhfFp/IASErmi0/lAZCkzBafygMgDakX3+j4ZAyduRTDV8ZibKIefbVq9G/pi/2Pb4uN63rnPUblAZCWSqPRaKRx4rMXr8exUxfi9PmrERExWZ+5t61W7YpGROzdvSkOPbErHt2+ISLuVN7g4GAcPnw4Dh48GEePHo1arZbG8gAoqVQG3/defSdeODkcE/XpWOzslUpErdodR/b1x+89/MC9yjt+/LjKAyAViQ++O0PvXNyamll653f1VBrxfz/9+zgwsEPlAZCqRAff2YvX40vffTVuTU3P+Xz0B9+JiXfOxszURHQ/+L7oG/jDWP/oU3P2WdMdMfS1T8aebRuSWg4ANEn0xy3HTl2Iifp00+d9A/tj4+8fjkq1J6auXYwr//jnsWbzzujdsuvePlMzES+duhB/d+BjSS4JAOZI7HaG0fHJOH3+6rzX9NZs+nBUqj3v/qsSlahE/deX5+zTaES88vbVuDY+mdSSAKBJYsU3dObSotuv/eiluPnGj6NRn4w1m3fG2p3NZVeJiKHXLsVXP7MzqWUBwByJDb7hK2Nzblm438anDsX7P//VmPzFcEz87xtR6e5p2meiPhPDl28ktSQAaJLYV51jE/Ul96l0dUdt+0dj+sZo3Hj95ALnmUpqSQDQJLHB11dbQTzOzDRd43vvPM0lCABJSWzw9W/pi95q8+mmb16Pm/9zOmZu34rGzHTc+vmZuHnudNQ+/GjTvrVqV/RvXZ/UkgCgSWLX+J5+fFv89b+fb95QqcSN1/8lrv3opYjGTFQf+mC873N/Gg98ZKBp10ZEPP3YtqSWBABNEht8H1jXG098ZFP827lfzrmlofuBh2LLMy8ueXylEvHk7k0LPrgaAJKQ6GuJntu7K2rV7lUdW6t2x6G9u5beEQBakOjge3T7hjiyrz/W9qzstGt7uuLIvn6PKwMgdYm/j+/AwI6IiBW/neHucQCQptTex/ffl67HS6cuxCtvX41K3Lk5/a677+N7cvemOLR3l9IDoG1SG3x3XRufjKHXLsXw5RsxNjEVfbWe6N+6Pp5+bOE3sANAWlIffACQJYn+uAUAss7gA6BUDD4ASsXgA6BUDD4ASsXgA6BUDD4ASsXgA6BUDD4ASuX/AYR3mqSf8F/ZAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] } } ] }, { "cell_type": "code", "metadata": { "id": "F9ofB5uwfCDK", "colab_type": "code", "colab": {}, "outputId": "14d42f04-5bb3-4f4d-a667-45201352c9d5" }, "source": [ "import networkx as nx\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "G = nx.Graph()\n", "G.add_edges_from(\n", " [('A', 'B'), ('A', 'C'), ('D', 'B'), ('E', 'C'), ('E', 'F'),\n", " ('B', 'H'), ('B', 'G'), ('B', 'F'), ('C', 'G')])\n", "\n", "val_map = {'A': 1.0,\n", " 'D': 0.5714285714285714,\n", " 'H': 0.0}\n", "\n", "values = [val_map.get(node, 0.25) for node in G.nodes()]\n", "nx.draw(G, with_labels=True)\n", "\n", "nx.draw(G, cmap = plt.get_cmap('jet'), node_color = values)\n", "plt.show()" ], "execution_count": null, "outputs": [ { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] } } ] }, { "cell_type": "code", "metadata": { "id": "NZssNws6fCDM", "colab_type": "code", "colab": {}, "outputId": "36a69441-04dd-4742-d6e0-2872ee443f75" }, "source": [ "import networkx as nx\n", "import matplotlib.pyplot as plt\n", "\n", "G = nx.DiGraph()\n", "G.add_edges_from(\n", " [('A', 'B'), ('A', 'C'), ('D', 'B'), ('E', 'C'), ('E', 'F'),\n", " ('B', 'H'), ('B', 'G'), ('B', 'F'), ('C', 'G')])\n", "\n", "val_map = {'A': 1.0,\n", " 'D': 0.5714285714285714,\n", " 'H': 0.0}\n", "\n", "values = [val_map.get(node, 0.25) for node in G.nodes()]\n", "\n", "# Specify the edges you want here\n", "red_edges = [('A', 'C'), ('E', 'C')]\n", "edge_colours = ['black' if not edge in red_edges else 'red'\n", " for edge in G.edges()]\n", "black_edges = [edge for edge in G.edges() if edge not in red_edges]\n", "\n", "# Need to create a layout when doing\n", "# separate calls to draw nodes and edges\n", "pos = nx.spring_layout(G)\n", "nx.draw_networkx_nodes(G, pos, cmap=plt.get_cmap('jet'), \n", " node_color = values, node_size = 500)\n", "nx.draw_networkx_labels(G, pos)\n", "nx.draw_networkx_edges(G, pos, edgelist=red_edges, edge_color='r', arrows=True)\n", "nx.draw_networkx_edges(G, pos, edgelist=black_edges, arrows=False)\n", "plt.show()" ], "execution_count": null, "outputs": [ { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] } } ] }, { "cell_type": "markdown", "metadata": { "id": "R4Aub5emfCDO", "colab_type": "text" }, "source": [ "---\n", "\n", "## Csomagok tartalma\n", "\n", "---" ] }, { "cell_type": "code", "metadata": { "id": "r9h9QzZnfCDO", "colab_type": "code", "colab": {} }, "source": [ "#### import BProp ## Használata\n", "import networkx as nx\n", "from tqdm import tqdm\n", "import time\n", "\n", "class BPGraph(nx.DiGraph): \n", " def __init__(self):\n", " super().__init__()\n", " self.next_index = 0\n", " self.binary_predecessors = []\n", " self.binary_successors = []\n", " self.neighbors = []\n", " \n", " def neighbors(self, index):\n", " return list(self[index])\n", " \n", " def __propagate(self, index_to, visited = 0): \n", " visited = visited | 1 << index_to\n", " if(self.binary_successors[index_to] > 0):\n", " for successor in self.__get_indexes(self.binary_successors[index_to]): \n", " self.binary_predecessors[successor] = self.binary_predecessors[successor] | self.binary_predecessors[index_to]\n", " \n", " for successor in self.__get_indexes(self.binary_successors[index_to]): \n", " if 1 << successor & visited != 0:\n", " self.__propagate(successor, visited)\n", " \n", " def __get_indexes(self, bin_sum):\n", " num = bin_sum\n", " powers = []\n", " counter = 0\n", " while num > 0:\n", " if(num % 2):\n", " powers.append(counter)\n", " num = num >> 1\n", " counter = counter + 1\n", " return powers\n", " \n", " def __get_number(self, index):\n", " number = 1\n", " for i in range(0, index):\n", " number = number << 2\n", " return number\n", " \n", " def add_node(self):\n", " super().add_node(self.next_index)\n", " self.next_index = self.next_index + 1\n", " self.binary_predecessors.append(0)\n", " self.binary_successors.append(0)\n", " self.neighbors.append(0)\n", " return self.next_index\n", " \n", " def add_n_nodes(self, n):\n", " nodes = []\n", " for i in range(0, n):\n", " nodes.append(self.add_node())\n", " return nodes\n", " \n", " def add_incremental_edges(self, edges):\n", " cycles = []\n", " pbar = tqdm(total = len(edges))\n", " for edge in edges:\n", " if(not self.add_edge(edge[0], edge[1])):\n", " cycles.append(edge)\n", " pbar.update(1)\n", " pbar.close()\n", " return cycles\n", " \n", " def add_edge(self, node_from, node_to, decrement = False): \n", " if(node_from == node_to): # if it's a reflexive edge, then it's a cycle\n", " return False\n", " \n", " if decrement:\n", " index_from = node_from -1 # if the nodes start from 1 instead of 0, we must decrement them\n", " index_to = node_to - 1\n", " else:\n", " index_from = node_from\n", " index_to = node_to\n", "\n", " \n", " if(self.binary_predecessors[index_from] & (1 << index_to) or # if the target edge is an predecessorof the origin\n", " self.binary_predecessors[index_from] & self.binary_successors[index_to]): # if the target edge has a successor that is an predecessorof the starting edge\n", " return False\n", " else: \n", " self.binary_predecessors[index_to] = self.binary_predecessors[index_to] | self.binary_predecessors[index_from] | (1 << index_from)\n", " self.neighbors[index_from] = self.neighbors[index_from] | (1 << index_to)\n", " self.__propagate(index_to)\n", " super().add_edge(index_from, index_to) \n", " return True\n", " \n", "######################### DFS #############################################\n", "\n", " def classic_dfs(self, start, target, visited):\n", " cycle = False\n", " for next_edge in list(self[start]):\n", " if next_edge == target:\n", " return True\n", " elif next_edge not in visited:\n", " visited.append(next_edge)\n", " cycle = self.classic_dfs(next_edge, target, visited)\n", " if cycle:\n", " return True\n", " else:\n", " visited.pop() \n", " if visited == []:\n", " return False\n", " return False\n", " \n", " def incremental_dfs(self, edges):\n", " cycles = []\n", " pbar = tqdm(total = len(edges))\n", " \n", " for edge in edges:\n", " if not self.add_dfs_edge(edge[0], edge[1]):\n", " cycles.append(edge)\n", " pbar.update(1)\n", " pbar.close()\n", " return cycles\n", " \n", " def add_dfs_edge(self, node_from, node_to):\n", " if node_from == node_to:\n", " return False\n", " elif self.classic_dfs(node_to, node_from, [node_to]):\n", " return False\n", " else:\n", " super().add_edge(node_from, node_to)\n", " return True \n", " \n", "######################### BFS #############################################\n", "\n", " def classic_bfs(self, start, target, visited):\n", " cycle = False\n", " for next_edge in list(self[start]):\n", " if next_edge == target:\n", " return True\n", " \n", " for next_edge in list(self[start]):\n", " if next_edge not in visited:\n", " visited.append(next_edge)\n", " cycle = self.classic_bfs(next_edge, target, visited)\n", " if cycle:\n", " return True\n", " else:\n", " visited.pop()\n", " if visited == []:\n", " return False\n", " \n", " return False\n", " \n", " def incremental_bfs(self, edges):\n", " cycles = []\n", " pbar = tqdm(total = len(edges))\n", " \n", " for edge in edges:\n", " if not self.add_bfs_edge(edge[0], edge[1]):\n", " cycles.append(edge)\n", " pbar.update(1)\n", " pbar.close()\n", " return cycles\n", " \n", " def add_bfs_edge(self, node_from, node_to):\n", " if node_from == node_to:\n", " return False\n", " elif self.classic_bfs(node_to, node_from, [node_to]):\n", " return False\n", " else:\n", " super().add_edge(node_from, node_to)\n", " return True " ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "KhXv7Ch0fCDQ", "colab_type": "code", "colab": {} }, "source": [ "######## import Bernstein\n", "import random\n", "import math\n", "import sys\n", "from tqdm import tqdm as tqdm_no_notebook\n", "from tqdm import tqdm_notebook\n", "import networkx as nx\n", "import time\n", "import matplotlib.pyplot as plt\n", "\n", "class Bernstein(nx.DiGraph): \n", " def __init__(self):\n", " super().__init__()\n", " self.A = []\n", " self.D = []\n", " self.As = []\n", " self.Ds = []\n", " self.AA = []\n", " self.logs = []\n", " self.S = set()\n", " \n", " def backable_add(self, obj, element):\n", " if element not in obj:\n", " obj.add(element)\n", " self.logs.append((obj, element))\n", "\n", " \n", " def update(self, a,b):\n", " a_ancestors = [x for x in nx.ancestors(self, a)] + [a]\n", " b_descendants = [x for x in nx.descendants(self, b)] + [b]\n", " \n", " for s in b_descendants:\n", " if s in self.S:\n", " for anc in a_ancestors:\n", " self.backable_add(self.A[s], anc)\n", " self.backable_add(self.Ds[anc], s)\n", " for s in a_ancestors:\n", " if s in self.S:\n", " for des in b_descendants:\n", " self.backable_add(self.D[s], des)\n", " self.backable_add(self.As[des], s)\n", "\n", " \n", " def is_s_equivalent(self, u,v):\n", " return len(self.As[u]) == len(self.As[v]) and len(self.Ds[u]) == len(self.Ds[v])\n", " \n", " \n", " def check(self, a,b):\n", " to_explore = set([b])\n", " while len(to_explore) > 0:\n", " w = to_explore.pop()\n", " if w == a:\n", " return False\n", " if w in self.AA[a]:\n", " return False\n", " elif a in self.AA[w]:\n", " pass\n", " elif not self.is_s_equivalent(a, w):\n", " pass\n", " else:\n", " self.backable_add(self.AA[w], a)\n", " for w,z in self.out_edges(w):\n", " to_explore.add(z)\n", " return True\n", " \n", " def add_n_nodes(self, N):\n", " self.add_nodes_from(list(range(N)))\n", " sample_prob_threshold = 11 * math.log(N) / math.sqrt(N)\n", " self.S = set([i for i in range(N) if random.random() <= sample_prob_threshold])\n", "\n", " self.A = [set([i]) for i in range(N)]\n", " self.D = [set([i]) for i in range(N)]\n", " self.As = [set([i]).intersection(self.S) for i in range(N)]\n", " self.Ds = [set([i]).intersection(self.S) for i in range(N)]\n", "\n", " self.AA = [set([i]) for i in range(N)]\n", " \n", " def add_edge(self, s, t):\n", " super().add_edge(s,t)\n", " self.update(s,t)\n", " if not self.check(s,t):\n", " #yield G, (s,t), id_node\n", " # rollback\n", " while len(self.logs) > 0:\n", " obj, element = self.logs.pop()\n", " obj.remove(element)\n", " self.remove_edge(s,t)\n", " return False\n", " else:\n", " return True\n", "\n" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "PDlr3k_rfCDS", "colab_type": "code", "colab": {} }, "source": [ "####### import TSVParse as tsv\n", "import csv\n", "\n", "def decode_konect_tsv(file_name):\n", " tsv_list = []\n", " with open(file_name) as tsvfile:\n", " tsvreader = csv.reader(tsvfile, delimiter=\"\\t\")\n", " skip = True\n", " meta = False\n", " line_counter = 1\n", " for line in tsvreader:\n", " if not skip:\n", " if not meta:\n", " tup = decode_tsv_line(line[0])\n", " if not tup:\n", " print(\"Parse error on line \" + str(line_counter) + \". The program will continue.\")\n", " else:\n", " tsv_list.append(tup)\n", " else:\n", " aux = line[0].replace('% ', '')\n", " tup = decode_tsv_line(aux)\n", " if not tup:\n", " print(\"Parse error on line \" + str(line_counter) + \". The program will continue.\")\n", " else:\n", " tsv_list.append(tup)\n", " meta = False\n", " else:\n", " skip = False\n", " meta = True\n", " line_counter = line_counter + 1\n", " return tsv_list\n", " \n", "def decode_tsv_line(string): \n", " nodes = ''\n", " edges = ''\n", " node = False\n", " edge = True\n", " for char in string:\n", " if node and char == ' ':\n", " break\n", " if node:\n", " nodes = nodes + char\n", " if edge and char == ' ':\n", " edge = False\n", " node = True\n", " if edge:\n", " edges = edges + char\n", " try:\n", " return ((int(nodes, 10), int(edges, 10)))\n", " except:\n", " return False\n", "\n" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "D0nWqfGAfCDU", "colab_type": "code", "colab": {} }, "source": [ "import time\n", "import networkx as nx\n", "import BProp\n", "import Bernstein\n", "import TSVParse as tsv\n", "from tqdm import tqdm\n", "import random\n", "import matplotlib\n", "import matplotlib.pyplot as plt\n", "from matplotlib.animation import FuncAnimation\n", "%matplotlib notebook\n", "matplotlib.use(\"nbagg\")" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "t-kLMXStfCDX", "colab_type": "code", "colab": {}, "outputId": "9d26720e-93f2-4159-9b51-a284c131eb17" }, "source": [ "ut=set('')\n", "utirany=set('')\n", "ut2=[]\n", "edges = [(5, 4), (2, 4), (5, 2), (2, 3), (2, 5), (2, 1), (2, 3), (3, 5), (1, 3), (5, 2), (2,4)]\n", "for x, y in edges :\n", " utirany.add((x, y))\n", " \n", " if x > y :\n", " ut.add((y,x))\n", " ut2.append((y,x))\n", " else :\n", " ut.add((x,y))\n", " ut2.append((x, y))\n", "print(ut)\n", "print('------------')\n", "print(ut2)\n", "print('------------')\n", "print(utirany)" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ "{(1, 2), (1, 3), (4, 5), (2, 3), (2, 5), (2, 4), (3, 5)}\n", "------------\n", "[(4, 5), (2, 4), (2, 5), (2, 3), (2, 5), (1, 2), (2, 3), (3, 5), (1, 3), (2, 5), (2, 4)]\n", "------------\n", "{(5, 4), (1, 3), (2, 1), (2, 3), (2, 5), (5, 2), (2, 4), (3, 5)}\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "8kERqUsZfCDY", "colab_type": "code", "colab": {}, "outputId": "74f22425-c6cb-4b31-cafa-b26dfc570aa0" }, "source": [ "M = 100\n", "N = 5\n", "edges = [(5, 4), (2, 4), (5, 2), (2, 3), (2, 5), (2, 1), (2, 3), (3, 5), (1, 3), (5, 2),(2,4)]\n", "print(edges) \n", "G = BProp.BPGraph()\n", "num = G.add_n_nodes(N)\n", "cycles_G = 0\n", "pbar = tqdm(total = len(edges))\n", "start = time.time()\n", "\n", "for u, v in edges:\n", " if not G.add_edge(u, v, decrement = True): # use decrement = False if using nodes starting from 0 instead of 1\n", " cycles_G = cycles_G + 1\n", " print('Cyle', u, v)\n", " else:\n", " print('no', u, v)\n", " pbar.update(1)\n", " \n", "end = time.time()\n", "pbar.close()\n", "print(\"Time:\", float(end - start), \"s \\nCycles:\", cycles_G, \"\\n\")\n", "#nx.draw(G)\n", "nx.draw(G, with_labels=True, font_weight='bold')" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ "100%|████████████████████████████████████████████████████████████████████████████████| 11/11 [00:00<00:00, 5523.45it/s]" ], "name": "stderr" }, { "output_type": "stream", "text": [ "[(5, 4), (2, 4), (5, 2), (2, 3), (2, 5), (2, 1), (2, 3), (3, 5), (1, 3), (5, 2), (2, 4)]\n", "no 5 4\n", "no 2 4\n", "no 5 2\n", "no 2 3\n", "Cyle 2 5\n", "no 2 1\n", "no 2 3\n", "Cyle 3 5\n", "no 1 3\n", "no 5 2\n", "no 2 4\n", "Time: 0.0009903907775878906 s \n", "Cycles: 2 \n", "\n" ], "name": "stdout" }, { "output_type": "stream", "text": [ "\n" ], "name": "stderr" }, { "output_type": "display_data", "data": { "application/javascript": [ "/* Put everything inside the global mpl namespace */\n", "window.mpl = {};\n", "\n", "\n", "mpl.get_websocket_type = function() {\n", " if (typeof(WebSocket) !== 'undefined') {\n", " return WebSocket;\n", " } else if (typeof(MozWebSocket) !== 'undefined') {\n", " return MozWebSocket;\n", " } else {\n", " alert('Your browser does not have WebSocket support. ' +\n", " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", " 'Firefox 4 and 5 are also supported but you ' +\n", " 'have to enable WebSockets in about:config.');\n", " };\n", "}\n", "\n", "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", " this.id = figure_id;\n", "\n", " this.ws = websocket;\n", "\n", " this.supports_binary = (this.ws.binaryType != undefined);\n", "\n", " if (!this.supports_binary) {\n", " var warnings = document.getElementById(\"mpl-warnings\");\n", " if (warnings) {\n", " warnings.style.display = 'block';\n", " warnings.textContent = (\n", " \"This browser does not support binary websocket messages. \" +\n", " \"Performance may be slow.\");\n", " }\n", " }\n", "\n", " this.imageObj = new Image();\n", "\n", " this.context = undefined;\n", " this.message = undefined;\n", " this.canvas = undefined;\n", " this.rubberband_canvas = undefined;\n", " this.rubberband_context = undefined;\n", " this.format_dropdown = undefined;\n", "\n", " this.image_mode = 'full';\n", "\n", " this.root = $('
');\n", " this._root_extra_style(this.root)\n", " this.root.attr('style', 'display: inline-block');\n", "\n", " $(parent_element).append(this.root);\n", "\n", " this._init_header(this);\n", " this._init_canvas(this);\n", " this._init_toolbar(this);\n", "\n", " var fig = this;\n", "\n", " this.waiting = false;\n", "\n", " this.ws.onopen = function () {\n", " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", " fig.send_message(\"send_image_mode\", {});\n", " if (mpl.ratio != 1) {\n", " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", " }\n", " fig.send_message(\"refresh\", {});\n", " }\n", "\n", " this.imageObj.onload = function() {\n", " if (fig.image_mode == 'full') {\n", " // Full images could contain transparency (where diff images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function() {\n", " fig.ws.close();\n", " }\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "}\n", "\n", "mpl.figure.prototype._init_header = function() {\n", " var titlebar = $(\n", " '
');\n", " var titletext = $(\n", " '
');\n", " titlebar.append(titletext)\n", " this.root.append(titlebar);\n", " this.header = titletext[0];\n", "}\n", "\n", "\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "\n", "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "mpl.figure.prototype._init_canvas = function() {\n", " var fig = this;\n", "\n", " var canvas_div = $('
');\n", "\n", " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", "\n", " function canvas_keyboard_event(event) {\n", " return fig.key_event(event, event['data']);\n", " }\n", "\n", " canvas_div.keydown('key_press', canvas_keyboard_event);\n", " canvas_div.keyup('key_release', canvas_keyboard_event);\n", " this.canvas_div = canvas_div\n", " this._canvas_extra_style(canvas_div)\n", " this.root.append(canvas_div);\n", "\n", " var canvas = $('');\n", " canvas.addClass('mpl-canvas');\n", " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", "\n", " this.canvas = canvas[0];\n", " this.context = canvas[0].getContext(\"2d\");\n", "\n", " var backingStore = this.context.backingStorePixelRatio ||\n", "\tthis.context.webkitBackingStorePixelRatio ||\n", "\tthis.context.mozBackingStorePixelRatio ||\n", "\tthis.context.msBackingStorePixelRatio ||\n", "\tthis.context.oBackingStorePixelRatio ||\n", "\tthis.context.backingStorePixelRatio || 1;\n", "\n", " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", "\n", " var rubberband = $('');\n", " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", "\n", " var pass_mouse_events = true;\n", "\n", " canvas_div.resizable({\n", " start: function(event, ui) {\n", " pass_mouse_events = false;\n", " },\n", " resize: function(event, ui) {\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " stop: function(event, ui) {\n", " pass_mouse_events = true;\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " });\n", "\n", " function mouse_event_fn(event) {\n", " if (pass_mouse_events)\n", " return fig.mouse_event(event, event['data']);\n", " }\n", "\n", " rubberband.mousedown('button_press', mouse_event_fn);\n", " rubberband.mouseup('button_release', mouse_event_fn);\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband.mousemove('motion_notify', mouse_event_fn);\n", "\n", " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", "\n", " canvas_div.on(\"wheel\", function (event) {\n", " event = event.originalEvent;\n", " event['data'] = 'scroll'\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " mouse_event_fn(event);\n", " });\n", "\n", " canvas_div.append(canvas);\n", " canvas_div.append(rubberband);\n", "\n", " this.rubberband = rubberband;\n", " this.rubberband_canvas = rubberband[0];\n", " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", " this.rubberband_context.strokeStyle = \"#000000\";\n", "\n", " this._resize_canvas = function(width, height) {\n", " // Keep the size of the canvas, canvas container, and rubber band\n", " // canvas in synch.\n", " canvas_div.css('width', width)\n", " canvas_div.css('height', height)\n", "\n", " canvas.attr('width', width * mpl.ratio);\n", " canvas.attr('height', height * mpl.ratio);\n", " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", "\n", " rubberband.attr('width', width);\n", " rubberband.attr('height', height);\n", " }\n", "\n", " // Set the figure to an initial 600x600px, this will subsequently be updated\n", " // upon first draw.\n", " this._resize_canvas(600, 600);\n", "\n", " // Disable right mouse context menu.\n", " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", " return false;\n", " });\n", "\n", " function set_focus () {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "}\n", "\n", "mpl.figure.prototype._init_toolbar = function() {\n", " var fig = this;\n", "\n", " var nav_element = $('
');\n", " nav_element.attr('style', 'width: 100%');\n", " this.root.append(nav_element);\n", "\n", " // Define a callback function for later on.\n", " function toolbar_event(event) {\n", " return fig.toolbar_button_onclick(event['data']);\n", " }\n", " function toolbar_mouse_event(event) {\n", " return fig.toolbar_button_onmouseover(event['data']);\n", " }\n", "\n", " for(var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " // put a spacer in here.\n", " continue;\n", " }\n", " var button = $('');\n", " button.click(method_name, toolbar_event);\n", " button.mouseover(tooltip, toolbar_mouse_event);\n", " nav_element.append(button);\n", " }\n", "\n", " // Add the status bar.\n", " var status_bar = $('');\n", " nav_element.append(status_bar);\n", " this.message = status_bar[0];\n", "\n", " // Add the close button to the window.\n", " var buttongrp = $('
');\n", " var button = $('');\n", " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", " buttongrp.append(button);\n", " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", " titlebar.prepend(buttongrp);\n", "}\n", "\n", "mpl.figure.prototype._root_extra_style = function(el){\n", " var fig = this\n", " el.on(\"remove\", function(){\n", "\tfig.close_ws(fig, {});\n", " });\n", "}\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(el){\n", " // this is important to make the div 'focusable\n", " el.attr('tabindex', 0)\n", " // reach out to IPython and tell the keyboard manager to turn it's self\n", " // off when our div gets focus\n", "\n", " // location in version 3\n", " if (IPython.notebook.keyboard_manager) {\n", " IPython.notebook.keyboard_manager.register_events(el);\n", " }\n", " else {\n", " // location in version 2\n", " IPython.keyboard_manager.register_events(el);\n", " }\n", "\n", "}\n", "\n", "mpl.figure.prototype._key_event_extra = function(event, name) {\n", " var manager = IPython.notebook.keyboard_manager;\n", " if (!manager)\n", " manager = IPython.keyboard_manager;\n", "\n", " // Check for shift+enter\n", " if (event.shiftKey && event.which == 13) {\n", " this.canvas_div.blur();\n", " // select the cell after this one\n", " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", " IPython.notebook.select(index + 1);\n", " }\n", "}\n", "\n", "mpl.figure.prototype.handle_save = function(fig, msg) {\n", " fig.ondownload(fig, null);\n", "}\n", "\n", "\n", "mpl.find_output_cell = function(html_output) {\n", " // Return the cell and output element which can be found *uniquely* in the notebook.\n", " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", " // IPython event is triggered only after the cells have been serialised, which for\n", " // our purposes (turning an active figure into a static one), is too late.\n", " var cells = IPython.notebook.get_cells();\n", " var ncells = cells.length;\n", " for (var i=0; i= 3 moved mimebundle to data attribute of output\n", " data = data.data;\n", " }\n", " if (data['text/html'] == html_output) {\n", " return [cell, data, j];\n", " }\n", " }\n", " }\n", " }\n", "}\n", "\n", "// Register the function which deals with the matplotlib target/channel.\n", "// The kernel may be null if the page has been refreshed.\n", "if (IPython.notebook.kernel != null) {\n", " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", "}\n" ], "text/plain": [ "" ] }, "metadata": { "tags": [] } }, { "output_type": "display_data", "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": { "tags": [] } } ] }, { "cell_type": "markdown", "metadata": { "id": "j7XkWHY0fCDe", "colab_type": "text" }, "source": [ "## Importing a graph" ] }, { "cell_type": "code", "metadata": { "id": "z20PIluAfCDe", "colab_type": "code", "colab": {}, "outputId": "0404c290-c0eb-4b25-a571-8ea21def1152" }, "source": [ "edges = tsv.decode_konect_tsv(\"graphs/sheep.tsv\")\n", "#edges = tsv.decode_konect_tsv(\"graphs/cattle.tsv\")\n", "#edges = tsv.decode_konect_tsv(\"graphs/rhesus.tsv\")\n", "#edges = tsv.decode_konect_tsv(\"graphs/us airports.tsv\")\n", "#edges = tsv.decode_konect_tsv(\"graphs/little rock lake.tsv\")\n", "#edges = tsv.decode_konect_tsv(\"graphs/macaques.tsv\")\n", "#edges = tsv.decode_konect_tsv(\"graphs/dutch college.tsv\")\n", "#edges = tsv.decode_konect_tsv(\"graphs/hens.tsv\")\n", "#edges = tsv.decode_konect_tsv(\"graphs/sampson.tsv\")\n", "#edges = tsv.decode_konect_tsv(\"graphs/seventh graders.tsv\")\n", "#edges = tsv.decode_konect_tsv(\"graphs/florida dry.tsv\")\n", "#edges = tsv.decode_konect_tsv(\"graphs/florida wet.tsv\")\n", "#edges = tsv.decode_konect_tsv(\"graphs/bison.tsv\")\n", "#edges = tsv.decode_konect_tsv(\"graphs/blogs.tsv\")\n", "#edges = tsv.decode_konect_tsv(\"graphs/high school.tsv\")\n", "#edges = tsv.decode_konect_tsv(\"graphs/manufacturing emails.tsv\")\n", "#edges = tsv.decode_konect_tsv(\"graphs/physicians.tsv\")\n", "#edges = tsv.decode_konect_tsv(\"graphs/residence hall.tsv\")\n", "#edges = tsv.decode_konect_tsv(\"graphs/adolescent health.tsv\")\n", "#edges = tsv.decode_konect_tsv(\"graphs/open flights.tsv\")\n", "print(edges[0])\n", "N = edges[0][0]\n", "M = edges[0][1]\n", "del(edges[0])\n", "G = BProp.BPGraph()\n", "num = G.add_n_nodes(N)\n", "cycles_G = 0\n", "pbar = tqdm(total = len(edges))\n", "start = time.time()\n", "\n", "for u, v in edges:\n", " if not G.add_edge(u, v, decrement = True): # use decrement = False if using nodes starting from 0 instead of 1\n", " cycles_G = cycles_G + 1\n", " #break # uncomment if you want to stop when you detect an edge that forms a cycle\n", " pbar.update(1)\n", "end = time.time()\n", "pbar.close()\n", "print(\"Time:\", float(end - start), \"s \\nCycles:\", cycles_G, \"\\n\")\n", "#nx.draw(G)\n", "nx.draw(G, with_labels=True, font_weight='bold')" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ "(28, 250)\n" ], "name": "stdout" }, { "output_type": "stream", "text": [ "\n", " 0%| | 0/250 [00:00" ] }, "metadata": { "tags": [] } } ] }, { "cell_type": "markdown", "metadata": { "id": "JLj3X9P-fCDg", "colab_type": "text" }, "source": [ "## BProp" ] }, { "cell_type": "code", "metadata": { "id": "rUjnou-RfCDh", "colab_type": "code", "colab": {}, "outputId": "9950ddc2-df6d-4c22-bd0d-3cf85a78ab2c" }, "source": [ "G = BProp.BPGraph()\n", "num = G.add_n_nodes(N)\n", "cycles_G = 0\n", "pbar = tqdm(total = len(edges))\n", "start = time.time()\n", "\n", "for u, v in edges:\n", " if not G.add_edge(u, v, decrement = True): # use decrement = False if using nodes starting from 0 instead of 1\n", " cycles_G = cycles_G + 1\n", " #break # uncomment if you want to stop when you detect an edge that forms a cycle\n", " pbar.update(1)\n", "end = time.time()\n", "pbar.close()\n", "print(\"Time:\", float(end - start), \"s \\nCycles:\", cycles_G, \"\\n\")\n", "nx.draw(G)" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00');\n", " this._root_extra_style(this.root)\n", " this.root.attr('style', 'display: inline-block');\n", "\n", " $(parent_element).append(this.root);\n", "\n", " this._init_header(this);\n", " this._init_canvas(this);\n", " this._init_toolbar(this);\n", "\n", " var fig = this;\n", "\n", " this.waiting = false;\n", "\n", " this.ws.onopen = function () {\n", " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", " fig.send_message(\"send_image_mode\", {});\n", " if (mpl.ratio != 1) {\n", " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", " }\n", " fig.send_message(\"refresh\", {});\n", " }\n", "\n", " this.imageObj.onload = function() {\n", " if (fig.image_mode == 'full') {\n", " // Full images could contain transparency (where diff images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function() {\n", " fig.ws.close();\n", " }\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "}\n", "\n", "mpl.figure.prototype._init_header = function() {\n", " var titlebar = $(\n", " '
');\n", " var titletext = $(\n", " '
');\n", " titlebar.append(titletext)\n", " this.root.append(titlebar);\n", " this.header = titletext[0];\n", "}\n", "\n", "\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "\n", "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "mpl.figure.prototype._init_canvas = function() {\n", " var fig = this;\n", "\n", " var canvas_div = $('
');\n", "\n", " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", "\n", " function canvas_keyboard_event(event) {\n", " return fig.key_event(event, event['data']);\n", " }\n", "\n", " canvas_div.keydown('key_press', canvas_keyboard_event);\n", " canvas_div.keyup('key_release', canvas_keyboard_event);\n", " this.canvas_div = canvas_div\n", " this._canvas_extra_style(canvas_div)\n", " this.root.append(canvas_div);\n", "\n", " var canvas = $('');\n", " canvas.addClass('mpl-canvas');\n", " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", "\n", " this.canvas = canvas[0];\n", " this.context = canvas[0].getContext(\"2d\");\n", "\n", " var backingStore = this.context.backingStorePixelRatio ||\n", "\tthis.context.webkitBackingStorePixelRatio ||\n", "\tthis.context.mozBackingStorePixelRatio ||\n", "\tthis.context.msBackingStorePixelRatio ||\n", "\tthis.context.oBackingStorePixelRatio ||\n", "\tthis.context.backingStorePixelRatio || 1;\n", "\n", " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", "\n", " var rubberband = $('');\n", " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", "\n", " var pass_mouse_events = true;\n", "\n", " canvas_div.resizable({\n", " start: function(event, ui) {\n", " pass_mouse_events = false;\n", " },\n", " resize: function(event, ui) {\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " stop: function(event, ui) {\n", " pass_mouse_events = true;\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " });\n", "\n", " function mouse_event_fn(event) {\n", " if (pass_mouse_events)\n", " return fig.mouse_event(event, event['data']);\n", " }\n", "\n", " rubberband.mousedown('button_press', mouse_event_fn);\n", " rubberband.mouseup('button_release', mouse_event_fn);\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband.mousemove('motion_notify', mouse_event_fn);\n", "\n", " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", "\n", " canvas_div.on(\"wheel\", function (event) {\n", " event = event.originalEvent;\n", " event['data'] = 'scroll'\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " mouse_event_fn(event);\n", " });\n", "\n", " canvas_div.append(canvas);\n", " canvas_div.append(rubberband);\n", "\n", " this.rubberband = rubberband;\n", " this.rubberband_canvas = rubberband[0];\n", " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", " this.rubberband_context.strokeStyle = \"#000000\";\n", "\n", " this._resize_canvas = function(width, height) {\n", " // Keep the size of the canvas, canvas container, and rubber band\n", " // canvas in synch.\n", " canvas_div.css('width', width)\n", " canvas_div.css('height', height)\n", "\n", " canvas.attr('width', width * mpl.ratio);\n", " canvas.attr('height', height * mpl.ratio);\n", " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", "\n", " rubberband.attr('width', width);\n", " rubberband.attr('height', height);\n", " }\n", "\n", " // Set the figure to an initial 600x600px, this will subsequently be updated\n", " // upon first draw.\n", " this._resize_canvas(600, 600);\n", "\n", " // Disable right mouse context menu.\n", " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", " return false;\n", " });\n", "\n", " function set_focus () {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "}\n", "\n", "mpl.figure.prototype._init_toolbar = function() {\n", " var fig = this;\n", "\n", " var nav_element = $('
');\n", " nav_element.attr('style', 'width: 100%');\n", " this.root.append(nav_element);\n", "\n", " // Define a callback function for later on.\n", " function toolbar_event(event) {\n", " return fig.toolbar_button_onclick(event['data']);\n", " }\n", " function toolbar_mouse_event(event) {\n", " return fig.toolbar_button_onmouseover(event['data']);\n", " }\n", "\n", " for(var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " // put a spacer in here.\n", " continue;\n", " }\n", " var button = $('');\n", " button.click(method_name, toolbar_event);\n", " button.mouseover(tooltip, toolbar_mouse_event);\n", " nav_element.append(button);\n", " }\n", "\n", " // Add the status bar.\n", " var status_bar = $('');\n", " nav_element.append(status_bar);\n", " this.message = status_bar[0];\n", "\n", " // Add the close button to the window.\n", " var buttongrp = $('
');\n", " var button = $('');\n", " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", " buttongrp.append(button);\n", " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", " titlebar.prepend(buttongrp);\n", "}\n", "\n", "mpl.figure.prototype._root_extra_style = function(el){\n", " var fig = this\n", " el.on(\"remove\", function(){\n", "\tfig.close_ws(fig, {});\n", " });\n", "}\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(el){\n", " // this is important to make the div 'focusable\n", " el.attr('tabindex', 0)\n", " // reach out to IPython and tell the keyboard manager to turn it's self\n", " // off when our div gets focus\n", "\n", " // location in version 3\n", " if (IPython.notebook.keyboard_manager) {\n", " IPython.notebook.keyboard_manager.register_events(el);\n", " }\n", " else {\n", " // location in version 2\n", " IPython.keyboard_manager.register_events(el);\n", " }\n", "\n", "}\n", "\n", "mpl.figure.prototype._key_event_extra = function(event, name) {\n", " var manager = IPython.notebook.keyboard_manager;\n", " if (!manager)\n", " manager = IPython.keyboard_manager;\n", "\n", " // Check for shift+enter\n", " if (event.shiftKey && event.which == 13) {\n", " this.canvas_div.blur();\n", " // select the cell after this one\n", " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", " IPython.notebook.select(index + 1);\n", " }\n", "}\n", "\n", "mpl.figure.prototype.handle_save = function(fig, msg) {\n", " fig.ondownload(fig, null);\n", "}\n", "\n", "\n", "mpl.find_output_cell = function(html_output) {\n", " // Return the cell and output element which can be found *uniquely* in the notebook.\n", " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", " // IPython event is triggered only after the cells have been serialised, which for\n", " // our purposes (turning an active figure into a static one), is too late.\n", " var cells = IPython.notebook.get_cells();\n", " var ncells = cells.length;\n", " for (var i=0; i= 3 moved mimebundle to data attribute of output\n", " data = data.data;\n", " }\n", " if (data['text/html'] == html_output) {\n", " return [cell, data, j];\n", " }\n", " }\n", " }\n", " }\n", "}\n", "\n", "// Register the function which deals with the matplotlib target/channel.\n", "// The kernel may be null if the page has been refreshed.\n", "if (IPython.notebook.kernel != null) {\n", " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", "}\n" ], "text/plain": [ "" ] }, "metadata": { "tags": [] } }, { "output_type": "display_data", "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": { "tags": [] } }, { "output_type": "stream", "text": [ "Time: 0.0060155391693115234 s\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "AQbYFz8efCDt", "colab_type": "code", "colab": {} }, "source": [ "" ], "execution_count": null, "outputs": [] } ] }