Improved irrep matrix code
Created by: attila-i-szabo
This PR improves FiniteGroup::_irrep_matrices
. The homegrown logic is replaced by Dixon's irrep algorithm, which has two advantages:
- It still diagonalises a matrix of the same size as the group. However, the degenerate eigenvectors of this matrix span irreps directly, which saves us a lot of postprocessing. Accordingly, it runs much faster.
- It ensures that real matrices are returned wherever possible. This involves redoing some calculations with real and complex matrices, which is a bit wasteful. However, other approaches I tried didn't perform any better, and this is quite transparent. It doesn't seem to be a major bottleneck, and it'd be more than offset by memory and time savings in the GCNN code @chrisrothUT and I are developing, which would be (as far as I can tell) the main point of use for this code.