maxdiag(M)=vecmax(vector(#M,i,M[i,i]));
in(M,fl)=if(fl,qfisominit(M,fl),qfisominit(M));
checkauto(M,f,fl)=
{
  my(G=if(f,qfauto(in(M,fl)),if(fl,qfauto(M,fl),qfauto(M))));
  for(j=1,#G[2],my(Q=G[2][j]);
      if(M!=Q~*M*Q ,error(v)));
  print(G[1]);
}
checkisom(M,N,f,fl)=
{
  my(Q=if(f==0,if(fl,qfisom(M,N,fl),qfisom(M,N)),
          f==1,qfisom(in(M,fl),N),
          f==2,qfisom(in(M,fl),N,,qfauto(N))));
  if(Q==0 || M!=Q~*N*Q ,error(N),print("OK"));
}
qfauto(Mat(1))
M=[4,-2,-1,1,1,-2,-2,-2,-1,-1,-1,-1;-2,4,-1,-2,-2,2,2,0,-1,-1,-1,-1;-1,-1,4,-1,-1,1,1,2,0,0,2,2;1,-2,-1,4,1,-1,-1,0,2,2,-1,-1;1,-2,-1,1,4,-1,-1,-1,1,1,0,0;-2,2,1,-1,-1,4,1,0,-1,-1,-1,-1;-2,2,1,-1,-1,1,4,2,1,1,0,0;-2,0,2,0,-1,0,2,4,2,2,2,2;-1,-1,0,2,1,-1,1,2,4,2,1,0;-1,-1,0,2,1,-1,1,2,2,4,0,1;-1,-1,2,-1,0,-1,0,2,1,0,4,2;-1,-1,2,-1,0,-1,0,2,0,1,2,4];
qfauto(qfisominit(M,,qfminim(M,maxdiag(M))))[1]
qfauto(qfisominit(M,,qfminim(M,maxdiag(M))[3]))[1]
checkauto(M,0)
checkauto(M,0,[1,1])
checkauto(M,1)
checkauto(M,1,[1,1])
N1=[2,0,-1,-1,-1,1,0,0,0,0,-1,0,-1,1,0,0;0,2,1,1,1,-1,0,0,-1,1,-1,0,0,0,1,1;-1,1,4,2,2,-2,0,1,1,0,-1,1,-1,1,-1,-1;-1,1,2,4,2,-2,0,1,-1,0,1,1,1,1,1,1;-1,1,2,2,4,-2,0,1,-1,0,-1,1,-1,1,1,1;1,-1,-2,-2,-2,4,-1,0,1,0,1,0,1,-1,-1,-1;0,0,0,0,0,-1,2,-1,-1,0,-1,0,-1,0,1,0;0,0,1,1,1,0,-1,2,1,0,0,1,0,1,-1,0;0,-1,1,-1,-1,1,-1,1,4,0,0,0,0,0,-3,-2;0,1,0,0,0,0,0,0,0,2,-1,0,0,-1,0,0;-1,-1,-1,1,-1,1,-1,0,0,-1,4,0,3,-1,0,0;0,0,1,1,1,0,0,1,0,0,0,2,0,1,0,0;-1,0,-1,1,-1,1,-1,0,0,0,3,0,4,-1,0,1;1,0,1,1,1,-1,0,1,0,-1,-1,1,-1,4,0,0;0,1,-1,1,1,-1,1,-1,-3,0,0,0,0,0,4,2;0,1,-1,1,1,-1,0,0,-2,0,0,0,1,0,2,4];
N2=[6,-4,4,-2,2,-1,1,1,-1,2,1,-2,3,-1,1,0;-4,8,-6,2,-1,0,0,-1,2,-4,0,3,-3,0,-2,-1;4,-6,8,-4,1,1,2,2,-2,5,3,-4,2,1,2,2;-2,2,-4,4,-1,0,-2,-2,1,-3,-3,2,-1,-1,-1,-1;2,-1,1,-1,2,0,1,0,0,1,1,-1,1,0,0,0;-1,0,1,0,0,2,1,0,0,1,1,-1,-1,1,0,1;1,0,2,-2,1,1,4,2,0,2,3,-2,0,1,0,1;1,-1,2,-2,0,0,2,4,-1,1,1,-2,1,0,1,0;-1,2,-2,1,0,0,0,-1,2,-1,0,1,-1,0,0,0;2,-4,5,-3,1,1,2,1,-1,6,4,-3,0,2,1,2;1,0,3,-3,1,1,3,1,0,4,6,-2,-2,2,0,2;-2,3,-4,2,-1,-1,-2,-2,1,-3,-2,4,-1,-1,-1,-1;3,-3,2,-1,1,-1,0,1,-1,0,-2,-1,4,-1,1,-1;-1,0,1,-1,0,1,1,0,0,2,2,-1,-1,2,0,1;1,-2,2,-1,0,0,0,1,0,1,0,-1,1,0,2,0;0,-1,2,-1,0,1,1,0,0,2,2,-1,-1,1,0,2];
checkauto(N1,0)
checkauto(N1,0,[1,1]);
checkauto(N1,1)
checkauto(N1,1,[1,1]);
checkisom(N1,N2,0)
checkisom(N1,N2,0,[1,1])
checkisom(N1,N2,1)
checkisom(N1,N2,1,[1,1])
checkisom(N1,N2,2)
L1=[3,-2,-1,1,1;-2,2,0,-1,-1;-1,0,2,1,1;1,-1,1,2,2;1,-1,1,2,3];
L2=matid(5);
checkauto(L1,0)
checkisom(L1,L2,0)
checkauto(L1,1)
checkisom(L1,L2,1)
checkisom(L1,L2,2)

A=[4,3;3,10];B=[16,6;6,10];
[qfisom(A,B),qfisom(B,A)]

G= [1152,[[-1,0,0,0;0,-1,0,0;0,0,-1,0;0,0,0,-1],[0,0,0,1;0,1,1,0;0,-1,0,0;1,-1,-1,0],[-1,0,0,0;0,0,-1,1;-1,0,1,0;-1,1,1,0]]];
qfautoexport(G)
qfautoexport(G,1)

Q=qfminim(N1);G=qfauto(N1);
apply(length,qforbits(G[2],Q[3]))
apply(length,qforbits(G,Q[3]))
apply(length,qforbits(G,Q))
