#
# buildall(R) attempts to build orthogonal and rational seminormal models
# for all irreps of W(R). It also reports diagnostic information about the
# amount of time (in CPU seconds) and space allocated (in bytes) for each
# calculation, and the totals.
# If L is a sublist of [1,2,...,m], where m is the number of irreps of W(R),
# buildall(R,L) only builds models for the irreps indexed by L.
# By default, assume that the simple roots are ordered gracefully.
# Add the optional argument 'slow' to indicate an ungraceful order.
#
# The results of the computation are saved in three tables named
# Rep, Semi, and Branch. Save these three tables to a file for use in
# later Maple sessions.
# Use the 'unpack' function to explicitly extract the data in these
# tables into representing matrices for a particular irrep.
#
# Examples:
# buildall(E7);
# save Rep,Semi,Branch,`E7_data.m`;
#
# buildall(E8,[$1..25]);
# save Rep,Semi,Branch,`E8_25data.m`;
#
######################################################3
#
# Load version 2.4 of the coxeter package, vanilla edition.
# See:
# If you already have the (nicer) unix version installed, you can
# comment out the following line, and replace it with the line
# with(coxeter):
read `coxeter2.4v.txt`; withcoxeter():
read orthogonal;
read quadsolve;
read sparseops;
read clone_test;
read seminormal;
read orthopt;
read unpack;
infolevel[orthopt]:=2;
# Initialize the tables that comprise the database of models.
# Note that we do this only once, when the file is loaded.
# So in a given Maple session, you can only build models for reps of groups
# that fit in a single parabolic chain. To build reps for another chain,
# you'll have to re-load this file, or re-initialize the tables yourself.
# You can also jump-start the tables by reading in one of the data files
# from the data directory, but do this *after* you read this file.
# (So you can avoid recomputing E7 models prior to building E8 models.)
Rep:=table(); Branch:=table(); Semi:=table();
if `+`(0)=0 then # we are using Maple V.4 or later
myspace:=proc() kernelopts(bytesalloc) end
else # we don't have to deal with the latest "improvements"
myspace:=proc() 4*status[2] end
fi;
buildall:=proc(R) local n,L,st0,i,st,stn,fl;
interface(quiet=true);
fl:=NULL; L:=[$1..nops(coxeter['class_rep'](R))];
for i from 2 to nargs do
if type(args[i],'list') then L:=args[i] else fl:=fl,args[i] fi
od;
n:=coxeter['rank'](R); st0:=time();
for i in L do
st:=time(); orthogonal(i,R,fl);
stn:=time(); seminormal(i,n);
lprint(`seminormal took`,time()-stn);
print(i,Rep[n][i][1],time()-st,myspace());
od;
interface(quiet=false);
time()-st0,myspace();
end;