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.17 Sekunden
(vorverarbeitet)
]
|
2026-03-28
|