def artin_representation_search(info, query): query['Hide'] = 0 info['sign_code'] = 0 parse_primes(info, query, "unramified", name="Unramified primes", qfield="BadPrimes", mode="complement") parse_primes(info, query, "ramified", name="Ramified primes", qfield="BadPrimes", mode="append") parse_element_of(info, query, "root_number", qfield="GalConjSigns") parse_restricted(info, query, "frobenius_schur_indicator", qfield="Indicator", allowed=[1, 0, -1], process=int) parse_container(info, query, 'container', qfield='Container', name="Smallest permutation representation") parse_galgrp(info, query, "group", name="Group", qfield=("Galn", "Galt")) parse_ints(info, query, 'dimension', qfield='Dim') parse_ints(info, query, 'conductor', qfield='Conductor')
def galois_group_search(info, query): def includes_composite(s): s = s.replace(' ','').replace('..','-') for interval in s.split(','): if '-' in interval[1:]: ix = interval.index('-',1) a,b = int(interval[:ix]), int(interval[ix+1:]) if b == a: if a != 1 and not a.is_prime(): return True if b > a and b > 3: return True else: a = ZZ(interval) if a != 1 and not a.is_prime(): return True parse_ints(info,query,'n','degree') parse_ints(info,query,'t') parse_ints(info,query,'order') parse_bracketed_posints(info, query, qfield='gapidfull', split=False, exactlength=2, keepbrackets=True, name='GAP id', field='gapid') for param in ('cyc', 'solv', 'prim'): parse_bool(info, query, param, process=int, blank=['0','Any']) parse_restricted(info,query,'parity',allowed=[1,-1],process=int,blank=['0','Any']) if 'order' in query and 'n' not in query: query['__sort__'] = ['order', 'gapid', 'n', 't'] degree_str = prep_ranges(info.get('n')) info['show_subs'] = degree_str is None or (LIST_RE.match(degree_str) and includes_composite(degree_str)) info['group_display'] = group_display_pretty info['yesno'] = yesno info['wgg'] = WebGaloisGroup.from_data
def artin_representation_search(**args): info = to_dict(args) if 'natural' in info: label = info['natural'] # test if it is ok try: label = parse_artin_label(label) except ValueError as err: flash(Markup("Error: %s" % (err)), "error") bread = get_bread([('Search results','')]) return search_input_error({'err':''}, bread) return render_artin_representation_webpage(label) title = 'Artin representation search results' bread = [('Artin representation', url_for(".index")), ('Search results', ' ')] sign_code = 0 query = {'Hide': 0} try: parse_primes(info,query,"unramified",name="Unramified primes", qfield="BadPrimes",mode="complement",to_string=True) parse_primes(info,query,"ramified",name="Ramified primes", qfield="BadPrimes",mode="append",to_string=True) parse_restricted(info,query,"root_number",qfield="GaloisConjugates.Sign", allowed=[1,-1],process=int) parse_restricted(info,query,"frobenius_schur_indicator",qfield="Indicator", allowed=[1,0,-1],process=int) parse_galgrp(info,query,"group",name="Group",qfield="Galois_nt",use_bson=False) parse_ints(info,query,'dimension',qfield='Dim') parse_ints(info,query,'conductor',qfield='Conductor_key', parse_singleton=make_cond_key) #parse_paired_fields(info,query,field1='conductor',qfield1='Conductor_key',parse1=parse_ints,kwds1={'parse_singleton':make_cond_key}, #field2='dimension',qfield2='Dim', parse2=parse_ints) except ValueError: return search_input_error(info, bread) count = parse_count(info,10) start = parse_start(info) data = ArtinRepresentation.collection().find(query).sort([("Dim", ASC), ("Conductor_key", ASC)]) nres = data.count() data = data.skip(start).limit(count) if(start >= nres): start -= (1 + (start - nres) / count) * count if(start < 0): start = 0 if nres == 1: report = 'unique match' else: if nres > count or start != 0: report = 'displaying matches %s-%s of %s' % (start + 1, min(nres, start + count), nres) else: report = 'displaying all %s matches' % nres if nres == 0: report = 'no matches' initfunc = ArtinRepresentation return render_template("artin-representation-search.html", req=info, data=data, title=title, bread=bread, query=query, start=start, report=report, nres=nres, initfunc=initfunc, sign_code=sign_code)
def artin_representation_search(info, query): query['Hide'] = 0 info['sign_code'] = 0 parse_primes(info,query,"unramified",name="Unramified primes", qfield="BadPrimes",mode="complement") parse_primes(info,query,"ramified",name="Ramified primes", qfield="BadPrimes",mode="append") parse_element_of(info,query,"root_number",qfield="GalConjSigns") parse_restricted(info,query,"frobenius_schur_indicator",qfield="Indicator", allowed=[1,0,-1],process=int) parse_container(info,query, 'container',qfield='Container', name="Smallest permutation representation") parse_galgrp(info,query,"group",name="Group",qfield=("Galn","Galt")) parse_ints(info,query,'dimension',qfield='Dim') parse_ints(info,query,'conductor',qfield='Conductor')
def hgm_search(info, query): family_search = False if info.get('Submit Family') or info.get('family'): family_search = True query['__title__'] = r'Hypergeometric Family over $\Q$ Search Result' query[ '__err_title__'] = r'Hypergeometric Family over $\Q$ Search Input Error' query['__table__'] = db.hgm_families queryab = {} for param in [ 'A', 'B', 'A2', 'B2', 'A3', 'B3', 'A5', 'B5', 'A7', 'B7', 'Au2', 'Bu2', 'Au3', 'Bu3', 'Au5', 'Bu5', 'Au7', 'Bu7' ]: parse_bracketed_posints(info, queryab, param, split=False, listprocess=lambda a: sorted(a, reverse=True)) # Combine the parts of the query if there are A,B parts if queryab: queryabrev = {} for k in queryab.keys(): queryabrev[k + 'rev'] = queryab[k] query['$or'] = [queryab, queryabrev] # generic, irreducible not in DB yet parse_ints(info, query, 'degree') parse_ints(info, query, 'weight') parse_bracketed_posints(info, query, 'famhodge', 'family Hodge vector', split=False) parse_restricted(info, query, 'sign', allowed=['+1', 1, -1], process=int) # Make a version to search reversed way if not family_search: parse_ints(info, query, 'conductor', 'Conductor', 'cond') parse_rational(info, query, 't') parse_bracketed_posints(info, query, 'hodge', 'Hodge vector') info['make_label'] = make_abt_label info['make_t_label'] = make_t_label info['ab_label'] = ab_label info['display_t'] = display_t info['family'] = family_search info['factorint'] = factorint
def hgm_search(info, query): family_search = False if info.get('Submit Family') or info.get('family'): family_search = True query['__title__'] = r'Hypergeometric Family over $\Q$ Search Result' query['__err_title__'] = r'Hypergeometric Family over $\Q$ Search Input Error' query['__table__'] = db.hgm_families queryab = {} for param in ['A', 'B', 'A2', 'B2', 'A3', 'B3', 'A5', 'B5', 'A7', 'B7', 'Au2', 'Bu2', 'Au3', 'Bu3', 'Au5', 'Bu5', 'Au7', 'Bu7']: parse_bracketed_posints(info, queryab, param, split=False, listprocess=lambda a: sorted(a, reverse=True)) # Combine the parts of the query if there are A,B parts if queryab: queryabrev = {} for k in queryab.keys(): queryabrev[k+'rev'] = queryab[k] query['$or'] = [queryab, queryabrev] # generic, irreducible not in DB yet parse_ints(info, query, 'degree') parse_ints(info, query, 'weight') parse_bracketed_posints(info, query, 'famhodge', 'family Hodge vector',split=False) parse_restricted(info, query, 'sign', allowed=['+1',1,-1], process=int) # Make a version to search reversed way if not family_search: parse_ints(info, query, 'conductor', 'Conductor' , 'cond') parse_rational(info, query, 't') parse_bracketed_posints(info, query, 'hodge', 'Hodge vector') info['make_label'] = make_abt_label info['make_t_label'] = make_t_label info['ab_label'] = ab_label info['display_t'] = display_t info['family'] = family_search info['factorint'] = factorint
def artin_representation_search(**args): info = to_dict(args) if 'natural' in info: label = info['natural'] # test if it is ok try: label = parse_artin_label(label) except ValueError as err: flash(Markup("Error: %s" % (err)), "error") bread = get_bread([('Search results', '')]) return search_input_error({'err': ''}, bread) return render_artin_representation_webpage(label) title = 'Artin representation search results' bread = [('Artin representation', url_for(".index")), ('Search results', ' ')] sign_code = 0 query = {'Hide': 0} try: parse_primes(info, query, "unramified", name="Unramified primes", qfield="BadPrimes", mode="complement", to_string=True) parse_primes(info, query, "ramified", name="Ramified primes", qfield="BadPrimes", mode="append", to_string=True) parse_restricted(info, query, "root_number", qfield="GaloisConjugates.Sign", allowed=[1, -1], process=int) parse_restricted(info, query, "frobenius_schur_indicator", qfield="Indicator", allowed=[1, 0, -1], process=int) parse_galgrp(info, query, "group", name="Group", qfield="Galois_nt", use_bson=False) parse_ints(info, query, 'dimension', qfield='Dim') parse_ints(info, query, 'conductor', qfield='Conductor_key', parse_singleton=make_cond_key) #parse_paired_fields(info,query,field1='conductor',qfield1='Conductor_key',parse1=parse_ints,kwds1={'parse_singleton':make_cond_key}, #field2='dimension',qfield2='Dim', parse2=parse_ints) except ValueError: return search_input_error(info, bread) count = parse_count(info, 10) start = parse_start(info) data = ArtinRepresentation.collection().find(query).sort([("Dim", ASC), ("Conductor_key", ASC)]) nres = data.count() data = data.skip(start).limit(count) if (start >= nres): start -= (1 + (start - nres) / count) * count if (start < 0): start = 0 if nres == 1: report = 'unique match' else: if nres > count or start != 0: report = 'displaying matches %s-%s of %s' % ( start + 1, min(nres, start + count), nres) else: report = 'displaying all %s matches' % nres if nres == 0: report = 'no matches' initfunc = ArtinRepresentation return render_template("artin-representation-search.html", req=info, data=data, title=title, bread=bread, query=query, start=start, report=report, nres=nres, initfunc=initfunc, sign_code=sign_code)
def hgm_search(**args): info = to_dict(args) bread = get_bread([("Search results", '')]) query = {} if 'jump_to' in info: return render_hgm_webpage({'label': info['jump_to']}) family_search = False if info.get('Submit Family') or info.get('family'): family_search = True # generic, irreducible not in DB yet try: parse_ints(info, query, 'degree') parse_ints(info, query, 'weight') parse_bracketed_posints(info, query, 'famhodge', 'family Hodge vector',split=False) parse_restricted(info, query, 'sign', allowed=['+1',1,-1], process=int) for param in ['A', 'B', 'A2', 'B2', 'A3', 'B3', 'A5', 'B5', 'A7', 'B7', 'Au2', 'Bu2', 'Au3', 'Bu3', 'Au5', 'Bu5', 'Au7', 'Bu7']: parse_bracketed_posints(info, query, param, split=False, listprocess=lambda a: sorted(a, reverse=True)) if not family_search: parse_ints(info, query, 'conductor') parse_rational(info, query, 't') parse_bracketed_posints(info, query, 'hodge', 'Hodge vector') except ValueError: return search_input_error(info, bread) #print query count_default = 20 if info.get('count'): try: count = int(info['count']) except: count = count_default else: count = count_default info['count'] = count start_default = 0 if info.get('start'): try: start = int(info['start']) if(start < 0): start += (1 - (start + 1) / count) * count except: start = start_default else: start = start_default if info.get('paging'): try: paging = int(info['paging']) if paging == 0: start = 0 except: pass # logger.debug(query) if family_search: #query['leader'] = '1' res = familydb().find(query).sort([('label', pymongo.ASCENDING)]) else: res = motivedb().find(query).sort([('cond', pymongo.ASCENDING), ('label', pymongo.ASCENDING)]) nres = res.count() res = res.skip(start).limit(count) if(start >= nres): start -= (1 + (start - nres) / count) * count if(start < 0): start = 0 info['motives'] = res info['number'] = nres info['start'] = start if nres == 1: info['report'] = 'unique match' else: if nres > count or start != 0: info['report'] = 'displaying matches %s-%s of %s' % (start + 1, min(nres, start + count), nres) else: info['report'] = 'displaying all %s matches' % nres info['make_label'] = make_abt_label info['make_t_label'] = make_t_label info['ab_label'] = ab_label info['display_t'] = display_t info['family'] = family_search info['factorint'] = factorint if family_search: return render_template("hgm-search.html", info=info, title="Hypergeometric Family over $\Q$ Search Result", bread=bread, credit=HGM_credit, learnmore=learnmore_list()) else: return render_template("hgm-search.html", info=info, title="Hypergeometric Motive over $\Q$ Search Result", bread=bread, credit=HGM_credit, learnmore=learnmore_list())
def hgm_search(info): #info = to_dict(args) bread = get_bread([("Search Results", '')]) query = {} queryab = {} queryabrev = {} if 'jump_to' in info: label = clean_input(info['jump_to']) if HGM_LABEL_RE.match(label): return render_hgm_webpage(normalize_motive(label)) if HGM_FAMILY_LABEL_RE.match(label): return render_hgm_family_webpage(normalize_family(label)) flash_error( '%s is not a valid label for a hypergeometric motive or family of hypergeometric motives', label) return redirect(url_for(".index")) family_search = False if info.get('Submit Family') or info.get('family'): family_search = True # generic, irreducible not in DB yet try: parse_ints(info, query, 'degree') parse_ints(info, query, 'weight') parse_bracketed_posints(info, query, 'famhodge', 'family Hodge vector', split=False) parse_restricted(info, query, 'sign', allowed=['+1', 1, -1], process=int) for param in [ 'A', 'B', 'A2', 'B2', 'A3', 'B3', 'A5', 'B5', 'A7', 'B7', 'Au2', 'Bu2', 'Au3', 'Bu3', 'Au5', 'Bu5', 'Au7', 'Bu7' ]: parse_bracketed_posints( info, queryab, param, split=False, listprocess=lambda a: sorted(a, reverse=True)) # Make a version to search reversed way if not family_search: parse_ints(info, query, 'conductor', 'Conductor', 'cond') parse_rational(info, query, 't') parse_bracketed_posints(info, query, 'hodge', 'Hodge vector') except ValueError: if family_search: return render_template( "hgm-search.html", info=info, title="Hypergeometric Family over $\Q$ Search Result", bread=bread, credit=HGM_credit, learnmore=learnmore_list()) return render_template( "hgm-search.html", info=info, title="Hypergeometric Motive over $\Q$ Search Result", bread=bread, credit=HGM_credit, learnmore=learnmore_list()) # Now combine the parts of the query if there are A,B parts if queryab != {}: for k in queryab.keys(): queryabrev[k + 'rev'] = queryab[k] queryab.update(query) queryabrev.update(query) query = {'$or': [queryab, queryabrev]} print query count_default = 20 if info.get('count'): try: count = int(info['count']) except: count = count_default else: count = count_default info['count'] = count start_default = 0 if info.get('start'): try: start = int(info['start']) if (start < 0): start += (1 - (start + 1) / count) * count except: start = start_default else: start = start_default if info.get('paging'): try: paging = int(info['paging']) if paging == 0: start = 0 except: pass # logger.debug(query) if family_search: #query['leader'] = '1' res = familydb().find(query).sort([('label', pymongo.ASCENDING)]) else: res = motivedb().find(query).sort([('cond', pymongo.ASCENDING), ('label', pymongo.ASCENDING)]) nres = res.count() res = res.skip(start).limit(count) if (start >= nres): start -= (1 + (start - nres) / count) * count if (start < 0): start = 0 info['motives'] = res info['number'] = nres info['start'] = start if nres == 1: info['report'] = 'unique match' else: if nres > count or start != 0: info['report'] = 'displaying matches %s-%s of %s' % ( start + 1, min(nres, start + count), nres) else: info['report'] = 'displaying all %s matches' % nres info['make_label'] = make_abt_label info['make_t_label'] = make_t_label info['ab_label'] = ab_label info['display_t'] = display_t info['family'] = family_search info['factorint'] = factorint if family_search: return render_template( "hgm-search.html", info=info, title="Hypergeometric Family over $\Q$ Search Result", bread=bread, credit=HGM_credit, learnmore=learnmore_list()) else: return render_template( "hgm-search.html", info=info, title="Hypergeometric Motive over $\Q$ Search Result", bread=bread, credit=HGM_credit, learnmore=learnmore_list())
def hgm_search(info): #info = to_dict(args) bread = get_bread([("Search Results", '')]) query = {} queryab = {} queryabrev = {} if 'jump_to' in info: label = clean_input(info['jump_to']) if HGM_LABEL_RE.match(label): return render_hgm_webpage(normalize_motive(label)) if HGM_FAMILY_LABEL_RE.match(label): return render_hgm_family_webpage(normalize_family(label)) flash_error('%s is not a valid label for a hypergeometric motive or family of hypergeometric motives', label) return redirect(url_for(".index")) family_search = False if info.get('Submit Family') or info.get('family'): family_search = True # generic, irreducible not in DB yet try: parse_ints(info, query, 'degree') parse_ints(info, query, 'weight') parse_bracketed_posints(info, query, 'famhodge', 'family Hodge vector',split=False) parse_restricted(info, query, 'sign', allowed=['+1',1,-1], process=int) for param in ['A', 'B', 'A2', 'B2', 'A3', 'B3', 'A5', 'B5', 'A7', 'B7', 'Au2', 'Bu2', 'Au3', 'Bu3', 'Au5', 'Bu5', 'Au7', 'Bu7']: parse_bracketed_posints(info, queryab, param, split=False, listprocess=lambda a: sorted(a, reverse=True)) # Make a version to search reversed way if not family_search: parse_ints(info, query, 'conductor', 'Conductor' , 'cond') parse_rational(info, query, 't') parse_bracketed_posints(info, query, 'hodge', 'Hodge vector') except ValueError: if family_search: return render_template("hgm-search.html", info=info, title="Hypergeometric Family over $\Q$ Search Result", bread=bread, credit=HGM_credit, learnmore=learnmore_list()) return render_template("hgm-search.html", info=info, title="Hypergeometric Motive over $\Q$ Search Result", bread=bread, credit=HGM_credit, learnmore=learnmore_list()) # Now combine the parts of the query if there are A,B parts if queryab != {}: for k in queryab.keys(): queryabrev[k+'rev'] = queryab[k] queryab.update(query) queryabrev.update(query) query = {'$or':[queryab, queryabrev]} print query count_default = 20 if info.get('count'): try: count = int(info['count']) except: count = count_default else: count = count_default info['count'] = count start_default = 0 if info.get('start'): try: start = int(info['start']) if(start < 0): start += (1 - (start + 1) / count) * count except: start = start_default else: start = start_default if info.get('paging'): try: paging = int(info['paging']) if paging == 0: start = 0 except: pass # logger.debug(query) if family_search: #query['leader'] = '1' res = familydb().find(query).sort([('label', pymongo.ASCENDING)]) else: res = motivedb().find(query).sort([('cond', pymongo.ASCENDING), ('label', pymongo.ASCENDING)]) nres = res.count() res = res.skip(start).limit(count) if(start >= nres): start -= (1 + (start - nres) / count) * count if(start < 0): start = 0 info['motives'] = res info['number'] = nres info['start'] = start if nres == 1: info['report'] = 'unique match' else: if nres > count or start != 0: info['report'] = 'displaying matches %s-%s of %s' % (start + 1, min(nres, start + count), nres) else: info['report'] = 'displaying all %s matches' % nres info['make_label'] = make_abt_label info['make_t_label'] = make_t_label info['ab_label'] = ab_label info['display_t'] = display_t info['family'] = family_search info['factorint'] = factorint if family_search: return render_template("hgm-search.html", info=info, title="Hypergeometric Family over $\Q$ Search Result", bread=bread, credit=HGM_credit, learnmore=learnmore_list()) else: return render_template("hgm-search.html", info=info, title="Hypergeometric Motive over $\Q$ Search Result", bread=bread, credit=HGM_credit, learnmore=learnmore_list())