#13589: Controlling C3 to solve once for all the Method Resolution Order issues 
for
category classes
----------------------------------------------------------+-----------------
       Reporter:  nthiery                                 |         Owner:  
nthiery                   
           Type:  defect                                  |        Status:  
needs_review              
       Priority:  major                                   |     Milestone:  
sage-5.11                 
      Component:  categories                              |    Resolution:      
                      
       Keywords:  method resolution order, C3             |   Work issues:      
                      
Report Upstream:  N/A                                     |     Reviewers:  
Simon King, Florent Hivert
        Authors:  Nicolas M. ThiƩry                       |     Merged in:      
                      
   Dependencies:  #12894, #12876, #11935, #12895, #10193  |      Stopgaps:      
                      
----------------------------------------------------------+-----------------

Comment (by SimonKing):

 Here is another potential improvement:
 {{{
 sage: cython("""
 ....: cpdef inline sort_key(object x):
 ....:     return x._cmp_key
 ....: def test(list L, key):
 ....:     cdef list out = sorted(L, key=key, reverse=True)
 ....: """)
 ....:
 sage: class C(object):
 ....:     def __init__(self, n):
 ....:         self._cmp_key = n
 ....:
 sage: L = [C(ZZ.random_element(1,10^6)) for _ in range(10000)]
 sage: from operator import attrgetter
 sage: sk = attrgetter('_cmp_key')
 sage: %timeit test(L,sort_key)
 100 loops, best of 3: 10.8 ms per loop
 sage: %timeit test(L,sk)
 100 loops, best of 3: 12.9 ms per loop
 sage: %timeit test(L,sort_key)
 100 loops, best of 3: 10.8 ms per loop
 sage: %timeit test(L,sk)
 100 loops, best of 3: 12.9 ms per loop
 }}}

 So, in C3_controlled, we could implement this cpdef inline function as the
 default key for comparison.

 In addition, we could decide that the key ''must'' return a tuple, because
 this is the format of Category._cmp_key. But this would mean we loose
 flexibility.

-- 
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/13589#comment:49>
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 unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sage-trac.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to