Пример #1
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))
    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
Пример #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
    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