Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  ICMS_2018.ipynb   Sprache: unbekannt

 
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    " "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<hr/>\n",
    "<div style=\"display: block; margin: 50px 0 50px 0; margin-left: 5%\">\n",
    "<h1 style=\"text-align: left;\">Francy - An Interactive Discrete Mathematics Framework for GAP</h1>\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<hr/>\n",
    "<div style=\"display: block; margin: 50px 0 50px 0\">\n",
    "    <div style=\"text-align: left; float: left;\">\n",
    "        <h2>Manuel Martins</h2>\n",
    "        <h3>Universidade Aberta, Lisbon - Portugal</h3>\n",
    "        <h4>manuelmachadomartins@gmail.com</h4>\n",
    "    </div>\n",
    "    <div style=\"text-align: left; float: right;\">\n",
    "        <h2>Markus Pfeiffer</h2>\n",
    "        <h3>University of St Andrews, St Andrews - Scotland</h3>\n",
    "        <h4>markus.pfeiffer@morphism.de</h4>\n",
    "    </div>\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<hr/>\n",
    "<div style=\"display: block; margin: 50px 0 50px 0\">\n",
    "<h1 style=\"text-align: center\">Agenda</h1>\n",
    "\n",
    "<h3>\n",
    "    <ol type=\"1\">\n",
    "    <li>Motivation</li>\n",
    "    <li>Solution</li>\n",
    "    <li>Features</li>\n",
    "    <li>Hands-on</li>\n",
    "    <li>Future</li>\n",
    "    </ol>\n",
    "</h3>\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<hr/>\n",
    "<div style=\"display: block; margin: 50px 0 50px 0\">\n",
    "<h1 style=\"text-align: center\">1. Motivation</h1>\n",
    "\n",
    "<h3><ul><li>Francy arose from the necessity of having a lightweight framework for building interactive graphics, generated from GAP, running primarily on the web, primarily in a Jupyter Notebook.</li></ul></h3>\n",
    "\n",
    "<h2 style=\"text-align: left; margin-left: 10%\">1.1 What is Francy?</h2>\n",
    "\n",
    "<h3>\n",
    "<ul>\n",
    "    <li>an interface to draw graphics using objects;</li>\n",
    "    <li>based on simple concepts of drawing and graph theory;</li>\n",
    "    <li>2 components:</li>\n",
    "    <ol type=\"1\">\n",
    "        <li>a GAP package that is responsible for the semantic representation of graphics;</li>\n",
    "        <li>a GUI library that is responsible for generating the actual interactive graphical representation.</li>\n",
    "    </ol>\n",
    "</ul>\n",
    "</h3>\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<hr/>\n",
    "<div style=\"display: block; margin: 50px 0 50px 0\">\n",
    "<h1 style=\"text-align: center\">2. Solution</h1>\n",
    "\n",
    "<h2 style=\"text-align: left; margin-left: 10%\">2.1 GAP Package</h2>\n",
    "\n",
    "<h3>\n",
    "<ul>\n",
    "    <li>provides a semantic representation of graphics is provided by a thin layer.</li>\n",
    "    <li>uses JSON, a lightweight, text-based, language-independent data interchange format.</li>\n",
    "    <li>follows a JSON Schema, and is identified with the application/vnd.francy+json MIME type.</li>\n",
    "</ul>\n",
    "</h3>\n",
    "\n",
    "<h2 style=\"text-align: left; margin-left: 10%\">2.2 GUI Library - Javascript</h2>\n",
    "\n",
    "<h3>\n",
    "<ul>\n",
    "    <li>based on d3.js, for rendering the semantic representation produced by the GAP package;</li>\n",
    "    <li>this library is distributed both as a browser module and as a Jupyter extension.</li>\n",
    "</ul>\n",
    "</h3>\n",
    "\n",
    "<h2 style=\"text-align: left; margin-left: 10%\">2.3 Jupyter GAP Kernel</h2>\n",
    "\n",
    "<h3>\n",
    "<ul>\n",
    "    <li>pure GAP package that implements the Jupyter Kernel specification;</li>\n",
    "    <li>\"glues\" everything together.</li>\n",
    "</ul>\n",
    "</h3>\n",
    "\n",
    "<h3>\n",
    "The Jupyter extension can be used in Jupyter Notebooks or Jupyter Lab, using the Jupyter GAP Kernel and the MIME type application/vnd.francy+json to render the document.\n",
    "</h3>\n",
    "<h3>\n",
    "This creates an abstraction and allows the development of new GUI libraries, \n",
    "using different data rendering dependencies or even different programming languages, independently of the GAP package.\n",
    "</h3>\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<hr/>\n",
    "<div style=\"display: block; margin: 50px 0 0 0\">\n",
    "<h1 style=\"text-align: center\">3. Features</h1>\n",
    "\n",
    "<h3>\n",
    "<ul>\n",
    "    <li>allows the creation of directed and undirected graphs, trees, line charts, bar charts and scatter charts;</li>\n",
    "    <li>enables interaction with graphical objects by clicking, selecting, dragging and zooming;</li>\n",
    "</ul>\n",
    "</h3>\n",
    "<h2 style=\"text-align: left; margin-left: 10%\">3.1 How to install</h2>\n",
    "</div>\n",
    "\n",
    "### 1. download latest release and extract the GAP package to GAP packages directory\n",
    "\n",
    "```bash\n",
    "user@local:~$ wget https://github.com/mcmartins/francy/archive/v0.8.2.tar.gz && \\\n",
    "    mkdir -p $GAPROOT/pkg/francy && \\\n",
    "    tar xzvf v0.8.2.tar.gz -C $GAPROOT/pkg/francy francy-0.8.2/gap\n",
    "```\n",
    "\n",
    "### 2. install latest jupyter extension using pip and install on Jupyter lab and/or notebook\n",
    "\n",
    "```bash\n",
    "user@local:~$ pip install jupyter_francy\n",
    "user@local:~$ jupyter lab build # for JupyterLab\n",
    "user@local:~$ jupyter nbextension enable --py --sys-prefix jupyter_francy # for Notebook\n",
    "```\n",
    "<div style=\"display: block; margin: 0 0 50px 0\"/>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<hr/>\n",
    "<div style=\"display: block; margin: 50px 0 50px 0\">\n",
    "<h1 style=\"text-align: center\">4. Hands-on</h1>\n",
    "</div>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "true"
      ]
     },
     "execution_count": 1,
     "metadata": {
      "text/plain": ""
     },
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "true"
      ]
     },
     "execution_count": 2,
     "metadata": {
      "text/plain": ""
     },
     "output_type": "execute_result"
    }
   ],
   "source": [
    "LoadPackage(\"francy\");\n",
    "LoadPackage(\"digraph\");"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "function( G ) ... end"
      ]
     },
     "execution_count": 3,
     "metadata": {
      "text/plain": ""
     },
     "output_type": "execute_result"
    }
   ],
   "source": [
    "FrancyDigraphs := function(G)\n",
    "    local as, d, v, e, graph, nodes, m, IsGroupSimple, canvas, i, graphviz;\n",
    "\n",
    "    as := AllSubgroups(G);\n",
    "\n",
    "    d := Digraph(as, {H, K} -> IsSubgroup(H, K));;\n",
    "    v := DigraphVertices(d);;\n",
    "    e := DigraphEdges(d);;\n",
    "\n",
    "    graph := Graph(GraphType.DIRECTED);;\n",
    "    canvas := Canvas(Concatenation(\"Subgroups Digraph of \", String(G)));;\n",
    "    Add(canvas, graph);;\n",
    "\n",
    "    nodes := [];;\n",
    "\n",
    "    m := FrancyMessage(FrancyMessageType.INFO, \"Simple Groups\", \n",
    "        \"A group is simple if it is nontrivial and has no nontrivial normal subgroups.\");;\n",
    "    \n",
    "    IsGroupSimple := function(i)\n",
    "        Add(canvas, m);;\n",
    "        if IsSimpleGroup(as[i]) then\n",
    "            Add(canvas, FrancyMessage(\"Simple\", Concatenation(\"The vertex \", \n",
    "                String(i), \", representing the subgroup \", String(as[i]), \", is simple.\")));;\n",
    "        else\n",
    "            Add(canvas, FrancyMessage(\"Not Simple\", Concatenation(\"The vertex \", \n",
    "                String(i), \", representing the subgroup \", String(as[i]), \", is not simple.\")));;\n",
    "        fi;;\n",
    "        return Draw(canvas);\n",
    "    end;;\n",
    "\n",
    "    for i in v do\n",
    "        nodes[i] := Shape(ShapeType.CIRCLE, String(i));;\n",
    "        Add(nodes[i], Menu(\"Simple\", Callback(IsGroupSimple, [i])));;\n",
    "        Add(graph, nodes[i]);;\n",
    "    od;;\n",
    "\n",
    "    for i in e do\n",
    "        Add(graph, Link(nodes[i[1]], nodes[i[2]]));;\n",
    "    od;;\n",
    "    \n",
    "    graphviz := FrancyRenderer(FrancyRendererType.GRAPHVIZ_DOT);\n",
    "    Add(canvas, graphviz);\n",
    "\n",
    "    return Draw(canvas);\n",
    "end;"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<pc group of size 4 with 2 generators>"
      ]
     },
     "execution_count": 4,
     "metadata": {
      "text/plain": ""
     },
     "output_type": "execute_result"
    }
   ],
   "source": [
    "G := DihedralGroup(4);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 2.43.0 (0)\n",
       " -->\n",
       "<!-- Title: hgn Pages: 1 -->\n",
       "<svg width=\"220pt\" height=\"188pt\"\n",
       " viewBox=\"0.00 0.00 220.06 188.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 184)\">\n",
       "<title>hgn</title>\n",
       "<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-184 216.06,-184 216.06,4 -4,4\"/>\n",
       "<!-- 1 -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>1</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"68.06\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"68.06\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\">1</text>\n",
       "</g>\n",
       "<!-- 1->1 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>1->1</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M82.11,-29.76C92.98,-34.15 104.06,-30.23 104.06,-18 104.06,-9.59 98.82,-5.11 92.02,-4.56\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"91.38,-1.12 82.11,-6.24 92.55,-8.02 91.38,-1.12\"/>\n",
       "</g>\n",
       "<!-- 2 -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>2</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"32.06\" cy=\"-90\" rx=\"18\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"32.06\" y=\"-86.3\" font-family=\"Times,serif\" font-size=\"14.00\">2</text>\n",
       "</g>\n",
       "<!-- 2->1 -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>2->1</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M40.05,-73.46C44.58,-64.67 50.33,-53.48 55.45,-43.53\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"58.64,-44.99 60.1,-34.49 52.41,-41.78 58.64,-44.99\"/>\n",
       "</g>\n",
       "<!-- 2->2 -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>2->2</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M46.11,-101.76C56.98,-106.15 68.06,-102.23 68.06,-90 68.06,-81.59 62.82,-77.11 56.02,-76.56\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"55.38,-73.12 46.11,-78.24 56.55,-80.02 55.38,-73.12\"/>\n",
       "</g>\n",
       "<!-- 3 -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>3</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"104.06\" cy=\"-90\" rx=\"18\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"104.06\" y=\"-86.3\" font-family=\"Times,serif\" font-size=\"14.00\">3</text>\n",
       "</g>\n",
       "<!-- 3->1 -->\n",
       "<g id=\"edge4\" class=\"edge\">\n",
       "<title>3->1</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M96.07,-73.46C91.55,-64.67 85.8,-53.48 80.68,-43.53\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"83.72,-41.78 76.03,-34.49 77.49,-44.99 83.72,-41.78\"/>\n",
       "</g>\n",
       "<!-- 3->3 -->\n",
       "<g id=\"edge5\" class=\"edge\">\n",
       "<title>3->3</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M118.11,-101.76C128.98,-106.15 140.06,-102.23 140.06,-90 140.06,-81.59 134.82,-77.11 128.02,-76.56\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"127.38,-73.12 118.11,-78.24 128.55,-80.02 127.38,-73.12\"/>\n",
       "</g>\n",
       "<!-- 4 -->\n",
       "<g id=\"node4\" class=\"node\">\n",
       "<title>4</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"176.06\" cy=\"-90\" rx=\"18\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"176.06\" y=\"-86.3\" font-family=\"Times,serif\" font-size=\"14.00\">4</text>\n",
       "</g>\n",
       "<!-- 4->1 -->\n",
       "<g id=\"edge6\" class=\"edge\">\n",
       "<title>4->1</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M161.05,-79.27C142.99,-67.56 112.49,-47.79 91.37,-34.1\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"93.25,-31.15 82.95,-28.65 89.44,-37.03 93.25,-31.15\"/>\n",
       "</g>\n",
       "<!-- 4->4 -->\n",
       "<g id=\"edge7\" class=\"edge\">\n",
       "<title>4->4</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M190.11,-101.76C200.98,-106.15 212.06,-102.23 212.06,-90 212.06,-81.59 206.82,-77.11 200.02,-76.56\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"199.38,-73.12 190.11,-78.24 200.55,-80.02 199.38,-73.12\"/>\n",
       "</g>\n",
       "<!-- 5 -->\n",
       "<g id=\"node5\" class=\"node\">\n",
       "<title>5</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"68.06\" cy=\"-162\" rx=\"18\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"68.06\" y=\"-158.3\" font-family=\"Times,serif\" font-size=\"14.00\">5</text>\n",
       "</g>\n",
       "<!-- 5->1 -->\n",
       "<g id=\"edge8\" class=\"edge\">\n",
       "<title>5->1</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M52.2,-152.98C36.91,-144.25 14.72,-128.73 5.06,-108 -1.69,-93.49 -1.69,-86.51 5.06,-72 12.98,-54.99 29.34,-41.49 43.4,-32.38\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"45.48,-35.21 52.2,-27.02 41.84,-29.23 45.48,-35.21\"/>\n",
       "</g>\n",
       "<!-- 5->2 -->\n",
       "<g id=\"edge9\" class=\"edge\">\n",
       "<title>5->2</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M60.07,-145.46C55.55,-136.67 49.8,-125.48 44.68,-115.53\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"47.72,-113.78 40.03,-106.49 41.49,-116.99 47.72,-113.78\"/>\n",
       "</g>\n",
       "<!-- 5->3 -->\n",
       "<g id=\"edge10\" class=\"edge\">\n",
       "<title>5->3</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M76.05,-145.46C80.58,-136.67 86.33,-125.48 91.45,-115.53\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"94.64,-116.99 96.1,-106.49 88.41,-113.78 94.64,-116.99\"/>\n",
       "</g>\n",
       "<!-- 5->4 -->\n",
       "<g id=\"edge11\" class=\"edge\">\n",
       "<title>5->4</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M83.08,-151.27C101.14,-139.56 131.64,-119.79 152.76,-106.1\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"154.69,-109.03 161.18,-100.65 150.88,-103.15 154.69,-109.03\"/>\n",
       "</g>\n",
       "<!-- 5->5 -->\n",
       "<g id=\"edge12\" class=\"edge\">\n",
       "<title>5->5</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M82.11,-173.76C92.98,-178.15 104.06,-174.23 104.06,-162 104.06,-153.59 98.82,-149.11 92.02,-148.56\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"91.38,-145.12 82.11,-150.24 92.55,-152.02 91.38,-145.12\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ]
     },
     "execution_count": 5,
     "metadata": {
      "image/svg+xml": {
       "height": 500,
       "width": 500
      }
     },
     "output_type": "execute_result"
    }
   ],
   "source": [
    "JupyterSplashDot(DotDigraph(Digraph(AllSubgroups(G), {H, K} -> IsSubgroup(H, K))));"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.francy+json": "{\"canvas\" : {\"graph\" : {\"collapsed\" : true,\"id\" : \"FC957E285E0B14173EC9381C00B082970\",\"links\" : {\"F12AC5E185BB641038431E4B4C3456293\" : {\"color\" : \"\",\"id\" : \"F12AC5E185BB641038431E4B4C3456293\",\"invisible\" : false,\"length\" : 0,\"source\" : \"FEF76FDF6550246224C26BEBD124862CC\",\"target\" : \"F1AB14F00715746C17C7A051F4C4D50D1\",\"weight\" : 0},\"F18FE4D8176C446357C71A0CC5EE3A37F\" : {\"color\" : \"\",\"id\" : \"F18FE4D8176C446357C71A0CC5EE3A37F\",\"invisible\" : false,\"length\" : 0,\"source\" : \"FBC3E1C907D124ABCB4D37AFC978D49C0\",\"target\" : \"F793F564DFC7C41AD0C70B2CB648370C1\",\"weight\" : 0},\"F366688A254054F9AFC43A6EA5008CAD2\" : {\"color\" : \"\",\"id\" : \"F366688A254054F9AFC43A6EA5008CAD2\",\"invisible\" : false,\"length\" : 0,\"source\" : \"F1AB14F00715746C17C7A051F4C4D50D1\",\"target\" : \"F1AB14F00715746C17C7A051F4C4D50D1\",\"weight\" : 0},\"F4509A7188928455C64B962BCBF295BF1\" : {\"color\" : \"\",\"id\" : \"F4509A7188928455C64B962BCBF295BF1\",\"invisible\" : false,\"length\" : 0,\"source\" : \"FEF76FDF6550246224C26BEBD124862CC\",\"target\" : \"FEF76FDF6550246224C26BEBD124862CC\",\"weight\" : 0},\"F682E684B60AC4F4CCCEED7EAB57AE7DA\" : {\"color\" : \"\",\"id\" : \"F682E684B60AC4F4CCCEED7EAB57AE7DA\",\"invisible\" : false,\"length\" : 0,\"source\" : \"F793F564DFC7C41AD0C70B2CB648370C1\",\"target\" : \"F1AB14F00715746C17C7A051F4C4D50D1\",\"weight\" : 0},\"F70650600519E474F5465932AD7970059\" : {\"color\" : \"\",\"id\" : \"F70650600519E474F5465932AD7970059\",\"invisible\" : false,\"length\" : 0,\"source\" : \"FBC3E1C907D124ABCB4D37AFC978D49C0\",\"target\" : \"F1AB14F00715746C17C7A051F4C4D50D1\",\"weight\" : 0},\"F893471BC9EC94849B42DB8268A9D1AB6\" : {\"color\" : \"\",\"id\" : \"F893471BC9EC94849B42DB8268A9D1AB6\",\"invisible\" : false,\"length\" : 0,\"source\" : \"FBC3E1C907D124ABCB4D37AFC978D49C0\",\"target\" : \"F36D7D8C8024E4D9B34DBDCE35F39E797\",\"weight\" : 0},\"F8C1F96C773474A8154A4C46BB113E35E\" : {\"color\" : \"\",\"id\" : \"F8C1F96C773474A8154A4C46BB113E35E\",\"invisible\" : false,\"length\" : 0,\"source\" : \"F36D7D8C8024E4D9B34DBDCE35F39E797\",\"target\" : \"F1AB14F00715746C17C7A051F4C4D50D1\",\"weight\" : 0},\"F98C36F7AB1D945CC9C7DE79A8C6E8CC7\" : {\"color\" : \"\",\"id\" : \"F98C36F7AB1D945CC9C7DE79A8C6E8CC7\",\"invisible\" : false,\"length\" : 0,\"source\" : \"F36D7D8C8024E4D9B34DBDCE35F39E797\",\"target\" : \"F36D7D8C8024E4D9B34DBDCE35F39E797\",\"weight\" : 0},\"FAC5309F8108F4A06F49F78E45EF88986\" : {\"color\" : \"\",\"id\" : \"FAC5309F8108F4A06F49F78E45EF88986\",\"invisible\" : false,\"length\" : 0,\"source\" : \"FBC3E1C907D124ABCB4D37AFC978D49C0\",\"target\" : \"FEF76FDF6550246224C26BEBD124862CC\",\"weight\" : 0},\"FE3F02797F57E4022DCE98F0FCF04CBA8\" : {\"color\" : \"\",\"id\" : \"FE3F02797F57E4022DCE98F0FCF04CBA8\",\"invisible\" : false,\"length\" : 0,\"source\" : \"F793F564DFC7C41AD0C70B2CB648370C1\",\"target\" : \"F793F564DFC7C41AD0C70B2CB648370C1\",\"weight\" : 0},\"FEE444EE1F5F64CD1BC9BD25BD64986EE\" : {\"color\" : \"\",\"id\" : \"FEE444EE1F5F64CD1BC9BD25BD64986EE\",\"invisible\" : false,\"length\" : 0,\"source\" : \"FBC3E1C907D124ABCB4D37AFC978D49C0\",\"target\" : \"FBC3E1C907D124ABCB4D37AFC978D49C0\",\"weight\" : 0}},\"nodes\" : {\"F1AB14F00715746C17C7A051F4C4D50D1\" : {\"callbacks\" : {},\"color\" : \"\",\"id\" : \"F1AB14F00715746C17C7A051F4C4D50D1\",\"layer\" : 0,\"menus\" : {\"F0868DA228962428204E306E7BA02C0BF\" : {\"callback\" : {\"func\" : \"unknown\",\"id\" : \"FCC126CDF1E5242146C0BCE666332E9C4\",\"knownArgs\" : [\"1\"],\"requiredArgs\" : {},\"trigger\" : \"click\"},\"id\" : \"F0868DA228962428204E306E7BA02C0BF\",\"menus\" : {},\"title\" : \"Simple\"}},\"messages\" : {},\"parent\" : \"\",\"size\" : 10,\"title\" : \"1\",\"type\" : \"circle\",\"x\" : 0,\"y\" : 0},\"F36D7D8C8024E4D9B34DBDCE35F39E797\" : {\"callbacks\" : {},\"color\" : \"\",\"id\" : \"F36D7D8C8024E4D9B34DBDCE35F39E797\",\"layer\" : 0,\"menus\" : {\"FBADFB1FBB15143125C5771BF1E49AAAC\" : {\"callback\" : {\"func\" : \"unknown\",\"id\" : \"F4F18DC8FBC08428664203B7254BEDCFC\",\"knownArgs\" : [\"4\"],\"requiredArgs\" : {},\"trigger\" : \"click\"},\"id\" : \"FBADFB1FBB15143125C5771BF1E49AAAC\",\"menus\" : {},\"title\" : \"Simple\"}},\"messages\" : {},\"parent\" : \"\",\"size\" : 10,\"title\" : \"4\",\"type\" : \"circle\",\"x\" : 0,\"y\" : 0},\"F793F564DFC7C41AD0C70B2CB648370C1\" : {\"callbacks\" : {},\"color\" : \"\",\"id\" : \"F793F564DFC7C41AD0C70B2CB648370C1\",\"layer\" : 0,\"menus\" : {\"F3A62027A90C14B2E64ADFBE598DCAB1F\" : {\"callback\" : {\"func\" : \"unknown\",\"id\" : \"F40528265F01D48195C823DDF5A14D7CF\",\"knownArgs\" : [\"3\"],\"requiredArgs\" : {},\"trigger\" : \"click\"},\"id\" : \"F3A62027A90C14B2E64ADFBE598DCAB1F\",\"menus\" : {},\"title\" : \"Simple\"}},\"messages\" : {},\"parent\" : \"\",\"size\" : 10,\"title\" : \"3\",\"type\" : \"circle\",\"x\" : 0,\"y\" : 0},\"FBC3E1C907D124ABCB4D37AFC978D49C0\" : {\"callbacks\" : {},\"color\" : \"\",\"id\" : \"FBC3E1C907D124ABCB4D37AFC978D49C0\",\"layer\" : 0,\"menus\" : {\"F8F794C1FA828467404CA41218DCFC68D\" : {\"callback\" : {\"func\" : \"unknown\",\"id\" : \"F9A4E435F8A234BBD34DD34C838182A5C\",\"knownArgs\" : [\"5\"],\"requiredArgs\" : {},\"trigger\" : \"click\"},\"id\" : \"F8F794C1FA828467404CA41218DCFC68D\",\"menus\" : {},\"title\" : \"Simple\"}},\"messages\" : {},\"parent\" : \"\",\"size\" : 10,\"title\" : \"5\",\"type\" : \"circle\",\"x\" : 0,\"y\" : 0},\"FEF76FDF6550246224C26BEBD124862CC\" : {\"callbacks\" : {},\"color\" : \"\",\"id\" : \"FEF76FDF6550246224C26BEBD124862CC\",\"layer\" : 0,\"menus\" : {\"F2ED844CBF82047CA8C0E59ECD1D25F6A\" : {\"callback\" : {\"func\" : \"unknown\",\"id\" : \"FB9F3D102AF6942D1348022740EF8E8ED\",\"knownArgs\" : [\"2\"],\"requiredArgs\" : {},\"trigger\" : \"click\"},\"id\" : \"F2ED844CBF82047CA8C0E59ECD1D25F6A\",\"menus\" : {},\"title\" : \"Simple\"}},\"messages\" : {},\"parent\" : \"\",\"size\" : 10,\"title\" : \"2\",\"type\" : \"circle\",\"x\" : 0,\"y\" : 0}},\"simulation\" : true,\"type\" : \"directed\"},\"height\" : 600,\"id\" : \"F78F966D29C48478A349E56140B0752E8\",\"menus\" : {},\"messages\" : {},\"renderer\" : \"GraphViz-Renderer.dot\",\"texTypesetting\" : true,\"title\" : \"Subgroups Digraph of Group( [ f1, f2 ] )\",\"width\" : 800,\"zoomToFit\" : true},\"mime\" : \"application\\/vnd.francy+json\",\"version\" : \"1.2.4\"}"
     },
     "execution_count": 6,
     "metadata": {
      "application/vnd.francy+json": {}
     },
     "output_type": "execute_result"
    }
   ],
   "source": [
    "FrancyDigraphs(G);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<h2 style=\"text-align: left; margin-left: 10%\">4.1 More examples</h2>\n",
    "\n",
    "<h3>Try these notebooks:</h3>\n",
    "\n",
    "1. [Francy Features](francy-features.ipynb)\n",
    "2. [Subgroup Lattice](subgroup-lattice.ipynb)\n",
    "3. [Francy Monoids](francy-monoids.ipynb)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<hr/>\n",
    "<div style=\"display: block; margin: 50px 0 50px 0\">\n",
    "<h1 style=\"text-align: center\">5. Future</h1>\n",
    "\n",
    "<h3>\n",
    "<ul>\n",
    "    <li>rendering multiple topological graphs on the same canvas.</li>\n",
    "    <li>allow the creation of \"free graphics\" using lines and text.</li>\n",
    "    <li>introduce new concepts like tables for matrices representations.</li>\n",
    "    <li>validate the JSON against its JSON Schema between GAP and GUI.</li>\n",
    "    <li>rendering is done on SVG which might be \"heavy\" when loading huge graphs.</li>\n",
    "<ul>\n",
    "</h3>\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<hr/>\n",
    "<div style=\"display: block; margin: 50px 0 50px 0\">\n",
    "<h1 style=\"text-align: center\">Questions?</h1>\n",
    "<br/>\n",
    "<h1 style=\"margin-left: 10%\">Thanks!</h1>\n",
    "</div>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "GAP 4",
   "language": "gap",
   "name": "gap-4"
  },
  "language_info": {
   "codemirror_mode": "gap",
   "file_extension": ".g",
   "mimetype": "text/x-gap",
   "name": "GAP 4",
   "nbconvert_exporter": "",
   "pygments_lexer": "gap",
   "version": "4.13dev"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}

[ Dauer der Verarbeitung: 0.14 Sekunden  (vorverarbeitet)  ]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge