As I note in my comment, I think this is a bug. To get around it, you could instead use G.cayley_table(elements=[identity, -identity]) and it should work fine. The output from G.cayley_table(names=['I', '-I'], elements=[identity, -identity]) looks even better to me. (When you set names equal to a list, the entries of the list are the strings to use to name the elements, so this uses 'I' for the identity matrix and '-I' for its negative.)