code: def _create_message(
      cache_type: CacheType,
      func: types.FunctionType,
      arg_name: Optional[str],
      arg_value: Any,
  ) -> str:
      arg_name_str = arg_name if arg_name is not None else "(unnamed)"
      arg_type = type_util.get_fqn_type(arg_value)
      func_name = func.__name__
      arg_replacement_name = (
          f"_{arg_name}" if arg_name is not None else "_arg"
      )
  
      return (
          f"""
  Cannot hash argument '{arg_name_str}' (of type `{arg_type}`) in '{func_name}'.
  
  To address this, you can tell Streamlit not to hash this argument by adding a
  leading underscore to the argument's name in the function signature:
  
  ```
  @st.{get_decorator_api_name(cache_type)}
  def {func_name}({arg_replacement_name}, ...):
      ...
  ```
              """
      ).strip("\n")
  
imports: import types
  from typing import Any, Optional
  from streamlit import type_util
  from streamlit.errors import MarkdownFormattedException, StreamlitAPIException, StreamlitAPIWarning
  from streamlit.runtime.caching.cache_type import CacheType, get_decorator_api_name
label_desc: Use image node_id 2 for calling the UnhashableParamError obj's underlying member method code with example usage: obj._create_message(cache_type, func, arg_name, arg_value) and returns: str, arg_name_str, str, arg_type, str, func_name, str, get_decorator_api_name, str, func_name, str, arg_replacement_name, str