def abelian_variety_browse(**args): info = to_dict(args) if not ('table_dimension_range' in info) or (info['table_dimension_range'] == ''): info['table_dimension_range'] = "1-6" if not ('table_field_range' in info) or (info['table_field_range'] == ''): info['table_field_range'] = "2-27" gD = parse_range(info['table_dimension_range']) qD = parse_range(info['table_field_range']) av_stats = AbvarFqStats() qs = av_stats.qs gs = av_stats.gs info['table'] = {} if isinstance(qD, int): qmin = qmax = qD else: qmin = qD.get('$gte', min(qs) if qs else qD.get('$lte', 0)) qmax = qD.get('$lte', max(qs) if qs else qD.get('$gte', 1000)) if isinstance(gD, int): gmin = gmax = gD else: gmin = gD.get('$gte', min(gs) if gs else gD.get('$lte', 1)) gmax = gD.get('$lte', max(gs) if gs else gD.get('$gte', 20)) if gmin == gmax: info['table_dimension_range'] = "{0}".format(gmin) else: info['table_dimension_range'] = "{0}-{1}".format(gmin, gmax) if qmin == qmax: info['table_field_range'] = "{0}".format(qmin) else: info['table_field_range'] = "{0}-{1}".format(qmin, qmax) for q in qs: if q < qmin or q > qmax: continue info['table'][q] = {} L = av_stats._counts[q] for g in xrange(gmin, gmax + 1): if g < len(L): info['table'][q][g] = L[g] else: info['table'][q][g] = 0 info['col_heads'] = [q for q in qs if q >= qmin and q <= qmax] info['row_heads'] = [g for g in gs if g >= gmin and g <= gmax] return render_template( "abvarfq-index.html", title="Isogeny Classes of Abelian Varieties over Finite Fields", info=info, credit=abvarfq_credit, bread=get_bread(), learnmore=learnmore_list())
def abelian_variety_browse(**args): info = to_dict(args) if not('table_dimension_range' in info) or (info['table_dimension_range']==''): info['table_dimension_range'] = "1-6" if not('table_field_range' in info) or (info['table_field_range']==''): info['table_field_range'] = "2-27" table_params = {} av_stats=AbvarFqStats() # Handle dimension range gs = av_stats.gs try: if ',' in info['table_dimension_range']: flash(Markup("Error: You cannot use commas in the table ranges."), "error") raise ValueError parse_ints(info,table_params,'table_dimension_range',qfield='g') except (ValueError, AttributeError, TypeError): gmin, gmax = 1, 6 else: if isinstance(table_params['g'], int): gmin = gmax = table_params['g'] else: gmin = table_params['g'].get('$gte',min(gs) if gs else table_params['g'].get('$lte',1)) gmax = table_params['g'].get('$lte',max(gs) if gs else table_params['g'].get('$gte',20)) # Handle field range qs = av_stats.qs try: if ',' in info['table_field_range']: flash(Markup("Error: You cannot use commas in the table ranges."), "error") raise ValueError parse_ints(info,table_params,'table_field_range',qfield='q') except (ValueError, AttributeError, TypeError): qmin, qmax = 2, 27 else: if isinstance(table_params['q'], int): qmin = qmax = table_params['q'] else: qmin = table_params['q'].get('$gte',min(qs) if qs else table_params['q'].get('$lte',0)) qmax = table_params['q'].get('$lte',max(qs) if qs else table_params['q'].get('$gte',1000)) info['table'] = {} if gmin == gmax: info['table_dimension_range'] = "{0}".format(gmin) else: info['table_dimension_range'] = "{0}-{1}".format(gmin, gmax) if qmin == qmax: info['table_field_range'] = "{0}".format(qmin) else: info['table_field_range'] = "{0}-{1}".format(qmin, qmax) for q in qs: if q < qmin or q > qmax: continue info['table'][q] = {} L = av_stats._counts[q] for g in xrange(gmin, gmax+1): if g < len(L): info['table'][q][g] = L[g] else: info['table'][q][g] = 0 info['col_heads'] = [q for q in qs if q >= qmin and q <= qmax] info['row_heads'] = [g for g in gs if g >= gmin and g <= gmax] return render_template("abvarfq-index.html", title="Isogeny Classes of Abelian Varieties over Finite Fields", info=info, credit=abvarfq_credit, bread=get_bread(), learnmore=learnmore_list())
def abelian_variety_search(**args): info = to_dict(args) if 'download' in info and info['download'] != 0: return download_search(info) bread = args.get('bread', get_bread(('Search Results', ' '))) if 'jump' in info: return by_label(info.get('label', '')) query = {} try: parse_ints(info, query, 'q') parse_ints(info, query, 'g') if 'simple' in info: if info['simple'] == 'yes': query['decomposition'] = {'$size': 1} query['decomposition.0.1'] = 1 elif info['simple'] == 'no': query['$or'] = [{ 'decomposition': { '$not': { '$size': 1 } } }, { 'decomposition.0.1': { '$gt': 1 } }] if 'primitive' in info: if info['primitive'] == 'yes': query['primitive_models'] = {'$size': 0} elif info['primitive'] == 'no': query['primitive_models'] = {'$not': {'$size': 0}} if 'jacobian' in info: if info['jacobian'] == 'yes': query['known_jacobian'] = 1 elif info['jacobian'] == 'no': query['known_jacobian'] = -1 else: info['jacobian'] = "any" if 'polarizable' in info: if info['polarizable'] == 'yes': query['principally_polarizable'] = 1 elif info['polarizable'] == 'no': query['principally_polarizable'] = -1 else: info['polarizable'] = "any" parse_ints(info, query, 'p_rank') parse_ints(info, query, 'angle_ranks') parse_newton_polygon(info, query, 'newton_polygon', qfield='slopes') parse_list_start(info, query, 'initial_coefficients', qfield='polynomial', index_shift=1) parse_list_start(info, query, 'abvar_point_count', qfield='A_counts', parse_singleton=str) parse_list_start(info, query, 'curve_point_count', qfield='C_counts', parse_singleton=str) parse_abvar_decomp(info, query, 'decomposition', av_stats=AbvarFqStats()) parse_nf_string(info, query, 'number_field') except ValueError: return search_input_error(info, bread) info['query'] = query count = parse_count(info, 50) start = parse_start(info) cursor = db().find(query) nres = cursor.count() if start >= nres: start -= (1 + (start - nres) / count) * count if start < 0: start = 0 #res = cursor.sort([]).skip(start).limit(count) res = cursor.skip(start).limit(count) res = list(res) info['abvars'] = [AbvarFq_isoclass(x) for x in res] info['number'] = nres info['start'] = start info['count'] = count info['more'] = int(start + count < nres) if nres == 1: info['report'] = 'unique match' elif nres == 0: info['report'] = 'no matches' elif 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 t = 'Abelian Variety search results' return render_template("abvarfq-search-results.html", info=info, credit=abvarfq_credit, bread=bread, title=t)
def abelian_variety_search(**args): info = to_dict(args) if 'download' in info and info['download'] != 0: return download_search(info) bread = args.get('bread', get_bread(('Search Results', ' '))) if 'jump' in info: return by_label(info.get('label','')) query = {} try: parse_ints(info,query,'q',name='base field') parse_ints(info,query,'g',name='dimension') if 'simple' in info: if info['simple'] == 'yes': query['is_simp'] = True elif info['simple'] == 'no': query['is_simp'] = False if 'primitive' in info: if info['primitive'] == 'yes': query['is_prim'] = True elif info['primitive'] == 'no': query['is_prim'] = False if 'jacobian' in info: jac = info['jacobian'] if jac == 'yes': query['is_jac'] = 1 elif jac == 'not_no': query['is_jac'] = {'$gt' : -1} elif jac == 'not_yes': query['is_jac'] = {'$lt' : 1} elif jac == 'no': query['is_jac'] = -1 if 'polarizable' in info: pol = info['polarizable'] if pol == 'yes': query['is_pp'] = 1 elif pol == 'not_no': query['is_pp'] = {'$gt' : -1} elif pol == 'not_yes': query['is_pp'] = {'$lt' : 1} elif pol == 'no': query['is_pp'] = -1 parse_ints(info,query,'p_rank') parse_ints(info,query,'ang_rank') parse_newton_polygon(info,query,'newton_polygon',qfield='slps') # TODO parse_string_start(info,query,'initial_coefficients',qfield='poly',initial_segment=["1"]) parse_string_start(info,query,'abvar_point_count',qfield='A_cnts') parse_string_start(info,query,'curve_point_count',qfield='C_cnts',first_field='pt_cnt') parse_abvar_decomp(info,query,'decomposition',qfield='decomp',av_stats=AbvarFqStats()) parse_nf_string(info,query,'number_field',qfield='nf') parse_galgrp(info,query,qfield='gal') except ValueError: return search_input_error(info, bread) info['query'] = query count = parse_count(info, 50) start = parse_start(info) cursor = db().find(query) nres = cursor.count() if start >= nres: start -= (1 + (start - nres) / count) * count if start < 0: start = 0 res = cursor.sort([('sort', ASCENDING)]).skip(start).limit(count) res = list(res) info['abvars'] = [AbvarFq_isoclass(x) for x in res] info['number'] = nres info['start'] = start info['count'] = count info['more'] = int(start + count < nres) if nres == 1: info['report'] = 'unique match' elif nres == 0: info['report'] = 'no matches' elif 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 t = 'Abelian Variety search results' return render_template("abvarfq-search-results.html", info=info, credit=abvarfq_credit, bread=bread, title=t)