def download_hmf_magma(**args): C = getDBConnection() data = None label = str(args['label']) f = C.hmfs.forms.find_one({'label': label}) if f is None: return "No such form" F = WebNumberField(f['field_label']) F_hmf = C.hmfs.fields.find_one({'label': f['field_label']}) outstr = 'P<x> := PolynomialRing(Rationals());\n' outstr += 'g := P!' + str(F.coeffs()) + ';\n' outstr += 'F<w> := NumberField(g);\n' outstr += 'ZF := Integers(F);\n\n' # outstr += 'ideals_str := [' + ','.join([st for st in F_hmf["ideals"]]) + '];\n' # outstr += 'ideals := [ideal<ZF | {F!x : x in I}> : I in ideals_str];\n\n' outstr += 'NN := ideal<ZF | {' + f["level_ideal"][1:-1] + '}>;\n\n' outstr += 'primesArray := [\n' + ','.join( [st for st in F_hmf["primes"]]).replace('],[', '],\n[') + '];\n' outstr += 'primes := [ideal<ZF | {F!x : x in I}> : I in primesArray];\n\n' if f["hecke_polynomial"] != 'x': outstr += 'heckePol := ' + f["hecke_polynomial"] + ';\n' outstr += 'K<e> := NumberField(heckePol);\n' else: outstr += 'heckePol := x;\nK := Rationals(); e := 1;\n' outstr += '\nheckeEigenvaluesArray := [' + ', '.join( [st for st in f["hecke_eigenvalues"]]) + '];' outstr += '\nheckeEigenvalues := AssociativeArray();\n' outstr += 'for i := 1 to #heckeEigenvaluesArray do\n heckeEigenvalues[primes[i]] := heckeEigenvaluesArray[i];\nend for;\n\n' outstr += 'ALEigenvalues := AssociativeArray();\n' for s in f["AL_eigenvalues"]: outstr += 'ALEigenvalues[ideal<ZF | {' + s[0][1:-1] + '}>] := ' + s[ 1] + ';\n' outstr += '\n// EXAMPLE:\n// pp := Factorization(2*ZF)[1][1];\n// heckeEigenvalues[pp];\n\n' outstr += '/* EXTRA CODE: recompute eigenform (warning, may take a few minutes or longer!):\n' outstr += 'M := HilbertCuspForms(F, NN);\n' outstr += 'S := NewSubspace(M);\n' outstr += '// SetVerbose("ModFrmHil", 1);\n' outstr += 'newspaces := NewformDecomposition(S);\n' outstr += 'newforms := [Eigenform(U) : U in newspaces];\n' outstr += 'ppind := 0;\n' outstr += 'while #newforms gt 1 do\n' outstr += ' pp := primes[ppind];\n' outstr += ' newforms := [f : f in newforms | HeckeEigenvalue(f,pp) eq heckeEigenvalues[pp]];\n' outstr += 'end while;\n' outstr += 'f := newforms[1];\n' outstr += '// [HeckeEigenvalue(f,pp) : pp in primes] eq heckeEigenvaluesArray;\n' outstr += '*/\n' return outstr
def download_hmf_magma(**args): C = getDBConnection() data = None label = str(args['label']) f = C.hmfs.forms.find_one({'label': label}) if f is None: return "No such form" F = WebNumberField(f['field_label']) F_hmf = C.hmfs.fields.find_one({'label': f['field_label']}) outstr = 'P<x> := PolynomialRing(Rationals());\n' outstr += 'g := P!' + str(F.coeffs()) + ';\n' outstr += 'F<w> := NumberField(g);\n' outstr += 'ZF := Integers(F);\n\n' # outstr += 'ideals_str := [' + ','.join([st for st in F_hmf["ideals"]]) + '];\n' # outstr += 'ideals := [ideal<ZF | {F!x : x in I}> : I in ideals_str];\n\n' outstr += 'NN := ideal<ZF | {' + f["level_ideal"][1:-1] + '}>;\n\n' outstr += 'primesArray := [\n' + ','.join([st for st in F_hmf["primes"]]).replace('],[', '],\n[') + '];\n' outstr += 'primes := [ideal<ZF | {F!x : x in I}> : I in primesArray];\n\n' if f["hecke_polynomial"] != 'x': outstr += 'heckePol := ' + f["hecke_polynomial"] + ';\n' outstr += 'K<e> := NumberField(heckePol);\n' else: outstr += 'heckePol := x;\nK := Rationals(); e := 1;\n' outstr += '\nheckeEigenvaluesArray := [' + ', '.join([st for st in f["hecke_eigenvalues"]]) + '];' outstr += '\nheckeEigenvalues := AssociativeArray();\n' outstr += 'for i := 1 to #heckeEigenvaluesArray do\n heckeEigenvalues[primes[i]] := heckeEigenvaluesArray[i];\nend for;\n\n' outstr += 'ALEigenvalues := AssociativeArray();\n' for s in f["AL_eigenvalues"]: outstr += 'ALEigenvalues[ideal<ZF | {' + s[0][1:-1] + '}>] := ' + s[1] + ';\n' outstr += '\n// EXAMPLE:\n// pp := Factorization(2*ZF)[1][1];\n// heckeEigenvalues[pp];\n\n' outstr += '/* EXTRA CODE: recompute eigenform (warning, may take a few minutes or longer!):\n' outstr += 'M := HilbertCuspForms(F, NN);\n' outstr += 'S := NewSubspace(M);\n' outstr += '// SetVerbose("ModFrmHil", 1);\n' outstr += 'newspaces := NewformDecomposition(S);\n' outstr += 'newforms := [Eigenform(U) : U in newspaces];\n' outstr += 'ppind := 0;\n' outstr += 'while #newforms gt 1 do\n' outstr += ' pp := primes[ppind];\n' outstr += ' newforms := [f : f in newforms | HeckeEigenvalue(f,pp) eq heckeEigenvalues[pp]];\n' outstr += 'end while;\n' outstr += 'f := newforms[1];\n' outstr += '// [HeckeEigenvalue(f,pp) : pp in primes] eq heckeEigenvaluesArray;\n' outstr += '*/\n' return outstr
def download_hmf_sage(**args): C = getDBConnection() data = None label = str(args['label']) f = C.hmfs.forms.find_one({'label': label}) if f is None: return "No such form" F = WebNumberField(f['field_label']) F_hmf = C.hmfs.fields.find_one({'label': f['field_label']}) outstr = 'P.<x> = PolynomialRing(QQ)\n' outstr += 'g = P(' + str(F.coeffs()) + ')\n' outstr += 'F.<w> = NumberField(g)\n' outstr += 'ZF = F.ring_of_integers()\n\n' outstr += 'NN = ZF.ideal(' + f["level_ideal"] + ')\n\n' outstr += 'primes_array = [\n' + ','.join( [st for st in F_hmf["primes"]]).replace('],[', '],\\\n[') + ']\n' outstr += 'primes = [ZF.ideal(I) for I in primes_array]\n\n' if f["hecke_polynomial"] != 'x': outstr += 'hecke_pol = ' + f["hecke_polynomial"] + '\n' outstr += 'K.<e> = NumberField(heckePol)\n' else: outstr += 'heckePol = x\nK = QQ\ne = 1\n' outstr += '\nhecke_eigenvalues_array = [' + ', '.join( [st for st in f["hecke_eigenvalues"]]) + ']' outstr += '\nhecke_eigenvalues = {}\n' outstr += 'for i in range(len(hecke_eigenvalues_array)):\n hecke_eigenvalues[primes[i]] = hecke_eigenvalues_array[i]\n\n' outstr += 'AL_eigenvalues = {}\n' for s in f["AL_eigenvalues"]: outstr += 'ALEigenvalues[ZF.ideal(s[0])] = s[1]\n' outstr += '\n# EXAMPLE:\n# pp = ZF.ideal(2).factor()[0][0]\n# hecke_eigenvalues[pp]\n' return outstr
def download_hmf_sage(**args): C = getDBConnection() data = None label = str(args['label']) f = C.hmfs.forms.find_one({'label': label}) if f is None: return "No such form" F = WebNumberField(f['field_label']) F_hmf = C.hmfs.fields.find_one({'label': f['field_label']}) outstr = 'P.<x> = PolynomialRing(QQ)\n' outstr += 'g = P(' + str(F.coeffs()) + ')\n' outstr += 'F.<w> = NumberField(g)\n' outstr += 'ZF = F.ring_of_integers()\n\n' outstr += 'NN = ZF.ideal(' + f["level_ideal"] + ')\n\n' outstr += 'primes_array = [\n' + ','.join([st for st in F_hmf["primes"]]).replace('],[', '],\\\n[') + ']\n' outstr += 'primes = [ZF.ideal(I) for I in primes_array]\n\n' if f["hecke_polynomial"] != 'x': outstr += 'hecke_pol = ' + f["hecke_polynomial"] + '\n' outstr += 'K.<e> = NumberField(heckePol)\n' else: outstr += 'heckePol = x\nK = QQ\ne = 1\n' outstr += '\nhecke_eigenvalues_array = [' + ', '.join([st for st in f["hecke_eigenvalues"]]) + ']' outstr += '\nhecke_eigenvalues = {}\n' outstr += 'for i in range(len(hecke_eigenvalues_array)):\n hecke_eigenvalues[primes[i]] = hecke_eigenvalues_array[i]\n\n' outstr += 'AL_eigenvalues = {}\n' for s in f["AL_eigenvalues"]: outstr += 'ALEigenvalues[ZF.ideal(s[0])] = s[1]\n' outstr += '\n# EXAMPLE:\n# pp = ZF.ideal(2).factor()[0][0]\n# hecke_eigenvalues[pp]\n' return outstr
def render_hmf_webpage(**args): C = getDBConnection() data = None if 'label' in args: label = str(args['label']) data = C.hmfs.forms.find_one({'label': label}) if data is None: return "No such field" info = {} try: info['count'] = args['count'] except KeyError: info['count'] = 10 try: numeigs = request.args['numeigs'] numeigs = int(numeigs) except: numeigs = 20 hmf_field = C.hmfs.fields.find_one({'label': data['field_label']}) nf = WebNumberField(data['field_label']) info['base_galois_group'] = nf.galois_string() info['field_degree'] = nf.degree() info['field_disc'] = str(nf.disc()) info['field_poly'] = teXify_pol(str(nf.poly())) info.update(data) downloadslabel = '/ModularForm/GL2/' + info[ 'field_label'] + '/holomorphic/' + info['label'] info['downloads'] = [ ('Download to Magma', downloadslabel + '/download/magma'), ('Download to Sage', downloadslabel + '/download/sage') ] info['friends'] = [] info['friends'] = [ ('L-function', '/L/ModularForm/GL2/' + data['field_label'] + '/holomorphic/' + info['label'] + '/0/0') ] # info['learnmore'] = [('Number Field labels', # url_for("render_labels_page")), ('Galois group # labels',url_for("render_groups_page")), ('Discriminant # ranges',url_for("render_discriminants_page"))] bread = [('Hilbert Modular Forms', url_for("hilbert_modular_form_render_webpage")), ('%s' % data['label'], ' ')] t = "Hilbert Cusp Form %s" % info['label'] credit = 'Lassina Dembele, Steve Donnelly and <A HREF="http://www.cems.uvm.edu/~voight/">John Voight</A>' forms_space = C.hmfs.forms.find({ 'field_label': data['field_label'], 'level_ideal': data['level_ideal'] }) dim_space = 0 for v in forms_space: dim_space += v['dimension'] info['newspace_dimension'] = dim_space w = polygen(QQ, 'w') e = polygen(QQ, 'e') eigs = data['hecke_eigenvalues'] eigs = eigs[:min(len(eigs), numeigs)] primes = hmf_field['primes'] n = min(len(eigs), len(primes)) info['eigs'] = [{ 'eigenvalue': teXify_pol(eigs[i]), 'prime_ideal': teXify_pol(primes[i]), 'prime_norm': primes[i][1:primes[i].index(',')] } for i in range(n)] try: display_eigs = request.args['display_eigs'] if display_eigs in ['True', 'true', '1', 'yes']: display_eigs = True else: display_eigs = False except KeyError: display_eigs = False if 'numeigs' in request.args: display_eigs = True info['hecke_polynomial'] = teXify_pol(info['hecke_polynomial']) if 'AL_eigenvalues_fixed' in data: if data['AL_eigenvalues_fixed'] == 'done': info['AL_eigs'] = [{ 'eigenvalue': teXify_pol(al[1]), 'prime_ideal': teXify_pol(al[0]), 'prime_norm': al[0][1:al[0].index(',')] } for al in data['AL_eigenvalues']] else: info['AL_eigs'] = [{'eigenvalue': '?', 'prime_ideal': '?'}] else: info['AL_eigs'] = [{'eigenvalue': '?', 'prime_ideal': '?'}] info['AL_eigs_count'] = len(info['AL_eigs']) != 0 if not display_eigs: for eig in info['eigs']: if len(eig['eigenvalue']) > 300: eig['eigenvalue'] = '...' for eig in info['AL_eigs']: if len(eig['eigenvalue']) > 300: eig['eigenvalue'] = '...' info['level_ideal'] = teXify_pol(info['level_ideal']) if 'is_CM' in data: is_CM = data['is_CM'] else: is_CM = '?' info['is_CM'] = is_CM if 'is_base_change' in data: is_base_change = data['is_base_change'] else: is_base_change = '?' info['is_base_change'] = is_base_change if 'q_expansions' in data: info['q_expansions'] = data['q_expansions'] properties2 = [('Field', '%s' % data['field_label']), ('Weight', '%s' % data['weight']), ('Level Norm', '%s' % data['level_norm']), ('Level', '$' + teXify_pol(data['level_ideal']) + '$'), ('Label', '%s' % data['label_suffix']), ('Dimension', '%s' % data['dimension']), ('CM?', is_CM), ('Base Change?', is_base_change)] return render_template("hilbert_modular_form/hilbert_modular_form.html", downloads=info["downloads"], info=info, properties2=properties2, credit=credit, title=t, bread=bread, friends=info['friends'])
def render_hmf_webpage(**args): C = getDBConnection() data = None if 'label' in args: label = str(args['label']) data = C.hmfs.forms.find_one({'label': label}) if data is None: return "No such field" info = {} try: info['count'] = args['count'] except KeyError: info['count'] = 10 try: numeigs = request.args['numeigs'] numeigs = int(numeigs) except: numeigs = 20 hmf_field = C.hmfs.fields.find_one({'label': data['field_label']}) nf = WebNumberField(data['field_label']) info['base_galois_group'] = nf.galois_string() info['field_degree'] = nf.degree() info['field_disc'] = str(nf.disc()) info['field_poly'] = teXify_pol(str(nf.poly())) info.update(data) downloadslabel = '/ModularForm/GL2/' + info['field_label'] + '/holomorphic/' + info['label'] info['downloads'] = [('Download to Magma', downloadslabel + '/download/magma'), ( 'Download to Sage', downloadslabel + '/download/sage')] info['friends'] = [] info['friends'] = [('L-function', '/L/ModularForm/GL2/' + data['field_label'] + '/holomorphic/' + info['label'] + '/0/0')] # info['learnmore'] = [('Number Field labels', # url_for("render_labels_page")), ('Galois group # labels',url_for("render_groups_page")), ('Discriminant # ranges',url_for("render_discriminants_page"))] bread = [('Hilbert Modular Forms', url_for("hilbert_modular_form_render_webpage")), ('%s' % data[ 'label'], ' ')] t = "Hilbert Cusp Form %s" % info['label'] credit = 'Lassina Dembele, Steve Donnelly and <A HREF="http://www.cems.uvm.edu/~voight/">John Voight</A>' forms_space = C.hmfs.forms.find( {'field_label': data['field_label'], 'level_ideal': data['level_ideal']}) dim_space = 0 for v in forms_space: dim_space += v['dimension'] info['newspace_dimension'] = dim_space w = polygen(QQ, 'w') e = polygen(QQ, 'e') eigs = data['hecke_eigenvalues'] eigs = eigs[:min(len(eigs), numeigs)] primes = hmf_field['primes'] n = min(len(eigs), len(primes)) info['eigs'] = [{'eigenvalue': teXify_pol(eigs[i]), 'prime_ideal': teXify_pol(primes[i]), 'prime_norm': primes[i][1:primes[i].index(',')]} for i in range(n)] try: display_eigs = request.args['display_eigs'] if display_eigs in ['True', 'true', '1', 'yes']: display_eigs = True else: display_eigs = False except KeyError: display_eigs = False if 'numeigs' in request.args: display_eigs = True info['hecke_polynomial'] = teXify_pol(info['hecke_polynomial']) if 'AL_eigenvalues_fixed' in data: if data['AL_eigenvalues_fixed'] == 'done': info['AL_eigs'] = [{'eigenvalue': teXify_pol(al[1]), 'prime_ideal': teXify_pol(al[0]), 'prime_norm': al[0][1:al[0].index(',')]} for al in data['AL_eigenvalues']] else: info['AL_eigs'] = [{'eigenvalue': '?', 'prime_ideal': '?'}] else: info['AL_eigs'] = [{'eigenvalue': '?', 'prime_ideal': '?'}] info['AL_eigs_count'] = len(info['AL_eigs']) != 0 if not display_eigs: for eig in info['eigs']: if len(eig['eigenvalue']) > 300: eig['eigenvalue'] = '...' for eig in info['AL_eigs']: if len(eig['eigenvalue']) > 300: eig['eigenvalue'] = '...' info['level_ideal'] = teXify_pol(info['level_ideal']) if 'is_CM' in data: is_CM = data['is_CM'] else: is_CM = '?' info['is_CM'] = is_CM if 'is_base_change' in data: is_base_change = data['is_base_change'] else: is_base_change = '?' info['is_base_change'] = is_base_change if 'q_expansions' in data: info['q_expansions'] = data['q_expansions'] properties2 = [('Field', '%s' % data['field_label']), ('Weight', '%s' % data['weight']), ('Level Norm', '%s' % data['level_norm']), ('Level', '$' + teXify_pol(data['level_ideal']) + '$'), ('Label', '%s' % data['label_suffix']), ('Dimension', '%s' % data['dimension']), ('CM?', is_CM), ('Base Change?', is_base_change) ] return render_template("hilbert_modular_form/hilbert_modular_form.html", downloads=info["downloads"], info=info, properties2=properties2, credit=credit, title=t, bread=bread, friends=info['friends'])