Dot functions We provide several functions to translate graphs, Hasse diagrams or trees related to numerical and affine semigroups to the dot language. This can either be used with graphviz or any javascript library that interprets dot language. We give the alternative to use DotSplash that uses viz.js. br is a binary relation. Returns a GraphViz dot that represents the binary relation br. The set of vertices of the resulting graph is the source of br. Edges join those elements which are related with respect to br.
gap> br:=BinaryRelationByElements(Domain([1,2]), [DirectProductElement([1,2])]); <general mapping: <object> -> <object> > gap> Print(DotBinaryRelation(br)); digraph NSGraph{rankdir = TB; edge[dir=back]; 1 [label="1"]; 2 [label="2"]; 2 -> 1; }
S is a numerical semigroup and A is a set of integers. Returns a binary relation which is the Hasse diagram of A with respect to the ordering a\preceq b if b - a in S.
gap> s:=NumericalSemigroup(3,5,7);; gap> HasseDiagramOfNumericalSemigroup(s,[1,2,3]); <general mapping: <object> -> <object> >
S is a numerical semigroup. Applies with arguments S and its Betti elements.
gap> s:=NumericalSemigroup(3,5,7);; gap> HasseDiagramOfBettiElementsOfNumericalSemigroup(s); <general mapping: <object> -> <object> >
S is a numerical semigroup, n is an integer (optional, if not provided, the multiplicity of the semigroup is taken as its value). Applies with arguments S and the Apéry set of S with respect to n.
gap> s:=NumericalSemigroup(3,5,7);; gap> HasseDiagramOfAperyListOfNumericalSemigroup(s); <general mapping: <object> -> <object> > gap> HasseDiagramOfAperyListOfNumericalSemigroup(s,10); <general mapping: <object> -> <object> >
S is a numerical semigroup. It outputs a tree (in dot) representing the many ways S can be decomposed as a gluing of numerical semigroups (and goes recursively in the factors).
gap> s:=NumericalSemigroup(4,6,9);; gap> Print(DotOverSemigroupsNumericalSemigroup(s)); digraph NSGraph{rankdir = TB; 0 [label="< 4, 6, 9 >"]; 0 [label="< 4, 6, 9 >", style=filled]; 1 [label="< 4 > + < 6, 9 >" , shape=box]; 2 [label="< 1 >", style=filled]; 3 [label="< 2, 3 >", style=filled]; 4 [label="< 2 > + < 3 >" , shape=box]; 5 [label="< 1 >", style=filled]; 6 [label="< 1 >", style=filled]; 7 [label="< 4, 6 > + < 9 >" , shape=box]; 8 [label="< 2, 3 >", style=filled]; 10 [label="< 2 > + < 3 >" , shape=box]; 11 [label="< 1 >", style=filled]; 12 [label="< 1 >", style=filled]; 9 [label="< 1 >", style=filled]; 0 -> 1; 1 -> 2; 1 -> 3; 3 -> 4; 4 -> 5; 4 -> 6; 0 -> 7; 7 -> 8; 7 -> 9; 8 -> 10; 10 -> 11; 10 -> 12; }
\begin{center} \includegraphics[height=5cm]{img/tree-dot.pdf} \end{center} <br><center><img src="img/tree-dot.jpg"></center><br> S is a numerical semigroup. It outputs the Hasse diagram (in dot) of oversemigroups of S.
gap> s:=NumericalSemigroup(4,6,9);; gap> Print(DotOverSemigroupsNumericalSemigroup(s)); digraph NSGraph{rankdir = TB; edge[dir=back]; 1 [label="< 1 >", style=filled]; 2 [label="< 2, 3 >", style=filled]; 3 [label="< 2, 5 >", style=filled]; 4 [label="< 2, 7 >", style=filled]; 5 [label="< 2, 9 >", style=filled]; 6 [label="< 3, 4, 5 >", style=filled]; 7 [label="< 3, 4 >", style=filled]; 8 [label="< 4, 5, 6, 7 >"]; 9 [label="< 4, 5, 6 >", style=filled]; 10 [label="< 4, 6, 7, 9 >"]; 11 [label="< 4, 6, 9, 11 >"]; 12 [label="< 4, 6, 9 >", style=filled]; 1 -> 2; 2 -> 3; 2 -> 6; 3 -> 4; 3 -> 8; 4 -> 5; 4 -> 10; 5 -> 11; 6 -> 7; 6 -> 8; 7 -> 10; 8 -> 9; 8 -> 10; 9 -> 11; 10 -> 11; 11 -> 12; }
S is either numerical or an affine semigroup and n is an element in S. It outputs the graph associated to n in S (see ).
gap> s:=NumericalSemigroup(4,6,9);; gap> Print(DotRosalesGraph(15,s)); graph NSGraph{ 1 [label="6"]; 2 [label="9"]; 2 -- 1; }
f is a set of factorizations. Returns the graph (in dot) of factorizations associated to f: a complete graph whose vertices are the elements of f. Edges are labelled with distances between the nodes they join. Kruskal algorithm is used to draw in red a spanning tree with minimal distances. Thus the catenary degree is reached in the edges of the tree.
gap> f:=FactorizationsIntegerWRTList(20,[3,5,7]); [ [ 5, 1, 0 ], [ 0, 4, 0 ], [ 1, 2, 1 ], [ 2, 0, 2 ] ] gap> Print(DotFactorizationGraph(f)); graph NSGraph{ 1 [label=" (5, 1, 0)"]; 2 [label=" (0, 4, 0)"]; 3 [label=" (1, 2, 1)"]; 4 [label=" (2, 0, 2)"]; 2 -- 3[label="2", color="red"]; 3 -- 4[label="2", color="red"]; 1 -- 3[label="4", color="red"]; 1 -- 4[label="4" ]; 2 -- 4[label="4" ]; 1 -- 2[label="5" ]; }
f is a set of factorizations. Returns the Eliahou graph (in dot) of factorizations associated to f: a graph whose vertices are the elements of f, and there is an edge between two vertices if they have common support. Edges are labelled with distances between nodes they join.
gap> f:=FactorizationsIntegerWRTList(20,[3,5,7]); [ [ 5, 1, 0 ], [ 0, 4, 0 ], [ 1, 2, 1 ], [ 2, 0, 2 ] ] gap> Print(DotEliahouGraph(f)); graph NSGraph{ 1 [label=" (5, 1, 0)"]; 2 [label=" (0, 4, 0)"]; 3 [label=" (1, 2, 1)"]; 4 [label=" (2, 0, 2)"]; 2 -- 3[label="2" ]; 3 -- 4[label="2" ]; 1 -- 3[label="4" ]; 1 -- 4[label="4" ]; 1 -- 2[label="5" ]; }
This function sets the value of DotNSEngine to engine, which must be any of the following "circo","dot","fdp","neato","osage","twopi". This tells viz.js which graphviz engine to use.
gap> SetDotNSEngine("circo"); true
Here is an example with the default dot engine \begin{center} \includegraphics[height=4cm]{img/fact-dot.pdf} \end{center} <br><center><img src="img/fact-dot.jpg"></center><br> And one with circo engine \begin{center} \includegraphics[height=4cm]{img/fact-circo.pdf} \end{center} <br><center><img src="img/fact-circo.jpg"></center><br> Launches a browser and visualizes the dots diagrams provided as arguments. It outputs the html page displayed as a string, and prints the location of the temporary file that contains it.