#6837: Implementation of twisting modular forms by Dirichlet characters
------------------------------------------+---------------------------------
   Reporter:  ljpk                        |       Owner:  craigcitro            
      
       Type:  enhancement                 |      Status:  needs_work            
      
   Priority:  minor                       |   Milestone:  sage-4.3.2            
      
  Component:  modular forms               |    Keywords:  modular form twist 
character
     Author:  Lloyd Kilford, Alex Ghitza  |    Upstream:  N/A                   
      
   Reviewer:                              |      Merged:                        
      
Work_issues:                              |  
------------------------------------------+---------------------------------
Changes (by wuthrich):

  * status:  needs_review => needs_work


Old description:

> In Koblitz's book "Introduction to Elliptic Curves and Modular Forms",
> Proposition III.3.17, it is proved that if f(q)=sum_{n=0}^infinity a_n
> q^n is the Fourier expansion of a modular form in M_k(Gamma_0(M),chi) and
> chi_1 is a primitive Dirichlet character modulo N, then
> f_chi(q)=sum_{n=0}^infinity \chi_1(n) a_n q^n is a modular form in
> M_k(\Gamma_0(MN^2),\chi\chi_1^2). This is a proposed method for objects
> of type 'sage.modular.modform.element.ModularFormElement' which will
> create f_\chi given f and chi.
>
> {{{
> def twist(f,chi):
>         r"""
>         This function returns the twist of the modular form f by the
> Dirichlet character chi
>
>         INPUT:
>
>         - ``f`` - a modular form
>
>         - ``chi`` - a Dirichlet character
>
>         OUTPUT:
>
>         f_\chi, the twist of f by chi; if f(q)=sum_{n=0}^infty a_n q^n,
> then f_chi(q)=sum_{n=0}^infty chi(n) a_n q^n ([Koblitz]).
>
>         EXAMPLES:
>
>         Here is a basic example:
>
>         ::
>
>                 sage: f=CuspForms(11,2).0
>                 sage: f.q_expansion(6)
>                 q - 2*q^2 - q^3 + 2*q^4 + q^5 + O(q^6)
>                 sage: eps=DirichletGroup(3).0
>                 sage: f.twist(eps)
>                 q + 2*q^2 + 2*q^4 - q^5 + O(q^6)
>
>         ::
>
>         NOTES:
>         This function is rather slow when chi is not a quadratic
> character; this may be improved with a new definition of the Sturm bound.
>
>         REFERENCES:
>
>         - [Koblitz], Neal Koblitz, "Introduction to Elliptic Curves and
> Modular Forms", Springer GTM 97, 1993, Proposition III.3.17.
>
>         AUTHORS:
>
>         - L. J. P. Kilford (2009-08-28)
>
>         """
>         DG_MNsq=DirichletGroup(f.level()*chi.modulus()^2)
>         basering=DG_MNsq.base_ring()
> M_k_MNsq=ModularForms(DG_MNsq(self.character())*DG_MNsq(chi)^2,self.weight(),base_ring=basering)
>         bound=M_k_MNsq.sturm_bound()+1
>         PSR.<q>=PowerSeriesRing(DG_MNsq.base_ring())
>         f_twist=PSR([self[i]*chi(i) for i in
> xrange(0,bound+2)])+O(q^bound)
>         return M_k_MNsq(f_twist)

New description:

 In Koblitz's book "Introduction to Elliptic Curves and Modular Forms",
 Proposition III.3.17, it is proved that if f(q)=sum,,n=0,,^infinity^ a_n
 q^n^ is the Fourier expansion of a modular form in
 M,,k,,(Gamma,,0,,(M),chi) and chi_1 is a primitive Dirichlet character
 modulo N, then f_chi(q)=sum,,n=0,,^infinity^ \chi_1(n) a_n q^n^ is a
 modular form in M_k(\Gamma_0(MN^2^),\chi\chi_1^2^). This is a proposed
 method for objects of type
 'sage.modular.modform.element.ModularFormElement' which will create f_\chi
 given f and chi.

 {{{
 def twist(f,chi):
         r"""
         This function returns the twist of the modular form f by the
 Dirichlet character chi

         INPUT:

         - ``f`` - a modular form

         - ``chi`` - a Dirichlet character

         OUTPUT:

         f_\chi, the twist of f by chi; if f(q)=sum_{n=0}^infty a_n q^n,
 then f_chi(q)=sum_{n=0}^infty chi(n) a_n q^n ([Koblitz]).

         EXAMPLES:

         Here is a basic example:

         ::

                 sage: f=CuspForms(11,2).0
                 sage: f.q_expansion(6)
                 q - 2*q^2 - q^3 + 2*q^4 + q^5 + O(q^6)
                 sage: eps=DirichletGroup(3).0
                 sage: f.twist(eps)
                 q + 2*q^2 + 2*q^4 - q^5 + O(q^6)

         ::

         NOTES:
         This function is rather slow when chi is not a quadratic
 character; this may be improved with a new definition of the Sturm bound.

         REFERENCES:

         - [Koblitz], Neal Koblitz, "Introduction to Elliptic Curves and
 Modular Forms", Springer GTM 97, 1993, Proposition III.3.17.

         AUTHORS:

         - L. J. P. Kilford (2009-08-28)

         """
         DG_MNsq=DirichletGroup(f.level()*chi.modulus()^2)
         basering=DG_MNsq.base_ring()
 
M_k_MNsq=ModularForms(DG_MNsq(self.character())*DG_MNsq(chi)^2,self.weight(),base_ring=basering)
         bound=M_k_MNsq.sturm_bound()+1
         PSR.<q>=PowerSeriesRing(DG_MNsq.base_ring())
         f_twist=PSR([self[i]*chi(i) for i in
 xrange(0,bound+2)])+O(q^bound)
         return M_k_MNsq(f_twist)

--

Comment:

 * There should be an empty line before {{{... math:}}}.

  * I don't know why, but Lloyd's first names are transformed into 12. 10.
 16. in the reference page.

  * I think one should catch the case when the conductor of the character
 is not coprime to the level of the modular form. Note that the if you
 twist a form that has been twisted by chi with chi again, the level should
 go down not up. I believe that the correct assumption are in [Mazur-Tate-
 Teitelbaum].

 {{{
 sage: M = CuspForms(11,2)
 sage: f = M.0
 sage: chi = DirichletGroup(3).0
 sage: fchi = f.twist(chi)
 sage: fchi
 q + 2*q^2 + 2*q^4 - q^5 + O(q^6)
 sage: fchi.twist(chi)
 }}}


  * If the form is on Gamma_0(N) and one twists with a character modulo N,
 I think it should change the Nebetypus, no ?

-- 
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/6837#comment:3>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica, 
and MATLAB

-- 
You received this message because you are subscribed to the Google Groups 
"sage-trac" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sage-trac?hl=en.

Reply via email to