1
0
mirror of https://github.com/ARM-software/devlib.git synced 2025-01-31 02:00:45 +00:00

Merge pull request #45 from mdigiorgio/improve-memoize

Improve memoize decorator
This commit is contained in:
setrofim 2016-06-23 11:13:36 +01:00 committed by GitHub
commit fa20e7c28d
2 changed files with 7 additions and 4 deletions

View File

@ -33,6 +33,7 @@ from operator import itemgetter
from itertools import groupby from itertools import groupby
from functools import partial from functools import partial
import wrapt
# ABI --> architectures list # ABI --> architectures list
ABI_MAP = { ABI_MAP = {
@ -536,17 +537,18 @@ def mask_to_list(mask):
__memo_cache = {} __memo_cache = {}
def memoized(func): @wrapt.decorator
def memoized(wrapped, instance, args, kwargs):
"""A decorator for memoizing functions and methods.""" """A decorator for memoizing functions and methods."""
func_id = repr(func) func_id = repr(wrapped)
def memoize_wrapper(*args, **kwargs): def memoize_wrapper(*args, **kwargs):
id_string = func_id + ','.join([str(id(a)) for a in args]) id_string = func_id + ','.join([str(id(a)) for a in args])
id_string += ','.join('{}={}'.format(k, v) id_string += ','.join('{}={}'.format(k, v)
for k, v in kwargs.iteritems()) for k, v in kwargs.iteritems())
if id_string not in __memo_cache: if id_string not in __memo_cache:
__memo_cache[id_string] = func(*args, **kwargs) __memo_cache[id_string] = wrapped(*args, **kwargs)
return __memo_cache[id_string] return __memo_cache[id_string]
return memoize_wrapper return memoize_wrapper(*args, **kwargs)

View File

@ -69,6 +69,7 @@ params = dict(
'python-dateutil', # converting between UTC and local time. 'python-dateutil', # converting between UTC and local time.
'pexpect>=3.3', # Send/recieve to/from device 'pexpect>=3.3', # Send/recieve to/from device
'pyserial', # Serial port interface 'pyserial', # Serial port interface
'wrapt', # Basic for construction of decorator functions
], ],
extras_require={ extras_require={
'daq': ['daqpower'], 'daq': ['daqpower'],