I guess this is more like a Python question, but I guess it would be
very useful for speeding up some computations in sage.  I took the
definition for the Memoize class from the net, but does not quite work
as I want for methods.

Consider the following:

class Memoize:
   """Memoize(fn) - an instance which acts like fn but memoizes its
arguments
      Will only work on functions with non-mutable arguments; since it
uses
      the arguments as keys for a dictionary, and hence the keys need
to be
      hashable.
   """
   def __init__(self, fn):
       self.fn = fn
       self.memo = {}
   def __call__(self, *args):
       if args not in self.memo:
           self.memo[args] = self.fn(*args)
       return self.memo[args]


class dog():
    def __init__(self,bark='guau'):
        self.bark=bark
    @Memoize
    def bark(self):
        sleep (5)
        return bark+' '+bark+' '+bark

sparky=dog()

The only way to run the above example is sparky.bark(sparky) or
dog.bark(sparky), since sparky.bark() does not work.  Removing the
decorator, sparky.bark() works but takes 5 seconds everytime, unlike
the Memoized version.

Is there a way to have a version of Memoize that behaves nicely with
methods?  A redirection to the appropriate page or documentation is
also ok.

Thanks.
Peace.
-Adrian.
--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to sage-support@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sage-support
URLs: http://www.sagemath.org
-~----------~----~----~----~------~----~------~--~---

Reply via email to