Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
2392542
Fixes error with top code snippet (assuming sage/magma snippet exists…
rvisser7 Aug 13, 2025
2afad70
Merge remote-tracking branch 'upstream/main'
rvisser7 Sep 14, 2025
4275af7
Initial commit for adding code snippets for Lie Type representations
rvisser7 Sep 15, 2025
8e11f18
Typo fixes, and added refactorsed Lie type constructions for top code…
rvisser7 Sep 15, 2025
05dea97
Added some more examples of GAP Lie type group families
rvisser7 Sep 15, 2025
d0fcb29
Some small linting fixes
rvisser7 Sep 15, 2025
940d095
autopep8 action fixes
rvisser7 Sep 15, 2025
a548c71
Merge pull request #7 from rvisser7/autopep8-patches
rvisser7 Sep 15, 2025
1c4a3ea
Added support for code snippets for Lie matrix groups using the given…
rvisser7 Sep 16, 2025
3cb03f6
Minor typo fixes
rvisser7 Sep 16, 2025
0b64698
Now prioritises Lie constructions which don't require using explicit …
rvisser7 Sep 16, 2025
ee58206
Now checks if q is prime in Lie representation
rvisser7 Sep 16, 2025
b4c6e55
autopep8 action fixes
rvisser7 Sep 16, 2025
9756f90
Merge pull request #8 from rvisser7/autopep8-patches
rvisser7 Sep 16, 2025
3c3d52a
Fixes some errors when q is prime
rvisser7 Sep 16, 2025
6b98bae
autopep8 action fixes
rvisser7 Sep 16, 2025
a56c6b8
Merge pull request #9 from rvisser7/autopep8-patches
rvisser7 Sep 16, 2025
4a1e518
Add some more supported families to GAP and Sage
rvisser7 Sep 17, 2025
9442688
Implemented the Lie type representations as a lazy attribute
rvisser7 Oct 19, 2025
3464210
Various bug fixes for Lie representations. Now prioritises first list…
rvisser7 Oct 19, 2025
cdb68e4
If no Lie type natively implemented in lang, now displays first liste…
rvisser7 Oct 19, 2025
cf3e819
autopep8 action fixes
rvisser7 Oct 19, 2025
affec84
Merge pull request #12 from rvisser7/autopep8-patches
rvisser7 Oct 19, 2025
5cc9d06
Merge branch 'LMFDB:main' into main
rvisser7 Oct 20, 2025
84af2cb
Updated Lie type representations to include 'G := ...'
rvisser7 Oct 24, 2025
5e1975b
Clean up comments
rvisser7 Oct 24, 2025
0c6e4ca
Fix spacing when displaying Galois groups for p-adic fields
rvisser7 Dec 5, 2025
7f5b7c6
Remove "latex_comma" utility function
rvisser7 Dec 5, 2025
2af5dea
Merge pull request #6793 from rvisser7/spacing
roed314 Dec 5, 2025
7ef3c09
Remove unnecessary dollar signs in Galois groups and elliptic curves …
rvisser7 Dec 5, 2025
eb41437
Fix the docstring for the comma() utility function
rvisser7 Dec 5, 2025
71a52d5
remove debugging output
rvisser7 Dec 5, 2025
d24174f
Merge pull request #6794 from rvisser7/typos
roed314 Dec 7, 2025
79e8fb8
autopep8 action fixes
roed314 Dec 7, 2025
85411c5
Merge pull request #6795 from LMFDB/autopep8-patches
roed314 Dec 7, 2025
0faacb0
Fix random object redirects using permanent (301) instead of temporar…
Copilot Dec 15, 2025
7c28056
modbrowse -> modulus
AndrewVSutherland Dec 19, 2025
e276b2b
fix modbrowse test
AndrewVSutherland Dec 19, 2025
7bfb8a0
fix lint error
AndrewVSutherland Dec 19, 2025
5645c51
fix modbrowse test
AndrewVSutherland Dec 19, 2025
6f55446
Merge pull request #6694 from rvisser7/main
roed314 Dec 19, 2025
078bff5
Merge pull request #6800 from AndrewVSutherland/charmodbrowse
roed314 Dec 19, 2025
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
4 changes: 2 additions & 2 deletions .github/workflows/matrix_includes.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,12 @@
"server": "devmirror"
},
{
"files": "lmfdb/tests/test_dynamic_knowls.py lmfdb/tests/test_root.py lmfdb/hecke_algebras/test_hecke_algebras.py lmfdb/tests/test_homepage.py lmfdb/elliptic_curves/test_ell_curves.py lmfdb/elliptic_curves/test_browse_page.py",
"files": "lmfdb/tests/test_dynamic_knowls.py lmfdb/tests/test_root.py lmfdb/hecke_algebras/test_hecke_algebras.py lmfdb/tests/test_homepage.py lmfdb/tests/test_random_redirects.py lmfdb/elliptic_curves/test_ell_curves.py lmfdb/elliptic_curves/test_browse_page.py",
"folders": "elliptic_curves hecke_algebras tests",
"server": "proddb"
},
{
"files": "lmfdb/tests/test_dynamic_knowls.py lmfdb/tests/test_root.py lmfdb/hecke_algebras/test_hecke_algebras.py lmfdb/tests/test_homepage.py lmfdb/elliptic_curves/test_ell_curves.py lmfdb/elliptic_curves/test_browse_page.py",
"files": "lmfdb/tests/test_dynamic_knowls.py lmfdb/tests/test_root.py lmfdb/hecke_algebras/test_hecke_algebras.py lmfdb/tests/test_homepage.py lmfdb/tests/test_random_redirects.py lmfdb/elliptic_curves/test_ell_curves.py lmfdb/elliptic_curves/test_browse_page.py",
"folders": "elliptic_curves hecke_algebras tests",
"server": "devmirror"
},
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/python-package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ jobs:
- name: checking that we didn't miss any test files
shell: bash -l {0}
# If this fails you need to update the file list above and file count
run: test $(find lmfdb -name 'test_*.py' -or -name '*_test.py' | wc -l) -eq 40
run: test $(find lmfdb -name 'test_*.py' -or -name '*_test.py' | wc -l) -eq 41

- name: Config LMFDB to run tests against proddb
if: matrix.files != 'lint' && matrix.server == 'proddb'
Expand Down
7 changes: 4 additions & 3 deletions lmfdb/bianchi_modular_forms/bianchi_modular_form.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
to_dict, web_latex_ideal_fact, flash_error, comma, display_knowl,
nf_string_to_label, parse_nf_string, parse_noop, parse_start, parse_count, parse_ints, parse_primes,
SearchArray, TextBox, SelectBox, ExcludeOnlyBox, CountBox, SubsetBox, TextBoxWithSelect,
teXify_pol, search_wrap, Downloader)
teXify_pol, search_wrap, Downloader, redirect_no_cache)
from lmfdb.utils.display_stats import StatsDisplay, totaler, proportioners
from lmfdb.utils.interesting import interesting_knowls
from lmfdb.utils.search_columns import SearchColumns, ProcessedCol, MultiProcessedCol
Expand Down Expand Up @@ -86,12 +86,13 @@ def index():
return bianchi_modular_form_search(info)

@bmf_page.route("/random")
@redirect_no_cache
def random_bmf(): # Random Bianchi modular form
res = db.bmf_forms.random(projection=['field_label', 'level_label', 'label_suffix'])
return redirect(url_for(".render_bmf_webpage",
return url_for(".render_bmf_webpage",
field_label=res['field_label'],
level_label=res['level_label'],
label_suffix=res['label_suffix']), 307)
label_suffix=res['label_suffix'])

@bmf_page.route("/interesting")
def interesting():
Expand Down
24 changes: 3 additions & 21 deletions lmfdb/characters/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from lmfdb.utils import (
to_dict, flash_error, SearchArray, YesNoBox, display_knowl, ParityBox,
TextBox, CountBox, parse_bool, parse_ints, search_wrap, raw_typeset_poly,
StatsDisplay, totaler, proportioners, comma, flash_warning, Downloader)
StatsDisplay, totaler, proportioners, comma, flash_warning, Downloader, redirect_no_cache)
from lmfdb.utils.interesting import interesting_knowls
from lmfdb.utils.search_parsing import parse_range3
from lmfdb.utils.search_columns import SearchColumns, MathCol, LinkCol, CheckCol, ProcessedCol, MultiProcessedCol
Expand All @@ -22,7 +22,6 @@
WebSmallDirichletGroup,
WebDBDirichletOrbit
)
from lmfdb.characters.ListCharacters import get_character_modulus
from lmfdb.characters import characters_page
from lmfdb import db

Expand Down Expand Up @@ -312,24 +311,6 @@ def dirichlet_character_search(info, query):
@characters_page.route("/Dirichlet")
@characters_page.route("/Dirichlet/")
def render_DirichletNavigation():
try:
if 'modbrowse' in request.args:
arg = request.args['modbrowse']
arg = arg.split('-')
modulus_start = int(arg[0])
modulus_end = int(arg[1])
info = {'args': request.args}
info['title'] = 'Dirichlet characters of modulus ' + str(modulus_start) + '-' + str(modulus_end)
info['bread'] = bread('Modulus')
info['learnmore'] = learn()
headers, entries, rows, cols = get_character_modulus(modulus_start, modulus_end, limit=8)
info['entries'] = entries
info['rows'] = list(range(modulus_start, modulus_end + 1))
info['cols'] = sorted({r[1] for r in entries})
return render_template("ModulusList.html", **info)
except (ValueError, IndexError) as err:
flash_error("Error raised in parsing: %s", err)

if request.args:
# hidden_search_type for prev/next buttons
info = to_dict(request.args, search_array=DirichSearchArray())
Expand Down Expand Up @@ -640,8 +621,9 @@ def ctx_dirchar():


@characters_page.route('/Dirichlet/random')
@redirect_no_cache
def random_Dirichletwebpage():
return redirect(url_for('.render_DirichletNavigation', search_type="Random"))
return url_for('.render_DirichletNavigation', search_type="Random")


@characters_page.route('/Dirichlet/interesting')
Expand Down
2 changes: 1 addition & 1 deletion lmfdb/characters/templates/CharacterNavigate.html
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ <h2> Browse </h2>
<table class="browse">
<tr>
<td>By {{ KNOWL('character.dirichlet.modulus', title="modulus") }}:</td>
<td>{% for rnge in info.modulus_list %} <a href="?modbrowse={{rnge}}">{{rnge}}</a>&nbsp;&nbsp; {% endfor %} $\cdots$</td>
<td>{% for rnge in info.modulus_list %} <a href="?modulus={{rnge}}">{{rnge}}</a>&nbsp;&nbsp; {% endfor %} $\cdots$</td>
</tr><tr>
<td>By {{ KNOWL('character.dirichlet.conductor', title="conductor") }}:</td>
<td>{% for rnge in info.conductor_list %} <a href="?conductor={{rnge}}">{{rnge}}</a>&nbsp;&nbsp; {% endfor %} $\cdots$</td>
Expand Down
4 changes: 2 additions & 2 deletions lmfdb/characters/test_characters.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ def test_even_odd(self):
assert '>%s</t' % (parity_string(-1)) in W.get_data(as_text=True)

def test_modbrowse(self):
W = self.tc.get('/Character/Dirichlet/?modbrowse=41-60')
assert 'Dirichlet/45/11' in W.get_data(as_text=True)
W = self.tc.get('/Character/Dirichlet/?modulus=41-60')
assert '46.d' in W.get_data(as_text=True)

def test_search(self):
W = self.tc.get('/Character/Dirichlet/?conductor=15&order=4')
Expand Down
2 changes: 1 addition & 1 deletion lmfdb/elliptic_curves/elliptic_curve.py
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ def short_summary(self):

@property
def summary(self):
return r'Currently, the database includes ${}$ {} over $\Q$ in ${}$ {}, with {} at most ${}$.'.format(self.ncurves_c, self.ec_knowl, self.nclasses_c, self.cl_knowl, self.cond_knowl, self.max_N_c)
return r'Currently, the database includes {} {} over $\Q$ in {} {}, with {} at most {}.'.format(self.ncurves_c, self.ec_knowl, self.nclasses_c, self.cl_knowl, self.cond_knowl, self.max_N_c)

table = db.ec_curvedata
baseurl_func = ".rational_elliptic_curves"
Expand Down
6 changes: 3 additions & 3 deletions lmfdb/galois_groups/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from lmfdb import db
from lmfdb.app import app
from lmfdb.utils import (
list_to_latex_matrix, flash_error, comma, latex_comma, to_dict, display_knowl,
list_to_latex_matrix, flash_error, comma, to_dict, display_knowl,
clean_input, prep_ranges, parse_bool, parse_ints, parse_galgrp,
SearchArray, TextBox, TextBoxNoEg, YesNoBox, ParityBox, CountBox,
StatsDisplay, totaler, proportioners, prop_int_pretty, Downloader,
Expand Down Expand Up @@ -596,8 +596,8 @@ def __init__(self):

@property
def summary(self):
return r"The database currently contains $%s$ transitive subgroups of $S_n$, including all subgroups (up to conjugacy) for $n \le 47$ and $n \ne 32$. Among the $2{,}801{,}324$ groups in degree $32$, all those with order less than $512$ or greater than $40{,}000{,}000{,}000$ are included." % latex_comma(self.ngroups)
return r"The database currently contains %s transitive subgroups of $S_n$, including all subgroups (up to conjugacy) for $n \le 47$ and $n \ne 32$. Among the $2{,}801{,}324$ groups in degree $32$, all those with order less than $512$ or greater than $40{,}000{,}000{,}000$ are included." % comma(self.ngroups)

@property
def short_summary(self):
return r'The database current contains $%s$ groups, including all transitive subgroups of $S_n$ (up to conjugacy) for $n \le 47$ and $n \ne 32$. Here are some <a href="%s">further statistics</a>.' % (latex_comma(self.ngroups), url_for(".statistics"))
return r'The database currently contains %s groups, including all transitive subgroups of $S_n$ (up to conjugacy) for $n \le 47$ and $n \ne 32$. Here are some <a href="%s">further statistics</a>.' % (comma(self.ngroups), url_for(".statistics"))
6 changes: 3 additions & 3 deletions lmfdb/groups/abstract/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
pos_int_and_factor,
sparse_cyclotomic_to_mathml,
integer_to_mathml,
redirect_no_cache,
)
from lmfdb.utils.search_parsing import (parse_multiset, search_parser, collapse_ors)
from lmfdb.utils.interesting import interesting_knowls
Expand Down Expand Up @@ -841,11 +842,10 @@ def dynamic_statistics():


@abstract_page.route("/random")
@redirect_no_cache
def random_abstract_group():
label = db.gps_groups.random(projection="label")
response = make_response(redirect(url_for(".by_label", label=label), 307))
response.headers["Cache-Control"] = "no-cache, no-store"
return response
return url_for(".by_label", label=label)


@abstract_page.route("/interesting")
Expand Down
Loading
Loading