For some reason after a bunch of matrix charpoly calculations, charpoly hangs on me. I suppose it's some memory problem, but rather that fix that, I just want to put a timeout on the calculation and then restart it if it hangs.
The problem is I can't use the "alarm" solution given in the answer to this question because sage.matrix.matrix_integer_dense.Matrix_integer_dense.charpoly doesn't catch the KeyboardInterrupt:
sage: M = random_matrix(ZZ,1000,1000)
sage: alarm(30)
sage: try:
....: P = M.charpoly()
....: except KeyboardInterrupt:
....: print "did not complete!"
....:
What is another approach I could use?