Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
| Download
GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it
Project: cocalc-sagemath-dev-slelievre
Views: 418346## not optimized nor mantained... for the moment we concentrate our efforts in the corresponding functions that make use of tikz ################# ## This function aims to produce dot code for displaying arrays of integers. ## ## Input: the arguments (at most 4) are: #a range or a table of integers, #an integer (indicating the length of the floors; it is only needed when a range is given as first argument. #an array of integers (all the elements of each of the lists in the array is highlighted with a different color; in cases of elements that appear in more than one list are highlighted the background an the number -- the colors corresponding to the first two appearences are used) #a record of options. For details on these see the default options... InstallGlobalFunction(IP_DotArrayOfIntegers, function(arg) local opt, i, array, rg, cat, flen, aux, el, node, h, utable, k, table, dotstring, floor, nd; opt := First(arg, a -> IsRecord(a)); if opt = fail then opt := DotIP_DefaultOptionsForArraysOfIntegers; else for i in RecNames( DotIP_DefaultOptionsForArraysOfIntegers ) do if not IsBound(opt.(i)) then opt.(i) := DotIP_DefaultOptionsForArraysOfIntegers.(i); fi; od; fi; array := opt.highlight; # the integers are put in an ordered list. The length of each floor is saved. rg := First(arg, a -> not(IsRecord(a) or IsInt(a))); if rg = fail then cat := Concatenation(array); rg := [Minimum(cat)..Maximum(cat)]; fi; if IsRange(rg) then flen := First(arg, a -> IsInt(a)); if flen = fail then flen := Length(rg); fi; else flen := Length(rg[1]); rg := Concatenation(rg); fi; if opt.allow_adjust_cell_width <> "false" then aux := Int(opt.allow_adjust_cell_width)*(LogInt(Maximum(rg),10)+1); opt.cell_width := String(aux); fi; # process... for i in [1..Length(rg)] do el := rg[i]; node := [el]; for h in [1..Length(array)] do if el in array[h] then Add(node,h); fi; od; rg[i] := node; od; utable := []; for k in [1..Int(Length(rg)/flen)] do Add(utable,rg{[(k-1)*flen+1..k*flen]}); od; if not IsInt(Length(rg)/flen) then Add(utable,rg{[Int(Length(rg)/flen)*flen+1..Length(rg)]}); fi; table := Reversed(utable); ################## dotstring := "/*dot*/ \n graph IntegersArray {\n "; Append(dotstring,Concatenation("label=<<TABLE border=\"",opt.border,"\"")); Append(dotstring,Concatenation(" cellborder=\"",opt.cellborder,"\"")); Append(dotstring,Concatenation(" cellspacing=\"",opt.cellspacing,"\"")); Append(dotstring,Concatenation(" bgcolor=\"",opt.bgcolor,"\">\n ")); # Error(".."); for floor in table do Append(dotstring,"<TR>\n"); for nd in floor do if Length(nd) = 1 then Append(dotstring,Concatenation("<TD width = \"",opt.cell_width,"\">")); elif Length(nd) >= 2 then Append(dotstring,Concatenation("<TD width = \"",opt.cell_width,"\"")); Append(dotstring,Concatenation(" bgcolor=\"",opt.colors[nd[2]],"\">")); fi; if Length(nd) > 2 then Append(dotstring,Concatenation("<FONT POINT-SIZE = \"",opt.point_size,"\"")); Append(dotstring,Concatenation(" color=\"",opt.colors[nd[3]],"\"")); Append(dotstring,Concatenation(">",String(nd[1]),"</FONT></TD>\n")); else Append(dotstring,Concatenation("<FONT POINT-SIZE = \"",opt.point_size,"\"")); Append(dotstring,Concatenation(">",String(nd[1]),"</FONT></TD>\n")); fi; od; Append(dotstring,"</TR>\n"); od; Append(dotstring,"</TABLE>>\n }"); return dotstring; end);