import tensorflow as tf

        # Select only unused blocks
        with tf.variable_scope('select'):
            stacked_blocks = tf.stack(cell_inputs + blocks)
            out_blocks = tf.gather(stacked_blocks, unused_indices, axis=0)
            out_blocks = tf.transpose(out_blocks, (1, 2, 3, 0, 4))

        # Combine to constant channels
        with tf.variable_scope('combine'):
            W = self._make_var('W', (ni, block_ch * block_ch))
            W = tf.gather(W, unused_indices, axis=0)
            W = tf.reshape(W, (1, 1, num_out_blocks * block_ch, block_ch))
            X = tf.reshape(out_blocks, (-1, w, h, num_out_blocks * block_ch))
            X = tf.nn.relu(X)
            X = tf.nn.conv2d(X, W, (1, 1, 1, 1), padding='SAME')
            X = self._add_batch_norm(X, block_ch, is_train=is_train)

        return (X, block_ch)

    def _add_op(self, cell_inputs, blocks, input_idx, op, w, h, ch, is_reduction=False, is_train=False):
        ni = len(cell_inputs + blocks)
        inputs = cell_inputs + blocks
        op_map = self._get_op_map()

        # Just build output for select operation
        X = inputs[input_idx]
        op_no = OPS[op]
