petgraph-evcxr 0.2.0

Draw petgraph graphs in jupyter notebook using the evcxr engine
Documentation
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "pegraph-evcxr allows you to display petgraph graphs in jupyter\n",
    "---------------------------------------------------------------\n",
    "\n",
    "[github](https://github.com/timthelion/petgraph-evcxr) [author Timothy Hobbs](https://timothy.hobbs.cz) [crates.io](https://crates.io/crates/petgraph-evcxr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    ":dep petgraph = \"*\"\n",
    ":dep petgraph-evcxr = \"*\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "ename": "Error",
     "evalue": "unresolved import `petgraph_evcxr::draw_graph_with_attr_getters`",
     "output_type": "error",
     "traceback": [
      "use petgraph_evcxr::{draw_graph, draw_graph_with_attr_getters, draw_dot};",
      "\u001b[91m                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m \u001b[94mno `draw_graph_with_attr_getters` in the root\u001b[0m",
      "unresolved import `petgraph_evcxr::draw_graph_with_attr_getters`"
     ]
    }
   ],
   "source": [
    "extern crate petgraph;\n",
    "use petgraph::graph::Graph;\n",
    "use petgraph::dot::Dot;\n",
    "use petgraph_evcxr::{draw_graph, draw_graph_with_attr_getters, draw_dot};"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You draw graphs using the `draw_graph` function."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "ename": "Error",
     "evalue": "failed to resolve: use of undeclared type or module `Graph`",
     "output_type": "error",
     "traceback": [
      "let mut g : Graph<&str, &str> = Graph::new();",
      "\u001b[91m                                ^^^^^\u001b[0m \u001b[94muse of undeclared type or module `Graph`\u001b[0m",
      "failed to resolve: use of undeclared type or module `Graph`"
     ]
    },
    {
     "ename": "Error",
     "evalue": "cannot find type `Graph` in this scope",
     "output_type": "error",
     "traceback": [
      "let mut g : Graph<&str, &str> = Graph::new();",
      "\u001b[91m            ^^^^^\u001b[0m \u001b[94mnot found in this scope\u001b[0m",
      "cannot find type `Graph` in this scope"
     ]
    },
    {
     "ename": "Error",
     "evalue": "cannot find function `draw_graph` in this scope",
     "output_type": "error",
     "traceback": [
      "draw_graph(&g);",
      "\u001b[91m^^^^^^^^^^\u001b[0m \u001b[94mnot found in this scope\u001b[0m",
      "cannot find function `draw_graph` in this scope"
     ]
    }
   ],
   "source": [
    "let mut g : Graph<&str, &str> = Graph::new();\n",
    "let a = g.add_node(\"a\");\n",
    "let b = g.add_node(\"b\");\n",
    "g.add_edge(a, b, \"a to b\");\n",
    "draw_graph(&g);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "ename": "Error",
     "evalue": "cannot find function `draw_graph_with_attr_getters` in this scope",
     "output_type": "error",
     "traceback": [
      "draw_graph_with_attr_getters(",
      "\u001b[91m^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m \u001b[94mnot found in this scope\u001b[0m",
      "cannot find function `draw_graph_with_attr_getters` in this scope"
     ]
    },
    {
     "ename": "Error",
     "evalue": "cannot find value `g` in this scope",
     "output_type": "error",
     "traceback": [
      "    &g,",
      "\u001b[91m     ^\u001b[0m \u001b[94mnot found in this scope\u001b[0m",
      "cannot find value `g` in this scope"
     ]
    },
    {
     "ename": "Error",
     "evalue": "expected value, found module `self`",
     "output_type": "error",
     "traceback": [
      "      (if nr.id() == self.state {",
      "\u001b[91m                     ^^^^\u001b[0m \u001b[94m`self` value is a keyword only available in methods with a `self` parameter\u001b[0m",
      "    &|_, nr| {",
      "      (if nr.id() == self.state {",
      "         \"shape = circle style = filled fillcolor = red\"",
      "      } else {",
      "         \"shape = circle\"",
      "      }).to_string()",
      "    },",
      "\u001b[91m     \u001b[0m \u001b[94mthis function doesn't have a `self` parameter\u001b[0m",
      "expected value, found module `self`"
     ]
    }
   ],
   "source": [
    "draw_graph_with_attr_getters(\n",
    "    &g,\n",
    "    &[],\n",
    "    &|_, _| \"\".to_string(),\n",
    "    &|_, nr| {\n",
    "      (if nr.id() == self.state {\n",
    "         \"shape = circle style = filled fillcolor = red\"\n",
    "      } else {\n",
    "         \"shape = circle\"\n",
    "      }).to_string()\n",
    "    },\n",
    ");"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You can also draw dot code directly using the `draw_dot` function."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "ename": "Error",
     "evalue": "cannot find function `draw_dot` in this scope",
     "output_type": "error",
     "traceback": [
      "draw_dot(dot);",
      "\u001b[91m^^^^^^^^\u001b[0m \u001b[94mnot found in this scope\u001b[0m",
      "cannot find function `draw_dot` in this scope"
     ]
    }
   ],
   "source": [
    "let dot = \"digraph {\\\n",
    "    0 [label=\\\"a\\\"]\\\n",
    "    1 [label=\\\"b\\\"]\\\n",
    "    0 -> 1 [label=\\\"a → b\\\"]\\\n",
    "}\";\n",
    "draw_dot(dot);"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Rust",
   "language": "rust",
   "name": "rust"
  },
  "language_info": {
   "codemirror_mode": "rust",
   "file_extension": ".rs",
   "mimetype": "text/rust",
   "name": "Rust",
   "pygment_lexer": "rust",
   "version": ""
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}