docs: def _check_state(self, state):
          """
          Checks if a list representing the state of the variables is valid.
          """
          if not hasattr(state, '__iter__') or isinstance(state, six.string_types):
              raise ValueError('Start state must be a non-string iterable object.')
          state_vars = {s.var for s in state}
          if not state_vars == set(self.variables):
              raise ValueError('Start state must represent a complete assignment to all variables.'
                               'Expected variables in state: {svar}, Got: {mvar}.'.format(svar=state_vars,
                                                                                          mvar=set(self.variables)))
          for var, val in state:
              if val >= self.cardinalities[var]:
                  raise ValueError('Assignment {val} to {var} invalid.'.format(val=val, var=var))
          return True