class_docstr: Example:
      >>> from bigdl.chronos.utils import LazyImport
      >>> forecaster = LazyImport('bigdl.chronos.forecaster.lstm_forecaster.LSTMForecaster')
      >>> forecaster.from_tsdataset(tsdataset, ...)
      >>> forecaster(...)
code: def __getattr__(self, name):
      absolute_name = importlib.util.resolve_name(
          self.module_name, self.pkg
      )
      # not reload modules
      try:
          return getattr(sys.modules[absolute_name], name)
      except (KeyError, AttributeError):
          pass
  
      if "." in absolute_name:
          # Split module name to prevent class name from being introduced as package
          parent_name, _, child_name = absolute_name.rpartition(".")
      else:
          parent_name, child_name = absolute_name, None
  
      try:
          # For import parent module and get the submodule with getattr.
          module = importlib.import_module(parent_name)
          module = getattr(module, child_name) if child_name else module
      except AttributeError:
          # Triggered when the parent module cannot get the child module using getattr.
          # More common when calling staticmethods or classmethods. e.g. from_tsdataset.
          full_module_name = (
              parent_name + "." + child_name
              if child_name
              else parent_name
          )
          spec = importlib.util.find_spec(full_module_name)
          module = importlib.util.module_from_spec(spec)
          spec.loader.exec_module(module)
  
      return getattr(module, name)
  
file_path: BigDL/python/chronos/src/bigdl/chronos/utils.py
imports: import warnings
  from functools import wraps
  import importlib
  import sys
  import pickle
  import hmac
  import hashlib
  from bigdl.nano.utils.common import invalidInputError
label_desc: Use image node_id 2 for calling the LazyImport obj's underlying member method code with example usage: obj.__getattr__(name) and returns: getattr, getattr