\\ package: galpol

inn(len, c1, c2, f) = simplify(lift(sum(i=1,#len,len[i]*c1[i]*subst(c2[i],y,1/y))*Mod(1,f)));

testchar(G)=
{
  my(n= poldegree(G.pol));
  my(cl = galoisconjclasses(G));
  my(len = apply(length, cl));
  my([ct,e] = galoischartable(G));
  my(dim = simplify(ct[1,]));
  my(one = vector(#dim,k,1));
  my(f = polcyclo(e,y));
  if (#len!=#dim, error("dimension1"));
  if (sum(i=1,#dim,dim[i]^2)!=n,error("dimension2"));
  if (sum(i=1,#len,len[i])!=n,error("dimension3"));
  M=matrix(#len,#dim,i,j,inn(len,ct[,i],ct[,j],f));
  if(M!=n*matid(#len),error("columns"));
  M=simplify(matrix(#len,#dim,i,j,inn(one,ct[i,],ct[j,],f)));
  for(i=1,#len,if(M[i,i]<0,error("diag"),M[i,i]=0));
  if(M!=0,error("lines"));
}

{
 for(i=1,16,
   for(j=1,galoisgetpol(i),
     [pol,den] = galoisgetpol(i,j,1);
     gal = galoisinit(pol,den);
     testchar(gal);
   ));
}

\\#1931
G=galoisinit(x^24-24*x^22+253*x^20-1540*x^18+5984*x^16-15488*x^14+27026*x^12-31448*x^10+23540*x^8-10528*x^6+2416*x^4-192*x^2+1);
setrand(211); testchar(G)

G=galoisinit(x^10-2*x^9-20*x^8+2*x^7+69*x^6-x^5-69*x^4+2*x^3+20*x^2-2*x-1);
[T,o]=galoischartable(G);
for(i=1,#T,printsep(":",T[,i],galoischardet(G,T[,i],o),galoischarpoly(G,T[,i],o)))
