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: 4183461[1X5 [33X[0;0YPrivate Extensions of the [5XAtlasRep[105X[101X[1X Package[133X[101X23[33X[0;0YIt may be interesting to use the functions of the [5XGAP[105X interface also for4representations or programs that are [13Xnot[113X part of the [5XATLAS[105X of Group5Representations. This chapter describes how to achieve this.[133X67[33X[0;0YThe main idea is that users can notify directories containing the [21Xprivate[121X8data files, which may consist of[133X910[31X1[131X [33X[0;6Ynew faithful representations and programs for groups that are declared11already in the [21Xofficial[121X [5XATLAS[105X of Group Representations,[133X1213[31X2[131X [33X[0;6Ythe declaration of groups that are not declared in the [21Xofficial[121X [5XATLAS[105X14of Group Representations, and representations and programs for them,15and[133X1617[31X3[131X [33X[0;6Ythe definition of new kinds of representations and programs.[133X1819[33X[0;0YThe first two issues are dealt with in Section [14X5.1[114X and Section [14X5.2[114X. The last20is described in Section [14X7.5[114X.[133X2122[33X[0;0YFinally, an example of using private extensions is given in Section [14X5.3[114X.[133X2324[33X[0;0YSeveral of the sanity checks for the official part of the [5XAtlasRep[105X package25make sense also for private extensions, see Section [14X7.8[114X for more26information.[133X272829[1X5.1 [33X[0;0YAdding a Private Data Directory[133X[101X3031[33X[0;0YAfter the [5XAtlasRep[105X package has been loaded into the [5XGAP[105X session, one can add32private data. However, one should [13Xnot[113X add private files to the local data33directories of the package, or modify files in these directories. Instead,34additional data should be put into separate directories. It should be noted35that a data file is fetched from a server only if the local data directories36do not contain a file with this name, independent of the contents of the37files. (As a consequence, corrupted files in the local data directories are38[13Xnot[113X automatically replaced by a correct server file.)[133X3940[1X5.1-1 AtlasOfGroupRepresentationsNotifyPrivateDirectory[101X4142[29X[2XAtlasOfGroupRepresentationsNotifyPrivateDirectory[102X( [3Xdir[103X[, [3Xdirid[103X][, [3Xtest[103X] ) [32X function43[6XReturns:[106X [33X[0;10Y[9Xtrue[109X if none of the filenames with admissible format in the44directory [3Xdir[103X is contained in other data directories and if the45data belongs to groups whose names have been declared, otherwise46[9Xfalse[109X.[133X4748[33X[0;0YLet [3Xdir[103X be a directory (see [14X'Reference: Directories'[114X) or a string denoting49the name of a directory (such that the [5XGAP[105X object describing this directory50can be obtained by calling [2XDirectory[102X ([14XReference: Directory[114X) with the51argument [3Xdir[103X). In the following, let [3Xdirname[103X be the name of the directory.52So [3Xdirname[103X can be an absolute path or a path relative to the home directory53of the user (starting with a tilde character [10X~[110X) or a path relative to the54directory where [5XGAP[105X was started.[133X5556[33X[0;0YIf the optional argument [3Xdirid[103X is given, it must be a string. This value57will be used in the [10Xidentifier[110X components of the records that are returned58by interface functions (see Section [14X3.5[114X) for data contained in the directory59[3Xdir[103X. Note that the directory name may be different in different [5XGAP[105X sessions60or for different users who want to access the same data, whereas the61[10Xidentifier[110X components shall be independent of such differences. The default62for [3Xdirid[103X is [3Xdirname[103X.[133X6364[33X[0;0YIf the optional argument [3Xtest[103X is given, it must be [9Xtrue[109X or [9Xfalse[109X. In the65[9Xtrue[109X case, consistency checks are switched on while the file [11Xtoc.g[111X is read.66This costs some extra time, but it is recommended after each extension of67the file [11Xtoc.g[111X. The default for [3Xtest[103X is [9Xfalse[109X.[133X6869[33X[0;0Y[2XAtlasOfGroupRepresentationsNotifyPrivateDirectory[102X notifies the data in the70directory [3Xdir[103X to the [5XAtlasRep[105X package. First the pair [10X[ [3Xdirname[103X[10X, [3Xdirid[103X[10X ][110X is71added to the [10Xprivate[110X component of [2XAtlasOfGroupRepresentationsInfo[102X ([14X7.1-6[114X).72If the directory contains a file with the name [11Xtoc.g[111X then this file is read;73this file is useful for adding new group names using [10XAGR.GNAN[110X and for adding74describing data about the representations, see Section [14X7.7[114X. Next the table75of contents of the private directory is built from the list of files76contained in the private directory or in its subdirectories (one layer77deep).[133X7879[33X[0;0YOnly those files are considered whose names match an admissible format (see80Section [14X7.6[114X). Filenames that are already contained in another data directory81of the [5XAtlasRep[105X package are ignored, and messages about these filenames are82printed if the info level of [2XInfoAtlasRep[102X ([14X7.1-1[114X) is at least [22X1[122X.[133X8384[33X[0;0YNote that this implies that the files of the [21Xofficial[121X (i.e. non-private)85data directories have priority over files in private directories.[133X8687[33X[0;0YIf the directory contains files for groups whose names have not been88declared before and if the info level of [2XInfoAtlasRep[102X ([14X7.1-1[114X) is at least [22X1[122X89then a message about these names is printed.[133X9091[33X[0;0YFor convenience, the user may collect the notifications of private data92directories in the file [11Xgaprc[111X (see Section [14X'Reference: The gap.ini and gaprc93files'[114X).[133X9495[1X5.1-2 AtlasOfGroupRepresentationsForgetPrivateDirectory[101X9697[29X[2XAtlasOfGroupRepresentationsForgetPrivateDirectory[102X( [3Xdirid[103X ) [32X function9899[33X[0;0YIf [3Xdirid[103X is the identifier of a private data directory that has been100notified with [2XAtlasOfGroupRepresentationsNotifyPrivateDirectory[102X ([14X5.1-1[114X) then101[2XAtlasOfGroupRepresentationsForgetPrivateDirectory[102X removes the directory from102the list of notified private directories; this means that from then on, the103data in this directory cannot be accessed anymore in the current session.[133X104105106[1X5.2 [33X[0;0YThe Effect of Private Extensions on the User Interface[133X[101X107108[33X[0;0YFirst suppose that only new groups or new data for known groups are added.[133X109110[33X[0;0YIn this case, [2XDisplayAtlasInfo[102X ([14X3.5-1[114X) lists the private representations and111programs in the same way as the [21Xofficial[121X data, except that private parts are112marked with the string stored in the component [10Xmarkprivate[110X of113[2XAtlasOfGroupRepresentationsInfo[102X ([14X7.1-6[114X); by default, this is a star [10X*[110X. The114ordering of representations listed by [2XDisplayAtlasInfo[102X ([14X3.5-1[114X) (and referred115to by [2XAtlasGenerators[102X ([14X3.5-2[114X)) will in general change when private116directories are notified. If several private directories are used then the117ordering of data may depend on the ordering of notifications. For the other118interface functions described in Chapter [14X3[114X, the only difference is that also119the private data can be accessed. In particular the [21Xfree format[121X120[10X[3Xgroupname[103X[10XG[3Xi[103X[10X-X[3Xdescr[103X[10XW[3Xn[103X[10X[110X for straight line programs (see Section [14X7.6[114X) may be121used in private directories; the data can be accessed with [2XAtlasProgram[102X122([14X3.5-3[114X), where the last two arguments are the strings [10X"other"[110X and [3Xdescr[103X.[133X123124[33X[0;0YIf also private data types are introduced (see Section [14X7.5[114X) then additional125columns or rows can appear in the output of [2XDisplayAtlasInfo[102X ([14X3.5-1[114X), and126new inputs can become meaningful for all interface functions. Examples for127these changes can be found in Section [14X5.3[114X.[133X128129130[1X5.3 [33X[0;0YAn Example of Extending the [5XAtlasRep[105X[101X[1X Package[133X[101X131132[33X[0;0YIn the beginning we set the info level of [2XInfoAtlasRep[102X ([14X7.1-1[114X) to [22X1[122X.[133X133134[4X[32X Example [32X[104X135[4X[25Xgap>[125X [27Xlevel:= InfoLevel( InfoAtlasRep );;[127X[104X136[4X[25Xgap>[125X [27XSetInfoLevel( InfoAtlasRep, 1 );[127X[104X137[4X[32X[104X138139[33X[0;0YLet us assume that the directory [11Xprivdir[111X contains data for the cyclic group140[22XC_4[122X of order [22X4[122X and for the alternating group [22XA_5[122X on [22X5[122X points, respectively.141Note that it is obvious what the term [21Xstandard generators[121X means for the142group [22XC_4[122X.[133X143144[33X[0;0YFurther let us assume that [11Xprivdir[111X contains the following files.[133X145146[8X[11XC4G1-p4B0.m1[111X[108X147[33X[0;6Ya faithful permutation representation of [22XC_4[122X on [22X4[122X points,[133X148149[8X[11XC4G1-max1W1[111X[108X150[33X[0;6Ythe straight line program that returns the square of its unique input,[133X151152[8X[11XC4G1-a2W1[111X[108X153[33X[0;6Ythe straight line program that raises its unique input to the third154power,[133X155156[8X[11XC4G1-XtestW1[111X[108X157[33X[0;6Ythe straight line program that returns the square of its unique input,[133X158159[8X[11XA5G1-p60B0.m1[111X and [11XA5G1-p60B0.m2[111X[108X160[33X[0;6Ythe regular permutation representation of [22XA_5[122X.[133X161162[33X[0;0YThe directory and the files can be created as follows.[133X163164[4X[32X Example [32X[104X165[4X[25Xgap>[125X [27Xprv:= DirectoryTemporary( "privdir" );;[127X[104X166[4X[25Xgap>[125X [27XFileString( Filename( prv, "C4G1-p4B0.m1" ),[127X[104X167[4X[25X>[125X [27X MeatAxeString( [ (1,2,3,4) ], 4 ) );;[127X[104X168[4X[25Xgap>[125X [27XFileString( Filename( prv, "C4G1-max1W1" ),[127X[104X169[4X[25X>[125X [27X "inp 1\npwr 2 1 2\noup 1 2\n" );;[127X[104X170[4X[25Xgap>[125X [27XFileString( Filename( prv, "C4G1-XtestW1" ),[127X[104X171[4X[25X>[125X [27X "inp 1\npwr 2 1 2\noup 1 2\n" );;[127X[104X172[4X[25Xgap>[125X [27XFileString( Filename( prv, "C4G1-a2W1" ),[127X[104X173[4X[25X>[125X [27X "inp 1\npwr 3 1 2\noup 1 2\n" );;[127X[104X174[4X[25Xgap>[125X [27XFileString( Filename( prv, "C4G1-Ar1aB0.g" ),[127X[104X175[4X[25X>[125X [27X "return rec( generators:= [ [[E(4)]] ] );\n" );;[127X[104X176[4X[25Xgap>[125X [27Xpoints:= Elements( AlternatingGroup( 5 ) );;[127X[104X177[4X[25Xgap>[125X [27XFileString( Filename( prv, "A5G1-p60B0.m1" ),[127X[104X178[4X[25X>[125X [27X MeatAxeString( [ Permutation( (1,2)(3,4), points, OnRight ) ], 60 ) );;[127X[104X179[4X[25Xgap>[125X [27XFileString( Filename( prv, "A5G1-p60B0.m2" ),[127X[104X180[4X[25X>[125X [27X MeatAxeString( [ Permutation( (1,3,5), points, OnRight ) ], 60 ) );;[127X[104X181[4X[32X[104X182183[33X[0;0Y(We could also introduce intermediate directories [11XC4[111X and [11XA5[111X, say, each with184the data for one group only. Here we do not show this because creating185directories programmatically seems to be possible only with the [5XGAP[105X package186[5XIO[105X.)[133X187188[33X[0;0YThe official part of the [5XAtlasRep[105X package does not contain information about189[22XC_4[122X, so we first notify this group, in the file [11Xprivdir/toc.g[111X. Besides the190name of the group, we store the following information: the group order, the191number of (classes of) maximal subgroups, their orders, their structures,192and describing data about the two permutation representations. (The group193[22XA_5[122X is known with name [10XA5[110X in the official part of the [5XAtlasRep[105X package, so194it cannot be notified again.)[133X195196[4X[32X Example [32X[104X197[4X[25Xgap>[125X [27XFileString( Filename( prv, "toc.g" ), Concatenation( [[127X[104X198[4X[25X>[125X [27X "AGR.GNAN(\"C4\",\"C4\");\n",[127X[104X199[4X[25X>[125X [27X "AGR.GRS(\"C4\",4);\n",[127X[104X200[4X[25X>[125X [27X "AGR.MXN(\"C4\",1);\n",[127X[104X201[4X[25X>[125X [27X "AGR.MXO(\"C4\",[2]);\n",[127X[104X202[4X[25X>[125X [27X "AGR.MXS(\"C4\",[\"C2\"]);\n",[127X[104X203[4X[25X>[125X [27X "AGR.API(\"C4G1-p4B0\",[1,4,\"imprim\",\"1 < C2\"]);\n",[127X[104X204[4X[25X>[125X [27X "AGR.API(\"A5G1-p60B0\",[1,60,\"imprim\",\"1 < A4\"]);\n",[127X[104X205[4X[25X>[125X [27X ] ) );;[127X[104X206[4X[32X[104X207208[33X[0;0YThen we notify the private directory.[133X209210[4X[32X Example [32X[104X211[4X[25Xgap>[125X [27XAtlasOfGroupRepresentationsNotifyPrivateDirectory( prv, "priv", true );[127X[104X212[4X[28Xtrue[128X[104X213[4X[32X[104X214215[33X[0;0YNow we can use the interface functions for accessing the data in the private216directory.[133X217218[4X[32X Example [32X[104X219[4X[25Xgap>[125X [27XDisplayAtlasInfo( [ "C4" ] );[127X[104X220[4X[28Xgroup | # | maxes | cl | cyc | out | fnd | chk | prs[128X[104X221[4X[28X------+---+-------+----+-----+-----+-----+-----+----[128X[104X222[4X[28XC4* | 2 | 1 | | | 2 | | | [128X[104X223[4X[25Xgap>[125X [27XDisplayAtlasInfo( "C4" );[127X[104X224[4X[28XRepresentations for G = C4: (all refer to std. generators 1)[128X[104X225[4X[28X---------------------------[128X[104X226[4X[28X1: G <= Sym(4)* rank 4, on cosets of 1 < C2[128X[104X227[4X[28X2: G <= GL(1a,C)* [128X[104X228[4X[28X[128X[104X229[4X[28XPrograms for G = C4: (all refer to std. generators 1)[128X[104X230[4X[28X--------------------[128X[104X231[4X[28Xautomorphisms:[128X[104X232[4X[28X 2*[128X[104X233[4X[28Xmaxes (all 1):[128X[104X234[4X[28X 1*: C2[128X[104X235[4X[28Xother scripts:[128X[104X236[4X[28X "test"*[128X[104X237[4X[25Xgap>[125X [27XDisplayAtlasInfo( "C4", IsPermGroup, true );[127X[104X238[4X[28XRepresentations for G = C4: (all refer to std. generators 1)[128X[104X239[4X[28X---------------------------[128X[104X240[4X[28X1: G <= Sym(4)* rank 4, on cosets of 1 < C2[128X[104X241[4X[25Xgap>[125X [27XDisplayAtlasInfo( "C4", IsMatrixGroup );[127X[104X242[4X[28XRepresentations for G = C4: (all refer to std. generators 1)[128X[104X243[4X[28X---------------------------[128X[104X244[4X[28X2: G <= GL(1a,C)* [128X[104X245[4X[25Xgap>[125X [27XDisplayAtlasInfo( "C4", Dimension, 2 );[127X[104X246[4X[25Xgap>[125X [27XDisplayAtlasInfo( "A5", NrMovedPoints, 60 );[127X[104X247[4X[28XRepresentations for G = A5: (all refer to std. generators 1)[128X[104X248[4X[28X---------------------------[128X[104X249[4X[28X4: G <= Sym(60)* rank 60, on cosets of 1 < A4[128X[104X250[4X[25Xgap>[125X [27Xinfo:= OneAtlasGeneratingSetInfo( "C4" );[127X[104X251[4X[28Xrec( groupname := "C4", id := "", [128X[104X252[4X[28X identifier := [ [ "priv", "C4" ], [ "C4G1-p4B0.m1" ], 1, 4 ], [128X[104X253[4X[28X isPrimitive := false, p := 4, rankAction := 4, [128X[104X254[4X[28X repname := "C4G1-p4B0", repnr := 1, size := 4, [128X[104X255[4X[28X stabilizer := "1 < C2", standardization := 1, transitivity := 1, [128X[104X256[4X[28X type := "perm" )[128X[104X257[4X[25Xgap>[125X [27XAtlasGenerators( info.identifier );[127X[104X258[4X[28Xrec( generators := [ (1,2,3,4) ], groupname := "C4", id := "", [128X[104X259[4X[28X identifier := [ [ "priv", "C4" ], [ "C4G1-p4B0.m1" ], 1, 4 ], [128X[104X260[4X[28X isPrimitive := false, p := 4, rankAction := 4, [128X[104X261[4X[28X repname := "C4G1-p4B0", repnr := 1, size := 4, [128X[104X262[4X[28X stabilizer := "1 < C2", standardization := 1, transitivity := 1, [128X[104X263[4X[28X type := "perm" )[128X[104X264[4X[25Xgap>[125X [27XAtlasProgram( "C4", 1 );[127X[104X265[4X[28Xrec( groupname := "C4", [128X[104X266[4X[28X identifier := [ [ "priv", "C4" ], "C4G1-max1W1", 1 ], [128X[104X267[4X[28X program := <straight line program>, size := 2, standardization := 1,[128X[104X268[4X[28X subgroupname := "C2" )[128X[104X269[4X[25Xgap>[125X [27XAtlasProgram( "C4", "maxes", 1 );[127X[104X270[4X[28Xrec( groupname := "C4", [128X[104X271[4X[28X identifier := [ [ "priv", "C4" ], "C4G1-max1W1", 1 ], [128X[104X272[4X[28X program := <straight line program>, size := 2, standardization := 1,[128X[104X273[4X[28X subgroupname := "C2" )[128X[104X274[4X[25Xgap>[125X [27XAtlasProgram( "C4", "maxes", 2 );[127X[104X275[4X[28Xfail[128X[104X276[4X[25Xgap>[125X [27XAtlasGenerators( "C4", 1 );[127X[104X277[4X[28Xrec( generators := [ (1,2,3,4) ], groupname := "C4", id := "", [128X[104X278[4X[28X identifier := [ [ "priv", "C4" ], [ "C4G1-p4B0.m1" ], 1, 4 ], [128X[104X279[4X[28X isPrimitive := false, p := 4, rankAction := 4, [128X[104X280[4X[28X repname := "C4G1-p4B0", repnr := 1, size := 4, [128X[104X281[4X[28X stabilizer := "1 < C2", standardization := 1, transitivity := 1, [128X[104X282[4X[28X type := "perm" )[128X[104X283[4X[25Xgap>[125X [27XAtlasGenerators( "C4", 2 );[127X[104X284[4X[28Xrec( dim := 1, generators := [ [ [ E(4) ] ] ], groupname := "C4", [128X[104X285[4X[28X id := "a", identifier := [ [ "priv", "C4" ], "C4G1-Ar1aB0.g", 1, 1 ][128X[104X286[4X[28X , repname := "C4G1-Ar1aB0", repnr := 2, size := 4, [128X[104X287[4X[28X standardization := 1, type := "matalg" )[128X[104X288[4X[25Xgap>[125X [27XAtlasGenerators( "C4", 3 );[127X[104X289[4X[28Xfail[128X[104X290[4X[25Xgap>[125X [27XAtlasProgram( "C4", "other", "test" );[127X[104X291[4X[28Xrec( groupname := "C4", [128X[104X292[4X[28X identifier := [ [ "priv", "C4" ], "C4G1-XtestW1", 1 ], [128X[104X293[4X[28X program := <straight line program>, standardization := 1 )[128X[104X294[4X[32X[104X295296[33X[0;0YWe can restrict the data shown by [2XDisplayAtlasInfo[102X ([14X3.5-1[114X) to the private297directory, as follows.[133X298299[4X[32X Example [32X[104X300[4X[25Xgap>[125X [27XDisplayAtlasInfo( "contents", "priv" );[127X[104X301[4X[28Xgroup | # | maxes | cl | cyc | out | fnd | chk | p*[128X[104X302[4X[28X-------------------------+---+-------+----+-----+-----+-----+-----+--*[128X[104X303[4X[28XA5* | 1 | | | | | | | *[128X[104X304[4X[28XC4* | 2 | 1 | | | 2 | | | *[128X[104X305[4X[32X[104X306307[33X[0;0YFor checking the data in the private directory, we apply the relevant sanity308checks (see Section [14X7.8[114X).[133X309310[4X[32X Example [32X[104X311[4X[25Xgap>[125X [27Xif not IsBound( AGR.Test ) then[127X[104X312[4X[25X>[125X [27X ReadPackage( "atlasrep", "gap/test.g" );[127X[104X313[4X[25X>[125X [27X fi;[127X[104X314[4X[25Xgap>[125X [27XAGR.Test.Words( "priv" );[127X[104X315[4X[28Xtrue[128X[104X316[4X[25Xgap>[125X [27XAGR.Test.FileHeaders( "priv" );[127X[104X317[4X[28Xtrue[128X[104X318[4X[25Xgap>[125X [27XAGR.Test.Files( "priv" );[127X[104X319[4X[28Xtrue[128X[104X320[4X[25Xgap>[125X [27XAGR.Test.BinaryFormat( "priv" );[127X[104X321[4X[28Xtrue[128X[104X322[4X[25Xgap>[125X [27XAGR.Test.Primitivity( "priv" );[127X[104X323[4X[28Xtrue[128X[104X324[4X[25Xgap>[125X [27XAGR.Test.Characters( "priv" );[127X[104X325[4X[28Xtrue[128X[104X326[4X[32X[104X327328[33X[0;0YFinally, we [21Xuninstall[121X the private directory, and reset the info level that329had been set to [22X1[122X in the beginning. (Also the group name [10XC4[110X is removed this330way, which is an advantage of using a [11Xtoc.g[111X file over calling [10XAGRGNAN[110X331directly.), Note that we need not remove the data in the temporary332directory, [5XGAP[105X will do this automatically.[133X333334[4X[32X Example [32X[104X335[4X[25Xgap>[125X [27XAtlasOfGroupRepresentationsForgetPrivateDirectory( "priv" );[127X[104X336[4X[25Xgap>[125X [27XSetInfoLevel( InfoAtlasRep, level );[127X[104X337[4X[32X[104X338339340341