def test_pullback(self): S = CuspFormsDegree2(24, prec=5) l = 2 tpls = S.linearly_indep_tuples() A1 = tpl_to_half_int_mat((1, 1, 1)) pull_back_dct = {t: epsilon_tilde_l_k_degree2( l + 2, S.wt, A1, tpl_to_half_int_mat(t)) for t in tpls} pull_back_vec = S._to_vector(pull_back_dct) f = S._to_form(pull_back_vec) for t in PrecisionDeg2(3): self.assertEqual( f[t], epsilon_tilde_l_k_degree2(l + 2, S.wt, A1, tpl_to_half_int_mat(t)))
def algebraic_part_of_standard_l(f, l, space_of_cuspforms, verbose=False): r'''f: (vector valued) cuspidal eigenform of degree 2 of weight det^k Sym(j). l: positive even integer such that 2 le l < k - 2. space_of_cuspforms: space of cusp form that f belongs to. Return the algebriac part of the standard L of f at l cf. Katsurada, Takemori Congruence primes of the Kim-Ramakrishnan-Shahidi lift. Theorem 4.1. ''' k = f.wt j = f.sym_wt t0 = f._none_zero_tpl() D = tpl_to_half_int_mat(t0) if not (l % 2 == 0 and 2 <= l < k - 2): raise ValueError u3_val, u4_val, f_t0_pol_val = _u3_u4_nonzero(f, t0) pull_back_vec = _pullback_vector( l + ZZ(2), D, u3_val, u4_val, space_of_cuspforms, verbose=verbose) T2 = space_of_cuspforms.hecke_matrix(2) d = space_of_cuspforms.dimension() vecs = [(T2 ** i) * pull_back_vec for i in range(d)] ei = [sum(f[t0] * a for f, a in zip(space_of_cuspforms.basis(), v)) for v in vecs] if j > 0: ei = [a._to_pol() for a in ei] chply = T2.charpoly() nume = first_elt_of_kern_of_vandermonde(chply, f.hecke_eigenvalue(2), ei) denom = f[t0] * f_t0_pol_val if j > 0: denom = denom._to_pol() return f.base_ring(nume / denom)
def _pullback_vector(l, D, u3, u4, space_of_cuspforms, verbose=False): '''Return a vector corresponding to pullback of Eisenstein series. ''' k = space_of_cuspforms.wt j = space_of_cuspforms.sym_wt tpls = space_of_cuspforms.linearly_indep_tuples() u1, u2 = _U_ring.gens() if j > 0: pull_back_fc_dct = {t: fc_of_pullback_of_diff_eisen( l, k, j, tpl_to_half_int_mat(t), D, u3, u4, verbose=verbose) for t in set(t for t, i in tpls)} pull_back_dct = {(t, i): pull_back_fc_dct[t][u1 ** (j - i) * u2 ** i] for t, i in tpls} else: pull_back_dct = {t: fc_of_pullback_of_diff_eisen( l, k, j, tpl_to_half_int_mat(t), D, u3, u4, verbose=verbose) for t in tpls} pull_back_dct = {k: v.constant_coefficient() for k, v in pull_back_dct.iteritems()} return space_of_cuspforms._to_vector(pull_back_dct)