-
-
Notifications
You must be signed in to change notification settings - Fork 684
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:
Speed (see timings in the comments)
Using cached methods in Cython code.
- 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.
Apply:
Note that, if you want to remove the patches after testing them, you need to do
rm $SAGE_ROOT/devel/sage/build/sage/misc/cachefunc.*
rm $SAGE_ROOT/devel/sage/build/*/sage/misc/cachefunc.*
Otherwise, sage -br would not work.
Depends on #9138
Depends on #11900
CC: @nthiery
Component: misc
Keywords: category cython cache
Author: Simon King
Reviewer: Nicolas M. Thiéry, Andrey Novoseltsev, Volker Braun
Merged: sage-5.0.beta0
Issue created by migration from https://trac.sagemath.org/ticket/11115