#############################################################################
##
#F                             CHEVIE library
##
#Y  Copyright 1992--1993,  Lehrstuhl D f"ur Mathematik,    RWTH Aachen,   and
#Y                         IWR   der   Universit"at    Heidelberg,   Germany.
##
###########################################################################
###########################################################################
## 
#A {\sc V.~Ennola}, On the characters of the finite unitary groups,  
#A {\em Ann.\ Acad.\ Sci.\ Fenn.\ Ser.~A~I} {\bf 323} (1963), 1--36. 
##
##
#B {\sc V.~Ennola}, On the conjugacy classes of the finite unitary groups,
#B {\em Ann.\ Acad.\ Sci.\ Fenn.\ Ser.~A~I} {\bf 313} (1962), 1--14.
##
lprint(`**************************************************************************`);
lprint(`*                                                                        *`);
lprint(`*                                                                        *`);
lprint(`*                   Generic Character Table of GU_3(q)                   *`);
lprint(`*                                                                        *`);
lprint(`*                                                                        *`);
lprint(`**************************************************************************`);

# 1) benoetigte parameter

q:='q':kK:='kK':lL:='lL':mM:='mM':uU:='uU':vV:='vV':wW:='wW':
GEWY1:='GEWY1':GEWZ2:='GEWZ2':GEWY3:='GEWY3':


# 2) charakterwerte

`GU3`:=array(-2..8,-1..8,[

[`GU_3(q)`,`2A2002`,q^3*(q+1)^3*(q-1)*(q^2-q+1),8,8,8,8,0,0,0],

[
[` `],
[` `],
[` `,[1,0],[`^2A_2`,[1,1,1]]],
[` `,[1,1],[`^2A_2`,[2,1  ]]],
[` `,[1,2],[`^2A_2`,[3    ]]],
[` `,[2,0],[`A_1`,[1,1  ]]],
[` `,[2,1],[`A_1`,[2    ]]],
[` `,[3,0],[`A_0`,[1    ]]],
[` `,[4,0],[`A_0`,[1    ]]],
[` `,[5,0],[`A_0`,[1    ]]]
],

[` `,1,1,(q-1)*(q+1)*(q^2-q+1),q*(q+1)^2*(q-1)*(q^2-q+1),
     q^2*(q^2-q+1),q^2*(q-1)*(q+1)*(q^2-q+1),q^3*(q-1)*(q^2-q+1),
     q^3*(q+1)*(q^2-q+1),q^3*(q+1)^2*(q-1)],

[[` `,[1,0],[`^2A_2`,[3    ]]],
                     1,
                     GEWY1^(3*uU*kK),
                     GEWY1^(3*uU*kK),
                     GEWY1^(3*uU*kK),
                     GEWY1^(2*kK*uU+lL*uU),
                     GEWY1^(2*kK*uU+lL*uU),
                     GEWY1^(uU*kK+uU*lL+uU*mM),
                     GEWY1^(uU*kK-uU*lL),
                     GEWY1^(uU*kK)],

[[` `,[1,1],[`^2A_2`,[2,1  ]]],
                     q*(q-1),
                     q*(q-1)*GEWY1^(3*uU*kK),
                     -q*GEWY1^(3*uU*kK),
                     0,
                     -(q-1)*GEWY1^(2*uU*kK+uU*lL),
                     GEWY1^(2*uU*kK+uU*lL),
                     2*GEWY1^(uU*kK+uU*lL+uU*mM),
                     0,
                     -GEWY1^(uU*kK)],
 
[[` `,[1,2],[`^2A_2`,[1,1,1]]],
                     q^3,
                     q^3*GEWY1^(3*uU*kK),
                     0,
                     0,
                     q*GEWY1^(2*uU*kK+uU*lL),
                     0,
                     -GEWY1^(uU*kK+uU*lL+uU*mM),
                     GEWY1^(uU*kK-uU*lL),
                     -GEWY1^(uU*kK)],

[[` `,[2,0],[`A_1`,[2    ]]],
                     (q^2-q+1),
                     (q^2-q+1)*GEWY1^(2*uU*kK+vV*kK),
                     -(q-1)*GEWY1^(2*uU*kK+vV*kK),
                     GEWY1^(2*uU*kK+vV*kK),
                     -(q-1)*GEWY1^(uU*kK+vV*kK+uU*lL)+GEWY1^(2*uU*kK+vV*lL),
                     GEWY1^(uU*kK+vV*kK+uU*lL)+GEWY1^(2*uU*kK+vV*lL),
                     GEWY1^(vV*kK+uU*lL+uU*mM)+GEWY1^(vV*lL+uU*kK+uU*mM)+GEWY1^(vV*mM+uU*kK+uU*lL),
                     GEWY1^(vV*kK-uU*lL),
                     0],

[[` `,[2,1],[`A_1`,[1,1  ]]],
                     q*(q^2-q+1),
                     q*(q^2-q+1)*GEWY1^(2*uU*kK+vV*kK),
                     q*GEWY1^(2*uU*kK+vV*kK),
                     0,
                     (q-1)*GEWY1^(uU*kK+vV*kK+uU*lL)+q*GEWY1^(2*uU*kK+vV*lL),
                     -GEWY1^(uU*kK+vV*kK+uU*lL),
                     -GEWY1^(vV*kK+uU*lL+uU*mM)-GEWY1^(vV*lL+uU*kK+uU*mM)-GEWY1^(vV*mM+uU*kK+uU*lL),
                     GEWY1^(vV*kK-uU*lL),
                     0],

[[` `,[3,0],[`A_0`,[1    ]]],
                     (q-1)*(q^2-q+1),
                     (q-1)*(q^2-q+1)*GEWY1^(uU*kK+vV*kK+wW*kK),
                     (2*q-1)*GEWY1^(uU*kK+vV*kK+wW*kK),
                     -GEWY1^(uU*kK+vV*kK+wW*kK),
                     (q-1)*(GEWY1^(uU*kK+vV*kK+wW*lL)+
                            GEWY1^(wW*kK+uU*kK+vV*lL)+
                            GEWY1^(wW*kK+vV*kK+uU*lL)),
                     -GEWY1^(uU*kK+vV*kK+wW*lL)-GEWY1^(wW*kK+uU*kK+vV*lL)-GEWY1^(wW*kK+vV*kK+uU*lL),
                     -GEWY1^(uU*kK+vV*lL+wW*mM)
                     -GEWY1^(uU*kK+vV*mM+wW*lL)
                     -GEWY1^(vV*kK+uU*lL+wW*mM)
                     -GEWY1^(vV*kK+wW*lL+uU*mM)
                     -GEWY1^(wW*kK+uU*lL+vV*mM)
                     -GEWY1^(wW*kK+vV*lL+uU*mM),
                     0,
                     0],

[[` `,[4,0],[`A_0`,[1    ]]],
                     (q+1)*(q^2-q+1),
                     (q+1)*(q^2-q+1)*GEWY1^(uU*kK+vV*kK),
                     GEWY1^(uU*kK+vV*kK),
                     GEWY1^(uU*kK+vV*kK),
                     (q+1)*GEWY1^(uU*kK+vV*lL),
                     GEWY1^(uU*kK+vV*lL),
                     0,
                     GEWY1^(vV*kK)*(GEWZ2^(uU*lL)+GEWZ2^(-q*uU*lL)),
                     0],

[[` `,[5,0],[`A_0`,[1    ]]],
                     (q+1)^2*(q-1),
                     (q+1)^2*(q-1)*GEWY1^(uU*kK),
                     -(q+1)*GEWY1^(uU*kK),
                     -GEWY1^(uU*kK),
                     0,
                     0,
                     0,
                     0,
                     -GEWY3^(uU*kK)-GEWY3^(-uU*kK*q)-GEWY3^(q^2*uU*kK)]]):

Klassen.`GU3`.Parameter := array(-1..8,[
[[],[]],
[[],[]],
[[kK=1..q+1],[]],
[[kK=1..q+1],[]],
[[kK=1..q+1],[]],
[[kK=1..q+1,lL=1..q+1],[[kK-lL,q+1]]],
[[kK=1..q+1,lL=1..q+1],[[kK-lL,q+1]]],
[[kK=1..q+1,lL=1..q+1,mM=1..q+1],[[kK-lL,q+1],[kK-mM,q+1],[lL-mM,q+1]]],
[[kK=1..q+1,lL=1..q^2-1],[[lL,q-1]]],
[[kK=1..q^3+1],[[kK,q^2-q+1]]]
]):
 
Char.`GU3`.Parameter := array(-2..8,[
[[],[]],
[[],[]],
[[],[]],
[[uU=1..q+1],[]],
[[uU=1..q+1],[]],
[[uU=1..q+1],[]],
[[uU=1..q+1,vV=1..q+1],[[uU-vV,q+1]]],
[[uU=1..q+1,vV=1..q+1],[[uU-vV,q+1]]],
[[uU=1..q+1,vV=1..q+1,wW=1..q+1],[[uU-vV,q+1],[uU-wW,q+1],[vV-wW,q+1]]],
[[vV=1..q+1,uU=1..q^2-1],[[uU,q-1]]],
[[uU=1..q^3+1],[[uU,q^2-q+1]]]
]):

# 3) summationsprozeduren

# a) klassensummen

Klassen.`2A2002`.Summe.1:=proc(tt)
   nesum(tt,kK=0..q);
end:

Klassen.`2A2002`.Summe.2:=proc(tt)
   nesum(tt,kK=0..q); 
end:

Klassen.`2A2002`.Summe.3:=proc(tt) 
   nesum(tt,kK=0..q);  
end:

Klassen.`2A2002`.Summe.4:=proc(tt)
   local tt1, ss4, ss5;
   tt1 := eesubs(lL=kK,tt);
   ss4 := nesum(tt,lL=0..q);
   ss5 := linkomb(1,ss4,-1,tt1);
   nesum(ss5,kK=0..q);
end:

Klassen.`2A2002`.Summe.5:=proc(tt)
   local tt1, ss4, ss5;
   tt1 := eesubs(lL=kK,tt);
   ss4 := nesum(tt,lL=0..q);
   ss5 := linkomb(1,ss4,-1,tt1);
   nesum(ss5,kK=0..q);  
end:

Klassen.`2A2002`.Summe.6:=proc(tt)
    local ss6a, ss6b, ss6, ss7a, ss7, ss8a, ss8, ss9a, ss9, ss10,
          tt1, tt2, tt3, tt4, tt4a;
    ss6a :=  nesum(tt,  kK=0..q);
    ss6b :=  nesum(ss6a,lL=0..q);
    ss6  :=  nesum(ss6b,mM=0..q);
    tt1  := eesubs(lL=kK,tt);
    ss7a :=  nesum(tt1, kK=0..q);
    ss7  :=  nesum(ss7a,mM=0..q);
    tt2  := eesubs(mM=lL,tt);
    ss8a :=  nesum(tt2, kK=0..q);
    ss8  :=  nesum(ss8a,lL=0..q);
    tt3  := eesubs(mM=kK,tt);
    ss9a :=  nesum(tt3, kK=0..q);
    ss9  :=  nesum(ss9a,lL=0..q);
    tt4a := eesubs(lL=kK,tt);
    tt4  := eesubs(mM=kK,tt4a);
    ss10 :=  nesum(tt4,kK=0..q);
    linkomb(1/6,ss6,-1/6,ss7,-1/6,ss8,-1/6,ss9,1/3,ss10);
end:

Klassen.`2A2002`.Summe.7:=proc(tt)
    local ss7, ss8, tt1, ss9;
    ss7 := nesum(tt,lL=0..q^2-2);
    tt1 := eesubs(lL=(q-1)*lL,tt);
    ss8 := nesum(tt1,lL=0..q);
    tt1 := linkomb(1,ss7,-1,ss8);
    ss9 := nesum(tt1,kK=0..q);
    linkomb(1/2,ss9);
end:

Klassen.`2A2002`.Summe.8:=proc(tt)
    local ss8, tt1, ss9;
    ss8 := nesum(tt,kK=0..q^3);
    tt1 := eesubs(kK=(q^2-q+1)*kK,tt);
    ss9 := nesum(tt1,kK=0..q);
    linkomb(1/3,ss8,-1/3,ss9);
end:

# b) charaktersummen

Char.`2A2002`.Summe.1:=proc(tt)
   nesum(tt,uU=0..q);
end:

Char.`2A2002`.Summe.2:=proc(tt) 
   nesum(tt,uU=0..q); 
end:

Char.`2A2002`.Summe.3:=proc(tt) 
   nesum(tt,uU=0..q); 
end:

Char.`2A2002`.Summe.4:=proc(tt)
   local tt1, ss4, ss5;
   tt1 := eesubs(vV=uU,tt);
   ss4 := nesum(tt,vV=0..q);
   ss5 := linkomb(1,ss4,-1,tt1);
   nesum(ss5,uU=0..q);
end:

Char.`2A2002`.Summe.5:=proc(tt)
   local tt1, ss4, ss5;
   tt1 := eesubs(vV=uU,tt); 
   ss4 := nesum(tt,vV=0..q); 
   ss5 := linkomb(1,ss4,-1,tt1); 
   nesum(ss5,uU=0..q); 
end: 

Char.`2A2002`.Summe.6:=proc(tt)
    local ss6a, ss6b, ss6, ss7a, ss7, ss8a, ss8, ss9a, ss9, ss10,
          tt1, tt2, tt3, tt4, tt4a;
    ss6a :=  nesum(tt,  uU=0..q);
    ss6b :=  nesum(ss6a,vV=0..q);
    ss6  :=  nesum(ss6b,wW=0..q);
    tt1  := eesubs(vV=uU,tt);
    ss7a :=  nesum(tt1, uU=0..q);
    ss7  :=  nesum(ss7a,wW=0..q);
    tt2  := eesubs(wW=vV,tt);
    ss8a :=  nesum(tt2, uU=0..q);
    ss8  :=  nesum(ss8a,vV=0..q);
    tt3  := eesubs(wW=uU,tt);
    ss9a :=  nesum(tt3, uU=0..q);
    ss9  :=  nesum(ss9a,vV=0..q);
    tt4a := eesubs(vV=uU,tt);
    tt4  := eesubs(wW=uU,tt4a);
    ss10 :=  nesum(tt4,uU=0..q);
    linkomb(1/6,ss6,-1/6,ss7,-1/6,ss8,-1/6,ss9,1/3,ss10);
end:

Char.`2A2002`.Summe.7:=proc(tt)
    local ss7, ss8, tt1, ss9;
    ss7 := nesum(tt,uU=0..q^2-2);
    tt1 := eesubs(uU=(q-1)*uU,tt);
    ss8 := nesum(tt1,uU=0..q);
    tt1 := linkomb(1,ss7,-1,ss8);
    ss9 := nesum(tt1,vV=0..q);
    linkomb(1/2,ss9);
end:

Char.`2A2002`.Summe.8:=proc(tt)
    local ss8, tt1, ss9;
    ss8 := nesum(tt,uU=0..q^3);
    tt1 := eesubs(uU=(q^2-q+1)*uU,tt);
    ss9 := nesum(tt1,uU=0..q);
    linkomb(1/3,ss8,-1/3,ss9);
end:

# 5) konvertierungen

parameter2A2002:=proc(x,char,class)
   local y;
   y:=subs(kK=kK.class,lL=lL.class,mM=mM.class,x);
   subs(uU=uU.char,vV=vV.char,wW=wW.char,y);
end:


GU3;
setCongruence.`2A2002` := proc()
  qQ := 'qQ';
  NULL;
end:

unsetCongruence.`2A2002` := proc()
  q := 'q';
  NULL;
end:

 
# 5) Informationen:
Information.`2A2002`:=TEXT(
`- Information about the generic character table of $GU_3(q)$.`,
``,
`- CHEVIE-name of the table: ``GU3```,
``,
`- The table was first computed in:`,
`  {\\sc V.~Ennola}, On the characters of the finite unitary groups,`,
`  {\\em Ann.\\ Acad.\\ Sci.\\ Fenn.\\ Ser.~A~I} {\\bf 323} (1963), 1--36.`,
``,
``,
`- See also:`,
`  {\\sc V.~Ennola}, On the conjugacy classes of the finite unitary groups,`,
`  {\\em Ann.\\ Acad.\\ Sci.\\ Fenn.\\ Ser.~A~I} {\\bf 313} (1962), 1--14.`,
``
):

g := `GU3`:
print(`g := ``GU3`` `);
