code: def lru_cache(*args, **kwargs):
      """Wraps functools.lru_cache to make it compatible with Numpy arrays."""
  
      def decorator(function):
          @functools.wraps(function)
          def wrapper(*args, **kwargs):
              hashable_args = [_make_hashable(arg) for arg in args]
              hashable_kwargs = {
                  k: _make_hashable(v) for k, v in kwargs.items()
              }
              return cached_wrapper(*hashable_args, **hashable_kwargs)
  
          @functools.lru_cache(*args, **kwargs)
          def cached_wrapper(*hashable_args, **hashable_kwargs):
              args = [_undo_make_hashable(arg) for arg in hashable_args]
              kwargs = {
                  k: _undo_make_hashable(v)
                  for k, v in hashable_kwargs.items()
              }
              return function(*args, **kwargs)
  
          return wrapper
  
      return decorator
  
file_path: scenic/scenic/projects/owl_vit/notebooks/numpy_cache.py
imports: import functools
  import numpy
label_desc: Use image node_id 1 for calling a global function with example usage: lru_cache() and returns: decorator, wrapper, cached_wrapper, function