python3 - <<'EOF' def inv(C): n=len(C) A=[row[:] [1 if i==j else 0 for j in range(n)] for i,row in enumerate(C)] for c in range(n): p=next(r for r in range(c,n) if A[r][c]) A[c],A[p]=A[p],A[c] for r in range(n): if r!=c and A[r][c]: A[r]=[x^y for x,y in zip(A[r],A[c])] return [row[n:] for row in A] Cs=[[[1,0,0,1],[0,1,1,0],[0,1,0,1],[1,0,1,0]],[[1,0,1,0],[0,1,0,1],[1,0,0,1],[0,1,1,0]],[[1,1,1,0],[1,1,0,1],[1,0,0,1],[0,1,1,0]]] for C in Cs: I=inv(C) d=[C[i][i] for i in range(4)] u=[sum(I[i][j]*d[j] for j in range(4))%2 for i in range(4)] q=sum(d[i]*u[i] for i in range(4))%2 print('d',d,'diagI',[I[i][i] for i in range(4)],'u',u,'q',q) EOF