Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
AndrewVSutherland
GitHub Repository: AndrewVSutherland/lmfdb
Path: blob/main/scripts/siegel_modular_forms/Yoshida_Lift.py
1127 views
1
# This script was created using the 2012 paper of Johnson-Leung and Roberts.
2
3
# INPUTS:
4
# F is a real quadratic number field
5
# hhecke_evals is a dictionary of eigenvalues of a hilbert modular form over F. It should contain primes up to norm of primeprec**2
6
# hweight is the pair even integers that gives the weight of the hilbert modular form, no reason to default to [2,2]
7
# primeprec is the uper bound on the size of the rational primes which will have eigenvalues calculated
8
9
# OUTPUTS:
10
# Paramodular Level: An int
11
# Paramodular Weight: an Int
12
# T(1,1,p,p): a dictionary which has keys all the primes up to primeprec, and has values which are hecke eigenvalues
13
# T(1,p,p,p^2): See above
14
15
from sage.all import prime_range
16
17
18
def Yoshida_Lift(F, hhecke_evals, hlevel, hweight=[2, 2], primeprec=100):
19
weight = (hweight[1] + 2)//2
20
level = F.disc()**2*hlevel.norm()
21
lam = {}
22
mu = {}
23
for p in prime_range(primeprec):
24
v = level.valuation(p)
25
if v == 0:
26
if len(F.primes_above(p)) == 1:
27
lam[p] = 0
28
mu[p] = p**(2*(weight -3))*(-p**2 - p*hhecke_evals[F.prime_above(p)] - 1)
29
else:
30
lam[p] = p**(weight - 3)*p*(hhecke_evals[F.primes_above(p)[0]] + hhecke_evals[F.primes_above(p)[1]])
31
mu[p] = p**(2*(weight - 3))*(p**2 + p*hhecke_evals[F.primes_above(p)[0]]*hhecke_evals[F.primes_above(p)[1]] - 1)
32
if v == 1:
33
if hlevel.valuation(F.primes_above(p)[0]) == 1:
34
po = F.primes_above(p)[0]
35
pt = F.primes_above(p)[1]
36
else:
37
pt = F.primes_above(p)[0]
38
po = F.primes_above(p)[1]
39
lam[p] = p**(weight - 3)*(p*hhecke_evals[po] + (p + 1)*hhecke_evals[pt])
40
mu[p] = p**(2*(weight - 3))*(p*hhecke_evals[F.primes_above(p)[0]]*hhecke_evals[F.primes_above(p)[1]])
41
else:
42
if len(F.primes_above(p)) == 2:
43
lam[p] = p**(weight - 3)*p*(hhecke_evals[F.primes_above(p)[0]] + hhecke_evals[F.primes_above(p)[1]])
44
if hlevel.valuation(F.primes_above(p)[0])*hlevel.valuation(F.primes_above(p)[1]) == 0:
45
mu[p] = 0
46
else:
47
mu[p] = p**(2*(weight - 3))*(-p**2)
48
else:
49
if F.ideal(p).valuation(F.prime_above(p)) == 2:
50
lam[p] = p*hhecke_evals[F.prime_above(p)]
51
if hlevel.valuation(F.prime_above(p)) == 0:
52
mu[p] = 0
53
else:
54
mu[p] = p**(2*(weight - 3))*(-p**2)
55
else:
56
lam[p] = 0
57
mu[p] = p**(2*(weight - 3))*(-p**2-p*hhecke_evals[F.prime_above(p)])
58
return {'paramodular_level':level, 'weight':weight, 'T(1,1,p,p)':lam, 'T(1,p,p,p^2)':mu}
59
#return lam,mu,level,weight
60
61