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}))
Beispiel #4
0
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()