I'm trying to find some finite groups with certain properites (hopefully of small order; no more than 100, I suspect), and one of the things I need to look at are all of its bilinear bicharacters: maps $G\times G \to \mathbb{C}^*$ where fixing any one coordinate yields a linear character of G. For example, if $G$ is the symmetric group $S_n$, then there are two bicharacters: the trivial one (all values are 1); and the one defined to be -1 when both inputs are odd, and 1 otherwise.
Are there any computationally efficient ways of computing all such bicharacters? I'm fairly proficient with using Mathematica, but I'm currently pretty unfamiliar with other systems, like GAP and Magma. If the others are better for this purpose, I'm fine with learning how to use them, especially if I can easily convert answers to Mathematica code (the bicharacters are just one part of a bigger picture that I'm currently handling with Mathematica). You may suppose I already know the irreducible linear characters of $G$ (my understanding is that these are easy to get with systems like GAP).
EDIT: It is probably worth pointing out that I need to know the bicharacters explicitly, and not up to isomorphism. I need to perform computations involving them and other pieces of data.
I have figured out how to obtain the bicharacters from the linear characters. The basic idea is that the (set of all) characters and the (set of all) values they take are interchangeable: just replace scalars describing the linear character with a character of the same order, and do so consistently (so it stays a group homomorphism, namely).
An example should clear up what that really means.
Consider $G=C_2\oplus C_2$, the Klein 4-group. It has four linear characters (how I'm ordering the elements should be discernible from context):
$\chi_0=(1,1,1,1),$ $\chi_1=(1,-1,-1,1),$ $\chi_2=(1,1,-1,-1),$ $\chi_3=(1,-1,1,-1)$.
The general linear character has the form $(1,a,a*b,b)$, where $a,b$ are $\pm 1$.
To get a general bicharacter: replace any 1 in the general character by $\chi_0$. Replace a -1 by any of $\chi_1,\chi_2,\chi_3$. Or, more generally, replace $a$ and $b$ by any of the 4 linear characters of $G$. An example bicharacter of $G$ here would thus be $(\chi_0, \chi_3,\chi_1,\chi_2)$.
If the linear character had an entry such as $a*b$ in it (as would happen with dihedral groups, amongst many others), then the bicharacter entry at that position would be the product of the characters we are replacing $a$ and $b$ by. And the order of the character we are putting in needs to be the same as the order of the scalar we are replacing (so we can only replace a primitive n-th root of unity by a character with order n).
I'm not exactly sure of the best way to code such a thing up in Mathematica/GAP without doing a lot of the work by hand, but presumably it can be done. Any thoughts on that would be appreciated.
EDIT: The group of bicharacters is isomorphic to $\operatorname{Hom}(G,\widehat{G})$, in a fairly obvious way. This is a more formal statement of what I wrote above, and is useful both in theory and explicit computation. At least, useful enough for my current purposes. Note that also $\operatorname{Hom}(G,\widehat{G})\cong \operatorname{Hom}(\widehat{G},\widehat{G})$, since $G/G'\cong \widehat{G}$, which is essentially what Jack was looking at.