/* Pari */
/* Author: Joachim Wehler */

default(format, "f0.10" ); 

print ("===================================================="); 
print ( "Congruence subgroups_19, Start \n");

print ("Modular forms of congruence subgroups Gamma_0(p**n)\n");

default(parisizemax, "16G");

case = 0;
	
p_min 	=	-1;
p_max	=	-1;
n_max 	= 	-1;
q 		= 	-1;
k		=	 4;

if (case == 0, {p_min=2; p_max = 7; n_max = 4} );

print("Parameter: p_min = ", p_min, ", p_max = ", p_max, ", n_max = ", n_max, ", weight = ", k, "\n");

print("h0_RR = dimension via Riemann-Roch theorem \n");

forprime (p=1, p_max, a = b; for (n = 0, n_max, q=p^n; read("Modular_Forms/genus"); g = genus(q);  \
	read("Modular_Forms/epsilon_2"); read("Modular_Forms/epsilon_3"); \
	h0_RR = (k-1) * (g - 1) + (k/2) * mfnumcusps(q) + floor(k/4)* epsilon_2(q) + floor(k/3) * epsilon_3(q);		\
	print("(p,n) = (", p, "," , n , ")", ", q = p^n = ", q, ", X(\Gamma_0(", q,")): (deg, genus, dim M_",k,", h0_RR) = ", "(", \
	covering_degree(q), ",", g , ",", mfdim([q, k]), ",", h0_RR, ")")); print(); )
 
print ("\nCongruence subgroups_19, End");
print("====================================================");


