code: def exec_module(self, module, local_ivy_id=None):
      if self.filename in _compiled_modules_cache:
          compiled_obj = _compiled_modules_cache[self.filename]
      else:
          # enforce UTF-8 for compiling when installed as a package
          # according to PEP 686
          with open(self.filename, encoding="utf-8") as f:
              data = f.read()
  
          ast_tree = parse(data)
          transformer = ImportTransformer()
          transformer.visit(ast_tree)
          transformer.impersonate_import(ast_tree, local_ivy_id)
          ast.fix_missing_locations(ast_tree)
          compiled_obj = compile(
              ast_tree, filename=self.filename, mode="exec"
          )
          _compiled_modules_cache[self.filename] = compiled_obj
      try:
          exec(compiled_obj, module.__dict__)
      except Exception as e:
          print(e)
          traceback.print_exc()
          raise e
  
imports: import ast
  import os
  import sys
  import traceback
  from ast import parse
  from string import Template
  from importlib.util import spec_from_file_location
  from importlib.abc import Loader, MetaPathFinder
label_desc: Use image node_id 2 for calling the IvyLoader obj's underlying member method code with example usage: obj.exec_module(module, local_ivy_id) without return types