code: def deep_disjoint_update(target, source):  # , ignore=()
      for key, value in source.items():
          if key not in target:
              target[key] = value
          # elif key in ignore:
          #     continue
          elif isinstance(target[key], dict):
              if not isinstance(value, dict):
                  raise TensorforceError.mismatch(
                      name="spec",
                      argument=key,
                      value1=target[key],
                      value2=value,
                  )
              deep_disjoint_update(target=target[key], source=value)
          elif is_iterable(x=target[key]):
              if not is_iterable(x=value) or len(target[key]) != len(
                  value
              ):
                  raise TensorforceError.mismatch(
                      name="spec",
                      argument=key,
                      value1=target[key],
                      value2=value,
                  )
              for x, y in zip(target[key], value):
                  if x != y:
                      raise TensorforceError.mismatch(
                          name="spec",
                          argument=key,
                          value1=target[key],
                          value2=value,
                      )
          elif target[key] != value:
              raise TensorforceError.mismatch(
                  name="spec",
                  argument=key,
                  value1=target[key],
                  value2=value,
              )
  
imports: from datetime import datetime
  import importlib
  import logging
  import numpy
  import tensorflow
  from tensorforce import TensorforceError
label_desc: Use image node_id 8 for calling a global function with example usage: deep_disjoint_update(target, source) without return types