def _hecke_tp_charpoly(self, p, var='x', algorithm='linbox'): a = p ** (self.wt - 2) + 1 N = self.klingeneisensteinAndCuspForms() S = CuspForms(1, self.wt) m = S.dimension() R = PolynomialRing(QQ, names=var) x = R.gens()[0] f = R(S.hecke_matrix(p).charpoly(var=var, algorithm=algorithm)) f1 = f.subs({x: a ** (-1) * x}) * a ** m g = R(N.hecke_matrix(p).charpoly(var=var, algorithm=algorithm)) return R(g / f1)
def _hecke_tp2_charpoly(self, p, var='x', algorithm='linbox'): u = p ** (self.wt - 2) N = self.klingeneisensteinAndCuspForms() S = CuspForms(1, self.wt) m = S.dimension() R = PolynomialRing(QQ, names=var) x = R.gens()[0] f = R(S.hecke_matrix(p).charpoly(var=var, algorithm=algorithm)) g = R(N.hecke_matrix(p ** 2).charpoly(var=var, algorithm=algorithm)) def morph(a, b, f, m): G = (-1) ** m * f.subs({x: -x}) * f alst = [[k // 2, v] for k, v in G.dict().iteritems()] F = sum([v * x ** k for k, v in alst]) return a ** m * F.subs({x: (x - b) / a}) f1 = morph(u ** 2 + u + 1, -p * u ** 3 - u ** 2 - p * u, f, m) return R(g / f1)
def test_vecor_valued_klingen(self): lst = [(18, 2), (20, 2), (12, 4), (14, 4)] R = PolynomialRing(QQ, names="x") x = R.gens()[0] def euler_factor_at_2(f): wt = f.weight() return 1 - f[2] * x + 2 ** (wt - 1) * x ** 2 for k, j in lst: M = vvld_smfs(j, k, 4) S = CuspForms(1, j + k) f = S.basis()[0] f = f * f[1] ** (-1) pl = euler_factor_at_2(f) lam = (1 + 2 ** (k - 2)) * f[2] F = M.eigenform_with_eigenvalue_t2(lam) self.assertEqual(R(F.euler_factor_of_spinor_l(2)), pl * pl.subs({x: 2 ** (k - 2) * x}))
def compare_vv_scalar(V, k): dv = V.dimension_cusp_forms(k) N = V._level m = V._M.order() if k in ZZ: D = DirichletGroup(N) if is_even(k): chi = D(kronecker_character(m)) else: chi = D(kronecker_character(-m)) S = CuspForms(chi, k) N = Newforms(chi, k, names='a') ds = S.dimension() B = N else: D = magma.DirichletGroup(V._level) chi = magma.D(magma.KroneckerCharacter(2 * m)) M = magma.HalfIntegralWeightForms(chi, k) S = M.CuspidalSubspace() ds = S.Dimension() B = S.Basis() return dv, ds, S, B
def dimension_of_nolift_cuspforms(self): if self.wt % 2 == 1: return self.dimension() S = CuspForms(1, (self.wt - 1) * 2) return self.dimension_of_cuspforms() - S.dimension()
def dimension_of_cuspforms(self): if self.wt % 2 == 1: return self.dimension() S = CuspForms(1, self.wt) return self.dimension() - S.dimension()