#10709: speed up matrix actions on Manin symbols
-----------------------------+----------------------------------------------
   Reporter:  AlexGhitza     |       Owner:  craigcitro           
       Type:  enhancement    |      Status:  new                  
   Priority:  major          |   Milestone:  sage-4.7             
  Component:  modular forms  |    Keywords:  manin symbol binomial
     Author:                 |    Upstream:  N/A                  
   Reviewer:                 |      Merged:                       
Work_issues:                 |  
-----------------------------+----------------------------------------------
 The patch (basically written by William at #8614) speeds up these actions
 by changing the way the binomial coefficients are obtained.

 Some timings (the weight seems to be the important parameter here):


 BEFORE THE PATCH:

 {{{
 sage: from sage.modular.modsym.manin_symbols import ManinSymbolList_gamma0
 sage: m = ManinSymbolList_gamma0(5, 8)
 sage: timeit("n = m.apply_T(4)")
 625 loops, best of 3: 132 µs per loop
 sage: timeit("n = m.apply_TT(4)")
 625 loops, best of 3: 26 µs per loop
 sage: m = ManinSymbolList_gamma0(5, 30)
 sage: timeit("n = m.apply_T(4)")
 625 loops, best of 3: 541 µs per loop
 sage: timeit("n = m.apply_TT(4)")
 625 loops, best of 3: 25.8 µs per loop
 sage: m = ManinSymbolList_gamma0(5, 100)
 sage: timeit("n = m.apply_T(4)")
 125 loops, best of 3: 1.92 ms per loop
 sage: timeit("n = m.apply_TT(4)")
 625 loops, best of 3: 25.8 µs per loop
 sage: eps = DirichletGroup(4).gen(0)
 sage: from sage.modular.modsym.manin_symbols import
 ManinSymbolList_character
 sage: m = ManinSymbolList_character(eps, 2)
 sage: timeit("n = m.apply_T(4)")
 625 loops, best of 3: 141 µs per loop
 sage: timeit("n = m.apply_TT(4)")
 625 loops, best of 3: 103 µs per loop
 sage: m = ManinSymbolList_character(eps, 30)
 sage: timeit("n = m.apply_T(4)")
 125 loops, best of 3: 2.75 ms per loop
 sage: timeit("n = m.apply_TT(4)")
 625 loops, best of 3: 105 µs per loop
 sage: m = ManinSymbolList_character(eps, 100)
 sage: timeit("n = m.apply_T(4)")
 25 loops, best of 3: 9.35 ms per loop
 sage: timeit("n = m.apply_TT(4)")
 625 loops, best of 3: 103 µs per loop
 }}}

 AFTER THE PATCH:

 {{{
 sage: from sage.modular.modsym.manin_symbols import ManinSymbolList_gamma0
 sage: m = ManinSymbolList_gamma0(5, 8)
 sage: timeit("n = m.apply_T(4)")
 625 loops, best of 3: 21.6 µs per loop
 sage: timeit("n = m.apply_TT(4)")
 625 loops, best of 3: 13.8 µs per loop
 sage: m = ManinSymbolList_gamma0(5, 30)
 sage: timeit("n = m.apply_T(4)")
 625 loops, best of 3: 74.4 µs per loop
 sage: timeit("n = m.apply_TT(4)")
 625 loops, best of 3: 13.7 µs per loop
 sage: m = ManinSymbolList_gamma0(5, 100)
 sage: timeit("n = m.apply_T(4)")
 625 loops, best of 3: 297 µs per loop
 sage: timeit("n = m.apply_TT(4)")
 625 loops, best of 3: 13.8 µs per loop
 sage: eps = DirichletGroup(4).gen(0)
 sage: from sage.modular.modsym.manin_symbols import
 ManinSymbolList_character
 sage: m = ManinSymbolList_character(eps, 2)
 sage: timeit("n = m.apply_T(4)")
 625 loops, best of 3: 126 µs per loop
 sage: timeit("n = m.apply_TT(4)")
 625 loops, best of 3: 90.5 µs per loop
 sage: m = ManinSymbolList_character(eps, 30)
 sage: timeit("n = m.apply_T(4)")
 125 loops, best of 3: 2.26 ms per loop
 sage: timeit("n = m.apply_TT(4)")
 625 loops, best of 3: 91.3 µs per loop
 sage: m = ManinSymbolList_character(eps, 100)
 sage: timeit("n = m.apply_T(4)")
 125 loops, best of 3: 7.7 ms per loop
 sage: timeit("n = m.apply_TT(4)")
 625 loops, best of 3: 90.6 µs per loop
 }}}

-- 
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/10709>
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