'Extends a batch of event sequences by a single step each.
This method modifies the event sequences in place.
Args:
event_sequences: A list of event sequences, each of which is a Python
list-like object. The list of event sequences should have length equal
to `self._batch_size()`. These are extended by this method.
inputs: A Python list of model inputs, with length equal to
`self._batch_size()`.
initial_state: A numpy array containing the initial RNN state, where
`initial_state.shape[0]` is equal to `self._batch_size()`.
temperature: The softmax temperature.
Returns:
final_state: The final RNN state, a numpy array the same size as
`initial_state`.
loglik: The log-likelihood of the chosen softmax value for each event
sequence, a 1-D numpy array of length
`self._batch_size()`. If `inputs` is a full-length inputs batch, the
log-likelihood of each entire sequence up to and including the
generated step will be computed and returned.'

def _generate_step_for_batch(self, event_sequences, inputs, initial_state, temperature):

    assert (len(event_sequences) == self._batch_size())
    graph_inputs = self._session.graph.get_collection('inputs')[0]
    graph_initial_state = self._session.graph.get_collection('initial_state')
    graph_final_state = self._session.graph.get_collection('final_state')
    graph_softmax = self._session.graph.get_collection('softmax')[0]
    graph_temperature = self._session.graph.get_collection('temperature')
    feed_dict = {graph_inputs: inputs, tuple(graph_initial_state): initial_state}
    if graph_temperature:
        feed_dict[graph_temperature[0]] = temperature
    (final_state, softmax) = self._session.run([graph_final_state, graph_softmax], feed_dict)
    if (softmax.shape[1] > 1):
        loglik = self._config.encoder_decoder.evaluate_log_likelihood(event_sequences, softmax[:, :(-1), :])
    else:
        loglik = np.zeros(len(event_sequences))
    indices = self._config.encoder_decoder.extend_event_sequences(event_sequences, softmax)
    p = softmax[(range(len(event_sequences)), (-1), indices)]
    return (final_state, (loglik + np.log(p)))
