Exemple #1
0
def render_plot(grouptype=0, level=1):
    domain = render_fd_plot(level, {'grouptype': grouptype})
    if isinstance(domain, sage.plot.plot.Graphics):
        emf_logger.debug('Got a Graphics object')
        _, filename = tempfile.mkstemp('.png')
        domain.save(filename)
        data = open(filename).read()
        os.unlink(filename)
    else:
        data = domain
    response = make_response(data)
    response.headers['Content-type'] = 'image/png'
    return response
Exemple #2
0
def render_plot(grouptype=0, level=1):
    domain = render_fd_plot(level, {'grouptype': grouptype})
    if isinstance(domain, sage.plot.plot.Graphics):
        emf_logger.debug('Got a Graphics object')
        _, filename = tempfile.mkstemp('.png')
        domain.save(filename)
        data = open(filename).read()
        os.unlink(filename)
    else:
        data = domain
    response = make_response(data)
    response.headers['Content-type'] = 'image/png'
    return response
def render_elliptic_modular_form_navigation_wp(**args):
    r"""
    Renders the webpage for the navigational page.
    """
    from sage.all import is_even
    from lmfdb.modular_forms.elliptic_modular_forms import WebModFormSpace
    dimension_table_name = WebModFormSpace._dimension_table_name
  
    info = to_dict(args)
    args = to_dict(request.args)
    info.update(args)
    form = to_dict(request.form)
    info.update(form)
    emf_logger.debug("render_c_m_f_n_wp info={0}".format(info))
    level = my_get(info, 'level', None, int)
    weight = my_get(info, 'weight', None, int)
    # character = my_get(info, 'character', 1, int) # not used
    # label = info.get('label', '') # not used
    if('plot' in info and isinstance(level,int) and level > 0):
        return render_fd_plot(level, info)
    is_set = dict()
    is_set['weight'] = False
    is_set['level'] = False
    limits_weight = extract_limits_as_tuple(info, 'weight')
    limits_level = extract_limits_as_tuple(info, 'level')
    title = "Holomorphic Cusp Forms"
    bread = [(MF_TOP, url_for('mf.modular_form_main_page')), (EMF_TOP, url_for('.render_elliptic_modular_forms'))]
    if isinstance(level,int) and level > 0:
        is_set['level'] = True
        level = int(level)
        bread.append(('Level %d'%level, url_for('emf.render_elliptic_modular_forms', level=level)))
        title += " of level %d"%level 
    else:
        level = None
        info.pop('level',None)
    if isinstance(weight,int) and weight > 0:
        is_set['weight'] = True
        weight = int(weight)
        bread.append(('Weight %d'%weight, url_for('emf.render_elliptic_modular_forms', level=level, weight=weight)))
        title += " of weight %d"%weight
    else:
       weight = None
       info.pop('weight',None)
    ## This is the list of weights we initially put on the form
    if is_set['weight']:
        limits_weight = (weight, weight)
    elif limits_weight is None:
        limits_weight = (2, 12) # default values
    # we don't have weight 1 in database, reset range here to exclude it
    if limits_weight[0]==1:
        limits_weight=(2,limits_weight[1])
    if is_set['level']:
        limits_level = (level, level) 
    elif limits_level is None:
        limits_level = (1, 24) # default values
    try:
        group = info.get('group',0) # default group is gamma_0
        group = int(group)
    except ValueError: 
        group = 0
    if group not in [0,1]:
        group = 0
    if group == 0:
        info['grouptype'] = 0; info['groupother'] = 1
    else:
        info['grouptype'] = 1; info['groupother'] = 0    
    # Special case: if the range reduces to a singleton for both level
    # and weight then we return a single page rather than a table:
    if limits_weight[0] == limits_weight[1] and limits_level[0] == limits_level[1]:
        return redirect(url_for("emf.render_elliptic_modular_forms",
          level=limits_level[0],weight=limits_weight[0],group=group), code=301)
    info['show_switch'] = True
    db_dim = getDBConnection()['modularforms2'][dimension_table_name]
    s = {'level':{"$lt":int(limits_level[1]+1),"$gt":int(limits_level[0]-1)},
         'weight' : {"$lt":int(limits_weight[1]+1),"$gt":int(limits_weight[0]-1)}}
    if group == 0:
        s['cchi']=int(1)
    else:
        s['gamma1_label']={"$exists":True}
    info['table'] = {}
    level_range = range(limits_level[0],limits_level[1]+1)
    weight_range = range(limits_weight[0],limits_weight[1]+1)
    if group == 0:
        weight_range = filter(is_even,weight_range)
    if len(weight_range)>1:
        info['weight_range']="{0}-{1}".format(limits_weight[0],limits_weight[1])
    elif len(weight_range)==1:
        info['weight_range']="{0}".format(limits_weight[0])
    if len(level_range)>1:
        info['level_range']="{0}-{1}".format(limits_level[0],limits_level[1])
    if len(level_range)==1:
        info['level_range']="{0}".format(limits_level[0])        
    for n in level_range:
        info['table'][n]={}
        for k in weight_range:
            info['table'][n][k]={'dim_new':int(0), 'in_db':-1}
    for r in db_dim.find(s):
        N = r['level']
        k = r['weight']
        if group != 0 or k%2==0:
            #emf_logger.debug("Found:k={0},N={1}".format(k,N))
            dim = r['d_newf'] # dimension of newforms
            info['table'][N][k]['dim_new'] = dim
            if group == 0:
                indb = r['in_wdb'] # 1 if it is in the webmodforms db else 0
            else:
                indb = r.get('one_in_wdb',0) # 1 if it is in the webmodforms db else 0
                if dim == 0:
                    indb = 1
            info['table'][N][k]['in_db'] = indb
    info['col_heads'] = level_range
    info['row_heads'] = weight_range
    lm = [('History of modular forms', url_for(".holomorphic_mf_history"))]
    return render_template("emf_browse_spaces.html", info=info, title=title, bread=bread, learnmore=lm)