import tensorflow as tf

            cells.append(cell)

        if len(cells) == 1:
            return cells[0]
        else:
            return CellWrapper(MultiRNNCell(cells))

    def look(time, state, input_, prev_weights=None, pos=None, context=None):
        prev_weights_ = [prev_weights if i == align_encoder_id else None for i in range(len(encoders))]
        pos_ = None
        if decoder.pred_edits:
            pos_ = [pos if i == align_encoder_id else None for i in range(len(encoders))]
        if decoder.attn_prev_word:
            state = tf.concat([state, input_], axis=1)

        if decoder.attn_prev_attn and context is not None:
            state = tf.concat([state, context], axis=1)

        if decoder.hidden_state_scaling:
            attention_states_ = [states * decoder.hidden_state_scaling for states in attention_states]
        else:
            attention_states_ = attention_states

        parameters = dict(hidden_states=attention_states_, encoder_input_length=encoder_input_length,
                          encoders=encoders, aggregation_method=decoder.aggregation_method)
        context, new_weights = multi_attention(state, time=time, pos=pos_, prev_weights=prev_weights_, **parameters)
