예제 #1
0
def statistics_by_signature(d, r):
    if d == 1:
        return redirect(url_for("ec.statistics"))

    info = {}

    ecnfstats = db_ecnfstats()
    sigs_by_deg = ecnfstats.find_one({'_id': 'signatures_by_degree'},
                                     projection={'_id': False})
    if not str(d) in sigs_by_deg:
        info[
            'error'] = "The database does not contain any elliptic curves defined over fields of degree %s" % d
    else:
        info['degree'] = d

    if not r in range(d % 2, d + 1, 2):
        info['error'] = "Invalid signature %s" % info['sig']
    s = (d - r) // 2
    info['sig'] = sig = '%s,%s' % (r, s)
    info['summary'] = ecnf_signature_summary(sig)

    fields_by_sig = ecnfstats.find_one({'_id': 'fields_by_signature'},
                                       projection={'_id': False})
    counts_by_field = ecnfstats.find_one({'_id': 'conductor_norm_by_field'},
                                         projection={'_id': False})

    def field_counts(f):
        ff = f.replace(".", ":")
        return [f, counts_by_field[ff]]

    sorted_fields = sorted(fields_by_sig[sig], key=sort_field)
    info['sig_stats'] = [field_counts(f) for f in sorted_fields]
    credit = 'John Cremona'
    if info['sig'] == '2,0':
        t = 'Elliptic curves over real quadratic number fields'
    elif info['sig'] == '0,1':
        t = 'Elliptic curves over imaginary quadratic number fields'
    elif info['sig'] == '3,0':
        t = 'Elliptic curves over totally real cubic number fields'
    elif info['sig'] == '1,1':
        t = 'Elliptic curves over mixed cubic number fields'
    elif info['sig'] == '4,0':
        t = 'Elliptic curves over totally real quartic number fields'
    elif info['sig'] == '5,0':
        t = 'Elliptic curves over totally real quintic number fields'
    elif info['sig'] == '6,0':
        t = 'Elliptic curves over totally real sextic number fields'
    else:
        t = 'Elliptic curves over number fields of degree %s, signature (%s)' % (
            d, info['sig'])
    bread = [('Elliptic Curves', url_for("ecnf.index")),
             ('degree %s' % d, url_for("ecnf.statistics_by_degree", d=d)),
             ('signature (%s)' % info['sig'], ' ')]
    return render_template("ecnf-by-signature.html",
                           info=info,
                           credit=credit,
                           title=t,
                           bread=bread,
                           learnmore=learnmore_list())
예제 #2
0
def get_torsion_structures():
    global torsion_structures
    if torsion_structures==None:
        #print("Getting list of torsion structures from the database")
        ecnfstats = db_ecnfstats()
        torsion_structures = [t[0] for t in ecnfstats.find_one({'_id':'torsion_structure'})['counts']]
        torsion_structures = [[int(str(n)) for n in t.split(",")] for t in torsion_structures if t]
        torsion_structures.sort()
    return torsion_structures
예제 #3
0
파일: main.py 프로젝트: haraldschilly/lmfdb
def browse():
    data = db_ecnfstats().find_one({'_id':'signatures_by_degree'}, projection={'_id': False})
    # We could use the dict directly but then could not control the order
    # of the keys (degrees), so we use a list
    info = [[d,data[str(d)]] for d in sorted([int(d) for d in data.keys()])]
    credit = 'John Cremona'
    t = 'Elliptic curves over number fields'
    bread = [('Elliptic Curves', url_for("ecnf.index")),
             ('Browse', ' ')]
    return render_template("ecnf-stats.html", info=info, credit=credit, title=t, bread=bread, learnmore=learnmore_list())
예제 #4
0
def get_torsion_structures():
    ecnfstats = db_ecnfstats()
    torsion_structures = [
        t[0]
        for t in ecnfstats.find_one({'_id': 'torsion_structure'})['counts']
    ]
    torsion_structures = [[int(str(n)) for n in t.split(",")]
                          for t in torsion_structures if t]
    torsion_structures.sort()
    return torsion_structures
예제 #5
0
def browse():
    data = db_ecnfstats().find_one({'_id':'signatures_by_degree'}, projection={'_id': False})
    # We could use the dict directly but then could not control the order
    # of the keys (degrees), so we use a list
    info = [[d,data[str(d)]] for d in sorted([int(d) for d in data.keys()])]
    credit = 'John Cremona'
    t = 'Elliptic Curves over Number Fields'
    bread = [('Elliptic Curves', url_for("ecnf.index")),
             ('Browse', ' ')]
    return render_template("ecnf-stats.html", info=info, credit=credit, title=t, bread=bread, learnmore=learnmore_list())
예제 #6
0
def statistics_by_degree(d):
    if d == 1:
        return redirect(url_for("ec.statistics"))
    info = {}

    ecnfstats = db_ecnfstats()
    sigs_by_deg = ecnfstats.find_one({'_id': 'signatures_by_degree'},
                                     projection={'_id': False})
    if not str(d) in sigs_by_deg:
        info[
            'error'] = "The database does not contain any elliptic curves defined over fields of degree %s" % d
    else:
        info['degree'] = d

    fields_by_sig = ecnfstats.find_one({'_id': 'fields_by_signature'},
                                       projection={'_id': False})
    counts_by_sig = ecnfstats.find_one({'_id': 'conductor_norm_by_signature'},
                                       projection={'_id': False})
    counts_by_field = ecnfstats.find_one({'_id': 'conductor_norm_by_field'},
                                         projection={'_id': False})

    def field_counts(f):
        ff = f.replace(".", ":")
        return [f, counts_by_field[ff]]

    def sig_counts(sig):
        sorted_fields = sorted(fields_by_sig[sig], key=sort_field)
        return [
            sig, counts_by_sig[sig], [field_counts(f) for f in sorted_fields]
        ]

    info['summary'] = ecnf_degree_summary(d)
    info['sig_stats'] = [sig_counts(sig) for sig in sigs_by_deg[str(d)]]
    credit = 'John Cremona'
    if d == 2:
        t = 'Elliptic curves over quadratic number fields'
    elif d == 3:
        t = 'Elliptic curves over cubic number fields'
    elif d == 4:
        t = 'Elliptic curves over quartic number fields'
    elif d == 5:
        t = 'Elliptic curves over quintic number fields'
    elif d == 6:
        t = 'Elliptic curves over sextic number fields'
    else:
        t = 'Elliptic curves over number fields of degree {}'.format(d)

    bread = [('Elliptic Curves', url_for("ecnf.index")),
             ('degree %s' % d, ' ')]
    return render_template("ecnf-by-degree.html",
                           info=info,
                           credit=credit,
                           title=t,
                           bread=bread,
                           learnmore=learnmore_list())
예제 #7
0
파일: main.py 프로젝트: haraldschilly/lmfdb
def statistics_by_signature(d,r):
    if d==1:
        return redirect(url_for("ec.statistics"))

    info = {}

    ecnfstats = db_ecnfstats()
    sigs_by_deg = ecnfstats.find_one({'_id':'signatures_by_degree'}, projection={'_id': False})
    if not str(d) in sigs_by_deg:
        info['error'] = "The database does not contain any elliptic curves defined over fields of degree %s" % d
    else:
        info['degree'] = d

    if not r in range(d%2,d+1,2):
        info['error'] = "Invalid signature %s" % info['sig']
    s = (d-r)//2
    info['sig'] = sig = '%s,%s' % (r,s)
    info['summary'] = ecnf_signature_summary(sig)

    fields_by_sig = ecnfstats.find_one({'_id':'fields_by_signature'}, projection={'_id': False})
    counts_by_field = ecnfstats.find_one({'_id':'conductor_norm_by_field'}, projection={'_id': False})

    def field_counts(f):
        ff = f.replace(".",":")
        return [f,counts_by_field[ff]]

    sorted_fields = sorted(fields_by_sig[sig], key=sort_field)
    info['sig_stats'] = [field_counts(f) for f in sorted_fields]
    credit = 'John Cremona'
    if info['sig'] == '2,0':
        t = 'Elliptic curves over real quadratic number fields'
    elif info['sig'] == '0,1':
        t = 'Elliptic curves over imaginary quadratic number fields'
    elif info['sig'] == '3,0':
        t = 'Elliptic curves over totally real cubic number fields'
    elif info['sig'] == '1,1':
        t = 'Elliptic curves over mixed cubic number fields'
    elif info['sig'] == '4,0':
        t = 'Elliptic curves over totally real quartic number fields'
    elif info['sig'] == '5,0':
        t = 'Elliptic curves over totally real quintic number fields'
    elif info['sig'] == '6,0':
        t = 'Elliptic curves over totally real sextic number fields'
    else:
        t = 'Elliptic curves over number fields of degree %s, signature (%s)' % (d,info['sig'])
    bread = [('Elliptic Curves', url_for("ecnf.index")),
              ('Degree %s' % d,url_for("ecnf.statistics_by_degree", d=d)),
              ('Signature (%s)' % info['sig'],' ')]
    return render_template("ecnf-by-signature.html", info=info, credit=credit, title=t, bread=bread, learnmore=learnmore_list())
예제 #8
0
def ecnf_degree_summary(d):
    ec_knowl = '<a knowl="ec">elliptic curves</a>'
    iso_knowl = '<a knowl="ec.isogeny_class">isogeny classes</a>'
    nf_knowl = '<a knowl="nf">number fields</a>'
    cond_knowl = '<a knowl="ec.conductor">conductors</a>'
    data = db_ecnfstats().find_one({'_id':'conductor_norm_by_degree'})[str(d)]
    ncurves = data['ncurves']
    nclasses = data['nclasses']
    max_norm = data['max_norm']
    return ''.join([r'The database currently contains {} '.format(ncurves),
                    ec_knowl,
                    r' defined over ',
                    nf_knowl,
                    r' of degree {}, in {} '.format(d, nclasses),
                    iso_knowl,
                    r', with ',
                    cond_knowl,
                    r' of norm up to {}.'.format(max_norm)])
예제 #9
0
파일: main.py 프로젝트: haraldschilly/lmfdb
def statistics_by_degree(d):
    if d==1:
        return redirect(url_for("ec.statistics"))
    info = {}

    ecnfstats = db_ecnfstats()
    sigs_by_deg = ecnfstats.find_one({'_id':'signatures_by_degree'}, projection={'_id': False})
    if not str(d) in sigs_by_deg:
        info['error'] = "The database does not contain any elliptic curves defined over fields of degree %s" % d
    else:
        info['degree'] = d

    fields_by_sig = ecnfstats.find_one({'_id':'fields_by_signature'}, projection={'_id': False})
    counts_by_sig = ecnfstats.find_one({'_id':'conductor_norm_by_signature'}, projection={'_id': False})
    counts_by_field = ecnfstats.find_one({'_id':'conductor_norm_by_field'}, projection={'_id': False})

    def field_counts(f):
        ff = f.replace(".",":")
        return [f,counts_by_field[ff]]

    def sig_counts(sig):
        sorted_fields = sorted(fields_by_sig[sig], key=sort_field)
        return [sig, counts_by_sig[sig], [field_counts(f) for f in sorted_fields]]

    info['summary'] = ecnf_degree_summary(d)
    info['sig_stats'] = [sig_counts(sig) for sig in sigs_by_deg[str(d)]]
    credit = 'John Cremona'
    if d==2:
        t = 'Elliptic curves over quadratic number fields'
    elif d==3:
        t = 'Elliptic curves over cubic number fields'
    elif d==4:
        t = 'Elliptic curves over quartic number fields'
    elif d==5:
        t = 'Elliptic curves over quintic number fields'
    elif d==6:
        t = 'Elliptic curves over sextic number fields'
    else:
        t = 'Elliptic curves over number fields of degree {}'.format(d)

    bread = [('Elliptic Curves', url_for("ecnf.index")),
              ('Degree %s' % d,' ')]
    return render_template("ecnf-by-degree.html", info=info, credit=credit, title=t, bread=bread, learnmore=learnmore_list())
예제 #10
0
def ecnf_signature_summary(sig):
    ec_knowl = '<a knowl="ec">elliptic curves</a>'
    iso_knowl = '<a knowl="ec.isogeny_class">isogeny classes</a>'
    nf_knowl = '<a knowl="nf">number fields</a>'
    cond_knowl = '<a knowl="ec.conductor">conductors</a>'
    r, s = [int(x) for x in sig.split(",")]
    d = r+2*s
    data = db_ecnfstats().find_one({'_id':'conductor_norm_by_signature'})[sig]
    ncurves = data['ncurves']
    nclasses = data['nclasses']
    max_norm = data['max_norm']
    return ''.join([r'The database currently contains {} '.format(ncurves),
                    ec_knowl,
                    r' defined over ',
                    nf_knowl,
                    r' of signature ({}) (degree {}), in {} '.format(sig, d, nclasses),
                    iso_knowl,
                    r', with ',
                    cond_knowl,
                    r' of norm up to {}.'.format(max_norm)])
예제 #11
0
def ecnf_summary():
    ecnfstats = db_ecnfstats()
    ec_knowl = '<a knowl="ec">elliptic curves</a>'
    iso_knowl = '<a knowl="ec.isogeny_class">isogeny classes</a>'
    nf_knowl = '<a knowl="nf">number fields</a>'
    deg_knowl = '<a knowl="nf.degree">degree</a>'
    data = ecnfstats.find_one({'_id':'conductor_norm'})
    ncurves = comma(data['ncurves'])
    nclasses = comma(data['nclasses'])
    data = ecnfstats.find_one({'_id':'field_label'})
    nfields = len(data['counts'])
    data = ecnfstats.find_one({'_id':'signatures_by_degree'})
    maxdeg = max(int(d) for d in data if d!='_id')
    return ''.join([r'The database currently contains {} '.format(ncurves),
                    ec_knowl,
                    r' in {} '.format(nclasses),
                    iso_knowl,
                    r', over {} '.format(nfields),
                    nf_knowl, ' (not including $\mathbb{Q}$) of ',
                    deg_knowl,
                    r' up to {}.'.format(maxdeg)])
예제 #12
0
def ecnf_field_summary(field):
    data = db_ecnfstats().find_one({'_id':'conductor_norm_by_field'})[field]
    ncurves = data['ncurves']
    s = '' if ncurves==1 else 's'
    ec_knowl = '<a knowl="ec">elliptic curve{}</a>'.format(s)
    nclasses = data['nclasses']
    s = '' if nclasses==1 else 'es'
    iso_knowl = '<a knowl="ec.isogeny_class">isogeny class{}</a>'.format(s)
    nf_knowl = '<a knowl="nf">number field</a>'
    max_norm = data['max_norm']
    s = '' if max_norm==1 else 's'
    cond_knowl = '<a knowl="ec.conductor">conductor{}</a>'.format(s)
    s = '' if max_norm==1 else 'up to '
    return ''.join([r'The database currently contains {} '.format(ncurves),
                    ec_knowl,
                    r' defined over the ',
                    nf_knowl,
                    r' {}, in {} '.format(field_pretty(field), nclasses),
                    iso_knowl,
                    r', with ',
                    cond_knowl,
                    r' of norm {} {}.'.format(s,data['max_norm'])])
예제 #13
0
파일: main.py 프로젝트: haraldschilly/lmfdb
def get_torsion_structures():
    ecnfstats = db_ecnfstats()
    torsion_structures = [t[0] for t in ecnfstats.find_one({'_id':'torsion_structure'})['counts']]
    torsion_structures = [[int(str(n)) for n in t.split(",")] for t in torsion_structures if t]
    torsion_structures.sort()
    return torsion_structures
예제 #14
0
파일: main.py 프로젝트: haraldschilly/lmfdb
def index():
    #    if 'jump' in request.args:
    #        return show_ecnf1(request.args['label'])
    if len(request.args) > 0:
        return elliptic_curve_search(to_dict(request.args))
    bread = get_bread()

    # the dict data will hold additional information to be displayed on
    # the main browse and search page

    data = {}

    # data['fields'] holds data for a sample of number fields of different
    # signatures for a general browse:

    ecnfstats = db_ecnfstats()
    fields_by_deg = ecnfstats.find_one({'_id':'fields_by_degree'})
    fields_by_sig = ecnfstats.find_one({'_id':'fields_by_signature'})
    data['fields'] = []
    # Rationals
    data['fields'].append(['the rational field', (('1.1.1.1', [url_for('ec.rational_elliptic_curves'), '$\Q$']),)])

    # Real quadratics (sample)
    rqfs = ['2.2.{}.1'.format(d) for d in [5, 89, 229, 497]]
    niqfs = len(fields_by_sig['0,1'])
    nrqfs = len(fields_by_sig['2,0'])
    data['fields'].append(['{} real quadratic fields, including'.format(nrqfs),
                           ((nf, [url_for('.show_ecnf1', nf=nf), field_pretty(nf)])
                            for nf in rqfs)])

    # Imaginary quadratics (sample)
    iqfs = ['2.0.{}.1'.format(d) for d in [4, 8, 3, 7, 11]]
    data['fields'].append(['{} imaginary quadratic fields, including'.format(niqfs),
                           ((nf, [url_for('.show_ecnf1', nf=nf), field_pretty(nf)])
                            for nf in iqfs)])

    # Cubics (sample)
    cubics = ['3.1.23.1'] + ['3.3.{}.1'.format(d) for d in [49,148,1957]]
    ncubics = len(fields_by_deg['3'])
    data['fields'].append(['{} cubic fields, including'.format(ncubics),
                           ((nf, [url_for('.show_ecnf1', nf=nf), field_pretty(nf)])
                            for nf in cubics)])

    # Quartics (sample)
    quartics = ['4.4.{}.1'.format(d) for d in [725,2777,9909,19821]]
    nquartics = len(fields_by_deg['4'])
    data['fields'].append(['{} totally real quartic fields, including'.format(nquartics),
                           ((nf, [url_for('.show_ecnf1', nf=nf), field_pretty(nf)])
                            for nf in quartics)])

    # Quintics (sample)
    quintics = ['5.5.{}.1'.format(d) for d in [14641, 24217, 36497, 38569, 65657]]
    nquintics = len(fields_by_deg['5'])
    data['fields'].append(['{} totally real quintic fields, including'.format(nquintics),
                           ((nf, [url_for('.show_ecnf1', nf=nf), field_pretty(nf)])
                            for nf in quintics)])

    # Sextics (sample)
    sextics = ['6.6.{}.1'.format(d) for d in [300125, 371293, 434581, 453789, 485125]]
    nsextics = len(fields_by_deg['6'])
    data['fields'].append(['{} totally real sextic fields, including'.format(nsextics),
                           ((nf, [url_for('.show_ecnf1', nf=nf), field_pretty(nf)])
                            for nf in sextics)])

    data['degrees'] = sorted([int(d) for d in fields_by_deg.keys() if d!='_id'])

# data['highlights'] holds data (URL and descriptive text) for a
# sample of elliptic curves with interesting features:

    data['highlights'] = []
    data['highlights'].append(
        ['A curve with $C_3\\times C_3$ torsion',
         url_for('.show_ecnf', nf='2.0.3.1', class_label='a', conductor_label='2268.36.18', number=int(1))]
    )
    data['highlights'].append(
        ['A curve with $C_4\\times C_4$ torsion',
         url_for('.show_ecnf', nf='2.0.4.1', class_label='b', conductor_label='5525.870.5', number=int(9))]
    )
    data['highlights'].append(
        ['A curve with CM by $\\sqrt{-267}$',
         url_for('.show_ecnf', nf='2.2.89.1', class_label='a', conductor_label='81.1', number=int(1))]
    )
    data['highlights'].append(
        ['An isogeny class with isogenies of degree $3$ and $89$ (and $267$)',
         url_for('.show_ecnf_isoclass', nf='2.2.89.1', class_label='a', conductor_label='81.1')]
    )
    data['highlights'].append(
        ['A curve with everywhere good reduction, but no global minimal model',
         url_for('.show_ecnf', nf='2.2.229.1', class_label='a', conductor_label='1.1', number=int(1))]
    )

    return render_template("ecnf-index.html",
                           title="Elliptic Curves over Number Fields",
                           data=data,
                           bread=bread, learnmore=learnmore_list_remove('Completeness'))
예제 #15
0
def index():
    #    if 'jump' in request.args:
    #        return show_ecnf1(request.args['label'])
    if len(request.args) > 0:
        return elliptic_curve_search(to_dict(request.args))
    bread = get_bread()

    # the dict data will hold additional information to be displayed on
    # the main browse and search page

    data = {}

    # data['fields'] holds data for a sample of number fields of different
    # signatures for a general browse:

    ecnfstats = db_ecnfstats()
    fields_by_deg = ecnfstats.find_one({'_id': 'fields_by_degree'})
    fields_by_sig = ecnfstats.find_one({'_id': 'fields_by_signature'})
    data['fields'] = []
    # Rationals
    data['fields'].append([
        'the rational field',
        (('1.1.1.1', [url_for('ec.rational_elliptic_curves'), '$\Q$']), )
    ])

    # Real quadratics (sample)
    rqfs = ['2.2.{}.1'.format(d) for d in [5, 89, 229, 497]]
    niqfs = len(fields_by_sig['0,1'])
    nrqfs = len(fields_by_sig['2,0'])
    data['fields'].append([
        '{} real quadratic fields, including'.format(nrqfs),
        ((nf, [url_for('.show_ecnf1', nf=nf),
               field_pretty(nf)]) for nf in rqfs)
    ])

    # Imaginary quadratics (sample)
    iqfs = ['2.0.{}.1'.format(d) for d in [4, 8, 3, 7, 11]]
    data['fields'].append([
        '{} imaginary quadratic fields, including'.format(niqfs),
        ((nf, [url_for('.show_ecnf1', nf=nf),
               field_pretty(nf)]) for nf in iqfs)
    ])

    # Cubics (sample)
    cubics = ['3.1.23.1'] + ['3.3.{}.1'.format(d) for d in [49, 148, 1957]]
    ncubics = len(fields_by_deg['3'])
    data['fields'].append([
        '{} cubic fields, including'.format(ncubics),
        ((nf, [url_for('.show_ecnf1', nf=nf),
               field_pretty(nf)]) for nf in cubics)
    ])

    # Quartics (sample)
    quartics = ['4.4.{}.1'.format(d) for d in [725, 2777, 9909, 19821]]
    nquartics = len(fields_by_deg['4'])
    data['fields'].append([
        '{} totally real quartic fields, including'.format(nquartics),
        ((nf, [url_for('.show_ecnf1', nf=nf),
               field_pretty(nf)]) for nf in quartics)
    ])

    # Quintics (sample)
    quintics = [
        '5.5.{}.1'.format(d) for d in [14641, 24217, 36497, 38569, 65657]
    ]
    nquintics = len(fields_by_deg['5'])
    data['fields'].append([
        '{} totally real quintic fields, including'.format(nquintics),
        ((nf, [url_for('.show_ecnf1', nf=nf),
               field_pretty(nf)]) for nf in quintics)
    ])

    # Sextics (sample)
    sextics = [
        '6.6.{}.1'.format(d) for d in [300125, 371293, 434581, 453789, 485125]
    ]
    nsextics = len(fields_by_deg['6'])
    data['fields'].append([
        '{} totally real sextic fields, including'.format(nsextics),
        ((nf, [url_for('.show_ecnf1', nf=nf),
               field_pretty(nf)]) for nf in sextics)
    ])

    data['degrees'] = sorted(
        [int(d) for d in fields_by_deg.keys() if d != '_id'])

    # data['highlights'] holds data (URL and descriptive text) for a
    # sample of elliptic curves with interesting features:

    data['highlights'] = []
    data['highlights'].append([
        'A curve with $C_3\\times C_3$ torsion',
        url_for('.show_ecnf',
                nf='2.0.3.1',
                class_label='a',
                conductor_label='2268.36.18',
                number=int(1))
    ])
    data['highlights'].append([
        'A curve with $C_4\\times C_4$ torsion',
        url_for('.show_ecnf',
                nf='2.0.4.1',
                class_label='b',
                conductor_label='5525.870.5',
                number=int(9))
    ])
    data['highlights'].append([
        'A curve with CM by $\\sqrt{-267}$',
        url_for('.show_ecnf',
                nf='2.2.89.1',
                class_label='a',
                conductor_label='81.1',
                number=int(1))
    ])
    data['highlights'].append([
        'An isogeny class with isogenies of degree $3$ and $89$ (and $267$)',
        url_for('.show_ecnf_isoclass',
                nf='2.2.89.1',
                class_label='a',
                conductor_label='81.1')
    ])
    data['highlights'].append([
        'A curve with everywhere good reduction, but no global minimal model',
        url_for('.show_ecnf',
                nf='2.2.229.1',
                class_label='a',
                conductor_label='1.1',
                number=int(1))
    ])

    return render_template("ecnf-index.html",
                           title="Elliptic Curves over Number Fields",
                           data=data,
                           bread=bread,
                           learnmore=learnmore_list_remove('Completeness'))