Procedure from library linalg.lib (see linalg_lib).
linalg.lib
jordanbasis(M); matrix M
eigenvalues of M in basefield
list l: module l[1]; inverse(l[1])*M*l[1] in Jordan normal form intvec l[2]; int l[2][i]; weight filtration index of l[1][i]
Example:
LIB "linalg.lib"; ring R=0,x,dp; matrix M[3][3]=3,2,1,0,2,1,0,0,3; print(M); list l=jordanbasis(M); print(l[1]); print(l[2]); print(inverse(l[1])*M*l[1]);