#14054: Cythoned UniqueRepresentation
-----------------------------------------------+----------------------------
       Reporter:  SimonKing                    |         Owner:  tbd         
           Type:  enhancement                  |        Status:  needs_review
       Priority:  major                        |     Milestone:  sage-5.7    
      Component:  performance                  |    Resolution:              
       Keywords:  cython UniqueRepresentation  |   Work issues:              
Report Upstream:  N/A                          |     Reviewers:              
        Authors:  Simon King                   |     Merged in:              
   Dependencies:  #14017                       |      Stopgaps:              
-----------------------------------------------+----------------------------
Changes (by SimonKing):

  * status:  new => needs_review


Comment:

 Note that the patch also needed to change some auxiliary class
 `CartanType_simple_finite`, which is used to unpickle some old data. It
 used to inherit from `object`, but for an incompatibility of Cython types
 it has to inherit from `UniqueRepresentation` instead.

 For the timings, I use `MatrixSpace`, which inherits from
 `UniqueRepresentation`:
 {{{
 sage: isinstance(MatrixSpace(GF(3),2,3), UniqueRepresentation)
 True
 }}}

 With sage-5.6.rc0 plus #14017:
 {{{
 sage: %time L = [MatrixSpace(GF(3),n) for n in range(10000)]
 CPU times: user 1.94 s, sys: 0.05 s, total: 2.00 s
 Wall time: 2.00 s
 sage: %time D = dict(zip(L,range(len(L))))
 CPU times: user 0.01 s, sys: 0.00 s, total: 0.01 s
 Wall time: 0.01 s
 sage: MS = MatrixSpace(GF(3),10000)
 sage: MS in D
 False
 sage: timeit("MS in D", number = 10^6)
 1000000 loops, best of 3: 552 ns per loop
 sage: MS = L[5000]
 sage: MS in D
 True
 sage: timeit("MS in D", number = 10^6)
 1000000 loops, best of 3: 540 ns per loop
 }}}

 Adding the patch from here:
 {{{
 sage: %time L = [MatrixSpace(GF(3),n) for n in range(10000)]
 CPU times: user 1.96 s, sys: 0.04 s, total: 2.00 s
 Wall time: 2.00 s
 sage: %time D = dict(zip(L,range(len(L))))
 CPU times: user 0.01 s, sys: 0.00 s, total: 0.01 s
 Wall time: 0.01 s
 sage: MS = MatrixSpace(GF(3),10000)
 sage: MS in D
 False
 sage: timeit("MS in D", number = 10^6)
 1000000 loops, best of 3: 187 ns per loop
 sage: MS = L[5000]
 sage: MS in D
 True
 sage: timeit("MS in D", number = 10^6)
 1000000 loops, best of 3: 176 ns per loop
 }}}

 Hence, the time drops by 2/3. I did run make ptest successfully. Needs
 review!

-- 
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/14054#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 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?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to