code: def _take_action(self, action):
      if self.use_full_action_space:
          action_identifier = action[0]
          action_arguments = action[1:]
          action = actions.FunctionCall(
              action_identifier, action_arguments
          )
      else:
          coord = np.array(action[0:2])
          noop = False
          coord = coord.round()
          coord = np.clip(coord, 0, SCREEN_SIZE - 1)
          self.last_action_idx = coord
  
          if noop:
              action = actions.FunctionCall(_NOOP, [])
          else:
              action = actions.FunctionCall(
                  _MOVE_SCREEN, [_NOT_QUEUED, coord]
              )
  
      self.last_result = self.env.step(actions=[action])
  
imports: from enum import Enum
  from typing import Union, List
  import numpy
  from rl_coach.filters.observation.observation_move_axis_filter import ObservationMoveAxisFilter
  from rl_coach.environments.environment import Environment, EnvironmentParameters, LevelSelection
  from rl_coach.base_parameters import VisualizationParameters
  from rl_coach.spaces import BoxActionSpace, VectorObservationSpace, PlanarMapsObservationSpace, StateSpace, CompoundActionSpace, DiscreteActionSpace
  from rl_coach.filters.filter import InputFilter, OutputFilter
  from rl_coach.filters.observation.observation_rescale_to_size_filter import ObservationRescaleToSizeFilter
  from rl_coach.filters.action.linear_box_to_box_map import LinearBoxToBoxMap
  from rl_coach.filters.observation.observation_to_uint8_filter import ObservationToUInt8Filter
label_desc: Use image node_id 3 for calling the StarCraft2Environment obj's underlying member method code with example usage: obj._take_action(action) without return types