code: def deep_map(func, value):
      
      try:
          return _deep_map(func, value, ())
      except RuntimeError as exc:
          if 'maximum recursion depth exceeded' in str(exc):
              raise dbt.exceptions.RecursionException(
                  'Cycle detected in deep_map'
              )
          raise
docs: map the function func() onto each non-container value in 'value'
      recursively, returning a new value. As long as func does not manipulate
      value, then deep_map will also not manipulate it.
  
      value should be a value returned by `yaml.safe_load` or `json.load` - the
      only expected types are list, dict, native python number, str, NoneType,
      and bool.
  
      func() will be called on numbers, strings, Nones, and booleans. Its first
      parameter will be the value, and the second will be its keypath, an
      iterable over the __getitem__ keys needed to get to it.
  
      :raises: If there are cycles in the value, raises a
          dbt.exceptions.RecursionException