code: def zip_with_output(skip_args=[]):
      
      def decorator(fn):
          def wrapped(*args, **vargs):
              g = [arg for i, arg in enumerate(args) if i not in skip_args]
              if len(g) == 1:
                  return(g[0], fn(*args, **vargs))
              else:
                  return (g, fn(*args, **vargs))
          return wrapped
      return decorator
docs: decorater that zips the input of a function with its output 
          only zips positional arguments.
  
          skip_args : list
              a list of indexes of arguments to exclude from the skip
  
              @zip_with_output(skip_args=[0])
              def foo(bar, baz):
                  return baz
  
          will decorate foo s.t.
  
              foo(x, y) = y