Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Hecke algebras #2189

Merged
merged 56 commits into from
Aug 2, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
1098a68
First commit on hecke algebras
sanni85 Oct 25, 2016
3f3a414
Created new files, copied from lattices
sanni85 Oct 25, 2016
5529b28
First import script fixed
sanni85 Oct 25, 2016
fb07bb3
Stats file and breads done
sanni85 Oct 25, 2016
f71a192
index page cleaned and work on search started
sanni85 Oct 25, 2016
410d9a3
first single page structure using only the collection hecke_algebras
sanni85 Oct 25, 2016
0301818
search by labels now works
sanni85 Oct 25, 2016
09ea603
search works and download of search results
sanni85 Oct 26, 2016
6a07dc7
added import scripts for orbits and l-adic info
sanni85 Oct 27, 2016
8fd1056
display of orbits on page
sanni85 Oct 27, 2016
d32790c
single page improved, data is extract from both the databases hecke_a…
sanni85 Oct 27, 2016
03b84c4
add pages for l-adic data, idempotents and orbits
sanni85 Oct 28, 2016
3f7adc5
import script corrected
sanni85 Oct 28, 2016
be19e23
add l adic data and modified html
sanni85 Oct 28, 2016
f155df6
fixed typo
sanni85 Oct 28, 2016
36d840b
fixed changes to import script and html
sanni85 Oct 28, 2016
815c1af
sorting of the orbits added
sanni85 Nov 1, 2016
7f8633d
Merge branch 'master' of github.com:LMFDB/lmfdb into hecke_alg
sanni85 Jan 23, 2017
4f55ed4
Merge branch 'master' of github.com:LMFDB/lmfdb into hecke_alg
sanni85 Feb 13, 2017
3ff0f8c
clean up single algebra page and operator lists
sanni85 Feb 13, 2017
5d55198
download functionalities for list of operators, l-adic data fixed
sanni85 Feb 13, 2017
7bb99e7
fixed idempotents issues
sanni85 Feb 13, 2017
a31e321
typo corrected
sanni85 Feb 14, 2017
5a28a30
clean up after discussion
sanni85 Feb 14, 2017
d80b120
more work done, search by orbit label fixed
sanni85 Feb 14, 2017
56b2e87
mod l description cleaned up
sanni85 Feb 15, 2017
abd024f
script to add fields in the entries once computed
sanni85 Feb 15, 2017
d69e919
added script to complete orbit info over Z and Q
sanni85 Feb 16, 2017
cdf8043
the information for each obit is ok, added dowload for generators
sanni85 Feb 19, 2017
f7b2a3f
mod l and l adic data fixed, diplay and html
sanni85 Feb 19, 2017
37f9aa2
clean up, fixed finite field display
sanni85 Feb 22, 2017
627fc66
download functions for idempotents and mod l Hecke operators
sanni85 Feb 24, 2017
916c0ba
Merge branch 'master' of github.com:LMFDB/lmfdb into hecke_alg
sanni85 Feb 24, 2017
b39f52e
Merge branch 'master' of github.com:LMFDB/lmfdb into hecke_alg
sanni85 Feb 27, 2017
d1c9faf
Merge branch 'master' of github.com:LMFDB/lmfdb into hecke_alg
sanni85 Mar 21, 2017
7df1dc3
moved orbits to make it more visible
sanni85 Mar 21, 2017
b7cd4f1
correct url
sanni85 Jun 12, 2017
de7a0fc
switch to the right database
sanni85 Jun 14, 2017
57468e9
scripts for upload changed to use the right database
sanni85 Jun 14, 2017
432eb33
Merge branch 'master' of github.com:LMFDB/lmfdb into hecke_alg
sanni85 Jun 14, 2017
ea52b21
Merge branch 'master' of https://github.com/LMFDB/lmfdb into hecke_alg
sanni85 Jul 17, 2017
e92a70d
change url
sanni85 Jul 17, 2017
e1882d4
Fixed search for orbits and primes for local data
sanni85 Jul 18, 2017
cad9bcd
search fixed and minor templates issues
sanni85 Jul 19, 2017
60d5991
Dowload search results now works
sanni85 Jul 19, 2017
0b742a8
Fixed dowload for magma
sanni85 Jul 19, 2017
a55913c
fix for the cases where no l-adic data is in the database
sanni85 Jul 19, 2017
3acddde
Merge branch 'master' of https://github.com/LMFDB/lmfdb into hecke_alg
sanni85 Jul 19, 2017
2326892
changed connection handling
sanni85 Jul 20, 2017
9344af7
Merge branch 'master' of https://github.com/LMFDB/lmfdb into hecke_alg
sanni85 Jul 20, 2017
87c8123
fixed stats and add tests, run pyflakes and made some more cleanup
sanni85 Jul 21, 2017
ec8f1c9
Merge branch 'master' of https://github.com/LMFDB/lmfdb into hecke_alg
sanni85 Jul 21, 2017
7af17dd
simplified and standardised stats collection
JohnCremona Aug 1, 2017
fd80087
Merge pull request #2 from JohnCremona/hecke_alg
sanni85 Aug 1, 2017
81d584a
page layout changes
sanni85 Aug 2, 2017
0109a39
fix for tests
sanni85 Aug 2, 2017
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions lmfdb/hecke_algebras/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# -*- coding: utf-8 -*-
from lmfdb.base import app
from lmfdb.utils import make_logger
from flask import Blueprint

hecke_algebras_page = Blueprint("hecke_algebras", __name__, template_folder='templates', static_folder="static")
hecke_algebras_logger = make_logger(hecke_algebras_page)


@hecke_algebras_page.context_processor
def body_class():
return {'body_class': 'hecke_algebras'}

import main
assert main

app.register_blueprint(hecke_algebras_page, url_prefix="/ModularForm/GL2/Q/HeckeAlgebra")
28 changes: 28 additions & 0 deletions lmfdb/hecke_algebras/hecke_algebras_stats.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# -*- coding: utf-8 -*-
from lmfdb.base import app
from lmfdb.utils import make_logger, comma
from lmfdb.base import getDBConnection

logger = make_logger("hecke_algebras")

def db_heckestats():
return getDBConnection().hecke_algebras.hecke_algebras.stats

def hecke_algebras_summary():
heckestats = db_heckestats()
hecke_knowl = '<a knowl="hecke_algebra.definition">Hecke algebras</a>'
level_knowl = '<a knowl="mf.elliptic.level">level</a>'
weight_knowl = '<a knowl="mf.elliptic.weight">weight</a>'
gamma0_knowl = '<a knowl="group.sl2z.subgroup.gamma0n">$\Gamma_0$</a>'
level_data = heckestats.find_one('level')
number = level_data['total']
max_level = level_data['max']
weight_data = heckestats.find_one('weight')
max_weight = weight_data['max']
return ''.join([r'The database currently contains {} '.format(comma(number)),
hecke_knowl,'. The largest ', level_knowl, ' for ' , gamma0_knowl , ' is {}, '.format(comma(max_level)),
'the largest ', weight_knowl, ' is {}.'.format(comma(max_weight))])

@app.context_processor
def ctx_hecke_algebras_summary():
return {'hecke_algebras_summary': hecke_algebras_summary}
608 changes: 608 additions & 0 deletions lmfdb/hecke_algebras/main.py

Large diffs are not rendered by default.

7 changes: 7 additions & 0 deletions lmfdb/hecke_algebras/templates/hecke_algebras-error.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{% extends "homepage.html" %}

{% block content %}
<div>
<input type=button value="Back" onClick="history.go(-1)">
</div>
{% endblock %}
105 changes: 105 additions & 0 deletions lmfdb/hecke_algebras/templates/hecke_algebras-index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
{% extends "homepage.html" %}
{% import 'color.css' as color %}
{% block content %}
{% if BETA %}
<div>
{{ KNOWL_INC('dq.hecke_algebras.extent') }}
</div>

<style type="text/css">
.error_message {
padding: 4px;
color: {{color.red}};
font-size: 120%;
font-weight: bold;
margin: 20px;
}
</style>
{% if err_msg %}
<p class="error_message">
{{err_msg}}
</p>
<p>
<input type=button value="Search again" onClick="history.go(-1)">
</p>
{% endif %}

<h2> Browse {{ KNOWL('hecke_algebra.definition', title='Hecke Algebras') }} for {{ KNOWL('group.sl2z.subgroup.gamma0n', title='$\Gamma_0$') }}</h2>

<p>
By {{ KNOWL('mf.elliptic.level', title='Level') }}:
{% for rnge in info.lvl_list %}
<a href="?level={{rnge}}">{{rnge}}</a>
{% endfor %}
</p>
<p>
By {{ KNOWL('mf.elliptic.weight', title='Weight') }}:
{% for rnge in info.wt_list%}
<a href="?weight={{rnge}}">{{rnge}}</a>
{% endfor %}
</p>

<p>
Some of our favourite {{ KNOWL('hecke_algebra.definition', title='Hecke Algebras') }}:
{% for rnge in info.favourite_list %}
<a href="?label={{rnge}}">&nbsp; {{rnge}} &nbsp;</a>
{% endfor %}
</p>
<p>A <a href={{url_for('.random_hecke_algebra')}}>random Hecke Algebra</a> from the database.
<br>
</p>



<h2> Find a specific {{ KNOWL('hecke_algebra.definition', title='Hecke Algebra') }} by {{KNOWL('hecke_algebras.label', title='label')}}</h2>

<form>
<input type='text' name='label' placeholder='1.12.1'>
<button type='submit'>Label</button>
<br><span class="formexample">e.g. 1.12.1, 139.2.1, 11.2.1</span>
</form>


<h2> Search </h2>

<p>Please enter a value or leave blank:</p>
<form>
<table>
<tr>
<td align= right>{{ KNOWL('mf.elliptic.level', title='Level') }}:</td>
<td><input type='text' name='level' placeholder='3' size=10>
<td><span class="formexample"> e.g. 3 or 2-5</td>
</tr>

<tr>
<td align= right>{{ KNOWL('mf.elliptic.weight', title='Weight') }}:</td>
<td><input type='text' name='weight' placeholder='1' size=10>
<td><span class="formexample"> e.g. 2 or 10-100</td>
</tr>
<tr>
<td align= right>Number of {{ KNOWL('mf.elliptic.hecke-orbit', title='Hecke orbits') }}:</td>
<td><input type='text' name='num_orbits' placeholder='4' size=10>
<td><span class="formexample"> e.g. 4 or 1-3</td>
</tr>
<tr>
<td align= right>{{ KNOWL('mf.elliptic.hecke-orbit-label', title='Hecke orbit label') }} :</td>
<td><input type='text' name='orbit_label' placeholder='1.12.1.1' size=10>
<td><span class="formexample"> e.g. 1.12.1.1 or 139.2.1.2</td>
</tr>

<tr>
<td align= right>Mod &#x2113; and &#x2113;-adic information:</td>
<td><input type='text' name='ell' placeholder='5' size=10>
<td><span class="formexample"> e.g. 5, any prime &#x2113;$<17$</td>
</tr>

<tr>
<td colspan=3><button type='submit' value='Search'>Search</button>
</td>
</tr>
</table>
</form>
{% else %}
<div>This data is not yet available.</div>
{% endif %}
{% endblock %}
116 changes: 116 additions & 0 deletions lmfdb/hecke_algebras/templates/hecke_algebras-search.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
{% extends 'homepage.html' %}
{% block content %}

<h2> Further refine search </h2>
<form id='re-search'>
<input type="hidden" name="start" value="{{info.start}}"/>
<table border="0">
<tr>
<td align=left>{{ KNOWL('mf.elliptic.level', title='Level') }}</td>
<td align=left>{{ KNOWL('mf.elliptic.weight', title='Weight') }}</td>
<td align=left>Number of {{ KNOWL('mf.elliptic.hecke-orbit', title='Hecke orbits') }}</td>
</tr>

<tr>
<td align=left><input type='text' name='level' size=10 value="{{info.level}}"></td>
<td align=left><input type='text' name='weight' size=10 value="{{info.weight}}"></td>
<td align=left><input type='text' name='num_orbits' size=10 value="{{info.num_orbits}}"></td>
</tr>



<tr>
<td align= left>{{KNOWL('mf.elliptic.hecke-orbit-label', title='Hecke orbit label')}}:</td>
<td align= left>Mod &#x2113; and &#x2113;-adic:</td>
</tr>
<tr>
<td align=left><input type='text' name='orbit_label' size=10 value="{{info.orbit_label}}"></td>
<td align=left><input type='text' name='ell' size=10 value="{{info.ell}}"></td>
</tr>

<tr>&nbsp;</tr>
<tr>
<td align=left colspan=2>Maximum number of Hecke Algebras to display</td>
<td align=left><input type='text' name='count' size=10 value={{info.count}}></td>
<td><button type='submit' size=10 value='refine'>Search again</button></td>
</tr>
</table>
</form>

{% if info.err is defined %}
<h2>Error</h2>
<div>
<!-- {{ info.err|safe }}-->
Either modify your search above or go <input type=button value="Back" onClick="history.go(-1)">
</div>
{% else %}
{% if info.report == "no matches" %}
<h2> No matches</h2>
{% else %}
<h2> Results ({{info.report}})
{% if info.start > 0 %}
<a href="#" class="navlink"
onclick="decrease_start_by_count_and_submit_form('re-search');return
false">Previous</A>
{% endif %}
{% if info.more > 0 %}
<a href="#" class="navlink" onclick="increase_start_by_count_and_submit_form('re-search');return false">Next</A>
{% endif %}
</h2>
<table>
<tr>
{% if info.ell %}
<th>{{KNOWL('hecke_algebras.orbit_label', title='Orbit label')}}</th>
<th>{{ KNOWL('mf.elliptic.level', title='Level') }}</th>
<th>{{ KNOWL('mf.elliptic.weight', title='Weight') }}</th>
</tr>
{% for a in info.hecke_algebras %}
<tr>
<td align='left'><a href="{{url_for('hecke_algebras.render_hecke_algebras_webpage', label=a.label)}}#{{a.index}}">{{a.orbit_label}} </a></td>
<td>{{a.level}}</td>
<td>{{a.weight}}</td>
</tr>
{% endfor %}

{% else %}
<th>{{KNOWL('hecke_algebras.label', title='Label')}}</th>
<th>{{ KNOWL('mf.elliptic.level', title='Level') }}</th>
<th>{{ KNOWL('mf.elliptic.weight', title='Weight') }}</th>
<th>Number of {{ KNOWL('mf.elliptic.hecke-orbit', title='Hecke orbits') }}</th>
</tr>
{% for a in info.hecke_algebras %}
<tr>
<td align='left'><a href="{{url_for('hecke_algebras.render_hecke_algebras_webpage', label=a.label)}}">{{a.label}} </a></td>
<td>{{a.level}}</td>
<td>{{a.weight}}</td>
<td>{{a.num_orbits}}</td>
</tr>
{% endfor %}
{% endif %}
</table>
<hr>
{% if info.start > 0 %}
<a href="#" class="navlink" onclick="decrease_start_by_count_and_submit_form('re-search');return false">Previous</A>
{% endif %}
{% if info.more > 0 %}
<a href="#" class="navlink" onclick="increase_start_by_count_and_submit_form('re-search');return false">Next</A></td>
{% endif %}
<br>

<form>
Download all search results for
<input type="submit" name="submit" value="gp">
<input type="submit" name="submit" value="sage">
<input type="submit" name="submit" value="magma">
<input type="hidden" name="download" value="1"/>
<input type="hidden" name="query" value="{{info.query}}"/>
</form>
{% endif %}
{% endif %}
<!--<br>-->
<!--{% if DEBUG %}-->
<!--<p class="tex2jax_ignore"> Results for database query {{ info.query }}</p>-->

<!--{% endif %}-->

{% endblock %}
76 changes: 76 additions & 0 deletions lmfdb/hecke_algebras/templates/hecke_algebras-single.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
{% extends "homepage.html" %}

{% block content %}

{% set KNOWL_ID = "hecke_algebra.%s"|format(info['label']) %}
<h2>{{ KNOWL_INC(KNOWL_ID+'.top',title='') }}</h2>

{% if info.num_orbits==0 %}

<div>The Hecke algebra with {{KNOWL('hecke_algebras.label', title='label')}} ${{info.label}}$ is trivial: there are no modular forms of level ${{info.level}}$ and weight ${{info.weight}}$.</div>

{% else %}
<table>
<tr><td align=right>{{ KNOWL('mf.elliptic.level', title='Level') }}:</td><td>{{info.level}}</td></tr>
<tr><td align=right>{{ KNOWL('mf.elliptic.weight', title='Weight') }}:</td><td>{{info.weight}}</td></tr>
<tr><td align=right>{{KNOWL('hecke_algebras.dimension', title='Dimension')}}:</td><td>{{info.dim_alg}}</td></tr>
<tr><td align=right>{{KNOWL('hecke_algebras.label', title='Label')}}:</td><td>{{info.label}}</td></tr>
</table>



{% if info.orbits %}
<h2>{{ KNOWL('mf.elliptic.hecke-orbit', title='Hecke orbits') }}</h2>
<div><table>
<tr><td align="center">{{KNOWL('hecke_algebras.label', title='Label')}}</td><td align="center">Dimension</td></tr>
{% for j in info.orbits %}
<tr><td align="center"><a href="#{{loop.index}}">{{j.orbit_label}}</a></td><td align="center">{{j.dim}}</td></tr>
{% endfor %}
</table></div>

</br>
{% for j in info.orbits %}
<hr>
<h3><a name="{{loop.index}}">{{ KNOWL('mf.elliptic.hecke-orbit', title='Hecke orbit')}} {{j.orbit_label}}</a></h3>
<table>
<tr><td align= right>{{ KNOWL('mf.elliptic.hecke-orbit', title='Hecke orbit')}} dimension:</td><td valign= bottom>{{j.dim}}</td></tr>
{% if j.hecke_op_display == [] %}
<tr><td align= right valign= top>Hecke operators:</td><td>Download the avaliable Hecke operators $T_n$ for $n\leq {{j.num_hecke_op}}$ for {% for e in j.download_op %} <a href="{{e[1]}}">{{e[0]}}</a>{% if not loop.last %}, {% endif %}{% endfor %}</td></tr>
{% else %}
<tr rowspan=2><td align= right valign= top>Hecke operators:</td><td>
{% for m in j.hecke_op_display %}
$T_{ {{m[0]}}} ={{m[1]}}${% if not loop.last %}, {% else %}...{% endif %}
{% endfor %}</td></tr>
<tr><td></td><td>Download the avaliable Hecke operators $T_n$ for $n\leq {{j.num_hecke_op}}$ for {% for e in j.download_op %} <a href="{{e[1]}}">{{e[0]}}</a>{% if not loop.last %}, {% endif %}{% endfor %}</td></tr>
{% endif %}
{%if j.Zbasis %}
{% if j.gen_display == [] %}
<tr><td align= right valign= top>$\Z$-basis:</td><td>Download the basis for {% for e in j.download_gen %} <a href="{{e[1]}}">{{e[0]}}</a>{% if not loop.last %}, {% endif %}{% endfor %}</td></tr>
{% else %}
<tr><td align= right valign= top>$\Z$-basis:</td><td>
{% for n in j.gen_display %}
${{n}}${% if not loop.last %}, {% endif %}
{% endfor %}</td></tr>
<tr><td></td><td>Download the basis for {% for e in j.download_gen %} <a href="{{e[1]}}">{{e[0]}}</a>{% if not loop.last %}, {% endif %}{% endfor %}</td></tr>
{% endif %}
<tr><td align= right>Discriminant as $\Z$-algebra:</td><td>
{% if j.discriminant ==1 %}
1
{% else %}
${{j.discriminant}}={% for k in j.disc_fac %}{{k[0]}}{% if k[1] !=1 %}^{ {{k[1]}} }{% endif %}{% if not loop.last %}\cdot {% endif %}{% endfor %}$
{% endif %}</td></tr>
<tr><td align= right>Inner twists:</td><td>{{j.inner_twists}}</td></tr>
<tr><td align= right>$\Q$-basis:</td><td>${% for n in j.Qbasis %}T_{ {{n}} }{% if not loop.last %}, {% endif %}{% endfor %}$</td></tr>
<tr><td align= right>{{KNOWL('hecke_algebras.generator', title='Generator')}} as $\Q$-algebra:</td><td>${% for n in j.Qalg_gen %}T_{ {{n}} }{% if not loop.last %}, {% endif %}{% endfor %}$</td></tr>
{% endif %}
</table>
<p>&nbsp;&nbsp;&nbsp;&#x2113;-adic and mod &#x2113; data for &#x2113;=
{% for i in info.l_adic %}
<a href="{{url_for('hecke_algebras.render_hecke_algebras_webpage_l_adic', orbit_label=j.orbit_label, prime=i)}}">{{i}}</a>{% if not loop.last %}, {% endif %}
{% endfor %}</p>
{% endfor %}
{% endif %}

{% endif %}

{% endblock %}
Loading