Ë
    T^(hÛÆ  ã            	       óÔ  — d Z ddlZddlZddlmZ ddlmZmZm	Z	 ddl
Z
ddlZ
ddl
mZ ddlmZ ddlmZmZ dd	lmZ dd
lmZmZmZ ddlmZmZmZmZmZmZ ddlm Z   ejB                  e"«      Z#dZ$dZ%g d¢Z&e G d„ de«      «       Z'd„ Z(d„ Z)dIde
jT                  de+de,de
jT                  fd„Z- G d„ dej\                  «      Z/ G d„ dej\                  «      Z0 G d„ dej\                  «      Z1 G d „ d!ej\                  «      Z2 G d"„ d#ej\                  «      Z3 G d$„ d%ej\                  «      Z4 G d&„ d'ej\                  «      Z5 G d(„ d)ej\                  «      Z6 G d*„ d+ej\                  «      Z7 G d,„ d-ej\                  «      Z8 G d.„ d/ej\                  «      Z9 G d0„ d1ej\                  «      Z: G d2„ d3ej\                  «      Z; G d4„ d5e«      Z<d6Z=d7Z> ed8e=«       G d9„ d:e<«      «       Z? G d;„ d<ej\                  «      Z@ G d=„ d>ej\                  «      ZA G d?„ d@ej\                  «      ZB G dA„ dBej\                  «      ZC G dC„ dDej\                  «      ZD edEe=«       G dF„ dGe<«      «       ZEg dH¢ZFy)Jz"PyTorch Swin2SR Transformer model.é    N)Ú	dataclass)ÚOptionalÚTupleÚUnion)Únné   )ÚACT2FN)ÚBaseModelOutputÚImageSuperResolutionOutput)ÚPreTrainedModel)Ú find_pruneable_heads_and_indicesÚmeshgridÚprune_linear_layer)ÚModelOutputÚadd_code_sample_docstringsÚadd_start_docstringsÚ%add_start_docstrings_to_model_forwardÚloggingÚreplace_return_docstringsé   )ÚSwin2SRConfigr   z!caidas/swin2SR-classical-sr-x2-64)r   é´   iè  iˆ  c                   ó–   — e Zd ZU dZdZeej                     ed<   dZ	ee
ej                        ed<   dZee
ej                        ed<   y)ÚSwin2SREncoderOutputa‡  
    Swin2SR encoder's outputs, with potential hidden states and attentions.

    Args:
        last_hidden_state (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`):
            Sequence of hidden-states at the output of the last layer of the model.
        hidden_states (`tuple(torch.FloatTensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
            Tuple of `torch.FloatTensor` (one for the output of the embeddings + one for the output of each stage) of
            shape `(batch_size, sequence_length, hidden_size)`.

            Hidden-states of the model at the output of each layer plus the initial embedding outputs.
        attentions (`tuple(torch.FloatTensor)`, *optional*, returned when `output_attentions=True` is passed or when `config.output_attentions=True`):
            Tuple of `torch.FloatTensor` (one for each stage) of shape `(batch_size, num_heads, sequence_length,
            sequence_length)`.

            Attentions weights after the attention softmax, used to compute the weighted average in the self-attention
            heads.
    NÚlast_hidden_stateÚhidden_statesÚ
attentions)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   ÚtorchÚFloatTensorÚ__annotations__r   r   r   © ó    új/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/models/swin2sr/modeling_swin2sr.pyr   r   3   sS   … ñð& 6:Ð�x × 1Ñ 1Ñ2Ó9Ø8<€M�8˜E %×"3Ñ"3Ñ4Ñ5Ó<Ø59€J�˜˜u×0Ñ0Ñ1Ñ2Ô9r&   r   c                 óÌ   — | j                   \  }}}}| j                  |||z  |||z  ||«      } | j                  dddddd«      j                  «       j                  d|||«      }|S )z2
    Partitions the given input into windows.
    r   r   r   é   é   é   éÿÿÿÿ©ÚshapeÚviewÚpermuteÚ
contiguous)Úinput_featureÚwindow_sizeÚ
batch_sizeÚheightÚwidthÚnum_channelsÚwindowss          r'   Úwindow_partitionr9   N   s}   € ð /<×.AÑ.AÑ+€J�˜˜|Ø!×&Ñ&Ø�F˜kÑ)¨;¸ÀÑ8LÈkÐ[gó€Mð ×#Ñ# A q¨!¨Q°°1Ó5×@Ñ@ÓB×GÑGÈÈKÐYdÐfrÓs€GØ€Nr&   c                 óÈ   — | j                   d   }| j                  d||z  ||z  |||«      } | j                  dddddd«      j                  «       j                  d|||«      } | S )z?
    Merges windows to produce higher resolution features.
    r,   r   r   r   r)   r*   r+   r-   )r8   r3   r5   r6   r7   s        r'   Úwindow_reverser;   [   sn   € ð —=‘= Ñ$€LØ�l‰l˜2˜v¨Ñ4°e¸{Ñ6JÈKÐYdÐfrÓs€GØ�o‰o˜a  A q¨!¨QÓ/×:Ñ:Ó<×AÑAÀ"ÀfÈeÐUaÓb€GØ€Nr&   ÚinputÚ	drop_probÚtrainingÚreturnc                 ó  — |dk(  s|s| S d|z
  }| j                   d   fd| j                  dz
  z  z   }|t        j                  || j                  | j
                  ¬«      z   }|j                  «        | j                  |«      |z  }|S )aF  
    Drop paths (Stochastic Depth) per sample (when applied in main path of residual blocks).

    Comment by Ross Wightman: This is the same as the DropConnect impl I created for EfficientNet, etc networks,
    however, the original name is misleading as 'Drop Connect' is a different form of dropout in a separate paper...
    See discussion: https://github.com/tensorflow/tpu/issues/494#issuecomment-532968956 ... I've opted for changing the
    layer and argument names to 'drop path' rather than mix DropConnect as a layer name and use 'survival rate' as the
    argument.
    ç        r   r   )r   )ÚdtypeÚdevice)r.   Úndimr"   ÚrandrB   rC   Úfloor_Údiv)r<   r=   r>   Ú	keep_probr.   Úrandom_tensorÚoutputs          r'   Ú	drop_pathrK   f   s�   € ð �CÒ™xØˆØ�I‘€IØ�[‰[˜‰^Ð ¨¯
©
°Q©Ñ 7Ñ7€EØ¤§
¡
¨5¸¿¹ÈEÏLÉLÔ YÑY€MØ×ÑÔØ�Y‰Y�yÓ! MÑ1€FØ€Mr&   c                   óx   ‡ — e Zd ZdZd	dee   ddfˆ fd„Zdej                  dej                  fd„Z	de
fd„Zˆ xZS )
ÚSwin2SRDropPathzXDrop paths (Stochastic Depth) per sample (when applied in main path of residual blocks).Nr=   r?   c                 ó0   •— t         ‰| �  «        || _        y ©N)ÚsuperÚ__init__r=   )Úselfr=   Ú	__class__s     €r'   rQ   zSwin2SRDropPath.__init__~   s   ø€ Ü‰ÑÔØ"ˆ�r&   r   c                 óD   — t        || j                  | j                  «      S rO   )rK   r=   r>   ©rR   r   s     r'   ÚforwardzSwin2SRDropPath.forward‚   s   € Ü˜¨¯©¸¿¹ÓFÐFr&   c                 ó8   — dj                  | j                  «      S )Nzp={})Úformatr=   ©rR   s    r'   Ú
extra_reprzSwin2SRDropPath.extra_repr…   s   € Ø�}‰}˜TŸ^™^Ó,Ð,r&   rO   )r   r   r    r!   r   ÚfloatrQ   r"   ÚTensorrV   ÚstrrZ   Ú__classcell__©rS   s   @r'   rM   rM   {   sG   ø„ Ùbñ# (¨5¡/ð #¸Tõ #ðG U§\¡\ð G°e·l±ló Gð-˜C÷ -r&   rM   c                   óf   ‡ — e Zd ZdZˆ fd„Zdeej                     deej                     fd„Z
ˆ xZS )ÚSwin2SREmbeddingsz?
    Construct the patch and optional position embeddings.
    c                 óx  •— t         ‰| �  «        t        |«      | _        | j                  j                  }|j
                  r=t        j                  t        j                  d|dz   |j                  «      «      | _        nd | _        t        j                  |j                  «      | _        |j                  | _        y )Nr   )rP   rQ   ÚSwin2SRPatchEmbeddingsÚpatch_embeddingsÚnum_patchesÚuse_absolute_embeddingsr   Ú	Parameterr"   ÚzerosÚ	embed_dimÚposition_embeddingsÚDropoutÚhidden_dropout_probÚdropoutr3   )rR   Úconfigre   rS   s      €r'   rQ   zSwin2SREmbeddings.__init__Ž   s‹   ø€ Ü‰ÑÔä 6°vÓ >ˆÔØ×+Ñ+×7Ñ7ˆà×)Ò)Ü')§|¡|´E·K±KÀÀ;ÐQRÁ?ÐTZ×TdÑTdÓ4eÓ'fˆDÕ$à'+ˆDÔ$ä—z‘z &×"<Ñ"<Ó=ˆŒØ!×-Ñ-ˆÕr&   Úpixel_valuesr?   c                 óŠ   — | j                  |«      \  }}| j                  �|| j                  z   }| j                  |«      }||fS rO   )rd   rj   rm   )rR   ro   Ú
embeddingsÚoutput_dimensionss       r'   rV   zSwin2SREmbeddings.forwardœ   sN   € Ø(,×(=Ñ(=¸lÓ(KÑ%ˆ
Ð%à×#Ñ#Ð/Ø# d×&>Ñ&>Ñ>ˆJà—\‘\ *Ó-ˆ
àÐ,Ð,Ð,r&   )r   r   r    r!   rQ   r   r"   r#   r   r\   rV   r^   r_   s   @r'   ra   ra   ‰   s4   ø„ ñô.ð- H¨U×->Ñ->Ñ$?ð -ÀEÈ%Ï,É,ÑDW÷ -r&   ra   c                   ón   ‡ — e Zd Zdˆ fd„	Zdeej                     deej                  ee	   f   fd„Z
ˆ xZS )rc   c                 ó  •— t         ‰| �  «        |j                  }|j                  |j                  }}t        |t        j                  j                  «      r|n||f}t        |t        j                  j                  «      r|n||f}|d   |d   z  |d   |d   z  g}|| _	        |d   |d   z  | _
        t        j                  ||j                  ||¬«      | _        |r%t        j                  |j                  «      | _        y d | _        y )Nr   r   )Úkernel_sizeÚstride)rP   rQ   ri   Ú
image_sizeÚ
patch_sizeÚ
isinstanceÚcollectionsÚabcÚIterableÚpatches_resolutionre   r   ÚConv2dÚ
projectionÚ	LayerNormÚ	layernorm)rR   rn   Únormalize_patchesr7   rw   rx   r}   rS   s          €r'   rQ   zSwin2SRPatchEmbeddings.__init__¨   só   ø€ Ü‰ÑÔØ×'Ñ'ˆØ!'×!2Ñ!2°F×4EÑ4E�Jˆ
ä#-¨j¼+¿/¹/×:RÑ:RÔ#S‘ZÐZdÐfpÐYqˆ
Ü#-¨j¼+¿/¹/×:RÑ:RÔ#S‘ZÐZdÐfpÐYqˆ
Ø(¨™m¨z¸!©}Ñ<¸jÈ¹mÈzÐZ[É}Ñ>\Ð]ÐØ"4ˆÔØ-¨aÑ0Ð3EÀaÑ3HÑHˆÔäŸ)™) L°&×2BÑ2BÐPZÐcmÔnˆŒÙ;LœŸ™ f×&6Ñ&6Ó7ˆ�ÐRVˆ�r&   rq   r?   c                 óÒ   — | j                  |«      }|j                  \  }}}}||f}|j                  d«      j                  dd«      }| j                  �| j	                  |«      }||fS )Nr)   r   )r   r.   ÚflattenÚ	transposer�   )rR   rq   Ú_r5   r6   rr   s         r'   rV   zSwin2SRPatchEmbeddings.forward¶   so   € Ø—_‘_ ZÓ0ˆ
Ø(×.Ñ.Ñˆˆ1ˆf�eØ# U˜OÐØ×'Ñ'¨Ó*×4Ñ4°Q¸Ó:ˆ
à�>‰>Ð%ØŸ™¨
Ó3ˆJàÐ,Ð,Ð,r&   )T)r   r   r    rQ   r   r"   r#   r   r\   ÚintrV   r^   r_   s   @r'   rc   rc   §   s<   ø„ õWð	- (¨5×+<Ñ+<Ñ"=ð 	-À%ÈÏÉÐV[Ð\_ÑV`ÐH`ÑBa÷ 	-r&   rc   c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚSwin2SRPatchUnEmbeddingszImage to Patch Unembeddingc                 óD   •— t         ‰| �  «        |j                  | _        y rO   )rP   rQ   ri   )rR   rn   rS   s     €r'   rQ   z!Swin2SRPatchUnEmbeddings.__init__Å   s   ø€ Ü‰ÑÔà×)Ñ)ˆ�r&   c                 óŽ   — |j                   \  }}}|j                  dd«      j                  || j                  |d   |d   «      }|S )Nr   r)   r   )r.   r…   r/   ri   )rR   rq   Úx_sizer4   Úheight_widthr7   s         r'   rV   z Swin2SRPatchUnEmbeddings.forwardÊ   sO   € Ø1;×1AÑ1AÑ.ˆ
�L ,Ø×)Ñ)¨!¨QÓ/×4Ñ4°ZÀÇÁÐQWÐXYÑQZÐ\bÐcdÑ\eÓfˆ
ØÐr&   ©r   r   r    r!   rQ   rV   r^   r_   s   @r'   r‰   r‰   Â   s   ø„ Ù%ô*ö
r&   r‰   c            	       ó²   ‡ — e Zd ZdZej
                  fdee   dedej                  ddfˆ fd„Z	d„ Z
d	ej                  d
eeef   dej                  fd„Zˆ xZS )ÚSwin2SRPatchMerginga'  
    Patch Merging Layer.

    Args:
        input_resolution (`Tuple[int]`):
            Resolution of input feature.
        dim (`int`):
            Number of input channels.
        norm_layer (`nn.Module`, *optional*, defaults to `nn.LayerNorm`):
            Normalization layer class.
    Úinput_resolutionÚdimÚ
norm_layerr?   Nc                 ó¤   •— t         ‰| �  «        || _        || _        t	        j
                  d|z  d|z  d¬«      | _         |d|z  «      | _        y )Nr*   r)   F©Úbias)rP   rQ   r‘   r’   r   ÚLinearÚ	reductionÚnorm)rR   r‘   r’   r“   rS   s       €r'   rQ   zSwin2SRPatchMerging.__init__Þ   sI   ø€ Ü‰ÑÔØ 0ˆÔØˆŒÜŸ™ 1 s¡7¨A°©G¸%Ô@ˆŒÙ˜q 3™wÓ'ˆ�	r&   c                 óŠ   — |dz  dk(  xs |dz  dk(  }|r.ddd|dz  d|dz  f}t         j                  j                  ||«      }|S )Nr)   r   r   )r   Ú
functionalÚpad)rR   r2   r5   r6   Ú
should_padÚ
pad_valuess         r'   Ú	maybe_padzSwin2SRPatchMerging.maybe_padå   sU   € Ø˜q‘j A‘oÒ:¨5°1©9¸©>ˆ
ÙØ˜Q  5¨1¡9¨a°¸!±Ð<ˆJÜŸM™M×-Ñ-¨m¸ZÓHˆMàÐr&   r2   Úinput_dimensionsc                 óº  — |\  }}|j                   \  }}}|j                  ||||«      }| j                  |||«      }|d d …dd d…dd d…d d …f   }|d d …dd d…dd d…d d …f   }	|d d …dd d…dd d…d d …f   }
|d d …dd d…dd d…d d …f   }t        j                  ||	|
|gd«      }|j                  |dd|z  «      }| j                  |«      }| j                  |«      }|S )Nr   r)   r   r,   r*   )r.   r/   rŸ   r"   Úcatr˜   r™   )rR   r2   r    r5   r6   r4   r’   r7   Úinput_feature_0Úinput_feature_1Úinput_feature_2Úinput_feature_3s               r'   rV   zSwin2SRPatchMerging.forwardí   s  € Ø(‰ˆ�à(5×(;Ñ(;Ñ%ˆ
�C˜à%×*Ñ*¨:°v¸uÀlÓSˆàŸ™ }°f¸eÓDˆà'ª¨1¨4¨a¨4°°°A°²qÐ(8Ñ9ˆà'ª¨1¨4¨a¨4°°°A°²qÐ(8Ñ9ˆà'ª¨1¨4¨a¨4°°°A°²qÐ(8Ñ9ˆà'ª¨1¨4¨a¨4°°°A°²qÐ(8Ñ9ˆäŸ	™	 ?°OÀ_ÐVeÐ"fÐhjÓkˆØ%×*Ñ*¨:°r¸1¸|Ñ;KÓLˆàŸ™ }Ó5ˆØŸ	™	 -Ó0ˆàÐr&   )r   r   r    r!   r   r€   r   r‡   ÚModulerQ   rŸ   r"   r\   rV   r^   r_   s   @r'   r�   r�   Ñ   sr   ø„ ñ
ð XZ×WcÑWcñ (¨¨s©ð (¸#ð (È2Ï9É9ð (Ðhlõ (òð U§\¡\ð ÀUÈ3ÐPSÈ8Á_ð ÐY^×YeÑYe÷ r&   r�   c                   ó¸   ‡ — e Zd Zddgfˆ fd„	Zd„ Z	 	 	 d
dej                  deej                     deej                     dee	   de
ej                     f
d	„Zˆ xZS )ÚSwin2SRSelfAttentionr   c           
      ó  •— t         ‰| �  «        ||z  dk7  rt        d|› d|› d�«      ‚|| _        t	        ||z  «      | _        | j                  | j
                  z  | _        t        |t        j                  j                  «      r|n||f| _        || _        t        j                  t        j                   dt        j"                  |ddf«      z  «      «      | _        t        j&                  t        j(                  ddd	¬
«      t        j*                  d	¬«      t        j(                  d|d¬
«      «      | _        t        j.                  | j                  d   dz
   | j                  d   t        j0                  ¬«      j3                  «       }t        j.                  | j                  d   dz
   | j                  d   t        j0                  ¬«      j3                  «       }t        j4                  t7        ||gd¬«      «      j9                  ddd«      j;                  «       j=                  d«      }|d   dkD  r;|d d …d d …d d …dfxx   |d   dz
  z  cc<   |d d …d d …d d …dfxx   |d   dz
  z  cc<   nS|dkD  rN|d d …d d …d d …dfxx   | j                  d   dz
  z  cc<   |d d …d d …d d …dfxx   | j                  d   dz
  z  cc<   |dz  }t        j>                  |«      t        j@                  t        jB                  |«      dz   «      z  tE        j@                  d«      z  }|jG                  tI        | j,                  jK                  «       «      jL                  «      }| jO                  d|d¬«       t        j.                  | j                  d   «      }	t        j.                  | j                  d   «      }
t        j4                  t7        |	|
gd¬«      «      }t        jP                  |d«      }|d d …d d …d f   |d d …d d d …f   z
  }|j9                  ddd«      j;                  «       }|d d …d d …dfxx   | j                  d   dz
  z  cc<   |d d …d d …dfxx   | j                  d   dz
  z  cc<   |d d …d d …dfxx   d| j                  d   z  dz
  z  cc<   |jS                  d«      }| jO                  d|d¬«       t        j(                  | j                  | j                  |jT                  ¬
«      | _+        t        j(                  | j                  | j                  d¬
«      | _,        t        j(                  | j                  | j                  |jT                  ¬
«      | _-        t        j\                  |j^                  «      | _0        y )Nr   zThe hidden size (z6) is not a multiple of the number of attention heads (ú)é
   r   r)   i   Tr•   ©ÚinplaceF©rB   Úij)Úindexingé   ç      ð?Úrelative_coords_table©Ú
persistentr,   Úrelative_position_index)1rP   rQ   Ú
ValueErrorÚnum_attention_headsr‡   Úattention_head_sizeÚall_head_sizery   rz   r{   r|   r3   Úpretrained_window_sizer   rg   r"   ÚlogÚonesÚlogit_scaleÚ
Sequentialr—   ÚReLUÚcontinuous_position_bias_mlpÚarangeÚint64r[   Ústackr   r0   r1   Ú	unsqueezeÚsignÚlog2ÚabsÚmathÚtoÚnextÚ
parametersrB   Úregister_bufferr„   ÚsumÚqkv_biasÚqueryÚkeyÚvaluerk   Úattention_probs_dropout_probrm   )rR   rn   r’   Ú	num_headsr3   r¼   Úrelative_coords_hÚrelative_coords_wr´   Úcoords_hÚcoords_wÚcoordsÚcoords_flattenÚrelative_coordsr·   rS   s                  €r'   rQ   zSwin2SRSelfAttention.__init__	  sÊ  ø€ Ü‰ÑÔØ�‰?˜aÒÜØ# C 5Ð(^Ð_hÐ^iÐijÐkóð ð $-ˆÔ Ü#& s¨Y¡Ó#7ˆÔ Ø!×5Ñ5¸×8PÑ8PÑPˆÔä% k´;·?±?×3KÑ3KÔL‰KÐS^Ð`kÐRlð 	Ôð '=ˆÔ#ÜŸ<™<¬¯	©	°"´u·z±zÀ9ÈaÐQRÐBSÓ7TÑ2TÓ(UÓVˆÔä,.¯M©MÜ�I‰I�a˜ 4Ô(¬"¯'©'¸$Ô*?ÄÇÁÈ3ÐPYÐ`eÔAfó-
ˆÔ)ô
 "ŸL™L¨4×+;Ñ+;¸AÑ+>ÀÑ+BÐ)CÀT×EUÑEUÐVWÑEXÔ`e×`kÑ`kÔl×rÑrÓtÐÜ!ŸL™L¨4×+;Ñ+;¸AÑ+>ÀÑ+BÐ)CÀT×EUÑEUÐVWÑEXÔ`e×`kÑ`kÔl×rÑrÓtÐä�K‰KœÐ"3Ð5FÐ!GÐRVÔWÓXß‰W�Q˜˜1Óß‰Z‹\ß‰Y�q‹\ð	 	ð " !Ñ$ qÒ(Ø!¢!¢Qª¨1 *Ó-Ð1GÈÑ1JÈQÑ1NÑNÓ-Ø!¢!¢Qª¨1 *Ó-Ð1GÈÑ1JÈQÑ1NÑNÔ-Ø˜1Š_Ø!¢!¢Qª¨1 *Ó-°×1AÑ1AÀ!Ñ1DÀqÑ1HÑHÓ-Ø!¢!¢Qª¨1 *Ó-°×1AÑ1AÀ!Ñ1DÀqÑ1HÑHÓ-Ø Ñ"Ðä�J‰JÐ,Ó-´·
±
¼5¿9¹9ÐEZÓ;[Ð^aÑ;aÓ0bÑbÔei×enÑenÐopÓeqÑqð 	ð !6× 8Ñ 8¼¸d×>_Ñ>_×>jÑ>jÓ>lÓ9m×9sÑ9sÓ tÐØ×ÑÐ4Ð6KÐX]ÐÔ^ô —<‘< × 0Ñ 0°Ñ 3Ó4ˆÜ—<‘< × 0Ñ 0°Ñ 3Ó4ˆÜ—‘œX x°Ð&:ÀTÔJÓKˆÜŸ™ v¨qÓ1ˆØ(ªªA¨t¨Ñ4°~ÂaÈÊqÀjÑ7QÑQˆØ)×1Ñ1°!°Q¸Ó:×EÑEÓGˆØšš1˜a˜Ó  D×$4Ñ$4°QÑ$7¸!Ñ$;Ñ;Ó Øšš1˜a˜Ó  D×$4Ñ$4°QÑ$7¸!Ñ$;Ñ;Ó Øšš1˜a˜Ó  A¨×(8Ñ(8¸Ñ(;Ñ$;¸aÑ$?Ñ?Ó Ø"1×"5Ñ"5°bÓ"9ÐØ×ÑÐ6Ð8OÐ\aÐÔbä—Y‘Y˜t×1Ñ1°4×3EÑ3EÈFÏOÉOÔ\ˆŒ
Ü—9‘9˜T×/Ñ/°×1CÑ1CÈ%ÔPˆŒÜ—Y‘Y˜t×1Ñ1°4×3EÑ3EÈFÏOÉOÔ\ˆŒ
Ü—z‘z &×"EÑ"EÓFˆ�r&   c                 ó¤   — |j                  «       d d | j                  | j                  fz   }|j                  |«      }|j	                  dddd«      S )Nr,   r   r)   r   r   )Úsizer¹   rº   r/   r0   )rR   ÚxÚnew_x_shapes      r'   Útranspose_for_scoresz)Swin2SRSelfAttention.transpose_for_scoresF  sL   € Ø—f‘f“h˜s �m t×'?Ñ'?À×AYÑAYÐ&ZÑZˆØ�F‰F�;ÓˆØ�y‰y˜˜A˜q !Ó$Ð$r&   r   Úattention_maskÚ	head_maskÚoutput_attentionsr?   c                 óz  — |j                   \  }}}| j                  |«      }| j                  | j                  |«      «      }	| j                  | j	                  |«      «      }
| j                  |«      }t
        j                  j                  |d¬«      t
        j                  j                  |	d¬«      j                  dd«      z  }t        j                  | j                  t        j                  d«      ¬«      j                  «       }||z  }| j                  | j                   «      j#                  d| j$                  «      }|| j&                  j#                  d«         j#                  | j(                  d   | j(                  d   z  | j(                  d   | j(                  d   z  d«      }|j+                  ddd«      j-                  «       }d	t        j.                  |«      z  }||j1                  d«      z   }|�“|j                   d   }|j#                  ||z  || j$                  ||«      |j1                  d«      j1                  d«      z   }||j1                  d«      j1                  d«      z   }|j#                  d| j$                  ||«      }t
        j                  j3                  |d¬«      }| j5                  |«      }|�||z  }t        j6                  ||
«      }|j+                  dddd
«      j-                  «       }|j9                  «       d d | j:                  fz   }|j#                  |«      }|r||f}|S |f}|S )Nr,   ©r’   éþÿÿÿg      Y@)Úmaxr   r   r)   é   r   )r.   rÑ   rá   rÒ   rÓ   r   r›   Ú	normalizer…   r"   Úclampr¿   rÊ   r½   ÚexprÂ   r´   r/   r¹   r·   r3   r0   r1   ÚsigmoidrÆ   Úsoftmaxrm   ÚmatmulrÞ   r»   )rR   r   râ   rã   rä   r4   r’   r7   Úmixed_query_layerÚ	key_layerÚvalue_layerÚquery_layerÚattention_scoresr¿   Úrelative_position_bias_tableÚrelative_position_biasÚ
mask_shapeÚattention_probsÚcontext_layerÚnew_context_layer_shapeÚoutputss                        r'   rV   zSwin2SRSelfAttention.forwardK  s.  € ð )6×(;Ñ(;Ñ%ˆ
�C˜Ø ŸJ™J }Ó5Ðà×-Ñ-¨d¯h©h°}Ó.EÓFˆ	Ø×/Ñ/°·
±
¸=Ó0IÓJˆØ×/Ñ/Ð0AÓBˆô Ÿ=™=×2Ñ2°;ÀBÐ2ÓGÌ"Ï-É-×JaÑJaØ˜2ð Kbó K
ç
‰)�B˜Ó
ñÐô —k‘k $×"2Ñ"2¼¿¹ÀÓ8LÔM×QÑQÓSˆØ+¨kÑ9ÐØ'+×'HÑ'HÈ×IcÑIcÓ'd×'iÑ'iØ�×(Ñ(ó(
Ð$ð ">¸d×>ZÑ>Z×>_Ñ>_Ð`bÓ>cÑ!d×!iÑ!iØ×Ñ˜QÑ $×"2Ñ"2°1Ñ"5Ñ5°t×7GÑ7GÈÑ7JÈT×M]ÑM]Ð^_ÑM`Ñ7`Ðbdó"
Ðð "8×!?Ñ!?ÀÀ1ÀaÓ!H×!SÑ!SÓ!UÐØ!#¤e§m¡mÐ4JÓ&KÑ!KÐØ+Ð.D×.NÑ.NÈqÓ.QÑQÐàÐ%à'×-Ñ-¨aÑ0ˆJØ/×4Ñ4Ø˜jÑ(¨*°d×6NÑ6NÐPSÐUXó à×(Ñ(¨Ó+×5Ñ5°aÓ8ñ 9Ðð  0°.×2JÑ2JÈ1Ó2M×2WÑ2WÐXYÓ2ZÑZÐØ/×4Ñ4°R¸×9QÑ9QÐSVÐX[Ó\Ðô Ÿ-™-×/Ñ/Ð0@ÀbÐ/ÓIˆð Ÿ,™, Ó7ˆð Ð Ø-°	Ñ9ˆOäŸ™ _°kÓBˆØ%×-Ñ-¨a°°A°qÓ9×DÑDÓFˆØ"/×"4Ñ"4Ó"6°s¸Ð";¸t×?QÑ?QÐ>SÑ"SÐØ%×*Ñ*Ð+BÓCˆá6G�= /Ð2ˆàˆð O\ÐM]ˆàˆr&   ©NNF)r   r   r    rQ   rá   r"   r\   r   r#   Úboolr   rV   r^   r_   s   @r'   r©   r©     s   ø„ ØTUÐWXÐSYõ ;Gòz%ð 7;Ø15Ø,1ñ;à—|‘|ð;ð ! ×!2Ñ!2Ñ3ð;ð ˜E×-Ñ-Ñ.ð	;ð
 $ D™>ð;ð 
ˆu�|‰|Ñ	÷;r&   r©   c                   ón   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  dej
                  fd„Zˆ xZS )ÚSwin2SRSelfOutputc                 ó    •— t         ‰| �  «        t        j                  ||«      | _        t        j
                  |j                  «      | _        y rO   )rP   rQ   r   r—   Údenserk   rÔ   rm   ©rR   rn   r’   rS   s      €r'   rQ   zSwin2SRSelfOutput.__init__‹  s6   ø€ Ü‰ÑÔÜ—Y‘Y˜s CÓ(ˆŒ
Ü—z‘z &×"EÑ"EÓFˆ�r&   r   Úinput_tensorr?   c                 óJ   — | j                  |«      }| j                  |«      }|S rO   ©r  rm   )rR   r   r  s      r'   rV   zSwin2SRSelfOutput.forward�  s$   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆàÐr&   ©r   r   r    rQ   r"   r\   rV   r^   r_   s   @r'   rÿ   rÿ   Š  s2   ø„ ôGð
 U§\¡\ð ÀÇÁð ÐRW×R^ÑR^÷ r&   rÿ   c                   ó²   ‡ — e Zd Zd	ˆ fd„	Zd„ Z	 	 	 d
dej                  deej                     deej                     dee	   de
ej                     f
d„Zˆ xZS )ÚSwin2SRAttentionc           
      óÜ   •— t         ‰| �  «        t        ||||t        |t        j
                  j                  «      r|n||f¬«      | _        t        ||«      | _	        t        «       | _        y )N©rn   r’   rÕ   r3   r¼   )rP   rQ   r©   ry   rz   r{   r|   rR   rÿ   rJ   ÚsetÚpruned_heads)rR   rn   r’   rÕ   r3   r¼   rS   s         €r'   rQ   zSwin2SRAttention.__init__™  sc   ø€ Ü‰ÑÔÜ(ØØØØ#äÐ0´+·/±/×2JÑ2JÔKñ $:à(Ð*@ÐAô
ˆŒ	ô (¨°Ó4ˆŒÜ›EˆÕr&   c                 ó>  — t        |«      dk(  ry t        || j                  j                  | j                  j                  | j
                  «      \  }}t        | j                  j                  |«      | j                  _        t        | j                  j                  |«      | j                  _        t        | j                  j                  |«      | j                  _	        t        | j                  j                  |d¬«      | j                  _        | j                  j                  t        |«      z
  | j                  _        | j                  j                  | j                  j                  z  | j                  _        | j
                  j                  |«      | _        y )Nr   r   ræ   )Úlenr   rR   r¹   rº   r  r   rÑ   rÒ   rÓ   rJ   r  r»   Úunion)rR   ÚheadsÚindexs      r'   Úprune_headszSwin2SRAttention.prune_heads§  s  € Üˆu‹:˜Š?ØÜ7Ø�4—9‘9×0Ñ0°$·)±)×2OÑ2OÐQU×QbÑQbó
‰ˆˆuô
 -¨T¯Y©Y¯_©_¸eÓDˆ�	‰	ŒÜ*¨4¯9©9¯=©=¸%Ó@ˆ�	‰	ŒÜ,¨T¯Y©Y¯_©_¸eÓDˆ�	‰	ŒÜ.¨t¯{©{×/@Ñ/@À%ÈQÔOˆ�‰Ôð )-¯	©	×(EÑ(EÌÈEË
Ñ(Rˆ�	‰	Ô%Ø"&§)¡)×"?Ñ"?À$Ç)Á)×B_ÑB_Ñ"_ˆ�	‰	ÔØ ×-Ñ-×3Ñ3°EÓ:ˆÕr&   r   râ   rã   rä   r?   c                 ój   — | j                  ||||«      }| j                  |d   |«      }|f|dd  z   }|S ©Nr   r   )rR   rJ   )rR   r   râ   rã   rä   Úself_outputsÚattention_outputrû   s           r'   rV   zSwin2SRAttention.forward¹  sG   € ð —y‘y °À	ÐK\Ó]ˆØŸ;™; |°A¡¸ÓFÐØ#Ð%¨°Q°RÐ(8Ñ8ˆØˆr&   ©r   rü   )r   r   r    rQ   r  r"   r\   r   r#   rý   r   rV   r^   r_   s   @r'   r  r  ˜  st   ø„ õ"ò;ð* 7;Ø15Ø,1ñ
à—|‘|ð
ð ! ×!2Ñ!2Ñ3ð
ð ˜E×-Ñ-Ñ.ð	
ð
 $ D™>ð
ð 
ˆu�|‰|Ñ	÷
r&   r  c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚSwin2SRIntermediatec                 ó  •— t         ‰| �  «        t        j                  |t	        |j
                  |z  «      «      | _        t        |j                  t        «      rt        |j                     | _        y |j                  | _        y rO   )rP   rQ   r   r—   r‡   Ú	mlp_ratior  ry   Ú
hidden_actr]   r	   Úintermediate_act_fnr  s      €r'   rQ   zSwin2SRIntermediate.__init__È  sa   ø€ Ü‰ÑÔÜ—Y‘Y˜s¤C¨×(8Ñ(8¸3Ñ(>Ó$?Ó@ˆŒ
Ü�f×'Ñ'¬Ô-Ü'-¨f×.?Ñ.?Ñ'@ˆDÕ$à'-×'8Ñ'8ˆDÕ$r&   r   r?   c                 óJ   — | j                  |«      }| j                  |«      }|S rO   )r  r  rU   s     r'   rV   zSwin2SRIntermediate.forwardÐ  s&   € ØŸ
™
 =Ó1ˆØ×0Ñ0°Ó?ˆØÐr&   r  r_   s   @r'   r  r  Ç  s#   ø„ ô9ð U§\¡\ð °e·l±l÷ r&   r  c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚSwin2SROutputc                 óÌ   •— t         ‰| �  «        t        j                  t	        |j
                  |z  «      |«      | _        t        j                  |j                  «      | _	        y rO   )
rP   rQ   r   r—   r‡   r  r  rk   rl   rm   r  s      €r'   rQ   zSwin2SROutput.__init__Ø  sF   ø€ Ü‰ÑÔÜ—Y‘Yœs 6×#3Ñ#3°cÑ#9Ó:¸CÓ@ˆŒ
Ü—z‘z &×"<Ñ"<Ó=ˆ�r&   r   r?   c                 óJ   — | j                  |«      }| j                  |«      }|S rO   r  rU   s     r'   rV   zSwin2SROutput.forwardÝ  s$   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØÐr&   r  r_   s   @r'   r   r   ×  s#   ø„ ô>ð
 U§\¡\ð °e·l±l÷ r&   r   c                   óê   ‡ — e Zd Z	 dˆ fd„	Zdeeeef   eeef   f   fd„Zd„ Zd„ Z	 	 dde	j                  deeef   dee	j                     d	ee   dee	j                  e	j                  f   f
d
„Zˆ xZS )ÚSwin2SRLayerc           
      ón  •— t         ‰	| �  «        || _        | j                  |j                  |j                  f||f«      \  }}|d   | _        |d   | _        t        |||| j                  t        |t        j                  j                  «      r|n||f¬«      | _        t        j                  ||j                  ¬«      | _        |dkD  rt!        |«      nt        j"                  «       | _        t'        ||«      | _        t+        ||«      | _        t        j                  ||j                  ¬«      | _        y )Nr   r
  ©ÚepsrA   )rP   rQ   r‘   Ú_compute_window_shiftr3   Ú
shift_sizer  ry   rz   r{   r|   Ú	attentionr   r€   Úlayer_norm_epsÚlayernorm_beforerM   ÚIdentityrK   r  Úintermediater   rJ   Úlayernorm_after)
rR   rn   r’   r‘   rÕ   Údrop_path_rater)  r¼   r3   rS   s
            €r'   rQ   zSwin2SRLayer.__init__å  s  ø€ ô 	‰ÑÔØ 0ˆÔØ"&×"<Ñ"<Ø×Ñ ×!3Ñ!3Ð4°zÀ:Ð6Nó#
Ñˆ�Zð ' q™>ˆÔØ$ Q™-ˆŒÜ)ØØØØ×(Ñ(äÐ0´+·/±/×2JÑ2JÔKñ $:à(Ð*@ÐAô
ˆŒô !#§¡¨S°f×6KÑ6KÔ LˆÔØ<JÈSÒ<Pœ¨Ô8ÔVX×VaÑVaÓVcˆŒÜ/°¸Ó<ˆÔÜ# F¨CÓ0ˆŒÜ!Ÿ|™|¨C°V×5JÑ5JÔKˆÕr&   r?   c                 óè   — t        | j                  |«      D ��cg c]  \  }}||k  r|n|‘Œ }}}t        | j                  ||«      D ���cg c]  \  }}}||k  rdn|‘Œ }}}}||fS c c}}w c c}}}w ©Nr   )Úzipr‘   )rR   Útarget_window_sizeÚtarget_shift_sizeÚrÚwr3   Úsr)  s           r'   r(  z"Swin2SRLayer._compute_window_shiftþ  s~   € Ü69¸$×:OÑ:OÐQcÓ6d×e©d¨a°˜A šF‘q¨Ñ)ÐeˆÑeÜ8;¸D×<QÑ<QÐS^Ð`qÓ8r×sÐs©W¨Q°°1˜1 š6‘a qÑ(Ðsˆ
ÒsØ˜JÐ&Ð&ùó fùÜss   šA'ÁA-c           	      ó  — | j                   dkD  �ryt        j                  d||df|¬«      }t        d| j                   «      t        | j                   | j                    «      t        | j                    d «      f}t        d| j                   «      t        | j                   | j                    «      t        | j                    d «      f}d}|D ]  }|D ]  }	||d d …||	d d …f<   |dz  }Œ Œ t        || j                  «      }
|
j                  d| j                  | j                  z  «      }
|
j                  d«      |
j                  d«      z
  }|j                  |dk7  t        d«      «      j                  |dk(  t        d«      «      }|S d }|S )Nr   r   r¯   r,   r)   g      YÀrA   )
r)  r"   rh   Úslicer3   r9   r/   rÆ   Úmasked_fillr[   )rR   r5   r6   rB   Úimg_maskÚheight_slicesÚwidth_slicesÚcountÚheight_sliceÚwidth_sliceÚmask_windowsÚ	attn_masks               r'   Úget_attn_maskzSwin2SRLayer.get_attn_mask  s•  € Ø�?‰?˜QÓä—{‘{ A v¨u°aÐ#8ÀÔFˆHä�a˜$×*Ñ*Ð*Ó+Ü�t×'Ñ'Ð'¨$¯/©/Ð)9Ó:Ü�t—‘Ð&¨Ó-ðˆMô �a˜$×*Ñ*Ð*Ó+Ü�t×'Ñ'Ð'¨$¯/©/Ð)9Ó:Ü�t—‘Ð&¨Ó-ðˆLð
 ˆEØ -ò �Ø#/ò �KØ@E�HšQ ¨kº1Ð<Ñ=Ø˜Q‘J‘Eñðô
 ,¨H°d×6FÑ6FÓGˆLØ'×,Ñ,¨R°×1AÑ1AÀD×DTÑDTÑ1TÓUˆLØ$×.Ñ.¨qÓ1°L×4JÑ4JÈ1Ó4MÑMˆIØ!×-Ñ-¨i¸1©n¼eÀF»mÓL×XÑXÐYbÐfgÑYgÔinÐorÓisÓtˆIð Ðð ˆIØÐr&   c                 óþ   — | j                   || j                   z  z
  | j                   z  }| j                   || j                   z  z
  | j                   z  }ddd|d|f}t        j                  j                  ||«      }||fS r2  )r3   r   r›   rœ   )rR   r   r5   r6   Ú	pad_rightÚ
pad_bottomrž   s          r'   rŸ   zSwin2SRLayer.maybe_pad  s�   € Ø×%Ñ%¨°×0@Ñ0@Ñ(@Ñ@ÀD×DTÑDTÑTˆ	Ø×&Ñ&¨°$×2BÑ2BÑ)BÑBÀd×FVÑFVÑVˆ
Ø˜˜A˜y¨!¨ZÐ8ˆ
ÜŸ™×)Ñ)¨-¸ÓDˆØ˜jÐ(Ð(r&   r   r    rã   rä   c                 óâ  — |\  }}|j                  «       \  }}}	|}
|j                  ||||	«      }| j                  |||«      \  }}|j                  \  }}}}| j                  dkD  r1t        j                  || j                   | j                   fd¬«      }n|}t        || j                  «      }|j                  d| j                  | j                  z  |	«      }| j                  |||j                  ¬«      }|�|j                  |j                  «      }| j                  ||||¬«      }|d   }|j                  d| j                  | j                  |	«      }t        || j                  ||«      }| j                  dkD  r/t        j                  || j                  | j                  fd¬«      }n|}|d   dkD  xs |d   dkD  }|r|d d …d |…d |…d d …f   j                  «       }|j                  |||z  |	«      }| j!                  |«      }|
| j#                  |«      z   }| j%                  |«      }| j'                  |«      }|| j#                  | j)                  |«      «      z   }|r	||d	   f}|S |f}|S )
Nr   )r   r)   )ÚshiftsÚdimsr,   r¯   )rä   r   r+   r   )rÞ   r/   rŸ   r.   r)  r"   Úrollr9   r3   rD  rB   rË   rC   r*  r;   r1   r,  rK   r.  rJ   r/  )rR   r   r    rã   rä   r5   r6   r4   r†   ÚchannelsÚshortcutrž   Ú
height_padÚ	width_padÚshifted_hidden_statesÚhidden_states_windowsrC  Úattention_outputsr  Úattention_windowsÚshifted_windowsÚ
was_paddedÚlayer_outputÚlayer_outputss                           r'   rV   zSwin2SRLayer.forward&  s¢  € ð )‰ˆ�Ø"/×"4Ñ"4Ó"6Ñˆ
�A�xØ ˆð &×*Ñ*¨:°v¸uÀhÓOˆØ$(§N¡N°=À&È%Ó$PÑ!ˆ�zØ&3×&9Ñ&9Ñ#ˆˆ:�y !à�?‰?˜QÒÜ$)§J¡J¨}ÀtÇÁÐFVÐY]×YhÑYhÐXhÐEiÐpvÔ$wÑ!à$1Ð!ô !1Ð1FÈ×HXÑHXÓ YÐØ 5× :Ñ :¸2¸t×?OÑ?OÐRV×RbÑRbÑ?bÐdlÓ mÐØ×&Ñ& z°9ÀM×DWÑDWÐ&ÓXˆ	ØÐ Ø!Ÿ™Ð%:×%AÑ%AÓBˆIà ŸN™NØ! 9¨iÐK\ð +ó 
Ðð -¨QÑ/Ðà,×1Ñ1°"°d×6FÑ6FÈ×HXÑHXÐZbÓcÐÜ(Ð):¸D×<LÑ<LÈjÐZcÓdˆð �?‰?˜QÒÜ %§
¡
¨?ÀDÇOÁOÐUY×UdÑUdÐCeÐlrÔ sÑà /Ðà ‘] QÑ&Ò;¨*°Q©-¸!Ñ*;ˆ
ÙØ 1²!°W°f°W¸f¸u¸fÂaÐ2GÑ H× SÑ SÓ UÐà-×2Ñ2°:¸vÈ¹~ÈxÓXÐØ×-Ñ-Ð.?Ó@ˆØ  4§>¡>°-Ó#@Ñ@ˆà×(Ñ(¨Ó7ˆØ—{‘{ <Ó0ˆØ$ t§~¡~°d×6JÑ6JÈ<Ó6XÓ'YÑYˆá@Q˜Ð'8¸Ñ';Ð<ˆØÐð YeÐWfˆØÐr&   )rA   r   r   ©NF)r   r   r    rQ   r   r‡   r(  rD  rŸ   r"   r\   r   r#   rý   rV   r^   r_   s   @r'   r$  r$  ä  s°   ø„ àqrõLð2'ÈeÐTYÐZ]Ð_bÐZbÑTcÐejÐknÐpsÐksÑetÐTtÑNuó 'ò
ò8)ð 26Ø,1ñ8à—|‘|ð8ð    S ™/ð8ð ˜E×-Ñ-Ñ.ð	8ð
 $ D™>ð8ð 
ˆu�|‰|˜UŸ\™\Ð)Ñ	*÷8r&   r$  c                   óž   ‡ — e Zd ZdZd	ˆ fd„	Z	 	 d
dej                  deeef   de	ej                     de	e   deej                     f
d„Zˆ xZS )ÚSwin2SRStagezh
    This corresponds to the Residual Swin Transformer Block (RSTB) in the original implementation.
    c                 óæ  •— t         ‰	| �  «        || _        || _        t	        j
                  t        |«      D �cg c]*  }t        |||||dz  dk(  rdn|j                  dz  |¬«      ‘Œ, c}«      | _	        |j                  dk(  rt	        j                  ||ddd«      | _        n¨|j                  dk(  r™t	        j                  t	        j                  ||dz  ddd«      t	        j                  d	d
¬«      t	        j                  |dz  |dz  ddd«      t	        j                  d	d
¬«      t	        j                  |dz  |ddd«      «      | _        t        |d¬«      | _        t#        |«      | _        y c c}w )Nr)   r   )rn   r’   r‘   rÕ   r)  r¼   Ú1convr   r   Ú3convr*   çš™™™™™É?T©Únegative_sloper®   F)r‚   )rP   rQ   rn   r’   r   Ú
ModuleListÚranger$  r3   ÚlayersÚresi_connectionr~   ÚconvrÀ   Ú	LeakyReLUrc   Úpatch_embedr‰   Úpatch_unembed)
rR   rn   r’   r‘   ÚdepthrÕ   rK   r¼   ÚirS   s
            €r'   rQ   zSwin2SRStage.__init__f  sI  ø€ Ü‰ÑÔØˆŒØˆŒÜ—m‘mô ˜u›ö
ð ô Ø!ØØ%5Ø'Ø%&¨¡U¨a¢Z™q°f×6HÑ6HÈAÑ6MØ+Aöò
ó
ˆŒð ×!Ñ! WÒ,ÜŸ	™	 # s¨A¨q°!Ó4ˆD�IØ×#Ñ# wÒ.äŸ™Ü—	‘	˜#˜s a™x¨¨A¨qÓ1Ü—‘¨C¸Ô>Ü—	‘	˜# ™( C¨1¡H¨a°°AÓ6Ü—‘¨C¸Ô>Ü—	‘	˜# ™( C¨¨A¨qÓ1óˆDŒIô 2°&ÈEÔRˆÔä5°fÓ=ˆÕùò7
s   º/E.r   r    rã   rä   r?   c                 ó   — |}|\  }}t        | j                  «      D ]  \  }}	|�||   nd }
 |	|||
|«      }|d   }Œ  ||||f}| j                  ||«      }| j                  |«      }| j	                  |«      \  }}||z   }||f}|r|dd  z  }|S r  )Ú	enumeraterc  rh  re  rg  )rR   r   r    rã   rä   Úresidualr5   r6   rj  Úlayer_moduleÚlayer_head_maskrW  rr   r†   Ústage_outputss                  r'   rV   zSwin2SRStage.forwardˆ  sÐ   € ð !ˆà(‰ˆ�Ü(¨¯©Ó5ò 	-‰OˆAˆ|Ø.7Ð.C˜i¨šlÈˆOá(¨Ð8HÈ/Ð[lÓmˆMà)¨!Ñ,‰Mð	-ð $ U¨F°EÐ:Ðà×*Ñ*¨=Ð:JÓKˆØŸ	™	 -Ó0ˆØ×+Ñ+¨MÓ:Ñˆ�qà%¨Ñ0ˆà&Ð(9Ð:ˆáØ˜]¨1¨2Ð.Ñ.ˆMØÐr&   r  rX  )r   r   r    r!   rQ   r"   r\   r   r‡   r   r#   rý   rV   r^   r_   s   @r'   rZ  rZ  a  so   ø„ ñõ >ðL 26Ø,1ñà—|‘|ðð    S ™/ðð ˜E×-Ñ-Ñ.ð	ð
 $ D™>ðð 
ˆu�|‰|Ñ	÷r&   rZ  c                   ó    ‡ — e Zd Zˆ fd„Z	 	 	 	 d
dej
                  deeef   deej                     dee
   dee
   dee
   deeef   fd	„Zˆ xZS )ÚSwin2SREncoderc                 óv  •— t         ‰| �  «        t        |j                  «      | _        || _        t        j                  d|j                  t        |j                  «      «      D �cg c]  }|j                  «       ‘Œ }}t        j                  t        | j                  «      D �cg c]r  }t        ||j                  |d   |d   f|j                  |   |j                   |   |t        |j                  d | «      t        |j                  d |dz    «       d¬«      ‘Œt c}«      | _        d| _        y c c}w c c}w )Nr   r   )rn   r’   r‘   ri  rÕ   rK   r¼   F)rP   rQ   r  ÚdepthsÚ
num_stagesrn   r"   Úlinspacer0  rÏ   Úitemr   ra  rb  rZ  ri   rÕ   ÚstagesÚgradient_checkpointing)rR   rn   Ú	grid_sizerß   ÚdprÚ	stage_idxrS   s         €r'   rQ   zSwin2SREncoder.__init__©  s  ø€ Ü‰ÑÔÜ˜fŸm™mÓ,ˆŒØˆŒÜ!&§¡°°6×3HÑ3HÌ#ÈfÏmÉmÓJ\Ó!]Ö^˜Aˆq�v‰v�xÐ^ˆÐ^Ü—m‘mô "' t§¡Ó!7öð ô Ø!Ø×(Ñ(Ø&/°¡l°I¸a±LÐ%AØ Ÿ-™-¨	Ñ2Ø$×.Ñ.¨yÑ9Ø!¤# f§m¡m°J°YÐ&?Ó"@Ä3ÀvÇ}Á}ÐUdÐW`ÐcdÑWdÐGeÓCfÐgØ+,öòó
ˆŒð ',ˆÕ#ùò! _ùòs   Á'D1Â&A7D6r   r    rã   rä   Úoutput_hidden_statesÚreturn_dictr?   c                 ó¤  — d}|rdnd }|rdnd }	|r||fz  }t        | j                  «      D ]~  \  }
}|�||
   nd }| j                  r,| j                  r | j	                  |j
                  ||||«      }n |||||«      }|d   }|d   }|d   |d   f}||fz  }|r||fz  }|sŒw|	|dd  z  }	Œ€ |st        d„ |||	fD «       «      S t        |||	¬«      S )	Nr%   r   r   rç   r,   r)   c              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wrO   r%   )Ú.0Úvs     r'   ú	<genexpr>z)Swin2SREncoder.forward.<locals>.<genexpr>æ  s   è ø€ Òm˜qÐ_`Ñ_lœÑmùs   ‚Š©r   r   r   )rl  rx  ry  r>   Ú_gradient_checkpointing_funcÚ__call__Útupler   )rR   r   r    rã   rä   r}  r~  Úall_input_dimensionsÚall_hidden_statesÚall_self_attentionsrj  Ústage_modulero  rW  rr   s                  r'   rV   zSwin2SREncoder.forward¿  s6  € ð  "ÐÙ"6™B¸DÐÙ$5™b¸4ÐáØ -Ð!1Ñ1Ðä(¨¯©Ó5ò 	9‰OˆAˆ|Ø.7Ð.C˜i¨šlÈˆOà×*Ò*¨t¯}ª}Ø $× AÑ AØ ×)Ñ)¨=Ð:JÈOÐ]nó!‘ñ !-¨]Ð<LÈoÐ_pÓ q�à)¨!Ñ,ˆMØ -¨aÑ 0Ðà 1°"Ñ 5Ð7HÈÑ7LÐMÐØ Ð%5Ð$7Ñ7Ð á#Ø! mÐ%5Ñ5Ð!â Ø# }°Q°RÐ'8Ñ8Ñ#ð)	9ñ, ÜÑm ]Ð4EÐGZÐ$[ÔmÓmÐmä#Ø+Ø+Ø*ô
ð 	
r&   )NFFT)r   r   r    rQ   r"   r\   r   r‡   r   r#   rý   r   r   rV   r^   r_   s   @r'   rr  rr  ¨  s�   ø„ ô,ð4 26Ø,1Ø/4Ø&*ñ-
à—|‘|ð-
ð    S ™/ð-
ð ˜E×-Ñ-Ñ.ð	-
ð
 $ D™>ð-
ð ' t™nð-
ð ˜d‘^ð-
ð 
ˆuÐ*Ð*Ñ	+÷-
r&   rr  c                   ó&   — e Zd ZdZeZdZdZdZd„ Z	y)ÚSwin2SRPreTrainedModelz†
    An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
    models.
    Úswin2srro   Tc                 ó*  — t        |t        j                  t        j                  f«      r…t        j                  j
                  j                  |j                  j                  | j                  j                  ¬«       |j                  �%|j                  j                  j                  «        yyt        |t        j                  «      rJ|j                  j                  j                  «        |j                  j                  j                  d«       yy)zInitialize the weights)ÚstdNr³   )ry   r   r—   r~   r"   ÚinitÚtrunc_normal_ÚweightÚdatarn   Úinitializer_ranger–   Úzero_r€   Úfill_)rR   Úmodules     r'   Ú_init_weightsz$Swin2SRPreTrainedModel._init_weightsú  s®   € ä�fœrŸy™y¬"¯)©)Ð4Ô5Ü�H‰H�M‰M×'Ñ'¨¯©×(:Ñ(:ÀÇÁ×@]Ñ@]Ð'Ô^Ø�{‰{Ð&Ø—‘× Ñ ×&Ñ&Õ(ð 'ä˜¤§¡Ô-Ø�K‰K×Ñ×"Ñ"Ô$Ø�M‰M×Ñ×$Ñ$ SÕ)ð .r&   N)
r   r   r    r!   r   Úconfig_classÚbase_model_prefixÚmain_input_nameÚsupports_gradient_checkpointingr™  r%   r&   r'   r�  r�  ï  s$   „ ñð
 !€LØ!ÐØ$€OØ&*Ð#ó*r&   r�  aJ  
    This model is a PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) sub-class. Use
    it as a regular PyTorch Module and refer to the PyTorch documentation for all matter related to general usage and
    behavior.

    Parameters:
        config ([`Swin2SRConfig`]): Model configuration class with all the parameters of the model.
            Initializing with a config file does not load the weights associated with the model, only the
            configuration. Check out the [`~PreTrainedModel.from_pretrained`] method to load the model weights.
aN  
    Args:
        pixel_values (`torch.FloatTensor` of shape `(batch_size, num_channels, height, width)`):
            Pixel values. Pixel values can be obtained using [`AutoImageProcessor`]. See
            [`Swin2SRImageProcessor.__call__`] for details.
        head_mask (`torch.FloatTensor` of shape `(num_heads,)` or `(num_layers, num_heads)`, *optional*):
            Mask to nullify selected heads of the self-attention modules. Mask values selected in `[0, 1]`:

            - 1 indicates the head is **not masked**,
            - 0 indicates the head is **masked**.

        output_attentions (`bool`, *optional*):
            Whether or not to return the attentions tensors of all attention layers. See `attentions` under returned
            tensors for more detail.
        output_hidden_states (`bool`, *optional*):
            Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors for
            more detail.
        return_dict (`bool`, *optional*):
            Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple.
zaThe bare Swin2SR Model transformer outputting raw hidden-states without any specific head on top.c                   óÚ   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Z ee«       e	e
eede¬«      	 	 	 	 ddej                  deej                     d	ee   d
ee   dee   deeef   fd„«       «       Zˆ xZS )ÚSwin2SRModelc                 ó$  •— t         ‰| �  |«       || _        |j                  dk(  r9|j                  dk(  r*t        j                  g d¢«      j                  dddd«      }nt        j                  dddd«      }| j                  d|d¬«       |j                  | _
        t        j                  |j                  |j                  ddd«      | _        t        |«      | _        t#        || j                   j$                  j&                  ¬«      | _        t        j*                  |j                  |j,                  ¬«      | _        t1        |«      | _        t        j                  |j                  |j                  ddd«      | _        | j7                  «        y )	Nr   )gšwœ¢#¹Ü?gï8EGrùÛ?gB`åÐ"ÛÙ?r   ÚmeanFrµ   )rz  r&  )rP   rQ   rn   r7   Únum_channels_outr"   Útensorr/   rh   rÎ   Ú	img_ranger   r~   ri   Úfirst_convolutionra   rq   rr  rd   r}   Úencoderr€   r+  r�   r‰   rh  Úconv_after_bodyÚ	post_init)rR   rn   r¡  rS   s      €r'   rQ   zSwin2SRModel.__init__+  s8  ø€ Ü‰Ñ˜Ô ØˆŒà×Ñ !Ò#¨×(?Ñ(?À1Ò(DÜ—<‘<Ò 8Ó9×>Ñ>¸qÀ!ÀQÈÓJ‰Dä—;‘;˜q ! Q¨Ó*ˆDØ×Ñ˜V T°eÐÔ<à×)Ñ)ˆŒä!#§¡¨6×+>Ñ+>À×@PÑ@PÐRSÐUVÐXYÓ!ZˆÔÜ+¨FÓ3ˆŒÜ% f¸¿¹×8XÑ8X×8kÑ8kÔlˆŒäŸ™ f×&6Ñ&6¸F×<QÑ<QÔRˆŒÜ5°fÓ=ˆÔÜ!Ÿy™y¨×)9Ñ)9¸6×;KÑ;KÈQÐPQÐSTÓUˆÔð 	�‰Õr&   c                 ó.   — | j                   j                  S rO   )rq   rd   rY   s    r'   Úget_input_embeddingsz!Swin2SRModel.get_input_embeddingsB  s   € Ø�‰×/Ñ/Ð/r&   c                 ó˜   — |j                  «       D ]7  \  }}| j                  j                  |   j                  j	                  |«       Œ9 y)z�
        Prunes heads of the model. heads_to_prune: dict of {layer_num: list of heads to prune in this layer} See base
        class PreTrainedModel
        N)Úitemsr¦  Úlayerr*  r  )rR   Úheads_to_pruner­  r  s       r'   Ú_prune_headszSwin2SRModel._prune_headsE  sE   € ð
 +×0Ñ0Ó2ò 	C‰LˆE�5Ø�L‰L×Ñ˜uÑ%×/Ñ/×;Ñ;¸EÕBñ	Cr&   c                 ó,  — |j                  «       \  }}}}| j                  j                  }|||z  z
  |z  }|||z  z
  |z  }t        j                  j                  |d|d|fd«      }| j                  j                  |«      }||z
  | j                  z  }|S )Nr   Úreflect)	rÞ   rn   r3   r   r›   rœ   r¡  Útype_asr¤  )	rR   ro   r†   r5   r6   r3   Úmodulo_pad_heightÚmodulo_pad_widthr¡  s	            r'   Úpad_and_normalizezSwin2SRModel.pad_and_normalizeM  s§   € Ø*×/Ñ/Ó1Ñˆˆ1ˆf�eð —k‘k×-Ñ-ˆØ(¨6°KÑ+?Ñ?À;ÑNÐØ'¨%°+Ñ*=Ñ=ÀÑLÐÜ—}‘}×(Ñ(¨¸Ð;KÈQÐPaÐ7bÐdmÓnˆð �y‰y× Ñ  Ó.ˆØ$ tÑ+¨t¯~©~Ñ=ˆàÐr&   Úvision)Ú
checkpointÚoutput_typerš  ÚmodalityÚexpected_outputro   rã   rä   r}  r~  r?   c                 ó’  — |�|n| j                   j                  }|�|n| j                   j                  }|�|n| j                   j                  }| j	                  |t        | j                   j                  «      «      }|j                  \  }}}}| j                  |«      }| j                  |«      }	| j                  |	«      \  }
}| j                  |
|||||¬«      }|d   }| j                  |«      }| j                  |||f«      }| j                  |«      |	z   }|s|f|dd  z   }|S t        ||j                   |j"                  ¬«      S )N©rã   rä   r}  r~  r   r   r„  )rn   rä   r}  Úuse_return_dictÚget_head_maskr  rt  r.   rµ  r¥  rq   r¦  r�   rh  r§  r
   r   r   )rR   ro   rã   rä   r}  r~  r†   r5   r6   rq   Úembedding_outputr    Úencoder_outputsÚsequence_outputrJ   s                  r'   rV   zSwin2SRModel.forward\  sh  € ð  2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆð ×&Ñ& y´#°d·k±k×6HÑ6HÓ2IÓJˆ	à*×0Ñ0Ñˆˆ1ˆf�eð ×-Ñ-¨lÓ;ˆà×+Ñ+¨LÓ9ˆ
Ø-1¯_©_¸ZÓ-HÑ*ÐÐ*àŸ,™,ØØØØ/Ø!5Ø#ð 'ó 
ˆð *¨!Ñ,ˆØŸ.™.¨Ó9ˆà×,Ñ,¨_¸vÀu¸oÓNˆØ×.Ñ.¨Ó?À*ÑLˆáØ%Ð'¨/¸!¸"Ð*=Ñ=ˆFàˆMäØ-Ø)×7Ñ7Ø&×1Ñ1ô
ð 	
r&   )NNNN)r   r   r    rQ   rª  r¯  rµ  r   ÚSWIN2SR_INPUTS_DOCSTRINGr   Ú_CHECKPOINT_FOR_DOCr
   Ú_CONFIG_FOR_DOCÚ_EXPECTED_OUTPUT_SHAPEr"   r#   r   rý   r   r   rV   r^   r_   s   @r'   rŸ  rŸ  &  s¾   ø„ ô
ò.0òCòñ +Ð+CÓDÙØ&Ø#Ø$ØØ.ôð 26Ø,0Ø/3Ø&*ñ5
à×'Ñ'ð5
ð ˜E×-Ñ-Ñ.ð5
ð $ D™>ð	5
ð
 ' t™nð5
ð ˜d‘^ð5
ð 
ˆu�oÐ%Ñ	&ò5
óó Eô5
r&   rŸ  c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚUpsamplezÁUpsample module.

    Args:
        scale (`int`):
            Scale factor. Supported scales: 2^n and 3.
        num_features (`int`):
            Channel number of intermediate features.
    c                 óî  •— t         ‰| �  «        || _        ||dz
  z  dk(  r…t        t	        t        j                  |d«      «      «      D ]Y  }| j                  d|› �t        j                  |d|z  ddd«      «       | j                  d|› �t        j                  d«      «       Œ[ y |dk(  r<t        j                  |d|z  ddd«      | _        t        j                  d«      | _        y t        d	|› d
�«      ‚)Nr   r   r)   Úconvolution_r*   r   Úpixelshuffle_é	   zScale z/ is not supported. Supported scales: 2^n and 3.)rP   rQ   Úscalerb  r‡   rÊ   r½   Ú
add_moduler   r~   ÚPixelShuffleÚconvolutionÚpixelshuffler¸   )rR   rÌ  Únum_featuresrj  rS   s       €r'   rQ   zUpsample.__init__¦  sæ   ø€ Ü‰ÑÔàˆŒ
Ø�U˜Q‘YÑ AÒ%äœ3œtŸx™x¨¨qÓ1Ó2Ó3ò I�Ø—‘ ,¨q¨cÐ 2´B·I±I¸lÈAÐP\ÑL\Ð^_ÐabÐdeÓ4fÔgØ—‘ -°¨sÐ 3´R·_±_ÀQÓ5GÕHñIð �aŠZÜ!Ÿy™y¨°q¸<Ñ7GÈÈAÈqÓQˆDÔÜ "§¡°Ó 2ˆDÕä˜v e WÐ,[Ð\Ó]Ð]r&   c                 ó€  — | j                   | j                   dz
  z  dk(  rmt        t        t        j                  | j                   d«      «      «      D ]6  } | j                  d|› �«      |«      } | j                  d|› �«      |«      }Œ8 |S | j                   dk(  r"| j                  |«      }| j                  |«      }|S )Nr   r   r)   rÉ  rÊ  r   )rÌ  rb  r‡   rÊ   r½   Ú__getattr__rÏ  rÐ  )rR   Úhidden_staterj  s      r'   rV   zUpsample.forwardµ  s¼   € Ø�J‰J˜$Ÿ*™* q™.Ñ)¨aÒ/Üœ3œtŸx™x¨¯
©
°AÓ6Ó7Ó8ò S�ØC˜t×/Ñ/°,¸q¸cÐ0BÓCÀLÓQ�ØD˜t×/Ñ/°-À¸sÐ0CÓDÀ\ÓR‘ðSð Ðð	 �Z‰Z˜1Š_Ø×+Ñ+¨LÓ9ˆLØ×,Ñ,¨\Ó:ˆLàÐr&   rŽ   r_   s   @r'   rÇ  rÇ  œ  s   ø„ ñô^ö
r&   rÇ  c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚUpsampleOneStepa�  UpsampleOneStep module (the difference with Upsample is that it always only has 1conv + 1pixelshuffle)

    Used in lightweight SR to save parameters.

    Args:
        scale (int):
            Scale factor. Supported scales: 2^n and 3.
        in_channels (int):
            Channel number of intermediate features.
        out_channels (int):
            Channel number of output features.
    c                 óž   •— t         ‰| �  «        t        j                  ||dz  |z  ddd«      | _        t        j
                  |«      | _        y )Nr)   r   r   )rP   rQ   r   r~   re  rÎ  Úpixel_shuffle)rR   rÌ  Úin_channelsÚout_channelsrS   s       €r'   rQ   zUpsampleOneStep.__init__Ð  s@   ø€ Ü‰ÑÔä—I‘I˜k¨E°1©H¸Ñ+DÀaÈÈAÓNˆŒ	ÜŸ_™_¨UÓ3ˆÕr&   c                 óJ   — | j                  |«      }| j                  |«      }|S rO   )re  rØ  )rR   rß   s     r'   rV   zUpsampleOneStep.forwardÖ  s$   € Ø�I‰I�a‹LˆØ×Ñ˜qÓ!ˆàˆr&   rŽ   r_   s   @r'   rÖ  rÖ  Â  s   ø„ ñô4ör&   rÖ  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚPixelShuffleUpsamplerc                 ó.  •— t         ‰| �  «        t        j                  |j                  |ddd«      | _        t        j                  d¬«      | _        t        |j                  |«      | _
        t        j                  ||j                  ddd«      | _        y ©Nr   r   Tr­   )rP   rQ   r   r~   ri   Úconv_before_upsamplerf  Ú
activationrÇ  ÚupscaleÚupsampler¢  Úfinal_convolution©rR   rn   rÑ  rS   s      €r'   rQ   zPixelShuffleUpsampler.__init__Þ  ss   ø€ Ü‰ÑÔÜ$&§I¡I¨f×.>Ñ.>ÀÈaÐQRÐTUÓ$VˆÔ!ÜŸ,™,¨tÔ4ˆŒÜ  §¡°Ó>ˆŒÜ!#§¡¨<¸×9PÑ9PÐRSÐUVÐXYÓ!ZˆÕr&   c                 óŽ   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }|S rO   )rà  rá  rã  rä  )rR   rÁ  rß   s      r'   rV   zPixelShuffleUpsampler.forwardå  sC   € Ø×%Ñ% oÓ6ˆØ�O‰O˜AÓˆØ�M‰M˜!ÓˆØ×"Ñ" 1Ó%ˆàˆr&   ©r   r   r    rQ   rV   r^   r_   s   @r'   rÝ  rÝ  Ý  s   ø„ ô[ör&   rÝ  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚNearestConvUpsamplerc                 ó  •— t         ‰| �  «        |j                  dk7  rt        d«      ‚t	        j
                  |j                  |ddd«      | _        t	        j                  d¬«      | _	        t	        j
                  ||ddd«      | _
        t	        j
                  ||ddd«      | _        t	        j
                  ||ddd«      | _        t	        j
                  ||j                  ddd«      | _        t	        j                  dd¬«      | _        y )	Nr*   zNThe nearest+conv upsampler only supports an upscale factor of 4 at the moment.r   r   Tr­   r^  r_  )rP   rQ   râ  r¸   r   r~   ri   rà  rf  rá  Úconv_up1Úconv_up2Úconv_hrr¢  rä  Úlrelurå  s      €r'   rQ   zNearestConvUpsampler.__init__ï  sÓ   ø€ Ü‰ÑÔØ�>‰>˜QÒÜÐmÓnÐnä$&§I¡I¨f×.>Ñ.>ÀÈaÐQRÐTUÓ$VˆÔ!ÜŸ,™,¨tÔ4ˆŒÜŸ	™	 ,°¸aÀÀAÓFˆŒÜŸ	™	 ,°¸aÀÀAÓFˆŒÜ—y‘y ¨|¸QÀÀ1ÓEˆŒÜ!#§¡¨<¸×9PÑ9PÐRSÐUVÐXYÓ!ZˆÔÜ—\‘\°¸dÔCˆ�
r&   c           	      óÐ  — | j                  |«      }| j                  |«      }| j                  | j                  t        j
                  j                  j                  |dd¬«      «      «      }| j                  | j                  t        j
                  j                  j                  |dd¬«      «      «      }| j                  | j                  | j                  |«      «      «      }|S )Nr)   Únearest)Úscale_factorÚmode)rà  rá  rî  rë  r"   r   r›   Úinterpolaterì  rä  rí  )rR   rÁ  Úreconstructions      r'   rV   zNearestConvUpsampler.forwardü  s¼   € Ø×3Ñ3°OÓDˆØŸ/™/¨/Ó:ˆØŸ*™*Ø�M‰Mœ%Ÿ(™(×-Ñ-×9Ñ9¸/ÐXYÐ`iÐ9ÓjÓkó
ˆð Ÿ*™*Ø�M‰Mœ%Ÿ(™(×-Ñ-×9Ñ9¸/ÐXYÐ`iÐ9ÓjÓkó
ˆð ×/Ñ/°·
±
¸4¿<¹<ÈÓ;XÓ0YÓZˆØÐr&   rç  r_   s   @r'   ré  ré  î  s   ø„ ôDö
r&   ré  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚPixelShuffleAuxUpsamplerc           	      ó|  •— t         ‰| �  «        |j                  | _        t        j                  |j
                  |ddd«      | _        t        j                  |j                  |ddd«      | _        t        j                  d¬«      | _
        t        j                  ||j
                  ddd«      | _        t        j                  t        j                  d|ddd«      t        j                  d¬«      «      | _        t        |j                  |«      | _        t        j                  ||j                   ddd«      | _        y rß  )rP   rQ   râ  r   r~   r7   Úconv_bicubicri   rà  rf  rá  Úconv_auxrÀ   Úconv_after_auxrÇ  rã  r¢  rä  rå  s      €r'   rQ   z!PixelShuffleAuxUpsampler.__init__
  sì   ø€ Ü‰ÑÔà—~‘~ˆŒÜŸI™I f×&9Ñ&9¸<ÈÈAÈqÓQˆÔÜ$&§I¡I¨f×.>Ñ.>ÀÈaÐQRÐTUÓ$VˆÔ!ÜŸ,™,¨tÔ4ˆŒÜŸ	™	 ,°×0CÑ0CÀQÈÈ1ÓMˆŒÜ Ÿm™m¬B¯I©I°a¸ÀqÈ!ÈQÓ,OÔQS×Q]ÑQ]ÐfjÔQkÓlˆÔÜ  §¡°Ó>ˆŒÜ!#§¡¨<¸×9PÑ9PÐRSÐUVÐXYÓ!ZˆÕr&   c                 ó¢  — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j	                  |«      }| j                  |«      d d …d d …d || j                  z  …d || j                  z  …f   |d d …d d …d || j                  z  …d || j                  z  …f   z   }| j                  |«      }||fS rO   )rø  rà  rá  rù  rú  rã  râ  rä  )rR   rÁ  Úbicubicr5   r6   Úauxrô  s          r'   rV   z PixelShuffleAuxUpsampler.forward  sà   € Ø×#Ñ# GÓ,ˆØ×3Ñ3°OÓDˆØŸ/™/¨/Ó:ˆØ�m‰m˜OÓ,ˆØ×-Ñ-¨cÓ2ˆà�M‰M˜/Ó*ª1ªaÐ1H°6¸D¿L¹LÑ3HÐ1HÐJ`ÈEÐTX×T`ÑT`ÑL`ÐJ`Ð+`ÑaØ’ašÐ3˜f t§|¡|Ñ3Ð3Ð5K°u¸t¿|¹|Ñ7KÐ5KÐKÑLñMð 	ð ×/Ñ/°Ó@ˆà˜sÐ"Ð"r&   rç  r_   s   @r'   rö  rö  	  s   ø„ ô
[ö#r&   rö  zm
    Swin2SR Model transformer with an upsampler head on top for image super resolution and restoration.
    c                   óê   ‡ — e Zd Zˆ fd„Z ee«       eee¬«      	 	 	 	 	 	 dde	e
j                     de	e
j                     de	e
j                     de	e   de	e   de	e   d	eeef   fd
„«       «       Zˆ xZS )ÚSwin2SRForImageSuperResolutionc                 óV  •— t         ‰| �  |«       t        |«      | _        |j                  | _        |j
                  | _        d}| j                  dk(  rt        ||«      | _        n´| j                  dk(  rt        ||«      | _        n“| j                  dk(  r1t        |j
                  |j                  |j                  «      | _        nS| j                  dk(  rt        ||«      | _        n2t        j                  |j                  |j                  ddd«      | _        | j!                  «        y )Né@   rÐ  Úpixelshuffle_auxÚpixelshuffledirectúnearest+convr   r   )rP   rQ   rŸ  rŽ  Ú	upsamplerrâ  rÝ  rã  rö  rÖ  ri   r¢  ré  r   r~   rä  r¨  rå  s      €r'   rQ   z'Swin2SRForImageSuperResolution.__init__,  sí   ø€ Ü‰Ñ˜Ô ä# FÓ+ˆŒØ×)Ñ)ˆŒØ—~‘~ˆŒð ˆØ�>‰>˜^Ò+Ü1°&¸,ÓGˆD�MØ�^‰^Ð1Ò1Ü4°V¸\ÓJˆD�MØ�^‰^Ð3Ò3ä+¨F¯N©N¸F×<LÑ<LÈf×NeÑNeÓfˆD�MØ�^‰^˜~Ò-ä0°¸ÓFˆD�Mô &(§Y¡Y¨v×/?Ñ/?À×AXÑAXÐZ[Ð]^Ð`aÓ%bˆDÔ"ð 	�‰Õr&   )r¸  rš  ro   rã   Úlabelsrä   r}  r~  r?   c                 óš  — |�|n| j                   j                  }d}|�t        d«      ‚|j                  dd \  }}	| j                   j                  dk(  r?t
        j                  j                  ||| j                  z  |	| j                  z  fdd¬«      }
| j                  |||||¬«      }|d	   }| j                  d
v r| j                  |«      }nk| j                  dk(  rH| j                  |
||	«      \  }}|| j                  j                  z  | j                  j                  z   }n|| j                  |«      z   }|| j                  j                  z  | j                  j                  z   }|dd…dd…d|| j                  z  …d|	| j                  z  …f   }|s|f|dd z   }|�|f|z   S |S t        |||j                  |j                   ¬«      S )a�  
        Returns:

        Example:
         ```python
         >>> import torch
         >>> import numpy as np
         >>> from PIL import Image
         >>> import requests

         >>> from transformers import AutoImageProcessor, Swin2SRForImageSuperResolution

         >>> processor = AutoImageProcessor.from_pretrained("caidas/swin2SR-classical-sr-x2-64")
         >>> model = Swin2SRForImageSuperResolution.from_pretrained("caidas/swin2SR-classical-sr-x2-64")

         >>> url = "https://huggingface.co/spaces/jjourney1125/swin2sr/resolve/main/samples/butterfly.jpg"
         >>> image = Image.open(requests.get(url, stream=True).raw)
         >>> # prepare image for the model
         >>> inputs = processor(image, return_tensors="pt")

         >>> # forward pass
         >>> with torch.no_grad():
         ...     outputs = model(**inputs)

         >>> output = outputs.reconstruction.data.squeeze().float().cpu().clamp_(0, 1).numpy()
         >>> output = np.moveaxis(output, source=0, destination=-1)
         >>> output = (output * 255.0).round().astype(np.uint8)  # float32 to uint8
         >>> # you can visualize `output` with `Image.fromarray`
         ```Nz'Training is not supported at the momentr)   r  rü  F)rÞ   rò  Úalign_cornersr¼  r   )rÐ  r  r  r   )Úlossrô  r   r   )rn   r½  ÚNotImplementedErrorr.   r  r   r›   ró  râ  rŽ  rã  r¤  r¡  rä  r   r   r   )rR   ro   rã   r  rä   r}  r~  r	  r5   r6   rü  rû   rÁ  rô  rý  rJ   s                   r'   rV   z&Swin2SRForImageSuperResolution.forwardF  sé  € ðP &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆàˆØÐÜ%Ð&OÓPÐPà$×*Ñ*¨1¨2Ð.‰ˆ�à�;‰;× Ñ Ð$6Ò6Ü—m‘m×/Ñ/ØØ˜tŸ|™|Ñ+¨U°T·\±\Ñ-AÐBØØ#ð	 0ó ˆGð —,‘,ØØØ/Ø!5Ø#ð ó 
ˆð " !™*ˆà�>‰>ÐSÑSØ!Ÿ]™]¨?Ó;‰NØ�^‰^Ð1Ò1Ø"&§-¡-°ÀÈ&ÐRWÓ"XÑˆN˜CØ˜Ÿ™×.Ñ.Ñ.°·±×1BÑ1BÑB‰Cà)¨D×,BÑ,BÀ?Ó,SÑSˆNà'¨$¯,©,×*@Ñ*@Ñ@À4Ç<Á<×CTÑCTÑTˆØ'ªª1Ð.E°¸¿¹Ñ0EÐ.EÐG]ÈÐQU×Q]ÑQ]ÑI]ÐG]Ð(]Ñ^ˆáØ$Ð&¨°°¨Ñ4ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä)ØØ)Ø!×/Ñ/Ø×)Ñ)ô	
ð 	
r&   )NNNNNN)r   r   r    rQ   r   rÂ  r   r   rÄ  r   r"   r#   Ú
LongTensorrý   r   r   rV   r^   r_   s   @r'   rÿ  rÿ  %  sÎ   ø„ ôñ4 +Ð+CÓDÙÐ+EÐTcÔdð 59Ø15Ø-1Ø,0Ø/3Ø&*ñT
à˜u×0Ñ0Ñ1ðT
ð ˜E×-Ñ-Ñ.ðT
ð ˜×)Ñ)Ñ*ð	T
ð
 $ D™>ðT
ð ' t™nðT
ð ˜d‘^ðT
ð 
ˆuÐ0Ð0Ñ	1òT
ó eó EôT
r&   rÿ  )rÿ  rŸ  r�  )rA   F)Gr!   Úcollections.abcrz   rÊ   Údataclassesr   Útypingr   r   r   r"   Útorch.utils.checkpointr   Úactivationsr	   Úmodeling_outputsr
   r   Úmodeling_utilsr   Úpytorch_utilsr   r   r   Úutilsr   r   r   r   r   r   Úconfiguration_swin2srr   Ú
get_loggerr   ÚloggerrÄ  rÃ  rÅ  r   r9   r;   r\   r[   rý   rK   r§   rM   ra   rc   r‰   r�   r©   rÿ   r  r  r   r$  rZ  rr  r�  ÚSWIN2SR_START_DOCSTRINGrÂ  rŸ  rÇ  rÖ  rÝ  ré  rö  rÿ  Ú__all__r%   r&   r'   ú<module>r     sg  ðñ )ã Û Ý !ß )Ñ )ã Û Ý å !ß KÝ -ß [Ñ [÷÷ õ 1ð 
ˆ×	Ñ	˜HÓ	%€ð "€ð :Ð Ú+Ð ð ô:˜;ó :ó ð:ò4	òñ�U—\‘\ð ¨eð ÀTð ÐV[×VbÑVbó ô*-�b—i‘iô -ô-˜Ÿ	™	ô -ô<-˜RŸY™Yô -ô6˜rŸy™yô ô3˜"Ÿ)™)ô 3ôn~˜2Ÿ9™9ô ~ôD
˜Ÿ	™	ô 
ô+�r—y‘yô +ô^˜"Ÿ)™)ô ô 	�B—I‘Iô 	ôz�2—9‘9ô zôzD�2—9‘9ô DôND
�R—Y‘Yô D
ôN*˜_ô *ð,	Ð ðÐ ñ, ØgØóôo
Ð)ó o
ó	ðo
ôd#ˆr�y‰yô #ôL�b—i‘iô ô6˜BŸI™Iô ô"˜2Ÿ9™9ô ô6#˜rŸy™yô #ñ8 ðð ó	ôq
Ð%;ó q
óðq
òh W�r&   