code: def update_wrapper(
      wrapper,
      wrapped,
      assigned=WRAPPER_ASSIGNMENTS,
      updated=WRAPPER_UPDATES,
  ):
      """Update a wrapper function to look like the wrapped function
  
      wrapper is the function to be updated
      wrapped is the original function
      assigned is a tuple naming the attributes assigned directly
      from the wrapped function to the wrapper function (defaults to
      functools.WRAPPER_ASSIGNMENTS)
      updated is a tuple naming the attributes of the wrapper that
      are updated with the corresponding attribute from the wrapped
      function (defaults to functools.WRAPPER_UPDATES)
      """
      for attr in assigned:
          try:
              value = getattr(wrapped, attr)
          except AttributeError:
              pass
          else:
              setattr(wrapper, attr, value)
      for attr in updated:
          getattr(wrapper, attr).update(getattr(wrapped, attr, {}))
      # Issue #17482: set __wrapped__ last so we don't inadvertently copy it
      # from the wrapped function when updating __dict__
      wrapper.__wrapped__ = wrapped
      # Return the wrapper so this can be used as a decorator via partial()
      return wrapper
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  from __future__ import unicode_literals
  import sys
  from abc import ABCMeta
label_desc: Use image node_id 3 for calling a global function with example usage: update_wrapper(wrapper, wrapped, assigned, updated) and returns: wrapper