def print_list_of_coefficients(info): r""" Print a table of Fourier coefficients in the requested format """ level = my_get(info, 'level', -1, int) weight = my_get(info, 'weight', -1, int) prec = my_get(info, 'prec', 12, int) # number of digits bitprec = my_get(info, 'bitprec', 12, int) # number of digits character = my_get(info, 'character', '', str) # int(info.get('weight',0)) if character == '': character = 0 label = info.get('label', '') print "--------------" if label == '' or level == -1 or weight == -1: return "Need to specify a modular form completely!!" WMFS = WebModFormSpace(N=level, k=weight, chi=character) if not WMFS: return "" if ('number' in info): number = int(info['number']) else: number = max(WMFS.sturm_bound() + 1, 20) FS = list() if (label is not None): FS.append(WMFS.f(label)) else: for a in WMFS.labels(): FS.append(WMFS.f(a)) shead = "Cusp forms of weight " + str(weight) + "on \(" + latex( WMFS.group()) + "\)" s = "" if ((character is not None) and (character > 0)): s = s + " and character \( \chi_{" + str(character) + "}\)" # s="<table><tr><td>" coefs = "" for F in FS: if len(FS) > 1: if info['format'] == 'html': coefs += F.label() else: coefs += F.label() coefs += print_coefficients_for_one_form(F, number, info['format'], bitprec=bitprec) ss = coefs return ss
def print_list_of_coefficients(info): r""" Print a table of Fourier coefficients in the requested format """ level = my_get(info, 'level', -1, int) weight = my_get(info, 'weight', -1, int) prec = my_get(info, 'prec', 12, int) # number of digits character = my_get(info, 'character', '', str) # int(info.get('weight',0)) if character == '': character = 0 label = info.get('label', '') print "--------------" if label == '' or level == -1 or weight == -1: return "Need to specify a modular form completely!!" WMFS = WebModFormSpace(N = level, k = weight, chi = character) if not WMFS: return "" if('number' in info): number = int(info['number']) else: number = max(WMFS.sturm_bound() + 1, 20) if('prec' in info): bprec = int(ceil(prec * 3.4)) else: bprec = 53 FS = list() if(label is not None): FS.append(WMFS.f(label)) else: for a in WMFS.labels(): FS.append(WMFS.f(a)) shead = "Cusp forms of weight " + str(weight) + "on \(" + latex(WMFS.group()) + "\)" s = "" if((character is not None) and (character > 0)): s = s + " and character \( \chi_{" + str(character) + "}\)" # s="<table><tr><td>" coefs = "" for F in FS: if len(FS) > 1: if info['format'] == 'html': coefs += F.label() else: coefs += F.label() coefs += print_coefficients_for_one_form(F, number, info['format']) ss = coefs return ss
def set_info_for_modular_form_space(level=None, weight=None, character=None, label=None, **kwds): r""" Set information about a space of modular forms. """ info = dict() info['level'] = level info['weight'] = weight info['character'] = character emf_logger.debug("info={0}".format(info)) if (level > N_max_db or weight > k_max_db): info['error'] = "Currently not available" WMFS = None if level <= 0: info['error'] = "Got wrong level: %s " % level return info try: if use_db: WMFS = WebModFormSpace(weight, level, character, use_db=True) else: WMFS = WebModFormSpace(weight, level, character) if 'download' in info and 'tempfile' in info: WNF._save_to_file(info['tempfile']) info['filename'] = str(weight) + '-' + str(level) + '-' + str( character) + '-' + label + '.sobj' return info except RuntimeError: info['error'] = "Sage error: Could not construct the desired space!" if WMFS.level() == 1: info['group'] = "\( \mathrm{SL}_{2}(\mathbb{Z})\)" else: info['group'] = "\( \Gamma_{{0}}( {0} ) \)".format(WMFS.level()) if character == 0: info['name_new'] = "\(S_{ %s }^{new}(%s) \)" % (WMFS.weight(), WMFS.level()) info['name_old'] = "\(S_{ %s }^{old}(%s) \)" % (WMFS.weight(), WMFS.level()) else: conrey_char = WMFS.conrey_character() conrey_char_name = WMFS.conrey_character_name() info['conrey_character_name'] = '\( ' + conrey_char_name + '\)' info['character_url'] = url_character(type='Dirichlet', modulus=WMFS.level(), number=conrey_char.number()) info['name_new'] = "\(S_{ %s }^{new}(%s,%s) \)" % ( WMFS.weight(), WMFS.level(), conrey_char_name) info['name_old'] = "\(S_{ %s }^{old}(%s,%s) \)" % ( WMFS.weight(), WMFS.level(), conrey_char_name) info['dimension_cusp_forms'] = WMFS.dimension_cusp_forms() info['dimension_mod_forms'] = WMFS.dimension_modular_forms() info['dimension_new_cusp_forms'] = WMFS.dimension_new_cusp_forms() info['dimension_newspace'] = WMFS.dimension_newspace() info['dimension_oldspace'] = WMFS.dimension_oldspace() info['dimension'] = WMFS.dimension() info['galois_orbits'] = WMFS.get_all_galois_orbit_info() lifts = list() if WMFS.dimension() == 0: # we don't need to work with an empty space info['sturm_bound'] = 0 info['new_decomposition'] = '' info['is_empty'] = 1 lifts.append(('Half-Integral Weight Forms', '/ModularForm/Mp2/Q')) lifts.append(('Siegel Modular Forms', '/ModularForm/GSp4/Q')) info['lifts'] = lifts return info info['sturm_bound'] = WMFS.sturm_bound() info['new_decomposition'] = WMFS.print_galois_orbits() emf_logger.debug("new_decomp={0}".format(info['new_decomposition'])) info['nontrivial_new'] = len(info['new_decomposition']) ## we try to catch well-known bugs... info['old_decomposition'] = "n/a" if level < N_max_comp: try: O = WMFS.print_oldspace_decomposition() info['old_decomposition'] = O except: emf_logger.critical("Error in computing oldspace decomposition") O = [] info['old_decomposition'] = "n/a" (A, B, C) = sys.exc_info() # build an error message... errtype = A.__name__ errmsg = B s = "%s: %s at:" % (errtype, errmsg) next = C.tb_next while (next): ln = next.tb_lineno filen = next.tb_frame.f_code.co_filename s += "\n line no. %s in file %s" % (ln, filen) next = next.tb_next info['error_note'] = "Could not construct oldspace!\n" + s # properties for the sidebar prop = [] if WMFS._cuspidal == 1: prop = [('Dimension newforms', [info['dimension_newspace']])] prop.append(('Dimension oldforms', [info['dimension_oldspace']])) else: prop = [('Dimension modular forms', [info['dimension_mod_forms']])] prop.append(('Dimension cusp forms', [info['dimension_cusp_forms']])) prop.append(('Sturm bound', [WMFS.sturm_bound()])) info['properties2'] = prop ## Make parent spaces of S_k(N,chi) for the sidebar par_lbl = '\( S_{*} (\Gamma_0(' + str(level) + '),\cdot )\)' par_url = '?level=' + str(level) parents = [[par_lbl, par_url]] par_lbl = '\( S_{k} (\Gamma_0(' + str(level) + '),\cdot )\)' par_url = '?level=' + str(level) + '&weight=' + str(weight) parents.append((par_lbl, par_url)) info['parents'] = parents if 'character' in info: info['character_order'] = WMFS.character_order() info['character_conductor'] = WMFS.character_conductor() friends = list() lifts = list() if (('label' not in info) and info['old_decomposition'] != 'n/a'): O = WMFS.oldspace_decomposition() try: for (old_level, chi, mult, d) in O: if chi != 0: s = "\(S_{%s}(\Gamma_0(%s),\chi_{%s}) \) " % ( weight, old_level, chi) friends.append((s, '?weight=' + str(weight) + '&level=' + str(old_level) + '&character=' + str(chi))) else: s = "\(S_{%s}(\Gamma_0(%s)) \) " % (weight, old_level) friends.append((s, '?weight=' + str(weight) + '&level=' + str(old_level) + '&character=' + str(0))) except: pass info['friends'] = friends lifts.append(('Half-Integral Weight Forms', '/ModularForm/Mp2/Q')) lifts.append(('Siegel Modular Forms', '/ModularForm/GSp4/Q')) info['lifts'] = lifts return info
def set_info_for_modular_form_space(level=None, weight=None, character=None, label=None, **kwds): r""" Set information about a space of modular forms. """ info = dict() info["level"] = level info["weight"] = weight info["character"] = character emf_logger.debug("info={0}".format(info)) # DB = connect_to_modularforms_db() # if level <> None and weight <> None and character <> None: # s = {'N':int(level),'k':int(weight),'chi':int(character)} # if DB.Newform_factors.files.find(s).count()==0: # # if(level > N_max_db or weight > k_max_db): # info['error'] = "Currently not available" # WMFS = None if level <= 0: info["error"] = "Got wrong level: %s " % level return info try: WMFS = WebModFormSpace(N=level, k=weight, chi=character) if "download" in info and "tempfile" in info: WNF._save_to_file(info["tempfile"]) info["filename"] = str(weight) + "-" + str(level) + "-" + str(character) + "-" + label + ".sobj" return info except Exception as e: if isinstance(e, IndexError): info["error"] = e.message WMFS = None if WMFS == None: info["error"] = "We are sorry. The sought space can not be found in the database." return info if WMFS.level() == 1: info["group"] = "\( \mathrm{SL}_{2}(\mathbb{Z})\)" else: info["group"] = "\( \Gamma_{{0}}( {0} ) \)".format(WMFS.level()) if character == 0: info["name_new"] = "\(S_{ %s }^{new}(%s) \)" % (WMFS.weight(), WMFS.level()) info["name_old"] = "\(S_{ %s }^{old}(%s) \)" % (WMFS.weight(), WMFS.level()) else: conrey_char = WMFS.conrey_character() conrey_char_name = WMFS.conrey_character_name() info["conrey_character_name"] = "\( " + conrey_char_name + "\)" info["character_url"] = url_for( "characters.render_Dirichletwebpage", modulus=WMFS.level(), number=conrey_char.number() ) info["name_new"] = "\(S_{ %s }^{new}(%s,%s) \)" % (WMFS.weight(), WMFS.level(), conrey_char_name) info["name_old"] = "\(S_{ %s }^{old}(%s,%s) \)" % (WMFS.weight(), WMFS.level(), conrey_char_name) info["dimension_cusp_forms"] = WMFS.dimension_cusp_forms() info["dimension_mod_forms"] = WMFS.dimension_modular_forms() info["dimension_new_cusp_forms"] = WMFS.dimension_new_cusp_forms() info["dimension_newspace"] = WMFS.dimension_newspace() info["dimension_oldspace"] = WMFS.dimension_oldspace() info["dimension"] = WMFS.dimension() info["galois_orbits"] = WMFS.get_all_galois_orbit_info() lifts = list() if WMFS.dimension() == 0: # we don't need to work with an empty space info["sturm_bound"] = 0 info["new_decomposition"] = "" info["is_empty"] = 1 lifts.append(("Half-Integral Weight Forms", "/ModularForm/Mp2/Q")) lifts.append(("Siegel Modular Forms", "/ModularForm/GSp4/Q")) info["lifts"] = lifts return info info["sturm_bound"] = WMFS.sturm_bound() info["new_decomposition"] = WMFS.print_galois_orbits() emf_logger.debug("new_decomp={0}".format(info["new_decomposition"])) info["nontrivial_new"] = len(info["new_decomposition"]) if info["new_decomposition"] == "": if info["dimension_newspace"] > 0: info["nontrivial_new_info"] = " is unfortunately not in the database yet!" else: info["nontrivial_new_info"] = " is empty!" ## we try to catch well-known bugs... info["old_decomposition"] = "n/a" if level < N_max_comp: try: O = WMFS.print_oldspace_decomposition() info["old_decomposition"] = O except: emf_logger.critical("Error in computing oldspace decomposition") O = [] info["old_decomposition"] = "" (A, B, C) = sys.exc_info() # build an error message... errtype = A.__name__ errmsg = B s = "%s: %s at:" % (errtype, errmsg) next = C.tb_next while next: ln = next.tb_lineno filen = next.tb_frame.f_code.co_filename s += "\n line no. %s in file %s" % (ln, filen) next = next.tb_next info["error_note"] = "Could not construct oldspace!\n" + s # properties for the sidebar prop = [] if WMFS._cuspidal == 1: prop = [("Dimension newforms", [info["dimension_newspace"]])] prop.append(("Dimension oldforms", [info["dimension_oldspace"]])) else: prop = [("Dimension modular forms", [info["dimension_mod_forms"]])] prop.append(("Dimension cusp forms", [info["dimension_cusp_forms"]])) prop.append(("Sturm bound", [WMFS.sturm_bound()])) info["properties2"] = prop ## Make parent spaces of S_k(N,chi) for the sidebar par_lbl = "\( S_{*} (\Gamma_0(" + str(level) + "),\cdot )\)" par_url = "?level=" + str(level) parents = [[par_lbl, par_url]] par_lbl = "\( S_{k} (\Gamma_0(" + str(level) + "),\cdot )\)" par_url = "?level=" + str(level) + "&weight=" + str(weight) parents.append((par_lbl, par_url)) info["parents"] = parents if "character" in info: info["character_order"] = WMFS.character_order() info["character_conductor"] = WMFS.character_conductor() friends = list() lifts = list() if ("label" not in info) and info["old_decomposition"] != "n/a": O = WMFS.oldspace_decomposition() try: for (old_level, chi, mult, d) in O: if chi != 0: s = "\(S_{%s}(\Gamma_0(%s),\chi_{%s}) \) " % (weight, old_level, chi) friends.append( (s, "?weight=" + str(weight) + "&level=" + str(old_level) + "&character=" + str(chi)) ) else: s = "\(S_{%s}(\Gamma_0(%s)) \) " % (weight, old_level) friends.append((s, "?weight=" + str(weight) + "&level=" + str(old_level) + "&character=" + str(0))) except: pass info["friends"] = friends lifts.append(("Half-Integral Weight Forms", "/ModularForm/Mp2/Q")) lifts.append(("Siegel Modular Forms", "/ModularForm/GSp4/Q")) info["lifts"] = lifts # emf_logger.debug("Info = {0}".format(info)) return info
def set_info_for_modular_form_space(level=None, weight=None, character=None, label=None, **kwds): r""" Set information about a space of modular forms. """ info = dict() info['level'] = level info['weight'] = weight info['character'] = character emf_logger.debug("info={0}".format(info)) if(level > N_max_db or weight > k_max_db): info['error'] = "Currently not available" WMFS = None if level <= 0: info['error'] = "Got wrong level: %s " % level return info try: if use_db: WMFS = WebModFormSpace(weight, level, character, use_db=True) else: WMFS = WebModFormSpace(weight, level, character) if 'download' in info and 'tempfile' in info: WNF._save_to_file(info['tempfile']) info['filename'] = str(weight) + '-' + str(level) + '-' + str(character) + '-' + label + '.sobj' return info except RuntimeError: info['error'] = "Sage error: Could not construct the desired space!" if WMFS.level() == 1: info['group'] = "\( \mathrm{SL}_{2}(\mathbb{Z})\)" else: info['group'] = "\( \Gamma_{{0}}( {0} ) \)".format(WMFS.level()) if character == 0: info['name_new'] = "\(S_{ %s }^{new}(%s) \)" % (WMFS.weight(), WMFS.level()) info['name_old'] = "\(S_{ %s }^{old}(%s) \)" % (WMFS.weight(), WMFS.level()) else: conrey_char = WMFS.conrey_character() conrey_char_name = WMFS.conrey_character_name() info['conrey_character_name'] = '\( ' + conrey_char_name + '\)' info['character_url'] = url_character(type='Dirichlet', modulus=WMFS.level(), number=conrey_char.number()) info['name_new'] = "\(S_{ %s }^{new}(%s,%s) \)" % (WMFS.weight(), WMFS.level(), conrey_char_name) info['name_old'] = "\(S_{ %s }^{old}(%s,%s) \)" % (WMFS.weight(), WMFS.level(), conrey_char_name) info['dimension_cusp_forms'] = WMFS.dimension_cusp_forms() info['dimension_mod_forms'] = WMFS.dimension_modular_forms() info['dimension_new_cusp_forms'] = WMFS.dimension_new_cusp_forms() info['dimension_newspace'] = WMFS.dimension_newspace() info['dimension_oldspace'] = WMFS.dimension_oldspace() info['dimension'] = WMFS.dimension() info['galois_orbits'] = WMFS.get_all_galois_orbit_info() lifts = list() if WMFS.dimension() == 0: # we don't need to work with an empty space info['sturm_bound'] = 0 info['new_decomposition'] = '' info['is_empty'] = 1 lifts.append(('Half-Integral Weight Forms', '/ModularForm/Mp2/Q')) lifts.append(('Siegel Modular Forms', '/ModularForm/GSp4/Q')) info['lifts'] = lifts return info info['sturm_bound'] = WMFS.sturm_bound() info['new_decomposition'] = WMFS.print_galois_orbits() emf_logger.debug("new_decomp={0}".format(info['new_decomposition'])) info['nontrivial_new'] = len(info['new_decomposition']) ## we try to catch well-known bugs... info['old_decomposition'] = "n/a" if level < N_max_comp: try: O = WMFS.print_oldspace_decomposition() info['old_decomposition'] = O except: emf_logger.critical("Error in computing oldspace decomposition") O = [] info['old_decomposition'] = "n/a" (A, B, C) = sys.exc_info() # build an error message... errtype = A.__name__ errmsg = B s = "%s: %s at:" % (errtype, errmsg) next = C.tb_next while(next): ln = next.tb_lineno filen = next.tb_frame.f_code.co_filename s += "\n line no. %s in file %s" % (ln, filen) next = next.tb_next info['error_note'] = "Could not construct oldspace!\n" + s # properties for the sidebar prop = [] if WMFS._cuspidal == 1: prop = [('Dimension newforms', [info['dimension_newspace']])] prop.append(('Dimension oldforms', [info['dimension_oldspace']])) else: prop = [('Dimension modular forms', [info['dimension_mod_forms']])] prop.append(('Dimension cusp forms', [info['dimension_cusp_forms']])) prop.append(('Sturm bound', [WMFS.sturm_bound()])) info['properties2'] = prop ## Make parent spaces of S_k(N,chi) for the sidebar par_lbl = '\( S_{*} (\Gamma_0(' + str(level) + '),\cdot )\)' par_url = '?level=' + str(level) parents = [[par_lbl, par_url]] par_lbl = '\( S_{k} (\Gamma_0(' + str(level) + '),\cdot )\)' par_url = '?level=' + str(level) + '&weight=' + str(weight) parents.append((par_lbl, par_url)) info['parents'] = parents if 'character' in info: info['character_order'] = WMFS.character_order() info['character_conductor'] = WMFS.character_conductor() friends = list() lifts = list() if(('label' not in info) and info['old_decomposition'] != 'n/a'): O = WMFS.oldspace_decomposition() try: for (old_level, chi, mult, d) in O: if chi != 0: s = "\(S_{%s}(\Gamma_0(%s),\chi_{%s}) \) " % (weight, old_level, chi) friends.append(( s, '?weight=' + str(weight) + '&level=' + str(old_level) + '&character=' + str(chi))) else: s = "\(S_{%s}(\Gamma_0(%s)) \) " % (weight, old_level) friends.append( (s, '?weight=' + str(weight) + '&level=' + str(old_level) + '&character=' + str(0))) except: pass info['friends'] = friends lifts.append(('Half-Integral Weight Forms', '/ModularForm/Mp2/Q')) lifts.append(('Siegel Modular Forms', '/ModularForm/GSp4/Q')) info['lifts'] = lifts return info