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)
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)
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