def f21_sym6(prec): '''One of the generator with the determinant weight 21 given by van Dorp. ''' Q = _sym6_od_Q(21, (4, 6, 10)) phi4 = eisenstein_series_degree2(4, prec) phi6 = eisenstein_series_degree2(6, prec) x10 = x10_with_prec(prec) forms = _rankin_cohen_bracket_func(Q)([phi4, phi6, x10]) return SWMFE(forms, 21, prec)
def assert_degree_2(self, k): es = eisenstein_series_degree2(k, prec=10) es1 = sess(weight=k, degree=2) self.assertTrue( all(es[(n, r, m)] == es1.fourier_coefficient(matrix([[n, ZZ(r) / ZZ(2)], [ZZ(r) / ZZ(2), m]])) for n, r, m in es.prec))
def f17_sym6(prec): '''One of the generator with the determinant weight 17 given by van Dorp. ''' Q = _sym6_od_Q(17, (5, 5, 6)) phi6 = eisenstein_series_degree2(6, prec + 1) return rankin_cohen_triple_x5(Q, phi6, prec)
def f15_sym6(prec): '''One of the generator with the determinant weight 15 given by van Dorp. ''' Q = _sym6_od_Q(15, (5, 5, 4)) phi4 = eisenstein_series_degree2(4, prec + 1) return rankin_cohen_triple_x5(Q, phi4, prec)
def test_det(self): prec = 10 l = [eisenstein_series_degree2(k, prec) for k in [4, 6, 10, 12]] m = [[a.wt * a for a in l], [a.differentiate_wrt_tau() for a in l], [a.differentiate_wrt_w() for a in l], [a.differentiate_wrt_z() for a in l]] d = det_deg2(m, wt=35) d = d * d[(2, -1, 3)] ** (-1) self.assertEqual(d, x35_with_prec(prec))
def test_interpolate(self): prec = 15 es4 = eisenstein_series_degree2(4, prec) x35 = x35_with_prec(prec) f = es4.differentiate_wrt_tau() self.assertEqual(calc_forms(lambda fs: fs[0] ** 2, [es4], prec, wt=8), es4 ** 2) self.assertEqual(calc_forms(lambda fs: fs[0] * fs[1], [es4, x35], prec, wt=39), es4 * x35) self.assertEqual(calc_forms(lambda fs: fs[0] ** 2, [f], prec, autom=False), f ** 2)
# -*- coding: utf-8; mode: sage -*- from sage.all import QQ from degree2.all import ( rankin_cohen_pair_sym, eisenstein_series_degree2, x10_with_prec, x12_with_prec, x35_with_prec, rankin_cohen_pair_det2_sym, rankin_cohen_triple_det_sym4) from degree2.interpolate import det_deg2 prec_ev = 7 phi4 = eisenstein_series_degree2(4, prec_ev) phi6 = eisenstein_series_degree2(6, prec_ev) x10 = x10_with_prec(prec_ev) x12 = x12_with_prec(prec_ev) x35 = x35_with_prec(prec_ev) f1 = rankin_cohen_pair_sym(4, phi4, phi4) f2 = rankin_cohen_pair_sym(4, phi4, phi6) f3 = rankin_cohen_pair_det2_sym(4, phi4, phi6) f4 = rankin_cohen_pair_sym(4, phi4, x10) f5 = rankin_cohen_pair_sym(4, phi6, x10) x70 = det_deg2([f.forms for f in [f1, f2, f3, f4, f5]], wt=sum([f.wt for f in [f1, f2, f3, f4, f5]]) + 10) y70 = x70 * QQ(-19945421021123916595200000)**(-1) assert y70 == x35**2
f15 = f15_sym6(prec_od) f17 = f17_sym6(prec_od) f19 = f19_sym6(prec_od) f21 = f21_sym6(prec_od) f23 = f23_sym6(prec_od) # The rank of A_{Sym(6)}^{1}(Gamma_2) is equal to 7. # Therefore we need other two vector valued Siegel modular forms. # We construct two modular forms f17_1 and f17_2 by # Siegel modualr forms of weight det^12 Sym(6) and # Rankin-Cohen type differential operator defined by Dorp # (i.e. function vector_valued_rankin_cohen). es4 = eisenstein_series_degree2(4, prec_od) es6 = eisenstein_series_degree2(6, prec_od) x35 = x35_with_prec(prec_od) f12 = rankin_cohen_pair_det2_sym(6, es4, es6) h12 = rankin_cohen_pair_sym(6, es4, es4**2) f17_1 = vector_valued_rankin_cohen(es4, f12) # f12_prect2 is {phi4, phi6}_{det^2 Sym(6)}. # The prec of f12_prect2 is larger than other forms. f12_prect2 = rankin_cohen_pair_det2_sym( 6, eisenstein_series_degree2(4, prec_od*2), eisenstein_series_degree2(6, prec_od*2)) def _g12():
def assert_pullback_m_2(self, k, A1, prec=3): f0 = eisenstein_pullback_coeff(k, A1, tpl_to_half_int_mat((0, 0, 0))) f = eisenstein_series_degree2(k, prec=5) * f0 for t in PrecisionDeg2(prec): self.assertEqual(f[t], eisenstein_pullback_coeff(k, A1, tpl_to_half_int_mat(t)))