diff --git a/lmfdb/local_fields/main.py b/lmfdb/local_fields/main.py index ec353958bd..09184ca95b 100644 --- a/lmfdb/local_fields/main.py +++ b/lmfdb/local_fields/main.py @@ -91,13 +91,16 @@ def local_field_data(label): nicename = ' = ' + prettyname(f) ans = '$p$-adic field %s%s

' % (label, nicename) ans += r'Extension of $\Q_{%s}$ defined by %s
' % (str(f['p']),web_latex(coeff_to_poly(f['coeffs']))) - gt = int(f['galois_label'].split('T')[1]) gn = f['n'] ans += 'Degree: %s
' % str(gn) ans += 'Ramification index $e$: %s
' % str(f['e']) ans += 'Residue field degree $f$: %s
' % str(f['f']) ans += 'Discriminant ideal: $(p^{%s})$
' % str(f['c']) - ans += 'Galois group $G$: %s
' % group_pretty_and_nTj(gn, gt, True) + if 'galois_label' in f: + gt = int(f['galois_label'].split('T')[1]) + ans += 'Galois group $G$: %s
' % group_pretty_and_nTj(gn, gt, True) + else: + ans += 'Galois group $G$: not computed
' ans += '
' ans += '%s home page' % (str(url_for("local_fields.by_label", label=label)),label) ans += '
' @@ -239,6 +242,8 @@ def show_slopes2(sl): return(sl) def show_slope_content(sl,t,u): + if sl is None or t is None or u is None: + return ' $not computed$ ' # actually killing math mode sc = str(sl) if sc == '[]': sc = r'[\ ]' @@ -294,6 +299,11 @@ class LF_download(Downloader): ), } +def galcolresponse(n,t,cache): + if t is None: + return 'not computed' + return group_pretty_and_nTj(n, t, cache=cache) + lf_columns = SearchColumns([ LinkCol("label", "lf.field.label", "Label", url_for_label), MathCol("n", "lf.degree", "$n$", short_title="degree", default=False), @@ -304,7 +314,7 @@ class LF_download(Downloader): MathCol("c", "lf.discriminant_exponent", "$c$", short_title="discriminant exponent"), MultiProcessedCol("gal", "nf.galois_group", "Galois group", ["n", "gal", "cache"], - lambda n, t, cache: group_pretty_and_nTj(n, t, cache=cache), + galcolresponse, apply_download=lambda n, t, cache: [n, t]), MathCol("u", "lf.unramified_degree", "$u$", short_title="unramified degree", default=False), MathCol("t", "lf.tame_degree", "$t$", short_title="tame degree", default=False), @@ -322,7 +332,7 @@ class LF_download(Downloader): db_cols=["c", "coeffs", "e", "f", "gal", "label", "n", "p", "slopes", "t", "u", "visible", "ind_of_insep", "associated_inertia","unram","eisen"]) def lf_postprocess(res, info, query): - cache = knowl_cache(list({f"{rec['n']}T{rec['gal']}" for rec in res})) + cache = knowl_cache(list({f"{rec['n']}T{rec['gal']}" for rec in res if 'gal' in rec})) for rec in res: rec["cache"] = cache return res @@ -376,13 +386,16 @@ def render_field_webpage(args): e = data['e'] f = data['f'] cc = data['c'] - gt = int(data['galois_label'].split('T')[1]) gn = data['n'] - the_gal = WebGaloisGroup.from_nt(gn,gt) - isgal = ' Galois' if the_gal.order() == gn else ' not Galois' - abelian = ' and abelian' if the_gal.is_abelian() else '' - galphrase = 'This field is'+isgal+abelian+r' over $\Q_{%d}.$' % p - autstring = r'\Gal' if the_gal.order() == gn else r'\Aut' + autstring = r'\Aut' + if 'galois_label' in data: + gt = int(data['galois_label'].split('T')[1]) + the_gal = WebGaloisGroup.from_nt(gn,gt) + isgal = ' Galois' if the_gal.order() == gn else ' not Galois' + abelian = ' and abelian' if the_gal.is_abelian() else '' + galphrase = 'This field is'+isgal+abelian+r' over $\Q_{%d}.$' % p + if the_gal.order() == gn: + autstring = r'\Gal' prop2 = [ ('Label', label), ('Base', r'\(%s\)' % Qp), @@ -390,7 +403,7 @@ def render_field_webpage(args): ('e', r'\(%s\)' % e), ('f', r'\(%s\)' % f), ('c', r'\(%s\)' % cc), - ('Galois group', group_pretty_and_nTj(gn, gt)), + ('Galois group', group_pretty_and_nTj(gn, gt) if 'galois_label' in data else 'not computed'), ] # Look up the unram poly so we can link to it unramdata = db.lf_fields.lucky({'p': p, 'n': f, 'c': 0}) @@ -448,17 +461,11 @@ def render_field_webpage(args): 'base': lf_display_knowl(str(p)+'.1.0.1', name='$%s$' % Qp), 'hw': data['hw'], 'visible': show_slopes(data['visible']), - 'slopes': show_slopes(data['slopes']), - 'gal': group_pretty_and_nTj(gn, gt, True), - 'gt': gt, - 'inertia': group_display_inertia(data['inertia']), 'wild_inertia': wild_inertia, 'unram': unramp, 'ind_insep': show_slopes(str(data['ind_of_insep'])), 'eisen': eisenp, - 'gms': data['gms'], 'gsm': gsm, - 'galphrase': galphrase, 'autstring': autstring, 'subfields': format_subfields(data['subfield'],data['subfield_mult'],p), 'aut': data['aut'], @@ -466,7 +473,18 @@ def render_field_webpage(args): 'residual_polynomials': ",".join(f"${teXify_pol(poly)}$" for poly in data['residual_polynomials']), 'associated_inertia': ",".join(f"${ai}$" for ai in data['associated_inertia']), }) - friends = [('Galois group', "/GaloisGroup/%dT%d" % (gn, gt))] + friends=[] + if 'slopes' in data: + info.update({'slopes': show_slopes(data['slopes'])}) + if 'inertia' in data: + info.update({'inertia': group_display_inertia(data['inertia'])}) + if 'gms' in data: + info.update({'gms': data['gms']}) + if 'galois_label' in data: + info.update({'gal': group_pretty_and_nTj(gn, gt, True), + 'galphrase': galphrase, + 'gt': gt}) + friends.append(('Galois group', "/GaloisGroup/%dT%d" % (gn, gt))) if unramfriend != '': friends.append(('Unramified subfield', unramfriend)) if rffriend != '': diff --git a/lmfdb/local_fields/templates/lf-show-field.html b/lmfdb/local_fields/templates/lf-show-field.html index ae3811dc66..013ed8f248 100644 --- a/lmfdb/local_fields/templates/lf-show-field.html +++ b/lmfdb/local_fields/templates/lf-show-field.html @@ -50,15 +50,20 @@

{{ KNOWL('lf.unramified_totally_ramified_tower', title='Unramified/totally r

{{ KNOWL('lf.ramification_polygon_display', title='Ramification polygon') }}

+ {% if info.e > 1 %} - + {% if info.ram_poly_polt %} + - - - - -
{{ KNOWL('lf.residual_polynomials', title='Residual polynomials') }}:{{info.residual_polynomials}}
{{ KNOWL('lf.associated_inertia', title='Associated inertia') }}:{{info.associated_inertia}}
{{ KNOWL('lf.indices_of_inseparability', 'Indices of inseparability')}}:{{info.ind_insep|safe}}
+ + + + +
{{ KNOWL('lf.residual_polynomials', title='Residual polynomials') }}:{{info.residual_polynomials}}
{{ KNOWL('lf.associated_inertia', title='Associated inertia') }}:{{info.associated_inertia}}
{{ KNOWL('lf.indices_of_inseparability', 'Indices of inseparability')}}:{{info.ind_insep|safe}}
+ {% else %} + Data not computed + {% endif %} {% else %} @@ -69,13 +74,55 @@

{{ KNOWL('lf.ramification_polygon_display', title='Ramification polygon') }}

{{ KNOWL('lf.galois_invariants', title='Invariants of the Galois closure') }}

- - - - - - - + + + + + + +
{{ KNOWL('nf.galois_group', title='Galois group')}}:{{info.gal|safe}}
{{ KNOWL('lf.inertia_group', title='Inertia group')}}:{{info.inertia|safe}}
{{ KNOWL('lf.wild_inertia_group', title='Wild inertia group')}}:{{info.wild_inertia|safe}}
{{ KNOWL('lf.unramified_degree', title='Unramified degree')}}:${{info.u}}$
{{ KNOWL('lf.tame_degree', title='Tame degree')}}:${{info.t}}$
{{ KNOWL('lf.wild_slopes', title='Wild slopes')}}:{{info.slopes}}
{{ KNOWL('lf.galois_mean_slope', title='Galois mean slope')}}:${{info.gms}}$
{{ KNOWL('nf.galois_group', title='Galois group')}}: + {% if info.gal %} + {{info.gal|safe}} + {% else %} + Not computed + {% endif %} +
{{ KNOWL('lf.inertia_group', title='Inertia group')}}: + {% if info.inertia %} + {{info.inertia|safe}} + {% else %} + Not computed + {% endif %} +
{{ KNOWL('lf.wild_inertia_group', title='Wild inertia group')}}: + {% if info.wild_inertia %} + {{info.wild_inertia|safe}} + {% else %} + Not computed + {% endif %} +
{{ KNOWL('lf.unramified_degree', title='Unramified degree')}}: + {% if info.u %} + ${{info.u}}$ + {% else %} + Not computed + {% endif %} +
{{ KNOWL('lf.tame_degree', title='Tame degree')}}: + {% if info.t %} + ${{info.t}}$ + {% else %} + Not computed + {% endif %} +
{{ KNOWL('lf.wild_slopes', title='Wild slopes')}}: + {% if info.slopes %} + {{info.slopes}} + {% else %} + Not computed + {% endif %} +
{{ KNOWL('lf.galois_mean_slope', title='Galois mean slope')}}: + {% if info.gms %} + ${{info.gms}}$ + {% else %} + Not computed + {% endif %} +
{{KNOWL('lf.galois_splitting_model', title='Galois splitting model')}}:{{info.gsm|safe}}