code: def make_cached_func_wrapper(
      info: CachedFuncInfo,
  ) -> Callable[..., Any]:
      """Create a callable wrapper around a CachedFunctionInfo.
  
      Calling the wrapper will return the cached value if it's already been
      computed, and will call the underlying function to compute and cache the
      value otherwise.
  
      The wrapper also has a `clear` function that can be called to clear
      all of the wrapper's cached values.
      """
      cached_func = CachedFunc(info)
  
      # We'd like to simply return `cached_func`, which is already a Callable.
      # But using `functools.update_wrapper` on the CachedFunc instance
      # itself results in errors when our caching decorators are used to decorate
      # member functions. (See https://github.com/streamlit/streamlit/issues/6109)
  
      @functools.wraps(info.func)
      def wrapper(*args, **kwargs):
          return cached_func(*args, **kwargs)
  
      # Give our wrapper its `clear` function.
      # (This results in a spurious mypy error that we suppress.)
      wrapper.clear = cached_func.clear  # type: ignore
  
      return wrapper
  
imports: from __future__ import annotations
  import functools
  import hashlib
  import inspect
  import math
  import threading
  import time
  import types
  from abc import abstractmethod
  from collections import defaultdict
  from datetime import timedelta
  from typing import Any, Callable, overload
  from typing_extensions import Literal
  from streamlit import type_util
  from streamlit.elements.spinner import spinner
  from streamlit.logger import get_logger
  from streamlit.runtime.caching.cache_errors import BadTTLStringError, CacheError, CacheKeyNotFoundError, UnevaluatedDataFrameError, UnhashableParamError, UnhashableTypeError, UnserializableReturnValueError, get_cached_func_name_md
  from streamlit.runtime.caching.cache_type import CacheType
  from streamlit.runtime.caching.cached_message_replay import CachedMessageReplayContext, CachedResult, MsgData, replay_cached_messages
  from streamlit.runtime.caching.hashing import HashFuncsDict, update_hash
  from streamlit.util import HASHLIB_KWARGS
label_desc: Use image node_id 4 for calling a global function with example usage: make_cached_func_wrapper(info) and returns: wrapper, cached_func