class_docstr: Lazily import a module, mainly to avoid pulling in large dependencies.
  
  This allows them to only be loaded when they are used.
docstr: Load the module and insert it into the parent's globals.
code: def _load(self):
      """Load the module and insert it into the parent's globals."""
      # Import the target module and insert it into the parent's namespace
      try:
          module = importlib.import_module(self.__name__)
      except ModuleNotFoundError as e:
          raise ModuleNotFoundError(
              f"Lazy module loader cannot find module named `{self.__name__}`. "
              f"This might be because TextAttack does not automatically install some optional dependencies. "
              f"Please run `pip install {self.__name__}` to install the package."
          ) from e
      self._parent_module_globals[self._local_name] = module
  
      # Update this object's dict so that if someone keeps a reference to the
      #   LazyLoader, lookups are efficient (__getattr__ is only called on lookups
      #   that fail).
      self.__dict__.update(module.__dict__)
  
      return module
  
file_path: TextAttack/textattack/shared/utils/importing.py
imports: import importlib
  import time
  import types
  import textattack
  from .install import logger
label_desc: Use image node_id 2 for calling the LazyLoader obj's underlying member method code with example usage: obj._load() and returns: module