コード例 #1
0
ファイル: main.py プロジェクト: sanni85/lmfdb
def processMaassNavigation(numrecs=35):
    """
    Produces a table of numrecs Maassforms with Fourier coefficients in the database
    """
    s = '<h5>The L-functions attached to the first 4 weight 0 Maass newforms with trivial character on Hecke congruence groups $\Gamma_0(N)$</h5>'
    s += '<table>\n'
    i = 0
    maxinlevel = 4
    for level in [1, 2, 3, 4, 5, 6, 7, 9]:
        j = 0
        s += '<tr>\n'
        s += '<td><bold>N={0}:</bold></td>\n'.format(level)
        finds = maass_db.get_Maass_forms({'Level': int(level),
                                          'char': 1,
                                          'Newform' : None})
        for f in finds:
            nc = f.get('Numc', 0)
            if nc <= 0:
                continue
            R = f.get('Eigenvalue', 0)
            if R == 0:
                continue
            if f.get('Symmetry',0) == 1:
                T = 'o'
            else:
                T = 'e'
            _until = min(12, len(str(R)))
            Rst = str(R)[:_until]
            idd = f.get('maass_id', None)
            if idd is None:
                continue
            idd = str(idd)
            url = url_for('.l_function_maass_page', maass_id=idd)
            s += '<td><a href="{0}">{1}</a>{2}'.format(url, Rst, T)
            i += 1
            j += 1
            if i >= numrecs or j >= maxinlevel:
                break
        s += '</tr>\n'
        if i > numrecs:
            break
    s += '</table>\n'

    return s
コード例 #2
0
ファイル: mwf_main.py プロジェクト: roed314/beantheory2
def evs_table2(search, twodarray=False, limit=50, offset=0):
    r"""
    Returns an object containing the results of a search for Maass forms.
    """
    table = []
    nrows = 0
    fs = maass_db.get_Maass_forms(search, limit=limit, offset=offset)
    mwf_logger.debug("numrec:{0}".format(len(fs)))
    for f in fs:  # indices:
        row = {}
        R = f.get('Eigenvalue', None)
        N = f.get('Level', None)
        k = f.get('Weight', None)
        if R is None or N is None or k is None:
            continue
        row['R'] = R
        row['N'] = N
        if k == 0 or k == 1:
            row['k'] = int(k)
        else:
            row['k'] = k
        ##
        chi = f.get('Character', 0)
        ## Now get the COnrey number.
        ## First the character
        if k == 0:
            url = url_for('characters.render_Dirichletwebpage',
                          modulus=N,
                          number=chi)
            s = "<a href={0}>{1}</a>".format(url, chi)
            row['ch'] = s
        else:
            row['ch'] = "eta"
        st = f.get('Symmetry', -1)
        if st == 1:
            st = "odd"
        elif st == 0:
            st = "even"
        else:
            st = "n/a"
        row['symmetry'] = st
        er = f.get('Error', 0)
        if er > 0:
            er = "{0:1.0e}".format(float(er))
        else:
            er = "unknown"
        row['err'] = er
        dim = f.get('Dim', 0)
        if dim is None:
            dim = 1  # "undefined"
        row['dim'] = dim
        numc = f.get('Numc', 0)
        row['numc'] = numc
        cev = f.get('Cusp_evs', [])
        row['fricke'] = 'n/a'
        row['cuspevs'] = 'n/a'
        if row['k'] == 0 and isinstance(cev, list):
            if len(cev) > 1:
                fricke = cev[1]
                row['fricke'] = fricke
                s = '{0}'.format(cev[0])
                for j in range(1, len(cev)):
                    s += ",{0}".format(cev[j])
            elif len(cev) == 1:
                s = str(cev[0])
            elif len(cev) == 0:
                s = 'n/a'
            row['cuspevs'] = s

        url = url_for('mwf.render_one_maass_waveform',
                      maass_id=f.get('maass_id'))
        row['url'] = url
        nrows += 1
        if twodarray:
            s = '<a href="{0}">{1}</a>'.format(row['url'], row['R'])
            rowr = [
                row['N'], row['k'], row['ch'], s, row['symmetry'], row['err'],
                row['dim'], row['numc'], row['fricke'], row['cuspevs']
            ]
            table.append(rowr)
        else:
            # row=row.values()
            table.append(row)
    mwf_logger.debug("nrows:".format(nrows))
    evs = {'table': {}}
    evs['table']['data'] = table
    evs['table']['nrows'] = nrows
    evs['table']['ncols'] = 10
    evs['table']['colheads'] = []
    knowls = [
        'mf.maass.mwf.level', 'mf.maass.mwf.weight', 'mf.maass.mwf.character',
        'mf.maass.mwf.eigenvalue', 'mf.maass.mwf.symmetry',
        'mf.maass.mwf.precision', 'mf.maass.mwf.dimension',
        'mf.maass.mwf.ncoefficients', 'cmf.fricke', 'cmf.atkin-lehner'
    ]
    titles = [
        'Level', 'Weight', 'Char', 'Eigenvalue', 'Symmetry', 'Precision',
        'Mult.', 'Coeff.', 'Fricke', 'Atkin-Lehner'
    ]
    for i in range(10):
        evs['table']['colheads'].append((knowls[i], titles[i]))
    if 'limit' in search:
        search.pop('limit')
    if 'skip' in search:
        search.pop('skip')
    evs['totalrecords'] = maass_db.count(search)
    evs['totalrecords_filtered'] = len(fs)

    return evs
コード例 #3
0
 def set_table(self, data={}):
     # data = maass_db.get_search_parameters(data,kwds
     mwf_logger.debug("set table, data =  {0}".format(data))
     mwf_logger.debug("skip= {0}".format(self.skip))
     mwf_logger.debug("limit= {0}".format(self.limit))
     self.table = []
     data['skip'] = self.skip
     data['limit'] = self.limit
     l1 = self.keys.index('Level')
     level_ll = (self.skip[l1]) * self.limit[l1]
     level_ul = (self.skip[l1] + 1) * self.limit[l1]
     ev_limit = self.limit[self.keys.index('Eigenvalue')]
     ev_skip = self.skip[self.keys.index('Eigenvalue')] * ev_limit
     new_cols = []
     levels = maass_db.levels()
     mwf_logger.debug("levels= {0}".format(levels))
     cur_level = data.get('level', None)
     cur_wt = data.get('weight', None)
     print("cur_level=", cur_level)
     print("cur_wt=", cur_wt)
     for N in levels:
         if cur_level and cur_level != N:
             continue
         N = int(N)
         if N < level_ll or N > level_ul:
             continue
         print("N=", N)
         weights = maass_db.weights(N)
         print("weights=", weights)
         self.wt = weights
         for k in weights:
             if cur_wt is not None and cur_wt != k:
                 continue
             print("k=", k)
             k = int(k)
             evs = []
             query = {'Level': N, 'Weight': k}
             totalc = maass_db.count(query)
             finds = maass_db.get_Maass_forms(query,
                                              limit=ev_limit,
                                              offset=ev_skip)
             for rec in finds:
                 row = {}
                 maass_id = rec.get('_id', None)
                 row['R'] = rec.get('Eigenvalue', None)
                 row['st'] = rec.get("Symmetry")
                 row['cusp_evs'] = rec.get("Cusp_evs")
                 row['err'] = rec.get('Error', 0)
                 row['url'] = url_for('mwf.render_one_maass_waveform',
                                      maass_id=maass_id)
                 row['numc'] = rec.get('Numc', 0)
                 evs.append(row)
             kmax = int(totalc / ev_limit)
             paging = []
             for j in range(ev_skip, kmax):
                 k0 = (j) * ev_limit
                 k1 = (j + 1) * ev_limit
                 url = url_for('mwf.render_maass_waveforms',
                               level=N,
                               weight=k,
                               skip=ev_skip + j,
                               limit=ev_limit)
                 skip = {
                     'url': url,
                     'k0': k0,
                     'k1': k1,
                     'cur_skip': ev_skip,
                     'cur_limit': ev_limit,
                     "skip": j
                 }
                 paging.append(skip)
             # s+="]"
             self.paging = paging
             smalltbl = {'N': N, 'k': k, 'evs': evs, 'paging': paging}
             if len(evs) > 0:
                 self.table.append(smalltbl)
     print("table=", self.table)
     self.cols = new_cols
コード例 #4
0
ファイル: mwf_utils.py プロジェクト: koffie/lmfdb
 def set_table(self, data={}):
     # data = maass_db.get_search_parameters(data,kwds
     mwf_logger.debug("set table, data =  {0}".format(data))
     mwf_logger.debug("skip= {0}".format(self.skip))
     mwf_logger.debug("limit= {0}".format(self.limit))
     self.table = []
     data['skip'] = self.skip
     data['limit'] = self.limit
     l1 = self.keys.index('Level')
     level_ll = (self.skip[l1]) * self.limit[l1]
     level_ul = (self.skip[l1] + 1) * self.limit[l1]
     ev_limit = self.limit[self.keys.index('Eigenvalue')]
     ev_skip = self.skip[self.keys.index('Eigenvalue')] * ev_limit
     new_cols = []
     levels = maass_db.levels()
     mwf_logger.debug("levels= {0}".format(levels))
     cur_level = data.get('level', None)
     cur_wt = data.get('weight', None)
     print "cur_level=", cur_level
     print "cur_wt=", cur_wt
     for N in levels:
         if cur_level and cur_level != N:
             continue
         N = int(N)
         if N < level_ll or N > level_ul:
             continue
         print "N=", N
         weights = maass_db.weights(N)
         print "weights=", weights
         self.wt = weights
         for k in weights:
             if cur_wt is not None and cur_wt != k:
                 continue
             print "k=", k
             k = int(k)
             evs = []
             query = {'Level': N, 'Weight': k}
             totalc = maass_db.count(query)
             finds = maass_db.get_Maass_forms(query, limit=ev_limit, offset=ev_skip)
             for rec in finds:
                 row = {}
                 maass_id = rec.get('_id', None)
                 row['R'] = rec.get('Eigenvalue', None)
                 row['st'] = rec.get("Symmetry")
                 row['cusp_evs'] = rec.get("Cusp_evs")
                 row['err'] = rec.get('Error', 0)
                 row['url'] = url_for('mwf.render_one_maass_waveform', maass_id=maass_id)
                 row['numc'] = rec.get('Numc', 0)
                 evs.append(row)
             kmax = int(totalc / ev_limit)
             paging = []
             for j in range(ev_skip, kmax):
                 k0 = (j) * ev_limit
                 k1 = (j + 1) * ev_limit
                 url = url_for(
                     'mwf.render_maass_waveforms', level=N, weight=k, skip=ev_skip + j, limit=ev_limit)
                 skip = {'url': url, 'k0': k0, 'k1': k1, 'cur_skip': ev_skip,
                         'cur_limit': ev_limit, "skip": j}
                 paging.append(skip)
             # s+="]"
             self.paging = paging
             smalltbl = {'N': N, 'k': k, 'evs': evs, 'paging': paging}
             if len(evs) > 0:
                 self.table.append(smalltbl)
     print "table=", self.table
     self.cols = new_cols
コード例 #5
0
ファイル: mwf_main.py プロジェクト: jenpaulhus/lmfdb
def evs_table2(search, twodarray=False, limit=50, offset=0):
    r"""
    Returns an object containing the results of a search for Maass forms.
    """
    table = []
    nrows = 0
    fs = maass_db.get_Maass_forms(search, limit=limit, offset=offset)
    mwf_logger.debug("numrec:{0}".format(len(fs)))
    for f in fs:  # indices:
        row = {}
        R = f.get('Eigenvalue', None)
        N = f.get('Level', None)
        k = f.get('Weight', None)
        if R is None or N is None or k is None:
            continue
        row['R'] = R
        row['N'] = N
        if k == 0 or k == 1:
            row['k'] = int(k)
        else:
            row['k'] = k
        ##
        chi = f.get('Character', 0)
        ## Now get the COnrey number.
        ## First the character
        if k == 0:
            url = url_for('characters.render_Dirichletwebpage', modulus=N, number=chi)
            s = "<a href={0}>{1}</a>".format(url, chi)
            row['ch'] = s
        else:
            row['ch'] = "eta"
        st = f.get('Symmetry', -1)
        if st == 1:
            st = "odd"
        elif st == 0:
            st = "even"
        else:
            st = "n/a"
        row['symmetry'] = st
        er = f.get('Error', 0)
        if er > 0:
            er = "{0:1.0e}".format(float(er))
        else:
            er = "unknown"
        row['err'] = er
        dim = f.get('Dim', 0)
        if dim is None:
            dim = 1  # "undefined"
        row['dim'] = dim
        numc = f.get('Numc', 0)
        row['numc'] = numc
        cev = f.get('Cusp_evs', [])
        row['fricke'] = 'n/a'
        row['cuspevs'] = 'n/a'
        if row['k'] == 0 and isinstance(cev, list):
            if len(cev) > 1:
                fricke = cev[1]
                row['fricke'] = fricke
                s = '{0}'.format(cev[0])
                for j in range(1, len(cev)):
                    s += ",{0}".format(cev[j])
            elif len(cev) == 1:
                s = str(cev[0])
            elif len(cev) == 0:
                s = 'n/a'
            row['cuspevs'] = s

        url = url_for('mwf.render_one_maass_waveform', maass_id=f.get('maass_id'))
        row['url'] = url
        nrows += 1
        if twodarray:
            s = '<a href="{0}">{1}</a>'.format(row['url'], row['R'])
            rowr = [row['N'], row['k'], row['ch'], s,
                    row['symmetry'], row['err'], row['dim'], row['numc'],
                    row['fricke'], row['cuspevs']]
            table.append(rowr)
        else:
            # row=row.values()
            table.append(row)
    mwf_logger.debug("nrows:".format(nrows))
    evs = {'table': {}}
    evs['table']['data'] = table
    evs['table']['nrows'] = nrows
    evs['table']['ncols'] = 10
    evs['table']['colheads'] = []
    knowls = ['mf.maass.mwf.level', 'mf.maass.mwf.weight', 'mf.maass.mwf.character',
              'mf.maass.mwf.eigenvalue', 'mf.maass.mwf.symmetry',
              'mf.maass.mwf.precision', 'mf.maass.mwf.dimension',
              'mf.maass.mwf.ncoefficients', 'mf.maass.mwf.fricke',
              'mf.maass.mwf.atkinlehner']
    titles = ['Level', 'Weight', 'Char',
              'Eigenvalue', 'Symmetry',
              'Precision', 'Mult.',
              'Coeff.', 'Fricke', 'Atkin-Lehner']
    for i in range(10):
        evs['table']['colheads'].append((knowls[i], titles[i]))
    if 'limit' in search:
        search.pop('limit')
    if 'skip' in search:
        search.pop('skip')
    evs['totalrecords'] = maass_db.count(search)
    evs['totalrecords_filtered'] = len(fs)

    return evs
コード例 #6
0
ファイル: mwf_plot.py プロジェクト: roed314/beantheory2
def paintSvgMaass(min_level,
                  max_level,
                  min_R,
                  max_R,
                  weight=0,
                  char=1,
                  width=1000,
                  heightfactor=20,
                  L=""):
    ''' Returns the contents (as a string) of the svg-file for
        all Maass forms in the database.
        Takes all levels from min_level to max_level
        Spectral parameter in [min_R, max_R] 
        Set L="/L" to make link go to the L-function
    '''
    xMax = int(max_R)
    yMax = int(max_level)
    xMin = int(min_R)
    yMin = int(min_level)
    extraSpace = 40
    length_R = xMax - xMin
    length_level = yMax - yMin + 1
    if length_level < 15:
        heightfactor = heightfactor * 2
    height = length_level * heightfactor + extraSpace
    xfactor = (width - extraSpace) / length_R
    yfactor = (height - extraSpace) / length_level
    ticlength = 4
    radius = 3
    xshift = extraSpace

    # Start of file and add coordinate system
    ans = "<svg  xmlns='http://www.w3.org/2000/svg'"
    ans += " xmlns:xlink='http://www.w3.org/1999/xlink'"
    ans += " height='{0}' width='{1}'>\n".format(height + 20, width + 20)
    ans += paintCSMaass(width, height, xMin, xMax, yMin, yMax, xfactor,
                        yfactor, ticlength, xshift)

    # Fetch Maass forms from database
    search = {
        'level1': yMin,
        'level2': yMax,
        'char': char,
        'R1': xMin,
        'R2': xMax,
        'Newform': None,
        'weight': weight
    }
    projection = ['maass_id', 'Eigenvalue', 'Level', 'Symmetry']
    forms = maass_db.get_Maass_forms(search, projection, sort=[], limit=10000)

    # Loop through all forms and add a clickable dot for each
    for f in forms:
        linkurl = L + "/ModularForm/GL2/Q/Maass/{0}".format(f['maass_id'])
        x = (f['Eigenvalue'] - xMin) * xfactor + xshift
        y = (f['Level'] - yMin + 1) * yfactor
        try:  # Shifting even slightly up and odd slightly down
            if f['Symmetry'] == 0 or f['Symmetry'] == 'even':
                y -= 1
                color = signtocolour(1)
            elif f['Symmetry'] == 1 or f['Symmetry'] == 'odd':
                y += 1
                color = signtocolour(-1)
            else:
                color = signtocolour(0)
        except Exception:
            color = signtocolour(0)

        ans += "<a xlink:href='{0}' target='_top'>".format(linkurl)
        ans += "<circle cx='{0}' cy='{1}' ".format(str(x)[0:6], str(y))
        ans += "r='{0}'  style='fill:{1}'>".format(str(radius), color)
        ans += "<title>{0}</title></circle></a>\n".format(f['Eigenvalue'])

    ans += "</svg>"
    return ans