def memoize(for_each_device=False): """Makes a function memoizing the result for each argument and device. This is a similar version of :func:`cupy.memoize`. The difference is that this function can be used in the global scope even if CUDA is not available. In such case, this function does nothing. .. note:: This decorator acts as a dummy if CUDA is not available. It cannot be used for general purpose memoization even if ``for_each_device`` is set to False. """ if available: return cupy.memoize(for_each_device) def dummy_decorator(f): @functools.wraps(f) def ret(*args, **kwargs): return f(*args, **kwargs) return ret return dummy_decorator