code: def _next_state(index, event_time, transition_set, population_view):
      
  
      if len(transition_set) == 0 or index.empty:
          return
  
      outputs, decisions = transition_set.choose_new_state(index)
      groups = _groupby_new_state(index, outputs, decisions)
  
      if groups:
          for output, affected_index in sorted(groups, key=lambda x: str(x[0])):
              if output == 'null_transition':
                  pass
              elif isinstance(output, Transient):
                  if not isinstance(output, State):
                      raise ValueError('Invalid transition output: {}'.format(output))
                  output.transition_effect(affected_index, event_time, population_view)
                  output.next_state(affected_index, event_time, population_view)
              elif isinstance(output, State):
                  output.transition_effect(affected_index, event_time, population_view)
              else:
                  raise ValueError('Invalid transition output: {}'.format(output))
docs: Moves a population between different states using information from a `TransitionSet`.
  
      Parameters
      ----------
      index : iterable of ints
          An iterable of integer labels for the simulants.
      event_time : pandas.Timestamp
          When this transition is occurring.
      transition_set : TransitionSet
          A set of potential transitions available to the simulants.
      population_view : vivarium.framework.population.PopulationView
          A view of the internal state of the simulation.