示例#1
0
def render_one_maass_waveform(maass_id, **kwds):
    r"""
    Render the webpage of one Maass waveform by calling
    render_one_maass_waveform_wp or generates a download
    in a format that is readable by python.
    """
    info = get_args_mwf(**kwds)
    info['maass_id'] = maass_id
    mwf_logger.debug("in_render_one_maass_form: info={0}".format(info))
    if (info.get('download', '') == 'coefficients'
            or info.get('download', '') == 'all'):
        maass_id = info['maass_id']
        try:
            f = WebMaassForm(maass_id)
        except KeyError:
            flask.abort(404)
        filename = str(f._maass_id) + '.txt'
        if info.get('download', '') == 'coefficients':
            res = f.coeffs
        else:
            res = f.download_text()

        strIO = StringIO.StringIO()
        strIO.write(res)
        strIO.seek(0)
        try:
            return send_file(strIO,
                             attachment_filename=filename,
                             as_attachment=True,
                             add_etags=False)
        except IOError:
            info['error'] = "Could not send file!"

    else:
        return render_one_maass_waveform_wp(info)
示例#2
0
文件: mwf_main.py 项目: koffie/lmfdb
def render_one_maass_waveform(maass_id, **kwds):
    r"""
    Render the webpage of one Maass waveform by calling
    render_one_maass_waveform_wp or generates a download
    in a format that is readable by python.
    """
    info = get_args_mwf(**kwds)
    info['maass_id'] = maass_id
    mwf_logger.debug("in_render_one_maass_form: info={0}".format(info))
    if (info.get('download', '') == 'coefficients'  or
        info.get('download', '') == 'all'):
        maass_id = info['maass_id']
        try:
            f = WebMaassForm(maass_id)
        except KeyError:
            flask.abort(404)
        filename = str(f._maass_id) + '.txt'
        if info.get('download', '') == 'coefficients':
            res = f.coeffs
        else:
            res = f.download_text()

        strIO = StringIO.StringIO()
        strIO.write(res)
        strIO.seek(0)
        try:
            return send_file(strIO,
                             attachment_filename=filename,
                             as_attachment=True,
                             add_etags=False)
        except IOError:
            info['error'] = "Could not send file!"

    else:
        return render_one_maass_waveform_wp(info)
示例#3
0
def render_maass_waveforms(level=0, weight=-1, character=-1, r1=0, r2=0, **kwds):
    info = get_args_mwf(level=level, weight=weight, character=character, r1=r1, r2=r2, **kwds)

    info["credit"] = ""
    info["learnmore"] = []
    mwf_logger.debug("args=%s" % request.args)
    mwf_logger.debug("method=%s" % request.method)
    mwf_logger.debug("req.form=%s" % request.form)
    mwf_logger.debug("info=%s" % info)
    mwf_logger.debug("level,weight,char={0},{1},{2}".format(level, weight, character))
    if info.get('maass_id', None) and info.get('db', None):
        return render_one_maass_waveform_wp(**info)
    if info['search'] or (info['browse'] and int(info['weight']) != 0):
        search = get_search_parameters(info)
        mwf_logger.debug("search=%s" % search)
        return render_search_results_wp(info, search)
    if info['browse']:
        mwf_logger.debug("browse info=%s" % info)
        return render_browse_all_eigenvalues(**info)

    DB = connect_db()
    if not info['collection'] or info['collection'] == 'all':
        # FIXME: metadata returned by get_collections_info is never used, only side effect appears to be logging messages
        # md = get_collections_info()
        get_collections_info()
    info['cur_character'] = character
    if level > 0:
        info['maass_weight'] = DB.weights(int(level))
        info['cur_level'] = level

    if weight > -1:
        info['cur_weight'] = weight
        if level > 0:
            info['maass_character'] = DB.characters(int(level), float(weight))
    if character > - 1:
        info['cur_character'] = character

    if level > 0 or weight > -1 or character > -1:
        search = get_search_parameters(info)
        mwf_logger.debug("info=%s" % info)
        mwf_logger.debug("search=%s" % search)
        return render_search_results_wp(info, search)
    title = 'Maass forms'
    info['list_of_levels'] = DB.levels()
    if info['list_of_levels']:
        info['max_level'] = max(info['list_of_levels'])
    else:
        info['max_level'] = 0
    mwf_logger.debug("info3=%s" % info)
    bread = [('Modular forms', url_for('mf.modular_form_main_page')),
             ('Maass forms', url_for('.render_maass_waveforms'))]
    info['bread'] = bread
    info['title'] = title
    DB.set_table()
    DB.table['ncols'] = 10
    info['DB'] = DB
    info['dbcount'] = DB.count()
    info['limit'] = maxNumberOfResultsToShow
    return render_template("mwf_navigate.html", **info)
示例#4
0
def render_maass_waveforms(level=0, weight=-1, character=-1, r1=0, r2=0, **kwds):
    info = get_args_mwf(level=level, weight=weight, character=character, r1=r1, r2=r2, **kwds)

    info["credit"] = ""
    info["learnmore"] = []
    mwf_logger.debug("args=%s" % request.args)
    mwf_logger.debug("method=%s" % request.method)
    mwf_logger.debug("req.form=%s" % request.form)
    mwf_logger.debug("info=%s" % info)
    mwf_logger.debug("level,weight,char={0},{1},{2}".format(level, weight, character))
    if info.get('maass_id', None) and info.get('db', None):
        return render_one_maass_waveform_wp(**info)
    if info['search'] or (info['browse'] and int(info['weight']) != 0):
        search = get_search_parameters(info)
        mwf_logger.debug("search=%s" % search)
        return render_search_results_wp(info, search)
    if info['browse']:
        mwf_logger.debug("browse info=%s" % info)
        return render_browse_all_eigenvalues(**info)

    DB = connect_db()
    if not info['collection'] or info['collection'] == 'all':
        # FIXME: metadata returned by get_collections_info is never used, only side effect appears to be logging messages
        # md = get_collections_info()
        get_collections_info()
    info['cur_character'] = character
    if level > 0:
        info['maass_weight'] = DB.weights(int(level))
        info['cur_level'] = level

    if weight > -1:
        info['cur_weight'] = weight
        if level > 0:
            info['maass_character'] = DB.characters(int(level), float(weight))
    if character > - 1:
        info['cur_character'] = character

    if level > 0 or weight > -1 or character > -1:
        search = get_search_parameters(info)
        mwf_logger.debug("info=%s" % info)
        mwf_logger.debug("search=%s" % search)
        return render_search_results_wp(info, search)
    title = 'Maass forms'
    info['list_of_levels'] = DB.levels()
    if info['list_of_levels']:
        info['max_level'] = max(info['list_of_levels'])
    else:
        info['max_level'] = 0
    mwf_logger.debug("info3=%s" % info)
    bread = [('Modular forms', url_for('mf.modular_form_main_page')),
             ('Maass forms', url_for('.render_maass_waveforms'))]
    info['bread'] = bread
    info['title'] = title
    DB.set_table()
    DB.table['ncols'] = 10
    info['DB'] = DB
    info['dbcount'] = DB.count()
    info['limit'] = maxNumberOfResultsToShow
    return render_template("mwf_navigate.html", **info)
示例#5
0
def render_maass_waveforms(level=0, weight=-1, character=-1, r1=0, r2=0, **kwds):
    info = get_args_mwf(level=level, weight=weight, character=character, r1=r1, r2=r2, **kwds)

    info["credit"] = ""
    info["learnmore"] = learnmore_list()
    mwf_logger.debug("args=%s" % request.args)
    mwf_logger.debug("method=%s" % request.method)
    mwf_logger.debug("req.form=%s" % request.form)
    mwf_logger.debug("info=%s" % info)
    mwf_logger.debug("level,weight,char={0},{1},{2}".format(level, weight, character))
    if info.get('maass_id', None) and info.get('db', None):
        return render_one_maass_waveform_wp(**info)
    if info['search'] or (info['browse'] and int(info['weight']) != 0):
        search = get_search_parameters(info)
        mwf_logger.debug("search=%s" % search)
        return render_search_results_wp(info, search)
    if info['browse']:
        mwf_logger.debug("browse info=%s" % info)
        return render_browse_all_eigenvalues(**info)

    info['cur_character'] = character
    if level > 0:
        info['maass_weight'] = maass_db.weights(int(level))
        info['cur_level'] = level

    if weight > -1:
        info['cur_weight'] = weight
        if level > 0:
            info['maass_character'] = maass_db.characters(int(level), float(weight))
    if character > - 1:
        info['cur_character'] = character

    if level > 0 or weight > -1 or character > -1:
        search = get_search_parameters(info)
        mwf_logger.debug("info=%s" % info)
        mwf_logger.debug("search=%s" % search)
        return render_search_results_wp(info, search)
    title = 'Maass Forms'
    info['list_of_levels'] = maass_db.levels()
    if info['list_of_levels']:
        info['max_level'] = max(info['list_of_levels'])
    else:
        info['max_level'] = 0
    mwf_logger.debug("info3=%s" % info)
    bread = [('Modular Forms', url_for('mf.modular_form_main_page')),
             ('Maass Forms', url_for('.render_maass_waveforms'))]
    info['bread'] = bread
    info['title'] = title
    maass_db.set_table()
    maass_db.table['ncols'] = 10
    info['DB'] = maass_db
    info['dbcount'] = maass_db.count()
    info['limit'] = maxNumberOfResultsToShow
    return render_template("mwf_navigate.html", **info)
示例#6
0
def render_browse_all_eigenvalues(**kwds):
    info = get_args_mwf(**kwds)
    bread = [('Modular forms', url_for('mf.modular_form_main_page')),('Maass forms', url_for('.render_maass_waveforms'))]
    info['bread'] = bread
    info['colheads'] = ['Level', 'Weight', 'Char',
                        'Eigenvalue', 'Symmetry',
                        'Precision', 'Mult.',
                        'Coeff.', 'Fricke', 'Atkin-Lehner']

    if int(info.get('weight', 0)) == 1:
        print "weight1=", info.get('weight', 0)
        info['wtis1'] = "selected"
        info['wtis0'] = ""
    else:
        print "weight0=", info.get('weight', 0)
        info['wtis0'] = "selected"
        info['wtis1'] = ""
    return render_template("mwf_browse_all_eigenvalues.html", **info)
示例#7
0
文件: mwf_main.py 项目: notchxu/lmfdb
def render_browse_all_eigenvalues(**kwds):
    info = get_args_mwf(**kwds)
    bread = [('Modular Forms', url_for('mf.modular_form_main_page')),('Maass Forms', url_for('.render_maass_waveforms'))]
    info['bread'] = bread
    info['colheads'] = ['Level', 'Weight', 'Char',
                        'Eigenvalue', 'Symmetry',
                        'Precision', 'Mult.',
                        'Coeff.', 'Fricke', 'Atkin-Lehner']

    if int(info.get('weight', 0)) == 1:
        print("weight1=", info.get('weight', 0))
        info['wtis1'] = "selected"
        info['wtis0'] = ""
    else:
        print("weight0=", info.get('weight', 0))
        info['wtis0'] = "selected"
        info['wtis1'] = ""
    return render_template("mwf_browse_all_eigenvalues.html", **info)
示例#8
0
def render_maass_waveforms(level=0,
                           weight=-1,
                           character=-1,
                           r1=0,
                           r2=0,
                           **kwds):
    info = get_args_mwf(level=level,
                        weight=weight,
                        character=character,
                        r1=r1,
                        r2=r2,
                        **kwds)
    info[
        "credit"] = u"Data computed by Stefan Lemurell and Fredrik Str\u00f6mberg."
    info["bread"] = [('Modular Forms', url_for('mf.modular_form_main_page')),
                     ('Maass Forms', url_for('.render_maass_waveforms'))]
    info["learnmore"] = learnmore_list()
    mwf_logger.debug("args=%s" % request.args)
    mwf_logger.debug("method=%s" % request.method)
    mwf_logger.debug("req.form=%s" % request.form)
    mwf_logger.debug("info=%s" % info)
    mwf_logger.debug("level,weight,char={0},{1},{2}".format(
        level, weight, character))
    if info.get('maass_id', None) and info.get('db', None):
        return render_one_maass_waveform_wp(**info)
    if info['search'] or (info['browse'] and int(info['weight']) != 0):
        # This isn't the right place to do input validation, but it is easier to flash errors here (this is a hack to address issue #1820)
        if info.get('level_range'):
            if not re.match(POSINT_RE, info['level_range']):
                if "-" in info['level_range']:
                    info['level_range'] = "..".join(
                        info['level_range'].split("-"))
                if not re.match(POSINT_RANGE_RE, info['level_range']):
                    flash_error(
                        "%s is not a level, please specify a positive integer <span style='color:black'>n</span> or postivie integer range <span style='color:black'>m..n</span>.",
                        info['level_range'])
                    return render_template('mwf_navigate.html', **info)
        if info['character'] != -1:
            if info['character'] == '1' or info['character'] == '1.1':
                info['character'] = '1'
            else:
                try:
                    N = int(info.get('level_range', '0'))
                except:
                    flash_error(
                        "Only the trivial character can be specified in combination with a range of levels.",
                        info['character'])
                    return render_template('mwf_navigate.html', **info)
                if re.match(POSINT_RE, info['character']):
                    if N == 0:
                        flash_error(
                            "Character %s is ambiguous. Please either specify a level or use a character label of the form <span style='color:black'>q.n</span>, where q specifies the level.",
                            info['character'])
                        return render_template('mwf_navigate.html', **info)
                    n = int(info['character'])
                    if gcd(N, n) != 1:
                        flash_error(
                            "Character %s is not coprime to the level %s.",
                            info['character'], str(N))
                        return render_template('mwf_navigate.html', **info)
                else:
                    if not re.match(r'^[1-9][0-9]*\.[1-9][0-9]*$',
                                    info['character']):
                        flash_error(
                            "%s is not a valid label for a Dirichlet character.  It should be either be 1 (for the trivial character) or of the form <span style='color:black'>q.n</span>, where q and n are coprime positive integers with n < q, or q=n=1.",
                            info['character'])
                        return render_template('mwf_navigate.html', **info)
                    s = info['character'].split('.')
                    q, n = int(s[0]), int(s[1])
                    if n > q or gcd(q, n) != 1:
                        flash_error(
                            "%s is not a valid label for a Dirichlet character.  It should be of the form <span style='color:black'>q.n</span>, where q and n are coprime positive integers with n < q, or q=n=1.",
                            info['character'])
                        return render_template('mwf_navigate.html', **info)
                    if N > 0 and q != N:
                        flash_error(
                            "The specified character %s is not compatible with the level %s.",
                            info['character'], info['level'])
                        return render_template('mwf_navigate.html', **info)
                    info['level_range'] = str(q)
                    info['character'] = str(n)
        if info['weight'] != -1:
            if not re.match(INT_RE, info['weight']):
                flash_error(
                    "%s is not a valid weight.  It should be a nonnegative integer.",
                    info['weight'])
                return render_template('mwf_navigate.html', **info)
        if info.get('ev_range'):
            if not re.match(FLOAT_RE, info['ev_range']):
                if "-" in info['ev_range']:
                    info['ev_range'] = "..".join(info['ev_range'].split("-"))
                s = info['ev_range'].split("..")
                if len(s) != 2:
                    flash_error(
                        "%s is not a valid eigenvalue range.  It should be postive real interval.",
                        info['ev_range'])
                    return render_template('mwf_navigate.html', **info)
                if not re.match(FLOAT_RE, s[0]) or not re.match(
                        FLOAT_RE, s[1]):
                    flash_error(
                        "%s is not a valid eigenvalue range.  It should be postive real interval.",
                        info['ev_range'])
                    return render_template('mwf_navigate.html', **info)
        search = get_search_parameters(info)
        mwf_logger.debug("search=%s" % search)
        return render_search_results_wp(info, search)
    if info['browse']:
        mwf_logger.debug("browse info=%s" % info)
        return render_browse_all_eigenvalues(**info)

    info['cur_character'] = character
    if level > 0:
        info['maass_weight'] = maass_db.weights(int(level))
        info['cur_level'] = level

    if weight > -1:
        info['cur_weight'] = weight
        if level > 0:
            info['maass_character'] = maass_db.characters(
                int(level), float(weight))
    if character > -1:
        info['cur_character'] = character

    if level > 0 or weight > -1 or character > -1:
        search = get_search_parameters(info)
        mwf_logger.debug("info=%s" % info)
        mwf_logger.debug("search=%s" % search)
        return render_search_results_wp(info, search)
    title = 'Maass Forms'
    info['list_of_levels'] = maass_db.levels()
    if info['list_of_levels']:
        info['max_level'] = max(info['list_of_levels'])
    else:
        info['max_level'] = 0
    mwf_logger.debug("info3=%s" % info)
    bread = [('Modular Forms', url_for('mf.modular_form_main_page')),
             ('Maass Forms', url_for('.render_maass_waveforms'))]
    info['bread'] = bread
    info['title'] = title
    maass_db.set_table()
    maass_db.table['ncols'] = 10
    info['DB'] = maass_db
    info['dbcount'] = maass_db.count()
    info['limit'] = maxNumberOfResultsToShow
    return render_template("mwf_navigate.html", **info)
示例#9
0
def render_maass_waveforms(level=0, weight=-1, character=-1, r1=0, r2=0, **kwds):
    info = get_args_mwf(level=level, weight=weight, character=character, r1=r1, r2=r2, **kwds)
    info["credit"] = ""
    info["learnmore"] = learnmore_list()
    mwf_logger.debug("args=%s" % request.args)
    mwf_logger.debug("method=%s" % request.method)
    mwf_logger.debug("req.form=%s" % request.form)
    mwf_logger.debug("info=%s" % info)
    mwf_logger.debug("level,weight,char={0},{1},{2}".format(level, weight, character))
    if info.get('maass_id', None) and info.get('db', None):
        return render_one_maass_waveform_wp(**info)
    if info['search'] or (info['browse'] and int(info['weight']) != 0):
        # This isn't the right place to do input validation, but it is easier to flash errors here (this is a hack to address issue #1820)
        if info.get('level_range'):
            if not re.match(POSINT_RE, info['level_range']):
                if "-" in info['level_range']:
                    info['level_range'] = "..".join(info['level_range'].split("-"))
                if not re.match(POSINT_RANGE_RE, info['level_range']):
                    flash_error("%s is not a level, please specify a positive integer <span style='color:black'>n</span> or postivie integer range <span style='color:black'>m..n</span>.", info['level_range'])
                    return render_template('mwf_navigate.html', **info)
        if info['character'] != -1:
            try:
                N = int(info.get('level_range','0'))
            except:
                flash_error("Character %s cannot be specified in combination with a range of levels.", info['character'])
                return render_template('mwf_navigate.html', **info)
            if not re.match(r'^[1-9][0-9]*\.[1-9][0-9]*$', info['character']):
                flash_error("%s is not a valid label for a Dirichlet character.  It should be of the form <span style='color:black'>q.n</span>, where q and n are coprime positive integers with n < q, or q=n=1.", info['character'])
                return render_template('mwf_navigate.html', **info)
            s = info['character'].split('.')
            q,n = int(s[0]), int(s[1])
            if n > q or gcd(q,n) != 1 or (N > 0 and q != N):
                flash_error("%s is not a valid label for a Dirichlet character.  It should be of the form <span style='color:black'>q.n</span>, where q and n are coprime positive integers with n < q, or q=n=1.", info['character'])
                return render_template('mwf_navigate.html', **info)
            info['level_range'] = str(q)
            info['character'] = str(n)
        if info['weight'] != -1:
            if not re.match(INT_RE, info['weight']):
                flash_error("%s is not a valid weight.  It should be a nonnegative integer.", info['weight'])
                return render_template('mwf_navigate.html', **info)
        if info.get('ev_range'):
            if not re.match(FLOAT_RE,info['ev_range']):
                if "-" in info['ev_range']:
                    info['ev_range'] = "..".join(info['ev_range'].split("-"))
                s = info['ev_range'].split("..")
                if len(s) != 2:
                    flash_error("%s is not a valid eigenvalue range.  It should be postive real interval.", info['ev_range'])
                    return render_template('mwf_navigate.html', **info)
                if not re.match(FLOAT_RE,s[0]) or not re.match(FLOAT_RE,s[1]):
                    flash_error("%s is not a valid eigenvalue range.  It should be postive real interval.", info['ev_range'])
                    return render_template('mwf_navigate.html', **info)
        search = get_search_parameters(info)
        mwf_logger.debug("search=%s" % search)
        return render_search_results_wp(info, search)
    if info['browse']:
        mwf_logger.debug("browse info=%s" % info)
        return render_browse_all_eigenvalues(**info)

    info['cur_character'] = character
    if level > 0:
        info['maass_weight'] = maass_db.weights(int(level))
        info['cur_level'] = level

    if weight > -1:
        info['cur_weight'] = weight
        if level > 0:
            info['maass_character'] = maass_db.characters(int(level), float(weight))
    if character > - 1:
        info['cur_character'] = character

    if level > 0 or weight > -1 or character > -1:
        search = get_search_parameters(info)
        mwf_logger.debug("info=%s" % info)
        mwf_logger.debug("search=%s" % search)
        return render_search_results_wp(info, search)
    title = 'Maass Forms'
    info['list_of_levels'] = maass_db.levels()
    if info['list_of_levels']:
        info['max_level'] = max(info['list_of_levels'])
    else:
        info['max_level'] = 0
    mwf_logger.debug("info3=%s" % info)
    bread = [('Modular Forms', url_for('mf.modular_form_main_page')),
             ('Maass Forms', url_for('.render_maass_waveforms'))]
    info['bread'] = bread
    info['title'] = title
    maass_db.set_table()
    maass_db.table['ncols'] = 10
    info['DB'] = maass_db
    info['dbcount'] = maass_db.count()
    info['limit'] = maxNumberOfResultsToShow
    return render_template("mwf_navigate.html", **info)