def get_nf_info(lab): r""" extract number field label from string and pretty""" try: label = nf_string_to_label(lab) pretty = field_pretty (label) except ValueError as err: raise ValueError(Markup("<span style='color:black'>%s</span> is not a valid number field label. %s" % (escape(lab),err))) return label, pretty
def get_nf_info(lab): r""" extract number field label from string and pretty""" try: label = nf_string_to_label(lab) pretty = field_pretty(label) except ValueError as err: flash_error("%s is not a valid number field. %s", lab, err) raise ValueError return label, pretty
def get_nf_info(lab): r""" extract number field label from string and pretty""" try: label = nf_string_to_label(lab) pretty = field_pretty (label) except ValueError as err: flash(Markup("Error: <span style='color:black'>%s</span> is not a valid number field. %s" % (lab,err)), "error") raise ValueError return label, pretty
def by_label(label): try: nflabel = nf_string_to_label(clean_input(label)) if label != nflabel: return redirect(url_for(".by_label", label=nflabel), 301) return render_field_webpage({'label': nflabel}) except ValueError as err: flash_error("%s is not a valid input for a <span style='color:black'>label</span>. %s", label, str(err)) return redirect(url_for(".number_field_render_webpage"))
def by_label(label): try: nflabel = nf_string_to_label(clean_input(label)) if label != nflabel: return redirect(url_for(".by_label", label=nflabel), 301) return render_field_webpage({'label': nflabel}) except ValueError as err: flash_error("<span style='color:black'>%s</span> us not a valid input for a <span style='color:black'>label</span>. "+ str(err), label) return redirect(url_for(".number_field_render_webpage"))
def by_label(label): if label == "random": #This version leaves the word 'random' in the URL: #return render_field_webpage({'label': label}) return redirect(url_for_label(db.nf_fields.random()), 301) try: nflabel = nf_string_to_label(clean_input(label)) if label != nflabel: return redirect(url_for_label(nflabel), 301) return render_field_webpage({'label': nflabel}) except ValueError as err: flash_error("%s is not a valid input for a <span style='color:black'>label</span>. %s", label, str(err)) return redirect(url_for(".number_field_render_webpage"))
def show_ecnf(nf, conductor_label, class_label, number): if not FIELD_RE.fullmatch(nf): return abort(404) conductor_label = unquote(conductor_label) conductor_label = convert_IQF_label(nf, conductor_label) try: nf_label = nf_string_to_label(nf) except ValueError: flash_error("%s is not a valid number field label", nf_label) return redirect(url_for(".index")) label = "".join( ["-".join([nf_label, conductor_label, class_label]), str(number)]) if not LABEL_RE.fullmatch(label): flash_error("%s is not a valid elliptic curve label", label) return redirect(url_for(".index")) ec = ECNF.by_label(label) if not isinstance(ec, ECNF): flash_error("There is no elliptic curve with label %s in the database", label) return redirect(url_for(".index")) bread = [("Elliptic curves", url_for(".index"))] title = "Elliptic curve %s over number field %s" % ( ec.short_label, ec.field.field_pretty()) bread = [("Elliptic curves", url_for(".index"))] bread.append((ec.field.field_pretty(), ec.urls['field'])) bread.append((ec.conductor_label, ec.urls['conductor'])) bread.append((ec.iso_label, ec.urls['class'])) bread.append((ec.number, ec.urls['curve'])) code = ec.code() code['show'] = { 'magma': '', 'pari': '', 'sage': '' } # use default show names info = {} return render_template( "ecnf-curve.html", credit=ecnf_credit, title=title, bread=bread, ec=ec, code=code, # properties = ec.properties, properties=ec.properties, friends=ec.friends, downloads=ec.downloads, info=info, KNOWL_ID="ec.%s" % label, learnmore=learnmore_list())
def download_ECNF_all(nf,conductor_label,class_label,number): conductor_label = unquote(conductor_label) conductor_label = convert_IQF_label(nf,conductor_label) try: nf_label = nf_string_to_label(nf) except ValueError: return search_input_error() label = "".join(["-".join([nf_label, conductor_label, class_label]), number]) data = db.ec_nfcurves.lookup(label) if data is None: return search_input_error() response = make_response(Json.dumps(data)) response.headers['Content-type'] = 'text/plain' return response
def show_ecnf(nf, conductor_label, class_label, number): conductor_label = unquote(conductor_label) conductor_label = convert_IQF_label(nf, conductor_label) try: nf_label = nf_string_to_label(nf) except ValueError: return search_input_error() label = "".join( ["-".join([nf_label, conductor_label, class_label]), number]) ec = ECNF.by_label(label) bread = [("Elliptic Curves", url_for(".index"))] if not ec: info = {'query': {}} info['err'] = 'No elliptic curve in the database has label %s.' % label return search_input_error(info, bread) title = "Elliptic Curve %s over Number Field %s" % ( ec.short_label, ec.field.field_pretty()) bread = [("Elliptic Curves", url_for(".index"))] bread.append((ec.field.field_pretty(), ec.urls['field'])) bread.append((ec.conductor_label, ec.urls['conductor'])) bread.append((ec.iso_label, ec.urls['class'])) bread.append((ec.number, ec.urls['curve'])) code = ec.code() code['show'] = { 'magma': '', 'pari': '', 'sage': '' } # use default show names info = {} return render_template( "ecnf-curve.html", credit=ecnf_credit, title=title, bread=bread, ec=ec, code=code, # properties = ec.properties, properties=ec.properties, friends=ec.friends, downloads=ec.downloads, info=info, KNOWL_ID="ec.%s" % label, learnmore=learnmore_list())
def download_ECNF_all(nf,conductor_label,class_label,number): conductor_label = unquote(conductor_label) try: nf_label = nf_string_to_label(nf) except ValueError: flash_error("%s is not a valid number field label", nf_label) return redirect(url_for(".index")) label = "".join(["-".join([nf_label, conductor_label, class_label]), number]) if not LABEL_RE.fullmatch(label): flash_error("%s is not a valid elliptic curve label.", label) return redirect(url_for(".index")) data = db.ec_nfcurves.lookup(label) if data is None: flash_error("%s is not the label of an elliptic curve in the database.", label) return redirect(url_for(".index")) response = make_response(Json.dumps(data)) response.headers['Content-type'] = 'text/plain' return response
def ecnf_simple_label_search(search, baseurl, label): label_bits = label.split('/') try: nf = label_bits[0] conductor_label = label_bits[1] class_label = label_bits[2] number = label_bits[3] except IndexError: search['query'] = {'label': 'dummy'} return conductor_label = unquote(conductor_label) try: nf_label = nf_string_to_label(nf) except ValueError: search['query'] = {'label': 'dummy'} return label = "".join(["-".join(nf_label, conductor_label, class_label), number]) search['query'] = {'label': label}
def show_ecnf(nf, conductor_label, class_label, number): conductor_label = unquote(conductor_label) conductor_label = convert_IQF_label(nf,conductor_label) try: nf_label = nf_string_to_label(nf) except ValueError: return search_input_error() label = "".join(["-".join([nf_label, conductor_label, class_label]), number]) ec = ECNF.by_label(label) bread = [("Elliptic Curves", url_for(".index"))] if not ec: info = {'query':{}} info['err'] = 'No elliptic curve in the database has label %s.' % label return search_input_error(info, bread) title = "Elliptic Curve %s over Number Field %s" % (ec.short_label, ec.field.field_pretty()) bread = [("Elliptic Curves", url_for(".index"))] bread.append((ec.field.field_pretty(), ec.urls['field'])) bread.append((ec.conductor_label, ec.urls['conductor'])) bread.append((ec.iso_label, ec.urls['class'])) bread.append((ec.number, ec.urls['curve'])) code = ec.code() code['show'] = {'magma':'','pari':'','sage':''} # use default show names info = {} return render_template("ecnf-curve.html", credit=ecnf_credit, title=title, bread=bread, ec=ec, code = code, # properties = ec.properties, properties2=ec.properties, friends=ec.friends, downloads=ec.downloads, info=info, KNOWL_ID="ec.%s"%label, learnmore=learnmore_list())
def bmf_field_dim_table(**args): argsdict = to_dict(args) argsdict.update(to_dict(request.args)) gl_or_sl = argsdict['gl_or_sl'] field_label=argsdict['field_label'] field_label = nf_string_to_label(field_label) start = parse_start(argsdict) info={} info['gl_or_sl'] = gl_or_sl # level_flag controls whether to list all levels ('all'), only # those with positive cuspidal dimension ('cusp'), or only those # with positive new dimension ('new'). Default is 'cusp'. level_flag = argsdict.get('level_flag', 'cusp') info['level_flag'] = level_flag count = parse_count(argsdict, 50) pretty_field_label = field_pretty(field_label) bread = [('Bianchi Modular Forms', url_for(".index")), ( pretty_field_label, ' ')] properties = [] query = {} query['field_label'] = field_label if gl_or_sl=='gl2_dims': info['group'] = 'GL(2)' info['bgroup'] = '\GL(2,\mathcal{O}_K)' else: info['group'] = 'SL(2)' info['bgroup'] = '\SL(2,\mathcal{O}_K)' if level_flag == 'all': query[gl_or_sl] = {'$exists': True} else: # Only get records where the cuspdial/new dimension is positive for some weight totaldim = gl_or_sl.replace('dims', level_flag) + '_totaldim' query[totaldim] = {'$gt': 0} t = ' '.join(['Dimensions of Spaces of {} Bianchi Modular Forms over'.format(info['group']), pretty_field_label]) data = list(db.bmf_dims.search(query, limit=count, offset=start, info=info)) nres = info['number'] if not info['exact_count']: info['number'] = nres = db.bmf_dims.count(query) info['exact_count'] = True if nres > count or start != 0: info['report'] = 'Displaying items %s-%s of %s levels,' % (start + 1, min(nres, start + count), nres) else: info['report'] = 'Displaying all %s levels,' % nres info['field'] = field_label info['field_pretty'] = pretty_field_label nf = WebNumberField(field_label) info['base_galois_group'] = nf.galois_string() info['field_degree'] = nf.degree() info['field_disc'] = str(nf.disc()) info['field_poly'] = teXify_pol(str(nf.poly())) weights = set() for dat in data: weights = weights.union(set(dat[gl_or_sl].keys())) weights = list([int(w) for w in weights]) weights.sort() info['weights'] = weights info['nweights'] = len(weights) data.sort(key = lambda x: [int(y) for y in x['level_label'].split(".")]) dims = {} for dat in data: dims[dat['level_label']] = d = {} for w in weights: sw = str(w) if sw in dat[gl_or_sl]: d[w] = {'d': dat[gl_or_sl][sw]['cuspidal_dim'], 'n': dat[gl_or_sl][sw]['new_dim']} else: d[w] = {'d': '?', 'n': '?'} info['nlevels'] = len(data) dimtable = [{'level_label': dat['level_label'], 'level_norm': dat['level_norm'], 'level_space': url_for(".render_bmf_space_webpage", field_label=field_label, level_label=dat['level_label']) if gl_or_sl=='gl2_dims' else "", 'dims': dims[dat['level_label']]} for dat in data] info['dimtable'] = dimtable return render_template("bmf-field_dim_table.html", info=info, title=t, properties=properties, bread=bread)
def bmf_field_dim_table(**args): argsdict = to_dict(args) argsdict.update(to_dict(request.args)) gl_or_sl = argsdict['gl_or_sl'] field_label=argsdict['field_label'] field_label = nf_string_to_label(field_label) start = parse_start(argsdict) info={} info['gl_or_sl'] = gl_or_sl # level_flag controls whether to list all levels ('all'), only # those with positive cuspidal dimension ('cusp'), or only those # with positive new dimension ('new'). Default is 'cusp'. level_flag = argsdict.get('level_flag', 'cusp') info['level_flag'] = level_flag count = parse_count(argsdict, 50) pretty_field_label = field_pretty(field_label) bread = [('Bianchi Modular Forms', url_for(".index")), ( pretty_field_label, ' ')] properties = [] if gl_or_sl=='gl2_dims': info['group'] = 'GL(2)' info['bgroup'] = '\GL(2,\mathcal{O}_K)' else: info['group'] = 'SL(2)' info['bgroup'] = '\SL(2,\mathcal{O}_K)' t = ' '.join(['Dimensions of Spaces of {} Bianchi Modular Forms over'.format(info['group']), pretty_field_label]) query = {} query['field_label'] = field_label query[gl_or_sl] = {'$exists': True} data = db.bmf_dims.search(query, limit=count, offset=start, info=info) nres = info['number'] if nres > count or start != 0: info['report'] = 'Displaying items %s-%s of %s levels,' % (start + 1, min(nres, start + count), nres) else: info['report'] = 'Displaying all %s levels,' % nres # convert data to a list and eliminate levels where all # new/cuspidal dimensions are 0. (This could be done at the # search stage, but that requires adding new fields to each # record.) def filter(dat, flag): dat1 = dat[gl_or_sl] return any([int(dat1[w][flag])>0 for w in dat1]) flag = 'cuspidal_dim' if level_flag=='cusp' else 'new_dim' data = [dat for dat in data if level_flag == 'all' or filter(dat, flag)] info['field'] = field_label info['field_pretty'] = pretty_field_label nf = WebNumberField(field_label) info['base_galois_group'] = nf.galois_string() info['field_degree'] = nf.degree() info['field_disc'] = str(nf.disc()) info['field_poly'] = teXify_pol(str(nf.poly())) weights = set() for dat in data: weights = weights.union(set(dat[gl_or_sl].keys())) weights = list([int(w) for w in weights]) weights.sort() info['weights'] = weights info['nweights'] = len(weights) data.sort(key = lambda x: [int(y) for y in x['level_label'].split(".")]) dims = {} for dat in data: dims[dat['level_label']] = d = {} for w in weights: sw = str(w) if sw in dat[gl_or_sl]: d[w] = {'d': dat[gl_or_sl][sw]['cuspidal_dim'], 'n': dat[gl_or_sl][sw]['new_dim']} else: d[w] = {'d': '?', 'n': '?'} info['nlevels'] = len(data) dimtable = [{'level_label': dat['level_label'], 'level_norm': dat['level_norm'], 'level_space': url_for(".render_bmf_space_webpage", field_label=field_label, level_label=dat['level_label']) if gl_or_sl=='gl2_dims' else "", 'dims': dims[dat['level_label']]} for dat in data] info['dimtable'] = dimtable return render_template("bmf-field_dim_table.html", info=info, title=t, properties=properties, bread=bread)