code: def arity_evaluation_checker(function):
          
          is_class = inspect.isclass(function)
          if is_class:
              function = function.__init__
          function_info = inspect.getargspec(function)
          function_args = function_info.args
          if is_class:
              # This is to handle the fact that self will get passed in
              # automatically.
              function_args = function_args[1:]
  
          def evaluation_checker(*args, **kwargs):
              kwarg_keys = set(kwargs.keys())
              if function_info.keywords is None:
                  acceptable_kwargs = function_args[len(args):]
                  # Make sure that we didn't get an argument we can't handle.
                  if not kwarg_keys.issubset(acceptable_kwargs):
                      TypeError("Unrecognized Arguments: {0}".format(
                          [key for key in kwarg_keys
                           if key not in acceptable_kwargs]
                      ))
  
              needed_args = function_args[len(args):]
              if function_info.defaults:
                  needed_args = needed_args[:-len(function_info.defaults)]
              return not needed_args or kwarg_keys.issuperset(needed_args)
          return evaluation_checker
docs: Build an evaluation checker that will return True when it is
          guaranteed that all positional arguments have been accounted for.