On Tue, May 12, 2020 at 6:01 AM Will Bradshaw <defenastra...@gmail.com> wrote:
> The only options as of now are:
>     1. use 3 layers of wrappers to pack the slices into a custom type that 
> supports hashing pass this mangled version of the arguments through lru_cache 
> wrapper into a function that reverses the process of the first wrapper and 
> passes through to the underlying implementation. (see below "code for 
> workaround" as example)
>        - This is kinda jank and arguably slow. Though in my case the cost of 
> the calculation operation dwarfs this cost by an several orders of magnitude.
>        - mapping may be unreliable and is a rather long and impenetrable mess.
>     2. implementing my own custom caching for this situation which does not 
> scale well and is a heck of a lot of work.
>     3. implement a special case for slices in the lru_cache function. 
> However, this is just moving the problem into the functools library.
>

4. Implement __getitem__ as a wrapper around a caching lookup function
that simply takes the three arguments.

def __getitem__(self, slice):
    return generate_values(slice.start, slice.stop, slice.step)

@lru_cache
def generate_values(start, stop, step):
    ...

Not sure if this makes it easy enough to not worry about the hashability.

ChrisA
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to