code: def try_and_raise_with_cause(action):
      """Decorator to raise exception with information about where in the model
      the error happened with the original cause.
      """
  
      def decorator(func):
          def decorated(self, *args, **kwargs):
              node = args[0]
              try:
                  return func(self, *args, **kwargs)
              except Exception as e:
                  message = (
                      "{} failed at {}. See above for details.".format(
                          action, node.name
                      )
                  )
                  raise RuntimeError(message) from e
  
          return decorated
  
      return decorator
  
imports: from collections import defaultdict
  from typing import Union, List, Dict, Set, Iterable, Optional
  from baikal._core.data_placeholder import is_data_placeholder_list, DataPlaceholder
  from baikal._core.digraph import DiGraph
  from baikal._core.step import Step, InputStep, Node
  from baikal._core.typing import ArrayLike
  from baikal._core.utils import listify, safezip2, SimpleCache, unlistify
label_desc: Use image node_id 1 for calling a global function with example usage: try_and_raise_with_cause(action) and returns: decorator, decorated, func