@staticmethod
def _isSimpleState(states):
    """
        Given a dict, determines if it represents a Puzzle states dict as
        opposed to a StateSet description.

        :param states: dict. A dict that may or may not be a Puzzle states dict.
        :return: bool. True if ``states`` is a Puzzle states dict.
        """
    if not isinstance(states, dict):
        raise ValueError("Expected 'states' to be a dict")
    for groupName, groupState in states.items():
        if groupState == '*':
            return False
        if not isinstance(states, dict):
            raise ValueError("All group states must be of type 'dict'")
        for subgroupName, subgroupState in groupState.items():
            if subgroupState == '*':
                return False
            if not hasattr(subgroupState, '__iter__'):
                raise ValueError('Subgroup states must be iterable')
            if not hasattr(subgroupState, '__len__'):
                raise ValueError('Subgroup states must define __len__')
            for groupElementCondition in subgroupState:
                if not isinstance(groupElementCondition, int):
                    return False
    return True
