def METHOD_NAME(state_variables):
    """
    Specifies arguments which are state variables.  Only works on the
    ``__init__`` method of a class that is additionally decorated with
    :py:meth:`defaults`
    :param iterable(str) state_variables:
        The names of the arguments that are state variables
    """
    def wrap(method):
        # pylint: disable=protected-access
        # Find the real method in case we use multiple of these decorators
        wrapped = method
        while hasattr(method, "_method"):
            method = getattr(method, "_method")
        # Store the state variables of the method to be used later
        method._state_variables = frozenset(state_variables)
        method_args = inspect.getfullargspec(method)
        def wrapper(*args, **kwargs):
            # Check for state variables that have been specified in cell_params
            args_provided = method_args.args[:len(args)]
            args_provided.extend([
                arg for arg in kwargs.keys() if arg in method_args.args])
            for arg in args_provided:
                if arg in method._state_variables:
                    logger.warning(
                        "Formal PyNN specifies that {} should be set using "
                        "initial_values not cell_params", arg)
            wrapped(*args, **kwargs)
        # Store the real method in the returned object
        wrapper._method = method
        return wrapper
    return wrap