From 77e33025b549d6075c5d3ea7daeb48408e1c142d Mon Sep 17 00:00:00 2001 From: John Jones Date: Thu, 22 Aug 2024 13:52:27 -0400 Subject: [PATCH 1/7] Fix codomain options --- lmfdb/modl_galois_representations/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lmfdb/modl_galois_representations/main.py b/lmfdb/modl_galois_representations/main.py index 15a595d7c3..205e879625 100644 --- a/lmfdb/modl_galois_representations/main.py +++ b/lmfdb/modl_galois_representations/main.py @@ -260,7 +260,7 @@ def __init__(self): example="2", example_span="2 or 4/3 or 1-1.5" ) - codomain_opts = ([('', ''), ('GL,1,2,1', 'GL(1,2)'), ('GL,2,2,1', 'GL(2,2)'), ('GL,2,3,1', 'GL(2,3)'), ('GL,2,5,1', 'GL(2,5)'), ('GSp,4,2,1', 'GSp(4,2)')]) + codomain_opts = ([('', ''), ('GL,1,3,1', 'GL(1,3)'), ('GL,1,5,1', 'GL(1,5)'), ('GL,2,2,1', 'GL(2,2)'), ('GL,2,3,1', 'GL(2,3)'), ('GL,2,5,1', 'GL(2,5)'), ('GSp,4,2,1', 'GSp(4,2)')]) codomain = SelectBox( name="codomain", knowl="modlgal.codomain", From 49a70aa23f3d44ceb4753395de43e5fc434a22d7 Mon Sep 17 00:00:00 2001 From: John Jones Date: Thu, 22 Aug 2024 13:53:49 -0400 Subject: [PATCH 2/7] determinant index in math mode --- lmfdb/modl_galois_representations/templates/modlgal_rep.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lmfdb/modl_galois_representations/templates/modlgal_rep.html b/lmfdb/modl_galois_representations/templates/modlgal_rep.html index 043b1218b6..80894b3641 100644 --- a/lmfdb/modl_galois_representations/templates/modlgal_rep.html +++ b/lmfdb/modl_galois_representations/templates/modlgal_rep.html @@ -24,7 +24,7 @@

Invariants

$\cong$ {{ rep.image_abstract | safe }} {% endif %} - {{ KNOWL('modlgal.determinant_index', 'Determinant index') }}:{{ rep.determinant_index }} + {{ KNOWL('modlgal.determinant_index', 'Determinant index') }}:${{ rep.determinant_index }}$ {% if rep.determinant_index == 1 %} (determinant is surjective) {% else %} From 13080e02ab82529ff5db2a05c03b78bac00a5590 Mon Sep 17 00:00:00 2001 From: John Jones Date: Thu, 22 Aug 2024 16:08:57 -0400 Subject: [PATCH 3/7] Add search by kernel and projective kernel fields --- lmfdb/modl_galois_representations/main.py | 21 ++++++++++++++++++++- lmfdb/utils/__init__.py | 5 +++-- lmfdb/utils/search_parsing.py | 6 ++++++ 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/lmfdb/modl_galois_representations/main.py b/lmfdb/modl_galois_representations/main.py index 205e879625..565426ce35 100644 --- a/lmfdb/modl_galois_representations/main.py +++ b/lmfdb/modl_galois_representations/main.py @@ -24,6 +24,7 @@ parse_bool, parse_primes, parse_rats, + parse_kerpol_string, integer_divisors, StatsDisplay, comma, @@ -204,6 +205,8 @@ def modlgal_search(info, query): parse_bool(info, query, "is_solvable") parse_bool(info, query, "is_absolutely_irreducible") parse_bool(info, query, "determinant_index", process=lambda a: 1 if a else {"$gt":1}) + parse_kerpol_string(info, query, 'kernel_polynomial') + parse_kerpol_string(info, query, "projective_kernel_polynomial") class ModLGalRepSearchArray(SearchArray): @@ -303,6 +306,20 @@ def __init__(self): label="Image order", example="2", example_span="12, 10-20") + kernel_field = TextBox( + name="kernel_polynomial", + knowl="modlgal.min_sib_splitting_field", + label="Kernel polynomial", + example="3.1.175.1", + example_span="e.g. 3.1.175.1 or x^3 - x^2 + 2*x - 3 or a " + + display_knowl("nf.nickname", "field nickname")) + projective_kernel_field = TextBox( + name="projective_kernel_polynomial", + knowl="modlgal.projective_kernel_polynomial", + label="Projective kernel polynomial", + example="2.2.8.1", + example_span="e.g. 2.2.8.1 or x^2 - 2 or a " + + display_knowl("nf.nickname", "field nickname")) count = CountBox() self.browse_array = [ @@ -312,13 +329,15 @@ def __init__(self): [conductor_primes, solvable], [image_index, determinant_index], [image_order, top_slope], + [kernel_field, projective_kernel_field], [count] ] self.refine_array = [ [base_ring_characteristic, dimension, conductor, conductor_primes], [codomain, solvable, surjective, absolutely_irreducible], - [top_slope, image_index, image_order, determinant_index] + [top_slope, image_index, image_order, determinant_index], + [kernel_field, projective_kernel_field] ] #sort_knowl = "modlgal.sort_order" diff --git a/lmfdb/utils/__init__.py b/lmfdb/utils/__init__.py index e33ea8e1a6..513c51a699 100644 --- a/lmfdb/utils/__init__.py +++ b/lmfdb/utils/__init__.py @@ -25,7 +25,7 @@ 'parse_rational_to_list', 'parse_inertia', 'parse_group_label_or_order', 'parse_rats', 'parse_bracketed_posints', 'parse_bracketed_rats', 'parse_bool', 'parse_bool_unknown', 'parse_primes', 'parse_element_of', 'parse_not_element_of', - 'parse_subset', 'parse_submultiset', 'parse_list', + 'parse_subset', 'parse_submultiset', 'parse_list', 'parse_kerpol_string', 'parse_list_start', 'parse_string_start', 'parse_restricted', 'parse_regex_restricted', 'parse_noop', 'parse_equality_constraints', 'parse_gap_id', 'parse_interval', 'parse_galgrp', 'parse_nf_string', 'parse_subfield', 'parse_nf_elt', 'parse_nf_jinv', @@ -138,7 +138,8 @@ parse_ints, parse_signed_ints, parse_posints, parse_floats, parse_mod1, parse_rational, parse_rational_to_list, parse_padicfields, parse_rats, parse_inertia, - parse_bracketed_posints, parse_bracketed_rats, parse_bool, parse_bool_unknown, parse_primes, + parse_bracketed_posints, parse_bracketed_rats, parse_bool, + parse_bool_unknown, parse_primes, parse_kerpol_string, parse_element_of, parse_not_element_of, parse_subset, parse_submultiset, parse_list, parse_list_start, parse_string_start, parse_restricted, parse_regex_restricted, parse_noop, parse_group_label_or_order, diff --git a/lmfdb/utils/search_parsing.py b/lmfdb/utils/search_parsing.py index 4a2c3df71a..b7f42e01c1 100644 --- a/lmfdb/utils/search_parsing.py +++ b/lmfdb/utils/search_parsing.py @@ -1383,6 +1383,12 @@ def parse_subfield(inp, query, qfield): def parse_nf_string(inp, query, qfield): query[qfield] = nf_string_to_label(inp) +@search_parser +def parse_kerpol_string(inp, query, qfield): + label = nf_string_to_label(inp) + from lmfdb import db + query[qfield] = db.nf_fields.lookup(label, projection='coeffs') + def pol_string_to_list(pol, deg=None, var=None): if var is None: from lmfdb.hilbert_modular_forms.hilbert_field import findvar From b3c16a0adb3d3f9c03a5c8c32547f6a8e2ac5272 Mon Sep 17 00:00:00 2001 From: John Jones Date: Thu, 22 Aug 2024 16:19:25 -0400 Subject: [PATCH 4/7] Turn subgroup labels into knowls for GSp on search page --- lmfdb/modl_galois_representations/web_modlgal.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lmfdb/modl_galois_representations/web_modlgal.py b/lmfdb/modl_galois_representations/web_modlgal.py index f403dac32a..cd0caa0c4b 100644 --- a/lmfdb/modl_galois_representations/web_modlgal.py +++ b/lmfdb/modl_galois_representations/web_modlgal.py @@ -34,7 +34,10 @@ def image_pretty_with_abstract(image_label, is_surjective, algebraic_group, dime return "$" + s + "$" if dimension==1: return image_label - t = display_knowl('gl2.subgroup_data', title=image_label, kwargs={'label':image_label}) if dimension == 2 else image_label + if algebraic_group=='GSp' and dimension==4 and base_ring_order==2: + t = display_knowl('gsp4.subgroup_data', title=image_label, kwargs={'label':image_label}) + else: + t = display_knowl('gl2.subgroup_data', title=image_label, kwargs={'label':image_label}) if dimension == 2 else image_label if image_abstract_group: t += r" $\ \cong$ "+ abstract_group_display_knowl(image_abstract_group) return t From 55fc551a1d77b7225516c42fb839b54d2ea357ec Mon Sep 17 00:00:00 2001 From: John Jones Date: Thu, 22 Aug 2024 16:36:02 -0400 Subject: [PATCH 5/7] Make Sp_4 groups links on object pages --- lmfdb/modl_galois_representations/templates/modlgal_rep.html | 4 +--- lmfdb/modl_galois_representations/web_modlgal.py | 4 ++++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/lmfdb/modl_galois_representations/templates/modlgal_rep.html b/lmfdb/modl_galois_representations/templates/modlgal_rep.html index 80894b3641..de3cf2f8d4 100644 --- a/lmfdb/modl_galois_representations/templates/modlgal_rep.html +++ b/lmfdb/modl_galois_representations/templates/modlgal_rep.html @@ -20,9 +20,7 @@

Invariants

{% if not rep.is_surjective %} {{ KNOWL('modlgal.codomain', 'Codomain') }}:{{ rep.codomain }} {% endif %} - {{ KNOWL('modlgal.image', 'Image') }}:{{ rep.image_pretty | safe }} {% if rep.image_abstract %} - $\cong$ {{ rep.image_abstract | safe }} - {% endif %} + {{ KNOWL('modlgal.image', 'Image') }}:{{ rep.image_pretty_with_abstract | safe }} {{ KNOWL('modlgal.determinant_index', 'Determinant index') }}:${{ rep.determinant_index }}$ {% if rep.determinant_index == 1 %} diff --git a/lmfdb/modl_galois_representations/web_modlgal.py b/lmfdb/modl_galois_representations/web_modlgal.py index cd0caa0c4b..779e4df595 100644 --- a/lmfdb/modl_galois_representations/web_modlgal.py +++ b/lmfdb/modl_galois_representations/web_modlgal.py @@ -152,6 +152,10 @@ def factored_conductor(self): def codomain(self): return codomain(self.algebraic_group, self.dimension, self.base_ring_order, self.base_ring_is_field) + @lazy_attribute + def image_pretty_with_abstract(self): + return image_pretty_with_abstract(self.image_label, self.image_index==1, self.algebraic_group, self.dimension, self.base_ring_order, self.base_ring_is_field, self.image_abstract_group, codomain=False) + @lazy_attribute def image_pretty(self): return image_pretty(self.image_label, self.image_index==1, self.algebraic_group, self.dimension, self.base_ring_order, self.base_ring_is_field, codomain=False) From dc0e893086f6e57100ee478855e6c09de765b401 Mon Sep 17 00:00:00 2001 From: AndrewVSutherland Date: Thu, 22 Aug 2024 21:08:45 +0000 Subject: [PATCH 6/7] autopep8 action fixes --- lmfdb/utils/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lmfdb/utils/__init__.py b/lmfdb/utils/__init__.py index 513c51a699..13b63c5693 100644 --- a/lmfdb/utils/__init__.py +++ b/lmfdb/utils/__init__.py @@ -138,7 +138,7 @@ parse_ints, parse_signed_ints, parse_posints, parse_floats, parse_mod1, parse_rational, parse_rational_to_list, parse_padicfields, parse_rats, parse_inertia, - parse_bracketed_posints, parse_bracketed_rats, parse_bool, + parse_bracketed_posints, parse_bracketed_rats, parse_bool, parse_bool_unknown, parse_primes, parse_kerpol_string, parse_element_of, parse_not_element_of, parse_subset, parse_submultiset, parse_list, parse_list_start, parse_string_start, parse_restricted, From ae633210fba8ade357048b9e81dc0e91eccf3520 Mon Sep 17 00:00:00 2001 From: AndrewVSutherland Date: Thu, 22 Aug 2024 18:57:10 -0400 Subject: [PATCH 7/7] update gl2_subgroup_data to handle non-surjective det groups --- lmfdb/elliptic_curves/web_ec.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lmfdb/elliptic_curves/web_ec.py b/lmfdb/elliptic_curves/web_ec.py index f5f506929a..521c0b7fd9 100644 --- a/lmfdb/elliptic_curves/web_ec.py +++ b/lmfdb/elliptic_curves/web_ec.py @@ -97,7 +97,7 @@ def gl2_subgroup_data(label): data['Slabel'] = label elif S_EXT_LABEL_RE.fullmatch(label): in_modcurve_db = False - data = db.gps_gl2zhat_fine.lucky({'Slabel':label}) + data = db.gps_gl2zhat_nonsurjdet.lucky({'Slabel':label}) else: return "Unrecognized subgroup label format %s" % label if data is None: