def block_cat(self, Y0, Y1):
        r"""Concatenate components corresponding to :math:`\mathbf{y}_0`
        and :math:`\mathbf{y}_1` to form :math:`\mathbf{y}\;\;`.
        The method from parent class :class:`.ADMMTwoBlockCnstrnt` is
        overridden here to allow swapping of C (channel) and M
        (filter) axes in block 0 so that it can be concatenated on
        axis M with block 1. This is necessary because block 0 has the
        dimensions of S (N x C x K x 1) while block 1 has the
        dimensions of X (N x 1 x K x M).
        """

        if self.y0swapaxes:
            return np.concatenate((np.swapaxes(Y0, self.cri.axisC,
                                  self.cri.axisM), Y1), axis=self.blkaxis)
        else:
            return super(ConvTwoBlockCnstrnt, self).block_cat(Y0, Y1)
def block_cat ( self , Y0 , Y1 ) : if self . y0swapaxes : return np . concatenate ( ( np . swapaxes ( Y0 , self . cri . axisC , self . cri . axisM ) , Y1 ) , axis = self . blkaxis ) else : return super ( ConvTwoBlockCnstrnt , self ) . block_cat ( Y0 , Y1 )
r"""Concatenate components corresponding to :math:`\mathbf{y}_0`
        and :math:`\mathbf{y}_1` to form :math:`\mathbf{y}\;\;`.
        The method from parent class :class:`.ADMMTwoBlockCnstrnt` is
        overridden here to allow swapping of C (channel) and M
        (filter) axes in block 0 so that it can be concatenated on
        axis M with block 1. This is necessary because block 0 has the
        dimensions of S (N x C x K x 1) while block 1 has the
        dimensions of X (N x 1 x K x M).