mirror of
				https://github.com/ARM-software/devlib.git
				synced 2025-11-04 07:51:21 +00:00 
			
		
		
		
	Merge pull request #45 from mdigiorgio/improve-memoize
Improve memoize decorator
This commit is contained in:
		@@ -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)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										1
									
								
								setup.py
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								setup.py
									
									
									
									
									
								
							@@ -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'],
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user