def allbsd(line):
    r""" Parses one line from an allbsd file.  Returns the label and a
    dict containing fields with keys 'conductor', 'iso', 'number',
    'ainvs', 'rank', 'torsion', 'torsion_primes', 'tamagawa_product',
    'real_period', 'special_value', 'regulator', 'sha_an', 'sha',
    'sha_primes', all values being strings or floats or ints or lists
    of ints.

    Input line fields:

    conductor iso number ainvs rank torsion tamagawa_product real_period special_value regulator sha_an

    Sample input line:

    11 a 1 [0,-1,1,-10,-20] 0 5 5 1.2692093042795534217 0.25384186085591068434 1 1.00000000000000000000

    """
    data = split(line)
    label = data[0] + data[1] + data[2]
    ainvs = parse_ainvs(data[3])

    torsion = ZZ(data[5])
    sha_an = RR(data[10])
    sha = sha_an.round()
    sha_primes = sha.prime_divisors()
    torsion_primes = torsion.prime_divisors()

    data = {
        'conductor': int(data[0]),
        'iso': data[0] + data[1],
        'number': int(data[2]),
        'ainvs': ainvs,
        'rank': int(data[4]),
        'tamagawa_product': int(data[6]),
        'real_period': float(data[7]),
        'special_value': float(data[8]),
        'regulator': float(data[9]),
        'sha_an': float(sha_an),
        'sha': int(sha),
        'sha_primes': [int(p) for p in sha_primes],
        'torsion': int(torsion),
        'torsion_primes': [int(p) for p in torsion_primes]
    }

    return label, data
Beispiel #2
0
def allbsd(line):
    r""" Parses one line from an allbsd file.  Returns the label and a
    dict containing fields with keys 'conductor', 'iso', 'number',
    'ainvs', 'rank', 'torsion', 'torsion_primes', 'tamagawa_product',
    'real_period', 'special_value', 'regulator', 'sha_an', 'sha',
    'sha_primes', all values being strings or floats or ints or lists
    of ints.

    Input line fields:

    conductor iso number ainvs rank torsion tamagawa_product real_period special_value regulator sha_an

    Sample input line:

    11 a 1 [0,-1,1,-10,-20] 0 5 5 1.2692093042795534217 0.25384186085591068434 1 1.00000000000000000000

    """
    data = split(line)
    label = data[0] + data[1] + data[2]
    ainvs = parse_ainvs(data[3])

    torsion = ZZ(data[5])
    sha_an = RR(data[10])
    sha = sha_an.round()
    sha_primes = sha.prime_divisors()
    torsion_primes = torsion.prime_divisors()

    data = {
        'conductor': int(data[0]),
        'iso': data[0] + data[1],
        'number': int(data[2]),
        'ainvs': ainvs,
        'rank': int(data[4]),
        'tamagawa_product': int(data[6]),
        'real_period': float(data[7]),
        'special_value': float(data[8]),
        'regulator': float(data[9]),
        'sha_an': float(sha_an),
        'sha':  int(sha),
        'sha_primes':  [int(p) for p in sha_primes],
        'torsion':  int(torsion),
        'torsion_primes':  [int(p) for p in torsion_primes]
        }

    return label, data
def add_sha_tor_primes(N1, N2):
    """
    Add the 'sha', 'sha_primes', 'torsion_primes' fields to every
    curve in the database whose conductor is between N1 and N2
    inclusive.
    """
    query = {}
    query['conductor'] = {'$gte': int(N1), '$lte': int(N2)}
    res = curves.find(query)
    res = res.sort([('conductor', pymongo.ASCENDING)])
    n = 0
    for C in res:
        label = C['lmfdb_label']
        if n % 1000 == 0: print label
        n += 1
        torsion = ZZ(C['torsion'])
        sha = RR(C['sha_an']).round()
        sha_primes = sha.prime_divisors()
        torsion_primes = torsion.prime_divisors()
        data = {}
        data['sha'] = int(sha)
        data['sha_primes'] = [int(p) for p in sha_primes]
        data['torsion_primes'] = [int(p) for p in torsion_primes]
        curves.update({'lmfdb_label': label}, {"$set": data}, upsert=True)
Beispiel #4
0
def add_sha_tor_primes(N1,N2):
    """
    Add the 'sha', 'sha_primes', 'torsion_primes' fields to every
    curve in the database whose conductor is between N1 and N2
    inclusive.
    """
    query = {}
    query['conductor'] = { '$gte': int(N1), '$lte': int(N2) }
    res = curves.find(query)
    res = res.sort([('conductor', pymongo.ASCENDING)])
    n = 0
    for C in res:
        label = C['lmfdb_label']
        if n%1000==0: print label
        n += 1
        torsion = ZZ(C['torsion'])
        sha = RR(C['sha_an']).round()
        sha_primes = sha.prime_divisors()
        torsion_primes = torsion.prime_divisors()
        data = {}
        data['sha'] = int(sha)
        data['sha_primes'] = [int(p) for p in sha_primes]
        data['torsion_primes'] = [int(p) for p in torsion_primes]
        curves.update({'lmfdb_label': label}, {"$set": data}, upsert=True)
Beispiel #5
0
def gl2_subgroup_data(label):
    try:
        data = db.gps_gl2zhat.lookup(label)
    except ValueError:
        return "Invalid label for subgroup of GL(2,Zhat): %s" % label
    row_wrap = lambda cap, val: "<tr><td>%s: </td><td>%s</td></tr>\n" % (cap,
                                                                         val)
    matrix = lambda m: r'$\begin{bmatrix}%s&%s\\%s&%s\end{bmatrix}$' % (m[
        0], m[1], m[2], m[3])
    info = '<table>\n'
    info += row_wrap(
        'Subgroup <b>%s</b>' % (label),
        "<small>" + ', '.join([matrix(m)
                               for m in data['generators']]) + "</small>")
    info += "<tr><td></td><td></td></tr>\n"
    info += row_wrap('Level', data['level'])
    info += row_wrap('Index', data['index'])
    info += row_wrap('Genus', data['genus'])

    def ratcusps(c, r):
        if not c:
            return ""
        if not r:
            return " (none of which are rational)"
        if r == c:
            return " (all of which are rational)"
        if r == 1:
            return " (one of which is rational)"
        else:
            return " (of which %s are rational)" % r

    info += row_wrap(
        'Cusps', "%s%s" %
        (data['cusps'], ratcusps(data['cusps'], data['rational_cusps'])))
    info += row_wrap('Contains $-1$',
                     "yes" if data['quadratic_twists'][0] == label else "no")
    if data.get('CPlabel'):
        info += row_wrap(
            'Cummins & Pauli label', "<a href=%scsg%sM.html#level%s>%s</a>" %
            (CP_URL_PREFIX, data['genus'], data['level'], data['CPlabel']))
    if data.get('RZBlabel'):
        info += row_wrap(
            'Rouse & Zureick-Brown label',
            "<a href={prefix}{label}.html>{label}</a>".format(
                prefix=RZB_URL_PREFIX, label=data['RZBlabel']))
    if data.get('SZlabel'):
        info += row_wrap('Sutherland & Zywina label', data['SZlabel'])
    N = ZZ(data['level'])
    ell = N.prime_divisors()[0]
    e = N.valuation(ell)
    if e == 1:
        info += row_wrap(
            "Cyclic %s-isogeny field degree" % (ell),
            min([r[1] for r in data['isogeny_orbits'] if r[0] == ell]))
        info += row_wrap("Cyclic %s-torsion field degree" % (ell),
                         min([r[1] for r in data['orbits'] if r[0] == ell]))
        info += row_wrap(
            "Full %s-torsion field degree" % (ell),
            ell * (ell - 1) * (ell - 1) * (ell + 1) // data['index'])
    else:
        info += row_wrap(
            "Cyclic %s${}^n$-isogeny field degrees" % (ell), ", ".join([
                "%s" %
                (min([r[1] for r in data['isogeny_orbits'] if r[0] == ell**n]))
                for n in range(1, e + 1)
            ]))
        info += row_wrap(
            "Cyclic %s${}^n$-torsion field degrees" % (ell), ", ".join([
                "%s" % (min([r[1] for r in data['orbits'] if r[0] == ell**n]))
                for n in range(1, e + 1)
            ]))
        info += row_wrap(
            "Full %s${}^n$-torsion field degrees" % (ell), ", ".join([
                "%s" % (ell * (ell - 1) * (ell - 1) *
                        (ell + 1) * ell**(4 * n) // data['index'])
                for n in range(1, e + 1)
            ]))
    if data['genus'] > 0:
        info += row_wrap(
            'Newforms', ''.join([
                '<a href="%s">%s</a>' % (cmf_url_for_label(x), x)
                for x in data['newforms']
            ]))
        info += row_wrap('Analytic rank', data['rank'])
        if data['genus'] == 1 and data['model']:
            info += row_wrap(
                'Model', '<a href="%s">%s</a>' % (url_for(
                    'ec.by_ec_label', label=data['model']), data['model']))
    info += "</table>\n"
    return info