Skip to content

Commit 80ee2dc

Browse files
authored
Merge pull request #7040 from jwj61/localsubsearch
Fix issue #7036
2 parents e8fc740 + 28ba194 commit 80ee2dc

3 files changed

Lines changed: 48 additions & 10 deletions

File tree

lmfdb/local_fields/main.py

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@
1313
from lmfdb.app import app
1414
from lmfdb.utils import (
1515
web_latex, coeff_to_poly, teXify_pol, display_multiset, display_knowl,
16-
parse_inertia, parse_newton_polygon, parse_bracketed_posints, parse_floats, parse_regex_restricted,
16+
parse_inertia, parse_newton_polygon, parse_bracketed_posints, parse_floats,
17+
parse_regex_restricted, parse_padicsubfields,
1718
parse_galgrp, parse_ints, clean_input, parse_rats, parse_noop, flash_error,
1819
SearchArray, TextBox, TextBoxWithSelect, SubsetBox, SelectBox, SneakyTextBox,
1920
HiddenBox, TextBoxNoEg, CountBox, to_dict, comma,
@@ -696,6 +697,7 @@ def common_parse(info, query):
696697
parse_noop(info,query,'packet')
697698
parse_noop(info,query,'family')
698699
parse_noop(info,query,'hidden')
700+
parse_padicsubfields(info,query,'subfield')
699701

700702
def count_fields(p, n=None, f=None, e=None, eopts=None):
701703
# Implement a formula due to Monge for the number of fields with given n or e,f
@@ -1609,11 +1611,17 @@ def common_boxes():
16091611
label='Packet',
16101612
knowl='lf.packet',
16111613
)
1614+
subfield = TextBox(
1615+
name="subfield",
1616+
label="Intermediate field",
1617+
knowl="lf.intermediate_fields",
1618+
example_span="2.1.2.2a1.2 or 5.1.5.9a1.5",
1619+
example="2.1.2.2a1.2")
16121620
hidden = SneakyTextBox(
16131621
name="hidden",
16141622
label="Hidden content",
16151623
knowl="lf.slopes")
1616-
return degree, qp, c, e, f, topslope, slopes, visible, ind_insep, associated_inertia, jump_set, gal, aut, u, t, inertia, wild, family, packet, hidden
1624+
return degree, qp, c, e, f, topslope, slopes, visible, ind_insep, associated_inertia, jump_set, gal, aut, u, t, inertia, wild, subfield, family, packet, hidden
16171625

16181626
class FamilySearchArray(EmbeddedSearchArray):
16191627
sorts = [
@@ -1624,7 +1632,7 @@ class FamilySearchArray(EmbeddedSearchArray):
16241632
]
16251633

16261634
def __init__(self, fam):
1627-
degree, qp, c, e, f, topslope, slopes, visible, ind_insep, associated_inertia, jump_set, gal, aut, u, t, inertia, wild, family, packet, hidden = common_boxes()
1635+
degree, qp, c, e, f, topslope, slopes, visible, ind_insep, associated_inertia, jump_set, gal, aut, u, t, inertia, wild, subfield, family, packet, hidden = common_boxes()
16281636
if fam.packet_count is None:
16291637
self.refine_array = [[gal, slopes, ind_insep, hidden], [associated_inertia, jump_set]]
16301638
else:
@@ -1839,15 +1847,15 @@ class LFSearchArray(SearchArray):
18391847
}
18401848

18411849
def __init__(self):
1842-
degree, qp, c, e, f, topslope, slopes, visible, ind_insep, associated_inertia, jump_set, gal, aut, u, t, inertia, wild, family, packet, hidden = common_boxes()
1850+
degree, qp, c, e, f, topslope, slopes, visible, ind_insep, associated_inertia, jump_set, gal, aut, u, t, inertia, wild, subfield, family, packet, hidden = common_boxes()
18431851
results = CountBox()
18441852

18451853
self.browse_array = [[degree, qp], [e, f], [c, topslope], [u, t],
18461854
[slopes, visible], [ind_insep, associated_inertia],
1847-
[jump_set, aut], [gal, inertia], [wild], [results]]
1848-
self.refine_array = [[degree, qp, c, gal],
1849-
[e, f, t, u],
1850-
[aut, inertia, ind_insep, associated_inertia, jump_set],
1855+
[jump_set, aut], [gal, inertia], [wild,subfield], [results]]
1856+
self.refine_array = [[degree, qp, c, gal, aut],
1857+
[e, f, t, u, subfield],
1858+
[inertia, ind_insep, associated_inertia, jump_set],
18511859
[topslope, slopes, visible, wild],
18521860
[family, packet, hidden]]
18531861

lmfdb/utils/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
'image_callback', 'encode_plot', 'graph_to_cytoscape_json', 'graph_to_svg',
2323
'make_graph', 'setup_isogeny_graph', 'GRAPH_LAYOUTS',
2424
'parse_ints', 'parse_posints', 'parse_signed_ints', 'parse_floats',
25-
'parse_mod1', 'parse_rational', 'parse_padicfields',
25+
'parse_mod1', 'parse_rational', 'parse_padicfields', 'parse_padicsubfields',
2626
'parse_rational_to_list', 'parse_inertia', 'parse_group_label_or_order',
2727
'parse_rats', 'parse_bracketed_posints', 'parse_bracketed_rats', 'parse_bool',
2828
'parse_bool_unknown', 'parse_primes', 'parse_element_of', 'parse_not_element_of',
@@ -143,7 +143,7 @@
143143

144144
from .search_parsing import (
145145
parse_ints, parse_signed_ints, parse_posints,
146-
parse_floats, parse_mod1, parse_rational,
146+
parse_floats, parse_mod1, parse_rational, parse_padicsubfields,
147147
parse_rational_to_list, parse_padicfields, parse_rats, parse_inertia,
148148
parse_bracketed_posints, parse_bracketed_rats, parse_bool,
149149
parse_bool_unknown, parse_primes, parse_kerpol_string,

lmfdb/utils/search_parsing.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1212,6 +1212,36 @@ def parse_padicfields(inp, query, qfield, flag_unramified=False):
12121212
flash_info("Search results may be incomplete. Given $p$-adic completions contain an <a title='unramified' knowl='nf.unramified_prime'>unramified</a> field and completions are only searched for <a title='ramified' knowl='nf.ramified_primes'>ramified primes</a>.")
12131213
query[qfield] = {"$contains": labellist}
12141214

1215+
@search_parser(clean_info=True)
1216+
def parse_padicsubfields(inp, query, qfield):
1217+
from lmfdb.local_fields.main import NEW_LF_RE, OLD_LF_RE
1218+
labellist = inp.split(",")
1219+
fail = False
1220+
for indx, label in enumerate(labellist):
1221+
if OLD_LF_RE.fullmatch(label):
1222+
pass
1223+
elif NEW_LF_RE.fullmatch(label):
1224+
from lmfdb import db
1225+
oldlabel = db.lf_fields.lucky({'new_label':label})
1226+
if oldlabel:
1227+
oldlabel=oldlabel.get('old_label',None)
1228+
if oldlabel:
1229+
labellist[indx] = oldlabel
1230+
else:
1231+
fail = True
1232+
else:
1233+
fail = True
1234+
if not fail:
1235+
splitlab = labellist[indx].split('.')
1236+
if splitlab[1]=='1':
1237+
p = splitlab[0]
1238+
raise SearchParsingError('$\Q_{%s}$ is not considered a proper intermediate field'%str(p))
1239+
1240+
if fail:
1241+
raise SearchParsingError('It needs to be a <a title = "$p$-adic field label" knowl="lf.field.label">$p$-adic field label</a> or a list of local field labels')
1242+
else:
1243+
query[qfield] = {"$contains": labellist}
1244+
12151245
def input_string_to_poly(FF):
12161246
# Change unicode dash with minus sign
12171247
FF = FF.replace("\u2212", "-")

0 commit comments

Comments
 (0)