code: def step(self, action):
          
  
          # Use random actions for all other agents in environment.
          if self._multiagent:
              if not isinstance(action, list):
                  raise UnityGymException("The environment was expecting `action` to be a list.")
              if len(action) != self._n_agents:
                  raise UnityGymException(
                      "The environment was expecting a list of {} actions.".format(self._n_agents))
              else:
                  if self._flattener is not None:
                      # Action space is discrete and flattened - we expect a list of scalars
                      action = [self._flattener.lookup_action(_act) for _act in action]
                  action = np.array(action)
          else:
              if self._flattener is not None:
                  # Translate action into list
                  action = self._flattener.lookup_action(action)
  
          info = self._env.step(action)[self.brain_name]
          n_agents = len(info.agents)
          self._check_agents(n_agents)
          self._current_state = info
  
          if not self._multiagent:
              obs, reward, done, info = self._single_step(info)
              self.game_over = done
          else:
              obs, reward, done, info = self._multi_step(info)
              self.game_over = all(done)
          return obs, reward, done, info
docs: Run one timestep of the environment's dynamics. When end of
          episode is reached, you are responsible for calling `reset()`
          to reset this environment's state.
          Accepts an action and returns a tuple (observation, reward, done, info).
          In the case of multi-agent environments, these are lists.
          Args:
              action (object/list): an action provided by the environment
          Returns:
              observation (object/list): agent's observation of the current environment
              reward (float/list) : amount of reward returned after previous action
              done (boolean/list): whether the episode has ended.
              info (dict): contains auxiliary diagnostic information, including BrainInfo.