def __dimension_Sp6Z(wt): """ Return the dimensions of subspaces of Siegel modular forms on $Sp(6,Z)$. OUTPUT ("Total", "Miyawaki-Type-1", "Miyawaki-Type-2 (conjectured)", "Interesting") Remember, Miywaki type 2 is ONLY CONJECTURED!! """ if not is_even(wt): return (0, 0, 0, 0) R = PowerSeriesRing(IntegerRing(), default_prec=wt + 1, names=('x',)) (x,) = R._first_ngens(1) S = PowerSeriesRing(IntegerRing(), default_prec=max(2 * wt - 1,1), names=('y',)) (y,) = S._first_ngens(1) H_all = 1 / ((1 - x ** 4) * (1 - x ** 12) ** 2 * (1 - x ** 14) * (1 - x ** 18) * (1 - x ** 20) * (1 - x ** 30)) * ( 1 + x ** 6 + x ** 10 + x ** 12 + 3 * x ** 16 + 2 * x ** 18 + 2 * x ** 20 + 5 * x ** 22 + 4 * x ** 24 + 5 * x ** 26 + 7 * x ** 28 + 6 * x ** 30 + 9 * x ** 32 + 10 * x ** 34 + 10 * x ** 36 + 12 * x ** 38 + 14 * x ** 40 + 15 * x ** 42 + 16 * x ** 44 + 18 * x ** 46 + 18 * x ** 48 + 19 * x ** 50 + 21 * x ** 52 + 19 * x ** 54 + 21 * x ** 56 + 21 * x ** 58 + 19 * x ** 60 + 21 * x ** 62 + 19 * x ** 64 + 18 * x ** 66 + 18 * x ** 68 + 16 * x ** 70 + 15 * x ** 72 + 14 * x ** 74 + 12 * x ** 76 + 10 * x ** 78 + 10 * x ** 80 + 9 * x ** 82 + 6 * x ** 84 + 7 * x ** 86 + 5 * x ** 88 + 4 * x ** 90 + 5 * x ** 92 + 2 * x ** 94 + 2 * x ** 96 + 3 * x ** 98 + x ** 102 + x ** 104 + x ** 108 + x ** 114) H_noncusp = 1 / (1 - x ** 4) / (1 - x ** 6) / (1 - x ** 10) / (1 - x ** 12) H_E = y ** 12 / (1 - y ** 4) / (1 - y ** 6) H_Miyawaki1 = H_E[wt] * H_E[2 * wt - 4] H_Miyawaki2 = H_E[wt - 2] * H_E[2 * wt - 2] a, b, c, d = H_all[wt], H_noncusp[wt], H_Miyawaki1, H_Miyawaki2 return (a, c, d, a - b - c - d)
def __dimension_Sp6Z(wt): """ Return the dimensions of subspaces of Siegel modular forms on $Sp(4,Z)$. OUTPUT ("Total", "Miyawaki-Type-1", "Miyawaki-Type-2 (conjectured)", "Interesting") Remember, Miywaki type 2 is ONLY CONJECTURED!! """ if not is_even(wt): return (0, 0, 0, 0) R = PowerSeriesRing(IntegerRing(), default_prec=wt + 1, names=('x', )) (x, ) = R._first_ngens(1) R = PowerSeriesRing(IntegerRing(), default_prec=2 * wt - 1, names=('y', )) (y, ) = R._first_ngens(1) H_all = 1 / ( (1 - x**4) * (1 - x**12)**2 * (1 - x**14) * (1 - x**18) * (1 - x**20) * (1 - x**30)) * (1 + x**6 + x**10 + x**12 + 3 * x**16 + 2 * x**18 + 2 * x**20 + 5 * x**22 + 4 * x**24 + 5 * x**26 + 7 * x**28 + 6 * x**30 + 9 * x**32 + 10 * x**34 + 10 * x**36 + 12 * x**38 + 14 * x**40 + 15 * x**42 + 16 * x**44 + 18 * x**46 + 18 * x**48 + 19 * x**50 + 21 * x**52 + 19 * x**54 + 21 * x**56 + 21 * x**58 + 19 * x**60 + 21 * x**62 + 19 * x**64 + 18 * x**66 + 18 * x**68 + 16 * x**70 + 15 * x**72 + 14 * x**74 + 12 * x**76 + 10 * x**78 + 10 * x**80 + 9 * x**82 + 6 * x**84 + 7 * x**86 + 5 * x**88 + 4 * x**90 + 5 * x**92 + 2 * x**94 + 2 * x**96 + 3 * x**98 + x**102 + x**104 + x**108 + x**114) H_noncusp = 1 / (1 - x**4) / (1 - x**6) / (1 - x**10) / (1 - x**12) H_E = y**12 / (1 - y**4) / (1 - y**6) H_Miyawaki1 = H_E[wt] * H_E[2 * wt - 4] H_Miyawaki2 = H_E[wt - 2] * H_E[2 * wt - 2] a, b, c, d = H_all[wt], H_noncusp[wt], H_Miyawaki1, H_Miyawaki2 return (a, c, d, a - b - c - d)
def _dimension_Sp4Z(wt_range): """ Return the dimensions of subspaces of Siegel modular forms on $Sp(4,Z)$. OUTPUT ("Total", "Eisenstein", "Klingen", "Maass", "Interesting") """ headers = ['Total', 'Eisenstein', 'Klingen', 'Maass', 'Interesting'] R = PowerSeriesRing(IntegerRing(), default_prec=wt_range[-1] + 1, names=('x', )) (x, ) = R._first_ngens(1) H_all = 1 / (1 - x**4) / (1 - x**6) / (1 - x**10) / (1 - x**12) H_Kl = x**12 / (1 - x**4) / (1 - x**6) H_MS = (x**10 + x**12) / (1 - x**4) / (1 - x**6) dct = dict( (k, { 'Total': H_all[k], 'Eisenstein': 1 if k >= 4 else 0, 'Klingen': H_Kl[k], 'Maass': H_MS[k], 'Interesting': H_all[k] - (1 if k >= 4 else 0) - H_Kl[k] - H_MS[k] } if is_even(k) else { 'Total': H_all[k - 35], 'Eisenstein': 0, 'Klingen': 0, 'Maass': 0, 'Interesting': H_all[k - 35] }) for k in wt_range) return headers, dct
def _dimension_Sp4Z( wt_range): """ Return the dimensions of subspaces of Siegel modular forms on $Sp(4,Z)$. OUTPUT ("Total", "Eisenstein", "Klingen", "Maass", "Interesting") """ headers = ['Total', 'Eisenstein', 'Klingen', 'Maass', 'Interesting'] R = PowerSeriesRing( IntegerRing(), default_prec = wt_range[-1] + 1, names = ('x',)) (x,) = R._first_ngens(1) H_all = 1 / (1 - x ** 4) / (1 - x ** 6) / (1 - x ** 10) / (1 - x ** 12) H_Kl = x ** 12 / (1 - x ** 4) / (1 - x ** 6) H_MS = (x ** 10 + x ** 12) / (1 - x ** 4) / (1 - x ** 6) dct = dict( (k, { 'Total': H_all[k], 'Eisenstein': 1 if k >= 4 else 0, 'Klingen': H_Kl[k], 'Maass': H_MS[k], 'Interesting': H_all[k]-(1 if k >= 4 else 0)-H_Kl[k]-H_MS[k] } if is_even(k) else { 'Total': H_all[k-35], 'Eisenstein': 0, 'Klingen': 0, 'Maass': 0, 'Interesting': H_all[k-35] } ) for k in wt_range) return headers, dct
def _dimension_Gamma0_4_half(k): """ Return the dimensions of subspaces of Siegel modular forms$Gamma0(4)$ of half integral weight k - 1/2. INPUT The realweight is k-1/2 OUTPUT ('Total', 'Non cusp', 'Cusp') REMARK Note that formula from Hayashida's and Ibukiyama's paper has formula that coefficient of x^w is for weight (w+1/2). So here w=k-1. """ R = PowerSeriesRing(IntegerRing(), default_prec=k, names=("x",)) (x,) = R._first_ngens(1) H_all = 1 / (1 - x) / (1 - x ** 2) ** 2 / (1 - x ** 3) H_cusp = ( (2 * x ** 5 + x ** 7 + x ** 9 - 2 * x ** 11 + 4 * x ** 6 - x ** 8 + x ** 10 - 3 * x ** 12 + x ** 14) / (1 - x ** 2) ** 2 / (1 - x ** 6) ) a, c = H_all[k - 1], H_cusp[k - 1] return (a, a - c, c)
def _dimension_Gamma0_4(wt): """ Return the dimensions of subspaces of Siegel modular forms on $Gamma0(4)$. OUTPUT ( "Total",) REMARK Not completely implemented """ R = PowerSeriesRing(IntegerRing(), default_prec=wt + 1, names=('x', )) (x, ) = R._first_ngens(1) H_all = (1 + x**4)(1 + x**11) / (1 - x**2)**3 / (1 - x**6) return (H_all[wt], )
def _dimension_Gamma0_4(wt): """ Return the dimensions of subspaces of Siegel modular forms on $Gamma0(4)$. OUTPUT ( "Total",) REMARK Not completely implemented """ R = PowerSeriesRing(IntegerRing(), default_prec=wt + 1, names=("x",)) (x,) = R._first_ngens(1) H_all = (1 + x ** 4)(1 + x ** 11) / (1 - x ** 2) ** 3 / (1 - x ** 6) return (H_all[wt],)
def _dimension_Gamma0_3(wt): """ Return the dimensions of subspaces of Siegel modular forms on $Gamma0(3)$. OUTPUT ( "Total") REMARK Only total dimension implemented. """ R = PowerSeriesRing( IntegerRing(), default_prec = wt + 1, names=('x',)) (x,) = R._first_ngens(1) H_all = (1 + 2 * x ** 4 + x ** 6 + x ** 15 * (1 + 2 * x ** 2 + x ** 6)) / (1 - x ** 2) / (1 - x ** 4) / (1 - x ** 6) ** 2 return ( H_all[wt],)
def _dimension_Gamma0_3(wt): """ Return the dimensions of subspaces of Siegel modular forms on $Gamma0(3)$. OUTPUT ( "Total") REMARK Only total dimension implemented. """ R = PowerSeriesRing(IntegerRing(), default_prec=wt + 1, names=('x', )) (x, ) = R._first_ngens(1) H_all = (1 + 2 * x**4 + x**6 + x**15 * (1 + 2 * x**2 + x**6)) / (1 - x**2) / (1 - x**4) / (1 - x**6)**2 return (H_all[wt], )
def _dimension_Gamma0_4_psi_4(wt): """ Return the dimensions of subspaces of Siegel modular forms on $Gamma_0(4)$ with character $\psi_4$. OUTPUT ( "Total") REMARK The formula for odd weights is unknown or not obvious from the paper. """ R = PowerSeriesRing(IntegerRing(), default_prec=wt + 1, names=("x",)) (x,) = R._first_ngens(1) H_all_even = (x ** 12 + x ** 14) / (1 - x ** 2) ** 3 / (1 - x ** 6) if is_even(wt): return (H_all_even[wt],) else: raise NotImplementedError("Dimensions of $M_{k}(\Gamma_0(4), \psi_4)$ for odd $k$ not implemented")
def _dimension_Gamma0_3_psi_3(wt): """ Return the dimensions of the space of Siegel modular forms on $Gamma_0(3)$ with character $\psi_3$. OUTPUT ( "Total") REMARK Not completely implemented """ R = PowerSeriesRing(IntegerRing(), default_prec=wt + 1, names=('x', )) (x, ) = R._first_ngens(1) B = 1 / (1 - x**1) / (1 - x**3) / (1 - x**4) / (1 - x**3) H_all_odd = B H_all_even = B * x**14 if is_even(wt): return (H_all_even[wt], ) else: return (H_all_odd[wt], )
def _dimension_Gamma0_3_psi_3(wt): """ Return the dimensions of the space of Siegel modular forms on $Gamma_0(3)$ with character $\psi_3$. OUTPUT ( "Total") REMARK Not completely implemented """ R = PowerSeriesRing(IntegerRing(), default_prec=wt + 1, names=("x",)) (x,) = R._first_ngens(1) B = 1 / (1 - x ** 1) / (1 - x ** 3) / (1 - x ** 4) / (1 - x ** 3) H_all_odd = B H_all_even = B * x ** 14 if is_even(wt): return (H_all_even[wt],) else: return (H_all_odd[wt],)
def _dimension_Gamma0_4_psi_4(wt): """ Return the dimensions of subspaces of Siegel modular forms on $Gamma_0(4)$ with character $\psi_4$. OUTPUT ( "Total") REMARK The formula for odd weights is unknown or not obvious from the paper. """ R = PowerSeriesRing(IntegerRing(), default_prec=wt + 1, names=('x', )) (x, ) = R._first_ngens(1) H_all_even = (x**12 + x**14) / (1 - x**2)**3 / (1 - x**6) if is_even(wt): return (H_all_even[wt], ) else: raise NotImplementedError( 'Dimensions of $M_{k}(\Gamma_0(4), \psi_4)$ for odd $k$ not implemented' )
def _dimension_Gamma0_4_half(k): """ Return the dimensions of subspaces of Siegel modular forms$Gamma0(4)$ of half integral weight k - 1/2. INPUT The realweight is k-1/2 OUTPUT ('Total', 'Non cusp', 'Cusp') REMARK Note that formula from Hayashida's and Ibukiyama's paper has formula that coefficient of x^w is for weight (w+1/2). So here w=k-1. """ R = PowerSeriesRing(IntegerRing(), default_prec=k, names=('x', )) (x, ) = R._first_ngens(1) H_all = 1 / (1 - x) / (1 - x**2)**2 / (1 - x**3) H_cusp = (2 * x**5 + x**7 + x**9 - 2 * x**11 + 4 * x**6 - x**8 + x**10 - 3 * x**12 + x**14) / (1 - x**2)**2 / (1 - x**6) a, c = H_all[k - 1], H_cusp[k - 1] return (a, a - c, c)