code: def sample_indexes_by_sequence(indexes, sequence):
      
      N = len(sequence)
      res = np.zeros((N,2), dtype=int)
      for t in range(N):
          s = sequence[t]
          i = np.random.randint(indexes[s].shape[0])
          res[t,:] = indexes[s][i,:]
  
      return res
docs: Samples trajectory/time indexes according to the given sequence of states
  
      Parameters
      ----------
      indexes : list of ndarray( (N_i, 2) )
          For each state, all trajectory and time indexes where this state occurs.
          Each matrix has a number of rows equal to the number of occurrences of the corresponding state,
          with rows consisting of a tuple (i, t), where i is the index of the trajectory and t is the time index
          within the trajectory.
      sequence : array of integers
          A sequence of discrete states. For each state, a trajectory/time index will be sampled at which dtrajs
          have an occurrences of this state
  
      Returns
      -------
      indexes : ndarray( (N, 2) )
          The sampled index sequence.
          Index array with a number of rows equal to N=len(sequence), with rows consisting of a tuple (i, t),
          where i is the index of the trajectory and t is the time index within the trajectory.