#8281: bug in hecke_operator_on_basis over finite fields
-----------------------------+----------------------------------------------
   Reporter:  AlexGhitza     |       Owner:  craigcitro  
       Type:  defect         |      Status:  needs_review
   Priority:  major          |   Milestone:  sage-4.3.3  
  Component:  modular forms  |    Keywords:              
     Author:  Alex Ghitza    |    Upstream:  N/A         
   Reviewer:                 |      Merged:              
Work_issues:                 |  
-----------------------------+----------------------------------------------
Changes (by newvalueoldvalue):

  * status:  new => needs_review
  * author:  => Alex Ghitza


Old description:

> This happens in 4.3.3.alpha0:
>
> {{{
> sage: bas_mod5 = [f.change_ring(GF(5)) for f in victor_miller_basis(12,
> 20)]
> sage: hecke_operator_on_basis(bas_mod5, 2, 12)
> ---------------------------------------------------------------------------
> TypeError                                 Traceback (most recent call
> last)
>
> /home/ghitza/shared/articles/eigensystems/code/<ipython console> in
> <module>()
>
> /home/ghitza/sage-devel/local/lib/python2.6/site-
> packages/sage/modular/modform/hecke_operator_on_qexp.pyc in
> hecke_operator_on_basis(B, n, k, eps, already_echelonized)
>     186     V = A.span_of_basis([g.padded_list(prec) for g in B],
>     187                         already_echelonized =
> already_echelonized)
> --> 188     return _hecke_operator_on_basis(B, V, n, k, eps)
>     189
>     190
>
> /home/ghitza/sage-devel/local/lib/python2.6/site-
> packages/sage/modular/modform/hecke_operator_on_qexp.pyc in
> _hecke_operator_on_basis(B, V, n, k, eps)
>     119     prec = V.degree()
>     120     TB = [hecke_operator_on_qexp(f, n, k, eps, prec, check=False,
> _return_list=True)
> --> 121                 for f in B]
>     122     TB = [V.coordinate_vector(w) for w in TB]
>     123     return matrix(V.base_ring(), len(B), len(B), TB,
> sparse=False)
>
> /home/ghitza/sage-devel/local/lib/python2.6/site-
> packages/sage/modular/modform/hecke_operator_on_qexp.pyc in
> hecke_operator_on_qexp(f, n, k, eps, prec, check, _return_list)
>      87     for m in range(prec):
>      88         am = sum([eps(d) * d**l * f[m*n//(d*d)] for \
> ---> 89                   d in divisors(gcd(n, m)) if (m*n) % (d*d) ==
> 0])
>      90         v.append(am)
>      91     if _return_list:
>
> /home/ghitza/sage-devel/local/lib/python2.6/site-
> packages/sage/structure/element.so in
> sage.structure.element.RingElement.__mul__
> (sage/structure/element.c:11336)()
>
> /home/ghitza/sage-devel/local/lib/python2.6/site-
> packages/sage/structure/coerce.so in
> sage.structure.coerce.CoercionModel_cache_maps.bin_op
> (sage/structure/coerce.c:6990)()
>
> TypeError: unsupported operand parent(s) for '*': 'Cyclotomic Field of
> order 1 and degree 1' and 'Finite Field of size 5'
> }}}
>
> I'm putting this in modular forms, but the underlying issue is likely a
> more general coercion problem.
>
> I'm ccing Craig because I seem to remember that he fixed something like
> this before :).

New description:

 This happens in 4.3.3.alpha0:

 {{{
 sage: bas_mod5 = [f.change_ring(GF(5)) for f in victor_miller_basis(12,
 20)]
 sage: hecke_operator_on_basis(bas_mod5, 2, 12)
 ---------------------------------------------------------------------------
 TypeError                                 Traceback (most recent call
 last)

 /home/ghitza/shared/articles/eigensystems/code/<ipython console> in
 <module>()

 /home/ghitza/sage-devel/local/lib/python2.6/site-
 packages/sage/modular/modform/hecke_operator_on_qexp.pyc in
 hecke_operator_on_basis(B, n, k, eps, already_echelonized)
     186     V = A.span_of_basis([g.padded_list(prec) for g in B],
     187                         already_echelonized = already_echelonized)
 --> 188     return _hecke_operator_on_basis(B, V, n, k, eps)
     189
     190

 /home/ghitza/sage-devel/local/lib/python2.6/site-
 packages/sage/modular/modform/hecke_operator_on_qexp.pyc in
 _hecke_operator_on_basis(B, V, n, k, eps)
     119     prec = V.degree()
     120     TB = [hecke_operator_on_qexp(f, n, k, eps, prec, check=False,
 _return_list=True)
 --> 121                 for f in B]
     122     TB = [V.coordinate_vector(w) for w in TB]
     123     return matrix(V.base_ring(), len(B), len(B), TB, sparse=False)

 /home/ghitza/sage-devel/local/lib/python2.6/site-
 packages/sage/modular/modform/hecke_operator_on_qexp.pyc in
 hecke_operator_on_qexp(f, n, k, eps, prec, check, _return_list)
      87     for m in range(prec):
      88         am = sum([eps(d) * d**l * f[m*n//(d*d)] for \
 ---> 89                   d in divisors(gcd(n, m)) if (m*n) % (d*d) == 0])
      90         v.append(am)
      91     if _return_list:

 /home/ghitza/sage-devel/local/lib/python2.6/site-
 packages/sage/structure/element.so in
 sage.structure.element.RingElement.__mul__
 (sage/structure/element.c:11336)()

 /home/ghitza/sage-devel/local/lib/python2.6/site-
 packages/sage/structure/coerce.so in
 sage.structure.coerce.CoercionModel_cache_maps.bin_op
 (sage/structure/coerce.c:6990)()

 TypeError: unsupported operand parent(s) for '*': 'Cyclotomic Field of
 order 1 and degree 1' and 'Finite Field of size 5'
 }}}

--

Comment:

 This is not, as I first thought, a coercion problem (there is no coercion
 between the cyclotomic field of degree 1 aka QQ and a finite field).

 The problem is this: when the character eps is not given, it defaults to
 the trivial character *over QQ*.  It should really be over the base ring
 of the elements of the given basis instead.  The attached patch fixes
 this.

-- 
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/8281#comment:1>
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