diff --git a/lmfdb/belyi/web_belyi.py b/lmfdb/belyi/web_belyi.py index 41cf1f08fd..52c4608977 100644 --- a/lmfdb/belyi/web_belyi.py +++ b/lmfdb/belyi/web_belyi.py @@ -295,7 +295,7 @@ def __init__(self, galmap, triple=None): data["lambdas"] = [str(c)[1:-1] for c in galmap["lambdas"]] # plane model if galmap.get("plane_model"): - data["plane_model"] = raw_typeset(compress_expression(galmap["plane_model"])+'=0', r'$\displaystyle '+belyi_latex(galmap["plane_model"])+'=0$', extra=curve_ref) + data["plane_model"] = raw_typeset(galmap["plane_model"]+'=0', r'$\displaystyle '+compress_expression(belyi_latex(galmap["plane_model"]))+'=0$', extra=curve_ref) if galmap.get('plane_map_constant_factored'): data['plane_map_constant_factored'] = galmap['plane_map_constant_factored'] diff --git a/lmfdb/galois_groups/main.py b/lmfdb/galois_groups/main.py index 059165a1c2..d25ad15444 100644 --- a/lmfdb/galois_groups/main.py +++ b/lmfdb/galois_groups/main.py @@ -332,6 +332,7 @@ def render_group_webpage(args): if data['nilpotency'] == '$-1$': data['nilpotency'] = ' not nilpotent' data['dispv'] = sparse_cyclotomic_to_mathml + data['malle_a'] = wgg.malle_a downloads = [] for lang in [("Magma", "magma"), ("Oscar", "oscar"), ("SageMath", "sage")]: downloads.append(('Code to {}'.format(lang[0]), url_for(".gg_code", label=label, download_type=lang[1]))) diff --git a/lmfdb/galois_groups/templates/gg-show-group.html b/lmfdb/galois_groups/templates/gg-show-group.html index 0ffacec7dd..494858d85a 100644 --- a/lmfdb/galois_groups/templates/gg-show-group.html +++ b/lmfdb/galois_groups/templates/gg-show-group.html @@ -70,7 +70,7 @@ {% if info.cclasses is defined %} - + {% for c in info.cclasses %} @@ -78,6 +78,7 @@ + {% endfor %} @@ -88,7 +89,13 @@ {% endif %}

{{ place_code('ccs') }}

- +

+ {{KNOWL('gg.malle_a', "Malle's constant $a(G)$")}}:     + {% if info.malle_a is not none %} + ${{info.malle_a}}$ + {% else %} + not computed + {% endif %} diff --git a/lmfdb/galois_groups/transitive_group.py b/lmfdb/galois_groups/transitive_group.py index 5e2e9c6f32..d7a84e8f1e 100644 --- a/lmfdb/galois_groups/transitive_group.py +++ b/lmfdb/galois_groups/transitive_group.py @@ -3,7 +3,7 @@ from lmfdb import db -from sage.all import ZZ, gap, cached_function, lazy_attribute, Permutations +from sage.all import ZZ, gap, cached_function, lazy_attribute, Permutations, QQ import os import yaml from flask import render_template @@ -195,7 +195,7 @@ def conjclasses(self): self.conjugacy_classes = wag.conjugacy_classes if int(n) == 1: self.conjugacy_classes[0].force_repr('()') - return [['()', 1, 1, '1', '1A']] + return [['()', 1, 1, '1', '1A',0]] elif self.have_isomorphism(): isom = self.getisom cc = [z.representative for z in self.conjugacy_classes] @@ -214,10 +214,23 @@ def conjclasses(self): cc2 = [gap(f"CycleLengths({x}, [1..{n}])") for x in cc] for j in range(len(self.conjugacy_classes)): self.conjugacy_classes[j].force_repr(' ') + inds = [n-len(z) for z in cc2] cc2 = [compress_cycle_type(z) for z in cc2] - ans = [[cc[j], cc[j].Order(), ccn[j], cc2[j],cclabels[j]] for j in range(len(cc))] + ans = [[cc[j], cc[j].Order(), ccn[j], cc2[j],cclabels[j],inds[j]] for j in range(len(cc))] return ans + @lazy_attribute + def malle_a(self): + ccs = self.conjclasses + inds = [z[5] for z in ccs] + if len(inds)==1: + return 0 + if len(inds)==0: + return None + inds = [z for z in inds if z>0] + + return QQ(f"1/{min(inds)}") + @lazy_attribute def can_chartable(self): if not db.gps_groups.lookup(self.abstract_label()): diff --git a/lmfdb/templates/management.html b/lmfdb/templates/management.html index 5bc0190f63..7d3a9bef25 100644 --- a/lmfdb/templates/management.html +++ b/lmfdb/templates/management.html @@ -12,17 +12,23 @@

Managing Editors

Associate Editors

{% endblock %}
LabelCycle TypeSizeOrderRepresentative
LabelCycle TypeSizeOrder{{KNOWL('gg.index', 'Index')}}Representative
${{c[3]}}$ ${{c[2]}}$ ${{c[1]}}$ ${{c[5]}}$ ${{c[0]}}$