Skip to content

Commit 67ee5c5

Browse files
authored
Merge pull request #6931 from rvisser7/dirichlet-patch
Small improvements to Dirichlet characters
2 parents 5231b23 + ff39535 commit 67ee5c5

12 files changed

Lines changed: 49 additions & 9 deletions

File tree

lmfdb/characters/code.yaml

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,16 @@ galois_orbit:
9494
order := Order(chi);
9595
{ chi^k : k in [1..order-1] | GCD(k,order) eq 1 };
9696
97+
value_field:
98+
comment: Field of values of chi
99+
sage: CyclotomicField(chi.multiplicative_order())
100+
pari: nfinit(polcyclo(charorder(g,chi)))
101+
magma: CyclotomicField(Order(chi));
102+
103+
kernel_field:
104+
comment: Fixed field
105+
sage: chi.fixed_field()
106+
97107
gauss_sum:
98108
comment: Gauss sum
99109
sage: chi.gauss_sum(a)
@@ -109,8 +119,9 @@ kloosterman_sum:
109119

110120
value:
111121
comment: Value of chi at x
112-
sage: chi(x) # x integer
113-
pari: chareval(g,chi,x) \\\\ x integer, value in Q/Z'
122+
sage: |
123+
chi(x) # x integer
124+
pari: chareval(g,chi,x) \\ x integer, value in Q/Z
114125
magma: chi(x)
115126

116127

lmfdb/characters/main.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,6 @@ def dirichlet_character_search(info, query):
308308
common_parse(info, query)
309309

310310

311-
@characters_page.route("/Dirichlet")
312311
@characters_page.route("/Dirichlet/")
313312
def render_DirichletNavigation():
314313
if request.args:
@@ -416,7 +415,6 @@ def make_webchar(args, get_bread=False):
416415
return WebSmallDirichletCharacter(**args)
417416

418417

419-
@characters_page.route("/Dirichlet/<modulus>")
420418
@characters_page.route("/Dirichlet/<modulus>/")
421419
@characters_page.route("/Dirichlet/<int:modulus>/<int:number>")
422420
@characters_page.route("/Dirichlet/<int:modulus>/<orbit_label>") # orbit_label is a Cremona_letter_code identifying the orbit
@@ -557,6 +555,8 @@ def dirchar_code_download(label, download_type):
557555
Render a text page to download all Magma/Sage/PariGP code snippets for the various Dirichlet character pages
558556
Returns code snippets for either the individual Dirichet character, character orbit, or character group, depending on label
559557
"""
558+
sorted_code_names = ['character_init', 'kronecker_symbol', 'modulus', 'conductor', 'order',
559+
'is_real', 'is_primitive', 'parity', 'value_field', 'kernel_field']
560560
try:
561561
if label.count(".") == 0:
562562
# Group of Dirichlet characters
@@ -567,12 +567,11 @@ def dirchar_code_download(label, download_type):
567567
# Orbit of Dirichlet characters
568568
modulus, orbit_label = label.split(".")
569569
dc = make_webchar({'type':'Dirichlet', 'modulus':modulus, 'orbit_label':orbit_label})
570-
sorted_code_names = ['character_init', 'kronecker_symbol', 'modulus', 'conductor', 'order', 'is_real', 'is_primitive', 'parity']
571570
elif label.count(".") == 2:
572571
# Individual Dirichlet character
573572
modulus, orbit_label, number = label.split(".")
574573
dc = make_webchar({'type':'Dirichlet', 'modulus':modulus, 'orbit_label':orbit_label, 'number':number})
575-
sorted_code_names = ['character_init', 'kronecker_symbol', 'modulus', 'conductor', 'order', 'is_real', 'is_primitive', 'parity', 'galois_orbit']
574+
sorted_code_names.insert(8, 'galois_orbit')
576575
else:
577576
return abort(404, f"Invalid label {label}")
578577
if label.count(".") > 0 and dc.symbol_numerator() is None:

lmfdb/characters/templates/CharacterCommon.html

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,14 +83,13 @@ <h2>
8383
{% if valuefield %}
8484
<tr>
8585
<td> {{KNOWL('character.dirichlet.value_field',title='Field of values')}}:</td>
86-
<td> {{ valuefield | safe }} </td>
86+
<td> {{ valuefield | safe }} </td> <td>{{ place_code('value_field') }}</td>
8787
</tr>
8888
{% endif %}
8989
{% if kerfield %}
9090
<tr>
9191
<td>{{ KNOWL('character.dirichlet.field_cut_out',title='Fixed field') }}:</td>
92-
<td> {{ kerfield | safe }}
93-
</td>
92+
<td> {{ kerfield | safe }} </td> <td>{{ place_code('kernel_field') }}</td>
9493
</tr>
9594
{% endif %}
9695
</table>

lmfdb/characters/web_character.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -800,6 +800,13 @@ def title(self):
800800
def order(self):
801801
return euler_phi(self.modulus)
802802

803+
@cached_method
804+
def code_snippets(self):
805+
code = super().code_snippets()
806+
# Adjust frontmatter for constructing group of Dirichlet characters
807+
code["frontmatter"]["all"] = code["frontmatter"]["all"].replace("character", "character group of modulus")
808+
return code
809+
803810

804811
class WebDBDirichletGroup(WebDirichletGroup, WebDBDirichlet):
805812
"""
@@ -994,6 +1001,8 @@ def code_snippets(self):
9941001
# Sage code in special case for modulus 1
9951002
if self.modulus == 1:
9961003
self._genvalues_for_code = []
1004+
# Sage throws error for "chi.fixed_field()" if modulus is 1
1005+
code['kernel_field'].pop('sage')
9971006

9981007
data = {'modulus': self.modulus, 'number' : self.number,
9991008
'symbol_num' : self.symbol_numerator(),

lmfdb/tests/snippet_tests/characters/code-1.a.1-gp.log

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,6 @@ gp> order = charorder(g,chi)
1717
1
1818
gp> [ charpow(g,chi, k % order) | k <-[1..order-1], gcd(k,order)==1 ]
1919
[]
20+
gp> nfinit(polcyclo(charorder(g,chi)))
21+
[x - 1, [1, 0], 1, 1, [Mat(1), Mat(1), Mat(16), Mat(1), 1, Mat(1), [1, 0], []], [1.0000000000000000000000000000000000000], [1], Mat(1), Mat(1)]
2022
gp>

lmfdb/tests/snippet_tests/characters/code-1.a.1-sage.log

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,6 @@ sage: chi.is_odd()
1717
False
1818
sage: chi.galois_orbit()
1919
[Dirichlet character modulo 1 of conductor 1]
20+
sage: CyclotomicField(chi.multiplicative_order())
21+
Cyclotomic Field of order 1 and degree 1
2022
sage:

lmfdb/tests/snippet_tests/characters/code-3.b-gp.log

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,6 @@ gp> #znconreyconductor(g,chi)==1
1919
1
2020
gp> zncharisodd(g,chi)
2121
1
22+
gp> nfinit(polcyclo(charorder(g,chi)))
23+
[x + 1, [1, 0], 1, 1, [Mat(1), Mat(1), Mat(16), Mat(1), 1, Mat(1), [1, 0], []], [-1.0000000000000000000000000000000000000], [1], Mat(1), Mat(1)]
2224
gp>

lmfdb/tests/snippet_tests/characters/code-3.b-sage.log

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,8 @@ sage: chi.is_primitive()
1919
True
2020
sage: chi.is_odd()
2121
True
22+
sage: CyclotomicField(chi.multiplicative_order())
23+
Cyclotomic Field of order 2 and degree 1
24+
sage: chi.fixed_field()
25+
Number Field in a with defining polynomial x^2 + x + 1
2226
sage:

lmfdb/tests/snippet_tests/characters/code-5.c.2-gp.log

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,6 @@ gp> order = charorder(g,chi)
1717
4
1818
gp> [ charpow(g,chi, k % order) | k <-[1..order-1], gcd(k,order)==1 ]
1919
[[1]~, [3]~]
20+
gp> nfinit(polcyclo(charorder(g,chi)))
21+
[x^2 + 1, [0, 1], -4, 1, [Mat([1, 0.E-57 + 1.0000000000000000000000000000000000000*I]), [1, 1.0000000000000000000000000000000000000; 1, -1.0000000000000000000000000000000000000], [16, 16; 16, -16], [2, 0; 0, -2], [2, 0; 0, 2], [1, 0; 0, -1], [1, [0, -1; 1, 0]], [2]], [0.E-57 + 1.0000000000000000000000000000000000000*I], [1, x], [1, 0; 0, 1], [1, 0, 0, -1; 0, 1, 1, 0]]
2022
gp>

lmfdb/tests/snippet_tests/characters/code-5.c.2-sage.log

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,8 @@ True
1818
sage: chi.galois_orbit()
1919
[Dirichlet character modulo 5 of conductor 5 mapping 2 |--> -zeta4,
2020
Dirichlet character modulo 5 of conductor 5 mapping 2 |--> zeta4]
21+
sage: CyclotomicField(chi.multiplicative_order())
22+
Cyclotomic Field of order 4 and degree 2
23+
sage: chi.fixed_field()
24+
Number Field in a with defining polynomial x^4 + x^3 + x^2 + x + 1
2125
sage:

0 commit comments

Comments
 (0)