code: def _import_module(name, package=None):
      global import_cache
      absolute_name = resolve_name(name, package)
      try:
          return import_cache[absolute_name]
      except KeyError:
          pass
  
      path = None
      if "." in absolute_name:
          parent_name, _, child_name = absolute_name.rpartition(".")
          parent_module = _import_module(parent_name)
          path = parent_module.__spec__.submodule_search_locations
  
      # Return the one from global Ivy if the module is marked to skip
      for module_to_skip in MODULES_TO_SKIP:
          if absolute_name.startswith(module_to_skip):
              if path is not None:
                  # Set reference to self in parent, if exist
                  setattr(
                      parent_module,
                      child_name,
                      sys.modules[absolute_name],
                  )
              return sys.modules[absolute_name]
  
      for finder in path_hooks:
          spec = finder.find_spec(absolute_name, path)
          if spec is not None:
              break
      else:
          msg = f"No module named {absolute_name!r}"
          raise ModuleNotFoundError(msg, name=absolute_name)
      module = module_from_spec(spec)
      import_cache[absolute_name] = module
      if ivy.is_local():
          spec.loader.exec_module(module, ivy._compiled_id)
      else:
          spec.loader.exec_module(module)
      if path is not None:
          # Set reference to self in parent, if exist
          setattr(parent_module, child_name, module)
      return module
  
file_path: ivy/ivy/utils/_importlib.py
imports: import ivy
  import sys
  from importlib.util import resolve_name, module_from_spec
  from ivy.utils.backend import ast_helpers
label_desc: Use image node_id 4 for calling a global function with example usage: _import_module(name, package) and returns: module, import_cache, sys