'Create a RNN cell composed sequentially of a number of RNNCells.
Args:
cells: list of RNNCells that will be composed in this order.
state_is_tuple: If True, accepted and returned states are n-tuples, where
`n = len(cells)`.  If False, the states are all
concatenated along the column axis.  This latter behavior will soon be
deprecated.
residual_connections: If true, add residual connections between all cells.
This requires all cells to have the same output_size. Also, iff the
input size is not equal to the cell output size, a linear transform
is added before the first layer.
residual_combiner: One of "add" or "concat". To create inputs for layer
t+1 either "add" the inputs from the prev layer or concat them.
residual_dense: Densely connect each layer to all other layers
Raises:
ValueError: if cells is empty (not allowed), or at least one of the cells
returns a state tuple but the flag `state_is_tuple` is `False`.'

def __init__(self, cells, residual_connections=False, residual_combiner=u'add', residual_dense=False):

    super(ExtendedMultiRNNCell, self).__init__(cells, state_is_tuple=True)
    assert (residual_combiner in [u'add', u'concat', u'mean'])
    self._residual_connections = residual_connections
    self._residual_combiner = residual_combiner
    self._residual_dense = residual_dense
