Smith Normal Form
After executing the following for computing the snf (or Smith normal form) of a matrix I got two different results.
In the second case I expected to get integer transformation matrices.
The code below can be run in sagecell.
sage: B = matrix([[1143, 2361, -1995, 2694],
[-342, -704, 595, -806],
[-454, -936, 791, -1070],
[-521, -1077, 910, -1228]])
sage: C = matrix(QQ, [[1143, 2361, -1995, 2694],
[-342, -704, 595, -806],
[-454, -936, 791, -1070],
[-521, -1077, 910, -1228]])
sage: print(type(C), "\n", type(B))
<class 'sage.matrix.matrix_rational_dense.Matrix_rational_dense'>
<class 'sage.matrix.matrix_integer_dense.Matrix_integer_dense'>
sage: print(C == B)
True
sage: show(B.smith_form())
([1 0 0 0] [ 0 1 0 0]
[0 1 0 0] [-5 -1 -3 -8]
[0 0 0 0] [19 3 10 31]
[0 0 0 0], [ 7 0 5 11],
[ 0 0 1 0]
[ 4505 -53 1549031 112]
[ 5715 -60 1963950 142]
[ 284 2 96814 7])
sage: show(C.smith_form())
([1 0 0 0] [ 1/1143 0 0 0]
[0 1 0 0] [ 19/155 127/310 0 0]
[0 0 0 0] [ 8/45 -11/15 1 0]
[0 0 0 0], [ 5/9 1/3 0 1],
[ 1 -787/381 7/62 -71/31]
[ 0 1 49/62 -1/31]
[ 0 0 1 0]
[ 0 0 0 1])