code: def merge_dict(dct, merge_dct):
      """Recursive dict merge. Inspired by :meth:``dict.update()``, instead of updating only top-level keys,
      dict_merge recurses down into dicts nested to an arbitrary depth, updating keys. The ``merge_dct`` is merged
      into ``dct``.
  
      :param dct: dict onto which the merge is executed
      :param merge_dct: dct merged into dct
      :return: None
      """
      dct = copy.deepcopy(dct)
      for k, v in merge_dct.items():
          if (
              k in dct
              and isinstance(dct[k], dict)
              and isinstance(merge_dct[k], Mapping)
          ):
              dct[k] = merge_dict(dct[k], merge_dct[k])
          else:
              dct[k] = merge_dct[k]
      return dct
  
imports: import copy
  import functools
  import os
  import random
  import subprocess
  import weakref
  from collections import OrderedDict
  from collections.abc import Mapping
  from typing import Any, Dict, TYPE_CHECKING
  import numpy
  import torch
  from ludwig.api_annotations import DeveloperAPI
  from ludwig.constants import PROC_COLUMN
  from ludwig.globals import DESCRIPTION_FILE_NAME
  from ludwig.utils import fs_utils
  from ludwig.utils.fs_utils import find_non_existing_dir_by_adding_suffix
label_desc: Use image node_id 2 for calling a global function with example usage: merge_dict(dct, merge_dct) and returns: dct