<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_states(self, action_name, config_name, instances=None, map_name=None, **kwargs):
 """ Returns a generator of states in relation to the indicated action. :param action_name: Action name. :type action_name: unicode | str :param config_name: Name(s) of container configuration(s) or MapConfigId tuple(s). :type config_name: unicode | str | collections.Iterable[unicode | str] | dockermap.map.input.InputConfigId | collections.Iterable[dockermap.map.input.InputConfigId] :param instances: Optional instance names, where applicable but not included in ``config_name``. :type instances: unicode | str | collections.Iterable[unicode | str] :param map_name: Optional map name, where not inlcuded in ``config_name``. :param kwargs: Additional kwargs for state generation, action generation, runner, or the client action. :return: Resulting states of the configurations. :rtype: collections.Iterable[dockermap.map.state.ConfigState] """

        policy = self.get_policy()
        _set_forced_update_ids(kwargs, policy.container_maps, map_name or self._default_map, instances)
        state_generator = self.get_state_generator(action_name, policy, kwargs)
        log.debug("Remaining kwargs passed to client actions: %s", kwargs)
        config_ids = get_map_config_ids(config_name, policy.container_maps, map_name or self._default_map,
                                        instances)
        log.debug("Generating states for configurations: %s", config_ids)
        return state_generator.get_states(config_ids)