def get_coefficients(info): r""" Return a file with the Fourier coefficients in desired format. """ emf_logger.debug("IN GET_COEFFICIENTS!!!") level = my_get(info, "level", -1, int) weight = my_get(info, "weight", -1, int) character = my_get(info, "character", "", int) # int(info.get('weight',0)) number = my_get(info, "number", 100, int) label = my_get(info, "label", "", str) emf_logger.debug("info={0}".format(info)) if character == "": character = 1 label = info.get("label", "") if info["format"] == "sage": ending = "sage" f = WebNewForm(level, weight, character, label, prec=number) s = f.download_to_sage(number) elif info["format"] == "sobj": ending = "sobj" f = WebNewForm(level, weight, character, label, prec=number) s = f.dump_coefficients(number) else: # we only want one form or one embedding try: s = print_list_of_coefficients(info) except IndexError as e: info["error"] = str(e) flask.flash(str(e)) return redirect( url_for( "emf.render_elliptic_modular_forms", level=level, weight=weight, character=character, label=label ), code=301, ) ending = "txt" if info["format"] == "q_expansion": fmt = "-qexp" elif info["format"] == "coefficients" or info["format"] == "sobj": fmt = "-coef" elif info["format"] == "embeddings": fmt = "-emb" else: fmt = "" info["filename"] = "{0}-{1}-{2}-{3}-coefficients-0-to-{4}{5}.{6}".format( level, weight, character, label, number, fmt, ending ) # return send_file(info['tempfile'], as_attachment=True, attachment_filename=info['filename'], add_etags=False) strIO = StringIO.StringIO() strIO.write(s) strIO.seek(0) return send_file(strIO, attachment_filename=info["filename"], as_attachment=True, add_etags=False)
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)) fmt = info.get("format", "q_expansion") if character == '': character = '1' label = info.get('label', '') if character.isalnum(): character = int(character) else: return "The character '{0}' is not well-defined!".format(character) print "--------------" if label == '' or level == -1 or weight == -1: return "Need to specify a modular form completely!!" number = int(info['number']) + 1 if 'number' in info else 20 emf_logger.debug("number = {}".format(number)) F = WebNewForm(level=level, weight=weight, character=character, label=label, prec=number) if not F.has_updated(): return "" if not 'number' in info: F.prec = number = max(F.parent.sturm_bound + 1, 20) F.update_from_db() shead = "Cusp forms of weight " + str(weight) + "on \(" + latex( F.parent.group) + "\)" s = "" if ((character is not None) and (character > 0)): shead = shead + " and character \( \chi_{" + str(character) + "}\)" # s="<table><tr><td>" coefs = "" if fmt == "sage": res = [] if number > F.max_available_prec(): raise IndexError, "The database does not contain this many ({0}) coefficients for this modular form! We only have {1}".format( number, F.max_available_prec()) if fmt == "sage": qe = F.coefficients(range(number)) res.append(qe) else: coefs += print_coefficients_for_one_form(F, number, info['format'], bitprec=bitprec) if not fmt == "sage": return s + "\n" + coefs else: if len(res) == 1: res = res[0] #print "res=",res return dumps(res)
def from_db(self, l): emf_logger.debug("Get Hecke orbits for labels : {0}!".format(l)) self._only_rational = True from lmfdb.modular_forms.elliptic_modular_forms.backend.web_newforms import WebNewForm res = {} for lbl in l: F = WebNewForm(self.level, self.weight, self.character, lbl, prec = self.prec, parent=self.parent) if not F.is_rational: self._only_rational = False emf_logger.debug("Got F for label {0} : {1}".format(lbl,F)) res[lbl]=F emf_logger.debug("Got Hecke orbits!") return res
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) bitprec = my_get(info, "bitprec", 12, int) # number of digits character = my_get(info, "character", "", str) # int(info.get('weight',0)) fmt = info.get("format", "q_expansion") if character == "": character = "1" label = info.get("label", "") if character.isalnum(): character = int(character) else: return "The character '{0}' is not well-defined!".format(character) print "--------------" if label == "" or level == -1 or weight == -1: return "Need to specify a modular form completely!!" number = int(info["number"]) + 1 if "number" in info else 20 emf_logger.debug("number = {}".format(number)) F = WebNewForm(level=level, weight=weight, character=character, label=label, prec=number) if not F.has_updated(): return "" if not "number" in info: F.prec = number = max(F.parent.sturm_bound + 1, 20) F.update_from_db() shead = "Cusp forms of weight " + str(weight) + "on \(" + latex(F.parent.group) + "\)" s = "" if (character is not None) and (character > 0): shead = shead + " and character \( \chi_{" + str(character) + "}\)" # s="<table><tr><td>" coefs = "" if fmt == "sage": res = [] if number > F.max_available_prec(): raise IndexError, "The database does not contain this many ({0}) coefficients for this modular form! We only have {1}".format( number, F.max_available_prec() ) if fmt == "sage": qe = F.coefficients(range(number)) res.append(qe) else: coefs += print_coefficients_for_one_form(F, number, info["format"], bitprec=bitprec) if not fmt == "sage": return s + "\n" + coefs else: if len(res) == 1: res = res[0] # print "res=",res return dumps(res)
def get_coefficients(info): r""" Return a file with the Fourier coefficients in desired format. """ emf_logger.debug("IN GET_COEFFICIENTS!!!") level = my_get(info, 'level', -1, int) weight = my_get(info, 'weight', -1, int) character = my_get(info, 'character', '', int) # int(info.get('weight',0)) number = my_get(info, 'number', 100, int) label = my_get(info, 'label', '', str) emf_logger.debug("info={0}".format(info)) if character == '': character = 1 label = info.get('label', '') if info['format'] == "sage": ending = "sage" f = WebNewForm(level, weight, character, label, prec=number) s = f.download_to_sage(number) elif info['format'] == "sobj": ending = "sobj" f = WebNewForm(level, weight, character, label, prec=number) s = f.dump_coefficients(number) else: # we only want one form or one embedding try: s = print_list_of_coefficients(info) except IndexError as e: info['error'] = str(e) flask.flash(str(e)) return redirect(url_for("emf.render_elliptic_modular_forms", level=level, weight=weight, character=character, label=label), code=301) ending = "txt" if info['format'] == 'q_expansion': fmt = '-qexp' elif info['format'] == "coefficients" or info['format'] == "sobj": fmt = '-coef' elif info['format'] == "embeddings": fmt = '-emb' else: fmt = '' info['filename'] = "{0}-{1}-{2}-{3}-coefficients-0-to-{4}{5}.{6}".format( level, weight, character, label, number, fmt, ending) # return send_file(info['tempfile'], as_attachment=True, attachment_filename=info['filename'], add_etags=False) strIO = StringIO.StringIO() strIO.write(s) strIO.seek(0) return send_file(strIO, attachment_filename=info["filename"], as_attachment=True, add_etags=False)
def from_db(self, l): emf_logger.critical("Get Hecke orbits for labels : {0}!".format(l)) from lmfdb.modular_forms.elliptic_modular_forms.backend.web_newforms import WebNewForm_cached, WebNewForm res = {} for lbl in l: F = WebNewForm(self.level, self.weight, self.character, lbl, parent=self.parent) #F = WebNewForm_cached(self.level, self.weight, self.character, lbl, parent=self.parent) emf_logger.debug("Got F for label {0} : {1}".format(lbl, F)) res[lbl] = F # return {lbl : WebNewForm_cached(self.level, self.weight, self.character, lbl, parent=self.parent) # for lbl in l} emf_logger.critical("Got Hecke orbits!") return res
def download_web_modform(info): r""" Return a dump of a WebNewForm object. """ emf_logger.debug("IN GET_WEB_MODFORM!!! info={0}".format(info)) level = my_get(info, 'level', -1, int) weight = my_get(info, 'weight', -1, int) character = my_get(info, 'character', 0, int) # int(info.get('weight',0)) emf_logger.debug("info={0}".format(info)) if character == '': character = 0 label = info.get('label', '') # we only want one form or one embedding if label != '': if format == 'sage': if character != 0: D = DirichletGroup(level) x = D[character] X = Newforms(x, weight, names='a') else: X = Newforms(level, weight, names='a') else: # format=='web_new': X = WebNewForm(level=level, weight=weight, character=character, label=label) s = dumps(X) name = "{0}-{1}-{2}-{3}-web_newform.sobj".format(weight, level, character, label) emf_logger.debug("name={0}".format(name)) info['filename'] = name strIO = StringIO.StringIO() strIO.write(s) strIO.seek(0) try: return send_file(strIO, attachment_filename=info["filename"], as_attachment=True) except IOError: info['error'] = "Could not send file!"
def from_db(self, l): emf_logger.debug("Get Hecke orbits for labels : {0}!".format(l)) self._only_rational = True from lmfdb.modular_forms.elliptic_modular_forms.backend.web_newforms import WebNewForm_cached, WebNewForm res = {} for lbl in l: F = WebNewForm(self.level, self.weight, self.character, lbl, parent=self.parent) if F.coefficient_field.absolute_degree() > 1: self._only_rational = False #F = WebNewForm_cached(self.level, self.weight, self.character, lbl, parent=self.parent) emf_logger.debug("Got F for label {0} : {1}".format(lbl, F)) res[lbl] = F # return {lbl : WebNewForm_cached(self.level, self.weight, self.character, lbl, parent=self.parent) # for lbl in l} emf_logger.debug("Got Hecke orbits!") return res