Here is a function to produce a coloured permutation matrix in GAP:
ColouredMatrix := function( sigma, colours )
local p,d;
p := PermutationMat(sigma, Length(colours), Rationals);
d := DiagonalMat(colours);
return p * d;
end;
.
For example:
gap> A := ColouredMatrix((1,2,3,4),[E(3),1,E(3)^2,E(3)]);
[ [ 0, 1, 0, 0 ], [ 0, 0, E(3)^2, 0 ], [ 0, 0, 0, E(3) ], [ E(3), 0, 0, 0 ] ]
.
Remember that in GAP $E(3)$ denotes the primitive cube root of unity.
Now we can diagonalize this matrix and find its eigenvectors.
gap> Eigenvalues(CF(12), A);
[ E(3), -E(3), E(12)^7, -E(12)^7 ]
gap> Eigenvectors(CF(12),A);
[ [ 1, E(3)^2, 1, 1 ], [ 1, -E(3)^2, 1, -1 ], [ 1, -E(12)^11, -1, E(4) ],
[ 1, E(12)^11, -1, -E(4) ] ]
.
Remember that in GAP $CF(12)$ is the cyclotomic field extension containing all the
twelth roots of unity.
To generate all the coloured permutation matrices of given dimensions
we could do something like:
AllCombinations := function( k, n );
if n = 1 then
return List([1..k], i -> [i]);
else return Concatenation(List([1..k],
i -> List( (AllCombinations( k, (n-1)) ),
ys -> Concatenation([i],ys) )
));
fi;
end;
fish := function( xs, ys )
local k, new;
new := [];
for k in [1..Length(xs)] do
new[k] := ys[xs[k]];
od;
return new;
end;
AllColouredMatrices := function( k, n )
local perms, colours, colourvectors, tori;
perms := Elements(SymmetricGroup(n));
colours := List([1..k],i -> E(k)^i);
colourvectors := List(AllCombinations(k,n), xs -> fish(xs,colours));
return Concatenation(List(perms, sigma -> List(colourvectors, c -> ColouredMatrix(sigma,c) )));
end;
.
Check it out:
gap> AllColouredMatrices(2,2);
[ [ [ -1, 0 ], [ 0, -1 ] ], [ [ -1, 0 ], [ 0, 1 ] ], [ [ 1, 0 ], [ 0, -1 ] ],
[ [ 1, 0 ], [ 0, 1 ] ], [ [ 0, -1 ], [ -1, 0 ] ], [ [ 0, 1 ], [ -1, 0 ] ],
[ [ 0, -1 ], [ 1, 0 ] ], [ [ 0, 1 ], [ 1, 0 ] ] ]
gap> AllColouredMatrices(3,2);
[ [ [ E(3), 0 ], [ 0, E(3) ] ], [ [ E(3), 0 ], [ 0, E(3)^2 ] ],
[ [ E(3), 0 ], [ 0, 1 ] ], [ [ E(3)^2, 0 ], [ 0, E(3) ] ],
[ [ E(3)^2, 0 ], [ 0, E(3)^2 ] ], [ [ E(3)^2, 0 ], [ 0, 1 ] ],
[ [ 1, 0 ], [ 0, E(3) ] ], [ [ 1, 0 ], [ 0, E(3)^2 ] ],
[ [ 1, 0 ], [ 0, 1 ] ], [ [ 0, E(3) ], [ E(3), 0 ] ],
[ [ 0, E(3)^2 ], [ E(3), 0 ] ], [ [ 0, 1 ], [ E(3), 0 ] ],
[ [ 0, E(3) ], [ E(3)^2, 0 ] ], [ [ 0, E(3)^2 ], [ E(3)^2, 0 ] ],
[ [ 0, 1 ], [ E(3)^2, 0 ] ], [ [ 0, E(3) ], [ 1, 0 ] ],
[ [ 0, E(3)^2 ], [ 1, 0 ] ], [ [ 0, 1 ], [ 1, 0 ] ] ]
.
Of course there's always more than one way of doing exactly the same thing, so:
ColouredPerms := function( k,n )
local ck, sn;
ck := CyclicGroup(IsPermGroup,k);
sn := SymmetricGroup(n);
return WreathProduct(ck,sn);
end;
.
For example:
gap> hyp2 := ColouredPerms(2,2);
Group([ (1,2), (3,4), (1,3)(2,4) ])
gap> Elements(hyp2);
[ (), (3,4), (1,2), (1,2)(3,4), (1,3)(2,4), (1,3,2,4), (1,4,2,3), (1,4)(2,3) ]
.
Here GAP is thinking of a signed permutation on $n$ symbols as regular permutations on $2n$ symbols whose action by conjugation stabilizes the permutation:
\[ (1,2)(3,4) \cdots (n-1,n) \]
A slightly larger example:
gap> hyp3 := ColouredPerms(2,3);
Group([ (1,2), (3,4), (5,6), (1,3,5)(2,4,6), (1,3)(2,4) ])
gap> Elements(hyp3);
[ (), (5,6), (3,4), (3,4)(5,6), (3,5)(4,6), (3,5,4,6), (3,6,4,5), (3,6)(4,5),
(1,2), (1,2)(5,6), (1,2)(3,4), (1,2)(3,4)(5,6), (1,2)(3,5)(4,6),
(1,2)(3,5,4,6), (1,2)(3,6,4,5), (1,2)(3,6)(4,5), (1,3)(2,4),
(1,3)(2,4)(5,6), (1,3,2,4), (1,3,2,4)(5,6), (1,3,5)(2,4,6), (1,3,5,2,4,6),
(1,3,6,2,4,5), (1,3,6)(2,4,5), (1,4,2,3), (1,4,2,3)(5,6), (1,4)(2,3),
(1,4)(2,3)(5,6), (1,4,6,2,3,5), (1,4,6)(2,3,5), (1,4,5)(2,3,6),
(1,4,5,2,3,6), (1,5,3)(2,6,4), (1,5,4,2,6,3), (1,5,3,2,6,4),
(1,5,4)(2,6,3), (1,5)(2,6), (1,5,2,6), (1,5)(2,6)(3,4), (1,5,2,6)(3,4),
(1,6,4,2,5,3), (1,6,3)(2,5,4), (1,6,4)(2,5,3), (1,6,3,2,5,4), (1,6,2,5),
(1,6)(2,5), (1,6,2,5)(3,4), (1,6)(2,5)(3,4) ]
.
To confirm my claim about commuting with the permutation $(1,2)(3,4)(5,6)$
gap> Elements(Centralizer(SymmetricGroup(6), (1,2)(3,4)(5,6)));
[ (), (5,6), (3,4), (3,4)(5,6), (3,5)(4,6), (3,5,4,6), (3,6,4,5), (3,6)(4,5),
(1,2), (1,2)(5,6), (1,2)(3,4), (1,2)(3,4)(5,6), (1,2)(3,5)(4,6),
(1,2)(3,5,4,6), (1,2)(3,6,4,5), (1,2)(3,6)(4,5), (1,3)(2,4),
(1,3)(2,4)(5,6), (1,3,2,4), (1,3,2,4)(5,6), (1,3,5)(2,4,6), (1,3,5,2,4,6),
(1,3,6,2,4,5), (1,3,6)(2,4,5), (1,4,2,3), (1,4,2,3)(5,6), (1,4)(2,3),
(1,4)(2,3)(5,6), (1,4,6,2,3,5), (1,4,6)(2,3,5), (1,4,5)(2,3,6),
(1,4,5,2,3,6), (1,5,3)(2,6,4), (1,5,4,2,6,3), (1,5,3,2,6,4),
(1,5,4)(2,6,3), (1,5)(2,6), (1,5,2,6), (1,5)(2,6)(3,4), (1,5,2,6)(3,4),
(1,6,4,2,5,3), (1,6,3)(2,5,4), (1,6,4)(2,5,3), (1,6,3,2,5,4), (1,6,2,5),
(1,6)(2,5), (1,6,2,5)(3,4), (1,6)(2,5)(3,4) ]
.
What we need now is a way to translate between these two different representations of the same mathematical object.