#11115: Rewrite cached_method in Cython
-------------------------------------------------------------------+--------
Reporter: SimonKing |
Owner: jason
Type: enhancement |
Status: positive_review
Priority: major |
Milestone: sage-4.7.2
Component: misc |
Keywords: category cython cache
Work_issues: |
Upstream: N/A
Reviewer: Nicolas M. ThiƩry, Andrey Novoseltsev, Volker Braun |
Author: Simon King
Merged: |
Dependencies: #9976 #11298 #11342 #9138 #11815
-------------------------------------------------------------------+--------
Changes (by SimonKing):
* status: needs_review => positive_review
Old description:
> Broadening the original description of the ticket:
>
> The aim is to provide a Cython version of the cached_method decorator.
> There are three benefits:
>
> 1)
> Speed (see timings in the comments)
>
> 2)
> Using cached methods in Cython code.
>
> 3) Parent and element methods of categories
>
> Let me elaborate on the last point:
>
> In order to make full use of the parent and element methods of a
> category, it should be possible to define a ''cached'' method in the
> category, so that any object of that category inherits it ''with
> caching''.
>
> Currently, it fails as follows:
> {{{
> sage: class MyCategory(Category):
> ....: def super_categories(self):
> ....: return [Objects()]
> ....: class ParentMethods:
> ....: @cached_method
> ....: def f(self, x):
> ....: return x^2
> ....:
> sage: cython("""from sage.structure.parent cimport Parent
> ....: cdef class MyClass(Parent): pass
> ....: """)
> sage: O = MyClass(category=MyCategory())
> sage: O.f(4)
> 16
> sage: O.f(x) is O.f(x)
> False
> }}}
>
> So, the method is inherited, but not cached.
>
> Depends on #9976, #11298, #11342, #9138
>
> Apply:
>
> [attachment:trac11115-cached_cython.patch]
>
> [attachment:trac11115_element_with_cache.patch]
>
> [attachment:trac11115_cached_function_pickling.patch]
New description:
Broadening the original description of the ticket:
The aim is to provide a Cython version of the cached_method decorator.
There are three benefits:
1)
Speed (see timings in the comments)
2)
Using cached methods in Cython code.
3) Parent and element methods of categories
Let me elaborate on the last point:
In order to make full use of the parent and element methods of a category,
it should be possible to define a ''cached'' method in the category, so
that any object of that category inherits it ''with caching''.
Currently, it fails as follows:
{{{
sage: class MyCategory(Category):
....: def super_categories(self):
....: return [Objects()]
....: class ParentMethods:
....: @cached_method
....: def f(self, x):
....: return x^2
....:
sage: cython("""from sage.structure.parent cimport Parent
....: cdef class MyClass(Parent): pass
....: """)
sage: O = MyClass(category=MyCategory())
sage: O.f(4)
16
sage: O.f(x) is O.f(x)
False
}}}
So, the method is inherited, but not cached.
Depends on #9976, #11298, #11342, #9138
Apply:
[attachment:trac11115-cached_cython.patch]
[attachment:trac11115_element_with_cache.patch]
[attachment:trac11115_cached_function_pickling.patch]
[attachment:trac_11115_reviewer.patch]
--
Comment:
Replying to [comment:120 vbraun]:
> I've added a reviewer patch. Everything else is fine with me. Please set
it to positive review if you agree with patch.
Thank you very much, both for the review and for your reviewer patch!
Apply trac11115-cached_cython.patch trac11115_element_with_cache.patch
trac11115_cached_function_pickling.patch trac_11115_reviewer.patch
--
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/11115#comment:121>
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.