docs: def make_batch(self):
      """Generator function for batchifying data for learning to execute.
  
      Yields:
        tuple:
          1. one-hot input tensor, representing programmatic input
          2. one-hot target tensor, the vealuation result.
          3. one-hot decoder target, start symbol added for sequence decoding.
          4. batch size tensor containing integer input sequence lengths.
          5. batch size tensor containing integer output sequence lengths.
      """
      while True:
        self.reset_data_source()
        obs = np.reshape(self._data_source.flat_data,
                         [self.batch_size, -1])[:, :self._num_steps].T
        target = np.reshape(
            self._data_source.flat_targets,
            [self.batch_size, -1])[:, :self._num_steps_out].T
        start_tokens = np.ndarray([1, self.batch_size], dtype=np.int32)
        start_tokens.fill(self._data_source.start_token[0])
        target_in = np.concatenate((start_tokens, target[:-1, :]), axis=0)
        yield (self._np_one_hot(obs, self._num_steps),
               self._np_one_hot(target, self._num_steps_out),
               self._np_one_hot(target_in, self._num_steps_out),
               self.seq_sizes_in,
               self.seq_sizes_out)