import tensorflow as tf


                with tf.variable_scope('X1'):
                    X1 = self._add_op_dynamic(cell_inputs, blocks, idx1, op1, w, h, block_ch, is_train=is_train)
                    X1 = self._add_drop_path(X1, drop_path_keep_prob)

                with tf.variable_scope('X2'):
                    X2 = self._add_op_dynamic(cell_inputs, blocks, idx2, op2, w, h, block_ch, is_train=is_train)
                    X2 = self._add_drop_path(X2, drop_path_keep_prob)

                X = tf.add_n([X1, X2])

            blocks.append(X)

        (X, comb_ch) = self._combine_cell_blocks_dynamic(cell_inputs, blocks, cell_arch, w, h, block_ch, is_train)

        X = tf.reshape(X, (-1, w, h, comb_ch)) # Sanity shape check

        layers.append((X, w, h, comb_ch))

    def _add_static_cell(self, cell_arch, layers, w, h, block_ch, drop_path_keep_prob, is_train=False, is_reduction=False):
        b = CELL_NUM_BLOCKS

        # Calibrate inputs as necessary to last input layer's dimensions and add them to hidden states
        cell_inputs = [layers[-2] if len(layers) > 1 else layers[-1], layers[-1]]
        (_, w_inp_last, h_inp_last, _) = cell_inputs[-1]
        for (i, (inp, w_inp, h_inp, ch_inp)) in enumerate(cell_inputs):
            with tf.variable_scope('input_{}_calibrate'.format(i)):
                inp = self._calibrate(inp, w_inp, h_inp, ch_inp, w_inp_last, h_inp_last, block_ch, is_train=is_train)

                # Apply conv 1x1 on last input
