code: def _get_scriptrunner_frame():
      prev_frame = None
      scriptrunner_frame = None
  
      # Look back in call stack to get the variable name passed into st.help().
      # The frame *before* the ScriptRunner frame is the correct one.
      # IMPORTANT: This will change if we refactor the code. But hopefully our tests will catch the
      # issue and we'll fix it before it lands upstream!
      for frame in inspect.stack():
          # Check if this is running inside a funny "exec()" block that won't provide the info we
          # need. If so, just quit.
          if frame.code_context is None:
              return None
  
          if frame.filename == SCRIPTRUNNER_FILENAME:
              scriptrunner_frame = prev_frame
              break
  
          prev_frame = frame
  
      return scriptrunner_frame
  
imports: import ast
  import contextlib
  import inspect
  import re
  import types
  from typing import TYPE_CHECKING, Any, cast
  from typing_extensions import Final
  import streamlit
  from streamlit.logger import get_logger
  from streamlit.proto.DocString_pb2 import DocString
  from streamlit.proto.DocString_pb2 import Member
  from streamlit.runtime.metrics_util import gather_metrics
  from streamlit.runtime.scriptrunner.script_runner import __file__
  from streamlit.runtime.secrets import Secrets
  from streamlit.string_util import is_mem_address_str
label_desc: Use image node_id 9 for calling a global function with example usage: _get_scriptrunner_frame() and returns: scriptrunner_frame, None