I, for one, would love to see more of PALP's algorithms be implemented natively to work without compile-time limits. On
http://trac.sagemath.org/12553 I've started working on a PPL-based LatticePolytope_PPL class with that in mind, though its clearly nowhere finished. It can compute the automorphism group and fibrations of the lattice polytope, though.
You should represent the permutations as PermutationGroupElements:
sage: PermutationGroupElement([3,1,2])
(1,3,2)
Its slightly annoying that permutations are indexed 1,..,n but rows/columns 0,...,n-1 but you'll survive ;-)
There are already methods swap_rows() and swap_columns() for matrices, so you could add permute_rows() and permute_columns() in the same spirit. Right now you can do the following:
sage: g = PermutationGroupElement([3,1,2,4]); g
(1,3,2)
sage: m = random_matrix(ZZ,4); m
[ 4 1 -1 1]
[ 27 -1 -17 0]
[ 0 1 -1 -4]
[-11 0 -4 0]
sage: g.matrix() * m
[ 0 1 -1 -4]
[ 4 1 -1 1]
[ 27 -1 -17 0]
[-11 0 -4 0]
but g*m or m*g doesn't work. If you look at sage.groups.perm_gps.permgroup_element.PermutationGroupElement._act_on_() you see that permutations can only act on polynomials so far. It would be nice to extend this to do row/column permutations in O(n^2) instead of O(n^3).
One snag that I ran into when implementing Fan isomorphisms is that Robert Miller's code is great for finding a particular isomorphism of graphs, but if you want to iterate over all isomorphisms (i.e. compose with the automorphism group of the domain or codomain graph) then Sage uses GAP. And GAP is great for big groups, but the latency for calling GAP is pretty bad right now.