Path: blob/main/scripts/siegel_modular_forms/Yoshida_Lift.py
1127 views
# This script was created using the 2012 paper of Johnson-Leung and Roberts.12# INPUTS:3# F is a real quadratic number field4# hhecke_evals is a dictionary of eigenvalues of a hilbert modular form over F. It should contain primes up to norm of primeprec**25# hweight is the pair even integers that gives the weight of the hilbert modular form, no reason to default to [2,2]6# primeprec is the uper bound on the size of the rational primes which will have eigenvalues calculated78# OUTPUTS:9# Paramodular Level: An int10# Paramodular Weight: an Int11# T(1,1,p,p): a dictionary which has keys all the primes up to primeprec, and has values which are hecke eigenvalues12# T(1,p,p,p^2): See above1314from sage.all import prime_range151617def Yoshida_Lift(F, hhecke_evals, hlevel, hweight=[2, 2], primeprec=100):18weight = (hweight[1] + 2)//219level = F.disc()**2*hlevel.norm()20lam = {}21mu = {}22for p in prime_range(primeprec):23v = level.valuation(p)24if v == 0:25if len(F.primes_above(p)) == 1:26lam[p] = 027mu[p] = p**(2*(weight -3))*(-p**2 - p*hhecke_evals[F.prime_above(p)] - 1)28else:29lam[p] = p**(weight - 3)*p*(hhecke_evals[F.primes_above(p)[0]] + hhecke_evals[F.primes_above(p)[1]])30mu[p] = p**(2*(weight - 3))*(p**2 + p*hhecke_evals[F.primes_above(p)[0]]*hhecke_evals[F.primes_above(p)[1]] - 1)31if v == 1:32if hlevel.valuation(F.primes_above(p)[0]) == 1:33po = F.primes_above(p)[0]34pt = F.primes_above(p)[1]35else:36pt = F.primes_above(p)[0]37po = F.primes_above(p)[1]38lam[p] = p**(weight - 3)*(p*hhecke_evals[po] + (p + 1)*hhecke_evals[pt])39mu[p] = p**(2*(weight - 3))*(p*hhecke_evals[F.primes_above(p)[0]]*hhecke_evals[F.primes_above(p)[1]])40else:41if len(F.primes_above(p)) == 2:42lam[p] = p**(weight - 3)*p*(hhecke_evals[F.primes_above(p)[0]] + hhecke_evals[F.primes_above(p)[1]])43if hlevel.valuation(F.primes_above(p)[0])*hlevel.valuation(F.primes_above(p)[1]) == 0:44mu[p] = 045else:46mu[p] = p**(2*(weight - 3))*(-p**2)47else:48if F.ideal(p).valuation(F.prime_above(p)) == 2:49lam[p] = p*hhecke_evals[F.prime_above(p)]50if hlevel.valuation(F.prime_above(p)) == 0:51mu[p] = 052else:53mu[p] = p**(2*(weight - 3))*(-p**2)54else:55lam[p] = 056mu[p] = p**(2*(weight - 3))*(-p**2-p*hhecke_evals[F.prime_above(p)])57return {'paramodular_level':level, 'weight':weight, 'T(1,1,p,p)':lam, 'T(1,p,p,p^2)':mu}58#return lam,mu,level,weight596061