def METHOD_NAME(cls, key):
    """
    Look up the cache for a given key.
    Parameters
    ----------
    key : object
        The cache key. It must be hashable.
    Returns
    -------
    The object if in the cache and alive, otherwise None.
    """
    # Thread safe against concurrent deletion
    obj_cached = _SymbolCache.get(key)
    if obj_cached is not None:
        # There is indeed an object mapped to `key`. But is it still alive?
        obj = obj_cached()
        if obj is None:
            # Cleanup _SymbolCache (though practically unnecessary)
            # does not fail if it's already gone
            _SymbolCache.pop(key, None)
            return None
        else:
            return obj
    else:
        return None