code: def add_scope(scope=None, scope_fn=None):
    
    def decorator(f):
  
      @functools.wraps(f)
      def decorated(*args, **kwargs):
        name = kwargs.pop("name", None)  # Python 2 hack for keyword only args
        with scope_fn(name or scope or f.__name__):
          return f(*args, **kwargs)
  
      return decorated
  
    return decorator
docs: Return a decorator which add a TF name/variable scope to a function.
  
    Note that the function returned by the decorator accept an additional 'name'
    parameter, which can overwrite the name scope given when the function is
    created.
  
    Args:
      scope (str): name of the scope. If None, the function name is used.
      scope_fn (fct): Either tf.name_scope or tf.variable_scope
  
    Returns:
      fct: the add_scope decorator