code: def unload_local_modules(target_dir_path: str = "."):
      """Unload all modules that are in the target directory or in a subdirectory of it.
      It is necessary to unload modules before re-executing a script that imports the modules,
      so that the new version of the modules is loaded.
      The module unloading feature is extracted from Streamlit's LocalSourcesWatcher (https://github.com/streamlit/streamlit/blob/1.24.0/lib/streamlit/watcher/local_sources_watcher.py)
      and packaged as a standalone function.
      """
      target_dir_path = os.path.abspath(target_dir_path)
      loaded_modules = {}  # filepath -> module_name
  
      # Copied from `LocalSourcesWatcher.update_watched_modules()`
      module_paths = {
          name: get_module_paths(module)
          for name, module in dict(sys.modules).items()
      }
  
      # Copied from `LocalSourcesWatcher._register_necessary_watchers()`
      for name, paths in module_paths.items():
          for path in paths:
              if file_is_in_folder_glob(
                  path, target_dir_path
              ) or file_in_pythonpath(path):
                  loaded_modules[path] = name
  
      # Copied from `LocalSourcesWatcher.on_file_changed()`
      for module_name in loaded_modules.values():
          if module_name is not None and module_name in sys.modules:
              del sys.modules[module_name]
  
file_path: gradio/js/wasm/src/webworker/py/unload_modules.py
imports: import logging
  import fnmatch
  import os
  import sys
  import types
  from typing import Optional, Set
label_desc: Use image node_id 6 for calling a global function with example usage: unload_local_modules(target_dir_path) without return types