Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
67 commits
Select commit Hold shift + click to select a range
13fbf65
First pass at adding Oscar and Sage to constructed group downloads
rvisser7 Mar 23, 2026
10a8ed3
Recognize group family aliases like Sp(2,q)=SL(2,q) in jump search (L…
roed314 Jul 19, 2026
8cd0fd4
Keep knowl expansion from shifting table columns on /rcs (LMFDB#6501)
roed314 Jul 19, 2026
4de8aa2
Add nicknames for unramified and tame p-adic fields (LMFDB#6201)
roed314 Jul 19, 2026
295e97d
Merge remote-tracking branch 'upstream/main' into abstract_groups_2
rvisser7 Jul 26, 2026
2fddeaf
Merge LMFDB main into abstract_groups_2
rvisser7 Jul 26, 2026
b7d09c0
Further work on adding Sage and Oscar download files for abstract groups
rvisser7 Jul 26, 2026
4dc80a6
Further additions to adding downloads for Sage and Oscar, with some h…
rvisser7 Jul 26, 2026
48fbe15
Further progress on Sage,Oscar group downloads...
rvisser7 Jul 26, 2026
9069a33
Add Oscar code snippet for PCGroup, using GAP interface
rvisser7 Jul 26, 2026
a441b44
Updated generate_snippet_tests to handle multiline inputs for Sage an…
rvisser7 Jul 26, 2026
196785d
Add new snippet log files in Sage for group construction downloads
rvisser7 Jul 26, 2026
e55b1a4
Correct error with Sage and GAP group names, and updated Sage group c…
rvisser7 Jul 26, 2026
4dc16fc
Some further improvements to Sage and Oscar downloads for groups
rvisser7 Jul 27, 2026
9b4386b
Fix linting tests
rvisser7 Jul 27, 2026
246eb0c
Fix linting tests (2nd attempt)
rvisser7 Jul 27, 2026
b89ed42
First pass at initialising the random seed in code snippet testing
rvisser7 Jul 31, 2026
67d563d
First pass at regenerating snippet logs (no random set seed)
rvisser7 Jul 31, 2026
8d18a46
Regenerate snippet log files now using set seed
rvisser7 Jul 31, 2026
1922f84
Second pass at regenerating all code snippet log files with set seed
rvisser7 Jul 31, 2026
f20a826
fix: show exponent one for cusp orbit sizes
tomatotomata Aug 1, 2026
8ae1c91
Small updates to set random seed in generate_snippet_test.py file
rvisser7 Aug 2, 2026
df0ccc4
Merge remote-tracking branch 'upstream/main' into wt/ai/t39-padic-nic…
roed314 Aug 4, 2026
30fd86d
Merge remote-tracking branch 'upstream/main' into wt/ai/t21-rcs-knowl…
roed314 Aug 4, 2026
6520707
Merge remote-tracking branch 'upstream/main' into wt/ai/t09-group-fam…
roed314 Aug 4, 2026
8695d51
Cover every family alias and both valid_params branches in tests (LMF…
roed314 Aug 5, 2026
0dc6c22
Don't make the outer table knowl box a horizontal scroll container
roed314 Aug 5, 2026
214d1d8
Check the bound in PrimeBound
roed314 Aug 5, 2026
0e9129d
Merge pull request #7128 from roed-math/primebound-bound-check
roed314 Aug 5, 2026
065027c
Merge pull request #7104 from tomatotomata/codex/cusp-orbit-exponents…
AndrewVSutherland Aug 5, 2026
5dde4cd
Merge pull request #7103 from rvisser7/random_seed
roed314 Aug 5, 2026
99b48f6
Merge branch 'main' into abstract_groups_2
rvisser7 Aug 6, 2026
6e2c4a7
Add two more tests for the group code download pages
rvisser7 Aug 6, 2026
8937f1d
Add new group snippet log files for code download pages
rvisser7 Aug 6, 2026
febb2d5
Apply various fixes to the code download pages for abstract groups
rvisser7 Aug 6, 2026
a672abd
Regenerate log files for group code download pages
rvisser7 Aug 6, 2026
f5785bd
Merge pull request #7156 from roed-math/ai/t21-rcs-knowl-layout
roed314 Aug 6, 2026
6a12bb3
Use American spelling in comments, docstrings, and page text
roed314 Aug 6, 2026
8716f78
Rename British-spelled internal identifiers
roed314 Aug 6, 2026
f40c920
Give test database connections a statement timeout
roed314 Aug 6, 2026
0f2ecf0
Let the Dirichlet character search test tolerate a timeout
roed314 Aug 6, 2026
4a47e8d
Fail a wedged test job in an hour instead of six
roed314 Aug 6, 2026
a38c544
Actually exercise the primitive and parity filters in test_search
roed314 Aug 6, 2026
f118274
Trim the test_search comments
roed314 Aug 7, 2026
ba3943d
Merge pull request #7181 from roed-math/ci-test-statement-timeout
edgarcosta Aug 7, 2026
7acfc0f
Trigger CI re-run
roed314 Aug 7, 2026
bd10f7c
Merge pull request #7180 from roed-math/american-spelling
roed314 Aug 7, 2026
fb94c0d
Accept the family names printed on group pages in the jump box
roed-math Aug 7, 2026
6db3d49
Pin down what each family name alias resolves to
roed-math Aug 7, 2026
7b77062
Merge pull request #7182 from roed-math/ai/t09b-family-name-aliases
roed314 Aug 7, 2026
e2039c3
Merge pull request #7162 from roed-math/ai/t39-padic-nicknames
jwj61 Aug 8, 2026
464fb92
add sha_proved handling
AndrewVSutherland Aug 8, 2026
af788d4
Raise CI statement timeout to 10 minutes
roed-math Aug 9, 2026
f08ead0
Run intrinsic completeness contradictions before null checks
roed-math Aug 9, 2026
e232f9c
Limit test matrix database concurrency
roed-math Aug 9, 2026
470e5be
Merge pull request #7184 from roed-math/ci-statement-timeout-10min
roed314 Aug 9, 2026
2e6a262
Decline null-semantics predicates in the completeness precheck
roed-math Aug 9, 2026
92a75f5
Merge pull request #7185 from roed-math/completeness-precheck-ci-conc…
roed314 Aug 9, 2026
32ac6b3
Fix power map keys in code downloads
rvisser7 Aug 12, 2026
9ca7ce0
Minor fixes for Lie type representations in group code download files
rvisser7 Aug 12, 2026
3416e0b
Regenerate code download snippet log files for abstract groups
rvisser7 Aug 12, 2026
f7a9a72
Merge pull request #7082 from rvisser7/abstract_groups_2
edgarcosta Aug 12, 2026
2a5ebe2
autopep8 action fixes
edgarcosta Aug 12, 2026
e2e4982
Merge pull request #7186 from LMFDB/autopep8-patches
edgarcosta Aug 12, 2026
2a95ea3
Completeness for NF
jwj61 Aug 17, 2026
674c357
Merge pull request #7192 from jwj61/nfcomplete
roed314 Aug 22, 2026
fea1c3d
Merge pull request #7183 from AndrewVSutherland/g2c_sha_proved
AndrewVSutherland Aug 28, 2026
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
9 changes: 9 additions & 0 deletions .github/workflows/python-package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,17 @@ jobs:
test:
runs-on: ubuntu-latest
needs: matrix_prep
# A healthy job finishes well inside half an hour; the slowest green ones
# observed are around 25 minutes, and that includes building the conda
# environment on a cache miss. GitHub's default is six hours, which is long
# enough for a job stuck on the database to hold a runner all morning -- one
# recently ran for five and a half. Fail such a job in an hour instead.
timeout-minutes: 60
strategy:
# The devmirror shards share one database. Bound concurrent jobs so required
# functional CI does not become an uncontrolled database load test.
fail-fast: false
max-parallel: 6
matrix: ${{fromJson(needs.matrix_prep.outputs.matrix)}}
name: ${{matrix.server}} ${{matrix.folders}}
steps:
Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTORS.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# This is the list of contributors to LMFDB
# They are listed on /acknowledgement and maybe elsewhere
# They are listed on /acknowledgment and maybe elsewhere
# the 'name' field is mandatory, all others currently optional
# - affil: university or company affiliation
# - url: homepage
Expand Down
2 changes: 1 addition & 1 deletion lmfdb/api2/templates/api2.html
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ <h2 id="api2-requests">API2 requests</h2>
<li><p><a class="uri">/api2/inventory/&lt;searcher&gt;</a> - Describe the list of possible fields that can be returned by a searcher</p></li>
<li><p><a class="uri">/api2/data/&lt;searcher&gt;</a> - Perform a search using a given searcher. Query parameters taken from the searcher description are provided as an ampersand delimited query string to this endpoint. Non searching parameters are available and are all prepended by “_”</p></li>
<li><p><a class="uri">/api2/pretty/&lt;other_path&gt;</a> - This takes a valid other API path and produces a human readable (just) HTML page from the data contained. The other path should be the part after “api2” in the URL</p></li>
<li><p><a class="uri">/api2/singleton/&lt;path&gt;</a> - This is intended to provide a URL that allows canonical reference to a single element of the database. The format of the singletons is not standardised and should not in general be used for machine readable access</p></li>
<li><p><a class="uri">/api2/singleton/&lt;path&gt;</a> - This is intended to provide a URL that allows canonical reference to a single element of the database. The format of the singletons is not standardized and should not in general be used for machine readable access</p></li>
<li><p><a class="uri">/api2/livepg/&lt;database&gt;</a> - This is intended to replicate the behavior of the existing API. By specifying a database name and then using a standard search string (as per the /data/&lt;searcher&gt; endpoint) a search is performed on the raw database. This is not intended for normal access, but for debugging and testing purposes only.</p></li>
</ul>
<h3 id="api2-singletons">API2 singleton queries</h3>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
{% endif %}
<p>{{info.report | safe}}
{# we have to decide which option is preselected
based on a judgement of what users will want to
based on a judgment of what users will want to
switch to, i.e. one of the other two options. For
simplicity I have used the 3-cycle new -> all ->
cusp -> new. #}
Expand Down
2 changes: 1 addition & 1 deletion lmfdb/bianchi_modular_forms/web_BMF.py
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ def __init__(self, dbdata, max_eigs=50):
- dbdata: the data from the database

dbdata is expected to be a database entry from which the class
is initialised.
is initialized.

"""
self.__dict__.update(dbdata)
Expand Down
37 changes: 24 additions & 13 deletions lmfdb/characters/test_characters.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,18 +35,29 @@ def test_modbrowse(self):
assert '46.d' in W.get_data(as_text=True)

def test_search(self):
W = self.tc.get('/Character/Dirichlet/?conductor=15&order=4')
assert r'15.e' in W.get_data(as_text=True)
W = self.tc.get('/Character/Dirichlet/?conductor=25-50&order=5-7')
assert r'25.d' in W.get_data(as_text=True)
W = self.tc.get('/Character/Dirichlet/?conductor=25-50&order=5-7&primitive=Yes')
assert r'25.d' in W.get_data(as_text=True)
W = self.tc.get('/Character/Dirichlet/?conductor=25-50&order=5-7&primitive=No')
assert r'50.d' in W.get_data(as_text=True)
W = self.tc.get('/Character/Dirichlet/?conductor=25-50&order=5-7&primitive=No&parity=Odd')
assert r'56.n' in W.get_data(as_text=True)
W = self.tc.get('/Character/Dirichlet/?conductor=25-50&order=5-7&primitive=No&parity=Even')
assert r'50.d' in W.get_data(as_text=True)
# Each filter is checked in both directions, so a parameter that stops
# being parsed widens the search and trips a negative assertion.
# Conductor 16, order 4 has a primitive even orbit (16.e), a primitive
# odd one (16.f), and imprimitive counterparts at modulus 32. Labels
# carry their tags, since a bare '16.e' also matches '416.e'.
page = self.tc.get('/Character/Dirichlet/?conductor=15&order=4').get_data(as_text=True)
assert '>15.e<' in page
page = self.tc.get('/Character/Dirichlet/?conductor=16&order=4&is_primitive=no').get_data(as_text=True)
assert '>32.e<' in page and '>32.f<' in page
assert '>16.e<' not in page and '>16.f<' not in page
page = self.tc.get('/Character/Dirichlet/?conductor=16&order=4&parity=even').get_data(as_text=True)
assert '>16.e<' in page and '>32.e<' in page
assert '>16.f<' not in page and '>32.f<' not in page
page = self.tc.get('/Character/Dirichlet/?conductor=16&order=4&parity=odd').get_data(as_text=True)
assert '>16.f<' in page and '>32.f<' in page
assert '>16.e<' not in page and '>32.e<' not in page
page = self.tc.get('/Character/Dirichlet/?conductor=16&order=4&is_primitive=no&parity=odd').get_data(as_text=True)
assert '>32.f<' in page
assert '>16.e<' not in page and '>16.f<' not in page and '>32.e<' not in page
# A conductor range matches no index prefix, so this one reads every
# orbit of conductor 25-50 before it can sort; allow the timeout page.
self.check_args_with_timeout(
'/Character/Dirichlet/?conductor=25-50&order=5-7', '>25.d<')

def test_condsearch(self):
W = self.tc.get('/Character/Dirichlet/?conductor=111')
Expand Down Expand Up @@ -131,7 +142,7 @@ def test_dirichletgalorbs(self):
r'<td class="center">\(e\left(\frac{115}{714}\right)\)</td>')
assert table_row in W.get_data(as_text=True)

# Tests for URL behaviour of characters
# Tests for URL behavior of characters

W = self.tc.get('/Character/Dirichlet/5489/banana/100', follow_redirects=True)
assert bool_string(True) in W.get_data(as_text=True)
Expand Down
6 changes: 3 additions & 3 deletions lmfdb/classical_modular_forms/web_newform.py
Original file line number Diff line number Diff line change
Expand Up @@ -1028,9 +1028,9 @@ def display_hecke_char_polys(self, num_disp=5):
th_wrap('charpoly', '$F_p(T)$'),
' </tr>', '</thead>', '<tbody>']
loop_count = 0
for p, factorisation in hecke_polys_orbits.items():
factorisation.sort(key=lambda elt: (elt[0].degree(), elt[1]))
charpoly = raw_typeset_poly_factor(factorisation, decreasing=True)
for p, factorization in hecke_polys_orbits.items():
factorization.sort(key=lambda elt: (elt[0].degree(), elt[1]))
charpoly = raw_typeset_poly_factor(factorization, decreasing=True)
if loop_count < num_disp:
polys.append(' <tr>')
else:
Expand Down
6 changes: 3 additions & 3 deletions lmfdb/ecnf/WebEllipticCurve.py
Original file line number Diff line number Diff line change
Expand Up @@ -215,12 +215,12 @@ def EC_R_plot_zone(f,h):
return plot_zone_union(EC_R_plot_zone_piece(f,h,ZF[0],ZF[1]),EC_R_plot_zone_piece(f,h,ZF[2],2*xi-ZF[2]))
return EC_R_plot_zone_piece(f,h,ZF[0],2*ZF[1]-ZF[0])

def EC_R_plot(ainvs, xmin, xmax, ymin, ymax, colour, legend):
def EC_R_plot(ainvs, xmin, xmax, ymin, ymax, color, legend):
x = var('x')
y = var('y')
c = (xmin + xmax) / 2
d = (xmax - xmin)
return implicit_plot(y ** 2 + ainvs[0] * x * y + ainvs[2] * y - x ** 3 - ainvs[1] * x ** 2 - ainvs[3] * x - ainvs[4], (x, xmin, xmax), (y, ymin, ymax), plot_points=500, aspect_ratio="automatic", color=colour) + plot(0, xmin=c - 1e-5 * d, xmax=c + 1e-5 * d, ymin=ymin, ymax=ymax, aspect_ratio="automatic", color=colour, legend_label=legend) # Add an extra plot outside the visible frame because implicit plots are buggy: their legend does not show (https://trac.sagemath.org/ticket/15903)
return implicit_plot(y ** 2 + ainvs[0] * x * y + ainvs[2] * y - x ** 3 - ainvs[1] * x ** 2 - ainvs[3] * x - ainvs[4], (x, xmin, xmax), (y, ymin, ymax), plot_points=500, aspect_ratio="automatic", color=color) + plot(0, xmin=c - 1e-5 * d, xmax=c + 1e-5 * d, ymin=ymin, ymax=ymax, aspect_ratio="automatic", color=color, legend_label=legend) # Add an extra plot outside the visible frame because implicit plots are buggy: their legend does not show (https://trac.sagemath.org/ticket/15903)

Rx = PolynomialRing(RDF,'x')

Expand All @@ -238,7 +238,7 @@ def EC_nf_plot(K, ainvs, base_field_gen_name):
xmax = max([r[1] for r in R])
ymin = min([r[2] for r in R])
ymax = max([r[3] for r in R])
cols = rainbow(n1) # Default choice of n colours
cols = rainbow(n1) # Default choice of n colors
# However, these tend to be too pale, so we preset them for small values of n
if n1 == 1:
cols = ["blue"]
Expand Down
2 changes: 1 addition & 1 deletion lmfdb/ecnf/test_ecnf.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ def test_j(self):
L = self.tc.get('/EllipticCurve/2.0.4.1/5525.5/b/9')
assert '226834389543384' in L.get_data(as_text=True)
assert '1490902050625' in L.get_data(as_text=True)
L = self.tc.get('EllipticCurve/2.2.89.1/81.1/a/1') # Test factorisation
L = self.tc.get('EllipticCurve/2.2.89.1/81.1/a/1') # Test factorization
assert '8798344145175011328000' in L.get_data(as_text=True)

def test_download(self):
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 @@ -654,7 +654,7 @@ def elliptic_curve_search(info, query):
info['galois_image'] = ','.join(modell_labels + elladic_labels)
query['modell_images'] = { '$contains': modell_labels }

# The button which used to be labelled Optimal only no/yes"
# The button which used to be labeled Optimal only no/yes"
# (default: no) has been renamed "Curves per isogeny class
# all/one" (default: all). When this option is "one" we only list
# one curve in each class, currently choosing the curve with
Expand Down
2 changes: 1 addition & 1 deletion lmfdb/elliptic_curves/isog_class.py
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ def make_class(self):
from sage.matrix.all import Matrix
M = classdata['isogeny_matrix']

# permute rows/cols to match labelling: the rows/cols in the
# permute rows/cols to match labeling: the rows/cols in the
# ec_classdata table are with respect to LMFDB ordering.
if self.label_type == 'Cremona':
def perm(i): return next(c for c in self.curves if c['Cnumber'] == i+1)['lmfdb_number']-1
Expand Down
2 changes: 1 addition & 1 deletion lmfdb/elliptic_curves/templates/congruent_number_data.html
Original file line number Diff line number Diff line change
Expand Up @@ -255,7 +255,7 @@ <h3>Distribution of &#1064;</h3>
Over half the curves ($574,290$) have trivial &#1064;. The largest value seen is $7396 = 86^2$, for $n=719057$.
</p>

<h2>Credit and acknowledgements</h2>
<h2>Credit and acknowledgments</h2>

<p>
The data files were created by Randall L. Rathbun on February 14, 2013
Expand Down
2 changes: 1 addition & 1 deletion lmfdb/elliptic_curves/templates/ec-isoclass.html
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ <h2>{{ KNOWL('ec.isogeny_matrix',title='Isogeny matrix') }}</h2>
<h2> {{ KNOWL('ec.isogeny_graph', title='Isogeny graph') }} </h2>
{{ place_code('isogeny_graph') }}
{% if info.class_size > 1 %}
<p>The vertices are labelled with {{info.label_type}} labels, and the {{ KNOWL('ec.q.optimal', title='\( \Gamma_0(N) \)-optimal') }} curve is highlighted in blue.</p>
<p>The vertices are labeled with {{info.label_type}} labels, and the {{ KNOWL('ec.q.optimal', title='\( \Gamma_0(N) \)-optimal') }} curve is highlighted in blue.</p>
{% endif %}
<div id="isogeny-graph"></div>

Expand Down
6 changes: 3 additions & 3 deletions lmfdb/elliptic_curves/test_ell_curves.py
Original file line number Diff line number Diff line change
Expand Up @@ -174,10 +174,10 @@ def test_torsion_growth(self):

def test_990h(self):
"""
Test the exceptional 990h/990.i optimal labelling.
Test the exceptional 990h/990.i optimal labeling.
"""
# The isogeny class 990h (Cremona labelling) or 990.i (LMFDB labelling)
# has a different Gamma-optimal curve in its labelling than all others.
# The isogeny class 990h (Cremona labeling) or 990.i (LMFDB labeling)
# has a different Gamma-optimal curve in its labeling than all others.
L = self.tc.get('/EllipticCurve/Q/990/i/')
row = '\n'.join([
'<td class="center"><a href="/EllipticCurve/Q/990h3/">990h3</a></td>',
Expand Down
2 changes: 1 addition & 1 deletion lmfdb/elliptic_curves/web_ec.py
Original file line number Diff line number Diff line change
Expand Up @@ -520,7 +520,7 @@ def red(p):
# Optimality

# The optimal curve in the class is the curve whose Cremona
# label ends in '1' except for '990h' which was labelled
# label ends in '1' except for '990h' which was labeled
# wrongly long ago. This is proved for N up to
# OPTIMALITY_BOUND (and when there is only one curve in an
# isogeny class, obviously) and expected for all N.
Expand Down
2 changes: 1 addition & 1 deletion lmfdb/genus2_curves/templates/g2c_curve.html
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ <h2> {{KNOWL('g2c.bsd_invariants', 'BSD invariants')}} </h2>
<tr><td>{{ KNOWL('lfunction.leading_coeff', 'Leading coefficient') }}:</td>
<td>{% if data.leading_coefficient == 'unknown' %} unknown {% else %} \( {{ data.leading_coeff }} \) {% endif %}</td></tr>
<tr><td>{{ KNOWL('g2c.analytic_sha', 'Analytic order of &#1064;') }}:</td>
<td>{% if data.analytic_sha != 0 %} \( {{data.analytic_sha}} \) &nbsp;&nbsp;(rounded) {% else %} unknown {% endif %}</td></tr>
<td>{% if data.analytic_sha != 0 %} \( {{data.analytic_sha}} \) &nbsp;&nbsp;{% if data.sha_proved %}(verified) {% else %}(rounded){% endif %} {% else %}unknown{% endif %}</td></tr>
<tr><td>{{ KNOWL('g2c.has_square_sha', 'Order of &#1064;') }}:</td><td>{{data.has_square_sha}}</td></tr>
</table>
</p>
Expand Down
1 change: 1 addition & 0 deletions lmfdb/genus2_curves/web_g2c.py
Original file line number Diff line number Diff line change
Expand Up @@ -858,6 +858,7 @@ def make_object(self, curve, endo, tama, ratpts, clus, galrep, nonsurj, is_curve
data['mw_rank_proved'] = curve['mw_rank_proved']
data['analytic_rank_proved'] = curve['analytic_rank_proved']
data['hasse_weil_proved'] = curve['hasse_weil_proved']
data['sha_proved'] = curve.get('sha_proved',False)
data['st_group'] = curve['st_group']
data['st_group_link'] = st_display_knowl(curve['st_label'])
data['st0_group_name'] = st0_group_name(curve['real_geom_end_alg'])
Expand Down
35 changes: 35 additions & 0 deletions lmfdb/groups/abstract/code.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@ presentation:
sage_gap: |
# This uses Sage's interface to GAP, as Sage (currently) has no native support for PC groups
G = gap.new('PcGroupCode({pccode},{ordgp})'); {sage_gap_assign}
oscar: |
# This uses Oscar's interface to GAP, as Oscar (currently) has no native support for PC groups
G = PcGroup(GAP.evalstr("PcGroupCode({pccode},{ordgp})")); {oscar_assign}

permutation:
comment: Define the group as a permutation group
Expand Down Expand Up @@ -510,3 +513,35 @@ snippet_test:
testA5:
label: A5
url: Groups/Abstract/60.5/codedownload/{lang}

# Tests for the group construction download pages
# (incl. constructing the boolean invariants and character table)
testC1data:
label: C1-data
langs: [sage, magma]
url: Groups/Abstract/1.1/download/{lang}
testC5data:
label: C5-data
langs: [sage, magma]
url: Groups/Abstract/5.1/download/{lang}
testS3data:
label: S3-data
langs: [sage, magma]
url: Groups/Abstract/6.1/download/{lang}
testD4data:
label: D4-data
langs: [sage, magma]
url: Groups/Abstract/8.3/download/{lang}
testQ8data:
label: Q8-data
langs: [sage, magma]
url: Groups/Abstract/8.4/download/{lang}
test_matrix_reps_data:
label: "32_14-data"
langs: [sage, magma]
url: Groups/Abstract/32.14/download/{lang}
testA5data:
label: A5-data
langs: [sage, magma]
url: Groups/Abstract/60.5/download/{lang}

Loading
Loading