> > Well, B[3] is f(q^4) where f is the form that Steve Finch is after. > > His form is some linear combination of B[0], B[1] and B[3]. But we > > don't have any nice way of identifying the level 4 things as a > > subspace of the level 16 things; it's more or less just luck that the > > fourth echelon basis vector happens to be f(q^4). > > Yep. I found that amusing :-) It would be great if the half > integral forms code in Sage were to greatly improve. What is there > now is pretty limited.
On reflection, there is an algorithm there: if N is not divisible by 16, and M = lcm(N, 16), then the space of half-integral weight modular forms of level N must be exactly the subspace of the space of forms of level M consisting of those f for which f(M/N q) is also in the space. Here's the level 28 example: B = half_integral_weight_modform_basis(DirichletGroup(4*28)(1), 3, 50) q = B[0].parent().gen() V = QQ^50 W = V.subspace([V(f(q).padded_list(50)) for f in B]) W4 = V.subspace([V(f(q**4).padded_list(50)) for f in B]) t = [W.coordinate_vector(x) for x in W4.intersection(W).basis()] for i in xrange(len(t)): F=sum([t[i][j] * B[j] for j in xrange(len(t[i]))]) G =sum([q**j*F[4*j] for j in xrange(F.prec()//4)]) print G This outputs q - q^2 - q^4 + q^7 + q^8 - q^9. Similarly for the weight 5/2, level 28 and trivial character case we get the following 4 forms: q + 14*q^2 + 100*q^3 - 744*q^4 - 100*q^5 + 599*q^7 + 2174*q^8 - 1431*q^9 - 200*q^10 + 1482*q^11 q^2 + 14*q^3 - 92*q^4 - 14*q^5 + 75*q^7 + 272*q^8 - 180*q^9 - 28*q^10 + 184*q^11 q^3 - 2*q^4 - q^5 + q^7 + 6*q^8 - 4*q^9 - 2*q^10 + 4*q^11 q^4 - q^7 - 3*q^8 + 2*q^9 - 2*q^11 Hope this is of some use to you. David --~--~---------~--~----~------------~-------~--~----~ To post to this group, send email to sage-support@googlegroups.com To unsubscribe from this group, send email to sage-support-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sage-support URLs: http://www.sagemath.org -~----------~----~----~----~------~----~------~--~---