docs: def require(f):
      '''
      The @require decorator, usable in an immutable class (see immutable), specifies that the
      following function is actually a validation check on the immutable class. These functions
      will appear as static members of the class and get called automatically when the relevant
      data change. Daughter classes can overload requirements to change them, or may add new
      requirements with different function names.
      '''
      (args, varargs, kwargs, dflts) = getargspec_py27like(f)
      if varargs is not None or kwargs is not None or dflts:
          raise ValueError(
              'Requirements may not accept variable, variadic keyword, or default arguments')
      f._pimms_immutable_data_ = {}
      f._pimms_immutable_data_['is_check'] = True
      f._pimms_immutable_data_['inputs'] = args
      f._pimms_immutable_data_['name'] = f.__name__
      f = staticmethod(f)
      return f