R = PolynomialRing(QQ,'p,t')
p,t = R.gens()
FR = FractionField(R)
def A(G, t = None):
if t is None:
R = FractionField(PolynomialRing(ZZ, 't'))
t = R.gen()
return sum([1/(1-Integer(gap.Order(gap.Centralizer(G,x)))*t) for x in gap.Elements(G)])/Integer(gap.Order(G))
def B(G, t = None):
if t is None:
R = FractionField(PolynomialRing(ZZ, 't'))
t = R.gen()
return (1 + sum([t*B(gap.Centralizer(G,gap.Representative(C)), t = t) for C in gap.ConjugacyClasses(G) if gap.Size(C) > 1]))/(1 - Integer(gap.Size(gap.Center(G)))*t)
SG = gap.SmallGroup
def ASG(n,k):
return A(SG(n,k))
def BSG(n,k):
return B(SG(n,k))
AD = dict()
BD = dict()
f = file("normalized_invariants.txt", 'r')
for l in f:
if l[0]!="#":
el = eval(l)
AD[el[0]] = el[1]
BD[el[0]] = el[2]
f.close()
For each isoclinism family of rank up to five, the GAP ID's of all groups of order up to $\min(p^5,100)$ are collected.
f = file('small_groups_in_isoclinism_families.txt', 'r')
idlist_family = dict()
for l in f:
el = eval(l)
idlist_family[el[0]] = el[1]
for k in idlist_family.keys():
print k
for id in idlist_family[k]:
g = id[0]
pg = prime_divisors(g)[0]
formal_A = AD[k].substitute(p=pg).substitute(t=t*g)
formal_B = BD[k].substitute(p=pg).substitute(t=t*g)
print id, formal_A == ASG(*id), formal_B == BSG(*id)