import tensorflow as tf

                    w_c = variable_scope.get_variable("w_c", [options.attention_vec_size])
                    w_c = tf.expand_dims(tf.expand_dims(w_c, axis=0), axis=0)

            word_t_representation = self.embedding_lookup(word_t)

            (state_t, context_t, coverage_t, attn_dist_t, p_gen_t, output_t) = self.one_step_decoder(
                                state_t_1, context_t_1, coverage_t_1, word_t_representation, encoder_states, encoder_features,
                                passage_word_idx, passage_mask, v, w_c, word_vocab)
            vocab_scores = tf.log(output_t)
            greedy_prediction = tf.reshape(tf.argmax(output_t, 1),[-1]) # calcualte greedy
            multinomial_prediction = tf.reshape(tf.multinomial(vocab_scores, 1),[-1]) # calculate multinomial
            topk_log_probs, topk_ids = tf.nn.top_k(vocab_scores, beam_size) # calculate topK
        return (state_t, context_t, coverage_t, attn_dist_t, p_gen_t, output_t, topk_log_probs, topk_ids,
                greedy_prediction, multinomial_prediction)




    def merge_prob_dist_for_one_step(self, vocab_dist, attn_dist, p_gen, passage_word_idx, passage_mask=None):
        '''
        max_phrase_size: an input placehoder indications the maximum phrase size inside this batch
        vocab_dist: [batch_size, vsize]
