Beispiel #1
0
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)
Beispiel #2
0
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
Beispiel #4
0
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)
Beispiel #5
0
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)
Beispiel #6
0
    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