Exemplo n.º 1
0
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())
Exemplo n.º 2
0
Arquivo: main.py Projeto: 370417/lmfdb
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())
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
Arquivo: main.py Projeto: 370417/lmfdb
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)