code: def math_func(f):
      
      @wraps(f)
      def wrapper(*args, **kwargs):
          if len(args) > 0:
              return_type = type(args[0])
          if kwargs.has_key('return_type'):
              return_type = kwargs['return_type']
              kwargs.pop('return_type')
              return return_type(f(*args, **kwargs))
          args = list((setify(x) for x in args))
          return return_type(f(*args, **kwargs))
      return wrapper
docs: Statics the methods. wut.