debug 							= 0;
only_prime  					= 1; 
only_elliptic_modular_curve 	= 0;

d = -1;

print("-------------------------------");
print("modular_curve_as_covering: Start")

print("modular_curve_as_covering: Modular curve X_0(N)");
print("as branched covering of modular curve X(1).");

if ( debug, print("modular_curve_as_covering: Start"));
N_max = 100;

if (debug, print("modular_curve_as_covering: N_max: ", N_max) );
print("");

/*--------------------------------------*/
for (N=1, N_max, \
{ 
	if ( debug, print("modular_curve_as_covering: N: ", N));
	if ( debug, print("modular_curve_as_covering: Before read epsilon_2"));
	read("Modular_Forms/epsilon_2");

	if ( debug, print("modular_curve_as_covering: After read epsilon_2"));


	if ( debug, print("modular_curve_as_covering: Before epsilon_2(N)"));
	epsilon_2 = epsilon_2(N);
	if ( debug, print("modular_curve_as_covering: epsilon_2: ", epsilon_2));
/*--------------------------------------*/

	if ( debug, print("modular_curve_as_covering: Before read epsilon_3"));
	read("Modular_Forms/epsilon_3");

	if ( debug, print("modular_curve_as_covering: After read epsilon_3"));


	if ( debug, print("modular_curve_as_covering: Before epsilon_3(N)"));
	epsilon_3 = epsilon_3(N);

	if ( debug, print("modular_curve_as_covering: epsilon_3: ", epsilon_3));
/*--------------------------------------*/

	epsilon_infinity = mfnumcusps(N);

	if ( debug, print("modular_curve_as_covering: epsilon_infinity: ", epsilon_infinity));

/*--------------------------------------*/

	if ( debug, print("modular_curve_as_covering: Before read covering_degree"));
	read("Modular_Forms/covering_degree");

	if ( debug, print("modular_curve_as_covering: After read covering_degree"));

	if ( debug, print("modular_curve_as_covering: Before covering_degree(N)"));
	d = covering_degree(N);

	if ( debug, print("modular_curve_as_covering: covering_degree: ", d));
	/*--------------------------------------*/
	genus = 1 + d/12 - epsilon_2/4 - epsilon_3/3 - epsilon_infinity/2; 
	
	if ( 	(!only_prime && !only_elliptic_modular_curve) 
		|| 	(only_prime && isprime(N))
		|| 	(only_elliptic_modular_curve && genus == 1), \
	print("(N, genus, d, eps_2, eps_3, eps_inf)=(", N,", ", genus, ", " , d, ", " , epsilon_2 ,\
								", " , epsilon_3, ", ", epsilon_infinity, ")") ); 
		
/*	print("-------------------------------");*/
});	

print("modular_curve_as_covering: End")
print("-------------------------------");


