
    Χg                     R    d dl mc mZ d dlmZ ddlmZ dgZ G d de          Z	dS )    N)Tensor   )ModuleChannelShufflec                   Z     e Zd ZU dZdgZeed<   deddf fdZdedefdZ	de
fdZ xZS )	r   a'  Divides and rearranges the channels in a tensor.

    This operation divides the channels in a tensor of shape :math:`(N, C, *)`
    into g groups as :math:`(N, \frac{C}{g}, g, *)` and shuffles them,
    while retaining the original tensor shape in the final output.

    Args:
        groups (int): number of groups to divide channels in.

    Examples::

        >>> channel_shuffle = nn.ChannelShuffle(2)
        >>> input = torch.arange(1, 17, dtype=torch.float32).view(1, 4, 2, 2)
        >>> input
        tensor([[[[ 1.,  2.],
                  [ 3.,  4.]],
                 [[ 5.,  6.],
                  [ 7.,  8.]],
                 [[ 9., 10.],
                  [11., 12.]],
                 [[13., 14.],
                  [15., 16.]]]])
        >>> output = channel_shuffle(input)
        >>> output
        tensor([[[[ 1.,  2.],
                  [ 3.,  4.]],
                 [[ 9., 10.],
                  [11., 12.]],
                 [[ 5.,  6.],
                  [ 7.,  8.]],
                 [[13., 14.],
                  [15., 16.]]]])
    groupsreturnNc                 V    t                                                       || _        d S N)super__init__r   )selfr   	__class__s     [/var/www/html/ai-engine/env/lib/python3.11/site-packages/torch/nn/modules/channelshuffle.pyr   zChannelShuffle.__init__0   s$        inputc                 6    t          j        || j                  S r   )Fchannel_shuffler   )r   r   s     r   forwardzChannelShuffle.forward4   s     444r   c                     d| j          S )Nzgroups=)r   )r   s    r   
extra_reprzChannelShuffle.extra_repr7   s    &&&&r   )__name__
__module____qualname____doc____constants__int__annotations__r   r   r   strr   __classcell__)r   s   @r   r   r   
   s            D JMKKKs t      5V 5 5 5 5 5'C ' ' ' ' ' ' ' 'r   )
torch.nn.functionalnn
functionalr   torchr   moduler   __all__r    r   r   <module>r)      s                         
.' .' .' .' .'V .' .' .' .' .'r   