human
Complete the below
def instance_cache(func):

    ''''Method decorator for caching method calls to a single instance.
    **This is not a general purpose caching decorator.**
    In order to use this, you *must* provide an ``_instance_cache``
    attribute on the instance.
    This decorator is used to cache method calls.  The cache is only
    scoped to a single instance though such that multiple instances
    will maintain their own cache.  In order to keep things simple,
    this decorator requires that you provide an ``_instance_cache``
    attribute on your instance.'
    '''
assistant
#Here is the Python program you requested.
    func_name = func.__name__
    @functools.wraps(func)
    def _cache_guard(self, *args, **kwargs):
        cache_key = (func_name, args)
        if kwargs:
            kwarg_items = tuple(sorted(kwargs.items()))
            cache_key = (func_name, args, kwarg_items)
        result = self._instance_cache.get(cache_key)
        if (result is not None):
            return result
        result = func(self, *args, **kwargs)
        self._instance_cache[cache_key] = result
        return result
    return _cache_guard