Computing bicharacters of (small) finite groups 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.
 A: Let $b:G\times G \to A$ be a bilinear map, where $A$ is abelian. Then $b([g,h],k) = [ b(g,k), b(h,k) ] = 1$ with the first equality from bilinear ($[g,h] =g^{-1} h^{-1} gh$) and the second from the commutativity of $A$. This means that $[G,G] \times [G,G]$ is in the "kernel", that is, $b$ is constant on cosets of $[G,G] \times [G,G]$, so we might as well view $b: G/[G,G] \times G/[G,G] \to A$ as a bilinear map between abelian groups.
Hence $b \in \operatorname{Hom}( G/[G,G] \otimes G/[G,G], A )$ which can be computed fairly readily for finite $G$. For your specific $A$, we just get a group isomorphic to $ G/[G,G] \otimes G/[G,G]$.
In nice terms, let $G^*$ be the group of linear characters of $G$. Recall that $G^*$ is an abelian group with the character theoretic tensor product (more simply, just coordinatewise multiplication) as its product. The bilinear bicharacters of $G$ form a group isomorphic to $G^* \otimes_{\mathbb{Z}} G^*$.
For example with $G=S_n$, $G^* = \{ \operatorname{sgn}^i : i \in \{0,1\} \} \cong \mathbb{Z}/2\mathbb{Z}$ and $$G^* \otimes G^* = \{ \operatorname{sgn} \otimes \operatorname{sgn}, 1 \otimes 1 \} \cong \mathbb{Z}/2\mathbb{Z}$$
Let me know if you need more details on the abelian group case; I'm assuming the main insight you needed is just that you can assume $G$ is abelian.
A: 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. 
