GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it
#############################################################################
##
## OrbifoldTriangulation.gi SCO package Simon Goertzen
##
## Copyright 2007-2008 Lehrstuhl B für Mathematik, RWTH Aachen
##
## The OrbifoldTriangulation data type and constructor.
##
#############################################################################
##
DeclareRepresentation( "IsOrbifoldTriangulationRep",
IsOrbifoldTriangulation, [ "vertices", "max_simplices", "isotropy", "mu", "mu_data", "info" ] );
##
BindGlobal( "TheFamilyOfOrbifoldTriangulations",
NewFamily( "TheFamilyOfOrbifoldTriangulations" ) );
##
BindGlobal( "TheTypeOrbifoldTriangulation",
NewType( TheFamilyOfOrbifoldTriangulations, IsOrbifoldTriangulationRep ) );
## <#GAPDoc Label="OrbifoldTriangulation">
## <ManSection >
## <Func Arg="M[, I, mu_data, info]" Name="OrbifoldTriangulation" />
## <Returns>OrbifoldTriangulation</Returns>
## <Description>
## The constructor for OrbifoldTriangulations. Needs the list <A>M</A> of maximal
## simplices, the Isotropy at certain vertices as a record <A>I</A>,
## and the list <A>mu_data</A> that encodes the function mu. If only one
## argument is given, <A>I</A> and <A>mu_data</A> are supposed to be empty.
## In case of two arguments, <A>mu_data</A> is supposed to be empty. If the last
## argument <A>info</A> is given as a string, it is stored in the info component
## of the orbifold triangulation and does not count towards the total number of arguments.
## <Example><![CDATA[
## gap> M := [ [1,2,3], [1,2,4], [1,3,4], [2,3,4] ];;
## gap> S2 := OrbifoldTriangulation( M, "S^2" );
## <OrbifoldTriangulation "S^2" of dimension 2. 4 simplices on 4 vertices without\
## Isotropy>
## gap> I := rec( 1 := Group( (1,2) ) );;
## gap> mu_data := [
## > [ [2], [1,2], [1,2,3], [1,2,4], x->x*(1,2) ],
## > [ [2], [1,2], [1,2,4], [1,2,3], x->x*(1,2) ]
## > ];;
## gap> Teardrop := OrbifoldTriangulation( M, I, mu_data, "Teardrop" );
## <OrbifoldTriangulation "Teardrop" of dimension 2. 4 simplices on 4 vertices wi\
## th Isotropy on 1 vertex and nontrivial mu-maps>
## ]]></Example>
## </Description>
## </ManSection>
## <#/GAPDoc>
##
InstallGlobalFunction( OrbifoldTriangulation,
function( arg )
local nargs, info, vertices, triangulation, mu, ind;
nargs := Length( arg );
info := "";
if IsString( arg[nargs] ) then
info := arg[nargs];
nargs := nargs - 1;
fi;
vertices := Union( arg[1] );
mu := function( x )
return x->x;
end;
if nargs = 1 then
triangulation := rec( vertices := vertices, max_simplices := arg[1], isotropy := rec( ), mu := mu, mu_data := [ ], info := info );
elif nargs = 2 then
triangulation := rec( vertices := vertices, max_simplices := arg[1], isotropy := arg[2], mu := mu, mu_data := [ ], info := info );
elif nargs = 3 then
mu := function( x )
for ind in arg[3] do
if ind{ [ 1 .. 4 ] } = x then
return ind[5];
fi;
od;
return x->x;
end;
triangulation := rec( vertices := vertices, max_simplices := arg[1], isotropy := arg[2], mu := mu, mu_data := arg[3], info := info );
fi;
return Objectify( TheTypeOrbifoldTriangulation, triangulation );
end
);
##
InstallMethod( PrintObj,
[ IsOrbifoldTriangulation ],
function( ot )
local str, forbidden, i, delete;
str := Concatenation( "OrbifoldTriangulation( ", String( ot!.max_simplices ), ", ", String( ot!.isotropy ), ", ", String( ot!.mu_data ) );
if ot!.info <> "" then
str := Concatenation( str, ", \"", ot!.info, "\" )" );
else
str := Concatenation( str, " )" );
fi;
forbidden := [ " ", " \n" ];
delete := [];
for i in [ 1 .. Length( str ) - 1 ] do
if str[i] = '\n' then
str[i] := ' ';
fi;
if str{[i,i+1]} in forbidden then
Add( delete, i+1 );
fi;
od;
str := str{ Difference( [ 1 .. Length( str ) ], delete ) };
Print( str, "\n" );
end
);
##
InstallMethod( ViewObj,
[ IsOrbifoldTriangulation ],
function( ot )
local info, dim, i, simpl, vert, list, len, str;
info := "";
if ot!.info <> "" then
info := Concatenation( "\"", ot!.info, "\" " );
fi;
dim := 0;
for i in ot!.max_simplices do
if Length( i ) > dim then
dim := Length( i );
fi;
od;
dim := dim - 1;
if Length( ot!.max_simplices ) = 1 then
simpl := "1 simplex";
else
simpl := Concatenation( String( Length( ot!.max_simplices ) ), " simplices" );
fi;
if Length( ot!.vertices ) = 1 then
vert := "1 vertex";
else
vert := Concatenation( String( Length( ot!.vertices ) ), " vertices" );
fi;
list := RecNames( ot!.isotropy );
len := Length( list );
if len = 0 then
str := "without Isotropy";
elif len = 1 then
str := "with Isotropy on 1 vertex";
else
str := Concatenation( "with Isotropy on ", String( len ), " vertices" );
fi;
if ot!.mu_data <> [] then
str := Concatenation( str, " and nontrivial mu-maps" );
fi;
Print( "<OrbifoldTriangulation ", info, "of dimension ", String( dim ), ". ", simpl, " on ", vert, " ", str, ">" );
end
);
##
InstallMethod( Display,
[ IsOrbifoldTriangulation ],
function( ot )
local dist, d, isotropy, i;
if ot!.info <> "" then
Print( "\nThe \"", ot!.info, "\" Orbifold:\n" );
fi;
dist := 10;
Print( "\n Vertices:" );
if Length( RecNames( ot!.isotropy ) ) > 0 then
Print( ListWithIdenticalEntries( dist, ' ' ), "Isotropy:\n" );
Print( ListWithIdenticalEntries( dist + 40, '-' ), "\n" );
else
Print( "\n", ListWithIdenticalEntries( 11, '-' ), "\n" );
fi;
isotropy := ot!.isotropy;
for i in ot!.vertices do
if String( i ) in RecNames( ot!.isotropy ) then
d := dist - Length( String( i ) ) + 9;
Print( " ", i, ListWithIdenticalEntries( d, ' ' ), isotropy.(i), "\n" );
else
Print( " ", i, "\n" );
fi;
od;
Print( "\n", " Simplices = ", ot!.max_simplices, "\n" );
if ot!.mu_data <> [ ] then
Print( "\n", " Mu =" );
ViewObj( ot!.mu_data );
fi;
Print( "\n" );
end
);
## <#GAPDoc Label="Vertices">
## <ManSection >
## <Meth Arg="ot" Name="Vertices" />
## <Returns>List <A>V</A></Returns>
## <Description>
## This returns the list of vertices <A>V</A> of the orbifold triangulation <A>ot</A>.
## Should be preferred to the equivalent <C>ot!.vertices</C>.
## </Description>
## </ManSection>
## <#/GAPDoc>
##
InstallMethod( Vertices,
[ IsOrbifoldTriangulation ],
ot -> ot!.vertices );
## <#GAPDoc Label="Simplices">
## <ManSection >
## <Meth Arg="ot" Name="Simplices" />
## <Returns>List <A>M</A></Returns>
## <Description>
## This returns the list of maximal simplices <A>M</A> of the orbifold triangulation <A>ot</A>.
## Should be preferred to the equivalent <C>ot!.max_simplices</C>.
## </Description>
## </ManSection>
## <#/GAPDoc>
##
InstallMethod( Simplices,
[ IsOrbifoldTriangulation ],
ot -> ot!.max_simplices );
## <#GAPDoc Label="Isotropy">
## <ManSection >
## <Meth Arg="ot" Name="Isotropy" />
## <Returns>Record <A>I</A></Returns>
## <Description>
## This returns the isotropy record <A>I</A> of the orbifold triangulation <A>ot</A>.
## Should be preferred to the equivalent <C>ot!.isotropy</C>.
## </Description>
## </ManSection>
## <#/GAPDoc>
##
InstallMethod( Isotropy,
[ IsOrbifoldTriangulation ],
ot -> ot!.isotropy );
## <#GAPDoc Label="Mu">
## <ManSection >
## <Meth Arg="ot" Name="Mu" />
## <Returns>Function <A>mu</A></Returns>
## <Description>
## This returns the function <A>mu</A> of the orbifold triangulation <A>ot</A>.
## Should be preferred to the equivalent <C>ot!.mu</C>.
## </Description>
## </ManSection>
## <#/GAPDoc>
##
InstallMethod( Mu,
[ IsOrbifoldTriangulation ],
ot -> ot!.mu );
## <#GAPDoc Label="MuData">
## <ManSection >
## <Meth Arg="ot" Name="MuData" />
## <Returns>List <A>mu_data</A></Returns>
## <Description>
# This returns the list <A>mu_data</A> that encodes the function mu of the orbifold triangulation <A>ot</A>.
## Should be preferred to the equivalent <C>ot!.mu_data</C>.
## </Description>
## </ManSection>
## <#/GAPDoc>
##
InstallMethod( MuData,
[ IsOrbifoldTriangulation ],
ot -> ot!.mu_data );
## <#GAPDoc Label="InfoString">
## <ManSection >
## <Meth Arg="ot" Name="InfoString" />
## <Returns>String <A>info</A></Returns>
## <Description>
## This return the string <A>info</A> of the orbifold triangulation <A>ot</A>.
## Should be preferred to the equivalent <C>ot!.info</C>.
## </Description>
## </ManSection>
## <#/GAPDoc>
##
InstallMethod( InfoString,
[ IsOrbifoldTriangulation ],
ot -> ot!.info );