§
    �Štjl  ã                   óp   — d dl mc mZ d dlmZ ddlmZ ddgZ G d„ de¦  «        Z	 G d„ de¦  «        Z
dS )	é    N)ÚTensoré   )ÚModuleÚPixelShuffleÚPixelUnshufflec                   ó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   aS  Rearrange elements in a tensor according to an upscaling factor.

    Rearranges elements in a tensor of shape :math:`(*, C \times r^2, H, W)`
    to a tensor of shape :math:`(*, C, H \times r, W \times r)`, where r is an upscale factor.

    This is useful for implementing efficient sub-pixel convolution
    with a stride of :math:`1/r`.

    See the paper:
    `Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network`_
    by Shi et al. (2016) for more details.

    Args:
        upscale_factor (int): factor to increase spatial resolution by

    Shape:
        - Input: :math:`(*, C_{in}, H_{in}, W_{in})`, where * is zero or more batch dimensions
        - Output: :math:`(*, C_{out}, H_{out}, W_{out})`, where

    .. math::
        C_{out} = C_{in} \div \text{upscale\_factor}^2

    .. math::
        H_{out} = H_{in} \times \text{upscale\_factor}

    .. math::
        W_{out} = W_{in} \times \text{upscale\_factor}

    Examples::

        >>> pixel_shuffle = nn.PixelShuffle(3)
        >>> input = torch.randn(1, 9, 4, 4)
        >>> output = pixel_shuffle(input)
        >>> print(output.size())
        torch.Size([1, 1, 12, 12])

    .. _Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network:
        https://arxiv.org/abs/1609.05158
    Úupscale_factorÚreturnNc                 óV   •— t          ¦   «                              ¦   «          || _        d S ©N)ÚsuperÚ__init__r	   )Úselfr	   Ú	__class__s     €ú[/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/nn/modules/pixelshuffle.pyr   zPixelShuffle.__init__6   s'   ø€ Ý‰Œ×ÒÑÔÐØ,ˆÔÐÐó    Úinputc                 ó6   — t          j        || j        ¦  «        S ©z(
        Runs the forward pass.
        )ÚFÚpixel_shuffler	   ©r   r   s     r   ÚforwardzPixelShuffle.forward:   s   € õ Œ˜u dÔ&9Ñ:Ô:Ð:r   c                 ó   — d| j         › �S )ú@
        Return the extra representation of the module.
        zupscale_factor=)r	   ©r   s    r   Ú
extra_reprzPixelShuffle.extra_repr@   s   € ð 7 Ô!4Ð6Ð6Ð6r   ©Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__constants__ÚintÚ__annotations__r   r   r   Ústrr   Ú__classcell__©r   s   @r   r   r   
   s«   ø€ € € € € € ð&ð &ðP &Ð&€MØÐÐÑð- sð -¨tð -ð -ð -ð -ð -ð -ð;˜Vð ;¨ð ;ð ;ð ;ð ;ð7˜Cð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7r   c                   ó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  Reverse the PixelShuffle operation.

    Reverses the :class:`~torch.nn.PixelShuffle` operation by rearranging elements
    in a tensor of shape :math:`(*, C, H \times r, W \times r)` to a tensor of shape
    :math:`(*, C \times r^2, H, W)`, where r is a downscale factor.

    See the paper:
    `Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network`_
    by Shi et al. (2016) for more details.

    Args:
        downscale_factor (int): factor to decrease spatial resolution by

    Shape:
        - Input: :math:`(*, C_{in}, H_{in}, W_{in})`, where * is zero or more batch dimensions
        - Output: :math:`(*, C_{out}, H_{out}, W_{out})`, where

    .. math::
        C_{out} = C_{in} \times \text{downscale\_factor}^2

    .. math::
        H_{out} = H_{in} \div \text{downscale\_factor}

    .. math::
        W_{out} = W_{in} \div \text{downscale\_factor}

    Examples::

        >>> pixel_unshuffle = nn.PixelUnshuffle(3)
        >>> input = torch.randn(1, 1, 12, 12)
        >>> output = pixel_unshuffle(input)
        >>> print(output.size())
        torch.Size([1, 9, 4, 4])

    .. _Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network:
        https://arxiv.org/abs/1609.05158
    Údownscale_factorr
   Nc                 óV   •— t          ¦   «                              ¦   «          || _        d S r   )r   r   r*   )r   r*   r   s     €r   r   zPixelUnshuffle.__init__q   s'   ø€ Ý‰Œ×ÒÑÔÐØ 0ˆÔÐÐr   r   c                 ó6   — t          j        || j        ¦  «        S r   )r   Úpixel_unshuffler*   r   s     r   r   zPixelUnshuffle.forwardu   s   € õ Ô  ¨Ô(=Ñ>Ô>Ð>r   c                 ó   — d| j         › �S )r   zdownscale_factor=)r*   r   s    r   r   zPixelUnshuffle.extra_repr{   s   € ð ; 4Ô#8Ð:Ð:Ð:r   r   r(   s   @r   r   r   G   s«   ø€ € € € € € ð$ð $ðL (Ð(€MØÐÐÑð1¨ð 1°ð 1ð 1ð 1ð 1ð 1ð 1ð?˜Vð ?¨ð ?ð ?ð ?ð ?ð;˜Cð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;r   )Útorch.nn.functionalÚnnÚ
functionalr   Útorchr   Úmoduler   Ú__all__r   r   © r   r   ú<module>r6      s°   ðØ Ð Ð Ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð ð Ð+Ð
,€ð:7ð :7ð :7ð :7ð :7�6ñ :7ô :7ð :7ðz8;ð 8;ð 8;ð 8;ð 8;�Vñ 8;ô 8;ð 8;ð 8;ð 8;r   