docs: def returns(*checkers_args):
      """ Create a decorator for validating function return values.
  
      Parameters
      ----------
      checkers_args: positional arguments
          A single functions to apply to the output of the decorated function. If a tuple is returned 
          by the decorated function, multiple function can be listed and are assumed to match by 
          possition to the elements in the returned tuple.   
  
      Examples
      --------
      @returns(df_checker)
      def do_something_with_df(df, args*, kw**):
          print(df.head())
          return df
  
      @returns(df_checker1, df_checker2)
      def do_something_with_dfs(df1, df2, args*, kw**):
          # Do somethign with both dfs
          return (df1, df2)
      """
      
      @decorator
      def run_checkers(func, *args, **kwargs):
          ret = func(*args, **kwargs)
          
          if type(ret) != tuple:
              ret = (ret, )
          assert len(ret) == len(checkers_args)
          
          if checkers_args:
              for idx, checker_function in enumerate(checkers_args):
                  if callable(checker_function):
                      result = checker_function(ret[idx])
          return ret
      return run_checkers