Goto Chapter: Top 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Bib Ind
 [Top of Book]  [Contents]   [Previous Chapter]   [Next Chapter] 

16 Visualising semigroups and elements
 16.1 dot pictures
 16.2 tex output
 16.3 tikz pictures

16 Visualising semigroups and elements

There are two operations TikzString (16.3-1) and DotString (16.1-1) in Semigroups for creating LaTeX and dot (also known as GraphViz) format pictures of the Green's class structure of a semigroup and for visualising certain types of elements of a semigroup. There is also a function Splash (Digraphs: Splash) for automatically processing the output of TikzString (16.3-1) and DotString (16.1-1) and opening the resulting pdf file.

16.1 dot pictures

In this section, we describe the operations in Semigroups for creating pictures in dot format.

The operations described in this section return strings, which can be written to a file using the function FileString (GAPDoc: FileString) or viewed using Splash (Digraphs: Splash).

16.1-1 DotString
‣ DotString( S[, options] )( operation )

Returns: A string.

If the argument S is a semigroup, and the optional second argument options is a record, then this operation produces a graphical representation of the partial order of the D-classes of the semigroup S together with the eggbox diagram of each D-class. The output is in dot format (also known as GraphViz) format. For details about this file format, and information about how to display or edit this format see https://www.graphviz.org.

The string returned by DotString can be written to a file using the command FileString (GAPDoc: FileString).

The D-classes are shown as eggbox diagrams with L-classes as rows and R-classes as columns; group H-classes are shaded gray and contain an asterisk. The L-classes and R-classes within a D-class are arranged to correspond to the normalization of the principal factor given by NormalizedPrincipalFactor (10.4-8). The D-classes are numbered according to their index in GreensDClasses(S), so that an i appears next to the eggbox diagram of GreensDClasses(S)[i]. A line from one D-class to another indicates that the higher D-class is greater than the lower one in the D-order on S.

If the optional second argument options is present, it can be used to specify some options for output.

number

if options.number is false, then the D-classes in the diagram are not numbered according to their index in the list of D-classes of S. The default value for this option is true.

maximal

if options.maximal is true, then the structure description of the group H-classes is displayed; see StructureDescription (Reference: StructureDescription). Setting this attribute to true can adversely affect the performance of DotString. The default value for this option is false.

normal

if options.normal is false, then the L- and R-classes within each D-class arranged to correspond to PrincipalFactor (10.4-8). If options.normal is true, they are instead arranged to correspond to NormalizedPrincipalFactor (10.4-8). Setting this attribute to false may improve the performance of DotString as it avoids the computation of InjectionNormalizedPrincipalFactor (10.4-7). The default value for this option is true.

gap> S := FullTransformationMonoid(3);
<full transformation monoid of degree 3>
gap> DotString(S);
"//dot\ndigraph  DClasses {\nnode [shape=plaintext]\nedge [color=blac\
k,arrowhead=none]\n1 [shape=box style=invisible label=<\n<TABLE BORDE\
R=\"0\" CELLBORDER=\"1\" CELLPADDING=\"10\" CELLSPACING=\"0\" PORT=\"\
1\">\n<TR BORDER=\"0\"><TD COLSPAN=\"1\" BORDER = \"0\" > 1</TD></TR>\
<TR><TD BGCOLOR=\"gray\">*</TD></TR>\n</TABLE>>];\n2 [shape=box style\
=invisible label=<\n<TABLE BORDER=\"0\" CELLBORDER=\"1\" CELLPADDING=\
\"10\" CELLSPACING=\"0\" PORT=\"2\">\n<TR BORDER=\"0\"><TD COLSPAN=\"\
3\" BORDER = \"0\" > 2</TD></TR><TR><TD BGCOLOR=\"gray\">*</TD><TD BG\
COLOR=\"gray\">*</TD><TD BGCOLOR=\"white\"></TD></TR>\n<TR><TD BGCOLO\
R=\"gray\">*</TD><TD BGCOLOR=\"white\"></TD><TD BGCOLOR=\"gray\">*</T\
D></TR>\n<TR><TD BGCOLOR=\"white\"></TD><TD BGCOLOR=\"gray\">*</TD><T\
D BGCOLOR=\"gray\">*</TD></TR>\n</TABLE>>];\n3 [shape=box style=invis\
ible label=<\n<TABLE BORDER=\"0\" CELLBORDER=\"1\" CELLPADDING=\"10\"\
 CELLSPACING=\"0\" PORT=\"3\">\n<TR BORDER=\"0\"><TD COLSPAN=\"1\" BO\
RDER = \"0\" > 3</TD></TR><TR><TD BGCOLOR=\"gray\">*</TD></TR>\n<TR><\
TD BGCOLOR=\"gray\">*</TD></TR>\n<TR><TD BGCOLOR=\"gray\">*</TD></TR>\
\n</TABLE>>];\n1 -> 2\n2 -> 3\n }"
gap> FileString("t3.dot", DotString(S));
1040

16.1-2 DotString
‣ DotString( digraph )( operation )

Returns: A string.

If digraph is a Digraph (Digraphs: Digraph) in the category IsCayleyDigraph (Digraphs: IsCayleyDigraph), then DotString returns a graphical representation of digraph. The output is in dot format (also known as GraphViz) format. For details about this file format, and information about how to display or edit this format see https://www.graphviz.org.

The string returned by DotString can be written to a file using the command FileString (GAPDoc: FileString).

See also DotLeftCayleyDigraph (16.1-4) and TikzLeftCayleyDigraph (16.3-2).

16.1-3 DotSemilatticeOfIdempotents
‣ DotSemilatticeOfIdempotents( S )( attribute )

Returns: A string.

This function produces a graphical representation of the semilattice of the idempotents of an inverse semigroup S where the elements of S have a unique semigroup inverse accessible via Inverse (Reference: Inverse). The idempotents are grouped by the D-class they belong to.

The output is in dot format (also known as GraphViz) format. For details about this file format, and information about how to display or edit this format see https://www.graphviz.org.

gap> S := DualSymmetricInverseMonoid(4);
<inverse block bijection monoid of degree 4 with 3 generators>
gap> DotSemilatticeOfIdempotents(S);
"//dot\ngraph graphname {\n  node [shape=point]\nranksep=2;\nsubgraph \
cluster_1{\n15 \n}\nsubgraph cluster_2{\n5 11 14 12 13 8 \n}\nsubgraph\
 cluster_3{\n2 10 6 3 4 9 7 \n}\nsubgraph cluster_4{\n1 \n}\n2 -- 1\n3\
 -- 1\n4 -- 1\n5 -- 2\n5 -- 3\n5 -- 4\n6 -- 1\n7 -- 1\n8 -- 2\n8 -- 6\
\n8 -- 7\n9 -- 1\n10 -- 1\n11 -- 2\n11 -- 9\n11 -- 10\n12 -- 3\n12 -- \
6\n12 -- 9\n13 -- 3\n13 -- 7\n13 -- 10\n14 -- 4\n14 -- 6\n14 -- 10\n15\
 -- 5\n15 -- 8\n15 -- 11\n15 -- 12\n15 -- 13\n15 -- 14\n }"

16.1-4 DotLeftCayleyDigraph
‣ DotLeftCayleyDigraph( S )( operation )
‣ DotRightCayleyDigraph( S )( operation )

Returns: A string.

If S is a semigroup satisfying CanUseFroidurePin (6.1-4), then DotLeftCayleyDigraph is simply short for DotString(LeftCayleyDigraph(S)).

DotRightCayleyDigraph can be used to produce a dot string for the right Cayley graph of S.

See DotString (16.1-1) for more details, and see also TikzLeftCayleyDigraph (16.3-2).

gap> DotLeftCayleyDigraph(Semigroup(IdentityTransformation));
"//dot\ndigraph hgn{\nnode [shape=circle]\n1 [label=\"a\"]\n1 -> 1\n}\
\n"
gap> DotRightCayleyDigraph(Semigroup(IdentityTransformation));
"//dot\ndigraph hgn{\nnode [shape=circle]\n1 [label=\"a\"]\n1 -> 1\n}\
\n"

16.2 tex output

In this section, we describe the operations in Semigroups for creating LaTeX representations of GAP objects. For pictures of GAP objects please see Section 16.3.

16.2-1 TexString
‣ TexString( f[, n] )( operation )

Returns: A string.

This function produces a string containing LaTeX code for the transformation f. If the optional parameter n is used, then this is taken to be the degree of the transformation f, if the parameter n is not given, then DegreeOfTransformation (Reference: DegreeOfTransformation) is used by default. If n is less than the degree of f, then an error is given.

gap> TexString(Transformation([6, 2, 4, 3, 6, 4]));
"\\begin{pmatrix}\n  1 & 2 & 3 & 4 & 5 & 6 \\\\\n  6 & 2 & 4 & 3 & 6 &\
 4\n\\end{pmatrix}"
gap> TexString(Transformation([1, 2, 1, 3]), 5);
"\\begin{pmatrix}\n  1 & 2 & 3 & 4 & 5 \\\\\n  1 & 2 & 1 & 3 & 5\n\\en\
d{pmatrix}"

16.3 tikz pictures

In this section, we describe the operations in Semigroups for creating pictures in tikz format.

The functions described in this section return a string, which can be written to a file using the function FileString (GAPDoc: FileString) or viewed using Splash (Digraphs: Splash).

16.3-1 TikzString
‣ TikzString( obj[, options] )( operation )

Returns: A string.

This function produces a graphical representation of the object obj using the tikz package for LaTeX. More precisely, this operation outputs a string containing a minimal LaTeX document which can be compiled using LaTeX to produce a picture of obj.

Currently the following types of objects are supported:

blocks

If obj is the left or right blocks of a bipartition, then TikzString returns a graphical representation of these blocks; see Section 3.6.

bipartitions

If obj is a bipartition, then TikzString returns a graphical representation of obj.

If the optional second argument options is a record with the component colors set to true, then the blocks of f will be colored using the standard tikz colors. Due to the limited number of colors available in tikz this option only works when the degree of obj is less than 20. See Chapter 3 for more details about bipartitions.

pbrs

If obj is a PBR (4.2-1), then TikzString returns a graphical representation obj; see Chapter 4.

Cayley graphs

If obj is a Digraph (Digraphs: Digraph) in the category IsCayleyDigraph (Digraphs: IsCayleyDigraph), then TikzString returns a picture of obj. No attempt is made whatsoever to produce a sensible picture of the digraph obj, in fact, the vertices are all given the same coordinates. Human intervention is required to produce a meaningful picture from the value returned by this method. It is intended to make the task of drawing such a Cayley graph more straightforward by providing everything except the final layout of the graph. Please use DotString (16.1-1) if you want an automatically laid out diagram of the digraph obj.

gap> x := Bipartition([[1, 4, -2, -3], [2, 3, 5, -5], [-1, -4]]);;
gap> TikzString(RightBlocks(x));
"%tikz\n\\documentclass{minimal}\n\\usepackage{tikz}\n\\begin{documen\
t}\n\\begin{tikzpicture}\n  \\draw[ultra thick](5,2)circle(.115);\n  \
\\draw(1.8,5) node [top] {{$1$}};\n  \\fill(4,2)circle(.125);\n  \\dr\
aw(1.8,4) node [top] {{$2$}};\n  \\fill(3,2)circle(.125);\n  \\draw(1\
.8,3) node [top] {{$3$}};\n  \\draw[ultra thick](2,2)circle(.115);\n \
 \\draw(1.8,2) node [top] {{$4$}};\n  \\fill(1,2)circle(.125);\n  \\d\
raw(1.8,1) node [top] {{$5$}};\n\n  \\draw (5,2.125) .. controls (5,2\
.8) and (2,2.8) .. (2,2.125);\n  \\draw (4,2.125) .. controls (4,2.6)\
 and (3,2.6) .. (3,2.125);\n\\end{tikzpicture}\n\n\\end{document}"
gap> x := Bipartition([[1, 5], [2, 4, -3, -5], [3, -1, -2], [-4]]);;
gap> TikzString(x);
"%tikz\n\\documentclass{minimal}\n\\usepackage{tikz}\n\\begin{documen\
t}\n\\begin{tikzpicture}\n\n  %block #1\n  %vertices and labels\n  \\\
fill(1,2)circle(.125);\n  \\draw(0.95, 2.2) node [above] {{ $1$}};\n \
 \\fill(5,2)circle(.125);\n  \\draw(4.95, 2.2) node [above] {{ $5$}};\
\n\n  %lines\n  \\draw(1,1.875) .. controls (1,1.1) and (5,1.1) .. (5\
,1.875);\n\n  %block #2\n  %vertices and labels\n  \\fill(2,2)circle(\
.125);\n  \\draw(1.95, 2.2) node [above] {{ $2$}};\n  \\fill(4,2)circ\
le(.125);\n  \\draw(3.95, 2.2) node [above] {{ $4$}};\n  \\fill(3,0)c\
ircle(.125);\n  \\draw(3, -0.2) node [below] {{ $-3$}};\n  \\fill(5,0\
)circle(.125);\n  \\draw(5, -0.2) node [below] {{ $-5$}};\n\n  %lines\
\n  \\draw(2,1.875) .. controls (2,1.3) and (4,1.3) .. (4,1.875);\n  \
\\draw(3,0.125) .. controls (3,0.7) and (5,0.7) .. (5,0.125);\n  \\dr\
aw(2,2)--(3,0);\n\n  %block #3\n  %vertices and labels\n  \\fill(3,2)\
circle(.125);\n  \\draw(2.95, 2.2) node [above] {{ $3$}};\n  \\fill(1\
,0)circle(.125);\n  \\draw(1, -0.2) node [below] {{ $-1$}};\n  \\fill\
(2,0)circle(.125);\n  \\draw(2, -0.2) node [below] {{ $-2$}};\n\n  %l\
ines\n  \\draw(1,0.125) .. controls (1,0.6) and (2,0.6) .. (2,0.125);\
\n  \\draw(3,2)--(2,0);\n\n  %block #4\n  %vertices and labels\n  \\f\
ill(4,0)circle(.125);\n  \\draw(4, -0.2) node [below] {{ $-4$}};\n\n \
%lines\n\\end{tikzpicture}\n\n\\end{document}"
gap> TikzString(UniversalPBR(2));
"%latex\n\\documentclass{minimal}\n\\usepackage{tikz}\n\\begin{docume\
nt}\n\\usetikzlibrary{arrows}\n\\usetikzlibrary{arrows.meta}\n\\newco\
mmand{\\arc}{\\draw[semithick, -{>[width = 1.5mm, length = 2.5mm]}]}\
\n\\begin{tikzpicture}[\n  vertex/.style={circle, draw, fill=black, i\
nner sep =0.04cm},\n  ghost/.style={circle, draw = none, inner sep = \
0.14cm},\n  botloop/.style={min distance = 8mm, out = -70, in = -110}\
,\n  toploop/.style={min distance = 8mm, out = 70, in = 110}]\n\n  % \
vertices and labels\n  \\foreach \\i in {1,...,2} {\n    \\node [vert\
ex] at (\\i/1.5, 3) {};\n    \\node [ghost] (\\i) at (\\i/1.5, 3) {};\
\n  }\n\n  \\foreach \\i in {1,...,2} {\n    \\node [vertex] at (\\i/\
1.5, 0) {};\n    \\node [ghost] (-\\i) at (\\i/1.5, 0) {};\n  }\n\n  \
% arcs from vertex 1\n  \\arc (1) to (-2);\n  \\arc (1) to (-1);\n  \
\\arc (1) edge [toploop] (1);\n  \\arc (1) .. controls (1.06666666666\
66667, 2.125) and (0.93333333333333324, 2.125) .. (2);\n\n  % arcs fr\
om vertex -1\n  \\arc (-1) .. controls (1.0666666666666667, 0.875) an\
d (0.93333333333333324, 0.875) .. (-2);\n  \\arc (-1) edge [botloop] \
(-1);\n  \\arc (-1) to (1);\n  \\arc (-1) to (2);\n\n  % arcs from ve\
rtex 2\n  \\arc (2) to (-2);\n  \\arc (2) to (-1);\n  \\arc (2) .. co\
ntrols (0.93333333333333324, 2.125) and (1.0666666666666667, 2.125) .\
. (1);\n  \\arc (2) edge [toploop] (2);\n\n  % arcs from vertex -2\n \
 \\arc (-2) edge [botloop] (-2);\n  \\arc (-2) .. controls (0.9333333\
3333333324, 0.875) and (1.0666666666666667, 0.875) .. (-1);\n  \\arc \
(-2) to (1);\n  \\arc (-2) to (2);\n\n\\end{tikzpicture}\n\\end{docum\
ent}"

16.3-2 TikzLeftCayleyDigraph
‣ TikzLeftCayleyDigraph( S )( operation )
‣ TikzRightCayleyDigraph( S )( operation )

Returns: A string.

If S is a semigroup satisfying CanUseFroidurePin (6.1-4), then TikzLeftCayleyDigraph is simply short for TikzString(LeftCayleyDigraph(S)).

TikzRightCayleyDigraph can be used to produce a tikz string for the right Cayley graph of S.

See TikzString (16.3-1) for more details, and see also DotLeftCayleyDigraph (16.1-4).

gap> TikzLeftCayleyDigraph(Semigroup(IdentityTransformation));
"\\begin{tikzpicture}[scale=1, auto, \n  vertex/.style={c\
ircle, draw, thick, fill=white, minimum size=0.65cm},\n  \
edge/.style={arrows={-angle 90}, thick},\n  loop/.style={\
min distance=5mm,looseness=5,arrows={-angle 90},thick}]\n\
\n  % Vertices . . .\n  \\node [vertex] (a) at (0, 0) {};\
\n  \\node at (0, 0) {$a$};\n\n  % Edges . . .\n  \\path[\
->] (a) edge [loop]\n           node {$a$} (a);\n\\end{ti\
kzpicture}"
gap> TikzRightCayleyDigraph(Semigroup(IdentityTransformation));
"\\begin{tikzpicture}[scale=1, auto, \n  vertex/.style={c\
ircle, draw, thick, fill=white, minimum size=0.65cm},\n  \
edge/.style={arrows={-angle 90}, thick},\n  loop/.style={\
min distance=5mm,looseness=5,arrows={-angle 90},thick}]\n\
\n  % Vertices . . .\n  \\node [vertex] (a) at (0, 0) {};\
\n  \\node at (0, 0) {$a$};\n\n  % Edges . . .\n  \\path[\
->] (a) edge [loop]\n           node {$a$} (a);\n\\end{ti\
kzpicture}"
 [Top of Book]  [Contents]   [Previous Chapter]   [Next Chapter] 
Goto Chapter: Top 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Bib Ind

generated by GAPDoc2HTML