charpoly([x,x+1;1,2],y,0)
charpoly([x,x+1;1,2],y,1)
charpoly([x,x+1;1,2],y,2)
charpoly([x,x+1;1,2],y,3)
charpoly([0,0,2,2;0,0,2,2;2,2,0,0;2,2,0,0])
charpoly([0,0,2,2;0,0,2,2;2,2,0,0;2,2,0,0],,4)
minpoly(matrix(4,4,i,j,i/j))

A=[5/3,7/45;0,21/10];
mateigen(A)
mateigen(A*1.)
mateigen(A,1)
m=[224,221,13,2;201,199,12,2;100,99,6,1;85,84,5,1];
[D,M]=mateigen(m,1);
D
exponent(m*M - M*matdiagonal(D))
localbitprec(64); one = 1.;
localbitprec(32); mateigen(m*one); mateigen(m*one, 1); \\ were errors

z=-0.5+0.86602540378443864676372317075293618347*I;
mateigen([z,0,0;0,z,0;0,0,z]) \\ #2636

M=[x,x+y;x+1,1];charpoly(M,w)
v=[1,1.,Mod(1,3),1/2,1+O(3),I,quadgen(5),matid(2)*Mod(1,3),matid(2)*Mod(1,2^64+13)];
for(i=1,#v,print(charpoly(v[i])))

{ \\ #2010
g(s2,s3)=s6=s2*s3;[2,0,0,-s6+3,2*s3-3*s2,3*s3-3*s2;
   0,-2,0,s3-s2,-s6+2,-s6+3;
   0,0,-1,s3-2*s2,-s6+1,-s6+3;
   0,0,s3,2*s6-6,-5*s3+6*s2,-6*s3+7*s2;
   -2*s3,2,-s6+5,-7*s3+10*s2,8*s6-21,9*s6-27;
   2*s3,-2,s6-5,8*s3-11*s2,-9*s6+23,-10*s6+30]/2;
}
exponent(charpoly(g(sqrt(2),sqrt(3))) - (x^6-x^5-3*x^4-3*x^3-3*x^2-x+1)) < -120
centerlift(charpoly(g(sqrt(2+O(23^10)), sqrt(3+O(23^10)))))

charpoly(matid(4),,0)
charpoly(matid(4),,3)
charpoly(matid(4)*(2^64+13))
m=[1,2,3,4;5,6,7,8;9,10,11,12;1,5,7,11];
charpoly(m*Mod(1,3))
charpoly(m*Mod(1,2^64+13))
matadjoint(matid(2),1)
matadjoint([;])
matadjoint(Mat(1))
matadjoint([x,0,0;0,0,0;0,0,0])
matadjoint([Mod(1,2)*x,0,0;0,0,0;0,0,0])
charpoly(x*matid(3))

charpoly(Mod(0,x^0))
charpoly(Mod(0*x,x^0))
charpoly(Mod(1,x^0))
charpoly(Mod(x,x^0))

charpoly(Mod(x+1,x^4+1))
charpoly(Mod(x,x^2))
charpoly(Mod(1,x^2+x+1))
charpoly(Mod(y,x^2+x+1))
charpoly(Mod(1,x^24+1))
charpoly(Mod(1,x^2))
charpoly(Mod(1/(x-(t+1))*Mod(1,2),(t+1)*x^2+t*x+1))


minpoly(Mod(0,x^0))
minpoly(Mod(0*x,x^0))
minpoly(Mod(1,x^0))
minpoly(Mod(x,x^0))

minpoly(Mod(x+1,x^4+1))
minpoly(Mod(x,x^2))
minpoly(Mod(1,x^2+x+1))
minpoly(Mod(y,x^2+x+1))
minpoly(Mod(1,x^24+1))
minpoly(Mod(1,x^2))
minpoly(Mod(1/(x-(t+1))*Mod(1,2),(t+1)*x^2+t*x+1))

test(a)=
{
   if(subst(charpoly(a),x,a),error(a));
   if(subst(minpoly(a),x,a),error(a));
}

test(Mod(x^7+x+1,x^41+x^13/13+x/17))
test(Mod(x^7+x^5/5+1,x^41+x^13/13+x/17))

test(p)=
{
  my(P,Q);
  P=random(x^10*'b^10*Mod(1,p))*Mod(1,ffinit(p,10,'b));
  Q=random(x^10*'b^10*Mod(1,p))*Mod(1,ffinit(p,10,'b));
  my(z=Mod(P,Q));
  if(subst(minpoly(z),x,z)!=0,error(z));
  if(subst(charpoly(z),x,z)!=0,error(z));
}
test(5);
test(nextprime(2^40));
test(nextprime(2^100));

a=[1,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0;0,1,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0;0,0,1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0;-1,-1,-1,4,0,0,0,0,-1,0,0,0,0,0,0,0,0;0,0,0,0,1,0,0,-1,0,0,0,0,0,0,0,0,0;0,0,0,0,0,1,0,-1,0,0,0,0,0,0,0,0,0;0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0;0,0,0,0,-1,-1,-1,4,-1,0,0,0,0,0,0,0,0;0,0,0,-1,0,0,0,-1,4,-1,-1,0,0,0,0,0,0;0,0,0,0,0,0,0,0,-1,1,0,0,0,0,0,0,0;0,0,0,0,0,0,0,0,-1,0,4,-1,-1,-1,0,0,0;0,0,0,0,0,0,0,0,0,0,-1,1,0,0,0,0,0;0,0,0,0,0,0,0,0,0,0,-1,0,1,0,0,0,0;0,0,0,0,0,0,0,0,0,0,-1,0,0,3,-1,0,-1;0,0,0,0,0,0,0,0,0,0,0,0,0,-1,3,-2,0;0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2,2,0;0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,1];
mateigen(a);
mateigen([;])
mateigen([;],1)
mateigen(Mat(1))
mateigen(Mat(1),1)

t=sqrt(5);
M=[1,-1,0,0,0,0,0;-1,1,0,0,0,0,0;0,0,1,(t-1)/4,(-t-1)/4,(-t-1)/4,(t-1)/4;0,0,(t-1)/4,1,(t-1)/4,(-t-1)/4,(-t-1)/4;0,0,(-t-1)/4,(t-1)/4,1,(t-1)/4,(-t-1)/4;0,0,(-t-1)/4,(-t-1)/4,(t-1)/4,1,(t-1)/4;0,0,(t-1)/4,(-t-1)/4,(-t-1)/4,(t-1)/4,1];
mateigen(M)
mateigen(M,1)
M= [1/2,0.43301270189221932338186158537646809174,0,0,0,0,0,0;0.43301270189221932338186158537646809174,0.59375000000000000000000000000000000000,0.16010860571811872473782872938314143736,0,0,0,0,0;0,0.16010860571811872473782872938314143736,0.17773437500000000000000000000000000000,0.043156991785125689527076292745166173981,0,0,0,0;0,0,0.043156991785125689527076292745166173981,0.046264648437500000000000000000000000000,0.010983784699077503627379527042372838459,0,0,0;0,0,0,0.010983784699077503627379527042372838459,0.011680603027343750000000000000000000000,0.0027580894367975917547150661058975793532,0,0;0,0,0,0,0.0027580894367975917547150661058975793532,0.0029273033142089843750000000000000000000,0.00069028107976465866361951420577874482654,0;0,0,0,0,0,0.00069028107976465866361951420577874482655,0.00073227286338806152343750000000000000000,0.00017261768635203427455190103576949842909;0,0,0,0,0,0,0.00017261768635203427455190103576949842909,0.00018309801816940307617187500000000000000];
mateigen(M)

\\#2406
{P7a=[15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,10,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0;
0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0;
0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0;
0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0;
0,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,0,0,0;
0,0,0,10,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0;
0,0,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,0;
0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0;
0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,10,0,0,0,0;
0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0;
30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0;
0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,10,0,0;
0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0;
0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,6;
0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0;
0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,10;
0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15;
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0]/30;}
F7a=[1/2,7,1/2,1/3,1/2,1/5,1/2,7,1/2,1/3,1/2,7,1/2,7,1/2,1/3,1/2,7,1/2,7,1/2,1/3,1/2,7,1/2,1/5,1/2,1/3,1/2,7];
my(t = 0.1, m = matdiagonal(vector(#F7a,k,F7a[k]^t))*P7a); charpoly(m)
mateigen(m);

\\ Errors, keep at end of file
charpoly(Mod('b, 'b^2 + Mod('a,'a^2+1)), 'newvar)
minpoly(Mod(y,x), 'y)
