\\Matthew Johnson, 12/18/2008, master's computing requirement \\ this returns the first n terms of the Fourier expansion of the Eisenstein series E_k for the full modular group E(k,n)= { return(1-2*k/bernfrac(k)*sum(m=1,n,sigma(m,k-1)*q^m)+O(q^n)) } \\ this returns the first n terms of the Fourier expansion of the Ramanujan Delta function Delta(n)= { return((E(4,n)^3-E(6,n)^2)/1728+O(q^n)) } \\ this returns the dimension of the space of modular forms of weight k dim(k)= { if(k%2==1, return(0)); if(k<0, return(0)); if(k%12==2, return(floor(k/12))); if(k%12 != 2, return(floor(k/12)+1)) } \\ this returns a modular form of weight 0,4,6,8,10, or 14 depending on what k is mod 12 Eiz(k,n)= { l=k-12*(dim(k)-1); if(l==0, return(1)); if(l==4, return(E(4,n))); if(l==6, return(E(6,n))); if(l==8, return(E(4,n)^2)); if(l==10, return(E(4,n)*E(6,n))); if(l==14, return(E(4,n)^2*E(6,n))); } \\ this prints out the Victor Miller basis of modular forms of weight k, for the first n Fourier terms VM(k,n)= { d=dim(k); if(d==0, print("No Victor Miller Basis, dimension is zero"); return()); if(d>n, print("Please enter a level of precision greater than the dimension of the space of M_k"); return()); L=listcreate(d); H=Eiz(k,n); delta=Delta(n); listinsert(L,H*delta^(d-1)+O(q^(n)),1); print(H*delta^(d-1)+O(q^n)); if(d==1, return()); for(x=2,d, G=H*delta^(d-x)*E(4,n)^(3*(x-1)); for(y=1,x-1,G=G-polcoeff(G,d-y,q)*L[y]); listinsert(L,G+O(q^(n)),x); print(G+O(q^n))); return() }